parseSerializedPasskeySignature function

ParsedPasskeySignature parseSerializedPasskeySignature(
  1. dynamic signature
)

Parses a serialized passkey signature (flag 0x06 || BCS(PasskeyAuthenticator)), from raw bytes or a base64 string, into its component fields.

Implementation

ParsedPasskeySignature parseSerializedPasskeySignature(dynamic signature) {
  final bytes = signature is String
      ? base64Decode(signature)
      : signature as Uint8List;

  if (bytes.isEmpty || bytes[0] != SIGNATURE_SCHEME_TO_FLAG.Passkey) {
    throw ArgumentError("Invalid signature scheme");
  }

  final dec = SuiBcs.PasskeyAuthenticator.parse(
    Uint8List.sublistView(bytes, 1),
  );
  final userSignature = Uint8List.fromList(
    (dec['userSignature'] as List).cast<int>(),
  );

  return ParsedPasskeySignature(
    signatureScheme: SignatureScheme.Passkey,
    bytes: Uint8List.fromList(bytes),
    authenticatorData: Uint8List.fromList(
      (dec['authenticatorData'] as List).cast<int>(),
    ),
    clientDataJson: dec['clientDataJson'] as String,
    userSignature: userSignature,
    signature: Uint8List.sublistView(
      userSignature,
      1,
      1 + PASSKEY_SIGNATURE_SIZE,
    ),
    publicKey: Uint8List.sublistView(userSignature, 1 + PASSKEY_SIGNATURE_SIZE),
  );
}