t1_lib.c 140 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332
  1. /* ssl/t1_lib.c */
  2. /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
  3. * All rights reserved.
  4. *
  5. * This package is an SSL implementation written
  6. * by Eric Young (eay@cryptsoft.com).
  7. * The implementation was written so as to conform with Netscapes SSL.
  8. *
  9. * This library is free for commercial and non-commercial use as long as
  10. * the following conditions are aheared to. The following conditions
  11. * apply to all code found in this distribution, be it the RC4, RSA,
  12. * lhash, DES, etc., code; not just the SSL code. The SSL documentation
  13. * included with this distribution is covered by the same copyright terms
  14. * except that the holder is Tim Hudson (tjh@cryptsoft.com).
  15. *
  16. * Copyright remains Eric Young's, and as such any Copyright notices in
  17. * the code are not to be removed.
  18. * If this package is used in a product, Eric Young should be given attribution
  19. * as the author of the parts of the library used.
  20. * This can be in the form of a textual message at program startup or
  21. * in documentation (online or textual) provided with the package.
  22. *
  23. * Redistribution and use in source and binary forms, with or without
  24. * modification, are permitted provided that the following conditions
  25. * are met:
  26. * 1. Redistributions of source code must retain the copyright
  27. * notice, this list of conditions and the following disclaimer.
  28. * 2. Redistributions in binary form must reproduce the above copyright
  29. * notice, this list of conditions and the following disclaimer in the
  30. * documentation and/or other materials provided with the distribution.
  31. * 3. All advertising materials mentioning features or use of this software
  32. * must display the following acknowledgement:
  33. * "This product includes cryptographic software written by
  34. * Eric Young (eay@cryptsoft.com)"
  35. * The word 'cryptographic' can be left out if the rouines from the library
  36. * being used are not cryptographic related :-).
  37. * 4. If you include any Windows specific code (or a derivative thereof) from
  38. * the apps directory (application code) you must include an acknowledgement:
  39. * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
  40. *
  41. * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
  42. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  43. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  44. * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  45. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  46. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  47. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  48. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  49. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  50. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  51. * SUCH DAMAGE.
  52. *
  53. * The licence and distribution terms for any publically available version or
  54. * derivative of this code cannot be changed. i.e. this code cannot simply be
  55. * copied and put under another distribution licence
  56. * [including the GNU Public Licence.]
  57. */
  58. /* ====================================================================
  59. * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved.
  60. *
  61. * Redistribution and use in source and binary forms, with or without
  62. * modification, are permitted provided that the following conditions
  63. * are met:
  64. *
  65. * 1. Redistributions of source code must retain the above copyright
  66. * notice, this list of conditions and the following disclaimer.
  67. *
  68. * 2. Redistributions in binary form must reproduce the above copyright
  69. * notice, this list of conditions and the following disclaimer in
  70. * the documentation and/or other materials provided with the
  71. * distribution.
  72. *
  73. * 3. All advertising materials mentioning features or use of this
  74. * software must display the following acknowledgment:
  75. * "This product includes software developed by the OpenSSL Project
  76. * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
  77. *
  78. * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
  79. * endorse or promote products derived from this software without
  80. * prior written permission. For written permission, please contact
  81. * openssl-core@openssl.org.
  82. *
  83. * 5. Products derived from this software may not be called "OpenSSL"
  84. * nor may "OpenSSL" appear in their names without prior written
  85. * permission of the OpenSSL Project.
  86. *
  87. * 6. Redistributions of any form whatsoever must retain the following
  88. * acknowledgment:
  89. * "This product includes software developed by the OpenSSL Project
  90. * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
  91. *
  92. * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
  93. * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  94. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  95. * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
  96. * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  97. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  98. * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  99. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  100. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  101. * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  102. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
  103. * OF THE POSSIBILITY OF SUCH DAMAGE.
  104. * ====================================================================
  105. *
  106. * This product includes cryptographic software written by Eric Young
  107. * (eay@cryptsoft.com). This product includes software written by Tim
  108. * Hudson (tjh@cryptsoft.com).
  109. *
  110. */
  111. #include <stdio.h>
  112. #include <openssl/objects.h>
  113. #include <openssl/evp.h>
  114. #include <openssl/hmac.h>
  115. #include <openssl/ocsp.h>
  116. #include <openssl/rand.h>
  117. #ifndef OPENSSL_NO_DH
  118. # include <openssl/dh.h>
  119. # include <openssl/bn.h>
  120. #endif
  121. #include "ssl_locl.h"
  122. static int tls_decrypt_ticket(SSL *s, const unsigned char *tick, int ticklen,
  123. const unsigned char *sess_id, int sesslen,
  124. SSL_SESSION **psess);
  125. static int ssl_check_clienthello_tlsext_early(SSL *s);
  126. int ssl_check_serverhello_tlsext(SSL *s);
  127. SSL3_ENC_METHOD const TLSv1_enc_data = {
  128. tls1_enc,
  129. tls1_mac,
  130. tls1_setup_key_block,
  131. tls1_generate_master_secret,
  132. tls1_change_cipher_state,
  133. tls1_final_finish_mac,
  134. TLS1_FINISH_MAC_LENGTH,
  135. TLS_MD_CLIENT_FINISH_CONST, TLS_MD_CLIENT_FINISH_CONST_SIZE,
  136. TLS_MD_SERVER_FINISH_CONST, TLS_MD_SERVER_FINISH_CONST_SIZE,
  137. tls1_alert_code,
  138. tls1_export_keying_material,
  139. 0,
  140. SSL3_HM_HEADER_LENGTH,
  141. ssl3_set_handshake_header,
  142. ssl3_handshake_write
  143. };
  144. SSL3_ENC_METHOD const TLSv1_1_enc_data = {
  145. tls1_enc,
  146. tls1_mac,
  147. tls1_setup_key_block,
  148. tls1_generate_master_secret,
  149. tls1_change_cipher_state,
  150. tls1_final_finish_mac,
  151. TLS1_FINISH_MAC_LENGTH,
  152. TLS_MD_CLIENT_FINISH_CONST, TLS_MD_CLIENT_FINISH_CONST_SIZE,
  153. TLS_MD_SERVER_FINISH_CONST, TLS_MD_SERVER_FINISH_CONST_SIZE,
  154. tls1_alert_code,
  155. tls1_export_keying_material,
  156. SSL_ENC_FLAG_EXPLICIT_IV,
  157. SSL3_HM_HEADER_LENGTH,
  158. ssl3_set_handshake_header,
  159. ssl3_handshake_write
  160. };
  161. SSL3_ENC_METHOD const TLSv1_2_enc_data = {
  162. tls1_enc,
  163. tls1_mac,
  164. tls1_setup_key_block,
  165. tls1_generate_master_secret,
  166. tls1_change_cipher_state,
  167. tls1_final_finish_mac,
  168. TLS1_FINISH_MAC_LENGTH,
  169. TLS_MD_CLIENT_FINISH_CONST, TLS_MD_CLIENT_FINISH_CONST_SIZE,
  170. TLS_MD_SERVER_FINISH_CONST, TLS_MD_SERVER_FINISH_CONST_SIZE,
  171. tls1_alert_code,
  172. tls1_export_keying_material,
  173. SSL_ENC_FLAG_EXPLICIT_IV | SSL_ENC_FLAG_SIGALGS | SSL_ENC_FLAG_SHA256_PRF
  174. | SSL_ENC_FLAG_TLS1_2_CIPHERS,
  175. SSL3_HM_HEADER_LENGTH,
  176. ssl3_set_handshake_header,
  177. ssl3_handshake_write
  178. };
  179. long tls1_default_timeout(void)
  180. {
  181. /*
  182. * 2 hours, the 24 hours mentioned in the TLSv1 spec is way too long for
  183. * http, the cache would over fill
  184. */
  185. return (60 * 60 * 2);
  186. }
  187. int tls1_new(SSL *s)
  188. {
  189. if (!ssl3_new(s))
  190. return (0);
  191. s->method->ssl_clear(s);
  192. return (1);
  193. }
  194. void tls1_free(SSL *s)
  195. {
  196. OPENSSL_free(s->tlsext_session_ticket);
  197. ssl3_free(s);
  198. }
  199. void tls1_clear(SSL *s)
  200. {
  201. ssl3_clear(s);
  202. if (s->method->version == TLS_ANY_VERSION)
  203. s->version = TLS_MAX_VERSION;
  204. else
  205. s->version = s->method->version;
  206. }
  207. #ifndef OPENSSL_NO_EC
  208. typedef struct {
  209. int nid; /* Curve NID */
  210. int secbits; /* Bits of security (from SP800-57) */
  211. unsigned int flags; /* Flags: currently just field type */
  212. } tls_curve_info;
  213. # define TLS_CURVE_CHAR2 0x1
  214. # define TLS_CURVE_PRIME 0x0
  215. static const tls_curve_info nid_list[] = {
  216. {NID_sect163k1, 80, TLS_CURVE_CHAR2}, /* sect163k1 (1) */
  217. {NID_sect163r1, 80, TLS_CURVE_CHAR2}, /* sect163r1 (2) */
  218. {NID_sect163r2, 80, TLS_CURVE_CHAR2}, /* sect163r2 (3) */
  219. {NID_sect193r1, 80, TLS_CURVE_CHAR2}, /* sect193r1 (4) */
  220. {NID_sect193r2, 80, TLS_CURVE_CHAR2}, /* sect193r2 (5) */
  221. {NID_sect233k1, 112, TLS_CURVE_CHAR2}, /* sect233k1 (6) */
  222. {NID_sect233r1, 112, TLS_CURVE_CHAR2}, /* sect233r1 (7) */
  223. {NID_sect239k1, 112, TLS_CURVE_CHAR2}, /* sect239k1 (8) */
  224. {NID_sect283k1, 128, TLS_CURVE_CHAR2}, /* sect283k1 (9) */
  225. {NID_sect283r1, 128, TLS_CURVE_CHAR2}, /* sect283r1 (10) */
  226. {NID_sect409k1, 192, TLS_CURVE_CHAR2}, /* sect409k1 (11) */
  227. {NID_sect409r1, 192, TLS_CURVE_CHAR2}, /* sect409r1 (12) */
  228. {NID_sect571k1, 256, TLS_CURVE_CHAR2}, /* sect571k1 (13) */
  229. {NID_sect571r1, 256, TLS_CURVE_CHAR2}, /* sect571r1 (14) */
  230. {NID_secp160k1, 80, TLS_CURVE_PRIME}, /* secp160k1 (15) */
  231. {NID_secp160r1, 80, TLS_CURVE_PRIME}, /* secp160r1 (16) */
  232. {NID_secp160r2, 80, TLS_CURVE_PRIME}, /* secp160r2 (17) */
  233. {NID_secp192k1, 80, TLS_CURVE_PRIME}, /* secp192k1 (18) */
  234. {NID_X9_62_prime192v1, 80, TLS_CURVE_PRIME}, /* secp192r1 (19) */
  235. {NID_secp224k1, 112, TLS_CURVE_PRIME}, /* secp224k1 (20) */
  236. {NID_secp224r1, 112, TLS_CURVE_PRIME}, /* secp224r1 (21) */
  237. {NID_secp256k1, 128, TLS_CURVE_PRIME}, /* secp256k1 (22) */
  238. {NID_X9_62_prime256v1, 128, TLS_CURVE_PRIME}, /* secp256r1 (23) */
  239. {NID_secp384r1, 192, TLS_CURVE_PRIME}, /* secp384r1 (24) */
  240. {NID_secp521r1, 256, TLS_CURVE_PRIME}, /* secp521r1 (25) */
  241. {NID_brainpoolP256r1, 128, TLS_CURVE_PRIME}, /* brainpoolP256r1 (26) */
  242. {NID_brainpoolP384r1, 192, TLS_CURVE_PRIME}, /* brainpoolP384r1 (27) */
  243. {NID_brainpoolP512r1, 256, TLS_CURVE_PRIME}, /* brainpool512r1 (28) */
  244. };
  245. static const unsigned char ecformats_default[] = {
  246. TLSEXT_ECPOINTFORMAT_uncompressed,
  247. TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime,
  248. TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2
  249. };
  250. /* The default curves */
  251. static const unsigned char eccurves_default[] = {
  252. /* Prefer P-256 which has the fastest and most secure implementations. */
  253. 0, 23, /* secp256r1 (23) */
  254. /* Other >= 256-bit prime curves. */
  255. 0, 25, /* secp521r1 (25) */
  256. 0, 28, /* brainpool512r1 (28) */
  257. 0, 27, /* brainpoolP384r1 (27) */
  258. 0, 24, /* secp384r1 (24) */
  259. 0, 26, /* brainpoolP256r1 (26) */
  260. 0, 22, /* secp256k1 (22) */
  261. /* >= 256-bit binary curves. */
  262. 0, 14, /* sect571r1 (14) */
  263. 0, 13, /* sect571k1 (13) */
  264. 0, 11, /* sect409k1 (11) */
  265. 0, 12, /* sect409r1 (12) */
  266. 0, 9, /* sect283k1 (9) */
  267. 0, 10, /* sect283r1 (10) */
  268. };
  269. static const unsigned char eccurves_all[] = {
  270. /* Prefer P-256 which has the fastest and most secure implementations. */
  271. 0, 23, /* secp256r1 (23) */
  272. /* Other >= 256-bit prime curves. */
  273. 0, 25, /* secp521r1 (25) */
  274. 0, 28, /* brainpool512r1 (28) */
  275. 0, 27, /* brainpoolP384r1 (27) */
  276. 0, 24, /* secp384r1 (24) */
  277. 0, 26, /* brainpoolP256r1 (26) */
  278. 0, 22, /* secp256k1 (22) */
  279. /* >= 256-bit binary curves. */
  280. 0, 14, /* sect571r1 (14) */
  281. 0, 13, /* sect571k1 (13) */
  282. 0, 11, /* sect409k1 (11) */
  283. 0, 12, /* sect409r1 (12) */
  284. 0, 9, /* sect283k1 (9) */
  285. 0, 10, /* sect283r1 (10) */
  286. /*
  287. * Remaining curves disabled by default but still permitted if set
  288. * via an explicit callback or parameters.
  289. */
  290. 0, 20, /* secp224k1 (20) */
  291. 0, 21, /* secp224r1 (21) */
  292. 0, 18, /* secp192k1 (18) */
  293. 0, 19, /* secp192r1 (19) */
  294. 0, 15, /* secp160k1 (15) */
  295. 0, 16, /* secp160r1 (16) */
  296. 0, 17, /* secp160r2 (17) */
  297. 0, 8, /* sect239k1 (8) */
  298. 0, 6, /* sect233k1 (6) */
  299. 0, 7, /* sect233r1 (7) */
  300. 0, 4, /* sect193r1 (4) */
  301. 0, 5, /* sect193r2 (5) */
  302. 0, 1, /* sect163k1 (1) */
  303. 0, 2, /* sect163r1 (2) */
  304. 0, 3, /* sect163r2 (3) */
  305. };
  306. static const unsigned char suiteb_curves[] = {
  307. 0, TLSEXT_curve_P_256,
  308. 0, TLSEXT_curve_P_384
  309. };
  310. int tls1_ec_curve_id2nid(int curve_id)
  311. {
  312. /* ECC curves from RFC 4492 and RFC 7027 */
  313. if ((curve_id < 1) || ((unsigned int)curve_id > OSSL_NELEM(nid_list)))
  314. return 0;
  315. return nid_list[curve_id - 1].nid;
  316. }
  317. int tls1_ec_nid2curve_id(int nid)
  318. {
  319. /* ECC curves from RFC 4492 and RFC 7027 */
  320. switch (nid) {
  321. case NID_sect163k1: /* sect163k1 (1) */
  322. return 1;
  323. case NID_sect163r1: /* sect163r1 (2) */
  324. return 2;
  325. case NID_sect163r2: /* sect163r2 (3) */
  326. return 3;
  327. case NID_sect193r1: /* sect193r1 (4) */
  328. return 4;
  329. case NID_sect193r2: /* sect193r2 (5) */
  330. return 5;
  331. case NID_sect233k1: /* sect233k1 (6) */
  332. return 6;
  333. case NID_sect233r1: /* sect233r1 (7) */
  334. return 7;
  335. case NID_sect239k1: /* sect239k1 (8) */
  336. return 8;
  337. case NID_sect283k1: /* sect283k1 (9) */
  338. return 9;
  339. case NID_sect283r1: /* sect283r1 (10) */
  340. return 10;
  341. case NID_sect409k1: /* sect409k1 (11) */
  342. return 11;
  343. case NID_sect409r1: /* sect409r1 (12) */
  344. return 12;
  345. case NID_sect571k1: /* sect571k1 (13) */
  346. return 13;
  347. case NID_sect571r1: /* sect571r1 (14) */
  348. return 14;
  349. case NID_secp160k1: /* secp160k1 (15) */
  350. return 15;
  351. case NID_secp160r1: /* secp160r1 (16) */
  352. return 16;
  353. case NID_secp160r2: /* secp160r2 (17) */
  354. return 17;
  355. case NID_secp192k1: /* secp192k1 (18) */
  356. return 18;
  357. case NID_X9_62_prime192v1: /* secp192r1 (19) */
  358. return 19;
  359. case NID_secp224k1: /* secp224k1 (20) */
  360. return 20;
  361. case NID_secp224r1: /* secp224r1 (21) */
  362. return 21;
  363. case NID_secp256k1: /* secp256k1 (22) */
  364. return 22;
  365. case NID_X9_62_prime256v1: /* secp256r1 (23) */
  366. return 23;
  367. case NID_secp384r1: /* secp384r1 (24) */
  368. return 24;
  369. case NID_secp521r1: /* secp521r1 (25) */
  370. return 25;
  371. case NID_brainpoolP256r1: /* brainpoolP256r1 (26) */
  372. return 26;
  373. case NID_brainpoolP384r1: /* brainpoolP384r1 (27) */
  374. return 27;
  375. case NID_brainpoolP512r1: /* brainpool512r1 (28) */
  376. return 28;
  377. default:
  378. return 0;
  379. }
  380. }
  381. /*
  382. * Get curves list, if "sess" is set return client curves otherwise
  383. * preferred list.
  384. * Sets |num_curves| to the number of curves in the list, i.e.,
  385. * the length of |pcurves| is 2 * num_curves.
  386. * Returns 1 on success and 0 if the client curves list has invalid format.
  387. * The latter indicates an internal error: we should not be accepting such
  388. * lists in the first place.
  389. * TODO(emilia): we should really be storing the curves list in explicitly
  390. * parsed form instead. (However, this would affect binary compatibility
  391. * so cannot happen in the 1.0.x series.)
  392. */
  393. static int tls1_get_curvelist(SSL *s, int sess,
  394. const unsigned char **pcurves,
  395. size_t *num_curves)
  396. {
  397. size_t pcurveslen = 0;
  398. if (sess) {
  399. *pcurves = s->session->tlsext_ellipticcurvelist;
  400. pcurveslen = s->session->tlsext_ellipticcurvelist_length;
  401. } else {
  402. /* For Suite B mode only include P-256, P-384 */
  403. switch (tls1_suiteb(s)) {
  404. case SSL_CERT_FLAG_SUITEB_128_LOS:
  405. *pcurves = suiteb_curves;
  406. pcurveslen = sizeof(suiteb_curves);
  407. break;
  408. case SSL_CERT_FLAG_SUITEB_128_LOS_ONLY:
  409. *pcurves = suiteb_curves;
  410. pcurveslen = 2;
  411. break;
  412. case SSL_CERT_FLAG_SUITEB_192_LOS:
  413. *pcurves = suiteb_curves + 2;
  414. pcurveslen = 2;
  415. break;
  416. default:
  417. *pcurves = s->tlsext_ellipticcurvelist;
  418. pcurveslen = s->tlsext_ellipticcurvelist_length;
  419. }
  420. if (!*pcurves) {
  421. *pcurves = eccurves_default;
  422. pcurveslen = sizeof(eccurves_default);
  423. }
  424. }
  425. /* We do not allow odd length arrays to enter the system. */
  426. if (pcurveslen & 1) {
  427. SSLerr(SSL_F_TLS1_GET_CURVELIST, ERR_R_INTERNAL_ERROR);
  428. *num_curves = 0;
  429. return 0;
  430. } else {
  431. *num_curves = pcurveslen / 2;
  432. return 1;
  433. }
  434. }
  435. /* See if curve is allowed by security callback */
  436. static int tls_curve_allowed(SSL *s, const unsigned char *curve, int op)
  437. {
  438. const tls_curve_info *cinfo;
  439. if (curve[0])
  440. return 1;
  441. if ((curve[1] < 1) || ((size_t)curve[1] > OSSL_NELEM(nid_list)))
  442. return 0;
  443. cinfo = &nid_list[curve[1] - 1];
  444. # ifdef OPENSSL_NO_EC2M
  445. if (cinfo->flags & TLS_CURVE_CHAR2)
  446. return 0;
  447. # endif
  448. return ssl_security(s, op, cinfo->secbits, cinfo->nid, (void *)curve);
  449. }
  450. /* Check a curve is one of our preferences */
  451. int tls1_check_curve(SSL *s, const unsigned char *p, size_t len)
  452. {
  453. const unsigned char *curves;
  454. size_t num_curves, i;
  455. unsigned int suiteb_flags = tls1_suiteb(s);
  456. if (len != 3 || p[0] != NAMED_CURVE_TYPE)
  457. return 0;
  458. /* Check curve matches Suite B preferences */
  459. if (suiteb_flags) {
  460. unsigned long cid = s->s3->tmp.new_cipher->id;
  461. if (p[1])
  462. return 0;
  463. if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256) {
  464. if (p[2] != TLSEXT_curve_P_256)
  465. return 0;
  466. } else if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384) {
  467. if (p[2] != TLSEXT_curve_P_384)
  468. return 0;
  469. } else /* Should never happen */
  470. return 0;
  471. }
  472. if (!tls1_get_curvelist(s, 0, &curves, &num_curves))
  473. return 0;
  474. for (i = 0; i < num_curves; i++, curves += 2) {
  475. if (p[1] == curves[0] && p[2] == curves[1])
  476. return tls_curve_allowed(s, p + 1, SSL_SECOP_CURVE_CHECK);
  477. }
  478. return 0;
  479. }
  480. /*-
  481. * For nmatch >= 0, return the NID of the |nmatch|th shared curve or NID_undef
  482. * if there is no match.
  483. * For nmatch == -1, return number of matches
  484. * For nmatch == -2, return the NID of the curve to use for
  485. * an EC tmp key, or NID_undef if there is no match.
  486. */
  487. int tls1_shared_curve(SSL *s, int nmatch)
  488. {
  489. const unsigned char *pref, *supp;
  490. size_t num_pref, num_supp, i, j;
  491. int k;
  492. /* Can't do anything on client side */
  493. if (s->server == 0)
  494. return -1;
  495. if (nmatch == -2) {
  496. if (tls1_suiteb(s)) {
  497. /*
  498. * For Suite B ciphersuite determines curve: we already know
  499. * these are acceptable due to previous checks.
  500. */
  501. unsigned long cid = s->s3->tmp.new_cipher->id;
  502. if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256)
  503. return NID_X9_62_prime256v1; /* P-256 */
  504. if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384)
  505. return NID_secp384r1; /* P-384 */
  506. /* Should never happen */
  507. return NID_undef;
  508. }
  509. /* If not Suite B just return first preference shared curve */
  510. nmatch = 0;
  511. }
  512. /*
  513. * Avoid truncation. tls1_get_curvelist takes an int
  514. * but s->options is a long...
  515. */
  516. if (!tls1_get_curvelist
  517. (s, (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) != 0, &supp,
  518. &num_supp))
  519. /* In practice, NID_undef == 0 but let's be precise. */
  520. return nmatch == -1 ? 0 : NID_undef;
  521. if (!tls1_get_curvelist
  522. (s, !(s->options & SSL_OP_CIPHER_SERVER_PREFERENCE), &pref,
  523. &num_pref))
  524. return nmatch == -1 ? 0 : NID_undef;
  525. /*
  526. * If the client didn't send the elliptic_curves extension all of them
  527. * are allowed.
  528. */
  529. if (num_supp == 0 && (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) != 0) {
  530. supp = eccurves_all;
  531. num_supp = sizeof(eccurves_all) / 2;
  532. } else if (num_pref == 0 &&
  533. (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) == 0) {
  534. pref = eccurves_all;
  535. num_pref = sizeof(eccurves_all) / 2;
  536. }
  537. k = 0;
  538. for (i = 0; i < num_pref; i++, pref += 2) {
  539. const unsigned char *tsupp = supp;
  540. for (j = 0; j < num_supp; j++, tsupp += 2) {
  541. if (pref[0] == tsupp[0] && pref[1] == tsupp[1]) {
  542. if (!tls_curve_allowed(s, pref, SSL_SECOP_CURVE_SHARED))
  543. continue;
  544. if (nmatch == k) {
  545. int id = (pref[0] << 8) | pref[1];
  546. return tls1_ec_curve_id2nid(id);
  547. }
  548. k++;
  549. }
  550. }
  551. }
  552. if (nmatch == -1)
  553. return k;
  554. /* Out of range (nmatch > k). */
  555. return NID_undef;
  556. }
  557. int tls1_set_curves(unsigned char **pext, size_t *pextlen,
  558. int *curves, size_t ncurves)
  559. {
  560. unsigned char *clist, *p;
  561. size_t i;
  562. /*
  563. * Bitmap of curves included to detect duplicates: only works while curve
  564. * ids < 32
  565. */
  566. unsigned long dup_list = 0;
  567. clist = OPENSSL_malloc(ncurves * 2);
  568. if (clist == NULL)
  569. return 0;
  570. for (i = 0, p = clist; i < ncurves; i++) {
  571. unsigned long idmask;
  572. int id;
  573. id = tls1_ec_nid2curve_id(curves[i]);
  574. idmask = 1L << id;
  575. if (!id || (dup_list & idmask)) {
  576. OPENSSL_free(clist);
  577. return 0;
  578. }
  579. dup_list |= idmask;
  580. s2n(id, p);
  581. }
  582. OPENSSL_free(*pext);
  583. *pext = clist;
  584. *pextlen = ncurves * 2;
  585. return 1;
  586. }
  587. # define MAX_CURVELIST 28
  588. typedef struct {
  589. size_t nidcnt;
  590. int nid_arr[MAX_CURVELIST];
  591. } nid_cb_st;
  592. static int nid_cb(const char *elem, int len, void *arg)
  593. {
  594. nid_cb_st *narg = arg;
  595. size_t i;
  596. int nid;
  597. char etmp[20];
  598. if (elem == NULL)
  599. return 0;
  600. if (narg->nidcnt == MAX_CURVELIST)
  601. return 0;
  602. if (len > (int)(sizeof(etmp) - 1))
  603. return 0;
  604. memcpy(etmp, elem, len);
  605. etmp[len] = 0;
  606. nid = EC_curve_nist2nid(etmp);
  607. if (nid == NID_undef)
  608. nid = OBJ_sn2nid(etmp);
  609. if (nid == NID_undef)
  610. nid = OBJ_ln2nid(etmp);
  611. if (nid == NID_undef)
  612. return 0;
  613. for (i = 0; i < narg->nidcnt; i++)
  614. if (narg->nid_arr[i] == nid)
  615. return 0;
  616. narg->nid_arr[narg->nidcnt++] = nid;
  617. return 1;
  618. }
  619. /* Set curves based on a colon separate list */
  620. int tls1_set_curves_list(unsigned char **pext, size_t *pextlen,
  621. const char *str)
  622. {
  623. nid_cb_st ncb;
  624. ncb.nidcnt = 0;
  625. if (!CONF_parse_list(str, ':', 1, nid_cb, &ncb))
  626. return 0;
  627. if (pext == NULL)
  628. return 1;
  629. return tls1_set_curves(pext, pextlen, ncb.nid_arr, ncb.nidcnt);
  630. }
  631. /* For an EC key set TLS id and required compression based on parameters */
  632. static int tls1_set_ec_id(unsigned char *curve_id, unsigned char *comp_id,
  633. EC_KEY *ec)
  634. {
  635. int is_prime, id;
  636. const EC_GROUP *grp;
  637. const EC_METHOD *meth;
  638. if (!ec)
  639. return 0;
  640. /* Determine if it is a prime field */
  641. grp = EC_KEY_get0_group(ec);
  642. if (!grp)
  643. return 0;
  644. meth = EC_GROUP_method_of(grp);
  645. if (!meth)
  646. return 0;
  647. if (EC_METHOD_get_field_type(meth) == NID_X9_62_prime_field)
  648. is_prime = 1;
  649. else
  650. is_prime = 0;
  651. /* Determine curve ID */
  652. id = EC_GROUP_get_curve_name(grp);
  653. id = tls1_ec_nid2curve_id(id);
  654. /* If we have an ID set it, otherwise set arbitrary explicit curve */
  655. if (id) {
  656. curve_id[0] = 0;
  657. curve_id[1] = (unsigned char)id;
  658. } else {
  659. curve_id[0] = 0xff;
  660. if (is_prime)
  661. curve_id[1] = 0x01;
  662. else
  663. curve_id[1] = 0x02;
  664. }
  665. if (comp_id) {
  666. if (EC_KEY_get0_public_key(ec) == NULL)
  667. return 0;
  668. if (EC_KEY_get_conv_form(ec) == POINT_CONVERSION_COMPRESSED) {
  669. if (is_prime)
  670. *comp_id = TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime;
  671. else
  672. *comp_id = TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2;
  673. } else
  674. *comp_id = TLSEXT_ECPOINTFORMAT_uncompressed;
  675. }
  676. return 1;
  677. }
  678. /* Check an EC key is compatible with extensions */
  679. static int tls1_check_ec_key(SSL *s,
  680. unsigned char *curve_id, unsigned char *comp_id)
  681. {
  682. const unsigned char *pformats, *pcurves;
  683. size_t num_formats, num_curves, i;
  684. int j;
  685. /*
  686. * If point formats extension present check it, otherwise everything is
  687. * supported (see RFC4492).
  688. */
  689. if (comp_id && s->session->tlsext_ecpointformatlist) {
  690. pformats = s->session->tlsext_ecpointformatlist;
  691. num_formats = s->session->tlsext_ecpointformatlist_length;
  692. for (i = 0; i < num_formats; i++, pformats++) {
  693. if (*comp_id == *pformats)
  694. break;
  695. }
  696. if (i == num_formats)
  697. return 0;
  698. }
  699. if (!curve_id)
  700. return 1;
  701. /* Check curve is consistent with client and server preferences */
  702. for (j = 0; j <= 1; j++) {
  703. if (!tls1_get_curvelist(s, j, &pcurves, &num_curves))
  704. return 0;
  705. if (j == 1 && num_curves == 0) {
  706. /*
  707. * If we've not received any curves then skip this check.
  708. * RFC 4492 does not require the supported elliptic curves extension
  709. * so if it is not sent we can just choose any curve.
  710. * It is invalid to send an empty list in the elliptic curves
  711. * extension, so num_curves == 0 always means no extension.
  712. */
  713. break;
  714. }
  715. for (i = 0; i < num_curves; i++, pcurves += 2) {
  716. if (pcurves[0] == curve_id[0] && pcurves[1] == curve_id[1])
  717. break;
  718. }
  719. if (i == num_curves)
  720. return 0;
  721. /* For clients can only check sent curve list */
  722. if (!s->server)
  723. break;
  724. }
  725. return 1;
  726. }
  727. static void tls1_get_formatlist(SSL *s, const unsigned char **pformats,
  728. size_t *num_formats)
  729. {
  730. /*
  731. * If we have a custom point format list use it otherwise use default
  732. */
  733. if (s->tlsext_ecpointformatlist) {
  734. *pformats = s->tlsext_ecpointformatlist;
  735. *num_formats = s->tlsext_ecpointformatlist_length;
  736. } else {
  737. *pformats = ecformats_default;
  738. /* For Suite B we don't support char2 fields */
  739. if (tls1_suiteb(s))
  740. *num_formats = sizeof(ecformats_default) - 1;
  741. else
  742. *num_formats = sizeof(ecformats_default);
  743. }
  744. }
  745. /*
  746. * Check cert parameters compatible with extensions: currently just checks EC
  747. * certificates have compatible curves and compression.
  748. */
  749. static int tls1_check_cert_param(SSL *s, X509 *x, int set_ee_md)
  750. {
  751. unsigned char comp_id, curve_id[2];
  752. EVP_PKEY *pkey;
  753. int rv;
  754. pkey = X509_get0_pubkey(x);
  755. if (!pkey)
  756. return 0;
  757. /* If not EC nothing to do */
  758. if (EVP_PKEY_id(pkey) != EVP_PKEY_EC)
  759. return 1;
  760. rv = tls1_set_ec_id(curve_id, &comp_id, EVP_PKEY_get0_EC_KEY(pkey));
  761. if (!rv)
  762. return 0;
  763. /*
  764. * Can't check curve_id for client certs as we don't have a supported
  765. * curves extension.
  766. */
  767. rv = tls1_check_ec_key(s, s->server ? curve_id : NULL, &comp_id);
  768. if (!rv)
  769. return 0;
  770. /*
  771. * Special case for suite B. We *MUST* sign using SHA256+P-256 or
  772. * SHA384+P-384, adjust digest if necessary.
  773. */
  774. if (set_ee_md && tls1_suiteb(s)) {
  775. int check_md;
  776. size_t i;
  777. CERT *c = s->cert;
  778. if (curve_id[0])
  779. return 0;
  780. /* Check to see we have necessary signing algorithm */
  781. if (curve_id[1] == TLSEXT_curve_P_256)
  782. check_md = NID_ecdsa_with_SHA256;
  783. else if (curve_id[1] == TLSEXT_curve_P_384)
  784. check_md = NID_ecdsa_with_SHA384;
  785. else
  786. return 0; /* Should never happen */
  787. for (i = 0; i < c->shared_sigalgslen; i++)
  788. if (check_md == c->shared_sigalgs[i].signandhash_nid)
  789. break;
  790. if (i == c->shared_sigalgslen)
  791. return 0;
  792. if (set_ee_md == 2) {
  793. if (check_md == NID_ecdsa_with_SHA256)
  794. s->s3->tmp.md[SSL_PKEY_ECC] = EVP_sha256();
  795. else
  796. s->s3->tmp.md[SSL_PKEY_ECC] = EVP_sha384();
  797. }
  798. }
  799. return rv;
  800. }
  801. # ifndef OPENSSL_NO_EC
  802. /*
  803. * tls1_check_ec_tmp_key - Check EC temporary key compatiblity
  804. * @s: SSL connection
  805. * @cid: Cipher ID we're considering using
  806. *
  807. * Checks that the kECDHE cipher suite we're considering using
  808. * is compatible with the client extensions.
  809. *
  810. * Returns 0 when the cipher can't be used or 1 when it can.
  811. */
  812. int tls1_check_ec_tmp_key(SSL *s, unsigned long cid)
  813. {
  814. # ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
  815. /* Allow any curve: not just those peer supports */
  816. if (s->cert->cert_flags & SSL_CERT_FLAG_BROKEN_PROTOCOL)
  817. return 1;
  818. # endif
  819. /*
  820. * If Suite B, AES128 MUST use P-256 and AES256 MUST use P-384, no other
  821. * curves permitted.
  822. */
  823. if (tls1_suiteb(s)) {
  824. unsigned char curve_id[2];
  825. /* Curve to check determined by ciphersuite */
  826. if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256)
  827. curve_id[1] = TLSEXT_curve_P_256;
  828. else if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384)
  829. curve_id[1] = TLSEXT_curve_P_384;
  830. else
  831. return 0;
  832. curve_id[0] = 0;
  833. /* Check this curve is acceptable */
  834. if (!tls1_check_ec_key(s, curve_id, NULL))
  835. return 0;
  836. return 1;
  837. }
  838. /* Need a shared curve */
  839. if (tls1_shared_curve(s, 0))
  840. return 1;
  841. return 0;
  842. }
  843. # endif /* OPENSSL_NO_EC */
  844. #else
  845. static int tls1_check_cert_param(SSL *s, X509 *x, int set_ee_md)
  846. {
  847. return 1;
  848. }
  849. #endif /* OPENSSL_NO_EC */
  850. /*
  851. * List of supported signature algorithms and hashes. Should make this
  852. * customisable at some point, for now include everything we support.
  853. */
  854. #ifdef OPENSSL_NO_RSA
  855. # define tlsext_sigalg_rsa(md) /* */
  856. #else
  857. # define tlsext_sigalg_rsa(md) md, TLSEXT_signature_rsa,
  858. #endif
  859. #ifdef OPENSSL_NO_DSA
  860. # define tlsext_sigalg_dsa(md) /* */
  861. #else
  862. # define tlsext_sigalg_dsa(md) md, TLSEXT_signature_dsa,
  863. #endif
  864. #ifdef OPENSSL_NO_EC
  865. # define tlsext_sigalg_ecdsa(md) /* */
  866. #else
  867. # define tlsext_sigalg_ecdsa(md) md, TLSEXT_signature_ecdsa,
  868. #endif
  869. #define tlsext_sigalg(md) \
  870. tlsext_sigalg_rsa(md) \
  871. tlsext_sigalg_dsa(md) \
  872. tlsext_sigalg_ecdsa(md)
  873. static const unsigned char tls12_sigalgs[] = {
  874. tlsext_sigalg(TLSEXT_hash_sha512)
  875. tlsext_sigalg(TLSEXT_hash_sha384)
  876. tlsext_sigalg(TLSEXT_hash_sha256)
  877. tlsext_sigalg(TLSEXT_hash_sha224)
  878. tlsext_sigalg(TLSEXT_hash_sha1)
  879. #ifndef OPENSSL_NO_GOST
  880. TLSEXT_hash_gostr3411, TLSEXT_signature_gostr34102001,
  881. TLSEXT_hash_gostr34112012_256, TLSEXT_signature_gostr34102012_256,
  882. TLSEXT_hash_gostr34112012_512, TLSEXT_signature_gostr34102012_512
  883. #endif
  884. };
  885. #ifndef OPENSSL_NO_EC
  886. static const unsigned char suiteb_sigalgs[] = {
  887. tlsext_sigalg_ecdsa(TLSEXT_hash_sha256)
  888. tlsext_sigalg_ecdsa(TLSEXT_hash_sha384)
  889. };
  890. #endif
  891. size_t tls12_get_psigalgs(SSL *s, const unsigned char **psigs)
  892. {
  893. /*
  894. * If Suite B mode use Suite B sigalgs only, ignore any other
  895. * preferences.
  896. */
  897. #ifndef OPENSSL_NO_EC
  898. switch (tls1_suiteb(s)) {
  899. case SSL_CERT_FLAG_SUITEB_128_LOS:
  900. *psigs = suiteb_sigalgs;
  901. return sizeof(suiteb_sigalgs);
  902. case SSL_CERT_FLAG_SUITEB_128_LOS_ONLY:
  903. *psigs = suiteb_sigalgs;
  904. return 2;
  905. case SSL_CERT_FLAG_SUITEB_192_LOS:
  906. *psigs = suiteb_sigalgs + 2;
  907. return 2;
  908. }
  909. #endif
  910. /* If server use client authentication sigalgs if not NULL */
  911. if (s->server && s->cert->client_sigalgs) {
  912. *psigs = s->cert->client_sigalgs;
  913. return s->cert->client_sigalgslen;
  914. } else if (s->cert->conf_sigalgs) {
  915. *psigs = s->cert->conf_sigalgs;
  916. return s->cert->conf_sigalgslen;
  917. } else {
  918. *psigs = tls12_sigalgs;
  919. return sizeof(tls12_sigalgs);
  920. }
  921. }
  922. /*
  923. * Check signature algorithm is consistent with sent supported signature
  924. * algorithms and if so return relevant digest.
  925. */
  926. int tls12_check_peer_sigalg(const EVP_MD **pmd, SSL *s,
  927. const unsigned char *sig, EVP_PKEY *pkey)
  928. {
  929. const unsigned char *sent_sigs;
  930. size_t sent_sigslen, i;
  931. int sigalg = tls12_get_sigid(pkey);
  932. /* Should never happen */
  933. if (sigalg == -1)
  934. return -1;
  935. /* Check key type is consistent with signature */
  936. if (sigalg != (int)sig[1]) {
  937. SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG, SSL_R_WRONG_SIGNATURE_TYPE);
  938. return 0;
  939. }
  940. #ifndef OPENSSL_NO_EC
  941. if (EVP_PKEY_id(pkey) == EVP_PKEY_EC) {
  942. unsigned char curve_id[2], comp_id;
  943. /* Check compression and curve matches extensions */
  944. if (!tls1_set_ec_id(curve_id, &comp_id, EVP_PKEY_get0_EC_KEY(pkey)))
  945. return 0;
  946. if (!s->server && !tls1_check_ec_key(s, curve_id, &comp_id)) {
  947. SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG, SSL_R_WRONG_CURVE);
  948. return 0;
  949. }
  950. /* If Suite B only P-384+SHA384 or P-256+SHA-256 allowed */
  951. if (tls1_suiteb(s)) {
  952. if (curve_id[0])
  953. return 0;
  954. if (curve_id[1] == TLSEXT_curve_P_256) {
  955. if (sig[0] != TLSEXT_hash_sha256) {
  956. SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG,
  957. SSL_R_ILLEGAL_SUITEB_DIGEST);
  958. return 0;
  959. }
  960. } else if (curve_id[1] == TLSEXT_curve_P_384) {
  961. if (sig[0] != TLSEXT_hash_sha384) {
  962. SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG,
  963. SSL_R_ILLEGAL_SUITEB_DIGEST);
  964. return 0;
  965. }
  966. } else
  967. return 0;
  968. }
  969. } else if (tls1_suiteb(s))
  970. return 0;
  971. #endif
  972. /* Check signature matches a type we sent */
  973. sent_sigslen = tls12_get_psigalgs(s, &sent_sigs);
  974. for (i = 0; i < sent_sigslen; i += 2, sent_sigs += 2) {
  975. if (sig[0] == sent_sigs[0] && sig[1] == sent_sigs[1])
  976. break;
  977. }
  978. /* Allow fallback to SHA1 if not strict mode */
  979. if (i == sent_sigslen
  980. && (sig[0] != TLSEXT_hash_sha1
  981. || s->cert->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT)) {
  982. SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG, SSL_R_WRONG_SIGNATURE_TYPE);
  983. return 0;
  984. }
  985. *pmd = tls12_get_hash(sig[0]);
  986. if (*pmd == NULL) {
  987. SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG, SSL_R_UNKNOWN_DIGEST);
  988. return 0;
  989. }
  990. /* Make sure security callback allows algorithm */
  991. if (!ssl_security(s, SSL_SECOP_SIGALG_CHECK,
  992. EVP_MD_size(*pmd) * 4, EVP_MD_type(*pmd),
  993. (void *)sig)) {
  994. SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG, SSL_R_WRONG_SIGNATURE_TYPE);
  995. return 0;
  996. }
  997. /*
  998. * Store the digest used so applications can retrieve it if they wish.
  999. */
  1000. s->s3->tmp.peer_md = *pmd;
  1001. return 1;
  1002. }
  1003. /*
  1004. * Get a mask of disabled algorithms: an algorithm is disabled if it isn't
  1005. * supported or doesn't appear in supported signature algorithms. Unlike
  1006. * ssl_cipher_get_disabled this applies to a specific session and not global
  1007. * settings.
  1008. */
  1009. void ssl_set_client_disabled(SSL *s)
  1010. {
  1011. s->s3->tmp.mask_a = 0;
  1012. s->s3->tmp.mask_k = 0;
  1013. /* Don't allow TLS 1.2 only ciphers if we don't suppport them */
  1014. if (!SSL_CLIENT_USE_TLS1_2_CIPHERS(s))
  1015. s->s3->tmp.mask_ssl = SSL_TLSV1_2;
  1016. else
  1017. s->s3->tmp.mask_ssl = 0;
  1018. /* Disable TLS 1.0 ciphers if using SSL v3 */
  1019. if (s->client_version == SSL3_VERSION)
  1020. s->s3->tmp.mask_ssl |= SSL_TLSV1;
  1021. ssl_set_sig_mask(&s->s3->tmp.mask_a, s, SSL_SECOP_SIGALG_MASK);
  1022. /*
  1023. * Disable static DH if we don't include any appropriate signature
  1024. * algorithms.
  1025. */
  1026. if (s->s3->tmp.mask_a & SSL_aRSA)
  1027. s->s3->tmp.mask_k |= SSL_kECDHr;
  1028. if (s->s3->tmp.mask_a & SSL_aECDSA)
  1029. s->s3->tmp.mask_k |= SSL_kECDHe;
  1030. # ifndef OPENSSL_NO_PSK
  1031. /* with PSK there must be client callback set */
  1032. if (!s->psk_client_callback) {
  1033. s->s3->tmp.mask_a |= SSL_aPSK;
  1034. s->s3->tmp.mask_k |= SSL_PSK;
  1035. }
  1036. #endif /* OPENSSL_NO_PSK */
  1037. #ifndef OPENSSL_NO_SRP
  1038. if (!(s->srp_ctx.srp_Mask & SSL_kSRP)) {
  1039. s->s3->tmp.mask_a |= SSL_aSRP;
  1040. s->s3->tmp.mask_k |= SSL_kSRP;
  1041. }
  1042. #endif
  1043. }
  1044. int ssl_cipher_disabled(SSL *s, const SSL_CIPHER *c, int op)
  1045. {
  1046. if (c->algorithm_ssl & s->s3->tmp.mask_ssl
  1047. || c->algorithm_mkey & s->s3->tmp.mask_k
  1048. || c->algorithm_auth & s->s3->tmp.mask_a)
  1049. return 1;
  1050. return !ssl_security(s, op, c->strength_bits, 0, (void *)c);
  1051. }
  1052. static int tls_use_ticket(SSL *s)
  1053. {
  1054. if (s->options & SSL_OP_NO_TICKET)
  1055. return 0;
  1056. return ssl_security(s, SSL_SECOP_TICKET, 0, 0, NULL);
  1057. }
  1058. unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *buf,
  1059. unsigned char *limit, int *al)
  1060. {
  1061. int extdatalen = 0;
  1062. unsigned char *orig = buf;
  1063. unsigned char *ret = buf;
  1064. #ifndef OPENSSL_NO_EC
  1065. /* See if we support any ECC ciphersuites */
  1066. int using_ecc = 0;
  1067. if (s->version >= TLS1_VERSION || SSL_IS_DTLS(s)) {
  1068. int i;
  1069. unsigned long alg_k, alg_a;
  1070. STACK_OF(SSL_CIPHER) *cipher_stack = SSL_get_ciphers(s);
  1071. for (i = 0; i < sk_SSL_CIPHER_num(cipher_stack); i++) {
  1072. const SSL_CIPHER *c = sk_SSL_CIPHER_value(cipher_stack, i);
  1073. alg_k = c->algorithm_mkey;
  1074. alg_a = c->algorithm_auth;
  1075. if ((alg_k & (SSL_kECDHE | SSL_kECDHr | SSL_kECDHe | SSL_kECDHEPSK)
  1076. || (alg_a & SSL_aECDSA))) {
  1077. using_ecc = 1;
  1078. break;
  1079. }
  1080. }
  1081. }
  1082. #endif
  1083. ret += 2;
  1084. if (ret >= limit)
  1085. return NULL; /* this really never occurs, but ... */
  1086. /* Add RI if renegotiating */
  1087. if (s->renegotiate) {
  1088. int el;
  1089. if (!ssl_add_clienthello_renegotiate_ext(s, 0, &el, 0)) {
  1090. SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
  1091. return NULL;
  1092. }
  1093. if ((limit - ret - 4 - el) < 0)
  1094. return NULL;
  1095. s2n(TLSEXT_TYPE_renegotiate, ret);
  1096. s2n(el, ret);
  1097. if (!ssl_add_clienthello_renegotiate_ext(s, ret, &el, el)) {
  1098. SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
  1099. return NULL;
  1100. }
  1101. ret += el;
  1102. }
  1103. /* Only add RI for SSLv3 */
  1104. if (s->client_version == SSL3_VERSION)
  1105. goto done;
  1106. if (s->tlsext_hostname != NULL) {
  1107. /* Add TLS extension servername to the Client Hello message */
  1108. unsigned long size_str;
  1109. long lenmax;
  1110. /*-
  1111. * check for enough space.
  1112. * 4 for the servername type and entension length
  1113. * 2 for servernamelist length
  1114. * 1 for the hostname type
  1115. * 2 for hostname length
  1116. * + hostname length
  1117. */
  1118. if ((lenmax = limit - ret - 9) < 0
  1119. || (size_str =
  1120. strlen(s->tlsext_hostname)) > (unsigned long)lenmax)
  1121. return NULL;
  1122. /* extension type and length */
  1123. s2n(TLSEXT_TYPE_server_name, ret);
  1124. s2n(size_str + 5, ret);
  1125. /* length of servername list */
  1126. s2n(size_str + 3, ret);
  1127. /* hostname type, length and hostname */
  1128. *(ret++) = (unsigned char)TLSEXT_NAMETYPE_host_name;
  1129. s2n(size_str, ret);
  1130. memcpy(ret, s->tlsext_hostname, size_str);
  1131. ret += size_str;
  1132. }
  1133. #ifndef OPENSSL_NO_SRP
  1134. /* Add SRP username if there is one */
  1135. if (s->srp_ctx.login != NULL) { /* Add TLS extension SRP username to the
  1136. * Client Hello message */
  1137. int login_len = strlen(s->srp_ctx.login);
  1138. if (login_len > 255 || login_len == 0) {
  1139. SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
  1140. return NULL;
  1141. }
  1142. /*-
  1143. * check for enough space.
  1144. * 4 for the srp type type and entension length
  1145. * 1 for the srp user identity
  1146. * + srp user identity length
  1147. */
  1148. if ((limit - ret - 5 - login_len) < 0)
  1149. return NULL;
  1150. /* fill in the extension */
  1151. s2n(TLSEXT_TYPE_srp, ret);
  1152. s2n(login_len + 1, ret);
  1153. (*ret++) = (unsigned char)login_len;
  1154. memcpy(ret, s->srp_ctx.login, login_len);
  1155. ret += login_len;
  1156. }
  1157. #endif
  1158. #ifndef OPENSSL_NO_EC
  1159. if (using_ecc) {
  1160. /*
  1161. * Add TLS extension ECPointFormats to the ClientHello message
  1162. */
  1163. long lenmax;
  1164. const unsigned char *pcurves, *pformats;
  1165. size_t num_curves, num_formats, curves_list_len;
  1166. size_t i;
  1167. unsigned char *etmp;
  1168. tls1_get_formatlist(s, &pformats, &num_formats);
  1169. if ((lenmax = limit - ret - 5) < 0)
  1170. return NULL;
  1171. if (num_formats > (size_t)lenmax)
  1172. return NULL;
  1173. if (num_formats > 255) {
  1174. SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
  1175. return NULL;
  1176. }
  1177. s2n(TLSEXT_TYPE_ec_point_formats, ret);
  1178. /* The point format list has 1-byte length. */
  1179. s2n(num_formats + 1, ret);
  1180. *(ret++) = (unsigned char)num_formats;
  1181. memcpy(ret, pformats, num_formats);
  1182. ret += num_formats;
  1183. /*
  1184. * Add TLS extension EllipticCurves to the ClientHello message
  1185. */
  1186. pcurves = s->tlsext_ellipticcurvelist;
  1187. if (!tls1_get_curvelist(s, 0, &pcurves, &num_curves))
  1188. return NULL;
  1189. if ((lenmax = limit - ret - 6) < 0)
  1190. return NULL;
  1191. if (num_curves > (size_t)lenmax / 2)
  1192. return NULL;
  1193. if (num_curves > 65532 / 2) {
  1194. SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
  1195. return NULL;
  1196. }
  1197. s2n(TLSEXT_TYPE_elliptic_curves, ret);
  1198. etmp = ret + 4;
  1199. /* Copy curve ID if supported */
  1200. for (i = 0; i < num_curves; i++, pcurves += 2) {
  1201. if (tls_curve_allowed(s, pcurves, SSL_SECOP_CURVE_SUPPORTED)) {
  1202. *etmp++ = pcurves[0];
  1203. *etmp++ = pcurves[1];
  1204. }
  1205. }
  1206. curves_list_len = etmp - ret - 4;
  1207. s2n(curves_list_len + 2, ret);
  1208. s2n(curves_list_len, ret);
  1209. ret += curves_list_len;
  1210. }
  1211. #endif /* OPENSSL_NO_EC */
  1212. if (tls_use_ticket(s)) {
  1213. int ticklen;
  1214. if (!s->new_session && s->session && s->session->tlsext_tick)
  1215. ticklen = s->session->tlsext_ticklen;
  1216. else if (s->session && s->tlsext_session_ticket &&
  1217. s->tlsext_session_ticket->data) {
  1218. ticklen = s->tlsext_session_ticket->length;
  1219. s->session->tlsext_tick = OPENSSL_malloc(ticklen);
  1220. if (s->session->tlsext_tick == NULL)
  1221. return NULL;
  1222. memcpy(s->session->tlsext_tick,
  1223. s->tlsext_session_ticket->data, ticklen);
  1224. s->session->tlsext_ticklen = ticklen;
  1225. } else
  1226. ticklen = 0;
  1227. if (ticklen == 0 && s->tlsext_session_ticket &&
  1228. s->tlsext_session_ticket->data == NULL)
  1229. goto skip_ext;
  1230. /*
  1231. * Check for enough room 2 for extension type, 2 for len rest for
  1232. * ticket
  1233. */
  1234. if ((long)(limit - ret - 4 - ticklen) < 0)
  1235. return NULL;
  1236. s2n(TLSEXT_TYPE_session_ticket, ret);
  1237. s2n(ticklen, ret);
  1238. if (ticklen) {
  1239. memcpy(ret, s->session->tlsext_tick, ticklen);
  1240. ret += ticklen;
  1241. }
  1242. }
  1243. skip_ext:
  1244. if (SSL_USE_SIGALGS(s)) {
  1245. size_t salglen;
  1246. const unsigned char *salg;
  1247. unsigned char *etmp;
  1248. salglen = tls12_get_psigalgs(s, &salg);
  1249. if ((size_t)(limit - ret) < salglen + 6)
  1250. return NULL;
  1251. s2n(TLSEXT_TYPE_signature_algorithms, ret);
  1252. etmp = ret;
  1253. /* Skip over lengths for now */
  1254. ret += 4;
  1255. salglen = tls12_copy_sigalgs(s, ret, salg, salglen);
  1256. /* Fill in lengths */
  1257. s2n(salglen + 2, etmp);
  1258. s2n(salglen, etmp);
  1259. ret += salglen;
  1260. }
  1261. if (s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp) {
  1262. int i;
  1263. long extlen, idlen, itmp;
  1264. OCSP_RESPID *id;
  1265. idlen = 0;
  1266. for (i = 0; i < sk_OCSP_RESPID_num(s->tlsext_ocsp_ids); i++) {
  1267. id = sk_OCSP_RESPID_value(s->tlsext_ocsp_ids, i);
  1268. itmp = i2d_OCSP_RESPID(id, NULL);
  1269. if (itmp <= 0)
  1270. return NULL;
  1271. idlen += itmp + 2;
  1272. }
  1273. if (s->tlsext_ocsp_exts) {
  1274. extlen = i2d_X509_EXTENSIONS(s->tlsext_ocsp_exts, NULL);
  1275. if (extlen < 0)
  1276. return NULL;
  1277. } else
  1278. extlen = 0;
  1279. if ((long)(limit - ret - 7 - extlen - idlen) < 0)
  1280. return NULL;
  1281. s2n(TLSEXT_TYPE_status_request, ret);
  1282. if (extlen + idlen > 0xFFF0)
  1283. return NULL;
  1284. s2n(extlen + idlen + 5, ret);
  1285. *(ret++) = TLSEXT_STATUSTYPE_ocsp;
  1286. s2n(idlen, ret);
  1287. for (i = 0; i < sk_OCSP_RESPID_num(s->tlsext_ocsp_ids); i++) {
  1288. /* save position of id len */
  1289. unsigned char *q = ret;
  1290. id = sk_OCSP_RESPID_value(s->tlsext_ocsp_ids, i);
  1291. /* skip over id len */
  1292. ret += 2;
  1293. itmp = i2d_OCSP_RESPID(id, &ret);
  1294. /* write id len */
  1295. s2n(itmp, q);
  1296. }
  1297. s2n(extlen, ret);
  1298. if (extlen > 0)
  1299. i2d_X509_EXTENSIONS(s->tlsext_ocsp_exts, &ret);
  1300. }
  1301. #ifndef OPENSSL_NO_HEARTBEATS
  1302. /* Add Heartbeat extension */
  1303. if ((limit - ret - 4 - 1) < 0)
  1304. return NULL;
  1305. s2n(TLSEXT_TYPE_heartbeat, ret);
  1306. s2n(1, ret);
  1307. /*-
  1308. * Set mode:
  1309. * 1: peer may send requests
  1310. * 2: peer not allowed to send requests
  1311. */
  1312. if (s->tlsext_heartbeat & SSL_TLSEXT_HB_DONT_RECV_REQUESTS)
  1313. *(ret++) = SSL_TLSEXT_HB_DONT_SEND_REQUESTS;
  1314. else
  1315. *(ret++) = SSL_TLSEXT_HB_ENABLED;
  1316. #endif
  1317. #ifndef OPENSSL_NO_NEXTPROTONEG
  1318. if (s->ctx->next_proto_select_cb && !s->s3->tmp.finish_md_len) {
  1319. /*
  1320. * The client advertises an emtpy extension to indicate its support
  1321. * for Next Protocol Negotiation
  1322. */
  1323. if (limit - ret - 4 < 0)
  1324. return NULL;
  1325. s2n(TLSEXT_TYPE_next_proto_neg, ret);
  1326. s2n(0, ret);
  1327. }
  1328. #endif
  1329. if (s->alpn_client_proto_list && !s->s3->tmp.finish_md_len) {
  1330. if ((size_t)(limit - ret) < 6 + s->alpn_client_proto_list_len)
  1331. return NULL;
  1332. s2n(TLSEXT_TYPE_application_layer_protocol_negotiation, ret);
  1333. s2n(2 + s->alpn_client_proto_list_len, ret);
  1334. s2n(s->alpn_client_proto_list_len, ret);
  1335. memcpy(ret, s->alpn_client_proto_list, s->alpn_client_proto_list_len);
  1336. ret += s->alpn_client_proto_list_len;
  1337. }
  1338. #ifndef OPENSSL_NO_SRTP
  1339. if (SSL_IS_DTLS(s) && SSL_get_srtp_profiles(s)) {
  1340. int el;
  1341. /* Returns 0 on success!! */
  1342. if (ssl_add_clienthello_use_srtp_ext(s, 0, &el, 0)) {
  1343. SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
  1344. return NULL;
  1345. }
  1346. if ((limit - ret - 4 - el) < 0)
  1347. return NULL;
  1348. s2n(TLSEXT_TYPE_use_srtp, ret);
  1349. s2n(el, ret);
  1350. if (ssl_add_clienthello_use_srtp_ext(s, ret, &el, el)) {
  1351. SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
  1352. return NULL;
  1353. }
  1354. ret += el;
  1355. }
  1356. #endif
  1357. custom_ext_init(&s->cert->cli_ext);
  1358. /* Add custom TLS Extensions to ClientHello */
  1359. if (!custom_ext_add(s, 0, &ret, limit, al))
  1360. return NULL;
  1361. #ifdef TLSEXT_TYPE_encrypt_then_mac
  1362. s2n(TLSEXT_TYPE_encrypt_then_mac, ret);
  1363. s2n(0, ret);
  1364. #endif
  1365. s2n(TLSEXT_TYPE_extended_master_secret, ret);
  1366. s2n(0, ret);
  1367. /*
  1368. * Add padding to workaround bugs in F5 terminators. See
  1369. * https://tools.ietf.org/html/draft-agl-tls-padding-03 NB: because this
  1370. * code works out the length of all existing extensions it MUST always
  1371. * appear last.
  1372. */
  1373. if (s->options & SSL_OP_TLSEXT_PADDING) {
  1374. int hlen = ret - (unsigned char *)s->init_buf->data;
  1375. if (hlen > 0xff && hlen < 0x200) {
  1376. hlen = 0x200 - hlen;
  1377. if (hlen >= 4)
  1378. hlen -= 4;
  1379. else
  1380. hlen = 0;
  1381. s2n(TLSEXT_TYPE_padding, ret);
  1382. s2n(hlen, ret);
  1383. memset(ret, 0, hlen);
  1384. ret += hlen;
  1385. }
  1386. }
  1387. done:
  1388. if ((extdatalen = ret - orig - 2) == 0)
  1389. return orig;
  1390. s2n(extdatalen, orig);
  1391. return ret;
  1392. }
  1393. unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *buf,
  1394. unsigned char *limit, int *al)
  1395. {
  1396. int extdatalen = 0;
  1397. unsigned char *orig = buf;
  1398. unsigned char *ret = buf;
  1399. #ifndef OPENSSL_NO_NEXTPROTONEG
  1400. int next_proto_neg_seen;
  1401. #endif
  1402. #ifndef OPENSSL_NO_EC
  1403. unsigned long alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
  1404. unsigned long alg_a = s->s3->tmp.new_cipher->algorithm_auth;
  1405. int using_ecc = (alg_k & (SSL_kECDHE | SSL_kECDHr | SSL_kECDHe))
  1406. || (alg_a & SSL_aECDSA);
  1407. using_ecc = using_ecc && (s->session->tlsext_ecpointformatlist != NULL);
  1408. #endif
  1409. ret += 2;
  1410. if (ret >= limit)
  1411. return NULL; /* this really never occurs, but ... */
  1412. if (s->s3->send_connection_binding) {
  1413. int el;
  1414. if (!ssl_add_serverhello_renegotiate_ext(s, 0, &el, 0)) {
  1415. SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
  1416. return NULL;
  1417. }
  1418. if ((limit - ret - 4 - el) < 0)
  1419. return NULL;
  1420. s2n(TLSEXT_TYPE_renegotiate, ret);
  1421. s2n(el, ret);
  1422. if (!ssl_add_serverhello_renegotiate_ext(s, ret, &el, el)) {
  1423. SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
  1424. return NULL;
  1425. }
  1426. ret += el;
  1427. }
  1428. /* Only add RI for SSLv3 */
  1429. if (s->version == SSL3_VERSION)
  1430. goto done;
  1431. if (!s->hit && s->servername_done == 1
  1432. && s->session->tlsext_hostname != NULL) {
  1433. if ((long)(limit - ret - 4) < 0)
  1434. return NULL;
  1435. s2n(TLSEXT_TYPE_server_name, ret);
  1436. s2n(0, ret);
  1437. }
  1438. #ifndef OPENSSL_NO_EC
  1439. if (using_ecc) {
  1440. const unsigned char *plist;
  1441. size_t plistlen;
  1442. /*
  1443. * Add TLS extension ECPointFormats to the ServerHello message
  1444. */
  1445. long lenmax;
  1446. tls1_get_formatlist(s, &plist, &plistlen);
  1447. if ((lenmax = limit - ret - 5) < 0)
  1448. return NULL;
  1449. if (plistlen > (size_t)lenmax)
  1450. return NULL;
  1451. if (plistlen > 255) {
  1452. SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
  1453. return NULL;
  1454. }
  1455. s2n(TLSEXT_TYPE_ec_point_formats, ret);
  1456. s2n(plistlen + 1, ret);
  1457. *(ret++) = (unsigned char)plistlen;
  1458. memcpy(ret, plist, plistlen);
  1459. ret += plistlen;
  1460. }
  1461. /*
  1462. * Currently the server should not respond with a SupportedCurves
  1463. * extension
  1464. */
  1465. #endif /* OPENSSL_NO_EC */
  1466. if (s->tlsext_ticket_expected && tls_use_ticket(s)) {
  1467. if ((long)(limit - ret - 4) < 0)
  1468. return NULL;
  1469. s2n(TLSEXT_TYPE_session_ticket, ret);
  1470. s2n(0, ret);
  1471. }
  1472. if (s->tlsext_status_expected) {
  1473. if ((long)(limit - ret - 4) < 0)
  1474. return NULL;
  1475. s2n(TLSEXT_TYPE_status_request, ret);
  1476. s2n(0, ret);
  1477. }
  1478. #ifndef OPENSSL_NO_SRTP
  1479. if (SSL_IS_DTLS(s) && s->srtp_profile) {
  1480. int el;
  1481. /* Returns 0 on success!! */
  1482. if (ssl_add_serverhello_use_srtp_ext(s, 0, &el, 0)) {
  1483. SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
  1484. return NULL;
  1485. }
  1486. if ((limit - ret - 4 - el) < 0)
  1487. return NULL;
  1488. s2n(TLSEXT_TYPE_use_srtp, ret);
  1489. s2n(el, ret);
  1490. if (ssl_add_serverhello_use_srtp_ext(s, ret, &el, el)) {
  1491. SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
  1492. return NULL;
  1493. }
  1494. ret += el;
  1495. }
  1496. #endif
  1497. if (((s->s3->tmp.new_cipher->id & 0xFFFF) == 0x80
  1498. || (s->s3->tmp.new_cipher->id & 0xFFFF) == 0x81)
  1499. && (SSL_get_options(s) & SSL_OP_CRYPTOPRO_TLSEXT_BUG)) {
  1500. const unsigned char cryptopro_ext[36] = {
  1501. 0xfd, 0xe8, /* 65000 */
  1502. 0x00, 0x20, /* 32 bytes length */
  1503. 0x30, 0x1e, 0x30, 0x08, 0x06, 0x06, 0x2a, 0x85,
  1504. 0x03, 0x02, 0x02, 0x09, 0x30, 0x08, 0x06, 0x06,
  1505. 0x2a, 0x85, 0x03, 0x02, 0x02, 0x16, 0x30, 0x08,
  1506. 0x06, 0x06, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x17
  1507. };
  1508. if (limit - ret < 36)
  1509. return NULL;
  1510. memcpy(ret, cryptopro_ext, 36);
  1511. ret += 36;
  1512. }
  1513. #ifndef OPENSSL_NO_HEARTBEATS
  1514. /* Add Heartbeat extension if we've received one */
  1515. if (s->tlsext_heartbeat & SSL_TLSEXT_HB_ENABLED) {
  1516. if ((limit - ret - 4 - 1) < 0)
  1517. return NULL;
  1518. s2n(TLSEXT_TYPE_heartbeat, ret);
  1519. s2n(1, ret);
  1520. /*-
  1521. * Set mode:
  1522. * 1: peer may send requests
  1523. * 2: peer not allowed to send requests
  1524. */
  1525. if (s->tlsext_heartbeat & SSL_TLSEXT_HB_DONT_RECV_REQUESTS)
  1526. *(ret++) = SSL_TLSEXT_HB_DONT_SEND_REQUESTS;
  1527. else
  1528. *(ret++) = SSL_TLSEXT_HB_ENABLED;
  1529. }
  1530. #endif
  1531. #ifndef OPENSSL_NO_NEXTPROTONEG
  1532. next_proto_neg_seen = s->s3->next_proto_neg_seen;
  1533. s->s3->next_proto_neg_seen = 0;
  1534. if (next_proto_neg_seen && s->ctx->next_protos_advertised_cb) {
  1535. const unsigned char *npa;
  1536. unsigned int npalen;
  1537. int r;
  1538. r = s->ctx->next_protos_advertised_cb(s, &npa, &npalen,
  1539. s->
  1540. ctx->next_protos_advertised_cb_arg);
  1541. if (r == SSL_TLSEXT_ERR_OK) {
  1542. if ((long)(limit - ret - 4 - npalen) < 0)
  1543. return NULL;
  1544. s2n(TLSEXT_TYPE_next_proto_neg, ret);
  1545. s2n(npalen, ret);
  1546. memcpy(ret, npa, npalen);
  1547. ret += npalen;
  1548. s->s3->next_proto_neg_seen = 1;
  1549. }
  1550. }
  1551. #endif
  1552. if (!custom_ext_add(s, 1, &ret, limit, al))
  1553. return NULL;
  1554. #ifdef TLSEXT_TYPE_encrypt_then_mac
  1555. if (s->s3->flags & TLS1_FLAGS_ENCRYPT_THEN_MAC) {
  1556. /*
  1557. * Don't use encrypt_then_mac if AEAD or RC4 might want to disable
  1558. * for other cases too.
  1559. */
  1560. if (s->s3->tmp.new_cipher->algorithm_mac == SSL_AEAD
  1561. || s->s3->tmp.new_cipher->algorithm_enc == SSL_RC4
  1562. || s->s3->tmp.new_cipher->algorithm_enc == SSL_eGOST2814789CNT
  1563. || s->s3->tmp.new_cipher->algorithm_enc == SSL_eGOST2814789CNT12)
  1564. s->s3->flags &= ~TLS1_FLAGS_ENCRYPT_THEN_MAC;
  1565. else {
  1566. s2n(TLSEXT_TYPE_encrypt_then_mac, ret);
  1567. s2n(0, ret);
  1568. }
  1569. }
  1570. #endif
  1571. if (s->s3->flags & TLS1_FLAGS_RECEIVED_EXTMS) {
  1572. s2n(TLSEXT_TYPE_extended_master_secret, ret);
  1573. s2n(0, ret);
  1574. }
  1575. if (s->s3->alpn_selected) {
  1576. const unsigned char *selected = s->s3->alpn_selected;
  1577. unsigned len = s->s3->alpn_selected_len;
  1578. if ((long)(limit - ret - 4 - 2 - 1 - len) < 0)
  1579. return NULL;
  1580. s2n(TLSEXT_TYPE_application_layer_protocol_negotiation, ret);
  1581. s2n(3 + len, ret);
  1582. s2n(1 + len, ret);
  1583. *ret++ = len;
  1584. memcpy(ret, selected, len);
  1585. ret += len;
  1586. }
  1587. done:
  1588. if ((extdatalen = ret - orig - 2) == 0)
  1589. return orig;
  1590. s2n(extdatalen, orig);
  1591. return ret;
  1592. }
  1593. /*
  1594. * tls1_alpn_handle_client_hello is called to process the ALPN extension in a
  1595. * ClientHello. data: the contents of the extension, not including the type
  1596. * and length. data_len: the number of bytes in |data| al: a pointer to the
  1597. * alert value to send in the event of a non-zero return. returns: 0 on
  1598. * success.
  1599. */
  1600. static int tls1_alpn_handle_client_hello(SSL *s, PACKET *pkt, int *al)
  1601. {
  1602. unsigned int data_len;
  1603. unsigned int proto_len;
  1604. const unsigned char *selected;
  1605. unsigned char *data;
  1606. unsigned char selected_len;
  1607. int r;
  1608. if (s->ctx->alpn_select_cb == NULL)
  1609. return 0;
  1610. /*
  1611. * data should contain a uint16 length followed by a series of 8-bit,
  1612. * length-prefixed strings.
  1613. */
  1614. if (!PACKET_get_net_2(pkt, &data_len)
  1615. || PACKET_remaining(pkt) != data_len
  1616. || !PACKET_peek_bytes(pkt, &data, data_len))
  1617. goto parse_error;
  1618. do {
  1619. if (!PACKET_get_1(pkt, &proto_len)
  1620. || proto_len == 0
  1621. || !PACKET_forward(pkt, proto_len))
  1622. goto parse_error;
  1623. } while (PACKET_remaining(pkt));
  1624. r = s->ctx->alpn_select_cb(s, &selected, &selected_len, data, data_len,
  1625. s->ctx->alpn_select_cb_arg);
  1626. if (r == SSL_TLSEXT_ERR_OK) {
  1627. OPENSSL_free(s->s3->alpn_selected);
  1628. s->s3->alpn_selected = OPENSSL_malloc(selected_len);
  1629. if (s->s3->alpn_selected == NULL) {
  1630. *al = SSL_AD_INTERNAL_ERROR;
  1631. return -1;
  1632. }
  1633. memcpy(s->s3->alpn_selected, selected, selected_len);
  1634. s->s3->alpn_selected_len = selected_len;
  1635. }
  1636. return 0;
  1637. parse_error:
  1638. *al = SSL_AD_DECODE_ERROR;
  1639. return -1;
  1640. }
  1641. #ifndef OPENSSL_NO_EC
  1642. /*-
  1643. * ssl_check_for_safari attempts to fingerprint Safari using OS X
  1644. * SecureTransport using the TLS extension block in |d|, of length |n|.
  1645. * Safari, since 10.6, sends exactly these extensions, in this order:
  1646. * SNI,
  1647. * elliptic_curves
  1648. * ec_point_formats
  1649. *
  1650. * We wish to fingerprint Safari because they broke ECDHE-ECDSA support in 10.8,
  1651. * but they advertise support. So enabling ECDHE-ECDSA ciphers breaks them.
  1652. * Sadly we cannot differentiate 10.6, 10.7 and 10.8.4 (which work), from
  1653. * 10.8..10.8.3 (which don't work).
  1654. */
  1655. static void ssl_check_for_safari(SSL *s, const PACKET *pkt)
  1656. {
  1657. unsigned int type, size;
  1658. unsigned char *eblock1, *eblock2;
  1659. PACKET tmppkt;
  1660. static const unsigned char kSafariExtensionsBlock[] = {
  1661. 0x00, 0x0a, /* elliptic_curves extension */
  1662. 0x00, 0x08, /* 8 bytes */
  1663. 0x00, 0x06, /* 6 bytes of curve ids */
  1664. 0x00, 0x17, /* P-256 */
  1665. 0x00, 0x18, /* P-384 */
  1666. 0x00, 0x19, /* P-521 */
  1667. 0x00, 0x0b, /* ec_point_formats */
  1668. 0x00, 0x02, /* 2 bytes */
  1669. 0x01, /* 1 point format */
  1670. 0x00, /* uncompressed */
  1671. };
  1672. /* The following is only present in TLS 1.2 */
  1673. static const unsigned char kSafariTLS12ExtensionsBlock[] = {
  1674. 0x00, 0x0d, /* signature_algorithms */
  1675. 0x00, 0x0c, /* 12 bytes */
  1676. 0x00, 0x0a, /* 10 bytes */
  1677. 0x05, 0x01, /* SHA-384/RSA */
  1678. 0x04, 0x01, /* SHA-256/RSA */
  1679. 0x02, 0x01, /* SHA-1/RSA */
  1680. 0x04, 0x03, /* SHA-256/ECDSA */
  1681. 0x02, 0x03, /* SHA-1/ECDSA */
  1682. };
  1683. tmppkt = *pkt;
  1684. if (!PACKET_forward(&tmppkt, 2)
  1685. || !PACKET_get_net_2(&tmppkt, &type)
  1686. || !PACKET_get_net_2(&tmppkt, &size)
  1687. || !PACKET_forward(&tmppkt, size))
  1688. return;
  1689. if (type != TLSEXT_TYPE_server_name)
  1690. return;
  1691. if (TLS1_get_client_version(s) >= TLS1_2_VERSION) {
  1692. const size_t len1 = sizeof(kSafariExtensionsBlock);
  1693. const size_t len2 = sizeof(kSafariTLS12ExtensionsBlock);
  1694. if (!PACKET_get_bytes(&tmppkt, &eblock1, len1)
  1695. || !PACKET_get_bytes(&tmppkt, &eblock2, len2)
  1696. || PACKET_remaining(&tmppkt))
  1697. return;
  1698. if (memcmp(eblock1, kSafariExtensionsBlock, len1) != 0)
  1699. return;
  1700. if (memcmp(eblock2, kSafariTLS12ExtensionsBlock, len2) != 0)
  1701. return;
  1702. } else {
  1703. const size_t len = sizeof(kSafariExtensionsBlock);
  1704. if (!PACKET_get_bytes(&tmppkt, &eblock1, len)
  1705. || PACKET_remaining(&tmppkt))
  1706. return;
  1707. if (memcmp(eblock1, kSafariExtensionsBlock, len) != 0)
  1708. return;
  1709. }
  1710. s->s3->is_probably_safari = 1;
  1711. }
  1712. #endif /* !OPENSSL_NO_EC */
  1713. static int ssl_scan_clienthello_tlsext(SSL *s, PACKET *pkt, int *al)
  1714. {
  1715. unsigned int type;
  1716. unsigned int size;
  1717. unsigned int len;
  1718. unsigned char *data;
  1719. int renegotiate_seen = 0;
  1720. s->servername_done = 0;
  1721. s->tlsext_status_type = -1;
  1722. #ifndef OPENSSL_NO_NEXTPROTONEG
  1723. s->s3->next_proto_neg_seen = 0;
  1724. #endif
  1725. OPENSSL_free(s->s3->alpn_selected);
  1726. s->s3->alpn_selected = NULL;
  1727. #ifndef OPENSSL_NO_HEARTBEATS
  1728. s->tlsext_heartbeat &= ~(SSL_TLSEXT_HB_ENABLED |
  1729. SSL_TLSEXT_HB_DONT_SEND_REQUESTS);
  1730. #endif
  1731. #ifndef OPENSSL_NO_EC
  1732. if (s->options & SSL_OP_SAFARI_ECDHE_ECDSA_BUG)
  1733. ssl_check_for_safari(s, pkt);
  1734. # endif /* !OPENSSL_NO_EC */
  1735. /* Clear any signature algorithms extension received */
  1736. OPENSSL_free(s->s3->tmp.peer_sigalgs);
  1737. s->s3->tmp.peer_sigalgs = NULL;
  1738. #ifdef TLSEXT_TYPE_encrypt_then_mac
  1739. s->s3->flags &= ~TLS1_FLAGS_ENCRYPT_THEN_MAC;
  1740. #endif
  1741. #ifndef OPENSSL_NO_SRP
  1742. OPENSSL_free(s->srp_ctx.login);
  1743. s->srp_ctx.login = NULL;
  1744. #endif
  1745. s->srtp_profile = NULL;
  1746. if (PACKET_remaining(pkt) == 0)
  1747. goto ri_check;
  1748. if (!PACKET_get_net_2(pkt, &len))
  1749. goto err;
  1750. if (PACKET_remaining(pkt) != len)
  1751. goto err;
  1752. while (PACKET_get_net_2(pkt, &type) && PACKET_get_net_2(pkt, &size)) {
  1753. PACKET subpkt;
  1754. if (!PACKET_peek_bytes(pkt, &data, size))
  1755. goto err;
  1756. if (s->tlsext_debug_cb)
  1757. s->tlsext_debug_cb(s, 0, type, data, size, s->tlsext_debug_arg);
  1758. if (!PACKET_get_sub_packet(pkt, &subpkt, size))
  1759. goto err;
  1760. if (type == TLSEXT_TYPE_renegotiate) {
  1761. if (!ssl_parse_clienthello_renegotiate_ext(s, &subpkt, al))
  1762. return 0;
  1763. renegotiate_seen = 1;
  1764. } else if (s->version == SSL3_VERSION) {
  1765. }
  1766. /*-
  1767. * The servername extension is treated as follows:
  1768. *
  1769. * - Only the hostname type is supported with a maximum length of 255.
  1770. * - The servername is rejected if too long or if it contains zeros,
  1771. * in which case an fatal alert is generated.
  1772. * - The servername field is maintained together with the session cache.
  1773. * - When a session is resumed, the servername call back invoked in order
  1774. * to allow the application to position itself to the right context.
  1775. * - The servername is acknowledged if it is new for a session or when
  1776. * it is identical to a previously used for the same session.
  1777. * Applications can control the behaviour. They can at any time
  1778. * set a 'desirable' servername for a new SSL object. This can be the
  1779. * case for example with HTTPS when a Host: header field is received and
  1780. * a renegotiation is requested. In this case, a possible servername
  1781. * presented in the new client hello is only acknowledged if it matches
  1782. * the value of the Host: field.
  1783. * - Applications must use SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
  1784. * if they provide for changing an explicit servername context for the
  1785. * session, i.e. when the session has been established with a servername
  1786. * extension.
  1787. * - On session reconnect, the servername extension may be absent.
  1788. *
  1789. */
  1790. else if (type == TLSEXT_TYPE_server_name) {
  1791. unsigned char *sdata;
  1792. unsigned int servname_type;
  1793. unsigned int dsize;
  1794. PACKET ssubpkt;
  1795. if (!PACKET_get_net_2(&subpkt, &dsize)
  1796. || !PACKET_get_sub_packet(&subpkt, &ssubpkt, dsize))
  1797. goto err;
  1798. while (PACKET_remaining(&ssubpkt) > 3) {
  1799. if (!PACKET_get_1(&ssubpkt, &servname_type)
  1800. || !PACKET_get_net_2(&ssubpkt, &len)
  1801. || PACKET_remaining(&ssubpkt) < len)
  1802. goto err;
  1803. if (s->servername_done == 0)
  1804. switch (servname_type) {
  1805. case TLSEXT_NAMETYPE_host_name:
  1806. if (!s->hit) {
  1807. if (s->session->tlsext_hostname)
  1808. goto err;
  1809. if (len > TLSEXT_MAXLEN_host_name) {
  1810. *al = TLS1_AD_UNRECOGNIZED_NAME;
  1811. return 0;
  1812. }
  1813. if ((s->session->tlsext_hostname =
  1814. OPENSSL_malloc(len + 1)) == NULL) {
  1815. *al = TLS1_AD_INTERNAL_ERROR;
  1816. return 0;
  1817. }
  1818. if (!PACKET_copy_bytes(&ssubpkt,
  1819. (unsigned char *)s->session
  1820. ->tlsext_hostname,
  1821. len)) {
  1822. *al = SSL_AD_DECODE_ERROR;
  1823. return 0;
  1824. }
  1825. s->session->tlsext_hostname[len] = '\0';
  1826. if (strlen(s->session->tlsext_hostname) != len) {
  1827. OPENSSL_free(s->session->tlsext_hostname);
  1828. s->session->tlsext_hostname = NULL;
  1829. *al = TLS1_AD_UNRECOGNIZED_NAME;
  1830. return 0;
  1831. }
  1832. s->servername_done = 1;
  1833. } else {
  1834. if (!PACKET_get_bytes(&ssubpkt, &sdata, len)) {
  1835. *al = SSL_AD_DECODE_ERROR;
  1836. return 0;
  1837. }
  1838. s->servername_done = s->session->tlsext_hostname
  1839. && strlen(s->session->tlsext_hostname) == len
  1840. && strncmp(s->session->tlsext_hostname,
  1841. (char *)sdata, len) == 0;
  1842. }
  1843. break;
  1844. default:
  1845. break;
  1846. }
  1847. }
  1848. /* We shouldn't have any bytes left */
  1849. if (PACKET_remaining(&ssubpkt) != 0)
  1850. goto err;
  1851. }
  1852. #ifndef OPENSSL_NO_SRP
  1853. else if (type == TLSEXT_TYPE_srp) {
  1854. if (!PACKET_get_1(&subpkt, &len)
  1855. || s->srp_ctx.login != NULL)
  1856. goto err;
  1857. if ((s->srp_ctx.login = OPENSSL_malloc(len + 1)) == NULL)
  1858. return -1;
  1859. if (!PACKET_copy_bytes(&subpkt, (unsigned char *)s->srp_ctx.login,
  1860. len))
  1861. goto err;
  1862. s->srp_ctx.login[len] = '\0';
  1863. if (strlen(s->srp_ctx.login) != len
  1864. || PACKET_remaining(&subpkt))
  1865. goto err;
  1866. }
  1867. #endif
  1868. #ifndef OPENSSL_NO_EC
  1869. else if (type == TLSEXT_TYPE_ec_point_formats) {
  1870. unsigned int ecpointformatlist_length;
  1871. if (!PACKET_get_1(&subpkt, &ecpointformatlist_length)
  1872. || ecpointformatlist_length == 0)
  1873. goto err;
  1874. if (!s->hit) {
  1875. OPENSSL_free(s->session->tlsext_ecpointformatlist);
  1876. s->session->tlsext_ecpointformatlist = NULL;
  1877. s->session->tlsext_ecpointformatlist_length = 0;
  1878. if ((s->session->tlsext_ecpointformatlist =
  1879. OPENSSL_malloc(ecpointformatlist_length)) == NULL) {
  1880. *al = TLS1_AD_INTERNAL_ERROR;
  1881. return 0;
  1882. }
  1883. s->session->tlsext_ecpointformatlist_length =
  1884. ecpointformatlist_length;
  1885. if (!PACKET_copy_bytes(&subpkt,
  1886. s->session->tlsext_ecpointformatlist,
  1887. ecpointformatlist_length))
  1888. goto err;
  1889. } else if (!PACKET_forward(&subpkt, ecpointformatlist_length)) {
  1890. goto err;
  1891. }
  1892. /* We should have consumed all the bytes by now */
  1893. if (PACKET_remaining(&subpkt)) {
  1894. *al = TLS1_AD_DECODE_ERROR;
  1895. return 0;
  1896. }
  1897. } else if (type == TLSEXT_TYPE_elliptic_curves) {
  1898. unsigned int ellipticcurvelist_length;
  1899. /* Each NamedCurve is 2 bytes and we must have at least 1 */
  1900. if (!PACKET_get_net_2(&subpkt, &ellipticcurvelist_length)
  1901. || ellipticcurvelist_length == 0
  1902. || (ellipticcurvelist_length & 1) != 0)
  1903. goto err;
  1904. if (!s->hit) {
  1905. if (s->session->tlsext_ellipticcurvelist)
  1906. goto err;
  1907. s->session->tlsext_ellipticcurvelist_length = 0;
  1908. if ((s->session->tlsext_ellipticcurvelist =
  1909. OPENSSL_malloc(ellipticcurvelist_length)) == NULL) {
  1910. *al = TLS1_AD_INTERNAL_ERROR;
  1911. return 0;
  1912. }
  1913. s->session->tlsext_ellipticcurvelist_length =
  1914. ellipticcurvelist_length;
  1915. if (!PACKET_copy_bytes(&subpkt,
  1916. s->session->tlsext_ellipticcurvelist,
  1917. ellipticcurvelist_length))
  1918. goto err;
  1919. } else if (!PACKET_forward(&subpkt, ellipticcurvelist_length)) {
  1920. goto err;
  1921. }
  1922. /* We should have consumed all the bytes by now */
  1923. if (PACKET_remaining(&subpkt)) {
  1924. goto err;
  1925. }
  1926. }
  1927. #endif /* OPENSSL_NO_EC */
  1928. else if (type == TLSEXT_TYPE_session_ticket) {
  1929. if (!PACKET_forward(&subpkt, size)
  1930. || (s->tls_session_ticket_ext_cb &&
  1931. !s->tls_session_ticket_ext_cb(s, data, size,
  1932. s->tls_session_ticket_ext_cb_arg))) {
  1933. *al = TLS1_AD_INTERNAL_ERROR;
  1934. return 0;
  1935. }
  1936. } else if (type == TLSEXT_TYPE_signature_algorithms) {
  1937. unsigned int dsize;
  1938. if (s->s3->tmp.peer_sigalgs
  1939. || !PACKET_get_net_2(&subpkt, &dsize)
  1940. || (dsize & 1) != 0
  1941. || (dsize == 0)
  1942. || !PACKET_get_bytes(&subpkt, &data, dsize)
  1943. || PACKET_remaining(&subpkt) != 0
  1944. || !tls1_save_sigalgs(s, data, dsize)) {
  1945. goto err;
  1946. }
  1947. } else if (type == TLSEXT_TYPE_status_request) {
  1948. PACKET ssubpkt;
  1949. if (!PACKET_get_1(&subpkt,
  1950. (unsigned int *)&s->tlsext_status_type))
  1951. goto err;
  1952. if (s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp) {
  1953. const unsigned char *sdata;
  1954. unsigned int dsize;
  1955. /* Read in responder_id_list */
  1956. if (!PACKET_get_net_2(&subpkt, &dsize)
  1957. || !PACKET_get_sub_packet(&subpkt, &ssubpkt, dsize))
  1958. goto err;
  1959. while (PACKET_remaining(&ssubpkt)) {
  1960. OCSP_RESPID *id;
  1961. unsigned int idsize;
  1962. if (PACKET_remaining(&ssubpkt) < 4
  1963. || !PACKET_get_net_2(&ssubpkt, &idsize)
  1964. || !PACKET_get_bytes(&ssubpkt, &data, idsize)) {
  1965. goto err;
  1966. }
  1967. sdata = data;
  1968. data += idsize;
  1969. id = d2i_OCSP_RESPID(NULL, &sdata, idsize);
  1970. if (!id)
  1971. goto err;
  1972. if (data != sdata) {
  1973. OCSP_RESPID_free(id);
  1974. goto err;
  1975. }
  1976. if (!s->tlsext_ocsp_ids
  1977. && !(s->tlsext_ocsp_ids =
  1978. sk_OCSP_RESPID_new_null())) {
  1979. OCSP_RESPID_free(id);
  1980. *al = SSL_AD_INTERNAL_ERROR;
  1981. return 0;
  1982. }
  1983. if (!sk_OCSP_RESPID_push(s->tlsext_ocsp_ids, id)) {
  1984. OCSP_RESPID_free(id);
  1985. *al = SSL_AD_INTERNAL_ERROR;
  1986. return 0;
  1987. }
  1988. }
  1989. /* Read in request_extensions */
  1990. if (!PACKET_get_net_2(&subpkt, &dsize)
  1991. || !PACKET_get_bytes(&subpkt, &data, dsize)
  1992. || PACKET_remaining(&subpkt)) {
  1993. goto err;
  1994. }
  1995. sdata = data;
  1996. if (dsize > 0) {
  1997. sk_X509_EXTENSION_pop_free(s->tlsext_ocsp_exts,
  1998. X509_EXTENSION_free);
  1999. s->tlsext_ocsp_exts =
  2000. d2i_X509_EXTENSIONS(NULL, &sdata, dsize);
  2001. if (!s->tlsext_ocsp_exts || (data + dsize != sdata))
  2002. goto err;
  2003. }
  2004. }
  2005. /*
  2006. * We don't know what to do with any other type * so ignore it.
  2007. */
  2008. else
  2009. s->tlsext_status_type = -1;
  2010. }
  2011. #ifndef OPENSSL_NO_HEARTBEATS
  2012. else if (type == TLSEXT_TYPE_heartbeat) {
  2013. unsigned int hbtype;
  2014. if (!PACKET_get_1(&subpkt, &hbtype)
  2015. || PACKET_remaining(&subpkt)) {
  2016. *al = SSL_AD_DECODE_ERROR;
  2017. return 0;
  2018. }
  2019. switch (hbtype) {
  2020. case 0x01: /* Client allows us to send HB requests */
  2021. s->tlsext_heartbeat |= SSL_TLSEXT_HB_ENABLED;
  2022. break;
  2023. case 0x02: /* Client doesn't accept HB requests */
  2024. s->tlsext_heartbeat |= SSL_TLSEXT_HB_ENABLED;
  2025. s->tlsext_heartbeat |= SSL_TLSEXT_HB_DONT_SEND_REQUESTS;
  2026. break;
  2027. default:
  2028. *al = SSL_AD_ILLEGAL_PARAMETER;
  2029. return 0;
  2030. }
  2031. }
  2032. #endif
  2033. #ifndef OPENSSL_NO_NEXTPROTONEG
  2034. else if (type == TLSEXT_TYPE_next_proto_neg &&
  2035. s->s3->tmp.finish_md_len == 0 &&
  2036. s->s3->alpn_selected == NULL) {
  2037. /*-
  2038. * We shouldn't accept this extension on a
  2039. * renegotiation.
  2040. *
  2041. * s->new_session will be set on renegotiation, but we
  2042. * probably shouldn't rely that it couldn't be set on
  2043. * the initial renegotation too in certain cases (when
  2044. * there's some other reason to disallow resuming an
  2045. * earlier session -- the current code won't be doing
  2046. * anything like that, but this might change).
  2047. *
  2048. * A valid sign that there's been a previous handshake
  2049. * in this connection is if s->s3->tmp.finish_md_len >
  2050. * 0. (We are talking about a check that will happen
  2051. * in the Hello protocol round, well before a new
  2052. * Finished message could have been computed.)
  2053. */
  2054. s->s3->next_proto_neg_seen = 1;
  2055. }
  2056. #endif
  2057. else if (type == TLSEXT_TYPE_application_layer_protocol_negotiation &&
  2058. s->ctx->alpn_select_cb && s->s3->tmp.finish_md_len == 0) {
  2059. if (tls1_alpn_handle_client_hello(s, &subpkt, al) != 0)
  2060. return 0;
  2061. #ifndef OPENSSL_NO_NEXTPROTONEG
  2062. /* ALPN takes precedence over NPN. */
  2063. s->s3->next_proto_neg_seen = 0;
  2064. #endif
  2065. }
  2066. /* session ticket processed earlier */
  2067. #ifndef OPENSSL_NO_SRTP
  2068. else if (SSL_IS_DTLS(s) && SSL_get_srtp_profiles(s)
  2069. && type == TLSEXT_TYPE_use_srtp) {
  2070. if (ssl_parse_clienthello_use_srtp_ext(s, &subpkt, al))
  2071. return 0;
  2072. }
  2073. #endif
  2074. #ifdef TLSEXT_TYPE_encrypt_then_mac
  2075. else if (type == TLSEXT_TYPE_encrypt_then_mac)
  2076. s->s3->flags |= TLS1_FLAGS_ENCRYPT_THEN_MAC;
  2077. #endif
  2078. /*
  2079. * Note: extended master secret extension handled in
  2080. * tls_check_serverhello_tlsext_early()
  2081. */
  2082. /*
  2083. * If this ClientHello extension was unhandled and this is a
  2084. * nonresumed connection, check whether the extension is a custom
  2085. * TLS Extension (has a custom_srv_ext_record), and if so call the
  2086. * callback and record the extension number so that an appropriate
  2087. * ServerHello may be later returned.
  2088. */
  2089. else if (!s->hit) {
  2090. if (custom_ext_parse(s, 1, type, data, size, al) <= 0)
  2091. return 0;
  2092. }
  2093. }
  2094. /* Spurious data on the end */
  2095. if (PACKET_remaining(pkt) != 0)
  2096. goto err;
  2097. ri_check:
  2098. /* Need RI if renegotiating */
  2099. if (!renegotiate_seen && s->renegotiate &&
  2100. !(s->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)) {
  2101. *al = SSL_AD_HANDSHAKE_FAILURE;
  2102. SSLerr(SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT,
  2103. SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
  2104. return 0;
  2105. }
  2106. return 1;
  2107. err:
  2108. *al = SSL_AD_DECODE_ERROR;
  2109. return 0;
  2110. }
  2111. int ssl_parse_clienthello_tlsext(SSL *s, PACKET *pkt)
  2112. {
  2113. int al = -1;
  2114. custom_ext_init(&s->cert->srv_ext);
  2115. if (ssl_scan_clienthello_tlsext(s, pkt, &al) <= 0) {
  2116. ssl3_send_alert(s, SSL3_AL_FATAL, al);
  2117. return 0;
  2118. }
  2119. if (ssl_check_clienthello_tlsext_early(s) <= 0) {
  2120. SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT, SSL_R_CLIENTHELLO_TLSEXT);
  2121. return 0;
  2122. }
  2123. return 1;
  2124. }
  2125. #ifndef OPENSSL_NO_NEXTPROTONEG
  2126. /*
  2127. * ssl_next_proto_validate validates a Next Protocol Negotiation block. No
  2128. * elements of zero length are allowed and the set of elements must exactly
  2129. * fill the length of the block.
  2130. */
  2131. static char ssl_next_proto_validate(PACKET *pkt)
  2132. {
  2133. unsigned int len;
  2134. while (PACKET_remaining(pkt)) {
  2135. if (!PACKET_get_1(pkt, &len)
  2136. || !PACKET_forward(pkt, len))
  2137. return 0;
  2138. }
  2139. return 1;
  2140. }
  2141. #endif
  2142. static int ssl_scan_serverhello_tlsext(SSL *s, PACKET *pkt, int *al)
  2143. {
  2144. unsigned int length, type, size;
  2145. int tlsext_servername = 0;
  2146. int renegotiate_seen = 0;
  2147. #ifndef OPENSSL_NO_NEXTPROTONEG
  2148. s->s3->next_proto_neg_seen = 0;
  2149. #endif
  2150. s->tlsext_ticket_expected = 0;
  2151. OPENSSL_free(s->s3->alpn_selected);
  2152. s->s3->alpn_selected = NULL;
  2153. #ifndef OPENSSL_NO_HEARTBEATS
  2154. s->tlsext_heartbeat &= ~(SSL_TLSEXT_HB_ENABLED |
  2155. SSL_TLSEXT_HB_DONT_SEND_REQUESTS);
  2156. #endif
  2157. #ifdef TLSEXT_TYPE_encrypt_then_mac
  2158. s->s3->flags &= ~TLS1_FLAGS_ENCRYPT_THEN_MAC;
  2159. #endif
  2160. s->s3->flags &= ~TLS1_FLAGS_RECEIVED_EXTMS;
  2161. if (!PACKET_get_net_2(pkt, &length))
  2162. goto ri_check;
  2163. if (PACKET_remaining(pkt) != length) {
  2164. *al = SSL_AD_DECODE_ERROR;
  2165. return 0;
  2166. }
  2167. while (PACKET_get_net_2(pkt, &type) && PACKET_get_net_2(pkt, &size)) {
  2168. unsigned char *data;
  2169. PACKET spkt;
  2170. if (!PACKET_get_sub_packet(pkt, &spkt, size)
  2171. || !PACKET_peek_bytes(&spkt, &data, size))
  2172. goto ri_check;
  2173. if (s->tlsext_debug_cb)
  2174. s->tlsext_debug_cb(s, 1, type, data, size, s->tlsext_debug_arg);
  2175. if (type == TLSEXT_TYPE_renegotiate) {
  2176. if (!ssl_parse_serverhello_renegotiate_ext(s, &spkt, al))
  2177. return 0;
  2178. renegotiate_seen = 1;
  2179. } else if (s->version == SSL3_VERSION) {
  2180. } else if (type == TLSEXT_TYPE_server_name) {
  2181. if (s->tlsext_hostname == NULL || size > 0) {
  2182. *al = TLS1_AD_UNRECOGNIZED_NAME;
  2183. return 0;
  2184. }
  2185. tlsext_servername = 1;
  2186. }
  2187. #ifndef OPENSSL_NO_EC
  2188. else if (type == TLSEXT_TYPE_ec_point_formats) {
  2189. unsigned int ecpointformatlist_length;
  2190. if (!PACKET_get_1(&spkt, &ecpointformatlist_length)
  2191. || ecpointformatlist_length != size - 1) {
  2192. *al = TLS1_AD_DECODE_ERROR;
  2193. return 0;
  2194. }
  2195. if (!s->hit) {
  2196. s->session->tlsext_ecpointformatlist_length = 0;
  2197. OPENSSL_free(s->session->tlsext_ecpointformatlist);
  2198. if ((s->session->tlsext_ecpointformatlist =
  2199. OPENSSL_malloc(ecpointformatlist_length)) == NULL) {
  2200. *al = TLS1_AD_INTERNAL_ERROR;
  2201. return 0;
  2202. }
  2203. s->session->tlsext_ecpointformatlist_length =
  2204. ecpointformatlist_length;
  2205. if (!PACKET_copy_bytes(&spkt,
  2206. s->session->tlsext_ecpointformatlist,
  2207. ecpointformatlist_length)) {
  2208. *al = TLS1_AD_DECODE_ERROR;
  2209. return 0;
  2210. }
  2211. }
  2212. }
  2213. #endif /* OPENSSL_NO_EC */
  2214. else if (type == TLSEXT_TYPE_session_ticket) {
  2215. if (s->tls_session_ticket_ext_cb &&
  2216. !s->tls_session_ticket_ext_cb(s, data, size,
  2217. s->tls_session_ticket_ext_cb_arg))
  2218. {
  2219. *al = TLS1_AD_INTERNAL_ERROR;
  2220. return 0;
  2221. }
  2222. if (!tls_use_ticket(s) || (size > 0)) {
  2223. *al = TLS1_AD_UNSUPPORTED_EXTENSION;
  2224. return 0;
  2225. }
  2226. s->tlsext_ticket_expected = 1;
  2227. }
  2228. else if (type == TLSEXT_TYPE_status_request) {
  2229. /*
  2230. * MUST be empty and only sent if we've requested a status
  2231. * request message.
  2232. */
  2233. if ((s->tlsext_status_type == -1) || (size > 0)) {
  2234. *al = TLS1_AD_UNSUPPORTED_EXTENSION;
  2235. return 0;
  2236. }
  2237. /* Set flag to expect CertificateStatus message */
  2238. s->tlsext_status_expected = 1;
  2239. }
  2240. #ifndef OPENSSL_NO_NEXTPROTONEG
  2241. else if (type == TLSEXT_TYPE_next_proto_neg &&
  2242. s->s3->tmp.finish_md_len == 0) {
  2243. unsigned char *selected;
  2244. unsigned char selected_len;
  2245. /* We must have requested it. */
  2246. if (s->ctx->next_proto_select_cb == NULL) {
  2247. *al = TLS1_AD_UNSUPPORTED_EXTENSION;
  2248. return 0;
  2249. }
  2250. /* The data must be valid */
  2251. if (!ssl_next_proto_validate(&spkt)) {
  2252. *al = TLS1_AD_DECODE_ERROR;
  2253. return 0;
  2254. }
  2255. if (s->
  2256. ctx->next_proto_select_cb(s, &selected, &selected_len, data,
  2257. size,
  2258. s->ctx->next_proto_select_cb_arg) !=
  2259. SSL_TLSEXT_ERR_OK) {
  2260. *al = TLS1_AD_INTERNAL_ERROR;
  2261. return 0;
  2262. }
  2263. s->next_proto_negotiated = OPENSSL_malloc(selected_len);
  2264. if (s->next_proto_negotiated == NULL) {
  2265. *al = TLS1_AD_INTERNAL_ERROR;
  2266. return 0;
  2267. }
  2268. memcpy(s->next_proto_negotiated, selected, selected_len);
  2269. s->next_proto_negotiated_len = selected_len;
  2270. s->s3->next_proto_neg_seen = 1;
  2271. }
  2272. #endif
  2273. else if (type == TLSEXT_TYPE_application_layer_protocol_negotiation) {
  2274. unsigned len;
  2275. /* We must have requested it. */
  2276. if (s->alpn_client_proto_list == NULL) {
  2277. *al = TLS1_AD_UNSUPPORTED_EXTENSION;
  2278. return 0;
  2279. }
  2280. /*-
  2281. * The extension data consists of:
  2282. * uint16 list_length
  2283. * uint8 proto_length;
  2284. * uint8 proto[proto_length];
  2285. */
  2286. if (!PACKET_get_net_2(&spkt, &len)
  2287. || PACKET_remaining(&spkt) != len
  2288. || !PACKET_get_1(&spkt, &len)
  2289. || PACKET_remaining(&spkt) != len) {
  2290. *al = TLS1_AD_DECODE_ERROR;
  2291. return 0;
  2292. }
  2293. OPENSSL_free(s->s3->alpn_selected);
  2294. s->s3->alpn_selected = OPENSSL_malloc(len);
  2295. if (s->s3->alpn_selected == NULL) {
  2296. *al = TLS1_AD_INTERNAL_ERROR;
  2297. return 0;
  2298. }
  2299. if (!PACKET_copy_bytes(&spkt, s->s3->alpn_selected, len)) {
  2300. *al = TLS1_AD_DECODE_ERROR;
  2301. return 0;
  2302. }
  2303. s->s3->alpn_selected_len = len;
  2304. }
  2305. #ifndef OPENSSL_NO_HEARTBEATS
  2306. else if (type == TLSEXT_TYPE_heartbeat) {
  2307. unsigned int hbtype;
  2308. if (!PACKET_get_1(&spkt, &hbtype)) {
  2309. *al = SSL_AD_DECODE_ERROR;
  2310. return 0;
  2311. }
  2312. switch (hbtype) {
  2313. case 0x01: /* Server allows us to send HB requests */
  2314. s->tlsext_heartbeat |= SSL_TLSEXT_HB_ENABLED;
  2315. break;
  2316. case 0x02: /* Server doesn't accept HB requests */
  2317. s->tlsext_heartbeat |= SSL_TLSEXT_HB_ENABLED;
  2318. s->tlsext_heartbeat |= SSL_TLSEXT_HB_DONT_SEND_REQUESTS;
  2319. break;
  2320. default:
  2321. *al = SSL_AD_ILLEGAL_PARAMETER;
  2322. return 0;
  2323. }
  2324. }
  2325. #endif
  2326. #ifndef OPENSSL_NO_SRTP
  2327. else if (SSL_IS_DTLS(s) && type == TLSEXT_TYPE_use_srtp) {
  2328. if (ssl_parse_serverhello_use_srtp_ext(s, &spkt, al))
  2329. return 0;
  2330. }
  2331. #endif
  2332. #ifdef TLSEXT_TYPE_encrypt_then_mac
  2333. else if (type == TLSEXT_TYPE_encrypt_then_mac) {
  2334. /* Ignore if inappropriate ciphersuite */
  2335. if (s->s3->tmp.new_cipher->algorithm_mac != SSL_AEAD
  2336. && s->s3->tmp.new_cipher->algorithm_enc != SSL_RC4)
  2337. s->s3->flags |= TLS1_FLAGS_ENCRYPT_THEN_MAC;
  2338. }
  2339. #endif
  2340. else if (type == TLSEXT_TYPE_extended_master_secret) {
  2341. s->s3->flags |= TLS1_FLAGS_RECEIVED_EXTMS;
  2342. if (!s->hit)
  2343. s->session->flags |= SSL_SESS_FLAG_EXTMS;
  2344. }
  2345. /*
  2346. * If this extension type was not otherwise handled, but matches a
  2347. * custom_cli_ext_record, then send it to the c callback
  2348. */
  2349. else if (custom_ext_parse(s, 0, type, data, size, al) <= 0)
  2350. return 0;
  2351. }
  2352. if (PACKET_remaining(pkt) != 0) {
  2353. *al = SSL_AD_DECODE_ERROR;
  2354. return 0;
  2355. }
  2356. if (!s->hit && tlsext_servername == 1) {
  2357. if (s->tlsext_hostname) {
  2358. if (s->session->tlsext_hostname == NULL) {
  2359. s->session->tlsext_hostname = OPENSSL_strdup(s->tlsext_hostname);
  2360. if (!s->session->tlsext_hostname) {
  2361. *al = SSL_AD_UNRECOGNIZED_NAME;
  2362. return 0;
  2363. }
  2364. } else {
  2365. *al = SSL_AD_DECODE_ERROR;
  2366. return 0;
  2367. }
  2368. }
  2369. }
  2370. ri_check:
  2371. /*
  2372. * Determine if we need to see RI. Strictly speaking if we want to avoid
  2373. * an attack we should *always* see RI even on initial server hello
  2374. * because the client doesn't see any renegotiation during an attack.
  2375. * However this would mean we could not connect to any server which
  2376. * doesn't support RI so for the immediate future tolerate RI absence on
  2377. * initial connect only.
  2378. */
  2379. if (!renegotiate_seen && !(s->options & SSL_OP_LEGACY_SERVER_CONNECT)
  2380. && !(s->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)) {
  2381. *al = SSL_AD_HANDSHAKE_FAILURE;
  2382. SSLerr(SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT,
  2383. SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
  2384. return 0;
  2385. }
  2386. if (s->hit) {
  2387. /*
  2388. * Check extended master secret extension is consistent with
  2389. * original session.
  2390. */
  2391. if (!(s->s3->flags & TLS1_FLAGS_RECEIVED_EXTMS) !=
  2392. !(s->session->flags & SSL_SESS_FLAG_EXTMS)) {
  2393. *al = SSL_AD_HANDSHAKE_FAILURE;
  2394. SSLerr(SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT, SSL_R_INCONSISTENT_EXTMS);
  2395. return 0;
  2396. }
  2397. }
  2398. return 1;
  2399. }
  2400. int ssl_prepare_clienthello_tlsext(SSL *s)
  2401. {
  2402. return 1;
  2403. }
  2404. int ssl_prepare_serverhello_tlsext(SSL *s)
  2405. {
  2406. return 1;
  2407. }
  2408. static int ssl_check_clienthello_tlsext_early(SSL *s)
  2409. {
  2410. int ret = SSL_TLSEXT_ERR_NOACK;
  2411. int al = SSL_AD_UNRECOGNIZED_NAME;
  2412. #ifndef OPENSSL_NO_EC
  2413. /*
  2414. * The handling of the ECPointFormats extension is done elsewhere, namely
  2415. * in ssl3_choose_cipher in s3_lib.c.
  2416. */
  2417. /*
  2418. * The handling of the EllipticCurves extension is done elsewhere, namely
  2419. * in ssl3_choose_cipher in s3_lib.c.
  2420. */
  2421. #endif
  2422. if (s->ctx != NULL && s->ctx->tlsext_servername_callback != 0)
  2423. ret =
  2424. s->ctx->tlsext_servername_callback(s, &al,
  2425. s->ctx->tlsext_servername_arg);
  2426. else if (s->initial_ctx != NULL
  2427. && s->initial_ctx->tlsext_servername_callback != 0)
  2428. ret =
  2429. s->initial_ctx->tlsext_servername_callback(s, &al,
  2430. s->
  2431. initial_ctx->tlsext_servername_arg);
  2432. switch (ret) {
  2433. case SSL_TLSEXT_ERR_ALERT_FATAL:
  2434. ssl3_send_alert(s, SSL3_AL_FATAL, al);
  2435. return -1;
  2436. case SSL_TLSEXT_ERR_ALERT_WARNING:
  2437. ssl3_send_alert(s, SSL3_AL_WARNING, al);
  2438. return 1;
  2439. case SSL_TLSEXT_ERR_NOACK:
  2440. s->servername_done = 0;
  2441. default:
  2442. return 1;
  2443. }
  2444. }
  2445. /* Initialise digests to default values */
  2446. void ssl_set_default_md(SSL *s)
  2447. {
  2448. const EVP_MD **pmd = s->s3->tmp.md;
  2449. #ifndef OPENSSL_NO_DSA
  2450. pmd[SSL_PKEY_DSA_SIGN] = ssl_md(SSL_MD_SHA1_IDX);
  2451. #endif
  2452. #ifndef OPENSSL_NO_RSA
  2453. if (SSL_USE_SIGALGS(s))
  2454. pmd[SSL_PKEY_RSA_SIGN] = ssl_md(SSL_MD_SHA1_IDX);
  2455. else
  2456. pmd[SSL_PKEY_RSA_SIGN] = ssl_md(SSL_MD_MD5_SHA1_IDX);
  2457. pmd[SSL_PKEY_RSA_ENC] = pmd[SSL_PKEY_RSA_SIGN];
  2458. #endif
  2459. #ifndef OPENSSL_NO_EC
  2460. pmd[SSL_PKEY_ECC] = ssl_md(SSL_MD_SHA1_IDX);
  2461. #endif
  2462. #ifndef OPENSSL_NO_GOST
  2463. pmd[SSL_PKEY_GOST01] = ssl_md(SSL_MD_GOST94_IDX);
  2464. pmd[SSL_PKEY_GOST12_256] = ssl_md(SSL_MD_GOST12_256_IDX);
  2465. pmd[SSL_PKEY_GOST12_512] = ssl_md(SSL_MD_GOST12_512_IDX);
  2466. #endif
  2467. }
  2468. int tls1_set_server_sigalgs(SSL *s)
  2469. {
  2470. int al;
  2471. size_t i;
  2472. /* Clear any shared sigtnature algorithms */
  2473. OPENSSL_free(s->cert->shared_sigalgs);
  2474. s->cert->shared_sigalgs = NULL;
  2475. s->cert->shared_sigalgslen = 0;
  2476. /* Clear certificate digests and validity flags */
  2477. for (i = 0; i < SSL_PKEY_NUM; i++) {
  2478. s->s3->tmp.md[i] = NULL;
  2479. s->s3->tmp.valid_flags[i] = 0;
  2480. }
  2481. /* If sigalgs received process it. */
  2482. if (s->s3->tmp.peer_sigalgs) {
  2483. if (!tls1_process_sigalgs(s)) {
  2484. SSLerr(SSL_F_TLS1_SET_SERVER_SIGALGS, ERR_R_MALLOC_FAILURE);
  2485. al = SSL_AD_INTERNAL_ERROR;
  2486. goto err;
  2487. }
  2488. /* Fatal error is no shared signature algorithms */
  2489. if (!s->cert->shared_sigalgs) {
  2490. SSLerr(SSL_F_TLS1_SET_SERVER_SIGALGS,
  2491. SSL_R_NO_SHARED_SIGATURE_ALGORITHMS);
  2492. al = SSL_AD_ILLEGAL_PARAMETER;
  2493. goto err;
  2494. }
  2495. } else {
  2496. ssl_set_default_md(s);
  2497. }
  2498. return 1;
  2499. err:
  2500. ssl3_send_alert(s, SSL3_AL_FATAL, al);
  2501. return 0;
  2502. }
  2503. int ssl_check_clienthello_tlsext_late(SSL *s)
  2504. {
  2505. int ret = SSL_TLSEXT_ERR_OK;
  2506. int al = SSL_AD_INTERNAL_ERROR;
  2507. /*
  2508. * If status request then ask callback what to do. Note: this must be
  2509. * called after servername callbacks in case the certificate has changed,
  2510. * and must be called after the cipher has been chosen because this may
  2511. * influence which certificate is sent
  2512. */
  2513. if ((s->tlsext_status_type != -1) && s->ctx && s->ctx->tlsext_status_cb) {
  2514. int r;
  2515. CERT_PKEY *certpkey;
  2516. certpkey = ssl_get_server_send_pkey(s);
  2517. /* If no certificate can't return certificate status */
  2518. if (certpkey == NULL) {
  2519. s->tlsext_status_expected = 0;
  2520. return 1;
  2521. }
  2522. /*
  2523. * Set current certificate to one we will use so SSL_get_certificate
  2524. * et al can pick it up.
  2525. */
  2526. s->cert->key = certpkey;
  2527. r = s->ctx->tlsext_status_cb(s, s->ctx->tlsext_status_arg);
  2528. switch (r) {
  2529. /* We don't want to send a status request response */
  2530. case SSL_TLSEXT_ERR_NOACK:
  2531. s->tlsext_status_expected = 0;
  2532. break;
  2533. /* status request response should be sent */
  2534. case SSL_TLSEXT_ERR_OK:
  2535. if (s->tlsext_ocsp_resp)
  2536. s->tlsext_status_expected = 1;
  2537. else
  2538. s->tlsext_status_expected = 0;
  2539. break;
  2540. /* something bad happened */
  2541. case SSL_TLSEXT_ERR_ALERT_FATAL:
  2542. ret = SSL_TLSEXT_ERR_ALERT_FATAL;
  2543. al = SSL_AD_INTERNAL_ERROR;
  2544. goto err;
  2545. }
  2546. } else
  2547. s->tlsext_status_expected = 0;
  2548. err:
  2549. switch (ret) {
  2550. case SSL_TLSEXT_ERR_ALERT_FATAL:
  2551. ssl3_send_alert(s, SSL3_AL_FATAL, al);
  2552. return -1;
  2553. case SSL_TLSEXT_ERR_ALERT_WARNING:
  2554. ssl3_send_alert(s, SSL3_AL_WARNING, al);
  2555. return 1;
  2556. default:
  2557. return 1;
  2558. }
  2559. }
  2560. int ssl_check_serverhello_tlsext(SSL *s)
  2561. {
  2562. int ret = SSL_TLSEXT_ERR_NOACK;
  2563. int al = SSL_AD_UNRECOGNIZED_NAME;
  2564. #ifndef OPENSSL_NO_EC
  2565. /*
  2566. * If we are client and using an elliptic curve cryptography cipher
  2567. * suite, then if server returns an EC point formats lists extension it
  2568. * must contain uncompressed.
  2569. */
  2570. unsigned long alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
  2571. unsigned long alg_a = s->s3->tmp.new_cipher->algorithm_auth;
  2572. if ((s->tlsext_ecpointformatlist != NULL)
  2573. && (s->tlsext_ecpointformatlist_length > 0)
  2574. && (s->session->tlsext_ecpointformatlist != NULL)
  2575. && (s->session->tlsext_ecpointformatlist_length > 0)
  2576. && ((alg_k & (SSL_kECDHE | SSL_kECDHr | SSL_kECDHe))
  2577. || (alg_a & SSL_aECDSA))) {
  2578. /* we are using an ECC cipher */
  2579. size_t i;
  2580. unsigned char *list;
  2581. int found_uncompressed = 0;
  2582. list = s->session->tlsext_ecpointformatlist;
  2583. for (i = 0; i < s->session->tlsext_ecpointformatlist_length; i++) {
  2584. if (*(list++) == TLSEXT_ECPOINTFORMAT_uncompressed) {
  2585. found_uncompressed = 1;
  2586. break;
  2587. }
  2588. }
  2589. if (!found_uncompressed) {
  2590. SSLerr(SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT,
  2591. SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST);
  2592. return -1;
  2593. }
  2594. }
  2595. ret = SSL_TLSEXT_ERR_OK;
  2596. #endif /* OPENSSL_NO_EC */
  2597. if (s->ctx != NULL && s->ctx->tlsext_servername_callback != 0)
  2598. ret =
  2599. s->ctx->tlsext_servername_callback(s, &al,
  2600. s->ctx->tlsext_servername_arg);
  2601. else if (s->initial_ctx != NULL
  2602. && s->initial_ctx->tlsext_servername_callback != 0)
  2603. ret =
  2604. s->initial_ctx->tlsext_servername_callback(s, &al,
  2605. s->
  2606. initial_ctx->tlsext_servername_arg);
  2607. /*
  2608. * Ensure we get sensible values passed to tlsext_status_cb in the event
  2609. * that we don't receive a status message
  2610. */
  2611. OPENSSL_free(s->tlsext_ocsp_resp);
  2612. s->tlsext_ocsp_resp = NULL;
  2613. s->tlsext_ocsp_resplen = -1;
  2614. switch (ret) {
  2615. case SSL_TLSEXT_ERR_ALERT_FATAL:
  2616. ssl3_send_alert(s, SSL3_AL_FATAL, al);
  2617. return -1;
  2618. case SSL_TLSEXT_ERR_ALERT_WARNING:
  2619. ssl3_send_alert(s, SSL3_AL_WARNING, al);
  2620. return 1;
  2621. case SSL_TLSEXT_ERR_NOACK:
  2622. s->servername_done = 0;
  2623. default:
  2624. return 1;
  2625. }
  2626. }
  2627. int ssl_parse_serverhello_tlsext(SSL *s, PACKET *pkt)
  2628. {
  2629. int al = -1;
  2630. if (s->version < SSL3_VERSION)
  2631. return 1;
  2632. if (ssl_scan_serverhello_tlsext(s, pkt, &al) <= 0) {
  2633. ssl3_send_alert(s, SSL3_AL_FATAL, al);
  2634. return 0;
  2635. }
  2636. if (ssl_check_serverhello_tlsext(s) <= 0) {
  2637. SSLerr(SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT, SSL_R_SERVERHELLO_TLSEXT);
  2638. return 0;
  2639. }
  2640. return 1;
  2641. }
  2642. /*-
  2643. * Since the server cache lookup is done early on in the processing of the
  2644. * ClientHello and other operations depend on the result some extensions
  2645. * need to be handled at the same time.
  2646. *
  2647. * Two extensions are currently handled, session ticket and extended master
  2648. * secret.
  2649. *
  2650. * session_id: ClientHello session ID.
  2651. * ext: ClientHello extensions (including length prefix)
  2652. * ret: (output) on return, if a ticket was decrypted, then this is set to
  2653. * point to the resulting session.
  2654. *
  2655. * If s->tls_session_secret_cb is set then we are expecting a pre-shared key
  2656. * ciphersuite, in which case we have no use for session tickets and one will
  2657. * never be decrypted, nor will s->tlsext_ticket_expected be set to 1.
  2658. *
  2659. * Returns:
  2660. * -1: fatal error, either from parsing or decrypting the ticket.
  2661. * 0: no ticket was found (or was ignored, based on settings).
  2662. * 1: a zero length extension was found, indicating that the client supports
  2663. * session tickets but doesn't currently have one to offer.
  2664. * 2: either s->tls_session_secret_cb was set, or a ticket was offered but
  2665. * couldn't be decrypted because of a non-fatal error.
  2666. * 3: a ticket was successfully decrypted and *ret was set.
  2667. *
  2668. * Side effects:
  2669. * Sets s->tlsext_ticket_expected to 1 if the server will have to issue
  2670. * a new session ticket to the client because the client indicated support
  2671. * (and s->tls_session_secret_cb is NULL) but the client either doesn't have
  2672. * a session ticket or we couldn't use the one it gave us, or if
  2673. * s->ctx->tlsext_ticket_key_cb asked to renew the client's ticket.
  2674. * Otherwise, s->tlsext_ticket_expected is set to 0.
  2675. *
  2676. * For extended master secret flag is set if the extension is present.
  2677. *
  2678. */
  2679. int tls_check_serverhello_tlsext_early(SSL *s, const PACKET *ext,
  2680. const PACKET *session_id,
  2681. SSL_SESSION **ret)
  2682. {
  2683. unsigned int i;
  2684. PACKET local_ext = *ext;
  2685. int retv = -1;
  2686. int have_ticket = 0;
  2687. int use_ticket = tls_use_ticket(s);
  2688. *ret = NULL;
  2689. s->tlsext_ticket_expected = 0;
  2690. s->s3->flags &= ~TLS1_FLAGS_RECEIVED_EXTMS;
  2691. /*
  2692. * If tickets disabled behave as if no ticket present to permit stateful
  2693. * resumption.
  2694. */
  2695. if ((s->version <= SSL3_VERSION))
  2696. return 0;
  2697. if (!PACKET_get_net_2(&local_ext, &i)) {
  2698. retv = 0;
  2699. goto end;
  2700. }
  2701. while (PACKET_remaining(&local_ext) >= 4) {
  2702. unsigned int type, size;
  2703. if (!PACKET_get_net_2(&local_ext, &type)
  2704. || !PACKET_get_net_2(&local_ext, &size)) {
  2705. /* Shouldn't ever happen */
  2706. retv = -1;
  2707. goto end;
  2708. }
  2709. if (PACKET_remaining(&local_ext) < size) {
  2710. retv = 0;
  2711. goto end;
  2712. }
  2713. if (type == TLSEXT_TYPE_session_ticket && use_ticket) {
  2714. int r;
  2715. unsigned char *etick;
  2716. /* Duplicate extension */
  2717. if (have_ticket != 0) {
  2718. retv = -1;
  2719. goto end;
  2720. }
  2721. have_ticket = 1;
  2722. if (size == 0) {
  2723. /*
  2724. * The client will accept a ticket but doesn't currently have
  2725. * one.
  2726. */
  2727. s->tlsext_ticket_expected = 1;
  2728. retv = 1;
  2729. continue;
  2730. }
  2731. if (s->tls_session_secret_cb) {
  2732. /*
  2733. * Indicate that the ticket couldn't be decrypted rather than
  2734. * generating the session from ticket now, trigger
  2735. * abbreviated handshake based on external mechanism to
  2736. * calculate the master secret later.
  2737. */
  2738. retv = 2;
  2739. continue;
  2740. }
  2741. if (!PACKET_get_bytes(&local_ext, &etick, size)) {
  2742. /* Shouldn't ever happen */
  2743. retv = -1;
  2744. goto end;
  2745. }
  2746. r = tls_decrypt_ticket(s, etick, size, PACKET_data(session_id),
  2747. PACKET_remaining(session_id), ret);
  2748. switch (r) {
  2749. case 2: /* ticket couldn't be decrypted */
  2750. s->tlsext_ticket_expected = 1;
  2751. retv = 2;
  2752. break;
  2753. case 3: /* ticket was decrypted */
  2754. retv = r;
  2755. break;
  2756. case 4: /* ticket decrypted but need to renew */
  2757. s->tlsext_ticket_expected = 1;
  2758. retv = 3;
  2759. break;
  2760. default: /* fatal error */
  2761. retv = -1;
  2762. break;
  2763. }
  2764. continue;
  2765. } else {
  2766. if (type == TLSEXT_TYPE_extended_master_secret)
  2767. s->s3->flags |= TLS1_FLAGS_RECEIVED_EXTMS;
  2768. if (!PACKET_forward(&local_ext, size)) {
  2769. retv = -1;
  2770. goto end;
  2771. }
  2772. }
  2773. }
  2774. if (have_ticket == 0)
  2775. retv = 0;
  2776. end:
  2777. return retv;
  2778. }
  2779. /*-
  2780. * tls_decrypt_ticket attempts to decrypt a session ticket.
  2781. *
  2782. * etick: points to the body of the session ticket extension.
  2783. * eticklen: the length of the session tickets extenion.
  2784. * sess_id: points at the session ID.
  2785. * sesslen: the length of the session ID.
  2786. * psess: (output) on return, if a ticket was decrypted, then this is set to
  2787. * point to the resulting session.
  2788. *
  2789. * Returns:
  2790. * -2: fatal error, malloc failure.
  2791. * -1: fatal error, either from parsing or decrypting the ticket.
  2792. * 2: the ticket couldn't be decrypted.
  2793. * 3: a ticket was successfully decrypted and *psess was set.
  2794. * 4: same as 3, but the ticket needs to be renewed.
  2795. */
  2796. static int tls_decrypt_ticket(SSL *s, const unsigned char *etick,
  2797. int eticklen, const unsigned char *sess_id,
  2798. int sesslen, SSL_SESSION **psess)
  2799. {
  2800. SSL_SESSION *sess;
  2801. unsigned char *sdec;
  2802. const unsigned char *p;
  2803. int slen, mlen, renew_ticket = 0;
  2804. unsigned char tick_hmac[EVP_MAX_MD_SIZE];
  2805. HMAC_CTX *hctx = NULL;
  2806. EVP_CIPHER_CTX *ctx;
  2807. SSL_CTX *tctx = s->initial_ctx;
  2808. /* Need at least keyname + iv + some encrypted data */
  2809. if (eticklen < 48)
  2810. return 2;
  2811. /* Initialize session ticket encryption and HMAC contexts */
  2812. hctx = HMAC_CTX_new();
  2813. if (hctx == NULL)
  2814. return -2;
  2815. ctx = EVP_CIPHER_CTX_new();
  2816. if (tctx->tlsext_ticket_key_cb) {
  2817. unsigned char *nctick = (unsigned char *)etick;
  2818. int rv = tctx->tlsext_ticket_key_cb(s, nctick, nctick + 16,
  2819. ctx, hctx, 0);
  2820. if (rv < 0)
  2821. return -1;
  2822. if (rv == 0)
  2823. return 2;
  2824. if (rv == 2)
  2825. renew_ticket = 1;
  2826. } else {
  2827. /* Check key name matches */
  2828. if (memcmp(etick, tctx->tlsext_tick_key_name, 16))
  2829. return 2;
  2830. if (HMAC_Init_ex(hctx, tctx->tlsext_tick_hmac_key, 16,
  2831. EVP_sha256(), NULL) <= 0
  2832. || EVP_DecryptInit_ex(ctx, EVP_aes_128_cbc(), NULL,
  2833. tctx->tlsext_tick_aes_key,
  2834. etick + 16) <= 0) {
  2835. goto err;
  2836. }
  2837. }
  2838. /*
  2839. * Attempt to process session ticket, first conduct sanity and integrity
  2840. * checks on ticket.
  2841. */
  2842. mlen = HMAC_size(hctx);
  2843. if (mlen < 0) {
  2844. goto err;
  2845. }
  2846. eticklen -= mlen;
  2847. /* Check HMAC of encrypted ticket */
  2848. if (HMAC_Update(hctx, etick, eticklen) <= 0
  2849. || HMAC_Final(hctx, tick_hmac, NULL) <= 0) {
  2850. goto err;
  2851. }
  2852. HMAC_CTX_free(hctx);
  2853. if (CRYPTO_memcmp(tick_hmac, etick + eticklen, mlen)) {
  2854. EVP_CIPHER_CTX_free(ctx);
  2855. return 2;
  2856. }
  2857. /* Attempt to decrypt session data */
  2858. /* Move p after IV to start of encrypted ticket, update length */
  2859. p = etick + 16 + EVP_CIPHER_CTX_iv_length(ctx);
  2860. eticklen -= 16 + EVP_CIPHER_CTX_iv_length(ctx);
  2861. sdec = OPENSSL_malloc(eticklen);
  2862. if (sdec == NULL
  2863. || EVP_DecryptUpdate(ctx, sdec, &slen, p, eticklen) <= 0) {
  2864. EVP_CIPHER_CTX_free(ctx);
  2865. return -1;
  2866. }
  2867. if (EVP_DecryptFinal(ctx, sdec + slen, &mlen) <= 0) {
  2868. EVP_CIPHER_CTX_free(ctx);
  2869. OPENSSL_free(sdec);
  2870. return 2;
  2871. }
  2872. slen += mlen;
  2873. EVP_CIPHER_CTX_free(ctx);
  2874. ctx = NULL;
  2875. p = sdec;
  2876. sess = d2i_SSL_SESSION(NULL, &p, slen);
  2877. OPENSSL_free(sdec);
  2878. if (sess) {
  2879. /*
  2880. * The session ID, if non-empty, is used by some clients to detect
  2881. * that the ticket has been accepted. So we copy it to the session
  2882. * structure. If it is empty set length to zero as required by
  2883. * standard.
  2884. */
  2885. if (sesslen)
  2886. memcpy(sess->session_id, sess_id, sesslen);
  2887. sess->session_id_length = sesslen;
  2888. *psess = sess;
  2889. if (renew_ticket)
  2890. return 4;
  2891. else
  2892. return 3;
  2893. }
  2894. ERR_clear_error();
  2895. /*
  2896. * For session parse failure, indicate that we need to send a new ticket.
  2897. */
  2898. return 2;
  2899. err:
  2900. EVP_CIPHER_CTX_free(ctx);
  2901. HMAC_CTX_free(hctx);
  2902. return -1;
  2903. }
  2904. /* Tables to translate from NIDs to TLS v1.2 ids */
  2905. typedef struct {
  2906. int nid;
  2907. int id;
  2908. } tls12_lookup;
  2909. static const tls12_lookup tls12_md[] = {
  2910. {NID_md5, TLSEXT_hash_md5},
  2911. {NID_sha1, TLSEXT_hash_sha1},
  2912. {NID_sha224, TLSEXT_hash_sha224},
  2913. {NID_sha256, TLSEXT_hash_sha256},
  2914. {NID_sha384, TLSEXT_hash_sha384},
  2915. {NID_sha512, TLSEXT_hash_sha512},
  2916. {NID_id_GostR3411_94, TLSEXT_hash_gostr3411},
  2917. {NID_id_GostR3411_2012_256, TLSEXT_hash_gostr34112012_256},
  2918. {NID_id_GostR3411_2012_512, TLSEXT_hash_gostr34112012_512},
  2919. };
  2920. static const tls12_lookup tls12_sig[] = {
  2921. {EVP_PKEY_RSA, TLSEXT_signature_rsa},
  2922. {EVP_PKEY_DSA, TLSEXT_signature_dsa},
  2923. {EVP_PKEY_EC, TLSEXT_signature_ecdsa},
  2924. {NID_id_GostR3410_2001, TLSEXT_signature_gostr34102001},
  2925. {NID_id_GostR3410_2012_256, TLSEXT_signature_gostr34102012_256},
  2926. {NID_id_GostR3410_2012_512, TLSEXT_signature_gostr34102012_512}
  2927. };
  2928. static int tls12_find_id(int nid, const tls12_lookup *table, size_t tlen)
  2929. {
  2930. size_t i;
  2931. for (i = 0; i < tlen; i++) {
  2932. if (table[i].nid == nid)
  2933. return table[i].id;
  2934. }
  2935. return -1;
  2936. }
  2937. static int tls12_find_nid(int id, const tls12_lookup *table, size_t tlen)
  2938. {
  2939. size_t i;
  2940. for (i = 0; i < tlen; i++) {
  2941. if ((table[i].id) == id)
  2942. return table[i].nid;
  2943. }
  2944. return NID_undef;
  2945. }
  2946. int tls12_get_sigandhash(unsigned char *p, const EVP_PKEY *pk,
  2947. const EVP_MD *md)
  2948. {
  2949. int sig_id, md_id;
  2950. if (!md)
  2951. return 0;
  2952. md_id = tls12_find_id(EVP_MD_type(md), tls12_md, OSSL_NELEM(tls12_md));
  2953. if (md_id == -1)
  2954. return 0;
  2955. sig_id = tls12_get_sigid(pk);
  2956. if (sig_id == -1)
  2957. return 0;
  2958. p[0] = (unsigned char)md_id;
  2959. p[1] = (unsigned char)sig_id;
  2960. return 1;
  2961. }
  2962. int tls12_get_sigid(const EVP_PKEY *pk)
  2963. {
  2964. return tls12_find_id(EVP_PKEY_id(pk), tls12_sig, OSSL_NELEM(tls12_sig));
  2965. }
  2966. typedef struct {
  2967. int nid;
  2968. int secbits;
  2969. int md_idx;
  2970. unsigned char tlsext_hash;
  2971. } tls12_hash_info;
  2972. static const tls12_hash_info tls12_md_info[] = {
  2973. {NID_md5, 64, SSL_MD_MD5_IDX, TLSEXT_hash_md5},
  2974. {NID_sha1, 80, SSL_MD_SHA1_IDX, TLSEXT_hash_sha1},
  2975. {NID_sha224, 112, SSL_MD_SHA224_IDX, TLSEXT_hash_sha224},
  2976. {NID_sha256, 128, SSL_MD_SHA256_IDX, TLSEXT_hash_sha256},
  2977. {NID_sha384, 192, SSL_MD_SHA384_IDX, TLSEXT_hash_sha384},
  2978. {NID_sha512, 256, SSL_MD_SHA512_IDX, TLSEXT_hash_sha512},
  2979. {NID_id_GostR3411_94, 128, SSL_MD_GOST94_IDX, TLSEXT_hash_gostr3411},
  2980. {NID_id_GostR3411_2012_256, 128, SSL_MD_GOST12_256_IDX, TLSEXT_hash_gostr34112012_256},
  2981. {NID_id_GostR3411_2012_512, 256, SSL_MD_GOST12_512_IDX, TLSEXT_hash_gostr34112012_512},
  2982. };
  2983. static const tls12_hash_info *tls12_get_hash_info(unsigned char hash_alg)
  2984. {
  2985. unsigned int i;
  2986. if (hash_alg == 0)
  2987. return NULL;
  2988. for (i=0; i < OSSL_NELEM(tls12_md_info); i++)
  2989. {
  2990. if (tls12_md_info[i].tlsext_hash == hash_alg)
  2991. return tls12_md_info + i;
  2992. }
  2993. return NULL;
  2994. }
  2995. const EVP_MD *tls12_get_hash(unsigned char hash_alg)
  2996. {
  2997. const tls12_hash_info *inf;
  2998. if (hash_alg == TLSEXT_hash_md5 && FIPS_mode())
  2999. return NULL;
  3000. inf = tls12_get_hash_info(hash_alg);
  3001. if (!inf)
  3002. return NULL;
  3003. return ssl_md(inf->md_idx);
  3004. }
  3005. static int tls12_get_pkey_idx(unsigned char sig_alg)
  3006. {
  3007. switch (sig_alg) {
  3008. #ifndef OPENSSL_NO_RSA
  3009. case TLSEXT_signature_rsa:
  3010. return SSL_PKEY_RSA_SIGN;
  3011. #endif
  3012. #ifndef OPENSSL_NO_DSA
  3013. case TLSEXT_signature_dsa:
  3014. return SSL_PKEY_DSA_SIGN;
  3015. #endif
  3016. #ifndef OPENSSL_NO_EC
  3017. case TLSEXT_signature_ecdsa:
  3018. return SSL_PKEY_ECC;
  3019. #endif
  3020. # ifndef OPENSSL_NO_GOST
  3021. case TLSEXT_signature_gostr34102001:
  3022. return SSL_PKEY_GOST01;
  3023. case TLSEXT_signature_gostr34102012_256:
  3024. return SSL_PKEY_GOST12_256;
  3025. case TLSEXT_signature_gostr34102012_512:
  3026. return SSL_PKEY_GOST12_512;
  3027. # endif
  3028. }
  3029. return -1;
  3030. }
  3031. /* Convert TLS 1.2 signature algorithm extension values into NIDs */
  3032. static void tls1_lookup_sigalg(int *phash_nid, int *psign_nid,
  3033. int *psignhash_nid, const unsigned char *data)
  3034. {
  3035. int sign_nid = NID_undef, hash_nid = NID_undef;
  3036. if (!phash_nid && !psign_nid && !psignhash_nid)
  3037. return;
  3038. if (phash_nid || psignhash_nid) {
  3039. hash_nid = tls12_find_nid(data[0], tls12_md, OSSL_NELEM(tls12_md));
  3040. if (phash_nid)
  3041. *phash_nid = hash_nid;
  3042. }
  3043. if (psign_nid || psignhash_nid) {
  3044. sign_nid = tls12_find_nid(data[1], tls12_sig, OSSL_NELEM(tls12_sig));
  3045. if (psign_nid)
  3046. *psign_nid = sign_nid;
  3047. }
  3048. if (psignhash_nid) {
  3049. if (sign_nid == NID_undef || hash_nid == NID_undef
  3050. || OBJ_find_sigid_by_algs(psignhash_nid, hash_nid,
  3051. sign_nid) <= 0)
  3052. *psignhash_nid = NID_undef;
  3053. }
  3054. }
  3055. /* Check to see if a signature algorithm is allowed */
  3056. static int tls12_sigalg_allowed(SSL *s, int op, const unsigned char *ptmp)
  3057. {
  3058. /* See if we have an entry in the hash table and it is enabled */
  3059. const tls12_hash_info *hinf = tls12_get_hash_info(ptmp[0]);
  3060. if (hinf == NULL || ssl_md(hinf->md_idx) == NULL)
  3061. return 0;
  3062. /* See if public key algorithm allowed */
  3063. if (tls12_get_pkey_idx(ptmp[1]) == -1)
  3064. return 0;
  3065. /* Finally see if security callback allows it */
  3066. return ssl_security(s, op, hinf->secbits, hinf->nid, (void *)ptmp);
  3067. }
  3068. /*
  3069. * Get a mask of disabled public key algorithms based on supported signature
  3070. * algorithms. For example if no signature algorithm supports RSA then RSA is
  3071. * disabled.
  3072. */
  3073. void ssl_set_sig_mask(uint32_t *pmask_a, SSL *s, int op)
  3074. {
  3075. const unsigned char *sigalgs;
  3076. size_t i, sigalgslen;
  3077. int have_rsa = 0, have_dsa = 0, have_ecdsa = 0;
  3078. /*
  3079. * Now go through all signature algorithms seeing if we support any for
  3080. * RSA, DSA, ECDSA. Do this for all versions not just TLS 1.2. To keep
  3081. * down calls to security callback only check if we have to.
  3082. */
  3083. sigalgslen = tls12_get_psigalgs(s, &sigalgs);
  3084. for (i = 0; i < sigalgslen; i += 2, sigalgs += 2) {
  3085. switch (sigalgs[1]) {
  3086. #ifndef OPENSSL_NO_RSA
  3087. case TLSEXT_signature_rsa:
  3088. if (!have_rsa && tls12_sigalg_allowed(s, op, sigalgs))
  3089. have_rsa = 1;
  3090. break;
  3091. #endif
  3092. #ifndef OPENSSL_NO_DSA
  3093. case TLSEXT_signature_dsa:
  3094. if (!have_dsa && tls12_sigalg_allowed(s, op, sigalgs))
  3095. have_dsa = 1;
  3096. break;
  3097. #endif
  3098. #ifndef OPENSSL_NO_EC
  3099. case TLSEXT_signature_ecdsa:
  3100. if (!have_ecdsa && tls12_sigalg_allowed(s, op, sigalgs))
  3101. have_ecdsa = 1;
  3102. break;
  3103. #endif
  3104. }
  3105. }
  3106. if (!have_rsa)
  3107. *pmask_a |= SSL_aRSA;
  3108. if (!have_dsa)
  3109. *pmask_a |= SSL_aDSS;
  3110. if (!have_ecdsa)
  3111. *pmask_a |= SSL_aECDSA;
  3112. }
  3113. size_t tls12_copy_sigalgs(SSL *s, unsigned char *out,
  3114. const unsigned char *psig, size_t psiglen)
  3115. {
  3116. unsigned char *tmpout = out;
  3117. size_t i;
  3118. for (i = 0; i < psiglen; i += 2, psig += 2) {
  3119. if (tls12_sigalg_allowed(s, SSL_SECOP_SIGALG_SUPPORTED, psig)) {
  3120. *tmpout++ = psig[0];
  3121. *tmpout++ = psig[1];
  3122. }
  3123. }
  3124. return tmpout - out;
  3125. }
  3126. /* Given preference and allowed sigalgs set shared sigalgs */
  3127. static int tls12_shared_sigalgs(SSL *s, TLS_SIGALGS *shsig,
  3128. const unsigned char *pref, size_t preflen,
  3129. const unsigned char *allow, size_t allowlen)
  3130. {
  3131. const unsigned char *ptmp, *atmp;
  3132. size_t i, j, nmatch = 0;
  3133. for (i = 0, ptmp = pref; i < preflen; i += 2, ptmp += 2) {
  3134. /* Skip disabled hashes or signature algorithms */
  3135. if (!tls12_sigalg_allowed(s, SSL_SECOP_SIGALG_SHARED, ptmp))
  3136. continue;
  3137. for (j = 0, atmp = allow; j < allowlen; j += 2, atmp += 2) {
  3138. if (ptmp[0] == atmp[0] && ptmp[1] == atmp[1]) {
  3139. nmatch++;
  3140. if (shsig) {
  3141. shsig->rhash = ptmp[0];
  3142. shsig->rsign = ptmp[1];
  3143. tls1_lookup_sigalg(&shsig->hash_nid,
  3144. &shsig->sign_nid,
  3145. &shsig->signandhash_nid, ptmp);
  3146. shsig++;
  3147. }
  3148. break;
  3149. }
  3150. }
  3151. }
  3152. return nmatch;
  3153. }
  3154. /* Set shared signature algorithms for SSL structures */
  3155. static int tls1_set_shared_sigalgs(SSL *s)
  3156. {
  3157. const unsigned char *pref, *allow, *conf;
  3158. size_t preflen, allowlen, conflen;
  3159. size_t nmatch;
  3160. TLS_SIGALGS *salgs = NULL;
  3161. CERT *c = s->cert;
  3162. unsigned int is_suiteb = tls1_suiteb(s);
  3163. OPENSSL_free(c->shared_sigalgs);
  3164. c->shared_sigalgs = NULL;
  3165. c->shared_sigalgslen = 0;
  3166. /* If client use client signature algorithms if not NULL */
  3167. if (!s->server && c->client_sigalgs && !is_suiteb) {
  3168. conf = c->client_sigalgs;
  3169. conflen = c->client_sigalgslen;
  3170. } else if (c->conf_sigalgs && !is_suiteb) {
  3171. conf = c->conf_sigalgs;
  3172. conflen = c->conf_sigalgslen;
  3173. } else
  3174. conflen = tls12_get_psigalgs(s, &conf);
  3175. if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE || is_suiteb) {
  3176. pref = conf;
  3177. preflen = conflen;
  3178. allow = s->s3->tmp.peer_sigalgs;
  3179. allowlen = s->s3->tmp.peer_sigalgslen;
  3180. } else {
  3181. allow = conf;
  3182. allowlen = conflen;
  3183. pref = s->s3->tmp.peer_sigalgs;
  3184. preflen = s->s3->tmp.peer_sigalgslen;
  3185. }
  3186. nmatch = tls12_shared_sigalgs(s, NULL, pref, preflen, allow, allowlen);
  3187. if (nmatch) {
  3188. salgs = OPENSSL_malloc(nmatch * sizeof(TLS_SIGALGS));
  3189. if (salgs == NULL)
  3190. return 0;
  3191. nmatch = tls12_shared_sigalgs(s, salgs, pref, preflen, allow, allowlen);
  3192. } else {
  3193. salgs = NULL;
  3194. }
  3195. c->shared_sigalgs = salgs;
  3196. c->shared_sigalgslen = nmatch;
  3197. return 1;
  3198. }
  3199. /* Set preferred digest for each key type */
  3200. int tls1_save_sigalgs(SSL *s, const unsigned char *data, int dsize)
  3201. {
  3202. CERT *c = s->cert;
  3203. /* Extension ignored for inappropriate versions */
  3204. if (!SSL_USE_SIGALGS(s))
  3205. return 1;
  3206. /* Should never happen */
  3207. if (!c)
  3208. return 0;
  3209. OPENSSL_free(s->s3->tmp.peer_sigalgs);
  3210. s->s3->tmp.peer_sigalgs = OPENSSL_malloc(dsize);
  3211. if (s->s3->tmp.peer_sigalgs == NULL)
  3212. return 0;
  3213. s->s3->tmp.peer_sigalgslen = dsize;
  3214. memcpy(s->s3->tmp.peer_sigalgs, data, dsize);
  3215. return 1;
  3216. }
  3217. int tls1_process_sigalgs(SSL *s)
  3218. {
  3219. int idx;
  3220. size_t i;
  3221. const EVP_MD *md;
  3222. const EVP_MD **pmd = s->s3->tmp.md;
  3223. uint32_t *pvalid = s->s3->tmp.valid_flags;
  3224. CERT *c = s->cert;
  3225. TLS_SIGALGS *sigptr;
  3226. if (!tls1_set_shared_sigalgs(s))
  3227. return 0;
  3228. #ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
  3229. if (s->cert->cert_flags & SSL_CERT_FLAG_BROKEN_PROTOCOL) {
  3230. /*
  3231. * Use first set signature preference to force message digest,
  3232. * ignoring any peer preferences.
  3233. */
  3234. const unsigned char *sigs = NULL;
  3235. if (s->server)
  3236. sigs = c->conf_sigalgs;
  3237. else
  3238. sigs = c->client_sigalgs;
  3239. if (sigs) {
  3240. idx = tls12_get_pkey_idx(sigs[1]);
  3241. md = tls12_get_hash(sigs[0]);
  3242. pmd[idx] = md;
  3243. pvalid[idx] = CERT_PKEY_EXPLICIT_SIGN;
  3244. if (idx == SSL_PKEY_RSA_SIGN) {
  3245. pvalid[SSL_PKEY_RSA_ENC] = CERT_PKEY_EXPLICIT_SIGN;
  3246. pmd[SSL_PKEY_RSA_ENC] = md;
  3247. }
  3248. }
  3249. }
  3250. #endif
  3251. for (i = 0, sigptr = c->shared_sigalgs;
  3252. i < c->shared_sigalgslen; i++, sigptr++) {
  3253. idx = tls12_get_pkey_idx(sigptr->rsign);
  3254. if (idx > 0 && pmd[idx] == NULL) {
  3255. md = tls12_get_hash(sigptr->rhash);
  3256. pmd[idx] = md;
  3257. pvalid[idx] = CERT_PKEY_EXPLICIT_SIGN;
  3258. if (idx == SSL_PKEY_RSA_SIGN) {
  3259. pvalid[SSL_PKEY_RSA_ENC] = CERT_PKEY_EXPLICIT_SIGN;
  3260. pmd[SSL_PKEY_RSA_ENC] = md;
  3261. }
  3262. }
  3263. }
  3264. /*
  3265. * In strict mode leave unset digests as NULL to indicate we can't use
  3266. * the certificate for signing.
  3267. */
  3268. if (!(s->cert->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT)) {
  3269. /*
  3270. * Set any remaining keys to default values. NOTE: if alg is not
  3271. * supported it stays as NULL.
  3272. */
  3273. #ifndef OPENSSL_NO_DSA
  3274. if (pmd[SSL_PKEY_DSA_SIGN] == NULL)
  3275. pmd[SSL_PKEY_DSA_SIGN] = EVP_sha1();
  3276. #endif
  3277. #ifndef OPENSSL_NO_RSA
  3278. if (pmd[SSL_PKEY_RSA_SIGN] == NULL) {
  3279. pmd[SSL_PKEY_RSA_SIGN] = EVP_sha1();
  3280. pmd[SSL_PKEY_RSA_ENC] = EVP_sha1();
  3281. }
  3282. #endif
  3283. #ifndef OPENSSL_NO_EC
  3284. if (pmd[SSL_PKEY_ECC] == NULL)
  3285. pmd[SSL_PKEY_ECC] = EVP_sha1();
  3286. #endif
  3287. # ifndef OPENSSL_NO_GOST
  3288. if (pmd[SSL_PKEY_GOST01] == NULL)
  3289. pmd[SSL_PKEY_GOST01] = EVP_get_digestbynid(NID_id_GostR3411_94);
  3290. if (pmd[SSL_PKEY_GOST12_256] == NULL)
  3291. pmd[SSL_PKEY_GOST12_256] = EVP_get_digestbynid(NID_id_GostR3411_2012_256);
  3292. if (pmd[SSL_PKEY_GOST12_512] == NULL)
  3293. pmd[SSL_PKEY_GOST12_512] = EVP_get_digestbynid(NID_id_GostR3411_2012_512);
  3294. # endif
  3295. }
  3296. return 1;
  3297. }
  3298. int SSL_get_sigalgs(SSL *s, int idx,
  3299. int *psign, int *phash, int *psignhash,
  3300. unsigned char *rsig, unsigned char *rhash)
  3301. {
  3302. const unsigned char *psig = s->s3->tmp.peer_sigalgs;
  3303. if (psig == NULL)
  3304. return 0;
  3305. if (idx >= 0) {
  3306. idx <<= 1;
  3307. if (idx >= (int)s->s3->tmp.peer_sigalgslen)
  3308. return 0;
  3309. psig += idx;
  3310. if (rhash)
  3311. *rhash = psig[0];
  3312. if (rsig)
  3313. *rsig = psig[1];
  3314. tls1_lookup_sigalg(phash, psign, psignhash, psig);
  3315. }
  3316. return s->s3->tmp.peer_sigalgslen / 2;
  3317. }
  3318. int SSL_get_shared_sigalgs(SSL *s, int idx,
  3319. int *psign, int *phash, int *psignhash,
  3320. unsigned char *rsig, unsigned char *rhash)
  3321. {
  3322. TLS_SIGALGS *shsigalgs = s->cert->shared_sigalgs;
  3323. if (!shsigalgs || idx >= (int)s->cert->shared_sigalgslen)
  3324. return 0;
  3325. shsigalgs += idx;
  3326. if (phash)
  3327. *phash = shsigalgs->hash_nid;
  3328. if (psign)
  3329. *psign = shsigalgs->sign_nid;
  3330. if (psignhash)
  3331. *psignhash = shsigalgs->signandhash_nid;
  3332. if (rsig)
  3333. *rsig = shsigalgs->rsign;
  3334. if (rhash)
  3335. *rhash = shsigalgs->rhash;
  3336. return s->cert->shared_sigalgslen;
  3337. }
  3338. #ifndef OPENSSL_NO_HEARTBEATS
  3339. int tls1_process_heartbeat(SSL *s, unsigned char *p, unsigned int length)
  3340. {
  3341. unsigned char *pl;
  3342. unsigned short hbtype;
  3343. unsigned int payload;
  3344. unsigned int padding = 16; /* Use minimum padding */
  3345. if (s->msg_callback)
  3346. s->msg_callback(0, s->version, TLS1_RT_HEARTBEAT,
  3347. p, length,
  3348. s, s->msg_callback_arg);
  3349. /* Read type and payload length first */
  3350. if (1 + 2 + 16 > length)
  3351. return 0; /* silently discard */
  3352. hbtype = *p++;
  3353. n2s(p, payload);
  3354. if (1 + 2 + payload + 16 > length)
  3355. return 0; /* silently discard per RFC 6520 sec. 4 */
  3356. pl = p;
  3357. if (hbtype == TLS1_HB_REQUEST) {
  3358. unsigned char *buffer, *bp;
  3359. int r;
  3360. /*
  3361. * Allocate memory for the response, size is 1 bytes message type,
  3362. * plus 2 bytes payload length, plus payload, plus padding
  3363. */
  3364. buffer = OPENSSL_malloc(1 + 2 + payload + padding);
  3365. if (buffer == NULL) {
  3366. SSLerr(SSL_F_TLS1_PROCESS_HEARTBEAT, ERR_R_MALLOC_FAILURE);
  3367. return -1;
  3368. }
  3369. bp = buffer;
  3370. /* Enter response type, length and copy payload */
  3371. *bp++ = TLS1_HB_RESPONSE;
  3372. s2n(payload, bp);
  3373. memcpy(bp, pl, payload);
  3374. bp += payload;
  3375. /* Random padding */
  3376. if (RAND_bytes(bp, padding) <= 0) {
  3377. OPENSSL_free(buffer);
  3378. return -1;
  3379. }
  3380. r = ssl3_write_bytes(s, TLS1_RT_HEARTBEAT, buffer,
  3381. 3 + payload + padding);
  3382. if (r >= 0 && s->msg_callback)
  3383. s->msg_callback(1, s->version, TLS1_RT_HEARTBEAT,
  3384. buffer, 3 + payload + padding,
  3385. s, s->msg_callback_arg);
  3386. OPENSSL_free(buffer);
  3387. if (r < 0)
  3388. return r;
  3389. } else if (hbtype == TLS1_HB_RESPONSE) {
  3390. unsigned int seq;
  3391. /*
  3392. * We only send sequence numbers (2 bytes unsigned int), and 16
  3393. * random bytes, so we just try to read the sequence number
  3394. */
  3395. n2s(pl, seq);
  3396. if (payload == 18 && seq == s->tlsext_hb_seq) {
  3397. s->tlsext_hb_seq++;
  3398. s->tlsext_hb_pending = 0;
  3399. }
  3400. }
  3401. return 0;
  3402. }
  3403. int tls1_heartbeat(SSL *s)
  3404. {
  3405. unsigned char *buf, *p;
  3406. int ret = -1;
  3407. unsigned int payload = 18; /* Sequence number + random bytes */
  3408. unsigned int padding = 16; /* Use minimum padding */
  3409. /* Only send if peer supports and accepts HB requests... */
  3410. if (!(s->tlsext_heartbeat & SSL_TLSEXT_HB_ENABLED) ||
  3411. s->tlsext_heartbeat & SSL_TLSEXT_HB_DONT_SEND_REQUESTS) {
  3412. SSLerr(SSL_F_TLS1_HEARTBEAT, SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT);
  3413. return -1;
  3414. }
  3415. /* ...and there is none in flight yet... */
  3416. if (s->tlsext_hb_pending) {
  3417. SSLerr(SSL_F_TLS1_HEARTBEAT, SSL_R_TLS_HEARTBEAT_PENDING);
  3418. return -1;
  3419. }
  3420. /* ...and no handshake in progress. */
  3421. if (SSL_in_init(s) || ossl_statem_get_in_handshake(s)) {
  3422. SSLerr(SSL_F_TLS1_HEARTBEAT, SSL_R_UNEXPECTED_MESSAGE);
  3423. return -1;
  3424. }
  3425. /*-
  3426. * Create HeartBeat message, we just use a sequence number
  3427. * as payload to distuingish different messages and add
  3428. * some random stuff.
  3429. * - Message Type, 1 byte
  3430. * - Payload Length, 2 bytes (unsigned int)
  3431. * - Payload, the sequence number (2 bytes uint)
  3432. * - Payload, random bytes (16 bytes uint)
  3433. * - Padding
  3434. */
  3435. buf = OPENSSL_malloc(1 + 2 + payload + padding);
  3436. if (buf == NULL) {
  3437. SSLerr(SSL_F_TLS1_HEARTBEAT, ERR_R_MALLOC_FAILURE);
  3438. return -1;
  3439. }
  3440. p = buf;
  3441. /* Message Type */
  3442. *p++ = TLS1_HB_REQUEST;
  3443. /* Payload length (18 bytes here) */
  3444. s2n(payload, p);
  3445. /* Sequence number */
  3446. s2n(s->tlsext_hb_seq, p);
  3447. /* 16 random bytes */
  3448. if (RAND_bytes(p, 16) <= 0) {
  3449. SSLerr(SSL_F_TLS1_HEARTBEAT, ERR_R_INTERNAL_ERROR);
  3450. goto err;
  3451. }
  3452. p += 16;
  3453. /* Random padding */
  3454. if (RAND_bytes(p, padding) <= 0) {
  3455. SSLerr(SSL_F_TLS1_HEARTBEAT, ERR_R_INTERNAL_ERROR);
  3456. goto err;
  3457. }
  3458. ret = ssl3_write_bytes(s, TLS1_RT_HEARTBEAT, buf, 3 + payload + padding);
  3459. if (ret >= 0) {
  3460. if (s->msg_callback)
  3461. s->msg_callback(1, s->version, TLS1_RT_HEARTBEAT,
  3462. buf, 3 + payload + padding,
  3463. s, s->msg_callback_arg);
  3464. s->tlsext_hb_pending = 1;
  3465. }
  3466. err:
  3467. OPENSSL_free(buf);
  3468. return ret;
  3469. }
  3470. #endif
  3471. #define MAX_SIGALGLEN (TLSEXT_hash_num * TLSEXT_signature_num * 2)
  3472. typedef struct {
  3473. size_t sigalgcnt;
  3474. int sigalgs[MAX_SIGALGLEN];
  3475. } sig_cb_st;
  3476. static void get_sigorhash(int *psig, int *phash, const char *str)
  3477. {
  3478. if (strcmp(str, "RSA") == 0) {
  3479. *psig = EVP_PKEY_RSA;
  3480. } else if (strcmp(str, "DSA") == 0) {
  3481. *psig = EVP_PKEY_DSA;
  3482. } else if (strcmp(str, "ECDSA") == 0) {
  3483. *psig = EVP_PKEY_EC;
  3484. } else {
  3485. *phash = OBJ_sn2nid(str);
  3486. if (*phash == NID_undef)
  3487. *phash = OBJ_ln2nid(str);
  3488. }
  3489. }
  3490. static int sig_cb(const char *elem, int len, void *arg)
  3491. {
  3492. sig_cb_st *sarg = arg;
  3493. size_t i;
  3494. char etmp[20], *p;
  3495. int sig_alg = NID_undef, hash_alg = NID_undef;
  3496. if (elem == NULL)
  3497. return 0;
  3498. if (sarg->sigalgcnt == MAX_SIGALGLEN)
  3499. return 0;
  3500. if (len > (int)(sizeof(etmp) - 1))
  3501. return 0;
  3502. memcpy(etmp, elem, len);
  3503. etmp[len] = 0;
  3504. p = strchr(etmp, '+');
  3505. if (!p)
  3506. return 0;
  3507. *p = 0;
  3508. p++;
  3509. if (!*p)
  3510. return 0;
  3511. get_sigorhash(&sig_alg, &hash_alg, etmp);
  3512. get_sigorhash(&sig_alg, &hash_alg, p);
  3513. if (sig_alg == NID_undef || hash_alg == NID_undef)
  3514. return 0;
  3515. for (i = 0; i < sarg->sigalgcnt; i += 2) {
  3516. if (sarg->sigalgs[i] == sig_alg && sarg->sigalgs[i + 1] == hash_alg)
  3517. return 0;
  3518. }
  3519. sarg->sigalgs[sarg->sigalgcnt++] = hash_alg;
  3520. sarg->sigalgs[sarg->sigalgcnt++] = sig_alg;
  3521. return 1;
  3522. }
  3523. /*
  3524. * Set suppored signature algorithms based on a colon separated list of the
  3525. * form sig+hash e.g. RSA+SHA512:DSA+SHA512
  3526. */
  3527. int tls1_set_sigalgs_list(CERT *c, const char *str, int client)
  3528. {
  3529. sig_cb_st sig;
  3530. sig.sigalgcnt = 0;
  3531. if (!CONF_parse_list(str, ':', 1, sig_cb, &sig))
  3532. return 0;
  3533. if (c == NULL)
  3534. return 1;
  3535. return tls1_set_sigalgs(c, sig.sigalgs, sig.sigalgcnt, client);
  3536. }
  3537. int tls1_set_sigalgs(CERT *c, const int *psig_nids, size_t salglen,
  3538. int client)
  3539. {
  3540. unsigned char *sigalgs, *sptr;
  3541. int rhash, rsign;
  3542. size_t i;
  3543. if (salglen & 1)
  3544. return 0;
  3545. sigalgs = OPENSSL_malloc(salglen);
  3546. if (sigalgs == NULL)
  3547. return 0;
  3548. for (i = 0, sptr = sigalgs; i < salglen; i += 2) {
  3549. rhash = tls12_find_id(*psig_nids++, tls12_md, OSSL_NELEM(tls12_md));
  3550. rsign = tls12_find_id(*psig_nids++, tls12_sig, OSSL_NELEM(tls12_sig));
  3551. if (rhash == -1 || rsign == -1)
  3552. goto err;
  3553. *sptr++ = rhash;
  3554. *sptr++ = rsign;
  3555. }
  3556. if (client) {
  3557. OPENSSL_free(c->client_sigalgs);
  3558. c->client_sigalgs = sigalgs;
  3559. c->client_sigalgslen = salglen;
  3560. } else {
  3561. OPENSSL_free(c->conf_sigalgs);
  3562. c->conf_sigalgs = sigalgs;
  3563. c->conf_sigalgslen = salglen;
  3564. }
  3565. return 1;
  3566. err:
  3567. OPENSSL_free(sigalgs);
  3568. return 0;
  3569. }
  3570. static int tls1_check_sig_alg(CERT *c, X509 *x, int default_nid)
  3571. {
  3572. int sig_nid;
  3573. size_t i;
  3574. if (default_nid == -1)
  3575. return 1;
  3576. sig_nid = X509_get_signature_nid(x);
  3577. if (default_nid)
  3578. return sig_nid == default_nid ? 1 : 0;
  3579. for (i = 0; i < c->shared_sigalgslen; i++)
  3580. if (sig_nid == c->shared_sigalgs[i].signandhash_nid)
  3581. return 1;
  3582. return 0;
  3583. }
  3584. /* Check to see if a certificate issuer name matches list of CA names */
  3585. static int ssl_check_ca_name(STACK_OF(X509_NAME) *names, X509 *x)
  3586. {
  3587. X509_NAME *nm;
  3588. int i;
  3589. nm = X509_get_issuer_name(x);
  3590. for (i = 0; i < sk_X509_NAME_num(names); i++) {
  3591. if (!X509_NAME_cmp(nm, sk_X509_NAME_value(names, i)))
  3592. return 1;
  3593. }
  3594. return 0;
  3595. }
  3596. /*
  3597. * Check certificate chain is consistent with TLS extensions and is usable by
  3598. * server. This servers two purposes: it allows users to check chains before
  3599. * passing them to the server and it allows the server to check chains before
  3600. * attempting to use them.
  3601. */
  3602. /* Flags which need to be set for a certificate when stict mode not set */
  3603. #define CERT_PKEY_VALID_FLAGS \
  3604. (CERT_PKEY_EE_SIGNATURE|CERT_PKEY_EE_PARAM)
  3605. /* Strict mode flags */
  3606. #define CERT_PKEY_STRICT_FLAGS \
  3607. (CERT_PKEY_VALID_FLAGS|CERT_PKEY_CA_SIGNATURE|CERT_PKEY_CA_PARAM \
  3608. | CERT_PKEY_ISSUER_NAME|CERT_PKEY_CERT_TYPE)
  3609. int tls1_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain,
  3610. int idx)
  3611. {
  3612. int i;
  3613. int rv = 0;
  3614. int check_flags = 0, strict_mode;
  3615. CERT_PKEY *cpk = NULL;
  3616. CERT *c = s->cert;
  3617. uint32_t *pvalid;
  3618. unsigned int suiteb_flags = tls1_suiteb(s);
  3619. /* idx == -1 means checking server chains */
  3620. if (idx != -1) {
  3621. /* idx == -2 means checking client certificate chains */
  3622. if (idx == -2) {
  3623. cpk = c->key;
  3624. idx = cpk - c->pkeys;
  3625. } else
  3626. cpk = c->pkeys + idx;
  3627. pvalid = s->s3->tmp.valid_flags + idx;
  3628. x = cpk->x509;
  3629. pk = cpk->privatekey;
  3630. chain = cpk->chain;
  3631. strict_mode = c->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT;
  3632. /* If no cert or key, forget it */
  3633. if (!x || !pk)
  3634. goto end;
  3635. #ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
  3636. /* Allow any certificate to pass test */
  3637. if (s->cert->cert_flags & SSL_CERT_FLAG_BROKEN_PROTOCOL) {
  3638. rv = CERT_PKEY_STRICT_FLAGS | CERT_PKEY_EXPLICIT_SIGN |
  3639. CERT_PKEY_VALID | CERT_PKEY_SIGN;
  3640. *pvalid = rv;
  3641. return rv;
  3642. }
  3643. #endif
  3644. } else {
  3645. if (!x || !pk)
  3646. return 0;
  3647. idx = ssl_cert_type(x, pk);
  3648. if (idx == -1)
  3649. return 0;
  3650. pvalid = s->s3->tmp.valid_flags + idx;
  3651. if (c->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT)
  3652. check_flags = CERT_PKEY_STRICT_FLAGS;
  3653. else
  3654. check_flags = CERT_PKEY_VALID_FLAGS;
  3655. strict_mode = 1;
  3656. }
  3657. if (suiteb_flags) {
  3658. int ok;
  3659. if (check_flags)
  3660. check_flags |= CERT_PKEY_SUITEB;
  3661. ok = X509_chain_check_suiteb(NULL, x, chain, suiteb_flags);
  3662. if (ok == X509_V_OK)
  3663. rv |= CERT_PKEY_SUITEB;
  3664. else if (!check_flags)
  3665. goto end;
  3666. }
  3667. /*
  3668. * Check all signature algorithms are consistent with signature
  3669. * algorithms extension if TLS 1.2 or later and strict mode.
  3670. */
  3671. if (TLS1_get_version(s) >= TLS1_2_VERSION && strict_mode) {
  3672. int default_nid;
  3673. unsigned char rsign = 0;
  3674. if (s->s3->tmp.peer_sigalgs)
  3675. default_nid = 0;
  3676. /* If no sigalgs extension use defaults from RFC5246 */
  3677. else {
  3678. switch (idx) {
  3679. case SSL_PKEY_RSA_ENC:
  3680. case SSL_PKEY_RSA_SIGN:
  3681. rsign = TLSEXT_signature_rsa;
  3682. default_nid = NID_sha1WithRSAEncryption;
  3683. break;
  3684. case SSL_PKEY_DSA_SIGN:
  3685. rsign = TLSEXT_signature_dsa;
  3686. default_nid = NID_dsaWithSHA1;
  3687. break;
  3688. case SSL_PKEY_ECC:
  3689. rsign = TLSEXT_signature_ecdsa;
  3690. default_nid = NID_ecdsa_with_SHA1;
  3691. break;
  3692. case SSL_PKEY_GOST01:
  3693. rsign = TLSEXT_signature_gostr34102001;
  3694. default_nid = NID_id_GostR3411_94_with_GostR3410_2001;
  3695. break;
  3696. case SSL_PKEY_GOST12_256:
  3697. rsign = TLSEXT_signature_gostr34102012_256;
  3698. default_nid = NID_id_tc26_signwithdigest_gost3410_2012_256;
  3699. break;
  3700. case SSL_PKEY_GOST12_512:
  3701. rsign = TLSEXT_signature_gostr34102012_512;
  3702. default_nid = NID_id_tc26_signwithdigest_gost3410_2012_512;
  3703. break;
  3704. default:
  3705. default_nid = -1;
  3706. break;
  3707. }
  3708. }
  3709. /*
  3710. * If peer sent no signature algorithms extension and we have set
  3711. * preferred signature algorithms check we support sha1.
  3712. */
  3713. if (default_nid > 0 && c->conf_sigalgs) {
  3714. size_t j;
  3715. const unsigned char *p = c->conf_sigalgs;
  3716. for (j = 0; j < c->conf_sigalgslen; j += 2, p += 2) {
  3717. if (p[0] == TLSEXT_hash_sha1 && p[1] == rsign)
  3718. break;
  3719. }
  3720. if (j == c->conf_sigalgslen) {
  3721. if (check_flags)
  3722. goto skip_sigs;
  3723. else
  3724. goto end;
  3725. }
  3726. }
  3727. /* Check signature algorithm of each cert in chain */
  3728. if (!tls1_check_sig_alg(c, x, default_nid)) {
  3729. if (!check_flags)
  3730. goto end;
  3731. } else
  3732. rv |= CERT_PKEY_EE_SIGNATURE;
  3733. rv |= CERT_PKEY_CA_SIGNATURE;
  3734. for (i = 0; i < sk_X509_num(chain); i++) {
  3735. if (!tls1_check_sig_alg(c, sk_X509_value(chain, i), default_nid)) {
  3736. if (check_flags) {
  3737. rv &= ~CERT_PKEY_CA_SIGNATURE;
  3738. break;
  3739. } else
  3740. goto end;
  3741. }
  3742. }
  3743. }
  3744. /* Else not TLS 1.2, so mark EE and CA signing algorithms OK */
  3745. else if (check_flags)
  3746. rv |= CERT_PKEY_EE_SIGNATURE | CERT_PKEY_CA_SIGNATURE;
  3747. skip_sigs:
  3748. /* Check cert parameters are consistent */
  3749. if (tls1_check_cert_param(s, x, check_flags ? 1 : 2))
  3750. rv |= CERT_PKEY_EE_PARAM;
  3751. else if (!check_flags)
  3752. goto end;
  3753. if (!s->server)
  3754. rv |= CERT_PKEY_CA_PARAM;
  3755. /* In strict mode check rest of chain too */
  3756. else if (strict_mode) {
  3757. rv |= CERT_PKEY_CA_PARAM;
  3758. for (i = 0; i < sk_X509_num(chain); i++) {
  3759. X509 *ca = sk_X509_value(chain, i);
  3760. if (!tls1_check_cert_param(s, ca, 0)) {
  3761. if (check_flags) {
  3762. rv &= ~CERT_PKEY_CA_PARAM;
  3763. break;
  3764. } else
  3765. goto end;
  3766. }
  3767. }
  3768. }
  3769. if (!s->server && strict_mode) {
  3770. STACK_OF(X509_NAME) *ca_dn;
  3771. int check_type = 0;
  3772. switch (EVP_PKEY_id(pk)) {
  3773. case EVP_PKEY_RSA:
  3774. check_type = TLS_CT_RSA_SIGN;
  3775. break;
  3776. case EVP_PKEY_DSA:
  3777. check_type = TLS_CT_DSS_SIGN;
  3778. break;
  3779. case EVP_PKEY_EC:
  3780. check_type = TLS_CT_ECDSA_SIGN;
  3781. break;
  3782. }
  3783. if (check_type) {
  3784. const unsigned char *ctypes;
  3785. int ctypelen;
  3786. if (c->ctypes) {
  3787. ctypes = c->ctypes;
  3788. ctypelen = (int)c->ctype_num;
  3789. } else {
  3790. ctypes = (unsigned char *)s->s3->tmp.ctype;
  3791. ctypelen = s->s3->tmp.ctype_num;
  3792. }
  3793. for (i = 0; i < ctypelen; i++) {
  3794. if (ctypes[i] == check_type) {
  3795. rv |= CERT_PKEY_CERT_TYPE;
  3796. break;
  3797. }
  3798. }
  3799. if (!(rv & CERT_PKEY_CERT_TYPE) && !check_flags)
  3800. goto end;
  3801. } else
  3802. rv |= CERT_PKEY_CERT_TYPE;
  3803. ca_dn = s->s3->tmp.ca_names;
  3804. if (!sk_X509_NAME_num(ca_dn))
  3805. rv |= CERT_PKEY_ISSUER_NAME;
  3806. if (!(rv & CERT_PKEY_ISSUER_NAME)) {
  3807. if (ssl_check_ca_name(ca_dn, x))
  3808. rv |= CERT_PKEY_ISSUER_NAME;
  3809. }
  3810. if (!(rv & CERT_PKEY_ISSUER_NAME)) {
  3811. for (i = 0; i < sk_X509_num(chain); i++) {
  3812. X509 *xtmp = sk_X509_value(chain, i);
  3813. if (ssl_check_ca_name(ca_dn, xtmp)) {
  3814. rv |= CERT_PKEY_ISSUER_NAME;
  3815. break;
  3816. }
  3817. }
  3818. }
  3819. if (!check_flags && !(rv & CERT_PKEY_ISSUER_NAME))
  3820. goto end;
  3821. } else
  3822. rv |= CERT_PKEY_ISSUER_NAME | CERT_PKEY_CERT_TYPE;
  3823. if (!check_flags || (rv & check_flags) == check_flags)
  3824. rv |= CERT_PKEY_VALID;
  3825. end:
  3826. if (TLS1_get_version(s) >= TLS1_2_VERSION) {
  3827. if (*pvalid & CERT_PKEY_EXPLICIT_SIGN)
  3828. rv |= CERT_PKEY_EXPLICIT_SIGN | CERT_PKEY_SIGN;
  3829. else if (s->s3->tmp.md[idx] != NULL)
  3830. rv |= CERT_PKEY_SIGN;
  3831. } else
  3832. rv |= CERT_PKEY_SIGN | CERT_PKEY_EXPLICIT_SIGN;
  3833. /*
  3834. * When checking a CERT_PKEY structure all flags are irrelevant if the
  3835. * chain is invalid.
  3836. */
  3837. if (!check_flags) {
  3838. if (rv & CERT_PKEY_VALID)
  3839. *pvalid = rv;
  3840. else {
  3841. /* Preserve explicit sign flag, clear rest */
  3842. *pvalid &= CERT_PKEY_EXPLICIT_SIGN;
  3843. return 0;
  3844. }
  3845. }
  3846. return rv;
  3847. }
  3848. /* Set validity of certificates in an SSL structure */
  3849. void tls1_set_cert_validity(SSL *s)
  3850. {
  3851. tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_RSA_ENC);
  3852. tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_RSA_SIGN);
  3853. tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_DSA_SIGN);
  3854. tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_ECC);
  3855. tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_GOST01);
  3856. tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_GOST12_256);
  3857. tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_GOST12_512);
  3858. }
  3859. /* User level utiity function to check a chain is suitable */
  3860. int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain)
  3861. {
  3862. return tls1_check_chain(s, x, pk, chain, -1);
  3863. }
  3864. #ifndef OPENSSL_NO_DH
  3865. DH *ssl_get_auto_dh(SSL *s)
  3866. {
  3867. int dh_secbits = 80;
  3868. if (s->cert->dh_tmp_auto == 2)
  3869. return DH_get_1024_160();
  3870. if (s->s3->tmp.new_cipher->algorithm_auth & (SSL_aNULL | SSL_aPSK)) {
  3871. if (s->s3->tmp.new_cipher->strength_bits == 256)
  3872. dh_secbits = 128;
  3873. else
  3874. dh_secbits = 80;
  3875. } else {
  3876. CERT_PKEY *cpk = ssl_get_server_send_pkey(s);
  3877. dh_secbits = EVP_PKEY_security_bits(cpk->privatekey);
  3878. }
  3879. if (dh_secbits >= 128) {
  3880. DH *dhp = DH_new();
  3881. if (dhp == NULL)
  3882. return NULL;
  3883. dhp->g = BN_new();
  3884. if (dhp->g != NULL)
  3885. BN_set_word(dhp->g, 2);
  3886. if (dh_secbits >= 192)
  3887. dhp->p = get_rfc3526_prime_8192(NULL);
  3888. else
  3889. dhp->p = get_rfc3526_prime_3072(NULL);
  3890. if (dhp->p == NULL || dhp->g == NULL) {
  3891. DH_free(dhp);
  3892. return NULL;
  3893. }
  3894. return dhp;
  3895. }
  3896. if (dh_secbits >= 112)
  3897. return DH_get_2048_224();
  3898. return DH_get_1024_160();
  3899. }
  3900. #endif
  3901. static int ssl_security_cert_key(SSL *s, SSL_CTX *ctx, X509 *x, int op)
  3902. {
  3903. int secbits = -1;
  3904. EVP_PKEY *pkey = X509_get0_pubkey(x);
  3905. if (pkey) {
  3906. /*
  3907. * If no parameters this will return -1 and fail using the default
  3908. * security callback for any non-zero security level. This will
  3909. * reject keys which omit parameters but this only affects DSA and
  3910. * omission of parameters is never (?) done in practice.
  3911. */
  3912. secbits = EVP_PKEY_security_bits(pkey);
  3913. }
  3914. if (s)
  3915. return ssl_security(s, op, secbits, 0, x);
  3916. else
  3917. return ssl_ctx_security(ctx, op, secbits, 0, x);
  3918. }
  3919. static int ssl_security_cert_sig(SSL *s, SSL_CTX *ctx, X509 *x, int op)
  3920. {
  3921. /* Lookup signature algorithm digest */
  3922. int secbits = -1, md_nid = NID_undef, sig_nid;
  3923. sig_nid = X509_get_signature_nid(x);
  3924. if (sig_nid && OBJ_find_sigid_algs(sig_nid, &md_nid, NULL)) {
  3925. const EVP_MD *md;
  3926. if (md_nid && (md = EVP_get_digestbynid(md_nid)))
  3927. secbits = EVP_MD_size(md) * 4;
  3928. }
  3929. if (s)
  3930. return ssl_security(s, op, secbits, md_nid, x);
  3931. else
  3932. return ssl_ctx_security(ctx, op, secbits, md_nid, x);
  3933. }
  3934. int ssl_security_cert(SSL *s, SSL_CTX *ctx, X509 *x, int vfy, int is_ee)
  3935. {
  3936. if (vfy)
  3937. vfy = SSL_SECOP_PEER;
  3938. if (is_ee) {
  3939. if (!ssl_security_cert_key(s, ctx, x, SSL_SECOP_EE_KEY | vfy))
  3940. return SSL_R_EE_KEY_TOO_SMALL;
  3941. } else {
  3942. if (!ssl_security_cert_key(s, ctx, x, SSL_SECOP_CA_KEY | vfy))
  3943. return SSL_R_CA_KEY_TOO_SMALL;
  3944. }
  3945. if (!ssl_security_cert_sig(s, ctx, x, SSL_SECOP_CA_MD | vfy))
  3946. return SSL_R_CA_MD_TOO_WEAK;
  3947. return 1;
  3948. }
  3949. /*
  3950. * Check security of a chain, if sk includes the end entity certificate then
  3951. * x is NULL. If vfy is 1 then we are verifying a peer chain and not sending
  3952. * one to the peer. Return values: 1 if ok otherwise error code to use
  3953. */
  3954. int ssl_security_cert_chain(SSL *s, STACK_OF(X509) *sk, X509 *x, int vfy)
  3955. {
  3956. int rv, start_idx, i;
  3957. if (x == NULL) {
  3958. x = sk_X509_value(sk, 0);
  3959. start_idx = 1;
  3960. } else
  3961. start_idx = 0;
  3962. rv = ssl_security_cert(s, NULL, x, vfy, 1);
  3963. if (rv != 1)
  3964. return rv;
  3965. for (i = start_idx; i < sk_X509_num(sk); i++) {
  3966. x = sk_X509_value(sk, i);
  3967. rv = ssl_security_cert(s, NULL, x, vfy, 0);
  3968. if (rv != 1)
  3969. return rv;
  3970. }
  3971. return 1;
  3972. }