mirror of https://github.com/openssl/openssl.git
				
				
				
			Adding afalg test
Reviewed-by: Richard Levitte <levitte@openssl.org> Reviewed-by: Matt Caswell <matt@openssl.org>
This commit is contained in:
		
							parent
							
								
									15457b6203
								
							
						
					
					
						commit
						d245844010
					
				|  | @ -5,9 +5,9 @@ IF[{- !$disabled{afalg} -}] | ||||||
|   LIBS=../../libcrypto |   LIBS=../../libcrypto | ||||||
|   SOURCE[../../libcrypto]=e_afalg.c e_afalg_err.c |   SOURCE[../../libcrypto]=e_afalg.c e_afalg_err.c | ||||||
|  ELSE |  ELSE | ||||||
|   ENGINES=libafalg |   ENGINES=afalg | ||||||
|   SOURCE[libafalg]=e_afalg.c e_afalg_err.c |   SOURCE[afalg]=e_afalg.c e_afalg_err.c | ||||||
|   DEPEND[libafalg]=../../libcrypto |   DEPEND[afalg]=../../libcrypto | ||||||
|   INCLUDE[libafalg]= {- rel2abs(catdir($builddir,"../include")) -} ../../include |   INCLUDE[afalg]= {- rel2abs(catdir($builddir,"../include")) -} ../../include | ||||||
|  ENDIF |  ENDIF | ||||||
| ENDIF | ENDIF | ||||||
|  |  | ||||||
|  | @ -83,6 +83,7 @@ ASYNCTEST=	asynctest | ||||||
| DTLSV1LISTENTEST = dtlsv1listentest | DTLSV1LISTENTEST = dtlsv1listentest | ||||||
| CTTEST=	ct_test | CTTEST=	ct_test | ||||||
| THREADSTEST=	threadstest | THREADSTEST=	threadstest | ||||||
|  | AFALGTEST= afalgtest | ||||||
| 
 | 
 | ||||||
| TESTS=		alltests | TESTS=		alltests | ||||||
| 
 | 
 | ||||||
|  | @ -104,7 +105,8 @@ EXE=	$(NPTEST)$(EXE_EXT) $(MEMLEAKTEST)$(EXE_EXT) \ | ||||||
| 	$(HEARTBEATTEST)$(EXE_EXT) $(P5_CRPT2_TEST)$(EXE_EXT) \
 | 	$(HEARTBEATTEST)$(EXE_EXT) $(P5_CRPT2_TEST)$(EXE_EXT) \
 | ||||||
| 	$(CONSTTIMETEST)$(EXE_EXT) $(VERIFYEXTRATEST)$(EXE_EXT) \
 | 	$(CONSTTIMETEST)$(EXE_EXT) $(VERIFYEXTRATEST)$(EXE_EXT) \
 | ||||||
| 	$(CLIENTHELLOTEST)$(EXE_EXT) $(PACKETTEST)$(EXE_EXT) $(ASYNCTEST)$(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)
 | # $(METHTEST)$(EXE_EXT)
 | ||||||
| 
 | 
 | ||||||
|  | @ -122,7 +124,7 @@ OBJ=	$(NPTEST).o $(MEMLEAKTEST).o \ | ||||||
| 	$(HEARTBEATTEST).o $(P5_CRPT2_TEST).o \
 | 	$(HEARTBEATTEST).o $(P5_CRPT2_TEST).o \
 | ||||||
| 	$(CONSTTIMETEST).o $(VERIFYEXTRATEST).o $(CLIENTHELLOTEST).o \
 | 	$(CONSTTIMETEST).o $(VERIFYEXTRATEST).o $(CLIENTHELLOTEST).o \
 | ||||||
| 	$(PACKETTEST).o $(ASYNCTEST).o $(DTLSV1LISTENTEST).o $(CTTEST).o \
 | 	$(PACKETTEST).o $(ASYNCTEST).o $(DTLSV1LISTENTEST).o $(CTTEST).o \
 | ||||||
| 	$(THREADSTEST).o testutil.o | 	$(THREADSTEST).o testutil.o $(AFALGTEST).o | ||||||
| 
 | 
 | ||||||
| SRC=	$(NPTEST).c $(MEMLEAKTEST).c \
 | SRC=	$(NPTEST).c $(MEMLEAKTEST).c \
 | ||||||
| 	$(BNTEST).c $(ECTEST).c \
 | 	$(BNTEST).c $(ECTEST).c \
 | ||||||
