Remove fipscanister from Configure, delete fips directory
[openssl.git] / fips / aes / fips_gcmtest.c
diff --git a/fips/aes/fips_gcmtest.c b/fips/aes/fips_gcmtest.c
deleted file mode 100644 (file)
index 9f50857..0000000
+++ /dev/null
@@ -1,571 +0,0 @@
-/* fips/aes/fips_gcmtest.c */
-/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
- * project.
- */
-/* ====================================================================
- * Copyright (c) 2011 The OpenSSL Project.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer. 
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. All advertising materials mentioning features or use of this
- *    software must display the following acknowledgment:
- *    "This product includes software developed by the OpenSSL Project
- *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
- *
- * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
- *    endorse or promote products derived from this software without
- *    prior written permission. For written permission, please contact
- *    licensing@OpenSSL.org.
- *
- * 5. Products derived from this software may not be called "OpenSSL"
- *    nor may "OpenSSL" appear in their names without prior written
- *    permission of the OpenSSL Project.
- *
- * 6. Redistributions of any form whatsoever must retain the following
- *    acknowledgment:
- *    "This product includes software developed by the OpenSSL Project
- *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
- *
- * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
- * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- * ====================================================================
- */
-
-
-#define OPENSSL_FIPSAPI
-#include <openssl/opensslconf.h>
-
-#ifndef OPENSSL_FIPS
-#include <stdio.h>
-
-int main(int argc, char **argv)
-{
-    printf("No FIPS GCM support\n");
-    return(0);
-}
-#else
-
-#include <openssl/bn.h>
-#include <openssl/dsa.h>
-#include <openssl/fips.h>
-#include <openssl/err.h>
-#include <openssl/evp.h>
-#include <string.h>
-#include <ctype.h>
-
-#include "fips_utl.h"
-
-static void gcmtest(FILE *in, FILE *out, int encrypt)
-       {
-       char buf[2048];
-       char lbuf[2048];
-       char *keyword, *value;
-       int keylen = -1, ivlen = -1, aadlen = -1, taglen = -1, ptlen = -1;
-       int rv;
-       long l;
-       unsigned char *key = NULL, *iv = NULL, *aad = NULL, *tag = NULL;
-       unsigned char *ct = NULL, *pt = NULL;
-       EVP_CIPHER_CTX ctx;
-       const EVP_CIPHER *gcm = NULL;
-       FIPS_cipher_ctx_init(&ctx);
-
-       while(fgets(buf,sizeof buf,in) != NULL)
-               {
-               fputs(buf,out);
-               if (!parse_line(&keyword, &value, lbuf, buf))
-                       continue;
-               if(!strcmp(keyword,"[Keylen"))
-                       {
-                       keylen = atoi(value);
-                       if (keylen == 128)
-                               gcm = EVP_aes_128_gcm();
-                       else if (keylen == 192)
-                               gcm = EVP_aes_192_gcm();
-                       else if (keylen == 256)
-                               gcm = EVP_aes_256_gcm();
-                       else 
-                               {
-                               fprintf(stderr, "Unsupported keylen %d\n",
-                                                       keylen);
-                               }
-                       keylen >>= 3;
-                       }
-               else if (!strcmp(keyword, "[IVlen"))
-                       ivlen = atoi(value) >> 3;
-               else if (!strcmp(keyword, "[AADlen"))
-                       aadlen = atoi(value) >> 3;
-               else if (!strcmp(keyword, "[Taglen"))
-                       taglen = atoi(value) >> 3;
-               else if (!strcmp(keyword, "[PTlen"))
-                       ptlen = atoi(value) >> 3;
-               else if(!strcmp(keyword,"Key"))
-                       {
-                       key = hex2bin_m(value, &l);
-                       if (l != keylen)
-                               {
-                               fprintf(stderr, "Inconsistent Key length\n");
-                               exit(1);
-                               }
-                       }
-               else if(!strcmp(keyword,"IV"))
-                       {
-                       iv = hex2bin_m(value, &l);
-                       if (l != ivlen)
-                               {
-                               fprintf(stderr, "Inconsistent IV length\n");
-                               exit(1);
-                               }
-                       }
-               else if(!strcmp(keyword,"PT"))
-                       {
-                       pt = hex2bin_m(value, &l);
-                       if (l != ptlen)
-                               {
-                               fprintf(stderr, "Inconsistent PT length\n");
-                               exit(1);
-                               }
-                       }
-               else if(!strcmp(keyword,"CT"))
-                       {
-                       ct = hex2bin_m(value, &l);
-                       if (l != ptlen)
-                               {
-                               fprintf(stderr, "Inconsistent CT length\n");
-                               exit(1);
-                               }
-                       }
-               else if(!strcmp(keyword,"AAD"))
-                       {
-                       aad = hex2bin_m(value, &l);
-                       if (l != aadlen)
-                               {
-                               fprintf(stderr, "Inconsistent AAD length\n");
-                               exit(1);
-                               }
-                       }
-               else if(!strcmp(keyword,"Tag"))
-                       {
-                       tag = hex2bin_m(value, &l);
-                       if (l != taglen)
-                               {
-                               fprintf(stderr, "Inconsistent Tag length\n");
-                               exit(1);
-                               }
-                       }
-               if (encrypt && pt && aad && (iv || encrypt==1))
-                       {
-                       tag = OPENSSL_malloc(taglen);
-                       FIPS_cipherinit(&ctx, gcm, NULL, NULL, 1);
-                       /* Relax FIPS constraints for testing */
-                       M_EVP_CIPHER_CTX_set_flags(&ctx, EVP_CIPH_FLAG_NON_FIPS_ALLOW);
-                       FIPS_cipher_ctx_ctrl(&ctx, EVP_CTRL_GCM_SET_IVLEN, ivlen, 0);
-                       if (encrypt == 1)
-                               {
-                               static unsigned char iv_fixed[4] = {1,2,3,4};
-                               if (!iv)
-                                       iv = OPENSSL_malloc(ivlen);
-                               FIPS_cipherinit(&ctx, NULL, key, NULL, 1);
-                               FIPS_cipher_ctx_ctrl(&ctx,
-                                               EVP_CTRL_GCM_SET_IV_FIXED,
-                                               4, iv_fixed);
-                               if (!FIPS_cipher_ctx_ctrl(&ctx,
-                                       EVP_CTRL_GCM_IV_GEN, 0, iv))
-                                       {
-                                       fprintf(stderr, "IV gen error\n");
-                                       exit(1);
-                                       }
-                               OutputValue("IV", iv, ivlen, out, 0);
-                               }
-                       else
-                               FIPS_cipherinit(&ctx, NULL, key, iv, 1);
-
-
-                       if (aadlen)
-                               FIPS_cipher(&ctx, NULL, aad, aadlen);
-                       if (ptlen)
-                               {
-                               ct = OPENSSL_malloc(ptlen);
-                               rv = FIPS_cipher(&ctx, ct, pt, ptlen);
-                               }
-                       FIPS_cipher(&ctx, NULL, NULL, 0);
-                       FIPS_cipher_ctx_ctrl(&ctx, EVP_CTRL_GCM_GET_TAG,
-                                                               taglen, tag);   
-                       OutputValue("CT", ct, ptlen, out, 0);
-                       OutputValue("Tag", tag, taglen, out, 0);
-                       if (iv)
-                               OPENSSL_free(iv);
-                       if (aad)
-                               OPENSSL_free(aad);
-                       if (ct)
-                               OPENSSL_free(ct);
-                       if (pt)
-                               OPENSSL_free(pt);
-                       if (key)
-                               OPENSSL_free(key);
-                       if (tag)
-                               OPENSSL_free(tag);
-                       iv = aad = ct = pt = key = tag = NULL;
-                       }       
-               if (!encrypt && tag)
-                       {
-                       FIPS_cipherinit(&ctx, gcm, NULL, NULL, 0);
-                       /* Relax FIPS constraints for testing */
-                       M_EVP_CIPHER_CTX_set_flags(&ctx, EVP_CIPH_FLAG_NON_FIPS_ALLOW);
-                       FIPS_cipher_ctx_ctrl(&ctx, EVP_CTRL_GCM_SET_IVLEN, ivlen, 0);
-                       FIPS_cipherinit(&ctx, NULL, key, iv, 0);
-                       FIPS_cipher_ctx_ctrl(&ctx, EVP_CTRL_GCM_SET_TAG, taglen, tag);
-                       if (aadlen)
-                               FIPS_cipher(&ctx, NULL, aad, aadlen);
-                       if (ptlen)
-                               {
-                               pt = OPENSSL_malloc(ptlen);
-                               rv = FIPS_cipher(&ctx, pt, ct, ptlen);
-                               }
-                       rv = FIPS_cipher(&ctx, NULL, NULL, 0);
-                       if (rv < 0)
-                               fprintf(out, "FAIL" RESP_EOL);
-                       else
-                               OutputValue("PT", pt, ptlen, out, 0);
-                       if (iv)
-                               OPENSSL_free(iv);
-                       if (aad)
-                               OPENSSL_free(aad);
-                       if (ct)
-                               OPENSSL_free(ct);
-                       if (pt)
-                               OPENSSL_free(pt);
-                       if (key)
-                               OPENSSL_free(key);
-                       if (tag)
-                               OPENSSL_free(tag);
-                       iv = aad = ct = pt = key = tag = NULL;
-                       }
-               }
-       FIPS_cipher_ctx_cleanup(&ctx);  
-       }
-
-static void xtstest(FILE *in, FILE *out)
-       {
-       char buf[204800];
-       char lbuf[204800];
-       char *keyword, *value;
-       int inlen = 0;
-       int encrypt = 0;
-       long l;
-       unsigned char *key = NULL, *iv = NULL;
-       unsigned char *inbuf = NULL, *outbuf = NULL;
-       EVP_CIPHER_CTX ctx;
-       const EVP_CIPHER *xts = NULL;
-       FIPS_cipher_ctx_init(&ctx);
-
-       while(fgets(buf,sizeof buf,in) != NULL)
-               {
-               fputs(buf,out);
-               if (buf[0] == '[' && strlen(buf) >= 9)
-                       {
-                       if(!strncmp(buf,"[ENCRYPT]", 9))
-                               encrypt = 1;
-                       else if(!strncmp(buf,"[DECRYPT]", 9))
-                               encrypt = 0;
-                       }
-               if  (!parse_line(&keyword, &value, lbuf, buf))
-                       continue;
-               else if(!strcmp(keyword,"Key"))
-                       {
-                       key = hex2bin_m(value, &l);
-                       if (l == 32)
-                               xts = EVP_aes_128_xts();
-                       else if (l == 64)
-                               xts = EVP_aes_256_xts();
-                       else
-                               {
-                               fprintf(stderr, "Inconsistent Key length\n");
-                               exit(1);
-                               }
-                       }
-               else if(!strcmp(keyword,"i"))
-                       {
-                       iv = hex2bin_m(value, &l);
-                       if (l != 16)
-                               {
-                               fprintf(stderr, "Inconsistent i length\n");
-                               exit(1);
-                               }
-                       }
-               else if(encrypt && !strcmp(keyword,"PT"))
-                       {
-                       inbuf = hex2bin_m(value, &l);
-                       inlen = l;
-                       }
-               else if(!encrypt && !strcmp(keyword,"CT"))
-                       {
-                       inbuf = hex2bin_m(value, &l);
-                       inlen = l;
-                       }
-               if (inbuf)
-                       {
-                       FIPS_cipherinit(&ctx, xts, key, iv, encrypt);
-                       outbuf = OPENSSL_malloc(inlen);
-                       FIPS_cipher(&ctx, outbuf, inbuf, inlen);
-                       OutputValue(encrypt ? "CT":"PT", outbuf, inlen, out, 0);
-                       OPENSSL_free(inbuf);
-                       OPENSSL_free(outbuf);
-                       OPENSSL_free(key);
-                       OPENSSL_free(iv);
-                       iv = key = inbuf = outbuf = NULL;
-                       }       
-               }
-       FIPS_cipher_ctx_cleanup(&ctx);  
-       }
-
-static void ccmtest(FILE *in, FILE *out)
-       {
-       char buf[200048];
-       char lbuf[200048];
-       char *keyword, *value;
-       long l;
-       unsigned char *Key = NULL, *Nonce = NULL;
-       unsigned char *Adata = NULL, *Payload = NULL;
-       unsigned char *CT = NULL;
-       int Plen = -1, Nlen = -1, Tlen = -1, Alen = -1;
-       int decr = 0;
-       EVP_CIPHER_CTX ctx;
-       const EVP_CIPHER *ccm = NULL;
-       FIPS_cipher_ctx_init(&ctx);
-
-       while(fgets(buf,sizeof buf,in) != NULL)
-               {
-               char *p;
-               fputs(buf,out);
-               redo:
-               if (!parse_line(&keyword, &value, lbuf, buf))
-                       continue;
-
-               /* If surrounded by square brackets zap them */
-               if (keyword[0] == '[')
-                       {
-                       keyword++;
-                       p = strchr(value, ']');
-                       if (p)
-                               *p = 0;
-                       }
-               /* See if we have a comma separated list of parameters
-                * if so copy rest of line back to buffer and redo later.
-                */
-               p = strchr(value, ',');
-               if (p)
-                       {
-                       *p = 0;
-                       strcpy(buf, p + 1);
-                       strcat(buf, "\n");
-                       decr = 1;
-                       }
-               if (!strcmp(keyword,"Plen"))
-                       Plen = atoi(value);
-               else if (!strcmp(keyword,"Nlen"))
-                       Nlen = atoi(value);
-               else if (!strcmp(keyword,"Tlen"))
-                       Tlen = atoi(value);
-               else if (!strcmp(keyword,"Alen"))
-                       Alen = atoi(value);
-               if (p)
-                       goto redo;
-               if (!strcmp(keyword,"Key"))
-                       {
-                       if (Key)
-                               OPENSSL_free(Key);
-                       Key = hex2bin_m(value, &l);
-                       if (l == 16)
-                               ccm = EVP_aes_128_ccm();
-                       else if (l == 24)
-                               ccm = EVP_aes_192_ccm();
-                       else if (l == 32)
-                               ccm = EVP_aes_256_ccm();
-                       else
-                               {
-                               fprintf(stderr, "Inconsistent Key length\n");
-                               exit(1);
-                               }
-                       }
-               else if (!strcmp(keyword,"Nonce"))
-                       {
-                       if (Nonce)
-                               OPENSSL_free(Nonce);
-                       Nonce = hex2bin_m(value, &l);
-                       if (l != Nlen)
-                               {
-                               fprintf(stderr, "Inconsistent nonce length\n");
-                               exit(1);
-                               }
-                       }
-               else if (!strcmp(keyword,"Payload") && !decr)
-                       {
-                       Payload = hex2bin_m(value, &l);
-                       if (Plen && l != Plen)
-                               {
-                               fprintf(stderr, "Inconsistent Payload length\n");
-                               exit(1);
-                               }
-                       }
-               else if (!strcmp(keyword,"Adata"))
-                       {
-                       if (Adata)
-                               OPENSSL_free(Adata);
-                       Adata = hex2bin_m(value, &l);
-                       if (Alen && l != Alen)
-                               {
-                               fprintf(stderr, "Inconsistent Payload length\n");
-                               exit(1);
-                               }
-                       }
-               else if (!strcmp(keyword,"CT") && decr)
-                       {
-                       CT = hex2bin_m(value, &l);
-                       if (l != (Plen + Tlen))
-                               {
-                               fprintf(stderr, "Inconsistent CT length\n");
-                               exit(1);
-                               }
-                       }
-               if (Payload)
-                       {
-                       FIPS_cipherinit(&ctx, ccm, NULL, NULL, 1);
-                       FIPS_cipher_ctx_ctrl(&ctx, EVP_CTRL_CCM_SET_IVLEN, Nlen, 0);
-                       FIPS_cipher_ctx_ctrl(&ctx, EVP_CTRL_CCM_SET_TAG, Tlen, 0);
-                       FIPS_cipherinit(&ctx, NULL, Key, Nonce, 1);
-
-                       FIPS_cipher(&ctx, NULL, NULL, Plen);
-                       FIPS_cipher(&ctx, NULL, Adata, Alen);
-                       CT = OPENSSL_malloc(Plen + Tlen);
-                       FIPS_cipher(&ctx, CT, Payload, Plen);
-                       FIPS_cipher_ctx_ctrl(&ctx, EVP_CTRL_CCM_GET_TAG, Tlen,
-                                               CT + Plen);
-                       OutputValue("CT", CT, Plen + Tlen, out, 0);
-                       OPENSSL_free(CT);
-                       OPENSSL_free(Payload);
-                       CT = Payload = NULL;
-                       }
-               if (CT)
-                       {
-                       int rv;
-                       int len = Plen == 0 ? 1: Plen;
-                       FIPS_cipherinit(&ctx, ccm, NULL, NULL, 0);
-                       FIPS_cipher_ctx_ctrl(&ctx, EVP_CTRL_CCM_SET_IVLEN, Nlen, 0);
-                       FIPS_cipher_ctx_ctrl(&ctx, EVP_CTRL_CCM_SET_TAG,
-                                               Tlen, CT + Plen);
-                       FIPS_cipherinit(&ctx, NULL, Key, Nonce, 0);
-                       FIPS_cipher(&ctx, NULL, NULL, Plen);
-                       FIPS_cipher(&ctx, NULL, Adata, Alen);
-                       Payload = OPENSSL_malloc(len);
-                       rv = FIPS_cipher(&ctx, Payload, CT, Plen);
-                       if (rv >= 0)
-                               {
-                               if (rv == 0)
-                                       Payload[0] = 0;
-                               fputs("Result = Pass" RESP_EOL, out);
-                               OutputValue("Payload", Payload, len, out, 0);
-                               }
-                       else
-                               fputs("Result = Fail" RESP_EOL, out);
-                       OPENSSL_free(CT);
-                       OPENSSL_free(Payload);
-                       CT = Payload = NULL;
-                       }
-               }
-       if (Key)
-               OPENSSL_free(Key);
-       if (Nonce)
-               OPENSSL_free(Nonce);
-       if (Adata)
-               OPENSSL_free(Adata);
-       FIPS_cipher_ctx_cleanup(&ctx);
-       }
-
-#ifdef FIPS_ALGVS
-int fips_gcmtest_main(int argc, char **argv)
-#else
-int main(int argc, char **argv)
-#endif
-       {
-       int encrypt;
-       int xts = 0, ccm = 0;
-       FILE *in, *out;
-       if (argc == 4)
-               {
-               in = fopen(argv[2], "r");
-               if (!in)
-                       {
-                       fprintf(stderr, "Error opening input file\n");
-                       exit(1);
-                       }
-               out = fopen(argv[3], "w");
-               if (!out)
-                       {
-                       fprintf(stderr, "Error opening output file\n");
-                       exit(1);
-                       }
-               }
-       else if (argc == 2)
-               {
-               in = stdin;
-               out = stdout;
-               }
-       else
-               {
-               fprintf(stderr,"%s [-encrypt|-decrypt]\n",argv[0]);
-               exit(1);
-               }
-       fips_algtest_init();
-       if(!strcmp(argv[1],"-encrypt"))
-               encrypt = 1;
-       else if(!strcmp(argv[1],"-encryptIVext"))
-               encrypt = 2;
-       else if(!strcmp(argv[1],"-decrypt"))
-               encrypt = 0;
-       else if(!strcmp(argv[1],"-ccm"))
-               ccm = 1;
-       else if(!strcmp(argv[1],"-xts"))
-               xts = 1;
-       else
-               {
-               fprintf(stderr,"Don't know how to %s.\n",argv[1]);
-               exit(1);
-               }
-
-       if (ccm)
-               ccmtest(in, out);
-       else if (xts)
-               xtstest(in, out);
-       else
-               gcmtest(in, out, encrypt);
-
-       if (argc == 4)
-               {
-               fclose(in);
-               fclose(out);
-               }
-
-       return 0;
-}
-
-#endif