verify method
bool
verify(
- dynamic proof,
- dynamic data,
- String did, {
- String? challenge,
})
override
Implementation
@override
bool verify(proof, data, String did, {String? challenge}) {
//compare challenge
if (challenge != null) {
var containingChallenge = proof['challenge'];
if (containingChallenge == null) {
throw Exception('Expected challenge in this credential');
}
if (containingChallenge != challenge) {
throw Exception('a challenge do not match expected challenge');
}
}
//verify signature
var signature = _getSignatureFromJws(proof['jws']);
List<int> hash = _dataToHash(data);
var jws = proof.remove('jws');
var proofHash = sha256.convert(utf8.encode(jsonEncode(proof))).bytes;
var hashToSign = sha256.convert(proofHash + hash).bytes;
proof['jws'] = jws;
var pubKey = web3_crypto.ecRecover(hashToSign as Uint8List, signature);
var givenAddress = EthereumAddress.fromHex(did.split(':').last);
return EthereumAddress.fromPublicKey(pubKey).hexEip55 ==
givenAddress.hexEip55;
}