KeyedSignature.fromAuthorization constructor

KeyedSignature.fromAuthorization({
  1. required String authorization,
  2. required String withdrawer,
})

Implementation

factory KeyedSignature.fromAuthorization(
    {required String authorization, required String withdrawer}) {
  PublicKeyHash pkh = PublicKeyHash.fromAddress(withdrawer);
  Uint8List authBytes = hexToBytes(authorization);
  PublicKeyHash validatorPkh = PublicKeyHash(hash: authBytes.sublist(0, 20));
  int recoveryId = authBytes[20];
  BigInt r = bytesToBigInt(authBytes.sublist(21, 53));
  BigInt s = bytesToBigInt(authBytes.sublist(53, 85));
  WitSignature signature = WitSignature(r, s);
  WitPublicKey validatorKey = WitPublicKey.recover(
    signature,
    Uint8List(32)..setRange(0, 20, pkh.hash),
    recoveryId,
  );

  assert(validatorKey.address == validatorPkh.address,
      "Validator Key does not match signature");

  return KeyedSignature(
    publicKey: PublicKey(bytes: validatorKey.encode()),
    signature:
        Signature(secp256k1: Secp256k1Signature(der: signature.encode())),
  );
}