]>
Commit | Line | Data |
---|---|---|
440e5d80 | 1 | /* |
ad887416 | 2 | * Copyright 2016-2017 The OpenSSL Project Authors. All Rights Reserved. |
d2458440 | 3 | * |
909f1a2e | 4 | * Licensed under the Apache License 2.0 (the "License"). You may not use |
440e5d80 RS |
5 | * 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 | |
d2458440 | 8 | */ |
440e5d80 | 9 | |
d2458440 | 10 | #include <stdio.h> |
c91a0a83 EK |
11 | #include <openssl/opensslconf.h> |
12 | ||
5c8e9d53 RS |
13 | #include <string.h> |
14 | #include <openssl/engine.h> | |
15 | #include <openssl/evp.h> | |
16 | #include <openssl/rand.h> | |
17 | #include "testutil.h" | |
18 | ||
19 | /* Use a buffer size which is not aligned to block size */ | |
49ea0f09 | 20 | #define BUFFER_SIZE 17 |
5c8e9d53 RS |
21 | |
22 | #ifndef OPENSSL_NO_ENGINE | |
23 | static ENGINE *e; | |
24 | #endif | |
25 | ||
26 | ||
627537dd MC |
27 | #ifndef OPENSSL_NO_AFALGENG |
28 | # include <linux/version.h> | |
29 | # define K_MAJ 4 | |
30 | # define K_MIN1 1 | |
31 | # define K_MIN2 0 | |
3ba70235 | 32 | # if LINUX_VERSION_CODE < KERNEL_VERSION(K_MAJ, K_MIN1, K_MIN2) |
627537dd MC |
33 | /* |
34 | * If we get here then it looks like there is a mismatch between the linux | |
35 | * headers and the actual kernel version, so we have tried to compile with | |
36 | * afalg support, but then skipped it in e_afalg.c. As far as this test is | |
37 | * concerned we behave as if we had been configured without support | |
38 | */ | |
39 | # define OPENSSL_NO_AFALGENG | |
40 | # endif | |
41 | #endif | |
42 | ||
c91a0a83 | 43 | #ifndef OPENSSL_NO_AFALGENG |
49ea0f09 | 44 | static int test_afalg_aes_cbc(int keysize_idx) |
d2458440 | 45 | { |
46 | EVP_CIPHER_CTX *ctx; | |
49ea0f09 J |
47 | const EVP_CIPHER *cipher; |
48 | unsigned char key[] = "\x06\xa9\x21\x40\x36\xb8\xa1\x5b" | |
49 | "\x51\x2e\x03\xd5\x34\x12\x00\x06" | |
50 | "\x06\xa9\x21\x40\x36\xb8\xa1\x5b" | |
51 | "\x51\x2e\x03\xd5\x34\x12\x00\x06"; | |
52 | unsigned char iv[] = "\x3d\xaf\xba\x42\x9d\x9e\xb4\x30" | |
53 | "\xb4\x22\xda\x80\x2c\x9f\xac\x41"; | |
54 | /* input = "Single block msg\n" 17Bytes*/ | |
55 | unsigned char in[BUFFER_SIZE] = "\x53\x69\x6e\x67\x6c\x65\x20\x62" | |
56 | "\x6c\x6f\x63\x6b\x20\x6d\x73\x67\x0a"; | |
a1933888 MC |
57 | unsigned char ebuf[BUFFER_SIZE + 32]; |
58 | unsigned char dbuf[BUFFER_SIZE + 32]; | |
49ea0f09 J |
59 | unsigned char encresult_128[] = "\xe3\x53\x77\x9c\x10\x79\xae\xb8" |
60 | "\x27\x08\x94\x2d\xbe\x77\x18\x1a\x2d"; | |
61 | unsigned char encresult_192[] = "\xf7\xe4\x26\xd1\xd5\x4f\x8f\x39" | |
62 | "\xb1\x9e\xe0\xdf\x61\xb9\xc2\x55\xeb"; | |
63 | unsigned char encresult_256[] = "\xa0\x76\x85\xfd\xc1\x65\x71\x9d" | |
64 | "\xc7\xe9\x13\x6e\xae\x55\x49\xb4\x13"; | |
a3d7fd28 | 65 | unsigned char *enc_result = NULL; |
49ea0f09 | 66 | |
d2458440 | 67 | int encl, encf, decl, decf; |
52924399 | 68 | int ret = 0; |
d2458440 | 69 | |
49ea0f09 J |
70 | switch (keysize_idx) { |
71 | case 0: | |
72 | cipher = EVP_aes_128_cbc(); | |
73 | enc_result = &encresult_128[0]; | |
74 | break; | |
75 | case 1: | |
76 | cipher = EVP_aes_192_cbc(); | |
77 | enc_result = &encresult_192[0]; | |
78 | break; | |
79 | case 2: | |
80 | cipher = EVP_aes_256_cbc(); | |
81 | enc_result = &encresult_256[0]; | |
82 | break; | |
83 | default: | |
84 | cipher = NULL; | |
85 | } | |
52924399 RS |
86 | if (!TEST_ptr(ctx = EVP_CIPHER_CTX_new())) |
87 | return 0; | |
d2458440 | 88 | |
52924399 RS |
89 | if (!TEST_true(EVP_CipherInit_ex(ctx, cipher, e, key, iv, 1)) |
90 | || !TEST_true(EVP_CipherUpdate(ctx, ebuf, &encl, in, BUFFER_SIZE)) | |
91 | || !TEST_true(EVP_CipherFinal_ex(ctx, ebuf+encl, &encf))) | |
d2458440 | 92 | goto end; |
d2458440 | 93 | encl += encf; |
94 | ||
49ea0f09 J |
95 | if (!TEST_mem_eq(enc_result, BUFFER_SIZE, ebuf, BUFFER_SIZE)) |
96 | goto end; | |
97 | ||
52924399 RS |
98 | if (!TEST_true(EVP_CIPHER_CTX_reset(ctx)) |
99 | || !TEST_true(EVP_CipherInit_ex(ctx, cipher, e, key, iv, 0)) | |
100 | || !TEST_true(EVP_CipherUpdate(ctx, dbuf, &decl, ebuf, encl)) | |
101 | || !TEST_true(EVP_CipherFinal_ex(ctx, dbuf+decl, &decf))) | |
d2458440 | 102 | goto end; |
d2458440 | 103 | decl += decf; |
104 | ||
52924399 RS |
105 | if (!TEST_int_eq(decl, BUFFER_SIZE) |
106 | || !TEST_mem_eq(dbuf, BUFFER_SIZE, in, BUFFER_SIZE)) | |
d2458440 | 107 | goto end; |
d2458440 | 108 | |
52924399 | 109 | ret = 1; |
d2458440 | 110 | |
111 | end: | |
112 | EVP_CIPHER_CTX_free(ctx); | |
52924399 | 113 | return ret; |
d2458440 | 114 | } |
5c8e9d53 | 115 | #endif |
d2458440 | 116 | |
ad887416 P |
117 | #ifndef OPENSSL_NO_ENGINE |
118 | int global_init(void) | |
d2458440 | 119 | { |
d2458440 | 120 | ENGINE_load_builtin_engines(); |
d2458440 | 121 | # ifndef OPENSSL_NO_STATIC_ENGINE |
122 | OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_AFALG, NULL); | |
123 | # endif | |
ad887416 P |
124 | return 1; |
125 | } | |
126 | #endif | |
d2458440 | 127 | |
ad887416 P |
128 | int setup_tests(void) |
129 | { | |
130 | #ifndef OPENSSL_NO_ENGINE | |
c517ac4c | 131 | if ((e = ENGINE_by_id("afalg")) == NULL) { |
52924399 | 132 | /* Probably a platform env issue, not a test failure. */ |
c517ac4c RL |
133 | TEST_info("Can't load AFALG engine"); |
134 | } else { | |
5c8e9d53 | 135 | # ifndef OPENSSL_NO_AFALGENG |
c517ac4c | 136 | ADD_ALL_TESTS(test_afalg_aes_cbc, 3); |
5c8e9d53 | 137 | # endif |
c517ac4c | 138 | } |
5c8e9d53 | 139 | #endif |
c91a0a83 | 140 | |
ad887416 | 141 | return 1; |
c91a0a83 | 142 | } |
ad887416 P |
143 | |
144 | #ifndef OPENSSL_NO_ENGINE | |
145 | void cleanup_tests(void) | |
146 | { | |
147 | ENGINE_free(e); | |
148 | } | |
149 | #endif |