summaryrefslogtreecommitdiff
path: root/nist/encrypt.c
diff options
context:
space:
mode:
Diffstat (limited to 'nist/encrypt.c')
-rw-r--r--nist/encrypt.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/nist/encrypt.c b/nist/encrypt.c
new file mode 100644
index 0000000..a33a2f5
--- /dev/null
+++ b/nist/encrypt.c
@@ -0,0 +1,48 @@
+#include <stdbool.h>
+
+#include "crypto_aead.h"
+#include "lilliput-ae.h"
+
+
+int crypto_aead_encrypt(
+ unsigned char *c, unsigned long long *clen,
+ const unsigned char *m, unsigned long long mlen,
+ const unsigned char *ad, unsigned long long adlen,
+ const unsigned char *nsec,
+ const unsigned char *npub,
+ const unsigned char *k
+)
+{
+ (void)nsec;
+
+ lilliput_ae_encrypt(mlen, m, adlen, ad, k, npub, c, c+mlen);
+ *clen = mlen + TAG_BYTES;
+
+ return 0;
+}
+
+
+int crypto_aead_decrypt(
+ unsigned char *m, unsigned long long *mlen,
+ unsigned char *nsec,
+ const unsigned char *c, unsigned long long clen,
+ const unsigned char *ad, unsigned long long adlen,
+ const unsigned char *npub,
+ const unsigned char *k
+)
+{
+ (void)nsec;
+
+ size_t tagless_len = clen-TAG_BYTES;
+
+ bool valid = lilliput_ae_decrypt(
+ tagless_len, c, adlen, ad, k, npub, c+tagless_len, m
+ );
+
+ if (!valid)
+ return 1;
+
+ *mlen = tagless_len;
+
+ return 0;
+}