f4jumble: updates for large UAs/UVKs.
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
This commit is contained in:
parent
87e0a6b57c
commit
71e2a355c4
21
f4jumble.py
21
f4jumble.py
|
@ -8,17 +8,22 @@ from pyblake2 import blake2b
|
||||||
|
|
||||||
from tv_output import render_args, render_tv
|
from tv_output import render_args, render_tv
|
||||||
from tv_rand import Rand
|
from tv_rand import Rand
|
||||||
|
from utils import i2leosp
|
||||||
|
|
||||||
|
|
||||||
# Maximum output length of BLAKE2b
|
# Maximum output length of BLAKE2b
|
||||||
l_H = 64
|
l_H = 64
|
||||||
assert 8*l_H == 512
|
assert 8*l_H == 512
|
||||||
|
|
||||||
|
MIN_l_M = 48
|
||||||
|
MAX_l_M = 4194368
|
||||||
|
assert MAX_l_M == 65537*l_H
|
||||||
|
|
||||||
def instantiate(l_L, l_R):
|
def instantiate(l_L, l_R):
|
||||||
def H(i, u):
|
def H(i, u):
|
||||||
digest = blake2b(
|
digest = blake2b(
|
||||||
digest_size=l_L,
|
digest_size=l_L,
|
||||||
person=b'UA_F4Jumble_H_' + bytes([i, 0]),
|
person=b'UA_F4Jumble_H' + bytes([i, 0, 0]),
|
||||||
)
|
)
|
||||||
digest.update(u)
|
digest.update(u)
|
||||||
return digest.digest()
|
return digest.digest()
|
||||||
|
@ -27,7 +32,7 @@ def instantiate(l_L, l_R):
|
||||||
def inner(j):
|
def inner(j):
|
||||||
digest = blake2b(
|
digest = blake2b(
|
||||||
digest_size=l_H,
|
digest_size=l_H,
|
||||||
person=b'UA_F4Jumble_G_' + bytes([i, j]),
|
person=b'UA_F4Jumble_G' + bytes([i]) + i2leosp(16, j),
|
||||||
)
|
)
|
||||||
digest.update(u)
|
digest.update(u)
|
||||||
return digest.digest()
|
return digest.digest()
|
||||||
|
@ -41,7 +46,7 @@ def xor(x, y):
|
||||||
|
|
||||||
def f4jumble(M):
|
def f4jumble(M):
|
||||||
l_M = len(M)
|
l_M = len(M)
|
||||||
assert 48 <= l_M and l_M <= 16448
|
assert MIN_l_M <= l_M and l_M <= MAX_l_M
|
||||||
|
|
||||||
l_L = min([l_H, l_M//2])
|
l_L = min([l_H, l_M//2])
|
||||||
l_R = l_M - l_L
|
l_R = l_M - l_L
|
||||||
|
@ -58,7 +63,7 @@ def f4jumble(M):
|
||||||
|
|
||||||
def f4jumble_inv(M):
|
def f4jumble_inv(M):
|
||||||
l_M = len(M)
|
l_M = len(M)
|
||||||
assert 48 <= l_M and l_M <= 16448
|
assert MIN_l_M <= l_M and l_M <= MAX_l_M
|
||||||
|
|
||||||
l_L = min([l_H, l_M//2])
|
l_L = min([l_H, l_M//2])
|
||||||
l_R = l_M - l_L
|
l_R = l_M - l_L
|
||||||
|
@ -89,14 +94,16 @@ def main():
|
||||||
test_vectors = []
|
test_vectors = []
|
||||||
# Generate test vectors with various lengths:
|
# Generate test vectors with various lengths:
|
||||||
for l_M in [
|
for l_M in [
|
||||||
48,
|
MIN_l_M,
|
||||||
l_H,
|
l_H,
|
||||||
2*l_H,
|
2*l_H,
|
||||||
2*l_H + 1,
|
2*l_H + 1,
|
||||||
3*l_H,
|
3*l_H,
|
||||||
3*l_H + 1,
|
3*l_H + 1,
|
||||||
(rand.u32() % 16400) + 48,
|
257*l_H,
|
||||||
16448,
|
257*l_H + 1,
|
||||||
|
(rand.u32() % (MAX_l_M - MIN_l_M)) + MIN_l_M,
|
||||||
|
MAX_l_M,
|
||||||
]:
|
]:
|
||||||
M = rand.b(l_M)
|
M = rand.b(l_M)
|
||||||
jumbled = f4jumble(M)
|
jumbled = f4jumble(M)
|
||||||
|
|
Loading…
Reference in New Issue