Fix 3DES Monte Carlo test file output which previously outputted
authorDr. Stephen Henson <steve@openssl.org>
Sun, 11 Sep 2011 18:05:40 +0000 (18:05 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Sun, 11 Sep 2011 18:05:40 +0000 (18:05 +0000)
extra bogus lines. Update fipsalgtest.pl to tolerate the old format.

fips/des/fips_desmovs.c
fips/fipsalgtest.pl

index ee65e09..30fa01f 100644 (file)
@@ -177,7 +177,6 @@ static void do_mct(char *amode,
        printf("Unrecognized mode: %s\n", amode);
        EXIT(1);
        }
-
     for(i=0 ; i < 400 ; ++i)
        {
        int j;
@@ -277,7 +276,7 @@ static int proc_file(char *rqfile, char *rspfile)
     char atest[100] = "";
     int akeysz=0;
     unsigned char iVec[20], aKey[40];
-    int dir = -1, err = 0, step = 0;
+    int dir = -1, err = 0, step = 0, echo = 1;
     unsigned char plaintext[2048];
     unsigned char ciphertext[2048];
     char *rp;
@@ -383,6 +382,8 @@ static int proc_file(char *rqfile, char *rspfile)
                        n = strlen(xp+1)-1;
                        strncpy(amode, xp+1, n);
                        amode[n] = '\0';
+                       if (!strcmp(atest, "Monte"))
+                               echo = 0;
                        /* amode[3] = '\0'; */
                        if (VERBOSE)
                                printf("Test=%s, Mode=%s\n",atest,amode);
@@ -439,8 +440,8 @@ static int proc_file(char *rqfile, char *rspfile)
                numkeys=atoi(ibuf+10);
                break;
                }
-         
-           fputs(ibuf, rfp);
+           if (echo) 
+               fputs(ibuf, rfp);
            if(!fips_strncasecmp(ibuf,"KEY = ",6))
                {
                akeysz=64;
@@ -495,7 +496,8 @@ static int proc_file(char *rqfile, char *rspfile)
            break;
 
        case 3: /* IV = xxxx */
-           fputs(ibuf, rfp);
+           if (echo)
+               fputs(ibuf, rfp);
            if (fips_strncasecmp(ibuf, "IV = ", 5) != 0)
                {
                printf("Missing IV\n");
@@ -516,7 +518,8 @@ static int proc_file(char *rqfile, char *rspfile)
            break;
 
        case 4: /* PLAINTEXT = xxxx */
-           fputs(ibuf, rfp);
+           if (echo)
+               fputs(ibuf, rfp);
            if (fips_strncasecmp(ibuf, "PLAINTEXT = ", 12) != 0)
                {
                printf("Missing PLAINTEXT\n");
@@ -558,7 +561,8 @@ static int proc_file(char *rqfile, char *rspfile)
            break;
 
        case 5: /* CIPHERTEXT = xxxx */
-           fputs(ibuf, rfp);
+           if (echo)
+               fputs(ibuf, rfp);
            if (fips_strncasecmp(ibuf, "CIPHERTEXT = ", 13) != 0)
                {
                printf("Missing KEY\n");
index 4ab2c96..39ec001 100644 (file)
@@ -1090,6 +1090,7 @@ sub cmp_file {
     my ( $tname, $rsp, $tst ) = @_;
     my ( $rspf,    $tstf );
     my ( $rspline, $tstline );
+    my $monte = 0;
     if ( !open( $rspf, $rsp ) ) {
         print STDERR "ERROR: can't open request file $rsp\n";
         return 0;
@@ -1098,6 +1099,7 @@ sub cmp_file {
         print STDERR "ERROR: can't open output file $tst\n";
         return 0;
     }
+    $monte = 1 if ($rsp =~ /Monte[123]/);
     for ( ; ; ) {
         $rspline = next_line($rspf);
         $tstline = next_line($tstf);
@@ -1105,6 +1107,21 @@ sub cmp_file {
             print STDERR "DEBUG: $tname file comparison OK\n" if $debug;
             return 1;
         }
+       # Workaround for old broken DES3 MCT format which added bogus
+       # extra lines: after [ENCRYPT] or [DECRYPT] skip until first
+       # COUNT line.
+       if ($monte) {
+               if ($rspline =~ /CRYPT/) {
+                       do {
+                               $rspline = next_line($rspf);
+                       } while (defined($rspline) && $rspline !~ /COUNT/);
+               }
+               if ($tstline =~ /CRYPT/) {
+                       do {
+                               $tstline = next_line($tstf);
+                       } while (defined($tstline) && $tstline !~ /COUNT/);
+               }
+       }
         if ( !defined($rspline) ) {
             print STDERR "ERROR: $tname EOF on $rsp\n";
             return 0;