ssl_srv.c 136 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096
  1. /*
  2. * SSLv3/TLSv1 server-side functions
  3. *
  4. * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
  5. * SPDX-License-Identifier: Apache-2.0
  6. *
  7. * Licensed under the Apache License, Version 2.0 (the "License"); you may
  8. * not use this file except in compliance with the License.
  9. * You may obtain a copy of the License at
  10. *
  11. * http://www.apache.org/licenses/LICENSE-2.0
  12. *
  13. * Unless required by applicable law or agreed to in writing, software
  14. * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  15. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  16. * See the License for the specific language governing permissions and
  17. * limitations under the License.
  18. *
  19. * This file is part of mbed TLS (https://tls.mbed.org)
  20. */
  21. #if !defined(MBEDTLS_CONFIG_FILE)
  22. #include "mbedtls/config.h"
  23. #else
  24. #include MBEDTLS_CONFIG_FILE
  25. #endif
  26. #if defined(MBEDTLS_SSL_SRV_C)
  27. #if defined(MBEDTLS_PLATFORM_C)
  28. #include "mbedtls/platform.h"
  29. #else
  30. #include <stdlib.h>
  31. #define mbedtls_calloc calloc
  32. #define mbedtls_free free
  33. #endif
  34. #include "mbedtls/debug.h"
  35. #include "mbedtls/ssl.h"
  36. #include "mbedtls/ssl_internal.h"
  37. #include <string.h>
  38. #if defined(MBEDTLS_ECP_C)
  39. #include "mbedtls/ecp.h"
  40. #endif
  41. #if defined(MBEDTLS_HAVE_TIME)
  42. #include "mbedtls/platform_time.h"
  43. #endif
  44. #if defined(MBEDTLS_SSL_SESSION_TICKETS)
  45. /* Implementation that should never be optimized out by the compiler */
  46. static void mbedtls_zeroize( void *v, size_t n ) {
  47. volatile unsigned char *p = v; while( n-- ) *p++ = 0;
  48. }
  49. #endif
  50. #if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY)
  51. int mbedtls_ssl_set_client_transport_id( mbedtls_ssl_context *ssl,
  52. const unsigned char *info,
  53. size_t ilen )
  54. {
  55. if( ssl->conf->endpoint != MBEDTLS_SSL_IS_SERVER )
  56. return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA );
  57. mbedtls_free( ssl->cli_id );
  58. if( ( ssl->cli_id = mbedtls_calloc( 1, ilen ) ) == NULL )
  59. return( MBEDTLS_ERR_SSL_ALLOC_FAILED );
  60. memcpy( ssl->cli_id, info, ilen );
  61. ssl->cli_id_len = ilen;
  62. return( 0 );
  63. }
  64. void mbedtls_ssl_conf_dtls_cookies( mbedtls_ssl_config *conf,
  65. mbedtls_ssl_cookie_write_t *f_cookie_write,
  66. mbedtls_ssl_cookie_check_t *f_cookie_check,
  67. void *p_cookie )
  68. {
  69. conf->f_cookie_write = f_cookie_write;
  70. conf->f_cookie_check = f_cookie_check;
  71. conf->p_cookie = p_cookie;
  72. }
  73. #endif /* MBEDTLS_SSL_DTLS_HELLO_VERIFY */
  74. #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION)
  75. static int ssl_parse_servername_ext( mbedtls_ssl_context *ssl,
  76. const unsigned char *buf,
  77. size_t len )
  78. {
  79. int ret;
  80. size_t servername_list_size, hostname_len;
  81. const unsigned char *p;
  82. MBEDTLS_SSL_DEBUG_MSG( 3, ( "parse ServerName extension" ) );
  83. servername_list_size = ( ( buf[0] << 8 ) | ( buf[1] ) );
  84. if( servername_list_size + 2 != len )
  85. {
  86. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  87. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  88. MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR );
  89. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  90. }
  91. p = buf + 2;
  92. while( servername_list_size > 0 )
  93. {
  94. hostname_len = ( ( p[1] << 8 ) | p[2] );
  95. if( hostname_len + 3 > servername_list_size )
  96. {
  97. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  98. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  99. MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR );
  100. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  101. }
  102. if( p[0] == MBEDTLS_TLS_EXT_SERVERNAME_HOSTNAME )
  103. {
  104. ret = ssl->conf->f_sni( ssl->conf->p_sni,
  105. ssl, p + 3, hostname_len );
  106. if( ret != 0 )
  107. {
  108. MBEDTLS_SSL_DEBUG_RET( 1, "ssl_sni_wrapper", ret );
  109. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  110. MBEDTLS_SSL_ALERT_MSG_UNRECOGNIZED_NAME );
  111. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  112. }
  113. return( 0 );
  114. }
  115. servername_list_size -= hostname_len + 3;
  116. p += hostname_len + 3;
  117. }
  118. if( servername_list_size != 0 )
  119. {
  120. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  121. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  122. MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER );
  123. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  124. }
  125. return( 0 );
  126. }
  127. #endif /* MBEDTLS_SSL_SERVER_NAME_INDICATION */
  128. static int ssl_parse_renegotiation_info( mbedtls_ssl_context *ssl,
  129. const unsigned char *buf,
  130. size_t len )
  131. {
  132. #if defined(MBEDTLS_SSL_RENEGOTIATION)
  133. if( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE )
  134. {
  135. /* Check verify-data in constant-time. The length OTOH is no secret */
  136. if( len != 1 + ssl->verify_data_len ||
  137. buf[0] != ssl->verify_data_len ||
  138. mbedtls_ssl_safer_memcmp( buf + 1, ssl->peer_verify_data,
  139. ssl->verify_data_len ) != 0 )
  140. {
  141. MBEDTLS_SSL_DEBUG_MSG( 1, ( "non-matching renegotiation info" ) );
  142. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  143. MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE );
  144. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  145. }
  146. }
  147. else
  148. #endif /* MBEDTLS_SSL_RENEGOTIATION */
  149. {
  150. if( len != 1 || buf[0] != 0x0 )
  151. {
  152. MBEDTLS_SSL_DEBUG_MSG( 1, ( "non-zero length renegotiation info" ) );
  153. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  154. MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE );
  155. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  156. }
  157. ssl->secure_renegotiation = MBEDTLS_SSL_SECURE_RENEGOTIATION;
  158. }
  159. return( 0 );
  160. }
  161. #if defined(MBEDTLS_SSL_PROTO_TLS1_2) && \
  162. defined(MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED)
  163. /*
  164. * Status of the implementation of signature-algorithms extension:
  165. *
  166. * Currently, we are only considering the signature-algorithm extension
  167. * to pick a ciphersuite which allows us to send the ServerKeyExchange
  168. * message with a signature-hash combination that the user allows.
  169. *
  170. * We do *not* check whether all certificates in our certificate
  171. * chain are signed with an allowed signature-hash pair.
  172. * This needs to be done at a later stage.
  173. *
  174. */
  175. static int ssl_parse_signature_algorithms_ext( mbedtls_ssl_context *ssl,
  176. const unsigned char *buf,
  177. size_t len )
  178. {
  179. size_t sig_alg_list_size;
  180. const unsigned char *p;
  181. const unsigned char *end = buf + len;
  182. mbedtls_md_type_t md_cur;
  183. mbedtls_pk_type_t sig_cur;
  184. sig_alg_list_size = ( ( buf[0] << 8 ) | ( buf[1] ) );
  185. if( sig_alg_list_size + 2 != len ||
  186. sig_alg_list_size % 2 != 0 )
  187. {
  188. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  189. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  190. MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR );
  191. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  192. }
  193. /* Currently we only guarantee signing the ServerKeyExchange message according
  194. * to the constraints specified in this extension (see above), so it suffices
  195. * to remember only one suitable hash for each possible signature algorithm.
  196. *
  197. * This will change when we also consider certificate signatures,
  198. * in which case we will need to remember the whole signature-hash
  199. * pair list from the extension.
  200. */
  201. for( p = buf + 2; p < end; p += 2 )
  202. {
  203. /* Silently ignore unknown signature or hash algorithms. */
  204. if( ( sig_cur = mbedtls_ssl_pk_alg_from_sig( p[1] ) ) == MBEDTLS_PK_NONE )
  205. {
  206. MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v3, signature_algorithm ext"
  207. " unknown sig alg encoding %d", p[1] ) );
  208. continue;
  209. }
  210. /* Check if we support the hash the user proposes */
  211. md_cur = mbedtls_ssl_md_alg_from_hash( p[0] );
  212. if( md_cur == MBEDTLS_MD_NONE )
  213. {
  214. MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v3, signature_algorithm ext:"
  215. " unknown hash alg encoding %d", p[0] ) );
  216. continue;
  217. }
  218. if( mbedtls_ssl_check_sig_hash( ssl, md_cur ) == 0 )
  219. {
  220. mbedtls_ssl_sig_hash_set_add( &ssl->handshake->hash_algs, sig_cur, md_cur );
  221. MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v3, signature_algorithm ext:"
  222. " match sig %d and hash %d",
  223. sig_cur, md_cur ) );
  224. }
  225. else
  226. {
  227. MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v3, signature_algorithm ext: "
  228. "hash alg %d not supported", md_cur ) );
  229. }
  230. }
  231. return( 0 );
  232. }
  233. #endif /* MBEDTLS_SSL_PROTO_TLS1_2 &&
  234. MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED */
  235. #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) || \
  236. defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED)
  237. static int ssl_parse_supported_elliptic_curves( mbedtls_ssl_context *ssl,
  238. const unsigned char *buf,
  239. size_t len )
  240. {
  241. size_t list_size, our_size;
  242. const unsigned char *p;
  243. const mbedtls_ecp_curve_info *curve_info, **curves;
  244. list_size = ( ( buf[0] << 8 ) | ( buf[1] ) );
  245. if( list_size + 2 != len ||
  246. list_size % 2 != 0 )
  247. {
  248. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  249. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  250. MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR );
  251. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  252. }
  253. /* Should never happen unless client duplicates the extension */
  254. if( ssl->handshake->curves != NULL )
  255. {
  256. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  257. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  258. MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR );
  259. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  260. }
  261. /* Don't allow our peer to make us allocate too much memory,
  262. * and leave room for a final 0 */
  263. our_size = list_size / 2 + 1;
  264. if( our_size > MBEDTLS_ECP_DP_MAX )
  265. our_size = MBEDTLS_ECP_DP_MAX;
  266. if( ( curves = mbedtls_calloc( our_size, sizeof( *curves ) ) ) == NULL )
  267. {
  268. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  269. MBEDTLS_SSL_ALERT_MSG_INTERNAL_ERROR );
  270. return( MBEDTLS_ERR_SSL_ALLOC_FAILED );
  271. }
  272. ssl->handshake->curves = curves;
  273. p = buf + 2;
  274. while( list_size > 0 && our_size > 1 )
  275. {
  276. curve_info = mbedtls_ecp_curve_info_from_tls_id( ( p[0] << 8 ) | p[1] );
  277. if( curve_info != NULL )
  278. {
  279. *curves++ = curve_info;
  280. our_size--;
  281. }
  282. list_size -= 2;
  283. p += 2;
  284. }
  285. return( 0 );
  286. }
  287. static int ssl_parse_supported_point_formats( mbedtls_ssl_context *ssl,
  288. const unsigned char *buf,
  289. size_t len )
  290. {
  291. size_t list_size;
  292. const unsigned char *p;
  293. list_size = buf[0];
  294. if( list_size + 1 != len )
  295. {
  296. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  297. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  298. MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR );
  299. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  300. }
  301. p = buf + 1;
  302. while( list_size > 0 )
  303. {
  304. if( p[0] == MBEDTLS_ECP_PF_UNCOMPRESSED ||
  305. p[0] == MBEDTLS_ECP_PF_COMPRESSED )
  306. {
  307. #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C)
  308. ssl->handshake->ecdh_ctx.point_format = p[0];
  309. #endif
  310. #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED)
  311. ssl->handshake->ecjpake_ctx.point_format = p[0];
  312. #endif
  313. MBEDTLS_SSL_DEBUG_MSG( 4, ( "point format selected: %d", p[0] ) );
  314. return( 0 );
  315. }
  316. list_size--;
  317. p++;
  318. }
  319. return( 0 );
  320. }
  321. #endif /* MBEDTLS_ECDH_C || MBEDTLS_ECDSA_C ||
  322. MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */
  323. #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED)
  324. static int ssl_parse_ecjpake_kkpp( mbedtls_ssl_context *ssl,
  325. const unsigned char *buf,
  326. size_t len )
  327. {
  328. int ret;
  329. if( mbedtls_ecjpake_check( &ssl->handshake->ecjpake_ctx ) != 0 )
  330. {
  331. MBEDTLS_SSL_DEBUG_MSG( 3, ( "skip ecjpake kkpp extension" ) );
  332. return( 0 );
  333. }
  334. if( ( ret = mbedtls_ecjpake_read_round_one( &ssl->handshake->ecjpake_ctx,
  335. buf, len ) ) != 0 )
  336. {
  337. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_read_round_one", ret );
  338. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  339. MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER );
  340. return( ret );
  341. }
  342. /* Only mark the extension as OK when we're sure it is */
  343. ssl->handshake->cli_exts |= MBEDTLS_TLS_EXT_ECJPAKE_KKPP_OK;
  344. return( 0 );
  345. }
  346. #endif /* MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */
  347. #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH)
  348. static int ssl_parse_max_fragment_length_ext( mbedtls_ssl_context *ssl,
  349. const unsigned char *buf,
  350. size_t len )
  351. {
  352. if( len != 1 || buf[0] >= MBEDTLS_SSL_MAX_FRAG_LEN_INVALID )
  353. {
  354. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  355. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  356. MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER );
  357. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  358. }
  359. ssl->session_negotiate->mfl_code = buf[0];
  360. return( 0 );
  361. }
  362. #endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */
  363. #if defined(MBEDTLS_SSL_TRUNCATED_HMAC)
  364. static int ssl_parse_truncated_hmac_ext( mbedtls_ssl_context *ssl,
  365. const unsigned char *buf,
  366. size_t len )
  367. {
  368. if( len != 0 )
  369. {
  370. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  371. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  372. MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR );
  373. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  374. }
  375. ((void) buf);
  376. if( ssl->conf->trunc_hmac == MBEDTLS_SSL_TRUNC_HMAC_ENABLED )
  377. ssl->session_negotiate->trunc_hmac = MBEDTLS_SSL_TRUNC_HMAC_ENABLED;
  378. return( 0 );
  379. }
  380. #endif /* MBEDTLS_SSL_TRUNCATED_HMAC */
  381. #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC)
  382. static int ssl_parse_encrypt_then_mac_ext( mbedtls_ssl_context *ssl,
  383. const unsigned char *buf,
  384. size_t len )
  385. {
  386. if( len != 0 )
  387. {
  388. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  389. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  390. MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR );
  391. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  392. }
  393. ((void) buf);
  394. if( ssl->conf->encrypt_then_mac == MBEDTLS_SSL_ETM_ENABLED &&
  395. ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_0 )
  396. {
  397. ssl->session_negotiate->encrypt_then_mac = MBEDTLS_SSL_ETM_ENABLED;
  398. }
  399. return( 0 );
  400. }
  401. #endif /* MBEDTLS_SSL_ENCRYPT_THEN_MAC */
  402. #if defined(MBEDTLS_SSL_EXTENDED_MASTER_SECRET)
  403. static int ssl_parse_extended_ms_ext( mbedtls_ssl_context *ssl,
  404. const unsigned char *buf,
  405. size_t len )
  406. {
  407. if( len != 0 )
  408. {
  409. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  410. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  411. MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR );
  412. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  413. }
  414. ((void) buf);
  415. if( ssl->conf->extended_ms == MBEDTLS_SSL_EXTENDED_MS_ENABLED &&
  416. ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_0 )
  417. {
  418. ssl->handshake->extended_ms = MBEDTLS_SSL_EXTENDED_MS_ENABLED;
  419. }
  420. return( 0 );
  421. }
  422. #endif /* MBEDTLS_SSL_EXTENDED_MASTER_SECRET */
  423. #if defined(MBEDTLS_SSL_SESSION_TICKETS)
  424. static int ssl_parse_session_ticket_ext( mbedtls_ssl_context *ssl,
  425. unsigned char *buf,
  426. size_t len )
  427. {
  428. int ret;
  429. mbedtls_ssl_session session;
  430. mbedtls_ssl_session_init( &session );
  431. if( ssl->conf->f_ticket_parse == NULL ||
  432. ssl->conf->f_ticket_write == NULL )
  433. {
  434. return( 0 );
  435. }
  436. /* Remember the client asked us to send a new ticket */
  437. ssl->handshake->new_session_ticket = 1;
  438. MBEDTLS_SSL_DEBUG_MSG( 3, ( "ticket length: %d", len ) );
  439. if( len == 0 )
  440. return( 0 );
  441. #if defined(MBEDTLS_SSL_RENEGOTIATION)
  442. if( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE )
  443. {
  444. MBEDTLS_SSL_DEBUG_MSG( 3, ( "ticket rejected: renegotiating" ) );
  445. return( 0 );
  446. }
  447. #endif /* MBEDTLS_SSL_RENEGOTIATION */
  448. /*
  449. * Failures are ok: just ignore the ticket and proceed.
  450. */
  451. if( ( ret = ssl->conf->f_ticket_parse( ssl->conf->p_ticket, &session,
  452. buf, len ) ) != 0 )
  453. {
  454. mbedtls_ssl_session_free( &session );
  455. if( ret == MBEDTLS_ERR_SSL_INVALID_MAC )
  456. MBEDTLS_SSL_DEBUG_MSG( 3, ( "ticket is not authentic" ) );
  457. else if( ret == MBEDTLS_ERR_SSL_SESSION_TICKET_EXPIRED )
  458. MBEDTLS_SSL_DEBUG_MSG( 3, ( "ticket is expired" ) );
  459. else
  460. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_ticket_parse", ret );
  461. return( 0 );
  462. }
  463. /*
  464. * Keep the session ID sent by the client, since we MUST send it back to
  465. * inform them we're accepting the ticket (RFC 5077 section 3.4)
  466. */
  467. session.id_len = ssl->session_negotiate->id_len;
  468. memcpy( &session.id, ssl->session_negotiate->id, session.id_len );
  469. mbedtls_ssl_session_free( ssl->session_negotiate );
  470. memcpy( ssl->session_negotiate, &session, sizeof( mbedtls_ssl_session ) );
  471. /* Zeroize instead of free as we copied the content */
  472. mbedtls_zeroize( &session, sizeof( mbedtls_ssl_session ) );
  473. MBEDTLS_SSL_DEBUG_MSG( 3, ( "session successfully restored from ticket" ) );
  474. ssl->handshake->resume = 1;
  475. /* Don't send a new ticket after all, this one is OK */
  476. ssl->handshake->new_session_ticket = 0;
  477. return( 0 );
  478. }
  479. #endif /* MBEDTLS_SSL_SESSION_TICKETS */
  480. #if defined(MBEDTLS_SSL_ALPN)
  481. static int ssl_parse_alpn_ext( mbedtls_ssl_context *ssl,
  482. const unsigned char *buf, size_t len )
  483. {
  484. size_t list_len, cur_len, ours_len;
  485. const unsigned char *theirs, *start, *end;
  486. const char **ours;
  487. /* If ALPN not configured, just ignore the extension */
  488. if( ssl->conf->alpn_list == NULL )
  489. return( 0 );
  490. /*
  491. * opaque ProtocolName<1..2^8-1>;
  492. *
  493. * struct {
  494. * ProtocolName protocol_name_list<2..2^16-1>
  495. * } ProtocolNameList;
  496. */
  497. /* Min length is 2 (list_len) + 1 (name_len) + 1 (name) */
  498. if( len < 4 )
  499. {
  500. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  501. MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR );
  502. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  503. }
  504. list_len = ( buf[0] << 8 ) | buf[1];
  505. if( list_len != len - 2 )
  506. {
  507. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  508. MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR );
  509. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  510. }
  511. /*
  512. * Validate peer's list (lengths)
  513. */
  514. start = buf + 2;
  515. end = buf + len;
  516. for( theirs = start; theirs != end; theirs += cur_len )
  517. {
  518. cur_len = *theirs++;
  519. /* Current identifier must fit in list */
  520. if( cur_len > (size_t)( end - theirs ) )
  521. {
  522. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  523. MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR );
  524. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  525. }
  526. /* Empty strings MUST NOT be included */
  527. if( cur_len == 0 )
  528. {
  529. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  530. MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER );
  531. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  532. }
  533. }
  534. /*
  535. * Use our order of preference
  536. */
  537. for( ours = ssl->conf->alpn_list; *ours != NULL; ours++ )
  538. {
  539. ours_len = strlen( *ours );
  540. for( theirs = start; theirs != end; theirs += cur_len )
  541. {
  542. cur_len = *theirs++;
  543. if( cur_len == ours_len &&
  544. memcmp( theirs, *ours, cur_len ) == 0 )
  545. {
  546. ssl->alpn_chosen = *ours;
  547. return( 0 );
  548. }
  549. }
  550. }
  551. /* If we get there, no match was found */
  552. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  553. MBEDTLS_SSL_ALERT_MSG_NO_APPLICATION_PROTOCOL );
  554. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  555. }
  556. #endif /* MBEDTLS_SSL_ALPN */
  557. /*
  558. * Auxiliary functions for ServerHello parsing and related actions
  559. */
  560. #if defined(MBEDTLS_X509_CRT_PARSE_C)
  561. /*
  562. * Return 0 if the given key uses one of the acceptable curves, -1 otherwise
  563. */
  564. #if defined(MBEDTLS_ECDSA_C)
  565. static int ssl_check_key_curve( mbedtls_pk_context *pk,
  566. const mbedtls_ecp_curve_info **curves )
  567. {
  568. const mbedtls_ecp_curve_info **crv = curves;
  569. mbedtls_ecp_group_id grp_id = mbedtls_pk_ec( *pk )->grp.id;
  570. while( *crv != NULL )
  571. {
  572. if( (*crv)->grp_id == grp_id )
  573. return( 0 );
  574. crv++;
  575. }
  576. return( -1 );
  577. }
  578. #endif /* MBEDTLS_ECDSA_C */
  579. /*
  580. * Try picking a certificate for this ciphersuite,
  581. * return 0 on success and -1 on failure.
  582. */
  583. static int ssl_pick_cert( mbedtls_ssl_context *ssl,
  584. const mbedtls_ssl_ciphersuite_t * ciphersuite_info )
  585. {
  586. mbedtls_ssl_key_cert *cur, *list, *fallback = NULL;
  587. mbedtls_pk_type_t pk_alg =
  588. mbedtls_ssl_get_ciphersuite_sig_pk_alg( ciphersuite_info );
  589. uint32_t flags;
  590. #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION)
  591. if( ssl->handshake->sni_key_cert != NULL )
  592. list = ssl->handshake->sni_key_cert;
  593. else
  594. #endif
  595. list = ssl->conf->key_cert;
  596. if( pk_alg == MBEDTLS_PK_NONE )
  597. return( 0 );
  598. MBEDTLS_SSL_DEBUG_MSG( 3, ( "ciphersuite requires certificate" ) );
  599. if( list == NULL )
  600. {
  601. MBEDTLS_SSL_DEBUG_MSG( 3, ( "server has no certificate" ) );
  602. return( -1 );
  603. }
  604. for( cur = list; cur != NULL; cur = cur->next )
  605. {
  606. MBEDTLS_SSL_DEBUG_CRT( 3, "candidate certificate chain, certificate",
  607. cur->cert );
  608. if( ! mbedtls_pk_can_do( cur->key, pk_alg ) )
  609. {
  610. MBEDTLS_SSL_DEBUG_MSG( 3, ( "certificate mismatch: key type" ) );
  611. continue;
  612. }
  613. /*
  614. * This avoids sending the client a cert it'll reject based on
  615. * keyUsage or other extensions.
  616. *
  617. * It also allows the user to provision different certificates for
  618. * different uses based on keyUsage, eg if they want to avoid signing
  619. * and decrypting with the same RSA key.
  620. */
  621. if( mbedtls_ssl_check_cert_usage( cur->cert, ciphersuite_info,
  622. MBEDTLS_SSL_IS_SERVER, &flags ) != 0 )
  623. {
  624. MBEDTLS_SSL_DEBUG_MSG( 3, ( "certificate mismatch: "
  625. "(extended) key usage extension" ) );
  626. continue;
  627. }
  628. #if defined(MBEDTLS_ECDSA_C)
  629. if( pk_alg == MBEDTLS_PK_ECDSA &&
  630. ssl_check_key_curve( cur->key, ssl->handshake->curves ) != 0 )
  631. {
  632. MBEDTLS_SSL_DEBUG_MSG( 3, ( "certificate mismatch: elliptic curve" ) );
  633. continue;
  634. }
  635. #endif
  636. /*
  637. * Try to select a SHA-1 certificate for pre-1.2 clients, but still
  638. * present them a SHA-higher cert rather than failing if it's the only
  639. * one we got that satisfies the other conditions.
  640. */
  641. if( ssl->minor_ver < MBEDTLS_SSL_MINOR_VERSION_3 &&
  642. cur->cert->sig_md != MBEDTLS_MD_SHA1 )
  643. {
  644. if( fallback == NULL )
  645. fallback = cur;
  646. {
  647. MBEDTLS_SSL_DEBUG_MSG( 3, ( "certificate not preferred: "
  648. "sha-2 with pre-TLS 1.2 client" ) );
  649. continue;
  650. }
  651. }
  652. /* If we get there, we got a winner */
  653. break;
  654. }
  655. if( cur == NULL )
  656. cur = fallback;
  657. /* Do not update ssl->handshake->key_cert unless there is a match */
  658. if( cur != NULL )
  659. {
  660. ssl->handshake->key_cert = cur;
  661. MBEDTLS_SSL_DEBUG_CRT( 3, "selected certificate chain, certificate",
  662. ssl->handshake->key_cert->cert );
  663. return( 0 );
  664. }
  665. return( -1 );
  666. }
  667. #endif /* MBEDTLS_X509_CRT_PARSE_C */
  668. /*
  669. * Check if a given ciphersuite is suitable for use with our config/keys/etc
  670. * Sets ciphersuite_info only if the suite matches.
  671. */
  672. static int ssl_ciphersuite_match( mbedtls_ssl_context *ssl, int suite_id,
  673. const mbedtls_ssl_ciphersuite_t **ciphersuite_info )
  674. {
  675. const mbedtls_ssl_ciphersuite_t *suite_info;
  676. #if defined(MBEDTLS_SSL_PROTO_TLS1_2) && \
  677. defined(MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED)
  678. mbedtls_pk_type_t sig_type;
  679. #endif
  680. suite_info = mbedtls_ssl_ciphersuite_from_id( suite_id );
  681. if( suite_info == NULL )
  682. {
  683. MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) );
  684. return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
  685. }
  686. MBEDTLS_SSL_DEBUG_MSG( 3, ( "trying ciphersuite: %s", suite_info->name ) );
  687. if( suite_info->min_minor_ver > ssl->minor_ver ||
  688. suite_info->max_minor_ver < ssl->minor_ver )
  689. {
  690. MBEDTLS_SSL_DEBUG_MSG( 3, ( "ciphersuite mismatch: version" ) );
  691. return( 0 );
  692. }
  693. #if defined(MBEDTLS_SSL_PROTO_DTLS)
  694. if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM &&
  695. ( suite_info->flags & MBEDTLS_CIPHERSUITE_NODTLS ) )
  696. return( 0 );
  697. #endif
  698. #if defined(MBEDTLS_ARC4_C)
  699. if( ssl->conf->arc4_disabled == MBEDTLS_SSL_ARC4_DISABLED &&
  700. suite_info->cipher == MBEDTLS_CIPHER_ARC4_128 )
  701. {
  702. MBEDTLS_SSL_DEBUG_MSG( 3, ( "ciphersuite mismatch: rc4" ) );
  703. return( 0 );
  704. }
  705. #endif
  706. #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED)
  707. if( suite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE &&
  708. ( ssl->handshake->cli_exts & MBEDTLS_TLS_EXT_ECJPAKE_KKPP_OK ) == 0 )
  709. {
  710. MBEDTLS_SSL_DEBUG_MSG( 3, ( "ciphersuite mismatch: ecjpake "
  711. "not configured or ext missing" ) );
  712. return( 0 );
  713. }
  714. #endif
  715. #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C)
  716. if( mbedtls_ssl_ciphersuite_uses_ec( suite_info ) &&
  717. ( ssl->handshake->curves == NULL ||
  718. ssl->handshake->curves[0] == NULL ) )
  719. {
  720. MBEDTLS_SSL_DEBUG_MSG( 3, ( "ciphersuite mismatch: "
  721. "no common elliptic curve" ) );
  722. return( 0 );
  723. }
  724. #endif
  725. #if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED)
  726. /* If the ciphersuite requires a pre-shared key and we don't
  727. * have one, skip it now rather than failing later */
  728. if( mbedtls_ssl_ciphersuite_uses_psk( suite_info ) &&
  729. ssl->conf->f_psk == NULL &&
  730. ( ssl->conf->psk == NULL || ssl->conf->psk_identity == NULL ||
  731. ssl->conf->psk_identity_len == 0 || ssl->conf->psk_len == 0 ) )
  732. {
  733. MBEDTLS_SSL_DEBUG_MSG( 3, ( "ciphersuite mismatch: no pre-shared key" ) );
  734. return( 0 );
  735. }
  736. #endif
  737. #if defined(MBEDTLS_SSL_PROTO_TLS1_2) && \
  738. defined(MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED)
  739. /* If the ciphersuite requires signing, check whether
  740. * a suitable hash algorithm is present. */
  741. if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 )
  742. {
  743. sig_type = mbedtls_ssl_get_ciphersuite_sig_alg( suite_info );
  744. if( sig_type != MBEDTLS_PK_NONE &&
  745. mbedtls_ssl_sig_hash_set_find( &ssl->handshake->hash_algs, sig_type ) == MBEDTLS_MD_NONE )
  746. {
  747. MBEDTLS_SSL_DEBUG_MSG( 3, ( "ciphersuite mismatch: no suitable hash algorithm "
  748. "for signature algorithm %d", sig_type ) );
  749. return( 0 );
  750. }
  751. }
  752. #endif /* MBEDTLS_SSL_PROTO_TLS1_2 &&
  753. MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED */
  754. #if defined(MBEDTLS_X509_CRT_PARSE_C)
  755. /*
  756. * Final check: if ciphersuite requires us to have a
  757. * certificate/key of a particular type:
  758. * - select the appropriate certificate if we have one, or
  759. * - try the next ciphersuite if we don't
  760. * This must be done last since we modify the key_cert list.
  761. */
  762. if( ssl_pick_cert( ssl, suite_info ) != 0 )
  763. {
  764. MBEDTLS_SSL_DEBUG_MSG( 3, ( "ciphersuite mismatch: "
  765. "no suitable certificate" ) );
  766. return( 0 );
  767. }
  768. #endif
  769. *ciphersuite_info = suite_info;
  770. return( 0 );
  771. }
  772. #if defined(MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO)
  773. static int ssl_parse_client_hello_v2( mbedtls_ssl_context *ssl )
  774. {
  775. int ret, got_common_suite;
  776. unsigned int i, j;
  777. size_t n;
  778. unsigned int ciph_len, sess_len, chal_len;
  779. unsigned char *buf, *p;
  780. const int *ciphersuites;
  781. const mbedtls_ssl_ciphersuite_t *ciphersuite_info;
  782. MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse client hello v2" ) );
  783. #if defined(MBEDTLS_SSL_RENEGOTIATION)
  784. if( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE )
  785. {
  786. MBEDTLS_SSL_DEBUG_MSG( 1, ( "client hello v2 illegal for renegotiation" ) );
  787. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  788. MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE );
  789. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  790. }
  791. #endif /* MBEDTLS_SSL_RENEGOTIATION */
  792. buf = ssl->in_hdr;
  793. MBEDTLS_SSL_DEBUG_BUF( 4, "record header", buf, 5 );
  794. MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v2, message type: %d",
  795. buf[2] ) );
  796. MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v2, message len.: %d",
  797. ( ( buf[0] & 0x7F ) << 8 ) | buf[1] ) );
  798. MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v2, max. version: [%d:%d]",
  799. buf[3], buf[4] ) );
  800. /*
  801. * SSLv2 Client Hello
  802. *
  803. * Record layer:
  804. * 0 . 1 message length
  805. *
  806. * SSL layer:
  807. * 2 . 2 message type
  808. * 3 . 4 protocol version
  809. */
  810. if( buf[2] != MBEDTLS_SSL_HS_CLIENT_HELLO ||
  811. buf[3] != MBEDTLS_SSL_MAJOR_VERSION_3 )
  812. {
  813. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  814. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  815. }
  816. n = ( ( buf[0] << 8 ) | buf[1] ) & 0x7FFF;
  817. if( n < 17 || n > 512 )
  818. {
  819. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  820. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  821. }
  822. ssl->major_ver = MBEDTLS_SSL_MAJOR_VERSION_3;
  823. ssl->minor_ver = ( buf[4] <= ssl->conf->max_minor_ver )
  824. ? buf[4] : ssl->conf->max_minor_ver;
  825. if( ssl->minor_ver < ssl->conf->min_minor_ver )
  826. {
  827. MBEDTLS_SSL_DEBUG_MSG( 1, ( "client only supports ssl smaller than minimum"
  828. " [%d:%d] < [%d:%d]",
  829. ssl->major_ver, ssl->minor_ver,
  830. ssl->conf->min_major_ver, ssl->conf->min_minor_ver ) );
  831. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  832. MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION );
  833. return( MBEDTLS_ERR_SSL_BAD_HS_PROTOCOL_VERSION );
  834. }
  835. ssl->handshake->max_major_ver = buf[3];
  836. ssl->handshake->max_minor_ver = buf[4];
  837. if( ( ret = mbedtls_ssl_fetch_input( ssl, 2 + n ) ) != 0 )
  838. {
  839. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_fetch_input", ret );
  840. return( ret );
  841. }
  842. ssl->handshake->update_checksum( ssl, buf + 2, n );
  843. buf = ssl->in_msg;
  844. n = ssl->in_left - 5;
  845. /*
  846. * 0 . 1 ciphersuitelist length
  847. * 2 . 3 session id length
  848. * 4 . 5 challenge length
  849. * 6 . .. ciphersuitelist
  850. * .. . .. session id
  851. * .. . .. challenge
  852. */
  853. MBEDTLS_SSL_DEBUG_BUF( 4, "record contents", buf, n );
  854. ciph_len = ( buf[0] << 8 ) | buf[1];
  855. sess_len = ( buf[2] << 8 ) | buf[3];
  856. chal_len = ( buf[4] << 8 ) | buf[5];
  857. MBEDTLS_SSL_DEBUG_MSG( 3, ( "ciph_len: %d, sess_len: %d, chal_len: %d",
  858. ciph_len, sess_len, chal_len ) );
  859. /*
  860. * Make sure each parameter length is valid
  861. */
  862. if( ciph_len < 3 || ( ciph_len % 3 ) != 0 )
  863. {
  864. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  865. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  866. }
  867. if( sess_len > 32 )
  868. {
  869. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  870. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  871. }
  872. if( chal_len < 8 || chal_len > 32 )
  873. {
  874. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  875. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  876. }
  877. if( n != 6 + ciph_len + sess_len + chal_len )
  878. {
  879. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  880. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  881. }
  882. MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, ciphersuitelist",
  883. buf + 6, ciph_len );
  884. MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, session id",
  885. buf + 6 + ciph_len, sess_len );
  886. MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, challenge",
  887. buf + 6 + ciph_len + sess_len, chal_len );
  888. p = buf + 6 + ciph_len;
  889. ssl->session_negotiate->id_len = sess_len;
  890. memset( ssl->session_negotiate->id, 0,
  891. sizeof( ssl->session_negotiate->id ) );
  892. memcpy( ssl->session_negotiate->id, p, ssl->session_negotiate->id_len );
  893. p += sess_len;
  894. memset( ssl->handshake->randbytes, 0, 64 );
  895. memcpy( ssl->handshake->randbytes + 32 - chal_len, p, chal_len );
  896. /*
  897. * Check for TLS_EMPTY_RENEGOTIATION_INFO_SCSV
  898. */
  899. for( i = 0, p = buf + 6; i < ciph_len; i += 3, p += 3 )
  900. {
  901. if( p[0] == 0 && p[1] == 0 && p[2] == MBEDTLS_SSL_EMPTY_RENEGOTIATION_INFO )
  902. {
  903. MBEDTLS_SSL_DEBUG_MSG( 3, ( "received TLS_EMPTY_RENEGOTIATION_INFO " ) );
  904. #if defined(MBEDTLS_SSL_RENEGOTIATION)
  905. if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS )
  906. {
  907. MBEDTLS_SSL_DEBUG_MSG( 1, ( "received RENEGOTIATION SCSV "
  908. "during renegotiation" ) );
  909. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  910. MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE );
  911. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  912. }
  913. #endif /* MBEDTLS_SSL_RENEGOTIATION */
  914. ssl->secure_renegotiation = MBEDTLS_SSL_SECURE_RENEGOTIATION;
  915. break;
  916. }
  917. }
  918. #if defined(MBEDTLS_SSL_FALLBACK_SCSV)
  919. for( i = 0, p = buf + 6; i < ciph_len; i += 3, p += 3 )
  920. {
  921. if( p[0] == 0 &&
  922. p[1] == (unsigned char)( ( MBEDTLS_SSL_FALLBACK_SCSV_VALUE >> 8 ) & 0xff ) &&
  923. p[2] == (unsigned char)( ( MBEDTLS_SSL_FALLBACK_SCSV_VALUE ) & 0xff ) )
  924. {
  925. MBEDTLS_SSL_DEBUG_MSG( 3, ( "received FALLBACK_SCSV" ) );
  926. if( ssl->minor_ver < ssl->conf->max_minor_ver )
  927. {
  928. MBEDTLS_SSL_DEBUG_MSG( 1, ( "inapropriate fallback" ) );
  929. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  930. MBEDTLS_SSL_ALERT_MSG_INAPROPRIATE_FALLBACK );
  931. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  932. }
  933. break;
  934. }
  935. }
  936. #endif /* MBEDTLS_SSL_FALLBACK_SCSV */
  937. got_common_suite = 0;
  938. ciphersuites = ssl->conf->ciphersuite_list[ssl->minor_ver];
  939. ciphersuite_info = NULL;
  940. #if defined(MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE)
  941. for( j = 0, p = buf + 6; j < ciph_len; j += 3, p += 3 )
  942. for( i = 0; ciphersuites[i] != 0; i++ )
  943. #else
  944. for( i = 0; ciphersuites[i] != 0; i++ )
  945. for( j = 0, p = buf + 6; j < ciph_len; j += 3, p += 3 )
  946. #endif
  947. {
  948. if( p[0] != 0 ||
  949. p[1] != ( ( ciphersuites[i] >> 8 ) & 0xFF ) ||
  950. p[2] != ( ( ciphersuites[i] ) & 0xFF ) )
  951. continue;
  952. got_common_suite = 1;
  953. if( ( ret = ssl_ciphersuite_match( ssl, ciphersuites[i],
  954. &ciphersuite_info ) ) != 0 )
  955. return( ret );
  956. if( ciphersuite_info != NULL )
  957. goto have_ciphersuite_v2;
  958. }
  959. if( got_common_suite )
  960. {
  961. MBEDTLS_SSL_DEBUG_MSG( 1, ( "got ciphersuites in common, "
  962. "but none of them usable" ) );
  963. return( MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE );
  964. }
  965. else
  966. {
  967. MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no ciphersuites in common" ) );
  968. return( MBEDTLS_ERR_SSL_NO_CIPHER_CHOSEN );
  969. }
  970. have_ciphersuite_v2:
  971. MBEDTLS_SSL_DEBUG_MSG( 2, ( "selected ciphersuite: %s", ciphersuite_info->name ) );
  972. ssl->session_negotiate->ciphersuite = ciphersuites[i];
  973. ssl->transform_negotiate->ciphersuite_info = ciphersuite_info;
  974. /*
  975. * SSLv2 Client Hello relevant renegotiation security checks
  976. */
  977. if( ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION &&
  978. ssl->conf->allow_legacy_renegotiation == MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE )
  979. {
  980. MBEDTLS_SSL_DEBUG_MSG( 1, ( "legacy renegotiation, breaking off handshake" ) );
  981. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  982. MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE );
  983. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  984. }
  985. ssl->in_left = 0;
  986. ssl->state++;
  987. MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse client hello v2" ) );
  988. return( 0 );
  989. }
  990. #endif /* MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO */
  991. /* This function doesn't alert on errors that happen early during
  992. ClientHello parsing because they might indicate that the client is
  993. not talking SSL/TLS at all and would not understand our alert. */
  994. static int ssl_parse_client_hello( mbedtls_ssl_context *ssl )
  995. {
  996. int ret, got_common_suite;
  997. size_t i, j;
  998. size_t ciph_offset, comp_offset, ext_offset;
  999. size_t msg_len, ciph_len, sess_len, comp_len, ext_len;
  1000. #if defined(MBEDTLS_SSL_PROTO_DTLS)
  1001. size_t cookie_offset, cookie_len;
  1002. #endif
  1003. unsigned char *buf, *p, *ext;
  1004. #if defined(MBEDTLS_SSL_RENEGOTIATION)
  1005. int renegotiation_info_seen = 0;
  1006. #endif
  1007. int handshake_failure = 0;
  1008. const int *ciphersuites;
  1009. const mbedtls_ssl_ciphersuite_t *ciphersuite_info;
  1010. int major, minor;
  1011. /* If there is no signature-algorithm extension present,
  1012. * we need to fall back to the default values for allowed
  1013. * signature-hash pairs. */
  1014. #if defined(MBEDTLS_SSL_PROTO_TLS1_2) && \
  1015. defined(MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED)
  1016. int sig_hash_alg_ext_present = 0;
  1017. #endif /* MBEDTLS_SSL_PROTO_TLS1_2 &&
  1018. MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED */
  1019. MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse client hello" ) );
  1020. #if defined(MBEDTLS_SSL_DTLS_ANTI_REPLAY)
  1021. read_record_header:
  1022. #endif
  1023. /*
  1024. * If renegotiating, then the input was read with mbedtls_ssl_read_record(),
  1025. * otherwise read it ourselves manually in order to support SSLv2
  1026. * ClientHello, which doesn't use the same record layer format.
  1027. */
  1028. #if defined(MBEDTLS_SSL_RENEGOTIATION)
  1029. if( ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE )
  1030. #endif
  1031. {
  1032. if( ( ret = mbedtls_ssl_fetch_input( ssl, 5 ) ) != 0 )
  1033. {
  1034. /* No alert on a read error. */
  1035. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_fetch_input", ret );
  1036. return( ret );
  1037. }
  1038. }
  1039. buf = ssl->in_hdr;
  1040. #if defined(MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO)
  1041. #if defined(MBEDTLS_SSL_PROTO_DTLS)
  1042. if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_STREAM )
  1043. #endif
  1044. if( ( buf[0] & 0x80 ) != 0 )
  1045. return( ssl_parse_client_hello_v2( ssl ) );
  1046. #endif
  1047. MBEDTLS_SSL_DEBUG_BUF( 4, "record header", buf, mbedtls_ssl_hdr_len( ssl ) );
  1048. /*
  1049. * SSLv3/TLS Client Hello
  1050. *
  1051. * Record layer:
  1052. * 0 . 0 message type
  1053. * 1 . 2 protocol version
  1054. * 3 . 11 DTLS: epoch + record sequence number
  1055. * 3 . 4 message length
  1056. */
  1057. MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v3, message type: %d",
  1058. buf[0] ) );
  1059. if( buf[0] != MBEDTLS_SSL_MSG_HANDSHAKE )
  1060. {
  1061. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  1062. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  1063. }
  1064. MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v3, message len.: %d",
  1065. ( ssl->in_len[0] << 8 ) | ssl->in_len[1] ) );
  1066. MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v3, protocol version: [%d:%d]",
  1067. buf[1], buf[2] ) );
  1068. mbedtls_ssl_read_version( &major, &minor, ssl->conf->transport, buf + 1 );
  1069. /* According to RFC 5246 Appendix E.1, the version here is typically
  1070. * "{03,00}, the lowest version number supported by the client, [or] the
  1071. * value of ClientHello.client_version", so the only meaningful check here
  1072. * is the major version shouldn't be less than 3 */
  1073. if( major < MBEDTLS_SSL_MAJOR_VERSION_3 )
  1074. {
  1075. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  1076. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  1077. }
  1078. /* For DTLS if this is the initial handshake, remember the client sequence
  1079. * number to use it in our next message (RFC 6347 4.2.1) */
  1080. #if defined(MBEDTLS_SSL_PROTO_DTLS)
  1081. if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM
  1082. #if defined(MBEDTLS_SSL_RENEGOTIATION)
  1083. && ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE
  1084. #endif
  1085. )
  1086. {
  1087. /* Epoch should be 0 for initial handshakes */
  1088. if( ssl->in_ctr[0] != 0 || ssl->in_ctr[1] != 0 )
  1089. {
  1090. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  1091. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  1092. }
  1093. memcpy( ssl->out_ctr + 2, ssl->in_ctr + 2, 6 );
  1094. #if defined(MBEDTLS_SSL_DTLS_ANTI_REPLAY)
  1095. if( mbedtls_ssl_dtls_replay_check( ssl ) != 0 )
  1096. {
  1097. MBEDTLS_SSL_DEBUG_MSG( 1, ( "replayed record, discarding" ) );
  1098. ssl->next_record_offset = 0;
  1099. ssl->in_left = 0;
  1100. goto read_record_header;
  1101. }
  1102. /* No MAC to check yet, so we can update right now */
  1103. mbedtls_ssl_dtls_replay_update( ssl );
  1104. #endif
  1105. }
  1106. #endif /* MBEDTLS_SSL_PROTO_DTLS */
  1107. msg_len = ( ssl->in_len[0] << 8 ) | ssl->in_len[1];
  1108. #if defined(MBEDTLS_SSL_RENEGOTIATION)
  1109. if( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE )
  1110. {
  1111. /* Set by mbedtls_ssl_read_record() */
  1112. msg_len = ssl->in_hslen;
  1113. }
  1114. else
  1115. #endif
  1116. {
  1117. if( msg_len > MBEDTLS_SSL_MAX_CONTENT_LEN )
  1118. {
  1119. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  1120. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  1121. }
  1122. if( ( ret = mbedtls_ssl_fetch_input( ssl,
  1123. mbedtls_ssl_hdr_len( ssl ) + msg_len ) ) != 0 )
  1124. {
  1125. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_fetch_input", ret );
  1126. return( ret );
  1127. }
  1128. /* Done reading this record, get ready for the next one */
  1129. #if defined(MBEDTLS_SSL_PROTO_DTLS)
  1130. if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM )
  1131. ssl->next_record_offset = msg_len + mbedtls_ssl_hdr_len( ssl );
  1132. else
  1133. #endif
  1134. ssl->in_left = 0;
  1135. }
  1136. buf = ssl->in_msg;
  1137. MBEDTLS_SSL_DEBUG_BUF( 4, "record contents", buf, msg_len );
  1138. ssl->handshake->update_checksum( ssl, buf, msg_len );
  1139. /*
  1140. * Handshake layer:
  1141. * 0 . 0 handshake type
  1142. * 1 . 3 handshake length
  1143. * 4 . 5 DTLS only: message seqence number
  1144. * 6 . 8 DTLS only: fragment offset
  1145. * 9 . 11 DTLS only: fragment length
  1146. */
  1147. if( msg_len < mbedtls_ssl_hs_hdr_len( ssl ) )
  1148. {
  1149. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  1150. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  1151. }
  1152. MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v3, handshake type: %d", buf[0] ) );
  1153. if( buf[0] != MBEDTLS_SSL_HS_CLIENT_HELLO )
  1154. {
  1155. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  1156. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  1157. }
  1158. MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v3, handshake len.: %d",
  1159. ( buf[1] << 16 ) | ( buf[2] << 8 ) | buf[3] ) );
  1160. /* We don't support fragmentation of ClientHello (yet?) */
  1161. if( buf[1] != 0 ||
  1162. msg_len != mbedtls_ssl_hs_hdr_len( ssl ) + ( ( buf[2] << 8 ) | buf[3] ) )
  1163. {
  1164. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  1165. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  1166. }
  1167. #if defined(MBEDTLS_SSL_PROTO_DTLS)
  1168. if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM )
  1169. {
  1170. /*
  1171. * Copy the client's handshake message_seq on initial handshakes,
  1172. * check sequence number on renego.
  1173. */
  1174. #if defined(MBEDTLS_SSL_RENEGOTIATION)
  1175. if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS )
  1176. {
  1177. /* This couldn't be done in ssl_prepare_handshake_record() */
  1178. unsigned int cli_msg_seq = ( ssl->in_msg[4] << 8 ) |
  1179. ssl->in_msg[5];
  1180. if( cli_msg_seq != ssl->handshake->in_msg_seq )
  1181. {
  1182. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message_seq: "
  1183. "%d (expected %d)", cli_msg_seq,
  1184. ssl->handshake->in_msg_seq ) );
  1185. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  1186. }
  1187. ssl->handshake->in_msg_seq++;
  1188. }
  1189. else
  1190. #endif
  1191. {
  1192. unsigned int cli_msg_seq = ( ssl->in_msg[4] << 8 ) |
  1193. ssl->in_msg[5];
  1194. ssl->handshake->out_msg_seq = cli_msg_seq;
  1195. ssl->handshake->in_msg_seq = cli_msg_seq + 1;
  1196. }
  1197. /*
  1198. * For now we don't support fragmentation, so make sure
  1199. * fragment_offset == 0 and fragment_length == length
  1200. */
  1201. if( ssl->in_msg[6] != 0 || ssl->in_msg[7] != 0 || ssl->in_msg[8] != 0 ||
  1202. memcmp( ssl->in_msg + 1, ssl->in_msg + 9, 3 ) != 0 )
  1203. {
  1204. MBEDTLS_SSL_DEBUG_MSG( 1, ( "ClientHello fragmentation not supported" ) );
  1205. return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE );
  1206. }
  1207. }
  1208. #endif /* MBEDTLS_SSL_PROTO_DTLS */
  1209. buf += mbedtls_ssl_hs_hdr_len( ssl );
  1210. msg_len -= mbedtls_ssl_hs_hdr_len( ssl );
  1211. /*
  1212. * ClientHello layer:
  1213. * 0 . 1 protocol version
  1214. * 2 . 33 random bytes (starting with 4 bytes of Unix time)
  1215. * 34 . 35 session id length (1 byte)
  1216. * 35 . 34+x session id
  1217. * 35+x . 35+x DTLS only: cookie length (1 byte)
  1218. * 36+x . .. DTLS only: cookie
  1219. * .. . .. ciphersuite list length (2 bytes)
  1220. * .. . .. ciphersuite list
  1221. * .. . .. compression alg. list length (1 byte)
  1222. * .. . .. compression alg. list
  1223. * .. . .. extensions length (2 bytes, optional)
  1224. * .. . .. extensions (optional)
  1225. */
  1226. /*
  1227. * Minimal length (with everything empty and extensions ommitted) is
  1228. * 2 + 32 + 1 + 2 + 1 = 38 bytes. Check that first, so that we can
  1229. * read at least up to session id length without worrying.
  1230. */
  1231. if( msg_len < 38 )
  1232. {
  1233. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  1234. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  1235. }
  1236. /*
  1237. * Check and save the protocol version
  1238. */
  1239. MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, version", buf, 2 );
  1240. mbedtls_ssl_read_version( &ssl->major_ver, &ssl->minor_ver,
  1241. ssl->conf->transport, buf );
  1242. ssl->handshake->max_major_ver = ssl->major_ver;
  1243. ssl->handshake->max_minor_ver = ssl->minor_ver;
  1244. if( ssl->major_ver < ssl->conf->min_major_ver ||
  1245. ssl->minor_ver < ssl->conf->min_minor_ver )
  1246. {
  1247. MBEDTLS_SSL_DEBUG_MSG( 1, ( "client only supports ssl smaller than minimum"
  1248. " [%d:%d] < [%d:%d]",
  1249. ssl->major_ver, ssl->minor_ver,
  1250. ssl->conf->min_major_ver, ssl->conf->min_minor_ver ) );
  1251. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  1252. MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION );
  1253. return( MBEDTLS_ERR_SSL_BAD_HS_PROTOCOL_VERSION );
  1254. }
  1255. if( ssl->major_ver > ssl->conf->max_major_ver )
  1256. {
  1257. ssl->major_ver = ssl->conf->max_major_ver;
  1258. ssl->minor_ver = ssl->conf->max_minor_ver;
  1259. }
  1260. else if( ssl->minor_ver > ssl->conf->max_minor_ver )
  1261. ssl->minor_ver = ssl->conf->max_minor_ver;
  1262. /*
  1263. * Save client random (inc. Unix time)
  1264. */
  1265. MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, random bytes", buf + 2, 32 );
  1266. memcpy( ssl->handshake->randbytes, buf + 2, 32 );
  1267. /*
  1268. * Check the session ID length and save session ID
  1269. */
  1270. sess_len = buf[34];
  1271. if( sess_len > sizeof( ssl->session_negotiate->id ) ||
  1272. sess_len + 34 + 2 > msg_len ) /* 2 for cipherlist length field */
  1273. {
  1274. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  1275. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  1276. MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR );
  1277. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  1278. }
  1279. MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, session id", buf + 35, sess_len );
  1280. ssl->session_negotiate->id_len = sess_len;
  1281. memset( ssl->session_negotiate->id, 0,
  1282. sizeof( ssl->session_negotiate->id ) );
  1283. memcpy( ssl->session_negotiate->id, buf + 35,
  1284. ssl->session_negotiate->id_len );
  1285. /*
  1286. * Check the cookie length and content
  1287. */
  1288. #if defined(MBEDTLS_SSL_PROTO_DTLS)
  1289. if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM )
  1290. {
  1291. cookie_offset = 35 + sess_len;
  1292. cookie_len = buf[cookie_offset];
  1293. if( cookie_offset + 1 + cookie_len + 2 > msg_len )
  1294. {
  1295. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  1296. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  1297. MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION );
  1298. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  1299. }
  1300. MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, cookie",
  1301. buf + cookie_offset + 1, cookie_len );
  1302. #if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY)
  1303. if( ssl->conf->f_cookie_check != NULL
  1304. #if defined(MBEDTLS_SSL_RENEGOTIATION)
  1305. && ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE
  1306. #endif
  1307. )
  1308. {
  1309. if( ssl->conf->f_cookie_check( ssl->conf->p_cookie,
  1310. buf + cookie_offset + 1, cookie_len,
  1311. ssl->cli_id, ssl->cli_id_len ) != 0 )
  1312. {
  1313. MBEDTLS_SSL_DEBUG_MSG( 2, ( "cookie verification failed" ) );
  1314. ssl->handshake->verify_cookie_len = 1;
  1315. }
  1316. else
  1317. {
  1318. MBEDTLS_SSL_DEBUG_MSG( 2, ( "cookie verification passed" ) );
  1319. ssl->handshake->verify_cookie_len = 0;
  1320. }
  1321. }
  1322. else
  1323. #endif /* MBEDTLS_SSL_DTLS_HELLO_VERIFY */
  1324. {
  1325. /* We know we didn't send a cookie, so it should be empty */
  1326. if( cookie_len != 0 )
  1327. {
  1328. /* This may be an attacker's probe, so don't send an alert */
  1329. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  1330. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  1331. }
  1332. MBEDTLS_SSL_DEBUG_MSG( 2, ( "cookie verification skipped" ) );
  1333. }
  1334. /*
  1335. * Check the ciphersuitelist length (will be parsed later)
  1336. */
  1337. ciph_offset = cookie_offset + 1 + cookie_len;
  1338. }
  1339. else
  1340. #endif /* MBEDTLS_SSL_PROTO_DTLS */
  1341. ciph_offset = 35 + sess_len;
  1342. ciph_len = ( buf[ciph_offset + 0] << 8 )
  1343. | ( buf[ciph_offset + 1] );
  1344. if( ciph_len < 2 ||
  1345. ciph_len + 2 + ciph_offset + 1 > msg_len || /* 1 for comp. alg. len */
  1346. ( ciph_len % 2 ) != 0 )
  1347. {
  1348. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  1349. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  1350. MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR );
  1351. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  1352. }
  1353. MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, ciphersuitelist",
  1354. buf + ciph_offset + 2, ciph_len );
  1355. /*
  1356. * Check the compression algorithms length and pick one
  1357. */
  1358. comp_offset = ciph_offset + 2 + ciph_len;
  1359. comp_len = buf[comp_offset];
  1360. if( comp_len < 1 ||
  1361. comp_len > 16 ||
  1362. comp_len + comp_offset + 1 > msg_len )
  1363. {
  1364. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  1365. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  1366. MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR );
  1367. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  1368. }
  1369. MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, compression",
  1370. buf + comp_offset + 1, comp_len );
  1371. ssl->session_negotiate->compression = MBEDTLS_SSL_COMPRESS_NULL;
  1372. #if defined(MBEDTLS_ZLIB_SUPPORT)
  1373. for( i = 0; i < comp_len; ++i )
  1374. {
  1375. if( buf[comp_offset + 1 + i] == MBEDTLS_SSL_COMPRESS_DEFLATE )
  1376. {
  1377. ssl->session_negotiate->compression = MBEDTLS_SSL_COMPRESS_DEFLATE;
  1378. break;
  1379. }
  1380. }
  1381. #endif
  1382. /* See comments in ssl_write_client_hello() */
  1383. #if defined(MBEDTLS_SSL_PROTO_DTLS)
  1384. if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM )
  1385. ssl->session_negotiate->compression = MBEDTLS_SSL_COMPRESS_NULL;
  1386. #endif
  1387. /* Do not parse the extensions if the protocol is SSLv3 */
  1388. #if defined(MBEDTLS_SSL_PROTO_SSL3)
  1389. if( ( ssl->major_ver != 3 ) || ( ssl->minor_ver != 0 ) )
  1390. {
  1391. #endif
  1392. /*
  1393. * Check the extension length
  1394. */
  1395. ext_offset = comp_offset + 1 + comp_len;
  1396. if( msg_len > ext_offset )
  1397. {
  1398. if( msg_len < ext_offset + 2 )
  1399. {
  1400. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  1401. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  1402. MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR );
  1403. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  1404. }
  1405. ext_len = ( buf[ext_offset + 0] << 8 )
  1406. | ( buf[ext_offset + 1] );
  1407. if( ( ext_len > 0 && ext_len < 4 ) ||
  1408. msg_len != ext_offset + 2 + ext_len )
  1409. {
  1410. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  1411. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  1412. MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR );
  1413. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  1414. }
  1415. }
  1416. else
  1417. ext_len = 0;
  1418. ext = buf + ext_offset + 2;
  1419. MBEDTLS_SSL_DEBUG_BUF( 3, "client hello extensions", ext, ext_len );
  1420. while( ext_len != 0 )
  1421. {
  1422. unsigned int ext_id = ( ( ext[0] << 8 )
  1423. | ( ext[1] ) );
  1424. unsigned int ext_size = ( ( ext[2] << 8 )
  1425. | ( ext[3] ) );
  1426. if( ext_size + 4 > ext_len )
  1427. {
  1428. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  1429. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  1430. MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR );
  1431. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  1432. }
  1433. switch( ext_id )
  1434. {
  1435. #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION)
  1436. case MBEDTLS_TLS_EXT_SERVERNAME:
  1437. MBEDTLS_SSL_DEBUG_MSG( 3, ( "found ServerName extension" ) );
  1438. if( ssl->conf->f_sni == NULL )
  1439. break;
  1440. ret = ssl_parse_servername_ext( ssl, ext + 4, ext_size );
  1441. if( ret != 0 )
  1442. return( ret );
  1443. break;
  1444. #endif /* MBEDTLS_SSL_SERVER_NAME_INDICATION */
  1445. case MBEDTLS_TLS_EXT_RENEGOTIATION_INFO:
  1446. MBEDTLS_SSL_DEBUG_MSG( 3, ( "found renegotiation extension" ) );
  1447. #if defined(MBEDTLS_SSL_RENEGOTIATION)
  1448. renegotiation_info_seen = 1;
  1449. #endif
  1450. ret = ssl_parse_renegotiation_info( ssl, ext + 4, ext_size );
  1451. if( ret != 0 )
  1452. return( ret );
  1453. break;
  1454. #if defined(MBEDTLS_SSL_PROTO_TLS1_2) && \
  1455. defined(MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED)
  1456. case MBEDTLS_TLS_EXT_SIG_ALG:
  1457. MBEDTLS_SSL_DEBUG_MSG( 3, ( "found signature_algorithms extension" ) );
  1458. ret = ssl_parse_signature_algorithms_ext( ssl, ext + 4, ext_size );
  1459. if( ret != 0 )
  1460. return( ret );
  1461. sig_hash_alg_ext_present = 1;
  1462. break;
  1463. #endif /* MBEDTLS_SSL_PROTO_TLS1_2 &&
  1464. MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED */
  1465. #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) || \
  1466. defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED)
  1467. case MBEDTLS_TLS_EXT_SUPPORTED_ELLIPTIC_CURVES:
  1468. MBEDTLS_SSL_DEBUG_MSG( 3, ( "found supported elliptic curves extension" ) );
  1469. ret = ssl_parse_supported_elliptic_curves( ssl, ext + 4, ext_size );
  1470. if( ret != 0 )
  1471. return( ret );
  1472. break;
  1473. case MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS:
  1474. MBEDTLS_SSL_DEBUG_MSG( 3, ( "found supported point formats extension" ) );
  1475. ssl->handshake->cli_exts |= MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS_PRESENT;
  1476. ret = ssl_parse_supported_point_formats( ssl, ext + 4, ext_size );
  1477. if( ret != 0 )
  1478. return( ret );
  1479. break;
  1480. #endif /* MBEDTLS_ECDH_C || MBEDTLS_ECDSA_C ||
  1481. MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */
  1482. #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED)
  1483. case MBEDTLS_TLS_EXT_ECJPAKE_KKPP:
  1484. MBEDTLS_SSL_DEBUG_MSG( 3, ( "found ecjpake kkpp extension" ) );
  1485. ret = ssl_parse_ecjpake_kkpp( ssl, ext + 4, ext_size );
  1486. if( ret != 0 )
  1487. return( ret );
  1488. break;
  1489. #endif /* MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */
  1490. #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH)
  1491. case MBEDTLS_TLS_EXT_MAX_FRAGMENT_LENGTH:
  1492. MBEDTLS_SSL_DEBUG_MSG( 3, ( "found max fragment length extension" ) );
  1493. ret = ssl_parse_max_fragment_length_ext( ssl, ext + 4, ext_size );
  1494. if( ret != 0 )
  1495. return( ret );
  1496. break;
  1497. #endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */
  1498. #if defined(MBEDTLS_SSL_TRUNCATED_HMAC)
  1499. case MBEDTLS_TLS_EXT_TRUNCATED_HMAC:
  1500. MBEDTLS_SSL_DEBUG_MSG( 3, ( "found truncated hmac extension" ) );
  1501. ret = ssl_parse_truncated_hmac_ext( ssl, ext + 4, ext_size );
  1502. if( ret != 0 )
  1503. return( ret );
  1504. break;
  1505. #endif /* MBEDTLS_SSL_TRUNCATED_HMAC */
  1506. #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC)
  1507. case MBEDTLS_TLS_EXT_ENCRYPT_THEN_MAC:
  1508. MBEDTLS_SSL_DEBUG_MSG( 3, ( "found encrypt then mac extension" ) );
  1509. ret = ssl_parse_encrypt_then_mac_ext( ssl, ext + 4, ext_size );
  1510. if( ret != 0 )
  1511. return( ret );
  1512. break;
  1513. #endif /* MBEDTLS_SSL_ENCRYPT_THEN_MAC */
  1514. #if defined(MBEDTLS_SSL_EXTENDED_MASTER_SECRET)
  1515. case MBEDTLS_TLS_EXT_EXTENDED_MASTER_SECRET:
  1516. MBEDTLS_SSL_DEBUG_MSG( 3, ( "found extended master secret extension" ) );
  1517. ret = ssl_parse_extended_ms_ext( ssl, ext + 4, ext_size );
  1518. if( ret != 0 )
  1519. return( ret );
  1520. break;
  1521. #endif /* MBEDTLS_SSL_EXTENDED_MASTER_SECRET */
  1522. #if defined(MBEDTLS_SSL_SESSION_TICKETS)
  1523. case MBEDTLS_TLS_EXT_SESSION_TICKET:
  1524. MBEDTLS_SSL_DEBUG_MSG( 3, ( "found session ticket extension" ) );
  1525. ret = ssl_parse_session_ticket_ext( ssl, ext + 4, ext_size );
  1526. if( ret != 0 )
  1527. return( ret );
  1528. break;
  1529. #endif /* MBEDTLS_SSL_SESSION_TICKETS */
  1530. #if defined(MBEDTLS_SSL_ALPN)
  1531. case MBEDTLS_TLS_EXT_ALPN:
  1532. MBEDTLS_SSL_DEBUG_MSG( 3, ( "found alpn extension" ) );
  1533. ret = ssl_parse_alpn_ext( ssl, ext + 4, ext_size );
  1534. if( ret != 0 )
  1535. return( ret );
  1536. break;
  1537. #endif /* MBEDTLS_SSL_SESSION_TICKETS */
  1538. default:
  1539. MBEDTLS_SSL_DEBUG_MSG( 3, ( "unknown extension found: %d (ignoring)",
  1540. ext_id ) );
  1541. }
  1542. ext_len -= 4 + ext_size;
  1543. ext += 4 + ext_size;
  1544. if( ext_len > 0 && ext_len < 4 )
  1545. {
  1546. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) );
  1547. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  1548. MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR );
  1549. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  1550. }
  1551. }
  1552. #if defined(MBEDTLS_SSL_PROTO_SSL3)
  1553. }
  1554. #endif
  1555. #if defined(MBEDTLS_SSL_FALLBACK_SCSV)
  1556. for( i = 0, p = buf + ciph_offset + 2; i < ciph_len; i += 2, p += 2 )
  1557. {
  1558. if( p[0] == (unsigned char)( ( MBEDTLS_SSL_FALLBACK_SCSV_VALUE >> 8 ) & 0xff ) &&
  1559. p[1] == (unsigned char)( ( MBEDTLS_SSL_FALLBACK_SCSV_VALUE ) & 0xff ) )
  1560. {
  1561. MBEDTLS_SSL_DEBUG_MSG( 2, ( "received FALLBACK_SCSV" ) );
  1562. if( ssl->minor_ver < ssl->conf->max_minor_ver )
  1563. {
  1564. MBEDTLS_SSL_DEBUG_MSG( 1, ( "inapropriate fallback" ) );
  1565. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  1566. MBEDTLS_SSL_ALERT_MSG_INAPROPRIATE_FALLBACK );
  1567. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  1568. }
  1569. break;
  1570. }
  1571. }
  1572. #endif /* MBEDTLS_SSL_FALLBACK_SCSV */
  1573. #if defined(MBEDTLS_SSL_PROTO_TLS1_2) && \
  1574. defined(MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED)
  1575. /*
  1576. * Try to fall back to default hash SHA1 if the client
  1577. * hasn't provided any preferred signature-hash combinations.
  1578. */
  1579. if( sig_hash_alg_ext_present == 0 )
  1580. {
  1581. mbedtls_md_type_t md_default = MBEDTLS_MD_SHA1;
  1582. if( mbedtls_ssl_check_sig_hash( ssl, md_default ) != 0 )
  1583. md_default = MBEDTLS_MD_NONE;
  1584. mbedtls_ssl_sig_hash_set_const_hash( &ssl->handshake->hash_algs, md_default );
  1585. }
  1586. #endif /* MBEDTLS_SSL_PROTO_TLS1_2 &&
  1587. MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED */
  1588. /*
  1589. * Check for TLS_EMPTY_RENEGOTIATION_INFO_SCSV
  1590. */
  1591. for( i = 0, p = buf + ciph_offset + 2; i < ciph_len; i += 2, p += 2 )
  1592. {
  1593. if( p[0] == 0 && p[1] == MBEDTLS_SSL_EMPTY_RENEGOTIATION_INFO )
  1594. {
  1595. MBEDTLS_SSL_DEBUG_MSG( 3, ( "received TLS_EMPTY_RENEGOTIATION_INFO " ) );
  1596. #if defined(MBEDTLS_SSL_RENEGOTIATION)
  1597. if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS )
  1598. {
  1599. MBEDTLS_SSL_DEBUG_MSG( 1, ( "received RENEGOTIATION SCSV "
  1600. "during renegotiation" ) );
  1601. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  1602. MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE );
  1603. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  1604. }
  1605. #endif
  1606. ssl->secure_renegotiation = MBEDTLS_SSL_SECURE_RENEGOTIATION;
  1607. break;
  1608. }
  1609. }
  1610. /*
  1611. * Renegotiation security checks
  1612. */
  1613. if( ssl->secure_renegotiation != MBEDTLS_SSL_SECURE_RENEGOTIATION &&
  1614. ssl->conf->allow_legacy_renegotiation == MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE )
  1615. {
  1616. MBEDTLS_SSL_DEBUG_MSG( 1, ( "legacy renegotiation, breaking off handshake" ) );
  1617. handshake_failure = 1;
  1618. }
  1619. #if defined(MBEDTLS_SSL_RENEGOTIATION)
  1620. else if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS &&
  1621. ssl->secure_renegotiation == MBEDTLS_SSL_SECURE_RENEGOTIATION &&
  1622. renegotiation_info_seen == 0 )
  1623. {
  1624. MBEDTLS_SSL_DEBUG_MSG( 1, ( "renegotiation_info extension missing (secure)" ) );
  1625. handshake_failure = 1;
  1626. }
  1627. else if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS &&
  1628. ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION &&
  1629. ssl->conf->allow_legacy_renegotiation == MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION )
  1630. {
  1631. MBEDTLS_SSL_DEBUG_MSG( 1, ( "legacy renegotiation not allowed" ) );
  1632. handshake_failure = 1;
  1633. }
  1634. else if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS &&
  1635. ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION &&
  1636. renegotiation_info_seen == 1 )
  1637. {
  1638. MBEDTLS_SSL_DEBUG_MSG( 1, ( "renegotiation_info extension present (legacy)" ) );
  1639. handshake_failure = 1;
  1640. }
  1641. #endif /* MBEDTLS_SSL_RENEGOTIATION */
  1642. if( handshake_failure == 1 )
  1643. {
  1644. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  1645. MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE );
  1646. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );
  1647. }
  1648. /*
  1649. * Search for a matching ciphersuite
  1650. * (At the end because we need information from the EC-based extensions
  1651. * and certificate from the SNI callback triggered by the SNI extension.)
  1652. */
  1653. got_common_suite = 0;
  1654. ciphersuites = ssl->conf->ciphersuite_list[ssl->minor_ver];
  1655. ciphersuite_info = NULL;
  1656. #if defined(MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE)
  1657. for( j = 0, p = buf + ciph_offset + 2; j < ciph_len; j += 2, p += 2 )
  1658. for( i = 0; ciphersuites[i] != 0; i++ )
  1659. #else
  1660. for( i = 0; ciphersuites[i] != 0; i++ )
  1661. for( j = 0, p = buf + ciph_offset + 2; j < ciph_len; j += 2, p += 2 )
  1662. #endif
  1663. {
  1664. if( p[0] != ( ( ciphersuites[i] >> 8 ) & 0xFF ) ||
  1665. p[1] != ( ( ciphersuites[i] ) & 0xFF ) )
  1666. continue;
  1667. got_common_suite = 1;
  1668. if( ( ret = ssl_ciphersuite_match( ssl, ciphersuites[i],
  1669. &ciphersuite_info ) ) != 0 )
  1670. return( ret );
  1671. if( ciphersuite_info != NULL )
  1672. goto have_ciphersuite;
  1673. }
  1674. if( got_common_suite )
  1675. {
  1676. MBEDTLS_SSL_DEBUG_MSG( 1, ( "got ciphersuites in common, "
  1677. "but none of them usable" ) );
  1678. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  1679. MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE );
  1680. return( MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE );
  1681. }
  1682. else
  1683. {
  1684. MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no ciphersuites in common" ) );
  1685. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  1686. MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE );
  1687. return( MBEDTLS_ERR_SSL_NO_CIPHER_CHOSEN );
  1688. }
  1689. have_ciphersuite:
  1690. MBEDTLS_SSL_DEBUG_MSG( 2, ( "selected ciphersuite: %s", ciphersuite_info->name ) );
  1691. ssl->session_negotiate->ciphersuite = ciphersuites[i];
  1692. ssl->transform_negotiate->ciphersuite_info = ciphersuite_info;
  1693. ssl->state++;
  1694. #if defined(MBEDTLS_SSL_PROTO_DTLS)
  1695. if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM )
  1696. mbedtls_ssl_recv_flight_completed( ssl );
  1697. #endif
  1698. /* Debugging-only output for testsuite */
  1699. #if defined(MBEDTLS_DEBUG_C) && \
  1700. defined(MBEDTLS_SSL_PROTO_TLS1_2) && \
  1701. defined(MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED)
  1702. if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 )
  1703. {
  1704. mbedtls_pk_type_t sig_alg = mbedtls_ssl_get_ciphersuite_sig_alg( ciphersuite_info );
  1705. if( sig_alg != MBEDTLS_PK_NONE )
  1706. {
  1707. mbedtls_md_type_t md_alg = mbedtls_ssl_sig_hash_set_find( &ssl->handshake->hash_algs,
  1708. sig_alg );
  1709. MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v3, signature_algorithm ext: %d",
  1710. mbedtls_ssl_hash_from_md_alg( md_alg ) ) );
  1711. }
  1712. else
  1713. {
  1714. MBEDTLS_SSL_DEBUG_MSG( 3, ( "no hash algorithm for signature algorithm "
  1715. "%d - should not happen", sig_alg ) );
  1716. }
  1717. }
  1718. #endif
  1719. MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse client hello" ) );
  1720. return( 0 );
  1721. }
  1722. #if defined(MBEDTLS_SSL_TRUNCATED_HMAC)
  1723. static void ssl_write_truncated_hmac_ext( mbedtls_ssl_context *ssl,
  1724. unsigned char *buf,
  1725. size_t *olen )
  1726. {
  1727. unsigned char *p = buf;
  1728. if( ssl->session_negotiate->trunc_hmac == MBEDTLS_SSL_TRUNC_HMAC_DISABLED )
  1729. {
  1730. *olen = 0;
  1731. return;
  1732. }
  1733. MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, adding truncated hmac extension" ) );
  1734. *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_TRUNCATED_HMAC >> 8 ) & 0xFF );
  1735. *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_TRUNCATED_HMAC ) & 0xFF );
  1736. *p++ = 0x00;
  1737. *p++ = 0x00;
  1738. *olen = 4;
  1739. }
  1740. #endif /* MBEDTLS_SSL_TRUNCATED_HMAC */
  1741. #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC)
  1742. static void ssl_write_encrypt_then_mac_ext( mbedtls_ssl_context *ssl,
  1743. unsigned char *buf,
  1744. size_t *olen )
  1745. {
  1746. unsigned char *p = buf;
  1747. const mbedtls_ssl_ciphersuite_t *suite = NULL;
  1748. const mbedtls_cipher_info_t *cipher = NULL;
  1749. if( ssl->session_negotiate->encrypt_then_mac == MBEDTLS_SSL_ETM_DISABLED ||
  1750. ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 )
  1751. {
  1752. *olen = 0;
  1753. return;
  1754. }
  1755. /*
  1756. * RFC 7366: "If a server receives an encrypt-then-MAC request extension
  1757. * from a client and then selects a stream or Authenticated Encryption
  1758. * with Associated Data (AEAD) ciphersuite, it MUST NOT send an
  1759. * encrypt-then-MAC response extension back to the client."
  1760. */
  1761. if( ( suite = mbedtls_ssl_ciphersuite_from_id(
  1762. ssl->session_negotiate->ciphersuite ) ) == NULL ||
  1763. ( cipher = mbedtls_cipher_info_from_type( suite->cipher ) ) == NULL ||
  1764. cipher->mode != MBEDTLS_MODE_CBC )
  1765. {
  1766. *olen = 0;
  1767. return;
  1768. }
  1769. MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, adding encrypt then mac extension" ) );
  1770. *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_ENCRYPT_THEN_MAC >> 8 ) & 0xFF );
  1771. *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_ENCRYPT_THEN_MAC ) & 0xFF );
  1772. *p++ = 0x00;
  1773. *p++ = 0x00;
  1774. *olen = 4;
  1775. }
  1776. #endif /* MBEDTLS_SSL_ENCRYPT_THEN_MAC */
  1777. #if defined(MBEDTLS_SSL_EXTENDED_MASTER_SECRET)
  1778. static void ssl_write_extended_ms_ext( mbedtls_ssl_context *ssl,
  1779. unsigned char *buf,
  1780. size_t *olen )
  1781. {
  1782. unsigned char *p = buf;
  1783. if( ssl->handshake->extended_ms == MBEDTLS_SSL_EXTENDED_MS_DISABLED ||
  1784. ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 )
  1785. {
  1786. *olen = 0;
  1787. return;
  1788. }
  1789. MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, adding extended master secret "
  1790. "extension" ) );
  1791. *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_EXTENDED_MASTER_SECRET >> 8 ) & 0xFF );
  1792. *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_EXTENDED_MASTER_SECRET ) & 0xFF );
  1793. *p++ = 0x00;
  1794. *p++ = 0x00;
  1795. *olen = 4;
  1796. }
  1797. #endif /* MBEDTLS_SSL_EXTENDED_MASTER_SECRET */
  1798. #if defined(MBEDTLS_SSL_SESSION_TICKETS)
  1799. static void ssl_write_session_ticket_ext( mbedtls_ssl_context *ssl,
  1800. unsigned char *buf,
  1801. size_t *olen )
  1802. {
  1803. unsigned char *p = buf;
  1804. if( ssl->handshake->new_session_ticket == 0 )
  1805. {
  1806. *olen = 0;
  1807. return;
  1808. }
  1809. MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, adding session ticket extension" ) );
  1810. *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_SESSION_TICKET >> 8 ) & 0xFF );
  1811. *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_SESSION_TICKET ) & 0xFF );
  1812. *p++ = 0x00;
  1813. *p++ = 0x00;
  1814. *olen = 4;
  1815. }
  1816. #endif /* MBEDTLS_SSL_SESSION_TICKETS */
  1817. static void ssl_write_renegotiation_ext( mbedtls_ssl_context *ssl,
  1818. unsigned char *buf,
  1819. size_t *olen )
  1820. {
  1821. unsigned char *p = buf;
  1822. if( ssl->secure_renegotiation != MBEDTLS_SSL_SECURE_RENEGOTIATION )
  1823. {
  1824. *olen = 0;
  1825. return;
  1826. }
  1827. MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, secure renegotiation extension" ) );
  1828. *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_RENEGOTIATION_INFO >> 8 ) & 0xFF );
  1829. *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_RENEGOTIATION_INFO ) & 0xFF );
  1830. #if defined(MBEDTLS_SSL_RENEGOTIATION)
  1831. if( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE )
  1832. {
  1833. *p++ = 0x00;
  1834. *p++ = ( ssl->verify_data_len * 2 + 1 ) & 0xFF;
  1835. *p++ = ssl->verify_data_len * 2 & 0xFF;
  1836. memcpy( p, ssl->peer_verify_data, ssl->verify_data_len );
  1837. p += ssl->verify_data_len;
  1838. memcpy( p, ssl->own_verify_data, ssl->verify_data_len );
  1839. p += ssl->verify_data_len;
  1840. }
  1841. else
  1842. #endif /* MBEDTLS_SSL_RENEGOTIATION */
  1843. {
  1844. *p++ = 0x00;
  1845. *p++ = 0x01;
  1846. *p++ = 0x00;
  1847. }
  1848. *olen = p - buf;
  1849. }
  1850. #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH)
  1851. static void ssl_write_max_fragment_length_ext( mbedtls_ssl_context *ssl,
  1852. unsigned char *buf,
  1853. size_t *olen )
  1854. {
  1855. unsigned char *p = buf;
  1856. if( ssl->session_negotiate->mfl_code == MBEDTLS_SSL_MAX_FRAG_LEN_NONE )
  1857. {
  1858. *olen = 0;
  1859. return;
  1860. }
  1861. MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, max_fragment_length extension" ) );
  1862. *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_MAX_FRAGMENT_LENGTH >> 8 ) & 0xFF );
  1863. *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_MAX_FRAGMENT_LENGTH ) & 0xFF );
  1864. *p++ = 0x00;
  1865. *p++ = 1;
  1866. *p++ = ssl->session_negotiate->mfl_code;
  1867. *olen = 5;
  1868. }
  1869. #endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */
  1870. #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) || \
  1871. defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED)
  1872. static void ssl_write_supported_point_formats_ext( mbedtls_ssl_context *ssl,
  1873. unsigned char *buf,
  1874. size_t *olen )
  1875. {
  1876. unsigned char *p = buf;
  1877. ((void) ssl);
  1878. if( ( ssl->handshake->cli_exts &
  1879. MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS_PRESENT ) == 0 )
  1880. {
  1881. *olen = 0;
  1882. return;
  1883. }
  1884. MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, supported_point_formats extension" ) );
  1885. *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS >> 8 ) & 0xFF );
  1886. *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS ) & 0xFF );
  1887. *p++ = 0x00;
  1888. *p++ = 2;
  1889. *p++ = 1;
  1890. *p++ = MBEDTLS_ECP_PF_UNCOMPRESSED;
  1891. *olen = 6;
  1892. }
  1893. #endif /* MBEDTLS_ECDH_C || MBEDTLS_ECDSA_C || MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */
  1894. #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED)
  1895. static void ssl_write_ecjpake_kkpp_ext( mbedtls_ssl_context *ssl,
  1896. unsigned char *buf,
  1897. size_t *olen )
  1898. {
  1899. int ret;
  1900. unsigned char *p = buf;
  1901. const unsigned char *end = ssl->out_msg + MBEDTLS_SSL_MAX_CONTENT_LEN;
  1902. size_t kkpp_len;
  1903. *olen = 0;
  1904. /* Skip costly computation if not needed */
  1905. if( ssl->transform_negotiate->ciphersuite_info->key_exchange !=
  1906. MBEDTLS_KEY_EXCHANGE_ECJPAKE )
  1907. return;
  1908. MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, ecjpake kkpp extension" ) );
  1909. if( end - p < 4 )
  1910. {
  1911. MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) );
  1912. return;
  1913. }
  1914. *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_ECJPAKE_KKPP >> 8 ) & 0xFF );
  1915. *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_ECJPAKE_KKPP ) & 0xFF );
  1916. ret = mbedtls_ecjpake_write_round_one( &ssl->handshake->ecjpake_ctx,
  1917. p + 2, end - p - 2, &kkpp_len,
  1918. ssl->conf->f_rng, ssl->conf->p_rng );
  1919. if( ret != 0 )
  1920. {
  1921. MBEDTLS_SSL_DEBUG_RET( 1 , "mbedtls_ecjpake_write_round_one", ret );
  1922. return;
  1923. }
  1924. *p++ = (unsigned char)( ( kkpp_len >> 8 ) & 0xFF );
  1925. *p++ = (unsigned char)( ( kkpp_len ) & 0xFF );
  1926. *olen = kkpp_len + 4;
  1927. }
  1928. #endif /* MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */
  1929. #if defined(MBEDTLS_SSL_ALPN )
  1930. static void ssl_write_alpn_ext( mbedtls_ssl_context *ssl,
  1931. unsigned char *buf, size_t *olen )
  1932. {
  1933. if( ssl->alpn_chosen == NULL )
  1934. {
  1935. *olen = 0;
  1936. return;
  1937. }
  1938. MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, adding alpn extension" ) );
  1939. /*
  1940. * 0 . 1 ext identifier
  1941. * 2 . 3 ext length
  1942. * 4 . 5 protocol list length
  1943. * 6 . 6 protocol name length
  1944. * 7 . 7+n protocol name
  1945. */
  1946. buf[0] = (unsigned char)( ( MBEDTLS_TLS_EXT_ALPN >> 8 ) & 0xFF );
  1947. buf[1] = (unsigned char)( ( MBEDTLS_TLS_EXT_ALPN ) & 0xFF );
  1948. *olen = 7 + strlen( ssl->alpn_chosen );
  1949. buf[2] = (unsigned char)( ( ( *olen - 4 ) >> 8 ) & 0xFF );
  1950. buf[3] = (unsigned char)( ( ( *olen - 4 ) ) & 0xFF );
  1951. buf[4] = (unsigned char)( ( ( *olen - 6 ) >> 8 ) & 0xFF );
  1952. buf[5] = (unsigned char)( ( ( *olen - 6 ) ) & 0xFF );
  1953. buf[6] = (unsigned char)( ( ( *olen - 7 ) ) & 0xFF );
  1954. memcpy( buf + 7, ssl->alpn_chosen, *olen - 7 );
  1955. }
  1956. #endif /* MBEDTLS_ECDH_C || MBEDTLS_ECDSA_C */
  1957. #if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY)
  1958. static int ssl_write_hello_verify_request( mbedtls_ssl_context *ssl )
  1959. {
  1960. int ret;
  1961. unsigned char *p = ssl->out_msg + 4;
  1962. unsigned char *cookie_len_byte;
  1963. MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write hello verify request" ) );
  1964. /*
  1965. * struct {
  1966. * ProtocolVersion server_version;
  1967. * opaque cookie<0..2^8-1>;
  1968. * } HelloVerifyRequest;
  1969. */
  1970. /* The RFC is not clear on this point, but sending the actual negotiated
  1971. * version looks like the most interoperable thing to do. */
  1972. mbedtls_ssl_write_version( ssl->major_ver, ssl->minor_ver,
  1973. ssl->conf->transport, p );
  1974. MBEDTLS_SSL_DEBUG_BUF( 3, "server version", p, 2 );
  1975. p += 2;
  1976. /* If we get here, f_cookie_check is not null */
  1977. if( ssl->conf->f_cookie_write == NULL )
  1978. {
  1979. MBEDTLS_SSL_DEBUG_MSG( 1, ( "inconsistent cookie callbacks" ) );
  1980. return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
  1981. }
  1982. /* Skip length byte until we know the length */
  1983. cookie_len_byte = p++;
  1984. if( ( ret = ssl->conf->f_cookie_write( ssl->conf->p_cookie,
  1985. &p, ssl->out_buf + MBEDTLS_SSL_BUFFER_LEN,
  1986. ssl->cli_id, ssl->cli_id_len ) ) != 0 )
  1987. {
  1988. MBEDTLS_SSL_DEBUG_RET( 1, "f_cookie_write", ret );
  1989. return( ret );
  1990. }
  1991. *cookie_len_byte = (unsigned char)( p - ( cookie_len_byte + 1 ) );
  1992. MBEDTLS_SSL_DEBUG_BUF( 3, "cookie sent", cookie_len_byte + 1, *cookie_len_byte );
  1993. ssl->out_msglen = p - ssl->out_msg;
  1994. ssl->out_msgtype = MBEDTLS_SSL_MSG_HANDSHAKE;
  1995. ssl->out_msg[0] = MBEDTLS_SSL_HS_HELLO_VERIFY_REQUEST;
  1996. ssl->state = MBEDTLS_SSL_SERVER_HELLO_VERIFY_REQUEST_SENT;
  1997. if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 )
  1998. {
  1999. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret );
  2000. return( ret );
  2001. }
  2002. MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write hello verify request" ) );
  2003. return( 0 );
  2004. }
  2005. #endif /* MBEDTLS_SSL_DTLS_HELLO_VERIFY */
  2006. static int ssl_write_server_hello( mbedtls_ssl_context *ssl )
  2007. {
  2008. #if defined(MBEDTLS_HAVE_TIME)
  2009. mbedtls_time_t t;
  2010. #endif
  2011. int ret;
  2012. size_t olen, ext_len = 0, n;
  2013. unsigned char *buf, *p;
  2014. MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write server hello" ) );
  2015. #if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY)
  2016. if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM &&
  2017. ssl->handshake->verify_cookie_len != 0 )
  2018. {
  2019. MBEDTLS_SSL_DEBUG_MSG( 2, ( "client hello was not authenticated" ) );
  2020. MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write server hello" ) );
  2021. return( ssl_write_hello_verify_request( ssl ) );
  2022. }
  2023. #endif /* MBEDTLS_SSL_DTLS_HELLO_VERIFY */
  2024. if( ssl->conf->f_rng == NULL )
  2025. {
  2026. MBEDTLS_SSL_DEBUG_MSG( 1, ( "no RNG provided") );
  2027. return( MBEDTLS_ERR_SSL_NO_RNG );
  2028. }
  2029. /*
  2030. * 0 . 0 handshake type
  2031. * 1 . 3 handshake length
  2032. * 4 . 5 protocol version
  2033. * 6 . 9 UNIX time()
  2034. * 10 . 37 random bytes
  2035. */
  2036. buf = ssl->out_msg;
  2037. p = buf + 4;
  2038. mbedtls_ssl_write_version( ssl->major_ver, ssl->minor_ver,
  2039. ssl->conf->transport, p );
  2040. p += 2;
  2041. MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, chosen version: [%d:%d]",
  2042. buf[4], buf[5] ) );
  2043. #if defined(MBEDTLS_HAVE_TIME)
  2044. t = mbedtls_time( NULL );
  2045. *p++ = (unsigned char)( t >> 24 );
  2046. *p++ = (unsigned char)( t >> 16 );
  2047. *p++ = (unsigned char)( t >> 8 );
  2048. *p++ = (unsigned char)( t );
  2049. MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, current time: %lu", t ) );
  2050. #else
  2051. if( ( ret = ssl->conf->f_rng( ssl->conf->p_rng, p, 4 ) ) != 0 )
  2052. return( ret );
  2053. p += 4;
  2054. #endif /* MBEDTLS_HAVE_TIME */
  2055. if( ( ret = ssl->conf->f_rng( ssl->conf->p_rng, p, 28 ) ) != 0 )
  2056. return( ret );
  2057. p += 28;
  2058. memcpy( ssl->handshake->randbytes + 32, buf + 6, 32 );
  2059. MBEDTLS_SSL_DEBUG_BUF( 3, "server hello, random bytes", buf + 6, 32 );
  2060. /*
  2061. * Resume is 0 by default, see ssl_handshake_init().
  2062. * It may be already set to 1 by ssl_parse_session_ticket_ext().
  2063. * If not, try looking up session ID in our cache.
  2064. */
  2065. if( ssl->handshake->resume == 0 &&
  2066. #if defined(MBEDTLS_SSL_RENEGOTIATION)
  2067. ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE &&
  2068. #endif
  2069. ssl->session_negotiate->id_len != 0 &&
  2070. ssl->conf->f_get_cache != NULL &&
  2071. ssl->conf->f_get_cache( ssl->conf->p_cache, ssl->session_negotiate ) == 0 )
  2072. {
  2073. MBEDTLS_SSL_DEBUG_MSG( 3, ( "session successfully restored from cache" ) );
  2074. ssl->handshake->resume = 1;
  2075. }
  2076. if( ssl->handshake->resume == 0 )
  2077. {
  2078. /*
  2079. * New session, create a new session id,
  2080. * unless we're about to issue a session ticket
  2081. */
  2082. ssl->state++;
  2083. #if defined(MBEDTLS_HAVE_TIME)
  2084. ssl->session_negotiate->start = mbedtls_time( NULL );
  2085. #endif
  2086. #if defined(MBEDTLS_SSL_SESSION_TICKETS)
  2087. if( ssl->handshake->new_session_ticket != 0 )
  2088. {
  2089. ssl->session_negotiate->id_len = n = 0;
  2090. memset( ssl->session_negotiate->id, 0, 32 );
  2091. }
  2092. else
  2093. #endif /* MBEDTLS_SSL_SESSION_TICKETS */
  2094. {
  2095. ssl->session_negotiate->id_len = n = 32;
  2096. if( ( ret = ssl->conf->f_rng( ssl->conf->p_rng, ssl->session_negotiate->id,
  2097. n ) ) != 0 )
  2098. return( ret );
  2099. }
  2100. }
  2101. else
  2102. {
  2103. /*
  2104. * Resuming a session
  2105. */
  2106. n = ssl->session_negotiate->id_len;
  2107. ssl->state = MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC;
  2108. if( ( ret = mbedtls_ssl_derive_keys( ssl ) ) != 0 )
  2109. {
  2110. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_derive_keys", ret );
  2111. return( ret );
  2112. }
  2113. }
  2114. /*
  2115. * 38 . 38 session id length
  2116. * 39 . 38+n session id
  2117. * 39+n . 40+n chosen ciphersuite
  2118. * 41+n . 41+n chosen compression alg.
  2119. * 42+n . 43+n extensions length
  2120. * 44+n . 43+n+m extensions
  2121. */
  2122. *p++ = (unsigned char) ssl->session_negotiate->id_len;
  2123. memcpy( p, ssl->session_negotiate->id, ssl->session_negotiate->id_len );
  2124. p += ssl->session_negotiate->id_len;
  2125. MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, session id len.: %d", n ) );
  2126. MBEDTLS_SSL_DEBUG_BUF( 3, "server hello, session id", buf + 39, n );
  2127. MBEDTLS_SSL_DEBUG_MSG( 3, ( "%s session has been resumed",
  2128. ssl->handshake->resume ? "a" : "no" ) );
  2129. *p++ = (unsigned char)( ssl->session_negotiate->ciphersuite >> 8 );
  2130. *p++ = (unsigned char)( ssl->session_negotiate->ciphersuite );
  2131. *p++ = (unsigned char)( ssl->session_negotiate->compression );
  2132. MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, chosen ciphersuite: %s",
  2133. mbedtls_ssl_get_ciphersuite_name( ssl->session_negotiate->ciphersuite ) ) );
  2134. MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, compress alg.: 0x%02X",
  2135. ssl->session_negotiate->compression ) );
  2136. /* Do not write the extensions if the protocol is SSLv3 */
  2137. #if defined(MBEDTLS_SSL_PROTO_SSL3)
  2138. if( ( ssl->major_ver != 3 ) || ( ssl->minor_ver != 0 ) )
  2139. {
  2140. #endif
  2141. /*
  2142. * First write extensions, then the total length
  2143. */
  2144. ssl_write_renegotiation_ext( ssl, p + 2 + ext_len, &olen );
  2145. ext_len += olen;
  2146. #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH)
  2147. ssl_write_max_fragment_length_ext( ssl, p + 2 + ext_len, &olen );
  2148. ext_len += olen;
  2149. #endif
  2150. #if defined(MBEDTLS_SSL_TRUNCATED_HMAC)
  2151. ssl_write_truncated_hmac_ext( ssl, p + 2 + ext_len, &olen );
  2152. ext_len += olen;
  2153. #endif
  2154. #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC)
  2155. ssl_write_encrypt_then_mac_ext( ssl, p + 2 + ext_len, &olen );
  2156. ext_len += olen;
  2157. #endif
  2158. #if defined(MBEDTLS_SSL_EXTENDED_MASTER_SECRET)
  2159. ssl_write_extended_ms_ext( ssl, p + 2 + ext_len, &olen );
  2160. ext_len += olen;
  2161. #endif
  2162. #if defined(MBEDTLS_SSL_SESSION_TICKETS)
  2163. ssl_write_session_ticket_ext( ssl, p + 2 + ext_len, &olen );
  2164. ext_len += olen;
  2165. #endif
  2166. #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) || \
  2167. defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED)
  2168. ssl_write_supported_point_formats_ext( ssl, p + 2 + ext_len, &olen );
  2169. ext_len += olen;
  2170. #endif
  2171. #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED)
  2172. ssl_write_ecjpake_kkpp_ext( ssl, p + 2 + ext_len, &olen );
  2173. ext_len += olen;
  2174. #endif
  2175. #if defined(MBEDTLS_SSL_ALPN)
  2176. ssl_write_alpn_ext( ssl, p + 2 + ext_len, &olen );
  2177. ext_len += olen;
  2178. #endif
  2179. MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, total extension length: %d", ext_len ) );
  2180. if( ext_len > 0 )
  2181. {
  2182. *p++ = (unsigned char)( ( ext_len >> 8 ) & 0xFF );
  2183. *p++ = (unsigned char)( ( ext_len ) & 0xFF );
  2184. p += ext_len;
  2185. }
  2186. #if defined(MBEDTLS_SSL_PROTO_SSL3)
  2187. }
  2188. #endif
  2189. ssl->out_msglen = p - buf;
  2190. ssl->out_msgtype = MBEDTLS_SSL_MSG_HANDSHAKE;
  2191. ssl->out_msg[0] = MBEDTLS_SSL_HS_SERVER_HELLO;
  2192. ret = mbedtls_ssl_write_record( ssl );
  2193. MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write server hello" ) );
  2194. return( ret );
  2195. }
  2196. #if !defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) && \
  2197. !defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) && \
  2198. !defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) && \
  2199. !defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) && \
  2200. !defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED)&& \
  2201. !defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED)
  2202. static int ssl_write_certificate_request( mbedtls_ssl_context *ssl )
  2203. {
  2204. const mbedtls_ssl_ciphersuite_t *ciphersuite_info =
  2205. ssl->transform_negotiate->ciphersuite_info;
  2206. MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write certificate request" ) );
  2207. if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK ||
  2208. ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ||
  2209. ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK ||
  2210. ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ||
  2211. ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE )
  2212. {
  2213. MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write certificate request" ) );
  2214. ssl->state++;
  2215. return( 0 );
  2216. }
  2217. MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) );
  2218. return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
  2219. }
  2220. #else
  2221. static int ssl_write_certificate_request( mbedtls_ssl_context *ssl )
  2222. {
  2223. int ret = MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE;
  2224. const mbedtls_ssl_ciphersuite_t *ciphersuite_info =
  2225. ssl->transform_negotiate->ciphersuite_info;
  2226. size_t dn_size, total_dn_size; /* excluding length bytes */
  2227. size_t ct_len, sa_len; /* including length bytes */
  2228. unsigned char *buf, *p;
  2229. const unsigned char * const end = ssl->out_msg + MBEDTLS_SSL_MAX_CONTENT_LEN;
  2230. const mbedtls_x509_crt *crt;
  2231. int authmode;
  2232. MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write certificate request" ) );
  2233. ssl->state++;
  2234. #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION)
  2235. if( ssl->handshake->sni_authmode != MBEDTLS_SSL_VERIFY_UNSET )
  2236. authmode = ssl->handshake->sni_authmode;
  2237. else
  2238. #endif
  2239. authmode = ssl->conf->authmode;
  2240. if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK ||
  2241. ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ||
  2242. ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK ||
  2243. ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ||
  2244. ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ||
  2245. authmode == MBEDTLS_SSL_VERIFY_NONE )
  2246. {
  2247. MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write certificate request" ) );
  2248. return( 0 );
  2249. }
  2250. /*
  2251. * 0 . 0 handshake type
  2252. * 1 . 3 handshake length
  2253. * 4 . 4 cert type count
  2254. * 5 .. m-1 cert types
  2255. * m .. m+1 sig alg length (TLS 1.2 only)
  2256. * m+1 .. n-1 SignatureAndHashAlgorithms (TLS 1.2 only)
  2257. * n .. n+1 length of all DNs
  2258. * n+2 .. n+3 length of DN 1
  2259. * n+4 .. ... Distinguished Name #1
  2260. * ... .. ... length of DN 2, etc.
  2261. */
  2262. buf = ssl->out_msg;
  2263. p = buf + 4;
  2264. /*
  2265. * Supported certificate types
  2266. *
  2267. * ClientCertificateType certificate_types<1..2^8-1>;
  2268. * enum { (255) } ClientCertificateType;
  2269. */
  2270. ct_len = 0;
  2271. #if defined(MBEDTLS_RSA_C)
  2272. p[1 + ct_len++] = MBEDTLS_SSL_CERT_TYPE_RSA_SIGN;
  2273. #endif
  2274. #if defined(MBEDTLS_ECDSA_C)
  2275. p[1 + ct_len++] = MBEDTLS_SSL_CERT_TYPE_ECDSA_SIGN;
  2276. #endif
  2277. p[0] = (unsigned char) ct_len++;
  2278. p += ct_len;
  2279. sa_len = 0;
  2280. #if defined(MBEDTLS_SSL_PROTO_TLS1_2)
  2281. /*
  2282. * Add signature_algorithms for verify (TLS 1.2)
  2283. *
  2284. * SignatureAndHashAlgorithm supported_signature_algorithms<2..2^16-2>;
  2285. *
  2286. * struct {
  2287. * HashAlgorithm hash;
  2288. * SignatureAlgorithm signature;
  2289. * } SignatureAndHashAlgorithm;
  2290. *
  2291. * enum { (255) } HashAlgorithm;
  2292. * enum { (255) } SignatureAlgorithm;
  2293. */
  2294. if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 )
  2295. {
  2296. const int *cur;
  2297. /*
  2298. * Supported signature algorithms
  2299. */
  2300. for( cur = ssl->conf->sig_hashes; *cur != MBEDTLS_MD_NONE; cur++ )
  2301. {
  2302. unsigned char hash = mbedtls_ssl_hash_from_md_alg( *cur );
  2303. if( MBEDTLS_SSL_HASH_NONE == hash || mbedtls_ssl_set_calc_verify_md( ssl, hash ) )
  2304. continue;
  2305. #if defined(MBEDTLS_RSA_C)
  2306. p[2 + sa_len++] = hash;
  2307. p[2 + sa_len++] = MBEDTLS_SSL_SIG_RSA;
  2308. #endif
  2309. #if defined(MBEDTLS_ECDSA_C)
  2310. p[2 + sa_len++] = hash;
  2311. p[2 + sa_len++] = MBEDTLS_SSL_SIG_ECDSA;
  2312. #endif
  2313. }
  2314. p[0] = (unsigned char)( sa_len >> 8 );
  2315. p[1] = (unsigned char)( sa_len );
  2316. sa_len += 2;
  2317. p += sa_len;
  2318. }
  2319. #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
  2320. /*
  2321. * DistinguishedName certificate_authorities<0..2^16-1>;
  2322. * opaque DistinguishedName<1..2^16-1>;
  2323. */
  2324. p += 2;
  2325. total_dn_size = 0;
  2326. if( ssl->conf->cert_req_ca_list == MBEDTLS_SSL_CERT_REQ_CA_LIST_ENABLED )
  2327. {
  2328. #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION)
  2329. if( ssl->handshake->sni_ca_chain != NULL )
  2330. crt = ssl->handshake->sni_ca_chain;
  2331. else
  2332. #endif
  2333. crt = ssl->conf->ca_chain;
  2334. while( crt != NULL && crt->version != 0 )
  2335. {
  2336. dn_size = crt->subject_raw.len;
  2337. if( end < p ||
  2338. (size_t)( end - p ) < dn_size ||
  2339. (size_t)( end - p ) < 2 + dn_size )
  2340. {
  2341. MBEDTLS_SSL_DEBUG_MSG( 1, ( "skipping CAs: buffer too short" ) );
  2342. break;
  2343. }
  2344. *p++ = (unsigned char)( dn_size >> 8 );
  2345. *p++ = (unsigned char)( dn_size );
  2346. memcpy( p, crt->subject_raw.p, dn_size );
  2347. p += dn_size;
  2348. MBEDTLS_SSL_DEBUG_BUF( 3, "requested DN", p - dn_size, dn_size );
  2349. total_dn_size += 2 + dn_size;
  2350. crt = crt->next;
  2351. }
  2352. }
  2353. ssl->out_msglen = p - buf;
  2354. ssl->out_msgtype = MBEDTLS_SSL_MSG_HANDSHAKE;
  2355. ssl->out_msg[0] = MBEDTLS_SSL_HS_CERTIFICATE_REQUEST;
  2356. ssl->out_msg[4 + ct_len + sa_len] = (unsigned char)( total_dn_size >> 8 );
  2357. ssl->out_msg[5 + ct_len + sa_len] = (unsigned char)( total_dn_size );
  2358. ret = mbedtls_ssl_write_record( ssl );
  2359. MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write certificate request" ) );
  2360. return( ret );
  2361. }
  2362. #endif /* !MBEDTLS_KEY_EXCHANGE_RSA_ENABLED &&
  2363. !MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED &&
  2364. !MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED &&
  2365. !MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED &&
  2366. !MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED &&
  2367. !MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED */
  2368. #if defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \
  2369. defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED)
  2370. static int ssl_get_ecdh_params_from_cert( mbedtls_ssl_context *ssl )
  2371. {
  2372. int ret;
  2373. if( ! mbedtls_pk_can_do( mbedtls_ssl_own_key( ssl ), MBEDTLS_PK_ECKEY ) )
  2374. {
  2375. MBEDTLS_SSL_DEBUG_MSG( 1, ( "server key not ECDH capable" ) );
  2376. return( MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH );
  2377. }
  2378. if( ( ret = mbedtls_ecdh_get_params( &ssl->handshake->ecdh_ctx,
  2379. mbedtls_pk_ec( *mbedtls_ssl_own_key( ssl ) ),
  2380. MBEDTLS_ECDH_OURS ) ) != 0 )
  2381. {
  2382. MBEDTLS_SSL_DEBUG_RET( 1, ( "mbedtls_ecdh_get_params" ), ret );
  2383. return( ret );
  2384. }
  2385. return( 0 );
  2386. }
  2387. #endif /* MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) ||
  2388. MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED */
  2389. static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl )
  2390. {
  2391. int ret;
  2392. size_t n = 0;
  2393. const mbedtls_ssl_ciphersuite_t *ciphersuite_info =
  2394. ssl->transform_negotiate->ciphersuite_info;
  2395. #if defined(MBEDTLS_KEY_EXCHANGE__SOME_PFS__ENABLED)
  2396. unsigned char *p = ssl->out_msg + 4;
  2397. size_t len;
  2398. #if defined(MBEDTLS_KEY_EXCHANGE__WITH_SERVER_SIGNATURE__ENABLED)
  2399. unsigned char *dig_signed = p;
  2400. size_t dig_signed_len = 0;
  2401. #endif /* MBEDTLS_KEY_EXCHANGE__WITH_SERVER_SIGNATURE__ENABLED */
  2402. #endif /* MBEDTLS_KEY_EXCHANGE__SOME_PFS__ENABLED */
  2403. MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write server key exchange" ) );
  2404. /*
  2405. *
  2406. * Part 1: Extract static ECDH parameters and abort
  2407. * if ServerKeyExchange not needed.
  2408. *
  2409. */
  2410. /* For suites involving ECDH, extract DH parameters
  2411. * from certificate at this point. */
  2412. #if defined(MBEDTLS_KEY_EXCHANGE__SOME__ECDH_ENABLED)
  2413. if( mbedtls_ssl_ciphersuite_uses_ecdh( ciphersuite_info ) )
  2414. {
  2415. ssl_get_ecdh_params_from_cert( ssl );
  2416. }
  2417. #endif /* MBEDTLS_KEY_EXCHANGE__SOME__ECDH_ENABLED */
  2418. /* Key exchanges not involving ephemeral keys don't use
  2419. * ServerKeyExchange, so end here. */
  2420. #if defined(MBEDTLS_KEY_EXCHANGE__SOME_NON_PFS__ENABLED)
  2421. if( mbedtls_ssl_ciphersuite_no_pfs( ciphersuite_info ) )
  2422. {
  2423. MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write server key exchange" ) );
  2424. ssl->state++;
  2425. return( 0 );
  2426. }
  2427. #endif /* MBEDTLS_KEY_EXCHANGE__NON_PFS__ENABLED */
  2428. /*
  2429. *
  2430. * Part 2: Provide key exchange parameters for chosen ciphersuite.
  2431. *
  2432. */
  2433. /*
  2434. * - ECJPAKE key exchanges
  2435. */
  2436. #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED)
  2437. if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE )
  2438. {
  2439. const unsigned char *end = ssl->out_msg + MBEDTLS_SSL_MAX_CONTENT_LEN;
  2440. ret = mbedtls_ecjpake_write_round_two( &ssl->handshake->ecjpake_ctx,
  2441. p, end - p, &len, ssl->conf->f_rng, ssl->conf->p_rng );
  2442. if( ret != 0 )
  2443. {
  2444. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_write_round_two", ret );
  2445. return( ret );
  2446. }
  2447. p += len;
  2448. n += len;
  2449. }
  2450. #endif /* MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */
  2451. /*
  2452. * For (EC)DHE key exchanges with PSK, parameters are prefixed by support
  2453. * identity hint (RFC 4279, Sec. 3). Until someone needs this feature,
  2454. * we use empty support identity hints here.
  2455. **/
  2456. #if defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) || \
  2457. defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED)
  2458. if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK ||
  2459. ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK )
  2460. {
  2461. *(p++) = 0x00;
  2462. *(p++) = 0x00;
  2463. n += 2;
  2464. }
  2465. #endif /* MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED ||
  2466. MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED */
  2467. /*
  2468. * - DHE key exchanges
  2469. */
  2470. #if defined(MBEDTLS_KEY_EXCHANGE__SOME__DHE_ENABLED)
  2471. if( mbedtls_ssl_ciphersuite_uses_dhe( ciphersuite_info ) )
  2472. {
  2473. if( ssl->conf->dhm_P.p == NULL || ssl->conf->dhm_G.p == NULL )
  2474. {
  2475. MBEDTLS_SSL_DEBUG_MSG( 1, ( "no DH parameters set" ) );
  2476. return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA );
  2477. }
  2478. /*
  2479. * Ephemeral DH parameters:
  2480. *
  2481. * struct {
  2482. * opaque dh_p<1..2^16-1>;
  2483. * opaque dh_g<1..2^16-1>;
  2484. * opaque dh_Ys<1..2^16-1>;
  2485. * } ServerDHParams;
  2486. */
  2487. if( ( ret = mbedtls_dhm_set_group( &ssl->handshake->dhm_ctx,
  2488. &ssl->conf->dhm_P,
  2489. &ssl->conf->dhm_G ) ) != 0 )
  2490. {
  2491. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_set_group", ret );
  2492. return( ret );
  2493. }
  2494. if( ( ret = mbedtls_dhm_make_params( &ssl->handshake->dhm_ctx,
  2495. (int) mbedtls_mpi_size( &ssl->handshake->dhm_ctx.P ),
  2496. p, &len, ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 )
  2497. {
  2498. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_make_params", ret );
  2499. return( ret );
  2500. }
  2501. #if defined(MBEDTLS_KEY_EXCHANGE__WITH_SERVER_SIGNATURE__ENABLED)
  2502. dig_signed = p;
  2503. dig_signed_len = len;
  2504. #endif
  2505. p += len;
  2506. n += len;
  2507. MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: X ", &ssl->handshake->dhm_ctx.X );
  2508. MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: P ", &ssl->handshake->dhm_ctx.P );
  2509. MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: G ", &ssl->handshake->dhm_ctx.G );
  2510. MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: GX", &ssl->handshake->dhm_ctx.GX );
  2511. }
  2512. #endif /* MBEDTLS_KEY_EXCHANGE__SOME__DHE_ENABLED */
  2513. /*
  2514. * - ECDHE key exchanges
  2515. */
  2516. #if defined(MBEDTLS_KEY_EXCHANGE__SOME__ECDHE_ENABLED)
  2517. if( mbedtls_ssl_ciphersuite_uses_ecdhe( ciphersuite_info ) )
  2518. {
  2519. /*
  2520. * Ephemeral ECDH parameters:
  2521. *
  2522. * struct {
  2523. * ECParameters curve_params;
  2524. * ECPoint public;
  2525. * } ServerECDHParams;
  2526. */
  2527. const mbedtls_ecp_curve_info **curve = NULL;
  2528. const mbedtls_ecp_group_id *gid;
  2529. /* Match our preference list against the offered curves */
  2530. for( gid = ssl->conf->curve_list; *gid != MBEDTLS_ECP_DP_NONE; gid++ )
  2531. for( curve = ssl->handshake->curves; *curve != NULL; curve++ )
  2532. if( (*curve)->grp_id == *gid )
  2533. goto curve_matching_done;
  2534. curve_matching_done:
  2535. if( curve == NULL || *curve == NULL )
  2536. {
  2537. MBEDTLS_SSL_DEBUG_MSG( 1, ( "no matching curve for ECDHE" ) );
  2538. return( MBEDTLS_ERR_SSL_NO_CIPHER_CHOSEN );
  2539. }
  2540. MBEDTLS_SSL_DEBUG_MSG( 2, ( "ECDHE curve: %s", (*curve)->name ) );
  2541. if( ( ret = mbedtls_ecp_group_load( &ssl->handshake->ecdh_ctx.grp,
  2542. (*curve)->grp_id ) ) != 0 )
  2543. {
  2544. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecp_group_load", ret );
  2545. return( ret );
  2546. }
  2547. if( ( ret = mbedtls_ecdh_make_params( &ssl->handshake->ecdh_ctx, &len,
  2548. p, MBEDTLS_SSL_MAX_CONTENT_LEN - n,
  2549. ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 )
  2550. {
  2551. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_make_params", ret );
  2552. return( ret );
  2553. }
  2554. #if defined(MBEDTLS_KEY_EXCHANGE__WITH_SERVER_SIGNATURE__ENABLED)
  2555. dig_signed = p;
  2556. dig_signed_len = len;
  2557. #endif
  2558. p += len;
  2559. n += len;
  2560. MBEDTLS_SSL_DEBUG_ECP( 3, "ECDH: Q ", &ssl->handshake->ecdh_ctx.Q );
  2561. }
  2562. #endif /* MBEDTLS_KEY_EXCHANGE__SOME__ECDHE_ENABLED */
  2563. /*
  2564. *
  2565. * Part 3: For key exchanges involving the server signing the
  2566. * exchange parameters, compute and add the signature here.
  2567. *
  2568. */
  2569. #if defined(MBEDTLS_KEY_EXCHANGE__WITH_SERVER_SIGNATURE__ENABLED)
  2570. if( mbedtls_ssl_ciphersuite_uses_server_signature( ciphersuite_info ) )
  2571. {
  2572. size_t signature_len = 0;
  2573. unsigned int hashlen = 0;
  2574. unsigned char hash[64];
  2575. /*
  2576. * 3.1: Choose hash algorithm:
  2577. * A: For TLS 1.2, obey signature-hash-algorithm extension
  2578. * to choose appropriate hash.
  2579. * B: For SSL3, TLS1.0, TLS1.1 and ECDHE_ECDSA, use SHA1
  2580. * (RFC 4492, Sec. 5.4)
  2581. * C: Otherwise, use MD5 + SHA1 (RFC 4346, Sec. 7.4.3)
  2582. */
  2583. mbedtls_md_type_t md_alg;
  2584. #if defined(MBEDTLS_SSL_PROTO_TLS1_2)
  2585. mbedtls_pk_type_t sig_alg =
  2586. mbedtls_ssl_get_ciphersuite_sig_pk_alg( ciphersuite_info );
  2587. if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 )
  2588. {
  2589. /* A: For TLS 1.2, obey signature-hash-algorithm extension
  2590. * (RFC 5246, Sec. 7.4.1.4.1). */
  2591. if( sig_alg == MBEDTLS_PK_NONE ||
  2592. ( md_alg = mbedtls_ssl_sig_hash_set_find( &ssl->handshake->hash_algs,
  2593. sig_alg ) ) == MBEDTLS_MD_NONE )
  2594. {
  2595. MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) );
  2596. /* (... because we choose a cipher suite
  2597. * only if there is a matching hash.) */
  2598. return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
  2599. }
  2600. }
  2601. else
  2602. #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
  2603. #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \
  2604. defined(MBEDTLS_SSL_PROTO_TLS1_1)
  2605. if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA )
  2606. {
  2607. /* B: Default hash SHA1 */
  2608. md_alg = MBEDTLS_MD_SHA1;
  2609. }
  2610. else
  2611. #endif /* MBEDTLS_SSL_PROTO_SSL3 || MBEDTLS_SSL_PROTO_TLS1 || \
  2612. MBEDTLS_SSL_PROTO_TLS1_1 */
  2613. {
  2614. /* C: MD5 + SHA1 */
  2615. md_alg = MBEDTLS_MD_NONE;
  2616. }
  2617. MBEDTLS_SSL_DEBUG_MSG( 3, ( "pick hash algorithm %d for signing", md_alg ) );
  2618. /*
  2619. * 3.2: Compute the hash to be signed
  2620. */
  2621. #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \
  2622. defined(MBEDTLS_SSL_PROTO_TLS1_1)
  2623. if( md_alg == MBEDTLS_MD_NONE )
  2624. {
  2625. hashlen = 36;
  2626. ret = mbedtls_ssl_get_key_exchange_md_ssl_tls( ssl, hash,
  2627. dig_signed,
  2628. dig_signed_len );
  2629. if( ret != 0 )
  2630. return( ret );
  2631. }
  2632. else
  2633. #endif /* MBEDTLS_SSL_PROTO_SSL3 || MBEDTLS_SSL_PROTO_TLS1 || \
  2634. MBEDTLS_SSL_PROTO_TLS1_1 */
  2635. #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \
  2636. defined(MBEDTLS_SSL_PROTO_TLS1_2)
  2637. if( md_alg != MBEDTLS_MD_NONE )
  2638. {
  2639. /* Info from md_alg will be used instead */
  2640. hashlen = 0;
  2641. ret = mbedtls_ssl_get_key_exchange_md_tls1_2( ssl, hash,
  2642. dig_signed,
  2643. dig_signed_len,
  2644. md_alg );
  2645. if( ret != 0 )
  2646. return( ret );
  2647. }
  2648. else
  2649. #endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 || \
  2650. MBEDTLS_SSL_PROTO_TLS1_2 */
  2651. {
  2652. MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) );
  2653. return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
  2654. }
  2655. MBEDTLS_SSL_DEBUG_BUF( 3, "parameters hash", hash, hashlen != 0 ? hashlen :
  2656. (unsigned int) ( mbedtls_md_get_size( mbedtls_md_info_from_type( md_alg ) ) ) );
  2657. /*
  2658. * 3.3: Compute and add the signature
  2659. */
  2660. if( mbedtls_ssl_own_key( ssl ) == NULL )
  2661. {
  2662. MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no private key" ) );
  2663. return( MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED );
  2664. }
  2665. #if defined(MBEDTLS_SSL_PROTO_TLS1_2)
  2666. if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 )
  2667. {
  2668. /*
  2669. * For TLS 1.2, we need to specify signature and hash algorithm
  2670. * explicitly through a prefix to the signature.
  2671. *
  2672. * struct {
  2673. * HashAlgorithm hash;
  2674. * SignatureAlgorithm signature;
  2675. * } SignatureAndHashAlgorithm;
  2676. *
  2677. * struct {
  2678. * SignatureAndHashAlgorithm algorithm;
  2679. * opaque signature<0..2^16-1>;
  2680. * } DigitallySigned;
  2681. *
  2682. */
  2683. *(p++) = mbedtls_ssl_hash_from_md_alg( md_alg );
  2684. *(p++) = mbedtls_ssl_sig_from_pk_alg( sig_alg );
  2685. n += 2;
  2686. }
  2687. #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
  2688. if( ( ret = mbedtls_pk_sign( mbedtls_ssl_own_key( ssl ), md_alg, hash, hashlen,
  2689. p + 2 , &signature_len, ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 )
  2690. {
  2691. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_pk_sign", ret );
  2692. return( ret );
  2693. }
  2694. *(p++) = (unsigned char)( signature_len >> 8 );
  2695. *(p++) = (unsigned char)( signature_len );
  2696. n += 2;
  2697. MBEDTLS_SSL_DEBUG_BUF( 3, "my signature", p, signature_len );
  2698. n += signature_len;
  2699. }
  2700. #endif /* MBEDTLS_KEY_EXCHANGE__WITH_SERVER_SIGNATURE__ENABLED */
  2701. /* Done with actual work; add header and send. */
  2702. ssl->out_msglen = 4 + n;
  2703. ssl->out_msgtype = MBEDTLS_SSL_MSG_HANDSHAKE;
  2704. ssl->out_msg[0] = MBEDTLS_SSL_HS_SERVER_KEY_EXCHANGE;
  2705. ssl->state++;
  2706. if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 )
  2707. {
  2708. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret );
  2709. return( ret );
  2710. }
  2711. MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write server key exchange" ) );
  2712. return( 0 );
  2713. }
  2714. static int ssl_write_server_hello_done( mbedtls_ssl_context *ssl )
  2715. {
  2716. int ret;
  2717. MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write server hello done" ) );
  2718. ssl->out_msglen = 4;
  2719. ssl->out_msgtype = MBEDTLS_SSL_MSG_HANDSHAKE;
  2720. ssl->out_msg[0] = MBEDTLS_SSL_HS_SERVER_HELLO_DONE;
  2721. ssl->state++;
  2722. #if defined(MBEDTLS_SSL_PROTO_DTLS)
  2723. if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM )
  2724. mbedtls_ssl_send_flight_completed( ssl );
  2725. #endif
  2726. if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 )
  2727. {
  2728. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret );
  2729. return( ret );
  2730. }
  2731. MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write server hello done" ) );
  2732. return( 0 );
  2733. }
  2734. #if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \
  2735. defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED)
  2736. static int ssl_parse_client_dh_public( mbedtls_ssl_context *ssl, unsigned char **p,
  2737. const unsigned char *end )
  2738. {
  2739. int ret = MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE;
  2740. size_t n;
  2741. /*
  2742. * Receive G^Y mod P, premaster = (G^Y)^X mod P
  2743. */
  2744. if( *p + 2 > end )
  2745. {
  2746. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) );
  2747. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE );
  2748. }
  2749. n = ( (*p)[0] << 8 ) | (*p)[1];
  2750. *p += 2;
  2751. if( *p + n > end )
  2752. {
  2753. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) );
  2754. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE );
  2755. }
  2756. if( ( ret = mbedtls_dhm_read_public( &ssl->handshake->dhm_ctx, *p, n ) ) != 0 )
  2757. {
  2758. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_read_public", ret );
  2759. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP );
  2760. }
  2761. *p += n;
  2762. MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: GY", &ssl->handshake->dhm_ctx.GY );
  2763. return( ret );
  2764. }
  2765. #endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED ||
  2766. MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */
  2767. #if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) || \
  2768. defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED)
  2769. static int ssl_parse_encrypted_pms( mbedtls_ssl_context *ssl,
  2770. const unsigned char *p,
  2771. const unsigned char *end,
  2772. size_t pms_offset )
  2773. {
  2774. int ret;
  2775. size_t len = mbedtls_pk_get_len( mbedtls_ssl_own_key( ssl ) );
  2776. unsigned char *pms = ssl->handshake->premaster + pms_offset;
  2777. unsigned char ver[2];
  2778. unsigned char fake_pms[48], peer_pms[48];
  2779. unsigned char mask;
  2780. size_t i, peer_pmslen;
  2781. unsigned int diff;
  2782. if( ! mbedtls_pk_can_do( mbedtls_ssl_own_key( ssl ), MBEDTLS_PK_RSA ) )
  2783. {
  2784. MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no RSA private key" ) );
  2785. return( MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED );
  2786. }
  2787. /*
  2788. * Decrypt the premaster using own private RSA key
  2789. */
  2790. #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \
  2791. defined(MBEDTLS_SSL_PROTO_TLS1_2)
  2792. if( ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_0 )
  2793. {
  2794. if( *p++ != ( ( len >> 8 ) & 0xFF ) ||
  2795. *p++ != ( ( len ) & 0xFF ) )
  2796. {
  2797. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) );
  2798. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE );
  2799. }
  2800. }
  2801. #endif
  2802. if( p + len != end )
  2803. {
  2804. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) );
  2805. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE );
  2806. }
  2807. mbedtls_ssl_write_version( ssl->handshake->max_major_ver,
  2808. ssl->handshake->max_minor_ver,
  2809. ssl->conf->transport, ver );
  2810. /*
  2811. * Protection against Bleichenbacher's attack: invalid PKCS#1 v1.5 padding
  2812. * must not cause the connection to end immediately; instead, send a
  2813. * bad_record_mac later in the handshake.
  2814. * Also, avoid data-dependant branches here to protect against
  2815. * timing-based variants.
  2816. */
  2817. ret = ssl->conf->f_rng( ssl->conf->p_rng, fake_pms, sizeof( fake_pms ) );
  2818. if( ret != 0 )
  2819. return( ret );
  2820. ret = mbedtls_pk_decrypt( mbedtls_ssl_own_key( ssl ), p, len,
  2821. peer_pms, &peer_pmslen,
  2822. sizeof( peer_pms ),
  2823. ssl->conf->f_rng, ssl->conf->p_rng );
  2824. diff = (unsigned int) ret;
  2825. diff |= peer_pmslen ^ 48;
  2826. diff |= peer_pms[0] ^ ver[0];
  2827. diff |= peer_pms[1] ^ ver[1];
  2828. #if defined(MBEDTLS_SSL_DEBUG_ALL)
  2829. if( diff != 0 )
  2830. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) );
  2831. #endif
  2832. if( sizeof( ssl->handshake->premaster ) < pms_offset ||
  2833. sizeof( ssl->handshake->premaster ) - pms_offset < 48 )
  2834. {
  2835. MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) );
  2836. return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
  2837. }
  2838. ssl->handshake->pmslen = 48;
  2839. /* mask = diff ? 0xff : 0x00 using bit operations to avoid branches */
  2840. /* MSVC has a warning about unary minus on unsigned, but this is
  2841. * well-defined and precisely what we want to do here */
  2842. #if defined(_MSC_VER)
  2843. #pragma warning( push )
  2844. #pragma warning( disable : 4146 )
  2845. #endif
  2846. mask = - ( ( diff | - diff ) >> ( sizeof( unsigned int ) * 8 - 1 ) );
  2847. #if defined(_MSC_VER)
  2848. #pragma warning( pop )
  2849. #endif
  2850. for( i = 0; i < ssl->handshake->pmslen; i++ )
  2851. pms[i] = ( mask & fake_pms[i] ) | ( (~mask) & peer_pms[i] );
  2852. return( 0 );
  2853. }
  2854. #endif /* MBEDTLS_KEY_EXCHANGE_RSA_ENABLED ||
  2855. MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED */
  2856. #if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED)
  2857. static int ssl_parse_client_psk_identity( mbedtls_ssl_context *ssl, unsigned char **p,
  2858. const unsigned char *end )
  2859. {
  2860. int ret = 0;
  2861. size_t n;
  2862. if( ssl->conf->f_psk == NULL &&
  2863. ( ssl->conf->psk == NULL || ssl->conf->psk_identity == NULL ||
  2864. ssl->conf->psk_identity_len == 0 || ssl->conf->psk_len == 0 ) )
  2865. {
  2866. MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no pre-shared key" ) );
  2867. return( MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED );
  2868. }
  2869. /*
  2870. * Receive client pre-shared key identity name
  2871. */
  2872. if( end - *p < 2 )
  2873. {
  2874. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) );
  2875. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE );
  2876. }
  2877. n = ( (*p)[0] << 8 ) | (*p)[1];
  2878. *p += 2;
  2879. if( n < 1 || n > 65535 || n > (size_t) ( end - *p ) )
  2880. {
  2881. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) );
  2882. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE );
  2883. }
  2884. if( ssl->conf->f_psk != NULL )
  2885. {
  2886. if( ssl->conf->f_psk( ssl->conf->p_psk, ssl, *p, n ) != 0 )
  2887. ret = MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY;
  2888. }
  2889. else
  2890. {
  2891. /* Identity is not a big secret since clients send it in the clear,
  2892. * but treat it carefully anyway, just in case */
  2893. if( n != ssl->conf->psk_identity_len ||
  2894. mbedtls_ssl_safer_memcmp( ssl->conf->psk_identity, *p, n ) != 0 )
  2895. {
  2896. ret = MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY;
  2897. }
  2898. }
  2899. if( ret == MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY )
  2900. {
  2901. MBEDTLS_SSL_DEBUG_BUF( 3, "Unknown PSK identity", *p, n );
  2902. mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL,
  2903. MBEDTLS_SSL_ALERT_MSG_UNKNOWN_PSK_IDENTITY );
  2904. return( MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY );
  2905. }
  2906. *p += n;
  2907. return( 0 );
  2908. }
  2909. #endif /* MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED */
  2910. static int ssl_parse_client_key_exchange( mbedtls_ssl_context *ssl )
  2911. {
  2912. int ret;
  2913. const mbedtls_ssl_ciphersuite_t *ciphersuite_info;
  2914. unsigned char *p, *end;
  2915. ciphersuite_info = ssl->transform_negotiate->ciphersuite_info;
  2916. MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse client key exchange" ) );
  2917. if( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 )
  2918. {
  2919. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret );
  2920. return( ret );
  2921. }
  2922. p = ssl->in_msg + mbedtls_ssl_hs_hdr_len( ssl );
  2923. end = ssl->in_msg + ssl->in_hslen;
  2924. if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE )
  2925. {
  2926. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) );
  2927. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE );
  2928. }
  2929. if( ssl->in_msg[0] != MBEDTLS_SSL_HS_CLIENT_KEY_EXCHANGE )
  2930. {
  2931. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) );
  2932. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE );
  2933. }
  2934. #if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED)
  2935. if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_RSA )
  2936. {
  2937. if( ( ret = ssl_parse_client_dh_public( ssl, &p, end ) ) != 0 )
  2938. {
  2939. MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_dh_public" ), ret );
  2940. return( ret );
  2941. }
  2942. if( p != end )
  2943. {
  2944. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange" ) );
  2945. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE );
  2946. }
  2947. if( ( ret = mbedtls_dhm_calc_secret( &ssl->handshake->dhm_ctx,
  2948. ssl->handshake->premaster,
  2949. MBEDTLS_PREMASTER_SIZE,
  2950. &ssl->handshake->pmslen,
  2951. ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 )
  2952. {
  2953. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_calc_secret", ret );
  2954. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_CS );
  2955. }
  2956. MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: K ", &ssl->handshake->dhm_ctx.K );
  2957. }
  2958. else
  2959. #endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED */
  2960. #if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \
  2961. defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \
  2962. defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \
  2963. defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED)
  2964. if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA ||
  2965. ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA ||
  2966. ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_RSA ||
  2967. ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA )
  2968. {
  2969. if( ( ret = mbedtls_ecdh_read_public( &ssl->handshake->ecdh_ctx,
  2970. p, end - p) ) != 0 )
  2971. {
  2972. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_read_public", ret );
  2973. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP );
  2974. }
  2975. MBEDTLS_SSL_DEBUG_ECP( 3, "ECDH: Qp ", &ssl->handshake->ecdh_ctx.Qp );
  2976. if( ( ret = mbedtls_ecdh_calc_secret( &ssl->handshake->ecdh_ctx,
  2977. &ssl->handshake->pmslen,
  2978. ssl->handshake->premaster,
  2979. MBEDTLS_MPI_MAX_SIZE,
  2980. ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 )
  2981. {
  2982. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_calc_secret", ret );
  2983. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_CS );
  2984. }
  2985. MBEDTLS_SSL_DEBUG_MPI( 3, "ECDH: z ", &ssl->handshake->ecdh_ctx.z );
  2986. }
  2987. else
  2988. #endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED ||
  2989. MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED ||
  2990. MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED ||
  2991. MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED */
  2992. #if defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED)
  2993. if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK )
  2994. {
  2995. if( ( ret = ssl_parse_client_psk_identity( ssl, &p, end ) ) != 0 )
  2996. {
  2997. MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret );
  2998. return( ret );
  2999. }
  3000. if( p != end )
  3001. {
  3002. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange" ) );
  3003. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE );
  3004. }
  3005. if( ( ret = mbedtls_ssl_psk_derive_premaster( ssl,
  3006. ciphersuite_info->key_exchange ) ) != 0 )
  3007. {
  3008. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_psk_derive_premaster", ret );
  3009. return( ret );
  3010. }
  3011. }
  3012. else
  3013. #endif /* MBEDTLS_KEY_EXCHANGE_PSK_ENABLED */
  3014. #if defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED)
  3015. if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK )
  3016. {
  3017. if( ( ret = ssl_parse_client_psk_identity( ssl, &p, end ) ) != 0 )
  3018. {
  3019. MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret );
  3020. return( ret );
  3021. }
  3022. if( ( ret = ssl_parse_encrypted_pms( ssl, p, end, 2 ) ) != 0 )
  3023. {
  3024. MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_encrypted_pms" ), ret );
  3025. return( ret );
  3026. }
  3027. if( ( ret = mbedtls_ssl_psk_derive_premaster( ssl,
  3028. ciphersuite_info->key_exchange ) ) != 0 )
  3029. {
  3030. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_psk_derive_premaster", ret );
  3031. return( ret );
  3032. }
  3033. }
  3034. else
  3035. #endif /* MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED */
  3036. #if defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED)
  3037. if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK )
  3038. {
  3039. if( ( ret = ssl_parse_client_psk_identity( ssl, &p, end ) ) != 0 )
  3040. {
  3041. MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret );
  3042. return( ret );
  3043. }
  3044. if( ( ret = ssl_parse_client_dh_public( ssl, &p, end ) ) != 0 )
  3045. {
  3046. MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_dh_public" ), ret );
  3047. return( ret );
  3048. }
  3049. if( p != end )
  3050. {
  3051. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange" ) );
  3052. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE );
  3053. }
  3054. if( ( ret = mbedtls_ssl_psk_derive_premaster( ssl,
  3055. ciphersuite_info->key_exchange ) ) != 0 )
  3056. {
  3057. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_psk_derive_premaster", ret );
  3058. return( ret );
  3059. }
  3060. }
  3061. else
  3062. #endif /* MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */
  3063. #if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED)
  3064. if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK )
  3065. {
  3066. if( ( ret = ssl_parse_client_psk_identity( ssl, &p, end ) ) != 0 )
  3067. {
  3068. MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret );
  3069. return( ret );
  3070. }
  3071. if( ( ret = mbedtls_ecdh_read_public( &ssl->handshake->ecdh_ctx,
  3072. p, end - p ) ) != 0 )
  3073. {
  3074. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_read_public", ret );
  3075. return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP );
  3076. }
  3077. MBEDTLS_SSL_DEBUG_ECP( 3, "ECDH: Qp ", &ssl->handshake->ecdh_ctx.Qp );
  3078. if( ( ret = mbedtls_ssl_psk_derive_premaster( ssl,
  3079. ciphersuite_info->key_exchange ) ) != 0 )
  3080. {
  3081. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_psk_derive_premaster", ret );
  3082. return( ret );
  3083. }
  3084. }
  3085. else
  3086. #endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED */
  3087. #if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED)
  3088. if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA )
  3089. {
  3090. if( ( ret = ssl_parse_encrypted_pms( ssl, p, end, 0 ) ) != 0 )
  3091. {
  3092. MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_parse_encrypted_pms_secret" ), ret );
  3093. return( ret );
  3094. }
  3095. }
  3096. else
  3097. #endif /* MBEDTLS_KEY_EXCHANGE_RSA_ENABLED */
  3098. #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED)
  3099. if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE )
  3100. {
  3101. ret = mbedtls_ecjpake_read_round_two( &ssl->handshake->ecjpake_ctx,
  3102. p, end - p );
  3103. if( ret != 0 )
  3104. {
  3105. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_read_round_two", ret );
  3106. return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE );
  3107. }
  3108. ret = mbedtls_ecjpake_derive_secret( &ssl->handshake->ecjpake_ctx,
  3109. ssl->handshake->premaster, 32, &ssl->handshake->pmslen,
  3110. ssl->conf->f_rng, ssl->conf->p_rng );
  3111. if( ret != 0 )
  3112. {
  3113. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_derive_secret", ret );
  3114. return( ret );
  3115. }
  3116. }
  3117. else
  3118. #endif /* MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */
  3119. {
  3120. MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) );
  3121. return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
  3122. }
  3123. if( ( ret = mbedtls_ssl_derive_keys( ssl ) ) != 0 )
  3124. {
  3125. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_derive_keys", ret );
  3126. return( ret );
  3127. }
  3128. ssl->state++;
  3129. MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse client key exchange" ) );
  3130. return( 0 );
  3131. }
  3132. #if !defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) && \
  3133. !defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) && \
  3134. !defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) && \
  3135. !defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) && \
  3136. !defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED)&& \
  3137. !defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED)
  3138. static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl )
  3139. {
  3140. const mbedtls_ssl_ciphersuite_t *ciphersuite_info =
  3141. ssl->transform_negotiate->ciphersuite_info;
  3142. MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse certificate verify" ) );
  3143. if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK ||
  3144. ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ||
  3145. ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ||
  3146. ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK ||
  3147. ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE )
  3148. {
  3149. MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse certificate verify" ) );
  3150. ssl->state++;
  3151. return( 0 );
  3152. }
  3153. MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) );
  3154. return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
  3155. }
  3156. #else
  3157. static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl )
  3158. {
  3159. int ret = MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE;
  3160. size_t i, sig_len;
  3161. unsigned char hash[48];
  3162. unsigned char *hash_start = hash;
  3163. size_t hashlen;
  3164. #if defined(MBEDTLS_SSL_PROTO_TLS1_2)
  3165. mbedtls_pk_type_t pk_alg;
  3166. #endif
  3167. mbedtls_md_type_t md_alg;
  3168. const mbedtls_ssl_ciphersuite_t *ciphersuite_info =
  3169. ssl->transform_negotiate->ciphersuite_info;
  3170. MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse certificate verify" ) );
  3171. if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK ||
  3172. ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ||
  3173. ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ||
  3174. ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK ||
  3175. ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ||
  3176. ssl->session_negotiate->peer_cert == NULL )
  3177. {
  3178. MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse certificate verify" ) );
  3179. ssl->state++;
  3180. return( 0 );
  3181. }
  3182. /* Read the message without adding it to the checksum */
  3183. do {
  3184. if( ( ret = mbedtls_ssl_read_record_layer( ssl ) ) != 0 )
  3185. {
  3186. MBEDTLS_SSL_DEBUG_RET( 1, ( "mbedtls_ssl_read_record_layer" ), ret );
  3187. return( ret );
  3188. }
  3189. ret = mbedtls_ssl_handle_message_type( ssl );
  3190. } while( MBEDTLS_ERR_SSL_NON_FATAL == ret );
  3191. if( 0 != ret )
  3192. {
  3193. MBEDTLS_SSL_DEBUG_RET( 1, ( "mbedtls_ssl_handle_message_type" ), ret );
  3194. return( ret );
  3195. }
  3196. ssl->state++;
  3197. /* Process the message contents */
  3198. if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ||
  3199. ssl->in_msg[0] != MBEDTLS_SSL_HS_CERTIFICATE_VERIFY )
  3200. {
  3201. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate verify message" ) );
  3202. return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY );
  3203. }
  3204. i = mbedtls_ssl_hs_hdr_len( ssl );
  3205. /*
  3206. * struct {
  3207. * SignatureAndHashAlgorithm algorithm; -- TLS 1.2 only
  3208. * opaque signature<0..2^16-1>;
  3209. * } DigitallySigned;
  3210. */
  3211. #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \
  3212. defined(MBEDTLS_SSL_PROTO_TLS1_1)
  3213. if( ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_3 )
  3214. {
  3215. md_alg = MBEDTLS_MD_NONE;
  3216. hashlen = 36;
  3217. /* For ECDSA, use SHA-1, not MD-5 + SHA-1 */
  3218. if( mbedtls_pk_can_do( &ssl->session_negotiate->peer_cert->pk,
  3219. MBEDTLS_PK_ECDSA ) )
  3220. {
  3221. hash_start += 16;
  3222. hashlen -= 16;
  3223. md_alg = MBEDTLS_MD_SHA1;
  3224. }
  3225. }
  3226. else
  3227. #endif /* MBEDTLS_SSL_PROTO_SSL3 || MBEDTLS_SSL_PROTO_TLS1 ||
  3228. MBEDTLS_SSL_PROTO_TLS1_1 */
  3229. #if defined(MBEDTLS_SSL_PROTO_TLS1_2)
  3230. if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 )
  3231. {
  3232. if( i + 2 > ssl->in_hslen )
  3233. {
  3234. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate verify message" ) );
  3235. return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY );
  3236. }
  3237. /*
  3238. * Hash
  3239. */
  3240. md_alg = mbedtls_ssl_md_alg_from_hash( ssl->in_msg[i] );
  3241. if( md_alg == MBEDTLS_MD_NONE || mbedtls_ssl_set_calc_verify_md( ssl, ssl->in_msg[i] ) )
  3242. {
  3243. MBEDTLS_SSL_DEBUG_MSG( 1, ( "peer not adhering to requested sig_alg"
  3244. " for verify message" ) );
  3245. return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY );
  3246. }
  3247. #if !defined(MBEDTLS_MD_SHA1)
  3248. if( MBEDTLS_MD_SHA1 == md_alg )
  3249. hash_start += 16;
  3250. #endif
  3251. /* Info from md_alg will be used instead */
  3252. hashlen = 0;
  3253. i++;
  3254. /*
  3255. * Signature
  3256. */
  3257. if( ( pk_alg = mbedtls_ssl_pk_alg_from_sig( ssl->in_msg[i] ) )
  3258. == MBEDTLS_PK_NONE )
  3259. {
  3260. MBEDTLS_SSL_DEBUG_MSG( 1, ( "peer not adhering to requested sig_alg"
  3261. " for verify message" ) );
  3262. return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY );
  3263. }
  3264. /*
  3265. * Check the certificate's key type matches the signature alg
  3266. */
  3267. if( ! mbedtls_pk_can_do( &ssl->session_negotiate->peer_cert->pk, pk_alg ) )
  3268. {
  3269. MBEDTLS_SSL_DEBUG_MSG( 1, ( "sig_alg doesn't match cert key" ) );
  3270. return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY );
  3271. }
  3272. i++;
  3273. }
  3274. else
  3275. #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */
  3276. {
  3277. MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) );
  3278. return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
  3279. }
  3280. if( i + 2 > ssl->in_hslen )
  3281. {
  3282. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate verify message" ) );
  3283. return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY );
  3284. }
  3285. sig_len = ( ssl->in_msg[i] << 8 ) | ssl->in_msg[i+1];
  3286. i += 2;
  3287. if( i + sig_len != ssl->in_hslen )
  3288. {
  3289. MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate verify message" ) );
  3290. return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY );
  3291. }
  3292. /* Calculate hash and verify signature */
  3293. ssl->handshake->calc_verify( ssl, hash );
  3294. if( ( ret = mbedtls_pk_verify( &ssl->session_negotiate->peer_cert->pk,
  3295. md_alg, hash_start, hashlen,
  3296. ssl->in_msg + i, sig_len ) ) != 0 )
  3297. {
  3298. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_pk_verify", ret );
  3299. return( ret );
  3300. }
  3301. mbedtls_ssl_update_handshake_status( ssl );
  3302. MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse certificate verify" ) );
  3303. return( ret );
  3304. }
  3305. #endif /* !MBEDTLS_KEY_EXCHANGE_RSA_ENABLED &&
  3306. !MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED &&
  3307. !MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED &&
  3308. !MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED &&
  3309. !MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED &&
  3310. !MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED */
  3311. #if defined(MBEDTLS_SSL_SESSION_TICKETS)
  3312. static int ssl_write_new_session_ticket( mbedtls_ssl_context *ssl )
  3313. {
  3314. int ret;
  3315. size_t tlen;
  3316. uint32_t lifetime;
  3317. MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write new session ticket" ) );
  3318. ssl->out_msgtype = MBEDTLS_SSL_MSG_HANDSHAKE;
  3319. ssl->out_msg[0] = MBEDTLS_SSL_HS_NEW_SESSION_TICKET;
  3320. /*
  3321. * struct {
  3322. * uint32 ticket_lifetime_hint;
  3323. * opaque ticket<0..2^16-1>;
  3324. * } NewSessionTicket;
  3325. *
  3326. * 4 . 7 ticket_lifetime_hint (0 = unspecified)
  3327. * 8 . 9 ticket_len (n)
  3328. * 10 . 9+n ticket content
  3329. */
  3330. if( ( ret = ssl->conf->f_ticket_write( ssl->conf->p_ticket,
  3331. ssl->session_negotiate,
  3332. ssl->out_msg + 10,
  3333. ssl->out_msg + MBEDTLS_SSL_MAX_CONTENT_LEN,
  3334. &tlen, &lifetime ) ) != 0 )
  3335. {
  3336. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_ticket_write", ret );
  3337. tlen = 0;
  3338. }
  3339. ssl->out_msg[4] = ( lifetime >> 24 ) & 0xFF;
  3340. ssl->out_msg[5] = ( lifetime >> 16 ) & 0xFF;
  3341. ssl->out_msg[6] = ( lifetime >> 8 ) & 0xFF;
  3342. ssl->out_msg[7] = ( lifetime ) & 0xFF;
  3343. ssl->out_msg[8] = (unsigned char)( ( tlen >> 8 ) & 0xFF );
  3344. ssl->out_msg[9] = (unsigned char)( ( tlen ) & 0xFF );
  3345. ssl->out_msglen = 10 + tlen;
  3346. /*
  3347. * Morally equivalent to updating ssl->state, but NewSessionTicket and
  3348. * ChangeCipherSpec share the same state.
  3349. */
  3350. ssl->handshake->new_session_ticket = 0;
  3351. if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 )
  3352. {
  3353. MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret );
  3354. return( ret );
  3355. }
  3356. MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write new session ticket" ) );
  3357. return( 0 );
  3358. }
  3359. #endif /* MBEDTLS_SSL_SESSION_TICKETS */
  3360. /*
  3361. * SSL handshake -- server side -- single step
  3362. */
  3363. int mbedtls_ssl_handshake_server_step( mbedtls_ssl_context *ssl )
  3364. {
  3365. int ret = 0;
  3366. if( ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER || ssl->handshake == NULL )
  3367. return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA );
  3368. MBEDTLS_SSL_DEBUG_MSG( 2, ( "server state: %d", ssl->state ) );
  3369. if( ( ret = mbedtls_ssl_flush_output( ssl ) ) != 0 )
  3370. return( ret );
  3371. #if defined(MBEDTLS_SSL_PROTO_DTLS)
  3372. if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM &&
  3373. ssl->handshake->retransmit_state == MBEDTLS_SSL_RETRANS_SENDING )
  3374. {
  3375. if( ( ret = mbedtls_ssl_resend( ssl ) ) != 0 )
  3376. return( ret );
  3377. }
  3378. #endif
  3379. switch( ssl->state )
  3380. {
  3381. case MBEDTLS_SSL_HELLO_REQUEST:
  3382. ssl->state = MBEDTLS_SSL_CLIENT_HELLO;
  3383. break;
  3384. /*
  3385. * <== ClientHello
  3386. */
  3387. case MBEDTLS_SSL_CLIENT_HELLO:
  3388. ret = ssl_parse_client_hello( ssl );
  3389. break;
  3390. #if defined(MBEDTLS_SSL_PROTO_DTLS)
  3391. case MBEDTLS_SSL_SERVER_HELLO_VERIFY_REQUEST_SENT:
  3392. return( MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED );
  3393. #endif
  3394. /*
  3395. * ==> ServerHello
  3396. * Certificate
  3397. * ( ServerKeyExchange )
  3398. * ( CertificateRequest )
  3399. * ServerHelloDone
  3400. */
  3401. case MBEDTLS_SSL_SERVER_HELLO:
  3402. ret = ssl_write_server_hello( ssl );
  3403. break;
  3404. case MBEDTLS_SSL_SERVER_CERTIFICATE:
  3405. ret = mbedtls_ssl_write_certificate( ssl );
  3406. break;
  3407. case MBEDTLS_SSL_SERVER_KEY_EXCHANGE:
  3408. ret = ssl_write_server_key_exchange( ssl );
  3409. break;
  3410. case MBEDTLS_SSL_CERTIFICATE_REQUEST:
  3411. ret = ssl_write_certificate_request( ssl );
  3412. break;
  3413. case MBEDTLS_SSL_SERVER_HELLO_DONE:
  3414. ret = ssl_write_server_hello_done( ssl );
  3415. break;
  3416. /*
  3417. * <== ( Certificate/Alert )
  3418. * ClientKeyExchange
  3419. * ( CertificateVerify )
  3420. * ChangeCipherSpec
  3421. * Finished
  3422. */
  3423. case MBEDTLS_SSL_CLIENT_CERTIFICATE:
  3424. ret = mbedtls_ssl_parse_certificate( ssl );
  3425. break;
  3426. case MBEDTLS_SSL_CLIENT_KEY_EXCHANGE:
  3427. ret = ssl_parse_client_key_exchange( ssl );
  3428. break;
  3429. case MBEDTLS_SSL_CERTIFICATE_VERIFY:
  3430. ret = ssl_parse_certificate_verify( ssl );
  3431. break;
  3432. case MBEDTLS_SSL_CLIENT_CHANGE_CIPHER_SPEC:
  3433. ret = mbedtls_ssl_parse_change_cipher_spec( ssl );
  3434. break;
  3435. case MBEDTLS_SSL_CLIENT_FINISHED:
  3436. ret = mbedtls_ssl_parse_finished( ssl );
  3437. break;
  3438. /*
  3439. * ==> ( NewSessionTicket )
  3440. * ChangeCipherSpec
  3441. * Finished
  3442. */
  3443. case MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC:
  3444. #if defined(MBEDTLS_SSL_SESSION_TICKETS)
  3445. if( ssl->handshake->new_session_ticket != 0 )
  3446. ret = ssl_write_new_session_ticket( ssl );
  3447. else
  3448. #endif
  3449. ret = mbedtls_ssl_write_change_cipher_spec( ssl );
  3450. break;
  3451. case MBEDTLS_SSL_SERVER_FINISHED:
  3452. ret = mbedtls_ssl_write_finished( ssl );
  3453. break;
  3454. case MBEDTLS_SSL_FLUSH_BUFFERS:
  3455. MBEDTLS_SSL_DEBUG_MSG( 2, ( "handshake: done" ) );
  3456. ssl->state = MBEDTLS_SSL_HANDSHAKE_WRAPUP;
  3457. break;
  3458. case MBEDTLS_SSL_HANDSHAKE_WRAPUP:
  3459. mbedtls_ssl_handshake_wrapup( ssl );
  3460. break;
  3461. default:
  3462. MBEDTLS_SSL_DEBUG_MSG( 1, ( "invalid state %d", ssl->state ) );
  3463. return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA );
  3464. }
  3465. return( ret );
  3466. }
  3467. #endif /* MBEDTLS_SSL_SRV_C */