lookup method

  1. @override
Future<String> lookup(
  1. String key,
  2. String sharedBy, {
  3. bool auth = true,
  4. bool verifyData = false,
  5. bool metadata = false,
})
override

lookup

Implementation

@override
Future<String> lookup(String key, String sharedBy,
    {bool auth = true,
    bool verifyData = false,
    bool metadata = false}) async {
  var builder = LookupVerbBuilder()
    ..atKey = key
    ..sharedBy = sharedBy
    ..auth = auth
    ..operation = metadata == true ? 'all' : null;
  if (verifyData == null || verifyData == false) {
    var lookupResult = await executeVerb(builder);
    lookupResult = VerbUtil.getFormattedValue(lookupResult);
    return lookupResult;
  }
  //verify data signature if verifyData is set to true
  try {
    builder = LookupVerbBuilder()
      ..atKey = key
      ..sharedBy = sharedBy
      ..auth = false
      ..operation = 'all';
    String? lookupResult = await executeVerb(builder);
    lookupResult = lookupResult.replaceFirst('data:', '');
    var resultJson = json.decode(lookupResult);
    logger.finer(resultJson);

    String? publicKeyResult = '';
    if (auth) {
      publicKeyResult = await plookup('publickey', sharedBy);
    } else {
      var publicKeyLookUpBuilder = LookupVerbBuilder()
        ..atKey = 'publickey'
        ..sharedBy = sharedBy;
      publicKeyResult = await executeVerb(publicKeyLookUpBuilder);
    }
    publicKeyResult = publicKeyResult.replaceFirst('data:', '');
    logger.finer('public key of $sharedBy :$publicKeyResult');

    var publicKey = RSAPublicKey.fromString(publicKeyResult);
    var dataSignature = resultJson['metaData']['dataSignature'];
    var value = resultJson['data'];
    value = VerbUtil.getFormattedValue(value);
    logger.finer('value: $value dataSignature:$dataSignature');
    var isDataValid = publicKey.verifySHA256Signature(
        utf8.encode(value) as Uint8List, base64Decode(dataSignature));
    logger.finer('atlookup data verify result: $isDataValid');
    return 'data:$value';
  } on Exception catch (e) {
    logger.severe(
        'Error while verify public data for key: $key sharedBy: $sharedBy exception:${e.toString()}');
    return 'data:null';
  }
}