gen_gcm_decrypt.pl 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #!/usr/bin/perl
  2. #
  3. # Based on NIST gcmDecryptxxx.rsp validation files
  4. # Only first 3 of every set used for compile time saving
  5. use strict;
  6. my $file = shift;
  7. open(TEST_DATA, "$file") or die "Opening test cases '$file': $!";
  8. sub get_suite_val($)
  9. {
  10. my $name = shift;
  11. my $val = "";
  12. while(my $line = <TEST_DATA>)
  13. {
  14. next if ($line !~ /^\[/);
  15. ($val) = ($line =~ /\[$name\s\=\s(\w+)\]/);
  16. last;
  17. }
  18. return $val;
  19. }
  20. sub get_val($)
  21. {
  22. my $name = shift;
  23. my $val = "";
  24. my $line;
  25. while($line = <TEST_DATA>)
  26. {
  27. next if($line !~ /=/);
  28. last;
  29. }
  30. ($val) = ($line =~ /^$name = (\w+)/);
  31. return $val;
  32. }
  33. sub get_val_or_fail($)
  34. {
  35. my $name = shift;
  36. my $val = "FAIL";
  37. my $line;
  38. while($line = <TEST_DATA>)
  39. {
  40. next if($line !~ /=/ && $line !~ /FAIL/);
  41. last;
  42. }
  43. ($val) = ($line =~ /^$name = (\w+)/) if ($line =~ /=/);
  44. return $val;
  45. }
  46. my $cnt = 1;;
  47. while (my $line = <TEST_DATA>)
  48. {
  49. my $key_len = get_suite_val("Keylen");
  50. next if ($key_len !~ /\d+/);
  51. my $iv_len = get_suite_val("IVlen");
  52. my $pt_len = get_suite_val("PTlen");
  53. my $add_len = get_suite_val("AADlen");
  54. my $tag_len = get_suite_val("Taglen");
  55. for ($cnt = 0; $cnt < 3; $cnt++)
  56. {
  57. my $Count = get_val("Count");
  58. my $key = get_val("Key");
  59. my $iv = get_val("IV");
  60. my $ct = get_val("CT");
  61. my $add = get_val("AAD");
  62. my $tag = get_val("Tag");
  63. my $pt = get_val_or_fail("PT");
  64. print("GCM NIST Validation (AES-$key_len,$iv_len,$pt_len,$add_len,$tag_len) #$Count\n");
  65. print("gcm_decrypt_and_verify");
  66. print(":\"$key\"");
  67. print(":\"$ct\"");
  68. print(":\"$iv\"");
  69. print(":\"$add\"");
  70. print(":$tag_len");
  71. print(":\"$tag\"");
  72. print(":\"$pt\"");
  73. print(":0");
  74. print("\n\n");
  75. }
  76. }
  77. print("GCM Selftest\n");
  78. print("gcm_selftest:\n\n");
  79. close(TEST_DATA);