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 | ||||
|   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 | ||||
|  |  | |||
|  | @ -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.
 | ||||
|  |  | |||
|  | @ -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 \ | ||||
|         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]=.. | ||||
|  |  | |||
|  | @ -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