parseSerializedPasskeySignature function
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),
);
}