diff --git a/engines/afalg/build.info b/engines/afalg/build.info index 3cfb61c3a20d34a714e862e9530d81a46962dc14..763b35f008c0fcf2d556f7ef0f2dddd5f7bd8a78 100644 --- a/engines/afalg/build.info +++ b/engines/afalg/build.info @@ -5,9 +5,9 @@ IF[{- !$disabled{afalg} -}] LIBS=../../libcrypto SOURCE[../../libcrypto]=e_afalg.c e_afalg_err.c ELSE - ENGINES=libafalg - SOURCE[libafalg]=e_afalg.c e_afalg_err.c - DEPEND[libafalg]=../../libcrypto - INCLUDE[libafalg]= {- rel2abs(catdir($builddir,"../include")) -} ../../include + ENGINES=afalg + SOURCE[afalg]=e_afalg.c e_afalg_err.c + DEPEND[afalg]=../../libcrypto + INCLUDE[afalg]= {- rel2abs(catdir($builddir,"../include")) -} ../../include ENDIF ENDIF diff --git a/test/Makefile.in b/test/Makefile.in index 7a5dcc1c3cf3ee3ea7cf1fe80fa17f6efd5bb6ef..313ff6fec2efa2e4b6fe38baaf510493de97228c 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -83,6 +83,7 @@ ASYNCTEST= asynctest DTLSV1LISTENTEST = dtlsv1listentest CTTEST= ct_test THREADSTEST= threadstest +AFALGTEST= afalgtest TESTS= alltests @@ -104,7 +105,8 @@ EXE= $(NPTEST)$(EXE_EXT) $(MEMLEAKTEST)$(EXE_EXT) \ $(HEARTBEATTEST)$(EXE_EXT) $(P5_CRPT2_TEST)$(EXE_EXT) \ $(CONSTTIMETEST)$(EXE_EXT) $(VERIFYEXTRATEST)$(EXE_EXT) \ $(CLIENTHELLOTEST)$(EXE_EXT) $(PACKETTEST)$(EXE_EXT) $(ASYNCTEST)$(EXE_EXT) \ - $(DTLSV1LISTENTEST)$(EXE_EXT) $(CTTEST)$(EXE_EXT) $(THREADSTEST)$(EXE_EXT) + $(DTLSV1LISTENTEST)$(EXE_EXT) $(CTTEST)$(EXE_EXT) $(THREADSTEST)$(EXE_EXT) \ + $(AFALGTEST)$(EXE_EXT) # $(METHTEST)$(EXE_EXT) @@ -122,7 +124,7 @@ OBJ= $(NPTEST).o $(MEMLEAKTEST).o \ $(HEARTBEATTEST).o $(P5_CRPT2_TEST).o \ $(CONSTTIMETEST).o $(VERIFYEXTRATEST).o $(CLIENTHELLOTEST).o \ $(PACKETTEST).o $(ASYNCTEST).o $(DTLSV1LISTENTEST).o $(CTTEST).o \ - $(THREADSTEST).o testutil.o + $(THREADSTEST).o testutil.o $(AFALGTEST).o SRC= $(NPTEST).c $(MEMLEAKTEST).c \ $(BNTEST).c $(ECTEST).c \ @@ -137,7 +139,7 @@ SRC= $(NPTEST).c $(MEMLEAKTEST).c \ $(HEARTBEATTEST).c $(P5_CRPT2_TEST).c \ $(CONSTTIMETEST).c $(VERIFYEXTRATEST).c $(CLIENTHELLOTEST).c \ $(PACKETTEST).c $(ASYNCTEST).c $(DTLSV1LISTENTEST).c $(CTTEST).c \ - $(THREADSTEST).c testutil.c + $(THREADSTEST).c testutil.c $(AFALGTEST).c HEADER= testutil.h @@ -382,4 +384,7 @@ $(THREADSTEST)$(EXE_EXT): $(THREADSTEST).o $(DLIBCRYPTO) dummytest$(EXE_EXT): dummytest.o $(DLIBCRYPTO) @target=dummytest; $(BUILD_CMD) +$(AFALGTEST)$(EXE_EXT): $(AFALGTEST).o $(DLIBCRYPTO) + @target=$(AFALGTEST); $(BUILD_CMD) + # DO NOT DELETE THIS LINE -- make depend depends on it. diff --git a/test/afalgtest.c b/test/afalgtest.c new file mode 100644 index 0000000000000000000000000000000000000000..d86c0900ac331635128499143578a29379d6df5c --- /dev/null +++ b/test/afalgtest.c @@ -0,0 +1,148 @@ +/* ==================================================================== + * Copyright (c) 2016 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 + * openssl-core@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. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ +#include +#include +#include +#include +#include + +#ifndef OPENSSL_NO_AFALGENG +static int test_afalg_aes_128_cbc(ENGINE *e) +{ + EVP_CIPHER_CTX *ctx; + const EVP_CIPHER *cipher = EVP_aes_128_cbc(); + unsigned char key[] = "\x5F\x4D\xCC\x3B\x5A\xA7\x65\xD6\ + \x1D\x83\x27\xDE\xB8\x82\xCF\x99"; + unsigned char iv[] = "\x2B\x95\x99\x0A\x91\x51\x37\x4A\ + \xBD\x8F\xF8\xC5\xA7\xA0\xFE\x08"; + /* Use a buffer which is not aligned to block size */ + const int bufsz = (8 * 1024) - 13; + unsigned char in[bufsz]; + unsigned char ebuf[bufsz + 32]; + unsigned char dbuf[bufsz + 32]; + int encl, encf, decl, decf; + unsigned int status = 0; + + ctx = EVP_CIPHER_CTX_new(); + if (ctx == NULL) { + fprintf(stderr, "%s() failed to allocate ctx\n", __func__); + return 0; + } + EVP_CIPHER_CTX_init(ctx); + RAND_bytes(in, bufsz); + + if ( !EVP_CipherInit_ex(ctx, cipher, e, key, iv, 1) + || !EVP_CipherUpdate(ctx, ebuf, &encl, in, bufsz) + || !EVP_CipherFinal_ex(ctx, ebuf+encl, &encf)) { + fprintf(stderr, "%s() failed encryption\n", __func__); + goto end; + } + encl += encf; + + if ( !EVP_CIPHER_CTX_reset(ctx) + || !EVP_CipherInit_ex(ctx, cipher, e, key, iv, 0) + || !EVP_CipherUpdate(ctx, dbuf, &decl, ebuf, encl) + || !EVP_CipherFinal_ex(ctx, ebuf+decl, &decf)) { + fprintf(stderr, "%s() failed decryption\n", __func__); + goto end; + } + decl += decf; + + if ( decl != bufsz + || memcmp(dbuf, in, bufsz)) { + fprintf(stderr, "%s() failed Dec(Enc(P)) != P\n", __func__); + goto end; + } + + status = 1; + + end: + EVP_CIPHER_CTX_free(ctx); + return status; +} +#endif + +int main(int argc, char **argv) +{ +#ifdef OPENSSL_NO_AFALGENG + fprintf(stderr, "AFALG not supported - skipping AFALG tests\n"); +#else + + ENGINE *e; + + CRYPTO_set_mem_debug(1); + CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON); + + ENGINE_load_builtin_engines(); + +# ifndef OPENSSL_NO_STATIC_ENGINE + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_AFALG, NULL); +# endif + + e = ENGINE_by_id("afalg"); + if (e == NULL) { + fprintf(stderr, "AFALG Test: Failed to load AFALG Engine\n"); + return 1; + } + + if (test_afalg_aes_128_cbc(e) == 0) { + ENGINE_free(e); + return 1; + } + + ENGINE_free(e); +#endif + printf("PASS\n"); + return 0; +} diff --git a/test/build.info b/test/build.info index c2ee234a4538139edd151159dae6ab66f92effda..cd5d8cd706486d57bc20c64a59bfc6f9998c3a03 100644 --- a/test/build.info +++ b/test/build.info @@ -13,7 +13,7 @@ PROGRAMS=\ danetest heartbeat_test p5_crpt2_test \ constant_time_test verify_extra_test clienthellotest \ packettest asynctest secmemtest srptest memleaktest \ - dtlsv1listentest ct_test threadstest + dtlsv1listentest ct_test threadstest afalgtest SOURCE[nptest]=nptest.c INCLUDE[nptest]={- rel2abs(catdir($builddir,"../include")) -} ../include @@ -211,4 +211,8 @@ SOURCE[threadstest]=threadstest.c INCLUDE[threadstest]={- rel2abs(catdir($builddir,"../include")) -} .. ../include DEPEND[threadstest]=../libcrypto +SOURCE[afalgtest]=afalgtest.c +INCLUDE[afalgtest]={- rel2abs(catdir($builddir,"../include")) -} .. ../include +DEPEND[afalgtest]=../libcrypto + INCLUDE[testutil.o]=.. diff --git a/test/recipes/30-test_afalg.t b/test/recipes/30-test_afalg.t new file mode 100644 index 0000000000000000000000000000000000000000..68eb60b3fe7e73e1bd898aa29d9819f2827a4b5a --- /dev/null +++ b/test/recipes/30-test_afalg.t @@ -0,0 +1,68 @@ +#!/usr/bin/perl +# ==================================================================== +# Copyright (c) 1998-2015 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 +# openssl-core@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. +# ==================================================================== +# +# This product includes cryptographic software written by Eric Young +# (eay@cryptsoft.com). This product includes software written by Tim +# Hudson (tjh@cryptsoft.com). + +use strict; +use OpenSSL::Test qw/:DEFAULT bldtop_dir/; +use OpenSSL::Test::Utils; + +my $test_name = "test_afalg"; +setup($test_name); + +plan skip_all => "$test_name not supported for this build" + if disabled("engine") || disabled("afalg"); + +plan tests => 1; + +$ENV{OPENSSL_ENGINES} = bldtop_dir("engines/afalg"); + +ok(run(test(["afalgtest"])), "running afalgtest");