]>
git.proxmox.com Git - ceph.git/blob - ceph/src/crypto/isa-l/isa-l_crypto/aes/ossl_helper.h
1 /**********************************************************************
2 Copyright(c) 2011-2016 Intel Corporation All rights reserved.
4 Redistribution and use in source and binary forms, with or without
5 modification, are permitted provided that the following conditions
7 * Redistributions of source code must retain the above copyright
8 notice, this list of conditions and the following disclaimer.
9 * Redistributions in binary form must reproduce the above copyright
10 notice, this list of conditions and the following disclaimer in
11 the documentation and/or other materials provided with the
13 * Neither the name of Intel Corporation nor the names of its
14 contributors may be used to endorse or promote products derived
15 from this software without specific prior written permission.
17 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 **********************************************************************/
30 #ifndef AES_OSSL_HELPER_H_
31 #define AES_OSSL_HELPER_H_
34 # define inline __inline
37 #include <openssl/evp.h>
40 int openssl_aes_128_cbc_dec(uint8_t * key
, uint8_t * iv
,
41 int len
, uint8_t * cyphertext
, uint8_t * plaintext
)
43 int outlen
= 0, tmplen
= 0;
46 EVP_CIPHER_CTX_init(&ctx
);
47 if (!EVP_DecryptInit_ex(&ctx
, EVP_aes_128_cbc(), NULL
, key
, iv
))
48 printf("\n ERROR!! EVP_DecryptInit_ex - EVP_aes_128_cbc\n");
49 if (!EVP_CIPHER_CTX_set_padding(&ctx
, 0))
50 printf("\n ERROR!! EVP_CIPHER_CTX_set_padding - no padding\n");
51 if (!EVP_DecryptUpdate(&ctx
, plaintext
, &outlen
, (uint8_t const *)cyphertext
, len
))
52 printf("\n ERROR!! EVP_DecryptUpdate - EVP_aes_128_cbc\n");
53 if (!EVP_DecryptFinal_ex(&ctx
, &plaintext
[outlen
], &tmplen
))
54 printf("\n ERROR!! EVP_DecryptFinal_ex - EVP_aes_128_cbc %x, %x, %x\n", len
,
61 int openssl_aes_128_cbc_enc(uint8_t * key
, uint8_t * iv
,
62 int len
, uint8_t * plaintext
, uint8_t * cyphertext
)
67 EVP_CIPHER_CTX_init(&ctx
);
68 if (!EVP_EncryptInit_ex(&ctx
, EVP_aes_128_cbc(), NULL
, key
, iv
))
69 printf("\n ERROR!! EVP_EncryptInit_ex - EVP_aes_128_cbc\n");
70 if (!EVP_CIPHER_CTX_set_padding(&ctx
, 0))
71 printf("\n ERROR!! EVP_CIPHER_CTX_set_padding - no padding\n");
72 if (!EVP_EncryptUpdate
73 (&ctx
, cyphertext
, &outlen
, (const unsigned char *)plaintext
, len
))
74 printf("\n ERROR!! EVP_EncryptUpdate - EVP_aes_128_cbc\n");
75 if (!EVP_EncryptFinal_ex(&ctx
, cyphertext
+ outlen
, &tmplen
))
76 printf("\n ERROR!! EVP_EncryptFinal_ex - EVP_aes_128_cbc\n");
82 int openssl_aes_192_cbc_dec(uint8_t * key
, uint8_t * iv
,
83 int len
, uint8_t * cyphertext
, uint8_t * plaintext
)
85 int outlen
= 0, tmplen
= 0;
87 EVP_CIPHER_CTX
*ctx
= &CTX
;
89 EVP_CIPHER_CTX_init(ctx
);
90 if (!EVP_DecryptInit_ex(ctx
, EVP_aes_192_cbc(), NULL
, key
, iv
))
91 printf("\n ERROR!! EVP_DecryptInit_ex - EVP_aes_192_cbc\n");
92 if (!EVP_CIPHER_CTX_set_padding(ctx
, 0))
93 printf("\n ERROR!! EVP_CIPHER_CTX_set_padding - no padding\n");
94 if (!EVP_DecryptUpdate
95 (ctx
, plaintext
, &outlen
, (const unsigned char *)cyphertext
, len
))
96 printf("\n ERROR!! EVP_DecryptUpdate - EVP_aes_192_cbc\n");
97 if (!EVP_DecryptFinal_ex(ctx
, plaintext
+ outlen
, &tmplen
))
98 printf("\n ERROR!! EVP_DecryptFinal_ex - EVP_aes_192_cbc \n");
104 int openssl_aes_192_cbc_enc(uint8_t * key
, uint8_t * iv
,
105 int len
, uint8_t * plaintext
, uint8_t * cyphertext
)
109 EVP_CIPHER_CTX
*ctx
= &CTX
;
111 EVP_CIPHER_CTX_init(ctx
);
112 if (!EVP_EncryptInit_ex(ctx
, EVP_aes_192_cbc(), NULL
, key
, iv
))
113 printf("\n ERROR!! EVP_EncryptInit_ex - EVP_aes_192_cbc\n");
114 if (!EVP_CIPHER_CTX_set_padding(ctx
, 0))
115 printf("\n ERROR!! EVP_CIPHER_CTX_set_padding - no padding\n");
116 if (!EVP_EncryptUpdate
117 (ctx
, cyphertext
, &outlen
, (const unsigned char *)plaintext
, len
))
118 printf("\n ERROR!! EVP_EncryptUpdate - EVP_aes_192_cbc\n");
119 if (!EVP_EncryptFinal_ex(ctx
, cyphertext
+ outlen
, &tmplen
))
120 printf("\n ERROR!! EVP_EncryptFinal_ex - EVP_aes_192_cbc\n");
126 int openssl_aes_256_cbc_dec(uint8_t * key
, uint8_t * iv
,
127 int len
, uint8_t * cyphertext
, uint8_t * plaintext
)
129 int outlen
= 0, tmplen
= 0;
131 EVP_CIPHER_CTX
*ctx
= &CTX
;
133 EVP_CIPHER_CTX_init(ctx
);
134 if (!EVP_DecryptInit_ex(ctx
, EVP_aes_256_cbc(), NULL
, key
, iv
))
135 printf("\n ERROR!! EVP_DecryptInit_ex - EVP_aes_256_cbc\n");
136 if (!EVP_CIPHER_CTX_set_padding(ctx
, 0))
137 printf("\n ERROR!! EVP_CIPHER_CTX_set_padding - no padding\n");
138 if (!EVP_DecryptUpdate
139 (ctx
, plaintext
, &outlen
, (const unsigned char *)cyphertext
, len
))
140 printf("\n ERROR!! EVP_DecryptUpdate - EVP_aes_256_cbc\n");
141 if (!EVP_DecryptFinal_ex(ctx
, plaintext
+ outlen
, &tmplen
))
142 printf("\n ERROR!! EVP_DecryptFinal_ex - EVP_aes_256_cbc %x,%x\n", outlen
,
149 int openssl_aes_256_cbc_enc(uint8_t * key
, uint8_t * iv
,
150 int len
, uint8_t * plaintext
, uint8_t * cyphertext
)
154 EVP_CIPHER_CTX
*ctx
= &CTX
;
156 EVP_CIPHER_CTX_init(ctx
);
157 if (!EVP_EncryptInit_ex(ctx
, EVP_aes_256_cbc(), NULL
, key
, iv
))
158 printf("\n ERROR!! EVP_EncryptInit_ex - EVP_aes_256_cbc\n");
159 if (!EVP_CIPHER_CTX_set_padding(ctx
, 0))
160 printf("\n ERROR!! EVP_CIPHER_CTX_set_padding - no padding\n");
161 if (!EVP_EncryptUpdate
162 (ctx
, cyphertext
, &outlen
, (const unsigned char *)plaintext
, len
))
163 printf("\n ERROR!! EVP_EncryptUpdate - EVP_aes_256_cbc\n");
164 if (!EVP_EncryptFinal_ex(ctx
, cyphertext
+ outlen
, &tmplen
))
165 printf("\n ERROR!! EVP_EncryptFinal_ex - EVP_aes_256_cbc\n");
171 int openssl_aes_gcm_dec(uint8_t * key
, uint8_t * iv
, int iv_len
, uint8_t * aad
,
172 int aad_len
, uint8_t * tag
, int tag_len
, uint8_t * cyphertext
,
173 int len
, uint8_t * plaintext
)
175 int outlen
= 0, tmplen
= len
, ret
;
177 EVP_CIPHER_CTX
*const ctx
= &CTX
;
179 EVP_CIPHER_CTX_init(ctx
);
180 if (!EVP_DecryptInit_ex(ctx
, EVP_aes_128_gcm(), NULL
, NULL
, NULL
))
181 printf("\n ERROR!! EVP_DecryptInit_ex - EVP_aes_128_gcm\n");
182 if (!EVP_CIPHER_CTX_ctrl(ctx
, EVP_CTRL_GCM_SET_TAG
, tag_len
, tag
))
183 printf("\n ERROR!! EVP_CIPHER_CTX_ctrl - set tag\n");
184 if (!EVP_CIPHER_CTX_ctrl(ctx
, EVP_CTRL_GCM_SET_IVLEN
, iv_len
, NULL
))
185 printf("\n ERROR!! EVP_CIPHER_CTX_ctrl - IV length init\n");
186 if (!EVP_DecryptInit_ex(ctx
, NULL
, NULL
, key
, iv
))
187 printf("\n ERROR!! EVP_DecryptInit_ex - key init\n");
188 if (!EVP_DecryptUpdate(ctx
, NULL
, &outlen
, aad
, aad_len
))
189 printf("\n ERROR!! EVP_DecryptUpdate - aad data setup\n");
190 if (!EVP_DecryptUpdate
191 (ctx
, plaintext
, &outlen
, (const unsigned char *)cyphertext
, len
))
192 printf("\n ERROR!! EVP_DecryptUpdate - PT->CT\n");
193 if (!EVP_CIPHER_CTX_ctrl(ctx
, EVP_CTRL_GCM_SET_TAG
, tag_len
, tag
))
194 printf("\n ERROR!! EVP_CIPHER_CTX_ctrl - set tag\n");
196 ret
= EVP_DecryptFinal_ex(ctx
, plaintext
+ outlen
, &tmplen
);
200 //Authentication failed mismatched key, ADD or tag
208 int openssl_aes_gcm_enc(uint8_t * key
, uint8_t * iv
, int iv_len
, uint8_t * aad
,
209 int aad_len
, uint8_t * tag
, int tag_len
, uint8_t * plaintext
,
210 int len
, uint8_t * cyphertext
)
214 EVP_CIPHER_CTX
*const ctx
= &CTX
;
216 //printf("ivl:%x addl:%x tagl:%x ptl:%x\n", iv_len, aad_len, tag_len, len);
217 EVP_CIPHER_CTX_init(ctx
);
218 if (!EVP_EncryptInit_ex(ctx
, EVP_aes_128_gcm(), NULL
, NULL
, NULL
))
219 printf("\n ERROR!! EVP_EncryptInit_ex - EVP_aes_128_cbc\n");
220 if (!EVP_CIPHER_CTX_ctrl(ctx
, EVP_CTRL_GCM_SET_IVLEN
, iv_len
, NULL
))
221 printf("\n ERROR!! EVP_CIPHER_CTX_ctrl - IV length init\n");
222 if (!EVP_EncryptInit_ex(ctx
, NULL
, NULL
, key
, iv
))
223 printf("\n ERROR!! EVP_EncryptInit_ex - init\n");
224 if (!EVP_EncryptUpdate(ctx
, NULL
, &outlen
, aad
, aad_len
))
225 printf("\n ERROR!! EVP_EncryptUpdate - aad insert\n");
226 if (!EVP_EncryptUpdate(ctx
, cyphertext
, &outlen
, (const uint8_t *)plaintext
, len
))
227 printf("\n ERROR!! EVP_EncryptUpdate - EVP_aes_128_cbc\n");
228 if (!EVP_EncryptFinal_ex(ctx
, cyphertext
+ outlen
, &tmplen
))
229 printf("\n ERROR!! EVP_EncryptFinal_ex - EVP_aes_128_cbc\n");
230 if (!EVP_CIPHER_CTX_ctrl(ctx
, EVP_CTRL_GCM_GET_TAG
, tag_len
, tag
))
231 printf("\n ERROR!! EVP_CIPHER_CTX_ctrl - tag \n");
237 int openssl_aes_256_gcm_dec(uint8_t * key
, uint8_t * iv
, int iv_len
, uint8_t * aad
,
238 int aad_len
, uint8_t * tag
, int tag_len
, uint8_t * cyphertext
,
239 int len
, uint8_t * plaintext
)
241 int outlen
= 0, tmplen
= len
, ret
;
243 EVP_CIPHER_CTX
*const ctx
= &CTX
;
245 EVP_CIPHER_CTX_init(ctx
);
246 if (!EVP_DecryptInit_ex(ctx
, EVP_aes_256_gcm(), NULL
, NULL
, NULL
))
247 printf("\n ERROR!! EVP_DecryptInit_ex - EVP_aes_128_gcm\n");
248 if (!EVP_CIPHER_CTX_ctrl(ctx
, EVP_CTRL_GCM_SET_TAG
, tag_len
, tag
))
249 printf("\n ERROR!! EVP_CIPHER_CTX_ctrl - set tag\n");
250 if (!EVP_CIPHER_CTX_ctrl(ctx
, EVP_CTRL_GCM_SET_IVLEN
, iv_len
, NULL
))
251 printf("\n ERROR!! EVP_CIPHER_CTX_ctrl - IV length init\n");
252 if (!EVP_DecryptInit_ex(ctx
, NULL
, NULL
, key
, iv
))
253 printf("\n ERROR!! EVP_DecryptInit_ex - key init\n");
254 if (!EVP_DecryptUpdate(ctx
, NULL
, &outlen
, aad
, aad_len
))
255 printf("\n ERROR!! EVP_DecryptUpdate - aad data setup\n");
256 if (!EVP_DecryptUpdate
257 (ctx
, plaintext
, &outlen
, (const unsigned char *)cyphertext
, len
))
258 printf("\n ERROR!! EVP_DecryptUpdate - PT->CT\n");
259 if (!EVP_CIPHER_CTX_ctrl(ctx
, EVP_CTRL_GCM_SET_TAG
, tag_len
, tag
))
260 printf("\n ERROR!! EVP_CIPHER_CTX_ctrl - set tag\n");
261 ret
= EVP_DecryptFinal_ex(ctx
, plaintext
+ outlen
, &tmplen
);
265 //Authentication failed mismatched key, ADD or tag
273 int openssl_aes_256_gcm_enc(uint8_t * key
, uint8_t * iv
, int iv_len
, uint8_t * aad
,
274 int aad_len
, uint8_t * tag
, int tag_len
, uint8_t * plaintext
,
275 int len
, uint8_t * cyphertext
)
279 EVP_CIPHER_CTX
*const ctx
= &CTX
;
281 EVP_CIPHER_CTX_init(ctx
);
282 if (!EVP_EncryptInit_ex(ctx
, EVP_aes_256_gcm(), NULL
, NULL
, NULL
))
283 printf("\n ERROR!! EVP_EncryptInit_ex - EVP_aes_128_cbc\n");
284 if (!EVP_CIPHER_CTX_ctrl(ctx
, EVP_CTRL_GCM_SET_IVLEN
, iv_len
, NULL
))
285 printf("\n ERROR!! EVP_CIPHER_CTX_ctrl - IV length init\n");
286 if (!EVP_EncryptInit_ex(ctx
, NULL
, NULL
, key
, iv
))
287 printf("\n ERROR!! EVP_EncryptInit_ex - init\n");
288 if (!EVP_EncryptUpdate(ctx
, NULL
, &outlen
, aad
, aad_len
))
289 printf("\n ERROR!! EVP_EncryptUpdate - aad insert\n");
290 if (!EVP_EncryptUpdate(ctx
, cyphertext
, &outlen
, (const uint8_t *)plaintext
, len
))
291 printf("\n ERROR!! EVP_EncryptUpdate - EVP_aes_128_cbc\n");
292 if (!EVP_EncryptFinal_ex(ctx
, cyphertext
+ outlen
, &tmplen
))
293 printf("\n ERROR!! EVP_EncryptFinal_ex - EVP_aes_128_cbc\n");
294 if (!EVP_CIPHER_CTX_ctrl(ctx
, EVP_CTRL_GCM_GET_TAG
, tag_len
, tag
))
295 printf("\n ERROR!! EVP_CIPHER_CTX_ctrl - tag \n");
300 #endif /* AES_OSSL_HELPER_H_ */