| Daniel King | b8025c5 | 2016-05-17 14:43:01 -0300 | [diff] [blame] | 1 | /* BEGIN_HEADER */ | 
| Manuel Pégourié-Gonnard | dca3a5d | 2018-05-07 10:43:27 +0200 | [diff] [blame] | 2 | #include "mbedtls/chachapoly.h" | 
| Daniel King | b8025c5 | 2016-05-17 14:43:01 -0300 | [diff] [blame] | 3 | /* END_HEADER */ | 
|  | 4 |  | 
|  | 5 | /* BEGIN_DEPENDENCIES | 
| Manuel Pégourié-Gonnard | dca3a5d | 2018-05-07 10:43:27 +0200 | [diff] [blame] | 6 | * depends_on:MBEDTLS_CHACHAPOLY_C | 
| Daniel King | b8025c5 | 2016-05-17 14:43:01 -0300 | [diff] [blame] | 7 | * END_DEPENDENCIES | 
|  | 8 | */ | 
|  | 9 |  | 
|  | 10 | /* BEGIN_CASE */ | 
| Manuel Pégourié-Gonnard | dca3a5d | 2018-05-07 10:43:27 +0200 | [diff] [blame] | 11 | void mbedtls_chachapoly_enc( char *hex_key_string, char *hex_nonce_string, char *hex_aad_string, char *hex_input_string, char *hex_output_string, char *hex_mac_string ) | 
| Daniel King | b8025c5 | 2016-05-17 14:43:01 -0300 | [diff] [blame] | 12 | { | 
| Manuel Pégourié-Gonnard | 528524b | 2018-05-09 11:21:21 +0200 | [diff] [blame] | 13 | unsigned char key_str[32]; /* size set by the standard */ | 
|  | 14 | unsigned char nonce_str[12]; /* size set by the standard */ | 
|  | 15 | unsigned char aad_str[12]; /* max size of test data so far */ | 
|  | 16 | unsigned char input_str[265]; /* max size of binary input/output so far */ | 
|  | 17 | unsigned char output_str[265]; | 
|  | 18 | unsigned char output[265]; | 
|  | 19 | unsigned char mac_str[16]; /* size set by the standard */ | 
|  | 20 | unsigned char mac[16]; /* size set by the standard */ | 
| Daniel King | b8025c5 | 2016-05-17 14:43:01 -0300 | [diff] [blame] | 21 | size_t input_len; | 
|  | 22 | size_t output_len; | 
|  | 23 | size_t aad_len; | 
|  | 24 | size_t key_len; | 
|  | 25 | size_t nonce_len; | 
|  | 26 | size_t mac_len; | 
| Manuel Pégourié-Gonnard | 346b8d5 | 2018-05-07 12:56:36 +0200 | [diff] [blame] | 27 | mbedtls_chachapoly_context ctx; | 
| Daniel King | b8025c5 | 2016-05-17 14:43:01 -0300 | [diff] [blame] | 28 |  | 
| Manuel Pégourié-Gonnard | 528524b | 2018-05-09 11:21:21 +0200 | [diff] [blame] | 29 | memset( key_str,    0x00, sizeof( key_str ) ); | 
|  | 30 | memset( nonce_str,  0x00, sizeof( nonce_str ) ); | 
|  | 31 | memset( aad_str,    0x00, sizeof( aad_str ) ); | 
|  | 32 | memset( input_str,  0x00, sizeof( input_str ) ); | 
|  | 33 | memset( output_str, 0x00, sizeof( output_str ) ); | 
|  | 34 | memset( mac_str,    0x00, sizeof( mac_str ) ); | 
| Daniel King | b8025c5 | 2016-05-17 14:43:01 -0300 | [diff] [blame] | 35 |  | 
|  | 36 | aad_len    = unhexify( aad_str,    hex_aad_string    ); | 
|  | 37 | input_len  = unhexify( input_str,  hex_input_string  ); | 
|  | 38 | output_len = unhexify( output_str, hex_output_string ); | 
|  | 39 | key_len    = unhexify( key_str,    hex_key_string    ); | 
|  | 40 | nonce_len  = unhexify( nonce_str,  hex_nonce_string  ); | 
|  | 41 | mac_len    = unhexify( mac_str,    hex_mac_string    ); | 
|  | 42 |  | 
|  | 43 | TEST_ASSERT( key_len   == 32 ); | 
|  | 44 | TEST_ASSERT( nonce_len == 12 ); | 
|  | 45 | TEST_ASSERT( mac_len   == 16 ); | 
|  | 46 |  | 
| Manuel Pégourié-Gonnard | 346b8d5 | 2018-05-07 12:56:36 +0200 | [diff] [blame] | 47 | mbedtls_chachapoly_init( &ctx ); | 
|  | 48 |  | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 49 | TEST_ASSERT( mbedtls_chachapoly_setkey( &ctx, key_str ) == 0 ); | 
| Manuel Pégourié-Gonnard | 346b8d5 | 2018-05-07 12:56:36 +0200 | [diff] [blame] | 50 |  | 
| Manuel Pégourié-Gonnard | 3dc62a0 | 2018-06-04 12:18:19 +0200 | [diff] [blame] | 51 | TEST_ASSERT( mbedtls_chachapoly_encrypt_and_tag( &ctx, | 
| Manuel Pégourié-Gonnard | 346b8d5 | 2018-05-07 12:56:36 +0200 | [diff] [blame] | 52 | input_len, nonce_str, | 
|  | 53 | aad_str, aad_len, | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 54 | input_str, output, mac ) == 0 ); | 
| Daniel King | b8025c5 | 2016-05-17 14:43:01 -0300 | [diff] [blame] | 55 |  | 
|  | 56 | TEST_ASSERT( memcmp( output_str, output, output_len ) == 0 ); | 
|  | 57 | TEST_ASSERT( memcmp( mac_str, mac, 16U ) == 0 ); | 
| Manuel Pégourié-Gonnard | 346b8d5 | 2018-05-07 12:56:36 +0200 | [diff] [blame] | 58 |  | 
|  | 59 | exit: | 
|  | 60 | mbedtls_chachapoly_free( &ctx ); | 
| Daniel King | b8025c5 | 2016-05-17 14:43:01 -0300 | [diff] [blame] | 61 | } | 
|  | 62 | /* END_CASE */ | 
|  | 63 |  | 
|  | 64 | /* BEGIN_CASE */ | 
| Manuel Pégourié-Gonnard | 7296771 | 2018-05-09 12:22:13 +0200 | [diff] [blame] | 65 | void mbedtls_chachapoly_dec( char *hex_key_string, char *hex_nonce_string, char *hex_aad_string, char *hex_input_string, char *hex_output_string, char *hex_mac_string, int ret_exp ) | 
| Daniel King | b8025c5 | 2016-05-17 14:43:01 -0300 | [diff] [blame] | 66 | { | 
| Manuel Pégourié-Gonnard | 528524b | 2018-05-09 11:21:21 +0200 | [diff] [blame] | 67 | unsigned char key_str[32]; /* size set by the standard */ | 
|  | 68 | unsigned char nonce_str[12]; /* size set by the standard */ | 
|  | 69 | unsigned char aad_str[12]; /* max size of test data so far */ | 
|  | 70 | unsigned char input_str[265]; /* max size of binary input/output so far */ | 
|  | 71 | unsigned char output_str[265]; | 
|  | 72 | unsigned char output[265]; | 
|  | 73 | unsigned char mac_str[16]; /* size set by the standard */ | 
| Daniel King | b8025c5 | 2016-05-17 14:43:01 -0300 | [diff] [blame] | 74 | size_t input_len; | 
|  | 75 | size_t output_len; | 
|  | 76 | size_t aad_len; | 
|  | 77 | size_t key_len; | 
|  | 78 | size_t nonce_len; | 
|  | 79 | size_t mac_len; | 
| Manuel Pégourié-Gonnard | 346b8d5 | 2018-05-07 12:56:36 +0200 | [diff] [blame] | 80 | int ret; | 
|  | 81 | mbedtls_chachapoly_context ctx; | 
| Daniel King | b8025c5 | 2016-05-17 14:43:01 -0300 | [diff] [blame] | 82 |  | 
| Manuel Pégourié-Gonnard | 528524b | 2018-05-09 11:21:21 +0200 | [diff] [blame] | 83 | memset( key_str,    0x00, sizeof( key_str ) ); | 
|  | 84 | memset( nonce_str,  0x00, sizeof( nonce_str ) ); | 
|  | 85 | memset( aad_str,    0x00, sizeof( aad_str ) ); | 
|  | 86 | memset( input_str,  0x00, sizeof( input_str ) ); | 
|  | 87 | memset( output_str, 0x00, sizeof( output_str ) ); | 
|  | 88 | memset( mac_str,    0x00, sizeof( mac_str ) ); | 
| Daniel King | b8025c5 | 2016-05-17 14:43:01 -0300 | [diff] [blame] | 89 |  | 
|  | 90 | aad_len    = unhexify( aad_str,    hex_aad_string    ); | 
|  | 91 | input_len  = unhexify( input_str,  hex_input_string  ); | 
|  | 92 | output_len = unhexify( output_str, hex_output_string ); | 
|  | 93 | key_len    = unhexify( key_str,    hex_key_string    ); | 
|  | 94 | nonce_len  = unhexify( nonce_str,  hex_nonce_string  ); | 
|  | 95 | mac_len    = unhexify( mac_str,    hex_mac_string    ); | 
|  | 96 |  | 
|  | 97 | TEST_ASSERT( key_len   == 32 ); | 
|  | 98 | TEST_ASSERT( nonce_len == 12 ); | 
|  | 99 | TEST_ASSERT( mac_len   == 16 ); | 
|  | 100 |  | 
| Manuel Pégourié-Gonnard | 346b8d5 | 2018-05-07 12:56:36 +0200 | [diff] [blame] | 101 | mbedtls_chachapoly_init( &ctx ); | 
| Daniel King | b8025c5 | 2016-05-17 14:43:01 -0300 | [diff] [blame] | 102 |  | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 103 | TEST_ASSERT( mbedtls_chachapoly_setkey( &ctx, key_str ) == 0 ); | 
| Manuel Pégourié-Gonnard | 346b8d5 | 2018-05-07 12:56:36 +0200 | [diff] [blame] | 104 |  | 
|  | 105 | ret = mbedtls_chachapoly_auth_decrypt( &ctx, | 
|  | 106 | input_len, nonce_str, | 
|  | 107 | aad_str, aad_len, | 
|  | 108 | mac_str, input_str, output ); | 
|  | 109 |  | 
| Manuel Pégourié-Gonnard | 7296771 | 2018-05-09 12:22:13 +0200 | [diff] [blame] | 110 | TEST_ASSERT( ret == ret_exp ); | 
|  | 111 | if( ret_exp == 0 ) | 
|  | 112 | { | 
|  | 113 | TEST_ASSERT( memcmp( output_str, output, output_len ) == 0 ); | 
|  | 114 | } | 
| Manuel Pégourié-Gonnard | 346b8d5 | 2018-05-07 12:56:36 +0200 | [diff] [blame] | 115 |  | 
|  | 116 | exit: | 
|  | 117 | mbedtls_chachapoly_free( &ctx ); | 
| Daniel King | b8025c5 | 2016-05-17 14:43:01 -0300 | [diff] [blame] | 118 | } | 
|  | 119 | /* END_CASE */ | 
|  | 120 |  | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 121 | /* BEGIN_CASE */ | 
|  | 122 | void chachapoly_bad_params() | 
|  | 123 | { | 
|  | 124 | unsigned char key[32]; | 
|  | 125 | unsigned char nonce[12]; | 
|  | 126 | unsigned char aad[1]; | 
|  | 127 | unsigned char input[1]; | 
|  | 128 | unsigned char output[1]; | 
|  | 129 | unsigned char mac[16]; | 
|  | 130 | size_t input_len = sizeof( input ); | 
|  | 131 | size_t aad_len = sizeof( aad ); | 
|  | 132 | mbedtls_chachapoly_context ctx; | 
|  | 133 |  | 
|  | 134 | memset( key,    0x00, sizeof( key ) ); | 
|  | 135 | memset( nonce,  0x00, sizeof( nonce ) ); | 
|  | 136 | memset( aad,    0x00, sizeof( aad ) ); | 
|  | 137 | memset( input,  0x00, sizeof( input ) ); | 
|  | 138 | memset( output, 0x00, sizeof( output ) ); | 
|  | 139 | memset( mac,    0x00, sizeof( mac ) ); | 
|  | 140 |  | 
|  | 141 | mbedtls_chachapoly_init( NULL ); | 
|  | 142 | mbedtls_chachapoly_free( NULL ); | 
|  | 143 |  | 
|  | 144 | mbedtls_chachapoly_init( &ctx ); | 
|  | 145 |  | 
|  | 146 | TEST_ASSERT( mbedtls_chachapoly_setkey( NULL, key ) | 
| Manuel Pégourié-Gonnard | 3798b6b | 2018-05-24 13:27:45 +0200 | [diff] [blame] | 147 | == MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA ); | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 148 | TEST_ASSERT( mbedtls_chachapoly_setkey( &ctx, NULL ) | 
| Manuel Pégourié-Gonnard | 3798b6b | 2018-05-24 13:27:45 +0200 | [diff] [blame] | 149 | == MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA ); | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 150 |  | 
| Manuel Pégourié-Gonnard | 3dc62a0 | 2018-06-04 12:18:19 +0200 | [diff] [blame] | 151 | TEST_ASSERT( mbedtls_chachapoly_encrypt_and_tag( NULL, | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 152 | 0, nonce, | 
|  | 153 | aad, 0, | 
|  | 154 | input, output, mac ) | 
| Manuel Pégourié-Gonnard | 3798b6b | 2018-05-24 13:27:45 +0200 | [diff] [blame] | 155 | == MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA ); | 
| Manuel Pégourié-Gonnard | 3dc62a0 | 2018-06-04 12:18:19 +0200 | [diff] [blame] | 156 | TEST_ASSERT( mbedtls_chachapoly_encrypt_and_tag( &ctx, | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 157 | 0, NULL, | 
|  | 158 | aad, 0, | 
|  | 159 | input, output, mac ) | 
| Manuel Pégourié-Gonnard | 3798b6b | 2018-05-24 13:27:45 +0200 | [diff] [blame] | 160 | == MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA ); | 
| Manuel Pégourié-Gonnard | 3dc62a0 | 2018-06-04 12:18:19 +0200 | [diff] [blame] | 161 | TEST_ASSERT( mbedtls_chachapoly_encrypt_and_tag( &ctx, | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 162 | 0, nonce, | 
|  | 163 | NULL, aad_len, | 
|  | 164 | input, output, mac ) | 
| Manuel Pégourié-Gonnard | 3798b6b | 2018-05-24 13:27:45 +0200 | [diff] [blame] | 165 | == MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA ); | 
| Manuel Pégourié-Gonnard | 3dc62a0 | 2018-06-04 12:18:19 +0200 | [diff] [blame] | 166 | TEST_ASSERT( mbedtls_chachapoly_encrypt_and_tag( &ctx, | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 167 | input_len, nonce, | 
|  | 168 | aad, 0, | 
|  | 169 | NULL, output, mac ) | 
| Manuel Pégourié-Gonnard | 3798b6b | 2018-05-24 13:27:45 +0200 | [diff] [blame] | 170 | == MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA ); | 
| Manuel Pégourié-Gonnard | 3dc62a0 | 2018-06-04 12:18:19 +0200 | [diff] [blame] | 171 | TEST_ASSERT( mbedtls_chachapoly_encrypt_and_tag( &ctx, | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 172 | input_len, nonce, | 
|  | 173 | aad, 0, | 
|  | 174 | input, NULL, mac ) | 
| Manuel Pégourié-Gonnard | 3798b6b | 2018-05-24 13:27:45 +0200 | [diff] [blame] | 175 | == MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA ); | 
| Manuel Pégourié-Gonnard | 3dc62a0 | 2018-06-04 12:18:19 +0200 | [diff] [blame] | 176 | TEST_ASSERT( mbedtls_chachapoly_encrypt_and_tag( &ctx, | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 177 | 0, nonce, | 
|  | 178 | aad, 0, | 
|  | 179 | input, output, NULL ) | 
| Manuel Pégourié-Gonnard | 3798b6b | 2018-05-24 13:27:45 +0200 | [diff] [blame] | 180 | == MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA ); | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 181 |  | 
|  | 182 | TEST_ASSERT( mbedtls_chachapoly_auth_decrypt( NULL, | 
|  | 183 | 0, nonce, | 
|  | 184 | aad, 0, | 
|  | 185 | mac, input, output ) | 
| Manuel Pégourié-Gonnard | 3798b6b | 2018-05-24 13:27:45 +0200 | [diff] [blame] | 186 | == MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA ); | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 187 | TEST_ASSERT( mbedtls_chachapoly_auth_decrypt( &ctx, | 
|  | 188 | 0, NULL, | 
|  | 189 | aad, 0, | 
|  | 190 | mac, input, output ) | 
| Manuel Pégourié-Gonnard | 3798b6b | 2018-05-24 13:27:45 +0200 | [diff] [blame] | 191 | == MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA ); | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 192 | TEST_ASSERT( mbedtls_chachapoly_auth_decrypt( &ctx, | 
|  | 193 | 0, nonce, | 
|  | 194 | NULL, aad_len, | 
|  | 195 | mac, input, output ) | 
| Manuel Pégourié-Gonnard | 3798b6b | 2018-05-24 13:27:45 +0200 | [diff] [blame] | 196 | == MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA ); | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 197 | TEST_ASSERT( mbedtls_chachapoly_auth_decrypt( &ctx, | 
|  | 198 | 0, nonce, | 
|  | 199 | aad, 0, | 
|  | 200 | NULL, input, output ) | 
| Manuel Pégourié-Gonnard | 3798b6b | 2018-05-24 13:27:45 +0200 | [diff] [blame] | 201 | == MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA ); | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 202 | TEST_ASSERT( mbedtls_chachapoly_auth_decrypt( &ctx, | 
|  | 203 | input_len, nonce, | 
|  | 204 | aad, 0, | 
|  | 205 | mac, NULL, output ) | 
| Manuel Pégourié-Gonnard | 3798b6b | 2018-05-24 13:27:45 +0200 | [diff] [blame] | 206 | == MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA ); | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 207 | TEST_ASSERT( mbedtls_chachapoly_auth_decrypt( &ctx, | 
|  | 208 | input_len, nonce, | 
|  | 209 | aad, 0, | 
|  | 210 | mac, input, NULL ) | 
| Manuel Pégourié-Gonnard | 3798b6b | 2018-05-24 13:27:45 +0200 | [diff] [blame] | 211 | == MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA ); | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 212 |  | 
| Manuel Pégourié-Gonnard | 3dc62a0 | 2018-06-04 12:18:19 +0200 | [diff] [blame] | 213 | TEST_ASSERT( mbedtls_chachapoly_encrypt_and_tag( &ctx, | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 214 | 0, nonce, | 
|  | 215 | aad, aad_len, | 
|  | 216 | NULL, NULL, mac ) | 
|  | 217 | == 0 ); | 
|  | 218 | TEST_ASSERT( mbedtls_chachapoly_auth_decrypt( &ctx, | 
|  | 219 | 0, nonce, | 
|  | 220 | aad, aad_len, | 
|  | 221 | mac, NULL, NULL ) | 
|  | 222 | == 0 ); | 
|  | 223 |  | 
| Manuel Pégourié-Gonnard | 3dc62a0 | 2018-06-04 12:18:19 +0200 | [diff] [blame] | 224 | TEST_ASSERT( mbedtls_chachapoly_encrypt_and_tag( &ctx, | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 225 | input_len, nonce, | 
|  | 226 | NULL, 0, | 
|  | 227 | input, output, mac ) | 
|  | 228 | == 0 ); | 
|  | 229 | TEST_ASSERT( mbedtls_chachapoly_auth_decrypt( &ctx, | 
|  | 230 | input_len, nonce, | 
|  | 231 | NULL, 0, | 
|  | 232 | mac, input, output ) | 
|  | 233 | == 0 ); | 
|  | 234 |  | 
|  | 235 | TEST_ASSERT( mbedtls_chachapoly_starts( NULL, nonce, MBEDTLS_CHACHAPOLY_ENCRYPT ) | 
| Manuel Pégourié-Gonnard | 3798b6b | 2018-05-24 13:27:45 +0200 | [diff] [blame] | 236 | == MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA ); | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 237 | TEST_ASSERT( mbedtls_chachapoly_starts( &ctx, NULL, MBEDTLS_CHACHAPOLY_ENCRYPT ) | 
| Manuel Pégourié-Gonnard | 3798b6b | 2018-05-24 13:27:45 +0200 | [diff] [blame] | 238 | == MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA ); | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 239 |  | 
|  | 240 | TEST_ASSERT( mbedtls_chachapoly_update_aad( NULL, aad, aad_len ) | 
| Manuel Pégourié-Gonnard | 3798b6b | 2018-05-24 13:27:45 +0200 | [diff] [blame] | 241 | == MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA ); | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 242 | TEST_ASSERT( mbedtls_chachapoly_update_aad( &ctx, NULL, aad_len ) | 
| Manuel Pégourié-Gonnard | 3798b6b | 2018-05-24 13:27:45 +0200 | [diff] [blame] | 243 | == MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA ); | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 244 |  | 
|  | 245 | TEST_ASSERT( mbedtls_chachapoly_update( NULL, input_len, input, output ) | 
| Manuel Pégourié-Gonnard | 3798b6b | 2018-05-24 13:27:45 +0200 | [diff] [blame] | 246 | == MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA ); | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 247 | TEST_ASSERT( mbedtls_chachapoly_update( &ctx, input_len, NULL, output ) | 
| Manuel Pégourié-Gonnard | 3798b6b | 2018-05-24 13:27:45 +0200 | [diff] [blame] | 248 | == MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA ); | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 249 | TEST_ASSERT( mbedtls_chachapoly_update( &ctx, input_len, input, NULL ) | 
| Manuel Pégourié-Gonnard | 3798b6b | 2018-05-24 13:27:45 +0200 | [diff] [blame] | 250 | == MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA ); | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 251 |  | 
|  | 252 | TEST_ASSERT( mbedtls_chachapoly_finish( NULL, mac ) | 
| Manuel Pégourié-Gonnard | 3798b6b | 2018-05-24 13:27:45 +0200 | [diff] [blame] | 253 | == MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA ); | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 254 | TEST_ASSERT( mbedtls_chachapoly_finish( &ctx, NULL ) | 
| Manuel Pégourié-Gonnard | 3798b6b | 2018-05-24 13:27:45 +0200 | [diff] [blame] | 255 | == MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA ); | 
| Manuel Pégourié-Gonnard | 59d2c30 | 2018-05-10 10:39:32 +0200 | [diff] [blame] | 256 |  | 
|  | 257 | exit: | 
|  | 258 | mbedtls_chachapoly_free( &ctx ); | 
|  | 259 | } | 
|  | 260 | /* END_CASE */ | 
|  | 261 |  | 
| Manuel Pégourié-Gonnard | ceb1225 | 2018-05-10 11:41:00 +0200 | [diff] [blame] | 262 | /* BEGIN_CASE */ | 
|  | 263 | void chachapoly_state() | 
|  | 264 | { | 
|  | 265 | unsigned char key[32]; | 
|  | 266 | unsigned char nonce[12]; | 
|  | 267 | unsigned char aad[1]; | 
|  | 268 | unsigned char input[1]; | 
|  | 269 | unsigned char output[1]; | 
|  | 270 | unsigned char mac[16]; | 
|  | 271 | size_t input_len = sizeof( input ); | 
|  | 272 | size_t aad_len = sizeof( aad ); | 
|  | 273 | mbedtls_chachapoly_context ctx; | 
|  | 274 |  | 
|  | 275 | memset( key,    0x00, sizeof( key ) ); | 
|  | 276 | memset( nonce,  0x00, sizeof( nonce ) ); | 
|  | 277 | memset( aad,    0x00, sizeof( aad ) ); | 
|  | 278 | memset( input,  0x00, sizeof( input ) ); | 
|  | 279 | memset( output, 0x00, sizeof( output ) ); | 
|  | 280 | memset( mac,    0x00, sizeof( mac ) ); | 
|  | 281 |  | 
|  | 282 | /* Initial state: finish, update, update_aad forbidden */ | 
|  | 283 | mbedtls_chachapoly_init( &ctx ); | 
|  | 284 |  | 
|  | 285 | TEST_ASSERT( mbedtls_chachapoly_finish( &ctx, mac ) | 
|  | 286 | == MBEDTLS_ERR_CHACHAPOLY_BAD_STATE ); | 
|  | 287 | TEST_ASSERT( mbedtls_chachapoly_update( &ctx, input_len, input, output ) | 
|  | 288 | == MBEDTLS_ERR_CHACHAPOLY_BAD_STATE ); | 
|  | 289 | TEST_ASSERT( mbedtls_chachapoly_update_aad( &ctx, aad, aad_len ) | 
|  | 290 | == MBEDTLS_ERR_CHACHAPOLY_BAD_STATE ); | 
|  | 291 |  | 
|  | 292 | /* Still initial state: finish, update, update_aad forbidden */ | 
|  | 293 | TEST_ASSERT( mbedtls_chachapoly_setkey( &ctx, key ) | 
|  | 294 | == 0 ); | 
|  | 295 |  | 
|  | 296 | TEST_ASSERT( mbedtls_chachapoly_finish( &ctx, mac ) | 
|  | 297 | == MBEDTLS_ERR_CHACHAPOLY_BAD_STATE ); | 
|  | 298 | TEST_ASSERT( mbedtls_chachapoly_update( &ctx, input_len, input, output ) | 
|  | 299 | == MBEDTLS_ERR_CHACHAPOLY_BAD_STATE ); | 
|  | 300 | TEST_ASSERT( mbedtls_chachapoly_update_aad( &ctx, aad, aad_len ) | 
|  | 301 | == MBEDTLS_ERR_CHACHAPOLY_BAD_STATE ); | 
|  | 302 |  | 
|  | 303 | /* Starts -> finish OK */ | 
|  | 304 | TEST_ASSERT( mbedtls_chachapoly_starts( &ctx, nonce, MBEDTLS_CHACHAPOLY_ENCRYPT ) | 
|  | 305 | == 0 ); | 
|  | 306 | TEST_ASSERT( mbedtls_chachapoly_finish( &ctx, mac ) | 
|  | 307 | == 0 ); | 
|  | 308 |  | 
|  | 309 | /* After finish: update, update_aad forbidden */ | 
|  | 310 | TEST_ASSERT( mbedtls_chachapoly_update( &ctx, input_len, input, output ) | 
|  | 311 | == MBEDTLS_ERR_CHACHAPOLY_BAD_STATE ); | 
|  | 312 | TEST_ASSERT( mbedtls_chachapoly_update_aad( &ctx, aad, aad_len ) | 
|  | 313 | == MBEDTLS_ERR_CHACHAPOLY_BAD_STATE ); | 
|  | 314 |  | 
|  | 315 | /* Starts -> update* OK */ | 
|  | 316 | TEST_ASSERT( mbedtls_chachapoly_starts( &ctx, nonce, MBEDTLS_CHACHAPOLY_ENCRYPT ) | 
|  | 317 | == 0 ); | 
|  | 318 | TEST_ASSERT( mbedtls_chachapoly_update( &ctx, input_len, input, output ) | 
|  | 319 | == 0 ); | 
|  | 320 | TEST_ASSERT( mbedtls_chachapoly_update( &ctx, input_len, input, output ) | 
|  | 321 | == 0 ); | 
|  | 322 |  | 
|  | 323 | /* After update: update_aad forbidden */ | 
|  | 324 | TEST_ASSERT( mbedtls_chachapoly_update_aad( &ctx, aad, aad_len ) | 
|  | 325 | == MBEDTLS_ERR_CHACHAPOLY_BAD_STATE ); | 
|  | 326 |  | 
|  | 327 | /* Starts -> update_aad* -> finish OK */ | 
|  | 328 | TEST_ASSERT( mbedtls_chachapoly_starts( &ctx, nonce, MBEDTLS_CHACHAPOLY_ENCRYPT ) | 
|  | 329 | == 0 ); | 
|  | 330 | TEST_ASSERT( mbedtls_chachapoly_update_aad( &ctx, aad, aad_len ) | 
|  | 331 | == 0 ); | 
|  | 332 | TEST_ASSERT( mbedtls_chachapoly_update_aad( &ctx, aad, aad_len ) | 
|  | 333 | == 0 ); | 
|  | 334 | TEST_ASSERT( mbedtls_chachapoly_finish( &ctx, mac ) | 
|  | 335 | == 0 ); | 
|  | 336 |  | 
|  | 337 | exit: | 
|  | 338 | mbedtls_chachapoly_free( &ctx ); | 
|  | 339 | } | 
|  | 340 | /* END_CASE */ | 
|  | 341 |  | 
| Daniel King | b8025c5 | 2016-05-17 14:43:01 -0300 | [diff] [blame] | 342 | /* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */ | 
| Manuel Pégourié-Gonnard | dca3a5d | 2018-05-07 10:43:27 +0200 | [diff] [blame] | 343 | void chachapoly_selftest() | 
| Daniel King | b8025c5 | 2016-05-17 14:43:01 -0300 | [diff] [blame] | 344 | { | 
| Manuel Pégourié-Gonnard | dca3a5d | 2018-05-07 10:43:27 +0200 | [diff] [blame] | 345 | TEST_ASSERT( mbedtls_chachapoly_self_test( 1 ) == 0 ); | 
| Daniel King | b8025c5 | 2016-05-17 14:43:01 -0300 | [diff] [blame] | 346 | } | 
|  | 347 | /* END_CASE */ |