ssl_tls13_client.c 105 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186
  1. /*
  2. * TLS 1.3 client-side functions
  3. *
  4. * Copyright The Mbed TLS Contributors
  5. * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
  6. */
  7. #include "common.h"
  8. #if defined(MBEDTLS_SSL_CLI_C) && defined(MBEDTLS_SSL_PROTO_TLS1_3)
  9. #include <string.h>
  10. #include "debug_internal.h"
  11. #include "mbedtls/error.h"
  12. #include "mbedtls/platform.h"
  13. #include "ssl_misc.h"
  14. #include "ssl_client.h"
  15. #include "ssl_tls13_keys.h"
  16. #include "ssl_debug_helpers.h"
  17. #include "mbedtls/psa_util.h"
  18. #if defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_EPHEMERAL_ENABLED)
  19. /* Define a local translating function to save code size by not using too many
  20. * arguments in each translating place. */
  21. static int local_err_translation(psa_status_t status)
  22. {
  23. return psa_status_to_mbedtls(status, psa_to_ssl_errors,
  24. ARRAY_LENGTH(psa_to_ssl_errors),
  25. psa_generic_status_to_mbedtls);
  26. }
  27. #define PSA_TO_MBEDTLS_ERR(status) local_err_translation(status)
  28. #endif
  29. /* Write extensions */
  30. /*
  31. * ssl_tls13_write_supported_versions_ext():
  32. *
  33. * struct {
  34. * ProtocolVersion versions<2..254>;
  35. * } SupportedVersions;
  36. */
  37. MBEDTLS_CHECK_RETURN_CRITICAL
  38. static int ssl_tls13_write_supported_versions_ext(mbedtls_ssl_context *ssl,
  39. unsigned char *buf,
  40. unsigned char *end,
  41. size_t *out_len)
  42. {
  43. unsigned char *p = buf;
  44. unsigned char versions_len = (ssl->handshake->min_tls_version <=
  45. MBEDTLS_SSL_VERSION_TLS1_2) ? 4 : 2;
  46. *out_len = 0;
  47. MBEDTLS_SSL_DEBUG_MSG(3, ("client hello, adding supported versions extension"));
  48. /* Check if we have space to write the extension:
  49. * - extension_type (2 bytes)
  50. * - extension_data_length (2 bytes)
  51. * - versions_length (1 byte )
  52. * - versions (2 or 4 bytes)
  53. */
  54. MBEDTLS_SSL_CHK_BUF_PTR(p, end, 5 + versions_len);
  55. MBEDTLS_PUT_UINT16_BE(MBEDTLS_TLS_EXT_SUPPORTED_VERSIONS, p, 0);
  56. MBEDTLS_PUT_UINT16_BE(versions_len + 1, p, 2);
  57. p += 4;
  58. /* Length of versions */
  59. *p++ = versions_len;
  60. /* Write values of supported versions.
  61. * They are defined by the configuration.
  62. * Currently, we advertise only TLS 1.3 or both TLS 1.3 and TLS 1.2.
  63. */
  64. mbedtls_ssl_write_version(p, MBEDTLS_SSL_TRANSPORT_STREAM,
  65. MBEDTLS_SSL_VERSION_TLS1_3);
  66. MBEDTLS_SSL_DEBUG_MSG(3, ("supported version: [3:4]"));
  67. if (ssl->handshake->min_tls_version <= MBEDTLS_SSL_VERSION_TLS1_2) {
  68. mbedtls_ssl_write_version(p + 2, MBEDTLS_SSL_TRANSPORT_STREAM,
  69. MBEDTLS_SSL_VERSION_TLS1_2);
  70. MBEDTLS_SSL_DEBUG_MSG(3, ("supported version: [3:3]"));
  71. }
  72. *out_len = 5 + versions_len;
  73. mbedtls_ssl_tls13_set_hs_sent_ext_mask(
  74. ssl, MBEDTLS_TLS_EXT_SUPPORTED_VERSIONS);
  75. return 0;
  76. }
  77. MBEDTLS_CHECK_RETURN_CRITICAL
  78. static int ssl_tls13_parse_supported_versions_ext(mbedtls_ssl_context *ssl,
  79. const unsigned char *buf,
  80. const unsigned char *end)
  81. {
  82. ((void) ssl);
  83. MBEDTLS_SSL_CHK_BUF_READ_PTR(buf, end, 2);
  84. if (mbedtls_ssl_read_version(buf, ssl->conf->transport) !=
  85. MBEDTLS_SSL_VERSION_TLS1_3) {
  86. MBEDTLS_SSL_DEBUG_MSG(1, ("unexpected version"));
  87. MBEDTLS_SSL_PEND_FATAL_ALERT(MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER,
  88. MBEDTLS_ERR_SSL_ILLEGAL_PARAMETER);
  89. return MBEDTLS_ERR_SSL_ILLEGAL_PARAMETER;
  90. }
  91. if (&buf[2] != end) {
  92. MBEDTLS_SSL_DEBUG_MSG(
  93. 1, ("supported_versions ext data length incorrect"));
  94. MBEDTLS_SSL_PEND_FATAL_ALERT(MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR,
  95. MBEDTLS_ERR_SSL_DECODE_ERROR);
  96. return MBEDTLS_ERR_SSL_DECODE_ERROR;
  97. }
  98. return 0;
  99. }
  100. #if defined(MBEDTLS_SSL_ALPN)
  101. MBEDTLS_CHECK_RETURN_CRITICAL
  102. static int ssl_tls13_parse_alpn_ext(mbedtls_ssl_context *ssl,
  103. const unsigned char *buf, size_t len)
  104. {
  105. const unsigned char *p = buf;
  106. const unsigned char *end = buf + len;
  107. size_t protocol_name_list_len, protocol_name_len;
  108. const unsigned char *protocol_name_list_end;
  109. /* If we didn't send it, the server shouldn't send it */
  110. if (ssl->conf->alpn_list == NULL) {
  111. return MBEDTLS_ERR_SSL_BAD_INPUT_DATA;
  112. }
  113. /*
  114. * opaque ProtocolName<1..2^8-1>;
  115. *
  116. * struct {
  117. * ProtocolName protocol_name_list<2..2^16-1>
  118. * } ProtocolNameList;
  119. *
  120. * the "ProtocolNameList" MUST contain exactly one "ProtocolName"
  121. */
  122. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, 2);
  123. protocol_name_list_len = MBEDTLS_GET_UINT16_BE(p, 0);
  124. p += 2;
  125. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, protocol_name_list_len);
  126. protocol_name_list_end = p + protocol_name_list_len;
  127. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, protocol_name_list_end, 1);
  128. protocol_name_len = *p++;
  129. /* Check that the server chosen protocol was in our list and save it */
  130. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, protocol_name_list_end, protocol_name_len);
  131. for (const char **alpn = ssl->conf->alpn_list; *alpn != NULL; alpn++) {
  132. if (protocol_name_len == strlen(*alpn) &&
  133. memcmp(p, *alpn, protocol_name_len) == 0) {
  134. ssl->alpn_chosen = *alpn;
  135. return 0;
  136. }
  137. }
  138. return MBEDTLS_ERR_SSL_BAD_INPUT_DATA;
  139. }
  140. #endif /* MBEDTLS_SSL_ALPN */
  141. MBEDTLS_CHECK_RETURN_CRITICAL
  142. static int ssl_tls13_reset_key_share(mbedtls_ssl_context *ssl)
  143. {
  144. uint16_t group_id = ssl->handshake->offered_group_id;
  145. if (group_id == 0) {
  146. return MBEDTLS_ERR_SSL_INTERNAL_ERROR;
  147. }
  148. #if defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_EPHEMERAL_ENABLED)
  149. if (mbedtls_ssl_tls13_named_group_is_ecdhe(group_id) ||
  150. mbedtls_ssl_tls13_named_group_is_ffdh(group_id)) {
  151. int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
  152. psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
  153. /* Destroy generated private key. */
  154. status = psa_destroy_key(ssl->handshake->xxdh_psa_privkey);
  155. if (status != PSA_SUCCESS) {
  156. ret = PSA_TO_MBEDTLS_ERR(status);
  157. MBEDTLS_SSL_DEBUG_RET(1, "psa_destroy_key", ret);
  158. return ret;
  159. }
  160. ssl->handshake->xxdh_psa_privkey = MBEDTLS_SVC_KEY_ID_INIT;
  161. return 0;
  162. } else
  163. #endif /* MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_EPHEMERAL_ENABLED */
  164. if (0 /* other KEMs? */) {
  165. /* Do something */
  166. }
  167. return MBEDTLS_ERR_SSL_INTERNAL_ERROR;
  168. }
  169. /*
  170. * Functions for writing key_share extension.
  171. */
  172. #if defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_EPHEMERAL_ENABLED)
  173. MBEDTLS_CHECK_RETURN_CRITICAL
  174. static int ssl_tls13_get_default_group_id(mbedtls_ssl_context *ssl,
  175. uint16_t *group_id)
  176. {
  177. int ret = MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE;
  178. #if defined(PSA_WANT_ALG_ECDH) || defined(PSA_WANT_ALG_FFDH)
  179. const uint16_t *group_list = mbedtls_ssl_get_groups(ssl);
  180. /* Pick first available ECDHE group compatible with TLS 1.3 */
  181. if (group_list == NULL) {
  182. return MBEDTLS_ERR_SSL_BAD_CONFIG;
  183. }
  184. for (; *group_list != 0; group_list++) {
  185. #if defined(PSA_WANT_ALG_ECDH)
  186. if ((mbedtls_ssl_get_psa_curve_info_from_tls_id(
  187. *group_list, NULL, NULL) == PSA_SUCCESS) &&
  188. mbedtls_ssl_tls13_named_group_is_ecdhe(*group_list)) {
  189. *group_id = *group_list;
  190. return 0;
  191. }
  192. #endif
  193. #if defined(PSA_WANT_ALG_FFDH)
  194. if (mbedtls_ssl_tls13_named_group_is_ffdh(*group_list)) {
  195. *group_id = *group_list;
  196. return 0;
  197. }
  198. #endif
  199. }
  200. #else
  201. ((void) ssl);
  202. ((void) group_id);
  203. #endif /* PSA_WANT_ALG_ECDH || PSA_WANT_ALG_FFDH */
  204. return ret;
  205. }
  206. /*
  207. * ssl_tls13_write_key_share_ext
  208. *
  209. * Structure of key_share extension in ClientHello:
  210. *
  211. * struct {
  212. * NamedGroup group;
  213. * opaque key_exchange<1..2^16-1>;
  214. * } KeyShareEntry;
  215. * struct {
  216. * KeyShareEntry client_shares<0..2^16-1>;
  217. * } KeyShareClientHello;
  218. */
  219. MBEDTLS_CHECK_RETURN_CRITICAL
  220. static int ssl_tls13_write_key_share_ext(mbedtls_ssl_context *ssl,
  221. unsigned char *buf,
  222. unsigned char *end,
  223. size_t *out_len)
  224. {
  225. unsigned char *p = buf;
  226. unsigned char *client_shares; /* Start of client_shares */
  227. size_t client_shares_len; /* Length of client_shares */
  228. uint16_t group_id;
  229. int ret = MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE;
  230. *out_len = 0;
  231. /* Check if we have space for header and length fields:
  232. * - extension_type (2 bytes)
  233. * - extension_data_length (2 bytes)
  234. * - client_shares_length (2 bytes)
  235. */
  236. MBEDTLS_SSL_CHK_BUF_PTR(p, end, 6);
  237. p += 6;
  238. MBEDTLS_SSL_DEBUG_MSG(3, ("client hello: adding key share extension"));
  239. /* HRR could already have requested something else. */
  240. group_id = ssl->handshake->offered_group_id;
  241. if (!mbedtls_ssl_tls13_named_group_is_ecdhe(group_id) &&
  242. !mbedtls_ssl_tls13_named_group_is_ffdh(group_id)) {
  243. MBEDTLS_SSL_PROC_CHK(ssl_tls13_get_default_group_id(ssl,
  244. &group_id));
  245. }
  246. /*
  247. * Dispatch to type-specific key generation function.
  248. *
  249. * So far, we're only supporting ECDHE. With the introduction
  250. * of PQC KEMs, we'll want to have multiple branches, one per
  251. * type of KEM, and dispatch to the corresponding crypto. And
  252. * only one key share entry is allowed.
  253. */
  254. client_shares = p;
  255. #if defined(PSA_WANT_ALG_ECDH) || defined(PSA_WANT_ALG_FFDH)
  256. if (mbedtls_ssl_tls13_named_group_is_ecdhe(group_id) ||
  257. mbedtls_ssl_tls13_named_group_is_ffdh(group_id)) {
  258. /* Pointer to group */
  259. unsigned char *group = p;
  260. /* Length of key_exchange */
  261. size_t key_exchange_len = 0;
  262. /* Check there is space for header of KeyShareEntry
  263. * - group (2 bytes)
  264. * - key_exchange_length (2 bytes)
  265. */
  266. MBEDTLS_SSL_CHK_BUF_PTR(p, end, 4);
  267. p += 4;
  268. ret = mbedtls_ssl_tls13_generate_and_write_xxdh_key_exchange(
  269. ssl, group_id, p, end, &key_exchange_len);
  270. p += key_exchange_len;
  271. if (ret != 0) {
  272. return ret;
  273. }
  274. /* Write group */
  275. MBEDTLS_PUT_UINT16_BE(group_id, group, 0);
  276. /* Write key_exchange_length */
  277. MBEDTLS_PUT_UINT16_BE(key_exchange_len, group, 2);
  278. } else
  279. #endif /* PSA_WANT_ALG_ECDH || PSA_WANT_ALG_FFDH */
  280. if (0 /* other KEMs? */) {
  281. /* Do something */
  282. } else {
  283. return MBEDTLS_ERR_SSL_INTERNAL_ERROR;
  284. }
  285. /* Length of client_shares */
  286. client_shares_len = p - client_shares;
  287. if (client_shares_len == 0) {
  288. MBEDTLS_SSL_DEBUG_MSG(1, ("No key share defined."));
  289. return MBEDTLS_ERR_SSL_INTERNAL_ERROR;
  290. }
  291. /* Write extension_type */
  292. MBEDTLS_PUT_UINT16_BE(MBEDTLS_TLS_EXT_KEY_SHARE, buf, 0);
  293. /* Write extension_data_length */
  294. MBEDTLS_PUT_UINT16_BE(client_shares_len + 2, buf, 2);
  295. /* Write client_shares_length */
  296. MBEDTLS_PUT_UINT16_BE(client_shares_len, buf, 4);
  297. /* Update offered_group_id field */
  298. ssl->handshake->offered_group_id = group_id;
  299. /* Output the total length of key_share extension. */
  300. *out_len = p - buf;
  301. MBEDTLS_SSL_DEBUG_BUF(
  302. 3, "client hello, key_share extension", buf, *out_len);
  303. mbedtls_ssl_tls13_set_hs_sent_ext_mask(ssl, MBEDTLS_TLS_EXT_KEY_SHARE);
  304. cleanup:
  305. return ret;
  306. }
  307. #endif /* MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_EPHEMERAL_ENABLED */
  308. /*
  309. * ssl_tls13_parse_hrr_key_share_ext()
  310. * Parse key_share extension in Hello Retry Request
  311. *
  312. * struct {
  313. * NamedGroup selected_group;
  314. * } KeyShareHelloRetryRequest;
  315. */
  316. MBEDTLS_CHECK_RETURN_CRITICAL
  317. static int ssl_tls13_parse_hrr_key_share_ext(mbedtls_ssl_context *ssl,
  318. const unsigned char *buf,
  319. const unsigned char *end)
  320. {
  321. #if defined(PSA_WANT_ALG_ECDH) || defined(PSA_WANT_ALG_FFDH)
  322. const unsigned char *p = buf;
  323. int selected_group;
  324. int found = 0;
  325. const uint16_t *group_list = mbedtls_ssl_get_groups(ssl);
  326. if (group_list == NULL) {
  327. return MBEDTLS_ERR_SSL_BAD_CONFIG;
  328. }
  329. MBEDTLS_SSL_DEBUG_BUF(3, "key_share extension", p, end - buf);
  330. /* Read selected_group */
  331. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, 2);
  332. selected_group = MBEDTLS_GET_UINT16_BE(p, 0);
  333. MBEDTLS_SSL_DEBUG_MSG(3, ("selected_group ( %d )", selected_group));
  334. /* Upon receipt of this extension in a HelloRetryRequest, the client
  335. * MUST first verify that the selected_group field corresponds to a
  336. * group which was provided in the "supported_groups" extension in the
  337. * original ClientHello.
  338. * The supported_group was based on the info in ssl->conf->group_list.
  339. *
  340. * If the server provided a key share that was not sent in the ClientHello
  341. * then the client MUST abort the handshake with an "illegal_parameter" alert.
  342. */
  343. for (; *group_list != 0; group_list++) {
  344. #if defined(PSA_WANT_ALG_ECDH)
  345. if (mbedtls_ssl_tls13_named_group_is_ecdhe(*group_list)) {
  346. if ((mbedtls_ssl_get_psa_curve_info_from_tls_id(
  347. *group_list, NULL, NULL) == PSA_ERROR_NOT_SUPPORTED) ||
  348. *group_list != selected_group) {
  349. found = 1;
  350. break;
  351. }
  352. }
  353. #endif /* PSA_WANT_ALG_ECDH */
  354. #if defined(PSA_WANT_ALG_FFDH)
  355. if (mbedtls_ssl_tls13_named_group_is_ffdh(*group_list)) {
  356. found = 1;
  357. break;
  358. }
  359. #endif /* PSA_WANT_ALG_FFDH */
  360. }
  361. /* Client MUST verify that the selected_group field does not
  362. * correspond to a group which was provided in the "key_share"
  363. * extension in the original ClientHello. If the server sent an
  364. * HRR message with a key share already provided in the
  365. * ClientHello then the client MUST abort the handshake with
  366. * an "illegal_parameter" alert.
  367. */
  368. if (found == 0 || selected_group == ssl->handshake->offered_group_id) {
  369. MBEDTLS_SSL_DEBUG_MSG(1, ("Invalid key share in HRR"));
  370. MBEDTLS_SSL_PEND_FATAL_ALERT(
  371. MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER,
  372. MBEDTLS_ERR_SSL_ILLEGAL_PARAMETER);
  373. return MBEDTLS_ERR_SSL_ILLEGAL_PARAMETER;
  374. }
  375. /* Remember server's preference for next ClientHello */
  376. ssl->handshake->offered_group_id = selected_group;
  377. return 0;
  378. #else /* PSA_WANT_ALG_ECDH || PSA_WANT_ALG_FFDH */
  379. (void) ssl;
  380. (void) buf;
  381. (void) end;
  382. return MBEDTLS_ERR_SSL_BAD_CONFIG;
  383. #endif /* PSA_WANT_ALG_ECDH || PSA_WANT_ALG_FFDH */
  384. }
  385. /*
  386. * ssl_tls13_parse_key_share_ext()
  387. * Parse key_share extension in Server Hello
  388. *
  389. * struct {
  390. * KeyShareEntry server_share;
  391. * } KeyShareServerHello;
  392. * struct {
  393. * NamedGroup group;
  394. * opaque key_exchange<1..2^16-1>;
  395. * } KeyShareEntry;
  396. */
  397. MBEDTLS_CHECK_RETURN_CRITICAL
  398. static int ssl_tls13_parse_key_share_ext(mbedtls_ssl_context *ssl,
  399. const unsigned char *buf,
  400. const unsigned char *end)
  401. {
  402. int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
  403. const unsigned char *p = buf;
  404. uint16_t group, offered_group;
  405. /* ...
  406. * NamedGroup group; (2 bytes)
  407. * ...
  408. */
  409. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, 2);
  410. group = MBEDTLS_GET_UINT16_BE(p, 0);
  411. p += 2;
  412. /* Check that the chosen group matches the one we offered. */
  413. offered_group = ssl->handshake->offered_group_id;
  414. if (offered_group != group) {
  415. MBEDTLS_SSL_DEBUG_MSG(
  416. 1, ("Invalid server key share, our group %u, their group %u",
  417. (unsigned) offered_group, (unsigned) group));
  418. MBEDTLS_SSL_PEND_FATAL_ALERT(MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE,
  419. MBEDTLS_ERR_SSL_HANDSHAKE_FAILURE);
  420. return MBEDTLS_ERR_SSL_HANDSHAKE_FAILURE;
  421. }
  422. #if defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_EPHEMERAL_ENABLED)
  423. if (mbedtls_ssl_tls13_named_group_is_ecdhe(group) ||
  424. mbedtls_ssl_tls13_named_group_is_ffdh(group)) {
  425. MBEDTLS_SSL_DEBUG_MSG(2,
  426. ("DHE group name: %s", mbedtls_ssl_named_group_to_str(group)));
  427. ret = mbedtls_ssl_tls13_read_public_xxdhe_share(ssl, p, end - p);
  428. if (ret != 0) {
  429. return ret;
  430. }
  431. } else
  432. #endif /* MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_EPHEMERAL_ENABLED */
  433. if (0 /* other KEMs? */) {
  434. /* Do something */
  435. } else {
  436. return MBEDTLS_ERR_SSL_INTERNAL_ERROR;
  437. }
  438. return ret;
  439. }
  440. /*
  441. * ssl_tls13_parse_cookie_ext()
  442. * Parse cookie extension in Hello Retry Request
  443. *
  444. * struct {
  445. * opaque cookie<1..2^16-1>;
  446. * } Cookie;
  447. *
  448. * When sending a HelloRetryRequest, the server MAY provide a "cookie"
  449. * extension to the client (this is an exception to the usual rule that
  450. * the only extensions that may be sent are those that appear in the
  451. * ClientHello). When sending the new ClientHello, the client MUST copy
  452. * the contents of the extension received in the HelloRetryRequest into
  453. * a "cookie" extension in the new ClientHello. Clients MUST NOT use
  454. * cookies in their initial ClientHello in subsequent connections.
  455. */
  456. MBEDTLS_CHECK_RETURN_CRITICAL
  457. static int ssl_tls13_parse_cookie_ext(mbedtls_ssl_context *ssl,
  458. const unsigned char *buf,
  459. const unsigned char *end)
  460. {
  461. uint16_t cookie_len;
  462. const unsigned char *p = buf;
  463. mbedtls_ssl_handshake_params *handshake = ssl->handshake;
  464. /* Retrieve length field of cookie */
  465. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, 2);
  466. cookie_len = MBEDTLS_GET_UINT16_BE(p, 0);
  467. p += 2;
  468. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, cookie_len);
  469. MBEDTLS_SSL_DEBUG_BUF(3, "cookie extension", p, cookie_len);
  470. mbedtls_free(handshake->cookie);
  471. handshake->cookie_len = 0;
  472. handshake->cookie = mbedtls_calloc(1, cookie_len);
  473. if (handshake->cookie == NULL) {
  474. MBEDTLS_SSL_DEBUG_MSG(1,
  475. ("alloc failed ( %ud bytes )",
  476. cookie_len));
  477. return MBEDTLS_ERR_SSL_ALLOC_FAILED;
  478. }
  479. memcpy(handshake->cookie, p, cookie_len);
  480. handshake->cookie_len = cookie_len;
  481. return 0;
  482. }
  483. MBEDTLS_CHECK_RETURN_CRITICAL
  484. static int ssl_tls13_write_cookie_ext(mbedtls_ssl_context *ssl,
  485. unsigned char *buf,
  486. unsigned char *end,
  487. size_t *out_len)
  488. {
  489. unsigned char *p = buf;
  490. *out_len = 0;
  491. mbedtls_ssl_handshake_params *handshake = ssl->handshake;
  492. if (handshake->cookie == NULL) {
  493. MBEDTLS_SSL_DEBUG_MSG(3, ("no cookie to send; skip extension"));
  494. return 0;
  495. }
  496. MBEDTLS_SSL_DEBUG_BUF(3, "client hello, cookie",
  497. handshake->cookie,
  498. handshake->cookie_len);
  499. MBEDTLS_SSL_CHK_BUF_PTR(p, end, handshake->cookie_len + 6);
  500. MBEDTLS_SSL_DEBUG_MSG(3, ("client hello, adding cookie extension"));
  501. MBEDTLS_PUT_UINT16_BE(MBEDTLS_TLS_EXT_COOKIE, p, 0);
  502. MBEDTLS_PUT_UINT16_BE(handshake->cookie_len + 2, p, 2);
  503. MBEDTLS_PUT_UINT16_BE(handshake->cookie_len, p, 4);
  504. p += 6;
  505. /* Cookie */
  506. memcpy(p, handshake->cookie, handshake->cookie_len);
  507. *out_len = handshake->cookie_len + 6;
  508. mbedtls_ssl_tls13_set_hs_sent_ext_mask(ssl, MBEDTLS_TLS_EXT_COOKIE);
  509. return 0;
  510. }
  511. #if defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_PSK_ENABLED)
  512. /*
  513. * ssl_tls13_write_psk_key_exchange_modes_ext() structure:
  514. *
  515. * enum { psk_ke( 0 ), psk_dhe_ke( 1 ), ( 255 ) } PskKeyExchangeMode;
  516. *
  517. * struct {
  518. * PskKeyExchangeMode ke_modes<1..255>;
  519. * } PskKeyExchangeModes;
  520. */
  521. MBEDTLS_CHECK_RETURN_CRITICAL
  522. static int ssl_tls13_write_psk_key_exchange_modes_ext(mbedtls_ssl_context *ssl,
  523. unsigned char *buf,
  524. unsigned char *end,
  525. size_t *out_len)
  526. {
  527. unsigned char *p = buf;
  528. int ke_modes_len = 0;
  529. ((void) ke_modes_len);
  530. *out_len = 0;
  531. /* Skip writing extension if no PSK key exchange mode
  532. * is enabled in the config.
  533. */
  534. if (!mbedtls_ssl_conf_tls13_is_some_psk_enabled(ssl)) {
  535. MBEDTLS_SSL_DEBUG_MSG(3, ("skip psk_key_exchange_modes extension"));
  536. return 0;
  537. }
  538. /* Require 7 bytes of data, otherwise fail,
  539. * even if extension might be shorter.
  540. */
  541. MBEDTLS_SSL_CHK_BUF_PTR(p, end, 7);
  542. MBEDTLS_SSL_DEBUG_MSG(
  543. 3, ("client hello, adding psk_key_exchange_modes extension"));
  544. MBEDTLS_PUT_UINT16_BE(MBEDTLS_TLS_EXT_PSK_KEY_EXCHANGE_MODES, p, 0);
  545. /* Skip extension length (2 bytes) and
  546. * ke_modes length (1 byte) for now.
  547. */
  548. p += 5;
  549. if (mbedtls_ssl_conf_tls13_is_psk_ephemeral_enabled(ssl)) {
  550. *p++ = MBEDTLS_SSL_TLS1_3_PSK_MODE_ECDHE;
  551. ke_modes_len++;
  552. MBEDTLS_SSL_DEBUG_MSG(4, ("Adding PSK-ECDHE key exchange mode"));
  553. }
  554. if (mbedtls_ssl_conf_tls13_is_psk_enabled(ssl)) {
  555. *p++ = MBEDTLS_SSL_TLS1_3_PSK_MODE_PURE;
  556. ke_modes_len++;
  557. MBEDTLS_SSL_DEBUG_MSG(4, ("Adding pure PSK key exchange mode"));
  558. }
  559. /* Now write the extension and ke_modes length */
  560. MBEDTLS_PUT_UINT16_BE(ke_modes_len + 1, buf, 2);
  561. buf[4] = ke_modes_len;
  562. *out_len = p - buf;
  563. mbedtls_ssl_tls13_set_hs_sent_ext_mask(
  564. ssl, MBEDTLS_TLS_EXT_PSK_KEY_EXCHANGE_MODES);
  565. return 0;
  566. }
  567. #if defined(MBEDTLS_SSL_SESSION_TICKETS)
  568. static psa_algorithm_t ssl_tls13_get_ciphersuite_hash_alg(int ciphersuite)
  569. {
  570. const mbedtls_ssl_ciphersuite_t *ciphersuite_info = NULL;
  571. ciphersuite_info = mbedtls_ssl_ciphersuite_from_id(ciphersuite);
  572. if (ciphersuite_info != NULL) {
  573. return mbedtls_md_psa_alg_from_type((mbedtls_md_type_t) ciphersuite_info->mac);
  574. }
  575. return PSA_ALG_NONE;
  576. }
  577. static int ssl_tls13_has_configured_ticket(mbedtls_ssl_context *ssl)
  578. {
  579. mbedtls_ssl_session *session = ssl->session_negotiate;
  580. return ssl->handshake->resume &&
  581. session != NULL && session->ticket != NULL &&
  582. mbedtls_ssl_conf_tls13_is_kex_mode_enabled(
  583. ssl, mbedtls_ssl_tls13_session_get_ticket_flags(
  584. session, MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ALL));
  585. }
  586. #if defined(MBEDTLS_SSL_EARLY_DATA)
  587. static int ssl_tls13_early_data_has_valid_ticket(mbedtls_ssl_context *ssl)
  588. {
  589. mbedtls_ssl_session *session = ssl->session_negotiate;
  590. return ssl->handshake->resume &&
  591. session->tls_version == MBEDTLS_SSL_VERSION_TLS1_3 &&
  592. mbedtls_ssl_tls13_session_ticket_allow_early_data(session) &&
  593. mbedtls_ssl_tls13_cipher_suite_is_offered(ssl, session->ciphersuite);
  594. }
  595. #endif
  596. MBEDTLS_CHECK_RETURN_CRITICAL
  597. static int ssl_tls13_ticket_get_identity(mbedtls_ssl_context *ssl,
  598. psa_algorithm_t *hash_alg,
  599. const unsigned char **identity,
  600. size_t *identity_len)
  601. {
  602. mbedtls_ssl_session *session = ssl->session_negotiate;
  603. if (!ssl_tls13_has_configured_ticket(ssl)) {
  604. return -1;
  605. }
  606. *hash_alg = ssl_tls13_get_ciphersuite_hash_alg(session->ciphersuite);
  607. *identity = session->ticket;
  608. *identity_len = session->ticket_len;
  609. return 0;
  610. }
  611. MBEDTLS_CHECK_RETURN_CRITICAL
  612. static int ssl_tls13_ticket_get_psk(mbedtls_ssl_context *ssl,
  613. psa_algorithm_t *hash_alg,
  614. const unsigned char **psk,
  615. size_t *psk_len)
  616. {
  617. mbedtls_ssl_session *session = ssl->session_negotiate;
  618. if (!ssl_tls13_has_configured_ticket(ssl)) {
  619. return -1;
  620. }
  621. *hash_alg = ssl_tls13_get_ciphersuite_hash_alg(session->ciphersuite);
  622. *psk = session->resumption_key;
  623. *psk_len = session->resumption_key_len;
  624. return 0;
  625. }
  626. #endif /* MBEDTLS_SSL_SESSION_TICKETS */
  627. MBEDTLS_CHECK_RETURN_CRITICAL
  628. static int ssl_tls13_psk_get_identity(mbedtls_ssl_context *ssl,
  629. psa_algorithm_t *hash_alg,
  630. const unsigned char **identity,
  631. size_t *identity_len)
  632. {
  633. if (!mbedtls_ssl_conf_has_static_psk(ssl->conf)) {
  634. return -1;
  635. }
  636. *hash_alg = PSA_ALG_SHA_256;
  637. *identity = ssl->conf->psk_identity;
  638. *identity_len = ssl->conf->psk_identity_len;
  639. return 0;
  640. }
  641. MBEDTLS_CHECK_RETURN_CRITICAL
  642. static int ssl_tls13_psk_get_psk(mbedtls_ssl_context *ssl,
  643. psa_algorithm_t *hash_alg,
  644. const unsigned char **psk,
  645. size_t *psk_len)
  646. {
  647. if (!mbedtls_ssl_conf_has_static_psk(ssl->conf)) {
  648. return -1;
  649. }
  650. *hash_alg = PSA_ALG_SHA_256;
  651. *psk = ssl->conf->psk;
  652. *psk_len = ssl->conf->psk_len;
  653. return 0;
  654. }
  655. static int ssl_tls13_get_configured_psk_count(mbedtls_ssl_context *ssl)
  656. {
  657. int configured_psk_count = 0;
  658. #if defined(MBEDTLS_SSL_SESSION_TICKETS)
  659. if (ssl_tls13_has_configured_ticket(ssl)) {
  660. MBEDTLS_SSL_DEBUG_MSG(3, ("Ticket is configured"));
  661. configured_psk_count++;
  662. }
  663. #endif
  664. if (mbedtls_ssl_conf_has_static_psk(ssl->conf)) {
  665. MBEDTLS_SSL_DEBUG_MSG(3, ("PSK is configured"));
  666. configured_psk_count++;
  667. }
  668. return configured_psk_count;
  669. }
  670. MBEDTLS_CHECK_RETURN_CRITICAL
  671. static int ssl_tls13_write_identity(mbedtls_ssl_context *ssl,
  672. unsigned char *buf,
  673. unsigned char *end,
  674. const unsigned char *identity,
  675. size_t identity_len,
  676. uint32_t obfuscated_ticket_age,
  677. size_t *out_len)
  678. {
  679. ((void) ssl);
  680. *out_len = 0;
  681. /*
  682. * - identity_len (2 bytes)
  683. * - identity (psk_identity_len bytes)
  684. * - obfuscated_ticket_age (4 bytes)
  685. */
  686. MBEDTLS_SSL_CHK_BUF_PTR(buf, end, 6 + identity_len);
  687. MBEDTLS_PUT_UINT16_BE(identity_len, buf, 0);
  688. memcpy(buf + 2, identity, identity_len);
  689. MBEDTLS_PUT_UINT32_BE(obfuscated_ticket_age, buf, 2 + identity_len);
  690. MBEDTLS_SSL_DEBUG_BUF(4, "write identity", buf, 6 + identity_len);
  691. *out_len = 6 + identity_len;
  692. return 0;
  693. }
  694. MBEDTLS_CHECK_RETURN_CRITICAL
  695. static int ssl_tls13_write_binder(mbedtls_ssl_context *ssl,
  696. unsigned char *buf,
  697. unsigned char *end,
  698. int psk_type,
  699. psa_algorithm_t hash_alg,
  700. const unsigned char *psk,
  701. size_t psk_len,
  702. size_t *out_len)
  703. {
  704. int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
  705. unsigned char binder_len;
  706. unsigned char transcript[MBEDTLS_TLS1_3_MD_MAX_SIZE];
  707. size_t transcript_len = 0;
  708. *out_len = 0;
  709. binder_len = PSA_HASH_LENGTH(hash_alg);
  710. /*
  711. * - binder_len (1 bytes)
  712. * - binder (binder_len bytes)
  713. */
  714. MBEDTLS_SSL_CHK_BUF_PTR(buf, end, 1 + binder_len);
  715. buf[0] = binder_len;
  716. /* Get current state of handshake transcript. */
  717. ret = mbedtls_ssl_get_handshake_transcript(
  718. ssl, mbedtls_md_type_from_psa_alg(hash_alg),
  719. transcript, sizeof(transcript), &transcript_len);
  720. if (ret != 0) {
  721. return ret;
  722. }
  723. ret = mbedtls_ssl_tls13_create_psk_binder(ssl, hash_alg,
  724. psk, psk_len, psk_type,
  725. transcript, buf + 1);
  726. if (ret != 0) {
  727. MBEDTLS_SSL_DEBUG_RET(1, "mbedtls_ssl_tls13_create_psk_binder", ret);
  728. return ret;
  729. }
  730. MBEDTLS_SSL_DEBUG_BUF(4, "write binder", buf, 1 + binder_len);
  731. *out_len = 1 + binder_len;
  732. return 0;
  733. }
  734. /*
  735. * mbedtls_ssl_tls13_write_identities_of_pre_shared_key_ext() structure:
  736. *
  737. * struct {
  738. * opaque identity<1..2^16-1>;
  739. * uint32 obfuscated_ticket_age;
  740. * } PskIdentity;
  741. *
  742. * opaque PskBinderEntry<32..255>;
  743. *
  744. * struct {
  745. * PskIdentity identities<7..2^16-1>;
  746. * PskBinderEntry binders<33..2^16-1>;
  747. * } OfferedPsks;
  748. *
  749. * struct {
  750. * select (Handshake.msg_type) {
  751. * case client_hello: OfferedPsks;
  752. * ...
  753. * };
  754. * } PreSharedKeyExtension;
  755. *
  756. */
  757. int mbedtls_ssl_tls13_write_identities_of_pre_shared_key_ext(
  758. mbedtls_ssl_context *ssl, unsigned char *buf, unsigned char *end,
  759. size_t *out_len, size_t *binders_len)
  760. {
  761. int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
  762. int configured_psk_count = 0;
  763. unsigned char *p = buf;
  764. psa_algorithm_t hash_alg = PSA_ALG_NONE;
  765. const unsigned char *identity;
  766. size_t identity_len;
  767. size_t l_binders_len = 0;
  768. size_t output_len;
  769. *out_len = 0;
  770. *binders_len = 0;
  771. /* Check if we have any PSKs to offer. If no, skip pre_shared_key */
  772. configured_psk_count = ssl_tls13_get_configured_psk_count(ssl);
  773. if (configured_psk_count == 0) {
  774. MBEDTLS_SSL_DEBUG_MSG(3, ("skip pre_shared_key extensions"));
  775. return 0;
  776. }
  777. MBEDTLS_SSL_DEBUG_MSG(4, ("Pre-configured PSK number = %d",
  778. configured_psk_count));
  779. /* Check if we have space to write the extension, binders included.
  780. * - extension_type (2 bytes)
  781. * - extension_data_len (2 bytes)
  782. * - identities_len (2 bytes)
  783. */
  784. MBEDTLS_SSL_CHK_BUF_PTR(p, end, 6);
  785. p += 6;
  786. #if defined(MBEDTLS_SSL_SESSION_TICKETS)
  787. if (ssl_tls13_ticket_get_identity(
  788. ssl, &hash_alg, &identity, &identity_len) == 0) {
  789. #if defined(MBEDTLS_HAVE_TIME)
  790. mbedtls_ms_time_t now = mbedtls_ms_time();
  791. mbedtls_ssl_session *session = ssl->session_negotiate;
  792. /* The ticket age has been checked to be smaller than the
  793. * `ticket_lifetime` in ssl_prepare_client_hello() which is smaller than
  794. * 7 days (enforced in ssl_tls13_parse_new_session_ticket()) . Thus the
  795. * cast to `uint32_t` of the ticket age is safe. */
  796. uint32_t obfuscated_ticket_age =
  797. (uint32_t) (now - session->ticket_reception_time);
  798. obfuscated_ticket_age += session->ticket_age_add;
  799. ret = ssl_tls13_write_identity(ssl, p, end,
  800. identity, identity_len,
  801. obfuscated_ticket_age,
  802. &output_len);
  803. #else
  804. ret = ssl_tls13_write_identity(ssl, p, end, identity, identity_len,
  805. 0, &output_len);
  806. #endif /* MBEDTLS_HAVE_TIME */
  807. if (ret != 0) {
  808. return ret;
  809. }
  810. p += output_len;
  811. l_binders_len += 1 + PSA_HASH_LENGTH(hash_alg);
  812. }
  813. #endif /* MBEDTLS_SSL_SESSION_TICKETS */
  814. if (ssl_tls13_psk_get_identity(
  815. ssl, &hash_alg, &identity, &identity_len) == 0) {
  816. ret = ssl_tls13_write_identity(ssl, p, end, identity, identity_len, 0,
  817. &output_len);
  818. if (ret != 0) {
  819. return ret;
  820. }
  821. p += output_len;
  822. l_binders_len += 1 + PSA_HASH_LENGTH(hash_alg);
  823. }
  824. MBEDTLS_SSL_DEBUG_MSG(3,
  825. ("client hello, adding pre_shared_key extension, "
  826. "omitting PSK binder list"));
  827. /* Take into account the two bytes for the length of the binders. */
  828. l_binders_len += 2;
  829. /* Check if there is enough space for binders */
  830. MBEDTLS_SSL_CHK_BUF_PTR(p, end, l_binders_len);
  831. /*
  832. * - extension_type (2 bytes)
  833. * - extension_data_len (2 bytes)
  834. * - identities_len (2 bytes)
  835. */
  836. MBEDTLS_PUT_UINT16_BE(MBEDTLS_TLS_EXT_PRE_SHARED_KEY, buf, 0);
  837. MBEDTLS_PUT_UINT16_BE(p - buf - 4 + l_binders_len, buf, 2);
  838. MBEDTLS_PUT_UINT16_BE(p - buf - 6, buf, 4);
  839. *out_len = (p - buf) + l_binders_len;
  840. *binders_len = l_binders_len;
  841. MBEDTLS_SSL_DEBUG_BUF(3, "pre_shared_key identities", buf, p - buf);
  842. return 0;
  843. }
  844. int mbedtls_ssl_tls13_write_binders_of_pre_shared_key_ext(
  845. mbedtls_ssl_context *ssl, unsigned char *buf, unsigned char *end)
  846. {
  847. int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
  848. unsigned char *p = buf;
  849. psa_algorithm_t hash_alg = PSA_ALG_NONE;
  850. const unsigned char *psk;
  851. size_t psk_len;
  852. size_t output_len;
  853. /* Check if we have space to write binders_len.
  854. * - binders_len (2 bytes)
  855. */
  856. MBEDTLS_SSL_CHK_BUF_PTR(p, end, 2);
  857. p += 2;
  858. #if defined(MBEDTLS_SSL_SESSION_TICKETS)
  859. if (ssl_tls13_ticket_get_psk(ssl, &hash_alg, &psk, &psk_len) == 0) {
  860. ret = ssl_tls13_write_binder(ssl, p, end,
  861. MBEDTLS_SSL_TLS1_3_PSK_RESUMPTION,
  862. hash_alg, psk, psk_len,
  863. &output_len);
  864. if (ret != 0) {
  865. return ret;
  866. }
  867. p += output_len;
  868. }
  869. #endif /* MBEDTLS_SSL_SESSION_TICKETS */
  870. if (ssl_tls13_psk_get_psk(ssl, &hash_alg, &psk, &psk_len) == 0) {
  871. ret = ssl_tls13_write_binder(ssl, p, end,
  872. MBEDTLS_SSL_TLS1_3_PSK_EXTERNAL,
  873. hash_alg, psk, psk_len,
  874. &output_len);
  875. if (ret != 0) {
  876. return ret;
  877. }
  878. p += output_len;
  879. }
  880. MBEDTLS_SSL_DEBUG_MSG(3, ("client hello, adding PSK binder list."));
  881. /*
  882. * - binders_len (2 bytes)
  883. */
  884. MBEDTLS_PUT_UINT16_BE(p - buf - 2, buf, 0);
  885. MBEDTLS_SSL_DEBUG_BUF(3, "pre_shared_key binders", buf, p - buf);
  886. mbedtls_ssl_tls13_set_hs_sent_ext_mask(
  887. ssl, MBEDTLS_TLS_EXT_PRE_SHARED_KEY);
  888. return 0;
  889. }
  890. /*
  891. * struct {
  892. * opaque identity<1..2^16-1>;
  893. * uint32 obfuscated_ticket_age;
  894. * } PskIdentity;
  895. *
  896. * opaque PskBinderEntry<32..255>;
  897. *
  898. * struct {
  899. *
  900. * select (Handshake.msg_type) {
  901. * ...
  902. * case server_hello: uint16 selected_identity;
  903. * };
  904. *
  905. * } PreSharedKeyExtension;
  906. *
  907. */
  908. MBEDTLS_CHECK_RETURN_CRITICAL
  909. static int ssl_tls13_parse_server_pre_shared_key_ext(mbedtls_ssl_context *ssl,
  910. const unsigned char *buf,
  911. const unsigned char *end)
  912. {
  913. int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
  914. int selected_identity;
  915. const unsigned char *psk;
  916. size_t psk_len;
  917. psa_algorithm_t hash_alg;
  918. MBEDTLS_SSL_CHK_BUF_READ_PTR(buf, end, 2);
  919. selected_identity = MBEDTLS_GET_UINT16_BE(buf, 0);
  920. ssl->handshake->selected_identity = (uint16_t) selected_identity;
  921. MBEDTLS_SSL_DEBUG_MSG(3, ("selected_identity = %d", selected_identity));
  922. if (selected_identity >= ssl_tls13_get_configured_psk_count(ssl)) {
  923. MBEDTLS_SSL_DEBUG_MSG(1, ("Invalid PSK identity."));
  924. MBEDTLS_SSL_PEND_FATAL_ALERT(MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER,
  925. MBEDTLS_ERR_SSL_ILLEGAL_PARAMETER);
  926. return MBEDTLS_ERR_SSL_ILLEGAL_PARAMETER;
  927. }
  928. #if defined(MBEDTLS_SSL_SESSION_TICKETS)
  929. if (selected_identity == 0 && ssl_tls13_has_configured_ticket(ssl)) {
  930. ret = ssl_tls13_ticket_get_psk(ssl, &hash_alg, &psk, &psk_len);
  931. } else
  932. #endif
  933. if (mbedtls_ssl_conf_has_static_psk(ssl->conf)) {
  934. ret = ssl_tls13_psk_get_psk(ssl, &hash_alg, &psk, &psk_len);
  935. } else {
  936. MBEDTLS_SSL_DEBUG_MSG(1, ("should never happen"));
  937. return MBEDTLS_ERR_SSL_INTERNAL_ERROR;
  938. }
  939. if (ret != 0) {
  940. return ret;
  941. }
  942. if (mbedtls_md_psa_alg_from_type((mbedtls_md_type_t) ssl->handshake->ciphersuite_info->mac)
  943. != hash_alg) {
  944. MBEDTLS_SSL_DEBUG_MSG(
  945. 1, ("Invalid ciphersuite for external psk."));
  946. MBEDTLS_SSL_PEND_FATAL_ALERT(MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER,
  947. MBEDTLS_ERR_SSL_ILLEGAL_PARAMETER);
  948. return MBEDTLS_ERR_SSL_ILLEGAL_PARAMETER;
  949. }
  950. ret = mbedtls_ssl_set_hs_psk(ssl, psk, psk_len);
  951. if (ret != 0) {
  952. MBEDTLS_SSL_DEBUG_RET(1, "mbedtls_ssl_set_hs_psk", ret);
  953. return ret;
  954. }
  955. return 0;
  956. }
  957. #endif /* MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_PSK_ENABLED */
  958. int mbedtls_ssl_tls13_write_client_hello_exts(mbedtls_ssl_context *ssl,
  959. unsigned char *buf,
  960. unsigned char *end,
  961. size_t *out_len)
  962. {
  963. int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
  964. unsigned char *p = buf;
  965. size_t ext_len;
  966. *out_len = 0;
  967. ret = mbedtls_ssl_tls13_crypto_init(ssl);
  968. if (ret != 0) {
  969. return ret;
  970. }
  971. /* Write supported_versions extension
  972. *
  973. * Supported Versions Extension is mandatory with TLS 1.3.
  974. */
  975. ret = ssl_tls13_write_supported_versions_ext(ssl, p, end, &ext_len);
  976. if (ret != 0) {
  977. return ret;
  978. }
  979. p += ext_len;
  980. /* Echo the cookie if the server provided one in its preceding
  981. * HelloRetryRequest message.
  982. */
  983. ret = ssl_tls13_write_cookie_ext(ssl, p, end, &ext_len);
  984. if (ret != 0) {
  985. return ret;
  986. }
  987. p += ext_len;
  988. #if defined(MBEDTLS_SSL_RECORD_SIZE_LIMIT)
  989. ret = mbedtls_ssl_tls13_write_record_size_limit_ext(
  990. ssl, p, end, &ext_len);
  991. if (ret != 0) {
  992. return ret;
  993. }
  994. p += ext_len;
  995. #endif
  996. #if defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_EPHEMERAL_ENABLED)
  997. if (mbedtls_ssl_conf_tls13_is_some_ephemeral_enabled(ssl)) {
  998. ret = ssl_tls13_write_key_share_ext(ssl, p, end, &ext_len);
  999. if (ret != 0) {
  1000. return ret;
  1001. }
  1002. p += ext_len;
  1003. }
  1004. #endif
  1005. #if defined(MBEDTLS_SSL_EARLY_DATA)
  1006. /* In the first ClientHello, write the early data indication extension if
  1007. * necessary and update the early data state.
  1008. * If an HRR has been received and thus we are currently writing the
  1009. * second ClientHello, the second ClientHello must not contain an early
  1010. * data extension and the early data state must stay as it is:
  1011. * MBEDTLS_SSL_EARLY_DATA_STATE_NO_IND_SENT or
  1012. * MBEDTLS_SSL_EARLY_DATA_STATE_REJECTED.
  1013. */
  1014. if (!ssl->handshake->hello_retry_request_flag) {
  1015. if (mbedtls_ssl_conf_tls13_is_some_psk_enabled(ssl) &&
  1016. ssl_tls13_early_data_has_valid_ticket(ssl) &&
  1017. ssl->conf->early_data_enabled == MBEDTLS_SSL_EARLY_DATA_ENABLED) {
  1018. ret = mbedtls_ssl_tls13_write_early_data_ext(
  1019. ssl, 0, p, end, &ext_len);
  1020. if (ret != 0) {
  1021. return ret;
  1022. }
  1023. p += ext_len;
  1024. ssl->early_data_state = MBEDTLS_SSL_EARLY_DATA_STATE_IND_SENT;
  1025. } else {
  1026. ssl->early_data_state = MBEDTLS_SSL_EARLY_DATA_STATE_NO_IND_SENT;
  1027. }
  1028. }
  1029. #endif /* MBEDTLS_SSL_EARLY_DATA */
  1030. #if defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_PSK_ENABLED)
  1031. /* For PSK-based key exchange we need the pre_shared_key extension
  1032. * and the psk_key_exchange_modes extension.
  1033. *
  1034. * The pre_shared_key extension MUST be the last extension in the
  1035. * ClientHello. Servers MUST check that it is the last extension and
  1036. * otherwise fail the handshake with an "illegal_parameter" alert.
  1037. *
  1038. * Add the psk_key_exchange_modes extension.
  1039. */
  1040. ret = ssl_tls13_write_psk_key_exchange_modes_ext(ssl, p, end, &ext_len);
  1041. if (ret != 0) {
  1042. return ret;
  1043. }
  1044. p += ext_len;
  1045. #endif
  1046. *out_len = p - buf;
  1047. return 0;
  1048. }
  1049. int mbedtls_ssl_tls13_finalize_client_hello(mbedtls_ssl_context *ssl)
  1050. {
  1051. ((void) ssl);
  1052. #if defined(MBEDTLS_SSL_EARLY_DATA)
  1053. int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
  1054. psa_algorithm_t hash_alg = PSA_ALG_NONE;
  1055. const unsigned char *psk;
  1056. size_t psk_len;
  1057. const mbedtls_ssl_ciphersuite_t *ciphersuite_info;
  1058. if (ssl->early_data_state == MBEDTLS_SSL_EARLY_DATA_STATE_IND_SENT) {
  1059. MBEDTLS_SSL_DEBUG_MSG(
  1060. 1, ("Set hs psk for early data when writing the first psk"));
  1061. ret = ssl_tls13_ticket_get_psk(ssl, &hash_alg, &psk, &psk_len);
  1062. if (ret != 0) {
  1063. MBEDTLS_SSL_DEBUG_RET(
  1064. 1, "ssl_tls13_ticket_get_psk", ret);
  1065. return ret;
  1066. }
  1067. ret = mbedtls_ssl_set_hs_psk(ssl, psk, psk_len);
  1068. if (ret != 0) {
  1069. MBEDTLS_SSL_DEBUG_RET(1, "mbedtls_ssl_set_hs_psk", ret);
  1070. return ret;
  1071. }
  1072. /*
  1073. * Early data are going to be encrypted using the ciphersuite
  1074. * associated with the pre-shared key used for the handshake.
  1075. * Note that if the server rejects early data, the handshake
  1076. * based on the pre-shared key may complete successfully
  1077. * with a selected ciphersuite different from the ciphersuite
  1078. * associated with the pre-shared key. Only the hashes of the
  1079. * two ciphersuites have to be the same. In that case, the
  1080. * encrypted handshake data and application data are
  1081. * encrypted using a different ciphersuite than the one used for
  1082. * the rejected early data.
  1083. */
  1084. ciphersuite_info = mbedtls_ssl_ciphersuite_from_id(
  1085. ssl->session_negotiate->ciphersuite);
  1086. ssl->handshake->ciphersuite_info = ciphersuite_info;
  1087. /* Enable psk and psk_ephemeral to make stage early happy */
  1088. ssl->handshake->key_exchange_mode =
  1089. MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ALL;
  1090. /* Start the TLS 1.3 key schedule:
  1091. * Set the PSK and derive early secret.
  1092. */
  1093. ret = mbedtls_ssl_tls13_key_schedule_stage_early(ssl);
  1094. if (ret != 0) {
  1095. MBEDTLS_SSL_DEBUG_RET(
  1096. 1, "mbedtls_ssl_tls13_key_schedule_stage_early", ret);
  1097. return ret;
  1098. }
  1099. /* Derive early data key material */
  1100. ret = mbedtls_ssl_tls13_compute_early_transform(ssl);
  1101. if (ret != 0) {
  1102. MBEDTLS_SSL_DEBUG_RET(
  1103. 1, "mbedtls_ssl_tls13_compute_early_transform", ret);
  1104. return ret;
  1105. }
  1106. #if defined(MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE)
  1107. mbedtls_ssl_handshake_set_state(
  1108. ssl, MBEDTLS_SSL_CLIENT_CCS_AFTER_CLIENT_HELLO);
  1109. #else
  1110. MBEDTLS_SSL_DEBUG_MSG(
  1111. 1, ("Switch to early data keys for outbound traffic"));
  1112. mbedtls_ssl_set_outbound_transform(
  1113. ssl, ssl->handshake->transform_earlydata);
  1114. ssl->early_data_state = MBEDTLS_SSL_EARLY_DATA_STATE_CAN_WRITE;
  1115. #endif
  1116. }
  1117. #endif /* MBEDTLS_SSL_EARLY_DATA */
  1118. return 0;
  1119. }
  1120. /*
  1121. * Functions for parsing and processing Server Hello
  1122. */
  1123. /**
  1124. * \brief Detect if the ServerHello contains a supported_versions extension
  1125. * or not.
  1126. *
  1127. * \param[in] ssl SSL context
  1128. * \param[in] buf Buffer containing the ServerHello message
  1129. * \param[in] end End of the buffer containing the ServerHello message
  1130. *
  1131. * \return 0 if the ServerHello does not contain a supported_versions extension
  1132. * \return 1 if the ServerHello contains a supported_versions extension
  1133. * \return A negative value if an error occurred while parsing the ServerHello.
  1134. */
  1135. MBEDTLS_CHECK_RETURN_CRITICAL
  1136. static int ssl_tls13_is_supported_versions_ext_present(
  1137. mbedtls_ssl_context *ssl,
  1138. const unsigned char *buf,
  1139. const unsigned char *end)
  1140. {
  1141. const unsigned char *p = buf;
  1142. size_t legacy_session_id_echo_len;
  1143. const unsigned char *supported_versions_data;
  1144. const unsigned char *supported_versions_data_end;
  1145. /*
  1146. * Check there is enough data to access the legacy_session_id_echo vector
  1147. * length:
  1148. * - legacy_version 2 bytes
  1149. * - random MBEDTLS_SERVER_HELLO_RANDOM_LEN bytes
  1150. * - legacy_session_id_echo length 1 byte
  1151. */
  1152. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, MBEDTLS_SERVER_HELLO_RANDOM_LEN + 3);
  1153. p += MBEDTLS_SERVER_HELLO_RANDOM_LEN + 2;
  1154. legacy_session_id_echo_len = *p;
  1155. /*
  1156. * Jump to the extensions, jumping over:
  1157. * - legacy_session_id_echo (legacy_session_id_echo_len + 1) bytes
  1158. * - cipher_suite 2 bytes
  1159. * - legacy_compression_method 1 byte
  1160. */
  1161. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, legacy_session_id_echo_len + 4);
  1162. p += legacy_session_id_echo_len + 4;
  1163. return mbedtls_ssl_tls13_is_supported_versions_ext_present_in_exts(
  1164. ssl, p, end,
  1165. &supported_versions_data, &supported_versions_data_end);
  1166. }
  1167. /* Returns a negative value on failure, and otherwise
  1168. * - 1 if the last eight bytes of the ServerHello random bytes indicate that
  1169. * the server is TLS 1.3 capable but negotiating TLS 1.2 or below.
  1170. * - 0 otherwise
  1171. */
  1172. MBEDTLS_CHECK_RETURN_CRITICAL
  1173. static int ssl_tls13_is_downgrade_negotiation(mbedtls_ssl_context *ssl,
  1174. const unsigned char *buf,
  1175. const unsigned char *end)
  1176. {
  1177. /* First seven bytes of the magic downgrade strings, see RFC 8446 4.1.3 */
  1178. static const unsigned char magic_downgrade_string[] =
  1179. { 0x44, 0x4F, 0x57, 0x4E, 0x47, 0x52, 0x44 };
  1180. const unsigned char *last_eight_bytes_of_random;
  1181. unsigned char last_byte_of_random;
  1182. MBEDTLS_SSL_CHK_BUF_READ_PTR(buf, end, MBEDTLS_SERVER_HELLO_RANDOM_LEN + 2);
  1183. last_eight_bytes_of_random = buf + 2 + MBEDTLS_SERVER_HELLO_RANDOM_LEN - 8;
  1184. if (memcmp(last_eight_bytes_of_random,
  1185. magic_downgrade_string,
  1186. sizeof(magic_downgrade_string)) == 0) {
  1187. last_byte_of_random = last_eight_bytes_of_random[7];
  1188. return last_byte_of_random == 0 ||
  1189. last_byte_of_random == 1;
  1190. }
  1191. return 0;
  1192. }
  1193. /* Returns a negative value on failure, and otherwise
  1194. * - SSL_SERVER_HELLO or
  1195. * - SSL_SERVER_HELLO_HRR
  1196. * to indicate which message is expected and to be parsed next.
  1197. */
  1198. #define SSL_SERVER_HELLO 0
  1199. #define SSL_SERVER_HELLO_HRR 1
  1200. MBEDTLS_CHECK_RETURN_CRITICAL
  1201. static int ssl_server_hello_is_hrr(mbedtls_ssl_context *ssl,
  1202. const unsigned char *buf,
  1203. const unsigned char *end)
  1204. {
  1205. /* Check whether this message is a HelloRetryRequest ( HRR ) message.
  1206. *
  1207. * Server Hello and HRR are only distinguished by Random set to the
  1208. * special value of the SHA-256 of "HelloRetryRequest".
  1209. *
  1210. * struct {
  1211. * ProtocolVersion legacy_version = 0x0303;
  1212. * Random random;
  1213. * opaque legacy_session_id_echo<0..32>;
  1214. * CipherSuite cipher_suite;
  1215. * uint8 legacy_compression_method = 0;
  1216. * Extension extensions<6..2^16-1>;
  1217. * } ServerHello;
  1218. *
  1219. */
  1220. MBEDTLS_SSL_CHK_BUF_READ_PTR(
  1221. buf, end, 2 + sizeof(mbedtls_ssl_tls13_hello_retry_request_magic));
  1222. if (memcmp(buf + 2, mbedtls_ssl_tls13_hello_retry_request_magic,
  1223. sizeof(mbedtls_ssl_tls13_hello_retry_request_magic)) == 0) {
  1224. return SSL_SERVER_HELLO_HRR;
  1225. }
  1226. return SSL_SERVER_HELLO;
  1227. }
  1228. /*
  1229. * Returns a negative value on failure, and otherwise
  1230. * - SSL_SERVER_HELLO or
  1231. * - SSL_SERVER_HELLO_HRR or
  1232. * - SSL_SERVER_HELLO_TLS1_2
  1233. */
  1234. #define SSL_SERVER_HELLO_TLS1_2 2
  1235. MBEDTLS_CHECK_RETURN_CRITICAL
  1236. static int ssl_tls13_preprocess_server_hello(mbedtls_ssl_context *ssl,
  1237. const unsigned char *buf,
  1238. const unsigned char *end)
  1239. {
  1240. int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
  1241. mbedtls_ssl_handshake_params *handshake = ssl->handshake;
  1242. MBEDTLS_SSL_PROC_CHK_NEG(ssl_tls13_is_supported_versions_ext_present(
  1243. ssl, buf, end));
  1244. if (ret == 0) {
  1245. MBEDTLS_SSL_PROC_CHK_NEG(
  1246. ssl_tls13_is_downgrade_negotiation(ssl, buf, end));
  1247. /* If the server is negotiating TLS 1.2 or below and:
  1248. * . we did not propose TLS 1.2 or
  1249. * . the server responded it is TLS 1.3 capable but negotiating a lower
  1250. * version of the protocol and thus we are under downgrade attack
  1251. * abort the handshake with an "illegal parameter" alert.
  1252. */
  1253. if (handshake->min_tls_version > MBEDTLS_SSL_VERSION_TLS1_2 || ret) {
  1254. MBEDTLS_SSL_PEND_FATAL_ALERT(MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER,
  1255. MBEDTLS_ERR_SSL_ILLEGAL_PARAMETER);
  1256. return MBEDTLS_ERR_SSL_ILLEGAL_PARAMETER;
  1257. }
  1258. /*
  1259. * Version 1.2 of the protocol has been negotiated, set the
  1260. * ssl->keep_current_message flag for the ServerHello to be kept and
  1261. * parsed as a TLS 1.2 ServerHello. We also change ssl->tls_version to
  1262. * MBEDTLS_SSL_VERSION_TLS1_2 thus from now on mbedtls_ssl_handshake_step()
  1263. * will dispatch to the TLS 1.2 state machine.
  1264. */
  1265. ssl->keep_current_message = 1;
  1266. ssl->tls_version = MBEDTLS_SSL_VERSION_TLS1_2;
  1267. MBEDTLS_SSL_PROC_CHK(mbedtls_ssl_add_hs_msg_to_checksum(
  1268. ssl, MBEDTLS_SSL_HS_SERVER_HELLO,
  1269. buf, (size_t) (end - buf)));
  1270. if (mbedtls_ssl_conf_tls13_is_some_ephemeral_enabled(ssl)) {
  1271. ret = ssl_tls13_reset_key_share(ssl);
  1272. if (ret != 0) {
  1273. return ret;
  1274. }
  1275. }
  1276. return SSL_SERVER_HELLO_TLS1_2;
  1277. }
  1278. ssl->session_negotiate->tls_version = ssl->tls_version;
  1279. ssl->session_negotiate->endpoint = ssl->conf->endpoint;
  1280. handshake->received_extensions = MBEDTLS_SSL_EXT_MASK_NONE;
  1281. ret = ssl_server_hello_is_hrr(ssl, buf, end);
  1282. switch (ret) {
  1283. case SSL_SERVER_HELLO:
  1284. MBEDTLS_SSL_DEBUG_MSG(2, ("received ServerHello message"));
  1285. break;
  1286. case SSL_SERVER_HELLO_HRR:
  1287. MBEDTLS_SSL_DEBUG_MSG(2, ("received HelloRetryRequest message"));
  1288. /* If a client receives a second HelloRetryRequest in the same
  1289. * connection (i.e., where the ClientHello was itself in response
  1290. * to a HelloRetryRequest), it MUST abort the handshake with an
  1291. * "unexpected_message" alert.
  1292. */
  1293. if (handshake->hello_retry_request_flag) {
  1294. MBEDTLS_SSL_DEBUG_MSG(1, ("Multiple HRRs received"));
  1295. MBEDTLS_SSL_PEND_FATAL_ALERT(
  1296. MBEDTLS_SSL_ALERT_MSG_UNEXPECTED_MESSAGE,
  1297. MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE);
  1298. return MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE;
  1299. }
  1300. /*
  1301. * Clients must abort the handshake with an "illegal_parameter"
  1302. * alert if the HelloRetryRequest would not result in any change
  1303. * in the ClientHello.
  1304. * In a PSK only key exchange that what we expect.
  1305. */
  1306. if (!mbedtls_ssl_conf_tls13_is_some_ephemeral_enabled(ssl)) {
  1307. MBEDTLS_SSL_DEBUG_MSG(1,
  1308. ("Unexpected HRR in pure PSK key exchange."));
  1309. MBEDTLS_SSL_PEND_FATAL_ALERT(
  1310. MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER,
  1311. MBEDTLS_ERR_SSL_ILLEGAL_PARAMETER);
  1312. return MBEDTLS_ERR_SSL_ILLEGAL_PARAMETER;
  1313. }
  1314. handshake->hello_retry_request_flag = 1;
  1315. break;
  1316. }
  1317. cleanup:
  1318. return ret;
  1319. }
  1320. MBEDTLS_CHECK_RETURN_CRITICAL
  1321. static int ssl_tls13_check_server_hello_session_id_echo(mbedtls_ssl_context *ssl,
  1322. const unsigned char **buf,
  1323. const unsigned char *end)
  1324. {
  1325. const unsigned char *p = *buf;
  1326. size_t legacy_session_id_echo_len;
  1327. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, 1);
  1328. legacy_session_id_echo_len = *p++;
  1329. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, legacy_session_id_echo_len);
  1330. /* legacy_session_id_echo */
  1331. if (ssl->session_negotiate->id_len != legacy_session_id_echo_len ||
  1332. memcmp(ssl->session_negotiate->id, p, legacy_session_id_echo_len) != 0) {
  1333. MBEDTLS_SSL_DEBUG_BUF(3, "Expected Session ID",
  1334. ssl->session_negotiate->id,
  1335. ssl->session_negotiate->id_len);
  1336. MBEDTLS_SSL_DEBUG_BUF(3, "Received Session ID", p,
  1337. legacy_session_id_echo_len);
  1338. MBEDTLS_SSL_PEND_FATAL_ALERT(MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER,
  1339. MBEDTLS_ERR_SSL_ILLEGAL_PARAMETER);
  1340. return MBEDTLS_ERR_SSL_ILLEGAL_PARAMETER;
  1341. }
  1342. p += legacy_session_id_echo_len;
  1343. *buf = p;
  1344. MBEDTLS_SSL_DEBUG_BUF(3, "Session ID", ssl->session_negotiate->id,
  1345. ssl->session_negotiate->id_len);
  1346. return 0;
  1347. }
  1348. /* Parse ServerHello message and configure context
  1349. *
  1350. * struct {
  1351. * ProtocolVersion legacy_version = 0x0303; // TLS 1.2
  1352. * Random random;
  1353. * opaque legacy_session_id_echo<0..32>;
  1354. * CipherSuite cipher_suite;
  1355. * uint8 legacy_compression_method = 0;
  1356. * Extension extensions<6..2^16-1>;
  1357. * } ServerHello;
  1358. */
  1359. MBEDTLS_CHECK_RETURN_CRITICAL
  1360. static int ssl_tls13_parse_server_hello(mbedtls_ssl_context *ssl,
  1361. const unsigned char *buf,
  1362. const unsigned char *end,
  1363. int is_hrr)
  1364. {
  1365. int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
  1366. const unsigned char *p = buf;
  1367. mbedtls_ssl_handshake_params *handshake = ssl->handshake;
  1368. size_t extensions_len;
  1369. const unsigned char *extensions_end;
  1370. uint16_t cipher_suite;
  1371. const mbedtls_ssl_ciphersuite_t *ciphersuite_info;
  1372. int fatal_alert = 0;
  1373. uint32_t allowed_extensions_mask;
  1374. int hs_msg_type = is_hrr ? MBEDTLS_SSL_TLS1_3_HS_HELLO_RETRY_REQUEST :
  1375. MBEDTLS_SSL_HS_SERVER_HELLO;
  1376. /*
  1377. * Check there is space for minimal fields
  1378. *
  1379. * - legacy_version ( 2 bytes)
  1380. * - random (MBEDTLS_SERVER_HELLO_RANDOM_LEN bytes)
  1381. * - legacy_session_id_echo ( 1 byte ), minimum size
  1382. * - cipher_suite ( 2 bytes)
  1383. * - legacy_compression_method ( 1 byte )
  1384. */
  1385. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, MBEDTLS_SERVER_HELLO_RANDOM_LEN + 6);
  1386. MBEDTLS_SSL_DEBUG_BUF(4, "server hello", p, end - p);
  1387. MBEDTLS_SSL_DEBUG_BUF(3, "server hello, version", p, 2);
  1388. /* ...
  1389. * ProtocolVersion legacy_version = 0x0303; // TLS 1.2
  1390. * ...
  1391. * with ProtocolVersion defined as:
  1392. * uint16 ProtocolVersion;
  1393. */
  1394. if (mbedtls_ssl_read_version(p, ssl->conf->transport) !=
  1395. MBEDTLS_SSL_VERSION_TLS1_2) {
  1396. MBEDTLS_SSL_DEBUG_MSG(1, ("Unsupported version of TLS."));
  1397. MBEDTLS_SSL_PEND_FATAL_ALERT(MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION,
  1398. MBEDTLS_ERR_SSL_BAD_PROTOCOL_VERSION);
  1399. ret = MBEDTLS_ERR_SSL_BAD_PROTOCOL_VERSION;
  1400. goto cleanup;
  1401. }
  1402. p += 2;
  1403. /* ...
  1404. * Random random;
  1405. * ...
  1406. * with Random defined as:
  1407. * opaque Random[MBEDTLS_SERVER_HELLO_RANDOM_LEN];
  1408. */
  1409. if (!is_hrr) {
  1410. memcpy(&handshake->randbytes[MBEDTLS_CLIENT_HELLO_RANDOM_LEN], p,
  1411. MBEDTLS_SERVER_HELLO_RANDOM_LEN);
  1412. MBEDTLS_SSL_DEBUG_BUF(3, "server hello, random bytes",
  1413. p, MBEDTLS_SERVER_HELLO_RANDOM_LEN);
  1414. }
  1415. p += MBEDTLS_SERVER_HELLO_RANDOM_LEN;
  1416. /* ...
  1417. * opaque legacy_session_id_echo<0..32>;
  1418. * ...
  1419. */
  1420. if (ssl_tls13_check_server_hello_session_id_echo(ssl, &p, end) != 0) {
  1421. fatal_alert = MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER;
  1422. goto cleanup;
  1423. }
  1424. /* ...
  1425. * CipherSuite cipher_suite;
  1426. * ...
  1427. * with CipherSuite defined as:
  1428. * uint8 CipherSuite[2];
  1429. */
  1430. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, 2);
  1431. cipher_suite = MBEDTLS_GET_UINT16_BE(p, 0);
  1432. p += 2;
  1433. ciphersuite_info = mbedtls_ssl_ciphersuite_from_id(cipher_suite);
  1434. /*
  1435. * Check whether this ciphersuite is valid and offered.
  1436. */
  1437. if ((mbedtls_ssl_validate_ciphersuite(ssl, ciphersuite_info,
  1438. ssl->tls_version,
  1439. ssl->tls_version) != 0) ||
  1440. !mbedtls_ssl_tls13_cipher_suite_is_offered(ssl, cipher_suite)) {
  1441. fatal_alert = MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER;
  1442. }
  1443. /*
  1444. * If we received an HRR before and that the proposed selected
  1445. * ciphersuite in this server hello is not the same as the one
  1446. * proposed in the HRR, we abort the handshake and send an
  1447. * "illegal_parameter" alert.
  1448. */
  1449. else if ((!is_hrr) && handshake->hello_retry_request_flag &&
  1450. (cipher_suite != ssl->session_negotiate->ciphersuite)) {
  1451. fatal_alert = MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER;
  1452. }
  1453. if (fatal_alert == MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER) {
  1454. MBEDTLS_SSL_DEBUG_MSG(1, ("invalid ciphersuite(%04x) parameter",
  1455. cipher_suite));
  1456. goto cleanup;
  1457. }
  1458. /* Configure ciphersuites */
  1459. mbedtls_ssl_optimize_checksum(ssl, ciphersuite_info);
  1460. handshake->ciphersuite_info = ciphersuite_info;
  1461. MBEDTLS_SSL_DEBUG_MSG(3, ("server hello, chosen ciphersuite: ( %04x ) - %s",
  1462. cipher_suite, ciphersuite_info->name));
  1463. #if defined(MBEDTLS_HAVE_TIME)
  1464. ssl->session_negotiate->start = mbedtls_time(NULL);
  1465. #endif /* MBEDTLS_HAVE_TIME */
  1466. /* ...
  1467. * uint8 legacy_compression_method = 0;
  1468. * ...
  1469. */
  1470. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, 1);
  1471. if (p[0] != MBEDTLS_SSL_COMPRESS_NULL) {
  1472. MBEDTLS_SSL_DEBUG_MSG(1, ("bad legacy compression method"));
  1473. fatal_alert = MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER;
  1474. goto cleanup;
  1475. }
  1476. p++;
  1477. /* ...
  1478. * Extension extensions<6..2^16-1>;
  1479. * ...
  1480. * struct {
  1481. * ExtensionType extension_type; (2 bytes)
  1482. * opaque extension_data<0..2^16-1>;
  1483. * } Extension;
  1484. */
  1485. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, 2);
  1486. extensions_len = MBEDTLS_GET_UINT16_BE(p, 0);
  1487. p += 2;
  1488. /* Check extensions do not go beyond the buffer of data. */
  1489. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, extensions_len);
  1490. extensions_end = p + extensions_len;
  1491. MBEDTLS_SSL_DEBUG_BUF(3, "server hello extensions", p, extensions_len);
  1492. handshake->received_extensions = MBEDTLS_SSL_EXT_MASK_NONE;
  1493. allowed_extensions_mask = is_hrr ?
  1494. MBEDTLS_SSL_TLS1_3_ALLOWED_EXTS_OF_HRR :
  1495. MBEDTLS_SSL_TLS1_3_ALLOWED_EXTS_OF_SH;
  1496. while (p < extensions_end) {
  1497. unsigned int extension_type;
  1498. size_t extension_data_len;
  1499. const unsigned char *extension_data_end;
  1500. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, extensions_end, 4);
  1501. extension_type = MBEDTLS_GET_UINT16_BE(p, 0);
  1502. extension_data_len = MBEDTLS_GET_UINT16_BE(p, 2);
  1503. p += 4;
  1504. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, extensions_end, extension_data_len);
  1505. extension_data_end = p + extension_data_len;
  1506. ret = mbedtls_ssl_tls13_check_received_extension(
  1507. ssl, hs_msg_type, extension_type, allowed_extensions_mask);
  1508. if (ret != 0) {
  1509. return ret;
  1510. }
  1511. switch (extension_type) {
  1512. case MBEDTLS_TLS_EXT_COOKIE:
  1513. ret = ssl_tls13_parse_cookie_ext(ssl,
  1514. p, extension_data_end);
  1515. if (ret != 0) {
  1516. MBEDTLS_SSL_DEBUG_RET(1,
  1517. "ssl_tls13_parse_cookie_ext",
  1518. ret);
  1519. goto cleanup;
  1520. }
  1521. break;
  1522. case MBEDTLS_TLS_EXT_SUPPORTED_VERSIONS:
  1523. ret = ssl_tls13_parse_supported_versions_ext(ssl,
  1524. p,
  1525. extension_data_end);
  1526. if (ret != 0) {
  1527. goto cleanup;
  1528. }
  1529. break;
  1530. #if defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_SOME_PSK_ENABLED)
  1531. case MBEDTLS_TLS_EXT_PRE_SHARED_KEY:
  1532. MBEDTLS_SSL_DEBUG_MSG(3, ("found pre_shared_key extension"));
  1533. if ((ret = ssl_tls13_parse_server_pre_shared_key_ext(
  1534. ssl, p, extension_data_end)) != 0) {
  1535. MBEDTLS_SSL_DEBUG_RET(
  1536. 1, ("ssl_tls13_parse_server_pre_shared_key_ext"), ret);
  1537. return ret;
  1538. }
  1539. break;
  1540. #endif
  1541. case MBEDTLS_TLS_EXT_KEY_SHARE:
  1542. MBEDTLS_SSL_DEBUG_MSG(3, ("found key_shares extension"));
  1543. if (!mbedtls_ssl_conf_tls13_is_some_ephemeral_enabled(ssl)) {
  1544. fatal_alert = MBEDTLS_SSL_ALERT_MSG_UNSUPPORTED_EXT;
  1545. goto cleanup;
  1546. }
  1547. if (is_hrr) {
  1548. ret = ssl_tls13_parse_hrr_key_share_ext(ssl,
  1549. p, extension_data_end);
  1550. } else {
  1551. ret = ssl_tls13_parse_key_share_ext(ssl,
  1552. p, extension_data_end);
  1553. }
  1554. if (ret != 0) {
  1555. MBEDTLS_SSL_DEBUG_RET(1,
  1556. "ssl_tls13_parse_key_share_ext",
  1557. ret);
  1558. goto cleanup;
  1559. }
  1560. break;
  1561. default:
  1562. ret = MBEDTLS_ERR_SSL_INTERNAL_ERROR;
  1563. goto cleanup;
  1564. }
  1565. p += extension_data_len;
  1566. }
  1567. MBEDTLS_SSL_PRINT_EXTS(3, hs_msg_type, handshake->received_extensions);
  1568. cleanup:
  1569. if (fatal_alert == MBEDTLS_SSL_ALERT_MSG_UNSUPPORTED_EXT) {
  1570. MBEDTLS_SSL_PEND_FATAL_ALERT(MBEDTLS_SSL_ALERT_MSG_UNSUPPORTED_EXT,
  1571. MBEDTLS_ERR_SSL_UNSUPPORTED_EXTENSION);
  1572. ret = MBEDTLS_ERR_SSL_UNSUPPORTED_EXTENSION;
  1573. } else if (fatal_alert == MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER) {
  1574. MBEDTLS_SSL_PEND_FATAL_ALERT(MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER,
  1575. MBEDTLS_ERR_SSL_ILLEGAL_PARAMETER);
  1576. ret = MBEDTLS_ERR_SSL_ILLEGAL_PARAMETER;
  1577. }
  1578. return ret;
  1579. }
  1580. #if defined(MBEDTLS_DEBUG_C)
  1581. static const char *ssl_tls13_get_kex_mode_str(int mode)
  1582. {
  1583. switch (mode) {
  1584. case MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK:
  1585. return "psk";
  1586. case MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL:
  1587. return "ephemeral";
  1588. case MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL:
  1589. return "psk_ephemeral";
  1590. default:
  1591. return "unknown mode";
  1592. }
  1593. }
  1594. #endif /* MBEDTLS_DEBUG_C */
  1595. MBEDTLS_CHECK_RETURN_CRITICAL
  1596. static int ssl_tls13_postprocess_server_hello(mbedtls_ssl_context *ssl)
  1597. {
  1598. int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
  1599. mbedtls_ssl_handshake_params *handshake = ssl->handshake;
  1600. /* Determine the key exchange mode:
  1601. * 1) If both the pre_shared_key and key_share extensions were received
  1602. * then the key exchange mode is PSK with EPHEMERAL.
  1603. * 2) If only the pre_shared_key extension was received then the key
  1604. * exchange mode is PSK-only.
  1605. * 3) If only the key_share extension was received then the key
  1606. * exchange mode is EPHEMERAL-only.
  1607. */
  1608. switch (handshake->received_extensions &
  1609. (MBEDTLS_SSL_EXT_MASK(PRE_SHARED_KEY) |
  1610. MBEDTLS_SSL_EXT_MASK(KEY_SHARE))) {
  1611. /* Only the pre_shared_key extension was received */
  1612. case MBEDTLS_SSL_EXT_MASK(PRE_SHARED_KEY):
  1613. handshake->key_exchange_mode =
  1614. MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK;
  1615. break;
  1616. /* Only the key_share extension was received */
  1617. case MBEDTLS_SSL_EXT_MASK(KEY_SHARE):
  1618. handshake->key_exchange_mode =
  1619. MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL;
  1620. break;
  1621. /* Both the pre_shared_key and key_share extensions were received */
  1622. case (MBEDTLS_SSL_EXT_MASK(PRE_SHARED_KEY) |
  1623. MBEDTLS_SSL_EXT_MASK(KEY_SHARE)):
  1624. handshake->key_exchange_mode =
  1625. MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL;
  1626. break;
  1627. /* Neither pre_shared_key nor key_share extension was received */
  1628. default:
  1629. MBEDTLS_SSL_DEBUG_MSG(1, ("Unknown key exchange."));
  1630. ret = MBEDTLS_ERR_SSL_HANDSHAKE_FAILURE;
  1631. goto cleanup;
  1632. }
  1633. if (!mbedtls_ssl_conf_tls13_is_kex_mode_enabled(
  1634. ssl, handshake->key_exchange_mode)) {
  1635. ret = MBEDTLS_ERR_SSL_HANDSHAKE_FAILURE;
  1636. MBEDTLS_SSL_DEBUG_MSG(
  1637. 2, ("Key exchange mode(%s) is not supported.",
  1638. ssl_tls13_get_kex_mode_str(handshake->key_exchange_mode)));
  1639. goto cleanup;
  1640. }
  1641. MBEDTLS_SSL_DEBUG_MSG(
  1642. 3, ("Selected key exchange mode: %s",
  1643. ssl_tls13_get_kex_mode_str(handshake->key_exchange_mode)));
  1644. /* Start the TLS 1.3 key scheduling if not already done.
  1645. *
  1646. * If we proposed early data then we have already derived an
  1647. * early secret using the selected PSK and its associated hash.
  1648. * It means that if the negotiated key exchange mode is psk or
  1649. * psk_ephemeral, we have already correctly computed the
  1650. * early secret and thus we do not do it again. In all other
  1651. * cases we compute it here.
  1652. */
  1653. #if defined(MBEDTLS_SSL_EARLY_DATA)
  1654. if (ssl->early_data_state == MBEDTLS_SSL_EARLY_DATA_STATE_NO_IND_SENT ||
  1655. handshake->key_exchange_mode ==
  1656. MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL)
  1657. #endif
  1658. {
  1659. ret = mbedtls_ssl_tls13_key_schedule_stage_early(ssl);
  1660. if (ret != 0) {
  1661. MBEDTLS_SSL_DEBUG_RET(
  1662. 1, "mbedtls_ssl_tls13_key_schedule_stage_early", ret);
  1663. goto cleanup;
  1664. }
  1665. }
  1666. ret = mbedtls_ssl_tls13_compute_handshake_transform(ssl);
  1667. if (ret != 0) {
  1668. MBEDTLS_SSL_DEBUG_RET(1,
  1669. "mbedtls_ssl_tls13_compute_handshake_transform",
  1670. ret);
  1671. goto cleanup;
  1672. }
  1673. mbedtls_ssl_set_inbound_transform(ssl, handshake->transform_handshake);
  1674. MBEDTLS_SSL_DEBUG_MSG(1, ("Switch to handshake keys for inbound traffic"));
  1675. ssl->session_in = ssl->session_negotiate;
  1676. cleanup:
  1677. if (ret != 0) {
  1678. MBEDTLS_SSL_PEND_FATAL_ALERT(
  1679. MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE,
  1680. MBEDTLS_ERR_SSL_HANDSHAKE_FAILURE);
  1681. }
  1682. return ret;
  1683. }
  1684. MBEDTLS_CHECK_RETURN_CRITICAL
  1685. static int ssl_tls13_postprocess_hrr(mbedtls_ssl_context *ssl)
  1686. {
  1687. int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
  1688. mbedtls_ssl_session_reset_msg_layer(ssl, 0);
  1689. /*
  1690. * We are going to re-generate a shared secret corresponding to the group
  1691. * selected by the server, which is different from the group for which we
  1692. * generated a shared secret in the first client hello.
  1693. * Thus, reset the shared secret.
  1694. */
  1695. ret = ssl_tls13_reset_key_share(ssl);
  1696. if (ret != 0) {
  1697. return ret;
  1698. }
  1699. ssl->session_negotiate->ciphersuite = ssl->handshake->ciphersuite_info->id;
  1700. #if defined(MBEDTLS_SSL_EARLY_DATA)
  1701. if (ssl->early_data_state != MBEDTLS_SSL_EARLY_DATA_STATE_NO_IND_SENT) {
  1702. ssl->early_data_state = MBEDTLS_SSL_EARLY_DATA_STATE_REJECTED;
  1703. }
  1704. #endif
  1705. return 0;
  1706. }
  1707. /*
  1708. * Wait and parse ServerHello handshake message.
  1709. * Handler for MBEDTLS_SSL_SERVER_HELLO
  1710. */
  1711. MBEDTLS_CHECK_RETURN_CRITICAL
  1712. static int ssl_tls13_process_server_hello(mbedtls_ssl_context *ssl)
  1713. {
  1714. int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
  1715. unsigned char *buf = NULL;
  1716. size_t buf_len = 0;
  1717. int is_hrr = 0;
  1718. MBEDTLS_SSL_DEBUG_MSG(2, ("=> %s", __func__));
  1719. MBEDTLS_SSL_PROC_CHK(mbedtls_ssl_tls13_fetch_handshake_msg(
  1720. ssl, MBEDTLS_SSL_HS_SERVER_HELLO, &buf, &buf_len));
  1721. ret = ssl_tls13_preprocess_server_hello(ssl, buf, buf + buf_len);
  1722. if (ret < 0) {
  1723. goto cleanup;
  1724. } else {
  1725. is_hrr = (ret == SSL_SERVER_HELLO_HRR);
  1726. }
  1727. if (ret == SSL_SERVER_HELLO_TLS1_2) {
  1728. ret = 0;
  1729. goto cleanup;
  1730. }
  1731. MBEDTLS_SSL_PROC_CHK(ssl_tls13_parse_server_hello(ssl, buf,
  1732. buf + buf_len,
  1733. is_hrr));
  1734. if (is_hrr) {
  1735. MBEDTLS_SSL_PROC_CHK(mbedtls_ssl_reset_transcript_for_hrr(ssl));
  1736. }
  1737. MBEDTLS_SSL_PROC_CHK(mbedtls_ssl_add_hs_msg_to_checksum(
  1738. ssl, MBEDTLS_SSL_HS_SERVER_HELLO, buf, buf_len));
  1739. if (is_hrr) {
  1740. MBEDTLS_SSL_PROC_CHK(ssl_tls13_postprocess_hrr(ssl));
  1741. #if defined(MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE)
  1742. /* If not offering early data, the client sends a dummy CCS record
  1743. * immediately before its second flight. This may either be before
  1744. * its second ClientHello or before its encrypted handshake flight.
  1745. */
  1746. mbedtls_ssl_handshake_set_state(
  1747. ssl, MBEDTLS_SSL_CLIENT_CCS_BEFORE_2ND_CLIENT_HELLO);
  1748. #else
  1749. mbedtls_ssl_handshake_set_state(ssl, MBEDTLS_SSL_CLIENT_HELLO);
  1750. #endif /* MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE */
  1751. } else {
  1752. MBEDTLS_SSL_PROC_CHK(ssl_tls13_postprocess_server_hello(ssl));
  1753. mbedtls_ssl_handshake_set_state(ssl, MBEDTLS_SSL_ENCRYPTED_EXTENSIONS);
  1754. }
  1755. cleanup:
  1756. MBEDTLS_SSL_DEBUG_MSG(2, ("<= %s ( %s )", __func__,
  1757. is_hrr ? "HelloRetryRequest" : "ServerHello"));
  1758. return ret;
  1759. }
  1760. /*
  1761. *
  1762. * Handler for MBEDTLS_SSL_ENCRYPTED_EXTENSIONS
  1763. *
  1764. * The EncryptedExtensions message contains any extensions which
  1765. * should be protected, i.e., any which are not needed to establish
  1766. * the cryptographic context.
  1767. */
  1768. /* Parse EncryptedExtensions message
  1769. * struct {
  1770. * Extension extensions<0..2^16-1>;
  1771. * } EncryptedExtensions;
  1772. */
  1773. MBEDTLS_CHECK_RETURN_CRITICAL
  1774. static int ssl_tls13_parse_encrypted_extensions(mbedtls_ssl_context *ssl,
  1775. const unsigned char *buf,
  1776. const unsigned char *end)
  1777. {
  1778. int ret = 0;
  1779. size_t extensions_len;
  1780. const unsigned char *p = buf;
  1781. const unsigned char *extensions_end;
  1782. mbedtls_ssl_handshake_params *handshake = ssl->handshake;
  1783. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, 2);
  1784. extensions_len = MBEDTLS_GET_UINT16_BE(p, 0);
  1785. p += 2;
  1786. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, extensions_len);
  1787. extensions_end = p + extensions_len;
  1788. MBEDTLS_SSL_DEBUG_BUF(3, "encrypted extensions", p, extensions_len);
  1789. handshake->received_extensions = MBEDTLS_SSL_EXT_MASK_NONE;
  1790. while (p < extensions_end) {
  1791. unsigned int extension_type;
  1792. size_t extension_data_len;
  1793. /*
  1794. * struct {
  1795. * ExtensionType extension_type; (2 bytes)
  1796. * opaque extension_data<0..2^16-1>;
  1797. * } Extension;
  1798. */
  1799. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, extensions_end, 4);
  1800. extension_type = MBEDTLS_GET_UINT16_BE(p, 0);
  1801. extension_data_len = MBEDTLS_GET_UINT16_BE(p, 2);
  1802. p += 4;
  1803. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, extensions_end, extension_data_len);
  1804. ret = mbedtls_ssl_tls13_check_received_extension(
  1805. ssl, MBEDTLS_SSL_HS_ENCRYPTED_EXTENSIONS, extension_type,
  1806. MBEDTLS_SSL_TLS1_3_ALLOWED_EXTS_OF_EE);
  1807. if (ret != 0) {
  1808. return ret;
  1809. }
  1810. switch (extension_type) {
  1811. #if defined(MBEDTLS_SSL_ALPN)
  1812. case MBEDTLS_TLS_EXT_ALPN:
  1813. MBEDTLS_SSL_DEBUG_MSG(3, ("found alpn extension"));
  1814. if ((ret = ssl_tls13_parse_alpn_ext(
  1815. ssl, p, (size_t) extension_data_len)) != 0) {
  1816. return ret;
  1817. }
  1818. break;
  1819. #endif /* MBEDTLS_SSL_ALPN */
  1820. #if defined(MBEDTLS_SSL_EARLY_DATA)
  1821. case MBEDTLS_TLS_EXT_EARLY_DATA:
  1822. if (extension_data_len != 0) {
  1823. /* The message must be empty. */
  1824. MBEDTLS_SSL_PEND_FATAL_ALERT(MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR,
  1825. MBEDTLS_ERR_SSL_DECODE_ERROR);
  1826. return MBEDTLS_ERR_SSL_DECODE_ERROR;
  1827. }
  1828. break;
  1829. #endif /* MBEDTLS_SSL_EARLY_DATA */
  1830. #if defined(MBEDTLS_SSL_RECORD_SIZE_LIMIT)
  1831. case MBEDTLS_TLS_EXT_RECORD_SIZE_LIMIT:
  1832. MBEDTLS_SSL_DEBUG_MSG(3, ("found record_size_limit extension"));
  1833. ret = mbedtls_ssl_tls13_parse_record_size_limit_ext(
  1834. ssl, p, p + extension_data_len);
  1835. if (ret != 0) {
  1836. MBEDTLS_SSL_DEBUG_RET(
  1837. 1, ("mbedtls_ssl_tls13_parse_record_size_limit_ext"), ret);
  1838. return ret;
  1839. }
  1840. break;
  1841. #endif /* MBEDTLS_SSL_RECORD_SIZE_LIMIT */
  1842. default:
  1843. MBEDTLS_SSL_PRINT_EXT(
  1844. 3, MBEDTLS_SSL_HS_ENCRYPTED_EXTENSIONS,
  1845. extension_type, "( ignored )");
  1846. break;
  1847. }
  1848. p += extension_data_len;
  1849. }
  1850. if ((handshake->received_extensions & MBEDTLS_SSL_EXT_MASK(RECORD_SIZE_LIMIT)) &&
  1851. (handshake->received_extensions & MBEDTLS_SSL_EXT_MASK(MAX_FRAGMENT_LENGTH))) {
  1852. MBEDTLS_SSL_DEBUG_MSG(3,
  1853. (
  1854. "Record size limit extension cannot be used with max fragment length extension"));
  1855. MBEDTLS_SSL_PEND_FATAL_ALERT(
  1856. MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER,
  1857. MBEDTLS_ERR_SSL_ILLEGAL_PARAMETER);
  1858. return MBEDTLS_ERR_SSL_ILLEGAL_PARAMETER;
  1859. }
  1860. MBEDTLS_SSL_PRINT_EXTS(3, MBEDTLS_SSL_HS_ENCRYPTED_EXTENSIONS,
  1861. handshake->received_extensions);
  1862. /* Check that we consumed all the message. */
  1863. if (p != end) {
  1864. MBEDTLS_SSL_DEBUG_MSG(1, ("EncryptedExtension lengths misaligned"));
  1865. MBEDTLS_SSL_PEND_FATAL_ALERT(MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR,
  1866. MBEDTLS_ERR_SSL_DECODE_ERROR);
  1867. return MBEDTLS_ERR_SSL_DECODE_ERROR;
  1868. }
  1869. return ret;
  1870. }
  1871. MBEDTLS_CHECK_RETURN_CRITICAL
  1872. static int ssl_tls13_process_encrypted_extensions(mbedtls_ssl_context *ssl)
  1873. {
  1874. int ret;
  1875. unsigned char *buf;
  1876. size_t buf_len;
  1877. mbedtls_ssl_handshake_params *handshake = ssl->handshake;
  1878. MBEDTLS_SSL_DEBUG_MSG(2, ("=> parse encrypted extensions"));
  1879. MBEDTLS_SSL_PROC_CHK(mbedtls_ssl_tls13_fetch_handshake_msg(
  1880. ssl, MBEDTLS_SSL_HS_ENCRYPTED_EXTENSIONS,
  1881. &buf, &buf_len));
  1882. /* Process the message contents */
  1883. MBEDTLS_SSL_PROC_CHK(
  1884. ssl_tls13_parse_encrypted_extensions(ssl, buf, buf + buf_len));
  1885. #if defined(MBEDTLS_SSL_EARLY_DATA)
  1886. if (handshake->received_extensions & MBEDTLS_SSL_EXT_MASK(EARLY_DATA)) {
  1887. /* RFC8446 4.2.11
  1888. * If the server supplies an "early_data" extension, the
  1889. * client MUST verify that the server's selected_identity
  1890. * is 0. If any other value is returned, the client MUST
  1891. * abort the handshake with an "illegal_parameter" alert.
  1892. *
  1893. * RFC 8446 4.2.10
  1894. * In order to accept early data, the server MUST have accepted a PSK
  1895. * cipher suite and selected the first key offered in the client's
  1896. * "pre_shared_key" extension. In addition, it MUST verify that the
  1897. * following values are the same as those associated with the
  1898. * selected PSK:
  1899. * - The TLS version number
  1900. * - The selected cipher suite
  1901. * - The selected ALPN [RFC7301] protocol, if any
  1902. *
  1903. * The server has sent an early data extension in its Encrypted
  1904. * Extension message thus accepted to receive early data. We
  1905. * check here that the additional constraints on the handshake
  1906. * parameters, when early data are exchanged, are met,
  1907. * namely:
  1908. * - a PSK has been selected for the handshake
  1909. * - the selected PSK for the handshake was the first one proposed
  1910. * by the client.
  1911. * - the selected ciphersuite for the handshake is the ciphersuite
  1912. * associated with the selected PSK.
  1913. */
  1914. if ((!mbedtls_ssl_tls13_key_exchange_mode_with_psk(ssl)) ||
  1915. handshake->selected_identity != 0 ||
  1916. handshake->ciphersuite_info->id !=
  1917. ssl->session_negotiate->ciphersuite) {
  1918. MBEDTLS_SSL_PEND_FATAL_ALERT(
  1919. MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER,
  1920. MBEDTLS_ERR_SSL_ILLEGAL_PARAMETER);
  1921. return MBEDTLS_ERR_SSL_ILLEGAL_PARAMETER;
  1922. }
  1923. ssl->early_data_state = MBEDTLS_SSL_EARLY_DATA_STATE_ACCEPTED;
  1924. } else if (ssl->early_data_state !=
  1925. MBEDTLS_SSL_EARLY_DATA_STATE_NO_IND_SENT) {
  1926. ssl->early_data_state = MBEDTLS_SSL_EARLY_DATA_STATE_REJECTED;
  1927. }
  1928. #endif
  1929. /*
  1930. * In case the client has proposed a PSK associated with a ticket,
  1931. * `ssl->session_negotiate->ciphersuite` still contains at this point the
  1932. * identifier of the ciphersuite associated with the ticket. This is that
  1933. * way because, if an exchange of early data is agreed upon, we need
  1934. * it to check that the ciphersuite selected for the handshake is the
  1935. * ticket ciphersuite (see above). This information is not needed
  1936. * anymore thus we can now set it to the identifier of the ciphersuite
  1937. * used in this session under negotiation.
  1938. */
  1939. ssl->session_negotiate->ciphersuite = handshake->ciphersuite_info->id;
  1940. MBEDTLS_SSL_PROC_CHK(mbedtls_ssl_add_hs_msg_to_checksum(
  1941. ssl, MBEDTLS_SSL_HS_ENCRYPTED_EXTENSIONS,
  1942. buf, buf_len));
  1943. #if defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED)
  1944. if (mbedtls_ssl_tls13_key_exchange_mode_with_psk(ssl)) {
  1945. mbedtls_ssl_handshake_set_state(ssl, MBEDTLS_SSL_SERVER_FINISHED);
  1946. } else {
  1947. mbedtls_ssl_handshake_set_state(ssl, MBEDTLS_SSL_CERTIFICATE_REQUEST);
  1948. }
  1949. #else
  1950. ((void) ssl);
  1951. mbedtls_ssl_handshake_set_state(ssl, MBEDTLS_SSL_SERVER_FINISHED);
  1952. #endif
  1953. cleanup:
  1954. MBEDTLS_SSL_DEBUG_MSG(2, ("<= parse encrypted extensions"));
  1955. return ret;
  1956. }
  1957. #if defined(MBEDTLS_SSL_EARLY_DATA)
  1958. /*
  1959. * Handler for MBEDTLS_SSL_END_OF_EARLY_DATA
  1960. *
  1961. * RFC 8446 section 4.5
  1962. *
  1963. * struct {} EndOfEarlyData;
  1964. *
  1965. * If the server sent an "early_data" extension in EncryptedExtensions, the
  1966. * client MUST send an EndOfEarlyData message after receiving the server
  1967. * Finished. Otherwise, the client MUST NOT send an EndOfEarlyData message.
  1968. */
  1969. MBEDTLS_CHECK_RETURN_CRITICAL
  1970. static int ssl_tls13_write_end_of_early_data(mbedtls_ssl_context *ssl)
  1971. {
  1972. int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
  1973. unsigned char *buf = NULL;
  1974. size_t buf_len;
  1975. MBEDTLS_SSL_DEBUG_MSG(2, ("=> write EndOfEarlyData"));
  1976. MBEDTLS_SSL_PROC_CHK(mbedtls_ssl_start_handshake_msg(
  1977. ssl, MBEDTLS_SSL_HS_END_OF_EARLY_DATA,
  1978. &buf, &buf_len));
  1979. MBEDTLS_SSL_PROC_CHK(mbedtls_ssl_add_hs_hdr_to_checksum(
  1980. ssl, MBEDTLS_SSL_HS_END_OF_EARLY_DATA, 0));
  1981. MBEDTLS_SSL_PROC_CHK(
  1982. mbedtls_ssl_finish_handshake_msg(ssl, buf_len, 0));
  1983. mbedtls_ssl_handshake_set_state(ssl, MBEDTLS_SSL_CLIENT_CERTIFICATE);
  1984. cleanup:
  1985. MBEDTLS_SSL_DEBUG_MSG(2, ("<= write EndOfEarlyData"));
  1986. return ret;
  1987. }
  1988. int mbedtls_ssl_get_early_data_status(mbedtls_ssl_context *ssl)
  1989. {
  1990. if ((ssl->conf->endpoint != MBEDTLS_SSL_IS_CLIENT) ||
  1991. (!mbedtls_ssl_is_handshake_over(ssl))) {
  1992. return MBEDTLS_ERR_SSL_BAD_INPUT_DATA;
  1993. }
  1994. switch (ssl->early_data_state) {
  1995. case MBEDTLS_SSL_EARLY_DATA_STATE_NO_IND_SENT:
  1996. return MBEDTLS_SSL_EARLY_DATA_STATUS_NOT_INDICATED;
  1997. break;
  1998. case MBEDTLS_SSL_EARLY_DATA_STATE_REJECTED:
  1999. return MBEDTLS_SSL_EARLY_DATA_STATUS_REJECTED;
  2000. break;
  2001. case MBEDTLS_SSL_EARLY_DATA_STATE_SERVER_FINISHED_RECEIVED:
  2002. return MBEDTLS_SSL_EARLY_DATA_STATUS_ACCEPTED;
  2003. break;
  2004. default:
  2005. return MBEDTLS_ERR_SSL_INTERNAL_ERROR;
  2006. }
  2007. }
  2008. #endif /* MBEDTLS_SSL_EARLY_DATA */
  2009. #if defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED)
  2010. /*
  2011. * STATE HANDLING: CertificateRequest
  2012. *
  2013. */
  2014. #define SSL_CERTIFICATE_REQUEST_EXPECT_REQUEST 0
  2015. #define SSL_CERTIFICATE_REQUEST_SKIP 1
  2016. /* Coordination:
  2017. * Deals with the ambiguity of not knowing if a CertificateRequest
  2018. * will be sent. Returns a negative code on failure, or
  2019. * - SSL_CERTIFICATE_REQUEST_EXPECT_REQUEST
  2020. * - SSL_CERTIFICATE_REQUEST_SKIP
  2021. * indicating if a Certificate Request is expected or not.
  2022. */
  2023. MBEDTLS_CHECK_RETURN_CRITICAL
  2024. static int ssl_tls13_certificate_request_coordinate(mbedtls_ssl_context *ssl)
  2025. {
  2026. int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
  2027. if ((ret = mbedtls_ssl_read_record(ssl, 0)) != 0) {
  2028. MBEDTLS_SSL_DEBUG_RET(1, "mbedtls_ssl_read_record", ret);
  2029. return ret;
  2030. }
  2031. ssl->keep_current_message = 1;
  2032. if ((ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE) &&
  2033. (ssl->in_msg[0] == MBEDTLS_SSL_HS_CERTIFICATE_REQUEST)) {
  2034. MBEDTLS_SSL_DEBUG_MSG(3, ("got a certificate request"));
  2035. return SSL_CERTIFICATE_REQUEST_EXPECT_REQUEST;
  2036. }
  2037. MBEDTLS_SSL_DEBUG_MSG(3, ("got no certificate request"));
  2038. return SSL_CERTIFICATE_REQUEST_SKIP;
  2039. }
  2040. /*
  2041. * ssl_tls13_parse_certificate_request()
  2042. * Parse certificate request
  2043. * struct {
  2044. * opaque certificate_request_context<0..2^8-1>;
  2045. * Extension extensions<2..2^16-1>;
  2046. * } CertificateRequest;
  2047. */
  2048. MBEDTLS_CHECK_RETURN_CRITICAL
  2049. static int ssl_tls13_parse_certificate_request(mbedtls_ssl_context *ssl,
  2050. const unsigned char *buf,
  2051. const unsigned char *end)
  2052. {
  2053. int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
  2054. const unsigned char *p = buf;
  2055. size_t certificate_request_context_len = 0;
  2056. size_t extensions_len = 0;
  2057. const unsigned char *extensions_end;
  2058. mbedtls_ssl_handshake_params *handshake = ssl->handshake;
  2059. /* ...
  2060. * opaque certificate_request_context<0..2^8-1>
  2061. * ...
  2062. */
  2063. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, 1);
  2064. certificate_request_context_len = (size_t) p[0];
  2065. p += 1;
  2066. if (certificate_request_context_len > 0) {
  2067. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, certificate_request_context_len);
  2068. MBEDTLS_SSL_DEBUG_BUF(3, "Certificate Request Context",
  2069. p, certificate_request_context_len);
  2070. handshake->certificate_request_context =
  2071. mbedtls_calloc(1, certificate_request_context_len);
  2072. if (handshake->certificate_request_context == NULL) {
  2073. MBEDTLS_SSL_DEBUG_MSG(1, ("buffer too small"));
  2074. return MBEDTLS_ERR_SSL_ALLOC_FAILED;
  2075. }
  2076. memcpy(handshake->certificate_request_context, p,
  2077. certificate_request_context_len);
  2078. p += certificate_request_context_len;
  2079. }
  2080. /* ...
  2081. * Extension extensions<2..2^16-1>;
  2082. * ...
  2083. */
  2084. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, 2);
  2085. extensions_len = MBEDTLS_GET_UINT16_BE(p, 0);
  2086. p += 2;
  2087. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, extensions_len);
  2088. extensions_end = p + extensions_len;
  2089. handshake->received_extensions = MBEDTLS_SSL_EXT_MASK_NONE;
  2090. while (p < extensions_end) {
  2091. unsigned int extension_type;
  2092. size_t extension_data_len;
  2093. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, extensions_end, 4);
  2094. extension_type = MBEDTLS_GET_UINT16_BE(p, 0);
  2095. extension_data_len = MBEDTLS_GET_UINT16_BE(p, 2);
  2096. p += 4;
  2097. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, extensions_end, extension_data_len);
  2098. ret = mbedtls_ssl_tls13_check_received_extension(
  2099. ssl, MBEDTLS_SSL_HS_CERTIFICATE_REQUEST, extension_type,
  2100. MBEDTLS_SSL_TLS1_3_ALLOWED_EXTS_OF_CR);
  2101. if (ret != 0) {
  2102. return ret;
  2103. }
  2104. switch (extension_type) {
  2105. case MBEDTLS_TLS_EXT_SIG_ALG:
  2106. MBEDTLS_SSL_DEBUG_MSG(3,
  2107. ("found signature algorithms extension"));
  2108. ret = mbedtls_ssl_parse_sig_alg_ext(ssl, p,
  2109. p + extension_data_len);
  2110. if (ret != 0) {
  2111. return ret;
  2112. }
  2113. break;
  2114. default:
  2115. MBEDTLS_SSL_PRINT_EXT(
  2116. 3, MBEDTLS_SSL_HS_CERTIFICATE_REQUEST,
  2117. extension_type, "( ignored )");
  2118. break;
  2119. }
  2120. p += extension_data_len;
  2121. }
  2122. MBEDTLS_SSL_PRINT_EXTS(3, MBEDTLS_SSL_HS_CERTIFICATE_REQUEST,
  2123. handshake->received_extensions);
  2124. /* Check that we consumed all the message. */
  2125. if (p != end) {
  2126. MBEDTLS_SSL_DEBUG_MSG(1,
  2127. ("CertificateRequest misaligned"));
  2128. goto decode_error;
  2129. }
  2130. /* RFC 8446 section 4.3.2
  2131. *
  2132. * The "signature_algorithms" extension MUST be specified
  2133. */
  2134. if ((handshake->received_extensions & MBEDTLS_SSL_EXT_MASK(SIG_ALG)) == 0) {
  2135. MBEDTLS_SSL_DEBUG_MSG(3,
  2136. ("no signature algorithms extension found"));
  2137. goto decode_error;
  2138. }
  2139. ssl->handshake->client_auth = 1;
  2140. return 0;
  2141. decode_error:
  2142. MBEDTLS_SSL_PEND_FATAL_ALERT(MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR,
  2143. MBEDTLS_ERR_SSL_DECODE_ERROR);
  2144. return MBEDTLS_ERR_SSL_DECODE_ERROR;
  2145. }
  2146. /*
  2147. * Handler for MBEDTLS_SSL_CERTIFICATE_REQUEST
  2148. */
  2149. MBEDTLS_CHECK_RETURN_CRITICAL
  2150. static int ssl_tls13_process_certificate_request(mbedtls_ssl_context *ssl)
  2151. {
  2152. int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
  2153. MBEDTLS_SSL_DEBUG_MSG(2, ("=> parse certificate request"));
  2154. MBEDTLS_SSL_PROC_CHK_NEG(ssl_tls13_certificate_request_coordinate(ssl));
  2155. if (ret == SSL_CERTIFICATE_REQUEST_EXPECT_REQUEST) {
  2156. unsigned char *buf;
  2157. size_t buf_len;
  2158. MBEDTLS_SSL_PROC_CHK(mbedtls_ssl_tls13_fetch_handshake_msg(
  2159. ssl, MBEDTLS_SSL_HS_CERTIFICATE_REQUEST,
  2160. &buf, &buf_len));
  2161. MBEDTLS_SSL_PROC_CHK(ssl_tls13_parse_certificate_request(
  2162. ssl, buf, buf + buf_len));
  2163. MBEDTLS_SSL_PROC_CHK(mbedtls_ssl_add_hs_msg_to_checksum(
  2164. ssl, MBEDTLS_SSL_HS_CERTIFICATE_REQUEST,
  2165. buf, buf_len));
  2166. } else if (ret == SSL_CERTIFICATE_REQUEST_SKIP) {
  2167. ret = 0;
  2168. } else {
  2169. MBEDTLS_SSL_DEBUG_MSG(1, ("should never happen"));
  2170. ret = MBEDTLS_ERR_SSL_INTERNAL_ERROR;
  2171. goto cleanup;
  2172. }
  2173. mbedtls_ssl_handshake_set_state(ssl, MBEDTLS_SSL_SERVER_CERTIFICATE);
  2174. cleanup:
  2175. MBEDTLS_SSL_DEBUG_MSG(2, ("<= parse certificate request"));
  2176. return ret;
  2177. }
  2178. /*
  2179. * Handler for MBEDTLS_SSL_SERVER_CERTIFICATE
  2180. */
  2181. MBEDTLS_CHECK_RETURN_CRITICAL
  2182. static int ssl_tls13_process_server_certificate(mbedtls_ssl_context *ssl)
  2183. {
  2184. int ret;
  2185. ret = mbedtls_ssl_tls13_process_certificate(ssl);
  2186. if (ret != 0) {
  2187. return ret;
  2188. }
  2189. mbedtls_ssl_handshake_set_state(ssl, MBEDTLS_SSL_CERTIFICATE_VERIFY);
  2190. return 0;
  2191. }
  2192. /*
  2193. * Handler for MBEDTLS_SSL_CERTIFICATE_VERIFY
  2194. */
  2195. MBEDTLS_CHECK_RETURN_CRITICAL
  2196. static int ssl_tls13_process_certificate_verify(mbedtls_ssl_context *ssl)
  2197. {
  2198. int ret;
  2199. ret = mbedtls_ssl_tls13_process_certificate_verify(ssl);
  2200. if (ret != 0) {
  2201. return ret;
  2202. }
  2203. mbedtls_ssl_handshake_set_state(ssl, MBEDTLS_SSL_SERVER_FINISHED);
  2204. return 0;
  2205. }
  2206. #endif /* MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED */
  2207. /*
  2208. * Handler for MBEDTLS_SSL_SERVER_FINISHED
  2209. */
  2210. MBEDTLS_CHECK_RETURN_CRITICAL
  2211. static int ssl_tls13_process_server_finished(mbedtls_ssl_context *ssl)
  2212. {
  2213. int ret;
  2214. ret = mbedtls_ssl_tls13_process_finished_message(ssl);
  2215. if (ret != 0) {
  2216. return ret;
  2217. }
  2218. ret = mbedtls_ssl_tls13_compute_application_transform(ssl);
  2219. if (ret != 0) {
  2220. MBEDTLS_SSL_PEND_FATAL_ALERT(
  2221. MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE,
  2222. MBEDTLS_ERR_SSL_HANDSHAKE_FAILURE);
  2223. return ret;
  2224. }
  2225. #if defined(MBEDTLS_SSL_EARLY_DATA)
  2226. if (ssl->early_data_state == MBEDTLS_SSL_EARLY_DATA_STATE_ACCEPTED) {
  2227. ssl->early_data_state = MBEDTLS_SSL_EARLY_DATA_STATE_SERVER_FINISHED_RECEIVED;
  2228. mbedtls_ssl_handshake_set_state(ssl, MBEDTLS_SSL_END_OF_EARLY_DATA);
  2229. } else
  2230. #endif /* MBEDTLS_SSL_EARLY_DATA */
  2231. {
  2232. #if defined(MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE)
  2233. mbedtls_ssl_handshake_set_state(
  2234. ssl, MBEDTLS_SSL_CLIENT_CCS_AFTER_SERVER_FINISHED);
  2235. #else
  2236. mbedtls_ssl_handshake_set_state(ssl, MBEDTLS_SSL_CLIENT_CERTIFICATE);
  2237. #endif /* MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE */
  2238. }
  2239. return 0;
  2240. }
  2241. /*
  2242. * Handler for MBEDTLS_SSL_CLIENT_CERTIFICATE
  2243. */
  2244. MBEDTLS_CHECK_RETURN_CRITICAL
  2245. static int ssl_tls13_write_client_certificate(mbedtls_ssl_context *ssl)
  2246. {
  2247. int non_empty_certificate_msg = 0;
  2248. MBEDTLS_SSL_DEBUG_MSG(1,
  2249. ("Switch to handshake traffic keys for outbound traffic"));
  2250. mbedtls_ssl_set_outbound_transform(ssl, ssl->handshake->transform_handshake);
  2251. #if defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED)
  2252. if (ssl->handshake->client_auth) {
  2253. int ret = mbedtls_ssl_tls13_write_certificate(ssl);
  2254. if (ret != 0) {
  2255. return ret;
  2256. }
  2257. if (mbedtls_ssl_own_cert(ssl) != NULL) {
  2258. non_empty_certificate_msg = 1;
  2259. }
  2260. } else {
  2261. MBEDTLS_SSL_DEBUG_MSG(2, ("skip write certificate"));
  2262. }
  2263. #endif
  2264. if (non_empty_certificate_msg) {
  2265. mbedtls_ssl_handshake_set_state(ssl,
  2266. MBEDTLS_SSL_CLIENT_CERTIFICATE_VERIFY);
  2267. } else {
  2268. MBEDTLS_SSL_DEBUG_MSG(2, ("skip write certificate verify"));
  2269. mbedtls_ssl_handshake_set_state(ssl, MBEDTLS_SSL_CLIENT_FINISHED);
  2270. }
  2271. return 0;
  2272. }
  2273. #if defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED)
  2274. /*
  2275. * Handler for MBEDTLS_SSL_CLIENT_CERTIFICATE_VERIFY
  2276. */
  2277. MBEDTLS_CHECK_RETURN_CRITICAL
  2278. static int ssl_tls13_write_client_certificate_verify(mbedtls_ssl_context *ssl)
  2279. {
  2280. int ret = mbedtls_ssl_tls13_write_certificate_verify(ssl);
  2281. if (ret == 0) {
  2282. mbedtls_ssl_handshake_set_state(ssl, MBEDTLS_SSL_CLIENT_FINISHED);
  2283. }
  2284. return ret;
  2285. }
  2286. #endif /* MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED */
  2287. /*
  2288. * Handler for MBEDTLS_SSL_CLIENT_FINISHED
  2289. */
  2290. MBEDTLS_CHECK_RETURN_CRITICAL
  2291. static int ssl_tls13_write_client_finished(mbedtls_ssl_context *ssl)
  2292. {
  2293. int ret;
  2294. ret = mbedtls_ssl_tls13_write_finished_message(ssl);
  2295. if (ret != 0) {
  2296. return ret;
  2297. }
  2298. ret = mbedtls_ssl_tls13_compute_resumption_master_secret(ssl);
  2299. if (ret != 0) {
  2300. MBEDTLS_SSL_DEBUG_RET(
  2301. 1, "mbedtls_ssl_tls13_compute_resumption_master_secret ", ret);
  2302. return ret;
  2303. }
  2304. mbedtls_ssl_handshake_set_state(ssl, MBEDTLS_SSL_FLUSH_BUFFERS);
  2305. return 0;
  2306. }
  2307. /*
  2308. * Handler for MBEDTLS_SSL_FLUSH_BUFFERS
  2309. */
  2310. MBEDTLS_CHECK_RETURN_CRITICAL
  2311. static int ssl_tls13_flush_buffers(mbedtls_ssl_context *ssl)
  2312. {
  2313. MBEDTLS_SSL_DEBUG_MSG(2, ("handshake: done"));
  2314. mbedtls_ssl_handshake_set_state(ssl, MBEDTLS_SSL_HANDSHAKE_WRAPUP);
  2315. return 0;
  2316. }
  2317. /*
  2318. * Handler for MBEDTLS_SSL_HANDSHAKE_WRAPUP
  2319. */
  2320. MBEDTLS_CHECK_RETURN_CRITICAL
  2321. static int ssl_tls13_handshake_wrapup(mbedtls_ssl_context *ssl)
  2322. {
  2323. mbedtls_ssl_tls13_handshake_wrapup(ssl);
  2324. mbedtls_ssl_handshake_set_state(ssl, MBEDTLS_SSL_HANDSHAKE_OVER);
  2325. return 0;
  2326. }
  2327. #if defined(MBEDTLS_SSL_SESSION_TICKETS)
  2328. #if defined(MBEDTLS_SSL_EARLY_DATA)
  2329. /* From RFC 8446 section 4.2.10
  2330. *
  2331. * struct {
  2332. * select (Handshake.msg_type) {
  2333. * case new_session_ticket: uint32 max_early_data_size;
  2334. * ...
  2335. * };
  2336. * } EarlyDataIndication;
  2337. */
  2338. MBEDTLS_CHECK_RETURN_CRITICAL
  2339. static int ssl_tls13_parse_new_session_ticket_early_data_ext(
  2340. mbedtls_ssl_context *ssl,
  2341. const unsigned char *buf,
  2342. const unsigned char *end)
  2343. {
  2344. mbedtls_ssl_session *session = ssl->session;
  2345. MBEDTLS_SSL_CHK_BUF_READ_PTR(buf, end, 4);
  2346. session->max_early_data_size = MBEDTLS_GET_UINT32_BE(buf, 0);
  2347. mbedtls_ssl_tls13_session_set_ticket_flags(
  2348. session, MBEDTLS_SSL_TLS1_3_TICKET_ALLOW_EARLY_DATA);
  2349. MBEDTLS_SSL_DEBUG_MSG(
  2350. 3, ("received max_early_data_size: %u",
  2351. (unsigned int) session->max_early_data_size));
  2352. return 0;
  2353. }
  2354. #endif /* MBEDTLS_SSL_EARLY_DATA */
  2355. MBEDTLS_CHECK_RETURN_CRITICAL
  2356. static int ssl_tls13_parse_new_session_ticket_exts(mbedtls_ssl_context *ssl,
  2357. const unsigned char *buf,
  2358. const unsigned char *end)
  2359. {
  2360. mbedtls_ssl_handshake_params *handshake = ssl->handshake;
  2361. const unsigned char *p = buf;
  2362. handshake->received_extensions = MBEDTLS_SSL_EXT_MASK_NONE;
  2363. while (p < end) {
  2364. unsigned int extension_type;
  2365. size_t extension_data_len;
  2366. int ret;
  2367. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, 4);
  2368. extension_type = MBEDTLS_GET_UINT16_BE(p, 0);
  2369. extension_data_len = MBEDTLS_GET_UINT16_BE(p, 2);
  2370. p += 4;
  2371. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, extension_data_len);
  2372. ret = mbedtls_ssl_tls13_check_received_extension(
  2373. ssl, MBEDTLS_SSL_HS_NEW_SESSION_TICKET, extension_type,
  2374. MBEDTLS_SSL_TLS1_3_ALLOWED_EXTS_OF_NST);
  2375. if (ret != 0) {
  2376. return ret;
  2377. }
  2378. switch (extension_type) {
  2379. #if defined(MBEDTLS_SSL_EARLY_DATA)
  2380. case MBEDTLS_TLS_EXT_EARLY_DATA:
  2381. ret = ssl_tls13_parse_new_session_ticket_early_data_ext(
  2382. ssl, p, p + extension_data_len);
  2383. if (ret != 0) {
  2384. MBEDTLS_SSL_DEBUG_RET(
  2385. 1, "ssl_tls13_parse_new_session_ticket_early_data_ext",
  2386. ret);
  2387. }
  2388. break;
  2389. #endif /* MBEDTLS_SSL_EARLY_DATA */
  2390. default:
  2391. MBEDTLS_SSL_PRINT_EXT(
  2392. 3, MBEDTLS_SSL_HS_NEW_SESSION_TICKET,
  2393. extension_type, "( ignored )");
  2394. break;
  2395. }
  2396. p += extension_data_len;
  2397. }
  2398. MBEDTLS_SSL_PRINT_EXTS(3, MBEDTLS_SSL_HS_NEW_SESSION_TICKET,
  2399. handshake->received_extensions);
  2400. return 0;
  2401. }
  2402. /*
  2403. * From RFC8446, page 74
  2404. *
  2405. * struct {
  2406. * uint32 ticket_lifetime;
  2407. * uint32 ticket_age_add;
  2408. * opaque ticket_nonce<0..255>;
  2409. * opaque ticket<1..2^16-1>;
  2410. * Extension extensions<0..2^16-2>;
  2411. * } NewSessionTicket;
  2412. *
  2413. */
  2414. MBEDTLS_CHECK_RETURN_CRITICAL
  2415. static int ssl_tls13_parse_new_session_ticket(mbedtls_ssl_context *ssl,
  2416. unsigned char *buf,
  2417. unsigned char *end,
  2418. unsigned char **ticket_nonce,
  2419. size_t *ticket_nonce_len)
  2420. {
  2421. int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
  2422. unsigned char *p = buf;
  2423. mbedtls_ssl_session *session = ssl->session;
  2424. size_t ticket_len;
  2425. unsigned char *ticket;
  2426. size_t extensions_len;
  2427. *ticket_nonce = NULL;
  2428. *ticket_nonce_len = 0;
  2429. /*
  2430. * ticket_lifetime 4 bytes
  2431. * ticket_age_add 4 bytes
  2432. * ticket_nonce_len 1 byte
  2433. */
  2434. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, 9);
  2435. session->ticket_lifetime = MBEDTLS_GET_UINT32_BE(p, 0);
  2436. MBEDTLS_SSL_DEBUG_MSG(3,
  2437. ("ticket_lifetime: %u",
  2438. (unsigned int) session->ticket_lifetime));
  2439. if (session->ticket_lifetime >
  2440. MBEDTLS_SSL_TLS1_3_MAX_ALLOWED_TICKET_LIFETIME) {
  2441. MBEDTLS_SSL_DEBUG_MSG(3, ("ticket_lifetime exceeds 7 days."));
  2442. return MBEDTLS_ERR_SSL_ILLEGAL_PARAMETER;
  2443. }
  2444. session->ticket_age_add = MBEDTLS_GET_UINT32_BE(p, 4);
  2445. MBEDTLS_SSL_DEBUG_MSG(3,
  2446. ("ticket_age_add: %u",
  2447. (unsigned int) session->ticket_age_add));
  2448. *ticket_nonce_len = p[8];
  2449. p += 9;
  2450. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, *ticket_nonce_len);
  2451. *ticket_nonce = p;
  2452. MBEDTLS_SSL_DEBUG_BUF(3, "ticket_nonce:", *ticket_nonce, *ticket_nonce_len);
  2453. p += *ticket_nonce_len;
  2454. /* Ticket */
  2455. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, 2);
  2456. ticket_len = MBEDTLS_GET_UINT16_BE(p, 0);
  2457. p += 2;
  2458. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, ticket_len);
  2459. MBEDTLS_SSL_DEBUG_BUF(3, "received ticket", p, ticket_len);
  2460. /* Check if we previously received a ticket already. */
  2461. if (session->ticket != NULL || session->ticket_len > 0) {
  2462. mbedtls_free(session->ticket);
  2463. session->ticket = NULL;
  2464. session->ticket_len = 0;
  2465. }
  2466. if ((ticket = mbedtls_calloc(1, ticket_len)) == NULL) {
  2467. MBEDTLS_SSL_DEBUG_MSG(1, ("ticket alloc failed"));
  2468. return MBEDTLS_ERR_SSL_ALLOC_FAILED;
  2469. }
  2470. memcpy(ticket, p, ticket_len);
  2471. p += ticket_len;
  2472. session->ticket = ticket;
  2473. session->ticket_len = ticket_len;
  2474. /* Clear all flags in ticket_flags */
  2475. mbedtls_ssl_tls13_session_clear_ticket_flags(
  2476. session, MBEDTLS_SSL_TLS1_3_TICKET_FLAGS_MASK);
  2477. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, 2);
  2478. extensions_len = MBEDTLS_GET_UINT16_BE(p, 0);
  2479. p += 2;
  2480. MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, extensions_len);
  2481. MBEDTLS_SSL_DEBUG_BUF(3, "ticket extension", p, extensions_len);
  2482. ret = ssl_tls13_parse_new_session_ticket_exts(ssl, p, p + extensions_len);
  2483. if (ret != 0) {
  2484. MBEDTLS_SSL_DEBUG_RET(1,
  2485. "ssl_tls13_parse_new_session_ticket_exts",
  2486. ret);
  2487. return ret;
  2488. }
  2489. return 0;
  2490. }
  2491. /* Non negative return values for ssl_tls13_postprocess_new_session_ticket().
  2492. * - POSTPROCESS_NEW_SESSION_TICKET_SIGNAL, all good, we have to signal the
  2493. * application that a valid ticket has been received.
  2494. * - POSTPROCESS_NEW_SESSION_TICKET_DISCARD, no fatal error, we keep the
  2495. * connection alive but we do not signal the ticket to the application.
  2496. */
  2497. #define POSTPROCESS_NEW_SESSION_TICKET_SIGNAL 0
  2498. #define POSTPROCESS_NEW_SESSION_TICKET_DISCARD 1
  2499. MBEDTLS_CHECK_RETURN_CRITICAL
  2500. static int ssl_tls13_postprocess_new_session_ticket(mbedtls_ssl_context *ssl,
  2501. unsigned char *ticket_nonce,
  2502. size_t ticket_nonce_len)
  2503. {
  2504. int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
  2505. mbedtls_ssl_session *session = ssl->session;
  2506. const mbedtls_ssl_ciphersuite_t *ciphersuite_info;
  2507. psa_algorithm_t psa_hash_alg;
  2508. int hash_length;
  2509. if (session->ticket_lifetime == 0) {
  2510. return POSTPROCESS_NEW_SESSION_TICKET_DISCARD;
  2511. }
  2512. #if defined(MBEDTLS_HAVE_TIME)
  2513. /* Store ticket creation time */
  2514. session->ticket_reception_time = mbedtls_ms_time();
  2515. #endif
  2516. ciphersuite_info = mbedtls_ssl_ciphersuite_from_id(session->ciphersuite);
  2517. if (ciphersuite_info == NULL) {
  2518. MBEDTLS_SSL_DEBUG_MSG(1, ("should never happen"));
  2519. return MBEDTLS_ERR_SSL_INTERNAL_ERROR;
  2520. }
  2521. psa_hash_alg = mbedtls_md_psa_alg_from_type((mbedtls_md_type_t) ciphersuite_info->mac);
  2522. hash_length = PSA_HASH_LENGTH(psa_hash_alg);
  2523. if (hash_length == -1 ||
  2524. (size_t) hash_length > sizeof(session->resumption_key)) {
  2525. return MBEDTLS_ERR_SSL_INTERNAL_ERROR;
  2526. }
  2527. MBEDTLS_SSL_DEBUG_BUF(3, "resumption_master_secret",
  2528. session->app_secrets.resumption_master_secret,
  2529. hash_length);
  2530. /* Compute resumption key
  2531. *
  2532. * HKDF-Expand-Label( resumption_master_secret,
  2533. * "resumption", ticket_nonce, Hash.length )
  2534. */
  2535. ret = mbedtls_ssl_tls13_hkdf_expand_label(
  2536. psa_hash_alg,
  2537. session->app_secrets.resumption_master_secret,
  2538. hash_length,
  2539. MBEDTLS_SSL_TLS1_3_LBL_WITH_LEN(resumption),
  2540. ticket_nonce,
  2541. ticket_nonce_len,
  2542. session->resumption_key,
  2543. hash_length);
  2544. if (ret != 0) {
  2545. MBEDTLS_SSL_DEBUG_RET(2,
  2546. "Creating the ticket-resumed PSK failed",
  2547. ret);
  2548. return ret;
  2549. }
  2550. session->resumption_key_len = hash_length;
  2551. MBEDTLS_SSL_DEBUG_BUF(3, "Ticket-resumed PSK",
  2552. session->resumption_key,
  2553. session->resumption_key_len);
  2554. /* Set ticket_flags depends on the selected key exchange modes */
  2555. mbedtls_ssl_tls13_session_set_ticket_flags(
  2556. session, ssl->conf->tls13_kex_modes);
  2557. MBEDTLS_SSL_PRINT_TICKET_FLAGS(4, session->ticket_flags);
  2558. return POSTPROCESS_NEW_SESSION_TICKET_SIGNAL;
  2559. }
  2560. /*
  2561. * Handler for MBEDTLS_SSL_TLS1_3_NEW_SESSION_TICKET
  2562. */
  2563. MBEDTLS_CHECK_RETURN_CRITICAL
  2564. static int ssl_tls13_process_new_session_ticket(mbedtls_ssl_context *ssl)
  2565. {
  2566. int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
  2567. unsigned char *buf;
  2568. size_t buf_len;
  2569. unsigned char *ticket_nonce;
  2570. size_t ticket_nonce_len;
  2571. MBEDTLS_SSL_DEBUG_MSG(2, ("=> parse new session ticket"));
  2572. MBEDTLS_SSL_PROC_CHK(mbedtls_ssl_tls13_fetch_handshake_msg(
  2573. ssl, MBEDTLS_SSL_HS_NEW_SESSION_TICKET,
  2574. &buf, &buf_len));
  2575. /*
  2576. * We are about to update (maybe only partially) ticket data thus block
  2577. * any session export for the time being.
  2578. */
  2579. ssl->session->exported = 1;
  2580. MBEDTLS_SSL_PROC_CHK(ssl_tls13_parse_new_session_ticket(
  2581. ssl, buf, buf + buf_len,
  2582. &ticket_nonce, &ticket_nonce_len));
  2583. MBEDTLS_SSL_PROC_CHK_NEG(ssl_tls13_postprocess_new_session_ticket(
  2584. ssl, ticket_nonce, ticket_nonce_len));
  2585. switch (ret) {
  2586. case POSTPROCESS_NEW_SESSION_TICKET_SIGNAL:
  2587. /*
  2588. * All good, we have received a new valid ticket, session data can
  2589. * be exported now and we signal the ticket to the application.
  2590. */
  2591. ssl->session->exported = 0;
  2592. ret = MBEDTLS_ERR_SSL_RECEIVED_NEW_SESSION_TICKET;
  2593. break;
  2594. case POSTPROCESS_NEW_SESSION_TICKET_DISCARD:
  2595. ret = 0;
  2596. MBEDTLS_SSL_DEBUG_MSG(2, ("Discard new session ticket"));
  2597. break;
  2598. default:
  2599. ret = MBEDTLS_ERR_SSL_INTERNAL_ERROR;
  2600. }
  2601. mbedtls_ssl_handshake_set_state(ssl, MBEDTLS_SSL_HANDSHAKE_OVER);
  2602. cleanup:
  2603. MBEDTLS_SSL_DEBUG_MSG(2, ("<= parse new session ticket"));
  2604. return ret;
  2605. }
  2606. #endif /* MBEDTLS_SSL_SESSION_TICKETS */
  2607. int mbedtls_ssl_tls13_handshake_client_step(mbedtls_ssl_context *ssl)
  2608. {
  2609. int ret = 0;
  2610. switch (ssl->state) {
  2611. case MBEDTLS_SSL_HELLO_REQUEST:
  2612. mbedtls_ssl_handshake_set_state(ssl, MBEDTLS_SSL_CLIENT_HELLO);
  2613. break;
  2614. case MBEDTLS_SSL_CLIENT_HELLO:
  2615. ret = mbedtls_ssl_write_client_hello(ssl);
  2616. break;
  2617. case MBEDTLS_SSL_SERVER_HELLO:
  2618. ret = ssl_tls13_process_server_hello(ssl);
  2619. break;
  2620. case MBEDTLS_SSL_ENCRYPTED_EXTENSIONS:
  2621. ret = ssl_tls13_process_encrypted_extensions(ssl);
  2622. break;
  2623. #if defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED)
  2624. case MBEDTLS_SSL_CERTIFICATE_REQUEST:
  2625. ret = ssl_tls13_process_certificate_request(ssl);
  2626. break;
  2627. case MBEDTLS_SSL_SERVER_CERTIFICATE:
  2628. ret = ssl_tls13_process_server_certificate(ssl);
  2629. break;
  2630. case MBEDTLS_SSL_CERTIFICATE_VERIFY:
  2631. ret = ssl_tls13_process_certificate_verify(ssl);
  2632. break;
  2633. #endif /* MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED */
  2634. case MBEDTLS_SSL_SERVER_FINISHED:
  2635. ret = ssl_tls13_process_server_finished(ssl);
  2636. break;
  2637. #if defined(MBEDTLS_SSL_EARLY_DATA)
  2638. case MBEDTLS_SSL_END_OF_EARLY_DATA:
  2639. ret = ssl_tls13_write_end_of_early_data(ssl);
  2640. break;
  2641. #endif
  2642. case MBEDTLS_SSL_CLIENT_CERTIFICATE:
  2643. ret = ssl_tls13_write_client_certificate(ssl);
  2644. break;
  2645. #if defined(MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED)
  2646. case MBEDTLS_SSL_CLIENT_CERTIFICATE_VERIFY:
  2647. ret = ssl_tls13_write_client_certificate_verify(ssl);
  2648. break;
  2649. #endif /* MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED */
  2650. case MBEDTLS_SSL_CLIENT_FINISHED:
  2651. ret = ssl_tls13_write_client_finished(ssl);
  2652. break;
  2653. case MBEDTLS_SSL_FLUSH_BUFFERS:
  2654. ret = ssl_tls13_flush_buffers(ssl);
  2655. break;
  2656. case MBEDTLS_SSL_HANDSHAKE_WRAPUP:
  2657. ret = ssl_tls13_handshake_wrapup(ssl);
  2658. break;
  2659. /*
  2660. * Injection of dummy-CCS's for middlebox compatibility
  2661. */
  2662. #if defined(MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE)
  2663. case MBEDTLS_SSL_CLIENT_CCS_BEFORE_2ND_CLIENT_HELLO:
  2664. ret = mbedtls_ssl_tls13_write_change_cipher_spec(ssl);
  2665. if (ret != 0) {
  2666. break;
  2667. }
  2668. mbedtls_ssl_handshake_set_state(ssl, MBEDTLS_SSL_CLIENT_HELLO);
  2669. break;
  2670. case MBEDTLS_SSL_CLIENT_CCS_AFTER_SERVER_FINISHED:
  2671. ret = mbedtls_ssl_tls13_write_change_cipher_spec(ssl);
  2672. if (ret != 0) {
  2673. break;
  2674. }
  2675. mbedtls_ssl_handshake_set_state(ssl, MBEDTLS_SSL_CLIENT_CERTIFICATE);
  2676. break;
  2677. #if defined(MBEDTLS_SSL_EARLY_DATA)
  2678. case MBEDTLS_SSL_CLIENT_CCS_AFTER_CLIENT_HELLO:
  2679. ret = mbedtls_ssl_tls13_write_change_cipher_spec(ssl);
  2680. if (ret == 0) {
  2681. mbedtls_ssl_handshake_set_state(ssl, MBEDTLS_SSL_SERVER_HELLO);
  2682. MBEDTLS_SSL_DEBUG_MSG(
  2683. 1, ("Switch to early data keys for outbound traffic"));
  2684. mbedtls_ssl_set_outbound_transform(
  2685. ssl, ssl->handshake->transform_earlydata);
  2686. ssl->early_data_state = MBEDTLS_SSL_EARLY_DATA_STATE_CAN_WRITE;
  2687. }
  2688. break;
  2689. #endif /* MBEDTLS_SSL_EARLY_DATA */
  2690. #endif /* MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE */
  2691. #if defined(MBEDTLS_SSL_SESSION_TICKETS)
  2692. case MBEDTLS_SSL_TLS1_3_NEW_SESSION_TICKET:
  2693. ret = ssl_tls13_process_new_session_ticket(ssl);
  2694. break;
  2695. #endif /* MBEDTLS_SSL_SESSION_TICKETS */
  2696. default:
  2697. MBEDTLS_SSL_DEBUG_MSG(1, ("invalid state %d", ssl->state));
  2698. return MBEDTLS_ERR_SSL_BAD_INPUT_DATA;
  2699. }
  2700. return ret;
  2701. }
  2702. #endif /* MBEDTLS_SSL_CLI_C && MBEDTLS_SSL_PROTO_TLS1_3 */