X-Git-Url: https://git.distorted.org.uk/~mdw/ocb-tv/blobdiff_plain/2653ca06bad735dbd4bfd0dcd213a183f20a00cb..86082bbc2b778ac98757dc091e191bf1e5dd356d:/ocbgen diff --git a/ocbgen b/ocbgen index acdd997..a0c360f 100755 --- a/ocbgen +++ b/ocbgen @@ -25,6 +25,7 @@ from sys import argv, stderr from struct import pack from itertools import izip +from contextlib import contextmanager import catacomb as C R = C.FibRand(0) @@ -153,25 +154,35 @@ class LubyRackoffCipher (type): me.bc = bc return me +@contextmanager +def muffle(): + global VERBOSE, LRVERBOSE + _v, _lrv = VERBOSE, LRVERBOSE + try: + VERBOSE = LRVERBOSE = False + yield None + finally: + VERBOSE, LRVERBOSE = _v, _lrv + class LubyRackoffBase (object): NR = 4 # for strong-PRP security def __init__(me, k): if LRVERBOSE: print 'K = %s' % hex(k) bc, blksz = me.__class__.bc, me.__class__.blksz - E = bc(k) + with muffle(): E = bc(k) me.f = [] ksz = len(k) i = C.MP(0) for j in xrange(me.NR): b = C.WriteBuffer() while b.size < ksz: - x = E.encrypt(i.storeb(bc.blksz)) + with muffle(): x = E.encrypt(i.storeb(bc.blksz)) b.put(x) if LRVERBOSE: print 'E(K; [%d]) = %s' % (i, hex(x)) i += 1 kj = C.ByteString(C.ByteString(b)[0:ksz]) if LRVERBOSE: print 'K_%d = %s' % (j, hex(kj)) - me.f.append(bc(kj)) + with muffle(): me.f.append(bc(kj)) def encrypt(me, m): bc, blksz = me.__class__.bc, me.__class__.blksz assert len(m) == blksz @@ -179,7 +190,7 @@ class LubyRackoffBase (object): if LRVERBOSE: print 'L_0, R_0 = %s, %s' % (hex(l), hex(r)) for j in xrange(me.NR): l0 = pad0star(l, bc.blksz) - t = me.f[j].encrypt(l0) + with muffle(): t = me.f[j].encrypt(l0) l, r = r ^ t[:blksz/2], l if LRVERBOSE: print 'E(K_%d; L_%d || 0^*) = %s' % (j, j, hex(t)) @@ -191,7 +202,7 @@ class LubyRackoffBase (object): l, r = C.ByteString(c[:blksz/2]), C.ByteString(c[blksz/2:]) for j in xrange(me.NR - 1, -1, -1): l0 = pad0star(l, bc.blksz) - t = me.f[j].encrypt(l0) + with muffle(): t = me.f[j].encrypt(l0) if LRVERBOSE: print 'L_%d, R_%d = %s, %s' % (j + 1, j + 1, hex(l), hex(r)) print 'E(K_%d; L_%d || 0^*) = %s' % (j + 1, j + 1, hex(t)) @@ -202,6 +213,7 @@ class LubyRackoffBase (object): LRAES = {} for i in [8, 12, 16, 24, 32]: LRAES['lraes%d' % (8*i)] = LubyRackoffCipher(C.rijndael, i) +LRAES['dlraes512'] = LubyRackoffCipher(LubyRackoffCipher(C.rijndael, 32), 64) ###-------------------------------------------------------------------------- ### PMAC. @@ -386,7 +398,8 @@ OCB3_STRETCH = { 8: (5, 25), 12: (6, 33), 16: (6, 8), 24: (7, 40), - 32: (7, 120) } + 32: (7, 120), + 64: (8, 240) } def ocb3(E, n, h, m, tsz = None): blksz = E.__class__.blksz