box_seal.c (4861B)
1 2 #define TEST_NAME "box_seal" 3 #include "cmptest.h" 4 5 static 6 void tv1(void) 7 { 8 unsigned char pk[crypto_box_PUBLICKEYBYTES]; 9 unsigned char sk[crypto_box_SECRETKEYBYTES]; 10 unsigned char *c; 11 unsigned char *m; 12 unsigned char *m2; 13 size_t m_len; 14 size_t c_len; 15 16 crypto_box_keypair(pk, sk); 17 m_len = (size_t) randombytes_uniform(1000); 18 c_len = crypto_box_SEALBYTES + m_len; 19 m = (unsigned char *) sodium_malloc(m_len); 20 m2 = (unsigned char *) sodium_malloc(m_len); 21 c = (unsigned char *) sodium_malloc(c_len); 22 randombytes_buf(m, m_len); 23 if (crypto_box_seal(c, m, m_len, pk) != 0) { 24 printf("crypto_box_seal() failure\n"); 25 return; 26 } 27 if (crypto_box_seal_open(m2, c, c_len, pk, sk) != 0) { 28 printf("crypto_box_seal_open() failure\n"); 29 return; 30 } 31 printf("%d\n", memcmp(m, m2, m_len)); 32 33 printf("%d\n", crypto_box_seal_open(m, c, 0U, pk, sk)); 34 printf("%d\n", crypto_box_seal_open(m, c, c_len - 1U, pk, sk)); 35 printf("%d\n", crypto_box_seal_open(m, c, c_len, sk, pk)); 36 37 sodium_free(c); 38 sodium_free(m); 39 sodium_free(m2); 40 41 assert(crypto_box_sealbytes() == crypto_box_SEALBYTES); 42 } 43 44 static 45 void tv2(void) 46 { 47 unsigned char pk[crypto_box_PUBLICKEYBYTES]; 48 unsigned char sk[crypto_box_SECRETKEYBYTES]; 49 unsigned char *cm; 50 unsigned char *m2; 51 size_t m_len; 52 size_t cm_len; 53 54 crypto_box_keypair(pk, sk); 55 m_len = (size_t) randombytes_uniform(1000); 56 cm_len = crypto_box_SEALBYTES + m_len; 57 m2 = (unsigned char *) sodium_malloc(m_len); 58 cm = (unsigned char *) sodium_malloc(cm_len); 59 randombytes_buf(cm, m_len); 60 if (crypto_box_seal(cm, cm, m_len, pk) != 0) { 61 printf("crypto_box_seal() failure\n"); 62 return; 63 } 64 if (crypto_box_seal_open(m2, cm, cm_len, pk, sk) != 0) { 65 printf("crypto_box_seal_open() failure\n"); 66 return; 67 } 68 assert(m_len < 8 || memcmp(cm, m2, m_len) != 0); 69 sodium_free(cm); 70 sodium_free(m2); 71 } 72 73 #ifndef SODIUM_LIBRARY_MINIMAL 74 static 75 void tv3(void) 76 { 77 unsigned char pk[crypto_box_curve25519xchacha20poly1305_PUBLICKEYBYTES]; 78 unsigned char sk[crypto_box_curve25519xchacha20poly1305_SECRETKEYBYTES]; 79 unsigned char *c; 80 unsigned char *m; 81 unsigned char *m2; 82 size_t m_len; 83 size_t c_len; 84 85 crypto_box_curve25519xchacha20poly1305_keypair(pk, sk); 86 m_len = (size_t) randombytes_uniform(1000); 87 c_len = crypto_box_curve25519xchacha20poly1305_SEALBYTES + m_len; 88 m = (unsigned char *) sodium_malloc(m_len); 89 m2 = (unsigned char *) sodium_malloc(m_len); 90 c = (unsigned char *) sodium_malloc(c_len); 91 randombytes_buf(m, m_len); 92 if (crypto_box_curve25519xchacha20poly1305_seal(c, m, m_len, pk) != 0) { 93 printf("crypto_box_curve25519xchacha20poly1305_seal() failure\n"); 94 return; 95 } 96 if (crypto_box_curve25519xchacha20poly1305_seal_open(m2, c, c_len, pk, sk) != 0) { 97 printf("crypto_box_curve25519xchacha20poly1305_seal_open() failure\n"); 98 return; 99 } 100 printf("%d\n", memcmp(m, m2, m_len)); 101 102 printf("%d\n", crypto_box_curve25519xchacha20poly1305_seal_open(m, c, 0U, pk, sk)); 103 printf("%d\n", crypto_box_curve25519xchacha20poly1305_seal_open(m, c, c_len - 1U, pk, sk)); 104 printf("%d\n", crypto_box_curve25519xchacha20poly1305_seal_open(m, c, c_len, sk, pk)); 105 106 sodium_free(c); 107 sodium_free(m); 108 sodium_free(m2); 109 110 assert(crypto_box_curve25519xchacha20poly1305_sealbytes() == 111 crypto_box_curve25519xchacha20poly1305_SEALBYTES); 112 } 113 114 static 115 void tv4(void) 116 { 117 unsigned char pk[crypto_box_curve25519xchacha20poly1305_PUBLICKEYBYTES]; 118 unsigned char sk[crypto_box_curve25519xchacha20poly1305_SECRETKEYBYTES]; 119 unsigned char *cm; 120 unsigned char *m2; 121 size_t m_len; 122 size_t cm_len; 123 124 crypto_box_curve25519xchacha20poly1305_keypair(pk, sk); 125 m_len = (size_t) randombytes_uniform(1000); 126 cm_len = crypto_box_curve25519xchacha20poly1305_SEALBYTES + m_len; 127 m2 = (unsigned char *) sodium_malloc(m_len); 128 cm = (unsigned char *) sodium_malloc(cm_len); 129 randombytes_buf(cm, m_len); 130 if (crypto_box_curve25519xchacha20poly1305_seal(cm, cm, m_len, pk) != 0) { 131 printf("crypto_box_curve25519xchacha20poly1305_seal() failure\n"); 132 return; 133 } 134 if (crypto_box_curve25519xchacha20poly1305_seal_open(m2, cm, cm_len, pk, sk) != 0) { 135 printf("crypto_box_curve25519xchacha20poly1305_seal_open() failure\n"); 136 return; 137 } 138 assert(m_len < 8 || memcmp(cm, m2, m_len) != 0); 139 sodium_free(cm); 140 sodium_free(m2); 141 } 142 143 #else 144 145 static 146 void tv3(void) 147 { 148 printf("0\n-1\n-1\n-1\n"); 149 } 150 151 static 152 void tv4(void) 153 { } 154 #endif 155 156 int 157 main(void) 158 { 159 tv1(); 160 tv2(); 161 tv3(); 162 tv4(); 163 164 return 0; 165 }