verify method

Future<bool> verify(
  1. Map<String, Object?> record, {
  2. List<int>? trustedPublicKey,
})

Implementation

Future<bool> verify(
  Map<String, Object?> record, {
  List<int>? trustedPublicKey,
}) async {
  final signer = (record['signer'] as Map?)?.cast<String, Object?>();
  final signatureText = record['signature'];
  final expectedDigest = record['recordDigest'];
  if (signer == null ||
      signatureText is! String ||
      expectedDigest is! String) {
    return false;
  }
  final unsigned = <String, Object?>{
    'kind': record['kind'],
    'signer': signer,
    'body': record['body'],
  };
  final bytes = releaseSigningPayload(unsigned);
  if (sha256.convert(bytes).toString() != expectedDigest) return false;
  if (trustedPublicKey == null) return false;
  final signature = Signature(
    base64Decode(signatureText),
    publicKey: SimplePublicKey(trustedPublicKey, type: KeyPairType.ed25519),
  );
  return algorithm.verify(bytes, signature: signature);
}