buildProof method

  1. @override
FutureOr<Map<String, dynamic>> buildProof(
  1. dynamic data,
  2. WalletStore wallet,
  3. String did, {
  4. String? challenge,
  5. String? domain,
})
override

Implementation

@override
FutureOr<Map<String, dynamic>> buildProof(
    data, WalletStore wallet, String did,
    {String? challenge, String? domain}) async {
  var proofOptions = {
    'type': typeName,
    'proofPurpose': 'assertionMethod',
    'verificationMethod': did,
    'created': DateTime.now().toUtc().toIso8601String()
  };
  if (domain != null) {
    proofOptions['domain'] = domain;
  }
  if (challenge != null) {
    proofOptions['challenge'] = challenge;
  }
  String pOptions = jsonEncode(proofOptions);

  List<int> hashToSign = _dataToHash(data);

  var pOptionsHash = sha256.convert(utf8.encode(pOptions)).bytes;
  var hash = sha256.convert(pOptionsHash + hashToSign).bytes;

  var privateKey = await wallet.getPrivateKeyForCredentialDid(did);
  privateKey ??= await wallet.getPrivateKeyForConnectionDid(did);
  if (privateKey == null) throw Exception('Could not find a private key');
  var signature = ed.sign(
      ed.PrivateKey(web3_crypto.hexToBytes(privateKey).toList()),
      Uint8List.fromList(hash));

  proofOptions['proofValue'] = 'z${base58BitcoinEncode(signature)}';

  return proofOptions;
}