parseDerSPKI function

Uint8List parseDerSPKI(
  1. Uint8List derBytes
)

Parses a DER SubjectPublicKeyInfo into an uncompressed P-256 point (0x04 || x || y), verifying the fixed secp256r1 header.

Implementation

Uint8List parseDerSPKI(Uint8List derBytes) {
  if (derBytes.length !=
      SECP256R1_SPKI_HEADER.length + PASSKEY_UNCOMPRESSED_PUBLIC_KEY_SIZE) {
    throw ArgumentError('Invalid DER length');
  }
  for (var i = 0; i < SECP256R1_SPKI_HEADER.length; i++) {
    if (derBytes[i] != SECP256R1_SPKI_HEADER[i]) {
      throw ArgumentError('Invalid spki header');
    }
  }
  if (derBytes[SECP256R1_SPKI_HEADER.length] != 0x04) {
    throw ArgumentError('Invalid point marker');
  }
  return Uint8List.fromList(derBytes.sublist(SECP256R1_SPKI_HEADER.length));
}