github.com/mundipagg/boleto-api@v0.0.0-20230620145841-3f9ec742599f/certificate/certificateTypes.go (about) 1 package certificate 2 3 import ( 4 "bytes" 5 "crypto/rsa" 6 "crypto/x509" 7 "encoding/pem" 8 9 pkcs122 "software.sslmate.com/src/go-pkcs12" 10 ) 11 12 const ( 13 icp = "ICP" 14 ssl = "SSL" 15 ) 16 17 type TLSCertificate struct { 18 Crt string 19 Key string 20 } 21 22 type ICPCertificate struct { 23 Name string 24 RsaPrivateKey interface{} 25 Certificate *x509.Certificate 26 } 27 28 func GetICPCertificate(name string, pfxBytes []byte, pass string) (ICPCertificate, error) { 29 rsaPrivateKey, certificate, _, err := pkcs122.DecodeChain(pfxBytes, pass) 30 if err != nil { 31 return ICPCertificate{}, err 32 } 33 34 iCPCertificate := new(ICPCertificate) 35 iCPCertificate.Name = name 36 iCPCertificate.RsaPrivateKey = rsaPrivateKey 37 iCPCertificate.Certificate = certificate 38 39 return *iCPCertificate, nil 40 } 41 42 type SSLCertificate struct { 43 Name string 44 PemData []byte 45 } 46 47 func GetSSLCertificate(name string, pfxBytes []byte, pass string) (SSLCertificate, error) { 48 pemData, err := localToPEM(pfxBytes, pass) 49 if err != nil { 50 return SSLCertificate{}, err 51 } 52 53 sslCertificate := new(SSLCertificate) 54 sslCertificate.Name = name 55 sslCertificate.PemData = pemData 56 57 return *sslCertificate, nil 58 } 59 60 func localToPEM(pfxBytes []byte, pass string) ([]byte, error) { 61 privateKey, certificate, caChain, err := pkcs122.DecodeChain(pfxBytes, pass) 62 63 if err != nil { 64 return nil, err 65 } 66 67 var pemBytes bytes.Buffer 68 err = pem.Encode(&pemBytes, &pem.Block{Type: "PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(privateKey.(*rsa.PrivateKey))}) 69 if err != nil { 70 return nil, err 71 } 72 73 err = pem.Encode(&pemBytes, &pem.Block{Type: "CERTIFICATE", Bytes: certificate.Raw}) 74 if err != nil { 75 return nil, err 76 } 77 78 for _, certChain := range caChain { 79 if err := pem.Encode(&pemBytes, &pem.Block{Type: "CERTIFICATE", Bytes: certChain.Raw}); err != nil { 80 return nil, err 81 } 82 } 83 84 return pemBytes.Bytes(), nil 85 }