s3_lib.c 49 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284
  1. /* ssl/s3_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-2002 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. /* ====================================================================
  112. * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
  113. *
  114. * Portions of the attached software ("Contribution") are developed by
  115. * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
  116. *
  117. * The Contribution is licensed pursuant to the OpenSSL open source
  118. * license provided above.
  119. *
  120. * ECC cipher suite support in OpenSSL originally written by
  121. * Vipul Gupta and Sumit Gupta of Sun Microsystems Laboratories.
  122. *
  123. */
  124. #include <stdio.h>
  125. #include <openssl/objects.h>
  126. #include "ssl_locl.h"
  127. #include "kssl_lcl.h"
  128. #include <openssl/md5.h>
  129. #include <openssl/dh.h>
  130. const char *ssl3_version_str="SSLv3" OPENSSL_VERSION_PTEXT;
  131. #define SSL3_NUM_CIPHERS (sizeof(ssl3_ciphers)/sizeof(SSL_CIPHER))
  132. static long ssl3_default_timeout(void );
  133. OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]={
  134. /* The RSA ciphers */
  135. /* Cipher 01 */
  136. {
  137. 1,
  138. SSL3_TXT_RSA_NULL_MD5,
  139. SSL3_CK_RSA_NULL_MD5,
  140. SSL_kRSA|SSL_aRSA|SSL_eNULL |SSL_MD5|SSL_SSLV3,
  141. SSL_NOT_EXP|SSL_STRONG_NONE,
  142. 0,
  143. 0,
  144. 0,
  145. SSL_ALL_CIPHERS,
  146. SSL_ALL_STRENGTHS,
  147. },
  148. /* Cipher 02 */
  149. {
  150. 1,
  151. SSL3_TXT_RSA_NULL_SHA,
  152. SSL3_CK_RSA_NULL_SHA,
  153. SSL_kRSA|SSL_aRSA|SSL_eNULL |SSL_SHA1|SSL_SSLV3,
  154. SSL_NOT_EXP|SSL_STRONG_NONE,
  155. 0,
  156. 0,
  157. 0,
  158. SSL_ALL_CIPHERS,
  159. SSL_ALL_STRENGTHS,
  160. },
  161. /* anon DH */
  162. /* Cipher 17 */
  163. {
  164. 1,
  165. SSL3_TXT_ADH_RC4_40_MD5,
  166. SSL3_CK_ADH_RC4_40_MD5,
  167. SSL_kEDH |SSL_aNULL|SSL_RC4 |SSL_MD5 |SSL_SSLV3,
  168. SSL_EXPORT|SSL_EXP40,
  169. 0,
  170. 40,
  171. 128,
  172. SSL_ALL_CIPHERS,
  173. SSL_ALL_STRENGTHS,
  174. },
  175. /* Cipher 18 */
  176. {
  177. 1,
  178. SSL3_TXT_ADH_RC4_128_MD5,
  179. SSL3_CK_ADH_RC4_128_MD5,
  180. SSL_kEDH |SSL_aNULL|SSL_RC4 |SSL_MD5 |SSL_SSLV3,
  181. SSL_NOT_EXP|SSL_MEDIUM,
  182. 0,
  183. 128,
  184. 128,
  185. SSL_ALL_CIPHERS,
  186. SSL_ALL_STRENGTHS,
  187. },
  188. /* Cipher 19 */
  189. {
  190. 1,
  191. SSL3_TXT_ADH_DES_40_CBC_SHA,
  192. SSL3_CK_ADH_DES_40_CBC_SHA,
  193. SSL_kEDH |SSL_aNULL|SSL_DES|SSL_SHA1|SSL_SSLV3,
  194. SSL_EXPORT|SSL_EXP40,
  195. 0,
  196. 40,
  197. 128,
  198. SSL_ALL_CIPHERS,
  199. SSL_ALL_STRENGTHS,
  200. },
  201. /* Cipher 1A */
  202. {
  203. 1,
  204. SSL3_TXT_ADH_DES_64_CBC_SHA,
  205. SSL3_CK_ADH_DES_64_CBC_SHA,
  206. SSL_kEDH |SSL_aNULL|SSL_DES |SSL_SHA1|SSL_SSLV3,
  207. SSL_NOT_EXP|SSL_LOW,
  208. 0,
  209. 56,
  210. 56,
  211. SSL_ALL_CIPHERS,
  212. SSL_ALL_STRENGTHS,
  213. },
  214. /* Cipher 1B */
  215. {
  216. 1,
  217. SSL3_TXT_ADH_DES_192_CBC_SHA,
  218. SSL3_CK_ADH_DES_192_CBC_SHA,
  219. SSL_kEDH |SSL_aNULL|SSL_3DES |SSL_SHA1|SSL_SSLV3,
  220. SSL_NOT_EXP|SSL_HIGH,
  221. 0,
  222. 168,
  223. 168,
  224. SSL_ALL_CIPHERS,
  225. SSL_ALL_STRENGTHS,
  226. },
  227. /* RSA again */
  228. /* Cipher 03 */
  229. {
  230. 1,
  231. SSL3_TXT_RSA_RC4_40_MD5,
  232. SSL3_CK_RSA_RC4_40_MD5,
  233. SSL_kRSA|SSL_aRSA|SSL_RC4 |SSL_MD5 |SSL_SSLV3,
  234. SSL_EXPORT|SSL_EXP40,
  235. 0,
  236. 40,
  237. 128,
  238. SSL_ALL_CIPHERS,
  239. SSL_ALL_STRENGTHS,
  240. },
  241. /* Cipher 04 */
  242. {
  243. 1,
  244. SSL3_TXT_RSA_RC4_128_MD5,
  245. SSL3_CK_RSA_RC4_128_MD5,
  246. SSL_kRSA|SSL_aRSA|SSL_RC4 |SSL_MD5|SSL_SSLV3,
  247. SSL_NOT_EXP|SSL_MEDIUM,
  248. 0,
  249. 128,
  250. 128,
  251. SSL_ALL_CIPHERS,
  252. SSL_ALL_STRENGTHS,
  253. },
  254. /* Cipher 05 */
  255. {
  256. 1,
  257. SSL3_TXT_RSA_RC4_128_SHA,
  258. SSL3_CK_RSA_RC4_128_SHA,
  259. SSL_kRSA|SSL_aRSA|SSL_RC4 |SSL_SHA1|SSL_SSLV3,
  260. SSL_NOT_EXP|SSL_MEDIUM,
  261. 0,
  262. 128,
  263. 128,
  264. SSL_ALL_CIPHERS,
  265. SSL_ALL_STRENGTHS,
  266. },
  267. /* Cipher 06 */
  268. {
  269. 1,
  270. SSL3_TXT_RSA_RC2_40_MD5,
  271. SSL3_CK_RSA_RC2_40_MD5,
  272. SSL_kRSA|SSL_aRSA|SSL_RC2 |SSL_MD5 |SSL_SSLV3,
  273. SSL_EXPORT|SSL_EXP40,
  274. 0,
  275. 40,
  276. 128,
  277. SSL_ALL_CIPHERS,
  278. SSL_ALL_STRENGTHS,
  279. },
  280. /* Cipher 07 */
  281. #ifndef OPENSSL_NO_IDEA
  282. {
  283. 1,
  284. SSL3_TXT_RSA_IDEA_128_SHA,
  285. SSL3_CK_RSA_IDEA_128_SHA,
  286. SSL_kRSA|SSL_aRSA|SSL_IDEA |SSL_SHA1|SSL_SSLV3,
  287. SSL_NOT_EXP|SSL_MEDIUM,
  288. 0,
  289. 128,
  290. 128,
  291. SSL_ALL_CIPHERS,
  292. SSL_ALL_STRENGTHS,
  293. },
  294. #endif
  295. /* Cipher 08 */
  296. {
  297. 1,
  298. SSL3_TXT_RSA_DES_40_CBC_SHA,
  299. SSL3_CK_RSA_DES_40_CBC_SHA,
  300. SSL_kRSA|SSL_aRSA|SSL_DES|SSL_SHA1|SSL_SSLV3,
  301. SSL_EXPORT|SSL_EXP40,
  302. 0,
  303. 40,
  304. 56,
  305. SSL_ALL_CIPHERS,
  306. SSL_ALL_STRENGTHS,
  307. },
  308. /* Cipher 09 */
  309. {
  310. 1,
  311. SSL3_TXT_RSA_DES_64_CBC_SHA,
  312. SSL3_CK_RSA_DES_64_CBC_SHA,
  313. SSL_kRSA|SSL_aRSA|SSL_DES |SSL_SHA1|SSL_SSLV3,
  314. SSL_NOT_EXP|SSL_LOW,
  315. 0,
  316. 56,
  317. 56,
  318. SSL_ALL_CIPHERS,
  319. SSL_ALL_STRENGTHS,
  320. },
  321. /* Cipher 0A */
  322. {
  323. 1,
  324. SSL3_TXT_RSA_DES_192_CBC3_SHA,
  325. SSL3_CK_RSA_DES_192_CBC3_SHA,
  326. SSL_kRSA|SSL_aRSA|SSL_3DES |SSL_SHA1|SSL_SSLV3,
  327. SSL_NOT_EXP|SSL_HIGH,
  328. 0,
  329. 168,
  330. 168,
  331. SSL_ALL_CIPHERS,
  332. SSL_ALL_STRENGTHS,
  333. },
  334. /* The DH ciphers */
  335. /* Cipher 0B */
  336. {
  337. 0,
  338. SSL3_TXT_DH_DSS_DES_40_CBC_SHA,
  339. SSL3_CK_DH_DSS_DES_40_CBC_SHA,
  340. SSL_kDHd |SSL_aDH|SSL_DES|SSL_SHA1|SSL_SSLV3,
  341. SSL_EXPORT|SSL_EXP40,
  342. 0,
  343. 40,
  344. 56,
  345. SSL_ALL_CIPHERS,
  346. SSL_ALL_STRENGTHS,
  347. },
  348. /* Cipher 0C */
  349. {
  350. 0,
  351. SSL3_TXT_DH_DSS_DES_64_CBC_SHA,
  352. SSL3_CK_DH_DSS_DES_64_CBC_SHA,
  353. SSL_kDHd |SSL_aDH|SSL_DES |SSL_SHA1|SSL_SSLV3,
  354. SSL_NOT_EXP|SSL_LOW,
  355. 0,
  356. 56,
  357. 56,
  358. SSL_ALL_CIPHERS,
  359. SSL_ALL_STRENGTHS,
  360. },
  361. /* Cipher 0D */
  362. {
  363. 0,
  364. SSL3_TXT_DH_DSS_DES_192_CBC3_SHA,
  365. SSL3_CK_DH_DSS_DES_192_CBC3_SHA,
  366. SSL_kDHd |SSL_aDH|SSL_3DES |SSL_SHA1|SSL_SSLV3,
  367. SSL_NOT_EXP|SSL_HIGH,
  368. 0,
  369. 168,
  370. 168,
  371. SSL_ALL_CIPHERS,
  372. SSL_ALL_STRENGTHS,
  373. },
  374. /* Cipher 0E */
  375. {
  376. 0,
  377. SSL3_TXT_DH_RSA_DES_40_CBC_SHA,
  378. SSL3_CK_DH_RSA_DES_40_CBC_SHA,
  379. SSL_kDHr |SSL_aDH|SSL_DES|SSL_SHA1|SSL_SSLV3,
  380. SSL_EXPORT|SSL_EXP40,
  381. 0,
  382. 40,
  383. 56,
  384. SSL_ALL_CIPHERS,
  385. SSL_ALL_STRENGTHS,
  386. },
  387. /* Cipher 0F */
  388. {
  389. 0,
  390. SSL3_TXT_DH_RSA_DES_64_CBC_SHA,
  391. SSL3_CK_DH_RSA_DES_64_CBC_SHA,
  392. SSL_kDHr |SSL_aDH|SSL_DES |SSL_SHA1|SSL_SSLV3,
  393. SSL_NOT_EXP|SSL_LOW,
  394. 0,
  395. 56,
  396. 56,
  397. SSL_ALL_CIPHERS,
  398. SSL_ALL_STRENGTHS,
  399. },
  400. /* Cipher 10 */
  401. {
  402. 0,
  403. SSL3_TXT_DH_RSA_DES_192_CBC3_SHA,
  404. SSL3_CK_DH_RSA_DES_192_CBC3_SHA,
  405. SSL_kDHr |SSL_aDH|SSL_3DES |SSL_SHA1|SSL_SSLV3,
  406. SSL_NOT_EXP|SSL_HIGH,
  407. 0,
  408. 168,
  409. 168,
  410. SSL_ALL_CIPHERS,
  411. SSL_ALL_STRENGTHS,
  412. },
  413. /* The Ephemeral DH ciphers */
  414. /* Cipher 11 */
  415. {
  416. 1,
  417. SSL3_TXT_EDH_DSS_DES_40_CBC_SHA,
  418. SSL3_CK_EDH_DSS_DES_40_CBC_SHA,
  419. SSL_kEDH|SSL_aDSS|SSL_DES|SSL_SHA1|SSL_SSLV3,
  420. SSL_EXPORT|SSL_EXP40,
  421. 0,
  422. 40,
  423. 56,
  424. SSL_ALL_CIPHERS,
  425. SSL_ALL_STRENGTHS,
  426. },
  427. /* Cipher 12 */
  428. {
  429. 1,
  430. SSL3_TXT_EDH_DSS_DES_64_CBC_SHA,
  431. SSL3_CK_EDH_DSS_DES_64_CBC_SHA,
  432. SSL_kEDH|SSL_aDSS|SSL_DES |SSL_SHA1|SSL_SSLV3,
  433. SSL_NOT_EXP|SSL_LOW,
  434. 0,
  435. 56,
  436. 56,
  437. SSL_ALL_CIPHERS,
  438. SSL_ALL_STRENGTHS,
  439. },
  440. /* Cipher 13 */
  441. {
  442. 1,
  443. SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA,
  444. SSL3_CK_EDH_DSS_DES_192_CBC3_SHA,
  445. SSL_kEDH|SSL_aDSS|SSL_3DES |SSL_SHA1|SSL_SSLV3,
  446. SSL_NOT_EXP|SSL_HIGH,
  447. 0,
  448. 168,
  449. 168,
  450. SSL_ALL_CIPHERS,
  451. SSL_ALL_STRENGTHS,
  452. },
  453. /* Cipher 14 */
  454. {
  455. 1,
  456. SSL3_TXT_EDH_RSA_DES_40_CBC_SHA,
  457. SSL3_CK_EDH_RSA_DES_40_CBC_SHA,
  458. SSL_kEDH|SSL_aRSA|SSL_DES|SSL_SHA1|SSL_SSLV3,
  459. SSL_EXPORT|SSL_EXP40,
  460. 0,
  461. 40,
  462. 56,
  463. SSL_ALL_CIPHERS,
  464. SSL_ALL_STRENGTHS,
  465. },
  466. /* Cipher 15 */
  467. {
  468. 1,
  469. SSL3_TXT_EDH_RSA_DES_64_CBC_SHA,
  470. SSL3_CK_EDH_RSA_DES_64_CBC_SHA,
  471. SSL_kEDH|SSL_aRSA|SSL_DES |SSL_SHA1|SSL_SSLV3,
  472. SSL_NOT_EXP|SSL_LOW,
  473. 0,
  474. 56,
  475. 56,
  476. SSL_ALL_CIPHERS,
  477. SSL_ALL_STRENGTHS,
  478. },
  479. /* Cipher 16 */
  480. {
  481. 1,
  482. SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA,
  483. SSL3_CK_EDH_RSA_DES_192_CBC3_SHA,
  484. SSL_kEDH|SSL_aRSA|SSL_3DES |SSL_SHA1|SSL_SSLV3,
  485. SSL_NOT_EXP|SSL_HIGH,
  486. 0,
  487. 168,
  488. 168,
  489. SSL_ALL_CIPHERS,
  490. SSL_ALL_STRENGTHS,
  491. },
  492. /* Fortezza */
  493. /* Cipher 1C */
  494. {
  495. 0,
  496. SSL3_TXT_FZA_DMS_NULL_SHA,
  497. SSL3_CK_FZA_DMS_NULL_SHA,
  498. SSL_kFZA|SSL_aFZA |SSL_eNULL |SSL_SHA1|SSL_SSLV3,
  499. SSL_NOT_EXP|SSL_STRONG_NONE,
  500. 0,
  501. 0,
  502. 0,
  503. SSL_ALL_CIPHERS,
  504. SSL_ALL_STRENGTHS,
  505. },
  506. /* Cipher 1D */
  507. {
  508. 0,
  509. SSL3_TXT_FZA_DMS_FZA_SHA,
  510. SSL3_CK_FZA_DMS_FZA_SHA,
  511. SSL_kFZA|SSL_aFZA |SSL_eFZA |SSL_SHA1|SSL_SSLV3,
  512. SSL_NOT_EXP|SSL_STRONG_NONE,
  513. 0,
  514. 0,
  515. 0,
  516. SSL_ALL_CIPHERS,
  517. SSL_ALL_STRENGTHS,
  518. },
  519. #if 0
  520. /* Cipher 1E */
  521. {
  522. 0,
  523. SSL3_TXT_FZA_DMS_RC4_SHA,
  524. SSL3_CK_FZA_DMS_RC4_SHA,
  525. SSL_kFZA|SSL_aFZA |SSL_RC4 |SSL_SHA1|SSL_SSLV3,
  526. SSL_NOT_EXP|SSL_MEDIUM,
  527. 0,
  528. 128,
  529. 128,
  530. SSL_ALL_CIPHERS,
  531. SSL_ALL_STRENGTHS,
  532. },
  533. #endif
  534. #ifndef OPENSSL_NO_KRB5
  535. /* The Kerberos ciphers
  536. ** 20000107 VRS: And the first shall be last,
  537. ** in hopes of avoiding the lynx ssl renegotiation problem.
  538. */
  539. /* Cipher 1E VRS */
  540. {
  541. 1,
  542. SSL3_TXT_KRB5_DES_64_CBC_SHA,
  543. SSL3_CK_KRB5_DES_64_CBC_SHA,
  544. SSL_kKRB5|SSL_aKRB5| SSL_DES|SSL_SHA1 |SSL_SSLV3,
  545. SSL_NOT_EXP|SSL_LOW,
  546. 0,
  547. 56,
  548. 56,
  549. SSL_ALL_CIPHERS,
  550. SSL_ALL_STRENGTHS,
  551. },
  552. /* Cipher 1F VRS */
  553. {
  554. 1,
  555. SSL3_TXT_KRB5_DES_192_CBC3_SHA,
  556. SSL3_CK_KRB5_DES_192_CBC3_SHA,
  557. SSL_kKRB5|SSL_aKRB5| SSL_3DES|SSL_SHA1 |SSL_SSLV3,
  558. SSL_NOT_EXP|SSL_HIGH,
  559. 0,
  560. 112,
  561. 168,
  562. SSL_ALL_CIPHERS,
  563. SSL_ALL_STRENGTHS,
  564. },
  565. /* Cipher 20 VRS */
  566. {
  567. 1,
  568. SSL3_TXT_KRB5_RC4_128_SHA,
  569. SSL3_CK_KRB5_RC4_128_SHA,
  570. SSL_kKRB5|SSL_aKRB5| SSL_RC4|SSL_SHA1 |SSL_SSLV3,
  571. SSL_NOT_EXP|SSL_MEDIUM,
  572. 0,
  573. 128,
  574. 128,
  575. SSL_ALL_CIPHERS,
  576. SSL_ALL_STRENGTHS,
  577. },
  578. /* Cipher 21 VRS */
  579. {
  580. 1,
  581. SSL3_TXT_KRB5_IDEA_128_CBC_SHA,
  582. SSL3_CK_KRB5_IDEA_128_CBC_SHA,
  583. SSL_kKRB5|SSL_aKRB5| SSL_IDEA|SSL_SHA1 |SSL_SSLV3,
  584. SSL_NOT_EXP|SSL_MEDIUM,
  585. 0,
  586. 128,
  587. 128,
  588. SSL_ALL_CIPHERS,
  589. SSL_ALL_STRENGTHS,
  590. },
  591. /* Cipher 22 VRS */
  592. {
  593. 1,
  594. SSL3_TXT_KRB5_DES_64_CBC_MD5,
  595. SSL3_CK_KRB5_DES_64_CBC_MD5,
  596. SSL_kKRB5|SSL_aKRB5| SSL_DES|SSL_MD5 |SSL_SSLV3,
  597. SSL_NOT_EXP|SSL_LOW,
  598. 0,
  599. 56,
  600. 56,
  601. SSL_ALL_CIPHERS,
  602. SSL_ALL_STRENGTHS,
  603. },
  604. /* Cipher 23 VRS */
  605. {
  606. 1,
  607. SSL3_TXT_KRB5_DES_192_CBC3_MD5,
  608. SSL3_CK_KRB5_DES_192_CBC3_MD5,
  609. SSL_kKRB5|SSL_aKRB5| SSL_3DES|SSL_MD5 |SSL_SSLV3,
  610. SSL_NOT_EXP|SSL_HIGH,
  611. 0,
  612. 112,
  613. 168,
  614. SSL_ALL_CIPHERS,
  615. SSL_ALL_STRENGTHS,
  616. },
  617. /* Cipher 24 VRS */
  618. {
  619. 1,
  620. SSL3_TXT_KRB5_RC4_128_MD5,
  621. SSL3_CK_KRB5_RC4_128_MD5,
  622. SSL_kKRB5|SSL_aKRB5| SSL_RC4|SSL_MD5 |SSL_SSLV3,
  623. SSL_NOT_EXP|SSL_MEDIUM,
  624. 0,
  625. 128,
  626. 128,
  627. SSL_ALL_CIPHERS,
  628. SSL_ALL_STRENGTHS,
  629. },
  630. /* Cipher 25 VRS */
  631. {
  632. 1,
  633. SSL3_TXT_KRB5_IDEA_128_CBC_MD5,
  634. SSL3_CK_KRB5_IDEA_128_CBC_MD5,
  635. SSL_kKRB5|SSL_aKRB5| SSL_IDEA|SSL_MD5 |SSL_SSLV3,
  636. SSL_NOT_EXP|SSL_MEDIUM,
  637. 0,
  638. 128,
  639. 128,
  640. SSL_ALL_CIPHERS,
  641. SSL_ALL_STRENGTHS,
  642. },
  643. /* Cipher 26 VRS */
  644. {
  645. 1,
  646. SSL3_TXT_KRB5_DES_40_CBC_SHA,
  647. SSL3_CK_KRB5_DES_40_CBC_SHA,
  648. SSL_kKRB5|SSL_aKRB5| SSL_DES|SSL_SHA1 |SSL_SSLV3,
  649. SSL_EXPORT|SSL_EXP40,
  650. 0,
  651. 40,
  652. 56,
  653. SSL_ALL_CIPHERS,
  654. SSL_ALL_STRENGTHS,
  655. },
  656. /* Cipher 27 VRS */
  657. {
  658. 1,
  659. SSL3_TXT_KRB5_RC2_40_CBC_SHA,
  660. SSL3_CK_KRB5_RC2_40_CBC_SHA,
  661. SSL_kKRB5|SSL_aKRB5| SSL_RC2|SSL_SHA1 |SSL_SSLV3,
  662. SSL_EXPORT|SSL_EXP40,
  663. 0,
  664. 40,
  665. 128,
  666. SSL_ALL_CIPHERS,
  667. SSL_ALL_STRENGTHS,
  668. },
  669. /* Cipher 28 VRS */
  670. {
  671. 1,
  672. SSL3_TXT_KRB5_RC4_40_SHA,
  673. SSL3_CK_KRB5_RC4_40_SHA,
  674. SSL_kKRB5|SSL_aKRB5| SSL_RC4|SSL_SHA1 |SSL_SSLV3,
  675. SSL_EXPORT|SSL_EXP40,
  676. 0,
  677. 128,
  678. 128,
  679. SSL_ALL_CIPHERS,
  680. SSL_ALL_STRENGTHS,
  681. },
  682. /* Cipher 29 VRS */
  683. {
  684. 1,
  685. SSL3_TXT_KRB5_DES_40_CBC_MD5,
  686. SSL3_CK_KRB5_DES_40_CBC_MD5,
  687. SSL_kKRB5|SSL_aKRB5| SSL_DES|SSL_MD5 |SSL_SSLV3,
  688. SSL_EXPORT|SSL_EXP40,
  689. 0,
  690. 40,
  691. 56,
  692. SSL_ALL_CIPHERS,
  693. SSL_ALL_STRENGTHS,
  694. },
  695. /* Cipher 2A VRS */
  696. {
  697. 1,
  698. SSL3_TXT_KRB5_RC2_40_CBC_MD5,
  699. SSL3_CK_KRB5_RC2_40_CBC_MD5,
  700. SSL_kKRB5|SSL_aKRB5| SSL_RC2|SSL_MD5 |SSL_SSLV3,
  701. SSL_EXPORT|SSL_EXP40,
  702. 0,
  703. 40,
  704. 128,
  705. SSL_ALL_CIPHERS,
  706. SSL_ALL_STRENGTHS,
  707. },
  708. /* Cipher 2B VRS */
  709. {
  710. 1,
  711. SSL3_TXT_KRB5_RC4_40_MD5,
  712. SSL3_CK_KRB5_RC4_40_MD5,
  713. SSL_kKRB5|SSL_aKRB5| SSL_RC4|SSL_MD5 |SSL_SSLV3,
  714. SSL_EXPORT|SSL_EXP40,
  715. 0,
  716. 128,
  717. 128,
  718. SSL_ALL_CIPHERS,
  719. SSL_ALL_STRENGTHS,
  720. },
  721. #endif /* OPENSSL_NO_KRB5 */
  722. #if TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES
  723. /* New TLS Export CipherSuites */
  724. /* Cipher 60 */
  725. {
  726. 1,
  727. TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5,
  728. TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5,
  729. SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_MD5|SSL_TLSV1,
  730. SSL_EXPORT|SSL_EXP56,
  731. 0,
  732. 56,
  733. 128,
  734. SSL_ALL_CIPHERS,
  735. SSL_ALL_STRENGTHS,
  736. },
  737. /* Cipher 61 */
  738. {
  739. 1,
  740. TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5,
  741. TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5,
  742. SSL_kRSA|SSL_aRSA|SSL_RC2|SSL_MD5|SSL_TLSV1,
  743. SSL_EXPORT|SSL_EXP56,
  744. 0,
  745. 56,
  746. 128,
  747. SSL_ALL_CIPHERS,
  748. SSL_ALL_STRENGTHS,
  749. },
  750. /* Cipher 62 */
  751. {
  752. 1,
  753. TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA,
  754. TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA,
  755. SSL_kRSA|SSL_aRSA|SSL_DES|SSL_SHA|SSL_TLSV1,
  756. SSL_EXPORT|SSL_EXP56,
  757. 0,
  758. 56,
  759. 56,
  760. SSL_ALL_CIPHERS,
  761. SSL_ALL_STRENGTHS,
  762. },
  763. /* Cipher 63 */
  764. {
  765. 1,
  766. TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA,
  767. TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA,
  768. SSL_kEDH|SSL_aDSS|SSL_DES|SSL_SHA|SSL_TLSV1,
  769. SSL_EXPORT|SSL_EXP56,
  770. 0,
  771. 56,
  772. 56,
  773. SSL_ALL_CIPHERS,
  774. SSL_ALL_STRENGTHS,
  775. },
  776. /* Cipher 64 */
  777. {
  778. 1,
  779. TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA,
  780. TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA,
  781. SSL_kRSA|SSL_aRSA|SSL_RC4|SSL_SHA|SSL_TLSV1,
  782. SSL_EXPORT|SSL_EXP56,
  783. 0,
  784. 56,
  785. 128,
  786. SSL_ALL_CIPHERS,
  787. SSL_ALL_STRENGTHS,
  788. },
  789. /* Cipher 65 */
  790. {
  791. 1,
  792. TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA,
  793. TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA,
  794. SSL_kEDH|SSL_aDSS|SSL_RC4|SSL_SHA|SSL_TLSV1,
  795. SSL_EXPORT|SSL_EXP56,
  796. 0,
  797. 56,
  798. 128,
  799. SSL_ALL_CIPHERS,
  800. SSL_ALL_STRENGTHS,
  801. },
  802. /* Cipher 66 */
  803. {
  804. 1,
  805. TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA,
  806. TLS1_CK_DHE_DSS_WITH_RC4_128_SHA,
  807. SSL_kEDH|SSL_aDSS|SSL_RC4|SSL_SHA|SSL_TLSV1,
  808. SSL_NOT_EXP|SSL_MEDIUM,
  809. 0,
  810. 128,
  811. 128,
  812. SSL_ALL_CIPHERS,
  813. SSL_ALL_STRENGTHS
  814. },
  815. #endif
  816. /* New AES ciphersuites */
  817. /* Cipher 2F */
  818. {
  819. 1,
  820. TLS1_TXT_RSA_WITH_AES_128_SHA,
  821. TLS1_CK_RSA_WITH_AES_128_SHA,
  822. SSL_kRSA|SSL_aRSA|SSL_AES|SSL_SHA |SSL_TLSV1,
  823. SSL_NOT_EXP|SSL_MEDIUM,
  824. 0,
  825. 128,
  826. 128,
  827. SSL_ALL_CIPHERS,
  828. SSL_ALL_STRENGTHS,
  829. },
  830. /* Cipher 30 */
  831. {
  832. 0,
  833. TLS1_TXT_DH_DSS_WITH_AES_128_SHA,
  834. TLS1_CK_DH_DSS_WITH_AES_128_SHA,
  835. SSL_kDHd|SSL_aDH|SSL_AES|SSL_SHA|SSL_TLSV1,
  836. SSL_NOT_EXP|SSL_MEDIUM,
  837. 0,
  838. 128,
  839. 128,
  840. SSL_ALL_CIPHERS,
  841. SSL_ALL_STRENGTHS,
  842. },
  843. /* Cipher 31 */
  844. {
  845. 0,
  846. TLS1_TXT_DH_RSA_WITH_AES_128_SHA,
  847. TLS1_CK_DH_RSA_WITH_AES_128_SHA,
  848. SSL_kDHr|SSL_aDH|SSL_AES|SSL_SHA|SSL_TLSV1,
  849. SSL_NOT_EXP|SSL_MEDIUM,
  850. 0,
  851. 128,
  852. 128,
  853. SSL_ALL_CIPHERS,
  854. SSL_ALL_STRENGTHS,
  855. },
  856. /* Cipher 32 */
  857. {
  858. 1,
  859. TLS1_TXT_DHE_DSS_WITH_AES_128_SHA,
  860. TLS1_CK_DHE_DSS_WITH_AES_128_SHA,
  861. SSL_kEDH|SSL_aDSS|SSL_AES|SSL_SHA|SSL_TLSV1,
  862. SSL_NOT_EXP|SSL_MEDIUM,
  863. 0,
  864. 128,
  865. 128,
  866. SSL_ALL_CIPHERS,
  867. SSL_ALL_STRENGTHS,
  868. },
  869. /* Cipher 33 */
  870. {
  871. 1,
  872. TLS1_TXT_DHE_RSA_WITH_AES_128_SHA,
  873. TLS1_CK_DHE_RSA_WITH_AES_128_SHA,
  874. SSL_kEDH|SSL_aRSA|SSL_AES|SSL_SHA|SSL_TLSV1,
  875. SSL_NOT_EXP|SSL_MEDIUM,
  876. 0,
  877. 128,
  878. 128,
  879. SSL_ALL_CIPHERS,
  880. SSL_ALL_STRENGTHS,
  881. },
  882. /* Cipher 34 */
  883. {
  884. 1,
  885. TLS1_TXT_ADH_WITH_AES_128_SHA,
  886. TLS1_CK_ADH_WITH_AES_128_SHA,
  887. SSL_kEDH|SSL_aNULL|SSL_AES|SSL_SHA|SSL_TLSV1,
  888. SSL_NOT_EXP|SSL_MEDIUM,
  889. 0,
  890. 128,
  891. 128,
  892. SSL_ALL_CIPHERS,
  893. SSL_ALL_STRENGTHS,
  894. },
  895. /* Cipher 35 */
  896. {
  897. 1,
  898. TLS1_TXT_RSA_WITH_AES_256_SHA,
  899. TLS1_CK_RSA_WITH_AES_256_SHA,
  900. SSL_kRSA|SSL_aRSA|SSL_AES|SSL_SHA |SSL_TLSV1,
  901. SSL_NOT_EXP|SSL_HIGH,
  902. 0,
  903. 256,
  904. 256,
  905. SSL_ALL_CIPHERS,
  906. SSL_ALL_STRENGTHS,
  907. },
  908. /* Cipher 36 */
  909. {
  910. 0,
  911. TLS1_TXT_DH_DSS_WITH_AES_256_SHA,
  912. TLS1_CK_DH_DSS_WITH_AES_256_SHA,
  913. SSL_kDHd|SSL_aDH|SSL_AES|SSL_SHA|SSL_TLSV1,
  914. SSL_NOT_EXP|SSL_HIGH,
  915. 0,
  916. 256,
  917. 256,
  918. SSL_ALL_CIPHERS,
  919. SSL_ALL_STRENGTHS,
  920. },
  921. /* Cipher 37 */
  922. {
  923. 0,
  924. TLS1_TXT_DH_RSA_WITH_AES_256_SHA,
  925. TLS1_CK_DH_RSA_WITH_AES_256_SHA,
  926. SSL_kDHr|SSL_aDH|SSL_AES|SSL_SHA|SSL_TLSV1,
  927. SSL_NOT_EXP|SSL_HIGH,
  928. 0,
  929. 256,
  930. 256,
  931. SSL_ALL_CIPHERS,
  932. SSL_ALL_STRENGTHS,
  933. },
  934. /* Cipher 38 */
  935. {
  936. 1,
  937. TLS1_TXT_DHE_DSS_WITH_AES_256_SHA,
  938. TLS1_CK_DHE_DSS_WITH_AES_256_SHA,
  939. SSL_kEDH|SSL_aDSS|SSL_AES|SSL_SHA|SSL_TLSV1,
  940. SSL_NOT_EXP|SSL_HIGH,
  941. 0,
  942. 256,
  943. 256,
  944. SSL_ALL_CIPHERS,
  945. SSL_ALL_STRENGTHS,
  946. },
  947. /* Cipher 39 */
  948. {
  949. 1,
  950. TLS1_TXT_DHE_RSA_WITH_AES_256_SHA,
  951. TLS1_CK_DHE_RSA_WITH_AES_256_SHA,
  952. SSL_kEDH|SSL_aRSA|SSL_AES|SSL_SHA|SSL_TLSV1,
  953. SSL_NOT_EXP|SSL_HIGH,
  954. 0,
  955. 256,
  956. 256,
  957. SSL_ALL_CIPHERS,
  958. SSL_ALL_STRENGTHS,
  959. },
  960. /* Cipher 3A */
  961. {
  962. 1,
  963. TLS1_TXT_ADH_WITH_AES_256_SHA,
  964. TLS1_CK_ADH_WITH_AES_256_SHA,
  965. SSL_kEDH|SSL_aNULL|SSL_AES|SSL_SHA|SSL_TLSV1,
  966. SSL_NOT_EXP|SSL_HIGH,
  967. 0,
  968. 256,
  969. 256,
  970. SSL_ALL_CIPHERS,
  971. SSL_ALL_STRENGTHS,
  972. },
  973. #ifndef OPENSSL_NO_ECDH
  974. /* Cipher 47 */
  975. {
  976. 1,
  977. TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA,
  978. TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA,
  979. SSL_kECDH|SSL_aECDSA|SSL_eNULL|SSL_SHA|SSL_TLSV1,
  980. SSL_NOT_EXP,
  981. 0,
  982. 0,
  983. 0,
  984. SSL_ALL_CIPHERS,
  985. SSL_ALL_STRENGTHS,
  986. },
  987. /* Cipher 48 */
  988. {
  989. 1,
  990. TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA,
  991. TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA,
  992. SSL_kECDH|SSL_aECDSA|SSL_RC4|SSL_SHA|SSL_TLSV1,
  993. SSL_NOT_EXP,
  994. 0,
  995. 128,
  996. 128,
  997. SSL_ALL_CIPHERS,
  998. SSL_ALL_STRENGTHS,
  999. },
  1000. /* Cipher 49 */
  1001. {
  1002. 1,
  1003. TLS1_TXT_ECDH_ECDSA_WITH_DES_CBC_SHA,
  1004. TLS1_CK_ECDH_ECDSA_WITH_DES_CBC_SHA,
  1005. SSL_kECDH|SSL_aECDSA|SSL_DES|SSL_SHA|SSL_TLSV1,
  1006. SSL_NOT_EXP|SSL_LOW,
  1007. 0,
  1008. 56,
  1009. 56,
  1010. SSL_ALL_CIPHERS,
  1011. SSL_ALL_STRENGTHS,
  1012. },
  1013. /* Cipher 4A */
  1014. {
  1015. 1,
  1016. TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA,
  1017. TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA,
  1018. SSL_kECDH|SSL_aECDSA|SSL_3DES|SSL_SHA|SSL_TLSV1,
  1019. SSL_NOT_EXP|SSL_HIGH,
  1020. 0,
  1021. 168,
  1022. 168,
  1023. SSL_ALL_CIPHERS,
  1024. SSL_ALL_STRENGTHS,
  1025. },
  1026. /* Cipher 4B */
  1027. {
  1028. 1,
  1029. TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
  1030. TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
  1031. SSL_kECDH|SSL_aECDSA|SSL_AES|SSL_SHA|SSL_TLSV1,
  1032. SSL_NOT_EXP|SSL_MEDIUM,
  1033. 0,
  1034. 128,
  1035. 128,
  1036. SSL_ALL_CIPHERS,
  1037. SSL_ALL_STRENGTHS,
  1038. },
  1039. /* Cipher 4C */
  1040. {
  1041. 1,
  1042. TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
  1043. TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
  1044. SSL_kECDH|SSL_aECDSA|SSL_AES|SSL_SHA|SSL_TLSV1,
  1045. SSL_NOT_EXP|SSL_HIGH,
  1046. 0,
  1047. 256,
  1048. 256,
  1049. SSL_ALL_CIPHERS,
  1050. SSL_ALL_STRENGTHS,
  1051. },
  1052. /* Cipher 5B */
  1053. /* XXX NOTE: The ECC/TLS draft has a bug and reuses 4B for this */
  1054. {
  1055. 1,
  1056. TLS1_TXT_ECDH_ECDSA_EXPORT_WITH_RC4_40_SHA,
  1057. TLS1_CK_ECDH_ECDSA_EXPORT_WITH_RC4_40_SHA,
  1058. SSL_kECDH|SSL_aECDSA|SSL_RC4|SSL_SHA|SSL_TLSV1,
  1059. SSL_EXPORT|SSL_EXP40,
  1060. 0,
  1061. 40,
  1062. 128,
  1063. SSL_ALL_CIPHERS,
  1064. SSL_ALL_STRENGTHS,
  1065. },
  1066. /* Cipher 5C */
  1067. /* XXX NOTE: The ECC/TLS draft has a bug and reuses 4C for this */
  1068. {
  1069. 1,
  1070. TLS1_TXT_ECDH_ECDSA_EXPORT_WITH_RC4_56_SHA,
  1071. TLS1_CK_ECDH_ECDSA_EXPORT_WITH_RC4_56_SHA,
  1072. SSL_kECDH|SSL_aECDSA|SSL_RC4|SSL_SHA|SSL_TLSV1,
  1073. SSL_EXPORT|SSL_EXP56,
  1074. 0,
  1075. 56,
  1076. 128,
  1077. SSL_ALL_CIPHERS,
  1078. SSL_ALL_STRENGTHS,
  1079. },
  1080. /* Cipher 4D */
  1081. {
  1082. 1,
  1083. TLS1_TXT_ECDH_RSA_WITH_NULL_SHA,
  1084. TLS1_CK_ECDH_RSA_WITH_NULL_SHA,
  1085. SSL_kECDH|SSL_aRSA|SSL_eNULL|SSL_SHA|SSL_TLSV1,
  1086. SSL_NOT_EXP,
  1087. 0,
  1088. 0,
  1089. 0,
  1090. SSL_ALL_CIPHERS,
  1091. SSL_ALL_STRENGTHS,
  1092. },
  1093. /* Cipher 4E */
  1094. {
  1095. 1,
  1096. TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA,
  1097. TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA,
  1098. SSL_kECDH|SSL_aRSA|SSL_RC4|SSL_SHA|SSL_TLSV1,
  1099. SSL_NOT_EXP,
  1100. 0,
  1101. 128,
  1102. 128,
  1103. SSL_ALL_CIPHERS,
  1104. SSL_ALL_STRENGTHS,
  1105. },
  1106. /* Cipher 4F */
  1107. {
  1108. 1,
  1109. TLS1_TXT_ECDH_RSA_WITH_DES_CBC_SHA,
  1110. TLS1_CK_ECDH_RSA_WITH_DES_CBC_SHA,
  1111. SSL_kECDH|SSL_aRSA|SSL_DES|SSL_SHA|SSL_TLSV1,
  1112. SSL_NOT_EXP|SSL_LOW,
  1113. 0,
  1114. 56,
  1115. 56,
  1116. SSL_ALL_CIPHERS,
  1117. SSL_ALL_STRENGTHS,
  1118. },
  1119. /* Cipher 50 */
  1120. {
  1121. 1,
  1122. TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA,
  1123. TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA,
  1124. SSL_kECDH|SSL_aRSA|SSL_3DES|SSL_SHA|SSL_TLSV1,
  1125. SSL_NOT_EXP|SSL_HIGH,
  1126. 0,
  1127. 168,
  1128. 168,
  1129. SSL_ALL_CIPHERS,
  1130. SSL_ALL_STRENGTHS,
  1131. },
  1132. /* Cipher 51 */
  1133. {
  1134. 1,
  1135. TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA,
  1136. TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA,
  1137. SSL_kECDH|SSL_aRSA|SSL_AES|SSL_SHA|SSL_TLSV1,
  1138. SSL_NOT_EXP|SSL_MEDIUM,
  1139. 0,
  1140. 128,
  1141. 128,
  1142. SSL_ALL_CIPHERS,
  1143. SSL_ALL_STRENGTHS,
  1144. },
  1145. /* Cipher 52 */
  1146. {
  1147. 1,
  1148. TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA,
  1149. TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA,
  1150. SSL_kECDH|SSL_aRSA|SSL_AES|SSL_SHA|SSL_TLSV1,
  1151. SSL_NOT_EXP|SSL_HIGH,
  1152. 0,
  1153. 256,
  1154. 256,
  1155. SSL_ALL_CIPHERS,
  1156. SSL_ALL_STRENGTHS,
  1157. },
  1158. /* Cipher 53 */
  1159. {
  1160. 1,
  1161. TLS1_TXT_ECDH_RSA_EXPORT_WITH_RC4_40_SHA,
  1162. TLS1_CK_ECDH_RSA_EXPORT_WITH_RC4_40_SHA,
  1163. SSL_kECDH|SSL_aRSA|SSL_RC4|SSL_SHA|SSL_TLSV1,
  1164. SSL_EXPORT|SSL_EXP40,
  1165. 0,
  1166. 40,
  1167. 128,
  1168. SSL_ALL_CIPHERS,
  1169. SSL_ALL_STRENGTHS,
  1170. },
  1171. /* Cipher 54 */
  1172. {
  1173. 1,
  1174. TLS1_TXT_ECDH_RSA_EXPORT_WITH_RC4_56_SHA,
  1175. TLS1_CK_ECDH_RSA_EXPORT_WITH_RC4_56_SHA,
  1176. SSL_kECDH|SSL_aRSA|SSL_RC4|SSL_SHA|SSL_TLSV1,
  1177. SSL_EXPORT|SSL_EXP56,
  1178. 0,
  1179. 56,
  1180. 128,
  1181. SSL_ALL_CIPHERS,
  1182. SSL_ALL_STRENGTHS,
  1183. },
  1184. /* Cipher 55 */
  1185. {
  1186. 1,
  1187. TLS1_TXT_ECDH_anon_WITH_NULL_SHA,
  1188. TLS1_CK_ECDH_anon_WITH_NULL_SHA,
  1189. SSL_kECDHE|SSL_aNULL|SSL_eNULL|SSL_SHA|SSL_TLSV1,
  1190. SSL_NOT_EXP,
  1191. 0,
  1192. 0,
  1193. 0,
  1194. SSL_ALL_CIPHERS,
  1195. SSL_ALL_STRENGTHS,
  1196. },
  1197. /* Cipher 56 */
  1198. {
  1199. 1,
  1200. TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA,
  1201. TLS1_CK_ECDH_anon_WITH_RC4_128_SHA,
  1202. SSL_kECDHE|SSL_aNULL|SSL_RC4|SSL_SHA|SSL_TLSV1,
  1203. SSL_NOT_EXP,
  1204. 0,
  1205. 128,
  1206. 128,
  1207. SSL_ALL_CIPHERS,
  1208. SSL_ALL_STRENGTHS,
  1209. },
  1210. /* Cipher 57 */
  1211. {
  1212. 1,
  1213. TLS1_TXT_ECDH_anon_WITH_DES_CBC_SHA,
  1214. TLS1_CK_ECDH_anon_WITH_DES_CBC_SHA,
  1215. SSL_kECDHE|SSL_aNULL|SSL_DES|SSL_SHA|SSL_TLSV1,
  1216. SSL_NOT_EXP|SSL_LOW,
  1217. 0,
  1218. 56,
  1219. 56,
  1220. SSL_ALL_CIPHERS,
  1221. SSL_ALL_STRENGTHS,
  1222. },
  1223. /* Cipher 58 */
  1224. {
  1225. 1,
  1226. TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA,
  1227. TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA,
  1228. SSL_kECDHE|SSL_aNULL|SSL_3DES|SSL_SHA|SSL_TLSV1,
  1229. SSL_NOT_EXP|SSL_HIGH,
  1230. 0,
  1231. 168,
  1232. 168,
  1233. SSL_ALL_CIPHERS,
  1234. SSL_ALL_STRENGTHS,
  1235. },
  1236. /* Cipher 59 */
  1237. {
  1238. 1,
  1239. TLS1_TXT_ECDH_anon_EXPORT_WITH_DES_40_CBC_SHA,
  1240. TLS1_CK_ECDH_anon_EXPORT_WITH_DES_40_CBC_SHA,
  1241. SSL_kECDHE|SSL_aNULL|SSL_DES|SSL_SHA|SSL_TLSV1,
  1242. SSL_EXPORT|SSL_EXP40,
  1243. 0,
  1244. 40,
  1245. 56,
  1246. SSL_ALL_CIPHERS,
  1247. SSL_ALL_STRENGTHS,
  1248. },
  1249. /* Cipher 5A */
  1250. {
  1251. 1,
  1252. TLS1_TXT_ECDH_anon_EXPORT_WITH_RC4_40_SHA,
  1253. TLS1_CK_ECDH_anon_EXPORT_WITH_RC4_40_SHA,
  1254. SSL_kECDHE|SSL_aNULL|SSL_RC4|SSL_SHA|SSL_TLSV1,
  1255. SSL_EXPORT|SSL_EXP40,
  1256. 0,
  1257. 40,
  1258. 128,
  1259. SSL_ALL_CIPHERS,
  1260. SSL_ALL_STRENGTHS,
  1261. },
  1262. /* Cipher 77 XXX: ECC ciphersuites offering forward secrecy
  1263. * are not yet specified in the ECC/TLS draft but our code
  1264. * allows them to be implemented very easily. To add such
  1265. * a cipher suite, one needs to add two constant definitions
  1266. * to tls1.h and a new structure in this file as shown below. We
  1267. * illustrate the process for the made-up cipher
  1268. * ECDHE-ECDSA-AES128-SHA.
  1269. */
  1270. {
  1271. 1,
  1272. TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
  1273. TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
  1274. SSL_kECDHE|SSL_aECDSA|SSL_AES|SSL_SHA|SSL_TLSV1,
  1275. SSL_NOT_EXP|SSL_MEDIUM,
  1276. 0,
  1277. 128,
  1278. 128,
  1279. SSL_ALL_CIPHERS,
  1280. SSL_ALL_STRENGTHS,
  1281. },
  1282. /* Cipher 78 XXX: Another made-up ECC cipher suite that
  1283. * offers forward secrecy (ECDHE-RSA-AES128-SHA).
  1284. */
  1285. {
  1286. 1,
  1287. TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA,
  1288. TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA,
  1289. SSL_kECDHE|SSL_aRSA|SSL_AES|SSL_SHA|SSL_TLSV1,
  1290. SSL_NOT_EXP|SSL_MEDIUM,
  1291. 0,
  1292. 128,
  1293. 128,
  1294. SSL_ALL_CIPHERS,
  1295. SSL_ALL_STRENGTHS,
  1296. },
  1297. #endif /* !OPENSSL_NO_ECDH */
  1298. /* end of list */
  1299. };
  1300. static SSL3_ENC_METHOD SSLv3_enc_data={
  1301. ssl3_enc,
  1302. ssl3_mac,
  1303. ssl3_setup_key_block,
  1304. ssl3_generate_master_secret,
  1305. ssl3_change_cipher_state,
  1306. ssl3_final_finish_mac,
  1307. MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH,
  1308. ssl3_cert_verify_mac,
  1309. SSL3_MD_CLIENT_FINISHED_CONST,4,
  1310. SSL3_MD_SERVER_FINISHED_CONST,4,
  1311. ssl3_alert_code,
  1312. };
  1313. static SSL_METHOD SSLv3_data= {
  1314. SSL3_VERSION,
  1315. ssl3_new,
  1316. ssl3_clear,
  1317. ssl3_free,
  1318. ssl_undefined_function,
  1319. ssl_undefined_function,
  1320. ssl3_read,
  1321. ssl3_peek,
  1322. ssl3_write,
  1323. ssl3_shutdown,
  1324. ssl3_renegotiate,
  1325. ssl3_renegotiate_check,
  1326. ssl3_ctrl,
  1327. ssl3_ctx_ctrl,
  1328. ssl3_get_cipher_by_char,
  1329. ssl3_put_cipher_by_char,
  1330. ssl3_pending,
  1331. ssl3_num_ciphers,
  1332. ssl3_get_cipher,
  1333. ssl_bad_method,
  1334. ssl3_default_timeout,
  1335. &SSLv3_enc_data,
  1336. ssl_undefined_function,
  1337. ssl3_callback_ctrl,
  1338. ssl3_ctx_callback_ctrl,
  1339. };
  1340. static long ssl3_default_timeout(void)
  1341. {
  1342. /* 2 hours, the 24 hours mentioned in the SSLv3 spec
  1343. * is way too long for http, the cache would over fill */
  1344. return(60*60*2);
  1345. }
  1346. SSL_METHOD *sslv3_base_method(void)
  1347. {
  1348. return(&SSLv3_data);
  1349. }
  1350. int ssl3_num_ciphers(void)
  1351. {
  1352. return(SSL3_NUM_CIPHERS);
  1353. }
  1354. SSL_CIPHER *ssl3_get_cipher(unsigned int u)
  1355. {
  1356. if (u < SSL3_NUM_CIPHERS)
  1357. return(&(ssl3_ciphers[SSL3_NUM_CIPHERS-1-u]));
  1358. else
  1359. return(NULL);
  1360. }
  1361. int ssl3_pending(SSL *s)
  1362. {
  1363. if (s->rstate == SSL_ST_READ_BODY)
  1364. return 0;
  1365. return (s->s3->rrec.type == SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0;
  1366. }
  1367. int ssl3_new(SSL *s)
  1368. {
  1369. SSL3_STATE *s3;
  1370. if ((s3=OPENSSL_malloc(sizeof *s3)) == NULL) goto err;
  1371. memset(s3,0,sizeof *s3);
  1372. EVP_MD_CTX_init(&s3->finish_dgst1);
  1373. EVP_MD_CTX_init(&s3->finish_dgst2);
  1374. s->s3=s3;
  1375. s->method->ssl_clear(s);
  1376. return(1);
  1377. err:
  1378. return(0);
  1379. }
  1380. void ssl3_free(SSL *s)
  1381. {
  1382. if(s == NULL)
  1383. return;
  1384. ssl3_cleanup_key_block(s);
  1385. if (s->s3->rbuf.buf != NULL)
  1386. OPENSSL_free(s->s3->rbuf.buf);
  1387. if (s->s3->wbuf.buf != NULL)
  1388. OPENSSL_free(s->s3->wbuf.buf);
  1389. if (s->s3->rrec.comp != NULL)
  1390. OPENSSL_free(s->s3->rrec.comp);
  1391. #ifndef OPENSSL_NO_DH
  1392. if (s->s3->tmp.dh != NULL)
  1393. DH_free(s->s3->tmp.dh);
  1394. #endif
  1395. #ifndef OPENSSL_NO_ECDH
  1396. if (s->s3->tmp.ecdh != NULL)
  1397. EC_KEY_free(s->s3->tmp.ecdh);
  1398. #endif
  1399. if (s->s3->tmp.ca_names != NULL)
  1400. sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free);
  1401. EVP_MD_CTX_cleanup(&s->s3->finish_dgst1);
  1402. EVP_MD_CTX_cleanup(&s->s3->finish_dgst2);
  1403. OPENSSL_cleanse(s->s3,sizeof *s->s3);
  1404. OPENSSL_free(s->s3);
  1405. s->s3=NULL;
  1406. }
  1407. void ssl3_clear(SSL *s)
  1408. {
  1409. unsigned char *rp,*wp;
  1410. size_t rlen, wlen;
  1411. ssl3_cleanup_key_block(s);
  1412. if (s->s3->tmp.ca_names != NULL)
  1413. sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free);
  1414. if (s->s3->rrec.comp != NULL)
  1415. {
  1416. OPENSSL_free(s->s3->rrec.comp);
  1417. s->s3->rrec.comp=NULL;
  1418. }
  1419. #ifndef OPENSSL_NO_DH
  1420. if (s->s3->tmp.dh != NULL)
  1421. DH_free(s->s3->tmp.dh);
  1422. #endif
  1423. #ifndef OPENSSL_NO_ECDH
  1424. if (s->s3->tmp.ecdh != NULL)
  1425. EC_KEY_free(s->s3->tmp.ecdh);
  1426. #endif
  1427. rp = s->s3->rbuf.buf;
  1428. wp = s->s3->wbuf.buf;
  1429. rlen = s->s3->rbuf.len;
  1430. wlen = s->s3->wbuf.len;
  1431. EVP_MD_CTX_cleanup(&s->s3->finish_dgst1);
  1432. EVP_MD_CTX_cleanup(&s->s3->finish_dgst2);
  1433. memset(s->s3,0,sizeof *s->s3);
  1434. s->s3->rbuf.buf = rp;
  1435. s->s3->wbuf.buf = wp;
  1436. s->s3->rbuf.len = rlen;
  1437. s->s3->wbuf.len = wlen;
  1438. ssl_free_wbio_buffer(s);
  1439. s->packet_length=0;
  1440. s->s3->renegotiate=0;
  1441. s->s3->total_renegotiations=0;
  1442. s->s3->num_renegotiations=0;
  1443. s->s3->in_read_app_data=0;
  1444. s->version=SSL3_VERSION;
  1445. }
  1446. long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
  1447. {
  1448. int ret=0;
  1449. #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA)
  1450. if (
  1451. #ifndef OPENSSL_NO_RSA
  1452. cmd == SSL_CTRL_SET_TMP_RSA ||
  1453. cmd == SSL_CTRL_SET_TMP_RSA_CB ||
  1454. #endif
  1455. #ifndef OPENSSL_NO_DSA
  1456. cmd == SSL_CTRL_SET_TMP_DH ||
  1457. cmd == SSL_CTRL_SET_TMP_DH_CB ||
  1458. #endif
  1459. 0)
  1460. {
  1461. if (!ssl_cert_inst(&s->cert))
  1462. {
  1463. SSLerr(SSL_F_SSL3_CTRL, ERR_R_MALLOC_FAILURE);
  1464. return(0);
  1465. }
  1466. }
  1467. #endif
  1468. switch (cmd)
  1469. {
  1470. case SSL_CTRL_GET_SESSION_REUSED:
  1471. ret=s->hit;
  1472. break;
  1473. case SSL_CTRL_GET_CLIENT_CERT_REQUEST:
  1474. break;
  1475. case SSL_CTRL_GET_NUM_RENEGOTIATIONS:
  1476. ret=s->s3->num_renegotiations;
  1477. break;
  1478. case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS:
  1479. ret=s->s3->num_renegotiations;
  1480. s->s3->num_renegotiations=0;
  1481. break;
  1482. case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS:
  1483. ret=s->s3->total_renegotiations;
  1484. break;
  1485. case SSL_CTRL_GET_FLAGS:
  1486. ret=(int)(s->s3->flags);
  1487. break;
  1488. #ifndef OPENSSL_NO_RSA
  1489. case SSL_CTRL_NEED_TMP_RSA:
  1490. if ((s->cert != NULL) && (s->cert->rsa_tmp == NULL) &&
  1491. ((s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) ||
  1492. (EVP_PKEY_size(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512/8))))
  1493. ret = 1;
  1494. break;
  1495. case SSL_CTRL_SET_TMP_RSA:
  1496. {
  1497. RSA *rsa = (RSA *)parg;
  1498. if (rsa == NULL)
  1499. {
  1500. SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
  1501. return(ret);
  1502. }
  1503. if ((rsa = RSAPrivateKey_dup(rsa)) == NULL)
  1504. {
  1505. SSLerr(SSL_F_SSL3_CTRL, ERR_R_RSA_LIB);
  1506. return(ret);
  1507. }
  1508. if (s->cert->rsa_tmp != NULL)
  1509. RSA_free(s->cert->rsa_tmp);
  1510. s->cert->rsa_tmp = rsa;
  1511. ret = 1;
  1512. }
  1513. break;
  1514. case SSL_CTRL_SET_TMP_RSA_CB:
  1515. {
  1516. SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  1517. return(ret);
  1518. }
  1519. break;
  1520. #endif
  1521. #ifndef OPENSSL_NO_DH
  1522. case SSL_CTRL_SET_TMP_DH:
  1523. {
  1524. DH *dh = (DH *)parg;
  1525. if (dh == NULL)
  1526. {
  1527. SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
  1528. return(ret);
  1529. }
  1530. if ((dh = DHparams_dup(dh)) == NULL)
  1531. {
  1532. SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB);
  1533. return(ret);
  1534. }
  1535. if (!(s->options & SSL_OP_SINGLE_DH_USE))
  1536. {
  1537. if (!DH_generate_key(dh))
  1538. {
  1539. DH_free(dh);
  1540. SSLerr(SSL_F_SSL3_CTRL, ERR_R_DH_LIB);
  1541. return(ret);
  1542. }
  1543. }
  1544. if (s->cert->dh_tmp != NULL)
  1545. DH_free(s->cert->dh_tmp);
  1546. s->cert->dh_tmp = dh;
  1547. ret = 1;
  1548. }
  1549. break;
  1550. case SSL_CTRL_SET_TMP_DH_CB:
  1551. {
  1552. SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  1553. return(ret);
  1554. }
  1555. break;
  1556. #endif
  1557. #ifndef OPENSSL_NO_ECDH
  1558. case SSL_CTRL_SET_TMP_ECDH:
  1559. {
  1560. EC_KEY *ecdh = NULL;
  1561. if (parg == NULL)
  1562. {
  1563. SSLerr(SSL_F_SSL3_CTRL, ERR_R_PASSED_NULL_PARAMETER);
  1564. return(ret);
  1565. }
  1566. if (!EC_KEY_up_ref((EC_KEY *)parg))
  1567. {
  1568. SSLerr(SSL_F_SSL3_CTRL,ERR_R_ECDH_LIB);
  1569. return(ret);
  1570. }
  1571. ecdh = (EC_KEY *)parg;
  1572. if (!(s->options & SSL_OP_SINGLE_ECDH_USE))
  1573. {
  1574. if (!EC_KEY_generate_key(ecdh))
  1575. {
  1576. EC_KEY_free(ecdh);
  1577. SSLerr(SSL_F_SSL3_CTRL,ERR_R_ECDH_LIB);
  1578. return(ret);
  1579. }
  1580. }
  1581. if (s->cert->ecdh_tmp != NULL)
  1582. EC_KEY_free(s->cert->ecdh_tmp);
  1583. s->cert->ecdh_tmp = ecdh;
  1584. ret = 1;
  1585. }
  1586. break;
  1587. case SSL_CTRL_SET_TMP_ECDH_CB:
  1588. {
  1589. SSLerr(SSL_F_SSL3_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  1590. return(ret);
  1591. }
  1592. break;
  1593. #endif /* !OPENSSL_NO_ECDH */
  1594. default:
  1595. break;
  1596. }
  1597. return(ret);
  1598. }
  1599. long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)())
  1600. {
  1601. int ret=0;
  1602. #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA)
  1603. if (
  1604. #ifndef OPENSSL_NO_RSA
  1605. cmd == SSL_CTRL_SET_TMP_RSA_CB ||
  1606. #endif
  1607. #ifndef OPENSSL_NO_DSA
  1608. cmd == SSL_CTRL_SET_TMP_DH_CB ||
  1609. #endif
  1610. 0)
  1611. {
  1612. if (!ssl_cert_inst(&s->cert))
  1613. {
  1614. SSLerr(SSL_F_SSL3_CALLBACK_CTRL, ERR_R_MALLOC_FAILURE);
  1615. return(0);
  1616. }
  1617. }
  1618. #endif
  1619. switch (cmd)
  1620. {
  1621. #ifndef OPENSSL_NO_RSA
  1622. case SSL_CTRL_SET_TMP_RSA_CB:
  1623. {
  1624. s->cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp;
  1625. }
  1626. break;
  1627. #endif
  1628. #ifndef OPENSSL_NO_DH
  1629. case SSL_CTRL_SET_TMP_DH_CB:
  1630. {
  1631. s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
  1632. }
  1633. break;
  1634. #endif
  1635. #ifndef OPENSSL_NO_ECDH
  1636. case SSL_CTRL_SET_TMP_ECDH_CB:
  1637. {
  1638. s->cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
  1639. }
  1640. break;
  1641. #endif
  1642. default:
  1643. break;
  1644. }
  1645. return(ret);
  1646. }
  1647. long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
  1648. {
  1649. CERT *cert;
  1650. cert=ctx->cert;
  1651. switch (cmd)
  1652. {
  1653. #ifndef OPENSSL_NO_RSA
  1654. case SSL_CTRL_NEED_TMP_RSA:
  1655. if ( (cert->rsa_tmp == NULL) &&
  1656. ((cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) ||
  1657. (EVP_PKEY_size(cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512/8)))
  1658. )
  1659. return(1);
  1660. else
  1661. return(0);
  1662. /* break; */
  1663. case SSL_CTRL_SET_TMP_RSA:
  1664. {
  1665. RSA *rsa;
  1666. int i;
  1667. rsa=(RSA *)parg;
  1668. i=1;
  1669. if (rsa == NULL)
  1670. i=0;
  1671. else
  1672. {
  1673. if ((rsa=RSAPrivateKey_dup(rsa)) == NULL)
  1674. i=0;
  1675. }
  1676. if (!i)
  1677. {
  1678. SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_RSA_LIB);
  1679. return(0);
  1680. }
  1681. else
  1682. {
  1683. if (cert->rsa_tmp != NULL)
  1684. RSA_free(cert->rsa_tmp);
  1685. cert->rsa_tmp=rsa;
  1686. return(1);
  1687. }
  1688. }
  1689. /* break; */
  1690. case SSL_CTRL_SET_TMP_RSA_CB:
  1691. {
  1692. SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  1693. return(0);
  1694. }
  1695. break;
  1696. #endif
  1697. #ifndef OPENSSL_NO_DH
  1698. case SSL_CTRL_SET_TMP_DH:
  1699. {
  1700. DH *new=NULL,*dh;
  1701. dh=(DH *)parg;
  1702. if ((new=DHparams_dup(dh)) == NULL)
  1703. {
  1704. SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_DH_LIB);
  1705. return 0;
  1706. }
  1707. if (!(ctx->options & SSL_OP_SINGLE_DH_USE))
  1708. {
  1709. if (!DH_generate_key(new))
  1710. {
  1711. SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_DH_LIB);
  1712. DH_free(new);
  1713. return 0;
  1714. }
  1715. }
  1716. if (cert->dh_tmp != NULL)
  1717. DH_free(cert->dh_tmp);
  1718. cert->dh_tmp=new;
  1719. return 1;
  1720. }
  1721. /*break; */
  1722. case SSL_CTRL_SET_TMP_DH_CB:
  1723. {
  1724. SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  1725. return(0);
  1726. }
  1727. break;
  1728. #endif
  1729. #ifndef OPENSSL_NO_ECDH
  1730. case SSL_CTRL_SET_TMP_ECDH:
  1731. {
  1732. EC_KEY *ecdh = NULL;
  1733. if (parg == NULL)
  1734. {
  1735. SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_ECDH_LIB);
  1736. return 0;
  1737. }
  1738. if (!EC_KEY_up_ref((EC_KEY *)parg))
  1739. {
  1740. SSLerr(SSL_F_SSL3_CTRL,ERR_R_ECDH_LIB);
  1741. return 0;
  1742. }
  1743. ecdh = (EC_KEY *)parg;
  1744. if (!(ctx->options & SSL_OP_SINGLE_ECDH_USE))
  1745. {
  1746. if (!EC_KEY_generate_key(ecdh))
  1747. {
  1748. EC_KEY_free(ecdh);
  1749. SSLerr(SSL_F_SSL3_CTX_CTRL,ERR_R_ECDH_LIB);
  1750. return 0;
  1751. }
  1752. }
  1753. if (cert->ecdh_tmp != NULL)
  1754. {
  1755. EC_KEY_free(cert->ecdh_tmp);
  1756. }
  1757. cert->ecdh_tmp = ecdh;
  1758. return 1;
  1759. }
  1760. /* break; */
  1761. case SSL_CTRL_SET_TMP_ECDH_CB:
  1762. {
  1763. SSLerr(SSL_F_SSL3_CTX_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  1764. return(0);
  1765. }
  1766. break;
  1767. #endif /* !OPENSSL_NO_ECDH */
  1768. /* A Thawte special :-) */
  1769. case SSL_CTRL_EXTRA_CHAIN_CERT:
  1770. if (ctx->extra_certs == NULL)
  1771. {
  1772. if ((ctx->extra_certs=sk_X509_new_null()) == NULL)
  1773. return(0);
  1774. }
  1775. sk_X509_push(ctx->extra_certs,(X509 *)parg);
  1776. break;
  1777. default:
  1778. return(0);
  1779. }
  1780. return(1);
  1781. }
  1782. long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)())
  1783. {
  1784. CERT *cert;
  1785. cert=ctx->cert;
  1786. switch (cmd)
  1787. {
  1788. #ifndef OPENSSL_NO_RSA
  1789. case SSL_CTRL_SET_TMP_RSA_CB:
  1790. {
  1791. cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp;
  1792. }
  1793. break;
  1794. #endif
  1795. #ifndef OPENSSL_NO_DH
  1796. case SSL_CTRL_SET_TMP_DH_CB:
  1797. {
  1798. cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
  1799. }
  1800. break;
  1801. #endif
  1802. #ifndef OPENSSL_NO_ECDH
  1803. case SSL_CTRL_SET_TMP_ECDH_CB:
  1804. {
  1805. cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
  1806. }
  1807. break;
  1808. #endif
  1809. default:
  1810. return(0);
  1811. }
  1812. return(1);
  1813. }
  1814. /* This function needs to check if the ciphers required are actually
  1815. * available */
  1816. SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p)
  1817. {
  1818. static int init=1;
  1819. static SSL_CIPHER *sorted[SSL3_NUM_CIPHERS];
  1820. SSL_CIPHER c,*cp= &c,**cpp;
  1821. unsigned long id;
  1822. unsigned int i;
  1823. if (init)
  1824. {
  1825. CRYPTO_w_lock(CRYPTO_LOCK_SSL);
  1826. if (init)
  1827. {
  1828. for (i=0; i<SSL3_NUM_CIPHERS; i++)
  1829. sorted[i]= &(ssl3_ciphers[i]);
  1830. qsort(sorted,
  1831. SSL3_NUM_CIPHERS,sizeof(SSL_CIPHER *),
  1832. FP_ICC ssl_cipher_ptr_id_cmp);
  1833. init=0;
  1834. }
  1835. CRYPTO_w_unlock(CRYPTO_LOCK_SSL);
  1836. }
  1837. id=0x03000000L|((unsigned long)p[0]<<8L)|(unsigned long)p[1];
  1838. c.id=id;
  1839. cpp=(SSL_CIPHER **)OBJ_bsearch((char *)&cp,
  1840. (char *)sorted,
  1841. SSL3_NUM_CIPHERS,sizeof(SSL_CIPHER *),
  1842. FP_ICC ssl_cipher_ptr_id_cmp);
  1843. if ((cpp == NULL) || !(*cpp)->valid)
  1844. return(NULL);
  1845. else
  1846. return(*cpp);
  1847. }
  1848. int ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p)
  1849. {
  1850. long l;
  1851. if (p != NULL)
  1852. {
  1853. l=c->id;
  1854. if ((l & 0xff000000) != 0x03000000) return(0);
  1855. p[0]=((unsigned char)(l>> 8L))&0xFF;
  1856. p[1]=((unsigned char)(l ))&0xFF;
  1857. }
  1858. return(2);
  1859. }
  1860. SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
  1861. STACK_OF(SSL_CIPHER) *srvr)
  1862. {
  1863. SSL_CIPHER *c,*ret=NULL;
  1864. STACK_OF(SSL_CIPHER) *prio, *allow;
  1865. int i,j,ok;
  1866. CERT *cert;
  1867. unsigned long alg,mask,emask;
  1868. /* Let's see which ciphers we can support */
  1869. cert=s->cert;
  1870. #if 0
  1871. /* Do not set the compare functions, because this may lead to a
  1872. * reordering by "id". We want to keep the original ordering.
  1873. * We may pay a price in performance during sk_SSL_CIPHER_find(),
  1874. * but would have to pay with the price of sk_SSL_CIPHER_dup().
  1875. */
  1876. sk_SSL_CIPHER_set_cmp_func(srvr, ssl_cipher_ptr_id_cmp);
  1877. sk_SSL_CIPHER_set_cmp_func(clnt, ssl_cipher_ptr_id_cmp);
  1878. #endif
  1879. #ifdef CIPHER_DEBUG
  1880. printf("Server has %d from %p:\n", sk_SSL_CIPHER_num(srvr), srvr);
  1881. for(i=0 ; i < sk_SSL_CIPHER_num(srvr) ; ++i)
  1882. {
  1883. c=sk_SSL_CIPHER_value(srvr,i);
  1884. printf("%p:%s\n",c,c->name);
  1885. }
  1886. printf("Client sent %d from %p:\n", sk_SSL_CIPHER_num(clnt), clnt);
  1887. for(i=0 ; i < sk_SSL_CIPHER_num(clnt) ; ++i)
  1888. {
  1889. c=sk_SSL_CIPHER_value(clnt,i);
  1890. printf("%p:%s\n",c,c->name);
  1891. }
  1892. #endif
  1893. if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE)
  1894. {
  1895. prio = srvr;
  1896. allow = clnt;
  1897. }
  1898. else
  1899. {
  1900. prio = clnt;
  1901. allow = srvr;
  1902. }
  1903. for (i=0; i<sk_SSL_CIPHER_num(prio); i++)
  1904. {
  1905. c=sk_SSL_CIPHER_value(prio,i);
  1906. ssl_set_cert_masks(cert,c);
  1907. mask=cert->mask;
  1908. emask=cert->export_mask;
  1909. #ifdef KSSL_DEBUG
  1910. printf("ssl3_choose_cipher %d alg= %lx\n", i,c->algorithms);
  1911. #endif /* KSSL_DEBUG */
  1912. alg=c->algorithms&(SSL_MKEY_MASK|SSL_AUTH_MASK);
  1913. #ifndef OPENSSL_NO_KRB5
  1914. if (alg & SSL_KRB5)
  1915. {
  1916. if ( !kssl_keytab_is_available(s->kssl_ctx) )
  1917. continue;
  1918. }
  1919. #endif /* OPENSSL_NO_KRB5 */
  1920. if (SSL_C_IS_EXPORT(c))
  1921. {
  1922. ok=((alg & emask) == alg)?1:0;
  1923. #ifdef CIPHER_DEBUG
  1924. printf("%d:[%08lX:%08lX]%p:%s (export)\n",ok,alg,emask,
  1925. c,c->name);
  1926. #endif
  1927. }
  1928. else
  1929. {
  1930. ok=((alg & mask) == alg)?1:0;
  1931. #ifdef CIPHER_DEBUG
  1932. printf("%d:[%08lX:%08lX]%p:%s\n",ok,alg,mask,c,
  1933. c->name);
  1934. #endif
  1935. }
  1936. if (!ok) continue;
  1937. j=sk_SSL_CIPHER_find(allow,c);
  1938. if (j >= 0)
  1939. {
  1940. ret=sk_SSL_CIPHER_value(allow,j);
  1941. break;
  1942. }
  1943. }
  1944. return(ret);
  1945. }
  1946. int ssl3_get_req_cert_type(SSL *s, unsigned char *p)
  1947. {
  1948. int ret=0;
  1949. unsigned long alg;
  1950. alg=s->s3->tmp.new_cipher->algorithms;
  1951. #ifndef OPENSSL_NO_DH
  1952. if (alg & (SSL_kDHr|SSL_kEDH))
  1953. {
  1954. # ifndef OPENSSL_NO_RSA
  1955. p[ret++]=SSL3_CT_RSA_FIXED_DH;
  1956. # endif
  1957. # ifndef OPENSSL_NO_DSA
  1958. p[ret++]=SSL3_CT_DSS_FIXED_DH;
  1959. # endif
  1960. }
  1961. if ((s->version == SSL3_VERSION) &&
  1962. (alg & (SSL_kEDH|SSL_kDHd|SSL_kDHr)))
  1963. {
  1964. # ifndef OPENSSL_NO_RSA
  1965. p[ret++]=SSL3_CT_RSA_EPHEMERAL_DH;
  1966. # endif
  1967. # ifndef OPENSSL_NO_DSA
  1968. p[ret++]=SSL3_CT_DSS_EPHEMERAL_DH;
  1969. # endif
  1970. }
  1971. #endif /* !OPENSSL_NO_DH */
  1972. #ifndef OPENSSL_NO_RSA
  1973. p[ret++]=SSL3_CT_RSA_SIGN;
  1974. #endif
  1975. #ifndef OPENSSL_NO_DSA
  1976. p[ret++]=SSL3_CT_DSS_SIGN;
  1977. #endif
  1978. #ifndef OPENSSL_NO_ECDH
  1979. /* We should ask for fixed ECDH certificates only
  1980. * for SSL_kECDH (and not SSL_kECDHE)
  1981. */
  1982. if ((alg & SSL_kECDH) && (s->version >= TLS1_VERSION))
  1983. {
  1984. p[ret++]=TLS_CT_RSA_FIXED_ECDH;
  1985. p[ret++]=TLS_CT_ECDSA_FIXED_ECDH;
  1986. }
  1987. #endif
  1988. #ifndef OPENSSL_NO_ECDSA
  1989. /* ECDSA certs can be used with RSA cipher suites as well
  1990. * so we don't need to check for SSL_kECDH or SSL_kECDHE
  1991. */
  1992. if (s->version >= TLS1_VERSION)
  1993. {
  1994. p[ret++]=TLS_CT_ECDSA_SIGN;
  1995. }
  1996. #endif
  1997. return(ret);
  1998. }
  1999. int ssl3_shutdown(SSL *s)
  2000. {
  2001. /* Don't do anything much if we have not done the handshake or
  2002. * we don't want to send messages :-) */
  2003. if ((s->quiet_shutdown) || (s->state == SSL_ST_BEFORE))
  2004. {
  2005. s->shutdown=(SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
  2006. return(1);
  2007. }
  2008. if (!(s->shutdown & SSL_SENT_SHUTDOWN))
  2009. {
  2010. s->shutdown|=SSL_SENT_SHUTDOWN;
  2011. #if 1
  2012. ssl3_send_alert(s,SSL3_AL_WARNING,SSL_AD_CLOSE_NOTIFY);
  2013. #endif
  2014. /* our shutdown alert has been sent now, and if it still needs
  2015. * to be written, s->s3->alert_dispatch will be true */
  2016. }
  2017. else if (s->s3->alert_dispatch)
  2018. {
  2019. /* resend it if not sent */
  2020. #if 1
  2021. ssl3_dispatch_alert(s);
  2022. #endif
  2023. }
  2024. else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN))
  2025. {
  2026. /* If we are waiting for a close from our peer, we are closed */
  2027. ssl3_read_bytes(s,0,NULL,0,0);
  2028. }
  2029. if ((s->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) &&
  2030. !s->s3->alert_dispatch)
  2031. return(1);
  2032. else
  2033. return(0);
  2034. }
  2035. int ssl3_write(SSL *s, const void *buf, int len)
  2036. {
  2037. int ret,n;
  2038. #if 0
  2039. if (s->shutdown & SSL_SEND_SHUTDOWN)
  2040. {
  2041. s->rwstate=SSL_NOTHING;
  2042. return(0);
  2043. }
  2044. #endif
  2045. clear_sys_error();
  2046. if (s->s3->renegotiate) ssl3_renegotiate_check(s);
  2047. /* This is an experimental flag that sends the
  2048. * last handshake message in the same packet as the first
  2049. * use data - used to see if it helps the TCP protocol during
  2050. * session-id reuse */
  2051. /* The second test is because the buffer may have been removed */
  2052. if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio))
  2053. {
  2054. /* First time through, we write into the buffer */
  2055. if (s->s3->delay_buf_pop_ret == 0)
  2056. {
  2057. ret=ssl3_write_bytes(s,SSL3_RT_APPLICATION_DATA,
  2058. buf,len);
  2059. if (ret <= 0) return(ret);
  2060. s->s3->delay_buf_pop_ret=ret;
  2061. }
  2062. s->rwstate=SSL_WRITING;
  2063. n=BIO_flush(s->wbio);
  2064. if (n <= 0) return(n);
  2065. s->rwstate=SSL_NOTHING;
  2066. /* We have flushed the buffer, so remove it */
  2067. ssl_free_wbio_buffer(s);
  2068. s->s3->flags&= ~SSL3_FLAGS_POP_BUFFER;
  2069. ret=s->s3->delay_buf_pop_ret;
  2070. s->s3->delay_buf_pop_ret=0;
  2071. }
  2072. else
  2073. {
  2074. ret=ssl3_write_bytes(s,SSL3_RT_APPLICATION_DATA,
  2075. buf,len);
  2076. if (ret <= 0) return(ret);
  2077. }
  2078. return(ret);
  2079. }
  2080. static int ssl3_read_internal(SSL *s, void *buf, int len, int peek)
  2081. {
  2082. int ret;
  2083. clear_sys_error();
  2084. if (s->s3->renegotiate) ssl3_renegotiate_check(s);
  2085. s->s3->in_read_app_data=1;
  2086. ret=ssl3_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);
  2087. if ((ret == -1) && (s->s3->in_read_app_data == 2))
  2088. {
  2089. /* ssl3_read_bytes decided to call s->handshake_func, which
  2090. * called ssl3_read_bytes to read handshake data.
  2091. * However, ssl3_read_bytes actually found application data
  2092. * and thinks that application data makes sense here; so disable
  2093. * handshake processing and try to read application data again. */
  2094. s->in_handshake++;
  2095. ret=ssl3_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);
  2096. s->in_handshake--;
  2097. }
  2098. else
  2099. s->s3->in_read_app_data=0;
  2100. return(ret);
  2101. }
  2102. int ssl3_read(SSL *s, void *buf, int len)
  2103. {
  2104. return ssl3_read_internal(s, buf, len, 0);
  2105. }
  2106. int ssl3_peek(SSL *s, void *buf, int len)
  2107. {
  2108. return ssl3_read_internal(s, buf, len, 1);
  2109. }
  2110. int ssl3_renegotiate(SSL *s)
  2111. {
  2112. if (s->handshake_func == NULL)
  2113. return(1);
  2114. if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)
  2115. return(0);
  2116. s->s3->renegotiate=1;
  2117. return(1);
  2118. }
  2119. int ssl3_renegotiate_check(SSL *s)
  2120. {
  2121. int ret=0;
  2122. if (s->s3->renegotiate)
  2123. {
  2124. if ( (s->s3->rbuf.left == 0) &&
  2125. (s->s3->wbuf.left == 0) &&
  2126. !SSL_in_init(s))
  2127. {
  2128. /*
  2129. if we are the server, and we have sent a 'RENEGOTIATE' message, we
  2130. need to go to SSL_ST_ACCEPT.
  2131. */
  2132. /* SSL_ST_ACCEPT */
  2133. s->state=SSL_ST_RENEGOTIATE;
  2134. s->s3->renegotiate=0;
  2135. s->s3->num_renegotiations++;
  2136. s->s3->total_renegotiations++;
  2137. ret=1;
  2138. }
  2139. }
  2140. return(ret);
  2141. }