crypto_aead.c 1.14 KB
Newer Older
lwc-tester committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
#include <stdio.h>
#include <stdlib.h>
#include "subterranean_ref.h"
#include "api.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){
    /* Call AEAD function */
    subterranean_SAE_direct_encrypt(c, &c[mlen], k, 8*CRYPTO_KEYBYTES, npub, 8*CRYPTO_NPUBBYTES, 8*CRYPTO_ABYTES, ad, 8*adlen, m, 8*mlen);
    /* Compact output */
    *clen = mlen+CRYPTO_ABYTES;
    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){
    unsigned char t[CRYPTO_ABYTES];
    int tags_match;
    /* Call AEAD function */
    tags_match = subterranean_SAE_direct_decrypt(m, t, k, 8*CRYPTO_KEYBYTES, npub, 8*CRYPTO_NPUBBYTES, &c[clen-CRYPTO_ABYTES], 8*CRYPTO_ABYTES, ad, 8*adlen, c, 8*(clen-CRYPTO_ABYTES));
    /* Compact output */
    *mlen = clen-CRYPTO_ABYTES;
    return tags_match;
}