s3_lib.c 49 KB

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