PolarSSL v1.2.8
test_suite_gcm.encrypt_256.c
Go to the documentation of this file.
1 #include "fct.h"
2 #include <polarssl/config.h>
3 
4 #include <polarssl/gcm.h>
5 
6 #ifdef _MSC_VER
7 #include <basetsd.h>
8 typedef UINT32 uint32_t;
9 #else
10 #include <inttypes.h>
11 #endif
12 
13 /*
14  * 32-bit integer manipulation macros (big endian)
15  */
16 #ifndef GET_UINT32_BE
17 #define GET_UINT32_BE(n,b,i) \
18 { \
19  (n) = ( (uint32_t) (b)[(i) ] << 24 ) \
20  | ( (uint32_t) (b)[(i) + 1] << 16 ) \
21  | ( (uint32_t) (b)[(i) + 2] << 8 ) \
22  | ( (uint32_t) (b)[(i) + 3] ); \
23 }
24 #endif
25 
26 #ifndef PUT_UINT32_BE
27 #define PUT_UINT32_BE(n,b,i) \
28 { \
29  (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \
30  (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \
31  (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \
32  (b)[(i) + 3] = (unsigned char) ( (n) ); \
33 }
34 #endif
35 
36 int unhexify(unsigned char *obuf, const char *ibuf)
37 {
38  unsigned char c, c2;
39  int len = strlen(ibuf) / 2;
40  assert(!(strlen(ibuf) %1)); // must be even number of bytes
41 
42  while (*ibuf != 0)
43  {
44  c = *ibuf++;
45  if( c >= '0' && c <= '9' )
46  c -= '0';
47  else if( c >= 'a' && c <= 'f' )
48  c -= 'a' - 10;
49  else if( c >= 'A' && c <= 'F' )
50  c -= 'A' - 10;
51  else
52  assert( 0 );
53 
54  c2 = *ibuf++;
55  if( c2 >= '0' && c2 <= '9' )
56  c2 -= '0';
57  else if( c2 >= 'a' && c2 <= 'f' )
58  c2 -= 'a' - 10;
59  else if( c2 >= 'A' && c2 <= 'F' )
60  c2 -= 'A' - 10;
61  else
62  assert( 0 );
63 
64  *obuf++ = ( c << 4 ) | c2;
65  }
66 
67  return len;
68 }
69 
70 void hexify(unsigned char *obuf, const unsigned char *ibuf, int len)
71 {
72  unsigned char l, h;
73 
74  while (len != 0)
75  {
76  h = (*ibuf) / 16;
77  l = (*ibuf) % 16;
78 
79  if( h < 10 )
80  *obuf++ = '0' + h;
81  else
82  *obuf++ = 'a' + h - 10;
83 
84  if( l < 10 )
85  *obuf++ = '0' + l;
86  else
87  *obuf++ = 'a' + l - 10;
88 
89  ++ibuf;
90  len--;
91  }
92 }
93 
103 static int rnd_std_rand( void *rng_state, unsigned char *output, size_t len )
104 {
105  size_t i;
106 
107  if( rng_state != NULL )
108  rng_state = NULL;
109 
110  for( i = 0; i < len; ++i )
111  output[i] = rand();
112 
113  return( 0 );
114 }
115 
121 static int rnd_zero_rand( void *rng_state, unsigned char *output, size_t len )
122 {
123  if( rng_state != NULL )
124  rng_state = NULL;
125 
126  memset( output, 0, len );
127 
128  return( 0 );
129 }
130 
131 typedef struct
132 {
133  unsigned char *buf;
134  size_t length;
135 } rnd_buf_info;
136 
148 static int rnd_buffer_rand( void *rng_state, unsigned char *output, size_t len )
149 {
150  rnd_buf_info *info = (rnd_buf_info *) rng_state;
151  size_t use_len;
152 
153  if( rng_state == NULL )
154  return( rnd_std_rand( NULL, output, len ) );
155 
156  use_len = len;
157  if( len > info->length )
158  use_len = info->length;
159 
160  if( use_len )
161  {
162  memcpy( output, info->buf, use_len );
163  info->buf += use_len;
164  info->length -= use_len;
165  }
166 
167  if( len - use_len > 0 )
168  return( rnd_std_rand( NULL, output + use_len, len - use_len ) );
169 
170  return( 0 );
171 }
172 
180 typedef struct
181 {
182  uint32_t key[16];
183  uint32_t v0, v1;
185 
194 static int rnd_pseudo_rand( void *rng_state, unsigned char *output, size_t len )
195 {
196  rnd_pseudo_info *info = (rnd_pseudo_info *) rng_state;
197  uint32_t i, *k, sum, delta=0x9E3779B9;
198  unsigned char result[4];
199 
200  if( rng_state == NULL )
201  return( rnd_std_rand( NULL, output, len ) );
202 
203  k = info->key;
204 
205  while( len > 0 )
206  {
207  size_t use_len = ( len > 4 ) ? 4 : len;
208  sum = 0;
209 
210  for( i = 0; i < 32; i++ )
211  {
212  info->v0 += (((info->v1 << 4) ^ (info->v1 >> 5)) + info->v1) ^ (sum + k[sum & 3]);
213  sum += delta;
214  info->v1 += (((info->v0 << 4) ^ (info->v0 >> 5)) + info->v0) ^ (sum + k[(sum>>11) & 3]);
215  }
216 
217  PUT_UINT32_BE( info->v0, result, 0 );
218  memcpy( output, result, use_len );
219  len -= use_len;
220  }
221 
222  return( 0 );
223 }
224 
225 
227 {
228 #ifdef POLARSSL_GCM_C
229 
230 
231  FCT_SUITE_BGN(test_suite_gcm)
232  {
233 
234  FCT_TEST_BGN(gcm_nist_validation_aes_25612800128_0)
235  {
236  unsigned char key_str[128];
237  unsigned char src_str[128];
238  unsigned char dst_str[257];
239  unsigned char iv_str[128];
240  unsigned char add_str[128];
241  unsigned char tag_str[128];
242  unsigned char output[128];
243  unsigned char tag_output[16];
244  gcm_context ctx;
245  unsigned int key_len;
246  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
247 
248  memset(key_str, 0x00, 128);
249  memset(src_str, 0x00, 128);
250  memset(dst_str, 0x00, 257);
251  memset(iv_str, 0x00, 128);
252  memset(add_str, 0x00, 128);
253  memset(tag_str, 0x00, 128);
254  memset(output, 0x00, 128);
255  memset(tag_output, 0x00, 16);
256 
257  key_len = unhexify( key_str, "fb8094dd2eddb3d8004bb79134023ca2be4de9b668a9e4608abdf2130e8becb8" );
258  pt_len = unhexify( src_str, "" );
259  iv_len = unhexify( iv_str, "491a14e13b591cf2f39da96b6882b5e5" );
260  add_len = unhexify( add_str, "" );
261 
262  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
263  if( 0 == 0 )
264  {
265  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
266  hexify( dst_str, output, pt_len );
267  hexify( tag_str, tag_output, tag_len );
268 
269  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
270  fct_chk( strcmp( (char *) tag_str, "80883f2c925434a5edfcefd5b123d520" ) == 0 );
271  }
272  }
273  FCT_TEST_END();
274 
275 
276  FCT_TEST_BGN(gcm_nist_validation_aes_25612800128_1)
277  {
278  unsigned char key_str[128];
279  unsigned char src_str[128];
280  unsigned char dst_str[257];
281  unsigned char iv_str[128];
282  unsigned char add_str[128];
283  unsigned char tag_str[128];
284  unsigned char output[128];
285  unsigned char tag_output[16];
286  gcm_context ctx;
287  unsigned int key_len;
288  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
289 
290  memset(key_str, 0x00, 128);
291  memset(src_str, 0x00, 128);
292  memset(dst_str, 0x00, 257);
293  memset(iv_str, 0x00, 128);
294  memset(add_str, 0x00, 128);
295  memset(tag_str, 0x00, 128);
296  memset(output, 0x00, 128);
297  memset(tag_output, 0x00, 16);
298 
299  key_len = unhexify( key_str, "725313f4cb3f6a0d29cefc174b7e4f43cef11b761ef75e1995cb64c1306795f1" );
300  pt_len = unhexify( src_str, "" );
301  iv_len = unhexify( iv_str, "27d1ed08aba23d79fc49ad8d92a2a0ea" );
302  add_len = unhexify( add_str, "" );
303 
304  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
305  if( 0 == 0 )
306  {
307  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
308  hexify( dst_str, output, pt_len );
309  hexify( tag_str, tag_output, tag_len );
310 
311  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
312  fct_chk( strcmp( (char *) tag_str, "d5d6637ba35ef2ad88e9725f938d3d2d" ) == 0 );
313  }
314  }
315  FCT_TEST_END();
316 
317 
318  FCT_TEST_BGN(gcm_nist_validation_aes_25612800128_2)
319  {
320  unsigned char key_str[128];
321  unsigned char src_str[128];
322  unsigned char dst_str[257];
323  unsigned char iv_str[128];
324  unsigned char add_str[128];
325  unsigned char tag_str[128];
326  unsigned char output[128];
327  unsigned char tag_output[16];
328  gcm_context ctx;
329  unsigned int key_len;
330  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
331 
332  memset(key_str, 0x00, 128);
333  memset(src_str, 0x00, 128);
334  memset(dst_str, 0x00, 257);
335  memset(iv_str, 0x00, 128);
336  memset(add_str, 0x00, 128);
337  memset(tag_str, 0x00, 128);
338  memset(output, 0x00, 128);
339  memset(tag_output, 0x00, 16);
340 
341  key_len = unhexify( key_str, "4e766584ce0e885e1bba1327e5335796de0831a40f74a5cec178081dd15bfd10" );
342  pt_len = unhexify( src_str, "" );
343  iv_len = unhexify( iv_str, "cece0dea024ff47851af0500d146cbfe" );
344  add_len = unhexify( add_str, "" );
345 
346  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
347  if( 0 == 0 )
348  {
349  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
350  hexify( dst_str, output, pt_len );
351  hexify( tag_str, tag_output, tag_len );
352 
353  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
354  fct_chk( strcmp( (char *) tag_str, "1abe16eeab56bd0fb1ab909b8d528771" ) == 0 );
355  }
356  }
357  FCT_TEST_END();
358 
359 
360  FCT_TEST_BGN(gcm_nist_validation_aes_25612800120_0)
361  {
362  unsigned char key_str[128];
363  unsigned char src_str[128];
364  unsigned char dst_str[257];
365  unsigned char iv_str[128];
366  unsigned char add_str[128];
367  unsigned char tag_str[128];
368  unsigned char output[128];
369  unsigned char tag_output[16];
370  gcm_context ctx;
371  unsigned int key_len;
372  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
373 
374  memset(key_str, 0x00, 128);
375  memset(src_str, 0x00, 128);
376  memset(dst_str, 0x00, 257);
377  memset(iv_str, 0x00, 128);
378  memset(add_str, 0x00, 128);
379  memset(tag_str, 0x00, 128);
380  memset(output, 0x00, 128);
381  memset(tag_output, 0x00, 16);
382 
383  key_len = unhexify( key_str, "ce7f2207f83a952451e714ba3807ddb3ed67c2739a628980411aa68366b1f2f5" );
384  pt_len = unhexify( src_str, "" );
385  iv_len = unhexify( iv_str, "652fd951ace288db397020687135a5d1" );
386  add_len = unhexify( add_str, "" );
387 
388  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
389  if( 0 == 0 )
390  {
391  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
392  hexify( dst_str, output, pt_len );
393  hexify( tag_str, tag_output, tag_len );
394 
395  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
396  fct_chk( strcmp( (char *) tag_str, "985227b14de16722987a3d34976442" ) == 0 );
397  }
398  }
399  FCT_TEST_END();
400 
401 
402  FCT_TEST_BGN(gcm_nist_validation_aes_25612800120_1)
403  {
404  unsigned char key_str[128];
405  unsigned char src_str[128];
406  unsigned char dst_str[257];
407  unsigned char iv_str[128];
408  unsigned char add_str[128];
409  unsigned char tag_str[128];
410  unsigned char output[128];
411  unsigned char tag_output[16];
412  gcm_context ctx;
413  unsigned int key_len;
414  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
415 
416  memset(key_str, 0x00, 128);
417  memset(src_str, 0x00, 128);
418  memset(dst_str, 0x00, 257);
419  memset(iv_str, 0x00, 128);
420  memset(add_str, 0x00, 128);
421  memset(tag_str, 0x00, 128);
422  memset(output, 0x00, 128);
423  memset(tag_output, 0x00, 16);
424 
425  key_len = unhexify( key_str, "855f8fa4ec6a1206173509d504d0b29dfbfbfa9aa528254b189cd72e6ebc1c1f" );
426  pt_len = unhexify( src_str, "" );
427  iv_len = unhexify( iv_str, "1ad1507e6463e4e2e1a63155ac0e638f" );
428  add_len = unhexify( add_str, "" );
429 
430  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
431  if( 0 == 0 )
432  {
433  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
434  hexify( dst_str, output, pt_len );
435  hexify( tag_str, tag_output, tag_len );
436 
437  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
438  fct_chk( strcmp( (char *) tag_str, "693146a8b833f324c1d4cbeeb8c146" ) == 0 );
439  }
440  }
441  FCT_TEST_END();
442 
443 
444  FCT_TEST_BGN(gcm_nist_validation_aes_25612800120_2)
445  {
446  unsigned char key_str[128];
447  unsigned char src_str[128];
448  unsigned char dst_str[257];
449  unsigned char iv_str[128];
450  unsigned char add_str[128];
451  unsigned char tag_str[128];
452  unsigned char output[128];
453  unsigned char tag_output[16];
454  gcm_context ctx;
455  unsigned int key_len;
456  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
457 
458  memset(key_str, 0x00, 128);
459  memset(src_str, 0x00, 128);
460  memset(dst_str, 0x00, 257);
461  memset(iv_str, 0x00, 128);
462  memset(add_str, 0x00, 128);
463  memset(tag_str, 0x00, 128);
464  memset(output, 0x00, 128);
465  memset(tag_output, 0x00, 16);
466 
467  key_len = unhexify( key_str, "ef8dd1294a85dd39e366f65e1076d53e046188c06c96b2c9e84ebc81f5c9f550" );
468  pt_len = unhexify( src_str, "" );
469  iv_len = unhexify( iv_str, "9698a07447552d1a4ecd2b4c47858f06" );
470  add_len = unhexify( add_str, "" );
471 
472  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
473  if( 0 == 0 )
474  {
475  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
476  hexify( dst_str, output, pt_len );
477  hexify( tag_str, tag_output, tag_len );
478 
479  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
480  fct_chk( strcmp( (char *) tag_str, "b00590cac6e398eeb3dcb98abe1912" ) == 0 );
481  }
482  }
483  FCT_TEST_END();
484 
485 
486  FCT_TEST_BGN(gcm_nist_validation_aes_25612800112_0)
487  {
488  unsigned char key_str[128];
489  unsigned char src_str[128];
490  unsigned char dst_str[257];
491  unsigned char iv_str[128];
492  unsigned char add_str[128];
493  unsigned char tag_str[128];
494  unsigned char output[128];
495  unsigned char tag_output[16];
496  gcm_context ctx;
497  unsigned int key_len;
498  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
499 
500  memset(key_str, 0x00, 128);
501  memset(src_str, 0x00, 128);
502  memset(dst_str, 0x00, 257);
503  memset(iv_str, 0x00, 128);
504  memset(add_str, 0x00, 128);
505  memset(tag_str, 0x00, 128);
506  memset(output, 0x00, 128);
507  memset(tag_output, 0x00, 16);
508 
509  key_len = unhexify( key_str, "25896e587570ff1823639e1e51e9c89192d551b573dd747e7c0c1c10916ece4c" );
510  pt_len = unhexify( src_str, "" );
511  iv_len = unhexify( iv_str, "f0516457c09c372c358064eb6b470146" );
512  add_len = unhexify( add_str, "" );
513 
514  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
515  if( 0 == 0 )
516  {
517  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
518  hexify( dst_str, output, pt_len );
519  hexify( tag_str, tag_output, tag_len );
520 
521  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
522  fct_chk( strcmp( (char *) tag_str, "5a7cadec600a180e696d946425b0" ) == 0 );
523  }
524  }
525  FCT_TEST_END();
526 
527 
528  FCT_TEST_BGN(gcm_nist_validation_aes_25612800112_1)
529  {
530  unsigned char key_str[128];
531  unsigned char src_str[128];
532  unsigned char dst_str[257];
533  unsigned char iv_str[128];
534  unsigned char add_str[128];
535  unsigned char tag_str[128];
536  unsigned char output[128];
537  unsigned char tag_output[16];
538  gcm_context ctx;
539  unsigned int key_len;
540  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
541 
542  memset(key_str, 0x00, 128);
543  memset(src_str, 0x00, 128);
544  memset(dst_str, 0x00, 257);
545  memset(iv_str, 0x00, 128);
546  memset(add_str, 0x00, 128);
547  memset(tag_str, 0x00, 128);
548  memset(output, 0x00, 128);
549  memset(tag_output, 0x00, 16);
550 
551  key_len = unhexify( key_str, "02fc9cfffbe72e7954182993088e09d24ea8cad91a8ca9a336d9f1fe4156486d" );
552  pt_len = unhexify( src_str, "" );
553  iv_len = unhexify( iv_str, "0e189e162e097eb2060b30c46d9afa70" );
554  add_len = unhexify( add_str, "" );
555 
556  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
557  if( 0 == 0 )
558  {
559  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
560  hexify( dst_str, output, pt_len );
561  hexify( tag_str, tag_output, tag_len );
562 
563  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
564  fct_chk( strcmp( (char *) tag_str, "7d3d5cc55e6182ec5413ef622d4f" ) == 0 );
565  }
566  }
567  FCT_TEST_END();
568 
569 
570  FCT_TEST_BGN(gcm_nist_validation_aes_25612800112_2)
571  {
572  unsigned char key_str[128];
573  unsigned char src_str[128];
574  unsigned char dst_str[257];
575  unsigned char iv_str[128];
576  unsigned char add_str[128];
577  unsigned char tag_str[128];
578  unsigned char output[128];
579  unsigned char tag_output[16];
580  gcm_context ctx;
581  unsigned int key_len;
582  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
583 
584  memset(key_str, 0x00, 128);
585  memset(src_str, 0x00, 128);
586  memset(dst_str, 0x00, 257);
587  memset(iv_str, 0x00, 128);
588  memset(add_str, 0x00, 128);
589  memset(tag_str, 0x00, 128);
590  memset(output, 0x00, 128);
591  memset(tag_output, 0x00, 16);
592 
593  key_len = unhexify( key_str, "f24e3d631d8961d3d4b9912d4fa7a317db837a7b81cd52f90c703a4835c632e2" );
594  pt_len = unhexify( src_str, "" );
595  iv_len = unhexify( iv_str, "510740bfa2562ce99ca3839229145a46" );
596  add_len = unhexify( add_str, "" );
597 
598  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
599  if( 0 == 0 )
600  {
601  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
602  hexify( dst_str, output, pt_len );
603  hexify( tag_str, tag_output, tag_len );
604 
605  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
606  fct_chk( strcmp( (char *) tag_str, "1402ddc1854e5adb33664be85ad1" ) == 0 );
607  }
608  }
609  FCT_TEST_END();
610 
611 
612  FCT_TEST_BGN(gcm_nist_validation_aes_25612800104_0)
613  {
614  unsigned char key_str[128];
615  unsigned char src_str[128];
616  unsigned char dst_str[257];
617  unsigned char iv_str[128];
618  unsigned char add_str[128];
619  unsigned char tag_str[128];
620  unsigned char output[128];
621  unsigned char tag_output[16];
622  gcm_context ctx;
623  unsigned int key_len;
624  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
625 
626  memset(key_str, 0x00, 128);
627  memset(src_str, 0x00, 128);
628  memset(dst_str, 0x00, 257);
629  memset(iv_str, 0x00, 128);
630  memset(add_str, 0x00, 128);
631  memset(tag_str, 0x00, 128);
632  memset(output, 0x00, 128);
633  memset(tag_output, 0x00, 16);
634 
635  key_len = unhexify( key_str, "720ab5aceb80ff1f864379add9b0d63607227f7c3f58425dd6ec3d4cea3fe2ea" );
636  pt_len = unhexify( src_str, "" );
637  iv_len = unhexify( iv_str, "58f2317afb64d894243c192ef5191300" );
638  add_len = unhexify( add_str, "" );
639 
640  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
641  if( 0 == 0 )
642  {
643  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
644  hexify( dst_str, output, pt_len );
645  hexify( tag_str, tag_output, tag_len );
646 
647  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
648  fct_chk( strcmp( (char *) tag_str, "e8e772402cc6bfd96a140b24c1" ) == 0 );
649  }
650  }
651  FCT_TEST_END();
652 
653 
654  FCT_TEST_BGN(gcm_nist_validation_aes_25612800104_1)
655  {
656  unsigned char key_str[128];
657  unsigned char src_str[128];
658  unsigned char dst_str[257];
659  unsigned char iv_str[128];
660  unsigned char add_str[128];
661  unsigned char tag_str[128];
662  unsigned char output[128];
663  unsigned char tag_output[16];
664  gcm_context ctx;
665  unsigned int key_len;
666  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
667 
668  memset(key_str, 0x00, 128);
669  memset(src_str, 0x00, 128);
670  memset(dst_str, 0x00, 257);
671  memset(iv_str, 0x00, 128);
672  memset(add_str, 0x00, 128);
673  memset(tag_str, 0x00, 128);
674  memset(output, 0x00, 128);
675  memset(tag_output, 0x00, 16);
676 
677  key_len = unhexify( key_str, "f57dd16fa92a8f8c09d8f13cb5b6633a43b8762e90c670232f55949cdfdf700c" );
678  pt_len = unhexify( src_str, "" );
679  iv_len = unhexify( iv_str, "3b7c14ee357b3c6b0dc09e3209ab69f2" );
680  add_len = unhexify( add_str, "" );
681 
682  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
683  if( 0 == 0 )
684  {
685  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
686  hexify( dst_str, output, pt_len );
687  hexify( tag_str, tag_output, tag_len );
688 
689  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
690  fct_chk( strcmp( (char *) tag_str, "43e609664e48ad1f5478087f24" ) == 0 );
691  }
692  }
693  FCT_TEST_END();
694 
695 
696  FCT_TEST_BGN(gcm_nist_validation_aes_25612800104_2)
697  {
698  unsigned char key_str[128];
699  unsigned char src_str[128];
700  unsigned char dst_str[257];
701  unsigned char iv_str[128];
702  unsigned char add_str[128];
703  unsigned char tag_str[128];
704  unsigned char output[128];
705  unsigned char tag_output[16];
706  gcm_context ctx;
707  unsigned int key_len;
708  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
709 
710  memset(key_str, 0x00, 128);
711  memset(src_str, 0x00, 128);
712  memset(dst_str, 0x00, 257);
713  memset(iv_str, 0x00, 128);
714  memset(add_str, 0x00, 128);
715  memset(tag_str, 0x00, 128);
716  memset(output, 0x00, 128);
717  memset(tag_output, 0x00, 16);
718 
719  key_len = unhexify( key_str, "87c17ab919a4bc0d50343c0bb282a969283c2ada25f9a96d2858c7f89bc5139a" );
720  pt_len = unhexify( src_str, "" );
721  iv_len = unhexify( iv_str, "02813d3faf30d3e186d119e89fe36574" );
722  add_len = unhexify( add_str, "" );
723 
724  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
725  if( 0 == 0 )
726  {
727  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
728  hexify( dst_str, output, pt_len );
729  hexify( tag_str, tag_output, tag_len );
730 
731  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
732  fct_chk( strcmp( (char *) tag_str, "d1a1f82a8462c783b15c92b57e" ) == 0 );
733  }
734  }
735  FCT_TEST_END();
736 
737 
738  FCT_TEST_BGN(gcm_nist_validation_aes_2561280096_0)
739  {
740  unsigned char key_str[128];
741  unsigned char src_str[128];
742  unsigned char dst_str[257];
743  unsigned char iv_str[128];
744  unsigned char add_str[128];
745  unsigned char tag_str[128];
746  unsigned char output[128];
747  unsigned char tag_output[16];
748  gcm_context ctx;
749  unsigned int key_len;
750  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
751 
752  memset(key_str, 0x00, 128);
753  memset(src_str, 0x00, 128);
754  memset(dst_str, 0x00, 257);
755  memset(iv_str, 0x00, 128);
756  memset(add_str, 0x00, 128);
757  memset(tag_str, 0x00, 128);
758  memset(output, 0x00, 128);
759  memset(tag_output, 0x00, 16);
760 
761  key_len = unhexify( key_str, "dd8d5b6c5c938c905c17eab9f5ab7cd68d27f3f09d75177119010d070b91e646" );
762  pt_len = unhexify( src_str, "" );
763  iv_len = unhexify( iv_str, "1df1c3ad363c973bffe29975574ffdf6" );
764  add_len = unhexify( add_str, "" );
765 
766  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
767  if( 0 == 0 )
768  {
769  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
770  hexify( dst_str, output, pt_len );
771  hexify( tag_str, tag_output, tag_len );
772 
773  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
774  fct_chk( strcmp( (char *) tag_str, "749ac7ffda825fc973475b83" ) == 0 );
775  }
776  }
777  FCT_TEST_END();
778 
779 
780  FCT_TEST_BGN(gcm_nist_validation_aes_2561280096_1)
781  {
782  unsigned char key_str[128];
783  unsigned char src_str[128];
784  unsigned char dst_str[257];
785  unsigned char iv_str[128];
786  unsigned char add_str[128];
787  unsigned char tag_str[128];
788  unsigned char output[128];
789  unsigned char tag_output[16];
790  gcm_context ctx;
791  unsigned int key_len;
792  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
793 
794  memset(key_str, 0x00, 128);
795  memset(src_str, 0x00, 128);
796  memset(dst_str, 0x00, 257);
797  memset(iv_str, 0x00, 128);
798  memset(add_str, 0x00, 128);
799  memset(tag_str, 0x00, 128);
800  memset(output, 0x00, 128);
801  memset(tag_output, 0x00, 16);
802 
803  key_len = unhexify( key_str, "4d60a14cb789099c77b8991e7b0b40f787d3458f448501e8108e4d76110f94ef" );
804  pt_len = unhexify( src_str, "" );
805  iv_len = unhexify( iv_str, "ca6b3485eb5dcd9dbfa7cffcdb22daa5" );
806  add_len = unhexify( add_str, "" );
807 
808  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
809  if( 0 == 0 )
810  {
811  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
812  hexify( dst_str, output, pt_len );
813  hexify( tag_str, tag_output, tag_len );
814 
815  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
816  fct_chk( strcmp( (char *) tag_str, "3f868b6510d64098adc1d640" ) == 0 );
817  }
818  }
819  FCT_TEST_END();
820 
821 
822  FCT_TEST_BGN(gcm_nist_validation_aes_2561280096_2)
823  {
824  unsigned char key_str[128];
825  unsigned char src_str[128];
826  unsigned char dst_str[257];
827  unsigned char iv_str[128];
828  unsigned char add_str[128];
829  unsigned char tag_str[128];
830  unsigned char output[128];
831  unsigned char tag_output[16];
832  gcm_context ctx;
833  unsigned int key_len;
834  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
835 
836  memset(key_str, 0x00, 128);
837  memset(src_str, 0x00, 128);
838  memset(dst_str, 0x00, 257);
839  memset(iv_str, 0x00, 128);
840  memset(add_str, 0x00, 128);
841  memset(tag_str, 0x00, 128);
842  memset(output, 0x00, 128);
843  memset(tag_output, 0x00, 16);
844 
845  key_len = unhexify( key_str, "405b690717de993ad945d80159c2800848060de0b7d2b277efd0350a99ba609a" );
846  pt_len = unhexify( src_str, "" );
847  iv_len = unhexify( iv_str, "63730acb957869f0c091f22d964cc6a3" );
848  add_len = unhexify( add_str, "" );
849 
850  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
851  if( 0 == 0 )
852  {
853  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
854  hexify( dst_str, output, pt_len );
855  hexify( tag_str, tag_output, tag_len );
856 
857  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
858  fct_chk( strcmp( (char *) tag_str, "739688362337d61dab2591f0" ) == 0 );
859  }
860  }
861  FCT_TEST_END();
862 
863 
864  FCT_TEST_BGN(gcm_nist_validation_aes_2561280064_0)
865  {
866  unsigned char key_str[128];
867  unsigned char src_str[128];
868  unsigned char dst_str[257];
869  unsigned char iv_str[128];
870  unsigned char add_str[128];
871  unsigned char tag_str[128];
872  unsigned char output[128];
873  unsigned char tag_output[16];
874  gcm_context ctx;
875  unsigned int key_len;
876  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
877 
878  memset(key_str, 0x00, 128);
879  memset(src_str, 0x00, 128);
880  memset(dst_str, 0x00, 257);
881  memset(iv_str, 0x00, 128);
882  memset(add_str, 0x00, 128);
883  memset(tag_str, 0x00, 128);
884  memset(output, 0x00, 128);
885  memset(tag_output, 0x00, 16);
886 
887  key_len = unhexify( key_str, "ab5563a387e72d7d10468c99df590e1de25ec10363aa90d1448a9ffcd1de6867" );
888  pt_len = unhexify( src_str, "" );
889  iv_len = unhexify( iv_str, "c511406701bad20a2fa29b1e76924d2f" );
890  add_len = unhexify( add_str, "" );
891 
892  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
893  if( 0 == 0 )
894  {
895  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
896  hexify( dst_str, output, pt_len );
897  hexify( tag_str, tag_output, tag_len );
898 
899  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
900  fct_chk( strcmp( (char *) tag_str, "390291ed142ba760" ) == 0 );
901  }
902  }
903  FCT_TEST_END();
904 
905 
906  FCT_TEST_BGN(gcm_nist_validation_aes_2561280064_1)
907  {
908  unsigned char key_str[128];
909  unsigned char src_str[128];
910  unsigned char dst_str[257];
911  unsigned char iv_str[128];
912  unsigned char add_str[128];
913  unsigned char tag_str[128];
914  unsigned char output[128];
915  unsigned char tag_output[16];
916  gcm_context ctx;
917  unsigned int key_len;
918  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
919 
920  memset(key_str, 0x00, 128);
921  memset(src_str, 0x00, 128);
922  memset(dst_str, 0x00, 257);
923  memset(iv_str, 0x00, 128);
924  memset(add_str, 0x00, 128);
925  memset(tag_str, 0x00, 128);
926  memset(output, 0x00, 128);
927  memset(tag_output, 0x00, 16);
928 
929  key_len = unhexify( key_str, "abef7c24daaa21f308a5af03df936ba3f70aa525190af0d959d6e50d836f4624" );
930  pt_len = unhexify( src_str, "" );
931  iv_len = unhexify( iv_str, "e9f15950130b9524e2b09f77be39109a" );
932  add_len = unhexify( add_str, "" );
933 
934  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
935  if( 0 == 0 )
936  {
937  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
938  hexify( dst_str, output, pt_len );
939  hexify( tag_str, tag_output, tag_len );
940 
941  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
942  fct_chk( strcmp( (char *) tag_str, "db2fb2b004bc8dc4" ) == 0 );
943  }
944  }
945  FCT_TEST_END();
946 
947 
948  FCT_TEST_BGN(gcm_nist_validation_aes_2561280064_2)
949  {
950  unsigned char key_str[128];
951  unsigned char src_str[128];
952  unsigned char dst_str[257];
953  unsigned char iv_str[128];
954  unsigned char add_str[128];
955  unsigned char tag_str[128];
956  unsigned char output[128];
957  unsigned char tag_output[16];
958  gcm_context ctx;
959  unsigned int key_len;
960  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
961 
962  memset(key_str, 0x00, 128);
963  memset(src_str, 0x00, 128);
964  memset(dst_str, 0x00, 257);
965  memset(iv_str, 0x00, 128);
966  memset(add_str, 0x00, 128);
967  memset(tag_str, 0x00, 128);
968  memset(output, 0x00, 128);
969  memset(tag_output, 0x00, 16);
970 
971  key_len = unhexify( key_str, "6ca630b0b6779a8de7a19e5279eac94bf29f76f8b0cf8ecf8f11c4f8eb04aa0d" );
972  pt_len = unhexify( src_str, "" );
973  iv_len = unhexify( iv_str, "7373befc2c8007f42eef47be1086842f" );
974  add_len = unhexify( add_str, "" );
975 
976  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
977  if( 0 == 0 )
978  {
979  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
980  hexify( dst_str, output, pt_len );
981  hexify( tag_str, tag_output, tag_len );
982 
983  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
984  fct_chk( strcmp( (char *) tag_str, "e2b8620bcc7472a8" ) == 0 );
985  }
986  }
987  FCT_TEST_END();
988 
989 
990  FCT_TEST_BGN(gcm_nist_validation_aes_2561280032_0)
991  {
992  unsigned char key_str[128];
993  unsigned char src_str[128];
994  unsigned char dst_str[257];
995  unsigned char iv_str[128];
996  unsigned char add_str[128];
997  unsigned char tag_str[128];
998  unsigned char output[128];
999  unsigned char tag_output[16];
1000  gcm_context ctx;
1001  unsigned int key_len;
1002  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
1003 
1004  memset(key_str, 0x00, 128);
1005  memset(src_str, 0x00, 128);
1006  memset(dst_str, 0x00, 257);
1007  memset(iv_str, 0x00, 128);
1008  memset(add_str, 0x00, 128);
1009  memset(tag_str, 0x00, 128);
1010  memset(output, 0x00, 128);
1011  memset(tag_output, 0x00, 16);
1012 
1013  key_len = unhexify( key_str, "acea7818a71df2c9840aef1c10ecbe2bac7e92216388416a2f36119a0745d883" );
1014  pt_len = unhexify( src_str, "" );
1015  iv_len = unhexify( iv_str, "6d46aa39fb5a6117e9adf7ee72bc50ff" );
1016  add_len = unhexify( add_str, "" );
1017 
1018  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1019  if( 0 == 0 )
1020  {
1021  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
1022  hexify( dst_str, output, pt_len );
1023  hexify( tag_str, tag_output, tag_len );
1024 
1025  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1026  fct_chk( strcmp( (char *) tag_str, "fd5ff17b" ) == 0 );
1027  }
1028  }
1029  FCT_TEST_END();
1030 
1031 
1032  FCT_TEST_BGN(gcm_nist_validation_aes_2561280032_1)
1033  {
1034  unsigned char key_str[128];
1035  unsigned char src_str[128];
1036  unsigned char dst_str[257];
1037  unsigned char iv_str[128];
1038  unsigned char add_str[128];
1039  unsigned char tag_str[128];
1040  unsigned char output[128];
1041  unsigned char tag_output[16];
1042  gcm_context ctx;
1043  unsigned int key_len;
1044  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
1045 
1046  memset(key_str, 0x00, 128);
1047  memset(src_str, 0x00, 128);
1048  memset(dst_str, 0x00, 257);
1049  memset(iv_str, 0x00, 128);
1050  memset(add_str, 0x00, 128);
1051  memset(tag_str, 0x00, 128);
1052  memset(output, 0x00, 128);
1053  memset(tag_output, 0x00, 16);
1054 
1055  key_len = unhexify( key_str, "b301036d4b2b28b8a4502925986861eba2b67c24cb0c79c63fd62195d9b67506" );
1056  pt_len = unhexify( src_str, "" );
1057  iv_len = unhexify( iv_str, "bb6f398e5aed51590e3df02f5419e44d" );
1058  add_len = unhexify( add_str, "" );
1059 
1060  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1061  if( 0 == 0 )
1062  {
1063  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
1064  hexify( dst_str, output, pt_len );
1065  hexify( tag_str, tag_output, tag_len );
1066 
1067  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1068  fct_chk( strcmp( (char *) tag_str, "47f3a906" ) == 0 );
1069  }
1070  }
1071  FCT_TEST_END();
1072 
1073 
1074  FCT_TEST_BGN(gcm_nist_validation_aes_2561280032_2)
1075  {
1076  unsigned char key_str[128];
1077  unsigned char src_str[128];
1078  unsigned char dst_str[257];
1079  unsigned char iv_str[128];
1080  unsigned char add_str[128];
1081  unsigned char tag_str[128];
1082  unsigned char output[128];
1083  unsigned char tag_output[16];
1084  gcm_context ctx;
1085  unsigned int key_len;
1086  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
1087 
1088  memset(key_str, 0x00, 128);
1089  memset(src_str, 0x00, 128);
1090  memset(dst_str, 0x00, 257);
1091  memset(iv_str, 0x00, 128);
1092  memset(add_str, 0x00, 128);
1093  memset(tag_str, 0x00, 128);
1094  memset(output, 0x00, 128);
1095  memset(tag_output, 0x00, 16);
1096 
1097  key_len = unhexify( key_str, "89576d2aac554c8982c7df0053be9ab19f4bd80ba9f3dd433c1c054d68e68795" );
1098  pt_len = unhexify( src_str, "" );
1099  iv_len = unhexify( iv_str, "aedbd482a401a7c12d4755077c8dd26e" );
1100  add_len = unhexify( add_str, "" );
1101 
1102  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1103  if( 0 == 0 )
1104  {
1105  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
1106  hexify( dst_str, output, pt_len );
1107  hexify( tag_str, tag_output, tag_len );
1108 
1109  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1110  fct_chk( strcmp( (char *) tag_str, "506fa18d" ) == 0 );
1111  }
1112  }
1113  FCT_TEST_END();
1114 
1115 
1116  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024128_0)
1117  {
1118  unsigned char key_str[128];
1119  unsigned char src_str[128];
1120  unsigned char dst_str[257];
1121  unsigned char iv_str[128];
1122  unsigned char add_str[128];
1123  unsigned char tag_str[128];
1124  unsigned char output[128];
1125  unsigned char tag_output[16];
1126  gcm_context ctx;
1127  unsigned int key_len;
1128  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
1129 
1130  memset(key_str, 0x00, 128);
1131  memset(src_str, 0x00, 128);
1132  memset(dst_str, 0x00, 257);
1133  memset(iv_str, 0x00, 128);
1134  memset(add_str, 0x00, 128);
1135  memset(tag_str, 0x00, 128);
1136  memset(output, 0x00, 128);
1137  memset(tag_output, 0x00, 16);
1138 
1139  key_len = unhexify( key_str, "43c9e209da3c1971d986a45b92f2fa0d2d155183730d21d71ed8e2284ec308e3" );
1140  pt_len = unhexify( src_str, "" );
1141  iv_len = unhexify( iv_str, "78bef655dfd8990b04d2a25678d7086d" );
1142  add_len = unhexify( add_str, "9d8c6734546797c581b9b1d0d4f05b27fe0539bd01655d2d1a8a1489cdf804228753d77272bf6ded19d47a6abd6281ea9591d4bcc1be222305fdf689c5faa4c11331cffbf42215469b81f61b40415d81cc37161e5c0258a67642b9b8ac627d6e39f43e485e1ff522ac742a07defa3569aeb59990cb44c4f3d952f8119ff1111d" );
1143 
1144  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1145  if( 0 == 0 )
1146  {
1147  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
1148  hexify( dst_str, output, pt_len );
1149  hexify( tag_str, tag_output, tag_len );
1150 
1151  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1152  fct_chk( strcmp( (char *) tag_str, "f15ddf938bbf52c2977adabaf4120de8" ) == 0 );
1153  }
1154  }
1155  FCT_TEST_END();
1156 
1157 
1158  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024128_1)
1159  {
1160  unsigned char key_str[128];
1161  unsigned char src_str[128];
1162  unsigned char dst_str[257];
1163  unsigned char iv_str[128];
1164  unsigned char add_str[128];
1165  unsigned char tag_str[128];
1166  unsigned char output[128];
1167  unsigned char tag_output[16];
1168  gcm_context ctx;
1169  unsigned int key_len;
1170  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
1171 
1172  memset(key_str, 0x00, 128);
1173  memset(src_str, 0x00, 128);
1174  memset(dst_str, 0x00, 257);
1175  memset(iv_str, 0x00, 128);
1176  memset(add_str, 0x00, 128);
1177  memset(tag_str, 0x00, 128);
1178  memset(output, 0x00, 128);
1179  memset(tag_output, 0x00, 16);
1180 
1181  key_len = unhexify( key_str, "fbe2d52b7f50bf23a16ff8cd864215034fdfbf4d1506ca3c1ffb015653efe33a" );
1182  pt_len = unhexify( src_str, "" );
1183  iv_len = unhexify( iv_str, "b155f8ab1a8c0327789cfb8310051f19" );
1184  add_len = unhexify( add_str, "ed8d14adf1c362bbaf0d569c8083278e8225f883d75d237a4abcd775a49780603e50c00a1b5b5946c085e57a749b4946f6aca96eda04ac9944a7d3d47adc88326ed30a34d879dd02fb88182f9e2deefaeee1c306b897539fa9075bda03ba07b4ffff71ce732ef3c4befac0f18c85a0652d34524ccb1a4747ab8f72ed1c24d8fc" );
1185 
1186  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1187  if( 0 == 0 )
1188  {
1189  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
1190  hexify( dst_str, output, pt_len );
1191  hexify( tag_str, tag_output, tag_len );
1192 
1193  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1194  fct_chk( strcmp( (char *) tag_str, "c5fe27ca90e5c8b321cc391ee7f1f796" ) == 0 );
1195  }
1196  }
1197  FCT_TEST_END();
1198 
1199 
1200  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024128_2)
1201  {
1202  unsigned char key_str[128];
1203  unsigned char src_str[128];
1204  unsigned char dst_str[257];
1205  unsigned char iv_str[128];
1206  unsigned char add_str[128];
1207  unsigned char tag_str[128];
1208  unsigned char output[128];
1209  unsigned char tag_output[16];
1210  gcm_context ctx;
1211  unsigned int key_len;
1212  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
1213 
1214  memset(key_str, 0x00, 128);
1215  memset(src_str, 0x00, 128);
1216  memset(dst_str, 0x00, 257);
1217  memset(iv_str, 0x00, 128);
1218  memset(add_str, 0x00, 128);
1219  memset(tag_str, 0x00, 128);
1220  memset(output, 0x00, 128);
1221  memset(tag_output, 0x00, 16);
1222 
1223  key_len = unhexify( key_str, "8e888721514fd01fb67513cb56bfd29af67a9ce525e3e697af47450f02053161" );
1224  pt_len = unhexify( src_str, "" );
1225  iv_len = unhexify( iv_str, "9f6bd4a93e4f3f2f5f4a7c2c5b4790bf" );
1226  add_len = unhexify( add_str, "867d50923967535ce6f00395930083523c22f373cfb6c8817764f5623cd60b555572404e54f2fe7083ef32b9a4593a1f70a736d6e8fe61b77def51f3b1d8f679d3a8d50d0aad49e51ec1eb4d4a25f13d14f3e5253555c73eac759e484c6131cc868b46c18b26acd040c3e1cb27afecba7b7fc3f5ff4883f4eafc26c7f3084751" );
1227 
1228  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1229  if( 0 == 0 )
1230  {
1231  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
1232  hexify( dst_str, output, pt_len );
1233  hexify( tag_str, tag_output, tag_len );
1234 
1235  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1236  fct_chk( strcmp( (char *) tag_str, "ea269094330b6926627889fcdb06aab4" ) == 0 );
1237  }
1238  }
1239  FCT_TEST_END();
1240 
1241 
1242  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024120_0)
1243  {
1244  unsigned char key_str[128];
1245  unsigned char src_str[128];
1246  unsigned char dst_str[257];
1247  unsigned char iv_str[128];
1248  unsigned char add_str[128];
1249  unsigned char tag_str[128];
1250  unsigned char output[128];
1251  unsigned char tag_output[16];
1252  gcm_context ctx;
1253  unsigned int key_len;
1254  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
1255 
1256  memset(key_str, 0x00, 128);
1257  memset(src_str, 0x00, 128);
1258  memset(dst_str, 0x00, 257);
1259  memset(iv_str, 0x00, 128);
1260  memset(add_str, 0x00, 128);
1261  memset(tag_str, 0x00, 128);
1262  memset(output, 0x00, 128);
1263  memset(tag_output, 0x00, 16);
1264 
1265  key_len = unhexify( key_str, "d8f82b07e7319ca607c9aa0352070ca883dd7b32af370a774f63b0270f44835a" );
1266  pt_len = unhexify( src_str, "" );
1267  iv_len = unhexify( iv_str, "e89e4484497cb728f86585d8918b7fae" );
1268  add_len = unhexify( add_str, "42340d96e1852de3ed5e30eb4a05e1fb222480b450e2bf4e2cf0fb2a525eb6602ef43a896adc5c52ea5381c642b2175691c014e7a6dae91fa6ff5b95c18a2dd2e8838d3abd46ace0b305f3f22d30a0bd82a81bbf6753362b54b0624c76c0d753e30eb636365f0df7e1bf8bf130cf36062ec23f58a3f7ed0ae7bfbbd68460cd76" );
1269 
1270  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1271  if( 0 == 0 )
1272  {
1273  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
1274  hexify( dst_str, output, pt_len );
1275  hexify( tag_str, tag_output, tag_len );
1276 
1277  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1278  fct_chk( strcmp( (char *) tag_str, "b234b28917372374e7f304f1462b49" ) == 0 );
1279  }
1280  }
1281  FCT_TEST_END();
1282 
1283 
1284  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024120_1)
1285  {
1286  unsigned char key_str[128];
1287  unsigned char src_str[128];
1288  unsigned char dst_str[257];
1289  unsigned char iv_str[128];
1290  unsigned char add_str[128];
1291  unsigned char tag_str[128];
1292  unsigned char output[128];
1293  unsigned char tag_output[16];
1294  gcm_context ctx;
1295  unsigned int key_len;
1296  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
1297 
1298  memset(key_str, 0x00, 128);
1299  memset(src_str, 0x00, 128);
1300  memset(dst_str, 0x00, 257);
1301  memset(iv_str, 0x00, 128);
1302  memset(add_str, 0x00, 128);
1303  memset(tag_str, 0x00, 128);
1304  memset(output, 0x00, 128);
1305  memset(tag_output, 0x00, 16);
1306 
1307  key_len = unhexify( key_str, "b49b04a54a08d28b077ea54c18bfa53e916723e91453b47f88e399046b9b4dcc" );
1308  pt_len = unhexify( src_str, "" );
1309  iv_len = unhexify( iv_str, "6276c577c530f91b434ce5719e1c59de" );
1310  add_len = unhexify( add_str, "6b73f996c49e368fc4d21816153aefb081509f9dc0916dbe4fdf77f39867a2bd617b8a75f39f515b1bc1454009d5247efcd90ba0d4a6743c6f12a929b666584f3b55254c32e2bab2321f94fa843dc5124c341dd509788a158191ee141eb0bc4e1b96f6987bafe664a0f9ac6d85c59cee9564a27bcc37dffae80c57fbf7e748ce" );
1311 
1312  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1313  if( 0 == 0 )
1314  {
1315  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
1316  hexify( dst_str, output, pt_len );
1317  hexify( tag_str, tag_output, tag_len );
1318 
1319  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1320  fct_chk( strcmp( (char *) tag_str, "69dd5bdeb15fdbc3a70c44b150f70e" ) == 0 );
1321  }
1322  }
1323  FCT_TEST_END();
1324 
1325 
1326  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024120_2)
1327  {
1328  unsigned char key_str[128];
1329  unsigned char src_str[128];
1330  unsigned char dst_str[257];
1331  unsigned char iv_str[128];
1332  unsigned char add_str[128];
1333  unsigned char tag_str[128];
1334  unsigned char output[128];
1335  unsigned char tag_output[16];
1336  gcm_context ctx;
1337  unsigned int key_len;
1338  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
1339 
1340  memset(key_str, 0x00, 128);
1341  memset(src_str, 0x00, 128);
1342  memset(dst_str, 0x00, 257);
1343  memset(iv_str, 0x00, 128);
1344  memset(add_str, 0x00, 128);
1345  memset(tag_str, 0x00, 128);
1346  memset(output, 0x00, 128);
1347  memset(tag_output, 0x00, 16);
1348 
1349  key_len = unhexify( key_str, "398bb37bb991898c7dad7bf5930dbad20d121f68d5ec6c56ffe66f23c0c37f8e" );
1350  pt_len = unhexify( src_str, "" );
1351  iv_len = unhexify( iv_str, "0c3bd55b54c1221b0cf25d88ea4dfe24" );
1352  add_len = unhexify( add_str, "4c48b929f31180e697ea6199cd96c47cecc95c9ed4c442d6a23ca3a23d4b4833601ac4bbcdbc333cd1b3a0cd90338e1c88ef8561fed7ad0f4f54120b76281958995c95e4c9daabff75d71e2d5770420211c341c6b062b6c8b31b8fe8990588fbad1e651a49b0badd9a8d8042206337a1f2aa980b3ba3b5ee8e3396a2b9150a34" );
1353 
1354  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1355  if( 0 == 0 )
1356  {
1357  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
1358  hexify( dst_str, output, pt_len );
1359  hexify( tag_str, tag_output, tag_len );
1360 
1361  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1362  fct_chk( strcmp( (char *) tag_str, "8528950bd5371681a78176ae1ea5dc" ) == 0 );
1363  }
1364  }
1365  FCT_TEST_END();
1366 
1367 
1368  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024112_0)
1369  {
1370  unsigned char key_str[128];
1371  unsigned char src_str[128];
1372  unsigned char dst_str[257];
1373  unsigned char iv_str[128];
1374  unsigned char add_str[128];
1375  unsigned char tag_str[128];
1376  unsigned char output[128];
1377  unsigned char tag_output[16];
1378  gcm_context ctx;
1379  unsigned int key_len;
1380  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
1381 
1382  memset(key_str, 0x00, 128);
1383  memset(src_str, 0x00, 128);
1384  memset(dst_str, 0x00, 257);
1385  memset(iv_str, 0x00, 128);
1386  memset(add_str, 0x00, 128);
1387  memset(tag_str, 0x00, 128);
1388  memset(output, 0x00, 128);
1389  memset(tag_output, 0x00, 16);
1390 
1391  key_len = unhexify( key_str, "8e8f7c317b22dea8eabe7eaa87413a98ff56570720985b6743a5f9af56387cca" );
1392  pt_len = unhexify( src_str, "" );
1393  iv_len = unhexify( iv_str, "3a9a5a839045723afdfb2d5df968bfcb" );
1394  add_len = unhexify( add_str, "a87d95f8f47e45a1c7c5c58d16055b52b3256c52713fd092bcd6cbc44e2c84669f23ca2a19e34163ee297f592f6054dbc88863a896c2217e93a660d55a6cd9588a7275d05649940d96815c7ddfa5fc4394c75349f05f1bcaff804095783726c0eceb79833a48cefd346b223f4e5401789684e5caeda187a323962a1f32f63f02" );
1395 
1396  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1397  if( 0 == 0 )
1398  {
1399  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
1400  hexify( dst_str, output, pt_len );
1401  hexify( tag_str, tag_output, tag_len );
1402 
1403  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1404  fct_chk( strcmp( (char *) tag_str, "faad6a9731430e148ace27214e68" ) == 0 );
1405  }
1406  }
1407  FCT_TEST_END();
1408 
1409 
1410  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024112_1)
1411  {
1412  unsigned char key_str[128];
1413  unsigned char src_str[128];
1414  unsigned char dst_str[257];
1415  unsigned char iv_str[128];
1416  unsigned char add_str[128];
1417  unsigned char tag_str[128];
1418  unsigned char output[128];
1419  unsigned char tag_output[16];
1420  gcm_context ctx;
1421  unsigned int key_len;
1422  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
1423 
1424  memset(key_str, 0x00, 128);
1425  memset(src_str, 0x00, 128);
1426  memset(dst_str, 0x00, 257);
1427  memset(iv_str, 0x00, 128);
1428  memset(add_str, 0x00, 128);
1429  memset(tag_str, 0x00, 128);
1430  memset(output, 0x00, 128);
1431  memset(tag_output, 0x00, 16);
1432 
1433  key_len = unhexify( key_str, "67c95e57197f0e0bbaaa866d337fcc37f3a10dc55a059f5ea498de204d2fff61" );
1434  pt_len = unhexify( src_str, "" );
1435  iv_len = unhexify( iv_str, "5f171d203c653a316cac43df99f4033a" );
1436  add_len = unhexify( add_str, "84f281b388ca18bc97323657a723a56260731234720b02b6dde00ea134bd84a1893bec38af80214c4da01b93958ab00f3b648c975371e565d5b6bf2a8f63c0f3cfcd557c9f63574390b6ae533085aca51fa9d46cd2478b7648b6dcbbac7e61197a425778debe351ac2110ba510a17e2c351ba75d5a755ef547cf9acc54650222" );
1437 
1438  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1439  if( 0 == 0 )
1440  {
1441  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
1442  hexify( dst_str, output, pt_len );
1443  hexify( tag_str, tag_output, tag_len );
1444 
1445  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1446  fct_chk( strcmp( (char *) tag_str, "9ea9c716e06a274d15a3595a0c41" ) == 0 );
1447  }
1448  }
1449  FCT_TEST_END();
1450 
1451 
1452  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024112_2)
1453  {
1454  unsigned char key_str[128];
1455  unsigned char src_str[128];
1456  unsigned char dst_str[257];
1457  unsigned char iv_str[128];
1458  unsigned char add_str[128];
1459  unsigned char tag_str[128];
1460  unsigned char output[128];
1461  unsigned char tag_output[16];
1462  gcm_context ctx;
1463  unsigned int key_len;
1464  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
1465 
1466  memset(key_str, 0x00, 128);
1467  memset(src_str, 0x00, 128);
1468  memset(dst_str, 0x00, 257);
1469  memset(iv_str, 0x00, 128);
1470  memset(add_str, 0x00, 128);
1471  memset(tag_str, 0x00, 128);
1472  memset(output, 0x00, 128);
1473  memset(tag_output, 0x00, 16);
1474 
1475  key_len = unhexify( key_str, "9143f00e31c72bd9fced31585d047f67f1004e6244c3d9c10c8ae005feeabc84" );
1476  pt_len = unhexify( src_str, "" );
1477  iv_len = unhexify( iv_str, "e49cd6af9a2f0da2a7198317da92ab2f" );
1478  add_len = unhexify( add_str, "ab9193a155140d265aabfe2dd5efca7d3fa6129498532bccd77f09fa1a480702620b3ab53df91b01262122f1a6fc387b5fc55dadfcdb99ada83d4a5b0666c8526de309f41eb54d69b52595c43550a6bf7b4b8f0e0c48311b521762eaa567744c4c4704dd977f84068b59db98a67e33cc65302ba59360d600a22138c5ad3317f3" );
1479 
1480  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1481  if( 0 == 0 )
1482  {
1483  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
1484  hexify( dst_str, output, pt_len );
1485  hexify( tag_str, tag_output, tag_len );
1486 
1487  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1488  fct_chk( strcmp( (char *) tag_str, "8293e361fe0308a067f89aea393f" ) == 0 );
1489  }
1490  }
1491  FCT_TEST_END();
1492 
1493 
1494  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024104_0)
1495  {
1496  unsigned char key_str[128];
1497  unsigned char src_str[128];
1498  unsigned char dst_str[257];
1499  unsigned char iv_str[128];
1500  unsigned char add_str[128];
1501  unsigned char tag_str[128];
1502  unsigned char output[128];
1503  unsigned char tag_output[16];
1504  gcm_context ctx;
1505  unsigned int key_len;
1506  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
1507 
1508  memset(key_str, 0x00, 128);
1509  memset(src_str, 0x00, 128);
1510  memset(dst_str, 0x00, 257);
1511  memset(iv_str, 0x00, 128);
1512  memset(add_str, 0x00, 128);
1513  memset(tag_str, 0x00, 128);
1514  memset(output, 0x00, 128);
1515  memset(tag_output, 0x00, 16);
1516 
1517  key_len = unhexify( key_str, "d0ba180075c373116bb037907b512add00ba9a4693a8ecc14ca0d79adada90e3" );
1518  pt_len = unhexify( src_str, "" );
1519  iv_len = unhexify( iv_str, "5c1501b19cce5404dccc9217ac8253b7" );
1520  add_len = unhexify( add_str, "3a161605ec0055c479dd48cdaeed5981b8b60fb7b7781cc4e580218c7014c3060a9f706e6e16cf4021e4d38deb512534b484ff23b701975bdf901146ccaece9c3ffbbeeb172cfb64a915ae0dbe7a082b9077776a387b58559a881b9b79b90aa28ad1ac0f2bece314169a2f79ea4c08389f7f7dd10ee2d9a844fee79e7bf38bcf" );
1521 
1522  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1523  if( 0 == 0 )
1524  {
1525  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
1526  hexify( dst_str, output, pt_len );
1527  hexify( tag_str, tag_output, tag_len );
1528 
1529  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1530  fct_chk( strcmp( (char *) tag_str, "0541262fddfd5d01ff0f3c2fb4" ) == 0 );
1531  }
1532  }
1533  FCT_TEST_END();
1534 
1535 
1536  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024104_1)
1537  {
1538  unsigned char key_str[128];
1539  unsigned char src_str[128];
1540  unsigned char dst_str[257];
1541  unsigned char iv_str[128];
1542  unsigned char add_str[128];
1543  unsigned char tag_str[128];
1544  unsigned char output[128];
1545  unsigned char tag_output[16];
1546  gcm_context ctx;
1547  unsigned int key_len;
1548  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
1549 
1550  memset(key_str, 0x00, 128);
1551  memset(src_str, 0x00, 128);
1552  memset(dst_str, 0x00, 257);
1553  memset(iv_str, 0x00, 128);
1554  memset(add_str, 0x00, 128);
1555  memset(tag_str, 0x00, 128);
1556  memset(output, 0x00, 128);
1557  memset(tag_output, 0x00, 16);
1558 
1559  key_len = unhexify( key_str, "c975c7e59133c231d1b84c696761c413ba20aff7fb7d854c6947e65db3cc57b4" );
1560  pt_len = unhexify( src_str, "" );
1561  iv_len = unhexify( iv_str, "d8fedda4cccaf6b0818edcfa7b1f03fa" );
1562  add_len = unhexify( add_str, "cb4cc9171367d6422abfaf2b4452da267eb9ccf1c4c97d21a0a125de486997832d16c7e412cb109eb9ac90c81dfe1a1dd9f79af7a14e91669b47f94e07d4e9bd645d9daa703b493179ca05ddd45433def98cf499ff11849cc88b58befbdd388728632469d8b28df4451fc671f4a3d69526a80c2e53e4fdee6300d27d97baf5f4" );
1563 
1564  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1565  if( 0 == 0 )
1566  {
1567  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
1568  hexify( dst_str, output, pt_len );
1569  hexify( tag_str, tag_output, tag_len );
1570 
1571  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1572  fct_chk( strcmp( (char *) tag_str, "77ac205d959ec10ae8cee13eed" ) == 0 );
1573  }
1574  }
1575  FCT_TEST_END();
1576 
1577 
1578  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024104_2)
1579  {
1580  unsigned char key_str[128];
1581  unsigned char src_str[128];
1582  unsigned char dst_str[257];
1583  unsigned char iv_str[128];
1584  unsigned char add_str[128];
1585  unsigned char tag_str[128];
1586  unsigned char output[128];
1587  unsigned char tag_output[16];
1588  gcm_context ctx;
1589  unsigned int key_len;
1590  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
1591 
1592  memset(key_str, 0x00, 128);
1593  memset(src_str, 0x00, 128);
1594  memset(dst_str, 0x00, 257);
1595  memset(iv_str, 0x00, 128);
1596  memset(add_str, 0x00, 128);
1597  memset(tag_str, 0x00, 128);
1598  memset(output, 0x00, 128);
1599  memset(tag_output, 0x00, 16);
1600 
1601  key_len = unhexify( key_str, "a86ec688222c50c07274ed2d2c8ae6f883e25f8f95d404a7538fd83224199327" );
1602  pt_len = unhexify( src_str, "" );
1603  iv_len = unhexify( iv_str, "99c73fdb8f97f225f7a17cf79c011112" );
1604  add_len = unhexify( add_str, "cf5f707de0357262c0997fa3ebfe6e07192df8db5f029e418989e85e6b71e186b00c612ecedbfe3c847e58081847f39697337ae7c815d2cd0263986d06bf3a5d2db4e986dbe69071fd4b80a580f5a2cf734fc56c6d70202ea3494f67539797252d87cd7646296932959c99797a0446532f264d3089dd5f4bcceaaa7289a54380" );
1605 
1606  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1607  if( 0 == 0 )
1608  {
1609  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
1610  hexify( dst_str, output, pt_len );
1611  hexify( tag_str, tag_output, tag_len );
1612 
1613  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1614  fct_chk( strcmp( (char *) tag_str, "c2093ad4705e613b09eee74057" ) == 0 );
1615  }
1616  }
1617  FCT_TEST_END();
1618 
1619 
1620  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102496_0)
1621  {
1622  unsigned char key_str[128];
1623  unsigned char src_str[128];
1624  unsigned char dst_str[257];
1625  unsigned char iv_str[128];
1626  unsigned char add_str[128];
1627  unsigned char tag_str[128];
1628  unsigned char output[128];
1629  unsigned char tag_output[16];
1630  gcm_context ctx;
1631  unsigned int key_len;
1632  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
1633 
1634  memset(key_str, 0x00, 128);
1635  memset(src_str, 0x00, 128);
1636  memset(dst_str, 0x00, 257);
1637  memset(iv_str, 0x00, 128);
1638  memset(add_str, 0x00, 128);
1639  memset(tag_str, 0x00, 128);
1640  memset(output, 0x00, 128);
1641  memset(tag_output, 0x00, 16);
1642 
1643  key_len = unhexify( key_str, "d3981f0aa1ed8cb369d9b0d7b0e529ec6089ff2d226c542885b1bff55276e891" );
1644  pt_len = unhexify( src_str, "" );
1645  iv_len = unhexify( iv_str, "7331f91bd1a67c21c9dd336a2a922839" );
1646  add_len = unhexify( add_str, "406d9cf45fc8618d564154241dc9c006ecdcd847406e5a6e7127ac96e7bb93f4c339ff612c514b6f66df95a0845035d7535212a2aaeeb0ee512d1f4375c9a527e4e499389c2d7f7f7439c913ea91580e7303767b989c4d619df7888baf789efd489b08eda223f27da5e177cd704c638f5fc8bf1fecfcd1cab4f4adfbc9d1d8ba" );
1647 
1648  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1649  if( 0 == 0 )
1650  {
1651  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
1652  hexify( dst_str, output, pt_len );
1653  hexify( tag_str, tag_output, tag_len );
1654 
1655  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1656  fct_chk( strcmp( (char *) tag_str, "dbb7ec852c692c9a0e1a5acd" ) == 0 );
1657  }
1658  }
1659  FCT_TEST_END();
1660 
1661 
1662  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102496_1)
1663  {
1664  unsigned char key_str[128];
1665  unsigned char src_str[128];
1666  unsigned char dst_str[257];
1667  unsigned char iv_str[128];
1668  unsigned char add_str[128];
1669  unsigned char tag_str[128];
1670  unsigned char output[128];
1671  unsigned char tag_output[16];
1672  gcm_context ctx;
1673  unsigned int key_len;
1674  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
1675 
1676  memset(key_str, 0x00, 128);
1677  memset(src_str, 0x00, 128);
1678  memset(dst_str, 0x00, 257);
1679  memset(iv_str, 0x00, 128);
1680  memset(add_str, 0x00, 128);
1681  memset(tag_str, 0x00, 128);
1682  memset(output, 0x00, 128);
1683  memset(tag_output, 0x00, 16);
1684 
1685  key_len = unhexify( key_str, "8436967f97c59ca73b760b73c6e088d1da4e76b712188ab4781d8d849505ae47" );
1686  pt_len = unhexify( src_str, "" );
1687  iv_len = unhexify( iv_str, "9401dd0998914645668d06d518bfe7d7" );
1688  add_len = unhexify( add_str, "a5f40906177417097c19a0a21dbb457a694e173141837f695b09c8eb58ac2ce28aace4e59275b6266da9369a9905b389e968aefc64d78c7e1d2f034ef413d3458edcb955f5cd7971c28cd67dc9901ef3a2abc6121704bb5ecd87a6568d0506abbc87a2f10205dc8eb0cd1b5109158d0e743c2c3a342d60b8d55bbcb8d8507ed1" );
1689 
1690  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1691  if( 0 == 0 )
1692  {
1693  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
1694  hexify( dst_str, output, pt_len );
1695  hexify( tag_str, tag_output, tag_len );
1696 
1697  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1698  fct_chk( strcmp( (char *) tag_str, "dd6d988d352decc4e70375d8" ) == 0 );
1699  }
1700  }
1701  FCT_TEST_END();
1702 
1703 
1704  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102496_2)
1705  {
1706  unsigned char key_str[128];
1707  unsigned char src_str[128];
1708  unsigned char dst_str[257];
1709  unsigned char iv_str[128];
1710  unsigned char add_str[128];
1711  unsigned char tag_str[128];
1712  unsigned char output[128];
1713  unsigned char tag_output[16];
1714  gcm_context ctx;
1715  unsigned int key_len;
1716  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
1717 
1718  memset(key_str, 0x00, 128);
1719  memset(src_str, 0x00, 128);
1720  memset(dst_str, 0x00, 257);
1721  memset(iv_str, 0x00, 128);
1722  memset(add_str, 0x00, 128);
1723  memset(tag_str, 0x00, 128);
1724  memset(output, 0x00, 128);
1725  memset(tag_output, 0x00, 16);
1726 
1727  key_len = unhexify( key_str, "ce6b846bcedc6ae747e66e72cd9f7664e6cad9627ba5f1f1923f3d3a6ed590d1" );
1728  pt_len = unhexify( src_str, "" );
1729  iv_len = unhexify( iv_str, "ac865ff8a6255e501b347a6650510d05" );
1730  add_len = unhexify( add_str, "1658b9f8469af1dfa60458cf8107db1edd1e4bba70a0bd23e13e1bba0d397abf51af8348f983fcdfcc8315ef1ffc9a26371377c62ddba08363bd2bf0ff7d0c3b603fad10be24ecee97b36d2255a8b2efc63f037123cef4bb4fe384aa0c58548b2f317c36ef3ef204b24769de6ba3e9d89e159e2bf1f9d79aeb3eb80c42eb255e" );
1731 
1732  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1733  if( 0 == 0 )
1734  {
1735  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
1736  hexify( dst_str, output, pt_len );
1737  hexify( tag_str, tag_output, tag_len );
1738 
1739  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1740  fct_chk( strcmp( (char *) tag_str, "7ee87acd138c558455fff063" ) == 0 );
1741  }
1742  }
1743  FCT_TEST_END();
1744 
1745 
1746  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102464_0)
1747  {
1748  unsigned char key_str[128];
1749  unsigned char src_str[128];
1750  unsigned char dst_str[257];
1751  unsigned char iv_str[128];
1752  unsigned char add_str[128];
1753  unsigned char tag_str[128];
1754  unsigned char output[128];
1755  unsigned char tag_output[16];
1756  gcm_context ctx;
1757  unsigned int key_len;
1758  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
1759 
1760  memset(key_str, 0x00, 128);
1761  memset(src_str, 0x00, 128);
1762  memset(dst_str, 0x00, 257);
1763  memset(iv_str, 0x00, 128);
1764  memset(add_str, 0x00, 128);
1765  memset(tag_str, 0x00, 128);
1766  memset(output, 0x00, 128);
1767  memset(tag_output, 0x00, 16);
1768 
1769  key_len = unhexify( key_str, "0038ecf1407bbf0d73afa5e010769b71e8649c4249345dcf923ef9da0254c6af" );
1770  pt_len = unhexify( src_str, "" );
1771  iv_len = unhexify( iv_str, "74c6b98fc6ced3a59bd9c42d31d71095" );
1772  add_len = unhexify( add_str, "467f483c71c3404fe7f09d6f6b6b64c3b7613a0dd32470cf24bc590d3994a48f3e8cd5dc19ea8ca7d5366ad7c5ad31cc9612dafedaea109dde2aedfe5fc2a0db2c903dd1dc1a13949720a10babf37fba5a0ed7cb5f3dc9eb5a4d8331f218e98763e7794b3e63705d414ef332160b0b1799f1ff5cbe129a75e5c4e0a4ed35e382" );
1773 
1774  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1775  if( 0 == 0 )
1776  {
1777  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
1778  hexify( dst_str, output, pt_len );
1779  hexify( tag_str, tag_output, tag_len );
1780 
1781  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1782  fct_chk( strcmp( (char *) tag_str, "62fe088d9129450b" ) == 0 );
1783  }
1784  }
1785  FCT_TEST_END();
1786 
1787 
1788  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102464_1)
1789  {
1790  unsigned char key_str[128];
1791  unsigned char src_str[128];
1792  unsigned char dst_str[257];
1793  unsigned char iv_str[128];
1794  unsigned char add_str[128];
1795  unsigned char tag_str[128];
1796  unsigned char output[128];
1797  unsigned char tag_output[16];
1798  gcm_context ctx;
1799  unsigned int key_len;
1800  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
1801 
1802  memset(key_str, 0x00, 128);
1803  memset(src_str, 0x00, 128);
1804  memset(dst_str, 0x00, 257);
1805  memset(iv_str, 0x00, 128);
1806  memset(add_str, 0x00, 128);
1807  memset(tag_str, 0x00, 128);
1808  memset(output, 0x00, 128);
1809  memset(tag_output, 0x00, 16);
1810 
1811  key_len = unhexify( key_str, "19fc4c22151ee8515036c38bc5926c0e0bbd93db5d0fc522b2a6bf6298fed391" );
1812  pt_len = unhexify( src_str, "" );
1813  iv_len = unhexify( iv_str, "9547f056c6fb9ef72b908f527cb500c1" );
1814  add_len = unhexify( add_str, "511b15c25b2a324159e71c3b8e47f52d3e71e5bc35e774c39067250f4494c9c4eb184ecbe8638de9418672d9ae2c6a0e7f54c017879ffb2a371de1639693d654a43cb86e94a7350508490191790d1265b99e7b3253838b302aae33590949a8761a3bb2aeb1ba798cddeb00a53daad05a33389d4a19269d65116a84f12dba5830" );
1815 
1816  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1817  if( 0 == 0 )
1818  {
1819  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
1820  hexify( dst_str, output, pt_len );
1821  hexify( tag_str, tag_output, tag_len );
1822 
1823  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1824  fct_chk( strcmp( (char *) tag_str, "04623912bb70810e" ) == 0 );
1825  }
1826  }
1827  FCT_TEST_END();
1828 
1829 
1830  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102464_2)
1831  {
1832  unsigned char key_str[128];
1833  unsigned char src_str[128];
1834  unsigned char dst_str[257];
1835  unsigned char iv_str[128];
1836  unsigned char add_str[128];
1837  unsigned char tag_str[128];
1838  unsigned char output[128];
1839  unsigned char tag_output[16];
1840  gcm_context ctx;
1841  unsigned int key_len;
1842  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
1843 
1844  memset(key_str, 0x00, 128);
1845  memset(src_str, 0x00, 128);
1846  memset(dst_str, 0x00, 257);
1847  memset(iv_str, 0x00, 128);
1848  memset(add_str, 0x00, 128);
1849  memset(tag_str, 0x00, 128);
1850  memset(output, 0x00, 128);
1851  memset(tag_output, 0x00, 16);
1852 
1853  key_len = unhexify( key_str, "3b5d3b1920b5a105b148153ae1f1027c6d48bc99640ea853f5955fed4eb3d625" );
1854  pt_len = unhexify( src_str, "" );
1855  iv_len = unhexify( iv_str, "9a4091c2eb7e88759bd9169fee303485" );
1856  add_len = unhexify( add_str, "aa680d07143ba49a9099d555105fc3cfcb898cec11ade96776dc9778cc50fe972e1e83c52c837b71e27f81d1577f9bd09afe2260dfd9a5d9dfbd3b8b09a346a2ab48647f5dd2ff43700aecce7fa6f4aeea6ea01b2463c4e82ec116e4d92b309c5879fb4e2ca820d0183a2057ae4ad96f38a7d50643a835511aedd0442b290be3" );
1857 
1858  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1859  if( 0 == 0 )
1860  {
1861  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
1862  hexify( dst_str, output, pt_len );
1863  hexify( tag_str, tag_output, tag_len );
1864 
1865  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1866  fct_chk( strcmp( (char *) tag_str, "033bfee6b228d59b" ) == 0 );
1867  }
1868  }
1869  FCT_TEST_END();
1870 
1871 
1872  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102432_0)
1873  {
1874  unsigned char key_str[128];
1875  unsigned char src_str[128];
1876  unsigned char dst_str[257];
1877  unsigned char iv_str[128];
1878  unsigned char add_str[128];
1879  unsigned char tag_str[128];
1880  unsigned char output[128];
1881  unsigned char tag_output[16];
1882  gcm_context ctx;
1883  unsigned int key_len;
1884  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
1885 
1886  memset(key_str, 0x00, 128);
1887  memset(src_str, 0x00, 128);
1888  memset(dst_str, 0x00, 257);
1889  memset(iv_str, 0x00, 128);
1890  memset(add_str, 0x00, 128);
1891  memset(tag_str, 0x00, 128);
1892  memset(output, 0x00, 128);
1893  memset(tag_output, 0x00, 16);
1894 
1895  key_len = unhexify( key_str, "f6c4ad8e27764157789252f4bc4a04145cb9721955330a2f6a2a3b65cacf22bc" );
1896  pt_len = unhexify( src_str, "" );
1897  iv_len = unhexify( iv_str, "3de136cbd75061c888226efab136849d" );
1898  add_len = unhexify( add_str, "0f6951c127d6bc8970e2ad2799e26c7fb9ca31d223155f88374984b5660626c83276ffa6c160f75e0e1bcfa96616188f3945b15fc1b82a4e0ee44000a684b3c3840465aebe051208379ef3afe9f569ee94973d15f0a40c6f564fa4ba11d6e33cf8ae17854a9e12360a2b8495e2cceec463f5e3705c74069ba37ba6d725f458c0" );
1899 
1900  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1901  if( 0 == 0 )
1902  {
1903  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
1904  hexify( dst_str, output, pt_len );
1905  hexify( tag_str, tag_output, tag_len );
1906 
1907  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1908  fct_chk( strcmp( (char *) tag_str, "f658c689" ) == 0 );
1909  }
1910  }
1911  FCT_TEST_END();
1912 
1913 
1914  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102432_1)
1915  {
1916  unsigned char key_str[128];
1917  unsigned char src_str[128];
1918  unsigned char dst_str[257];
1919  unsigned char iv_str[128];
1920  unsigned char add_str[128];
1921  unsigned char tag_str[128];
1922  unsigned char output[128];
1923  unsigned char tag_output[16];
1924  gcm_context ctx;
1925  unsigned int key_len;
1926  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
1927 
1928  memset(key_str, 0x00, 128);
1929  memset(src_str, 0x00, 128);
1930  memset(dst_str, 0x00, 257);
1931  memset(iv_str, 0x00, 128);
1932  memset(add_str, 0x00, 128);
1933  memset(tag_str, 0x00, 128);
1934  memset(output, 0x00, 128);
1935  memset(tag_output, 0x00, 16);
1936 
1937  key_len = unhexify( key_str, "30cd99fed9706c409e366d47fefc191f79bcc47a28be78f9890fd90d4864eb85" );
1938  pt_len = unhexify( src_str, "" );
1939  iv_len = unhexify( iv_str, "8c7ce34691503bf14c776f8809f24e61" );
1940  add_len = unhexify( add_str, "4b6b10c2e2905ab356769b6453dd160a08e8623b0878fcc1c1d64822f0aea1f4f5b4698ded5d23ebafa11bc1e4ce9e5cd7d7c7b13de02d11a945ba8361b102ba49cdcfd6a416e3db774cd7bda024fccd1ad3087560dc15bbfe9b1a5c6c71fae17a329f104f6c2cba7eb6a7459535ca328146d0ccc0a9bd28a3d1c961947a3876" );
1941 
1942  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1943  if( 0 == 0 )
1944  {
1945  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
1946  hexify( dst_str, output, pt_len );
1947  hexify( tag_str, tag_output, tag_len );
1948 
1949  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1950  fct_chk( strcmp( (char *) tag_str, "7777c224" ) == 0 );
1951  }
1952  }
1953  FCT_TEST_END();
1954 
1955 
1956  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102432_2)
1957  {
1958  unsigned char key_str[128];
1959  unsigned char src_str[128];
1960  unsigned char dst_str[257];
1961  unsigned char iv_str[128];
1962  unsigned char add_str[128];
1963  unsigned char tag_str[128];
1964  unsigned char output[128];
1965  unsigned char tag_output[16];
1966  gcm_context ctx;
1967  unsigned int key_len;
1968  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
1969 
1970  memset(key_str, 0x00, 128);
1971  memset(src_str, 0x00, 128);
1972  memset(dst_str, 0x00, 257);
1973  memset(iv_str, 0x00, 128);
1974  memset(add_str, 0x00, 128);
1975  memset(tag_str, 0x00, 128);
1976  memset(output, 0x00, 128);
1977  memset(tag_output, 0x00, 16);
1978 
1979  key_len = unhexify( key_str, "9472f2452933dcfac4bb22831ce83c6a1ddf25ef8d2d3ba59d72b0d173a986e8" );
1980  pt_len = unhexify( src_str, "" );
1981  iv_len = unhexify( iv_str, "18fb2c34b0955d712960009617d300ef" );
1982  add_len = unhexify( add_str, "d283dd75cd4689c266c8e0b4b6586278aa2583c7c41bf12bd1cfdef21d349acbbabc0a2204dc4130f922949206c4fbdce3786ab8614e32908838a13b6990453abf14b84f5812e6093644accdd35f7ad611ea15aefae28b3cf1fc5da410bcea4f0a50d377fdcceffe488805bc5a71fab019b12fa8725d6e7c91e6faf12fbaf493" );
1983 
1984  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
1985  if( 0 == 0 )
1986  {
1987  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
1988  hexify( dst_str, output, pt_len );
1989  hexify( tag_str, tag_output, tag_len );
1990 
1991  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
1992  fct_chk( strcmp( (char *) tag_str, "c53b16a1" ) == 0 );
1993  }
1994  }
1995  FCT_TEST_END();
1996 
1997 
1998  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240128_0)
1999  {
2000  unsigned char key_str[128];
2001  unsigned char src_str[128];
2002  unsigned char dst_str[257];
2003  unsigned char iv_str[128];
2004  unsigned char add_str[128];
2005  unsigned char tag_str[128];
2006  unsigned char output[128];
2007  unsigned char tag_output[16];
2008  gcm_context ctx;
2009  unsigned int key_len;
2010  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
2011 
2012  memset(key_str, 0x00, 128);
2013  memset(src_str, 0x00, 128);
2014  memset(dst_str, 0x00, 257);
2015  memset(iv_str, 0x00, 128);
2016  memset(add_str, 0x00, 128);
2017  memset(tag_str, 0x00, 128);
2018  memset(output, 0x00, 128);
2019  memset(tag_output, 0x00, 16);
2020 
2021  key_len = unhexify( key_str, "e06d5319210f4107ea7267fa2e8183fcbf74fd3b0579b856577177d9cb307d42" );
2022  pt_len = unhexify( src_str, "2b9179d21cb884581b0e4f462455167f1f7899717245d4aed3d8db5983daccccebfc2130a20c284563bea5997cc0438c83d8fa7bb9e3588efed285a0fcc31456dc9a3122b97bb22f7edc36973475925828c323565e417ec95190db63b21881016b5332f2e400bb4724c86a8ee0247149370ee5412f743dc6bf7ca5bcc31afa0f" );
2023  iv_len = unhexify( iv_str, "f2b0564705430bc672964b049115e122" );
2024  add_len = unhexify( add_str, "" );
2025 
2026  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2027  if( 0 == 0 )
2028  {
2029  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
2030  hexify( dst_str, output, pt_len );
2031  hexify( tag_str, tag_output, tag_len );
2032 
2033  fct_chk( strcmp( (char *) dst_str, "3fa342a76cb5d501e6a6fade14aab54a76620e4ea2287147d4ca2b9d62d2a643591e5df570ef474ee88ad22401c1059e3130a904e9bf359c4a6151ff2f3e4f78ef27a67d527da8e448b0ef5cdcfec85f3525e35f8d024540387e4cdcb1018c281a1af7d4a3688a0fec4d9f473c816f7d4c4c369f70d7dfe8f1b7fa4f581098a1" ) == 0 );
2034  fct_chk( strcmp( (char *) tag_str, "18f186ed1ee1f4f8b29db495587d0ab0" ) == 0 );
2035  }
2036  }
2037  FCT_TEST_END();
2038 
2039 
2040  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240128_1)
2041  {
2042  unsigned char key_str[128];
2043  unsigned char src_str[128];
2044  unsigned char dst_str[257];
2045  unsigned char iv_str[128];
2046  unsigned char add_str[128];
2047  unsigned char tag_str[128];
2048  unsigned char output[128];
2049  unsigned char tag_output[16];
2050  gcm_context ctx;
2051  unsigned int key_len;
2052  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
2053 
2054  memset(key_str, 0x00, 128);
2055  memset(src_str, 0x00, 128);
2056  memset(dst_str, 0x00, 257);
2057  memset(iv_str, 0x00, 128);
2058  memset(add_str, 0x00, 128);
2059  memset(tag_str, 0x00, 128);
2060  memset(output, 0x00, 128);
2061  memset(tag_output, 0x00, 16);
2062 
2063  key_len = unhexify( key_str, "0dfa834e98b6c51ee925dd9edc9be72c209ddcd9099ded57b533f2236895a229" );
2064  pt_len = unhexify( src_str, "7f4e4f11091bf51976c0fc71ecbcd0985cdad2135549c818c09567801d8a9a42c719aab7dc2cb58a10b5067d14c52cabe6bb9b939e7b9cd395eaf10ba6a53fd2e6446e1e501440134e04e662ef7ebb1c9c78bbd3fd7cb9de8b985418be1b43ebb5d7902ccb4c299c325c8a7cc1de9174f544bc60828c1eebad49287caa4108a0" );
2065  iv_len = unhexify( iv_str, "a101b13b238cfac6964fd6a43daea5a7" );
2066  add_len = unhexify( add_str, "" );
2067 
2068  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2069  if( 0 == 0 )
2070  {
2071  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
2072  hexify( dst_str, output, pt_len );
2073  hexify( tag_str, tag_output, tag_len );
2074 
2075  fct_chk( strcmp( (char *) dst_str, "bc60d2047fd8712144e95cb8de1ffd9f13de7fda995f845b1a4246a4403f61ca896bd635a1570d2eb5b8740d365225c3310bf8cea3f5597826c65876b0cbcfa0e2181575be8e4dd222d236d8a8064a10a56262056906c1ac3c4e7100a92f3f00dab5a9ba139c72519b136d387da71fefe2564d9f1aa85b206a205267b4cfa538" ) == 0 );
2076  fct_chk( strcmp( (char *) tag_str, "c4cc1dbd1b7ff2e36f9f9f64e2385b9e" ) == 0 );
2077  }
2078  }
2079  FCT_TEST_END();
2080 
2081 
2082  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240128_2)
2083  {
2084  unsigned char key_str[128];
2085  unsigned char src_str[128];
2086  unsigned char dst_str[257];
2087  unsigned char iv_str[128];
2088  unsigned char add_str[128];
2089  unsigned char tag_str[128];
2090  unsigned char output[128];
2091  unsigned char tag_output[16];
2092  gcm_context ctx;
2093  unsigned int key_len;
2094  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
2095 
2096  memset(key_str, 0x00, 128);
2097  memset(src_str, 0x00, 128);
2098  memset(dst_str, 0x00, 257);
2099  memset(iv_str, 0x00, 128);
2100  memset(add_str, 0x00, 128);
2101  memset(tag_str, 0x00, 128);
2102  memset(output, 0x00, 128);
2103  memset(tag_output, 0x00, 16);
2104 
2105  key_len = unhexify( key_str, "ce59144b114ac5587a7a8079dc0e26f1b203338bb3e4b1d1d987bddc24150a82" );
2106  pt_len = unhexify( src_str, "bc7aa1b735a5f465cffeccd8dd4b0a33a571e9f006dc63b2a6f4df272a673bb2cc00e603248ab6be5627eebc10934fe4d1dc5cd120a475936eefa2c7bddea9f36c6c794d2c6bd2594094e56cac12d8f03e38f222a7ee4fc6c2adffe71c9c13003e301c31ff3a0405dde89bb213044d41782c4bb4eb3c262595d1c0e00522047c" );
2107  iv_len = unhexify( iv_str, "fdc5a40677110737febae4465b1a76cc" );
2108  add_len = unhexify( add_str, "" );
2109 
2110  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2111  if( 0 == 0 )
2112  {
2113  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
2114  hexify( dst_str, output, pt_len );
2115  hexify( tag_str, tag_output, tag_len );
2116 
2117  fct_chk( strcmp( (char *) dst_str, "084c31c8aef8c089867f6e0ce6e0aadafa3016c33c00ca520f28d45aac8f4d02a519b8ebafd13b9606ab9db4f2572f396091bc5a1d9910119ca662d476c2d875a4ab62d31ff5f875678f25a4775fa7fc85b1a3d442fb2c5047a3d349d56d85f85f172965e6477439045849a0b58014d9d442e2cae74709ed8594f0ec119d1d39" ) == 0 );
2118  fct_chk( strcmp( (char *) tag_str, "4c39e0d17030a5f06ecd5f4c26e79b31" ) == 0 );
2119  }
2120  }
2121  FCT_TEST_END();
2122 
2123 
2124  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240120_0)
2125  {
2126  unsigned char key_str[128];
2127  unsigned char src_str[128];
2128  unsigned char dst_str[257];
2129  unsigned char iv_str[128];
2130  unsigned char add_str[128];
2131  unsigned char tag_str[128];
2132  unsigned char output[128];
2133  unsigned char tag_output[16];
2134  gcm_context ctx;
2135  unsigned int key_len;
2136  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
2137 
2138  memset(key_str, 0x00, 128);
2139  memset(src_str, 0x00, 128);
2140  memset(dst_str, 0x00, 257);
2141  memset(iv_str, 0x00, 128);
2142  memset(add_str, 0x00, 128);
2143  memset(tag_str, 0x00, 128);
2144  memset(output, 0x00, 128);
2145  memset(tag_output, 0x00, 16);
2146 
2147  key_len = unhexify( key_str, "e7a6b459a5370ceec4d429bba9472a49db07697dc66dbc2f294d3e62ffc8aac1" );
2148  pt_len = unhexify( src_str, "cb959e5611a636317feb5265d33b315c2f5af64159029f0032e338babbdb0a525ba6b92cb3be7db9f0077561e6cffe1247bad32dea8918f562dc3cd83225cdbcaed652b87c62fea8eff153638a3a14ef9f9a88bcc8c9a6b65fa9dcc53f63d1b14fb9bb0baf17e7bfb95690c25cca2c3097497e41f7e2299a8518d5d1c5f6264e" );
2149  iv_len = unhexify( iv_str, "92468d42ad377affa7e808d95d8c673a" );
2150  add_len = unhexify( add_str, "" );
2151 
2152  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2153  if( 0 == 0 )
2154  {
2155  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
2156  hexify( dst_str, output, pt_len );
2157  hexify( tag_str, tag_output, tag_len );
2158 
2159  fct_chk( strcmp( (char *) dst_str, "599dbc47e2f2e3b06b641c510b238417b01869f0e7d08619752f6d9f4b08585731deaeb439ff26e02d7e51b45ca5e3d4a779fe4cfc9572d1d6407f98de69a8fca60bf01d1a769130bb38a67933a2be3aa3ea1470d8f32a34dc863dc800feb7ef71588edd9489bd59a23685ff5358f9b562fc0bbad9e11db7a6fedbd79225539d" ) == 0 );
2160  fct_chk( strcmp( (char *) tag_str, "e853262ed43e4d40fea6f3835d4381" ) == 0 );
2161  }
2162  }
2163  FCT_TEST_END();
2164 
2165 
2166  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240120_1)
2167  {
2168  unsigned char key_str[128];
2169  unsigned char src_str[128];
2170  unsigned char dst_str[257];
2171  unsigned char iv_str[128];
2172  unsigned char add_str[128];
2173  unsigned char tag_str[128];
2174  unsigned char output[128];
2175  unsigned char tag_output[16];
2176  gcm_context ctx;
2177  unsigned int key_len;
2178  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
2179 
2180  memset(key_str, 0x00, 128);
2181  memset(src_str, 0x00, 128);
2182  memset(dst_str, 0x00, 257);
2183  memset(iv_str, 0x00, 128);
2184  memset(add_str, 0x00, 128);
2185  memset(tag_str, 0x00, 128);
2186  memset(output, 0x00, 128);
2187  memset(tag_output, 0x00, 16);
2188 
2189  key_len = unhexify( key_str, "9818904a99e3d80c95dc71a16483ade1b9b8e7df638ce6a4c1d709a24416cbe9" );
2190  pt_len = unhexify( src_str, "2c073cdc11a8d58fb55e1dadbbc0372dde86c387fa99c9249bd04cb2f2d239de01bec8c8771a9fb33664ee06ea81c37a824525664054173b63a2894d8d7ffc60b9e93052802478a189be5835d979a28ce7025b219add0622f97c9bcf3ecf629b56408ed002a141061320400409345e94a7a7e3906611305f96f2abc9d62cc435" );
2191  iv_len = unhexify( iv_str, "96a301ab6bc0309be9735bd21cc9e10d" );
2192  add_len = unhexify( add_str, "" );
2193 
2194  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2195  if( 0 == 0 )
2196  {
2197  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
2198  hexify( dst_str, output, pt_len );
2199  hexify( tag_str, tag_output, tag_len );
2200 
2201  fct_chk( strcmp( (char *) dst_str, "4876e449b0cac09a37bb7e4b8da238f4c699af9714ec4fcf21a07c5aee8783311a13149d837a949c594a472dda01e8b6c064755b6328e3ef8d6063f8d8f19cfda3147b563b0f5fb8556ace49cb0f872822a63b06f261b6970f7c18be19372a852beadf02288c0b4079587c0f8eab1858eeec11c6ba8d64448282068fddd8a63d" ) == 0 );
2202  fct_chk( strcmp( (char *) tag_str, "e1e8b62ce427e5192348b1f09183c9" ) == 0 );
2203  }
2204  }
2205  FCT_TEST_END();
2206 
2207 
2208  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240120_2)
2209  {
2210  unsigned char key_str[128];
2211  unsigned char src_str[128];
2212  unsigned char dst_str[257];
2213  unsigned char iv_str[128];
2214  unsigned char add_str[128];
2215  unsigned char tag_str[128];
2216  unsigned char output[128];
2217  unsigned char tag_output[16];
2218  gcm_context ctx;
2219  unsigned int key_len;
2220  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
2221 
2222  memset(key_str, 0x00, 128);
2223  memset(src_str, 0x00, 128);
2224  memset(dst_str, 0x00, 257);
2225  memset(iv_str, 0x00, 128);
2226  memset(add_str, 0x00, 128);
2227  memset(tag_str, 0x00, 128);
2228  memset(output, 0x00, 128);
2229  memset(tag_output, 0x00, 16);
2230 
2231  key_len = unhexify( key_str, "9b34f137e3f37addad8a6573b8b6dac9a29e97db53c0a7610f37c72a0efaebfa" );
2232  pt_len = unhexify( src_str, "c1e09c432c68a2c119aeb3b19c21180e3c8e428e12033f416a92862036f5e8a39a8893b10fe5476e388d079143ee0b79b183a3400db779cfbf1467d69887306b124a8578c173cd5308d4448eefcf1d57f117eb12bc28bd1d0ff5c3702139655197d7305bda70181c85376e1a90fb2c5b036d9ea5d318d3219132ea6c5edf7b7d" );
2233  iv_len = unhexify( iv_str, "50dddb2ebe4f8763509a63d07322277e" );
2234  add_len = unhexify( add_str, "" );
2235 
2236  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2237  if( 0 == 0 )
2238  {
2239  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
2240  hexify( dst_str, output, pt_len );
2241  hexify( tag_str, tag_output, tag_len );
2242 
2243  fct_chk( strcmp( (char *) dst_str, "793e1b06e1593b8c0ba13a38ff23afaa6007482262bc2d0de9fb910f349eff88d3dd05d56eb9a089eed801eae851676b7a401991b72bf45ac005c89e906a37ed7231df4aeeeb1fcf206ca1311117e7e7348faf1d58acc69c5702f802287083d3ed9e16cf87adcdfa1bb0c21c40c2102fd0def91985f92285e6ea1cdd550e7f50" ) == 0 );
2244  fct_chk( strcmp( (char *) tag_str, "b3c6ae17274faaca657dcb172dc1fb" ) == 0 );
2245  }
2246  }
2247  FCT_TEST_END();
2248 
2249 
2250  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240112_0)
2251  {
2252  unsigned char key_str[128];
2253  unsigned char src_str[128];
2254  unsigned char dst_str[257];
2255  unsigned char iv_str[128];
2256  unsigned char add_str[128];
2257  unsigned char tag_str[128];
2258  unsigned char output[128];
2259  unsigned char tag_output[16];
2260  gcm_context ctx;
2261  unsigned int key_len;
2262  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
2263 
2264  memset(key_str, 0x00, 128);
2265  memset(src_str, 0x00, 128);
2266  memset(dst_str, 0x00, 257);
2267  memset(iv_str, 0x00, 128);
2268  memset(add_str, 0x00, 128);
2269  memset(tag_str, 0x00, 128);
2270  memset(output, 0x00, 128);
2271  memset(tag_output, 0x00, 16);
2272 
2273  key_len = unhexify( key_str, "66b40e2e671bdf244b45644d1a5adc63011b32156ba9f5e03dffacc1a9165061" );
2274  pt_len = unhexify( src_str, "985546ee12ba89d95988ad8a4153c4f9d3c91c0e3633a95b4f9b588bba0032006c93210514357c91d574b436da13dc9f68194a981e7b65eb79e56be9cf1dabfdf531407727c034a3c7743bb22aa02b26f159c2eff3c7ed52027de2e8b8b2fefb72c04fbf20a1ffe10d6dda790a9812cdbe9f2ed6706d7a2639e851a42870efb8" );
2275  iv_len = unhexify( iv_str, "4e090871e889b4be36db5e1df1ea283d" );
2276  add_len = unhexify( add_str, "" );
2277 
2278  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2279  if( 0 == 0 )
2280  {
2281  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
2282  hexify( dst_str, output, pt_len );
2283  hexify( tag_str, tag_output, tag_len );
2284 
2285  fct_chk( strcmp( (char *) dst_str, "f93eebffeddfd16b4618b893d57b459b704b894b38a5eaf6cce54026c80090be8328e12261e1b10e81c73ac8261c2982bb25603c12f5ffff5c70b2199515c17200db2d950a3f2064d7b362607adbf3686f27420ec15e18467e86faa1efa946a73c8888b8fdc825742b8fbec6e48cdabbb45f3cd2b6b6e536b6fbf3429aebe934" ) == 0 );
2286  fct_chk( strcmp( (char *) tag_str, "ed88c856c41cac49f4767909ac79" ) == 0 );
2287  }
2288  }
2289  FCT_TEST_END();
2290 
2291 
2292  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240112_1)
2293  {
2294  unsigned char key_str[128];
2295  unsigned char src_str[128];
2296  unsigned char dst_str[257];
2297  unsigned char iv_str[128];
2298  unsigned char add_str[128];
2299  unsigned char tag_str[128];
2300  unsigned char output[128];
2301  unsigned char tag_output[16];
2302  gcm_context ctx;
2303  unsigned int key_len;
2304  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
2305 
2306  memset(key_str, 0x00, 128);
2307  memset(src_str, 0x00, 128);
2308  memset(dst_str, 0x00, 257);
2309  memset(iv_str, 0x00, 128);
2310  memset(add_str, 0x00, 128);
2311  memset(tag_str, 0x00, 128);
2312  memset(output, 0x00, 128);
2313  memset(tag_output, 0x00, 16);
2314 
2315  key_len = unhexify( key_str, "18c5105a9651144ce965b4270398b982120b885850114571ef8e2cbc5d2f5e04" );
2316  pt_len = unhexify( src_str, "00c5ea3d91248bfe30c5a6d26dbdf0609f977afcfa842b603c1061b2a473c9a79b421b2509550309e4be9c5015c51c6def9ee68c242f6e206b3027ce8e58b7ab96aaa50ced1d78c2dfcbc2589575bec2ce3b6a5066276fe7dca4f1118808d1e5cac062667053c15350289da03cd073377c2d66c01e3098ed01b75788c7e1f9e7" );
2317  iv_len = unhexify( iv_str, "a3a5f82748acc887e33328fd7f4ce1fd" );
2318  add_len = unhexify( add_str, "" );
2319 
2320  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2321  if( 0 == 0 )
2322  {
2323  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
2324  hexify( dst_str, output, pt_len );
2325  hexify( tag_str, tag_output, tag_len );
2326 
2327  fct_chk( strcmp( (char *) dst_str, "d91ed6886a269dc1eb0745dc4b97fc54cbea5e6857d10a303a3caf828b4e0e20bb742bca17021b7852d09a6d7d3a56ad82298c15a2082fed0e0e326bb16dd677ee262ead93a24147de3c07eb8a95b108abf17357155f1de79171689407b6545c9fdf8ab4486576490430c0e043e21e7c40ce88e752cb006cb3c59479a7e56cf7" ) == 0 );
2328  fct_chk( strcmp( (char *) tag_str, "add4e086d612a119c6aae46ba9e5" ) == 0 );
2329  }
2330  }
2331  FCT_TEST_END();
2332 
2333 
2334  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240112_2)
2335  {
2336  unsigned char key_str[128];
2337  unsigned char src_str[128];
2338  unsigned char dst_str[257];
2339  unsigned char iv_str[128];
2340  unsigned char add_str[128];
2341  unsigned char tag_str[128];
2342  unsigned char output[128];
2343  unsigned char tag_output[16];
2344  gcm_context ctx;
2345  unsigned int key_len;
2346  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
2347 
2348  memset(key_str, 0x00, 128);
2349  memset(src_str, 0x00, 128);
2350  memset(dst_str, 0x00, 257);
2351  memset(iv_str, 0x00, 128);
2352  memset(add_str, 0x00, 128);
2353  memset(tag_str, 0x00, 128);
2354  memset(output, 0x00, 128);
2355  memset(tag_output, 0x00, 16);
2356 
2357  key_len = unhexify( key_str, "4667cabeb3a644e371cbbe9195413daab025cc6efc12298bfaea0dd9bc028f9f" );
2358  pt_len = unhexify( src_str, "9772ec47f3cd26f091bf117e085f2394db258c2c460dc3b1402edcb60a8f70517f82aa669607b78c2ad79c662c3b376cee1b9f34c4ec5d15319c33de78a440e7f2a4108c3c9da51604adde2025ff1dc336c49279c13a7153931df675df0e78f17a4d72973311af74fe755c85c7869baf3896bb738925942dc67f1b6e690c9d48" );
2359  iv_len = unhexify( iv_str, "7e8927c69951d901494539ab95ac5906" );
2360  add_len = unhexify( add_str, "" );
2361 
2362  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2363  if( 0 == 0 )
2364  {
2365  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
2366  hexify( dst_str, output, pt_len );
2367  hexify( tag_str, tag_output, tag_len );
2368 
2369  fct_chk( strcmp( (char *) dst_str, "5d62fa69cfbfdec30193408dad15cf983ad707ee921068b817676eca9f70f9ca4623a8c113df5fba86131415f4ec546c7f1a94ff9d02cb8ddcf421c7cc85ed87ce712fcd8d5f45460749ced0d900fe0368c59b1c082bd5811c1a648a51768d5e4bfbc23cada3791f289d8b61fd494398be1ad9ee9ff471abb547000ac2c1a5d1" ) == 0 );
2370  fct_chk( strcmp( (char *) tag_str, "0ae6bd5e8c25d1585e4d4c266048" ) == 0 );
2371  }
2372  }
2373  FCT_TEST_END();
2374 
2375 
2376  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240104_0)
2377  {
2378  unsigned char key_str[128];
2379  unsigned char src_str[128];
2380  unsigned char dst_str[257];
2381  unsigned char iv_str[128];
2382  unsigned char add_str[128];
2383  unsigned char tag_str[128];
2384  unsigned char output[128];
2385  unsigned char tag_output[16];
2386  gcm_context ctx;
2387  unsigned int key_len;
2388  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
2389 
2390  memset(key_str, 0x00, 128);
2391  memset(src_str, 0x00, 128);
2392  memset(dst_str, 0x00, 257);
2393  memset(iv_str, 0x00, 128);
2394  memset(add_str, 0x00, 128);
2395  memset(tag_str, 0x00, 128);
2396  memset(output, 0x00, 128);
2397  memset(tag_output, 0x00, 16);
2398 
2399  key_len = unhexify( key_str, "3d58cd514de36ca7848aad1bf4d314b3b3415cae1ce9a169021ae84a67d4ab69" );
2400  pt_len = unhexify( src_str, "e1c2e79e3f64c5c64f853ac9ba1a853fbf1bfd3001d48f7e73e0e97aa1b8ed1f1a7066178e75df688c5edb1c42e270ea38ab0e246c6a47fde4c3141436fe4b34beb9033ba7eebfc53cf1f6c8ae1794e9bb536152d196e1b96803316a05f1dcb9016c8b35bf4da06cd18da6243acc3a3dc641d3a1332b1915932ca89937cb0327" );
2401  iv_len = unhexify( iv_str, "4a1c2e7a3f9788c3c2fdd0dcc0cfe84b" );
2402  add_len = unhexify( add_str, "" );
2403 
2404  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2405  if( 0 == 0 )
2406  {
2407  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
2408  hexify( dst_str, output, pt_len );
2409  hexify( tag_str, tag_output, tag_len );
2410 
2411  fct_chk( strcmp( (char *) dst_str, "50d63c660a2b4f8e87276c5f58556cdf15d0fbb2c8ea5e3266d28c515643109aa7fc950d6d48f504dad52457e16576b581d37574574cd8b7ac12b7d59b819992c941a27e23ef9f257ed0c4ea4eda6c1f3b28b44decb63a92fae84c3556dcb9d6458e729dad6a7db9f7411690fce971b3b240f8f9979ed992f87d76e227fd7384" ) == 0 );
2412  fct_chk( strcmp( (char *) tag_str, "ac842579bdd1ac77c84dffac2d" ) == 0 );
2413  }
2414  }
2415  FCT_TEST_END();
2416 
2417 
2418  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240104_1)
2419  {
2420  unsigned char key_str[128];
2421  unsigned char src_str[128];
2422  unsigned char dst_str[257];
2423  unsigned char iv_str[128];
2424  unsigned char add_str[128];
2425  unsigned char tag_str[128];
2426  unsigned char output[128];
2427  unsigned char tag_output[16];
2428  gcm_context ctx;
2429  unsigned int key_len;
2430  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
2431 
2432  memset(key_str, 0x00, 128);
2433  memset(src_str, 0x00, 128);
2434  memset(dst_str, 0x00, 257);
2435  memset(iv_str, 0x00, 128);
2436  memset(add_str, 0x00, 128);
2437  memset(tag_str, 0x00, 128);
2438  memset(output, 0x00, 128);
2439  memset(tag_output, 0x00, 16);
2440 
2441  key_len = unhexify( key_str, "b7e4cd80f03a7ed092c776b243dfad7776d9caf3e679939038e33ac94d8931de" );
2442  pt_len = unhexify( src_str, "102e2d2c0d01dbc69733d2451d1ac1817d60418685d4ae8aa44e1ede1c1e08d2f71f0aef41a72bd9f052ea4a9a057330c95d964f8c3679b80fc9c0952b46f38e2ef055cb33703d686757400210fa5a39bc7e3bb9b8b9cc20c95d5607e2f10bb5501507680ef3aaad96553333b1d27bf2f7ac102c983eede2262a5c6237c1d754" );
2443  iv_len = unhexify( iv_str, "af160a983d674b7d19294f89c3c9307d" );
2444  add_len = unhexify( add_str, "" );
2445 
2446  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2447  if( 0 == 0 )
2448  {
2449  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
2450  hexify( dst_str, output, pt_len );
2451  hexify( tag_str, tag_output, tag_len );
2452 
2453  fct_chk( strcmp( (char *) dst_str, "6bdfae299d796ef36850327b091ba7bb02e29b643ca4c8bc199eb91ecbaf88426412cfd5570e0042cab735cc46ec648b0877955b3f9a5707d56c478aa77ae5510749beb1e44dbbb37791f18477123436a985e5e9f79fda0a057504847e4ecae841f24e1b53076d3efc6bdea2ebb336ee0e4b5e6ea973e3e50a27b5c2e6fee3e2" ) == 0 );
2454  fct_chk( strcmp( (char *) tag_str, "fdf21e2ac356e507745a07fc96" ) == 0 );
2455  }
2456  }
2457  FCT_TEST_END();
2458 
2459 
2460  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240104_2)
2461  {
2462  unsigned char key_str[128];
2463  unsigned char src_str[128];
2464  unsigned char dst_str[257];
2465  unsigned char iv_str[128];
2466  unsigned char add_str[128];
2467  unsigned char tag_str[128];
2468  unsigned char output[128];
2469  unsigned char tag_output[16];
2470  gcm_context ctx;
2471  unsigned int key_len;
2472  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
2473 
2474  memset(key_str, 0x00, 128);
2475  memset(src_str, 0x00, 128);
2476  memset(dst_str, 0x00, 257);
2477  memset(iv_str, 0x00, 128);
2478  memset(add_str, 0x00, 128);
2479  memset(tag_str, 0x00, 128);
2480  memset(output, 0x00, 128);
2481  memset(tag_output, 0x00, 16);
2482 
2483  key_len = unhexify( key_str, "3a0c46eacfe85cbc0c5f527b87cd075bdeb386d0ca6de816a87cfddcb8a87ae8" );
2484  pt_len = unhexify( src_str, "6d1203dc8395e35a35e234203625ea9d37d1c009db2ac8b1d5b29021997b5421f1d172f4c9a7eb7dbb67f0002720fc412f5b1550c739a2d7ba4387a1f978bd548fe6169d9473893782b10fab99198cb8b4553dfe27583c017136fd8c95070d8d7f9a602d15248d38d728157a0b26404e662f9a5554d3e1582bc0e12f0054792f" );
2485  iv_len = unhexify( iv_str, "b1cde63ad2ad4b8a7bfb36ab78385c3d" );
2486  add_len = unhexify( add_str, "" );
2487 
2488  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2489  if( 0 == 0 )
2490  {
2491  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
2492  hexify( dst_str, output, pt_len );
2493  hexify( tag_str, tag_output, tag_len );
2494 
2495  fct_chk( strcmp( (char *) dst_str, "9de3a45c976d32ed2af5074ef13b1f86f35b1689b1c698b2e427d5dd62556eb14439f77cd8fcbe686a9a08a922e3f54a78e86fd284de493a740586360b63da09bc1d001777582969c679db54a0ddb8d7dfdb46750edc882804a1c00e417912b72b4cad54dffa1897eba6188b3e61ebf0c3dfab292c2686dcb9db3012e0788c7f" ) == 0 );
2496  fct_chk( strcmp( (char *) tag_str, "641896daab917ea3c82524c194" ) == 0 );
2497  }
2498  }
2499  FCT_TEST_END();
2500 
2501 
2502  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024096_0)
2503  {
2504  unsigned char key_str[128];
2505  unsigned char src_str[128];
2506  unsigned char dst_str[257];
2507  unsigned char iv_str[128];
2508  unsigned char add_str[128];
2509  unsigned char tag_str[128];
2510  unsigned char output[128];
2511  unsigned char tag_output[16];
2512  gcm_context ctx;
2513  unsigned int key_len;
2514  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
2515 
2516  memset(key_str, 0x00, 128);
2517  memset(src_str, 0x00, 128);
2518  memset(dst_str, 0x00, 257);
2519  memset(iv_str, 0x00, 128);
2520  memset(add_str, 0x00, 128);
2521  memset(tag_str, 0x00, 128);
2522  memset(output, 0x00, 128);
2523  memset(tag_output, 0x00, 16);
2524 
2525  key_len = unhexify( key_str, "4d540e0ba27103667eb4511ce9d243592bccb8515ab59896c9922cb5f1b47a02" );
2526  pt_len = unhexify( src_str, "d79f9b1c74e3141f188704c8d5bdaaf6083642be50d00f20c97b56646863895250d131e00db0ecf4f035d42f08cfe20f401c2d3062a38daa0b9e7c19fa7c5d344680aff48d506daa181451f6b34ed9099b9a5b39c0166e93ac4463c9ad51f48e3063b1c16793615336f55d516d079f6c510c2891b97aaa95e5f621e3b5202620" );
2527  iv_len = unhexify( iv_str, "a2ed37daa797522a39b01dd206d06514" );
2528  add_len = unhexify( add_str, "" );
2529 
2530  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2531  if( 0 == 0 )
2532  {
2533  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
2534  hexify( dst_str, output, pt_len );
2535  hexify( tag_str, tag_output, tag_len );
2536 
2537  fct_chk( strcmp( (char *) dst_str, "6a891bd289ec05990424a2775287f4725aecefe1ab21fa0ca643f37829cae9fcbbf805b883f807102ff12f1a85964df818057daedd41c7349ef32b24642186c45d2858c3260d5b90594969e26b691963ac7fbd2eb4eef466ae690ca274d9194dfc4df1c3baec02abc38fbfc0e2c7c4fcafed227d4f6607329f57ee439435c714" ) == 0 );
2538  fct_chk( strcmp( (char *) tag_str, "9074ecf66bbd582318495158" ) == 0 );
2539  }
2540  }
2541  FCT_TEST_END();
2542 
2543 
2544  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024096_1)
2545  {
2546  unsigned char key_str[128];
2547  unsigned char src_str[128];
2548  unsigned char dst_str[257];
2549  unsigned char iv_str[128];
2550  unsigned char add_str[128];
2551  unsigned char tag_str[128];
2552  unsigned char output[128];
2553  unsigned char tag_output[16];
2554  gcm_context ctx;
2555  unsigned int key_len;
2556  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
2557 
2558  memset(key_str, 0x00, 128);
2559  memset(src_str, 0x00, 128);
2560  memset(dst_str, 0x00, 257);
2561  memset(iv_str, 0x00, 128);
2562  memset(add_str, 0x00, 128);
2563  memset(tag_str, 0x00, 128);
2564  memset(output, 0x00, 128);
2565  memset(tag_output, 0x00, 16);
2566 
2567  key_len = unhexify( key_str, "151d7e4db9e21c87bef65c2ac6aab5b6b045b7dadaf6424644a91e04ba810585" );
2568  pt_len = unhexify( src_str, "0984c5d3f68beba1db4e6ade429cb8954cccaba9fcf4d852897ef69f8483428932c8f18a891f54b68f7d49a03c57f7144d802eb996d233cec930d5eb19f43d0faf9c94a2d7aaca40c8066a2882481f521bb5f6ba15b213810da373817eab3d52b5dd143a1521239482fbf4a07fe68c3d35c90c6ce27b55e40abcf432a261dc58" );
2569  iv_len = unhexify( iv_str, "49e0e0d089e3574fa5a33c963b403ccd" );
2570  add_len = unhexify( add_str, "" );
2571 
2572  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2573  if( 0 == 0 )
2574  {
2575  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
2576  hexify( dst_str, output, pt_len );
2577  hexify( tag_str, tag_output, tag_len );
2578 
2579  fct_chk( strcmp( (char *) dst_str, "6938d8a7625d1291f249ef1e086bb030ccdc844a9271fee16db60e7acfe4aedd720de76345109d5e6849fd1576c0fe0c34e73dca4011f8565cffccef427198c927f19f63b821f43844d008ceee0566f0d8062d7860e92ebdf21dcde80039a04504cd8ee94874b2eeb038962a74ac9902d9d7ce09afdac7aa706bf3892de19531" ) == 0 );
2580  fct_chk( strcmp( (char *) tag_str, "48d3a8116213f92bfbe86bfe" ) == 0 );
2581  }
2582  }
2583  FCT_TEST_END();
2584 
2585 
2586  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024096_2)
2587  {
2588  unsigned char key_str[128];
2589  unsigned char src_str[128];
2590  unsigned char dst_str[257];
2591  unsigned char iv_str[128];
2592  unsigned char add_str[128];
2593  unsigned char tag_str[128];
2594  unsigned char output[128];
2595  unsigned char tag_output[16];
2596  gcm_context ctx;
2597  unsigned int key_len;
2598  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
2599 
2600  memset(key_str, 0x00, 128);
2601  memset(src_str, 0x00, 128);
2602  memset(dst_str, 0x00, 257);
2603  memset(iv_str, 0x00, 128);
2604  memset(add_str, 0x00, 128);
2605  memset(tag_str, 0x00, 128);
2606  memset(output, 0x00, 128);
2607  memset(tag_output, 0x00, 16);
2608 
2609  key_len = unhexify( key_str, "3e9615515ca45109316cc02bbf3a23406eeeab2092dc6614db76e4e047a3b023" );
2610  pt_len = unhexify( src_str, "46c4c6bad0f21172094ae07a47fd76477b69ca75cc08970e8dbf7b8644d4bcdce96f9d15dd3fba5fba3f851af145652ad004ee525d180d2f3e03bc0ec1c0e8ffebc1474c342732b7247f657ba87ffcef9333857123f29c4976b048c89c24107529dc5dd69004fd176eb0ca6ddae1df7be7d28b3b9da976413588f20c1fff488a" );
2611  iv_len = unhexify( iv_str, "c1facf73da64e16e4acee3fdc3cc6b10" );
2612  add_len = unhexify( add_str, "" );
2613 
2614  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2615  if( 0 == 0 )
2616  {
2617  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
2618  hexify( dst_str, output, pt_len );
2619  hexify( tag_str, tag_output, tag_len );
2620 
2621  fct_chk( strcmp( (char *) dst_str, "4415dc96d3daf703d392ba1318254143a58870e691570ca6b1be6074dd9c1feae12c72f9314fc3d19b6affb59b642ade6c4e64b7c99f850bff781de193cc0a321a29356addcb0918a282e53801541b5b01383fa7624c36d1f67423f02d2b54f58deca582b7031d192a4d32bc154ae1149cb3c5b48538c803a8d01fa7cfc1683f" ) == 0 );
2622  fct_chk( strcmp( (char *) tag_str, "322d8d1b475a7fd3d0c45609" ) == 0 );
2623  }
2624  }
2625  FCT_TEST_END();
2626 
2627 
2628  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024064_0)
2629  {
2630  unsigned char key_str[128];
2631  unsigned char src_str[128];
2632  unsigned char dst_str[257];
2633  unsigned char iv_str[128];
2634  unsigned char add_str[128];
2635  unsigned char tag_str[128];
2636  unsigned char output[128];
2637  unsigned char tag_output[16];
2638  gcm_context ctx;
2639  unsigned int key_len;
2640  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
2641 
2642  memset(key_str, 0x00, 128);
2643  memset(src_str, 0x00, 128);
2644  memset(dst_str, 0x00, 257);
2645  memset(iv_str, 0x00, 128);
2646  memset(add_str, 0x00, 128);
2647  memset(tag_str, 0x00, 128);
2648  memset(output, 0x00, 128);
2649  memset(tag_output, 0x00, 16);
2650 
2651  key_len = unhexify( key_str, "52c1a14b4ed57cbfa317fe0db87528f4c5551deb9ffc88932589e3255b1d3477" );
2652  pt_len = unhexify( src_str, "eb9081e19b63c94b5f3a696c5fc2c0b7f434e1574394d0b41dd67dfac28a73d4ba26c86b3728b2802fb9d0930c89586b09602900d33eddc5a00a4e98881b5acd5597aae9b80b1569ede74042948f2cd66c3eeae227ae10241df001c85dfe8a5fda0aa21142ecade76290dfdd4a27b6ff3a932dacc0b5f461501239ae8d6d5f41" );
2653  iv_len = unhexify( iv_str, "36d02604b5b24f49b08bb01053a23425" );
2654  add_len = unhexify( add_str, "" );
2655 
2656  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2657  if( 0 == 0 )
2658  {
2659  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
2660  hexify( dst_str, output, pt_len );
2661  hexify( tag_str, tag_output, tag_len );
2662 
2663  fct_chk( strcmp( (char *) dst_str, "12fbea9e2830ba28551b681c3c0b04ac242dbbde318f79e1cb52dba6bdde58f28f75f2fb378b89f53cef2534a72870a1f526b41619c4b9f811333e8ee639be1250a5c7e47ecbee215b6927ecffaf7d714327b2c4e8b362b1a4f018ff96f67557ca25799adfac04dd980e8e33f993051f975f14e05be8b7342578d0c9d45b237a" ) == 0 );
2664  fct_chk( strcmp( (char *) tag_str, "01e6af272386cf1a" ) == 0 );
2665  }
2666  }
2667  FCT_TEST_END();
2668 
2669 
2670  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024064_1)
2671  {
2672  unsigned char key_str[128];
2673  unsigned char src_str[128];
2674  unsigned char dst_str[257];
2675  unsigned char iv_str[128];
2676  unsigned char add_str[128];
2677  unsigned char tag_str[128];
2678  unsigned char output[128];
2679  unsigned char tag_output[16];
2680  gcm_context ctx;
2681  unsigned int key_len;
2682  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
2683 
2684  memset(key_str, 0x00, 128);
2685  memset(src_str, 0x00, 128);
2686  memset(dst_str, 0x00, 257);
2687  memset(iv_str, 0x00, 128);
2688  memset(add_str, 0x00, 128);
2689  memset(tag_str, 0x00, 128);
2690  memset(output, 0x00, 128);
2691  memset(tag_output, 0x00, 16);
2692 
2693  key_len = unhexify( key_str, "4d08a07b3e94025523a4a6415029c8f9e11fbbfd72564964c53b8f56f865af0d" );
2694  pt_len = unhexify( src_str, "4ac7c27b07a4aebe5caf1de0538d13a56e8c11bc73713bf78c7abbad3b9f6d690e00487267da108e2f2ae67c24b4657e77bb83e2d5e4b244cf34e924cf7bdb443f87ac8cdb374147449f8d06eb517a25dc86f03a389f34190aed5a7faace03ebf646fec2b173b2c15fd5cbe7c5affb6c3ee6d1cace8b00dd8f668a2336da5bfc" );
2695  iv_len = unhexify( iv_str, "98b745c7f231ba3515eddf68f7dc80f4" );
2696  add_len = unhexify( add_str, "" );
2697 
2698  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2699  if( 0 == 0 )
2700  {
2701  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
2702  hexify( dst_str, output, pt_len );
2703  hexify( tag_str, tag_output, tag_len );
2704 
2705  fct_chk( strcmp( (char *) dst_str, "337693c5c746d8fcdf7cd44d8f76a4db899402b891176e85b4c549c366ad709322874e986d6b939a350d2a0e3b77924d6d15454d882d1d3c94469d749a20d8f0116504cb31888a1e81d3abf25dbb7a7f9e7def26b9151ee649c059da1955f1716423c734dcd26a548844abb6b64c44383ec698e59361b6582c6883b77c338342" ) == 0 );
2706  fct_chk( strcmp( (char *) tag_str, "7a9266c4e5ae48f1" ) == 0 );
2707  }
2708  }
2709  FCT_TEST_END();
2710 
2711 
2712  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024064_2)
2713  {
2714  unsigned char key_str[128];
2715  unsigned char src_str[128];
2716  unsigned char dst_str[257];
2717  unsigned char iv_str[128];
2718  unsigned char add_str[128];
2719  unsigned char tag_str[128];
2720  unsigned char output[128];
2721  unsigned char tag_output[16];
2722  gcm_context ctx;
2723  unsigned int key_len;
2724  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
2725 
2726  memset(key_str, 0x00, 128);
2727  memset(src_str, 0x00, 128);
2728  memset(dst_str, 0x00, 257);
2729  memset(iv_str, 0x00, 128);
2730  memset(add_str, 0x00, 128);
2731  memset(tag_str, 0x00, 128);
2732  memset(output, 0x00, 128);
2733  memset(tag_output, 0x00, 16);
2734 
2735  key_len = unhexify( key_str, "b9d9fc42b58deafe9bc9734f4129dcad34a2e55ee5ad8abcc3f7bc42dd2c0e05" );
2736  pt_len = unhexify( src_str, "11dbcd6cd53d2af766a1b6e4af2bc8bac2811ef818da2d1f81c140ab6e0298e958fef033736bc6e0dccd660b9a3e4222bdf3f89a95b206785d22852201e6dd00b44232ef3c03393893813dccf1960410b50cf50602ead8bd246fad88e66c88b50821578004779b6c45c13d8211df1cfc0fb2d7a342f58e4f2f3623fd31b12c30" );
2737  iv_len = unhexify( iv_str, "67931493096f4550633c322622bc1376" );
2738  add_len = unhexify( add_str, "" );
2739 
2740  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2741  if( 0 == 0 )
2742  {
2743  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
2744  hexify( dst_str, output, pt_len );
2745  hexify( tag_str, tag_output, tag_len );
2746 
2747  fct_chk( strcmp( (char *) dst_str, "66ab6e7a547705d8ae8ac3cb9bc5fbbc18cd220f89aec7dfbf4f72e7bc59b483c50c9471523c3772efc5deee3a9c34c96b098842cc42f9b7d7c0d2530f45900eeb9502e4dd15363b0543c91765121fd82fcc9db88fe6a531b718c1fe94b96a27856d07707fced3021cca9cf4740833d47091797cc87f57f5388b48e2296ff352" ) == 0 );
2748  fct_chk( strcmp( (char *) tag_str, "0de60d4126733404" ) == 0 );
2749  }
2750  }
2751  FCT_TEST_END();
2752 
2753 
2754  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024032_0)
2755  {
2756  unsigned char key_str[128];
2757  unsigned char src_str[128];
2758  unsigned char dst_str[257];
2759  unsigned char iv_str[128];
2760  unsigned char add_str[128];
2761  unsigned char tag_str[128];
2762  unsigned char output[128];
2763  unsigned char tag_output[16];
2764  gcm_context ctx;
2765  unsigned int key_len;
2766  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
2767 
2768  memset(key_str, 0x00, 128);
2769  memset(src_str, 0x00, 128);
2770  memset(dst_str, 0x00, 257);
2771  memset(iv_str, 0x00, 128);
2772  memset(add_str, 0x00, 128);
2773  memset(tag_str, 0x00, 128);
2774  memset(output, 0x00, 128);
2775  memset(tag_output, 0x00, 16);
2776 
2777  key_len = unhexify( key_str, "97e736a63870546ec9c2325a8e367c8ea17a7ffa71f6cadd6909a5bb9eb12814" );
2778  pt_len = unhexify( src_str, "608280a9dcbd6dd66100a9fdd00e6dac2183e32c945b2b4d255c048243bfea15aad1a10ff3eec0ba79c531239b489a5dc155dc2775519f8d3d2ed82fa7ac653fb7c77e0dfad1c175b6c69963f5c12ff9840f18e0202502e9d1e3b170965cd86ae411af20e6d69a608c99ca8dae3cb3bcce666841132a99429bcde490d9f0b6b5" );
2779  iv_len = unhexify( iv_str, "d35192b4d233507b70c6d32f8e224577" );
2780  add_len = unhexify( add_str, "" );
2781 
2782  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2783  if( 0 == 0 )
2784  {
2785  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
2786  hexify( dst_str, output, pt_len );
2787  hexify( tag_str, tag_output, tag_len );
2788 
2789  fct_chk( strcmp( (char *) dst_str, "568a0d584fc66c876b7beb9ef8709954a2c426fb8c1936b9024181ca2cd3a7684c412715c11eab80a181be0238e32a2b689e9db36a2ac87db651058080531e7b1110938dcb09615e385d7b224b11222469145f6fb5f4c0e87b08bb3006bc5b6d2ce0a15be7fc29b27c10c645afd9d8253c094fc0f775086bdf2adac265b474d7" ) == 0 );
2790  fct_chk( strcmp( (char *) tag_str, "af18c065" ) == 0 );
2791  }
2792  }
2793  FCT_TEST_END();
2794 
2795 
2796  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024032_1)
2797  {
2798  unsigned char key_str[128];
2799  unsigned char src_str[128];
2800  unsigned char dst_str[257];
2801  unsigned char iv_str[128];
2802  unsigned char add_str[128];
2803  unsigned char tag_str[128];
2804  unsigned char output[128];
2805  unsigned char tag_output[16];
2806  gcm_context ctx;
2807  unsigned int key_len;
2808  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
2809 
2810  memset(key_str, 0x00, 128);
2811  memset(src_str, 0x00, 128);
2812  memset(dst_str, 0x00, 257);
2813  memset(iv_str, 0x00, 128);
2814  memset(add_str, 0x00, 128);
2815  memset(tag_str, 0x00, 128);
2816  memset(output, 0x00, 128);
2817  memset(tag_output, 0x00, 16);
2818 
2819  key_len = unhexify( key_str, "6d05193cc0885f7b74057ead3a0738b74eb3118b1a7e74c5c941ce0011197122" );
2820  pt_len = unhexify( src_str, "c58f51bad815a43a5705c311de4a846ea2a70cbdd2c30d709a2ae0ddf82b7c889dc599fb6e0328fad21555a99530be6deeeb5b1beb333322c2b747288e52fad008513f8040a4735cab3c8cf32c4e18bd57339c85cf5dd71e382067bee7e9ccaf68e767d77fb005a3b73a51acf942fc3b2c5c9eec6189d01a26c6ffb070165874" );
2821  iv_len = unhexify( iv_str, "5160b65bf7a2ccf77fa2e3e0b3866f26" );
2822  add_len = unhexify( add_str, "" );
2823 
2824  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2825  if( 0 == 0 )
2826  {
2827  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
2828  hexify( dst_str, output, pt_len );
2829  hexify( tag_str, tag_output, tag_len );
2830 
2831  fct_chk( strcmp( (char *) dst_str, "64dc5834a63be414c3714f1b34feddbacd568c6466cbd06f665aa269187a160db79306a53b629fedc1247bd892998fe3208b3105f6273676bbdbff6e254de332d02bc8842ef98d6b79994792eeb5be3a807452b14ae5b5027db81421cc22936ccaa7ae1b77a145462634e424ccf2dfaf001ed4477b804e204120a1416b449b8c" ) == 0 );
2832  fct_chk( strcmp( (char *) tag_str, "364ef0b5" ) == 0 );
2833  }
2834  }
2835  FCT_TEST_END();
2836 
2837 
2838  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024032_2)
2839  {
2840  unsigned char key_str[128];
2841  unsigned char src_str[128];
2842  unsigned char dst_str[257];
2843  unsigned char iv_str[128];
2844  unsigned char add_str[128];
2845  unsigned char tag_str[128];
2846  unsigned char output[128];
2847  unsigned char tag_output[16];
2848  gcm_context ctx;
2849  unsigned int key_len;
2850  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
2851 
2852  memset(key_str, 0x00, 128);
2853  memset(src_str, 0x00, 128);
2854  memset(dst_str, 0x00, 257);
2855  memset(iv_str, 0x00, 128);
2856  memset(add_str, 0x00, 128);
2857  memset(tag_str, 0x00, 128);
2858  memset(output, 0x00, 128);
2859  memset(tag_output, 0x00, 16);
2860 
2861  key_len = unhexify( key_str, "6e8006983712ddfedfebf95e6cc3b0aadc23077055e500ae49fae7705787f2e3" );
2862  pt_len = unhexify( src_str, "e3ba14c4e39ebad925997649872b8331f1700c8f98f80e58d92c85a84f2a427094d9d771b276a0d35b17c0c030734399070a57345d4dcf082b96c7eb580618f7af8bdf036296e20379e74e29f905b52a0c46fe7d46201a075e7de7e1a523a0492c1f228102fdb89f019bcd4571e041c5d37159dc487ec139fa37d33142fc8082" );
2863  iv_len = unhexify( iv_str, "e36e39d787394f1401fc4b173e247db0" );
2864  add_len = unhexify( add_str, "" );
2865 
2866  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2867  if( 0 == 0 )
2868  {
2869  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
2870  hexify( dst_str, output, pt_len );
2871  hexify( tag_str, tag_output, tag_len );
2872 
2873  fct_chk( strcmp( (char *) dst_str, "4d5db4b65a1ca31f3d980cc30037b5d79d28280a31cc5d0274be77dad70dcd37f652f2ca999c9aecf08fd2a02d382457a277002a1a286ab66f9e437adee00c3bab04f831dd52147005a989606171b6017d28970c8986899fb58900e23d1bc6a9ac0bd4d8b5d6e3fcaebc9903923e68adae7d61cf929388e0e357c7223523d1ff" ) == 0 );
2874  fct_chk( strcmp( (char *) tag_str, "d21637c0" ) == 0 );
2875  }
2876  }
2877  FCT_TEST_END();
2878 
2879 
2880  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024128_0)
2881  {
2882  unsigned char key_str[128];
2883  unsigned char src_str[128];
2884  unsigned char dst_str[257];
2885  unsigned char iv_str[128];
2886  unsigned char add_str[128];
2887  unsigned char tag_str[128];
2888  unsigned char output[128];
2889  unsigned char tag_output[16];
2890  gcm_context ctx;
2891  unsigned int key_len;
2892  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
2893 
2894  memset(key_str, 0x00, 128);
2895  memset(src_str, 0x00, 128);
2896  memset(dst_str, 0x00, 257);
2897  memset(iv_str, 0x00, 128);
2898  memset(add_str, 0x00, 128);
2899  memset(tag_str, 0x00, 128);
2900  memset(output, 0x00, 128);
2901  memset(tag_output, 0x00, 16);
2902 
2903  key_len = unhexify( key_str, "cd8ec237009eab590dbd9b31e76513dfa3501701b1a706982944441d996e1839" );
2904  pt_len = unhexify( src_str, "9eef7c9a0fa3e9a7fcc4b2f9d210a97d6653ded7913f2fb2de825a0dfd78ae1cca68c040f2328009fffe62937d630ee9d6e0e67bc12c38c0b3d035697d4c2311371aacf41cce0d523016ee436a47d93af0df77011131856d072c718c310f0995b71530d70a3da881481f46f21dda62e3e4c898bb9f819b22f816b7c4e2fb6729" );
2905  iv_len = unhexify( iv_str, "a3cae7aa59edb5f91ee21231002db8e2" );
2906  add_len = unhexify( add_str, "45fa52a0e8321d82caea95bd9506f7331923e2aa95e9238908f3ff30e17a96389dfea75e225e34e1605354eaaf999a950f469c6e2e8722da5ad9daded6722baca00e5d1b8e63266ad1b42cae161b9c089f4ffdfbbaa2f1fb0245d1a4c306d46e215e8c6c6ae37652a8f6016f92adb7695d40bde8c202ab9c2d70a96220b4b01b" );
2907 
2908  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2909  if( 0 == 0 )
2910  {
2911  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
2912  hexify( dst_str, output, pt_len );
2913  hexify( tag_str, tag_output, tag_len );
2914 
2915  fct_chk( strcmp( (char *) dst_str, "833d58f0bbd735c6164ecaa295e95ad1143c564d24817d5f6dded5d2d9b2bed2dc05da4a8a16e20fdf90f839370832f9ddc94e4e564db3ae647068537669b168cc418ea7d0e55b2bb8fd861f9f893a3fdba6aace498bc6afe400fea6b2a8c58924c71ce5db98cfce835161a5cf6187870aa32f522d406c52f91c30543ea6aa16" ) == 0 );
2916  fct_chk( strcmp( (char *) tag_str, "c1df4ee60b10f79173032e9baaf04d3f" ) == 0 );
2917  }
2918  }
2919  FCT_TEST_END();
2920 
2921 
2922  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024128_1)
2923  {
2924  unsigned char key_str[128];
2925  unsigned char src_str[128];
2926  unsigned char dst_str[257];
2927  unsigned char iv_str[128];
2928  unsigned char add_str[128];
2929  unsigned char tag_str[128];
2930  unsigned char output[128];
2931  unsigned char tag_output[16];
2932  gcm_context ctx;
2933  unsigned int key_len;
2934  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
2935 
2936  memset(key_str, 0x00, 128);
2937  memset(src_str, 0x00, 128);
2938  memset(dst_str, 0x00, 257);
2939  memset(iv_str, 0x00, 128);
2940  memset(add_str, 0x00, 128);
2941  memset(tag_str, 0x00, 128);
2942  memset(output, 0x00, 128);
2943  memset(tag_output, 0x00, 16);
2944 
2945  key_len = unhexify( key_str, "5f0b24f054f7455f5821fdc6e9ca728d680e8004fe59b131bb9c7cddb0effa51" );
2946  pt_len = unhexify( src_str, "d406138587fbcb498e8ec37f0f3d7f6b2faa02e6880424e74cdba67ae3468b6823d37fd917a7fede6b34a2f0fc47c520e4088766ba82a989f0d8051a3a80cc8b1e3e1e2b1c6620b90e99b27e65951aeb3936263fc2f76c1c8effa742f53987f8a38c731a411fa53b9f6c81340e0d7ce395c4190b364d9188dc5923f3126546c3" );
2947  iv_len = unhexify( iv_str, "f52f7a2051047f45ec6183b7c66e8b98" );
2948  add_len = unhexify( add_str, "756cf485b6a8e672d90d930a653c69fdbf260d3ea18cd3d0c02175d3966a88b70ab8235d998b745a0eb6a5c92899f41e8c0b7aa4ec132c8cbb1bac97a45766a03923c9b93c2a055abd0127a83f81e6df603a375ca8cc1a2ee0a8b7fd226226b0b19bd2e81f73c34dfafa4fcea08dd93dd4ab7e4b437408af91bff566068a5f34" );
2949 
2950  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2951  if( 0 == 0 )
2952  {
2953  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
2954  hexify( dst_str, output, pt_len );
2955  hexify( tag_str, tag_output, tag_len );
2956 
2957  fct_chk( strcmp( (char *) dst_str, "e58a03f664003d0ef5bdb28931afd16e7747cff62dcc85bf4eed6e573ea973cf615e4ebee40f35d44e18e391b391e98dca5669a5b0abbfa67834836b122d1909b53acd50e053d5ca836894414bb865b1fb811d8af68b88b4a302fdedf27fdd27456e9aaf34a8d53c9c8587e75843e09776392dbb0501ef41359c01e8980e5221" ) == 0 );
2958  fct_chk( strcmp( (char *) tag_str, "258492b9f549d1b90555eafbe5292806" ) == 0 );
2959  }
2960  }
2961  FCT_TEST_END();
2962 
2963 
2964  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024128_2)
2965  {
2966  unsigned char key_str[128];
2967  unsigned char src_str[128];
2968  unsigned char dst_str[257];
2969  unsigned char iv_str[128];
2970  unsigned char add_str[128];
2971  unsigned char tag_str[128];
2972  unsigned char output[128];
2973  unsigned char tag_output[16];
2974  gcm_context ctx;
2975  unsigned int key_len;
2976  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
2977 
2978  memset(key_str, 0x00, 128);
2979  memset(src_str, 0x00, 128);
2980  memset(dst_str, 0x00, 257);
2981  memset(iv_str, 0x00, 128);
2982  memset(add_str, 0x00, 128);
2983  memset(tag_str, 0x00, 128);
2984  memset(output, 0x00, 128);
2985  memset(tag_output, 0x00, 16);
2986 
2987  key_len = unhexify( key_str, "6f50efb3946f6a6dfe63f12780f764bb6ebcf2127d3804610e11f0bd9b68ce0f" );
2988  pt_len = unhexify( src_str, "bfc89d5049a5b4015c9eb64fdaf9fe9f4be7229e67c713a7b368f0550b3a5e12ba3a4399c64f60b7157e1b289b154a494deadecff0d0686ab44fae2a34ae4cb120a7f00268ab551f41c16a05f8999157be1103464127a8a9bccf736c32db045124178c90472e664d8e67a2ade0efe9a3b048c453d2fb5292dd8d29e62d52c5b5" );
2989  iv_len = unhexify( iv_str, "63c1192ab7fc75c17e7812fd960f296e" );
2990  add_len = unhexify( add_str, "335cc5c8fb5920b09e0263133eb481fd97f8d9f29db8689fb63034bc40959a176ccdca6725e1f94f822e4d871138fc39776fbe062f07bf80e5c8891c2e1007efeb77c158ced8d6c002b04442ed35c40a2187a59c02339c05762942208e3be964736a431017f472dfd5fdaf8fb8c645cdb684f9632057b9eb755253b4b75e3688" );
2991 
2992  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
2993  if( 0 == 0 )
2994  {
2995  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
2996  hexify( dst_str, output, pt_len );
2997  hexify( tag_str, tag_output, tag_len );
2998 
2999  fct_chk( strcmp( (char *) dst_str, "ca974942ae0f4955ca0736218e4e356145c1ef42135b1142b55ccb3fc5caeec630eb50e69b5a6f97c11d4b604189b27496623bb0365ae69f4150e201e72bad8e7b883185588d0a31c44273bae87194b1610114a83ec47ba68a02e29891de43204977fcd0d551778335fc77fcfdf3fd63e9e5e0c02930a0321ffb093c521cd0ed" ) == 0 );
3000  fct_chk( strcmp( (char *) tag_str, "2f11a01cb0ef8dcefad9233bec44d6f0" ) == 0 );
3001  }
3002  }
3003  FCT_TEST_END();
3004 
3005 
3006  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024120_0)
3007  {
3008  unsigned char key_str[128];
3009  unsigned char src_str[128];
3010  unsigned char dst_str[257];
3011  unsigned char iv_str[128];
3012  unsigned char add_str[128];
3013  unsigned char tag_str[128];
3014  unsigned char output[128];
3015  unsigned char tag_output[16];
3016  gcm_context ctx;
3017  unsigned int key_len;
3018  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
3019 
3020  memset(key_str, 0x00, 128);
3021  memset(src_str, 0x00, 128);
3022  memset(dst_str, 0x00, 257);
3023  memset(iv_str, 0x00, 128);
3024  memset(add_str, 0x00, 128);
3025  memset(tag_str, 0x00, 128);
3026  memset(output, 0x00, 128);
3027  memset(tag_output, 0x00, 16);
3028 
3029  key_len = unhexify( key_str, "ec566324ad9d4cd015821e2cd4ed4d3d507bdb3c65bd50acc85f690ef06740fa" );
3030  pt_len = unhexify( src_str, "348d35768d7192415cbb92c5625f10edd79f24c56d4b821aaf80d7dc83e901ede6be94d1efe11a3acd16ac00aea8d0d4875c47522332fed11cdf0816b26978de431c89d2fe6d122b2d4980f1d53a97edc15e490a44e73cba9394ca4bbb871675c729c39de80d6678c71b1bd220e4647bfd20a7ddbefe2b7eec7276b87c92ba77" );
3031  iv_len = unhexify( iv_str, "95c8a544c4b94e9fbfd76e66f40bb975" );
3032  add_len = unhexify( add_str, "fa6f38f8e562a54bb2281dc9a7cbe0b981292fb00dc0053185550a300661852179d0f2beb4e7759b81316fbfead5c858e6fce73f3cd2c2462925dbb199a4e6c121d051b1b5ebf60e16d1e30f6973b19cf31830da30588fdfff6115a4a1f6d977a72583379a56055724581be5232b0d1b0ae88bab5d4a031b058bc8d03078dcd5" );
3033 
3034  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3035  if( 0 == 0 )
3036  {
3037  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
3038  hexify( dst_str, output, pt_len );
3039  hexify( tag_str, tag_output, tag_len );
3040 
3041  fct_chk( strcmp( (char *) dst_str, "8b4da79f3ae1ea35a80af2f52fc640055e6a3b92617ddfa79fe5d8a49f28ddf36a82a17ca0b3cdf1726700f7ffc09ae5b412d064fd52a90a76bacc74a0b89e38dc474e880a2b768ffa91fef34c47759a7b8fd7faa32a4fcb258349495e4438c7b2055a8f462729fa4e7223aa9b47087695e3aabf43afb32e272d536b257b748a" ) == 0 );
3042  fct_chk( strcmp( (char *) tag_str, "b1faec277697add8f756391dd9c7f4" ) == 0 );
3043  }
3044  }
3045  FCT_TEST_END();
3046 
3047 
3048  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024120_1)
3049  {
3050  unsigned char key_str[128];
3051  unsigned char src_str[128];
3052  unsigned char dst_str[257];
3053  unsigned char iv_str[128];
3054  unsigned char add_str[128];
3055  unsigned char tag_str[128];
3056  unsigned char output[128];
3057  unsigned char tag_output[16];
3058  gcm_context ctx;
3059  unsigned int key_len;
3060  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
3061 
3062  memset(key_str, 0x00, 128);
3063  memset(src_str, 0x00, 128);
3064  memset(dst_str, 0x00, 257);
3065  memset(iv_str, 0x00, 128);
3066  memset(add_str, 0x00, 128);
3067  memset(tag_str, 0x00, 128);
3068  memset(output, 0x00, 128);
3069  memset(tag_output, 0x00, 16);
3070 
3071  key_len = unhexify( key_str, "dd6aa4ff63efad53772e07e0fa7d6eda5e73be167620fd7c9f3997cf46cd25a9" );
3072  pt_len = unhexify( src_str, "592b3a6f09841483770b767bed73498c286896d2ad3d8bd91f83f92f489b1e83b0456a54e067a79e1bf59eefc1d3bd35cecfba940811d06a06e9b8f774bfeff557bd7e3f0864cb6bd3f867efbe3f040d2384ae8e1a0e20ed38caa668159d3e33c4669478d00963a1152305aa2037a5e06cac52d84021234a7f5d46ab060bd03a" );
3073  iv_len = unhexify( iv_str, "6386e03bcb6ac98140ee0706b54c8492" );
3074  add_len = unhexify( add_str, "0ccdaa4f54cfea1026a4d26338b1e6d50a70b00c46147fe906c95f0a2fb5d92456ca3aa28a257c079eceb852b819e46646997df87b873bc567f69a2fae471df03b0e5b94511189eaeedd238a991b326963c46d53080f420ec9fd1a74145a0b155cbcc0b5e47fa69450c7eb447080e34868d640f923923b91a9e13a05c73550ca" );
3075 
3076  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3077  if( 0 == 0 )
3078  {
3079  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
3080  hexify( dst_str, output, pt_len );
3081  hexify( tag_str, tag_output, tag_len );
3082 
3083  fct_chk( strcmp( (char *) dst_str, "c1be540448f1e3f432a10b3cc1a913cc4046595f5a57bf57c9d856cdf381832e914088d3388199018ff26327e3001678ab363da9457ba2084f5aa81320f1a0343491e0b44424018765861c5db917ce14e91a77f7e805d7a97a17a288ee66567c5c01ee61dc46a9aa8b281438ed377b792e9539e311676f81c567339cf92b8e1e" ) == 0 );
3084  fct_chk( strcmp( (char *) tag_str, "ce7e361713630ecaff81866c20fce6" ) == 0 );
3085  }
3086  }
3087  FCT_TEST_END();
3088 
3089 
3090  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024120_2)
3091  {
3092  unsigned char key_str[128];
3093  unsigned char src_str[128];
3094  unsigned char dst_str[257];
3095  unsigned char iv_str[128];
3096  unsigned char add_str[128];
3097  unsigned char tag_str[128];
3098  unsigned char output[128];
3099  unsigned char tag_output[16];
3100  gcm_context ctx;
3101  unsigned int key_len;
3102  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
3103 
3104  memset(key_str, 0x00, 128);
3105  memset(src_str, 0x00, 128);
3106  memset(dst_str, 0x00, 257);
3107  memset(iv_str, 0x00, 128);
3108  memset(add_str, 0x00, 128);
3109  memset(tag_str, 0x00, 128);
3110  memset(output, 0x00, 128);
3111  memset(tag_output, 0x00, 16);
3112 
3113  key_len = unhexify( key_str, "ad3990cd57ce4e95342cdca4f07d7e35d575eb19f224a7c821b1f5a8c54d4bc3" );
3114  pt_len = unhexify( src_str, "732809c29b5eeda974039b122b875aec2823e082ef637294658cc54f9bca88eb7eea87a366234f89919975d0e7dd2f8ea83198d5a6e349149a016a4b177ba43df2f3ca28e27b8566591d225ac25dfd9ea431cf1fb3ea530d65dac93aad47764a6aef8ec6903b6d145ea9a2663034d2a320690b92afd8032084b754be97604382" );
3115  iv_len = unhexify( iv_str, "fd4ed75d861da2cc14fd1054976c8566" );
3116  add_len = unhexify( add_str, "ab44689839fdf47e887b70fc1b0422dbbe5c1b50f4e704f9a435967ba8b70cf1e144a025d37292f628f9f7dd9d05557b65340090503201e8cf2cea2d6a73ea4850bd0931b90fd4a4306ba84b8aec99fed47ca1b16daee6c95c97e4ba0dd1fb130cd13f5ef77c5af96f61fa05305a3aca3775e927f72f08fc34bc994e69abaad8" );
3117 
3118  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3119  if( 0 == 0 )
3120  {
3121  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
3122  hexify( dst_str, output, pt_len );
3123  hexify( tag_str, tag_output, tag_len );
3124 
3125  fct_chk( strcmp( (char *) dst_str, "f48721b08101b35cde1c4ce08a8ba0049185b9dd48b66ab9971fd67dee24f89b456e9ca19ac8a9b5b3b088cbd53898a8c2ac1129752fb7fc55a0c3e2e7266ff40f7a9d63ebc4ab65f47422fc17cbe07fcfda582fd1b8f50e840ae89837e84add8be17d4cac3d2be26bef4aa8438daec9d2b139e442f99c32f2789378c8029ad9" ) == 0 );
3126  fct_chk( strcmp( (char *) tag_str, "da6da2af0fc14b591a86359b552e20" ) == 0 );
3127  }
3128  }
3129  FCT_TEST_END();
3130 
3131 
3132  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024112_0)
3133  {
3134  unsigned char key_str[128];
3135  unsigned char src_str[128];
3136  unsigned char dst_str[257];
3137  unsigned char iv_str[128];
3138  unsigned char add_str[128];
3139  unsigned char tag_str[128];
3140  unsigned char output[128];
3141  unsigned char tag_output[16];
3142  gcm_context ctx;
3143  unsigned int key_len;
3144  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
3145 
3146  memset(key_str, 0x00, 128);
3147  memset(src_str, 0x00, 128);
3148  memset(dst_str, 0x00, 257);
3149  memset(iv_str, 0x00, 128);
3150  memset(add_str, 0x00, 128);
3151  memset(tag_str, 0x00, 128);
3152  memset(output, 0x00, 128);
3153  memset(tag_output, 0x00, 16);
3154 
3155  key_len = unhexify( key_str, "30823396ac90db573b6587676564d09fa680906bd6eaa6b8597e2e7549c9d848" );
3156  pt_len = unhexify( src_str, "c55be5a0b8559e02de4667ba5656f7e46f5627af13fd34d327f6fbfc4f3a9273036fce2fb21232f8e2ed115b39b0ecb9a119c8fc17070bbe4e34d3544d7117ffda5e1ef05e063b5a8fceb23158d7824d6a1eb4d90a1d0360c6bd78fb24fdd4cfa35924beb4e090891d06f53fc52cdcaa6b8bba6772d549eb95b64ebf3756ae45" );
3157  iv_len = unhexify( iv_str, "496ac734afadcd54f1a4372ceb5645fc" );
3158  add_len = unhexify( add_str, "2d582131f7071e80cde1b11106b7d79bb208743de759d40b897efdab018f4eff1f91d2fe67e27af25a13f201bbe4446f20ac6b942ff7b32cf10ad1cea36945b67ac08b114fc616175a87437ee05f3a8b6566e9edfbc1beec0ed8696b5d5c41a25ac43bf3ce2920dd262233ab3405d46f523894dcbfb6c90b6e911ceb93bb7fa6" );
3159 
3160  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3161  if( 0 == 0 )
3162  {
3163  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
3164  hexify( dst_str, output, pt_len );
3165  hexify( tag_str, tag_output, tag_len );
3166 
3167  fct_chk( strcmp( (char *) dst_str, "c9da3df66111dcbabf731c6891eb698ac3283780f526e81383e201244efe4eca7a1c84a3bfa9ba5616afb15c1f1af0f3af2e071df6c1d34a343c3e3440f1a3e1b6620243d9e7d9a4dbda5981c3e876fd07f392d44bf3e0a4edbd884462ec2f71d36bde4a1b5792629da09a1fb01bfdbd532fbac71887a05a7077fc119a4638d4" ) == 0 );
3168  fct_chk( strcmp( (char *) tag_str, "cec973a27c42e31b779a6a91aa34" ) == 0 );
3169  }
3170  }
3171  FCT_TEST_END();
3172 
3173 
3174  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024112_1)
3175  {
3176  unsigned char key_str[128];
3177  unsigned char src_str[128];
3178  unsigned char dst_str[257];
3179  unsigned char iv_str[128];
3180  unsigned char add_str[128];
3181  unsigned char tag_str[128];
3182  unsigned char output[128];
3183  unsigned char tag_output[16];
3184  gcm_context ctx;
3185  unsigned int key_len;
3186  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
3187 
3188  memset(key_str, 0x00, 128);
3189  memset(src_str, 0x00, 128);
3190  memset(dst_str, 0x00, 257);
3191  memset(iv_str, 0x00, 128);
3192  memset(add_str, 0x00, 128);
3193  memset(tag_str, 0x00, 128);
3194  memset(output, 0x00, 128);
3195  memset(tag_output, 0x00, 16);
3196 
3197  key_len = unhexify( key_str, "815f2b2f0b1621aa198eef2761380f10ac9872a5adbdf6286bdf3386e56aae4e" );
3198  pt_len = unhexify( src_str, "d16930c570414bb620e0eaa2e9b5d96e4424127e16461aaa5885c616a02ae974fb2890e73bade9ffa5066eb88a46ac7fcf258d55733d315951b1b71c5e3c13d78d60344ce921966297a0f6361cfeab03b346a7fa4f83a7a0eaf37576fa33a496102446f9f31b06ed91b51672c879cb18d4e38fa86e156d5b1dbff27925922470" );
3199  iv_len = unhexify( iv_str, "0843984bbaa565ca24f148e57a7d9c57" );
3200  add_len = unhexify( add_str, "1514b99c0ad3493c36fe1216d1a887a69ea0340101aebb03f60d7ed26893119e81e8b8c3f0bb4af5e10a3bf4edcf257473be9dcebb44a9d912f04d97a556ecf020c0bed7ccef2bfd5580f1fc74b706fea45f8c63d8de6f8deccc47a02dc86d3f0624e52f6f1dcd09de8000f2d98a4cc0896da6a564b92263673adf390ed909fa" );
3201 
3202  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3203  if( 0 == 0 )
3204  {
3205  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
3206  hexify( dst_str, output, pt_len );
3207  hexify( tag_str, tag_output, tag_len );
3208 
3209  fct_chk( strcmp( (char *) dst_str, "7506175acd64224b39f890e498ee5013bb46fc571dc2b125ed5891b8ce8bcf42342f015fd2df5f4b9cc220aab52386bf2247d4163951e86467633f96c28bdda166d778855a7f60465dd2983232c9e53d5f89432407807b0402a10f155f80055c339451a106ac54438ae4a945e60d5320eab0adad9a1e66d59b9d3cc53887811d" ) == 0 );
3210  fct_chk( strcmp( (char *) tag_str, "28d9d780052b36dbe80a25d41d5b" ) == 0 );
3211  }
3212  }
3213  FCT_TEST_END();
3214 
3215 
3216  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024112_2)
3217  {
3218  unsigned char key_str[128];
3219  unsigned char src_str[128];
3220  unsigned char dst_str[257];
3221  unsigned char iv_str[128];
3222  unsigned char add_str[128];
3223  unsigned char tag_str[128];
3224  unsigned char output[128];
3225  unsigned char tag_output[16];
3226  gcm_context ctx;
3227  unsigned int key_len;
3228  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
3229 
3230  memset(key_str, 0x00, 128);
3231  memset(src_str, 0x00, 128);
3232  memset(dst_str, 0x00, 257);
3233  memset(iv_str, 0x00, 128);
3234  memset(add_str, 0x00, 128);
3235  memset(tag_str, 0x00, 128);
3236  memset(output, 0x00, 128);
3237  memset(tag_output, 0x00, 16);
3238 
3239  key_len = unhexify( key_str, "d1325ecedb8fc0fe449de558fbc11ddebef660e47aabb84edfe69837a6a9066c" );
3240  pt_len = unhexify( src_str, "f9a4f7029feae5cf5bdb8385d6ad7d7da6a243c5026818e5a794c6cffb8dad3227964501c5a049b5a94a7ea2e24434e086800094118444c5a971bbe575324fb6b51c5939f81e78bb11d85d324742b462ce8d13584b3882617d0c94776f328a554f9d532b6515ade9fbbd2de1c12ab53671b7f7edaa7e20223f4c371c1f229568" );
3241  iv_len = unhexify( iv_str, "8aff702c40a8c974cf24bf3c645169a5" );
3242  add_len = unhexify( add_str, "9ec2e851dee3834d4843aafa740f3aac4cfb1e4d3a7e3e77349113f5200768c3e9dc37481d6292ebeebd2372db02ef8ac7180830c7187995c815d1d1520c3e2f8cf2a94993b18c828b53485073c8a845066772615b26d7a3d7d3e7d81ad1725797153f7ba5e313bdec582c5482adf76b31c871cd42a313018f40d7e23f1a7f33" );
3243 
3244  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3245  if( 0 == 0 )
3246  {
3247  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
3248  hexify( dst_str, output, pt_len );
3249  hexify( tag_str, tag_output, tag_len );
3250 
3251  fct_chk( strcmp( (char *) dst_str, "3a93663aab93c6cd236cba4db2c03942d9ebc669633936370c2834357e76f6555c34d40dfaab1e78a105da9092acdba8be89e2dbf72e89518d55e09eb2fa1ea7da505484ad4531dba3eb853d1ae1a477355ea9448067b0adbc782d64ec342c7cb781d9dd8dc2b14dc1c9ab5542b679782b8bb9b45ff6a4e36c513df169c8eddc" ) == 0 );
3252  fct_chk( strcmp( (char *) tag_str, "7e682b0ddbe6c55091838616c352" ) == 0 );
3253  }
3254  }
3255  FCT_TEST_END();
3256 
3257 
3258  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024104_0)
3259  {
3260  unsigned char key_str[128];
3261  unsigned char src_str[128];
3262  unsigned char dst_str[257];
3263  unsigned char iv_str[128];
3264  unsigned char add_str[128];
3265  unsigned char tag_str[128];
3266  unsigned char output[128];
3267  unsigned char tag_output[16];
3268  gcm_context ctx;
3269  unsigned int key_len;
3270  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
3271 
3272  memset(key_str, 0x00, 128);
3273  memset(src_str, 0x00, 128);
3274  memset(dst_str, 0x00, 257);
3275  memset(iv_str, 0x00, 128);
3276  memset(add_str, 0x00, 128);
3277  memset(tag_str, 0x00, 128);
3278  memset(output, 0x00, 128);
3279  memset(tag_output, 0x00, 16);
3280 
3281  key_len = unhexify( key_str, "4b92242268e598ddcf3a5a0de26d74356693c4dbca354e44be401f3d6804ea1e" );
3282  pt_len = unhexify( src_str, "72dc75bc4c8f5bbbd9c639fbdb34afbb84706404c9e67eaee1959aa4b51eac0db4f975cb3ed8d8ca27f72f61c8562ec953a7b8745826121a7016e60e877dcdb046f236af3826c1ddf5b929c5bd9a92b0d5c23cf8983bf2459ced6595882b3dd0cd25da7eba981bba122623dae22dbdce05cf4e5d82d2cc54eb4f68e9e8eff02b" );
3283  iv_len = unhexify( iv_str, "3c292bbcc16c94b0a263f4d22f328915" );
3284  add_len = unhexify( add_str, "167dfab08aac8350574693b31210138f6b99cfb61ba7ade2e2abffe2255837a913c9afe332e8fc4b2463310df46492e7d982dcb70fdda2a8b03911e6be9a5c5621d0ae8ecd1cb390910b6702aad33394c25d1160b86687e25bb6cdc4811e3158bb85ba75548329dacc19287d9c004a0473029b77ca290fc47c1f96d9583bcd67" );
3285 
3286  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3287  if( 0 == 0 )
3288  {
3289  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
3290  hexify( dst_str, output, pt_len );
3291  hexify( tag_str, tag_output, tag_len );
3292 
3293  fct_chk( strcmp( (char *) dst_str, "c2dd42ab9bf3fda78032f73cbf7d28dd8e32c582a3b7ee79795551f133234d62ea6571a466b8e1af0b3d354b71a6582c9c8013d5f8a2c34eb3e848360adac1d5005cede58eae7784f32a31c40eec5a3f03cc1e7263d8515b36225b3515ebcf8dca2a77172c797d347ed3921ca0bc73e8ae56347134a6a2a06ae084f1ebb7b0fe" ) == 0 );
3294  fct_chk( strcmp( (char *) tag_str, "02fb002d8e4a1d11bb0f0b64d7" ) == 0 );
3295  }
3296  }
3297  FCT_TEST_END();
3298 
3299 
3300  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024104_1)
3301  {
3302  unsigned char key_str[128];
3303  unsigned char src_str[128];
3304  unsigned char dst_str[257];
3305  unsigned char iv_str[128];
3306  unsigned char add_str[128];
3307  unsigned char tag_str[128];
3308  unsigned char output[128];
3309  unsigned char tag_output[16];
3310  gcm_context ctx;
3311  unsigned int key_len;
3312  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
3313 
3314  memset(key_str, 0x00, 128);
3315  memset(src_str, 0x00, 128);
3316  memset(dst_str, 0x00, 257);
3317  memset(iv_str, 0x00, 128);
3318  memset(add_str, 0x00, 128);
3319  memset(tag_str, 0x00, 128);
3320  memset(output, 0x00, 128);
3321  memset(tag_output, 0x00, 16);
3322 
3323  key_len = unhexify( key_str, "c5c50059a61692a8f1ffae1c616158c67d276dcd4a029ce197ed48567e5ff889" );
3324  pt_len = unhexify( src_str, "ab7e13923e66d0f600accd2462af74192c3de6c718a27052ef7c1302239c7fb2413df7c662657ca18228575ed138bc54f31663df548618e98d64402feab529d5bf6a678431c714df1fe24ea80017f455a8312bb5b710df8dd3571970404a806ec493dcb1f3f1ac980663f0b9c9823e0d0304ed90689f70d4a24da7d8504c5b0b" );
3325  iv_len = unhexify( iv_str, "920d82c6b97a7bea121f64f83b75dc65" );
3326  add_len = unhexify( add_str, "a9bd57db2bbe83177287e5f614dab977071abfe0b538067f7d0c5acd59bfba95dfb725b8e1af4573ff10ce135148a3bab044552348378d5ff0c4f8be1aef7ed60bb9a374a6c7b8097d7c1804fdf078f212e63e9f11d7404ad0d1a9cb28d5ba199aec3a6c41b9e523b541ad38cea763159836ede6371357ab1aeaedaaf4481c29" );
3327 
3328  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3329  if( 0 == 0 )
3330  {
3331  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
3332  hexify( dst_str, output, pt_len );
3333  hexify( tag_str, tag_output, tag_len );
3334 
3335  fct_chk( strcmp( (char *) dst_str, "8f7e87e3ff4f7ccd1cedc1df125199cfb588339119a5ea5f9bdb918f89ca35f9dc16c6465fb25ea250eaaa8e7f00aca2199f92a2c244642bd15cbc9b62caa58115ef01d0b4a9e02527e035744b20892f79b07aa47b6c6db1332f82434764c43124b27148f2f611766781df8e4cc0b5ba99b858c13c233646dcb2b8749a194f08" ) == 0 );
3336  fct_chk( strcmp( (char *) tag_str, "65da88676d2ab3f9c6d590eb80" ) == 0 );
3337  }
3338  }
3339  FCT_TEST_END();
3340 
3341 
3342  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024104_2)
3343  {
3344  unsigned char key_str[128];
3345  unsigned char src_str[128];
3346  unsigned char dst_str[257];
3347  unsigned char iv_str[128];
3348  unsigned char add_str[128];
3349  unsigned char tag_str[128];
3350  unsigned char output[128];
3351  unsigned char tag_output[16];
3352  gcm_context ctx;
3353  unsigned int key_len;
3354  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
3355 
3356  memset(key_str, 0x00, 128);
3357  memset(src_str, 0x00, 128);
3358  memset(dst_str, 0x00, 257);
3359  memset(iv_str, 0x00, 128);
3360  memset(add_str, 0x00, 128);
3361  memset(tag_str, 0x00, 128);
3362  memset(output, 0x00, 128);
3363  memset(tag_output, 0x00, 16);
3364 
3365  key_len = unhexify( key_str, "4c7cc3588436ad9e877de72578d30026d32746817ca7a8fb7df9870650aa48d8" );
3366  pt_len = unhexify( src_str, "00c2845fc495b89f870bce714f8604a7e7a96ede92c4b9bdcf044c9a176f66a28761089c083d5e2d613c746711238477c0efdf475e18af99e88cf76d04d4e40495ea16c462801443cd7f69c5d36ac9f337e828c308f1d1938b1fac732274459827cf9806c1661a247167948a93eb6e998a4cea76bb825baa27e4180e52633bb3" );
3367  iv_len = unhexify( iv_str, "5e82285a3b332c693e427f9410564489" );
3368  add_len = unhexify( add_str, "9971b8e234fc3e1e9644545e383eb065e1866e2faa6513278d3972add5ec0e71b1558329fe1ee038a27919e43bfdac8cf08141ab540528f74f9d5bc8c400bb6ee7867e4dbc2aa081d9126ac374dc62b10004d0e233dc93376b93c0da415e7d3e09851f2084a99feeb25939e21893056870cefe7cdfaf49f728a91ea0eef605af" );
3369 
3370  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3371  if( 0 == 0 )
3372  {
3373  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
3374  hexify( dst_str, output, pt_len );
3375  hexify( tag_str, tag_output, tag_len );
3376 
3377  fct_chk( strcmp( (char *) dst_str, "ab7bac4ddede796576e1fc265c3c598055827be74dc7ed8ef172d00a648da56727767d68fcbe6c44e7272dc8cb15f03a26dc439178849b0e9ad6c7410dd4cca3f9ef40ec7c280042bbc199155c7341e88d35e5e8d0b42856e618c6c30e43d49506ccc3518585c951a3898409315e8b3b4d0adccdb561ddcf1b9d3b2cf3de9750" ) == 0 );
3378  fct_chk( strcmp( (char *) tag_str, "2474c830c6ebe9c6dcb393a32d" ) == 0 );
3379  }
3380  }
3381  FCT_TEST_END();
3382 
3383 
3384  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102496_0)
3385  {
3386  unsigned char key_str[128];
3387  unsigned char src_str[128];
3388  unsigned char dst_str[257];
3389  unsigned char iv_str[128];
3390  unsigned char add_str[128];
3391  unsigned char tag_str[128];
3392  unsigned char output[128];
3393  unsigned char tag_output[16];
3394  gcm_context ctx;
3395  unsigned int key_len;
3396  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
3397 
3398  memset(key_str, 0x00, 128);
3399  memset(src_str, 0x00, 128);
3400  memset(dst_str, 0x00, 257);
3401  memset(iv_str, 0x00, 128);
3402  memset(add_str, 0x00, 128);
3403  memset(tag_str, 0x00, 128);
3404  memset(output, 0x00, 128);
3405  memset(tag_output, 0x00, 16);
3406 
3407  key_len = unhexify( key_str, "9d73aec506e022c0692892f6dbc3b4d41e86b97fb377c1956ee27b9c9ab3b32a" );
3408  pt_len = unhexify( src_str, "f02bf60f10ed876a803a96e75f3fe17b4e355246135a0cd5497baad2a40a523c27e27bf848f0cb5d0c6428d08bec9590b17fca5e697990d2a6f7d21080ab614f378a07461e7a6207229e0a087e285841ef2f119cac7d8a2d3abbb1e7272a0d7dd493c8c4f797e160c36e086227ceae4923658365b2d3a3fbea11aa2fab3499cb" );
3409  iv_len = unhexify( iv_str, "bbacc081a6107364dcdac83abceddbfb" );
3410  add_len = unhexify( add_str, "77e1da090e4d3a892baf1afbc12a56201a4362d8f09cda5e9bdb23411e6908915301d66403acb3524898c1c51d6970a71878accd0048cb6cfbd4bf941c174ee05eca2c4a29f1c24e936d3a63cb6cfa710617af1bbb41d755b2f79e135db914a7dd00c590cf741078eb72c3ab559787213202dcc0a4734bdd612b917e372f0e61" );
3411 
3412  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3413  if( 0 == 0 )
3414  {
3415  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
3416  hexify( dst_str, output, pt_len );
3417  hexify( tag_str, tag_output, tag_len );
3418 
3419  fct_chk( strcmp( (char *) dst_str, "d78fa4024b8d073899ac09b8151c29b10a37793b76f04921bdc7dd3d2ef530a831e53cf6a7ddeec0e033ceeabb525bf5ef57bf9b3661ffb57d3bd4024252fa11dd569102c787c2d8489a1ad1290dca2e8edf82fbe6b5f83bcc0e888045b895e20c8556ee80430cc8640fc070491d2bb81a1209428938cd8e7a27e0e858029421" ) == 0 );
3420  fct_chk( strcmp( (char *) tag_str, "2235d00a47d57cfbd383b69d" ) == 0 );
3421  }
3422  }
3423  FCT_TEST_END();
3424 
3425 
3426  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102496_1)
3427  {
3428  unsigned char key_str[128];
3429  unsigned char src_str[128];
3430  unsigned char dst_str[257];
3431  unsigned char iv_str[128];
3432  unsigned char add_str[128];
3433  unsigned char tag_str[128];
3434  unsigned char output[128];
3435  unsigned char tag_output[16];
3436  gcm_context ctx;
3437  unsigned int key_len;
3438  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
3439 
3440  memset(key_str, 0x00, 128);
3441  memset(src_str, 0x00, 128);
3442  memset(dst_str, 0x00, 257);
3443  memset(iv_str, 0x00, 128);
3444  memset(add_str, 0x00, 128);
3445  memset(tag_str, 0x00, 128);
3446  memset(output, 0x00, 128);
3447  memset(tag_output, 0x00, 16);
3448 
3449  key_len = unhexify( key_str, "73198dfd92d26283637e451af6e26ff56e3b7d355ed7ab8b2059c1022e0ea904" );
3450  pt_len = unhexify( src_str, "2471b3c4cc1d6884d333d1c998c7c441808ca884cb88173a225569e1689ef39e266e9ad381926adeafc2daccbdd3c9457ea1bdc3bb05168ef1eead1504d1d44dde34f96e1a7f2a5d3fb33cf5292d52fa9412800419570db0eb24fb74d55de202f5df74073c5a2eb9eb726393996eaeb32072bebb00593de41b97ecbab2554186" );
3451  iv_len = unhexify( iv_str, "e36403ce1acc63bf50b47387250ef533" );
3452  add_len = unhexify( add_str, "cad023cfb73d08e5b082c3061f3a6502a1c1d53038cfb19074d0ec26c9b272db93094147ef0ab2bdce440a2b3233bb0429add47601f011df679698264c0f81444aba14576a1a565e5c169f967c7571bfb32a2a4d7fcae897863d78964c5b1a040cc845494c0ad8ff4353317b28ca3798e6252d5015b58e99354ce6dfbe8b7a95" );
3453 
3454  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3455  if( 0 == 0 )
3456  {
3457  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
3458  hexify( dst_str, output, pt_len );
3459  hexify( tag_str, tag_output, tag_len );
3460 
3461  fct_chk( strcmp( (char *) dst_str, "32afd6d6fdab2019ce40771b5298aaadf753d1c4cb221f01e4dfc8b1968f898188fa4d448d8364510a7e68c7393168efb4b4ead1db1c254c5cea568a84a997a76dbc925a6c19a9092002629f1d9c52737005232e5c7620b95ed64741598a65a9ec95f2c97b6b78bd85380811c11386074b1e1e63b9a7e99d1cb2807bfaa17f0e" ) == 0 );
3462  fct_chk( strcmp( (char *) tag_str, "e22deb1276a73e05feb1c6a0" ) == 0 );
3463  }
3464  }
3465  FCT_TEST_END();
3466 
3467 
3468  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102496_2)
3469  {
3470  unsigned char key_str[128];
3471  unsigned char src_str[128];
3472  unsigned char dst_str[257];
3473  unsigned char iv_str[128];
3474  unsigned char add_str[128];
3475  unsigned char tag_str[128];
3476  unsigned char output[128];
3477  unsigned char tag_output[16];
3478  gcm_context ctx;
3479  unsigned int key_len;
3480  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
3481 
3482  memset(key_str, 0x00, 128);
3483  memset(src_str, 0x00, 128);
3484  memset(dst_str, 0x00, 257);
3485  memset(iv_str, 0x00, 128);
3486  memset(add_str, 0x00, 128);
3487  memset(tag_str, 0x00, 128);
3488  memset(output, 0x00, 128);
3489  memset(tag_output, 0x00, 16);
3490 
3491  key_len = unhexify( key_str, "1dcbd278480434135fb838ffcdc8e7716e95ea99a1cc36d544096dff9e9aeba0" );
3492  pt_len = unhexify( src_str, "da3b8c9e4aa8443535b321c3e9bde3c6742cd9f228c971257430b27293ebeb635917d6cba976c81934c3077902911169e8c6197b2d56a046b7ff03b482c38172accac98aacc90076370df28bc8a2044c393c7541b7b69b0fb852746dcf3140ace4e76861975814d2b5966f7714fb6cfe3e4299d79182fc63a345067a0aa54d8b" );
3493  iv_len = unhexify( iv_str, "b737bcdee4ef83aa83f124cf7208a671" );
3494  add_len = unhexify( add_str, "49a544aae76b04e62211428a2cc3719e4451f3dbf9a23b6ac824fc472e95e38386d267415c1472a8b0707b0573b9eb2a39a5d5a13464947cc3a7a7dd3b7196f11e87ab5233944f7cea3f4d62b088febf8b82a44d4ca6148be1ba24905432b7ac2bb4ebaf22d3bce97ac2bd34158b6011fbac77ee1fa96ca0c9c9e0207044fbbd" );
3495 
3496  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3497  if( 0 == 0 )
3498  {
3499  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
3500  hexify( dst_str, output, pt_len );
3501  hexify( tag_str, tag_output, tag_len );
3502 
3503  fct_chk( strcmp( (char *) dst_str, "061b491b73f9250798a0fb1fdcd72a70eddc9cb48c1f10119387d45c50d5fbb8b85592a7977487e45342fddeb8d481eef3b99463972f66acb38fe04953c223c5f3e02611c8f33cb9ad7466860895fae585d40bc78ec14d1cf17b4c5b75e4d8c6341f1eaf80da4a78aaaa30d3bc8bff15f234aacbee4067a947e42275b12e0bdb" ) == 0 );
3504  fct_chk( strcmp( (char *) tag_str, "b897da3061c77aab5eb54622" ) == 0 );
3505  }
3506  }
3507  FCT_TEST_END();
3508 
3509 
3510  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102464_0)
3511  {
3512  unsigned char key_str[128];
3513  unsigned char src_str[128];
3514  unsigned char dst_str[257];
3515  unsigned char iv_str[128];
3516  unsigned char add_str[128];
3517  unsigned char tag_str[128];
3518  unsigned char output[128];
3519  unsigned char tag_output[16];
3520  gcm_context ctx;
3521  unsigned int key_len;
3522  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
3523 
3524  memset(key_str, 0x00, 128);
3525  memset(src_str, 0x00, 128);
3526  memset(dst_str, 0x00, 257);
3527  memset(iv_str, 0x00, 128);
3528  memset(add_str, 0x00, 128);
3529  memset(tag_str, 0x00, 128);
3530  memset(output, 0x00, 128);
3531  memset(tag_output, 0x00, 16);
3532 
3533  key_len = unhexify( key_str, "2e00467f18536ea6b4d582b2480ebee883e4f56bd91af3ad7a47ceea3ece9acc" );
3534  pt_len = unhexify( src_str, "d5334398318ade59e6bda5cfce8e11b25c9ccefa2f651eb16f66c03d84dcc900dc7c85e6d2b778b155ae4591af0698df7f3b8b9f64d4442ecc82035f7d8e71a5f61c515a963f2fba077f3cb8276e91b31b3f8aa193988a16a86ccaec4a688ad68b5146925ec21d55ded407709d34d140f37e1f87d955619453c3704e83918088" );
3535  iv_len = unhexify( iv_str, "aa6716e6b7107876a3321d807a810e11" );
3536  add_len = unhexify( add_str, "5606a0b77cc9020955c7efda33b7080e9c0e9fd374c4201b4324b3e6523b0407171141e8246d01292a34dc69331f7177d6b7238e16e0303e85741f9cea5698e42fc79217d9e141474068d6c192713c04b1ba3573e93480f69e4cbf72090d46d62d5b52e4a7613af8fcf0010d0024ea11c19cb04571c6d7045a1157cf81df18d1" );
3537 
3538  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3539  if( 0 == 0 )
3540  {
3541  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
3542  hexify( dst_str, output, pt_len );
3543  hexify( tag_str, tag_output, tag_len );
3544 
3545  fct_chk( strcmp( (char *) dst_str, "249119ace4e292ffdfebb433d5b57fa1518af3389eb832146c3adc2dc62fcc9121d7f6461a53ee107ce7edf362b365d8bc18e50cf9c328cb7c7aa7b4e8bfa07c34dc81c38fe0982bbc3b543485ea4b0ce5a76c988cdfcd241911cd66f5a5f9e0c97332bb0f3926117c0437470717c63957aeba1c55d96b1ff0f4d6045f908cd4" ) == 0 );
3546  fct_chk( strcmp( (char *) tag_str, "70e986fced03ae67" ) == 0 );
3547  }
3548  }
3549  FCT_TEST_END();
3550 
3551 
3552  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102464_1)
3553  {
3554  unsigned char key_str[128];
3555  unsigned char src_str[128];
3556  unsigned char dst_str[257];
3557  unsigned char iv_str[128];
3558  unsigned char add_str[128];
3559  unsigned char tag_str[128];
3560  unsigned char output[128];
3561  unsigned char tag_output[16];
3562  gcm_context ctx;
3563  unsigned int key_len;
3564  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
3565 
3566  memset(key_str, 0x00, 128);
3567  memset(src_str, 0x00, 128);
3568  memset(dst_str, 0x00, 257);
3569  memset(iv_str, 0x00, 128);
3570  memset(add_str, 0x00, 128);
3571  memset(tag_str, 0x00, 128);
3572  memset(output, 0x00, 128);
3573  memset(tag_output, 0x00, 16);
3574 
3575  key_len = unhexify( key_str, "a18240f6135e7b6eac071546ee58bb52394bc34ad4e91ee678b72e4514fddcf7" );
3576  pt_len = unhexify( src_str, "02f288eea5588e7a011f4d91eca232af70f60ae3d9302cae5a8a58798c1b4e973e3b1d07695934ae871201682554ef6a5b94976c6a1aa73d354f1d65e3f025bb2a3f1e93009e822a87590dbfd1965904223049c5ac0da8596955199ff767b92df10d1f9c05c40bd8204846c719c5594000cabd87342f0447e4e466c3788723f8" );
3577  iv_len = unhexify( iv_str, "149da8186ca73941582532ede16edf3d" );
3578  add_len = unhexify( add_str, "4d46e1e87322ca84d5bb92d58670f644083db06bdffd99fab0055a62b64a30b5a5673a108f0b9f114d379d3fe63a1f63407881c5b5cb03142109c158af42a00eb24d3b1873edd2284a94a06b79d672bc8f13358f324af2622e9aa0da2b11e33567927e81aea24f3605168e602b532fa2cf9bde5f8cc0b51329e0930cf22e3752" );
3579 
3580  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3581  if( 0 == 0 )
3582  {
3583  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
3584  hexify( dst_str, output, pt_len );
3585  hexify( tag_str, tag_output, tag_len );
3586 
3587  fct_chk( strcmp( (char *) dst_str, "36cddac99e2673588ba783d3c085b9935626687a2dbac9ad10deb4867c577d6f80453266b2400afd773e4edeb743c32562e85f7f8f43dfd87b10a2dd79eddf6e580aeb4cea92ac21cf49ca97398cc23c02b0ca59257643fb2bc6462b9cf04658352d53c2ee50d87cc5ca2ecb722d950f0daecfa0b7c33aaa2c91dd8b093916cb" ) == 0 );
3588  fct_chk( strcmp( (char *) tag_str, "73cbe40df3927e80" ) == 0 );
3589  }
3590  }
3591  FCT_TEST_END();
3592 
3593 
3594  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102464_2)
3595  {
3596  unsigned char key_str[128];
3597  unsigned char src_str[128];
3598  unsigned char dst_str[257];
3599  unsigned char iv_str[128];
3600  unsigned char add_str[128];
3601  unsigned char tag_str[128];
3602  unsigned char output[128];
3603  unsigned char tag_output[16];
3604  gcm_context ctx;
3605  unsigned int key_len;
3606  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
3607 
3608  memset(key_str, 0x00, 128);
3609  memset(src_str, 0x00, 128);
3610  memset(dst_str, 0x00, 257);
3611  memset(iv_str, 0x00, 128);
3612  memset(add_str, 0x00, 128);
3613  memset(tag_str, 0x00, 128);
3614  memset(output, 0x00, 128);
3615  memset(tag_output, 0x00, 16);
3616 
3617  key_len = unhexify( key_str, "4b64bded6c658090a85b5d889679c6a00579498aa82be1e3a628a1cd001e52a6" );
3618  pt_len = unhexify( src_str, "182cd59dc1934199d2d2a2712157438c347e286f66b5a2b8b5149aa41ff7ba82adc3751be379741124dfcf05c531416a64f25f0d28abb6f7bf98c80762f0fa363da679437621dcf61bce43ef4d63178779d1a3ebffb82044d427ef522cbd2643cf1f5617a0f23103cd2a164a59f182b151f47b303c4eb7387ee5cb97cabdf985" );
3619  iv_len = unhexify( iv_str, "99aa6f359534da409a18540d82fb3026" );
3620  add_len = unhexify( add_str, "f55fd6255d8a188ce9a4a2727699ce16c8bc5c6adba88d94106038b74deb79c9d43bfaa47375148d843a5ce248d70193c8017196941b2d9e2dfd4375a3390c19d2f833b0b265dab30f26adee07ab0aeeb930dc3a9fbcf719a707fac724deb28dee2a6788b17fa3505290c2797c6dbf930b41eca1f6d54d75b820e62ec7023e93" );
3621 
3622  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3623  if( 0 == 0 )
3624  {
3625  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
3626  hexify( dst_str, output, pt_len );
3627  hexify( tag_str, tag_output, tag_len );
3628 
3629  fct_chk( strcmp( (char *) dst_str, "5a1211218174e60690334856483a3066e2e8d996fe8ab86d0f8fef09aba9ef0acff9d3e1e5cc27efb5464bc23bea9c778fc74206ae3a16e5fdbf99694ab7096f23c4b395d7a7b8d6675e56b5505ff62f52bf183bcc4433298296e41662d6519d9c1f0a5fb3140376c8890547eae72afe75c338ba97fad9f0184dd311bbdaf3cc" ) == 0 );
3630  fct_chk( strcmp( (char *) tag_str, "8dbdc0746074b486" ) == 0 );
3631  }
3632  }
3633  FCT_TEST_END();
3634 
3635 
3636  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102432_0)
3637  {
3638  unsigned char key_str[128];
3639  unsigned char src_str[128];
3640  unsigned char dst_str[257];
3641  unsigned char iv_str[128];
3642  unsigned char add_str[128];
3643  unsigned char tag_str[128];
3644  unsigned char output[128];
3645  unsigned char tag_output[16];
3646  gcm_context ctx;
3647  unsigned int key_len;
3648  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
3649 
3650  memset(key_str, 0x00, 128);
3651  memset(src_str, 0x00, 128);
3652  memset(dst_str, 0x00, 257);
3653  memset(iv_str, 0x00, 128);
3654  memset(add_str, 0x00, 128);
3655  memset(tag_str, 0x00, 128);
3656  memset(output, 0x00, 128);
3657  memset(tag_output, 0x00, 16);
3658 
3659  key_len = unhexify( key_str, "cadef353122cec1fdbc236c0ab195fc4d732655cef444c00b6cba5c61e01c614" );
3660  pt_len = unhexify( src_str, "a3d5e55fa3110a268cf1414a483adab6d58ec8762a6e6be81269c0369e8840333503bc3688c7be001cdb84d163fa1dfb05f3b01ffff31151f1af780c796822e3d564f785964a546bcc2a320d81a2bc61058652a8594ae9b9b0917400e08d4a99fa161376ac53cba54c92889fd3497e233aff4e12cd85d57375c7c89e92cdf5f5" );
3661  iv_len = unhexify( iv_str, "d765b5954e5b486885dc78ce6801516e" );
3662  add_len = unhexify( add_str, "ba0405745971eaec5d337fd22e0ad287551e7084f1c9c38231d675719e3980356e183a99a3c760ecf7a8ede5e0dac8d2bc13e135570ff6e91a854ea3b457263b0e77896fdf7bdf0b53c8276cfd1ea3e8e22450ff2665eacd24e5fb2be89373349fc9e2967763d43cbd7adc9a376b1b4ab956ddf8b1a56d9385fb7e861bc34df7" );
3663 
3664  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3665  if( 0 == 0 )
3666  {
3667  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
3668  hexify( dst_str, output, pt_len );
3669  hexify( tag_str, tag_output, tag_len );
3670 
3671  fct_chk( strcmp( (char *) dst_str, "9b99f984ae26f9cad5b3c8058757a0a5caef0fb86b8ecef0c1bca6b99bc72b0d5345a00ae75e37d4e651008bb733105d2172edaaf5bda4ad950a49de55a514e882a470dca7c7bbfddde40d38fef4e1f3864fd7e212bbc0383d0bc29ab2303c8935d49c35d7d73df2fba0daeb5f37f9ab0d541766da71b33da1018a3f287ba312" ) == 0 );
3672  fct_chk( strcmp( (char *) tag_str, "c374cd77" ) == 0 );
3673  }
3674  }
3675  FCT_TEST_END();
3676 
3677 
3678  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102432_1)
3679  {
3680  unsigned char key_str[128];
3681  unsigned char src_str[128];
3682  unsigned char dst_str[257];
3683  unsigned char iv_str[128];
3684  unsigned char add_str[128];
3685  unsigned char tag_str[128];
3686  unsigned char output[128];
3687  unsigned char tag_output[16];
3688  gcm_context ctx;
3689  unsigned int key_len;
3690  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
3691 
3692  memset(key_str, 0x00, 128);
3693  memset(src_str, 0x00, 128);
3694  memset(dst_str, 0x00, 257);
3695  memset(iv_str, 0x00, 128);
3696  memset(add_str, 0x00, 128);
3697  memset(tag_str, 0x00, 128);
3698  memset(output, 0x00, 128);
3699  memset(tag_output, 0x00, 16);
3700 
3701  key_len = unhexify( key_str, "0cfc42773fe2d16a59da52234af5015271332344448c214a2b4a0bb53b07a0a0" );
3702  pt_len = unhexify( src_str, "dfbf9eaa46c368b28ef50227db97f29b5d9ed599760bb83f5d52f92ef5522815d6952ebb0d9b4efe8844216d37510746caf8c775d2c862bad8d67effe109a0cbcdd14ba8e31fa420a475e55ac6b02908346ad1b064d5b6b869503e08d057ae65e9dc2a2a26345917b18d1b715a2372e8e114a071eced0c29cc9966d7205ae010" );
3703  iv_len = unhexify( iv_str, "45afb3ba2db9287f06cf48405764a955" );
3704  add_len = unhexify( add_str, "16d3ad553cc0fde3f32112bdb478450c65c854927b198914649a2820a9e3d01131b693765d40bd2bb74a50eb4cd7bc8dd8dbac9c6a61acaf5e4cf81570814b30a6a11877a8f9c5df342f70008cbf0576bd27a50bfaf6e22a40bd77435da16b666a06d172aa981bdcae0d25b8ab002c6c1994a356d3c3b7e4dd7b99892b0784f6" );
3705 
3706  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3707  if( 0 == 0 )
3708  {
3709  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
3710  hexify( dst_str, output, pt_len );
3711  hexify( tag_str, tag_output, tag_len );
3712 
3713  fct_chk( strcmp( (char *) dst_str, "e29db2c4bccef2dda828ce652791d424a86cd5790e6ece67bc029ba9520bd8f35a214a73d8b86564df0eccdb60eafee4170da2694eb563e5a854b25d7ba0a4c53465fdc15c6e267be2e54263f97aa3edbe2358f3d9b8d28997388a57aa427a239a74534393593196253de1c2946b7a437a00480ecb2eb08dbe55ca2b3641c36f" ) == 0 );
3714  fct_chk( strcmp( (char *) tag_str, "39e01fa0" ) == 0 );
3715  }
3716  }
3717  FCT_TEST_END();
3718 
3719 
3720  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102432_2)
3721  {
3722  unsigned char key_str[128];
3723  unsigned char src_str[128];
3724  unsigned char dst_str[257];
3725  unsigned char iv_str[128];
3726  unsigned char add_str[128];
3727  unsigned char tag_str[128];
3728  unsigned char output[128];
3729  unsigned char tag_output[16];
3730  gcm_context ctx;
3731  unsigned int key_len;
3732  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
3733 
3734  memset(key_str, 0x00, 128);
3735  memset(src_str, 0x00, 128);
3736  memset(dst_str, 0x00, 257);
3737  memset(iv_str, 0x00, 128);
3738  memset(add_str, 0x00, 128);
3739  memset(tag_str, 0x00, 128);
3740  memset(output, 0x00, 128);
3741  memset(tag_output, 0x00, 16);
3742 
3743  key_len = unhexify( key_str, "2a840df4be22c70786c873058d2a6e16dd9895cbfb55b9c9e98f958cfe62e65d" );
3744  pt_len = unhexify( src_str, "313eddc53f3986927a261f498283b6dc4a39d26f98c7428127237d79a11c5e626e2e9cdb68f72aa3168ab23dfa2f5e03bc65a68d781f23fb9e295909cd9f0f3e5648cf82f3f6b3b509b0a333cb7d9f2b6e444c351a318f8f200a921ccb409def21b87bc55ec211a76a518350e6ee21d7379edd004b3bfd1ce9086b9c66d80ec1" );
3745  iv_len = unhexify( iv_str, "ebf155f7cf55e6aabdc1171c95c45293" );
3746  add_len = unhexify( add_str, "8abb8843de1766cfb8d6474496acda2f7a14e78a5e4c787ac89e6bc06cfd42173c35b3a75ddff644f4a58aa7502fedada38a7156457365b4c3c07bc12a8f9061331139b9a2b8d840829b876beb84f27d5a64093c270fe6c310ca3afe987bbc5ec4dc06358d5bf77c7b4e4fe4078c6d3ec28e9a281318da88949c478094c0065b" );
3747 
3748  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3749  if( 0 == 0 )
3750  {
3751  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
3752  hexify( dst_str, output, pt_len );
3753  hexify( tag_str, tag_output, tag_len );
3754 
3755  fct_chk( strcmp( (char *) dst_str, "769869a55754eb5d6d42e22a2b5271b38533fc0c79642e250347d34566eeca732e0565f80672054bd10cbd3067730dbc567039c730d8bc32a2bdaad09885651533a4f03174d4e6510547c1e1dd51be6070ab0ca0cceeaccf64a46d0ef87c0311bd09973f3b588a4dfb39c85086ea5d67dc531c287b83c161dcb25e07b671343f" ) == 0 );
3756  fct_chk( strcmp( (char *) tag_str, "c364c089" ) == 0 );
3757  }
3758  }
3759  FCT_TEST_END();
3760 
3761 
3762  FCT_TEST_BGN(gcm_nist_validation_aes_25612800128_0)
3763  {
3764  unsigned char key_str[128];
3765  unsigned char src_str[128];
3766  unsigned char dst_str[257];
3767  unsigned char iv_str[128];
3768  unsigned char add_str[128];
3769  unsigned char tag_str[128];
3770  unsigned char output[128];
3771  unsigned char tag_output[16];
3772  gcm_context ctx;
3773  unsigned int key_len;
3774  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
3775 
3776  memset(key_str, 0x00, 128);
3777  memset(src_str, 0x00, 128);
3778  memset(dst_str, 0x00, 257);
3779  memset(iv_str, 0x00, 128);
3780  memset(add_str, 0x00, 128);
3781  memset(tag_str, 0x00, 128);
3782  memset(output, 0x00, 128);
3783  memset(tag_output, 0x00, 16);
3784 
3785  key_len = unhexify( key_str, "461566cac74f9220df97c1ab2f8bb74189a634bc752f7f04526923d30506949c" );
3786  pt_len = unhexify( src_str, "" );
3787  iv_len = unhexify( iv_str, "546d821e437371061cf3207f3d866c15" );
3788  add_len = unhexify( add_str, "" );
3789 
3790  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3791  if( 0 == 0 )
3792  {
3793  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
3794  hexify( dst_str, output, pt_len );
3795  hexify( tag_str, tag_output, tag_len );
3796 
3797  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
3798  fct_chk( strcmp( (char *) tag_str, "44193072791c435d6e8ea7756a0bd7bf" ) == 0 );
3799  }
3800  }
3801  FCT_TEST_END();
3802 
3803 
3804  FCT_TEST_BGN(gcm_nist_validation_aes_25612800128_1)
3805  {
3806  unsigned char key_str[128];
3807  unsigned char src_str[128];
3808  unsigned char dst_str[257];
3809  unsigned char iv_str[128];
3810  unsigned char add_str[128];
3811  unsigned char tag_str[128];
3812  unsigned char output[128];
3813  unsigned char tag_output[16];
3814  gcm_context ctx;
3815  unsigned int key_len;
3816  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
3817 
3818  memset(key_str, 0x00, 128);
3819  memset(src_str, 0x00, 128);
3820  memset(dst_str, 0x00, 257);
3821  memset(iv_str, 0x00, 128);
3822  memset(add_str, 0x00, 128);
3823  memset(tag_str, 0x00, 128);
3824  memset(output, 0x00, 128);
3825  memset(tag_output, 0x00, 16);
3826 
3827  key_len = unhexify( key_str, "7736dbb38f1fe351a7fa101d91da62124c22ac02ee06b9413f56691067572f73" );
3828  pt_len = unhexify( src_str, "" );
3829  iv_len = unhexify( iv_str, "5f01779e5e4471cd95a591f08445eb5b" );
3830  add_len = unhexify( add_str, "" );
3831 
3832  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3833  if( 0 == 0 )
3834  {
3835  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
3836  hexify( dst_str, output, pt_len );
3837  hexify( tag_str, tag_output, tag_len );
3838 
3839  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
3840  fct_chk( strcmp( (char *) tag_str, "1a1f08c8f40b93e7b5a63008dff54777" ) == 0 );
3841  }
3842  }
3843  FCT_TEST_END();
3844 
3845 
3846  FCT_TEST_BGN(gcm_nist_validation_aes_25612800128_2)
3847  {
3848  unsigned char key_str[128];
3849  unsigned char src_str[128];
3850  unsigned char dst_str[257];
3851  unsigned char iv_str[128];
3852  unsigned char add_str[128];
3853  unsigned char tag_str[128];
3854  unsigned char output[128];
3855  unsigned char tag_output[16];
3856  gcm_context ctx;
3857  unsigned int key_len;
3858  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
3859 
3860  memset(key_str, 0x00, 128);
3861  memset(src_str, 0x00, 128);
3862  memset(dst_str, 0x00, 257);
3863  memset(iv_str, 0x00, 128);
3864  memset(add_str, 0x00, 128);
3865  memset(tag_str, 0x00, 128);
3866  memset(output, 0x00, 128);
3867  memset(tag_output, 0x00, 16);
3868 
3869  key_len = unhexify( key_str, "eedcae924105c86190032650e2d66cf6927dd314de96a339db48e2081d19ad4a" );
3870  pt_len = unhexify( src_str, "" );
3871  iv_len = unhexify( iv_str, "a39d400ee763a22d2a97c1983a8a06a6" );
3872  add_len = unhexify( add_str, "" );
3873 
3874  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3875  if( 0 == 0 )
3876  {
3877  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
3878  hexify( dst_str, output, pt_len );
3879  hexify( tag_str, tag_output, tag_len );
3880 
3881  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
3882  fct_chk( strcmp( (char *) tag_str, "3b4294d34352743c4b48c40794047bea" ) == 0 );
3883  }
3884  }
3885  FCT_TEST_END();
3886 
3887 
3888  FCT_TEST_BGN(gcm_nist_validation_aes_25612800120_0)
3889  {
3890  unsigned char key_str[128];
3891  unsigned char src_str[128];
3892  unsigned char dst_str[257];
3893  unsigned char iv_str[128];
3894  unsigned char add_str[128];
3895  unsigned char tag_str[128];
3896  unsigned char output[128];
3897  unsigned char tag_output[16];
3898  gcm_context ctx;
3899  unsigned int key_len;
3900  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
3901 
3902  memset(key_str, 0x00, 128);
3903  memset(src_str, 0x00, 128);
3904  memset(dst_str, 0x00, 257);
3905  memset(iv_str, 0x00, 128);
3906  memset(add_str, 0x00, 128);
3907  memset(tag_str, 0x00, 128);
3908  memset(output, 0x00, 128);
3909  memset(tag_output, 0x00, 16);
3910 
3911  key_len = unhexify( key_str, "714df4b69dc00067c4ab550f37ff72358b0a905dea2c01f00be28cec130313c2" );
3912  pt_len = unhexify( src_str, "" );
3913  iv_len = unhexify( iv_str, "c46d63d6fead2cee03bd033fbc2e6478" );
3914  add_len = unhexify( add_str, "" );
3915 
3916  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3917  if( 0 == 0 )
3918  {
3919  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
3920  hexify( dst_str, output, pt_len );
3921  hexify( tag_str, tag_output, tag_len );
3922 
3923  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
3924  fct_chk( strcmp( (char *) tag_str, "2a0271b0666889d2d0b34e82bf17d8" ) == 0 );
3925  }
3926  }
3927  FCT_TEST_END();
3928 
3929 
3930  FCT_TEST_BGN(gcm_nist_validation_aes_25612800120_1)
3931  {
3932  unsigned char key_str[128];
3933  unsigned char src_str[128];
3934  unsigned char dst_str[257];
3935  unsigned char iv_str[128];
3936  unsigned char add_str[128];
3937  unsigned char tag_str[128];
3938  unsigned char output[128];
3939  unsigned char tag_output[16];
3940  gcm_context ctx;
3941  unsigned int key_len;
3942  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
3943 
3944  memset(key_str, 0x00, 128);
3945  memset(src_str, 0x00, 128);
3946  memset(dst_str, 0x00, 257);
3947  memset(iv_str, 0x00, 128);
3948  memset(add_str, 0x00, 128);
3949  memset(tag_str, 0x00, 128);
3950  memset(output, 0x00, 128);
3951  memset(tag_output, 0x00, 16);
3952 
3953  key_len = unhexify( key_str, "454021ece9a87a9543a1626820d39edd1eff3dca38a287d8fb68bd315a7a2677" );
3954  pt_len = unhexify( src_str, "" );
3955  iv_len = unhexify( iv_str, "51de54b633a7c9f3b7b2c1e4b47d26a4" );
3956  add_len = unhexify( add_str, "" );
3957 
3958  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
3959  if( 0 == 0 )
3960  {
3961  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
3962  hexify( dst_str, output, pt_len );
3963  hexify( tag_str, tag_output, tag_len );
3964 
3965  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
3966  fct_chk( strcmp( (char *) tag_str, "114708102a434e3a30088b5944c272" ) == 0 );
3967  }
3968  }
3969  FCT_TEST_END();
3970 
3971 
3972  FCT_TEST_BGN(gcm_nist_validation_aes_25612800120_2)
3973  {
3974  unsigned char key_str[128];
3975  unsigned char src_str[128];
3976  unsigned char dst_str[257];
3977  unsigned char iv_str[128];
3978  unsigned char add_str[128];
3979  unsigned char tag_str[128];
3980  unsigned char output[128];
3981  unsigned char tag_output[16];
3982  gcm_context ctx;
3983  unsigned int key_len;
3984  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
3985 
3986  memset(key_str, 0x00, 128);
3987  memset(src_str, 0x00, 128);
3988  memset(dst_str, 0x00, 257);
3989  memset(iv_str, 0x00, 128);
3990  memset(add_str, 0x00, 128);
3991  memset(tag_str, 0x00, 128);
3992  memset(output, 0x00, 128);
3993  memset(tag_output, 0x00, 16);
3994 
3995  key_len = unhexify( key_str, "d7e90b539c99e8c2187ed72823258c1149890a69a9c0081ff8c66e1cdea9f2f6" );
3996  pt_len = unhexify( src_str, "" );
3997  iv_len = unhexify( iv_str, "6dba3273560f30f118a2e0251f7b7d76" );
3998  add_len = unhexify( add_str, "" );
3999 
4000  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4001  if( 0 == 0 )
4002  {
4003  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
4004  hexify( dst_str, output, pt_len );
4005  hexify( tag_str, tag_output, tag_len );
4006 
4007  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4008  fct_chk( strcmp( (char *) tag_str, "5f45e00181cd2d7feb4723e0cdca24" ) == 0 );
4009  }
4010  }
4011  FCT_TEST_END();
4012 
4013 
4014  FCT_TEST_BGN(gcm_nist_validation_aes_25612800112_0)
4015  {
4016  unsigned char key_str[128];
4017  unsigned char src_str[128];
4018  unsigned char dst_str[257];
4019  unsigned char iv_str[128];
4020  unsigned char add_str[128];
4021  unsigned char tag_str[128];
4022  unsigned char output[128];
4023  unsigned char tag_output[16];
4024  gcm_context ctx;
4025  unsigned int key_len;
4026  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
4027 
4028  memset(key_str, 0x00, 128);
4029  memset(src_str, 0x00, 128);
4030  memset(dst_str, 0x00, 257);
4031  memset(iv_str, 0x00, 128);
4032  memset(add_str, 0x00, 128);
4033  memset(tag_str, 0x00, 128);
4034  memset(output, 0x00, 128);
4035  memset(tag_output, 0x00, 16);
4036 
4037  key_len = unhexify( key_str, "2948233eec9bf8adf7250b20d62df9219d30e314c5932383203805ff9f3dc5cf" );
4038  pt_len = unhexify( src_str, "" );
4039  iv_len = unhexify( iv_str, "d6b8e723272e26922b78756d66e03432" );
4040  add_len = unhexify( add_str, "" );
4041 
4042  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4043  if( 0 == 0 )
4044  {
4045  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
4046  hexify( dst_str, output, pt_len );
4047  hexify( tag_str, tag_output, tag_len );
4048 
4049  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4050  fct_chk( strcmp( (char *) tag_str, "14c9a9a217a33d4c0b8e627641fe" ) == 0 );
4051  }
4052  }
4053  FCT_TEST_END();
4054 
4055 
4056  FCT_TEST_BGN(gcm_nist_validation_aes_25612800112_1)
4057  {
4058  unsigned char key_str[128];
4059  unsigned char src_str[128];
4060  unsigned char dst_str[257];
4061  unsigned char iv_str[128];
4062  unsigned char add_str[128];
4063  unsigned char tag_str[128];
4064  unsigned char output[128];
4065  unsigned char tag_output[16];
4066  gcm_context ctx;
4067  unsigned int key_len;
4068  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
4069 
4070  memset(key_str, 0x00, 128);
4071  memset(src_str, 0x00, 128);
4072  memset(dst_str, 0x00, 257);
4073  memset(iv_str, 0x00, 128);
4074  memset(add_str, 0x00, 128);
4075  memset(tag_str, 0x00, 128);
4076  memset(output, 0x00, 128);
4077  memset(tag_output, 0x00, 16);
4078 
4079  key_len = unhexify( key_str, "c73fb5e732ebc1dc7c91ac25de0d01d427de12baf05ff251c04d3290d77c34d1" );
4080  pt_len = unhexify( src_str, "" );
4081  iv_len = unhexify( iv_str, "c31220835b11d61920ae2c91e335907e" );
4082  add_len = unhexify( add_str, "" );
4083 
4084  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4085  if( 0 == 0 )
4086  {
4087  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
4088  hexify( dst_str, output, pt_len );
4089  hexify( tag_str, tag_output, tag_len );
4090 
4091  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4092  fct_chk( strcmp( (char *) tag_str, "9eb18097d3e6b6b7d5e161ae4e96" ) == 0 );
4093  }
4094  }
4095  FCT_TEST_END();
4096 
4097 
4098  FCT_TEST_BGN(gcm_nist_validation_aes_25612800112_2)
4099  {
4100  unsigned char key_str[128];
4101  unsigned char src_str[128];
4102  unsigned char dst_str[257];
4103  unsigned char iv_str[128];
4104  unsigned char add_str[128];
4105  unsigned char tag_str[128];
4106  unsigned char output[128];
4107  unsigned char tag_output[16];
4108  gcm_context ctx;
4109  unsigned int key_len;
4110  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
4111 
4112  memset(key_str, 0x00, 128);
4113  memset(src_str, 0x00, 128);
4114  memset(dst_str, 0x00, 257);
4115  memset(iv_str, 0x00, 128);
4116  memset(add_str, 0x00, 128);
4117  memset(tag_str, 0x00, 128);
4118  memset(output, 0x00, 128);
4119  memset(tag_output, 0x00, 16);
4120 
4121  key_len = unhexify( key_str, "a46aff2121825814c603b258f71d47bd9c9d3db4c6fe0f900e0e99d36c8f8d66" );
4122  pt_len = unhexify( src_str, "" );
4123  iv_len = unhexify( iv_str, "7cb5550a20d958490739be8a5c72440f" );
4124  add_len = unhexify( add_str, "" );
4125 
4126  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4127  if( 0 == 0 )
4128  {
4129  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
4130  hexify( dst_str, output, pt_len );
4131  hexify( tag_str, tag_output, tag_len );
4132 
4133  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4134  fct_chk( strcmp( (char *) tag_str, "8c76eebda0f1fd57f05a62c5f93d" ) == 0 );
4135  }
4136  }
4137  FCT_TEST_END();
4138 
4139 
4140  FCT_TEST_BGN(gcm_nist_validation_aes_25612800104_0)
4141  {
4142  unsigned char key_str[128];
4143  unsigned char src_str[128];
4144  unsigned char dst_str[257];
4145  unsigned char iv_str[128];
4146  unsigned char add_str[128];
4147  unsigned char tag_str[128];
4148  unsigned char output[128];
4149  unsigned char tag_output[16];
4150  gcm_context ctx;
4151  unsigned int key_len;
4152  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
4153 
4154  memset(key_str, 0x00, 128);
4155  memset(src_str, 0x00, 128);
4156  memset(dst_str, 0x00, 257);
4157  memset(iv_str, 0x00, 128);
4158  memset(add_str, 0x00, 128);
4159  memset(tag_str, 0x00, 128);
4160  memset(output, 0x00, 128);
4161  memset(tag_output, 0x00, 16);
4162 
4163  key_len = unhexify( key_str, "61a612c76de551f794a146962d913f60fbd4431365b711217aaa4beaa115f726" );
4164  pt_len = unhexify( src_str, "" );
4165  iv_len = unhexify( iv_str, "2d25462c90ad9a21073729e5efc99957" );
4166  add_len = unhexify( add_str, "" );
4167 
4168  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4169  if( 0 == 0 )
4170  {
4171  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
4172  hexify( dst_str, output, pt_len );
4173  hexify( tag_str, tag_output, tag_len );
4174 
4175  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4176  fct_chk( strcmp( (char *) tag_str, "e4d3b277dc9a107c0392ca1e5b" ) == 0 );
4177  }
4178  }
4179  FCT_TEST_END();
4180 
4181 
4182  FCT_TEST_BGN(gcm_nist_validation_aes_25612800104_1)
4183  {
4184  unsigned char key_str[128];
4185  unsigned char src_str[128];
4186  unsigned char dst_str[257];
4187  unsigned char iv_str[128];
4188  unsigned char add_str[128];
4189  unsigned char tag_str[128];
4190  unsigned char output[128];
4191  unsigned char tag_output[16];
4192  gcm_context ctx;
4193  unsigned int key_len;
4194  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
4195 
4196  memset(key_str, 0x00, 128);
4197  memset(src_str, 0x00, 128);
4198  memset(dst_str, 0x00, 257);
4199  memset(iv_str, 0x00, 128);
4200  memset(add_str, 0x00, 128);
4201  memset(tag_str, 0x00, 128);
4202  memset(output, 0x00, 128);
4203  memset(tag_output, 0x00, 16);
4204 
4205  key_len = unhexify( key_str, "4b233480239fabd2035a7c9207a8e1ab2da45a90a472b30848fe4b4757c628db" );
4206  pt_len = unhexify( src_str, "" );
4207  iv_len = unhexify( iv_str, "50d45096afd0571e171e1ab1ffb3720f" );
4208  add_len = unhexify( add_str, "" );
4209 
4210  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4211  if( 0 == 0 )
4212  {
4213  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
4214  hexify( dst_str, output, pt_len );
4215  hexify( tag_str, tag_output, tag_len );
4216 
4217  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4218  fct_chk( strcmp( (char *) tag_str, "5393bc06b8c5ecef1264fd6084" ) == 0 );
4219  }
4220  }
4221  FCT_TEST_END();
4222 
4223 
4224  FCT_TEST_BGN(gcm_nist_validation_aes_25612800104_2)
4225  {
4226  unsigned char key_str[128];
4227  unsigned char src_str[128];
4228  unsigned char dst_str[257];
4229  unsigned char iv_str[128];
4230  unsigned char add_str[128];
4231  unsigned char tag_str[128];
4232  unsigned char output[128];
4233  unsigned char tag_output[16];
4234  gcm_context ctx;
4235  unsigned int key_len;
4236  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
4237 
4238  memset(key_str, 0x00, 128);
4239  memset(src_str, 0x00, 128);
4240  memset(dst_str, 0x00, 257);
4241  memset(iv_str, 0x00, 128);
4242  memset(add_str, 0x00, 128);
4243  memset(tag_str, 0x00, 128);
4244  memset(output, 0x00, 128);
4245  memset(tag_output, 0x00, 16);
4246 
4247  key_len = unhexify( key_str, "dc051ac63e6b051594158399291ed101a3efbb1701b98819c4835a4863734371" );
4248  pt_len = unhexify( src_str, "" );
4249  iv_len = unhexify( iv_str, "1f304d4d7f84ab560366215649b0a064" );
4250  add_len = unhexify( add_str, "" );
4251 
4252  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4253  if( 0 == 0 )
4254  {
4255  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
4256  hexify( dst_str, output, pt_len );
4257  hexify( tag_str, tag_output, tag_len );
4258 
4259  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4260  fct_chk( strcmp( (char *) tag_str, "1081dda9e0a793916dc82f7848" ) == 0 );
4261  }
4262  }
4263  FCT_TEST_END();
4264 
4265 
4266  FCT_TEST_BGN(gcm_nist_validation_aes_2561280096_0)
4267  {
4268  unsigned char key_str[128];
4269  unsigned char src_str[128];
4270  unsigned char dst_str[257];
4271  unsigned char iv_str[128];
4272  unsigned char add_str[128];
4273  unsigned char tag_str[128];
4274  unsigned char output[128];
4275  unsigned char tag_output[16];
4276  gcm_context ctx;
4277  unsigned int key_len;
4278  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
4279 
4280  memset(key_str, 0x00, 128);
4281  memset(src_str, 0x00, 128);
4282  memset(dst_str, 0x00, 257);
4283  memset(iv_str, 0x00, 128);
4284  memset(add_str, 0x00, 128);
4285  memset(tag_str, 0x00, 128);
4286  memset(output, 0x00, 128);
4287  memset(tag_output, 0x00, 16);
4288 
4289  key_len = unhexify( key_str, "75f76df772af8e3019a4c1588a7d59925f80ce0d5647030f29548374e7bcc9e8" );
4290  pt_len = unhexify( src_str, "" );
4291  iv_len = unhexify( iv_str, "d407264e09fbc853b131c8a9f808f1de" );
4292  add_len = unhexify( add_str, "" );
4293 
4294  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4295  if( 0 == 0 )
4296  {
4297  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
4298  hexify( dst_str, output, pt_len );
4299  hexify( tag_str, tag_output, tag_len );
4300 
4301  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4302  fct_chk( strcmp( (char *) tag_str, "d515522db52bb872a4d3f9d1" ) == 0 );
4303  }
4304  }
4305  FCT_TEST_END();
4306 
4307 
4308  FCT_TEST_BGN(gcm_nist_validation_aes_2561280096_1)
4309  {
4310  unsigned char key_str[128];
4311  unsigned char src_str[128];
4312  unsigned char dst_str[257];
4313  unsigned char iv_str[128];
4314  unsigned char add_str[128];
4315  unsigned char tag_str[128];
4316  unsigned char output[128];
4317  unsigned char tag_output[16];
4318  gcm_context ctx;
4319  unsigned int key_len;
4320  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
4321 
4322  memset(key_str, 0x00, 128);
4323  memset(src_str, 0x00, 128);
4324  memset(dst_str, 0x00, 257);
4325  memset(iv_str, 0x00, 128);
4326  memset(add_str, 0x00, 128);
4327  memset(tag_str, 0x00, 128);
4328  memset(output, 0x00, 128);
4329  memset(tag_output, 0x00, 16);
4330 
4331  key_len = unhexify( key_str, "608d7592c094322b31d4583a430986bdf6aa639cc4b4a0b3903e588b45c38d38" );
4332  pt_len = unhexify( src_str, "" );
4333  iv_len = unhexify( iv_str, "6a631952e4990ae6bdd51052eb407168" );
4334  add_len = unhexify( add_str, "" );
4335 
4336  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4337  if( 0 == 0 )
4338  {
4339  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
4340  hexify( dst_str, output, pt_len );
4341  hexify( tag_str, tag_output, tag_len );
4342 
4343  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4344  fct_chk( strcmp( (char *) tag_str, "eb8851cfdd4fc841173c4985" ) == 0 );
4345  }
4346  }
4347  FCT_TEST_END();
4348 
4349 
4350  FCT_TEST_BGN(gcm_nist_validation_aes_2561280096_2)
4351  {
4352  unsigned char key_str[128];
4353  unsigned char src_str[128];
4354  unsigned char dst_str[257];
4355  unsigned char iv_str[128];
4356  unsigned char add_str[128];
4357  unsigned char tag_str[128];
4358  unsigned char output[128];
4359  unsigned char tag_output[16];
4360  gcm_context ctx;
4361  unsigned int key_len;
4362  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
4363 
4364  memset(key_str, 0x00, 128);
4365  memset(src_str, 0x00, 128);
4366  memset(dst_str, 0x00, 257);
4367  memset(iv_str, 0x00, 128);
4368  memset(add_str, 0x00, 128);
4369  memset(tag_str, 0x00, 128);
4370  memset(output, 0x00, 128);
4371  memset(tag_output, 0x00, 16);
4372 
4373  key_len = unhexify( key_str, "86a90631e5341e67dfa55e68b07522507b437fbab7f3e2e26cfc6e89ef9d2410" );
4374  pt_len = unhexify( src_str, "" );
4375  iv_len = unhexify( iv_str, "67763ee1890e4bb430ac3c0dbc2af997" );
4376  add_len = unhexify( add_str, "" );
4377 
4378  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4379  if( 0 == 0 )
4380  {
4381  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
4382  hexify( dst_str, output, pt_len );
4383  hexify( tag_str, tag_output, tag_len );
4384 
4385  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4386  fct_chk( strcmp( (char *) tag_str, "c6d11901b53cf6b13ac03cc5" ) == 0 );
4387  }
4388  }
4389  FCT_TEST_END();
4390 
4391 
4392  FCT_TEST_BGN(gcm_nist_validation_aes_2561280064_0)
4393  {
4394  unsigned char key_str[128];
4395  unsigned char src_str[128];
4396  unsigned char dst_str[257];
4397  unsigned char iv_str[128];
4398  unsigned char add_str[128];
4399  unsigned char tag_str[128];
4400  unsigned char output[128];
4401  unsigned char tag_output[16];
4402  gcm_context ctx;
4403  unsigned int key_len;
4404  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
4405 
4406  memset(key_str, 0x00, 128);
4407  memset(src_str, 0x00, 128);
4408  memset(dst_str, 0x00, 257);
4409  memset(iv_str, 0x00, 128);
4410  memset(add_str, 0x00, 128);
4411  memset(tag_str, 0x00, 128);
4412  memset(output, 0x00, 128);
4413  memset(tag_output, 0x00, 16);
4414 
4415  key_len = unhexify( key_str, "b8d12783ba2548b499ea56e77491d2794057e05fd7af7da597241d91d832b33a" );
4416  pt_len = unhexify( src_str, "" );
4417  iv_len = unhexify( iv_str, "0365436099fe57b4c027c7e58182e0b9" );
4418  add_len = unhexify( add_str, "" );
4419 
4420  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4421  if( 0 == 0 )
4422  {
4423  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
4424  hexify( dst_str, output, pt_len );
4425  hexify( tag_str, tag_output, tag_len );
4426 
4427  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4428  fct_chk( strcmp( (char *) tag_str, "41fc42d8c9999d8c" ) == 0 );
4429  }
4430  }
4431  FCT_TEST_END();
4432 
4433 
4434  FCT_TEST_BGN(gcm_nist_validation_aes_2561280064_1)
4435  {
4436  unsigned char key_str[128];
4437  unsigned char src_str[128];
4438  unsigned char dst_str[257];
4439  unsigned char iv_str[128];
4440  unsigned char add_str[128];
4441  unsigned char tag_str[128];
4442  unsigned char output[128];
4443  unsigned char tag_output[16];
4444  gcm_context ctx;
4445  unsigned int key_len;
4446  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
4447 
4448  memset(key_str, 0x00, 128);
4449  memset(src_str, 0x00, 128);
4450  memset(dst_str, 0x00, 257);
4451  memset(iv_str, 0x00, 128);
4452  memset(add_str, 0x00, 128);
4453  memset(tag_str, 0x00, 128);
4454  memset(output, 0x00, 128);
4455  memset(tag_output, 0x00, 16);
4456 
4457  key_len = unhexify( key_str, "eb17c1bbcd356070ca58fc3899bb3751eea5b9f3663c8e51d32c1fc3060b7ac2" );
4458  pt_len = unhexify( src_str, "" );
4459  iv_len = unhexify( iv_str, "aca76b23575d4ec1a52a3d7214a4da2f" );
4460  add_len = unhexify( add_str, "" );
4461 
4462  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4463  if( 0 == 0 )
4464  {
4465  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
4466  hexify( dst_str, output, pt_len );
4467  hexify( tag_str, tag_output, tag_len );
4468 
4469  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4470  fct_chk( strcmp( (char *) tag_str, "fbcfd13a2126b2af" ) == 0 );
4471  }
4472  }
4473  FCT_TEST_END();
4474 
4475 
4476  FCT_TEST_BGN(gcm_nist_validation_aes_2561280064_2)
4477  {
4478  unsigned char key_str[128];
4479  unsigned char src_str[128];
4480  unsigned char dst_str[257];
4481  unsigned char iv_str[128];
4482  unsigned char add_str[128];
4483  unsigned char tag_str[128];
4484  unsigned char output[128];
4485  unsigned char tag_output[16];
4486  gcm_context ctx;
4487  unsigned int key_len;
4488  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
4489 
4490  memset(key_str, 0x00, 128);
4491  memset(src_str, 0x00, 128);
4492  memset(dst_str, 0x00, 257);
4493  memset(iv_str, 0x00, 128);
4494  memset(add_str, 0x00, 128);
4495  memset(tag_str, 0x00, 128);
4496  memset(output, 0x00, 128);
4497  memset(tag_output, 0x00, 16);
4498 
4499  key_len = unhexify( key_str, "916aea7c3283aadb60908ec747bcf82364c1827ec29bedcbadacbb9b935221c1" );
4500  pt_len = unhexify( src_str, "" );
4501  iv_len = unhexify( iv_str, "e4aefe6f81872729ff5a3acf164922aa" );
4502  add_len = unhexify( add_str, "" );
4503 
4504  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4505  if( 0 == 0 )
4506  {
4507  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
4508  hexify( dst_str, output, pt_len );
4509  hexify( tag_str, tag_output, tag_len );
4510 
4511  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4512  fct_chk( strcmp( (char *) tag_str, "2035a7ce818b1eb4" ) == 0 );
4513  }
4514  }
4515  FCT_TEST_END();
4516 
4517 
4518  FCT_TEST_BGN(gcm_nist_validation_aes_2561280032_0)
4519  {
4520  unsigned char key_str[128];
4521  unsigned char src_str[128];
4522  unsigned char dst_str[257];
4523  unsigned char iv_str[128];
4524  unsigned char add_str[128];
4525  unsigned char tag_str[128];
4526  unsigned char output[128];
4527  unsigned char tag_output[16];
4528  gcm_context ctx;
4529  unsigned int key_len;
4530  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
4531 
4532  memset(key_str, 0x00, 128);
4533  memset(src_str, 0x00, 128);
4534  memset(dst_str, 0x00, 257);
4535  memset(iv_str, 0x00, 128);
4536  memset(add_str, 0x00, 128);
4537  memset(tag_str, 0x00, 128);
4538  memset(output, 0x00, 128);
4539  memset(tag_output, 0x00, 16);
4540 
4541  key_len = unhexify( key_str, "47b4b7feb91582a2f6121d12fd465967352e58d9f3d1bf27478da39514510055" );
4542  pt_len = unhexify( src_str, "" );
4543  iv_len = unhexify( iv_str, "137bc31639a8a5d6b3c410151078c662" );
4544  add_len = unhexify( add_str, "" );
4545 
4546  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4547  if( 0 == 0 )
4548  {
4549  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
4550  hexify( dst_str, output, pt_len );
4551  hexify( tag_str, tag_output, tag_len );
4552 
4553  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4554  fct_chk( strcmp( (char *) tag_str, "822955ba" ) == 0 );
4555  }
4556  }
4557  FCT_TEST_END();
4558 
4559 
4560  FCT_TEST_BGN(gcm_nist_validation_aes_2561280032_1)
4561  {
4562  unsigned char key_str[128];
4563  unsigned char src_str[128];
4564  unsigned char dst_str[257];
4565  unsigned char iv_str[128];
4566  unsigned char add_str[128];
4567  unsigned char tag_str[128];
4568  unsigned char output[128];
4569  unsigned char tag_output[16];
4570  gcm_context ctx;
4571  unsigned int key_len;
4572  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
4573 
4574  memset(key_str, 0x00, 128);
4575  memset(src_str, 0x00, 128);
4576  memset(dst_str, 0x00, 257);
4577  memset(iv_str, 0x00, 128);
4578  memset(add_str, 0x00, 128);
4579  memset(tag_str, 0x00, 128);
4580  memset(output, 0x00, 128);
4581  memset(tag_output, 0x00, 16);
4582 
4583  key_len = unhexify( key_str, "8955cddce65978bd64ef5228308317a1ba6a9fbb5a80cf5905f3aed03058b797" );
4584  pt_len = unhexify( src_str, "" );
4585  iv_len = unhexify( iv_str, "1370e72b56d97b9b9531ec02e2a5a937" );
4586  add_len = unhexify( add_str, "" );
4587 
4588  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4589  if( 0 == 0 )
4590  {
4591  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
4592  hexify( dst_str, output, pt_len );
4593  hexify( tag_str, tag_output, tag_len );
4594 
4595  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4596  fct_chk( strcmp( (char *) tag_str, "b2f779e8" ) == 0 );
4597  }
4598  }
4599  FCT_TEST_END();
4600 
4601 
4602  FCT_TEST_BGN(gcm_nist_validation_aes_2561280032_2)
4603  {
4604  unsigned char key_str[128];
4605  unsigned char src_str[128];
4606  unsigned char dst_str[257];
4607  unsigned char iv_str[128];
4608  unsigned char add_str[128];
4609  unsigned char tag_str[128];
4610  unsigned char output[128];
4611  unsigned char tag_output[16];
4612  gcm_context ctx;
4613  unsigned int key_len;
4614  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
4615 
4616  memset(key_str, 0x00, 128);
4617  memset(src_str, 0x00, 128);
4618  memset(dst_str, 0x00, 257);
4619  memset(iv_str, 0x00, 128);
4620  memset(add_str, 0x00, 128);
4621  memset(tag_str, 0x00, 128);
4622  memset(output, 0x00, 128);
4623  memset(tag_output, 0x00, 16);
4624 
4625  key_len = unhexify( key_str, "7795d631f7e988bf53020d2b4607c04d1fab338a58b09484fe6659c500fd846b" );
4626  pt_len = unhexify( src_str, "" );
4627  iv_len = unhexify( iv_str, "f3f5cc7c1ec0b7b113442269e478ed81" );
4628  add_len = unhexify( add_str, "" );
4629 
4630  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4631  if( 0 == 0 )
4632  {
4633  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
4634  hexify( dst_str, output, pt_len );
4635  hexify( tag_str, tag_output, tag_len );
4636 
4637  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4638  fct_chk( strcmp( (char *) tag_str, "e4e6dfcc" ) == 0 );
4639  }
4640  }
4641  FCT_TEST_END();
4642 
4643 
4644  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024128_0)
4645  {
4646  unsigned char key_str[128];
4647  unsigned char src_str[128];
4648  unsigned char dst_str[257];
4649  unsigned char iv_str[128];
4650  unsigned char add_str[128];
4651  unsigned char tag_str[128];
4652  unsigned char output[128];
4653  unsigned char tag_output[16];
4654  gcm_context ctx;
4655  unsigned int key_len;
4656  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
4657 
4658  memset(key_str, 0x00, 128);
4659  memset(src_str, 0x00, 128);
4660  memset(dst_str, 0x00, 257);
4661  memset(iv_str, 0x00, 128);
4662  memset(add_str, 0x00, 128);
4663  memset(tag_str, 0x00, 128);
4664  memset(output, 0x00, 128);
4665  memset(tag_output, 0x00, 16);
4666 
4667  key_len = unhexify( key_str, "f9aab5d2ea01b9dc35c728ae24e07c54e6d1452e49d9644776f65878199bc5e4" );
4668  pt_len = unhexify( src_str, "" );
4669  iv_len = unhexify( iv_str, "96ec2252e51ebfb731b680729be73297" );
4670  add_len = unhexify( add_str, "983a102a67359f4eecac465b0d65908a487c98c593be89494a39b721728edc991726e1fba49607eed1f8ba75ae9ab82a1a95b65ebdf48d7ee3c4a2b56832f21a483d48c8400dea71537f4c459d1cfcf9d2cc97b32eb7c5146cbf44d7e5ac779e9be0ae758eafff2138d4c5370b8cb62d70ebb713dfd2fd7772fa250590609844" );
4671 
4672  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4673  if( 0 == 0 )
4674  {
4675  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
4676  hexify( dst_str, output, pt_len );
4677  hexify( tag_str, tag_output, tag_len );
4678 
4679  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4680  fct_chk( strcmp( (char *) tag_str, "766b6dcf491a5836ef90f47ac6ab91ec" ) == 0 );
4681  }
4682  }
4683  FCT_TEST_END();
4684 
4685 
4686  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024128_1)
4687  {
4688  unsigned char key_str[128];
4689  unsigned char src_str[128];
4690  unsigned char dst_str[257];
4691  unsigned char iv_str[128];
4692  unsigned char add_str[128];
4693  unsigned char tag_str[128];
4694  unsigned char output[128];
4695  unsigned char tag_output[16];
4696  gcm_context ctx;
4697  unsigned int key_len;
4698  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
4699 
4700  memset(key_str, 0x00, 128);
4701  memset(src_str, 0x00, 128);
4702  memset(dst_str, 0x00, 257);
4703  memset(iv_str, 0x00, 128);
4704  memset(add_str, 0x00, 128);
4705  memset(tag_str, 0x00, 128);
4706  memset(output, 0x00, 128);
4707  memset(tag_output, 0x00, 16);
4708 
4709  key_len = unhexify( key_str, "d713b33af57762f933d6abfecbac7fb0dc1e545dd7c01638b0e1510af719769a" );
4710  pt_len = unhexify( src_str, "" );
4711  iv_len = unhexify( iv_str, "5da52833b6fc73c0e4b1403e1c3c10a2" );
4712  add_len = unhexify( add_str, "374dd4ebdfe74450abe26d9e53556092abe36f47bbb574e8184b4e0f64d16d99eaf0666fa3d9b0723c868cf6f77e641c47ac60f0ee13dd0c1046ef202e652b652f4b5de611989223b0acf1ead9b3537bba17ccf865a4a0fda1a20b00e3c828b9726bbd0b0e92fa8ed970eed50c885e6d69604278375af7b9ae47fbce4fed7d03" );
4713 
4714  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4715  if( 0 == 0 )
4716  {
4717  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
4718  hexify( dst_str, output, pt_len );
4719  hexify( tag_str, tag_output, tag_len );
4720 
4721  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4722  fct_chk( strcmp( (char *) tag_str, "6151956162348eb397e2b1077b61ee25" ) == 0 );
4723  }
4724  }
4725  FCT_TEST_END();
4726 
4727 
4728  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024128_2)
4729  {
4730  unsigned char key_str[128];
4731  unsigned char src_str[128];
4732  unsigned char dst_str[257];
4733  unsigned char iv_str[128];
4734  unsigned char add_str[128];
4735  unsigned char tag_str[128];
4736  unsigned char output[128];
4737  unsigned char tag_output[16];
4738  gcm_context ctx;
4739  unsigned int key_len;
4740  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
4741 
4742  memset(key_str, 0x00, 128);
4743  memset(src_str, 0x00, 128);
4744  memset(dst_str, 0x00, 257);
4745  memset(iv_str, 0x00, 128);
4746  memset(add_str, 0x00, 128);
4747  memset(tag_str, 0x00, 128);
4748  memset(output, 0x00, 128);
4749  memset(tag_output, 0x00, 16);
4750 
4751  key_len = unhexify( key_str, "77a1e4ddfbe77a0ca3513fc654e7c41609cb974a306234add2fc77770a4a9e16" );
4752  pt_len = unhexify( src_str, "" );
4753  iv_len = unhexify( iv_str, "30d6ec88433a6bdd7786dc4d3693bde8" );
4754  add_len = unhexify( add_str, "69beef4dbdcdf4e8eeb9bf8ae6caff8433949afc2ffef777e2b71a99fde974797dfed2254b959430ecc48db72cee16c7ef41fa4165ce4a0636ad4e40875d193a3c6c56a6bca5a55bce3a057a2d3ac223eba76e30e7415f00e6a7643fda9a1bf4d4b96ce597ffe30c3f780dd767cb5681bb7a3fd11668380e272bdd70e66f18b6" );
4755 
4756  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4757  if( 0 == 0 )
4758  {
4759  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
4760  hexify( dst_str, output, pt_len );
4761  hexify( tag_str, tag_output, tag_len );
4762 
4763  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4764  fct_chk( strcmp( (char *) tag_str, "d4a3c91e02a94fd183cb0c9de241c7d1" ) == 0 );
4765  }
4766  }
4767  FCT_TEST_END();
4768 
4769 
4770  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024120_0)
4771  {
4772  unsigned char key_str[128];
4773  unsigned char src_str[128];
4774  unsigned char dst_str[257];
4775  unsigned char iv_str[128];
4776  unsigned char add_str[128];
4777  unsigned char tag_str[128];
4778  unsigned char output[128];
4779  unsigned char tag_output[16];
4780  gcm_context ctx;
4781  unsigned int key_len;
4782  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
4783 
4784  memset(key_str, 0x00, 128);
4785  memset(src_str, 0x00, 128);
4786  memset(dst_str, 0x00, 257);
4787  memset(iv_str, 0x00, 128);
4788  memset(add_str, 0x00, 128);
4789  memset(tag_str, 0x00, 128);
4790  memset(output, 0x00, 128);
4791  memset(tag_output, 0x00, 16);
4792 
4793  key_len = unhexify( key_str, "303930b8ba50f65a50c33eccd879990d5d87b569e46f1a59db54371fcbda7fd6" );
4794  pt_len = unhexify( src_str, "" );
4795  iv_len = unhexify( iv_str, "2b2b28d8a5c94b6f7ee50e130268a078" );
4796  add_len = unhexify( add_str, "c2ff20441d96bae4d2d760dcbae636ca7e01d263c28db5faed201bdb39bcacc82ebdc943968aa0accd920d258709c270df65d46d3f09910d2ea701c018ec9a68af7fb3d76a9b360de266b2ac05e95c538417fec59cec1f07d47c03511751978baebd2e0e4f7483f7351b5e61c2a60138c97b751f6a8c8323970f6be05357aeb2" );
4797 
4798  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4799  if( 0 == 0 )
4800  {
4801  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
4802  hexify( dst_str, output, pt_len );
4803  hexify( tag_str, tag_output, tag_len );
4804 
4805  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4806  fct_chk( strcmp( (char *) tag_str, "b597491dfe599eaa414b71c54063ed" ) == 0 );
4807  }
4808  }
4809  FCT_TEST_END();
4810 
4811 
4812  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024120_1)
4813  {
4814  unsigned char key_str[128];
4815  unsigned char src_str[128];
4816  unsigned char dst_str[257];
4817  unsigned char iv_str[128];
4818  unsigned char add_str[128];
4819  unsigned char tag_str[128];
4820  unsigned char output[128];
4821  unsigned char tag_output[16];
4822  gcm_context ctx;
4823  unsigned int key_len;
4824  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
4825 
4826  memset(key_str, 0x00, 128);
4827  memset(src_str, 0x00, 128);
4828  memset(dst_str, 0x00, 257);
4829  memset(iv_str, 0x00, 128);
4830  memset(add_str, 0x00, 128);
4831  memset(tag_str, 0x00, 128);
4832  memset(output, 0x00, 128);
4833  memset(tag_output, 0x00, 16);
4834 
4835  key_len = unhexify( key_str, "1e3b94f5883239c45ed4df6930c453c9ffd70b1c6cee845bbcfe6f29a762713b" );
4836  pt_len = unhexify( src_str, "" );
4837  iv_len = unhexify( iv_str, "61155f27c629dcb6cf49b192b0b505d6" );
4838  add_len = unhexify( add_str, "5b7482e9b638cb23dba327cc08309bdb40d38100a407c36091457971bad3ab263efa8f36d8d04fdc4dea38369efe7ae5e8b9c190dad2688bda857e48dfd400748a359cfe1b2a3f3d5be7ae0f64a3f44738a7c7cf840a2e6b90ec43f8c9322c60dd91e4f27fa12197fab7ed092990879e964ce014f6be2a1ef70bfefe880a75d5" );
4839 
4840  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4841  if( 0 == 0 )
4842  {
4843  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
4844  hexify( dst_str, output, pt_len );
4845  hexify( tag_str, tag_output, tag_len );
4846 
4847  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4848  fct_chk( strcmp( (char *) tag_str, "7003f04d6b6d9dc794be27b9c5d5e5" ) == 0 );
4849  }
4850  }
4851  FCT_TEST_END();
4852 
4853 
4854  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024120_2)
4855  {
4856  unsigned char key_str[128];
4857  unsigned char src_str[128];
4858  unsigned char dst_str[257];
4859  unsigned char iv_str[128];
4860  unsigned char add_str[128];
4861  unsigned char tag_str[128];
4862  unsigned char output[128];
4863  unsigned char tag_output[16];
4864  gcm_context ctx;
4865  unsigned int key_len;
4866  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
4867 
4868  memset(key_str, 0x00, 128);
4869  memset(src_str, 0x00, 128);
4870  memset(dst_str, 0x00, 257);
4871  memset(iv_str, 0x00, 128);
4872  memset(add_str, 0x00, 128);
4873  memset(tag_str, 0x00, 128);
4874  memset(output, 0x00, 128);
4875  memset(tag_output, 0x00, 16);
4876 
4877  key_len = unhexify( key_str, "9080effb27994ef831689da10600e7a219db93d690647457702c217b08057eb3" );
4878  pt_len = unhexify( src_str, "" );
4879  iv_len = unhexify( iv_str, "f45514696ff5ee1e6e5797f7bcff05c0" );
4880  add_len = unhexify( add_str, "5251f800f7c7106c008c0122971f0070d6325b7343a82fc35f3853d25c878215e7a929bf63cc8996f0ffb817174a351b71d691f23021f58777f962fd1d45ff849e4612e3304ae3303ace7b8ca1a43f54e662071c183a1695873f5567397587283433d1e76cec1103ee76f8e0472814424b8981caea1f624131fb7353afcd2cd2" );
4881 
4882  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4883  if( 0 == 0 )
4884  {
4885  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
4886  hexify( dst_str, output, pt_len );
4887  hexify( tag_str, tag_output, tag_len );
4888 
4889  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4890  fct_chk( strcmp( (char *) tag_str, "cfb6d9bccf0378fabae08fd230edc1" ) == 0 );
4891  }
4892  }
4893  FCT_TEST_END();
4894 
4895 
4896  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024112_0)
4897  {
4898  unsigned char key_str[128];
4899  unsigned char src_str[128];
4900  unsigned char dst_str[257];
4901  unsigned char iv_str[128];
4902  unsigned char add_str[128];
4903  unsigned char tag_str[128];
4904  unsigned char output[128];
4905  unsigned char tag_output[16];
4906  gcm_context ctx;
4907  unsigned int key_len;
4908  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
4909 
4910  memset(key_str, 0x00, 128);
4911  memset(src_str, 0x00, 128);
4912  memset(dst_str, 0x00, 257);
4913  memset(iv_str, 0x00, 128);
4914  memset(add_str, 0x00, 128);
4915  memset(tag_str, 0x00, 128);
4916  memset(output, 0x00, 128);
4917  memset(tag_output, 0x00, 16);
4918 
4919  key_len = unhexify( key_str, "8c291f0ad78908377039f59591d0e305bdc915a3e5bfb0b4364e1af9946339c0" );
4920  pt_len = unhexify( src_str, "" );
4921  iv_len = unhexify( iv_str, "a9830d5663418add5f3c0b1140967b06" );
4922  add_len = unhexify( add_str, "e43c04e1f7304c1d83235120e24429af8dc29dc94399474d06047fd09d61ddc682684776c81ef08d97f06db6e4cfb02daea728ec6ac637e1ecfdb5d48f0440d8d8ffee43146f58a396e5151701b0d61d5f713b2816d3f56d6ee19f038ccc36493d9ad1809a49aa5798e181679d82cba22b0b4e064f56af5ec05c012b132bda87" );
4923 
4924  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4925  if( 0 == 0 )
4926  {
4927  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
4928  hexify( dst_str, output, pt_len );
4929  hexify( tag_str, tag_output, tag_len );
4930 
4931  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4932  fct_chk( strcmp( (char *) tag_str, "275480889efe55c4b9a08cef720b" ) == 0 );
4933  }
4934  }
4935  FCT_TEST_END();
4936 
4937 
4938  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024112_1)
4939  {
4940  unsigned char key_str[128];
4941  unsigned char src_str[128];
4942  unsigned char dst_str[257];
4943  unsigned char iv_str[128];
4944  unsigned char add_str[128];
4945  unsigned char tag_str[128];
4946  unsigned char output[128];
4947  unsigned char tag_output[16];
4948  gcm_context ctx;
4949  unsigned int key_len;
4950  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
4951 
4952  memset(key_str, 0x00, 128);
4953  memset(src_str, 0x00, 128);
4954  memset(dst_str, 0x00, 257);
4955  memset(iv_str, 0x00, 128);
4956  memset(add_str, 0x00, 128);
4957  memset(tag_str, 0x00, 128);
4958  memset(output, 0x00, 128);
4959  memset(tag_output, 0x00, 16);
4960 
4961  key_len = unhexify( key_str, "96c77c11a3336a41b61ffdc1724a80735bbe91dd4c741fdbcc36e21c53335852" );
4962  pt_len = unhexify( src_str, "" );
4963  iv_len = unhexify( iv_str, "655502d70119326405d8cc0a2c7a572c" );
4964  add_len = unhexify( add_str, "c01034fc6b7708128fbf4d6ffa4b4b280a1493b9e1dd07079f509479b365f55ae9290689f1c4bdfa439344e3abb17f3fd3d5e2f8b317517747714a82f0a9ace04938591d3ade6d6095491a440322d347e8634008cc4fd8add7c1c4764afdb2b098b3f5604e449e8049a46b6192647d19cf88fa5ed1abab7f313b4285560cba44" );
4965 
4966  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
4967  if( 0 == 0 )
4968  {
4969  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
4970  hexify( dst_str, output, pt_len );
4971  hexify( tag_str, tag_output, tag_len );
4972 
4973  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
4974  fct_chk( strcmp( (char *) tag_str, "b4d581464c4bb23433699c418ddc" ) == 0 );
4975  }
4976  }
4977  FCT_TEST_END();
4978 
4979 
4980  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024112_2)
4981  {
4982  unsigned char key_str[128];
4983  unsigned char src_str[128];
4984  unsigned char dst_str[257];
4985  unsigned char iv_str[128];
4986  unsigned char add_str[128];
4987  unsigned char tag_str[128];
4988  unsigned char output[128];
4989  unsigned char tag_output[16];
4990  gcm_context ctx;
4991  unsigned int key_len;
4992  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
4993 
4994  memset(key_str, 0x00, 128);
4995  memset(src_str, 0x00, 128);
4996  memset(dst_str, 0x00, 257);
4997  memset(iv_str, 0x00, 128);
4998  memset(add_str, 0x00, 128);
4999  memset(tag_str, 0x00, 128);
5000  memset(output, 0x00, 128);
5001  memset(tag_output, 0x00, 16);
5002 
5003  key_len = unhexify( key_str, "e2a3957393669278f052ff2df4e658e17f2fe32811e32b3f62a31a3938930764" );
5004  pt_len = unhexify( src_str, "" );
5005  iv_len = unhexify( iv_str, "a6f5a1f1f1ac77a1cb010d2dd4325cbe" );
5006  add_len = unhexify( add_str, "ce9c268429ca9c35c958ca3e81935ec60166aea0be15975baf69103251efafd54cbcc0bed76a8b44a5b947199cd3c2dee6878dd14a5a491a4a3d45788405d0129354e59c047b5367f1158bcf4e066a276951d2586bafc3c11f8a982ca7c3ba4677a938498bd51171552ea032fe1bd85cfeaeb87e87168f7a28e979b08358f841" );
5007 
5008  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5009  if( 0 == 0 )
5010  {
5011  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
5012  hexify( dst_str, output, pt_len );
5013  hexify( tag_str, tag_output, tag_len );
5014 
5015  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
5016  fct_chk( strcmp( (char *) tag_str, "cd5986df8e9761d52cb578e96b1b" ) == 0 );
5017  }
5018  }
5019  FCT_TEST_END();
5020 
5021 
5022  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024104_0)
5023  {
5024  unsigned char key_str[128];
5025  unsigned char src_str[128];
5026  unsigned char dst_str[257];
5027  unsigned char iv_str[128];
5028  unsigned char add_str[128];
5029  unsigned char tag_str[128];
5030  unsigned char output[128];
5031  unsigned char tag_output[16];
5032  gcm_context ctx;
5033  unsigned int key_len;
5034  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
5035 
5036  memset(key_str, 0x00, 128);
5037  memset(src_str, 0x00, 128);
5038  memset(dst_str, 0x00, 257);
5039  memset(iv_str, 0x00, 128);
5040  memset(add_str, 0x00, 128);
5041  memset(tag_str, 0x00, 128);
5042  memset(output, 0x00, 128);
5043  memset(tag_output, 0x00, 16);
5044 
5045  key_len = unhexify( key_str, "2b17652f7f04073afe9d9eb8b2615c7550968b9776b139fcc4f9b0300912cbdb" );
5046  pt_len = unhexify( src_str, "" );
5047  iv_len = unhexify( iv_str, "9a8ac23ea74b292b7386138666a0fb60" );
5048  add_len = unhexify( add_str, "2732107241e6136f1dd28d233373079d75d6ac13828ae7afc751b6f9c57e77268c52ae91f4ab3016af2764597994573cd6b41f72e21b60ffbb3aafc9487ac19d0ffe8db2ae2c7505ae5963b032d1ee1bffb4c5bd88bb0c9a350ba26ee3eb8dc0a157955333e4f28c5ec7349c39229dff9f440da72909f2870aea873a76545ee8" );
5049 
5050  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5051  if( 0 == 0 )
5052  {
5053  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
5054  hexify( dst_str, output, pt_len );
5055  hexify( tag_str, tag_output, tag_len );
5056 
5057  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
5058  fct_chk( strcmp( (char *) tag_str, "f7b94229439088142619a1a6bc" ) == 0 );
5059  }
5060  }
5061  FCT_TEST_END();
5062 
5063 
5064  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024104_1)
5065  {
5066  unsigned char key_str[128];
5067  unsigned char src_str[128];
5068  unsigned char dst_str[257];
5069  unsigned char iv_str[128];
5070  unsigned char add_str[128];
5071  unsigned char tag_str[128];
5072  unsigned char output[128];
5073  unsigned char tag_output[16];
5074  gcm_context ctx;
5075  unsigned int key_len;
5076  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
5077 
5078  memset(key_str, 0x00, 128);
5079  memset(src_str, 0x00, 128);
5080  memset(dst_str, 0x00, 257);
5081  memset(iv_str, 0x00, 128);
5082  memset(add_str, 0x00, 128);
5083  memset(tag_str, 0x00, 128);
5084  memset(output, 0x00, 128);
5085  memset(tag_output, 0x00, 16);
5086 
5087  key_len = unhexify( key_str, "16fe502e20d6473ed9a27569b63a768ecd428738904cf0b337df510775804619" );
5088  pt_len = unhexify( src_str, "" );
5089  iv_len = unhexify( iv_str, "431a8d78b91414737e7c6188328a6d37" );
5090  add_len = unhexify( add_str, "934bcacbac10ea4ff6ee94b17bd7379b88489fbf123bf496c78c9b6b02ee97dd62eedd05b8f44f4912764920129e711701628991a0009ebc7017a1a19b177ec9bc3b0f280eeefadfa310708dfe214428a184147b4523e66f2d62630d4a12fd3e366d27c3b7d1566553c9b434ed193db083160da1f241de190bcbd36f435e30f4" );
5091 
5092  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5093  if( 0 == 0 )
5094  {
5095  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
5096  hexify( dst_str, output, pt_len );
5097  hexify( tag_str, tag_output, tag_len );
5098 
5099  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
5100  fct_chk( strcmp( (char *) tag_str, "1dd3e6d610f359cc4e98d36244" ) == 0 );
5101  }
5102  }
5103  FCT_TEST_END();
5104 
5105 
5106  FCT_TEST_BGN(gcm_nist_validation_aes_25612801024104_2)
5107  {
5108  unsigned char key_str[128];
5109  unsigned char src_str[128];
5110  unsigned char dst_str[257];
5111  unsigned char iv_str[128];
5112  unsigned char add_str[128];
5113  unsigned char tag_str[128];
5114  unsigned char output[128];
5115  unsigned char tag_output[16];
5116  gcm_context ctx;
5117  unsigned int key_len;
5118  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
5119 
5120  memset(key_str, 0x00, 128);
5121  memset(src_str, 0x00, 128);
5122  memset(dst_str, 0x00, 257);
5123  memset(iv_str, 0x00, 128);
5124  memset(add_str, 0x00, 128);
5125  memset(tag_str, 0x00, 128);
5126  memset(output, 0x00, 128);
5127  memset(tag_output, 0x00, 16);
5128 
5129  key_len = unhexify( key_str, "ccc545fd330cf17e27d75582db28807ec972b897f812d6ed4726d2a18daac76a" );
5130  pt_len = unhexify( src_str, "" );
5131  iv_len = unhexify( iv_str, "caf2f56584a59c42a51fdbfe4ad78f3c" );
5132  add_len = unhexify( add_str, "e85ae6b27778893f36f130694af0b40f62a05aa386b30fc415e292761cab36fdc39bf5687a513e25ed149414f059e706d8a719b7165044fcbd48c773eae546380b8e667b56824e23685173ad9015a9449bc1cd0b767981efe09da43a07bf1aeee08ba05d387b8a00199e18c874fb3a91f77ba448c3bff971593f94747fce9cbd" );
5133 
5134  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5135  if( 0 == 0 )
5136  {
5137  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
5138  hexify( dst_str, output, pt_len );
5139  hexify( tag_str, tag_output, tag_len );
5140 
5141  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
5142  fct_chk( strcmp( (char *) tag_str, "5cf5c7ca6fbfee63854f3bcd15" ) == 0 );
5143  }
5144  }
5145  FCT_TEST_END();
5146 
5147 
5148  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102496_0)
5149  {
5150  unsigned char key_str[128];
5151  unsigned char src_str[128];
5152  unsigned char dst_str[257];
5153  unsigned char iv_str[128];
5154  unsigned char add_str[128];
5155  unsigned char tag_str[128];
5156  unsigned char output[128];
5157  unsigned char tag_output[16];
5158  gcm_context ctx;
5159  unsigned int key_len;
5160  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
5161 
5162  memset(key_str, 0x00, 128);
5163  memset(src_str, 0x00, 128);
5164  memset(dst_str, 0x00, 257);
5165  memset(iv_str, 0x00, 128);
5166  memset(add_str, 0x00, 128);
5167  memset(tag_str, 0x00, 128);
5168  memset(output, 0x00, 128);
5169  memset(tag_output, 0x00, 16);
5170 
5171  key_len = unhexify( key_str, "8340d604770c778ee83d0fdd5703b1fb304c3bffeb6f4c65e2dd0e12c19bddcc" );
5172  pt_len = unhexify( src_str, "" );
5173  iv_len = unhexify( iv_str, "c0a580465b1b2e8344f795a6578a5151" );
5174  add_len = unhexify( add_str, "799f228962ef87865dfcfa0addde7366de2e4aa78029dbc8d57d7e50fa7c74343458df3465103556a3bfc5ce217fbbb5b2835c9f76b70240b40fd605bcfa6b790d5985a8ba54354e0625263c628e8746c451504fc58a179f90f77f2b293d8dbf5582b031082025c806e60143da9ebb6133ac8367376d0572b32569ee799540ae" );
5175 
5176  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5177  if( 0 == 0 )
5178  {
5179  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
5180  hexify( dst_str, output, pt_len );
5181  hexify( tag_str, tag_output, tag_len );
5182 
5183  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
5184  fct_chk( strcmp( (char *) tag_str, "318f56bd0f3832d043ef700a" ) == 0 );
5185  }
5186  }
5187  FCT_TEST_END();
5188 
5189 
5190  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102496_1)
5191  {
5192  unsigned char key_str[128];
5193  unsigned char src_str[128];
5194  unsigned char dst_str[257];
5195  unsigned char iv_str[128];
5196  unsigned char add_str[128];
5197  unsigned char tag_str[128];
5198  unsigned char output[128];
5199  unsigned char tag_output[16];
5200  gcm_context ctx;
5201  unsigned int key_len;
5202  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
5203 
5204  memset(key_str, 0x00, 128);
5205  memset(src_str, 0x00, 128);
5206  memset(dst_str, 0x00, 257);
5207  memset(iv_str, 0x00, 128);
5208  memset(add_str, 0x00, 128);
5209  memset(tag_str, 0x00, 128);
5210  memset(output, 0x00, 128);
5211  memset(tag_output, 0x00, 16);
5212 
5213  key_len = unhexify( key_str, "74de45262fe09e12c9ee7100030352112a6532d1874cc6792b4da6950677eb2a" );
5214  pt_len = unhexify( src_str, "" );
5215  iv_len = unhexify( iv_str, "9f7fc7367f9afdb67fd1afffac058e2a" );
5216  add_len = unhexify( add_str, "289ac6f5beecbbcbde5cb3b0fdf4a27ba237fca33719f774ed33a5fd35d7e49f76d3e88c53fd35561655c35469f3eefb5b2f776ff2799aab346522d3f003154e53f4ef075f016aaa500c76870e6659a5f9af197c9a8f5b9e0416ed894e868463cc4386a7442bb0c089a9ab84981313c01fec4fc0ba35829b3cf49c6447f56a4b" );
5217 
5218  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5219  if( 0 == 0 )
5220  {
5221  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
5222  hexify( dst_str, output, pt_len );
5223  hexify( tag_str, tag_output, tag_len );
5224 
5225  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
5226  fct_chk( strcmp( (char *) tag_str, "bc1b8b94ff478d9e197551cd" ) == 0 );
5227  }
5228  }
5229  FCT_TEST_END();
5230 
5231 
5232  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102496_2)
5233  {
5234  unsigned char key_str[128];
5235  unsigned char src_str[128];
5236  unsigned char dst_str[257];
5237  unsigned char iv_str[128];
5238  unsigned char add_str[128];
5239  unsigned char tag_str[128];
5240  unsigned char output[128];
5241  unsigned char tag_output[16];
5242  gcm_context ctx;
5243  unsigned int key_len;
5244  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
5245 
5246  memset(key_str, 0x00, 128);
5247  memset(src_str, 0x00, 128);
5248  memset(dst_str, 0x00, 257);
5249  memset(iv_str, 0x00, 128);
5250  memset(add_str, 0x00, 128);
5251  memset(tag_str, 0x00, 128);
5252  memset(output, 0x00, 128);
5253  memset(tag_output, 0x00, 16);
5254 
5255  key_len = unhexify( key_str, "441ec8afce630805d0ce98b200e59f5656a5ce19e5ef58241e6ef16cac7646b9" );
5256  pt_len = unhexify( src_str, "" );
5257  iv_len = unhexify( iv_str, "a1cbeffaf55708c375dcfeb496b21f4e" );
5258  add_len = unhexify( add_str, "5a6ba5d3f5a7a4b317c6c716564c648f0e6bc6b0f9a4c27affca6d5af04b7b13d989b7a2cb42ce8eedd710be70c04c0e40977ca1c2f536aa70677038e737064fb0e23d3dd48bc00ebdd7f988f57141e164e3c18db81e9565a62e28c73770666ff3bfd725eebd98946fed02f31d500b0b7ab4dafeb14e8cc85731a87f50d95fae" );
5259 
5260  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5261  if( 0 == 0 )
5262  {
5263  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
5264  hexify( dst_str, output, pt_len );
5265  hexify( tag_str, tag_output, tag_len );
5266 
5267  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
5268  fct_chk( strcmp( (char *) tag_str, "aa4bb3d555dabaaeb4d81fcd" ) == 0 );
5269  }
5270  }
5271  FCT_TEST_END();
5272 
5273 
5274  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102464_0)
5275  {
5276  unsigned char key_str[128];
5277  unsigned char src_str[128];
5278  unsigned char dst_str[257];
5279  unsigned char iv_str[128];
5280  unsigned char add_str[128];
5281  unsigned char tag_str[128];
5282  unsigned char output[128];
5283  unsigned char tag_output[16];
5284  gcm_context ctx;
5285  unsigned int key_len;
5286  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
5287 
5288  memset(key_str, 0x00, 128);
5289  memset(src_str, 0x00, 128);
5290  memset(dst_str, 0x00, 257);
5291  memset(iv_str, 0x00, 128);
5292  memset(add_str, 0x00, 128);
5293  memset(tag_str, 0x00, 128);
5294  memset(output, 0x00, 128);
5295  memset(tag_output, 0x00, 16);
5296 
5297  key_len = unhexify( key_str, "d643111c973ffb7f56bfbf394eedac54be2c556963b181cf661ba144f7893a62" );
5298  pt_len = unhexify( src_str, "" );
5299  iv_len = unhexify( iv_str, "4575b00b9af2195a0cc75855d396e4e8" );
5300  add_len = unhexify( add_str, "b2c53efe59c84c651979bcc1bc76b0bbf5e52b5c3115849abdbc469a063e2b1699bd292e5fcb3476e849c9edbe6ea14c2ab948ed7d21a21f69406621d3d412b043eaf813be722d92739a33a361ed8081c0eb00400c3c7d4e329f5ba4f7b75d534500f42f178048cf2e95b768ffed79c350f2ff72cb355abdb30af0a1363c0b4a" );
5301 
5302  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5303  if( 0 == 0 )
5304  {
5305  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
5306  hexify( dst_str, output, pt_len );
5307  hexify( tag_str, tag_output, tag_len );
5308 
5309  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
5310  fct_chk( strcmp( (char *) tag_str, "9d1d182630d7aeee" ) == 0 );
5311  }
5312  }
5313  FCT_TEST_END();
5314 
5315 
5316  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102464_1)
5317  {
5318  unsigned char key_str[128];
5319  unsigned char src_str[128];
5320  unsigned char dst_str[257];
5321  unsigned char iv_str[128];
5322  unsigned char add_str[128];
5323  unsigned char tag_str[128];
5324  unsigned char output[128];
5325  unsigned char tag_output[16];
5326  gcm_context ctx;
5327  unsigned int key_len;
5328  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
5329 
5330  memset(key_str, 0x00, 128);
5331  memset(src_str, 0x00, 128);
5332  memset(dst_str, 0x00, 257);
5333  memset(iv_str, 0x00, 128);
5334  memset(add_str, 0x00, 128);
5335  memset(tag_str, 0x00, 128);
5336  memset(output, 0x00, 128);
5337  memset(tag_output, 0x00, 16);
5338 
5339  key_len = unhexify( key_str, "91301ee0ca694ae6971ee705f53c7ec467f4c88257d6466f6f8159a8970384b9" );
5340  pt_len = unhexify( src_str, "" );
5341  iv_len = unhexify( iv_str, "345fb57e88124a414828730a85f57871" );
5342  add_len = unhexify( add_str, "c13623824a204385f352388098f5e2db23426f00a73c60c1bf1047ce2c7cdf7f7cc8475781fe7075d1226ad18871e12f0156f35e6ce7032efe3bade1c807f9eedc720fff7a27a2f4690f904be9c99b54a65509eab60e97c4283596eeefa2b2517e95de7620382e3f780efa1dbf5d3908373adfe784a4faf298681e171bade4b3" );
5343 
5344  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5345  if( 0 == 0 )
5346  {
5347  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
5348  hexify( dst_str, output, pt_len );
5349  hexify( tag_str, tag_output, tag_len );
5350 
5351  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
5352  fct_chk( strcmp( (char *) tag_str, "325d08c5b96068c1" ) == 0 );
5353  }
5354  }
5355  FCT_TEST_END();
5356 
5357 
5358  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102464_2)
5359  {
5360  unsigned char key_str[128];
5361  unsigned char src_str[128];
5362  unsigned char dst_str[257];
5363  unsigned char iv_str[128];
5364  unsigned char add_str[128];
5365  unsigned char tag_str[128];
5366  unsigned char output[128];
5367  unsigned char tag_output[16];
5368  gcm_context ctx;
5369  unsigned int key_len;
5370  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
5371 
5372  memset(key_str, 0x00, 128);
5373  memset(src_str, 0x00, 128);
5374  memset(dst_str, 0x00, 257);
5375  memset(iv_str, 0x00, 128);
5376  memset(add_str, 0x00, 128);
5377  memset(tag_str, 0x00, 128);
5378  memset(output, 0x00, 128);
5379  memset(tag_output, 0x00, 16);
5380 
5381  key_len = unhexify( key_str, "b6ba5c11daed7f868da9bfd7754d555a147a1ffd98c940c1cd5d136680e05c10" );
5382  pt_len = unhexify( src_str, "" );
5383  iv_len = unhexify( iv_str, "b0c92b79d78547496d770678e1ce1552" );
5384  add_len = unhexify( add_str, "5b1ac8ff687f6fd2429dc90a8913f5826d143a16a372cca787845cea86d9b4778708bc0aa538f98e1031850f7c1d97fb64fe29adce6e1d51ca7f5203fc0358fe0bc54347e777dddfe04e3d7a66a1d1e2bdb8b8929e2100daf073845db5dc0b243819754c4c08f4fc3631d1cbd79ac7604746d677ff035930fcd6bd652e7864db" );
5385 
5386  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5387  if( 0 == 0 )
5388  {
5389  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
5390  hexify( dst_str, output, pt_len );
5391  hexify( tag_str, tag_output, tag_len );
5392 
5393  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
5394  fct_chk( strcmp( (char *) tag_str, "b1819b6f2d788616" ) == 0 );
5395  }
5396  }
5397  FCT_TEST_END();
5398 
5399 
5400  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102432_0)
5401  {
5402  unsigned char key_str[128];
5403  unsigned char src_str[128];
5404  unsigned char dst_str[257];
5405  unsigned char iv_str[128];
5406  unsigned char add_str[128];
5407  unsigned char tag_str[128];
5408  unsigned char output[128];
5409  unsigned char tag_output[16];
5410  gcm_context ctx;
5411  unsigned int key_len;
5412  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
5413 
5414  memset(key_str, 0x00, 128);
5415  memset(src_str, 0x00, 128);
5416  memset(dst_str, 0x00, 257);
5417  memset(iv_str, 0x00, 128);
5418  memset(add_str, 0x00, 128);
5419  memset(tag_str, 0x00, 128);
5420  memset(output, 0x00, 128);
5421  memset(tag_output, 0x00, 16);
5422 
5423  key_len = unhexify( key_str, "5fcae1759209e784dae5a8278b267c414a03ce7c803df1db7815b2910d10ce19" );
5424  pt_len = unhexify( src_str, "" );
5425  iv_len = unhexify( iv_str, "24c5c349b3effebfd076c88a591b8301" );
5426  add_len = unhexify( add_str, "ca2778e39fffce7fbe8f912e69d55931848dd5ab0d1bd32e7b94af453251a47f5408ebacd7b50ddd1103fab1c72acc0a02f404c5661d8450746d781e2c0861b6974ade9ee2515da88b470f16d5f06007f35ce97cfc17fd015e438af39ca6127db240babe9c42ed5717715f14e72f0ef6ff4ce512de95a179e60d6393e73f216a" );
5427 
5428  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5429  if( 0 == 0 )
5430  {
5431  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
5432  hexify( dst_str, output, pt_len );
5433  hexify( tag_str, tag_output, tag_len );
5434 
5435  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
5436  fct_chk( strcmp( (char *) tag_str, "8e59f30b" ) == 0 );
5437  }
5438  }
5439  FCT_TEST_END();
5440 
5441 
5442  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102432_1)
5443  {
5444  unsigned char key_str[128];
5445  unsigned char src_str[128];
5446  unsigned char dst_str[257];
5447  unsigned char iv_str[128];
5448  unsigned char add_str[128];
5449  unsigned char tag_str[128];
5450  unsigned char output[128];
5451  unsigned char tag_output[16];
5452  gcm_context ctx;
5453  unsigned int key_len;
5454  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
5455 
5456  memset(key_str, 0x00, 128);
5457  memset(src_str, 0x00, 128);
5458  memset(dst_str, 0x00, 257);
5459  memset(iv_str, 0x00, 128);
5460  memset(add_str, 0x00, 128);
5461  memset(tag_str, 0x00, 128);
5462  memset(output, 0x00, 128);
5463  memset(tag_output, 0x00, 16);
5464 
5465  key_len = unhexify( key_str, "8d71a70fd58125b0da8dddf8d23ddbe0bc44743753bdf259448d58aae54775a6" );
5466  pt_len = unhexify( src_str, "" );
5467  iv_len = unhexify( iv_str, "d15b02572dec98398ba9e68e1a463738" );
5468  add_len = unhexify( add_str, "81313be1eda9f27e01b30877ca90e825f55ef60b15548c45c786c44b024e7198f333be7ddd2c3f593a9b77b68e6a7ac4cfc015aeec66f4823d9be7152f02a533f375554309a4db0fea8e76255144458e488fd19106d9a9614e828ae306fe82af89e7981369b2259c49bae77f8ec2b1f169ef0449ad083d11907234b72ed2e464" );
5469 
5470  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5471  if( 0 == 0 )
5472  {
5473  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
5474  hexify( dst_str, output, pt_len );
5475  hexify( tag_str, tag_output, tag_len );
5476 
5477  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
5478  fct_chk( strcmp( (char *) tag_str, "99df1b8d" ) == 0 );
5479  }
5480  }
5481  FCT_TEST_END();
5482 
5483 
5484  FCT_TEST_BGN(gcm_nist_validation_aes_2561280102432_2)
5485  {
5486  unsigned char key_str[128];
5487  unsigned char src_str[128];
5488  unsigned char dst_str[257];
5489  unsigned char iv_str[128];
5490  unsigned char add_str[128];
5491  unsigned char tag_str[128];
5492  unsigned char output[128];
5493  unsigned char tag_output[16];
5494  gcm_context ctx;
5495  unsigned int key_len;
5496  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
5497 
5498  memset(key_str, 0x00, 128);
5499  memset(src_str, 0x00, 128);
5500  memset(dst_str, 0x00, 257);
5501  memset(iv_str, 0x00, 128);
5502  memset(add_str, 0x00, 128);
5503  memset(tag_str, 0x00, 128);
5504  memset(output, 0x00, 128);
5505  memset(tag_output, 0x00, 16);
5506 
5507  key_len = unhexify( key_str, "b52398c7c75e1b146cc9998eb203159925cf6fc0b1c993ba46528e2f8e8087f0" );
5508  pt_len = unhexify( src_str, "" );
5509  iv_len = unhexify( iv_str, "afc9a60ab8448b77fb05e8410d0a26e8" );
5510  add_len = unhexify( add_str, "770b3782f0e3a19d7d6bb98fa3eb0b916928a2970701c0f4a372a0ecd63499444ae02fd269ddb7d92e11a9e11d0e0b8bc60096a4be79a1e063174b710c5d739d8d05ab5c8ba119ff40843cf8c5dc4e1bd6fcad8389de3b606284c902422108d85eb3589524776641b175946c9ade1465e0d1064c5ae073be90e3261878a9af98" );
5511 
5512  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5513  if( 0 == 0 )
5514  {
5515  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
5516  hexify( dst_str, output, pt_len );
5517  hexify( tag_str, tag_output, tag_len );
5518 
5519  fct_chk( strcmp( (char *) dst_str, "" ) == 0 );
5520  fct_chk( strcmp( (char *) tag_str, "32d6b756" ) == 0 );
5521  }
5522  }
5523  FCT_TEST_END();
5524 
5525 
5526  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240128_0)
5527  {
5528  unsigned char key_str[128];
5529  unsigned char src_str[128];
5530  unsigned char dst_str[257];
5531  unsigned char iv_str[128];
5532  unsigned char add_str[128];
5533  unsigned char tag_str[128];
5534  unsigned char output[128];
5535  unsigned char tag_output[16];
5536  gcm_context ctx;
5537  unsigned int key_len;
5538  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
5539 
5540  memset(key_str, 0x00, 128);
5541  memset(src_str, 0x00, 128);
5542  memset(dst_str, 0x00, 257);
5543  memset(iv_str, 0x00, 128);
5544  memset(add_str, 0x00, 128);
5545  memset(tag_str, 0x00, 128);
5546  memset(output, 0x00, 128);
5547  memset(tag_output, 0x00, 16);
5548 
5549  key_len = unhexify( key_str, "6793869513ac886ed66e5897bcfa263877d8465fc762b1ed929ba3d08615fdd5" );
5550  pt_len = unhexify( src_str, "cda45e29f487f21b820e1af2c8e6d34a8bdf3f72d564a4625a6e06f9bae1c2eac3bbd5c5958fd75cf389a1a31391211745029dcd4cb2575f40ab04710a909b88c2d430cdee279f54cf7c0ff6638d1e0e631f526ee198cfd6e5cdf73d1a11b69de01d640f385fd829616cd2c0e78f09b5f64012e42dee9eb0245b72aba1404e0c" );
5551  iv_len = unhexify( iv_str, "a43de15dae25c606da1e7a4152f0df71" );
5552  add_len = unhexify( add_str, "" );
5553 
5554  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5555  if( 0 == 0 )
5556  {
5557  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
5558  hexify( dst_str, output, pt_len );
5559  hexify( tag_str, tag_output, tag_len );
5560 
5561  fct_chk( strcmp( (char *) dst_str, "385834c853772af70675b6be2d5087df84f88b6a303ea594a170e6dd0398ae270fcec61661ca373f4653d8dcc9e71767568c0fb03023b163bdc9ae8a08ea858cbb03b8182b4674147cb35ffda14a2f50ed9eb48d5351f00eb2fa433fdfed6f94833bcf656a7e350eb978a0aaf7a91674145f28f64693197a116b21328e273dca" ) == 0 );
5562  fct_chk( strcmp( (char *) tag_str, "159ffdb05615941e11f0db46ac8f23de" ) == 0 );
5563  }
5564  }
5565  FCT_TEST_END();
5566 
5567 
5568  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240128_1)
5569  {
5570  unsigned char key_str[128];
5571  unsigned char src_str[128];
5572  unsigned char dst_str[257];
5573  unsigned char iv_str[128];
5574  unsigned char add_str[128];
5575  unsigned char tag_str[128];
5576  unsigned char output[128];
5577  unsigned char tag_output[16];
5578  gcm_context ctx;
5579  unsigned int key_len;
5580  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
5581 
5582  memset(key_str, 0x00, 128);
5583  memset(src_str, 0x00, 128);
5584  memset(dst_str, 0x00, 257);
5585  memset(iv_str, 0x00, 128);
5586  memset(add_str, 0x00, 128);
5587  memset(tag_str, 0x00, 128);
5588  memset(output, 0x00, 128);
5589  memset(tag_output, 0x00, 16);
5590 
5591  key_len = unhexify( key_str, "9f77c141b234907b38fb45f1b3602f3c29de1ed839bb7ba51f6192aa8baaa287" );
5592  pt_len = unhexify( src_str, "96dcb74a78e99676a71673e3c9f94c34b34dad2748a6e42cc70ea50e41ef8b86b5992295d2cbc8d621fefce09e8948de7e696b9788377d598796afd002a82b628d9890db78359e1edc075cbc0d3f11d544bfdf5c8a838390cb856735942dff260189c00accfabf720e5fef1d9b7131a6b2b769f67374602d1a7ed9b899b2c398" );
5593  iv_len = unhexify( iv_str, "1b49005788148665cef20d8dcde41889" );
5594  add_len = unhexify( add_str, "" );
5595 
5596  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5597  if( 0 == 0 )
5598  {
5599  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
5600  hexify( dst_str, output, pt_len );
5601  hexify( tag_str, tag_output, tag_len );
5602 
5603  fct_chk( strcmp( (char *) dst_str, "b4ca59caaa94749317789b92257f2ef1dd3d9b1f4ee9540927a6ae7bf5bb0b348fcf25ba8ddda79a89d3174ac1713421291910c8926cfbb4ec1e59be7dd50e816ff586f165c605371ee6077ba4ac0ce10499f9a2a44866ce6319fce22652226164cc0a813c3147c4461dd0410e3701d4647d5a003090082e367cb9249cf1be47" ) == 0 );
5604  fct_chk( strcmp( (char *) tag_str, "8048ae0c35a656fcaa2f4c1b6be250e2" ) == 0 );
5605  }
5606  }
5607  FCT_TEST_END();
5608 
5609 
5610  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240128_2)
5611  {
5612  unsigned char key_str[128];
5613  unsigned char src_str[128];
5614  unsigned char dst_str[257];
5615  unsigned char iv_str[128];
5616  unsigned char add_str[128];
5617  unsigned char tag_str[128];
5618  unsigned char output[128];
5619  unsigned char tag_output[16];
5620  gcm_context ctx;
5621  unsigned int key_len;
5622  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
5623 
5624  memset(key_str, 0x00, 128);
5625  memset(src_str, 0x00, 128);
5626  memset(dst_str, 0x00, 257);
5627  memset(iv_str, 0x00, 128);
5628  memset(add_str, 0x00, 128);
5629  memset(tag_str, 0x00, 128);
5630  memset(output, 0x00, 128);
5631  memset(tag_output, 0x00, 16);
5632 
5633  key_len = unhexify( key_str, "2419fd9dbe58655122ac1022956a023446b7f4756163769fc1b99eaf8fba1474" );
5634  pt_len = unhexify( src_str, "93bc33dc647c7321152b12303f38937bd191ab3ce3b3a43a29f6853b33e415667d97192fcab2d1baa017042b301d03bae2f657505cc58e3aa4bd849d1ce85ede0e192a373a3894c41c54edbae29a209e16c87c81445d43968595297b50b55659f8b92d7282a2b3ca85e4b5d4ac4ff5062635103f2c7806fcc7378d5c2013be72" );
5635  iv_len = unhexify( iv_str, "94ef13dbfe9f362da35209f6d62b38a4" );
5636  add_len = unhexify( add_str, "" );
5637 
5638  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5639  if( 0 == 0 )
5640  {
5641  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
5642  hexify( dst_str, output, pt_len );
5643  hexify( tag_str, tag_output, tag_len );
5644 
5645  fct_chk( strcmp( (char *) dst_str, "3db23c161cf352ba267dab6a55f611eb5fff78a75288779a167cd0e4db6e75d21f11f4ff2928abcb1b46d82c2a0b1f647c60da61f9a72565f629b06a7b3fe96e4141a6886436859f610724bbe43fb99fac9b78b1e0138e2d57ce5fcfac1599bdba5701cb424535fad9ac482ab381eadca074e7376101b4b436f9c43ed760a0a6" ) == 0 );
5646  fct_chk( strcmp( (char *) tag_str, "ecd4a7370096dc781c3eb3f7e5985ef1" ) == 0 );
5647  }
5648  }
5649  FCT_TEST_END();
5650 
5651 
5652  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240120_0)
5653  {
5654  unsigned char key_str[128];
5655  unsigned char src_str[128];
5656  unsigned char dst_str[257];
5657  unsigned char iv_str[128];
5658  unsigned char add_str[128];
5659  unsigned char tag_str[128];
5660  unsigned char output[128];
5661  unsigned char tag_output[16];
5662  gcm_context ctx;
5663  unsigned int key_len;
5664  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
5665 
5666  memset(key_str, 0x00, 128);
5667  memset(src_str, 0x00, 128);
5668  memset(dst_str, 0x00, 257);
5669  memset(iv_str, 0x00, 128);
5670  memset(add_str, 0x00, 128);
5671  memset(tag_str, 0x00, 128);
5672  memset(output, 0x00, 128);
5673  memset(tag_output, 0x00, 16);
5674 
5675  key_len = unhexify( key_str, "08e11a8b4b24e63060c5002713725bb5b4a412f1d76eac13989738ce94e19642" );
5676  pt_len = unhexify( src_str, "d5598f4e37274f3b617aa4f9cf6b8547b4eb1e0eac79f6eedd6cd5364f8891f66b8d0cb09f54777d461bbf92d6fd74b3fac412b77f2c48e1024cf09b83c1e71bb86f0a20f82d296883ffee62a4a192b184bc6d7ba0448c1519310c83b18c00e71153137afad14f096b43d454f205ba6b6c2ec162aa992cebf50735dd9bb37c7c" );
5677  iv_len = unhexify( iv_str, "c6f1e6a39cabda1089048b536e39cf67" );
5678  add_len = unhexify( add_str, "" );
5679 
5680  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5681  if( 0 == 0 )
5682  {
5683  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
5684  hexify( dst_str, output, pt_len );
5685  hexify( tag_str, tag_output, tag_len );
5686 
5687  fct_chk( strcmp( (char *) dst_str, "1fdaf0156456b6b2a68d66091bf2260792748acf3e7bbb7906af8e0df3b569a7c03ee3a48bdfdff7ccd52433d0bbe8c5fe30d93633bb9d591dfad7d81bf8efd4d4a3c5c0bf2ac9832f0a8687f16be640fcf9b19169c251f46b97167d95115acdee3d4443df416275f5597a52c17a4b8c4b723d4b35a7fd0b380fdebd44df8bd5" ) == 0 );
5688  fct_chk( strcmp( (char *) tag_str, "cb9f4d4610c67acfe612af5508bb8c" ) == 0 );
5689  }
5690  }
5691  FCT_TEST_END();
5692 
5693 
5694  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240120_1)
5695  {
5696  unsigned char key_str[128];
5697  unsigned char src_str[128];
5698  unsigned char dst_str[257];
5699  unsigned char iv_str[128];
5700  unsigned char add_str[128];
5701  unsigned char tag_str[128];
5702  unsigned char output[128];
5703  unsigned char tag_output[16];
5704  gcm_context ctx;
5705  unsigned int key_len;
5706  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
5707 
5708  memset(key_str, 0x00, 128);
5709  memset(src_str, 0x00, 128);
5710  memset(dst_str, 0x00, 257);
5711  memset(iv_str, 0x00, 128);
5712  memset(add_str, 0x00, 128);
5713  memset(tag_str, 0x00, 128);
5714  memset(output, 0x00, 128);
5715  memset(tag_output, 0x00, 16);
5716 
5717  key_len = unhexify( key_str, "da2dae0107c284ec2aaf6e7306959df1e92d3932b88954f119ab677c6b9dcdb5" );
5718  pt_len = unhexify( src_str, "277675044caf1713109d4d3abf50c6fb67dc67f7fa584fb1a41c833feead03177cf4b42edac139807ede16eb1d9bed27db741f9542d437781405608de18418c9f7269ab3fd88f6a922a31eab5a3b8b2aa75ee4315fcea80c4954ea6613b1360b1c7c6b6da815e3f6e50f72b7e69c3b6cb3d154855e3f83cbd1947eb54018155a" );
5719  iv_len = unhexify( iv_str, "2005f79d55b12e6dfbab7fedecc50e2d" );
5720  add_len = unhexify( add_str, "" );
5721 
5722  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5723  if( 0 == 0 )
5724  {
5725  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
5726  hexify( dst_str, output, pt_len );
5727  hexify( tag_str, tag_output, tag_len );
5728 
5729  fct_chk( strcmp( (char *) dst_str, "c2aaab524d1738b5244af642bbd16b32ba954e69ae51acc804a6b0f89f6cb77ba2db2b0e109cda6036786f9cec5587b01e306ee8b3d588748c61ad7fce1266165729d0153ee189746b107ce15ced667279a484294725e120dc1803d2c751784436ab8ff1d5a537628ee35742d1917dc51f8cb46c2d6b983bdec502e99b85e5b5" ) == 0 );
5730  fct_chk( strcmp( (char *) tag_str, "52b4d7f2cc44f0725ee903551f681d" ) == 0 );
5731  }
5732  }
5733  FCT_TEST_END();
5734 
5735 
5736  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240120_2)
5737  {
5738  unsigned char key_str[128];
5739  unsigned char src_str[128];
5740  unsigned char dst_str[257];
5741  unsigned char iv_str[128];
5742  unsigned char add_str[128];
5743  unsigned char tag_str[128];
5744  unsigned char output[128];
5745  unsigned char tag_output[16];
5746  gcm_context ctx;
5747  unsigned int key_len;
5748  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
5749 
5750  memset(key_str, 0x00, 128);
5751  memset(src_str, 0x00, 128);
5752  memset(dst_str, 0x00, 257);
5753  memset(iv_str, 0x00, 128);
5754  memset(add_str, 0x00, 128);
5755  memset(tag_str, 0x00, 128);
5756  memset(output, 0x00, 128);
5757  memset(tag_output, 0x00, 16);
5758 
5759  key_len = unhexify( key_str, "637807b3e472e2287b09d5a3ee62f791a416419ba35e11c49b24dbadc209f0ba" );
5760  pt_len = unhexify( src_str, "e91a0a7320329dabb0d0fd7f099a4d313724aeeebcffe6fcea5b00af27d258cf9774845d29aaf5dad634c6f087c3311b1c92775fda8df8820c91186da30dc79747be6ec6230f2c261063143f4fc89d94c7efc145e68bfdbd58fb14e856578ed57ee5b3cba2cc67dd6497f05d1570efa496b46f5bcbf82ff9c6a414f76fcf3f5c" );
5761  iv_len = unhexify( iv_str, "46909d8dba6c82b86c7a2aca3c9e71e0" );
5762  add_len = unhexify( add_str, "" );
5763 
5764  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5765  if( 0 == 0 )
5766  {
5767  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
5768  hexify( dst_str, output, pt_len );
5769  hexify( tag_str, tag_output, tag_len );
5770 
5771  fct_chk( strcmp( (char *) dst_str, "13b4ad9c51063a7f697f3fc68030144aee0aeef0b5a52c9d4920a7185b0452159cf13e64ca216ff16637d0946a75fb5da283fcd263dd7ef2c8f14cf75537742d1f0e48846fcdbf03bc343203f7c31cf61b36374033462a7b813f4dbe9386e57874591fde606fbc150d4916c339f1950b09b1911b1b9119c3ff4053e05910ffb2" ) == 0 );
5772  fct_chk( strcmp( (char *) tag_str, "6a5c83f807401d1a9a3a2688289f61" ) == 0 );
5773  }
5774  }
5775  FCT_TEST_END();
5776 
5777 
5778  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240112_0)
5779  {
5780  unsigned char key_str[128];
5781  unsigned char src_str[128];
5782  unsigned char dst_str[257];
5783  unsigned char iv_str[128];
5784  unsigned char add_str[128];
5785  unsigned char tag_str[128];
5786  unsigned char output[128];
5787  unsigned char tag_output[16];
5788  gcm_context ctx;
5789  unsigned int key_len;
5790  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
5791 
5792  memset(key_str, 0x00, 128);
5793  memset(src_str, 0x00, 128);
5794  memset(dst_str, 0x00, 257);
5795  memset(iv_str, 0x00, 128);
5796  memset(add_str, 0x00, 128);
5797  memset(tag_str, 0x00, 128);
5798  memset(output, 0x00, 128);
5799  memset(tag_output, 0x00, 16);
5800 
5801  key_len = unhexify( key_str, "33613dc6e029df0f3ab9ca66fa96cdeaa84c1261dd586723b1ce873545565f7a" );
5802  pt_len = unhexify( src_str, "775862b39c2a509afd3470a56891fbb79bdb7dacfdb9ac72ba4730cb936d364e1aed3c92c01a018cfcd7953f751003934c15bdfdf2826e9947ea8e521f55fd2a04c75156e4910f38932c9732eb3e60423e849d34c55e3fd00b48d83028e3b4f35686016126ff16c942ec859d3c3aa2ee6d322a92dc9fa9b0247423416f5a4b47" );
5803  iv_len = unhexify( iv_str, "59484fbc27cdbd917bb55f815f9faab6" );
5804  add_len = unhexify( add_str, "" );
5805 
5806  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5807  if( 0 == 0 )
5808  {
5809  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
5810  hexify( dst_str, output, pt_len );
5811  hexify( tag_str, tag_output, tag_len );
5812 
5813  fct_chk( strcmp( (char *) dst_str, "069f80826dbee03e6a3437e7c6d16eb6022bd14827b8e45bd440d9b1a8ddae09999388ba0b1be0a6bafdb96f26dad523a3592fa610d5091f68380f4c1c3fa9ef7a0796ab183e8a82c2bf1f76300f98ce983eab7a93ddb18f1c10534fdb61ace83cae37e225930ab870a46285e733788e907255ca391945d409d2e53dd8a28390" ) == 0 );
5814  fct_chk( strcmp( (char *) tag_str, "9f31f8f8459eb03dc3654caba5c2" ) == 0 );
5815  }
5816  }
5817  FCT_TEST_END();
5818 
5819 
5820  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240112_1)
5821  {
5822  unsigned char key_str[128];
5823  unsigned char src_str[128];
5824  unsigned char dst_str[257];
5825  unsigned char iv_str[128];
5826  unsigned char add_str[128];
5827  unsigned char tag_str[128];
5828  unsigned char output[128];
5829  unsigned char tag_output[16];
5830  gcm_context ctx;
5831  unsigned int key_len;
5832  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
5833 
5834  memset(key_str, 0x00, 128);
5835  memset(src_str, 0x00, 128);
5836  memset(dst_str, 0x00, 257);
5837  memset(iv_str, 0x00, 128);
5838  memset(add_str, 0x00, 128);
5839  memset(tag_str, 0x00, 128);
5840  memset(output, 0x00, 128);
5841  memset(tag_output, 0x00, 16);
5842 
5843  key_len = unhexify( key_str, "75d8132f70ef3f2d8946d296c83014683eb2a4a58b555c0f48e4bfa5774d6672" );
5844  pt_len = unhexify( src_str, "a5be88fd43dc761838f3a9c7d62923c38414fa61b3678313cbc8fa9c2e5effb6cad7d5be5f39a71a28ff327b68a69f7e6a6bcb90eccacaf3a8659aeb905dd3e38efe57f2bd0d19daacae238baa01a7051084da6598fc5a3783a18decefc8efc8d46c7b1887f87d6d70c909df49340bcc680832faac3dd23cab5bcd80553dd485" );
5845  iv_len = unhexify( iv_str, "5ff41f3e75c25cedda1b08a41b89c4b4" );
5846  add_len = unhexify( add_str, "" );
5847 
5848  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5849  if( 0 == 0 )
5850  {
5851  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
5852  hexify( dst_str, output, pt_len );
5853  hexify( tag_str, tag_output, tag_len );
5854 
5855  fct_chk( strcmp( (char *) dst_str, "959396b86913337f2b1fb19767b787c18f00661c5d601bc65e884e15ac8043081459e889453e906ee267cb5d04fbaf250144a56c820eca34469967c73daf50796184ecf74f3c054bfa63bdd0c32425a8e10546ac342bb8e38a186e42a403cb80110aefd5f2d0bcdd353daa4430b8e7ec2134925c454745e2f708cd0b90d9d672" ) == 0 );
5856  fct_chk( strcmp( (char *) tag_str, "ca0889a0eb12995079cf9ba77019" ) == 0 );
5857  }
5858  }
5859  FCT_TEST_END();
5860 
5861 
5862  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240112_2)
5863  {
5864  unsigned char key_str[128];
5865  unsigned char src_str[128];
5866  unsigned char dst_str[257];
5867  unsigned char iv_str[128];
5868  unsigned char add_str[128];
5869  unsigned char tag_str[128];
5870  unsigned char output[128];
5871  unsigned char tag_output[16];
5872  gcm_context ctx;
5873  unsigned int key_len;
5874  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
5875 
5876  memset(key_str, 0x00, 128);
5877  memset(src_str, 0x00, 128);
5878  memset(dst_str, 0x00, 257);
5879  memset(iv_str, 0x00, 128);
5880  memset(add_str, 0x00, 128);
5881  memset(tag_str, 0x00, 128);
5882  memset(output, 0x00, 128);
5883  memset(tag_output, 0x00, 16);
5884 
5885  key_len = unhexify( key_str, "8d44344d2ff9a02b1c75785bc84f16e4d23614bf43b2b9a87798b418e905c532" );
5886  pt_len = unhexify( src_str, "e5689cef9f8258a748a615070fcbf40ed0b24c077e2f9a362cb536737ffbc5383bcafed278d4c5e0f3c83fdd5cde79483c2c178f6fef05ab50f2b8db680027a175bc6d702d249efcd6cbc425b736f1905307c9303a4bd8aca620b57e3bb4b68f2a515259b06cf5365b675edff3457e2e915d7da1e0802f7300b3d56c4644f4ad" );
5887  iv_len = unhexify( iv_str, "256a983cd6d6eb4e80b5c1d1cd2a9f21" );
5888  add_len = unhexify( add_str, "" );
5889 
5890  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5891  if( 0 == 0 )
5892  {
5893  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
5894  hexify( dst_str, output, pt_len );
5895  hexify( tag_str, tag_output, tag_len );
5896 
5897  fct_chk( strcmp( (char *) dst_str, "13eeadbecc4c9991e2aa0b1ca819572ef28517528320db970739a16994f82cd8b5bb53d889f298f65c63dcc07089dbf7e9d00612d2cc8220b5630ca0262a698836d906256896eea446f6de4506e558b4f20950528c8c397b6b5b04890204b77a163e46c80c96b3e268fd2754e0380e7330782d606c771d6085b34200a80335f0" ) == 0 );
5898  fct_chk( strcmp( (char *) tag_str, "b33ab1e4029998e2566583dd550d" ) == 0 );
5899  }
5900  }
5901  FCT_TEST_END();
5902 
5903 
5904  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240104_0)
5905  {
5906  unsigned char key_str[128];
5907  unsigned char src_str[128];
5908  unsigned char dst_str[257];
5909  unsigned char iv_str[128];
5910  unsigned char add_str[128];
5911  unsigned char tag_str[128];
5912  unsigned char output[128];
5913  unsigned char tag_output[16];
5914  gcm_context ctx;
5915  unsigned int key_len;
5916  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
5917 
5918  memset(key_str, 0x00, 128);
5919  memset(src_str, 0x00, 128);
5920  memset(dst_str, 0x00, 257);
5921  memset(iv_str, 0x00, 128);
5922  memset(add_str, 0x00, 128);
5923  memset(tag_str, 0x00, 128);
5924  memset(output, 0x00, 128);
5925  memset(tag_output, 0x00, 16);
5926 
5927  key_len = unhexify( key_str, "3999a6a394943be3d6e5732af5faf26caf483a3fd42c13b7f4f02132e93a990d" );
5928  pt_len = unhexify( src_str, "8907e8832553264d7e92afa1595842ac661ddfec3f4294567faa0af61b3d0fdf76a922a2f3affb36b3b3b97f18d5172aec0b8f6f01239bb750c0fdd5da1e1244473cdfade83797037ca46d83123e6105c5c54071971f190da0c59821b0bf87242502bd19d19c7f463145bab0e687a18ffb2216c4a2ad2caf9488801c33c78c03" );
5929  iv_len = unhexify( iv_str, "76e2a5141d094b3a77765ba328f33576" );
5930  add_len = unhexify( add_str, "" );
5931 
5932  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5933  if( 0 == 0 )
5934  {
5935  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
5936  hexify( dst_str, output, pt_len );
5937  hexify( tag_str, tag_output, tag_len );
5938 
5939  fct_chk( strcmp( (char *) dst_str, "995189a396486b451db0167cf6990557287074def46eef872e6cfe1a297e256bdff2b71668ff0184eedf00ff1a3ec91358874718f0af88acf2bdb191e97332dc544d940412363840d4c03c7b2231852393c62d625093011ef314e4f755b1d0ee37690b4dfb55194a1465714cc3cbcdf93af39e666be0407508b8764f7ee95d3c" ) == 0 );
5940  fct_chk( strcmp( (char *) tag_str, "87c8f61f459fd4a09d9ee8b331" ) == 0 );
5941  }
5942  }
5943  FCT_TEST_END();
5944 
5945 
5946  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240104_1)
5947  {
5948  unsigned char key_str[128];
5949  unsigned char src_str[128];
5950  unsigned char dst_str[257];
5951  unsigned char iv_str[128];
5952  unsigned char add_str[128];
5953  unsigned char tag_str[128];
5954  unsigned char output[128];
5955  unsigned char tag_output[16];
5956  gcm_context ctx;
5957  unsigned int key_len;
5958  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
5959 
5960  memset(key_str, 0x00, 128);
5961  memset(src_str, 0x00, 128);
5962  memset(dst_str, 0x00, 257);
5963  memset(iv_str, 0x00, 128);
5964  memset(add_str, 0x00, 128);
5965  memset(tag_str, 0x00, 128);
5966  memset(output, 0x00, 128);
5967  memset(tag_output, 0x00, 16);
5968 
5969  key_len = unhexify( key_str, "4359a62d54c43770c3a0d51da25cc32fd985d9b41c282887299d2e348aa25a36" );
5970  pt_len = unhexify( src_str, "f020c9cafba399009bd920c3ffc165d4db47a9ee15ca8c1f51c65e306ccccd3f1d694071a3c765b5255eba6ef6a280f6095f8c195ebdfbee6968b57366e62e16d05b1768825ab7fe66300941270aa121b4fc02ab970ca6e32170cdbccb46fc548620fa1777049343b1600bfb1bdecec6682f0aa7244a0852adbc7aacedfba446" );
5971  iv_len = unhexify( iv_str, "5fefa85c958417b6bc8a61b5496fea93" );
5972  add_len = unhexify( add_str, "" );
5973 
5974  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
5975  if( 0 == 0 )
5976  {
5977  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
5978  hexify( dst_str, output, pt_len );
5979  hexify( tag_str, tag_output, tag_len );
5980 
5981  fct_chk( strcmp( (char *) dst_str, "3b8f829aa1cc1532a434bfbbd25f42480311657215946b9216846704fd5da5e886ca9d130df466c3b58f5259102ea6b9ad756e9f484a38dd0ed289fea083ab99fefbc2747100071744f10e362351d4ffac6c7c1f5a49ef3c78e2dc667f6b3bfd0fec454c4e3139443da71e514540d7a228db193a4c35d639ec13c1198ee7f81e" ) == 0 );
5982  fct_chk( strcmp( (char *) tag_str, "591db861b9060869edb228a324" ) == 0 );
5983  }
5984  }
5985  FCT_TEST_END();
5986 
5987 
5988  FCT_TEST_BGN(gcm_nist_validation_aes_25612810240104_2)
5989  {
5990  unsigned char key_str[128];
5991  unsigned char src_str[128];
5992  unsigned char dst_str[257];
5993  unsigned char iv_str[128];
5994  unsigned char add_str[128];
5995  unsigned char tag_str[128];
5996  unsigned char output[128];
5997  unsigned char tag_output[16];
5998  gcm_context ctx;
5999  unsigned int key_len;
6000  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
6001 
6002  memset(key_str, 0x00, 128);
6003  memset(src_str, 0x00, 128);
6004  memset(dst_str, 0x00, 257);
6005  memset(iv_str, 0x00, 128);
6006  memset(add_str, 0x00, 128);
6007  memset(tag_str, 0x00, 128);
6008  memset(output, 0x00, 128);
6009  memset(tag_output, 0x00, 16);
6010 
6011  key_len = unhexify( key_str, "0d798a357de5a686d06c329e451d7384bfbd462063fb8ea7d77a13dfa1f2aac2" );
6012  pt_len = unhexify( src_str, "d920785bd7d7b1a2c9c20139380a6ac5f27a11b614ae110da14203146c2615d81e97649e95edb0eda71a0fa1589244ed42fd9449962a92942e38001ac64b212c7e06c113129712a01556577ae02325a26eb92581c0a690a894225e83ff1e36776f22b600508d6d96a0d1c55316b518df8d09769df5e8340cbeabaa0bf7752870" );
6013  iv_len = unhexify( iv_str, "50a003c0cb50ae8a3183cd640ea4c6f6" );
6014  add_len = unhexify( add_str, "" );
6015 
6016  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6017  if( 0 == 0 )
6018  {
6019  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
6020  hexify( dst_str, output, pt_len );
6021  hexify( tag_str, tag_output, tag_len );
6022 
6023  fct_chk( strcmp( (char *) dst_str, "9af6a5341cde4b7e1b88346ec481024b40ad95a51533cdd8e09e4809a20684f18eaf243e1df56f02ace9667264cc1c6af6b0914f154b332234f6468cc471ecb2078a9f81c17f4ade83d326b670795458d110e4c4b4cd7fe7f9f5f4d4fb23a038969e4ff4f74839b1edc270fc81fcdc8a0b15b9c2f0561567c471b783b4322ebf" ) == 0 );
6024  fct_chk( strcmp( (char *) tag_str, "6c2f01264f9dbf29962122daff" ) == 0 );
6025  }
6026  }
6027  FCT_TEST_END();
6028 
6029 
6030  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024096_0)
6031  {
6032  unsigned char key_str[128];
6033  unsigned char src_str[128];
6034  unsigned char dst_str[257];
6035  unsigned char iv_str[128];
6036  unsigned char add_str[128];
6037  unsigned char tag_str[128];
6038  unsigned char output[128];
6039  unsigned char tag_output[16];
6040  gcm_context ctx;
6041  unsigned int key_len;
6042  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
6043 
6044  memset(key_str, 0x00, 128);
6045  memset(src_str, 0x00, 128);
6046  memset(dst_str, 0x00, 257);
6047  memset(iv_str, 0x00, 128);
6048  memset(add_str, 0x00, 128);
6049  memset(tag_str, 0x00, 128);
6050  memset(output, 0x00, 128);
6051  memset(tag_output, 0x00, 16);
6052 
6053  key_len = unhexify( key_str, "29b01b6d15f6e68fc2e7079429dde5363888a6410191d603941bed272daef7ed" );
6054  pt_len = unhexify( src_str, "123b6da306978f745d1dd86d7df32d9421523a7f329dd29ad98d2c309145844010295ef443a18d37ffe093080682fb96ba9c2c92105d35d77897b589e2abc7269aba8752c2a48c843bebad2c0fa281015ba85f5f709f6aee9b1d49236d5695f7f7d01554b193c89adcd1a91749138952cb3f0ec8b5f046328b3113aaa0715ef4" );
6055  iv_len = unhexify( iv_str, "cb4ac8373bcbf1b14cf2a6a6a16a422a" );
6056  add_len = unhexify( add_str, "" );
6057 
6058  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6059  if( 0 == 0 )
6060  {
6061  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
6062  hexify( dst_str, output, pt_len );
6063  hexify( tag_str, tag_output, tag_len );
6064 
6065  fct_chk( strcmp( (char *) dst_str, "caf71e09395d596d5a7b091c9e87ba6d522e974451e41f33f3e7ded554f24daa9da719e87793424eca9a3eb3972983354041091ba4b16c5c8c14913e1f6cbda09779188e9b5512917a0adf4b4344f119736ba6328897726a317989cddc66f16bab64707564bb0064fe6ab7b2b5cce143e94d4b6d739f58c47b6d4850697f8101" ) == 0 );
6066  fct_chk( strcmp( (char *) tag_str, "f635ff3d8bfbfb49694e05ec" ) == 0 );
6067  }
6068  }
6069  FCT_TEST_END();
6070 
6071 
6072  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024096_1)
6073  {
6074  unsigned char key_str[128];
6075  unsigned char src_str[128];
6076  unsigned char dst_str[257];
6077  unsigned char iv_str[128];
6078  unsigned char add_str[128];
6079  unsigned char tag_str[128];
6080  unsigned char output[128];
6081  unsigned char tag_output[16];
6082  gcm_context ctx;
6083  unsigned int key_len;
6084  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
6085 
6086  memset(key_str, 0x00, 128);
6087  memset(src_str, 0x00, 128);
6088  memset(dst_str, 0x00, 257);
6089  memset(iv_str, 0x00, 128);
6090  memset(add_str, 0x00, 128);
6091  memset(tag_str, 0x00, 128);
6092  memset(output, 0x00, 128);
6093  memset(tag_output, 0x00, 16);
6094 
6095  key_len = unhexify( key_str, "f96d8cdcc21884e050f762c049930d78360b56cef5b99ae232c9a8c6e8fa89f7" );
6096  pt_len = unhexify( src_str, "9cf05e5065531d2539d92ae76a43da1fa3614ffa4b1c73ddc2358f8d71345c01260060239edf629efc3650e0d13174af4294b6da0f39cc7fbecfa324afff89dd7d203416bd144c5e03df60a287fd4a8d54ef9b4b44b3d6de1d9de07418b8a34ec5c28cec3c5b2fb861583178a68ea0af89f2dfbfbd86f7cf1e572e1c8d4b0675" );
6097  iv_len = unhexify( iv_str, "5a7eb964b6bc9e75450b721b4d1f8f92" );
6098  add_len = unhexify( add_str, "" );
6099 
6100  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6101  if( 0 == 0 )
6102  {
6103  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
6104  hexify( dst_str, output, pt_len );
6105  hexify( tag_str, tag_output, tag_len );
6106 
6107  fct_chk( strcmp( (char *) dst_str, "566abaa23b8d464d6f107699453740e9e189254145c5132fe46989a6654de297398913daacb4083b29f7b31832079616e9a43c9c2878df1df451e49f1e629c8b9de2fb0e4ae9df48e3e8880f3f1ff5ace8842d2695e702dd1b7bfa7c25b0539b8c80d31ac91856796beced082c213e8be56efd646dae932f5bf503af46f491d8" ) == 0 );
6108  fct_chk( strcmp( (char *) tag_str, "c049cce29c401d3d198773b6" ) == 0 );
6109  }
6110  }
6111  FCT_TEST_END();
6112 
6113 
6114  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024096_2)
6115  {
6116  unsigned char key_str[128];
6117  unsigned char src_str[128];
6118  unsigned char dst_str[257];
6119  unsigned char iv_str[128];
6120  unsigned char add_str[128];
6121  unsigned char tag_str[128];
6122  unsigned char output[128];
6123  unsigned char tag_output[16];
6124  gcm_context ctx;
6125  unsigned int key_len;
6126  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
6127 
6128  memset(key_str, 0x00, 128);
6129  memset(src_str, 0x00, 128);
6130  memset(dst_str, 0x00, 257);
6131  memset(iv_str, 0x00, 128);
6132  memset(add_str, 0x00, 128);
6133  memset(tag_str, 0x00, 128);
6134  memset(output, 0x00, 128);
6135  memset(tag_output, 0x00, 16);
6136 
6137  key_len = unhexify( key_str, "253234c3dc9cb3d50a80598c5cde0e37b6b13bf834f3595a9458dee698a6d19b" );
6138  pt_len = unhexify( src_str, "686ad2740bdad507ebe97aa5bdbef25b8b030c4cdcaccb0d3b675ca91279db3ea75aa222c0ae98f86c24b10038cbb4fe9f897e1145b2f58cd3e9120f9a5620f38aa1e1f63906f557ff4a4c3223f5bb13dca34f8a1c6419e24ea57d114c62fec6fb9eee58a16b9e6a6bd930aa6fedcfc591311250e7167d43cca5916d5beead27" );
6139  iv_len = unhexify( iv_str, "9d156414acb63d11cb34870b937c837d" );
6140  add_len = unhexify( add_str, "" );
6141 
6142  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6143  if( 0 == 0 )
6144  {
6145  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
6146  hexify( dst_str, output, pt_len );
6147  hexify( tag_str, tag_output, tag_len );
6148 
6149  fct_chk( strcmp( (char *) dst_str, "96abd56d2f8aefe6c687f035df46c3f952a9933b8a51698e47d973b7d47c65ca3ba2474cb419c84a4c3cefb49e78cee1443a8fbbdaaecf73e9059ef34ac5a0df3fc152ecde2286da8840ad4617fd6ebc1e126314204bdc0a17b958430eb9f727498ff1db17aabbdaf43acca0945342d2ba9346da5373b2372b3081605e895c99" ) == 0 );
6150  fct_chk( strcmp( (char *) tag_str, "3d998e5be9df433da001a686" ) == 0 );
6151  }
6152  }
6153  FCT_TEST_END();
6154 
6155 
6156  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024064_0)
6157  {
6158  unsigned char key_str[128];
6159  unsigned char src_str[128];
6160  unsigned char dst_str[257];
6161  unsigned char iv_str[128];
6162  unsigned char add_str[128];
6163  unsigned char tag_str[128];
6164  unsigned char output[128];
6165  unsigned char tag_output[16];
6166  gcm_context ctx;
6167  unsigned int key_len;
6168  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
6169 
6170  memset(key_str, 0x00, 128);
6171  memset(src_str, 0x00, 128);
6172  memset(dst_str, 0x00, 257);
6173  memset(iv_str, 0x00, 128);
6174  memset(add_str, 0x00, 128);
6175  memset(tag_str, 0x00, 128);
6176  memset(output, 0x00, 128);
6177  memset(tag_output, 0x00, 16);
6178 
6179  key_len = unhexify( key_str, "1054d48d52693d2797c80d3f10509d1c808f36a4d65e8fd968e5d56239f856bc" );
6180  pt_len = unhexify( src_str, "a708e9d2d27ed4228e5b23d358561a77d684d855db9827be2bc102f2278f1961d3f056fb76f76204b2c96b916eb5e407f98e58edfed06de2388521832d97211d851d3e29658df738e3a15593b9db016d9e46fe9df98ce972d59f7058d484886ffaec7b9fd973c55644831241c1ce85bb478e83ccefd26b9718bfe910ac311ecc" );
6181  iv_len = unhexify( iv_str, "87611b936873b63abeaea990d6637a22" );
6182  add_len = unhexify( add_str, "" );
6183 
6184  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6185  if( 0 == 0 )
6186  {
6187  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
6188  hexify( dst_str, output, pt_len );
6189  hexify( tag_str, tag_output, tag_len );
6190 
6191  fct_chk( strcmp( (char *) dst_str, "94473e84659bc18eddcebe3112f55426f48ca4d670291fdedd42cc15a7415aa6795fb75b39434884eb266677e1fa7f530c6f3aaa733c0d9c06291bd7dff4c4e5857b2ee9e9f1f61a85571ad32dc9a3259017abe9eb5111e56df2913535669f3b2d722bd35fcdbd6541918885d9677cccaa902b9d3599cd4f0df1f35f4d11b8cf" ) == 0 );
6192  fct_chk( strcmp( (char *) tag_str, "9bd7cfe1023448ac" ) == 0 );
6193  }
6194  }
6195  FCT_TEST_END();
6196 
6197 
6198  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024064_1)
6199  {
6200  unsigned char key_str[128];
6201  unsigned char src_str[128];
6202  unsigned char dst_str[257];
6203  unsigned char iv_str[128];
6204  unsigned char add_str[128];
6205  unsigned char tag_str[128];
6206  unsigned char output[128];
6207  unsigned char tag_output[16];
6208  gcm_context ctx;
6209  unsigned int key_len;
6210  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
6211 
6212  memset(key_str, 0x00, 128);
6213  memset(src_str, 0x00, 128);
6214  memset(dst_str, 0x00, 257);
6215  memset(iv_str, 0x00, 128);
6216  memset(add_str, 0x00, 128);
6217  memset(tag_str, 0x00, 128);
6218  memset(output, 0x00, 128);
6219  memset(tag_output, 0x00, 16);
6220 
6221  key_len = unhexify( key_str, "a95dc5127b9cb1c82d558d5b24ae049e24447fd676a49350089951afe01dc797" );
6222  pt_len = unhexify( src_str, "45f81fa4780a256c40a0efec9547310406904d8991bcf964aa35ec9af457e2a642c1343827839f1f4b42f2b226da351731f416a4b4151f07927c278b371404f027bb2058e1765b367f5433a43fa4153883351041db3f066ef284a3eabd584d1d0b1d594b4ce7b5bca1708fbc661d95a9ac0d77dc29547f022eedc582fc7158c3" );
6223  iv_len = unhexify( iv_str, "0b177d01993ec726fff082ec88c64a31" );
6224  add_len = unhexify( add_str, "" );
6225 
6226  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6227  if( 0 == 0 )
6228  {
6229  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
6230  hexify( dst_str, output, pt_len );
6231  hexify( tag_str, tag_output, tag_len );
6232 
6233  fct_chk( strcmp( (char *) dst_str, "16c77b7f541d2dc4e8d31da23e04f18f4254aa283e8cee5b776f3d9a27584f459d0747955efff8945f807209ddaa6421846647d4198534b244498fe13a9073d372171d1b2fc38af66204f3de04000c093ebe659173b8d78dcfb8ca9003d2cd44ed168e6aaf55a06f29e83ceb32b98bafb59f109599f88b5c0f0557bd2b28f03f" ) == 0 );
6234  fct_chk( strcmp( (char *) tag_str, "19eb5f808d65989d" ) == 0 );
6235  }
6236  }
6237  FCT_TEST_END();
6238 
6239 
6240  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024064_2)
6241  {
6242  unsigned char key_str[128];
6243  unsigned char src_str[128];
6244  unsigned char dst_str[257];
6245  unsigned char iv_str[128];
6246  unsigned char add_str[128];
6247  unsigned char tag_str[128];
6248  unsigned char output[128];
6249  unsigned char tag_output[16];
6250  gcm_context ctx;
6251  unsigned int key_len;
6252  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
6253 
6254  memset(key_str, 0x00, 128);
6255  memset(src_str, 0x00, 128);
6256  memset(dst_str, 0x00, 257);
6257  memset(iv_str, 0x00, 128);
6258  memset(add_str, 0x00, 128);
6259  memset(tag_str, 0x00, 128);
6260  memset(output, 0x00, 128);
6261  memset(tag_output, 0x00, 16);
6262 
6263  key_len = unhexify( key_str, "53d6393dd7ecc40f2d52460ecdb0607133ad843ef53f380cd3a2755bfa567abe" );
6264  pt_len = unhexify( src_str, "72199c54dd5efb28c104e3b7210855506f6577d15c4eccdaa6a621a572e15f5845d648cf71b9fafef3411f6c1a664c7974fe71126a5cbab907e2caa342d8d7a05bc68a72c824896ec40e520e90b704dea441d22c5918f98803a88293384f64f92f11650c2cf4d3b062d30e14d149160742f59a473faf8fe00f4bdab9128c3281" );
6265  iv_len = unhexify( iv_str, "db7e93da21f0c9840c54c56e9c6ceba3" );
6266  add_len = unhexify( add_str, "" );
6267 
6268  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6269  if( 0 == 0 )
6270  {
6271  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
6272  hexify( dst_str, output, pt_len );
6273  hexify( tag_str, tag_output, tag_len );
6274 
6275  fct_chk( strcmp( (char *) dst_str, "5e83f559fa54926b731334f815783914530bbcc472d4bbd5e65908fb1c421442cb4c57329f2e4ba3d146a6499f34d8f1ec6d43e0cf98bdba923f404b914700edb235b08b0330097ea4162fd0baa1b7177ef0b29d5a6689bc56b8f975d6b6067ade4b8baf1d47a2eeb5b2ed28ebeded381d55d280cb2fb65ce4d82b69cce0594d" ) == 0 );
6276  fct_chk( strcmp( (char *) tag_str, "4e65dde857a0f5c7" ) == 0 );
6277  }
6278  }
6279  FCT_TEST_END();
6280 
6281 
6282  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024032_0)
6283  {
6284  unsigned char key_str[128];
6285  unsigned char src_str[128];
6286  unsigned char dst_str[257];
6287  unsigned char iv_str[128];
6288  unsigned char add_str[128];
6289  unsigned char tag_str[128];
6290  unsigned char output[128];
6291  unsigned char tag_output[16];
6292  gcm_context ctx;
6293  unsigned int key_len;
6294  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
6295 
6296  memset(key_str, 0x00, 128);
6297  memset(src_str, 0x00, 128);
6298  memset(dst_str, 0x00, 257);
6299  memset(iv_str, 0x00, 128);
6300  memset(add_str, 0x00, 128);
6301  memset(tag_str, 0x00, 128);
6302  memset(output, 0x00, 128);
6303  memset(tag_output, 0x00, 16);
6304 
6305  key_len = unhexify( key_str, "aa4a53c7764a254b06e1d8003810300b70f5729306effba9fb6210f97648a499" );
6306  pt_len = unhexify( src_str, "19f3a8c298478d6868bf3b31785eb62e844c37200672e6ef1ecc05c616d981e02c333dbc3f86dbb7ab9ba40e9e57e133e6d1d595fcc6d8e9886a84517212669d5d7ce0f1383cb58681b92dc180c06caa1a7ac1ec974dcd7f2bca7ad2ab2789c9a3a487d64c484319bffa56d854a6d40c62b02d0c7898f641f106ff50d22a12e7" );
6307  iv_len = unhexify( iv_str, "c32288f97af9b6e31aa7e40d9ef8d016" );
6308  add_len = unhexify( add_str, "" );
6309 
6310  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6311  if( 0 == 0 )
6312  {
6313  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
6314  hexify( dst_str, output, pt_len );
6315  hexify( tag_str, tag_output, tag_len );
6316 
6317  fct_chk( strcmp( (char *) dst_str, "1fa6aec7a28767c8961363dc4264e6ab97014264f6fe1dda7e9db8646ce9a5463f69e91aad2fce696f9b641d75635bfb0f97ed2d7beaca944cf8bd9dbfffe77b5ae9fd032575e5333c7ce27538c609922843de87b960ebca7c2a2ef9702dd0c32f787b4d7df248fdf526d594a90bad0d6a8dffe212246c36db71e2d348326624" ) == 0 );
6318  fct_chk( strcmp( (char *) tag_str, "1699444e" ) == 0 );
6319  }
6320  }
6321  FCT_TEST_END();
6322 
6323 
6324  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024032_1)
6325  {
6326  unsigned char key_str[128];
6327  unsigned char src_str[128];
6328  unsigned char dst_str[257];
6329  unsigned char iv_str[128];
6330  unsigned char add_str[128];
6331  unsigned char tag_str[128];
6332  unsigned char output[128];
6333  unsigned char tag_output[16];
6334  gcm_context ctx;
6335  unsigned int key_len;
6336  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
6337 
6338  memset(key_str, 0x00, 128);
6339  memset(src_str, 0x00, 128);
6340  memset(dst_str, 0x00, 257);
6341  memset(iv_str, 0x00, 128);
6342  memset(add_str, 0x00, 128);
6343  memset(tag_str, 0x00, 128);
6344  memset(output, 0x00, 128);
6345  memset(tag_output, 0x00, 16);
6346 
6347  key_len = unhexify( key_str, "f420b6ef96d9bfe46dcf18246ee230790a6fc854e730f1dd2d1ffd0e8b5c4776" );
6348  pt_len = unhexify( src_str, "658a954d6c61d0d6f0e81a3c1cc65684483fdc95f280b6d4c964358596c25ca41c389932d74a1a3a17d041e89b7110ea315fadb3128c2c469c350bf9b4723aa9c8abd9065ebbd12c317bfb7090f09633f8c1184f0c4fbe10f5486dbfb847536c886f7d144ed07272a7e62fb523a04111e5ea9e1ab415fd17e72143006db14e9e" );
6349  iv_len = unhexify( iv_str, "4982f502a37eea8bcf316ced466c9fb1" );
6350  add_len = unhexify( add_str, "" );
6351 
6352  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6353  if( 0 == 0 )
6354  {
6355  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
6356  hexify( dst_str, output, pt_len );
6357  hexify( tag_str, tag_output, tag_len );
6358 
6359  fct_chk( strcmp( (char *) dst_str, "8630aa78aabe35d9360a44bb2094209b6f70d46d71e3949803cf54e33dafd54c6e49eda9e26dc5c0c1e34908f5281c8cb2a1aeee81186cf45d3eb22f486320c7ee0fb7bf3c211b232a8426e7e82f3e05881bf7d9454cddec7f28e5358cd0e9ea2e9cff938be044c1b21911d50b2ae23ab1aef377511ea657adcb560c34209f8b" ) == 0 );
6360  fct_chk( strcmp( (char *) tag_str, "3aa91b73" ) == 0 );
6361  }
6362  }
6363  FCT_TEST_END();
6364 
6365 
6366  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024032_2)
6367  {
6368  unsigned char key_str[128];
6369  unsigned char src_str[128];
6370  unsigned char dst_str[257];
6371  unsigned char iv_str[128];
6372  unsigned char add_str[128];
6373  unsigned char tag_str[128];
6374  unsigned char output[128];
6375  unsigned char tag_output[16];
6376  gcm_context ctx;
6377  unsigned int key_len;
6378  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
6379 
6380  memset(key_str, 0x00, 128);
6381  memset(src_str, 0x00, 128);
6382  memset(dst_str, 0x00, 257);
6383  memset(iv_str, 0x00, 128);
6384  memset(add_str, 0x00, 128);
6385  memset(tag_str, 0x00, 128);
6386  memset(output, 0x00, 128);
6387  memset(tag_output, 0x00, 16);
6388 
6389  key_len = unhexify( key_str, "50f3b822dfc70382d8695811e6b0a2896ea2bcd4d5268778cd484053c8a19288" );
6390  pt_len = unhexify( src_str, "15bfb3a562ced63c92561a78374af40c88a08ce02392419e03d7543365c5b6525951ef2dec5927474a0ef85f519e5ef795881db3eafa765ec38e6be7b565a878c13d90c02889dc50cbe87081d9225a515504c7be15bf97f5d72a4d81f218a148a46fbd42983ab002fce0a54719bfe301bb761753cb330dc25be517b87d0428d9" );
6391  iv_len = unhexify( iv_str, "980810c11abd3aff43408ec9a69abcb3" );
6392  add_len = unhexify( add_str, "" );
6393 
6394  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6395  if( 0 == 0 )
6396  {
6397  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
6398  hexify( dst_str, output, pt_len );
6399  hexify( tag_str, tag_output, tag_len );
6400 
6401  fct_chk( strcmp( (char *) dst_str, "12632296f27eb2439009f6032a3f648370303dcebaac311b684de2496f399b271347b19e045c1060802f3f742b6c780d20b9d589cc082d7d0d580dfb7231171cfb612227fcdee7feae4f8defd34c89fb0d68570e782192a7bdd9a5464f35dc6a4282cf9cc3fdfac988d129eddf8e0795ccc24a113f872ada88834c974df8bc69" ) == 0 );
6402  fct_chk( strcmp( (char *) tag_str, "32c1c4c5" ) == 0 );
6403  }
6404  }
6405  FCT_TEST_END();
6406 
6407 
6408  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024128_0)
6409  {
6410  unsigned char key_str[128];
6411  unsigned char src_str[128];
6412  unsigned char dst_str[257];
6413  unsigned char iv_str[128];
6414  unsigned char add_str[128];
6415  unsigned char tag_str[128];
6416  unsigned char output[128];
6417  unsigned char tag_output[16];
6418  gcm_context ctx;
6419  unsigned int key_len;
6420  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
6421 
6422  memset(key_str, 0x00, 128);
6423  memset(src_str, 0x00, 128);
6424  memset(dst_str, 0x00, 257);
6425  memset(iv_str, 0x00, 128);
6426  memset(add_str, 0x00, 128);
6427  memset(tag_str, 0x00, 128);
6428  memset(output, 0x00, 128);
6429  memset(tag_output, 0x00, 16);
6430 
6431  key_len = unhexify( key_str, "29072ab5bad2c1425ca8dd0ae56f27e93f8d26b320b08f77b8bd3fa9d03edc6c" );
6432  pt_len = unhexify( src_str, "3c7afc5cfc5a1e141587e93fef8427d4f21d892b983b7c9b6e9de3ee168837a1533847c8a2e2ab0706ac1474e9aa54ab57e7860bca9ebb83bd6d3ae26ca5387abdb9a60c4a9928484742a91294b13ab8f51eb4f599a30e9cb1894aca32a62a4c2793ee6793df473f43234c9eafb44d585a7d92a50aebef80c73c86ef67f5b5a4" );
6433  iv_len = unhexify( iv_str, "0201edf80475d2f969a90848f639528c" );
6434  add_len = unhexify( add_str, "4c8ff3edeaa68e47bbc8724b37822216d42e2669ca127da14b7b488fde31a49c7d357fb9aecc1991b3c6f63a4ce43959a22de70545e6aee8674d812ecaaef93ad03b5d4c99bdef6d52f21fc7fdbeb1c5629a76df59620aaefda81a8e73cebe4c646beffd7f4a98a5283cc7bc5e78b2a70f43e0cab0b7772e03a5f048ec75081a" );
6435 
6436  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6437  if( 0 == 0 )
6438  {
6439  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
6440  hexify( dst_str, output, pt_len );
6441  hexify( tag_str, tag_output, tag_len );
6442 
6443  fct_chk( strcmp( (char *) dst_str, "f3755aae6813e4e4b84a089ca1496564676655ba3c94e59c5f682adbbfed21e76aed0db78390258cf5fbf15f06c6b6468414cb6493c8b9b953b4954ecaf07ecaf8586ae001710d4069da6d21810bcdcbb831f7041cdbb984b7c55878598a6658883178dcc0fa03394519b8b9c3bed0e5c073429f5dd071a9184b015cbbbc62e1" ) == 0 );
6444  fct_chk( strcmp( (char *) tag_str, "0549dd9f2a123bd6d58e5cd16c0624a1" ) == 0 );
6445  }
6446  }
6447  FCT_TEST_END();
6448 
6449 
6450  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024128_1)
6451  {
6452  unsigned char key_str[128];
6453  unsigned char src_str[128];
6454  unsigned char dst_str[257];
6455  unsigned char iv_str[128];
6456  unsigned char add_str[128];
6457  unsigned char tag_str[128];
6458  unsigned char output[128];
6459  unsigned char tag_output[16];
6460  gcm_context ctx;
6461  unsigned int key_len;
6462  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
6463 
6464  memset(key_str, 0x00, 128);
6465  memset(src_str, 0x00, 128);
6466  memset(dst_str, 0x00, 257);
6467  memset(iv_str, 0x00, 128);
6468  memset(add_str, 0x00, 128);
6469  memset(tag_str, 0x00, 128);
6470  memset(output, 0x00, 128);
6471  memset(tag_output, 0x00, 16);
6472 
6473  key_len = unhexify( key_str, "aa9999af53720d0c1288fd3fe307a471160635287eebf41dd77c82d1f9cc9d61" );
6474  pt_len = unhexify( src_str, "6ce6f2dc202750219e15a24e1ff0678ffdde55b27cdcab6da188bd5235a3bdc677f72f106579d02c2970d4542e4e2372886e1a6d74c596ce735f51f2ee6aff4d62bd24112ec7cd1adc7c660561f163170cdf047c241c53b8a5b2e03fde48c249a319bb90c2693c468c9dd136e94e05f067cd1d68244ce50be318ae0464b79acd" );
6475  iv_len = unhexify( iv_str, "6299d651a032bdf3a7e6b25ace660e30" );
6476  add_len = unhexify( add_str, "afab0a3d1960ac973ee2f4461dacd10d189412b37e572cad7888bb4d2453f1eefbd6725aadd5f982393dfa59c3cf1ee342dd91e1fbfab10a802e3a0eda226fde2686e7db1015405a3d33c921e5aa857bfda53ca3aed3ff0e18c289406740a7c5d9f86ce43db40c9032e98ab126c7c0364e2efc008312b7641d36503d183fa5a5" );
6477 
6478  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6479  if( 0 == 0 )
6480  {
6481  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
6482  hexify( dst_str, output, pt_len );
6483  hexify( tag_str, tag_output, tag_len );
6484 
6485  fct_chk( strcmp( (char *) dst_str, "a8059fe6ff711616afb591b5e5de497b3b7813f9de658c7b47cc3e7b07d0805c1ba05856d98341869b8394f3b5df2876ae19837edb3931eebeb0f26eb6c4a2ea78003d82a98111305208ccaceaf77e5d71996cca4f9a5eb712dd916b71455f741ec2dde51f56828667b7a2da015e1886fba71e496a542d94a38efbcb5353fb89" ) == 0 );
6486  fct_chk( strcmp( (char *) tag_str, "2ff4d8d00400ad63a6ae7842eefb16eb" ) == 0 );
6487  }
6488  }
6489  FCT_TEST_END();
6490 
6491 
6492  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024128_2)
6493  {
6494  unsigned char key_str[128];
6495  unsigned char src_str[128];
6496  unsigned char dst_str[257];
6497  unsigned char iv_str[128];
6498  unsigned char add_str[128];
6499  unsigned char tag_str[128];
6500  unsigned char output[128];
6501  unsigned char tag_output[16];
6502  gcm_context ctx;
6503  unsigned int key_len;
6504  size_t pt_len, iv_len, add_len, tag_len = 128 / 8;
6505 
6506  memset(key_str, 0x00, 128);
6507  memset(src_str, 0x00, 128);
6508  memset(dst_str, 0x00, 257);
6509  memset(iv_str, 0x00, 128);
6510  memset(add_str, 0x00, 128);
6511  memset(tag_str, 0x00, 128);
6512  memset(output, 0x00, 128);
6513  memset(tag_output, 0x00, 16);
6514 
6515  key_len = unhexify( key_str, "31721e5e3a748a7f7369f3dffc1cbb570ceac868ef9d1f29b944b7e86a26d273" );
6516  pt_len = unhexify( src_str, "6afc1d22233a60c3e6851447de89152a0dbadcd87e35fc947ca4bc886f1f87549ea106b097e2655136833d06dfb879a85732298860c149c5e5ff03bb2a95d9cd3deeb8ffdf951ea5f97e32c1ed75271d2ea58d158ae6d568bf197d69130977e330ebfef33f222bfd5b56bc6b0382dc99c4f0e42b0aa7a117b43f96d43f6e02dd" );
6517  iv_len = unhexify( iv_str, "523247d56cc67c752b20eab7a28f85fe" );
6518  add_len = unhexify( add_str, "11eb41aeae3611f0de77bfa1221ef5b7d254faf893dbdaead926a61605f8a86f20f1fb84e0c5acd195143bc5a4f297bf729129f898a2013175b3db7004115a6120134d8e354afe36699a6c6618d739c805b5b91739df67de7667729f1d6eae1a0609897999d474be4d8b826df901c6f39d522570d38d2d1aa828382932a177b1" );
6519 
6520  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6521  if( 0 == 0 )
6522  {
6523  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
6524  hexify( dst_str, output, pt_len );
6525  hexify( tag_str, tag_output, tag_len );
6526 
6527  fct_chk( strcmp( (char *) dst_str, "39e7f32bb3e8436d97a1d86a22750768001fe3a805516d3f800352323afd221991105d12da69ce7430402fa7923958ad5ed85506b968c4dd89516d6e3d02e722db3954ce098ec3299ef4f2ed4a89f383408dceca9dabc6f8eefe5a1f80093961c29a94b222d1a04d2c1e453d2e02977f3dd77a4659e2bde2fdbba8e2829db4f1" ) == 0 );
6528  fct_chk( strcmp( (char *) tag_str, "506883db674fa0417e0832efc040227c" ) == 0 );
6529  }
6530  }
6531  FCT_TEST_END();
6532 
6533 
6534  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024120_0)
6535  {
6536  unsigned char key_str[128];
6537  unsigned char src_str[128];
6538  unsigned char dst_str[257];
6539  unsigned char iv_str[128];
6540  unsigned char add_str[128];
6541  unsigned char tag_str[128];
6542  unsigned char output[128];
6543  unsigned char tag_output[16];
6544  gcm_context ctx;
6545  unsigned int key_len;
6546  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
6547 
6548  memset(key_str, 0x00, 128);
6549  memset(src_str, 0x00, 128);
6550  memset(dst_str, 0x00, 257);
6551  memset(iv_str, 0x00, 128);
6552  memset(add_str, 0x00, 128);
6553  memset(tag_str, 0x00, 128);
6554  memset(output, 0x00, 128);
6555  memset(tag_output, 0x00, 16);
6556 
6557  key_len = unhexify( key_str, "100bd2bf9c8b24cc2e8d57697cd131c846b55ad6ff0b214c0de14104b465b58b" );
6558  pt_len = unhexify( src_str, "81c3370da989f774c1962f60c57299747481bea0e6b91df846e6ef93cada977bc742ee33ce085ae33eb9f7393a0943b647205a7e1ffb2a6a803a1ce7a88902456d66612362962b97c7152b57f1d54de94a39f07c1a8098da4ea5e498d426b7036c642fbeebefda50b8c421a7a33b1a8499dc35011d80a51d34285824d6f01722" );
6559  iv_len = unhexify( iv_str, "363e8af6f38307ec126e466e7056cc45" );
6560  add_len = unhexify( add_str, "471f7e9a0b505b12996747ec9e32731f11911ee95d70795bbd1bba34cf782d4100ce30a85b23f9f817f30e8f314e1a23e101201c920ce12ce732cc3fe01c74a9ee8d3e1599aa22f2398c3265d4dbda626a8ff4262889009e087fbef6babe33d7300e5cfc4c0056f3562a913d2594fee8e44959cf728599a9d3e7ee4a9ecd6694" );
6561 
6562  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6563  if( 0 == 0 )
6564  {
6565  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
6566  hexify( dst_str, output, pt_len );
6567  hexify( tag_str, tag_output, tag_len );
6568 
6569  fct_chk( strcmp( (char *) dst_str, "9494d01966ac887b8295bde61f0e7d006ea7b5c984a29cf5d849194f35d7b0f6ddb3bbd9646d7b9b961c515179901d2b04cb7cf7b6c8736d1d472ae8bb9a6dc9194b03b3f5373551a5ae0c0f023967669c873f0acfb02c0ae3a384e70f7a7ca05861f257f36a2ad5fbb591473dfc3ae1264dca0e889e0ddbf93dadf75db2059b" ) == 0 );
6570  fct_chk( strcmp( (char *) tag_str, "5c78d914cac78c514e275a244d0ea4" ) == 0 );
6571  }
6572  }
6573  FCT_TEST_END();
6574 
6575 
6576  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024120_1)
6577  {
6578  unsigned char key_str[128];
6579  unsigned char src_str[128];
6580  unsigned char dst_str[257];
6581  unsigned char iv_str[128];
6582  unsigned char add_str[128];
6583  unsigned char tag_str[128];
6584  unsigned char output[128];
6585  unsigned char tag_output[16];
6586  gcm_context ctx;
6587  unsigned int key_len;
6588  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
6589 
6590  memset(key_str, 0x00, 128);
6591  memset(src_str, 0x00, 128);
6592  memset(dst_str, 0x00, 257);
6593  memset(iv_str, 0x00, 128);
6594  memset(add_str, 0x00, 128);
6595  memset(tag_str, 0x00, 128);
6596  memset(output, 0x00, 128);
6597  memset(tag_output, 0x00, 16);
6598 
6599  key_len = unhexify( key_str, "614dd1762deb5c726eadf0e6587f9f38fa63d16bca1926955404f1b9f83e241a" );
6600  pt_len = unhexify( src_str, "1ae828a1693d3c24651ab8ba59fb1185d08e6cc4a964f30dac59cd81ff4bdfce8023ab1b6dffb594a4250d25f611763efb4152cd35b937ca11373d237f1f8b3c0e21b942beb1f4ffe5014198c9ff59896ddfbb55e69963e3ef6b03d3fa134977870cd6f3ac10bbf59bdcc9f103cc2d58f294ef5f007a9f903c7bada08cb454e6" );
6601  iv_len = unhexify( iv_str, "10d079a86894b0c17bfcc8ffc4ecf7bc" );
6602  add_len = unhexify( add_str, "c4035f80b6d2ea288afd4ddaec1eb232b78be5a86583fa85f791d546102c97ace9716c2702483d762c8e4eda12f3dd10a9a49a2d72cd4694fa794477b54b4367be6b548675aee4c351e3f66c7e113aecfbcc57b8bbab4a039f28488237c75313e62612847b915ef9b582e146b2bfabbfce576a984f5ce4be0e6bff5480584fc3" );
6603 
6604  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6605  if( 0 == 0 )
6606  {
6607  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
6608  hexify( dst_str, output, pt_len );
6609  hexify( tag_str, tag_output, tag_len );
6610 
6611  fct_chk( strcmp( (char *) dst_str, "bf5fb0445aab46aba504801d5356455f28c98f300670a731bdd0c901a1d5564aa31f5d467e5f80dadbfeca61d2bf72b570f3935ba04c45a2ff7994bac6cabf84db2a42cd5db2a4f160c97c76817cc5cb62d4006d895fcdb218c1464b5caaadbd1f61779938e9a84440615eae050cd6f1713cfbd695d78818b2af78157339e9d9" ) == 0 );
6612  fct_chk( strcmp( (char *) tag_str, "6d815ee12813875ce74e3aed3c7b73" ) == 0 );
6613  }
6614  }
6615  FCT_TEST_END();
6616 
6617 
6618  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024120_2)
6619  {
6620  unsigned char key_str[128];
6621  unsigned char src_str[128];
6622  unsigned char dst_str[257];
6623  unsigned char iv_str[128];
6624  unsigned char add_str[128];
6625  unsigned char tag_str[128];
6626  unsigned char output[128];
6627  unsigned char tag_output[16];
6628  gcm_context ctx;
6629  unsigned int key_len;
6630  size_t pt_len, iv_len, add_len, tag_len = 120 / 8;
6631 
6632  memset(key_str, 0x00, 128);
6633  memset(src_str, 0x00, 128);
6634  memset(dst_str, 0x00, 257);
6635  memset(iv_str, 0x00, 128);
6636  memset(add_str, 0x00, 128);
6637  memset(tag_str, 0x00, 128);
6638  memset(output, 0x00, 128);
6639  memset(tag_output, 0x00, 16);
6640 
6641  key_len = unhexify( key_str, "12e97fafff7d397ea34efc0a8528afcd51c1b2ccda680ae9049edc8359b78ec0" );
6642  pt_len = unhexify( src_str, "9fbf0141cd50bd1b3ccaf137b808b698570642ab20c32120901622b34173d7ad119abca3c61bbf1e6dd5cb182a079f3e01b0e5263d984c6186f01792125dd6c47c30033008ca2e0377f990285094f652c55a348242dfaa59f76989fcf86033c8d9c0b2a526bf46cca207e055e1dbc7cf3d0b7a840c8fb5f85784c9e4563f71de" );
6643  iv_len = unhexify( iv_str, "8eb11abfe350c0d5a6b02477b44867e9" );
6644  add_len = unhexify( add_str, "0a830029d450e20aaef484d4abee9dadeabbd6feaf800b3a693b4746db059efb7d110405b45e45a9e5acf90957c154674dfb2c1cd787af371e01bafc4e8475d0268b969d25756a1121a519afa61f3d6ecded4e0640f0ddd471f5b8e82029fd2887df4e65af9580390b6924022e39acfede7530e5f0e54f0285ba565ff49af542" );
6645 
6646  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6647  if( 0 == 0 )
6648  {
6649  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
6650  hexify( dst_str, output, pt_len );
6651  hexify( tag_str, tag_output, tag_len );
6652 
6653  fct_chk( strcmp( (char *) dst_str, "067cd6ff8461ac80217ef70a91dcf6edb2fbdd31856815cf356fffa63ba3f5cb293d7f1ed32ae40248693617f27839a34e871fdde635c04d1e66743f730a06e2be25cafe1d67d804879fe38e009268ec50a0294da445c795742ff1e924170e4c2e0e9ef3bdc26c251f5537218d295d93d57baccc4dee6185c235d7ec5c9926a6" ) == 0 );
6654  fct_chk( strcmp( (char *) tag_str, "931f44f10993c836e534a59c1aeb98" ) == 0 );
6655  }
6656  }
6657  FCT_TEST_END();
6658 
6659 
6660  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024112_0)
6661  {
6662  unsigned char key_str[128];
6663  unsigned char src_str[128];
6664  unsigned char dst_str[257];
6665  unsigned char iv_str[128];
6666  unsigned char add_str[128];
6667  unsigned char tag_str[128];
6668  unsigned char output[128];
6669  unsigned char tag_output[16];
6670  gcm_context ctx;
6671  unsigned int key_len;
6672  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
6673 
6674  memset(key_str, 0x00, 128);
6675  memset(src_str, 0x00, 128);
6676  memset(dst_str, 0x00, 257);
6677  memset(iv_str, 0x00, 128);
6678  memset(add_str, 0x00, 128);
6679  memset(tag_str, 0x00, 128);
6680  memset(output, 0x00, 128);
6681  memset(tag_output, 0x00, 16);
6682 
6683  key_len = unhexify( key_str, "c732da000262de558bd3ea65e66e20e11605170c90b67708bda43f40abed74fe" );
6684  pt_len = unhexify( src_str, "7d6c981c30ef87a46f53aecb4c97124fb94b45057635d5bf1d4f3a3bdb534e9ab62b4a425de9dc52537575ed9ff406cfbf75403d3d9cdbd9fcd520d62065f81483427fa27964642cc1a07822da0f6234a689eb30e8425d7709abfd18666c76c963eecef20503ee77c96802c120abea1428cc64a08fc20860527854fecc571a6c" );
6685  iv_len = unhexify( iv_str, "523dd34ea263c31c2215053986626d02" );
6686  add_len = unhexify( add_str, "f170556ac5d38f0661bae33e0826356c8488218903eba1bfa49b16882537ef78283fd9351f37f44a7687049a608c3ddcc82817d4ba96a40d05807a38ee3f2d5cb8b1121db61318fe22bfd3afb319e84c4e2f94570a92433db29bd2193485449c719a2c6030696f53ac729df90678eb018783b25740d806d1ef6980e10d396595" );
6687 
6688  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6689  if( 0 == 0 )
6690  {
6691  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
6692  hexify( dst_str, output, pt_len );
6693  hexify( tag_str, tag_output, tag_len );
6694 
6695  fct_chk( strcmp( (char *) dst_str, "3470d4544f7bfa3ac0627a56e66c56fa062188440834b9238bd20e89dfc701fe6cfe0bf4ea2387014bd83c63ab7c912e1c0dce7c2d92eaea155f886b574bc94a8f4f275dffe2d84173a05b99d8029c36dd3c35c12709d33f55c3bcd96e9a815f77a4fe8e50639d8f195a526486f1209d7bf7e86ac3dfc4a1d2cbddb6d330e5db" ) == 0 );
6696  fct_chk( strcmp( (char *) tag_str, "5924f3ceff0207fc8ba8179a9925" ) == 0 );
6697  }
6698  }
6699  FCT_TEST_END();
6700 
6701 
6702  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024112_1)
6703  {
6704  unsigned char key_str[128];
6705  unsigned char src_str[128];
6706  unsigned char dst_str[257];
6707  unsigned char iv_str[128];
6708  unsigned char add_str[128];
6709  unsigned char tag_str[128];
6710  unsigned char output[128];
6711  unsigned char tag_output[16];
6712  gcm_context ctx;
6713  unsigned int key_len;
6714  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
6715 
6716  memset(key_str, 0x00, 128);
6717  memset(src_str, 0x00, 128);
6718  memset(dst_str, 0x00, 257);
6719  memset(iv_str, 0x00, 128);
6720  memset(add_str, 0x00, 128);
6721  memset(tag_str, 0x00, 128);
6722  memset(output, 0x00, 128);
6723  memset(tag_output, 0x00, 16);
6724 
6725  key_len = unhexify( key_str, "2684bccf2b845314a0c4b8b5a780f91aa7ed1177539122dc8717c14bb50e2dff" );
6726  pt_len = unhexify( src_str, "1a4174d4e18ae0b6434f35dcd9c86cf158c42ce00ceb12f4356ec118d659820518c326a1b2ab92279d949f74c45219c660cb84fb6b10b14d56a501173fd3b129ac89db0de22874d92bec724e94751f91a817a42a28e8e15672172c0b0db4ead46b14d4bc21ad8f5ba1f9e7e0fcc867700681349b8102a208d76ae4ef7df5b56e" );
6727  iv_len = unhexify( iv_str, "8433b59b41fe0cdc5b30e4e87c5028ec" );
6728  add_len = unhexify( add_str, "280026eeebf05e26e84955e4a36352d4f97f3193dce0795d526d05645bf5d2eec4b92ee8dce54d78fd3fc3e36bc79d5bf9ee3b2699310a75dbc5007bdacb4dc88d06515995f8f5b1aa90cb8fc036b763a5e819db70c091802fb7f24b9c2a68ff194032fffc4ef798936aabccbb43f22a2bbd7e1ab9d0434d443dac4929b84193" );
6729 
6730  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6731  if( 0 == 0 )
6732  {
6733  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
6734  hexify( dst_str, output, pt_len );
6735  hexify( tag_str, tag_output, tag_len );
6736 
6737  fct_chk( strcmp( (char *) dst_str, "cc155e04472c0872d5ccf8910d34496f380954da7653a1e1d3c460fbbc791c9b82e35176e938b7e21eb4690ed9fca74ba45a03dac4abc4f625ffdfad02e1acccf18b5a1878f911fb6f6e09ce0d4c6a0bb87226e914879a1b3085c30e8328aa6e0d1c49c21b760b82e469981b40ea102f3998c81dd9799f484ab89b19396ab7e1" ) == 0 );
6738  fct_chk( strcmp( (char *) tag_str, "5a80008e6da40c71b316b84ae284" ) == 0 );
6739  }
6740  }
6741  FCT_TEST_END();
6742 
6743 
6744  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024112_2)
6745  {
6746  unsigned char key_str[128];
6747  unsigned char src_str[128];
6748  unsigned char dst_str[257];
6749  unsigned char iv_str[128];
6750  unsigned char add_str[128];
6751  unsigned char tag_str[128];
6752  unsigned char output[128];
6753  unsigned char tag_output[16];
6754  gcm_context ctx;
6755  unsigned int key_len;
6756  size_t pt_len, iv_len, add_len, tag_len = 112 / 8;
6757 
6758  memset(key_str, 0x00, 128);
6759  memset(src_str, 0x00, 128);
6760  memset(dst_str, 0x00, 257);
6761  memset(iv_str, 0x00, 128);
6762  memset(add_str, 0x00, 128);
6763  memset(tag_str, 0x00, 128);
6764  memset(output, 0x00, 128);
6765  memset(tag_output, 0x00, 16);
6766 
6767  key_len = unhexify( key_str, "484a33ba0b97c2887a86a1476f274e236eb37a72e05f9e74348248877ea99e98" );
6768  pt_len = unhexify( src_str, "4d81cec14b398257a31ad1e3581c00d05e12b37b71260bdd95bc0b6981b614598ffbbb3ec4bb7deb5673a1020139877122f88504c9c53265706fe76623a9b488a3dfdd4cbc1b7b46c7fce9d7378e164964c0a377337a5c172e5e4de6206375164cd7beb0305d7a90f5c73e12f445326e1bc9ac5acd1bd4bcbe4662524891a2e9" );
6769  iv_len = unhexify( iv_str, "c3a5cc19aef6d64b656d66fad697b829" );
6770  add_len = unhexify( add_str, "30f276f96a50e17b452dcb5e1b4ab666dc7c4c72d0d9ab2abaf77eae2e3bab7dbe5ac005d7eac5480e1bae13646b59155528abdc148b3b71f06d017c4b12d64aa3990cc96941eaac14b60eb347e0be873de2b6fe2b86e2c2fc063b29511b70144ecd315b9491001b122701b9c8cc1d85427b6c60663ccd9d1fa84e1c2f609f36" );
6771 
6772  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6773  if( 0 == 0 )
6774  {
6775  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
6776  hexify( dst_str, output, pt_len );
6777  hexify( tag_str, tag_output, tag_len );
6778 
6779  fct_chk( strcmp( (char *) dst_str, "579fd8fb50d795b5b208c2d5b0a8b1804f754a30a1003025301655aebcda2d2ff30d29a16d0fb17a28401127750fc87c9e3aa08540817228b049c387253ea2359035b8063ab4bf54504ca5ad93b54b8ac5bd0c1ef3c6769fb1ed239bb76f3e0bc51d356aa91b494d22749c8e4cdb1629e93f7c6e46ff9145916c1275669ae5ba" ) == 0 );
6780  fct_chk( strcmp( (char *) tag_str, "1c39aac1d5ffe7916a08ab2ce279" ) == 0 );
6781  }
6782  }
6783  FCT_TEST_END();
6784 
6785 
6786  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024104_0)
6787  {
6788  unsigned char key_str[128];
6789  unsigned char src_str[128];
6790  unsigned char dst_str[257];
6791  unsigned char iv_str[128];
6792  unsigned char add_str[128];
6793  unsigned char tag_str[128];
6794  unsigned char output[128];
6795  unsigned char tag_output[16];
6796  gcm_context ctx;
6797  unsigned int key_len;
6798  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
6799 
6800  memset(key_str, 0x00, 128);
6801  memset(src_str, 0x00, 128);
6802  memset(dst_str, 0x00, 257);
6803  memset(iv_str, 0x00, 128);
6804  memset(add_str, 0x00, 128);
6805  memset(tag_str, 0x00, 128);
6806  memset(output, 0x00, 128);
6807  memset(tag_output, 0x00, 16);
6808 
6809  key_len = unhexify( key_str, "4a5f5321b515cfcde493148ee4c44c693b1979b3a3ba522a2a80e5d27c93fd1b" );
6810  pt_len = unhexify( src_str, "962b8504feb57ae73e93c2e8962c9562f409c908e51f9904df1623eaa0c6b998db6ee8919d805b6ffcc37da51300c1ae16bca21f8f6f63af989a813ae8fe28c3fb012f003dab7e71b08d757799208806062d62b4ac937712409f9fafff3e3579a4d92d4437a6f0b263e1da7e4651e0a521be5f6f49ff5a0778f07bd5d3dac696" );
6811  iv_len = unhexify( iv_str, "c2cb0166046bad0cf0a107af83921d7a" );
6812  add_len = unhexify( add_str, "e48abfb657ab33f58eeda8c58a20e7e299bc3e7481f704c326529408580f9a5130cf6f7368502d20b03ba6c3b8f6f28c076a3ef7b8e987750dc972be953e712483e6f328da57e4b5c501fa7c720593eb89ff9644fbdc45478f80ee89f096694dcb44a9b3a6aca0904d4aa4e475b4b24771df9fd6ef9557f4f5c842ac241b212f" );
6813 
6814  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6815  if( 0 == 0 )
6816  {
6817  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
6818  hexify( dst_str, output, pt_len );
6819  hexify( tag_str, tag_output, tag_len );
6820 
6821  fct_chk( strcmp( (char *) dst_str, "11bd55d969603ff3d46355cb19c69557b99825a4c23eeafc8eed8422dab537c0fa9753191c49a6fd9e0d6760ed816a49e7f5704b5936a498544e2bbba7875c513c031f11527ca1b9b579960be6964fba9119dcece8205c174be07ebffada83375678de76fc012b0ee179787b4aa9fb6e2b459575260eb01f23786dc24d1d45ef" ) == 0 );
6822  fct_chk( strcmp( (char *) tag_str, "36853a029b5163ca76c72d4fec" ) == 0 );
6823  }
6824  }
6825  FCT_TEST_END();
6826 
6827 
6828  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024104_1)
6829  {
6830  unsigned char key_str[128];
6831  unsigned char src_str[128];
6832  unsigned char dst_str[257];
6833  unsigned char iv_str[128];
6834  unsigned char add_str[128];
6835  unsigned char tag_str[128];
6836  unsigned char output[128];
6837  unsigned char tag_output[16];
6838  gcm_context ctx;
6839  unsigned int key_len;
6840  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
6841 
6842  memset(key_str, 0x00, 128);
6843  memset(src_str, 0x00, 128);
6844  memset(dst_str, 0x00, 257);
6845  memset(iv_str, 0x00, 128);
6846  memset(add_str, 0x00, 128);
6847  memset(tag_str, 0x00, 128);
6848  memset(output, 0x00, 128);
6849  memset(tag_output, 0x00, 16);
6850 
6851  key_len = unhexify( key_str, "c8f7b7e6295fc8e33740bf2807caeaf4b90817cc3ef3d9f38f704d9f6164e41d" );
6852  pt_len = unhexify( src_str, "4c26e489069b487ce9dc0e295d5e89760401185374041b0efca5bbf758e7d010ccbfe5999e2a817776aa8f49c1e5d43bcdade2989fe5be635dab54cb0e390a21b832b30f688857b9e09c346bcc5397e51cf71acbe1bfcaa1ecd7e87fe5dfde180d951922e60dd8203ff210c995eb54bb981f7e931f0b1f52dce0cf1b2eba503f" );
6853  iv_len = unhexify( iv_str, "903b2eeb9d0b3794acb7439d341cfe0d" );
6854  add_len = unhexify( add_str, "83e99497bfbe9393b065b0b18c13f99b67f1fdd724fd5d70cdccd2b8dd658499cb9f57e1a1fe39634ab0869182de085722a79eaabf057aac7b3f3230f51a2f9b48b49d592f02246dacbe915ff9d9a53f7e5332f7a9d89649050b075c07e5e74f281ca1a0dbe632c0aecf3b1911cd6ec4f8facc2777d0d14784bf5951a1c62c33" );
6855 
6856  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6857  if( 0 == 0 )
6858  {
6859  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
6860  hexify( dst_str, output, pt_len );
6861  hexify( tag_str, tag_output, tag_len );
6862 
6863  fct_chk( strcmp( (char *) dst_str, "63e2941bf4a13374627be66bdd4e57119149f81f4c1a8a321d27a4a79e7d61e2dcec9d7b13fcccf12f5b059cc209f8414ae81966462a266e92b4b3c25198ee240e0bc6f6197df1e24e8d4379fcae89e6240a7f9c7bab886e79990b846e98e4bacb8b3b17422249943e9973de42da5e38e4eb52830b1facce766b3389a5312476" ) == 0 );
6864  fct_chk( strcmp( (char *) tag_str, "6e31c5db3146ae45ef5d50485e" ) == 0 );
6865  }
6866  }
6867  FCT_TEST_END();
6868 
6869 
6870  FCT_TEST_BGN(gcm_nist_validation_aes_25612810241024104_2)
6871  {
6872  unsigned char key_str[128];
6873  unsigned char src_str[128];
6874  unsigned char dst_str[257];
6875  unsigned char iv_str[128];
6876  unsigned char add_str[128];
6877  unsigned char tag_str[128];
6878  unsigned char output[128];
6879  unsigned char tag_output[16];
6880  gcm_context ctx;
6881  unsigned int key_len;
6882  size_t pt_len, iv_len, add_len, tag_len = 104 / 8;
6883 
6884  memset(key_str, 0x00, 128);
6885  memset(src_str, 0x00, 128);
6886  memset(dst_str, 0x00, 257);
6887  memset(iv_str, 0x00, 128);
6888  memset(add_str, 0x00, 128);
6889  memset(tag_str, 0x00, 128);
6890  memset(output, 0x00, 128);
6891  memset(tag_output, 0x00, 16);
6892 
6893  key_len = unhexify( key_str, "dec062efc1bd2556b87a81143d025abbaa532c586d5ebb065859a2071f8f07e4" );
6894  pt_len = unhexify( src_str, "02191bcb060e61827dbddac6c2961dbab8812cdc2ac77bf0275628e8e36bae18ad4deb77b2682ade0aef76afd4592173ba29dae4d0735963c803856eaa6f60a6c21785358e87f3c4a91e321c59e04c150297de873679194ba5ca857f7d91ffc358e73810d555ebd4dbd1fe4fbc4ffa4ff38e4b41db9af0a84fe9828708631469" );
6895  iv_len = unhexify( iv_str, "19abd0361443c3ac2a46f2606eeb1a69" );
6896  add_len = unhexify( add_str, "c3785e7c0095726fd1f3ca842057b0ea2baf9c3fe1119c2147609158a2039f26cedf8a44e046955ba7e7cad9f48cb49274fc53b109d7897e080af252e7dc64807c276bcf668d2cd505c9ce8e584609d293ebd2a4515bfbaf78c413d6e29dc90974db38b564ffe9a40d3955dba9f19b6f39bf942669cf80e4676d6c10df566ca1" );
6897 
6898  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6899  if( 0 == 0 )
6900  {
6901  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
6902  hexify( dst_str, output, pt_len );
6903  hexify( tag_str, tag_output, tag_len );
6904 
6905  fct_chk( strcmp( (char *) dst_str, "91a16c7fe029e3fddacf0809dde7d041c438977b89192e6fed7605d0133f3d9e810355d186432f6529bd2c4cb9dadb4fedf5128cb45e25a3a46bf74ed93f31349f64a69dbe86592d76e437947f1c1d7270d1cffe80afe10ae8523541961eacee1838c168a2ab76703ea4674a68a96b8a298a672ffc140e98e452d501fd57f000" ) == 0 );
6906  fct_chk( strcmp( (char *) tag_str, "5b4071a4be0543aaa59b56de35" ) == 0 );
6907  }
6908  }
6909  FCT_TEST_END();
6910 
6911 
6912  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102496_0)
6913  {
6914  unsigned char key_str[128];
6915  unsigned char src_str[128];
6916  unsigned char dst_str[257];
6917  unsigned char iv_str[128];
6918  unsigned char add_str[128];
6919  unsigned char tag_str[128];
6920  unsigned char output[128];
6921  unsigned char tag_output[16];
6922  gcm_context ctx;
6923  unsigned int key_len;
6924  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
6925 
6926  memset(key_str, 0x00, 128);
6927  memset(src_str, 0x00, 128);
6928  memset(dst_str, 0x00, 257);
6929  memset(iv_str, 0x00, 128);
6930  memset(add_str, 0x00, 128);
6931  memset(tag_str, 0x00, 128);
6932  memset(output, 0x00, 128);
6933  memset(tag_output, 0x00, 16);
6934 
6935  key_len = unhexify( key_str, "9b7b700d978e33ae9311b206347f488e2832fad5ce7e6026ad5e24fb47104fcb" );
6936  pt_len = unhexify( src_str, "37aef6e4200c6abc3d161daaf9dd6ede002ce8c63d9ed54e8ac56bdc8d36906bea663d2857d8d543166ba150827735ec78e37f92e682275e268d377b1880970df232162e55c9311882f889e7d183e5cf4972691c85f81c47e1224b9c97ee3963d75c6a032270ad6d713c999913f0b58a2d4f42b85a3b0b40541a31398cdfb4b0" );
6937  iv_len = unhexify( iv_str, "d0bbc284af767af9a31b863d66cb6138" );
6938  add_len = unhexify( add_str, "dfb87a65ab2d99d7d753042aa47448ad830e546d298d6ad52b85207bbb0cbe8cf3cdb12b3544f1fc228fdae04a241abf9e71de8ae14f2de2c261469c383c682e13582e07cddb1ed9bff1fd2aa0be7978096a914676dfbe7bec6edd927362f656ce1de86229bc511cfec4cda77a1e761e7ab8664e4df08cb820ebdb604c2cdbb0" );
6939 
6940  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6941  if( 0 == 0 )
6942  {
6943  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
6944  hexify( dst_str, output, pt_len );
6945  hexify( tag_str, tag_output, tag_len );
6946 
6947  fct_chk( strcmp( (char *) dst_str, "dcd5575d94fffc647d4c081e3ce03928651419a32ada2af02de2f58d68fa98eb1fd5ef671875719a9c65b9ecc69513408a79a0a5d57cabd04f8e651f5b8fc1ff42ce58d8a212ac2bcb83c5c53c542c282553a62b4e3d7d4f049ab13172739a0f46e0a2fd9aec54eb0c84141c6b341783754372df69d39e48cc24eb3d9ddb21a9" ) == 0 );
6948  fct_chk( strcmp( (char *) tag_str, "4a7ac79db94b27469b92343a" ) == 0 );
6949  }
6950  }
6951  FCT_TEST_END();
6952 
6953 
6954  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102496_1)
6955  {
6956  unsigned char key_str[128];
6957  unsigned char src_str[128];
6958  unsigned char dst_str[257];
6959  unsigned char iv_str[128];
6960  unsigned char add_str[128];
6961  unsigned char tag_str[128];
6962  unsigned char output[128];
6963  unsigned char tag_output[16];
6964  gcm_context ctx;
6965  unsigned int key_len;
6966  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
6967 
6968  memset(key_str, 0x00, 128);
6969  memset(src_str, 0x00, 128);
6970  memset(dst_str, 0x00, 257);
6971  memset(iv_str, 0x00, 128);
6972  memset(add_str, 0x00, 128);
6973  memset(tag_str, 0x00, 128);
6974  memset(output, 0x00, 128);
6975  memset(tag_output, 0x00, 16);
6976 
6977  key_len = unhexify( key_str, "ce15e61edd9320ceacbf3984d87c707159caa738e7e76285be00b5a95954b523" );
6978  pt_len = unhexify( src_str, "8af4a7d92441ce931815fa4e24d69f66256fec7e62f79a029b684b5db304a46b2a3d3a7ee8d6b7ae38caa7de526d5c0f28dc65a0913a383b7ee1640cbe24997ba95b9b12fa1e9ce9f9100d883c16b6286dce17e381af15113f56197c97fe6b45be00a3df05045f476829d7b303211ac97cf989a18c16e27fbf23570d9d18f04b" );
6979  iv_len = unhexify( iv_str, "b1269c8495ea1469ff41d8154ae6765e" );
6980  add_len = unhexify( add_str, "0ad26a08a5cc2ec825347d7ffd5aac795eb68aa7e22970d991c863fa6d1fa720137aa5cde4e382625a0038e6ed72da3b5003c1b2a953c2b2138e0cf870cca4afb595c0451aa793fb0a2bc43834a0aca1e760590cca765ad672ead975993f82ae6765c5afbddc6062d7c4babebf650ab097db1a1d9a2a99e8fd2e0eb8a7b916f6" );
6981 
6982  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
6983  if( 0 == 0 )
6984  {
6985  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
6986  hexify( dst_str, output, pt_len );
6987  hexify( tag_str, tag_output, tag_len );
6988 
6989  fct_chk( strcmp( (char *) dst_str, "ad0ab4e77257866e4a57cf44fa4049428e56a6e8b8fd47b4cd00bfce84fa8f5a43f1df2061b0a37311b4a1436bad0d61d52ced5e262ed41a7eb125d61cec2e3fbaa95e533b43f318048096ebc8466f0cd609bb5e7c3fc6e5701aace546618a170f88c0b7ed76b63759ca4e4b931a86ac379dd12ad2cba7d47a19a3ae7c242fb0" ) == 0 );
6990  fct_chk( strcmp( (char *) tag_str, "fb1e988f9c97358a17e35e6f" ) == 0 );
6991  }
6992  }
6993  FCT_TEST_END();
6994 
6995 
6996  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102496_2)
6997  {
6998  unsigned char key_str[128];
6999  unsigned char src_str[128];
7000  unsigned char dst_str[257];
7001  unsigned char iv_str[128];
7002  unsigned char add_str[128];
7003  unsigned char tag_str[128];
7004  unsigned char output[128];
7005  unsigned char tag_output[16];
7006  gcm_context ctx;
7007  unsigned int key_len;
7008  size_t pt_len, iv_len, add_len, tag_len = 96 / 8;
7009 
7010  memset(key_str, 0x00, 128);
7011  memset(src_str, 0x00, 128);
7012  memset(dst_str, 0x00, 257);
7013  memset(iv_str, 0x00, 128);
7014  memset(add_str, 0x00, 128);
7015  memset(tag_str, 0x00, 128);
7016  memset(output, 0x00, 128);
7017  memset(tag_output, 0x00, 16);
7018 
7019  key_len = unhexify( key_str, "aef24b8205d4085d978505f04724293c2819ef9f3f03a6c758078690fc4bf7c8" );
7020  pt_len = unhexify( src_str, "db26453170db2f984312e0cf961d1a7df1154f0525c31f166be5c9f516736501f9f2dd8096a69b6441888ce27aaceacb0b365a38e4e01e2e34027c023206e814f22d46fd2fa69f87509ddced4b8852a76b2532b92f069b8c922ac13b2b7f19cb7c524657a4ee6e989cf2598bef674aa31576776853fb7f9a2704d6b3ee7fbcbb" );
7021  iv_len = unhexify( iv_str, "81456baa337c3dfd162d9c5f72a2e216" );
7022  add_len = unhexify( add_str, "484a5f4772643cf74ccdced0e5d80862f9300f26ae3139968649d3d7bb761b313f2ba63798b2040d397c3d1569285fee8498fd9254851c15b98af5bd351fa72e7d574c62ede0d728e1279e8b4e4784fd63ea7851e99d1d2356bcbf868528f8d0a90fc3b884ece631648d916ec97abadca1b0dd7670e6ad42245021570582ec7c" );
7023 
7024  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7025  if( 0 == 0 )
7026  {
7027  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
7028  hexify( dst_str, output, pt_len );
7029  hexify( tag_str, tag_output, tag_len );
7030 
7031  fct_chk( strcmp( (char *) dst_str, "da95c61cd2bb88fea78c059c254d2b949d4fc291c73ac178ace44c1e6a339f64931c857d3a7cb276a04993620adb6918dfd3f9083edad384a8e6c1d4799d526a1c969d8deb0e2667d6d06f559baf914b49fc463244528aa6522d19699065438d939521d7d7bb149835298f2054bcaae6d786f6dde133b640697a3d37c697579a" ) == 0 );
7032  fct_chk( strcmp( (char *) tag_str, "bc1c1cbcad2e1a66ace079a2" ) == 0 );
7033  }
7034  }
7035  FCT_TEST_END();
7036 
7037 
7038  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102464_0)
7039  {
7040  unsigned char key_str[128];
7041  unsigned char src_str[128];
7042  unsigned char dst_str[257];
7043  unsigned char iv_str[128];
7044  unsigned char add_str[128];
7045  unsigned char tag_str[128];
7046  unsigned char output[128];
7047  unsigned char tag_output[16];
7048  gcm_context ctx;
7049  unsigned int key_len;
7050  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
7051 
7052  memset(key_str, 0x00, 128);
7053  memset(src_str, 0x00, 128);
7054  memset(dst_str, 0x00, 257);
7055  memset(iv_str, 0x00, 128);
7056  memset(add_str, 0x00, 128);
7057  memset(tag_str, 0x00, 128);
7058  memset(output, 0x00, 128);
7059  memset(tag_output, 0x00, 16);
7060 
7061  key_len = unhexify( key_str, "9685aea9aaebbd691e679779034729306d5887bee4c1f90f6ee3a397a0ff3ece" );
7062  pt_len = unhexify( src_str, "ae3b2fa1e209f72c167eb16bc15b7669b87d4ab516e428157810b87a83e90d56e267bd4996522b5b22c2a349d3765ca27ea27057dd71f7c18ddd053033bd780b6cb689f48c383e9c717b9b265cb9e32c70c4a7d8fb933e986d996b5ad914cd645b74c47ac3a0de952ee3fc73ada83d896da7ca0b2a0b10e4f701fa13cba9ec50" );
7063  iv_len = unhexify( iv_str, "b1bc140531ae8c69e2ffc784e0988038" );
7064  add_len = unhexify( add_str, "294ff858fa6efc82ca3be4d05332bbb951a71a7ddfa4b78472e1582b445312eec11793d8d6e1e858d9cb078b5fc9083ac8a3e3bd82964cb07c08450567922299f68fd47663c7a77c29f2b5347f229301433d5a75263158a0d80095859e7e45476b99b23412046bfbe4eafff9f7820ba49919d2c987cf00c286c784e7669d8fe8" );
7065 
7066  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7067  if( 0 == 0 )
7068  {
7069  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
7070  hexify( dst_str, output, pt_len );
7071  hexify( tag_str, tag_output, tag_len );
7072 
7073  fct_chk( strcmp( (char *) dst_str, "6575128b576e68f7b3709e325b3d616783b42ff7f7631eb62b90cb0c8a86bd324756f43af53c33cbdaf9cf64ea94cf1b7fab5003f00c1d07f3fc8eb1931d759f9c43477ba22311a111488092c42b7786facf42b861a824cd1bcdc603a77d11253f15206a929a3e16e8737d080b8e5f0da8896226989a9964d72e491187250472" ) == 0 );
7074  fct_chk( strcmp( (char *) tag_str, "f78c4dd37c06b197" ) == 0 );
7075  }
7076  }
7077  FCT_TEST_END();
7078 
7079 
7080  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102464_1)
7081  {
7082  unsigned char key_str[128];
7083  unsigned char src_str[128];
7084  unsigned char dst_str[257];
7085  unsigned char iv_str[128];
7086  unsigned char add_str[128];
7087  unsigned char tag_str[128];
7088  unsigned char output[128];
7089  unsigned char tag_output[16];
7090  gcm_context ctx;
7091  unsigned int key_len;
7092  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
7093 
7094  memset(key_str, 0x00, 128);
7095  memset(src_str, 0x00, 128);
7096  memset(dst_str, 0x00, 257);
7097  memset(iv_str, 0x00, 128);
7098  memset(add_str, 0x00, 128);
7099  memset(tag_str, 0x00, 128);
7100  memset(output, 0x00, 128);
7101  memset(tag_output, 0x00, 16);
7102 
7103  key_len = unhexify( key_str, "3adf0da24394a98c7beae01d28f261a9cbd887aeeecc0c29e84540264d5a6bad" );
7104  pt_len = unhexify( src_str, "8cf023d717b0f82f2b81750b53fb665c1c90f4740af4a3534b36b847df33ba5eec19eb24ead70a4b613a82572878216181d59b0c4c4df99be08d021cf182724d8ff5ec4e85884d0f69c16238fbbdbc5529ffcc4e418405e4e95139f79d3115a1ac56820cd39fc413ab72f7d447f947cb0541fc2be261f1246c0a786199013b22" );
7105  iv_len = unhexify( iv_str, "ad41288817577316df2d881ac93fcdef" );
7106  add_len = unhexify( add_str, "ad33ce922372fbe3531c0dece69f85f18eb1bbfb09a178403832308de0e54b1010db2636c4b7d9caa478138f61db5149c9fd7f3b45b7a1876729fe67622a37f0b322ef9cf6043b301a5d4c81e6f347d22bd3e40722059d3be945845c6b0629fbcfcaf885c7f393aa81f242c48c61a439574761ef6b671972cac664403250750e" );
7107 
7108  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7109  if( 0 == 0 )
7110  {
7111  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
7112  hexify( dst_str, output, pt_len );
7113  hexify( tag_str, tag_output, tag_len );
7114 
7115  fct_chk( strcmp( (char *) dst_str, "9d465e9c4228323946b1261892243d8455edb9eb8633d026d4033fa3965d20730979ba6952c0f6f2c5768f03c19256b64bc759d2e7b92424bbc668308504ba34384c2bb37baaf91a3a4f0952a050a3d69853141b49e86eda3bf0c4db4ebcd1c41e7f13eca20bf574a47ec45b8c98def17c0741805bf8f37923ba2b5221428578" ) == 0 );
7116  fct_chk( strcmp( (char *) tag_str, "507618cec6d03964" ) == 0 );
7117  }
7118  }
7119  FCT_TEST_END();
7120 
7121 
7122  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102464_2)
7123  {
7124  unsigned char key_str[128];
7125  unsigned char src_str[128];
7126  unsigned char dst_str[257];
7127  unsigned char iv_str[128];
7128  unsigned char add_str[128];
7129  unsigned char tag_str[128];
7130  unsigned char output[128];
7131  unsigned char tag_output[16];
7132  gcm_context ctx;
7133  unsigned int key_len;
7134  size_t pt_len, iv_len, add_len, tag_len = 64 / 8;
7135 
7136  memset(key_str, 0x00, 128);
7137  memset(src_str, 0x00, 128);
7138  memset(dst_str, 0x00, 257);
7139  memset(iv_str, 0x00, 128);
7140  memset(add_str, 0x00, 128);
7141  memset(tag_str, 0x00, 128);
7142  memset(output, 0x00, 128);
7143  memset(tag_output, 0x00, 16);
7144 
7145  key_len = unhexify( key_str, "9ef64b4132db54668568e2ae66ab61f62a820c7002a67a7e42006280a373feba" );
7146  pt_len = unhexify( src_str, "4b96dce753273188c4cca3386a7415d5d9263757376e1f32797df47992e92e1bc0ab0833363b3acffde22602d4e47307bc8f252944414a15e1398693fd3b8bf4d8101cdcf70ce2c9de8cb7f5bb17cd83f09b1bc78ba07c34b9214e250c5940e9794199cb392309027d5ab4f32b51c533db6732024bd412f2cb0c5178d5296aa5" );
7147  iv_len = unhexify( iv_str, "07a86dbe2cce040eccdad79b3d211ecc" );
7148  add_len = unhexify( add_str, "af7a75748ee293015b600ca82ccc7718f4ecc20c3a2357ee02fb726330a0d79ca8bb97979bc0c89f4c60d7154f8bd29ba6ec5f2f4be286ea8a258cf6bd39b4f42d6db8e70c99ec3af26bb4d8003dc6fd0fdfbbc620d511d4d5f09ddf975a1663ac2979ae0978b0bc1e7bfcd660ae4ac7f1a8f6d8ee35752ed59a604f07dfda53" );
7149 
7150  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7151  if( 0 == 0 )
7152  {
7153  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
7154  hexify( dst_str, output, pt_len );
7155  hexify( tag_str, tag_output, tag_len );
7156 
7157  fct_chk( strcmp( (char *) dst_str, "e3e862146b6fb48b01ababc462dd560298eea7bfe5f3248e28a908d1de08c7e91fcf63922c394e7a51b64f4382225093e78598c050e588ff4ad38f3e83dc07b77ce569c6ab8f8a9cb0056b3155aa1503cebeb64c86d6d9cdbb178ea9a01a8ba33a1c48beb92ee4cf60e7dedf986019e19089cd186c98c229b0ff42c9e1aca571" ) == 0 );
7158  fct_chk( strcmp( (char *) tag_str, "8614c216055c0660" ) == 0 );
7159  }
7160  }
7161  FCT_TEST_END();
7162 
7163 
7164  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102432_0)
7165  {
7166  unsigned char key_str[128];
7167  unsigned char src_str[128];
7168  unsigned char dst_str[257];
7169  unsigned char iv_str[128];
7170  unsigned char add_str[128];
7171  unsigned char tag_str[128];
7172  unsigned char output[128];
7173  unsigned char tag_output[16];
7174  gcm_context ctx;
7175  unsigned int key_len;
7176  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
7177 
7178  memset(key_str, 0x00, 128);
7179  memset(src_str, 0x00, 128);
7180  memset(dst_str, 0x00, 257);
7181  memset(iv_str, 0x00, 128);
7182  memset(add_str, 0x00, 128);
7183  memset(tag_str, 0x00, 128);
7184  memset(output, 0x00, 128);
7185  memset(tag_output, 0x00, 16);
7186 
7187  key_len = unhexify( key_str, "f14ac79f35bc5a685433eea5bb7fd69fc959aabda24cbd8b7795fb2e41f90ab0" );
7188  pt_len = unhexify( src_str, "8a20da14819079960b77ed5e548d0aa0bdcffb752817c1abe4195e612cfbb58c8e5a8af69f75bad10ee8afdf0b0d5c46c4dc11c32bff16d5e7e82e77fd80e475c6a5a0be36718af232697ab22314306b8ee32484b3461da657710c06170e80a6a8844f898c2be29366c8430f2392d100ffd419603cbce406dc7315577e6e9ee2" );
7189  iv_len = unhexify( iv_str, "353e1d08edce44c966430513cb7a0383" );
7190  add_len = unhexify( add_str, "cb1dde4ff5a6867038c170192fc2d292f5bb349d5b9a903cf3d88c09ce78fb1f4a776ff7588a25abb5e5f6a44791d7296afef3f32ed31db1def37dd25be0570a204955121f9c65b79a3ea88fc452dbcb82719243c11bc27e3408adf802b6e8b4e701ee4e9dfd140cb3277bf605bd5fb757d2325f7805fc6f0d1ea5a6207fac5f" );
7191 
7192  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7193  if( 0 == 0 )
7194  {
7195  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
7196  hexify( dst_str, output, pt_len );
7197  hexify( tag_str, tag_output, tag_len );
7198 
7199  fct_chk( strcmp( (char *) dst_str, "49b5e4ea0421034c074cde67dd39a0310c3f31e8138672ba2ecc0777be542f1c6529836d5206b79dac83d96aab56787a35c584b31228f007f11630328c3f40a57be37487689ee5babb576e7d14ff0f1f1ba6e4be11637352a4336327681058b99df2e44f9772de4e0e456d2e34dec5eeb335b238e862841d166e0612cc0f18f3" ) == 0 );
7200  fct_chk( strcmp( (char *) tag_str, "88aed643" ) == 0 );
7201  }
7202  }
7203  FCT_TEST_END();
7204 
7205 
7206  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102432_1)
7207  {
7208  unsigned char key_str[128];
7209  unsigned char src_str[128];
7210  unsigned char dst_str[257];
7211  unsigned char iv_str[128];
7212  unsigned char add_str[128];
7213  unsigned char tag_str[128];
7214  unsigned char output[128];
7215  unsigned char tag_output[16];
7216  gcm_context ctx;
7217  unsigned int key_len;
7218  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
7219 
7220  memset(key_str, 0x00, 128);
7221  memset(src_str, 0x00, 128);
7222  memset(dst_str, 0x00, 257);
7223  memset(iv_str, 0x00, 128);
7224  memset(add_str, 0x00, 128);
7225  memset(tag_str, 0x00, 128);
7226  memset(output, 0x00, 128);
7227  memset(tag_output, 0x00, 16);
7228 
7229  key_len = unhexify( key_str, "b55ac909e73989e310ae37d13c54bbd5a126f419a3b01a2ad8961d89bd247f81" );
7230  pt_len = unhexify( src_str, "8a663e8b21a027c4a9545d145d42d9c67b4fcd5d0e39aa68822aedbd609e2c681f60e6315035321de739858b2b082bc05551fe9b8456c2e89c6151282c6068b915eae5762e4d6d765d667de58a315e061b3d60035ada50f59258eb6e2a1cd6b52eea7eb9d404fd96e71f19feff65b74a4b4f07061adf7c1b0e54e2ece7a2cd49" );
7231  iv_len = unhexify( iv_str, "9328abab0d3f63c75ddafd8559d96b4f" );
7232  add_len = unhexify( add_str, "cbae20aa1996abb62471aac91cd78080953fbe3b165d4c9435832ef1106e7e3424db8850f44a431c289ab4f2bbbea9e5c0c7aaf2e8de69c0ced176283662cadd280d8fda0c859551f0f90893ca57695c95803a1546826922ac78703d7ccae285b7ccd4bbab551756cccc6869dcf34b6af8d8b80c25c6fb1d2caa7f28161fb854" );
7233 
7234  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7235  if( 0 == 0 )
7236  {
7237  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
7238  hexify( dst_str, output, pt_len );
7239  hexify( tag_str, tag_output, tag_len );
7240 
7241  fct_chk( strcmp( (char *) dst_str, "457e13ff4eeaaae75d14bbf1bff91706c3168b9b146aed29dbe31b12ad90c1c158833be95701229ac6e4a13997e0a2d961d4a0021c4d8920ec54a9a935e5ea73b17e8fa60559df76bd07d966dfa7d86d1a77a313228b2ae7f66b5b696726c02af2c808bf75e0b9591a220e762f57c680ca68f20b2b5413b07731bbd49de039bf" ) == 0 );
7242  fct_chk( strcmp( (char *) tag_str, "5de0434a" ) == 0 );
7243  }
7244  }
7245  FCT_TEST_END();
7246 
7247 
7248  FCT_TEST_BGN(gcm_nist_validation_aes_2561281024102432_2)
7249  {
7250  unsigned char key_str[128];
7251  unsigned char src_str[128];
7252  unsigned char dst_str[257];
7253  unsigned char iv_str[128];
7254  unsigned char add_str[128];
7255  unsigned char tag_str[128];
7256  unsigned char output[128];
7257  unsigned char tag_output[16];
7258  gcm_context ctx;
7259  unsigned int key_len;
7260  size_t pt_len, iv_len, add_len, tag_len = 32 / 8;
7261 
7262  memset(key_str, 0x00, 128);
7263  memset(src_str, 0x00, 128);
7264  memset(dst_str, 0x00, 257);
7265  memset(iv_str, 0x00, 128);
7266  memset(add_str, 0x00, 128);
7267  memset(tag_str, 0x00, 128);
7268  memset(output, 0x00, 128);
7269  memset(tag_output, 0x00, 16);
7270 
7271  key_len = unhexify( key_str, "1477e189fb3546efac5cc144f25e132ffd0081be76e912e25cbce7ad63f1c2c4" );
7272  pt_len = unhexify( src_str, "7bd3ea956f4b938ebe83ef9a75ddbda16717e924dd4e45202560bf5f0cffbffcdd23be3ae08ff30503d698ed08568ff6b3f6b9fdc9ea79c8e53a838cc8566a8b52ce7c21b2b067e778925a066c970a6c37b8a6cfc53145f24bf698c352078a7f0409b53196e00c619237454c190b970842bb6629c0def7f166d19565127cbce0" );
7273  iv_len = unhexify( iv_str, "c109f35893aff139db8ed51c85fee237" );
7274  add_len = unhexify( add_str, "8f7f9f71a4b2bb0aaf55fced4eb43c57415526162070919b5f8c08904942181820d5847dfd54d9ba707c5e893a888d5a38d0130f7f52c1f638b0119cf7bc5f2b68f51ff5168802e561dff2cf9c5310011c809eba002b2fa348718e8a5cb732056273cc7d01cce5f5837ab0b09b6c4c5321a7f30a3a3cd21f29da79fce3f3728b" );
7275 
7276  fct_chk( gcm_init( &ctx, key_str, key_len * 8 ) == 0 );
7277  if( 0 == 0 )
7278  {
7279  fct_chk( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
7280  hexify( dst_str, output, pt_len );
7281  hexify( tag_str, tag_output, tag_len );
7282 
7283  fct_chk( strcmp( (char *) dst_str, "7841e3d78746f07e5614233df7175931e3c257e09ebd7b78545fae484d835ffe3db3825d3aa1e5cc1541fe6cac90769dc5aaeded0c148b5b4f397990eb34b39ee7881804e5a66ccc8d4afe907948780c4e646cc26479e1da874394cb3537a8f303e0aa13bd3cc36f6cc40438bcd41ef8b6a1cdee425175dcd17ee62611d09b02" ) == 0 );
7284  fct_chk( strcmp( (char *) tag_str, "cb13ce59" ) == 0 );
7285  }
7286  }
7287  FCT_TEST_END();
7288 
7289  }
7290  FCT_SUITE_END();
7291 
7292 #endif /* POLARSSL_GCM_C */
7293 
7294 }
7295 FCT_END();
7296