encrypt.c 1.81 KB
Newer Older
Olivier Bronchain committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
/* Spook Reference Implementation v1
 *
 * Written in 2019 at UCLouvain (Belgium) by Olivier Bronchain, Gaetan Cassiers
 * and Charles Momin.
 * To the extent possible under law, the author(s) have dedicated all copyright
 * and related and neighboring rights to this software to the public domain
 * worldwide. This software is distributed without any warranty.
 *
 * You should have received a copy of the CC0 Public Domain Dedication along
 * with this software. If not, see
 * <http://creativecommons.org/publicdomain/zero/1.0/>.
 */
#include "crypto_aead.h"
#include "s1p.h"

#ifdef __GNUC__
#define UNUSED __attribute__((unused))
#else
#define UNUSED
#endif

// Spook encryption.
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 UNUSED,
                    const unsigned char* npub,
                    const unsigned char* k)
{
  unsigned char p[P_NBYTES];
  const unsigned char* k_priv;
  init_keys(&k_priv, p, k);
  s1p_encrypt(c, clen, ad, adlen, m, mlen, k_priv, p, npub);
  return 0;
}

// Spook encryption.
int
crypto_aead_decrypt(unsigned char* m,
                    unsigned long long* mlen,
                    unsigned char* nsec UNUSED,
                    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 p[P_NBYTES];
  const unsigned char* k_priv;
  init_keys(&k_priv, p, k);
  return s1p_decrypt(m, mlen, ad, adlen, c, clen, k_priv, p, npub);
}