e_aes.c 96 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703
  1. /*
  2. * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved.
  3. *
  4. * Licensed under the OpenSSL license (the "License"). You may not use
  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
  8. */
  9. #include <openssl/opensslconf.h>
  10. #include <openssl/crypto.h>
  11. #include <openssl/evp.h>
  12. #include <openssl/err.h>
  13. #include <string.h>
  14. #include <assert.h>
  15. #include <openssl/aes.h>
  16. #include "internal/evp_int.h"
  17. #include "modes_lcl.h"
  18. #include <openssl/rand.h>
  19. #include "evp_locl.h"
  20. typedef struct {
  21. union {
  22. double align;
  23. AES_KEY ks;
  24. } ks;
  25. block128_f block;
  26. union {
  27. cbc128_f cbc;
  28. ctr128_f ctr;
  29. } stream;
  30. } EVP_AES_KEY;
  31. typedef struct {
  32. union {
  33. double align;
  34. AES_KEY ks;
  35. } ks; /* AES key schedule to use */
  36. int key_set; /* Set if key initialised */
  37. int iv_set; /* Set if an iv is set */
  38. GCM128_CONTEXT gcm;
  39. unsigned char *iv; /* Temporary IV store */
  40. int ivlen; /* IV length */
  41. int taglen;
  42. int iv_gen; /* It is OK to generate IVs */
  43. int tls_aad_len; /* TLS AAD length */
  44. ctr128_f ctr;
  45. } EVP_AES_GCM_CTX;
  46. typedef struct {
  47. union {
  48. double align;
  49. AES_KEY ks;
  50. } ks1, ks2; /* AES key schedules to use */
  51. XTS128_CONTEXT xts;
  52. void (*stream) (const unsigned char *in,
  53. unsigned char *out, size_t length,
  54. const AES_KEY *key1, const AES_KEY *key2,
  55. const unsigned char iv[16]);
  56. } EVP_AES_XTS_CTX;
  57. typedef struct {
  58. union {
  59. double align;
  60. AES_KEY ks;
  61. } ks; /* AES key schedule to use */
  62. int key_set; /* Set if key initialised */
  63. int iv_set; /* Set if an iv is set */
  64. int tag_set; /* Set if tag is valid */
  65. int len_set; /* Set if message length set */
  66. int L, M; /* L and M parameters from RFC3610 */
  67. int tls_aad_len; /* TLS AAD length */
  68. CCM128_CONTEXT ccm;
  69. ccm128_f str;
  70. } EVP_AES_CCM_CTX;
  71. #ifndef OPENSSL_NO_OCB
  72. typedef struct {
  73. union {
  74. double align;
  75. AES_KEY ks;
  76. } ksenc; /* AES key schedule to use for encryption */
  77. union {
  78. double align;
  79. AES_KEY ks;
  80. } ksdec; /* AES key schedule to use for decryption */
  81. int key_set; /* Set if key initialised */
  82. int iv_set; /* Set if an iv is set */
  83. OCB128_CONTEXT ocb;
  84. unsigned char *iv; /* Temporary IV store */
  85. unsigned char tag[16];
  86. unsigned char data_buf[16]; /* Store partial data blocks */
  87. unsigned char aad_buf[16]; /* Store partial AAD blocks */
  88. int data_buf_len;
  89. int aad_buf_len;
  90. int ivlen; /* IV length */
  91. int taglen;
  92. } EVP_AES_OCB_CTX;
  93. #endif
  94. #define MAXBITCHUNK ((size_t)1<<(sizeof(size_t)*8-4))
  95. #ifdef VPAES_ASM
  96. int vpaes_set_encrypt_key(const unsigned char *userKey, int bits,
  97. AES_KEY *key);
  98. int vpaes_set_decrypt_key(const unsigned char *userKey, int bits,
  99. AES_KEY *key);
  100. void vpaes_encrypt(const unsigned char *in, unsigned char *out,
  101. const AES_KEY *key);
  102. void vpaes_decrypt(const unsigned char *in, unsigned char *out,
  103. const AES_KEY *key);
  104. void vpaes_cbc_encrypt(const unsigned char *in,
  105. unsigned char *out,
  106. size_t length,
  107. const AES_KEY *key, unsigned char *ivec, int enc);
  108. #endif
  109. #ifdef BSAES_ASM
  110. void bsaes_cbc_encrypt(const unsigned char *in, unsigned char *out,
  111. size_t length, const AES_KEY *key,
  112. unsigned char ivec[16], int enc);
  113. void bsaes_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out,
  114. size_t len, const AES_KEY *key,
  115. const unsigned char ivec[16]);
  116. void bsaes_xts_encrypt(const unsigned char *inp, unsigned char *out,
  117. size_t len, const AES_KEY *key1,
  118. const AES_KEY *key2, const unsigned char iv[16]);
  119. void bsaes_xts_decrypt(const unsigned char *inp, unsigned char *out,
  120. size_t len, const AES_KEY *key1,
  121. const AES_KEY *key2, const unsigned char iv[16]);
  122. #endif
  123. #ifdef AES_CTR_ASM
  124. void AES_ctr32_encrypt(const unsigned char *in, unsigned char *out,
  125. size_t blocks, const AES_KEY *key,
  126. const unsigned char ivec[AES_BLOCK_SIZE]);
  127. #endif
  128. #ifdef AES_XTS_ASM
  129. void AES_xts_encrypt(const unsigned char *inp, unsigned char *out, size_t len,
  130. const AES_KEY *key1, const AES_KEY *key2,
  131. const unsigned char iv[16]);
  132. void AES_xts_decrypt(const unsigned char *inp, unsigned char *out, size_t len,
  133. const AES_KEY *key1, const AES_KEY *key2,
  134. const unsigned char iv[16]);
  135. #endif
  136. #if defined(OPENSSL_CPUID_OBJ) && (defined(__powerpc__) || defined(__ppc__) || defined(_ARCH_PPC))
  137. # include "ppc_arch.h"
  138. # ifdef VPAES_ASM
  139. # define VPAES_CAPABLE (OPENSSL_ppccap_P & PPC_ALTIVEC)
  140. # endif
  141. # define HWAES_CAPABLE (OPENSSL_ppccap_P & PPC_CRYPTO207)
  142. # define HWAES_set_encrypt_key aes_p8_set_encrypt_key
  143. # define HWAES_set_decrypt_key aes_p8_set_decrypt_key
  144. # define HWAES_encrypt aes_p8_encrypt
  145. # define HWAES_decrypt aes_p8_decrypt
  146. # define HWAES_cbc_encrypt aes_p8_cbc_encrypt
  147. # define HWAES_ctr32_encrypt_blocks aes_p8_ctr32_encrypt_blocks
  148. # define HWAES_xts_encrypt aes_p8_xts_encrypt
  149. # define HWAES_xts_decrypt aes_p8_xts_decrypt
  150. #endif
  151. #if defined(AES_ASM) && !defined(I386_ONLY) && ( \
  152. ((defined(__i386) || defined(__i386__) || \
  153. defined(_M_IX86)) && defined(OPENSSL_IA32_SSE2))|| \
  154. defined(__x86_64) || defined(__x86_64__) || \
  155. defined(_M_AMD64) || defined(_M_X64) )
  156. extern unsigned int OPENSSL_ia32cap_P[];
  157. # ifdef VPAES_ASM
  158. # define VPAES_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(41-32)))
  159. # endif
  160. # ifdef BSAES_ASM
  161. # define BSAES_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(41-32)))
  162. # endif
  163. /*
  164. * AES-NI section
  165. */
  166. # define AESNI_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(57-32)))
  167. int aesni_set_encrypt_key(const unsigned char *userKey, int bits,
  168. AES_KEY *key);
  169. int aesni_set_decrypt_key(const unsigned char *userKey, int bits,
  170. AES_KEY *key);
  171. void aesni_encrypt(const unsigned char *in, unsigned char *out,
  172. const AES_KEY *key);
  173. void aesni_decrypt(const unsigned char *in, unsigned char *out,
  174. const AES_KEY *key);
  175. void aesni_ecb_encrypt(const unsigned char *in,
  176. unsigned char *out,
  177. size_t length, const AES_KEY *key, int enc);
  178. void aesni_cbc_encrypt(const unsigned char *in,
  179. unsigned char *out,
  180. size_t length,
  181. const AES_KEY *key, unsigned char *ivec, int enc);
  182. void aesni_ctr32_encrypt_blocks(const unsigned char *in,
  183. unsigned char *out,
  184. size_t blocks,
  185. const void *key, const unsigned char *ivec);
  186. void aesni_xts_encrypt(const unsigned char *in,
  187. unsigned char *out,
  188. size_t length,
  189. const AES_KEY *key1, const AES_KEY *key2,
  190. const unsigned char iv[16]);
  191. void aesni_xts_decrypt(const unsigned char *in,
  192. unsigned char *out,
  193. size_t length,
  194. const AES_KEY *key1, const AES_KEY *key2,
  195. const unsigned char iv[16]);
  196. void aesni_ccm64_encrypt_blocks(const unsigned char *in,
  197. unsigned char *out,
  198. size_t blocks,
  199. const void *key,
  200. const unsigned char ivec[16],
  201. unsigned char cmac[16]);
  202. void aesni_ccm64_decrypt_blocks(const unsigned char *in,
  203. unsigned char *out,
  204. size_t blocks,
  205. const void *key,
  206. const unsigned char ivec[16],
  207. unsigned char cmac[16]);
  208. # if defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || defined(_M_X64)
  209. size_t aesni_gcm_encrypt(const unsigned char *in,
  210. unsigned char *out,
  211. size_t len,
  212. const void *key, unsigned char ivec[16], u64 *Xi);
  213. # define AES_gcm_encrypt aesni_gcm_encrypt
  214. size_t aesni_gcm_decrypt(const unsigned char *in,
  215. unsigned char *out,
  216. size_t len,
  217. const void *key, unsigned char ivec[16], u64 *Xi);
  218. # define AES_gcm_decrypt aesni_gcm_decrypt
  219. void gcm_ghash_avx(u64 Xi[2], const u128 Htable[16], const u8 *in,
  220. size_t len);
  221. # define AES_GCM_ASM(gctx) (gctx->ctr==aesni_ctr32_encrypt_blocks && \
  222. gctx->gcm.ghash==gcm_ghash_avx)
  223. # define AES_GCM_ASM2(gctx) (gctx->gcm.block==(block128_f)aesni_encrypt && \
  224. gctx->gcm.ghash==gcm_ghash_avx)
  225. # undef AES_GCM_ASM2 /* minor size optimization */
  226. # endif
  227. static int aesni_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
  228. const unsigned char *iv, int enc)
  229. {
  230. int ret, mode;
  231. EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
  232. mode = EVP_CIPHER_CTX_mode(ctx);
  233. if ((mode == EVP_CIPH_ECB_MODE || mode == EVP_CIPH_CBC_MODE)
  234. && !enc) {
  235. ret = aesni_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
  236. &dat->ks.ks);
  237. dat->block = (block128_f) aesni_decrypt;
  238. dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
  239. (cbc128_f) aesni_cbc_encrypt : NULL;
  240. } else {
  241. ret = aesni_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
  242. &dat->ks.ks);
  243. dat->block = (block128_f) aesni_encrypt;
  244. if (mode == EVP_CIPH_CBC_MODE)
  245. dat->stream.cbc = (cbc128_f) aesni_cbc_encrypt;
  246. else if (mode == EVP_CIPH_CTR_MODE)
  247. dat->stream.ctr = (ctr128_f) aesni_ctr32_encrypt_blocks;
  248. else
  249. dat->stream.cbc = NULL;
  250. }
  251. if (ret < 0) {
  252. EVPerr(EVP_F_AESNI_INIT_KEY, EVP_R_AES_KEY_SETUP_FAILED);
  253. return 0;
  254. }
  255. return 1;
  256. }
  257. static int aesni_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  258. const unsigned char *in, size_t len)
  259. {
  260. aesni_cbc_encrypt(in, out, len, &EVP_C_DATA(EVP_AES_KEY,ctx)->ks.ks,
  261. EVP_CIPHER_CTX_iv_noconst(ctx),
  262. EVP_CIPHER_CTX_encrypting(ctx));
  263. return 1;
  264. }
  265. static int aesni_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  266. const unsigned char *in, size_t len)
  267. {
  268. size_t bl = EVP_CIPHER_CTX_block_size(ctx);
  269. if (len < bl)
  270. return 1;
  271. aesni_ecb_encrypt(in, out, len, &EVP_C_DATA(EVP_AES_KEY,ctx)->ks.ks,
  272. EVP_CIPHER_CTX_encrypting(ctx));
  273. return 1;
  274. }
  275. # define aesni_ofb_cipher aes_ofb_cipher
  276. static int aesni_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  277. const unsigned char *in, size_t len);
  278. # define aesni_cfb_cipher aes_cfb_cipher
  279. static int aesni_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  280. const unsigned char *in, size_t len);
  281. # define aesni_cfb8_cipher aes_cfb8_cipher
  282. static int aesni_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  283. const unsigned char *in, size_t len);
  284. # define aesni_cfb1_cipher aes_cfb1_cipher
  285. static int aesni_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  286. const unsigned char *in, size_t len);
  287. # define aesni_ctr_cipher aes_ctr_cipher
  288. static int aesni_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  289. const unsigned char *in, size_t len);
  290. static int aesni_gcm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
  291. const unsigned char *iv, int enc)
  292. {
  293. EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,ctx);
  294. if (!iv && !key)
  295. return 1;
  296. if (key) {
  297. aesni_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
  298. &gctx->ks.ks);
  299. CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks, (block128_f) aesni_encrypt);
  300. gctx->ctr = (ctr128_f) aesni_ctr32_encrypt_blocks;
  301. /*
  302. * If we have an iv can set it directly, otherwise use saved IV.
  303. */
  304. if (iv == NULL && gctx->iv_set)
  305. iv = gctx->iv;
  306. if (iv) {
  307. CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen);
  308. gctx->iv_set = 1;
  309. }
  310. gctx->key_set = 1;
  311. } else {
  312. /* If key set use IV, otherwise copy */
  313. if (gctx->key_set)
  314. CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen);
  315. else
  316. memcpy(gctx->iv, iv, gctx->ivlen);
  317. gctx->iv_set = 1;
  318. gctx->iv_gen = 0;
  319. }
  320. return 1;
  321. }
  322. # define aesni_gcm_cipher aes_gcm_cipher
  323. static int aesni_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  324. const unsigned char *in, size_t len);
  325. static int aesni_xts_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
  326. const unsigned char *iv, int enc)
  327. {
  328. EVP_AES_XTS_CTX *xctx = EVP_C_DATA(EVP_AES_XTS_CTX,ctx);
  329. if (!iv && !key)
  330. return 1;
  331. if (key) {
  332. /* key_len is two AES keys */
  333. if (enc) {
  334. aesni_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 4,
  335. &xctx->ks1.ks);
  336. xctx->xts.block1 = (block128_f) aesni_encrypt;
  337. xctx->stream = aesni_xts_encrypt;
  338. } else {
  339. aesni_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 4,
  340. &xctx->ks1.ks);
  341. xctx->xts.block1 = (block128_f) aesni_decrypt;
  342. xctx->stream = aesni_xts_decrypt;
  343. }
  344. aesni_set_encrypt_key(key + EVP_CIPHER_CTX_key_length(ctx) / 2,
  345. EVP_CIPHER_CTX_key_length(ctx) * 4,
  346. &xctx->ks2.ks);
  347. xctx->xts.block2 = (block128_f) aesni_encrypt;
  348. xctx->xts.key1 = &xctx->ks1;
  349. }
  350. if (iv) {
  351. xctx->xts.key2 = &xctx->ks2;
  352. memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), iv, 16);
  353. }
  354. return 1;
  355. }
  356. # define aesni_xts_cipher aes_xts_cipher
  357. static int aesni_xts_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  358. const unsigned char *in, size_t len);
  359. static int aesni_ccm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
  360. const unsigned char *iv, int enc)
  361. {
  362. EVP_AES_CCM_CTX *cctx = EVP_C_DATA(EVP_AES_CCM_CTX,ctx);
  363. if (!iv && !key)
  364. return 1;
  365. if (key) {
  366. aesni_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
  367. &cctx->ks.ks);
  368. CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L,
  369. &cctx->ks, (block128_f) aesni_encrypt);
  370. cctx->str = enc ? (ccm128_f) aesni_ccm64_encrypt_blocks :
  371. (ccm128_f) aesni_ccm64_decrypt_blocks;
  372. cctx->key_set = 1;
  373. }
  374. if (iv) {
  375. memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), iv, 15 - cctx->L);
  376. cctx->iv_set = 1;
  377. }
  378. return 1;
  379. }
  380. # define aesni_ccm_cipher aes_ccm_cipher
  381. static int aesni_ccm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  382. const unsigned char *in, size_t len);
  383. # ifndef OPENSSL_NO_OCB
  384. void aesni_ocb_encrypt(const unsigned char *in, unsigned char *out,
  385. size_t blocks, const void *key,
  386. size_t start_block_num,
  387. unsigned char offset_i[16],
  388. const unsigned char L_[][16],
  389. unsigned char checksum[16]);
  390. void aesni_ocb_decrypt(const unsigned char *in, unsigned char *out,
  391. size_t blocks, const void *key,
  392. size_t start_block_num,
  393. unsigned char offset_i[16],
  394. const unsigned char L_[][16],
  395. unsigned char checksum[16]);
  396. static int aesni_ocb_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
  397. const unsigned char *iv, int enc)
  398. {
  399. EVP_AES_OCB_CTX *octx = EVP_C_DATA(EVP_AES_OCB_CTX,ctx);
  400. if (!iv && !key)
  401. return 1;
  402. if (key) {
  403. do {
  404. /*
  405. * We set both the encrypt and decrypt key here because decrypt
  406. * needs both. We could possibly optimise to remove setting the
  407. * decrypt for an encryption operation.
  408. */
  409. aesni_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
  410. &octx->ksenc.ks);
  411. aesni_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
  412. &octx->ksdec.ks);
  413. if (!CRYPTO_ocb128_init(&octx->ocb,
  414. &octx->ksenc.ks, &octx->ksdec.ks,
  415. (block128_f) aesni_encrypt,
  416. (block128_f) aesni_decrypt,
  417. enc ? aesni_ocb_encrypt
  418. : aesni_ocb_decrypt))
  419. return 0;
  420. }
  421. while (0);
  422. /*
  423. * If we have an iv we can set it directly, otherwise use saved IV.
  424. */
  425. if (iv == NULL && octx->iv_set)
  426. iv = octx->iv;
  427. if (iv) {
  428. if (CRYPTO_ocb128_setiv(&octx->ocb, iv, octx->ivlen, octx->taglen)
  429. != 1)
  430. return 0;
  431. octx->iv_set = 1;
  432. }
  433. octx->key_set = 1;
  434. } else {
  435. /* If key set use IV, otherwise copy */
  436. if (octx->key_set)
  437. CRYPTO_ocb128_setiv(&octx->ocb, iv, octx->ivlen, octx->taglen);
  438. else
  439. memcpy(octx->iv, iv, octx->ivlen);
  440. octx->iv_set = 1;
  441. }
  442. return 1;
  443. }
  444. # define aesni_ocb_cipher aes_ocb_cipher
  445. static int aesni_ocb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  446. const unsigned char *in, size_t len);
  447. # endif /* OPENSSL_NO_OCB */
  448. # define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \
  449. static const EVP_CIPHER aesni_##keylen##_##mode = { \
  450. nid##_##keylen##_##nmode,blocksize,keylen/8,ivlen, \
  451. flags|EVP_CIPH_##MODE##_MODE, \
  452. aesni_init_key, \
  453. aesni_##mode##_cipher, \
  454. NULL, \
  455. sizeof(EVP_AES_KEY), \
  456. NULL,NULL,NULL,NULL }; \
  457. static const EVP_CIPHER aes_##keylen##_##mode = { \
  458. nid##_##keylen##_##nmode,blocksize, \
  459. keylen/8,ivlen, \
  460. flags|EVP_CIPH_##MODE##_MODE, \
  461. aes_init_key, \
  462. aes_##mode##_cipher, \
  463. NULL, \
  464. sizeof(EVP_AES_KEY), \
  465. NULL,NULL,NULL,NULL }; \
  466. const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
  467. { return AESNI_CAPABLE?&aesni_##keylen##_##mode:&aes_##keylen##_##mode; }
  468. # define BLOCK_CIPHER_custom(nid,keylen,blocksize,ivlen,mode,MODE,flags) \
  469. static const EVP_CIPHER aesni_##keylen##_##mode = { \
  470. nid##_##keylen##_##mode,blocksize, \
  471. (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE?2:1)*keylen/8, ivlen, \
  472. flags|EVP_CIPH_##MODE##_MODE, \
  473. aesni_##mode##_init_key, \
  474. aesni_##mode##_cipher, \
  475. aes_##mode##_cleanup, \
  476. sizeof(EVP_AES_##MODE##_CTX), \
  477. NULL,NULL,aes_##mode##_ctrl,NULL }; \
  478. static const EVP_CIPHER aes_##keylen##_##mode = { \
  479. nid##_##keylen##_##mode,blocksize, \
  480. (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE?2:1)*keylen/8, ivlen, \
  481. flags|EVP_CIPH_##MODE##_MODE, \
  482. aes_##mode##_init_key, \
  483. aes_##mode##_cipher, \
  484. aes_##mode##_cleanup, \
  485. sizeof(EVP_AES_##MODE##_CTX), \
  486. NULL,NULL,aes_##mode##_ctrl,NULL }; \
  487. const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
  488. { return AESNI_CAPABLE?&aesni_##keylen##_##mode:&aes_##keylen##_##mode; }
  489. #elif defined(AES_ASM) && (defined(__sparc) || defined(__sparc__))
  490. # include "sparc_arch.h"
  491. extern unsigned int OPENSSL_sparcv9cap_P[];
  492. /*
  493. * Initial Fujitsu SPARC64 X support
  494. */
  495. # define HWAES_CAPABLE (OPENSSL_sparcv9cap_P[0] & SPARCV9_FJAESX)
  496. # define HWAES_set_encrypt_key aes_fx_set_encrypt_key
  497. # define HWAES_set_decrypt_key aes_fx_set_decrypt_key
  498. # define HWAES_encrypt aes_fx_encrypt
  499. # define HWAES_decrypt aes_fx_decrypt
  500. # define HWAES_cbc_encrypt aes_fx_cbc_encrypt
  501. # define HWAES_ctr32_encrypt_blocks aes_fx_ctr32_encrypt_blocks
  502. # define SPARC_AES_CAPABLE (OPENSSL_sparcv9cap_P[1] & CFR_AES)
  503. void aes_t4_set_encrypt_key(const unsigned char *key, int bits, AES_KEY *ks);
  504. void aes_t4_set_decrypt_key(const unsigned char *key, int bits, AES_KEY *ks);
  505. void aes_t4_encrypt(const unsigned char *in, unsigned char *out,
  506. const AES_KEY *key);
  507. void aes_t4_decrypt(const unsigned char *in, unsigned char *out,
  508. const AES_KEY *key);
  509. /*
  510. * Key-length specific subroutines were chosen for following reason.
  511. * Each SPARC T4 core can execute up to 8 threads which share core's
  512. * resources. Loading as much key material to registers allows to
  513. * minimize references to shared memory interface, as well as amount
  514. * of instructions in inner loops [much needed on T4]. But then having
  515. * non-key-length specific routines would require conditional branches
  516. * either in inner loops or on subroutines' entries. Former is hardly
  517. * acceptable, while latter means code size increase to size occupied
  518. * by multiple key-length specific subroutines, so why fight?
  519. */
  520. void aes128_t4_cbc_encrypt(const unsigned char *in, unsigned char *out,
  521. size_t len, const AES_KEY *key,
  522. unsigned char *ivec);
  523. void aes128_t4_cbc_decrypt(const unsigned char *in, unsigned char *out,
  524. size_t len, const AES_KEY *key,
  525. unsigned char *ivec);
  526. void aes192_t4_cbc_encrypt(const unsigned char *in, unsigned char *out,
  527. size_t len, const AES_KEY *key,
  528. unsigned char *ivec);
  529. void aes192_t4_cbc_decrypt(const unsigned char *in, unsigned char *out,
  530. size_t len, const AES_KEY *key,
  531. unsigned char *ivec);
  532. void aes256_t4_cbc_encrypt(const unsigned char *in, unsigned char *out,
  533. size_t len, const AES_KEY *key,
  534. unsigned char *ivec);
  535. void aes256_t4_cbc_decrypt(const unsigned char *in, unsigned char *out,
  536. size_t len, const AES_KEY *key,
  537. unsigned char *ivec);
  538. void aes128_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out,
  539. size_t blocks, const AES_KEY *key,
  540. unsigned char *ivec);
  541. void aes192_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out,
  542. size_t blocks, const AES_KEY *key,
  543. unsigned char *ivec);
  544. void aes256_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out,
  545. size_t blocks, const AES_KEY *key,
  546. unsigned char *ivec);
  547. void aes128_t4_xts_encrypt(const unsigned char *in, unsigned char *out,
  548. size_t blocks, const AES_KEY *key1,
  549. const AES_KEY *key2, const unsigned char *ivec);
  550. void aes128_t4_xts_decrypt(const unsigned char *in, unsigned char *out,
  551. size_t blocks, const AES_KEY *key1,
  552. const AES_KEY *key2, const unsigned char *ivec);
  553. void aes256_t4_xts_encrypt(const unsigned char *in, unsigned char *out,
  554. size_t blocks, const AES_KEY *key1,
  555. const AES_KEY *key2, const unsigned char *ivec);
  556. void aes256_t4_xts_decrypt(const unsigned char *in, unsigned char *out,
  557. size_t blocks, const AES_KEY *key1,
  558. const AES_KEY *key2, const unsigned char *ivec);
  559. static int aes_t4_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
  560. const unsigned char *iv, int enc)
  561. {
  562. int ret, mode, bits;
  563. EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
  564. mode = EVP_CIPHER_CTX_mode(ctx);
  565. bits = EVP_CIPHER_CTX_key_length(ctx) * 8;
  566. if ((mode == EVP_CIPH_ECB_MODE || mode == EVP_CIPH_CBC_MODE)
  567. && !enc) {
  568. ret = 0;
  569. aes_t4_set_decrypt_key(key, bits, &dat->ks.ks);
  570. dat->block = (block128_f) aes_t4_decrypt;
  571. switch (bits) {
  572. case 128:
  573. dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
  574. (cbc128_f) aes128_t4_cbc_decrypt : NULL;
  575. break;
  576. case 192:
  577. dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
  578. (cbc128_f) aes192_t4_cbc_decrypt : NULL;
  579. break;
  580. case 256:
  581. dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
  582. (cbc128_f) aes256_t4_cbc_decrypt : NULL;
  583. break;
  584. default:
  585. ret = -1;
  586. }
  587. } else {
  588. ret = 0;
  589. aes_t4_set_encrypt_key(key, bits, &dat->ks.ks);
  590. dat->block = (block128_f) aes_t4_encrypt;
  591. switch (bits) {
  592. case 128:
  593. if (mode == EVP_CIPH_CBC_MODE)
  594. dat->stream.cbc = (cbc128_f) aes128_t4_cbc_encrypt;
  595. else if (mode == EVP_CIPH_CTR_MODE)
  596. dat->stream.ctr = (ctr128_f) aes128_t4_ctr32_encrypt;
  597. else
  598. dat->stream.cbc = NULL;
  599. break;
  600. case 192:
  601. if (mode == EVP_CIPH_CBC_MODE)
  602. dat->stream.cbc = (cbc128_f) aes192_t4_cbc_encrypt;
  603. else if (mode == EVP_CIPH_CTR_MODE)
  604. dat->stream.ctr = (ctr128_f) aes192_t4_ctr32_encrypt;
  605. else
  606. dat->stream.cbc = NULL;
  607. break;
  608. case 256:
  609. if (mode == EVP_CIPH_CBC_MODE)
  610. dat->stream.cbc = (cbc128_f) aes256_t4_cbc_encrypt;
  611. else if (mode == EVP_CIPH_CTR_MODE)
  612. dat->stream.ctr = (ctr128_f) aes256_t4_ctr32_encrypt;
  613. else
  614. dat->stream.cbc = NULL;
  615. break;
  616. default:
  617. ret = -1;
  618. }
  619. }
  620. if (ret < 0) {
  621. EVPerr(EVP_F_AES_T4_INIT_KEY, EVP_R_AES_KEY_SETUP_FAILED);
  622. return 0;
  623. }
  624. return 1;
  625. }
  626. # define aes_t4_cbc_cipher aes_cbc_cipher
  627. static int aes_t4_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  628. const unsigned char *in, size_t len);
  629. # define aes_t4_ecb_cipher aes_ecb_cipher
  630. static int aes_t4_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  631. const unsigned char *in, size_t len);
  632. # define aes_t4_ofb_cipher aes_ofb_cipher
  633. static int aes_t4_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  634. const unsigned char *in, size_t len);
  635. # define aes_t4_cfb_cipher aes_cfb_cipher
  636. static int aes_t4_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  637. const unsigned char *in, size_t len);
  638. # define aes_t4_cfb8_cipher aes_cfb8_cipher
  639. static int aes_t4_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  640. const unsigned char *in, size_t len);
  641. # define aes_t4_cfb1_cipher aes_cfb1_cipher
  642. static int aes_t4_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  643. const unsigned char *in, size_t len);
  644. # define aes_t4_ctr_cipher aes_ctr_cipher
  645. static int aes_t4_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  646. const unsigned char *in, size_t len);
  647. static int aes_t4_gcm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
  648. const unsigned char *iv, int enc)
  649. {
  650. EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,ctx);
  651. if (!iv && !key)
  652. return 1;
  653. if (key) {
  654. int bits = EVP_CIPHER_CTX_key_length(ctx) * 8;
  655. aes_t4_set_encrypt_key(key, bits, &gctx->ks.ks);
  656. CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks,
  657. (block128_f) aes_t4_encrypt);
  658. switch (bits) {
  659. case 128:
  660. gctx->ctr = (ctr128_f) aes128_t4_ctr32_encrypt;
  661. break;
  662. case 192:
  663. gctx->ctr = (ctr128_f) aes192_t4_ctr32_encrypt;
  664. break;
  665. case 256:
  666. gctx->ctr = (ctr128_f) aes256_t4_ctr32_encrypt;
  667. break;
  668. default:
  669. return 0;
  670. }
  671. /*
  672. * If we have an iv can set it directly, otherwise use saved IV.
  673. */
  674. if (iv == NULL && gctx->iv_set)
  675. iv = gctx->iv;
  676. if (iv) {
  677. CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen);
  678. gctx->iv_set = 1;
  679. }
  680. gctx->key_set = 1;
  681. } else {
  682. /* If key set use IV, otherwise copy */
  683. if (gctx->key_set)
  684. CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen);
  685. else
  686. memcpy(gctx->iv, iv, gctx->ivlen);
  687. gctx->iv_set = 1;
  688. gctx->iv_gen = 0;
  689. }
  690. return 1;
  691. }
  692. # define aes_t4_gcm_cipher aes_gcm_cipher
  693. static int aes_t4_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  694. const unsigned char *in, size_t len);
  695. static int aes_t4_xts_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
  696. const unsigned char *iv, int enc)
  697. {
  698. EVP_AES_XTS_CTX *xctx = EVP_C_DATA(EVP_AES_XTS_CTX,ctx);
  699. if (!iv && !key)
  700. return 1;
  701. if (key) {
  702. int bits = EVP_CIPHER_CTX_key_length(ctx) * 4;
  703. xctx->stream = NULL;
  704. /* key_len is two AES keys */
  705. if (enc) {
  706. aes_t4_set_encrypt_key(key, bits, &xctx->ks1.ks);
  707. xctx->xts.block1 = (block128_f) aes_t4_encrypt;
  708. switch (bits) {
  709. case 128:
  710. xctx->stream = aes128_t4_xts_encrypt;
  711. break;
  712. case 256:
  713. xctx->stream = aes256_t4_xts_encrypt;
  714. break;
  715. default:
  716. return 0;
  717. }
  718. } else {
  719. aes_t4_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 4,
  720. &xctx->ks1.ks);
  721. xctx->xts.block1 = (block128_f) aes_t4_decrypt;
  722. switch (bits) {
  723. case 128:
  724. xctx->stream = aes128_t4_xts_decrypt;
  725. break;
  726. case 256:
  727. xctx->stream = aes256_t4_xts_decrypt;
  728. break;
  729. default:
  730. return 0;
  731. }
  732. }
  733. aes_t4_set_encrypt_key(key + EVP_CIPHER_CTX_key_length(ctx) / 2,
  734. EVP_CIPHER_CTX_key_length(ctx) * 4,
  735. &xctx->ks2.ks);
  736. xctx->xts.block2 = (block128_f) aes_t4_encrypt;
  737. xctx->xts.key1 = &xctx->ks1;
  738. }
  739. if (iv) {
  740. xctx->xts.key2 = &xctx->ks2;
  741. memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), iv, 16);
  742. }
  743. return 1;
  744. }
  745. # define aes_t4_xts_cipher aes_xts_cipher
  746. static int aes_t4_xts_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  747. const unsigned char *in, size_t len);
  748. static int aes_t4_ccm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
  749. const unsigned char *iv, int enc)
  750. {
  751. EVP_AES_CCM_CTX *cctx = EVP_C_DATA(EVP_AES_CCM_CTX,ctx);
  752. if (!iv && !key)
  753. return 1;
  754. if (key) {
  755. int bits = EVP_CIPHER_CTX_key_length(ctx) * 8;
  756. aes_t4_set_encrypt_key(key, bits, &cctx->ks.ks);
  757. CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L,
  758. &cctx->ks, (block128_f) aes_t4_encrypt);
  759. cctx->str = NULL;
  760. cctx->key_set = 1;
  761. }
  762. if (iv) {
  763. memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), iv, 15 - cctx->L);
  764. cctx->iv_set = 1;
  765. }
  766. return 1;
  767. }
  768. # define aes_t4_ccm_cipher aes_ccm_cipher
  769. static int aes_t4_ccm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  770. const unsigned char *in, size_t len);
  771. # ifndef OPENSSL_NO_OCB
  772. static int aes_t4_ocb_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
  773. const unsigned char *iv, int enc)
  774. {
  775. EVP_AES_OCB_CTX *octx = EVP_C_DATA(EVP_AES_OCB_CTX,ctx);
  776. if (!iv && !key)
  777. return 1;
  778. if (key) {
  779. do {
  780. /*
  781. * We set both the encrypt and decrypt key here because decrypt
  782. * needs both. We could possibly optimise to remove setting the
  783. * decrypt for an encryption operation.
  784. */
  785. aes_t4_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
  786. &octx->ksenc.ks);
  787. aes_t4_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
  788. &octx->ksdec.ks);
  789. if (!CRYPTO_ocb128_init(&octx->ocb,
  790. &octx->ksenc.ks, &octx->ksdec.ks,
  791. (block128_f) aes_t4_encrypt,
  792. (block128_f) aes_t4_decrypt,
  793. NULL))
  794. return 0;
  795. }
  796. while (0);
  797. /*
  798. * If we have an iv we can set it directly, otherwise use saved IV.
  799. */
  800. if (iv == NULL && octx->iv_set)
  801. iv = octx->iv;
  802. if (iv) {
  803. if (CRYPTO_ocb128_setiv(&octx->ocb, iv, octx->ivlen, octx->taglen)
  804. != 1)
  805. return 0;
  806. octx->iv_set = 1;
  807. }
  808. octx->key_set = 1;
  809. } else {
  810. /* If key set use IV, otherwise copy */
  811. if (octx->key_set)
  812. CRYPTO_ocb128_setiv(&octx->ocb, iv, octx->ivlen, octx->taglen);
  813. else
  814. memcpy(octx->iv, iv, octx->ivlen);
  815. octx->iv_set = 1;
  816. }
  817. return 1;
  818. }
  819. # define aes_t4_ocb_cipher aes_ocb_cipher
  820. static int aes_t4_ocb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  821. const unsigned char *in, size_t len);
  822. # endif /* OPENSSL_NO_OCB */
  823. # define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \
  824. static const EVP_CIPHER aes_t4_##keylen##_##mode = { \
  825. nid##_##keylen##_##nmode,blocksize,keylen/8,ivlen, \
  826. flags|EVP_CIPH_##MODE##_MODE, \
  827. aes_t4_init_key, \
  828. aes_t4_##mode##_cipher, \
  829. NULL, \
  830. sizeof(EVP_AES_KEY), \
  831. NULL,NULL,NULL,NULL }; \
  832. static const EVP_CIPHER aes_##keylen##_##mode = { \
  833. nid##_##keylen##_##nmode,blocksize, \
  834. keylen/8,ivlen, \
  835. flags|EVP_CIPH_##MODE##_MODE, \
  836. aes_init_key, \
  837. aes_##mode##_cipher, \
  838. NULL, \
  839. sizeof(EVP_AES_KEY), \
  840. NULL,NULL,NULL,NULL }; \
  841. const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
  842. { return SPARC_AES_CAPABLE?&aes_t4_##keylen##_##mode:&aes_##keylen##_##mode; }
  843. # define BLOCK_CIPHER_custom(nid,keylen,blocksize,ivlen,mode,MODE,flags) \
  844. static const EVP_CIPHER aes_t4_##keylen##_##mode = { \
  845. nid##_##keylen##_##mode,blocksize, \
  846. (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE?2:1)*keylen/8, ivlen, \
  847. flags|EVP_CIPH_##MODE##_MODE, \
  848. aes_t4_##mode##_init_key, \
  849. aes_t4_##mode##_cipher, \
  850. aes_##mode##_cleanup, \
  851. sizeof(EVP_AES_##MODE##_CTX), \
  852. NULL,NULL,aes_##mode##_ctrl,NULL }; \
  853. static const EVP_CIPHER aes_##keylen##_##mode = { \
  854. nid##_##keylen##_##mode,blocksize, \
  855. (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE?2:1)*keylen/8, ivlen, \
  856. flags|EVP_CIPH_##MODE##_MODE, \
  857. aes_##mode##_init_key, \
  858. aes_##mode##_cipher, \
  859. aes_##mode##_cleanup, \
  860. sizeof(EVP_AES_##MODE##_CTX), \
  861. NULL,NULL,aes_##mode##_ctrl,NULL }; \
  862. const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
  863. { return SPARC_AES_CAPABLE?&aes_t4_##keylen##_##mode:&aes_##keylen##_##mode; }
  864. #else
  865. # define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \
  866. static const EVP_CIPHER aes_##keylen##_##mode = { \
  867. nid##_##keylen##_##nmode,blocksize,keylen/8,ivlen, \
  868. flags|EVP_CIPH_##MODE##_MODE, \
  869. aes_init_key, \
  870. aes_##mode##_cipher, \
  871. NULL, \
  872. sizeof(EVP_AES_KEY), \
  873. NULL,NULL,NULL,NULL }; \
  874. const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
  875. { return &aes_##keylen##_##mode; }
  876. # define BLOCK_CIPHER_custom(nid,keylen,blocksize,ivlen,mode,MODE,flags) \
  877. static const EVP_CIPHER aes_##keylen##_##mode = { \
  878. nid##_##keylen##_##mode,blocksize, \
  879. (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE?2:1)*keylen/8, ivlen, \
  880. flags|EVP_CIPH_##MODE##_MODE, \
  881. aes_##mode##_init_key, \
  882. aes_##mode##_cipher, \
  883. aes_##mode##_cleanup, \
  884. sizeof(EVP_AES_##MODE##_CTX), \
  885. NULL,NULL,aes_##mode##_ctrl,NULL }; \
  886. const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
  887. { return &aes_##keylen##_##mode; }
  888. #endif
  889. #if defined(OPENSSL_CPUID_OBJ) && (defined(__arm__) || defined(__arm) || defined(__aarch64__))
  890. # include "arm_arch.h"
  891. # if __ARM_MAX_ARCH__>=7
  892. # if defined(BSAES_ASM)
  893. # define BSAES_CAPABLE (OPENSSL_armcap_P & ARMV7_NEON)
  894. # endif
  895. # if defined(VPAES_ASM)
  896. # define VPAES_CAPABLE (OPENSSL_armcap_P & ARMV7_NEON)
  897. # endif
  898. # define HWAES_CAPABLE (OPENSSL_armcap_P & ARMV8_AES)
  899. # define HWAES_set_encrypt_key aes_v8_set_encrypt_key
  900. # define HWAES_set_decrypt_key aes_v8_set_decrypt_key
  901. # define HWAES_encrypt aes_v8_encrypt
  902. # define HWAES_decrypt aes_v8_decrypt
  903. # define HWAES_cbc_encrypt aes_v8_cbc_encrypt
  904. # define HWAES_ctr32_encrypt_blocks aes_v8_ctr32_encrypt_blocks
  905. # endif
  906. #endif
  907. #if defined(HWAES_CAPABLE)
  908. int HWAES_set_encrypt_key(const unsigned char *userKey, const int bits,
  909. AES_KEY *key);
  910. int HWAES_set_decrypt_key(const unsigned char *userKey, const int bits,
  911. AES_KEY *key);
  912. void HWAES_encrypt(const unsigned char *in, unsigned char *out,
  913. const AES_KEY *key);
  914. void HWAES_decrypt(const unsigned char *in, unsigned char *out,
  915. const AES_KEY *key);
  916. void HWAES_cbc_encrypt(const unsigned char *in, unsigned char *out,
  917. size_t length, const AES_KEY *key,
  918. unsigned char *ivec, const int enc);
  919. void HWAES_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out,
  920. size_t len, const AES_KEY *key,
  921. const unsigned char ivec[16]);
  922. void HWAES_xts_encrypt(const unsigned char *inp, unsigned char *out,
  923. size_t len, const AES_KEY *key1,
  924. const AES_KEY *key2, const unsigned char iv[16]);
  925. void HWAES_xts_decrypt(const unsigned char *inp, unsigned char *out,
  926. size_t len, const AES_KEY *key1,
  927. const AES_KEY *key2, const unsigned char iv[16]);
  928. #endif
  929. #define BLOCK_CIPHER_generic_pack(nid,keylen,flags) \
  930. BLOCK_CIPHER_generic(nid,keylen,16,16,cbc,cbc,CBC,flags|EVP_CIPH_FLAG_DEFAULT_ASN1) \
  931. BLOCK_CIPHER_generic(nid,keylen,16,0,ecb,ecb,ECB,flags|EVP_CIPH_FLAG_DEFAULT_ASN1) \
  932. BLOCK_CIPHER_generic(nid,keylen,1,16,ofb128,ofb,OFB,flags|EVP_CIPH_FLAG_DEFAULT_ASN1) \
  933. BLOCK_CIPHER_generic(nid,keylen,1,16,cfb128,cfb,CFB,flags|EVP_CIPH_FLAG_DEFAULT_ASN1) \
  934. BLOCK_CIPHER_generic(nid,keylen,1,16,cfb1,cfb1,CFB,flags) \
  935. BLOCK_CIPHER_generic(nid,keylen,1,16,cfb8,cfb8,CFB,flags) \
  936. BLOCK_CIPHER_generic(nid,keylen,1,16,ctr,ctr,CTR,flags)
  937. static int aes_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
  938. const unsigned char *iv, int enc)
  939. {
  940. int ret, mode;
  941. EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
  942. mode = EVP_CIPHER_CTX_mode(ctx);
  943. if ((mode == EVP_CIPH_ECB_MODE || mode == EVP_CIPH_CBC_MODE)
  944. && !enc) {
  945. #ifdef HWAES_CAPABLE
  946. if (HWAES_CAPABLE) {
  947. ret = HWAES_set_decrypt_key(key,
  948. EVP_CIPHER_CTX_key_length(ctx) * 8,
  949. &dat->ks.ks);
  950. dat->block = (block128_f) HWAES_decrypt;
  951. dat->stream.cbc = NULL;
  952. # ifdef HWAES_cbc_encrypt
  953. if (mode == EVP_CIPH_CBC_MODE)
  954. dat->stream.cbc = (cbc128_f) HWAES_cbc_encrypt;
  955. # endif
  956. } else
  957. #endif
  958. #ifdef BSAES_CAPABLE
  959. if (BSAES_CAPABLE && mode == EVP_CIPH_CBC_MODE) {
  960. ret = AES_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
  961. &dat->ks.ks);
  962. dat->block = (block128_f) AES_decrypt;
  963. dat->stream.cbc = (cbc128_f) bsaes_cbc_encrypt;
  964. } else
  965. #endif
  966. #ifdef VPAES_CAPABLE
  967. if (VPAES_CAPABLE) {
  968. ret = vpaes_set_decrypt_key(key,
  969. EVP_CIPHER_CTX_key_length(ctx) * 8,
  970. &dat->ks.ks);
  971. dat->block = (block128_f) vpaes_decrypt;
  972. dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
  973. (cbc128_f) vpaes_cbc_encrypt : NULL;
  974. } else
  975. #endif
  976. {
  977. ret = AES_set_decrypt_key(key,
  978. EVP_CIPHER_CTX_key_length(ctx) * 8,
  979. &dat->ks.ks);
  980. dat->block = (block128_f) AES_decrypt;
  981. dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
  982. (cbc128_f) AES_cbc_encrypt : NULL;
  983. }
  984. } else
  985. #ifdef HWAES_CAPABLE
  986. if (HWAES_CAPABLE) {
  987. ret = HWAES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
  988. &dat->ks.ks);
  989. dat->block = (block128_f) HWAES_encrypt;
  990. dat->stream.cbc = NULL;
  991. # ifdef HWAES_cbc_encrypt
  992. if (mode == EVP_CIPH_CBC_MODE)
  993. dat->stream.cbc = (cbc128_f) HWAES_cbc_encrypt;
  994. else
  995. # endif
  996. # ifdef HWAES_ctr32_encrypt_blocks
  997. if (mode == EVP_CIPH_CTR_MODE)
  998. dat->stream.ctr = (ctr128_f) HWAES_ctr32_encrypt_blocks;
  999. else
  1000. # endif
  1001. (void)0; /* terminate potentially open 'else' */
  1002. } else
  1003. #endif
  1004. #ifdef BSAES_CAPABLE
  1005. if (BSAES_CAPABLE && mode == EVP_CIPH_CTR_MODE) {
  1006. ret = AES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
  1007. &dat->ks.ks);
  1008. dat->block = (block128_f) AES_encrypt;
  1009. dat->stream.ctr = (ctr128_f) bsaes_ctr32_encrypt_blocks;
  1010. } else
  1011. #endif
  1012. #ifdef VPAES_CAPABLE
  1013. if (VPAES_CAPABLE) {
  1014. ret = vpaes_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
  1015. &dat->ks.ks);
  1016. dat->block = (block128_f) vpaes_encrypt;
  1017. dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
  1018. (cbc128_f) vpaes_cbc_encrypt : NULL;
  1019. } else
  1020. #endif
  1021. {
  1022. ret = AES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
  1023. &dat->ks.ks);
  1024. dat->block = (block128_f) AES_encrypt;
  1025. dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
  1026. (cbc128_f) AES_cbc_encrypt : NULL;
  1027. #ifdef AES_CTR_ASM
  1028. if (mode == EVP_CIPH_CTR_MODE)
  1029. dat->stream.ctr = (ctr128_f) AES_ctr32_encrypt;
  1030. #endif
  1031. }
  1032. if (ret < 0) {
  1033. EVPerr(EVP_F_AES_INIT_KEY, EVP_R_AES_KEY_SETUP_FAILED);
  1034. return 0;
  1035. }
  1036. return 1;
  1037. }
  1038. static int aes_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  1039. const unsigned char *in, size_t len)
  1040. {
  1041. EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
  1042. if (dat->stream.cbc)
  1043. (*dat->stream.cbc) (in, out, len, &dat->ks,
  1044. EVP_CIPHER_CTX_iv_noconst(ctx),
  1045. EVP_CIPHER_CTX_encrypting(ctx));
  1046. else if (EVP_CIPHER_CTX_encrypting(ctx))
  1047. CRYPTO_cbc128_encrypt(in, out, len, &dat->ks,
  1048. EVP_CIPHER_CTX_iv_noconst(ctx), dat->block);
  1049. else
  1050. CRYPTO_cbc128_decrypt(in, out, len, &dat->ks,
  1051. EVP_CIPHER_CTX_iv_noconst(ctx), dat->block);
  1052. return 1;
  1053. }
  1054. static int aes_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  1055. const unsigned char *in, size_t len)
  1056. {
  1057. size_t bl = EVP_CIPHER_CTX_block_size(ctx);
  1058. size_t i;
  1059. EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
  1060. if (len < bl)
  1061. return 1;
  1062. for (i = 0, len -= bl; i <= len; i += bl)
  1063. (*dat->block) (in + i, out + i, &dat->ks);
  1064. return 1;
  1065. }
  1066. static int aes_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  1067. const unsigned char *in, size_t len)
  1068. {
  1069. EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
  1070. int num = EVP_CIPHER_CTX_num(ctx);
  1071. CRYPTO_ofb128_encrypt(in, out, len, &dat->ks,
  1072. EVP_CIPHER_CTX_iv_noconst(ctx), &num, dat->block);
  1073. EVP_CIPHER_CTX_set_num(ctx, num);
  1074. return 1;
  1075. }
  1076. static int aes_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  1077. const unsigned char *in, size_t len)
  1078. {
  1079. EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
  1080. int num = EVP_CIPHER_CTX_num(ctx);
  1081. CRYPTO_cfb128_encrypt(in, out, len, &dat->ks,
  1082. EVP_CIPHER_CTX_iv_noconst(ctx), &num,
  1083. EVP_CIPHER_CTX_encrypting(ctx), dat->block);
  1084. EVP_CIPHER_CTX_set_num(ctx, num);
  1085. return 1;
  1086. }
  1087. static int aes_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  1088. const unsigned char *in, size_t len)
  1089. {
  1090. EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
  1091. int num = EVP_CIPHER_CTX_num(ctx);
  1092. CRYPTO_cfb128_8_encrypt(in, out, len, &dat->ks,
  1093. EVP_CIPHER_CTX_iv_noconst(ctx), &num,
  1094. EVP_CIPHER_CTX_encrypting(ctx), dat->block);
  1095. EVP_CIPHER_CTX_set_num(ctx, num);
  1096. return 1;
  1097. }
  1098. static int aes_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  1099. const unsigned char *in, size_t len)
  1100. {
  1101. EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
  1102. if (EVP_CIPHER_CTX_test_flags(ctx, EVP_CIPH_FLAG_LENGTH_BITS)) {
  1103. int num = EVP_CIPHER_CTX_num(ctx);
  1104. CRYPTO_cfb128_1_encrypt(in, out, len, &dat->ks,
  1105. EVP_CIPHER_CTX_iv_noconst(ctx), &num,
  1106. EVP_CIPHER_CTX_encrypting(ctx), dat->block);
  1107. EVP_CIPHER_CTX_set_num(ctx, num);
  1108. return 1;
  1109. }
  1110. while (len >= MAXBITCHUNK) {
  1111. int num = EVP_CIPHER_CTX_num(ctx);
  1112. CRYPTO_cfb128_1_encrypt(in, out, MAXBITCHUNK * 8, &dat->ks,
  1113. EVP_CIPHER_CTX_iv_noconst(ctx), &num,
  1114. EVP_CIPHER_CTX_encrypting(ctx), dat->block);
  1115. EVP_CIPHER_CTX_set_num(ctx, num);
  1116. len -= MAXBITCHUNK;
  1117. }
  1118. if (len) {
  1119. int num = EVP_CIPHER_CTX_num(ctx);
  1120. CRYPTO_cfb128_1_encrypt(in, out, len * 8, &dat->ks,
  1121. EVP_CIPHER_CTX_iv_noconst(ctx), &num,
  1122. EVP_CIPHER_CTX_encrypting(ctx), dat->block);
  1123. EVP_CIPHER_CTX_set_num(ctx, num);
  1124. }
  1125. return 1;
  1126. }
  1127. static int aes_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  1128. const unsigned char *in, size_t len)
  1129. {
  1130. unsigned int num = EVP_CIPHER_CTX_num(ctx);
  1131. EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx);
  1132. if (dat->stream.ctr)
  1133. CRYPTO_ctr128_encrypt_ctr32(in, out, len, &dat->ks,
  1134. EVP_CIPHER_CTX_iv_noconst(ctx),
  1135. EVP_CIPHER_CTX_buf_noconst(ctx),
  1136. &num, dat->stream.ctr);
  1137. else
  1138. CRYPTO_ctr128_encrypt(in, out, len, &dat->ks,
  1139. EVP_CIPHER_CTX_iv_noconst(ctx),
  1140. EVP_CIPHER_CTX_buf_noconst(ctx), &num,
  1141. dat->block);
  1142. EVP_CIPHER_CTX_set_num(ctx, num);
  1143. return 1;
  1144. }
  1145. BLOCK_CIPHER_generic_pack(NID_aes, 128, 0)
  1146. BLOCK_CIPHER_generic_pack(NID_aes, 192, 0)
  1147. BLOCK_CIPHER_generic_pack(NID_aes, 256, 0)
  1148. static int aes_gcm_cleanup(EVP_CIPHER_CTX *c)
  1149. {
  1150. EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,c);
  1151. if (gctx == NULL)
  1152. return 0;
  1153. OPENSSL_cleanse(&gctx->gcm, sizeof(gctx->gcm));
  1154. if (gctx->iv != EVP_CIPHER_CTX_iv_noconst(c))
  1155. OPENSSL_free(gctx->iv);
  1156. return 1;
  1157. }
  1158. /* increment counter (64-bit int) by 1 */
  1159. static void ctr64_inc(unsigned char *counter)
  1160. {
  1161. int n = 8;
  1162. unsigned char c;
  1163. do {
  1164. --n;
  1165. c = counter[n];
  1166. ++c;
  1167. counter[n] = c;
  1168. if (c)
  1169. return;
  1170. } while (n);
  1171. }
  1172. static int aes_gcm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr)
  1173. {
  1174. EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,c);
  1175. switch (type) {
  1176. case EVP_CTRL_INIT:
  1177. gctx->key_set = 0;
  1178. gctx->iv_set = 0;
  1179. gctx->ivlen = EVP_CIPHER_CTX_iv_length(c);
  1180. gctx->iv = EVP_CIPHER_CTX_iv_noconst(c);
  1181. gctx->taglen = -1;
  1182. gctx->iv_gen = 0;
  1183. gctx->tls_aad_len = -1;
  1184. return 1;
  1185. case EVP_CTRL_AEAD_SET_IVLEN:
  1186. if (arg <= 0)
  1187. return 0;
  1188. /* Allocate memory for IV if needed */
  1189. if ((arg > EVP_MAX_IV_LENGTH) && (arg > gctx->ivlen)) {
  1190. if (gctx->iv != EVP_CIPHER_CTX_iv_noconst(c))
  1191. OPENSSL_free(gctx->iv);
  1192. gctx->iv = OPENSSL_malloc(arg);
  1193. if (gctx->iv == NULL)
  1194. return 0;
  1195. }
  1196. gctx->ivlen = arg;
  1197. return 1;
  1198. case EVP_CTRL_AEAD_SET_TAG:
  1199. if (arg <= 0 || arg > 16 || EVP_CIPHER_CTX_encrypting(c))
  1200. return 0;
  1201. memcpy(EVP_CIPHER_CTX_buf_noconst(c), ptr, arg);
  1202. gctx->taglen = arg;
  1203. return 1;
  1204. case EVP_CTRL_AEAD_GET_TAG:
  1205. if (arg <= 0 || arg > 16 || !EVP_CIPHER_CTX_encrypting(c)
  1206. || gctx->taglen < 0)
  1207. return 0;
  1208. memcpy(ptr, EVP_CIPHER_CTX_buf_noconst(c), arg);
  1209. return 1;
  1210. case EVP_CTRL_GCM_SET_IV_FIXED:
  1211. /* Special case: -1 length restores whole IV */
  1212. if (arg == -1) {
  1213. memcpy(gctx->iv, ptr, gctx->ivlen);
  1214. gctx->iv_gen = 1;
  1215. return 1;
  1216. }
  1217. /*
  1218. * Fixed field must be at least 4 bytes and invocation field at least
  1219. * 8.
  1220. */
  1221. if ((arg < 4) || (gctx->ivlen - arg) < 8)
  1222. return 0;
  1223. if (arg)
  1224. memcpy(gctx->iv, ptr, arg);
  1225. if (EVP_CIPHER_CTX_encrypting(c)
  1226. && RAND_bytes(gctx->iv + arg, gctx->ivlen - arg) <= 0)
  1227. return 0;
  1228. gctx->iv_gen = 1;
  1229. return 1;
  1230. case EVP_CTRL_GCM_IV_GEN:
  1231. if (gctx->iv_gen == 0 || gctx->key_set == 0)
  1232. return 0;
  1233. CRYPTO_gcm128_setiv(&gctx->gcm, gctx->iv, gctx->ivlen);
  1234. if (arg <= 0 || arg > gctx->ivlen)
  1235. arg = gctx->ivlen;
  1236. memcpy(ptr, gctx->iv + gctx->ivlen - arg, arg);
  1237. /*
  1238. * Invocation field will be at least 8 bytes in size and so no need
  1239. * to check wrap around or increment more than last 8 bytes.
  1240. */
  1241. ctr64_inc(gctx->iv + gctx->ivlen - 8);
  1242. gctx->iv_set = 1;
  1243. return 1;
  1244. case EVP_CTRL_GCM_SET_IV_INV:
  1245. if (gctx->iv_gen == 0 || gctx->key_set == 0
  1246. || EVP_CIPHER_CTX_encrypting(c))
  1247. return 0;
  1248. memcpy(gctx->iv + gctx->ivlen - arg, ptr, arg);
  1249. CRYPTO_gcm128_setiv(&gctx->gcm, gctx->iv, gctx->ivlen);
  1250. gctx->iv_set = 1;
  1251. return 1;
  1252. case EVP_CTRL_AEAD_TLS1_AAD:
  1253. /* Save the AAD for later use */
  1254. if (arg != EVP_AEAD_TLS1_AAD_LEN)
  1255. return 0;
  1256. memcpy(EVP_CIPHER_CTX_buf_noconst(c), ptr, arg);
  1257. gctx->tls_aad_len = arg;
  1258. {
  1259. unsigned int len =
  1260. EVP_CIPHER_CTX_buf_noconst(c)[arg - 2] << 8
  1261. | EVP_CIPHER_CTX_buf_noconst(c)[arg - 1];
  1262. /* Correct length for explicit IV */
  1263. if (len < EVP_GCM_TLS_EXPLICIT_IV_LEN)
  1264. return 0;
  1265. len -= EVP_GCM_TLS_EXPLICIT_IV_LEN;
  1266. /* If decrypting correct for tag too */
  1267. if (!EVP_CIPHER_CTX_encrypting(c)) {
  1268. if (len < EVP_GCM_TLS_TAG_LEN)
  1269. return 0;
  1270. len -= EVP_GCM_TLS_TAG_LEN;
  1271. }
  1272. EVP_CIPHER_CTX_buf_noconst(c)[arg - 2] = len >> 8;
  1273. EVP_CIPHER_CTX_buf_noconst(c)[arg - 1] = len & 0xff;
  1274. }
  1275. /* Extra padding: tag appended to record */
  1276. return EVP_GCM_TLS_TAG_LEN;
  1277. case EVP_CTRL_COPY:
  1278. {
  1279. EVP_CIPHER_CTX *out = ptr;
  1280. EVP_AES_GCM_CTX *gctx_out = EVP_C_DATA(EVP_AES_GCM_CTX,out);
  1281. if (gctx->gcm.key) {
  1282. if (gctx->gcm.key != &gctx->ks)
  1283. return 0;
  1284. gctx_out->gcm.key = &gctx_out->ks;
  1285. }
  1286. if (gctx->iv == EVP_CIPHER_CTX_iv_noconst(c))
  1287. gctx_out->iv = EVP_CIPHER_CTX_iv_noconst(out);
  1288. else {
  1289. gctx_out->iv = OPENSSL_malloc(gctx->ivlen);
  1290. if (gctx_out->iv == NULL)
  1291. return 0;
  1292. memcpy(gctx_out->iv, gctx->iv, gctx->ivlen);
  1293. }
  1294. return 1;
  1295. }
  1296. default:
  1297. return -1;
  1298. }
  1299. }
  1300. static int aes_gcm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
  1301. const unsigned char *iv, int enc)
  1302. {
  1303. EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,ctx);
  1304. if (!iv && !key)
  1305. return 1;
  1306. if (key) {
  1307. do {
  1308. #ifdef HWAES_CAPABLE
  1309. if (HWAES_CAPABLE) {
  1310. HWAES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
  1311. &gctx->ks.ks);
  1312. CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks,
  1313. (block128_f) HWAES_encrypt);
  1314. # ifdef HWAES_ctr32_encrypt_blocks
  1315. gctx->ctr = (ctr128_f) HWAES_ctr32_encrypt_blocks;
  1316. # else
  1317. gctx->ctr = NULL;
  1318. # endif
  1319. break;
  1320. } else
  1321. #endif
  1322. #ifdef BSAES_CAPABLE
  1323. if (BSAES_CAPABLE) {
  1324. AES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
  1325. &gctx->ks.ks);
  1326. CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks,
  1327. (block128_f) AES_encrypt);
  1328. gctx->ctr = (ctr128_f) bsaes_ctr32_encrypt_blocks;
  1329. break;
  1330. } else
  1331. #endif
  1332. #ifdef VPAES_CAPABLE
  1333. if (VPAES_CAPABLE) {
  1334. vpaes_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
  1335. &gctx->ks.ks);
  1336. CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks,
  1337. (block128_f) vpaes_encrypt);
  1338. gctx->ctr = NULL;
  1339. break;
  1340. } else
  1341. #endif
  1342. (void)0; /* terminate potentially open 'else' */
  1343. AES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
  1344. &gctx->ks.ks);
  1345. CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks,
  1346. (block128_f) AES_encrypt);
  1347. #ifdef AES_CTR_ASM
  1348. gctx->ctr = (ctr128_f) AES_ctr32_encrypt;
  1349. #else
  1350. gctx->ctr = NULL;
  1351. #endif
  1352. } while (0);
  1353. /*
  1354. * If we have an iv can set it directly, otherwise use saved IV.
  1355. */
  1356. if (iv == NULL && gctx->iv_set)
  1357. iv = gctx->iv;
  1358. if (iv) {
  1359. CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen);
  1360. gctx->iv_set = 1;
  1361. }
  1362. gctx->key_set = 1;
  1363. } else {
  1364. /* If key set use IV, otherwise copy */
  1365. if (gctx->key_set)
  1366. CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen);
  1367. else
  1368. memcpy(gctx->iv, iv, gctx->ivlen);
  1369. gctx->iv_set = 1;
  1370. gctx->iv_gen = 0;
  1371. }
  1372. return 1;
  1373. }
  1374. /*
  1375. * Handle TLS GCM packet format. This consists of the last portion of the IV
  1376. * followed by the payload and finally the tag. On encrypt generate IV,
  1377. * encrypt payload and write the tag. On verify retrieve IV, decrypt payload
  1378. * and verify tag.
  1379. */
  1380. static int aes_gcm_tls_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  1381. const unsigned char *in, size_t len)
  1382. {
  1383. EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,ctx);
  1384. int rv = -1;
  1385. /* Encrypt/decrypt must be performed in place */
  1386. if (out != in
  1387. || len < (EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN))
  1388. return -1;
  1389. /*
  1390. * Set IV from start of buffer or generate IV and write to start of
  1391. * buffer.
  1392. */
  1393. if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CIPHER_CTX_encrypting(ctx) ?
  1394. EVP_CTRL_GCM_IV_GEN : EVP_CTRL_GCM_SET_IV_INV,
  1395. EVP_GCM_TLS_EXPLICIT_IV_LEN, out) <= 0)
  1396. goto err;
  1397. /* Use saved AAD */
  1398. if (CRYPTO_gcm128_aad(&gctx->gcm, EVP_CIPHER_CTX_buf_noconst(ctx),
  1399. gctx->tls_aad_len))
  1400. goto err;
  1401. /* Fix buffer and length to point to payload */
  1402. in += EVP_GCM_TLS_EXPLICIT_IV_LEN;
  1403. out += EVP_GCM_TLS_EXPLICIT_IV_LEN;
  1404. len -= EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN;
  1405. if (EVP_CIPHER_CTX_encrypting(ctx)) {
  1406. /* Encrypt payload */
  1407. if (gctx->ctr) {
  1408. size_t bulk = 0;
  1409. #if defined(AES_GCM_ASM)
  1410. if (len >= 32 && AES_GCM_ASM(gctx)) {
  1411. if (CRYPTO_gcm128_encrypt(&gctx->gcm, NULL, NULL, 0))
  1412. return -1;
  1413. bulk = AES_gcm_encrypt(in, out, len,
  1414. gctx->gcm.key,
  1415. gctx->gcm.Yi.c, gctx->gcm.Xi.u);
  1416. gctx->gcm.len.u[1] += bulk;
  1417. }
  1418. #endif
  1419. if (CRYPTO_gcm128_encrypt_ctr32(&gctx->gcm,
  1420. in + bulk,
  1421. out + bulk,
  1422. len - bulk, gctx->ctr))
  1423. goto err;
  1424. } else {
  1425. size_t bulk = 0;
  1426. #if defined(AES_GCM_ASM2)
  1427. if (len >= 32 && AES_GCM_ASM2(gctx)) {
  1428. if (CRYPTO_gcm128_encrypt(&gctx->gcm, NULL, NULL, 0))
  1429. return -1;
  1430. bulk = AES_gcm_encrypt(in, out, len,
  1431. gctx->gcm.key,
  1432. gctx->gcm.Yi.c, gctx->gcm.Xi.u);
  1433. gctx->gcm.len.u[1] += bulk;
  1434. }
  1435. #endif
  1436. if (CRYPTO_gcm128_encrypt(&gctx->gcm,
  1437. in + bulk, out + bulk, len - bulk))
  1438. goto err;
  1439. }
  1440. out += len;
  1441. /* Finally write tag */
  1442. CRYPTO_gcm128_tag(&gctx->gcm, out, EVP_GCM_TLS_TAG_LEN);
  1443. rv = len + EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN;
  1444. } else {
  1445. /* Decrypt */
  1446. if (gctx->ctr) {
  1447. size_t bulk = 0;
  1448. #if defined(AES_GCM_ASM)
  1449. if (len >= 16 && AES_GCM_ASM(gctx)) {
  1450. if (CRYPTO_gcm128_decrypt(&gctx->gcm, NULL, NULL, 0))
  1451. return -1;
  1452. bulk = AES_gcm_decrypt(in, out, len,
  1453. gctx->gcm.key,
  1454. gctx->gcm.Yi.c, gctx->gcm.Xi.u);
  1455. gctx->gcm.len.u[1] += bulk;
  1456. }
  1457. #endif
  1458. if (CRYPTO_gcm128_decrypt_ctr32(&gctx->gcm,
  1459. in + bulk,
  1460. out + bulk,
  1461. len - bulk, gctx->ctr))
  1462. goto err;
  1463. } else {
  1464. size_t bulk = 0;
  1465. #if defined(AES_GCM_ASM2)
  1466. if (len >= 16 && AES_GCM_ASM2(gctx)) {
  1467. if (CRYPTO_gcm128_decrypt(&gctx->gcm, NULL, NULL, 0))
  1468. return -1;
  1469. bulk = AES_gcm_decrypt(in, out, len,
  1470. gctx->gcm.key,
  1471. gctx->gcm.Yi.c, gctx->gcm.Xi.u);
  1472. gctx->gcm.len.u[1] += bulk;
  1473. }
  1474. #endif
  1475. if (CRYPTO_gcm128_decrypt(&gctx->gcm,
  1476. in + bulk, out + bulk, len - bulk))
  1477. goto err;
  1478. }
  1479. /* Retrieve tag */
  1480. CRYPTO_gcm128_tag(&gctx->gcm, EVP_CIPHER_CTX_buf_noconst(ctx),
  1481. EVP_GCM_TLS_TAG_LEN);
  1482. /* If tag mismatch wipe buffer */
  1483. if (CRYPTO_memcmp(EVP_CIPHER_CTX_buf_noconst(ctx), in + len,
  1484. EVP_GCM_TLS_TAG_LEN)) {
  1485. OPENSSL_cleanse(out, len);
  1486. goto err;
  1487. }
  1488. rv = len;
  1489. }
  1490. err:
  1491. gctx->iv_set = 0;
  1492. gctx->tls_aad_len = -1;
  1493. return rv;
  1494. }
  1495. static int aes_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  1496. const unsigned char *in, size_t len)
  1497. {
  1498. EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,ctx);
  1499. /* If not set up, return error */
  1500. if (!gctx->key_set)
  1501. return -1;
  1502. if (gctx->tls_aad_len >= 0)
  1503. return aes_gcm_tls_cipher(ctx, out, in, len);
  1504. if (!gctx->iv_set)
  1505. return -1;
  1506. if (in) {
  1507. if (out == NULL) {
  1508. if (CRYPTO_gcm128_aad(&gctx->gcm, in, len))
  1509. return -1;
  1510. } else if (EVP_CIPHER_CTX_encrypting(ctx)) {
  1511. if (gctx->ctr) {
  1512. size_t bulk = 0;
  1513. #if defined(AES_GCM_ASM)
  1514. if (len >= 32 && AES_GCM_ASM(gctx)) {
  1515. size_t res = (16 - gctx->gcm.mres) % 16;
  1516. if (CRYPTO_gcm128_encrypt(&gctx->gcm, in, out, res))
  1517. return -1;
  1518. bulk = AES_gcm_encrypt(in + res,
  1519. out + res, len - res,
  1520. gctx->gcm.key, gctx->gcm.Yi.c,
  1521. gctx->gcm.Xi.u);
  1522. gctx->gcm.len.u[1] += bulk;
  1523. bulk += res;
  1524. }
  1525. #endif
  1526. if (CRYPTO_gcm128_encrypt_ctr32(&gctx->gcm,
  1527. in + bulk,
  1528. out + bulk,
  1529. len - bulk, gctx->ctr))
  1530. return -1;
  1531. } else {
  1532. size_t bulk = 0;
  1533. #if defined(AES_GCM_ASM2)
  1534. if (len >= 32 && AES_GCM_ASM2(gctx)) {
  1535. size_t res = (16 - gctx->gcm.mres) % 16;
  1536. if (CRYPTO_gcm128_encrypt(&gctx->gcm, in, out, res))
  1537. return -1;
  1538. bulk = AES_gcm_encrypt(in + res,
  1539. out + res, len - res,
  1540. gctx->gcm.key, gctx->gcm.Yi.c,
  1541. gctx->gcm.Xi.u);
  1542. gctx->gcm.len.u[1] += bulk;
  1543. bulk += res;
  1544. }
  1545. #endif
  1546. if (CRYPTO_gcm128_encrypt(&gctx->gcm,
  1547. in + bulk, out + bulk, len - bulk))
  1548. return -1;
  1549. }
  1550. } else {
  1551. if (gctx->ctr) {
  1552. size_t bulk = 0;
  1553. #if defined(AES_GCM_ASM)
  1554. if (len >= 16 && AES_GCM_ASM(gctx)) {
  1555. size_t res = (16 - gctx->gcm.mres) % 16;
  1556. if (CRYPTO_gcm128_decrypt(&gctx->gcm, in, out, res))
  1557. return -1;
  1558. bulk = AES_gcm_decrypt(in + res,
  1559. out + res, len - res,
  1560. gctx->gcm.key,
  1561. gctx->gcm.Yi.c, gctx->gcm.Xi.u);
  1562. gctx->gcm.len.u[1] += bulk;
  1563. bulk += res;
  1564. }
  1565. #endif
  1566. if (CRYPTO_gcm128_decrypt_ctr32(&gctx->gcm,
  1567. in + bulk,
  1568. out + bulk,
  1569. len - bulk, gctx->ctr))
  1570. return -1;
  1571. } else {
  1572. size_t bulk = 0;
  1573. #if defined(AES_GCM_ASM2)
  1574. if (len >= 16 && AES_GCM_ASM2(gctx)) {
  1575. size_t res = (16 - gctx->gcm.mres) % 16;
  1576. if (CRYPTO_gcm128_decrypt(&gctx->gcm, in, out, res))
  1577. return -1;
  1578. bulk = AES_gcm_decrypt(in + res,
  1579. out + res, len - res,
  1580. gctx->gcm.key,
  1581. gctx->gcm.Yi.c, gctx->gcm.Xi.u);
  1582. gctx->gcm.len.u[1] += bulk;
  1583. bulk += res;
  1584. }
  1585. #endif
  1586. if (CRYPTO_gcm128_decrypt(&gctx->gcm,
  1587. in + bulk, out + bulk, len - bulk))
  1588. return -1;
  1589. }
  1590. }
  1591. return len;
  1592. } else {
  1593. if (!EVP_CIPHER_CTX_encrypting(ctx)) {
  1594. if (gctx->taglen < 0)
  1595. return -1;
  1596. if (CRYPTO_gcm128_finish(&gctx->gcm,
  1597. EVP_CIPHER_CTX_buf_noconst(ctx),
  1598. gctx->taglen) != 0)
  1599. return -1;
  1600. gctx->iv_set = 0;
  1601. return 0;
  1602. }
  1603. CRYPTO_gcm128_tag(&gctx->gcm, EVP_CIPHER_CTX_buf_noconst(ctx), 16);
  1604. gctx->taglen = 16;
  1605. /* Don't reuse the IV */
  1606. gctx->iv_set = 0;
  1607. return 0;
  1608. }
  1609. }
  1610. #define CUSTOM_FLAGS (EVP_CIPH_FLAG_DEFAULT_ASN1 \
  1611. | EVP_CIPH_CUSTOM_IV | EVP_CIPH_FLAG_CUSTOM_CIPHER \
  1612. | EVP_CIPH_ALWAYS_CALL_INIT | EVP_CIPH_CTRL_INIT \
  1613. | EVP_CIPH_CUSTOM_COPY)
  1614. BLOCK_CIPHER_custom(NID_aes, 128, 1, 12, gcm, GCM,
  1615. EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS)
  1616. BLOCK_CIPHER_custom(NID_aes, 192, 1, 12, gcm, GCM,
  1617. EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS)
  1618. BLOCK_CIPHER_custom(NID_aes, 256, 1, 12, gcm, GCM,
  1619. EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS)
  1620. static int aes_xts_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr)
  1621. {
  1622. EVP_AES_XTS_CTX *xctx = EVP_C_DATA(EVP_AES_XTS_CTX,c);
  1623. if (type == EVP_CTRL_COPY) {
  1624. EVP_CIPHER_CTX *out = ptr;
  1625. EVP_AES_XTS_CTX *xctx_out = EVP_C_DATA(EVP_AES_XTS_CTX,out);
  1626. if (xctx->xts.key1) {
  1627. if (xctx->xts.key1 != &xctx->ks1)
  1628. return 0;
  1629. xctx_out->xts.key1 = &xctx_out->ks1;
  1630. }
  1631. if (xctx->xts.key2) {
  1632. if (xctx->xts.key2 != &xctx->ks2)
  1633. return 0;
  1634. xctx_out->xts.key2 = &xctx_out->ks2;
  1635. }
  1636. return 1;
  1637. } else if (type != EVP_CTRL_INIT)
  1638. return -1;
  1639. /* key1 and key2 are used as an indicator both key and IV are set */
  1640. xctx->xts.key1 = NULL;
  1641. xctx->xts.key2 = NULL;
  1642. return 1;
  1643. }
  1644. static int aes_xts_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
  1645. const unsigned char *iv, int enc)
  1646. {
  1647. EVP_AES_XTS_CTX *xctx = EVP_C_DATA(EVP_AES_XTS_CTX,ctx);
  1648. if (!iv && !key)
  1649. return 1;
  1650. if (key)
  1651. do {
  1652. #ifdef AES_XTS_ASM
  1653. xctx->stream = enc ? AES_xts_encrypt : AES_xts_decrypt;
  1654. #else
  1655. xctx->stream = NULL;
  1656. #endif
  1657. /* key_len is two AES keys */
  1658. #ifdef HWAES_CAPABLE
  1659. if (HWAES_CAPABLE) {
  1660. if (enc) {
  1661. HWAES_set_encrypt_key(key,
  1662. EVP_CIPHER_CTX_key_length(ctx) * 4,
  1663. &xctx->ks1.ks);
  1664. xctx->xts.block1 = (block128_f) HWAES_encrypt;
  1665. # ifdef HWAES_xts_encrypt
  1666. xctx->stream = HWAES_xts_encrypt;
  1667. # endif
  1668. } else {
  1669. HWAES_set_decrypt_key(key,
  1670. EVP_CIPHER_CTX_key_length(ctx) * 4,
  1671. &xctx->ks1.ks);
  1672. xctx->xts.block1 = (block128_f) HWAES_decrypt;
  1673. # ifdef HWAES_xts_decrypt
  1674. xctx->stream = HWAES_xts_decrypt;
  1675. #endif
  1676. }
  1677. HWAES_set_encrypt_key(key + EVP_CIPHER_CTX_key_length(ctx) / 2,
  1678. EVP_CIPHER_CTX_key_length(ctx) * 4,
  1679. &xctx->ks2.ks);
  1680. xctx->xts.block2 = (block128_f) HWAES_encrypt;
  1681. xctx->xts.key1 = &xctx->ks1;
  1682. break;
  1683. } else
  1684. #endif
  1685. #ifdef BSAES_CAPABLE
  1686. if (BSAES_CAPABLE)
  1687. xctx->stream = enc ? bsaes_xts_encrypt : bsaes_xts_decrypt;
  1688. else
  1689. #endif
  1690. #ifdef VPAES_CAPABLE
  1691. if (VPAES_CAPABLE) {
  1692. if (enc) {
  1693. vpaes_set_encrypt_key(key,
  1694. EVP_CIPHER_CTX_key_length(ctx) * 4,
  1695. &xctx->ks1.ks);
  1696. xctx->xts.block1 = (block128_f) vpaes_encrypt;
  1697. } else {
  1698. vpaes_set_decrypt_key(key,
  1699. EVP_CIPHER_CTX_key_length(ctx) * 4,
  1700. &xctx->ks1.ks);
  1701. xctx->xts.block1 = (block128_f) vpaes_decrypt;
  1702. }
  1703. vpaes_set_encrypt_key(key + EVP_CIPHER_CTX_key_length(ctx) / 2,
  1704. EVP_CIPHER_CTX_key_length(ctx) * 4,
  1705. &xctx->ks2.ks);
  1706. xctx->xts.block2 = (block128_f) vpaes_encrypt;
  1707. xctx->xts.key1 = &xctx->ks1;
  1708. break;
  1709. } else
  1710. #endif
  1711. (void)0; /* terminate potentially open 'else' */
  1712. if (enc) {
  1713. AES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 4,
  1714. &xctx->ks1.ks);
  1715. xctx->xts.block1 = (block128_f) AES_encrypt;
  1716. } else {
  1717. AES_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 4,
  1718. &xctx->ks1.ks);
  1719. xctx->xts.block1 = (block128_f) AES_decrypt;
  1720. }
  1721. AES_set_encrypt_key(key + EVP_CIPHER_CTX_key_length(ctx) / 2,
  1722. EVP_CIPHER_CTX_key_length(ctx) * 4,
  1723. &xctx->ks2.ks);
  1724. xctx->xts.block2 = (block128_f) AES_encrypt;
  1725. xctx->xts.key1 = &xctx->ks1;
  1726. } while (0);
  1727. if (iv) {
  1728. xctx->xts.key2 = &xctx->ks2;
  1729. memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), iv, 16);
  1730. }
  1731. return 1;
  1732. }
  1733. static int aes_xts_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  1734. const unsigned char *in, size_t len)
  1735. {
  1736. EVP_AES_XTS_CTX *xctx = EVP_C_DATA(EVP_AES_XTS_CTX,ctx);
  1737. if (!xctx->xts.key1 || !xctx->xts.key2)
  1738. return 0;
  1739. if (!out || !in || len < AES_BLOCK_SIZE)
  1740. return 0;
  1741. if (xctx->stream)
  1742. (*xctx->stream) (in, out, len,
  1743. xctx->xts.key1, xctx->xts.key2,
  1744. EVP_CIPHER_CTX_iv_noconst(ctx));
  1745. else if (CRYPTO_xts128_encrypt(&xctx->xts, EVP_CIPHER_CTX_iv_noconst(ctx),
  1746. in, out, len,
  1747. EVP_CIPHER_CTX_encrypting(ctx)))
  1748. return 0;
  1749. return 1;
  1750. }
  1751. #define aes_xts_cleanup NULL
  1752. #define XTS_FLAGS (EVP_CIPH_FLAG_DEFAULT_ASN1 | EVP_CIPH_CUSTOM_IV \
  1753. | EVP_CIPH_ALWAYS_CALL_INIT | EVP_CIPH_CTRL_INIT \
  1754. | EVP_CIPH_CUSTOM_COPY)
  1755. BLOCK_CIPHER_custom(NID_aes, 128, 1, 16, xts, XTS, XTS_FLAGS)
  1756. BLOCK_CIPHER_custom(NID_aes, 256, 1, 16, xts, XTS, XTS_FLAGS)
  1757. static int aes_ccm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr)
  1758. {
  1759. EVP_AES_CCM_CTX *cctx = EVP_C_DATA(EVP_AES_CCM_CTX,c);
  1760. switch (type) {
  1761. case EVP_CTRL_INIT:
  1762. cctx->key_set = 0;
  1763. cctx->iv_set = 0;
  1764. cctx->L = 8;
  1765. cctx->M = 12;
  1766. cctx->tag_set = 0;
  1767. cctx->len_set = 0;
  1768. cctx->tls_aad_len = -1;
  1769. return 1;
  1770. case EVP_CTRL_AEAD_TLS1_AAD:
  1771. /* Save the AAD for later use */
  1772. if (arg != EVP_AEAD_TLS1_AAD_LEN)
  1773. return 0;
  1774. memcpy(EVP_CIPHER_CTX_buf_noconst(c), ptr, arg);
  1775. cctx->tls_aad_len = arg;
  1776. {
  1777. uint16_t len =
  1778. EVP_CIPHER_CTX_buf_noconst(c)[arg - 2] << 8
  1779. | EVP_CIPHER_CTX_buf_noconst(c)[arg - 1];
  1780. /* Correct length for explicit IV */
  1781. if (len < EVP_CCM_TLS_EXPLICIT_IV_LEN)
  1782. return 0;
  1783. len -= EVP_CCM_TLS_EXPLICIT_IV_LEN;
  1784. /* If decrypting correct for tag too */
  1785. if (!EVP_CIPHER_CTX_encrypting(c)) {
  1786. if (len < cctx->M)
  1787. return 0;
  1788. len -= cctx->M;
  1789. }
  1790. EVP_CIPHER_CTX_buf_noconst(c)[arg - 2] = len >> 8;
  1791. EVP_CIPHER_CTX_buf_noconst(c)[arg - 1] = len & 0xff;
  1792. }
  1793. /* Extra padding: tag appended to record */
  1794. return cctx->M;
  1795. case EVP_CTRL_CCM_SET_IV_FIXED:
  1796. /* Sanity check length */
  1797. if (arg != EVP_CCM_TLS_FIXED_IV_LEN)
  1798. return 0;
  1799. /* Just copy to first part of IV */
  1800. memcpy(EVP_CIPHER_CTX_iv_noconst(c), ptr, arg);
  1801. return 1;
  1802. case EVP_CTRL_AEAD_SET_IVLEN:
  1803. arg = 15 - arg;
  1804. case EVP_CTRL_CCM_SET_L:
  1805. if (arg < 2 || arg > 8)
  1806. return 0;
  1807. cctx->L = arg;
  1808. return 1;
  1809. case EVP_CTRL_AEAD_SET_TAG:
  1810. if ((arg & 1) || arg < 4 || arg > 16)
  1811. return 0;
  1812. if (EVP_CIPHER_CTX_encrypting(c) && ptr)
  1813. return 0;
  1814. if (ptr) {
  1815. cctx->tag_set = 1;
  1816. memcpy(EVP_CIPHER_CTX_buf_noconst(c), ptr, arg);
  1817. }
  1818. cctx->M = arg;
  1819. return 1;
  1820. case EVP_CTRL_AEAD_GET_TAG:
  1821. if (!EVP_CIPHER_CTX_encrypting(c) || !cctx->tag_set)
  1822. return 0;
  1823. if (!CRYPTO_ccm128_tag(&cctx->ccm, ptr, (size_t)arg))
  1824. return 0;
  1825. cctx->tag_set = 0;
  1826. cctx->iv_set = 0;
  1827. cctx->len_set = 0;
  1828. return 1;
  1829. case EVP_CTRL_COPY:
  1830. {
  1831. EVP_CIPHER_CTX *out = ptr;
  1832. EVP_AES_CCM_CTX *cctx_out = EVP_C_DATA(EVP_AES_CCM_CTX,out);
  1833. if (cctx->ccm.key) {
  1834. if (cctx->ccm.key != &cctx->ks)
  1835. return 0;
  1836. cctx_out->ccm.key = &cctx_out->ks;
  1837. }
  1838. return 1;
  1839. }
  1840. default:
  1841. return -1;
  1842. }
  1843. }
  1844. static int aes_ccm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
  1845. const unsigned char *iv, int enc)
  1846. {
  1847. EVP_AES_CCM_CTX *cctx = EVP_C_DATA(EVP_AES_CCM_CTX,ctx);
  1848. if (!iv && !key)
  1849. return 1;
  1850. if (key)
  1851. do {
  1852. #ifdef HWAES_CAPABLE
  1853. if (HWAES_CAPABLE) {
  1854. HWAES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
  1855. &cctx->ks.ks);
  1856. CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L,
  1857. &cctx->ks, (block128_f) HWAES_encrypt);
  1858. cctx->str = NULL;
  1859. cctx->key_set = 1;
  1860. break;
  1861. } else
  1862. #endif
  1863. #ifdef VPAES_CAPABLE
  1864. if (VPAES_CAPABLE) {
  1865. vpaes_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
  1866. &cctx->ks.ks);
  1867. CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L,
  1868. &cctx->ks, (block128_f) vpaes_encrypt);
  1869. cctx->str = NULL;
  1870. cctx->key_set = 1;
  1871. break;
  1872. }
  1873. #endif
  1874. AES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
  1875. &cctx->ks.ks);
  1876. CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L,
  1877. &cctx->ks, (block128_f) AES_encrypt);
  1878. cctx->str = NULL;
  1879. cctx->key_set = 1;
  1880. } while (0);
  1881. if (iv) {
  1882. memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), iv, 15 - cctx->L);
  1883. cctx->iv_set = 1;
  1884. }
  1885. return 1;
  1886. }
  1887. static int aes_ccm_tls_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  1888. const unsigned char *in, size_t len)
  1889. {
  1890. EVP_AES_CCM_CTX *cctx = EVP_C_DATA(EVP_AES_CCM_CTX,ctx);
  1891. CCM128_CONTEXT *ccm = &cctx->ccm;
  1892. /* Encrypt/decrypt must be performed in place */
  1893. if (out != in || len < (EVP_CCM_TLS_EXPLICIT_IV_LEN + (size_t)cctx->M))
  1894. return -1;
  1895. /* If encrypting set explicit IV from sequence number (start of AAD) */
  1896. if (EVP_CIPHER_CTX_encrypting(ctx))
  1897. memcpy(out, EVP_CIPHER_CTX_buf_noconst(ctx),
  1898. EVP_CCM_TLS_EXPLICIT_IV_LEN);
  1899. /* Get rest of IV from explicit IV */
  1900. memcpy(EVP_CIPHER_CTX_iv_noconst(ctx) + EVP_CCM_TLS_FIXED_IV_LEN, in,
  1901. EVP_CCM_TLS_EXPLICIT_IV_LEN);
  1902. /* Correct length value */
  1903. len -= EVP_CCM_TLS_EXPLICIT_IV_LEN + cctx->M;
  1904. if (CRYPTO_ccm128_setiv(ccm, EVP_CIPHER_CTX_iv_noconst(ctx), 15 - cctx->L,
  1905. len))
  1906. return -1;
  1907. /* Use saved AAD */
  1908. CRYPTO_ccm128_aad(ccm, EVP_CIPHER_CTX_buf_noconst(ctx), cctx->tls_aad_len);
  1909. /* Fix buffer to point to payload */
  1910. in += EVP_CCM_TLS_EXPLICIT_IV_LEN;
  1911. out += EVP_CCM_TLS_EXPLICIT_IV_LEN;
  1912. if (EVP_CIPHER_CTX_encrypting(ctx)) {
  1913. if (cctx->str ? CRYPTO_ccm128_encrypt_ccm64(ccm, in, out, len,
  1914. cctx->str) :
  1915. CRYPTO_ccm128_encrypt(ccm, in, out, len))
  1916. return -1;
  1917. if (!CRYPTO_ccm128_tag(ccm, out + len, cctx->M))
  1918. return -1;
  1919. return len + EVP_CCM_TLS_EXPLICIT_IV_LEN + cctx->M;
  1920. } else {
  1921. if (cctx->str ? !CRYPTO_ccm128_decrypt_ccm64(ccm, in, out, len,
  1922. cctx->str) :
  1923. !CRYPTO_ccm128_decrypt(ccm, in, out, len)) {
  1924. unsigned char tag[16];
  1925. if (CRYPTO_ccm128_tag(ccm, tag, cctx->M)) {
  1926. if (!CRYPTO_memcmp(tag, in + len, cctx->M))
  1927. return len;
  1928. }
  1929. }
  1930. OPENSSL_cleanse(out, len);
  1931. return -1;
  1932. }
  1933. }
  1934. static int aes_ccm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  1935. const unsigned char *in, size_t len)
  1936. {
  1937. EVP_AES_CCM_CTX *cctx = EVP_C_DATA(EVP_AES_CCM_CTX,ctx);
  1938. CCM128_CONTEXT *ccm = &cctx->ccm;
  1939. /* If not set up, return error */
  1940. if (!cctx->key_set)
  1941. return -1;
  1942. if (cctx->tls_aad_len >= 0)
  1943. return aes_ccm_tls_cipher(ctx, out, in, len);
  1944. /* EVP_*Final() doesn't return any data */
  1945. if (in == NULL && out != NULL)
  1946. return 0;
  1947. if (!cctx->iv_set)
  1948. return -1;
  1949. if (!EVP_CIPHER_CTX_encrypting(ctx) && !cctx->tag_set)
  1950. return -1;
  1951. if (!out) {
  1952. if (!in) {
  1953. if (CRYPTO_ccm128_setiv(ccm, EVP_CIPHER_CTX_iv_noconst(ctx),
  1954. 15 - cctx->L, len))
  1955. return -1;
  1956. cctx->len_set = 1;
  1957. return len;
  1958. }
  1959. /* If have AAD need message length */
  1960. if (!cctx->len_set && len)
  1961. return -1;
  1962. CRYPTO_ccm128_aad(ccm, in, len);
  1963. return len;
  1964. }
  1965. /* If not set length yet do it */
  1966. if (!cctx->len_set) {
  1967. if (CRYPTO_ccm128_setiv(ccm, EVP_CIPHER_CTX_iv_noconst(ctx),
  1968. 15 - cctx->L, len))
  1969. return -1;
  1970. cctx->len_set = 1;
  1971. }
  1972. if (EVP_CIPHER_CTX_encrypting(ctx)) {
  1973. if (cctx->str ? CRYPTO_ccm128_encrypt_ccm64(ccm, in, out, len,
  1974. cctx->str) :
  1975. CRYPTO_ccm128_encrypt(ccm, in, out, len))
  1976. return -1;
  1977. cctx->tag_set = 1;
  1978. return len;
  1979. } else {
  1980. int rv = -1;
  1981. if (cctx->str ? !CRYPTO_ccm128_decrypt_ccm64(ccm, in, out, len,
  1982. cctx->str) :
  1983. !CRYPTO_ccm128_decrypt(ccm, in, out, len)) {
  1984. unsigned char tag[16];
  1985. if (CRYPTO_ccm128_tag(ccm, tag, cctx->M)) {
  1986. if (!CRYPTO_memcmp(tag, EVP_CIPHER_CTX_buf_noconst(ctx),
  1987. cctx->M))
  1988. rv = len;
  1989. }
  1990. }
  1991. if (rv == -1)
  1992. OPENSSL_cleanse(out, len);
  1993. cctx->iv_set = 0;
  1994. cctx->tag_set = 0;
  1995. cctx->len_set = 0;
  1996. return rv;
  1997. }
  1998. }
  1999. #define aes_ccm_cleanup NULL
  2000. BLOCK_CIPHER_custom(NID_aes, 128, 1, 12, ccm, CCM,
  2001. EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS)
  2002. BLOCK_CIPHER_custom(NID_aes, 192, 1, 12, ccm, CCM,
  2003. EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS)
  2004. BLOCK_CIPHER_custom(NID_aes, 256, 1, 12, ccm, CCM,
  2005. EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS)
  2006. typedef struct {
  2007. union {
  2008. double align;
  2009. AES_KEY ks;
  2010. } ks;
  2011. /* Indicates if IV has been set */
  2012. unsigned char *iv;
  2013. } EVP_AES_WRAP_CTX;
  2014. static int aes_wrap_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
  2015. const unsigned char *iv, int enc)
  2016. {
  2017. EVP_AES_WRAP_CTX *wctx = EVP_C_DATA(EVP_AES_WRAP_CTX,ctx);
  2018. if (!iv && !key)
  2019. return 1;
  2020. if (key) {
  2021. if (EVP_CIPHER_CTX_encrypting(ctx))
  2022. AES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
  2023. &wctx->ks.ks);
  2024. else
  2025. AES_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
  2026. &wctx->ks.ks);
  2027. if (!iv)
  2028. wctx->iv = NULL;
  2029. }
  2030. if (iv) {
  2031. memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), iv, EVP_CIPHER_CTX_iv_length(ctx));
  2032. wctx->iv = EVP_CIPHER_CTX_iv_noconst(ctx);
  2033. }
  2034. return 1;
  2035. }
  2036. static int aes_wrap_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  2037. const unsigned char *in, size_t inlen)
  2038. {
  2039. EVP_AES_WRAP_CTX *wctx = EVP_C_DATA(EVP_AES_WRAP_CTX,ctx);
  2040. size_t rv;
  2041. /* AES wrap with padding has IV length of 4, without padding 8 */
  2042. int pad = EVP_CIPHER_CTX_iv_length(ctx) == 4;
  2043. /* No final operation so always return zero length */
  2044. if (!in)
  2045. return 0;
  2046. /* Input length must always be non-zero */
  2047. if (!inlen)
  2048. return -1;
  2049. /* If decrypting need at least 16 bytes and multiple of 8 */
  2050. if (!EVP_CIPHER_CTX_encrypting(ctx) && (inlen < 16 || inlen & 0x7))
  2051. return -1;
  2052. /* If not padding input must be multiple of 8 */
  2053. if (!pad && inlen & 0x7)
  2054. return -1;
  2055. if (is_partially_overlapping(out, in, inlen)) {
  2056. EVPerr(EVP_F_AES_WRAP_CIPHER, EVP_R_PARTIALLY_OVERLAPPING);
  2057. return 0;
  2058. }
  2059. if (!out) {
  2060. if (EVP_CIPHER_CTX_encrypting(ctx)) {
  2061. /* If padding round up to multiple of 8 */
  2062. if (pad)
  2063. inlen = (inlen + 7) / 8 * 8;
  2064. /* 8 byte prefix */
  2065. return inlen + 8;
  2066. } else {
  2067. /*
  2068. * If not padding output will be exactly 8 bytes smaller than
  2069. * input. If padding it will be at least 8 bytes smaller but we
  2070. * don't know how much.
  2071. */
  2072. return inlen - 8;
  2073. }
  2074. }
  2075. if (pad) {
  2076. if (EVP_CIPHER_CTX_encrypting(ctx))
  2077. rv = CRYPTO_128_wrap_pad(&wctx->ks.ks, wctx->iv,
  2078. out, in, inlen,
  2079. (block128_f) AES_encrypt);
  2080. else
  2081. rv = CRYPTO_128_unwrap_pad(&wctx->ks.ks, wctx->iv,
  2082. out, in, inlen,
  2083. (block128_f) AES_decrypt);
  2084. } else {
  2085. if (EVP_CIPHER_CTX_encrypting(ctx))
  2086. rv = CRYPTO_128_wrap(&wctx->ks.ks, wctx->iv,
  2087. out, in, inlen, (block128_f) AES_encrypt);
  2088. else
  2089. rv = CRYPTO_128_unwrap(&wctx->ks.ks, wctx->iv,
  2090. out, in, inlen, (block128_f) AES_decrypt);
  2091. }
  2092. return rv ? (int)rv : -1;
  2093. }
  2094. #define WRAP_FLAGS (EVP_CIPH_WRAP_MODE \
  2095. | EVP_CIPH_CUSTOM_IV | EVP_CIPH_FLAG_CUSTOM_CIPHER \
  2096. | EVP_CIPH_ALWAYS_CALL_INIT | EVP_CIPH_FLAG_DEFAULT_ASN1)
  2097. static const EVP_CIPHER aes_128_wrap = {
  2098. NID_id_aes128_wrap,
  2099. 8, 16, 8, WRAP_FLAGS,
  2100. aes_wrap_init_key, aes_wrap_cipher,
  2101. NULL,
  2102. sizeof(EVP_AES_WRAP_CTX),
  2103. NULL, NULL, NULL, NULL
  2104. };
  2105. const EVP_CIPHER *EVP_aes_128_wrap(void)
  2106. {
  2107. return &aes_128_wrap;
  2108. }
  2109. static const EVP_CIPHER aes_192_wrap = {
  2110. NID_id_aes192_wrap,
  2111. 8, 24, 8, WRAP_FLAGS,
  2112. aes_wrap_init_key, aes_wrap_cipher,
  2113. NULL,
  2114. sizeof(EVP_AES_WRAP_CTX),
  2115. NULL, NULL, NULL, NULL
  2116. };
  2117. const EVP_CIPHER *EVP_aes_192_wrap(void)
  2118. {
  2119. return &aes_192_wrap;
  2120. }
  2121. static const EVP_CIPHER aes_256_wrap = {
  2122. NID_id_aes256_wrap,
  2123. 8, 32, 8, WRAP_FLAGS,
  2124. aes_wrap_init_key, aes_wrap_cipher,
  2125. NULL,
  2126. sizeof(EVP_AES_WRAP_CTX),
  2127. NULL, NULL, NULL, NULL
  2128. };
  2129. const EVP_CIPHER *EVP_aes_256_wrap(void)
  2130. {
  2131. return &aes_256_wrap;
  2132. }
  2133. static const EVP_CIPHER aes_128_wrap_pad = {
  2134. NID_id_aes128_wrap_pad,
  2135. 8, 16, 4, WRAP_FLAGS,
  2136. aes_wrap_init_key, aes_wrap_cipher,
  2137. NULL,
  2138. sizeof(EVP_AES_WRAP_CTX),
  2139. NULL, NULL, NULL, NULL
  2140. };
  2141. const EVP_CIPHER *EVP_aes_128_wrap_pad(void)
  2142. {
  2143. return &aes_128_wrap_pad;
  2144. }
  2145. static const EVP_CIPHER aes_192_wrap_pad = {
  2146. NID_id_aes192_wrap_pad,
  2147. 8, 24, 4, WRAP_FLAGS,
  2148. aes_wrap_init_key, aes_wrap_cipher,
  2149. NULL,
  2150. sizeof(EVP_AES_WRAP_CTX),
  2151. NULL, NULL, NULL, NULL
  2152. };
  2153. const EVP_CIPHER *EVP_aes_192_wrap_pad(void)
  2154. {
  2155. return &aes_192_wrap_pad;
  2156. }
  2157. static const EVP_CIPHER aes_256_wrap_pad = {
  2158. NID_id_aes256_wrap_pad,
  2159. 8, 32, 4, WRAP_FLAGS,
  2160. aes_wrap_init_key, aes_wrap_cipher,
  2161. NULL,
  2162. sizeof(EVP_AES_WRAP_CTX),
  2163. NULL, NULL, NULL, NULL
  2164. };
  2165. const EVP_CIPHER *EVP_aes_256_wrap_pad(void)
  2166. {
  2167. return &aes_256_wrap_pad;
  2168. }
  2169. #ifndef OPENSSL_NO_OCB
  2170. static int aes_ocb_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr)
  2171. {
  2172. EVP_AES_OCB_CTX *octx = EVP_C_DATA(EVP_AES_OCB_CTX,c);
  2173. EVP_CIPHER_CTX *newc;
  2174. EVP_AES_OCB_CTX *new_octx;
  2175. switch (type) {
  2176. case EVP_CTRL_INIT:
  2177. octx->key_set = 0;
  2178. octx->iv_set = 0;
  2179. octx->ivlen = EVP_CIPHER_CTX_iv_length(c);
  2180. octx->iv = EVP_CIPHER_CTX_iv_noconst(c);
  2181. octx->taglen = 16;
  2182. octx->data_buf_len = 0;
  2183. octx->aad_buf_len = 0;
  2184. return 1;
  2185. case EVP_CTRL_AEAD_SET_IVLEN:
  2186. /* IV len must be 1 to 15 */
  2187. if (arg <= 0 || arg > 15)
  2188. return 0;
  2189. octx->ivlen = arg;
  2190. return 1;
  2191. case EVP_CTRL_AEAD_SET_TAG:
  2192. if (!ptr) {
  2193. /* Tag len must be 0 to 16 */
  2194. if (arg < 0 || arg > 16)
  2195. return 0;
  2196. octx->taglen = arg;
  2197. return 1;
  2198. }
  2199. if (arg != octx->taglen || EVP_CIPHER_CTX_encrypting(c))
  2200. return 0;
  2201. memcpy(octx->tag, ptr, arg);
  2202. return 1;
  2203. case EVP_CTRL_AEAD_GET_TAG:
  2204. if (arg != octx->taglen || !EVP_CIPHER_CTX_encrypting(c))
  2205. return 0;
  2206. memcpy(ptr, octx->tag, arg);
  2207. return 1;
  2208. case EVP_CTRL_COPY:
  2209. newc = (EVP_CIPHER_CTX *)ptr;
  2210. new_octx = EVP_C_DATA(EVP_AES_OCB_CTX,newc);
  2211. return CRYPTO_ocb128_copy_ctx(&new_octx->ocb, &octx->ocb,
  2212. &new_octx->ksenc.ks,
  2213. &new_octx->ksdec.ks);
  2214. default:
  2215. return -1;
  2216. }
  2217. }
  2218. # ifdef HWAES_CAPABLE
  2219. # ifdef HWAES_ocb_encrypt
  2220. void HWAES_ocb_encrypt(const unsigned char *in, unsigned char *out,
  2221. size_t blocks, const void *key,
  2222. size_t start_block_num,
  2223. unsigned char offset_i[16],
  2224. const unsigned char L_[][16],
  2225. unsigned char checksum[16]);
  2226. # else
  2227. # define HWAES_ocb_encrypt ((ocb128_f)NULL)
  2228. # endif
  2229. # ifdef HWAES_ocb_decrypt
  2230. void HWAES_ocb_decrypt(const unsigned char *in, unsigned char *out,
  2231. size_t blocks, const void *key,
  2232. size_t start_block_num,
  2233. unsigned char offset_i[16],
  2234. const unsigned char L_[][16],
  2235. unsigned char checksum[16]);
  2236. # else
  2237. # define HWAES_ocb_decrypt ((ocb128_f)NULL)
  2238. # endif
  2239. # endif
  2240. static int aes_ocb_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
  2241. const unsigned char *iv, int enc)
  2242. {
  2243. EVP_AES_OCB_CTX *octx = EVP_C_DATA(EVP_AES_OCB_CTX,ctx);
  2244. if (!iv && !key)
  2245. return 1;
  2246. if (key) {
  2247. do {
  2248. /*
  2249. * We set both the encrypt and decrypt key here because decrypt
  2250. * needs both. We could possibly optimise to remove setting the
  2251. * decrypt for an encryption operation.
  2252. */
  2253. # ifdef HWAES_CAPABLE
  2254. if (HWAES_CAPABLE) {
  2255. HWAES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
  2256. &octx->ksenc.ks);
  2257. HWAES_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
  2258. &octx->ksdec.ks);
  2259. if (!CRYPTO_ocb128_init(&octx->ocb,
  2260. &octx->ksenc.ks, &octx->ksdec.ks,
  2261. (block128_f) HWAES_encrypt,
  2262. (block128_f) HWAES_decrypt,
  2263. enc ? HWAES_ocb_encrypt
  2264. : HWAES_ocb_decrypt))
  2265. return 0;
  2266. break;
  2267. }
  2268. # endif
  2269. # ifdef VPAES_CAPABLE
  2270. if (VPAES_CAPABLE) {
  2271. vpaes_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
  2272. &octx->ksenc.ks);
  2273. vpaes_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
  2274. &octx->ksdec.ks);
  2275. if (!CRYPTO_ocb128_init(&octx->ocb,
  2276. &octx->ksenc.ks, &octx->ksdec.ks,
  2277. (block128_f) vpaes_encrypt,
  2278. (block128_f) vpaes_decrypt,
  2279. NULL))
  2280. return 0;
  2281. break;
  2282. }
  2283. # endif
  2284. AES_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
  2285. &octx->ksenc.ks);
  2286. AES_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8,
  2287. &octx->ksdec.ks);
  2288. if (!CRYPTO_ocb128_init(&octx->ocb,
  2289. &octx->ksenc.ks, &octx->ksdec.ks,
  2290. (block128_f) AES_encrypt,
  2291. (block128_f) AES_decrypt,
  2292. NULL))
  2293. return 0;
  2294. }
  2295. while (0);
  2296. /*
  2297. * If we have an iv we can set it directly, otherwise use saved IV.
  2298. */
  2299. if (iv == NULL && octx->iv_set)
  2300. iv = octx->iv;
  2301. if (iv) {
  2302. if (CRYPTO_ocb128_setiv(&octx->ocb, iv, octx->ivlen, octx->taglen)
  2303. != 1)
  2304. return 0;
  2305. octx->iv_set = 1;
  2306. }
  2307. octx->key_set = 1;
  2308. } else {
  2309. /* If key set use IV, otherwise copy */
  2310. if (octx->key_set)
  2311. CRYPTO_ocb128_setiv(&octx->ocb, iv, octx->ivlen, octx->taglen);
  2312. else
  2313. memcpy(octx->iv, iv, octx->ivlen);
  2314. octx->iv_set = 1;
  2315. }
  2316. return 1;
  2317. }
  2318. static int aes_ocb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
  2319. const unsigned char *in, size_t len)
  2320. {
  2321. unsigned char *buf;
  2322. int *buf_len;
  2323. int written_len = 0;
  2324. size_t trailing_len;
  2325. EVP_AES_OCB_CTX *octx = EVP_C_DATA(EVP_AES_OCB_CTX,ctx);
  2326. /* If IV or Key not set then return error */
  2327. if (!octx->iv_set)
  2328. return -1;
  2329. if (!octx->key_set)
  2330. return -1;
  2331. if (in != NULL) {
  2332. /*
  2333. * Need to ensure we are only passing full blocks to low level OCB
  2334. * routines. We do it here rather than in EVP_EncryptUpdate/
  2335. * EVP_DecryptUpdate because we need to pass full blocks of AAD too
  2336. * and those routines don't support that
  2337. */
  2338. /* Are we dealing with AAD or normal data here? */
  2339. if (out == NULL) {
  2340. buf = octx->aad_buf;
  2341. buf_len = &(octx->aad_buf_len);
  2342. } else {
  2343. buf = octx->data_buf;
  2344. buf_len = &(octx->data_buf_len);
  2345. if (is_partially_overlapping(out + *buf_len, in, len)) {
  2346. EVPerr(EVP_F_AES_OCB_CIPHER, EVP_R_PARTIALLY_OVERLAPPING);
  2347. return 0;
  2348. }
  2349. }
  2350. /*
  2351. * If we've got a partially filled buffer from a previous call then
  2352. * use that data first
  2353. */
  2354. if (*buf_len > 0) {
  2355. unsigned int remaining;
  2356. remaining = AES_BLOCK_SIZE - (*buf_len);
  2357. if (remaining > len) {
  2358. memcpy(buf + (*buf_len), in, len);
  2359. *(buf_len) += len;
  2360. return 0;
  2361. }
  2362. memcpy(buf + (*buf_len), in, remaining);
  2363. /*
  2364. * If we get here we've filled the buffer, so process it
  2365. */
  2366. len -= remaining;
  2367. in += remaining;
  2368. if (out == NULL) {
  2369. if (!CRYPTO_ocb128_aad(&octx->ocb, buf, AES_BLOCK_SIZE))
  2370. return -1;
  2371. } else if (EVP_CIPHER_CTX_encrypting(ctx)) {
  2372. if (!CRYPTO_ocb128_encrypt(&octx->ocb, buf, out,
  2373. AES_BLOCK_SIZE))
  2374. return -1;
  2375. } else {
  2376. if (!CRYPTO_ocb128_decrypt(&octx->ocb, buf, out,
  2377. AES_BLOCK_SIZE))
  2378. return -1;
  2379. }
  2380. written_len = AES_BLOCK_SIZE;
  2381. *buf_len = 0;
  2382. if (out != NULL)
  2383. out += AES_BLOCK_SIZE;
  2384. }
  2385. /* Do we have a partial block to handle at the end? */
  2386. trailing_len = len % AES_BLOCK_SIZE;
  2387. /*
  2388. * If we've got some full blocks to handle, then process these first
  2389. */
  2390. if (len != trailing_len) {
  2391. if (out == NULL) {
  2392. if (!CRYPTO_ocb128_aad(&octx->ocb, in, len - trailing_len))
  2393. return -1;
  2394. } else if (EVP_CIPHER_CTX_encrypting(ctx)) {
  2395. if (!CRYPTO_ocb128_encrypt
  2396. (&octx->ocb, in, out, len - trailing_len))
  2397. return -1;
  2398. } else {
  2399. if (!CRYPTO_ocb128_decrypt
  2400. (&octx->ocb, in, out, len - trailing_len))
  2401. return -1;
  2402. }
  2403. written_len += len - trailing_len;
  2404. in += len - trailing_len;
  2405. }
  2406. /* Handle any trailing partial block */
  2407. if (trailing_len > 0) {
  2408. memcpy(buf, in, trailing_len);
  2409. *buf_len = trailing_len;
  2410. }
  2411. return written_len;
  2412. } else {
  2413. /*
  2414. * First of all empty the buffer of any partial block that we might
  2415. * have been provided - both for data and AAD
  2416. */
  2417. if (octx->data_buf_len > 0) {
  2418. if (EVP_CIPHER_CTX_encrypting(ctx)) {
  2419. if (!CRYPTO_ocb128_encrypt(&octx->ocb, octx->data_buf, out,
  2420. octx->data_buf_len))
  2421. return -1;
  2422. } else {
  2423. if (!CRYPTO_ocb128_decrypt(&octx->ocb, octx->data_buf, out,
  2424. octx->data_buf_len))
  2425. return -1;
  2426. }
  2427. written_len = octx->data_buf_len;
  2428. octx->data_buf_len = 0;
  2429. }
  2430. if (octx->aad_buf_len > 0) {
  2431. if (!CRYPTO_ocb128_aad
  2432. (&octx->ocb, octx->aad_buf, octx->aad_buf_len))
  2433. return -1;
  2434. octx->aad_buf_len = 0;
  2435. }
  2436. /* If decrypting then verify */
  2437. if (!EVP_CIPHER_CTX_encrypting(ctx)) {
  2438. if (octx->taglen < 0)
  2439. return -1;
  2440. if (CRYPTO_ocb128_finish(&octx->ocb,
  2441. octx->tag, octx->taglen) != 0)
  2442. return -1;
  2443. octx->iv_set = 0;
  2444. return written_len;
  2445. }
  2446. /* If encrypting then just get the tag */
  2447. if (CRYPTO_ocb128_tag(&octx->ocb, octx->tag, 16) != 1)
  2448. return -1;
  2449. /* Don't reuse the IV */
  2450. octx->iv_set = 0;
  2451. return written_len;
  2452. }
  2453. }
  2454. static int aes_ocb_cleanup(EVP_CIPHER_CTX *c)
  2455. {
  2456. EVP_AES_OCB_CTX *octx = EVP_C_DATA(EVP_AES_OCB_CTX,c);
  2457. CRYPTO_ocb128_cleanup(&octx->ocb);
  2458. return 1;
  2459. }
  2460. BLOCK_CIPHER_custom(NID_aes, 128, 16, 12, ocb, OCB,
  2461. EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS)
  2462. BLOCK_CIPHER_custom(NID_aes, 192, 16, 12, ocb, OCB,
  2463. EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS)
  2464. BLOCK_CIPHER_custom(NID_aes, 256, 16, 12, ocb, OCB,
  2465. EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS)
  2466. #endif /* OPENSSL_NO_OCB */