Home | History | Annotate | Line # | Download | only in crypto_box
      1 
      2 #include <limits.h>
      3 #include <stdint.h>
      4 #include <stdlib.h>
      5 
      6 #include "core.h"
      7 #include "crypto_box.h"
      8 #include "crypto_secretbox.h"
      9 #include "private/common.h"
     10 #include "utils.h"
     11 
     12 int
     13 crypto_box_detached_afternm(unsigned char *c, unsigned char *mac,
     14                             const unsigned char *m, unsigned long long mlen,
     15                             const unsigned char *n, const unsigned char *k)
     16 {
     17     return crypto_secretbox_detached(c, mac, m, mlen, n, k);
     18 }
     19 
     20 int
     21 crypto_box_detached(unsigned char *c, unsigned char *mac,
     22                     const unsigned char *m, unsigned long long mlen,
     23                     const unsigned char *n, const unsigned char *pk,
     24                     const unsigned char *sk)
     25 {
     26     unsigned char k[crypto_box_BEFORENMBYTES];
     27     int           ret;
     28 
     29     COMPILER_ASSERT(crypto_box_BEFORENMBYTES >= crypto_secretbox_KEYBYTES);
     30     if (crypto_box_beforenm(k, pk, sk) != 0) {
     31         return -1;
     32     }
     33     ret = crypto_box_detached_afternm(c, mac, m, mlen, n, k);
     34     sodium_memzero(k, sizeof k);
     35 
     36     return ret;
     37 }
     38 
     39 int
     40 crypto_box_easy_afternm(unsigned char *c, const unsigned char *m,
     41                         unsigned long long mlen, const unsigned char *n,
     42                         const unsigned char *k)
     43 {
     44     if (mlen > crypto_box_MESSAGEBYTES_MAX) {
     45         sodium_misuse();
     46     }
     47     return crypto_box_detached_afternm(c + crypto_box_MACBYTES, c, m, mlen, n,
     48                                        k);
     49 }
     50 
     51 int
     52 crypto_box_easy(unsigned char *c, const unsigned char *m,
     53                 unsigned long long mlen, const unsigned char *n,
     54                 const unsigned char *pk, const unsigned char *sk)
     55 {
     56     if (mlen > crypto_box_MESSAGEBYTES_MAX) {
     57         sodium_misuse();
     58     }
     59     return crypto_box_detached(c + crypto_box_MACBYTES, c, m, mlen, n,
     60                                pk, sk);
     61 }
     62 
     63 int
     64 crypto_box_open_detached_afternm(unsigned char *m, const unsigned char *c,
     65                                  const unsigned char *mac,
     66                                  unsigned long long clen,
     67                                  const unsigned char *n,
     68                                  const unsigned char *k)
     69 {
     70     return crypto_secretbox_open_detached(m, c, mac, clen, n, k);
     71 }
     72 
     73 int
     74 crypto_box_open_detached(unsigned char *m, const unsigned char *c,
     75                          const unsigned char *mac,
     76                          unsigned long long clen, const unsigned char *n,
     77                          const unsigned char *pk, const unsigned char *sk)
     78 {
     79     unsigned char k[crypto_box_BEFORENMBYTES];
     80     int           ret;
     81 
     82     if (crypto_box_beforenm(k, pk, sk) != 0) {
     83         return -1;
     84     }
     85     ret = crypto_box_open_detached_afternm(m, c, mac, clen, n, k);
     86     sodium_memzero(k, sizeof k);
     87 
     88     return ret;
     89 }
     90 
     91 int
     92 crypto_box_open_easy_afternm(unsigned char *m, const unsigned char *c,
     93                              unsigned long long clen, const unsigned char *n,
     94                              const unsigned char *k)
     95 {
     96     if (clen < crypto_box_MACBYTES) {
     97         return -1;
     98     }
     99     return crypto_box_open_detached_afternm(m, c + crypto_box_MACBYTES, c,
    100                                             clen - crypto_box_MACBYTES,
    101                                             n, k);
    102 }
    103 
    104 int
    105 crypto_box_open_easy(unsigned char *m, const unsigned char *c,
    106                      unsigned long long clen, const unsigned char *n,
    107                      const unsigned char *pk, const unsigned char *sk)
    108 {
    109     if (clen < crypto_box_MACBYTES) {
    110         return -1;
    111     }
    112     return crypto_box_open_detached(m, c + crypto_box_MACBYTES, c,
    113                                     clen - crypto_box_MACBYTES,
    114                                     n, pk, sk);
    115 }
    116