From: Mark Wooding Date: Thu, 26 May 2016 08:26:09 +0000 (+0100) Subject: catacomb/__init__.py: Add a simple implementation of NaCl `secretbox'. X-Git-Tag: 1.2.0~40 X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb-python/commitdiff_plain/ce0340b65241b46976bf52e14e80879debee5dba?ds=inline catacomb/__init__.py: Add a simple implementation of NaCl `secretbox'. --- diff --git a/catacomb/__init__.py b/catacomb/__init__.py index 6745bce..9963572 100644 --- a/catacomb/__init__.py +++ b/catacomb/__init__.py @@ -108,6 +108,26 @@ _augment(GHash, _tmp) _augment(Poly1305Hash, _tmp) ###-------------------------------------------------------------------------- +### NaCl `secretbox'. + +def secret_box(k, n, m): + E = xsalsa20(k).setiv(n) + r = E.enczero(poly1305.keysz.default) + s = E.enczero(poly1305.masksz) + y = E.encrypt(m) + t = poly1305(r)(s).hash(y).done() + return ByteString(t + y) + +def secret_unbox(k, n, c): + E = xsalsa20(k).setiv(n) + r = E.enczero(poly1305.keysz.default) + s = E.enczero(poly1305.masksz) + y = c[poly1305.tagsz:] + if not poly1305(r)(s).hash(y).check(c[0:poly1305.tagsz]): + raise ValueError, 'decryption failed' + return E.decrypt(c[poly1305.tagsz:]) + +###-------------------------------------------------------------------------- ### Multiprecision integers and binary polynomials. def _split_rat(x):