From ce0340b65241b46976bf52e14e80879debee5dba Mon Sep 17 00:00:00 2001 Message-Id: From: Mark Wooding Date: Thu, 26 May 2016 09:26:09 +0100 Subject: [PATCH 1/1] catacomb/__init__.py: Add a simple implementation of NaCl `secretbox'. Organization: Straylight/Edgeware From: Mark Wooding --- catacomb/__init__.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/catacomb/__init__.py b/catacomb/__init__.py index 6745bce..9963572 100644 --- a/catacomb/__init__.py +++ b/catacomb/__init__.py @@ -107,6 +107,26 @@ class _tmp: _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. -- [mdw]