| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  | /* BEGIN_HEADER */ | 
					
						
							|  |  |  | #include "mbedtls/chachapoly.h" | 
					
						
							|  |  |  | /* END_HEADER */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* BEGIN_DEPENDENCIES | 
					
						
							|  |  |  |  * depends_on:MBEDTLS_CHACHAPOLY_C | 
					
						
							|  |  |  |  * END_DEPENDENCIES | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* BEGIN_CASE */ | 
					
						
							| 
									
										
										
										
											2021-03-06 01:41:47 +01:00
										 |  |  | void mbedtls_chachapoly_enc( data_t *key_str, data_t *nonce_str, data_t *aad_str, data_t *input_str, data_t *output_str, data_t *mac_str ) | 
					
						
							| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  | { | 
					
						
							|  |  |  |     unsigned char output[265]; | 
					
						
							|  |  |  |     unsigned char mac[16]; /* size set by the standard */ | 
					
						
							|  |  |  |     mbedtls_chachapoly_context ctx; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-06 01:41:47 +01:00
										 |  |  |     TEST_ASSERT( key_str->len   == 32 ); | 
					
						
							|  |  |  |     TEST_ASSERT( nonce_str->len == 12 ); | 
					
						
							|  |  |  |     TEST_ASSERT( mac_str->len   == 16 ); | 
					
						
							| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     mbedtls_chachapoly_init( &ctx ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-06 01:41:47 +01:00
										 |  |  |     TEST_ASSERT( mbedtls_chachapoly_setkey( &ctx, key_str->x ) == 0 ); | 
					
						
							| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     TEST_ASSERT( mbedtls_chachapoly_encrypt_and_tag( &ctx, | 
					
						
							| 
									
										
										
										
											2021-03-06 01:41:47 +01:00
										 |  |  |                                       input_str->len, nonce_str->x, | 
					
						
							|  |  |  |                                       aad_str->x, aad_str->len, | 
					
						
							|  |  |  |                                       input_str->x, output, mac ) == 0 ); | 
					
						
							| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-06 01:41:47 +01:00
										 |  |  |     TEST_ASSERT( memcmp( output_str->x, output, output_str->len ) == 0 ); | 
					
						
							|  |  |  |     TEST_ASSERT( memcmp( mac_str->x, mac, 16U ) == 0 ); | 
					
						
							| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | exit: | 
					
						
							|  |  |  |     mbedtls_chachapoly_free( &ctx ); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | /* END_CASE */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* BEGIN_CASE */ | 
					
						
							| 
									
										
										
										
											2021-03-06 01:41:47 +01:00
										 |  |  | void mbedtls_chachapoly_dec( data_t *key_str, data_t *nonce_str, data_t *aad_str, data_t *input_str, data_t *output_str, data_t *mac_str, int ret_exp ) | 
					
						
							| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  | { | 
					
						
							|  |  |  |     unsigned char output[265]; | 
					
						
							|  |  |  |     int ret; | 
					
						
							|  |  |  |     mbedtls_chachapoly_context ctx; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-06 01:41:47 +01:00
										 |  |  |     TEST_ASSERT( key_str->len   == 32 ); | 
					
						
							|  |  |  |     TEST_ASSERT( nonce_str->len == 12 ); | 
					
						
							|  |  |  |     TEST_ASSERT( mac_str->len   == 16 ); | 
					
						
							| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     mbedtls_chachapoly_init( &ctx ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-06 01:41:47 +01:00
										 |  |  |     TEST_ASSERT( mbedtls_chachapoly_setkey( &ctx, key_str->x ) == 0 ); | 
					
						
							| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     ret = mbedtls_chachapoly_auth_decrypt( &ctx, | 
					
						
							| 
									
										
										
										
											2021-03-06 01:41:47 +01:00
										 |  |  |                                            input_str->len, nonce_str->x, | 
					
						
							|  |  |  |                                            aad_str->x, aad_str->len, | 
					
						
							|  |  |  |                                            mac_str->x, input_str->x, output ); | 
					
						
							| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     TEST_ASSERT( ret == ret_exp ); | 
					
						
							|  |  |  |     if( ret_exp == 0 ) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2021-03-06 01:41:47 +01:00
										 |  |  |         TEST_ASSERT( memcmp( output_str->x, output, output_str->len ) == 0 ); | 
					
						
							| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | exit: | 
					
						
							|  |  |  |     mbedtls_chachapoly_free( &ctx ); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | /* END_CASE */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-06 01:41:47 +01:00
										 |  |  | /* BEGIN_CASE depends_on:MBEDTLS_CHECK_PARAMS:!MBEDTLS_PARAM_FAILED_ALT */ | 
					
						
							| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  | void chachapoly_bad_params() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     unsigned char key[32]; | 
					
						
							|  |  |  |     unsigned char nonce[12]; | 
					
						
							|  |  |  |     unsigned char aad[1]; | 
					
						
							|  |  |  |     unsigned char input[1]; | 
					
						
							|  |  |  |     unsigned char output[1]; | 
					
						
							|  |  |  |     unsigned char mac[16]; | 
					
						
							|  |  |  |     size_t input_len = sizeof( input ); | 
					
						
							|  |  |  |     size_t aad_len = sizeof( aad ); | 
					
						
							|  |  |  |     mbedtls_chachapoly_context ctx; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     memset( key,    0x00, sizeof( key ) ); | 
					
						
							|  |  |  |     memset( nonce,  0x00, sizeof( nonce ) ); | 
					
						
							|  |  |  |     memset( aad,    0x00, sizeof( aad ) ); | 
					
						
							|  |  |  |     memset( input,  0x00, sizeof( input ) ); | 
					
						
							|  |  |  |     memset( output, 0x00, sizeof( output ) ); | 
					
						
							|  |  |  |     memset( mac,    0x00, sizeof( mac ) ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-06 01:41:47 +01:00
										 |  |  |     TEST_INVALID_PARAM( mbedtls_chachapoly_init( NULL ) ); | 
					
						
							|  |  |  |     TEST_VALID_PARAM( mbedtls_chachapoly_free( NULL ) ); | 
					
						
							| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-06 01:41:47 +01:00
										 |  |  |     /* setkey */ | 
					
						
							|  |  |  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, | 
					
						
							|  |  |  |                             mbedtls_chachapoly_setkey( NULL, key ) ); | 
					
						
							|  |  |  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, | 
					
						
							|  |  |  |                             mbedtls_chachapoly_setkey( &ctx, NULL ) ); | 
					
						
							| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-06 01:41:47 +01:00
										 |  |  |     /* encrypt_and_tag */ | 
					
						
							|  |  |  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, | 
					
						
							|  |  |  |                             mbedtls_chachapoly_encrypt_and_tag( NULL, | 
					
						
							| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  |                                       0, nonce, | 
					
						
							|  |  |  |                                       aad, 0, | 
					
						
							| 
									
										
										
										
											2021-03-06 01:41:47 +01:00
										 |  |  |                                       input, output, mac ) ); | 
					
						
							|  |  |  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, | 
					
						
							|  |  |  |                             mbedtls_chachapoly_encrypt_and_tag( &ctx, | 
					
						
							| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  |                                       0, NULL, | 
					
						
							|  |  |  |                                       aad, 0, | 
					
						
							| 
									
										
										
										
											2021-03-06 01:41:47 +01:00
										 |  |  |                                       input, output, mac ) ); | 
					
						
							|  |  |  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, | 
					
						
							|  |  |  |                             mbedtls_chachapoly_encrypt_and_tag( &ctx, | 
					
						
							| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  |                                       0, nonce, | 
					
						
							|  |  |  |                                       NULL, aad_len, | 
					
						
							| 
									
										
										
										
											2021-03-06 01:41:47 +01:00
										 |  |  |                                       input, output, mac ) ); | 
					
						
							|  |  |  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, | 
					
						
							|  |  |  |                             mbedtls_chachapoly_encrypt_and_tag( &ctx, | 
					
						
							| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  |                                       input_len, nonce, | 
					
						
							|  |  |  |                                       aad, 0, | 
					
						
							| 
									
										
										
										
											2021-03-06 01:41:47 +01:00
										 |  |  |                                       NULL, output, mac ) ); | 
					
						
							|  |  |  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, | 
					
						
							|  |  |  |                             mbedtls_chachapoly_encrypt_and_tag( &ctx, | 
					
						
							| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  |                                       input_len, nonce, | 
					
						
							|  |  |  |                                       aad, 0, | 
					
						
							| 
									
										
										
										
											2021-03-06 01:41:47 +01:00
										 |  |  |                                       input, NULL, mac ) ); | 
					
						
							|  |  |  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, | 
					
						
							|  |  |  |                             mbedtls_chachapoly_encrypt_and_tag( &ctx, | 
					
						
							| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  |                                       0, nonce, | 
					
						
							|  |  |  |                                       aad, 0, | 
					
						
							| 
									
										
										
										
											2021-03-06 01:41:47 +01:00
										 |  |  |                                       input, output, NULL ) ); | 
					
						
							| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-06 01:41:47 +01:00
										 |  |  |     /* auth_decrypt */ | 
					
						
							|  |  |  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, | 
					
						
							|  |  |  |                             mbedtls_chachapoly_auth_decrypt( NULL, | 
					
						
							| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  |                                            0, nonce, | 
					
						
							|  |  |  |                                            aad, 0, | 
					
						
							| 
									
										
										
										
											2021-03-06 01:41:47 +01:00
										 |  |  |                                            mac, input, output ) ); | 
					
						
							|  |  |  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, | 
					
						
							|  |  |  |                             mbedtls_chachapoly_auth_decrypt( &ctx, | 
					
						
							| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  |                                            0, NULL, | 
					
						
							|  |  |  |                                            aad, 0, | 
					
						
							| 
									
										
										
										
											2021-03-06 01:41:47 +01:00
										 |  |  |                                            mac, input, output ) ); | 
					
						
							|  |  |  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, | 
					
						
							|  |  |  |                             mbedtls_chachapoly_auth_decrypt( &ctx, | 
					
						
							| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  |                                            0, nonce, | 
					
						
							|  |  |  |                                            NULL, aad_len, | 
					
						
							| 
									
										
										
										
											2021-03-06 01:41:47 +01:00
										 |  |  |                                            mac, input, output ) ); | 
					
						
							|  |  |  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, | 
					
						
							|  |  |  |                             mbedtls_chachapoly_auth_decrypt( &ctx, | 
					
						
							| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  |                                            0, nonce, | 
					
						
							|  |  |  |                                            aad, 0, | 
					
						
							| 
									
										
										
										
											2021-03-06 01:41:47 +01:00
										 |  |  |                                            NULL, input, output ) ); | 
					
						
							|  |  |  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, | 
					
						
							|  |  |  |                             mbedtls_chachapoly_auth_decrypt( &ctx, | 
					
						
							| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  |                                            input_len, nonce, | 
					
						
							|  |  |  |                                            aad, 0, | 
					
						
							| 
									
										
										
										
											2021-03-06 01:41:47 +01:00
										 |  |  |                                            mac, NULL, output ) ); | 
					
						
							|  |  |  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, | 
					
						
							|  |  |  |                             mbedtls_chachapoly_auth_decrypt( &ctx, | 
					
						
							| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  |                                            input_len, nonce, | 
					
						
							|  |  |  |                                            aad, 0, | 
					
						
							| 
									
										
										
										
											2021-03-06 01:41:47 +01:00
										 |  |  |                                            mac, input, NULL ) ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* starts */ | 
					
						
							|  |  |  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, | 
					
						
							|  |  |  |                             mbedtls_chachapoly_starts( NULL, nonce, | 
					
						
							|  |  |  |                                                MBEDTLS_CHACHAPOLY_ENCRYPT ) ); | 
					
						
							|  |  |  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, | 
					
						
							|  |  |  |                             mbedtls_chachapoly_starts( &ctx, NULL, | 
					
						
							|  |  |  |                                                MBEDTLS_CHACHAPOLY_ENCRYPT ) ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* update_aad */ | 
					
						
							|  |  |  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, | 
					
						
							|  |  |  |                             mbedtls_chachapoly_update_aad( NULL, aad, | 
					
						
							|  |  |  |                                                            aad_len ) ); | 
					
						
							|  |  |  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, | 
					
						
							|  |  |  |                             mbedtls_chachapoly_update_aad( &ctx, NULL, | 
					
						
							|  |  |  |                                                            aad_len ) ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* update */ | 
					
						
							|  |  |  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, | 
					
						
							|  |  |  |                             mbedtls_chachapoly_update( NULL, input_len, | 
					
						
							|  |  |  |                                                        input, output ) ); | 
					
						
							|  |  |  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, | 
					
						
							|  |  |  |                             mbedtls_chachapoly_update( &ctx, input_len, | 
					
						
							|  |  |  |                                                        NULL, output ) ); | 
					
						
							|  |  |  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, | 
					
						
							|  |  |  |                             mbedtls_chachapoly_update( &ctx, input_len, | 
					
						
							|  |  |  |                                                        input, NULL ) ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* finish */ | 
					
						
							|  |  |  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, | 
					
						
							|  |  |  |                             mbedtls_chachapoly_finish( NULL, mac ) ); | 
					
						
							|  |  |  |     TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, | 
					
						
							|  |  |  |                             mbedtls_chachapoly_finish( &ctx, NULL ) ); | 
					
						
							| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | exit: | 
					
						
							| 
									
										
										
										
											2021-03-06 01:41:47 +01:00
										 |  |  |     return; | 
					
						
							| 
									
										
										
										
											2020-12-28 15:15:37 +00:00
										 |  |  | } | 
					
						
							|  |  |  | /* END_CASE */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* BEGIN_CASE */ | 
					
						
							|  |  |  | void chachapoly_state() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     unsigned char key[32]; | 
					
						
							|  |  |  |     unsigned char nonce[12]; | 
					
						
							|  |  |  |     unsigned char aad[1]; | 
					
						
							|  |  |  |     unsigned char input[1]; | 
					
						
							|  |  |  |     unsigned char output[1]; | 
					
						
							|  |  |  |     unsigned char mac[16]; | 
					
						
							|  |  |  |     size_t input_len = sizeof( input ); | 
					
						
							|  |  |  |     size_t aad_len = sizeof( aad ); | 
					
						
							|  |  |  |     mbedtls_chachapoly_context ctx; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     memset( key,    0x00, sizeof( key ) ); | 
					
						
							|  |  |  |     memset( nonce,  0x00, sizeof( nonce ) ); | 
					
						
							|  |  |  |     memset( aad,    0x00, sizeof( aad ) ); | 
					
						
							|  |  |  |     memset( input,  0x00, sizeof( input ) ); | 
					
						
							|  |  |  |     memset( output, 0x00, sizeof( output ) ); | 
					
						
							|  |  |  |     memset( mac,    0x00, sizeof( mac ) ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* Initial state: finish, update, update_aad forbidden */ | 
					
						
							|  |  |  |     mbedtls_chachapoly_init( &ctx ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     TEST_ASSERT( mbedtls_chachapoly_finish( &ctx, mac ) | 
					
						
							|  |  |  |                  == MBEDTLS_ERR_CHACHAPOLY_BAD_STATE ); | 
					
						
							|  |  |  |     TEST_ASSERT( mbedtls_chachapoly_update( &ctx, input_len, input, output ) | 
					
						
							|  |  |  |                  == MBEDTLS_ERR_CHACHAPOLY_BAD_STATE ); | 
					
						
							|  |  |  |     TEST_ASSERT( mbedtls_chachapoly_update_aad( &ctx, aad, aad_len ) | 
					
						
							|  |  |  |                  == MBEDTLS_ERR_CHACHAPOLY_BAD_STATE ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* Still initial state: finish, update, update_aad forbidden */ | 
					
						
							|  |  |  |     TEST_ASSERT( mbedtls_chachapoly_setkey( &ctx, key ) | 
					
						
							|  |  |  |                  == 0 ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     TEST_ASSERT( mbedtls_chachapoly_finish( &ctx, mac ) | 
					
						
							|  |  |  |                  == MBEDTLS_ERR_CHACHAPOLY_BAD_STATE ); | 
					
						
							|  |  |  |     TEST_ASSERT( mbedtls_chachapoly_update( &ctx, input_len, input, output ) | 
					
						
							|  |  |  |                  == MBEDTLS_ERR_CHACHAPOLY_BAD_STATE ); | 
					
						
							|  |  |  |     TEST_ASSERT( mbedtls_chachapoly_update_aad( &ctx, aad, aad_len ) | 
					
						
							|  |  |  |                  == MBEDTLS_ERR_CHACHAPOLY_BAD_STATE ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* Starts -> finish OK */ | 
					
						
							|  |  |  |     TEST_ASSERT( mbedtls_chachapoly_starts( &ctx, nonce, MBEDTLS_CHACHAPOLY_ENCRYPT ) | 
					
						
							|  |  |  |                  == 0 ); | 
					
						
							|  |  |  |     TEST_ASSERT( mbedtls_chachapoly_finish( &ctx, mac ) | 
					
						
							|  |  |  |                  == 0 ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* After finish: update, update_aad forbidden */ | 
					
						
							|  |  |  |     TEST_ASSERT( mbedtls_chachapoly_update( &ctx, input_len, input, output ) | 
					
						
							|  |  |  |                  == MBEDTLS_ERR_CHACHAPOLY_BAD_STATE ); | 
					
						
							|  |  |  |     TEST_ASSERT( mbedtls_chachapoly_update_aad( &ctx, aad, aad_len ) | 
					
						
							|  |  |  |                  == MBEDTLS_ERR_CHACHAPOLY_BAD_STATE ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* Starts -> update* OK */ | 
					
						
							|  |  |  |     TEST_ASSERT( mbedtls_chachapoly_starts( &ctx, nonce, MBEDTLS_CHACHAPOLY_ENCRYPT ) | 
					
						
							|  |  |  |                  == 0 ); | 
					
						
							|  |  |  |     TEST_ASSERT( mbedtls_chachapoly_update( &ctx, input_len, input, output ) | 
					
						
							|  |  |  |                  == 0 ); | 
					
						
							|  |  |  |     TEST_ASSERT( mbedtls_chachapoly_update( &ctx, input_len, input, output ) | 
					
						
							|  |  |  |                  == 0 ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* After update: update_aad forbidden */ | 
					
						
							|  |  |  |     TEST_ASSERT( mbedtls_chachapoly_update_aad( &ctx, aad, aad_len ) | 
					
						
							|  |  |  |                  == MBEDTLS_ERR_CHACHAPOLY_BAD_STATE ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* Starts -> update_aad* -> finish OK */ | 
					
						
							|  |  |  |     TEST_ASSERT( mbedtls_chachapoly_starts( &ctx, nonce, MBEDTLS_CHACHAPOLY_ENCRYPT ) | 
					
						
							|  |  |  |                  == 0 ); | 
					
						
							|  |  |  |     TEST_ASSERT( mbedtls_chachapoly_update_aad( &ctx, aad, aad_len ) | 
					
						
							|  |  |  |                  == 0 ); | 
					
						
							|  |  |  |     TEST_ASSERT( mbedtls_chachapoly_update_aad( &ctx, aad, aad_len ) | 
					
						
							|  |  |  |                  == 0 ); | 
					
						
							|  |  |  |     TEST_ASSERT( mbedtls_chachapoly_finish( &ctx, mac ) | 
					
						
							|  |  |  |                  == 0 ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | exit: | 
					
						
							|  |  |  |     mbedtls_chachapoly_free( &ctx ); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | /* END_CASE */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */ | 
					
						
							|  |  |  | void chachapoly_selftest() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     TEST_ASSERT( mbedtls_chachapoly_self_test( 1 ) == 0 ); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | /* END_CASE */ |