INNER CODE UNIT · Go
decodeYubikeyECPublicKey
go-piv/go-ykpiv · generate.go:94
func decodeYubikeyECPublicKey(curve elliptic.Curve, der []byte) (*ecdsa.PublicKey, error) {
byteArray, err := bytearray.DERDecode(der)
if err != nil {
return nil, err
}
if len(byteArray) != 1 {
return nil, fmt.Errorf("ykpiv: decodeYubikeyECPublicKey: Byte Array isn't length 1")
}
publicPointSpec := byteArray[0].Bytes
if publicPointSpec[0] != 0x04 {
return nil, fmt.Errorf("ykpiv: decodeYubikeyECPublicKey: EC public point byte != 4: %d", publicPointSpec[0])
}
pointLen := (curve.Params().BitSize + 7) / 8
if len(publicPointSpec) != 2*pointLen+1 {
return nil, fmt.Errorf("ykpiv: decodeYubikeyECPublicKey: EC public point bytes wrong length; %d", len(publicPointSpec))