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;
- }
- }
|