gen_gcm_encrypt.pl 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #!/usr/bin/perl
  2. #
  3. # Based on NIST gcmEncryptIntIVxxx.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. my $cnt = 1;;
  34. while (my $line = <TEST_DATA>)
  35. {
  36. my $key_len = get_suite_val("Keylen");
  37. next if ($key_len !~ /\d+/);
  38. my $iv_len = get_suite_val("IVlen");
  39. my $pt_len = get_suite_val("PTlen");
  40. my $add_len = get_suite_val("AADlen");
  41. my $tag_len = get_suite_val("Taglen");
  42. for ($cnt = 0; $cnt < 3; $cnt++)
  43. {
  44. my $Count = get_val("Count");
  45. my $key = get_val("Key");
  46. my $pt = get_val("PT");
  47. my $add = get_val("AAD");
  48. my $iv = get_val("IV");
  49. my $ct = get_val("CT");
  50. my $tag = get_val("Tag");
  51. print("GCM NIST Validation (AES-$key_len,$iv_len,$pt_len,$add_len,$tag_len) #$Count\n");
  52. print("gcm_encrypt_and_tag");
  53. print(":\"$key\"");
  54. print(":\"$pt\"");
  55. print(":\"$iv\"");
  56. print(":\"$add\"");
  57. print(":\"$ct\"");
  58. print(":$tag_len");
  59. print(":\"$tag\"");
  60. print(":0");
  61. print("\n\n");
  62. }
  63. }
  64. print("GCM Selftest\n");
  65. print("gcm_selftest:\n\n");
  66. close(TEST_DATA);