lookup method
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';
}
}