]>
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;
45 ctx
= EVP_CIPHER_CTX_new();
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
,
57 EVP_CIPHER_CTX_free(ctx
);
62 int openssl_aes_128_cbc_enc(uint8_t * key
, uint8_t * iv
,
63 int len
, uint8_t * plaintext
, uint8_t * cyphertext
)
67 ctx
= EVP_CIPHER_CTX_new();
69 if (!EVP_EncryptInit_ex(ctx
, EVP_aes_128_cbc(), NULL
, key
, iv
))
70 printf("\n ERROR!! EVP_EncryptInit_ex - EVP_aes_128_cbc\n");
71 if (!EVP_CIPHER_CTX_set_padding(ctx
, 0))
72 printf("\n ERROR!! EVP_CIPHER_CTX_set_padding - no padding\n");
73 if (!EVP_EncryptUpdate
74 (ctx
, cyphertext
, &outlen
, (const unsigned char *)plaintext
, len
))
75 printf("\n ERROR!! EVP_EncryptUpdate - EVP_aes_128_cbc\n");
76 if (!EVP_EncryptFinal_ex(ctx
, cyphertext
+ outlen
, &tmplen
))
77 printf("\n ERROR!! EVP_EncryptFinal_ex - EVP_aes_128_cbc\n");
79 EVP_CIPHER_CTX_free(ctx
);
84 int openssl_aes_192_cbc_dec(uint8_t * key
, uint8_t * iv
,
85 int len
, uint8_t * cyphertext
, uint8_t * plaintext
)
87 int outlen
= 0, tmplen
= 0;
89 ctx
= EVP_CIPHER_CTX_new();
91 if (!EVP_DecryptInit_ex(ctx
, EVP_aes_192_cbc(), NULL
, key
, iv
))
92 printf("\n ERROR!! EVP_DecryptInit_ex - EVP_aes_192_cbc\n");
93 if (!EVP_CIPHER_CTX_set_padding(ctx
, 0))
94 printf("\n ERROR!! EVP_CIPHER_CTX_set_padding - no padding\n");
95 if (!EVP_DecryptUpdate
96 (ctx
, plaintext
, &outlen
, (const unsigned char *)cyphertext
, len
))
97 printf("\n ERROR!! EVP_DecryptUpdate - EVP_aes_192_cbc\n");
98 if (!EVP_DecryptFinal_ex(ctx
, plaintext
+ outlen
, &tmplen
))
99 printf("\n ERROR!! EVP_DecryptFinal_ex - EVP_aes_192_cbc \n");
101 EVP_CIPHER_CTX_free(ctx
);
106 int openssl_aes_192_cbc_enc(uint8_t * key
, uint8_t * iv
,
107 int len
, uint8_t * plaintext
, uint8_t * cyphertext
)
111 ctx
= EVP_CIPHER_CTX_new();
113 if (!EVP_EncryptInit_ex(ctx
, EVP_aes_192_cbc(), NULL
, key
, iv
))
114 printf("\n ERROR!! EVP_EncryptInit_ex - EVP_aes_192_cbc\n");
115 if (!EVP_CIPHER_CTX_set_padding(ctx
, 0))
116 printf("\n ERROR!! EVP_CIPHER_CTX_set_padding - no padding\n");
117 if (!EVP_EncryptUpdate
118 (ctx
, cyphertext
, &outlen
, (const unsigned char *)plaintext
, len
))
119 printf("\n ERROR!! EVP_EncryptUpdate - EVP_aes_192_cbc\n");
120 if (!EVP_EncryptFinal_ex(ctx
, cyphertext
+ outlen
, &tmplen
))
121 printf("\n ERROR!! EVP_EncryptFinal_ex - EVP_aes_192_cbc\n");
123 EVP_CIPHER_CTX_free(ctx
);
128 int openssl_aes_256_cbc_dec(uint8_t * key
, uint8_t * iv
,
129 int len
, uint8_t * cyphertext
, uint8_t * plaintext
)
131 int outlen
= 0, tmplen
= 0;
133 ctx
= EVP_CIPHER_CTX_new();
135 if (!EVP_DecryptInit_ex(ctx
, EVP_aes_256_cbc(), NULL
, key
, iv
))
136 printf("\n ERROR!! EVP_DecryptInit_ex - EVP_aes_256_cbc\n");
137 if (!EVP_CIPHER_CTX_set_padding(ctx
, 0))
138 printf("\n ERROR!! EVP_CIPHER_CTX_set_padding - no padding\n");
139 if (!EVP_DecryptUpdate
140 (ctx
, plaintext
, &outlen
, (const unsigned char *)cyphertext
, len
))
141 printf("\n ERROR!! EVP_DecryptUpdate - EVP_aes_256_cbc\n");
142 if (!EVP_DecryptFinal_ex(ctx
, plaintext
+ outlen
, &tmplen
))
143 printf("\n ERROR!! EVP_DecryptFinal_ex - EVP_aes_256_cbc %x,%x\n", outlen
,
146 EVP_CIPHER_CTX_free(ctx
);
151 int openssl_aes_256_cbc_enc(uint8_t * key
, uint8_t * iv
,
152 int len
, uint8_t * plaintext
, uint8_t * cyphertext
)
156 ctx
= EVP_CIPHER_CTX_new();
158 if (!EVP_EncryptInit_ex(ctx
, EVP_aes_256_cbc(), NULL
, key
, iv
))
159 printf("\n ERROR!! EVP_EncryptInit_ex - EVP_aes_256_cbc\n");
160 if (!EVP_CIPHER_CTX_set_padding(ctx
, 0))
161 printf("\n ERROR!! EVP_CIPHER_CTX_set_padding - no padding\n");
162 if (!EVP_EncryptUpdate
163 (ctx
, cyphertext
, &outlen
, (const unsigned char *)plaintext
, len
))
164 printf("\n ERROR!! EVP_EncryptUpdate - EVP_aes_256_cbc\n");
165 if (!EVP_EncryptFinal_ex(ctx
, cyphertext
+ outlen
, &tmplen
))
166 printf("\n ERROR!! EVP_EncryptFinal_ex - EVP_aes_256_cbc\n");
168 EVP_CIPHER_CTX_free(ctx
);
173 int openssl_aes_gcm_dec(uint8_t * key
, uint8_t * iv
, int iv_len
, uint8_t * aad
,
174 int aad_len
, uint8_t * tag
, int tag_len
, uint8_t * cyphertext
,
175 int len
, uint8_t * plaintext
)
177 int outlen
= 0, tmplen
= len
, ret
;
179 ctx
= EVP_CIPHER_CTX_new();
181 if (!EVP_DecryptInit_ex(ctx
, EVP_aes_128_gcm(), NULL
, NULL
, NULL
))
182 printf("\n ERROR!! EVP_DecryptInit_ex - EVP_aes_128_gcm\n");
183 if (!EVP_CIPHER_CTX_ctrl(ctx
, EVP_CTRL_GCM_SET_TAG
, tag_len
, tag
))
184 printf("\n ERROR!! EVP_CIPHER_CTX_ctrl - set tag\n");
185 if (!EVP_CIPHER_CTX_ctrl(ctx
, EVP_CTRL_GCM_SET_IVLEN
, iv_len
, NULL
))
186 printf("\n ERROR!! EVP_CIPHER_CTX_ctrl - IV length init\n");
187 if (!EVP_DecryptInit_ex(ctx
, NULL
, NULL
, key
, iv
))
188 printf("\n ERROR!! EVP_DecryptInit_ex - key init\n");
189 if (!EVP_DecryptUpdate(ctx
, NULL
, &outlen
, aad
, aad_len
))
190 printf("\n ERROR!! EVP_DecryptUpdate - aad data setup\n");
191 if (!EVP_DecryptUpdate
192 (ctx
, plaintext
, &outlen
, (const unsigned char *)cyphertext
, len
))
193 printf("\n ERROR!! EVP_DecryptUpdate - PT->CT\n");
194 if (!EVP_CIPHER_CTX_ctrl(ctx
, EVP_CTRL_GCM_SET_TAG
, tag_len
, tag
))
195 printf("\n ERROR!! EVP_CIPHER_CTX_ctrl - set tag\n");
197 ret
= EVP_DecryptFinal_ex(ctx
, plaintext
+ outlen
, &tmplen
);
201 //Authentication failed mismatched key, ADD or tag
205 EVP_CIPHER_CTX_free(ctx
);
210 int openssl_aes_gcm_enc(uint8_t * key
, uint8_t * iv
, int iv_len
, uint8_t * aad
,
211 int aad_len
, uint8_t * tag
, int tag_len
, uint8_t * plaintext
,
212 int len
, uint8_t * cyphertext
)
216 ctx
= EVP_CIPHER_CTX_new();
218 //printf("ivl:%x addl:%x tagl:%x ptl:%x\n", iv_len, aad_len, tag_len, len);
219 if (!EVP_EncryptInit_ex(ctx
, EVP_aes_128_gcm(), NULL
, NULL
, NULL
))
220 printf("\n ERROR!! EVP_EncryptInit_ex - EVP_aes_128_cbc\n");
221 if (!EVP_CIPHER_CTX_ctrl(ctx
, EVP_CTRL_GCM_SET_IVLEN
, iv_len
, NULL
))
222 printf("\n ERROR!! EVP_CIPHER_CTX_ctrl - IV length init\n");
223 if (!EVP_EncryptInit_ex(ctx
, NULL
, NULL
, key
, iv
))
224 printf("\n ERROR!! EVP_EncryptInit_ex - init\n");
225 if (!EVP_EncryptUpdate(ctx
, NULL
, &outlen
, aad
, aad_len
))
226 printf("\n ERROR!! EVP_EncryptUpdate - aad insert\n");
227 if (!EVP_EncryptUpdate(ctx
, cyphertext
, &outlen
, (const uint8_t *)plaintext
, len
))
228 printf("\n ERROR!! EVP_EncryptUpdate - EVP_aes_128_cbc\n");
229 if (!EVP_EncryptFinal_ex(ctx
, cyphertext
+ outlen
, &tmplen
))
230 printf("\n ERROR!! EVP_EncryptFinal_ex - EVP_aes_128_cbc\n");
231 if (!EVP_CIPHER_CTX_ctrl(ctx
, EVP_CTRL_GCM_GET_TAG
, tag_len
, tag
))
232 printf("\n ERROR!! EVP_CIPHER_CTX_ctrl - tag \n");
234 EVP_CIPHER_CTX_free(ctx
);
239 int openssl_aes_256_gcm_dec(uint8_t * key
, uint8_t * iv
, int iv_len
, uint8_t * aad
,
240 int aad_len
, uint8_t * tag
, int tag_len
, uint8_t * cyphertext
,
241 int len
, uint8_t * plaintext
)
243 int outlen
= 0, tmplen
= len
, ret
;
245 ctx
= EVP_CIPHER_CTX_new();
247 if (!EVP_DecryptInit_ex(ctx
, EVP_aes_256_gcm(), NULL
, NULL
, NULL
))
248 printf("\n ERROR!! EVP_DecryptInit_ex - EVP_aes_128_gcm\n");
249 if (!EVP_CIPHER_CTX_ctrl(ctx
, EVP_CTRL_GCM_SET_TAG
, tag_len
, tag
))
250 printf("\n ERROR!! EVP_CIPHER_CTX_ctrl - set tag\n");
251 if (!EVP_CIPHER_CTX_ctrl(ctx
, EVP_CTRL_GCM_SET_IVLEN
, iv_len
, NULL
))
252 printf("\n ERROR!! EVP_CIPHER_CTX_ctrl - IV length init\n");
253 if (!EVP_DecryptInit_ex(ctx
, NULL
, NULL
, key
, iv
))
254 printf("\n ERROR!! EVP_DecryptInit_ex - key init\n");
255 if (!EVP_DecryptUpdate(ctx
, NULL
, &outlen
, aad
, aad_len
))
256 printf("\n ERROR!! EVP_DecryptUpdate - aad data setup\n");
257 if (!EVP_DecryptUpdate
258 (ctx
, plaintext
, &outlen
, (const unsigned char *)cyphertext
, len
))
259 printf("\n ERROR!! EVP_DecryptUpdate - PT->CT\n");
260 if (!EVP_CIPHER_CTX_ctrl(ctx
, EVP_CTRL_GCM_SET_TAG
, tag_len
, tag
))
261 printf("\n ERROR!! EVP_CIPHER_CTX_ctrl - set tag\n");
262 ret
= EVP_DecryptFinal_ex(ctx
, plaintext
+ outlen
, &tmplen
);
266 //Authentication failed mismatched key, ADD or tag
270 EVP_CIPHER_CTX_free(ctx
);
275 int openssl_aes_256_gcm_enc(uint8_t * key
, uint8_t * iv
, int iv_len
, uint8_t * aad
,
276 int aad_len
, uint8_t * tag
, int tag_len
, uint8_t * plaintext
,
277 int len
, uint8_t * cyphertext
)
281 ctx
= EVP_CIPHER_CTX_new();
283 if (!EVP_EncryptInit_ex(ctx
, EVP_aes_256_gcm(), NULL
, NULL
, NULL
))
284 printf("\n ERROR!! EVP_EncryptInit_ex - EVP_aes_128_cbc\n");
285 if (!EVP_CIPHER_CTX_ctrl(ctx
, EVP_CTRL_GCM_SET_IVLEN
, iv_len
, NULL
))
286 printf("\n ERROR!! EVP_CIPHER_CTX_ctrl - IV length init\n");
287 if (!EVP_EncryptInit_ex(ctx
, NULL
, NULL
, key
, iv
))
288 printf("\n ERROR!! EVP_EncryptInit_ex - init\n");
289 if (!EVP_EncryptUpdate(ctx
, NULL
, &outlen
, aad
, aad_len
))
290 printf("\n ERROR!! EVP_EncryptUpdate - aad insert\n");
291 if (!EVP_EncryptUpdate(ctx
, cyphertext
, &outlen
, (const uint8_t *)plaintext
, len
))
292 printf("\n ERROR!! EVP_EncryptUpdate - EVP_aes_128_cbc\n");
293 if (!EVP_EncryptFinal_ex(ctx
, cyphertext
+ outlen
, &tmplen
))
294 printf("\n ERROR!! EVP_EncryptFinal_ex - EVP_aes_128_cbc\n");
295 if (!EVP_CIPHER_CTX_ctrl(ctx
, EVP_CTRL_GCM_GET_TAG
, tag_len
, tag
))
296 printf("\n ERROR!! EVP_CIPHER_CTX_ctrl - tag \n");
298 EVP_CIPHER_CTX_free(ctx
);
302 #endif /* AES_OSSL_HELPER_H_ */