170658Sobrien 270658Sobrien#include <limits.h> 385595Sobrien#include <stdint.h> 485595Sobrien#include <stdlib.h> 570658Sobrien 670658Sobrien#include "core.h" 7200038Skib#include "crypto_box.h" 8204757Suqs#include "crypto_secretbox.h" 993399Smarkm#include "private/common.h" 1070658Sobrien#include "utils.h" 1196516Sru 1270658Sobrienint 1396530Srucrypto_box_detached_afternm(unsigned char *c, unsigned char *mac, 1496530Sru const unsigned char *m, unsigned long long mlen, 1585595Sobrien const unsigned char *n, const unsigned char *k) 1670658Sobrien{ 1770658Sobrien return crypto_secretbox_detached(c, mac, m, mlen, n, k); 18200038Skib} 19200038Skib 20200038Skibint 2170658Sobriencrypto_box_detached(unsigned char *c, unsigned char *mac, 22100872Sru const unsigned char *m, unsigned long long mlen, 2396516Sru const unsigned char *n, const unsigned char *pk, 2470658Sobrien const unsigned char *sk) 2570658Sobrien{ 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 39int 40crypto_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 51int 52crypto_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 63int 64crypto_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 73int 74crypto_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 91int 92crypto_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 104int 105crypto_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