X-Git-Url: https://git.distorted.org.uk/~mdw/ocb-tv/blobdiff_plain/86082bbc2b778ac98757dc091e191bf1e5dd356d..d305618fac0bbdc59cf76356a1813ab8ff1bae42:/ocbgen diff --git a/ocbgen b/ocbgen index a0c360f..6368b30 100755 --- a/ocbgen +++ b/ocbgen @@ -26,6 +26,8 @@ from sys import argv, stderr from struct import pack from itertools import izip from contextlib import contextmanager +try: from kalyna import Kalyna +except ImportError: Kalyna = None import catacomb as C R = C.FibRand(0) @@ -140,6 +142,35 @@ def blocks0(x, w): return v, tl ###-------------------------------------------------------------------------- +### Kalyna decoration. + +KALYNA = {} + +if Kalyna is not None: + + class KalynaCipher (type): + def __new__(cls, blksz): + assert blksz in [16, 32, 64] + name = 'Kalyna-%d' % (8*blksz) + me = type(name, (KalynaBase,), {}) + me.name = name + me.blksz = blksz + if blksz == 64: me.keysz = C.KeySZSet(64) + else: me.keysz = C.KeySZSet(2*blksz, [blksz]) + return me + + class KalynaBase (object): + def __init__(me, k): + me._k = Kalyna(k, me.blksz) + def encrypt(me, m): + return C.ByteString(me._k.encrypt(m)) + def decrypt(me, m): + return C.ByteString(me._k.decrypt(m)) + + for i in [16, 32, 64]: + KALYNA['kalyna%d' % (8*i)] = KalynaCipher(i) + +###-------------------------------------------------------------------------- ### Luby--Rackoff large-block ciphers. class LubyRackoffCipher (type): @@ -549,7 +580,7 @@ ocb = MODEMAP[opt] bcname = arg() bc = None -for d in LRAES, C.gcprps: +for d in LRAES, KALYNA, C.gcprps: try: bc = d[bcname] except KeyError: pass else: break