assertionCredential method
Builds a browser-shaped assertion with an ASN.1 DER ES256 signature.
Implementation
Map<String, dynamic> assertionCredential({
required String challenge,
required int counter,
String? userHandle,
}) {
final authenticatorData = <int>[
...crypto.sha256.convert(utf8.encode(relyingPartyId)).bytes,
0x05,
(counter >> 24) & 0xff,
(counter >> 16) & 0xff,
(counter >> 8) & 0xff,
counter & 0xff,
];
final clientDataJson = _clientData(
type: 'webauthn.get',
challenge: challenge,
);
final signature = _keyPair.sign(<int>[
...authenticatorData,
...crypto.sha256.convert(clientDataJson).bytes,
]);
return <String, dynamic>{
'id': credentialId,
'rawId': credentialId,
'type': 'public-key',
'authenticatorAttachment': 'platform',
'clientExtensionResults': <String, Object?>{},
'response': <String, dynamic>{
'clientDataJSON': _base64Url(clientDataJson),
'authenticatorData': _base64Url(authenticatorData),
'signature': _base64Url(signature),
'userHandle': userHandle,
},
};
}