s3_lib.c 49 KB

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