Add note nullifiers to key component test vectors
This commit is contained in:
parent
51206901cc
commit
7aebe58a58
|
@ -4,7 +4,8 @@ from pyblake2 import blake2b, blake2s
|
||||||
|
|
||||||
from sapling_generators import PROVING_KEY_BASE, SPENDING_KEY_BASE, group_hash
|
from sapling_generators import PROVING_KEY_BASE, SPENDING_KEY_BASE, group_hash
|
||||||
from sapling_jubjub import Fr
|
from sapling_jubjub import Fr
|
||||||
from sapling_notes import note_commit
|
from sapling_merkle_tree import MERKLE_DEPTH
|
||||||
|
from sapling_notes import note_commit, note_nullifier
|
||||||
from sapling_utils import chunk, leos2bsp
|
from sapling_utils import chunk, leos2bsp
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -97,6 +98,8 @@ def main():
|
||||||
note_v: u64,
|
note_v: u64,
|
||||||
note_r: [u8; 32],
|
note_r: [u8; 32],
|
||||||
note_cm: [u8; 32],
|
note_cm: [u8; 32],
|
||||||
|
note_pos: u64,
|
||||||
|
note_nf: [u8; 32],
|
||||||
};
|
};
|
||||||
|
|
||||||
let test_vectors = vec![''')
|
let test_vectors = vec![''')
|
||||||
|
@ -109,6 +112,8 @@ def main():
|
||||||
leos2bsp(bytes(group_hash(b'Zcash_gd', sk.default_d()))),
|
leos2bsp(bytes(group_hash(b'Zcash_gd', sk.default_d()))),
|
||||||
leos2bsp(bytes(sk.default_pkd())),
|
leos2bsp(bytes(sk.default_pkd())),
|
||||||
note_v)
|
note_v)
|
||||||
|
note_pos = (980705743285409327583205473820957432*i) % 2**MERKLE_DEPTH
|
||||||
|
note_nf = note_nullifier(sk.nk(), note_cm, Fr(note_pos))
|
||||||
print(''' TestVector {
|
print(''' TestVector {
|
||||||
sk: [
|
sk: [
|
||||||
%s
|
%s
|
||||||
|
@ -144,6 +149,10 @@ def main():
|
||||||
note_cm: [
|
note_cm: [
|
||||||
%s
|
%s
|
||||||
],
|
],
|
||||||
|
note_pos: %s,
|
||||||
|
note_nf: [
|
||||||
|
%s
|
||||||
|
],
|
||||||
},''' % (
|
},''' % (
|
||||||
chunk(hexlify(sk.data)),
|
chunk(hexlify(sk.data)),
|
||||||
chunk(hexlify(bytes(sk.ask()))),
|
chunk(hexlify(bytes(sk.ask()))),
|
||||||
|
@ -157,6 +166,8 @@ def main():
|
||||||
note_v,
|
note_v,
|
||||||
chunk(hexlify(bytes(note_r))),
|
chunk(hexlify(bytes(note_r))),
|
||||||
chunk(hexlify(bytes(note_cm.u))),
|
chunk(hexlify(bytes(note_cm.u))),
|
||||||
|
note_pos,
|
||||||
|
chunk(hexlify(note_nf)),
|
||||||
))
|
))
|
||||||
print(' ];')
|
print(' ];')
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,21 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
from sapling_pedersen import windowed_pedersen_commitment
|
from pyblake2 import blake2s
|
||||||
|
|
||||||
|
from sapling_pedersen import (
|
||||||
|
mixing_pedersen_hash,
|
||||||
|
windowed_pedersen_commitment,
|
||||||
|
)
|
||||||
from sapling_utils import i2lebsp
|
from sapling_utils import i2lebsp
|
||||||
|
|
||||||
def note_commit(rcm, g_d, pk_d, v):
|
def note_commit(rcm, g_d, pk_d, v):
|
||||||
return windowed_pedersen_commitment(rcm, [1] * 6 + i2lebsp(64, v) + g_d + pk_d)
|
return windowed_pedersen_commitment(rcm, [1] * 6 + i2lebsp(64, v) + g_d + pk_d)
|
||||||
|
|
||||||
|
def prf_nf_sapling(nk_star, rho_star):
|
||||||
|
digest = blake2s(person=b'Zcash_nf')
|
||||||
|
digest.update(nk_star)
|
||||||
|
digest.update(rho_star)
|
||||||
|
return digest.digest()
|
||||||
|
|
||||||
|
def note_nullifier(nk, cm, pos):
|
||||||
|
rho = mixing_pedersen_hash(cm, pos)
|
||||||
|
return prf_nf_sapling(bytes(nk), bytes(rho))
|
||||||
|
|
Loading…
Reference in New Issue