in certViewer/cmd/web/certificates.go [340:393]
func getPublicKeyInfo(cert *x509.Certificate) (SubjectPublicKeyInfo, error) {
pubInfo := SubjectPublicKeyInfo{
Alg: PublicKeyAlgorithm[cert.PublicKeyAlgorithm],
}
switch pub := cert.PublicKey.(type) {
case *rsa.PublicKey:
pubInfo.Size = float64(pub.N.BitLen())
pubInfo.Exponent = float64(pub.E)
case *dsa.PublicKey:
pubInfo.Size = float64(pub.Y.BitLen())
textInt, err := pub.G.MarshalText()
if err == nil {
pubInfo.G = string(textInt)
} else {
return pubInfo, err
}
textInt, err = pub.P.MarshalText()
if err == nil {
pubInfo.P = string(textInt)
} else {
return pubInfo, err
}
textInt, err = pub.Q.MarshalText()
if err == nil {
pubInfo.Q = string(textInt)
} else {
return pubInfo, err
}
textInt, err = pub.Y.MarshalText()
if err == nil {
pubInfo.Y = string(textInt)
} else {
return pubInfo, err
}
case *ecdsa.PublicKey:
pubInfo.Size = float64(pub.Curve.Params().BitSize)
pubInfo.Curve = pub.Curve.Params().Name
pubInfo.Y = pub.Y.String()
pubInfo.X = pub.X.String()
}
return pubInfo, nil
}