|  | @ -137,7 +139,7 @@ SRC=	$(NPTEST).c $(MEMLEAKTEST).c \ | ||||||
| 	$(HEARTBEATTEST).c $(P5_CRPT2_TEST).c \
 | 	$(HEARTBEATTEST).c $(P5_CRPT2_TEST).c \
 | ||||||
| 	$(CONSTTIMETEST).c $(VERIFYEXTRATEST).c $(CLIENTHELLOTEST).c \
 | 	$(CONSTTIMETEST).c $(VERIFYEXTRATEST).c $(CLIENTHELLOTEST).c \
 | ||||||
| 	$(PACKETTEST).c $(ASYNCTEST).c $(DTLSV1LISTENTEST).c $(CTTEST).c \
 | 	$(PACKETTEST).c $(ASYNCTEST).c $(DTLSV1LISTENTEST).c $(CTTEST).c \
 | ||||||
| 	$(THREADSTEST).c testutil.c | 	$(THREADSTEST).c testutil.c $(AFALGTEST).c | ||||||
| 
 | 
 | ||||||
| HEADER=	testutil.h | HEADER=	testutil.h | ||||||
| 
 | 
 | ||||||
|  | @ -382,4 +384,7 @@ $(THREADSTEST)$(EXE_EXT): $(THREADSTEST).o $(DLIBCRYPTO) | ||||||
| dummytest$(EXE_EXT): dummytest.o $(DLIBCRYPTO) | dummytest$(EXE_EXT): dummytest.o $(DLIBCRYPTO) | ||||||
| 	@target=dummytest; $(BUILD_CMD) | 	@target=dummytest; $(BUILD_CMD) | ||||||
| 
 | 
 | ||||||
|  | $(AFALGTEST)$(EXE_EXT): $(AFALGTEST).o $(DLIBCRYPTO) | ||||||
|  | 	@target=$(AFALGTEST); $(BUILD_CMD) | ||||||
|  | 
 | ||||||
| # DO NOT DELETE THIS LINE -- make depend depends on it.
 | # DO NOT DELETE THIS LINE -- make depend depends on it.
 | ||||||
|  |  | ||||||
|  | @ -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 <stdio.h> | ||||||
|  | #include <openssl/engine.h> | ||||||
|  | #include <openssl/evp.h> | ||||||
|  | #include <openssl/rand.h> | ||||||
|  | #include <string.h> | ||||||
|  | 
 | ||||||
|  | #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; | ||||||
|  | } | ||||||
|  | @ -13,7 +13,7 @@ PROGRAMS=\ | ||||||
|         danetest heartbeat_test p5_crpt2_test \ |         danetest heartbeat_test p5_crpt2_test \ | ||||||
|         constant_time_test verify_extra_test clienthellotest \ |         constant_time_test verify_extra_test clienthellotest \ | ||||||
|         packettest asynctest secmemtest srptest memleaktest \ |         packettest asynctest secmemtest srptest memleaktest \ | ||||||
|         dtlsv1listentest ct_test threadstest |         dtlsv1listentest ct_test threadstest afalgtest | ||||||
| 
 | 
 | ||||||
| SOURCE[nptest]=nptest.c | SOURCE[nptest]=nptest.c | ||||||
| INCLUDE[nptest]={- rel2abs(catdir($builddir,"../include")) -} ../include | INCLUDE[nptest]={- rel2abs(catdir($builddir,"../include")) -} ../include | ||||||
|  | @ -211,4 +211,8 @@ SOURCE[threadstest]=threadstest.c | ||||||
| INCLUDE[threadstest]={- rel2abs(catdir($builddir,"../include")) -} .. ../include | INCLUDE[threadstest]={- rel2abs(catdir($builddir,"../include")) -} .. ../include | ||||||
| DEPEND[threadstest]=../libcrypto | DEPEND[threadstest]=../libcrypto | ||||||
| 
 | 
 | ||||||
|  | SOURCE[afalgtest]=afalgtest.c | ||||||
|  | INCLUDE[afalgtest]={- rel2abs(catdir($builddir,"../include")) -} .. ../include | ||||||
|  | DEPEND[afalgtest]=../libcrypto | ||||||
|  | 
 | ||||||
| INCLUDE[testutil.o]=.. | INCLUDE[testutil.o]=.. | ||||||
|  |  | ||||||
|  | @ -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"); | ||||||
		Loading…
	
		Reference in New Issue