PolarSSL v1.2.5
test_suite_gcm.encrypt.c
Go to the documentation of this file.
1 #include "fct.h"
2 
3 #include <polarssl/gcm.h>
4 
5 #include <polarssl/config.h>
6 
7 #ifdef _MSC_VER
8 #include <basetsd.h>
9 typedef UINT32 uint32_t;
10 #else
11 #include <inttypes.h>
12 #endif
13 
14 /*
15  * 32-bit integer manipulation macros (big endian)
16  */
17 #ifndef GET_UINT32_BE
18 #define GET_UINT32_BE(n,b,i) \
19 { \
20  (n) = ( (uint32_t) (b)[(i) ] << 24 ) \
21  | ( (uint32_t) (b)[(i) + 1] << 16 ) \
22  | ( (uint32_t) (b)[(i) + 2] << 8 ) \
23  | ( (uint32_t) (b)[(i) + 3] ); \
24 }
25 #endif
26 
27 #ifndef PUT_UINT32_BE
28 #define PUT_UINT32_BE(n,b,i) \
29 { \
30  (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \
31  (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \
32  (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \
33  (b)[(i) + 3] = (unsigned char) ( (n) ); \
34 }
35 #endif
36 
37 int unhexify(unsigned char *obuf, const char *ibuf)
38 {
39  unsigned char c, c2;
40  int len = strlen(ibuf) / 2;
41  assert(!(strlen(ibuf) %1)); // must be even number of bytes
42 
43  while (*ibuf != 0)
44  {
45  c = *ibuf++;
46  if( c >= '0' && c <= '9' )
47  c -= '0';
48  else if( c >= 'a' && c <= 'f' )
49  c -= 'a' - 10;
50  else if( c >= 'A' && c <= 'F' )
51  c -= 'A' - 10;
52  else
53  assert( 0 );
54 
55  c2 = *ibuf++;
56  if( c2 >= '0' && c2 <= '9' )
57  c2 -= '0';
58  else if( c2 >= 'a' && c2 <= 'f' )
59  c2 -= 'a' - 10;
60  else if( c2 >= 'A' && c2 <= 'F' )
61  c2 -= 'A' - 10;
62  else
63  assert( 0 );
64 
65  *obuf++ = ( c << 4 ) | c2;
66  }
67 
68  return len;
69 }
70 
71 void hexify(unsigned char *obuf, const unsigned char *ibuf, int len)
72 {
73  unsigned char l, h;
74 
75  while (len != 0)
76  {
77  h = (*ibuf) / 16;
78  l = (*ibuf) % 16;
79 
80  if( h < 10 )
81  *obuf++ = '0' + h;
82  else
83  *obuf++ = 'a' + h - 10;
84 
85  if( l < 10 )
86  *obuf++ = '0' + l;
87  else
88  *obuf++ = 'a' + l - 10;
89 
90  ++ibuf;
91  len--;
92  }
93 }
94 
104 static int rnd_std_rand( void *rng_state, unsigned char *output, size_t len )
105 {
106  size_t i;
107 
108  if( rng_state != NULL )
109  rng_state = NULL;
110 
111  for( i = 0; i < len; ++i )
112  output[i] = rand();
113 
114  return( 0 );
115 }
116 
122 static int rnd_zero_rand( void *rng_state, unsigned char *output, size_t len )
123 {
124  if( rng_state != NULL )
125  rng_state = NULL;
126 
127  memset( output, 0, len );
128 
129  return( 0 );
130 }
131 
132 typedef struct
133 {
134  unsigned char *buf;
135  size_t length;
136 } rnd_buf_info;
137 
149 static int rnd_buffer_rand( void *rng_state, unsigned char *output, size_t len )
150 {
151  rnd_buf_info *info = (rnd_buf_info *) rng_state;
152  size_t use_len;
153 
154  if( rng_state == NULL )
155  return( rnd_std_rand( NULL, output, len ) );
156 
157  use_len = len;
158  if( len > info->length )
159  use_len = info->length;
160 
161  if( use_len )
162  {
163  memcpy( output, info->buf, use_len );
164  info->buf += use_len;
165  info->length -= use_len;
166  }
167 
168  if( len - use_len > 0 )
169  return( rnd_std_rand( NULL, output + use_len, len - use_len ) );
170 
171  return( 0 );
172 }
173 
181 typedef struct
182 {
183  uint32_t key[16];
184  uint32_t v0, v1;
186 
195 static int rnd_pseudo_rand( void *rng_state, unsigned char *output, size_t len )
196 {
197  rnd_pseudo_info *info = (rnd_pseudo_info *) rng_state;
198  uint32_t i, *k, sum, delta=0x9E3779B9;
199  unsigned char result[4];
200 
201  if( rng_state == NULL )
202  return( rnd_std_rand( NULL, output, len ) );
203 
204  k = info->key;
205 
206  while( len > 0 )
207  {
208  size_t use_len = ( len > 4 ) ? 4 : len;
209  sum = 0;
210 
211  for( i = 0; i < 32; i++ )
212  {
213  info->v0 += (((info->v1 << 4) ^ (info->v1 >> 5)) + info->v1) ^ (sum + k[sum & 3]);
214  sum += delta;
215  info->v1 += (((info->v0 << 4) ^ (info->v0 >> 5)) + info->v0) ^ (sum + k[(sum>>11) & 3]);
216  }
217 
218  PUT_UINT32_BE( info->v0, result, 0 );
219  memcpy( output, result, use_len );
220  len -= use_len;
221  }
222 
223  return( 0 );
224 }
225 
226 
228 {
229 #ifdef POLARSSL_GCM_C
230 
231 
232  FCT_SUITE_BGN(test_suite_gcm)
233  {
234 
235  FCT_TEST_BGN(gcm_nist_validation_aes_12812800128_0)
236  {
237  unsigned char key_str[128];
238  unsigned char src_str[128];
239  unsigned char dst_str[257];
240  unsigned char iv_str[128];
241  unsigned char add_str[128];
242  unsigned char tag_str[128];
243  unsigned char output[128];
244  unsigned char tag_output[16];
245  gcm_context ctx;
246  unsigned int key_len;
247  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
248 
249  memset(key_str, 0x00, 128);
250  memset(src_str, 0x00, 128);
251  memset(dst_str, 0x00, 257);
252  memset(iv_str, 0x00, 128);
253  memset(add_str, 0x00, 128);
254  memset(tag_str, 0x00, 128);
255  memset(output, 0x00, 128);
256  memset(tag_output, 0x00, 16);
257 
258  key_len = unhexify( key_str, "1014f74310d1718d1cc8f65f033aaf83" );
259  pt_len = unhexify( src_str, "" );
260  iv_len = unhexify( iv_str, "6bb54c9fd83c12f5ba76cc83f7650d2c" );
261  add_len = unhexify( add_str, "" );
262 
263  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
264  if( 0 == 0 )
265  {
266  fct_chk( 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 );
267  hexify( dst_str, output, pt_len );
268  hexify( tag_str, tag_output, tag_len );
269 
270  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
271  fct_chk( strcmp( (char *) tag_str, "0b6b57db309eff920c8133b8691e0cac" ) == 0 );
272  }
273  }
274  FCT_TEST_END();
275 
276 
277  FCT_TEST_BGN(gcm_nist_validation_aes_12812800128_1)
278  {
279  unsigned char key_str[128];
280  unsigned char src_str[128];
281  unsigned char dst_str[257];
282  unsigned char iv_str[128];
283  unsigned char add_str[128];
284  unsigned char tag_str[128];
285  unsigned char output[128];
286  unsigned char tag_output[16];
287  gcm_context ctx;
288  unsigned int key_len;
289  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
290 
291  memset(key_str, 0x00, 128);
292  memset(src_str, 0x00, 128);
293  memset(dst_str, 0x00, 257);
294  memset(iv_str, 0x00, 128);
295  memset(add_str, 0x00, 128);
296  memset(tag_str, 0x00, 128);
297  memset(output, 0x00, 128);
298  memset(tag_output, 0x00, 16);
299 
300  key_len = unhexify( key_str, "d874a25f2269e352ccdd83cc2d4e45b7" );
301  pt_len = unhexify( src_str, "" );
302  iv_len = unhexify( iv_str, "9717abb9ed114f2760a067279c3821e3" );
303  add_len = unhexify( add_str, "" );
304 
305  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
306  if( 0 == 0 )
307  {
308  fct_chk( 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 );
309  hexify( dst_str, output, pt_len );
310  hexify( tag_str, tag_output, tag_len );
311 
312  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
313  fct_chk( strcmp( (char *) tag_str, "0e09e53e5fe8d818c5397c51173eda97" ) == 0 );
314  }
315  }
316  FCT_TEST_END();
317 
318 
319  FCT_TEST_BGN(gcm_nist_validation_aes_12812800128_2)
320  {
321  unsigned char key_str[128];
322  unsigned char src_str[128];
323  unsigned char dst_str[257];
324  unsigned char iv_str[128];
325  unsigned char add_str[128];
326  unsigned char tag_str[128];
327  unsigned char output[128];
328  unsigned char tag_output[16];
329  gcm_context ctx;
330  unsigned int key_len;
331  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
332 
333  memset(key_str, 0x00, 128);
334  memset(src_str, 0x00, 128);
335  memset(dst_str, 0x00, 257);
336  memset(iv_str, 0x00, 128);
337  memset(add_str, 0x00, 128);
338  memset(tag_str, 0x00, 128);
339  memset(output, 0x00, 128);
340  memset(tag_output, 0x00, 16);
341 
342  key_len = unhexify( key_str, "7dab77e23b901c926454f29677eb62d4" );
343  pt_len = unhexify( src_str, "" );
344  iv_len = unhexify( iv_str, "8aaec11c4a0f053d7f40badd31a63e27" );
345  add_len = unhexify( add_str, "" );
346 
347  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
348  if( 0 == 0 )
349  {
350  fct_chk( 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 );
351  hexify( dst_str, output, pt_len );
352  hexify( tag_str, tag_output, tag_len );
353 
354  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
355  fct_chk( strcmp( (char *) tag_str, "cec2e3230d8b762acee527e184e4c0db" ) == 0 );
356  }
357  }
358  FCT_TEST_END();
359 
360 
361  FCT_TEST_BGN(gcm_nist_validation_aes_12812800120_0)
362  {
363  unsigned char key_str[128];
364  unsigned char src_str[128];
365  unsigned char dst_str[257];
366  unsigned char iv_str[128];
367  unsigned char add_str[128];
368  unsigned char tag_str[128];
369  unsigned char output[128];
370  unsigned char tag_output[16];
371  gcm_context ctx;
372  unsigned int key_len;
373  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
374 
375  memset(key_str, 0x00, 128);
376  memset(src_str, 0x00, 128);
377  memset(dst_str, 0x00, 257);
378  memset(iv_str, 0x00, 128);
379  memset(add_str, 0x00, 128);
380  memset(tag_str, 0x00, 128);
381  memset(output, 0x00, 128);
382  memset(tag_output, 0x00, 16);
383 
384  key_len = unhexify( key_str, "2397f163a0cb50b0e8c85f909b96adc1" );
385  pt_len = unhexify( src_str, "" );
386  iv_len = unhexify( iv_str, "97a631f5f6fc928ffce32ee2c92f5e50" );
387  add_len = unhexify( add_str, "" );
388 
389  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
390  if( 0 == 0 )
391  {
392  fct_chk( 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 );
393  hexify( dst_str, output, pt_len );
394  hexify( tag_str, tag_output, tag_len );
395 
396  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
397  fct_chk( strcmp( (char *) tag_str, "3b74cca7bcdc07c8f8d4818de714f2" ) == 0 );
398  }
399  }
400  FCT_TEST_END();
401 
402 
403  FCT_TEST_BGN(gcm_nist_validation_aes_12812800120_1)
404  {
405  unsigned char key_str[128];
406  unsigned char src_str[128];
407  unsigned char dst_str[257];
408  unsigned char iv_str[128];
409  unsigned char add_str[128];
410  unsigned char tag_str[128];
411  unsigned char output[128];
412  unsigned char tag_output[16];
413  gcm_context ctx;
414  unsigned int key_len;
415  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
416 
417  memset(key_str, 0x00, 128);
418  memset(src_str, 0x00, 128);
419  memset(dst_str, 0x00, 257);
420  memset(iv_str, 0x00, 128);
421  memset(add_str, 0x00, 128);
422  memset(tag_str, 0x00, 128);
423  memset(output, 0x00, 128);
424  memset(tag_output, 0x00, 16);
425 
426  key_len = unhexify( key_str, "a7adc0d3aacef42397bbca79dd65dbdf" );
427  pt_len = unhexify( src_str, "" );
428  iv_len = unhexify( iv_str, "c6d3114c1429e37314683081d484c87c" );
429  add_len = unhexify( add_str, "" );
430 
431  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
432  if( 0 == 0 )
433  {
434  fct_chk( 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 );
435  hexify( dst_str, output, pt_len );
436  hexify( tag_str, tag_output, tag_len );
437 
438  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
439  fct_chk( strcmp( (char *) tag_str, "d88141d27fe1748919845cfa5934bc" ) == 0 );
440  }
441  }
442  FCT_TEST_END();
443 
444 
445  FCT_TEST_BGN(gcm_nist_validation_aes_12812800120_2)
446  {
447  unsigned char key_str[128];
448  unsigned char src_str[128];
449  unsigned char dst_str[257];
450  unsigned char iv_str[128];
451  unsigned char add_str[128];
452  unsigned char tag_str[128];
453  unsigned char output[128];
454  unsigned char tag_output[16];
455  gcm_context ctx;
456  unsigned int key_len;
457  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
458 
459  memset(key_str, 0x00, 128);
460  memset(src_str, 0x00, 128);
461  memset(dst_str, 0x00, 257);
462  memset(iv_str, 0x00, 128);
463  memset(add_str, 0x00, 128);
464  memset(tag_str, 0x00, 128);
465  memset(output, 0x00, 128);
466  memset(tag_output, 0x00, 16);
467 
468  key_len = unhexify( key_str, "10171805d7f7a6d87b64bda57474d7fc" );
469  pt_len = unhexify( src_str, "" );
470  iv_len = unhexify( iv_str, "fad65b50c1007c4b0c83c7a6720cacb8" );
471  add_len = unhexify( add_str, "" );
472 
473  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
474  if( 0 == 0 )
475  {
476  fct_chk( 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 );
477  hexify( dst_str, output, pt_len );
478  hexify( tag_str, tag_output, tag_len );
479 
480  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
481  fct_chk( strcmp( (char *) tag_str, "c3d3f240d3f3da317eae42a238bcc1" ) == 0 );
482  }
483  }
484  FCT_TEST_END();
485 
486 
487  FCT_TEST_BGN(gcm_nist_validation_aes_12812800112_0)
488  {
489  unsigned char key_str[128];
490  unsigned char src_str[128];
491  unsigned char dst_str[257];
492  unsigned char iv_str[128];
493  unsigned char add_str[128];
494  unsigned char tag_str[128];
495  unsigned char output[128];
496  unsigned char tag_output[16];
497  gcm_context ctx;
498  unsigned int key_len;
499  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
500 
501  memset(key_str, 0x00, 128);
502  memset(src_str, 0x00, 128);
503  memset(dst_str, 0x00, 257);
504  memset(iv_str, 0x00, 128);
505  memset(add_str, 0x00, 128);
506  memset(tag_str, 0x00, 128);
507  memset(output, 0x00, 128);
508  memset(tag_output, 0x00, 16);
509 
510  key_len = unhexify( key_str, "8aaa0c85d214c6c9e9e260e62f695827" );
511  pt_len = unhexify( src_str, "" );
512  iv_len = unhexify( iv_str, "84e25c916f38dd6fdb732c0d6d8f86bb" );
513  add_len = unhexify( add_str, "" );
514 
515  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
516  if( 0 == 0 )
517  {
518  fct_chk( 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 );
519  hexify( dst_str, output, pt_len );
520  hexify( tag_str, tag_output, tag_len );
521 
522  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
523  fct_chk( strcmp( (char *) tag_str, "a774815a2a8432ca891ef4003125" ) == 0 );
524  }
525  }
526  FCT_TEST_END();
527 
528 
529  FCT_TEST_BGN(gcm_nist_validation_aes_12812800112_1)
530  {
531  unsigned char key_str[128];
532  unsigned char src_str[128];
533  unsigned char dst_str[257];
534  unsigned char iv_str[128];
535  unsigned char add_str[128];
536  unsigned char tag_str[128];
537  unsigned char output[128];
538  unsigned char tag_output[16];
539  gcm_context ctx;
540  unsigned int key_len;
541  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
542 
543  memset(key_str, 0x00, 128);
544  memset(src_str, 0x00, 128);
545  memset(dst_str, 0x00, 257);
546  memset(iv_str, 0x00, 128);
547  memset(add_str, 0x00, 128);
548  memset(tag_str, 0x00, 128);
549  memset(output, 0x00, 128);
550  memset(tag_output, 0x00, 16);
551 
552  key_len = unhexify( key_str, "def8b6a58b8e582e57700bab4f2a4109" );
553  pt_len = unhexify( src_str, "" );
554  iv_len = unhexify( iv_str, "3615439e9fb777439eb814256c894fb2" );
555  add_len = unhexify( add_str, "" );
556 
557  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
558  if( 0 == 0 )
559  {
560  fct_chk( 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 );
561  hexify( dst_str, output, pt_len );
562  hexify( tag_str, tag_output, tag_len );
563 
564  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
565  fct_chk( strcmp( (char *) tag_str, "537be9c88d3a46845e6cf5f91e11" ) == 0 );
566  }
567  }
568  FCT_TEST_END();
569 
570 
571  FCT_TEST_BGN(gcm_nist_validation_aes_12812800112_2)
572  {
573  unsigned char key_str[128];
574  unsigned char src_str[128];
575  unsigned char dst_str[257];
576  unsigned char iv_str[128];
577  unsigned char add_str[128];
578  unsigned char tag_str[128];
579  unsigned char output[128];
580  unsigned char tag_output[16];
581  gcm_context ctx;
582  unsigned int key_len;
583  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
584 
585  memset(key_str, 0x00, 128);
586  memset(src_str, 0x00, 128);
587  memset(dst_str, 0x00, 257);
588  memset(iv_str, 0x00, 128);
589  memset(add_str, 0x00, 128);
590  memset(tag_str, 0x00, 128);
591  memset(output, 0x00, 128);
592  memset(tag_output, 0x00, 16);
593 
594  key_len = unhexify( key_str, "5894231d743f79638687c070b60beee1" );
595  pt_len = unhexify( src_str, "" );
596  iv_len = unhexify( iv_str, "e34cd13b897d1c9b8011a0e63950c099" );
597  add_len = unhexify( add_str, "" );
598 
599  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
600  if( 0 == 0 )
601  {
602  fct_chk( 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 );
603  hexify( dst_str, output, pt_len );
604  hexify( tag_str, tag_output, tag_len );
605 
606  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
607  fct_chk( strcmp( (char *) tag_str, "d582c4bc083a8cf1af4d5c2c9b11" ) == 0 );
608  }
609  }
610  FCT_TEST_END();
611 
612 
613  FCT_TEST_BGN(gcm_nist_validation_aes_12812800104_0)
614  {
615  unsigned char key_str[128];
616  unsigned char src_str[128];
617  unsigned char dst_str[257];
618  unsigned char iv_str[128];
619  unsigned char add_str[128];
620  unsigned char tag_str[128];
621  unsigned char output[128];
622  unsigned char tag_output[16];
623  gcm_context ctx;
624  unsigned int key_len;
625  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
626 
627  memset(key_str, 0x00, 128);
628  memset(src_str, 0x00, 128);
629  memset(dst_str, 0x00, 257);
630  memset(iv_str, 0x00, 128);
631  memset(add_str, 0x00, 128);
632  memset(tag_str, 0x00, 128);
633  memset(output, 0x00, 128);
634  memset(tag_output, 0x00, 16);
635 
636  key_len = unhexify( key_str, "6b25f9cbdc3bcd27fd245a1c411594bc" );
637  pt_len = unhexify( src_str, "" );
638  iv_len = unhexify( iv_str, "a6526f8c803b69dd5f59feca1cff78e2" );
639  add_len = unhexify( add_str, "" );
640 
641  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
642  if( 0 == 0 )
643  {
644  fct_chk( 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 );
645  hexify( dst_str, output, pt_len );
646  hexify( tag_str, tag_output, tag_len );
647 
648  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
649  fct_chk( strcmp( (char *) tag_str, "c7e19e08a09a9c1fa698202890" ) == 0 );
650  }
651  }
652  FCT_TEST_END();
653 
654 
655  FCT_TEST_BGN(gcm_nist_validation_aes_12812800104_1)
656  {
657  unsigned char key_str[128];
658  unsigned char src_str[128];
659  unsigned char dst_str[257];
660  unsigned char iv_str[128];
661  unsigned char add_str[128];
662  unsigned char tag_str[128];
663  unsigned char output[128];
664  unsigned char tag_output[16];
665  gcm_context ctx;
666  unsigned int key_len;
667  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
668 
669  memset(key_str, 0x00, 128);
670  memset(src_str, 0x00, 128);
671  memset(dst_str, 0x00, 257);
672  memset(iv_str, 0x00, 128);
673  memset(add_str, 0x00, 128);
674  memset(tag_str, 0x00, 128);
675  memset(output, 0x00, 128);
676  memset(tag_output, 0x00, 16);
677 
678  key_len = unhexify( key_str, "b3235422897b6459798a97ddd709db3d" );
679  pt_len = unhexify( src_str, "" );
680  iv_len = unhexify( iv_str, "96679e9362f919217d5e64068969d958" );
681  add_len = unhexify( add_str, "" );
682 
683  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
684  if( 0 == 0 )
685  {
686  fct_chk( 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 );
687  hexify( dst_str, output, pt_len );
688  hexify( tag_str, tag_output, tag_len );
689 
690  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
691  fct_chk( strcmp( (char *) tag_str, "44ed41bda0eb0958d407b7b787" ) == 0 );
692  }
693  }
694  FCT_TEST_END();
695 
696 
697  FCT_TEST_BGN(gcm_nist_validation_aes_12812800104_2)
698  {
699  unsigned char key_str[128];
700  unsigned char src_str[128];
701  unsigned char dst_str[257];
702  unsigned char iv_str[128];
703  unsigned char add_str[128];
704  unsigned char tag_str[128];
705  unsigned char output[128];
706  unsigned char tag_output[16];
707  gcm_context ctx;
708  unsigned int key_len;
709  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
710 
711  memset(key_str, 0x00, 128);
712  memset(src_str, 0x00, 128);
713  memset(dst_str, 0x00, 257);
714  memset(iv_str, 0x00, 128);
715  memset(add_str, 0x00, 128);
716  memset(tag_str, 0x00, 128);
717  memset(output, 0x00, 128);
718  memset(tag_output, 0x00, 16);
719 
720  key_len = unhexify( key_str, "f65bc795434efba3c5399ed3c99ff045" );
721  pt_len = unhexify( src_str, "" );
722  iv_len = unhexify( iv_str, "2e727c19a89cba6f9c04d990245fceed" );
723  add_len = unhexify( add_str, "" );
724 
725  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
726  if( 0 == 0 )
727  {
728  fct_chk( 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 );
729  hexify( dst_str, output, pt_len );
730  hexify( tag_str, tag_output, tag_len );
731 
732  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
733  fct_chk( strcmp( (char *) tag_str, "64830ed7f772e898800fc9ae2a" ) == 0 );
734  }
735  }
736  FCT_TEST_END();
737 
738 
739  FCT_TEST_BGN(gcm_nist_validation_aes_1281280096_0)
740  {
741  unsigned char key_str[128];
742  unsigned char src_str[128];
743  unsigned char dst_str[257];
744  unsigned char iv_str[128];
745  unsigned char add_str[128];
746  unsigned char tag_str[128];
747  unsigned char output[128];
748  unsigned char tag_output[16];
749  gcm_context ctx;
750  unsigned int key_len;
751  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
752 
753  memset(key_str, 0x00, 128);
754  memset(src_str, 0x00, 128);
755  memset(dst_str, 0x00, 257);
756  memset(iv_str, 0x00, 128);
757  memset(add_str, 0x00, 128);
758  memset(tag_str, 0x00, 128);
759  memset(output, 0x00, 128);
760  memset(tag_output, 0x00, 16);
761 
762  key_len = unhexify( key_str, "c6c66d50f2f76c4e911b3b17fcdcba1d" );
763  pt_len = unhexify( src_str, "" );
764  iv_len = unhexify( iv_str, "77b42158a4ef5dc33039d33631bb0161" );
765  add_len = unhexify( add_str, "" );
766 
767  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
768  if( 0 == 0 )
769  {
770  fct_chk( 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 );
771  hexify( dst_str, output, pt_len );
772  hexify( tag_str, tag_output, tag_len );
773 
774  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
775  fct_chk( strcmp( (char *) tag_str, "1bce3ba33f73e750ab284d78" ) == 0 );
776  }
777  }
778  FCT_TEST_END();
779 
780 
781  FCT_TEST_BGN(gcm_nist_validation_aes_1281280096_1)
782  {
783  unsigned char key_str[128];
784  unsigned char src_str[128];
785  unsigned char dst_str[257];
786  unsigned char iv_str[128];
787  unsigned char add_str[128];
788  unsigned char tag_str[128];
789  unsigned char output[128];
790  unsigned char tag_output[16];
791  gcm_context ctx;
792  unsigned int key_len;
793  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
794 
795  memset(key_str, 0x00, 128);
796  memset(src_str, 0x00, 128);
797  memset(dst_str, 0x00, 257);
798  memset(iv_str, 0x00, 128);
799  memset(add_str, 0x00, 128);
800  memset(tag_str, 0x00, 128);
801  memset(output, 0x00, 128);
802  memset(tag_output, 0x00, 16);
803 
804  key_len = unhexify( key_str, "13558db9b7441c585d381ffc16b32517" );
805  pt_len = unhexify( src_str, "" );
806  iv_len = unhexify( iv_str, "addf5dbe0975c5ad321e14dd4bdc2ad2" );
807  add_len = unhexify( add_str, "" );
808 
809  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
810  if( 0 == 0 )
811  {
812  fct_chk( 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 );
813  hexify( dst_str, output, pt_len );
814  hexify( tag_str, tag_output, tag_len );
815 
816  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
817  fct_chk( strcmp( (char *) tag_str, "f413c3bf125ce5317cd1c6bd" ) == 0 );
818  }
819  }
820  FCT_TEST_END();
821 
822 
823  FCT_TEST_BGN(gcm_nist_validation_aes_1281280096_2)
824  {
825  unsigned char key_str[128];
826  unsigned char src_str[128];
827  unsigned char dst_str[257];
828  unsigned char iv_str[128];
829  unsigned char add_str[128];
830  unsigned char tag_str[128];
831  unsigned char output[128];
832  unsigned char tag_output[16];
833  gcm_context ctx;
834  unsigned int key_len;
835  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
836 
837  memset(key_str, 0x00, 128);
838  memset(src_str, 0x00, 128);
839  memset(dst_str, 0x00, 257);
840  memset(iv_str, 0x00, 128);
841  memset(add_str, 0x00, 128);
842  memset(tag_str, 0x00, 128);
843  memset(output, 0x00, 128);
844  memset(tag_output, 0x00, 16);
845 
846  key_len = unhexify( key_str, "74638628b1361c2954ce0ac5456a1155" );
847  pt_len = unhexify( src_str, "" );
848  iv_len = unhexify( iv_str, "c5861507c879e6864d7cb1f77cc55cc6" );
849  add_len = unhexify( add_str, "" );
850 
851  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
852  if( 0 == 0 )
853  {
854  fct_chk( 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 );
855  hexify( dst_str, output, pt_len );
856  hexify( tag_str, tag_output, tag_len );
857 
858  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
859  fct_chk( strcmp( (char *) tag_str, "8a514fdc7835711e4f458199" ) == 0 );
860  }
861  }
862  FCT_TEST_END();
863 
864 
865  FCT_TEST_BGN(gcm_nist_validation_aes_1281280064_0)
866  {
867  unsigned char key_str[128];
868  unsigned char src_str[128];
869  unsigned char dst_str[257];
870  unsigned char iv_str[128];
871  unsigned char add_str[128];
872  unsigned char tag_str[128];
873  unsigned char output[128];
874  unsigned char tag_output[16];
875  gcm_context ctx;
876  unsigned int key_len;
877  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
878 
879  memset(key_str, 0x00, 128);
880  memset(src_str, 0x00, 128);
881  memset(dst_str, 0x00, 257);
882  memset(iv_str, 0x00, 128);
883  memset(add_str, 0x00, 128);
884  memset(tag_str, 0x00, 128);
885  memset(output, 0x00, 128);
886  memset(tag_output, 0x00, 16);
887 
888  key_len = unhexify( key_str, "7815d22c5c081df9ac2114aaa2c0cbf9" );
889  pt_len = unhexify( src_str, "" );
890  iv_len = unhexify( iv_str, "822f83cd9f249dfc204b5957f0b0deab" );
891  add_len = unhexify( add_str, "" );
892 
893  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
894  if( 0 == 0 )
895  {
896  fct_chk( 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 );
897  hexify( dst_str, output, pt_len );
898  hexify( tag_str, tag_output, tag_len );
899 
900  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
901  fct_chk( strcmp( (char *) tag_str, "aa1f69f5d3bb79e5" ) == 0 );
902  }
903  }
904  FCT_TEST_END();
905 
906 
907  FCT_TEST_BGN(gcm_nist_validation_aes_1281280064_1)
908  {
909  unsigned char key_str[128];
910  unsigned char src_str[128];
911  unsigned char dst_str[257];
912  unsigned char iv_str[128];
913  unsigned char add_str[128];
914  unsigned char tag_str[128];
915  unsigned char output[128];
916  unsigned char tag_output[16];
917  gcm_context ctx;
918  unsigned int key_len;
919  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
920 
921  memset(key_str, 0x00, 128);
922  memset(src_str, 0x00, 128);
923  memset(dst_str, 0x00, 257);
924  memset(iv_str, 0x00, 128);
925  memset(add_str, 0x00, 128);
926  memset(tag_str, 0x00, 128);
927  memset(output, 0x00, 128);
928  memset(tag_output, 0x00, 16);
929 
930  key_len = unhexify( key_str, "1a847a47823cb9c298e4107c6aaff95c" );
931  pt_len = unhexify( src_str, "" );
932  iv_len = unhexify( iv_str, "39348f80c6bc489f9315be7a6fcbb96f" );
933  add_len = unhexify( add_str, "" );
934 
935  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
936  if( 0 == 0 )
937  {
938  fct_chk( 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 );
939  hexify( dst_str, output, pt_len );
940  hexify( tag_str, tag_output, tag_len );
941 
942  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
943  fct_chk( strcmp( (char *) tag_str, "c3b3f31e56cf4895" ) == 0 );
944  }
945  }
946  FCT_TEST_END();
947 
948 
949  FCT_TEST_BGN(gcm_nist_validation_aes_1281280064_2)
950  {
951  unsigned char key_str[128];
952  unsigned char src_str[128];
953  unsigned char dst_str[257];
954  unsigned char iv_str[128];
955  unsigned char add_str[128];
956  unsigned char tag_str[128];
957  unsigned char output[128];
958  unsigned char tag_output[16];
959  gcm_context ctx;
960  unsigned int key_len;
961  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
962 
963  memset(key_str, 0x00, 128);
964  memset(src_str, 0x00, 128);
965  memset(dst_str, 0x00, 257);
966  memset(iv_str, 0x00, 128);
967  memset(add_str, 0x00, 128);
968  memset(tag_str, 0x00, 128);
969  memset(output, 0x00, 128);
970  memset(tag_output, 0x00, 16);
971 
972  key_len = unhexify( key_str, "16e67ea248ea6db08af1d810cb10574e" );
973  pt_len = unhexify( src_str, "" );
974  iv_len = unhexify( iv_str, "50386e2075eb15ca3f3e6db6bff01969" );
975  add_len = unhexify( add_str, "" );
976 
977  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
978  if( 0 == 0 )
979  {
980  fct_chk( 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 );
981  hexify( dst_str, output, pt_len );
982  hexify( tag_str, tag_output, tag_len );
983 
984  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
985  fct_chk( strcmp( (char *) tag_str, "3d4f3b8526a376ae" ) == 0 );
986  }
987  }
988  FCT_TEST_END();
989 
990 
991  FCT_TEST_BGN(gcm_nist_validation_aes_1281280032_0)
992  {
993  unsigned char key_str[128];
994  unsigned char src_str[128];
995  unsigned char dst_str[257];
996  unsigned char iv_str[128];
997  unsigned char add_str[128];
998  unsigned char tag_str[128];
999  unsigned char output[128];
1000  unsigned char tag_output[16];
1001  gcm_context ctx;
1002  unsigned int key_len;
1003  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
1004 
1005  memset(key_str, 0x00, 128);
1006  memset(src_str, 0x00, 128);
1007  memset(dst_str, 0x00, 257);
1008  memset(iv_str, 0x00, 128);
1009  memset(add_str, 0x00, 128);
1010  memset(tag_str, 0x00, 128);
1011  memset(output, 0x00, 128);
1012  memset(tag_output, 0x00, 16);
1013 
1014  key_len = unhexify( key_str, "26a8301636ba93e7f56309143f184241" );
1015  pt_len = unhexify( src_str, "" );
1016  iv_len = unhexify( iv_str, "c7e32b1d312971bdc344aefaf45461bc" );
1017  add_len = unhexify( add_str, "" );
1018 
1019  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1020  if( 0 == 0 )
1021  {
1022  fct_chk( 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 );
1023  hexify( dst_str, output, pt_len );
1024  hexify( tag_str, tag_output, tag_len );
1025 
1026  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1027  fct_chk( strcmp( (char *) tag_str, "25f1b41c" ) == 0 );
1028  }
1029  }
1030  FCT_TEST_END();
1031 
1032 
1033  FCT_TEST_BGN(gcm_nist_validation_aes_1281280032_1)
1034  {
1035  unsigned char key_str[128];
1036  unsigned char src_str[128];
1037  unsigned char dst_str[257];
1038  unsigned char iv_str[128];
1039  unsigned char add_str[128];
1040  unsigned char tag_str[128];
1041  unsigned char output[128];
1042  unsigned char tag_output[16];
1043  gcm_context ctx;
1044  unsigned int key_len;
1045  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
1046 
1047  memset(key_str, 0x00, 128);
1048  memset(src_str, 0x00, 128);
1049  memset(dst_str, 0x00, 257);
1050  memset(iv_str, 0x00, 128);
1051  memset(add_str, 0x00, 128);
1052  memset(tag_str, 0x00, 128);
1053  memset(output, 0x00, 128);
1054  memset(tag_output, 0x00, 16);
1055 
1056  key_len = unhexify( key_str, "130a07c467067148da2790f90d73ff32" );
1057  pt_len = unhexify( src_str, "" );
1058  iv_len = unhexify( iv_str, "800b81c9d2ff3a8e15690ffb4117e211" );
1059  add_len = unhexify( add_str, "" );
1060 
1061  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1062  if( 0 == 0 )
1063  {
1064  fct_chk( 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 );
1065  hexify( dst_str, output, pt_len );
1066  hexify( tag_str, tag_output, tag_len );
1067 
1068  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1069  fct_chk( strcmp( (char *) tag_str, "abcc8d71" ) == 0 );
1070  }
1071  }
1072  FCT_TEST_END();
1073 
1074 
1075  FCT_TEST_BGN(gcm_nist_validation_aes_1281280032_2)
1076  {
1077  unsigned char key_str[128];
1078  unsigned char src_str[128];
1079  unsigned char dst_str[257];
1080  unsigned char iv_str[128];
1081  unsigned char add_str[128];
1082  unsigned char tag_str[128];
1083  unsigned char output[128];
1084  unsigned char tag_output[16];
1085  gcm_context ctx;
1086  unsigned int key_len;
1087  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
1088 
1089  memset(key_str, 0x00, 128);
1090  memset(src_str, 0x00, 128);
1091  memset(dst_str, 0x00, 257);
1092  memset(iv_str, 0x00, 128);
1093  memset(add_str, 0x00, 128);
1094  memset(tag_str, 0x00, 128);
1095  memset(output, 0x00, 128);
1096  memset(tag_output, 0x00, 16);
1097 
1098  key_len = unhexify( key_str, "ccfaae59c3196b8c403716424ea601f5" );
1099  pt_len = unhexify( src_str, "" );
1100  iv_len = unhexify( iv_str, "f9b059de0efa4e3f364763d63d098410" );
1101  add_len = unhexify( add_str, "" );
1102 
1103  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1104  if( 0 == 0 )
1105  {
1106  fct_chk( 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 );
1107  hexify( dst_str, output, pt_len );
1108  hexify( tag_str, tag_output, tag_len );
1109 
1110  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1111  fct_chk( strcmp( (char *) tag_str, "8933444f" ) == 0 );
1112  }
1113  }
1114  FCT_TEST_END();
1115 
1116 
1117  FCT_TEST_BGN(gcm_nist_validation_aes_12812801024128_0)
1118  {
1119  unsigned char key_str[128];
1120  unsigned char src_str[128];
1121  unsigned char dst_str[257];
1122  unsigned char iv_str[128];
1123  unsigned char add_str[128];
1124  unsigned char tag_str[128];
1125  unsigned char output[128];
1126  unsigned char tag_output[16];
1127  gcm_context ctx;
1128  unsigned int key_len;
1129  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
1130 
1131  memset(key_str, 0x00, 128);
1132  memset(src_str, 0x00, 128);
1133  memset(dst_str, 0x00, 257);
1134  memset(iv_str, 0x00, 128);
1135  memset(add_str, 0x00, 128);
1136  memset(tag_str, 0x00, 128);
1137  memset(output, 0x00, 128);
1138  memset(tag_output, 0x00, 16);
1139 
1140  key_len = unhexify( key_str, "b5beefbdd23360f2dd1e6e3c1ddbfebf" );
1141  pt_len = unhexify( src_str, "" );
1142  iv_len = unhexify( iv_str, "81a8494f85be635d71e5663789162494" );
1143  add_len = unhexify( add_str, "f9ebf242b616a42e2057ede3b56b4c27349fed148817a710654de75d1cfc5f6304709b46ef1e2ccb42f877c50f484f8a8c6b0a25cff61d9537c3fd0c69bbc6ef21cbec8986cbc9b6e87963b8d9db91b7134afe69d3d9dec3a76b6c645f9c5528968f27396cc9e989d589369c90bbfefb249e3fa416451bc3d6592cc5feefbd76" );
1144 
1145  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1146  if( 0 == 0 )
1147  {
1148  fct_chk( 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 );
1149  hexify( dst_str, output, pt_len );
1150  hexify( tag_str, tag_output, tag_len );
1151 
1152  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1153  fct_chk( strcmp( (char *) tag_str, "159a642185e0756d46f1db57af975fa3" ) == 0 );
1154  }
1155  }
1156  FCT_TEST_END();
1157 
1158 
1159  FCT_TEST_BGN(gcm_nist_validation_aes_12812801024128_1)
1160  {
1161  unsigned char key_str[128];
1162  unsigned char src_str[128];
1163  unsigned char dst_str[257];
1164  unsigned char iv_str[128];
1165  unsigned char add_str[128];
1166  unsigned char tag_str[128];
1167  unsigned char output[128];
1168  unsigned char tag_output[16];
1169  gcm_context ctx;
1170  unsigned int key_len;
1171  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
1172 
1173  memset(key_str, 0x00, 128);
1174  memset(src_str, 0x00, 128);
1175  memset(dst_str, 0x00, 257);
1176  memset(iv_str, 0x00, 128);
1177  memset(add_str, 0x00, 128);
1178  memset(tag_str, 0x00, 128);
1179  memset(output, 0x00, 128);
1180  memset(tag_output, 0x00, 16);
1181 
1182  key_len = unhexify( key_str, "c465aa8fe5d534c912e654f5aaed5857" );
1183  pt_len = unhexify( src_str, "" );
1184  iv_len = unhexify( iv_str, "5c155f7194b0d0a17b9a0c234d609443" );
1185  add_len = unhexify( add_str, "a3f8d705b233b574399f72350b256cb4893e130688913ce3def8e44687688c0352ff987aea35dc53bc95cdb9cdcc6e6eb280265d9a1af38d526392ab63c9b043c1b1b43e18321e84eb7e08884f2463c32b55eb5859fb10918595a724a61cfdf935e4f96d0721612720d46a946487b525779f6ce0abf04fc5608351119b7427d2" );
1186 
1187  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1188  if( 0 == 0 )
1189  {
1190  fct_chk( 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 );
1191  hexify( dst_str, output, pt_len );
1192  hexify( tag_str, tag_output, tag_len );
1193 
1194  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1195  fct_chk( strcmp( (char *) tag_str, "9595a6d879cd7a949fa08e95d2b76c69" ) == 0 );
1196  }
1197  }
1198  FCT_TEST_END();
1199 
1200 
1201  FCT_TEST_BGN(gcm_nist_validation_aes_12812801024128_2)
1202  {
1203  unsigned char key_str[128];
1204  unsigned char src_str[128];
1205  unsigned char dst_str[257];
1206  unsigned char iv_str[128];
1207  unsigned char add_str[128];
1208  unsigned char tag_str[128];
1209  unsigned char output[128];
1210  unsigned char tag_output[16];
1211  gcm_context ctx;
1212  unsigned int key_len;
1213  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
1214 
1215  memset(key_str, 0x00, 128);
1216  memset(src_str, 0x00, 128);
1217  memset(dst_str, 0x00, 257);
1218  memset(iv_str, 0x00, 128);
1219  memset(add_str, 0x00, 128);
1220  memset(tag_str, 0x00, 128);
1221  memset(output, 0x00, 128);
1222  memset(tag_output, 0x00, 16);
1223 
1224  key_len = unhexify( key_str, "744b9e1692d8974d7dec349ebd7fe1e8" );
1225  pt_len = unhexify( src_str, "" );
1226  iv_len = unhexify( iv_str, "62ad4b09fd554e0d6b3937839e693e5b" );
1227  add_len = unhexify( add_str, "6f9978f7078f0030c45caf49128ff72943a208a2398d08d132239f3ab5c184708e4222ec9ccde69dc86d1700c2fe0af939454bbb3962327158557860b6fa492ab8201df262a6209705c7e3129419bce8b827320893c1579ca05b32c81b3963b849428f71fe7528e710557a272117199163a35ebfbaba78f7676f7e566b16311a" );
1228 
1229  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1230  if( 0 == 0 )
1231  {
1232  fct_chk( 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 );
1233  hexify( dst_str, output, pt_len );
1234  hexify( tag_str, tag_output, tag_len );
1235 
1236  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1237  fct_chk( strcmp( (char *) tag_str, "634f6fe9625be8b1af9f46bcc0fa3162" ) == 0 );
1238  }
1239  }
1240  FCT_TEST_END();
1241 
1242 
1243  FCT_TEST_BGN(gcm_nist_validation_aes_12812801024120_0)
1244  {
1245  unsigned char key_str[128];
1246  unsigned char src_str[128];
1247  unsigned char dst_str[257];
1248  unsigned char iv_str[128];
1249  unsigned char add_str[128];
1250  unsigned char tag_str[128];
1251  unsigned char output[128];
1252  unsigned char tag_output[16];
1253  gcm_context ctx;
1254  unsigned int key_len;
1255  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
1256 
1257  memset(key_str, 0x00, 128);
1258  memset(src_str, 0x00, 128);
1259  memset(dst_str, 0x00, 257);
1260  memset(iv_str, 0x00, 128);
1261  memset(add_str, 0x00, 128);
1262  memset(tag_str, 0x00, 128);
1263  memset(output, 0x00, 128);
1264  memset(tag_output, 0x00, 16);
1265 
1266  key_len = unhexify( key_str, "097c059535037c6b358dbb5a68b5f2b1" );
1267  pt_len = unhexify( src_str, "" );
1268  iv_len = unhexify( iv_str, "00caedfa078c27e3d9551e3fb8d98d77" );
1269  add_len = unhexify( add_str, "6c4bde11129a959fcd6a482cb19f5f1c582c042b314f7997b0450242f9e669dc1cbb0a3b7a185bf8b035267e6f03206268008e2b97864d44d6a9c6b1b4b067d623c4b4e9c608042ea9120aed3bee80886352683891496d8980e40b8480c98c2fe08f945aa1ef6007c65220319dd8678184ab54e81083b746ec6441e87a568e0c" );
1270 
1271  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1272  if( 0 == 0 )
1273  {
1274  fct_chk( 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 );
1275  hexify( dst_str, output, pt_len );
1276  hexify( tag_str, tag_output, tag_len );
1277 
1278  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1279  fct_chk( strcmp( (char *) tag_str, "5075ef45c6326726264703f72badde" ) == 0 );
1280  }
1281  }
1282  FCT_TEST_END();
1283 
1284 
1285  FCT_TEST_BGN(gcm_nist_validation_aes_12812801024120_1)
1286  {
1287  unsigned char key_str[128];
1288  unsigned char src_str[128];
1289  unsigned char dst_str[257];
1290  unsigned char iv_str[128];
1291  unsigned char add_str[128];
1292  unsigned char tag_str[128];
1293  unsigned char output[128];
1294  unsigned char tag_output[16];
1295  gcm_context ctx;
1296  unsigned int key_len;
1297  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
1298 
1299  memset(key_str, 0x00, 128);
1300  memset(src_str, 0x00, 128);
1301  memset(dst_str, 0x00, 257);
1302  memset(iv_str, 0x00, 128);
1303  memset(add_str, 0x00, 128);
1304  memset(tag_str, 0x00, 128);
1305  memset(output, 0x00, 128);
1306  memset(tag_output, 0x00, 16);
1307 
1308  key_len = unhexify( key_str, "d25db5eca46c16490294423ca0c35660" );
1309  pt_len = unhexify( src_str, "" );
1310  iv_len = unhexify( iv_str, "6f37f15d6c7ea816278ab977c29fa45e" );
1311  add_len = unhexify( add_str, "bd76fd431cea72a288e5d7289c651c93b5f429a54f85249021d6b595eb9ce26e18914a381a6b0299acc3725431b352670f206b731be718a598ec123dce0a2c5ac0aa4641b092e704da9f967b909ca55c2722298365a50dcb5b5ec03a1d0cbb67b8de1e8b06e724af91137e0d98e7dc1e8253887da453cdcbd2eca03deacaabb8" );
1312 
1313  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1314  if( 0 == 0 )
1315  {
1316  fct_chk( 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 );
1317  hexify( dst_str, output, pt_len );
1318  hexify( tag_str, tag_output, tag_len );
1319 
1320  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1321  fct_chk( strcmp( (char *) tag_str, "00510851e9682213d4124d5517ebaf" ) == 0 );
1322  }
1323  }
1324  FCT_TEST_END();
1325 
1326 
1327  FCT_TEST_BGN(gcm_nist_validation_aes_12812801024120_2)
1328  {
1329  unsigned char key_str[128];
1330  unsigned char src_str[128];
1331  unsigned char dst_str[257];
1332  unsigned char iv_str[128];
1333  unsigned char add_str[128];
1334  unsigned char tag_str[128];
1335  unsigned char output[128];
1336  unsigned char tag_output[16];
1337  gcm_context ctx;
1338  unsigned int key_len;
1339  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
1340 
1341  memset(key_str, 0x00, 128);
1342  memset(src_str, 0x00, 128);
1343  memset(dst_str, 0x00, 257);
1344  memset(iv_str, 0x00, 128);
1345  memset(add_str, 0x00, 128);
1346  memset(tag_str, 0x00, 128);
1347  memset(output, 0x00, 128);
1348  memset(tag_output, 0x00, 16);
1349 
1350  key_len = unhexify( key_str, "b3c6258a726aff94a7bcc41646c68157" );
1351  pt_len = unhexify( src_str, "" );
1352  iv_len = unhexify( iv_str, "7f5b3315afe5167a7e9061ab8b005588" );
1353  add_len = unhexify( add_str, "0ef3384862c7e00c2912e7fde91345dc3134b5448e6838f41135ba9199c03a7f208887e467563b39a6c1316540c1401e8ff148386c50fcf15724a65d3210b17832d63cdce76bd2b458348332b0b542122a57e381475a59440f280db6e1f4b8d0babfd47e3db11a9ef89cba5f334f0e8e72be30afb2b1ef2df8eb7f8d3da033c4" );
1354 
1355  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1356  if( 0 == 0 )
1357  {
1358  fct_chk( 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 );
1359  hexify( dst_str, output, pt_len );
1360  hexify( tag_str, tag_output, tag_len );
1361 
1362  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1363  fct_chk( strcmp( (char *) tag_str, "180489039ccf4a86c5f6349fc2235b" ) == 0 );
1364  }
1365  }
1366  FCT_TEST_END();
1367 
1368 
1369  FCT_TEST_BGN(gcm_nist_validation_aes_12812801024112_0)
1370  {
1371  unsigned char key_str[128];
1372  unsigned char src_str[128];
1373  unsigned char dst_str[257];
1374  unsigned char iv_str[128];
1375  unsigned char add_str[128];
1376  unsigned char tag_str[128];
1377  unsigned char output[128];
1378  unsigned char tag_output[16];
1379  gcm_context ctx;
1380  unsigned int key_len;
1381  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
1382 
1383  memset(key_str, 0x00, 128);
1384  memset(src_str, 0x00, 128);
1385  memset(dst_str, 0x00, 257);
1386  memset(iv_str, 0x00, 128);
1387  memset(add_str, 0x00, 128);
1388  memset(tag_str, 0x00, 128);
1389  memset(output, 0x00, 128);
1390  memset(tag_output, 0x00, 16);
1391 
1392  key_len = unhexify( key_str, "73cd0a1e2b6e12fbaa7cbace77d5119c" );
1393  pt_len = unhexify( src_str, "" );
1394  iv_len = unhexify( iv_str, "d897681764bcc3b62c26b4aaf407cefa" );
1395  add_len = unhexify( add_str, "8c773e14a906c7deae362d1bf3d7e54c6be4c74c691b7f2d248693b2619219fba6eb5bc45f77af1cf7c05d3dd463158f884fe82290d145135889fd851b86ee282aa20bbdf6af78c7f9db6128b8b99e7f9b270fd222efa18f7aca6932a1024efb72113e812b3f9d2d4ccc7c85f5898ddacccbf1b441cd74097740dd922b57bade" );
1396 
1397  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1398  if( 0 == 0 )
1399  {
1400  fct_chk( 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 );
1401  hexify( dst_str, output, pt_len );
1402  hexify( tag_str, tag_output, tag_len );
1403 
1404  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1405  fct_chk( strcmp( (char *) tag_str, "d8811a8990191f1e5bd15be84995" ) == 0 );
1406  }
1407  }
1408  FCT_TEST_END();
1409 
1410 
1411  FCT_TEST_BGN(gcm_nist_validation_aes_12812801024112_1)
1412  {
1413  unsigned char key_str[128];
1414  unsigned char src_str[128];
1415  unsigned char dst_str[257];
1416  unsigned char iv_str[128];
1417  unsigned char add_str[128];
1418  unsigned char tag_str[128];
1419  unsigned char output[128];
1420  unsigned char tag_output[16];
1421  gcm_context ctx;
1422  unsigned int key_len;
1423  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
1424 
1425  memset(key_str, 0x00, 128);
1426  memset(src_str, 0x00, 128);
1427  memset(dst_str, 0x00, 257);
1428  memset(iv_str, 0x00, 128);
1429  memset(add_str, 0x00, 128);
1430  memset(tag_str, 0x00, 128);
1431  memset(output, 0x00, 128);
1432  memset(tag_output, 0x00, 16);
1433 
1434  key_len = unhexify( key_str, "c1dfddafe076d0ceebb0f37bb25bc0b1" );
1435  pt_len = unhexify( src_str, "" );
1436  iv_len = unhexify( iv_str, "29c56db10cea802c19fb6230227ab2bf" );
1437  add_len = unhexify( add_str, "287b73cdc62ce058cdceff8e9af7afc321716f69da9eef60c2de93630ba7d0ed0a9d303cd15521a2647159b8478593f3dd3f5b7c52081e5154e55ccbff371d7e5dfc2d05e14d666a01ec2cc6028aacadfd78dfc73bf639fc4dfa0a0c46415902bbda2443620fa5e0ce4fccf1b8591e3a548f95755102a8438300753ea5f61b9f" );
1438 
1439  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1440  if( 0 == 0 )
1441  {
1442  fct_chk( 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 );
1443  hexify( dst_str, output, pt_len );
1444  hexify( tag_str, tag_output, tag_len );
1445 
1446  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1447  fct_chk( strcmp( (char *) tag_str, "309fedad1f3b81e51d69e4162e6f" ) == 0 );
1448  }
1449  }
1450  FCT_TEST_END();
1451 
1452 
1453  FCT_TEST_BGN(gcm_nist_validation_aes_12812801024112_2)
1454  {
1455  unsigned char key_str[128];
1456  unsigned char src_str[128];
1457  unsigned char dst_str[257];
1458  unsigned char iv_str[128];
1459  unsigned char add_str[128];
1460  unsigned char tag_str[128];
1461  unsigned char output[128];
1462  unsigned char tag_output[16];
1463  gcm_context ctx;
1464  unsigned int key_len;
1465  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
1466 
1467  memset(key_str, 0x00, 128);
1468  memset(src_str, 0x00, 128);
1469  memset(dst_str, 0x00, 257);
1470  memset(iv_str, 0x00, 128);
1471  memset(add_str, 0x00, 128);
1472  memset(tag_str, 0x00, 128);
1473  memset(output, 0x00, 128);
1474  memset(tag_output, 0x00, 16);
1475 
1476  key_len = unhexify( key_str, "2c4087ccd28ceda147d2fcfc18579b1e" );
1477  pt_len = unhexify( src_str, "" );
1478  iv_len = unhexify( iv_str, "9cbdd67c79ab46bcbcfa96fa2c3d7e87" );
1479  add_len = unhexify( add_str, "35088d18dff0a9d3929ce087668aae1d364b37a97102f3f43e11950e6ec8296d0c99b00cd1c5dff53d3a38475e7da7b9ee4ce0c6388a95d3f8b036414e4b79cd02b5468cbb277f930e7c92432a609db1effe65f60f1174b58f713e199491f9e0c29ba1f2e43306775d18c1136274af61488a2f932e95eceadfe3fe4b854fe899" );
1480 
1481  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1482  if( 0 == 0 )
1483  {
1484  fct_chk( 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 );
1485  hexify( dst_str, output, pt_len );
1486  hexify( tag_str, tag_output, tag_len );
1487 
1488  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1489  fct_chk( strcmp( (char *) tag_str, "b7e83207eb313b3ceb2360bc8d4f" ) == 0 );
1490  }
1491  }
1492  FCT_TEST_END();
1493 
1494 
1495  FCT_TEST_BGN(gcm_nist_validation_aes_12812801024104_0)
1496  {
1497  unsigned char key_str[128];
1498  unsigned char src_str[128];
1499  unsigned char dst_str[257];
1500  unsigned char iv_str[128];
1501  unsigned char add_str[128];
1502  unsigned char tag_str[128];
1503  unsigned char output[128];
1504  unsigned char tag_output[16];
1505  gcm_context ctx;
1506  unsigned int key_len;
1507  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
1508 
1509  memset(key_str, 0x00, 128);
1510  memset(src_str, 0x00, 128);
1511  memset(dst_str, 0x00, 257);
1512  memset(iv_str, 0x00, 128);
1513  memset(add_str, 0x00, 128);
1514  memset(tag_str, 0x00, 128);
1515  memset(output, 0x00, 128);
1516  memset(tag_output, 0x00, 16);
1517 
1518  key_len = unhexify( key_str, "bb66584c8b18f44c11f3bd7180b9b11d" );
1519  pt_len = unhexify( src_str, "" );
1520  iv_len = unhexify( iv_str, "39c82aee03ce0862ff99f8812cdbdcf0" );
1521  add_len = unhexify( add_str, "45ec858e0a5c6d81144ba893e0002818a70e9a19002a5471993077241b3fcfb4fd984f2450803293882d1c7ecb654e611578fe7d258f9a2ca3b5f0c0f0d0ec4828bdeb9299914ff2ac4cc997cf54fa908afdb3eae9f91d67c4637e1f9eb1eae2b3f482ddd5467668bc368b96bbbfc33b9ae2658e4ca43fcf4b66ba2a079d65f1" );
1522 
1523  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1524  if( 0 == 0 )
1525  {
1526  fct_chk( 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 );
1527  hexify( dst_str, output, pt_len );
1528  hexify( tag_str, tag_output, tag_len );
1529 
1530  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1531  fct_chk( strcmp( (char *) tag_str, "24332fd35a83b1dfb75969819b" ) == 0 );
1532  }
1533  }
1534  FCT_TEST_END();
1535 
1536 
1537  FCT_TEST_BGN(gcm_nist_validation_aes_12812801024104_1)
1538  {
1539  unsigned char key_str[128];
1540  unsigned char src_str[128];
1541  unsigned char dst_str[257];
1542  unsigned char iv_str[128];
1543  unsigned char add_str[128];
1544  unsigned char tag_str[128];
1545  unsigned char output[128];
1546  unsigned char tag_output[16];
1547  gcm_context ctx;
1548  unsigned int key_len;
1549  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
1550 
1551  memset(key_str, 0x00, 128);
1552  memset(src_str, 0x00, 128);
1553  memset(dst_str, 0x00, 257);
1554  memset(iv_str, 0x00, 128);
1555  memset(add_str, 0x00, 128);
1556  memset(tag_str, 0x00, 128);
1557  memset(output, 0x00, 128);
1558  memset(tag_output, 0x00, 16);
1559 
1560  key_len = unhexify( key_str, "7b2a230c8978d4e38fa5096ddc19d6f5" );
1561  pt_len = unhexify( src_str, "" );
1562  iv_len = unhexify( iv_str, "cd25e744a78af858e825e1fd070324ee" );
1563  add_len = unhexify( add_str, "628baac336862573cee158cd3935c34df3055dadc9c1695e9ea18724f6457f0d1833aab30b85a99e0793e56000de5d6d5cb2327a4cc8bec40cd198459e7b93617713e63bbd15381a066bc44a69c9ad3dfb1984f8b33a9429eda3068d3ac5fbbaaee2b952a486e58d674ffca641d9ec1d102600af11641fd5fff725204e6c34a8" );
1564 
1565  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1566  if( 0 == 0 )
1567  {
1568  fct_chk( 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 );
1569  hexify( dst_str, output, pt_len );
1570  hexify( tag_str, tag_output, tag_len );
1571 
1572  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1573  fct_chk( strcmp( (char *) tag_str, "68d49d495ff092ca8e5a2c16cb" ) == 0 );
1574  }
1575  }
1576  FCT_TEST_END();
1577 
1578 
1579  FCT_TEST_BGN(gcm_nist_validation_aes_12812801024104_2)
1580  {
1581  unsigned char key_str[128];
1582  unsigned char src_str[128];
1583  unsigned char dst_str[257];
1584  unsigned char iv_str[128];
1585  unsigned char add_str[128];
1586  unsigned char tag_str[128];
1587  unsigned char output[128];
1588  unsigned char tag_output[16];
1589  gcm_context ctx;
1590  unsigned int key_len;
1591  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
1592 
1593  memset(key_str, 0x00, 128);
1594  memset(src_str, 0x00, 128);
1595  memset(dst_str, 0x00, 257);
1596  memset(iv_str, 0x00, 128);
1597  memset(add_str, 0x00, 128);
1598  memset(tag_str, 0x00, 128);
1599  memset(output, 0x00, 128);
1600  memset(tag_output, 0x00, 16);
1601 
1602  key_len = unhexify( key_str, "73aa576e1dfad2c993afcc088bd8d62b" );
1603  pt_len = unhexify( src_str, "" );
1604  iv_len = unhexify( iv_str, "712e665a0a83e8ecad97e92afeb35706" );
1605  add_len = unhexify( add_str, "314e5fee776e9d5d2a1fb64ceb78e2c9a560a34724e30da860b5588fe63d50838cb480ff8ac61d7958b470b1bfd4c84799af6cb74c4a331b198204a251e731f7d785b966da595b745d01769623492c18b9dd8bd3c75249effd2032658c715906a71dbbed847027ea75d647f9803296a41906e0915250854597a163035a8d3f45" );
1606 
1607  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1608  if( 0 == 0 )
1609  {
1610  fct_chk( 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 );
1611  hexify( dst_str, output, pt_len );
1612  hexify( tag_str, tag_output, tag_len );
1613 
1614  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1615  fct_chk( strcmp( (char *) tag_str, "a41f5c9c7de2694c75856460d4" ) == 0 );
1616  }
1617  }
1618  FCT_TEST_END();
1619 
1620 
1621  FCT_TEST_BGN(gcm_nist_validation_aes_1281280102496_0)
1622  {
1623  unsigned char key_str[128];
1624  unsigned char src_str[128];
1625  unsigned char dst_str[257];
1626  unsigned char iv_str[128];
1627  unsigned char add_str[128];
1628  unsigned char tag_str[128];
1629  unsigned char output[128];
1630  unsigned char tag_output[16];
1631  gcm_context ctx;
1632  unsigned int key_len;
1633  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
1634 
1635  memset(key_str, 0x00, 128);
1636  memset(src_str, 0x00, 128);
1637  memset(dst_str, 0x00, 257);
1638  memset(iv_str, 0x00, 128);
1639  memset(add_str, 0x00, 128);
1640  memset(tag_str, 0x00, 128);
1641  memset(output, 0x00, 128);
1642  memset(tag_output, 0x00, 16);
1643 
1644  key_len = unhexify( key_str, "83f7631c4d4c466c9246cbc48e2dde6f" );
1645  pt_len = unhexify( src_str, "" );
1646  iv_len = unhexify( iv_str, "f5d6c8c252cb687a931c38f58f74943c" );
1647  add_len = unhexify( add_str, "1f35e94a35d0f424bf690a15038126a41502593612efe6333cf94ea0565ca6acdefae8d74dae62df95e9261c6596c3397220e044c5b08cf39cccb27315d9b795da321204910274a93436bc0573fdba04ae6bb14c6ca955cf8b9e193a12e05796d7f4b397507614dabc457f1cd3ce19e439b6e62703f2189372938b29b7a542b9" );
1648 
1649  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1650  if( 0 == 0 )
1651  {
1652  fct_chk( 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 );
1653  hexify( dst_str, output, pt_len );
1654  hexify( tag_str, tag_output, tag_len );
1655 
1656  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1657  fct_chk( strcmp( (char *) tag_str, "bb85dbd858ab7b752da7e53c" ) == 0 );
1658  }
1659  }
1660  FCT_TEST_END();
1661 
1662 
1663  FCT_TEST_BGN(gcm_nist_validation_aes_1281280102496_1)
1664  {
1665  unsigned char key_str[128];
1666  unsigned char src_str[128];
1667  unsigned char dst_str[257];
1668  unsigned char iv_str[128];
1669  unsigned char add_str[128];
1670  unsigned char tag_str[128];
1671  unsigned char output[128];
1672  unsigned char tag_output[16];
1673  gcm_context ctx;
1674  unsigned int key_len;
1675  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
1676 
1677  memset(key_str, 0x00, 128);
1678  memset(src_str, 0x00, 128);
1679  memset(dst_str, 0x00, 257);
1680  memset(iv_str, 0x00, 128);
1681  memset(add_str, 0x00, 128);
1682  memset(tag_str, 0x00, 128);
1683  memset(output, 0x00, 128);
1684  memset(tag_output, 0x00, 16);
1685 
1686  key_len = unhexify( key_str, "784e023b2d4c978151d05ee71533c56c" );
1687  pt_len = unhexify( src_str, "" );
1688  iv_len = unhexify( iv_str, "f16d041b9f0f454db9985c8558ef8a61" );
1689  add_len = unhexify( add_str, "91f6e108c294640c7bc65d102d3d25a7bfbbe114acec9b495636689afd65fff794837946602ef04de7d4304a81809e0f7ddc45c476c29fd5286fcf4dd1ba76ed3ce88abdb51cd21e7aaeecb13238ac031da87ab96b2a13157278bf669d0efae28852ec3585d520d54502881322f7977d03954e17e7c0c0d8f762e34f59ca141e" );
1690 
1691  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1692  if( 0 == 0 )
1693  {
1694  fct_chk( 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 );
1695  hexify( dst_str, output, pt_len );
1696  hexify( tag_str, tag_output, tag_len );
1697 
1698  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1699  fct_chk( strcmp( (char *) tag_str, "59699c639d67be6a6d7c9789" ) == 0 );
1700  }
1701  }
1702  FCT_TEST_END();
1703 
1704 
1705  FCT_TEST_BGN(gcm_nist_validation_aes_1281280102496_2)
1706  {
1707  unsigned char key_str[128];
1708  unsigned char src_str[128];
1709  unsigned char dst_str[257];
1710  unsigned char iv_str[128];
1711  unsigned char add_str[128];
1712  unsigned char tag_str[128];
1713  unsigned char output[128];
1714  unsigned char tag_output[16];
1715  gcm_context ctx;
1716  unsigned int key_len;
1717  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
1718 
1719  memset(key_str, 0x00, 128);
1720  memset(src_str, 0x00, 128);
1721  memset(dst_str, 0x00, 257);
1722  memset(iv_str, 0x00, 128);
1723  memset(add_str, 0x00, 128);
1724  memset(tag_str, 0x00, 128);
1725  memset(output, 0x00, 128);
1726  memset(tag_output, 0x00, 16);
1727 
1728  key_len = unhexify( key_str, "d3a2ec66e4a72cb3540e87f4e67c7e58" );
1729  pt_len = unhexify( src_str, "" );
1730  iv_len = unhexify( iv_str, "07a9cf9f44b07e3067d60e276322e9fb" );
1731  add_len = unhexify( add_str, "d7e722b82e8607a64fbfeefc7887009298f06a637fe937277e3a76e8addaeeb460ba0743912c07b500b4b51e9fec2b7eddf691d155baf689f75968160c19a8330e254220142ae843bf0687aabeb74ab607227b0a7539ec3cfea72a5c35f236623af78beffaee6e7b1adc2895732ffedb3f8520710f04eb9c2ce9b2cae215ed5c" );
1732 
1733  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1734  if( 0 == 0 )
1735  {
1736  fct_chk( 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 );
1737  hexify( dst_str, output, pt_len );
1738  hexify( tag_str, tag_output, tag_len );
1739 
1740  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1741  fct_chk( strcmp( (char *) tag_str, "f29aec72368bfcfa9ae815fd" ) == 0 );
1742  }
1743  }
1744  FCT_TEST_END();
1745 
1746 
1747  FCT_TEST_BGN(gcm_nist_validation_aes_1281280102464_0)
1748  {
1749  unsigned char key_str[128];
1750  unsigned char src_str[128];
1751  unsigned char dst_str[257];
1752  unsigned char iv_str[128];
1753  unsigned char add_str[128];
1754  unsigned char tag_str[128];
1755  unsigned char output[128];
1756  unsigned char tag_output[16];
1757  gcm_context ctx;
1758  unsigned int key_len;
1759  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
1760 
1761  memset(key_str, 0x00, 128);
1762  memset(src_str, 0x00, 128);
1763  memset(dst_str, 0x00, 257);
1764  memset(iv_str, 0x00, 128);
1765  memset(add_str, 0x00, 128);
1766  memset(tag_str, 0x00, 128);
1767  memset(output, 0x00, 128);
1768  memset(tag_output, 0x00, 16);
1769 
1770  key_len = unhexify( key_str, "83f382a90146544ef4871bde891aed22" );
1771  pt_len = unhexify( src_str, "" );
1772  iv_len = unhexify( iv_str, "c6f664f5ccfd1aaefb60f7fa3b642302" );
1773  add_len = unhexify( add_str, "656a2f221a1339d8f5c26393a08fa31859f626eec9a68afb6ee30e5b6859d1cbb5ed7dea6cbc4a5d537d70227d0608185df71a0252fa313be4d804567c162b743814f8b8306155931fdecf13822a524868b99a27fd2ff8f98c16edccd64520e2dce1ad645fd5255c7c436d9b876f592ef468397b00857ba948edf21215d63d99" );
1774 
1775  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1776  if( 0 == 0 )
1777  {
1778  fct_chk( 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 );
1779  hexify( dst_str, output, pt_len );
1780  hexify( tag_str, tag_output, tag_len );
1781 
1782  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1783  fct_chk( strcmp( (char *) tag_str, "09df79dd8b476f69" ) == 0 );
1784  }
1785  }
1786  FCT_TEST_END();
1787 
1788 
1789  FCT_TEST_BGN(gcm_nist_validation_aes_1281280102464_1)
1790  {
1791  unsigned char key_str[128];
1792  unsigned char src_str[128];
1793  unsigned char dst_str[257];
1794  unsigned char iv_str[128];
1795  unsigned char add_str[128];
1796  unsigned char tag_str[128];
1797  unsigned char output[128];
1798  unsigned char tag_output[16];
1799  gcm_context ctx;
1800  unsigned int key_len;
1801  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
1802 
1803  memset(key_str, 0x00, 128);
1804  memset(src_str, 0x00, 128);
1805  memset(dst_str, 0x00, 257);
1806  memset(iv_str, 0x00, 128);
1807  memset(add_str, 0x00, 128);
1808  memset(tag_str, 0x00, 128);
1809  memset(output, 0x00, 128);
1810  memset(tag_output, 0x00, 16);
1811 
1812  key_len = unhexify( key_str, "64334f10a62c26fef79d9024d4ba7c5f" );
1813  pt_len = unhexify( src_str, "" );
1814  iv_len = unhexify( iv_str, "7b85251554d4f0ff89980cf3568c5caa" );
1815  add_len = unhexify( add_str, "dab2892262a1832a473cd3481acbd3d1820f14361c275514ec693b40f2170ea5ff82c4f7e95a7c783ea52c43a0a399c37b31319a122fd1a722e6631efa33f8bfb6dc193986580f0344d28842a3a4a5ca6880552557f3915a65501f6ee0c1b68a4c9040f0fac381cbccb6a6e9bca23b99f2ef1abbca71c69aa27af2db176bf37d" );
1816 
1817  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1818  if( 0 == 0 )
1819  {
1820  fct_chk( 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 );
1821  hexify( dst_str, output, pt_len );
1822  hexify( tag_str, tag_output, tag_len );
1823 
1824  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1825  fct_chk( strcmp( (char *) tag_str, "3e8406900a4c28bc" ) == 0 );
1826  }
1827  }
1828  FCT_TEST_END();
1829 
1830 
1831  FCT_TEST_BGN(gcm_nist_validation_aes_1281280102464_2)
1832  {
1833  unsigned char key_str[128];
1834  unsigned char src_str[128];
1835  unsigned char dst_str[257];
1836  unsigned char iv_str[128];
1837  unsigned char add_str[128];
1838  unsigned char tag_str[128];
1839  unsigned char output[128];
1840  unsigned char tag_output[16];
1841  gcm_context ctx;
1842  unsigned int key_len;
1843  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
1844 
1845  memset(key_str, 0x00, 128);
1846  memset(src_str, 0x00, 128);
1847  memset(dst_str, 0x00, 257);
1848  memset(iv_str, 0x00, 128);
1849  memset(add_str, 0x00, 128);
1850  memset(tag_str, 0x00, 128);
1851  memset(output, 0x00, 128);
1852  memset(tag_output, 0x00, 16);
1853 
1854  key_len = unhexify( key_str, "1c98ca4971c3a6333c18b88addf13368" );
1855  pt_len = unhexify( src_str, "" );
1856  iv_len = unhexify( iv_str, "7f617f08e826a3c61882c3e00c203d4b" );
1857  add_len = unhexify( add_str, "ab1531fce0f279d21091c3334bd20afa55c7155bfc275330ed45f91cfc953771cbde2582f4be279918ac8b9ae07cb3b2efd14292e094891d4841be329678ad58d714fc8ce4bffe51f539f4240c14ba883b95cdc32cf4a9fd6ba4ffeafa0d6718989c46483c96cfca3fe91000f9f923d7f96725e966de068b5da65546fe38f70e" );
1858 
1859  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1860  if( 0 == 0 )
1861  {
1862  fct_chk( 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 );
1863  hexify( dst_str, output, pt_len );
1864  hexify( tag_str, tag_output, tag_len );
1865 
1866  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1867  fct_chk( strcmp( (char *) tag_str, "58cc756d3bf9b6f9" ) == 0 );
1868  }
1869  }
1870  FCT_TEST_END();
1871 
1872 
1873  FCT_TEST_BGN(gcm_nist_validation_aes_1281280102432_0)
1874  {
1875  unsigned char key_str[128];
1876  unsigned char src_str[128];
1877  unsigned char dst_str[257];
1878  unsigned char iv_str[128];
1879  unsigned char add_str[128];
1880  unsigned char tag_str[128];
1881  unsigned char output[128];
1882  unsigned char tag_output[16];
1883  gcm_context ctx;
1884  unsigned int key_len;
1885  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
1886 
1887  memset(key_str, 0x00, 128);
1888  memset(src_str, 0x00, 128);
1889  memset(dst_str, 0x00, 257);
1890  memset(iv_str, 0x00, 128);
1891  memset(add_str, 0x00, 128);
1892  memset(tag_str, 0x00, 128);
1893  memset(output, 0x00, 128);
1894  memset(tag_output, 0x00, 16);
1895 
1896  key_len = unhexify( key_str, "247d3abeb807bde959e68b40a3750045" );
1897  pt_len = unhexify( src_str, "" );
1898  iv_len = unhexify( iv_str, "3f5390cd7921fcb42c59f0db05a8a62f" );
1899  add_len = unhexify( add_str, "81abf375da7157a1a56068d0918037fecb7296d9b1771c54ae6030abda4b9d76feff818de81747980b2c1b005e36b3be36afbf1092edef6fd875d2903d73612addf206a6ae65886421059c70990a6ee33197f92bed649901fed62fdd20c30d81baf6090f50d9f59290528e58a0b7412ace0a293369f2b4c8d72c2fb0e1c432f5" );
1900 
1901  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1902  if( 0 == 0 )
1903  {
1904  fct_chk( 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 );
1905  hexify( dst_str, output, pt_len );
1906  hexify( tag_str, tag_output, tag_len );
1907 
1908  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1909  fct_chk( strcmp( (char *) tag_str, "37bb4857" ) == 0 );
1910  }
1911  }
1912  FCT_TEST_END();
1913 
1914 
1915  FCT_TEST_BGN(gcm_nist_validation_aes_1281280102432_1)
1916  {
1917  unsigned char key_str[128];
1918  unsigned char src_str[128];
1919  unsigned char dst_str[257];
1920  unsigned char iv_str[128];
1921  unsigned char add_str[128];
1922  unsigned char tag_str[128];
1923  unsigned char output[128];
1924  unsigned char tag_output[16];
1925  gcm_context ctx;
1926  unsigned int key_len;
1927  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
1928 
1929  memset(key_str, 0x00, 128);
1930  memset(src_str, 0x00, 128);
1931  memset(dst_str, 0x00, 257);
1932  memset(iv_str, 0x00, 128);
1933  memset(add_str, 0x00, 128);
1934  memset(tag_str, 0x00, 128);
1935  memset(output, 0x00, 128);
1936  memset(tag_output, 0x00, 16);
1937 
1938  key_len = unhexify( key_str, "622be8cd3c757de00fbb7ab4563ce14f" );
1939  pt_len = unhexify( src_str, "" );
1940  iv_len = unhexify( iv_str, "16c53a843b1549716d7c06b141861862" );
1941  add_len = unhexify( add_str, "a15d101580d549f2401bf0f36be0f83724875205c9109d2d69d2609cbf67504b918f0859303192b4075f952454f3e7152f898f997b36afc0356712fc08db3343054b20e88ad1274e019bf8fcc3c921d3bc8f9c1d1d24adc61f6033a83ef46a84762304f1903553748b13b1647c96eb8702ebb41ccea4d9cfebcb177c453277f2" );
1942 
1943  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1944  if( 0 == 0 )
1945  {
1946  fct_chk( 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 );
1947  hexify( dst_str, output, pt_len );
1948  hexify( tag_str, tag_output, tag_len );
1949 
1950  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1951  fct_chk( strcmp( (char *) tag_str, "35778596" ) == 0 );
1952  }
1953  }
1954  FCT_TEST_END();
1955 
1956 
1957  FCT_TEST_BGN(gcm_nist_validation_aes_1281280102432_2)
1958  {
1959  unsigned char key_str[128];
1960  unsigned char src_str[128];
1961  unsigned char dst_str[257];
1962  unsigned char iv_str[128];
1963  unsigned char add_str[128];
1964  unsigned char tag_str[128];
1965  unsigned char output[128];
1966  unsigned char tag_output[16];
1967  gcm_context ctx;
1968  unsigned int key_len;
1969  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
1970 
1971  memset(key_str, 0x00, 128);
1972  memset(src_str, 0x00, 128);
1973  memset(dst_str, 0x00, 257);
1974  memset(iv_str, 0x00, 128);
1975  memset(add_str, 0x00, 128);
1976  memset(tag_str, 0x00, 128);
1977  memset(output, 0x00, 128);
1978  memset(tag_output, 0x00, 16);
1979 
1980  key_len = unhexify( key_str, "8a660aa0191f9816261387d5aeb262f6" );
1981  pt_len = unhexify( src_str, "" );
1982  iv_len = unhexify( iv_str, "c720cb31e841480da5ba656e9b93f066" );
1983  add_len = unhexify( add_str, "d979affe395bd048db26d26908a1c2a435905299086cc55bb65ef782f5aed99c41743c3ae252ea087f5453bdc605abd784b337b60960946358da2218b076826659a1fafa59124a00a3424fce0d00c38eea85cfb3d1e01bcb09d9870d5b3fe728f394e0e512f5aa849d0550d45a7cc384f1e4c6b2e138efbc8f586b5b5ed09212" );
1984 
1985  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1986  if( 0 == 0 )
1987  {
1988  fct_chk( 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 );
1989  hexify( dst_str, output, pt_len );
1990  hexify( tag_str, tag_output, tag_len );
1991 
1992  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1993  fct_chk( strcmp( (char *) tag_str, "cf7944b1" ) == 0 );
1994  }
1995  }
1996  FCT_TEST_END();
1997 
1998 
1999  FCT_TEST_BGN(gcm_nist_validation_aes_12812810240128_0)
2000  {
2001  unsigned char key_str[128];
2002  unsigned char src_str[128];
2003  unsigned char dst_str[257];
2004  unsigned char iv_str[128];
2005  unsigned char add_str[128];
2006  unsigned char tag_str[128];
2007  unsigned char output[128];
2008  unsigned char tag_output[16];
2009  gcm_context ctx;
2010  unsigned int key_len;
2011  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
2012 
2013  memset(key_str, 0x00, 128);
2014  memset(src_str, 0x00, 128);
2015  memset(dst_str, 0x00, 257);
2016  memset(iv_str, 0x00, 128);
2017  memset(add_str, 0x00, 128);
2018  memset(tag_str, 0x00, 128);
2019  memset(output, 0x00, 128);
2020  memset(tag_output, 0x00, 16);
2021 
2022  key_len = unhexify( key_str, "ce0f8cfe9d64c4f4c045d11b97c2d918" );
2023  pt_len = unhexify( src_str, "dfff250d380f363880963b42d6913c1ba11e8edf7c4ab8b76d79ccbaac628f548ee542f48728a9a2620a0d69339c8291e8d398440d740e310908cdee7c273cc91275ce7271ba12f69237998b07b789b3993aaac8dc4ec1914432a30f5172f79ea0539bd1f70b36d437e5170bc63039a5280816c05e1e41760b58e35696cebd55" );
2024  iv_len = unhexify( iv_str, "ad4c3627a494fc628316dc03faf81db8" );
2025  add_len = unhexify( add_str, "" );
2026 
2027  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2028  if( 0 == 0 )
2029  {
2030  fct_chk( 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 );
2031  hexify( dst_str, output, pt_len );
2032  hexify( tag_str, tag_output, tag_len );
2033 
2034  fct_chk( strcmp( (char *) dst_str, "0de73d9702d9357c9e8619b7944e40732ac2f4dd3f1b42d8d7f36acb1f1497990d0ec3d626082cdb1384ec72a4c1d98955ba2a3aae6d81b24e9ce533eb5ede7210ae4a06d43f750138b8914d754d43bce416fee799cc4dd03949acedc34def7d6bde6ba41a4cf03d209689a3ad181f1b6dcf76ca25c87eb1c7459cc9f95ddc57" ) == 0 );
2035  fct_chk( strcmp( (char *) tag_str, "5f6a3620e59fe8977286f502d0da7517" ) == 0 );
2036  }
2037  }
2038  FCT_TEST_END();
2039 
2040 
2041  FCT_TEST_BGN(gcm_nist_validation_aes_12812810240128_1)
2042  {
2043  unsigned char key_str[128];
2044  unsigned char src_str[128];
2045  unsigned char dst_str[257];
2046  unsigned char iv_str[128];
2047  unsigned char add_str[128];
2048  unsigned char tag_str[128];
2049  unsigned char output[128];
2050  unsigned char tag_output[16];
2051  gcm_context ctx;
2052  unsigned int key_len;
2053  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
2054 
2055  memset(key_str, 0x00, 128);
2056  memset(src_str, 0x00, 128);
2057  memset(dst_str, 0x00, 257);
2058  memset(iv_str, 0x00, 128);
2059  memset(add_str, 0x00, 128);
2060  memset(tag_str, 0x00, 128);
2061  memset(output, 0x00, 128);
2062  memset(tag_output, 0x00, 16);
2063 
2064  key_len = unhexify( key_str, "81371acd5553fdadc6af96fdeee4c64d" );
2065  pt_len = unhexify( src_str, "940806fd5ddcab9937b4ba875e46bb4b7e9688d616d17fd24646f1ef1457819f55887f53bd70039bb83b4d346aabe805288ab7a5756874bdc2b3d4894217d3a036da5e9e162fa2d9819ceb561ecf817efc9493b9a60796f6dc5e717ac99bc4ba298eee4f3cd56bbc07dde970d4f07bbfa1f5fe18c29a3927abe11369091df28f" );
2066  iv_len = unhexify( iv_str, "3262501ed230bc4f5a190ab050e1bcee" );
2067  add_len = unhexify( add_str, "" );
2068 
2069  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2070  if( 0 == 0 )
2071  {
2072  fct_chk( 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 );
2073  hexify( dst_str, output, pt_len );
2074  hexify( tag_str, tag_output, tag_len );
2075 
2076  fct_chk( strcmp( (char *) dst_str, "ffeb1907bdbfea877890a6e972a533ae661a903a257b3b912c7c768cc988e05afd71a9e6117d90d1e1b54f55de9b10cbce7a109452567483cc8d6a68b9e56da10802630591fdd8d55f9e172f0f58a7e0c56a73a1ae3c3062f0997b364eb0885d48e039b2ba1bd14dbb9c74a41cbd4b52564e470d1a8038d15207a7650bd3f1d6" ) == 0 );
2077  fct_chk( strcmp( (char *) tag_str, "227d422f8797b58aa6a189658b770da9" ) == 0 );
2078  }
2079  }
2080  FCT_TEST_END();
2081 
2082 
2083  FCT_TEST_BGN(gcm_nist_validation_aes_12812810240128_2)
2084  {
2085  unsigned char key_str[128];
2086  unsigned char src_str[128];
2087  unsigned char dst_str[257];
2088  unsigned char iv_str[128];
2089  unsigned char add_str[128];
2090  unsigned char tag_str[128];
2091  unsigned char output[128];
2092  unsigned char tag_output[16];
2093  gcm_context ctx;
2094  unsigned int key_len;
2095  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
2096 
2097  memset(key_str, 0x00, 128);
2098  memset(src_str, 0x00, 128);
2099  memset(dst_str, 0x00, 257);
2100  memset(iv_str, 0x00, 128);
2101  memset(add_str, 0x00, 128);
2102  memset(tag_str, 0x00, 128);
2103  memset(output, 0x00, 128);
2104  memset(tag_output, 0x00, 16);
2105 
2106  key_len = unhexify( key_str, "ef5295e9ae74729e222df6dab251158d" );
2107  pt_len = unhexify( src_str, "59372848432f86f5740500391d2e5d5fbe1f80ea876a0ecb9a5b298d9ea7cdc28620aeb2fda015345ae476f265351b2c6b6fcd66bc8aae4dc8a95c1350cda204da3d2d2fc5e6e142dc448296d5df0cc349d1eba2fa98d2f468662616274a147fbe07927440afa3967ac09a03a8de0b03f3036bde5e272e3c4c5ff169dd730238" );
2108  iv_len = unhexify( iv_str, "194d08fcc3c08ab96fa724c381274d3f" );
2109  add_len = unhexify( add_str, "" );
2110 
2111  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2112  if( 0 == 0 )
2113  {
2114  fct_chk( 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 );
2115  hexify( dst_str, output, pt_len );
2116  hexify( tag_str, tag_output, tag_len );
2117 
2118  fct_chk( strcmp( (char *) dst_str, "fdceeffdc8390bde6b910544db61db2f345eba0664f78f65d94b90e3e2a5251be374b3c5d881460cfff3549a01f84eb9d54087306a20f5156cd555e46bd2173386c90ea47983320fcbf24e09a05f2ec4b2577287d05e050b55b3002b753de49abef895ee97015810c06d09212b0c09e4910c64ac3981795a1e360197740360fd" ) == 0 );
2119  fct_chk( strcmp( (char *) tag_str, "e94603dbd8af99ab1e14c602a38a0328" ) == 0 );
2120  }
2121  }
2122  FCT_TEST_END();
2123 
2124 
2125  FCT_TEST_BGN(gcm_nist_validation_aes_12812810240120_0)
2126  {
2127  unsigned char key_str[128];
2128  unsigned char src_str[128];
2129  unsigned char dst_str[257];
2130  unsigned char iv_str[128];
2131  unsigned char add_str[128];
2132  unsigned char tag_str[128];
2133  unsigned char output[128];
2134  unsigned char tag_output[16];
2135  gcm_context ctx;
2136  unsigned int key_len;
2137  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
2138 
2139  memset(key_str, 0x00, 128);
2140  memset(src_str, 0x00, 128);
2141  memset(dst_str, 0x00, 257);
2142  memset(iv_str, 0x00, 128);
2143  memset(add_str, 0x00, 128);
2144  memset(tag_str, 0x00, 128);
2145  memset(output, 0x00, 128);
2146  memset(tag_output, 0x00, 16);
2147 
2148  key_len = unhexify( key_str, "26db035f2ddd9f5672c6f6af156838d7" );
2149  pt_len = unhexify( src_str, "92c315936847649756b0b1bb4a3453e6e6da866f8088d96da44412d9f47a22dda0cd817287ba42163be59a69f73963059139fb3ba44bc5ebfd95b6742546dfb4fe95608dca71911d1347be68179d99c9ebf7ee1d56b17195f8794f3a658d7cad2317ed1d4bc246cd4530e17147e9ecdf41091a411a98bb6047eee8b4f1e4a9ef" );
2150  iv_len = unhexify( iv_str, "3686d49bb8c7bd15546d453fdf30e1f3" );
2151  add_len = unhexify( add_str, "" );
2152 
2153  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2154  if( 0 == 0 )
2155  {
2156  fct_chk( 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 );
2157  hexify( dst_str, output, pt_len );
2158  hexify( tag_str, tag_output, tag_len );
2159 
2160  fct_chk( strcmp( (char *) dst_str, "1ac98e9ccfe63a2f12a011e514f446c4c0e22dd93613b1b9b8f56d148be8a24e3682dfc1cde2b69e72d200b516a99e7466dae8cc678c6117dc14b2364cd2b952aed59722056d7dae4cfdb7d9c4f716aef2aa91a4f161d01c98d92d974247bb972de0557e175177ce34361be40c30ab9ac46240016e5ad350c3b7232c5920e051" ) == 0 );
2161  fct_chk( strcmp( (char *) tag_str, "b744316880b0df3d4f90c3ffa44144" ) == 0 );
2162  }
2163  }
2164  FCT_TEST_END();
2165 
2166 
2167  FCT_TEST_BGN(gcm_nist_validation_aes_12812810240120_1)
2168  {
2169  unsigned char key_str[128];
2170  unsigned char src_str[128];
2171  unsigned char dst_str[257];
2172  unsigned char iv_str[128];
2173  unsigned char add_str[128];
2174  unsigned char tag_str[128];
2175  unsigned char output[128];
2176  unsigned char tag_output[16];
2177  gcm_context ctx;
2178  unsigned int key_len;
2179  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
2180 
2181  memset(key_str, 0x00, 128);
2182  memset(src_str, 0x00, 128);
2183  memset(dst_str, 0x00, 257);
2184  memset(iv_str, 0x00, 128);
2185  memset(add_str, 0x00, 128);
2186  memset(tag_str, 0x00, 128);
2187  memset(output, 0x00, 128);
2188  memset(tag_output, 0x00, 16);
2189 
2190  key_len = unhexify( key_str, "d5c63757197a132cbb33351fd2d81a46" );
2191  pt_len = unhexify( src_str, "e970b62ce5f06b15f8448aa2a095c2b3c8adf535e110e7f374411ed51fa19f9c4926045f796b7cd8a942b6a19811b7aae59fce37e50d6ca5a4a57bfb041a5b51c1ee82b54d03be22d9dc2bb9a2e708503b85e2479b0425a033ae825b4f232ca373e280e3cc97cf0d79397a81fb30d3b41cdaa3e788470cde86734e10a58b1e3a" );
2192  iv_len = unhexify( iv_str, "a669a4d2f841f9a0b9ede1fb61fee911" );
2193  add_len = unhexify( add_str, "" );
2194 
2195  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2196  if( 0 == 0 )
2197  {
2198  fct_chk( 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 );
2199  hexify( dst_str, output, pt_len );
2200  hexify( tag_str, tag_output, tag_len );
2201 
2202  fct_chk( strcmp( (char *) dst_str, "522ba7220d0d4bea7ab9ca74ad8fa96ba337f7aa749cd26186499081ba325df6d6b90a81bd1c7adda0cd1ca065894f14a074ec13eff117b2a00042038aea55850056a63adf04f58fcd7269085f5ad1ef17ce7b6c40804127f14747a2ad93ec31fada83663af025a3b90c20a4ae415b1c960094e5fd57db0d93a81edcce64f72d" ) == 0 );
2203  fct_chk( strcmp( (char *) tag_str, "7bfce3c8e513a89a5ee1480db9441f" ) == 0 );
2204  }
2205  }
2206  FCT_TEST_END();
2207 
2208 
2209  FCT_TEST_BGN(gcm_nist_validation_aes_12812810240120_2)
2210  {
2211  unsigned char key_str[128];
2212  unsigned char src_str[128];
2213  unsigned char dst_str[257];
2214  unsigned char iv_str[128];
2215  unsigned char add_str[128];
2216  unsigned char tag_str[128];
2217  unsigned char output[128];
2218  unsigned char tag_output[16];
2219  gcm_context ctx;
2220  unsigned int key_len;
2221  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
2222 
2223  memset(key_str, 0x00, 128);
2224  memset(src_str, 0x00, 128);
2225  memset(dst_str, 0x00, 257);
2226  memset(iv_str, 0x00, 128);
2227  memset(add_str, 0x00, 128);
2228  memset(tag_str, 0x00, 128);
2229  memset(output, 0x00, 128);
2230  memset(tag_output, 0x00, 16);
2231 
2232  key_len = unhexify( key_str, "f380d3bf0d55a1cd56b7e78359eb6c66" );
2233  pt_len = unhexify( src_str, "c0e977e91c1c50ee78d4a56c527b2d31a1a14f261aa77e52d910f8f230de4908b5cc6943e28b8c6e7ac61eebe270dcfde48d140ec13792371932e545b6ef4b52d1dfdf54c60ff892b74095a3f4a2b9000acd2cac04666a2305343b8c09f89dcc0c25bbe2a39b14624118df025962edec3dfc58d36fcac531b291ec45b5159e22" );
2234  iv_len = unhexify( iv_str, "ba3300f3a01e07dde1708343f01304d4" );
2235  add_len = unhexify( add_str, "" );
2236 
2237  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2238  if( 0 == 0 )
2239  {
2240  fct_chk( 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 );
2241  hexify( dst_str, output, pt_len );
2242  hexify( tag_str, tag_output, tag_len );
2243 
2244  fct_chk( strcmp( (char *) dst_str, "752f09b518616a91a802cf181532c7ec65b54c59c1bab3860f0ad19971a9e5bc8843524c5ffac827067b462ebb328e2eff4dd931728de882055129997204e78717becd66e1f6c9e8a273c4251896343604ac289eb1880207a8ea012626e18e69ad7573ef73071b8e2fb22c75c7fc7bf22382d55a5d709c15e4e8ff14e2bf81e4" ) == 0 );
2245  fct_chk( strcmp( (char *) tag_str, "fbf8818aee5c71ebfd19b0bcd96a7a" ) == 0 );
2246  }
2247  }
2248  FCT_TEST_END();
2249 
2250 
2251  FCT_TEST_BGN(gcm_nist_validation_aes_12812810240112_0)
2252  {
2253  unsigned char key_str[128];
2254  unsigned char src_str[128];
2255  unsigned char dst_str[257];
2256  unsigned char iv_str[128];
2257  unsigned char add_str[128];
2258  unsigned char tag_str[128];
2259  unsigned char output[128];
2260  unsigned char tag_output[16];
2261  gcm_context ctx;
2262  unsigned int key_len;
2263  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
2264 
2265  memset(key_str, 0x00, 128);
2266  memset(src_str, 0x00, 128);
2267  memset(dst_str, 0x00, 257);
2268  memset(iv_str, 0x00, 128);
2269  memset(add_str, 0x00, 128);
2270  memset(tag_str, 0x00, 128);
2271  memset(output, 0x00, 128);
2272  memset(tag_output, 0x00, 16);
2273 
2274  key_len = unhexify( key_str, "47c807cd1cf181040a4e3b1d94659db8" );
2275  pt_len = unhexify( src_str, "c4a52c1f1f0d32c21fb85fba21d1b358b332efa066c7893c566b2e859efdde99fc67bb6167cdb0485a8ed53dd1068d90bc990f360b044039791be6048ba0ee4ce1090c9fce602af59d69069f5bff8b6219aaaed5a9b1bfc8c5b7250c5a6cfe86586fa8064124d551da38d429a17696eb1a7a0341c363f010eafd26683eecdf82" );
2276  iv_len = unhexify( iv_str, "9963a3fb156beacd6dd88c15e83929df" );
2277  add_len = unhexify( add_str, "" );
2278 
2279  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2280  if( 0 == 0 )
2281  {
2282  fct_chk( 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 );
2283  hexify( dst_str, output, pt_len );
2284  hexify( tag_str, tag_output, tag_len );
2285 
2286  fct_chk( strcmp( (char *) dst_str, "e784ab006de8a52de1d04bc2c680d847c5decdd777cb2475ad4ab1dc529882d9e51cff5451b14ea5ff9a9bab5c5474e8a331d79564acdb2ac8159e0f46e9019bf80650c481fdaf1680cadcb8c5de9f924760b376ce5736cc4970cb8715b5999f577436283a4c21469306840af36d1e069616157d1b9ce75de3adb13d201cdf1b" ) == 0 );
2287  fct_chk( strcmp( (char *) tag_str, "51e8ce23f415a39be5991a7a925b" ) == 0 );
2288  }
2289  }
2290  FCT_TEST_END();
2291 
2292 
2293  FCT_TEST_BGN(gcm_nist_validation_aes_12812810240112_1)
2294  {
2295  unsigned char key_str[128];
2296  unsigned char src_str[128];
2297  unsigned char dst_str[257];
2298  unsigned char iv_str[128];
2299  unsigned char add_str[128];
2300  unsigned char tag_str[128];
2301  unsigned char output[128];
2302  unsigned char tag_output[16];
2303  gcm_context ctx;
2304  unsigned int key_len;
2305  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
2306 
2307  memset(key_str, 0x00, 128);
2308  memset(src_str, 0x00, 128);
2309  memset(dst_str, 0x00, 257);
2310  memset(iv_str, 0x00, 128);
2311  memset(add_str, 0x00, 128);
2312  memset(tag_str, 0x00, 128);
2313  memset(output, 0x00, 128);
2314  memset(tag_output, 0x00, 16);
2315 
2316  key_len = unhexify( key_str, "a0b033d14fe902aa0892b0e87f966c41" );
2317  pt_len = unhexify( src_str, "1cc751d890cd102486d81c618c23fa335067ac324ef11f7eddc937853db6e16d0f73727725a5a5bd580705416ecd97e368464ed0aea923ffb71c23c37f9cf9c8bd81cdbdc3d0ac34a875db3167ec1d519004d4fa4bba041af67af1ed3d4e09c32b3e8e10abd91f46836cec74b1f9c5b06c05f3b18caa78e7ff185db212b52ce0" );
2318  iv_len = unhexify( iv_str, "ad4dee18e6c19433ad52021164f8afb7" );
2319  add_len = unhexify( add_str, "" );
2320 
2321  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2322  if( 0 == 0 )
2323  {
2324  fct_chk( 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 );
2325  hexify( dst_str, output, pt_len );
2326  hexify( tag_str, tag_output, tag_len );
2327 
2328  fct_chk( strcmp( (char *) dst_str, "a30044582dacf57332b04402e993831df0a4c1364a83c9bce7353979fb444cd1b3fe747e2c933457ff21f39e943a38a85457bfe99dc09af886734d6e4218fc65138055ad8eb5d3044f4eed658e312b6165199e682ffa226558dc4b516f8d519f149bb5a40d2bb7d59ece9e5fd05358c89e635792ad20c73c174719f9b28c7358" ) == 0 );
2329  fct_chk( strcmp( (char *) tag_str, "6a18a4f880ce9e6796e1086ed05b" ) == 0 );
2330  }
2331  }
2332  FCT_TEST_END();
2333 
2334 
2335  FCT_TEST_BGN(gcm_nist_validation_aes_12812810240112_2)
2336  {
2337  unsigned char key_str[128];
2338  unsigned char src_str[128];
2339  unsigned char dst_str[257];
2340  unsigned char iv_str[128];
2341  unsigned char add_str[128];
2342  unsigned char tag_str[128];
2343  unsigned char output[128];
2344  unsigned char tag_output[16];
2345  gcm_context ctx;
2346  unsigned int key_len;
2347  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
2348 
2349  memset(key_str, 0x00, 128);
2350  memset(src_str, 0x00, 128);
2351  memset(dst_str, 0x00, 257);
2352  memset(iv_str, 0x00, 128);
2353  memset(add_str, 0x00, 128);
2354  memset(tag_str, 0x00, 128);
2355  memset(output, 0x00, 128);
2356  memset(tag_output, 0x00, 16);
2357 
2358  key_len = unhexify( key_str, "c4030ca84f132bfabaf660e036f56377" );
2359  pt_len = unhexify( src_str, "a8fe98e2b4880d12c99c9d5193b3537b3fbc5165cc1327395174d989be5741f867332271cdc52ddb295ddbeba33698073054c6d2416fafaeb0a76aad870a6fb6097a29fba99f858d49418572c8e4dc0d074ca8af7727c773c8617495b1195d6b2687a2e37fad116dd721b60bcb5471d548c6dafe3ecdcf0c962e4659a61f4df3" );
2360  iv_len = unhexify( iv_str, "975df9c932a46d54d677af8a6c9c9cc3" );
2361  add_len = unhexify( add_str, "" );
2362 
2363  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2364  if( 0 == 0 )
2365  {
2366  fct_chk( 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 );
2367  hexify( dst_str, output, pt_len );
2368  hexify( tag_str, tag_output, tag_len );
2369 
2370  fct_chk( strcmp( (char *) dst_str, "86b20fecebc4cf88a6a382d693117cd2a3c9eab747bf5df5f1d35e341d204d8fea6694b92552e347da676bc8d3353984e96472a509f5208ce100a2a9232478417947f85f10993c9d6939c8138bd6151aef8e2038536e8ba1ba84442e27586c1b642f9505455c738e9fd2c1b2527d1ecd3a2f6ed6e3869000ef68417ec99ff7a2" ) == 0 );
2371  fct_chk( strcmp( (char *) tag_str, "3516909124c0c1f9c30453c90052" ) == 0 );
2372  }
2373  }
2374  FCT_TEST_END();
2375 
2376 
2377  FCT_TEST_BGN(gcm_nist_validation_aes_12812810240104_0)
2378  {
2379  unsigned char key_str[128];
2380  unsigned char src_str[128];
2381  unsigned char dst_str[257];
2382  unsigned char iv_str[128];
2383  unsigned char add_str[128];
2384  unsigned char tag_str[128];
2385  unsigned char output[128];
2386  unsigned char tag_output[16];
2387  gcm_context ctx;
2388  unsigned int key_len;
2389  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
2390 
2391  memset(key_str, 0x00, 128);
2392  memset(src_str, 0x00, 128);
2393  memset(dst_str, 0x00, 257);
2394  memset(iv_str, 0x00, 128);
2395  memset(add_str, 0x00, 128);
2396  memset(tag_str, 0x00, 128);
2397  memset(output, 0x00, 128);
2398  memset(tag_output, 0x00, 16);
2399 
2400  key_len = unhexify( key_str, "6e210de363f170a7ccb1b9cec8d34737" );
2401  pt_len = unhexify( src_str, "89853fa002985a45651f2a7db2b45b7e7a7d33ce6c438ec4533c7fa257e1a384130369a68184a807fd0d92a70d91d7ddc56e5c5172c872257230d7aeb9293d785b1b8835dcde753798caff4abcd8bbc5378cd505dcf904aa69902e4f38699be972099adffc8778bd844a9a03e6b58a721a73324d956f20f2ffd00d3491f72f42" );
2402  iv_len = unhexify( iv_str, "39fe20b051ba21319a745349d908c4bf" );
2403  add_len = unhexify( add_str, "" );
2404 
2405  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2406  if( 0 == 0 )
2407  {
2408  fct_chk( 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 );
2409  hexify( dst_str, output, pt_len );
2410  hexify( tag_str, tag_output, tag_len );
2411 
2412  fct_chk( strcmp( (char *) dst_str, "ac9d74f8f405fd482287a4a7fa359caca095c0f1b46744f19c3c11e13b0c605b9857c8cc5a1754b95bcc658416f463bf8764f373205941885948259916eaabd964f2d6c2d784f928dc5eefe331f6c04b4862d4c8e966530de6bf533a10818de852de3af7f521b167cb4eb7141ba8ae8a17be1eb714fd26a474bbbbe870a659dc" ) == 0 );
2413  fct_chk( strcmp( (char *) tag_str, "7a2dfc88ad34d889f5e344ee0e" ) == 0 );
2414  }
2415  }
2416  FCT_TEST_END();
2417 
2418 
2419  FCT_TEST_BGN(gcm_nist_validation_aes_12812810240104_1)
2420  {
2421  unsigned char key_str[128];
2422  unsigned char src_str[128];
2423  unsigned char dst_str[257];
2424  unsigned char iv_str[128];
2425  unsigned char add_str[128];
2426  unsigned char tag_str[128];
2427  unsigned char output[128];
2428  unsigned char tag_output[16];
2429  gcm_context ctx;
2430  unsigned int key_len;
2431  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
2432 
2433  memset(key_str, 0x00, 128);
2434  memset(src_str, 0x00, 128);
2435  memset(dst_str, 0x00, 257);
2436  memset(iv_str, 0x00, 128);
2437  memset(add_str, 0x00, 128);
2438  memset(tag_str, 0x00, 128);
2439  memset(output, 0x00, 128);
2440  memset(tag_output, 0x00, 16);
2441 
2442  key_len = unhexify( key_str, "6bbfeda23ea644fb37666b05dc47f590" );
2443  pt_len = unhexify( src_str, "a85ec4c2c160deda7e3de0ae449eea6ed1d24e2c8f3d5151f2ac0fd869f5a763981733b68f46c5197d76c26cce7ddc8afc6cdf4536d771cf3e9cef0098e270c5e1ff72cb0ad7f84abf44b726e0eae052d0c1553afc67c7289a43851a4d04c2856cc46b4039380436465a3b19deb56e41b859aecaf22b90578a23288d5f7d9b0e" );
2444  iv_len = unhexify( iv_str, "9d154f3cc2c5b0bdd77e86e351220960" );
2445  add_len = unhexify( add_str, "" );
2446 
2447  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2448  if( 0 == 0 )
2449  {
2450  fct_chk( 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 );
2451  hexify( dst_str, output, pt_len );
2452  hexify( tag_str, tag_output, tag_len );
2453 
2454  fct_chk( strcmp( (char *) dst_str, "dbe575ea04b58429e68c733d99d7fb3a57e5604d6fc3baf17e0c6f981d78c070144702861316f892023515f20b697a8f3a40d821162dc9255d4775e7578285acf2cca67e902c060f80eaae29b9c011b6c110371409d914782e1e4115dc59439a2823507330852f10436b121538f22a3b619075610f1da87b6035138d78c75a79" ) == 0 );
2455  fct_chk( strcmp( (char *) tag_str, "8698763c121bf3c2262ba87a40" ) == 0 );
2456  }
2457  }
2458  FCT_TEST_END();
2459 
2460 
2461  FCT_TEST_BGN(gcm_nist_validation_aes_12812810240104_2)
2462  {
2463  unsigned char key_str[128];
2464  unsigned char src_str[128];
2465  unsigned char dst_str[257];
2466  unsigned char iv_str[128];
2467  unsigned char add_str[128];
2468  unsigned char tag_str[128];
2469  unsigned char output[128];
2470  unsigned char tag_output[16];
2471  gcm_context ctx;
2472  unsigned int key_len;
2473  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
2474 
2475  memset(key_str, 0x00, 128);
2476  memset(src_str, 0x00, 128);
2477  memset(dst_str, 0x00, 257);
2478  memset(iv_str, 0x00, 128);
2479  memset(add_str, 0x00, 128);
2480  memset(tag_str, 0x00, 128);
2481  memset(output, 0x00, 128);
2482  memset(tag_output, 0x00, 16);
2483 
2484  key_len = unhexify( key_str, "ce1407f666f2aa142ed4ef50eb2a4f64" );
2485  pt_len = unhexify( src_str, "585fc1e86809247826f87424741f6ce2ce7c7228fb960803be643acd28332b2036715e2b639fe3f8de7e43e88bd8e65a6e2259391360aaf534ae7566cbd2b3961c874d08636fca117d4123b3063931d7a161d00220014339ae9f447f31b8a2d7d5466fb1ff2508397b5fa71f9b4cd278c541442a052ae4367889deaed4095127" );
2486  iv_len = unhexify( iv_str, "1225a2662d6652e3d4e9c5556bc54af4" );
2487  add_len = unhexify( add_str, "" );
2488 
2489  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2490  if( 0 == 0 )
2491  {
2492  fct_chk( 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 );
2493  hexify( dst_str, output, pt_len );
2494  hexify( tag_str, tag_output, tag_len );
2495 
2496  fct_chk( strcmp( (char *) dst_str, "8bc13cc1cb52fbd15390cb5663ce3111c3fb943f8ed3c4f07b7aeb723649fccb90895999ec5dbdb69712d8e34ae3f325fefa49ecc7c074de8bb2ea01fa0554d7adbf49498f2f6e78aa0cd24620bab0f11bf9b2c73ad0eff780eb6c03ee9c4538952af754c566aba7c717d1ee6ac2f5ffe21dab9afd649cd65313ee686596fef0" ) == 0 );
2497  fct_chk( strcmp( (char *) tag_str, "9a1f1137f9ed217815551657bf" ) == 0 );
2498  }
2499  }
2500  FCT_TEST_END();
2501 
2502 
2503  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024096_0)
2504  {
2505  unsigned char key_str[128];
2506  unsigned char src_str[128];
2507  unsigned char dst_str[257];
2508  unsigned char iv_str[128];
2509  unsigned char add_str[128];
2510  unsigned char tag_str[128];
2511  unsigned char output[128];
2512  unsigned char tag_output[16];
2513  gcm_context ctx;
2514  unsigned int key_len;
2515  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
2516 
2517  memset(key_str, 0x00, 128);
2518  memset(src_str, 0x00, 128);
2519  memset(dst_str, 0x00, 257);
2520  memset(iv_str, 0x00, 128);
2521  memset(add_str, 0x00, 128);
2522  memset(tag_str, 0x00, 128);
2523  memset(output, 0x00, 128);
2524  memset(tag_output, 0x00, 16);
2525 
2526  key_len = unhexify( key_str, "5ecea1da76d6df90fd0d4077ef631b17" );
2527  pt_len = unhexify( src_str, "d87e9a0c6a9796d60ed78924f7a8c408d5b9fab03fc76790e74029f13358fcae0035bd971a400845f508c2c2cdc3949be498193afcca6d75f8d21521ac673bd41a936a133fb5ed61098f3cb89df5234c5ca5ad3dbbe488243d282412844df0d816c430de3280ab0680a2a5629dce53f94e8eb60b790f438a70fafb8a3ed78a1b" );
2528  iv_len = unhexify( iv_str, "7d7ae2ed1cfc972f60122dec79ff06fc" );
2529  add_len = unhexify( add_str, "" );
2530 
2531  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2532  if( 0 == 0 )
2533  {
2534  fct_chk( 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 );
2535  hexify( dst_str, output, pt_len );
2536  hexify( tag_str, tag_output, tag_len );
2537 
2538  fct_chk( strcmp( (char *) dst_str, "1eb19da71857854420c0b171f1f0714972fe7090db125d509aff6d92e5192353187f0906e3e8187f73709d1a60e074af01e83d1306d582a82edbdbebc797a733d72e2d4208675ef98ea4eaaddae2292e336fcd3fa85cdc577f4b8d3f324f0c5cf3919701208d6978f83466a02ae6cc368f57e18b9ee16e04cf6024b0c7fbad33" ) == 0 );
2539  fct_chk( strcmp( (char *) tag_str, "f74b3635ec3d755dc6defbd2" ) == 0 );
2540  }
2541  }
2542  FCT_TEST_END();
2543 
2544 
2545  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024096_1)
2546  {
2547  unsigned char key_str[128];
2548  unsigned char src_str[128];
2549  unsigned char dst_str[257];
2550  unsigned char iv_str[128];
2551  unsigned char add_str[128];
2552  unsigned char tag_str[128];
2553  unsigned char output[128];
2554  unsigned char tag_output[16];
2555  gcm_context ctx;
2556  unsigned int key_len;
2557  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
2558 
2559  memset(key_str, 0x00, 128);
2560  memset(src_str, 0x00, 128);
2561  memset(dst_str, 0x00, 257);
2562  memset(iv_str, 0x00, 128);
2563  memset(add_str, 0x00, 128);
2564  memset(tag_str, 0x00, 128);
2565  memset(output, 0x00, 128);
2566  memset(tag_output, 0x00, 16);
2567 
2568  key_len = unhexify( key_str, "6d6de51c30692d7863482cbbaa5ccbc3" );
2569  pt_len = unhexify( src_str, "9f242c230ae44ad91cb0f4fe259684883968f3ca4f57a3e0cc4b03ab063a4eacdf63f9e7900a98073e345d1b497b985887e1ffb5fe7d88cefa57dd41076f2da55ce7ab0899bdc5799b23773f8f7a4dfbf1861cf4de377281fae9763dd4ea8dc7c0d632b874c86ac8e4c90339ec3f14cc51bf9241660ab828605cc602984a0f10" );
2570  iv_len = unhexify( iv_str, "c6c0fa3da95255af5f15706274fa54ee" );
2571  add_len = unhexify( add_str, "" );
2572 
2573  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2574  if( 0 == 0 )
2575  {
2576  fct_chk( 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 );
2577  hexify( dst_str, output, pt_len );
2578  hexify( tag_str, tag_output, tag_len );
2579 
2580  fct_chk( strcmp( (char *) dst_str, "55e75daa3df3b13a33f784d5adacb2ff6861cacb297d5eaa61693985b6a0f82e9e0b3a28d10648191c6e62d6260d8a8bb471e6b37aca00dafdb2fb17454660f90c2849a9ad1733d7bc227d962b3cd86ab32d5b031eb2e717e4551cb23d448e06bac7b2a4cadb0886fde472d45de39eca2df474ba79eb58504318207325c81813" ) == 0 );
2581  fct_chk( strcmp( (char *) tag_str, "8eb9086a53c41c6a67bad490" ) == 0 );
2582  }
2583  }
2584  FCT_TEST_END();
2585 
2586 
2587  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024096_2)
2588  {
2589  unsigned char key_str[128];
2590  unsigned char src_str[128];
2591  unsigned char dst_str[257];
2592  unsigned char iv_str[128];
2593  unsigned char add_str[128];
2594  unsigned char tag_str[128];
2595  unsigned char output[128];
2596  unsigned char tag_output[16];
2597  gcm_context ctx;
2598  unsigned int key_len;
2599  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
2600 
2601  memset(key_str, 0x00, 128);
2602  memset(src_str, 0x00, 128);
2603  memset(dst_str, 0x00, 257);
2604  memset(iv_str, 0x00, 128);
2605  memset(add_str, 0x00, 128);
2606  memset(tag_str, 0x00, 128);
2607  memset(output, 0x00, 128);
2608  memset(tag_output, 0x00, 16);
2609 
2610  key_len = unhexify( key_str, "76b7f2307e9cf9221c8f3ff7105327f9" );
2611  pt_len = unhexify( src_str, "bc076bfd1ff7a9fb043a371e5af7112bb0c9c442be44ca648567937bcc091c127f02ab70b81ce51b2f7a38954dca3d94b3716c6114f0ba349d6f87f5efd84506ed289dfe8a1277a5d1821c56f9f297cb647cdf36d308e6ad41c55d68a5baaa520d11d18f5ddea061c4b1b1ec162b2d5bcf7c7716235dd31eda3dc3094cb15b26" );
2612  iv_len = unhexify( iv_str, "3cdaf7932a953999a6ce5c3cbd0df7e8" );
2613  add_len = unhexify( add_str, "" );
2614 
2615  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2616  if( 0 == 0 )
2617  {
2618  fct_chk( 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 );
2619  hexify( dst_str, output, pt_len );
2620  hexify( tag_str, tag_output, tag_len );
2621 
2622  fct_chk( strcmp( (char *) dst_str, "88c70d3cf5817f9fa669aadf731c0eb03c3d8e552f2dc763001ac94837353ab75b0c6553bb8ba2f83ef0556f73dae78f76bc22de9a9167d7be8e31da6e68b0f0bdf5566059901726b6f2890ac8745ed14f8898a937e7d3e4454246185124f65cebd278f8c11fb0de22da7248f33ef6bb82cb1c08259970714de39ea4114f85af" ) == 0 );
2623  fct_chk( strcmp( (char *) tag_str, "6006fe48f74f30bc467c7c50" ) == 0 );
2624  }
2625  }
2626  FCT_TEST_END();
2627 
2628 
2629  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024064_0)
2630  {
2631  unsigned char key_str[128];
2632  unsigned char src_str[128];
2633  unsigned char dst_str[257];
2634  unsigned char iv_str[128];
2635  unsigned char add_str[128];
2636  unsigned char tag_str[128];
2637  unsigned char output[128];
2638  unsigned char tag_output[16];
2639  gcm_context ctx;
2640  unsigned int key_len;
2641  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
2642 
2643  memset(key_str, 0x00, 128);
2644  memset(src_str, 0x00, 128);
2645  memset(dst_str, 0x00, 257);
2646  memset(iv_str, 0x00, 128);
2647  memset(add_str, 0x00, 128);
2648  memset(tag_str, 0x00, 128);
2649  memset(output, 0x00, 128);
2650  memset(tag_output, 0x00, 16);
2651 
2652  key_len = unhexify( key_str, "bac83044f9d8fefcd24766644317c533" );
2653  pt_len = unhexify( src_str, "a72daba9de96bc03b5cd7449c2e97c858385475127b9614e37c197225d5789535b69f9123993c89a4815c1b4393bfe23754ddc6c01fc44cd2009b5f886988dc70a8cebb12664fa4a692db89acb91de6a9eda48542b04459149f59537e703e3e89f6d683ebb797fce3874c819d08676d926bf2da2f83a22449b89e204b5ece58a" );
2654  iv_len = unhexify( iv_str, "1307cd0e6f9ba5570e9781fca9a4f577" );
2655  add_len = unhexify( add_str, "" );
2656 
2657  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2658  if( 0 == 0 )
2659  {
2660  fct_chk( 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 );
2661  hexify( dst_str, output, pt_len );
2662  hexify( tag_str, tag_output, tag_len );
2663 
2664  fct_chk( strcmp( (char *) dst_str, "479cdb5f65b9baff52a96c75790e3b7e239125f94525068cd1d73a1b8475080f33451ec83789d7189f5ad6a9130e7aa4df10d71ecabb5ccd980d84d0fbfb342506edcf7298ccb310c0e297dd443ded77cf1d96fc49055534439f1af583217a5de36e4df036a3b640d0212658399b629193080d38aff0d4e8aecd6c8d8f48b44f" ) == 0 );
2665  fct_chk( strcmp( (char *) tag_str, "ca192f8153aa5fb7" ) == 0 );
2666  }
2667  }
2668  FCT_TEST_END();
2669 
2670 
2671  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024064_1)
2672  {
2673  unsigned char key_str[128];
2674  unsigned char src_str[128];
2675  unsigned char dst_str[257];
2676  unsigned char iv_str[128];
2677  unsigned char add_str[128];
2678  unsigned char tag_str[128];
2679  unsigned char output[128];
2680  unsigned char tag_output[16];
2681  gcm_context ctx;
2682  unsigned int key_len;
2683  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
2684 
2685  memset(key_str, 0x00, 128);
2686  memset(src_str, 0x00, 128);
2687  memset(dst_str, 0x00, 257);
2688  memset(iv_str, 0x00, 128);
2689  memset(add_str, 0x00, 128);
2690  memset(tag_str, 0x00, 128);
2691  memset(output, 0x00, 128);
2692  memset(tag_output, 0x00, 16);
2693 
2694  key_len = unhexify( key_str, "627776b20ce9bb070a88f1a13d484550" );
2695  pt_len = unhexify( src_str, "1da4a24fb12538a724f62b277410d50e918bd6224d4a61df6fb7734300643198debea71686e018bcd8455c2041265d11f7f5dcec08c31fc94784404423bcf1dc8e615227d2b0840be123a1efb8201aaa15254a14a2d76a6ddf536701cb3379d3c6b1b0d689e5896186c88d4a2c53a70bb422ecc8e0a5c3b9f3d89ce40676e4f9" );
2696  iv_len = unhexify( iv_str, "57f3f9388ea1e2c1c73f60b7d711f6ea" );
2697  add_len = unhexify( add_str, "" );
2698 
2699  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2700  if( 0 == 0 )
2701  {
2702  fct_chk( 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 );
2703  hexify( dst_str, output, pt_len );
2704  hexify( tag_str, tag_output, tag_len );
2705 
2706  fct_chk( strcmp( (char *) dst_str, "f8a06eea528dad12b11ead51763aa68ca062f9f6c1c1f740fb910974f7ad9d2ac87c16fb74d07c3bd3b45f2e26af417e00416bdfee7ed0b69274ead70a52201c1fc05937438855f5564ec3e824daa0c59da1aa6f6cb8a44ab5f73d661b219766b80656cd3ff1e2d6909c6ce91fb14931af8580e859e9d7642678c1c35d9435d4" ) == 0 );
2707  fct_chk( strcmp( (char *) tag_str, "05b432826dd9b044" ) == 0 );
2708  }
2709  }
2710  FCT_TEST_END();
2711 
2712 
2713  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024064_2)
2714  {
2715  unsigned char key_str[128];
2716  unsigned char src_str[128];
2717  unsigned char dst_str[257];
2718  unsigned char iv_str[128];
2719  unsigned char add_str[128];
2720  unsigned char tag_str[128];
2721  unsigned char output[128];
2722  unsigned char tag_output[16];
2723  gcm_context ctx;
2724  unsigned int key_len;
2725  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
2726 
2727  memset(key_str, 0x00, 128);
2728  memset(src_str, 0x00, 128);
2729  memset(dst_str, 0x00, 257);
2730  memset(iv_str, 0x00, 128);
2731  memset(add_str, 0x00, 128);
2732  memset(tag_str, 0x00, 128);
2733  memset(output, 0x00, 128);
2734  memset(tag_output, 0x00, 16);
2735 
2736  key_len = unhexify( key_str, "8954e2c0a7ea80fe3c8e75246f75bdbd" );
2737  pt_len = unhexify( src_str, "d77e11a837eff95c77dd56e9cd97f0ffcee0adcca4a2203d23ce74c804a75cef1bdd69b16228472a2395118dfce636b8916372d6a24106f9a168055c6d4b44264674ce3905b3b30f5108ebf939f3fa8f55c12e001b457b73669acd23c1dcabea05aaba34e2d0f66a4d1c9162764228ebc4d3974fdb38b1a61a207788c5deb878" );
2738  iv_len = unhexify( iv_str, "2b5f9420b3c583403d92d76a2dd681c3" );
2739  add_len = unhexify( add_str, "" );
2740 
2741  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2742  if( 0 == 0 )
2743  {
2744  fct_chk( 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 );
2745  hexify( dst_str, output, pt_len );
2746  hexify( tag_str, tag_output, tag_len );
2747 
2748  fct_chk( strcmp( (char *) dst_str, "35b8a04d6557426def9915eb798312a7572e040a65990ce15a8a6e5acd6b419c3fa26828b6efd2f1f50f91f672fed0feaa09a6ca6b4844fac5d3db571db8bbce250086b8c89aa6fa07bdca8dd0e1fe76e0f5a821145bafa11f3a9b0b003ad09de73ad71849ac58f7fd50851aa0fbbed17d222a0a5607f9f75dd3b0d3fa45a135" ) == 0 );
2749  fct_chk( strcmp( (char *) tag_str, "96511adc097838e6" ) == 0 );
2750  }
2751  }
2752  FCT_TEST_END();
2753 
2754 
2755  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024032_0)
2756  {
2757  unsigned char key_str[128];
2758  unsigned char src_str[128];
2759  unsigned char dst_str[257];
2760  unsigned char iv_str[128];
2761  unsigned char add_str[128];
2762  unsigned char tag_str[128];
2763  unsigned char output[128];
2764  unsigned char tag_output[16];
2765  gcm_context ctx;
2766  unsigned int key_len;
2767  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
2768 
2769  memset(key_str, 0x00, 128);
2770  memset(src_str, 0x00, 128);
2771  memset(dst_str, 0x00, 257);
2772  memset(iv_str, 0x00, 128);
2773  memset(add_str, 0x00, 128);
2774  memset(tag_str, 0x00, 128);
2775  memset(output, 0x00, 128);
2776  memset(tag_output, 0x00, 16);
2777 
2778  key_len = unhexify( key_str, "7d0f9109dd846c47527a429b98d53301" );
2779  pt_len = unhexify( src_str, "506efc29c0f02910cc9f5b2e677bb811e366b9e4910c00b36e48e5d5b42718f3b6d1a08a2de9c6d4ce44fce00fb7e10cf89396a88bdb38dcb0dba69449195e19b72ff989666b366f03166dd47cf4c7bf72dba3048fa34329ba86bbbf32934a0992d72c463fffee94653379d23b8bb4dff03fd86cfc971a2f7cdb90589bbbcb28" );
2780  iv_len = unhexify( iv_str, "f58a5bb77f4488ee60dd85ca66fad59a" );
2781  add_len = unhexify( add_str, "" );
2782 
2783  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2784  if( 0 == 0 )
2785  {
2786  fct_chk( 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 );
2787  hexify( dst_str, output, pt_len );
2788  hexify( tag_str, tag_output, tag_len );
2789 
2790  fct_chk( strcmp( (char *) dst_str, "2e2760c649f17c1b4ba92b1fc9b78d149a9fc831f0d0fe4125cbfc70d52047f32a7f25c716533d199af77ed05e259cc31d551187dbc2e7d9e853d5f65ab8a48840f22391072cbe29e8529cd11740f27d11513c68ad41f4acc6fb363428930fe3d7c0e698387594156e6cc789d432817c788480f3b31326fa5f034e51d2af8c44" ) == 0 );
2791  fct_chk( strcmp( (char *) tag_str, "6ced7aac" ) == 0 );
2792  }
2793  }
2794  FCT_TEST_END();
2795 
2796 
2797  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024032_1)
2798  {
2799  unsigned char key_str[128];
2800  unsigned char src_str[128];
2801  unsigned char dst_str[257];
2802  unsigned char iv_str[128];
2803  unsigned char add_str[128];
2804  unsigned char tag_str[128];
2805  unsigned char output[128];
2806  unsigned char tag_output[16];
2807  gcm_context ctx;
2808  unsigned int key_len;
2809  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
2810 
2811  memset(key_str, 0x00, 128);
2812  memset(src_str, 0x00, 128);
2813  memset(dst_str, 0x00, 257);
2814  memset(iv_str, 0x00, 128);
2815  memset(add_str, 0x00, 128);
2816  memset(tag_str, 0x00, 128);
2817  memset(output, 0x00, 128);
2818  memset(tag_output, 0x00, 16);
2819 
2820  key_len = unhexify( key_str, "034c805b5e83b59ad9d6a65ade3940a9" );
2821  pt_len = unhexify( src_str, "efbec09f8189404f3dbe569d3bab9b8bfabde419fc80abb3b21a07a5fe42326d23d022406981abd558e94f4debf38f2c34c3c315cb1ae1d5f2d48eae1335b50af9dd05b60aee724edb7d4e12703d5ec8873c55e3a3d6d8d5e4daddd5240fa3ec2d1f32442ce32cde66dfac77ed213207dc4838ca9782beb9a98d6dc52838831b" );
2822  iv_len = unhexify( iv_str, "b0c19448b9f2a818fd21ba6489c34fb0" );
2823  add_len = unhexify( add_str, "" );
2824 
2825  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2826  if( 0 == 0 )
2827  {
2828  fct_chk( 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 );
2829  hexify( dst_str, output, pt_len );
2830  hexify( tag_str, tag_output, tag_len );
2831 
2832  fct_chk( strcmp( (char *) dst_str, "a45ba5836011fc65882ba8b1d6bf7b08b17f26b9cd971eece86fbb6aac5cdfd42790a7c7390099b10dee98cb8e4bd8b3ccb3ca5d0b9d02f759431de640ad7f5dffb919a8aaa74695f94df8eff4c7cb242d643c55d6f9c8323006f3be595aa8cdbfb0d9260ad2473b244ca65a5df53d2edd69f47df608e22a68b05623150b5665" ) == 0 );
2833  fct_chk( strcmp( (char *) tag_str, "43e20e94" ) == 0 );
2834  }
2835  }
2836  FCT_TEST_END();
2837 
2838 
2839  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024032_2)
2840  {
2841  unsigned char key_str[128];
2842  unsigned char src_str[128];
2843  unsigned char dst_str[257];
2844  unsigned char iv_str[128];
2845  unsigned char add_str[128];
2846  unsigned char tag_str[128];
2847  unsigned char output[128];
2848  unsigned char tag_output[16];
2849  gcm_context ctx;
2850  unsigned int key_len;
2851  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
2852 
2853  memset(key_str, 0x00, 128);
2854  memset(src_str, 0x00, 128);
2855  memset(dst_str, 0x00, 257);
2856  memset(iv_str, 0x00, 128);
2857  memset(add_str, 0x00, 128);
2858  memset(tag_str, 0x00, 128);
2859  memset(output, 0x00, 128);
2860  memset(tag_output, 0x00, 16);
2861 
2862  key_len = unhexify( key_str, "f3bad89e79691ae72f53964b928a09f3" );
2863  pt_len = unhexify( src_str, "01913e4ef10226d80c5026ba9243fa41edaf5f5c232d17c034db4c0c8369f48d89a1d58b3b2dda496506c30457365bdd76710173a97022d647276a4a8ac73f0e9e211cfd7d64849409ef61cce618675eaffe88b3f14496e5eb013c0f8a122dbf16f2c675edf7f813abe9c56101e570e208e651fd956e710dc09f13ebd22b81ab" );
2864  iv_len = unhexify( iv_str, "aabf77116a75046e7ecc51a468aa21fe" );
2865  add_len = unhexify( add_str, "" );
2866 
2867  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2868  if( 0 == 0 )
2869  {
2870  fct_chk( 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 );
2871  hexify( dst_str, output, pt_len );
2872  hexify( tag_str, tag_output, tag_len );
2873 
2874  fct_chk( strcmp( (char *) dst_str, "f7453670604ff6287ebdaa35705cf7553410452fdb1129a7fcae92565a4217b0d2927da21f3d1b2bd5ae9b7d4dcc1698fb97fc8b6622ddc04299fdebaba7f7090917776b86b2af4031fe04fa1b62987fa9ec78fbbc2badc3a31449be3a858ac7f277d331b77c0e9b12240bd98488a131dbd275b6a0ce9830ff7301d51921ba85" ) == 0 );
2875  fct_chk( strcmp( (char *) tag_str, "15852690" ) == 0 );
2876  }
2877  }
2878  FCT_TEST_END();
2879 
2880 
2881  FCT_TEST_BGN(gcm_nist_validation_aes_12812810241024128_0)
2882  {
2883  unsigned char key_str[128];
2884  unsigned char src_str[128];
2885  unsigned char dst_str[257];
2886  unsigned char iv_str[128];
2887  unsigned char add_str[128];
2888  unsigned char tag_str[128];
2889  unsigned char output[128];
2890  unsigned char tag_output[16];
2891  gcm_context ctx;
2892  unsigned int key_len;
2893  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
2894 
2895  memset(key_str, 0x00, 128);
2896  memset(src_str, 0x00, 128);
2897  memset(dst_str, 0x00, 257);
2898  memset(iv_str, 0x00, 128);
2899  memset(add_str, 0x00, 128);
2900  memset(tag_str, 0x00, 128);
2901  memset(output, 0x00, 128);
2902  memset(tag_output, 0x00, 16);
2903 
2904  key_len = unhexify( key_str, "839664bb6c352e64714254e4d590fb28" );
2905  pt_len = unhexify( src_str, "752c7e877663d10f90e5c96cce2686f4aa846a12272a0aba399e860f2838827c7c718365e704084fbe1e68adb27ad18e993c800da2e05bcaf44b651944bde766e7b3ac22f068b525dd0b80b490b3498d7b7199f60faf69fee338087f7a752fb52147034de8922a3ed73b512d9c741f7bac1206e9b0871a970271f50688038ab7" );
2906  iv_len = unhexify( iv_str, "5482db71d85039076a541aaba287e7f7" );
2907  add_len = unhexify( add_str, "4d75a10ff29414c74d945da046ed45dc02783da28c1ee58b59cbc6f953dd09788b6d513f7366be523e6c2d877c36795942690ce9543050f7ab6f6f647d262360994f7f892e9f59941a8d440619fda8aa20350be14c13d7924c0451c1489da9a0cafd759c3798776245170ad88dbceb3cacde6ba122b656601ccb726e99d54115" );
2908 
2909  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2910  if( 0 == 0 )
2911  {
2912  fct_chk( 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 );
2913  hexify( dst_str, output, pt_len );
2914  hexify( tag_str, tag_output, tag_len );
2915 
2916  fct_chk( strcmp( (char *) dst_str, "c7ee1c32f8bc0181b53ce57f116e863481db6f21666ba3fa19bd99ce83eee2d573388a0459dfede92e701982a9cc93d697f313062dbea9866526f1d720a128ab97452a35f458637116f7d9294ffc76079539061dfeff9642a049db53d89f2480a6d74a05ff25d46d7048cc16d43f7888b5aff9957b5dc828973afccff63bd42a" ) == 0 );
2917  fct_chk( strcmp( (char *) tag_str, "63c8aa731a60076725cd5f9973eeadb5" ) == 0 );
2918  }
2919  }
2920  FCT_TEST_END();
2921 
2922 
2923  FCT_TEST_BGN(gcm_nist_validation_aes_12812810241024128_1)
2924  {
2925  unsigned char key_str[128];
2926  unsigned char src_str[128];
2927  unsigned char dst_str[257];
2928  unsigned char iv_str[128];
2929  unsigned char add_str[128];
2930  unsigned char tag_str[128];
2931  unsigned char output[128];
2932  unsigned char tag_output[16];
2933  gcm_context ctx;
2934  unsigned int key_len;
2935  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
2936 
2937  memset(key_str, 0x00, 128);
2938  memset(src_str, 0x00, 128);
2939  memset(dst_str, 0x00, 257);
2940  memset(iv_str, 0x00, 128);
2941  memset(add_str, 0x00, 128);
2942  memset(tag_str, 0x00, 128);
2943  memset(output, 0x00, 128);
2944  memset(tag_output, 0x00, 16);
2945 
2946  key_len = unhexify( key_str, "5f2af1b14ca9598c341785189ac6e085" );
2947  pt_len = unhexify( src_str, "790bc975865f44e3a1534e978e90b064530321a2280a9172dc7f3451773b01d4a56c1857ad0474350b945e4f34cd677c22ca89445a564b47a8526d31d18160c35d2be1e89428c3593b53877cea0d88d85b2a7ed0552e39a0e96e35ae0384a5d7868243045dcbfc245a3eb3ff99f4dd86c0a314f68d1971e773caf9c168b0aa0b" );
2948  iv_len = unhexify( iv_str, "bbf23307ad2718398b2791c16f69cc45" );
2949  add_len = unhexify( add_str, "26b160695de2ba40afca6bd93f1c2895f92ca9108847a8ab71ad35cac9f9c9f537ef196c5d41b10e3777c9a02ad3c73cd299a85f60e5d02794c3be2643c3e63f105b94d32cb4e3eb131d3f487fa5d1de1a4ad80cad742704ed5c19a7cf4e55531fa0f4e40a4e3808fb4875b4b5feaf576c46a03013625f04331806149e0f6057" );
2950 
2951  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2952  if( 0 == 0 )
2953  {
2954  fct_chk( 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 );
2955  hexify( dst_str, output, pt_len );
2956  hexify( tag_str, tag_output, tag_len );
2957 
2958  fct_chk( strcmp( (char *) dst_str, "52c373a15e1bf86edfb4242049f186029b458e156da500ce7a8fc7a5fd8a526191ac33e6b4b79b36fda160570e2b67d0402a09b03f46c9b17317a04a4b9fbe2ddcfc128bd0e01b0be3fe23e51b69c28bcf8725b8e4208aefb1cf34fe91a2bb6d5bef7b936bec624a8f38c9cd4ac51a0187635138d55da1fb1791adfbf8459d3f" ) == 0 );
2959  fct_chk( strcmp( (char *) tag_str, "db3bbdf556c9c1be9b750a208fe55c37" ) == 0 );
2960  }
2961  }
2962  FCT_TEST_END();
2963 
2964 
2965  FCT_TEST_BGN(gcm_nist_validation_aes_12812810241024128_2)
2966  {
2967  unsigned char key_str[128];
2968  unsigned char src_str[128];
2969  unsigned char dst_str[257];
2970  unsigned char iv_str[128];
2971  unsigned char add_str[128];
2972  unsigned char tag_str[128];
2973  unsigned char output[128];
2974  unsigned char tag_output[16];
2975  gcm_context ctx;
2976  unsigned int key_len;
2977  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
2978 
2979  memset(key_str, 0x00, 128);
2980  memset(src_str, 0x00, 128);
2981  memset(dst_str, 0x00, 257);
2982  memset(iv_str, 0x00, 128);
2983  memset(add_str, 0x00, 128);
2984  memset(tag_str, 0x00, 128);
2985  memset(output, 0x00, 128);
2986  memset(tag_output, 0x00, 16);
2987 
2988  key_len = unhexify( key_str, "02980dff205bfa5b18037486618e1fbd" );
2989  pt_len = unhexify( src_str, "f037ae281e45c50c9fa875f0ec9eb43251d3ae1b6acde27cb5edda7a4e384f50301a68bb6f4caf426adb31457c5eeaa789edc84fd902cb82e00dccbebe272d90cf690ca82ee748885f02daf377970e985d55994fa668fc5e3e06763e6829059fe0c3eb67033b3f5223cd4bb654484c57370d2b856d7117e32ead3d179064315b" );
2990  iv_len = unhexify( iv_str, "27354e68a004b255a380d8480dc9b19e" );
2991  add_len = unhexify( add_str, "37eed8620136842938ee3c3c08311d1298d3fd3f0456c056e0851a75d844fe6c61aeb2191c024ffce38686c09ab456f0ec26bd76f935d747002af9b47648502713301d5632c2e0d599b95d5543ac1206170ee6c7b365729c4d04ea042f04363857f9b8ea34e54df89e98fef0df3e67eaf241ed7ebbc7d02931934c14bb7a71ad" );
2992 
2993  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2994  if( 0 == 0 )
2995  {
2996  fct_chk( 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 );
2997  hexify( dst_str, output, pt_len );
2998  hexify( tag_str, tag_output, tag_len );
2999 
3000  fct_chk( strcmp( (char *) dst_str, "f8090d0a96fc99acb8f82bbbe58343fe227d3f43fceece5492036b51ac2fa6db4bf8c98bf28b40132b1ab46517d488b147e12ceb5e6b269bb476a648d8a1133d5e97d4f4fbdfa3866a04948851cfb664f3432de223f3333248a1affa671096708ce6e2c9b4f8e79d44c504ff3cd74e8dffd4ddff490bcba3abffbade0a4e209d" ) == 0 );
3001  fct_chk( strcmp( (char *) tag_str, "b5762b41241cbee4557f4be6d14d55d4" ) == 0 );
3002  }
3003  }
3004  FCT_TEST_END();
3005 
3006 
3007  FCT_TEST_BGN(gcm_nist_validation_aes_12812810241024120_0)
3008  {
3009  unsigned char key_str[128];
3010  unsigned char src_str[128];
3011  unsigned char dst_str[257];
3012  unsigned char iv_str[128];
3013  unsigned char add_str[128];
3014  unsigned char tag_str[128];
3015  unsigned char output[128];
3016  unsigned char tag_output[16];
3017  gcm_context ctx;
3018  unsigned int key_len;
3019  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
3020 
3021  memset(key_str, 0x00, 128);
3022  memset(src_str, 0x00, 128);
3023  memset(dst_str, 0x00, 257);
3024  memset(iv_str, 0x00, 128);
3025  memset(add_str, 0x00, 128);
3026  memset(tag_str, 0x00, 128);
3027  memset(output, 0x00, 128);
3028  memset(tag_output, 0x00, 16);
3029 
3030  key_len = unhexify( key_str, "1fc9bcc5aee350f1ef160346b642cc20" );
3031  pt_len = unhexify( src_str, "e0fb08cf7dc901bf698385a38e1a81acd4118f083e52aa52e1ded16ab1e840cc49fa1ead3292ce21096cc75c89dc3701102b0982fd3a6bfa55a7799e579aa7336edf365574a904bad924ec080b093a604994db4dcd8323d7d39c3c35750b0741b170481539d22551871d6a0e2ea17e4bebe8ce19ec3bc3bf4f6edae9cd7ab123" );
3032  iv_len = unhexify( iv_str, "910a81a5211ce0f542f1183c08ba96a7" );
3033  add_len = unhexify( add_str, "2dcf7492c4539d6abc3d259ba5970033ebc2e7ddfa1af8be11f81b459d7477f310be2171290bec2f2ae2cc51266f46e98c878dd2444afefdbdb73a417518f5fd4c116547bf442fa9a8cb2300c5ff563117b2641dcd65018081e62a7ce5c4d822563824e5eafea90cbceee788ed44e6c4f23fe8926603a15adfdb556f11a0be9a" );
3034 
3035  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3036  if( 0 == 0 )
3037  {
3038  fct_chk( 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 );
3039  hexify( dst_str, output, pt_len );
3040  hexify( tag_str, tag_output, tag_len );
3041 
3042  fct_chk( strcmp( (char *) dst_str, "514d27f8413d7ed59d96c14e7e74b9f3d4518486876c469b369f8c5734145f4aa52506c8f832d4811e5f981caadedcf09875033c5b28a00f35605d773c7f9e1af7f0c795e3df1fa9b5a524f1f753836c1e2dc9edf1602d37ac120f3d8a5c093a5285dbe93957643a65f22995a2782bb455d23318f01bd18ae0d0813b01d233e5" ) == 0 );
3043  fct_chk( strcmp( (char *) tag_str, "feb7a25a68b5f68000cf6245056a1f" ) == 0 );
3044  }
3045  }
3046  FCT_TEST_END();
3047 
3048 
3049  FCT_TEST_BGN(gcm_nist_validation_aes_12812810241024120_1)
3050  {
3051  unsigned char key_str[128];
3052  unsigned char src_str[128];
3053  unsigned char dst_str[257];
3054  unsigned char iv_str[128];
3055  unsigned char add_str[128];
3056  unsigned char tag_str[128];
3057  unsigned char output[128];
3058  unsigned char tag_output[16];
3059  gcm_context ctx;
3060  unsigned int key_len;
3061  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
3062 
3063  memset(key_str, 0x00, 128);
3064  memset(src_str, 0x00, 128);
3065  memset(dst_str, 0x00, 257);
3066  memset(iv_str, 0x00, 128);
3067  memset(add_str, 0x00, 128);
3068  memset(tag_str, 0x00, 128);
3069  memset(output, 0x00, 128);
3070  memset(tag_output, 0x00, 16);
3071 
3072  key_len = unhexify( key_str, "9cf329dc10bcebb484424c77eb785aa2" );
3073  pt_len = unhexify( src_str, "92728a696b07704fb1deb648c5036a1c8602b4006fb2fd2d401c4b6692e252c7f66918078542cc0b1a97486964276d6e6c77bbb88a9fff0285aef70783d9f2be3b7b22f8a8c02771492150122fe022722bf64263f5d2406884108d8d608273bc02a9127fe4dbcb321ac44a7d2090cff7017d59d73ecf927b8b05968675a63ca0" );
3074  iv_len = unhexify( iv_str, "a430b979168f5df5ba21962d1bd6dd15" );
3075  add_len = unhexify( add_str, "4d94b7650297c66b43210c84e6e7b09385117ed8fb91adf643b2339f39a5d8dd0b0d75a793e2a669e42c5ddb0873714e01cb65da9eb73fd976a49ae9a4762bcbc06be5052f750d110a407764280b510da5fd0fdce969f86ea6bf52ad4fd9e2d81ec5cb84af0a1d406504a34c51c751daebb4421fe1994bf6db642e64bd471d9a" );
3076 
3077  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3078  if( 0 == 0 )
3079  {
3080  fct_chk( 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 );
3081  hexify( dst_str, output, pt_len );
3082  hexify( tag_str, tag_output, tag_len );
3083 
3084  fct_chk( strcmp( (char *) dst_str, "c13dbfc60b34d75f8a84db1f6aa946dbfc19479d63900450389756cd1ada8f6d2d0776607f7053db6bfa6752c4b8456f0ace314ff3fd4890d6093a4a5d47dd8fbf902e3e3000f5e02ba93a00985f29ad651cb697cc061d8f3cc74e6d8d0743a1988947c9dc2305e2b7c5a78b29400d736acc238131700af38e72d8c98ba007eb" ) == 0 );
3085  fct_chk( strcmp( (char *) tag_str, "82f1dd58425eb9821fcf67a6b35206" ) == 0 );
3086  }
3087  }
3088  FCT_TEST_END();
3089 
3090 
3091  FCT_TEST_BGN(gcm_nist_validation_aes_12812810241024120_2)
3092  {
3093  unsigned char key_str[128];
3094  unsigned char src_str[128];
3095  unsigned char dst_str[257];
3096  unsigned char iv_str[128];
3097  unsigned char add_str[128];
3098  unsigned char tag_str[128];
3099  unsigned char output[128];
3100  unsigned char tag_output[16];
3101  gcm_context ctx;
3102  unsigned int key_len;
3103  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
3104 
3105  memset(key_str, 0x00, 128);
3106  memset(src_str, 0x00, 128);
3107  memset(dst_str, 0x00, 257);
3108  memset(iv_str, 0x00, 128);
3109  memset(add_str, 0x00, 128);
3110  memset(tag_str, 0x00, 128);
3111  memset(output, 0x00, 128);
3112  memset(tag_output, 0x00, 16);
3113 
3114  key_len = unhexify( key_str, "cf43ff6a1ef35c37862ae3b87171a173" );
3115  pt_len = unhexify( src_str, "a1e670b3fd62039cf29edb61b26555bcd0f9184be4593bf6b20ceab263bdc76cdef34992fe0ce4d43bd93bd979b78bb252c120fbaafe4947fc0ec05cce4358a5089a841c7476b0ebfca6476e690cb9ee0b73c6700aa82aa8f4050f2c98500052a2d3274b30b0be67549d756efd163c4369b6df0236d608bfbecd784467db2488" );
3116  iv_len = unhexify( iv_str, "6c56540b3a9595f3c43f5595ace926bc" );
3117  add_len = unhexify( add_str, "5c0bc6e44362299642f3756acf09878bb05549eb6cd6c4942d39fe586ceac228d2aa9c92f8393e5017e73ee41002e60aa8b993c48a7638ce2ae0ae0eaa536bd749b07a8672fc620a5110af61232b6a3d527b36c86637cc1fa92c84008465fd861920884d8a784e194ec52fcbb767a68ca6fabb64ab0a0d680963140d5cfd9421" );
3118 
3119  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3120  if( 0 == 0 )
3121  {
3122  fct_chk( 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 );
3123  hexify( dst_str, output, pt_len );
3124  hexify( tag_str, tag_output, tag_len );
3125 
3126  fct_chk( strcmp( (char *) dst_str, "8ad36522e4ad47d4a54c5eae0a8b9ff4911aa5b9b13b88b00488a7b678f63cf85945b8d4998d1007e27529b56f50b9e3b373bb6fd861a990514743b9707d535b40d1bdbc3f58a63b8ca30dd7934ee98ec3325d80afaa37e38b4e82d8851166589027d91347727b314e02ed08a7846e29fcd0c764834d12429d9f568b312081f3" ) == 0 );
3127  fct_chk( strcmp( (char *) tag_str, "f5bf21d5eadeebdef3104d39362b85" ) == 0 );
3128  }
3129  }
3130  FCT_TEST_END();
3131 
3132 
3133  FCT_TEST_BGN(gcm_nist_validation_aes_12812810241024112_0)
3134  {
3135  unsigned char key_str[128];
3136  unsigned char src_str[128];
3137  unsigned char dst_str[257];
3138  unsigned char iv_str[128];
3139  unsigned char add_str[128];
3140  unsigned char tag_str[128];
3141  unsigned char output[128];
3142  unsigned char tag_output[16];
3143  gcm_context ctx;
3144  unsigned int key_len;
3145  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
3146 
3147  memset(key_str, 0x00, 128);
3148  memset(src_str, 0x00, 128);
3149  memset(dst_str, 0x00, 257);
3150  memset(iv_str, 0x00, 128);
3151  memset(add_str, 0x00, 128);
3152  memset(tag_str, 0x00, 128);
3153  memset(output, 0x00, 128);
3154  memset(tag_output, 0x00, 16);
3155 
3156  key_len = unhexify( key_str, "a0ec7b0052541d9e9c091fb7fc481409" );
3157  pt_len = unhexify( src_str, "5431d93278c35cfcd7ffa9ce2de5c6b922edffd5055a9eaa5b54cae088db007cf2d28efaf9edd1569341889073e87c0a88462d77016744be62132fd14a243ed6e30e12cd2f7d08a8daeec161691f3b27d4996df8745d74402ee208e4055615a8cb069d495cf5146226490ac615d7b17ab39fb4fdd098e4e7ee294d34c1312826" );
3158  iv_len = unhexify( iv_str, "00e440846db73a490573deaf3728c94f" );
3159  add_len = unhexify( add_str, "a3cfcb832e935eb5bc3812583b3a1b2e82920c07fda3668a35d939d8f11379bb606d39e6416b2ef336fffb15aec3f47a71e191f4ff6c56ff15913562619765b26ae094713d60bab6ab82bfc36edaaf8c7ce2cf5906554dcc5933acdb9cb42c1d24718efdc4a09256020b024b224cfe602772bd688c6c8f1041a46f7ec7d51208" );
3160 
3161  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3162  if( 0 == 0 )
3163  {
3164  fct_chk( 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 );
3165  hexify( dst_str, output, pt_len );
3166  hexify( tag_str, tag_output, tag_len );
3167 
3168  fct_chk( strcmp( (char *) dst_str, "3b6de52f6e582d317f904ee768895bd4d0790912efcf27b58651d0eb7eb0b2f07222c6ffe9f7e127d98ccb132025b098a67dc0ec0083235e9f83af1ae1297df4319547cbcb745cebed36abc1f32a059a05ede6c00e0da097521ead901ad6a73be20018bda4c323faa135169e21581e5106ac20853642e9d6b17f1dd925c87281" ) == 0 );
3169  fct_chk( strcmp( (char *) tag_str, "4365847fe0b7b7fbed325953df34" ) == 0 );
3170  }
3171  }
3172  FCT_TEST_END();
3173 
3174 
3175  FCT_TEST_BGN(gcm_nist_validation_aes_12812810241024112_1)
3176  {
3177  unsigned char key_str[128];
3178  unsigned char src_str[128];
3179  unsigned char dst_str[257];
3180  unsigned char iv_str[128];
3181  unsigned char add_str[128];
3182  unsigned char tag_str[128];
3183  unsigned char output[128];
3184  unsigned char tag_output[16];
3185  gcm_context ctx;
3186  unsigned int key_len;
3187  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
3188 
3189  memset(key_str, 0x00, 128);
3190  memset(src_str, 0x00, 128);
3191  memset(dst_str, 0x00, 257);
3192  memset(iv_str, 0x00, 128);
3193  memset(add_str, 0x00, 128);
3194  memset(tag_str, 0x00, 128);
3195  memset(output, 0x00, 128);
3196  memset(tag_output, 0x00, 16);
3197 
3198  key_len = unhexify( key_str, "f9ba053776afb01d15915e7f82a04f21" );
3199  pt_len = unhexify( src_str, "fb59858421ffbf43d09415a77320cc9250df861e4414817e7b78cab918fa890ea0400d4237f7ebf522d97318ea79f9979a73970296827a1a9690a039e6c605a0a3efc0077156e1b15f14d88685833e09f6cd6f783d0f50579de7a30907b9d8efc4c650ec57dbf7b425ffaf9a900ec91087d470409da4d67cae7328c15a5db1fb" );
3200  iv_len = unhexify( iv_str, "df26b109244f5a808f3ea7137f2f49fa" );
3201  add_len = unhexify( add_str, "b21c8101ac96c41bad2925b9b6c863f54888f36e4995820ebd51f53e323e46f528d91f4318183be0282312ccde8da075fc2e82041cb41a79e9933012a4cb6e9f89717444bc734da3b7e40e903e58dd0f38bcb115684227ec533c09a93c89c2c2584bbac83a4648f82b4c9207f43b61e5ec470602076ed4731756c87d4e0e24af" );
3202 
3203  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3204  if( 0 == 0 )
3205  {
3206  fct_chk( 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 );
3207  hexify( dst_str, output, pt_len );
3208  hexify( tag_str, tag_output, tag_len );
3209 
3210  fct_chk( strcmp( (char *) dst_str, "2c306fc60bff58308f2b9f08d52369e87119d7f6de2279fcdea0c46c901c8dc5b4f83578b17a00786014a17d3e380e1af4b9f32fa58b9ac763bdf86ff0c6084afe413a5dcb7617f94d76e59e370eae4829e69bcb70f10545b04ed5fd137e1159f3961b2c01089ebbe2f16a91c782d4f383fbd4d61b66138319b63d79ce9fdec3" ) == 0 );
3211  fct_chk( strcmp( (char *) tag_str, "d6db5aa539a6e2e70885508d637d" ) == 0 );
3212  }
3213  }
3214  FCT_TEST_END();
3215 
3216 
3217  FCT_TEST_BGN(gcm_nist_validation_aes_12812810241024112_2)
3218  {
3219  unsigned char key_str[128];
3220  unsigned char src_str[128];
3221  unsigned char dst_str[257];
3222  unsigned char iv_str[128];
3223  unsigned char add_str[128];
3224  unsigned char tag_str[128];
3225  unsigned char output[128];
3226  unsigned char tag_output[16];
3227  gcm_context ctx;
3228  unsigned int key_len;
3229  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
3230 
3231  memset(key_str, 0x00, 128);
3232  memset(src_str, 0x00, 128);
3233  memset(dst_str, 0x00, 257);
3234  memset(iv_str, 0x00, 128);
3235  memset(add_str, 0x00, 128);
3236  memset(tag_str, 0x00, 128);
3237  memset(output, 0x00, 128);
3238  memset(tag_output, 0x00, 16);
3239 
3240  key_len = unhexify( key_str, "fbbc406a669b94374c7970f2ac10c91c" );
3241  pt_len = unhexify( src_str, "a9f334d1ae7d2960f39da4f1df85830d27c0f13fa0bd23d607ace4cf58b359584120e7c90d3062b1b23b1a9e85a740c9063ff80423b5846257e4426c174e8cd77a3dbcfe12970ebddaaa00a8ffb554b2a80decc81f9917f5a1369e8bf7288ed868457993f480d8aff0b92b3db2fda233e32fabec1a4514715364d4f70f98d62c" );
3242  iv_len = unhexify( iv_str, "46152f5a68c03dbe2f28e69f5b52e2fc" );
3243  add_len = unhexify( add_str, "1052f8b2d3e11da53ba9efe02ce985098d171dff9b98cbc2f6755fd88214ddb8660225a63a1c8bcaf43ff3930e239824ae8e122068b89d7fe73c658ce030cb51dae9836aafb68fad77b1cb5bff8d7d9c920ec449181e10ea643cc73abb9620dbdfa32e06c29cfbd8c7cb8b1103763616ae6f9b19c4a6e1eed88c3971c4778c2b" );
3244 
3245  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3246  if( 0 == 0 )
3247  {
3248  fct_chk( 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 );
3249  hexify( dst_str, output, pt_len );
3250  hexify( tag_str, tag_output, tag_len );
3251 
3252  fct_chk( strcmp( (char *) dst_str, "7b16424c508da3fed14bb53462d1805f0f9d09f803d4e166fdadbac76f9fc566665554317431642f6e527123ea6c1c0ddcf45005213b0f2747321fa112d7b893cdcf4c1a59e8bd1c48b7d77881c6d79de3d850bce449969305797196d187196d0d81dc3423295f552d3c27d6d70e42c9a1a744a039181e733450c9985c94ae94" ) == 0 );
3253  fct_chk( strcmp( (char *) tag_str, "b51dca8e00988af0987860a663ad" ) == 0 );
3254  }
3255  }
3256  FCT_TEST_END();
3257 
3258 
3259  FCT_TEST_BGN(gcm_nist_validation_aes_12812810241024104_0)
3260  {
3261  unsigned char key_str[128];
3262  unsigned char src_str[128];
3263  unsigned char dst_str[257];
3264  unsigned char iv_str[128];
3265  unsigned char add_str[128];
3266  unsigned char tag_str[128];
3267  unsigned char output[128];
3268  unsigned char tag_output[16];
3269  gcm_context ctx;
3270  unsigned int key_len;
3271  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
3272 
3273  memset(key_str, 0x00, 128);
3274  memset(src_str, 0x00, 128);
3275  memset(dst_str, 0x00, 257);
3276  memset(iv_str, 0x00, 128);
3277  memset(add_str, 0x00, 128);
3278  memset(tag_str, 0x00, 128);
3279  memset(output, 0x00, 128);
3280  memset(tag_output, 0x00, 16);
3281 
3282  key_len = unhexify( key_str, "fe96eab10ff48c7942025422583d0377" );
3283  pt_len = unhexify( src_str, "194c8bbbfae4a671386b8cd38f390f46f9df6b8661b470c310921a1c858a938045834bb10380037fbf5f5e00688554537be0fcafe8270b9b59068fa056ab1268fc166c2d729243a06650a171c929c7845c85330c04568d62977eedf3b1ba9dca13bdb8f9522817c8cb99e635e37465ec1c9f6f148d51437aa9f994a62e1bd013" );
3284  iv_len = unhexify( iv_str, "97ce3f848276783599c6875de324361e" );
3285  add_len = unhexify( add_str, "127628b6dcbce6fc8a8ef60798eb67b2088415635119697d20bb878c24d9c6f9c29e148521cb5e0feff892c7855d4f1c0bfb32ad33420976714dce87a0bbc18e4378bd1ef35197d0ca73051148f1199010f63caf122df5f71ad8d9c71df3eb2fbe3b2529d0ba657570358d3776f687bdb9c96d5e0e9e00c4b42d5d7a268d6a08" );
3286 
3287  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3288  if( 0 == 0 )
3289  {
3290  fct_chk( 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 );
3291  hexify( dst_str, output, pt_len );
3292  hexify( tag_str, tag_output, tag_len );
3293 
3294  fct_chk( strcmp( (char *) dst_str, "12495120056ca3cac70d583603a476821bac6c57c9733b81cfb83538dc9e850f8bdf46065069591c23ebcbc6d1e2523375fb7efc80c09507fa25477ed07cee54fc4eb90168b3ef988f651fc40652474a644b1b311decf899660aef2347bb081af48950f06ebf799911e37120de94c55c20e5f0a77119be06e2b6e557f872fa0f" ) == 0 );
3295  fct_chk( strcmp( (char *) tag_str, "6bac793bdc2190a195122c9854" ) == 0 );
3296  }
3297  }
3298  FCT_TEST_END();
3299 
3300 
3301  FCT_TEST_BGN(gcm_nist_validation_aes_12812810241024104_1)
3302  {
3303  unsigned char key_str[128];
3304  unsigned char src_str[128];
3305  unsigned char dst_str[257];
3306  unsigned char iv_str[128];
3307  unsigned char add_str[128];
3308  unsigned char tag_str[128];
3309  unsigned char output[128];
3310  unsigned char tag_output[16];
3311  gcm_context ctx;
3312  unsigned int key_len;
3313  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
3314 
3315  memset(key_str, 0x00, 128);
3316  memset(src_str, 0x00, 128);
3317  memset(dst_str, 0x00, 257);
3318  memset(iv_str, 0x00, 128);
3319  memset(add_str, 0x00, 128);
3320  memset(tag_str, 0x00, 128);
3321  memset(output, 0x00, 128);
3322  memset(tag_output, 0x00, 16);
3323 
3324  key_len = unhexify( key_str, "f2956384a65f9627dccf5126141c7bca" );
3325  pt_len = unhexify( src_str, "89dfd185bc33adbea0c69b55d37087de3fa7fd69a9fa76aa1568ac363c5f212ae92d202b9338ef397266dd8bd1ef36cab6d1368feafec69a4e3e11e1bf1beba35d96e040d91e9d3a838966bae62a15b18d621f33efd9ec511de4bd287c722cd39b4ba43e7a6f8c8ab672d69eac6b21a8d3544ab1d64f9de31956b93b1104431e" );
3326  iv_len = unhexify( iv_str, "2f61f76bcf074a3d02f51816c0411052" );
3327  add_len = unhexify( add_str, "bde1508823be7984d5921db4cab1ed3017c0d73cb9bff9874f39a6f5bc449719c1c43d8fb4e76f6813b0985d4b124517f9e4e2d3c552b2f75876563c93a44c18fb6523ee732ea5b6d13417db45120653df3820a32ebdb42d544768461b1d0b55b46b09f688e47240880930fca7097ddfae35f854891e21891dbad13f661a2534" );
3328 
3329  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3330  if( 0 == 0 )
3331  {
3332  fct_chk( 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 );
3333  hexify( dst_str, output, pt_len );
3334  hexify( tag_str, tag_output, tag_len );
3335 
3336  fct_chk( strcmp( (char *) dst_str, "023a9c3ab3ed0181ec8926e4bfbc0fa63e38ec8980eabd2ed75e29b681b3ec04cc8b27fad3a7ce6dc1efd680479a78f02de7ba92f45dc03de02852a2e67b35bb1dd154568df7acf59081dfc05aca02c0aa9f3f7b4fd4dbdb671b1b973a48af0c325a23467ba5cb59183540f6edf4c00376be39a3a672feb9e795d1bda96f0017" ) == 0 );
3337  fct_chk( strcmp( (char *) tag_str, "613eeca3decbe09e977e0beeda" ) == 0 );
3338  }
3339  }
3340  FCT_TEST_END();
3341 
3342 
3343  FCT_TEST_BGN(gcm_nist_validation_aes_12812810241024104_2)
3344  {
3345  unsigned char key_str[128];
3346  unsigned char src_str[128];
3347  unsigned char dst_str[257];
3348  unsigned char iv_str[128];
3349  unsigned char add_str[128];
3350  unsigned char tag_str[128];
3351  unsigned char output[128];
3352  unsigned char tag_output[16];
3353  gcm_context ctx;
3354  unsigned int key_len;
3355  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
3356 
3357  memset(key_str, 0x00, 128);
3358  memset(src_str, 0x00, 128);
3359  memset(dst_str, 0x00, 257);
3360  memset(iv_str, 0x00, 128);
3361  memset(add_str, 0x00, 128);
3362  memset(tag_str, 0x00, 128);
3363  memset(output, 0x00, 128);
3364  memset(tag_output, 0x00, 16);
3365 
3366  key_len = unhexify( key_str, "2e9bb30ea25f50b3e7711fac05f9d44a" );
3367  pt_len = unhexify( src_str, "17a52f4faa608dc9853d4511feb3dd9d2fb92d7a3deb3f8a7a6df3fa2a909b7db30babef12d9da71aadfad16bfd2bcb5706ef2addc58eeb8d8d13f31326f7ab1d0aabfe5525014f05cd8fb80e1ecb0654e62078440157df66f618f078cdf2b322b0f8878bcd924609c33e42059aa69fe0ddca659aea42ab907b483aa55aacc63" );
3368  iv_len = unhexify( iv_str, "9668e8b1ce9623ad52468431dfbed632" );
3369  add_len = unhexify( add_str, "f776c6e892e373ec86ccf706704d47cd89fa45c2abdeb0f9f6f32cde88c22f001150cc66f0fd83e9b75b97bceb98913cf143cd8a68bf06e1125031e3e7f09dfefbcaef4f04d7bf28aca1992a7e4228fd4017a5b32fc48101c8f5a609eaee9489d02200e8a13efeda60b57df53ccf2fe26309a1c1e1d40db6eb8431dbfe8d43ea" );
3370 
3371  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3372  if( 0 == 0 )
3373  {
3374  fct_chk( 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 );
3375  hexify( dst_str, output, pt_len );
3376  hexify( tag_str, tag_output, tag_len );
3377 
3378  fct_chk( strcmp( (char *) dst_str, "407171db1dfb7ff20d5c97407375574220534ef75ba18dc616400e5e967e72db23783a6eb9506b611d0c67a83f5c423380ceae66d5dcdffc31e31239357b91794018e9c4c36c286f7b17ee911136d9cacf564baf5f9b9831779375e63aaade8734a91bd4000e53e5e412b3f92f8b68e0b7ad3bf6f274744e2c5a635894bf918e" ) == 0 );
3379  fct_chk( strcmp( (char *) tag_str, "2741ebc33a4d4c156c21385a23" ) == 0 );
3380  }
3381  }
3382  FCT_TEST_END();
3383 
3384 
3385  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024102496_0)
3386  {
3387  unsigned char key_str[128];
3388  unsigned char src_str[128];
3389  unsigned char dst_str[257];
3390  unsigned char iv_str[128];
3391  unsigned char add_str[128];
3392  unsigned char tag_str[128];
3393  unsigned char output[128];
3394  unsigned char tag_output[16];
3395  gcm_context ctx;
3396  unsigned int key_len;
3397  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
3398 
3399  memset(key_str, 0x00, 128);
3400  memset(src_str, 0x00, 128);
3401  memset(dst_str, 0x00, 257);
3402  memset(iv_str, 0x00, 128);
3403  memset(add_str, 0x00, 128);
3404  memset(tag_str, 0x00, 128);
3405  memset(output, 0x00, 128);
3406  memset(tag_output, 0x00, 16);
3407 
3408  key_len = unhexify( key_str, "aa705ee70297e9212f70585d92f42aa4" );
3409  pt_len = unhexify( src_str, "5e4b47d986d55f49708cb3e4d27072a7e850936b27b24723856acec7b2e03caccd98c2a002a2dd1d3f4dad8827a5910b42986cb00be7bff47eb401be5f324cd2cd3ea2fa41f4ef61f9771a4c0184d85d6023f37f3f54bb9d7cd621fe36ce11a82678a0754a33049106be597c53f287692ac5a42e59f09a2a117fad6c034a91b9" );
3410  iv_len = unhexify( iv_str, "89822c9db69229d1e4880afd19965908" );
3411  add_len = unhexify( add_str, "fdd655584a92e29a14a368f28a73f9dc608e5c2ffd308d4aeff7326bbef5ea58f84620c9ad43c0b598c271527ae60dae6db4ffd3f590e503ae7057d8c48e9b1bd8f8a8832629bbfc1391b954a4fcee77d40096eb5dcec5e0439375ed455378d716ee8f8b04ccde3291e580068dd7dbef4ba3685b51940471f24859f8e93b659b" );
3412 
3413  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3414  if( 0 == 0 )
3415  {
3416  fct_chk( 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 );
3417  hexify( dst_str, output, pt_len );
3418  hexify( tag_str, tag_output, tag_len );
3419 
3420  fct_chk( strcmp( (char *) dst_str, "0f34bb4e2a4016ba41eb23e7688edd455f2d46a5097236d9a124ae0bd47349876319976aa4c3aa41680a63cea85f433e3a1b4376f79d004710d486a3fb5afbb7db2c41aca400e04f75ba91660bb68354029defeaae1853447f8fa0d470b25371da73c9e8ee841ba95fc273f88c2e4604ff29a131a7d73e60a00340e886df5359" ) == 0 );
3421  fct_chk( strcmp( (char *) tag_str, "a247e88acbd4e354d7c8a80d" ) == 0 );
3422  }
3423  }
3424  FCT_TEST_END();
3425 
3426 
3427  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024102496_1)
3428  {
3429  unsigned char key_str[128];
3430  unsigned char src_str[128];
3431  unsigned char dst_str[257];
3432  unsigned char iv_str[128];
3433  unsigned char add_str[128];
3434  unsigned char tag_str[128];
3435  unsigned char output[128];
3436  unsigned char tag_output[16];
3437  gcm_context ctx;
3438  unsigned int key_len;
3439  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
3440 
3441  memset(key_str, 0x00, 128);
3442  memset(src_str, 0x00, 128);
3443  memset(dst_str, 0x00, 257);
3444  memset(iv_str, 0x00, 128);
3445  memset(add_str, 0x00, 128);
3446  memset(tag_str, 0x00, 128);
3447  memset(output, 0x00, 128);
3448  memset(tag_output, 0x00, 16);
3449 
3450  key_len = unhexify( key_str, "ddeec78a0c23e8c5c32d3d4f9830f927" );
3451  pt_len = unhexify( src_str, "134fd6be1a934053a539398aeaf5d3aceda3ef722a6b3568af6958a4b1207f7e9b9e835cfd46a7f3d4faed829ad23554fc7c0d1a9b32bad9477d9dd397a259cfb0bea30268aba7b8cf4a35dbf99a6b2ca968649847f717749bc5f41374e1574ad6c357f7b60b0cffcb822bd3924208d0472a973ae97550b921338792ca88fde6" );
3452  iv_len = unhexify( iv_str, "ae428ebb974ccfbbdbcf6203105724f1" );
3453  add_len = unhexify( add_str, "e3d5ce768c688e881e72f036341b2d91947e02b7327eb53240c85b0b93a40eb0f3346817e2c9e126209b31b57633c4384f7af46846d9bbe6fd0d6babc57b84d0f5be2a8a7b146b38914a4cea70273d5461126cfd7527ab397510176e790300a06066655907d499bded79f5bb39f6fdb03f85a415c2cc2ad1f25078f0da7df215" );
3454 
3455  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3456  if( 0 == 0 )
3457  {
3458  fct_chk( 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 );
3459  hexify( dst_str, output, pt_len );
3460  hexify( tag_str, tag_output, tag_len );
3461 
3462  fct_chk( strcmp( (char *) dst_str, "865d6148c9820b67c08c17c9214de612ada6e24ed67933d13c3b3ec43637fa305673d8d52d15a195b27a6b2563682a9f98912908668e3335192b1daabf26e1e73d7d34764af006b0c14a0ffad3b6a0def59964b11eb52e829ad790069997931d09be88b8d60aef90e39dfcb0df4fd54b71597b8ac64670e703e7cb83efa3f2cb" ) == 0 );
3463  fct_chk( strcmp( (char *) tag_str, "64b2458a6eaa6f12937a8643" ) == 0 );
3464  }
3465  }
3466  FCT_TEST_END();
3467 
3468 
3469  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024102496_2)
3470  {
3471  unsigned char key_str[128];
3472  unsigned char src_str[128];
3473  unsigned char dst_str[257];
3474  unsigned char iv_str[128];
3475  unsigned char add_str[128];
3476  unsigned char tag_str[128];
3477  unsigned char output[128];
3478  unsigned char tag_output[16];
3479  gcm_context ctx;
3480  unsigned int key_len;
3481  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
3482 
3483  memset(key_str, 0x00, 128);
3484  memset(src_str, 0x00, 128);
3485  memset(dst_str, 0x00, 257);
3486  memset(iv_str, 0x00, 128);
3487  memset(add_str, 0x00, 128);
3488  memset(tag_str, 0x00, 128);
3489  memset(output, 0x00, 128);
3490  memset(tag_output, 0x00, 16);
3491 
3492  key_len = unhexify( key_str, "829008339e983918b8d142091f84ee28" );
3493  pt_len = unhexify( src_str, "6f30604d8c2fae216b1ed3d67485631eaada68fe89a7020d6e29f42b937e7640fc1f23c00ba48bf239740f6468289ed211ba81e809cda55fe067bdfa198bf0461daf86d4a7969de9a629513809b358630ce7eb50a783b8c98ec1bd5e56cb47032ee8fc64a939dfc4a870ea9419b16178109f1966ab964da34debcf00cc49f57e" );
3494  iv_len = unhexify( iv_str, "dc62cf12b6d0439578b457e516d8205e" );
3495  add_len = unhexify( add_str, "e700cd917923b16c968712b2fdbf08be1b5c3b5d9e42cc45465549898daa07c44b4cd321ba16a38aeb6720e217a58428e3a4cc125920cb3fc92f039b66716543bab71b64ebedbb1e5e3e8fbbecff3385ab0ab16b7f6554b7fbb3b4c92307c654361f984d5a6cb69b8708684d90bb1fdfabc0cb59f42c2b3707b3755a8c7abf34" );
3496 
3497  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3498  if( 0 == 0 )
3499  {
3500  fct_chk( 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 );
3501  hexify( dst_str, output, pt_len );
3502  hexify( tag_str, tag_output, tag_len );
3503 
3504  fct_chk( strcmp( (char *) dst_str, "adf60c4affb2ac76cce20cf9f302b909bfda1bedc60be21b53f65d0b81bff08f7e90ecaaf12ee1f9d921926b75e244b7e8357c1cfc26013a6d1c874ed2e5cd0cce012bbfff0dff85b372d92c18dce887c1651b6467f173a67ac8cea194a6c41e77842675f60cacfbc9c81597a08959d19af632d3c191bf69505620e4290bb040" ) == 0 );
3505  fct_chk( strcmp( (char *) tag_str, "6209c09dd1b7ea85d02eb9fb" ) == 0 );
3506  }
3507  }
3508  FCT_TEST_END();
3509 
3510 
3511  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024102464_0)
3512  {
3513  unsigned char key_str[128];
3514  unsigned char src_str[128];
3515  unsigned char dst_str[257];
3516  unsigned char iv_str[128];
3517  unsigned char add_str[128];
3518  unsigned char tag_str[128];
3519  unsigned char output[128];
3520  unsigned char tag_output[16];
3521  gcm_context ctx;
3522  unsigned int key_len;
3523  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
3524 
3525  memset(key_str, 0x00, 128);
3526  memset(src_str, 0x00, 128);
3527  memset(dst_str, 0x00, 257);
3528  memset(iv_str, 0x00, 128);
3529  memset(add_str, 0x00, 128);
3530  memset(tag_str, 0x00, 128);
3531  memset(output, 0x00, 128);
3532  memset(tag_output, 0x00, 16);
3533 
3534  key_len = unhexify( key_str, "4aec55c7e4bb36c32cb543b57cfba3fc" );
3535  pt_len = unhexify( src_str, "4cf1443a5448fd09e09e91b7cc5f8e00f53f0b75a6b17db5ab9a721167de5f7bc5de1fb711accdafb7f3f1bf6b98393e5f09e9091e26d1340122edc91f7e60f62caa218f1927c8f0032be0752520aa650f6f1ddf40412c96d49dcc2287ee17834504f1dda3f4a723e2fce064f0b8dae0789ec455922a14488623e3ac10b6e312" );
3536  iv_len = unhexify( iv_str, "6669c3022e0820634a95efa2b5578e93" );
3537  add_len = unhexify( add_str, "f6ae9b1aaba18acb741c9fc64cfba3841f5127b1cda5cbcd48af5987428daa5782d2676bc3e2ef23936ec29a80d6b5310282b39b77181dc680799ac9c8125fc48afd185cba2ca8900bd9a0039787b4f3a6846f3edf5f7b921dec2608fd3df67600ae0aba9378da0015bd57d66d2999bf751806d1b89214332bac50f721ca9474" );
3538 
3539  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3540  if( 0 == 0 )
3541  {
3542  fct_chk( 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 );
3543  hexify( dst_str, output, pt_len );
3544  hexify( tag_str, tag_output, tag_len );
3545 
3546  fct_chk( strcmp( (char *) dst_str, "720c32b0d454f086af36a32cc7274e2f2fe08db9cf1cefecc14b42b3e5c573aefa7e9e1ee0042eee21104dc3e4d19b012099280c5a53e40a0bf662d8295dde743143a28be7305729767a37cbdf08fb3c87667939a8ffe44c96ad272e30b75aafada2963bb9636f189c37d976ed1c458295fe85ed19662c463d7c8155e9f04115" ) == 0 );
3547  fct_chk( strcmp( (char *) tag_str, "4b3343b627095f60" ) == 0 );
3548  }
3549  }
3550  FCT_TEST_END();
3551 
3552 
3553  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024102464_1)
3554  {
3555  unsigned char key_str[128];
3556  unsigned char src_str[128];
3557  unsigned char dst_str[257];
3558  unsigned char iv_str[128];
3559  unsigned char add_str[128];
3560  unsigned char tag_str[128];
3561  unsigned char output[128];
3562  unsigned char tag_output[16];
3563  gcm_context ctx;
3564  unsigned int key_len;
3565  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
3566 
3567  memset(key_str, 0x00, 128);
3568  memset(src_str, 0x00, 128);
3569  memset(dst_str, 0x00, 257);
3570  memset(iv_str, 0x00, 128);
3571  memset(add_str, 0x00, 128);
3572  memset(tag_str, 0x00, 128);
3573  memset(output, 0x00, 128);
3574  memset(tag_output, 0x00, 16);
3575 
3576  key_len = unhexify( key_str, "8629e8064b3ba2b95bc20dd075f8e931" );
3577  pt_len = unhexify( src_str, "85896de4b6454acf8568ccf95ab68a632330ce71ca8b4e7bfe26ad8d7e2e6b63f2032e2cd365999ffd24ece0df16904d749d06e829a291f3d07fccee27d9c6f3ff3a139d9e33f0660803de8fe79dc6ad291fad47c93543522a1c38e40697426a9855255e3e0abcb84d474ead15341c6b235ccd755e58fe6e87898d216d65abac" );
3578  iv_len = unhexify( iv_str, "dc4bcefe284cfc606f39b057b7df411b" );
3579  add_len = unhexify( add_str, "abfd0cb6fee8588aa68606b7e487bb9c0d2bd11205611a6f30a78d9ccf28e827cef4e966fa245e4b7b39533a4bd00176ce3c97858b0c8abdff4c548c835bf1962a6115c4ce7c05b1ce5aa29b412e816abc925b8cb998eb4b69c43a7dda1b3cf0d728072d42cb5a489db521698c5daffc3013537bbf622ef76a2e96089b7d4b96" );
3580 
3581  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3582  if( 0 == 0 )
3583  {
3584  fct_chk( 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 );
3585  hexify( dst_str, output, pt_len );
3586  hexify( tag_str, tag_output, tag_len );
3587 
3588  fct_chk( strcmp( (char *) dst_str, "b295ca0d7707892fb08537f42d28a844f5877177f136b4620f69b05c83f43bf2e61323e80076c88660f5385060228bdb91d866686e691cc7e96fdaff41f2ca5f5b5d93ecec7bba82515a6e0bd604c99ef93d3ea013d899464558bc822bd765eb1ca2b8b8a7d961a6a316bf135c22d2ee552e62d8bbc5b60ca31bb53cde82fb5f" ) == 0 );
3589  fct_chk( strcmp( (char *) tag_str, "d26cba11f68a5e1a" ) == 0 );
3590  }
3591  }
3592  FCT_TEST_END();
3593 
3594 
3595  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024102464_2)
3596  {
3597  unsigned char key_str[128];
3598  unsigned char src_str[128];
3599  unsigned char dst_str[257];
3600  unsigned char iv_str[128];
3601  unsigned char add_str[128];
3602  unsigned char tag_str[128];
3603  unsigned char output[128];
3604  unsigned char tag_output[16];
3605  gcm_context ctx;
3606  unsigned int key_len;
3607  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
3608 
3609  memset(key_str, 0x00, 128);
3610  memset(src_str, 0x00, 128);
3611  memset(dst_str, 0x00, 257);
3612  memset(iv_str, 0x00, 128);
3613  memset(add_str, 0x00, 128);
3614  memset(tag_str, 0x00, 128);
3615  memset(output, 0x00, 128);
3616  memset(tag_output, 0x00, 16);
3617 
3618  key_len = unhexify( key_str, "4d901e59a491c86bf538f7b38247bb21" );
3619  pt_len = unhexify( src_str, "4c370a9f316d25702195409d8e73bbfa40aa15c2b0ea55db9257a9ae4e8dccad14589718741a78e5a74c26a801857e388c9f141ef7df08bc01384b2b2338c38abce51d547056f4bbaf7484f9edc96df122e71f132b7bcb6484228c3ae2f741a2c8b9b208b6f49b07081334b93c501938808cdbd2e40cf95ae4f27a29e1121480" );
3620  iv_len = unhexify( iv_str, "39e2788c9697e82cae0e222a9e413d8f" );
3621  add_len = unhexify( add_str, "48d7d20e424df3c3efced29e860771647ae01312a96e68d33f982c540e74160a7fbdb623d4b19abb1871d74c6dadc56038954b154389b752bebc40cf4ee1505ec8d844e1a04dcae430befdb081cc84252e0840f5f5146ffe5b9594f856afc2edb33b3c6f9041c9631c5e3d812959c5504938635f72c6fe29a25bbf66a4ecd211" );
3622 
3623  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3624  if( 0 == 0 )
3625  {
3626  fct_chk( 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 );
3627  hexify( dst_str, output, pt_len );
3628  hexify( tag_str, tag_output, tag_len );
3629 
3630  fct_chk( strcmp( (char *) dst_str, "262718671dd0e2c9a40b9d7297c7f6a26cd5fe4f301999a32059812719896d3a2f5350f6ec20d999fc80b8d7af5a421545b325de9180f14505f0c72250658a5014768fed63ab553de0fb01ab1368356043f6d1a6c9950c80e3d9d4637bbeea44c9d58a4148bb10974d507c62b67cc4e37eaebd7eb8e67077856cc5d1702f8e2d" ) == 0 );
3631  fct_chk( strcmp( (char *) tag_str, "bd814b4584941681" ) == 0 );
3632  }
3633  }
3634  FCT_TEST_END();
3635 
3636 
3637  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024102432_0)
3638  {
3639  unsigned char key_str[128];
3640  unsigned char src_str[128];
3641  unsigned char dst_str[257];
3642  unsigned char iv_str[128];
3643  unsigned char add_str[128];
3644  unsigned char tag_str[128];
3645  unsigned char output[128];
3646  unsigned char tag_output[16];
3647  gcm_context ctx;
3648  unsigned int key_len;
3649  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
3650 
3651  memset(key_str, 0x00, 128);
3652  memset(src_str, 0x00, 128);
3653  memset(dst_str, 0x00, 257);
3654  memset(iv_str, 0x00, 128);
3655  memset(add_str, 0x00, 128);
3656  memset(tag_str, 0x00, 128);
3657  memset(output, 0x00, 128);
3658  memset(tag_output, 0x00, 16);
3659 
3660  key_len = unhexify( key_str, "2f54229167862034ef6c5ff4a1246697" );
3661  pt_len = unhexify( src_str, "af2c89d3600329779abfbcf5be8bb83c357d4d2435fc8f4c413b956b898d22a8a889db9e2ff5e7229d7495576989695a0b52d796f9a23e9570b7caec6b46059749c29a293d31a6224baaf73711bc0e4a587abe9d0379adec6de04ce444676dfd8672e6660cfc79d7ee2e7625ce57dd4681bad66aa29bea2baf936122c3db17e7" );
3662  iv_len = unhexify( iv_str, "8168ef8ef278c832fc0ec846bc9f62e9" );
3663  add_len = unhexify( add_str, "abb9ed24137915265bddbd4b63f1d02efa2a99c8c373f19077c7e1c389feae36a7af42c661b0adc5dc8e4b5520d334e8e0e112d42c2977fa23485c0a85aef83f1e52d6749bd29cbebe14aea6ee1c1098aa96c6360b0192894bb2001c7c0fed7f00bb84953c23bfdda00818d1568fb94c1bd971982d6c01c12a35ef7af34f947f" );
3664 
3665  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3666  if( 0 == 0 )
3667  {
3668  fct_chk( 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 );
3669  hexify( dst_str, output, pt_len );
3670  hexify( tag_str, tag_output, tag_len );
3671 
3672  fct_chk( strcmp( (char *) dst_str, "cd6dede25433fd3da6137001219b57aa54bdf6039a5a8d66138171b006194fe3e13d484e5cf57a1acdaa8e76f001df7bf41cbed2c5561a37a32113fa116d0918167c29dd9e7d46f7c18d9db33d7f1bc33ac21d159ddec57a2e158f0c0993c16dbf50582371100a8d7c55cd47c03473c5770ad562240f754c99d95ec593dca284" ) == 0 );
3673  fct_chk( strcmp( (char *) tag_str, "4ab63349" ) == 0 );
3674  }
3675  }
3676  FCT_TEST_END();
3677 
3678 
3679  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024102432_1)
3680  {
3681  unsigned char key_str[128];
3682  unsigned char src_str[128];
3683  unsigned char dst_str[257];
3684  unsigned char iv_str[128];
3685  unsigned char add_str[128];
3686  unsigned char tag_str[128];
3687  unsigned char output[128];
3688  unsigned char tag_output[16];
3689  gcm_context ctx;
3690  unsigned int key_len;
3691  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
3692 
3693  memset(key_str, 0x00, 128);
3694  memset(src_str, 0x00, 128);
3695  memset(dst_str, 0x00, 257);
3696  memset(iv_str, 0x00, 128);
3697  memset(add_str, 0x00, 128);
3698  memset(tag_str, 0x00, 128);
3699  memset(output, 0x00, 128);
3700  memset(tag_output, 0x00, 16);
3701 
3702  key_len = unhexify( key_str, "b7b52fe74c5c3266edf731578d28a72e" );
3703  pt_len = unhexify( src_str, "01a4b7da57c0f7d9aea51283004b23f899669dccd6dbaec9cd6e747c7adb52432c7c29d1411ec1df4e5e33311ad84218075dabe17f73c95511ce7950f08b618feff56bd452b33455a1a03caa8371dc7fb9aebedb3cb652d94e06bd00a98bb06d30b506d41cb516c759f6d7f793472e6d6dc9ae50cf3dc8b1ad3d0517c4f555a3" );
3704  iv_len = unhexify( iv_str, "a005750e9f8c68ae238668f0a8f015ba" );
3705  add_len = unhexify( add_str, "805cf3635f9d84c7608c242ee23a4837dd3f260de9afd6166b08164a0256200be9b52e5259a4a54186ec067ddfad90f5c4f92afd1c7e4f2d8443312ba3c4818b664439a02644e55467045071aa2cc7939a940e89cc52c8a53623bc6473bf843a4e0f00149b2ce1543a6540aa0d9c2c5b68ba2bd5791078deed1de3b5f48257c5" );
3706 
3707  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3708  if( 0 == 0 )
3709  {
3710  fct_chk( 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 );
3711  hexify( dst_str, output, pt_len );
3712  hexify( tag_str, tag_output, tag_len );
3713 
3714  fct_chk( strcmp( (char *) dst_str, "d6124da0896d99fc7f2c3688fbca164f8fecd75b6260162c4dc2d2773ce75cf41a8c7a57998e0a7e49cc71e5ad6a04c7415f8d4fd11f1035d3a02ed744345d74ebc9c4f202f65bfa88d55c747fe777225e218f2149da22b53e6584823dbda42cc2dda56fc72b753f3923c443eb5c656515dd824d8c08cc78152226ed8c1808db" ) == 0 );
3715  fct_chk( strcmp( (char *) tag_str, "60d86287" ) == 0 );
3716  }
3717  }
3718  FCT_TEST_END();
3719 
3720 
3721  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024102432_2)
3722  {
3723  unsigned char key_str[128];
3724  unsigned char src_str[128];
3725  unsigned char dst_str[257];
3726  unsigned char iv_str[128];
3727  unsigned char add_str[128];
3728  unsigned char tag_str[128];
3729  unsigned char output[128];
3730  unsigned char tag_output[16];
3731  gcm_context ctx;
3732  unsigned int key_len;
3733  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
3734 
3735  memset(key_str, 0x00, 128);
3736  memset(src_str, 0x00, 128);
3737  memset(dst_str, 0x00, 257);
3738  memset(iv_str, 0x00, 128);
3739  memset(add_str, 0x00, 128);
3740  memset(tag_str, 0x00, 128);
3741  memset(output, 0x00, 128);
3742  memset(tag_output, 0x00, 16);
3743 
3744  key_len = unhexify( key_str, "7a3501d9fbb86ab80f5faeaf8876b7c1" );
3745  pt_len = unhexify( src_str, "4f0dfbd2aeab70c80814a1f261a1fe442eacff5d267fd0c0f93757919810f6610113f1b442270afcc47f2fa01ab01797683ec9267691a0dec45033c57f5cbdfcafdf154fc99e6140176eea92503b3f6fee5dfa5aad05f802e08a08f10e49a8b32a50c028f2bc7aa451be3747d10b96b3a1105c67c5167eccdc18b4a9b0612d03" );
3746  iv_len = unhexify( iv_str, "6d59be1833e75ce7f54ddc91ad6f5187" );
3747  add_len = unhexify( add_str, "3e556b1b33c42f1ad6cca67dabc6ff79d6cb667527335858e26cb4f6a3d8503ec415968ba97d2d79a3f80c1a10d75174eb5294cce8b89224eba7dfb258fb17cb5c5db7a914ace06e94cd2f2cafe3febc8adc4c2264afa2db2c6356e4c3e8667393a77a0afc36be678d5c0a4b63ae82d9922bbbc60559f331ece9947b67469469" );
3748 
3749  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3750  if( 0 == 0 )
3751  {
3752  fct_chk( 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 );
3753  hexify( dst_str, output, pt_len );
3754  hexify( tag_str, tag_output, tag_len );
3755 
3756  fct_chk( strcmp( (char *) dst_str, "615ea4535f1e579d7aa45c011018f272c2e234c3ea9e2d102cfaa4a437c41e64bdef7a211ea4d858bdb656215e600911435ef9c8da68e8239e4782ced7e7add063f33f5bc62b85d9ae44ed1b139580118c5fc054ead08257b0a97632e8c503c6219294af423f0deb36758e05857ebb05c6835972488306ebfedd2ca4ce3b2c48" ) == 0 );
3757  fct_chk( strcmp( (char *) tag_str, "74c6bf0e" ) == 0 );
3758  }
3759  }
3760  FCT_TEST_END();
3761 
3762 
3763  FCT_TEST_BGN(gcm_nist_validation_aes_12812800128_0)
3764  {
3765  unsigned char key_str[128];
3766  unsigned char src_str[128];
3767  unsigned char dst_str[257];
3768  unsigned char iv_str[128];
3769  unsigned char add_str[128];
3770  unsigned char tag_str[128];
3771  unsigned char output[128];
3772  unsigned char tag_output[16];
3773  gcm_context ctx;
3774  unsigned int key_len;
3775  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
3776 
3777  memset(key_str, 0x00, 128);
3778  memset(src_str, 0x00, 128);
3779  memset(dst_str, 0x00, 257);
3780  memset(iv_str, 0x00, 128);
3781  memset(add_str, 0x00, 128);
3782  memset(tag_str, 0x00, 128);
3783  memset(output, 0x00, 128);
3784  memset(tag_output, 0x00, 16);
3785 
3786  key_len = unhexify( key_str, "195ddad2b0da195ea54a9dad0f86c161" );
3787  pt_len = unhexify( src_str, "" );
3788  iv_len = unhexify( iv_str, "265ab1995fac4fca7c2b26c84e4a2dbc" );
3789  add_len = unhexify( add_str, "" );
3790 
3791  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3792  if( 0 == 0 )
3793  {
3794  fct_chk( 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 );
3795  hexify( dst_str, output, pt_len );
3796  hexify( tag_str, tag_output, tag_len );
3797 
3798  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
3799  fct_chk( strcmp( (char *) tag_str, "930f719034b76c232619ef2792fe6e65" ) == 0 );
3800  }
3801  }
3802  FCT_TEST_END();
3803 
3804 
3805  FCT_TEST_BGN(gcm_nist_validation_aes_12812800128_1)
3806  {
3807  unsigned char key_str[128];
3808  unsigned char src_str[128];
3809  unsigned char dst_str[257];
3810  unsigned char iv_str[128];
3811  unsigned char add_str[128];
3812  unsigned char tag_str[128];
3813  unsigned char output[128];
3814  unsigned char tag_output[16];
3815  gcm_context ctx;
3816  unsigned int key_len;
3817  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
3818 
3819  memset(key_str, 0x00, 128);
3820  memset(src_str, 0x00, 128);
3821  memset(dst_str, 0x00, 257);
3822  memset(iv_str, 0x00, 128);
3823  memset(add_str, 0x00, 128);
3824  memset(tag_str, 0x00, 128);
3825  memset(output, 0x00, 128);
3826  memset(tag_output, 0x00, 16);
3827 
3828  key_len = unhexify( key_str, "12be48e90c849063637b1c2ab0f2b467" );
3829  pt_len = unhexify( src_str, "" );
3830  iv_len = unhexify( iv_str, "0020c3dff2f6f3acaaae982ce38f63c3" );
3831  add_len = unhexify( add_str, "" );
3832 
3833  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3834  if( 0 == 0 )
3835  {
3836  fct_chk( 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 );
3837  hexify( dst_str, output, pt_len );
3838  hexify( tag_str, tag_output, tag_len );
3839 
3840  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
3841  fct_chk( strcmp( (char *) tag_str, "c8891f32b8015024ca42536d633b1863" ) == 0 );
3842  }
3843  }
3844  FCT_TEST_END();
3845 
3846 
3847  FCT_TEST_BGN(gcm_nist_validation_aes_12812800128_2)
3848  {
3849  unsigned char key_str[128];
3850  unsigned char src_str[128];
3851  unsigned char dst_str[257];
3852  unsigned char iv_str[128];
3853  unsigned char add_str[128];
3854  unsigned char tag_str[128];
3855  unsigned char output[128];
3856  unsigned char tag_output[16];
3857  gcm_context ctx;
3858  unsigned int key_len;
3859  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
3860 
3861  memset(key_str, 0x00, 128);
3862  memset(src_str, 0x00, 128);
3863  memset(dst_str, 0x00, 257);
3864  memset(iv_str, 0x00, 128);
3865  memset(add_str, 0x00, 128);
3866  memset(tag_str, 0x00, 128);
3867  memset(output, 0x00, 128);
3868  memset(tag_output, 0x00, 16);
3869 
3870  key_len = unhexify( key_str, "8e792fc91675d5efd4d80d5a06378d24" );
3871  pt_len = unhexify( src_str, "" );
3872  iv_len = unhexify( iv_str, "15ad63b969f8e313eac3c717ff9a994d" );
3873  add_len = unhexify( add_str, "" );
3874 
3875  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3876  if( 0 == 0 )
3877  {
3878  fct_chk( 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 );
3879  hexify( dst_str, output, pt_len );
3880  hexify( tag_str, tag_output, tag_len );
3881 
3882  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
3883  fct_chk( strcmp( (char *) tag_str, "de9a04b030954b0141dd78ffc67323d6" ) == 0 );
3884  }
3885  }
3886  FCT_TEST_END();
3887 
3888 
3889  FCT_TEST_BGN(gcm_nist_validation_aes_12812800120_0)
3890  {
3891  unsigned char key_str[128];
3892  unsigned char src_str[128];
3893  unsigned char dst_str[257];
3894  unsigned char iv_str[128];
3895  unsigned char add_str[128];
3896  unsigned char tag_str[128];
3897  unsigned char output[128];
3898  unsigned char tag_output[16];
3899  gcm_context ctx;
3900  unsigned int key_len;
3901  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
3902 
3903  memset(key_str, 0x00, 128);
3904  memset(src_str, 0x00, 128);
3905  memset(dst_str, 0x00, 257);
3906  memset(iv_str, 0x00, 128);
3907  memset(add_str, 0x00, 128);
3908  memset(tag_str, 0x00, 128);
3909  memset(output, 0x00, 128);
3910  memset(tag_output, 0x00, 16);
3911 
3912  key_len = unhexify( key_str, "a668cfd45b6ef8b766a4bb187d0824d1" );
3913  pt_len = unhexify( src_str, "" );
3914  iv_len = unhexify( iv_str, "a111e94a6426ad9b4362132052eadf4a" );
3915  add_len = unhexify( add_str, "" );
3916 
3917  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3918  if( 0 == 0 )
3919  {
3920  fct_chk( 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 );
3921  hexify( dst_str, output, pt_len );
3922  hexify( tag_str, tag_output, tag_len );
3923 
3924  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
3925  fct_chk( strcmp( (char *) tag_str, "3a3331e6a41cada2cca8e856135549" ) == 0 );
3926  }
3927  }
3928  FCT_TEST_END();
3929 
3930 
3931  FCT_TEST_BGN(gcm_nist_validation_aes_12812800120_1)
3932  {
3933  unsigned char key_str[128];
3934  unsigned char src_str[128];
3935  unsigned char dst_str[257];
3936  unsigned char iv_str[128];
3937  unsigned char add_str[128];
3938  unsigned char tag_str[128];
3939  unsigned char output[128];
3940  unsigned char tag_output[16];
3941  gcm_context ctx;
3942  unsigned int key_len;
3943  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
3944 
3945  memset(key_str, 0x00, 128);
3946  memset(src_str, 0x00, 128);
3947  memset(dst_str, 0x00, 257);
3948  memset(iv_str, 0x00, 128);
3949  memset(add_str, 0x00, 128);
3950  memset(tag_str, 0x00, 128);
3951  memset(output, 0x00, 128);
3952  memset(tag_output, 0x00, 16);
3953 
3954  key_len = unhexify( key_str, "f36e07f2689832b914e0b817010c528c" );
3955  pt_len = unhexify( src_str, "" );
3956  iv_len = unhexify( iv_str, "654104f9d16348231e6ba6fd30c1f02c" );
3957  add_len = unhexify( add_str, "" );
3958 
3959  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3960  if( 0 == 0 )
3961  {
3962  fct_chk( 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 );
3963  hexify( dst_str, output, pt_len );
3964  hexify( tag_str, tag_output, tag_len );
3965 
3966  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
3967  fct_chk( strcmp( (char *) tag_str, "be897583bae073f42138d64e622c35" ) == 0 );
3968  }
3969  }
3970  FCT_TEST_END();
3971 
3972 
3973  FCT_TEST_BGN(gcm_nist_validation_aes_12812800120_2)
3974  {
3975  unsigned char key_str[128];
3976  unsigned char src_str[128];
3977  unsigned char dst_str[257];
3978  unsigned char iv_str[128];
3979  unsigned char add_str[128];
3980  unsigned char tag_str[128];
3981  unsigned char output[128];
3982  unsigned char tag_output[16];
3983  gcm_context ctx;
3984  unsigned int key_len;
3985  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
3986 
3987  memset(key_str, 0x00, 128);
3988  memset(src_str, 0x00, 128);
3989  memset(dst_str, 0x00, 257);
3990  memset(iv_str, 0x00, 128);
3991  memset(add_str, 0x00, 128);
3992  memset(tag_str, 0x00, 128);
3993  memset(output, 0x00, 128);
3994  memset(tag_output, 0x00, 16);
3995 
3996  key_len = unhexify( key_str, "25d839a709d98ef9c0c9e78ece961eba" );
3997  pt_len = unhexify( src_str, "" );
3998  iv_len = unhexify( iv_str, "b64537609040790ff648d51406710b9a" );
3999  add_len = unhexify( add_str, "" );
4000 
4001  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4002  if( 0 == 0 )
4003  {
4004  fct_chk( 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 );
4005  hexify( dst_str, output, pt_len );
4006  hexify( tag_str, tag_output, tag_len );
4007 
4008  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4009  fct_chk( strcmp( (char *) tag_str, "4d5854c69cc973be8de41d5584407c" ) == 0 );
4010  }
4011  }
4012  FCT_TEST_END();
4013 
4014 
4015  FCT_TEST_BGN(gcm_nist_validation_aes_12812800112_0)
4016  {
4017  unsigned char key_str[128];
4018  unsigned char src_str[128];
4019  unsigned char dst_str[257];
4020  unsigned char iv_str[128];
4021  unsigned char add_str[128];
4022  unsigned char tag_str[128];
4023  unsigned char output[128];
4024  unsigned char tag_output[16];
4025  gcm_context ctx;
4026  unsigned int key_len;
4027  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
4028 
4029  memset(key_str, 0x00, 128);
4030  memset(src_str, 0x00, 128);
4031  memset(dst_str, 0x00, 257);
4032  memset(iv_str, 0x00, 128);
4033  memset(add_str, 0x00, 128);
4034  memset(tag_str, 0x00, 128);
4035  memset(output, 0x00, 128);
4036  memset(tag_output, 0x00, 16);
4037 
4038  key_len = unhexify( key_str, "957dd619f9f19445c374ceda9e9ac082" );
4039  pt_len = unhexify( src_str, "" );
4040  iv_len = unhexify( iv_str, "34887be03b4d4ca8ea2261b600ab0b0e" );
4041  add_len = unhexify( add_str, "" );
4042 
4043  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4044  if( 0 == 0 )
4045  {
4046  fct_chk( 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 );
4047  hexify( dst_str, output, pt_len );
4048  hexify( tag_str, tag_output, tag_len );
4049 
4050  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4051  fct_chk( strcmp( (char *) tag_str, "60e2d50adff707d8b279bdedb277" ) == 0 );
4052  }
4053  }
4054  FCT_TEST_END();
4055 
4056 
4057  FCT_TEST_BGN(gcm_nist_validation_aes_12812800112_1)
4058  {
4059  unsigned char key_str[128];
4060  unsigned char src_str[128];
4061  unsigned char dst_str[257];
4062  unsigned char iv_str[128];
4063  unsigned char add_str[128];
4064  unsigned char tag_str[128];
4065  unsigned char output[128];
4066  unsigned char tag_output[16];
4067  gcm_context ctx;
4068  unsigned int key_len;
4069  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
4070 
4071  memset(key_str, 0x00, 128);
4072  memset(src_str, 0x00, 128);
4073  memset(dst_str, 0x00, 257);
4074  memset(iv_str, 0x00, 128);
4075  memset(add_str, 0x00, 128);
4076  memset(tag_str, 0x00, 128);
4077  memset(output, 0x00, 128);
4078  memset(tag_output, 0x00, 16);
4079 
4080  key_len = unhexify( key_str, "a5c9a2dcaf576e67828e806082d8e780" );
4081  pt_len = unhexify( src_str, "" );
4082  iv_len = unhexify( iv_str, "f93732aac9448c4a427e634089d7edcc" );
4083  add_len = unhexify( add_str, "" );
4084 
4085  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4086  if( 0 == 0 )
4087  {
4088  fct_chk( 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 );
4089  hexify( dst_str, output, pt_len );
4090  hexify( tag_str, tag_output, tag_len );
4091 
4092  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4093  fct_chk( strcmp( (char *) tag_str, "f67ed1c98bd2c5f3a738e75f15ac" ) == 0 );
4094  }
4095  }
4096  FCT_TEST_END();
4097 
4098 
4099  FCT_TEST_BGN(gcm_nist_validation_aes_12812800112_2)
4100  {
4101  unsigned char key_str[128];
4102  unsigned char src_str[128];
4103  unsigned char dst_str[257];
4104  unsigned char iv_str[128];
4105  unsigned char add_str[128];
4106  unsigned char tag_str[128];
4107  unsigned char output[128];
4108  unsigned char tag_output[16];
4109  gcm_context ctx;
4110  unsigned int key_len;
4111  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
4112 
4113  memset(key_str, 0x00, 128);
4114  memset(src_str, 0x00, 128);
4115  memset(dst_str, 0x00, 257);
4116  memset(iv_str, 0x00, 128);
4117  memset(add_str, 0x00, 128);
4118  memset(tag_str, 0x00, 128);
4119  memset(output, 0x00, 128);
4120  memset(tag_output, 0x00, 16);
4121 
4122  key_len = unhexify( key_str, "0a30a816e8d4d85d40c8e4d7c93b777e" );
4123  pt_len = unhexify( src_str, "" );
4124  iv_len = unhexify( iv_str, "bf1f332aa19682d05cf95f2b03d26af9" );
4125  add_len = unhexify( add_str, "" );
4126 
4127  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4128  if( 0 == 0 )
4129  {
4130  fct_chk( 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 );
4131  hexify( dst_str, output, pt_len );
4132  hexify( tag_str, tag_output, tag_len );
4133 
4134  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4135  fct_chk( strcmp( (char *) tag_str, "acfb2f7884bc496f3089e50dbf42" ) == 0 );
4136  }
4137  }
4138  FCT_TEST_END();
4139 
4140 
4141  FCT_TEST_BGN(gcm_nist_validation_aes_12812800104_0)
4142  {
4143  unsigned char key_str[128];
4144  unsigned char src_str[128];
4145  unsigned char dst_str[257];
4146  unsigned char iv_str[128];
4147  unsigned char add_str[128];
4148  unsigned char tag_str[128];
4149  unsigned char output[128];
4150  unsigned char tag_output[16];
4151  gcm_context ctx;
4152  unsigned int key_len;
4153  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
4154 
4155  memset(key_str, 0x00, 128);
4156  memset(src_str, 0x00, 128);
4157  memset(dst_str, 0x00, 257);
4158  memset(iv_str, 0x00, 128);
4159  memset(add_str, 0x00, 128);
4160  memset(tag_str, 0x00, 128);
4161  memset(output, 0x00, 128);
4162  memset(tag_output, 0x00, 16);
4163 
4164  key_len = unhexify( key_str, "b45a16bba5fba362704149dc56ba8a13" );
4165  pt_len = unhexify( src_str, "" );
4166  iv_len = unhexify( iv_str, "64cca850412091bf4e120ccd612df353" );
4167  add_len = unhexify( add_str, "" );
4168 
4169  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4170  if( 0 == 0 )
4171  {
4172  fct_chk( 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 );
4173  hexify( dst_str, output, pt_len );
4174  hexify( tag_str, tag_output, tag_len );
4175 
4176  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4177  fct_chk( strcmp( (char *) tag_str, "7b1adc23af9be185e5ae0b0f0e" ) == 0 );
4178  }
4179  }
4180  FCT_TEST_END();
4181 
4182 
4183  FCT_TEST_BGN(gcm_nist_validation_aes_12812800104_1)
4184  {
4185  unsigned char key_str[128];
4186  unsigned char src_str[128];
4187  unsigned char dst_str[257];
4188  unsigned char iv_str[128];
4189  unsigned char add_str[128];
4190  unsigned char tag_str[128];
4191  unsigned char output[128];
4192  unsigned char tag_output[16];
4193  gcm_context ctx;
4194  unsigned int key_len;
4195  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
4196 
4197  memset(key_str, 0x00, 128);
4198  memset(src_str, 0x00, 128);
4199  memset(dst_str, 0x00, 257);
4200  memset(iv_str, 0x00, 128);
4201  memset(add_str, 0x00, 128);
4202  memset(tag_str, 0x00, 128);
4203  memset(output, 0x00, 128);
4204  memset(tag_output, 0x00, 16);
4205 
4206  key_len = unhexify( key_str, "0cbcbc1c72aa90e3ea7e2fe328d79723" );
4207  pt_len = unhexify( src_str, "" );
4208  iv_len = unhexify( iv_str, "2fc5fd964b45082546636ae1e208a937" );
4209  add_len = unhexify( add_str, "" );
4210 
4211  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4212  if( 0 == 0 )
4213  {
4214  fct_chk( 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 );
4215  hexify( dst_str, output, pt_len );
4216  hexify( tag_str, tag_output, tag_len );
4217 
4218  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4219  fct_chk( strcmp( (char *) tag_str, "fe091a768c731e54e2237bfdc4" ) == 0 );
4220  }
4221  }
4222  FCT_TEST_END();
4223 
4224 
4225  FCT_TEST_BGN(gcm_nist_validation_aes_12812800104_2)
4226  {
4227  unsigned char key_str[128];
4228  unsigned char src_str[128];
4229  unsigned char dst_str[257];
4230  unsigned char iv_str[128];
4231  unsigned char add_str[128];
4232  unsigned char tag_str[128];
4233  unsigned char output[128];
4234  unsigned char tag_output[16];
4235  gcm_context ctx;
4236  unsigned int key_len;
4237  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
4238 
4239  memset(key_str, 0x00, 128);
4240  memset(src_str, 0x00, 128);
4241  memset(dst_str, 0x00, 257);
4242  memset(iv_str, 0x00, 128);
4243  memset(add_str, 0x00, 128);
4244  memset(tag_str, 0x00, 128);
4245  memset(output, 0x00, 128);
4246  memset(tag_output, 0x00, 16);
4247 
4248  key_len = unhexify( key_str, "94297a1ad3f0c333cd9b087b1efd43c0" );
4249  pt_len = unhexify( src_str, "" );
4250  iv_len = unhexify( iv_str, "52ec9dc82131d7b1c69c01fed6aada10" );
4251  add_len = unhexify( add_str, "" );
4252 
4253  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4254  if( 0 == 0 )
4255  {
4256  fct_chk( 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 );
4257  hexify( dst_str, output, pt_len );
4258  hexify( tag_str, tag_output, tag_len );
4259 
4260  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4261  fct_chk( strcmp( (char *) tag_str, "5c927dda855b76ab8fc077203b" ) == 0 );
4262  }
4263  }
4264  FCT_TEST_END();
4265 
4266 
4267  FCT_TEST_BGN(gcm_nist_validation_aes_1281280096_0)
4268  {
4269  unsigned char key_str[128];
4270  unsigned char src_str[128];
4271  unsigned char dst_str[257];
4272  unsigned char iv_str[128];
4273  unsigned char add_str[128];
4274  unsigned char tag_str[128];
4275  unsigned char output[128];
4276  unsigned char tag_output[16];
4277  gcm_context ctx;
4278  unsigned int key_len;
4279  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
4280 
4281  memset(key_str, 0x00, 128);
4282  memset(src_str, 0x00, 128);
4283  memset(dst_str, 0x00, 257);
4284  memset(iv_str, 0x00, 128);
4285  memset(add_str, 0x00, 128);
4286  memset(tag_str, 0x00, 128);
4287  memset(output, 0x00, 128);
4288  memset(tag_output, 0x00, 16);
4289 
4290  key_len = unhexify( key_str, "1e8cf32008bdf867f0ff76e7d7ec21bd" );
4291  pt_len = unhexify( src_str, "" );
4292  iv_len = unhexify( iv_str, "3854b7412de72fefcc4b0c2155f6910e" );
4293  add_len = unhexify( add_str, "" );
4294 
4295  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4296  if( 0 == 0 )
4297  {
4298  fct_chk( 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 );
4299  hexify( dst_str, output, pt_len );
4300  hexify( tag_str, tag_output, tag_len );
4301 
4302  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4303  fct_chk( strcmp( (char *) tag_str, "cc8e7eccc056b06cffc307e0" ) == 0 );
4304  }
4305  }
4306  FCT_TEST_END();
4307 
4308 
4309  FCT_TEST_BGN(gcm_nist_validation_aes_1281280096_1)
4310  {
4311  unsigned char key_str[128];
4312  unsigned char src_str[128];
4313  unsigned char dst_str[257];
4314  unsigned char iv_str[128];
4315  unsigned char add_str[128];
4316  unsigned char tag_str[128];
4317  unsigned char output[128];
4318  unsigned char tag_output[16];
4319  gcm_context ctx;
4320  unsigned int key_len;
4321  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
4322 
4323  memset(key_str, 0x00, 128);
4324  memset(src_str, 0x00, 128);
4325  memset(dst_str, 0x00, 257);
4326  memset(iv_str, 0x00, 128);
4327  memset(add_str, 0x00, 128);
4328  memset(tag_str, 0x00, 128);
4329  memset(output, 0x00, 128);
4330  memset(tag_output, 0x00, 16);
4331 
4332  key_len = unhexify( key_str, "2ce1a9bd93fdde2adfd8c2c16a395b95" );
4333  pt_len = unhexify( src_str, "" );
4334  iv_len = unhexify( iv_str, "64072313ed36eef8209f079fa622d7f0" );
4335  add_len = unhexify( add_str, "" );
4336 
4337  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4338  if( 0 == 0 )
4339  {
4340  fct_chk( 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 );
4341  hexify( dst_str, output, pt_len );
4342  hexify( tag_str, tag_output, tag_len );
4343 
4344  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4345  fct_chk( strcmp( (char *) tag_str, "cd9e8ffc1423270015bf8e8b" ) == 0 );
4346  }
4347  }
4348  FCT_TEST_END();
4349 
4350 
4351  FCT_TEST_BGN(gcm_nist_validation_aes_1281280096_2)
4352  {
4353  unsigned char key_str[128];
4354  unsigned char src_str[128];
4355  unsigned char dst_str[257];
4356  unsigned char iv_str[128];
4357  unsigned char add_str[128];
4358  unsigned char tag_str[128];
4359  unsigned char output[128];
4360  unsigned char tag_output[16];
4361  gcm_context ctx;
4362  unsigned int key_len;
4363  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
4364 
4365  memset(key_str, 0x00, 128);
4366  memset(src_str, 0x00, 128);
4367  memset(dst_str, 0x00, 257);
4368  memset(iv_str, 0x00, 128);
4369  memset(add_str, 0x00, 128);
4370  memset(tag_str, 0x00, 128);
4371  memset(output, 0x00, 128);
4372  memset(tag_output, 0x00, 16);
4373 
4374  key_len = unhexify( key_str, "b15354ad3d874fe472719ebccd45f123" );
4375  pt_len = unhexify( src_str, "" );
4376  iv_len = unhexify( iv_str, "1b2013153290edef60a6a438bd7517de" );
4377  add_len = unhexify( add_str, "" );
4378 
4379  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4380  if( 0 == 0 )
4381  {
4382  fct_chk( 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 );
4383  hexify( dst_str, output, pt_len );
4384  hexify( tag_str, tag_output, tag_len );
4385 
4386  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4387  fct_chk( strcmp( (char *) tag_str, "f65a841ed510becf52b1eae7" ) == 0 );
4388  }
4389  }
4390  FCT_TEST_END();
4391 
4392 
4393  FCT_TEST_BGN(gcm_nist_validation_aes_1281280064_0)
4394  {
4395  unsigned char key_str[128];
4396  unsigned char src_str[128];
4397  unsigned char dst_str[257];
4398  unsigned char iv_str[128];
4399  unsigned char add_str[128];
4400  unsigned char tag_str[128];
4401  unsigned char output[128];
4402  unsigned char tag_output[16];
4403  gcm_context ctx;
4404  unsigned int key_len;
4405  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
4406 
4407  memset(key_str, 0x00, 128);
4408  memset(src_str, 0x00, 128);
4409  memset(dst_str, 0x00, 257);
4410  memset(iv_str, 0x00, 128);
4411  memset(add_str, 0x00, 128);
4412  memset(tag_str, 0x00, 128);
4413  memset(output, 0x00, 128);
4414  memset(tag_output, 0x00, 16);
4415 
4416  key_len = unhexify( key_str, "14ef129784776647eb3fb8897915ab9e" );
4417  pt_len = unhexify( src_str, "" );
4418  iv_len = unhexify( iv_str, "f7bbe9f699156549935f2b92c1dda163" );
4419  add_len = unhexify( add_str, "" );
4420 
4421  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4422  if( 0 == 0 )
4423  {
4424  fct_chk( 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 );
4425  hexify( dst_str, output, pt_len );
4426  hexify( tag_str, tag_output, tag_len );
4427 
4428  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4429  fct_chk( strcmp( (char *) tag_str, "dd10fa64fd51231d" ) == 0 );
4430  }
4431  }
4432  FCT_TEST_END();
4433 
4434 
4435  FCT_TEST_BGN(gcm_nist_validation_aes_1281280064_1)
4436  {
4437  unsigned char key_str[128];
4438  unsigned char src_str[128];
4439  unsigned char dst_str[257];
4440  unsigned char iv_str[128];
4441  unsigned char add_str[128];
4442  unsigned char tag_str[128];
4443  unsigned char output[128];
4444  unsigned char tag_output[16];
4445  gcm_context ctx;
4446  unsigned int key_len;
4447  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
4448 
4449  memset(key_str, 0x00, 128);
4450  memset(src_str, 0x00, 128);
4451  memset(dst_str, 0x00, 257);
4452  memset(iv_str, 0x00, 128);
4453  memset(add_str, 0x00, 128);
4454  memset(tag_str, 0x00, 128);
4455  memset(output, 0x00, 128);
4456  memset(tag_output, 0x00, 16);
4457 
4458  key_len = unhexify( key_str, "5d4470053c46a577bba7000075e9bf2c" );
4459  pt_len = unhexify( src_str, "" );
4460  iv_len = unhexify( iv_str, "854b768fdd7492c21618ca716bc8790d" );
4461  add_len = unhexify( add_str, "" );
4462 
4463  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4464  if( 0 == 0 )
4465  {
4466  fct_chk( 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 );
4467  hexify( dst_str, output, pt_len );
4468  hexify( tag_str, tag_output, tag_len );
4469 
4470  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4471  fct_chk( strcmp( (char *) tag_str, "1f3c73722006023a" ) == 0 );
4472  }
4473  }
4474  FCT_TEST_END();
4475 
4476 
4477  FCT_TEST_BGN(gcm_nist_validation_aes_1281280064_2)
4478  {
4479  unsigned char key_str[128];
4480  unsigned char src_str[128];
4481  unsigned char dst_str[257];
4482  unsigned char iv_str[128];
4483  unsigned char add_str[128];
4484  unsigned char tag_str[128];
4485  unsigned char output[128];
4486  unsigned char tag_output[16];
4487  gcm_context ctx;
4488  unsigned int key_len;
4489  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
4490 
4491  memset(key_str, 0x00, 128);
4492  memset(src_str, 0x00, 128);
4493  memset(dst_str, 0x00, 257);
4494  memset(iv_str, 0x00, 128);
4495  memset(add_str, 0x00, 128);
4496  memset(tag_str, 0x00, 128);
4497  memset(output, 0x00, 128);
4498  memset(tag_output, 0x00, 16);
4499 
4500  key_len = unhexify( key_str, "ea87d675a0d406c57f78a2531bfc0c9a" );
4501  pt_len = unhexify( src_str, "" );
4502  iv_len = unhexify( iv_str, "0907503fcb06ee384526f7206180a080" );
4503  add_len = unhexify( add_str, "" );
4504 
4505  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4506  if( 0 == 0 )
4507  {
4508  fct_chk( 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 );
4509  hexify( dst_str, output, pt_len );
4510  hexify( tag_str, tag_output, tag_len );
4511 
4512  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4513  fct_chk( strcmp( (char *) tag_str, "65d5466392b63bf6" ) == 0 );
4514  }
4515  }
4516  FCT_TEST_END();
4517 
4518 
4519  FCT_TEST_BGN(gcm_nist_validation_aes_1281280032_0)
4520  {
4521  unsigned char key_str[128];
4522  unsigned char src_str[128];
4523  unsigned char dst_str[257];
4524  unsigned char iv_str[128];
4525  unsigned char add_str[128];
4526  unsigned char tag_str[128];
4527  unsigned char output[128];
4528  unsigned char tag_output[16];
4529  gcm_context ctx;
4530  unsigned int key_len;
4531  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
4532 
4533  memset(key_str, 0x00, 128);
4534  memset(src_str, 0x00, 128);
4535  memset(dst_str, 0x00, 257);
4536  memset(iv_str, 0x00, 128);
4537  memset(add_str, 0x00, 128);
4538  memset(tag_str, 0x00, 128);
4539  memset(output, 0x00, 128);
4540  memset(tag_output, 0x00, 16);
4541 
4542  key_len = unhexify( key_str, "d3e8e27568e6e17ff807cc207e5d4eea" );
4543  pt_len = unhexify( src_str, "" );
4544  iv_len = unhexify( iv_str, "18e51cdfb4a3a5ebc7b0d7b17727aa95" );
4545  add_len = unhexify( add_str, "" );
4546 
4547  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4548  if( 0 == 0 )
4549  {
4550  fct_chk( 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 );
4551  hexify( dst_str, output, pt_len );
4552  hexify( tag_str, tag_output, tag_len );
4553 
4554  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4555  fct_chk( strcmp( (char *) tag_str, "a7e3f637" ) == 0 );
4556  }
4557  }
4558  FCT_TEST_END();
4559 
4560 
4561  FCT_TEST_BGN(gcm_nist_validation_aes_1281280032_1)
4562  {
4563  unsigned char key_str[128];
4564  unsigned char src_str[128];
4565  unsigned char dst_str[257];
4566  unsigned char iv_str[128];
4567  unsigned char add_str[128];
4568  unsigned char tag_str[128];
4569  unsigned char output[128];
4570  unsigned char tag_output[16];
4571  gcm_context ctx;
4572  unsigned int key_len;
4573  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
4574 
4575  memset(key_str, 0x00, 128);
4576  memset(src_str, 0x00, 128);
4577  memset(dst_str, 0x00, 257);
4578  memset(iv_str, 0x00, 128);
4579  memset(add_str, 0x00, 128);
4580  memset(tag_str, 0x00, 128);
4581  memset(output, 0x00, 128);
4582  memset(tag_output, 0x00, 16);
4583 
4584  key_len = unhexify( key_str, "596a602164b1a0bb50ef91bce3a98796" );
4585  pt_len = unhexify( src_str, "" );
4586  iv_len = unhexify( iv_str, "2025e72bd6a511980a8ddce34565d16a" );
4587  add_len = unhexify( add_str, "" );
4588 
4589  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4590  if( 0 == 0 )
4591  {
4592  fct_chk( 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 );
4593  hexify( dst_str, output, pt_len );
4594  hexify( tag_str, tag_output, tag_len );
4595 
4596  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4597  fct_chk( strcmp( (char *) tag_str, "f84f92de" ) == 0 );
4598  }
4599  }
4600  FCT_TEST_END();
4601 
4602 
4603  FCT_TEST_BGN(gcm_nist_validation_aes_1281280032_2)
4604  {
4605  unsigned char key_str[128];
4606  unsigned char src_str[128];
4607  unsigned char dst_str[257];
4608  unsigned char iv_str[128];
4609  unsigned char add_str[128];
4610  unsigned char tag_str[128];
4611  unsigned char output[128];
4612  unsigned char tag_output[16];
4613  gcm_context ctx;
4614  unsigned int key_len;
4615  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
4616 
4617  memset(key_str, 0x00, 128);
4618  memset(src_str, 0x00, 128);
4619  memset(dst_str, 0x00, 257);
4620  memset(iv_str, 0x00, 128);
4621  memset(add_str, 0x00, 128);
4622  memset(tag_str, 0x00, 128);
4623  memset(output, 0x00, 128);
4624  memset(tag_output, 0x00, 16);
4625 
4626  key_len = unhexify( key_str, "d0194b6ee68f0ed8adc4b22ed15dbf14" );
4627  pt_len = unhexify( src_str, "" );
4628  iv_len = unhexify( iv_str, "32ea8970a8cb70d6ffb3972a146c6984" );
4629  add_len = unhexify( add_str, "" );
4630 
4631  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4632  if( 0 == 0 )
4633  {
4634  fct_chk( 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 );
4635  hexify( dst_str, output, pt_len );
4636  hexify( tag_str, tag_output, tag_len );
4637 
4638  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4639  fct_chk( strcmp( (char *) tag_str, "eef4b97a" ) == 0 );
4640  }
4641  }
4642  FCT_TEST_END();
4643 
4644 
4645  FCT_TEST_BGN(gcm_nist_validation_aes_12812801024128_0)
4646  {
4647  unsigned char key_str[128];
4648  unsigned char src_str[128];
4649  unsigned char dst_str[257];
4650  unsigned char iv_str[128];
4651  unsigned char add_str[128];
4652  unsigned char tag_str[128];
4653  unsigned char output[128];
4654  unsigned char tag_output[16];
4655  gcm_context ctx;
4656  unsigned int key_len;
4657  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
4658 
4659  memset(key_str, 0x00, 128);
4660  memset(src_str, 0x00, 128);
4661  memset(dst_str, 0x00, 257);
4662  memset(iv_str, 0x00, 128);
4663  memset(add_str, 0x00, 128);
4664  memset(tag_str, 0x00, 128);
4665  memset(output, 0x00, 128);
4666  memset(tag_output, 0x00, 16);
4667 
4668  key_len = unhexify( key_str, "869ce65e5e5e12c620076365f149784f" );
4669  pt_len = unhexify( src_str, "" );
4670  iv_len = unhexify( iv_str, "317bf07e83c2e9717880b7d080957fe1" );
4671  add_len = unhexify( add_str, "ee185d738260de67f1792a7d548ea73267fbbb6543bc081fac43e00e6cca92d7d646f27054894664ffdcbe635e34cfa800912b59fdaa624b36c44c9ff4f193d3be2f97a7820a6d4ceabe967091ef672098baf82dd3b671cac4fd4f4b14e4ee388fbdaafb4dab2385df4fca23a78d31f11bca15eedd7cac778484258778106a07" );
4672 
4673  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4674  if( 0 == 0 )
4675  {
4676  fct_chk( 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 );
4677  hexify( dst_str, output, pt_len );
4678  hexify( tag_str, tag_output, tag_len );
4679 
4680  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4681  fct_chk( strcmp( (char *) tag_str, "add6c89153c4c0eead03df44487742a0" ) == 0 );
4682  }
4683  }
4684  FCT_TEST_END();
4685 
4686 
4687  FCT_TEST_BGN(gcm_nist_validation_aes_12812801024128_1)
4688  {
4689  unsigned char key_str[128];
4690  unsigned char src_str[128];
4691  unsigned char dst_str[257];
4692  unsigned char iv_str[128];
4693  unsigned char add_str[128];
4694  unsigned char tag_str[128];
4695  unsigned char output[128];
4696  unsigned char tag_output[16];
4697  gcm_context ctx;
4698  unsigned int key_len;
4699  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
4700 
4701  memset(key_str, 0x00, 128);
4702  memset(src_str, 0x00, 128);
4703  memset(dst_str, 0x00, 257);
4704  memset(iv_str, 0x00, 128);
4705  memset(add_str, 0x00, 128);
4706  memset(tag_str, 0x00, 128);
4707  memset(output, 0x00, 128);
4708  memset(tag_output, 0x00, 16);
4709 
4710  key_len = unhexify( key_str, "0a05baee927bf23dd2f4b57b90fb6434" );
4711  pt_len = unhexify( src_str, "" );
4712  iv_len = unhexify( iv_str, "8147e99dc9e462efea9c1d7f30bdf45c" );
4713  add_len = unhexify( add_str, "6424ca7fbf24c6c3b0b5eb9d769b26a9792c96a8585dc596208ae6cfc0b265bd8d26af31027f278bb92a9e3b365beae8d964ec7a4096513f84fa73f8739fa7e11d54d678bed19546d2b71b3d0166b25b47ad7cfa69d74057d889258a796a65f2bf8d3bb151f4e721d398e74594a186e6182c16fe4c8813dfec67215b3c4a94c0" );
4714 
4715  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4716  if( 0 == 0 )
4717  {
4718  fct_chk( 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 );
4719  hexify( dst_str, output, pt_len );
4720  hexify( tag_str, tag_output, tag_len );
4721 
4722  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4723  fct_chk( strcmp( (char *) tag_str, "05fac5520a99ad7fb407c48995a2c331" ) == 0 );
4724  }
4725  }
4726  FCT_TEST_END();
4727 
4728 
4729  FCT_TEST_BGN(gcm_nist_validation_aes_12812801024128_2)
4730  {
4731  unsigned char key_str[128];
4732  unsigned char src_str[128];
4733  unsigned char dst_str[257];
4734  unsigned char iv_str[128];
4735  unsigned char add_str[128];
4736  unsigned char tag_str[128];
4737  unsigned char output[128];
4738  unsigned char tag_output[16];
4739  gcm_context ctx;
4740  unsigned int key_len;
4741  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
4742 
4743  memset(key_str, 0x00, 128);
4744  memset(src_str, 0x00, 128);
4745  memset(dst_str, 0x00, 257);
4746  memset(iv_str, 0x00, 128);
4747  memset(add_str, 0x00, 128);
4748  memset(tag_str, 0x00, 128);
4749  memset(output, 0x00, 128);
4750  memset(tag_output, 0x00, 16);
4751 
4752  key_len = unhexify( key_str, "e28c435211743a7872e4a0bd7602336a" );
4753  pt_len = unhexify( src_str, "" );
4754  iv_len = unhexify( iv_str, "2ddbee94fcbfacea080ded468f67180c" );
4755  add_len = unhexify( add_str, "63190ef542656cc2b69a9b0daf8dbd2d38cd75f17b92d6d891c17b0337ad4fe4539d9154722fa430782a1d79620e974661918166e39c453c5a98759a13d2766138c7750e6cbdc7b6d7cbe44f3f4de7bb562d9bce6e6e2e815444842b89ba8b73454218c483e574ca886a84e8c9aa6f56dd1541a7e35a4a5b8f6a05ad5bb013e9" );
4756 
4757  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4758  if( 0 == 0 )
4759  {
4760  fct_chk( 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 );
4761  hexify( dst_str, output, pt_len );
4762  hexify( tag_str, tag_output, tag_len );
4763 
4764  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4765  fct_chk( strcmp( (char *) tag_str, "2ce6d74cda466354a736636bf18acfc0" ) == 0 );
4766  }
4767  }
4768  FCT_TEST_END();
4769 
4770 
4771  FCT_TEST_BGN(gcm_nist_validation_aes_12812801024120_0)
4772  {
4773  unsigned char key_str[128];
4774  unsigned char src_str[128];
4775  unsigned char dst_str[257];
4776  unsigned char iv_str[128];
4777  unsigned char add_str[128];
4778  unsigned char tag_str[128];
4779  unsigned char output[128];
4780  unsigned char tag_output[16];
4781  gcm_context ctx;
4782  unsigned int key_len;
4783  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
4784 
4785  memset(key_str, 0x00, 128);
4786  memset(src_str, 0x00, 128);
4787  memset(dst_str, 0x00, 257);
4788  memset(iv_str, 0x00, 128);
4789  memset(add_str, 0x00, 128);
4790  memset(tag_str, 0x00, 128);
4791  memset(output, 0x00, 128);
4792  memset(tag_output, 0x00, 16);
4793 
4794  key_len = unhexify( key_str, "2b2bec16c7d326a35a8e4c0b8c2e3674" );
4795  pt_len = unhexify( src_str, "" );
4796  iv_len = unhexify( iv_str, "4573eb54491ed91bfa2185b762115bc8" );
4797  add_len = unhexify( add_str, "7a4a6b3114dabc50b201472c5cb13a79430f78eedb2ba8492c01ce10a74d08565b9bf9874bb8fb72f694a23babdd08684cb68d7e09e65813728aaa5c41f9c2b10d921f8271e200e0c519c7c46f572bc9fe3f27e13d1e6d7bda4bd66c1c4b0fec8c68a1b0ed7b0659009dc894ad55e0712ddd0837315734f2bc3b757241af35ba" );
4798 
4799  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4800  if( 0 == 0 )
4801  {
4802  fct_chk( 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 );
4803  hexify( dst_str, output, pt_len );
4804  hexify( tag_str, tag_output, tag_len );
4805 
4806  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4807  fct_chk( strcmp( (char *) tag_str, "5f5d4695795b8580b0bc414a81b002" ) == 0 );
4808  }
4809  }
4810  FCT_TEST_END();
4811 
4812 
4813  FCT_TEST_BGN(gcm_nist_validation_aes_12812801024120_1)
4814  {
4815  unsigned char key_str[128];
4816  unsigned char src_str[128];
4817  unsigned char dst_str[257];
4818  unsigned char iv_str[128];
4819  unsigned char add_str[128];
4820  unsigned char tag_str[128];
4821  unsigned char output[128];
4822  unsigned char tag_output[16];
4823  gcm_context ctx;
4824  unsigned int key_len;
4825  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
4826 
4827  memset(key_str, 0x00, 128);
4828  memset(src_str, 0x00, 128);
4829  memset(dst_str, 0x00, 257);
4830  memset(iv_str, 0x00, 128);
4831  memset(add_str, 0x00, 128);
4832  memset(tag_str, 0x00, 128);
4833  memset(output, 0x00, 128);
4834  memset(tag_output, 0x00, 16);
4835 
4836  key_len = unhexify( key_str, "886fb12554b075dd9663efd076acbe56" );
4837  pt_len = unhexify( src_str, "" );
4838  iv_len = unhexify( iv_str, "7e7a73542868fc27a01865c3aa635ad5" );
4839  add_len = unhexify( add_str, "cb25c2f029c7a877a0aa565c7f7347b317ad534821edeeea838996dfc42b13787e5bb237525ac926ca8a6c5078210f4a27863e8114c728d09653fa93ae990e99f0c856bc8097c2cd33cdca1a407897e2f495d2e75356aabd891702f25ff20e6b6c8a785d74b78a734e311fd236f9e970202674004ee4151879d59340b20aa23b" );
4840 
4841  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4842  if( 0 == 0 )
4843  {
4844  fct_chk( 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 );
4845  hexify( dst_str, output, pt_len );
4846  hexify( tag_str, tag_output, tag_len );
4847 
4848  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4849  fct_chk( strcmp( (char *) tag_str, "8255116ee1e3cf936633017c4dec3a" ) == 0 );
4850  }
4851  }
4852  FCT_TEST_END();
4853 
4854 
4855  FCT_TEST_BGN(gcm_nist_validation_aes_12812801024120_2)
4856  {
4857  unsigned char key_str[128];
4858  unsigned char src_str[128];
4859  unsigned char dst_str[257];
4860  unsigned char iv_str[128];
4861  unsigned char add_str[128];
4862  unsigned char tag_str[128];
4863  unsigned char output[128];
4864  unsigned char tag_output[16];
4865  gcm_context ctx;
4866  unsigned int key_len;
4867  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
4868 
4869  memset(key_str, 0x00, 128);
4870  memset(src_str, 0x00, 128);
4871  memset(dst_str, 0x00, 257);
4872  memset(iv_str, 0x00, 128);
4873  memset(add_str, 0x00, 128);
4874  memset(tag_str, 0x00, 128);
4875  memset(output, 0x00, 128);
4876  memset(tag_output, 0x00, 16);
4877 
4878  key_len = unhexify( key_str, "920fdf4b39c63947d57a07eabbf3f2f5" );
4879  pt_len = unhexify( src_str, "" );
4880  iv_len = unhexify( iv_str, "77431ebaad53e42ca7eead0d45e5bd18" );
4881  add_len = unhexify( add_str, "11f82f9ef7c2161ba73cf7da82c5397da5e8278da180a976f43222402e983b057171f793641a8343d6366d6cc9260dfe8becb8396b5bcfa0f46908bd809bdab61126cbb8d63f601965fb9e4b3afd66c594dfd394d4cf06f79f361771a85dcead6f45dc7df10fa434736eb109a76fe6cda32c5773d4db6449494f2a3f6c884bfe" );
4882 
4883  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4884  if( 0 == 0 )
4885  {
4886  fct_chk( 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 );
4887  hexify( dst_str, output, pt_len );
4888  hexify( tag_str, tag_output, tag_len );
4889 
4890  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4891  fct_chk( strcmp( (char *) tag_str, "1291cbea1a9f8b166c7306ff9eb281" ) == 0 );
4892  }
4893  }
4894  FCT_TEST_END();
4895 
4896 
4897  FCT_TEST_BGN(gcm_nist_validation_aes_12812801024112_0)
4898  {
4899  unsigned char key_str[128];
4900  unsigned char src_str[128];
4901  unsigned char dst_str[257];
4902  unsigned char iv_str[128];
4903  unsigned char add_str[128];
4904  unsigned char tag_str[128];
4905  unsigned char output[128];
4906  unsigned char tag_output[16];
4907  gcm_context ctx;
4908  unsigned int key_len;
4909  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
4910 
4911  memset(key_str, 0x00, 128);
4912  memset(src_str, 0x00, 128);
4913  memset(dst_str, 0x00, 257);
4914  memset(iv_str, 0x00, 128);
4915  memset(add_str, 0x00, 128);
4916  memset(tag_str, 0x00, 128);
4917  memset(output, 0x00, 128);
4918  memset(tag_output, 0x00, 16);
4919 
4920  key_len = unhexify( key_str, "114060534f526895f30dfb4007356ea7" );
4921  pt_len = unhexify( src_str, "" );
4922  iv_len = unhexify( iv_str, "5ed7fb59618ec3d081e60d8259a3f184" );
4923  add_len = unhexify( add_str, "a56566a98d9d4fdcebc932adc405e0b8190d537f931983168283d0431e7589333d42f2a3d6e41f268e7b566cf48694cdcfe01fbb9198804ad39e7d387039575c5de787610a23ec265505a448c3a64ddac1b0d8c567eefe5c3c2dc1bb15af45b4bd8fc2e1506ddeb2e39e04f72fd24a64cbbbc929800e0687b53eb89b3049f271" );
4924 
4925  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4926  if( 0 == 0 )
4927  {
4928  fct_chk( 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 );
4929  hexify( dst_str, output, pt_len );
4930  hexify( tag_str, tag_output, tag_len );
4931 
4932  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4933  fct_chk( strcmp( (char *) tag_str, "62f770b3985388ac37e14e8d4696" ) == 0 );
4934  }
4935  }
4936  FCT_TEST_END();
4937 
4938 
4939  FCT_TEST_BGN(gcm_nist_validation_aes_12812801024112_1)
4940  {
4941  unsigned char key_str[128];
4942  unsigned char src_str[128];
4943  unsigned char dst_str[257];
4944  unsigned char iv_str[128];
4945  unsigned char add_str[128];
4946  unsigned char tag_str[128];
4947  unsigned char output[128];
4948  unsigned char tag_output[16];
4949  gcm_context ctx;
4950  unsigned int key_len;
4951  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
4952 
4953  memset(key_str, 0x00, 128);
4954  memset(src_str, 0x00, 128);
4955  memset(dst_str, 0x00, 257);
4956  memset(iv_str, 0x00, 128);
4957  memset(add_str, 0x00, 128);
4958  memset(tag_str, 0x00, 128);
4959  memset(output, 0x00, 128);
4960  memset(tag_output, 0x00, 16);
4961 
4962  key_len = unhexify( key_str, "697ca4e9de580b525d7149e8b69e8093" );
4963  pt_len = unhexify( src_str, "" );
4964  iv_len = unhexify( iv_str, "e844153734eaebd86983aa3bf50068df" );
4965  add_len = unhexify( add_str, "cedcd5ffeb7988837c38a0be4234ab1b03f14367a1a3854b6dc9f33eb9a87c411326e5cb7d12dc730cb6f363da2ba68affdfb651fe497942e0dd59668f56c23dae80b7bbf905d36b501ff037fcdffa472efa4bcc1c975b67e5d7f348db73e0ce648b44ecc5b5bbbdf3101bf32ea99e3c8e8991c94fa609c93d4b375a4389023b" );
4966 
4967  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4968  if( 0 == 0 )
4969  {
4970  fct_chk( 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 );
4971  hexify( dst_str, output, pt_len );
4972  hexify( tag_str, tag_output, tag_len );
4973 
4974  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4975  fct_chk( strcmp( (char *) tag_str, "95becb04cd39c868c9dbd1d4e59b" ) == 0 );
4976  }
4977  }
4978  FCT_TEST_END();
4979 
4980 
4981  FCT_TEST_BGN(gcm_nist_validation_aes_12812801024112_2)
4982  {
4983  unsigned char key_str[128];
4984  unsigned char src_str[128];
4985  unsigned char dst_str[257];
4986  unsigned char iv_str[128];
4987  unsigned char add_str[128];
4988  unsigned char tag_str[128];
4989  unsigned char output[128];
4990  unsigned char tag_output[16];
4991  gcm_context ctx;
4992  unsigned int key_len;
4993  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
4994 
4995  memset(key_str, 0x00, 128);
4996  memset(src_str, 0x00, 128);
4997  memset(dst_str, 0x00, 257);
4998  memset(iv_str, 0x00, 128);
4999  memset(add_str, 0x00, 128);
5000  memset(tag_str, 0x00, 128);
5001  memset(output, 0x00, 128);
5002  memset(tag_output, 0x00, 16);
5003 
5004  key_len = unhexify( key_str, "2fa92cc97ef469efeb2c25838193435a" );
5005  pt_len = unhexify( src_str, "" );
5006  iv_len = unhexify( iv_str, "07e6492f2377c04a85045d24940fbe8f" );
5007  add_len = unhexify( add_str, "0f021fb787c6de2be054bdb2741aef82ce35d951de2986c86c3dac77ee0804dfbd010d33a5dcc109769d4b8ff1471eb98fe917c7b0b374e80539f2f4432f92aa55d8398a71510c2acf85c54975fb09ff5638b936283efa3c1d3b054865f97685d6bfa0dfcffde3a20525b5324573b69dde230ea87c685e4f6b5c3c4c55828a86" );
5008 
5009  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5010  if( 0 == 0 )
5011  {
5012  fct_chk( 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 );
5013  hexify( dst_str, output, pt_len );
5014  hexify( tag_str, tag_output, tag_len );
5015 
5016  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
5017  fct_chk( strcmp( (char *) tag_str, "397b2b0dad7f1926bfc25a3ba0ca" ) == 0 );
5018  }
5019  }
5020  FCT_TEST_END();
5021 
5022 
5023  FCT_TEST_BGN(gcm_nist_validation_aes_12812801024104_0)
5024  {
5025  unsigned char key_str[128];
5026  unsigned char src_str[128];
5027  unsigned char dst_str[257];
5028  unsigned char iv_str[128];
5029  unsigned char add_str[128];
5030  unsigned char tag_str[128];
5031  unsigned char output[128];
5032  unsigned char tag_output[16];
5033  gcm_context ctx;
5034  unsigned int key_len;
5035  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
5036 
5037  memset(key_str, 0x00, 128);
5038  memset(src_str, 0x00, 128);
5039  memset(dst_str, 0x00, 257);
5040  memset(iv_str, 0x00, 128);
5041  memset(add_str, 0x00, 128);
5042  memset(tag_str, 0x00, 128);
5043  memset(output, 0x00, 128);
5044  memset(tag_output, 0x00, 16);
5045 
5046  key_len = unhexify( key_str, "a61f8a5777ec3da0c3e257d421286696" );
5047  pt_len = unhexify( src_str, "" );
5048  iv_len = unhexify( iv_str, "14894cc4ff71e249f0053bbc1680331f" );
5049  add_len = unhexify( add_str, "9df46dde257054160854248e70625183bf957ecec36fa4f5a79a1650e04b500f7f2fab4bb873f0e813f0d6b17610bde0de95427a8e2d1293dcdde053f5b1a5a81af25d553289e89e77e4ad7d0a1190151724730149050bd021ec61a08ce2271390161c752df8b5f61c33ee39366de4c1db41d085ab9dd88e170e8c41c571e2cf" );
5050 
5051  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5052  if( 0 == 0 )
5053  {
5054  fct_chk( 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 );
5055  hexify( dst_str, output, pt_len );
5056  hexify( tag_str, tag_output, tag_len );
5057 
5058  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
5059  fct_chk( strcmp( (char *) tag_str, "e062ab7984221ed226be353731" ) == 0 );
5060  }
5061  }
5062  FCT_TEST_END();
5063 
5064 
5065  FCT_TEST_BGN(gcm_nist_validation_aes_12812801024104_1)
5066  {
5067  unsigned char key_str[128];
5068  unsigned char src_str[128];
5069  unsigned char dst_str[257];
5070  unsigned char iv_str[128];
5071  unsigned char add_str[128];
5072  unsigned char tag_str[128];
5073  unsigned char output[128];
5074  unsigned char tag_output[16];
5075  gcm_context ctx;
5076  unsigned int key_len;
5077  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
5078 
5079  memset(key_str, 0x00, 128);
5080  memset(src_str, 0x00, 128);
5081  memset(dst_str, 0x00, 257);
5082  memset(iv_str, 0x00, 128);
5083  memset(add_str, 0x00, 128);
5084  memset(tag_str, 0x00, 128);
5085  memset(output, 0x00, 128);
5086  memset(tag_output, 0x00, 16);
5087 
5088  key_len = unhexify( key_str, "aa2d04f4f5258c6363b1210c91aff7d1" );
5089  pt_len = unhexify( src_str, "" );
5090  iv_len = unhexify( iv_str, "6b24c03273dcfd508cead2df0c65ef2d" );
5091  add_len = unhexify( add_str, "81a1b326f8f22bfecdf1f386bf8fe678a427e3886801b823a37860b9a832356724b1d352d6250cf8e8f89d0bf2314fd11464c3b4871478f0bc290ee1096c8f6cb5484176d70762289b44309d6a88e4750185abf30901bcf8d952da9abaaf9807c0c0ee8be2b247dbbfd182b83f9bfa67ca3bf448c3f5a3de3c31b058c3f944a9" );
5092 
5093  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5094  if( 0 == 0 )
5095  {
5096  fct_chk( 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 );
5097  hexify( dst_str, output, pt_len );
5098  hexify( tag_str, tag_output, tag_len );
5099 
5100  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
5101  fct_chk( strcmp( (char *) tag_str, "80dee09fed5183d6405beeb268" ) == 0 );
5102  }
5103  }
5104  FCT_TEST_END();
5105 
5106 
5107  FCT_TEST_BGN(gcm_nist_validation_aes_12812801024104_2)
5108  {
5109  unsigned char key_str[128];
5110  unsigned char src_str[128];
5111  unsigned char dst_str[257];
5112  unsigned char iv_str[128];
5113  unsigned char add_str[128];
5114  unsigned char tag_str[128];
5115  unsigned char output[128];
5116  unsigned char tag_output[16];
5117  gcm_context ctx;
5118  unsigned int key_len;
5119  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
5120 
5121  memset(key_str, 0x00, 128);
5122  memset(src_str, 0x00, 128);
5123  memset(dst_str, 0x00, 257);
5124  memset(iv_str, 0x00, 128);
5125  memset(add_str, 0x00, 128);
5126  memset(tag_str, 0x00, 128);
5127  memset(output, 0x00, 128);
5128  memset(tag_output, 0x00, 16);
5129 
5130  key_len = unhexify( key_str, "cf221e6cade9f6cf509afa6979cc1fb9" );
5131  pt_len = unhexify( src_str, "" );
5132  iv_len = unhexify( iv_str, "d35433be41a259dfaf58aac1d82af462" );
5133  add_len = unhexify( add_str, "b31c477490e5624c4aac8e590725bfa8b3efca618e2369e9b980d6a463a014d55aa8317a9e70ce6de7c574cd15242cf4eb3eb078cd2f49fd82d1a56c6c4241342e62a2e9d94f0aaa024055cb441d650f0a6ecabfe9ef563d6bd87d4cb1bed348aee42487c13b73e52fb70f0ca6ed81924fd519806e04babfd08df1a00191caa1" );
5134 
5135  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5136  if( 0 == 0 )
5137  {
5138  fct_chk( 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 );
5139  hexify( dst_str, output, pt_len );
5140  hexify( tag_str, tag_output, tag_len );
5141 
5142  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
5143  fct_chk( strcmp( (char *) tag_str, "f1776b1ee7a3c49f99f34f582d" ) == 0 );
5144  }
5145  }
5146  FCT_TEST_END();
5147 
5148 
5149  FCT_TEST_BGN(gcm_nist_validation_aes_1281280102496_0)
5150  {
5151  unsigned char key_str[128];
5152  unsigned char src_str[128];
5153  unsigned char dst_str[257];
5154  unsigned char iv_str[128];
5155  unsigned char add_str[128];
5156  unsigned char tag_str[128];
5157  unsigned char output[128];
5158  unsigned char tag_output[16];
5159  gcm_context ctx;
5160  unsigned int key_len;
5161  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
5162 
5163  memset(key_str, 0x00, 128);
5164  memset(src_str, 0x00, 128);
5165  memset(dst_str, 0x00, 257);
5166  memset(iv_str, 0x00, 128);
5167  memset(add_str, 0x00, 128);
5168  memset(tag_str, 0x00, 128);
5169  memset(output, 0x00, 128);
5170  memset(tag_output, 0x00, 16);
5171 
5172  key_len = unhexify( key_str, "c98eb634c7caf52d3f3d9f344e141988" );
5173  pt_len = unhexify( src_str, "" );
5174  iv_len = unhexify( iv_str, "a0e58176826910a69c2d68ae1c6a05c0" );
5175  add_len = unhexify( add_str, "6e559278bc469cc670c4d9105c3c2f8fa308e11b4a60f75664a9bfaff4f0176175ddd3c6c17ff91a208dbbc7c49efff099fa873f60849ffaa3a3003419cadaa06b92a678b80bf6c952bbbe596dd0a2eed35507c55c48a9e6131bcbda0621cff87e02be5d082944f2c8e27211527717272839601b0e26cb5aa2301afd05ae1b35" );
5176 
5177  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5178  if( 0 == 0 )
5179  {
5180  fct_chk( 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 );
5181  hexify( dst_str, output, pt_len );
5182  hexify( tag_str, tag_output, tag_len );
5183 
5184  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
5185  fct_chk( strcmp( (char *) tag_str, "3d8617b2db536ba7d367013c" ) == 0 );
5186  }
5187  }
5188  FCT_TEST_END();
5189 
5190 
5191  FCT_TEST_BGN(gcm_nist_validation_aes_1281280102496_1)
5192  {
5193  unsigned char key_str[128];
5194  unsigned char src_str[128];
5195  unsigned char dst_str[257];
5196  unsigned char iv_str[128];
5197  unsigned char add_str[128];
5198  unsigned char tag_str[128];
5199  unsigned char output[128];
5200  unsigned char tag_output[16];
5201  gcm_context ctx;
5202  unsigned int key_len;
5203  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
5204 
5205  memset(key_str, 0x00, 128);
5206  memset(src_str, 0x00, 128);
5207  memset(dst_str, 0x00, 257);
5208  memset(iv_str, 0x00, 128);
5209  memset(add_str, 0x00, 128);
5210  memset(tag_str, 0x00, 128);
5211  memset(output, 0x00, 128);
5212  memset(tag_output, 0x00, 16);
5213 
5214  key_len = unhexify( key_str, "c5018f4a8e2a850979b006d0498dd0fe" );
5215  pt_len = unhexify( src_str, "" );
5216  iv_len = unhexify( iv_str, "75e4bebdd170159cff59f895ebdeb118" );
5217  add_len = unhexify( add_str, "25ed2831fef205690381c73e925ef7ba20d5f2e3a4b5d7beabd749fafa08a6941acb1385aed977ea824322d378649f646a812e6c87ded6ae437c68ffdd4fae937a8498ae825d7523746730af84d56380be8f575c60e7f836a862343916e98cc2aa5a27cd63cd92df63b8bb47c81fa6a53740a125bb9cbb247c916363e60f5f65" );
5218 
5219  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5220  if( 0 == 0 )
5221  {
5222  fct_chk( 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 );
5223  hexify( dst_str, output, pt_len );
5224  hexify( tag_str, tag_output, tag_len );
5225 
5226  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
5227  fct_chk( strcmp( (char *) tag_str, "0aa5aced93e0237bea9a0015" ) == 0 );
5228  }
5229  }
5230  FCT_TEST_END();
5231 
5232 
5233  FCT_TEST_BGN(gcm_nist_validation_aes_1281280102496_2)
5234  {
5235  unsigned char key_str[128];
5236  unsigned char src_str[128];
5237  unsigned char dst_str[257];
5238  unsigned char iv_str[128];
5239  unsigned char add_str[128];
5240  unsigned char tag_str[128];
5241  unsigned char output[128];
5242  unsigned char tag_output[16];
5243  gcm_context ctx;
5244  unsigned int key_len;
5245  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
5246 
5247  memset(key_str, 0x00, 128);
5248  memset(src_str, 0x00, 128);
5249  memset(dst_str, 0x00, 257);
5250  memset(iv_str, 0x00, 128);
5251  memset(add_str, 0x00, 128);
5252  memset(tag_str, 0x00, 128);
5253  memset(output, 0x00, 128);
5254  memset(tag_output, 0x00, 16);
5255 
5256  key_len = unhexify( key_str, "cefd40aeac28fbea6e3343a125fe1c9a" );
5257  pt_len = unhexify( src_str, "" );
5258  iv_len = unhexify( iv_str, "324b9722166edc3831bd19c1db5bfbf2" );
5259  add_len = unhexify( add_str, "72b7a4289bf7f5a752665839adde8f79644424839db059ce40de326414c09691d5c7071e43722104a94e430e263bc974b98f167c50b97490bcd4286b502f607ddcec5387695463154bd9598ce8ffb6104d1f7010bc196ea2dcbfbf452d6257b1da00271fe1e6fb56c43656d5570b965e0369502443536cc46d4c05b1e863ed8f" );
5260 
5261  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5262  if( 0 == 0 )
5263  {
5264  fct_chk( 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 );
5265  hexify( dst_str, output, pt_len );
5266  hexify( tag_str, tag_output, tag_len );
5267 
5268  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
5269  fct_chk( strcmp( (char *) tag_str, "0c6b28de22e02fe6a4595d5f" ) == 0 );
5270  }
5271  }
5272  FCT_TEST_END();
5273 
5274 
5275  FCT_TEST_BGN(gcm_nist_validation_aes_1281280102464_0)
5276  {
5277  unsigned char key_str[128];
5278  unsigned char src_str[128];
5279  unsigned char dst_str[257];
5280  unsigned char iv_str[128];
5281  unsigned char add_str[128];
5282  unsigned char tag_str[128];
5283  unsigned char output[128];
5284  unsigned char tag_output[16];
5285  gcm_context ctx;
5286  unsigned int key_len;
5287  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
5288 
5289  memset(key_str, 0x00, 128);
5290  memset(src_str, 0x00, 128);
5291  memset(dst_str, 0x00, 257);
5292  memset(iv_str, 0x00, 128);
5293  memset(add_str, 0x00, 128);
5294  memset(tag_str, 0x00, 128);
5295  memset(output, 0x00, 128);
5296  memset(tag_output, 0x00, 16);
5297 
5298  key_len = unhexify( key_str, "58cb7cb58518ff3fecea4b44ad9fdef1" );
5299  pt_len = unhexify( src_str, "" );
5300  iv_len = unhexify( iv_str, "fe619efb1c9502c03cb8a70792f9e046" );
5301  add_len = unhexify( add_str, "1a7c444a84267f52c36f3c09f8c4a88b6ffe3309b8edaad93a08d3961af28b7c2baba5165f0a9efe13fa6a0ac595da156741dc7f728c11edbd8ab02f03e45716be504778a75374ee882af488bfbc6cdd58fd81d3ac5f369f85ba42c6fd7f9df4b25fdd2fd32607ea800047e06058388c4f71a5eb4d825e8578106041c84c25a1" );
5302 
5303  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5304  if( 0 == 0 )
5305  {
5306  fct_chk( 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 );
5307  hexify( dst_str, output, pt_len );
5308  hexify( tag_str, tag_output, tag_len );
5309 
5310  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
5311  fct_chk( strcmp( (char *) tag_str, "8243f32002d33cdd" ) == 0 );
5312  }
5313  }
5314  FCT_TEST_END();
5315 
5316 
5317  FCT_TEST_BGN(gcm_nist_validation_aes_1281280102464_1)
5318  {
5319  unsigned char key_str[128];
5320  unsigned char src_str[128];
5321  unsigned char dst_str[257];
5322  unsigned char iv_str[128];
5323  unsigned char add_str[128];
5324  unsigned char tag_str[128];
5325  unsigned char output[128];
5326  unsigned char tag_output[16];
5327  gcm_context ctx;
5328  unsigned int key_len;
5329  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
5330 
5331  memset(key_str, 0x00, 128);
5332  memset(src_str, 0x00, 128);
5333  memset(dst_str, 0x00, 257);
5334  memset(iv_str, 0x00, 128);
5335  memset(add_str, 0x00, 128);
5336  memset(tag_str, 0x00, 128);
5337  memset(output, 0x00, 128);
5338  memset(tag_output, 0x00, 16);
5339 
5340  key_len = unhexify( key_str, "15cc4cb979a343f4adfb821d6f6e9c66" );
5341  pt_len = unhexify( src_str, "" );
5342  iv_len = unhexify( iv_str, "68464e7eb64360c7c0a8540ac3473513" );
5343  add_len = unhexify( add_str, "d69f4a9595a48a50ec33ac1848df3d994eff838b28ea7c8b2c42876dadd60a3f9769bd4f61d8007c9dd4fde55edcec8f5ac3bf23b1a958fa714dd88cd5261edb69b7b086ef0f442179943f0871a6253aae99d31fdca448bc3efef353b5cc55cfc576e4a7fb73a5ab6b5af58dbd381bf7f9d69a5c2bfc902901fd485967b23bd9" );
5344 
5345  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5346  if( 0 == 0 )
5347  {
5348  fct_chk( 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 );
5349  hexify( dst_str, output, pt_len );
5350  hexify( tag_str, tag_output, tag_len );
5351 
5352  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
5353  fct_chk( strcmp( (char *) tag_str, "c0f4302d8276c3d3" ) == 0 );
5354  }
5355  }
5356  FCT_TEST_END();
5357 
5358 
5359  FCT_TEST_BGN(gcm_nist_validation_aes_1281280102464_2)
5360  {
5361  unsigned char key_str[128];
5362  unsigned char src_str[128];
5363  unsigned char dst_str[257];
5364  unsigned char iv_str[128];
5365  unsigned char add_str[128];
5366  unsigned char tag_str[128];
5367  unsigned char output[128];
5368  unsigned char tag_output[16];
5369  gcm_context ctx;
5370  unsigned int key_len;
5371  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
5372 
5373  memset(key_str, 0x00, 128);
5374  memset(src_str, 0x00, 128);
5375  memset(dst_str, 0x00, 257);
5376  memset(iv_str, 0x00, 128);
5377  memset(add_str, 0x00, 128);
5378  memset(tag_str, 0x00, 128);
5379  memset(output, 0x00, 128);
5380  memset(tag_output, 0x00, 16);
5381 
5382  key_len = unhexify( key_str, "6398de910ff8f3acdc2217811a1da2a1" );
5383  pt_len = unhexify( src_str, "" );
5384  iv_len = unhexify( iv_str, "fc69b21ec18195901ffa62260fa20454" );
5385  add_len = unhexify( add_str, "021f225240cc9a68c4886824d373f3a70fa32b3a926c78164642450287d269d39dbd49c8c71ce7b914f83e8b53bc61c6773f98318557b45f0cc2ef2539939df7a1e6765117f75631dc5640291d20e6402d22cd2e231f9c2c67cb24ab5d8a69933c49b89c9fb2ea57136a6bf1bffe8e04d8d6c813040215f051c654d93224edfc" );
5386 
5387  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5388  if( 0 == 0 )
5389  {
5390  fct_chk( 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 );
5391  hexify( dst_str, output, pt_len );
5392  hexify( tag_str, tag_output, tag_len );
5393 
5394  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
5395  fct_chk( strcmp( (char *) tag_str, "314d1a332d3c590b" ) == 0 );
5396  }
5397  }
5398  FCT_TEST_END();
5399 
5400 
5401  FCT_TEST_BGN(gcm_nist_validation_aes_1281280102432_0)
5402  {
5403  unsigned char key_str[128];
5404  unsigned char src_str[128];
5405  unsigned char dst_str[257];
5406  unsigned char iv_str[128];
5407  unsigned char add_str[128];
5408  unsigned char tag_str[128];
5409  unsigned char output[128];
5410  unsigned char tag_output[16];
5411  gcm_context ctx;
5412  unsigned int key_len;
5413  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
5414 
5415  memset(key_str, 0x00, 128);
5416  memset(src_str, 0x00, 128);
5417  memset(dst_str, 0x00, 257);
5418  memset(iv_str, 0x00, 128);
5419  memset(add_str, 0x00, 128);
5420  memset(tag_str, 0x00, 128);
5421  memset(output, 0x00, 128);
5422  memset(tag_output, 0x00, 16);
5423 
5424  key_len = unhexify( key_str, "382d86868ccd08d417d94f3b73729e09" );
5425  pt_len = unhexify( src_str, "" );
5426  iv_len = unhexify( iv_str, "069069c377958235171437b34e0fce76" );
5427  add_len = unhexify( add_str, "049af372e34ef7a92d0d49cf2dd03052dabacf2982eae6a817e6146ad799971be239ef5810ec3f6cc6990e9641a7b696392ad3faee38bb50746c1e93913c02dbbcbc6bf54f0d062f176779b7c0dd5d7ec7752601c9812fa80508a78bbd26922bed4f64b1ff2a8340ce1c01e317e3526cd8218ac24af87b07f8792849f6479b8e" );
5428 
5429  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5430  if( 0 == 0 )
5431  {
5432  fct_chk( 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 );
5433  hexify( dst_str, output, pt_len );
5434  hexify( tag_str, tag_output, tag_len );
5435 
5436  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
5437  fct_chk( strcmp( (char *) tag_str, "ffa59fa2" ) == 0 );
5438  }
5439  }
5440  FCT_TEST_END();
5441 
5442 
5443  FCT_TEST_BGN(gcm_nist_validation_aes_1281280102432_1)
5444  {
5445  unsigned char key_str[128];
5446  unsigned char src_str[128];
5447  unsigned char dst_str[257];
5448  unsigned char iv_str[128];
5449  unsigned char add_str[128];
5450  unsigned char tag_str[128];
5451  unsigned char output[128];
5452  unsigned char tag_output[16];
5453  gcm_context ctx;
5454  unsigned int key_len;
5455  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
5456 
5457  memset(key_str, 0x00, 128);
5458  memset(src_str, 0x00, 128);
5459  memset(dst_str, 0x00, 257);
5460  memset(iv_str, 0x00, 128);
5461  memset(add_str, 0x00, 128);
5462  memset(tag_str, 0x00, 128);
5463  memset(output, 0x00, 128);
5464  memset(tag_output, 0x00, 16);
5465 
5466  key_len = unhexify( key_str, "21052b2fc7bc7a662aa9dc4b6a04f25d" );
5467  pt_len = unhexify( src_str, "" );
5468  iv_len = unhexify( iv_str, "d7e5432def6a24d486a608e5c5c919a8" );
5469  add_len = unhexify( add_str, "1970ed40003bccabf7f3c57bbe5ba27e4254c1511413ed421cef3a6ffb9f0192987de83ae965478c3e9979637f8b3fa5d10d69b916f03fdc92ace7736f171660156d880114aefdcc164adb6f8c03940d9b43ce8881441b41cafee3351a56fcb632aa4b09ea81adea26fb0d8c6e1ae380df922a429ae1f5b82b38d9bda4323c51" );
5470 
5471  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5472  if( 0 == 0 )
5473  {
5474  fct_chk( 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 );
5475  hexify( dst_str, output, pt_len );
5476  hexify( tag_str, tag_output, tag_len );
5477 
5478  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
5479  fct_chk( strcmp( (char *) tag_str, "ff342f4b" ) == 0 );
5480  }
5481  }
5482  FCT_TEST_END();
5483 
5484 
5485  FCT_TEST_BGN(gcm_nist_validation_aes_1281280102432_2)
5486  {
5487  unsigned char key_str[128];
5488  unsigned char src_str[128];
5489  unsigned char dst_str[257];
5490  unsigned char iv_str[128];
5491  unsigned char add_str[128];
5492  unsigned char tag_str[128];
5493  unsigned char output[128];
5494  unsigned char tag_output[16];
5495  gcm_context ctx;
5496  unsigned int key_len;
5497  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
5498 
5499  memset(key_str, 0x00, 128);
5500  memset(src_str, 0x00, 128);
5501  memset(dst_str, 0x00, 257);
5502  memset(iv_str, 0x00, 128);
5503  memset(add_str, 0x00, 128);
5504  memset(tag_str, 0x00, 128);
5505  memset(output, 0x00, 128);
5506  memset(tag_output, 0x00, 16);
5507 
5508  key_len = unhexify( key_str, "b6c53aa91a115db64653016375bd747e" );
5509  pt_len = unhexify( src_str, "" );
5510  iv_len = unhexify( iv_str, "8163a4fd9c2c7010bc85c86177b194ab" );
5511  add_len = unhexify( add_str, "93cddd318b999262c7cde2838cb5c4d78f3eb1e78d305e5f808fa5613526d724e84a0188ff42a2c34bdf3b5fff70e82b3c30346e179fb3faf378bc4e207e335a44da53a5ae33770104b95397fb5acb746e6418d0dfc7368b035af53b470fc66bd0c210b68ce1b276820b621e919f044e5cff5ced7e07dbb8825bca6b4ddd8ee2" );
5512 
5513  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5514  if( 0 == 0 )
5515  {
5516  fct_chk( 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 );
5517  hexify( dst_str, output, pt_len );
5518  hexify( tag_str, tag_output, tag_len );
5519 
5520  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
5521  fct_chk( strcmp( (char *) tag_str, "50b8acce" ) == 0 );
5522  }
5523  }
5524  FCT_TEST_END();
5525 
5526 
5527  FCT_TEST_BGN(gcm_nist_validation_aes_12812810240128_0)
5528  {
5529  unsigned char key_str[128];
5530  unsigned char src_str[128];
5531  unsigned char dst_str[257];
5532  unsigned char iv_str[128];
5533  unsigned char add_str[128];
5534  unsigned char tag_str[128];
5535  unsigned char output[128];
5536  unsigned char tag_output[16];
5537  gcm_context ctx;
5538  unsigned int key_len;
5539  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
5540 
5541  memset(key_str, 0x00, 128);
5542  memset(src_str, 0x00, 128);
5543  memset(dst_str, 0x00, 257);
5544  memset(iv_str, 0x00, 128);
5545  memset(add_str, 0x00, 128);
5546  memset(tag_str, 0x00, 128);
5547  memset(output, 0x00, 128);
5548  memset(tag_output, 0x00, 16);
5549 
5550  key_len = unhexify( key_str, "2251815f5bdfe1111c7f9ca246662f93" );
5551  pt_len = unhexify( src_str, "2247e781763edb1349db2cda53e5853b726c697b34497761373c3b6a1c44939207e570e14ea94bd5f9bf9b79de9cafedeabc9241e9147453648071f2240e10488c6e3d7077750a6f7ede235d44c5a96392778ec51f8aeb1a17fabe9b6c95fbc479fff954a676813ad3d2f71c76b9d096a0527f2e1b151aa8972147582c0fd2bf" );
5552  iv_len = unhexify( iv_str, "58973280c2a7122ddfcb25eb33e7270c" );
5553  add_len = unhexify( add_str, "" );
5554 
5555  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5556  if( 0 == 0 )
5557  {
5558  fct_chk( 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 );
5559  hexify( dst_str, output, pt_len );
5560  hexify( tag_str, tag_output, tag_len );
5561 
5562  fct_chk( strcmp( (char *) dst_str, "b202eb243338849600e2feba7f25a05fe98323bd7cb721ac49d5a8136422564391462439fd92caad95fc8cdcaa9a797e1df3ef6ba7af6c761ceaf8922436dd5c8b1b257f801c40914c1331deb274c58eed102fd5fa63161c697e63dc9dfe60bd83cea885d241983a7e5f0d6a8fd02762084d52bf88ec35f156934e53dffc0395" ) == 0 );
5563  fct_chk( strcmp( (char *) tag_str, "c3701ce3284d08145ad8c6d48e4ced8c" ) == 0 );
5564  }
5565  }
5566  FCT_TEST_END();
5567 
5568 
5569  FCT_TEST_BGN(gcm_nist_validation_aes_12812810240128_1)
5570  {
5571  unsigned char key_str[128];
5572  unsigned char src_str[128];
5573  unsigned char dst_str[257];
5574  unsigned char iv_str[128];
5575  unsigned char add_str[128];
5576  unsigned char tag_str[128];
5577  unsigned char output[128];
5578  unsigned char tag_output[16];
5579  gcm_context ctx;
5580  unsigned int key_len;
5581  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
5582 
5583  memset(key_str, 0x00, 128);
5584  memset(src_str, 0x00, 128);
5585  memset(dst_str, 0x00, 257);
5586  memset(iv_str, 0x00, 128);
5587  memset(add_str, 0x00, 128);
5588  memset(tag_str, 0x00, 128);
5589  memset(output, 0x00, 128);
5590  memset(tag_output, 0x00, 16);
5591 
5592  key_len = unhexify( key_str, "3199b70e7115c74e3aa3745c18fce8d1" );
5593  pt_len = unhexify( src_str, "4fa0b090652d5a8dcd9b5f2ceaaa2dc87a40b30e2d59bdff09e1f204d1b90371de70935c385cf5b4d7e0c4e88661f418705370b901b97bf199b366e669bc727882d4aedf8171a8c39431f11af830358cd0d9e110da1a0cc6ef70efb255efdac1dc61e722a2d8b7fb4cd752c6350d558ae1ccd1c89f8ba44ab697df96681ee301" );
5594  iv_len = unhexify( iv_str, "808a019f7fb761e9701c0c4f1a1690e4" );
5595  add_len = unhexify( add_str, "" );
5596 
5597  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5598  if( 0 == 0 )
5599  {
5600  fct_chk( 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 );
5601  hexify( dst_str, output, pt_len );
5602  hexify( tag_str, tag_output, tag_len );
5603 
5604  fct_chk( strcmp( (char *) dst_str, "8d5ed4146fb491db9456e92f753aa4f688a9bc276e6aebb782a0cdf7fe578d74ca3946fa7b7893eff6345e64251cb1b146442acb64041324e2847481fd4388b17f83206948e67c1e66b894d5d40ecac0bbe4db0c6f58b65a1f19f29429a9e76f78ef5dba0c94d88dfc06e6222a506f004d24cdb3fe26d6eb6e08e4fdf6289651" ) == 0 );
5605  fct_chk( strcmp( (char *) tag_str, "908806d668451d849ba0268523eb0e4a" ) == 0 );
5606  }
5607  }
5608  FCT_TEST_END();
5609 
5610 
5611  FCT_TEST_BGN(gcm_nist_validation_aes_12812810240128_2)
5612  {
5613  unsigned char key_str[128];
5614  unsigned char src_str[128];
5615  unsigned char dst_str[257];
5616  unsigned char iv_str[128];
5617  unsigned char add_str[128];
5618  unsigned char tag_str[128];
5619  unsigned char output[128];
5620  unsigned char tag_output[16];
5621  gcm_context ctx;
5622  unsigned int key_len;
5623  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
5624 
5625  memset(key_str, 0x00, 128);
5626  memset(src_str, 0x00, 128);
5627  memset(dst_str, 0x00, 257);
5628  memset(iv_str, 0x00, 128);
5629  memset(add_str, 0x00, 128);
5630  memset(tag_str, 0x00, 128);
5631  memset(output, 0x00, 128);
5632  memset(tag_output, 0x00, 16);
5633 
5634  key_len = unhexify( key_str, "63805cef84ca7fcf281b226c3ae37230" );
5635  pt_len = unhexify( src_str, "543fd64d1454ef6c007ee96b3ff5d2e4b7f5d15c23e7548dfd1dfad4da7774b8795e817fab3be7fbf8e4d0d351a743ea793d9d01385a552f78ede054be079aebd1511013de2096456e9fc1b83457fa1240cd39c17440d4b55c4e390119a759055ac851a02ea481eb83e294922d35f687a56d801eed638d289350e141116ffba8" );
5636  iv_len = unhexify( iv_str, "1aa9e75d7854509a85d995ee482b8eca" );
5637  add_len = unhexify( add_str, "" );
5638 
5639  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5640  if( 0 == 0 )
5641  {
5642  fct_chk( 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 );
5643  hexify( dst_str, output, pt_len );
5644  hexify( tag_str, tag_output, tag_len );
5645 
5646  fct_chk( strcmp( (char *) dst_str, "98db9e8e3ff23f09e585e5326f525e4f8350a1f233a0aebd60d5951583eaf5220f1690ee3607ba98cf8cc99a90efb7197835957f2bda918a32e528f55d548e3c83d65910b956634224cd5415ff0332c165d1241f7a93976649ebed2cc7e62addb76231bb738ee8a291b62365965392aeb72acc5f0fbd2f88f5613fcf44a1b074" ) == 0 );
5647  fct_chk( strcmp( (char *) tag_str, "9b1baa0b318e1f6e953a9f90b21cd914" ) == 0 );
5648  }
5649  }
5650  FCT_TEST_END();
5651 
5652 
5653  FCT_TEST_BGN(gcm_nist_validation_aes_12812810240120_0)
5654  {
5655  unsigned char key_str[128];
5656  unsigned char src_str[128];
5657  unsigned char dst_str[257];
5658  unsigned char iv_str[128];
5659  unsigned char add_str[128];
5660  unsigned char tag_str[128];
5661  unsigned char output[128];
5662  unsigned char tag_output[16];
5663  gcm_context ctx;
5664  unsigned int key_len;
5665  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
5666 
5667  memset(key_str, 0x00, 128);
5668  memset(src_str, 0x00, 128);
5669  memset(dst_str, 0x00, 257);
5670  memset(iv_str, 0x00, 128);
5671  memset(add_str, 0x00, 128);
5672  memset(tag_str, 0x00, 128);
5673  memset(output, 0x00, 128);
5674  memset(tag_output, 0x00, 16);
5675 
5676  key_len = unhexify( key_str, "2ec9245e8f567e1cc8795bbf72f2999b" );
5677  pt_len = unhexify( src_str, "f266d0060d290339def5f6d8dbf7d120a4c645aa90470e168b4f35342a00b8c7b7230003657d377d8568d252765df142e97a9dbfb9711d9ccf396f3d51bd91673f129d58efd80ab83a0678303e29a0dbeb1fa9fdb7fbde586a17ace65e894374ec8da1ccd3e21851ab998534de46cb43b38e241edc04b5c571dfc0aa0074d4fa" );
5678  iv_len = unhexify( iv_str, "413628d9ff3e4067d840b0abc2cda0eb" );
5679  add_len = unhexify( add_str, "" );
5680 
5681  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5682  if( 0 == 0 )
5683  {
5684  fct_chk( 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 );
5685  hexify( dst_str, output, pt_len );
5686  hexify( tag_str, tag_output, tag_len );
5687 
5688  fct_chk( strcmp( (char *) dst_str, "145d83092a269c8afea604e9192b8bb550b9bea85f842fcc4997c2b00c6f3ca46100e814e82389f27a69a12d29340c5827e607657a00fc72c4de30079e23760769e800ee4ce46957f82d61935d07d1c70dca836c19969dfd0fe0ea740a52e2d09b1c9aa137b5e8527756fb2c2298f8400949ba24a8351c1093626723a68a79f5" ) == 0 );
5689  fct_chk( strcmp( (char *) tag_str, "ad174d1edc713c187a5859a390fff8" ) == 0 );
5690  }
5691  }
5692  FCT_TEST_END();
5693 
5694 
5695  FCT_TEST_BGN(gcm_nist_validation_aes_12812810240120_1)
5696  {
5697  unsigned char key_str[128];
5698  unsigned char src_str[128];
5699  unsigned char dst_str[257];
5700  unsigned char iv_str[128];
5701  unsigned char add_str[128];
5702  unsigned char tag_str[128];
5703  unsigned char output[128];
5704  unsigned char tag_output[16];
5705  gcm_context ctx;
5706  unsigned int key_len;
5707  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
5708 
5709  memset(key_str, 0x00, 128);
5710  memset(src_str, 0x00, 128);
5711  memset(dst_str, 0x00, 257);
5712  memset(iv_str, 0x00, 128);
5713  memset(add_str, 0x00, 128);
5714  memset(tag_str, 0x00, 128);
5715  memset(output, 0x00, 128);
5716  memset(tag_output, 0x00, 16);
5717 
5718  key_len = unhexify( key_str, "b08df4acd253f9dd4abc52c4be488015" );
5719  pt_len = unhexify( src_str, "82f665910d853fd2b775bf66a1707935443574c90483fc33ba02d6479fafd99c5f816bc58a1393a44fb32711fbeb0d6936efeb3580f147c3019e9f2e2ef48b202bdd369c277791bce524f3b22ceb74c664143c4b1da819b229a5b480aa954be110ca006615d9cff5a158342a47cb6d04fbb817ae4ddff6d4f86b74205799c9c0" );
5720  iv_len = unhexify( iv_str, "e1c27d35520ea527f9a2cd9b0f717841" );
5721  add_len = unhexify( add_str, "" );
5722 
5723  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5724  if( 0 == 0 )
5725  {
5726  fct_chk( 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 );
5727  hexify( dst_str, output, pt_len );
5728  hexify( tag_str, tag_output, tag_len );
5729 
5730  fct_chk( strcmp( (char *) dst_str, "f5b0fcd812061be999901595b3547e70f7144cc9e0b0098262be4c440e8637af782f536f571534a658ad1fb44360d9c454d1000d6957f261401e09c0f19f5146ee5433e378423f9c94a90af2185d38cbe2940a459d8409d987d04a1f3e686c2b91d4fae1f3e3bdc5a30569838201b7d30c7320d7cbd787bfd6cd40e7e2d071a1" ) == 0 );
5731  fct_chk( strcmp( (char *) tag_str, "fa31e58fa32d1208dd8a67fed44033" ) == 0 );
5732  }
5733  }
5734  FCT_TEST_END();
5735 
5736 
5737  FCT_TEST_BGN(gcm_nist_validation_aes_12812810240120_2)
5738  {
5739  unsigned char key_str[128];
5740  unsigned char src_str[128];
5741  unsigned char dst_str[257];
5742  unsigned char iv_str[128];
5743  unsigned char add_str[128];
5744  unsigned char tag_str[128];
5745  unsigned char output[128];
5746  unsigned char tag_output[16];
5747  gcm_context ctx;
5748  unsigned int key_len;
5749  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
5750 
5751  memset(key_str, 0x00, 128);
5752  memset(src_str, 0x00, 128);
5753  memset(dst_str, 0x00, 257);
5754  memset(iv_str, 0x00, 128);
5755  memset(add_str, 0x00, 128);
5756  memset(tag_str, 0x00, 128);
5757  memset(output, 0x00, 128);
5758  memset(tag_output, 0x00, 16);
5759 
5760  key_len = unhexify( key_str, "9c08d6efb167beb035f71554f64c12cd" );
5761  pt_len = unhexify( src_str, "704f59d5202108b949170532ac1e78edb0e06fa323c1c69202d7d22dea4d7342199cebe949e980a21ff0fac282b868cc31ff4f6674c393c0f2cae2374664314afaf7791974b6bd6af26ade7fc266a6cd2de4f3c1f479f895ff597998cc8b929c1f05db13d9b9a4d98c9bc606eee32915bbdaeec6576e1fa6e8b22e0bb1098074" );
5762  iv_len = unhexify( iv_str, "608d56f6dea2fdf175eae189d42a85fb" );
5763  add_len = unhexify( add_str, "" );
5764 
5765  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5766  if( 0 == 0 )
5767  {
5768  fct_chk( 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 );
5769  hexify( dst_str, output, pt_len );
5770  hexify( tag_str, tag_output, tag_len );
5771 
5772  fct_chk( strcmp( (char *) dst_str, "2c7d2618808adcf8edf5a54119471b930e07488d5fac3dcb53f4ade43674d162881bee1f27dea6d158b254d4b432e17f211515bf595a9874d89f8cf748ddaf2324078029c6463312ad32eb0aa5ebefc31c7fbfd04b37ba6b766375952c211d160b943e9d3c5e144b581157bff9071d31cfc082b55c4a0fced386ef2fc75e1a7b" ) == 0 );
5773  fct_chk( strcmp( (char *) tag_str, "7a1ae03e2838294e286dca4fbbd9f1" ) == 0 );
5774  }
5775  }
5776  FCT_TEST_END();
5777 
5778 
5779  FCT_TEST_BGN(gcm_nist_validation_aes_12812810240112_0)
5780  {
5781  unsigned char key_str[128];
5782  unsigned char src_str[128];
5783  unsigned char dst_str[257];
5784  unsigned char iv_str[128];
5785  unsigned char add_str[128];
5786  unsigned char tag_str[128];
5787  unsigned char output[128];
5788  unsigned char tag_output[16];
5789  gcm_context ctx;
5790  unsigned int key_len;
5791  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
5792 
5793  memset(key_str, 0x00, 128);
5794  memset(src_str, 0x00, 128);
5795  memset(dst_str, 0x00, 257);
5796  memset(iv_str, 0x00, 128);
5797  memset(add_str, 0x00, 128);
5798  memset(tag_str, 0x00, 128);
5799  memset(output, 0x00, 128);
5800  memset(tag_output, 0x00, 16);
5801 
5802  key_len = unhexify( key_str, "192dbfdf86e48bf18710e706dc90e356" );
5803  pt_len = unhexify( src_str, "1d7c45c8ef6f9f073c7f186e4c876c2b8fbf22feeecdc111a19071f276e838ab0572c9a68e9ad464fa88ba8d8a162e9f5ee1c4983395a890990357673467988c057eb8a0342c41867baab41456edc3932531d1c4aa0b42ce2b388d2be579dfe332f40a9b864c5e33e2b3cfd73b68d65c4db9ec46d3ba1587a56cb7887dcb3c5e" );
5804  iv_len = unhexify( iv_str, "1a511f85e0e138f4241882c20689f881" );
5805  add_len = unhexify( add_str, "" );
5806 
5807  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5808  if( 0 == 0 )
5809  {
5810  fct_chk( 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 );
5811  hexify( dst_str, output, pt_len );
5812  hexify( tag_str, tag_output, tag_len );
5813 
5814  fct_chk( strcmp( (char *) dst_str, "3e50e821fbf83433155de7b4eb3c9a2c148b08d9d3998a3486f517fb5d0a1338faabbf95e85fa9186385bcb9e26aaa5e473d3cc7af869872e4fb36ad16c5468d994e9c71a09dd2868977f3f9064664f6ffcbac1bd313a7803c304273d69ad20369bad36adeb38480563bc6db9aa0d11a0e03d09731171c1229a756037b2c285c" ) == 0 );
5815  fct_chk( strcmp( (char *) tag_str, "9393edf0934796eb97a8c513bbfc" ) == 0 );
5816  }
5817  }
5818  FCT_TEST_END();
5819 
5820 
5821  FCT_TEST_BGN(gcm_nist_validation_aes_12812810240112_1)
5822  {
5823  unsigned char key_str[128];
5824  unsigned char src_str[128];
5825  unsigned char dst_str[257];
5826  unsigned char iv_str[128];
5827  unsigned char add_str[128];
5828  unsigned char tag_str[128];
5829  unsigned char output[128];
5830  unsigned char tag_output[16];
5831  gcm_context ctx;
5832  unsigned int key_len;
5833  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
5834 
5835  memset(key_str, 0x00, 128);
5836  memset(src_str, 0x00, 128);
5837  memset(dst_str, 0x00, 257);
5838  memset(iv_str, 0x00, 128);
5839  memset(add_str, 0x00, 128);
5840  memset(tag_str, 0x00, 128);
5841  memset(output, 0x00, 128);
5842  memset(tag_output, 0x00, 16);
5843 
5844  key_len = unhexify( key_str, "daf9455bad8bee905c6cd464677b803f" );
5845  pt_len = unhexify( src_str, "af04226cc6eb84f8167a68c2cfde33a1521dcbe781e7b97a3fae732bcd8c0616a588200328902faa5a65a27e769a720d7ea23333cc1c66c4d4e4c53facca5d6af06aea7fb49b12b04cd6ae38fe28d71cd66f769d640beeb07f508a0e3f856902cbfde6919077de378cf0486cf177f897cd0a56b69db3a31b448ebbf8fdf63736" );
5846  iv_len = unhexify( iv_str, "6cfe8490e892f5ddba8bbd1cd522ba0b" );
5847  add_len = unhexify( add_str, "" );
5848 
5849  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5850  if( 0 == 0 )
5851  {
5852  fct_chk( 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 );
5853  hexify( dst_str, output, pt_len );
5854  hexify( tag_str, tag_output, tag_len );
5855 
5856  fct_chk( strcmp( (char *) dst_str, "e5622ca7360272a33e30f7fbeaa00956e8af0d871c433c070c8854d818eab9717293e845106770ec07da372c75266239a225ad74465e255520218c6736e51070477d70976aa7d449c32a5c85bbd6931c76e9e4355f9697bad2ea3bcc0be005da15c62db219b074b71fe4a5512157143df2c1f70bb17c6d3740d8d20eef88535f" ) == 0 );
5857  fct_chk( strcmp( (char *) tag_str, "25fe6c9b2303b40ed31d1beea39a" ) == 0 );
5858  }
5859  }
5860  FCT_TEST_END();
5861 
5862 
5863  FCT_TEST_BGN(gcm_nist_validation_aes_12812810240112_2)
5864  {
5865  unsigned char key_str[128];
5866  unsigned char src_str[128];
5867  unsigned char dst_str[257];
5868  unsigned char iv_str[128];
5869  unsigned char add_str[128];
5870  unsigned char tag_str[128];
5871  unsigned char output[128];
5872  unsigned char tag_output[16];
5873  gcm_context ctx;
5874  unsigned int key_len;
5875  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
5876 
5877  memset(key_str, 0x00, 128);
5878  memset(src_str, 0x00, 128);
5879  memset(dst_str, 0x00, 257);
5880  memset(iv_str, 0x00, 128);
5881  memset(add_str, 0x00, 128);
5882  memset(tag_str, 0x00, 128);
5883  memset(output, 0x00, 128);
5884  memset(tag_output, 0x00, 16);
5885 
5886  key_len = unhexify( key_str, "82d166dddcbf4f7f66aa5ac6b12516bc" );
5887  pt_len = unhexify( src_str, "7883f4f96c0ef7f6d9fd7c2eaad25995943078559eb24a3e6650126ddaa32301b04f737dc27b648d6115ce08feac862cb888073b22aa648c752934bb7f9c566209a97499236f782758d6f6f9a012a2fb6885ca91858f9779cc93950baa731f1874629351e6186935475a20593f66cddefff89be0fc0f9b57695b147d9acd8157" );
5888  iv_len = unhexify( iv_str, "540c2a07689bf314bc8ede71df3f4358" );
5889  add_len = unhexify( add_str, "" );
5890 
5891  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5892  if( 0 == 0 )
5893  {
5894  fct_chk( 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 );
5895  hexify( dst_str, output, pt_len );
5896  hexify( tag_str, tag_output, tag_len );
5897 
5898  fct_chk( strcmp( (char *) dst_str, "44806e76a40bbbc2de860cd36e93d64c9f4c11994f754db6a279d6eaecfdf19966512de5223d8332a407381114d50fadb03e33e347a5f4d87c3fbf35f2d5967ba295003a2c6c12fba8394aa5b7a31365791c630734a6b2ef84eed0738cb4bc229e93c4e8529aaeadecff7ab93887b9fad5f05a88a5ba9fb449053ce4c6375d1f" ) == 0 );
5899  fct_chk( strcmp( (char *) tag_str, "756d65c1b8a04485c3944e2a3cbc" ) == 0 );
5900  }
5901  }
5902  FCT_TEST_END();
5903 
5904 
5905  FCT_TEST_BGN(gcm_nist_validation_aes_12812810240104_0)
5906  {
5907  unsigned char key_str[128];
5908  unsigned char src_str[128];
5909  unsigned char dst_str[257];
5910  unsigned char iv_str[128];
5911  unsigned char add_str[128];
5912  unsigned char tag_str[128];
5913  unsigned char output[128];
5914  unsigned char tag_output[16];
5915  gcm_context ctx;
5916  unsigned int key_len;
5917  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
5918 
5919  memset(key_str, 0x00, 128);
5920  memset(src_str, 0x00, 128);
5921  memset(dst_str, 0x00, 257);
5922  memset(iv_str, 0x00, 128);
5923  memset(add_str, 0x00, 128);
5924  memset(tag_str, 0x00, 128);
5925  memset(output, 0x00, 128);
5926  memset(tag_output, 0x00, 16);
5927 
5928  key_len = unhexify( key_str, "81c1fca371968513a68ac09a7459042d" );
5929  pt_len = unhexify( src_str, "182cb89c94171b685016bad76c445cc4561aff8e3170dd251f62efbd44910ddf8eba8a67dd1a237f2f7336f436edcfbdf9928e94c3488189110d672488c6c4e0dc4a1fb6e67dee9a1bfc3f49d2f934f305f139e98f0ba9c1ab56b5ce9ddce4ab54b6970bf6499e5e825abbb23f9e320ee05aaf0d712c09b0134839c5609e178a" );
5930  iv_len = unhexify( iv_str, "7c962a92b8daa294b4962cc3020dcd0b" );
5931  add_len = unhexify( add_str, "" );
5932 
5933  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5934  if( 0 == 0 )
5935  {
5936  fct_chk( 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 );
5937  hexify( dst_str, output, pt_len );
5938  hexify( tag_str, tag_output, tag_len );
5939 
5940  fct_chk( strcmp( (char *) dst_str, "f91e36c79db6789a3acec9e82ec777efc1958e7e5634d30a60239eb7cae1b48f40557965e8a6f6993db3f4ae443ba167753c89f52f610ab69159ff60233310c1bb2baccb936433270f8839758bc85c53604e771e3ab0df6d6bb02e860d0eb27f425c7d30fb7566aff982d289228da5ce5a45842e10ffbe9016c9e926d7f69863" ) == 0 );
5941  fct_chk( strcmp( (char *) tag_str, "0114c2de8f733fc18f203150a0" ) == 0 );
5942  }
5943  }
5944  FCT_TEST_END();
5945 
5946 
5947  FCT_TEST_BGN(gcm_nist_validation_aes_12812810240104_1)
5948  {
5949  unsigned char key_str[128];
5950  unsigned char src_str[128];
5951  unsigned char dst_str[257];
5952  unsigned char iv_str[128];
5953  unsigned char add_str[128];
5954  unsigned char tag_str[128];
5955  unsigned char output[128];
5956  unsigned char tag_output[16];
5957  gcm_context ctx;
5958  unsigned int key_len;
5959  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
5960 
5961  memset(key_str, 0x00, 128);
5962  memset(src_str, 0x00, 128);
5963  memset(dst_str, 0x00, 257);
5964  memset(iv_str, 0x00, 128);
5965  memset(add_str, 0x00, 128);
5966  memset(tag_str, 0x00, 128);
5967  memset(output, 0x00, 128);
5968  memset(tag_output, 0x00, 16);
5969 
5970  key_len = unhexify( key_str, "09ce73e733e880c6d7be92be3144db40" );
5971  pt_len = unhexify( src_str, "a283e20adb6efedc5530f4efd71840d5fe61c902a7511cdaa939f5030880f3675959ee96e39abe082a66eba2a5a93214b22c249d7167b7a0fda360d02df855d508c7ebae7016137e54290904909b2d41a59942abec76612b17ea76ffd1ee715aa2b05b1314c0ab28631f3934d0e9efe2aef0c711e75a5c62701b3358a414958d" );
5972  iv_len = unhexify( iv_str, "f72a2fc910fdeeefe8743f57290e80af" );
5973  add_len = unhexify( add_str, "" );
5974 
5975  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5976  if( 0 == 0 )
5977  {
5978  fct_chk( 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 );
5979  hexify( dst_str, output, pt_len );
5980  hexify( tag_str, tag_output, tag_len );
5981 
5982  fct_chk( strcmp( (char *) dst_str, "fe9a7f59abc3720706c33fa40e106663d26c0f8da0d25deb90ada8130b6f95aaec07f4a7db342b678d102b2c81464e4ca9458732783cdc3a9d504232f44e2878b0aaeec0f88efa5d7e5fb146911dcdb4569de7f114e1854ad7a95894561bd0fc4d9a5b58b5164872833283ed88fdb4900b2a596db4e8379eed4e3a5c08d5fadf" ) == 0 );
5983  fct_chk( strcmp( (char *) tag_str, "9de97bfec1325936bd171c996a" ) == 0 );
5984  }
5985  }
5986  FCT_TEST_END();
5987 
5988 
5989  FCT_TEST_BGN(gcm_nist_validation_aes_12812810240104_2)
5990  {
5991  unsigned char key_str[128];
5992  unsigned char src_str[128];
5993  unsigned char dst_str[257];
5994  unsigned char iv_str[128];
5995  unsigned char add_str[128];
5996  unsigned char tag_str[128];
5997  unsigned char output[128];
5998  unsigned char tag_output[16];
5999  gcm_context ctx;
6000  unsigned int key_len;
6001  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
6002 
6003  memset(key_str, 0x00, 128);
6004  memset(src_str, 0x00, 128);
6005  memset(dst_str, 0x00, 257);
6006  memset(iv_str, 0x00, 128);
6007  memset(add_str, 0x00, 128);
6008  memset(tag_str, 0x00, 128);
6009  memset(output, 0x00, 128);
6010  memset(tag_output, 0x00, 16);
6011 
6012  key_len = unhexify( key_str, "e61d415db78d9f2695344350e0a8291e" );
6013  pt_len = unhexify( src_str, "730c3fa9e07eea73a734b17fcbc5a969dc2c04f448f44c7f6276e32ae3504e9b15fb664908f530e83a74e25a4525f74d315ab85d7b85005401370dc50fdb86e97baf3e7acb403e476193527a1a5d642ffad6cf2555d16d28cf4c4127189056389368b76aea806906b0a38b808cb02378eea48edc005cf2c21e6547502e31d2cb" );
6014  iv_len = unhexify( iv_str, "e09dee93466a3f35605b647d16b48452" );
6015  add_len = unhexify( add_str, "" );
6016 
6017  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6018  if( 0 == 0 )
6019  {
6020  fct_chk( 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 );
6021  hexify( dst_str, output, pt_len );
6022  hexify( tag_str, tag_output, tag_len );
6023 
6024  fct_chk( strcmp( (char *) dst_str, "ae87e754c1af1175b474b0718e3560240f55194d946d101e7c0bc7af18d90a50fa41d68516e45dc2a4dba48d457ebff18a657a873e15620ed7cf6ed3a26195b9d354ea279b24ec7802e4e95d3f3765188a64d7b8d4b7c215e7d67385efc6288724a33a1a7994f21e0dc2970076af7cf31e9ad1098537543052a2b0f62e4e8a87" ) == 0 );
6025  fct_chk( strcmp( (char *) tag_str, "5de3c5716735d7d1b859debb6e" ) == 0 );
6026  }
6027  }
6028  FCT_TEST_END();
6029 
6030 
6031  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024096_0)
6032  {
6033  unsigned char key_str[128];
6034  unsigned char src_str[128];
6035  unsigned char dst_str[257];
6036  unsigned char iv_str[128];
6037  unsigned char add_str[128];
6038  unsigned char tag_str[128];
6039  unsigned char output[128];
6040  unsigned char tag_output[16];
6041  gcm_context ctx;
6042  unsigned int key_len;
6043  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
6044 
6045  memset(key_str, 0x00, 128);
6046  memset(src_str, 0x00, 128);
6047  memset(dst_str, 0x00, 257);
6048  memset(iv_str, 0x00, 128);
6049  memset(add_str, 0x00, 128);
6050  memset(tag_str, 0x00, 128);
6051  memset(output, 0x00, 128);
6052  memset(tag_output, 0x00, 16);
6053 
6054  key_len = unhexify( key_str, "19bf00b228ddb6e8f1fa4ba85f866475" );
6055  pt_len = unhexify( src_str, "10742aeda590024bac2696af8402580d2ec6ba3f51cc6f79b6cfbb3057634ced6033fa43dbaec9af8ce7e9706ca699ede88d89caed89ea023d14761bec49da724538b4f9672163a5bb5dbf92f5278fc0014eafce402cb408a1eaad6bc17ec0e835d6b80f4701f946661757b9b2d54d1b137841519dd38d72835893ea6d52a27f" );
6056  iv_len = unhexify( iv_str, "760c5b929ac3d33bee4dae0088a894f9" );
6057  add_len = unhexify( add_str, "" );
6058 
6059  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6060  if( 0 == 0 )
6061  {
6062  fct_chk( 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 );
6063  hexify( dst_str, output, pt_len );
6064  hexify( tag_str, tag_output, tag_len );
6065 
6066  fct_chk( strcmp( (char *) dst_str, "b03d27bc7f4c9d48d555a38091347f371d0522ad4c347b4a23194c234c7877cd3621ce5a7c2fc26b38c7e6f1c2bf228ccec491f5bc352556c08e4e19ddc4e4b2c036f45a42aa425a5ff9a2e9c9e5580b538ee56fa804a86d9b1b59b6fb0d00216a96936755462979dc14990935919026fb51cdfef05b8dad03320a8112b7ada5" ) == 0 );
6067  fct_chk( strcmp( (char *) tag_str, "2f1cc79408c85a9867214061" ) == 0 );
6068  }
6069  }
6070  FCT_TEST_END();
6071 
6072 
6073  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024096_1)
6074  {
6075  unsigned char key_str[128];
6076  unsigned char src_str[128];
6077  unsigned char dst_str[257];
6078  unsigned char iv_str[128];
6079  unsigned char add_str[128];
6080  unsigned char tag_str[128];
6081  unsigned char output[128];
6082  unsigned char tag_output[16];
6083  gcm_context ctx;
6084  unsigned int key_len;
6085  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
6086 
6087  memset(key_str, 0x00, 128);
6088  memset(src_str, 0x00, 128);
6089  memset(dst_str, 0x00, 257);
6090  memset(iv_str, 0x00, 128);
6091  memset(add_str, 0x00, 128);
6092  memset(tag_str, 0x00, 128);
6093  memset(output, 0x00, 128);
6094  memset(tag_output, 0x00, 16);
6095 
6096  key_len = unhexify( key_str, "65bd9e7d9009dd6110dca657ccfe603e" );
6097  pt_len = unhexify( src_str, "c1b539324a001901c2461b9747f605a2f4043b9b0f54d1357049fd1819de06df6e29880d62ef7d91f9cdd1108f3cce323f6c32cec16f7bd434e539fd00ada476ef41efe7c6907ad1cb726717ab56d6e2d32042ee2df3f90d15e1515f0a15a5f06703e06e14229d18328116148b3cc39683918e42927f62aec49ee9bcc19be38d" );
6098  iv_len = unhexify( iv_str, "3fddf7e943326e431be540c49bb917c6" );
6099  add_len = unhexify( add_str, "" );
6100 
6101  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6102  if( 0 == 0 )
6103  {
6104  fct_chk( 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 );
6105  hexify( dst_str, output, pt_len );
6106  hexify( tag_str, tag_output, tag_len );
6107 
6108  fct_chk( strcmp( (char *) dst_str, "2813d6eef070cbdee9d5d71caa8a88c631f0b71c41813c6219a765e4fb3e6eff9afe8f8f4394fbd5646fe80bab78806eddf7549d6ca3d0d16d47ef63db93cb5620e3814efd86be151b338ee6e2c681bd37be4039b2ea4a190feccd7d65cbd56ebda81f4b66ce12cc3e2cece731c37d4237a9dd0a2c1a7697bae42176a673d62a" ) == 0 );
6109  fct_chk( strcmp( (char *) tag_str, "96200bd3e64d5eea746693ba" ) == 0 );
6110  }
6111  }
6112  FCT_TEST_END();
6113 
6114 
6115  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024096_2)
6116  {
6117  unsigned char key_str[128];
6118  unsigned char src_str[128];
6119  unsigned char dst_str[257];
6120  unsigned char iv_str[128];
6121  unsigned char add_str[128];
6122  unsigned char tag_str[128];
6123  unsigned char output[128];
6124  unsigned char tag_output[16];
6125  gcm_context ctx;
6126  unsigned int key_len;
6127  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
6128 
6129  memset(key_str, 0x00, 128);
6130  memset(src_str, 0x00, 128);
6131  memset(dst_str, 0x00, 257);
6132  memset(iv_str, 0x00, 128);
6133  memset(add_str, 0x00, 128);
6134  memset(tag_str, 0x00, 128);
6135  memset(output, 0x00, 128);
6136  memset(tag_output, 0x00, 16);
6137 
6138  key_len = unhexify( key_str, "b9b8ac9215289aa003cecd53a90e0407" );
6139  pt_len = unhexify( src_str, "8a6fbd067144b6d50ea73a2a7abba3ee9677bbf00312c70d808fd124541ab936229d59842c8846569a063fecb8bd1945882abd987a936991d5cdbec087937f91c4f5513feffa1984a6b8d04a7b69eb4e93e90b6825778cd2ce9a0ce54d4a468c93884619f851d2294be0bbbeef5fc0c05d2384126289283d5ddaaccd89711d73" );
6140  iv_len = unhexify( iv_str, "27d367f3f0c60acf921f8d8b228a0b2f" );
6141  add_len = unhexify( add_str, "" );
6142 
6143  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6144  if( 0 == 0 )
6145  {
6146  fct_chk( 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 );
6147  hexify( dst_str, output, pt_len );
6148  hexify( tag_str, tag_output, tag_len );
6149 
6150  fct_chk( strcmp( (char *) dst_str, "42d98ecfb4f707ec233c7f990b0cad8f39546b861b11d8cb9d939b29ff5ab315229d946ff55927dbde82c03aa73fd7857b2ad38fa55a827dda54d2726bcee66347ce42c9cfd13ba1507d209ff2388c0ea2474e17e31d8056593b722d3c2a302a716a288592b0a36547c7fd47f7595fee9d30f5bc09a9555d7f3169e26a924db1" ) == 0 );
6151  fct_chk( strcmp( (char *) tag_str, "d66974c95917ae1bf79b6685" ) == 0 );
6152  }
6153  }
6154  FCT_TEST_END();
6155 
6156 
6157  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024064_0)
6158  {
6159  unsigned char key_str[128];
6160  unsigned char src_str[128];
6161  unsigned char dst_str[257];
6162  unsigned char iv_str[128];
6163  unsigned char add_str[128];
6164  unsigned char tag_str[128];
6165  unsigned char output[128];
6166  unsigned char tag_output[16];
6167  gcm_context ctx;
6168  unsigned int key_len;
6169  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
6170 
6171  memset(key_str, 0x00, 128);
6172  memset(src_str, 0x00, 128);
6173  memset(dst_str, 0x00, 257);
6174  memset(iv_str, 0x00, 128);
6175  memset(add_str, 0x00, 128);
6176  memset(tag_str, 0x00, 128);
6177  memset(output, 0x00, 128);
6178  memset(tag_output, 0x00, 16);
6179 
6180  key_len = unhexify( key_str, "ccbcc39512425bc32350587f0fc3e8fd" );
6181  pt_len = unhexify( src_str, "57d6ccda317b7ea150b18d9558b39fd78d9cb52509aa5c095c5b46da89b79918c85d469ffac7226caddd670ac8f5add47fc382df1f32b4de9cc1b2ca7c2acfbdcaa08429b97e77eedea55c8ddc7814fe4c3cc1e21f95d94301ab77b4df7572d0b8778cb2befc0f4c4a5e93429ad52d6c2a75481f38d92edb1dac563154bf90b2" );
6182  iv_len = unhexify( iv_str, "0862ebfeb40ff24bfc65d3cc600f2897" );
6183  add_len = unhexify( add_str, "" );
6184 
6185  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6186  if( 0 == 0 )
6187  {
6188  fct_chk( 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 );
6189  hexify( dst_str, output, pt_len );
6190  hexify( tag_str, tag_output, tag_len );
6191 
6192  fct_chk( strcmp( (char *) dst_str, "e6a77e90750cf0e4c276c50c3880b3f6fa357179cbd84e22f5b43cd10abcbe04b43f191ed3fabf83eaca886f4a7f48490fb1fd92ebdacb68c5158e9f81243f7cadc7a8ba39721df68dbf2406fcb5dab823202ceea7112e5d25952de1b922beda271e7677421fde25f8cde450c40667387e5abf8da42dfe891c52bdd9f5060dba" ) == 0 );
6193  fct_chk( strcmp( (char *) tag_str, "927d13cb90ee5f44" ) == 0 );
6194  }
6195  }
6196  FCT_TEST_END();
6197 
6198 
6199  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024064_1)
6200  {
6201  unsigned char key_str[128];
6202  unsigned char src_str[128];
6203  unsigned char dst_str[257];
6204  unsigned char iv_str[128];
6205  unsigned char add_str[128];
6206  unsigned char tag_str[128];
6207  unsigned char output[128];
6208  unsigned char tag_output[16];
6209  gcm_context ctx;
6210  unsigned int key_len;
6211  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
6212 
6213  memset(key_str, 0x00, 128);
6214  memset(src_str, 0x00, 128);
6215  memset(dst_str, 0x00, 257);
6216  memset(iv_str, 0x00, 128);
6217  memset(add_str, 0x00, 128);
6218  memset(tag_str, 0x00, 128);
6219  memset(output, 0x00, 128);
6220  memset(tag_output, 0x00, 16);
6221 
6222  key_len = unhexify( key_str, "396b53a694b28b717c104111c4752074" );
6223  pt_len = unhexify( src_str, "bbc3b818f4ff10b6822ea41f63ca53c27578a8126f5163a5014c60e1bc8c1a9bba67a3808c8aeee09ba9e584a3584e9b86895a3f0db2e64e71bb18b843b12f4ebbfaa1dff3734196f70c5a6d970277ab5337e8b940ae7c957646f8e96c6b5d84e9e97b620a926e655850d09bc2d94678704aa45d1788e7c23ecf37e2904a0786" );
6224  iv_len = unhexify( iv_str, "0981a151c6f6867d3830c1f9ef99c433" );
6225  add_len = unhexify( add_str, "" );
6226 
6227  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6228  if( 0 == 0 )
6229  {
6230  fct_chk( 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 );
6231  hexify( dst_str, output, pt_len );
6232  hexify( tag_str, tag_output, tag_len );
6233 
6234  fct_chk( strcmp( (char *) dst_str, "72a5587076a1050b2b514f047ccdf7176c118db9236c0f72091513da39d7416734ac50e0a35b2905420214be8426a36e86863c9957693292bfc5bfc2e93d234a09e80f517edb7cf8e5d21d5ae6c2362b779a9b62b4c66202894d369d219ef0e4b52a342b71f248c18ffc345dc7eb0b47b3bc83ffdef921eb42b6d51abd889ef4" ) == 0 );
6235  fct_chk( strcmp( (char *) tag_str, "af99f8797495dd16" ) == 0 );
6236  }
6237  }
6238  FCT_TEST_END();
6239 
6240 
6241  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024064_2)
6242  {
6243  unsigned char key_str[128];
6244  unsigned char src_str[128];
6245  unsigned char dst_str[257];
6246  unsigned char iv_str[128];
6247  unsigned char add_str[128];
6248  unsigned char tag_str[128];
6249  unsigned char output[128];
6250  unsigned char tag_output[16];
6251  gcm_context ctx;
6252  unsigned int key_len;
6253  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
6254 
6255  memset(key_str, 0x00, 128);
6256  memset(src_str, 0x00, 128);
6257  memset(dst_str, 0x00, 257);
6258  memset(iv_str, 0x00, 128);
6259  memset(add_str, 0x00, 128);
6260  memset(tag_str, 0x00, 128);
6261  memset(output, 0x00, 128);
6262  memset(tag_output, 0x00, 16);
6263 
6264  key_len = unhexify( key_str, "af090618cb454324a82a75a91944dd6f" );
6265  pt_len = unhexify( src_str, "3ebca6ff138c527b851b27b9e3917bb9a07282197868351dd599b74b332610bd634422911393171305caa4fe3f6e89ab6c033ca759e118c2d8684b903966999125c748e04312ecd2c1ac3135c3be2df9c8c67be4d8303ac7aa6c21ca7b7c20b1108f5622d8e6079f41e4be4abda99f782ad35a085b7db83482dc71b8e5d8e71c" );
6266  iv_len = unhexify( iv_str, "3380a6f20875b7d561c4a137519cccd3" );
6267  add_len = unhexify( add_str, "" );
6268 
6269  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6270  if( 0 == 0 )
6271  {
6272  fct_chk( 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 );
6273  hexify( dst_str, output, pt_len );
6274  hexify( tag_str, tag_output, tag_len );
6275 
6276  fct_chk( strcmp( (char *) dst_str, "6be8eebe7af78c062812513785e9803f302c771e8215e4c606fc5eddc3efd8b12c96e029b4287da55d8626583e58ce0e50c4ac5a39a1b0f309d5803386738397376c0ae155087f36fd86fdda4b5c8dd079011fa9a134ca8a76de570ef165b20d7d803544cd2f3a0ffede9b35ca1c982978bf95ac100af755553fdac38d988fe9" ) == 0 );
6277  fct_chk( strcmp( (char *) tag_str, "3e869dcac087aa6c" ) == 0 );
6278  }
6279  }
6280  FCT_TEST_END();
6281 
6282 
6283  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024032_0)
6284  {
6285  unsigned char key_str[128];
6286  unsigned char src_str[128];
6287  unsigned char dst_str[257];
6288  unsigned char iv_str[128];
6289  unsigned char add_str[128];
6290  unsigned char tag_str[128];
6291  unsigned char output[128];
6292  unsigned char tag_output[16];
6293  gcm_context ctx;
6294  unsigned int key_len;
6295  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
6296 
6297  memset(key_str, 0x00, 128);
6298  memset(src_str, 0x00, 128);
6299  memset(dst_str, 0x00, 257);
6300  memset(iv_str, 0x00, 128);
6301  memset(add_str, 0x00, 128);
6302  memset(tag_str, 0x00, 128);
6303  memset(output, 0x00, 128);
6304  memset(tag_output, 0x00, 16);
6305 
6306  key_len = unhexify( key_str, "041cae51d9e631ef70115be58f8818ef" );
6307  pt_len = unhexify( src_str, "f6748f4a261d876e37fe44a419cfe965888aa5ee195ae12237322f6e7ac4bfaaf16e8e29be507e2978339a1855ab918485011fd52f834bf0876ba8d89dfc01927e0930d03c0ac7dc7ba1554a879a2051011bcb34a5e4c7cea4d4fb5ed53b41ec8d17bd52b2e1b9dd417a84ac5913ce3f9fb04daf4d14be65f49d0767b9431b47" );
6308  iv_len = unhexify( iv_str, "c32f227659e0566faa09eb72d99f89c2" );
6309  add_len = unhexify( add_str, "" );
6310 
6311  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6312  if( 0 == 0 )
6313  {
6314  fct_chk( 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 );
6315  hexify( dst_str, output, pt_len );
6316  hexify( tag_str, tag_output, tag_len );
6317 
6318  fct_chk( strcmp( (char *) dst_str, "f30fe6c8765c8c0af579c95bc2d182ccc346e587a57aa226eafb692675377a85e9ee08339a047b9cb674dabf5a25301d2c8c264bc06573e36e55ceaee39239e367b8f1a3d781a2020e548001f9f98850994c3aa79b13dfc93c1d7291befd91e044b2f5d2583d1a9f868fab4afecd46fec7d315b0cbf8a7331ef8f588d75f97e2" ) == 0 );
6319  fct_chk( strcmp( (char *) tag_str, "5629e1a4" ) == 0 );
6320  }
6321  }
6322  FCT_TEST_END();
6323 
6324 
6325  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024032_1)
6326  {
6327  unsigned char key_str[128];
6328  unsigned char src_str[128];
6329  unsigned char dst_str[257];
6330  unsigned char iv_str[128];
6331  unsigned char add_str[128];
6332  unsigned char tag_str[128];
6333  unsigned char output[128];
6334  unsigned char tag_output[16];
6335  gcm_context ctx;
6336  unsigned int key_len;
6337  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
6338 
6339  memset(key_str, 0x00, 128);
6340  memset(src_str, 0x00, 128);
6341  memset(dst_str, 0x00, 257);
6342  memset(iv_str, 0x00, 128);
6343  memset(add_str, 0x00, 128);
6344  memset(tag_str, 0x00, 128);
6345  memset(output, 0x00, 128);
6346  memset(tag_output, 0x00, 16);
6347 
6348  key_len = unhexify( key_str, "f0577d9a7dbf7b4ada5b9758eec4c847" );
6349  pt_len = unhexify( src_str, "5b559738634825921b5cb620b5b9f637f8b7ce33998cce1ed1a23ff01f84e58255d852a02e59e4394752405ecc15248f7616a33e64936f726de6fc6d10c3fce9ac0b3fcffbd755f16bff8462b3be24f7cf342c8d0bf1ca79b1cb4ea88d690644998a8ac3cafc8c18c8cb737e38a681026d46966b89c7d6c7a4ce7a1e1faecdd5" );
6350  iv_len = unhexify( iv_str, "b432473ae67205bc7a99f5ab2a2721e6" );
6351  add_len = unhexify( add_str, "" );
6352 
6353  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6354  if( 0 == 0 )
6355  {
6356  fct_chk( 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 );
6357  hexify( dst_str, output, pt_len );
6358  hexify( tag_str, tag_output, tag_len );
6359 
6360  fct_chk( strcmp( (char *) dst_str, "ddfe664e28c5face3761deda1ab2dac6e36cfed538e3faf9d79c54e3c85b4baea9eedcef7f8f28c2feedec72ab2cc6aaae101b99512ef18e759b7828364e4daf9a572f8c6ad88eb82f7304989345aa4985e498dfebc58cbc45aa31c18c0dda5b1991fd998901c65807c8cff6058b1d5dfd583297da8451cef13f246547ad11df" ) == 0 );
6361  fct_chk( strcmp( (char *) tag_str, "ce55ac00" ) == 0 );
6362  }
6363  }
6364  FCT_TEST_END();
6365 
6366 
6367  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024032_2)
6368  {
6369  unsigned char key_str[128];
6370  unsigned char src_str[128];
6371  unsigned char dst_str[257];
6372  unsigned char iv_str[128];
6373  unsigned char add_str[128];
6374  unsigned char tag_str[128];
6375  unsigned char output[128];
6376  unsigned char tag_output[16];
6377  gcm_context ctx;
6378  unsigned int key_len;
6379  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
6380 
6381  memset(key_str, 0x00, 128);
6382  memset(src_str, 0x00, 128);
6383  memset(dst_str, 0x00, 257);
6384  memset(iv_str, 0x00, 128);
6385  memset(add_str, 0x00, 128);
6386  memset(tag_str, 0x00, 128);
6387  memset(output, 0x00, 128);
6388  memset(tag_output, 0x00, 16);
6389 
6390  key_len = unhexify( key_str, "6ca1d6ae9b5ddd6e3d68656c508df318" );
6391  pt_len = unhexify( src_str, "d160740aed955e30c1f946088b5bc5bbaf5c84f282c32f65d099509993628ba5a51b411c6ebf57d58e9176b490ab90fa8db8a3cdc67a5f8322d06d719d91f00ca07aa2a3977dd0838487f2e9d4dd285067a1f72bb8a6c9dfca107acf1f404995bb68ed9d7e12423efe570f144e0533fa34b8d0b7156112b85c94a8fa33d7a6d9" );
6392  iv_len = unhexify( iv_str, "68a494c9002dadf4f0303dd0ebd600c0" );
6393  add_len = unhexify( add_str, "" );
6394 
6395  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6396  if( 0 == 0 )
6397  {
6398  fct_chk( 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 );
6399  hexify( dst_str, output, pt_len );
6400  hexify( tag_str, tag_output, tag_len );
6401 
6402  fct_chk( strcmp( (char *) dst_str, "276e362cb73b405b10a98731333f6accf0d19cb96c21419d6d56b30dcf73f7208906b0e3eb103b721cdbb7eb1d4ff29ec3b7e9d433205bd9ec48c59d0075a1507ddf09275426c0ce9a58b973e06d6fceee7054ba92b1df771011ac73e39e451d9ac3375c595631090a2296d423e3ef806ac20770abf78ad04114f65661804fae" ) == 0 );
6403  fct_chk( strcmp( (char *) tag_str, "8ff9a26e" ) == 0 );
6404  }
6405  }
6406  FCT_TEST_END();
6407 
6408 
6409  FCT_TEST_BGN(gcm_nist_validation_aes_12812810241024128_0)
6410  {
6411  unsigned char key_str[128];
6412  unsigned char src_str[128];
6413  unsigned char dst_str[257];
6414  unsigned char iv_str[128];
6415  unsigned char add_str[128];
6416  unsigned char tag_str[128];
6417  unsigned char output[128];
6418  unsigned char tag_output[16];
6419  gcm_context ctx;
6420  unsigned int key_len;
6421  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
6422 
6423  memset(key_str, 0x00, 128);
6424  memset(src_str, 0x00, 128);
6425  memset(dst_str, 0x00, 257);
6426  memset(iv_str, 0x00, 128);
6427  memset(add_str, 0x00, 128);
6428  memset(tag_str, 0x00, 128);
6429  memset(output, 0x00, 128);
6430  memset(tag_output, 0x00, 16);
6431 
6432  key_len = unhexify( key_str, "5a3e577743b4581519b84b7538fb32e7" );
6433  pt_len = unhexify( src_str, "172a0a14820448e5ffd017c18ee02219906f721c915c4f0ff13b7b7889812c0edb89f28be0c22deff76bc975d1ef8ef3fc40b10cce0d78933aa22e6adf2d4b7ee4ed6ef487eaddb666afd8671427f7525eb99af54a55d98159fc5d651266c65ccd915cbba60fb6e2c408ef177d682253c0b5410d77d08be1d8f175ca360becd0" );
6434  iv_len = unhexify( iv_str, "1e155ada52e250cee145d69b4a307bc0" );
6435  add_len = unhexify( add_str, "b9be2145b842d2f5c3d15ac032010400bffe31856441cb484d5c93e6710194b13e14077e132cfe03985d4b936bda9383c22c392968c748f7265213a8eac584aaa11eea35589e3536e39b3e4418248927fa9fcc027c5516e402445068ef793d349eb778b77fb0b37f51bfcc3c21df9999ca9985cc5bec6502445b068c2d061f41" );
6436 
6437  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6438  if( 0 == 0 )
6439  {
6440  fct_chk( 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 );
6441  hexify( dst_str, output, pt_len );
6442  hexify( tag_str, tag_output, tag_len );
6443 
6444  fct_chk( strcmp( (char *) dst_str, "b5bd224140d6b826062e55754299a43a87cbe861360334897e82b7a6023ab0041736479c9aaca7c73f27e239a63e7433e048a8d2c2d26f0b18476aca7ac20837affacdffb57c618ce5982ba61fe1792c8a3a856970c095b0c4695dce961a354135075e0a786192d5875d16793a3ad0e3572a81efa24099f5ed9c92df55c15dd1" ) == 0 );
6445  fct_chk( strcmp( (char *) tag_str, "74df58fd4a2a68657ce35a3ef11a9c0b" ) == 0 );
6446  }
6447  }
6448  FCT_TEST_END();
6449 
6450 
6451  FCT_TEST_BGN(gcm_nist_validation_aes_12812810241024128_1)
6452  {
6453  unsigned char key_str[128];
6454  unsigned char src_str[128];
6455  unsigned char dst_str[257];
6456  unsigned char iv_str[128];
6457  unsigned char add_str[128];
6458  unsigned char tag_str[128];
6459  unsigned char output[128];
6460  unsigned char tag_output[16];
6461  gcm_context ctx;
6462  unsigned int key_len;
6463  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
6464 
6465  memset(key_str, 0x00, 128);
6466  memset(src_str, 0x00, 128);
6467  memset(dst_str, 0x00, 257);
6468  memset(iv_str, 0x00, 128);
6469  memset(add_str, 0x00, 128);
6470  memset(tag_str, 0x00, 128);
6471  memset(output, 0x00, 128);
6472  memset(tag_output, 0x00, 16);
6473 
6474  key_len = unhexify( key_str, "deb0ab6e8b0f392af6b89d253e923f1a" );
6475  pt_len = unhexify( src_str, "14a86c431bde5c0861e6bd2cb748a13b9bfb2a4a67a0bcf067960b3a9c7a75fc7ea321863c83693c70076462ec3179f4d82ed4a1155a4b5004842fb47482bd6a83804a05af2504f6f535eb9bdc95a9a2eb80c7dcd7dff54e3c00437e4da9c433c88f6d248e4754656acdf8ea7d68106b04ebb2f1cdb247fddb0bca1f8e9ed6a5" );
6476  iv_len = unhexify( iv_str, "c1bc587c3440f1f5dea5b0a4b5ee8dfd" );
6477  add_len = unhexify( add_str, "602cfb09e8bf250c3a2c248c4e91234629a4fe9a18c5f8b59df215e97dd873a7c1204bd0695796908daa28b77353e0e5b37877a7441d35633119c0aee9aa82c3c18a7f577d09293fafce1895dafea42f97222a33b001907b978f11471cc0adc46243e8f7fce94803d4d0595bc9fccb9b9396b52deb943280eac2c4eda54841bc" );
6478 
6479  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6480  if( 0 == 0 )
6481  {
6482  fct_chk( 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 );
6483  hexify( dst_str, output, pt_len );
6484  hexify( tag_str, tag_output, tag_len );
6485 
6486  fct_chk( strcmp( (char *) dst_str, "a72d27136d0b4efc0aa2126a246ae4946e2c62cf5055f7bde263e7516ace2b7e12179980f8dcff18dc4fcd662f38d3b9dc7f8a057827ebf27e5dab85264d9325e0eea3b12f8e9e39ad686263df75b0758cc8af0be89882bb159c95b8de392b3e295c039a520d2e56b50a6370afa57adc967f7e4ff670dab471a57fb6c81401eb" ) == 0 );
6487  fct_chk( strcmp( (char *) tag_str, "eb26cdf879e0cb1320d786a642c4dfc0" ) == 0 );
6488  }
6489  }
6490  FCT_TEST_END();
6491 
6492 
6493  FCT_TEST_BGN(gcm_nist_validation_aes_12812810241024128_2)
6494  {
6495  unsigned char key_str[128];
6496  unsigned char src_str[128];
6497  unsigned char dst_str[257];
6498  unsigned char iv_str[128];
6499  unsigned char add_str[128];
6500  unsigned char tag_str[128];
6501  unsigned char output[128];
6502  unsigned char tag_output[16];
6503  gcm_context ctx;
6504  unsigned int key_len;
6505  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
6506 
6507  memset(key_str, 0x00, 128);
6508  memset(src_str, 0x00, 128);
6509  memset(dst_str, 0x00, 257);
6510  memset(iv_str, 0x00, 128);
6511  memset(add_str, 0x00, 128);
6512  memset(tag_str, 0x00, 128);
6513  memset(output, 0x00, 128);
6514  memset(tag_output, 0x00, 16);
6515 
6516  key_len = unhexify( key_str, "adf6006fb1cfea0f9641a4c35b864101" );
6517  pt_len = unhexify( src_str, "d21777e1fab632bffd82a58cb732794f112cd88bdda5a7a8d19c68ace343fd786e5e512013887105c21299f2d6ae23cae4f03047c68f019d98e76d2aa1b3a204f13f4cba13f5a8957b9aa3ebb44b8024b26cb6139a3bca3ada0520a68b8571ae89501b212a1f8ede5753d557ad2f38d9465dbb09b555300b13194bf7817321f7" );
6518  iv_len = unhexify( iv_str, "a349d97fc677d8ba6f72e8cc7191ab78" );
6519  add_len = unhexify( add_str, "5717bee8b31640f3999efda463d4b604c1cef62fc0dcc856efb4c50a8c6b902019c663279e1bf66fb52d82f8570b9a314647f4b1ed86eb89f4be8981225f94d4285f5ca9167434a1569b520b071ee4448d08cb8623b4cda6d1f7ad28e51a2df980b5a999025e9ba646707075a6cb2464c2a0d5fc804c98a79946fae0b4fa61fd" );
6520 
6521  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6522  if( 0 == 0 )
6523  {
6524  fct_chk( 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 );
6525  hexify( dst_str, output, pt_len );
6526  hexify( tag_str, tag_output, tag_len );
6527 
6528  fct_chk( strcmp( (char *) dst_str, "345af0d804490586c9ffbada0404176f4cb1331fc77705175619f27d107512d3e6068323b276743284feb938c5718a5b013305fb42282a89e270d24585236fa18265dc7e8ddd2b3efe93a2ea05ab359323c75211f2133aa97022c9a937a467af37c92a795c682a30f2ba1c4ab2dc45e63c56cd3b29b0efac2caa3150e6a72aa3" ) == 0 );
6529  fct_chk( strcmp( (char *) tag_str, "ae7d2827c4f1422b728a9fd31d8d1918" ) == 0 );
6530  }
6531  }
6532  FCT_TEST_END();
6533 
6534 
6535  FCT_TEST_BGN(gcm_nist_validation_aes_12812810241024120_0)
6536  {
6537  unsigned char key_str[128];
6538  unsigned char src_str[128];
6539  unsigned char dst_str[257];
6540  unsigned char iv_str[128];
6541  unsigned char add_str[128];
6542  unsigned char tag_str[128];
6543  unsigned char output[128];
6544  unsigned char tag_output[16];
6545  gcm_context ctx;
6546  unsigned int key_len;
6547  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
6548 
6549  memset(key_str, 0x00, 128);
6550  memset(src_str, 0x00, 128);
6551  memset(dst_str, 0x00, 257);
6552  memset(iv_str, 0x00, 128);
6553  memset(add_str, 0x00, 128);
6554  memset(tag_str, 0x00, 128);
6555  memset(output, 0x00, 128);
6556  memset(tag_output, 0x00, 16);
6557 
6558  key_len = unhexify( key_str, "97c83d4628b65d94341984bbc266dc7a" );
6559  pt_len = unhexify( src_str, "e998cc0b7677fa2e504994e99cf7bbd84ba7e356d7da178f8ff40dddc046c70554ddec1d28aa23f9c4e6fcb9effeb8e28a883ad05bd0a6041b8a24d0fceff200a4e33996e279cbf029b11d58185adeb5e5e797a74d0d8b17adcf06dfbe3ee11d8e6bc3b6a8434de6e0ddfa0fd08c913f9fb911cefca72bc3f616b4ac9821f53c" );
6560  iv_len = unhexify( iv_str, "671dcc5001c2146bf8a4e522ad702bd8" );
6561  add_len = unhexify( add_str, "9eb12a42d2ca06a7da37fbc23d213f5e3f5e15580f01b0ea80eb4b6bd283e307dec965745ea3b3509d3269cf25808fc6a923e97d87d0c1a30b447a5a27a06d0c88a96cd90d990bf208f1abc4934f6a0ae34a694750a74ffb27f4bb66bc799d43570b01897b98b00e6a01b95b356b11d33e852b2010da5785a691246d0be2bcfb" );
6562 
6563  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6564  if( 0 == 0 )
6565  {
6566  fct_chk( 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 );
6567  hexify( dst_str, output, pt_len );
6568  hexify( tag_str, tag_output, tag_len );
6569 
6570  fct_chk( strcmp( (char *) dst_str, "5a6d8930e473e292e67425748e8618569b7a478f1e183ba4e4a64385ac4b75d3d42b1afc34cc6daff341f10c1ad8f03d77179f52a7239ab3261f5fcd5a0b4282d26fa4d08bf0c8a5c96782c073ad63ad233dfe3aa0290a03d73de14d445b9ce4ea0e3b10a4aef71c5919969b7086353c942c479a1c052a749afde2325ef46f7f" ) == 0 );
6571  fct_chk( strcmp( (char *) tag_str, "b81cb7bfd0aaf22b7233bcfe363b95" ) == 0 );
6572  }
6573  }
6574  FCT_TEST_END();
6575 
6576 
6577  FCT_TEST_BGN(gcm_nist_validation_aes_12812810241024120_1)
6578  {
6579  unsigned char key_str[128];
6580  unsigned char src_str[128];
6581  unsigned char dst_str[257];
6582  unsigned char iv_str[128];
6583  unsigned char add_str[128];
6584  unsigned char tag_str[128];
6585  unsigned char output[128];
6586  unsigned char tag_output[16];
6587  gcm_context ctx;
6588  unsigned int key_len;
6589  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
6590 
6591  memset(key_str, 0x00, 128);
6592  memset(src_str, 0x00, 128);
6593  memset(dst_str, 0x00, 257);
6594  memset(iv_str, 0x00, 128);
6595  memset(add_str, 0x00, 128);
6596  memset(tag_str, 0x00, 128);
6597  memset(output, 0x00, 128);
6598  memset(tag_output, 0x00, 16);
6599 
6600  key_len = unhexify( key_str, "2dcd5c974c5d78cde0d3a677d0b1acdc" );
6601  pt_len = unhexify( src_str, "21b61035ca3c149d66608d77edd9770411e0ef73a97d4be9dcde95ed7997ba97117ae6c1979195a5d916ff7a1d43ddced5287004fb60a2c81c82b5f7c8a336a603c3eb7cb160bbf21b454f810681450d65deb64e7cd229333fc5e85dc29040d7da48511b6b2524f02eaeab422b5ca817796c47b9f2d7d498abc619b2ce2912bf" );
6602  iv_len = unhexify( iv_str, "7455fea1bbbfe9479830d403e33c9d1c" );
6603  add_len = unhexify( add_str, "d684d38f2b12111197ca512c54c8e29ef1c3b9b089a6923cdb327c763f0ac8c2ec0900c716e211e7cba1d7c13a60fe87f5d78e5d5215d92e57a0645d9b2eab4b11870b5f7bfa9f2c9e4b9fcf7596e7719b7d0c0e6cc16efe71d8bc92e16a83d4782f08e9b97dc85a18c435b51c940189a3c2608379a21a8c46633020b9b6cd10" );
6604 
6605  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6606  if( 0 == 0 )
6607  {
6608  fct_chk( 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 );
6609  hexify( dst_str, output, pt_len );
6610  hexify( tag_str, tag_output, tag_len );
6611 
6612  fct_chk( strcmp( (char *) dst_str, "eb039d8cf0bf217e3f2aa529ba872c385f2770ede6ca4ed32fd22cd3fcbfddfb92d681f00df6fbf170a5dad71c9988d556cd74bc99e18a68683e0ea7b6ef90b21ff42cef8c4627e4051bff0da00054390e10036f430dbe217e5bd939295d9c9f64c2614d42ba62efe78763cc427027edbd0b7f72eceaa8b4776ba633f2c3d500" ) == 0 );
6613  fct_chk( strcmp( (char *) tag_str, "18e7b50fcec11c98fe5438a40a4164" ) == 0 );
6614  }
6615  }
6616  FCT_TEST_END();
6617 
6618 
6619  FCT_TEST_BGN(gcm_nist_validation_aes_12812810241024120_2)
6620  {
6621  unsigned char key_str[128];
6622  unsigned char src_str[128];
6623  unsigned char dst_str[257];
6624  unsigned char iv_str[128];
6625  unsigned char add_str[128];
6626  unsigned char tag_str[128];
6627  unsigned char output[128];
6628  unsigned char tag_output[16];
6629  gcm_context ctx;
6630  unsigned int key_len;
6631  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
6632 
6633  memset(key_str, 0x00, 128);
6634  memset(src_str, 0x00, 128);
6635  memset(dst_str, 0x00, 257);
6636  memset(iv_str, 0x00, 128);
6637  memset(add_str, 0x00, 128);
6638  memset(tag_str, 0x00, 128);
6639  memset(output, 0x00, 128);
6640  memset(tag_output, 0x00, 16);
6641 
6642  key_len = unhexify( key_str, "e5b132bb7aca3e01105848f9b37ff516" );
6643  pt_len = unhexify( src_str, "3b6d1a432b7fdb4022fc35d6b79ea03b6aa14d4ddf60a160e976909ca069242fb2e7d414d4e34ffdf9416823c4b3f4e018ac8ca689446647eda6a12029f886bcc9d18be150b451d78fa72b9c4dc13314077a5b04cffeb167005c7e8379940e6b998316bef9bf8b5a742e337663c0ed91d88d09d0c3ebec37aecaeb8277b13661" );
6644  iv_len = unhexify( iv_str, "24c1ba77d37f99253576f4963779fd59" );
6645  add_len = unhexify( add_str, "dedf78f05957bde906639bd35eacd8fba8582d288c9f14a25eb851a0a34c82fd91f2b78614ff46ca17fe7781d155cc30f3a62764b0614d57c89fddfdd46af4fa5fc540b9ee9076805d4d121aa0dad2449d228f1fc3c07d466c051c06db6846b9012e8d268c6e1e336121d272ca70d965389a5382fbfec0a439e979f16fab0283" );
6646 
6647  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6648  if( 0 == 0 )
6649  {
6650  fct_chk( 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 );
6651  hexify( dst_str, output, pt_len );
6652  hexify( tag_str, tag_output, tag_len );
6653 
6654  fct_chk( strcmp( (char *) dst_str, "9976d2f3e16485b6b3699a541b6df386562b5ea4f6f9ff41d265b16e2d7d3c5f131bb5874cdffa87e704ae3cc24f1dccb62bababdcdedf8bac277a7277ca53a4d38fd31f9fc83f86a105663f045b70dabd553137b6d6222abb334b7be7689a4afa28103619f11b8b61aa92a63136ad5639f11bae64b25f09f1e2db701938fa5e" ) == 0 );
6655  fct_chk( strcmp( (char *) tag_str, "29d1b8a68472f2da27aa84be714108" ) == 0 );
6656  }
6657  }
6658  FCT_TEST_END();
6659 
6660 
6661  FCT_TEST_BGN(gcm_nist_validation_aes_12812810241024112_0)
6662  {
6663  unsigned char key_str[128];
6664  unsigned char src_str[128];
6665  unsigned char dst_str[257];
6666  unsigned char iv_str[128];
6667  unsigned char add_str[128];
6668  unsigned char tag_str[128];
6669  unsigned char output[128];
6670  unsigned char tag_output[16];
6671  gcm_context ctx;
6672  unsigned int key_len;
6673  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
6674 
6675  memset(key_str, 0x00, 128);
6676  memset(src_str, 0x00, 128);
6677  memset(dst_str, 0x00, 257);
6678  memset(iv_str, 0x00, 128);
6679  memset(add_str, 0x00, 128);
6680  memset(tag_str, 0x00, 128);
6681  memset(output, 0x00, 128);
6682  memset(tag_output, 0x00, 16);
6683 
6684  key_len = unhexify( key_str, "63628519a0f010620cbae37f8ad34570" );
6685  pt_len = unhexify( src_str, "6db2919208b09a8abe5e95dcfe0f957dce1ae0e5b29f06bf321dc815ceca094f38c5c812f591aedbc9fc28cc0317bd1d89d4a3ba14f7b3e5fb2e03778990a6006e0ec2ceb47c923f3b17473f99521491a4cb2f9bd435e3133dc90e129ded9d15d78e75bfb3492458ce0964d5614508ef2a38ea02ec8664ba901891a7cc86a62b" );
6686  iv_len = unhexify( iv_str, "ce0ad75b94ab2d3918abf255c854ecf6" );
6687  add_len = unhexify( add_str, "c29384bd7cd013fa02487867595d739d99886a3bbed7fd5acd689f3a74f240f14c8fffd0bdea1f83bfef7b58ce512849e3a986f37afa54ddc11719169a49bd7e7138a745053417ff80cab1a32ae9be476ccb61ae055b319fdee5dcab629bb237aeb7d998ce36dd9c6908451c3bca9d3582f7fd60e69f6298d43a3b958341b611" );
6688 
6689  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6690  if( 0 == 0 )
6691  {
6692  fct_chk( 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 );
6693  hexify( dst_str, output, pt_len );
6694  hexify( tag_str, tag_output, tag_len );
6695 
6696  fct_chk( strcmp( (char *) dst_str, "6205d37d720cbb628dbd5069f38ded8e566030eadb7fbdf2ed827d5f5a0117a21c75ade89782b3dc4e7307d9a7ae406ead0145aea1b6cce286103a55ce195999214b84bc25281bd7fe511868a69944d483e05ea6b39b11558ab46a33d227734eb3a386e30d58c3029ef0cb4046c0856078d57a6df194aa8c0e10f9b6ed8fb40b" ) == 0 );
6697  fct_chk( strcmp( (char *) tag_str, "423fd542498825cc54501cb42b2c" ) == 0 );
6698  }
6699  }
6700  FCT_TEST_END();
6701 
6702 
6703  FCT_TEST_BGN(gcm_nist_validation_aes_12812810241024112_1)
6704  {
6705  unsigned char key_str[128];
6706  unsigned char src_str[128];
6707  unsigned char dst_str[257];
6708  unsigned char iv_str[128];
6709  unsigned char add_str[128];
6710  unsigned char tag_str[128];
6711  unsigned char output[128];
6712  unsigned char tag_output[16];
6713  gcm_context ctx;
6714  unsigned int key_len;
6715  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
6716 
6717  memset(key_str, 0x00, 128);
6718  memset(src_str, 0x00, 128);
6719  memset(dst_str, 0x00, 257);
6720  memset(iv_str, 0x00, 128);
6721  memset(add_str, 0x00, 128);
6722  memset(tag_str, 0x00, 128);
6723  memset(output, 0x00, 128);
6724  memset(tag_output, 0x00, 16);
6725 
6726  key_len = unhexify( key_str, "7c0e1c6bde79315f79f22ebc77107228" );
6727  pt_len = unhexify( src_str, "9cd56b16aa4e130c3dbf30e701e8784ff39f866031e778e9ab72b858c3e333e9589b4b6cd89d6546e52a478d92bd59d0e4756d6b5037ab1873d88242ef31be643745d26395385b71034f6f0c0c84816f0c6755965fc8a7718f891d618f226684bcc77f87fe168e178b330d4b4c0eb4791028017fe6c42e68b0e195654a5d65e5" );
6728  iv_len = unhexify( iv_str, "9011dee57c3b8e112efa4d2b816cf189" );
6729  add_len = unhexify( add_str, "57bfcccc6f00c0abbc5f30589dbb47597838fdd50dd622eeedee33824e63ba78753c05d2543687f60dde501757b6fb74c17fe34b3e9c455eb38cf078c8c77eff68d3e3b8c244cde70ddf61703664d34159a11785cc6626eb1cad70ab94405616fff52c0f781ee6b43ef2a449924a76b762035ff479cd6006c21a62a56a14650f" );
6730 
6731  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6732  if( 0 == 0 )
6733  {
6734  fct_chk( 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 );
6735  hexify( dst_str, output, pt_len );
6736  hexify( tag_str, tag_output, tag_len );
6737 
6738  fct_chk( strcmp( (char *) dst_str, "2c1ef998747163104e5a7d2a440a1a1cc2c20446a9d0cf5f138f85c1f5afd90fdc3fa4932845c150518f40bfd56569a5479126c49061ef350b4fae895170b4eb94dad7b456890a822e1bcb57f9bde5bea747d17be3d18ea201cd99bc46fee21132c6918ffb0117744f6ba3f25bc8a50f9719854314b934c3a3230f4757a49113" ) == 0 );
6739  fct_chk( strcmp( (char *) tag_str, "4ef9aebb721dabe2d09101037a63" ) == 0 );
6740  }
6741  }
6742  FCT_TEST_END();
6743 
6744 
6745  FCT_TEST_BGN(gcm_nist_validation_aes_12812810241024112_2)
6746  {
6747  unsigned char key_str[128];
6748  unsigned char src_str[128];
6749  unsigned char dst_str[257];
6750  unsigned char iv_str[128];
6751  unsigned char add_str[128];
6752  unsigned char tag_str[128];
6753  unsigned char output[128];
6754  unsigned char tag_output[16];
6755  gcm_context ctx;
6756  unsigned int key_len;
6757  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
6758 
6759  memset(key_str, 0x00, 128);
6760  memset(src_str, 0x00, 128);
6761  memset(dst_str, 0x00, 257);
6762  memset(iv_str, 0x00, 128);
6763  memset(add_str, 0x00, 128);
6764  memset(tag_str, 0x00, 128);
6765  memset(output, 0x00, 128);
6766  memset(tag_output, 0x00, 16);
6767 
6768  key_len = unhexify( key_str, "93f3fa85dbdb2784fb078a34b1116eb1" );
6769  pt_len = unhexify( src_str, "e7a0fafda0b90cada671f5e2adfd2e2a5f14e4613ea76aad57e79e2cb532f655210614e2036d7ac005ed5e516814d8667ed71e0f29b9c7b470f4722327407cd6ce6dbd298cee37bff33c35e34cdfebbbf33934673469d6b98becd6d26868977e69e06deee99c118fd4da3530d367d20d15107c03efe0d7e7b38710231e0dcdf0" );
6770  iv_len = unhexify( iv_str, "f5a7b0b26d1e86f4fc69f81c9eeff2cd" );
6771  add_len = unhexify( add_str, "3d2a1dadccc597b5e7b6ce48760150dee01c8550b525c587abcce8c2c7fb6291683a58c2e42e7b7ba6a3c2a117ddb7e67ea058a78989d67946fd9551e30fcb52618dcb9fae079ca56b74572d7b6a7b6a5c60e906e9639eac5ee1a5a2db864721119da2c4c5110c2b8d487e792cf6929600f1587cb2d48efe6864019afc32af6e" );
6772 
6773  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6774  if( 0 == 0 )
6775  {
6776  fct_chk( 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 );
6777  hexify( dst_str, output, pt_len );
6778  hexify( tag_str, tag_output, tag_len );
6779 
6780  fct_chk( strcmp( (char *) dst_str, "60da3f4b3a263bc0178379646bce391bf552f60d2833261962375d2960c629dedac681d86f7915ea3cffdad0f37e409668f923d7c860525b994b325396531994a2fbb2d4e909d0b1dce322e078b4b8cd99820a39ffd7b468bd3e73b418b9a2cd5757b7d45f0363574c925bc22d66645abd95a6b29ea6366d8c2252d1c5710d45" ) == 0 );
6781  fct_chk( strcmp( (char *) tag_str, "833d2c55f5ee493060540d6b5349" ) == 0 );
6782  }
6783  }
6784  FCT_TEST_END();
6785 
6786 
6787  FCT_TEST_BGN(gcm_nist_validation_aes_12812810241024104_0)
6788  {
6789  unsigned char key_str[128];
6790  unsigned char src_str[128];
6791  unsigned char dst_str[257];
6792  unsigned char iv_str[128];
6793  unsigned char add_str[128];
6794  unsigned char tag_str[128];
6795  unsigned char output[128];
6796  unsigned char tag_output[16];
6797  gcm_context ctx;
6798  unsigned int key_len;
6799  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
6800 
6801  memset(key_str, 0x00, 128);
6802  memset(src_str, 0x00, 128);
6803  memset(dst_str, 0x00, 257);
6804  memset(iv_str, 0x00, 128);
6805  memset(add_str, 0x00, 128);
6806  memset(tag_str, 0x00, 128);
6807  memset(output, 0x00, 128);
6808  memset(tag_output, 0x00, 16);
6809 
6810  key_len = unhexify( key_str, "163c05f69cdc4e518ff6445911d1ede0" );
6811  pt_len = unhexify( src_str, "84d8a1855423293de37ebfd9715a9b46b175bc6d44e94ac8a3e7d409e8a227a57a6b85144a8ee23564fadc28742b69e89c0d4aadf0a786f9a5d5f9198923643ffc0bfd0f96e43b08f1435d4afc0e49c0e2241d938780975bc7a31cdf38f30380753bdd66be72b4dff260a35dc10b9ba35059ba61b0beab16e35068721bd950e3" );
6812  iv_len = unhexify( iv_str, "4b16188249096682b88aa5e4a13f62c1" );
6813  add_len = unhexify( add_str, "a238d1111efb7811f6838c3cb6f3bf3e0ecee6d8efb26845391f8adb51e497e840ea40318bf8e3cf0681c3b69951c4f03d5a4b5edf7119a150eafe6dc16b68f3d2b91e1454637135148f4fec132bfd96ca088169a35961d4c663535b9852f12a00ec4c08082553a09ea046379ce747c717036154d063d876a2b95cd7bdb42daa" );
6814 
6815  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6816  if( 0 == 0 )
6817  {
6818  fct_chk( 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 );
6819  hexify( dst_str, output, pt_len );
6820  hexify( tag_str, tag_output, tag_len );
6821 
6822  fct_chk( strcmp( (char *) dst_str, "3bf751cf63bc1b433be6075303986ac1d0592dee400774d0bb7a9e72224417639e1e83e69f34226b873365f41fdac925628f32ed4b572b374310edfd892c5e0c3197e59efbc22ee11f0d4a66bd73a6f5b0de7c1cbb0612a63a262af51d418577a9bae0a8577e547382878f13047a92f51a867f8b7d283d2099c34c236918f718" ) == 0 );
6823  fct_chk( strcmp( (char *) tag_str, "0d778299c4dc0415ca789dd5b2" ) == 0 );
6824  }
6825  }
6826  FCT_TEST_END();
6827 
6828 
6829  FCT_TEST_BGN(gcm_nist_validation_aes_12812810241024104_1)
6830  {
6831  unsigned char key_str[128];
6832  unsigned char src_str[128];
6833  unsigned char dst_str[257];
6834  unsigned char iv_str[128];
6835  unsigned char add_str[128];
6836  unsigned char tag_str[128];
6837  unsigned char output[128];
6838  unsigned char tag_output[16];
6839  gcm_context ctx;
6840  unsigned int key_len;
6841  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
6842 
6843  memset(key_str, 0x00, 128);
6844  memset(src_str, 0x00, 128);
6845  memset(dst_str, 0x00, 257);
6846  memset(iv_str, 0x00, 128);
6847  memset(add_str, 0x00, 128);
6848  memset(tag_str, 0x00, 128);
6849  memset(output, 0x00, 128);
6850  memset(tag_output, 0x00, 16);
6851 
6852  key_len = unhexify( key_str, "a2ff7cb9fe33b04a087d9ee6db58ec0e" );
6853  pt_len = unhexify( src_str, "ed7c22218009ceb5b322045fecc1fd748f27655397a09c2c29813eba9a5cbeebe88d4a35dfd741ef0ac1d11c4adbc6bfae824af88e3ce09f68d8ca7671de91ec9e2bd5f790d1cb1748e34b3560c9b10726ea4b85b127731d8a7fdfd0ddbed11aaf181799f71a68e542b43ed9889237d2fffe370f41064b810c2e14d1ab661517" );
6854  iv_len = unhexify( iv_str, "6c58eb8f1f561b180f07ede0d3ae3358" );
6855  add_len = unhexify( add_str, "00cb63fa0cf526c6db37e33cf092f3f421fd258d28446c9a7c687b941c7eb5e1c5be267db992d0d93ede0b09030f979d451ecbdbbbb386cf1d74b23d55b74f5f4d520c000c9a41922f54567ca7dfcd84c68883a23c7acc3db3cd8d340217ee7c5ea39b41cf2c0e58c270a19ee9e146d2dbfdaf8ba3e24fda7f2c5e4ba6563ef4" );
6856 
6857  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6858  if( 0 == 0 )
6859  {
6860  fct_chk( 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 );
6861  hexify( dst_str, output, pt_len );
6862  hexify( tag_str, tag_output, tag_len );
6863 
6864  fct_chk( strcmp( (char *) dst_str, "f0f119bddf5ddf147fe06da9d4510d97369d8e345519df2188b8d2dbaf8b7d3e01f3c26475141aae224e5ce1b131c8096f0e2a17c4c2df62f76f009cfc8aa20ddcd75a6a4281cfa2225485ca22aabcb60ff11265acb92a19ed66797fc2b418ae4b8c70fbecf0fd63f6c22ad62bfd6f40d8d0e2abeb620b7b4f5d8b3e041a53e6" ) == 0 );
6865  fct_chk( strcmp( (char *) tag_str, "7885ca22c4afd7dc6cb440ea35" ) == 0 );
6866  }
6867  }
6868  FCT_TEST_END();
6869 
6870 
6871  FCT_TEST_BGN(gcm_nist_validation_aes_12812810241024104_2)
6872  {
6873  unsigned char key_str[128];
6874  unsigned char src_str[128];
6875  unsigned char dst_str[257];
6876  unsigned char iv_str[128];
6877  unsigned char add_str[128];
6878  unsigned char tag_str[128];
6879  unsigned char output[128];
6880  unsigned char tag_output[16];
6881  gcm_context ctx;
6882  unsigned int key_len;
6883  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
6884 
6885  memset(key_str, 0x00, 128);
6886  memset(src_str, 0x00, 128);
6887  memset(dst_str, 0x00, 257);
6888  memset(iv_str, 0x00, 128);
6889  memset(add_str, 0x00, 128);
6890  memset(tag_str, 0x00, 128);
6891  memset(output, 0x00, 128);
6892  memset(tag_output, 0x00, 16);
6893 
6894  key_len = unhexify( key_str, "2e739a485b6293b43535379e3b309fe8" );
6895  pt_len = unhexify( src_str, "699b9a5668042c48c63ffb323c0fab18446546417b2f33a69addce6178f9d5b7dfa891ff2004eb57a98ca012c2668e0614276d89b21b7bfa436b2aa1582daaa81a6a7722186e99dd16a5786fd0e8b09b194746232fd413984484524793a379112e297d733dce063408fe59367f5929c5086bc2191a8fdd60a346052c0d109d57" );
6896  iv_len = unhexify( iv_str, "c4deca3eeea80352624c93523f35e0ae" );
6897  add_len = unhexify( add_str, "704aa36a82d02c56f4992469bb7e8a3f7dda1326068bf6017e4a0c810352b476aea129c1ba1d4974bc0d0503dcf816b89c0dc8e6d066774ce97cea65b5fb5c7b5a7f93e5e2c7126dd3b241b958e47d8150b422bb91c4afc47d53cfc2d20176c2ea0c85b376dc46a86bbaa53c584aa561f6662d11de4e39e50f1a095b8555137b" );
6898 
6899  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6900  if( 0 == 0 )
6901  {
6902  fct_chk( 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 );
6903  hexify( dst_str, output, pt_len );
6904  hexify( tag_str, tag_output, tag_len );
6905 
6906  fct_chk( strcmp( (char *) dst_str, "30b8fa2e52577a7e5cdc12a7c619615b134ad4b41893ba9120651cd35c6f2d48ec6b8b9fa99366c4d60e643a8ccb2cbb3568f7647f4ad1a12d14deb8aac00dc4ef780133ee8df8f494675deb7f678fed54e70d6bf43476854eb0286a49cd322cc18daa238d4580ee665fbc759295a3e12567beff3e823811093cf0f02d00820b" ) == 0 );
6907  fct_chk( strcmp( (char *) tag_str, "ff89ee52fa4eaeb748c8676490" ) == 0 );
6908  }
6909  }
6910  FCT_TEST_END();
6911 
6912 
6913  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024102496_0)
6914  {
6915  unsigned char key_str[128];
6916  unsigned char src_str[128];
6917  unsigned char dst_str[257];
6918  unsigned char iv_str[128];
6919  unsigned char add_str[128];
6920  unsigned char tag_str[128];
6921  unsigned char output[128];
6922  unsigned char tag_output[16];
6923  gcm_context ctx;
6924  unsigned int key_len;
6925  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
6926 
6927  memset(key_str, 0x00, 128);
6928  memset(src_str, 0x00, 128);
6929  memset(dst_str, 0x00, 257);
6930  memset(iv_str, 0x00, 128);
6931  memset(add_str, 0x00, 128);
6932  memset(tag_str, 0x00, 128);
6933  memset(output, 0x00, 128);
6934  memset(tag_output, 0x00, 16);
6935 
6936  key_len = unhexify( key_str, "6bbb12361c95953a8d757bcbb92568eb" );
6937  pt_len = unhexify( src_str, "c3fccc5693abe53a13e5209f80611fad1e81e7ce19a4612666d954b4b6d2062bee764181716d5fe0fe1de485bb739d6e8625d5b6cedcaaf6e4e5ec350bc2168c24d7764e75b0cf079d7ad1b5fc24dbed14c5ae4714734f424b3611de0f70a0a8d752fb143e1b7e51ebc965a06021de3718af30b067dde270d804fb5b87ffb29f" );
6938  iv_len = unhexify( iv_str, "48ca821e5e43fd58668380491d58cdfb" );
6939  add_len = unhexify( add_str, "e97280fd78eb8bd695227fc79420971081de8f24bc95d9a1794ed2bebf5b68d8b43ae8288eb5ce72db0740334ff9bc9b4e660418d3cff8c344e50c7962c367c26247806d0b5c2ae0420a724203dcf4fdefd6513f8263d995afa4780a9c4e92c25496106fec370d0450d907225190ecccfae634f11f8f74f6422a652b2b9af9e5" );
6940 
6941  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6942  if( 0 == 0 )
6943  {
6944  fct_chk( 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 );
6945  hexify( dst_str, output, pt_len );
6946  hexify( tag_str, tag_output, tag_len );
6947 
6948  fct_chk( strcmp( (char *) dst_str, "61cfc5a6ab6847bf0127b35ce0712cbfa9cd28dfb3f0b4cac2624c52cf55f311e55e9abff2d4514c6feff801ea8739f874ded2efce4a440f2acd95eba6c75e09bcd91b898c98563a26b3df415658c4d04a6aaf547a90b03d1789bdf7ab8f09f6d9f222f567461380372a976240b7b180c3fa7b4507e53815af3f6b4a46973806" ) == 0 );
6949  fct_chk( strcmp( (char *) tag_str, "f86d5374d1ad269cc3f36756" ) == 0 );
6950  }
6951  }
6952  FCT_TEST_END();
6953 
6954 
6955  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024102496_1)
6956  {
6957  unsigned char key_str[128];
6958  unsigned char src_str[128];
6959  unsigned char dst_str[257];
6960  unsigned char iv_str[128];
6961  unsigned char add_str[128];
6962  unsigned char tag_str[128];
6963  unsigned char output[128];
6964  unsigned char tag_output[16];
6965  gcm_context ctx;
6966  unsigned int key_len;
6967  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
6968 
6969  memset(key_str, 0x00, 128);
6970  memset(src_str, 0x00, 128);
6971  memset(dst_str, 0x00, 257);
6972  memset(iv_str, 0x00, 128);
6973  memset(add_str, 0x00, 128);
6974  memset(tag_str, 0x00, 128);
6975  memset(output, 0x00, 128);
6976  memset(tag_output, 0x00, 16);
6977 
6978  key_len = unhexify( key_str, "1a0a9b2dd1ae31b3e47b6df979dd2fbf" );
6979  pt_len = unhexify( src_str, "353786f96620ae7dfa7aee163c7bb30384bb324b516cad13872f48e7251f6f4c5906748bf2a2f6167bc14453b2b2f513804308ba92d69639beac2f25274bd5477744281b7ef7d0661b3672cd45abd5bd30d98deac4ad0a565308c0224dff59e3190c86df6a5c52055f8e0f73fa024f99162219837c999a9c0a12c806f01227af" );
6980  iv_len = unhexify( iv_str, "b39c8615fa062412fd9b6ac3a7e626f6" );
6981  add_len = unhexify( add_str, "dea75b17cd13dd33b5016de549c44fa9c88baf424ac80c4835e868acb58082ffc4255c655878a1c627a44160d5e5054a0a04f65fdfb542cd342be2aa2e000117bf8cd67b02f3a3700755508f9af8379c226aded404117a5ca3fa70968495eab287064ee584b4ce596612f2c465d997518c6995518e3bb881967ab6b99d7f62d7" );
6982 
6983  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6984  if( 0 == 0 )
6985  {
6986  fct_chk( 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 );
6987  hexify( dst_str, output, pt_len );
6988  hexify( tag_str, tag_output, tag_len );
6989 
6990  fct_chk( strcmp( (char *) dst_str, "8430b8735f0b002e098d513eec7b3a8431a3fdac2b7faf256a7bcf08f3dcd6fa549f029240acae4dbd4ad54752ba358c14893aaa67a003261c252020d14b521906b23c37dd80af703c2964ce13773dd72fa56c389768c6efbd485953900b56f6bbaa837f1668f478677621a297d4b5a2c1a86f689d8644caec51435b0dd66c77" ) == 0 );
6991  fct_chk( strcmp( (char *) tag_str, "f000f2d398df18534428f382" ) == 0 );
6992  }
6993  }
6994  FCT_TEST_END();
6995 
6996 
6997  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024102496_2)
6998  {
6999  unsigned char key_str[128];
7000  unsigned char src_str[128];
7001  unsigned char dst_str[257];
7002  unsigned char iv_str[128];
7003  unsigned char add_str[128];
7004  unsigned char tag_str[128];
7005  unsigned char output[128];
7006  unsigned char tag_output[16];
7007  gcm_context ctx;
7008  unsigned int key_len;
7009  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
7010 
7011  memset(key_str, 0x00, 128);
7012  memset(src_str, 0x00, 128);
7013  memset(dst_str, 0x00, 257);
7014  memset(iv_str, 0x00, 128);
7015  memset(add_str, 0x00, 128);
7016  memset(tag_str, 0x00, 128);
7017  memset(output, 0x00, 128);
7018  memset(tag_output, 0x00, 16);
7019 
7020  key_len = unhexify( key_str, "4da736fba2b7202ea2ba60793da3344d" );
7021  pt_len = unhexify( src_str, "4f004852edd5dcde13507252ed8c2b20a093ac9081ce2a8133c48d2807e5f968c04a20dd52c070d6c43c704b8650da7f94e5450e0d34cfc2b2d2ba7cb5343e6b4281633c6c065dae27fab18ca71bea018eba94d20e78c5e3223c70f50cb77399c1a89436f1e7213673ae825d4fc5523645031696df10f9b5238c03f733b4dfcf" );
7022  iv_len = unhexify( iv_str, "8572af442c9af9652a192d893c18b8c3" );
7023  add_len = unhexify( add_str, "429915c3309fba2a42b8e89f42a9376a2f329805a4d6daae11e9a20c2f982671ef8a7539a9657777d03cbf755ef93be0d8e426ed00899a59e8b963fd44269d64692ed07b231cde93e85397cf125a75032ca3726ea1ff1b05d79f2040c1135012b90597186c1db2e16cd128d45a7b9d934ec01341d9030e9721c62f62003059b8" );
7024 
7025  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7026  if( 0 == 0 )
7027  {
7028  fct_chk( 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 );
7029  hexify( dst_str, output, pt_len );
7030  hexify( tag_str, tag_output, tag_len );
7031 
7032  fct_chk( strcmp( (char *) dst_str, "ff4e46c4236304b8d52ba2d6db269f95d2cd5fe4318ce930d407051469c7e36e44bbcc909c4966276f5a2ec70021982fecbeae34df235a3e9e0370afa5a269ca8847a84b8477f7ddd6055d0f800ff4d413f63db517c96d15dbe78655748edd820f2ee79df5eca31711870022f1f5394b84f05bfef97f99cbd6205f8e522b3d5e" ) == 0 );
7033  fct_chk( strcmp( (char *) tag_str, "624b0b5b6374c5153835b8e5" ) == 0 );
7034  }
7035  }
7036  FCT_TEST_END();
7037 
7038 
7039  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024102464_0)
7040  {
7041  unsigned char key_str[128];
7042  unsigned char src_str[128];
7043  unsigned char dst_str[257];
7044  unsigned char iv_str[128];
7045  unsigned char add_str[128];
7046  unsigned char tag_str[128];
7047  unsigned char output[128];
7048  unsigned char tag_output[16];
7049  gcm_context ctx;
7050  unsigned int key_len;
7051  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
7052 
7053  memset(key_str, 0x00, 128);
7054  memset(src_str, 0x00, 128);
7055  memset(dst_str, 0x00, 257);
7056  memset(iv_str, 0x00, 128);
7057  memset(add_str, 0x00, 128);
7058  memset(tag_str, 0x00, 128);
7059  memset(output, 0x00, 128);
7060  memset(tag_output, 0x00, 16);
7061 
7062  key_len = unhexify( key_str, "5bcc874114b9d78c3eb748a783d1448c" );
7063  pt_len = unhexify( src_str, "7d57418bcea007247f5e18c17a2e4601c3eb8c89f61ed365d5aebee7593cdd63871d964a25fc9d723f291d39e0c4f75012471faf8e06db60c4ad8a26cf434bd82a29a8b653fdda1b86a7e4800c1d70cb5d8b8a1d1af52894082bb282ffdde8f0128a4abb68aedcfcb59160f6b5aaf452812f4d00472d2862a8b22480e71231b3" );
7064  iv_len = unhexify( iv_str, "5f4fde440faa9537d62e62994ab20fb5" );
7065  add_len = unhexify( add_str, "b5dfe0d971f2920ba4c029d4c346a49788b499faacdb18b8f905f1457a8b9fa48709893516a7b48bc601710bfd73c12da094c29df5776d491c9978f8ab237f605785b0304488f1c20bf5a767ba6d5e1e2961957aa107bdba2358b81ef1e06576db985b3ef8194725b75d49de1de3a57f161dede508e37ad3356134fa0a1aa48e" );
7066 
7067  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7068  if( 0 == 0 )
7069  {
7070  fct_chk( 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 );
7071  hexify( dst_str, output, pt_len );
7072  hexify( tag_str, tag_output, tag_len );
7073 
7074  fct_chk( strcmp( (char *) dst_str, "6bc0dec98bece6c4e245fe978f6db113deca75e1b475bc31f1da0c7457a85ee7aac8be5f2121c0610b99a2c64519fc2514b643c379b4f53c5432b9729aea9fcecb88a2e2d0a6e74be04859a66f55fb2af1598bcb039108ef7fcfd99d94e79287ec1f62bd1bf5ff9dd51ab12fae4f6e21b95ca50032f9a65bd85f9a1aa0524950" ) == 0 );
7075  fct_chk( strcmp( (char *) tag_str, "354fb8bcd38f2a26" ) == 0 );
7076  }
7077  }
7078  FCT_TEST_END();
7079 
7080 
7081  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024102464_1)
7082  {
7083  unsigned char key_str[128];
7084  unsigned char src_str[128];
7085  unsigned char dst_str[257];
7086  unsigned char iv_str[128];
7087  unsigned char add_str[128];
7088  unsigned char tag_str[128];
7089  unsigned char output[128];
7090  unsigned char tag_output[16];
7091  gcm_context ctx;
7092  unsigned int key_len;
7093  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
7094 
7095  memset(key_str, 0x00, 128);
7096  memset(src_str, 0x00, 128);
7097  memset(dst_str, 0x00, 257);
7098  memset(iv_str, 0x00, 128);
7099  memset(add_str, 0x00, 128);
7100  memset(tag_str, 0x00, 128);
7101  memset(output, 0x00, 128);
7102  memset(tag_output, 0x00, 16);
7103 
7104  key_len = unhexify( key_str, "427c89146eb7d76578dc173bd9e15cda" );
7105  pt_len = unhexify( src_str, "1d39249130404d60ed40241cf3354458e06f1474b3723569d88235f03098053fc99010f39435620acc710a4e386b2ecbf9b327a8dcfbeddc084353fff029d24787ce81e74a5e1ac1ef096e0a2ae882a669ca168275806bb7f462e66c941fffc6ed44b9628450e03a5032676c1ee4aedfcb1767150d56c7d73a8a47f6d19854fa" );
7106  iv_len = unhexify( iv_str, "0092e76cd8882e5f77f4c8514491705d" );
7107  add_len = unhexify( add_str, "0ac4631358bb9375e07756692bde59d27012e921f054fdfea0ddb242c43421f4c7241cb210cb5c172d053de2763efd565f1138fbe7f9cd998d825ab800df900843474ebf857b3371c555b89670e86354fe430f715ebbd0ecad974fea34e3bbae43d3ca3ca178f3361f0a11fd75f60e9140f44364b02a073dcce8339fa28cb5ad" );
7108 
7109  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7110  if( 0 == 0 )
7111  {
7112  fct_chk( 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 );
7113  hexify( dst_str, output, pt_len );
7114  hexify( tag_str, tag_output, tag_len );
7115 
7116  fct_chk( strcmp( (char *) dst_str, "2b385e9df4ed41cdca53a4ac8cb3e0af75eddd518b6727380712950d96c34bc6a0a6ac02184c1987548932b116ec9ae7abf01157a50e422b3e6aa62deb0cb2d81bf7fe0c25041a355ccaaeb049abb0393acfe90d869e9edfdfb646971bbb1ba9e5983cd0e2739158fab31be26cfdf9286d347b58b00f75d9f48ece1353308a91" ) == 0 );
7117  fct_chk( strcmp( (char *) tag_str, "905cdf228a68bebb" ) == 0 );
7118  }
7119  }
7120  FCT_TEST_END();
7121 
7122 
7123  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024102464_2)
7124  {
7125  unsigned char key_str[128];
7126  unsigned char src_str[128];
7127  unsigned char dst_str[257];
7128  unsigned char iv_str[128];
7129  unsigned char add_str[128];
7130  unsigned char tag_str[128];
7131  unsigned char output[128];
7132  unsigned char tag_output[16];
7133  gcm_context ctx;
7134  unsigned int key_len;
7135  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
7136 
7137  memset(key_str, 0x00, 128);
7138  memset(src_str, 0x00, 128);
7139  memset(dst_str, 0x00, 257);
7140  memset(iv_str, 0x00, 128);
7141  memset(add_str, 0x00, 128);
7142  memset(tag_str, 0x00, 128);
7143  memset(output, 0x00, 128);
7144  memset(tag_output, 0x00, 16);
7145 
7146  key_len = unhexify( key_str, "2e09660909a9aa0a50958016c3e07895" );
7147  pt_len = unhexify( src_str, "d7b2ceb182d4a8ed57572c4237ba99bbdd589093db0f71732f9e67559d3054fa1af195aa4864fde413549d27468ffe7c5c23e242cab4ae4bb9e2657422dc3fc78fbdcde892ed202be1e47f095b09cfc53cfe86cb16e2e95444492ad5d0eef053178d6b0485731be7a5193563bf56f63cc0687fc01679254d74e9ed788645004c" );
7148  iv_len = unhexify( iv_str, "c4f865be8b5062e488b1725749a87945" );
7149  add_len = unhexify( add_str, "26f50acdefde4d585fc6de6c6234c9ead40684349a2bfd022df93d9774c9f5b8f50474032a417bdcc21a74da72c0297437a0cef8f527c9205797f77b4227c272e08ad0b120a2a31ef13e372cad2387ccc1bcefc88dd58899821d68f3be6a4b2cd08697d1897efcd6ed3a0d7849f6cbb50e46800627cfd26964e2cfe9f36624d9" );
7150 
7151  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7152  if( 0 == 0 )
7153  {
7154  fct_chk( 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 );
7155  hexify( dst_str, output, pt_len );
7156  hexify( tag_str, tag_output, tag_len );
7157 
7158  fct_chk( strcmp( (char *) dst_str, "321f6d79a6658c7c2b67fe3c932237593a6ec7e6fd8198abc6b0b6ba5d4dac9e0695f0c64dde1c94c0383839ee37f8bbfcc516f24871fd79a9b9135ceef841e4c8ddf6b57962c0e8ad7aaf210e97a43489097270756404fddde637de461b8644fef244142820e1af12b90f16748b0915a6b773dfbbdf6b16f1beaccb4cd5edba" ) == 0 );
7159  fct_chk( strcmp( (char *) tag_str, "b294db7ed69912dc" ) == 0 );
7160  }
7161  }
7162  FCT_TEST_END();
7163 
7164 
7165  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024102432_0)
7166  {
7167  unsigned char key_str[128];
7168  unsigned char src_str[128];
7169  unsigned char dst_str[257];
7170  unsigned char iv_str[128];
7171  unsigned char add_str[128];
7172  unsigned char tag_str[128];
7173  unsigned char output[128];
7174  unsigned char tag_output[16];
7175  gcm_context ctx;
7176  unsigned int key_len;
7177  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
7178 
7179  memset(key_str, 0x00, 128);
7180  memset(src_str, 0x00, 128);
7181  memset(dst_str, 0x00, 257);
7182  memset(iv_str, 0x00, 128);
7183  memset(add_str, 0x00, 128);
7184  memset(tag_str, 0x00, 128);
7185  memset(output, 0x00, 128);
7186  memset(tag_output, 0x00, 16);
7187 
7188  key_len = unhexify( key_str, "5e45d57981f65a6b170efa758cf4553d" );
7189  pt_len = unhexify( src_str, "bc8d4c418442743f2fdbaf95b8f87b7c15a3176085e34addf4cf0fb3c2df15587526691b07e6407ba16999b72382635a2aebb62d05c1547a7d074c857a23107c7577864e7f7bcdb5b6d1fb50136391f89c42d3f02754b0e4ed0fcb0c03576b986af5c12cf9bf5e0c585d6aaf49d0c6fb2ec30eae97b2b850a35474bfb9a2c069" );
7190  iv_len = unhexify( iv_str, "b43403b627fe9e0135192d1a048c6faa" );
7191  add_len = unhexify( add_str, "7a27ea26c7607e4e7e627f3161bdf15f21f3d62dc33df14951971712f960d3b2082d75395c5008e5ea00d282d350f86dac8c61f5c0f90e7797a5b61ee96f7e332ec5de51cb1377e47c641f326d1e58817c8c95feb5b2923758e33b279191d0a9ffd09b7619b0318a70775e36abf5f7ab59422ff68914e7b478c448a7b141c4bf" );
7192 
7193  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7194  if( 0 == 0 )
7195  {
7196  fct_chk( 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 );
7197  hexify( dst_str, output, pt_len );
7198  hexify( tag_str, tag_output, tag_len );
7199 
7200  fct_chk( strcmp( (char *) dst_str, "90d8a6218da063c38e0f06d548a3d5685fd3e0fbaf609c77bdd573bb9c63f30590eaf8b181a2feb81c8b3f5f34a94dc94b905036a6c69b97263302b8674d9e09325065588e97c0b5b33116981f1f362a7c5bb1e996c126c31fbd63791772f4d594632f408fdf011b3f2cc750b060452c181e8e09697c8662c00c8d4f29d875a7" ) == 0 );
7201  fct_chk( strcmp( (char *) tag_str, "611abef7" ) == 0 );
7202  }
7203  }
7204  FCT_TEST_END();
7205 
7206 
7207  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024102432_1)
7208  {
7209  unsigned char key_str[128];
7210  unsigned char src_str[128];
7211  unsigned char dst_str[257];
7212  unsigned char iv_str[128];
7213  unsigned char add_str[128];
7214  unsigned char tag_str[128];
7215  unsigned char output[128];
7216  unsigned char tag_output[16];
7217  gcm_context ctx;
7218  unsigned int key_len;
7219  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
7220 
7221  memset(key_str, 0x00, 128);
7222  memset(src_str, 0x00, 128);
7223  memset(dst_str, 0x00, 257);
7224  memset(iv_str, 0x00, 128);
7225  memset(add_str, 0x00, 128);
7226  memset(tag_str, 0x00, 128);
7227  memset(output, 0x00, 128);
7228  memset(tag_output, 0x00, 16);
7229 
7230  key_len = unhexify( key_str, "00d4bf20509a61bc76430ffa5f013589" );
7231  pt_len = unhexify( src_str, "036a191a388cf3c57c9e6f0e2f5c8bc3d5c25ee8e2fedfadb7b7433155c7e79304f0905ab2a17e1f04f2f2dacd4a41521d6ce213961df9dc9101d41df4e44246488fbedb75a01256fbc7784769eb8f99d44d5eabf93cf667ebae2437ccedc79efa58c075183d46a5c20bf4c81e0f9754ad35af65f7c8aafe7daa3460c6892b1a" );
7232  iv_len = unhexify( iv_str, "25b1026a009470a5ca8caeeb67200792" );
7233  add_len = unhexify( add_str, "fd75acfd5aa25fb8bccb53672e5d6a8080081506cf03df2bab0746a353510996e0237d6354ee0210a41f20f88ec6569f2b200b28c6a31464a0533a6bc45afef3ae381425a3606de2866dba694124d96da9d0a2b061b787524ee6e5d3b1ef5c4bcf168810aa177660b7e1379ac8a480ce43d73dfcc696873cea2df419f372651e" );
7234 
7235  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7236  if( 0 == 0 )
7237  {
7238  fct_chk( 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 );
7239  hexify( dst_str, output, pt_len );
7240  hexify( tag_str, tag_output, tag_len );
7241 
7242  fct_chk( strcmp( (char *) dst_str, "cab80615b666c47fcabf0d9805842ab2805150abad4de0ae8b12306bed504d4a7f91f52379df65cb9587577e59dafcd4203d2ed2743d35472285e9522db0ce3dd027a01c79ac64caee29ef3752a077254b0dca269f6f206f6cc575e8fedb0ba525dcf6252fa6f7b688556933f1dee84b2ad36a266695ce8672229cedd82f20a1" ) == 0 );
7243  fct_chk( strcmp( (char *) tag_str, "3287478c" ) == 0 );
7244  }
7245  }
7246  FCT_TEST_END();
7247 
7248 
7249  FCT_TEST_BGN(gcm_nist_validation_aes_1281281024102432_2)
7250  {
7251  unsigned char key_str[128];
7252  unsigned char src_str[128];
7253  unsigned char dst_str[257];
7254  unsigned char iv_str[128];
7255  unsigned char add_str[128];
7256  unsigned char tag_str[128];
7257  unsigned char output[128];
7258  unsigned char tag_output[16];
7259  gcm_context ctx;
7260  unsigned int key_len;
7261  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
7262 
7263  memset(key_str, 0x00, 128);
7264  memset(src_str, 0x00, 128);
7265  memset(dst_str, 0x00, 257);
7266  memset(iv_str, 0x00, 128);
7267  memset(add_str, 0x00, 128);
7268  memset(tag_str, 0x00, 128);
7269  memset(output, 0x00, 128);
7270  memset(tag_output, 0x00, 16);
7271 
7272  key_len = unhexify( key_str, "fe481476fce76efcfc78ed144b0756f1" );
7273  pt_len = unhexify( src_str, "246e1f2babab8da98b17cc928bd49504d7d87ea2cc174f9ffb7dbafe5969ff824a0bcb52f35441d22f3edcd10fab0ec04c0bde5abd3624ca25cbb4541b5d62a3deb52c00b75d68aaf0504d51f95b8dcbebdd8433f4966c584ac7f8c19407ca927a79fa4ead2688c4a7baafb4c31ef83c05e8848ec2b4f657aab84c109c91c277" );
7274  iv_len = unhexify( iv_str, "1a2c18c6bf13b3b2785610c71ccd98ca" );
7275  add_len = unhexify( add_str, "b0ab3cb5256575774b8242b89badfbe0dfdfd04f5dd75a8e5f218b28d3f6bc085a013defa5f5b15dfb46132db58ed7a9ddb812d28ee2f962796ad988561a381c02d1cf37dca5fd33e081d61cc7b3ab0b477947524a4ca4cb48c36f48b302c440be6f5777518a60585a8a16cea510dbfc5580b0daac49a2b1242ff55e91a8eae8" );
7276 
7277  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7278  if( 0 == 0 )
7279  {
7280  fct_chk( 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 );
7281  hexify( dst_str, output, pt_len );
7282  hexify( tag_str, tag_output, tag_len );
7283 
7284  fct_chk( strcmp( (char *) dst_str, "5587620bbb77f70afdf3cdb7ae390edd0473286d86d3f862ad70902d90ff1d315947c959f016257a8fe1f52cc22a54f21de8cb60b74808ac7b22ea7a15945371e18b77c9571aad631aa080c60c1e472019fa85625fc80ed32a51d05e397a8987c8fece197a566689d24d05361b6f3a75616c89db6123bf5902960b21a18bc03a" ) == 0 );
7285  fct_chk( strcmp( (char *) tag_str, "bd4265a8" ) == 0 );
7286  }
7287  }
7288  FCT_TEST_END();
7289 
7290 
7291  FCT_TEST_BGN(gcm_nist_validation_aes_19212800128_0)
7292  {
7293  unsigned char key_str[128];
7294  unsigned char src_str[128];
7295  unsigned char dst_str[257];
7296  unsigned char iv_str[128];
7297  unsigned char add_str[128];
7298  unsigned char tag_str[128];
7299  unsigned char output[128];
7300  unsigned char tag_output[16];
7301  gcm_context ctx;
7302  unsigned int key_len;
7303  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
7304 
7305  memset(key_str, 0x00, 128);
7306  memset(src_str, 0x00, 128);
7307  memset(dst_str, 0x00, 257);
7308  memset(iv_str, 0x00, 128);
7309  memset(add_str, 0x00, 128);
7310  memset(tag_str, 0x00, 128);
7311  memset(output, 0x00, 128);
7312  memset(tag_output, 0x00, 16);
7313 
7314  key_len = unhexify( key_str, "f8022b8988383d5cfd7d9e0e208146e7868d3d714fe85744" );
7315  pt_len = unhexify( src_str, "" );
7316  iv_len = unhexify( iv_str, "5fccd8cb551cfc9c20998da4cb981d49" );
7317  add_len = unhexify( add_str, "" );
7318 
7319  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7320  if( 0 == 0 )
7321  {
7322  fct_chk( 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 );
7323  hexify( dst_str, output, pt_len );
7324  hexify( tag_str, tag_output, tag_len );
7325 
7326  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
7327  fct_chk( strcmp( (char *) tag_str, "1b5c6c9a28f5edfa4cf99176b0f14077" ) == 0 );
7328  }
7329  }
7330  FCT_TEST_END();
7331 
7332 
7333  FCT_TEST_BGN(gcm_nist_validation_aes_19212800128_1)
7334  {
7335  unsigned char key_str[128];
7336  unsigned char src_str[128];
7337  unsigned char dst_str[257];
7338  unsigned char iv_str[128];
7339  unsigned char add_str[128];
7340  unsigned char tag_str[128];
7341  unsigned char output[128];
7342  unsigned char tag_output[16];
7343  gcm_context ctx;
7344  unsigned int key_len;
7345  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
7346 
7347  memset(key_str, 0x00, 128);
7348  memset(src_str, 0x00, 128);
7349  memset(dst_str, 0x00, 257);
7350  memset(iv_str, 0x00, 128);
7351  memset(add_str, 0x00, 128);
7352  memset(tag_str, 0x00, 128);
7353  memset(output, 0x00, 128);
7354  memset(tag_output, 0x00, 16);
7355 
7356  key_len = unhexify( key_str, "a7d4456b8e16b82283b677bd8c4b1f56dc7f153b5cfa746f" );
7357  pt_len = unhexify( src_str, "" );
7358  iv_len = unhexify( iv_str, "081de4a3f71f5d6fdf7801ff6c667f7d" );
7359  add_len = unhexify( add_str, "" );
7360 
7361  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7362  if( 0 == 0 )
7363  {
7364  fct_chk( 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 );
7365  hexify( dst_str, output, pt_len );
7366  hexify( tag_str, tag_output, tag_len );
7367 
7368  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
7369  fct_chk( strcmp( (char *) tag_str, "90c2729c5ba04f8f5c73726c910640aa" ) == 0 );
7370  }
7371  }
7372  FCT_TEST_END();
7373 
7374 
7375  FCT_TEST_BGN(gcm_nist_validation_aes_19212800128_2)
7376  {
7377  unsigned char key_str[128];
7378  unsigned char src_str[128];
7379  unsigned char dst_str[257];
7380  unsigned char iv_str[128];
7381  unsigned char add_str[128];
7382  unsigned char tag_str[128];
7383  unsigned char output[128];
7384  unsigned char tag_output[16];
7385  gcm_context ctx;
7386  unsigned int key_len;
7387  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
7388 
7389  memset(key_str, 0x00, 128);
7390  memset(src_str, 0x00, 128);
7391  memset(dst_str, 0x00, 257);
7392  memset(iv_str, 0x00, 128);
7393  memset(add_str, 0x00, 128);
7394  memset(tag_str, 0x00, 128);
7395  memset(output, 0x00, 128);
7396  memset(tag_output, 0x00, 16);
7397 
7398  key_len = unhexify( key_str, "5779b60b536b096c9348cd8dafb3451280791e319b7198c2" );
7399  pt_len = unhexify( src_str, "" );
7400  iv_len = unhexify( iv_str, "62f8e195bc79957ca8ce99a88ded1a02" );
7401  add_len = unhexify( add_str, "" );
7402 
7403  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7404  if( 0 == 0 )
7405  {
7406  fct_chk( 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 );
7407  hexify( dst_str, output, pt_len );
7408  hexify( tag_str, tag_output, tag_len );
7409 
7410  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
7411  fct_chk( strcmp( (char *) tag_str, "699d71bb63c668b533c357662f861513" ) == 0 );
7412  }
7413  }
7414  FCT_TEST_END();
7415 
7416 
7417  FCT_TEST_BGN(gcm_nist_validation_aes_19212800120_0)
7418  {
7419  unsigned char key_str[128];
7420  unsigned char src_str[128];
7421  unsigned char dst_str[257];
7422  unsigned char iv_str[128];
7423  unsigned char add_str[128];
7424  unsigned char tag_str[128];
7425  unsigned char output[128];
7426  unsigned char tag_output[16];
7427  gcm_context ctx;
7428  unsigned int key_len;
7429  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
7430 
7431  memset(key_str, 0x00, 128);
7432  memset(src_str, 0x00, 128);
7433  memset(dst_str, 0x00, 257);
7434  memset(iv_str, 0x00, 128);
7435  memset(add_str, 0x00, 128);
7436  memset(tag_str, 0x00, 128);
7437  memset(output, 0x00, 128);
7438  memset(tag_output, 0x00, 16);
7439 
7440  key_len = unhexify( key_str, "966cfb078f695c8ad84ede2fb96fb89488fa271dd3b50346" );
7441  pt_len = unhexify( src_str, "" );
7442  iv_len = unhexify( iv_str, "4a7b709d45745d94c5433b01fc9d57fb" );
7443  add_len = unhexify( add_str, "" );
7444 
7445  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7446  if( 0 == 0 )
7447  {
7448  fct_chk( 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 );
7449  hexify( dst_str, output, pt_len );
7450  hexify( tag_str, tag_output, tag_len );
7451 
7452  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
7453  fct_chk( strcmp( (char *) tag_str, "4a9bd213420629a5f6e471650060e0" ) == 0 );
7454  }
7455  }
7456  FCT_TEST_END();
7457 
7458 
7459  FCT_TEST_BGN(gcm_nist_validation_aes_19212800120_1)
7460  {
7461  unsigned char key_str[128];
7462  unsigned char src_str[128];
7463  unsigned char dst_str[257];
7464  unsigned char iv_str[128];
7465  unsigned char add_str[128];
7466  unsigned char tag_str[128];
7467  unsigned char output[128];
7468  unsigned char tag_output[16];
7469  gcm_context ctx;
7470  unsigned int key_len;
7471  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
7472 
7473  memset(key_str, 0x00, 128);
7474  memset(src_str, 0x00, 128);
7475  memset(dst_str, 0x00, 257);
7476  memset(iv_str, 0x00, 128);
7477  memset(add_str, 0x00, 128);
7478  memset(tag_str, 0x00, 128);
7479  memset(output, 0x00, 128);
7480  memset(tag_output, 0x00, 16);
7481 
7482  key_len = unhexify( key_str, "cc69ed684af2c2bd2b3e2d2f9faf98acf8071a686c31e8e3" );
7483  pt_len = unhexify( src_str, "" );
7484  iv_len = unhexify( iv_str, "0bd4197e5ab294ab7ab1e6ec75db2ac0" );
7485  add_len = unhexify( add_str, "" );
7486 
7487  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7488  if( 0 == 0 )
7489  {
7490  fct_chk( 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 );
7491  hexify( dst_str, output, pt_len );
7492  hexify( tag_str, tag_output, tag_len );
7493 
7494  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
7495  fct_chk( strcmp( (char *) tag_str, "6632b618b4cab963dd671fd53d2075" ) == 0 );
7496  }
7497  }
7498  FCT_TEST_END();
7499 
7500 
7501  FCT_TEST_BGN(gcm_nist_validation_aes_19212800120_2)
7502  {
7503  unsigned char key_str[128];
7504  unsigned char src_str[128];
7505  unsigned char dst_str[257];
7506  unsigned char iv_str[128];
7507  unsigned char add_str[128];
7508  unsigned char tag_str[128];
7509  unsigned char output[128];
7510  unsigned char tag_output[16];
7511  gcm_context ctx;
7512  unsigned int key_len;
7513  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
7514 
7515  memset(key_str, 0x00, 128);
7516  memset(src_str, 0x00, 128);
7517  memset(dst_str, 0x00, 257);
7518  memset(iv_str, 0x00, 128);
7519  memset(add_str, 0x00, 128);
7520  memset(tag_str, 0x00, 128);
7521  memset(output, 0x00, 128);
7522  memset(tag_output, 0x00, 16);
7523 
7524  key_len = unhexify( key_str, "99deafc5ec6155043b53a86d466c2b652d59b7274bb844ef" );
7525  pt_len = unhexify( src_str, "" );
7526  iv_len = unhexify( iv_str, "09d18e85e5ed38f51e04a724faf33a0e" );
7527  add_len = unhexify( add_str, "" );
7528 
7529  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7530  if( 0 == 0 )
7531  {
7532  fct_chk( 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 );
7533  hexify( dst_str, output, pt_len );
7534  hexify( tag_str, tag_output, tag_len );
7535 
7536  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
7537  fct_chk( strcmp( (char *) tag_str, "90bfade2f07f38b2192e24689b61cb" ) == 0 );
7538  }
7539  }
7540  FCT_TEST_END();
7541 
7542 
7543  FCT_TEST_BGN(gcm_nist_validation_aes_19212800112_0)
7544  {
7545  unsigned char key_str[128];
7546  unsigned char src_str[128];
7547  unsigned char dst_str[257];
7548  unsigned char iv_str[128];
7549  unsigned char add_str[128];
7550  unsigned char tag_str[128];
7551  unsigned char output[128];
7552  unsigned char tag_output[16];
7553  gcm_context ctx;
7554  unsigned int key_len;
7555  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
7556 
7557  memset(key_str, 0x00, 128);
7558  memset(src_str, 0x00, 128);
7559  memset(dst_str, 0x00, 257);
7560  memset(iv_str, 0x00, 128);
7561  memset(add_str, 0x00, 128);
7562  memset(tag_str, 0x00, 128);
7563  memset(output, 0x00, 128);
7564  memset(tag_output, 0x00, 16);
7565 
7566  key_len = unhexify( key_str, "5c0c706a1fd48005e0fd0ed91b4d9f0028c500dccb28ca73" );
7567  pt_len = unhexify( src_str, "" );
7568  iv_len = unhexify( iv_str, "595716e15498454577d3581e94f5c77e" );
7569  add_len = unhexify( add_str, "" );
7570 
7571  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7572  if( 0 == 0 )
7573  {
7574  fct_chk( 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 );
7575  hexify( dst_str, output, pt_len );
7576  hexify( tag_str, tag_output, tag_len );
7577 
7578  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
7579  fct_chk( strcmp( (char *) tag_str, "8b10eacb1f127f4c58cbb8c3516c" ) == 0 );
7580  }
7581  }
7582  FCT_TEST_END();
7583 
7584 
7585  FCT_TEST_BGN(gcm_nist_validation_aes_19212800112_1)
7586  {
7587  unsigned char key_str[128];
7588  unsigned char src_str[128];
7589  unsigned char dst_str[257];
7590  unsigned char iv_str[128];
7591  unsigned char add_str[128];
7592  unsigned char tag_str[128];
7593  unsigned char output[128];
7594  unsigned char tag_output[16];
7595  gcm_context ctx;
7596  unsigned int key_len;
7597  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
7598 
7599  memset(key_str, 0x00, 128);
7600  memset(src_str, 0x00, 128);
7601  memset(dst_str, 0x00, 257);
7602  memset(iv_str, 0x00, 128);
7603  memset(add_str, 0x00, 128);
7604  memset(tag_str, 0x00, 128);
7605  memset(output, 0x00, 128);
7606  memset(tag_output, 0x00, 16);
7607 
7608  key_len = unhexify( key_str, "ae8e125507ea16d5282fe8bac42d3cb4908b717f345e6a38" );
7609  pt_len = unhexify( src_str, "" );
7610  iv_len = unhexify( iv_str, "0a7f64edb8cd8052fcd5b92e20c0bc2d" );
7611  add_len = unhexify( add_str, "" );
7612 
7613  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7614  if( 0 == 0 )
7615  {
7616  fct_chk( 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 );
7617  hexify( dst_str, output, pt_len );
7618  hexify( tag_str, tag_output, tag_len );
7619 
7620  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
7621  fct_chk( strcmp( (char *) tag_str, "467a2c0ba1d24c414f758200b8a4" ) == 0 );
7622  }
7623  }
7624  FCT_TEST_END();
7625 
7626 
7627  FCT_TEST_BGN(gcm_nist_validation_aes_19212800112_2)
7628  {
7629  unsigned char key_str[128];
7630  unsigned char src_str[128];
7631  unsigned char dst_str[257];
7632  unsigned char iv_str[128];
7633  unsigned char add_str[128];
7634  unsigned char tag_str[128];
7635  unsigned char output[128];
7636  unsigned char tag_output[16];
7637  gcm_context ctx;
7638  unsigned int key_len;
7639  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
7640 
7641  memset(key_str, 0x00, 128);
7642  memset(src_str, 0x00, 128);
7643  memset(dst_str, 0x00, 257);
7644  memset(iv_str, 0x00, 128);
7645  memset(add_str, 0x00, 128);
7646  memset(tag_str, 0x00, 128);
7647  memset(output, 0x00, 128);
7648  memset(tag_output, 0x00, 16);
7649 
7650  key_len = unhexify( key_str, "02176a5a5d8cb8f5ccee3f66a22181765ce730751c135198" );
7651  pt_len = unhexify( src_str, "" );
7652  iv_len = unhexify( iv_str, "c19ed1f52f5ebbcf89ab1907b9ebc7f7" );
7653  add_len = unhexify( add_str, "" );
7654 
7655  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7656  if( 0 == 0 )
7657  {
7658  fct_chk( 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 );
7659  hexify( dst_str, output, pt_len );
7660  hexify( tag_str, tag_output, tag_len );
7661 
7662  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
7663  fct_chk( strcmp( (char *) tag_str, "6525beb5856d6f29105777e31457" ) == 0 );
7664  }
7665  }
7666  FCT_TEST_END();
7667 
7668 
7669  FCT_TEST_BGN(gcm_nist_validation_aes_19212800104_0)
7670  {
7671  unsigned char key_str[128];
7672  unsigned char src_str[128];
7673  unsigned char dst_str[257];
7674  unsigned char iv_str[128];
7675  unsigned char add_str[128];
7676  unsigned char tag_str[128];
7677  unsigned char output[128];
7678  unsigned char tag_output[16];
7679  gcm_context ctx;
7680  unsigned int key_len;
7681  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
7682 
7683  memset(key_str, 0x00, 128);
7684  memset(src_str, 0x00, 128);
7685  memset(dst_str, 0x00, 257);
7686  memset(iv_str, 0x00, 128);
7687  memset(add_str, 0x00, 128);
7688  memset(tag_str, 0x00, 128);
7689  memset(output, 0x00, 128);
7690  memset(tag_output, 0x00, 16);
7691 
7692  key_len = unhexify( key_str, "4434d6bce3a33551733d7afe8cd477a79be8eeac19bc0a05" );
7693  pt_len = unhexify( src_str, "" );
7694  iv_len = unhexify( iv_str, "b0eafdf326886eaacb750dcf2c104abe" );
7695  add_len = unhexify( add_str, "" );
7696 
7697  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7698  if( 0 == 0 )
7699  {
7700  fct_chk( 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 );
7701  hexify( dst_str, output, pt_len );
7702  hexify( tag_str, tag_output, tag_len );
7703 
7704  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
7705  fct_chk( strcmp( (char *) tag_str, "ab9f7923a3b9228cb9ecd7f907" ) == 0 );
7706  }
7707  }
7708  FCT_TEST_END();
7709 
7710 
7711  FCT_TEST_BGN(gcm_nist_validation_aes_19212800104_1)
7712  {
7713  unsigned char key_str[128];
7714  unsigned char src_str[128];
7715  unsigned char dst_str[257];
7716  unsigned char iv_str[128];
7717  unsigned char add_str[128];
7718  unsigned char tag_str[128];
7719  unsigned char output[128];
7720  unsigned char tag_output[16];
7721  gcm_context ctx;
7722  unsigned int key_len;
7723  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
7724 
7725  memset(key_str, 0x00, 128);
7726  memset(src_str, 0x00, 128);
7727  memset(dst_str, 0x00, 257);
7728  memset(iv_str, 0x00, 128);
7729  memset(add_str, 0x00, 128);
7730  memset(tag_str, 0x00, 128);
7731  memset(output, 0x00, 128);
7732  memset(tag_output, 0x00, 16);
7733 
7734  key_len = unhexify( key_str, "39994c2520a6196cc3f3e8c6e4833286ce37399e0379563b" );
7735  pt_len = unhexify( src_str, "" );
7736  iv_len = unhexify( iv_str, "dbf9c40266d95191d70739e932cd8572" );
7737  add_len = unhexify( add_str, "" );
7738 
7739  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7740  if( 0 == 0 )
7741  {
7742  fct_chk( 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 );
7743  hexify( dst_str, output, pt_len );
7744  hexify( tag_str, tag_output, tag_len );
7745 
7746  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
7747  fct_chk( strcmp( (char *) tag_str, "b29acaf5addd6b379315535375" ) == 0 );
7748  }
7749  }
7750  FCT_TEST_END();
7751 
7752 
7753  FCT_TEST_BGN(gcm_nist_validation_aes_19212800104_2)
7754  {
7755  unsigned char key_str[128];
7756  unsigned char src_str[128];
7757  unsigned char dst_str[257];
7758  unsigned char iv_str[128];
7759  unsigned char add_str[128];
7760  unsigned char tag_str[128];
7761  unsigned char output[128];
7762  unsigned char tag_output[16];
7763  gcm_context ctx;
7764  unsigned int key_len;
7765  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
7766 
7767  memset(key_str, 0x00, 128);
7768  memset(src_str, 0x00, 128);
7769  memset(dst_str, 0x00, 257);
7770  memset(iv_str, 0x00, 128);
7771  memset(add_str, 0x00, 128);
7772  memset(tag_str, 0x00, 128);
7773  memset(output, 0x00, 128);
7774  memset(tag_output, 0x00, 16);
7775 
7776  key_len = unhexify( key_str, "1f27d054114a264b37ee1821a077773750cc79d28594f506" );
7777  pt_len = unhexify( src_str, "" );
7778  iv_len = unhexify( iv_str, "6739d43092620f44b57e65035ce14565" );
7779  add_len = unhexify( add_str, "" );
7780 
7781  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7782  if( 0 == 0 )
7783  {
7784  fct_chk( 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 );
7785  hexify( dst_str, output, pt_len );
7786  hexify( tag_str, tag_output, tag_len );
7787 
7788  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
7789  fct_chk( strcmp( (char *) tag_str, "25e0434a3660704eee4bb82962" ) == 0 );
7790  }
7791  }
7792  FCT_TEST_END();
7793 
7794 
7795  FCT_TEST_BGN(gcm_nist_validation_aes_1921280096_0)
7796  {
7797  unsigned char key_str[128];
7798  unsigned char src_str[128];
7799  unsigned char dst_str[257];
7800  unsigned char iv_str[128];
7801  unsigned char add_str[128];
7802  unsigned char tag_str[128];
7803  unsigned char output[128];
7804  unsigned char tag_output[16];
7805  gcm_context ctx;
7806  unsigned int key_len;
7807  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
7808 
7809  memset(key_str, 0x00, 128);
7810  memset(src_str, 0x00, 128);
7811  memset(dst_str, 0x00, 257);
7812  memset(iv_str, 0x00, 128);
7813  memset(add_str, 0x00, 128);
7814  memset(tag_str, 0x00, 128);
7815  memset(output, 0x00, 128);
7816  memset(tag_output, 0x00, 16);
7817 
7818  key_len = unhexify( key_str, "0e97d15f4992a6354e43944fd346da65ac1f0f1229189442" );
7819  pt_len = unhexify( src_str, "" );
7820  iv_len = unhexify( iv_str, "32a64e826b500d7e85f4c42a784f7c19" );
7821  add_len = unhexify( add_str, "" );
7822 
7823  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7824  if( 0 == 0 )
7825  {
7826  fct_chk( 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 );
7827  hexify( dst_str, output, pt_len );
7828  hexify( tag_str, tag_output, tag_len );
7829 
7830  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
7831  fct_chk( strcmp( (char *) tag_str, "da8f3e0a6f156ec260aa34fd" ) == 0 );
7832  }
7833  }
7834  FCT_TEST_END();
7835 
7836 
7837  FCT_TEST_BGN(gcm_nist_validation_aes_1921280096_1)
7838  {
7839  unsigned char key_str[128];
7840  unsigned char src_str[128];
7841  unsigned char dst_str[257];
7842  unsigned char iv_str[128];
7843  unsigned char add_str[128];
7844  unsigned char tag_str[128];
7845  unsigned char output[128];
7846  unsigned char tag_output[16];
7847  gcm_context ctx;
7848  unsigned int key_len;
7849  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
7850 
7851  memset(key_str, 0x00, 128);
7852  memset(src_str, 0x00, 128);
7853  memset(dst_str, 0x00, 257);
7854  memset(iv_str, 0x00, 128);
7855  memset(add_str, 0x00, 128);
7856  memset(tag_str, 0x00, 128);
7857  memset(output, 0x00, 128);
7858  memset(tag_output, 0x00, 16);
7859 
7860  key_len = unhexify( key_str, "27504fc47a9e9a85eaded3782cb5b088359ea1c0abbf2730" );
7861  pt_len = unhexify( src_str, "" );
7862  iv_len = unhexify( iv_str, "c55c8dc3d6d2970c81659f2f87bf849d" );
7863  add_len = unhexify( add_str, "" );
7864 
7865  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7866  if( 0 == 0 )
7867  {
7868  fct_chk( 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 );
7869  hexify( dst_str, output, pt_len );
7870  hexify( tag_str, tag_output, tag_len );
7871 
7872  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
7873  fct_chk( strcmp( (char *) tag_str, "113e637538de291e2463abcf" ) == 0 );
7874  }
7875  }
7876  FCT_TEST_END();
7877 
7878 
7879  FCT_TEST_BGN(gcm_nist_validation_aes_1921280096_2)
7880  {
7881  unsigned char key_str[128];
7882  unsigned char src_str[128];
7883  unsigned char dst_str[257];
7884  unsigned char iv_str[128];
7885  unsigned char add_str[128];
7886  unsigned char tag_str[128];
7887  unsigned char output[128];
7888  unsigned char tag_output[16];
7889  gcm_context ctx;
7890  unsigned int key_len;
7891  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
7892 
7893  memset(key_str, 0x00, 128);
7894  memset(src_str, 0x00, 128);
7895  memset(dst_str, 0x00, 257);
7896  memset(iv_str, 0x00, 128);
7897  memset(add_str, 0x00, 128);
7898  memset(tag_str, 0x00, 128);
7899  memset(output, 0x00, 128);
7900  memset(tag_output, 0x00, 16);
7901 
7902  key_len = unhexify( key_str, "d5fc67f73de736768e5c64c37459c5eec3d27f7e337c346c" );
7903  pt_len = unhexify( src_str, "" );
7904  iv_len = unhexify( iv_str, "2691432d3935d4ea8cb8f7c17bef3558" );
7905  add_len = unhexify( add_str, "" );
7906 
7907  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7908  if( 0 == 0 )
7909  {
7910  fct_chk( 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 );
7911  hexify( dst_str, output, pt_len );
7912  hexify( tag_str, tag_output, tag_len );
7913 
7914  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
7915  fct_chk( strcmp( (char *) tag_str, "c0af76d6f62430106ca54928" ) == 0 );
7916  }
7917  }
7918  FCT_TEST_END();
7919 
7920 
7921  FCT_TEST_BGN(gcm_nist_validation_aes_1921280064_0)
7922  {
7923  unsigned char key_str[128];
7924  unsigned char src_str[128];
7925  unsigned char dst_str[257];
7926  unsigned char iv_str[128];
7927  unsigned char add_str[128];
7928  unsigned char tag_str[128];
7929  unsigned char output[128];
7930  unsigned char tag_output[16];
7931  gcm_context ctx;
7932  unsigned int key_len;
7933  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
7934 
7935  memset(key_str, 0x00, 128);
7936  memset(src_str, 0x00, 128);
7937  memset(dst_str, 0x00, 257);
7938  memset(iv_str, 0x00, 128);
7939  memset(add_str, 0x00, 128);
7940  memset(tag_str, 0x00, 128);
7941  memset(output, 0x00, 128);
7942  memset(tag_output, 0x00, 16);
7943 
7944  key_len = unhexify( key_str, "f28292ee2c54119511a67db0d2317433abaeccabfdd5d1f1" );
7945  pt_len = unhexify( src_str, "" );
7946  iv_len = unhexify( iv_str, "cf9331a1bb3851b2fc3aeed2d1a33eb8" );
7947  add_len = unhexify( add_str, "" );
7948 
7949  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7950  if( 0 == 0 )
7951  {
7952  fct_chk( 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 );
7953  hexify( dst_str, output, pt_len );
7954  hexify( tag_str, tag_output, tag_len );
7955 
7956  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
7957  fct_chk( strcmp( (char *) tag_str, "8e14b869a95eb12e" ) == 0 );
7958  }
7959  }
7960  FCT_TEST_END();
7961 
7962 
7963  FCT_TEST_BGN(gcm_nist_validation_aes_1921280064_1)
7964  {
7965  unsigned char key_str[128];
7966  unsigned char src_str[128];
7967  unsigned char dst_str[257];
7968  unsigned char iv_str[128];
7969  unsigned char add_str[128];
7970  unsigned char tag_str[128];
7971  unsigned char output[128];
7972  unsigned char tag_output[16];
7973  gcm_context ctx;
7974  unsigned int key_len;
7975  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
7976 
7977  memset(key_str, 0x00, 128);
7978  memset(src_str, 0x00, 128);
7979  memset(dst_str, 0x00, 257);
7980  memset(iv_str, 0x00, 128);
7981  memset(add_str, 0x00, 128);
7982  memset(tag_str, 0x00, 128);
7983  memset(output, 0x00, 128);
7984  memset(tag_output, 0x00, 16);
7985 
7986  key_len = unhexify( key_str, "2042f9244079736291ba7fe1f030cba99672a97ce361dc14" );
7987  pt_len = unhexify( src_str, "" );
7988  iv_len = unhexify( iv_str, "aadfa619bafb21b5c738b65d632bb8b2" );
7989  add_len = unhexify( add_str, "" );
7990 
7991  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7992  if( 0 == 0 )
7993  {
7994  fct_chk( 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 );
7995  hexify( dst_str, output, pt_len );
7996  hexify( tag_str, tag_output, tag_len );
7997 
7998  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
7999  fct_chk( strcmp( (char *) tag_str, "ad6f52f25aea1c55" ) == 0 );
8000  }
8001  }
8002  FCT_TEST_END();
8003 
8004 
8005  FCT_TEST_BGN(gcm_nist_validation_aes_1921280064_2)
8006  {
8007  unsigned char key_str[128];
8008  unsigned char src_str[128];
8009  unsigned char dst_str[257];
8010  unsigned char iv_str[128];
8011  unsigned char add_str[128];
8012  unsigned char tag_str[128];
8013  unsigned char output[128];
8014  unsigned char tag_output[16];
8015  gcm_context ctx;
8016  unsigned int key_len;
8017  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
8018 
8019  memset(key_str, 0x00, 128);
8020  memset(src_str, 0x00, 128);
8021  memset(dst_str, 0x00, 257);
8022  memset(iv_str, 0x00, 128);
8023  memset(add_str, 0x00, 128);
8024  memset(tag_str, 0x00, 128);
8025  memset(output, 0x00, 128);
8026  memset(tag_output, 0x00, 16);
8027 
8028  key_len = unhexify( key_str, "d9b4eb00ac03fabb5304ac38414f7782cb0186436a4b9036" );
8029  pt_len = unhexify( src_str, "" );
8030  iv_len = unhexify( iv_str, "809939260117b759d8dac1a69c27c12a" );
8031  add_len = unhexify( add_str, "" );
8032 
8033  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
8034  if( 0 == 0 )
8035  {
8036  fct_chk( 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 );
8037  hexify( dst_str, output, pt_len );
8038  hexify( tag_str, tag_output, tag_len );
8039 
8040  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
8041  fct_chk( strcmp( (char *) tag_str, "1f7d0b3104aae50b" ) == 0 );
8042  }
8043  }
8044  FCT_TEST_END();
8045 
8046 
8047  FCT_TEST_BGN(gcm_nist_validation_aes_1921280032_0)
8048  {
8049  unsigned char key_str[128];
8050  unsigned char src_str[128];
8051  unsigned char dst_str[257];
8052  unsigned char iv_str[128];
8053  unsigned char add_str[128];
8054  unsigned char tag_str[128];
8055  unsigned char output[128];
8056  unsigned char tag_output[16];
8057  gcm_context ctx;
8058  unsigned int key_len;
8059  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
8060 
8061  memset(key_str, 0x00, 128);
8062  memset(src_str, 0x00, 128);
8063  memset(dst_str, 0x00, 257);
8064  memset(iv_str, 0x00, 128);
8065  memset(add_str, 0x00, 128);
8066  memset(tag_str, 0x00, 128);
8067  memset(output, 0x00, 128);
8068  memset(tag_output, 0x00, 16);
8069 
8070  key_len = unhexify( key_str, "b5128f4cf91d53b3a50e9b76b0b27da33cbd4b9349d89413" );
8071  pt_len = unhexify( src_str, "" );
8072  iv_len = unhexify( iv_str, "644909f5fbcd61d850e43fbef1fb454f" );
8073  add_len = unhexify( add_str, "" );
8074 
8075  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
8076  if( 0 == 0 )
8077  {
8078  fct_chk( 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 );
8079  hexify( dst_str, output, pt_len );
8080  hexify( tag_str, tag_output, tag_len );
8081 
8082  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
8083  fct_chk( strcmp( (char *) tag_str, "2ddbf709" ) == 0 );
8084  }
8085  }
8086  FCT_TEST_END();
8087 
8088 
8089  FCT_TEST_BGN(gcm_nist_validation_aes_1921280032_1)
8090  {
8091  unsigned char key_str[128];
8092  unsigned char src_str[128];
8093  unsigned char dst_str[257];
8094  unsigned char iv_str[128];
8095  unsigned char add_str[128];
8096  unsigned char tag_str[128];
8097  unsigned char output[128];
8098  unsigned char tag_output[16];
8099  gcm_context ctx;
8100  unsigned int key_len;
8101  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
8102 
8103  memset(key_str, 0x00, 128);
8104  memset(src_str, 0x00, 128);
8105  memset(dst_str, 0x00, 257);
8106  memset(iv_str, 0x00, 128);
8107  memset(add_str, 0x00, 128);
8108  memset(tag_str, 0x00, 128);
8109  memset(output, 0x00, 128);
8110  memset(tag_output, 0x00, 16);
8111 
8112  key_len = unhexify( key_str, "3ac7ab2ade7a8e397d66be6dc7671f19cd39ad65490f1712" );
8113  pt_len = unhexify( src_str, "" );
8114  iv_len = unhexify( iv_str, "d152359d765f41dd9cabf5c8f37cfd8a" );
8115  add_len = unhexify( add_str, "" );
8116 
8117  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
8118  if( 0 == 0 )
8119  {
8120  fct_chk( 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 );
8121  hexify( dst_str, output, pt_len );
8122  hexify( tag_str, tag_output, tag_len );
8123 
8124  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
8125  fct_chk( strcmp( (char *) tag_str, "a6e4e30d" ) == 0 );
8126  }
8127  }
8128  FCT_TEST_END();
8129 
8130 
8131  FCT_TEST_BGN(gcm_nist_validation_aes_1921280032_2)
8132  {
8133  unsigned char key_str[128];
8134  unsigned char src_str[128];
8135  unsigned char dst_str[257];
8136  unsigned char iv_str[128];
8137  unsigned char add_str[128];
8138  unsigned char tag_str[128];
8139  unsigned char output[128];
8140  unsigned char tag_output[16];
8141  gcm_context ctx;
8142  unsigned int key_len;
8143  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
8144 
8145  memset(key_str, 0x00, 128);
8146  memset(src_str, 0x00, 128);
8147  memset(dst_str, 0x00, 257);
8148  memset(iv_str, 0x00, 128);
8149  memset(add_str, 0x00, 128);
8150  memset(tag_str, 0x00, 128);
8151  memset(output, 0x00, 128);
8152  memset(tag_output, 0x00, 16);
8153 
8154  key_len = unhexify( key_str, "f9c2de7e3c74b7e318413a32892d4fd070de9882158bbc82" );
8155  pt_len = unhexify( src_str, "" );
8156  iv_len = unhexify( iv_str, "63410c83fa363a63fa78303b9994b6c6" );
8157  add_len = unhexify( add_str, "" );
8158 
8159  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
8160  if( 0 == 0 )
8161  {
8162  fct_chk( 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 );
8163  hexify( dst_str, output, pt_len );
8164  hexify( tag_str, tag_output, tag_len );
8165 
8166  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
8167  fct_chk( strcmp( (char *) tag_str, "49c514ac" ) == 0 );
8168  }
8169  }
8170  FCT_TEST_END();
8171 
8172 
8173  FCT_TEST_BGN(gcm_nist_validation_aes_19212801024128_0)
8174  {
8175  unsigned char key_str[128];
8176  unsigned char src_str[128];
8177  unsigned char dst_str[257];
8178  unsigned char iv_str[128];
8179  unsigned char add_str[128];
8180  unsigned char tag_str[128];
8181  unsigned char output[128];
8182  unsigned char tag_output[16];
8183  gcm_context ctx;
8184  unsigned int key_len;
8185  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
8186 
8187  memset(key_str, 0x00, 128);
8188  memset(src_str, 0x00, 128);
8189  memset(dst_str, 0x00, 257);
8190  memset(iv_str, 0x00, 128);
8191  memset(add_str, 0x00, 128);
8192  memset(tag_str, 0x00, 128);
8193  memset(output, 0x00, 128);
8194  memset(tag_output, 0x00, 16);
8195 
8196  key_len = unhexify( key_str, "66ebdc2332276784a69b6bb137161210bac9f1d6a36d6a4c" );
8197  pt_len = unhexify( src_str, "" );
8198  iv_len = unhexify( iv_str, "647f41b60c6a579086ba8854d043495c" );
8199  add_len = unhexify( add_str, "da26eebd04c27bbe7fa7b54b87d3b7227f056dd9c085fabfcb59ec665a257c6de68fd2c1c51aad5e6188e02a56f70aac49ba489802247ca327de57ea3cfa87e72cae7dd82b50341a2133b03cd0027216fcd94cf43ec8a48e1c04145b597924b37f7977db3ff23b8edc913357037d0fe02afe2bba6b91e27554edbfb77f51cc41" );
8200 
8201  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
8202  if( 0 == 0 )
8203  {
8204  fct_chk( 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 );
8205  hexify( dst_str, output, pt_len );
8206  hexify( tag_str, tag_output, tag_len );
8207 
8208  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
8209  fct_chk( strcmp( (char *) tag_str, "420b320c2d616a0b11a7605a84f88e26" ) == 0 );
8210  }
8211  }
8212  FCT_TEST_END();
8213 
8214 
8215  FCT_TEST_BGN(gcm_nist_validation_aes_19212801024128_1)
8216  {
8217  unsigned char key_str[128];
8218  unsigned char src_str[128];
8219  unsigned char dst_str[257];
8220  unsigned char iv_str[128];
8221  unsigned char add_str[128];
8222  unsigned char tag_str[128];
8223  unsigned char output[128];
8224  unsigned char tag_output[16];
8225  gcm_context ctx;
8226  unsigned int key_len;
8227  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
8228 
8229  memset(key_str, 0x00, 128);
8230  memset(src_str, 0x00, 128);
8231  memset(dst_str, 0x00, 257);
8232  memset(iv_str, 0x00, 128);
8233  memset(add_str, 0x00, 128);
8234  memset(tag_str, 0x00, 128);
8235  memset(output, 0x00, 128);
8236  memset(tag_output, 0x00, 16);
8237 
8238  key_len = unhexify( key_str, "26b04d8427582b04318fefebac2a2298ec3ce61146f39a35" );
8239  pt_len = unhexify( src_str, "" );
8240  iv_len = unhexify( iv_str, "99f3449c8538414e7ab595b92a7e6e10" );
8241  add_len = unhexify( add_str, "edfc2aa8ed91cfc0e117fc9e2d1bfe843c7cf365a2b6cabd4259686cd7aede9c7453623967a30ffbd52b30fc205208bb346ffc70584478f5f39a79d4971ed71cc3dd0200a89aef6aecda0a1f3a4bf2929b7b9e141be0ddd3671f727e5e793ef085f52ecb77a266b9a02a2c700b63d8c43da0b569510285e98b530abcdbf7739d" );
8242 
8243  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
8244  if( 0 == 0 )
8245  {
8246  fct_chk( 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 );
8247  hexify( dst_str, output, pt_len );
8248  hexify( tag_str, tag_output, tag_len );
8249 
8250  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
8251  fct_chk( strcmp( (char *) tag_str, "091cfc38b248460eafb181ab58634a39" ) == 0 );
8252  }
8253  }
8254  FCT_TEST_END();
8255 
8256 
8257  FCT_TEST_BGN(gcm_nist_validation_aes_19212801024128_2)
8258  {
8259  unsigned char key_str[128];
8260  unsigned char src_str[128];
8261  unsigned char dst_str[257];
8262  unsigned char iv_str[128];
8263  unsigned char add_str[128];
8264  unsigned char tag_str[128];
8265  unsigned char output[128];
8266  unsigned char tag_output[16];
8267  gcm_context ctx;
8268  unsigned int key_len;
8269  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
8270 
8271  memset(key_str, 0x00, 128);
8272  memset(src_str, 0x00, 128);
8273  memset(dst_str, 0x00, 257);
8274  memset(iv_str, 0x00, 128);
8275  memset(add_str, 0x00, 128);
8276  memset(tag_str, 0x00, 128);
8277  memset(output, 0x00, 128);
8278  memset(tag_output, 0x00, 16);
8279 
8280  key_len = unhexify( key_str, "82c8197e6641d0832639e2b1d7691fbac79618b2f5db45bf" );
8281  pt_len = unhexify( src_str, "" );
8282  iv_len = unhexify( iv_str, "69e1a3e5eed54bedc941646e3ad25a6c" );
8283  add_len = unhexify( add_str, "d0fcb4f4d764efc0fb52c8108e61b67a1386f1a13c1761941cc9a28c6ad15e78474cd2a65ae9475d70d9c845f14bf4d2bd2bc46c29e507a347391829e0f24495b026f681c387b3e6aec8acfa5ecaf4c3cfe796c22469478ee6744cf04a22e6aec82489f53109551f58cc6602933d1780b8b45b933f76a94ef652a8ce8bac2cc6" );
8284 
8285  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
8286  if( 0 == 0 )
8287  {
8288  fct_chk( 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 );
8289  hexify( dst_str, output, pt_len );
8290  hexify( tag_str, tag_output, tag_len );
8291 
8292  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
8293  fct_chk( strcmp( (char *) tag_str, "8e74343ae8cf1cdda4969c1a94aab5cc" ) == 0 );
8294  }
8295  }
8296  FCT_TEST_END();
8297 
8298 
8299  FCT_TEST_BGN(gcm_nist_validation_aes_19212801024120_0)
8300  {
8301  unsigned char key_str[128];
8302  unsigned char src_str[128];
8303  unsigned char dst_str[257];
8304  unsigned char iv_str[128];
8305  unsigned char add_str[128];
8306  unsigned char tag_str[128];
8307  unsigned char output[128];
8308  unsigned char tag_output[16];
8309  gcm_context ctx;
8310  unsigned int key_len;
8311  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
8312 
8313  memset(key_str, 0x00, 128);
8314  memset(src_str, 0x00, 128);
8315  memset(dst_str, 0x00, 257);
8316  memset(iv_str, 0x00, 128);
8317  memset(add_str, 0x00, 128);
8318  memset(tag_str, 0x00, 128);
8319  memset(output, 0x00, 128);
8320  memset(tag_output, 0x00, 16);
8321 
8322  key_len = unhexify( key_str, "1a349ba960b2c8f49b7e5314911ba8de358f2e74ceddf126" );
8323  pt_len = unhexify( src_str, "" );
8324  iv_len = unhexify( iv_str, "f5998a62ec507c5fe5b280f9c57ac626" );
8325  add_len = unhexify( add_str, "78445eceecf2e6d2ecf2589fd24e854bed3aecc63aef934aec9aea93dca95d58629002a4ba91e9bf6d12e13f0a844977b3c2700645281db5de381adbccd34a84346a99f34889bd46c75b1956e21aa9f87684af55d7fd0de6da07e856d9b791c0a45e9e37881092f6040a9ae9d87757142d3c9c7fc6f25db0e5b5d377865ec4da" );
8326 
8327  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
8328  if( 0 == 0 )
8329  {
8330  fct_chk( 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 );
8331  hexify( dst_str, output, pt_len );
8332  hexify( tag_str, tag_output, tag_len );
8333 
8334  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
8335  fct_chk( strcmp( (char *) tag_str, "4d7eab0a3719fa53e552b9e5a85bdd" ) == 0 );
8336  }
8337  }
8338  FCT_TEST_END();
8339 
8340 
8341  FCT_TEST_BGN(gcm_nist_validation_aes_19212801024120_1)
8342  {
8343  unsigned char key_str[128];
8344  unsigned char src_str[128];
8345  unsigned char dst_str[257];
8346  unsigned char iv_str[128];
8347  unsigned char add_str[128];
8348  unsigned char tag_str[128];
8349  unsigned char output[128];
8350  unsigned char tag_output[16];
8351  gcm_context ctx;
8352  unsigned int key_len;
8353  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
8354 
8355  memset(key_str, 0x00, 128);
8356  memset(src_str, 0x00, 128);
8357  memset(dst_str, 0x00, 257);
8358  memset(iv_str, 0x00, 128);
8359  memset(add_str, 0x00, 128);
8360  memset(tag_str, 0x00, 128);
8361  memset(output, 0x00, 128);
8362  memset(tag_output, 0x00, 16);
8363 
8364  key_len = unhexify( key_str, "019af03d23342f7916e329b6843161e566aa859402cb07ff" );
8365  pt_len = unhexify( src_str, "" );
8366  iv_len = unhexify( iv_str, "c5fd96765fcf6d51e23ac6d206744af0" );
8367  add_len = unhexify( add_str, "f9808af3403051a52b6652df03b6b37d90a471bc242c436cab6ba699139eaad16847665093798731b9969709287199233c5e77351c5e42b15453b4171237a6d16aee63773c8c0d736b3a8bf38ccf922e561c456682fbc2c7161da3b89526d9de222351bbd04ecd4e8680f26d70fe57d577ea287b199be1bbb8b76328ddee3d33" );
8368 
8369  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
8370  if( 0 == 0 )
8371  {
8372  fct_chk( 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 );
8373  hexify( dst_str, output, pt_len );
8374  hexify( tag_str, tag_output, tag_len );
8375 
8376  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
8377  fct_chk( strcmp( (char *) tag_str, "fd36fafe4f5571fafb6ece59b77381" ) == 0 );
8378  }
8379  }
8380  FCT_TEST_END();
8381 
8382 
8383  FCT_TEST_BGN(gcm_nist_validation_aes_19212801024120_2)
8384  {
8385  unsigned char key_str[128];
8386  unsigned char src_str[128];
8387  unsigned char dst_str[257];
8388  unsigned char iv_str[128];
8389  unsigned char add_str[128];
8390  unsigned char tag_str[128];
8391  unsigned char output[128];
8392  unsigned char tag_output[16];
8393  gcm_context ctx;
8394  unsigned int key_len;
8395  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
8396 
8397  memset(key_str, 0x00, 128);
8398  memset(src_str, 0x00, 128);
8399  memset(dst_str, 0x00, 257);
8400  memset(iv_str, 0x00, 128);
8401  memset(add_str, 0x00, 128);
8402  memset(tag_str, 0x00, 128);
8403  memset(output, 0x00, 128);
8404  memset(tag_output, 0x00, 16);
8405 
8406  key_len = unhexify( key_str, "fab39ad2946b2a343d76b1ccc1939cce7ae3cd7b6ea187bc" );
8407  pt_len = unhexify( src_str, "" );
8408  iv_len = unhexify( iv_str, "247bc71446489dd3495c4dee8a071c76" );
8409  add_len = unhexify( add_str, "cb2c06fa5aa54ad079741afc56dbed79061a02045b6c099d0ae2d7883b78c5fe09636cc8a5dbba0c0c76ebfdb81217526afbbe04fa4b2b78f3357025930b0f9488369bf3aa088a2107bfb6c4ba714f1c26d0380d647ada5852d2c539300a4779295412b202c3cb977a7b94c24c4dd2a891a2035f388257b84e5b31bdc895f062" );
8410 
8411  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
8412  if( 0 == 0 )
8413  {
8414  fct_chk( 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 );
8415  hexify( dst_str, output, pt_len );
8416  hexify( tag_str, tag_output, tag_len );
8417 
8418  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
8419  fct_chk( strcmp( (char *) tag_str, "65e1aad214f49881a067d8b372ab6d" ) == 0 );
8420  }
8421  }
8422  FCT_TEST_END();
8423 
8424 
8425  FCT_TEST_BGN(gcm_nist_validation_aes_19212801024112_0)
8426  {
8427  unsigned char key_str[128];
8428  unsigned char src_str[128];
8429  unsigned char dst_str[257];
8430  unsigned char iv_str[128];
8431  unsigned char add_str[128];
8432  unsigned char tag_str[128];
8433  unsigned char output[128];
8434  unsigned char tag_output[16];
8435  gcm_context ctx;
8436  unsigned int key_len;
8437  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
8438 
8439  memset(key_str, 0x00, 128);
8440  memset(src_str, 0x00, 128);
8441  memset(dst_str, 0x00, 257);
8442  memset(iv_str, 0x00, 128);
8443  memset(add_str, 0x00, 128);
8444  memset(tag_str, 0x00, 128);
8445  memset(output, 0x00, 128);
8446  memset(tag_output, 0x00, 16);
8447 
8448  key_len = unhexify( key_str, "57b52697f72ae2df6354410a69dc3c5f28b31e6617bd78c1" );
8449  pt_len = unhexify( src_str, "" );
8450  iv_len = unhexify( iv_str, "0d96720526491d196eca66457e3c9e71" );
8451  add_len = unhexify( add_str, "cbdfdb3cc73aed4297ff9aba76dd8ca4d8efe11b0f521fd7170f07461c7885252874b2ff8fd05a3943ecdc824ffcef0396980ebbddc0a53c6c99086c14fc806d90d35347d45e556e9a55ecc3a9fd74c8e5dbd19ed8b452eaeb673818ddc0695f56ddf3b139a3df378fcfe5b6ccfa358f5a5bcd1550f1d9d5f325f15f9dcd007f" );
8452 
8453  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
8454  if( 0 == 0 )
8455  {
8456  fct_chk( 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 );
8457  hexify( dst_str, output, pt_len );
8458  hexify( tag_str, tag_output, tag_len );
8459 
8460  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
8461  fct_chk( strcmp( (char *) tag_str, "f0c49960e60fb63edbb50bfebd98" ) == 0 );
8462  }
8463  }
8464  FCT_TEST_END();
8465 
8466 
8467  FCT_TEST_BGN(gcm_nist_validation_aes_19212801024112_1)
8468  {
8469  unsigned char key_str[128];
8470  unsigned char src_str[128];
8471  unsigned char dst_str[257];
8472  unsigned char iv_str[128];
8473  unsigned char add_str[128];
8474  unsigned char tag_str[128];
8475  unsigned char output[128];
8476  unsigned char tag_output[16];
8477  gcm_context ctx;
8478  unsigned int key_len;
8479  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
8480 
8481  memset(key_str, 0x00, 128);
8482  memset(src_str, 0x00, 128);
8483  memset(dst_str, 0x00, 257);
8484  memset(iv_str, 0x00, 128);
8485  memset(add_str, 0x00, 128);
8486  memset(tag_str, 0x00, 128);
8487  memset(output, 0x00, 128);
8488  memset(tag_output, 0x00, 16);
8489 
8490  key_len = unhexify( key_str, "7bf69ed06271107e11fdf016edc4aafb0e2d2ac05bdbc46f" );
8491  pt_len = unhexify( src_str, "" );
8492  iv_len = unhexify( iv_str, "50e65aa338cfe856c80cbe1331b46abd" );
8493  add_len = unhexify( add_str, "a7cab4e1e56f4b9fccca08d3791560e4b6c7ceb40a10adec0536861c5c46fc3fd06c0a8eb32c9f18c40463b0f06cd0053e615dfd7caeb2b353b08ad6da1f8a23ebddf16524d2eaed70d4d7e565412dcc9598df7e107beb464b103cd8de9301cafe8b0420f0c156025d72b73d6e015ed2312535d35899aed73aa54374674d7f02" );
8494 
8495  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
8496  if( 0 == 0 )
8497  {
8498  fct_chk( 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 );
8499  hexify( dst_str, output, pt_len );
8500  hexify( tag_str, tag_output, tag_len );
8501 
8502  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
8503  fct_chk( strcmp( (char *) tag_str, "d7fb9d78fede77981948eb013ea1" ) == 0 );
8504  }
8505  }
8506  FCT_TEST_END();
8507 
8508 
8509  FCT_TEST_BGN(gcm_nist_validation_aes_19212801024112_2)
8510  {
8511  unsigned char key_str[128];
8512  unsigned char src_str[128];
8513  unsigned char dst_str[257];
8514  unsigned char iv_str[128];
8515  unsigned char add_str[128];
8516  unsigned char tag_str[128];
8517  unsigned char output[128];
8518  unsigned char tag_output[16];
8519  gcm_context ctx;
8520  unsigned int key_len;
8521  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
8522 
8523  memset(key_str, 0x00, 128);
8524  memset(src_str, 0x00, 128);
8525  memset(dst_str, 0x00, 257);
8526  memset(iv_str, 0x00, 128);
8527  memset(add_str, 0x00, 128);
8528  memset(tag_str, 0x00, 128);
8529  memset(output, 0x00, 128);
8530  memset(tag_output, 0x00, 16);
8531 
8532  key_len = unhexify( key_str, "caa781bbed41d7a1c56d47673f74d4310a3bf8b1275031d6" );
8533  pt_len = unhexify( src_str, "" );
8534  iv_len = unhexify( iv_str, "7795dc04261d9433367f51c3b87bf18d" );
8535  add_len = unhexify( add_str, "f44d77bd541e02a737c693ff3ea0adc091fff1966a593524e68954a2d7d66a48199366a5a600331cf392965b5ebedbf949203975fa9db53b72586615975e8a7b84e0633c6cf69caf482dd72b26b0a5687ec71667e7f6e5abea89c3d69d2dc42a242ef959e4039ba5b2d22a3e48424a431a77e816604769d13b7f892e2b33fcd2" );
8536 
8537  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
8538  if( 0 == 0 )
8539  {
8540  fct_chk( 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 );
8541  hexify( dst_str, output, pt_len );
8542  hexify( tag_str, tag_output, tag_len );
8543 
8544  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
8545  fct_chk( strcmp( (char *) tag_str, "386930ced9a46097c0d1f6e65c62" ) == 0 );
8546  }
8547  }
8548  FCT_TEST_END();
8549 
8550 
8551  FCT_TEST_BGN(gcm_nist_validation_aes_19212801024104_0)
8552  {
8553  unsigned char key_str[128];
8554  unsigned char src_str[128];
8555  unsigned char dst_str[257];
8556  unsigned char iv_str[128];
8557  unsigned char add_str[128];
8558  unsigned char tag_str[128];
8559  unsigned char output[128];
8560  unsigned char tag_output[16];
8561  gcm_context ctx;
8562  unsigned int key_len;
8563  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
8564 
8565  memset(key_str, 0x00, 128);
8566  memset(src_str, 0x00, 128);
8567  memset(dst_str, 0x00, 257);
8568  memset(iv_str, 0x00, 128);
8569  memset(add_str, 0x00, 128);
8570  memset(tag_str, 0x00, 128);
8571  memset(output, 0x00, 128);
8572  memset(tag_output, 0x00, 16);
8573 
8574  key_len = unhexify( key_str, "1b268de4ff644cfa4361f8014656d5d4decbcf9cede8605c" );
8575  pt_len = unhexify( src_str, "" );
8576  iv_len = unhexify( iv_str, "4009bb00afad026cbad117c6047f4ed8" );
8577  add_len = unhexify( add_str, "140c5a93293598fab85b3948b53e0ba15438a0b948e91041a13104f0ad263c8a10613e20e87ef261999a54d469ba6f1abe56ec3979623df8520a0476801987c15410ec24f5a9be72acfca71e8c5904e2ea5f8b22b8cf404b9fd533aa37e33b3d4cf91599cbb3b85ecda4aebaa27ac0365df8312c399ba1767c47fe0923f2c53e" );
8578 
8579  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
8580  if( 0 == 0 )
8581  {
8582  fct_chk( 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 );
8583  hexify( dst_str, output, pt_len );
8584  hexify( tag_str, tag_output, tag_len );
8585 
8586  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
8587  fct_chk( strcmp( (char *) tag_str, "af36bcee7561cd7d0861085d55" ) == 0 );
8588  }
8589  }
8590  FCT_TEST_END();
8591 
8592 
8593  FCT_TEST_BGN(gcm_nist_validation_aes_19212801024104_1)
8594  {
8595  unsigned char key_str[128];
8596  unsigned char src_str[128];
8597  unsigned char dst_str[257];
8598  unsigned char iv_str[128];
8599  unsigned char add_str[128];
8600  unsigned char tag_str[128];
8601  unsigned char output[128];
8602  unsigned char tag_output[16];
8603  gcm_context ctx;
8604  unsigned int key_len;
8605  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
8606 
8607  memset(key_str, 0x00, 128);
8608  memset(src_str, 0x00, 128);
8609  memset(dst_str, 0x00, 257);
8610  memset(iv_str, 0x00, 128);
8611  memset(add_str, 0x00, 128);
8612  memset(tag_str, 0x00, 128);
8613  memset(output, 0x00, 128);
8614  memset(tag_output, 0x00, 16);
8615 
8616  key_len = unhexify( key_str, "c2843bd689ccbba60ce961b7dd50619a59234dad97567e39" );
8617  pt_len = unhexify( src_str, "" );
8618  iv_len = unhexify( iv_str, "55a68cbaa5755d8c67bf26f03c5863c6" );
8619  add_len = unhexify( add_str, "d7980ab86ceb9b66ab265b68e078deddf7ba084b8967c3227839e8f31cdcfbbffa004953f3582ea9274dcf46e3ad7e7744a576dec37e0cb36fced2b2c2fcf4328f506302f5741e696ce25c49492e33c6a0c8aed5af03cdc1a266352623c6a52a555ce906f684bfd597b5e37f60b5175a981088b9d8b8b5493e4fc1bfeca64f95" );
8620 
8621  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
8622  if( 0 == 0 )
8623  {
8624  fct_chk( 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 );
8625  hexify( dst_str, output, pt_len );
8626  hexify( tag_str, tag_output, tag_len );
8627 
8628  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
8629  fct_chk( strcmp( (char *) tag_str, "66cccb7d28d3fa70bce2900a84" ) == 0 );
8630  }
8631  }
8632  FCT_TEST_END();
8633 
8634 
8635  FCT_TEST_BGN(gcm_nist_validation_aes_19212801024104_2)
8636  {
8637  unsigned char key_str[128];
8638  unsigned char src_str[128];
8639  unsigned char dst_str[257];
8640  unsigned char iv_str[128];
8641  unsigned char add_str[128];
8642  unsigned char tag_str[128];
8643  unsigned char output[128];
8644  unsigned char tag_output[16];
8645  gcm_context ctx;
8646  unsigned int key_len;
8647  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
8648 
8649  memset(key_str, 0x00, 128);
8650  memset(src_str, 0x00, 128);
8651  memset(dst_str, 0x00, 257);
8652  memset(iv_str, 0x00, 128);
8653  memset(add_str, 0x00, 128);
8654  memset(tag_str, 0x00, 128);
8655  memset(output, 0x00, 128);
8656  memset(tag_output, 0x00, 16);
8657 
8658  key_len = unhexify( key_str, "f451c5edf9849a390486dfecad437cb809c33d31f6898ba0" );
8659  pt_len = unhexify( src_str, "" );
8660  iv_len = unhexify( iv_str, "9e2dd52c04651ceea88caf4adfb2e8ee" );
8661  add_len = unhexify( add_str, "87b804d4a81dc203d67a92b4fdeab959c2056dcedb28d29f216f9172817bcfb3d2256bc1c8aac23feb22b71f1fd02ea28cdf91785931750ba4865d672345b5001b1aade4f6acc7edb03758d2540e6472aff50ab3ea61a0b9ff37ff7a87b91013b14867c3e43cb097a923e6d8ddb1f52e4bd940b60d500a4e35bfa91935065f26" );
8662 
8663  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
8664  if( 0 == 0 )
8665  {
8666  fct_chk( 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 );
8667  hexify( dst_str, output, pt_len );
8668  hexify( tag_str, tag_output, tag_len );
8669 
8670  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
8671  fct_chk( strcmp( (char *) tag_str, "e192a49f5f2b22fa39dcfa54c8" ) == 0 );
8672  }
8673  }
8674  FCT_TEST_END();
8675 
8676 
8677  FCT_TEST_BGN(gcm_nist_validation_aes_1921280102496_0)
8678  {
8679  unsigned char key_str[128];
8680  unsigned char src_str[128];
8681  unsigned char dst_str[257];
8682  unsigned char iv_str[128];
8683  unsigned char add_str[128];
8684  unsigned char tag_str[128];
8685  unsigned char output[128];
8686  unsigned char tag_output[16];
8687  gcm_context ctx;
8688  unsigned int key_len;
8689  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
8690 
8691  memset(key_str, 0x00, 128);
8692  memset(src_str, 0x00, 128);
8693  memset(dst_str, 0x00, 257);
8694  memset(iv_str, 0x00, 128);
8695  memset(add_str, 0x00, 128);
8696  memset(tag_str, 0x00, 128);
8697  memset(output, 0x00, 128);
8698  memset(tag_output, 0x00, 16);
8699 
8700  key_len = unhexify( key_str, "bd02ff8cb540ba572af3431597bdf3f23e61665f96a19b4f" );
8701  pt_len = unhexify( src_str, "" );
8702  iv_len = unhexify( iv_str, "7198af3f594a4f0597f45fb592edef50" );
8703  add_len = unhexify( add_str, "ef06de48bd34f362fdb425c6e35e37d0dfa1ea874df7d201b6a1c25b736c96e3cc8ed0915807fb7ed759482ca701d28c08cbf955be244bf887df37394d1ca4d2e7eace0dc61c807b714f3161f9d7f554c9f87ad674849c136108cfd8f777997656489d3e993aad4a51b68616083876832b3085a5f8f154b83ea44702c70f2980" );
8704 
8705  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
8706  if( 0 == 0 )
8707  {
8708  fct_chk( 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 );
8709  hexify( dst_str, output, pt_len );
8710  hexify( tag_str, tag_output, tag_len );
8711 
8712  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
8713  fct_chk( strcmp( (char *) tag_str, "43298281cd27a36e5cbac4b9" ) == 0 );
8714  }
8715  }
8716  FCT_TEST_END();
8717 
8718 
8719  FCT_TEST_BGN(gcm_nist_validation_aes_1921280102496_1)
8720  {
8721  unsigned char key_str[128];
8722  unsigned char src_str[128];
8723  unsigned char dst_str[257];
8724  unsigned char iv_str[128];
8725  unsigned char add_str[128];
8726  unsigned char tag_str[128];
8727  unsigned char output[128];
8728  unsigned char tag_output[16];
8729  gcm_context ctx;
8730  unsigned int key_len;
8731  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
8732 
8733  memset(key_str, 0x00, 128);
8734  memset(src_str, 0x00, 128);
8735  memset(dst_str, 0x00, 257);
8736  memset(iv_str, 0x00, 128);
8737  memset(add_str, 0x00, 128);
8738  memset(tag_str, 0x00, 128);
8739  memset(output, 0x00, 128);
8740  memset(tag_output, 0x00, 16);
8741 
8742  key_len = unhexify( key_str, "9ecab4a4a9dda43477c993d6388387443c66ac253071c504" );
8743  pt_len = unhexify( src_str, "" );
8744  iv_len = unhexify( iv_str, "9523b2722b927dc3afcc5f7dab2bf033" );
8745  add_len = unhexify( add_str, "fb84e38a84225c8ebb307df88325d020a5853bb05ac7a75ee38552c40c302d263181081b05918775cf9cd6905b9982b2ae9ef7993f28fd8714e878c9a4a8101c08e9f13581dcf4f16dabfcb9d3c471c0056805f51e67e9b75572639c3d6ce62d2f8abd64e1e66ffb292360c20155e4d528374a5a22d845340d6f1ac68d33040e" );
8746 
8747  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
8748  if( 0 == 0 )
8749  {
8750  fct_chk( 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 );
8751  hexify( dst_str, output, pt_len );
8752  hexify( tag_str, tag_output, tag_len );
8753 
8754  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
8755  fct_chk( strcmp( (char *) tag_str, "696bb674e43cdc7d69346555" ) == 0 );
8756  }
8757  }
8758  FCT_TEST_END();
8759 
8760 
8761  FCT_TEST_BGN(gcm_nist_validation_aes_1921280102496_2)
8762  {
8763  unsigned char key_str[128];
8764  unsigned char src_str[128];
8765  unsigned char dst_str[257];
8766  unsigned char iv_str[128];
8767  unsigned char add_str[128];
8768  unsigned char tag_str[128];
8769  unsigned char output[128];
8770  unsigned char tag_output[16];
8771  gcm_context ctx;
8772  unsigned int key_len;
8773  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
8774 
8775  memset(key_str, 0x00, 128);
8776  memset(src_str, 0x00, 128);
8777  memset(dst_str, 0x00, 257);
8778  memset(iv_str, 0x00, 128);
8779  memset(add_str, 0x00, 128);
8780  memset(tag_str, 0x00, 128);
8781  memset(output, 0x00, 128);
8782  memset(tag_output, 0x00, 16);
8783 
8784  key_len = unhexify( key_str, "733df8c42cc2e70ac195615d4911ffbecbe2712230c5c292" );
8785  pt_len = unhexify( src_str, "" );
8786  iv_len = unhexify( iv_str, "f76135eab5d42e82aedff3090a1ba606" );
8787  add_len = unhexify( add_str, "0c8aea747cacf2f0fdfaf368cf32b12dc49f5da9a29bee380d2d64035b73efb56fef13aa20c0b612d9615cefb94f26978fa0b371a47dd20051a1605b9f5e133b52dc514577c53319c9e2bd4ac7cdf37d56a9e715e27860a09d86cc21d0b9f0f302f6acf06f2ff00cc6c878dacb8bde51082f701314de7efd36a246f80f8a8fb6" );
8788 
8789  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
8790  if( 0 == 0 )
8791  {
8792  fct_chk( 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 );
8793  hexify( dst_str, output, pt_len );
8794  hexify( tag_str, tag_output, tag_len );
8795 
8796  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
8797  fct_chk( strcmp( (char *) tag_str, "82e6d0c076c7d8ac0839fe18" ) == 0 );
8798  }
8799  }
8800  FCT_TEST_END();
8801 
8802 
8803  FCT_TEST_BGN(gcm_nist_validation_aes_1921280102464_0)
8804  {
8805  unsigned char key_str[128];
8806  unsigned char src_str[128];
8807  unsigned char dst_str[257];
8808  unsigned char iv_str[128];
8809  unsigned char add_str[128];
8810  unsigned char tag_str[128];
8811  unsigned char output[128];
8812  unsigned char tag_output[16];
8813  gcm_context ctx;
8814  unsigned int key_len;
8815  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
8816 
8817  memset(key_str, 0x00, 128);
8818  memset(src_str, 0x00, 128);
8819  memset(dst_str, 0x00, 257);
8820  memset(iv_str, 0x00, 128);
8821  memset(add_str, 0x00, 128);
8822  memset(tag_str, 0x00, 128);
8823  memset(output, 0x00, 128);
8824  memset(tag_output, 0x00, 16);
8825 
8826  key_len = unhexify( key_str, "ba33c24c41bf9836607b6dd05e66a3d16298c897dd1d70ae" );
8827  pt_len = unhexify( src_str, "" );
8828  iv_len = unhexify( iv_str, "4b30423df6de76dd684274afbea089d8" );
8829  add_len = unhexify( add_str, "71f5f6ee7bbd774fa691a3d7e0f694a6c8dfe8aaf9cd720e163ef6d5cd949c798f9e9c993adb6d64e7220aa0f17331bfa9a43b659be101726a80e5529e827c3e4b05cfb4d78db9952e58eebe64dfbc0d1baf20e7e48902215277a49ee953108526a70ee150eda85e6a0e49955f8c6323766ae10e13ecfdbe4815f4bb4ba43786" );
8830 
8831  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
8832  if( 0 == 0 )
8833  {
8834  fct_chk( 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 );
8835  hexify( dst_str, output, pt_len );
8836  hexify( tag_str, tag_output, tag_len );
8837 
8838  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
8839  fct_chk( strcmp( (char *) tag_str, "73e80018235ded70" ) == 0 );
8840  }
8841  }
8842  FCT_TEST_END();
8843 
8844 
8845  FCT_TEST_BGN(gcm_nist_validation_aes_1921280102464_1)
8846  {
8847  unsigned char key_str[128];
8848  unsigned char src_str[128];
8849  unsigned char dst_str[257];
8850  unsigned char iv_str[128];
8851  unsigned char add_str[128];
8852  unsigned char tag_str[128];
8853  unsigned char output[128];
8854  unsigned char tag_output[16];
8855  gcm_context ctx;
8856  unsigned int key_len;
8857  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
8858 
8859  memset(key_str, 0x00, 128);
8860  memset(src_str, 0x00, 128);
8861  memset(dst_str, 0x00, 257);
8862  memset(iv_str, 0x00, 128);
8863  memset(add_str, 0x00, 128);
8864  memset(tag_str, 0x00, 128);
8865  memset(output, 0x00, 128);
8866  memset(tag_output, 0x00, 16);
8867 
8868  key_len = unhexify( key_str, "1711553980e3fc5c14c98611ddbdf426463f82c66df83a70" );
8869  pt_len = unhexify( src_str, "" );
8870  iv_len = unhexify( iv_str, "3396bd96b83ba611ed22e12e8a5ec911" );
8871  add_len = unhexify( add_str, "9506f34c90611acd6ecea385a782a5739f88b4fd13b77570c4d7e0617283e7b21568e32c42ada1cf6aca1a2e2ba184d4101306ff21c9d03e0ffda4854773c26a88a5173d52960286c18753df17361bb7046d2884ee600f58775304f49cf4e782ac70cb00b3d9c345cfcb38e3880743034640bbcae83112543cd1622ebaedb221" );
8872 
8873  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
8874  if( 0 == 0 )
8875  {
8876  fct_chk( 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 );
8877  hexify( dst_str, output, pt_len );
8878  hexify( tag_str, tag_output, tag_len );
8879 
8880  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
8881  fct_chk( strcmp( (char *) tag_str, "5d51a0868a2161a5" ) == 0 );
8882  }
8883  }
8884  FCT_TEST_END();
8885 
8886 
8887  FCT_TEST_BGN(gcm_nist_validation_aes_1921280102464_2)
8888  {
8889  unsigned char key_str[128];
8890  unsigned char src_str[128];
8891  unsigned char dst_str[257];
8892  unsigned char iv_str[128];
8893  unsigned char add_str[128];
8894  unsigned char tag_str[128];
8895  unsigned char output[128];
8896  unsigned char tag_output[16];
8897  gcm_context ctx;
8898  unsigned int key_len;
8899  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
8900 
8901  memset(key_str, 0x00, 128);
8902  memset(src_str, 0x00, 128);
8903  memset(dst_str, 0x00, 257);
8904  memset(iv_str, 0x00, 128);
8905  memset(add_str, 0x00, 128);
8906  memset(tag_str, 0x00, 128);
8907  memset(output, 0x00, 128);
8908  memset(tag_output, 0x00, 16);
8909 
8910  key_len = unhexify( key_str, "5d69dbec7ebe80f2b5b8f61fdff1f4413f5f6624010fb795" );
8911  pt_len = unhexify( src_str, "" );
8912  iv_len = unhexify( iv_str, "a2eb3ba50dd93fa375cf682db7b2bc7b" );
8913  add_len = unhexify( add_str, "a0f9c0de86b54d3c176ece3305463237e1f70be3c52e2ab1c773a9d27d6fc5dadf61ce7a3d10dba8730d12c306fca8952403983bf242fc1b6efaaa153ca446a07d16a70af4cb1aa4d4c0c93d646dc3a5630f5a610aa9e6eeb873f9a06d3234642bc86b03c596235ec03019e762458abe17d37409a18ca5b7e0e0088391dd3acb" );
8914 
8915  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
8916  if( 0 == 0 )
8917  {
8918  fct_chk( 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 );
8919  hexify( dst_str, output, pt_len );
8920  hexify( tag_str, tag_output, tag_len );
8921 
8922  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
8923  fct_chk( strcmp( (char *) tag_str, "1a827855ee98d679" ) == 0 );
8924  }
8925  }
8926  FCT_TEST_END();
8927 
8928 
8929  FCT_TEST_BGN(gcm_nist_validation_aes_1921280102432_0)
8930  {
8931  unsigned char key_str[128];
8932  unsigned char src_str[128];
8933  unsigned char dst_str[257];
8934  unsigned char iv_str[128];
8935  unsigned char add_str[128];
8936  unsigned char tag_str[128];
8937  unsigned char output[128];
8938  unsigned char tag_output[16];
8939  gcm_context ctx;
8940  unsigned int key_len;
8941  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
8942 
8943  memset(key_str, 0x00, 128);
8944  memset(src_str, 0x00, 128);
8945  memset(dst_str, 0x00, 257);
8946  memset(iv_str, 0x00, 128);
8947  memset(add_str, 0x00, 128);
8948  memset(tag_str, 0x00, 128);
8949  memset(output, 0x00, 128);
8950  memset(tag_output, 0x00, 16);
8951 
8952  key_len = unhexify( key_str, "7aa732879f290aa442217212156920c69457b8ec41eab153" );
8953  pt_len = unhexify( src_str, "" );
8954  iv_len = unhexify( iv_str, "cb593221c59846dc82fc0d0cd04af3f0" );
8955  add_len = unhexify( add_str, "15d7ebf94985c34b72b6675d7346f0b05bdb8fd3a278555939d2999028e4179e69352d398a5dd0e5b370bdd9cbd24d576b89709c98b6142f71f5b1ba224222afb67599fc58fe043d1a91d7ea95b56dbd086db8e3a061b1bfc6e82dc9ac728174fd3669d65db62a06380a5f72c3d091b7a1b6998041d5501e9fba8bf91a7d278c" );
8956 
8957  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
8958  if( 0 == 0 )
8959  {
8960  fct_chk( 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 );
8961  hexify( dst_str, output, pt_len );
8962  hexify( tag_str, tag_output, tag_len );
8963 
8964  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
8965  fct_chk( strcmp( (char *) tag_str, "55b86d22" ) == 0 );
8966  }
8967  }
8968  FCT_TEST_END();
8969 
8970 
8971  FCT_TEST_BGN(gcm_nist_validation_aes_1921280102432_1)
8972  {
8973  unsigned char key_str[128];
8974  unsigned char src_str[128];
8975  unsigned char dst_str[257];
8976  unsigned char iv_str[128];
8977  unsigned char add_str[128];
8978  unsigned char tag_str[128];
8979  unsigned char output[128];
8980  unsigned char tag_output[16];
8981  gcm_context ctx;
8982  unsigned int key_len;
8983  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
8984 
8985  memset(key_str, 0x00, 128);
8986  memset(src_str, 0x00, 128);
8987  memset(dst_str, 0x00, 257);
8988  memset(iv_str, 0x00, 128);
8989  memset(add_str, 0x00, 128);
8990  memset(tag_str, 0x00, 128);
8991  memset(output, 0x00, 128);
8992  memset(tag_output, 0x00, 16);
8993 
8994  key_len = unhexify( key_str, "961a3e78f6a75944455f9d9d0345e08f4669972f3d5c202c" );
8995  pt_len = unhexify( src_str, "" );
8996  iv_len = unhexify( iv_str, "ce43a19ac648e62ddc49d243fb34e29f" );
8997  add_len = unhexify( add_str, "393736558133078a0367b8248bc18c8352f92a9212e90318a5b63ad3c422ccda7c181c565629acf4fc73b2de85bc9cf38310fe703a877b3e7d3b2d416aeb962f1027077232cfa39c5e5284a1b323264175546ddfb250ce693e2dc78a0479bd89a7ab44b63e504866d2ec6b5153cfd51f29a91cd4fa2b8e09878747ae53981875" );
8998 
8999  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
9000  if( 0 == 0 )
9001  {
9002  fct_chk( 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 );
9003  hexify( dst_str, output, pt_len );
9004  hexify( tag_str, tag_output, tag_len );
9005 
9006  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
9007  fct_chk( strcmp( (char *) tag_str, "ac701373" ) == 0 );
9008  }
9009  }
9010  FCT_TEST_END();
9011 
9012 
9013  FCT_TEST_BGN(gcm_nist_validation_aes_1921280102432_2)
9014  {
9015  unsigned char key_str[128];
9016  unsigned char src_str[128];
9017  unsigned char dst_str[257];
9018  unsigned char iv_str[128];
9019  unsigned char add_str[128];
9020  unsigned char tag_str[128];
9021  unsigned char output[128];
9022  unsigned char tag_output[16];
9023  gcm_context ctx;
9024  unsigned int key_len;
9025  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
9026 
9027  memset(key_str, 0x00, 128);
9028  memset(src_str, 0x00, 128);
9029  memset(dst_str, 0x00, 257);
9030  memset(iv_str, 0x00, 128);
9031  memset(add_str, 0x00, 128);
9032  memset(tag_str, 0x00, 128);
9033  memset(output, 0x00, 128);
9034  memset(tag_output, 0x00, 16);
9035 
9036  key_len = unhexify( key_str, "c4d492904becde4e46c2557ac833265c715bb57f18cd040d" );
9037  pt_len = unhexify( src_str, "" );
9038  iv_len = unhexify( iv_str, "df41b22b92d43a96a7504514b92e644f" );
9039  add_len = unhexify( add_str, "c4dd46ce3e486d89903482de247c1e7df05809a247302db3ca8457b93d6886c0a3d1be40a90f6502ec58d0ddd715896cee37322d48ec3f0c3ad716f1bb679afdcc0e4c79e5e2e346702d349ec7b391ef7eafde618bbadce5d14d22123de611c065780a4d05e928e87d12b749888d6004224c3e457aca0190bf1a7fba2453680b" );
9040 
9041  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
9042  if( 0 == 0 )
9043  {
9044  fct_chk( 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 );
9045  hexify( dst_str, output, pt_len );
9046  hexify( tag_str, tag_output, tag_len );
9047 
9048  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
9049  fct_chk( strcmp( (char *) tag_str, "7a259bda" ) == 0 );
9050  }
9051  }
9052  FCT_TEST_END();
9053 
9054 
9055  FCT_TEST_BGN(gcm_nist_validation_aes_19212810240128_0)
9056  {
9057  unsigned char key_str[128];
9058  unsigned char src_str[128];
9059  unsigned char dst_str[257];
9060  unsigned char iv_str[128];
9061  unsigned char add_str[128];
9062  unsigned char tag_str[128];
9063  unsigned char output[128];
9064  unsigned char tag_output[16];
9065  gcm_context ctx;
9066  unsigned int key_len;
9067  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
9068 
9069  memset(key_str, 0x00, 128);
9070  memset(src_str, 0x00, 128);
9071  memset(dst_str, 0x00, 257);
9072  memset(iv_str, 0x00, 128);
9073  memset(add_str, 0x00, 128);
9074  memset(tag_str, 0x00, 128);
9075  memset(output, 0x00, 128);
9076  memset(tag_output, 0x00, 16);
9077 
9078  key_len = unhexify( key_str, "316660f013ced78a16701b35479ffb1f7c8c4e964c1b52b8" );
9079  pt_len = unhexify( src_str, "d262c15d08aea46f614c7f8f6a54631289e54ca97d698777388e137f431bb783601e7999e7af98775d7b87ce061d9ba56570ed8c58b6bbac5f12f751fc376ab0f14b36b40b2b5533727be3bbc9a51183405d5fd0121201ff592817d06613b504a3440b0e1a57e9ed1771766a9a5b789054f7032d20b23c5c37d77f293c677fd8" );
9080  iv_len = unhexify( iv_str, "919ceb172d2cb460bdb3b3e58debe889" );
9081  add_len = unhexify( add_str, "" );
9082 
9083  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
9084  if( 0 == 0 )
9085  {
9086  fct_chk( 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 );
9087  hexify( dst_str, output, pt_len );
9088  hexify( tag_str, tag_output, tag_len );
9089 
9090  fct_chk( strcmp( (char *) dst_str, "5f5128f7f948f0cc9fb248a24b07c54247e40080a992acddb2615d90ef9328a17bd5e9a698b00103855738aea55c4944cde4a9148bfa8db12233231861c455e52c9889119ca402eabc8f41b27000156dd29b901024336cb2b7088eb5fd534ba58f23caf140a8b2549486074e4edbfc262ed9c7c7ccaae24be8de873ad43cd13e" ) == 0 );
9091  fct_chk( strcmp( (char *) tag_str, "ae22ec4c19e7616a5b877f168febd202" ) == 0 );
9092  }
9093  }
9094  FCT_TEST_END();
9095 
9096 
9097  FCT_TEST_BGN(gcm_nist_validation_aes_19212810240128_1)
9098  {
9099  unsigned char key_str[128];
9100  unsigned char src_str[128];
9101  unsigned char dst_str[257];
9102  unsigned char iv_str[128];
9103  unsigned char add_str[128];
9104  unsigned char tag_str[128];
9105  unsigned char output[128];
9106  unsigned char tag_output[16];
9107  gcm_context ctx;
9108  unsigned int key_len;
9109  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
9110 
9111  memset(key_str, 0x00, 128);
9112  memset(src_str, 0x00, 128);
9113  memset(dst_str, 0x00, 257);
9114  memset(iv_str, 0x00, 128);
9115  memset(add_str, 0x00, 128);
9116  memset(tag_str, 0x00, 128);
9117  memset(output, 0x00, 128);
9118  memset(tag_output, 0x00, 16);
9119 
9120  key_len = unhexify( key_str, "1bdb707c328304809bf0608874c9db373df3c7104a5a7049" );
9121  pt_len = unhexify( src_str, "ca243caa145124997f5e2e6bb25d021a38d58d0ab1bbf06d086c2416c08e3512aa887cc215fdb34d0f2d78f6a45885767f15fc00b68a4df1130587de777efb9cfd59cafa077477e97edabf2bf04c9a6ce029c230385ca5f9928bca7fe5503b18774849199d2a39a378a2d3144aef4416c1718319ff1bed8021dd77a07f61eaa6" );
9122  iv_len = unhexify( iv_str, "b7e7fc0d5adaed1632c5f7d1f56458f1" );
9123  add_len = unhexify( add_str, "" );
9124 
9125  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
9126  if( 0 == 0 )
9127  {
9128  fct_chk( 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 );
9129  hexify( dst_str, output, pt_len );
9130  hexify( tag_str, tag_output, tag_len );
9131 
9132  fct_chk( strcmp( (char *) dst_str, "91c7954bdd6a49360fdce11c1bc710512bf5a57bcef241fb63e5ceabcdc9699d0c0ddb025c75195ec25e631507f13e18799e6be9798e5639ad8401f6244c5b0ace3905ae0de08e2d0fcd19d193de83943fe449af4b503a454c248e677d2f51100fd9b8b7e5388d5091089369a7c2ff38bd353e9757ef873a87f15f30232bafb4" ) == 0 );
9133  fct_chk( strcmp( (char *) tag_str, "72337bdb2bfdd1f1ebe0dba6f9b7b649" ) == 0 );
9134  }
9135  }
9136  FCT_TEST_END();
9137 
9138 
9139  FCT_TEST_BGN(gcm_nist_validation_aes_19212810240128_2)
9140  {
9141  unsigned char key_str[128];
9142  unsigned char src_str[128];
9143  unsigned char dst_str[257];
9144  unsigned char iv_str[128];
9145  unsigned char add_str[128];
9146  unsigned char tag_str[128];
9147  unsigned char output[128];
9148  unsigned char tag_output[16];
9149  gcm_context ctx;
9150  unsigned int key_len;
9151  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
9152 
9153  memset(key_str, 0x00, 128);
9154  memset(src_str, 0x00, 128);
9155  memset(dst_str, 0x00, 257);
9156  memset(iv_str, 0x00, 128);
9157  memset(add_str, 0x00, 128);
9158  memset(tag_str, 0x00, 128);
9159  memset(output, 0x00, 128);
9160  memset(tag_output, 0x00, 16);
9161 
9162  key_len = unhexify( key_str, "a6dd0d7e9d6ad1ad7c7394d53e9e081c436d34c8158bbc95" );
9163  pt_len = unhexify( src_str, "2d95d64ed3be857a5c79c7af20aee00f142557e10d780383fef2d45f16c7e2823ffee495b220c87971610e5650f7c3e8d296b3f03fc883c00351df48d97717427101aa0c08a23c408b24511621b640c210b316cf17e3dfd714f0c9aa9ddd974692d1c2ae27b9bb0fbb428e7a9da3b3cf9bd869e730ccaa3aa4bd08f01f84039a" );
9164  iv_len = unhexify( iv_str, "60b4b9c77d01232c5d3d4af81becb0dc" );
9165  add_len = unhexify( add_str, "" );
9166 
9167  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
9168  if( 0 == 0 )
9169  {
9170  fct_chk( 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 );
9171  hexify( dst_str, output, pt_len );
9172  hexify( tag_str, tag_output, tag_len );
9173 
9174  fct_chk( strcmp( (char *) dst_str, "4494460ee73d3513814e1f779bfe3a229b49348d7641e9ed4dd959b582960097ef08b91292bb9db87b4e728d01b92683f4cdc81151a69bed2096bf6fb2e45d0148404420ea16b631b421e6f4c6665fe33c2d11e7b22b6aa82b610b83214ae4d17e681972e3a1f77306d3c54d96c47d8be1fb2c8cae8300ac9db99013f25a65a1" ) == 0 );
9175  fct_chk( strcmp( (char *) tag_str, "d40a246c18518ea9f8d733b42181123c" ) == 0 );
9176  }
9177  }
9178  FCT_TEST_END();
9179 
9180 
9181  FCT_TEST_BGN(gcm_nist_validation_aes_19212810240120_0)
9182  {
9183  unsigned char key_str[128];
9184  unsigned char src_str[128];
9185  unsigned char dst_str[257];
9186  unsigned char iv_str[128];
9187  unsigned char add_str[128];
9188  unsigned char tag_str[128];
9189  unsigned char output[128];
9190  unsigned char tag_output[16];
9191  gcm_context ctx;
9192  unsigned int key_len;
9193  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
9194 
9195  memset(key_str, 0x00, 128);
9196  memset(src_str, 0x00, 128);
9197  memset(dst_str, 0x00, 257);
9198  memset(iv_str, 0x00, 128);
9199  memset(add_str, 0x00, 128);
9200  memset(tag_str, 0x00, 128);
9201  memset(output, 0x00, 128);
9202  memset(tag_output, 0x00, 16);
9203 
9204  key_len = unhexify( key_str, "e9ed78cb5c10df05ad00c6f1fb35b4d28e6ddfcc16456807" );
9205  pt_len = unhexify( src_str, "e465e57cbac0dcd1e8ccda22042abecd9d89c4ac91b0e82a41fd51107a792099e63f7cf23a889d8c04edae2c2b3a9e51dbee6c3b71ace3de08ab354a295888bb99ae0fe428dd69bc013d49a70511ef60524282347787a542fe9501b6452b5faad2f129a9795c2c4cc0881ec4af8f0e0d2d4a7a628cb051055fe831b51e250608" );
9206  iv_len = unhexify( iv_str, "3a8ad989c621ae1e82b8d255a3c95028" );
9207  add_len = unhexify( add_str, "" );
9208 
9209  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
9210  if( 0 == 0 )
9211  {
9212  fct_chk( 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 );
9213  hexify( dst_str, output, pt_len );
9214  hexify( tag_str, tag_output, tag_len );
9215 
9216  fct_chk( strcmp( (char *) dst_str, "6855e4702f1ea593bfe30ee65b3fab832778d6b11a0ad902dd37361b8d85ab76d1f2ccf7927d695eb3129286c26737b9573e26bf64b31de26f97525f84345f73bda2888a1f53c9b405ad627bbe5dea123c9fb0a4b7f193cd8fbc8fa4a5e5f64e9c083f5c048d61fd1d347b49afdc69e0ca6a82e3b064c49d5bffa2800b5cfcdf" ) == 0 );
9217  fct_chk( strcmp( (char *) tag_str, "9661f5c3b0d99d4f762bdcabd48df2" ) == 0 );
9218  }
9219  }
9220  FCT_TEST_END();
9221 
9222 
9223  FCT_TEST_BGN(gcm_nist_validation_aes_19212810240120_1)
9224  {
9225  unsigned char key_str[128];
9226  unsigned char src_str[128];
9227  unsigned char dst_str[257];
9228  unsigned char iv_str[128];
9229  unsigned char add_str[128];
9230  unsigned char tag_str[128];
9231  unsigned char output[128];
9232  unsigned char tag_output[16];
9233  gcm_context ctx;
9234  unsigned int key_len;
9235  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
9236 
9237  memset(key_str, 0x00, 128);
9238  memset(src_str, 0x00, 128);
9239  memset(dst_str, 0x00, 257);
9240  memset(iv_str, 0x00, 128);
9241  memset(add_str, 0x00, 128);
9242  memset(tag_str, 0x00, 128);
9243  memset(output, 0x00, 128);
9244  memset(tag_output, 0x00, 16);
9245 
9246  key_len = unhexify( key_str, "76a5bc9a8d7c6e2822456156cea7d493702d61e7d504e3c3" );
9247  pt_len = unhexify( src_str, "0a7fbca875fd620c3d8de788e5c27534160f68d60d70fa4167adf0c18ea25fa1f2cc551fdf447aa16678d3f82193cf421a6fa953532a3765bcb54183bf0e96527ae5e695ed3bba5d9911f36c1aa73132cd43b2698996eb43ff84420e315a06d7db02aee815461892c7ab9026953c4bc25f47153d5cb7b966b71b24dad69fa565" );
9248  iv_len = unhexify( iv_str, "09b681de6683751300c2ada84a214d02" );
9249  add_len = unhexify( add_str, "" );
9250 
9251  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
9252  if( 0 == 0 )
9253  {
9254  fct_chk( 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 );
9255  hexify( dst_str, output, pt_len );
9256  hexify( tag_str, tag_output, tag_len );
9257 
9258  fct_chk( strcmp( (char *) dst_str, "dd66e08fc500426feb497c39c5853b26376272dfabb82ab5978167faa91adb025a6ca0e8fe3d04a0d97062eee8ca6530c3788bebe4436ecdd3d9eab96d38a0cf9b8cc6a584a0facaea33ec2f4a6e61f780c3dad524df902f421e3204cec7c9a4bb3f0860e017eddeb939cdfbe6f924e1eebfbbf8ec63c55b62137d9f8845f38f" ) == 0 );
9259  fct_chk( strcmp( (char *) tag_str, "4acc40a4882d7733d8f526365f2560" ) == 0 );
9260  }
9261  }
9262  FCT_TEST_END();
9263 
9264 
9265  FCT_TEST_BGN(gcm_nist_validation_aes_19212810240120_2)
9266  {
9267  unsigned char key_str[128];
9268  unsigned char src_str[128];
9269  unsigned char dst_str[257];
9270  unsigned char iv_str[128];
9271  unsigned char add_str[128];
9272  unsigned char tag_str[128];
9273  unsigned char output[128];
9274  unsigned char tag_output[16];
9275  gcm_context ctx;
9276  unsigned int key_len;
9277  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
9278 
9279  memset(key_str, 0x00, 128);
9280  memset(src_str, 0x00, 128);
9281  memset(dst_str, 0x00, 257);
9282  memset(iv_str, 0x00, 128);
9283  memset(add_str, 0x00, 128);
9284  memset(tag_str, 0x00, 128);
9285  memset(output, 0x00, 128);
9286  memset(tag_output, 0x00, 16);
9287 
9288  key_len = unhexify( key_str, "f5cb564cdd6974219e87f93a030fdcad35313d4adf9d7a97" );
9289  pt_len = unhexify( src_str, "210a799d480b4933e16fcbed632579beb6b00aec74c205dbaf64e2cb152c12f9b6969122f296efcfe328f54202446514066594848f42a3031425020b56d065d6eaf2caf507d5f51df493c11514400b889f33d0b996e721eb613569396df0528aa14eaed117dbb7c01d9c3ac39507e42a158413dab80aa687772475105eabcbbf" );
9290  iv_len = unhexify( iv_str, "90f91da5239640a70eec60d849d9ae70" );
9291  add_len = unhexify( add_str, "" );
9292 
9293  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
9294  if( 0 == 0 )
9295  {
9296  fct_chk( 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 );
9297  hexify( dst_str, output, pt_len );
9298  hexify( tag_str, tag_output, tag_len );
9299 
9300  fct_chk( strcmp( (char *) dst_str, "69a3dcf5b94a507a53fa5e62cfca269453623ccd3a537d971130a21bee884cf271b9833dec19862ab0dfe7052e7dc07b20f34aac42bc39bf1d495360c1d701ea53a9bba64b02962b4ef64fb1c90a1a2f3a6f81a6ba781d5f28b786efc365ec6a35c826544aab94b53b96613fddb65660dd336acc34a217960f6c22b9fe60dde1" ) == 0 );
9301  fct_chk( strcmp( (char *) tag_str, "b67495a863fffcc773021dc7865304" ) == 0 );
9302  }
9303  }
9304  FCT_TEST_END();
9305 
9306 
9307  FCT_TEST_BGN(gcm_nist_validation_aes_19212810240112_0)
9308  {
9309  unsigned char key_str[128];
9310  unsigned char src_str[128];
9311  unsigned char dst_str[257];
9312  unsigned char iv_str[128];
9313  unsigned char add_str[128];
9314  unsigned char tag_str[128];
9315  unsigned char output[128];
9316  unsigned char tag_output[16];
9317  gcm_context ctx;
9318  unsigned int key_len;
9319  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
9320 
9321  memset(key_str, 0x00, 128);
9322  memset(src_str, 0x00, 128);
9323  memset(dst_str, 0x00, 257);
9324  memset(iv_str, 0x00, 128);
9325  memset(add_str, 0x00, 128);
9326  memset(tag_str, 0x00, 128);
9327  memset(output, 0x00, 128);
9328  memset(tag_output, 0x00, 16);
9329 
9330  key_len = unhexify( key_str, "dc2c5a020d3ea731362c29d559cb14aa4f8e3f6a554a5fee" );
9331  pt_len = unhexify( src_str, "8cf098cb6ad79e0f0eb4ca888da004dfe6431b5982bf1490c5f2d1486c288b5d50ea0a5a63cf9d097a71348632391b4bf962bf464419c2c971e76c03eedd09d069a070c86837e16a2c39a2cb8de3e2d3f274e03998a874fa98de0933b0856e076e7f575f351d7ecd024753781f51ef600405b304e37f326846b84692448d3f2f" );
9332  iv_len = unhexify( iv_str, "bd4d45d970085e0b2bfc9477f5cd0244" );
9333  add_len = unhexify( add_str, "" );
9334 
9335  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
9336  if( 0 == 0 )
9337  {
9338  fct_chk( 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 );
9339  hexify( dst_str, output, pt_len );
9340  hexify( tag_str, tag_output, tag_len );
9341 
9342  fct_chk( strcmp( (char *) dst_str, "d44a4fd303e657670632da8dddb6a117f3e35d8afce245e7e6576711c663f36806b813ba6421ef9788681d9717a36d3eff4ae1789c242f686d8cf4ae81165191220e338bf204744c9fc70560683ec07c212846d257d924d5fc43a3d4297ac54428a32c8bb9d5137e0f4aaa42df8dec37793f3965ca658f22c866e259c80bcc59" ) == 0 );
9343  fct_chk( strcmp( (char *) tag_str, "9c1d6c70e1457a8d67f81cb3dc8e" ) == 0 );
9344  }
9345  }
9346  FCT_TEST_END();
9347 
9348 
9349  FCT_TEST_BGN(gcm_nist_validation_aes_19212810240112_1)
9350  {
9351  unsigned char key_str[128];
9352  unsigned char src_str[128];
9353  unsigned char dst_str[257];
9354  unsigned char iv_str[128];
9355  unsigned char add_str[128];
9356  unsigned char tag_str[128];
9357  unsigned char output[128];
9358  unsigned char tag_output[16];
9359  gcm_context ctx;
9360  unsigned int key_len;
9361  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
9362 
9363  memset(key_str, 0x00, 128);
9364  memset(src_str, 0x00, 128);
9365  memset(dst_str, 0x00, 257);
9366  memset(iv_str, 0x00, 128);
9367  memset(add_str, 0x00, 128);
9368  memset(tag_str, 0x00, 128);
9369  memset(output, 0x00, 128);
9370  memset(tag_output, 0x00, 16);
9371 
9372  key_len = unhexify( key_str, "167cb184ab6ad15be36536f505ea5447fd996b1d9a092ef3" );
9373  pt_len = unhexify( src_str, "0b6ec08685b5a9d32346a5fa25d208136433204f3b86182bd1d9578f0634dcbb5b59937fb87df0679334d7f41eb8bec60ae1b87994ed2cfddcb56e95a6fb4e3ab7845b0294e4afa5ad46eb5a431cbd7ad0eb0473c42c06f3f62de03d10ddda449d41137c8010af5c7c0eac7a5fde5a39b5437a2382639fe3388ce029a7d4465c" );
9374  iv_len = unhexify( iv_str, "b5cc89a1c10329bb417e6b519091cee4" );
9375  add_len = unhexify( add_str, "" );
9376 
9377  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
9378  if( 0 == 0 )
9379  {
9380  fct_chk( 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 );
9381  hexify( dst_str, output, pt_len );
9382  hexify( tag_str, tag_output, tag_len );
9383 
9384  fct_chk( strcmp( (char *) dst_str, "7ebe4a9547fb115b39b09880d6f36f8cd402bb798c6d9db036b1ebd8b87a8e9d56fc23b7ae4e8cac3500bf2f73952c37a068f1e472369b62319a8b1bc085a51fbe47e1c321dd1ba2a40692ecd68762a63467d5ecad66a3d720a8a81e02dac0ebe8df867e2f7afa367aa2688ca73565e55cf2b0072fa3681750d61e8e60275aad" ) == 0 );
9385  fct_chk( strcmp( (char *) tag_str, "30454dae78f14b9616b57fdc81ba" ) == 0 );
9386  }
9387  }
9388  FCT_TEST_END();
9389 
9390 
9391  FCT_TEST_BGN(gcm_nist_validation_aes_19212810240112_2)
9392  {
9393  unsigned char key_str[128];
9394  unsigned char src_str[128];
9395  unsigned char dst_str[257];
9396  unsigned char iv_str[128];
9397  unsigned char add_str[128];
9398  unsigned char tag_str[128];
9399  unsigned char output[128];
9400  unsigned char tag_output[16];
9401  gcm_context ctx;
9402  unsigned int key_len;
9403  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
9404 
9405  memset(key_str, 0x00, 128);
9406  memset(src_str, 0x00, 128);
9407  memset(dst_str, 0x00, 257);
9408  memset(iv_str, 0x00, 128);
9409  memset(add_str, 0x00, 128);
9410  memset(tag_str, 0x00, 128);
9411  memset(output, 0x00, 128);
9412  memset(tag_output, 0x00, 16);
9413 
9414  key_len = unhexify( key_str, "9bc7aad4f4bd73acf756311ff1b72b41631344b9b57cf447" );
9415  pt_len = unhexify( src_str, "7cdf07e17f667227edc986827d55bb803c6e51f93e72d98a1cbd161b58155a1c14ca54d52254e5f88f2a08614df68cc37f6e9fac88895b53090f69544b18aee4cc03763d35e7dd94ed82d1435316e7e02367b1c43506b3ccd31e248dce81fe62fdaea3a0bfba03477d5c151b0f76f09799048d8b23699d000a9da11281efffc1" );
9416  iv_len = unhexify( iv_str, "ffa8e719f29139d12f741f0228e11dfe" );
9417  add_len = unhexify( add_str, "" );
9418 
9419  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
9420  if( 0 == 0 )
9421  {
9422  fct_chk( 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 );
9423  hexify( dst_str, output, pt_len );
9424  hexify( tag_str, tag_output, tag_len );
9425 
9426  fct_chk( strcmp( (char *) dst_str, "6ab304cb9d1ed675383ff95f7f61ffc2aa73ab1b9a691bb84777b14c7014e986ffb91da6847d3abc0349a7aa09ed1d86f2dabc09e0e25a05800bd5d616c1a665bdb119ef71bae065ed019aed20ad3b13262a902f24ccb4819dc71419994a8b4774a3b9f4f672d31aaec997cfe340d2abdc3958c41373d0315076d22189eb5065" ) == 0 );
9427  fct_chk( strcmp( (char *) tag_str, "260cce7d5ed6a8666c9feaad7058" ) == 0 );
9428  }
9429  }
9430  FCT_TEST_END();
9431 
9432 
9433  FCT_TEST_BGN(gcm_nist_validation_aes_19212810240104_0)
9434  {
9435  unsigned char key_str[128];
9436  unsigned char src_str[128];
9437  unsigned char dst_str[257];
9438  unsigned char iv_str[128];
9439  unsigned char add_str[128];
9440  unsigned char tag_str[128];
9441  unsigned char output[128];
9442  unsigned char tag_output[16];
9443  gcm_context ctx;
9444  unsigned int key_len;
9445  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
9446 
9447  memset(key_str, 0x00, 128);
9448  memset(src_str, 0x00, 128);
9449  memset(dst_str, 0x00, 257);
9450  memset(iv_str, 0x00, 128);
9451  memset(add_str, 0x00, 128);
9452  memset(tag_str, 0x00, 128);
9453  memset(output, 0x00, 128);
9454  memset(tag_output, 0x00, 16);
9455 
9456  key_len = unhexify( key_str, "5bd47bea08eab8694defc2b66e60da1be40fc1e398224f9b" );
9457  pt_len = unhexify( src_str, "083ad3fe9273b8063e144a03f88fb179b18327aba37259d7f8532303306ac9d18cfcb746cab3f9385b5bb685fbc4a252dda268044642f5dbe33ea6e1634445311e440c5507fa6beaed343c83aeb0ffc4f1cba21b39f0ff6edfff961aed3ae1796f8bfeebcd3392d92e26dd26a19a7b7c2e5910f22557fad600f8cca8aba988d4" );
9458  iv_len = unhexify( iv_str, "e45a52c5e5ecc87b4320864b38683777" );
9459  add_len = unhexify( add_str, "" );
9460 
9461  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
9462  if( 0 == 0 )
9463  {
9464  fct_chk( 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 );
9465  hexify( dst_str, output, pt_len );
9466  hexify( tag_str, tag_output, tag_len );
9467 
9468  fct_chk( strcmp( (char *) dst_str, "8fa3cd91fb93a346e1f9595088c5503a840c7d7c33aa1be147e484e2aef2a8bda77275348ca59810abef6e179888f6781862990ba8e6d96af70febd2f671a3a8d6dce9be46c1cc6dbfaae35c35a7073205411cc8ab4ddd266b31b64edab4ffea076b29803149850cca41c857b05c10148182f8e7252e67069e7517da5fc08ee1" ) == 0 );
9469  fct_chk( strcmp( (char *) tag_str, "9fa3372199a2484f82c330093f" ) == 0 );
9470  }
9471  }
9472  FCT_TEST_END();
9473 
9474 
9475  FCT_TEST_BGN(gcm_nist_validation_aes_19212810240104_1)
9476  {
9477  unsigned char key_str[128];
9478  unsigned char src_str[128];
9479  unsigned char dst_str[257];
9480  unsigned char iv_str[128];
9481  unsigned char add_str[128];
9482  unsigned char tag_str[128];
9483  unsigned char output[128];
9484  unsigned char tag_output[16];
9485  gcm_context ctx;
9486  unsigned int key_len;
9487  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
9488 
9489  memset(key_str, 0x00, 128);
9490  memset(src_str, 0x00, 128);
9491  memset(dst_str, 0x00, 257);
9492  memset(iv_str, 0x00, 128);
9493  memset(add_str, 0x00, 128);
9494  memset(tag_str, 0x00, 128);
9495  memset(output, 0x00, 128);
9496  memset(tag_output, 0x00, 16);
9497 
9498  key_len = unhexify( key_str, "850a811ca18044dee4487729e619cca71f05a5b164dd1250" );
9499  pt_len = unhexify( src_str, "6ee76712d0b1fc00e43c2312743a881ed95a0b06276c5a4d93e3d56732af6b12c7c0d1aa6ffaec562229b6443e576caecffeadd9a65b91efa1bfe48ab1ecc63c381d00fe8dc7f11365f2b28945e844e7c6ca60972f733a96f29cc12e259c7cf29e2c7bbf8f572e158782a46093c5754656d0f2e1e1ea2a0b315b5fa02dadf408" );
9500  iv_len = unhexify( iv_str, "6f79e0f62236790c89156c14bd9540a9" );
9501  add_len = unhexify( add_str, "" );
9502 
9503  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
9504  if( 0 == 0 )
9505  {
9506  fct_chk( 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 );
9507  hexify( dst_str, output, pt_len );
9508  hexify( tag_str, tag_output, tag_len );
9509 
9510  fct_chk( strcmp( (char *) dst_str, "eb1ebd78d7ac88e6f927e09fecf7feb1aa64d7435aae76cc917edd9e0624a96e945df67648c187e397954da7b0888005f7a0d05d09de424c1a0648b56707b90da4021d5a36175500337e7341d1a474fbaa94e56d7ea52155829eb6bb9d95457c138875f0738034924d59681e7c2dfffb7dc0959697468ea2b65a884c897208ab" ) == 0 );
9511  fct_chk( strcmp( (char *) tag_str, "91c74a30e5bff5b2585ac7699e" ) == 0 );
9512  }
9513  }
9514  FCT_TEST_END();
9515 
9516 
9517  FCT_TEST_BGN(gcm_nist_validation_aes_19212810240104_2)
9518  {
9519  unsigned char key_str[128];
9520  unsigned char src_str[128];
9521  unsigned char dst_str[257];
9522  unsigned char iv_str[128];
9523  unsigned char add_str[128];
9524  unsigned char tag_str[128];
9525  unsigned char output[128];
9526  unsigned char tag_output[16];
9527  gcm_context ctx;
9528  unsigned int key_len;
9529  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
9530 
9531  memset(key_str, 0x00, 128);
9532  memset(src_str, 0x00, 128);
9533  memset(dst_str, 0x00, 257);
9534  memset(iv_str, 0x00, 128);
9535  memset(add_str, 0x00, 128);
9536  memset(tag_str, 0x00, 128);
9537  memset(output, 0x00, 128);
9538  memset(tag_output, 0x00, 16);
9539 
9540  key_len = unhexify( key_str, "91469828dafd30de415067236d5f49ea14e813637f1ee0c3" );
9541  pt_len = unhexify( src_str, "e3aac00bd05ce3c9b87720db82104364c8ef6ef25d6f3c8bcf5f73f1a26f8619e831bf7bb28c4dcbac7013dc6282d07cc225bd969c582a26accd7cfffe878a3159a5ad3cb6c8b89131aada61e2960cc5431f4ef94394634e4c8b2938409bcd2e7668986c7c5cd2ed5f2c525fa0212996960ab842a43869ed430d3291799a2a1e" );
9542  iv_len = unhexify( iv_str, "cb5409aad9d227a3cf0e2c5f1031873e" );
9543  add_len = unhexify( add_str, "" );
9544 
9545  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
9546  if( 0 == 0 )
9547  {
9548  fct_chk( 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 );
9549  hexify( dst_str, output, pt_len );
9550  hexify( tag_str, tag_output, tag_len );
9551 
9552  fct_chk( strcmp( (char *) dst_str, "4aa82b1c81a911cbe84231ce7afb95188f2177b539fb77de68f3d4801a2bd09f5ee2f7e59b5d9e79be5f7a23f0612ae39d59259dabc8b1bf7dbd4adc0db520bf7e71b988fa96d6b4dfc76afdc22ea31f64c64388dd93b27518b3263b0a19007405fc08645350a69e863a97dd952c8d886b5e0f444a6e77a9ef7c7de54f405a04" ) == 0 );
9553  fct_chk( strcmp( (char *) tag_str, "2a6b14c78bcb6e2718d8a28e42" ) == 0 );
9554  }
9555  }
9556  FCT_TEST_END();
9557 
9558 
9559  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024096_0)
9560  {
9561  unsigned char key_str[128];
9562  unsigned char src_str[128];
9563  unsigned char dst_str[257];
9564  unsigned char iv_str[128];
9565  unsigned char add_str[128];
9566  unsigned char tag_str[128];
9567  unsigned char output[128];
9568  unsigned char tag_output[16];
9569  gcm_context ctx;
9570  unsigned int key_len;
9571  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
9572 
9573  memset(key_str, 0x00, 128);
9574  memset(src_str, 0x00, 128);
9575  memset(dst_str, 0x00, 257);
9576  memset(iv_str, 0x00, 128);
9577  memset(add_str, 0x00, 128);
9578  memset(tag_str, 0x00, 128);
9579  memset(output, 0x00, 128);
9580  memset(tag_output, 0x00, 16);
9581 
9582  key_len = unhexify( key_str, "7b6907853b7d4c4a19468111d96c5de048200b5441b9411d" );
9583  pt_len = unhexify( src_str, "3622ba252c067ce7d6cae1d1f5068e457a0cf93be01fdce6dc8652a53135d5ed445388679e3f388ee6a81220b19356b275878fbcc2a6751bee7e2a50adb7c430e4c8cae03e88465f97bcaeb151d4f0007bee6bb9864b33020717adc42d6f8a283a20f6b62ec79fb8060e3e5ecc1e91a2eaef57e9dabd3b3634236f12d4bff475" );
9584  iv_len = unhexify( iv_str, "a66ee64c15094be079084c89cb1739c1" );
9585  add_len = unhexify( add_str, "" );
9586 
9587  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
9588  if( 0 == 0 )
9589  {
9590  fct_chk( 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 );
9591  hexify( dst_str, output, pt_len );
9592  hexify( tag_str, tag_output, tag_len );
9593 
9594  fct_chk( strcmp( (char *) dst_str, "2b8c1490e13881ab3bac875cbdb86baabe7fa30445bcb39315d057171e80d02aa8471355e80ba891b26d80b375508ba2756162cc688578be313a50096d7cd6253a8094970898fb99cd2967e78a57d12b8b3e3c10502634bead5bfe2c9dad332fcbda0c1bca16fd5cac78ebcbc7f15aad8b28abf3ed74a245a8e7a85cfaa712ab" ) == 0 );
9595  fct_chk( strcmp( (char *) tag_str, "e52af33988855d1a31158c78" ) == 0 );
9596  }
9597  }
9598  FCT_TEST_END();
9599 
9600 
9601  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024096_1)
9602  {
9603  unsigned char key_str[128];
9604  unsigned char src_str[128];
9605  unsigned char dst_str[257];
9606  unsigned char iv_str[128];
9607  unsigned char add_str[128];
9608  unsigned char tag_str[128];
9609  unsigned char output[128];
9610  unsigned char tag_output[16];
9611  gcm_context ctx;
9612  unsigned int key_len;
9613  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
9614 
9615  memset(key_str, 0x00, 128);
9616  memset(src_str, 0x00, 128);
9617  memset(dst_str, 0x00, 257);
9618  memset(iv_str, 0x00, 128);
9619  memset(add_str, 0x00, 128);
9620  memset(tag_str, 0x00, 128);
9621  memset(output, 0x00, 128);
9622  memset(tag_output, 0x00, 16);
9623 
9624  key_len = unhexify( key_str, "fe63e247e8de838a197a9e937e34c0f5a0b282533d445015" );
9625  pt_len = unhexify( src_str, "17c5d748b8596901e97df660ca94fc970f7ebb769aff88f60acc425f50ebfb6744c6d8778c226c5d63653d9388d3fa0d4d630f94d668f3478c89e2708501edb12307a9b2189576cbc79388d291354cb9a5d1eace4ca1d9f734fc78e55ecbf86338a31ebe583cace752e8bafd0a820384136963eb2d2f4eea7b2f69597737a1ca" );
9626  iv_len = unhexify( iv_str, "8e018305675c287f802f28fe56ae5c4b" );
9627  add_len = unhexify( add_str, "" );
9628 
9629  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
9630  if( 0 == 0 )
9631  {
9632  fct_chk( 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 );
9633  hexify( dst_str, output, pt_len );
9634  hexify( tag_str, tag_output, tag_len );
9635 
9636  fct_chk( strcmp( (char *) dst_str, "c3d34e2cf1c3ad629490d70a0fec1a63c88d025ffed46ff8f5d8c0879c166ad716b702682cd0a437bdaa03a9b2e69a32fb7259b0fa930ca7a344aea37886cc9850e44de0aa049b8bc300caee82e26b2a1e5ab45c4c7cc6a15f5f595199999a0cacaa59da1b2be2a204fe13005b92ce722a000228545ae8a61b2c667a386f431b" ) == 0 );
9637  fct_chk( strcmp( (char *) tag_str, "d7a6a917a286d8edf1289183" ) == 0 );
9638  }
9639  }
9640  FCT_TEST_END();
9641 
9642 
9643  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024096_2)
9644  {
9645  unsigned char key_str[128];
9646  unsigned char src_str[128];
9647  unsigned char dst_str[257];
9648  unsigned char iv_str[128];
9649  unsigned char add_str[128];
9650  unsigned char tag_str[128];
9651  unsigned char output[128];
9652  unsigned char tag_output[16];
9653  gcm_context ctx;
9654  unsigned int key_len;
9655  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
9656 
9657  memset(key_str, 0x00, 128);
9658  memset(src_str, 0x00, 128);
9659  memset(dst_str, 0x00, 257);
9660  memset(iv_str, 0x00, 128);
9661  memset(add_str, 0x00, 128);
9662  memset(tag_str, 0x00, 128);
9663  memset(output, 0x00, 128);
9664  memset(tag_output, 0x00, 16);
9665 
9666  key_len = unhexify( key_str, "c739dae83a5e64bd98ffaf68b5bcbcd0155d8109e9ff2518" );
9667  pt_len = unhexify( src_str, "56dafc06b354e84ce3ce31b7f88193124ca7e7049272beb93fbedcb3ede8e017bdb9ee5d314ec5168443fe01258d9abc4c4c27580f6299b20082b4ca87eb2589bedc459f132dfaefafffdd13f82e153a2165dcab9a9b6c10f1d0d13b127312a6f5f3d65a73b8fd057f1d88038c5137254111f7aedf21af07a35e34cf4d2166d9" );
9668  iv_len = unhexify( iv_str, "d80ac4dacb0f1441839e2068013dde3f" );
9669  add_len = unhexify( add_str, "" );
9670 
9671  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
9672  if( 0 == 0 )
9673  {
9674  fct_chk( 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 );
9675  hexify( dst_str, output, pt_len );
9676  hexify( tag_str, tag_output, tag_len );
9677 
9678  fct_chk( strcmp( (char *) dst_str, "9ae5107f4394c9050f8ca8ae6d1eb66099ccd0166f38e45c1cbc17b30e218fcf6015ac92dd7ab48bbb095a0523904c72710a86e50518d6aade269c82bc5ecdfa729802441e09aeb939abb43f5960542ad87961e2141f967d12f7190b07de99811b264dc62cb8f067872f84d21b661558ceeae4922900ffd76084e450650de79b" ) == 0 );
9679  fct_chk( strcmp( (char *) tag_str, "6a180ed4f3a9d5739e559d00" ) == 0 );
9680  }
9681  }
9682  FCT_TEST_END();
9683 
9684 
9685  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024064_0)
9686  {
9687  unsigned char key_str[128];
9688  unsigned char src_str[128];
9689  unsigned char dst_str[257];
9690  unsigned char iv_str[128];
9691  unsigned char add_str[128];
9692  unsigned char tag_str[128];
9693  unsigned char output[128];
9694  unsigned char tag_output[16];
9695  gcm_context ctx;
9696  unsigned int key_len;
9697  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
9698 
9699  memset(key_str, 0x00, 128);
9700  memset(src_str, 0x00, 128);
9701  memset(dst_str, 0x00, 257);
9702  memset(iv_str, 0x00, 128);
9703  memset(add_str, 0x00, 128);
9704  memset(tag_str, 0x00, 128);
9705  memset(output, 0x00, 128);
9706  memset(tag_output, 0x00, 16);
9707 
9708  key_len = unhexify( key_str, "4c23ed64375d42c3a402fdadd143336d2f6babf4d4ebc176" );
9709  pt_len = unhexify( src_str, "5541a219108ce3ce593cca8c6aa6504c84983a98851bf8610d71f79a38bdc21d5219266ad56e10ccba4898ea969815ed0d6df75312d657631e1e22e46f727a499696399a0955d94942a641383cadebc5328da2ac75bf0db709000ba3277581e1318cb5825ba112df3ea9c453ad04d03eb29d1715412cc03dbce6c8e380b36167" );
9710  iv_len = unhexify( iv_str, "daa6f68b3ce298310bcc2a7e0b2f9fec" );
9711  add_len = unhexify( add_str, "" );
9712 
9713  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
9714  if( 0 == 0 )
9715  {
9716  fct_chk( 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 );
9717  hexify( dst_str, output, pt_len );
9718  hexify( tag_str, tag_output, tag_len );
9719 
9720  fct_chk( strcmp( (char *) dst_str, "2a4e04101d4c822eba024dcea27d67eca7ba7f0ea6d5290ced9376049ae085ccae3ecb624c03eb5b2808982c88f0a5c4363a7271610b674317bbdf1538776f1fa2454c249a1b0d6c3e64bd4a356ac2aa2fd601a83d4fa76291f3ef1a9bfc858cc0aea10cff34ab9eb55411efec2a82a90af3fc80f3d8e2b56181630230890acc" ) == 0 );
9721  fct_chk( strcmp( (char *) tag_str, "d408209fabf82a35" ) == 0 );
9722  }
9723  }
9724  FCT_TEST_END();
9725 
9726 
9727  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024064_1)
9728  {
9729  unsigned char key_str[128];
9730  unsigned char src_str[128];
9731  unsigned char dst_str[257];
9732  unsigned char iv_str[128];
9733  unsigned char add_str[128];
9734  unsigned char tag_str[128];
9735  unsigned char output[128];
9736  unsigned char tag_output[16];
9737  gcm_context ctx;
9738  unsigned int key_len;
9739  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
9740 
9741  memset(key_str, 0x00, 128);
9742  memset(src_str, 0x00, 128);
9743  memset(dst_str, 0x00, 257);
9744  memset(iv_str, 0x00, 128);
9745  memset(add_str, 0x00, 128);
9746  memset(tag_str, 0x00, 128);
9747  memset(output, 0x00, 128);
9748  memset(tag_output, 0x00, 16);
9749 
9750  key_len = unhexify( key_str, "695dfde34f0af192faa50244ab95a6059e2e637e237eb60d" );
9751  pt_len = unhexify( src_str, "33ca2c61a04467ad2bbd2ba8144573f0c2504a4e9945fbae250385406ed1757adb70534bd6ed854f227d93eee57c73a314f5955208e1ba5af8cc1e8b5bb07cb63030e3ae5f0ad287536f49b576418bb1d2dec40562f6bdda59c373d6668aaa9b791285716325fccbda2180e33955c8be19d05e389820ed69258c9b93e3c82e96" );
9752  iv_len = unhexify( iv_str, "a6a57792b5a738286fb575b84eea2aaa" );
9753  add_len = unhexify( add_str, "" );
9754 
9755  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
9756  if( 0 == 0 )
9757  {
9758  fct_chk( 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 );
9759  hexify( dst_str, output, pt_len );
9760  hexify( tag_str, tag_output, tag_len );
9761 
9762  fct_chk( strcmp( (char *) dst_str, "b2ce449fc806dfb93cd7c97c018c2ba7d702216ae29a530a8f22d07279c7570c6288fc01fa9915b42a6be7a7d9569f71b8fc2411dd9747b5c9c7b5c0a592bcd7e8f4530ebaee37e9c7d48d7a56be7e2df1d91cecfd11bec09bbca7ce7106942989594e791e00e23557c843acf5164f3863d90f606ad8328696f4ca51fd29346c" ) == 0 );
9763  fct_chk( strcmp( (char *) tag_str, "050bd720de1b1350" ) == 0 );
9764  }
9765  }
9766  FCT_TEST_END();
9767 
9768 
9769  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024064_2)
9770  {
9771  unsigned char key_str[128];
9772  unsigned char src_str[128];
9773  unsigned char dst_str[257];
9774  unsigned char iv_str[128];
9775  unsigned char add_str[128];
9776  unsigned char tag_str[128];
9777  unsigned char output[128];
9778  unsigned char tag_output[16];
9779  gcm_context ctx;
9780  unsigned int key_len;
9781  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
9782 
9783  memset(key_str, 0x00, 128);
9784  memset(src_str, 0x00, 128);
9785  memset(dst_str, 0x00, 257);
9786  memset(iv_str, 0x00, 128);
9787  memset(add_str, 0x00, 128);
9788  memset(tag_str, 0x00, 128);
9789  memset(output, 0x00, 128);
9790  memset(tag_output, 0x00, 16);
9791 
9792  key_len = unhexify( key_str, "1a89a516204837bc780ad9b26717e51ccf42591bf58c75c1" );
9793  pt_len = unhexify( src_str, "c72a1b8707522442b992cb21a7526dfd341e27a11e761f594abbfacc2ac26ea48523d0113e38adbfc06d4af8809cb606454467fd253ca442241e8921b906d6c007dd09e139e568194666d5da0b33c7ca67876856cf504e8dfab4a5b0a77cfb1883d532ef7c70b35b0838882f144991c25a2331863eaaaa2059401f61378750e5" );
9794  iv_len = unhexify( iv_str, "a9b1ef7744075cd6cc024f8c7b3b0b6e" );
9795  add_len = unhexify( add_str, "" );
9796 
9797  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
9798  if( 0 == 0 )
9799  {
9800  fct_chk( 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 );
9801  hexify( dst_str, output, pt_len );
9802  hexify( tag_str, tag_output, tag_len );
9803 
9804  fct_chk( strcmp( (char *) dst_str, "0ec50150590bb419df0d6c410edfc2f8805a602ff247e3b50881ad3efb598ed053d8dd1deff86460db0081c0eb3effe9ea94564f74000166f08db24da6cfcba91a9ee1e98b8671db99edbe8fde11d0e898bb130e1b27358fc42be03fb3348af7de9376af495c0ec71aed56d680632195539b2d1d5bf804328d0928a44c9731ce" ) == 0 );
9805  fct_chk( strcmp( (char *) tag_str, "6c9f55e67533828c" ) == 0 );
9806  }
9807  }
9808  FCT_TEST_END();
9809 
9810 
9811  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024032_0)
9812  {
9813  unsigned char key_str[128];
9814  unsigned char src_str[128];
9815  unsigned char dst_str[257];
9816  unsigned char iv_str[128];
9817  unsigned char add_str[128];
9818  unsigned char tag_str[128];
9819  unsigned char output[128];
9820  unsigned char tag_output[16];
9821  gcm_context ctx;
9822  unsigned int key_len;
9823  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
9824 
9825  memset(key_str, 0x00, 128);
9826  memset(src_str, 0x00, 128);
9827  memset(dst_str, 0x00, 257);
9828  memset(iv_str, 0x00, 128);
9829  memset(add_str, 0x00, 128);
9830  memset(tag_str, 0x00, 128);
9831  memset(output, 0x00, 128);
9832  memset(tag_output, 0x00, 16);
9833 
9834  key_len = unhexify( key_str, "4107d51f7d6e24aa605959d5d46b4c7e1743b7d5e3ae07b6" );
9835  pt_len = unhexify( src_str, "e5074ffbaf5e771e12f9e7cc8e7701b970aa7897928681383ea0f91bce8200ec6782dc9618e065e142c4ef2f7019791e74edfe2040b08bdf328d7d9658e7473beab65359d35ed168a2bb39f3c3f59890353405a82f48e16d388eb8f2145ed9bff016e725791cabca913813e7485f387223711c1ad098ffa0f72f74a048ec17ea" );
9836  iv_len = unhexify( iv_str, "94a88f6872995b26da39efb5e3f93334" );
9837  add_len = unhexify( add_str, "" );
9838 
9839  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
9840  if( 0 == 0 )
9841  {
9842  fct_chk( 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 );
9843  hexify( dst_str, output, pt_len );
9844  hexify( tag_str, tag_output, tag_len );
9845 
9846  fct_chk( strcmp( (char *) dst_str, "bf32a717c945e1e2fe91fd38f3c7084210a7966cb83235d28f701ebcae6b2042226e932e4601eb3ed4728ca32bf7065fcdc98017dabcac23f0f80c65e92518db6c78bf4cd91f817b69f3c3a8891786d433f6c3c1a025c1d37bd1c587ba6004085571245591d615906f5c18994f09a03f3eef180d7af34f00ecfe153d5ab73933" ) == 0 );
9847  fct_chk( strcmp( (char *) tag_str, "8d43426d" ) == 0 );
9848  }
9849  }
9850  FCT_TEST_END();
9851 
9852 
9853  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024032_1)
9854  {
9855  unsigned char key_str[128];
9856  unsigned char src_str[128];
9857  unsigned char dst_str[257];
9858  unsigned char iv_str[128];
9859  unsigned char add_str[128];
9860  unsigned char tag_str[128];
9861  unsigned char output[128];
9862  unsigned char tag_output[16];
9863  gcm_context ctx;
9864  unsigned int key_len;
9865  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
9866 
9867  memset(key_str, 0x00, 128);
9868  memset(src_str, 0x00, 128);
9869  memset(dst_str, 0x00, 257);
9870  memset(iv_str, 0x00, 128);
9871  memset(add_str, 0x00, 128);
9872  memset(tag_str, 0x00, 128);
9873  memset(output, 0x00, 128);
9874  memset(tag_output, 0x00, 16);
9875 
9876  key_len = unhexify( key_str, "0fa6270a44c8d14937cc3ff4cc2d2c997254a42ca8a09eaf" );
9877  pt_len = unhexify( src_str, "2252d1c4706cc46ad3e4f8c49a92cdc7d1af24deaf7b08ab7304ef804cfe261acc3a202bec0d8df42cc36a5a3ace9ed7a9465cdec3513d31de9ae7821f9444226439c8f98a9a7d99b36b91b1b00eac71080d7eb550209af5fb7b3f28d09f5060070da73a40456d60c0470773af95d16c0b33d0b5327d44188619b950590ea862" );
9878  iv_len = unhexify( iv_str, "b5f3fde841156bc408ec3de9ef3438fc" );
9879  add_len = unhexify( add_str, "" );
9880 
9881  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
9882  if( 0 == 0 )
9883  {
9884  fct_chk( 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 );
9885  hexify( dst_str, output, pt_len );
9886  hexify( tag_str, tag_output, tag_len );
9887 
9888  fct_chk( strcmp( (char *) dst_str, "4fcfc56fa722af32e804dee0f4b67f5fea542b381bc47c41451844c82e5427f6cd90c37e088dbaff722d8700a11d5dfb4282e565f32e055324e5069931c86b62feb2cdf82ca1f62aee02a70e4e274b2b957650a5cc772be86c1b1cfc41b01d20d9be8b05b9e3ff65413520789ca0f198fe00d83483a1d85aeb13094c9a827e7d" ) == 0 );
9889  fct_chk( strcmp( (char *) tag_str, "1ae8f9c3" ) == 0 );
9890  }
9891  }
9892  FCT_TEST_END();
9893 
9894 
9895  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024032_2)
9896  {
9897  unsigned char key_str[128];
9898  unsigned char src_str[128];
9899  unsigned char dst_str[257];
9900  unsigned char iv_str[128];
9901  unsigned char add_str[128];
9902  unsigned char tag_str[128];
9903  unsigned char output[128];
9904  unsigned char tag_output[16];
9905  gcm_context ctx;
9906  unsigned int key_len;
9907  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
9908 
9909  memset(key_str, 0x00, 128);
9910  memset(src_str, 0x00, 128);
9911  memset(dst_str, 0x00, 257);
9912  memset(iv_str, 0x00, 128);
9913  memset(add_str, 0x00, 128);
9914  memset(tag_str, 0x00, 128);
9915  memset(output, 0x00, 128);
9916  memset(tag_output, 0x00, 16);
9917 
9918  key_len = unhexify( key_str, "104c18bd2a0641fd46c2d7590d60d6d8eea74a2758ed0f4d" );
9919  pt_len = unhexify( src_str, "4434cf5d12d07614227cfc12716a8adfc651ffe5c6476cf4489afaa698d9d19947016bdbcb5b625773252745dfeaf9b10021a5b38f742ea8a0fc5f926c80cef6568ab8639cddcf8fee9678d45ad4937d6e6b054b65512f929e897ed5f965cd14cad939732c53a847bb2758d818d5d131977649db5b59a0c5ebac37db961f9d69" );
9920  iv_len = unhexify( iv_str, "2902faec60f754f0fbb1981aeba277ff" );
9921  add_len = unhexify( add_str, "" );
9922 
9923  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
9924  if( 0 == 0 )
9925  {
9926  fct_chk( 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 );
9927  hexify( dst_str, output, pt_len );
9928  hexify( tag_str, tag_output, tag_len );
9929 
9930  fct_chk( strcmp( (char *) dst_str, "1789524845a1e36322c44dd1e938ee5d0fe6df244b751f3023d5d64d40a72598d352d9d2faba68be4e035c258b68782273925a94527fcdb977a41c1e0a96f53119b5909b23b0327c820e8f6da049a5d144a98019c4953aafd481190117573869109c265012a42f76bb4c3353f6613ccbc40a4af2f9e148bf0a0324bb43337fb7" ) == 0 );
9931  fct_chk( strcmp( (char *) tag_str, "d36d2d06" ) == 0 );
9932  }
9933  }
9934  FCT_TEST_END();
9935 
9936 
9937  FCT_TEST_BGN(gcm_nist_validation_aes_19212810241024128_0)
9938  {
9939  unsigned char key_str[128];
9940  unsigned char src_str[128];
9941  unsigned char dst_str[257];
9942  unsigned char iv_str[128];
9943  unsigned char add_str[128];
9944  unsigned char tag_str[128];
9945  unsigned char output[128];
9946  unsigned char tag_output[16];
9947  gcm_context ctx;
9948  unsigned int key_len;
9949  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
9950 
9951  memset(key_str, 0x00, 128);
9952  memset(src_str, 0x00, 128);
9953  memset(dst_str, 0x00, 257);
9954  memset(iv_str, 0x00, 128);
9955  memset(add_str, 0x00, 128);
9956  memset(tag_str, 0x00, 128);
9957  memset(output, 0x00, 128);
9958  memset(tag_output, 0x00, 16);
9959 
9960  key_len = unhexify( key_str, "263451f187b6dcab9d8dc4364217a483dd80c1d75f24fcea" );
9961  pt_len = unhexify( src_str, "5e236c282eb4646fbd16a95eff2b27873f625a7e919237d75989a8a112ea80ce8db0b4aeaf5da59c3b22649dabb584284ab9673ba7edef59043eb8e99763643941a4788e7cf11bad63e13c9ef08644044b76beef68928dac22975481da4afc723b3ab3b498189542cbdffbc3f467d190cd02e9b36b6981122aa80cfa3aa3561f" );
9962  iv_len = unhexify( iv_str, "6c4552b3a03152aa464e88fd5b14356d" );
9963  add_len = unhexify( add_str, "435453a304fcd3c4bd6ab90d6ed8c54e6d21f75b9e56c9d48030499b04f6754cff628c4c9216f7d8a0abed5b8b7ca128c099a7deab74ecfe2c4a494b30d74833f837d254aa00d75aa963ce9c041f1916eb63d673a4af3f88817c65d4c86f5a3c28a67de2aaf75f08d1b628af333e518a7e99d980571db608407d3f447563f2df" );
9964 
9965  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
9966  if( 0 == 0 )
9967  {
9968  fct_chk( 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 );
9969  hexify( dst_str, output, pt_len );
9970  hexify( tag_str, tag_output, tag_len );
9971 
9972  fct_chk( strcmp( (char *) dst_str, "12dea5ea9b54957c689c7c9c6a711e2880645109a4057fafe3b32727a60ee1e24f8450310d6b8402c26b307bb0bf3cb7c6407270d95590efb938e6d77359666b11a7a3833a7122697e959645d8e9d835e0bd39bdc30397115b4c348ea825c850c1e54a60a2522a6321e4b99fa2ad9215205628c595b07c6ffed939c779d23ab2" ) == 0 );
9973  fct_chk( strcmp( (char *) tag_str, "585677e0f37ae13d886c38202c3860b7" ) == 0 );
9974  }
9975  }
9976  FCT_TEST_END();
9977 
9978 
9979  FCT_TEST_BGN(gcm_nist_validation_aes_19212810241024128_1)
9980  {
9981  unsigned char key_str[128];
9982  unsigned char src_str[128];
9983  unsigned char dst_str[257];
9984  unsigned char iv_str[128];
9985  unsigned char add_str[128];
9986  unsigned char tag_str[128];
9987  unsigned char output[128];
9988  unsigned char tag_output[16];
9989  gcm_context ctx;
9990  unsigned int key_len;
9991  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
9992 
9993  memset(key_str, 0x00, 128);
9994  memset(src_str, 0x00, 128);
9995  memset(dst_str, 0x00, 257);
9996  memset(iv_str, 0x00, 128);
9997  memset(add_str, 0x00, 128);
9998  memset(tag_str, 0x00, 128);
9999  memset(output, 0x00, 128);
10000  memset(tag_output, 0x00, 16);
10001 
10002  key_len = unhexify( key_str, "dbcf735d7c8701f537090d3dcf914c741ed783c24bd8265b" );
10003  pt_len = unhexify( src_str, "18eb70dff73341298ce33ff4049fa631f2c72c158fcdea55d1231c46c95ba4013012b713bc95ba25a2114d0380c297acd05c323696db466874083e18bf544dabffbc70be4649cfe7e8bf449aeb9789d6fa412a1adf57ce732702ab962561f9e1fa850733c97b8a4158786e8ccf32af0fc2b04907124e731ffaf3fa7eacaa64b2" );
10004  iv_len = unhexify( iv_str, "09ecced8460af635e46bc82450352be5" );
10005  add_len = unhexify( add_str, "cc5b8f82fce3797009fbd38dfad7055a5e2ac241363f6773191d0e534e2b4592a6805c191daad377245c414df8edc4d3d9ecd191a50cf9747dde65187484802e15797d7c7e1db49ea4e423e94d9ad3b99aea6bf2928ce6addfc00848550b4d2e466e85a282cc022c7c4469d2cb16151e81bf63df378e0c676036197d9470f42a" );
10006 
10007  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
10008  if( 0 == 0 )
10009  {
10010  fct_chk( 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 );
10011  hexify( dst_str, output, pt_len );
10012  hexify( tag_str, tag_output, tag_len );
10013 
10014  fct_chk( strcmp( (char *) dst_str, "8298f796428faffa6085e458f149675d6c6e2cdfbc7994ee6f19af40fe8926c28904fd5ac0b9bdbd2de3f1614500a3eab1f980f82ac23cae80f3e6ba71539d1723e9f3412df345536f7517d847aae79a83ee9ad5fe38d60c6618d870cb1f203a3e1847d14d8de5295209c0e05aa196fec0eab8389e4eb66bdf3dd49d0800ffad" ) == 0 );
10015  fct_chk( strcmp( (char *) tag_str, "e53ca266dd93def5bee5daf70c953dd2" ) == 0 );
10016  }
10017  }
10018  FCT_TEST_END();
10019 
10020 
10021  FCT_TEST_BGN(gcm_nist_validation_aes_19212810241024128_2)
10022  {
10023  unsigned char key_str[128];
10024  unsigned char src_str[128];
10025  unsigned char dst_str[257];
10026  unsigned char iv_str[128];
10027  unsigned char add_str[128];
10028  unsigned char tag_str[128];
10029  unsigned char output[128];
10030  unsigned char tag_output[16];
10031  gcm_context ctx;
10032  unsigned int key_len;
10033  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
10034 
10035  memset(key_str, 0x00, 128);
10036  memset(src_str, 0x00, 128);
10037  memset(dst_str, 0x00, 257);
10038  memset(iv_str, 0x00, 128);
10039  memset(add_str, 0x00, 128);
10040  memset(tag_str, 0x00, 128);
10041  memset(output, 0x00, 128);
10042  memset(tag_output, 0x00, 16);
10043 
10044  key_len = unhexify( key_str, "5f8d84908a8b7f5e118482bb867102a244bcbf48b7229115" );
10045  pt_len = unhexify( src_str, "9cd2a4e2acbeea6a73b5bffc1191d8045f63f3a14aa762eb776f35518f72bde4f9c8decd61a9319e3dfca82e682910a43de2719451e1a32839b29b27c3eb1c8f6118512d6a19cf189e2d04cf4e22459397936d60f7551244387294a7994320546f070e54f166cd7c243d13f3017b786f7df6a7fa4ece05a2fe49fc39e2225b92" );
10046  iv_len = unhexify( iv_str, "5ba986f5115d40c2cfe404007a1e2403" );
10047  add_len = unhexify( add_str, "06f98d4807efecfc863309f3bc64b0f04e4c16c32675ff97a3295d5657d4443f6c8b0a394d3f942705bdc19c22b8ff58e9b7c209b528b745fa0424d5898ef0e42e0909aa5ad0b01f8549e3674102ddaf4784f0ff8908cf9f9a25e7e4dd9af4da7bd13ae0cd87b6aaa6b132dc518f4a95af403e612edce63e1424dacf8e349372" );
10048 
10049  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
10050  if( 0 == 0 )
10051  {
10052  fct_chk( 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 );
10053  hexify( dst_str, output, pt_len );
10054  hexify( tag_str, tag_output, tag_len );
10055 
10056  fct_chk( strcmp( (char *) dst_str, "2f168fd1c819b159739a7cc783ecdb0ef9639b7965918e343e2a55f196daf584f7f14bb6e42d37b504bfc2cc08c218c5b841b2d2abce05bbf15315f471e56f04f7d54d6f1dc7b7a68b8bc7026a1441105015bcee2c39d83be35d25f0d514bd1ffe75411b32867ebf2d532a766f9bfce9e55ea3e0240d2a3713ddc2ba790bad21" ) == 0 );
10057  fct_chk( strcmp( (char *) tag_str, "7f121ea36b36449e1db85e8a91ab16f3" ) == 0 );
10058  }
10059  }
10060  FCT_TEST_END();
10061 
10062 
10063  FCT_TEST_BGN(gcm_nist_validation_aes_19212810241024120_0)
10064  {
10065  unsigned char key_str[128];
10066  unsigned char src_str[128];
10067  unsigned char dst_str[257];
10068  unsigned char iv_str[128];
10069  unsigned char add_str[128];
10070  unsigned char tag_str[128];
10071  unsigned char output[128];
10072  unsigned char tag_output[16];
10073  gcm_context ctx;
10074  unsigned int key_len;
10075  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
10076 
10077  memset(key_str, 0x00, 128);
10078  memset(src_str, 0x00, 128);
10079  memset(dst_str, 0x00, 257);
10080  memset(iv_str, 0x00, 128);
10081  memset(add_str, 0x00, 128);
10082  memset(tag_str, 0x00, 128);
10083  memset(output, 0x00, 128);
10084  memset(tag_output, 0x00, 16);
10085 
10086  key_len = unhexify( key_str, "f6c3037a59e98a9a81094d65ca52752ad92f93bcfa671821" );
10087  pt_len = unhexify( src_str, "26647f8f4092f80fc19f81f029c354c582b582516e8e27e97d50866e8ff755f50a8ae6422f4e996f0cf50826a68c007a5b16fd59002d368ed3285bbd04f8f9a5a524243cb8d5b3ffa184ba7384771bfc508f2e93abd2a1e7170d694d35cc0ff7f247e84ca8889efc820c3f6d9cd40afd56c5799972d7556c91cde50ac808652c" );
10088  iv_len = unhexify( iv_str, "43b4f15bbe525913a31a9adf23d1971e" );
10089  add_len = unhexify( add_str, "60826c97f0a99b88e7aeab774a3f2278f9d35b6c1a5fce49d9389a421543c99f68797224535dca4d7040313340da73982220040a063b045843a14f5d38763f95bdd26ef818f6e5171c8d5b47f183589afd6acd36e59b9946c1edf038ae285f500171e9850603cda36043c29860e75bfe03c21e0ef11a9aecc5d5c51bb2201d29" );
10090 
10091  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
10092  if( 0 == 0 )
10093  {
10094  fct_chk( 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 );
10095  hexify( dst_str, output, pt_len );
10096  hexify( tag_str, tag_output, tag_len );
10097 
10098  fct_chk( strcmp( (char *) dst_str, "e58df99cce5b2548cf39684df6a26b8f9b7969168ff21c410bc40b763842ab3b30cbb3c82e0b420c8100da61c9037a9f112db9563a3d069cdf2997e7f4dbb0b5d79b56f0e985cd8cb70355366f7afd211bd9909c48b142c6556326062d27f7f82d76b83c433f00f1716ebc95038cb57c550b5810b77788c8bf1e686a8a14b610" ) == 0 );
10099  fct_chk( strcmp( (char *) tag_str, "ba6aa6d68a560642c266bf4469eaac" ) == 0 );
10100  }
10101  }
10102  FCT_TEST_END();
10103 
10104 
10105  FCT_TEST_BGN(gcm_nist_validation_aes_19212810241024120_1)
10106  {
10107  unsigned char key_str[128];
10108  unsigned char src_str[128];
10109  unsigned char dst_str[257];
10110  unsigned char iv_str[128];
10111  unsigned char add_str[128];
10112  unsigned char tag_str[128];
10113  unsigned char output[128];
10114  unsigned char tag_output[16];
10115  gcm_context ctx;
10116  unsigned int key_len;
10117  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
10118 
10119  memset(key_str, 0x00, 128);
10120  memset(src_str, 0x00, 128);
10121  memset(dst_str, 0x00, 257);
10122  memset(iv_str, 0x00, 128);
10123  memset(add_str, 0x00, 128);
10124  memset(tag_str, 0x00, 128);
10125  memset(output, 0x00, 128);
10126  memset(tag_output, 0x00, 16);
10127 
10128  key_len = unhexify( key_str, "8fd9b08232a1d3fbe319d0897c74098f75b3e801d10e183a" );
10129  pt_len = unhexify( src_str, "a677a13ae26b7a05cecfd153aaaea02ccb50db601221a3df545164bb5fe638f6ed276d4bd172b9e740a82a690aec4f18f4f3a0afb80c9a32188958e1cb3651064f55ca1211647903f63013e46b46c7f4f95589012eb4ccd2451d8e8dacc3cd066281f1f0c71f69f1c49f3f94136a522fff0d02427e4bccab056e615ff6fde1d6" );
10130  iv_len = unhexify( iv_str, "304c759800b8e275dfcfd3e5e3c61a7e" );
10131  add_len = unhexify( add_str, "5d2dffb00a25788548ff1b2c94745e5bfcc05eeb11e63501007335d4bd06bfb3223d4682e7e83eca0e163d1a8f2a76096ab2839ad14b45eb59ea9b29feb76f40b0d8dac55247c65e5dbe6bb2d5155ddcf2b2f924c48e1c16c990b69ac48ef2350873c1ed524ce1b8ef6c92a11c8e461303f7c32b5d65b57154197e45f1c6b792" );
10132 
10133  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
10134  if( 0 == 0 )
10135  {
10136  fct_chk( 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 );
10137  hexify( dst_str, output, pt_len );
10138  hexify( tag_str, tag_output, tag_len );
10139 
10140  fct_chk( strcmp( (char *) dst_str, "0779e5050dd17837d40fe3427322e717f074312f160c1951e5560797c13e4fbe47f320dc8053a39d2def4d3cc20e215978647d917ddf93fdf9eee5e54a974060dbac2a478afe5f5acbf65af4dccbd3942d130dddfd90cfc969da0c7f4b4050e34ce2e049c3bb004782abf4744c9a3ca2713ebfc5dfa16d011bc0b33d0368c108" ) == 0 );
10141  fct_chk( strcmp( (char *) tag_str, "54c8a1dddfaa1cafbcc1883587b4cd" ) == 0 );
10142  }
10143  }
10144  FCT_TEST_END();
10145 
10146 
10147  FCT_TEST_BGN(gcm_nist_validation_aes_19212810241024120_2)
10148  {
10149  unsigned char key_str[128];
10150  unsigned char src_str[128];
10151  unsigned char dst_str[257];
10152  unsigned char iv_str[128];
10153  unsigned char add_str[128];
10154  unsigned char tag_str[128];
10155  unsigned char output[128];
10156  unsigned char tag_output[16];
10157  gcm_context ctx;
10158  unsigned int key_len;
10159  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
10160 
10161  memset(key_str, 0x00, 128);
10162  memset(src_str, 0x00, 128);
10163  memset(dst_str, 0x00, 257);
10164  memset(iv_str, 0x00, 128);
10165  memset(add_str, 0x00, 128);
10166  memset(tag_str, 0x00, 128);
10167  memset(output, 0x00, 128);
10168  memset(tag_output, 0x00, 16);
10169 
10170  key_len = unhexify( key_str, "19d38467c1024611433a0b2780980538d88f3e8907a86e42" );
10171  pt_len = unhexify( src_str, "2623cd0eb46a7366877149ce0204d7dc08a5e64a1adb3b6759178c4eab26ca1806fc25fc0fc99dfc77d1811e61ac1e04ee82eb69ef7527962df1707734e4aca970b8a499eb70c2b0386942906945abcd9234b92e7bec33009e70786c39bd241da3905d961473e50367cb7726df8da2662fb32101d13b75032838f01ad7946670" );
10172  iv_len = unhexify( iv_str, "8d56a9e4bed67a7eb0f7b8c5e6bbf04e" );
10173  add_len = unhexify( add_str, "1c7d2744a56f5185b9cdf14eb9776ffd315214540daffc69c217dd64c7d0fb4a9f7b1ccc4c1e325fc046eec4feb8df35d32f492a28d35858ad1e9bfaf95211f111473c2ff799a124b308fba996b08f185103607605922bad319c6b7fd211f97c861565bea34948bfd751e4ce2591ae777ab1df8dc9e820cdad13066ed74303c6" );
10174 
10175  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
10176  if( 0 == 0 )
10177  {
10178  fct_chk( 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 );
10179  hexify( dst_str, output, pt_len );
10180  hexify( tag_str, tag_output, tag_len );
10181 
10182  fct_chk( strcmp( (char *) dst_str, "edfdfa35b41c5642e5b4dd1769b635811a48ecf21915cbef3c9e2f8230953f2ed4fda8903ec7634f10d55aa58c975a6c6133a173c2aeb83d6d7fc6534ea1781dfc62408e7a17d255a983bd1c33d2f423c364893db8128a599cd037b2db318f86f1fbd895a64a9fb209490b7e9a30db8cdf42e348cfcfa7984e15c17db810ec19" ) == 0 );
10183  fct_chk( strcmp( (char *) tag_str, "17dff78f61d21de4c0744e57174f70" ) == 0 );
10184  }
10185  }
10186  FCT_TEST_END();
10187 
10188 
10189  FCT_TEST_BGN(gcm_nist_validation_aes_19212810241024112_0)
10190  {
10191  unsigned char key_str[128];
10192  unsigned char src_str[128];
10193  unsigned char dst_str[257];
10194  unsigned char iv_str[128];
10195  unsigned char add_str[128];
10196  unsigned char tag_str[128];
10197  unsigned char output[128];
10198  unsigned char tag_output[16];
10199  gcm_context ctx;
10200  unsigned int key_len;
10201  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
10202 
10203  memset(key_str, 0x00, 128);
10204  memset(src_str, 0x00, 128);
10205  memset(dst_str, 0x00, 257);
10206  memset(iv_str, 0x00, 128);
10207  memset(add_str, 0x00, 128);
10208  memset(tag_str, 0x00, 128);
10209  memset(output, 0x00, 128);
10210  memset(tag_output, 0x00, 16);
10211 
10212  key_len = unhexify( key_str, "d69bdc9d35589e33ea9c2b956780cd9618e0df79d1083e69" );
10213  pt_len = unhexify( src_str, "d8a75de22fd3e2d50127c6fdeabc09fab1178875998319e1ea83c9745a1d5833c6ba9df08177c349dfa412e13e1927bbd4cdfb54a21c86c149be1feb4d9de99ffd590850875a3d9c8d9306971a9802ad4ca48f73d0517322525ac8463e3d59ae9895c9b363b6f0728d7585de78cbb49757bd1919ba2f2d6ba042d0781e7a79d7" );
10214  iv_len = unhexify( iv_str, "abd4b94362501b8f307fca076fccc60d" );
10215  add_len = unhexify( add_str, "1ad9aa99a4c8158ec08d21ebfb62604a043fc0c248fe08daa15a89f4a7855916af8aeb681ac6600c0268ade231f918fe508f48c9cfa998effc350fa117e2772f04839f8fa1a53bca00693ecd28db27c6507750404bd89af07451d66fb7dfa47065e9d3fe24a910eb27911591e4f4e4746b35359afada4356676b3c7331c610ab" );
10216 
10217  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
10218  if( 0 == 0 )
10219  {
10220  fct_chk( 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 );
10221  hexify( dst_str, output, pt_len );
10222  hexify( tag_str, tag_output, tag_len );
10223 
10224  fct_chk( strcmp( (char *) dst_str, "52e88b54b410dbfb4d88092df52688ba9502b906752b4802aca5428437d795de0d3539945bebdf2bab070df4a7e630469b92fe2dde0998d44094cae7f21f84ea7806637fa5c73b138e87d04005ef1206ddf30a21f46c0aa718665e809ffc0b42b5250143604b20225ec460defaf554a8bfb5f69ef4244e02e9563c374a44f0a9" ) == 0 );
10225  fct_chk( strcmp( (char *) tag_str, "1024f8e9997f5fa4684930d17431" ) == 0 );
10226  }
10227  }
10228  FCT_TEST_END();
10229 
10230 
10231  FCT_TEST_BGN(gcm_nist_validation_aes_19212810241024112_1)
10232  {
10233  unsigned char key_str[128];
10234  unsigned char src_str[128];
10235  unsigned char dst_str[257];
10236  unsigned char iv_str[128];
10237  unsigned char add_str[128];
10238  unsigned char tag_str[128];
10239  unsigned char output[128];
10240  unsigned char tag_output[16];
10241  gcm_context ctx;
10242  unsigned int key_len;
10243  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
10244 
10245  memset(key_str, 0x00, 128);
10246  memset(src_str, 0x00, 128);
10247  memset(dst_str, 0x00, 257);
10248  memset(iv_str, 0x00, 128);
10249  memset(add_str, 0x00, 128);
10250  memset(tag_str, 0x00, 128);
10251  memset(output, 0x00, 128);
10252  memset(tag_output, 0x00, 16);
10253 
10254  key_len = unhexify( key_str, "6960be8fe82061e9cd783cd1c03f63a00d60ce9fc47ea496" );
10255  pt_len = unhexify( src_str, "e0f574ddbb04831b5a86f40182f5f10d8667fe13c7065b471df157f67230c41b8c069c0218ceab93d63964be8ee853c567add2c3eab1670b03a51f9175e8e763be778ec43833cd716e1c8fe5cfb1d663149b21e06df772a3973fe1297d65188201cdb0c3533f5e9d40bb0664a97db60fc99d7e48eedebf264024006ca36361ac" );
10256  iv_len = unhexify( iv_str, "672f4378862c82738055273c72555b39" );
10257  add_len = unhexify( add_str, "e3a4dbce87edac519ce86349eed2dba0d371cef0d8f20b4dda3e1cd9f5799c9fd0b7494daec5bc995a6936c501212eb957ccc9ddd4c9b8a205cac122ba87b5c5a0eeba6b2af2cbc2326d953d61d089b6334ce03257203072f8e06b8c6f37692748a13e681082900fd32f0df6a3072f3a8b9bbeb3ea558e97a43d6656093d7c75" );
10258 
10259  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
10260  if( 0 == 0 )
10261  {
10262  fct_chk( 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 );
10263  hexify( dst_str, output, pt_len );
10264  hexify( tag_str, tag_output, tag_len );
10265 
10266  fct_chk( strcmp( (char *) dst_str, "2a3c4b79bbcfa4af04baa8413f6f1d18c9c579060ecd0cc359fcdcfc0566697ff834f7dffec84b2292e8583ecb59c9e5e5d87913a6ccaacebf371f1fff67f0be749d4ea5f5c6f4c959e9d932414a54a8e25bf2f485ecce9e70990bbc4e621ce2c8fcc3caa66b0730c6639de1bfa0124afe351912279bc3ca363f4e6013496cf1" ) == 0 );
10267  fct_chk( strcmp( (char *) tag_str, "dbdd6af194f2578a0d0832d0cba1" ) == 0 );
10268  }
10269  }
10270  FCT_TEST_END();
10271 
10272 
10273  FCT_TEST_BGN(gcm_nist_validation_aes_19212810241024112_2)
10274  {
10275  unsigned char key_str[128];
10276  unsigned char src_str[128];
10277  unsigned char dst_str[257];
10278  unsigned char iv_str[128];
10279  unsigned char add_str[128];
10280  unsigned char tag_str[128];
10281  unsigned char output[128];
10282  unsigned char tag_output[16];
10283  gcm_context ctx;
10284  unsigned int key_len;
10285  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
10286 
10287  memset(key_str, 0x00, 128);
10288  memset(src_str, 0x00, 128);
10289  memset(dst_str, 0x00, 257);
10290  memset(iv_str, 0x00, 128);
10291  memset(add_str, 0x00, 128);
10292  memset(tag_str, 0x00, 128);
10293  memset(output, 0x00, 128);
10294  memset(tag_output, 0x00, 16);
10295 
10296  key_len = unhexify( key_str, "2b7d0115612c56a1f28c6b3cb3d51c2b4bbd4cd36ccf3dda" );
10297  pt_len = unhexify( src_str, "3a88efa524a90b31873cba177a7e6e050dc59f42c934923db1e75fec924908370ad0c9c3b0b3c05adf12c6ef2627d8d16f832071c055aef5f581a39a8e7d9bed2629e26d5e3ecaed24048d744fba08d8d12132def62059f1a549044c1db121f47f10b3dc4a02849150aef53bd259d6814162761cbc9e1a8731d82101696e32d4" );
10298  iv_len = unhexify( iv_str, "317a60c3c29440b8ba04daf980994c46" );
10299  add_len = unhexify( add_str, "80d816bf4008ae51b9dd9a25c30cd7482f2289f5616c41d99881aa8f78b5efff84efe307a822174f3a5c08b381bc99b169b92057627f21dddc367723eaca2545ce3a4fba2b4633fd99459fb03e85d6d11ed041b63185f3b94f6004bdce556e2a0aaf811faf0153b3974d0bae3eabadccfc95474c940ecad5b4d5ea88f88b8c4a" );
10300 
10301  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
10302  if( 0 == 0 )
10303  {
10304  fct_chk( 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 );
10305  hexify( dst_str, output, pt_len );
10306  hexify( tag_str, tag_output, tag_len );
10307 
10308  fct_chk( strcmp( (char *) dst_str, "f193303bb781164e42b3d4d25569a446c86646bc0fbc93059603c0b46ec737ddfcd55df8c90e6d806bd9fef90f2b122a1758bef5c75fcdff95ce44217d9b6b0e75e77656cc7f8a8cc47729c74faf43cbf08202e9ad16c7ef8c832ce5f97f51153e178ccc3c168928f3c328cd5b4c341bb0482f6a292cfa2fa85e03d95bcd4cb1" ) == 0 );
10309  fct_chk( strcmp( (char *) tag_str, "42308ffc76cb6ab3c770e06f78ba" ) == 0 );
10310  }
10311  }
10312  FCT_TEST_END();
10313 
10314 
10315  FCT_TEST_BGN(gcm_nist_validation_aes_19212810241024104_0)
10316  {
10317  unsigned char key_str[128];
10318  unsigned char src_str[128];
10319  unsigned char dst_str[257];
10320  unsigned char iv_str[128];
10321  unsigned char add_str[128];
10322  unsigned char tag_str[128];
10323  unsigned char output[128];
10324  unsigned char tag_output[16];
10325  gcm_context ctx;
10326  unsigned int key_len;
10327  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
10328 
10329  memset(key_str, 0x00, 128);
10330  memset(src_str, 0x00, 128);
10331  memset(dst_str, 0x00, 257);
10332  memset(iv_str, 0x00, 128);
10333  memset(add_str, 0x00, 128);
10334  memset(tag_str, 0x00, 128);
10335  memset(output, 0x00, 128);
10336  memset(tag_output, 0x00, 16);
10337 
10338  key_len = unhexify( key_str, "75737e01a95c2ad9c860e72a57da646e01c2286a14dfec75" );
10339  pt_len = unhexify( src_str, "fa749799afcf2242a6000c4fe1e0628db53933dde99d672e3c7b24b0cd6533b8002bb7aa8633322f4ee2e343db3a0067ad44edaa398cd90ebdb50c732e8bf95aceb4aaa4dfd1eaca617c30c30c1a18761a6d24c2de0790f54f73e0802eb82ffc0124517ddafe8336f4ec6197219346deef4ce930e8ae20117e6ebe49a2582346" );
10340  iv_len = unhexify( iv_str, "1060d78543be384e7a9dc32a06bcd524" );
10341  add_len = unhexify( add_str, "528a6c34c3cb3aba402b856dd7c9677d0d88821686edd86287e7484b72248f949bbdfb640df27e3d1d6b6dc1293ea6c84be72c85e5ff497f5da74d796a21f2513385a177f29f2154b2362d5ac83c3897f368d06513333f2995b701fb3e5aabac559f6018fffd02cd6b65eba9cdc629067f15d1ae431d6a22811508cd913009f8" );
10342 
10343  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
10344  if( 0 == 0 )
10345  {
10346  fct_chk( 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 );
10347  hexify( dst_str, output, pt_len );
10348  hexify( tag_str, tag_output, tag_len );
10349 
10350  fct_chk( strcmp( (char *) dst_str, "7e8774cb73468ad9647f6946aea30e9468fac3850b5ff173c7b346891ecda32a78b58df8d835328615f36a12c18370f3abcf021ed723830b08627767272f769a2105e4786451db0512027ce0e3f770fbb0ee0e1850a5fc479df4ad5ceff4fa3b2b9124c330c2e79d770e6f5e89acdc8d0ca9c758980dfefaaac41aaf6d472f8a" ) == 0 );
10351  fct_chk( strcmp( (char *) tag_str, "6bc6632bb5b3296ede9e1c5fcd" ) == 0 );
10352  }
10353  }
10354  FCT_TEST_END();
10355 
10356 
10357  FCT_TEST_BGN(gcm_nist_validation_aes_19212810241024104_1)
10358  {
10359  unsigned char key_str[128];
10360  unsigned char src_str[128];
10361  unsigned char dst_str[257];
10362  unsigned char iv_str[128];
10363  unsigned char add_str[128];
10364  unsigned char tag_str[128];
10365  unsigned char output[128];
10366  unsigned char tag_output[16];
10367  gcm_context ctx;
10368  unsigned int key_len;
10369  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
10370 
10371  memset(key_str, 0x00, 128);
10372  memset(src_str, 0x00, 128);
10373  memset(dst_str, 0x00, 257);
10374  memset(iv_str, 0x00, 128);
10375  memset(add_str, 0x00, 128);
10376  memset(tag_str, 0x00, 128);
10377  memset(output, 0x00, 128);
10378  memset(tag_output, 0x00, 16);
10379 
10380  key_len = unhexify( key_str, "a326226b24222b3389d793b61b723e9ac7059495a1b597f5" );
10381  pt_len = unhexify( src_str, "1cc26e453a54c94c1cf902fe12307cce2fba4d5f0fc3bb63cdbac0dd0b5ba31d08dae2b4f054c86f3a3ee920d8b9f7ad8ae8b4eca090c8783cf35db5de3b95889a84f09ff3f70263c61681f00a454b0813813f0fe3ec38a6d30cc3c6a93c91a422743e7a72340cb012718b8a4a3b66a75f13e0165aa51ee4b00046cba12e966d" );
10382  iv_len = unhexify( iv_str, "327972d0c2ebc20ed5bdedc8a3a7aee5" );
10383  add_len = unhexify( add_str, "2edb1455bf4573a54ab921d31b7fc9e534bce0870eb6e973afccc3b1f93dd2c1a476dd88e705919caeb5d4f4a8516a718cff8858eb443ca7785579036cc7273570e7bf2489ce71a52ad623bf7223ce31232d8c9b18e52a2dd4519bb08d87301f3ae69dcc36c6dcb3b03d8fc39b6621f6b4471092e941ef090c9821a05df8575a" );
10384 
10385  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
10386  if( 0 == 0 )
10387  {
10388  fct_chk( 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 );
10389  hexify( dst_str, output, pt_len );
10390  hexify( tag_str, tag_output, tag_len );
10391 
10392  fct_chk( strcmp( (char *) dst_str, "5a219a0d997e879ffeb548d43de8e4f32a9ad196dc425c83f766134735ad2c9ff5d9665bd54ac3efdc50bb4a7a04ba59825f31a0f3e530aef45bba00cd6479efaa19c85edb4734f91fdad6686e50f9cc531fcabce9e8397381b4d691da4a27b7c487e93de3e3a9e769e831c69b07697e4bab470ebff628e710efa17e4c184e0f" ) == 0 );
10393  fct_chk( strcmp( (char *) tag_str, "2b9ac273c059865fab46f05ae3" ) == 0 );
10394  }
10395  }
10396  FCT_TEST_END();
10397 
10398 
10399  FCT_TEST_BGN(gcm_nist_validation_aes_19212810241024104_2)
10400  {
10401  unsigned char key_str[128];
10402  unsigned char src_str[128];
10403  unsigned char dst_str[257];
10404  unsigned char iv_str[128];
10405  unsigned char add_str[128];
10406  unsigned char tag_str[128];
10407  unsigned char output[128];
10408  unsigned char tag_output[16];
10409  gcm_context ctx;
10410  unsigned int key_len;
10411  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
10412 
10413  memset(key_str, 0x00, 128);
10414  memset(src_str, 0x00, 128);
10415  memset(dst_str, 0x00, 257);
10416  memset(iv_str, 0x00, 128);
10417  memset(add_str, 0x00, 128);
10418  memset(tag_str, 0x00, 128);
10419  memset(output, 0x00, 128);
10420  memset(tag_output, 0x00, 16);
10421 
10422  key_len = unhexify( key_str, "cf5f2d843042ab94fc4519d57d9229ea7e8172acf515fab7" );
10423  pt_len = unhexify( src_str, "0e20f5a2afffa4a5f9219320716c8a26e35a19c525dddd528e5f5f06f0da082f43272361f07cfdf57423f67ad3cfdda9cf1747c602a93747cc571adfabcc9d1ec1a8128908df45fe0ede0e14ff40169dd1ecbff7f4062ee7be0a1afb370c9d5103132c1fbee9262309cb05ea150fa862d6303af71677d2de9cafdb4ecdab8d5b" );
10424  iv_len = unhexify( iv_str, "95b06c3ce1a3de73cf51e781b941097a" );
10425  add_len = unhexify( add_str, "765c3fae74b6fa4b6ed4ca7ab9b829d76a7759c50874a38d2ecfddaca2365f7a143c9584e255608be829950393e5f94131caf4caa04aeeeb9d595e39ef3f9830246d6066995b2d40438f7eb0944bd452ab493b422e93a3e0dc3c0fc2a4b83711ac6693f07f035fd9d031242b6ea45beb259dc0203f497a77106392e4da93c285" );
10426 
10427  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
10428  if( 0 == 0 )
10429  {
10430  fct_chk( 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 );
10431  hexify( dst_str, output, pt_len );
10432  hexify( tag_str, tag_output, tag_len );
10433 
10434  fct_chk( strcmp( (char *) dst_str, "f43628a227dc852e0ad931e23548fedfd57020a26638ceb95dc5601827a0691c44209d14113da56e6a1e44c72845e42ebbc7ffbbc1cf18c1d33ca459bf94b1393a4725682f911f933e3fb21f2f8cd1ac48bc5afb6cb853a09e109dadcb740a98e5e7ec875cea90be16bcdfec5f7de176eeeb07a3768b84b091c661f65e2b905e" ) == 0 );
10435  fct_chk( strcmp( (char *) tag_str, "77964b5ce53209ee5307065d49" ) == 0 );
10436  }
10437  }
10438  FCT_TEST_END();
10439 
10440 
10441  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024102496_0)
10442  {
10443  unsigned char key_str[128];
10444  unsigned char src_str[128];
10445  unsigned char dst_str[257];
10446  unsigned char iv_str[128];
10447  unsigned char add_str[128];
10448  unsigned char tag_str[128];
10449  unsigned char output[128];
10450  unsigned char tag_output[16];
10451  gcm_context ctx;
10452  unsigned int key_len;
10453  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
10454 
10455  memset(key_str, 0x00, 128);
10456  memset(src_str, 0x00, 128);
10457  memset(dst_str, 0x00, 257);
10458  memset(iv_str, 0x00, 128);
10459  memset(add_str, 0x00, 128);
10460  memset(tag_str, 0x00, 128);
10461  memset(output, 0x00, 128);
10462  memset(tag_output, 0x00, 16);
10463 
10464  key_len = unhexify( key_str, "11cf18bbbc1d8778faf40391c30ca417739ff8e2a521926c" );
10465  pt_len = unhexify( src_str, "a2e11ac093ab648118759183cd52ca7d5728ca87fe2f31eca28cfb13325e3e6e95974456857866dda78359023e2c998d2c93c6dfe8f72c6d4ac39ca0585a53fc074bf1124c3ada92e78462a445da23e650bf52e26b782ff50312ee2beb7410e93c8435f7b88dfb0ed63d9a3823992d796bf3ab147c33593c5e6193ef32f7a620" );
10466  iv_len = unhexify( iv_str, "bdd9a2b70e4ee0cc501feca2a5209c3b" );
10467  add_len = unhexify( add_str, "051c68fe0cd81b52fede137d0105e69c74771b770ea9b573ad92ecae86f420953f459755597f68c29f6fca39a27239faa940ce6c949ccd44c9f12a0160cf74a575753310f52ec5c5bb9c4474b85266494e63b6810ddf7a6abd1cf8244cebbf69d3198c4a09e8dccbc9429f81791f5c02628e9477b988e2bd10f9bd5d6731ad01" );
10468 
10469  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
10470  if( 0 == 0 )
10471  {
10472  fct_chk( 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 );
10473  hexify( dst_str, output, pt_len );
10474  hexify( tag_str, tag_output, tag_len );
10475 
10476  fct_chk( strcmp( (char *) dst_str, "ca899a00654730d68219ca2ed9b23058a5f40150c237143b24245de1e440329e513690f00c0c52bbd0de8074fe5d7a50fe420470249227f967340efeeb64c424881c7f3a20c405d58ea81f2309c7f74ae572b30313e2d4b419fbf5f2cf90c6706a1ae1a800a883e8b00fbbc9dc28bf5aa4a329246bbe94df5c2d4524f57370d9" ) == 0 );
10477  fct_chk( strcmp( (char *) tag_str, "dd45503cc20493ec61f54f01" ) == 0 );
10478  }
10479  }
10480  FCT_TEST_END();
10481 
10482 
10483  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024102496_1)
10484  {
10485  unsigned char key_str[128];
10486  unsigned char src_str[128];
10487  unsigned char dst_str[257];
10488  unsigned char iv_str[128];
10489  unsigned char add_str[128];
10490  unsigned char tag_str[128];
10491  unsigned char output[128];
10492  unsigned char tag_output[16];
10493  gcm_context ctx;
10494  unsigned int key_len;
10495  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
10496 
10497  memset(key_str, 0x00, 128);
10498  memset(src_str, 0x00, 128);
10499  memset(dst_str, 0x00, 257);
10500  memset(iv_str, 0x00, 128);
10501  memset(add_str, 0x00, 128);
10502  memset(tag_str, 0x00, 128);
10503  memset(output, 0x00, 128);
10504  memset(tag_output, 0x00, 16);
10505 
10506  key_len = unhexify( key_str, "812481f8982b42b2fb86297c4b7c739652908dc498171c69" );
10507  pt_len = unhexify( src_str, "32b27127582ceac21f968f5418e24ec8b84617f4daab0eb007f02d45812e81d486dc50909d79221c438def535b8a55946f50297963139a6b21e139e810d19bc1566b374d080a387a646bb582dc738c44156eb6c8dad613586662418edcbb18fe688d271108318de71734cb571d442e4d9537b0fcb2f5c763b3fbcac010f5c4e1" );
10508  iv_len = unhexify( iv_str, "0dad658c73c9c88dd927a502d7b14e8b" );
10509  add_len = unhexify( add_str, "af44f747d77a83ef0944f3bac8e835d752bb55772a7fbd3c6af27ca0eaadd122c9af1e2a9f37c2ba42779ed8cde2199125378fc88c7d6d58edc01c65491c5efc6bee58e7e8bf72f1a69d3dba47b38a50077130cbd71accd3dd4f193a53c6f2d1df694476767f79f8b71fd42745ee5bd41e90a7dd50a1597445251b32de303169" );
10510 
10511  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
10512  if( 0 == 0 )
10513  {
10514  fct_chk( 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 );
10515  hexify( dst_str, output, pt_len );
10516  hexify( tag_str, tag_output, tag_len );
10517 
10518  fct_chk( strcmp( (char *) dst_str, "003ae4798f6a0b97990d41373623e528618f9299cebdb0d23e3799f62bb063e5530eef7fc40c06af16965ff6895f675ffb81c004d826cbd36b5eec9bd3d90d785af03b64d12d311b6f90bcd75a40497d0fad5e54f829a097b25f7a9604f6fad475c9239a0f8d5589b8a76c6f7bc852a3b820734b426f59ee845ec3f09dd7d3d1" ) == 0 );
10519  fct_chk( strcmp( (char *) tag_str, "b80bbc002cbebfb4ec5d48c0" ) == 0 );
10520  }
10521  }
10522  FCT_TEST_END();
10523 
10524 
10525  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024102496_2)
10526  {
10527  unsigned char key_str[128];
10528  unsigned char src_str[128];
10529  unsigned char dst_str[257];
10530  unsigned char iv_str[128];
10531  unsigned char add_str[128];
10532  unsigned char tag_str[128];
10533  unsigned char output[128];
10534  unsigned char tag_output[16];
10535  gcm_context ctx;
10536  unsigned int key_len;
10537  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
10538 
10539  memset(key_str, 0x00, 128);
10540  memset(src_str, 0x00, 128);
10541  memset(dst_str, 0x00, 257);
10542  memset(iv_str, 0x00, 128);
10543  memset(add_str, 0x00, 128);
10544  memset(tag_str, 0x00, 128);
10545  memset(output, 0x00, 128);
10546  memset(tag_output, 0x00, 16);
10547 
10548  key_len = unhexify( key_str, "a6657a7a9ddc6b4595df94d7c6bee9d13ad231cdc46ae5b4" );
10549  pt_len = unhexify( src_str, "36857eccb5b3c220265a40980e8949135e840ef270602940d3394f3f679aed55217c1de175f6b48a16f7b394ad7d288bc425762f971b752d1372b369fb1c3a64970c8d18ad6de2e1a9a561a749e3cf9a8524e239f3121e8643bebee471e55fb5d54a3453c51b1747defac98ead8b25854ed1cae7ac44fd28cf4b1ed8988875c1" );
10550  iv_len = unhexify( iv_str, "68621ea7c6aaf1e86a3b841df9c43aa8" );
10551  add_len = unhexify( add_str, "bc25c38d3a200fc17f620444e404f3b3999f51ed5b860c04186750f55cc53c6423c44d0eee02a83af27d16b9652a7cb3d34a5cb19694e5399a272dacd56c4b17872fd23fdca129a4299b9c87baf209dd1cd1f355088e3f938e6d5053a847b5913f0b9135d6f290e365508bed73c61160a11a2c23aaed7551b32882c79a807230" );
10552 
10553  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
10554  if( 0 == 0 )
10555  {
10556  fct_chk( 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 );
10557  hexify( dst_str, output, pt_len );
10558  hexify( tag_str, tag_output, tag_len );
10559 
10560  fct_chk( strcmp( (char *) dst_str, "de8bb8e69f9ff1322f0a6c30cba5a6fccd7d17a2173a86cff5478ac8ea4ad6f4e99ddd4149e6a9b24865cc8fd6394066e24a556f3f6d48c599592c56f06a946c6b3414e2fb47e14d1f128ef26b385912367f35082099c1f3d4ea86687f19f059c56dac21923e9a151567299416eb311f5bbf9a28968b080b0b200044668f0919" ) == 0 );
10561  fct_chk( strcmp( (char *) tag_str, "065f6c2b86891c719ea76984" ) == 0 );
10562  }
10563  }
10564  FCT_TEST_END();
10565 
10566 
10567  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024102464_0)
10568  {
10569  unsigned char key_str[128];
10570  unsigned char src_str[128];
10571  unsigned char dst_str[257];
10572  unsigned char iv_str[128];
10573  unsigned char add_str[128];
10574  unsigned char tag_str[128];
10575  unsigned char output[128];
10576  unsigned char tag_output[16];
10577  gcm_context ctx;
10578  unsigned int key_len;
10579  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
10580 
10581  memset(key_str, 0x00, 128);
10582  memset(src_str, 0x00, 128);
10583  memset(dst_str, 0x00, 257);
10584  memset(iv_str, 0x00, 128);
10585  memset(add_str, 0x00, 128);
10586  memset(tag_str, 0x00, 128);
10587  memset(output, 0x00, 128);
10588  memset(tag_output, 0x00, 16);
10589 
10590  key_len = unhexify( key_str, "20cf8c2c47cd583286157b45b575d4d69c793b4250274fe4" );
10591  pt_len = unhexify( src_str, "a64c2131c94fa827c3a510b23b20fb6d04579bc292d2ec33efc9eb31459115da143f73fba9bd8b03b67e591497d108f900a7279542b480bd3a13ea588a29efe66688b52c3fd58598c66d8595888e87b27734e6c5b2796cc60ab2aa3dd06a29c577de5bdbf0b6c69c7034f0181050f286b9300d214f549165a0b5b56ba8e40641" );
10592  iv_len = unhexify( iv_str, "ab58d2e18eb83c20df94cd6b569c65fe" );
10593  add_len = unhexify( add_str, "93ff6057eaaa9559d87e3276d4d900888cb1f56434ce2677ee1486a0aa8f4e8d02c47d06e6841f3fbe5bd72dd37fa9d81bbef807dca6961910844eb9611419936310d717e1843e7b278f48ae44a57c1f227a75fa8cbc7fd57c8cc3b101e036c8ef3043642c81f381561b61da7c9d79b6da9ec46f7cf093c29c1930b27c14f991" );
10594 
10595  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
10596  if( 0 == 0 )
10597  {
10598  fct_chk( 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 );
10599  hexify( dst_str, output, pt_len );
10600  hexify( tag_str, tag_output, tag_len );
10601 
10602  fct_chk( strcmp( (char *) dst_str, "a3f621261af17ec4756245414280017fd36133f2f9ff89eb8979d4417b8f93892bbf7b08bab785341bf0c7b5e3643f0e33f036633e5ebeae7a750ffdfcfbab690291731e92238ba6b45859b309629224fa7efc72298d3cf1ae3b6a9e94797552afc4e3a46205f9bab7eb64e4a41aee0e45289704a97221b7118d209e0b267a68" ) == 0 );
10603  fct_chk( strcmp( (char *) tag_str, "ae53564271d5de5d" ) == 0 );
10604  }
10605  }
10606  FCT_TEST_END();
10607 
10608 
10609  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024102464_1)
10610  {
10611  unsigned char key_str[128];
10612  unsigned char src_str[128];
10613  unsigned char dst_str[257];
10614  unsigned char iv_str[128];
10615  unsigned char add_str[128];
10616  unsigned char tag_str[128];
10617  unsigned char output[128];
10618  unsigned char tag_output[16];
10619  gcm_context ctx;
10620  unsigned int key_len;
10621  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
10622 
10623  memset(key_str, 0x00, 128);
10624  memset(src_str, 0x00, 128);
10625  memset(dst_str, 0x00, 257);
10626  memset(iv_str, 0x00, 128);
10627  memset(add_str, 0x00, 128);
10628  memset(tag_str, 0x00, 128);
10629  memset(output, 0x00, 128);
10630  memset(tag_output, 0x00, 16);
10631 
10632  key_len = unhexify( key_str, "8a311bf356cb1d1f58eab411b45b8d78b88052f3c8ab821d" );
10633  pt_len = unhexify( src_str, "3e915e92f186fde05ad55a2597ceab81495abbaa0be107dbf6a375525d1157a322b1f65460dce0c3aa2bc08fa89f777dac4d2fc3e5f7f20a0d5e33373c7f1c3551369737124c702928726bd9db96a33bacb56f1d645fa02ca1d88629c547c0eaf9585ee23b530ea971bf439c67e3b752af882668ebe0c739b26c837887b9d2be" );
10634  iv_len = unhexify( iv_str, "0569d05f3825d16aaa89e86812f80628" );
10635  add_len = unhexify( add_str, "28494a12026eb89b46b6139573dcda0836a617e00e25e2daa92f9372d86c3c162cfec34d634ea48294c784825615f41e06e555cf916983931e3d6a7ccbb4448670139616e3bbf7109387a852703b0b9d12c1fbd966f72bf49a7e1461ca714872ccdc59dc775c24a85e9864461123710fd8dcc26815894ee8cf2ca48a4ec73b3b" );
10636 
10637  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
10638  if( 0 == 0 )
10639  {
10640  fct_chk( 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 );
10641  hexify( dst_str, output, pt_len );
10642  hexify( tag_str, tag_output, tag_len );
10643 
10644  fct_chk( strcmp( (char *) dst_str, "9ba776653e8d9d240d9c1ec355027a18731c500928925e7c50ef83c6f36957073a8386ecbfaf430634cd557b1da1bf122f37456fea3e9b58a6e99413d9d16a2f1b40dff843fe16a2fa0219ad5dd8ae4611de53d7aabbef7a87ce402e62276addc7f44e09ae9e62c5cce4ddce5695db987084385ae9a98884ec97e67b549ad440" ) == 0 );
10645  fct_chk( strcmp( (char *) tag_str, "c669ca821b6ef584" ) == 0 );
10646  }
10647  }
10648  FCT_TEST_END();
10649 
10650 
10651  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024102464_2)
10652  {
10653  unsigned char key_str[128];
10654  unsigned char src_str[128];
10655  unsigned char dst_str[257];
10656  unsigned char iv_str[128];
10657  unsigned char add_str[128];
10658  unsigned char tag_str[128];
10659  unsigned char output[128];
10660  unsigned char tag_output[16];
10661  gcm_context ctx;
10662  unsigned int key_len;
10663  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
10664 
10665  memset(key_str, 0x00, 128);
10666  memset(src_str, 0x00, 128);
10667  memset(dst_str, 0x00, 257);
10668  memset(iv_str, 0x00, 128);
10669  memset(add_str, 0x00, 128);
10670  memset(tag_str, 0x00, 128);
10671  memset(output, 0x00, 128);
10672  memset(tag_output, 0x00, 16);
10673 
10674  key_len = unhexify( key_str, "82fc47638cfb361ecf7924c03925d6006cb99459ef5691e8" );
10675  pt_len = unhexify( src_str, "d14a550d419b8e03762429a7abda3b17ad7a1305e5fc639e71538285cd70d78fa30e0c048e2c32d2a7fd7f82c874d63ae922db5a77111b46caefbfe4feef4df19786e5fec6a4df84f76df412b1f06bea149f1996b41b117d00d422bba5566d3af5289ca9377f325ca1e72f7d6a32df6607bde194cf4ac52c28e8aa1e8f1c9a67" );
10676  iv_len = unhexify( iv_str, "2a8e1cadd2f264f2ad7be9e7bdfa24a2" );
10677  add_len = unhexify( add_str, "8088358d7c3ca8951d7e8cd6cae15844edabccc8d0fcf8f169a48cf434d4814f1d7d9ae410e5581d414f952f52b852eb10fcf0f2a67bea826ea2e28331f0597152e624e148462d5952f10fa363666d57ebfe036695e1e68f79161b991e20c8ae6095232e63fde073c79603135849c62f8d98a1d80608fc081171114db41883f6" );
10678 
10679  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
10680  if( 0 == 0 )
10681  {
10682  fct_chk( 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 );
10683  hexify( dst_str, output, pt_len );
10684  hexify( tag_str, tag_output, tag_len );
10685 
10686  fct_chk( strcmp( (char *) dst_str, "e54cc95e845f4d1b28885e9b90d1d9d3cc51fd9d8fec9bce57de8781a28b4e5b7ab446074e84471d7a9a23748b689c354e402be77f9890a9c52a2eb9022a6a415e01285db1c6eb66d5e15f4216a4f3f45782677b6ccbf20ac7b35bd153f52a599712d09712ef1454ccf72ee48cca967f4917f1aeaeaa6eaaf8493ec7ff2dc1d4" ) == 0 );
10687  fct_chk( strcmp( (char *) tag_str, "093343e49b70c938" ) == 0 );
10688  }
10689  }
10690  FCT_TEST_END();
10691 
10692 
10693  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024102432_0)
10694  {
10695  unsigned char key_str[128];
10696  unsigned char src_str[128];
10697  unsigned char dst_str[257];
10698  unsigned char iv_str[128];
10699  unsigned char add_str[128];
10700  unsigned char tag_str[128];
10701  unsigned char output[128];
10702  unsigned char tag_output[16];
10703  gcm_context ctx;
10704  unsigned int key_len;
10705  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
10706 
10707  memset(key_str, 0x00, 128);
10708  memset(src_str, 0x00, 128);
10709  memset(dst_str, 0x00, 257);
10710  memset(iv_str, 0x00, 128);
10711  memset(add_str, 0x00, 128);
10712  memset(tag_str, 0x00, 128);
10713  memset(output, 0x00, 128);
10714  memset(tag_output, 0x00, 16);
10715 
10716  key_len = unhexify( key_str, "d3180703e1ec93b20d1ac4d64e85d5461d75f783bcd2f4fa" );
10717  pt_len = unhexify( src_str, "b7b350db6fc0796e9fd0cb239f561bf7e27b2aa26b8e3e76d8b737caa1c1c5ad624a32f5709e4b751f8c21172d4d0f4ba38ca4d1d0e2570c084cabdd0e8880b35140c84f775c3c301a9b260825e1fd75f9835777d6c0e23d359af1a5f7caef934b91bee521531582b639be2cca87c2991f5525f4a2f64c30a1453013d73c16cf" );
10718  iv_len = unhexify( iv_str, "916d72d515d3247ba48828d4113bda3b" );
10719  add_len = unhexify( add_str, "1002513035cb1d7e8b2710ff8c93cec55e2e2c2b56000d4c1182b5286736acd2d6f2fc9b82f71156dba6f77463805627e4bc38c96e091ecd945df7e996e7fc3bbfdae3d85ef1337fbce960fd1d60d06962a1669e9e8d20be151f6323cb38ef68ab5e838f02a0f379567f518f15d81b192cb25a42356807c1b9c02bef8309ff44" );
10720 
10721  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
10722  if( 0 == 0 )
10723  {
10724  fct_chk( 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 );
10725  hexify( dst_str, output, pt_len );
10726  hexify( tag_str, tag_output, tag_len );
10727 
10728  fct_chk( strcmp( (char *) dst_str, "d590f2afcd64c574ece12c675f509efdffc01e1404cbafbc923c4b44390eff66dd839e6d800df67bc06f49f76911df3cec36a3a1521762d6d4a8ee602ebefde0178863443f918668fcde8a531f3b5ee0e4c379ecf3e75e7c59f753e41f4e39811bd3e7dd3d6bbaa1e81fdbf8bd976384a6c4505f7e4270321c7329bba7f15506" ) == 0 );
10729  fct_chk( strcmp( (char *) tag_str, "22e50ed0" ) == 0 );
10730  }
10731  }
10732  FCT_TEST_END();
10733 
10734 
10735  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024102432_1)
10736  {
10737  unsigned char key_str[128];
10738  unsigned char src_str[128];
10739  unsigned char dst_str[257];
10740  unsigned char iv_str[128];
10741  unsigned char add_str[128];
10742  unsigned char tag_str[128];
10743  unsigned char output[128];
10744  unsigned char tag_output[16];
10745  gcm_context ctx;
10746  unsigned int key_len;
10747  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
10748 
10749  memset(key_str, 0x00, 128);
10750  memset(src_str, 0x00, 128);
10751  memset(dst_str, 0x00, 257);
10752  memset(iv_str, 0x00, 128);
10753  memset(add_str, 0x00, 128);
10754  memset(tag_str, 0x00, 128);
10755  memset(output, 0x00, 128);
10756  memset(tag_output, 0x00, 16);
10757 
10758  key_len = unhexify( key_str, "02bc0a8ab5468123009b2c69aaffd0a20a1fb082b55a7ecb" );
10759  pt_len = unhexify( src_str, "8bf32af1632a7903f00e801ee6e5c690147c021be6886cf2462b2172786ab296e0feb96648e4a602ae6dc45e2aa60e6610356cde26b1dde3aa114c5449216a467fcde18332a6d482d24a1ee952379340d036a48b63efa092db4c30a95f402d57b9c837183e900b47805f170cfe9e69baea2b939799e983f7470bb1297f937bbf" );
10760  iv_len = unhexify( iv_str, "bcfc15308e891f32506a50c4ed41bff6" );
10761  add_len = unhexify( add_str, "01bff5e606a536e951213b23672db9074fa8bbf947e815d32cbfe30adc1e736517f86139840a4aa0a671b4e9bbd6a59d292db34cc87742c0dfd2d658ef157734c5fdebb3e5772d4990ad1b2675c23ddf1472e892dafe7bf140d614c50cf937923491662299ab957606f4ca5eed2facdc5c657784bac871fab04d6cd3ccb18332" );
10762 
10763  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
10764  if( 0 == 0 )
10765  {
10766  fct_chk( 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 );
10767  hexify( dst_str, output, pt_len );
10768  hexify( tag_str, tag_output, tag_len );
10769 
10770  fct_chk( strcmp( (char *) dst_str, "b8dff03141832970c925e7ff0038394a0df7f35add3046cc56f73e3eff59e18932aac697456107b6da7da3249049c3be5c098dd730cd4bf68cdf798c3a932b2c51f18d29e4386cbf1b7998a81b603372337784307b0beb59235eba4d3e4810899f6d71a994ba9742aea1875878ccef1bf674ee655a0720bd37e44b33cafe5742" ) == 0 );
10771  fct_chk( strcmp( (char *) tag_str, "bd0be868" ) == 0 );
10772  }
10773  }
10774  FCT_TEST_END();
10775 
10776 
10777  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024102432_2)
10778  {
10779  unsigned char key_str[128];
10780  unsigned char src_str[128];
10781  unsigned char dst_str[257];
10782  unsigned char iv_str[128];
10783  unsigned char add_str[128];
10784  unsigned char tag_str[128];
10785  unsigned char output[128];
10786  unsigned char tag_output[16];
10787  gcm_context ctx;
10788  unsigned int key_len;
10789  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
10790 
10791  memset(key_str, 0x00, 128);
10792  memset(src_str, 0x00, 128);
10793  memset(dst_str, 0x00, 257);
10794  memset(iv_str, 0x00, 128);
10795  memset(add_str, 0x00, 128);
10796  memset(tag_str, 0x00, 128);
10797  memset(output, 0x00, 128);
10798  memset(tag_output, 0x00, 16);
10799 
10800  key_len = unhexify( key_str, "7c07d5ccaadb9e3ba5b5ddf380a7a2a175522b98e31e1d34" );
10801  pt_len = unhexify( src_str, "04d3e6bcd5ebf696fe84a702ffd5f76dcbe9679c909b36d41ce6362f229304aeb19896c6376cb3c25081f709af57d36f39f421ecdb70bed9f829558bec6e78823275fc11f9a2d5f773d27136d903ff08e5926338dfdcbc182825794e5f739efc1f0ecda8e53751edbe0d08963471fb5099f2ff31f76b479677bd6d186a409525" );
10802  iv_len = unhexify( iv_str, "e4db5c6403a03daa703516763052bce0" );
10803  add_len = unhexify( add_str, "b747d97f263d0ff6119df1b5332640d2e4568813adc12ed76175fdfffafd087456748abb267195688d2db41caef301117979dfd2db9714b352398594005bebb449ea20415fcfb2671253f69bf6467ce7f5bce350a834c4586eb03e766c1930e7e6ccf01283ea31b8c73d7967cde0f2a53cc46b1b50c48649044d6f753f1d54b5" );
10804 
10805  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
10806  if( 0 == 0 )
10807  {
10808  fct_chk( 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 );
10809  hexify( dst_str, output, pt_len );
10810  hexify( tag_str, tag_output, tag_len );
10811 
10812  fct_chk( strcmp( (char *) dst_str, "f5faf7bdd99c62ec87f93da2ca3ce31e694df0a0fd04d61914f9a7a4235de20e0a406e297ba1099fff8c14e8fd37a9d6cbe2c5c572c988cb1ff87ffe7825e1947ea3da73b8b3633721fb4e08deb3f8fcae2407d73bd4c07f32b4f9ad0b1364003b11f84037a28239e96c3996874ba8e4ec7270bf0441d648f52f3730d30e3536" ) == 0 );
10813  fct_chk( strcmp( (char *) tag_str, "e0820c4d" ) == 0 );
10814  }
10815  }
10816  FCT_TEST_END();
10817 
10818 
10819  FCT_TEST_BGN(gcm_nist_validation_aes_19212800128_0)
10820  {
10821  unsigned char key_str[128];
10822  unsigned char src_str[128];
10823  unsigned char dst_str[257];
10824  unsigned char iv_str[128];
10825  unsigned char add_str[128];
10826  unsigned char tag_str[128];
10827  unsigned char output[128];
10828  unsigned char tag_output[16];
10829  gcm_context ctx;
10830  unsigned int key_len;
10831  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
10832 
10833  memset(key_str, 0x00, 128);
10834  memset(src_str, 0x00, 128);
10835  memset(dst_str, 0x00, 257);
10836  memset(iv_str, 0x00, 128);
10837  memset(add_str, 0x00, 128);
10838  memset(tag_str, 0x00, 128);
10839  memset(output, 0x00, 128);
10840  memset(tag_output, 0x00, 16);
10841 
10842  key_len = unhexify( key_str, "dd01d48789ef7f07f80a7385e4d1b1734903bc6ec768c9f2" );
10843  pt_len = unhexify( src_str, "" );
10844  iv_len = unhexify( iv_str, "944ed7743be9ce370cba7b7c9b7dece2" );
10845  add_len = unhexify( add_str, "" );
10846 
10847  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
10848  if( 0 == 0 )
10849  {
10850  fct_chk( 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 );
10851  hexify( dst_str, output, pt_len );
10852  hexify( tag_str, tag_output, tag_len );
10853 
10854  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
10855  fct_chk( strcmp( (char *) tag_str, "dfa0ab389c3a780f598af80200c84da8" ) == 0 );
10856  }
10857  }
10858  FCT_TEST_END();
10859 
10860 
10861  FCT_TEST_BGN(gcm_nist_validation_aes_19212800128_1)
10862  {
10863  unsigned char key_str[128];
10864  unsigned char src_str[128];
10865  unsigned char dst_str[257];
10866  unsigned char iv_str[128];
10867  unsigned char add_str[128];
10868  unsigned char tag_str[128];
10869  unsigned char output[128];
10870  unsigned char tag_output[16];
10871  gcm_context ctx;
10872  unsigned int key_len;
10873  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
10874 
10875  memset(key_str, 0x00, 128);
10876  memset(src_str, 0x00, 128);
10877  memset(dst_str, 0x00, 257);
10878  memset(iv_str, 0x00, 128);
10879  memset(add_str, 0x00, 128);
10880  memset(tag_str, 0x00, 128);
10881  memset(output, 0x00, 128);
10882  memset(tag_output, 0x00, 16);
10883 
10884  key_len = unhexify( key_str, "0383849ed0db3e52743aa82fe8cd9173b457755be8bbd46c" );
10885  pt_len = unhexify( src_str, "" );
10886  iv_len = unhexify( iv_str, "c6b8518346ec52c001697b7bd38dc795" );
10887  add_len = unhexify( add_str, "" );
10888 
10889  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
10890  if( 0 == 0 )
10891  {
10892  fct_chk( 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 );
10893  hexify( dst_str, output, pt_len );
10894  hexify( tag_str, tag_output, tag_len );
10895 
10896  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
10897  fct_chk( strcmp( (char *) tag_str, "48a1992549b627c8621e8fbaadacb16c" ) == 0 );
10898  }
10899  }
10900  FCT_TEST_END();
10901 
10902 
10903  FCT_TEST_BGN(gcm_nist_validation_aes_19212800128_2)
10904  {
10905  unsigned char key_str[128];
10906  unsigned char src_str[128];
10907  unsigned char dst_str[257];
10908  unsigned char iv_str[128];
10909  unsigned char add_str[128];
10910  unsigned char tag_str[128];
10911  unsigned char output[128];
10912  unsigned char tag_output[16];
10913  gcm_context ctx;
10914  unsigned int key_len;
10915  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
10916 
10917  memset(key_str, 0x00, 128);
10918  memset(src_str, 0x00, 128);
10919  memset(dst_str, 0x00, 257);
10920  memset(iv_str, 0x00, 128);
10921  memset(add_str, 0x00, 128);
10922  memset(tag_str, 0x00, 128);
10923  memset(output, 0x00, 128);
10924  memset(tag_output, 0x00, 16);
10925 
10926  key_len = unhexify( key_str, "936388053ee0116b3f783ae34f000d5fe2c5d712842d46f9" );
10927  pt_len = unhexify( src_str, "" );
10928  iv_len = unhexify( iv_str, "c5426b20c014e472c7b85be2ed0f64c8" );
10929  add_len = unhexify( add_str, "" );
10930 
10931  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
10932  if( 0 == 0 )
10933  {
10934  fct_chk( 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 );
10935  hexify( dst_str, output, pt_len );
10936  hexify( tag_str, tag_output, tag_len );
10937 
10938  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
10939  fct_chk( strcmp( (char *) tag_str, "4cf0f6a45f3544e3d391375c8fe176b1" ) == 0 );
10940  }
10941  }
10942  FCT_TEST_END();
10943 
10944 
10945  FCT_TEST_BGN(gcm_nist_validation_aes_19212800120_0)
10946  {
10947  unsigned char key_str[128];
10948  unsigned char src_str[128];
10949  unsigned char dst_str[257];
10950  unsigned char iv_str[128];
10951  unsigned char add_str[128];
10952  unsigned char tag_str[128];
10953  unsigned char output[128];
10954  unsigned char tag_output[16];
10955  gcm_context ctx;
10956  unsigned int key_len;
10957  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
10958 
10959  memset(key_str, 0x00, 128);
10960  memset(src_str, 0x00, 128);
10961  memset(dst_str, 0x00, 257);
10962  memset(iv_str, 0x00, 128);
10963  memset(add_str, 0x00, 128);
10964  memset(tag_str, 0x00, 128);
10965  memset(output, 0x00, 128);
10966  memset(tag_output, 0x00, 16);
10967 
10968  key_len = unhexify( key_str, "40dfcb3151a8dab1cb79a6a1e6a24fb55024d0e256bd4b07" );
10969  pt_len = unhexify( src_str, "" );
10970  iv_len = unhexify( iv_str, "b8495cc54653e7ad74206153ea64c3cb" );
10971  add_len = unhexify( add_str, "" );
10972 
10973  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
10974  if( 0 == 0 )
10975  {
10976  fct_chk( 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 );
10977  hexify( dst_str, output, pt_len );
10978  hexify( tag_str, tag_output, tag_len );
10979 
10980  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
10981  fct_chk( strcmp( (char *) tag_str, "1d3786412e0ceb383de3898ef2cffe" ) == 0 );
10982  }
10983  }
10984  FCT_TEST_END();
10985 
10986 
10987  FCT_TEST_BGN(gcm_nist_validation_aes_19212800120_1)
10988  {
10989  unsigned char key_str[128];
10990  unsigned char src_str[128];
10991  unsigned char dst_str[257];
10992  unsigned char iv_str[128];
10993  unsigned char add_str[128];
10994  unsigned char tag_str[128];
10995  unsigned char output[128];
10996  unsigned char tag_output[16];
10997  gcm_context ctx;
10998  unsigned int key_len;
10999  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
11000 
11001  memset(key_str, 0x00, 128);
11002  memset(src_str, 0x00, 128);
11003  memset(dst_str, 0x00, 257);
11004  memset(iv_str, 0x00, 128);
11005  memset(add_str, 0x00, 128);
11006  memset(tag_str, 0x00, 128);
11007  memset(output, 0x00, 128);
11008  memset(tag_output, 0x00, 16);
11009 
11010  key_len = unhexify( key_str, "83ca41d8b33c6134a14d8b30b0c36d5b799574dd925f3b8b" );
11011  pt_len = unhexify( src_str, "" );
11012  iv_len = unhexify( iv_str, "fb9aca5b4932035c65b571d170fdf524" );
11013  add_len = unhexify( add_str, "" );
11014 
11015  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
11016  if( 0 == 0 )
11017  {
11018  fct_chk( 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 );
11019  hexify( dst_str, output, pt_len );
11020  hexify( tag_str, tag_output, tag_len );
11021 
11022  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
11023  fct_chk( strcmp( (char *) tag_str, "9787f7d68d2648963cb49fd7459121" ) == 0 );
11024  }
11025  }
11026  FCT_TEST_END();
11027 
11028 
11029  FCT_TEST_BGN(gcm_nist_validation_aes_19212800120_2)
11030  {
11031  unsigned char key_str[128];
11032  unsigned char src_str[128];
11033  unsigned char dst_str[257];
11034  unsigned char iv_str[128];
11035  unsigned char add_str[128];
11036  unsigned char tag_str[128];
11037  unsigned char output[128];
11038  unsigned char tag_output[16];
11039  gcm_context ctx;
11040  unsigned int key_len;
11041  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
11042 
11043  memset(key_str, 0x00, 128);
11044  memset(src_str, 0x00, 128);
11045  memset(dst_str, 0x00, 257);
11046  memset(iv_str, 0x00, 128);
11047  memset(add_str, 0x00, 128);
11048  memset(tag_str, 0x00, 128);
11049  memset(output, 0x00, 128);
11050  memset(tag_output, 0x00, 16);
11051 
11052  key_len = unhexify( key_str, "886e646688d573c2dcc8ca229a11b394b3400408dd801503" );
11053  pt_len = unhexify( src_str, "" );
11054  iv_len = unhexify( iv_str, "c0744685722cb87717c76fd09a721dac" );
11055  add_len = unhexify( add_str, "" );
11056 
11057  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
11058  if( 0 == 0 )
11059  {
11060  fct_chk( 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 );
11061  hexify( dst_str, output, pt_len );
11062  hexify( tag_str, tag_output, tag_len );
11063 
11064  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
11065  fct_chk( strcmp( (char *) tag_str, "794fe4df0084c21ffeaf959e5b0382" ) == 0 );
11066  }
11067  }
11068  FCT_TEST_END();
11069 
11070 
11071  FCT_TEST_BGN(gcm_nist_validation_aes_19212800112_0)
11072  {
11073  unsigned char key_str[128];
11074  unsigned char src_str[128];
11075  unsigned char dst_str[257];
11076  unsigned char iv_str[128];
11077  unsigned char add_str[128];
11078  unsigned char tag_str[128];
11079  unsigned char output[128];
11080  unsigned char tag_output[16];
11081  gcm_context ctx;
11082  unsigned int key_len;
11083  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
11084 
11085  memset(key_str, 0x00, 128);
11086  memset(src_str, 0x00, 128);
11087  memset(dst_str, 0x00, 257);
11088  memset(iv_str, 0x00, 128);
11089  memset(add_str, 0x00, 128);
11090  memset(tag_str, 0x00, 128);
11091  memset(output, 0x00, 128);
11092  memset(tag_output, 0x00, 16);
11093 
11094  key_len = unhexify( key_str, "0b845dc2c4e9e5a94bd3e8969300b16b45d3ad5eadb2e80a" );
11095  pt_len = unhexify( src_str, "" );
11096  iv_len = unhexify( iv_str, "0900b3fa3cc9833d702655d285f904ed" );
11097  add_len = unhexify( add_str, "" );
11098 
11099  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
11100  if( 0 == 0 )
11101  {
11102  fct_chk( 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 );
11103  hexify( dst_str, output, pt_len );
11104  hexify( tag_str, tag_output, tag_len );
11105 
11106  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
11107  fct_chk( strcmp( (char *) tag_str, "dc670518e150d326921bd5f43e80" ) == 0 );
11108  }
11109  }
11110  FCT_TEST_END();
11111 
11112 
11113  FCT_TEST_BGN(gcm_nist_validation_aes_19212800112_1)
11114  {
11115  unsigned char key_str[128];
11116  unsigned char src_str[128];
11117  unsigned char dst_str[257];
11118  unsigned char iv_str[128];
11119  unsigned char add_str[128];
11120  unsigned char tag_str[128];
11121  unsigned char output[128];
11122  unsigned char tag_output[16];
11123  gcm_context ctx;
11124  unsigned int key_len;
11125  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
11126 
11127  memset(key_str, 0x00, 128);
11128  memset(src_str, 0x00, 128);
11129  memset(dst_str, 0x00, 257);
11130  memset(iv_str, 0x00, 128);
11131  memset(add_str, 0x00, 128);
11132  memset(tag_str, 0x00, 128);
11133  memset(output, 0x00, 128);
11134  memset(tag_output, 0x00, 16);
11135 
11136  key_len = unhexify( key_str, "ac9fac2e32ab44a0774949d53a62c1cda04b132a3b07a211" );
11137  pt_len = unhexify( src_str, "" );
11138  iv_len = unhexify( iv_str, "8cf6a81bfa21633ad95ffc690c737511" );
11139  add_len = unhexify( add_str, "" );
11140 
11141  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
11142  if( 0 == 0 )
11143  {
11144  fct_chk( 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 );
11145  hexify( dst_str, output, pt_len );
11146  hexify( tag_str, tag_output, tag_len );
11147 
11148  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
11149  fct_chk( strcmp( (char *) tag_str, "4cd7a6e4f3ec3d41d086e6abf14c" ) == 0 );
11150  }
11151  }
11152  FCT_TEST_END();
11153 
11154 
11155  FCT_TEST_BGN(gcm_nist_validation_aes_19212800112_2)
11156  {
11157  unsigned char key_str[128];
11158  unsigned char src_str[128];
11159  unsigned char dst_str[257];
11160  unsigned char iv_str[128];
11161  unsigned char add_str[128];
11162  unsigned char tag_str[128];
11163  unsigned char output[128];
11164  unsigned char tag_output[16];
11165  gcm_context ctx;
11166  unsigned int key_len;
11167  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
11168 
11169  memset(key_str, 0x00, 128);
11170  memset(src_str, 0x00, 128);
11171  memset(dst_str, 0x00, 257);
11172  memset(iv_str, 0x00, 128);
11173  memset(add_str, 0x00, 128);
11174  memset(tag_str, 0x00, 128);
11175  memset(output, 0x00, 128);
11176  memset(tag_output, 0x00, 16);
11177 
11178  key_len = unhexify( key_str, "9f9721ef784980d03140490f760313cc8a56424affb01672" );
11179  pt_len = unhexify( src_str, "" );
11180  iv_len = unhexify( iv_str, "c104bd8482e3fe7359c85e0e94fd4070" );
11181  add_len = unhexify( add_str, "" );
11182 
11183  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
11184  if( 0 == 0 )
11185  {
11186  fct_chk( 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 );
11187  hexify( dst_str, output, pt_len );
11188  hexify( tag_str, tag_output, tag_len );
11189 
11190  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
11191  fct_chk( strcmp( (char *) tag_str, "3f682fc71989804ba74bdad04a97" ) == 0 );
11192  }
11193  }
11194  FCT_TEST_END();
11195 
11196 
11197  FCT_TEST_BGN(gcm_nist_validation_aes_19212800104_0)
11198  {
11199  unsigned char key_str[128];
11200  unsigned char src_str[128];
11201  unsigned char dst_str[257];
11202  unsigned char iv_str[128];
11203  unsigned char add_str[128];
11204  unsigned char tag_str[128];
11205  unsigned char output[128];
11206  unsigned char tag_output[16];
11207  gcm_context ctx;
11208  unsigned int key_len;
11209  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
11210 
11211  memset(key_str, 0x00, 128);
11212  memset(src_str, 0x00, 128);
11213  memset(dst_str, 0x00, 257);
11214  memset(iv_str, 0x00, 128);
11215  memset(add_str, 0x00, 128);
11216  memset(tag_str, 0x00, 128);
11217  memset(output, 0x00, 128);
11218  memset(tag_output, 0x00, 16);
11219 
11220  key_len = unhexify( key_str, "f7c935f56970678ab89f6d97315a33efae76148263e95f1e" );
11221  pt_len = unhexify( src_str, "" );
11222  iv_len = unhexify( iv_str, "1a91965c5458f4a1fde309cd42a3f277" );
11223  add_len = unhexify( add_str, "" );
11224 
11225  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
11226  if( 0 == 0 )
11227  {
11228  fct_chk( 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 );
11229  hexify( dst_str, output, pt_len );
11230  hexify( tag_str, tag_output, tag_len );
11231 
11232  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
11233  fct_chk( strcmp( (char *) tag_str, "ce266c6f0447623a3ef1f6f57c" ) == 0 );
11234  }
11235  }
11236  FCT_TEST_END();
11237 
11238 
11239  FCT_TEST_BGN(gcm_nist_validation_aes_19212800104_1)
11240  {
11241  unsigned char key_str[128];
11242  unsigned char src_str[128];
11243  unsigned char dst_str[257];
11244  unsigned char iv_str[128];
11245  unsigned char add_str[128];
11246  unsigned char tag_str[128];
11247  unsigned char output[128];
11248  unsigned char tag_output[16];
11249  gcm_context ctx;
11250  unsigned int key_len;
11251  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
11252 
11253  memset(key_str, 0x00, 128);
11254  memset(src_str, 0x00, 128);
11255  memset(dst_str, 0x00, 257);
11256  memset(iv_str, 0x00, 128);
11257  memset(add_str, 0x00, 128);
11258  memset(tag_str, 0x00, 128);
11259  memset(output, 0x00, 128);
11260  memset(tag_output, 0x00, 16);
11261 
11262  key_len = unhexify( key_str, "30ecea6cac70a9de4f4f7f441d6b9b5608cca39d07c0ded5" );
11263  pt_len = unhexify( src_str, "" );
11264  iv_len = unhexify( iv_str, "361e5cd21c670de39b5f0b2b89437f99" );
11265  add_len = unhexify( add_str, "" );
11266 
11267  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
11268  if( 0 == 0 )
11269  {
11270  fct_chk( 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 );
11271  hexify( dst_str, output, pt_len );
11272  hexify( tag_str, tag_output, tag_len );
11273 
11274  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
11275  fct_chk( strcmp( (char *) tag_str, "48a9621522a98bc6c0acf03429" ) == 0 );
11276  }
11277  }
11278  FCT_TEST_END();
11279 
11280 
11281  FCT_TEST_BGN(gcm_nist_validation_aes_19212800104_2)
11282  {
11283  unsigned char key_str[128];
11284  unsigned char src_str[128];
11285  unsigned char dst_str[257];
11286  unsigned char iv_str[128];
11287  unsigned char add_str[128];
11288  unsigned char tag_str[128];
11289  unsigned char output[128];
11290  unsigned char tag_output[16];
11291  gcm_context ctx;
11292  unsigned int key_len;
11293  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
11294 
11295  memset(key_str, 0x00, 128);
11296  memset(src_str, 0x00, 128);
11297  memset(dst_str, 0x00, 257);
11298  memset(iv_str, 0x00, 128);
11299  memset(add_str, 0x00, 128);
11300  memset(tag_str, 0x00, 128);
11301  memset(output, 0x00, 128);
11302  memset(tag_output, 0x00, 16);
11303 
11304  key_len = unhexify( key_str, "4fb80c4fd026c3f68ab8fcb8e28e144fdb3ba00d70295ebf" );
11305  pt_len = unhexify( src_str, "" );
11306  iv_len = unhexify( iv_str, "ee552fb94a527d18d285d6c195ca7b2f" );
11307  add_len = unhexify( add_str, "" );
11308 
11309  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
11310  if( 0 == 0 )
11311  {
11312  fct_chk( 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 );
11313  hexify( dst_str, output, pt_len );
11314  hexify( tag_str, tag_output, tag_len );
11315 
11316  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
11317  fct_chk( strcmp( (char *) tag_str, "5ec97630ce593e9d560136774c" ) == 0 );
11318  }
11319  }
11320  FCT_TEST_END();
11321 
11322 
11323  FCT_TEST_BGN(gcm_nist_validation_aes_1921280096_0)
11324  {
11325  unsigned char key_str[128];
11326  unsigned char src_str[128];
11327  unsigned char dst_str[257];
11328  unsigned char iv_str[128];
11329  unsigned char add_str[128];
11330  unsigned char tag_str[128];
11331  unsigned char output[128];
11332  unsigned char tag_output[16];
11333  gcm_context ctx;
11334  unsigned int key_len;
11335  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
11336 
11337  memset(key_str, 0x00, 128);
11338  memset(src_str, 0x00, 128);
11339  memset(dst_str, 0x00, 257);
11340  memset(iv_str, 0x00, 128);
11341  memset(add_str, 0x00, 128);
11342  memset(tag_str, 0x00, 128);
11343  memset(output, 0x00, 128);
11344  memset(tag_output, 0x00, 16);
11345 
11346  key_len = unhexify( key_str, "c0261023ee9f682789ce9ae970fb7601f07551259ef91945" );
11347  pt_len = unhexify( src_str, "" );
11348  iv_len = unhexify( iv_str, "bffe4af76db75bc4a3d42b57c73c51b6" );
11349  add_len = unhexify( add_str, "" );
11350 
11351  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
11352  if( 0 == 0 )
11353  {
11354  fct_chk( 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 );
11355  hexify( dst_str, output, pt_len );
11356  hexify( tag_str, tag_output, tag_len );
11357 
11358  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
11359  fct_chk( strcmp( (char *) tag_str, "bf827b4526da77ab2e21908c" ) == 0 );
11360  }
11361  }
11362  FCT_TEST_END();
11363 
11364 
11365  FCT_TEST_BGN(gcm_nist_validation_aes_1921280096_1)
11366  {
11367  unsigned char key_str[128];
11368  unsigned char src_str[128];
11369  unsigned char dst_str[257];
11370  unsigned char iv_str[128];
11371  unsigned char add_str[128];
11372  unsigned char tag_str[128];
11373  unsigned char output[128];
11374  unsigned char tag_output[16];
11375  gcm_context ctx;
11376  unsigned int key_len;
11377  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
11378 
11379  memset(key_str, 0x00, 128);
11380  memset(src_str, 0x00, 128);
11381  memset(dst_str, 0x00, 257);
11382  memset(iv_str, 0x00, 128);
11383  memset(add_str, 0x00, 128);
11384  memset(tag_str, 0x00, 128);
11385  memset(output, 0x00, 128);
11386  memset(tag_output, 0x00, 16);
11387 
11388  key_len = unhexify( key_str, "4fb4ab2071bff4ec239ac05c04800806df2c256a4845b13a" );
11389  pt_len = unhexify( src_str, "" );
11390  iv_len = unhexify( iv_str, "3ee0e2e72eea437e46a873bd659b1c4a" );
11391  add_len = unhexify( add_str, "" );
11392 
11393  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
11394  if( 0 == 0 )
11395  {
11396  fct_chk( 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 );
11397  hexify( dst_str, output, pt_len );
11398  hexify( tag_str, tag_output, tag_len );
11399 
11400  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
11401  fct_chk( strcmp( (char *) tag_str, "572d3ec2650ad57eec84fe00" ) == 0 );
11402  }
11403  }
11404  FCT_TEST_END();
11405 
11406 
11407  FCT_TEST_BGN(gcm_nist_validation_aes_1921280096_2)
11408  {
11409  unsigned char key_str[128];
11410  unsigned char src_str[128];
11411  unsigned char dst_str[257];
11412  unsigned char iv_str[128];
11413  unsigned char add_str[128];
11414  unsigned char tag_str[128];
11415  unsigned char output[128];
11416  unsigned char tag_output[16];
11417  gcm_context ctx;
11418  unsigned int key_len;
11419  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
11420 
11421  memset(key_str, 0x00, 128);
11422  memset(src_str, 0x00, 128);
11423  memset(dst_str, 0x00, 257);
11424  memset(iv_str, 0x00, 128);
11425  memset(add_str, 0x00, 128);
11426  memset(tag_str, 0x00, 128);
11427  memset(output, 0x00, 128);
11428  memset(tag_output, 0x00, 16);
11429 
11430  key_len = unhexify( key_str, "193d5ebeb466d3fe68754bba413c65112ae29c5ca5e450c4" );
11431  pt_len = unhexify( src_str, "" );
11432  iv_len = unhexify( iv_str, "04e9d31b3b1205cae37c435d5a5579df" );
11433  add_len = unhexify( add_str, "" );
11434 
11435  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
11436  if( 0 == 0 )
11437  {
11438  fct_chk( 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 );
11439  hexify( dst_str, output, pt_len );
11440  hexify( tag_str, tag_output, tag_len );
11441 
11442  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
11443  fct_chk( strcmp( (char *) tag_str, "71004356f266688374437aef" ) == 0 );
11444  }
11445  }
11446  FCT_TEST_END();
11447 
11448 
11449  FCT_TEST_BGN(gcm_nist_validation_aes_1921280064_0)
11450  {
11451  unsigned char key_str[128];
11452  unsigned char src_str[128];
11453  unsigned char dst_str[257];
11454  unsigned char iv_str[128];
11455  unsigned char add_str[128];
11456  unsigned char tag_str[128];
11457  unsigned char output[128];
11458  unsigned char tag_output[16];
11459  gcm_context ctx;
11460  unsigned int key_len;
11461  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
11462 
11463  memset(key_str, 0x00, 128);
11464  memset(src_str, 0x00, 128);
11465  memset(dst_str, 0x00, 257);
11466  memset(iv_str, 0x00, 128);
11467  memset(add_str, 0x00, 128);
11468  memset(tag_str, 0x00, 128);
11469  memset(output, 0x00, 128);
11470  memset(tag_output, 0x00, 16);
11471 
11472  key_len = unhexify( key_str, "9a455ea1d9a78425a41d43e293e88de40dd6ad9ab2a63ef0" );
11473  pt_len = unhexify( src_str, "" );
11474  iv_len = unhexify( iv_str, "c108c56a1b3261042adc89046ad1ecf8" );
11475  add_len = unhexify( add_str, "" );
11476 
11477  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
11478  if( 0 == 0 )
11479  {
11480  fct_chk( 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 );
11481  hexify( dst_str, output, pt_len );
11482  hexify( tag_str, tag_output, tag_len );
11483 
11484  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
11485  fct_chk( strcmp( (char *) tag_str, "213d77ed0534cc20" ) == 0 );
11486  }
11487  }
11488  FCT_TEST_END();
11489 
11490 
11491  FCT_TEST_BGN(gcm_nist_validation_aes_1921280064_1)
11492  {
11493  unsigned char key_str[128];
11494  unsigned char src_str[128];
11495  unsigned char dst_str[257];
11496  unsigned char iv_str[128];
11497  unsigned char add_str[128];
11498  unsigned char tag_str[128];
11499  unsigned char output[128];
11500  unsigned char tag_output[16];
11501  gcm_context ctx;
11502  unsigned int key_len;
11503  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
11504 
11505  memset(key_str, 0x00, 128);
11506  memset(src_str, 0x00, 128);
11507  memset(dst_str, 0x00, 257);
11508  memset(iv_str, 0x00, 128);
11509  memset(add_str, 0x00, 128);
11510  memset(tag_str, 0x00, 128);
11511  memset(output, 0x00, 128);
11512  memset(tag_output, 0x00, 16);
11513 
11514  key_len = unhexify( key_str, "d6fff8797db2f1884b7d71e3ef3e5983234a837dbd0c2cd6" );
11515  pt_len = unhexify( src_str, "" );
11516  iv_len = unhexify( iv_str, "6be4417d7c00fe9c731e0932a7037a71" );
11517  add_len = unhexify( add_str, "" );
11518 
11519  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
11520  if( 0 == 0 )
11521  {
11522  fct_chk( 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 );
11523  hexify( dst_str, output, pt_len );
11524  hexify( tag_str, tag_output, tag_len );
11525 
11526  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
11527  fct_chk( strcmp( (char *) tag_str, "68b6c28786a017e7" ) == 0 );
11528  }
11529  }
11530  FCT_TEST_END();
11531 
11532 
11533  FCT_TEST_BGN(gcm_nist_validation_aes_1921280064_2)
11534  {
11535  unsigned char key_str[128];
11536  unsigned char src_str[128];
11537  unsigned char dst_str[257];
11538  unsigned char iv_str[128];
11539  unsigned char add_str[128];
11540  unsigned char tag_str[128];
11541  unsigned char output[128];
11542  unsigned char tag_output[16];
11543  gcm_context ctx;
11544  unsigned int key_len;
11545  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
11546 
11547  memset(key_str, 0x00, 128);
11548  memset(src_str, 0x00, 128);
11549  memset(dst_str, 0x00, 257);
11550  memset(iv_str, 0x00, 128);
11551  memset(add_str, 0x00, 128);
11552  memset(tag_str, 0x00, 128);
11553  memset(output, 0x00, 128);
11554  memset(tag_output, 0x00, 16);
11555 
11556  key_len = unhexify( key_str, "86e6c451ea0ecaec9e365bc4831e7a6c092b65ee9bcf1b86" );
11557  pt_len = unhexify( src_str, "" );
11558  iv_len = unhexify( iv_str, "6258168da407ce43cc18d6931497c1f3" );
11559  add_len = unhexify( add_str, "" );
11560 
11561  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
11562  if( 0 == 0 )
11563  {
11564  fct_chk( 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 );
11565  hexify( dst_str, output, pt_len );
11566  hexify( tag_str, tag_output, tag_len );
11567 
11568  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
11569  fct_chk( strcmp( (char *) tag_str, "cbf20172e75a6316" ) == 0 );
11570  }
11571  }
11572  FCT_TEST_END();
11573 
11574 
11575  FCT_TEST_BGN(gcm_nist_validation_aes_1921280032_0)
11576  {
11577  unsigned char key_str[128];
11578  unsigned char src_str[128];
11579  unsigned char dst_str[257];
11580  unsigned char iv_str[128];
11581  unsigned char add_str[128];
11582  unsigned char tag_str[128];
11583  unsigned char output[128];
11584  unsigned char tag_output[16];
11585  gcm_context ctx;
11586  unsigned int key_len;
11587  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
11588 
11589  memset(key_str, 0x00, 128);
11590  memset(src_str, 0x00, 128);
11591  memset(dst_str, 0x00, 257);
11592  memset(iv_str, 0x00, 128);
11593  memset(add_str, 0x00, 128);
11594  memset(tag_str, 0x00, 128);
11595  memset(output, 0x00, 128);
11596  memset(tag_output, 0x00, 16);
11597 
11598  key_len = unhexify( key_str, "9295cc6458d907da5e7c356a7de51eb8e8d3031f72a05fb7" );
11599  pt_len = unhexify( src_str, "" );
11600  iv_len = unhexify( iv_str, "c7eaad3389fc24a4ef96a711ffbfff9e" );
11601  add_len = unhexify( add_str, "" );
11602 
11603  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
11604  if( 0 == 0 )
11605  {
11606  fct_chk( 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 );
11607  hexify( dst_str, output, pt_len );
11608  hexify( tag_str, tag_output, tag_len );
11609 
11610  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
11611  fct_chk( strcmp( (char *) tag_str, "12508e37" ) == 0 );
11612  }
11613  }
11614  FCT_TEST_END();
11615 
11616 
11617  FCT_TEST_BGN(gcm_nist_validation_aes_1921280032_1)
11618  {
11619  unsigned char key_str[128];
11620  unsigned char src_str[128];
11621  unsigned char dst_str[257];
11622  unsigned char iv_str[128];
11623  unsigned char add_str[128];
11624  unsigned char tag_str[128];
11625  unsigned char output[128];
11626  unsigned char tag_output[16];
11627  gcm_context ctx;
11628  unsigned int key_len;
11629  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
11630 
11631  memset(key_str, 0x00, 128);
11632  memset(src_str, 0x00, 128);
11633  memset(dst_str, 0x00, 257);
11634  memset(iv_str, 0x00, 128);
11635  memset(add_str, 0x00, 128);
11636  memset(tag_str, 0x00, 128);
11637  memset(output, 0x00, 128);
11638  memset(tag_output, 0x00, 16);
11639 
11640  key_len = unhexify( key_str, "308b6ee958f81a7fbf3bc386e167459206df9c1cb999d904" );
11641  pt_len = unhexify( src_str, "" );
11642  iv_len = unhexify( iv_str, "2c61b991ce478d9aac818d7aa75ada36" );
11643  add_len = unhexify( add_str, "" );
11644 
11645  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
11646  if( 0 == 0 )
11647  {
11648  fct_chk( 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 );
11649  hexify( dst_str, output, pt_len );
11650  hexify( tag_str, tag_output, tag_len );
11651 
11652  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
11653  fct_chk( strcmp( (char *) tag_str, "32ead170" ) == 0 );
11654  }
11655  }
11656  FCT_TEST_END();
11657 
11658 
11659  FCT_TEST_BGN(gcm_nist_validation_aes_1921280032_2)
11660  {
11661  unsigned char key_str[128];
11662  unsigned char src_str[128];
11663  unsigned char dst_str[257];
11664  unsigned char iv_str[128];
11665  unsigned char add_str[128];
11666  unsigned char tag_str[128];
11667  unsigned char output[128];
11668  unsigned char tag_output[16];
11669  gcm_context ctx;
11670  unsigned int key_len;
11671  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
11672 
11673  memset(key_str, 0x00, 128);
11674  memset(src_str, 0x00, 128);
11675  memset(dst_str, 0x00, 257);
11676  memset(iv_str, 0x00, 128);
11677  memset(add_str, 0x00, 128);
11678  memset(tag_str, 0x00, 128);
11679  memset(output, 0x00, 128);
11680  memset(tag_output, 0x00, 16);
11681 
11682  key_len = unhexify( key_str, "873d033773218387690c2871448578d8440ef36553583928" );
11683  pt_len = unhexify( src_str, "" );
11684  iv_len = unhexify( iv_str, "02072ec745c856c6e86873a0523d603a" );
11685  add_len = unhexify( add_str, "" );
11686 
11687  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
11688  if( 0 == 0 )
11689  {
11690  fct_chk( 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 );
11691  hexify( dst_str, output, pt_len );
11692  hexify( tag_str, tag_output, tag_len );
11693 
11694  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
11695  fct_chk( strcmp( (char *) tag_str, "e6a5726b" ) == 0 );
11696  }
11697  }
11698  FCT_TEST_END();
11699 
11700 
11701  FCT_TEST_BGN(gcm_nist_validation_aes_19212801024128_0)
11702  {
11703  unsigned char key_str[128];
11704  unsigned char src_str[128];
11705  unsigned char dst_str[257];
11706  unsigned char iv_str[128];
11707  unsigned char add_str[128];
11708  unsigned char tag_str[128];
11709  unsigned char output[128];
11710  unsigned char tag_output[16];
11711  gcm_context ctx;
11712  unsigned int key_len;
11713  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
11714 
11715  memset(key_str, 0x00, 128);
11716  memset(src_str, 0x00, 128);
11717  memset(dst_str, 0x00, 257);
11718  memset(iv_str, 0x00, 128);
11719  memset(add_str, 0x00, 128);
11720  memset(tag_str, 0x00, 128);
11721  memset(output, 0x00, 128);
11722  memset(tag_output, 0x00, 16);
11723 
11724  key_len = unhexify( key_str, "cfd9c1375dfd19e64b5e4b75022fabaa049627d5238cba3a" );
11725  pt_len = unhexify( src_str, "" );
11726  iv_len = unhexify( iv_str, "0a745c6910b23c78b1b44c02f1ce11b2" );
11727  add_len = unhexify( add_str, "0cc6724b9f3675619fbc70117bfcfb5871e903b0f01382e404793c1dfaff5a5b4131a7fc3041014941dc2c53871bee3ff18c08e9abbb13a8ea220cb89cf65bea1581eb8ac43d148203532dad8854616210ed7f1f9467e6b22071ccc8bb7e3bd89a0ed02a7058401aa4f2b5d0ce050092b650591282e66ee789bbf032dc105503" );
11728 
11729  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
11730  if( 0 == 0 )
11731  {
11732  fct_chk( 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 );
11733  hexify( dst_str, output, pt_len );
11734  hexify( tag_str, tag_output, tag_len );
11735 
11736  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
11737  fct_chk( strcmp( (char *) tag_str, "8ec41e9c76e96c031c18621b00c33a13" ) == 0 );
11738  }
11739  }
11740  FCT_TEST_END();
11741 
11742 
11743  FCT_TEST_BGN(gcm_nist_validation_aes_19212801024128_1)
11744  {
11745  unsigned char key_str[128];
11746  unsigned char src_str[128];
11747  unsigned char dst_str[257];
11748  unsigned char iv_str[128];
11749  unsigned char add_str[128];
11750  unsigned char tag_str[128];
11751  unsigned char output[128];
11752  unsigned char tag_output[16];
11753  gcm_context ctx;
11754  unsigned int key_len;
11755  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
11756 
11757  memset(key_str, 0x00, 128);
11758  memset(src_str, 0x00, 128);
11759  memset(dst_str, 0x00, 257);
11760  memset(iv_str, 0x00, 128);
11761  memset(add_str, 0x00, 128);
11762  memset(tag_str, 0x00, 128);
11763  memset(output, 0x00, 128);
11764  memset(tag_output, 0x00, 16);
11765 
11766  key_len = unhexify( key_str, "6c9f16c5dff4bd8d1855995dcad1c4253759b6e2a833995b" );
11767  pt_len = unhexify( src_str, "" );
11768  iv_len = unhexify( iv_str, "3f25e3210d6d9caa8725eb55c6813cef" );
11769  add_len = unhexify( add_str, "7c6a66d930c95ce1028310cfa3670b77ffeb5e9b627a667859665c1dee8e69930c287fb1f1a3706ed1a0d35eb6d1becb236352a226a5b686bc27e1e1dce4ac6d5974d88b9812b39ba289b2490821319b5fd677da23fab3adbae4fb3630e2571ac887ed951a49051b0cc551e7ebe924c0cbb1c516f71db60e24773430dc34f47b" );
11770 
11771  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
11772  if( 0 == 0 )
11773  {
11774  fct_chk( 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 );
11775  hexify( dst_str, output, pt_len );
11776  hexify( tag_str, tag_output, tag_len );
11777 
11778  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
11779  fct_chk( strcmp( (char *) tag_str, "5e000478b55ecb080c1b685f24f255a9" ) == 0 );
11780  }
11781  }
11782  FCT_TEST_END();
11783 
11784 
11785  FCT_TEST_BGN(gcm_nist_validation_aes_19212801024128_2)
11786  {
11787  unsigned char key_str[128];
11788  unsigned char src_str[128];
11789  unsigned char dst_str[257];
11790  unsigned char iv_str[128];
11791  unsigned char add_str[128];
11792  unsigned char tag_str[128];
11793  unsigned char output[128];
11794  unsigned char tag_output[16];
11795  gcm_context ctx;
11796  unsigned int key_len;
11797  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
11798 
11799  memset(key_str, 0x00, 128);
11800  memset(src_str, 0x00, 128);
11801  memset(dst_str, 0x00, 257);
11802  memset(iv_str, 0x00, 128);
11803  memset(add_str, 0x00, 128);
11804  memset(tag_str, 0x00, 128);
11805  memset(output, 0x00, 128);
11806  memset(tag_output, 0x00, 16);
11807 
11808  key_len = unhexify( key_str, "a8e393e00714cd94de0347351b924ebd555003f3a297493f" );
11809  pt_len = unhexify( src_str, "" );
11810  iv_len = unhexify( iv_str, "9c7eaf730fa8074acd372fdc53b726c0" );
11811  add_len = unhexify( add_str, "ce4cb46e67d85c5e68afe61ddecb1a36da4de42774d45250d0d52b328834385ce1ceba96f703daab81d7a981cd80c469855e14d834df41e4c0c98873f3dbb777fc0562f284c466b701a530f27fc4e6838cecbd162db34b8e8a23131d60d1f9dac6c14d32a2141173f59f057f38af51a89a9c783afd3410de3f2bbd07b90a4eb2" );
11812 
11813  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
11814  if( 0 == 0 )
11815  {
11816  fct_chk( 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 );
11817  hexify( dst_str, output, pt_len );
11818  hexify( tag_str, tag_output, tag_len );
11819 
11820  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
11821  fct_chk( strcmp( (char *) tag_str, "66bb46adf7b981f7c7e39cfffc53390f" ) == 0 );
11822  }
11823  }
11824  FCT_TEST_END();
11825 
11826 
11827  FCT_TEST_BGN(gcm_nist_validation_aes_19212801024120_0)
11828  {
11829  unsigned char key_str[128];
11830  unsigned char src_str[128];
11831  unsigned char dst_str[257];
11832  unsigned char iv_str[128];
11833  unsigned char add_str[128];
11834  unsigned char tag_str[128];
11835  unsigned char output[128];
11836  unsigned char tag_output[16];
11837  gcm_context ctx;
11838  unsigned int key_len;
11839  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
11840 
11841  memset(key_str, 0x00, 128);
11842  memset(src_str, 0x00, 128);
11843  memset(dst_str, 0x00, 257);
11844  memset(iv_str, 0x00, 128);
11845  memset(add_str, 0x00, 128);
11846  memset(tag_str, 0x00, 128);
11847  memset(output, 0x00, 128);
11848  memset(tag_output, 0x00, 16);
11849 
11850  key_len = unhexify( key_str, "bd356a8acd12b06de9f63825e93664cab1beae7f4112cc70" );
11851  pt_len = unhexify( src_str, "" );
11852  iv_len = unhexify( iv_str, "72eaf459b8af0f787e91d117931e3cdd" );
11853  add_len = unhexify( add_str, "9295b227be3e1faf4e969be6c7f20d507431cf5da9e2a577c9b31538058472683bd52f0ad3f2fa9f68159c1df88e7dde40d6612f8abb0f11a0078419b34b558d9144ea6596a09e5d5548b275620e5a3096dceb2768d2f77a0b79e0b963387d3016ecc2f155d9182e3209d97c76329b830bb62df195cb2be11223565f496e751a" );
11854 
11855  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
11856  if( 0 == 0 )
11857  {
11858  fct_chk( 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 );
11859  hexify( dst_str, output, pt_len );
11860  hexify( tag_str, tag_output, tag_len );
11861 
11862  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
11863  fct_chk( strcmp( (char *) tag_str, "2ff4aecc90e2de9a7d3d15eb314cc8" ) == 0 );
11864  }
11865  }
11866  FCT_TEST_END();
11867 
11868 
11869  FCT_TEST_BGN(gcm_nist_validation_aes_19212801024120_1)
11870  {
11871  unsigned char key_str[128];
11872  unsigned char src_str[128];
11873  unsigned char dst_str[257];
11874  unsigned char iv_str[128];
11875  unsigned char add_str[128];
11876  unsigned char tag_str[128];
11877  unsigned char output[128];
11878  unsigned char tag_output[16];
11879  gcm_context ctx;
11880  unsigned int key_len;
11881  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
11882 
11883  memset(key_str, 0x00, 128);
11884  memset(src_str, 0x00, 128);
11885  memset(dst_str, 0x00, 257);
11886  memset(iv_str, 0x00, 128);
11887  memset(add_str, 0x00, 128);
11888  memset(tag_str, 0x00, 128);
11889  memset(output, 0x00, 128);
11890  memset(tag_output, 0x00, 16);
11891 
11892  key_len = unhexify( key_str, "80ecc9587bc2cec1ba87ab431c7ed03926169c01eba19729" );
11893  pt_len = unhexify( src_str, "" );
11894  iv_len = unhexify( iv_str, "5a65f279f453572e169db33807d9b52d" );
11895  add_len = unhexify( add_str, "29520d9020efa1ecf514e39a286f398c7225b945608d4b57ec873ae8bfbdd40e4cbd75b9b535c9f171cd7913ed4b21e09d6bb030eaa27ca58b08131817113c852b6cbdf550d94dddfde8595e689470cf92f9c20960b936ac0692171158e54041155482f29e4acae41565d87f5641d1aac96b8cb763b7f1267ccdbce234d067d4" );
11896 
11897  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
11898  if( 0 == 0 )
11899  {
11900  fct_chk( 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 );
11901  hexify( dst_str, output, pt_len );
11902  hexify( tag_str, tag_output, tag_len );
11903 
11904  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
11905  fct_chk( strcmp( (char *) tag_str, "83dec0fb36463b86270656681455a0" ) == 0 );
11906  }
11907  }
11908  FCT_TEST_END();
11909 
11910 
11911  FCT_TEST_BGN(gcm_nist_validation_aes_19212801024120_2)
11912  {
11913  unsigned char key_str[128];
11914  unsigned char src_str[128];
11915  unsigned char dst_str[257];
11916  unsigned char iv_str[128];
11917  unsigned char add_str[128];
11918  unsigned char tag_str[128];
11919  unsigned char output[128];
11920  unsigned char tag_output[16];
11921  gcm_context ctx;
11922  unsigned int key_len;
11923  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
11924 
11925  memset(key_str, 0x00, 128);
11926  memset(src_str, 0x00, 128);
11927  memset(dst_str, 0x00, 257);
11928  memset(iv_str, 0x00, 128);
11929  memset(add_str, 0x00, 128);
11930  memset(tag_str, 0x00, 128);
11931  memset(output, 0x00, 128);
11932  memset(tag_output, 0x00, 16);
11933 
11934  key_len = unhexify( key_str, "94345293fb7733fea9c8b94be2f4fc26f8c3655f583e2b0e" );
11935  pt_len = unhexify( src_str, "" );
11936  iv_len = unhexify( iv_str, "8bad4f3f289b9f4063ba39622ba2b7ee" );
11937  add_len = unhexify( add_str, "7e2b6520d7a554e612d01f462606c0e6d0181bafece1daf54f4316d707483a5dcd4275a08caecc1c20f3e32872fe3e57fa62d598949f5e49ef0efd53e918617e0a140338c007025493f2e0f8dbe5fca4a57d1db6333551bbca79243a73ae8a68dafb3089998359159df916ee6ba4f928a6a173390f15f2ee6045d578dd757bb1" );
11938 
11939  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
11940  if( 0 == 0 )
11941  {
11942  fct_chk( 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 );
11943  hexify( dst_str, output, pt_len );
11944  hexify( tag_str, tag_output, tag_len );
11945 
11946  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
11947  fct_chk( strcmp( (char *) tag_str, "da305181a12517420c6f0d71fd3ee1" ) == 0 );
11948  }
11949  }
11950  FCT_TEST_END();
11951 
11952 
11953  FCT_TEST_BGN(gcm_nist_validation_aes_19212801024112_0)
11954  {
11955  unsigned char key_str[128];
11956  unsigned char src_str[128];
11957  unsigned char dst_str[257];
11958  unsigned char iv_str[128];
11959  unsigned char add_str[128];
11960  unsigned char tag_str[128];
11961  unsigned char output[128];
11962  unsigned char tag_output[16];
11963  gcm_context ctx;
11964  unsigned int key_len;
11965  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
11966 
11967  memset(key_str, 0x00, 128);
11968  memset(src_str, 0x00, 128);
11969  memset(dst_str, 0x00, 257);
11970  memset(iv_str, 0x00, 128);
11971  memset(add_str, 0x00, 128);
11972  memset(tag_str, 0x00, 128);
11973  memset(output, 0x00, 128);
11974  memset(tag_output, 0x00, 16);
11975 
11976  key_len = unhexify( key_str, "a3915523031c3caa58ce02c2b1e6ee2eb42cdaf31332432c" );
11977  pt_len = unhexify( src_str, "" );
11978  iv_len = unhexify( iv_str, "d5416986beb3131afd6b7967836d243b" );
11979  add_len = unhexify( add_str, "ba4e883147c8f07afc08735e6e439798bec60e00ed3f5982f66d6b82a9af7580934112a9858f83abbd71193190298f0683453d3f8388c475fbbc8f9b6a3d2c77046b73986a54cc4559c57cbb86330267e04bcf5fd583c6d2968a7971da64c99d98623676154b0ee413ba531ebf12fce5e06b4ee0617e43bdaeb408b54d1b4445" );
11980 
11981  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
11982  if( 0 == 0 )
11983  {
11984  fct_chk( 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 );
11985  hexify( dst_str, output, pt_len );
11986  hexify( tag_str, tag_output, tag_len );
11987 
11988  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
11989  fct_chk( strcmp( (char *) tag_str, "f273fe664e5190a506da28ea8307" ) == 0 );
11990  }
11991  }
11992  FCT_TEST_END();
11993 
11994 
11995  FCT_TEST_BGN(gcm_nist_validation_aes_19212801024112_1)
11996  {
11997  unsigned char key_str[128];
11998  unsigned char src_str[128];
11999  unsigned char dst_str[257];
12000  unsigned char iv_str[128];
12001  unsigned char add_str[128];
12002  unsigned char tag_str[128];
12003  unsigned char output[128];
12004  unsigned char tag_output[16];
12005  gcm_context ctx;
12006  unsigned int key_len;
12007  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
12008 
12009  memset(key_str, 0x00, 128);
12010  memset(src_str, 0x00, 128);
12011  memset(dst_str, 0x00, 257);
12012  memset(iv_str, 0x00, 128);
12013  memset(add_str, 0x00, 128);
12014  memset(tag_str, 0x00, 128);
12015  memset(output, 0x00, 128);
12016  memset(tag_output, 0x00, 16);
12017 
12018  key_len = unhexify( key_str, "799d3ff266644128f330ceb8c028297991b2a5593e4afa3b" );
12019  pt_len = unhexify( src_str, "" );
12020  iv_len = unhexify( iv_str, "9d27061dd9d50817b3086f453f1f401a" );
12021  add_len = unhexify( add_str, "d3b5c420ac597daaac7503cd17f580e94ad779fae0d4199ada2c7da7c4a611228752375647a03241f29f810d3a6a74a140ef9651e4a6099259f7d41ec4e51a02917e8cc35edf7f60ffc473805f56f0ad51fcc767670157c050c3214d36f831a54bfeb7ab2039cb10f7919b89b0f623a572aaed313983b105fdff495d979b8a84" );
12022 
12023  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
12024  if( 0 == 0 )
12025  {
12026  fct_chk( 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 );
12027  hexify( dst_str, output, pt_len );
12028  hexify( tag_str, tag_output, tag_len );
12029 
12030  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
12031  fct_chk( strcmp( (char *) tag_str, "e690c9afdecea2494b6cf5a576bd" ) == 0 );
12032  }
12033  }
12034  FCT_TEST_END();
12035 
12036 
12037  FCT_TEST_BGN(gcm_nist_validation_aes_19212801024112_2)
12038  {
12039  unsigned char key_str[128];
12040  unsigned char src_str[128];
12041  unsigned char dst_str[257];
12042  unsigned char iv_str[128];
12043  unsigned char add_str[128];
12044  unsigned char tag_str[128];
12045  unsigned char output[128];
12046  unsigned char tag_output[16];
12047  gcm_context ctx;
12048  unsigned int key_len;
12049  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
12050 
12051  memset(key_str, 0x00, 128);
12052  memset(src_str, 0x00, 128);
12053  memset(dst_str, 0x00, 257);
12054  memset(iv_str, 0x00, 128);
12055  memset(add_str, 0x00, 128);
12056  memset(tag_str, 0x00, 128);
12057  memset(output, 0x00, 128);
12058  memset(tag_output, 0x00, 16);
12059 
12060  key_len = unhexify( key_str, "7480905cee8be7f42b9490936041a19b060331712882da55" );
12061  pt_len = unhexify( src_str, "" );
12062  iv_len = unhexify( iv_str, "27500a09506e0133c88f65e77721b547" );
12063  add_len = unhexify( add_str, "52832d4118fddf182b21513db25d54a19220335f8676ea35c0941d2a38a3aa536b8c9cbf093de83c6b24da3372baba2826289bb3cac415795b9bd3ea62bb9b48450978e79b936cd70cd551e580a6de3418a2be0f4c1f062954aed6adc94d805e59ff703d239fc2318b80cee45c57f916977b319a9ce884d7e02726fdb71c3287" );
12064 
12065  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
12066  if( 0 == 0 )
12067  {
12068  fct_chk( 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 );
12069  hexify( dst_str, output, pt_len );
12070  hexify( tag_str, tag_output, tag_len );
12071 
12072  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
12073  fct_chk( strcmp( (char *) tag_str, "52a5721e98ba1a553d8e550f137c" ) == 0 );
12074  }
12075  }
12076  FCT_TEST_END();
12077 
12078 
12079  FCT_TEST_BGN(gcm_nist_validation_aes_19212801024104_0)
12080  {
12081  unsigned char key_str[128];
12082  unsigned char src_str[128];
12083  unsigned char dst_str[257];
12084  unsigned char iv_str[128];
12085  unsigned char add_str[128];
12086  unsigned char tag_str[128];
12087  unsigned char output[128];
12088  unsigned char tag_output[16];
12089  gcm_context ctx;
12090  unsigned int key_len;
12091  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
12092 
12093  memset(key_str, 0x00, 128);
12094  memset(src_str, 0x00, 128);
12095  memset(dst_str, 0x00, 257);
12096  memset(iv_str, 0x00, 128);
12097  memset(add_str, 0x00, 128);
12098  memset(tag_str, 0x00, 128);
12099  memset(output, 0x00, 128);
12100  memset(tag_output, 0x00, 16);
12101 
12102  key_len = unhexify( key_str, "042db3f8af95ad68966bce9ca0297ed41b608683a37457f5" );
12103  pt_len = unhexify( src_str, "" );
12104  iv_len = unhexify( iv_str, "32d3e97edd3f393da5abc3827cae1e67" );
12105  add_len = unhexify( add_str, "4d7c2ee6e024e95a6e684ded9898f5c7fae7da8658bdb40560dac6495e46a691e97c047e66046b55e8cf9b02d31d3caeebe3a9f8aeed756d6b0da1ac5d4ba2c5e7b54add22f681ab1d5a2ac1463e8447e08592e0c2f32605bd02f2f03c925a2159e5bdd880323f4ce18a826a00962ce418dbbd5c276e3ff30f1cbaa4795d1ce5" );
12106 
12107  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
12108  if( 0 == 0 )
12109  {
12110  fct_chk( 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 );
12111  hexify( dst_str, output, pt_len );
12112  hexify( tag_str, tag_output, tag_len );
12113 
12114  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
12115  fct_chk( strcmp( (char *) tag_str, "e2afbb95a4944353ed21851f10" ) == 0 );
12116  }
12117  }
12118  FCT_TEST_END();
12119 
12120 
12121  FCT_TEST_BGN(gcm_nist_validation_aes_19212801024104_1)
12122  {
12123  unsigned char key_str[128];
12124  unsigned char src_str[128];
12125  unsigned char dst_str[257];
12126  unsigned char iv_str[128];
12127  unsigned char add_str[128];
12128  unsigned char tag_str[128];
12129  unsigned char output[128];
12130  unsigned char tag_output[16];
12131  gcm_context ctx;
12132  unsigned int key_len;
12133  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
12134 
12135  memset(key_str, 0x00, 128);
12136  memset(src_str, 0x00, 128);
12137  memset(dst_str, 0x00, 257);
12138  memset(iv_str, 0x00, 128);
12139  memset(add_str, 0x00, 128);
12140  memset(tag_str, 0x00, 128);
12141  memset(output, 0x00, 128);
12142  memset(tag_output, 0x00, 16);
12143 
12144  key_len = unhexify( key_str, "7f5ea90f99fc76594f0f06448321bd4bb5e494a5e351e41b" );
12145  pt_len = unhexify( src_str, "" );
12146  iv_len = unhexify( iv_str, "002a5da3c543ca56dd7e5b013b094f70" );
12147  add_len = unhexify( add_str, "b8150b50e36de85158a96d2096678f31f179c8765ae6ba5723ca655e890528eae96d438f9d9365575dadea3cebb4d7df3a9d5323f93696c40781a6661dd4849531e672f5cee7cdfc529416c9c3faa889d0f66ee4049c949c3c8459680f490bbb0a25e50af54de57d9e3241e0dff72604af55827b9c4d61b7d1a89f551cea2956" );
12148 
12149  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
12150  if( 0 == 0 )
12151  {
12152  fct_chk( 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 );
12153  hexify( dst_str, output, pt_len );
12154  hexify( tag_str, tag_output, tag_len );
12155 
12156  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
12157  fct_chk( strcmp( (char *) tag_str, "db9fd90a0be35a29f805989410" ) == 0 );
12158  }
12159  }
12160  FCT_TEST_END();
12161 
12162 
12163  FCT_TEST_BGN(gcm_nist_validation_aes_19212801024104_2)
12164  {
12165  unsigned char key_str[128];
12166  unsigned char src_str[128];
12167  unsigned char dst_str[257];
12168  unsigned char iv_str[128];
12169  unsigned char add_str[128];
12170  unsigned char tag_str[128];
12171  unsigned char output[128];
12172  unsigned char tag_output[16];
12173  gcm_context ctx;
12174  unsigned int key_len;
12175  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
12176 
12177  memset(key_str, 0x00, 128);
12178  memset(src_str, 0x00, 128);
12179  memset(dst_str, 0x00, 257);
12180  memset(iv_str, 0x00, 128);
12181  memset(add_str, 0x00, 128);
12182  memset(tag_str, 0x00, 128);
12183  memset(output, 0x00, 128);
12184  memset(tag_output, 0x00, 16);
12185 
12186  key_len = unhexify( key_str, "da287d34379d56f542edb02ea673bac097150f87648a57b9" );
12187  pt_len = unhexify( src_str, "" );
12188  iv_len = unhexify( iv_str, "6696034b1b362927b89ae1b7ab5297d7" );
12189  add_len = unhexify( add_str, "45818b7b69b05a121fe5c573c9903cb11477873b24a544ba919baec78d1565f4ad0766da58bfabfaa17ac3c628238a4d38b5c0b14b52e397bcac991408dd7b322ff614bd697ce2b5b94ca155a4442ddd9e502c4a5f81210c32dff33481f4211897db38f619b308f3708d554bdb6c7b8a4d2a80ccdfd5f70501c83502a312ca8a" );
12190 
12191  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
12192  if( 0 == 0 )
12193  {
12194  fct_chk( 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 );
12195  hexify( dst_str, output, pt_len );
12196  hexify( tag_str, tag_output, tag_len );
12197 
12198  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
12199  fct_chk( strcmp( (char *) tag_str, "8e65d86edc071446454a1bef34" ) == 0 );
12200  }
12201  }
12202  FCT_TEST_END();
12203 
12204 
12205  FCT_TEST_BGN(gcm_nist_validation_aes_1921280102496_0)
12206  {
12207  unsigned char key_str[128];
12208  unsigned char src_str[128];
12209  unsigned char dst_str[257];
12210  unsigned char iv_str[128];
12211  unsigned char add_str[128];
12212  unsigned char tag_str[128];
12213  unsigned char output[128];
12214  unsigned char tag_output[16];
12215  gcm_context ctx;
12216  unsigned int key_len;
12217  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
12218 
12219  memset(key_str, 0x00, 128);
12220  memset(src_str, 0x00, 128);
12221  memset(dst_str, 0x00, 257);
12222  memset(iv_str, 0x00, 128);
12223  memset(add_str, 0x00, 128);
12224  memset(tag_str, 0x00, 128);
12225  memset(output, 0x00, 128);
12226  memset(tag_output, 0x00, 16);
12227 
12228  key_len = unhexify( key_str, "1782ac334cbffc92769a170c3cd43915f735b4423ebb4dc3" );
12229  pt_len = unhexify( src_str, "" );
12230  iv_len = unhexify( iv_str, "736f2f24cd04e26d38e69c55b38cca7a" );
12231  add_len = unhexify( add_str, "5827d391efec2f8f102e5f053ac496e2910248a0eb72e8a0b3bf377c6349df02ab0410a3d28bc27abc7cbe582a03000db57843565e4fb06c4078de75c3f1a21130d55befb7ecb919ad789a4de2816c3a42d4e9b32e38d980c06045987d03739cbe7710d839c42f04f5088072c1a1044c3b89809b780e74e54ec135fbe4129ee0" );
12232 
12233  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
12234  if( 0 == 0 )
12235  {
12236  fct_chk( 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 );
12237  hexify( dst_str, output, pt_len );
12238  hexify( tag_str, tag_output, tag_len );
12239 
12240  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
12241  fct_chk( strcmp( (char *) tag_str, "c6dc3c4ae52f3948503d84a4" ) == 0 );
12242  }
12243  }
12244  FCT_TEST_END();
12245 
12246 
12247  FCT_TEST_BGN(gcm_nist_validation_aes_1921280102496_1)
12248  {
12249  unsigned char key_str[128];
12250  unsigned char src_str[128];
12251  unsigned char dst_str[257];
12252  unsigned char iv_str[128];
12253  unsigned char add_str[128];
12254  unsigned char tag_str[128];
12255  unsigned char output[128];
12256  unsigned char tag_output[16];
12257  gcm_context ctx;
12258  unsigned int key_len;
12259  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
12260 
12261  memset(key_str, 0x00, 128);
12262  memset(src_str, 0x00, 128);
12263  memset(dst_str, 0x00, 257);
12264  memset(iv_str, 0x00, 128);
12265  memset(add_str, 0x00, 128);
12266  memset(tag_str, 0x00, 128);
12267  memset(output, 0x00, 128);
12268  memset(tag_output, 0x00, 16);
12269 
12270  key_len = unhexify( key_str, "20529c374f21c97b0a8f96f7bd5bdeb3fcd2b12db30b3ee4" );
12271  pt_len = unhexify( src_str, "" );
12272  iv_len = unhexify( iv_str, "e6e45b7c28f7fbcae658acb533614e48" );
12273  add_len = unhexify( add_str, "b41290031906709ec8048f450a940eff0422a6ebc7b44666c05f17aec9debc1bfecce62d896d5df4618517fb57ce7b04ef1579ebb2636da0eead063bc74ec184b0a69ca3eba675fc7107bb52a49f93783608677565205ada7bf5a731441e44cede781120a026cc93cfe06a06fb3104a521c6987f1070823e5a880cbb3a8ecc88" );
12274 
12275  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
12276  if( 0 == 0 )
12277  {
12278  fct_chk( 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 );
12279  hexify( dst_str, output, pt_len );
12280  hexify( tag_str, tag_output, tag_len );
12281 
12282  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
12283  fct_chk( strcmp( (char *) tag_str, "e9ec5ad57892ce18babfde73" ) == 0 );
12284  }
12285  }
12286  FCT_TEST_END();
12287 
12288 
12289  FCT_TEST_BGN(gcm_nist_validation_aes_1921280102496_2)
12290  {
12291  unsigned char key_str[128];
12292  unsigned char src_str[128];
12293  unsigned char dst_str[257];
12294  unsigned char iv_str[128];
12295  unsigned char add_str[128];
12296  unsigned char tag_str[128];
12297  unsigned char output[128];
12298  unsigned char tag_output[16];
12299  gcm_context ctx;
12300  unsigned int key_len;
12301  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
12302 
12303  memset(key_str, 0x00, 128);
12304  memset(src_str, 0x00, 128);
12305  memset(dst_str, 0x00, 257);
12306  memset(iv_str, 0x00, 128);
12307  memset(add_str, 0x00, 128);
12308  memset(tag_str, 0x00, 128);
12309  memset(output, 0x00, 128);
12310  memset(tag_output, 0x00, 16);
12311 
12312  key_len = unhexify( key_str, "5634789b29e373760ecb9952f4b94ca76f40dda57ba363dd" );
12313  pt_len = unhexify( src_str, "" );
12314  iv_len = unhexify( iv_str, "7cd1d2d6beef44a6d6155181dfca3dc6" );
12315  add_len = unhexify( add_str, "0130a67935e2df082a95d0bc6dab17093fb08746a809cc82da7893c97c5efc0065388bb85c9c2986a481cc4bbdeb6e0f62d6cd22b7785a1662c70ca92a796341e90a538fe6e072976d41f2f59787d5a23c24d95a4ca73ce92a1048f0b1c79e454fb446d16587737f7cc335124b0a8fb32205e66b93bc135ad310b35eea0f670e" );
12316 
12317  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
12318  if( 0 == 0 )
12319  {
12320  fct_chk( 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 );
12321  hexify( dst_str, output, pt_len );
12322  hexify( tag_str, tag_output, tag_len );
12323 
12324  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
12325  fct_chk( strcmp( (char *) tag_str, "4006685e2d317a1c74ef5024" ) == 0 );
12326  }
12327  }
12328  FCT_TEST_END();
12329 
12330 
12331  FCT_TEST_BGN(gcm_nist_validation_aes_1921280102464_0)
12332  {
12333  unsigned char key_str[128];
12334  unsigned char src_str[128];
12335  unsigned char dst_str[257];
12336  unsigned char iv_str[128];
12337  unsigned char add_str[128];
12338  unsigned char tag_str[128];
12339  unsigned char output[128];
12340  unsigned char tag_output[16];
12341  gcm_context ctx;
12342  unsigned int key_len;
12343  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
12344 
12345  memset(key_str, 0x00, 128);
12346  memset(src_str, 0x00, 128);
12347  memset(dst_str, 0x00, 257);
12348  memset(iv_str, 0x00, 128);
12349  memset(add_str, 0x00, 128);
12350  memset(tag_str, 0x00, 128);
12351  memset(output, 0x00, 128);
12352  memset(tag_output, 0x00, 16);
12353 
12354  key_len = unhexify( key_str, "f0072110572321ad9804efb5bcbc2ae7b271b1cbb0f4897b" );
12355  pt_len = unhexify( src_str, "" );
12356  iv_len = unhexify( iv_str, "604ed8056666b17fd27b111afd419375" );
12357  add_len = unhexify( add_str, "97f68c00513b2247bc88a331a3ffa1208038736d6761b3b080884a8dd46e0596f2c00c1a93bceeeee814210e57d7f1cbdb4e0c2ea6a0834baf716945af9aa98e2826ae0eb5717b241ede2b9e873f94c1db9eb5e1b25f75827c25849a2c7b92098b54845ed81f52871a2b0d12d317846cec34defaaafc3bd3cc53a6ab812bd250" );
12358 
12359  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
12360  if( 0 == 0 )
12361  {
12362  fct_chk( 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 );
12363  hexify( dst_str, output, pt_len );
12364  hexify( tag_str, tag_output, tag_len );
12365 
12366  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
12367  fct_chk( strcmp( (char *) tag_str, "64881eaf78aeaa7d" ) == 0 );
12368  }
12369  }
12370  FCT_TEST_END();
12371 
12372 
12373  FCT_TEST_BGN(gcm_nist_validation_aes_1921280102464_1)
12374  {
12375  unsigned char key_str[128];
12376  unsigned char src_str[128];
12377  unsigned char dst_str[257];
12378  unsigned char iv_str[128];
12379  unsigned char add_str[128];
12380  unsigned char tag_str[128];
12381  unsigned char output[128];
12382  unsigned char tag_output[16];
12383  gcm_context ctx;
12384  unsigned int key_len;
12385  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
12386 
12387  memset(key_str, 0x00, 128);
12388  memset(src_str, 0x00, 128);
12389  memset(dst_str, 0x00, 257);
12390  memset(iv_str, 0x00, 128);
12391  memset(add_str, 0x00, 128);
12392  memset(tag_str, 0x00, 128);
12393  memset(output, 0x00, 128);
12394  memset(tag_output, 0x00, 16);
12395 
12396  key_len = unhexify( key_str, "e91e8c2d6928bbaf870e141ee34d3a56d00dacc8c7e50514" );
12397  pt_len = unhexify( src_str, "" );
12398  iv_len = unhexify( iv_str, "6f3d661a3e321844d1fc12d5ec2becf6" );
12399  add_len = unhexify( add_str, "fc8e5b45ad1647f9dbdbb6b437abecf0a8ac66065d0e250aa2ae75525455ee13adce8c59d643b96de9002d780db64f1eb9d823c6b9a4238171db26bf5d05153d1e3c839b93495084363b845fed75671ace0c009800454596674217b19832751252f051f3995776a89209c1636b4f4b28a364bccdedb78ad36876745c1a438406" );
12400 
12401  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
12402  if( 0 == 0 )
12403  {
12404  fct_chk( 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 );
12405  hexify( dst_str, output, pt_len );
12406  hexify( tag_str, tag_output, tag_len );
12407 
12408  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
12409  fct_chk( strcmp( (char *) tag_str, "1f4f495adfed6c1e" ) == 0 );
12410  }
12411  }
12412  FCT_TEST_END();
12413 
12414 
12415  FCT_TEST_BGN(gcm_nist_validation_aes_1921280102464_2)
12416  {
12417  unsigned char key_str[128];
12418  unsigned char src_str[128];
12419  unsigned char dst_str[257];
12420  unsigned char iv_str[128];
12421  unsigned char add_str[128];
12422  unsigned char tag_str[128];
12423  unsigned char output[128];
12424  unsigned char tag_output[16];
12425  gcm_context ctx;
12426  unsigned int key_len;
12427  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
12428 
12429  memset(key_str, 0x00, 128);
12430  memset(src_str, 0x00, 128);
12431  memset(dst_str, 0x00, 257);
12432  memset(iv_str, 0x00, 128);
12433  memset(add_str, 0x00, 128);
12434  memset(tag_str, 0x00, 128);
12435  memset(output, 0x00, 128);
12436  memset(tag_output, 0x00, 16);
12437 
12438  key_len = unhexify( key_str, "138ff9c8c556ffe7637f7602cae428d7e20dff882d44ddc3" );
12439  pt_len = unhexify( src_str, "" );
12440  iv_len = unhexify( iv_str, "38d7005fadee55b5a0434d924d971491" );
12441  add_len = unhexify( add_str, "3facceb047e486998c945839ee5eddd67054bbb28308365b2909dabaed29fd5b7b34644043fa443165e07b20214710cd652fecd816d9273c700d6828d216db8f3ceaa9eed0e251585f4ee5ba4beb3c0582b8128a3ecc01f4b29cab099ba2a8931e56120802fdf6004a6c02e6dd00257a83adc95b3acb270e8000fd2126b8eb83" );
12442 
12443  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
12444  if( 0 == 0 )
12445  {
12446  fct_chk( 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 );
12447  hexify( dst_str, output, pt_len );
12448  hexify( tag_str, tag_output, tag_len );
12449 
12450  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
12451  fct_chk( strcmp( (char *) tag_str, "fa8aed1987868388" ) == 0 );
12452  }
12453  }
12454  FCT_TEST_END();
12455 
12456 
12457  FCT_TEST_BGN(gcm_nist_validation_aes_1921280102432_0)
12458  {
12459  unsigned char key_str[128];
12460  unsigned char src_str[128];
12461  unsigned char dst_str[257];
12462  unsigned char iv_str[128];
12463  unsigned char add_str[128];
12464  unsigned char tag_str[128];
12465  unsigned char output[128];
12466  unsigned char tag_output[16];
12467  gcm_context ctx;
12468  unsigned int key_len;
12469  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
12470 
12471  memset(key_str, 0x00, 128);
12472  memset(src_str, 0x00, 128);
12473  memset(dst_str, 0x00, 257);
12474  memset(iv_str, 0x00, 128);
12475  memset(add_str, 0x00, 128);
12476  memset(tag_str, 0x00, 128);
12477  memset(output, 0x00, 128);
12478  memset(tag_output, 0x00, 16);
12479 
12480  key_len = unhexify( key_str, "1187a34ccb75fc06dafeca0235186c64ba929adac6cf6e49" );
12481  pt_len = unhexify( src_str, "" );
12482  iv_len = unhexify( iv_str, "9dd515d3481f21efbe43198f623b34f7" );
12483  add_len = unhexify( add_str, "8a1b00ea5d1f4e451cea71b3d2fc9bb03b9790a8ae8ae262b3e97ebf34911f9d865c8810b9fe779fff701c72f3639654e60898d1f57eb93381749f0e2cecb4ee342f5f34473215d5c46818338ff688637217fdfa8b7ee552db01973fdb6084c3c20b530863eeb1ce798046890994f5625df2a56042d62742097cc10d512a543a" );
12484 
12485  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
12486  if( 0 == 0 )
12487  {
12488  fct_chk( 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 );
12489  hexify( dst_str, output, pt_len );
12490  hexify( tag_str, tag_output, tag_len );
12491 
12492  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
12493  fct_chk( strcmp( (char *) tag_str, "83f45529" ) == 0 );
12494  }
12495  }
12496  FCT_TEST_END();
12497 
12498 
12499  FCT_TEST_BGN(gcm_nist_validation_aes_1921280102432_1)
12500  {
12501  unsigned char key_str[128];
12502  unsigned char src_str[128];
12503  unsigned char dst_str[257];
12504  unsigned char iv_str[128];
12505  unsigned char add_str[128];
12506  unsigned char tag_str[128];
12507  unsigned char output[128];
12508  unsigned char tag_output[16];
12509  gcm_context ctx;
12510  unsigned int key_len;
12511  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
12512 
12513  memset(key_str, 0x00, 128);
12514  memset(src_str, 0x00, 128);
12515  memset(dst_str, 0x00, 257);
12516  memset(iv_str, 0x00, 128);
12517  memset(add_str, 0x00, 128);
12518  memset(tag_str, 0x00, 128);
12519  memset(output, 0x00, 128);
12520  memset(tag_output, 0x00, 16);
12521 
12522  key_len = unhexify( key_str, "4c1052610d05fb77543b6b517eb64b487ed902f9969a420f" );
12523  pt_len = unhexify( src_str, "" );
12524  iv_len = unhexify( iv_str, "90f4c93301371158271a8f46df1c86c9" );
12525  add_len = unhexify( add_str, "83d009a1238f8aa40e36cbddf08a5f3d96403a03f7d079359cd6d3d0c719bf79c908654882919dbc6c27db34007b6732cb344a0f4babd26b1209ce6b134a8d2318f9a38af034b265562097b63794d7efee306e97c6ac0a991b3764ecd936c87000fa58e6689e302f12c2851b1ffc950dad7a553c8c67e01a2270e1e5e9caf30a" );
12526 
12527  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
12528  if( 0 == 0 )
12529  {
12530  fct_chk( 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 );
12531  hexify( dst_str, output, pt_len );
12532  hexify( tag_str, tag_output, tag_len );
12533 
12534  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
12535  fct_chk( strcmp( (char *) tag_str, "30b3fd85" ) == 0 );
12536  }
12537  }
12538  FCT_TEST_END();
12539 
12540 
12541  FCT_TEST_BGN(gcm_nist_validation_aes_1921280102432_2)
12542  {
12543  unsigned char key_str[128];
12544  unsigned char src_str[128];
12545  unsigned char dst_str[257];
12546  unsigned char iv_str[128];
12547  unsigned char add_str[128];
12548  unsigned char tag_str[128];
12549  unsigned char output[128];
12550  unsigned char tag_output[16];
12551  gcm_context ctx;
12552  unsigned int key_len;
12553  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
12554 
12555  memset(key_str, 0x00, 128);
12556  memset(src_str, 0x00, 128);
12557  memset(dst_str, 0x00, 257);
12558  memset(iv_str, 0x00, 128);
12559  memset(add_str, 0x00, 128);
12560  memset(tag_str, 0x00, 128);
12561  memset(output, 0x00, 128);
12562  memset(tag_output, 0x00, 16);
12563 
12564  key_len = unhexify( key_str, "3dc62e54957bdd1968be71b7d205fedaa291349d69f2854f" );
12565  pt_len = unhexify( src_str, "" );
12566  iv_len = unhexify( iv_str, "b8bce0f9263688ca41c4cefb26e79453" );
12567  add_len = unhexify( add_str, "22b6d92d8908bbdbcd0ff35299eddaf0cfb039befa2d2d83c896f373b92091d145f1771c58d60f94d3548d0cbbeabeb796d7632b5da3c66ef75cb41a35e7d1b032ccfbddbb9423e0ee054bd56b6288bdf1b616492c85393e4134ff9c066b23f3f626eac63a5fe191ce61810379c698de62922d3bdbe30697a3e3e78190756c3d" );
12568 
12569  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
12570  if( 0 == 0 )
12571  {
12572  fct_chk( 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 );
12573  hexify( dst_str, output, pt_len );
12574  hexify( tag_str, tag_output, tag_len );
12575 
12576  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
12577  fct_chk( strcmp( (char *) tag_str, "67887aeb" ) == 0 );
12578  }
12579  }
12580  FCT_TEST_END();
12581 
12582 
12583  FCT_TEST_BGN(gcm_nist_validation_aes_19212810240128_0)
12584  {
12585  unsigned char key_str[128];
12586  unsigned char src_str[128];
12587  unsigned char dst_str[257];
12588  unsigned char iv_str[128];
12589  unsigned char add_str[128];
12590  unsigned char tag_str[128];
12591  unsigned char output[128];
12592  unsigned char tag_output[16];
12593  gcm_context ctx;
12594  unsigned int key_len;
12595  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
12596 
12597  memset(key_str, 0x00, 128);
12598  memset(src_str, 0x00, 128);
12599  memset(dst_str, 0x00, 257);
12600  memset(iv_str, 0x00, 128);
12601  memset(add_str, 0x00, 128);
12602  memset(tag_str, 0x00, 128);
12603  memset(output, 0x00, 128);
12604  memset(tag_output, 0x00, 16);
12605 
12606  key_len = unhexify( key_str, "f170a6a761090355592968d67fb3514b8bfdb41cbf121341" );
12607  pt_len = unhexify( src_str, "a050f858c87d56dfcba3ac1ccf5ba60628b3ab1b89845682a95b7f291c80f6eb1cbced4fa21e3584e21528746231e7311ec319a0fcecc329e1a7aaed0a8548e613e51db78c86c8d0cefa15e30b745b952809f87d8a4a7bbefc76a8eb824827d4334201bda7743dc497ef5fffa2812e67f2a04e5c10bf464179c6178db932ecd3" );
12608  iv_len = unhexify( iv_str, "e02ef73aee414041b137dd3cae8f2765" );
12609  add_len = unhexify( add_str, "" );
12610 
12611  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
12612  if( 0 == 0 )
12613  {
12614  fct_chk( 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 );
12615  hexify( dst_str, output, pt_len );
12616  hexify( tag_str, tag_output, tag_len );
12617 
12618  fct_chk( strcmp( (char *) dst_str, "c08c9bccf298c8a352cd72e9174f57dc9bf64d65191a9e97b43ce70afacfe76feb5b2695d72ea4635fa94144de02a54333a77c7d4adcde17c166b303f1d664e6edb081a85433a7496f91ce640f113935cdd4e7ad14c95247506ddc6620913b5c67422f599ca00b95d62a9371e44c5af5295bf96743d0f1228c96e95af3b4d366" ) == 0 );
12619  fct_chk( strcmp( (char *) tag_str, "d64d9ac91548dc1bad618509633e0c25" ) == 0 );
12620  }
12621  }
12622  FCT_TEST_END();
12623 
12624 
12625  FCT_TEST_BGN(gcm_nist_validation_aes_19212810240128_1)
12626  {
12627  unsigned char key_str[128];
12628  unsigned char src_str[128];
12629  unsigned char dst_str[257];
12630  unsigned char iv_str[128];
12631  unsigned char add_str[128];
12632  unsigned char tag_str[128];
12633  unsigned char output[128];
12634  unsigned char tag_output[16];
12635  gcm_context ctx;
12636  unsigned int key_len;
12637  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
12638 
12639  memset(key_str, 0x00, 128);
12640  memset(src_str, 0x00, 128);
12641  memset(dst_str, 0x00, 257);
12642  memset(iv_str, 0x00, 128);
12643  memset(add_str, 0x00, 128);
12644  memset(tag_str, 0x00, 128);
12645  memset(output, 0x00, 128);
12646  memset(tag_output, 0x00, 16);
12647 
12648  key_len = unhexify( key_str, "2ce5a40618b8bb2d9fc1d87a3333a9cd4945cfa838c8e0c6" );
12649  pt_len = unhexify( src_str, "4ad4d103da3fb2ef8adcd1e0e823f4a857f1d6fa6273bb66574033c18ba2f760951ee0fdbe06c5cd3a0a30bd11142450f2d7e71af2fa7b9556b663fc30766508aa24e1fb2219f30ec23a6cd48b58944541d1f3e3fbf596e2ef263bddf789e7a666a68638081f0ec1a6cb3cb7feb0fddbe323b307675324ebceb25cba6d9002d4" );
12650  iv_len = unhexify( iv_str, "0c4b6c940d091efee98bf27fad79b04e" );
12651  add_len = unhexify( add_str, "" );
12652 
12653  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
12654  if( 0 == 0 )
12655  {
12656  fct_chk( 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 );
12657  hexify( dst_str, output, pt_len );
12658  hexify( tag_str, tag_output, tag_len );
12659 
12660  fct_chk( strcmp( (char *) dst_str, "ad611dd6ebaeb5a634d4bfba9f965948ea79d16294b976b7c8bb57240c5d13e10a9fe7a5b5d39143000b4f24fc331cc4988685c8d6401593a420c12e6cbd7cded06504d6a1034f70153f7b5019084a66ce818761841cab52d5bcb2a579a4acd9df50caf582bc6da2b94d4b3b78922850993ccec560795417016e55cfab651473" ) == 0 );
12661  fct_chk( strcmp( (char *) tag_str, "317596eefdc011081f1dda6dae748a53" ) == 0 );
12662  }
12663  }
12664  FCT_TEST_END();
12665 
12666 
12667  FCT_TEST_BGN(gcm_nist_validation_aes_19212810240128_2)
12668  {
12669  unsigned char key_str[128];
12670  unsigned char src_str[128];
12671  unsigned char dst_str[257];
12672  unsigned char iv_str[128];
12673  unsigned char add_str[128];
12674  unsigned char tag_str[128];
12675  unsigned char output[128];
12676  unsigned char tag_output[16];
12677  gcm_context ctx;
12678  unsigned int key_len;
12679  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
12680 
12681  memset(key_str, 0x00, 128);
12682  memset(src_str, 0x00, 128);
12683  memset(dst_str, 0x00, 257);
12684  memset(iv_str, 0x00, 128);
12685  memset(add_str, 0x00, 128);
12686  memset(tag_str, 0x00, 128);
12687  memset(output, 0x00, 128);
12688  memset(tag_output, 0x00, 16);
12689 
12690  key_len = unhexify( key_str, "f71d789a63213bbe17aa14f2956e9da2496a1efd1a63f6a5" );
12691  pt_len = unhexify( src_str, "f5bf20dc6a11ce5142ff34d6c4771dbee4e74790c4ccd3cb5af408a5c7bd706bac550d7ed56805f550efc7648ab501fbbc63a1070402626c5788f076ae40e6bef2b9aab9a4bd8550fe38f7cdb0fcca2657ca26f1f729074326f45ae932182905d849b1534d3effe20dbfc3fc26dc6453d6544d481e58891405dbf876d0f254e8" );
12692  iv_len = unhexify( iv_str, "17327996f18c7096fc5b8e375ed86f47" );
12693  add_len = unhexify( add_str, "" );
12694 
12695  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
12696  if( 0 == 0 )
12697  {
12698  fct_chk( 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 );
12699  hexify( dst_str, output, pt_len );
12700  hexify( tag_str, tag_output, tag_len );
12701 
12702  fct_chk( strcmp( (char *) dst_str, "fed961a497502b2e49043ff29b9426a1e864a7fe0a88281a1572fbe62203f071710ea1d77873906369b195919a7bd5b44cbabab6eee23c3692cb8b9e4db7ee595b8d4b063d209b11d64150c45545b7eda984144e1d336a3bd3f187834bbc6950b3e7cd84895a3a5e27f8394a9aa9b657fba77181c9040b741c12fc40e849ba4b" ) == 0 );
12703  fct_chk( strcmp( (char *) tag_str, "9dba8faf9d12905970ba0e29bc7e9dc4" ) == 0 );
12704  }
12705  }
12706  FCT_TEST_END();
12707 
12708 
12709  FCT_TEST_BGN(gcm_nist_validation_aes_19212810240120_0)
12710  {
12711  unsigned char key_str[128];
12712  unsigned char src_str[128];
12713  unsigned char dst_str[257];
12714  unsigned char iv_str[128];
12715  unsigned char add_str[128];
12716  unsigned char tag_str[128];
12717  unsigned char output[128];
12718  unsigned char tag_output[16];
12719  gcm_context ctx;
12720  unsigned int key_len;
12721  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
12722 
12723  memset(key_str, 0x00, 128);
12724  memset(src_str, 0x00, 128);
12725  memset(dst_str, 0x00, 257);
12726  memset(iv_str, 0x00, 128);
12727  memset(add_str, 0x00, 128);
12728  memset(tag_str, 0x00, 128);
12729  memset(output, 0x00, 128);
12730  memset(tag_output, 0x00, 16);
12731 
12732  key_len = unhexify( key_str, "83182ba753ac16554e873281599113b7620bdb042704bce8" );
12733  pt_len = unhexify( src_str, "6915d46189fcb0f9ab9b838da2124ce06398d638fec9c1c53f07a43fa0ea09feb2bf868fd1dd521f301f9f38e2e76716038f34cc0d18ab9bf27ac282dc349002427ca774e211027baacb9f6bfad6fd7885a665e508f654bb018f0323215153cd3a5b3e7b83482c08cf07ee5ef91d64a671b3ef22801ff21cfae95d6843ccdc16" );
12734  iv_len = unhexify( iv_str, "805c6b736d62f69a4c2cd4aa3745a615" );
12735  add_len = unhexify( add_str, "" );
12736 
12737  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
12738  if( 0 == 0 )
12739  {
12740  fct_chk( 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 );
12741  hexify( dst_str, output, pt_len );
12742  hexify( tag_str, tag_output, tag_len );
12743 
12744  fct_chk( strcmp( (char *) dst_str, "76dcefca6305ded697be4488513cc3fd3d9f08f06a7c1a9133b9b3fb0f44badf5c7544881b5babcb873cab912cc8a00337fc36100e6a5ad998eac5d8568795b41166377c5114757044b9b73206d19fc34b6378a06d55b5d5e9498c7693e818dd962af9b9da2345f4ebf152f33fe85f3398a65ad7dec823a1b1155c38cf67df84" ) == 0 );
12745  fct_chk( strcmp( (char *) tag_str, "746c9972aa8481253d0d54db77398a" ) == 0 );
12746  }
12747  }
12748  FCT_TEST_END();
12749 
12750 
12751  FCT_TEST_BGN(gcm_nist_validation_aes_19212810240120_1)
12752  {
12753  unsigned char key_str[128];
12754  unsigned char src_str[128];
12755  unsigned char dst_str[257];
12756  unsigned char iv_str[128];
12757  unsigned char add_str[128];
12758  unsigned char tag_str[128];
12759  unsigned char output[128];
12760  unsigned char tag_output[16];
12761  gcm_context ctx;
12762  unsigned int key_len;
12763  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
12764 
12765  memset(key_str, 0x00, 128);
12766  memset(src_str, 0x00, 128);
12767  memset(dst_str, 0x00, 257);
12768  memset(iv_str, 0x00, 128);
12769  memset(add_str, 0x00, 128);
12770  memset(tag_str, 0x00, 128);
12771  memset(output, 0x00, 128);
12772  memset(tag_output, 0x00, 16);
12773 
12774  key_len = unhexify( key_str, "b176e7a68da4c74aeb91760448c0257b1e17101299e1405c" );
12775  pt_len = unhexify( src_str, "691c436811f82e747468571f80fa8502ef5f25936fca58a8fb6b619a7a95f4938da558a3b26a2f09c8fc1f5bd347c7724d9fa377d0a52094bfaac88f3fa9b3dacc2f56d880e825809533da5980a63e01d6199fbea07f3d070e29c5d50e1013224f0ea86e7c008e3a2e63df394ef6ad93ea97d73fd4429feee495b144ef3a0d6c" );
12776  iv_len = unhexify( iv_str, "42e2e70b0096ebd489bfcf4d6ac0f2a4" );
12777  add_len = unhexify( add_str, "" );
12778 
12779  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
12780  if( 0 == 0 )
12781  {
12782  fct_chk( 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 );
12783  hexify( dst_str, output, pt_len );
12784  hexify( tag_str, tag_output, tag_len );
12785 
12786  fct_chk( strcmp( (char *) dst_str, "81f9c34c5b0668fd58ec8822c6ba75bd7eb0d1741260fad6ad5e637903aa29d5f5facaccb4b885f62e10b7371f9b6b43e3aeb69bc5093bcccd49f3ee744e49f87cd2a2c36c808c47e4687194cbfd4faec4da66b99e3d4ced9cb8ac6ffb94d7fef3ae2b92b9f613f2bda3ca6c8efa9c6df8bec998e455f6eb48519e8f8ce4e526" ) == 0 );
12787  fct_chk( strcmp( (char *) tag_str, "26d0921dbb7987ef4eb428c04a583d" ) == 0 );
12788  }
12789  }
12790  FCT_TEST_END();
12791 
12792 
12793  FCT_TEST_BGN(gcm_nist_validation_aes_19212810240120_2)
12794  {
12795  unsigned char key_str[128];
12796  unsigned char src_str[128];
12797  unsigned char dst_str[257];
12798  unsigned char iv_str[128];
12799  unsigned char add_str[128];
12800  unsigned char tag_str[128];
12801  unsigned char output[128];
12802  unsigned char tag_output[16];
12803  gcm_context ctx;
12804  unsigned int key_len;
12805  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
12806 
12807  memset(key_str, 0x00, 128);
12808  memset(src_str, 0x00, 128);
12809  memset(dst_str, 0x00, 257);
12810  memset(iv_str, 0x00, 128);
12811  memset(add_str, 0x00, 128);
12812  memset(tag_str, 0x00, 128);
12813  memset(output, 0x00, 128);
12814  memset(tag_output, 0x00, 16);
12815 
12816  key_len = unhexify( key_str, "8bab5bf1cd8f259129ce358cc56ace2bbbbaefa79727f66e" );
12817  pt_len = unhexify( src_str, "57385955b9909a0856bf54ad25d00779cd7d3dea78e1ae8965c4b7a568934d15ba1a7b2ab899f69fb1b864bd4d529319b51bf85a9b63de9cd51997ee4b2f015307cc42be9257e1b0a84e1c9e55a370476bff0a5325b21850f5b686a3bd4f1599f36d0772c406047b8ef29245c42ade862cb9d25b1e108db4f33a42dccf45c985" );
12818  iv_len = unhexify( iv_str, "ca5beea7dac2d9d24d548463977d5956" );
12819  add_len = unhexify( add_str, "" );
12820 
12821  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
12822  if( 0 == 0 )
12823  {
12824  fct_chk( 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 );
12825  hexify( dst_str, output, pt_len );
12826  hexify( tag_str, tag_output, tag_len );
12827 
12828  fct_chk( strcmp( (char *) dst_str, "67deff1accc4f279ec2eb4c2a515c17886371bc4847bdaff4aa70e170775b64855a6fb0d347baf39bb53d7239b7a63ce451effc69e8d8c3e544b77c75170a68cbc45dc96ad238aabeb5ebec159f38089b08dfbbe94e1d3934a95bd70f0b799fd84a8f563d629a5bfbb4eb3d4886b04e7dba5137d9255268dac36cbb5b5c8d35a" ) == 0 );
12829  fct_chk( strcmp( (char *) tag_str, "f212eaad0e2616a02c1ec475c039e0" ) == 0 );
12830  }
12831  }
12832  FCT_TEST_END();
12833 
12834 
12835  FCT_TEST_BGN(gcm_nist_validation_aes_19212810240112_0)
12836  {
12837  unsigned char key_str[128];
12838  unsigned char src_str[128];
12839  unsigned char dst_str[257];
12840  unsigned char iv_str[128];
12841  unsigned char add_str[128];
12842  unsigned char tag_str[128];
12843  unsigned char output[128];
12844  unsigned char tag_output[16];
12845  gcm_context ctx;
12846  unsigned int key_len;
12847  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
12848 
12849  memset(key_str, 0x00, 128);
12850  memset(src_str, 0x00, 128);
12851  memset(dst_str, 0x00, 257);
12852  memset(iv_str, 0x00, 128);
12853  memset(add_str, 0x00, 128);
12854  memset(tag_str, 0x00, 128);
12855  memset(output, 0x00, 128);
12856  memset(tag_output, 0x00, 16);
12857 
12858  key_len = unhexify( key_str, "bd0e0d0c7907bdb4b4e60510f73d8ab2a30700349206ce22" );
12859  pt_len = unhexify( src_str, "e6835a650047033a4940f72029857fae6fff2773f2aa0e4f7cb0a4abe86b6e8cb0c3e468637057f7eb20d1d30723e3c3107d0f579e31a4c3e6fa8133e1b1b51fd21a8aa80ec657c4f674c032bc4a2d3e1389cb877883317c4451ab90692337bd8aa6e9312388a0acddb508fa477cc30eb33a886e8fbced97492c9d3733cf3fc2" );
12860  iv_len = unhexify( iv_str, "1f183eea676c7ed2ead9a31928f4df5c" );
12861  add_len = unhexify( add_str, "" );
12862 
12863  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
12864  if( 0 == 0 )
12865  {
12866  fct_chk( 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 );
12867  hexify( dst_str, output, pt_len );
12868  hexify( tag_str, tag_output, tag_len );
12869 
12870  fct_chk( strcmp( (char *) dst_str, "9f1a3017d16024dbfea4ba9df5154a6a2c794f00da070043c17f0204f06f637c8fffc760424187dce4fef044faccadefa1b1bd818522915e389d307caa481af0f1f767c38216fa048f621d46880afca5c8fc582853dec95d19d19cc943e9a1861597c99041c59e8bf8e7245f9e30b1f6607843a978d0ae7a4e0f716dabc9d9f6" ) == 0 );
12871  fct_chk( strcmp( (char *) tag_str, "4ceea20bf9616eb73cac15fe7e2f" ) == 0 );
12872  }
12873  }
12874  FCT_TEST_END();
12875 
12876 
12877  FCT_TEST_BGN(gcm_nist_validation_aes_19212810240112_1)
12878  {
12879  unsigned char key_str[128];
12880  unsigned char src_str[128];
12881  unsigned char dst_str[257];
12882  unsigned char iv_str[128];
12883  unsigned char add_str[128];
12884  unsigned char tag_str[128];
12885  unsigned char output[128];
12886  unsigned char tag_output[16];
12887  gcm_context ctx;
12888  unsigned int key_len;
12889  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
12890 
12891  memset(key_str, 0x00, 128);
12892  memset(src_str, 0x00, 128);
12893  memset(dst_str, 0x00, 257);
12894  memset(iv_str, 0x00, 128);
12895  memset(add_str, 0x00, 128);
12896  memset(tag_str, 0x00, 128);
12897  memset(output, 0x00, 128);
12898  memset(tag_output, 0x00, 16);
12899 
12900  key_len = unhexify( key_str, "d59c476dcef60a45be253d5cfbb24742de9e3879bdfe6949" );
12901  pt_len = unhexify( src_str, "144696d85126c682f8446fcc2724fabe4b8840d46f3de6ae2ceacb2f06a1a80fed430e3a0242f4f7c308611c802c8b8e9c992b78a5cf401fe7a4671bf081f97520919f02b66e8bffd4fe3f4a69cf3d16667e7724890cc4b66c6ae487d2d987bfacec424fdc9865af4474b04cce03fffc828b2df66d99087e63f35eca52abe864" );
12902  iv_len = unhexify( iv_str, "9bca808f02295477f2aa7f6ac1a7bfe5" );
12903  add_len = unhexify( add_str, "" );
12904 
12905  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
12906  if( 0 == 0 )
12907  {
12908  fct_chk( 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 );
12909  hexify( dst_str, output, pt_len );
12910  hexify( tag_str, tag_output, tag_len );
12911 
12912  fct_chk( strcmp( (char *) dst_str, "9d23989edd8dd9911a3f5a80de051ec7812c6ce018e683751380ff990a079f3502ec0fabfcdacf6c1fb2503094124c39ec531b5d29ee8e4e46c324fc10dbe0f31e9aa56522bcc7085ccf768425227cbab6db4127671a4cab7bc65dc1d3d9d81469493329e29a9a1cb7e5e088e84eb243493cdf1a49b16fc8d4ea2f142aa9ad23" ) == 0 );
12913  fct_chk( strcmp( (char *) tag_str, "d8b20d72d95a44dfb899bc6aea25" ) == 0 );
12914  }
12915  }
12916  FCT_TEST_END();
12917 
12918 
12919  FCT_TEST_BGN(gcm_nist_validation_aes_19212810240112_2)
12920  {
12921  unsigned char key_str[128];
12922  unsigned char src_str[128];
12923  unsigned char dst_str[257];
12924  unsigned char iv_str[128];
12925  unsigned char add_str[128];
12926  unsigned char tag_str[128];
12927  unsigned char output[128];
12928  unsigned char tag_output[16];
12929  gcm_context ctx;
12930  unsigned int key_len;
12931  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
12932 
12933  memset(key_str, 0x00, 128);
12934  memset(src_str, 0x00, 128);
12935  memset(dst_str, 0x00, 257);
12936  memset(iv_str, 0x00, 128);
12937  memset(add_str, 0x00, 128);
12938  memset(tag_str, 0x00, 128);
12939  memset(output, 0x00, 128);
12940  memset(tag_output, 0x00, 16);
12941 
12942  key_len = unhexify( key_str, "2f1594e840375405a682dbc1836344be8c6b3f3199ee7fd6" );
12943  pt_len = unhexify( src_str, "9bc6b715c65347a383f77000b3efb33b16019d01605159e09c116ded52d20721bcdde3796b6f4dc33cb29ce1c48438e95d4db6102465440cecaa50ca33ebce470d8986663652e069079f9d92ff167b3f7ae568218fc62ff5a7be50b3b987dab4fc7979e5967bb0574de4bc51e774ba05f9780a49ac7b3ea46fdf35804e740812" );
12944  iv_len = unhexify( iv_str, "7f1f4a80210bcc243877fccd3e7cd42e" );
12945  add_len = unhexify( add_str, "" );
12946 
12947  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
12948  if( 0 == 0 )
12949  {
12950  fct_chk( 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 );
12951  hexify( dst_str, output, pt_len );
12952  hexify( tag_str, tag_output, tag_len );
12953 
12954  fct_chk( strcmp( (char *) dst_str, "773d6901ea64d6840ded9a05a7351c0c74737ad27e7c3dbd38dedcdede94722ae67e88851ee471aefc1f80b29a7312fa2a6f178ef2c9dde729717977e85783e2e49a1fa2e847d830fac181e95fe30077b338b9ac5d2cfa22ff9348a0771054322bc717343b9a686dafda02d6354cf9b53c932da1712b9bb352b2380de3208530" ) == 0 );
12955  fct_chk( strcmp( (char *) tag_str, "fc3e0ca7de8fb79eb6851b7bca16" ) == 0 );
12956  }
12957  }
12958  FCT_TEST_END();
12959 
12960 
12961  FCT_TEST_BGN(gcm_nist_validation_aes_19212810240104_0)
12962  {
12963  unsigned char key_str[128];
12964  unsigned char src_str[128];
12965  unsigned char dst_str[257];
12966  unsigned char iv_str[128];
12967  unsigned char add_str[128];
12968  unsigned char tag_str[128];
12969  unsigned char output[128];
12970  unsigned char tag_output[16];
12971  gcm_context ctx;
12972  unsigned int key_len;
12973  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
12974 
12975  memset(key_str, 0x00, 128);
12976  memset(src_str, 0x00, 128);
12977  memset(dst_str, 0x00, 257);
12978  memset(iv_str, 0x00, 128);
12979  memset(add_str, 0x00, 128);
12980  memset(tag_str, 0x00, 128);
12981  memset(output, 0x00, 128);
12982  memset(tag_output, 0x00, 16);
12983 
12984  key_len = unhexify( key_str, "88a6d441c1b7472aecf92c294f56f3c1da1702d174eff431" );
12985  pt_len = unhexify( src_str, "eecc12fbd00c636a7ff897c244593239d2dbca9d1f370660c9bf9759cc41dc6e95075516f8d7fc06fa91ff68701777725171c2dc0767a1953fac13008d77065cce8ee329283d3f64adb8a298aa100c42e75d62e47fbf5134a21b826fcc89ebb18707c0f4d54f6e93220484706a23a737341c601b56f6a28cc8659da56b6b51b1" );
12986  iv_len = unhexify( iv_str, "058a37eaee052daf7d1cd0e618f69a6c" );
12987  add_len = unhexify( add_str, "" );
12988 
12989  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
12990  if( 0 == 0 )
12991  {
12992  fct_chk( 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 );
12993  hexify( dst_str, output, pt_len );
12994  hexify( tag_str, tag_output, tag_len );
12995 
12996  fct_chk( strcmp( (char *) dst_str, "0f5e889deff370810ed2911f349481dfb34e8a9623abd657a9a2dc14df43dc8917451ddeee5f967af832296b148d6a5d267be4443e54cef2e21c06da74f9a614cf29ead3ca4f267068716a9fd208aefa6a9f4a8a40deee8c9fa7da76a70fcb4e6db8abc566ccdf97688aaad1a889ac505792b5ede95c57422dfec785c5e471b0" ) == 0 );
12997  fct_chk( strcmp( (char *) tag_str, "5fa75148886e255a4833850d7f" ) == 0 );
12998  }
12999  }
13000  FCT_TEST_END();
13001 
13002 
13003  FCT_TEST_BGN(gcm_nist_validation_aes_19212810240104_1)
13004  {
13005  unsigned char key_str[128];
13006  unsigned char src_str[128];
13007  unsigned char dst_str[257];
13008  unsigned char iv_str[128];
13009  unsigned char add_str[128];
13010  unsigned char tag_str[128];
13011  unsigned char output[128];
13012  unsigned char tag_output[16];
13013  gcm_context ctx;
13014  unsigned int key_len;
13015  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
13016 
13017  memset(key_str, 0x00, 128);
13018  memset(src_str, 0x00, 128);
13019  memset(dst_str, 0x00, 257);
13020  memset(iv_str, 0x00, 128);
13021  memset(add_str, 0x00, 128);
13022  memset(tag_str, 0x00, 128);
13023  memset(output, 0x00, 128);
13024  memset(tag_output, 0x00, 16);
13025 
13026  key_len = unhexify( key_str, "abb4c4f8d3c44f07d5a57acba6ccf7852030daa84d09e13a" );
13027  pt_len = unhexify( src_str, "24d82903e5074beb9a769f24a99b18c7b53c160a3c3ae4065335bec1c4170aa4c656bd7c87a8a13c0ffc6653c045445bf8a135d25a13b2d44a32c219adc6ea2695fb9e8c65f3c454dc0e2772f4a4ce51ff62ad34064b31b0f664f635de0c46530c966b54e8a081042309afb8cf1f337625fa27c0cc9e628c4ae402cbf57b813a" );
13028  iv_len = unhexify( iv_str, "c9489a51152eec2f8f1699f733dc98f5" );
13029  add_len = unhexify( add_str, "" );
13030 
13031  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
13032  if( 0 == 0 )
13033  {
13034  fct_chk( 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 );
13035  hexify( dst_str, output, pt_len );
13036  hexify( tag_str, tag_output, tag_len );
13037 
13038  fct_chk( strcmp( (char *) dst_str, "3e5528ab16aed5be8d016fe07f2ff7ac4d393439c4fe0d55437a68967d685815e359fdb8f77d68241940ce7b1947c5a98f515216254ac29977cc2a591fc8e580241442d08facbdbee9a9ff7cfbde7004346772b4607dafb91c8f66f712abee557d3da675bb3130e978a1e692fa75236676b9205341ead5277cc306f05e4eaea0" ) == 0 );
13039  fct_chk( strcmp( (char *) tag_str, "fecca951ba45f5a7829be8421e" ) == 0 );
13040  }
13041  }
13042  FCT_TEST_END();
13043 
13044 
13045  FCT_TEST_BGN(gcm_nist_validation_aes_19212810240104_2)
13046  {
13047  unsigned char key_str[128];
13048  unsigned char src_str[128];
13049  unsigned char dst_str[257];
13050  unsigned char iv_str[128];
13051  unsigned char add_str[128];
13052  unsigned char tag_str[128];
13053  unsigned char output[128];
13054  unsigned char tag_output[16];
13055  gcm_context ctx;
13056  unsigned int key_len;
13057  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
13058 
13059  memset(key_str, 0x00, 128);
13060  memset(src_str, 0x00, 128);
13061  memset(dst_str, 0x00, 257);
13062  memset(iv_str, 0x00, 128);
13063  memset(add_str, 0x00, 128);
13064  memset(tag_str, 0x00, 128);
13065  memset(output, 0x00, 128);
13066  memset(tag_output, 0x00, 16);
13067 
13068  key_len = unhexify( key_str, "cbce5e6d0fdcd3ab08ccd86115149b5569584dfadf40256d" );
13069  pt_len = unhexify( src_str, "3974339a1b90b19fd3857d812a0e59dcf43f9b0f360839940b99834ddedead79785396ab8fd0fc0e523c06f0555371fd5bc857a95c3ead26536e6deb1faabdc776ac7cfec4b60d9c24b0856ecf381efd98f941d5b2a38108922d9cf1113d1e484354b55f9c0f09d95a77fd30ec9cc04d19199931e187c56fd231f96fce5e1eb4" );
13070  iv_len = unhexify( iv_str, "ae3a25be73876b6e9dc88573d617653a" );
13071  add_len = unhexify( add_str, "" );
13072 
13073  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
13074  if( 0 == 0 )
13075  {
13076  fct_chk( 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 );
13077  hexify( dst_str, output, pt_len );
13078  hexify( tag_str, tag_output, tag_len );
13079 
13080  fct_chk( strcmp( (char *) dst_str, "4f57be0de00ca2c7c52c54b931c235fecb4ee1e5a30e29bf68f57248bafad87e484cc68465d9f64bbf502cefd2c84e5596c3c8e58a9fb51a8c8b132579a94bc32e92f7c7247dc5f69fda98727c423de5430f01b37d77e3ae6bcd06eaf5625e5c7c9c228b9dca5aad8f571369fe0964731bf1f143f2f709c7ed51641ecfc88ebc" ) == 0 );
13081  fct_chk( strcmp( (char *) tag_str, "33375e21fd8df9f0196198b4b1" ) == 0 );
13082  }
13083  }
13084  FCT_TEST_END();
13085 
13086 
13087  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024096_0)
13088  {
13089  unsigned char key_str[128];
13090  unsigned char src_str[128];
13091  unsigned char dst_str[257];
13092  unsigned char iv_str[128];
13093  unsigned char add_str[128];
13094  unsigned char tag_str[128];
13095  unsigned char output[128];
13096  unsigned char tag_output[16];
13097  gcm_context ctx;
13098  unsigned int key_len;
13099  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
13100 
13101  memset(key_str, 0x00, 128);
13102  memset(src_str, 0x00, 128);
13103  memset(dst_str, 0x00, 257);
13104  memset(iv_str, 0x00, 128);
13105  memset(add_str, 0x00, 128);
13106  memset(tag_str, 0x00, 128);
13107  memset(output, 0x00, 128);
13108  memset(tag_output, 0x00, 16);
13109 
13110  key_len = unhexify( key_str, "96779eaa8699469e2a3bfae8a03fd4bff7abc62d427ff985" );
13111  pt_len = unhexify( src_str, "a343fd32fc513e0e9772acbf99feafe9de4b54e404807999b02e921e0914b2d64d0d402ef06f31e1db852899fb6db231ad4465af015b0c16407fa3666ef5c2a6d52d5b4f60b0f7fbcb13574b2aa5183393f3a91b455a85b3ed99d619bc9c5c2dbcc4f0a61a7b03e5ab98a99cee086be408ce394203f02d6d23a1e75df44a4a20" );
13112  iv_len = unhexify( iv_str, "cd7dca2969872581d51b24af40f22c6f" );
13113  add_len = unhexify( add_str, "" );
13114 
13115  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
13116  if( 0 == 0 )
13117  {
13118  fct_chk( 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 );
13119  hexify( dst_str, output, pt_len );
13120  hexify( tag_str, tag_output, tag_len );
13121 
13122  fct_chk( strcmp( (char *) dst_str, "74422abbde6e4ab674025735874d95d9fe3015620a8f748dbed63ef0e2271063b6c0d65e00d41bcf4ea86ac8b922b4d475f904c0724f0adebc2eef4a3abd0f9efd75408cc054cbd400436e0545e09e6b0bc83a9c7d1c1717589d180c7b1d4fe4ca18bde4d9b6bc98481b7971c7eb81c391ac4dd79cdefeabb5bbc210d914d30c" ) == 0 );
13123  fct_chk( strcmp( (char *) tag_str, "b0e425435fd2c8a911808ba5" ) == 0 );
13124  }
13125  }
13126  FCT_TEST_END();
13127 
13128 
13129  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024096_1)
13130  {
13131  unsigned char key_str[128];
13132  unsigned char src_str[128];
13133  unsigned char dst_str[257];
13134  unsigned char iv_str[128];
13135  unsigned char add_str[128];
13136  unsigned char tag_str[128];
13137  unsigned char output[128];
13138  unsigned char tag_output[16];
13139  gcm_context ctx;
13140  unsigned int key_len;
13141  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
13142 
13143  memset(key_str, 0x00, 128);
13144  memset(src_str, 0x00, 128);
13145  memset(dst_str, 0x00, 257);
13146  memset(iv_str, 0x00, 128);
13147  memset(add_str, 0x00, 128);
13148  memset(tag_str, 0x00, 128);
13149  memset(output, 0x00, 128);
13150  memset(tag_output, 0x00, 16);
13151 
13152  key_len = unhexify( key_str, "39bfb4cf533d71c02932e1cd7b800dca9ce9bca843886962" );
13153  pt_len = unhexify( src_str, "de76f63ecf9c8d4643599f4dc3f9ed837924915ce4216759013cdb46daa0a508e06bcdb77437b0a58c40a0bd30a05ca41433218c6869f1ecd26318aff27999a2ebbb651de8e03061b8ffe3e14060720eb35a8e4dfd8c870aa4562291e3758cc1ea6c4b0fafcf210e10b31f8521bb0f6b29e8450b0cd6f8c8196ca2f7acb807a3" );
13154  iv_len = unhexify( iv_str, "d2b937bb5d2ea7d54d2b96826433f297" );
13155  add_len = unhexify( add_str, "" );
13156 
13157  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
13158  if( 0 == 0 )
13159  {
13160  fct_chk( 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 );
13161  hexify( dst_str, output, pt_len );
13162  hexify( tag_str, tag_output, tag_len );
13163 
13164  fct_chk( strcmp( (char *) dst_str, "0b0b4c92f06b17103ed581fb32d46e874fea2a2171d32aac331daa4d6c863f844fbbad72e455cd5a3ef941d8cf667fed5855da6df0ccd0c61d99b2e40a0d697368138be510a2bf2e08a7648850d2410e4a179a6d0193e49a135524092ab1f842ed4057611daaeb93e7aa46e5618b354a1091a9e77fb92a8c3c0e8e017f72deb3" ) == 0 );
13165  fct_chk( strcmp( (char *) tag_str, "a188107e506c91484e632229" ) == 0 );
13166  }
13167  }
13168  FCT_TEST_END();
13169 
13170 
13171  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024096_2)
13172  {
13173  unsigned char key_str[128];
13174  unsigned char src_str[128];
13175  unsigned char dst_str[257];
13176  unsigned char iv_str[128];
13177  unsigned char add_str[128];
13178  unsigned char tag_str[128];
13179  unsigned char output[128];
13180  unsigned char tag_output[16];
13181  gcm_context ctx;
13182  unsigned int key_len;
13183  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
13184 
13185  memset(key_str, 0x00, 128);
13186  memset(src_str, 0x00, 128);
13187  memset(dst_str, 0x00, 257);
13188  memset(iv_str, 0x00, 128);
13189  memset(add_str, 0x00, 128);
13190  memset(tag_str, 0x00, 128);
13191  memset(output, 0x00, 128);
13192  memset(tag_output, 0x00, 16);
13193 
13194  key_len = unhexify( key_str, "41b7d80ae487ac35aa498e5939a0f27baeedf48a494c8e91" );
13195  pt_len = unhexify( src_str, "c26d4b918a0c967141fb5712a28698d16640d200b2934187b81ec58486b706ea1caaeb654e5fbbc0d078215aceed7d66939e0fb54d6131d8948cf58ec9571646ca75a051c2b5c98fe16f7733d42e5897b0263272015042f3134143ea3b08bc65292d8d31f30f2ed9830ccbfca2d33d290c28f4dad07c7137a4ca05f432a457c2" );
13196  iv_len = unhexify( iv_str, "626e1d936b38cf9c4c3a44ee669936ed" );
13197  add_len = unhexify( add_str, "" );
13198 
13199  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
13200  if( 0 == 0 )
13201  {
13202  fct_chk( 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 );
13203  hexify( dst_str, output, pt_len );
13204  hexify( tag_str, tag_output, tag_len );
13205 
13206  fct_chk( strcmp( (char *) dst_str, "8998e799985890d0f7e8b0fc12a8a9c63171e456ef5cb211f836a2dc7c9e3f4d1cd6280f9b0c469b703c55876b57cd1d8cef70dc745e3af8438d878cb2fe9fb1c5b2d9a2d90edf3bc5702ef3630d316574c07b5629f0db1510460af8e537dcf28d9c5b5cec6996eaa3dcde3354e39f60d5d896d8bb92718a758adb5cb9cc17d5" ) == 0 );
13207  fct_chk( strcmp( (char *) tag_str, "69901cbafe637de5963e7331" ) == 0 );
13208  }
13209  }
13210  FCT_TEST_END();
13211 
13212 
13213  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024064_0)
13214  {
13215  unsigned char key_str[128];
13216  unsigned char src_str[128];
13217  unsigned char dst_str[257];
13218  unsigned char iv_str[128];
13219  unsigned char add_str[128];
13220  unsigned char tag_str[128];
13221  unsigned char output[128];
13222  unsigned char tag_output[16];
13223  gcm_context ctx;
13224  unsigned int key_len;
13225  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
13226 
13227  memset(key_str, 0x00, 128);
13228  memset(src_str, 0x00, 128);
13229  memset(dst_str, 0x00, 257);
13230  memset(iv_str, 0x00, 128);
13231  memset(add_str, 0x00, 128);
13232  memset(tag_str, 0x00, 128);
13233  memset(output, 0x00, 128);
13234  memset(tag_output, 0x00, 16);
13235 
13236  key_len = unhexify( key_str, "2ecce8fb50a28a085af744b44bc0ea59d6bc2c8ff1f2ff8e" );
13237  pt_len = unhexify( src_str, "54300bfd55b227b4758cf64d8a3f56cb49b436adb4b927afa8c4b70d2584a6cba425af4fbc3840dd6f2e313f793cbc7aca8219f171c809cf1eb9b4ae8a9d0cf1a7aa203d38d67cf7719ce2248d751e8605548118e5bb9ce364349944a2205e1b77137270b83555d5d804edba2f74400f26d2d0d28eb29d7beb91e80ad66b60be" );
13238  iv_len = unhexify( iv_str, "b7e43d859697efe6681e8d0c66096d50" );
13239  add_len = unhexify( add_str, "" );
13240 
13241  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
13242  if( 0 == 0 )
13243  {
13244  fct_chk( 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 );
13245  hexify( dst_str, output, pt_len );
13246  hexify( tag_str, tag_output, tag_len );
13247 
13248  fct_chk( strcmp( (char *) dst_str, "45dac078c05e6a2c480543d406c23f3dda63f2b616007d08fbfb075a90eefab8dfbc26d334266f5d72fbc52800cf457f2bbc8062a895f75e86df7b8d87112386c9bad85573431ccfcef6a5e96d717fc37b08673bf4a5eecedf1a8215a8538e1ddb11d31a24cb1497c7b5ba380576acb9d641d71412a675f29d7abd750d84dfd1" ) == 0 );
13249  fct_chk( strcmp( (char *) tag_str, "2dfe162c577dc410" ) == 0 );
13250  }
13251  }
13252  FCT_TEST_END();
13253 
13254 
13255  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024064_1)
13256  {
13257  unsigned char key_str[128];
13258  unsigned char src_str[128];
13259  unsigned char dst_str[257];
13260  unsigned char iv_str[128];
13261  unsigned char add_str[128];
13262  unsigned char tag_str[128];
13263  unsigned char output[128];
13264  unsigned char tag_output[16];
13265  gcm_context ctx;
13266  unsigned int key_len;
13267  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
13268 
13269  memset(key_str, 0x00, 128);
13270  memset(src_str, 0x00, 128);
13271  memset(dst_str, 0x00, 257);
13272  memset(iv_str, 0x00, 128);
13273  memset(add_str, 0x00, 128);
13274  memset(tag_str, 0x00, 128);
13275  memset(output, 0x00, 128);
13276  memset(tag_output, 0x00, 16);
13277 
13278  key_len = unhexify( key_str, "6773e627f6c49a1687a3a75d2ee6754ebfc2628bdfceba28" );
13279  pt_len = unhexify( src_str, "eb0a64ad510968c68a816550d9fe2eccab3bd8409ab5a685a8638f81b4b50a9a96318bff4e86f7f6e9076960be8eef60e72cee4ea81f3ba269d8ab4c9581a54638421520a6411a83e9dc83b6981a9dcdd9e4a367d57f156d131cf385c01a736b327218e6b6468d317ff78a01f1588c359a3a9b188bbe5d3ffad6b57483a976d0" );
13280  iv_len = unhexify( iv_str, "ad85becb03a05caa4533b88940ca141a" );
13281  add_len = unhexify( add_str, "" );
13282 
13283  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
13284  if( 0 == 0 )
13285  {
13286  fct_chk( 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 );
13287  hexify( dst_str, output, pt_len );
13288  hexify( tag_str, tag_output, tag_len );
13289 
13290  fct_chk( strcmp( (char *) dst_str, "959658fdff5fd802fca5c5a79d59536ba8ef1359ac7bfff81264c7827bd31b8f02ecb54f309b442a54a5a57c588ace4b49463f030b325880e7e334b43ab6a2fce469907055e548caffa2fe4679edbe291377c16c7096a48aef5659ad37702aed774188cb4426c3b727878755d683ed8c163a98a05f069a0a3c22085600759170" ) == 0 );
13291  fct_chk( strcmp( (char *) tag_str, "4c0f4621b04b5667" ) == 0 );
13292  }
13293  }
13294  FCT_TEST_END();
13295 
13296 
13297  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024064_2)
13298  {
13299  unsigned char key_str[128];
13300  unsigned char src_str[128];
13301  unsigned char dst_str[257];
13302  unsigned char iv_str[128];
13303  unsigned char add_str[128];
13304  unsigned char tag_str[128];
13305  unsigned char output[128];
13306  unsigned char tag_output[16];
13307  gcm_context ctx;
13308  unsigned int key_len;
13309  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
13310 
13311  memset(key_str, 0x00, 128);
13312  memset(src_str, 0x00, 128);
13313  memset(dst_str, 0x00, 257);
13314  memset(iv_str, 0x00, 128);
13315  memset(add_str, 0x00, 128);
13316  memset(tag_str, 0x00, 128);
13317  memset(output, 0x00, 128);
13318  memset(tag_output, 0x00, 16);
13319 
13320  key_len = unhexify( key_str, "1c086f7404c14160f33d6efde231eda610f92fa55ac147b4" );
13321  pt_len = unhexify( src_str, "fc8e5cd81755e489de7e3ddd2b587149ee013bffa2ce198c514641b0e1659261edd60bdbfd873e30e399869748bfe56ba543ceb9bf5fd0e7ba2b4dc175c52f28a8a02b4816f2056648e90faf654368c64f54fd50b41ea7ca199d766728980e2ebd11246c28cfc9a0a1e11cf0df7765819af23c70f920c3efb5e2663949aaa301" );
13322  iv_len = unhexify( iv_str, "71f154f1dc19bae34b58f3d160bb432a" );
13323  add_len = unhexify( add_str, "" );
13324 
13325  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
13326  if( 0 == 0 )
13327  {
13328  fct_chk( 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 );
13329  hexify( dst_str, output, pt_len );
13330  hexify( tag_str, tag_output, tag_len );
13331 
13332  fct_chk( strcmp( (char *) dst_str, "6d60da2fd060d2aec35faf989d8df33f2413ba14842b0406e38a6a847e191eac9f4570cea647c3988faaa5505ea20f99132df2a8799cf0543e204962da1fd4f60523d7149e0dee77c16590d7e114ac5d8f88fa371dcdd254eccaa8316ee922ba23a0a07b289739413ddffc2c709c391afee9289252ddf3ddb62a4532a5515e35" ) == 0 );
13333  fct_chk( strcmp( (char *) tag_str, "f47bae6488f038fe" ) == 0 );
13334  }
13335  }
13336  FCT_TEST_END();
13337 
13338 
13339  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024032_0)
13340  {
13341  unsigned char key_str[128];
13342  unsigned char src_str[128];
13343  unsigned char dst_str[257];
13344  unsigned char iv_str[128];
13345  unsigned char add_str[128];
13346  unsigned char tag_str[128];
13347  unsigned char output[128];
13348  unsigned char tag_output[16];
13349  gcm_context ctx;
13350  unsigned int key_len;
13351  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
13352 
13353  memset(key_str, 0x00, 128);
13354  memset(src_str, 0x00, 128);
13355  memset(dst_str, 0x00, 257);
13356  memset(iv_str, 0x00, 128);
13357  memset(add_str, 0x00, 128);
13358  memset(tag_str, 0x00, 128);
13359  memset(output, 0x00, 128);
13360  memset(tag_output, 0x00, 16);
13361 
13362  key_len = unhexify( key_str, "bae1b3eef91ba79032117c60fb847d46f18175565d0ed10c" );
13363  pt_len = unhexify( src_str, "9b71eeccdc91cb5f7a567a9189774f4c30d96477b88ac553df66b78a56e5c9e0986a17d80c811116d31985acfbf9d7a9bed291aa2fb6329457a836b3f8f11c16416f0a3b86dd9c717c8a050c6ceb5c27d8e2ee0dbe63f3e1e4f0aff4809e1f6f6ed64d31d494b7399cfa0dd9446321bd4256a49d0793a10a670e3f086408428e" );
13364  iv_len = unhexify( iv_str, "cec8b66a657e4bdf693f48ac52e60770" );
13365  add_len = unhexify( add_str, "" );
13366 
13367  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
13368  if( 0 == 0 )
13369  {
13370  fct_chk( 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 );
13371  hexify( dst_str, output, pt_len );
13372  hexify( tag_str, tag_output, tag_len );
13373 
13374  fct_chk( strcmp( (char *) dst_str, "015a318acb6198189ce908ab1af28578a37a48beeed772c6ed4dceb0a3bcb092df85f653234c56a25c075c8e028d4a8d90d974fb0477834ae2de8d5df53d0d03a979450b6e7a66fdc9b11f879ea9072699837f2de7192156f8e5d9411fd83d97d31fe63ece4e4326ff50a24fc75004a5ba2bd4845b29e0794696943dff1e5d6e" ) == 0 );
13375  fct_chk( strcmp( (char *) tag_str, "9cf6f90a" ) == 0 );
13376  }
13377  }
13378  FCT_TEST_END();
13379 
13380 
13381  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024032_1)
13382  {
13383  unsigned char key_str[128];
13384  unsigned char src_str[128];
13385  unsigned char dst_str[257];
13386  unsigned char iv_str[128];
13387  unsigned char add_str[128];
13388  unsigned char tag_str[128];
13389  unsigned char output[128];
13390  unsigned char tag_output[16];
13391  gcm_context ctx;
13392  unsigned int key_len;
13393  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
13394 
13395  memset(key_str, 0x00, 128);
13396  memset(src_str, 0x00, 128);
13397  memset(dst_str, 0x00, 257);
13398  memset(iv_str, 0x00, 128);
13399  memset(add_str, 0x00, 128);
13400  memset(tag_str, 0x00, 128);
13401  memset(output, 0x00, 128);
13402  memset(tag_output, 0x00, 16);
13403 
13404  key_len = unhexify( key_str, "7c1582240ad301f831902c66334546dd681c12308add0870" );
13405  pt_len = unhexify( src_str, "d4b716b49858a23aad478581cbb6dfd015ae550d76497229b5b1776e83f2ded8542675c63ca6a007a204b497ed2ef71ca125d91f386be9b4213cd352a797a5d78a1373f00916bb993de14e1a0af67524acfcc9fd71daa32e5def9a3f2dab5b3bba4d2f9f2cfc5f52768b41157fe79d95229d0611944e8308ec76425a966b21ec" );
13406  iv_len = unhexify( iv_str, "b6f4f3959914df413b849d559dd43055" );
13407  add_len = unhexify( add_str, "" );
13408 
13409  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
13410  if( 0 == 0 )
13411  {
13412  fct_chk( 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 );
13413  hexify( dst_str, output, pt_len );
13414  hexify( tag_str, tag_output, tag_len );
13415 
13416  fct_chk( strcmp( (char *) dst_str, "79964f8775c78009bca1b218c03056b659e5382e25e43759c8adfa78aec48d70b32ffd56b230fc1ce8c21636a80a8c150e5dbb2bd3f51607d97ed097617963dc6e7653126fe40cb36a7f71051d77e4f3b768a85ee707c45d33cc67473f94c31da3e8b4c21859002331b5f7350e3e8f9806209255ceac7089176e9d6b70abd484" ) == 0 );
13417  fct_chk( strcmp( (char *) tag_str, "79e5a00b" ) == 0 );
13418  }
13419  }
13420  FCT_TEST_END();
13421 
13422 
13423  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024032_2)
13424  {
13425  unsigned char key_str[128];
13426  unsigned char src_str[128];
13427  unsigned char dst_str[257];
13428  unsigned char iv_str[128];
13429  unsigned char add_str[128];
13430  unsigned char tag_str[128];
13431  unsigned char output[128];
13432  unsigned char tag_output[16];
13433  gcm_context ctx;
13434  unsigned int key_len;
13435  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
13436 
13437  memset(key_str, 0x00, 128);
13438  memset(src_str, 0x00, 128);
13439  memset(dst_str, 0x00, 257);
13440  memset(iv_str, 0x00, 128);
13441  memset(add_str, 0x00, 128);
13442  memset(tag_str, 0x00, 128);
13443  memset(output, 0x00, 128);
13444  memset(tag_output, 0x00, 16);
13445 
13446  key_len = unhexify( key_str, "fd55a356943824d20630b1539627ad1a9dcd8ee2cb4dbf49" );
13447  pt_len = unhexify( src_str, "b8d8d6dd0631f9183ca858033a31dd583d3ee3b9510fcc69d8cd412016bf854b9edcf65c2831e63d72f4cb61a99f6f4e6dab0c2ce9c5a8cdbc179ae93aaca2c8a5b848a15309be9b34e5226aa9a5908f543fdda983fec02e4073edcc3985da5222b53f8c84b9c54c78dd8b2712b59209463595c7552e28f2a45f51cb882c0354" );
13448  iv_len = unhexify( iv_str, "aa89a122c68e997d0326984fa5bef805" );
13449  add_len = unhexify( add_str, "" );
13450 
13451  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
13452  if( 0 == 0 )
13453  {
13454  fct_chk( 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 );
13455  hexify( dst_str, output, pt_len );
13456  hexify( tag_str, tag_output, tag_len );
13457 
13458  fct_chk( strcmp( (char *) dst_str, "107a9ed561e6c45c375d31dea321c7b4a4b7641024d2c9eef6a103a750ba15e1acacbcae121510b4f56f19d29e6fb3e6fc06950b1daa521528f42284130a40e5a6c1b58b3b28003673511abcf59a4b9df1548a00f769d8681978b632f75e5da2cf21b499a24fbdd4f7efe053d4a1b20b240856d3ae27948e35098aa617def5bd" ) == 0 );
13459  fct_chk( strcmp( (char *) tag_str, "7f9c886a" ) == 0 );
13460  }
13461  }
13462  FCT_TEST_END();
13463 
13464 
13465  FCT_TEST_BGN(gcm_nist_validation_aes_19212810241024128_0)
13466  {
13467  unsigned char key_str[128];
13468  unsigned char src_str[128];
13469  unsigned char dst_str[257];
13470  unsigned char iv_str[128];
13471  unsigned char add_str[128];
13472  unsigned char tag_str[128];
13473  unsigned char output[128];
13474  unsigned char tag_output[16];
13475  gcm_context ctx;
13476  unsigned int key_len;
13477  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
13478 
13479  memset(key_str, 0x00, 128);
13480  memset(src_str, 0x00, 128);
13481  memset(dst_str, 0x00, 257);
13482  memset(iv_str, 0x00, 128);
13483  memset(add_str, 0x00, 128);
13484  memset(tag_str, 0x00, 128);
13485  memset(output, 0x00, 128);
13486  memset(tag_output, 0x00, 16);
13487 
13488  key_len = unhexify( key_str, "4cddc8f525640fc0a0875c65b788ea75c673f84f4aacaed4" );
13489  pt_len = unhexify( src_str, "55e3ccb855c1fd6d33e28d308485fd85abbd8ade1299936996851d44dde063ddc37962f9f67e95df02eaf3d877516240771c469be2abf2ef6c8dcbb79eb1976f825b109f752079957a7c981faa2fcea599cc52e262b84f4c2031821619f0be6fa3c38d660e9eb3e0d5de2da6b83de9866eb3efbc6a2dff27e52587c6f79e1c26" );
13490  iv_len = unhexify( iv_str, "1b883a89413f62dd6d507cd70c048855" );
13491  add_len = unhexify( add_str, "eeaf21bc317660b0e2afb9cd5bd450ff0bfa6cfa7e49edad600f71b971347e93b9712a6e895540c665a1d8338f61b51da9e0a4a9122409824287ba4bc06bdbba10290a40b31b5eae9dfeb6471f4a0a0c15c52a2c677c4d472630d4078ecf36dc6008faa0235a688ebbe2662e46a49b1dd58cbee82f285f3cdebda1dc54673195" );
13492 
13493  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
13494  if( 0 == 0 )
13495  {
13496  fct_chk( 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 );
13497  hexify( dst_str, output, pt_len );
13498  hexify( tag_str, tag_output, tag_len );
13499 
13500  fct_chk( strcmp( (char *) dst_str, "18d11513661296035f6f42d264e0b4cc7ec47f43b758c6dac95e5e3b3834362eb64447d923e107a60cd66ac359cf3a203f9070eab9fe61ae64a86606c9b50a97a19e12f731de28719fe178c9713edbb4525b221f656a340c867405c41bed3bbcb9c6da5cc6a4d37acd7a55f251a50fa15ea8f9b8955606eaa645c759ef2481e8" ) == 0 );
13501  fct_chk( strcmp( (char *) tag_str, "dec3edc19fd39f29e67c9e78211c71ce" ) == 0 );
13502  }
13503  }
13504  FCT_TEST_END();
13505 
13506 
13507  FCT_TEST_BGN(gcm_nist_validation_aes_19212810241024128_1)
13508  {
13509  unsigned char key_str[128];
13510  unsigned char src_str[128];
13511  unsigned char dst_str[257];
13512  unsigned char iv_str[128];
13513  unsigned char add_str[128];
13514  unsigned char tag_str[128];
13515  unsigned char output[128];
13516  unsigned char tag_output[16];
13517  gcm_context ctx;
13518  unsigned int key_len;
13519  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
13520 
13521  memset(key_str, 0x00, 128);
13522  memset(src_str, 0x00, 128);
13523  memset(dst_str, 0x00, 257);
13524  memset(iv_str, 0x00, 128);
13525  memset(add_str, 0x00, 128);
13526  memset(tag_str, 0x00, 128);
13527  memset(output, 0x00, 128);
13528  memset(tag_output, 0x00, 16);
13529 
13530  key_len = unhexify( key_str, "3b8c31830b1139a60425f6a34387f5ca2be6f5a5074adf13" );
13531  pt_len = unhexify( src_str, "95f4ea90729de0f0b890fdf697948053f656bddf57e3d461e7ee1770161904bb2cbc8c2f801481bb54145af760e91c8b30cb22faa87efcc6f01e3f798af0bd460475754726514d53f419af2f2c373c76f05bf57d3fc1b763f72ba0fd2682d9d1d76f6ce8d55b56fc7ba883fad94f59d502244804bb87bd06f1217a4a6c5055b5" );
13532  iv_len = unhexify( iv_str, "ab5bf317ad1d6bec9cac8bc520a37b1d" );
13533  add_len = unhexify( add_str, "5a47d7474be6c48fa4bdbb090f4b6da494f153a4c9c8561cae4fe883000b81769b46cd65f4ce34abc3e5c6880a21d12c186974b0c933a16ba33d511e79b5f994c38e383b93eea1259d38f9fb955480792206461dd29d6d3b8ff239ea6788c8e09c15be99f094d2d5980c6c1a8efe0f97f58f7725a972111daeb87d862a90a7d0" );
13534 
13535  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
13536  if( 0 == 0 )
13537  {
13538  fct_chk( 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 );
13539  hexify( dst_str, output, pt_len );
13540  hexify( tag_str, tag_output, tag_len );
13541 
13542  fct_chk( strcmp( (char *) dst_str, "1d0211d7d7bc891e4fba1ba7d47ac5a4f3b7ba49df69fcfde64bf8689b0eab379d2f5567fcff691836601b96c0a3b0ec14c03bc00e9682ef0043071507988cf1453603d2aa3dc9fa490cdb0dd263b12733adb4d68a098e1ccd27c92fe1bb82fa4a94f8a1cc045a975ac368e3224ba8f57800455cc4047901bba6bf67d6e41f94" ) == 0 );
13543  fct_chk( strcmp( (char *) tag_str, "23681228c722295c480397fc04c848a1" ) == 0 );
13544  }
13545  }
13546  FCT_TEST_END();
13547 
13548 
13549  FCT_TEST_BGN(gcm_nist_validation_aes_19212810241024128_2)
13550  {
13551  unsigned char key_str[128];
13552  unsigned char src_str[128];
13553  unsigned char dst_str[257];
13554  unsigned char iv_str[128];
13555  unsigned char add_str[128];
13556  unsigned char tag_str[128];
13557  unsigned char output[128];
13558  unsigned char tag_output[16];
13559  gcm_context ctx;
13560  unsigned int key_len;
13561  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
13562 
13563  memset(key_str, 0x00, 128);
13564  memset(src_str, 0x00, 128);
13565  memset(dst_str, 0x00, 257);
13566  memset(iv_str, 0x00, 128);
13567  memset(add_str, 0x00, 128);
13568  memset(tag_str, 0x00, 128);
13569  memset(output, 0x00, 128);
13570  memset(tag_output, 0x00, 16);
13571 
13572  key_len = unhexify( key_str, "9c2386b948f59ce651888451021772287f14a92d807d88a8" );
13573  pt_len = unhexify( src_str, "44f00c8a7c84e8207ec15a7be0b79c88fa347e2c3d5e8d07234536d86513bc39bebfff02efb9ff27280eb37f7e8a60a426538bc1e3830bca0e76faa33b30719fab51578d15df77893bce8740f50c491b8b9f1739a695c78406b5ee4d56f80d8d564b586b0f22ffa86eca46a9d8134a9507c5b9ad82757ec51b18741abc61f23b" );
13574  iv_len = unhexify( iv_str, "7a1f7d0be4c7f8869432cb8b13527670" );
13575  add_len = unhexify( add_str, "f76ea9d6e976616689709700a9638204e616f4c1c3a54a27fb0dc852990d81dfd6787aa5a83b9be5087d3f7dfcd522044911fa4186511de1957b80338025c6c4aa72058aa3160047cf42166aa0089e2ec1ac8ea6d9f5f2c057f9f838a72319dbd7bb4948da3bc87fc2036a0e7b5e8cee7f045463152ff80a1711ef1096e75463" );
13576 
13577  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
13578  if( 0 == 0 )
13579  {
13580  fct_chk( 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 );
13581  hexify( dst_str, output, pt_len );
13582  hexify( tag_str, tag_output, tag_len );
13583 
13584  fct_chk( strcmp( (char *) dst_str, "666c4d6d3f1bec49ba936eea90d864e8ecbe0ccc7b23872a4ad7596afaec628a8165a70397289a10c67d62942e1c158f1489a9de44443ac4181e74ebf2562995c9182b57bc960f4b5d3e33fb7cf7a0c32a59c716de23639de9bc430712524d74a087647e27ff1af87a2aa0cf0b58978ad8ed616b566225d3aef2ef460be7393d" ) == 0 );
13585  fct_chk( strcmp( (char *) tag_str, "53d926af7bbf7fba9798f895d182b09e" ) == 0 );
13586  }
13587  }
13588  FCT_TEST_END();
13589 
13590 
13591  FCT_TEST_BGN(gcm_nist_validation_aes_19212810241024120_0)
13592  {
13593  unsigned char key_str[128];
13594  unsigned char src_str[128];
13595  unsigned char dst_str[257];
13596  unsigned char iv_str[128];
13597  unsigned char add_str[128];
13598  unsigned char tag_str[128];
13599  unsigned char output[128];
13600  unsigned char tag_output[16];
13601  gcm_context ctx;
13602  unsigned int key_len;
13603  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
13604 
13605  memset(key_str, 0x00, 128);
13606  memset(src_str, 0x00, 128);
13607  memset(dst_str, 0x00, 257);
13608  memset(iv_str, 0x00, 128);
13609  memset(add_str, 0x00, 128);
13610  memset(tag_str, 0x00, 128);
13611  memset(output, 0x00, 128);
13612  memset(tag_output, 0x00, 16);
13613 
13614  key_len = unhexify( key_str, "5852b4bbfa623e5e2f83b888f5eb6cbe06b57299e29a518c" );
13615  pt_len = unhexify( src_str, "8cc85e520b45a85c69cd80072642ef1500b1e0a409c435d685544a6b96d3224cc40e5fe8a21c4959b2891d4a53bbff03db9939c655e6e92222c6b44c95204827bd800c74666db64907894bc4e3043fab318aa55a011ab9397592ced73f07a06282c22d9a57dd7a37eadb02f59b879b030d0a5005226c461281ce3061bf26de56" );
13616  iv_len = unhexify( iv_str, "b96f4bda25857c28fdfa42bfe598f11a" );
13617  add_len = unhexify( add_str, "0bfdc1b16eeae85d550a97a20211216a66b496c8c19030a263f896958e4d1decc310b955523e314647edcbe3f69970cda8e07f8b81f9074434fd86b8ec5b3fa8b155377ad28050b50523d3d185e5869bc9651d97c56ec6b8047c20d671f6dc657f4cdf73fd7d3caf4b872f3fb6376eda11b80d99cf0e85c4957607a767642da6" );
13618 
13619  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
13620  if( 0 == 0 )
13621  {
13622  fct_chk( 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 );
13623  hexify( dst_str, output, pt_len );
13624  hexify( tag_str, tag_output, tag_len );
13625 
13626  fct_chk( strcmp( (char *) dst_str, "b148312074ecfc8f118e3800dbd17226d55fc2c91bcbceeae2a7ca3b376f6d568dd7fcb5c0d09ce424868f1544097a0f966d354455e129096ec803a9435bbbf8f16432d30991384b88d14bcad1191b82273157d646f7a98507dc0c95c33d22e0b721c046f1c13545f4ed2df631fd2b8fc4940e10e3e66c0a4af089941a8ad94a" ) == 0 );
13627  fct_chk( strcmp( (char *) tag_str, "e3f548e24a189dbbfd6ae6b9ee44c2" ) == 0 );
13628  }
13629  }
13630  FCT_TEST_END();
13631 
13632 
13633  FCT_TEST_BGN(gcm_nist_validation_aes_19212810241024120_1)
13634  {
13635  unsigned char key_str[128];
13636  unsigned char src_str[128];
13637  unsigned char dst_str[257];
13638  unsigned char iv_str[128];
13639  unsigned char add_str[128];
13640  unsigned char tag_str[128];
13641  unsigned char output[128];
13642  unsigned char tag_output[16];
13643  gcm_context ctx;
13644  unsigned int key_len;
13645  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
13646 
13647  memset(key_str, 0x00, 128);
13648  memset(src_str, 0x00, 128);
13649  memset(dst_str, 0x00, 257);
13650  memset(iv_str, 0x00, 128);
13651  memset(add_str, 0x00, 128);
13652  memset(tag_str, 0x00, 128);
13653  memset(output, 0x00, 128);
13654  memset(tag_output, 0x00, 16);
13655 
13656  key_len = unhexify( key_str, "2bd897e969ccee405ba9becf24787a1e1be17a571442c6da" );
13657  pt_len = unhexify( src_str, "50b8ade5e6547c350c3f43a35a3cb641459c5ef902afc706ce2fb980b275fda62e8974d1577ef65ce9fd854d88caa10295d1045ed7563e9391d60700b5d2a4a7ba5f3de7a7d1541780b95a08eb3f0996d96aac7ee838b67ee869447617684c08566647a4991e31829907ebe4b32cfa46c0433a64f864b8b9316cb0ec2578ccee" );
13658  iv_len = unhexify( iv_str, "fef6a08d92b5b9bdae4c368fcd0cf9e8" );
13659  add_len = unhexify( add_str, "fb3144ec6d93704d625aa9e95be96351c6e25bccf1eaaaf9a1d405e679efe0f2da07510ab07533295a52cdc1f5a15ef5bec9e72b199625730e1baf5c1482f362f485d74233fbf764d0b6363075cebd676920a0b315d680e899733d6da05d78765db159c4f942a31d115d53f1d89cd948bc99c03adad1eee8adcef7543f9dea39" );
13660 
13661  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
13662  if( 0 == 0 )
13663  {
13664  fct_chk( 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 );
13665  hexify( dst_str, output, pt_len );
13666  hexify( tag_str, tag_output, tag_len );
13667 
13668  fct_chk( strcmp( (char *) dst_str, "e65ed5b6d0f51f8876f483f3d8ab8fed78ab6c2e1cf50693c8511e1cc9823e1030740ac33f05a5aa0d88205bb3071a087655f28eee7d0a07945d25e3dc00221a1dade4170cab9084c47b82376d5d439bed99150811843b176543f7944b1dd9684fa9a52117c2335dda750d9de0d9b3ef718123b6534cb012080f6ef8eda8d4d6" ) == 0 );
13669  fct_chk( strcmp( (char *) tag_str, "468546d4199b9d923a607a78fa4b40" ) == 0 );
13670  }
13671  }
13672  FCT_TEST_END();
13673 
13674 
13675  FCT_TEST_BGN(gcm_nist_validation_aes_19212810241024120_2)
13676  {
13677  unsigned char key_str[128];
13678  unsigned char src_str[128];
13679  unsigned char dst_str[257];
13680  unsigned char iv_str[128];
13681  unsigned char add_str[128];
13682  unsigned char tag_str[128];
13683  unsigned char output[128];
13684  unsigned char tag_output[16];
13685  gcm_context ctx;
13686  unsigned int key_len;
13687  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
13688 
13689  memset(key_str, 0x00, 128);
13690  memset(src_str, 0x00, 128);
13691  memset(dst_str, 0x00, 257);
13692  memset(iv_str, 0x00, 128);
13693  memset(add_str, 0x00, 128);
13694  memset(tag_str, 0x00, 128);
13695  memset(output, 0x00, 128);
13696  memset(tag_output, 0x00, 16);
13697 
13698  key_len = unhexify( key_str, "12141d5834b8ca48b57e0892b6027c997669dac12fe60411" );
13699  pt_len = unhexify( src_str, "cf475b50672fd8cc4ba84d17ab1b733fee2073a584d5427155f144ddd945d4901d5a9d76e3d6ae55ab3f9514861c83bca7d53868f35bdc8606a167ac83591be30ddb954ee173ee172e8d7742a71c0fee04ccd16fb5d54a45820640405209e20f8494f08d791a2a15f5cb848df689296a04e4b01e2c19bd8d9ca8b4525853549a" );
13700  iv_len = unhexify( iv_str, "b6dcb39939a31df176dcec87eb8db90f" );
13701  add_len = unhexify( add_str, "daf4e0cd0b29343defb65562594b2b6fd3f005e6255500330f77a0550c1cfbade5f5973e836ce7046bc2b2ab8bb7983830ce6ce148d0998116183d1aed320d28adef9ffab48e0f6d6451c98eb83fafc75fb054991d123965dbddcf74a2c01c746bbbc8276b77f6732cf364d8a4a5dbf5aedbbe16793e8c406ba609c90f0e7669" );
13702 
13703  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
13704  if( 0 == 0 )
13705  {
13706  fct_chk( 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 );
13707  hexify( dst_str, output, pt_len );
13708  hexify( tag_str, tag_output, tag_len );
13709 
13710  fct_chk( strcmp( (char *) dst_str, "4c2d979b9c2dc9cbbd6d4ed04094285a44df92e7ebcdee7feccf04c66c45137a7df12110b8af805f5cae9b4a225c3f8dcfd8f401e05c6ce937cbfc5620acdf3a4917c5b857bff76f3d728cf6a82a5b356fb95d144125d53e568b313cef11c11585d310ca0f7f1234090b1b62536885e9e39b969060ad3893e476e88941fe2cdd" ) == 0 );
13711  fct_chk( strcmp( (char *) tag_str, "99cec94a68d3e2d21e30cb25d03cd2" ) == 0 );
13712  }
13713  }
13714  FCT_TEST_END();
13715 
13716 
13717  FCT_TEST_BGN(gcm_nist_validation_aes_19212810241024112_0)
13718  {
13719  unsigned char key_str[128];
13720  unsigned char src_str[128];
13721  unsigned char dst_str[257];
13722  unsigned char iv_str[128];
13723  unsigned char add_str[128];
13724  unsigned char tag_str[128];
13725  unsigned char output[128];
13726  unsigned char tag_output[16];
13727  gcm_context ctx;
13728  unsigned int key_len;
13729  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
13730 
13731  memset(key_str, 0x00, 128);
13732  memset(src_str, 0x00, 128);
13733  memset(dst_str, 0x00, 257);
13734  memset(iv_str, 0x00, 128);
13735  memset(add_str, 0x00, 128);
13736  memset(tag_str, 0x00, 128);
13737  memset(output, 0x00, 128);
13738  memset(tag_output, 0x00, 16);
13739 
13740  key_len = unhexify( key_str, "14b9197b7980d95b71ce1a1de6577ce769d6af4cb45f7c8f" );
13741  pt_len = unhexify( src_str, "03b37942f12435f1c19dbcff496738207dc92edf1ab6935b564e693da1865da67fb51e8a838559ae1640da441f22ee79787f1e909cf3c32187b41a48fbc595df1c097fb37881b329fd7b30dd1e05d6052fe81edf2e10786acc8aeeb4fac636aac9432c3be3dafb55c76ec85cc13881735609773350b95eedbdb695b2de071a03" );
13742  iv_len = unhexify( iv_str, "cad0cfa7924e1e5cff90d749cfadf9f8" );
13743  add_len = unhexify( add_str, "283c8a38c7fc9dce071d4ff9ed79002a6862f9718678b435534e43657a94178353b9ec7e5bb877db5e4f62a2ca6bd557562989363c6fdedbd7f0f3eeec5445c41a2a8bc98117a1443ad4d5dd63a07806622cca8ea6f9f6019bd511634db28651b916e2399bbd84b03f8ec696ed5846f30320adef22ae6d164aed09edcfa25027" );
13744 
13745  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
13746  if( 0 == 0 )
13747  {
13748  fct_chk( 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 );
13749  hexify( dst_str, output, pt_len );
13750  hexify( tag_str, tag_output, tag_len );
13751 
13752  fct_chk( strcmp( (char *) dst_str, "83940097301e9867623c107d4447b250bf6db7d06f9e07b8d8bc6b72b079b725ea1f4b5f79bb80c518bc69a2bd73cf3aa7b88162773ac5b27a2dcccecce66e158ec0875937910e0b6f396cc7d7cac5d53b0fddf3cd70b570a647245a5264927be1b2d9c46fbc6a630b21fead46c4f35af1d163268e49a16083590893e6df4671" ) == 0 );
13753  fct_chk( strcmp( (char *) tag_str, "3e3f677e68208208e5315b681b73" ) == 0 );
13754  }
13755  }
13756  FCT_TEST_END();
13757 
13758 
13759  FCT_TEST_BGN(gcm_nist_validation_aes_19212810241024112_1)
13760  {
13761  unsigned char key_str[128];
13762  unsigned char src_str[128];
13763  unsigned char dst_str[257];
13764  unsigned char iv_str[128];
13765  unsigned char add_str[128];
13766  unsigned char tag_str[128];
13767  unsigned char output[128];
13768  unsigned char tag_output[16];
13769  gcm_context ctx;
13770  unsigned int key_len;
13771  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
13772 
13773  memset(key_str, 0x00, 128);
13774  memset(src_str, 0x00, 128);
13775  memset(dst_str, 0x00, 257);
13776  memset(iv_str, 0x00, 128);
13777  memset(add_str, 0x00, 128);
13778  memset(tag_str, 0x00, 128);
13779  memset(output, 0x00, 128);
13780  memset(tag_output, 0x00, 16);
13781 
13782  key_len = unhexify( key_str, "80e2eaa70362203b7561b135db581cf32e9cd816464f0b2e" );
13783  pt_len = unhexify( src_str, "62cc2db32584a8d90f348be32224bfdcefd1fd25c5cb05c7e74becb4b40ea09d6495f73adc1fd23d148c11849bd825efdf15e144587f785770d2aef2788b748c338373a0ea43882141bc9f7c693a291c512cdcdea6d5defb2efa2324736df7fc4b434d7f4d423fb1b8853ec3fdf2c1c2881610a8d81da5de5e761f814ed38e35" );
13784  iv_len = unhexify( iv_str, "3d7e99ddea0baa45e2f9f2289d2182a3" );
13785  add_len = unhexify( add_str, "71663fab717ec4d9da34d4851437f4504dbd71b65b0d04eccc513282c351925c23892958b4c9dc023c5a34944ef507e0b40857d8b508ab7104d13c2fbfce2d086d466291aaa449ad36977837216a496ff375959afe4dd50dc2620a062c926b939ffdb144a656bc04bcca8d1d4fa0a9cb0a5d713721accef2d2c9688a77bb42bc" );
13786 
13787  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
13788  if( 0 == 0 )
13789  {
13790  fct_chk( 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 );
13791  hexify( dst_str, output, pt_len );
13792  hexify( tag_str, tag_output, tag_len );
13793 
13794  fct_chk( strcmp( (char *) dst_str, "1c56b492f50fc362c5bf70622f817e1814ae0b69db7e3055fc9e690d2adb940f9a78cfd7e08044671913baec663d9f9af6dede42fe16d200e8421d22066009535704b05b3775ac41359d7c2697e2f4bec40df69b242392eb30e2d8a664d84cf95ec21797f1ccddb72926cfdff22848d14e373f5e6c3dd349196464c98dc38365" ) == 0 );
13795  fct_chk( strcmp( (char *) tag_str, "e0c1b140cd7bc4ded916aab8780e" ) == 0 );
13796  }
13797  }
13798  FCT_TEST_END();
13799 
13800 
13801  FCT_TEST_BGN(gcm_nist_validation_aes_19212810241024112_2)
13802  {
13803  unsigned char key_str[128];
13804  unsigned char src_str[128];
13805  unsigned char dst_str[257];
13806  unsigned char iv_str[128];
13807  unsigned char add_str[128];
13808  unsigned char tag_str[128];
13809  unsigned char output[128];
13810  unsigned char tag_output[16];
13811  gcm_context ctx;
13812  unsigned int key_len;
13813  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
13814 
13815  memset(key_str, 0x00, 128);
13816  memset(src_str, 0x00, 128);
13817  memset(dst_str, 0x00, 257);
13818  memset(iv_str, 0x00, 128);
13819  memset(add_str, 0x00, 128);
13820  memset(tag_str, 0x00, 128);
13821  memset(output, 0x00, 128);
13822  memset(tag_output, 0x00, 16);
13823 
13824  key_len = unhexify( key_str, "4b7aa649cb1488a658b4387451bf59852e845ec7d2273c69" );
13825  pt_len = unhexify( src_str, "245251595d10d719d8d00610d391735fad377b60d7430c7db488488c1ec25c12ee0dee3aac3d7dc19aa602924a1f27a2cfa8f6354315db93b5e4d2b6e8402c4254921e683ca681dfb3c7f433a97f119e01f2acb20988dced8494e086395351f2af356b11832472cbcb109c13ff92f10a4c8fe69bd264c8933cded19a980bdbd2" );
13826  iv_len = unhexify( iv_str, "07b50b1aacdadeb03e7488458db03aaf" );
13827  add_len = unhexify( add_str, "2a7970ee97d612b63d2a0c29e5045ddfc6621c237bc270b3147fc0191de199b6923947e3bd3750de5155e1df29caf96ac702f948c38619e218138945595156cc5f1dcfde0d1d6a5aec48ff37c9ff2b2209a904c59593779820ea68ad95898c7ca0d0d81583c44feb0fec30665cc56620a8c9408e4275e60f5284ed7c0e58285d" );
13828 
13829  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
13830  if( 0 == 0 )
13831  {
13832  fct_chk( 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 );
13833  hexify( dst_str, output, pt_len );
13834  hexify( tag_str, tag_output, tag_len );
13835 
13836  fct_chk( strcmp( (char *) dst_str, "6bd53e4415765f387239c6664f837371b39f6d7ff22453211e91de5dd14272784fffb4f6b2c0bb8c6b7d1cafc55133aa0d54d410ae383008fdd87645655062322fbaa06df0a2d7ccf4cc170d1f98ec6a7ad524a3e5b07761f8ae53c9c8297faa5b5621c3854643e0085410daf5bf6c7e1f92bbbfc3691eeff1c5241d2307bbc2" ) == 0 );
13837  fct_chk( strcmp( (char *) tag_str, "78d37215234f9a32571d0d8b1e51" ) == 0 );
13838  }
13839  }
13840  FCT_TEST_END();
13841 
13842 
13843  FCT_TEST_BGN(gcm_nist_validation_aes_19212810241024104_0)
13844  {
13845  unsigned char key_str[128];
13846  unsigned char src_str[128];
13847  unsigned char dst_str[257];
13848  unsigned char iv_str[128];
13849  unsigned char add_str[128];
13850  unsigned char tag_str[128];
13851  unsigned char output[128];
13852  unsigned char tag_output[16];
13853  gcm_context ctx;
13854  unsigned int key_len;
13855  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
13856 
13857  memset(key_str, 0x00, 128);
13858  memset(src_str, 0x00, 128);
13859  memset(dst_str, 0x00, 257);
13860  memset(iv_str, 0x00, 128);
13861  memset(add_str, 0x00, 128);
13862  memset(tag_str, 0x00, 128);
13863  memset(output, 0x00, 128);
13864  memset(tag_output, 0x00, 16);
13865 
13866  key_len = unhexify( key_str, "512bbb490d062fe5ecc8e5ad95920a9e9b78bec6a7694dc2" );
13867  pt_len = unhexify( src_str, "862f2724ad82a53e0574c0a2a0515bd86c5ed0b5ae92278a78ea1a90c03059d08a91d1a46678aef862b56d0320e970b7f941b784841b4d8a38d056f2bd352d48c0028086a36426bbc1436da9e021dcac705b6e03649b426cebd7a235f6d060ab6302d777fc9316db4a85e8c1387648a8f5ce2398a247413cb9374124449e498d" );
13868  iv_len = unhexify( iv_str, "2d14fb3e058f97b7c9e9edd1d97cac7e" );
13869  add_len = unhexify( add_str, "290078e63c81abfe99010b8344ff1a03dac095e2473d7a31888102e838768892e8216439dc3355aedd073892f4449d9d4d3ea6c25a9152c329d24cc73eaa0004832691740e60f17581201c8f7f4023d8e55faa3942ad725d21dade4c03c790b5370d4cad3923527c20ca925a2ce534a652ed7e032cb1c7906aebbdc24e6b39a4" );
13870 
13871  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
13872  if( 0 == 0 )
13873  {
13874  fct_chk( 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 );
13875  hexify( dst_str, output, pt_len );
13876  hexify( tag_str, tag_output, tag_len );
13877 
13878  fct_chk( strcmp( (char *) dst_str, "44e78cf3a2ce4a5e498315cb8d5e841f926408921f3665d533caebe0a7fa6c164b3d2c0b21ff3a608a7194e3194fda165ada8d5fc2e924316aa4ce201531b857877c5519f875eb49e5908d8d81b69472d03d08c785ee374c5fe91b16aee173761af7ff244571fd40aadabb360f38d301463e9da8cf8dc44d20848688ab3be47b" ) == 0 );
13879  fct_chk( strcmp( (char *) tag_str, "6037cb18f8478630bc9d8090e2" ) == 0 );
13880  }
13881  }
13882  FCT_TEST_END();
13883 
13884 
13885  FCT_TEST_BGN(gcm_nist_validation_aes_19212810241024104_1)
13886  {
13887  unsigned char key_str[128];
13888  unsigned char src_str[128];
13889  unsigned char dst_str[257];
13890  unsigned char iv_str[128];
13891  unsigned char add_str[128];
13892  unsigned char tag_str[128];
13893  unsigned char output[128];
13894  unsigned char tag_output[16];
13895  gcm_context ctx;
13896  unsigned int key_len;
13897  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
13898 
13899  memset(key_str, 0x00, 128);
13900  memset(src_str, 0x00, 128);
13901  memset(dst_str, 0x00, 257);
13902  memset(iv_str, 0x00, 128);
13903  memset(add_str, 0x00, 128);
13904  memset(tag_str, 0x00, 128);
13905  memset(output, 0x00, 128);
13906  memset(tag_output, 0x00, 16);
13907 
13908  key_len = unhexify( key_str, "d3964ee03ec5e500f2f8c05313b78615420183fe2950be32" );
13909  pt_len = unhexify( src_str, "b9424e4a79a08a7937da1da15061c1eb9a873748691ec9c1fc76aaa164bd34873d07437d203c92c0e89c0c5befedfbb17f721f576473253617547206fb2b340945536cd7a049864d099419cf3f7a9154c0ac8d676b0e9ec02947caa4057560af347ddb46002703f3531f27b2197790ba135e3d3c0709c86f4781890deb50f3ba" );
13910  iv_len = unhexify( iv_str, "d3d4e5fdf6e36ac75b4d51c47ce5b8f9" );
13911  add_len = unhexify( add_str, "6146a97a2a1c709458bef5049088fdf339e4fe29cbdf519c93d525b71c9fb501c4b58bef49d43cc7699b18fc89cee1a4a45834f517214a77fb3b91d741977308e1585c474245802118d0e2c7003057c4a19752a143195ec2a57102cb2a127d2dbefe1168492e072e74c5f6ee102a0c371b1fe2ddfd8ecbc04c6f42befecd7d46" );
13912 
13913  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
13914  if( 0 == 0 )
13915  {
13916  fct_chk( 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 );
13917  hexify( dst_str, output, pt_len );
13918  hexify( tag_str, tag_output, tag_len );
13919 
13920  fct_chk( strcmp( (char *) dst_str, "a2ae334bac969072e754c0e37765ca6253744941a35587bb4feda54233a7a59f037e971d254c67948b16e4c35f306c0984f00465399405ce701ba554419a736cdff5a1b4ae5ab05e625c91651f74aa64c96ab628243d31021ad56f535eae33a885b45730268f900b6df0aff18a433e2823ddb0628a7026b86b3835160e5121b0" ) == 0 );
13921  fct_chk( strcmp( (char *) tag_str, "817be7dcf7adef064161b6c42d" ) == 0 );
13922  }
13923  }
13924  FCT_TEST_END();
13925 
13926 
13927  FCT_TEST_BGN(gcm_nist_validation_aes_19212810241024104_2)
13928  {
13929  unsigned char key_str[128];
13930  unsigned char src_str[128];
13931  unsigned char dst_str[257];
13932  unsigned char iv_str[128];
13933  unsigned char add_str[128];
13934  unsigned char tag_str[128];
13935  unsigned char output[128];
13936  unsigned char tag_output[16];
13937  gcm_context ctx;
13938  unsigned int key_len;
13939  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
13940 
13941  memset(key_str, 0x00, 128);
13942  memset(src_str, 0x00, 128);
13943  memset(dst_str, 0x00, 257);
13944  memset(iv_str, 0x00, 128);
13945  memset(add_str, 0x00, 128);
13946  memset(tag_str, 0x00, 128);
13947  memset(output, 0x00, 128);
13948  memset(tag_output, 0x00, 16);
13949 
13950  key_len = unhexify( key_str, "7a8049f521fe9a00f7bf566369e540a48ab59d83305e2829" );
13951  pt_len = unhexify( src_str, "67243a336a10b82a0a8638b35dc147c14ac63b20977922a13de459ae2cfbdb262a79004c3a656dfbc073ec8878595e24998dc44b9435439af117c9635c479676f6edb8f522cf01571be5aa5b5bc7d1cc3264436566f8d3c684973d1e88d46282b53836a1ab5a698560e5bf7629ec12cb141867f684b369546a1d8bf48315b6c7" );
13952  iv_len = unhexify( iv_str, "e4d81f71e1de8cf4689bfe66a4647f15" );
13953  add_len = unhexify( add_str, "4cf6733482c218af832e99970d0717ac942ebace0fed4ce4dfa1f710b9e131a21cc03dd3ced25b78bccd1991a30bb53b463c1440b6543b19af91e31c18866c2acebb78c2a340b930518e61a63ff8d6a6e8e7960523de40a178614dad4ce5ab253e1090a097f8ec00dfeecb46aa0e8f772f01c4e706de7e824386a13944600542" );
13954 
13955  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
13956  if( 0 == 0 )
13957  {
13958  fct_chk( 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 );
13959  hexify( dst_str, output, pt_len );
13960  hexify( tag_str, tag_output, tag_len );
13961 
13962  fct_chk( strcmp( (char *) dst_str, "cfa8ba247ada9e6b3e5ab7dd0a7108574cc811c2986cad951168559ff697b77684880ec266f0b7d87a2ff559e368a85846becee312bb2991692d928a7c191cfdb7f1468f8b84be4bb592ea640743443bd4941a8b856c57be21eb22fcb3f6c0a80728ddc9dc5fab1c77dfceb91699009054c5a4eb0714a10b74cf0e09fa630299" ) == 0 );
13963  fct_chk( strcmp( (char *) tag_str, "1dcee251cda10b2ea8f2bfe6a0" ) == 0 );
13964  }
13965  }
13966  FCT_TEST_END();
13967 
13968 
13969  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024102496_0)
13970  {
13971  unsigned char key_str[128];
13972  unsigned char src_str[128];
13973  unsigned char dst_str[257];
13974  unsigned char iv_str[128];
13975  unsigned char add_str[128];
13976  unsigned char tag_str[128];
13977  unsigned char output[128];
13978  unsigned char tag_output[16];
13979  gcm_context ctx;
13980  unsigned int key_len;
13981  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
13982 
13983  memset(key_str, 0x00, 128);
13984  memset(src_str, 0x00, 128);
13985  memset(dst_str, 0x00, 257);
13986  memset(iv_str, 0x00, 128);
13987  memset(add_str, 0x00, 128);
13988  memset(tag_str, 0x00, 128);
13989  memset(output, 0x00, 128);
13990  memset(tag_output, 0x00, 16);
13991 
13992  key_len = unhexify( key_str, "657567a56e585c84e4033268f08f712aa280015b77cd657f" );
13993  pt_len = unhexify( src_str, "96d889651c4f3f5120bee233f6395fa0bbba1f6548b109be568ff96f11d24e34d67beb6c20268feba89240674b0b4552d0a6455d43e8edf943da3d8d785a5221df8ddb3a98d2fc611ac7362aef71f8f004eb455a16d1dcac488ee83d4f11c4a00c29d9990c5a2a97b897d67e51faa40999b1e510ac62fa4859123cdb37d202ae" );
13994  iv_len = unhexify( iv_str, "94dc757b6bdbfe925b762923cd0a08ed" );
13995  add_len = unhexify( add_str, "a2c54e8da7dca49c73550bd1f5e68449295f062d5dfe5aa4201bdf353a2a1ac9c3c61f2b5482184cef481fa378a1ea990ce203c2c7d76993c62b415ece06b9b7caacec0c4147c0cbf292e528d97c1a176fcb1ca6147cfa4bcce92cbdfe617738a92273282c7a65fcb997bceb867ce01ec74541582d3961dddf3a2af21cad3ce6" );
13996 
13997  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
13998  if( 0 == 0 )
13999  {
14000  fct_chk( 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 );
14001  hexify( dst_str, output, pt_len );
14002  hexify( tag_str, tag_output, tag_len );
14003 
14004  fct_chk( strcmp( (char *) dst_str, "55a5d07a77fc37090c4206f19483aa3cc03815194ded71c2b2806ad9563edfebfcf962806ba829373947e3e93f4f39794514ad7b6dbc626e29fbc35f90f573da33ab6afb5c94383fd0fdd1ee074d650d192f6d08fbd1e24a6966a81a2ffd83fab644ee914952de77e9427262314ac47c11a44bf7d2890f9b9980499bb6a1f692" ) == 0 );
14005  fct_chk( strcmp( (char *) tag_str, "41c72043f6116ee6f7c11986" ) == 0 );
14006  }
14007  }
14008  FCT_TEST_END();
14009 
14010 
14011  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024102496_1)
14012  {
14013  unsigned char key_str[128];
14014  unsigned char src_str[128];
14015  unsigned char dst_str[257];
14016  unsigned char iv_str[128];
14017  unsigned char add_str[128];
14018  unsigned char tag_str[128];
14019  unsigned char output[128];
14020  unsigned char tag_output[16];
14021  gcm_context ctx;
14022  unsigned int key_len;
14023  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
14024 
14025  memset(key_str, 0x00, 128);
14026  memset(src_str, 0x00, 128);
14027  memset(dst_str, 0x00, 257);
14028  memset(iv_str, 0x00, 128);
14029  memset(add_str, 0x00, 128);
14030  memset(tag_str, 0x00, 128);
14031  memset(output, 0x00, 128);
14032  memset(tag_output, 0x00, 16);
14033 
14034  key_len = unhexify( key_str, "61159242d48c2ca0c30377ec2ad701135adb62d113c9f9ba" );
14035  pt_len = unhexify( src_str, "8ae40603f6cdae4b63ac7b18b4bcbb83c65867c2ae270102efb6f00aa8af5d0400dc95085910a50a16cbcf71f06c3f3eab71345d59c6054aaac02971111c7146add8c072158e0b374d481bb540036a136ccb91523f96f24ea237940ab011ad38f2a3095c0785df91604be1fe7734cc4119b27aa784875d0a251c678900334a0b" );
14036  iv_len = unhexify( iv_str, "4fda7236bd6ebe0b316feeea31cb5ebc" );
14037  add_len = unhexify( add_str, "ed28e9954634ec2c9e2df493062abf3ea3e199299053a15ce8d6fe051d1076287e4e7c0b2bab0a599b763a29d0aab680626f280c4f5ad94b7792d9af532681f6e4eb2672781f2342304daff902d03b396853eaf585af4d3bf5078d064e9eea6e94e667722f15c004f4cf52253a5c65b75319b07ba539558d8a2b552390a21577" );
14038 
14039  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
14040  if( 0 == 0 )
14041  {
14042  fct_chk( 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 );
14043  hexify( dst_str, output, pt_len );
14044  hexify( tag_str, tag_output, tag_len );
14045 
14046  fct_chk( strcmp( (char *) dst_str, "dba251e35422f60f902f594bb58dce37131e8ae06b5f40ad23c4a70a5e25fe24c76982c9bc11a7f4e3cc62d8c1326170432633eba1634972a9bcd093b08e1c63ece07c4be79cadc888b0408e40c09636e1cf1e5e9a6f2ea44eea5409a2ffe9c3ac9a18ad7aa9041f08eb109c01ed90732a8afe0694319ef98a0269685b4d16b1" ) == 0 );
14047  fct_chk( strcmp( (char *) tag_str, "b0feebfc8324fd1e9e40f7f0" ) == 0 );
14048  }
14049  }
14050  FCT_TEST_END();
14051 
14052 
14053  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024102496_2)
14054  {
14055  unsigned char key_str[128];
14056  unsigned char src_str[128];
14057  unsigned char dst_str[257];
14058  unsigned char iv_str[128];
14059  unsigned char add_str[128];
14060  unsigned char tag_str[128];
14061  unsigned char output[128];
14062  unsigned char tag_output[16];
14063  gcm_context ctx;
14064  unsigned int key_len;
14065  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
14066 
14067  memset(key_str, 0x00, 128);
14068  memset(src_str, 0x00, 128);
14069  memset(dst_str, 0x00, 257);
14070  memset(iv_str, 0x00, 128);
14071  memset(add_str, 0x00, 128);
14072  memset(tag_str, 0x00, 128);
14073  memset(output, 0x00, 128);
14074  memset(tag_output, 0x00, 16);
14075 
14076  key_len = unhexify( key_str, "5b4c37150f8bf0e14e0bfd37ac14e606dd273577007f24b4" );
14077  pt_len = unhexify( src_str, "48c6486b2691b86f5f107e8fe0122a821248206d2dd3ce898a2bb3772202ffe97292852bc61513529ad95faf6383b5f6c5a7c16c4cbe33cb02e5e50f32db95ee2962aae1c9c0f5470b3baa216cc19be5ab86b53316beef14397effb8afba5b5159074e26bf5dd3b700f4ea5abd43e93ca18494e1779b8c48fcd51f46664dd262" );
14078  iv_len = unhexify( iv_str, "664f553a14dcd4dcba42f06e10b186aa" );
14079  add_len = unhexify( add_str, "4386e28ebd16d8276c6e84e1d7a3d9f1283e12cb177478ab46acb256b71df5a2da868134ed72ef43f73e8226df1f34e350b7f936bd43caff84a317b1e5b2e9a2b92ccab1e3e817f93222dd1e2cf870d45a8458e57948a649360c6e2439bbcc682383b50bcd3d8b000592c3ca599e598a03b9953af485f1ecc22501dcacb7110e" );
14080 
14081  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
14082  if( 0 == 0 )
14083  {
14084  fct_chk( 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 );
14085  hexify( dst_str, output, pt_len );
14086  hexify( tag_str, tag_output, tag_len );
14087 
14088  fct_chk( strcmp( (char *) dst_str, "05fdbb5ad403d64011e15d27cd6f5a2247e018e479e58ad3fee1e0e8ddd9e114c0e82f2c947ff9af525ce752f4aea959463899542b85c9b413d065ea175103c3b3c35f56eea52af2c54ec08a1d5b7cd5ee4f59de8be86512b770e42ab176b6b70ccbcd264d6d5cfdd2e52e618dc24251ac339ea38cdc446c778d2db3c7c3e93d" ) == 0 );
14089  fct_chk( strcmp( (char *) tag_str, "77f32401db21adb775e7f1d0" ) == 0 );
14090  }
14091  }
14092  FCT_TEST_END();
14093 
14094 
14095  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024102464_0)
14096  {
14097  unsigned char key_str[128];
14098  unsigned char src_str[128];
14099  unsigned char dst_str[257];
14100  unsigned char iv_str[128];
14101  unsigned char add_str[128];
14102  unsigned char tag_str[128];
14103  unsigned char output[128];
14104  unsigned char tag_output[16];
14105  gcm_context ctx;
14106  unsigned int key_len;
14107  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
14108 
14109  memset(key_str, 0x00, 128);
14110  memset(src_str, 0x00, 128);
14111  memset(dst_str, 0x00, 257);
14112  memset(iv_str, 0x00, 128);
14113  memset(add_str, 0x00, 128);
14114  memset(tag_str, 0x00, 128);
14115  memset(output, 0x00, 128);
14116  memset(tag_output, 0x00, 16);
14117 
14118  key_len = unhexify( key_str, "531a380b109098eafd997bd25bfde4868d2a1ca781795e9a" );
14119  pt_len = unhexify( src_str, "466237db78d4c770a658b9693420a2e087c978fcc434c9ac82f3e2447b2fa08be32d2ce6da25846555ffe5764234b07b35dd1d1bcb710e8a49f918f2c873681f32765b092a836e9418faba61dc59a254c923159be16f585e526616fedd3acfe2748ce19ee03868ea9836bee2c6acb1b821e231eb2d30d300387c93390d51e3a5" );
14120  iv_len = unhexify( iv_str, "ad079d0b958f09732aaa2158f6215573" );
14121  add_len = unhexify( add_str, "09e002c2c48beaf1122411e8624522a9e90cc3f2a040c52ffcb91136519277c39fd6a79292b8835e0fbcaef2279218106aaf75036590f8a46f6b6912053a3b391849f7e204f096288d6141d5f80c7f91dd2f2b6ebc1ced6af8216e0a594814b56bd592df800299b29e26ed7461ba3f6f3cf151b9c10ad634a01d9c5e578aa372" );
14122 
14123  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
14124  if( 0 == 0 )
14125  {
14126  fct_chk( 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 );
14127  hexify( dst_str, output, pt_len );
14128  hexify( tag_str, tag_output, tag_len );
14129 
14130  fct_chk( strcmp( (char *) dst_str, "d1f49f94e6fbef7e21abad23e16c06fcdfa75a8c342be67baea8e0e57dbcd2971276e993faa124ac81e6be18f68af303518efd926513cee9dbcc5ef6cf5e9c068a1210e53fdd56776148d51597e359dbaa0570b4fe15476ccc9aa79f7c765755b6f694af4269b9e18fc62a0d47708bca67dcf080e200718c22bac256f641e7a2" ) == 0 );
14131  fct_chk( strcmp( (char *) tag_str, "01ec395c99a17db6" ) == 0 );
14132  }
14133  }
14134  FCT_TEST_END();
14135 
14136 
14137  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024102464_1)
14138  {
14139  unsigned char key_str[128];
14140  unsigned char src_str[128];
14141  unsigned char dst_str[257];
14142  unsigned char iv_str[128];
14143  unsigned char add_str[128];
14144  unsigned char tag_str[128];
14145  unsigned char output[128];
14146  unsigned char tag_output[16];
14147  gcm_context ctx;
14148  unsigned int key_len;
14149  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
14150 
14151  memset(key_str, 0x00, 128);
14152  memset(src_str, 0x00, 128);
14153  memset(dst_str, 0x00, 257);
14154  memset(iv_str, 0x00, 128);
14155  memset(add_str, 0x00, 128);
14156  memset(tag_str, 0x00, 128);
14157  memset(output, 0x00, 128);
14158  memset(tag_output, 0x00, 16);
14159 
14160  key_len = unhexify( key_str, "fbd7a92120ff973ec69b6a8189c6ea827ca20743a8781518" );
14161  pt_len = unhexify( src_str, "1583c1578a8c8d272a970f05d875f199e497c55f03f10f7bc934fee21c30379dad3c580b3f99304a5747b61fd43428506439ede2c57f5229e13da9cb7cd6174cccbb397e98fb90455ccf3ea3b1304f432a070a2eb5205ed863326b3b86d4eb7f54ee2ffcd50ed6ef01b3ee216c53f4f2659a88fb6343396b2ded0b389c6266c5" );
14162  iv_len = unhexify( iv_str, "57658c71b2c45f6ae2d1b6775a9731cf" );
14163  add_len = unhexify( add_str, "45ca8a168ecca7a42847b779ef152766b902192db621d2770b56c7d592207afaf52d19a6059feb76e96b90628995bd6517af3f114e97af8d602a493b77405e93095fee6761877dc292fab696a4303102dece60951cca20cacb171abdcfd0ef6da6c90b44edba63b9b6087d876b3fff24dea909899ebd0d0371c424f51a9a84b8" );
14164 
14165  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
14166  if( 0 == 0 )
14167  {
14168  fct_chk( 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 );
14169  hexify( dst_str, output, pt_len );
14170  hexify( tag_str, tag_output, tag_len );
14171 
14172  fct_chk( strcmp( (char *) dst_str, "58a290cf0e774293d1b55f5ef8a305f68605c0c81668b8a1ba95fceeaa65229404e18fa54dd811a6af085c98b8854d0f956adc2aaad742cafa9ed53d7cb445451ee7a4dc1e8399ec7e5b4d004ecd22496565bf444b2e3d82ddf6a6d5e6256c5095a699d7ff3f8cf2addec73e21013ee6f3dfc0a3abf316ea5ee1d6943bc394e1" ) == 0 );
14173  fct_chk( strcmp( (char *) tag_str, "af737ec3512da2b4" ) == 0 );
14174  }
14175  }
14176  FCT_TEST_END();
14177 
14178 
14179  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024102464_2)
14180  {
14181  unsigned char key_str[128];
14182  unsigned char src_str[128];
14183  unsigned char dst_str[257];
14184  unsigned char iv_str[128];
14185  unsigned char add_str[128];
14186  unsigned char tag_str[128];
14187  unsigned char output[128];
14188  unsigned char tag_output[16];
14189  gcm_context ctx;
14190  unsigned int key_len;
14191  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
14192 
14193  memset(key_str, 0x00, 128);
14194  memset(src_str, 0x00, 128);
14195  memset(dst_str, 0x00, 257);
14196  memset(iv_str, 0x00, 128);
14197  memset(add_str, 0x00, 128);
14198  memset(tag_str, 0x00, 128);
14199  memset(output, 0x00, 128);
14200  memset(tag_output, 0x00, 16);
14201 
14202  key_len = unhexify( key_str, "54bfc8379e0a8180b931c5188c95ab3ed3461d6e9004d182" );
14203  pt_len = unhexify( src_str, "93327664eb576bbb64e4ff061874346b4e80a779cdeb1fbe630bf5e4307d4f2c5d5ecc94aa8bdea755c1af165fc8925bfcdf128c1ee6571e9f8344b22dfc90ed893316031661a9438b305396f3a80452c9b11924163b7fc4422b00dc58ee0e674710239975a2cf3253bf2601cd155e09547a5f3be1adda84a4b29631a8e13161" );
14204  iv_len = unhexify( iv_str, "9d15df8de4150f44d342f2031de3611c" );
14205  add_len = unhexify( add_str, "63331936d2972abd44c1c9f62e42bfa932dff8cc75d9f555f5a7847d08558e76f5393e08909760edbef8d2922a7ca8e1c0c505ca627c02af73253791bb35ff080b4db7dddf4c8b304999ff645227cd79f13ac87f9c963b93a79a0e946e5781cdbf1b4b1967a75314f19c7219e3b69dc2c24ba09fbbdf7184278f82818bdd0958" );
14206 
14207  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
14208  if( 0 == 0 )
14209  {
14210  fct_chk( 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 );
14211  hexify( dst_str, output, pt_len );
14212  hexify( tag_str, tag_output, tag_len );
14213 
14214  fct_chk( strcmp( (char *) dst_str, "18ff87dccbc24c396190c7b37c4a77f86e609db7fb2b326802714d0f196b00b84af887f1b3bd30ee0b0b192d0801ac4e59ac40e5c652b3da32aa024da3acf648da0253674c391d260c0674853c7821861059772c9a7f2775a7ef77d1d31a6ec1c51c5f3089bb516f8cf52d5a15724281086abd92a74d255b7cc84b5051be4e5b" ) == 0 );
14215  fct_chk( strcmp( (char *) tag_str, "bf0f7f8084e79da5" ) == 0 );
14216  }
14217  }
14218  FCT_TEST_END();
14219 
14220 
14221  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024102432_0)
14222  {
14223  unsigned char key_str[128];
14224  unsigned char src_str[128];
14225  unsigned char dst_str[257];
14226  unsigned char iv_str[128];
14227  unsigned char add_str[128];
14228  unsigned char tag_str[128];
14229  unsigned char output[128];
14230  unsigned char tag_output[16];
14231  gcm_context ctx;
14232  unsigned int key_len;
14233  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
14234 
14235  memset(key_str, 0x00, 128);
14236  memset(src_str, 0x00, 128);
14237  memset(dst_str, 0x00, 257);
14238  memset(iv_str, 0x00, 128);
14239  memset(add_str, 0x00, 128);
14240  memset(tag_str, 0x00, 128);
14241  memset(output, 0x00, 128);
14242  memset(tag_output, 0x00, 16);
14243 
14244  key_len = unhexify( key_str, "21b775ef8c40a5387d6c8eda4e90d0a00c795681a2887dfc" );
14245  pt_len = unhexify( src_str, "6346f84301d6d83e1c5bad44fa7e0821f35723713ee8d4a9e2bf15abf953425b09bd77b2360f4e62e82bf9e14e2b56be51d032aa8a96e894f19f3e84630f9eae831b329f7638b09de7210cd29778059ef1d0bc039c1e10405f3ae5e4ca33216adcfc21869d9f825344d62b50bab03f7aa7b92fdb94951a68acd01f1dee75e428" );
14246  iv_len = unhexify( iv_str, "9763e6187d4b96b1801d1f6efe7e80a5" );
14247  add_len = unhexify( add_str, "3bd523c16a0022b780ae8318a28f001502120bb26e2f65f4fe94019686f9d1df330e70cef1b2ba4b6ce1f7ef37750f47e602843cbc5f13ff2ceadc5091eb3601604b70bd4acad3d61950b9dd2cbfd83a391223c8e09fddd4020c0f8a8a7057139fd92f3bbe034f03cc48afdde064c8b13ea942ec0d621db959ec9d5fa95afe45" );
14248 
14249  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
14250  if( 0 == 0 )
14251  {
14252  fct_chk( 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 );
14253  hexify( dst_str, output, pt_len );
14254  hexify( tag_str, tag_output, tag_len );
14255 
14256  fct_chk( strcmp( (char *) dst_str, "f25408848bc27ab087b3ea053762837a534c3702dd8be01d79f075f61d76ac1d6557d392e1fab475cc7d13a5f6be6f0718bad71c3c85b5996bd3c0159e264930988e3ed506bcc94fabecfb58caaf56e2e4315bb50817cba765636d1faa91147b3880815eeb90d0934180e49132833abfa6279247d9dd4048dff851e9a551ee1c" ) == 0 );
14257  fct_chk( strcmp( (char *) tag_str, "d1fb9aed" ) == 0 );
14258  }
14259  }
14260  FCT_TEST_END();
14261 
14262 
14263  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024102432_1)
14264  {
14265  unsigned char key_str[128];
14266  unsigned char src_str[128];
14267  unsigned char dst_str[257];
14268  unsigned char iv_str[128];
14269  unsigned char add_str[128];
14270  unsigned char tag_str[128];
14271  unsigned char output[128];
14272  unsigned char tag_output[16];
14273  gcm_context ctx;
14274  unsigned int key_len;
14275  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
14276 
14277  memset(key_str, 0x00, 128);
14278  memset(src_str, 0x00, 128);
14279  memset(dst_str, 0x00, 257);
14280  memset(iv_str, 0x00, 128);
14281  memset(add_str, 0x00, 128);
14282  memset(tag_str, 0x00, 128);
14283  memset(output, 0x00, 128);
14284  memset(tag_output, 0x00, 16);
14285 
14286  key_len = unhexify( key_str, "8a7d8197d9ceebd8e3f6b3bfb74877ccf649ac91d7057af5" );
14287  pt_len = unhexify( src_str, "37b01df357561f5aa43b5b4b0081148213f7b74babc80f4b3c6dd78ad17687f11443cd4a57f8d7a74ca3080e2a229f78d8e6db276c1142d5f4ee764eaf09cfd70c596d7a2cad5360c2de20d5e17ec6e06a9b049bb10f8742a30a94270cc6d7709b2f09f3cb8347e41117b7ddb99e4a939f3094c016330a8f170ccccb9d3651fb" );
14288  iv_len = unhexify( iv_str, "db5144951a9f1721397b7321713a723e" );
14289  add_len = unhexify( add_str, "ad72fa5a05adc40fb38245da019cbf50958ccfe26abf67dfdd49f4c4af6bda8bfc99d557913b2634c5c65d33ca909360adf598b703db1dbcc29481b17ca42fce3315ea1454693b5843e751fafd78158fc040c1cbe607063ba9c0ac02ae4b88989e3cc63adda8427032c70560349e1a8ec847906a9a7b0422a694a1f9eb2b3b72" );
14290 
14291  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
14292  if( 0 == 0 )
14293  {
14294  fct_chk( 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 );
14295  hexify( dst_str, output, pt_len );
14296  hexify( tag_str, tag_output, tag_len );
14297 
14298  fct_chk( strcmp( (char *) dst_str, "6985ec525cfe869e1709751eb6f1ff0aabcb39ae3aa708adc452ce1a8cad8ab4f1739f660b2841566f1f5c9e15e846de7f86ca1dc085188fcaa4a3f839ab2a5f0cfd36e36965ae519fe14f98899ccb07a3ca15ec705e3160df6dbc37ab89c882012eefe51e4da8d6d6b84b3144ca87a90864ff5390abfb92992e44c46807b3c8" ) == 0 );
14299  fct_chk( strcmp( (char *) tag_str, "c51604f5" ) == 0 );
14300  }
14301  }
14302  FCT_TEST_END();
14303 
14304 
14305  FCT_TEST_BGN(gcm_nist_validation_aes_1921281024102432_2)
14306  {
14307  unsigned char key_str[128];
14308  unsigned char src_str[128];
14309  unsigned char dst_str[257];
14310  unsigned char iv_str[128];
14311  unsigned char add_str[128];
14312  unsigned char tag_str[128];
14313  unsigned char output[128];
14314  unsigned char tag_output[16];
14315  gcm_context ctx;
14316  unsigned int key_len;
14317  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
14318 
14319  memset(key_str, 0x00, 128);
14320  memset(src_str, 0x00, 128);
14321  memset(dst_str, 0x00, 257);
14322  memset(iv_str, 0x00, 128);
14323  memset(add_str, 0x00, 128);
14324  memset(tag_str, 0x00, 128);
14325  memset(output, 0x00, 128);
14326  memset(tag_output, 0x00, 16);
14327 
14328  key_len = unhexify( key_str, "713358e746dd84ab27b8adb3b17ea59cd75fa6cb0c13d1a8" );
14329  pt_len = unhexify( src_str, "35b8b655efdf2d09f5ed0233c9eeb0b6f85e513834848cd594dba3c6e64f78e7af4a7a6d53bba7b43764334d6373360ae3b73b1e765978dffa7dbd805fda7825b8e317e8d3f1314aa97f877be815439c5da845028d1686283735aefac79cdb9e02ec3590091cb507089b9174cd9a6111f446feead91f19b80fd222fc6299fd1c" );
14330  iv_len = unhexify( iv_str, "26ed909f5851961dd57fa950b437e17c" );
14331  add_len = unhexify( add_str, "c9469ad408764cb7d417f800d3d84f03080cee9bbd53f652763accde5fba13a53a12d990094d587345da2cdc99357b9afd63945ca07b760a2c2d4948dbadb1312670ccde87655a6a68edb5982d2fcf733bb4101d38cdb1a4942a5d410f4c45f5ddf00889bc1fe5ec69b40ae8aaee60ee97bea096eeef0ea71736efdb0d8a5ec9" );
14332 
14333  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
14334  if( 0 == 0 )
14335  {
14336  fct_chk( 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 );
14337  hexify( dst_str, output, pt_len );
14338  hexify( tag_str, tag_output, tag_len );
14339 
14340  fct_chk( strcmp( (char *) dst_str, "cc3f9983e1d673ec2c86ae4c1e1b04e30f9f395f67c36838e15ce825b05d37e9cd40041470224da345aa2da5dfb3e0c561dd05ba7984a1332541d58e8f9160e7e8457e717bab203de3161a72b7aedfa53616b16ca77fd28d566fbf7431be559caa1a129b2f29b9c5bbf3eaba594d6650c62907eb28e176f27c3be7a3aa24cef6" ) == 0 );
14341  fct_chk( strcmp( (char *) tag_str, "5be7611b" ) == 0 );
14342  }
14343  }
14344  FCT_TEST_END();
14345 
14346 
14347  FCT_TEST_BGN(gcm_nist_validation_aes_25612800128_0)
14348  {
14349  unsigned char key_str[128];
14350  unsigned char src_str[128];
14351  unsigned char dst_str[257];
14352  unsigned char iv_str[128];
14353  unsigned char add_str[128];
14354  unsigned char tag_str[128];
14355  unsigned char output[128];
14356  unsigned char tag_output[16];
14357  gcm_context ctx;
14358  unsigned int key_len;
14359  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
14360 
14361  memset(key_str, 0x00, 128);
14362  memset(src_str, 0x00, 128);
14363  memset(dst_str, 0x00, 257);
14364  memset(iv_str, 0x00, 128);
14365  memset(add_str, 0x00, 128);
14366  memset(tag_str, 0x00, 128);
14367  memset(output, 0x00, 128);
14368  memset(tag_output, 0x00, 16);
14369 
14370  key_len = unhexify( key_str, "fb8094dd2eddb3d8004bb79134023ca2be4de9b668a9e4608abdf2130e8becb8" );
14371  pt_len = unhexify( src_str, "" );
14372  iv_len = unhexify( iv_str, "491a14e13b591cf2f39da96b6882b5e5" );
14373  add_len = unhexify( add_str, "" );
14374 
14375  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
14376  if( 0 == 0 )
14377  {
14378  fct_chk( 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 );
14379  hexify( dst_str, output, pt_len );
14380  hexify( tag_str, tag_output, tag_len );
14381 
14382  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
14383  fct_chk( strcmp( (char *) tag_str, "80883f2c925434a5edfcefd5b123d520" ) == 0 );
14384  }
14385  }
14386  FCT_TEST_END();
14387 
14388 
14389  FCT_TEST_BGN(gcm_nist_validation_aes_25612800128_1)
14390  {
14391  unsigned char key_str[128];
14392  unsigned char src_str[128];
14393  unsigned char dst_str[257];
14394  unsigned char iv_str[128];
14395  unsigned char add_str[128];
14396  unsigned char tag_str[128];
14397  unsigned char output[128];
14398  unsigned char tag_output[16];
14399  gcm_context ctx;
14400  unsigned int key_len;
14401  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
14402 
14403  memset(key_str, 0x00, 128);
14404  memset(src_str, 0x00, 128);
14405  memset(dst_str, 0x00, 257);
14406  memset(iv_str, 0x00, 128);
14407  memset(add_str, 0x00, 128);
14408  memset(tag_str, 0x00, 128);
14409  memset(output, 0x00, 128);
14410  memset(tag_output, 0x00, 16);
14411 
14412  key_len = unhexify( key_str, "725313f4cb3f6a0d29cefc174b7e4f43cef11b761ef75e1995cb64c1306795f1" );
14413  pt_len = unhexify( src_str, "" );
14414  iv_len = unhexify( iv_str, "27d1ed08aba23d79fc49ad8d92a2a0ea" );
14415  add_len = unhexify( add_str, "" );
14416 
14417  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
14418  if( 0 == 0 )
14419  {
14420  fct_chk( 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 );
14421  hexify( dst_str, output, pt_len );
14422  hexify( tag_str, tag_output, tag_len );
14423 
14424  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
14425  fct_chk( strcmp( (char *) tag_str, "d5d6637ba35ef2ad88e9725f938d3d2d" ) == 0 );
14426  }
14427  }
14428  FCT_TEST_END();
14429 
14430 
14431  FCT_TEST_BGN(gcm_nist_validation_aes_25612800128_2)
14432  {
14433  unsigned char key_str[128];
14434  unsigned char src_str[128];
14435  unsigned char dst_str[257];
14436  unsigned char iv_str[128];
14437  unsigned char add_str[128];
14438  unsigned char tag_str[128];
14439  unsigned char output[128];
14440  unsigned char tag_output[16];
14441  gcm_context ctx;
14442  unsigned int key_len;
14443  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
14444 
14445  memset(key_str, 0x00, 128);
14446  memset(src_str, 0x00, 128);
14447  memset(dst_str, 0x00, 257);
14448  memset(iv_str, 0x00, 128);
14449  memset(add_str, 0x00, 128);
14450  memset(tag_str, 0x00, 128);
14451  memset(output, 0x00, 128);
14452  memset(tag_output, 0x00, 16);
14453 
14454  key_len = unhexify( key_str, "4e766584ce0e885e1bba1327e5335796de0831a40f74a5cec178081dd15bfd10" );
14455  pt_len = unhexify( src_str, "" );
14456  iv_len = unhexify( iv_str, "cece0dea024ff47851af0500d146cbfe" );
14457  add_len = unhexify( add_str, "" );
14458 
14459  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
14460  if( 0 == 0 )
14461  {
14462  fct_chk( 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 );
14463  hexify( dst_str, output, pt_len );
14464  hexify( tag_str, tag_output, tag_len );
14465 
14466  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
14467  fct_chk( strcmp( (char *) tag_str, "1abe16eeab56bd0fb1ab909b8d528771" ) == 0 );
14468  }
14469  }
14470  FCT_TEST_END();
14471 
14472 
14473  FCT_TEST_BGN(gcm_nist_validation_aes_25612800120_0)
14474  {
14475  unsigned char key_str[128];
14476  unsigned char src_str[128];
14477  unsigned char dst_str[257];
14478  unsigned char iv_str[128];
14479  unsigned char add_str[128];
14480  unsigned char tag_str[128];
14481  unsigned char output[128];
14482  unsigned char tag_output[16];
14483  gcm_context ctx;
14484  unsigned int key_len;
14485  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
14486 
14487  memset(key_str, 0x00, 128);
14488  memset(src_str, 0x00, 128);
14489  memset(dst_str, 0x00, 257);
14490  memset(iv_str, 0x00, 128);
14491  memset(add_str, 0x00, 128);
14492  memset(tag_str, 0x00, 128);
14493  memset(output, 0x00, 128);
14494  memset(tag_output, 0x00, 16);
14495 
14496  key_len = unhexify( key_str, "ce7f2207f83a952451e714ba3807ddb3ed67c2739a628980411aa68366b1f2f5" );
14497  pt_len = unhexify( src_str, "" );
14498  iv_len = unhexify( iv_str, "652fd951ace288db397020687135a5d1" );
14499  add_len = unhexify( add_str, "" );
14500 
14501  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
14502  if( 0 == 0 )
14503  {
14504  fct_chk( 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 );
14505  hexify( dst_str, output, pt_len );
14506  hexify( tag_str, tag_output, tag_len );
14507 
14508  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
14509  fct_chk( strcmp( (char *) tag_str, "985227b14de16722987a3d34976442" ) == 0 );
14510  }
14511  }
14512  FCT_TEST_END();
14513 
14514 
14515  FCT_TEST_BGN(gcm_nist_validation_aes_25612800120_1)
14516  {
14517  unsigned char key_str[128];
14518  unsigned char src_str[128];
14519  unsigned char dst_str[257];
14520  unsigned char iv_str[128];
14521  unsigned char add_str[128];
14522  unsigned char tag_str[128];
14523  unsigned char output[128];
14524  unsigned char tag_output[16];
14525  gcm_context ctx;
14526  unsigned int key_len;
14527  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
14528 
14529  memset(key_str, 0x00, 128);
14530  memset(src_str, 0x00, 128);
14531  memset(dst_str, 0x00, 257);
14532  memset(iv_str, 0x00, 128);
14533  memset(add_str, 0x00, 128);
14534  memset(tag_str, 0x00, 128);
14535  memset(output, 0x00, 128);
14536  memset(tag_output, 0x00, 16);
14537 
14538  key_len = unhexify( key_str, "855f8fa4ec6a1206173509d504d0b29dfbfbfa9aa528254b189cd72e6ebc1c1f" );
14539  pt_len = unhexify( src_str, "" );
14540  iv_len = unhexify( iv_str, "1ad1507e6463e4e2e1a63155ac0e638f" );
14541  add_len = unhexify( add_str, "" );
14542 
14543  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
14544  if( 0 == 0 )
14545  {
14546  fct_chk( 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 );
14547  hexify( dst_str, output, pt_len );
14548  hexify( tag_str, tag_output, tag_len );
14549 
14550  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
14551  fct_chk( strcmp( (char *) tag_str, "693146a8b833f324c1d4cbeeb8c146" ) == 0 );
14552  }
14553  }
14554  FCT_TEST_END();
14555 
14556 
14557  FCT_TEST_BGN(gcm_nist_validation_aes_25612800120_2)
14558  {
14559  unsigned char key_str[128];
14560  unsigned char src_str[128];
14561  unsigned char dst_str[257];
14562  unsigned char iv_str[128];
14563  unsigned char add_str[128];
14564  unsigned char tag_str[128];
14565  unsigned char output[128];
14566  unsigned char tag_output[16];
14567  gcm_context ctx;
14568  unsigned int key_len;
14569  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
14570 
14571  memset(key_str, 0x00, 128);
14572  memset(src_str, 0x00, 128);
14573  memset(dst_str, 0x00, 257);
14574  memset(iv_str, 0x00, 128);
14575  memset(add_str, 0x00, 128);
14576  memset(tag_str, 0x00, 128);
14577  memset(output, 0x00, 128);
14578  memset(tag_output, 0x00, 16);
14579 
14580  key_len = unhexify( key_str, "ef8dd1294a85dd39e366f65e1076d53e046188c06c96b2c9e84ebc81f5c9f550" );
14581  pt_len = unhexify( src_str, "" );
14582  iv_len = unhexify( iv_str, "9698a07447552d1a4ecd2b4c47858f06" );
14583  add_len = unhexify( add_str, "" );
14584 
14585  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
14586  if( 0 == 0 )
14587  {
14588  fct_chk( 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 );
14589  hexify( dst_str, output, pt_len );
14590  hexify( tag_str, tag_output, tag_len );
14591 
14592  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
14593  fct_chk( strcmp( (char *) tag_str, "b00590cac6e398eeb3dcb98abe1912" ) == 0 );
14594  }
14595  }
14596  FCT_TEST_END();
14597 
14598 
14599  FCT_TEST_BGN(gcm_nist_validation_aes_25612800112_0)
14600  {
14601  unsigned char key_str[128];
14602  unsigned char src_str[128];
14603  unsigned char dst_str[257];
14604  unsigned char iv_str[128];
14605  unsigned char add_str[128];
14606  unsigned char tag_str[128];
14607  unsigned char output[128];
14608  unsigned char tag_output[16];
14609  gcm_context ctx;
14610  unsigned int key_len;
14611  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
14612 
14613  memset(key_str, 0x00, 128);
14614  memset(src_str, 0x00, 128);
14615  memset(dst_str, 0x00, 257);
14616  memset(iv_str, 0x00, 128);
14617  memset(add_str, 0x00, 128);
14618  memset(tag_str, 0x00, 128);
14619  memset(output, 0x00, 128);
14620  memset(tag_output, 0x00, 16);
14621 
14622  key_len = unhexify( key_str, "25896e587570ff1823639e1e51e9c89192d551b573dd747e7c0c1c10916ece4c" );
14623  pt_len = unhexify( src_str, "" );
14624  iv_len = unhexify( iv_str, "f0516457c09c372c358064eb6b470146" );
14625  add_len = unhexify( add_str, "" );
14626 
14627  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
14628  if( 0 == 0 )
14629  {
14630  fct_chk( 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 );
14631  hexify( dst_str, output, pt_len );
14632  hexify( tag_str, tag_output, tag_len );
14633 
14634  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
14635  fct_chk( strcmp( (char *) tag_str, "5a7cadec600a180e696d946425b0" ) == 0 );
14636  }
14637  }
14638  FCT_TEST_END();
14639 
14640 
14641  FCT_TEST_BGN(gcm_nist_validation_aes_25612800112_1)
14642  {
14643  unsigned char key_str[128];
14644  unsigned char src_str[128];
14645  unsigned char dst_str[257];
14646  unsigned char iv_str[128];
14647  unsigned char add_str[128];
14648  unsigned char tag_str[128];
14649  unsigned char output[128];
14650  unsigned char tag_output[16];
14651  gcm_context ctx;
14652  unsigned int key_len;
14653  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
14654 
14655  memset(key_str, 0x00, 128);
14656  memset(src_str, 0x00, 128);
14657  memset(dst_str, 0x00, 257);
14658  memset(iv_str, 0x00, 128);
14659  memset(add_str, 0x00, 128);
14660  memset(tag_str, 0x00, 128);
14661  memset(output, 0x00, 128);
14662  memset(tag_output, 0x00, 16);
14663 
14664  key_len = unhexify( key_str, "02fc9cfffbe72e7954182993088e09d24ea8cad91a8ca9a336d9f1fe4156486d" );
14665  pt_len = unhexify( src_str, "" );
14666  iv_len = unhexify( iv_str, "0e189e162e097eb2060b30c46d9afa70" );
14667  add_len = unhexify( add_str, "" );
14668 
14669  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
14670  if( 0 == 0 )
14671  {
14672  fct_chk( 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 );
14673  hexify( dst_str, output, pt_len );
14674  hexify( tag_str, tag_output, tag_len );
14675 
14676  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
14677  fct_chk( strcmp( (char *) tag_str, "7d3d5cc55e6182ec5413ef622d4f" ) == 0 );
14678  }
14679  }
14680  FCT_TEST_END();
14681 
14682 
14683  FCT_TEST_BGN(gcm_nist_validation_aes_25612800112_2)
14684  {
14685  unsigned char key_str[128];
14686  unsigned char src_str[128];
14687  unsigned char dst_str[257];
14688  unsigned char iv_str[128];
14689  unsigned char add_str[128];
14690  unsigned char tag_str[128];
14691  unsigned char output[128];
14692  unsigned char tag_output[16];
14693  gcm_context ctx;
14694  unsigned int key_len;
14695  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
14696 
14697  memset(key_str, 0x00, 128);
14698  memset(src_str, 0x00, 128);
14699  memset(dst_str, 0x00, 257);
14700  memset(iv_str, 0x00, 128);
14701  memset(add_str, 0x00, 128);
14702  memset(tag_str, 0x00, 128);
14703  memset(output, 0x00, 128);
14704  memset(tag_output, 0x00, 16);
14705 
14706  key_len = unhexify( key_str, "f24e3d631d8961d3d4b9912d4fa7a317db837a7b81cd52f90c703a4835c632e2" );
14707  pt_len = unhexify( src_str, "" );
14708  iv_len = unhexify( iv_str, "510740bfa2562ce99ca3839229145a46" );
14709  add_len = unhexify( add_str, "" );
14710 
14711  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
14712  if( 0 == 0 )
14713  {
14714  fct_chk( 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 );
14715  hexify( dst_str, output, pt_len );
14716  hexify( tag_str, tag_output, tag_len );
14717 
14718  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
14719  fct_chk( strcmp( (char *) tag_str, "1402ddc1854e5adb33664be85ad1" ) == 0 );
14720  }
14721  }
14722  FCT_TEST_END();
14723 
14724 
14725  FCT_TEST_BGN(gcm_nist_validation_aes_25612800104_0)
14726  {
14727  unsigned char key_str[128];
14728  unsigned char src_str[128];
14729  unsigned char dst_str[257];
14730  unsigned char iv_str[128];
14731  unsigned char add_str[128];
14732  unsigned char tag_str[128];
14733  unsigned char output[128];
14734  unsigned char tag_output[16];
14735  gcm_context ctx;
14736  unsigned int key_len;
14737  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
14738 
14739  memset(key_str, 0x00, 128);
14740  memset(src_str, 0x00, 128);
14741  memset(dst_str, 0x00, 257);
14742  memset(iv_str, 0x00, 128);
14743  memset(add_str, 0x00, 128);
14744  memset(tag_str, 0x00, 128);
14745  memset(output, 0x00, 128);
14746  memset(tag_output, 0x00, 16);
14747 
14748  key_len = unhexify( key_str, "720ab5aceb80ff1f864379add9b0d63607227f7c3f58425dd6ec3d4cea3fe2ea" );
14749  pt_len = unhexify( src_str, "" );
14750  iv_len = unhexify( iv_str, "58f2317afb64d894243c192ef5191300" );
14751  add_len = unhexify( add_str, "" );
14752 
14753  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
14754  if( 0 == 0 )
14755  {
14756  fct_chk( 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 );
14757  hexify( dst_str, output, pt_len );
14758  hexify( tag_str, tag_output, tag_len );
14759 
14760  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
14761  fct_chk( strcmp( (char *) tag_str, "e8e772402cc6bfd96a140b24c1" ) == 0 );
14762  }
14763  }
14764  FCT_TEST_END();
14765 
14766 
14767  FCT_TEST_BGN(gcm_nist_validation_aes_25612800104_1)
14768  {
14769  unsigned char key_str[128];
14770  unsigned char src_str[128];
14771  unsigned char dst_str[257];
14772  unsigned char iv_str[128];
14773  unsigned char add_str[128];
14774  unsigned char tag_str[128];
14775  unsigned char output[128];
14776  unsigned char tag_output[16];
14777  gcm_context ctx;
14778  unsigned int key_len;
14779  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
14780 
14781  memset(key_str, 0x00, 128);
14782  memset(src_str, 0x00, 128);
14783  memset(dst_str, 0x00, 257);
14784  memset(iv_str, 0x00, 128);
14785  memset(add_str, 0x00, 128);
14786  memset(tag_str, 0x00, 128);
14787  memset(output, 0x00, 128);
14788  memset(tag_output, 0x00, 16);
14789 
14790  key_len = unhexify( key_str, "f57dd16fa92a8f8c09d8f13cb5b6633a43b8762e90c670232f55949cdfdf700c" );
14791  pt_len = unhexify( src_str, "" );
14792  iv_len = unhexify( iv_str, "3b7c14ee357b3c6b0dc09e3209ab69f2" );
14793  add_len = unhexify( add_str, "" );
14794 
14795  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
14796  if( 0 == 0 )
14797  {
14798  fct_chk( 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 );
14799  hexify( dst_str, output, pt_len );
14800  hexify( tag_str, tag_output, tag_len );
14801 
14802  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
14803  fct_chk( strcmp( (char *) tag_str, "43e609664e48ad1f5478087f24" ) == 0 );
14804  }
14805  }
14806  FCT_TEST_END();
14807 
14808 
14809  FCT_TEST_BGN(gcm_nist_validation_aes_25612800104_2)
14810  {
14811  unsigned char key_str[128];
14812  unsigned char src_str[128];
14813  unsigned char dst_str[257];
14814  unsigned char iv_str[128];
14815  unsigned char add_str[128];
14816  unsigned char tag_str[128];
14817  unsigned char output[128];
14818  unsigned char tag_output[16];
14819  gcm_context ctx;
14820  unsigned int key_len;
14821  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
14822 
14823  memset(key_str, 0x00, 128);
14824  memset(src_str, 0x00, 128);
14825  memset(dst_str, 0x00, 257);
14826  memset(iv_str, 0x00, 128);
14827  memset(add_str, 0x00, 128);
14828  memset(tag_str, 0x00, 128);
14829  memset(output, 0x00, 128);
14830  memset(tag_output, 0x00, 16);
14831 
14832  key_len = unhexify( key_str, "87c17ab919a4bc0d50343c0bb282a969283c2ada25f9a96d2858c7f89bc5139a" );
14833  pt_len = unhexify( src_str, "" );
14834  iv_len = unhexify( iv_str, "02813d3faf30d3e186d119e89fe36574" );
14835  add_len = unhexify( add_str, "" );
14836 
14837  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
14838  if( 0 == 0 )
14839  {
14840  fct_chk( 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 );
14841  hexify( dst_str, output, pt_len );
14842  hexify( tag_str, tag_output, tag_len );
14843 
14844  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
14845  fct_chk( strcmp( (char *) tag_str, "d1a1f82a8462c783b15c92b57e" ) == 0 );
14846  }
14847  }
14848  FCT_TEST_END();
14849 
14850 
14851  FCT_TEST_BGN(gcm_nist_validation_aes_2561280096_0)
14852  {
14853  unsigned char key_str[128];
14854  unsigned char src_str[128];
14855  unsigned char dst_str[257];
14856  unsigned char iv_str[128];
14857  unsigned char add_str[128];
14858  unsigned char tag_str[128];
14859  unsigned char output[128];
14860  unsigned char tag_output[16];
14861  gcm_context ctx;
14862  unsigned int key_len;
14863  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
14864 
14865  memset(key_str, 0x00, 128);
14866  memset(src_str, 0x00, 128);
14867  memset(dst_str, 0x00, 257);
14868  memset(iv_str, 0x00, 128);
14869  memset(add_str, 0x00, 128);
14870  memset(tag_str, 0x00, 128);
14871  memset(output, 0x00, 128);
14872  memset(tag_output, 0x00, 16);
14873 
14874  key_len = unhexify( key_str, "dd8d5b6c5c938c905c17eab9f5ab7cd68d27f3f09d75177119010d070b91e646" );
14875  pt_len = unhexify( src_str, "" );
14876  iv_len = unhexify( iv_str, "1df1c3ad363c973bffe29975574ffdf6" );
14877  add_len = unhexify( add_str, "" );
14878 
14879  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
14880  if( 0 == 0 )
14881  {
14882  fct_chk( 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 );
14883  hexify( dst_str, output, pt_len );
14884  hexify( tag_str, tag_output, tag_len );
14885 
14886  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
14887  fct_chk( strcmp( (char *) tag_str, "749ac7ffda825fc973475b83" ) == 0 );
14888  }
14889  }
14890  FCT_TEST_END();
14891 
14892 
14893  FCT_TEST_BGN(gcm_nist_validation_aes_2561280096_1)
14894  {
14895  unsigned char key_str[128];
14896  unsigned char src_str[128];
14897  unsigned char dst_str[257];
14898  unsigned char iv_str[128];
14899  unsigned char add_str[128];
14900  unsigned char tag_str[128];
14901  unsigned char output[128];
14902  unsigned char tag_output[16];
14903  gcm_context ctx;
14904  unsigned int key_len;
14905  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
14906 
14907  memset(key_str, 0x00, 128);
14908  memset(src_str, 0x00, 128);
14909  memset(dst_str, 0x00, 257);
14910  memset(iv_str, 0x00, 128);
14911  memset(add_str, 0x00, 128);
14912  memset(tag_str, 0x00, 128);
14913  memset(output, 0x00, 128);
14914  memset(tag_output, 0x00, 16);
14915 
14916  key_len = unhexify( key_str, "4d60a14cb789099c77b8991e7b0b40f787d3458f448501e8108e4d76110f94ef" );
14917  pt_len = unhexify( src_str, "" );
14918  iv_len = unhexify( iv_str, "ca6b3485eb5dcd9dbfa7cffcdb22daa5" );
14919  add_len = unhexify( add_str, "" );
14920 
14921  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
14922  if( 0 == 0 )
14923  {
14924  fct_chk( 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 );
14925  hexify( dst_str, output, pt_len );
14926  hexify( tag_str, tag_output, tag_len );
14927 
14928  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
14929  fct_chk( strcmp( (char *) tag_str, "3f868b6510d64098adc1d640" ) == 0 );
14930  }
14931  }
14932  FCT_TEST_END();
14933 
14934 
14935  FCT_TEST_BGN(gcm_nist_validation_aes_2561280096_2)
14936  {
14937  unsigned char key_str[128];
14938  unsigned char src_str[128];
14939  unsigned char dst_str[257];
14940  unsigned char iv_str[128];
14941  unsigned char add_str[128];
14942  unsigned char tag_str[128];
14943  unsigned char output[128];
14944  unsigned char tag_output[16];
14945  gcm_context ctx;
14946  unsigned int key_len;
14947  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
14948 
14949  memset(key_str, 0x00, 128);
14950  memset(src_str, 0x00, 128);
14951  memset(dst_str, 0x00, 257);
14952  memset(iv_str, 0x00, 128);
14953  memset(add_str, 0x00, 128);
14954  memset(tag_str, 0x00, 128);
14955  memset(output, 0x00, 128);
14956  memset(tag_output, 0x00, 16);
14957 
14958  key_len = unhexify( key_str, "405b690717de993ad945d80159c2800848060de0b7d2b277efd0350a99ba609a" );
14959  pt_len = unhexify( src_str, "" );
14960  iv_len = unhexify( iv_str, "63730acb957869f0c091f22d964cc6a3" );
14961  add_len = unhexify( add_str, "" );
14962 
14963  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
14964  if( 0 == 0 )
14965  {
14966  fct_chk( 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 );
14967  hexify( dst_str, output, pt_len );
14968  hexify( tag_str, tag_output, tag_len );
14969 
14970  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
14971  fct_chk( strcmp( (char *) tag_str, "739688362337d61dab2591f0" ) == 0 );
14972  }
14973  }
14974  FCT_TEST_END();
14975 
14976 
14977  FCT_TEST_BGN(gcm_nist_validation_aes_2561280064_0)
14978  {
14979  unsigned char key_str[128];
14980  unsigned char src_str[128];
14981  unsigned char dst_str[257];
14982  unsigned char iv_str[128];
14983  unsigned char add_str[128];
14984  unsigned char tag_str[128];
14985  unsigned char output[128];
14986  unsigned char tag_output[16];
14987  gcm_context ctx;
14988  unsigned int key_len;
14989  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
14990 
14991  memset(key_str, 0x00, 128);
14992  memset(src_str, 0x00, 128);
14993  memset(dst_str, 0x00, 257);
14994  memset(iv_str, 0x00, 128);
14995  memset(add_str, 0x00, 128);
14996  memset(tag_str, 0x00, 128);
14997  memset(output, 0x00, 128);
14998  memset(tag_output, 0x00, 16);
14999 
15000  key_len = unhexify( key_str, "ab5563a387e72d7d10468c99df590e1de25ec10363aa90d1448a9ffcd1de6867" );
15001  pt_len = unhexify( src_str, "" );
15002  iv_len = unhexify( iv_str, "c511406701bad20a2fa29b1e76924d2f" );
15003  add_len = unhexify( add_str, "" );
15004 
15005  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
15006  if( 0 == 0 )
15007  {
15008  fct_chk( 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 );
15009  hexify( dst_str, output, pt_len );
15010  hexify( tag_str, tag_output, tag_len );
15011 
15012  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
15013  fct_chk( strcmp( (char *) tag_str, "390291ed142ba760" ) == 0 );
15014  }
15015  }
15016  FCT_TEST_END();
15017 
15018 
15019  FCT_TEST_BGN(gcm_nist_validation_aes_2561280064_1)
15020  {
15021  unsigned char key_str[128];
15022  unsigned char src_str[128];
15023  unsigned char dst_str[257];
15024  unsigned char iv_str[128];
15025  unsigned char add_str[128];
15026  unsigned char tag_str[128];
15027  unsigned char output[128];
15028  unsigned char tag_output[16];
15029  gcm_context ctx;
15030  unsigned int key_len;
15031  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
15032 
15033  memset(key_str, 0x00, 128);
15034  memset(src_str, 0x00, 128);
15035  memset(dst_str, 0x00, 257);
15036  memset(iv_str, 0x00, 128);
15037  memset(add_str, 0x00, 128);
15038  memset(tag_str, 0x00, 128);
15039  memset(output, 0x00, 128);
15040  memset(tag_output, 0x00, 16);
15041 
15042  key_len = unhexify( key_str, "abef7c24daaa21f308a5af03df936ba3f70aa525190af0d959d6e50d836f4624" );
15043  pt_len = unhexify( src_str, "" );
15044  iv_len = unhexify( iv_str, "e9f15950130b9524e2b09f77be39109a" );
15045  add_len = unhexify( add_str, "" );
15046 
15047  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
15048  if( 0 == 0 )
15049  {
15050  fct_chk( 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 );
15051  hexify( dst_str, output, pt_len );
15052  hexify( tag_str, tag_output, tag_len );
15053 
15054  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
15055  fct_chk( strcmp( (char *) tag_str, "db2fb2b004bc8dc4" ) == 0 );
15056  }
15057  }
15058  FCT_TEST_END();
15059 
15060 
15061  FCT_TEST_BGN(gcm_nist_validation_aes_2561280064_2)
15062  {
15063  unsigned char key_str[128];
15064  unsigned char src_str[128];
15065  unsigned char dst_str[257];
15066  unsigned char iv_str[128];
15067  unsigned char add_str[128];
15068  unsigned char tag_str[128];
15069  unsigned char output[128];
15070  unsigned char tag_output[16];
15071  gcm_context ctx;
15072  unsigned int key_len;
15073  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
15074 
15075  memset(key_str, 0x00, 128);
15076  memset(src_str, 0x00, 128);
15077  memset(dst_str, 0x00, 257);
15078  memset(iv_str, 0x00, 128);
15079  memset(add_str, 0x00, 128);
15080  memset(tag_str, 0x00, 128);
15081  memset(output, 0x00, 128);
15082  memset(tag_output, 0x00, 16);
15083 
15084  key_len = unhexify( key_str, "6ca630b0b6779a8de7a19e5279eac94bf29f76f8b0cf8ecf8f11c4f8eb04aa0d" );
15085  pt_len = unhexify( src_str, "" );
15086  iv_len = unhexify( iv_str, "7373befc2c8007f42eef47be1086842f" );
15087  add_len = unhexify( add_str, "" );
15088 
15089  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
15090  if( 0 == 0 )
15091  {
15092  fct_chk( 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 );
15093  hexify( dst_str, output, pt_len );
15094  hexify( tag_str, tag_output, tag_len );
15095 
15096  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
15097  fct_chk( strcmp( (char *) tag_str, "e2b8620bcc7472a8" ) == 0 );
15098  }
15099  }
15100  FCT_TEST_END();
15101 
15102 
15103  FCT_TEST_BGN(gcm_nist_validation_aes_2561280032_0)
15104  {
15105  unsigned char key_str[128];
15106  unsigned char src_str[128];
15107  unsigned char dst_str[257];
15108  unsigned char iv_str[128];
15109  unsigned char add_str[128];
15110  unsigned char tag_str[128];
15111  unsigned char output[128];
15112  unsigned char tag_output[16];
15113  gcm_context ctx;
15114  unsigned int key_len;
15115  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
15116 
15117  memset(key_str, 0x00, 128);
15118  memset(src_str, 0x00, 128);
15119  memset(dst_str, 0x00, 257);
15120  memset(iv_str, 0x00, 128);
15121  memset(add_str, 0x00, 128);
15122  memset(tag_str, 0x00, 128);
15123  memset(output, 0x00, 128);
15124  memset(tag_output, 0x00, 16);
15125 
15126  key_len = unhexify( key_str, "acea7818a71df2c9840aef1c10ecbe2bac7e92216388416a2f36119a0745d883" );
15127  pt_len = unhexify( src_str, "" );
15128  iv_len = unhexify( iv_str, "6d46aa39fb5a6117e9adf7ee72bc50ff" );
15129  add_len = unhexify( add_str, "" );
15130 
15131  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
15132  if( 0 == 0 )
15133  {
15134  fct_chk( 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 );
15135  hexify( dst_str, output, pt_len );
15136  hexify( tag_str, tag_output, tag_len );
15137 
15138  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
15139  fct_chk( strcmp( (char *) tag_str, "fd5ff17b" ) == 0 );
15140  }
15141  }
15142  FCT_TEST_END();
15143 
15144 
15145  FCT_TEST_BGN(gcm_nist_validation_aes_2561280032_1)
15146  {
15147  unsigned char key_str[128];
15148  unsigned char src_str[128];
15149  unsigned char dst_str[257];
15150  unsigned char iv_str[128];
15151  unsigned char add_str[128];
15152  unsigned char tag_str[128];
15153  unsigned char output[128];
15154  unsigned char tag_output[16];
15155  gcm_context ctx;
15156  unsigned int key_len;
15157  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
15158 
15159  memset(key_str, 0x00, 128);
15160  memset(src_str, 0x00, 128);
15161  memset(dst_str, 0x00, 257);
15162  memset(iv_str, 0x00, 128);
15163  memset(add_str, 0x00, 128);
15164  memset(tag_str, 0x00, 128);
15165  memset(output, 0x00, 128);
15166  memset(tag_output, 0x00, 16);
15167 
15168  key_len = unhexify( key_str, "b301036d4b2b28b8a4502925986861eba2b67c24cb0c79c63fd62195d9b67506" );
15169  pt_len = unhexify( src_str, "" );
15170  iv_len = unhexify( iv_str, "bb6f398e5aed51590e3df02f5419e44d" );
15171  add_len = unhexify( add_str, "" );
15172 
15173  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
15174  if( 0 == 0 )
15175  {
15176  fct_chk( 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 );
15177  hexify( dst_str, output, pt_len );
15178  hexify( tag_str, tag_output, tag_len );
15179 
15180  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
15181  fct_chk( strcmp( (char *) tag_str, "47f3a906" ) == 0 );
15182  }
15183  }
15184  FCT_TEST_END();
15185 
15186 
15187  FCT_TEST_BGN(gcm_nist_validation_aes_2561280032_2)
15188  {
15189  unsigned char key_str[128];
15190  unsigned char src_str[128];
15191  unsigned char dst_str[257];
15192  unsigned char iv_str[128];
15193  unsigned char add_str[128];
15194  unsigned char tag_str[128];
15195  unsigned char output[128];
15196  unsigned char tag_output[16];
15197  gcm_context ctx;
15198  unsigned int key_len;
15199  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
15200 
15201  memset(key_str, 0x00, 128);
15202  memset(src_str, 0x00, 128);
15203  memset(dst_str, 0x00, 257);
15204  memset(iv_str, 0x00, 128);
15205  memset(add_str, 0x00, 128);
15206  memset(tag_str, 0x00, 128);
15207  memset(output, 0x00, 128);
15208  memset(tag_output, 0x00, 16);
15209 
15210  key_len = unhexify( key_str, "89576d2aac554c8982c7df0053be9ab19f4bd80ba9f3dd433c1c054d68e68795" );
15211  pt_len = unhexify( src_str, "" );
15212  iv_len = unhexify( iv_str, "aedbd482a401a7c12d4755077c8dd26e" );
15213  add_len = unhexify( add_str, "" );
15214 
15215  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
15216  if( 0 == 0 )
15217  {
15218  fct_chk( 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 );
15219  hexify( dst_str, output, pt_len );
15220  hexify( tag_str, tag_output, tag_len );
15221 
15222  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
15223  fct_chk( strcmp( (char *) tag_str, "506fa18d" ) == 0 );
15224  }
15225  }
15226  FCT_TEST_END();
15227 
15228 
15229  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024128_0)
15230  {
15231  unsigned char key_str[128];
15232  unsigned char src_str[128];
15233  unsigned char dst_str[257];
15234  unsigned char iv_str[128];
15235  unsigned char add_str[128];
15236  unsigned char tag_str[128];
15237  unsigned char output[128];
15238  unsigned char tag_output[16];
15239  gcm_context ctx;
15240  unsigned int key_len;
15241  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
15242 
15243  memset(key_str, 0x00, 128);
15244  memset(src_str, 0x00, 128);
15245  memset(dst_str, 0x00, 257);
15246  memset(iv_str, 0x00, 128);
15247  memset(add_str, 0x00, 128);
15248  memset(tag_str, 0x00, 128);
15249  memset(output, 0x00, 128);
15250  memset(tag_output, 0x00, 16);
15251 
15252  key_len = unhexify( key_str, "43c9e209da3c1971d986a45b92f2fa0d2d155183730d21d71ed8e2284ec308e3" );
15253  pt_len = unhexify( src_str, "" );
15254  iv_len = unhexify( iv_str, "78bef655dfd8990b04d2a25678d7086d" );
15255  add_len = unhexify( add_str, "9d8c6734546797c581b9b1d0d4f05b27fe0539bd01655d2d1a8a1489cdf804228753d77272bf6ded19d47a6abd6281ea9591d4bcc1be222305fdf689c5faa4c11331cffbf42215469b81f61b40415d81cc37161e5c0258a67642b9b8ac627d6e39f43e485e1ff522ac742a07defa3569aeb59990cb44c4f3d952f8119ff1111d" );
15256 
15257  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
15258  if( 0 == 0 )
15259  {
15260  fct_chk( 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 );
15261  hexify( dst_str, output, pt_len );
15262  hexify( tag_str, tag_output, tag_len );
15263 
15264  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
15265  fct_chk( strcmp( (char *) tag_str, "f15ddf938bbf52c2977adabaf4120de8" ) == 0 );
15266  }
15267  }
15268  FCT_TEST_END();
15269 
15270 
15271  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024128_1)
15272  {
15273  unsigned char key_str[128];
15274  unsigned char src_str[128];
15275  unsigned char dst_str[257];
15276  unsigned char iv_str[128];
15277  unsigned char add_str[128];
15278  unsigned char tag_str[128];
15279  unsigned char output[128];
15280  unsigned char tag_output[16];
15281  gcm_context ctx;
15282  unsigned int key_len;
15283  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
15284 
15285  memset(key_str, 0x00, 128);
15286  memset(src_str, 0x00, 128);
15287  memset(dst_str, 0x00, 257);
15288  memset(iv_str, 0x00, 128);
15289  memset(add_str, 0x00, 128);
15290  memset(tag_str, 0x00, 128);
15291  memset(output, 0x00, 128);
15292  memset(tag_output, 0x00, 16);
15293 
15294  key_len = unhexify( key_str, "fbe2d52b7f50bf23a16ff8cd864215034fdfbf4d1506ca3c1ffb015653efe33a" );
15295  pt_len = unhexify( src_str, "" );
15296  iv_len = unhexify( iv_str, "b155f8ab1a8c0327789cfb8310051f19" );
15297  add_len = unhexify( add_str, "ed8d14adf1c362bbaf0d569c8083278e8225f883d75d237a4abcd775a49780603e50c00a1b5b5946c085e57a749b4946f6aca96eda04ac9944a7d3d47adc88326ed30a34d879dd02fb88182f9e2deefaeee1c306b897539fa9075bda03ba07b4ffff71ce732ef3c4befac0f18c85a0652d34524ccb1a4747ab8f72ed1c24d8fc" );
15298 
15299  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
15300  if( 0 == 0 )
15301  {
15302  fct_chk( 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 );
15303  hexify( dst_str, output, pt_len );
15304  hexify( tag_str, tag_output, tag_len );
15305 
15306  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
15307  fct_chk( strcmp( (char *) tag_str, "c5fe27ca90e5c8b321cc391ee7f1f796" ) == 0 );
15308  }
15309  }
15310  FCT_TEST_END();
15311 
15312 
15313  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024128_2)
15314  {
15315  unsigned char key_str[128];
15316  unsigned char src_str[128];
15317  unsigned char dst_str[257];
15318  unsigned char iv_str[128];
15319  unsigned char add_str[128];
15320  unsigned char tag_str[128];
15321  unsigned char output[128];
15322  unsigned char tag_output[16];
15323  gcm_context ctx;
15324  unsigned int key_len;
15325  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
15326 
15327  memset(key_str, 0x00, 128);
15328  memset(src_str, 0x00, 128);
15329  memset(dst_str, 0x00, 257);
15330  memset(iv_str, 0x00, 128);
15331  memset(add_str, 0x00, 128);
15332  memset(tag_str, 0x00, 128);
15333  memset(output, 0x00, 128);
15334  memset(tag_output, 0x00, 16);
15335 
15336  key_len = unhexify( key_str, "8e888721514fd01fb67513cb56bfd29af67a9ce525e3e697af47450f02053161" );
15337  pt_len = unhexify( src_str, "" );
15338  iv_len = unhexify( iv_str, "9f6bd4a93e4f3f2f5f4a7c2c5b4790bf" );
15339  add_len = unhexify( add_str, "867d50923967535ce6f00395930083523c22f373cfb6c8817764f5623cd60b555572404e54f2fe7083ef32b9a4593a1f70a736d6e8fe61b77def51f3b1d8f679d3a8d50d0aad49e51ec1eb4d4a25f13d14f3e5253555c73eac759e484c6131cc868b46c18b26acd040c3e1cb27afecba7b7fc3f5ff4883f4eafc26c7f3084751" );
15340 
15341  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
15342  if( 0 == 0 )
15343  {
15344  fct_chk( 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 );
15345  hexify( dst_str, output, pt_len );
15346  hexify( tag_str, tag_output, tag_len );
15347 
15348  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
15349  fct_chk( strcmp( (char *) tag_str, "ea269094330b6926627889fcdb06aab4" ) == 0 );
15350  }
15351  }
15352  FCT_TEST_END();
15353 
15354 
15355  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024120_0)
15356  {
15357  unsigned char key_str[128];
15358  unsigned char src_str[128];
15359  unsigned char dst_str[257];
15360  unsigned char iv_str[128];
15361  unsigned char add_str[128];
15362  unsigned char tag_str[128];
15363  unsigned char output[128];
15364  unsigned char tag_output[16];
15365  gcm_context ctx;
15366  unsigned int key_len;
15367  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
15368 
15369  memset(key_str, 0x00, 128);
15370  memset(src_str, 0x00, 128);
15371  memset(dst_str, 0x00, 257);
15372  memset(iv_str, 0x00, 128);
15373  memset(add_str, 0x00, 128);
15374  memset(tag_str, 0x00, 128);
15375  memset(output, 0x00, 128);
15376  memset(tag_output, 0x00, 16);
15377 
15378  key_len = unhexify( key_str, "d8f82b07e7319ca607c9aa0352070ca883dd7b32af370a774f63b0270f44835a" );
15379  pt_len = unhexify( src_str, "" );
15380  iv_len = unhexify( iv_str, "e89e4484497cb728f86585d8918b7fae" );
15381  add_len = unhexify( add_str, "42340d96e1852de3ed5e30eb4a05e1fb222480b450e2bf4e2cf0fb2a525eb6602ef43a896adc5c52ea5381c642b2175691c014e7a6dae91fa6ff5b95c18a2dd2e8838d3abd46ace0b305f3f22d30a0bd82a81bbf6753362b54b0624c76c0d753e30eb636365f0df7e1bf8bf130cf36062ec23f58a3f7ed0ae7bfbbd68460cd76" );
15382 
15383  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
15384  if( 0 == 0 )
15385  {
15386  fct_chk( 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 );
15387  hexify( dst_str, output, pt_len );
15388  hexify( tag_str, tag_output, tag_len );
15389 
15390  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
15391  fct_chk( strcmp( (char *) tag_str, "b234b28917372374e7f304f1462b49" ) == 0 );
15392  }
15393  }
15394  FCT_TEST_END();
15395 
15396 
15397  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024120_1)
15398  {
15399  unsigned char key_str[128];
15400  unsigned char src_str[128];
15401  unsigned char dst_str[257];
15402  unsigned char iv_str[128];
15403  unsigned char add_str[128];
15404  unsigned char tag_str[128];
15405  unsigned char output[128];
15406  unsigned char tag_output[16];
15407  gcm_context ctx;
15408  unsigned int key_len;
15409  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
15410 
15411  memset(key_str, 0x00, 128);
15412  memset(src_str, 0x00, 128);
15413  memset(dst_str, 0x00, 257);
15414  memset(iv_str, 0x00, 128);
15415  memset(add_str, 0x00, 128);
15416  memset(tag_str, 0x00, 128);
15417  memset(output, 0x00, 128);
15418  memset(tag_output, 0x00, 16);
15419 
15420  key_len = unhexify( key_str, "b49b04a54a08d28b077ea54c18bfa53e916723e91453b47f88e399046b9b4dcc" );
15421  pt_len = unhexify( src_str, "" );
15422  iv_len = unhexify( iv_str, "6276c577c530f91b434ce5719e1c59de" );
15423  add_len = unhexify( add_str, "6b73f996c49e368fc4d21816153aefb081509f9dc0916dbe4fdf77f39867a2bd617b8a75f39f515b1bc1454009d5247efcd90ba0d4a6743c6f12a929b666584f3b55254c32e2bab2321f94fa843dc5124c341dd509788a158191ee141eb0bc4e1b96f6987bafe664a0f9ac6d85c59cee9564a27bcc37dffae80c57fbf7e748ce" );
15424 
15425  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
15426  if( 0 == 0 )
15427  {
15428  fct_chk( 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 );
15429  hexify( dst_str, output, pt_len );
15430  hexify( tag_str, tag_output, tag_len );
15431 
15432  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
15433  fct_chk( strcmp( (char *) tag_str, "69dd5bdeb15fdbc3a70c44b150f70e" ) == 0 );
15434  }
15435  }
15436  FCT_TEST_END();
15437 
15438 
15439  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024120_2)
15440  {
15441  unsigned char key_str[128];
15442  unsigned char src_str[128];
15443  unsigned char dst_str[257];
15444  unsigned char iv_str[128];
15445  unsigned char add_str[128];
15446  unsigned char tag_str[128];
15447  unsigned char output[128];
15448  unsigned char tag_output[16];
15449  gcm_context ctx;
15450  unsigned int key_len;
15451  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
15452 
15453  memset(key_str, 0x00, 128);
15454  memset(src_str, 0x00, 128);
15455  memset(dst_str, 0x00, 257);
15456  memset(iv_str, 0x00, 128);
15457  memset(add_str, 0x00, 128);
15458  memset(tag_str, 0x00, 128);
15459  memset(output, 0x00, 128);
15460  memset(tag_output, 0x00, 16);
15461 
15462  key_len = unhexify( key_str, "398bb37bb991898c7dad7bf5930dbad20d121f68d5ec6c56ffe66f23c0c37f8e" );
15463  pt_len = unhexify( src_str, "" );
15464  iv_len = unhexify( iv_str, "0c3bd55b54c1221b0cf25d88ea4dfe24" );
15465  add_len = unhexify( add_str, "4c48b929f31180e697ea6199cd96c47cecc95c9ed4c442d6a23ca3a23d4b4833601ac4bbcdbc333cd1b3a0cd90338e1c88ef8561fed7ad0f4f54120b76281958995c95e4c9daabff75d71e2d5770420211c341c6b062b6c8b31b8fe8990588fbad1e651a49b0badd9a8d8042206337a1f2aa980b3ba3b5ee8e3396a2b9150a34" );
15466 
15467  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
15468  if( 0 == 0 )
15469  {
15470  fct_chk( 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 );
15471  hexify( dst_str, output, pt_len );
15472  hexify( tag_str, tag_output, tag_len );
15473 
15474  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
15475  fct_chk( strcmp( (char *) tag_str, "8528950bd5371681a78176ae1ea5dc" ) == 0 );
15476  }
15477  }
15478  FCT_TEST_END();
15479 
15480 
15481  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024112_0)
15482  {
15483  unsigned char key_str[128];
15484  unsigned char src_str[128];
15485  unsigned char dst_str[257];
15486  unsigned char iv_str[128];
15487  unsigned char add_str[128];
15488  unsigned char tag_str[128];
15489  unsigned char output[128];
15490  unsigned char tag_output[16];
15491  gcm_context ctx;
15492  unsigned int key_len;
15493  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
15494 
15495  memset(key_str, 0x00, 128);
15496  memset(src_str, 0x00, 128);
15497  memset(dst_str, 0x00, 257);
15498  memset(iv_str, 0x00, 128);
15499  memset(add_str, 0x00, 128);
15500  memset(tag_str, 0x00, 128);
15501  memset(output, 0x00, 128);
15502  memset(tag_output, 0x00, 16);
15503 
15504  key_len = unhexify( key_str, "8e8f7c317b22dea8eabe7eaa87413a98ff56570720985b6743a5f9af56387cca" );
15505  pt_len = unhexify( src_str, "" );
15506  iv_len = unhexify( iv_str, "3a9a5a839045723afdfb2d5df968bfcb" );
15507  add_len = unhexify( add_str, "a87d95f8f47e45a1c7c5c58d16055b52b3256c52713fd092bcd6cbc44e2c84669f23ca2a19e34163ee297f592f6054dbc88863a896c2217e93a660d55a6cd9588a7275d05649940d96815c7ddfa5fc4394c75349f05f1bcaff804095783726c0eceb79833a48cefd346b223f4e5401789684e5caeda187a323962a1f32f63f02" );
15508 
15509  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
15510  if( 0 == 0 )
15511  {
15512  fct_chk( 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 );
15513  hexify( dst_str, output, pt_len );
15514  hexify( tag_str, tag_output, tag_len );
15515 
15516  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
15517  fct_chk( strcmp( (char *) tag_str, "faad6a9731430e148ace27214e68" ) == 0 );
15518  }
15519  }
15520  FCT_TEST_END();
15521 
15522 
15523  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024112_1)
15524  {
15525  unsigned char key_str[128];
15526  unsigned char src_str[128];
15527  unsigned char dst_str[257];
15528  unsigned char iv_str[128];
15529  unsigned char add_str[128];
15530  unsigned char tag_str[128];
15531  unsigned char output[128];
15532  unsigned char tag_output[16];
15533  gcm_context ctx;
15534  unsigned int key_len;
15535  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
15536 
15537  memset(key_str, 0x00, 128);
15538  memset(src_str, 0x00, 128);
15539  memset(dst_str, 0x00, 257);
15540  memset(iv_str, 0x00, 128);
15541  memset(add_str, 0x00, 128);
15542  memset(tag_str, 0x00, 128);
15543  memset(output, 0x00, 128);
15544  memset(tag_output, 0x00, 16);
15545 
15546  key_len = unhexify( key_str, "67c95e57197f0e0bbaaa866d337fcc37f3a10dc55a059f5ea498de204d2fff61" );
15547  pt_len = unhexify( src_str, "" );
15548  iv_len = unhexify( iv_str, "5f171d203c653a316cac43df99f4033a" );
15549  add_len = unhexify( add_str, "84f281b388ca18bc97323657a723a56260731234720b02b6dde00ea134bd84a1893bec38af80214c4da01b93958ab00f3b648c975371e565d5b6bf2a8f63c0f3cfcd557c9f63574390b6ae533085aca51fa9d46cd2478b7648b6dcbbac7e61197a425778debe351ac2110ba510a17e2c351ba75d5a755ef547cf9acc54650222" );
15550 
15551  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
15552  if( 0 == 0 )
15553  {
15554  fct_chk( 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 );
15555  hexify( dst_str, output, pt_len );
15556  hexify( tag_str, tag_output, tag_len );
15557 
15558  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
15559  fct_chk( strcmp( (char *) tag_str, "9ea9c716e06a274d15a3595a0c41" ) == 0 );
15560  }
15561  }
15562  FCT_TEST_END();
15563 
15564 
15565  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024112_2)
15566  {
15567  unsigned char key_str[128];
15568  unsigned char src_str[128];
15569  unsigned char dst_str[257];
15570  unsigned char iv_str[128];
15571  unsigned char add_str[128];
15572  unsigned char tag_str[128];
15573  unsigned char output[128];
15574  unsigned char tag_output[16];
15575  gcm_context ctx;
15576  unsigned int key_len;
15577  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
15578 
15579  memset(key_str, 0x00, 128);
15580  memset(src_str, 0x00, 128);
15581  memset(dst_str, 0x00, 257);
15582  memset(iv_str, 0x00, 128);
15583  memset(add_str, 0x00, 128);
15584  memset(tag_str, 0x00, 128);
15585  memset(output, 0x00, 128);
15586  memset(tag_output, 0x00, 16);
15587 
15588  key_len = unhexify( key_str, "9143f00e31c72bd9fced31585d047f67f1004e6244c3d9c10c8ae005feeabc84" );
15589  pt_len = unhexify( src_str, "" );
15590  iv_len = unhexify( iv_str, "e49cd6af9a2f0da2a7198317da92ab2f" );
15591  add_len = unhexify( add_str, "ab9193a155140d265aabfe2dd5efca7d3fa6129498532bccd77f09fa1a480702620b3ab53df91b01262122f1a6fc387b5fc55dadfcdb99ada83d4a5b0666c8526de309f41eb54d69b52595c43550a6bf7b4b8f0e0c48311b521762eaa567744c4c4704dd977f84068b59db98a67e33cc65302ba59360d600a22138c5ad3317f3" );
15592 
15593  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
15594  if( 0 == 0 )
15595  {
15596  fct_chk( 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 );
15597  hexify( dst_str, output, pt_len );
15598  hexify( tag_str, tag_output, tag_len );
15599 
15600  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
15601  fct_chk( strcmp( (char *) tag_str, "8293e361fe0308a067f89aea393f" ) == 0 );
15602  }
15603  }
15604  FCT_TEST_END();
15605 
15606 
15607  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024104_0)
15608  {
15609  unsigned char key_str[128];
15610  unsigned char src_str[128];
15611  unsigned char dst_str[257];
15612  unsigned char iv_str[128];
15613  unsigned char add_str[128];
15614  unsigned char tag_str[128];
15615  unsigned char output[128];
15616  unsigned char tag_output[16];
15617  gcm_context ctx;
15618  unsigned int key_len;
15619  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
15620 
15621  memset(key_str, 0x00, 128);
15622  memset(src_str, 0x00, 128);
15623  memset(dst_str, 0x00, 257);
15624  memset(iv_str, 0x00, 128);
15625  memset(add_str, 0x00, 128);
15626  memset(tag_str, 0x00, 128);
15627  memset(output, 0x00, 128);
15628  memset(tag_output, 0x00, 16);
15629 
15630  key_len = unhexify( key_str, "d0ba180075c373116bb037907b512add00ba9a4693a8ecc14ca0d79adada90e3" );
15631  pt_len = unhexify( src_str, "" );
15632  iv_len = unhexify( iv_str, "5c1501b19cce5404dccc9217ac8253b7" );
15633  add_len = unhexify( add_str, "3a161605ec0055c479dd48cdaeed5981b8b60fb7b7781cc4e580218c7014c3060a9f706e6e16cf4021e4d38deb512534b484ff23b701975bdf901146ccaece9c3ffbbeeb172cfb64a915ae0dbe7a082b9077776a387b58559a881b9b79b90aa28ad1ac0f2bece314169a2f79ea4c08389f7f7dd10ee2d9a844fee79e7bf38bcf" );
15634 
15635  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
15636  if( 0 == 0 )
15637  {
15638  fct_chk( 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 );
15639  hexify( dst_str, output, pt_len );
15640  hexify( tag_str, tag_output, tag_len );
15641 
15642  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
15643  fct_chk( strcmp( (char *) tag_str, "0541262fddfd5d01ff0f3c2fb4" ) == 0 );
15644  }
15645  }
15646  FCT_TEST_END();
15647 
15648 
15649  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024104_1)
15650  {
15651  unsigned char key_str[128];
15652  unsigned char src_str[128];
15653  unsigned char dst_str[257];
15654  unsigned char iv_str[128];
15655  unsigned char add_str[128];
15656  unsigned char tag_str[128];
15657  unsigned char output[128];
15658  unsigned char tag_output[16];
15659  gcm_context ctx;
15660  unsigned int key_len;
15661  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
15662 
15663  memset(key_str, 0x00, 128);
15664  memset(src_str, 0x00, 128);
15665  memset(dst_str, 0x00, 257);
15666  memset(iv_str, 0x00, 128);
15667  memset(add_str, 0x00, 128);
15668  memset(tag_str, 0x00, 128);
15669  memset(output, 0x00, 128);
15670  memset(tag_output, 0x00, 16);
15671 
15672  key_len = unhexify( key_str, "c975c7e59133c231d1b84c696761c413ba20aff7fb7d854c6947e65db3cc57b4" );
15673  pt_len = unhexify( src_str, "" );
15674  iv_len = unhexify( iv_str, "d8fedda4cccaf6b0818edcfa7b1f03fa" );
15675  add_len = unhexify( add_str, "cb4cc9171367d6422abfaf2b4452da267eb9ccf1c4c97d21a0a125de486997832d16c7e412cb109eb9ac90c81dfe1a1dd9f79af7a14e91669b47f94e07d4e9bd645d9daa703b493179ca05ddd45433def98cf499ff11849cc88b58befbdd388728632469d8b28df4451fc671f4a3d69526a80c2e53e4fdee6300d27d97baf5f4" );
15676 
15677  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
15678  if( 0 == 0 )
15679  {
15680  fct_chk( 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 );
15681  hexify( dst_str, output, pt_len );
15682  hexify( tag_str, tag_output, tag_len );
15683 
15684  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
15685  fct_chk( strcmp( (char *) tag_str, "77ac205d959ec10ae8cee13eed" ) == 0 );
15686  }
15687  }
15688  FCT_TEST_END();
15689 
15690 
15691  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024104_2)
15692  {
15693  unsigned char key_str[128];
15694  unsigned char src_str[128];
15695  unsigned char dst_str[257];
15696  unsigned char iv_str[128];
15697  unsigned char add_str[128];
15698  unsigned char tag_str[128];
15699  unsigned char output[128];
15700  unsigned char tag_output[16];
15701  gcm_context ctx;
15702  unsigned int key_len;
15703  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
15704 
15705  memset(key_str, 0x00, 128);
15706  memset(src_str, 0x00, 128);
15707  memset(dst_str, 0x00, 257);
15708  memset(iv_str, 0x00, 128);
15709  memset(add_str, 0x00, 128);
15710  memset(tag_str, 0x00, 128);
15711  memset(output, 0x00, 128);
15712  memset(tag_output, 0x00, 16);
15713 
15714  key_len = unhexify( key_str, "a86ec688222c50c07274ed2d2c8ae6f883e25f8f95d404a7538fd83224199327" );
15715  pt_len = unhexify( src_str, "" );
15716  iv_len = unhexify( iv_str, "99c73fdb8f97f225f7a17cf79c011112" );
15717  add_len = unhexify( add_str, "cf5f707de0357262c0997fa3ebfe6e07192df8db5f029e418989e85e6b71e186b00c612ecedbfe3c847e58081847f39697337ae7c815d2cd0263986d06bf3a5d2db4e986dbe69071fd4b80a580f5a2cf734fc56c6d70202ea3494f67539797252d87cd7646296932959c99797a0446532f264d3089dd5f4bcceaaa7289a54380" );
15718 
15719  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
15720  if( 0 == 0 )
15721  {
15722  fct_chk( 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 );
15723  hexify( dst_str, output, pt_len );
15724  hexify( tag_str, tag_output, tag_len );
15725 
15726  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
15727  fct_chk( strcmp( (char *) tag_str, "c2093ad4705e613b09eee74057" ) == 0 );
15728  }
15729  }
15730  FCT_TEST_END();
15731 
15732 
15733  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102496_0)
15734  {
15735  unsigned char key_str[128];
15736  unsigned char src_str[128];
15737  unsigned char dst_str[257];
15738  unsigned char iv_str[128];
15739  unsigned char add_str[128];
15740  unsigned char tag_str[128];
15741  unsigned char output[128];
15742  unsigned char tag_output[16];
15743  gcm_context ctx;
15744  unsigned int key_len;
15745  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
15746 
15747  memset(key_str, 0x00, 128);
15748  memset(src_str, 0x00, 128);
15749  memset(dst_str, 0x00, 257);
15750  memset(iv_str, 0x00, 128);
15751  memset(add_str, 0x00, 128);
15752  memset(tag_str, 0x00, 128);
15753  memset(output, 0x00, 128);
15754  memset(tag_output, 0x00, 16);
15755 
15756  key_len = unhexify( key_str, "d3981f0aa1ed8cb369d9b0d7b0e529ec6089ff2d226c542885b1bff55276e891" );
15757  pt_len = unhexify( src_str, "" );
15758  iv_len = unhexify( iv_str, "7331f91bd1a67c21c9dd336a2a922839" );
15759  add_len = unhexify( add_str, "406d9cf45fc8618d564154241dc9c006ecdcd847406e5a6e7127ac96e7bb93f4c339ff612c514b6f66df95a0845035d7535212a2aaeeb0ee512d1f4375c9a527e4e499389c2d7f7f7439c913ea91580e7303767b989c4d619df7888baf789efd489b08eda223f27da5e177cd704c638f5fc8bf1fecfcd1cab4f4adfbc9d1d8ba" );
15760 
15761  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
15762  if( 0 == 0 )
15763  {
15764  fct_chk( 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 );
15765  hexify( dst_str, output, pt_len );
15766  hexify( tag_str, tag_output, tag_len );
15767 
15768  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
15769  fct_chk( strcmp( (char *) tag_str, "dbb7ec852c692c9a0e1a5acd" ) == 0 );
15770  }
15771  }
15772  FCT_TEST_END();
15773 
15774 
15775  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102496_1)
15776  {
15777  unsigned char key_str[128];
15778  unsigned char src_str[128];
15779  unsigned char dst_str[257];
15780  unsigned char iv_str[128];
15781  unsigned char add_str[128];
15782  unsigned char tag_str[128];
15783  unsigned char output[128];
15784  unsigned char tag_output[16];
15785  gcm_context ctx;
15786  unsigned int key_len;
15787  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
15788 
15789  memset(key_str, 0x00, 128);
15790  memset(src_str, 0x00, 128);
15791  memset(dst_str, 0x00, 257);
15792  memset(iv_str, 0x00, 128);
15793  memset(add_str, 0x00, 128);
15794  memset(tag_str, 0x00, 128);
15795  memset(output, 0x00, 128);
15796  memset(tag_output, 0x00, 16);
15797 
15798  key_len = unhexify( key_str, "8436967f97c59ca73b760b73c6e088d1da4e76b712188ab4781d8d849505ae47" );
15799  pt_len = unhexify( src_str, "" );
15800  iv_len = unhexify( iv_str, "9401dd0998914645668d06d518bfe7d7" );
15801  add_len = unhexify( add_str, "a5f40906177417097c19a0a21dbb457a694e173141837f695b09c8eb58ac2ce28aace4e59275b6266da9369a9905b389e968aefc64d78c7e1d2f034ef413d3458edcb955f5cd7971c28cd67dc9901ef3a2abc6121704bb5ecd87a6568d0506abbc87a2f10205dc8eb0cd1b5109158d0e743c2c3a342d60b8d55bbcb8d8507ed1" );
15802 
15803  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
15804  if( 0 == 0 )
15805  {
15806  fct_chk( 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 );
15807  hexify( dst_str, output, pt_len );
15808  hexify( tag_str, tag_output, tag_len );
15809 
15810  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
15811  fct_chk( strcmp( (char *) tag_str, "dd6d988d352decc4e70375d8" ) == 0 );
15812  }
15813  }
15814  FCT_TEST_END();
15815 
15816 
15817  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102496_2)
15818  {
15819  unsigned char key_str[128];
15820  unsigned char src_str[128];
15821  unsigned char dst_str[257];
15822  unsigned char iv_str[128];
15823  unsigned char add_str[128];
15824  unsigned char tag_str[128];
15825  unsigned char output[128];
15826  unsigned char tag_output[16];
15827  gcm_context ctx;
15828  unsigned int key_len;
15829  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
15830 
15831  memset(key_str, 0x00, 128);
15832  memset(src_str, 0x00, 128);
15833  memset(dst_str, 0x00, 257);
15834  memset(iv_str, 0x00, 128);
15835  memset(add_str, 0x00, 128);
15836  memset(tag_str, 0x00, 128);
15837  memset(output, 0x00, 128);
15838  memset(tag_output, 0x00, 16);
15839 
15840  key_len = unhexify( key_str, "ce6b846bcedc6ae747e66e72cd9f7664e6cad9627ba5f1f1923f3d3a6ed590d1" );
15841  pt_len = unhexify( src_str, "" );
15842  iv_len = unhexify( iv_str, "ac865ff8a6255e501b347a6650510d05" );
15843  add_len = unhexify( add_str, "1658b9f8469af1dfa60458cf8107db1edd1e4bba70a0bd23e13e1bba0d397abf51af8348f983fcdfcc8315ef1ffc9a26371377c62ddba08363bd2bf0ff7d0c3b603fad10be24ecee97b36d2255a8b2efc63f037123cef4bb4fe384aa0c58548b2f317c36ef3ef204b24769de6ba3e9d89e159e2bf1f9d79aeb3eb80c42eb255e" );
15844 
15845  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
15846  if( 0 == 0 )
15847  {
15848  fct_chk( 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 );
15849  hexify( dst_str, output, pt_len );
15850  hexify( tag_str, tag_output, tag_len );
15851 
15852  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
15853  fct_chk( strcmp( (char *) tag_str, "7ee87acd138c558455fff063" ) == 0 );
15854  }
15855  }
15856  FCT_TEST_END();
15857 
15858 
15859  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102464_0)
15860  {
15861  unsigned char key_str[128];
15862  unsigned char src_str[128];
15863  unsigned char dst_str[257];
15864  unsigned char iv_str[128];
15865  unsigned char add_str[128];
15866  unsigned char tag_str[128];
15867  unsigned char output[128];
15868  unsigned char tag_output[16];
15869  gcm_context ctx;
15870  unsigned int key_len;
15871  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
15872 
15873  memset(key_str, 0x00, 128);
15874  memset(src_str, 0x00, 128);
15875  memset(dst_str, 0x00, 257);
15876  memset(iv_str, 0x00, 128);
15877  memset(add_str, 0x00, 128);
15878  memset(tag_str, 0x00, 128);
15879  memset(output, 0x00, 128);
15880  memset(tag_output, 0x00, 16);
15881 
15882  key_len = unhexify( key_str, "0038ecf1407bbf0d73afa5e010769b71e8649c4249345dcf923ef9da0254c6af" );
15883  pt_len = unhexify( src_str, "" );
15884  iv_len = unhexify( iv_str, "74c6b98fc6ced3a59bd9c42d31d71095" );
15885  add_len = unhexify( add_str, "467f483c71c3404fe7f09d6f6b6b64c3b7613a0dd32470cf24bc590d3994a48f3e8cd5dc19ea8ca7d5366ad7c5ad31cc9612dafedaea109dde2aedfe5fc2a0db2c903dd1dc1a13949720a10babf37fba5a0ed7cb5f3dc9eb5a4d8331f218e98763e7794b3e63705d414ef332160b0b1799f1ff5cbe129a75e5c4e0a4ed35e382" );
15886 
15887  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
15888  if( 0 == 0 )
15889  {
15890  fct_chk( 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 );
15891  hexify( dst_str, output, pt_len );
15892  hexify( tag_str, tag_output, tag_len );
15893 
15894  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
15895  fct_chk( strcmp( (char *) tag_str, "62fe088d9129450b" ) == 0 );
15896  }
15897  }
15898  FCT_TEST_END();
15899 
15900 
15901  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102464_1)
15902  {
15903  unsigned char key_str[128];
15904  unsigned char src_str[128];
15905  unsigned char dst_str[257];
15906  unsigned char iv_str[128];
15907  unsigned char add_str[128];
15908  unsigned char tag_str[128];
15909  unsigned char output[128];
15910  unsigned char tag_output[16];
15911  gcm_context ctx;
15912  unsigned int key_len;
15913  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
15914 
15915  memset(key_str, 0x00, 128);
15916  memset(src_str, 0x00, 128);
15917  memset(dst_str, 0x00, 257);
15918  memset(iv_str, 0x00, 128);
15919  memset(add_str, 0x00, 128);
15920  memset(tag_str, 0x00, 128);
15921  memset(output, 0x00, 128);
15922  memset(tag_output, 0x00, 16);
15923 
15924  key_len = unhexify( key_str, "19fc4c22151ee8515036c38bc5926c0e0bbd93db5d0fc522b2a6bf6298fed391" );
15925  pt_len = unhexify( src_str, "" );
15926  iv_len = unhexify( iv_str, "9547f056c6fb9ef72b908f527cb500c1" );
15927  add_len = unhexify( add_str, "511b15c25b2a324159e71c3b8e47f52d3e71e5bc35e774c39067250f4494c9c4eb184ecbe8638de9418672d9ae2c6a0e7f54c017879ffb2a371de1639693d654a43cb86e94a7350508490191790d1265b99e7b3253838b302aae33590949a8761a3bb2aeb1ba798cddeb00a53daad05a33389d4a19269d65116a84f12dba5830" );
15928 
15929  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
15930  if( 0 == 0 )
15931  {
15932  fct_chk( 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 );
15933  hexify( dst_str, output, pt_len );
15934  hexify( tag_str, tag_output, tag_len );
15935 
15936  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
15937  fct_chk( strcmp( (char *) tag_str, "04623912bb70810e" ) == 0 );
15938  }
15939  }
15940  FCT_TEST_END();
15941 
15942 
15943  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102464_2)
15944  {
15945  unsigned char key_str[128];
15946  unsigned char src_str[128];
15947  unsigned char dst_str[257];
15948  unsigned char iv_str[128];
15949  unsigned char add_str[128];
15950  unsigned char tag_str[128];
15951  unsigned char output[128];
15952  unsigned char tag_output[16];
15953  gcm_context ctx;
15954  unsigned int key_len;
15955  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
15956 
15957  memset(key_str, 0x00, 128);
15958  memset(src_str, 0x00, 128);
15959  memset(dst_str, 0x00, 257);
15960  memset(iv_str, 0x00, 128);
15961  memset(add_str, 0x00, 128);
15962  memset(tag_str, 0x00, 128);
15963  memset(output, 0x00, 128);
15964  memset(tag_output, 0x00, 16);
15965 
15966  key_len = unhexify( key_str, "3b5d3b1920b5a105b148153ae1f1027c6d48bc99640ea853f5955fed4eb3d625" );
15967  pt_len = unhexify( src_str, "" );
15968  iv_len = unhexify( iv_str, "9a4091c2eb7e88759bd9169fee303485" );
15969  add_len = unhexify( add_str, "aa680d07143ba49a9099d555105fc3cfcb898cec11ade96776dc9778cc50fe972e1e83c52c837b71e27f81d1577f9bd09afe2260dfd9a5d9dfbd3b8b09a346a2ab48647f5dd2ff43700aecce7fa6f4aeea6ea01b2463c4e82ec116e4d92b309c5879fb4e2ca820d0183a2057ae4ad96f38a7d50643a835511aedd0442b290be3" );
15970 
15971  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
15972  if( 0 == 0 )
15973  {
15974  fct_chk( 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 );
15975  hexify( dst_str, output, pt_len );
15976  hexify( tag_str, tag_output, tag_len );
15977 
15978  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
15979  fct_chk( strcmp( (char *) tag_str, "033bfee6b228d59b" ) == 0 );
15980  }
15981  }
15982  FCT_TEST_END();
15983 
15984 
15985  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102432_0)
15986  {
15987  unsigned char key_str[128];
15988  unsigned char src_str[128];
15989  unsigned char dst_str[257];
15990  unsigned char iv_str[128];
15991  unsigned char add_str[128];
15992  unsigned char tag_str[128];
15993  unsigned char output[128];
15994  unsigned char tag_output[16];
15995  gcm_context ctx;
15996  unsigned int key_len;
15997  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
15998 
15999  memset(key_str, 0x00, 128);
16000  memset(src_str, 0x00, 128);
16001  memset(dst_str, 0x00, 257);
16002  memset(iv_str, 0x00, 128);
16003  memset(add_str, 0x00, 128);
16004  memset(tag_str, 0x00, 128);
16005  memset(output, 0x00, 128);
16006  memset(tag_output, 0x00, 16);
16007 
16008  key_len = unhexify( key_str, "f6c4ad8e27764157789252f4bc4a04145cb9721955330a2f6a2a3b65cacf22bc" );
16009  pt_len = unhexify( src_str, "" );
16010  iv_len = unhexify( iv_str, "3de136cbd75061c888226efab136849d" );
16011  add_len = unhexify( add_str, "0f6951c127d6bc8970e2ad2799e26c7fb9ca31d223155f88374984b5660626c83276ffa6c160f75e0e1bcfa96616188f3945b15fc1b82a4e0ee44000a684b3c3840465aebe051208379ef3afe9f569ee94973d15f0a40c6f564fa4ba11d6e33cf8ae17854a9e12360a2b8495e2cceec463f5e3705c74069ba37ba6d725f458c0" );
16012 
16013  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
16014  if( 0 == 0 )
16015  {
16016  fct_chk( 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 );
16017  hexify( dst_str, output, pt_len );
16018  hexify( tag_str, tag_output, tag_len );
16019 
16020  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
16021  fct_chk( strcmp( (char *) tag_str, "f658c689" ) == 0 );
16022  }
16023  }
16024  FCT_TEST_END();
16025 
16026 
16027  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102432_1)
16028  {
16029  unsigned char key_str[128];
16030  unsigned char src_str[128];
16031  unsigned char dst_str[257];
16032  unsigned char iv_str[128];
16033  unsigned char add_str[128];
16034  unsigned char tag_str[128];
16035  unsigned char output[128];
16036  unsigned char tag_output[16];
16037  gcm_context ctx;
16038  unsigned int key_len;
16039  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
16040 
16041  memset(key_str, 0x00, 128);
16042  memset(src_str, 0x00, 128);
16043  memset(dst_str, 0x00, 257);
16044  memset(iv_str, 0x00, 128);
16045  memset(add_str, 0x00, 128);
16046  memset(tag_str, 0x00, 128);
16047  memset(output, 0x00, 128);
16048  memset(tag_output, 0x00, 16);
16049 
16050  key_len = unhexify( key_str, "30cd99fed9706c409e366d47fefc191f79bcc47a28be78f9890fd90d4864eb85" );
16051  pt_len = unhexify( src_str, "" );
16052  iv_len = unhexify( iv_str, "8c7ce34691503bf14c776f8809f24e61" );
16053  add_len = unhexify( add_str, "4b6b10c2e2905ab356769b6453dd160a08e8623b0878fcc1c1d64822f0aea1f4f5b4698ded5d23ebafa11bc1e4ce9e5cd7d7c7b13de02d11a945ba8361b102ba49cdcfd6a416e3db774cd7bda024fccd1ad3087560dc15bbfe9b1a5c6c71fae17a329f104f6c2cba7eb6a7459535ca328146d0ccc0a9bd28a3d1c961947a3876" );
16054 
16055  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
16056  if( 0 == 0 )
16057  {
16058  fct_chk( 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 );
16059  hexify( dst_str, output, pt_len );
16060  hexify( tag_str, tag_output, tag_len );
16061 
16062  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
16063  fct_chk( strcmp( (char *) tag_str, "7777c224" ) == 0 );
16064  }
16065  }
16066  FCT_TEST_END();
16067 
16068 
16069  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102432_2)
16070  {
16071  unsigned char key_str[128];
16072  unsigned char src_str[128];
16073  unsigned char dst_str[257];
16074  unsigned char iv_str[128];
16075  unsigned char add_str[128];
16076  unsigned char tag_str[128];
16077  unsigned char output[128];
16078  unsigned char tag_output[16];
16079  gcm_context ctx;
16080  unsigned int key_len;
16081  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
16082 
16083  memset(key_str, 0x00, 128);
16084  memset(src_str, 0x00, 128);
16085  memset(dst_str, 0x00, 257);
16086  memset(iv_str, 0x00, 128);
16087  memset(add_str, 0x00, 128);
16088  memset(tag_str, 0x00, 128);
16089  memset(output, 0x00, 128);
16090  memset(tag_output, 0x00, 16);
16091 
16092  key_len = unhexify( key_str, "9472f2452933dcfac4bb22831ce83c6a1ddf25ef8d2d3ba59d72b0d173a986e8" );
16093  pt_len = unhexify( src_str, "" );
16094  iv_len = unhexify( iv_str, "18fb2c34b0955d712960009617d300ef" );
16095  add_len = unhexify( add_str, "d283dd75cd4689c266c8e0b4b6586278aa2583c7c41bf12bd1cfdef21d349acbbabc0a2204dc4130f922949206c4fbdce3786ab8614e32908838a13b6990453abf14b84f5812e6093644accdd35f7ad611ea15aefae28b3cf1fc5da410bcea4f0a50d377fdcceffe488805bc5a71fab019b12fa8725d6e7c91e6faf12fbaf493" );
16096 
16097  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
16098  if( 0 == 0 )
16099  {
16100  fct_chk( 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 );
16101  hexify( dst_str, output, pt_len );
16102  hexify( tag_str, tag_output, tag_len );
16103 
16104  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
16105  fct_chk( strcmp( (char *) tag_str, "c53b16a1" ) == 0 );
16106  }
16107  }
16108  FCT_TEST_END();
16109 
16110 
16111  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240128_0)
16112  {
16113  unsigned char key_str[128];
16114  unsigned char src_str[128];
16115  unsigned char dst_str[257];
16116  unsigned char iv_str[128];
16117  unsigned char add_str[128];
16118  unsigned char tag_str[128];
16119  unsigned char output[128];
16120  unsigned char tag_output[16];
16121  gcm_context ctx;
16122  unsigned int key_len;
16123  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
16124 
16125  memset(key_str, 0x00, 128);
16126  memset(src_str, 0x00, 128);
16127  memset(dst_str, 0x00, 257);
16128  memset(iv_str, 0x00, 128);
16129  memset(add_str, 0x00, 128);
16130  memset(tag_str, 0x00, 128);
16131  memset(output, 0x00, 128);
16132  memset(tag_output, 0x00, 16);
16133 
16134  key_len = unhexify( key_str, "e06d5319210f4107ea7267fa2e8183fcbf74fd3b0579b856577177d9cb307d42" );
16135  pt_len = unhexify( src_str, "2b9179d21cb884581b0e4f462455167f1f7899717245d4aed3d8db5983daccccebfc2130a20c284563bea5997cc0438c83d8fa7bb9e3588efed285a0fcc31456dc9a3122b97bb22f7edc36973475925828c323565e417ec95190db63b21881016b5332f2e400bb4724c86a8ee0247149370ee5412f743dc6bf7ca5bcc31afa0f" );
16136  iv_len = unhexify( iv_str, "f2b0564705430bc672964b049115e122" );
16137  add_len = unhexify( add_str, "" );
16138 
16139  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
16140  if( 0 == 0 )
16141  {
16142  fct_chk( 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 );
16143  hexify( dst_str, output, pt_len );
16144  hexify( tag_str, tag_output, tag_len );
16145 
16146  fct_chk( strcmp( (char *) dst_str, "3fa342a76cb5d501e6a6fade14aab54a76620e4ea2287147d4ca2b9d62d2a643591e5df570ef474ee88ad22401c1059e3130a904e9bf359c4a6151ff2f3e4f78ef27a67d527da8e448b0ef5cdcfec85f3525e35f8d024540387e4cdcb1018c281a1af7d4a3688a0fec4d9f473c816f7d4c4c369f70d7dfe8f1b7fa4f581098a1" ) == 0 );
16147  fct_chk( strcmp( (char *) tag_str, "18f186ed1ee1f4f8b29db495587d0ab0" ) == 0 );
16148  }
16149  }
16150  FCT_TEST_END();
16151 
16152 
16153  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240128_1)
16154  {
16155  unsigned char key_str[128];
16156  unsigned char src_str[128];
16157  unsigned char dst_str[257];
16158  unsigned char iv_str[128];
16159  unsigned char add_str[128];
16160  unsigned char tag_str[128];
16161  unsigned char output[128];
16162  unsigned char tag_output[16];
16163  gcm_context ctx;
16164  unsigned int key_len;
16165  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
16166 
16167  memset(key_str, 0x00, 128);
16168  memset(src_str, 0x00, 128);
16169  memset(dst_str, 0x00, 257);
16170  memset(iv_str, 0x00, 128);
16171  memset(add_str, 0x00, 128);
16172  memset(tag_str, 0x00, 128);
16173  memset(output, 0x00, 128);
16174  memset(tag_output, 0x00, 16);
16175 
16176  key_len = unhexify( key_str, "0dfa834e98b6c51ee925dd9edc9be72c209ddcd9099ded57b533f2236895a229" );
16177  pt_len = unhexify( src_str, "7f4e4f11091bf51976c0fc71ecbcd0985cdad2135549c818c09567801d8a9a42c719aab7dc2cb58a10b5067d14c52cabe6bb9b939e7b9cd395eaf10ba6a53fd2e6446e1e501440134e04e662ef7ebb1c9c78bbd3fd7cb9de8b985418be1b43ebb5d7902ccb4c299c325c8a7cc1de9174f544bc60828c1eebad49287caa4108a0" );
16178  iv_len = unhexify( iv_str, "a101b13b238cfac6964fd6a43daea5a7" );
16179  add_len = unhexify( add_str, "" );
16180 
16181  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
16182  if( 0 == 0 )
16183  {
16184  fct_chk( 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 );
16185  hexify( dst_str, output, pt_len );
16186  hexify( tag_str, tag_output, tag_len );
16187 
16188  fct_chk( strcmp( (char *) dst_str, "bc60d2047fd8712144e95cb8de1ffd9f13de7fda995f845b1a4246a4403f61ca896bd635a1570d2eb5b8740d365225c3310bf8cea3f5597826c65876b0cbcfa0e2181575be8e4dd222d236d8a8064a10a56262056906c1ac3c4e7100a92f3f00dab5a9ba139c72519b136d387da71fefe2564d9f1aa85b206a205267b4cfa538" ) == 0 );
16189  fct_chk( strcmp( (char *) tag_str, "c4cc1dbd1b7ff2e36f9f9f64e2385b9e" ) == 0 );
16190  }
16191  }
16192  FCT_TEST_END();
16193 
16194 
16195  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240128_2)
16196  {
16197  unsigned char key_str[128];
16198  unsigned char src_str[128];
16199  unsigned char dst_str[257];
16200  unsigned char iv_str[128];
16201  unsigned char add_str[128];
16202  unsigned char tag_str[128];
16203  unsigned char output[128];
16204  unsigned char tag_output[16];
16205  gcm_context ctx;
16206  unsigned int key_len;
16207  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
16208 
16209  memset(key_str, 0x00, 128);
16210  memset(src_str, 0x00, 128);
16211  memset(dst_str, 0x00, 257);
16212  memset(iv_str, 0x00, 128);
16213  memset(add_str, 0x00, 128);
16214  memset(tag_str, 0x00, 128);
16215  memset(output, 0x00, 128);
16216  memset(tag_output, 0x00, 16);
16217 
16218  key_len = unhexify( key_str, "ce59144b114ac5587a7a8079dc0e26f1b203338bb3e4b1d1d987bddc24150a82" );
16219  pt_len = unhexify( src_str, "bc7aa1b735a5f465cffeccd8dd4b0a33a571e9f006dc63b2a6f4df272a673bb2cc00e603248ab6be5627eebc10934fe4d1dc5cd120a475936eefa2c7bddea9f36c6c794d2c6bd2594094e56cac12d8f03e38f222a7ee4fc6c2adffe71c9c13003e301c31ff3a0405dde89bb213044d41782c4bb4eb3c262595d1c0e00522047c" );
16220  iv_len = unhexify( iv_str, "fdc5a40677110737febae4465b1a76cc" );
16221  add_len = unhexify( add_str, "" );
16222 
16223  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
16224  if( 0 == 0 )
16225  {
16226  fct_chk( 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 );
16227  hexify( dst_str, output, pt_len );
16228  hexify( tag_str, tag_output, tag_len );
16229 
16230  fct_chk( strcmp( (char *) dst_str, "084c31c8aef8c089867f6e0ce6e0aadafa3016c33c00ca520f28d45aac8f4d02a519b8ebafd13b9606ab9db4f2572f396091bc5a1d9910119ca662d476c2d875a4ab62d31ff5f875678f25a4775fa7fc85b1a3d442fb2c5047a3d349d56d85f85f172965e6477439045849a0b58014d9d442e2cae74709ed8594f0ec119d1d39" ) == 0 );
16231  fct_chk( strcmp( (char *) tag_str, "4c39e0d17030a5f06ecd5f4c26e79b31" ) == 0 );
16232  }
16233  }
16234  FCT_TEST_END();
16235 
16236 
16237  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240120_0)
16238  {
16239  unsigned char key_str[128];
16240  unsigned char src_str[128];
16241  unsigned char dst_str[257];
16242  unsigned char iv_str[128];
16243  unsigned char add_str[128];
16244  unsigned char tag_str[128];
16245  unsigned char output[128];
16246  unsigned char tag_output[16];
16247  gcm_context ctx;
16248  unsigned int key_len;
16249  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
16250 
16251  memset(key_str, 0x00, 128);
16252  memset(src_str, 0x00, 128);
16253  memset(dst_str, 0x00, 257);
16254  memset(iv_str, 0x00, 128);
16255  memset(add_str, 0x00, 128);
16256  memset(tag_str, 0x00, 128);
16257  memset(output, 0x00, 128);
16258  memset(tag_output, 0x00, 16);
16259 
16260  key_len = unhexify( key_str, "e7a6b459a5370ceec4d429bba9472a49db07697dc66dbc2f294d3e62ffc8aac1" );
16261  pt_len = unhexify( src_str, "cb959e5611a636317feb5265d33b315c2f5af64159029f0032e338babbdb0a525ba6b92cb3be7db9f0077561e6cffe1247bad32dea8918f562dc3cd83225cdbcaed652b87c62fea8eff153638a3a14ef9f9a88bcc8c9a6b65fa9dcc53f63d1b14fb9bb0baf17e7bfb95690c25cca2c3097497e41f7e2299a8518d5d1c5f6264e" );
16262  iv_len = unhexify( iv_str, "92468d42ad377affa7e808d95d8c673a" );
16263  add_len = unhexify( add_str, "" );
16264 
16265  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
16266  if( 0 == 0 )
16267  {
16268  fct_chk( 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 );
16269  hexify( dst_str, output, pt_len );
16270  hexify( tag_str, tag_output, tag_len );
16271 
16272  fct_chk( strcmp( (char *) dst_str, "599dbc47e2f2e3b06b641c510b238417b01869f0e7d08619752f6d9f4b08585731deaeb439ff26e02d7e51b45ca5e3d4a779fe4cfc9572d1d6407f98de69a8fca60bf01d1a769130bb38a67933a2be3aa3ea1470d8f32a34dc863dc800feb7ef71588edd9489bd59a23685ff5358f9b562fc0bbad9e11db7a6fedbd79225539d" ) == 0 );
16273  fct_chk( strcmp( (char *) tag_str, "e853262ed43e4d40fea6f3835d4381" ) == 0 );
16274  }
16275  }
16276  FCT_TEST_END();
16277 
16278 
16279  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240120_1)
16280  {
16281  unsigned char key_str[128];
16282  unsigned char src_str[128];
16283  unsigned char dst_str[257];
16284  unsigned char iv_str[128];
16285  unsigned char add_str[128];
16286  unsigned char tag_str[128];
16287  unsigned char output[128];
16288  unsigned char tag_output[16];
16289  gcm_context ctx;
16290  unsigned int key_len;
16291  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
16292 
16293  memset(key_str, 0x00, 128);
16294  memset(src_str, 0x00, 128);
16295  memset(dst_str, 0x00, 257);
16296  memset(iv_str, 0x00, 128);
16297  memset(add_str, 0x00, 128);
16298  memset(tag_str, 0x00, 128);
16299  memset(output, 0x00, 128);
16300  memset(tag_output, 0x00, 16);
16301 
16302  key_len = unhexify( key_str, "9818904a99e3d80c95dc71a16483ade1b9b8e7df638ce6a4c1d709a24416cbe9" );
16303  pt_len = unhexify( src_str, "2c073cdc11a8d58fb55e1dadbbc0372dde86c387fa99c9249bd04cb2f2d239de01bec8c8771a9fb33664ee06ea81c37a824525664054173b63a2894d8d7ffc60b9e93052802478a189be5835d979a28ce7025b219add0622f97c9bcf3ecf629b56408ed002a141061320400409345e94a7a7e3906611305f96f2abc9d62cc435" );
16304  iv_len = unhexify( iv_str, "96a301ab6bc0309be9735bd21cc9e10d" );
16305  add_len = unhexify( add_str, "" );
16306 
16307  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
16308  if( 0 == 0 )
16309  {
16310  fct_chk( 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 );
16311  hexify( dst_str, output, pt_len );
16312  hexify( tag_str, tag_output, tag_len );
16313 
16314  fct_chk( strcmp( (char *) dst_str, "4876e449b0cac09a37bb7e4b8da238f4c699af9714ec4fcf21a07c5aee8783311a13149d837a949c594a472dda01e8b6c064755b6328e3ef8d6063f8d8f19cfda3147b563b0f5fb8556ace49cb0f872822a63b06f261b6970f7c18be19372a852beadf02288c0b4079587c0f8eab1858eeec11c6ba8d64448282068fddd8a63d" ) == 0 );
16315  fct_chk( strcmp( (char *) tag_str, "e1e8b62ce427e5192348b1f09183c9" ) == 0 );
16316  }
16317  }
16318  FCT_TEST_END();
16319 
16320 
16321  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240120_2)
16322  {
16323  unsigned char key_str[128];
16324  unsigned char src_str[128];
16325  unsigned char dst_str[257];
16326  unsigned char iv_str[128];
16327  unsigned char add_str[128];
16328  unsigned char tag_str[128];
16329  unsigned char output[128];
16330  unsigned char tag_output[16];
16331  gcm_context ctx;
16332  unsigned int key_len;
16333  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
16334 
16335  memset(key_str, 0x00, 128);
16336  memset(src_str, 0x00, 128);
16337  memset(dst_str, 0x00, 257);
16338  memset(iv_str, 0x00, 128);
16339  memset(add_str, 0x00, 128);
16340  memset(tag_str, 0x00, 128);
16341  memset(output, 0x00, 128);
16342  memset(tag_output, 0x00, 16);
16343 
16344  key_len = unhexify( key_str, "9b34f137e3f37addad8a6573b8b6dac9a29e97db53c0a7610f37c72a0efaebfa" );
16345  pt_len = unhexify( src_str, "c1e09c432c68a2c119aeb3b19c21180e3c8e428e12033f416a92862036f5e8a39a8893b10fe5476e388d079143ee0b79b183a3400db779cfbf1467d69887306b124a8578c173cd5308d4448eefcf1d57f117eb12bc28bd1d0ff5c3702139655197d7305bda70181c85376e1a90fb2c5b036d9ea5d318d3219132ea6c5edf7b7d" );
16346  iv_len = unhexify( iv_str, "50dddb2ebe4f8763509a63d07322277e" );
16347  add_len = unhexify( add_str, "" );
16348 
16349  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
16350  if( 0 == 0 )
16351  {
16352  fct_chk( 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 );
16353  hexify( dst_str, output, pt_len );
16354  hexify( tag_str, tag_output, tag_len );
16355 
16356  fct_chk( strcmp( (char *) dst_str, "793e1b06e1593b8c0ba13a38ff23afaa6007482262bc2d0de9fb910f349eff88d3dd05d56eb9a089eed801eae851676b7a401991b72bf45ac005c89e906a37ed7231df4aeeeb1fcf206ca1311117e7e7348faf1d58acc69c5702f802287083d3ed9e16cf87adcdfa1bb0c21c40c2102fd0def91985f92285e6ea1cdd550e7f50" ) == 0 );
16357  fct_chk( strcmp( (char *) tag_str, "b3c6ae17274faaca657dcb172dc1fb" ) == 0 );
16358  }
16359  }
16360  FCT_TEST_END();
16361 
16362 
16363  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240112_0)
16364  {
16365  unsigned char key_str[128];
16366  unsigned char src_str[128];
16367  unsigned char dst_str[257];
16368  unsigned char iv_str[128];
16369  unsigned char add_str[128];
16370  unsigned char tag_str[128];
16371  unsigned char output[128];
16372  unsigned char tag_output[16];
16373  gcm_context ctx;
16374  unsigned int key_len;
16375  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
16376 
16377  memset(key_str, 0x00, 128);
16378  memset(src_str, 0x00, 128);
16379  memset(dst_str, 0x00, 257);
16380  memset(iv_str, 0x00, 128);
16381  memset(add_str, 0x00, 128);
16382  memset(tag_str, 0x00, 128);
16383  memset(output, 0x00, 128);
16384  memset(tag_output, 0x00, 16);
16385 
16386  key_len = unhexify( key_str, "66b40e2e671bdf244b45644d1a5adc63011b32156ba9f5e03dffacc1a9165061" );
16387  pt_len = unhexify( src_str, "985546ee12ba89d95988ad8a4153c4f9d3c91c0e3633a95b4f9b588bba0032006c93210514357c91d574b436da13dc9f68194a981e7b65eb79e56be9cf1dabfdf531407727c034a3c7743bb22aa02b26f159c2eff3c7ed52027de2e8b8b2fefb72c04fbf20a1ffe10d6dda790a9812cdbe9f2ed6706d7a2639e851a42870efb8" );
16388  iv_len = unhexify( iv_str, "4e090871e889b4be36db5e1df1ea283d" );
16389  add_len = unhexify( add_str, "" );
16390 
16391  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
16392  if( 0 == 0 )
16393  {
16394  fct_chk( 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 );
16395  hexify( dst_str, output, pt_len );
16396  hexify( tag_str, tag_output, tag_len );
16397 
16398  fct_chk( strcmp( (char *) dst_str, "f93eebffeddfd16b4618b893d57b459b704b894b38a5eaf6cce54026c80090be8328e12261e1b10e81c73ac8261c2982bb25603c12f5ffff5c70b2199515c17200db2d950a3f2064d7b362607adbf3686f27420ec15e18467e86faa1efa946a73c8888b8fdc825742b8fbec6e48cdabbb45f3cd2b6b6e536b6fbf3429aebe934" ) == 0 );
16399  fct_chk( strcmp( (char *) tag_str, "ed88c856c41cac49f4767909ac79" ) == 0 );
16400  }
16401  }
16402  FCT_TEST_END();
16403 
16404 
16405  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240112_1)
16406  {
16407  unsigned char key_str[128];
16408  unsigned char src_str[128];
16409  unsigned char dst_str[257];
16410  unsigned char iv_str[128];
16411  unsigned char add_str[128];
16412  unsigned char tag_str[128];
16413  unsigned char output[128];
16414  unsigned char tag_output[16];
16415  gcm_context ctx;
16416  unsigned int key_len;
16417  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
16418 
16419  memset(key_str, 0x00, 128);
16420  memset(src_str, 0x00, 128);
16421  memset(dst_str, 0x00, 257);
16422  memset(iv_str, 0x00, 128);
16423  memset(add_str, 0x00, 128);
16424  memset(tag_str, 0x00, 128);
16425  memset(output, 0x00, 128);
16426  memset(tag_output, 0x00, 16);
16427 
16428  key_len = unhexify( key_str, "18c5105a9651144ce965b4270398b982120b885850114571ef8e2cbc5d2f5e04" );
16429  pt_len = unhexify( src_str, "00c5ea3d91248bfe30c5a6d26dbdf0609f977afcfa842b603c1061b2a473c9a79b421b2509550309e4be9c5015c51c6def9ee68c242f6e206b3027ce8e58b7ab96aaa50ced1d78c2dfcbc2589575bec2ce3b6a5066276fe7dca4f1118808d1e5cac062667053c15350289da03cd073377c2d66c01e3098ed01b75788c7e1f9e7" );
16430  iv_len = unhexify( iv_str, "a3a5f82748acc887e33328fd7f4ce1fd" );
16431  add_len = unhexify( add_str, "" );
16432 
16433  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
16434  if( 0 == 0 )
16435  {
16436  fct_chk( 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 );
16437  hexify( dst_str, output, pt_len );
16438  hexify( tag_str, tag_output, tag_len );
16439 
16440  fct_chk( strcmp( (char *) dst_str, "d91ed6886a269dc1eb0745dc4b97fc54cbea5e6857d10a303a3caf828b4e0e20bb742bca17021b7852d09a6d7d3a56ad82298c15a2082fed0e0e326bb16dd677ee262ead93a24147de3c07eb8a95b108abf17357155f1de79171689407b6545c9fdf8ab4486576490430c0e043e21e7c40ce88e752cb006cb3c59479a7e56cf7" ) == 0 );
16441  fct_chk( strcmp( (char *) tag_str, "add4e086d612a119c6aae46ba9e5" ) == 0 );
16442  }
16443  }
16444  FCT_TEST_END();
16445 
16446 
16447  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240112_2)
16448  {
16449  unsigned char key_str[128];
16450  unsigned char src_str[128];
16451  unsigned char dst_str[257];
16452  unsigned char iv_str[128];
16453  unsigned char add_str[128];
16454  unsigned char tag_str[128];
16455  unsigned char output[128];
16456  unsigned char tag_output[16];
16457  gcm_context ctx;
16458  unsigned int key_len;
16459  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
16460 
16461  memset(key_str, 0x00, 128);
16462  memset(src_str, 0x00, 128);
16463  memset(dst_str, 0x00, 257);
16464  memset(iv_str, 0x00, 128);
16465  memset(add_str, 0x00, 128);
16466  memset(tag_str, 0x00, 128);
16467  memset(output, 0x00, 128);
16468  memset(tag_output, 0x00, 16);
16469 
16470  key_len = unhexify( key_str, "4667cabeb3a644e371cbbe9195413daab025cc6efc12298bfaea0dd9bc028f9f" );
16471  pt_len = unhexify( src_str, "9772ec47f3cd26f091bf117e085f2394db258c2c460dc3b1402edcb60a8f70517f82aa669607b78c2ad79c662c3b376cee1b9f34c4ec5d15319c33de78a440e7f2a4108c3c9da51604adde2025ff1dc336c49279c13a7153931df675df0e78f17a4d72973311af74fe755c85c7869baf3896bb738925942dc67f1b6e690c9d48" );
16472  iv_len = unhexify( iv_str, "7e8927c69951d901494539ab95ac5906" );
16473  add_len = unhexify( add_str, "" );
16474 
16475  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
16476  if( 0 == 0 )
16477  {
16478  fct_chk( 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 );
16479  hexify( dst_str, output, pt_len );
16480  hexify( tag_str, tag_output, tag_len );
16481 
16482  fct_chk( strcmp( (char *) dst_str, "5d62fa69cfbfdec30193408dad15cf983ad707ee921068b817676eca9f70f9ca4623a8c113df5fba86131415f4ec546c7f1a94ff9d02cb8ddcf421c7cc85ed87ce712fcd8d5f45460749ced0d900fe0368c59b1c082bd5811c1a648a51768d5e4bfbc23cada3791f289d8b61fd494398be1ad9ee9ff471abb547000ac2c1a5d1" ) == 0 );
16483  fct_chk( strcmp( (char *) tag_str, "0ae6bd5e8c25d1585e4d4c266048" ) == 0 );
16484  }
16485  }
16486  FCT_TEST_END();
16487 
16488 
16489  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240104_0)
16490  {
16491  unsigned char key_str[128];
16492  unsigned char src_str[128];
16493  unsigned char dst_str[257];
16494  unsigned char iv_str[128];
16495  unsigned char add_str[128];
16496  unsigned char tag_str[128];
16497  unsigned char output[128];
16498  unsigned char tag_output[16];
16499  gcm_context ctx;
16500  unsigned int key_len;
16501  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
16502 
16503  memset(key_str, 0x00, 128);
16504  memset(src_str, 0x00, 128);
16505  memset(dst_str, 0x00, 257);
16506  memset(iv_str, 0x00, 128);
16507  memset(add_str, 0x00, 128);
16508  memset(tag_str, 0x00, 128);
16509  memset(output, 0x00, 128);
16510  memset(tag_output, 0x00, 16);
16511 
16512  key_len = unhexify( key_str, "3d58cd514de36ca7848aad1bf4d314b3b3415cae1ce9a169021ae84a67d4ab69" );
16513  pt_len = unhexify( src_str, "e1c2e79e3f64c5c64f853ac9ba1a853fbf1bfd3001d48f7e73e0e97aa1b8ed1f1a7066178e75df688c5edb1c42e270ea38ab0e246c6a47fde4c3141436fe4b34beb9033ba7eebfc53cf1f6c8ae1794e9bb536152d196e1b96803316a05f1dcb9016c8b35bf4da06cd18da6243acc3a3dc641d3a1332b1915932ca89937cb0327" );
16514  iv_len = unhexify( iv_str, "4a1c2e7a3f9788c3c2fdd0dcc0cfe84b" );
16515  add_len = unhexify( add_str, "" );
16516 
16517  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
16518  if( 0 == 0 )
16519  {
16520  fct_chk( 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 );
16521  hexify( dst_str, output, pt_len );
16522  hexify( tag_str, tag_output, tag_len );
16523 
16524  fct_chk( strcmp( (char *) dst_str, "50d63c660a2b4f8e87276c5f58556cdf15d0fbb2c8ea5e3266d28c515643109aa7fc950d6d48f504dad52457e16576b581d37574574cd8b7ac12b7d59b819992c941a27e23ef9f257ed0c4ea4eda6c1f3b28b44decb63a92fae84c3556dcb9d6458e729dad6a7db9f7411690fce971b3b240f8f9979ed992f87d76e227fd7384" ) == 0 );
16525  fct_chk( strcmp( (char *) tag_str, "ac842579bdd1ac77c84dffac2d" ) == 0 );
16526  }
16527  }
16528  FCT_TEST_END();
16529 
16530 
16531  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240104_1)
16532  {
16533  unsigned char key_str[128];
16534  unsigned char src_str[128];
16535  unsigned char dst_str[257];
16536  unsigned char iv_str[128];
16537  unsigned char add_str[128];
16538  unsigned char tag_str[128];
16539  unsigned char output[128];
16540  unsigned char tag_output[16];
16541  gcm_context ctx;
16542  unsigned int key_len;
16543  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
16544 
16545  memset(key_str, 0x00, 128);
16546  memset(src_str, 0x00, 128);
16547  memset(dst_str, 0x00, 257);
16548  memset(iv_str, 0x00, 128);
16549  memset(add_str, 0x00, 128);
16550  memset(tag_str, 0x00, 128);
16551  memset(output, 0x00, 128);
16552  memset(tag_output, 0x00, 16);
16553 
16554  key_len = unhexify( key_str, "b7e4cd80f03a7ed092c776b243dfad7776d9caf3e679939038e33ac94d8931de" );
16555  pt_len = unhexify( src_str, "102e2d2c0d01dbc69733d2451d1ac1817d60418685d4ae8aa44e1ede1c1e08d2f71f0aef41a72bd9f052ea4a9a057330c95d964f8c3679b80fc9c0952b46f38e2ef055cb33703d686757400210fa5a39bc7e3bb9b8b9cc20c95d5607e2f10bb5501507680ef3aaad96553333b1d27bf2f7ac102c983eede2262a5c6237c1d754" );
16556  iv_len = unhexify( iv_str, "af160a983d674b7d19294f89c3c9307d" );
16557  add_len = unhexify( add_str, "" );
16558 
16559  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
16560  if( 0 == 0 )
16561  {
16562  fct_chk( 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 );
16563  hexify( dst_str, output, pt_len );
16564  hexify( tag_str, tag_output, tag_len );
16565 
16566  fct_chk( strcmp( (char *) dst_str, "6bdfae299d796ef36850327b091ba7bb02e29b643ca4c8bc199eb91ecbaf88426412cfd5570e0042cab735cc46ec648b0877955b3f9a5707d56c478aa77ae5510749beb1e44dbbb37791f18477123436a985e5e9f79fda0a057504847e4ecae841f24e1b53076d3efc6bdea2ebb336ee0e4b5e6ea973e3e50a27b5c2e6fee3e2" ) == 0 );
16567  fct_chk( strcmp( (char *) tag_str, "fdf21e2ac356e507745a07fc96" ) == 0 );
16568  }
16569  }
16570  FCT_TEST_END();
16571 
16572 
16573  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240104_2)
16574  {
16575  unsigned char key_str[128];
16576  unsigned char src_str[128];
16577  unsigned char dst_str[257];
16578  unsigned char iv_str[128];
16579  unsigned char add_str[128];
16580  unsigned char tag_str[128];
16581  unsigned char output[128];
16582  unsigned char tag_output[16];
16583  gcm_context ctx;
16584  unsigned int key_len;
16585  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
16586 
16587  memset(key_str, 0x00, 128);
16588  memset(src_str, 0x00, 128);
16589  memset(dst_str, 0x00, 257);
16590  memset(iv_str, 0x00, 128);
16591  memset(add_str, 0x00, 128);
16592  memset(tag_str, 0x00, 128);
16593  memset(output, 0x00, 128);
16594  memset(tag_output, 0x00, 16);
16595 
16596  key_len = unhexify( key_str, "3a0c46eacfe85cbc0c5f527b87cd075bdeb386d0ca6de816a87cfddcb8a87ae8" );
16597  pt_len = unhexify( src_str, "6d1203dc8395e35a35e234203625ea9d37d1c009db2ac8b1d5b29021997b5421f1d172f4c9a7eb7dbb67f0002720fc412f5b1550c739a2d7ba4387a1f978bd548fe6169d9473893782b10fab99198cb8b4553dfe27583c017136fd8c95070d8d7f9a602d15248d38d728157a0b26404e662f9a5554d3e1582bc0e12f0054792f" );
16598  iv_len = unhexify( iv_str, "b1cde63ad2ad4b8a7bfb36ab78385c3d" );
16599  add_len = unhexify( add_str, "" );
16600 
16601  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
16602  if( 0 == 0 )
16603  {
16604  fct_chk( 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 );
16605  hexify( dst_str, output, pt_len );
16606  hexify( tag_str, tag_output, tag_len );
16607 
16608  fct_chk( strcmp( (char *) dst_str, "9de3a45c976d32ed2af5074ef13b1f86f35b1689b1c698b2e427d5dd62556eb14439f77cd8fcbe686a9a08a922e3f54a78e86fd284de493a740586360b63da09bc1d001777582969c679db54a0ddb8d7dfdb46750edc882804a1c00e417912b72b4cad54dffa1897eba6188b3e61ebf0c3dfab292c2686dcb9db3012e0788c7f" ) == 0 );
16609  fct_chk( strcmp( (char *) tag_str, "641896daab917ea3c82524c194" ) == 0 );
16610  }
16611  }
16612  FCT_TEST_END();
16613 
16614 
16615  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024096_0)
16616  {
16617  unsigned char key_str[128];
16618  unsigned char src_str[128];
16619  unsigned char dst_str[257];
16620  unsigned char iv_str[128];
16621  unsigned char add_str[128];
16622  unsigned char tag_str[128];
16623  unsigned char output[128];
16624  unsigned char tag_output[16];
16625  gcm_context ctx;
16626  unsigned int key_len;
16627  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
16628 
16629  memset(key_str, 0x00, 128);
16630  memset(src_str, 0x00, 128);
16631  memset(dst_str, 0x00, 257);
16632  memset(iv_str, 0x00, 128);
16633  memset(add_str, 0x00, 128);
16634  memset(tag_str, 0x00, 128);
16635  memset(output, 0x00, 128);
16636  memset(tag_output, 0x00, 16);
16637 
16638  key_len = unhexify( key_str, "4d540e0ba27103667eb4511ce9d243592bccb8515ab59896c9922cb5f1b47a02" );
16639  pt_len = unhexify( src_str, "d79f9b1c74e3141f188704c8d5bdaaf6083642be50d00f20c97b56646863895250d131e00db0ecf4f035d42f08cfe20f401c2d3062a38daa0b9e7c19fa7c5d344680aff48d506daa181451f6b34ed9099b9a5b39c0166e93ac4463c9ad51f48e3063b1c16793615336f55d516d079f6c510c2891b97aaa95e5f621e3b5202620" );
16640  iv_len = unhexify( iv_str, "a2ed37daa797522a39b01dd206d06514" );
16641  add_len = unhexify( add_str, "" );
16642 
16643  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
16644  if( 0 == 0 )
16645  {
16646  fct_chk( 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 );
16647  hexify( dst_str, output, pt_len );
16648  hexify( tag_str, tag_output, tag_len );
16649 
16650  fct_chk( strcmp( (char *) dst_str, "6a891bd289ec05990424a2775287f4725aecefe1ab21fa0ca643f37829cae9fcbbf805b883f807102ff12f1a85964df818057daedd41c7349ef32b24642186c45d2858c3260d5b90594969e26b691963ac7fbd2eb4eef466ae690ca274d9194dfc4df1c3baec02abc38fbfc0e2c7c4fcafed227d4f6607329f57ee439435c714" ) == 0 );
16651  fct_chk( strcmp( (char *) tag_str, "9074ecf66bbd582318495158" ) == 0 );
16652  }
16653  }
16654  FCT_TEST_END();
16655 
16656 
16657  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024096_1)
16658  {
16659  unsigned char key_str[128];
16660  unsigned char src_str[128];
16661  unsigned char dst_str[257];
16662  unsigned char iv_str[128];
16663  unsigned char add_str[128];
16664  unsigned char tag_str[128];
16665  unsigned char output[128];
16666  unsigned char tag_output[16];
16667  gcm_context ctx;
16668  unsigned int key_len;
16669  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
16670 
16671  memset(key_str, 0x00, 128);
16672  memset(src_str, 0x00, 128);
16673  memset(dst_str, 0x00, 257);
16674  memset(iv_str, 0x00, 128);
16675  memset(add_str, 0x00, 128);
16676  memset(tag_str, 0x00, 128);
16677  memset(output, 0x00, 128);
16678  memset(tag_output, 0x00, 16);
16679 
16680  key_len = unhexify( key_str, "151d7e4db9e21c87bef65c2ac6aab5b6b045b7dadaf6424644a91e04ba810585" );
16681  pt_len = unhexify( src_str, "0984c5d3f68beba1db4e6ade429cb8954cccaba9fcf4d852897ef69f8483428932c8f18a891f54b68f7d49a03c57f7144d802eb996d233cec930d5eb19f43d0faf9c94a2d7aaca40c8066a2882481f521bb5f6ba15b213810da373817eab3d52b5dd143a1521239482fbf4a07fe68c3d35c90c6ce27b55e40abcf432a261dc58" );
16682  iv_len = unhexify( iv_str, "49e0e0d089e3574fa5a33c963b403ccd" );
16683  add_len = unhexify( add_str, "" );
16684 
16685  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
16686  if( 0 == 0 )
16687  {
16688  fct_chk( 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 );
16689  hexify( dst_str, output, pt_len );
16690  hexify( tag_str, tag_output, tag_len );
16691 
16692  fct_chk( strcmp( (char *) dst_str, "6938d8a7625d1291f249ef1e086bb030ccdc844a9271fee16db60e7acfe4aedd720de76345109d5e6849fd1576c0fe0c34e73dca4011f8565cffccef427198c927f19f63b821f43844d008ceee0566f0d8062d7860e92ebdf21dcde80039a04504cd8ee94874b2eeb038962a74ac9902d9d7ce09afdac7aa706bf3892de19531" ) == 0 );
16693  fct_chk( strcmp( (char *) tag_str, "48d3a8116213f92bfbe86bfe" ) == 0 );
16694  }
16695  }
16696  FCT_TEST_END();
16697 
16698 
16699  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024096_2)
16700  {
16701  unsigned char key_str[128];
16702  unsigned char src_str[128];
16703  unsigned char dst_str[257];
16704  unsigned char iv_str[128];
16705  unsigned char add_str[128];
16706  unsigned char tag_str[128];
16707  unsigned char output[128];
16708  unsigned char tag_output[16];
16709  gcm_context ctx;
16710  unsigned int key_len;
16711  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
16712 
16713  memset(key_str, 0x00, 128);
16714  memset(src_str, 0x00, 128);
16715  memset(dst_str, 0x00, 257);
16716  memset(iv_str, 0x00, 128);
16717  memset(add_str, 0x00, 128);
16718  memset(tag_str, 0x00, 128);
16719  memset(output, 0x00, 128);
16720  memset(tag_output, 0x00, 16);
16721 
16722  key_len = unhexify( key_str, "3e9615515ca45109316cc02bbf3a23406eeeab2092dc6614db76e4e047a3b023" );
16723  pt_len = unhexify( src_str, "46c4c6bad0f21172094ae07a47fd76477b69ca75cc08970e8dbf7b8644d4bcdce96f9d15dd3fba5fba3f851af145652ad004ee525d180d2f3e03bc0ec1c0e8ffebc1474c342732b7247f657ba87ffcef9333857123f29c4976b048c89c24107529dc5dd69004fd176eb0ca6ddae1df7be7d28b3b9da976413588f20c1fff488a" );
16724  iv_len = unhexify( iv_str, "c1facf73da64e16e4acee3fdc3cc6b10" );
16725  add_len = unhexify( add_str, "" );
16726 
16727  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
16728  if( 0 == 0 )
16729  {
16730  fct_chk( 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 );
16731  hexify( dst_str, output, pt_len );
16732  hexify( tag_str, tag_output, tag_len );
16733 
16734  fct_chk( strcmp( (char *) dst_str, "4415dc96d3daf703d392ba1318254143a58870e691570ca6b1be6074dd9c1feae12c72f9314fc3d19b6affb59b642ade6c4e64b7c99f850bff781de193cc0a321a29356addcb0918a282e53801541b5b01383fa7624c36d1f67423f02d2b54f58deca582b7031d192a4d32bc154ae1149cb3c5b48538c803a8d01fa7cfc1683f" ) == 0 );
16735  fct_chk( strcmp( (char *) tag_str, "322d8d1b475a7fd3d0c45609" ) == 0 );
16736  }
16737  }
16738  FCT_TEST_END();
16739 
16740 
16741  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024064_0)
16742  {
16743  unsigned char key_str[128];
16744  unsigned char src_str[128];
16745  unsigned char dst_str[257];
16746  unsigned char iv_str[128];
16747  unsigned char add_str[128];
16748  unsigned char tag_str[128];
16749  unsigned char output[128];
16750  unsigned char tag_output[16];
16751  gcm_context ctx;
16752  unsigned int key_len;
16753  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
16754 
16755  memset(key_str, 0x00, 128);
16756  memset(src_str, 0x00, 128);
16757  memset(dst_str, 0x00, 257);
16758  memset(iv_str, 0x00, 128);
16759  memset(add_str, 0x00, 128);
16760  memset(tag_str, 0x00, 128);
16761  memset(output, 0x00, 128);
16762  memset(tag_output, 0x00, 16);
16763 
16764  key_len = unhexify( key_str, "52c1a14b4ed57cbfa317fe0db87528f4c5551deb9ffc88932589e3255b1d3477" );
16765  pt_len = unhexify( src_str, "eb9081e19b63c94b5f3a696c5fc2c0b7f434e1574394d0b41dd67dfac28a73d4ba26c86b3728b2802fb9d0930c89586b09602900d33eddc5a00a4e98881b5acd5597aae9b80b1569ede74042948f2cd66c3eeae227ae10241df001c85dfe8a5fda0aa21142ecade76290dfdd4a27b6ff3a932dacc0b5f461501239ae8d6d5f41" );
16766  iv_len = unhexify( iv_str, "36d02604b5b24f49b08bb01053a23425" );
16767  add_len = unhexify( add_str, "" );
16768 
16769  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
16770  if( 0 == 0 )
16771  {
16772  fct_chk( 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 );
16773  hexify( dst_str, output, pt_len );
16774  hexify( tag_str, tag_output, tag_len );
16775 
16776  fct_chk( strcmp( (char *) dst_str, "12fbea9e2830ba28551b681c3c0b04ac242dbbde318f79e1cb52dba6bdde58f28f75f2fb378b89f53cef2534a72870a1f526b41619c4b9f811333e8ee639be1250a5c7e47ecbee215b6927ecffaf7d714327b2c4e8b362b1a4f018ff96f67557ca25799adfac04dd980e8e33f993051f975f14e05be8b7342578d0c9d45b237a" ) == 0 );
16777  fct_chk( strcmp( (char *) tag_str, "01e6af272386cf1a" ) == 0 );
16778  }
16779  }
16780  FCT_TEST_END();
16781 
16782 
16783  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024064_1)
16784  {
16785  unsigned char key_str[128];
16786  unsigned char src_str[128];
16787  unsigned char dst_str[257];
16788  unsigned char iv_str[128];
16789  unsigned char add_str[128];
16790  unsigned char tag_str[128];
16791  unsigned char output[128];
16792  unsigned char tag_output[16];
16793  gcm_context ctx;
16794  unsigned int key_len;
16795  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
16796 
16797  memset(key_str, 0x00, 128);
16798  memset(src_str, 0x00, 128);
16799  memset(dst_str, 0x00, 257);
16800  memset(iv_str, 0x00, 128);
16801  memset(add_str, 0x00, 128);
16802  memset(tag_str, 0x00, 128);
16803  memset(output, 0x00, 128);
16804  memset(tag_output, 0x00, 16);
16805 
16806  key_len = unhexify( key_str, "4d08a07b3e94025523a4a6415029c8f9e11fbbfd72564964c53b8f56f865af0d" );
16807  pt_len = unhexify( src_str, "4ac7c27b07a4aebe5caf1de0538d13a56e8c11bc73713bf78c7abbad3b9f6d690e00487267da108e2f2ae67c24b4657e77bb83e2d5e4b244cf34e924cf7bdb443f87ac8cdb374147449f8d06eb517a25dc86f03a389f34190aed5a7faace03ebf646fec2b173b2c15fd5cbe7c5affb6c3ee6d1cace8b00dd8f668a2336da5bfc" );
16808  iv_len = unhexify( iv_str, "98b745c7f231ba3515eddf68f7dc80f4" );
16809  add_len = unhexify( add_str, "" );
16810 
16811  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
16812  if( 0 == 0 )
16813  {
16814  fct_chk( 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 );
16815  hexify( dst_str, output, pt_len );
16816  hexify( tag_str, tag_output, tag_len );
16817 
16818  fct_chk( strcmp( (char *) dst_str, "337693c5c746d8fcdf7cd44d8f76a4db899402b891176e85b4c549c366ad709322874e986d6b939a350d2a0e3b77924d6d15454d882d1d3c94469d749a20d8f0116504cb31888a1e81d3abf25dbb7a7f9e7def26b9151ee649c059da1955f1716423c734dcd26a548844abb6b64c44383ec698e59361b6582c6883b77c338342" ) == 0 );
16819  fct_chk( strcmp( (char *) tag_str, "7a9266c4e5ae48f1" ) == 0 );
16820  }
16821  }
16822  FCT_TEST_END();
16823 
16824 
16825  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024064_2)
16826  {
16827  unsigned char key_str[128];
16828  unsigned char src_str[128];
16829  unsigned char dst_str[257];
16830  unsigned char iv_str[128];
16831  unsigned char add_str[128];
16832  unsigned char tag_str[128];
16833  unsigned char output[128];
16834  unsigned char tag_output[16];
16835  gcm_context ctx;
16836  unsigned int key_len;
16837  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
16838 
16839  memset(key_str, 0x00, 128);
16840  memset(src_str, 0x00, 128);
16841  memset(dst_str, 0x00, 257);
16842  memset(iv_str, 0x00, 128);
16843  memset(add_str, 0x00, 128);
16844  memset(tag_str, 0x00, 128);
16845  memset(output, 0x00, 128);
16846  memset(tag_output, 0x00, 16);
16847 
16848  key_len = unhexify( key_str, "b9d9fc42b58deafe9bc9734f4129dcad34a2e55ee5ad8abcc3f7bc42dd2c0e05" );
16849  pt_len = unhexify( src_str, "11dbcd6cd53d2af766a1b6e4af2bc8bac2811ef818da2d1f81c140ab6e0298e958fef033736bc6e0dccd660b9a3e4222bdf3f89a95b206785d22852201e6dd00b44232ef3c03393893813dccf1960410b50cf50602ead8bd246fad88e66c88b50821578004779b6c45c13d8211df1cfc0fb2d7a342f58e4f2f3623fd31b12c30" );
16850  iv_len = unhexify( iv_str, "67931493096f4550633c322622bc1376" );
16851  add_len = unhexify( add_str, "" );
16852 
16853  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
16854  if( 0 == 0 )
16855  {
16856  fct_chk( 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 );
16857  hexify( dst_str, output, pt_len );
16858  hexify( tag_str, tag_output, tag_len );
16859 
16860  fct_chk( strcmp( (char *) dst_str, "66ab6e7a547705d8ae8ac3cb9bc5fbbc18cd220f89aec7dfbf4f72e7bc59b483c50c9471523c3772efc5deee3a9c34c96b098842cc42f9b7d7c0d2530f45900eeb9502e4dd15363b0543c91765121fd82fcc9db88fe6a531b718c1fe94b96a27856d07707fced3021cca9cf4740833d47091797cc87f57f5388b48e2296ff352" ) == 0 );
16861  fct_chk( strcmp( (char *) tag_str, "0de60d4126733404" ) == 0 );
16862  }
16863  }
16864  FCT_TEST_END();
16865 
16866 
16867  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024032_0)
16868  {
16869  unsigned char key_str[128];
16870  unsigned char src_str[128];
16871  unsigned char dst_str[257];
16872  unsigned char iv_str[128];
16873  unsigned char add_str[128];
16874  unsigned char tag_str[128];
16875  unsigned char output[128];
16876  unsigned char tag_output[16];
16877  gcm_context ctx;
16878  unsigned int key_len;
16879  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
16880 
16881  memset(key_str, 0x00, 128);
16882  memset(src_str, 0x00, 128);
16883  memset(dst_str, 0x00, 257);
16884  memset(iv_str, 0x00, 128);
16885  memset(add_str, 0x00, 128);
16886  memset(tag_str, 0x00, 128);
16887  memset(output, 0x00, 128);
16888  memset(tag_output, 0x00, 16);
16889 
16890  key_len = unhexify( key_str, "97e736a63870546ec9c2325a8e367c8ea17a7ffa71f6cadd6909a5bb9eb12814" );
16891  pt_len = unhexify( src_str, "608280a9dcbd6dd66100a9fdd00e6dac2183e32c945b2b4d255c048243bfea15aad1a10ff3eec0ba79c531239b489a5dc155dc2775519f8d3d2ed82fa7ac653fb7c77e0dfad1c175b6c69963f5c12ff9840f18e0202502e9d1e3b170965cd86ae411af20e6d69a608c99ca8dae3cb3bcce666841132a99429bcde490d9f0b6b5" );
16892  iv_len = unhexify( iv_str, "d35192b4d233507b70c6d32f8e224577" );
16893  add_len = unhexify( add_str, "" );
16894 
16895  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
16896  if( 0 == 0 )
16897  {
16898  fct_chk( 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 );
16899  hexify( dst_str, output, pt_len );
16900  hexify( tag_str, tag_output, tag_len );
16901 
16902  fct_chk( strcmp( (char *) dst_str, "568a0d584fc66c876b7beb9ef8709954a2c426fb8c1936b9024181ca2cd3a7684c412715c11eab80a181be0238e32a2b689e9db36a2ac87db651058080531e7b1110938dcb09615e385d7b224b11222469145f6fb5f4c0e87b08bb3006bc5b6d2ce0a15be7fc29b27c10c645afd9d8253c094fc0f775086bdf2adac265b474d7" ) == 0 );
16903  fct_chk( strcmp( (char *) tag_str, "af18c065" ) == 0 );
16904  }
16905  }
16906  FCT_TEST_END();
16907 
16908 
16909  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024032_1)
16910  {
16911  unsigned char key_str[128];
16912  unsigned char src_str[128];
16913  unsigned char dst_str[257];
16914  unsigned char iv_str[128];
16915  unsigned char add_str[128];
16916  unsigned char tag_str[128];
16917  unsigned char output[128];
16918  unsigned char tag_output[16];
16919  gcm_context ctx;
16920  unsigned int key_len;
16921  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
16922 
16923  memset(key_str, 0x00, 128);
16924  memset(src_str, 0x00, 128);
16925  memset(dst_str, 0x00, 257);
16926  memset(iv_str, 0x00, 128);
16927  memset(add_str, 0x00, 128);
16928  memset(tag_str, 0x00, 128);
16929  memset(output, 0x00, 128);
16930  memset(tag_output, 0x00, 16);
16931 
16932  key_len = unhexify( key_str, "6d05193cc0885f7b74057ead3a0738b74eb3118b1a7e74c5c941ce0011197122" );
16933  pt_len = unhexify( src_str, "c58f51bad815a43a5705c311de4a846ea2a70cbdd2c30d709a2ae0ddf82b7c889dc599fb6e0328fad21555a99530be6deeeb5b1beb333322c2b747288e52fad008513f8040a4735cab3c8cf32c4e18bd57339c85cf5dd71e382067bee7e9ccaf68e767d77fb005a3b73a51acf942fc3b2c5c9eec6189d01a26c6ffb070165874" );
16934  iv_len = unhexify( iv_str, "5160b65bf7a2ccf77fa2e3e0b3866f26" );
16935  add_len = unhexify( add_str, "" );
16936 
16937  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
16938  if( 0 == 0 )
16939  {
16940  fct_chk( 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 );
16941  hexify( dst_str, output, pt_len );
16942  hexify( tag_str, tag_output, tag_len );
16943 
16944  fct_chk( strcmp( (char *) dst_str, "64dc5834a63be414c3714f1b34feddbacd568c6466cbd06f665aa269187a160db79306a53b629fedc1247bd892998fe3208b3105f6273676bbdbff6e254de332d02bc8842ef98d6b79994792eeb5be3a807452b14ae5b5027db81421cc22936ccaa7ae1b77a145462634e424ccf2dfaf001ed4477b804e204120a1416b449b8c" ) == 0 );
16945  fct_chk( strcmp( (char *) tag_str, "364ef0b5" ) == 0 );
16946  }
16947  }
16948  FCT_TEST_END();
16949 
16950 
16951  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024032_2)
16952  {
16953  unsigned char key_str[128];
16954  unsigned char src_str[128];
16955  unsigned char dst_str[257];
16956  unsigned char iv_str[128];
16957  unsigned char add_str[128];
16958  unsigned char tag_str[128];
16959  unsigned char output[128];
16960  unsigned char tag_output[16];
16961  gcm_context ctx;
16962  unsigned int key_len;
16963  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
16964 
16965  memset(key_str, 0x00, 128);
16966  memset(src_str, 0x00, 128);
16967  memset(dst_str, 0x00, 257);
16968  memset(iv_str, 0x00, 128);
16969  memset(add_str, 0x00, 128);
16970  memset(tag_str, 0x00, 128);
16971  memset(output, 0x00, 128);
16972  memset(tag_output, 0x00, 16);
16973 
16974  key_len = unhexify( key_str, "6e8006983712ddfedfebf95e6cc3b0aadc23077055e500ae49fae7705787f2e3" );
16975  pt_len = unhexify( src_str, "e3ba14c4e39ebad925997649872b8331f1700c8f98f80e58d92c85a84f2a427094d9d771b276a0d35b17c0c030734399070a57345d4dcf082b96c7eb580618f7af8bdf036296e20379e74e29f905b52a0c46fe7d46201a075e7de7e1a523a0492c1f228102fdb89f019bcd4571e041c5d37159dc487ec139fa37d33142fc8082" );
16976  iv_len = unhexify( iv_str, "e36e39d787394f1401fc4b173e247db0" );
16977  add_len = unhexify( add_str, "" );
16978 
16979  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
16980  if( 0 == 0 )
16981  {
16982  fct_chk( 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 );
16983  hexify( dst_str, output, pt_len );
16984  hexify( tag_str, tag_output, tag_len );
16985 
16986  fct_chk( strcmp( (char *) dst_str, "4d5db4b65a1ca31f3d980cc30037b5d79d28280a31cc5d0274be77dad70dcd37f652f2ca999c9aecf08fd2a02d382457a277002a1a286ab66f9e437adee00c3bab04f831dd52147005a989606171b6017d28970c8986899fb58900e23d1bc6a9ac0bd4d8b5d6e3fcaebc9903923e68adae7d61cf929388e0e357c7223523d1ff" ) == 0 );
16987  fct_chk( strcmp( (char *) tag_str, "d21637c0" ) == 0 );
16988  }
16989  }
16990  FCT_TEST_END();
16991 
16992 
16993  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024128_0)
16994  {
16995  unsigned char key_str[128];
16996  unsigned char src_str[128];
16997  unsigned char dst_str[257];
16998  unsigned char iv_str[128];
16999  unsigned char add_str[128];
17000  unsigned char tag_str[128];
17001  unsigned char output[128];
17002  unsigned char tag_output[16];
17003  gcm_context ctx;
17004  unsigned int key_len;
17005  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
17006 
17007  memset(key_str, 0x00, 128);
17008  memset(src_str, 0x00, 128);
17009  memset(dst_str, 0x00, 257);
17010  memset(iv_str, 0x00, 128);
17011  memset(add_str, 0x00, 128);
17012  memset(tag_str, 0x00, 128);
17013  memset(output, 0x00, 128);
17014  memset(tag_output, 0x00, 16);
17015 
17016  key_len = unhexify( key_str, "cd8ec237009eab590dbd9b31e76513dfa3501701b1a706982944441d996e1839" );
17017  pt_len = unhexify( src_str, "9eef7c9a0fa3e9a7fcc4b2f9d210a97d6653ded7913f2fb2de825a0dfd78ae1cca68c040f2328009fffe62937d630ee9d6e0e67bc12c38c0b3d035697d4c2311371aacf41cce0d523016ee436a47d93af0df77011131856d072c718c310f0995b71530d70a3da881481f46f21dda62e3e4c898bb9f819b22f816b7c4e2fb6729" );
17018  iv_len = unhexify( iv_str, "a3cae7aa59edb5f91ee21231002db8e2" );
17019  add_len = unhexify( add_str, "45fa52a0e8321d82caea95bd9506f7331923e2aa95e9238908f3ff30e17a96389dfea75e225e34e1605354eaaf999a950f469c6e2e8722da5ad9daded6722baca00e5d1b8e63266ad1b42cae161b9c089f4ffdfbbaa2f1fb0245d1a4c306d46e215e8c6c6ae37652a8f6016f92adb7695d40bde8c202ab9c2d70a96220b4b01b" );
17020 
17021  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
17022  if( 0 == 0 )
17023  {
17024  fct_chk( 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 );
17025  hexify( dst_str, output, pt_len );
17026  hexify( tag_str, tag_output, tag_len );
17027 
17028  fct_chk( strcmp( (char *) dst_str, "833d58f0bbd735c6164ecaa295e95ad1143c564d24817d5f6dded5d2d9b2bed2dc05da4a8a16e20fdf90f839370832f9ddc94e4e564db3ae647068537669b168cc418ea7d0e55b2bb8fd861f9f893a3fdba6aace498bc6afe400fea6b2a8c58924c71ce5db98cfce835161a5cf6187870aa32f522d406c52f91c30543ea6aa16" ) == 0 );
17029  fct_chk( strcmp( (char *) tag_str, "c1df4ee60b10f79173032e9baaf04d3f" ) == 0 );
17030  }
17031  }
17032  FCT_TEST_END();
17033 
17034 
17035  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024128_1)
17036  {
17037  unsigned char key_str[128];
17038  unsigned char src_str[128];
17039  unsigned char dst_str[257];
17040  unsigned char iv_str[128];
17041  unsigned char add_str[128];
17042  unsigned char tag_str[128];
17043  unsigned char output[128];
17044  unsigned char tag_output[16];
17045  gcm_context ctx;
17046  unsigned int key_len;
17047  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
17048 
17049  memset(key_str, 0x00, 128);
17050  memset(src_str, 0x00, 128);
17051  memset(dst_str, 0x00, 257);
17052  memset(iv_str, 0x00, 128);
17053  memset(add_str, 0x00, 128);
17054  memset(tag_str, 0x00, 128);
17055  memset(output, 0x00, 128);
17056  memset(tag_output, 0x00, 16);
17057 
17058  key_len = unhexify( key_str, "5f0b24f054f7455f5821fdc6e9ca728d680e8004fe59b131bb9c7cddb0effa51" );
17059  pt_len = unhexify( src_str, "d406138587fbcb498e8ec37f0f3d7f6b2faa02e6880424e74cdba67ae3468b6823d37fd917a7fede6b34a2f0fc47c520e4088766ba82a989f0d8051a3a80cc8b1e3e1e2b1c6620b90e99b27e65951aeb3936263fc2f76c1c8effa742f53987f8a38c731a411fa53b9f6c81340e0d7ce395c4190b364d9188dc5923f3126546c3" );
17060  iv_len = unhexify( iv_str, "f52f7a2051047f45ec6183b7c66e8b98" );
17061  add_len = unhexify( add_str, "756cf485b6a8e672d90d930a653c69fdbf260d3ea18cd3d0c02175d3966a88b70ab8235d998b745a0eb6a5c92899f41e8c0b7aa4ec132c8cbb1bac97a45766a03923c9b93c2a055abd0127a83f81e6df603a375ca8cc1a2ee0a8b7fd226226b0b19bd2e81f73c34dfafa4fcea08dd93dd4ab7e4b437408af91bff566068a5f34" );
17062 
17063  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
17064  if( 0 == 0 )
17065  {
17066  fct_chk( 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 );
17067  hexify( dst_str, output, pt_len );
17068  hexify( tag_str, tag_output, tag_len );
17069 
17070  fct_chk( strcmp( (char *) dst_str, "e58a03f664003d0ef5bdb28931afd16e7747cff62dcc85bf4eed6e573ea973cf615e4ebee40f35d44e18e391b391e98dca5669a5b0abbfa67834836b122d1909b53acd50e053d5ca836894414bb865b1fb811d8af68b88b4a302fdedf27fdd27456e9aaf34a8d53c9c8587e75843e09776392dbb0501ef41359c01e8980e5221" ) == 0 );
17071  fct_chk( strcmp( (char *) tag_str, "258492b9f549d1b90555eafbe5292806" ) == 0 );
17072  }
17073  }
17074  FCT_TEST_END();
17075 
17076 
17077  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024128_2)
17078  {
17079  unsigned char key_str[128];
17080  unsigned char src_str[128];
17081  unsigned char dst_str[257];
17082  unsigned char iv_str[128];
17083  unsigned char add_str[128];
17084  unsigned char tag_str[128];
17085  unsigned char output[128];
17086  unsigned char tag_output[16];
17087  gcm_context ctx;
17088  unsigned int key_len;
17089  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
17090 
17091  memset(key_str, 0x00, 128);
17092  memset(src_str, 0x00, 128);
17093  memset(dst_str, 0x00, 257);
17094  memset(iv_str, 0x00, 128);
17095  memset(add_str, 0x00, 128);
17096  memset(tag_str, 0x00, 128);
17097  memset(output, 0x00, 128);
17098  memset(tag_output, 0x00, 16);
17099 
17100  key_len = unhexify( key_str, "6f50efb3946f6a6dfe63f12780f764bb6ebcf2127d3804610e11f0bd9b68ce0f" );
17101  pt_len = unhexify( src_str, "bfc89d5049a5b4015c9eb64fdaf9fe9f4be7229e67c713a7b368f0550b3a5e12ba3a4399c64f60b7157e1b289b154a494deadecff0d0686ab44fae2a34ae4cb120a7f00268ab551f41c16a05f8999157be1103464127a8a9bccf736c32db045124178c90472e664d8e67a2ade0efe9a3b048c453d2fb5292dd8d29e62d52c5b5" );
17102  iv_len = unhexify( iv_str, "63c1192ab7fc75c17e7812fd960f296e" );
17103  add_len = unhexify( add_str, "335cc5c8fb5920b09e0263133eb481fd97f8d9f29db8689fb63034bc40959a176ccdca6725e1f94f822e4d871138fc39776fbe062f07bf80e5c8891c2e1007efeb77c158ced8d6c002b04442ed35c40a2187a59c02339c05762942208e3be964736a431017f472dfd5fdaf8fb8c645cdb684f9632057b9eb755253b4b75e3688" );
17104 
17105  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
17106  if( 0 == 0 )
17107  {
17108  fct_chk( 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 );
17109  hexify( dst_str, output, pt_len );
17110  hexify( tag_str, tag_output, tag_len );
17111 
17112  fct_chk( strcmp( (char *) dst_str, "ca974942ae0f4955ca0736218e4e356145c1ef42135b1142b55ccb3fc5caeec630eb50e69b5a6f97c11d4b604189b27496623bb0365ae69f4150e201e72bad8e7b883185588d0a31c44273bae87194b1610114a83ec47ba68a02e29891de43204977fcd0d551778335fc77fcfdf3fd63e9e5e0c02930a0321ffb093c521cd0ed" ) == 0 );
17113  fct_chk( strcmp( (char *) tag_str, "2f11a01cb0ef8dcefad9233bec44d6f0" ) == 0 );
17114  }
17115  }
17116  FCT_TEST_END();
17117 
17118 
17119  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024120_0)
17120  {
17121  unsigned char key_str[128];
17122  unsigned char src_str[128];
17123  unsigned char dst_str[257];
17124  unsigned char iv_str[128];
17125  unsigned char add_str[128];
17126  unsigned char tag_str[128];
17127  unsigned char output[128];
17128  unsigned char tag_output[16];
17129  gcm_context ctx;
17130  unsigned int key_len;
17131  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
17132 
17133  memset(key_str, 0x00, 128);
17134  memset(src_str, 0x00, 128);
17135  memset(dst_str, 0x00, 257);
17136  memset(iv_str, 0x00, 128);
17137  memset(add_str, 0x00, 128);
17138  memset(tag_str, 0x00, 128);
17139  memset(output, 0x00, 128);
17140  memset(tag_output, 0x00, 16);
17141 
17142  key_len = unhexify( key_str, "ec566324ad9d4cd015821e2cd4ed4d3d507bdb3c65bd50acc85f690ef06740fa" );
17143  pt_len = unhexify( src_str, "348d35768d7192415cbb92c5625f10edd79f24c56d4b821aaf80d7dc83e901ede6be94d1efe11a3acd16ac00aea8d0d4875c47522332fed11cdf0816b26978de431c89d2fe6d122b2d4980f1d53a97edc15e490a44e73cba9394ca4bbb871675c729c39de80d6678c71b1bd220e4647bfd20a7ddbefe2b7eec7276b87c92ba77" );
17144  iv_len = unhexify( iv_str, "95c8a544c4b94e9fbfd76e66f40bb975" );
17145  add_len = unhexify( add_str, "fa6f38f8e562a54bb2281dc9a7cbe0b981292fb00dc0053185550a300661852179d0f2beb4e7759b81316fbfead5c858e6fce73f3cd2c2462925dbb199a4e6c121d051b1b5ebf60e16d1e30f6973b19cf31830da30588fdfff6115a4a1f6d977a72583379a56055724581be5232b0d1b0ae88bab5d4a031b058bc8d03078dcd5" );
17146 
17147  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
17148  if( 0 == 0 )
17149  {
17150  fct_chk( 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 );
17151  hexify( dst_str, output, pt_len );
17152  hexify( tag_str, tag_output, tag_len );
17153 
17154  fct_chk( strcmp( (char *) dst_str, "8b4da79f3ae1ea35a80af2f52fc640055e6a3b92617ddfa79fe5d8a49f28ddf36a82a17ca0b3cdf1726700f7ffc09ae5b412d064fd52a90a76bacc74a0b89e38dc474e880a2b768ffa91fef34c47759a7b8fd7faa32a4fcb258349495e4438c7b2055a8f462729fa4e7223aa9b47087695e3aabf43afb32e272d536b257b748a" ) == 0 );
17155  fct_chk( strcmp( (char *) tag_str, "b1faec277697add8f756391dd9c7f4" ) == 0 );
17156  }
17157  }
17158  FCT_TEST_END();
17159 
17160 
17161  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024120_1)
17162  {
17163  unsigned char key_str[128];
17164  unsigned char src_str[128];
17165  unsigned char dst_str[257];
17166  unsigned char iv_str[128];
17167  unsigned char add_str[128];
17168  unsigned char tag_str[128];
17169  unsigned char output[128];
17170  unsigned char tag_output[16];
17171  gcm_context ctx;
17172  unsigned int key_len;
17173  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
17174 
17175  memset(key_str, 0x00, 128);
17176  memset(src_str, 0x00, 128);
17177  memset(dst_str, 0x00, 257);
17178  memset(iv_str, 0x00, 128);
17179  memset(add_str, 0x00, 128);
17180  memset(tag_str, 0x00, 128);
17181  memset(output, 0x00, 128);
17182  memset(tag_output, 0x00, 16);
17183 
17184  key_len = unhexify( key_str, "dd6aa4ff63efad53772e07e0fa7d6eda5e73be167620fd7c9f3997cf46cd25a9" );
17185  pt_len = unhexify( src_str, "592b3a6f09841483770b767bed73498c286896d2ad3d8bd91f83f92f489b1e83b0456a54e067a79e1bf59eefc1d3bd35cecfba940811d06a06e9b8f774bfeff557bd7e3f0864cb6bd3f867efbe3f040d2384ae8e1a0e20ed38caa668159d3e33c4669478d00963a1152305aa2037a5e06cac52d84021234a7f5d46ab060bd03a" );
17186  iv_len = unhexify( iv_str, "6386e03bcb6ac98140ee0706b54c8492" );
17187  add_len = unhexify( add_str, "0ccdaa4f54cfea1026a4d26338b1e6d50a70b00c46147fe906c95f0a2fb5d92456ca3aa28a257c079eceb852b819e46646997df87b873bc567f69a2fae471df03b0e5b94511189eaeedd238a991b326963c46d53080f420ec9fd1a74145a0b155cbcc0b5e47fa69450c7eb447080e34868d640f923923b91a9e13a05c73550ca" );
17188 
17189  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
17190  if( 0 == 0 )
17191  {
17192  fct_chk( 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 );
17193  hexify( dst_str, output, pt_len );
17194  hexify( tag_str, tag_output, tag_len );
17195 
17196  fct_chk( strcmp( (char *) dst_str, "c1be540448f1e3f432a10b3cc1a913cc4046595f5a57bf57c9d856cdf381832e914088d3388199018ff26327e3001678ab363da9457ba2084f5aa81320f1a0343491e0b44424018765861c5db917ce14e91a77f7e805d7a97a17a288ee66567c5c01ee61dc46a9aa8b281438ed377b792e9539e311676f81c567339cf92b8e1e" ) == 0 );
17197  fct_chk( strcmp( (char *) tag_str, "ce7e361713630ecaff81866c20fce6" ) == 0 );
17198  }
17199  }
17200  FCT_TEST_END();
17201 
17202 
17203  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024120_2)
17204  {
17205  unsigned char key_str[128];
17206  unsigned char src_str[128];
17207  unsigned char dst_str[257];
17208  unsigned char iv_str[128];
17209  unsigned char add_str[128];
17210  unsigned char tag_str[128];
17211  unsigned char output[128];
17212  unsigned char tag_output[16];
17213  gcm_context ctx;
17214  unsigned int key_len;
17215  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
17216 
17217  memset(key_str, 0x00, 128);
17218  memset(src_str, 0x00, 128);
17219  memset(dst_str, 0x00, 257);
17220  memset(iv_str, 0x00, 128);
17221  memset(add_str, 0x00, 128);
17222  memset(tag_str, 0x00, 128);
17223  memset(output, 0x00, 128);
17224  memset(tag_output, 0x00, 16);
17225 
17226  key_len = unhexify( key_str, "ad3990cd57ce4e95342cdca4f07d7e35d575eb19f224a7c821b1f5a8c54d4bc3" );
17227  pt_len = unhexify( src_str, "732809c29b5eeda974039b122b875aec2823e082ef637294658cc54f9bca88eb7eea87a366234f89919975d0e7dd2f8ea83198d5a6e349149a016a4b177ba43df2f3ca28e27b8566591d225ac25dfd9ea431cf1fb3ea530d65dac93aad47764a6aef8ec6903b6d145ea9a2663034d2a320690b92afd8032084b754be97604382" );
17228  iv_len = unhexify( iv_str, "fd4ed75d861da2cc14fd1054976c8566" );
17229  add_len = unhexify( add_str, "ab44689839fdf47e887b70fc1b0422dbbe5c1b50f4e704f9a435967ba8b70cf1e144a025d37292f628f9f7dd9d05557b65340090503201e8cf2cea2d6a73ea4850bd0931b90fd4a4306ba84b8aec99fed47ca1b16daee6c95c97e4ba0dd1fb130cd13f5ef77c5af96f61fa05305a3aca3775e927f72f08fc34bc994e69abaad8" );
17230 
17231  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
17232  if( 0 == 0 )
17233  {
17234  fct_chk( 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 );
17235  hexify( dst_str, output, pt_len );
17236  hexify( tag_str, tag_output, tag_len );
17237 
17238  fct_chk( strcmp( (char *) dst_str, "f48721b08101b35cde1c4ce08a8ba0049185b9dd48b66ab9971fd67dee24f89b456e9ca19ac8a9b5b3b088cbd53898a8c2ac1129752fb7fc55a0c3e2e7266ff40f7a9d63ebc4ab65f47422fc17cbe07fcfda582fd1b8f50e840ae89837e84add8be17d4cac3d2be26bef4aa8438daec9d2b139e442f99c32f2789378c8029ad9" ) == 0 );
17239  fct_chk( strcmp( (char *) tag_str, "da6da2af0fc14b591a86359b552e20" ) == 0 );
17240  }
17241  }
17242  FCT_TEST_END();
17243 
17244 
17245  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024112_0)
17246  {
17247  unsigned char key_str[128];
17248  unsigned char src_str[128];
17249  unsigned char dst_str[257];
17250  unsigned char iv_str[128];
17251  unsigned char add_str[128];
17252  unsigned char tag_str[128];
17253  unsigned char output[128];
17254  unsigned char tag_output[16];
17255  gcm_context ctx;
17256  unsigned int key_len;
17257  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
17258 
17259  memset(key_str, 0x00, 128);
17260  memset(src_str, 0x00, 128);
17261  memset(dst_str, 0x00, 257);
17262  memset(iv_str, 0x00, 128);
17263  memset(add_str, 0x00, 128);
17264  memset(tag_str, 0x00, 128);
17265  memset(output, 0x00, 128);
17266  memset(tag_output, 0x00, 16);
17267 
17268  key_len = unhexify( key_str, "30823396ac90db573b6587676564d09fa680906bd6eaa6b8597e2e7549c9d848" );
17269  pt_len = unhexify( src_str, "c55be5a0b8559e02de4667ba5656f7e46f5627af13fd34d327f6fbfc4f3a9273036fce2fb21232f8e2ed115b39b0ecb9a119c8fc17070bbe4e34d3544d7117ffda5e1ef05e063b5a8fceb23158d7824d6a1eb4d90a1d0360c6bd78fb24fdd4cfa35924beb4e090891d06f53fc52cdcaa6b8bba6772d549eb95b64ebf3756ae45" );
17270  iv_len = unhexify( iv_str, "496ac734afadcd54f1a4372ceb5645fc" );
17271  add_len = unhexify( add_str, "2d582131f7071e80cde1b11106b7d79bb208743de759d40b897efdab018f4eff1f91d2fe67e27af25a13f201bbe4446f20ac6b942ff7b32cf10ad1cea36945b67ac08b114fc616175a87437ee05f3a8b6566e9edfbc1beec0ed8696b5d5c41a25ac43bf3ce2920dd262233ab3405d46f523894dcbfb6c90b6e911ceb93bb7fa6" );
17272 
17273  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
17274  if( 0 == 0 )
17275  {
17276  fct_chk( 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 );
17277  hexify( dst_str, output, pt_len );
17278  hexify( tag_str, tag_output, tag_len );
17279 
17280  fct_chk( strcmp( (char *) dst_str, "c9da3df66111dcbabf731c6891eb698ac3283780f526e81383e201244efe4eca7a1c84a3bfa9ba5616afb15c1f1af0f3af2e071df6c1d34a343c3e3440f1a3e1b6620243d9e7d9a4dbda5981c3e876fd07f392d44bf3e0a4edbd884462ec2f71d36bde4a1b5792629da09a1fb01bfdbd532fbac71887a05a7077fc119a4638d4" ) == 0 );
17281  fct_chk( strcmp( (char *) tag_str, "cec973a27c42e31b779a6a91aa34" ) == 0 );
17282  }
17283  }
17284  FCT_TEST_END();
17285 
17286 
17287  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024112_1)
17288  {
17289  unsigned char key_str[128];
17290  unsigned char src_str[128];
17291  unsigned char dst_str[257];
17292  unsigned char iv_str[128];
17293  unsigned char add_str[128];
17294  unsigned char tag_str[128];
17295  unsigned char output[128];
17296  unsigned char tag_output[16];
17297  gcm_context ctx;
17298  unsigned int key_len;
17299  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
17300 
17301  memset(key_str, 0x00, 128);
17302  memset(src_str, 0x00, 128);
17303  memset(dst_str, 0x00, 257);
17304  memset(iv_str, 0x00, 128);
17305  memset(add_str, 0x00, 128);
17306  memset(tag_str, 0x00, 128);
17307  memset(output, 0x00, 128);
17308  memset(tag_output, 0x00, 16);
17309 
17310  key_len = unhexify( key_str, "815f2b2f0b1621aa198eef2761380f10ac9872a5adbdf6286bdf3386e56aae4e" );
17311  pt_len = unhexify( src_str, "d16930c570414bb620e0eaa2e9b5d96e4424127e16461aaa5885c616a02ae974fb2890e73bade9ffa5066eb88a46ac7fcf258d55733d315951b1b71c5e3c13d78d60344ce921966297a0f6361cfeab03b346a7fa4f83a7a0eaf37576fa33a496102446f9f31b06ed91b51672c879cb18d4e38fa86e156d5b1dbff27925922470" );
17312  iv_len = unhexify( iv_str, "0843984bbaa565ca24f148e57a7d9c57" );
17313  add_len = unhexify( add_str, "1514b99c0ad3493c36fe1216d1a887a69ea0340101aebb03f60d7ed26893119e81e8b8c3f0bb4af5e10a3bf4edcf257473be9dcebb44a9d912f04d97a556ecf020c0bed7ccef2bfd5580f1fc74b706fea45f8c63d8de6f8deccc47a02dc86d3f0624e52f6f1dcd09de8000f2d98a4cc0896da6a564b92263673adf390ed909fa" );
17314 
17315  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
17316  if( 0 == 0 )
17317  {
17318  fct_chk( 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 );
17319  hexify( dst_str, output, pt_len );
17320  hexify( tag_str, tag_output, tag_len );
17321 
17322  fct_chk( strcmp( (char *) dst_str, "7506175acd64224b39f890e498ee5013bb46fc571dc2b125ed5891b8ce8bcf42342f015fd2df5f4b9cc220aab52386bf2247d4163951e86467633f96c28bdda166d778855a7f60465dd2983232c9e53d5f89432407807b0402a10f155f80055c339451a106ac54438ae4a945e60d5320eab0adad9a1e66d59b9d3cc53887811d" ) == 0 );
17323  fct_chk( strcmp( (char *) tag_str, "28d9d780052b36dbe80a25d41d5b" ) == 0 );
17324  }
17325  }
17326  FCT_TEST_END();
17327 
17328 
17329  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024112_2)
17330  {
17331  unsigned char key_str[128];
17332  unsigned char src_str[128];
17333  unsigned char dst_str[257];
17334  unsigned char iv_str[128];
17335  unsigned char add_str[128];
17336  unsigned char tag_str[128];
17337  unsigned char output[128];
17338  unsigned char tag_output[16];
17339  gcm_context ctx;
17340  unsigned int key_len;
17341  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
17342 
17343  memset(key_str, 0x00, 128);
17344  memset(src_str, 0x00, 128);
17345  memset(dst_str, 0x00, 257);
17346  memset(iv_str, 0x00, 128);
17347  memset(add_str, 0x00, 128);
17348  memset(tag_str, 0x00, 128);
17349  memset(output, 0x00, 128);
17350  memset(tag_output, 0x00, 16);
17351 
17352  key_len = unhexify( key_str, "d1325ecedb8fc0fe449de558fbc11ddebef660e47aabb84edfe69837a6a9066c" );
17353  pt_len = unhexify( src_str, "f9a4f7029feae5cf5bdb8385d6ad7d7da6a243c5026818e5a794c6cffb8dad3227964501c5a049b5a94a7ea2e24434e086800094118444c5a971bbe575324fb6b51c5939f81e78bb11d85d324742b462ce8d13584b3882617d0c94776f328a554f9d532b6515ade9fbbd2de1c12ab53671b7f7edaa7e20223f4c371c1f229568" );
17354  iv_len = unhexify( iv_str, "8aff702c40a8c974cf24bf3c645169a5" );
17355  add_len = unhexify( add_str, "9ec2e851dee3834d4843aafa740f3aac4cfb1e4d3a7e3e77349113f5200768c3e9dc37481d6292ebeebd2372db02ef8ac7180830c7187995c815d1d1520c3e2f8cf2a94993b18c828b53485073c8a845066772615b26d7a3d7d3e7d81ad1725797153f7ba5e313bdec582c5482adf76b31c871cd42a313018f40d7e23f1a7f33" );
17356 
17357  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
17358  if( 0 == 0 )
17359  {
17360  fct_chk( 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 );
17361  hexify( dst_str, output, pt_len );
17362  hexify( tag_str, tag_output, tag_len );
17363 
17364  fct_chk( strcmp( (char *) dst_str, "3a93663aab93c6cd236cba4db2c03942d9ebc669633936370c2834357e76f6555c34d40dfaab1e78a105da9092acdba8be89e2dbf72e89518d55e09eb2fa1ea7da505484ad4531dba3eb853d1ae1a477355ea9448067b0adbc782d64ec342c7cb781d9dd8dc2b14dc1c9ab5542b679782b8bb9b45ff6a4e36c513df169c8eddc" ) == 0 );
17365  fct_chk( strcmp( (char *) tag_str, "7e682b0ddbe6c55091838616c352" ) == 0 );
17366  }
17367  }
17368  FCT_TEST_END();
17369 
17370 
17371  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024104_0)
17372  {
17373  unsigned char key_str[128];
17374  unsigned char src_str[128];
17375  unsigned char dst_str[257];
17376  unsigned char iv_str[128];
17377  unsigned char add_str[128];
17378  unsigned char tag_str[128];
17379  unsigned char output[128];
17380  unsigned char tag_output[16];
17381  gcm_context ctx;
17382  unsigned int key_len;
17383  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
17384 
17385  memset(key_str, 0x00, 128);
17386  memset(src_str, 0x00, 128);
17387  memset(dst_str, 0x00, 257);
17388  memset(iv_str, 0x00, 128);
17389  memset(add_str, 0x00, 128);
17390  memset(tag_str, 0x00, 128);
17391  memset(output, 0x00, 128);
17392  memset(tag_output, 0x00, 16);
17393 
17394  key_len = unhexify( key_str, "4b92242268e598ddcf3a5a0de26d74356693c4dbca354e44be401f3d6804ea1e" );
17395  pt_len = unhexify( src_str, "72dc75bc4c8f5bbbd9c639fbdb34afbb84706404c9e67eaee1959aa4b51eac0db4f975cb3ed8d8ca27f72f61c8562ec953a7b8745826121a7016e60e877dcdb046f236af3826c1ddf5b929c5bd9a92b0d5c23cf8983bf2459ced6595882b3dd0cd25da7eba981bba122623dae22dbdce05cf4e5d82d2cc54eb4f68e9e8eff02b" );
17396  iv_len = unhexify( iv_str, "3c292bbcc16c94b0a263f4d22f328915" );
17397  add_len = unhexify( add_str, "167dfab08aac8350574693b31210138f6b99cfb61ba7ade2e2abffe2255837a913c9afe332e8fc4b2463310df46492e7d982dcb70fdda2a8b03911e6be9a5c5621d0ae8ecd1cb390910b6702aad33394c25d1160b86687e25bb6cdc4811e3158bb85ba75548329dacc19287d9c004a0473029b77ca290fc47c1f96d9583bcd67" );
17398 
17399  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
17400  if( 0 == 0 )
17401  {
17402  fct_chk( 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 );
17403  hexify( dst_str, output, pt_len );
17404  hexify( tag_str, tag_output, tag_len );
17405 
17406  fct_chk( strcmp( (char *) dst_str, "c2dd42ab9bf3fda78032f73cbf7d28dd8e32c582a3b7ee79795551f133234d62ea6571a466b8e1af0b3d354b71a6582c9c8013d5f8a2c34eb3e848360adac1d5005cede58eae7784f32a31c40eec5a3f03cc1e7263d8515b36225b3515ebcf8dca2a77172c797d347ed3921ca0bc73e8ae56347134a6a2a06ae084f1ebb7b0fe" ) == 0 );
17407  fct_chk( strcmp( (char *) tag_str, "02fb002d8e4a1d11bb0f0b64d7" ) == 0 );
17408  }
17409  }
17410  FCT_TEST_END();
17411 
17412 
17413  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024104_1)
17414  {
17415  unsigned char key_str[128];
17416  unsigned char src_str[128];
17417  unsigned char dst_str[257];
17418  unsigned char iv_str[128];
17419  unsigned char add_str[128];
17420  unsigned char tag_str[128];
17421  unsigned char output[128];
17422  unsigned char tag_output[16];
17423  gcm_context ctx;
17424  unsigned int key_len;
17425  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
17426 
17427  memset(key_str, 0x00, 128);
17428  memset(src_str, 0x00, 128);
17429  memset(dst_str, 0x00, 257);
17430  memset(iv_str, 0x00, 128);
17431  memset(add_str, 0x00, 128);
17432  memset(tag_str, 0x00, 128);
17433  memset(output, 0x00, 128);
17434  memset(tag_output, 0x00, 16);
17435 
17436  key_len = unhexify( key_str, "c5c50059a61692a8f1ffae1c616158c67d276dcd4a029ce197ed48567e5ff889" );
17437  pt_len = unhexify( src_str, "ab7e13923e66d0f600accd2462af74192c3de6c718a27052ef7c1302239c7fb2413df7c662657ca18228575ed138bc54f31663df548618e98d64402feab529d5bf6a678431c714df1fe24ea80017f455a8312bb5b710df8dd3571970404a806ec493dcb1f3f1ac980663f0b9c9823e0d0304ed90689f70d4a24da7d8504c5b0b" );
17438  iv_len = unhexify( iv_str, "920d82c6b97a7bea121f64f83b75dc65" );
17439  add_len = unhexify( add_str, "a9bd57db2bbe83177287e5f614dab977071abfe0b538067f7d0c5acd59bfba95dfb725b8e1af4573ff10ce135148a3bab044552348378d5ff0c4f8be1aef7ed60bb9a374a6c7b8097d7c1804fdf078f212e63e9f11d7404ad0d1a9cb28d5ba199aec3a6c41b9e523b541ad38cea763159836ede6371357ab1aeaedaaf4481c29" );
17440 
17441  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
17442  if( 0 == 0 )
17443  {
17444  fct_chk( 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 );
17445  hexify( dst_str, output, pt_len );
17446  hexify( tag_str, tag_output, tag_len );
17447 
17448  fct_chk( strcmp( (char *) dst_str, "8f7e87e3ff4f7ccd1cedc1df125199cfb588339119a5ea5f9bdb918f89ca35f9dc16c6465fb25ea250eaaa8e7f00aca2199f92a2c244642bd15cbc9b62caa58115ef01d0b4a9e02527e035744b20892f79b07aa47b6c6db1332f82434764c43124b27148f2f611766781df8e4cc0b5ba99b858c13c233646dcb2b8749a194f08" ) == 0 );
17449  fct_chk( strcmp( (char *) tag_str, "65da88676d2ab3f9c6d590eb80" ) == 0 );
17450  }
17451  }
17452  FCT_TEST_END();
17453 
17454 
17455  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024104_2)
17456  {
17457  unsigned char key_str[128];
17458  unsigned char src_str[128];
17459  unsigned char dst_str[257];
17460  unsigned char iv_str[128];
17461  unsigned char add_str[128];
17462  unsigned char tag_str[128];
17463  unsigned char output[128];
17464  unsigned char tag_output[16];
17465  gcm_context ctx;
17466  unsigned int key_len;
17467  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
17468 
17469  memset(key_str, 0x00, 128);
17470  memset(src_str, 0x00, 128);
17471  memset(dst_str, 0x00, 257);
17472  memset(iv_str, 0x00, 128);
17473  memset(add_str, 0x00, 128);
17474  memset(tag_str, 0x00, 128);
17475  memset(output, 0x00, 128);
17476  memset(tag_output, 0x00, 16);
17477 
17478  key_len = unhexify( key_str, "4c7cc3588436ad9e877de72578d30026d32746817ca7a8fb7df9870650aa48d8" );
17479  pt_len = unhexify( src_str, "00c2845fc495b89f870bce714f8604a7e7a96ede92c4b9bdcf044c9a176f66a28761089c083d5e2d613c746711238477c0efdf475e18af99e88cf76d04d4e40495ea16c462801443cd7f69c5d36ac9f337e828c308f1d1938b1fac732274459827cf9806c1661a247167948a93eb6e998a4cea76bb825baa27e4180e52633bb3" );
17480  iv_len = unhexify( iv_str, "5e82285a3b332c693e427f9410564489" );
17481  add_len = unhexify( add_str, "9971b8e234fc3e1e9644545e383eb065e1866e2faa6513278d3972add5ec0e71b1558329fe1ee038a27919e43bfdac8cf08141ab540528f74f9d5bc8c400bb6ee7867e4dbc2aa081d9126ac374dc62b10004d0e233dc93376b93c0da415e7d3e09851f2084a99feeb25939e21893056870cefe7cdfaf49f728a91ea0eef605af" );
17482 
17483  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
17484  if( 0 == 0 )
17485  {
17486  fct_chk( 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 );
17487  hexify( dst_str, output, pt_len );
17488  hexify( tag_str, tag_output, tag_len );
17489 
17490  fct_chk( strcmp( (char *) dst_str, "ab7bac4ddede796576e1fc265c3c598055827be74dc7ed8ef172d00a648da56727767d68fcbe6c44e7272dc8cb15f03a26dc439178849b0e9ad6c7410dd4cca3f9ef40ec7c280042bbc199155c7341e88d35e5e8d0b42856e618c6c30e43d49506ccc3518585c951a3898409315e8b3b4d0adccdb561ddcf1b9d3b2cf3de9750" ) == 0 );
17491  fct_chk( strcmp( (char *) tag_str, "2474c830c6ebe9c6dcb393a32d" ) == 0 );
17492  }
17493  }
17494  FCT_TEST_END();
17495 
17496 
17497  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102496_0)
17498  {
17499  unsigned char key_str[128];
17500  unsigned char src_str[128];
17501  unsigned char dst_str[257];
17502  unsigned char iv_str[128];
17503  unsigned char add_str[128];
17504  unsigned char tag_str[128];
17505  unsigned char output[128];
17506  unsigned char tag_output[16];
17507  gcm_context ctx;
17508  unsigned int key_len;
17509  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
17510 
17511  memset(key_str, 0x00, 128);
17512  memset(src_str, 0x00, 128);
17513  memset(dst_str, 0x00, 257);
17514  memset(iv_str, 0x00, 128);
17515  memset(add_str, 0x00, 128);
17516  memset(tag_str, 0x00, 128);
17517  memset(output, 0x00, 128);
17518  memset(tag_output, 0x00, 16);
17519 
17520  key_len = unhexify( key_str, "9d73aec506e022c0692892f6dbc3b4d41e86b97fb377c1956ee27b9c9ab3b32a" );
17521  pt_len = unhexify( src_str, "f02bf60f10ed876a803a96e75f3fe17b4e355246135a0cd5497baad2a40a523c27e27bf848f0cb5d0c6428d08bec9590b17fca5e697990d2a6f7d21080ab614f378a07461e7a6207229e0a087e285841ef2f119cac7d8a2d3abbb1e7272a0d7dd493c8c4f797e160c36e086227ceae4923658365b2d3a3fbea11aa2fab3499cb" );
17522  iv_len = unhexify( iv_str, "bbacc081a6107364dcdac83abceddbfb" );
17523  add_len = unhexify( add_str, "77e1da090e4d3a892baf1afbc12a56201a4362d8f09cda5e9bdb23411e6908915301d66403acb3524898c1c51d6970a71878accd0048cb6cfbd4bf941c174ee05eca2c4a29f1c24e936d3a63cb6cfa710617af1bbb41d755b2f79e135db914a7dd00c590cf741078eb72c3ab559787213202dcc0a4734bdd612b917e372f0e61" );
17524 
17525  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
17526  if( 0 == 0 )
17527  {
17528  fct_chk( 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 );
17529  hexify( dst_str, output, pt_len );
17530  hexify( tag_str, tag_output, tag_len );
17531 
17532  fct_chk( strcmp( (char *) dst_str, "d78fa4024b8d073899ac09b8151c29b10a37793b76f04921bdc7dd3d2ef530a831e53cf6a7ddeec0e033ceeabb525bf5ef57bf9b3661ffb57d3bd4024252fa11dd569102c787c2d8489a1ad1290dca2e8edf82fbe6b5f83bcc0e888045b895e20c8556ee80430cc8640fc070491d2bb81a1209428938cd8e7a27e0e858029421" ) == 0 );
17533  fct_chk( strcmp( (char *) tag_str, "2235d00a47d57cfbd383b69d" ) == 0 );
17534  }
17535  }
17536  FCT_TEST_END();
17537 
17538 
17539  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102496_1)
17540  {
17541  unsigned char key_str[128];
17542  unsigned char src_str[128];
17543  unsigned char dst_str[257];
17544  unsigned char iv_str[128];
17545  unsigned char add_str[128];
17546  unsigned char tag_str[128];
17547  unsigned char output[128];
17548  unsigned char tag_output[16];
17549  gcm_context ctx;
17550  unsigned int key_len;
17551  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
17552 
17553  memset(key_str, 0x00, 128);
17554  memset(src_str, 0x00, 128);
17555  memset(dst_str, 0x00, 257);
17556  memset(iv_str, 0x00, 128);
17557  memset(add_str, 0x00, 128);
17558  memset(tag_str, 0x00, 128);
17559  memset(output, 0x00, 128);
17560  memset(tag_output, 0x00, 16);
17561 
17562  key_len = unhexify( key_str, "73198dfd92d26283637e451af6e26ff56e3b7d355ed7ab8b2059c1022e0ea904" );
17563  pt_len = unhexify( src_str, "2471b3c4cc1d6884d333d1c998c7c441808ca884cb88173a225569e1689ef39e266e9ad381926adeafc2daccbdd3c9457ea1bdc3bb05168ef1eead1504d1d44dde34f96e1a7f2a5d3fb33cf5292d52fa9412800419570db0eb24fb74d55de202f5df74073c5a2eb9eb726393996eaeb32072bebb00593de41b97ecbab2554186" );
17564  iv_len = unhexify( iv_str, "e36403ce1acc63bf50b47387250ef533" );
17565  add_len = unhexify( add_str, "cad023cfb73d08e5b082c3061f3a6502a1c1d53038cfb19074d0ec26c9b272db93094147ef0ab2bdce440a2b3233bb0429add47601f011df679698264c0f81444aba14576a1a565e5c169f967c7571bfb32a2a4d7fcae897863d78964c5b1a040cc845494c0ad8ff4353317b28ca3798e6252d5015b58e99354ce6dfbe8b7a95" );
17566 
17567  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
17568  if( 0 == 0 )
17569  {
17570  fct_chk( 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 );
17571  hexify( dst_str, output, pt_len );
17572  hexify( tag_str, tag_output, tag_len );
17573 
17574  fct_chk( strcmp( (char *) dst_str, "32afd6d6fdab2019ce40771b5298aaadf753d1c4cb221f01e4dfc8b1968f898188fa4d448d8364510a7e68c7393168efb4b4ead1db1c254c5cea568a84a997a76dbc925a6c19a9092002629f1d9c52737005232e5c7620b95ed64741598a65a9ec95f2c97b6b78bd85380811c11386074b1e1e63b9a7e99d1cb2807bfaa17f0e" ) == 0 );
17575  fct_chk( strcmp( (char *) tag_str, "e22deb1276a73e05feb1c6a0" ) == 0 );
17576  }
17577  }
17578  FCT_TEST_END();
17579 
17580 
17581  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102496_2)
17582  {
17583  unsigned char key_str[128];
17584  unsigned char src_str[128];
17585  unsigned char dst_str[257];
17586  unsigned char iv_str[128];
17587  unsigned char add_str[128];
17588  unsigned char tag_str[128];
17589  unsigned char output[128];
17590  unsigned char tag_output[16];
17591  gcm_context ctx;
17592  unsigned int key_len;
17593  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
17594 
17595  memset(key_str, 0x00, 128);
17596  memset(src_str, 0x00, 128);
17597  memset(dst_str, 0x00, 257);
17598  memset(iv_str, 0x00, 128);
17599  memset(add_str, 0x00, 128);
17600  memset(tag_str, 0x00, 128);
17601  memset(output, 0x00, 128);
17602  memset(tag_output, 0x00, 16);
17603 
17604  key_len = unhexify( key_str, "1dcbd278480434135fb838ffcdc8e7716e95ea99a1cc36d544096dff9e9aeba0" );
17605  pt_len = unhexify( src_str, "da3b8c9e4aa8443535b321c3e9bde3c6742cd9f228c971257430b27293ebeb635917d6cba976c81934c3077902911169e8c6197b2d56a046b7ff03b482c38172accac98aacc90076370df28bc8a2044c393c7541b7b69b0fb852746dcf3140ace4e76861975814d2b5966f7714fb6cfe3e4299d79182fc63a345067a0aa54d8b" );
17606  iv_len = unhexify( iv_str, "b737bcdee4ef83aa83f124cf7208a671" );
17607  add_len = unhexify( add_str, "49a544aae76b04e62211428a2cc3719e4451f3dbf9a23b6ac824fc472e95e38386d267415c1472a8b0707b0573b9eb2a39a5d5a13464947cc3a7a7dd3b7196f11e87ab5233944f7cea3f4d62b088febf8b82a44d4ca6148be1ba24905432b7ac2bb4ebaf22d3bce97ac2bd34158b6011fbac77ee1fa96ca0c9c9e0207044fbbd" );
17608 
17609  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
17610  if( 0 == 0 )
17611  {
17612  fct_chk( 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 );
17613  hexify( dst_str, output, pt_len );
17614  hexify( tag_str, tag_output, tag_len );
17615 
17616  fct_chk( strcmp( (char *) dst_str, "061b491b73f9250798a0fb1fdcd72a70eddc9cb48c1f10119387d45c50d5fbb8b85592a7977487e45342fddeb8d481eef3b99463972f66acb38fe04953c223c5f3e02611c8f33cb9ad7466860895fae585d40bc78ec14d1cf17b4c5b75e4d8c6341f1eaf80da4a78aaaa30d3bc8bff15f234aacbee4067a947e42275b12e0bdb" ) == 0 );
17617  fct_chk( strcmp( (char *) tag_str, "b897da3061c77aab5eb54622" ) == 0 );
17618  }
17619  }
17620  FCT_TEST_END();
17621 
17622 
17623  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102464_0)
17624  {
17625  unsigned char key_str[128];
17626  unsigned char src_str[128];
17627  unsigned char dst_str[257];
17628  unsigned char iv_str[128];
17629  unsigned char add_str[128];
17630  unsigned char tag_str[128];
17631  unsigned char output[128];
17632  unsigned char tag_output[16];
17633  gcm_context ctx;
17634  unsigned int key_len;
17635  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
17636 
17637  memset(key_str, 0x00, 128);
17638  memset(src_str, 0x00, 128);
17639  memset(dst_str, 0x00, 257);
17640  memset(iv_str, 0x00, 128);
17641  memset(add_str, 0x00, 128);
17642  memset(tag_str, 0x00, 128);
17643  memset(output, 0x00, 128);
17644  memset(tag_output, 0x00, 16);
17645 
17646  key_len = unhexify( key_str, "2e00467f18536ea6b4d582b2480ebee883e4f56bd91af3ad7a47ceea3ece9acc" );
17647  pt_len = unhexify( src_str, "d5334398318ade59e6bda5cfce8e11b25c9ccefa2f651eb16f66c03d84dcc900dc7c85e6d2b778b155ae4591af0698df7f3b8b9f64d4442ecc82035f7d8e71a5f61c515a963f2fba077f3cb8276e91b31b3f8aa193988a16a86ccaec4a688ad68b5146925ec21d55ded407709d34d140f37e1f87d955619453c3704e83918088" );
17648  iv_len = unhexify( iv_str, "aa6716e6b7107876a3321d807a810e11" );
17649  add_len = unhexify( add_str, "5606a0b77cc9020955c7efda33b7080e9c0e9fd374c4201b4324b3e6523b0407171141e8246d01292a34dc69331f7177d6b7238e16e0303e85741f9cea5698e42fc79217d9e141474068d6c192713c04b1ba3573e93480f69e4cbf72090d46d62d5b52e4a7613af8fcf0010d0024ea11c19cb04571c6d7045a1157cf81df18d1" );
17650 
17651  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
17652  if( 0 == 0 )
17653  {
17654  fct_chk( 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 );
17655  hexify( dst_str, output, pt_len );
17656  hexify( tag_str, tag_output, tag_len );
17657 
17658  fct_chk( strcmp( (char *) dst_str, "249119ace4e292ffdfebb433d5b57fa1518af3389eb832146c3adc2dc62fcc9121d7f6461a53ee107ce7edf362b365d8bc18e50cf9c328cb7c7aa7b4e8bfa07c34dc81c38fe0982bbc3b543485ea4b0ce5a76c988cdfcd241911cd66f5a5f9e0c97332bb0f3926117c0437470717c63957aeba1c55d96b1ff0f4d6045f908cd4" ) == 0 );
17659  fct_chk( strcmp( (char *) tag_str, "70e986fced03ae67" ) == 0 );
17660  }
17661  }
17662  FCT_TEST_END();
17663 
17664 
17665  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102464_1)
17666  {
17667  unsigned char key_str[128];
17668  unsigned char src_str[128];
17669  unsigned char dst_str[257];
17670  unsigned char iv_str[128];
17671  unsigned char add_str[128];
17672  unsigned char tag_str[128];
17673  unsigned char output[128];
17674  unsigned char tag_output[16];
17675  gcm_context ctx;
17676  unsigned int key_len;
17677  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
17678 
17679  memset(key_str, 0x00, 128);
17680  memset(src_str, 0x00, 128);
17681  memset(dst_str, 0x00, 257);
17682  memset(iv_str, 0x00, 128);
17683  memset(add_str, 0x00, 128);
17684  memset(tag_str, 0x00, 128);
17685  memset(output, 0x00, 128);
17686  memset(tag_output, 0x00, 16);
17687 
17688  key_len = unhexify( key_str, "a18240f6135e7b6eac071546ee58bb52394bc34ad4e91ee678b72e4514fddcf7" );
17689  pt_len = unhexify( src_str, "02f288eea5588e7a011f4d91eca232af70f60ae3d9302cae5a8a58798c1b4e973e3b1d07695934ae871201682554ef6a5b94976c6a1aa73d354f1d65e3f025bb2a3f1e93009e822a87590dbfd1965904223049c5ac0da8596955199ff767b92df10d1f9c05c40bd8204846c719c5594000cabd87342f0447e4e466c3788723f8" );
17690  iv_len = unhexify( iv_str, "149da8186ca73941582532ede16edf3d" );
17691  add_len = unhexify( add_str, "4d46e1e87322ca84d5bb92d58670f644083db06bdffd99fab0055a62b64a30b5a5673a108f0b9f114d379d3fe63a1f63407881c5b5cb03142109c158af42a00eb24d3b1873edd2284a94a06b79d672bc8f13358f324af2622e9aa0da2b11e33567927e81aea24f3605168e602b532fa2cf9bde5f8cc0b51329e0930cf22e3752" );
17692 
17693  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
17694  if( 0 == 0 )
17695  {
17696  fct_chk( 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 );
17697  hexify( dst_str, output, pt_len );
17698  hexify( tag_str, tag_output, tag_len );
17699 
17700  fct_chk( strcmp( (char *) dst_str, "36cddac99e2673588ba783d3c085b9935626687a2dbac9ad10deb4867c577d6f80453266b2400afd773e4edeb743c32562e85f7f8f43dfd87b10a2dd79eddf6e580aeb4cea92ac21cf49ca97398cc23c02b0ca59257643fb2bc6462b9cf04658352d53c2ee50d87cc5ca2ecb722d950f0daecfa0b7c33aaa2c91dd8b093916cb" ) == 0 );
17701  fct_chk( strcmp( (char *) tag_str, "73cbe40df3927e80" ) == 0 );
17702  }
17703  }
17704  FCT_TEST_END();
17705 
17706 
17707  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102464_2)
17708  {
17709  unsigned char key_str[128];
17710  unsigned char src_str[128];
17711  unsigned char dst_str[257];
17712  unsigned char iv_str[128];
17713  unsigned char add_str[128];
17714  unsigned char tag_str[128];
17715  unsigned char output[128];
17716  unsigned char tag_output[16];
17717  gcm_context ctx;
17718  unsigned int key_len;
17719  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
17720 
17721  memset(key_str, 0x00, 128);
17722  memset(src_str, 0x00, 128);
17723  memset(dst_str, 0x00, 257);
17724  memset(iv_str, 0x00, 128);
17725  memset(add_str, 0x00, 128);
17726  memset(tag_str, 0x00, 128);
17727  memset(output, 0x00, 128);
17728  memset(tag_output, 0x00, 16);
17729 
17730  key_len = unhexify( key_str, "4b64bded6c658090a85b5d889679c6a00579498aa82be1e3a628a1cd001e52a6" );
17731  pt_len = unhexify( src_str, "182cd59dc1934199d2d2a2712157438c347e286f66b5a2b8b5149aa41ff7ba82adc3751be379741124dfcf05c531416a64f25f0d28abb6f7bf98c80762f0fa363da679437621dcf61bce43ef4d63178779d1a3ebffb82044d427ef522cbd2643cf1f5617a0f23103cd2a164a59f182b151f47b303c4eb7387ee5cb97cabdf985" );
17732  iv_len = unhexify( iv_str, "99aa6f359534da409a18540d82fb3026" );
17733  add_len = unhexify( add_str, "f55fd6255d8a188ce9a4a2727699ce16c8bc5c6adba88d94106038b74deb79c9d43bfaa47375148d843a5ce248d70193c8017196941b2d9e2dfd4375a3390c19d2f833b0b265dab30f26adee07ab0aeeb930dc3a9fbcf719a707fac724deb28dee2a6788b17fa3505290c2797c6dbf930b41eca1f6d54d75b820e62ec7023e93" );
17734 
17735  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
17736  if( 0 == 0 )
17737  {
17738  fct_chk( 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 );
17739  hexify( dst_str, output, pt_len );
17740  hexify( tag_str, tag_output, tag_len );
17741 
17742  fct_chk( strcmp( (char *) dst_str, "5a1211218174e60690334856483a3066e2e8d996fe8ab86d0f8fef09aba9ef0acff9d3e1e5cc27efb5464bc23bea9c778fc74206ae3a16e5fdbf99694ab7096f23c4b395d7a7b8d6675e56b5505ff62f52bf183bcc4433298296e41662d6519d9c1f0a5fb3140376c8890547eae72afe75c338ba97fad9f0184dd311bbdaf3cc" ) == 0 );
17743  fct_chk( strcmp( (char *) tag_str, "8dbdc0746074b486" ) == 0 );
17744  }
17745  }
17746  FCT_TEST_END();
17747 
17748 
17749  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102432_0)
17750  {
17751  unsigned char key_str[128];
17752  unsigned char src_str[128];
17753  unsigned char dst_str[257];
17754  unsigned char iv_str[128];
17755  unsigned char add_str[128];
17756  unsigned char tag_str[128];
17757  unsigned char output[128];
17758  unsigned char tag_output[16];
17759  gcm_context ctx;
17760  unsigned int key_len;
17761  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
17762 
17763  memset(key_str, 0x00, 128);
17764  memset(src_str, 0x00, 128);
17765  memset(dst_str, 0x00, 257);
17766  memset(iv_str, 0x00, 128);
17767  memset(add_str, 0x00, 128);
17768  memset(tag_str, 0x00, 128);
17769  memset(output, 0x00, 128);
17770  memset(tag_output, 0x00, 16);
17771 
17772  key_len = unhexify( key_str, "cadef353122cec1fdbc236c0ab195fc4d732655cef444c00b6cba5c61e01c614" );
17773  pt_len = unhexify( src_str, "a3d5e55fa3110a268cf1414a483adab6d58ec8762a6e6be81269c0369e8840333503bc3688c7be001cdb84d163fa1dfb05f3b01ffff31151f1af780c796822e3d564f785964a546bcc2a320d81a2bc61058652a8594ae9b9b0917400e08d4a99fa161376ac53cba54c92889fd3497e233aff4e12cd85d57375c7c89e92cdf5f5" );
17774  iv_len = unhexify( iv_str, "d765b5954e5b486885dc78ce6801516e" );
17775  add_len = unhexify( add_str, "ba0405745971eaec5d337fd22e0ad287551e7084f1c9c38231d675719e3980356e183a99a3c760ecf7a8ede5e0dac8d2bc13e135570ff6e91a854ea3b457263b0e77896fdf7bdf0b53c8276cfd1ea3e8e22450ff2665eacd24e5fb2be89373349fc9e2967763d43cbd7adc9a376b1b4ab956ddf8b1a56d9385fb7e861bc34df7" );
17776 
17777  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
17778  if( 0 == 0 )
17779  {
17780  fct_chk( 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 );
17781  hexify( dst_str, output, pt_len );
17782  hexify( tag_str, tag_output, tag_len );
17783 
17784  fct_chk( strcmp( (char *) dst_str, "9b99f984ae26f9cad5b3c8058757a0a5caef0fb86b8ecef0c1bca6b99bc72b0d5345a00ae75e37d4e651008bb733105d2172edaaf5bda4ad950a49de55a514e882a470dca7c7bbfddde40d38fef4e1f3864fd7e212bbc0383d0bc29ab2303c8935d49c35d7d73df2fba0daeb5f37f9ab0d541766da71b33da1018a3f287ba312" ) == 0 );
17785  fct_chk( strcmp( (char *) tag_str, "c374cd77" ) == 0 );
17786  }
17787  }
17788  FCT_TEST_END();
17789 
17790 
17791  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102432_1)
17792  {
17793  unsigned char key_str[128];
17794  unsigned char src_str[128];
17795  unsigned char dst_str[257];
17796  unsigned char iv_str[128];
17797  unsigned char add_str[128];
17798  unsigned char tag_str[128];
17799  unsigned char output[128];
17800  unsigned char tag_output[16];
17801  gcm_context ctx;
17802  unsigned int key_len;
17803  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
17804 
17805  memset(key_str, 0x00, 128);
17806  memset(src_str, 0x00, 128);
17807  memset(dst_str, 0x00, 257);
17808  memset(iv_str, 0x00, 128);
17809  memset(add_str, 0x00, 128);
17810  memset(tag_str, 0x00, 128);
17811  memset(output, 0x00, 128);
17812  memset(tag_output, 0x00, 16);
17813 
17814  key_len = unhexify( key_str, "0cfc42773fe2d16a59da52234af5015271332344448c214a2b4a0bb53b07a0a0" );
17815  pt_len = unhexify( src_str, "dfbf9eaa46c368b28ef50227db97f29b5d9ed599760bb83f5d52f92ef5522815d6952ebb0d9b4efe8844216d37510746caf8c775d2c862bad8d67effe109a0cbcdd14ba8e31fa420a475e55ac6b02908346ad1b064d5b6b869503e08d057ae65e9dc2a2a26345917b18d1b715a2372e8e114a071eced0c29cc9966d7205ae010" );
17816  iv_len = unhexify( iv_str, "45afb3ba2db9287f06cf48405764a955" );
17817  add_len = unhexify( add_str, "16d3ad553cc0fde3f32112bdb478450c65c854927b198914649a2820a9e3d01131b693765d40bd2bb74a50eb4cd7bc8dd8dbac9c6a61acaf5e4cf81570814b30a6a11877a8f9c5df342f70008cbf0576bd27a50bfaf6e22a40bd77435da16b666a06d172aa981bdcae0d25b8ab002c6c1994a356d3c3b7e4dd7b99892b0784f6" );
17818 
17819  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
17820  if( 0 == 0 )
17821  {
17822  fct_chk( 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 );
17823  hexify( dst_str, output, pt_len );
17824  hexify( tag_str, tag_output, tag_len );
17825 
17826  fct_chk( strcmp( (char *) dst_str, "e29db2c4bccef2dda828ce652791d424a86cd5790e6ece67bc029ba9520bd8f35a214a73d8b86564df0eccdb60eafee4170da2694eb563e5a854b25d7ba0a4c53465fdc15c6e267be2e54263f97aa3edbe2358f3d9b8d28997388a57aa427a239a74534393593196253de1c2946b7a437a00480ecb2eb08dbe55ca2b3641c36f" ) == 0 );
17827  fct_chk( strcmp( (char *) tag_str, "39e01fa0" ) == 0 );
17828  }
17829  }
17830  FCT_TEST_END();
17831 
17832 
17833  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102432_2)
17834  {
17835  unsigned char key_str[128];
17836  unsigned char src_str[128];
17837  unsigned char dst_str[257];
17838  unsigned char iv_str[128];
17839  unsigned char add_str[128];
17840  unsigned char tag_str[128];
17841  unsigned char output[128];
17842  unsigned char tag_output[16];
17843  gcm_context ctx;
17844  unsigned int key_len;
17845  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
17846 
17847  memset(key_str, 0x00, 128);
17848  memset(src_str, 0x00, 128);
17849  memset(dst_str, 0x00, 257);
17850  memset(iv_str, 0x00, 128);
17851  memset(add_str, 0x00, 128);
17852  memset(tag_str, 0x00, 128);
17853  memset(output, 0x00, 128);
17854  memset(tag_output, 0x00, 16);
17855 
17856  key_len = unhexify( key_str, "2a840df4be22c70786c873058d2a6e16dd9895cbfb55b9c9e98f958cfe62e65d" );
17857  pt_len = unhexify( src_str, "313eddc53f3986927a261f498283b6dc4a39d26f98c7428127237d79a11c5e626e2e9cdb68f72aa3168ab23dfa2f5e03bc65a68d781f23fb9e295909cd9f0f3e5648cf82f3f6b3b509b0a333cb7d9f2b6e444c351a318f8f200a921ccb409def21b87bc55ec211a76a518350e6ee21d7379edd004b3bfd1ce9086b9c66d80ec1" );
17858  iv_len = unhexify( iv_str, "ebf155f7cf55e6aabdc1171c95c45293" );
17859  add_len = unhexify( add_str, "8abb8843de1766cfb8d6474496acda2f7a14e78a5e4c787ac89e6bc06cfd42173c35b3a75ddff644f4a58aa7502fedada38a7156457365b4c3c07bc12a8f9061331139b9a2b8d840829b876beb84f27d5a64093c270fe6c310ca3afe987bbc5ec4dc06358d5bf77c7b4e4fe4078c6d3ec28e9a281318da88949c478094c0065b" );
17860 
17861  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
17862  if( 0 == 0 )
17863  {
17864  fct_chk( 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 );
17865  hexify( dst_str, output, pt_len );
17866  hexify( tag_str, tag_output, tag_len );
17867 
17868  fct_chk( strcmp( (char *) dst_str, "769869a55754eb5d6d42e22a2b5271b38533fc0c79642e250347d34566eeca732e0565f80672054bd10cbd3067730dbc567039c730d8bc32a2bdaad09885651533a4f03174d4e6510547c1e1dd51be6070ab0ca0cceeaccf64a46d0ef87c0311bd09973f3b588a4dfb39c85086ea5d67dc531c287b83c161dcb25e07b671343f" ) == 0 );
17869  fct_chk( strcmp( (char *) tag_str, "c364c089" ) == 0 );
17870  }
17871  }
17872  FCT_TEST_END();
17873 
17874 
17875  FCT_TEST_BGN(gcm_nist_validation_aes_25612800128_0)
17876  {
17877  unsigned char key_str[128];
17878  unsigned char src_str[128];
17879  unsigned char dst_str[257];
17880  unsigned char iv_str[128];
17881  unsigned char add_str[128];
17882  unsigned char tag_str[128];
17883  unsigned char output[128];
17884  unsigned char tag_output[16];
17885  gcm_context ctx;
17886  unsigned int key_len;
17887  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
17888 
17889  memset(key_str, 0x00, 128);
17890  memset(src_str, 0x00, 128);
17891  memset(dst_str, 0x00, 257);
17892  memset(iv_str, 0x00, 128);
17893  memset(add_str, 0x00, 128);
17894  memset(tag_str, 0x00, 128);
17895  memset(output, 0x00, 128);
17896  memset(tag_output, 0x00, 16);
17897 
17898  key_len = unhexify( key_str, "461566cac74f9220df97c1ab2f8bb74189a634bc752f7f04526923d30506949c" );
17899  pt_len = unhexify( src_str, "" );
17900  iv_len = unhexify( iv_str, "546d821e437371061cf3207f3d866c15" );
17901  add_len = unhexify( add_str, "" );
17902 
17903  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
17904  if( 0 == 0 )
17905  {
17906  fct_chk( 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 );
17907  hexify( dst_str, output, pt_len );
17908  hexify( tag_str, tag_output, tag_len );
17909 
17910  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
17911  fct_chk( strcmp( (char *) tag_str, "44193072791c435d6e8ea7756a0bd7bf" ) == 0 );
17912  }
17913  }
17914  FCT_TEST_END();
17915 
17916 
17917  FCT_TEST_BGN(gcm_nist_validation_aes_25612800128_1)
17918  {
17919  unsigned char key_str[128];
17920  unsigned char src_str[128];
17921  unsigned char dst_str[257];
17922  unsigned char iv_str[128];
17923  unsigned char add_str[128];
17924  unsigned char tag_str[128];
17925  unsigned char output[128];
17926  unsigned char tag_output[16];
17927  gcm_context ctx;
17928  unsigned int key_len;
17929  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
17930 
17931  memset(key_str, 0x00, 128);
17932  memset(src_str, 0x00, 128);
17933  memset(dst_str, 0x00, 257);
17934  memset(iv_str, 0x00, 128);
17935  memset(add_str, 0x00, 128);
17936  memset(tag_str, 0x00, 128);
17937  memset(output, 0x00, 128);
17938  memset(tag_output, 0x00, 16);
17939 
17940  key_len = unhexify( key_str, "7736dbb38f1fe351a7fa101d91da62124c22ac02ee06b9413f56691067572f73" );
17941  pt_len = unhexify( src_str, "" );
17942  iv_len = unhexify( iv_str, "5f01779e5e4471cd95a591f08445eb5b" );
17943  add_len = unhexify( add_str, "" );
17944 
17945  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
17946  if( 0 == 0 )
17947  {
17948  fct_chk( 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 );
17949  hexify( dst_str, output, pt_len );
17950  hexify( tag_str, tag_output, tag_len );
17951 
17952  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
17953  fct_chk( strcmp( (char *) tag_str, "1a1f08c8f40b93e7b5a63008dff54777" ) == 0 );
17954  }
17955  }
17956  FCT_TEST_END();
17957 
17958 
17959  FCT_TEST_BGN(gcm_nist_validation_aes_25612800128_2)
17960  {
17961  unsigned char key_str[128];
17962  unsigned char src_str[128];
17963  unsigned char dst_str[257];
17964  unsigned char iv_str[128];
17965  unsigned char add_str[128];
17966  unsigned char tag_str[128];
17967  unsigned char output[128];
17968  unsigned char tag_output[16];
17969  gcm_context ctx;
17970  unsigned int key_len;
17971  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
17972 
17973  memset(key_str, 0x00, 128);
17974  memset(src_str, 0x00, 128);
17975  memset(dst_str, 0x00, 257);
17976  memset(iv_str, 0x00, 128);
17977  memset(add_str, 0x00, 128);
17978  memset(tag_str, 0x00, 128);
17979  memset(output, 0x00, 128);
17980  memset(tag_output, 0x00, 16);
17981 
17982  key_len = unhexify( key_str, "eedcae924105c86190032650e2d66cf6927dd314de96a339db48e2081d19ad4a" );
17983  pt_len = unhexify( src_str, "" );
17984  iv_len = unhexify( iv_str, "a39d400ee763a22d2a97c1983a8a06a6" );
17985  add_len = unhexify( add_str, "" );
17986 
17987  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
17988  if( 0 == 0 )
17989  {
17990  fct_chk( 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 );
17991  hexify( dst_str, output, pt_len );
17992  hexify( tag_str, tag_output, tag_len );
17993 
17994  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
17995  fct_chk( strcmp( (char *) tag_str, "3b4294d34352743c4b48c40794047bea" ) == 0 );
17996  }
17997  }
17998  FCT_TEST_END();
17999 
18000 
18001  FCT_TEST_BGN(gcm_nist_validation_aes_25612800120_0)
18002  {
18003  unsigned char key_str[128];
18004  unsigned char src_str[128];
18005  unsigned char dst_str[257];
18006  unsigned char iv_str[128];
18007  unsigned char add_str[128];
18008  unsigned char tag_str[128];
18009  unsigned char output[128];
18010  unsigned char tag_output[16];
18011  gcm_context ctx;
18012  unsigned int key_len;
18013  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
18014 
18015  memset(key_str, 0x00, 128);
18016  memset(src_str, 0x00, 128);
18017  memset(dst_str, 0x00, 257);
18018  memset(iv_str, 0x00, 128);
18019  memset(add_str, 0x00, 128);
18020  memset(tag_str, 0x00, 128);
18021  memset(output, 0x00, 128);
18022  memset(tag_output, 0x00, 16);
18023 
18024  key_len = unhexify( key_str, "714df4b69dc00067c4ab550f37ff72358b0a905dea2c01f00be28cec130313c2" );
18025  pt_len = unhexify( src_str, "" );
18026  iv_len = unhexify( iv_str, "c46d63d6fead2cee03bd033fbc2e6478" );
18027  add_len = unhexify( add_str, "" );
18028 
18029  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
18030  if( 0 == 0 )
18031  {
18032  fct_chk( 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 );
18033  hexify( dst_str, output, pt_len );
18034  hexify( tag_str, tag_output, tag_len );
18035 
18036  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
18037  fct_chk( strcmp( (char *) tag_str, "2a0271b0666889d2d0b34e82bf17d8" ) == 0 );
18038  }
18039  }
18040  FCT_TEST_END();
18041 
18042 
18043  FCT_TEST_BGN(gcm_nist_validation_aes_25612800120_1)
18044  {
18045  unsigned char key_str[128];
18046  unsigned char src_str[128];
18047  unsigned char dst_str[257];
18048  unsigned char iv_str[128];
18049  unsigned char add_str[128];
18050  unsigned char tag_str[128];
18051  unsigned char output[128];
18052  unsigned char tag_output[16];
18053  gcm_context ctx;
18054  unsigned int key_len;
18055  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
18056 
18057  memset(key_str, 0x00, 128);
18058  memset(src_str, 0x00, 128);
18059  memset(dst_str, 0x00, 257);
18060  memset(iv_str, 0x00, 128);
18061  memset(add_str, 0x00, 128);
18062  memset(tag_str, 0x00, 128);
18063  memset(output, 0x00, 128);
18064  memset(tag_output, 0x00, 16);
18065 
18066  key_len = unhexify( key_str, "454021ece9a87a9543a1626820d39edd1eff3dca38a287d8fb68bd315a7a2677" );
18067  pt_len = unhexify( src_str, "" );
18068  iv_len = unhexify( iv_str, "51de54b633a7c9f3b7b2c1e4b47d26a4" );
18069  add_len = unhexify( add_str, "" );
18070 
18071  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
18072  if( 0 == 0 )
18073  {
18074  fct_chk( 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 );
18075  hexify( dst_str, output, pt_len );
18076  hexify( tag_str, tag_output, tag_len );
18077 
18078  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
18079  fct_chk( strcmp( (char *) tag_str, "114708102a434e3a30088b5944c272" ) == 0 );
18080  }
18081  }
18082  FCT_TEST_END();
18083 
18084 
18085  FCT_TEST_BGN(gcm_nist_validation_aes_25612800120_2)
18086  {
18087  unsigned char key_str[128];
18088  unsigned char src_str[128];
18089  unsigned char dst_str[257];
18090  unsigned char iv_str[128];
18091  unsigned char add_str[128];
18092  unsigned char tag_str[128];
18093  unsigned char output[128];
18094  unsigned char tag_output[16];
18095  gcm_context ctx;
18096  unsigned int key_len;
18097  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
18098 
18099  memset(key_str, 0x00, 128);
18100  memset(src_str, 0x00, 128);
18101  memset(dst_str, 0x00, 257);
18102  memset(iv_str, 0x00, 128);
18103  memset(add_str, 0x00, 128);
18104  memset(tag_str, 0x00, 128);
18105  memset(output, 0x00, 128);
18106  memset(tag_output, 0x00, 16);
18107 
18108  key_len = unhexify( key_str, "d7e90b539c99e8c2187ed72823258c1149890a69a9c0081ff8c66e1cdea9f2f6" );
18109  pt_len = unhexify( src_str, "" );
18110  iv_len = unhexify( iv_str, "6dba3273560f30f118a2e0251f7b7d76" );
18111  add_len = unhexify( add_str, "" );
18112 
18113  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
18114  if( 0 == 0 )
18115  {
18116  fct_chk( 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 );
18117  hexify( dst_str, output, pt_len );
18118  hexify( tag_str, tag_output, tag_len );
18119 
18120  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
18121  fct_chk( strcmp( (char *) tag_str, "5f45e00181cd2d7feb4723e0cdca24" ) == 0 );
18122  }
18123  }
18124  FCT_TEST_END();
18125 
18126 
18127  FCT_TEST_BGN(gcm_nist_validation_aes_25612800112_0)
18128  {
18129  unsigned char key_str[128];
18130  unsigned char src_str[128];
18131  unsigned char dst_str[257];
18132  unsigned char iv_str[128];
18133  unsigned char add_str[128];
18134  unsigned char tag_str[128];
18135  unsigned char output[128];
18136  unsigned char tag_output[16];
18137  gcm_context ctx;
18138  unsigned int key_len;
18139  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
18140 
18141  memset(key_str, 0x00, 128);
18142  memset(src_str, 0x00, 128);
18143  memset(dst_str, 0x00, 257);
18144  memset(iv_str, 0x00, 128);
18145  memset(add_str, 0x00, 128);
18146  memset(tag_str, 0x00, 128);
18147  memset(output, 0x00, 128);
18148  memset(tag_output, 0x00, 16);
18149 
18150  key_len = unhexify( key_str, "2948233eec9bf8adf7250b20d62df9219d30e314c5932383203805ff9f3dc5cf" );
18151  pt_len = unhexify( src_str, "" );
18152  iv_len = unhexify( iv_str, "d6b8e723272e26922b78756d66e03432" );
18153  add_len = unhexify( add_str, "" );
18154 
18155  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
18156  if( 0 == 0 )
18157  {
18158  fct_chk( 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 );
18159  hexify( dst_str, output, pt_len );
18160  hexify( tag_str, tag_output, tag_len );
18161 
18162  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
18163  fct_chk( strcmp( (char *) tag_str, "14c9a9a217a33d4c0b8e627641fe" ) == 0 );
18164  }
18165  }
18166  FCT_TEST_END();
18167 
18168 
18169  FCT_TEST_BGN(gcm_nist_validation_aes_25612800112_1)
18170  {
18171  unsigned char key_str[128];
18172  unsigned char src_str[128];
18173  unsigned char dst_str[257];
18174  unsigned char iv_str[128];
18175  unsigned char add_str[128];
18176  unsigned char tag_str[128];
18177  unsigned char output[128];
18178  unsigned char tag_output[16];
18179  gcm_context ctx;
18180  unsigned int key_len;
18181  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
18182 
18183  memset(key_str, 0x00, 128);
18184  memset(src_str, 0x00, 128);
18185  memset(dst_str, 0x00, 257);
18186  memset(iv_str, 0x00, 128);
18187  memset(add_str, 0x00, 128);
18188  memset(tag_str, 0x00, 128);
18189  memset(output, 0x00, 128);
18190  memset(tag_output, 0x00, 16);
18191 
18192  key_len = unhexify( key_str, "c73fb5e732ebc1dc7c91ac25de0d01d427de12baf05ff251c04d3290d77c34d1" );
18193  pt_len = unhexify( src_str, "" );
18194  iv_len = unhexify( iv_str, "c31220835b11d61920ae2c91e335907e" );
18195  add_len = unhexify( add_str, "" );
18196 
18197  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
18198  if( 0 == 0 )
18199  {
18200  fct_chk( 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 );
18201  hexify( dst_str, output, pt_len );
18202  hexify( tag_str, tag_output, tag_len );
18203 
18204  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
18205  fct_chk( strcmp( (char *) tag_str, "9eb18097d3e6b6b7d5e161ae4e96" ) == 0 );
18206  }
18207  }
18208  FCT_TEST_END();
18209 
18210 
18211  FCT_TEST_BGN(gcm_nist_validation_aes_25612800112_2)
18212  {
18213  unsigned char key_str[128];
18214  unsigned char src_str[128];
18215  unsigned char dst_str[257];
18216  unsigned char iv_str[128];
18217  unsigned char add_str[128];
18218  unsigned char tag_str[128];
18219  unsigned char output[128];
18220  unsigned char tag_output[16];
18221  gcm_context ctx;
18222  unsigned int key_len;
18223  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
18224 
18225  memset(key_str, 0x00, 128);
18226  memset(src_str, 0x00, 128);
18227  memset(dst_str, 0x00, 257);
18228  memset(iv_str, 0x00, 128);
18229  memset(add_str, 0x00, 128);
18230  memset(tag_str, 0x00, 128);
18231  memset(output, 0x00, 128);
18232  memset(tag_output, 0x00, 16);
18233 
18234  key_len = unhexify( key_str, "a46aff2121825814c603b258f71d47bd9c9d3db4c6fe0f900e0e99d36c8f8d66" );
18235  pt_len = unhexify( src_str, "" );
18236  iv_len = unhexify( iv_str, "7cb5550a20d958490739be8a5c72440f" );
18237  add_len = unhexify( add_str, "" );
18238 
18239  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
18240  if( 0 == 0 )
18241  {
18242  fct_chk( 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 );
18243  hexify( dst_str, output, pt_len );
18244  hexify( tag_str, tag_output, tag_len );
18245 
18246  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
18247  fct_chk( strcmp( (char *) tag_str, "8c76eebda0f1fd57f05a62c5f93d" ) == 0 );
18248  }
18249  }
18250  FCT_TEST_END();
18251 
18252 
18253  FCT_TEST_BGN(gcm_nist_validation_aes_25612800104_0)
18254  {
18255  unsigned char key_str[128];
18256  unsigned char src_str[128];
18257  unsigned char dst_str[257];
18258  unsigned char iv_str[128];
18259  unsigned char add_str[128];
18260  unsigned char tag_str[128];
18261  unsigned char output[128];
18262  unsigned char tag_output[16];
18263  gcm_context ctx;
18264  unsigned int key_len;
18265  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
18266 
18267  memset(key_str, 0x00, 128);
18268  memset(src_str, 0x00, 128);
18269  memset(dst_str, 0x00, 257);
18270  memset(iv_str, 0x00, 128);
18271  memset(add_str, 0x00, 128);
18272  memset(tag_str, 0x00, 128);
18273  memset(output, 0x00, 128);
18274  memset(tag_output, 0x00, 16);
18275 
18276  key_len = unhexify( key_str, "61a612c76de551f794a146962d913f60fbd4431365b711217aaa4beaa115f726" );
18277  pt_len = unhexify( src_str, "" );
18278  iv_len = unhexify( iv_str, "2d25462c90ad9a21073729e5efc99957" );
18279  add_len = unhexify( add_str, "" );
18280 
18281  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
18282  if( 0 == 0 )
18283  {
18284  fct_chk( 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 );
18285  hexify( dst_str, output, pt_len );
18286  hexify( tag_str, tag_output, tag_len );
18287 
18288  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
18289  fct_chk( strcmp( (char *) tag_str, "e4d3b277dc9a107c0392ca1e5b" ) == 0 );
18290  }
18291  }
18292  FCT_TEST_END();
18293 
18294 
18295  FCT_TEST_BGN(gcm_nist_validation_aes_25612800104_1)
18296  {
18297  unsigned char key_str[128];
18298  unsigned char src_str[128];
18299  unsigned char dst_str[257];
18300  unsigned char iv_str[128];
18301  unsigned char add_str[128];
18302  unsigned char tag_str[128];
18303  unsigned char output[128];
18304  unsigned char tag_output[16];
18305  gcm_context ctx;
18306  unsigned int key_len;
18307  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
18308 
18309  memset(key_str, 0x00, 128);
18310  memset(src_str, 0x00, 128);
18311  memset(dst_str, 0x00, 257);
18312  memset(iv_str, 0x00, 128);
18313  memset(add_str, 0x00, 128);
18314  memset(tag_str, 0x00, 128);
18315  memset(output, 0x00, 128);
18316  memset(tag_output, 0x00, 16);
18317 
18318  key_len = unhexify( key_str, "4b233480239fabd2035a7c9207a8e1ab2da45a90a472b30848fe4b4757c628db" );
18319  pt_len = unhexify( src_str, "" );
18320  iv_len = unhexify( iv_str, "50d45096afd0571e171e1ab1ffb3720f" );
18321  add_len = unhexify( add_str, "" );
18322 
18323  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
18324  if( 0 == 0 )
18325  {
18326  fct_chk( 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 );
18327  hexify( dst_str, output, pt_len );
18328  hexify( tag_str, tag_output, tag_len );
18329 
18330  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
18331  fct_chk( strcmp( (char *) tag_str, "5393bc06b8c5ecef1264fd6084" ) == 0 );
18332  }
18333  }
18334  FCT_TEST_END();
18335 
18336 
18337  FCT_TEST_BGN(gcm_nist_validation_aes_25612800104_2)
18338  {
18339  unsigned char key_str[128];
18340  unsigned char src_str[128];
18341  unsigned char dst_str[257];
18342  unsigned char iv_str[128];
18343  unsigned char add_str[128];
18344  unsigned char tag_str[128];
18345  unsigned char output[128];
18346  unsigned char tag_output[16];
18347  gcm_context ctx;
18348  unsigned int key_len;
18349  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
18350 
18351  memset(key_str, 0x00, 128);
18352  memset(src_str, 0x00, 128);
18353  memset(dst_str, 0x00, 257);
18354  memset(iv_str, 0x00, 128);
18355  memset(add_str, 0x00, 128);
18356  memset(tag_str, 0x00, 128);
18357  memset(output, 0x00, 128);
18358  memset(tag_output, 0x00, 16);
18359 
18360  key_len = unhexify( key_str, "dc051ac63e6b051594158399291ed101a3efbb1701b98819c4835a4863734371" );
18361  pt_len = unhexify( src_str, "" );
18362  iv_len = unhexify( iv_str, "1f304d4d7f84ab560366215649b0a064" );
18363  add_len = unhexify( add_str, "" );
18364 
18365  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
18366  if( 0 == 0 )
18367  {
18368  fct_chk( 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 );
18369  hexify( dst_str, output, pt_len );
18370  hexify( tag_str, tag_output, tag_len );
18371 
18372  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
18373  fct_chk( strcmp( (char *) tag_str, "1081dda9e0a793916dc82f7848" ) == 0 );
18374  }
18375  }
18376  FCT_TEST_END();
18377 
18378 
18379  FCT_TEST_BGN(gcm_nist_validation_aes_2561280096_0)
18380  {
18381  unsigned char key_str[128];
18382  unsigned char src_str[128];
18383  unsigned char dst_str[257];
18384  unsigned char iv_str[128];
18385  unsigned char add_str[128];
18386  unsigned char tag_str[128];
18387  unsigned char output[128];
18388  unsigned char tag_output[16];
18389  gcm_context ctx;
18390  unsigned int key_len;
18391  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
18392 
18393  memset(key_str, 0x00, 128);
18394  memset(src_str, 0x00, 128);
18395  memset(dst_str, 0x00, 257);
18396  memset(iv_str, 0x00, 128);
18397  memset(add_str, 0x00, 128);
18398  memset(tag_str, 0x00, 128);
18399  memset(output, 0x00, 128);
18400  memset(tag_output, 0x00, 16);
18401 
18402  key_len = unhexify( key_str, "75f76df772af8e3019a4c1588a7d59925f80ce0d5647030f29548374e7bcc9e8" );
18403  pt_len = unhexify( src_str, "" );
18404  iv_len = unhexify( iv_str, "d407264e09fbc853b131c8a9f808f1de" );
18405  add_len = unhexify( add_str, "" );
18406 
18407  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
18408  if( 0 == 0 )
18409  {
18410  fct_chk( 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 );
18411  hexify( dst_str, output, pt_len );
18412  hexify( tag_str, tag_output, tag_len );
18413 
18414  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
18415  fct_chk( strcmp( (char *) tag_str, "d515522db52bb872a4d3f9d1" ) == 0 );
18416  }
18417  }
18418  FCT_TEST_END();
18419 
18420 
18421  FCT_TEST_BGN(gcm_nist_validation_aes_2561280096_1)
18422  {
18423  unsigned char key_str[128];
18424  unsigned char src_str[128];
18425  unsigned char dst_str[257];
18426  unsigned char iv_str[128];
18427  unsigned char add_str[128];
18428  unsigned char tag_str[128];
18429  unsigned char output[128];
18430  unsigned char tag_output[16];
18431  gcm_context ctx;
18432  unsigned int key_len;
18433  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
18434 
18435  memset(key_str, 0x00, 128);
18436  memset(src_str, 0x00, 128);
18437  memset(dst_str, 0x00, 257);
18438  memset(iv_str, 0x00, 128);
18439  memset(add_str, 0x00, 128);
18440  memset(tag_str, 0x00, 128);
18441  memset(output, 0x00, 128);
18442  memset(tag_output, 0x00, 16);
18443 
18444  key_len = unhexify( key_str, "608d7592c094322b31d4583a430986bdf6aa639cc4b4a0b3903e588b45c38d38" );
18445  pt_len = unhexify( src_str, "" );
18446  iv_len = unhexify( iv_str, "6a631952e4990ae6bdd51052eb407168" );
18447  add_len = unhexify( add_str, "" );
18448 
18449  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
18450  if( 0 == 0 )
18451  {
18452  fct_chk( 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 );
18453  hexify( dst_str, output, pt_len );
18454  hexify( tag_str, tag_output, tag_len );
18455 
18456  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
18457  fct_chk( strcmp( (char *) tag_str, "eb8851cfdd4fc841173c4985" ) == 0 );
18458  }
18459  }
18460  FCT_TEST_END();
18461 
18462 
18463  FCT_TEST_BGN(gcm_nist_validation_aes_2561280096_2)
18464  {
18465  unsigned char key_str[128];
18466  unsigned char src_str[128];
18467  unsigned char dst_str[257];
18468  unsigned char iv_str[128];
18469  unsigned char add_str[128];
18470  unsigned char tag_str[128];
18471  unsigned char output[128];
18472  unsigned char tag_output[16];
18473  gcm_context ctx;
18474  unsigned int key_len;
18475  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
18476 
18477  memset(key_str, 0x00, 128);
18478  memset(src_str, 0x00, 128);
18479  memset(dst_str, 0x00, 257);
18480  memset(iv_str, 0x00, 128);
18481  memset(add_str, 0x00, 128);
18482  memset(tag_str, 0x00, 128);
18483  memset(output, 0x00, 128);
18484  memset(tag_output, 0x00, 16);
18485 
18486  key_len = unhexify( key_str, "86a90631e5341e67dfa55e68b07522507b437fbab7f3e2e26cfc6e89ef9d2410" );
18487  pt_len = unhexify( src_str, "" );
18488  iv_len = unhexify( iv_str, "67763ee1890e4bb430ac3c0dbc2af997" );
18489  add_len = unhexify( add_str, "" );
18490 
18491  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
18492  if( 0 == 0 )
18493  {
18494  fct_chk( 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 );
18495  hexify( dst_str, output, pt_len );
18496  hexify( tag_str, tag_output, tag_len );
18497 
18498  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
18499  fct_chk( strcmp( (char *) tag_str, "c6d11901b53cf6b13ac03cc5" ) == 0 );
18500  }
18501  }
18502  FCT_TEST_END();
18503 
18504 
18505  FCT_TEST_BGN(gcm_nist_validation_aes_2561280064_0)
18506  {
18507  unsigned char key_str[128];
18508  unsigned char src_str[128];
18509  unsigned char dst_str[257];
18510  unsigned char iv_str[128];
18511  unsigned char add_str[128];
18512  unsigned char tag_str[128];
18513  unsigned char output[128];
18514  unsigned char tag_output[16];
18515  gcm_context ctx;
18516  unsigned int key_len;
18517  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
18518 
18519  memset(key_str, 0x00, 128);
18520  memset(src_str, 0x00, 128);
18521  memset(dst_str, 0x00, 257);
18522  memset(iv_str, 0x00, 128);
18523  memset(add_str, 0x00, 128);
18524  memset(tag_str, 0x00, 128);
18525  memset(output, 0x00, 128);
18526  memset(tag_output, 0x00, 16);
18527 
18528  key_len = unhexify( key_str, "b8d12783ba2548b499ea56e77491d2794057e05fd7af7da597241d91d832b33a" );
18529  pt_len = unhexify( src_str, "" );
18530  iv_len = unhexify( iv_str, "0365436099fe57b4c027c7e58182e0b9" );
18531  add_len = unhexify( add_str, "" );
18532 
18533  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
18534  if( 0 == 0 )
18535  {
18536  fct_chk( 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 );
18537  hexify( dst_str, output, pt_len );
18538  hexify( tag_str, tag_output, tag_len );
18539 
18540  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
18541  fct_chk( strcmp( (char *) tag_str, "41fc42d8c9999d8c" ) == 0 );
18542  }
18543  }
18544  FCT_TEST_END();
18545 
18546 
18547  FCT_TEST_BGN(gcm_nist_validation_aes_2561280064_1)
18548  {
18549  unsigned char key_str[128];
18550  unsigned char src_str[128];
18551  unsigned char dst_str[257];
18552  unsigned char iv_str[128];
18553  unsigned char add_str[128];
18554  unsigned char tag_str[128];
18555  unsigned char output[128];
18556  unsigned char tag_output[16];
18557  gcm_context ctx;
18558  unsigned int key_len;
18559  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
18560 
18561  memset(key_str, 0x00, 128);
18562  memset(src_str, 0x00, 128);
18563  memset(dst_str, 0x00, 257);
18564  memset(iv_str, 0x00, 128);
18565  memset(add_str, 0x00, 128);
18566  memset(tag_str, 0x00, 128);
18567  memset(output, 0x00, 128);
18568  memset(tag_output, 0x00, 16);
18569 
18570  key_len = unhexify( key_str, "eb17c1bbcd356070ca58fc3899bb3751eea5b9f3663c8e51d32c1fc3060b7ac2" );
18571  pt_len = unhexify( src_str, "" );
18572  iv_len = unhexify( iv_str, "aca76b23575d4ec1a52a3d7214a4da2f" );
18573  add_len = unhexify( add_str, "" );
18574 
18575  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
18576  if( 0 == 0 )
18577  {
18578  fct_chk( 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 );
18579  hexify( dst_str, output, pt_len );
18580  hexify( tag_str, tag_output, tag_len );
18581 
18582  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
18583  fct_chk( strcmp( (char *) tag_str, "fbcfd13a2126b2af" ) == 0 );
18584  }
18585  }
18586  FCT_TEST_END();
18587 
18588 
18589  FCT_TEST_BGN(gcm_nist_validation_aes_2561280064_2)
18590  {
18591  unsigned char key_str[128];
18592  unsigned char src_str[128];
18593  unsigned char dst_str[257];
18594  unsigned char iv_str[128];
18595  unsigned char add_str[128];
18596  unsigned char tag_str[128];
18597  unsigned char output[128];
18598  unsigned char tag_output[16];
18599  gcm_context ctx;
18600  unsigned int key_len;
18601  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
18602 
18603  memset(key_str, 0x00, 128);
18604  memset(src_str, 0x00, 128);
18605  memset(dst_str, 0x00, 257);
18606  memset(iv_str, 0x00, 128);
18607  memset(add_str, 0x00, 128);
18608  memset(tag_str, 0x00, 128);
18609  memset(output, 0x00, 128);
18610  memset(tag_output, 0x00, 16);
18611 
18612  key_len = unhexify( key_str, "916aea7c3283aadb60908ec747bcf82364c1827ec29bedcbadacbb9b935221c1" );
18613  pt_len = unhexify( src_str, "" );
18614  iv_len = unhexify( iv_str, "e4aefe6f81872729ff5a3acf164922aa" );
18615  add_len = unhexify( add_str, "" );
18616 
18617  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
18618  if( 0 == 0 )
18619  {
18620  fct_chk( 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 );
18621  hexify( dst_str, output, pt_len );
18622  hexify( tag_str, tag_output, tag_len );
18623 
18624  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
18625  fct_chk( strcmp( (char *) tag_str, "2035a7ce818b1eb4" ) == 0 );
18626  }
18627  }
18628  FCT_TEST_END();
18629 
18630 
18631  FCT_TEST_BGN(gcm_nist_validation_aes_2561280032_0)
18632  {
18633  unsigned char key_str[128];
18634  unsigned char src_str[128];
18635  unsigned char dst_str[257];
18636  unsigned char iv_str[128];
18637  unsigned char add_str[128];
18638  unsigned char tag_str[128];
18639  unsigned char output[128];
18640  unsigned char tag_output[16];
18641  gcm_context ctx;
18642  unsigned int key_len;
18643  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
18644 
18645  memset(key_str, 0x00, 128);
18646  memset(src_str, 0x00, 128);
18647  memset(dst_str, 0x00, 257);
18648  memset(iv_str, 0x00, 128);
18649  memset(add_str, 0x00, 128);
18650  memset(tag_str, 0x00, 128);
18651  memset(output, 0x00, 128);
18652  memset(tag_output, 0x00, 16);
18653 
18654  key_len = unhexify( key_str, "47b4b7feb91582a2f6121d12fd465967352e58d9f3d1bf27478da39514510055" );
18655  pt_len = unhexify( src_str, "" );
18656  iv_len = unhexify( iv_str, "137bc31639a8a5d6b3c410151078c662" );
18657  add_len = unhexify( add_str, "" );
18658 
18659  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
18660  if( 0 == 0 )
18661  {
18662  fct_chk( 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 );
18663  hexify( dst_str, output, pt_len );
18664  hexify( tag_str, tag_output, tag_len );
18665 
18666  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
18667  fct_chk( strcmp( (char *) tag_str, "822955ba" ) == 0 );
18668  }
18669  }
18670  FCT_TEST_END();
18671 
18672 
18673  FCT_TEST_BGN(gcm_nist_validation_aes_2561280032_1)
18674  {
18675  unsigned char key_str[128];
18676  unsigned char src_str[128];
18677  unsigned char dst_str[257];
18678  unsigned char iv_str[128];
18679  unsigned char add_str[128];
18680  unsigned char tag_str[128];
18681  unsigned char output[128];
18682  unsigned char tag_output[16];
18683  gcm_context ctx;
18684  unsigned int key_len;
18685  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
18686 
18687  memset(key_str, 0x00, 128);
18688  memset(src_str, 0x00, 128);
18689  memset(dst_str, 0x00, 257);
18690  memset(iv_str, 0x00, 128);
18691  memset(add_str, 0x00, 128);
18692  memset(tag_str, 0x00, 128);
18693  memset(output, 0x00, 128);
18694  memset(tag_output, 0x00, 16);
18695 
18696  key_len = unhexify( key_str, "8955cddce65978bd64ef5228308317a1ba6a9fbb5a80cf5905f3aed03058b797" );
18697  pt_len = unhexify( src_str, "" );
18698  iv_len = unhexify( iv_str, "1370e72b56d97b9b9531ec02e2a5a937" );
18699  add_len = unhexify( add_str, "" );
18700 
18701  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
18702  if( 0 == 0 )
18703  {
18704  fct_chk( 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 );
18705  hexify( dst_str, output, pt_len );
18706  hexify( tag_str, tag_output, tag_len );
18707 
18708  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
18709  fct_chk( strcmp( (char *) tag_str, "b2f779e8" ) == 0 );
18710  }
18711  }
18712  FCT_TEST_END();
18713 
18714 
18715  FCT_TEST_BGN(gcm_nist_validation_aes_2561280032_2)
18716  {
18717  unsigned char key_str[128];
18718  unsigned char src_str[128];
18719  unsigned char dst_str[257];
18720  unsigned char iv_str[128];
18721  unsigned char add_str[128];
18722  unsigned char tag_str[128];
18723  unsigned char output[128];
18724  unsigned char tag_output[16];
18725  gcm_context ctx;
18726  unsigned int key_len;
18727  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
18728 
18729  memset(key_str, 0x00, 128);
18730  memset(src_str, 0x00, 128);
18731  memset(dst_str, 0x00, 257);
18732  memset(iv_str, 0x00, 128);
18733  memset(add_str, 0x00, 128);
18734  memset(tag_str, 0x00, 128);
18735  memset(output, 0x00, 128);
18736  memset(tag_output, 0x00, 16);
18737 
18738  key_len = unhexify( key_str, "7795d631f7e988bf53020d2b4607c04d1fab338a58b09484fe6659c500fd846b" );
18739  pt_len = unhexify( src_str, "" );
18740  iv_len = unhexify( iv_str, "f3f5cc7c1ec0b7b113442269e478ed81" );
18741  add_len = unhexify( add_str, "" );
18742 
18743  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
18744  if( 0 == 0 )
18745  {
18746  fct_chk( 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 );
18747  hexify( dst_str, output, pt_len );
18748  hexify( tag_str, tag_output, tag_len );
18749 
18750  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
18751  fct_chk( strcmp( (char *) tag_str, "e4e6dfcc" ) == 0 );
18752  }
18753  }
18754  FCT_TEST_END();
18755 
18756 
18757  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024128_0)
18758  {
18759  unsigned char key_str[128];
18760  unsigned char src_str[128];
18761  unsigned char dst_str[257];
18762  unsigned char iv_str[128];
18763  unsigned char add_str[128];
18764  unsigned char tag_str[128];
18765  unsigned char output[128];
18766  unsigned char tag_output[16];
18767  gcm_context ctx;
18768  unsigned int key_len;
18769  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
18770 
18771  memset(key_str, 0x00, 128);
18772  memset(src_str, 0x00, 128);
18773  memset(dst_str, 0x00, 257);
18774  memset(iv_str, 0x00, 128);
18775  memset(add_str, 0x00, 128);
18776  memset(tag_str, 0x00, 128);
18777  memset(output, 0x00, 128);
18778  memset(tag_output, 0x00, 16);
18779 
18780  key_len = unhexify( key_str, "f9aab5d2ea01b9dc35c728ae24e07c54e6d1452e49d9644776f65878199bc5e4" );
18781  pt_len = unhexify( src_str, "" );
18782  iv_len = unhexify( iv_str, "96ec2252e51ebfb731b680729be73297" );
18783  add_len = unhexify( add_str, "983a102a67359f4eecac465b0d65908a487c98c593be89494a39b721728edc991726e1fba49607eed1f8ba75ae9ab82a1a95b65ebdf48d7ee3c4a2b56832f21a483d48c8400dea71537f4c459d1cfcf9d2cc97b32eb7c5146cbf44d7e5ac779e9be0ae758eafff2138d4c5370b8cb62d70ebb713dfd2fd7772fa250590609844" );
18784 
18785  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
18786  if( 0 == 0 )
18787  {
18788  fct_chk( 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 );
18789  hexify( dst_str, output, pt_len );
18790  hexify( tag_str, tag_output, tag_len );
18791 
18792  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
18793  fct_chk( strcmp( (char *) tag_str, "766b6dcf491a5836ef90f47ac6ab91ec" ) == 0 );
18794  }
18795  }
18796  FCT_TEST_END();
18797 
18798 
18799  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024128_1)
18800  {
18801  unsigned char key_str[128];
18802  unsigned char src_str[128];
18803  unsigned char dst_str[257];
18804  unsigned char iv_str[128];
18805  unsigned char add_str[128];
18806  unsigned char tag_str[128];
18807  unsigned char output[128];
18808  unsigned char tag_output[16];
18809  gcm_context ctx;
18810  unsigned int key_len;
18811  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
18812 
18813  memset(key_str, 0x00, 128);
18814  memset(src_str, 0x00, 128);
18815  memset(dst_str, 0x00, 257);
18816  memset(iv_str, 0x00, 128);
18817  memset(add_str, 0x00, 128);
18818  memset(tag_str, 0x00, 128);
18819  memset(output, 0x00, 128);
18820  memset(tag_output, 0x00, 16);
18821 
18822  key_len = unhexify( key_str, "d713b33af57762f933d6abfecbac7fb0dc1e545dd7c01638b0e1510af719769a" );
18823  pt_len = unhexify( src_str, "" );
18824  iv_len = unhexify( iv_str, "5da52833b6fc73c0e4b1403e1c3c10a2" );
18825  add_len = unhexify( add_str, "374dd4ebdfe74450abe26d9e53556092abe36f47bbb574e8184b4e0f64d16d99eaf0666fa3d9b0723c868cf6f77e641c47ac60f0ee13dd0c1046ef202e652b652f4b5de611989223b0acf1ead9b3537bba17ccf865a4a0fda1a20b00e3c828b9726bbd0b0e92fa8ed970eed50c885e6d69604278375af7b9ae47fbce4fed7d03" );
18826 
18827  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
18828  if( 0 == 0 )
18829  {
18830  fct_chk( 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 );
18831  hexify( dst_str, output, pt_len );
18832  hexify( tag_str, tag_output, tag_len );
18833 
18834  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
18835  fct_chk( strcmp( (char *) tag_str, "6151956162348eb397e2b1077b61ee25" ) == 0 );
18836  }
18837  }
18838  FCT_TEST_END();
18839 
18840 
18841  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024128_2)
18842  {
18843  unsigned char key_str[128];
18844  unsigned char src_str[128];
18845  unsigned char dst_str[257];
18846  unsigned char iv_str[128];
18847  unsigned char add_str[128];
18848  unsigned char tag_str[128];
18849  unsigned char output[128];
18850  unsigned char tag_output[16];
18851  gcm_context ctx;
18852  unsigned int key_len;
18853  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
18854 
18855  memset(key_str, 0x00, 128);
18856  memset(src_str, 0x00, 128);
18857  memset(dst_str, 0x00, 257);
18858  memset(iv_str, 0x00, 128);
18859  memset(add_str, 0x00, 128);
18860  memset(tag_str, 0x00, 128);
18861  memset(output, 0x00, 128);
18862  memset(tag_output, 0x00, 16);
18863 
18864  key_len = unhexify( key_str, "77a1e4ddfbe77a0ca3513fc654e7c41609cb974a306234add2fc77770a4a9e16" );
18865  pt_len = unhexify( src_str, "" );
18866  iv_len = unhexify( iv_str, "30d6ec88433a6bdd7786dc4d3693bde8" );
18867  add_len = unhexify( add_str, "69beef4dbdcdf4e8eeb9bf8ae6caff8433949afc2ffef777e2b71a99fde974797dfed2254b959430ecc48db72cee16c7ef41fa4165ce4a0636ad4e40875d193a3c6c56a6bca5a55bce3a057a2d3ac223eba76e30e7415f00e6a7643fda9a1bf4d4b96ce597ffe30c3f780dd767cb5681bb7a3fd11668380e272bdd70e66f18b6" );
18868 
18869  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
18870  if( 0 == 0 )
18871  {
18872  fct_chk( 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 );
18873  hexify( dst_str, output, pt_len );
18874  hexify( tag_str, tag_output, tag_len );
18875 
18876  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
18877  fct_chk( strcmp( (char *) tag_str, "d4a3c91e02a94fd183cb0c9de241c7d1" ) == 0 );
18878  }
18879  }
18880  FCT_TEST_END();
18881 
18882 
18883  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024120_0)
18884  {
18885  unsigned char key_str[128];
18886  unsigned char src_str[128];
18887  unsigned char dst_str[257];
18888  unsigned char iv_str[128];
18889  unsigned char add_str[128];
18890  unsigned char tag_str[128];
18891  unsigned char output[128];
18892  unsigned char tag_output[16];
18893  gcm_context ctx;
18894  unsigned int key_len;
18895  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
18896 
18897  memset(key_str, 0x00, 128);
18898  memset(src_str, 0x00, 128);
18899  memset(dst_str, 0x00, 257);
18900  memset(iv_str, 0x00, 128);
18901  memset(add_str, 0x00, 128);
18902  memset(tag_str, 0x00, 128);
18903  memset(output, 0x00, 128);
18904  memset(tag_output, 0x00, 16);
18905 
18906  key_len = unhexify( key_str, "303930b8ba50f65a50c33eccd879990d5d87b569e46f1a59db54371fcbda7fd6" );
18907  pt_len = unhexify( src_str, "" );
18908  iv_len = unhexify( iv_str, "2b2b28d8a5c94b6f7ee50e130268a078" );
18909  add_len = unhexify( add_str, "c2ff20441d96bae4d2d760dcbae636ca7e01d263c28db5faed201bdb39bcacc82ebdc943968aa0accd920d258709c270df65d46d3f09910d2ea701c018ec9a68af7fb3d76a9b360de266b2ac05e95c538417fec59cec1f07d47c03511751978baebd2e0e4f7483f7351b5e61c2a60138c97b751f6a8c8323970f6be05357aeb2" );
18910 
18911  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
18912  if( 0 == 0 )
18913  {
18914  fct_chk( 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 );
18915  hexify( dst_str, output, pt_len );
18916  hexify( tag_str, tag_output, tag_len );
18917 
18918  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
18919  fct_chk( strcmp( (char *) tag_str, "b597491dfe599eaa414b71c54063ed" ) == 0 );
18920  }
18921  }
18922  FCT_TEST_END();
18923 
18924 
18925  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024120_1)
18926  {
18927  unsigned char key_str[128];
18928  unsigned char src_str[128];
18929  unsigned char dst_str[257];
18930  unsigned char iv_str[128];
18931  unsigned char add_str[128];
18932  unsigned char tag_str[128];
18933  unsigned char output[128];
18934  unsigned char tag_output[16];
18935  gcm_context ctx;
18936  unsigned int key_len;
18937  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
18938 
18939  memset(key_str, 0x00, 128);
18940  memset(src_str, 0x00, 128);
18941  memset(dst_str, 0x00, 257);
18942  memset(iv_str, 0x00, 128);
18943  memset(add_str, 0x00, 128);
18944  memset(tag_str, 0x00, 128);
18945  memset(output, 0x00, 128);
18946  memset(tag_output, 0x00, 16);
18947 
18948  key_len = unhexify( key_str, "1e3b94f5883239c45ed4df6930c453c9ffd70b1c6cee845bbcfe6f29a762713b" );
18949  pt_len = unhexify( src_str, "" );
18950  iv_len = unhexify( iv_str, "61155f27c629dcb6cf49b192b0b505d6" );
18951  add_len = unhexify( add_str, "5b7482e9b638cb23dba327cc08309bdb40d38100a407c36091457971bad3ab263efa8f36d8d04fdc4dea38369efe7ae5e8b9c190dad2688bda857e48dfd400748a359cfe1b2a3f3d5be7ae0f64a3f44738a7c7cf840a2e6b90ec43f8c9322c60dd91e4f27fa12197fab7ed092990879e964ce014f6be2a1ef70bfefe880a75d5" );
18952 
18953  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
18954  if( 0 == 0 )
18955  {
18956  fct_chk( 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 );
18957  hexify( dst_str, output, pt_len );
18958  hexify( tag_str, tag_output, tag_len );
18959 
18960  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
18961  fct_chk( strcmp( (char *) tag_str, "7003f04d6b6d9dc794be27b9c5d5e5" ) == 0 );
18962  }
18963  }
18964  FCT_TEST_END();
18965 
18966 
18967  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024120_2)
18968  {
18969  unsigned char key_str[128];
18970  unsigned char src_str[128];
18971  unsigned char dst_str[257];
18972  unsigned char iv_str[128];
18973  unsigned char add_str[128];
18974  unsigned char tag_str[128];
18975  unsigned char output[128];
18976  unsigned char tag_output[16];
18977  gcm_context ctx;
18978  unsigned int key_len;
18979  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
18980 
18981  memset(key_str, 0x00, 128);
18982  memset(src_str, 0x00, 128);
18983  memset(dst_str, 0x00, 257);
18984  memset(iv_str, 0x00, 128);
18985  memset(add_str, 0x00, 128);
18986  memset(tag_str, 0x00, 128);
18987  memset(output, 0x00, 128);
18988  memset(tag_output, 0x00, 16);
18989 
18990  key_len = unhexify( key_str, "9080effb27994ef831689da10600e7a219db93d690647457702c217b08057eb3" );
18991  pt_len = unhexify( src_str, "" );
18992  iv_len = unhexify( iv_str, "f45514696ff5ee1e6e5797f7bcff05c0" );
18993  add_len = unhexify( add_str, "5251f800f7c7106c008c0122971f0070d6325b7343a82fc35f3853d25c878215e7a929bf63cc8996f0ffb817174a351b71d691f23021f58777f962fd1d45ff849e4612e3304ae3303ace7b8ca1a43f54e662071c183a1695873f5567397587283433d1e76cec1103ee76f8e0472814424b8981caea1f624131fb7353afcd2cd2" );
18994 
18995  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
18996  if( 0 == 0 )
18997  {
18998  fct_chk( 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 );
18999  hexify( dst_str, output, pt_len );
19000  hexify( tag_str, tag_output, tag_len );
19001 
19002  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
19003  fct_chk( strcmp( (char *) tag_str, "cfb6d9bccf0378fabae08fd230edc1" ) == 0 );
19004  }
19005  }
19006  FCT_TEST_END();
19007 
19008 
19009  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024112_0)
19010  {
19011  unsigned char key_str[128];
19012  unsigned char src_str[128];
19013  unsigned char dst_str[257];
19014  unsigned char iv_str[128];
19015  unsigned char add_str[128];
19016  unsigned char tag_str[128];
19017  unsigned char output[128];
19018  unsigned char tag_output[16];
19019  gcm_context ctx;
19020  unsigned int key_len;
19021  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
19022 
19023  memset(key_str, 0x00, 128);
19024  memset(src_str, 0x00, 128);
19025  memset(dst_str, 0x00, 257);
19026  memset(iv_str, 0x00, 128);
19027  memset(add_str, 0x00, 128);
19028  memset(tag_str, 0x00, 128);
19029  memset(output, 0x00, 128);
19030  memset(tag_output, 0x00, 16);
19031 
19032  key_len = unhexify( key_str, "8c291f0ad78908377039f59591d0e305bdc915a3e5bfb0b4364e1af9946339c0" );
19033  pt_len = unhexify( src_str, "" );
19034  iv_len = unhexify( iv_str, "a9830d5663418add5f3c0b1140967b06" );
19035  add_len = unhexify( add_str, "e43c04e1f7304c1d83235120e24429af8dc29dc94399474d06047fd09d61ddc682684776c81ef08d97f06db6e4cfb02daea728ec6ac637e1ecfdb5d48f0440d8d8ffee43146f58a396e5151701b0d61d5f713b2816d3f56d6ee19f038ccc36493d9ad1809a49aa5798e181679d82cba22b0b4e064f56af5ec05c012b132bda87" );
19036 
19037  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
19038  if( 0 == 0 )
19039  {
19040  fct_chk( 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 );
19041  hexify( dst_str, output, pt_len );
19042  hexify( tag_str, tag_output, tag_len );
19043 
19044  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
19045  fct_chk( strcmp( (char *) tag_str, "275480889efe55c4b9a08cef720b" ) == 0 );
19046  }
19047  }
19048  FCT_TEST_END();
19049 
19050 
19051  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024112_1)
19052  {
19053  unsigned char key_str[128];
19054  unsigned char src_str[128];
19055  unsigned char dst_str[257];
19056  unsigned char iv_str[128];
19057  unsigned char add_str[128];
19058  unsigned char tag_str[128];
19059  unsigned char output[128];
19060  unsigned char tag_output[16];
19061  gcm_context ctx;
19062  unsigned int key_len;
19063  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
19064 
19065  memset(key_str, 0x00, 128);
19066  memset(src_str, 0x00, 128);
19067  memset(dst_str, 0x00, 257);
19068  memset(iv_str, 0x00, 128);
19069  memset(add_str, 0x00, 128);
19070  memset(tag_str, 0x00, 128);
19071  memset(output, 0x00, 128);
19072  memset(tag_output, 0x00, 16);
19073 
19074  key_len = unhexify( key_str, "96c77c11a3336a41b61ffdc1724a80735bbe91dd4c741fdbcc36e21c53335852" );
19075  pt_len = unhexify( src_str, "" );
19076  iv_len = unhexify( iv_str, "655502d70119326405d8cc0a2c7a572c" );
19077  add_len = unhexify( add_str, "c01034fc6b7708128fbf4d6ffa4b4b280a1493b9e1dd07079f509479b365f55ae9290689f1c4bdfa439344e3abb17f3fd3d5e2f8b317517747714a82f0a9ace04938591d3ade6d6095491a440322d347e8634008cc4fd8add7c1c4764afdb2b098b3f5604e449e8049a46b6192647d19cf88fa5ed1abab7f313b4285560cba44" );
19078 
19079  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
19080  if( 0 == 0 )
19081  {
19082  fct_chk( 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 );
19083  hexify( dst_str, output, pt_len );
19084  hexify( tag_str, tag_output, tag_len );
19085 
19086  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
19087  fct_chk( strcmp( (char *) tag_str, "b4d581464c4bb23433699c418ddc" ) == 0 );
19088  }
19089  }
19090  FCT_TEST_END();
19091 
19092 
19093  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024112_2)
19094  {
19095  unsigned char key_str[128];
19096  unsigned char src_str[128];
19097  unsigned char dst_str[257];
19098  unsigned char iv_str[128];
19099  unsigned char add_str[128];
19100  unsigned char tag_str[128];
19101  unsigned char output[128];
19102  unsigned char tag_output[16];
19103  gcm_context ctx;
19104  unsigned int key_len;
19105  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
19106 
19107  memset(key_str, 0x00, 128);
19108  memset(src_str, 0x00, 128);
19109  memset(dst_str, 0x00, 257);
19110  memset(iv_str, 0x00, 128);
19111  memset(add_str, 0x00, 128);
19112  memset(tag_str, 0x00, 128);
19113  memset(output, 0x00, 128);
19114  memset(tag_output, 0x00, 16);
19115 
19116  key_len = unhexify( key_str, "e2a3957393669278f052ff2df4e658e17f2fe32811e32b3f62a31a3938930764" );
19117  pt_len = unhexify( src_str, "" );
19118  iv_len = unhexify( iv_str, "a6f5a1f1f1ac77a1cb010d2dd4325cbe" );
19119  add_len = unhexify( add_str, "ce9c268429ca9c35c958ca3e81935ec60166aea0be15975baf69103251efafd54cbcc0bed76a8b44a5b947199cd3c2dee6878dd14a5a491a4a3d45788405d0129354e59c047b5367f1158bcf4e066a276951d2586bafc3c11f8a982ca7c3ba4677a938498bd51171552ea032fe1bd85cfeaeb87e87168f7a28e979b08358f841" );
19120 
19121  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
19122  if( 0 == 0 )
19123  {
19124  fct_chk( 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 );
19125  hexify( dst_str, output, pt_len );
19126  hexify( tag_str, tag_output, tag_len );
19127 
19128  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
19129  fct_chk( strcmp( (char *) tag_str, "cd5986df8e9761d52cb578e96b1b" ) == 0 );
19130  }
19131  }
19132  FCT_TEST_END();
19133 
19134 
19135  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024104_0)
19136  {
19137  unsigned char key_str[128];
19138  unsigned char src_str[128];
19139  unsigned char dst_str[257];
19140  unsigned char iv_str[128];
19141  unsigned char add_str[128];
19142  unsigned char tag_str[128];
19143  unsigned char output[128];
19144  unsigned char tag_output[16];
19145  gcm_context ctx;
19146  unsigned int key_len;
19147  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
19148 
19149  memset(key_str, 0x00, 128);
19150  memset(src_str, 0x00, 128);
19151  memset(dst_str, 0x00, 257);
19152  memset(iv_str, 0x00, 128);
19153  memset(add_str, 0x00, 128);
19154  memset(tag_str, 0x00, 128);
19155  memset(output, 0x00, 128);
19156  memset(tag_output, 0x00, 16);
19157 
19158  key_len = unhexify( key_str, "2b17652f7f04073afe9d9eb8b2615c7550968b9776b139fcc4f9b0300912cbdb" );
19159  pt_len = unhexify( src_str, "" );
19160  iv_len = unhexify( iv_str, "9a8ac23ea74b292b7386138666a0fb60" );
19161  add_len = unhexify( add_str, "2732107241e6136f1dd28d233373079d75d6ac13828ae7afc751b6f9c57e77268c52ae91f4ab3016af2764597994573cd6b41f72e21b60ffbb3aafc9487ac19d0ffe8db2ae2c7505ae5963b032d1ee1bffb4c5bd88bb0c9a350ba26ee3eb8dc0a157955333e4f28c5ec7349c39229dff9f440da72909f2870aea873a76545ee8" );
19162 
19163  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
19164  if( 0 == 0 )
19165  {
19166  fct_chk( 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 );
19167  hexify( dst_str, output, pt_len );
19168  hexify( tag_str, tag_output, tag_len );
19169 
19170  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
19171  fct_chk( strcmp( (char *) tag_str, "f7b94229439088142619a1a6bc" ) == 0 );
19172  }
19173  }
19174  FCT_TEST_END();
19175 
19176 
19177  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024104_1)
19178  {
19179  unsigned char key_str[128];
19180  unsigned char src_str[128];
19181  unsigned char dst_str[257];
19182  unsigned char iv_str[128];
19183  unsigned char add_str[128];
19184  unsigned char tag_str[128];
19185  unsigned char output[128];
19186  unsigned char tag_output[16];
19187  gcm_context ctx;
19188  unsigned int key_len;
19189  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
19190 
19191  memset(key_str, 0x00, 128);
19192  memset(src_str, 0x00, 128);
19193  memset(dst_str, 0x00, 257);
19194  memset(iv_str, 0x00, 128);
19195  memset(add_str, 0x00, 128);
19196  memset(tag_str, 0x00, 128);
19197  memset(output, 0x00, 128);
19198  memset(tag_output, 0x00, 16);
19199 
19200  key_len = unhexify( key_str, "16fe502e20d6473ed9a27569b63a768ecd428738904cf0b337df510775804619" );
19201  pt_len = unhexify( src_str, "" );
19202  iv_len = unhexify( iv_str, "431a8d78b91414737e7c6188328a6d37" );
19203  add_len = unhexify( add_str, "934bcacbac10ea4ff6ee94b17bd7379b88489fbf123bf496c78c9b6b02ee97dd62eedd05b8f44f4912764920129e711701628991a0009ebc7017a1a19b177ec9bc3b0f280eeefadfa310708dfe214428a184147b4523e66f2d62630d4a12fd3e366d27c3b7d1566553c9b434ed193db083160da1f241de190bcbd36f435e30f4" );
19204 
19205  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
19206  if( 0 == 0 )
19207  {
19208  fct_chk( 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 );
19209  hexify( dst_str, output, pt_len );
19210  hexify( tag_str, tag_output, tag_len );
19211 
19212  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
19213  fct_chk( strcmp( (char *) tag_str, "1dd3e6d610f359cc4e98d36244" ) == 0 );
19214  }
19215  }
19216  FCT_TEST_END();
19217 
19218 
19219  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024104_2)
19220  {
19221  unsigned char key_str[128];
19222  unsigned char src_str[128];
19223  unsigned char dst_str[257];
19224  unsigned char iv_str[128];
19225  unsigned char add_str[128];
19226  unsigned char tag_str[128];
19227  unsigned char output[128];
19228  unsigned char tag_output[16];
19229  gcm_context ctx;
19230  unsigned int key_len;
19231  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
19232 
19233  memset(key_str, 0x00, 128);
19234  memset(src_str, 0x00, 128);
19235  memset(dst_str, 0x00, 257);
19236  memset(iv_str, 0x00, 128);
19237  memset(add_str, 0x00, 128);
19238  memset(tag_str, 0x00, 128);
19239  memset(output, 0x00, 128);
19240  memset(tag_output, 0x00, 16);
19241 
19242  key_len = unhexify( key_str, "ccc545fd330cf17e27d75582db28807ec972b897f812d6ed4726d2a18daac76a" );
19243  pt_len = unhexify( src_str, "" );
19244  iv_len = unhexify( iv_str, "caf2f56584a59c42a51fdbfe4ad78f3c" );
19245  add_len = unhexify( add_str, "e85ae6b27778893f36f130694af0b40f62a05aa386b30fc415e292761cab36fdc39bf5687a513e25ed149414f059e706d8a719b7165044fcbd48c773eae546380b8e667b56824e23685173ad9015a9449bc1cd0b767981efe09da43a07bf1aeee08ba05d387b8a00199e18c874fb3a91f77ba448c3bff971593f94747fce9cbd" );
19246 
19247  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
19248  if( 0 == 0 )
19249  {
19250  fct_chk( 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 );
19251  hexify( dst_str, output, pt_len );
19252  hexify( tag_str, tag_output, tag_len );
19253 
19254  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
19255  fct_chk( strcmp( (char *) tag_str, "5cf5c7ca6fbfee63854f3bcd15" ) == 0 );
19256  }
19257  }
19258  FCT_TEST_END();
19259 
19260 
19261  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102496_0)
19262  {
19263  unsigned char key_str[128];
19264  unsigned char src_str[128];
19265  unsigned char dst_str[257];
19266  unsigned char iv_str[128];
19267  unsigned char add_str[128];
19268  unsigned char tag_str[128];
19269  unsigned char output[128];
19270  unsigned char tag_output[16];
19271  gcm_context ctx;
19272  unsigned int key_len;
19273  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
19274 
19275  memset(key_str, 0x00, 128);
19276  memset(src_str, 0x00, 128);
19277  memset(dst_str, 0x00, 257);
19278  memset(iv_str, 0x00, 128);
19279  memset(add_str, 0x00, 128);
19280  memset(tag_str, 0x00, 128);
19281  memset(output, 0x00, 128);
19282  memset(tag_output, 0x00, 16);
19283 
19284  key_len = unhexify( key_str, "8340d604770c778ee83d0fdd5703b1fb304c3bffeb6f4c65e2dd0e12c19bddcc" );
19285  pt_len = unhexify( src_str, "" );
19286  iv_len = unhexify( iv_str, "c0a580465b1b2e8344f795a6578a5151" );
19287  add_len = unhexify( add_str, "799f228962ef87865dfcfa0addde7366de2e4aa78029dbc8d57d7e50fa7c74343458df3465103556a3bfc5ce217fbbb5b2835c9f76b70240b40fd605bcfa6b790d5985a8ba54354e0625263c628e8746c451504fc58a179f90f77f2b293d8dbf5582b031082025c806e60143da9ebb6133ac8367376d0572b32569ee799540ae" );
19288 
19289  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
19290  if( 0 == 0 )
19291  {
19292  fct_chk( 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 );
19293  hexify( dst_str, output, pt_len );
19294  hexify( tag_str, tag_output, tag_len );
19295 
19296  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
19297  fct_chk( strcmp( (char *) tag_str, "318f56bd0f3832d043ef700a" ) == 0 );
19298  }
19299  }
19300  FCT_TEST_END();
19301 
19302 
19303  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102496_1)
19304  {
19305  unsigned char key_str[128];
19306  unsigned char src_str[128];
19307  unsigned char dst_str[257];
19308  unsigned char iv_str[128];
19309  unsigned char add_str[128];
19310  unsigned char tag_str[128];
19311  unsigned char output[128];
19312  unsigned char tag_output[16];
19313  gcm_context ctx;
19314  unsigned int key_len;
19315  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
19316 
19317  memset(key_str, 0x00, 128);
19318  memset(src_str, 0x00, 128);
19319  memset(dst_str, 0x00, 257);
19320  memset(iv_str, 0x00, 128);
19321  memset(add_str, 0x00, 128);
19322  memset(tag_str, 0x00, 128);
19323  memset(output, 0x00, 128);
19324  memset(tag_output, 0x00, 16);
19325 
19326  key_len = unhexify( key_str, "74de45262fe09e12c9ee7100030352112a6532d1874cc6792b4da6950677eb2a" );
19327  pt_len = unhexify( src_str, "" );
19328  iv_len = unhexify( iv_str, "9f7fc7367f9afdb67fd1afffac058e2a" );
19329  add_len = unhexify( add_str, "289ac6f5beecbbcbde5cb3b0fdf4a27ba237fca33719f774ed33a5fd35d7e49f76d3e88c53fd35561655c35469f3eefb5b2f776ff2799aab346522d3f003154e53f4ef075f016aaa500c76870e6659a5f9af197c9a8f5b9e0416ed894e868463cc4386a7442bb0c089a9ab84981313c01fec4fc0ba35829b3cf49c6447f56a4b" );
19330 
19331  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
19332  if( 0 == 0 )
19333  {
19334  fct_chk( 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 );
19335  hexify( dst_str, output, pt_len );
19336  hexify( tag_str, tag_output, tag_len );
19337 
19338  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
19339  fct_chk( strcmp( (char *) tag_str, "bc1b8b94ff478d9e197551cd" ) == 0 );
19340  }
19341  }
19342  FCT_TEST_END();
19343 
19344 
19345  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102496_2)
19346  {
19347  unsigned char key_str[128];
19348  unsigned char src_str[128];
19349  unsigned char dst_str[257];
19350  unsigned char iv_str[128];
19351  unsigned char add_str[128];
19352  unsigned char tag_str[128];
19353  unsigned char output[128];
19354  unsigned char tag_output[16];
19355  gcm_context ctx;
19356  unsigned int key_len;
19357  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
19358 
19359  memset(key_str, 0x00, 128);
19360  memset(src_str, 0x00, 128);
19361  memset(dst_str, 0x00, 257);
19362  memset(iv_str, 0x00, 128);
19363  memset(add_str, 0x00, 128);
19364  memset(tag_str, 0x00, 128);
19365  memset(output, 0x00, 128);
19366  memset(tag_output, 0x00, 16);
19367 
19368  key_len = unhexify( key_str, "441ec8afce630805d0ce98b200e59f5656a5ce19e5ef58241e6ef16cac7646b9" );
19369  pt_len = unhexify( src_str, "" );
19370  iv_len = unhexify( iv_str, "a1cbeffaf55708c375dcfeb496b21f4e" );
19371  add_len = unhexify( add_str, "5a6ba5d3f5a7a4b317c6c716564c648f0e6bc6b0f9a4c27affca6d5af04b7b13d989b7a2cb42ce8eedd710be70c04c0e40977ca1c2f536aa70677038e737064fb0e23d3dd48bc00ebdd7f988f57141e164e3c18db81e9565a62e28c73770666ff3bfd725eebd98946fed02f31d500b0b7ab4dafeb14e8cc85731a87f50d95fae" );
19372 
19373  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
19374  if( 0 == 0 )
19375  {
19376  fct_chk( 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 );
19377  hexify( dst_str, output, pt_len );
19378  hexify( tag_str, tag_output, tag_len );
19379 
19380  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
19381  fct_chk( strcmp( (char *) tag_str, "aa4bb3d555dabaaeb4d81fcd" ) == 0 );
19382  }
19383  }
19384  FCT_TEST_END();
19385 
19386 
19387  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102464_0)
19388  {
19389  unsigned char key_str[128];
19390  unsigned char src_str[128];
19391  unsigned char dst_str[257];
19392  unsigned char iv_str[128];
19393  unsigned char add_str[128];
19394  unsigned char tag_str[128];
19395  unsigned char output[128];
19396  unsigned char tag_output[16];
19397  gcm_context ctx;
19398  unsigned int key_len;
19399  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
19400 
19401  memset(key_str, 0x00, 128);
19402  memset(src_str, 0x00, 128);
19403  memset(dst_str, 0x00, 257);
19404  memset(iv_str, 0x00, 128);
19405  memset(add_str, 0x00, 128);
19406  memset(tag_str, 0x00, 128);
19407  memset(output, 0x00, 128);
19408  memset(tag_output, 0x00, 16);
19409 
19410  key_len = unhexify( key_str, "d643111c973ffb7f56bfbf394eedac54be2c556963b181cf661ba144f7893a62" );
19411  pt_len = unhexify( src_str, "" );
19412  iv_len = unhexify( iv_str, "4575b00b9af2195a0cc75855d396e4e8" );
19413  add_len = unhexify( add_str, "b2c53efe59c84c651979bcc1bc76b0bbf5e52b5c3115849abdbc469a063e2b1699bd292e5fcb3476e849c9edbe6ea14c2ab948ed7d21a21f69406621d3d412b043eaf813be722d92739a33a361ed8081c0eb00400c3c7d4e329f5ba4f7b75d534500f42f178048cf2e95b768ffed79c350f2ff72cb355abdb30af0a1363c0b4a" );
19414 
19415  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
19416  if( 0 == 0 )
19417  {
19418  fct_chk( 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 );
19419  hexify( dst_str, output, pt_len );
19420  hexify( tag_str, tag_output, tag_len );
19421 
19422  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
19423  fct_chk( strcmp( (char *) tag_str, "9d1d182630d7aeee" ) == 0 );
19424  }
19425  }
19426  FCT_TEST_END();
19427 
19428 
19429  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102464_1)
19430  {
19431  unsigned char key_str[128];
19432  unsigned char src_str[128];
19433  unsigned char dst_str[257];
19434  unsigned char iv_str[128];
19435  unsigned char add_str[128];
19436  unsigned char tag_str[128];
19437  unsigned char output[128];
19438  unsigned char tag_output[16];
19439  gcm_context ctx;
19440  unsigned int key_len;
19441  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
19442 
19443  memset(key_str, 0x00, 128);
19444  memset(src_str, 0x00, 128);
19445  memset(dst_str, 0x00, 257);
19446  memset(iv_str, 0x00, 128);
19447  memset(add_str, 0x00, 128);
19448  memset(tag_str, 0x00, 128);
19449  memset(output, 0x00, 128);
19450  memset(tag_output, 0x00, 16);
19451 
19452  key_len = unhexify( key_str, "91301ee0ca694ae6971ee705f53c7ec467f4c88257d6466f6f8159a8970384b9" );
19453  pt_len = unhexify( src_str, "" );
19454  iv_len = unhexify( iv_str, "345fb57e88124a414828730a85f57871" );
19455  add_len = unhexify( add_str, "c13623824a204385f352388098f5e2db23426f00a73c60c1bf1047ce2c7cdf7f7cc8475781fe7075d1226ad18871e12f0156f35e6ce7032efe3bade1c807f9eedc720fff7a27a2f4690f904be9c99b54a65509eab60e97c4283596eeefa2b2517e95de7620382e3f780efa1dbf5d3908373adfe784a4faf298681e171bade4b3" );
19456 
19457  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
19458  if( 0 == 0 )
19459  {
19460  fct_chk( 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 );
19461  hexify( dst_str, output, pt_len );
19462  hexify( tag_str, tag_output, tag_len );
19463 
19464  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
19465  fct_chk( strcmp( (char *) tag_str, "325d08c5b96068c1" ) == 0 );
19466  }
19467  }
19468  FCT_TEST_END();
19469 
19470 
19471  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102464_2)
19472  {
19473  unsigned char key_str[128];
19474  unsigned char src_str[128];
19475  unsigned char dst_str[257];
19476  unsigned char iv_str[128];
19477  unsigned char add_str[128];
19478  unsigned char tag_str[128];
19479  unsigned char output[128];
19480  unsigned char tag_output[16];
19481  gcm_context ctx;
19482  unsigned int key_len;
19483  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
19484 
19485  memset(key_str, 0x00, 128);
19486  memset(src_str, 0x00, 128);
19487  memset(dst_str, 0x00, 257);
19488  memset(iv_str, 0x00, 128);
19489  memset(add_str, 0x00, 128);
19490  memset(tag_str, 0x00, 128);
19491  memset(output, 0x00, 128);
19492  memset(tag_output, 0x00, 16);
19493 
19494  key_len = unhexify( key_str, "b6ba5c11daed7f868da9bfd7754d555a147a1ffd98c940c1cd5d136680e05c10" );
19495  pt_len = unhexify( src_str, "" );
19496  iv_len = unhexify( iv_str, "b0c92b79d78547496d770678e1ce1552" );
19497  add_len = unhexify( add_str, "5b1ac8ff687f6fd2429dc90a8913f5826d143a16a372cca787845cea86d9b4778708bc0aa538f98e1031850f7c1d97fb64fe29adce6e1d51ca7f5203fc0358fe0bc54347e777dddfe04e3d7a66a1d1e2bdb8b8929e2100daf073845db5dc0b243819754c4c08f4fc3631d1cbd79ac7604746d677ff035930fcd6bd652e7864db" );
19498 
19499  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
19500  if( 0 == 0 )
19501  {
19502  fct_chk( 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 );
19503  hexify( dst_str, output, pt_len );
19504  hexify( tag_str, tag_output, tag_len );
19505 
19506  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
19507  fct_chk( strcmp( (char *) tag_str, "b1819b6f2d788616" ) == 0 );
19508  }
19509  }
19510  FCT_TEST_END();
19511 
19512 
19513  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102432_0)
19514  {
19515  unsigned char key_str[128];
19516  unsigned char src_str[128];
19517  unsigned char dst_str[257];
19518  unsigned char iv_str[128];
19519  unsigned char add_str[128];
19520  unsigned char tag_str[128];
19521  unsigned char output[128];
19522  unsigned char tag_output[16];
19523  gcm_context ctx;
19524  unsigned int key_len;
19525  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
19526 
19527  memset(key_str, 0x00, 128);
19528  memset(src_str, 0x00, 128);
19529  memset(dst_str, 0x00, 257);
19530  memset(iv_str, 0x00, 128);
19531  memset(add_str, 0x00, 128);
19532  memset(tag_str, 0x00, 128);
19533  memset(output, 0x00, 128);
19534  memset(tag_output, 0x00, 16);
19535 
19536  key_len = unhexify( key_str, "5fcae1759209e784dae5a8278b267c414a03ce7c803df1db7815b2910d10ce19" );
19537  pt_len = unhexify( src_str, "" );
19538  iv_len = unhexify( iv_str, "24c5c349b3effebfd076c88a591b8301" );
19539  add_len = unhexify( add_str, "ca2778e39fffce7fbe8f912e69d55931848dd5ab0d1bd32e7b94af453251a47f5408ebacd7b50ddd1103fab1c72acc0a02f404c5661d8450746d781e2c0861b6974ade9ee2515da88b470f16d5f06007f35ce97cfc17fd015e438af39ca6127db240babe9c42ed5717715f14e72f0ef6ff4ce512de95a179e60d6393e73f216a" );
19540 
19541  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
19542  if( 0 == 0 )
19543  {
19544  fct_chk( 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 );
19545  hexify( dst_str, output, pt_len );
19546  hexify( tag_str, tag_output, tag_len );
19547 
19548  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
19549  fct_chk( strcmp( (char *) tag_str, "8e59f30b" ) == 0 );
19550  }
19551  }
19552  FCT_TEST_END();
19553 
19554 
19555  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102432_1)
19556  {
19557  unsigned char key_str[128];
19558  unsigned char src_str[128];
19559  unsigned char dst_str[257];
19560  unsigned char iv_str[128];
19561  unsigned char add_str[128];
19562  unsigned char tag_str[128];
19563  unsigned char output[128];
19564  unsigned char tag_output[16];
19565  gcm_context ctx;
19566  unsigned int key_len;
19567  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
19568 
19569  memset(key_str, 0x00, 128);
19570  memset(src_str, 0x00, 128);
19571  memset(dst_str, 0x00, 257);
19572  memset(iv_str, 0x00, 128);
19573  memset(add_str, 0x00, 128);
19574  memset(tag_str, 0x00, 128);
19575  memset(output, 0x00, 128);
19576  memset(tag_output, 0x00, 16);
19577 
19578  key_len = unhexify( key_str, "8d71a70fd58125b0da8dddf8d23ddbe0bc44743753bdf259448d58aae54775a6" );
19579  pt_len = unhexify( src_str, "" );
19580  iv_len = unhexify( iv_str, "d15b02572dec98398ba9e68e1a463738" );
19581  add_len = unhexify( add_str, "81313be1eda9f27e01b30877ca90e825f55ef60b15548c45c786c44b024e7198f333be7ddd2c3f593a9b77b68e6a7ac4cfc015aeec66f4823d9be7152f02a533f375554309a4db0fea8e76255144458e488fd19106d9a9614e828ae306fe82af89e7981369b2259c49bae77f8ec2b1f169ef0449ad083d11907234b72ed2e464" );
19582 
19583  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
19584  if( 0 == 0 )
19585  {
19586  fct_chk( 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 );
19587  hexify( dst_str, output, pt_len );
19588  hexify( tag_str, tag_output, tag_len );
19589 
19590  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
19591  fct_chk( strcmp( (char *) tag_str, "99df1b8d" ) == 0 );
19592  }
19593  }
19594  FCT_TEST_END();
19595 
19596 
19597  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102432_2)
19598  {
19599  unsigned char key_str[128];
19600  unsigned char src_str[128];
19601  unsigned char dst_str[257];
19602  unsigned char iv_str[128];
19603  unsigned char add_str[128];
19604  unsigned char tag_str[128];
19605  unsigned char output[128];
19606  unsigned char tag_output[16];
19607  gcm_context ctx;
19608  unsigned int key_len;
19609  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
19610 
19611  memset(key_str, 0x00, 128);
19612  memset(src_str, 0x00, 128);
19613  memset(dst_str, 0x00, 257);
19614  memset(iv_str, 0x00, 128);
19615  memset(add_str, 0x00, 128);
19616  memset(tag_str, 0x00, 128);
19617  memset(output, 0x00, 128);
19618  memset(tag_output, 0x00, 16);
19619 
19620  key_len = unhexify( key_str, "b52398c7c75e1b146cc9998eb203159925cf6fc0b1c993ba46528e2f8e8087f0" );
19621  pt_len = unhexify( src_str, "" );
19622  iv_len = unhexify( iv_str, "afc9a60ab8448b77fb05e8410d0a26e8" );
19623  add_len = unhexify( add_str, "770b3782f0e3a19d7d6bb98fa3eb0b916928a2970701c0f4a372a0ecd63499444ae02fd269ddb7d92e11a9e11d0e0b8bc60096a4be79a1e063174b710c5d739d8d05ab5c8ba119ff40843cf8c5dc4e1bd6fcad8389de3b606284c902422108d85eb3589524776641b175946c9ade1465e0d1064c5ae073be90e3261878a9af98" );
19624 
19625  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
19626  if( 0 == 0 )
19627  {
19628  fct_chk( 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 );
19629  hexify( dst_str, output, pt_len );
19630  hexify( tag_str, tag_output, tag_len );
19631 
19632  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
19633  fct_chk( strcmp( (char *) tag_str, "32d6b756" ) == 0 );
19634  }
19635  }
19636  FCT_TEST_END();
19637 
19638 
19639  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240128_0)
19640  {
19641  unsigned char key_str[128];
19642  unsigned char src_str[128];
19643  unsigned char dst_str[257];
19644  unsigned char iv_str[128];
19645  unsigned char add_str[128];
19646  unsigned char tag_str[128];
19647  unsigned char output[128];
19648  unsigned char tag_output[16];
19649  gcm_context ctx;
19650  unsigned int key_len;
19651  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
19652 
19653  memset(key_str, 0x00, 128);
19654  memset(src_str, 0x00, 128);
19655  memset(dst_str, 0x00, 257);
19656  memset(iv_str, 0x00, 128);
19657  memset(add_str, 0x00, 128);
19658  memset(tag_str, 0x00, 128);
19659  memset(output, 0x00, 128);
19660  memset(tag_output, 0x00, 16);
19661 
19662  key_len = unhexify( key_str, "6793869513ac886ed66e5897bcfa263877d8465fc762b1ed929ba3d08615fdd5" );
19663  pt_len = unhexify( src_str, "cda45e29f487f21b820e1af2c8e6d34a8bdf3f72d564a4625a6e06f9bae1c2eac3bbd5c5958fd75cf389a1a31391211745029dcd4cb2575f40ab04710a909b88c2d430cdee279f54cf7c0ff6638d1e0e631f526ee198cfd6e5cdf73d1a11b69de01d640f385fd829616cd2c0e78f09b5f64012e42dee9eb0245b72aba1404e0c" );
19664  iv_len = unhexify( iv_str, "a43de15dae25c606da1e7a4152f0df71" );
19665  add_len = unhexify( add_str, "" );
19666 
19667  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
19668  if( 0 == 0 )
19669  {
19670  fct_chk( 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 );
19671  hexify( dst_str, output, pt_len );
19672  hexify( tag_str, tag_output, tag_len );
19673 
19674  fct_chk( strcmp( (char *) dst_str, "385834c853772af70675b6be2d5087df84f88b6a303ea594a170e6dd0398ae270fcec61661ca373f4653d8dcc9e71767568c0fb03023b163bdc9ae8a08ea858cbb03b8182b4674147cb35ffda14a2f50ed9eb48d5351f00eb2fa433fdfed6f94833bcf656a7e350eb978a0aaf7a91674145f28f64693197a116b21328e273dca" ) == 0 );
19675  fct_chk( strcmp( (char *) tag_str, "159ffdb05615941e11f0db46ac8f23de" ) == 0 );
19676  }
19677  }
19678  FCT_TEST_END();
19679 
19680 
19681  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240128_1)
19682  {
19683  unsigned char key_str[128];
19684  unsigned char src_str[128];
19685  unsigned char dst_str[257];
19686  unsigned char iv_str[128];
19687  unsigned char add_str[128];
19688  unsigned char tag_str[128];
19689  unsigned char output[128];
19690  unsigned char tag_output[16];
19691  gcm_context ctx;
19692  unsigned int key_len;
19693  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
19694 
19695  memset(key_str, 0x00, 128);
19696  memset(src_str, 0x00, 128);
19697  memset(dst_str, 0x00, 257);
19698  memset(iv_str, 0x00, 128);
19699  memset(add_str, 0x00, 128);
19700  memset(tag_str, 0x00, 128);
19701  memset(output, 0x00, 128);
19702  memset(tag_output, 0x00, 16);
19703 
19704  key_len = unhexify( key_str, "9f77c141b234907b38fb45f1b3602f3c29de1ed839bb7ba51f6192aa8baaa287" );
19705  pt_len = unhexify( src_str, "96dcb74a78e99676a71673e3c9f94c34b34dad2748a6e42cc70ea50e41ef8b86b5992295d2cbc8d621fefce09e8948de7e696b9788377d598796afd002a82b628d9890db78359e1edc075cbc0d3f11d544bfdf5c8a838390cb856735942dff260189c00accfabf720e5fef1d9b7131a6b2b769f67374602d1a7ed9b899b2c398" );
19706  iv_len = unhexify( iv_str, "1b49005788148665cef20d8dcde41889" );
19707  add_len = unhexify( add_str, "" );
19708 
19709  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
19710  if( 0 == 0 )
19711  {
19712  fct_chk( 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 );
19713  hexify( dst_str, output, pt_len );
19714  hexify( tag_str, tag_output, tag_len );
19715 
19716  fct_chk( strcmp( (char *) dst_str, "b4ca59caaa94749317789b92257f2ef1dd3d9b1f4ee9540927a6ae7bf5bb0b348fcf25ba8ddda79a89d3174ac1713421291910c8926cfbb4ec1e59be7dd50e816ff586f165c605371ee6077ba4ac0ce10499f9a2a44866ce6319fce22652226164cc0a813c3147c4461dd0410e3701d4647d5a003090082e367cb9249cf1be47" ) == 0 );
19717  fct_chk( strcmp( (char *) tag_str, "8048ae0c35a656fcaa2f4c1b6be250e2" ) == 0 );
19718  }
19719  }
19720  FCT_TEST_END();
19721 
19722 
19723  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240128_2)
19724  {
19725  unsigned char key_str[128];
19726  unsigned char src_str[128];
19727  unsigned char dst_str[257];
19728  unsigned char iv_str[128];
19729  unsigned char add_str[128];
19730  unsigned char tag_str[128];
19731  unsigned char output[128];
19732  unsigned char tag_output[16];
19733  gcm_context ctx;
19734  unsigned int key_len;
19735  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
19736 
19737  memset(key_str, 0x00, 128);
19738  memset(src_str, 0x00, 128);
19739  memset(dst_str, 0x00, 257);
19740  memset(iv_str, 0x00, 128);
19741  memset(add_str, 0x00, 128);
19742  memset(tag_str, 0x00, 128);
19743  memset(output, 0x00, 128);
19744  memset(tag_output, 0x00, 16);
19745 
19746  key_len = unhexify( key_str, "2419fd9dbe58655122ac1022956a023446b7f4756163769fc1b99eaf8fba1474" );
19747  pt_len = unhexify( src_str, "93bc33dc647c7321152b12303f38937bd191ab3ce3b3a43a29f6853b33e415667d97192fcab2d1baa017042b301d03bae2f657505cc58e3aa4bd849d1ce85ede0e192a373a3894c41c54edbae29a209e16c87c81445d43968595297b50b55659f8b92d7282a2b3ca85e4b5d4ac4ff5062635103f2c7806fcc7378d5c2013be72" );
19748  iv_len = unhexify( iv_str, "94ef13dbfe9f362da35209f6d62b38a4" );
19749  add_len = unhexify( add_str, "" );
19750 
19751  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
19752  if( 0 == 0 )
19753  {
19754  fct_chk( 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 );
19755  hexify( dst_str, output, pt_len );
19756  hexify( tag_str, tag_output, tag_len );
19757 
19758  fct_chk( strcmp( (char *) dst_str, "3db23c161cf352ba267dab6a55f611eb5fff78a75288779a167cd0e4db6e75d21f11f4ff2928abcb1b46d82c2a0b1f647c60da61f9a72565f629b06a7b3fe96e4141a6886436859f610724bbe43fb99fac9b78b1e0138e2d57ce5fcfac1599bdba5701cb424535fad9ac482ab381eadca074e7376101b4b436f9c43ed760a0a6" ) == 0 );
19759  fct_chk( strcmp( (char *) tag_str, "ecd4a7370096dc781c3eb3f7e5985ef1" ) == 0 );
19760  }
19761  }
19762  FCT_TEST_END();
19763 
19764 
19765  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240120_0)
19766  {
19767  unsigned char key_str[128];
19768  unsigned char src_str[128];
19769  unsigned char dst_str[257];
19770  unsigned char iv_str[128];
19771  unsigned char add_str[128];
19772  unsigned char tag_str[128];
19773  unsigned char output[128];
19774  unsigned char tag_output[16];
19775  gcm_context ctx;
19776  unsigned int key_len;
19777  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
19778 
19779  memset(key_str, 0x00, 128);
19780  memset(src_str, 0x00, 128);
19781  memset(dst_str, 0x00, 257);
19782  memset(iv_str, 0x00, 128);
19783  memset(add_str, 0x00, 128);
19784  memset(tag_str, 0x00, 128);
19785  memset(output, 0x00, 128);
19786  memset(tag_output, 0x00, 16);
19787 
19788  key_len = unhexify( key_str, "08e11a8b4b24e63060c5002713725bb5b4a412f1d76eac13989738ce94e19642" );
19789  pt_len = unhexify( src_str, "d5598f4e37274f3b617aa4f9cf6b8547b4eb1e0eac79f6eedd6cd5364f8891f66b8d0cb09f54777d461bbf92d6fd74b3fac412b77f2c48e1024cf09b83c1e71bb86f0a20f82d296883ffee62a4a192b184bc6d7ba0448c1519310c83b18c00e71153137afad14f096b43d454f205ba6b6c2ec162aa992cebf50735dd9bb37c7c" );
19790  iv_len = unhexify( iv_str, "c6f1e6a39cabda1089048b536e39cf67" );
19791  add_len = unhexify( add_str, "" );
19792 
19793  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
19794  if( 0 == 0 )
19795  {
19796  fct_chk( 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 );
19797  hexify( dst_str, output, pt_len );
19798  hexify( tag_str, tag_output, tag_len );
19799 
19800  fct_chk( strcmp( (char *) dst_str, "1fdaf0156456b6b2a68d66091bf2260792748acf3e7bbb7906af8e0df3b569a7c03ee3a48bdfdff7ccd52433d0bbe8c5fe30d93633bb9d591dfad7d81bf8efd4d4a3c5c0bf2ac9832f0a8687f16be640fcf9b19169c251f46b97167d95115acdee3d4443df416275f5597a52c17a4b8c4b723d4b35a7fd0b380fdebd44df8bd5" ) == 0 );
19801  fct_chk( strcmp( (char *) tag_str, "cb9f4d4610c67acfe612af5508bb8c" ) == 0 );
19802  }
19803  }
19804  FCT_TEST_END();
19805 
19806 
19807  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240120_1)
19808  {
19809  unsigned char key_str[128];
19810  unsigned char src_str[128];
19811  unsigned char dst_str[257];
19812  unsigned char iv_str[128];
19813  unsigned char add_str[128];
19814  unsigned char tag_str[128];
19815  unsigned char output[128];
19816  unsigned char tag_output[16];
19817  gcm_context ctx;
19818  unsigned int key_len;
19819  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
19820 
19821  memset(key_str, 0x00, 128);
19822  memset(src_str, 0x00, 128);
19823  memset(dst_str, 0x00, 257);
19824  memset(iv_str, 0x00, 128);
19825  memset(add_str, 0x00, 128);
19826  memset(tag_str, 0x00, 128);
19827  memset(output, 0x00, 128);
19828  memset(tag_output, 0x00, 16);
19829 
19830  key_len = unhexify( key_str, "da2dae0107c284ec2aaf6e7306959df1e92d3932b88954f119ab677c6b9dcdb5" );
19831  pt_len = unhexify( src_str, "277675044caf1713109d4d3abf50c6fb67dc67f7fa584fb1a41c833feead03177cf4b42edac139807ede16eb1d9bed27db741f9542d437781405608de18418c9f7269ab3fd88f6a922a31eab5a3b8b2aa75ee4315fcea80c4954ea6613b1360b1c7c6b6da815e3f6e50f72b7e69c3b6cb3d154855e3f83cbd1947eb54018155a" );
19832  iv_len = unhexify( iv_str, "2005f79d55b12e6dfbab7fedecc50e2d" );
19833  add_len = unhexify( add_str, "" );
19834 
19835  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
19836  if( 0 == 0 )
19837  {
19838  fct_chk( 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 );
19839  hexify( dst_str, output, pt_len );
19840  hexify( tag_str, tag_output, tag_len );
19841 
19842  fct_chk( strcmp( (char *) dst_str, "c2aaab524d1738b5244af642bbd16b32ba954e69ae51acc804a6b0f89f6cb77ba2db2b0e109cda6036786f9cec5587b01e306ee8b3d588748c61ad7fce1266165729d0153ee189746b107ce15ced667279a484294725e120dc1803d2c751784436ab8ff1d5a537628ee35742d1917dc51f8cb46c2d6b983bdec502e99b85e5b5" ) == 0 );
19843  fct_chk( strcmp( (char *) tag_str, "52b4d7f2cc44f0725ee903551f681d" ) == 0 );
19844  }
19845  }
19846  FCT_TEST_END();
19847 
19848 
19849  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240120_2)
19850  {
19851  unsigned char key_str[128];
19852  unsigned char src_str[128];
19853  unsigned char dst_str[257];
19854  unsigned char iv_str[128];
19855  unsigned char add_str[128];
19856  unsigned char tag_str[128];
19857  unsigned char output[128];
19858  unsigned char tag_output[16];
19859  gcm_context ctx;
19860  unsigned int key_len;
19861  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
19862 
19863  memset(key_str, 0x00, 128);
19864  memset(src_str, 0x00, 128);
19865  memset(dst_str, 0x00, 257);
19866  memset(iv_str, 0x00, 128);
19867  memset(add_str, 0x00, 128);
19868  memset(tag_str, 0x00, 128);
19869  memset(output, 0x00, 128);
19870  memset(tag_output, 0x00, 16);
19871 
19872  key_len = unhexify( key_str, "637807b3e472e2287b09d5a3ee62f791a416419ba35e11c49b24dbadc209f0ba" );
19873  pt_len = unhexify( src_str, "e91a0a7320329dabb0d0fd7f099a4d313724aeeebcffe6fcea5b00af27d258cf9774845d29aaf5dad634c6f087c3311b1c92775fda8df8820c91186da30dc79747be6ec6230f2c261063143f4fc89d94c7efc145e68bfdbd58fb14e856578ed57ee5b3cba2cc67dd6497f05d1570efa496b46f5bcbf82ff9c6a414f76fcf3f5c" );
19874  iv_len = unhexify( iv_str, "46909d8dba6c82b86c7a2aca3c9e71e0" );
19875  add_len = unhexify( add_str, "" );
19876 
19877  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
19878  if( 0 == 0 )
19879  {
19880  fct_chk( 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 );
19881  hexify( dst_str, output, pt_len );
19882  hexify( tag_str, tag_output, tag_len );
19883 
19884  fct_chk( strcmp( (char *) dst_str, "13b4ad9c51063a7f697f3fc68030144aee0aeef0b5a52c9d4920a7185b0452159cf13e64ca216ff16637d0946a75fb5da283fcd263dd7ef2c8f14cf75537742d1f0e48846fcdbf03bc343203f7c31cf61b36374033462a7b813f4dbe9386e57874591fde606fbc150d4916c339f1950b09b1911b1b9119c3ff4053e05910ffb2" ) == 0 );
19885  fct_chk( strcmp( (char *) tag_str, "6a5c83f807401d1a9a3a2688289f61" ) == 0 );
19886  }
19887  }
19888  FCT_TEST_END();
19889 
19890 
19891  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240112_0)
19892  {
19893  unsigned char key_str[128];
19894  unsigned char src_str[128];
19895  unsigned char dst_str[257];
19896  unsigned char iv_str[128];
19897  unsigned char add_str[128];
19898  unsigned char tag_str[128];
19899  unsigned char output[128];
19900  unsigned char tag_output[16];
19901  gcm_context ctx;
19902  unsigned int key_len;
19903  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
19904 
19905  memset(key_str, 0x00, 128);
19906  memset(src_str, 0x00, 128);
19907  memset(dst_str, 0x00, 257);
19908  memset(iv_str, 0x00, 128);
19909  memset(add_str, 0x00, 128);
19910  memset(tag_str, 0x00, 128);
19911  memset(output, 0x00, 128);
19912  memset(tag_output, 0x00, 16);
19913 
19914  key_len = unhexify( key_str, "33613dc6e029df0f3ab9ca66fa96cdeaa84c1261dd586723b1ce873545565f7a" );
19915  pt_len = unhexify( src_str, "775862b39c2a509afd3470a56891fbb79bdb7dacfdb9ac72ba4730cb936d364e1aed3c92c01a018cfcd7953f751003934c15bdfdf2826e9947ea8e521f55fd2a04c75156e4910f38932c9732eb3e60423e849d34c55e3fd00b48d83028e3b4f35686016126ff16c942ec859d3c3aa2ee6d322a92dc9fa9b0247423416f5a4b47" );
19916  iv_len = unhexify( iv_str, "59484fbc27cdbd917bb55f815f9faab6" );
19917  add_len = unhexify( add_str, "" );
19918 
19919  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
19920  if( 0 == 0 )
19921  {
19922  fct_chk( 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 );
19923  hexify( dst_str, output, pt_len );
19924  hexify( tag_str, tag_output, tag_len );
19925 
19926  fct_chk( strcmp( (char *) dst_str, "069f80826dbee03e6a3437e7c6d16eb6022bd14827b8e45bd440d9b1a8ddae09999388ba0b1be0a6bafdb96f26dad523a3592fa610d5091f68380f4c1c3fa9ef7a0796ab183e8a82c2bf1f76300f98ce983eab7a93ddb18f1c10534fdb61ace83cae37e225930ab870a46285e733788e907255ca391945d409d2e53dd8a28390" ) == 0 );
19927  fct_chk( strcmp( (char *) tag_str, "9f31f8f8459eb03dc3654caba5c2" ) == 0 );
19928  }
19929  }
19930  FCT_TEST_END();
19931 
19932 
19933  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240112_1)
19934  {
19935  unsigned char key_str[128];
19936  unsigned char src_str[128];
19937  unsigned char dst_str[257];
19938  unsigned char iv_str[128];
19939  unsigned char add_str[128];
19940  unsigned char tag_str[128];
19941  unsigned char output[128];
19942  unsigned char tag_output[16];
19943  gcm_context ctx;
19944  unsigned int key_len;
19945  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
19946 
19947  memset(key_str, 0x00, 128);
19948  memset(src_str, 0x00, 128);
19949  memset(dst_str, 0x00, 257);
19950  memset(iv_str, 0x00, 128);
19951  memset(add_str, 0x00, 128);
19952  memset(tag_str, 0x00, 128);
19953  memset(output, 0x00, 128);
19954  memset(tag_output, 0x00, 16);
19955 
19956  key_len = unhexify( key_str, "75d8132f70ef3f2d8946d296c83014683eb2a4a58b555c0f48e4bfa5774d6672" );
19957  pt_len = unhexify( src_str, "a5be88fd43dc761838f3a9c7d62923c38414fa61b3678313cbc8fa9c2e5effb6cad7d5be5f39a71a28ff327b68a69f7e6a6bcb90eccacaf3a8659aeb905dd3e38efe57f2bd0d19daacae238baa01a7051084da6598fc5a3783a18decefc8efc8d46c7b1887f87d6d70c909df49340bcc680832faac3dd23cab5bcd80553dd485" );
19958  iv_len = unhexify( iv_str, "5ff41f3e75c25cedda1b08a41b89c4b4" );
19959  add_len = unhexify( add_str, "" );
19960 
19961  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
19962  if( 0 == 0 )
19963  {
19964  fct_chk( 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 );
19965  hexify( dst_str, output, pt_len );
19966  hexify( tag_str, tag_output, tag_len );
19967 
19968  fct_chk( strcmp( (char *) dst_str, "959396b86913337f2b1fb19767b787c18f00661c5d601bc65e884e15ac8043081459e889453e906ee267cb5d04fbaf250144a56c820eca34469967c73daf50796184ecf74f3c054bfa63bdd0c32425a8e10546ac342bb8e38a186e42a403cb80110aefd5f2d0bcdd353daa4430b8e7ec2134925c454745e2f708cd0b90d9d672" ) == 0 );
19969  fct_chk( strcmp( (char *) tag_str, "ca0889a0eb12995079cf9ba77019" ) == 0 );
19970  }
19971  }
19972  FCT_TEST_END();
19973 
19974 
19975  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240112_2)
19976  {
19977  unsigned char key_str[128];
19978  unsigned char src_str[128];
19979  unsigned char dst_str[257];
19980  unsigned char iv_str[128];
19981  unsigned char add_str[128];
19982  unsigned char tag_str[128];
19983  unsigned char output[128];
19984  unsigned char tag_output[16];
19985  gcm_context ctx;
19986  unsigned int key_len;
19987  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
19988 
19989  memset(key_str, 0x00, 128);
19990  memset(src_str, 0x00, 128);
19991  memset(dst_str, 0x00, 257);
19992  memset(iv_str, 0x00, 128);
19993  memset(add_str, 0x00, 128);
19994  memset(tag_str, 0x00, 128);
19995  memset(output, 0x00, 128);
19996  memset(tag_output, 0x00, 16);
19997 
19998  key_len = unhexify( key_str, "8d44344d2ff9a02b1c75785bc84f16e4d23614bf43b2b9a87798b418e905c532" );
19999  pt_len = unhexify( src_str, "e5689cef9f8258a748a615070fcbf40ed0b24c077e2f9a362cb536737ffbc5383bcafed278d4c5e0f3c83fdd5cde79483c2c178f6fef05ab50f2b8db680027a175bc6d702d249efcd6cbc425b736f1905307c9303a4bd8aca620b57e3bb4b68f2a515259b06cf5365b675edff3457e2e915d7da1e0802f7300b3d56c4644f4ad" );
20000  iv_len = unhexify( iv_str, "256a983cd6d6eb4e80b5c1d1cd2a9f21" );
20001  add_len = unhexify( add_str, "" );
20002 
20003  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
20004  if( 0 == 0 )
20005  {
20006  fct_chk( 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 );
20007  hexify( dst_str, output, pt_len );
20008  hexify( tag_str, tag_output, tag_len );
20009 
20010  fct_chk( strcmp( (char *) dst_str, "13eeadbecc4c9991e2aa0b1ca819572ef28517528320db970739a16994f82cd8b5bb53d889f298f65c63dcc07089dbf7e9d00612d2cc8220b5630ca0262a698836d906256896eea446f6de4506e558b4f20950528c8c397b6b5b04890204b77a163e46c80c96b3e268fd2754e0380e7330782d606c771d6085b34200a80335f0" ) == 0 );
20011  fct_chk( strcmp( (char *) tag_str, "b33ab1e4029998e2566583dd550d" ) == 0 );
20012  }
20013  }
20014  FCT_TEST_END();
20015 
20016 
20017  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240104_0)
20018  {
20019  unsigned char key_str[128];
20020  unsigned char src_str[128];
20021  unsigned char dst_str[257];
20022  unsigned char iv_str[128];
20023  unsigned char add_str[128];
20024  unsigned char tag_str[128];
20025  unsigned char output[128];
20026  unsigned char tag_output[16];
20027  gcm_context ctx;
20028  unsigned int key_len;
20029  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
20030 
20031  memset(key_str, 0x00, 128);
20032  memset(src_str, 0x00, 128);
20033  memset(dst_str, 0x00, 257);
20034  memset(iv_str, 0x00, 128);
20035  memset(add_str, 0x00, 128);
20036  memset(tag_str, 0x00, 128);
20037  memset(output, 0x00, 128);
20038  memset(tag_output, 0x00, 16);
20039 
20040  key_len = unhexify( key_str, "3999a6a394943be3d6e5732af5faf26caf483a3fd42c13b7f4f02132e93a990d" );
20041  pt_len = unhexify( src_str, "8907e8832553264d7e92afa1595842ac661ddfec3f4294567faa0af61b3d0fdf76a922a2f3affb36b3b3b97f18d5172aec0b8f6f01239bb750c0fdd5da1e1244473cdfade83797037ca46d83123e6105c5c54071971f190da0c59821b0bf87242502bd19d19c7f463145bab0e687a18ffb2216c4a2ad2caf9488801c33c78c03" );
20042  iv_len = unhexify( iv_str, "76e2a5141d094b3a77765ba328f33576" );
20043  add_len = unhexify( add_str, "" );
20044 
20045  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
20046  if( 0 == 0 )
20047  {
20048  fct_chk( 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 );
20049  hexify( dst_str, output, pt_len );
20050  hexify( tag_str, tag_output, tag_len );
20051 
20052  fct_chk( strcmp( (char *) dst_str, "995189a396486b451db0167cf6990557287074def46eef872e6cfe1a297e256bdff2b71668ff0184eedf00ff1a3ec91358874718f0af88acf2bdb191e97332dc544d940412363840d4c03c7b2231852393c62d625093011ef314e4f755b1d0ee37690b4dfb55194a1465714cc3cbcdf93af39e666be0407508b8764f7ee95d3c" ) == 0 );
20053  fct_chk( strcmp( (char *) tag_str, "87c8f61f459fd4a09d9ee8b331" ) == 0 );
20054  }
20055  }
20056  FCT_TEST_END();
20057 
20058 
20059  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240104_1)
20060  {
20061  unsigned char key_str[128];
20062  unsigned char src_str[128];
20063  unsigned char dst_str[257];
20064  unsigned char iv_str[128];
20065  unsigned char add_str[128];
20066  unsigned char tag_str[128];
20067  unsigned char output[128];
20068  unsigned char tag_output[16];
20069  gcm_context ctx;
20070  unsigned int key_len;
20071  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
20072 
20073  memset(key_str, 0x00, 128);
20074  memset(src_str, 0x00, 128);
20075  memset(dst_str, 0x00, 257);
20076  memset(iv_str, 0x00, 128);
20077  memset(add_str, 0x00, 128);
20078  memset(tag_str, 0x00, 128);
20079  memset(output, 0x00, 128);
20080  memset(tag_output, 0x00, 16);
20081 
20082  key_len = unhexify( key_str, "4359a62d54c43770c3a0d51da25cc32fd985d9b41c282887299d2e348aa25a36" );
20083  pt_len = unhexify( src_str, "f020c9cafba399009bd920c3ffc165d4db47a9ee15ca8c1f51c65e306ccccd3f1d694071a3c765b5255eba6ef6a280f6095f8c195ebdfbee6968b57366e62e16d05b1768825ab7fe66300941270aa121b4fc02ab970ca6e32170cdbccb46fc548620fa1777049343b1600bfb1bdecec6682f0aa7244a0852adbc7aacedfba446" );
20084  iv_len = unhexify( iv_str, "5fefa85c958417b6bc8a61b5496fea93" );
20085  add_len = unhexify( add_str, "" );
20086 
20087  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
20088  if( 0 == 0 )
20089  {
20090  fct_chk( 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 );
20091  hexify( dst_str, output, pt_len );
20092  hexify( tag_str, tag_output, tag_len );
20093 
20094  fct_chk( strcmp( (char *) dst_str, "3b8f829aa1cc1532a434bfbbd25f42480311657215946b9216846704fd5da5e886ca9d130df466c3b58f5259102ea6b9ad756e9f484a38dd0ed289fea083ab99fefbc2747100071744f10e362351d4ffac6c7c1f5a49ef3c78e2dc667f6b3bfd0fec454c4e3139443da71e514540d7a228db193a4c35d639ec13c1198ee7f81e" ) == 0 );
20095  fct_chk( strcmp( (char *) tag_str, "591db861b9060869edb228a324" ) == 0 );
20096  }
20097  }
20098  FCT_TEST_END();
20099 
20100 
20101  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240104_2)
20102  {
20103  unsigned char key_str[128];
20104  unsigned char src_str[128];
20105  unsigned char dst_str[257];
20106  unsigned char iv_str[128];
20107  unsigned char add_str[128];
20108  unsigned char tag_str[128];
20109  unsigned char output[128];
20110  unsigned char tag_output[16];
20111  gcm_context ctx;
20112  unsigned int key_len;
20113  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
20114 
20115  memset(key_str, 0x00, 128);
20116  memset(src_str, 0x00, 128);
20117  memset(dst_str, 0x00, 257);
20118  memset(iv_str, 0x00, 128);
20119  memset(add_str, 0x00, 128);
20120  memset(tag_str, 0x00, 128);
20121  memset(output, 0x00, 128);
20122  memset(tag_output, 0x00, 16);
20123 
20124  key_len = unhexify( key_str, "0d798a357de5a686d06c329e451d7384bfbd462063fb8ea7d77a13dfa1f2aac2" );
20125  pt_len = unhexify( src_str, "d920785bd7d7b1a2c9c20139380a6ac5f27a11b614ae110da14203146c2615d81e97649e95edb0eda71a0fa1589244ed42fd9449962a92942e38001ac64b212c7e06c113129712a01556577ae02325a26eb92581c0a690a894225e83ff1e36776f22b600508d6d96a0d1c55316b518df8d09769df5e8340cbeabaa0bf7752870" );
20126  iv_len = unhexify( iv_str, "50a003c0cb50ae8a3183cd640ea4c6f6" );
20127  add_len = unhexify( add_str, "" );
20128 
20129  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
20130  if( 0 == 0 )
20131  {
20132  fct_chk( 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 );
20133  hexify( dst_str, output, pt_len );
20134  hexify( tag_str, tag_output, tag_len );
20135 
20136  fct_chk( strcmp( (char *) dst_str, "9af6a5341cde4b7e1b88346ec481024b40ad95a51533cdd8e09e4809a20684f18eaf243e1df56f02ace9667264cc1c6af6b0914f154b332234f6468cc471ecb2078a9f81c17f4ade83d326b670795458d110e4c4b4cd7fe7f9f5f4d4fb23a038969e4ff4f74839b1edc270fc81fcdc8a0b15b9c2f0561567c471b783b4322ebf" ) == 0 );
20137  fct_chk( strcmp( (char *) tag_str, "6c2f01264f9dbf29962122daff" ) == 0 );
20138  }
20139  }
20140  FCT_TEST_END();
20141 
20142 
20143  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024096_0)
20144  {
20145  unsigned char key_str[128];
20146  unsigned char src_str[128];
20147  unsigned char dst_str[257];
20148  unsigned char iv_str[128];
20149  unsigned char add_str[128];
20150  unsigned char tag_str[128];
20151  unsigned char output[128];
20152  unsigned char tag_output[16];
20153  gcm_context ctx;
20154  unsigned int key_len;
20155  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
20156 
20157  memset(key_str, 0x00, 128);
20158  memset(src_str, 0x00, 128);
20159  memset(dst_str, 0x00, 257);
20160  memset(iv_str, 0x00, 128);
20161  memset(add_str, 0x00, 128);
20162  memset(tag_str, 0x00, 128);
20163  memset(output, 0x00, 128);
20164  memset(tag_output, 0x00, 16);
20165 
20166  key_len = unhexify( key_str, "29b01b6d15f6e68fc2e7079429dde5363888a6410191d603941bed272daef7ed" );
20167  pt_len = unhexify( src_str, "123b6da306978f745d1dd86d7df32d9421523a7f329dd29ad98d2c309145844010295ef443a18d37ffe093080682fb96ba9c2c92105d35d77897b589e2abc7269aba8752c2a48c843bebad2c0fa281015ba85f5f709f6aee9b1d49236d5695f7f7d01554b193c89adcd1a91749138952cb3f0ec8b5f046328b3113aaa0715ef4" );
20168  iv_len = unhexify( iv_str, "cb4ac8373bcbf1b14cf2a6a6a16a422a" );
20169  add_len = unhexify( add_str, "" );
20170 
20171  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
20172  if( 0 == 0 )
20173  {
20174  fct_chk( 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 );
20175  hexify( dst_str, output, pt_len );
20176  hexify( tag_str, tag_output, tag_len );
20177 
20178  fct_chk( strcmp( (char *) dst_str, "caf71e09395d596d5a7b091c9e87ba6d522e974451e41f33f3e7ded554f24daa9da719e87793424eca9a3eb3972983354041091ba4b16c5c8c14913e1f6cbda09779188e9b5512917a0adf4b4344f119736ba6328897726a317989cddc66f16bab64707564bb0064fe6ab7b2b5cce143e94d4b6d739f58c47b6d4850697f8101" ) == 0 );
20179  fct_chk( strcmp( (char *) tag_str, "f635ff3d8bfbfb49694e05ec" ) == 0 );
20180  }
20181  }
20182  FCT_TEST_END();
20183 
20184 
20185  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024096_1)
20186  {
20187  unsigned char key_str[128];
20188  unsigned char src_str[128];
20189  unsigned char dst_str[257];
20190  unsigned char iv_str[128];
20191  unsigned char add_str[128];
20192  unsigned char tag_str[128];
20193  unsigned char output[128];
20194  unsigned char tag_output[16];
20195  gcm_context ctx;
20196  unsigned int key_len;
20197  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
20198 
20199  memset(key_str, 0x00, 128);
20200  memset(src_str, 0x00, 128);
20201  memset(dst_str, 0x00, 257);
20202  memset(iv_str, 0x00, 128);
20203  memset(add_str, 0x00, 128);
20204  memset(tag_str, 0x00, 128);
20205  memset(output, 0x00, 128);
20206  memset(tag_output, 0x00, 16);
20207 
20208  key_len = unhexify( key_str, "f96d8cdcc21884e050f762c049930d78360b56cef5b99ae232c9a8c6e8fa89f7" );
20209  pt_len = unhexify( src_str, "9cf05e5065531d2539d92ae76a43da1fa3614ffa4b1c73ddc2358f8d71345c01260060239edf629efc3650e0d13174af4294b6da0f39cc7fbecfa324afff89dd7d203416bd144c5e03df60a287fd4a8d54ef9b4b44b3d6de1d9de07418b8a34ec5c28cec3c5b2fb861583178a68ea0af89f2dfbfbd86f7cf1e572e1c8d4b0675" );
20210  iv_len = unhexify( iv_str, "5a7eb964b6bc9e75450b721b4d1f8f92" );
20211  add_len = unhexify( add_str, "" );
20212 
20213  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
20214  if( 0 == 0 )
20215  {
20216  fct_chk( 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 );
20217  hexify( dst_str, output, pt_len );
20218  hexify( tag_str, tag_output, tag_len );
20219 
20220  fct_chk( strcmp( (char *) dst_str, "566abaa23b8d464d6f107699453740e9e189254145c5132fe46989a6654de297398913daacb4083b29f7b31832079616e9a43c9c2878df1df451e49f1e629c8b9de2fb0e4ae9df48e3e8880f3f1ff5ace8842d2695e702dd1b7bfa7c25b0539b8c80d31ac91856796beced082c213e8be56efd646dae932f5bf503af46f491d8" ) == 0 );
20221  fct_chk( strcmp( (char *) tag_str, "c049cce29c401d3d198773b6" ) == 0 );
20222  }
20223  }
20224  FCT_TEST_END();
20225 
20226 
20227  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024096_2)
20228  {
20229  unsigned char key_str[128];
20230  unsigned char src_str[128];
20231  unsigned char dst_str[257];
20232  unsigned char iv_str[128];
20233  unsigned char add_str[128];
20234  unsigned char tag_str[128];
20235  unsigned char output[128];
20236  unsigned char tag_output[16];
20237  gcm_context ctx;
20238  unsigned int key_len;
20239  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
20240 
20241  memset(key_str, 0x00, 128);
20242  memset(src_str, 0x00, 128);
20243  memset(dst_str, 0x00, 257);
20244  memset(iv_str, 0x00, 128);
20245  memset(add_str, 0x00, 128);
20246  memset(tag_str, 0x00, 128);
20247  memset(output, 0x00, 128);
20248  memset(tag_output, 0x00, 16);
20249 
20250  key_len = unhexify( key_str, "253234c3dc9cb3d50a80598c5cde0e37b6b13bf834f3595a9458dee698a6d19b" );
20251  pt_len = unhexify( src_str, "686ad2740bdad507ebe97aa5bdbef25b8b030c4cdcaccb0d3b675ca91279db3ea75aa222c0ae98f86c24b10038cbb4fe9f897e1145b2f58cd3e9120f9a5620f38aa1e1f63906f557ff4a4c3223f5bb13dca34f8a1c6419e24ea57d114c62fec6fb9eee58a16b9e6a6bd930aa6fedcfc591311250e7167d43cca5916d5beead27" );
20252  iv_len = unhexify( iv_str, "9d156414acb63d11cb34870b937c837d" );
20253  add_len = unhexify( add_str, "" );
20254 
20255  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
20256  if( 0 == 0 )
20257  {
20258  fct_chk( 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 );
20259  hexify( dst_str, output, pt_len );
20260  hexify( tag_str, tag_output, tag_len );
20261 
20262  fct_chk( strcmp( (char *) dst_str, "96abd56d2f8aefe6c687f035df46c3f952a9933b8a51698e47d973b7d47c65ca3ba2474cb419c84a4c3cefb49e78cee1443a8fbbdaaecf73e9059ef34ac5a0df3fc152ecde2286da8840ad4617fd6ebc1e126314204bdc0a17b958430eb9f727498ff1db17aabbdaf43acca0945342d2ba9346da5373b2372b3081605e895c99" ) == 0 );
20263  fct_chk( strcmp( (char *) tag_str, "3d998e5be9df433da001a686" ) == 0 );
20264  }
20265  }
20266  FCT_TEST_END();
20267 
20268 
20269  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024064_0)
20270  {
20271  unsigned char key_str[128];
20272  unsigned char src_str[128];
20273  unsigned char dst_str[257];
20274  unsigned char iv_str[128];
20275  unsigned char add_str[128];
20276  unsigned char tag_str[128];
20277  unsigned char output[128];
20278  unsigned char tag_output[16];
20279  gcm_context ctx;
20280  unsigned int key_len;
20281  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
20282 
20283  memset(key_str, 0x00, 128);
20284  memset(src_str, 0x00, 128);
20285  memset(dst_str, 0x00, 257);
20286  memset(iv_str, 0x00, 128);
20287  memset(add_str, 0x00, 128);
20288  memset(tag_str, 0x00, 128);
20289  memset(output, 0x00, 128);
20290  memset(tag_output, 0x00, 16);
20291 
20292  key_len = unhexify( key_str, "1054d48d52693d2797c80d3f10509d1c808f36a4d65e8fd968e5d56239f856bc" );
20293  pt_len = unhexify( src_str, "a708e9d2d27ed4228e5b23d358561a77d684d855db9827be2bc102f2278f1961d3f056fb76f76204b2c96b916eb5e407f98e58edfed06de2388521832d97211d851d3e29658df738e3a15593b9db016d9e46fe9df98ce972d59f7058d484886ffaec7b9fd973c55644831241c1ce85bb478e83ccefd26b9718bfe910ac311ecc" );
20294  iv_len = unhexify( iv_str, "87611b936873b63abeaea990d6637a22" );
20295  add_len = unhexify( add_str, "" );
20296 
20297  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
20298  if( 0 == 0 )
20299  {
20300  fct_chk( 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 );
20301  hexify( dst_str, output, pt_len );
20302  hexify( tag_str, tag_output, tag_len );
20303 
20304  fct_chk( strcmp( (char *) dst_str, "94473e84659bc18eddcebe3112f55426f48ca4d670291fdedd42cc15a7415aa6795fb75b39434884eb266677e1fa7f530c6f3aaa733c0d9c06291bd7dff4c4e5857b2ee9e9f1f61a85571ad32dc9a3259017abe9eb5111e56df2913535669f3b2d722bd35fcdbd6541918885d9677cccaa902b9d3599cd4f0df1f35f4d11b8cf" ) == 0 );
20305  fct_chk( strcmp( (char *) tag_str, "9bd7cfe1023448ac" ) == 0 );
20306  }
20307  }
20308  FCT_TEST_END();
20309 
20310 
20311  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024064_1)
20312  {
20313  unsigned char key_str[128];
20314  unsigned char src_str[128];
20315  unsigned char dst_str[257];
20316  unsigned char iv_str[128];
20317  unsigned char add_str[128];
20318  unsigned char tag_str[128];
20319  unsigned char output[128];
20320  unsigned char tag_output[16];
20321  gcm_context ctx;
20322  unsigned int key_len;
20323  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
20324 
20325  memset(key_str, 0x00, 128);
20326  memset(src_str, 0x00, 128);
20327  memset(dst_str, 0x00, 257);
20328  memset(iv_str, 0x00, 128);
20329  memset(add_str, 0x00, 128);
20330  memset(tag_str, 0x00, 128);
20331  memset(output, 0x00, 128);
20332  memset(tag_output, 0x00, 16);
20333 
20334  key_len = unhexify( key_str, "a95dc5127b9cb1c82d558d5b24ae049e24447fd676a49350089951afe01dc797" );
20335  pt_len = unhexify( src_str, "45f81fa4780a256c40a0efec9547310406904d8991bcf964aa35ec9af457e2a642c1343827839f1f4b42f2b226da351731f416a4b4151f07927c278b371404f027bb2058e1765b367f5433a43fa4153883351041db3f066ef284a3eabd584d1d0b1d594b4ce7b5bca1708fbc661d95a9ac0d77dc29547f022eedc582fc7158c3" );
20336  iv_len = unhexify( iv_str, "0b177d01993ec726fff082ec88c64a31" );
20337  add_len = unhexify( add_str, "" );
20338 
20339  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
20340  if( 0 == 0 )
20341  {
20342  fct_chk( 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 );
20343  hexify( dst_str, output, pt_len );
20344  hexify( tag_str, tag_output, tag_len );
20345 
20346  fct_chk( strcmp( (char *) dst_str, "16c77b7f541d2dc4e8d31da23e04f18f4254aa283e8cee5b776f3d9a27584f459d0747955efff8945f807209ddaa6421846647d4198534b244498fe13a9073d372171d1b2fc38af66204f3de04000c093ebe659173b8d78dcfb8ca9003d2cd44ed168e6aaf55a06f29e83ceb32b98bafb59f109599f88b5c0f0557bd2b28f03f" ) == 0 );
20347  fct_chk( strcmp( (char *) tag_str, "19eb5f808d65989d" ) == 0 );
20348  }
20349  }
20350  FCT_TEST_END();
20351 
20352 
20353  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024064_2)
20354  {
20355  unsigned char key_str[128];
20356  unsigned char src_str[128];
20357  unsigned char dst_str[257];
20358  unsigned char iv_str[128];
20359  unsigned char add_str[128];
20360  unsigned char tag_str[128];
20361  unsigned char output[128];
20362  unsigned char tag_output[16];
20363  gcm_context ctx;
20364  unsigned int key_len;
20365  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
20366 
20367  memset(key_str, 0x00, 128);
20368  memset(src_str, 0x00, 128);
20369  memset(dst_str, 0x00, 257);
20370  memset(iv_str, 0x00, 128);
20371  memset(add_str, 0x00, 128);
20372  memset(tag_str, 0x00, 128);
20373  memset(output, 0x00, 128);
20374  memset(tag_output, 0x00, 16);
20375 
20376  key_len = unhexify( key_str, "53d6393dd7ecc40f2d52460ecdb0607133ad843ef53f380cd3a2755bfa567abe" );
20377  pt_len = unhexify( src_str, "72199c54dd5efb28c104e3b7210855506f6577d15c4eccdaa6a621a572e15f5845d648cf71b9fafef3411f6c1a664c7974fe71126a5cbab907e2caa342d8d7a05bc68a72c824896ec40e520e90b704dea441d22c5918f98803a88293384f64f92f11650c2cf4d3b062d30e14d149160742f59a473faf8fe00f4bdab9128c3281" );
20378  iv_len = unhexify( iv_str, "db7e93da21f0c9840c54c56e9c6ceba3" );
20379  add_len = unhexify( add_str, "" );
20380 
20381  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
20382  if( 0 == 0 )
20383  {
20384  fct_chk( 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 );
20385  hexify( dst_str, output, pt_len );
20386  hexify( tag_str, tag_output, tag_len );
20387 
20388  fct_chk( strcmp( (char *) dst_str, "5e83f559fa54926b731334f815783914530bbcc472d4bbd5e65908fb1c421442cb4c57329f2e4ba3d146a6499f34d8f1ec6d43e0cf98bdba923f404b914700edb235b08b0330097ea4162fd0baa1b7177ef0b29d5a6689bc56b8f975d6b6067ade4b8baf1d47a2eeb5b2ed28ebeded381d55d280cb2fb65ce4d82b69cce0594d" ) == 0 );
20389  fct_chk( strcmp( (char *) tag_str, "4e65dde857a0f5c7" ) == 0 );
20390  }
20391  }
20392  FCT_TEST_END();
20393 
20394 
20395  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024032_0)
20396  {
20397  unsigned char key_str[128];
20398  unsigned char src_str[128];
20399  unsigned char dst_str[257];
20400  unsigned char iv_str[128];
20401  unsigned char add_str[128];
20402  unsigned char tag_str[128];
20403  unsigned char output[128];
20404  unsigned char tag_output[16];
20405  gcm_context ctx;
20406  unsigned int key_len;
20407  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
20408 
20409  memset(key_str, 0x00, 128);
20410  memset(src_str, 0x00, 128);
20411  memset(dst_str, 0x00, 257);
20412  memset(iv_str, 0x00, 128);
20413  memset(add_str, 0x00, 128);
20414  memset(tag_str, 0x00, 128);
20415  memset(output, 0x00, 128);
20416  memset(tag_output, 0x00, 16);
20417 
20418  key_len = unhexify( key_str, "aa4a53c7764a254b06e1d8003810300b70f5729306effba9fb6210f97648a499" );
20419  pt_len = unhexify( src_str, "19f3a8c298478d6868bf3b31785eb62e844c37200672e6ef1ecc05c616d981e02c333dbc3f86dbb7ab9ba40e9e57e133e6d1d595fcc6d8e9886a84517212669d5d7ce0f1383cb58681b92dc180c06caa1a7ac1ec974dcd7f2bca7ad2ab2789c9a3a487d64c484319bffa56d854a6d40c62b02d0c7898f641f106ff50d22a12e7" );
20420  iv_len = unhexify( iv_str, "c32288f97af9b6e31aa7e40d9ef8d016" );
20421  add_len = unhexify( add_str, "" );
20422 
20423  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
20424  if( 0 == 0 )
20425  {
20426  fct_chk( 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 );
20427  hexify( dst_str, output, pt_len );
20428  hexify( tag_str, tag_output, tag_len );
20429 
20430  fct_chk( strcmp( (char *) dst_str, "1fa6aec7a28767c8961363dc4264e6ab97014264f6fe1dda7e9db8646ce9a5463f69e91aad2fce696f9b641d75635bfb0f97ed2d7beaca944cf8bd9dbfffe77b5ae9fd032575e5333c7ce27538c609922843de87b960ebca7c2a2ef9702dd0c32f787b4d7df248fdf526d594a90bad0d6a8dffe212246c36db71e2d348326624" ) == 0 );
20431  fct_chk( strcmp( (char *) tag_str, "1699444e" ) == 0 );
20432  }
20433  }
20434  FCT_TEST_END();
20435 
20436 
20437  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024032_1)
20438  {
20439  unsigned char key_str[128];
20440  unsigned char src_str[128];
20441  unsigned char dst_str[257];
20442  unsigned char iv_str[128];
20443  unsigned char add_str[128];
20444  unsigned char tag_str[128];
20445  unsigned char output[128];
20446  unsigned char tag_output[16];
20447  gcm_context ctx;
20448  unsigned int key_len;
20449  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
20450 
20451  memset(key_str, 0x00, 128);
20452  memset(src_str, 0x00, 128);
20453  memset(dst_str, 0x00, 257);
20454  memset(iv_str, 0x00, 128);
20455  memset(add_str, 0x00, 128);
20456  memset(tag_str, 0x00, 128);
20457  memset(output, 0x00, 128);
20458  memset(tag_output, 0x00, 16);
20459 
20460  key_len = unhexify( key_str, "f420b6ef96d9bfe46dcf18246ee230790a6fc854e730f1dd2d1ffd0e8b5c4776" );
20461  pt_len = unhexify( src_str, "658a954d6c61d0d6f0e81a3c1cc65684483fdc95f280b6d4c964358596c25ca41c389932d74a1a3a17d041e89b7110ea315fadb3128c2c469c350bf9b4723aa9c8abd9065ebbd12c317bfb7090f09633f8c1184f0c4fbe10f5486dbfb847536c886f7d144ed07272a7e62fb523a04111e5ea9e1ab415fd17e72143006db14e9e" );
20462  iv_len = unhexify( iv_str, "4982f502a37eea8bcf316ced466c9fb1" );
20463  add_len = unhexify( add_str, "" );
20464 
20465  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
20466  if( 0 == 0 )
20467  {
20468  fct_chk( 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 );
20469  hexify( dst_str, output, pt_len );
20470  hexify( tag_str, tag_output, tag_len );
20471 
20472  fct_chk( strcmp( (char *) dst_str, "8630aa78aabe35d9360a44bb2094209b6f70d46d71e3949803cf54e33dafd54c6e49eda9e26dc5c0c1e34908f5281c8cb2a1aeee81186cf45d3eb22f486320c7ee0fb7bf3c211b232a8426e7e82f3e05881bf7d9454cddec7f28e5358cd0e9ea2e9cff938be044c1b21911d50b2ae23ab1aef377511ea657adcb560c34209f8b" ) == 0 );
20473  fct_chk( strcmp( (char *) tag_str, "3aa91b73" ) == 0 );
20474  }
20475  }
20476  FCT_TEST_END();
20477 
20478 
20479  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024032_2)
20480  {
20481  unsigned char key_str[128];
20482  unsigned char src_str[128];
20483  unsigned char dst_str[257];
20484  unsigned char iv_str[128];
20485  unsigned char add_str[128];
20486  unsigned char tag_str[128];
20487  unsigned char output[128];
20488  unsigned char tag_output[16];
20489  gcm_context ctx;
20490  unsigned int key_len;
20491  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
20492 
20493  memset(key_str, 0x00, 128);
20494  memset(src_str, 0x00, 128);
20495  memset(dst_str, 0x00, 257);
20496  memset(iv_str, 0x00, 128);
20497  memset(add_str, 0x00, 128);
20498  memset(tag_str, 0x00, 128);
20499  memset(output, 0x00, 128);
20500  memset(tag_output, 0x00, 16);
20501 
20502  key_len = unhexify( key_str, "50f3b822dfc70382d8695811e6b0a2896ea2bcd4d5268778cd484053c8a19288" );
20503  pt_len = unhexify( src_str, "15bfb3a562ced63c92561a78374af40c88a08ce02392419e03d7543365c5b6525951ef2dec5927474a0ef85f519e5ef795881db3eafa765ec38e6be7b565a878c13d90c02889dc50cbe87081d9225a515504c7be15bf97f5d72a4d81f218a148a46fbd42983ab002fce0a54719bfe301bb761753cb330dc25be517b87d0428d9" );
20504  iv_len = unhexify( iv_str, "980810c11abd3aff43408ec9a69abcb3" );
20505  add_len = unhexify( add_str, "" );
20506 
20507  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
20508  if( 0 == 0 )
20509  {
20510  fct_chk( 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 );
20511  hexify( dst_str, output, pt_len );
20512  hexify( tag_str, tag_output, tag_len );
20513 
20514  fct_chk( strcmp( (char *) dst_str, "12632296f27eb2439009f6032a3f648370303dcebaac311b684de2496f399b271347b19e045c1060802f3f742b6c780d20b9d589cc082d7d0d580dfb7231171cfb612227fcdee7feae4f8defd34c89fb0d68570e782192a7bdd9a5464f35dc6a4282cf9cc3fdfac988d129eddf8e0795ccc24a113f872ada88834c974df8bc69" ) == 0 );
20515  fct_chk( strcmp( (char *) tag_str, "32c1c4c5" ) == 0 );
20516  }
20517  }
20518  FCT_TEST_END();
20519 
20520 
20521  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024128_0)
20522  {
20523  unsigned char key_str[128];
20524  unsigned char src_str[128];
20525  unsigned char dst_str[257];
20526  unsigned char iv_str[128];
20527  unsigned char add_str[128];
20528  unsigned char tag_str[128];
20529  unsigned char output[128];
20530  unsigned char tag_output[16];
20531  gcm_context ctx;
20532  unsigned int key_len;
20533  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
20534 
20535  memset(key_str, 0x00, 128);
20536  memset(src_str, 0x00, 128);
20537  memset(dst_str, 0x00, 257);
20538  memset(iv_str, 0x00, 128);
20539  memset(add_str, 0x00, 128);
20540  memset(tag_str, 0x00, 128);
20541  memset(output, 0x00, 128);
20542  memset(tag_output, 0x00, 16);
20543 
20544  key_len = unhexify( key_str, "29072ab5bad2c1425ca8dd0ae56f27e93f8d26b320b08f77b8bd3fa9d03edc6c" );
20545  pt_len = unhexify( src_str, "3c7afc5cfc5a1e141587e93fef8427d4f21d892b983b7c9b6e9de3ee168837a1533847c8a2e2ab0706ac1474e9aa54ab57e7860bca9ebb83bd6d3ae26ca5387abdb9a60c4a9928484742a91294b13ab8f51eb4f599a30e9cb1894aca32a62a4c2793ee6793df473f43234c9eafb44d585a7d92a50aebef80c73c86ef67f5b5a4" );
20546  iv_len = unhexify( iv_str, "0201edf80475d2f969a90848f639528c" );
20547  add_len = unhexify( add_str, "4c8ff3edeaa68e47bbc8724b37822216d42e2669ca127da14b7b488fde31a49c7d357fb9aecc1991b3c6f63a4ce43959a22de70545e6aee8674d812ecaaef93ad03b5d4c99bdef6d52f21fc7fdbeb1c5629a76df59620aaefda81a8e73cebe4c646beffd7f4a98a5283cc7bc5e78b2a70f43e0cab0b7772e03a5f048ec75081a" );
20548 
20549  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
20550  if( 0 == 0 )
20551  {
20552  fct_chk( 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 );
20553  hexify( dst_str, output, pt_len );
20554  hexify( tag_str, tag_output, tag_len );
20555 
20556  fct_chk( strcmp( (char *) dst_str, "f3755aae6813e4e4b84a089ca1496564676655ba3c94e59c5f682adbbfed21e76aed0db78390258cf5fbf15f06c6b6468414cb6493c8b9b953b4954ecaf07ecaf8586ae001710d4069da6d21810bcdcbb831f7041cdbb984b7c55878598a6658883178dcc0fa03394519b8b9c3bed0e5c073429f5dd071a9184b015cbbbc62e1" ) == 0 );
20557  fct_chk( strcmp( (char *) tag_str, "0549dd9f2a123bd6d58e5cd16c0624a1" ) == 0 );
20558  }
20559  }
20560  FCT_TEST_END();
20561 
20562 
20563  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024128_1)
20564  {
20565  unsigned char key_str[128];
20566  unsigned char src_str[128];
20567  unsigned char dst_str[257];
20568  unsigned char iv_str[128];
20569  unsigned char add_str[128];
20570  unsigned char tag_str[128];
20571  unsigned char output[128];
20572  unsigned char tag_output[16];
20573  gcm_context ctx;
20574  unsigned int key_len;
20575  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
20576 
20577  memset(key_str, 0x00, 128);
20578  memset(src_str, 0x00, 128);
20579  memset(dst_str, 0x00, 257);
20580  memset(iv_str, 0x00, 128);
20581  memset(add_str, 0x00, 128);
20582  memset(tag_str, 0x00, 128);
20583  memset(output, 0x00, 128);
20584  memset(tag_output, 0x00, 16);
20585 
20586  key_len = unhexify( key_str, "aa9999af53720d0c1288fd3fe307a471160635287eebf41dd77c82d1f9cc9d61" );
20587  pt_len = unhexify( src_str, "6ce6f2dc202750219e15a24e1ff0678ffdde55b27cdcab6da188bd5235a3bdc677f72f106579d02c2970d4542e4e2372886e1a6d74c596ce735f51f2ee6aff4d62bd24112ec7cd1adc7c660561f163170cdf047c241c53b8a5b2e03fde48c249a319bb90c2693c468c9dd136e94e05f067cd1d68244ce50be318ae0464b79acd" );
20588  iv_len = unhexify( iv_str, "6299d651a032bdf3a7e6b25ace660e30" );
20589  add_len = unhexify( add_str, "afab0a3d1960ac973ee2f4461dacd10d189412b37e572cad7888bb4d2453f1eefbd6725aadd5f982393dfa59c3cf1ee342dd91e1fbfab10a802e3a0eda226fde2686e7db1015405a3d33c921e5aa857bfda53ca3aed3ff0e18c289406740a7c5d9f86ce43db40c9032e98ab126c7c0364e2efc008312b7641d36503d183fa5a5" );
20590 
20591  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
20592  if( 0 == 0 )
20593  {
20594  fct_chk( 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 );
20595  hexify( dst_str, output, pt_len );
20596  hexify( tag_str, tag_output, tag_len );
20597 
20598  fct_chk( strcmp( (char *) dst_str, "a8059fe6ff711616afb591b5e5de497b3b7813f9de658c7b47cc3e7b07d0805c1ba05856d98341869b8394f3b5df2876ae19837edb3931eebeb0f26eb6c4a2ea78003d82a98111305208ccaceaf77e5d71996cca4f9a5eb712dd916b71455f741ec2dde51f56828667b7a2da015e1886fba71e496a542d94a38efbcb5353fb89" ) == 0 );
20599  fct_chk( strcmp( (char *) tag_str, "2ff4d8d00400ad63a6ae7842eefb16eb" ) == 0 );
20600  }
20601  }
20602  FCT_TEST_END();
20603 
20604 
20605  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024128_2)
20606  {
20607  unsigned char key_str[128];
20608  unsigned char src_str[128];
20609  unsigned char dst_str[257];
20610  unsigned char iv_str[128];
20611  unsigned char add_str[128];
20612  unsigned char tag_str[128];
20613  unsigned char output[128];
20614  unsigned char tag_output[16];
20615  gcm_context ctx;
20616  unsigned int key_len;
20617  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
20618 
20619  memset(key_str, 0x00, 128);
20620  memset(src_str, 0x00, 128);
20621  memset(dst_str, 0x00, 257);
20622  memset(iv_str, 0x00, 128);
20623  memset(add_str, 0x00, 128);
20624  memset(tag_str, 0x00, 128);
20625  memset(output, 0x00, 128);
20626  memset(tag_output, 0x00, 16);
20627 
20628  key_len = unhexify( key_str, "31721e5e3a748a7f7369f3dffc1cbb570ceac868ef9d1f29b944b7e86a26d273" );
20629  pt_len = unhexify( src_str, "6afc1d22233a60c3e6851447de89152a0dbadcd87e35fc947ca4bc886f1f87549ea106b097e2655136833d06dfb879a85732298860c149c5e5ff03bb2a95d9cd3deeb8ffdf951ea5f97e32c1ed75271d2ea58d158ae6d568bf197d69130977e330ebfef33f222bfd5b56bc6b0382dc99c4f0e42b0aa7a117b43f96d43f6e02dd" );
20630  iv_len = unhexify( iv_str, "523247d56cc67c752b20eab7a28f85fe" );
20631  add_len = unhexify( add_str, "11eb41aeae3611f0de77bfa1221ef5b7d254faf893dbdaead926a61605f8a86f20f1fb84e0c5acd195143bc5a4f297bf729129f898a2013175b3db7004115a6120134d8e354afe36699a6c6618d739c805b5b91739df67de7667729f1d6eae1a0609897999d474be4d8b826df901c6f39d522570d38d2d1aa828382932a177b1" );
20632 
20633  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
20634  if( 0 == 0 )
20635  {
20636  fct_chk( 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 );
20637  hexify( dst_str, output, pt_len );
20638  hexify( tag_str, tag_output, tag_len );
20639 
20640  fct_chk( strcmp( (char *) dst_str, "39e7f32bb3e8436d97a1d86a22750768001fe3a805516d3f800352323afd221991105d12da69ce7430402fa7923958ad5ed85506b968c4dd89516d6e3d02e722db3954ce098ec3299ef4f2ed4a89f383408dceca9dabc6f8eefe5a1f80093961c29a94b222d1a04d2c1e453d2e02977f3dd77a4659e2bde2fdbba8e2829db4f1" ) == 0 );
20641  fct_chk( strcmp( (char *) tag_str, "506883db674fa0417e0832efc040227c" ) == 0 );
20642  }
20643  }
20644  FCT_TEST_END();
20645 
20646 
20647  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024120_0)
20648  {
20649  unsigned char key_str[128];
20650  unsigned char src_str[128];
20651  unsigned char dst_str[257];
20652  unsigned char iv_str[128];
20653  unsigned char add_str[128];
20654  unsigned char tag_str[128];
20655  unsigned char output[128];
20656  unsigned char tag_output[16];
20657  gcm_context ctx;
20658  unsigned int key_len;
20659  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
20660 
20661  memset(key_str, 0x00, 128);
20662  memset(src_str, 0x00, 128);
20663  memset(dst_str, 0x00, 257);
20664  memset(iv_str, 0x00, 128);
20665  memset(add_str, 0x00, 128);
20666  memset(tag_str, 0x00, 128);
20667  memset(output, 0x00, 128);
20668  memset(tag_output, 0x00, 16);
20669 
20670  key_len = unhexify( key_str, "100bd2bf9c8b24cc2e8d57697cd131c846b55ad6ff0b214c0de14104b465b58b" );
20671  pt_len = unhexify( src_str, "81c3370da989f774c1962f60c57299747481bea0e6b91df846e6ef93cada977bc742ee33ce085ae33eb9f7393a0943b647205a7e1ffb2a6a803a1ce7a88902456d66612362962b97c7152b57f1d54de94a39f07c1a8098da4ea5e498d426b7036c642fbeebefda50b8c421a7a33b1a8499dc35011d80a51d34285824d6f01722" );
20672  iv_len = unhexify( iv_str, "363e8af6f38307ec126e466e7056cc45" );
20673  add_len = unhexify( add_str, "471f7e9a0b505b12996747ec9e32731f11911ee95d70795bbd1bba34cf782d4100ce30a85b23f9f817f30e8f314e1a23e101201c920ce12ce732cc3fe01c74a9ee8d3e1599aa22f2398c3265d4dbda626a8ff4262889009e087fbef6babe33d7300e5cfc4c0056f3562a913d2594fee8e44959cf728599a9d3e7ee4a9ecd6694" );
20674 
20675  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
20676  if( 0 == 0 )
20677  {
20678  fct_chk( 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 );
20679  hexify( dst_str, output, pt_len );
20680  hexify( tag_str, tag_output, tag_len );
20681 
20682  fct_chk( strcmp( (char *) dst_str, "9494d01966ac887b8295bde61f0e7d006ea7b5c984a29cf5d849194f35d7b0f6ddb3bbd9646d7b9b961c515179901d2b04cb7cf7b6c8736d1d472ae8bb9a6dc9194b03b3f5373551a5ae0c0f023967669c873f0acfb02c0ae3a384e70f7a7ca05861f257f36a2ad5fbb591473dfc3ae1264dca0e889e0ddbf93dadf75db2059b" ) == 0 );
20683  fct_chk( strcmp( (char *) tag_str, "5c78d914cac78c514e275a244d0ea4" ) == 0 );
20684  }
20685  }
20686  FCT_TEST_END();
20687 
20688 
20689  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024120_1)
20690  {
20691  unsigned char key_str[128];
20692  unsigned char src_str[128];
20693  unsigned char dst_str[257];
20694  unsigned char iv_str[128];
20695  unsigned char add_str[128];
20696  unsigned char tag_str[128];
20697  unsigned char output[128];
20698  unsigned char tag_output[16];
20699  gcm_context ctx;
20700  unsigned int key_len;
20701  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
20702 
20703  memset(key_str, 0x00, 128);
20704  memset(src_str, 0x00, 128);
20705  memset(dst_str, 0x00, 257);
20706  memset(iv_str, 0x00, 128);
20707  memset(add_str, 0x00, 128);
20708  memset(tag_str, 0x00, 128);
20709  memset(output, 0x00, 128);
20710  memset(tag_output, 0x00, 16);
20711 
20712  key_len = unhexify( key_str, "614dd1762deb5c726eadf0e6587f9f38fa63d16bca1926955404f1b9f83e241a" );
20713  pt_len = unhexify( src_str, "1ae828a1693d3c24651ab8ba59fb1185d08e6cc4a964f30dac59cd81ff4bdfce8023ab1b6dffb594a4250d25f611763efb4152cd35b937ca11373d237f1f8b3c0e21b942beb1f4ffe5014198c9ff59896ddfbb55e69963e3ef6b03d3fa134977870cd6f3ac10bbf59bdcc9f103cc2d58f294ef5f007a9f903c7bada08cb454e6" );
20714  iv_len = unhexify( iv_str, "10d079a86894b0c17bfcc8ffc4ecf7bc" );
20715  add_len = unhexify( add_str, "c4035f80b6d2ea288afd4ddaec1eb232b78be5a86583fa85f791d546102c97ace9716c2702483d762c8e4eda12f3dd10a9a49a2d72cd4694fa794477b54b4367be6b548675aee4c351e3f66c7e113aecfbcc57b8bbab4a039f28488237c75313e62612847b915ef9b582e146b2bfabbfce576a984f5ce4be0e6bff5480584fc3" );
20716 
20717  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
20718  if( 0 == 0 )
20719  {
20720  fct_chk( 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 );
20721  hexify( dst_str, output, pt_len );
20722  hexify( tag_str, tag_output, tag_len );
20723 
20724  fct_chk( strcmp( (char *) dst_str, "bf5fb0445aab46aba504801d5356455f28c98f300670a731bdd0c901a1d5564aa31f5d467e5f80dadbfeca61d2bf72b570f3935ba04c45a2ff7994bac6cabf84db2a42cd5db2a4f160c97c76817cc5cb62d4006d895fcdb218c1464b5caaadbd1f61779938e9a84440615eae050cd6f1713cfbd695d78818b2af78157339e9d9" ) == 0 );
20725  fct_chk( strcmp( (char *) tag_str, "6d815ee12813875ce74e3aed3c7b73" ) == 0 );
20726  }
20727  }
20728  FCT_TEST_END();
20729 
20730 
20731  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024120_2)
20732  {
20733  unsigned char key_str[128];
20734  unsigned char src_str[128];
20735  unsigned char dst_str[257];
20736  unsigned char iv_str[128];
20737  unsigned char add_str[128];
20738  unsigned char tag_str[128];
20739  unsigned char output[128];
20740  unsigned char tag_output[16];
20741  gcm_context ctx;
20742  unsigned int key_len;
20743  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
20744 
20745  memset(key_str, 0x00, 128);
20746  memset(src_str, 0x00, 128);
20747  memset(dst_str, 0x00, 257);
20748  memset(iv_str, 0x00, 128);
20749  memset(add_str, 0x00, 128);
20750  memset(tag_str, 0x00, 128);
20751  memset(output, 0x00, 128);
20752  memset(tag_output, 0x00, 16);
20753 
20754  key_len = unhexify( key_str, "12e97fafff7d397ea34efc0a8528afcd51c1b2ccda680ae9049edc8359b78ec0" );
20755  pt_len = unhexify( src_str, "9fbf0141cd50bd1b3ccaf137b808b698570642ab20c32120901622b34173d7ad119abca3c61bbf1e6dd5cb182a079f3e01b0e5263d984c6186f01792125dd6c47c30033008ca2e0377f990285094f652c55a348242dfaa59f76989fcf86033c8d9c0b2a526bf46cca207e055e1dbc7cf3d0b7a840c8fb5f85784c9e4563f71de" );
20756  iv_len = unhexify( iv_str, "8eb11abfe350c0d5a6b02477b44867e9" );
20757  add_len = unhexify( add_str, "0a830029d450e20aaef484d4abee9dadeabbd6feaf800b3a693b4746db059efb7d110405b45e45a9e5acf90957c154674dfb2c1cd787af371e01bafc4e8475d0268b969d25756a1121a519afa61f3d6ecded4e0640f0ddd471f5b8e82029fd2887df4e65af9580390b6924022e39acfede7530e5f0e54f0285ba565ff49af542" );
20758 
20759  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
20760  if( 0 == 0 )
20761  {
20762  fct_chk( 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 );
20763  hexify( dst_str, output, pt_len );
20764  hexify( tag_str, tag_output, tag_len );
20765 
20766  fct_chk( strcmp( (char *) dst_str, "067cd6ff8461ac80217ef70a91dcf6edb2fbdd31856815cf356fffa63ba3f5cb293d7f1ed32ae40248693617f27839a34e871fdde635c04d1e66743f730a06e2be25cafe1d67d804879fe38e009268ec50a0294da445c795742ff1e924170e4c2e0e9ef3bdc26c251f5537218d295d93d57baccc4dee6185c235d7ec5c9926a6" ) == 0 );
20767  fct_chk( strcmp( (char *) tag_str, "931f44f10993c836e534a59c1aeb98" ) == 0 );
20768  }
20769  }
20770  FCT_TEST_END();
20771 
20772 
20773  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024112_0)
20774  {
20775  unsigned char key_str[128];
20776  unsigned char src_str[128];
20777  unsigned char dst_str[257];
20778  unsigned char iv_str[128];
20779  unsigned char add_str[128];
20780  unsigned char tag_str[128];
20781  unsigned char output[128];
20782  unsigned char tag_output[16];
20783  gcm_context ctx;
20784  unsigned int key_len;
20785  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
20786 
20787  memset(key_str, 0x00, 128);
20788  memset(src_str, 0x00, 128);
20789  memset(dst_str, 0x00, 257);
20790  memset(iv_str, 0x00, 128);
20791  memset(add_str, 0x00, 128);
20792  memset(tag_str, 0x00, 128);
20793  memset(output, 0x00, 128);
20794  memset(tag_output, 0x00, 16);
20795 
20796  key_len = unhexify( key_str, "c732da000262de558bd3ea65e66e20e11605170c90b67708bda43f40abed74fe" );
20797  pt_len = unhexify( src_str, "7d6c981c30ef87a46f53aecb4c97124fb94b45057635d5bf1d4f3a3bdb534e9ab62b4a425de9dc52537575ed9ff406cfbf75403d3d9cdbd9fcd520d62065f81483427fa27964642cc1a07822da0f6234a689eb30e8425d7709abfd18666c76c963eecef20503ee77c96802c120abea1428cc64a08fc20860527854fecc571a6c" );
20798  iv_len = unhexify( iv_str, "523dd34ea263c31c2215053986626d02" );
20799  add_len = unhexify( add_str, "f170556ac5d38f0661bae33e0826356c8488218903eba1bfa49b16882537ef78283fd9351f37f44a7687049a608c3ddcc82817d4ba96a40d05807a38ee3f2d5cb8b1121db61318fe22bfd3afb319e84c4e2f94570a92433db29bd2193485449c719a2c6030696f53ac729df90678eb018783b25740d806d1ef6980e10d396595" );
20800 
20801  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
20802  if( 0 == 0 )
20803  {
20804  fct_chk( 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 );
20805  hexify( dst_str, output, pt_len );
20806  hexify( tag_str, tag_output, tag_len );
20807 
20808  fct_chk( strcmp( (char *) dst_str, "3470d4544f7bfa3ac0627a56e66c56fa062188440834b9238bd20e89dfc701fe6cfe0bf4ea2387014bd83c63ab7c912e1c0dce7c2d92eaea155f886b574bc94a8f4f275dffe2d84173a05b99d8029c36dd3c35c12709d33f55c3bcd96e9a815f77a4fe8e50639d8f195a526486f1209d7bf7e86ac3dfc4a1d2cbddb6d330e5db" ) == 0 );
20809  fct_chk( strcmp( (char *) tag_str, "5924f3ceff0207fc8ba8179a9925" ) == 0 );
20810  }
20811  }
20812  FCT_TEST_END();
20813 
20814 
20815  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024112_1)
20816  {
20817  unsigned char key_str[128];
20818  unsigned char src_str[128];
20819  unsigned char dst_str[257];
20820  unsigned char iv_str[128];
20821  unsigned char add_str[128];
20822  unsigned char tag_str[128];
20823  unsigned char output[128];
20824  unsigned char tag_output[16];
20825  gcm_context ctx;
20826  unsigned int key_len;
20827  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
20828 
20829  memset(key_str, 0x00, 128);
20830  memset(src_str, 0x00, 128);
20831  memset(dst_str, 0x00, 257);
20832  memset(iv_str, 0x00, 128);
20833  memset(add_str, 0x00, 128);
20834  memset(tag_str, 0x00, 128);
20835  memset(output, 0x00, 128);
20836  memset(tag_output, 0x00, 16);
20837 
20838  key_len = unhexify( key_str, "2684bccf2b845314a0c4b8b5a780f91aa7ed1177539122dc8717c14bb50e2dff" );
20839  pt_len = unhexify( src_str, "1a4174d4e18ae0b6434f35dcd9c86cf158c42ce00ceb12f4356ec118d659820518c326a1b2ab92279d949f74c45219c660cb84fb6b10b14d56a501173fd3b129ac89db0de22874d92bec724e94751f91a817a42a28e8e15672172c0b0db4ead46b14d4bc21ad8f5ba1f9e7e0fcc867700681349b8102a208d76ae4ef7df5b56e" );
20840  iv_len = unhexify( iv_str, "8433b59b41fe0cdc5b30e4e87c5028ec" );
20841  add_len = unhexify( add_str, "280026eeebf05e26e84955e4a36352d4f97f3193dce0795d526d05645bf5d2eec4b92ee8dce54d78fd3fc3e36bc79d5bf9ee3b2699310a75dbc5007bdacb4dc88d06515995f8f5b1aa90cb8fc036b763a5e819db70c091802fb7f24b9c2a68ff194032fffc4ef798936aabccbb43f22a2bbd7e1ab9d0434d443dac4929b84193" );
20842 
20843  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
20844  if( 0 == 0 )
20845  {
20846  fct_chk( 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 );
20847  hexify( dst_str, output, pt_len );
20848  hexify( tag_str, tag_output, tag_len );
20849 
20850  fct_chk( strcmp( (char *) dst_str, "cc155e04472c0872d5ccf8910d34496f380954da7653a1e1d3c460fbbc791c9b82e35176e938b7e21eb4690ed9fca74ba45a03dac4abc4f625ffdfad02e1acccf18b5a1878f911fb6f6e09ce0d4c6a0bb87226e914879a1b3085c30e8328aa6e0d1c49c21b760b82e469981b40ea102f3998c81dd9799f484ab89b19396ab7e1" ) == 0 );
20851  fct_chk( strcmp( (char *) tag_str, "5a80008e6da40c71b316b84ae284" ) == 0 );
20852  }
20853  }
20854  FCT_TEST_END();
20855 
20856 
20857  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024112_2)
20858  {
20859  unsigned char key_str[128];
20860  unsigned char src_str[128];
20861  unsigned char dst_str[257];
20862  unsigned char iv_str[128];
20863  unsigned char add_str[128];
20864  unsigned char tag_str[128];
20865  unsigned char output[128];
20866  unsigned char tag_output[16];
20867  gcm_context ctx;
20868  unsigned int key_len;
20869  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
20870 
20871  memset(key_str, 0x00, 128);
20872  memset(src_str, 0x00, 128);
20873  memset(dst_str, 0x00, 257);
20874  memset(iv_str, 0x00, 128);
20875  memset(add_str, 0x00, 128);
20876  memset(tag_str, 0x00, 128);
20877  memset(output, 0x00, 128);
20878  memset(tag_output, 0x00, 16);
20879 
20880  key_len = unhexify( key_str, "484a33ba0b97c2887a86a1476f274e236eb37a72e05f9e74348248877ea99e98" );
20881  pt_len = unhexify( src_str, "4d81cec14b398257a31ad1e3581c00d05e12b37b71260bdd95bc0b6981b614598ffbbb3ec4bb7deb5673a1020139877122f88504c9c53265706fe76623a9b488a3dfdd4cbc1b7b46c7fce9d7378e164964c0a377337a5c172e5e4de6206375164cd7beb0305d7a90f5c73e12f445326e1bc9ac5acd1bd4bcbe4662524891a2e9" );
20882  iv_len = unhexify( iv_str, "c3a5cc19aef6d64b656d66fad697b829" );
20883  add_len = unhexify( add_str, "30f276f96a50e17b452dcb5e1b4ab666dc7c4c72d0d9ab2abaf77eae2e3bab7dbe5ac005d7eac5480e1bae13646b59155528abdc148b3b71f06d017c4b12d64aa3990cc96941eaac14b60eb347e0be873de2b6fe2b86e2c2fc063b29511b70144ecd315b9491001b122701b9c8cc1d85427b6c60663ccd9d1fa84e1c2f609f36" );
20884 
20885  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
20886  if( 0 == 0 )
20887  {
20888  fct_chk( 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 );
20889  hexify( dst_str, output, pt_len );
20890  hexify( tag_str, tag_output, tag_len );
20891 
20892  fct_chk( strcmp( (char *) dst_str, "579fd8fb50d795b5b208c2d5b0a8b1804f754a30a1003025301655aebcda2d2ff30d29a16d0fb17a28401127750fc87c9e3aa08540817228b049c387253ea2359035b8063ab4bf54504ca5ad93b54b8ac5bd0c1ef3c6769fb1ed239bb76f3e0bc51d356aa91b494d22749c8e4cdb1629e93f7c6e46ff9145916c1275669ae5ba" ) == 0 );
20893  fct_chk( strcmp( (char *) tag_str, "1c39aac1d5ffe7916a08ab2ce279" ) == 0 );
20894  }
20895  }
20896  FCT_TEST_END();
20897 
20898 
20899  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024104_0)
20900  {
20901  unsigned char key_str[128];
20902  unsigned char src_str[128];
20903  unsigned char dst_str[257];
20904  unsigned char iv_str[128];
20905  unsigned char add_str[128];
20906  unsigned char tag_str[128];
20907  unsigned char output[128];
20908  unsigned char tag_output[16];
20909  gcm_context ctx;
20910  unsigned int key_len;
20911  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
20912 
20913  memset(key_str, 0x00, 128);
20914  memset(src_str, 0x00, 128);
20915  memset(dst_str, 0x00, 257);
20916  memset(iv_str, 0x00, 128);
20917  memset(add_str, 0x00, 128);
20918  memset(tag_str, 0x00, 128);
20919  memset(output, 0x00, 128);
20920  memset(tag_output, 0x00, 16);
20921 
20922  key_len = unhexify( key_str, "4a5f5321b515cfcde493148ee4c44c693b1979b3a3ba522a2a80e5d27c93fd1b" );
20923  pt_len = unhexify( src_str, "962b8504feb57ae73e93c2e8962c9562f409c908e51f9904df1623eaa0c6b998db6ee8919d805b6ffcc37da51300c1ae16bca21f8f6f63af989a813ae8fe28c3fb012f003dab7e71b08d757799208806062d62b4ac937712409f9fafff3e3579a4d92d4437a6f0b263e1da7e4651e0a521be5f6f49ff5a0778f07bd5d3dac696" );
20924  iv_len = unhexify( iv_str, "c2cb0166046bad0cf0a107af83921d7a" );
20925  add_len = unhexify( add_str, "e48abfb657ab33f58eeda8c58a20e7e299bc3e7481f704c326529408580f9a5130cf6f7368502d20b03ba6c3b8f6f28c076a3ef7b8e987750dc972be953e712483e6f328da57e4b5c501fa7c720593eb89ff9644fbdc45478f80ee89f096694dcb44a9b3a6aca0904d4aa4e475b4b24771df9fd6ef9557f4f5c842ac241b212f" );
20926 
20927  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
20928  if( 0 == 0 )
20929  {
20930  fct_chk( 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 );
20931  hexify( dst_str, output, pt_len );
20932  hexify( tag_str, tag_output, tag_len );
20933 
20934  fct_chk( strcmp( (char *) dst_str, "11bd55d969603ff3d46355cb19c69557b99825a4c23eeafc8eed8422dab537c0fa9753191c49a6fd9e0d6760ed816a49e7f5704b5936a498544e2bbba7875c513c031f11527ca1b9b579960be6964fba9119dcece8205c174be07ebffada83375678de76fc012b0ee179787b4aa9fb6e2b459575260eb01f23786dc24d1d45ef" ) == 0 );
20935  fct_chk( strcmp( (char *) tag_str, "36853a029b5163ca76c72d4fec" ) == 0 );
20936  }
20937  }
20938  FCT_TEST_END();
20939 
20940 
20941  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024104_1)
20942  {
20943  unsigned char key_str[128];
20944  unsigned char src_str[128];
20945  unsigned char dst_str[257];
20946  unsigned char iv_str[128];
20947  unsigned char add_str[128];
20948  unsigned char tag_str[128];
20949  unsigned char output[128];
20950  unsigned char tag_output[16];
20951  gcm_context ctx;
20952  unsigned int key_len;
20953  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
20954 
20955  memset(key_str, 0x00, 128);
20956  memset(src_str, 0x00, 128);
20957  memset(dst_str, 0x00, 257);
20958  memset(iv_str, 0x00, 128);
20959  memset(add_str, 0x00, 128);
20960  memset(tag_str, 0x00, 128);
20961  memset(output, 0x00, 128);
20962  memset(tag_output, 0x00, 16);
20963 
20964  key_len = unhexify( key_str, "c8f7b7e6295fc8e33740bf2807caeaf4b90817cc3ef3d9f38f704d9f6164e41d" );
20965  pt_len = unhexify( src_str, "4c26e489069b487ce9dc0e295d5e89760401185374041b0efca5bbf758e7d010ccbfe5999e2a817776aa8f49c1e5d43bcdade2989fe5be635dab54cb0e390a21b832b30f688857b9e09c346bcc5397e51cf71acbe1bfcaa1ecd7e87fe5dfde180d951922e60dd8203ff210c995eb54bb981f7e931f0b1f52dce0cf1b2eba503f" );
20966  iv_len = unhexify( iv_str, "903b2eeb9d0b3794acb7439d341cfe0d" );
20967  add_len = unhexify( add_str, "83e99497bfbe9393b065b0b18c13f99b67f1fdd724fd5d70cdccd2b8dd658499cb9f57e1a1fe39634ab0869182de085722a79eaabf057aac7b3f3230f51a2f9b48b49d592f02246dacbe915ff9d9a53f7e5332f7a9d89649050b075c07e5e74f281ca1a0dbe632c0aecf3b1911cd6ec4f8facc2777d0d14784bf5951a1c62c33" );
20968 
20969  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
20970  if( 0 == 0 )
20971  {
20972  fct_chk( 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 );
20973  hexify( dst_str, output, pt_len );
20974  hexify( tag_str, tag_output, tag_len );
20975 
20976  fct_chk( strcmp( (char *) dst_str, "63e2941bf4a13374627be66bdd4e57119149f81f4c1a8a321d27a4a79e7d61e2dcec9d7b13fcccf12f5b059cc209f8414ae81966462a266e92b4b3c25198ee240e0bc6f6197df1e24e8d4379fcae89e6240a7f9c7bab886e79990b846e98e4bacb8b3b17422249943e9973de42da5e38e4eb52830b1facce766b3389a5312476" ) == 0 );
20977  fct_chk( strcmp( (char *) tag_str, "6e31c5db3146ae45ef5d50485e" ) == 0 );
20978  }
20979  }
20980  FCT_TEST_END();
20981 
20982 
20983  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024104_2)
20984  {
20985  unsigned char key_str[128];
20986  unsigned char src_str[128];
20987  unsigned char dst_str[257];
20988  unsigned char iv_str[128];
20989  unsigned char add_str[128];
20990  unsigned char tag_str[128];
20991  unsigned char output[128];
20992  unsigned char tag_output[16];
20993  gcm_context ctx;
20994  unsigned int key_len;
20995  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
20996 
20997  memset(key_str, 0x00, 128);
20998  memset(src_str, 0x00, 128);
20999  memset(dst_str, 0x00, 257);
21000  memset(iv_str, 0x00, 128);
21001  memset(add_str, 0x00, 128);
21002  memset(tag_str, 0x00, 128);
21003  memset(output, 0x00, 128);
21004  memset(tag_output, 0x00, 16);
21005 
21006  key_len = unhexify( key_str, "dec062efc1bd2556b87a81143d025abbaa532c586d5ebb065859a2071f8f07e4" );
21007  pt_len = unhexify( src_str, "02191bcb060e61827dbddac6c2961dbab8812cdc2ac77bf0275628e8e36bae18ad4deb77b2682ade0aef76afd4592173ba29dae4d0735963c803856eaa6f60a6c21785358e87f3c4a91e321c59e04c150297de873679194ba5ca857f7d91ffc358e73810d555ebd4dbd1fe4fbc4ffa4ff38e4b41db9af0a84fe9828708631469" );
21008  iv_len = unhexify( iv_str, "19abd0361443c3ac2a46f2606eeb1a69" );
21009  add_len = unhexify( add_str, "c3785e7c0095726fd1f3ca842057b0ea2baf9c3fe1119c2147609158a2039f26cedf8a44e046955ba7e7cad9f48cb49274fc53b109d7897e080af252e7dc64807c276bcf668d2cd505c9ce8e584609d293ebd2a4515bfbaf78c413d6e29dc90974db38b564ffe9a40d3955dba9f19b6f39bf942669cf80e4676d6c10df566ca1" );
21010 
21011  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
21012  if( 0 == 0 )
21013  {
21014  fct_chk( 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 );
21015  hexify( dst_str, output, pt_len );
21016  hexify( tag_str, tag_output, tag_len );
21017 
21018  fct_chk( strcmp( (char *) dst_str, "91a16c7fe029e3fddacf0809dde7d041c438977b89192e6fed7605d0133f3d9e810355d186432f6529bd2c4cb9dadb4fedf5128cb45e25a3a46bf74ed93f31349f64a69dbe86592d76e437947f1c1d7270d1cffe80afe10ae8523541961eacee1838c168a2ab76703ea4674a68a96b8a298a672ffc140e98e452d501fd57f000" ) == 0 );
21019  fct_chk( strcmp( (char *) tag_str, "5b4071a4be0543aaa59b56de35" ) == 0 );
21020  }
21021  }
21022  FCT_TEST_END();
21023 
21024 
21025  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102496_0)
21026  {
21027  unsigned char key_str[128];
21028  unsigned char src_str[128];
21029  unsigned char dst_str[257];
21030  unsigned char iv_str[128];
21031  unsigned char add_str[128];
21032  unsigned char tag_str[128];
21033  unsigned char output[128];
21034  unsigned char tag_output[16];
21035  gcm_context ctx;
21036  unsigned int key_len;
21037  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
21038 
21039  memset(key_str, 0x00, 128);
21040  memset(src_str, 0x00, 128);
21041  memset(dst_str, 0x00, 257);
21042  memset(iv_str, 0x00, 128);
21043  memset(add_str, 0x00, 128);
21044  memset(tag_str, 0x00, 128);
21045  memset(output, 0x00, 128);
21046  memset(tag_output, 0x00, 16);
21047 
21048  key_len = unhexify( key_str, "9b7b700d978e33ae9311b206347f488e2832fad5ce7e6026ad5e24fb47104fcb" );
21049  pt_len = unhexify( src_str, "37aef6e4200c6abc3d161daaf9dd6ede002ce8c63d9ed54e8ac56bdc8d36906bea663d2857d8d543166ba150827735ec78e37f92e682275e268d377b1880970df232162e55c9311882f889e7d183e5cf4972691c85f81c47e1224b9c97ee3963d75c6a032270ad6d713c999913f0b58a2d4f42b85a3b0b40541a31398cdfb4b0" );
21050  iv_len = unhexify( iv_str, "d0bbc284af767af9a31b863d66cb6138" );
21051  add_len = unhexify( add_str, "dfb87a65ab2d99d7d753042aa47448ad830e546d298d6ad52b85207bbb0cbe8cf3cdb12b3544f1fc228fdae04a241abf9e71de8ae14f2de2c261469c383c682e13582e07cddb1ed9bff1fd2aa0be7978096a914676dfbe7bec6edd927362f656ce1de86229bc511cfec4cda77a1e761e7ab8664e4df08cb820ebdb604c2cdbb0" );
21052 
21053  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
21054  if( 0 == 0 )
21055  {
21056  fct_chk( 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 );
21057  hexify( dst_str, output, pt_len );
21058  hexify( tag_str, tag_output, tag_len );
21059 
21060  fct_chk( strcmp( (char *) dst_str, "dcd5575d94fffc647d4c081e3ce03928651419a32ada2af02de2f58d68fa98eb1fd5ef671875719a9c65b9ecc69513408a79a0a5d57cabd04f8e651f5b8fc1ff42ce58d8a212ac2bcb83c5c53c542c282553a62b4e3d7d4f049ab13172739a0f46e0a2fd9aec54eb0c84141c6b341783754372df69d39e48cc24eb3d9ddb21a9" ) == 0 );
21061  fct_chk( strcmp( (char *) tag_str, "4a7ac79db94b27469b92343a" ) == 0 );
21062  }
21063  }
21064  FCT_TEST_END();
21065 
21066 
21067  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102496_1)
21068  {
21069  unsigned char key_str[128];
21070  unsigned char src_str[128];
21071  unsigned char dst_str[257];
21072  unsigned char iv_str[128];
21073  unsigned char add_str[128];
21074  unsigned char tag_str[128];
21075  unsigned char output[128];
21076  unsigned char tag_output[16];
21077  gcm_context ctx;
21078  unsigned int key_len;
21079  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
21080 
21081  memset(key_str, 0x00, 128);
21082  memset(src_str, 0x00, 128);
21083  memset(dst_str, 0x00, 257);
21084  memset(iv_str, 0x00, 128);
21085  memset(add_str, 0x00, 128);
21086  memset(tag_str, 0x00, 128);
21087  memset(output, 0x00, 128);
21088  memset(tag_output, 0x00, 16);
21089 
21090  key_len = unhexify( key_str, "ce15e61edd9320ceacbf3984d87c707159caa738e7e76285be00b5a95954b523" );
21091  pt_len = unhexify( src_str, "8af4a7d92441ce931815fa4e24d69f66256fec7e62f79a029b684b5db304a46b2a3d3a7ee8d6b7ae38caa7de526d5c0f28dc65a0913a383b7ee1640cbe24997ba95b9b12fa1e9ce9f9100d883c16b6286dce17e381af15113f56197c97fe6b45be00a3df05045f476829d7b303211ac97cf989a18c16e27fbf23570d9d18f04b" );
21092  iv_len = unhexify( iv_str, "b1269c8495ea1469ff41d8154ae6765e" );
21093  add_len = unhexify( add_str, "0ad26a08a5cc2ec825347d7ffd5aac795eb68aa7e22970d991c863fa6d1fa720137aa5cde4e382625a0038e6ed72da3b5003c1b2a953c2b2138e0cf870cca4afb595c0451aa793fb0a2bc43834a0aca1e760590cca765ad672ead975993f82ae6765c5afbddc6062d7c4babebf650ab097db1a1d9a2a99e8fd2e0eb8a7b916f6" );
21094 
21095  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
21096  if( 0 == 0 )
21097  {
21098  fct_chk( 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 );
21099  hexify( dst_str, output, pt_len );
21100  hexify( tag_str, tag_output, tag_len );
21101 
21102  fct_chk( strcmp( (char *) dst_str, "ad0ab4e77257866e4a57cf44fa4049428e56a6e8b8fd47b4cd00bfce84fa8f5a43f1df2061b0a37311b4a1436bad0d61d52ced5e262ed41a7eb125d61cec2e3fbaa95e533b43f318048096ebc8466f0cd609bb5e7c3fc6e5701aace546618a170f88c0b7ed76b63759ca4e4b931a86ac379dd12ad2cba7d47a19a3ae7c242fb0" ) == 0 );
21103  fct_chk( strcmp( (char *) tag_str, "fb1e988f9c97358a17e35e6f" ) == 0 );
21104  }
21105  }
21106  FCT_TEST_END();
21107 
21108 
21109  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102496_2)
21110  {
21111  unsigned char key_str[128];
21112  unsigned char src_str[128];
21113  unsigned char dst_str[257];
21114  unsigned char iv_str[128];
21115  unsigned char add_str[128];
21116  unsigned char tag_str[128];
21117  unsigned char output[128];
21118  unsigned char tag_output[16];
21119  gcm_context ctx;
21120  unsigned int key_len;
21121  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
21122 
21123  memset(key_str, 0x00, 128);
21124  memset(src_str, 0x00, 128);
21125  memset(dst_str, 0x00, 257);
21126  memset(iv_str, 0x00, 128);
21127  memset(add_str, 0x00, 128);
21128  memset(tag_str, 0x00, 128);
21129  memset(output, 0x00, 128);
21130  memset(tag_output, 0x00, 16);
21131 
21132  key_len = unhexify( key_str, "aef24b8205d4085d978505f04724293c2819ef9f3f03a6c758078690fc4bf7c8" );
21133  pt_len = unhexify( src_str, "db26453170db2f984312e0cf961d1a7df1154f0525c31f166be5c9f516736501f9f2dd8096a69b6441888ce27aaceacb0b365a38e4e01e2e34027c023206e814f22d46fd2fa69f87509ddced4b8852a76b2532b92f069b8c922ac13b2b7f19cb7c524657a4ee6e989cf2598bef674aa31576776853fb7f9a2704d6b3ee7fbcbb" );
21134  iv_len = unhexify( iv_str, "81456baa337c3dfd162d9c5f72a2e216" );
21135  add_len = unhexify( add_str, "484a5f4772643cf74ccdced0e5d80862f9300f26ae3139968649d3d7bb761b313f2ba63798b2040d397c3d1569285fee8498fd9254851c15b98af5bd351fa72e7d574c62ede0d728e1279e8b4e4784fd63ea7851e99d1d2356bcbf868528f8d0a90fc3b884ece631648d916ec97abadca1b0dd7670e6ad42245021570582ec7c" );
21136 
21137  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
21138  if( 0 == 0 )
21139  {
21140  fct_chk( 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 );
21141  hexify( dst_str, output, pt_len );
21142  hexify( tag_str, tag_output, tag_len );
21143 
21144  fct_chk( strcmp( (char *) dst_str, "da95c61cd2bb88fea78c059c254d2b949d4fc291c73ac178ace44c1e6a339f64931c857d3a7cb276a04993620adb6918dfd3f9083edad384a8e6c1d4799d526a1c969d8deb0e2667d6d06f559baf914b49fc463244528aa6522d19699065438d939521d7d7bb149835298f2054bcaae6d786f6dde133b640697a3d37c697579a" ) == 0 );
21145  fct_chk( strcmp( (char *) tag_str, "bc1c1cbcad2e1a66ace079a2" ) == 0 );
21146  }
21147  }
21148  FCT_TEST_END();
21149 
21150 
21151  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102464_0)
21152  {
21153  unsigned char key_str[128];
21154  unsigned char src_str[128];
21155  unsigned char dst_str[257];
21156  unsigned char iv_str[128];
21157  unsigned char add_str[128];
21158  unsigned char tag_str[128];
21159  unsigned char output[128];
21160  unsigned char tag_output[16];
21161  gcm_context ctx;
21162  unsigned int key_len;
21163  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
21164 
21165  memset(key_str, 0x00, 128);
21166  memset(src_str, 0x00, 128);
21167  memset(dst_str, 0x00, 257);
21168  memset(iv_str, 0x00, 128);
21169  memset(add_str, 0x00, 128);
21170  memset(tag_str, 0x00, 128);
21171  memset(output, 0x00, 128);
21172  memset(tag_output, 0x00, 16);
21173 
21174  key_len = unhexify( key_str, "9685aea9aaebbd691e679779034729306d5887bee4c1f90f6ee3a397a0ff3ece" );
21175  pt_len = unhexify( src_str, "ae3b2fa1e209f72c167eb16bc15b7669b87d4ab516e428157810b87a83e90d56e267bd4996522b5b22c2a349d3765ca27ea27057dd71f7c18ddd053033bd780b6cb689f48c383e9c717b9b265cb9e32c70c4a7d8fb933e986d996b5ad914cd645b74c47ac3a0de952ee3fc73ada83d896da7ca0b2a0b10e4f701fa13cba9ec50" );
21176  iv_len = unhexify( iv_str, "b1bc140531ae8c69e2ffc784e0988038" );
21177  add_len = unhexify( add_str, "294ff858fa6efc82ca3be4d05332bbb951a71a7ddfa4b78472e1582b445312eec11793d8d6e1e858d9cb078b5fc9083ac8a3e3bd82964cb07c08450567922299f68fd47663c7a77c29f2b5347f229301433d5a75263158a0d80095859e7e45476b99b23412046bfbe4eafff9f7820ba49919d2c987cf00c286c784e7669d8fe8" );
21178 
21179  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
21180  if( 0 == 0 )
21181  {
21182  fct_chk( 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 );
21183  hexify( dst_str, output, pt_len );
21184  hexify( tag_str, tag_output, tag_len );
21185 
21186  fct_chk( strcmp( (char *) dst_str, "6575128b576e68f7b3709e325b3d616783b42ff7f7631eb62b90cb0c8a86bd324756f43af53c33cbdaf9cf64ea94cf1b7fab5003f00c1d07f3fc8eb1931d759f9c43477ba22311a111488092c42b7786facf42b861a824cd1bcdc603a77d11253f15206a929a3e16e8737d080b8e5f0da8896226989a9964d72e491187250472" ) == 0 );
21187  fct_chk( strcmp( (char *) tag_str, "f78c4dd37c06b197" ) == 0 );
21188  }
21189  }
21190  FCT_TEST_END();
21191 
21192 
21193  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102464_1)
21194  {
21195  unsigned char key_str[128];
21196  unsigned char src_str[128];
21197  unsigned char dst_str[257];
21198  unsigned char iv_str[128];
21199  unsigned char add_str[128];
21200  unsigned char tag_str[128];
21201  unsigned char output[128];
21202  unsigned char tag_output[16];
21203  gcm_context ctx;
21204  unsigned int key_len;
21205  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
21206 
21207  memset(key_str, 0x00, 128);
21208  memset(src_str, 0x00, 128);
21209  memset(dst_str, 0x00, 257);
21210  memset(iv_str, 0x00, 128);
21211  memset(add_str, 0x00, 128);
21212  memset(tag_str, 0x00, 128);
21213  memset(output, 0x00, 128);
21214  memset(tag_output, 0x00, 16);
21215 
21216  key_len = unhexify( key_str, "3adf0da24394a98c7beae01d28f261a9cbd887aeeecc0c29e84540264d5a6bad" );
21217  pt_len = unhexify( src_str, "8cf023d717b0f82f2b81750b53fb665c1c90f4740af4a3534b36b847df33ba5eec19eb24ead70a4b613a82572878216181d59b0c4c4df99be08d021cf182724d8ff5ec4e85884d0f69c16238fbbdbc5529ffcc4e418405e4e95139f79d3115a1ac56820cd39fc413ab72f7d447f947cb0541fc2be261f1246c0a786199013b22" );
21218  iv_len = unhexify( iv_str, "ad41288817577316df2d881ac93fcdef" );
21219  add_len = unhexify( add_str, "ad33ce922372fbe3531c0dece69f85f18eb1bbfb09a178403832308de0e54b1010db2636c4b7d9caa478138f61db5149c9fd7f3b45b7a1876729fe67622a37f0b322ef9cf6043b301a5d4c81e6f347d22bd3e40722059d3be945845c6b0629fbcfcaf885c7f393aa81f242c48c61a439574761ef6b671972cac664403250750e" );
21220 
21221  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
21222  if( 0 == 0 )
21223  {
21224  fct_chk( 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 );
21225  hexify( dst_str, output, pt_len );
21226  hexify( tag_str, tag_output, tag_len );
21227 
21228  fct_chk( strcmp( (char *) dst_str, "9d465e9c4228323946b1261892243d8455edb9eb8633d026d4033fa3965d20730979ba6952c0f6f2c5768f03c19256b64bc759d2e7b92424bbc668308504ba34384c2bb37baaf91a3a4f0952a050a3d69853141b49e86eda3bf0c4db4ebcd1c41e7f13eca20bf574a47ec45b8c98def17c0741805bf8f37923ba2b5221428578" ) == 0 );
21229  fct_chk( strcmp( (char *) tag_str, "507618cec6d03964" ) == 0 );
21230  }
21231  }
21232  FCT_TEST_END();
21233 
21234 
21235  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102464_2)
21236  {
21237  unsigned char key_str[128];
21238  unsigned char src_str[128];
21239  unsigned char dst_str[257];
21240  unsigned char iv_str[128];
21241  unsigned char add_str[128];
21242  unsigned char tag_str[128];
21243  unsigned char output[128];
21244  unsigned char tag_output[16];
21245  gcm_context ctx;
21246  unsigned int key_len;
21247  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
21248 
21249  memset(key_str, 0x00, 128);
21250  memset(src_str, 0x00, 128);
21251  memset(dst_str, 0x00, 257);
21252  memset(iv_str, 0x00, 128);
21253  memset(add_str, 0x00, 128);
21254  memset(tag_str, 0x00, 128);
21255  memset(output, 0x00, 128);
21256  memset(tag_output, 0x00, 16);
21257 
21258  key_len = unhexify( key_str, "9ef64b4132db54668568e2ae66ab61f62a820c7002a67a7e42006280a373feba" );
21259  pt_len = unhexify( src_str, "4b96dce753273188c4cca3386a7415d5d9263757376e1f32797df47992e92e1bc0ab0833363b3acffde22602d4e47307bc8f252944414a15e1398693fd3b8bf4d8101cdcf70ce2c9de8cb7f5bb17cd83f09b1bc78ba07c34b9214e250c5940e9794199cb392309027d5ab4f32b51c533db6732024bd412f2cb0c5178d5296aa5" );
21260  iv_len = unhexify( iv_str, "07a86dbe2cce040eccdad79b3d211ecc" );
21261  add_len = unhexify( add_str, "af7a75748ee293015b600ca82ccc7718f4ecc20c3a2357ee02fb726330a0d79ca8bb97979bc0c89f4c60d7154f8bd29ba6ec5f2f4be286ea8a258cf6bd39b4f42d6db8e70c99ec3af26bb4d8003dc6fd0fdfbbc620d511d4d5f09ddf975a1663ac2979ae0978b0bc1e7bfcd660ae4ac7f1a8f6d8ee35752ed59a604f07dfda53" );
21262 
21263  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
21264  if( 0 == 0 )
21265  {
21266  fct_chk( 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 );
21267  hexify( dst_str, output, pt_len );
21268  hexify( tag_str, tag_output, tag_len );
21269 
21270  fct_chk( strcmp( (char *) dst_str, "e3e862146b6fb48b01ababc462dd560298eea7bfe5f3248e28a908d1de08c7e91fcf63922c394e7a51b64f4382225093e78598c050e588ff4ad38f3e83dc07b77ce569c6ab8f8a9cb0056b3155aa1503cebeb64c86d6d9cdbb178ea9a01a8ba33a1c48beb92ee4cf60e7dedf986019e19089cd186c98c229b0ff42c9e1aca571" ) == 0 );
21271  fct_chk( strcmp( (char *) tag_str, "8614c216055c0660" ) == 0 );
21272  }
21273  }
21274  FCT_TEST_END();
21275 
21276 
21277  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102432_0)
21278  {
21279  unsigned char key_str[128];
21280  unsigned char src_str[128];
21281  unsigned char dst_str[257];
21282  unsigned char iv_str[128];
21283  unsigned char add_str[128];
21284  unsigned char tag_str[128];
21285  unsigned char output[128];
21286  unsigned char tag_output[16];
21287  gcm_context ctx;
21288  unsigned int key_len;
21289  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
21290 
21291  memset(key_str, 0x00, 128);
21292  memset(src_str, 0x00, 128);
21293  memset(dst_str, 0x00, 257);
21294  memset(iv_str, 0x00, 128);
21295  memset(add_str, 0x00, 128);
21296  memset(tag_str, 0x00, 128);
21297  memset(output, 0x00, 128);
21298  memset(tag_output, 0x00, 16);
21299 
21300  key_len = unhexify( key_str, "f14ac79f35bc5a685433eea5bb7fd69fc959aabda24cbd8b7795fb2e41f90ab0" );
21301  pt_len = unhexify( src_str, "8a20da14819079960b77ed5e548d0aa0bdcffb752817c1abe4195e612cfbb58c8e5a8af69f75bad10ee8afdf0b0d5c46c4dc11c32bff16d5e7e82e77fd80e475c6a5a0be36718af232697ab22314306b8ee32484b3461da657710c06170e80a6a8844f898c2be29366c8430f2392d100ffd419603cbce406dc7315577e6e9ee2" );
21302  iv_len = unhexify( iv_str, "353e1d08edce44c966430513cb7a0383" );
21303  add_len = unhexify( add_str, "cb1dde4ff5a6867038c170192fc2d292f5bb349d5b9a903cf3d88c09ce78fb1f4a776ff7588a25abb5e5f6a44791d7296afef3f32ed31db1def37dd25be0570a204955121f9c65b79a3ea88fc452dbcb82719243c11bc27e3408adf802b6e8b4e701ee4e9dfd140cb3277bf605bd5fb757d2325f7805fc6f0d1ea5a6207fac5f" );
21304 
21305  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
21306  if( 0 == 0 )
21307  {
21308  fct_chk( 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 );
21309  hexify( dst_str, output, pt_len );
21310  hexify( tag_str, tag_output, tag_len );
21311 
21312  fct_chk( strcmp( (char *) dst_str, "49b5e4ea0421034c074cde67dd39a0310c3f31e8138672ba2ecc0777be542f1c6529836d5206b79dac83d96aab56787a35c584b31228f007f11630328c3f40a57be37487689ee5babb576e7d14ff0f1f1ba6e4be11637352a4336327681058b99df2e44f9772de4e0e456d2e34dec5eeb335b238e862841d166e0612cc0f18f3" ) == 0 );
21313  fct_chk( strcmp( (char *) tag_str, "88aed643" ) == 0 );
21314  }
21315  }
21316  FCT_TEST_END();
21317 
21318 
21319  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102432_1)
21320  {
21321  unsigned char key_str[128];
21322  unsigned char src_str[128];
21323  unsigned char dst_str[257];
21324  unsigned char iv_str[128];
21325  unsigned char add_str[128];
21326  unsigned char tag_str[128];
21327  unsigned char output[128];
21328  unsigned char tag_output[16];
21329  gcm_context ctx;
21330  unsigned int key_len;
21331  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
21332 
21333  memset(key_str, 0x00, 128);
21334  memset(src_str, 0x00, 128);
21335  memset(dst_str, 0x00, 257);
21336  memset(iv_str, 0x00, 128);
21337  memset(add_str, 0x00, 128);
21338  memset(tag_str, 0x00, 128);
21339  memset(output, 0x00, 128);
21340  memset(tag_output, 0x00, 16);
21341 
21342  key_len = unhexify( key_str, "b55ac909e73989e310ae37d13c54bbd5a126f419a3b01a2ad8961d89bd247f81" );
21343  pt_len = unhexify( src_str, "8a663e8b21a027c4a9545d145d42d9c67b4fcd5d0e39aa68822aedbd609e2c681f60e6315035321de739858b2b082bc05551fe9b8456c2e89c6151282c6068b915eae5762e4d6d765d667de58a315e061b3d60035ada50f59258eb6e2a1cd6b52eea7eb9d404fd96e71f19feff65b74a4b4f07061adf7c1b0e54e2ece7a2cd49" );
21344  iv_len = unhexify( iv_str, "9328abab0d3f63c75ddafd8559d96b4f" );
21345  add_len = unhexify( add_str, "cbae20aa1996abb62471aac91cd78080953fbe3b165d4c9435832ef1106e7e3424db8850f44a431c289ab4f2bbbea9e5c0c7aaf2e8de69c0ced176283662cadd280d8fda0c859551f0f90893ca57695c95803a1546826922ac78703d7ccae285b7ccd4bbab551756cccc6869dcf34b6af8d8b80c25c6fb1d2caa7f28161fb854" );
21346 
21347  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
21348  if( 0 == 0 )
21349  {
21350  fct_chk( 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 );
21351  hexify( dst_str, output, pt_len );
21352  hexify( tag_str, tag_output, tag_len );
21353 
21354  fct_chk( strcmp( (char *) dst_str, "457e13ff4eeaaae75d14bbf1bff91706c3168b9b146aed29dbe31b12ad90c1c158833be95701229ac6e4a13997e0a2d961d4a0021c4d8920ec54a9a935e5ea73b17e8fa60559df76bd07d966dfa7d86d1a77a313228b2ae7f66b5b696726c02af2c808bf75e0b9591a220e762f57c680ca68f20b2b5413b07731bbd49de039bf" ) == 0 );
21355  fct_chk( strcmp( (char *) tag_str, "5de0434a" ) == 0 );
21356  }
21357  }
21358  FCT_TEST_END();
21359 
21360 
21361  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102432_2)
21362  {
21363  unsigned char key_str[128];
21364  unsigned char src_str[128];
21365  unsigned char dst_str[257];
21366  unsigned char iv_str[128];
21367  unsigned char add_str[128];
21368  unsigned char tag_str[128];
21369  unsigned char output[128];
21370  unsigned char tag_output[16];
21371  gcm_context ctx;
21372  unsigned int key_len;
21373  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
21374 
21375  memset(key_str, 0x00, 128);
21376  memset(src_str, 0x00, 128);
21377  memset(dst_str, 0x00, 257);
21378  memset(iv_str, 0x00, 128);
21379  memset(add_str, 0x00, 128);
21380  memset(tag_str, 0x00, 128);
21381  memset(output, 0x00, 128);
21382  memset(tag_output, 0x00, 16);
21383 
21384  key_len = unhexify( key_str, "1477e189fb3546efac5cc144f25e132ffd0081be76e912e25cbce7ad63f1c2c4" );
21385  pt_len = unhexify( src_str, "7bd3ea956f4b938ebe83ef9a75ddbda16717e924dd4e45202560bf5f0cffbffcdd23be3ae08ff30503d698ed08568ff6b3f6b9fdc9ea79c8e53a838cc8566a8b52ce7c21b2b067e778925a066c970a6c37b8a6cfc53145f24bf698c352078a7f0409b53196e00c619237454c190b970842bb6629c0def7f166d19565127cbce0" );
21386  iv_len = unhexify( iv_str, "c109f35893aff139db8ed51c85fee237" );
21387  add_len = unhexify( add_str, "8f7f9f71a4b2bb0aaf55fced4eb43c57415526162070919b5f8c08904942181820d5847dfd54d9ba707c5e893a888d5a38d0130f7f52c1f638b0119cf7bc5f2b68f51ff5168802e561dff2cf9c5310011c809eba002b2fa348718e8a5cb732056273cc7d01cce5f5837ab0b09b6c4c5321a7f30a3a3cd21f29da79fce3f3728b" );
21388 
21389  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
21390  if( 0 == 0 )
21391  {
21392  fct_chk( 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 );
21393  hexify( dst_str, output, pt_len );
21394  hexify( tag_str, tag_output, tag_len );
21395 
21396  fct_chk( strcmp( (char *) dst_str, "7841e3d78746f07e5614233df7175931e3c257e09ebd7b78545fae484d835ffe3db3825d3aa1e5cc1541fe6cac90769dc5aaeded0c148b5b4f397990eb34b39ee7881804e5a66ccc8d4afe907948780c4e646cc26479e1da874394cb3537a8f303e0aa13bd3cc36f6cc40438bcd41ef8b6a1cdee425175dcd17ee62611d09b02" ) == 0 );
21397  fct_chk( strcmp( (char *) tag_str, "cb13ce59" ) == 0 );
21398  }
21399  }
21400  FCT_TEST_END();
21401 
21402  }
21403  FCT_SUITE_END();
21404 
21405 #endif /* POLARSSL_GCM_C */
21406 
21407 }
21408 FCT_END();
21409