verify_sig.spec.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // SPDX-License-Identifier: Apache-2.0
  2. import { Contract, publicKeyToHex } from '@solana/solidity';
  3. import { Keypair } from '@solana/web3.js';
  4. import expect from 'expect';
  5. import nacl from 'tweetnacl';
  6. import { loadContract } from './setup';
  7. describe('Signature Check', function () {
  8. this.timeout(150000);
  9. let contract: Contract;
  10. let payer: Keypair;
  11. before(async function () {
  12. ({ contract, payer } = await loadContract('verify_sig'));
  13. });
  14. it('check valid signature', async function () {
  15. const message = Buffer.from('Foobar');
  16. const signature = nacl.sign.detached(message, payer.secretKey);
  17. const { result } = await contract.functions.verify(
  18. payer.publicKey.toBytes(), message, signature,
  19. {
  20. ed25519sigs: [{ publicKey: payer.publicKey, message, signature }],
  21. }
  22. );
  23. expect(result).toEqual(true);
  24. });
  25. it('check invalid signature', async function () {
  26. const message = Buffer.from('Foobar');
  27. const signature = nacl.sign.detached(message, payer.secretKey);
  28. const broken_signature = Buffer.from(signature);
  29. broken_signature[1] ^= 1;
  30. const { result } = await contract.functions.verify(
  31. payer.publicKey.toBytes(), message, broken_signature,
  32. {
  33. ed25519sigs: [{ publicKey: payer.publicKey, message, signature }],
  34. }
  35. );
  36. expect(result).toEqual(false);
  37. });
  38. });