+###--------------------------------------------------------------------------
+### 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)
+