isOurOutput static method

bool isOurOutput({
  1. required Uint8List privateViewKey,
  2. required Uint8List publicSpendKey,
  3. required Uint8List txPublicKey,
  4. required Uint8List outputKey,
  5. required int outputIndex,
})

Implementation

static bool isOurOutput({
  required Uint8List privateViewKey,
  required Uint8List publicSpendKey,
  required Uint8List txPublicKey,
  required Uint8List outputKey,
  required int outputIndex,
}) {
  final ed = VaultKeeper.vault.ed25519;

  final aR = ed.scalarMult(privateViewKey, txPublicKey);
  final shared = ed.scalarMult(_cofactor8, aR);

  final hs = _hashToScalar(ed, shared, outputIndex);
  final hsG = ed.scalarMultBase(hs);
  final expected = ed.pointAdd(hsG, publicSpendKey);

  if (expected.length != outputKey.length) return false;
  var diff = 0;
  for (var i = 0; i < expected.length; i++) {
    diff |= expected[i] ^ outputKey[i];
  }
  return diff == 0;
}