verifyClientProof static method
bool
verifyClientProof(
- List<
int> clientProof, - Uint8List storedKey,
- String authMessage, {
- AuthenticationStringEncoding stringEncoding = AuthenticationStringEncoding.utf8,
Implementation
static bool verifyClientProof(
List<int> clientProof,
Uint8List storedKey,
String authMessage, {
AuthenticationStringEncoding stringEncoding =
AuthenticationStringEncoding.utf8,
}) {
if (clientProof.length != defaultKeyLength ||
storedKey.length != defaultKeyLength) {
return false;
}
final authMessageBytes = Uint8List.fromList(
CraAuthentication.encodeString(
authMessage,
stringEncoding: stringEncoding,
),
);
try {
final clientSignature = CraAuthentication.encodeByteHmac(
storedKey,
defaultKeyLength,
authMessageBytes,
);
final recoveredClientKey = Uint8List(defaultKeyLength);
Uint8List? recoveredStoredKey;
try {
for (var i = 0; i < defaultKeyLength; i++) {
recoveredClientKey[i] = clientProof[i] ^ clientSignature[i];
}
recoveredStoredKey = SHA256Digest().process(recoveredClientKey);
return _constantTimeEquals(recoveredStoredKey, storedKey);
} finally {
_clear(clientSignature);
_clear(recoveredClientKey);
if (recoveredStoredKey != null) _clear(recoveredStoredKey);
}
} finally {
_clear(authMessageBytes);
}
}