verify method

  1. @override
FutureOr<bool> verify(
  1. String jws, {
  2. String? did,
  3. Map<String, dynamic>? jwk,
  4. dynamic data,
})
override

Verifies a (detached) JWS

Implementation

@override
FutureOr<bool> verify(String jws,
    {String? did, Map<String, dynamic>? jwk, dynamic data}) async {
  Map<String, dynamic> signingKey;
  if (did != null) {
    var ddo =
        (await resolveDidDocument(did)).resolveKeyIds().convertAllKeysToJwk();
    signingKey = ddo.verificationMethod!.first.publicKeyJwk!;
  } else if (jwk != null) {
    signingKey = jwk;
  } else {
    throw Exception('Either did or jwk must be given');
  }

  var splitted = jws.split('.');
  if (splitted.length != 3) throw Exception('maleformed jws');

  String encodedPayload;
  if (data != null) {
    encodedPayload = data is String
        ? removePaddingFromBase64(base64UrlEncode(utf8.encode(data)))
        : removePaddingFromBase64(
            base64UrlEncode(utf8.encode(jsonEncode(credentialToMap(data)))));
  } else {
    encodedPayload = splitted[1];
  }

  var signingInput = '${splitted[0]}.$encodedPayload';

  var publicKey =
      ed.PublicKey(base64Decode(addPaddingToBase64(signingKey['x'])));

  return ed.verify(publicKey, ascii.encode(signingInput),
      base64Decode(addPaddingToBase64(splitted[2])));
}