| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 | 
							- #! /usr/bin/env perl
 
- # Copyright 2019 The OpenSSL Project Authors. All Rights Reserved.
 
- #
 
- # Licensed under the Apache License 2.0 (the "License").  You may not use
 
- # this file except in compliance with the License.  You can obtain a copy
 
- # in the file LICENSE in the source distribution or at
 
- # https://www.openssl.org/source/license.html
 
- #Convert CCM CAVS test vectors to a format suitable for evp_test
 
- use strict;
 
- use warnings;
 
- my $alg;
 
- my $mode;
 
- my $keylen;
 
- my $key = "";
 
- my $iv = "";
 
- my $aad = "";
 
- my $ct = "";
 
- my $pt = "";
 
- my $tag = "";
 
- my $aadlen = 0;
 
- my $ptlen = 0;
 
- my $taglen = 0;
 
- my $res = "";
 
- my $intest = 0;
 
- my $fixediv = 0;
 
- while (<STDIN>)
 
- {
 
-     chomp;
 
-     # Pull out the cipher mode from the comment at the beginning of the file
 
-     if(/^#\s*"([^-]+)-\w+" information/) {
 
-         $mode = lc($1);
 
-     # Pull out the key length from the comment at the beginning of the file
 
-     } elsif(/^#\s*(\w+) Keylen: (\d+)/) {
 
-         $alg = lc($1);
 
-         $keylen = $2;
 
-     # Some parameters common to many tests appear as a list in square brackets
 
-     # so parse these
 
-     } elsif(/\[(.*)\]/) {
 
-         my @pairs = split(/, /, $1);
 
-         foreach my $pair (@pairs) {
 
-             $pair =~ /(\w+)\s*=\s*(\d+)/;
 
-             # AAD Length
 
-             if ($1 eq "Alen") {
 
-                 $aadlen = $2;
 
-             # Plaintext length
 
-             } elsif ($1 eq "Plen") {
 
-                 $ptlen = $2;
 
-             # Tag length
 
-             } elsif ($1 eq "Tlen") {
 
-                 $taglen = $2;
 
-             }
 
-         }
 
-     # Key/Value pair
 
-     } elsif (/^\s*(\w+)\s*=\s*(\S.*)\r/) {
 
-         if ($1 eq "Key") {
 
-             $key = $2;
 
-         } elsif ($1 eq "Nonce") {
 
-             $iv = $2;
 
-             if ($intest == 0) {
 
-                 $fixediv = 1;
 
-             } else {
 
-                 $fixediv = 0;
 
-             }
 
-         } elsif ($1 eq "Adata") {
 
-             $aad = $2;
 
-         } elsif ($1 eq "CT") {
 
-             $ct = substr($2, 0, length($2) - ($taglen * 2));
 
-             $tag = substr($2, $taglen * -2);
 
-         } elsif ($1 eq "Payload") {
 
-             $pt = $2;
 
-         } elsif ($1 eq "Result") {
 
-             if ($2 =~ /Fail/) {
 
-                 $res = "CIPHERUPDATE_ERROR";
 
-             }
 
-         } elsif ($1 eq "Count") {
 
-             $intest = 1;
 
-         } elsif ($1 eq "Plen") {
 
-             $ptlen = $2;
 
-         } elsif ($1 eq "Tlen") {
 
-             $taglen = $2;
 
-         } elsif ($1 eq "Alen") {
 
-             $aadlen = $2;
 
-         }
 
-     # Something else - probably just a blank line
 
-     } elsif ($intest) {
 
-         print "Cipher = $alg-$keylen-$mode\n";
 
-         print "Key = $key\n";
 
-         print "IV = $iv\n";
 
-         print "AAD =";
 
-         if ($aadlen > 0) {
 
-             print " $aad";
 
-         }
 
-         print "\nTag =";
 
-         if ($taglen > 0) {
 
-             print " $tag";
 
-         }
 
-         print "\nPlaintext =";
 
-         if ($ptlen > 0) {
 
-             print " $pt";
 
-         }
 
-         print "\nCiphertext = $ct\n";
 
-         if ($res ne "") {
 
-             print "Operation = DECRYPT\n";
 
-             print "Result = $res\n";
 
-         }
 
-         print "\n";
 
-         $res = "";
 
-         if ($fixediv == 0) {
 
-             $iv = "";
 
-         }
 
-         $aad = "";
 
-         $tag = "";
 
-         $pt = "";
 
-         $intest = 0;
 
-     }
 
- }
 
 
  |