| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- // SPDX-License-Identifier: Apache-2.0
- import { Keypair, Ed25519Program, SYSVAR_INSTRUCTIONS_PUBKEY, PublicKey } from '@solana/web3.js';
- import expect from 'expect';
- import nacl from 'tweetnacl';
- import { loadContractAndCallConstructor } from './setup';
- import { Program } from '@coral-xyz/anchor';
- describe('Signature Check', function () {
- this.timeout(150000);
- let program: Program;
- let storage: Keypair;
- let payer: Keypair;
- before(async function () {
- ({ program, storage, payer } = await loadContractAndCallConstructor('verify_sig'));
- });
- it('check valid signature', async function () {
- const message = Buffer.from('Foobar');
- const signature = nacl.sign.detached(message, payer.secretKey);
- let instr1 = Ed25519Program.createInstructionWithPublicKey({
- publicKey: payer.publicKey.toBytes(),
- message,
- signature,
- instructionIndex: 0
- });
- const result = await program.methods.verify(payer.publicKey, message, Buffer.from(signature))
- .preInstructions([instr1])
- .accounts({
- SysvarInstruction: SYSVAR_INSTRUCTIONS_PUBKEY
- })
- .view();
- expect(result).toEqual(true);
- });
- it('check invalid signature', async function () {
- const message = Buffer.from('Foobar');
- const signature = nacl.sign.detached(message, payer.secretKey);
- const broken_signature = Buffer.from(signature);
- broken_signature[1] ^= 1;
- let instr1 = Ed25519Program.createInstructionWithPublicKey({
- publicKey: payer.publicKey.toBytes(),
- message,
- signature,
- instructionIndex: 0
- });
- const result = await program.methods.verify(payer.publicKey, message, Buffer.from(broken_signature))
- .preInstructions([instr1])
- .accounts({
- SysvarInstruction: SYSVAR_INSTRUCTIONS_PUBKEY
- })
- .view();
- expect(result).toEqual(false);
- });
- });
|