|
28 | 28 | } \ |
29 | 29 | } while (0) |
30 | 30 |
|
31 | | -static int test_sign(void) |
| 31 | + |
| 32 | +static int test_sign_core(uint8_t pk[CRYPTO_PUBLICKEYBYTES], |
| 33 | + uint8_t sk[CRYPTO_SECRETKEYBYTES], |
| 34 | + uint8_t sm[MLEN + CRYPTO_BYTES], uint8_t m[MLEN], |
| 35 | + uint8_t m2[MLEN + CRYPTO_BYTES], uint8_t ctx[CTXLEN]) |
32 | 36 | { |
33 | | - uint8_t pk[CRYPTO_PUBLICKEYBYTES]; |
34 | | - uint8_t sk[CRYPTO_SECRETKEYBYTES]; |
35 | | - uint8_t sm[MLEN + CRYPTO_BYTES]; |
36 | | - uint8_t m[MLEN]; |
37 | | - uint8_t m2[MLEN + CRYPTO_BYTES]; |
38 | | - uint8_t ctx[CTXLEN]; |
39 | 37 | size_t smlen; |
40 | 38 | size_t mlen; |
41 | 39 | int rc; |
42 | 40 |
|
43 | 41 |
|
44 | 42 | CHECK(crypto_sign_keypair(pk, sk) == 0); |
45 | 43 | randombytes(ctx, CTXLEN); |
46 | | - MLD_CT_TESTING_SECRET(ctx, sizeof(ctx)); |
| 44 | + MLD_CT_TESTING_SECRET(ctx, CTXLEN); |
47 | 45 | randombytes(m, MLEN); |
48 | | - MLD_CT_TESTING_SECRET(m, sizeof(m)); |
| 46 | + MLD_CT_TESTING_SECRET(m, MLEN); |
49 | 47 |
|
50 | 48 | CHECK(crypto_sign(sm, &smlen, m, MLEN, ctx, CTXLEN, sk) == 0); |
51 | 49 |
|
52 | 50 | rc = crypto_sign_open(m2, &mlen, sm, smlen, ctx, CTXLEN, pk); |
53 | 51 |
|
54 | 52 | /* Constant time: Declassify outputs to check them. */ |
55 | 53 | MLD_CT_TESTING_DECLASSIFY(rc, sizeof(int)); |
56 | | - MLD_CT_TESTING_DECLASSIFY(m, sizeof(m)); |
57 | | - MLD_CT_TESTING_DECLASSIFY(m2, sizeof(m2)); |
| 54 | + MLD_CT_TESTING_DECLASSIFY(m, MLEN); |
| 55 | + MLD_CT_TESTING_DECLASSIFY(m2, (MLEN + CRYPTO_BYTES)); |
58 | 56 |
|
59 | 57 | if (rc) |
60 | 58 | { |
@@ -83,6 +81,30 @@ static int test_sign(void) |
83 | 81 | return 0; |
84 | 82 | } |
85 | 83 |
|
| 84 | +static int test_sign(void) |
| 85 | +{ |
| 86 | + uint8_t pk[CRYPTO_PUBLICKEYBYTES]; |
| 87 | + uint8_t sk[CRYPTO_SECRETKEYBYTES]; |
| 88 | + uint8_t sm[MLEN + CRYPTO_BYTES]; |
| 89 | + uint8_t m[MLEN]; |
| 90 | + uint8_t m2[MLEN + CRYPTO_BYTES]; |
| 91 | + uint8_t ctx[CTXLEN]; |
| 92 | + |
| 93 | + return test_sign_core(pk, sk, sm, m, m2, ctx); |
| 94 | +} |
| 95 | + |
| 96 | +static int test_sign_unaligned(void) |
| 97 | +{ |
| 98 | + MLD_ALIGN uint8_t pk[CRYPTO_PUBLICKEYBYTES + 1]; |
| 99 | + MLD_ALIGN uint8_t sk[CRYPTO_SECRETKEYBYTES + 1]; |
| 100 | + MLD_ALIGN uint8_t sm[MLEN + CRYPTO_BYTES + 1]; |
| 101 | + MLD_ALIGN uint8_t m[MLEN + 1]; |
| 102 | + MLD_ALIGN uint8_t m2[MLEN + CRYPTO_BYTES + 1]; |
| 103 | + MLD_ALIGN uint8_t ctx[CTXLEN + 1]; |
| 104 | + |
| 105 | + return test_sign_core(pk + 1, sk + 1, sm + 1, m + 1, m2 + 1, ctx + 1); |
| 106 | +} |
| 107 | + |
86 | 108 | static int test_wrong_pk(void) |
87 | 109 | { |
88 | 110 | uint8_t pk[CRYPTO_PUBLICKEYBYTES]; |
@@ -249,6 +271,7 @@ int main(void) |
249 | 271 | for (i = 0; i < NTESTS; i++) |
250 | 272 | { |
251 | 273 | r = test_sign(); |
| 274 | + r |= test_sign_unaligned(); |
252 | 275 | r |= test_wrong_pk(); |
253 | 276 | r |= test_wrong_sig(); |
254 | 277 | r |= test_wrong_ctx(); |
|
0 commit comments