blob: 01a2c8bf46b981d6adc6646eed145c1aed434a38 [file] [log] [blame]
Rich Salz440e5d82016-05-17 14:20:24 -04001/*
Pauliad887412017-07-18 11:48:27 +10002 * Copyright 2016-2017 The OpenSSL Project Authors. All Rights Reserved.
cluceyd2458442016-03-03 05:56:10 +00003 *
Richard Levitte909f1a22018-12-06 13:05:25 +01004 * Licensed under the Apache License 2.0 (the "License"). You may not use
Rich Salz440e5d82016-05-17 14:20:24 -04005 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
cluceyd2458442016-03-03 05:56:10 +00008 */
Rich Salz440e5d82016-05-17 14:20:24 -04009
Pauli304d0702020-07-14 09:39:20 +100010/* We need to use some engine deprecated APIs */
11#define OPENSSL_SUPPRESS_DEPRECATED
12
cluceyd2458442016-03-03 05:56:10 +000013#include <stdio.h>
Emilia Kasperc91a0a82016-03-14 12:21:44 +010014#include <openssl/opensslconf.h>
15
Rich Salz5c8e9d52017-04-16 09:17:39 -040016#include <string.h>
17#include <openssl/engine.h>
18#include <openssl/evp.h>
19#include <openssl/rand.h>
20#include "testutil.h"
21
22/* Use a buffer size which is not aligned to block size */
JitendraLulla49ea0f02017-11-11 12:01:58 +053023#define BUFFER_SIZE 17
Rich Salz5c8e9d52017-04-16 09:17:39 -040024
25#ifndef OPENSSL_NO_ENGINE
26static ENGINE *e;
27#endif
28
29
Emilia Kasperc91a0a82016-03-14 12:21:44 +010030#ifndef OPENSSL_NO_AFALGENG
Matt Caswell627537d2016-04-13 23:26:56 +010031# include <linux/version.h>
32# define K_MAJ 4
33# define K_MIN1 1
34# define K_MIN2 0
Baptiste Jonglez3ba70232017-10-30 11:38:09 +010035# if LINUX_VERSION_CODE < KERNEL_VERSION(K_MAJ, K_MIN1, K_MIN2)
Matt Caswell627537d2016-04-13 23:26:56 +010036/*
37 * If we get here then it looks like there is a mismatch between the linux
38 * headers and the actual kernel version, so we have tried to compile with
39 * afalg support, but then skipped it in e_afalg.c. As far as this test is
40 * concerned we behave as if we had been configured without support
41 */
42# define OPENSSL_NO_AFALGENG
43# endif
44#endif
45
46#ifndef OPENSSL_NO_AFALGENG
JitendraLulla49ea0f02017-11-11 12:01:58 +053047static int test_afalg_aes_cbc(int keysize_idx)
cluceyd2458442016-03-03 05:56:10 +000048{
49 EVP_CIPHER_CTX *ctx;
JitendraLulla49ea0f02017-11-11 12:01:58 +053050 const EVP_CIPHER *cipher;
51 unsigned char key[] = "\x06\xa9\x21\x40\x36\xb8\xa1\x5b"
52 "\x51\x2e\x03\xd5\x34\x12\x00\x06"
53 "\x06\xa9\x21\x40\x36\xb8\xa1\x5b"
54 "\x51\x2e\x03\xd5\x34\x12\x00\x06";
55 unsigned char iv[] = "\x3d\xaf\xba\x42\x9d\x9e\xb4\x30"
56 "\xb4\x22\xda\x80\x2c\x9f\xac\x41";
57 /* input = "Single block msg\n" 17Bytes*/
58 unsigned char in[BUFFER_SIZE] = "\x53\x69\x6e\x67\x6c\x65\x20\x62"
59 "\x6c\x6f\x63\x6b\x20\x6d\x73\x67\x0a";
Matt Caswella1933882016-03-07 12:36:20 +000060 unsigned char ebuf[BUFFER_SIZE + 32];
61 unsigned char dbuf[BUFFER_SIZE + 32];
JitendraLulla49ea0f02017-11-11 12:01:58 +053062 unsigned char encresult_128[] = "\xe3\x53\x77\x9c\x10\x79\xae\xb8"
63 "\x27\x08\x94\x2d\xbe\x77\x18\x1a\x2d";
64 unsigned char encresult_192[] = "\xf7\xe4\x26\xd1\xd5\x4f\x8f\x39"
65 "\xb1\x9e\xe0\xdf\x61\xb9\xc2\x55\xeb";
66 unsigned char encresult_256[] = "\xa0\x76\x85\xfd\xc1\x65\x71\x9d"
67 "\xc7\xe9\x13\x6e\xae\x55\x49\xb4\x13";
JitendraLullaa3d7fd22017-11-15 06:03:07 +053068 unsigned char *enc_result = NULL;
JitendraLulla49ea0f02017-11-11 12:01:58 +053069
cluceyd2458442016-03-03 05:56:10 +000070 int encl, encf, decl, decf;
Rich Salz52924392017-04-14 20:32:20 -040071 int ret = 0;
cluceyd2458442016-03-03 05:56:10 +000072
JitendraLulla49ea0f02017-11-11 12:01:58 +053073 switch (keysize_idx) {
74 case 0:
75 cipher = EVP_aes_128_cbc();
76 enc_result = &encresult_128[0];
77 break;
78 case 1:
79 cipher = EVP_aes_192_cbc();
80 enc_result = &encresult_192[0];
81 break;
82 case 2:
83 cipher = EVP_aes_256_cbc();
84 enc_result = &encresult_256[0];
85 break;
86 default:
87 cipher = NULL;
88 }
Rich Salz52924392017-04-14 20:32:20 -040089 if (!TEST_ptr(ctx = EVP_CIPHER_CTX_new()))
90 return 0;
cluceyd2458442016-03-03 05:56:10 +000091
Rich Salz52924392017-04-14 20:32:20 -040092 if (!TEST_true(EVP_CipherInit_ex(ctx, cipher, e, key, iv, 1))
93 || !TEST_true(EVP_CipherUpdate(ctx, ebuf, &encl, in, BUFFER_SIZE))
94 || !TEST_true(EVP_CipherFinal_ex(ctx, ebuf+encl, &encf)))
cluceyd2458442016-03-03 05:56:10 +000095 goto end;
cluceyd2458442016-03-03 05:56:10 +000096 encl += encf;
97
JitendraLulla49ea0f02017-11-11 12:01:58 +053098 if (!TEST_mem_eq(enc_result, BUFFER_SIZE, ebuf, BUFFER_SIZE))
99 goto end;
100
Rich Salz52924392017-04-14 20:32:20 -0400101 if (!TEST_true(EVP_CIPHER_CTX_reset(ctx))
102 || !TEST_true(EVP_CipherInit_ex(ctx, cipher, e, key, iv, 0))
103 || !TEST_true(EVP_CipherUpdate(ctx, dbuf, &decl, ebuf, encl))
104 || !TEST_true(EVP_CipherFinal_ex(ctx, dbuf+decl, &decf)))
cluceyd2458442016-03-03 05:56:10 +0000105 goto end;
cluceyd2458442016-03-03 05:56:10 +0000106 decl += decf;
107
Rich Salz52924392017-04-14 20:32:20 -0400108 if (!TEST_int_eq(decl, BUFFER_SIZE)
109 || !TEST_mem_eq(dbuf, BUFFER_SIZE, in, BUFFER_SIZE))
cluceyd2458442016-03-03 05:56:10 +0000110 goto end;
cluceyd2458442016-03-03 05:56:10 +0000111
Rich Salz52924392017-04-14 20:32:20 -0400112 ret = 1;
cluceyd2458442016-03-03 05:56:10 +0000113
114 end:
115 EVP_CIPHER_CTX_free(ctx);
Rich Salz52924392017-04-14 20:32:20 -0400116 return ret;
cluceyd2458442016-03-03 05:56:10 +0000117}
Rich Salz5c8e9d52017-04-16 09:17:39 -0400118#endif
cluceyd2458442016-03-03 05:56:10 +0000119
Pauliad887412017-07-18 11:48:27 +1000120#ifndef OPENSSL_NO_ENGINE
121int global_init(void)
cluceyd2458442016-03-03 05:56:10 +0000122{
cluceyd2458442016-03-03 05:56:10 +0000123 ENGINE_load_builtin_engines();
cluceyd2458442016-03-03 05:56:10 +0000124# ifndef OPENSSL_NO_STATIC_ENGINE
125 OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_AFALG, NULL);
126# endif
Pauliad887412017-07-18 11:48:27 +1000127 return 1;
128}
129#endif
cluceyd2458442016-03-03 05:56:10 +0000130
Pauliad887412017-07-18 11:48:27 +1000131int setup_tests(void)
132{
133#ifndef OPENSSL_NO_ENGINE
Richard Levittec517ac42018-02-07 22:18:44 +0100134 if ((e = ENGINE_by_id("afalg")) == NULL) {
Rich Salz52924392017-04-14 20:32:20 -0400135 /* Probably a platform env issue, not a test failure. */
Richard Levittec517ac42018-02-07 22:18:44 +0100136 TEST_info("Can't load AFALG engine");
137 } else {
Richard Levitte227a1e32018-02-07 14:01:13 +0100138# ifndef OPENSSL_NO_AFALGENG
Richard Levittec517ac42018-02-07 22:18:44 +0100139 ADD_ALL_TESTS(test_afalg_aes_cbc, 3);
Richard Levitte227a1e32018-02-07 14:01:13 +0100140# endif
Richard Levittec517ac42018-02-07 22:18:44 +0100141 }
Rich Salz5c8e9d52017-04-16 09:17:39 -0400142#endif
143
Pauliad887412017-07-18 11:48:27 +1000144 return 1;
cluceyd2458442016-03-03 05:56:10 +0000145}
Pauliad887412017-07-18 11:48:27 +1000146
147#ifndef OPENSSL_NO_ENGINE
148void cleanup_tests(void)
149{
150 ENGINE_free(e);
151}
152#endif