crypto_box_easy.c 3.6 KB

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