box.c revision 1.1 1 1.1 riastrad
2 1.1 riastrad #define TEST_NAME "box"
3 1.1 riastrad #include "cmptest.h"
4 1.1 riastrad
5 1.1 riastrad static const unsigned char alicesk[32] = {
6 1.1 riastrad 0x77, 0x07, 0x6d, 0x0a, 0x73, 0x18, 0xa5, 0x7d, 0x3c, 0x16, 0xc1,
7 1.1 riastrad 0x72, 0x51, 0xb2, 0x66, 0x45, 0xdf, 0x4c, 0x2f, 0x87, 0xeb, 0xc0,
8 1.1 riastrad 0x99, 0x2a, 0xb1, 0x77, 0xfb, 0xa5, 0x1d, 0xb9, 0x2c, 0x2a
9 1.1 riastrad };
10 1.1 riastrad
11 1.1 riastrad static const unsigned char bobpk[32] = {
12 1.1 riastrad 0xde, 0x9e, 0xdb, 0x7d, 0x7b, 0x7d, 0xc1, 0xb4, 0xd3, 0x5b, 0x61,
13 1.1 riastrad 0xc2, 0xec, 0xe4, 0x35, 0x37, 0x3f, 0x83, 0x43, 0xc8, 0x5b, 0x78,
14 1.1 riastrad 0x67, 0x4d, 0xad, 0xfc, 0x7e, 0x14, 0x6f, 0x88, 0x2b, 0x4f
15 1.1 riastrad };
16 1.1 riastrad
17 1.1 riastrad static const unsigned char small_order_p[crypto_box_PUBLICKEYBYTES] = {
18 1.1 riastrad 0xe0, 0xeb, 0x7a, 0x7c, 0x3b, 0x41, 0xb8, 0xae, 0x16, 0x56, 0xe3,
19 1.1 riastrad 0xfa, 0xf1, 0x9f, 0xc4, 0x6a, 0xda, 0x09, 0x8d, 0xeb, 0x9c, 0x32,
20 1.1 riastrad 0xb1, 0xfd, 0x86, 0x62, 0x05, 0x16, 0x5f, 0x49, 0xb8, 0x00
21 1.1 riastrad };
22 1.1 riastrad
23 1.1 riastrad static const unsigned char nonce[24] = { 0x69, 0x69, 0x6e, 0xe9, 0x55, 0xb6,
24 1.1 riastrad 0x2b, 0x73, 0xcd, 0x62, 0xbd, 0xa8,
25 1.1 riastrad 0x75, 0xfc, 0x73, 0xd6, 0x82, 0x19,
26 1.1 riastrad 0xe0, 0x03, 0x6b, 0x7a, 0x0b, 0x37 };
27 1.1 riastrad
28 1.1 riastrad /* API requires first 32 bytes to be 0 */
29 1.1 riastrad static const unsigned char m[163] = {
30 1.1 riastrad 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
31 1.1 riastrad 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
32 1.1 riastrad 0, 0, 0, 0, 0, 0, 0, 0, 0xbe, 0x07, 0x5f, 0xc5,
33 1.1 riastrad 0x3c, 0x81, 0xf2, 0xd5, 0xcf, 0x14, 0x13, 0x16, 0xeb, 0xeb, 0x0c, 0x7b,
34 1.1 riastrad 0x52, 0x28, 0xc5, 0x2a, 0x4c, 0x62, 0xcb, 0xd4, 0x4b, 0x66, 0x84, 0x9b,
35 1.1 riastrad 0x64, 0x24, 0x4f, 0xfc, 0xe5, 0xec, 0xba, 0xaf, 0x33, 0xbd, 0x75, 0x1a,
36 1.1 riastrad 0x1a, 0xc7, 0x28, 0xd4, 0x5e, 0x6c, 0x61, 0x29, 0x6c, 0xdc, 0x3c, 0x01,
37 1.1 riastrad 0x23, 0x35, 0x61, 0xf4, 0x1d, 0xb6, 0x6c, 0xce, 0x31, 0x4a, 0xdb, 0x31,
38 1.1 riastrad 0x0e, 0x3b, 0xe8, 0x25, 0x0c, 0x46, 0xf0, 0x6d, 0xce, 0xea, 0x3a, 0x7f,
39 1.1 riastrad 0xa1, 0x34, 0x80, 0x57, 0xe2, 0xf6, 0x55, 0x6a, 0xd6, 0xb1, 0x31, 0x8a,
40 1.1 riastrad 0x02, 0x4a, 0x83, 0x8f, 0x21, 0xaf, 0x1f, 0xde, 0x04, 0x89, 0x77, 0xeb,
41 1.1 riastrad 0x48, 0xf5, 0x9f, 0xfd, 0x49, 0x24, 0xca, 0x1c, 0x60, 0x90, 0x2e, 0x52,
42 1.1 riastrad 0xf0, 0xa0, 0x89, 0xbc, 0x76, 0x89, 0x70, 0x40, 0xe0, 0x82, 0xf9, 0x37,
43 1.1 riastrad 0x76, 0x38, 0x48, 0x64, 0x5e, 0x07, 0x05
44 1.1 riastrad };
45 1.1 riastrad
46 1.1 riastrad static unsigned char c[163];
47 1.1 riastrad
48 1.1 riastrad int
49 1.1 riastrad main(void)
50 1.1 riastrad {
51 1.1 riastrad unsigned char k[crypto_box_BEFORENMBYTES];
52 1.1 riastrad int i;
53 1.1 riastrad int ret;
54 1.1 riastrad
55 1.1 riastrad ret = crypto_box(c, m, 163, nonce, bobpk, alicesk);
56 1.1 riastrad assert(ret == 0);
57 1.1 riastrad for (i = 16; i < 163; ++i) {
58 1.1 riastrad printf(",0x%02x", (unsigned int) c[i]);
59 1.1 riastrad if (i % 8 == 7)
60 1.1 riastrad printf("\n");
61 1.1 riastrad }
62 1.1 riastrad printf("\n");
63 1.1 riastrad
64 1.1 riastrad ret = crypto_box(c, m, 163, nonce, small_order_p, alicesk);
65 1.1 riastrad assert(ret == -1);
66 1.1 riastrad
67 1.1 riastrad memset(c, 0, sizeof c);
68 1.1 riastrad
69 1.1 riastrad ret = crypto_box_beforenm(k, bobpk, alicesk);
70 1.1 riastrad assert(ret == 0);
71 1.1 riastrad crypto_box_afternm(c, m, 163, nonce, k);
72 1.1 riastrad for (i = 16; i < 163; ++i) {
73 1.1 riastrad printf(",0x%02x", (unsigned int) c[i]);
74 1.1 riastrad if (i % 8 == 7)
75 1.1 riastrad printf("\n");
76 1.1 riastrad }
77 1.1 riastrad printf("\n");
78 1.1 riastrad
79 1.1 riastrad ret = crypto_box_beforenm(k, small_order_p, alicesk);
80 1.1 riastrad assert(ret == -1);
81 1.1 riastrad
82 1.1 riastrad assert(crypto_box_seedbytes() > 0U);
83 1.1 riastrad assert(crypto_box_publickeybytes() > 0U);
84 1.1 riastrad assert(crypto_box_secretkeybytes() > 0U);
85 1.1 riastrad assert(crypto_box_beforenmbytes() > 0U);
86 1.1 riastrad assert(crypto_box_noncebytes() > 0U);
87 1.1 riastrad assert(crypto_box_zerobytes() > 0U);
88 1.1 riastrad assert(crypto_box_boxzerobytes() > 0U);
89 1.1 riastrad assert(crypto_box_macbytes() > 0U);
90 1.1 riastrad assert(crypto_box_messagebytes_max() > 0U);
91 1.1 riastrad assert(strcmp(crypto_box_primitive(), "curve25519xsalsa20poly1305") == 0);
92 1.1 riastrad assert(crypto_box_curve25519xsalsa20poly1305_seedbytes() ==
93 1.1 riastrad crypto_box_seedbytes());
94 1.1 riastrad assert(crypto_box_curve25519xsalsa20poly1305_publickeybytes() ==
95 1.1 riastrad crypto_box_publickeybytes());
96 1.1 riastrad assert(crypto_box_curve25519xsalsa20poly1305_secretkeybytes() ==
97 1.1 riastrad crypto_box_secretkeybytes());
98 1.1 riastrad assert(crypto_box_curve25519xsalsa20poly1305_beforenmbytes() ==
99 1.1 riastrad crypto_box_beforenmbytes());
100 1.1 riastrad assert(crypto_box_curve25519xsalsa20poly1305_noncebytes() ==
101 1.1 riastrad crypto_box_noncebytes());
102 1.1 riastrad assert(crypto_box_curve25519xsalsa20poly1305_zerobytes() ==
103 1.1 riastrad crypto_box_zerobytes());
104 1.1 riastrad assert(crypto_box_curve25519xsalsa20poly1305_boxzerobytes() ==
105 1.1 riastrad crypto_box_boxzerobytes());
106 1.1 riastrad assert(crypto_box_curve25519xsalsa20poly1305_macbytes() ==
107 1.1 riastrad crypto_box_macbytes());
108 1.1 riastrad assert(crypto_box_curve25519xsalsa20poly1305_messagebytes_max() ==
109 1.1 riastrad crypto_box_messagebytes_max());
110 1.1 riastrad
111 1.1 riastrad return 0;
112 1.1 riastrad }
113