cipher_wrap.c 66 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482
  1. /**
  2. * \file cipher_wrap.c
  3. *
  4. * \brief Generic cipher wrapper for Mbed TLS
  5. *
  6. * \author Adriaan de Jong <[email protected]>
  7. *
  8. * Copyright The Mbed TLS Contributors
  9. * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
  10. */
  11. #include "common.h"
  12. #if defined(MBEDTLS_CIPHER_C)
  13. #include "cipher_wrap.h"
  14. #include "mbedtls/error.h"
  15. #if defined(MBEDTLS_CHACHAPOLY_C)
  16. #include "mbedtls/chachapoly.h"
  17. #endif
  18. #if defined(MBEDTLS_AES_C)
  19. #include "mbedtls/aes.h"
  20. #endif
  21. #if defined(MBEDTLS_CAMELLIA_C)
  22. #include "mbedtls/camellia.h"
  23. #endif
  24. #if defined(MBEDTLS_ARIA_C)
  25. #include "mbedtls/aria.h"
  26. #endif
  27. #if defined(MBEDTLS_DES_C)
  28. #include "mbedtls/des.h"
  29. #endif
  30. #if defined(MBEDTLS_CHACHA20_C)
  31. #include "mbedtls/chacha20.h"
  32. #endif
  33. #if defined(MBEDTLS_GCM_C)
  34. #include "mbedtls/gcm.h"
  35. #endif
  36. #if defined(MBEDTLS_CCM_C)
  37. #include "mbedtls/ccm.h"
  38. #endif
  39. #if defined(MBEDTLS_NIST_KW_C)
  40. #include "mbedtls/nist_kw.h"
  41. #endif
  42. #if defined(MBEDTLS_CIPHER_NULL_CIPHER)
  43. #include <string.h>
  44. #endif
  45. #include "mbedtls/platform.h"
  46. enum mbedtls_cipher_base_index {
  47. #if defined(MBEDTLS_AES_C)
  48. MBEDTLS_CIPHER_BASE_INDEX_AES,
  49. #endif
  50. #if defined(MBEDTLS_ARIA_C)
  51. MBEDTLS_CIPHER_BASE_INDEX_ARIA,
  52. #endif
  53. #if defined(MBEDTLS_CAMELLIA_C)
  54. MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA,
  55. #endif
  56. #if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)
  57. MBEDTLS_CIPHER_BASE_INDEX_CCM_AES,
  58. #endif
  59. #if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)
  60. MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA,
  61. #endif
  62. #if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CAMELLIA_C)
  63. MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA,
  64. #endif
  65. #if defined(MBEDTLS_CHACHA20_C)
  66. MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE,
  67. #endif
  68. #if defined(MBEDTLS_CHACHAPOLY_C)
  69. MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE,
  70. #endif
  71. #if defined(MBEDTLS_DES_C)
  72. MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3,
  73. #endif
  74. #if defined(MBEDTLS_DES_C)
  75. MBEDTLS_CIPHER_BASE_INDEX_DES_EDE,
  76. #endif
  77. #if defined(MBEDTLS_DES_C)
  78. MBEDTLS_CIPHER_BASE_INDEX_DES,
  79. #endif
  80. #if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)
  81. MBEDTLS_CIPHER_BASE_INDEX_GCM_AES,
  82. #endif
  83. #if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)
  84. MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA,
  85. #endif
  86. #if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CAMELLIA_C)
  87. MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA,
  88. #endif
  89. #if defined(MBEDTLS_NIST_KW_C)
  90. MBEDTLS_CIPHER_BASE_INDEX_KW_AES,
  91. #endif
  92. #if defined(MBEDTLS_CIPHER_NULL_CIPHER)
  93. MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE,
  94. #endif
  95. #if defined(MBEDTLS_CIPHER_MODE_XTS) && defined(MBEDTLS_AES_C)
  96. MBEDTLS_CIPHER_BASE_INDEX_XTS_AES,
  97. #endif
  98. /* Prevent compile failure due to empty enum */
  99. MBEDTLS_CIPHER_BASE_PREVENT_EMPTY_ENUM
  100. };
  101. #if defined(MBEDTLS_GCM_C) && \
  102. (defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA) || \
  103. defined(MBEDTLS_ARIA_C) || defined(MBEDTLS_CAMELLIA_C))
  104. /* shared by all GCM ciphers */
  105. static void *gcm_ctx_alloc(void)
  106. {
  107. void *ctx = mbedtls_calloc(1, sizeof(mbedtls_gcm_context));
  108. if (ctx != NULL) {
  109. mbedtls_gcm_init((mbedtls_gcm_context *) ctx);
  110. }
  111. return ctx;
  112. }
  113. static void gcm_ctx_free(void *ctx)
  114. {
  115. mbedtls_gcm_free(ctx);
  116. mbedtls_free(ctx);
  117. }
  118. #endif /* MBEDTLS_GCM_C */
  119. #if defined(MBEDTLS_CCM_C) && \
  120. (defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA) || \
  121. defined(MBEDTLS_ARIA_C) || defined(MBEDTLS_CAMELLIA_C))
  122. /* shared by all CCM ciphers */
  123. static void *ccm_ctx_alloc(void)
  124. {
  125. void *ctx = mbedtls_calloc(1, sizeof(mbedtls_ccm_context));
  126. if (ctx != NULL) {
  127. mbedtls_ccm_init((mbedtls_ccm_context *) ctx);
  128. }
  129. return ctx;
  130. }
  131. static void ccm_ctx_free(void *ctx)
  132. {
  133. mbedtls_ccm_free(ctx);
  134. mbedtls_free(ctx);
  135. }
  136. #endif /* MBEDTLS_CCM_C */
  137. #if defined(MBEDTLS_AES_C)
  138. static int aes_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
  139. const unsigned char *input, unsigned char *output)
  140. {
  141. return mbedtls_aes_crypt_ecb((mbedtls_aes_context *) ctx, operation, input, output);
  142. }
  143. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  144. static int aes_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
  145. unsigned char *iv, const unsigned char *input, unsigned char *output)
  146. {
  147. return mbedtls_aes_crypt_cbc((mbedtls_aes_context *) ctx, operation, length, iv, input,
  148. output);
  149. }
  150. #endif /* MBEDTLS_CIPHER_MODE_CBC */
  151. #if defined(MBEDTLS_CIPHER_MODE_CFB)
  152. static int aes_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
  153. size_t length, size_t *iv_off, unsigned char *iv,
  154. const unsigned char *input, unsigned char *output)
  155. {
  156. return mbedtls_aes_crypt_cfb128((mbedtls_aes_context *) ctx, operation, length, iv_off, iv,
  157. input, output);
  158. }
  159. #endif /* MBEDTLS_CIPHER_MODE_CFB */
  160. #if defined(MBEDTLS_CIPHER_MODE_OFB)
  161. static int aes_crypt_ofb_wrap(void *ctx, size_t length, size_t *iv_off,
  162. unsigned char *iv, const unsigned char *input, unsigned char *output)
  163. {
  164. return mbedtls_aes_crypt_ofb((mbedtls_aes_context *) ctx, length, iv_off,
  165. iv, input, output);
  166. }
  167. #endif /* MBEDTLS_CIPHER_MODE_OFB */
  168. #if defined(MBEDTLS_CIPHER_MODE_CTR)
  169. static int aes_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
  170. unsigned char *nonce_counter, unsigned char *stream_block,
  171. const unsigned char *input, unsigned char *output)
  172. {
  173. return mbedtls_aes_crypt_ctr((mbedtls_aes_context *) ctx, length, nc_off, nonce_counter,
  174. stream_block, input, output);
  175. }
  176. #endif /* MBEDTLS_CIPHER_MODE_CTR */
  177. #if defined(MBEDTLS_CIPHER_MODE_XTS)
  178. static int aes_crypt_xts_wrap(void *ctx, mbedtls_operation_t operation,
  179. size_t length,
  180. const unsigned char data_unit[16],
  181. const unsigned char *input,
  182. unsigned char *output)
  183. {
  184. mbedtls_aes_xts_context *xts_ctx = ctx;
  185. int mode;
  186. switch (operation) {
  187. case MBEDTLS_ENCRYPT:
  188. mode = MBEDTLS_AES_ENCRYPT;
  189. break;
  190. case MBEDTLS_DECRYPT:
  191. mode = MBEDTLS_AES_DECRYPT;
  192. break;
  193. default:
  194. return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
  195. }
  196. return mbedtls_aes_crypt_xts(xts_ctx, mode, length,
  197. data_unit, input, output);
  198. }
  199. #endif /* MBEDTLS_CIPHER_MODE_XTS */
  200. #if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
  201. static int aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
  202. unsigned int key_bitlen)
  203. {
  204. return mbedtls_aes_setkey_dec((mbedtls_aes_context *) ctx, key, key_bitlen);
  205. }
  206. #endif
  207. static int aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
  208. unsigned int key_bitlen)
  209. {
  210. return mbedtls_aes_setkey_enc((mbedtls_aes_context *) ctx, key, key_bitlen);
  211. }
  212. static void *aes_ctx_alloc(void)
  213. {
  214. mbedtls_aes_context *aes = mbedtls_calloc(1, sizeof(mbedtls_aes_context));
  215. if (aes == NULL) {
  216. return NULL;
  217. }
  218. mbedtls_aes_init(aes);
  219. return aes;
  220. }
  221. static void aes_ctx_free(void *ctx)
  222. {
  223. mbedtls_aes_free((mbedtls_aes_context *) ctx);
  224. mbedtls_free(ctx);
  225. }
  226. static const mbedtls_cipher_base_t aes_info = {
  227. MBEDTLS_CIPHER_ID_AES,
  228. aes_crypt_ecb_wrap,
  229. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  230. aes_crypt_cbc_wrap,
  231. #endif
  232. #if defined(MBEDTLS_CIPHER_MODE_CFB)
  233. aes_crypt_cfb128_wrap,
  234. #endif
  235. #if defined(MBEDTLS_CIPHER_MODE_OFB)
  236. aes_crypt_ofb_wrap,
  237. #endif
  238. #if defined(MBEDTLS_CIPHER_MODE_CTR)
  239. aes_crypt_ctr_wrap,
  240. #endif
  241. #if defined(MBEDTLS_CIPHER_MODE_XTS)
  242. NULL,
  243. #endif
  244. #if defined(MBEDTLS_CIPHER_MODE_STREAM)
  245. NULL,
  246. #endif
  247. aes_setkey_enc_wrap,
  248. #if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
  249. aes_setkey_dec_wrap,
  250. #endif
  251. aes_ctx_alloc,
  252. aes_ctx_free
  253. };
  254. static const mbedtls_cipher_info_t aes_128_ecb_info = {
  255. "AES-128-ECB",
  256. 16,
  257. 0 >> MBEDTLS_IV_SIZE_SHIFT,
  258. 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
  259. MBEDTLS_MODE_ECB,
  260. MBEDTLS_CIPHER_AES_128_ECB,
  261. 0,
  262. MBEDTLS_CIPHER_BASE_INDEX_AES
  263. };
  264. #if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
  265. static const mbedtls_cipher_info_t aes_192_ecb_info = {
  266. "AES-192-ECB",
  267. 16,
  268. 0 >> MBEDTLS_IV_SIZE_SHIFT,
  269. 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
  270. MBEDTLS_MODE_ECB,
  271. MBEDTLS_CIPHER_AES_192_ECB,
  272. 0,
  273. MBEDTLS_CIPHER_BASE_INDEX_AES
  274. };
  275. static const mbedtls_cipher_info_t aes_256_ecb_info = {
  276. "AES-256-ECB",
  277. 16,
  278. 0 >> MBEDTLS_IV_SIZE_SHIFT,
  279. 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
  280. MBEDTLS_MODE_ECB,
  281. MBEDTLS_CIPHER_AES_256_ECB,
  282. 0,
  283. MBEDTLS_CIPHER_BASE_INDEX_AES
  284. };
  285. #endif
  286. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  287. static const mbedtls_cipher_info_t aes_128_cbc_info = {
  288. "AES-128-CBC",
  289. 16,
  290. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  291. 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
  292. MBEDTLS_MODE_CBC,
  293. MBEDTLS_CIPHER_AES_128_CBC,
  294. 0,
  295. MBEDTLS_CIPHER_BASE_INDEX_AES
  296. };
  297. #if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
  298. static const mbedtls_cipher_info_t aes_192_cbc_info = {
  299. "AES-192-CBC",
  300. 16,
  301. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  302. 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
  303. MBEDTLS_MODE_CBC,
  304. MBEDTLS_CIPHER_AES_192_CBC,
  305. 0,
  306. MBEDTLS_CIPHER_BASE_INDEX_AES
  307. };
  308. static const mbedtls_cipher_info_t aes_256_cbc_info = {
  309. "AES-256-CBC",
  310. 16,
  311. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  312. 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
  313. MBEDTLS_MODE_CBC,
  314. MBEDTLS_CIPHER_AES_256_CBC,
  315. 0,
  316. MBEDTLS_CIPHER_BASE_INDEX_AES
  317. };
  318. #endif
  319. #endif /* MBEDTLS_CIPHER_MODE_CBC */
  320. #if defined(MBEDTLS_CIPHER_MODE_CFB)
  321. static const mbedtls_cipher_info_t aes_128_cfb128_info = {
  322. "AES-128-CFB128",
  323. 16,
  324. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  325. 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
  326. MBEDTLS_MODE_CFB,
  327. MBEDTLS_CIPHER_AES_128_CFB128,
  328. 0,
  329. MBEDTLS_CIPHER_BASE_INDEX_AES
  330. };
  331. #if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
  332. static const mbedtls_cipher_info_t aes_192_cfb128_info = {
  333. "AES-192-CFB128",
  334. 16,
  335. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  336. 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
  337. MBEDTLS_MODE_CFB,
  338. MBEDTLS_CIPHER_AES_192_CFB128,
  339. 0,
  340. MBEDTLS_CIPHER_BASE_INDEX_AES
  341. };
  342. static const mbedtls_cipher_info_t aes_256_cfb128_info = {
  343. "AES-256-CFB128",
  344. 16,
  345. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  346. 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
  347. MBEDTLS_MODE_CFB,
  348. MBEDTLS_CIPHER_AES_256_CFB128,
  349. 0,
  350. MBEDTLS_CIPHER_BASE_INDEX_AES
  351. };
  352. #endif
  353. #endif /* MBEDTLS_CIPHER_MODE_CFB */
  354. #if defined(MBEDTLS_CIPHER_MODE_OFB)
  355. static const mbedtls_cipher_info_t aes_128_ofb_info = {
  356. "AES-128-OFB",
  357. 16,
  358. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  359. 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
  360. MBEDTLS_MODE_OFB,
  361. MBEDTLS_CIPHER_AES_128_OFB,
  362. 0,
  363. MBEDTLS_CIPHER_BASE_INDEX_AES
  364. };
  365. #if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
  366. static const mbedtls_cipher_info_t aes_192_ofb_info = {
  367. "AES-192-OFB",
  368. 16,
  369. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  370. 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
  371. MBEDTLS_MODE_OFB,
  372. MBEDTLS_CIPHER_AES_192_OFB,
  373. 0,
  374. MBEDTLS_CIPHER_BASE_INDEX_AES
  375. };
  376. static const mbedtls_cipher_info_t aes_256_ofb_info = {
  377. "AES-256-OFB",
  378. 16,
  379. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  380. 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
  381. MBEDTLS_MODE_OFB,
  382. MBEDTLS_CIPHER_AES_256_OFB,
  383. 0,
  384. MBEDTLS_CIPHER_BASE_INDEX_AES
  385. };
  386. #endif
  387. #endif /* MBEDTLS_CIPHER_MODE_OFB */
  388. #if defined(MBEDTLS_CIPHER_MODE_CTR)
  389. static const mbedtls_cipher_info_t aes_128_ctr_info = {
  390. "AES-128-CTR",
  391. 16,
  392. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  393. 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
  394. MBEDTLS_MODE_CTR,
  395. MBEDTLS_CIPHER_AES_128_CTR,
  396. 0,
  397. MBEDTLS_CIPHER_BASE_INDEX_AES
  398. };
  399. #if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
  400. static const mbedtls_cipher_info_t aes_192_ctr_info = {
  401. "AES-192-CTR",
  402. 16,
  403. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  404. 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
  405. MBEDTLS_MODE_CTR,
  406. MBEDTLS_CIPHER_AES_192_CTR,
  407. 0,
  408. MBEDTLS_CIPHER_BASE_INDEX_AES
  409. };
  410. static const mbedtls_cipher_info_t aes_256_ctr_info = {
  411. "AES-256-CTR",
  412. 16,
  413. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  414. 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
  415. MBEDTLS_MODE_CTR,
  416. MBEDTLS_CIPHER_AES_256_CTR,
  417. 0,
  418. MBEDTLS_CIPHER_BASE_INDEX_AES
  419. };
  420. #endif
  421. #endif /* MBEDTLS_CIPHER_MODE_CTR */
  422. #if defined(MBEDTLS_CIPHER_MODE_XTS)
  423. static int xts_aes_setkey_enc_wrap(void *ctx, const unsigned char *key,
  424. unsigned int key_bitlen)
  425. {
  426. mbedtls_aes_xts_context *xts_ctx = ctx;
  427. return mbedtls_aes_xts_setkey_enc(xts_ctx, key, key_bitlen);
  428. }
  429. static int xts_aes_setkey_dec_wrap(void *ctx, const unsigned char *key,
  430. unsigned int key_bitlen)
  431. {
  432. mbedtls_aes_xts_context *xts_ctx = ctx;
  433. return mbedtls_aes_xts_setkey_dec(xts_ctx, key, key_bitlen);
  434. }
  435. static void *xts_aes_ctx_alloc(void)
  436. {
  437. mbedtls_aes_xts_context *xts_ctx = mbedtls_calloc(1, sizeof(*xts_ctx));
  438. if (xts_ctx != NULL) {
  439. mbedtls_aes_xts_init(xts_ctx);
  440. }
  441. return xts_ctx;
  442. }
  443. static void xts_aes_ctx_free(void *ctx)
  444. {
  445. mbedtls_aes_xts_context *xts_ctx = ctx;
  446. if (xts_ctx == NULL) {
  447. return;
  448. }
  449. mbedtls_aes_xts_free(xts_ctx);
  450. mbedtls_free(xts_ctx);
  451. }
  452. static const mbedtls_cipher_base_t xts_aes_info = {
  453. MBEDTLS_CIPHER_ID_AES,
  454. NULL,
  455. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  456. NULL,
  457. #endif
  458. #if defined(MBEDTLS_CIPHER_MODE_CFB)
  459. NULL,
  460. #endif
  461. #if defined(MBEDTLS_CIPHER_MODE_OFB)
  462. NULL,
  463. #endif
  464. #if defined(MBEDTLS_CIPHER_MODE_CTR)
  465. NULL,
  466. #endif
  467. #if defined(MBEDTLS_CIPHER_MODE_XTS)
  468. aes_crypt_xts_wrap,
  469. #endif
  470. #if defined(MBEDTLS_CIPHER_MODE_STREAM)
  471. NULL,
  472. #endif
  473. xts_aes_setkey_enc_wrap,
  474. xts_aes_setkey_dec_wrap,
  475. xts_aes_ctx_alloc,
  476. xts_aes_ctx_free
  477. };
  478. static const mbedtls_cipher_info_t aes_128_xts_info = {
  479. "AES-128-XTS",
  480. 16,
  481. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  482. 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
  483. MBEDTLS_MODE_XTS,
  484. MBEDTLS_CIPHER_AES_128_XTS,
  485. 0,
  486. MBEDTLS_CIPHER_BASE_INDEX_XTS_AES
  487. };
  488. #if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
  489. static const mbedtls_cipher_info_t aes_256_xts_info = {
  490. "AES-256-XTS",
  491. 16,
  492. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  493. 512 >> MBEDTLS_KEY_BITLEN_SHIFT,
  494. MBEDTLS_MODE_XTS,
  495. MBEDTLS_CIPHER_AES_256_XTS,
  496. 0,
  497. MBEDTLS_CIPHER_BASE_INDEX_XTS_AES
  498. };
  499. #endif
  500. #endif /* MBEDTLS_CIPHER_MODE_XTS */
  501. #endif /* MBEDTLS_AES_C */
  502. #if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CCM_GCM_CAN_AES)
  503. static int gcm_aes_setkey_wrap(void *ctx, const unsigned char *key,
  504. unsigned int key_bitlen)
  505. {
  506. return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
  507. key, key_bitlen);
  508. }
  509. #endif /* MBEDTLS_GCM_C && MBEDTLS_CCM_GCM_CAN_AES */
  510. #if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)
  511. static const mbedtls_cipher_base_t gcm_aes_info = {
  512. MBEDTLS_CIPHER_ID_AES,
  513. NULL,
  514. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  515. NULL,
  516. #endif
  517. #if defined(MBEDTLS_CIPHER_MODE_CFB)
  518. NULL,
  519. #endif
  520. #if defined(MBEDTLS_CIPHER_MODE_OFB)
  521. NULL,
  522. #endif
  523. #if defined(MBEDTLS_CIPHER_MODE_CTR)
  524. NULL,
  525. #endif
  526. #if defined(MBEDTLS_CIPHER_MODE_XTS)
  527. NULL,
  528. #endif
  529. #if defined(MBEDTLS_CIPHER_MODE_STREAM)
  530. NULL,
  531. #endif
  532. #if defined(MBEDTLS_GCM_C)
  533. gcm_aes_setkey_wrap,
  534. #if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
  535. gcm_aes_setkey_wrap,
  536. #endif
  537. gcm_ctx_alloc,
  538. gcm_ctx_free,
  539. #else
  540. NULL,
  541. NULL,
  542. NULL,
  543. NULL,
  544. #endif /* MBEDTLS_GCM_C */
  545. };
  546. #endif /* MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA */
  547. #if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)
  548. static const mbedtls_cipher_info_t aes_128_gcm_info = {
  549. "AES-128-GCM",
  550. 16,
  551. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  552. 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
  553. MBEDTLS_MODE_GCM,
  554. MBEDTLS_CIPHER_AES_128_GCM,
  555. MBEDTLS_CIPHER_VARIABLE_IV_LEN,
  556. MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
  557. };
  558. #if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
  559. static const mbedtls_cipher_info_t aes_192_gcm_info = {
  560. "AES-192-GCM",
  561. 16,
  562. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  563. 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
  564. MBEDTLS_MODE_GCM,
  565. MBEDTLS_CIPHER_AES_192_GCM,
  566. MBEDTLS_CIPHER_VARIABLE_IV_LEN,
  567. MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
  568. };
  569. static const mbedtls_cipher_info_t aes_256_gcm_info = {
  570. "AES-256-GCM",
  571. 16,
  572. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  573. 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
  574. MBEDTLS_MODE_GCM,
  575. MBEDTLS_CIPHER_AES_256_GCM,
  576. MBEDTLS_CIPHER_VARIABLE_IV_LEN,
  577. MBEDTLS_CIPHER_BASE_INDEX_GCM_AES
  578. };
  579. #endif
  580. #endif /* MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA */
  581. #if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CCM_GCM_CAN_AES)
  582. static int ccm_aes_setkey_wrap(void *ctx, const unsigned char *key,
  583. unsigned int key_bitlen)
  584. {
  585. return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_AES,
  586. key, key_bitlen);
  587. }
  588. #endif /* MBEDTLS_CCM_C && MBEDTLS_CCM_GCM_CAN_AES */
  589. #if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)
  590. static const mbedtls_cipher_base_t ccm_aes_info = {
  591. MBEDTLS_CIPHER_ID_AES,
  592. NULL,
  593. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  594. NULL,
  595. #endif
  596. #if defined(MBEDTLS_CIPHER_MODE_CFB)
  597. NULL,
  598. #endif
  599. #if defined(MBEDTLS_CIPHER_MODE_OFB)
  600. NULL,
  601. #endif
  602. #if defined(MBEDTLS_CIPHER_MODE_CTR)
  603. NULL,
  604. #endif
  605. #if defined(MBEDTLS_CIPHER_MODE_XTS)
  606. NULL,
  607. #endif
  608. #if defined(MBEDTLS_CIPHER_MODE_STREAM)
  609. NULL,
  610. #endif
  611. #if defined(MBEDTLS_CCM_C)
  612. ccm_aes_setkey_wrap,
  613. #if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
  614. ccm_aes_setkey_wrap,
  615. #endif
  616. ccm_ctx_alloc,
  617. ccm_ctx_free,
  618. #else
  619. NULL,
  620. NULL,
  621. NULL,
  622. NULL,
  623. #endif
  624. };
  625. #endif /* MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA */
  626. #if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)
  627. static const mbedtls_cipher_info_t aes_128_ccm_info = {
  628. "AES-128-CCM",
  629. 16,
  630. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  631. 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
  632. MBEDTLS_MODE_CCM,
  633. MBEDTLS_CIPHER_AES_128_CCM,
  634. MBEDTLS_CIPHER_VARIABLE_IV_LEN,
  635. MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
  636. };
  637. #if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
  638. static const mbedtls_cipher_info_t aes_192_ccm_info = {
  639. "AES-192-CCM",
  640. 16,
  641. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  642. 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
  643. MBEDTLS_MODE_CCM,
  644. MBEDTLS_CIPHER_AES_192_CCM,
  645. MBEDTLS_CIPHER_VARIABLE_IV_LEN,
  646. MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
  647. };
  648. static const mbedtls_cipher_info_t aes_256_ccm_info = {
  649. "AES-256-CCM",
  650. 16,
  651. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  652. 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
  653. MBEDTLS_MODE_CCM,
  654. MBEDTLS_CIPHER_AES_256_CCM,
  655. MBEDTLS_CIPHER_VARIABLE_IV_LEN,
  656. MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
  657. };
  658. #endif
  659. #endif /* MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA */
  660. #if defined(MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG_AES_VIA_LEGACY_OR_USE_PSA)
  661. static const mbedtls_cipher_info_t aes_128_ccm_star_no_tag_info = {
  662. "AES-128-CCM*-NO-TAG",
  663. 16,
  664. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  665. 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
  666. MBEDTLS_MODE_CCM_STAR_NO_TAG,
  667. MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG,
  668. MBEDTLS_CIPHER_VARIABLE_IV_LEN,
  669. MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
  670. };
  671. #if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
  672. static const mbedtls_cipher_info_t aes_192_ccm_star_no_tag_info = {
  673. "AES-192-CCM*-NO-TAG",
  674. 16,
  675. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  676. 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
  677. MBEDTLS_MODE_CCM_STAR_NO_TAG,
  678. MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG,
  679. MBEDTLS_CIPHER_VARIABLE_IV_LEN,
  680. MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
  681. };
  682. static const mbedtls_cipher_info_t aes_256_ccm_star_no_tag_info = {
  683. "AES-256-CCM*-NO-TAG",
  684. 16,
  685. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  686. 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
  687. MBEDTLS_MODE_CCM_STAR_NO_TAG,
  688. MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG,
  689. MBEDTLS_CIPHER_VARIABLE_IV_LEN,
  690. MBEDTLS_CIPHER_BASE_INDEX_CCM_AES
  691. };
  692. #endif
  693. #endif /* MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG_AES_VIA_LEGACY_OR_USE_PSA */
  694. #if defined(MBEDTLS_CAMELLIA_C)
  695. static int camellia_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
  696. const unsigned char *input, unsigned char *output)
  697. {
  698. return mbedtls_camellia_crypt_ecb((mbedtls_camellia_context *) ctx, operation, input,
  699. output);
  700. }
  701. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  702. static int camellia_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
  703. size_t length, unsigned char *iv,
  704. const unsigned char *input, unsigned char *output)
  705. {
  706. return mbedtls_camellia_crypt_cbc((mbedtls_camellia_context *) ctx, operation, length, iv,
  707. input, output);
  708. }
  709. #endif /* MBEDTLS_CIPHER_MODE_CBC */
  710. #if defined(MBEDTLS_CIPHER_MODE_CFB)
  711. static int camellia_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
  712. size_t length, size_t *iv_off, unsigned char *iv,
  713. const unsigned char *input, unsigned char *output)
  714. {
  715. return mbedtls_camellia_crypt_cfb128((mbedtls_camellia_context *) ctx, operation, length,
  716. iv_off, iv, input, output);
  717. }
  718. #endif /* MBEDTLS_CIPHER_MODE_CFB */
  719. #if defined(MBEDTLS_CIPHER_MODE_CTR)
  720. static int camellia_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
  721. unsigned char *nonce_counter, unsigned char *stream_block,
  722. const unsigned char *input, unsigned char *output)
  723. {
  724. return mbedtls_camellia_crypt_ctr((mbedtls_camellia_context *) ctx, length, nc_off,
  725. nonce_counter, stream_block, input, output);
  726. }
  727. #endif /* MBEDTLS_CIPHER_MODE_CTR */
  728. #if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
  729. static int camellia_setkey_dec_wrap(void *ctx, const unsigned char *key,
  730. unsigned int key_bitlen)
  731. {
  732. return mbedtls_camellia_setkey_dec((mbedtls_camellia_context *) ctx, key, key_bitlen);
  733. }
  734. #endif
  735. static int camellia_setkey_enc_wrap(void *ctx, const unsigned char *key,
  736. unsigned int key_bitlen)
  737. {
  738. return mbedtls_camellia_setkey_enc((mbedtls_camellia_context *) ctx, key, key_bitlen);
  739. }
  740. static void *camellia_ctx_alloc(void)
  741. {
  742. mbedtls_camellia_context *ctx;
  743. ctx = mbedtls_calloc(1, sizeof(mbedtls_camellia_context));
  744. if (ctx == NULL) {
  745. return NULL;
  746. }
  747. mbedtls_camellia_init(ctx);
  748. return ctx;
  749. }
  750. static void camellia_ctx_free(void *ctx)
  751. {
  752. mbedtls_camellia_free((mbedtls_camellia_context *) ctx);
  753. mbedtls_free(ctx);
  754. }
  755. static const mbedtls_cipher_base_t camellia_info = {
  756. MBEDTLS_CIPHER_ID_CAMELLIA,
  757. camellia_crypt_ecb_wrap,
  758. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  759. camellia_crypt_cbc_wrap,
  760. #endif
  761. #if defined(MBEDTLS_CIPHER_MODE_CFB)
  762. camellia_crypt_cfb128_wrap,
  763. #endif
  764. #if defined(MBEDTLS_CIPHER_MODE_OFB)
  765. NULL,
  766. #endif
  767. #if defined(MBEDTLS_CIPHER_MODE_CTR)
  768. camellia_crypt_ctr_wrap,
  769. #endif
  770. #if defined(MBEDTLS_CIPHER_MODE_XTS)
  771. NULL,
  772. #endif
  773. #if defined(MBEDTLS_CIPHER_MODE_STREAM)
  774. NULL,
  775. #endif
  776. camellia_setkey_enc_wrap,
  777. #if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
  778. camellia_setkey_dec_wrap,
  779. #endif
  780. camellia_ctx_alloc,
  781. camellia_ctx_free
  782. };
  783. static const mbedtls_cipher_info_t camellia_128_ecb_info = {
  784. "CAMELLIA-128-ECB",
  785. 16,
  786. 0 >> MBEDTLS_IV_SIZE_SHIFT,
  787. 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
  788. MBEDTLS_MODE_ECB,
  789. MBEDTLS_CIPHER_CAMELLIA_128_ECB,
  790. 0,
  791. MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
  792. };
  793. static const mbedtls_cipher_info_t camellia_192_ecb_info = {
  794. "CAMELLIA-192-ECB",
  795. 16,
  796. 0 >> MBEDTLS_IV_SIZE_SHIFT,
  797. 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
  798. MBEDTLS_MODE_ECB,
  799. MBEDTLS_CIPHER_CAMELLIA_192_ECB,
  800. 0,
  801. MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
  802. };
  803. static const mbedtls_cipher_info_t camellia_256_ecb_info = {
  804. "CAMELLIA-256-ECB",
  805. 16,
  806. 0 >> MBEDTLS_IV_SIZE_SHIFT,
  807. 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
  808. MBEDTLS_MODE_ECB,
  809. MBEDTLS_CIPHER_CAMELLIA_256_ECB,
  810. 0,
  811. MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
  812. };
  813. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  814. static const mbedtls_cipher_info_t camellia_128_cbc_info = {
  815. "CAMELLIA-128-CBC",
  816. 16,
  817. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  818. 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
  819. MBEDTLS_MODE_CBC,
  820. MBEDTLS_CIPHER_CAMELLIA_128_CBC,
  821. 0,
  822. MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
  823. };
  824. static const mbedtls_cipher_info_t camellia_192_cbc_info = {
  825. "CAMELLIA-192-CBC",
  826. 16,
  827. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  828. 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
  829. MBEDTLS_MODE_CBC,
  830. MBEDTLS_CIPHER_CAMELLIA_192_CBC,
  831. 0,
  832. MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
  833. };
  834. static const mbedtls_cipher_info_t camellia_256_cbc_info = {
  835. "CAMELLIA-256-CBC",
  836. 16,
  837. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  838. 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
  839. MBEDTLS_MODE_CBC,
  840. MBEDTLS_CIPHER_CAMELLIA_256_CBC,
  841. 0,
  842. MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
  843. };
  844. #endif /* MBEDTLS_CIPHER_MODE_CBC */
  845. #if defined(MBEDTLS_CIPHER_MODE_CFB)
  846. static const mbedtls_cipher_info_t camellia_128_cfb128_info = {
  847. "CAMELLIA-128-CFB128",
  848. 16,
  849. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  850. 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
  851. MBEDTLS_MODE_CFB,
  852. MBEDTLS_CIPHER_CAMELLIA_128_CFB128,
  853. 0,
  854. MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
  855. };
  856. static const mbedtls_cipher_info_t camellia_192_cfb128_info = {
  857. "CAMELLIA-192-CFB128",
  858. 16,
  859. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  860. 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
  861. MBEDTLS_MODE_CFB,
  862. MBEDTLS_CIPHER_CAMELLIA_192_CFB128,
  863. 0,
  864. MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
  865. };
  866. static const mbedtls_cipher_info_t camellia_256_cfb128_info = {
  867. "CAMELLIA-256-CFB128",
  868. 16,
  869. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  870. 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
  871. MBEDTLS_MODE_CFB,
  872. MBEDTLS_CIPHER_CAMELLIA_256_CFB128,
  873. 0,
  874. MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
  875. };
  876. #endif /* MBEDTLS_CIPHER_MODE_CFB */
  877. #if defined(MBEDTLS_CIPHER_MODE_CTR)
  878. static const mbedtls_cipher_info_t camellia_128_ctr_info = {
  879. "CAMELLIA-128-CTR",
  880. 16,
  881. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  882. 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
  883. MBEDTLS_MODE_CTR,
  884. MBEDTLS_CIPHER_CAMELLIA_128_CTR,
  885. 0,
  886. MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
  887. };
  888. static const mbedtls_cipher_info_t camellia_192_ctr_info = {
  889. "CAMELLIA-192-CTR",
  890. 16,
  891. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  892. 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
  893. MBEDTLS_MODE_CTR,
  894. MBEDTLS_CIPHER_CAMELLIA_192_CTR,
  895. 0,
  896. MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
  897. };
  898. static const mbedtls_cipher_info_t camellia_256_ctr_info = {
  899. "CAMELLIA-256-CTR",
  900. 16,
  901. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  902. 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
  903. MBEDTLS_MODE_CTR,
  904. MBEDTLS_CIPHER_CAMELLIA_256_CTR,
  905. 0,
  906. MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA
  907. };
  908. #endif /* MBEDTLS_CIPHER_MODE_CTR */
  909. #if defined(MBEDTLS_GCM_C)
  910. static int gcm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
  911. unsigned int key_bitlen)
  912. {
  913. return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
  914. key, key_bitlen);
  915. }
  916. static const mbedtls_cipher_base_t gcm_camellia_info = {
  917. MBEDTLS_CIPHER_ID_CAMELLIA,
  918. NULL,
  919. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  920. NULL,
  921. #endif
  922. #if defined(MBEDTLS_CIPHER_MODE_CFB)
  923. NULL,
  924. #endif
  925. #if defined(MBEDTLS_CIPHER_MODE_OFB)
  926. NULL,
  927. #endif
  928. #if defined(MBEDTLS_CIPHER_MODE_CTR)
  929. NULL,
  930. #endif
  931. #if defined(MBEDTLS_CIPHER_MODE_XTS)
  932. NULL,
  933. #endif
  934. #if defined(MBEDTLS_CIPHER_MODE_STREAM)
  935. NULL,
  936. #endif
  937. gcm_camellia_setkey_wrap,
  938. #if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
  939. gcm_camellia_setkey_wrap,
  940. #endif
  941. gcm_ctx_alloc,
  942. gcm_ctx_free,
  943. };
  944. static const mbedtls_cipher_info_t camellia_128_gcm_info = {
  945. "CAMELLIA-128-GCM",
  946. 16,
  947. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  948. 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
  949. MBEDTLS_MODE_GCM,
  950. MBEDTLS_CIPHER_CAMELLIA_128_GCM,
  951. MBEDTLS_CIPHER_VARIABLE_IV_LEN,
  952. MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
  953. };
  954. static const mbedtls_cipher_info_t camellia_192_gcm_info = {
  955. "CAMELLIA-192-GCM",
  956. 16,
  957. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  958. 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
  959. MBEDTLS_MODE_GCM,
  960. MBEDTLS_CIPHER_CAMELLIA_192_GCM,
  961. MBEDTLS_CIPHER_VARIABLE_IV_LEN,
  962. MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
  963. };
  964. static const mbedtls_cipher_info_t camellia_256_gcm_info = {
  965. "CAMELLIA-256-GCM",
  966. 16,
  967. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  968. 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
  969. MBEDTLS_MODE_GCM,
  970. MBEDTLS_CIPHER_CAMELLIA_256_GCM,
  971. MBEDTLS_CIPHER_VARIABLE_IV_LEN,
  972. MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA
  973. };
  974. #endif /* MBEDTLS_GCM_C */
  975. #if defined(MBEDTLS_CCM_C)
  976. static int ccm_camellia_setkey_wrap(void *ctx, const unsigned char *key,
  977. unsigned int key_bitlen)
  978. {
  979. return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA,
  980. key, key_bitlen);
  981. }
  982. static const mbedtls_cipher_base_t ccm_camellia_info = {
  983. MBEDTLS_CIPHER_ID_CAMELLIA,
  984. NULL,
  985. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  986. NULL,
  987. #endif
  988. #if defined(MBEDTLS_CIPHER_MODE_CFB)
  989. NULL,
  990. #endif
  991. #if defined(MBEDTLS_CIPHER_MODE_OFB)
  992. NULL,
  993. #endif
  994. #if defined(MBEDTLS_CIPHER_MODE_CTR)
  995. NULL,
  996. #endif
  997. #if defined(MBEDTLS_CIPHER_MODE_XTS)
  998. NULL,
  999. #endif
  1000. #if defined(MBEDTLS_CIPHER_MODE_STREAM)
  1001. NULL,
  1002. #endif
  1003. ccm_camellia_setkey_wrap,
  1004. #if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
  1005. ccm_camellia_setkey_wrap,
  1006. #endif
  1007. ccm_ctx_alloc,
  1008. ccm_ctx_free,
  1009. };
  1010. static const mbedtls_cipher_info_t camellia_128_ccm_info = {
  1011. "CAMELLIA-128-CCM",
  1012. 16,
  1013. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  1014. 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1015. MBEDTLS_MODE_CCM,
  1016. MBEDTLS_CIPHER_CAMELLIA_128_CCM,
  1017. MBEDTLS_CIPHER_VARIABLE_IV_LEN,
  1018. MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
  1019. };
  1020. static const mbedtls_cipher_info_t camellia_192_ccm_info = {
  1021. "CAMELLIA-192-CCM",
  1022. 16,
  1023. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  1024. 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1025. MBEDTLS_MODE_CCM,
  1026. MBEDTLS_CIPHER_CAMELLIA_192_CCM,
  1027. MBEDTLS_CIPHER_VARIABLE_IV_LEN,
  1028. MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
  1029. };
  1030. static const mbedtls_cipher_info_t camellia_256_ccm_info = {
  1031. "CAMELLIA-256-CCM",
  1032. 16,
  1033. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  1034. 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1035. MBEDTLS_MODE_CCM,
  1036. MBEDTLS_CIPHER_CAMELLIA_256_CCM,
  1037. MBEDTLS_CIPHER_VARIABLE_IV_LEN,
  1038. MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
  1039. };
  1040. static const mbedtls_cipher_info_t camellia_128_ccm_star_no_tag_info = {
  1041. "CAMELLIA-128-CCM*-NO-TAG",
  1042. 16,
  1043. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  1044. 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1045. MBEDTLS_MODE_CCM_STAR_NO_TAG,
  1046. MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG,
  1047. MBEDTLS_CIPHER_VARIABLE_IV_LEN,
  1048. MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
  1049. };
  1050. static const mbedtls_cipher_info_t camellia_192_ccm_star_no_tag_info = {
  1051. "CAMELLIA-192-CCM*-NO-TAG",
  1052. 16,
  1053. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  1054. 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1055. MBEDTLS_MODE_CCM_STAR_NO_TAG,
  1056. MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG,
  1057. MBEDTLS_CIPHER_VARIABLE_IV_LEN,
  1058. MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
  1059. };
  1060. static const mbedtls_cipher_info_t camellia_256_ccm_star_no_tag_info = {
  1061. "CAMELLIA-256-CCM*-NO-TAG",
  1062. 16,
  1063. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  1064. 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1065. MBEDTLS_MODE_CCM_STAR_NO_TAG,
  1066. MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG,
  1067. MBEDTLS_CIPHER_VARIABLE_IV_LEN,
  1068. MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA
  1069. };
  1070. #endif /* MBEDTLS_CCM_C */
  1071. #endif /* MBEDTLS_CAMELLIA_C */
  1072. #if defined(MBEDTLS_ARIA_C)
  1073. static int aria_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
  1074. const unsigned char *input, unsigned char *output)
  1075. {
  1076. (void) operation;
  1077. return mbedtls_aria_crypt_ecb((mbedtls_aria_context *) ctx, input,
  1078. output);
  1079. }
  1080. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  1081. static int aria_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation,
  1082. size_t length, unsigned char *iv,
  1083. const unsigned char *input, unsigned char *output)
  1084. {
  1085. return mbedtls_aria_crypt_cbc((mbedtls_aria_context *) ctx, operation, length, iv,
  1086. input, output);
  1087. }
  1088. #endif /* MBEDTLS_CIPHER_MODE_CBC */
  1089. #if defined(MBEDTLS_CIPHER_MODE_CFB)
  1090. static int aria_crypt_cfb128_wrap(void *ctx, mbedtls_operation_t operation,
  1091. size_t length, size_t *iv_off, unsigned char *iv,
  1092. const unsigned char *input, unsigned char *output)
  1093. {
  1094. return mbedtls_aria_crypt_cfb128((mbedtls_aria_context *) ctx, operation, length,
  1095. iv_off, iv, input, output);
  1096. }
  1097. #endif /* MBEDTLS_CIPHER_MODE_CFB */
  1098. #if defined(MBEDTLS_CIPHER_MODE_CTR)
  1099. static int aria_crypt_ctr_wrap(void *ctx, size_t length, size_t *nc_off,
  1100. unsigned char *nonce_counter, unsigned char *stream_block,
  1101. const unsigned char *input, unsigned char *output)
  1102. {
  1103. return mbedtls_aria_crypt_ctr((mbedtls_aria_context *) ctx, length, nc_off,
  1104. nonce_counter, stream_block, input, output);
  1105. }
  1106. #endif /* MBEDTLS_CIPHER_MODE_CTR */
  1107. #if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
  1108. static int aria_setkey_dec_wrap(void *ctx, const unsigned char *key,
  1109. unsigned int key_bitlen)
  1110. {
  1111. return mbedtls_aria_setkey_dec((mbedtls_aria_context *) ctx, key, key_bitlen);
  1112. }
  1113. #endif
  1114. static int aria_setkey_enc_wrap(void *ctx, const unsigned char *key,
  1115. unsigned int key_bitlen)
  1116. {
  1117. return mbedtls_aria_setkey_enc((mbedtls_aria_context *) ctx, key, key_bitlen);
  1118. }
  1119. static void *aria_ctx_alloc(void)
  1120. {
  1121. mbedtls_aria_context *ctx;
  1122. ctx = mbedtls_calloc(1, sizeof(mbedtls_aria_context));
  1123. if (ctx == NULL) {
  1124. return NULL;
  1125. }
  1126. mbedtls_aria_init(ctx);
  1127. return ctx;
  1128. }
  1129. static void aria_ctx_free(void *ctx)
  1130. {
  1131. mbedtls_aria_free((mbedtls_aria_context *) ctx);
  1132. mbedtls_free(ctx);
  1133. }
  1134. static const mbedtls_cipher_base_t aria_info = {
  1135. MBEDTLS_CIPHER_ID_ARIA,
  1136. aria_crypt_ecb_wrap,
  1137. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  1138. aria_crypt_cbc_wrap,
  1139. #endif
  1140. #if defined(MBEDTLS_CIPHER_MODE_CFB)
  1141. aria_crypt_cfb128_wrap,
  1142. #endif
  1143. #if defined(MBEDTLS_CIPHER_MODE_OFB)
  1144. NULL,
  1145. #endif
  1146. #if defined(MBEDTLS_CIPHER_MODE_CTR)
  1147. aria_crypt_ctr_wrap,
  1148. #endif
  1149. #if defined(MBEDTLS_CIPHER_MODE_XTS)
  1150. NULL,
  1151. #endif
  1152. #if defined(MBEDTLS_CIPHER_MODE_STREAM)
  1153. NULL,
  1154. #endif
  1155. aria_setkey_enc_wrap,
  1156. #if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
  1157. aria_setkey_dec_wrap,
  1158. #endif
  1159. aria_ctx_alloc,
  1160. aria_ctx_free
  1161. };
  1162. static const mbedtls_cipher_info_t aria_128_ecb_info = {
  1163. "ARIA-128-ECB",
  1164. 16,
  1165. 0 >> MBEDTLS_IV_SIZE_SHIFT,
  1166. 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1167. MBEDTLS_MODE_ECB,
  1168. MBEDTLS_CIPHER_ARIA_128_ECB,
  1169. 0,
  1170. MBEDTLS_CIPHER_BASE_INDEX_ARIA
  1171. };
  1172. static const mbedtls_cipher_info_t aria_192_ecb_info = {
  1173. "ARIA-192-ECB",
  1174. 16,
  1175. 0 >> MBEDTLS_IV_SIZE_SHIFT,
  1176. 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1177. MBEDTLS_MODE_ECB,
  1178. MBEDTLS_CIPHER_ARIA_192_ECB,
  1179. 0,
  1180. MBEDTLS_CIPHER_BASE_INDEX_ARIA
  1181. };
  1182. static const mbedtls_cipher_info_t aria_256_ecb_info = {
  1183. "ARIA-256-ECB",
  1184. 16,
  1185. 0 >> MBEDTLS_IV_SIZE_SHIFT,
  1186. 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1187. MBEDTLS_MODE_ECB,
  1188. MBEDTLS_CIPHER_ARIA_256_ECB,
  1189. 0,
  1190. MBEDTLS_CIPHER_BASE_INDEX_ARIA
  1191. };
  1192. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  1193. static const mbedtls_cipher_info_t aria_128_cbc_info = {
  1194. "ARIA-128-CBC",
  1195. 16,
  1196. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  1197. 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1198. MBEDTLS_MODE_CBC,
  1199. MBEDTLS_CIPHER_ARIA_128_CBC,
  1200. 0,
  1201. MBEDTLS_CIPHER_BASE_INDEX_ARIA
  1202. };
  1203. static const mbedtls_cipher_info_t aria_192_cbc_info = {
  1204. "ARIA-192-CBC",
  1205. 16,
  1206. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  1207. 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1208. MBEDTLS_MODE_CBC,
  1209. MBEDTLS_CIPHER_ARIA_192_CBC,
  1210. 0,
  1211. MBEDTLS_CIPHER_BASE_INDEX_ARIA
  1212. };
  1213. static const mbedtls_cipher_info_t aria_256_cbc_info = {
  1214. "ARIA-256-CBC",
  1215. 16,
  1216. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  1217. 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1218. MBEDTLS_MODE_CBC,
  1219. MBEDTLS_CIPHER_ARIA_256_CBC,
  1220. 0,
  1221. MBEDTLS_CIPHER_BASE_INDEX_ARIA
  1222. };
  1223. #endif /* MBEDTLS_CIPHER_MODE_CBC */
  1224. #if defined(MBEDTLS_CIPHER_MODE_CFB)
  1225. static const mbedtls_cipher_info_t aria_128_cfb128_info = {
  1226. "ARIA-128-CFB128",
  1227. 16,
  1228. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  1229. 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1230. MBEDTLS_MODE_CFB,
  1231. MBEDTLS_CIPHER_ARIA_128_CFB128,
  1232. 0,
  1233. MBEDTLS_CIPHER_BASE_INDEX_ARIA
  1234. };
  1235. static const mbedtls_cipher_info_t aria_192_cfb128_info = {
  1236. "ARIA-192-CFB128",
  1237. 16,
  1238. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  1239. 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1240. MBEDTLS_MODE_CFB,
  1241. MBEDTLS_CIPHER_ARIA_192_CFB128,
  1242. 0,
  1243. MBEDTLS_CIPHER_BASE_INDEX_ARIA
  1244. };
  1245. static const mbedtls_cipher_info_t aria_256_cfb128_info = {
  1246. "ARIA-256-CFB128",
  1247. 16,
  1248. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  1249. 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1250. MBEDTLS_MODE_CFB,
  1251. MBEDTLS_CIPHER_ARIA_256_CFB128,
  1252. 0,
  1253. MBEDTLS_CIPHER_BASE_INDEX_ARIA
  1254. };
  1255. #endif /* MBEDTLS_CIPHER_MODE_CFB */
  1256. #if defined(MBEDTLS_CIPHER_MODE_CTR)
  1257. static const mbedtls_cipher_info_t aria_128_ctr_info = {
  1258. "ARIA-128-CTR",
  1259. 16,
  1260. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  1261. 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1262. MBEDTLS_MODE_CTR,
  1263. MBEDTLS_CIPHER_ARIA_128_CTR,
  1264. 0,
  1265. MBEDTLS_CIPHER_BASE_INDEX_ARIA
  1266. };
  1267. static const mbedtls_cipher_info_t aria_192_ctr_info = {
  1268. "ARIA-192-CTR",
  1269. 16,
  1270. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  1271. 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1272. MBEDTLS_MODE_CTR,
  1273. MBEDTLS_CIPHER_ARIA_192_CTR,
  1274. 0,
  1275. MBEDTLS_CIPHER_BASE_INDEX_ARIA
  1276. };
  1277. static const mbedtls_cipher_info_t aria_256_ctr_info = {
  1278. "ARIA-256-CTR",
  1279. 16,
  1280. 16 >> MBEDTLS_IV_SIZE_SHIFT,
  1281. 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1282. MBEDTLS_MODE_CTR,
  1283. MBEDTLS_CIPHER_ARIA_256_CTR,
  1284. 0,
  1285. MBEDTLS_CIPHER_BASE_INDEX_ARIA
  1286. };
  1287. #endif /* MBEDTLS_CIPHER_MODE_CTR */
  1288. #if defined(MBEDTLS_GCM_C)
  1289. static int gcm_aria_setkey_wrap(void *ctx, const unsigned char *key,
  1290. unsigned int key_bitlen)
  1291. {
  1292. return mbedtls_gcm_setkey((mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
  1293. key, key_bitlen);
  1294. }
  1295. static const mbedtls_cipher_base_t gcm_aria_info = {
  1296. MBEDTLS_CIPHER_ID_ARIA,
  1297. NULL,
  1298. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  1299. NULL,
  1300. #endif
  1301. #if defined(MBEDTLS_CIPHER_MODE_CFB)
  1302. NULL,
  1303. #endif
  1304. #if defined(MBEDTLS_CIPHER_MODE_OFB)
  1305. NULL,
  1306. #endif
  1307. #if defined(MBEDTLS_CIPHER_MODE_CTR)
  1308. NULL,
  1309. #endif
  1310. #if defined(MBEDTLS_CIPHER_MODE_XTS)
  1311. NULL,
  1312. #endif
  1313. #if defined(MBEDTLS_CIPHER_MODE_STREAM)
  1314. NULL,
  1315. #endif
  1316. gcm_aria_setkey_wrap,
  1317. #if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
  1318. gcm_aria_setkey_wrap,
  1319. #endif
  1320. gcm_ctx_alloc,
  1321. gcm_ctx_free,
  1322. };
  1323. static const mbedtls_cipher_info_t aria_128_gcm_info = {
  1324. "ARIA-128-GCM",
  1325. 16,
  1326. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  1327. 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1328. MBEDTLS_MODE_GCM,
  1329. MBEDTLS_CIPHER_ARIA_128_GCM,
  1330. MBEDTLS_CIPHER_VARIABLE_IV_LEN,
  1331. MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
  1332. };
  1333. static const mbedtls_cipher_info_t aria_192_gcm_info = {
  1334. "ARIA-192-GCM",
  1335. 16,
  1336. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  1337. 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1338. MBEDTLS_MODE_GCM,
  1339. MBEDTLS_CIPHER_ARIA_192_GCM,
  1340. MBEDTLS_CIPHER_VARIABLE_IV_LEN,
  1341. MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
  1342. };
  1343. static const mbedtls_cipher_info_t aria_256_gcm_info = {
  1344. "ARIA-256-GCM",
  1345. 16,
  1346. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  1347. 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1348. MBEDTLS_MODE_GCM,
  1349. MBEDTLS_CIPHER_ARIA_256_GCM,
  1350. MBEDTLS_CIPHER_VARIABLE_IV_LEN,
  1351. MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA
  1352. };
  1353. #endif /* MBEDTLS_GCM_C */
  1354. #if defined(MBEDTLS_CCM_C)
  1355. static int ccm_aria_setkey_wrap(void *ctx, const unsigned char *key,
  1356. unsigned int key_bitlen)
  1357. {
  1358. return mbedtls_ccm_setkey((mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA,
  1359. key, key_bitlen);
  1360. }
  1361. static const mbedtls_cipher_base_t ccm_aria_info = {
  1362. MBEDTLS_CIPHER_ID_ARIA,
  1363. NULL,
  1364. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  1365. NULL,
  1366. #endif
  1367. #if defined(MBEDTLS_CIPHER_MODE_CFB)
  1368. NULL,
  1369. #endif
  1370. #if defined(MBEDTLS_CIPHER_MODE_OFB)
  1371. NULL,
  1372. #endif
  1373. #if defined(MBEDTLS_CIPHER_MODE_CTR)
  1374. NULL,
  1375. #endif
  1376. #if defined(MBEDTLS_CIPHER_MODE_XTS)
  1377. NULL,
  1378. #endif
  1379. #if defined(MBEDTLS_CIPHER_MODE_STREAM)
  1380. NULL,
  1381. #endif
  1382. ccm_aria_setkey_wrap,
  1383. #if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
  1384. ccm_aria_setkey_wrap,
  1385. #endif
  1386. ccm_ctx_alloc,
  1387. ccm_ctx_free,
  1388. };
  1389. static const mbedtls_cipher_info_t aria_128_ccm_info = {
  1390. "ARIA-128-CCM",
  1391. 16,
  1392. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  1393. 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1394. MBEDTLS_MODE_CCM,
  1395. MBEDTLS_CIPHER_ARIA_128_CCM,
  1396. MBEDTLS_CIPHER_VARIABLE_IV_LEN,
  1397. MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
  1398. };
  1399. static const mbedtls_cipher_info_t aria_192_ccm_info = {
  1400. "ARIA-192-CCM",
  1401. 16,
  1402. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  1403. 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1404. MBEDTLS_MODE_CCM,
  1405. MBEDTLS_CIPHER_ARIA_192_CCM,
  1406. MBEDTLS_CIPHER_VARIABLE_IV_LEN,
  1407. MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
  1408. };
  1409. static const mbedtls_cipher_info_t aria_256_ccm_info = {
  1410. "ARIA-256-CCM",
  1411. 16,
  1412. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  1413. 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1414. MBEDTLS_MODE_CCM,
  1415. MBEDTLS_CIPHER_ARIA_256_CCM,
  1416. MBEDTLS_CIPHER_VARIABLE_IV_LEN,
  1417. MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
  1418. };
  1419. static const mbedtls_cipher_info_t aria_128_ccm_star_no_tag_info = {
  1420. "ARIA-128-CCM*-NO-TAG",
  1421. 16,
  1422. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  1423. 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1424. MBEDTLS_MODE_CCM_STAR_NO_TAG,
  1425. MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG,
  1426. MBEDTLS_CIPHER_VARIABLE_IV_LEN,
  1427. MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
  1428. };
  1429. static const mbedtls_cipher_info_t aria_192_ccm_star_no_tag_info = {
  1430. "ARIA-192-CCM*-NO-TAG",
  1431. 16,
  1432. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  1433. 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1434. MBEDTLS_MODE_CCM_STAR_NO_TAG,
  1435. MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG,
  1436. MBEDTLS_CIPHER_VARIABLE_IV_LEN,
  1437. MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
  1438. };
  1439. static const mbedtls_cipher_info_t aria_256_ccm_star_no_tag_info = {
  1440. "ARIA-256-CCM*-NO-TAG",
  1441. 16,
  1442. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  1443. 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1444. MBEDTLS_MODE_CCM_STAR_NO_TAG,
  1445. MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG,
  1446. MBEDTLS_CIPHER_VARIABLE_IV_LEN,
  1447. MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA
  1448. };
  1449. #endif /* MBEDTLS_CCM_C */
  1450. #endif /* MBEDTLS_ARIA_C */
  1451. #if defined(MBEDTLS_DES_C)
  1452. static int des_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
  1453. const unsigned char *input, unsigned char *output)
  1454. {
  1455. ((void) operation);
  1456. return mbedtls_des_crypt_ecb((mbedtls_des_context *) ctx, input, output);
  1457. }
  1458. static int des3_crypt_ecb_wrap(void *ctx, mbedtls_operation_t operation,
  1459. const unsigned char *input, unsigned char *output)
  1460. {
  1461. ((void) operation);
  1462. return mbedtls_des3_crypt_ecb((mbedtls_des3_context *) ctx, input, output);
  1463. }
  1464. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  1465. static int des_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
  1466. unsigned char *iv, const unsigned char *input, unsigned char *output)
  1467. {
  1468. return mbedtls_des_crypt_cbc((mbedtls_des_context *) ctx, operation, length, iv, input,
  1469. output);
  1470. }
  1471. #endif /* MBEDTLS_CIPHER_MODE_CBC */
  1472. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  1473. static int des3_crypt_cbc_wrap(void *ctx, mbedtls_operation_t operation, size_t length,
  1474. unsigned char *iv, const unsigned char *input, unsigned char *output)
  1475. {
  1476. return mbedtls_des3_crypt_cbc((mbedtls_des3_context *) ctx, operation, length, iv, input,
  1477. output);
  1478. }
  1479. #endif /* MBEDTLS_CIPHER_MODE_CBC */
  1480. static int des_setkey_dec_wrap(void *ctx, const unsigned char *key,
  1481. unsigned int key_bitlen)
  1482. {
  1483. ((void) key_bitlen);
  1484. return mbedtls_des_setkey_dec((mbedtls_des_context *) ctx, key);
  1485. }
  1486. static int des_setkey_enc_wrap(void *ctx, const unsigned char *key,
  1487. unsigned int key_bitlen)
  1488. {
  1489. ((void) key_bitlen);
  1490. return mbedtls_des_setkey_enc((mbedtls_des_context *) ctx, key);
  1491. }
  1492. static int des3_set2key_dec_wrap(void *ctx, const unsigned char *key,
  1493. unsigned int key_bitlen)
  1494. {
  1495. ((void) key_bitlen);
  1496. return mbedtls_des3_set2key_dec((mbedtls_des3_context *) ctx, key);
  1497. }
  1498. static int des3_set2key_enc_wrap(void *ctx, const unsigned char *key,
  1499. unsigned int key_bitlen)
  1500. {
  1501. ((void) key_bitlen);
  1502. return mbedtls_des3_set2key_enc((mbedtls_des3_context *) ctx, key);
  1503. }
  1504. static int des3_set3key_dec_wrap(void *ctx, const unsigned char *key,
  1505. unsigned int key_bitlen)
  1506. {
  1507. ((void) key_bitlen);
  1508. return mbedtls_des3_set3key_dec((mbedtls_des3_context *) ctx, key);
  1509. }
  1510. static int des3_set3key_enc_wrap(void *ctx, const unsigned char *key,
  1511. unsigned int key_bitlen)
  1512. {
  1513. ((void) key_bitlen);
  1514. return mbedtls_des3_set3key_enc((mbedtls_des3_context *) ctx, key);
  1515. }
  1516. static void *des_ctx_alloc(void)
  1517. {
  1518. mbedtls_des_context *des = mbedtls_calloc(1, sizeof(mbedtls_des_context));
  1519. if (des == NULL) {
  1520. return NULL;
  1521. }
  1522. mbedtls_des_init(des);
  1523. return des;
  1524. }
  1525. static void des_ctx_free(void *ctx)
  1526. {
  1527. mbedtls_des_free((mbedtls_des_context *) ctx);
  1528. mbedtls_free(ctx);
  1529. }
  1530. static void *des3_ctx_alloc(void)
  1531. {
  1532. mbedtls_des3_context *des3;
  1533. des3 = mbedtls_calloc(1, sizeof(mbedtls_des3_context));
  1534. if (des3 == NULL) {
  1535. return NULL;
  1536. }
  1537. mbedtls_des3_init(des3);
  1538. return des3;
  1539. }
  1540. static void des3_ctx_free(void *ctx)
  1541. {
  1542. mbedtls_des3_free((mbedtls_des3_context *) ctx);
  1543. mbedtls_free(ctx);
  1544. }
  1545. static const mbedtls_cipher_base_t des_info = {
  1546. MBEDTLS_CIPHER_ID_DES,
  1547. des_crypt_ecb_wrap,
  1548. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  1549. des_crypt_cbc_wrap,
  1550. #endif
  1551. #if defined(MBEDTLS_CIPHER_MODE_CFB)
  1552. NULL,
  1553. #endif
  1554. #if defined(MBEDTLS_CIPHER_MODE_OFB)
  1555. NULL,
  1556. #endif
  1557. #if defined(MBEDTLS_CIPHER_MODE_CTR)
  1558. NULL,
  1559. #endif
  1560. #if defined(MBEDTLS_CIPHER_MODE_XTS)
  1561. NULL,
  1562. #endif
  1563. #if defined(MBEDTLS_CIPHER_MODE_STREAM)
  1564. NULL,
  1565. #endif
  1566. des_setkey_enc_wrap,
  1567. des_setkey_dec_wrap,
  1568. des_ctx_alloc,
  1569. des_ctx_free
  1570. };
  1571. static const mbedtls_cipher_info_t des_ecb_info = {
  1572. "DES-ECB",
  1573. 8,
  1574. 0 >> MBEDTLS_IV_SIZE_SHIFT,
  1575. MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
  1576. MBEDTLS_MODE_ECB,
  1577. MBEDTLS_CIPHER_DES_ECB,
  1578. 0,
  1579. MBEDTLS_CIPHER_BASE_INDEX_DES
  1580. };
  1581. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  1582. static const mbedtls_cipher_info_t des_cbc_info = {
  1583. "DES-CBC",
  1584. 8,
  1585. 8 >> MBEDTLS_IV_SIZE_SHIFT,
  1586. MBEDTLS_KEY_LENGTH_DES >> MBEDTLS_KEY_BITLEN_SHIFT,
  1587. MBEDTLS_MODE_CBC,
  1588. MBEDTLS_CIPHER_DES_CBC,
  1589. 0,
  1590. MBEDTLS_CIPHER_BASE_INDEX_DES
  1591. };
  1592. #endif /* MBEDTLS_CIPHER_MODE_CBC */
  1593. static const mbedtls_cipher_base_t des_ede_info = {
  1594. MBEDTLS_CIPHER_ID_DES,
  1595. des3_crypt_ecb_wrap,
  1596. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  1597. des3_crypt_cbc_wrap,
  1598. #endif
  1599. #if defined(MBEDTLS_CIPHER_MODE_CFB)
  1600. NULL,
  1601. #endif
  1602. #if defined(MBEDTLS_CIPHER_MODE_OFB)
  1603. NULL,
  1604. #endif
  1605. #if defined(MBEDTLS_CIPHER_MODE_CTR)
  1606. NULL,
  1607. #endif
  1608. #if defined(MBEDTLS_CIPHER_MODE_XTS)
  1609. NULL,
  1610. #endif
  1611. #if defined(MBEDTLS_CIPHER_MODE_STREAM)
  1612. NULL,
  1613. #endif
  1614. des3_set2key_enc_wrap,
  1615. des3_set2key_dec_wrap,
  1616. des3_ctx_alloc,
  1617. des3_ctx_free
  1618. };
  1619. static const mbedtls_cipher_info_t des_ede_ecb_info = {
  1620. "DES-EDE-ECB",
  1621. 8,
  1622. 0 >> MBEDTLS_IV_SIZE_SHIFT,
  1623. MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
  1624. MBEDTLS_MODE_ECB,
  1625. MBEDTLS_CIPHER_DES_EDE_ECB,
  1626. 0,
  1627. MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
  1628. };
  1629. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  1630. static const mbedtls_cipher_info_t des_ede_cbc_info = {
  1631. "DES-EDE-CBC",
  1632. 8,
  1633. 8 >> MBEDTLS_IV_SIZE_SHIFT,
  1634. MBEDTLS_KEY_LENGTH_DES_EDE >> MBEDTLS_KEY_BITLEN_SHIFT,
  1635. MBEDTLS_MODE_CBC,
  1636. MBEDTLS_CIPHER_DES_EDE_CBC,
  1637. 0,
  1638. MBEDTLS_CIPHER_BASE_INDEX_DES_EDE
  1639. };
  1640. #endif /* MBEDTLS_CIPHER_MODE_CBC */
  1641. static const mbedtls_cipher_base_t des_ede3_info = {
  1642. MBEDTLS_CIPHER_ID_3DES,
  1643. des3_crypt_ecb_wrap,
  1644. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  1645. des3_crypt_cbc_wrap,
  1646. #endif
  1647. #if defined(MBEDTLS_CIPHER_MODE_CFB)
  1648. NULL,
  1649. #endif
  1650. #if defined(MBEDTLS_CIPHER_MODE_OFB)
  1651. NULL,
  1652. #endif
  1653. #if defined(MBEDTLS_CIPHER_MODE_CTR)
  1654. NULL,
  1655. #endif
  1656. #if defined(MBEDTLS_CIPHER_MODE_XTS)
  1657. NULL,
  1658. #endif
  1659. #if defined(MBEDTLS_CIPHER_MODE_STREAM)
  1660. NULL,
  1661. #endif
  1662. des3_set3key_enc_wrap,
  1663. des3_set3key_dec_wrap,
  1664. des3_ctx_alloc,
  1665. des3_ctx_free
  1666. };
  1667. static const mbedtls_cipher_info_t des_ede3_ecb_info = {
  1668. "DES-EDE3-ECB",
  1669. 8,
  1670. 0 >> MBEDTLS_IV_SIZE_SHIFT,
  1671. MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1672. MBEDTLS_MODE_ECB,
  1673. MBEDTLS_CIPHER_DES_EDE3_ECB,
  1674. 0,
  1675. MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
  1676. };
  1677. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  1678. static const mbedtls_cipher_info_t des_ede3_cbc_info = {
  1679. "DES-EDE3-CBC",
  1680. 8,
  1681. 8 >> MBEDTLS_IV_SIZE_SHIFT,
  1682. MBEDTLS_KEY_LENGTH_DES_EDE3 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1683. MBEDTLS_MODE_CBC,
  1684. MBEDTLS_CIPHER_DES_EDE3_CBC,
  1685. 0,
  1686. MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3
  1687. };
  1688. #endif /* MBEDTLS_CIPHER_MODE_CBC */
  1689. #endif /* MBEDTLS_DES_C */
  1690. #if defined(MBEDTLS_CHACHA20_C)
  1691. static int chacha20_setkey_wrap(void *ctx, const unsigned char *key,
  1692. unsigned int key_bitlen)
  1693. {
  1694. if (key_bitlen != 256U) {
  1695. return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
  1696. }
  1697. if (0 != mbedtls_chacha20_setkey((mbedtls_chacha20_context *) ctx, key)) {
  1698. return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
  1699. }
  1700. return 0;
  1701. }
  1702. static int chacha20_stream_wrap(void *ctx, size_t length,
  1703. const unsigned char *input,
  1704. unsigned char *output)
  1705. {
  1706. int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
  1707. ret = mbedtls_chacha20_update(ctx, length, input, output);
  1708. if (ret == MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA) {
  1709. return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
  1710. }
  1711. return ret;
  1712. }
  1713. static void *chacha20_ctx_alloc(void)
  1714. {
  1715. mbedtls_chacha20_context *ctx;
  1716. ctx = mbedtls_calloc(1, sizeof(mbedtls_chacha20_context));
  1717. if (ctx == NULL) {
  1718. return NULL;
  1719. }
  1720. mbedtls_chacha20_init(ctx);
  1721. return ctx;
  1722. }
  1723. static void chacha20_ctx_free(void *ctx)
  1724. {
  1725. mbedtls_chacha20_free((mbedtls_chacha20_context *) ctx);
  1726. mbedtls_free(ctx);
  1727. }
  1728. static const mbedtls_cipher_base_t chacha20_base_info = {
  1729. MBEDTLS_CIPHER_ID_CHACHA20,
  1730. NULL,
  1731. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  1732. NULL,
  1733. #endif
  1734. #if defined(MBEDTLS_CIPHER_MODE_CFB)
  1735. NULL,
  1736. #endif
  1737. #if defined(MBEDTLS_CIPHER_MODE_OFB)
  1738. NULL,
  1739. #endif
  1740. #if defined(MBEDTLS_CIPHER_MODE_CTR)
  1741. NULL,
  1742. #endif
  1743. #if defined(MBEDTLS_CIPHER_MODE_XTS)
  1744. NULL,
  1745. #endif
  1746. #if defined(MBEDTLS_CIPHER_MODE_STREAM)
  1747. chacha20_stream_wrap,
  1748. #endif
  1749. chacha20_setkey_wrap,
  1750. #if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
  1751. chacha20_setkey_wrap,
  1752. #endif
  1753. chacha20_ctx_alloc,
  1754. chacha20_ctx_free
  1755. };
  1756. static const mbedtls_cipher_info_t chacha20_info = {
  1757. "CHACHA20",
  1758. 1,
  1759. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  1760. 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1761. MBEDTLS_MODE_STREAM,
  1762. MBEDTLS_CIPHER_CHACHA20,
  1763. 0,
  1764. MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE
  1765. };
  1766. #endif /* MBEDTLS_CHACHA20_C */
  1767. #if defined(MBEDTLS_CHACHAPOLY_C)
  1768. static int chachapoly_setkey_wrap(void *ctx,
  1769. const unsigned char *key,
  1770. unsigned int key_bitlen)
  1771. {
  1772. if (key_bitlen != 256U) {
  1773. return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
  1774. }
  1775. if (0 != mbedtls_chachapoly_setkey((mbedtls_chachapoly_context *) ctx, key)) {
  1776. return MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA;
  1777. }
  1778. return 0;
  1779. }
  1780. static void *chachapoly_ctx_alloc(void)
  1781. {
  1782. mbedtls_chachapoly_context *ctx;
  1783. ctx = mbedtls_calloc(1, sizeof(mbedtls_chachapoly_context));
  1784. if (ctx == NULL) {
  1785. return NULL;
  1786. }
  1787. mbedtls_chachapoly_init(ctx);
  1788. return ctx;
  1789. }
  1790. static void chachapoly_ctx_free(void *ctx)
  1791. {
  1792. mbedtls_chachapoly_free((mbedtls_chachapoly_context *) ctx);
  1793. mbedtls_free(ctx);
  1794. }
  1795. static const mbedtls_cipher_base_t chachapoly_base_info = {
  1796. MBEDTLS_CIPHER_ID_CHACHA20,
  1797. NULL,
  1798. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  1799. NULL,
  1800. #endif
  1801. #if defined(MBEDTLS_CIPHER_MODE_CFB)
  1802. NULL,
  1803. #endif
  1804. #if defined(MBEDTLS_CIPHER_MODE_OFB)
  1805. NULL,
  1806. #endif
  1807. #if defined(MBEDTLS_CIPHER_MODE_CTR)
  1808. NULL,
  1809. #endif
  1810. #if defined(MBEDTLS_CIPHER_MODE_XTS)
  1811. NULL,
  1812. #endif
  1813. #if defined(MBEDTLS_CIPHER_MODE_STREAM)
  1814. NULL,
  1815. #endif
  1816. chachapoly_setkey_wrap,
  1817. #if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
  1818. chachapoly_setkey_wrap,
  1819. #endif
  1820. chachapoly_ctx_alloc,
  1821. chachapoly_ctx_free
  1822. };
  1823. static const mbedtls_cipher_info_t chachapoly_info = {
  1824. "CHACHA20-POLY1305",
  1825. 1,
  1826. 12 >> MBEDTLS_IV_SIZE_SHIFT,
  1827. 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1828. MBEDTLS_MODE_CHACHAPOLY,
  1829. MBEDTLS_CIPHER_CHACHA20_POLY1305,
  1830. 0,
  1831. MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE
  1832. };
  1833. #endif /* MBEDTLS_CHACHAPOLY_C */
  1834. #if defined(MBEDTLS_CIPHER_NULL_CIPHER)
  1835. static int null_crypt_stream(void *ctx, size_t length,
  1836. const unsigned char *input,
  1837. unsigned char *output)
  1838. {
  1839. ((void) ctx);
  1840. memmove(output, input, length);
  1841. return 0;
  1842. }
  1843. static int null_setkey(void *ctx, const unsigned char *key,
  1844. unsigned int key_bitlen)
  1845. {
  1846. ((void) ctx);
  1847. ((void) key);
  1848. ((void) key_bitlen);
  1849. return 0;
  1850. }
  1851. static void *null_ctx_alloc(void)
  1852. {
  1853. return (void *) 1;
  1854. }
  1855. static void null_ctx_free(void *ctx)
  1856. {
  1857. ((void) ctx);
  1858. }
  1859. static const mbedtls_cipher_base_t null_base_info = {
  1860. MBEDTLS_CIPHER_ID_NULL,
  1861. NULL,
  1862. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  1863. NULL,
  1864. #endif
  1865. #if defined(MBEDTLS_CIPHER_MODE_CFB)
  1866. NULL,
  1867. #endif
  1868. #if defined(MBEDTLS_CIPHER_MODE_OFB)
  1869. NULL,
  1870. #endif
  1871. #if defined(MBEDTLS_CIPHER_MODE_CTR)
  1872. NULL,
  1873. #endif
  1874. #if defined(MBEDTLS_CIPHER_MODE_XTS)
  1875. NULL,
  1876. #endif
  1877. #if defined(MBEDTLS_CIPHER_MODE_STREAM)
  1878. null_crypt_stream,
  1879. #endif
  1880. null_setkey,
  1881. #if !defined(MBEDTLS_BLOCK_CIPHER_NO_DECRYPT)
  1882. null_setkey,
  1883. #endif
  1884. null_ctx_alloc,
  1885. null_ctx_free
  1886. };
  1887. static const mbedtls_cipher_info_t null_cipher_info = {
  1888. "NULL",
  1889. 1,
  1890. 0 >> MBEDTLS_IV_SIZE_SHIFT,
  1891. 0 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1892. MBEDTLS_MODE_STREAM,
  1893. MBEDTLS_CIPHER_NULL,
  1894. 0,
  1895. MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE
  1896. };
  1897. #endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
  1898. #if defined(MBEDTLS_NIST_KW_C)
  1899. static void *kw_ctx_alloc(void)
  1900. {
  1901. void *ctx = mbedtls_calloc(1, sizeof(mbedtls_nist_kw_context));
  1902. if (ctx != NULL) {
  1903. mbedtls_nist_kw_init((mbedtls_nist_kw_context *) ctx);
  1904. }
  1905. return ctx;
  1906. }
  1907. static void kw_ctx_free(void *ctx)
  1908. {
  1909. mbedtls_nist_kw_free(ctx);
  1910. mbedtls_free(ctx);
  1911. }
  1912. static int kw_aes_setkey_wrap(void *ctx, const unsigned char *key,
  1913. unsigned int key_bitlen)
  1914. {
  1915. return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
  1916. MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 1);
  1917. }
  1918. static int kw_aes_setkey_unwrap(void *ctx, const unsigned char *key,
  1919. unsigned int key_bitlen)
  1920. {
  1921. return mbedtls_nist_kw_setkey((mbedtls_nist_kw_context *) ctx,
  1922. MBEDTLS_CIPHER_ID_AES, key, key_bitlen, 0);
  1923. }
  1924. static const mbedtls_cipher_base_t kw_aes_info = {
  1925. MBEDTLS_CIPHER_ID_AES,
  1926. NULL,
  1927. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  1928. NULL,
  1929. #endif
  1930. #if defined(MBEDTLS_CIPHER_MODE_CFB)
  1931. NULL,
  1932. #endif
  1933. #if defined(MBEDTLS_CIPHER_MODE_OFB)
  1934. NULL,
  1935. #endif
  1936. #if defined(MBEDTLS_CIPHER_MODE_CTR)
  1937. NULL,
  1938. #endif
  1939. #if defined(MBEDTLS_CIPHER_MODE_XTS)
  1940. NULL,
  1941. #endif
  1942. #if defined(MBEDTLS_CIPHER_MODE_STREAM)
  1943. NULL,
  1944. #endif
  1945. kw_aes_setkey_wrap,
  1946. kw_aes_setkey_unwrap,
  1947. kw_ctx_alloc,
  1948. kw_ctx_free,
  1949. };
  1950. static const mbedtls_cipher_info_t aes_128_nist_kw_info = {
  1951. "AES-128-KW",
  1952. 16,
  1953. 0 >> MBEDTLS_IV_SIZE_SHIFT,
  1954. 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1955. MBEDTLS_MODE_KW,
  1956. MBEDTLS_CIPHER_AES_128_KW,
  1957. 0,
  1958. MBEDTLS_CIPHER_BASE_INDEX_KW_AES
  1959. };
  1960. #if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
  1961. static const mbedtls_cipher_info_t aes_192_nist_kw_info = {
  1962. "AES-192-KW",
  1963. 16,
  1964. 0 >> MBEDTLS_IV_SIZE_SHIFT,
  1965. 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1966. MBEDTLS_MODE_KW,
  1967. MBEDTLS_CIPHER_AES_192_KW,
  1968. 0,
  1969. MBEDTLS_CIPHER_BASE_INDEX_KW_AES
  1970. };
  1971. static const mbedtls_cipher_info_t aes_256_nist_kw_info = {
  1972. "AES-256-KW",
  1973. 16,
  1974. 0 >> MBEDTLS_IV_SIZE_SHIFT,
  1975. 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1976. MBEDTLS_MODE_KW,
  1977. MBEDTLS_CIPHER_AES_256_KW,
  1978. 0,
  1979. MBEDTLS_CIPHER_BASE_INDEX_KW_AES
  1980. };
  1981. #endif
  1982. static const mbedtls_cipher_info_t aes_128_nist_kwp_info = {
  1983. "AES-128-KWP",
  1984. 16,
  1985. 0 >> MBEDTLS_IV_SIZE_SHIFT,
  1986. 128 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1987. MBEDTLS_MODE_KWP,
  1988. MBEDTLS_CIPHER_AES_128_KWP,
  1989. 0,
  1990. MBEDTLS_CIPHER_BASE_INDEX_KW_AES
  1991. };
  1992. #if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
  1993. static const mbedtls_cipher_info_t aes_192_nist_kwp_info = {
  1994. "AES-192-KWP",
  1995. 16,
  1996. 0 >> MBEDTLS_IV_SIZE_SHIFT,
  1997. 192 >> MBEDTLS_KEY_BITLEN_SHIFT,
  1998. MBEDTLS_MODE_KWP,
  1999. MBEDTLS_CIPHER_AES_192_KWP,
  2000. 0,
  2001. MBEDTLS_CIPHER_BASE_INDEX_KW_AES
  2002. };
  2003. static const mbedtls_cipher_info_t aes_256_nist_kwp_info = {
  2004. "AES-256-KWP",
  2005. 16,
  2006. 0 >> MBEDTLS_IV_SIZE_SHIFT,
  2007. 256 >> MBEDTLS_KEY_BITLEN_SHIFT,
  2008. MBEDTLS_MODE_KWP,
  2009. MBEDTLS_CIPHER_AES_256_KWP,
  2010. 0,
  2011. MBEDTLS_CIPHER_BASE_INDEX_KW_AES
  2012. };
  2013. #endif
  2014. #endif /* MBEDTLS_NIST_KW_C */
  2015. const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] =
  2016. {
  2017. #if defined(MBEDTLS_AES_C)
  2018. { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info },
  2019. #if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
  2020. { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info },
  2021. { MBEDTLS_CIPHER_AES_256_ECB, &aes_256_ecb_info },
  2022. #endif
  2023. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  2024. { MBEDTLS_CIPHER_AES_128_CBC, &aes_128_cbc_info },
  2025. #if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
  2026. { MBEDTLS_CIPHER_AES_192_CBC, &aes_192_cbc_info },
  2027. { MBEDTLS_CIPHER_AES_256_CBC, &aes_256_cbc_info },
  2028. #endif
  2029. #endif
  2030. #if defined(MBEDTLS_CIPHER_MODE_CFB)
  2031. { MBEDTLS_CIPHER_AES_128_CFB128, &aes_128_cfb128_info },
  2032. #if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
  2033. { MBEDTLS_CIPHER_AES_192_CFB128, &aes_192_cfb128_info },
  2034. { MBEDTLS_CIPHER_AES_256_CFB128, &aes_256_cfb128_info },
  2035. #endif
  2036. #endif
  2037. #if defined(MBEDTLS_CIPHER_MODE_OFB)
  2038. { MBEDTLS_CIPHER_AES_128_OFB, &aes_128_ofb_info },
  2039. #if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
  2040. { MBEDTLS_CIPHER_AES_192_OFB, &aes_192_ofb_info },
  2041. { MBEDTLS_CIPHER_AES_256_OFB, &aes_256_ofb_info },
  2042. #endif
  2043. #endif
  2044. #if defined(MBEDTLS_CIPHER_MODE_CTR)
  2045. { MBEDTLS_CIPHER_AES_128_CTR, &aes_128_ctr_info },
  2046. #if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
  2047. { MBEDTLS_CIPHER_AES_192_CTR, &aes_192_ctr_info },
  2048. { MBEDTLS_CIPHER_AES_256_CTR, &aes_256_ctr_info },
  2049. #endif
  2050. #endif
  2051. #if defined(MBEDTLS_CIPHER_MODE_XTS)
  2052. { MBEDTLS_CIPHER_AES_128_XTS, &aes_128_xts_info },
  2053. #if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
  2054. { MBEDTLS_CIPHER_AES_256_XTS, &aes_256_xts_info },
  2055. #endif
  2056. #endif
  2057. #endif /* MBEDTLS_AES_C */
  2058. #if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)
  2059. { MBEDTLS_CIPHER_AES_128_GCM, &aes_128_gcm_info },
  2060. #if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
  2061. { MBEDTLS_CIPHER_AES_192_GCM, &aes_192_gcm_info },
  2062. { MBEDTLS_CIPHER_AES_256_GCM, &aes_256_gcm_info },
  2063. #endif
  2064. #endif
  2065. #if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)
  2066. { MBEDTLS_CIPHER_AES_128_CCM, &aes_128_ccm_info },
  2067. #if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
  2068. { MBEDTLS_CIPHER_AES_192_CCM, &aes_192_ccm_info },
  2069. { MBEDTLS_CIPHER_AES_256_CCM, &aes_256_ccm_info },
  2070. #endif
  2071. #endif
  2072. #if defined(MBEDTLS_CIPHER_HAVE_CCM_STAR_NO_TAG_AES_VIA_LEGACY_OR_USE_PSA)
  2073. { MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG, &aes_128_ccm_star_no_tag_info },
  2074. #if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
  2075. { MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG, &aes_192_ccm_star_no_tag_info },
  2076. { MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG, &aes_256_ccm_star_no_tag_info },
  2077. #endif
  2078. #endif
  2079. #if defined(MBEDTLS_CAMELLIA_C)
  2080. { MBEDTLS_CIPHER_CAMELLIA_128_ECB, &camellia_128_ecb_info },
  2081. { MBEDTLS_CIPHER_CAMELLIA_192_ECB, &camellia_192_ecb_info },
  2082. { MBEDTLS_CIPHER_CAMELLIA_256_ECB, &camellia_256_ecb_info },
  2083. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  2084. { MBEDTLS_CIPHER_CAMELLIA_128_CBC, &camellia_128_cbc_info },
  2085. { MBEDTLS_CIPHER_CAMELLIA_192_CBC, &camellia_192_cbc_info },
  2086. { MBEDTLS_CIPHER_CAMELLIA_256_CBC, &camellia_256_cbc_info },
  2087. #endif
  2088. #if defined(MBEDTLS_CIPHER_MODE_CFB)
  2089. { MBEDTLS_CIPHER_CAMELLIA_128_CFB128, &camellia_128_cfb128_info },
  2090. { MBEDTLS_CIPHER_CAMELLIA_192_CFB128, &camellia_192_cfb128_info },
  2091. { MBEDTLS_CIPHER_CAMELLIA_256_CFB128, &camellia_256_cfb128_info },
  2092. #endif
  2093. #if defined(MBEDTLS_CIPHER_MODE_CTR)
  2094. { MBEDTLS_CIPHER_CAMELLIA_128_CTR, &camellia_128_ctr_info },
  2095. { MBEDTLS_CIPHER_CAMELLIA_192_CTR, &camellia_192_ctr_info },
  2096. { MBEDTLS_CIPHER_CAMELLIA_256_CTR, &camellia_256_ctr_info },
  2097. #endif
  2098. #if defined(MBEDTLS_GCM_C)
  2099. { MBEDTLS_CIPHER_CAMELLIA_128_GCM, &camellia_128_gcm_info },
  2100. { MBEDTLS_CIPHER_CAMELLIA_192_GCM, &camellia_192_gcm_info },
  2101. { MBEDTLS_CIPHER_CAMELLIA_256_GCM, &camellia_256_gcm_info },
  2102. #endif
  2103. #if defined(MBEDTLS_CCM_C)
  2104. { MBEDTLS_CIPHER_CAMELLIA_128_CCM, &camellia_128_ccm_info },
  2105. { MBEDTLS_CIPHER_CAMELLIA_192_CCM, &camellia_192_ccm_info },
  2106. { MBEDTLS_CIPHER_CAMELLIA_256_CCM, &camellia_256_ccm_info },
  2107. { MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG, &camellia_128_ccm_star_no_tag_info },
  2108. { MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG, &camellia_192_ccm_star_no_tag_info },
  2109. { MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG, &camellia_256_ccm_star_no_tag_info },
  2110. #endif
  2111. #endif /* MBEDTLS_CAMELLIA_C */
  2112. #if defined(MBEDTLS_ARIA_C)
  2113. { MBEDTLS_CIPHER_ARIA_128_ECB, &aria_128_ecb_info },
  2114. { MBEDTLS_CIPHER_ARIA_192_ECB, &aria_192_ecb_info },
  2115. { MBEDTLS_CIPHER_ARIA_256_ECB, &aria_256_ecb_info },
  2116. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  2117. { MBEDTLS_CIPHER_ARIA_128_CBC, &aria_128_cbc_info },
  2118. { MBEDTLS_CIPHER_ARIA_192_CBC, &aria_192_cbc_info },
  2119. { MBEDTLS_CIPHER_ARIA_256_CBC, &aria_256_cbc_info },
  2120. #endif
  2121. #if defined(MBEDTLS_CIPHER_MODE_CFB)
  2122. { MBEDTLS_CIPHER_ARIA_128_CFB128, &aria_128_cfb128_info },
  2123. { MBEDTLS_CIPHER_ARIA_192_CFB128, &aria_192_cfb128_info },
  2124. { MBEDTLS_CIPHER_ARIA_256_CFB128, &aria_256_cfb128_info },
  2125. #endif
  2126. #if defined(MBEDTLS_CIPHER_MODE_CTR)
  2127. { MBEDTLS_CIPHER_ARIA_128_CTR, &aria_128_ctr_info },
  2128. { MBEDTLS_CIPHER_ARIA_192_CTR, &aria_192_ctr_info },
  2129. { MBEDTLS_CIPHER_ARIA_256_CTR, &aria_256_ctr_info },
  2130. #endif
  2131. #if defined(MBEDTLS_GCM_C)
  2132. { MBEDTLS_CIPHER_ARIA_128_GCM, &aria_128_gcm_info },
  2133. { MBEDTLS_CIPHER_ARIA_192_GCM, &aria_192_gcm_info },
  2134. { MBEDTLS_CIPHER_ARIA_256_GCM, &aria_256_gcm_info },
  2135. #endif
  2136. #if defined(MBEDTLS_CCM_C)
  2137. { MBEDTLS_CIPHER_ARIA_128_CCM, &aria_128_ccm_info },
  2138. { MBEDTLS_CIPHER_ARIA_192_CCM, &aria_192_ccm_info },
  2139. { MBEDTLS_CIPHER_ARIA_256_CCM, &aria_256_ccm_info },
  2140. { MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG, &aria_128_ccm_star_no_tag_info },
  2141. { MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG, &aria_192_ccm_star_no_tag_info },
  2142. { MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG, &aria_256_ccm_star_no_tag_info },
  2143. #endif
  2144. #endif /* MBEDTLS_ARIA_C */
  2145. #if defined(MBEDTLS_DES_C)
  2146. { MBEDTLS_CIPHER_DES_ECB, &des_ecb_info },
  2147. { MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info },
  2148. { MBEDTLS_CIPHER_DES_EDE3_ECB, &des_ede3_ecb_info },
  2149. #if defined(MBEDTLS_CIPHER_MODE_CBC)
  2150. { MBEDTLS_CIPHER_DES_CBC, &des_cbc_info },
  2151. { MBEDTLS_CIPHER_DES_EDE_CBC, &des_ede_cbc_info },
  2152. { MBEDTLS_CIPHER_DES_EDE3_CBC, &des_ede3_cbc_info },
  2153. #endif
  2154. #endif /* MBEDTLS_DES_C */
  2155. #if defined(MBEDTLS_CHACHA20_C)
  2156. { MBEDTLS_CIPHER_CHACHA20, &chacha20_info },
  2157. #endif
  2158. #if defined(MBEDTLS_CHACHAPOLY_C)
  2159. { MBEDTLS_CIPHER_CHACHA20_POLY1305, &chachapoly_info },
  2160. #endif
  2161. #if defined(MBEDTLS_NIST_KW_C)
  2162. { MBEDTLS_CIPHER_AES_128_KW, &aes_128_nist_kw_info },
  2163. #if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
  2164. { MBEDTLS_CIPHER_AES_192_KW, &aes_192_nist_kw_info },
  2165. { MBEDTLS_CIPHER_AES_256_KW, &aes_256_nist_kw_info },
  2166. #endif
  2167. { MBEDTLS_CIPHER_AES_128_KWP, &aes_128_nist_kwp_info },
  2168. #if !defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
  2169. { MBEDTLS_CIPHER_AES_192_KWP, &aes_192_nist_kwp_info },
  2170. { MBEDTLS_CIPHER_AES_256_KWP, &aes_256_nist_kwp_info },
  2171. #endif
  2172. #endif
  2173. #if defined(MBEDTLS_CIPHER_NULL_CIPHER)
  2174. { MBEDTLS_CIPHER_NULL, &null_cipher_info },
  2175. #endif /* MBEDTLS_CIPHER_NULL_CIPHER */
  2176. { MBEDTLS_CIPHER_NONE, NULL }
  2177. };
  2178. #define NUM_CIPHERS (sizeof(mbedtls_cipher_definitions) / \
  2179. sizeof(mbedtls_cipher_definitions[0]))
  2180. int mbedtls_cipher_supported[NUM_CIPHERS];
  2181. const mbedtls_cipher_base_t *mbedtls_cipher_base_lookup_table[] = {
  2182. #if defined(MBEDTLS_AES_C)
  2183. [MBEDTLS_CIPHER_BASE_INDEX_AES] = &aes_info,
  2184. #endif
  2185. #if defined(MBEDTLS_ARIA_C)
  2186. [MBEDTLS_CIPHER_BASE_INDEX_ARIA] = &aria_info,
  2187. #endif
  2188. #if defined(MBEDTLS_CAMELLIA_C)
  2189. [MBEDTLS_CIPHER_BASE_INDEX_CAMELLIA] = &camellia_info,
  2190. #endif
  2191. #if defined(MBEDTLS_CIPHER_HAVE_CCM_AES_VIA_LEGACY_OR_USE_PSA)
  2192. [MBEDTLS_CIPHER_BASE_INDEX_CCM_AES] = &ccm_aes_info,
  2193. #endif
  2194. #if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_ARIA_C)
  2195. [MBEDTLS_CIPHER_BASE_INDEX_CCM_ARIA] = &ccm_aria_info,
  2196. #endif
  2197. #if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CAMELLIA_C)
  2198. [MBEDTLS_CIPHER_BASE_INDEX_CCM_CAMELLIA] = &ccm_camellia_info,
  2199. #endif
  2200. #if defined(MBEDTLS_CHACHA20_C)
  2201. [MBEDTLS_CIPHER_BASE_INDEX_CHACHA20_BASE] = &chacha20_base_info,
  2202. #endif
  2203. #if defined(MBEDTLS_CHACHAPOLY_C)
  2204. [MBEDTLS_CIPHER_BASE_INDEX_CHACHAPOLY_BASE] = &chachapoly_base_info,
  2205. #endif
  2206. #if defined(MBEDTLS_DES_C)
  2207. [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE3] = &des_ede3_info,
  2208. #endif
  2209. #if defined(MBEDTLS_DES_C)
  2210. [MBEDTLS_CIPHER_BASE_INDEX_DES_EDE] = &des_ede_info,
  2211. #endif
  2212. #if defined(MBEDTLS_DES_C)
  2213. [MBEDTLS_CIPHER_BASE_INDEX_DES] = &des_info,
  2214. #endif
  2215. #if defined(MBEDTLS_CIPHER_HAVE_GCM_AES_VIA_LEGACY_OR_USE_PSA)
  2216. [MBEDTLS_CIPHER_BASE_INDEX_GCM_AES] = &gcm_aes_info,
  2217. #endif
  2218. #if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_ARIA_C)
  2219. [MBEDTLS_CIPHER_BASE_INDEX_GCM_ARIA] = &gcm_aria_info,
  2220. #endif
  2221. #if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CAMELLIA_C)
  2222. [MBEDTLS_CIPHER_BASE_INDEX_GCM_CAMELLIA] = &gcm_camellia_info,
  2223. #endif
  2224. #if defined(MBEDTLS_NIST_KW_C)
  2225. [MBEDTLS_CIPHER_BASE_INDEX_KW_AES] = &kw_aes_info,
  2226. #endif
  2227. #if defined(MBEDTLS_CIPHER_NULL_CIPHER)
  2228. [MBEDTLS_CIPHER_BASE_INDEX_NULL_BASE] = &null_base_info,
  2229. #endif
  2230. #if defined(MBEDTLS_CIPHER_MODE_XTS) && defined(MBEDTLS_AES_C)
  2231. [MBEDTLS_CIPHER_BASE_INDEX_XTS_AES] = &xts_aes_info
  2232. #endif
  2233. };
  2234. #endif /* MBEDTLS_CIPHER_C */