helper.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package cert
  2. import (
  3. "crypto/x509"
  4. "encoding/pem"
  5. "os"
  6. )
  7. func IsCertificate(pemStr string) bool {
  8. block, _ := pem.Decode([]byte(pemStr))
  9. if block == nil {
  10. return false
  11. }
  12. _, err := x509.ParseCertificate(block.Bytes)
  13. return err == nil
  14. }
  15. func IsPrivateKey(pemStr string) bool {
  16. block, _ := pem.Decode([]byte(pemStr))
  17. if block == nil {
  18. return false
  19. }
  20. _, errRSA := x509.ParsePKCS1PrivateKey(block.Bytes)
  21. if errRSA == nil {
  22. return true
  23. }
  24. _, errECDSA := x509.ParseECPrivateKey(block.Bytes)
  25. if errECDSA == nil {
  26. return true
  27. }
  28. _, errPKC := x509.ParsePKCS8PrivateKey(block.Bytes)
  29. return errPKC == nil
  30. }
  31. // IsCertificatePath checks if the file at the given path is a certificate or not exists.
  32. func IsCertificatePath(path string) bool {
  33. if path == "" {
  34. return false
  35. }
  36. _, err := os.Stat(path)
  37. if err != nil {
  38. if os.IsNotExist(err) {
  39. return true
  40. }
  41. return false
  42. }
  43. bytes, err := os.ReadFile(path)
  44. if err != nil {
  45. return false
  46. }
  47. return IsCertificate(string(bytes))
  48. }
  49. // IsPrivateKeyPath checks if the file at the given path is a private key or not exists.
  50. func IsPrivateKeyPath(path string) bool {
  51. if path == "" {
  52. return false
  53. }
  54. _, err := os.Stat(path)
  55. if err != nil {
  56. if os.IsNotExist(err) {
  57. return true
  58. }
  59. return false
  60. }
  61. bytes, err := os.ReadFile(path)
  62. if err != nil {
  63. return false
  64. }
  65. return IsPrivateKey(string(bytes))
  66. }