github.com/brimstone/sbuca@v0.0.0-20151202175429-8691d9eba5c5/x509util/x509util.go (about) 1 package x509util 2 3 import ( 4 "crypto/rsa" 5 "crypto/x509" 6 "encoding/pem" 7 "errors" 8 "fmt" 9 "io/ioutil" 10 ) 11 12 func PemStringToPemBlock(pemString string) (*pem.Block, error) { 13 14 pemBlock, _ := pem.Decode([]byte(pemString)) 15 if pemBlock == nil { 16 return nil, errors.New("pem decode failed") 17 } 18 19 return pemBlock, nil 20 } 21 func PemFileToPemBlock(filename string) (*pem.Block, error) { 22 certData, err := ioutil.ReadFile(filename) 23 if err != nil { 24 return nil, err 25 } 26 27 pemBlock, _ := pem.Decode(certData) 28 if pemBlock == nil { 29 return nil, errors.New("pem decode failed") 30 } 31 32 return pemBlock, nil 33 } 34 35 func PemStringToCertificate(pemString string) (*x509.Certificate, error) { 36 37 pemBlock, err := PemStringToPemBlock(pemString) 38 if err != nil { 39 return nil, err 40 } 41 42 cert, err := x509.ParseCertificate(pemBlock.Bytes) 43 if err != nil { 44 return nil, err 45 } 46 47 return cert, nil 48 } 49 func PemFileToCertificate(filename string) (*x509.Certificate, error) { 50 51 pemBlock, err := PemFileToPemBlock(filename) 52 if err != nil { 53 return nil, err 54 } 55 56 cert, err := x509.ParseCertificate(pemBlock.Bytes) 57 if err != nil { 58 return nil, err 59 } 60 61 return cert, nil 62 } 63 func PemStringToCertificateRequest(pemString string) (*x509.CertificateRequest, error) { 64 65 pemBlock, err := PemStringToPemBlock(pemString) 66 if err != nil { 67 return nil, err 68 } 69 70 cert, err := x509.ParseCertificateRequest(pemBlock.Bytes) 71 if err != nil { 72 return nil, err 73 } 74 75 return cert, nil 76 } 77 func PemFileToCertificateRequest(filename string) (*x509.CertificateRequest, error) { 78 79 pemBlock, err := PemFileToPemBlock(filename) 80 if err != nil { 81 return nil, err 82 } 83 84 cert, err := x509.ParseCertificateRequest(pemBlock.Bytes) 85 if err != nil { 86 return nil, err 87 } 88 89 return cert, nil 90 } 91 func PemStringToRsaPrivateKey(pemString string) (*rsa.PrivateKey, error) { 92 93 pemBlock, err := PemStringToPemBlock(pemString) 94 if err != nil { 95 return nil, err 96 } 97 98 cert, err := x509.ParsePKCS1PrivateKey(pemBlock.Bytes) 99 if err != nil { 100 return nil, err 101 } 102 103 return cert, nil 104 } 105 func PemFileToRsaPrivateKey(filename string) (*rsa.PrivateKey, error) { 106 107 pemBlock, err := PemFileToPemBlock(filename) 108 if err != nil { 109 return nil, err 110 } 111 112 cert, err := x509.ParsePKCS1PrivateKey(pemBlock.Bytes) 113 if err != nil { 114 return nil, err 115 } 116 117 return cert, nil 118 } 119 120 func main() { 121 cert, err := PemFileToCertificate("ca.crt") 122 if err != nil { 123 panic(err) 124 } 125 fmt.Println(cert.Version) 126 127 certData, err := ioutil.ReadFile("ca.crt") 128 if err != nil { 129 panic(err) 130 } 131 cert2, err := PemStringToCertificate(string(certData)) 132 if err != nil { 133 panic(err) 134 } 135 fmt.Println(cert2.Version) 136 }