also add compression for public keys

This commit is contained in:
thomaslavaur 2025-11-18 08:14:31 +01:00
parent f10289b3ad
commit 6b9c8dfe06
6 changed files with 9 additions and 8 deletions

View File

@ -221,7 +221,7 @@ if not core_or_leader in [0,1]:
# 1) Corenode registry Merkleproof # 1) Corenode registry Merkleproof
# pick a random core_sk and derive its public key # pick a random core_sk and derive its public key
core_sk = F(randrange(0,p,1)) core_sk = F(randrange(0,p,1))
pk_core = poseidon2_hash([ F(1296193216988918402894), core_sk ]) pk_core = Compression([ F(1296193216988918402894), core_sk ])
core_selectors = randrange(0,2**20,1) core_selectors = randrange(0,2**20,1)
core_selectors = format(int(core_selectors),'020b') core_selectors = format(int(core_selectors),'020b')
core_nodes = [F(randrange(0,p,1)) for i in range(20)] core_nodes = [F(randrange(0,p,1)) for i in range(20)]
@ -264,7 +264,7 @@ for i in range(25):
else: else:
secret_root = Compression([slot_secret_path[i],secret_root]) secret_root = Compression([slot_secret_path[i],secret_root])
sk = poseidon2_hash([F(256174383281726064679014503048630094),starting_slot,secret_root]) sk = poseidon2_hash([F(256174383281726064679014503048630094),starting_slot,secret_root])
pk = poseidon2_hash([F(1296193216988918402894),sk]) pk = Compression([F(1296193216988918402894),sk])
note_id = poseidon2_hash([F(65580641562429851895355409762135920462),tx_hash,output_number,value,pk]) note_id = poseidon2_hash([F(65580641562429851895355409762135920462),tx_hash,output_number,value,pk])
ticket = poseidon2_hash([F(13887241025832268),F(epoch_nonce),F(slot_number),note_id,sk]) ticket = poseidon2_hash([F(13887241025832268),F(epoch_nonce),F(slot_number),note_id,sk])

View File

@ -125,7 +125,7 @@ template ProofOfQuota(nLevelsPK, nLevelsPol, bitsQuota) {
// Derive key_nullifier // Derive key_nullifier
component nf = Poseidon2_hash(2); component nf = Compression();
component dstNF = KEY_NULLIFIER_V1(); component dstNF = KEY_NULLIFIER_V1();
nf.inp[0] <== dstNF.out; nf.inp[0] <== dstNF.out;
nf.inp[1] <== selection_randomness.out; nf.inp[1] <== selection_randomness.out;

View File

@ -245,7 +245,7 @@ for i in range(25):
else: else:
secret_root = Compression([slot_secret_path[i],secret_root]) secret_root = Compression([slot_secret_path[i],secret_root])
sk = poseidon2_hash([F(256174383281726064679014503048630094),starting_slot,secret_root]) sk = poseidon2_hash([F(256174383281726064679014503048630094),starting_slot,secret_root])
pk = poseidon2_hash([F(1296193216988918402894),sk]) pk = Compression([F(1296193216988918402894),sk])
note_id = poseidon2_hash([F(65580641562429851895355409762135920462),tx_hash,output_number,value,pk]) note_id = poseidon2_hash([F(65580641562429851895355409762135920462),tx_hash,output_number,value,pk])
ticket = poseidon2_hash([F(13887241025832268),F(epoch_nonce),F(slot_number),note_id,sk]) ticket = poseidon2_hash([F(13887241025832268),F(epoch_nonce),F(slot_number),note_id,sk])

View File

@ -208,7 +208,7 @@ def PoseidonSponge(data, capacity, output_len):
secret_voucher = F(randrange(0,p,1)) secret_voucher = F(randrange(0,p,1))
reward_voucher = poseidon2_hash([F(1668646695034522932676805048878418),secret_voucher]) reward_voucher = Compression([F(1668646695034522932676805048878418),secret_voucher])
merkle_nodes = [F(randrange(0,p,1)) for i in range(32)] merkle_nodes = [F(randrange(0,p,1)) for i in range(32)]
selectors = randrange(0,2**32,1) selectors = randrange(0,2**32,1)

View File

@ -9,7 +9,7 @@ template derive_voucher_nullifier(){
signal input secret_voucher; signal input secret_voucher;
signal output out; signal output out;
component hash = Poseidon2_hash(2); component hash = Compression();
component dst = VOUCHER_NF(); component dst = VOUCHER_NF();
hash.inp[0] <== dst.out; hash.inp[0] <== dst.out;
hash.inp[1] <== secret_voucher; hash.inp[1] <== secret_voucher;
@ -21,7 +21,7 @@ template derive_reward_voucher(){
signal input secret_voucher; signal input secret_voucher;
signal output out; signal output out;
component hash = Poseidon2_hash(2); component hash = Compression( );
component dst = REWARD_VOUCHER(); component dst = REWARD_VOUCHER();
hash.inp[0] <== dst.out; hash.inp[0] <== dst.out;
hash.inp[1] <== secret_voucher; hash.inp[1] <== secret_voucher;

View File

@ -2,6 +2,7 @@
pragma circom 2.1.9; pragma circom 2.1.9;
include "../hash_bn/poseidon2_hash.circom"; include "../hash_bn/poseidon2_hash.circom";
include "../hash_bn/poseidon2_perm.circom";
include "../misc/constants.circom"; include "../misc/constants.circom";
template derive_secret_key(){ template derive_secret_key(){
@ -22,7 +23,7 @@ template derive_public_key(){
signal input secret_key; signal input secret_key;
signal output out; signal output out;
component hash = Poseidon2_hash(2); component hash = Compression();
component dst = NOMOS_KDF(); component dst = NOMOS_KDF();
hash.inp[0] <== dst.out; hash.inp[0] <== dst.out;
hash.inp[1] <== secret_key; hash.inp[1] <== secret_key;