blob: 267b39c8bce5f981dda677a4bc389e87620ffeca [file] [log] [blame]
Paul Bakker33b43f12013-08-20 11:48:36 +02001/* BEGIN_HEADER */
Rich Evansce2f2372015-02-06 13:57:42 +00002#include "polarssl/gcm.h"
Paul Bakker33b43f12013-08-20 11:48:36 +02003/* END_HEADER */
Paul Bakker89e80c92012-03-20 13:50:09 +00004
Paul Bakker33b43f12013-08-20 11:48:36 +02005/* BEGIN_DEPENDENCIES
6 * depends_on:POLARSSL_GCM_C
7 * END_DEPENDENCIES
8 */
Paul Bakker89e80c92012-03-20 13:50:09 +00009
Paul Bakker33b43f12013-08-20 11:48:36 +020010/* BEGIN_CASE */
Ron Eldor4f1e64e2016-12-16 16:15:56 +020011void gcm_bad_parameters( int cipher_id, int direction,
12 char *hex_key_string, char *hex_src_string,
13 char *hex_iv_string, char *hex_add_string,
14 int tag_len_bits, int gcm_result )
15{
16 unsigned char key_str[128];
17 unsigned char src_str[128];
18 unsigned char dst_str[257];
19 unsigned char iv_str[128];
20 unsigned char add_str[128];
21 unsigned char tag_str[128];
22 unsigned char output[128];
23 unsigned char tag_output[16];
24 gcm_context ctx;
25 unsigned int key_len ;
26 size_t pt_len, iv_len, add_len, tag_len = tag_len_bits / 8;
27
28 memset( key_str, 0x00, sizeof( key_str ) );
29 memset( src_str, 0x00, sizeof( src_str ) );
30 memset( dst_str, 0x00, sizeof( dst_str ) );
31 memset( iv_str, 0x00, sizeof( iv_str ) );
32 memset( add_str, 0x00, sizeof( add_str ) );
33 memset( tag_str, 0x00, sizeof( tag_str ) );
34 memset( output, 0x00, sizeof( output ) );
35 memset( tag_output, 0x00, sizeof( tag_output ) );
36
37 key_len = unhexify( key_str, hex_key_string );
38 pt_len = unhexify( src_str, hex_src_string );
39 iv_len = unhexify( iv_str, hex_iv_string );
40 add_len = unhexify( add_str, hex_add_string );
41
42 TEST_ASSERT( gcm_init( &ctx, cipher_id, key_str, key_len * 8 ) == 0 );
43
44 TEST_ASSERT( gcm_crypt_and_tag( &ctx, direction, pt_len, iv_str, iv_len,
45 add_str, add_len, src_str, output, tag_len, tag_output ) == gcm_result );
46
47exit:
48 gcm_free( &ctx );
49}
50/* END_CASE */
51
52/* BEGIN_CASE */
Manuel Pégourié-Gonnard083d6682013-10-24 12:06:54 +020053void gcm_encrypt_and_tag( int cipher_id,
54 char *hex_key_string, char *hex_src_string,
Paul Bakker33b43f12013-08-20 11:48:36 +020055 char *hex_iv_string, char *hex_add_string,
56 char *hex_dst_string, int tag_len_bits,
57 char *hex_tag_string, int init_result )
Paul Bakker89e80c92012-03-20 13:50:09 +000058{
59 unsigned char key_str[128];
60 unsigned char src_str[128];
61 unsigned char dst_str[257];
62 unsigned char iv_str[128];
63 unsigned char add_str[128];
64 unsigned char tag_str[128];
65 unsigned char output[128];
66 unsigned char tag_output[16];
67 gcm_context ctx;
68 unsigned int key_len;
Paul Bakker33b43f12013-08-20 11:48:36 +020069 size_t pt_len, iv_len, add_len, tag_len = tag_len_bits / 8;
Paul Bakker89e80c92012-03-20 13:50:09 +000070
71 memset(key_str, 0x00, 128);
72 memset(src_str, 0x00, 128);
Paul Bakker68b6d882012-09-08 14:04:13 +000073 memset(dst_str, 0x00, 257);
Paul Bakker89e80c92012-03-20 13:50:09 +000074 memset(iv_str, 0x00, 128);
75 memset(add_str, 0x00, 128);
76 memset(tag_str, 0x00, 128);
77 memset(output, 0x00, 128);
78 memset(tag_output, 0x00, 16);
79
Paul Bakker33b43f12013-08-20 11:48:36 +020080 key_len = unhexify( key_str, hex_key_string );
81 pt_len = unhexify( src_str, hex_src_string );
82 iv_len = unhexify( iv_str, hex_iv_string );
83 add_len = unhexify( add_str, hex_add_string );
Paul Bakker89e80c92012-03-20 13:50:09 +000084
Manuel Pégourié-Gonnard083d6682013-10-24 12:06:54 +020085 TEST_ASSERT( gcm_init( &ctx, cipher_id, key_str, key_len * 8 ) == init_result );
Paul Bakker33b43f12013-08-20 11:48:36 +020086 if( init_result == 0 )
Paul Bakker89e80c92012-03-20 13:50:09 +000087 {
88 TEST_ASSERT( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
89 hexify( dst_str, output, pt_len );
90 hexify( tag_str, tag_output, tag_len );
91
Paul Bakker33b43f12013-08-20 11:48:36 +020092 TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
93 TEST_ASSERT( strcmp( (char *) tag_str, hex_tag_string ) == 0 );
Paul Bakker89e80c92012-03-20 13:50:09 +000094 }
Manuel Pégourié-Gonnard4fe92002013-09-13 13:45:58 +020095
Paul Bakkerbd51b262014-07-10 15:26:12 +020096exit:
Manuel Pégourié-Gonnard4fe92002013-09-13 13:45:58 +020097 gcm_free( &ctx );
Paul Bakker89e80c92012-03-20 13:50:09 +000098}
Paul Bakker33b43f12013-08-20 11:48:36 +020099/* END_CASE */
Paul Bakker89e80c92012-03-20 13:50:09 +0000100
Paul Bakker33b43f12013-08-20 11:48:36 +0200101/* BEGIN_CASE */
Manuel Pégourié-Gonnard083d6682013-10-24 12:06:54 +0200102void gcm_decrypt_and_verify( int cipher_id,
103 char *hex_key_string, char *hex_src_string,
Paul Bakker33b43f12013-08-20 11:48:36 +0200104 char *hex_iv_string, char *hex_add_string,
105 int tag_len_bits, char *hex_tag_string,
106 char *pt_result, int init_result )
Paul Bakker89e80c92012-03-20 13:50:09 +0000107{
108 unsigned char key_str[128];
109 unsigned char src_str[128];
110 unsigned char dst_str[257];
111 unsigned char iv_str[128];
112 unsigned char add_str[128];
113 unsigned char tag_str[128];
114 unsigned char output[128];
115 gcm_context ctx;
116 unsigned int key_len;
Paul Bakker33b43f12013-08-20 11:48:36 +0200117 size_t pt_len, iv_len, add_len, tag_len = tag_len_bits / 8;
Paul Bakker89e80c92012-03-20 13:50:09 +0000118 int ret;
119
120 memset(key_str, 0x00, 128);
121 memset(src_str, 0x00, 128);
Paul Bakker68b6d882012-09-08 14:04:13 +0000122 memset(dst_str, 0x00, 257);
Paul Bakker89e80c92012-03-20 13:50:09 +0000123 memset(iv_str, 0x00, 128);
124 memset(add_str, 0x00, 128);
125 memset(tag_str, 0x00, 128);
126 memset(output, 0x00, 128);
127
Paul Bakker33b43f12013-08-20 11:48:36 +0200128 key_len = unhexify( key_str, hex_key_string );
129 pt_len = unhexify( src_str, hex_src_string );
130 iv_len = unhexify( iv_str, hex_iv_string );
131 add_len = unhexify( add_str, hex_add_string );
132 unhexify( tag_str, hex_tag_string );
Paul Bakker89e80c92012-03-20 13:50:09 +0000133
Manuel Pégourié-Gonnard083d6682013-10-24 12:06:54 +0200134 TEST_ASSERT( gcm_init( &ctx, cipher_id, key_str, key_len * 8 ) == init_result );
Paul Bakker33b43f12013-08-20 11:48:36 +0200135 if( init_result == 0 )
Paul Bakker89e80c92012-03-20 13:50:09 +0000136 {
137 ret = gcm_auth_decrypt( &ctx, pt_len, iv_str, iv_len, add_str, add_len, tag_str, tag_len, src_str, output );
138
Paul Bakker33b43f12013-08-20 11:48:36 +0200139 if( strcmp( "FAIL", pt_result ) == 0 )
Paul Bakker89e80c92012-03-20 13:50:09 +0000140 {
141 TEST_ASSERT( ret == POLARSSL_ERR_GCM_AUTH_FAILED );
142 }
143 else
144 {
Manuel Pégourié-Gonnardf7ce67f2013-09-03 20:17:35 +0200145 TEST_ASSERT( ret == 0 );
Paul Bakker89e80c92012-03-20 13:50:09 +0000146 hexify( dst_str, output, pt_len );
147
Paul Bakker33b43f12013-08-20 11:48:36 +0200148 TEST_ASSERT( strcmp( (char *) dst_str, pt_result ) == 0 );
Paul Bakker89e80c92012-03-20 13:50:09 +0000149 }
150 }
Manuel Pégourié-Gonnard4fe92002013-09-13 13:45:58 +0200151
Paul Bakkerbd51b262014-07-10 15:26:12 +0200152exit:
Manuel Pégourié-Gonnard4fe92002013-09-13 13:45:58 +0200153 gcm_free( &ctx );
Paul Bakker89e80c92012-03-20 13:50:09 +0000154}
Paul Bakker33b43f12013-08-20 11:48:36 +0200155/* END_CASE */
Paul Bakker89e80c92012-03-20 13:50:09 +0000156
Manuel Pégourié-Gonnard20140162013-10-10 12:48:03 +0200157/* BEGIN_CASE depends_on:POLARSSL_SELF_TEST */
Paul Bakker33b43f12013-08-20 11:48:36 +0200158void gcm_selftest()
Paul Bakker89e80c92012-03-20 13:50:09 +0000159{
160 TEST_ASSERT( gcm_self_test( 0 ) == 0 );
161}
Paul Bakker33b43f12013-08-20 11:48:36 +0200162/* END_CASE */