UNPKG

@nori-zk/mina-token-bridge

Version:

Nori ethereum state settelment and nETH token bridge zkApp

56 lines 2.3 kB
import { CircuitString, Poseidon, PrivateKey, Signature, ZkProgram, Field, PublicKey, Struct, Provable } from "o1js"; const outputType = Struct({ hash: Field, key: PublicKey }); const SignatureMessage = Provable.Array(Field, 128); //type x = typeof SignatureMessage; //const y = {} as unknown as x; //y. const SigToHash = ZkProgram({ name: "SigToHash", publicOutput: outputType, methods: { compute: { privateInputs: [Signature, PublicKey, SignatureMessage], async method(input, pubKey, msg) { const hash = Poseidon.hash(input.toFields()); input.verify(pubKey, msg).assertTrue(); const publicOutput = { hash, key: pubKey }; return { publicOutput }; } } } }); describe('Signature to hash', () => { it('Testing going from a signatue to a hash', async () => { const priKey = PrivateKey.random(); const msg = 'NoriZK'; const cs = CircuitString.fromString(msg); const csFields = cs.values.map((char) => char.toField()); const signature = Signature.create(priKey, csFields); const hash = Poseidon.hash(signature.toFields()); console.log('Hash of mina signature of chars', hash.toString()); }); it('ZKProgram of sig to hash', async () => { const priKey = PrivateKey.random(); const publicKey = priKey.toPublicKey(); const msg = 'NoriZK'; const cs = CircuitString.fromString(msg); const csFields = cs.values.map((char) => char.toField()); const signature = Signature.create(priKey, csFields); const hash = Poseidon.hash(signature.toFields()); console.log('Non provable hash', hash.toString()); const { verificationKey } = await SigToHash.compile(); console.log('Compiled zk program', verificationKey.hash.toString()); console.log('csFields', csFields.length); const proof = await SigToHash.compute(signature, publicKey, csFields); console.log('Computed proof', proof.proof.publicOutput.hash.toString()); await proof.proof.verify(); console.log('Verified proof'); }); }); //# sourceMappingURL=sigToHash.unit.spec.js.map