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))

View source record →

📰 Research Paper
Loading…
⏳ Fetching content…