This commit is contained in:
Jack Grigg 2018-05-18 18:00:45 +12:00
parent ce7c7cfb39
commit 9df19eb154
4 changed files with 27 additions and 25 deletions

View File

@ -33,7 +33,7 @@ def find_group_hash(D, M):
if p: if p:
return p return p
i += 1 i += 1
assert(i < 256) assert i < 256
# #

View File

@ -5,7 +5,7 @@ q_j = 52435875175126190479447740508185965837690552500527637822603658699938581184
r_j = 6554484396890773809930967563523245729705921265872317281365359162392183254199 r_j = 6554484396890773809930967563523245729705921265872317281365359162392183254199
qm1d2 = 26217937587563095239723870254092982918845276250263818911301829349969290592256 qm1d2 = 26217937587563095239723870254092982918845276250263818911301829349969290592256
assert((q_j - 1) // 2 == qm1d2) assert (q_j - 1) // 2 == qm1d2
# #
@ -28,7 +28,7 @@ class FieldElement(object):
return self.t(self.s * a.s) return self.t(self.s * a.s)
def __truediv__(self, a): def __truediv__(self, a):
assert(a.s != 0) assert a.s != 0
return self * a.inv() return self * a.inv()
def exp(self, e): def exp(self, e):
@ -84,11 +84,11 @@ class Fq(FieldElement):
while t2i != self.ONE: while t2i != self.ONE:
t2i = t2i * t2i t2i = t2i * t2i
i += 1 i += 1
assert(i < m) assert i < m
# 9: # 9:
# w <- z^(2^(v-k-1)) # w <- z^(2^(v-k-1))
for j in range(0, m - i - 1): for _ in range(0, m - i - 1):
c = c * c c = c * c
# b <- bz # b <- bz
r = r * c r = r * c
@ -98,12 +98,11 @@ class Fq(FieldElement):
t = t * c t = t * c
# v <- k # v <- k
m = i m = i
assert(r * r == self) assert r * r == self
return r return r
elif a == self.MINUS_ONE: elif a == self.MINUS_ONE:
return None return None
else: return self.ZERO
return self.ZERO
class Fr(FieldElement): class Fr(FieldElement):
@ -187,4 +186,4 @@ class Point(object):
Point.ZERO = Point(Fq.ZERO, Fq.ONE) Point.ZERO = Point(Fq.ZERO, Fq.ONE)
assert(Point.ZERO + Point.ZERO == Point.ZERO) assert Point.ZERO + Point.ZERO == Point.ZERO

View File

@ -74,7 +74,7 @@ class SpendingKey(object):
if group_hash(b'Zcash_gd', d): if group_hash(b'Zcash_gd', d):
return d return d
i += 1 i += 1
assert(i < 256) assert i < 256
@cached @cached
def default_pkd(self): def default_pkd(self):
@ -127,19 +127,18 @@ def main():
%s %s
], ],
},''' % ( },''' % (
chunk(hexlify(sk.data)), chunk(hexlify(sk.data)),
chunk(hexlify(bytes(sk.ask()))), chunk(hexlify(bytes(sk.ask()))),
chunk(hexlify(bytes(sk.nsk()))), chunk(hexlify(bytes(sk.nsk()))),
chunk(hexlify(sk.ovk())), chunk(hexlify(sk.ovk())),
chunk(hexlify(bytes(sk.ak()))), chunk(hexlify(bytes(sk.ak()))),
chunk(hexlify(bytes(sk.nk()))), chunk(hexlify(bytes(sk.nk()))),
chunk(hexlify(bytes(sk.ivk()))), chunk(hexlify(bytes(sk.ivk()))),
chunk(hexlify(sk.default_d())), chunk(hexlify(sk.default_d())),
chunk(hexlify(bytes(sk.default_pkd()))), chunk(hexlify(bytes(sk.default_pkd()))),
)) ))
print(' ];') print(' ];')
if __name__ == '__main__': if __name__ == '__main__':
main() main()

View File

@ -1,5 +1,9 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
from sapling_generators import find_group_hash, NOTE_POSITION_BASE, WINDOWED_PEDERSEN_RANDOMNESS_BASE from sapling_generators import (
find_group_hash,
NOTE_POSITION_BASE,
WINDOWED_PEDERSEN_RANDOMNESS_BASE,
)
from sapling_jubjub import Fr, Point from sapling_jubjub import Fr, Point
from sapling_utils import cldiv, i2leosp from sapling_utils import cldiv, i2leosp
@ -18,7 +22,7 @@ def encode_chunk(mj):
def encode_segment(Mi): def encode_segment(Mi):
ki = len(Mi) // 3 ki = len(Mi) // 3
Michunks = [Mi[i:i+3] for i in range(0, len(Mi), 3)] Michunks = [Mi[i:i+3] for i in range(0, len(Mi), 3)]
assert(len(Michunks) == ki) assert len(Michunks) == ki
return Fr(sum([encode_chunk(Michunks[j-1]) * 2**(4*(j-1)) for j in range(1, ki + 1)])) return Fr(sum([encode_chunk(Michunks[j-1]) * 2**(4*(j-1)) for j in range(1, ki + 1)]))
c = 63 c = 63
@ -26,10 +30,10 @@ c = 63
def pedersen_hash_to_point(D, M): def pedersen_hash_to_point(D, M):
# Pad M to a multiple of 3 bits # Pad M to a multiple of 3 bits
Mdash = M + [0] * ((-len(M)) % 3) Mdash = M + [0] * ((-len(M)) % 3)
assert((len(Mdash) // 3) * 3 == len(Mdash)) assert (len(Mdash) // 3) * 3 == len(Mdash)
n = cldiv(len(Mdash), 3 * c) n = cldiv(len(Mdash), 3 * c)
Msegs = [Mdash[i:i+(3*c)] for i in range(0, len(Mdash), 3*c)] Msegs = [Mdash[i:i+(3*c)] for i in range(0, len(Mdash), 3*c)]
assert(len(Msegs) == n) assert len(Msegs) == n
return sum([I_D_i(D, i) * encode_segment(Msegs[i-1]) for i in range(1, n + 1)], Point.ZERO) return sum([I_D_i(D, i) * encode_segment(Msegs[i-1]) for i in range(1, n + 1)], Point.ZERO)
def pedersen_hash(D, M): def pedersen_hash(D, M):