func loadPublicKey(csr *CertificateSignatureRequest, req *certificateRequest) bool { var pkInfo = req.Info.PKInfo var algo = pkInfo.Algorithm.Algorithm switch { case algo.Equal(asn1RSAEncryption): csr.Algo = RSA var pub rsa.PublicKey _, err := asn1.Unmarshal(pkInfo.Public.Bytes, &pub) if err != nil { return false } csr.Public = pub return true case algo.Equal(asn1ECCEncryption): csr.Algo = ECDSA var pub ecdsa.PublicKey curveOID := decodeOID(req.Info.PKInfo.Algorithm.Parameters.FullBytes) if curveOID == nil { return false } pub.Curve = oidToCurve(curveOID) if pub.Curve == nil { return false } pub.X, pub.Y = elliptic.Unmarshal(pub.Curve, req.Info.PKInfo.Public.Bytes) if pub.X == nil { return false } csr.Public = pub return true default: return false } }