encrypt.c 931 Bytes
Newer Older
Martin Schläffer committed
1 2
#include "api.h"
#include "ascon.h"
Enrico Pozzobon committed
3
#include "crypto_aead.h"
Martin Schläffer committed
4 5
#include "permutations.h"
#include "printstate.h"
Christoph Dobraunig committed
6

Enrico Pozzobon committed
7
void ascon_aead(state_t* s, uint8_t* out, const uint8_t* in, uint64_t tlen,
Martin Schläffer committed
8 9
                const uint8_t* ad, uint64_t adlen, const uint8_t* npub,
                const uint8_t* k, uint8_t mode);
Christoph Dobraunig committed
10

Enrico Pozzobon committed
11 12 13 14 15
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) {
Martin Schläffer committed
16 17 18
  state_t s;
  (void)nsec;
  /* set ciphertext size */
Christoph Dobraunig committed
19
  *clen = mlen + CRYPTO_ABYTES;
Martin Schläffer committed
20
  /* ascon encryption */
Enrico Pozzobon committed
21
  ascon_aead(&s, c, m, mlen, ad, adlen, npub, k, ASCON_ENCRYPT);
Martin Schläffer committed
22
  /* set tag */
Martin Schläffer committed
23 24
  STOREBYTES(c + mlen, s.x3, 8);
  STOREBYTES(c + mlen + 8, s.x4, 8);
Christoph Dobraunig committed
25 26
  return 0;
}