No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 
 
 

4244 líneas
83 KiB

  1. /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
  2. * All rights reserved.
  3. *
  4. * This package is an SSL implementation written
  5. * by Eric Young (eay@cryptsoft.com).
  6. * The implementation was written so as to conform with Netscapes SSL.
  7. *
  8. * This library is free for commercial and non-commercial use as long as
  9. * the following conditions are aheared to. The following conditions
  10. * apply to all code found in this distribution, be it the RC4, RSA,
  11. * lhash, DES, etc., code; not just the SSL code. The SSL documentation
  12. * included with this distribution is covered by the same copyright terms
  13. * except that the holder is Tim Hudson (tjh@cryptsoft.com).
  14. *
  15. * Copyright remains Eric Young's, and as such any Copyright notices in
  16. * the code are not to be removed.
  17. * If this package is used in a product, Eric Young should be given attribution
  18. * as the author of the parts of the library used.
  19. * This can be in the form of a textual message at program startup or
  20. * in documentation (online or textual) provided with the package.
  21. *
  22. * Redistribution and use in source and binary forms, with or without
  23. * modification, are permitted provided that the following conditions
  24. * are met:
  25. * 1. Redistributions of source code must retain the copyright
  26. * notice, this list of conditions and the following disclaimer.
  27. * 2. Redistributions in binary form must reproduce the above copyright
  28. * notice, this list of conditions and the following disclaimer in the
  29. * documentation and/or other materials provided with the distribution.
  30. * 3. All advertising materials mentioning features or use of this software
  31. * must display the following acknowledgement:
  32. * "This product includes cryptographic software written by
  33. * Eric Young (eay@cryptsoft.com)"
  34. * The word 'cryptographic' can be left out if the rouines from the library
  35. * being used are not cryptographic related :-).
  36. * 4. If you include any Windows specific code (or a derivative thereof) from
  37. * the apps directory (application code) you must include an acknowledgement:
  38. * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
  39. *
  40. * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
  41. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  42. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  43. * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  44. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  45. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  46. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  47. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  48. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  49. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  50. * SUCH DAMAGE.
  51. *
  52. * The licence and distribution terms for any publically available version or
  53. * derivative of this code cannot be changed. i.e. this code cannot simply be
  54. * copied and put under another distribution licence
  55. * [including the GNU Public Licence.]
  56. */
  57. /* ====================================================================
  58. * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved.
  59. *
  60. * Redistribution and use in source and binary forms, with or without
  61. * modification, are permitted provided that the following conditions
  62. * are met:
  63. *
  64. * 1. Redistributions of source code must retain the above copyright
  65. * notice, this list of conditions and the following disclaimer.
  66. *
  67. * 2. Redistributions in binary form must reproduce the above copyright
  68. * notice, this list of conditions and the following disclaimer in
  69. * the documentation and/or other materials provided with the
  70. * distribution.
  71. *
  72. * 3. All advertising materials mentioning features or use of this
  73. * software must display the following acknowledgment:
  74. * "This product includes software developed by the OpenSSL Project
  75. * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
  76. *
  77. * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
  78. * endorse or promote products derived from this software without
  79. * prior written permission. For written permission, please contact
  80. * openssl-core@openssl.org.
  81. *
  82. * 5. Products derived from this software may not be called "OpenSSL"
  83. * nor may "OpenSSL" appear in their names without prior written
  84. * permission of the OpenSSL Project.
  85. *
  86. * 6. Redistributions of any form whatsoever must retain the following
  87. * acknowledgment:
  88. * "This product includes software developed by the OpenSSL Project
  89. * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
  90. *
  91. * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
  92. * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  93. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  94. * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
  95. * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  96. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  97. * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  98. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  99. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  100. * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  101. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
  102. * OF THE POSSIBILITY OF SUCH DAMAGE.
  103. * ====================================================================
  104. *
  105. * This product includes cryptographic software written by Eric Young
  106. * (eay@cryptsoft.com). This product includes software written by Tim
  107. * Hudson (tjh@cryptsoft.com).
  108. *
  109. */
  110. /* ====================================================================
  111. * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
  112. *
  113. * Portions of the attached software ("Contribution") are developed by
  114. * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
  115. *
  116. * The Contribution is licensed pursuant to the OpenSSL open source
  117. * license provided above.
  118. *
  119. * ECC cipher suite support in OpenSSL originally written by
  120. * Vipul Gupta and Sumit Gupta of Sun Microsystems Laboratories.
  121. *
  122. */
  123. /* ====================================================================
  124. * Copyright 2005 Nokia. All rights reserved.
  125. *
  126. * The portions of the attached software ("Contribution") is developed by
  127. * Nokia Corporation and is licensed pursuant to the OpenSSL open source
  128. * license.
  129. *
  130. * The Contribution, originally written by Mika Kousa and Pasi Eronen of
  131. * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites
  132. * support (see RFC 4279) to OpenSSL.
  133. *
  134. * No patent licenses or other rights except those expressly stated in
  135. * the OpenSSL open source license shall be deemed granted or received
  136. * expressly, by implication, estoppel, or otherwise.
  137. *
  138. * No assurances are provided by Nokia that the Contribution does not
  139. * infringe the patent or other intellectual property rights of any third
  140. * party or that the license provides you with all the necessary rights
  141. * to make use of the Contribution.
  142. *
  143. * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN
  144. * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA
  145. * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY
  146. * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR
  147. * OTHERWISE. */
  148. #include <stdio.h>
  149. #include <openssl/dh.h>
  150. #include <openssl/md5.h>
  151. #include <openssl/mem.h>
  152. #include <openssl/obj.h>
  153. #include "ssl_locl.h"
  154. #define SSL3_NUM_CIPHERS (sizeof(ssl3_ciphers)/sizeof(SSL_CIPHER))
  155. /* FIXED_NONCE_LEN is a macro that results in the correct value to set the
  156. * fixed nonce length in SSL_CIPHER.algorithms2. It's the inverse of
  157. * SSL_CIPHER_AEAD_FIXED_NONCE_LEN. */
  158. #define FIXED_NONCE_LEN(x) ((x/2)<<24)
  159. /* list of available SSLv3 ciphers (sorted by id) */
  160. SSL_CIPHER ssl3_ciphers[]={
  161. /* The RSA ciphers */
  162. /* Cipher 01 */
  163. {
  164. 1,
  165. SSL3_TXT_RSA_NULL_MD5,
  166. SSL3_CK_RSA_NULL_MD5,
  167. SSL_kRSA,
  168. SSL_aRSA,
  169. SSL_eNULL,
  170. SSL_MD5,
  171. SSL_SSLV3,
  172. SSL_NOT_EXP|SSL_STRONG_NONE,
  173. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  174. 0,
  175. 0,
  176. },
  177. /* Cipher 02 */
  178. {
  179. 1,
  180. SSL3_TXT_RSA_NULL_SHA,
  181. SSL3_CK_RSA_NULL_SHA,
  182. SSL_kRSA,
  183. SSL_aRSA,
  184. SSL_eNULL,
  185. SSL_SHA1,
  186. SSL_SSLV3,
  187. SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS,
  188. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  189. 0,
  190. 0,
  191. },
  192. /* Cipher 03 */
  193. {
  194. 1,
  195. SSL3_TXT_RSA_RC4_40_MD5,
  196. SSL3_CK_RSA_RC4_40_MD5,
  197. SSL_kRSA,
  198. SSL_aRSA,
  199. SSL_RC4,
  200. SSL_MD5,
  201. SSL_SSLV3,
  202. SSL_EXPORT|SSL_EXP40,
  203. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  204. 40,
  205. 128,
  206. },
  207. /* Cipher 04 */
  208. {
  209. 1,
  210. SSL3_TXT_RSA_RC4_128_MD5,
  211. SSL3_CK_RSA_RC4_128_MD5,
  212. SSL_kRSA,
  213. SSL_aRSA,
  214. SSL_RC4,
  215. SSL_MD5,
  216. SSL_SSLV3,
  217. SSL_NOT_EXP|SSL_MEDIUM,
  218. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  219. 128,
  220. 128,
  221. },
  222. /* Cipher 05 */
  223. {
  224. 1,
  225. SSL3_TXT_RSA_RC4_128_SHA,
  226. SSL3_CK_RSA_RC4_128_SHA,
  227. SSL_kRSA,
  228. SSL_aRSA,
  229. SSL_RC4,
  230. SSL_SHA1,
  231. SSL_SSLV3,
  232. SSL_NOT_EXP|SSL_MEDIUM,
  233. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  234. 128,
  235. 128,
  236. },
  237. /* Cipher 06 */
  238. {
  239. 1,
  240. SSL3_TXT_RSA_RC2_40_MD5,
  241. SSL3_CK_RSA_RC2_40_MD5,
  242. SSL_kRSA,
  243. SSL_aRSA,
  244. SSL_RC2,
  245. SSL_MD5,
  246. SSL_SSLV3,
  247. SSL_EXPORT|SSL_EXP40,
  248. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  249. 40,
  250. 128,
  251. },
  252. /* Cipher 07 */
  253. #ifndef OPENSSL_NO_IDEA
  254. {
  255. 1,
  256. SSL3_TXT_RSA_IDEA_128_SHA,
  257. SSL3_CK_RSA_IDEA_128_SHA,
  258. SSL_kRSA,
  259. SSL_aRSA,
  260. SSL_IDEA,
  261. SSL_SHA1,
  262. SSL_SSLV3,
  263. SSL_NOT_EXP|SSL_MEDIUM,
  264. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  265. 128,
  266. 128,
  267. },
  268. #endif
  269. /* Cipher 08 */
  270. {
  271. 1,
  272. SSL3_TXT_RSA_DES_40_CBC_SHA,
  273. SSL3_CK_RSA_DES_40_CBC_SHA,
  274. SSL_kRSA,
  275. SSL_aRSA,
  276. SSL_DES,
  277. SSL_SHA1,
  278. SSL_SSLV3,
  279. SSL_EXPORT|SSL_EXP40,
  280. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  281. 40,
  282. 56,
  283. },
  284. /* Cipher 09 */
  285. {
  286. 1,
  287. SSL3_TXT_RSA_DES_64_CBC_SHA,
  288. SSL3_CK_RSA_DES_64_CBC_SHA,
  289. SSL_kRSA,
  290. SSL_aRSA,
  291. SSL_DES,
  292. SSL_SHA1,
  293. SSL_SSLV3,
  294. SSL_NOT_EXP|SSL_LOW,
  295. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  296. 56,
  297. 56,
  298. },
  299. /* Cipher 0A */
  300. {
  301. 1,
  302. SSL3_TXT_RSA_DES_192_CBC3_SHA,
  303. SSL3_CK_RSA_DES_192_CBC3_SHA,
  304. SSL_kRSA,
  305. SSL_aRSA,
  306. SSL_3DES,
  307. SSL_SHA1,
  308. SSL_SSLV3,
  309. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  310. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  311. 168,
  312. 168,
  313. },
  314. /* The DH ciphers */
  315. /* Cipher 0B */
  316. {
  317. 1,
  318. SSL3_TXT_DH_DSS_DES_40_CBC_SHA,
  319. SSL3_CK_DH_DSS_DES_40_CBC_SHA,
  320. SSL_kDHd,
  321. SSL_aDH,
  322. SSL_DES,
  323. SSL_SHA1,
  324. SSL_SSLV3,
  325. SSL_EXPORT|SSL_EXP40,
  326. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  327. 40,
  328. 56,
  329. },
  330. /* Cipher 0C */
  331. {
  332. 1,
  333. SSL3_TXT_DH_DSS_DES_64_CBC_SHA,
  334. SSL3_CK_DH_DSS_DES_64_CBC_SHA,
  335. SSL_kDHd,
  336. SSL_aDH,
  337. SSL_DES,
  338. SSL_SHA1,
  339. SSL_SSLV3,
  340. SSL_NOT_EXP|SSL_LOW,
  341. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  342. 56,
  343. 56,
  344. },
  345. /* Cipher 0D */
  346. {
  347. 1,
  348. SSL3_TXT_DH_DSS_DES_192_CBC3_SHA,
  349. SSL3_CK_DH_DSS_DES_192_CBC3_SHA,
  350. SSL_kDHd,
  351. SSL_aDH,
  352. SSL_3DES,
  353. SSL_SHA1,
  354. SSL_SSLV3,
  355. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  356. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  357. 168,
  358. 168,
  359. },
  360. /* Cipher 0E */
  361. {
  362. 1,
  363. SSL3_TXT_DH_RSA_DES_40_CBC_SHA,
  364. SSL3_CK_DH_RSA_DES_40_CBC_SHA,
  365. SSL_kDHr,
  366. SSL_aDH,
  367. SSL_DES,
  368. SSL_SHA1,
  369. SSL_SSLV3,
  370. SSL_EXPORT|SSL_EXP40,
  371. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  372. 40,
  373. 56,
  374. },
  375. /* Cipher 0F */
  376. {
  377. 1,
  378. SSL3_TXT_DH_RSA_DES_64_CBC_SHA,
  379. SSL3_CK_DH_RSA_DES_64_CBC_SHA,
  380. SSL_kDHr,
  381. SSL_aDH,
  382. SSL_DES,
  383. SSL_SHA1,
  384. SSL_SSLV3,
  385. SSL_NOT_EXP|SSL_LOW,
  386. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  387. 56,
  388. 56,
  389. },
  390. /* Cipher 10 */
  391. {
  392. 1,
  393. SSL3_TXT_DH_RSA_DES_192_CBC3_SHA,
  394. SSL3_CK_DH_RSA_DES_192_CBC3_SHA,
  395. SSL_kDHr,
  396. SSL_aDH,
  397. SSL_3DES,
  398. SSL_SHA1,
  399. SSL_SSLV3,
  400. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  401. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  402. 168,
  403. 168,
  404. },
  405. /* The Ephemeral DH ciphers */
  406. /* Cipher 11 */
  407. {
  408. 1,
  409. SSL3_TXT_EDH_DSS_DES_40_CBC_SHA,
  410. SSL3_CK_EDH_DSS_DES_40_CBC_SHA,
  411. SSL_kEDH,
  412. SSL_aDSS,
  413. SSL_DES,
  414. SSL_SHA1,
  415. SSL_SSLV3,
  416. SSL_EXPORT|SSL_EXP40,
  417. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  418. 40,
  419. 56,
  420. },
  421. /* Cipher 12 */
  422. {
  423. 1,
  424. SSL3_TXT_EDH_DSS_DES_64_CBC_SHA,
  425. SSL3_CK_EDH_DSS_DES_64_CBC_SHA,
  426. SSL_kEDH,
  427. SSL_aDSS,
  428. SSL_DES,
  429. SSL_SHA1,
  430. SSL_SSLV3,
  431. SSL_NOT_EXP|SSL_LOW,
  432. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  433. 56,
  434. 56,
  435. },
  436. /* Cipher 13 */
  437. {
  438. 1,
  439. SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA,
  440. SSL3_CK_EDH_DSS_DES_192_CBC3_SHA,
  441. SSL_kEDH,
  442. SSL_aDSS,
  443. SSL_3DES,
  444. SSL_SHA1,
  445. SSL_SSLV3,
  446. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  447. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  448. 168,
  449. 168,
  450. },
  451. /* Cipher 14 */
  452. {
  453. 1,
  454. SSL3_TXT_EDH_RSA_DES_40_CBC_SHA,
  455. SSL3_CK_EDH_RSA_DES_40_CBC_SHA,
  456. SSL_kEDH,
  457. SSL_aRSA,
  458. SSL_DES,
  459. SSL_SHA1,
  460. SSL_SSLV3,
  461. SSL_EXPORT|SSL_EXP40,
  462. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  463. 40,
  464. 56,
  465. },
  466. /* Cipher 15 */
  467. {
  468. 1,
  469. SSL3_TXT_EDH_RSA_DES_64_CBC_SHA,
  470. SSL3_CK_EDH_RSA_DES_64_CBC_SHA,
  471. SSL_kEDH,
  472. SSL_aRSA,
  473. SSL_DES,
  474. SSL_SHA1,
  475. SSL_SSLV3,
  476. SSL_NOT_EXP|SSL_LOW,
  477. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  478. 56,
  479. 56,
  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,
  487. SSL_aRSA,
  488. SSL_3DES,
  489. SSL_SHA1,
  490. SSL_SSLV3,
  491. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  492. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  493. 168,
  494. 168,
  495. },
  496. /* Cipher 17 */
  497. {
  498. 1,
  499. SSL3_TXT_ADH_RC4_40_MD5,
  500. SSL3_CK_ADH_RC4_40_MD5,
  501. SSL_kEDH,
  502. SSL_aNULL,
  503. SSL_RC4,
  504. SSL_MD5,
  505. SSL_SSLV3,
  506. SSL_EXPORT|SSL_EXP40,
  507. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  508. 40,
  509. 128,
  510. },
  511. /* Cipher 18 */
  512. {
  513. 1,
  514. SSL3_TXT_ADH_RC4_128_MD5,
  515. SSL3_CK_ADH_RC4_128_MD5,
  516. SSL_kEDH,
  517. SSL_aNULL,
  518. SSL_RC4,
  519. SSL_MD5,
  520. SSL_SSLV3,
  521. SSL_NOT_EXP|SSL_MEDIUM,
  522. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  523. 128,
  524. 128,
  525. },
  526. /* Cipher 19 */
  527. {
  528. 1,
  529. SSL3_TXT_ADH_DES_40_CBC_SHA,
  530. SSL3_CK_ADH_DES_40_CBC_SHA,
  531. SSL_kEDH,
  532. SSL_aNULL,
  533. SSL_DES,
  534. SSL_SHA1,
  535. SSL_SSLV3,
  536. SSL_EXPORT|SSL_EXP40,
  537. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  538. 40,
  539. 128,
  540. },
  541. /* Cipher 1A */
  542. {
  543. 1,
  544. SSL3_TXT_ADH_DES_64_CBC_SHA,
  545. SSL3_CK_ADH_DES_64_CBC_SHA,
  546. SSL_kEDH,
  547. SSL_aNULL,
  548. SSL_DES,
  549. SSL_SHA1,
  550. SSL_SSLV3,
  551. SSL_NOT_EXP|SSL_LOW,
  552. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  553. 56,
  554. 56,
  555. },
  556. /* Cipher 1B */
  557. {
  558. 1,
  559. SSL3_TXT_ADH_DES_192_CBC_SHA,
  560. SSL3_CK_ADH_DES_192_CBC_SHA,
  561. SSL_kEDH,
  562. SSL_aNULL,
  563. SSL_3DES,
  564. SSL_SHA1,
  565. SSL_SSLV3,
  566. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  567. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  568. 168,
  569. 168,
  570. },
  571. /* Fortezza ciphersuite from SSL 3.0 spec */
  572. #if 0
  573. /* Cipher 1C */
  574. {
  575. 0,
  576. SSL3_TXT_FZA_DMS_NULL_SHA,
  577. SSL3_CK_FZA_DMS_NULL_SHA,
  578. SSL_kFZA,
  579. SSL_aFZA,
  580. SSL_eNULL,
  581. SSL_SHA1,
  582. SSL_SSLV3,
  583. SSL_NOT_EXP|SSL_STRONG_NONE,
  584. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  585. 0,
  586. 0,
  587. },
  588. /* Cipher 1D */
  589. {
  590. 0,
  591. SSL3_TXT_FZA_DMS_FZA_SHA,
  592. SSL3_CK_FZA_DMS_FZA_SHA,
  593. SSL_kFZA,
  594. SSL_aFZA,
  595. SSL_eFZA,
  596. SSL_SHA1,
  597. SSL_SSLV3,
  598. SSL_NOT_EXP|SSL_STRONG_NONE,
  599. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  600. 0,
  601. 0,
  602. },
  603. /* Cipher 1E */
  604. {
  605. 0,
  606. SSL3_TXT_FZA_DMS_RC4_SHA,
  607. SSL3_CK_FZA_DMS_RC4_SHA,
  608. SSL_kFZA,
  609. SSL_aFZA,
  610. SSL_RC4,
  611. SSL_SHA1,
  612. SSL_SSLV3,
  613. SSL_NOT_EXP|SSL_MEDIUM,
  614. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  615. 128,
  616. 128,
  617. },
  618. #endif
  619. /* New AES ciphersuites */
  620. /* Cipher 2F */
  621. {
  622. 1,
  623. TLS1_TXT_RSA_WITH_AES_128_SHA,
  624. TLS1_CK_RSA_WITH_AES_128_SHA,
  625. SSL_kRSA,
  626. SSL_aRSA,
  627. SSL_AES128,
  628. SSL_SHA1,
  629. SSL_TLSV1,
  630. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  631. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  632. 128,
  633. 128,
  634. },
  635. /* Cipher 30 */
  636. {
  637. 1,
  638. TLS1_TXT_DH_DSS_WITH_AES_128_SHA,
  639. TLS1_CK_DH_DSS_WITH_AES_128_SHA,
  640. SSL_kDHd,
  641. SSL_aDH,
  642. SSL_AES128,
  643. SSL_SHA1,
  644. SSL_TLSV1,
  645. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  646. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  647. 128,
  648. 128,
  649. },
  650. /* Cipher 31 */
  651. {
  652. 1,
  653. TLS1_TXT_DH_RSA_WITH_AES_128_SHA,
  654. TLS1_CK_DH_RSA_WITH_AES_128_SHA,
  655. SSL_kDHr,
  656. SSL_aDH,
  657. SSL_AES128,
  658. SSL_SHA1,
  659. SSL_TLSV1,
  660. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  661. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  662. 128,
  663. 128,
  664. },
  665. /* Cipher 32 */
  666. {
  667. 1,
  668. TLS1_TXT_DHE_DSS_WITH_AES_128_SHA,
  669. TLS1_CK_DHE_DSS_WITH_AES_128_SHA,
  670. SSL_kEDH,
  671. SSL_aDSS,
  672. SSL_AES128,
  673. SSL_SHA1,
  674. SSL_TLSV1,
  675. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  676. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  677. 128,
  678. 128,
  679. },
  680. /* Cipher 33 */
  681. {
  682. 1,
  683. TLS1_TXT_DHE_RSA_WITH_AES_128_SHA,
  684. TLS1_CK_DHE_RSA_WITH_AES_128_SHA,
  685. SSL_kEDH,
  686. SSL_aRSA,
  687. SSL_AES128,
  688. SSL_SHA1,
  689. SSL_TLSV1,
  690. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  691. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  692. 128,
  693. 128,
  694. },
  695. /* Cipher 34 */
  696. {
  697. 1,
  698. TLS1_TXT_ADH_WITH_AES_128_SHA,
  699. TLS1_CK_ADH_WITH_AES_128_SHA,
  700. SSL_kEDH,
  701. SSL_aNULL,
  702. SSL_AES128,
  703. SSL_SHA1,
  704. SSL_TLSV1,
  705. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  706. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  707. 128,
  708. 128,
  709. },
  710. /* Cipher 35 */
  711. {
  712. 1,
  713. TLS1_TXT_RSA_WITH_AES_256_SHA,
  714. TLS1_CK_RSA_WITH_AES_256_SHA,
  715. SSL_kRSA,
  716. SSL_aRSA,
  717. SSL_AES256,
  718. SSL_SHA1,
  719. SSL_TLSV1,
  720. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  721. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  722. 256,
  723. 256,
  724. },
  725. /* Cipher 36 */
  726. {
  727. 1,
  728. TLS1_TXT_DH_DSS_WITH_AES_256_SHA,
  729. TLS1_CK_DH_DSS_WITH_AES_256_SHA,
  730. SSL_kDHd,
  731. SSL_aDH,
  732. SSL_AES256,
  733. SSL_SHA1,
  734. SSL_TLSV1,
  735. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  736. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  737. 256,
  738. 256,
  739. },
  740. /* Cipher 37 */
  741. {
  742. 1,
  743. TLS1_TXT_DH_RSA_WITH_AES_256_SHA,
  744. TLS1_CK_DH_RSA_WITH_AES_256_SHA,
  745. SSL_kDHr,
  746. SSL_aDH,
  747. SSL_AES256,
  748. SSL_SHA1,
  749. SSL_TLSV1,
  750. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  751. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  752. 256,
  753. 256,
  754. },
  755. /* Cipher 38 */
  756. {
  757. 1,
  758. TLS1_TXT_DHE_DSS_WITH_AES_256_SHA,
  759. TLS1_CK_DHE_DSS_WITH_AES_256_SHA,
  760. SSL_kEDH,
  761. SSL_aDSS,
  762. SSL_AES256,
  763. SSL_SHA1,
  764. SSL_TLSV1,
  765. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  766. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  767. 256,
  768. 256,
  769. },
  770. /* Cipher 39 */
  771. {
  772. 1,
  773. TLS1_TXT_DHE_RSA_WITH_AES_256_SHA,
  774. TLS1_CK_DHE_RSA_WITH_AES_256_SHA,
  775. SSL_kEDH,
  776. SSL_aRSA,
  777. SSL_AES256,
  778. SSL_SHA1,
  779. SSL_TLSV1,
  780. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  781. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  782. 256,
  783. 256,
  784. },
  785. /* Cipher 3A */
  786. {
  787. 1,
  788. TLS1_TXT_ADH_WITH_AES_256_SHA,
  789. TLS1_CK_ADH_WITH_AES_256_SHA,
  790. SSL_kEDH,
  791. SSL_aNULL,
  792. SSL_AES256,
  793. SSL_SHA1,
  794. SSL_TLSV1,
  795. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  796. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  797. 256,
  798. 256,
  799. },
  800. /* TLS v1.2 ciphersuites */
  801. /* Cipher 3B */
  802. {
  803. 1,
  804. TLS1_TXT_RSA_WITH_NULL_SHA256,
  805. TLS1_CK_RSA_WITH_NULL_SHA256,
  806. SSL_kRSA,
  807. SSL_aRSA,
  808. SSL_eNULL,
  809. SSL_SHA256,
  810. SSL_TLSV1_2,
  811. SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS,
  812. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  813. 0,
  814. 0,
  815. },
  816. /* Cipher 3C */
  817. {
  818. 1,
  819. TLS1_TXT_RSA_WITH_AES_128_SHA256,
  820. TLS1_CK_RSA_WITH_AES_128_SHA256,
  821. SSL_kRSA,
  822. SSL_aRSA,
  823. SSL_AES128,
  824. SSL_SHA256,
  825. SSL_TLSV1_2,
  826. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  827. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  828. 128,
  829. 128,
  830. },
  831. /* Cipher 3D */
  832. {
  833. 1,
  834. TLS1_TXT_RSA_WITH_AES_256_SHA256,
  835. TLS1_CK_RSA_WITH_AES_256_SHA256,
  836. SSL_kRSA,
  837. SSL_aRSA,
  838. SSL_AES256,
  839. SSL_SHA256,
  840. SSL_TLSV1_2,
  841. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  842. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  843. 256,
  844. 256,
  845. },
  846. /* Cipher 3E */
  847. {
  848. 1,
  849. TLS1_TXT_DH_DSS_WITH_AES_128_SHA256,
  850. TLS1_CK_DH_DSS_WITH_AES_128_SHA256,
  851. SSL_kDHd,
  852. SSL_aDH,
  853. SSL_AES128,
  854. SSL_SHA256,
  855. SSL_TLSV1_2,
  856. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  857. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  858. 128,
  859. 128,
  860. },
  861. /* Cipher 3F */
  862. {
  863. 1,
  864. TLS1_TXT_DH_RSA_WITH_AES_128_SHA256,
  865. TLS1_CK_DH_RSA_WITH_AES_128_SHA256,
  866. SSL_kDHr,
  867. SSL_aDH,
  868. SSL_AES128,
  869. SSL_SHA256,
  870. SSL_TLSV1_2,
  871. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  872. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  873. 128,
  874. 128,
  875. },
  876. /* Cipher 40 */
  877. {
  878. 1,
  879. TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256,
  880. TLS1_CK_DHE_DSS_WITH_AES_128_SHA256,
  881. SSL_kEDH,
  882. SSL_aDSS,
  883. SSL_AES128,
  884. SSL_SHA256,
  885. SSL_TLSV1_2,
  886. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  887. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  888. 128,
  889. 128,
  890. },
  891. #ifndef OPENSSL_NO_CAMELLIA
  892. /* Camellia ciphersuites from RFC4132 (128-bit portion) */
  893. /* Cipher 41 */
  894. {
  895. 1,
  896. TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA,
  897. TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA,
  898. SSL_kRSA,
  899. SSL_aRSA,
  900. SSL_CAMELLIA128,
  901. SSL_SHA1,
  902. SSL_TLSV1,
  903. SSL_NOT_EXP|SSL_HIGH,
  904. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  905. 128,
  906. 128,
  907. },
  908. /* Cipher 42 */
  909. {
  910. 1,
  911. TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA,
  912. TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA,
  913. SSL_kDHd,
  914. SSL_aDH,
  915. SSL_CAMELLIA128,
  916. SSL_SHA1,
  917. SSL_TLSV1,
  918. SSL_NOT_EXP|SSL_HIGH,
  919. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  920. 128,
  921. 128,
  922. },
  923. /* Cipher 43 */
  924. {
  925. 1,
  926. TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA,
  927. TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA,
  928. SSL_kDHr,
  929. SSL_aDH,
  930. SSL_CAMELLIA128,
  931. SSL_SHA1,
  932. SSL_TLSV1,
  933. SSL_NOT_EXP|SSL_HIGH,
  934. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  935. 128,
  936. 128,
  937. },
  938. /* Cipher 44 */
  939. {
  940. 1,
  941. TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
  942. TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
  943. SSL_kEDH,
  944. SSL_aDSS,
  945. SSL_CAMELLIA128,
  946. SSL_SHA1,
  947. SSL_TLSV1,
  948. SSL_NOT_EXP|SSL_HIGH,
  949. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  950. 128,
  951. 128,
  952. },
  953. /* Cipher 45 */
  954. {
  955. 1,
  956. TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
  957. TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
  958. SSL_kEDH,
  959. SSL_aRSA,
  960. SSL_CAMELLIA128,
  961. SSL_SHA1,
  962. SSL_TLSV1,
  963. SSL_NOT_EXP|SSL_HIGH,
  964. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  965. 128,
  966. 128,
  967. },
  968. /* Cipher 46 */
  969. {
  970. 1,
  971. TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA,
  972. TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA,
  973. SSL_kEDH,
  974. SSL_aNULL,
  975. SSL_CAMELLIA128,
  976. SSL_SHA1,
  977. SSL_TLSV1,
  978. SSL_NOT_EXP|SSL_HIGH,
  979. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  980. 128,
  981. 128,
  982. },
  983. #endif /* OPENSSL_NO_CAMELLIA */
  984. #if TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES
  985. /* New TLS Export CipherSuites from expired ID */
  986. #if 0
  987. /* Cipher 60 */
  988. {
  989. 1,
  990. TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5,
  991. TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5,
  992. SSL_kRSA,
  993. SSL_aRSA,
  994. SSL_RC4,
  995. SSL_MD5,
  996. SSL_TLSV1,
  997. SSL_EXPORT|SSL_EXP56,
  998. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  999. 56,
  1000. 128,
  1001. },
  1002. /* Cipher 61 */
  1003. {
  1004. 1,
  1005. TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5,
  1006. TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5,
  1007. SSL_kRSA,
  1008. SSL_aRSA,
  1009. SSL_RC2,
  1010. SSL_MD5,
  1011. SSL_TLSV1,
  1012. SSL_EXPORT|SSL_EXP56,
  1013. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1014. 56,
  1015. 128,
  1016. },
  1017. #endif
  1018. /* Cipher 62 */
  1019. {
  1020. 1,
  1021. TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA,
  1022. TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA,
  1023. SSL_kRSA,
  1024. SSL_aRSA,
  1025. SSL_DES,
  1026. SSL_SHA1,
  1027. SSL_TLSV1,
  1028. SSL_EXPORT|SSL_EXP56,
  1029. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1030. 56,
  1031. 56,
  1032. },
  1033. /* Cipher 63 */
  1034. {
  1035. 1,
  1036. TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA,
  1037. TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA,
  1038. SSL_kEDH,
  1039. SSL_aDSS,
  1040. SSL_DES,
  1041. SSL_SHA1,
  1042. SSL_TLSV1,
  1043. SSL_EXPORT|SSL_EXP56,
  1044. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1045. 56,
  1046. 56,
  1047. },
  1048. /* Cipher 64 */
  1049. {
  1050. 1,
  1051. TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA,
  1052. TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA,
  1053. SSL_kRSA,
  1054. SSL_aRSA,
  1055. SSL_RC4,
  1056. SSL_SHA1,
  1057. SSL_TLSV1,
  1058. SSL_EXPORT|SSL_EXP56,
  1059. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1060. 56,
  1061. 128,
  1062. },
  1063. /* Cipher 65 */
  1064. {
  1065. 1,
  1066. TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA,
  1067. TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA,
  1068. SSL_kEDH,
  1069. SSL_aDSS,
  1070. SSL_RC4,
  1071. SSL_SHA1,
  1072. SSL_TLSV1,
  1073. SSL_EXPORT|SSL_EXP56,
  1074. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1075. 56,
  1076. 128,
  1077. },
  1078. /* Cipher 66 */
  1079. {
  1080. 1,
  1081. TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA,
  1082. TLS1_CK_DHE_DSS_WITH_RC4_128_SHA,
  1083. SSL_kEDH,
  1084. SSL_aDSS,
  1085. SSL_RC4,
  1086. SSL_SHA1,
  1087. SSL_TLSV1,
  1088. SSL_NOT_EXP|SSL_MEDIUM,
  1089. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1090. 128,
  1091. 128,
  1092. },
  1093. #endif
  1094. /* TLS v1.2 ciphersuites */
  1095. /* Cipher 67 */
  1096. {
  1097. 1,
  1098. TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256,
  1099. TLS1_CK_DHE_RSA_WITH_AES_128_SHA256,
  1100. SSL_kEDH,
  1101. SSL_aRSA,
  1102. SSL_AES128,
  1103. SSL_SHA256,
  1104. SSL_TLSV1_2,
  1105. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1106. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1107. 128,
  1108. 128,
  1109. },
  1110. /* Cipher 68 */
  1111. {
  1112. 1,
  1113. TLS1_TXT_DH_DSS_WITH_AES_256_SHA256,
  1114. TLS1_CK_DH_DSS_WITH_AES_256_SHA256,
  1115. SSL_kDHd,
  1116. SSL_aDH,
  1117. SSL_AES256,
  1118. SSL_SHA256,
  1119. SSL_TLSV1_2,
  1120. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1121. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1122. 256,
  1123. 256,
  1124. },
  1125. /* Cipher 69 */
  1126. {
  1127. 1,
  1128. TLS1_TXT_DH_RSA_WITH_AES_256_SHA256,
  1129. TLS1_CK_DH_RSA_WITH_AES_256_SHA256,
  1130. SSL_kDHr,
  1131. SSL_aDH,
  1132. SSL_AES256,
  1133. SSL_SHA256,
  1134. SSL_TLSV1_2,
  1135. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1136. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1137. 256,
  1138. 256,
  1139. },
  1140. /* Cipher 6A */
  1141. {
  1142. 1,
  1143. TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256,
  1144. TLS1_CK_DHE_DSS_WITH_AES_256_SHA256,
  1145. SSL_kEDH,
  1146. SSL_aDSS,
  1147. SSL_AES256,
  1148. SSL_SHA256,
  1149. SSL_TLSV1_2,
  1150. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1151. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1152. 256,
  1153. 256,
  1154. },
  1155. /* Cipher 6B */
  1156. {
  1157. 1,
  1158. TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256,
  1159. TLS1_CK_DHE_RSA_WITH_AES_256_SHA256,
  1160. SSL_kEDH,
  1161. SSL_aRSA,
  1162. SSL_AES256,
  1163. SSL_SHA256,
  1164. SSL_TLSV1_2,
  1165. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1166. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1167. 256,
  1168. 256,
  1169. },
  1170. /* Cipher 6C */
  1171. {
  1172. 1,
  1173. TLS1_TXT_ADH_WITH_AES_128_SHA256,
  1174. TLS1_CK_ADH_WITH_AES_128_SHA256,
  1175. SSL_kEDH,
  1176. SSL_aNULL,
  1177. SSL_AES128,
  1178. SSL_SHA256,
  1179. SSL_TLSV1_2,
  1180. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1181. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1182. 128,
  1183. 128,
  1184. },
  1185. /* Cipher 6D */
  1186. {
  1187. 1,
  1188. TLS1_TXT_ADH_WITH_AES_256_SHA256,
  1189. TLS1_CK_ADH_WITH_AES_256_SHA256,
  1190. SSL_kEDH,
  1191. SSL_aNULL,
  1192. SSL_AES256,
  1193. SSL_SHA256,
  1194. SSL_TLSV1_2,
  1195. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1196. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1197. 256,
  1198. 256,
  1199. },
  1200. /* GOST Ciphersuites */
  1201. {
  1202. 1,
  1203. "GOST94-GOST89-GOST89",
  1204. 0x3000080,
  1205. SSL_kGOST,
  1206. SSL_aGOST94,
  1207. SSL_eGOST2814789CNT,
  1208. SSL_GOST89MAC,
  1209. SSL_TLSV1,
  1210. SSL_NOT_EXP|SSL_HIGH,
  1211. SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94|TLS1_STREAM_MAC,
  1212. 256,
  1213. 256
  1214. },
  1215. {
  1216. 1,
  1217. "GOST2001-GOST89-GOST89",
  1218. 0x3000081,
  1219. SSL_kGOST,
  1220. SSL_aGOST01,
  1221. SSL_eGOST2814789CNT,
  1222. SSL_GOST89MAC,
  1223. SSL_TLSV1,
  1224. SSL_NOT_EXP|SSL_HIGH,
  1225. SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94|TLS1_STREAM_MAC,
  1226. 256,
  1227. 256
  1228. },
  1229. {
  1230. 1,
  1231. "GOST94-NULL-GOST94",
  1232. 0x3000082,
  1233. SSL_kGOST,
  1234. SSL_aGOST94,
  1235. SSL_eNULL,
  1236. SSL_GOST94,
  1237. SSL_TLSV1,
  1238. SSL_NOT_EXP|SSL_STRONG_NONE,
  1239. SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94,
  1240. 0,
  1241. 0
  1242. },
  1243. {
  1244. 1,
  1245. "GOST2001-NULL-GOST94",
  1246. 0x3000083,
  1247. SSL_kGOST,
  1248. SSL_aGOST01,
  1249. SSL_eNULL,
  1250. SSL_GOST94,
  1251. SSL_TLSV1,
  1252. SSL_NOT_EXP|SSL_STRONG_NONE,
  1253. SSL_HANDSHAKE_MAC_GOST94|TLS1_PRF_GOST94,
  1254. 0,
  1255. 0
  1256. },
  1257. #ifndef OPENSSL_NO_CAMELLIA
  1258. /* Camellia ciphersuites from RFC4132 (256-bit portion) */
  1259. /* Cipher 84 */
  1260. {
  1261. 1,
  1262. TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA,
  1263. TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA,
  1264. SSL_kRSA,
  1265. SSL_aRSA,
  1266. SSL_CAMELLIA256,
  1267. SSL_SHA1,
  1268. SSL_TLSV1,
  1269. SSL_NOT_EXP|SSL_HIGH,
  1270. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1271. 256,
  1272. 256,
  1273. },
  1274. /* Cipher 85 */
  1275. {
  1276. 1,
  1277. TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA,
  1278. TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA,
  1279. SSL_kDHd,
  1280. SSL_aDH,
  1281. SSL_CAMELLIA256,
  1282. SSL_SHA1,
  1283. SSL_TLSV1,
  1284. SSL_NOT_EXP|SSL_HIGH,
  1285. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1286. 256,
  1287. 256,
  1288. },
  1289. /* Cipher 86 */
  1290. {
  1291. 1,
  1292. TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA,
  1293. TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA,
  1294. SSL_kDHr,
  1295. SSL_aDH,
  1296. SSL_CAMELLIA256,
  1297. SSL_SHA1,
  1298. SSL_TLSV1,
  1299. SSL_NOT_EXP|SSL_HIGH,
  1300. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1301. 256,
  1302. 256,
  1303. },
  1304. /* Cipher 87 */
  1305. {
  1306. 1,
  1307. TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
  1308. TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
  1309. SSL_kEDH,
  1310. SSL_aDSS,
  1311. SSL_CAMELLIA256,
  1312. SSL_SHA1,
  1313. SSL_TLSV1,
  1314. SSL_NOT_EXP|SSL_HIGH,
  1315. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1316. 256,
  1317. 256,
  1318. },
  1319. /* Cipher 88 */
  1320. {
  1321. 1,
  1322. TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
  1323. TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
  1324. SSL_kEDH,
  1325. SSL_aRSA,
  1326. SSL_CAMELLIA256,
  1327. SSL_SHA1,
  1328. SSL_TLSV1,
  1329. SSL_NOT_EXP|SSL_HIGH,
  1330. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1331. 256,
  1332. 256,
  1333. },
  1334. /* Cipher 89 */
  1335. {
  1336. 1,
  1337. TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA,
  1338. TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA,
  1339. SSL_kEDH,
  1340. SSL_aNULL,
  1341. SSL_CAMELLIA256,
  1342. SSL_SHA1,
  1343. SSL_TLSV1,
  1344. SSL_NOT_EXP|SSL_HIGH,
  1345. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1346. 256,
  1347. 256,
  1348. },
  1349. #endif /* OPENSSL_NO_CAMELLIA */
  1350. #ifndef OPENSSL_NO_PSK
  1351. /* Cipher 8A */
  1352. {
  1353. 1,
  1354. TLS1_TXT_PSK_WITH_RC4_128_SHA,
  1355. TLS1_CK_PSK_WITH_RC4_128_SHA,
  1356. SSL_kPSK,
  1357. SSL_aPSK,
  1358. SSL_RC4,
  1359. SSL_SHA1,
  1360. SSL_TLSV1,
  1361. SSL_NOT_EXP|SSL_MEDIUM,
  1362. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1363. 128,
  1364. 128,
  1365. },
  1366. /* Cipher 8B */
  1367. {
  1368. 1,
  1369. TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA,
  1370. TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA,
  1371. SSL_kPSK,
  1372. SSL_aPSK,
  1373. SSL_3DES,
  1374. SSL_SHA1,
  1375. SSL_TLSV1,
  1376. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1377. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1378. 168,
  1379. 168,
  1380. },
  1381. /* Cipher 8C */
  1382. {
  1383. 1,
  1384. TLS1_TXT_PSK_WITH_AES_128_CBC_SHA,
  1385. TLS1_CK_PSK_WITH_AES_128_CBC_SHA,
  1386. SSL_kPSK,
  1387. SSL_aPSK,
  1388. SSL_AES128,
  1389. SSL_SHA1,
  1390. SSL_TLSV1,
  1391. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1392. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1393. 128,
  1394. 128,
  1395. },
  1396. /* Cipher 8D */
  1397. {
  1398. 1,
  1399. TLS1_TXT_PSK_WITH_AES_256_CBC_SHA,
  1400. TLS1_CK_PSK_WITH_AES_256_CBC_SHA,
  1401. SSL_kPSK,
  1402. SSL_aPSK,
  1403. SSL_AES256,
  1404. SSL_SHA1,
  1405. SSL_TLSV1,
  1406. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1407. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1408. 256,
  1409. 256,
  1410. },
  1411. #endif /* OPENSSL_NO_PSK */
  1412. #ifndef OPENSSL_NO_SEED
  1413. /* SEED ciphersuites from RFC4162 */
  1414. /* Cipher 96 */
  1415. {
  1416. 1,
  1417. TLS1_TXT_RSA_WITH_SEED_SHA,
  1418. TLS1_CK_RSA_WITH_SEED_SHA,
  1419. SSL_kRSA,
  1420. SSL_aRSA,
  1421. SSL_SEED,
  1422. SSL_SHA1,
  1423. SSL_TLSV1,
  1424. SSL_NOT_EXP|SSL_MEDIUM,
  1425. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1426. 128,
  1427. 128,
  1428. },
  1429. /* Cipher 97 */
  1430. {
  1431. 1,
  1432. TLS1_TXT_DH_DSS_WITH_SEED_SHA,
  1433. TLS1_CK_DH_DSS_WITH_SEED_SHA,
  1434. SSL_kDHd,
  1435. SSL_aDH,
  1436. SSL_SEED,
  1437. SSL_SHA1,
  1438. SSL_TLSV1,
  1439. SSL_NOT_EXP|SSL_MEDIUM,
  1440. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1441. 128,
  1442. 128,
  1443. },
  1444. /* Cipher 98 */
  1445. {
  1446. 1,
  1447. TLS1_TXT_DH_RSA_WITH_SEED_SHA,
  1448. TLS1_CK_DH_RSA_WITH_SEED_SHA,
  1449. SSL_kDHr,
  1450. SSL_aDH,
  1451. SSL_SEED,
  1452. SSL_SHA1,
  1453. SSL_TLSV1,
  1454. SSL_NOT_EXP|SSL_MEDIUM,
  1455. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1456. 128,
  1457. 128,
  1458. },
  1459. /* Cipher 99 */
  1460. {
  1461. 1,
  1462. TLS1_TXT_DHE_DSS_WITH_SEED_SHA,
  1463. TLS1_CK_DHE_DSS_WITH_SEED_SHA,
  1464. SSL_kEDH,
  1465. SSL_aDSS,
  1466. SSL_SEED,
  1467. SSL_SHA1,
  1468. SSL_TLSV1,
  1469. SSL_NOT_EXP|SSL_MEDIUM,
  1470. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1471. 128,
  1472. 128,
  1473. },
  1474. /* Cipher 9A */
  1475. {
  1476. 1,
  1477. TLS1_TXT_DHE_RSA_WITH_SEED_SHA,
  1478. TLS1_CK_DHE_RSA_WITH_SEED_SHA,
  1479. SSL_kEDH,
  1480. SSL_aRSA,
  1481. SSL_SEED,
  1482. SSL_SHA1,
  1483. SSL_TLSV1,
  1484. SSL_NOT_EXP|SSL_MEDIUM,
  1485. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1486. 128,
  1487. 128,
  1488. },
  1489. /* Cipher 9B */
  1490. {
  1491. 1,
  1492. TLS1_TXT_ADH_WITH_SEED_SHA,
  1493. TLS1_CK_ADH_WITH_SEED_SHA,
  1494. SSL_kEDH,
  1495. SSL_aNULL,
  1496. SSL_SEED,
  1497. SSL_SHA1,
  1498. SSL_TLSV1,
  1499. SSL_NOT_EXP|SSL_MEDIUM,
  1500. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1501. 128,
  1502. 128,
  1503. },
  1504. #endif /* OPENSSL_NO_SEED */
  1505. /* GCM ciphersuites from RFC5288 */
  1506. /* Cipher 9C */
  1507. {
  1508. 1,
  1509. TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256,
  1510. TLS1_CK_RSA_WITH_AES_128_GCM_SHA256,
  1511. SSL_kRSA,
  1512. SSL_aRSA,
  1513. SSL_AES128GCM,
  1514. SSL_AEAD,
  1515. SSL_TLSV1_2,
  1516. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1517. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  1518. 128,
  1519. 128,
  1520. },
  1521. /* Cipher 9D */
  1522. {
  1523. 1,
  1524. TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384,
  1525. TLS1_CK_RSA_WITH_AES_256_GCM_SHA384,
  1526. SSL_kRSA,
  1527. SSL_aRSA,
  1528. SSL_AES256GCM,
  1529. SSL_AEAD,
  1530. SSL_TLSV1_2,
  1531. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1532. SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
  1533. SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  1534. 256,
  1535. 256,
  1536. },
  1537. /* Cipher 9E */
  1538. {
  1539. 1,
  1540. TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256,
  1541. TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256,
  1542. SSL_kEDH,
  1543. SSL_aRSA,
  1544. SSL_AES128GCM,
  1545. SSL_AEAD,
  1546. SSL_TLSV1_2,
  1547. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1548. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  1549. 128,
  1550. 128,
  1551. },
  1552. /* Cipher 9F */
  1553. {
  1554. 1,
  1555. TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384,
  1556. TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384,
  1557. SSL_kEDH,
  1558. SSL_aRSA,
  1559. SSL_AES256GCM,
  1560. SSL_AEAD,
  1561. SSL_TLSV1_2,
  1562. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1563. SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
  1564. SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  1565. 256,
  1566. 256,
  1567. },
  1568. /* Cipher A0 */
  1569. {
  1570. 1,
  1571. TLS1_TXT_DH_RSA_WITH_AES_128_GCM_SHA256,
  1572. TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256,
  1573. SSL_kDHr,
  1574. SSL_aDH,
  1575. SSL_AES128GCM,
  1576. SSL_AEAD,
  1577. SSL_TLSV1_2,
  1578. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1579. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  1580. 128,
  1581. 128,
  1582. },
  1583. /* Cipher A1 */
  1584. {
  1585. 1,
  1586. TLS1_TXT_DH_RSA_WITH_AES_256_GCM_SHA384,
  1587. TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384,
  1588. SSL_kDHr,
  1589. SSL_aDH,
  1590. SSL_AES256GCM,
  1591. SSL_AEAD,
  1592. SSL_TLSV1_2,
  1593. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1594. SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
  1595. SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  1596. 256,
  1597. 256,
  1598. },
  1599. /* Cipher A2 */
  1600. {
  1601. 1,
  1602. TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256,
  1603. TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256,
  1604. SSL_kEDH,
  1605. SSL_aDSS,
  1606. SSL_AES128GCM,
  1607. SSL_AEAD,
  1608. SSL_TLSV1_2,
  1609. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1610. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  1611. 128,
  1612. 128,
  1613. },
  1614. /* Cipher A3 */
  1615. {
  1616. 1,
  1617. TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384,
  1618. TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384,
  1619. SSL_kEDH,
  1620. SSL_aDSS,
  1621. SSL_AES256GCM,
  1622. SSL_AEAD,
  1623. SSL_TLSV1_2,
  1624. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1625. SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
  1626. SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  1627. 256,
  1628. 256,
  1629. },
  1630. /* Cipher A4 */
  1631. {
  1632. 1,
  1633. TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256,
  1634. TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256,
  1635. SSL_kDHd,
  1636. SSL_aDH,
  1637. SSL_AES128GCM,
  1638. SSL_AEAD,
  1639. SSL_TLSV1_2,
  1640. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1641. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  1642. 128,
  1643. 128,
  1644. },
  1645. /* Cipher A5 */
  1646. {
  1647. 1,
  1648. TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384,
  1649. TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384,
  1650. SSL_kDHd,
  1651. SSL_aDH,
  1652. SSL_AES256GCM,
  1653. SSL_AEAD,
  1654. SSL_TLSV1_2,
  1655. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1656. SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
  1657. SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  1658. 256,
  1659. 256,
  1660. },
  1661. /* Cipher A6 */
  1662. {
  1663. 1,
  1664. TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256,
  1665. TLS1_CK_ADH_WITH_AES_128_GCM_SHA256,
  1666. SSL_kEDH,
  1667. SSL_aNULL,
  1668. SSL_AES128GCM,
  1669. SSL_AEAD,
  1670. SSL_TLSV1_2,
  1671. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1672. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  1673. 128,
  1674. 128,
  1675. },
  1676. /* Cipher A7 */
  1677. {
  1678. 1,
  1679. TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384,
  1680. TLS1_CK_ADH_WITH_AES_256_GCM_SHA384,
  1681. SSL_kEDH,
  1682. SSL_aNULL,
  1683. SSL_AES256GCM,
  1684. SSL_AEAD,
  1685. SSL_TLSV1_2,
  1686. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1687. SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
  1688. SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  1689. 256,
  1690. 256,
  1691. },
  1692. #ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
  1693. {
  1694. 1,
  1695. "SCSV",
  1696. SSL3_CK_SCSV,
  1697. 0,
  1698. 0,
  1699. 0,
  1700. 0,
  1701. 0,
  1702. 0,
  1703. 0,
  1704. 0,
  1705. 0
  1706. },
  1707. #endif
  1708. #ifndef OPENSSL_NO_ECDH
  1709. /* Cipher C001 */
  1710. {
  1711. 1,
  1712. TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA,
  1713. TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA,
  1714. SSL_kECDHe,
  1715. SSL_aECDH,
  1716. SSL_eNULL,
  1717. SSL_SHA1,
  1718. SSL_TLSV1,
  1719. SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS,
  1720. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1721. 0,
  1722. 0,
  1723. },
  1724. /* Cipher C002 */
  1725. {
  1726. 1,
  1727. TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA,
  1728. TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA,
  1729. SSL_kECDHe,
  1730. SSL_aECDH,
  1731. SSL_RC4,
  1732. SSL_SHA1,
  1733. SSL_TLSV1,
  1734. SSL_NOT_EXP|SSL_MEDIUM,
  1735. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1736. 128,
  1737. 128,
  1738. },
  1739. /* Cipher C003 */
  1740. {
  1741. 1,
  1742. TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA,
  1743. TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA,
  1744. SSL_kECDHe,
  1745. SSL_aECDH,
  1746. SSL_3DES,
  1747. SSL_SHA1,
  1748. SSL_TLSV1,
  1749. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1750. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1751. 168,
  1752. 168,
  1753. },
  1754. /* Cipher C004 */
  1755. {
  1756. 1,
  1757. TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
  1758. TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
  1759. SSL_kECDHe,
  1760. SSL_aECDH,
  1761. SSL_AES128,
  1762. SSL_SHA1,
  1763. SSL_TLSV1,
  1764. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1765. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1766. 128,
  1767. 128,
  1768. },
  1769. /* Cipher C005 */
  1770. {
  1771. 1,
  1772. TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
  1773. TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
  1774. SSL_kECDHe,
  1775. SSL_aECDH,
  1776. SSL_AES256,
  1777. SSL_SHA1,
  1778. SSL_TLSV1,
  1779. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1780. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1781. 256,
  1782. 256,
  1783. },
  1784. /* Cipher C006 */
  1785. {
  1786. 1,
  1787. TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA,
  1788. TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA,
  1789. SSL_kEECDH,
  1790. SSL_aECDSA,
  1791. SSL_eNULL,
  1792. SSL_SHA1,
  1793. SSL_TLSV1,
  1794. SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS,
  1795. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1796. 0,
  1797. 0,
  1798. },
  1799. /* Cipher C007 */
  1800. {
  1801. 1,
  1802. TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA,
  1803. TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA,
  1804. SSL_kEECDH,
  1805. SSL_aECDSA,
  1806. SSL_RC4,
  1807. SSL_SHA1,
  1808. SSL_TLSV1,
  1809. SSL_NOT_EXP|SSL_MEDIUM,
  1810. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1811. 128,
  1812. 128,
  1813. },
  1814. /* Cipher C008 */
  1815. {
  1816. 1,
  1817. TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
  1818. TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA,
  1819. SSL_kEECDH,
  1820. SSL_aECDSA,
  1821. SSL_3DES,
  1822. SSL_SHA1,
  1823. SSL_TLSV1,
  1824. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1825. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1826. 168,
  1827. 168,
  1828. },
  1829. /* Cipher C009 */
  1830. {
  1831. 1,
  1832. TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
  1833. TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
  1834. SSL_kEECDH,
  1835. SSL_aECDSA,
  1836. SSL_AES128,
  1837. SSL_SHA1,
  1838. SSL_TLSV1,
  1839. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1840. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1841. 128,
  1842. 128,
  1843. },
  1844. /* Cipher C00A */
  1845. {
  1846. 1,
  1847. TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
  1848. TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
  1849. SSL_kEECDH,
  1850. SSL_aECDSA,
  1851. SSL_AES256,
  1852. SSL_SHA1,
  1853. SSL_TLSV1,
  1854. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1855. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1856. 256,
  1857. 256,
  1858. },
  1859. /* Cipher C00B */
  1860. {
  1861. 1,
  1862. TLS1_TXT_ECDH_RSA_WITH_NULL_SHA,
  1863. TLS1_CK_ECDH_RSA_WITH_NULL_SHA,
  1864. SSL_kECDHr,
  1865. SSL_aECDH,
  1866. SSL_eNULL,
  1867. SSL_SHA1,
  1868. SSL_TLSV1,
  1869. SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS,
  1870. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1871. 0,
  1872. 0,
  1873. },
  1874. /* Cipher C00C */
  1875. {
  1876. 1,
  1877. TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA,
  1878. TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA,
  1879. SSL_kECDHr,
  1880. SSL_aECDH,
  1881. SSL_RC4,
  1882. SSL_SHA1,
  1883. SSL_TLSV1,
  1884. SSL_NOT_EXP|SSL_MEDIUM,
  1885. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1886. 128,
  1887. 128,
  1888. },
  1889. /* Cipher C00D */
  1890. {
  1891. 1,
  1892. TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA,
  1893. TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA,
  1894. SSL_kECDHr,
  1895. SSL_aECDH,
  1896. SSL_3DES,
  1897. SSL_SHA1,
  1898. SSL_TLSV1,
  1899. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1900. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1901. 168,
  1902. 168,
  1903. },
  1904. /* Cipher C00E */
  1905. {
  1906. 1,
  1907. TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA,
  1908. TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA,
  1909. SSL_kECDHr,
  1910. SSL_aECDH,
  1911. SSL_AES128,
  1912. SSL_SHA1,
  1913. SSL_TLSV1,
  1914. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1915. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1916. 128,
  1917. 128,
  1918. },
  1919. /* Cipher C00F */
  1920. {
  1921. 1,
  1922. TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA,
  1923. TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA,
  1924. SSL_kECDHr,
  1925. SSL_aECDH,
  1926. SSL_AES256,
  1927. SSL_SHA1,
  1928. SSL_TLSV1,
  1929. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1930. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1931. 256,
  1932. 256,
  1933. },
  1934. /* Cipher C010 */
  1935. {
  1936. 1,
  1937. TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA,
  1938. TLS1_CK_ECDHE_RSA_WITH_NULL_SHA,
  1939. SSL_kEECDH,
  1940. SSL_aRSA,
  1941. SSL_eNULL,
  1942. SSL_SHA1,
  1943. SSL_TLSV1,
  1944. SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS,
  1945. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1946. 0,
  1947. 0,
  1948. },
  1949. /* Cipher C011 */
  1950. {
  1951. 1,
  1952. TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA,
  1953. TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA,
  1954. SSL_kEECDH,
  1955. SSL_aRSA,
  1956. SSL_RC4,
  1957. SSL_SHA1,
  1958. SSL_TLSV1,
  1959. SSL_NOT_EXP|SSL_MEDIUM,
  1960. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1961. 128,
  1962. 128,
  1963. },
  1964. /* Cipher C012 */
  1965. {
  1966. 1,
  1967. TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
  1968. TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA,
  1969. SSL_kEECDH,
  1970. SSL_aRSA,
  1971. SSL_3DES,
  1972. SSL_SHA1,
  1973. SSL_TLSV1,
  1974. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1975. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1976. 168,
  1977. 168,
  1978. },
  1979. /* Cipher C013 */
  1980. {
  1981. 1,
  1982. TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA,
  1983. TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA,
  1984. SSL_kEECDH,
  1985. SSL_aRSA,
  1986. SSL_AES128,
  1987. SSL_SHA1,
  1988. SSL_TLSV1,
  1989. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  1990. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  1991. 128,
  1992. 128,
  1993. },
  1994. /* Cipher C014 */
  1995. {
  1996. 1,
  1997. TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA,
  1998. TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA,
  1999. SSL_kEECDH,
  2000. SSL_aRSA,
  2001. SSL_AES256,
  2002. SSL_SHA1,
  2003. SSL_TLSV1,
  2004. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  2005. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  2006. 256,
  2007. 256,
  2008. },
  2009. /* Cipher C015 */
  2010. {
  2011. 1,
  2012. TLS1_TXT_ECDH_anon_WITH_NULL_SHA,
  2013. TLS1_CK_ECDH_anon_WITH_NULL_SHA,
  2014. SSL_kEECDH,
  2015. SSL_aNULL,
  2016. SSL_eNULL,
  2017. SSL_SHA1,
  2018. SSL_TLSV1,
  2019. SSL_NOT_EXP|SSL_STRONG_NONE|SSL_FIPS,
  2020. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  2021. 0,
  2022. 0,
  2023. },
  2024. /* Cipher C016 */
  2025. {
  2026. 1,
  2027. TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA,
  2028. TLS1_CK_ECDH_anon_WITH_RC4_128_SHA,
  2029. SSL_kEECDH,
  2030. SSL_aNULL,
  2031. SSL_RC4,
  2032. SSL_SHA1,
  2033. SSL_TLSV1,
  2034. SSL_NOT_EXP|SSL_MEDIUM,
  2035. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  2036. 128,
  2037. 128,
  2038. },
  2039. /* Cipher C017 */
  2040. {
  2041. 1,
  2042. TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA,
  2043. TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA,
  2044. SSL_kEECDH,
  2045. SSL_aNULL,
  2046. SSL_3DES,
  2047. SSL_SHA1,
  2048. SSL_TLSV1,
  2049. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  2050. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  2051. 168,
  2052. 168,
  2053. },
  2054. /* Cipher C018 */
  2055. {
  2056. 1,
  2057. TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA,
  2058. TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA,
  2059. SSL_kEECDH,
  2060. SSL_aNULL,
  2061. SSL_AES128,
  2062. SSL_SHA1,
  2063. SSL_TLSV1,
  2064. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  2065. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  2066. 128,
  2067. 128,
  2068. },
  2069. /* Cipher C019 */
  2070. {
  2071. 1,
  2072. TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA,
  2073. TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA,
  2074. SSL_kEECDH,
  2075. SSL_aNULL,
  2076. SSL_AES256,
  2077. SSL_SHA1,
  2078. SSL_TLSV1,
  2079. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  2080. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  2081. 256,
  2082. 256,
  2083. },
  2084. #endif /* OPENSSL_NO_ECDH */
  2085. #ifndef OPENSSL_NO_ECDH
  2086. /* HMAC based TLS v1.2 ciphersuites from RFC5289 */
  2087. /* Cipher C023 */
  2088. {
  2089. 1,
  2090. TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256,
  2091. TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256,
  2092. SSL_kEECDH,
  2093. SSL_aECDSA,
  2094. SSL_AES128,
  2095. SSL_SHA256,
  2096. SSL_TLSV1_2,
  2097. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  2098. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256,
  2099. 128,
  2100. 128,
  2101. },
  2102. /* Cipher C024 */
  2103. {
  2104. 1,
  2105. TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384,
  2106. TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384,
  2107. SSL_kEECDH,
  2108. SSL_aECDSA,
  2109. SSL_AES256,
  2110. SSL_SHA384,
  2111. SSL_TLSV1_2,
  2112. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  2113. SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
  2114. 256,
  2115. 256,
  2116. },
  2117. /* Cipher C025 */
  2118. {
  2119. 1,
  2120. TLS1_TXT_ECDH_ECDSA_WITH_AES_128_SHA256,
  2121. TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256,
  2122. SSL_kECDHe,
  2123. SSL_aECDH,
  2124. SSL_AES128,
  2125. SSL_SHA256,
  2126. SSL_TLSV1_2,
  2127. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  2128. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256,
  2129. 128,
  2130. 128,
  2131. },
  2132. /* Cipher C026 */
  2133. {
  2134. 1,
  2135. TLS1_TXT_ECDH_ECDSA_WITH_AES_256_SHA384,
  2136. TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384,
  2137. SSL_kECDHe,
  2138. SSL_aECDH,
  2139. SSL_AES256,
  2140. SSL_SHA384,
  2141. SSL_TLSV1_2,
  2142. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  2143. SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
  2144. 256,
  2145. 256,
  2146. },
  2147. /* Cipher C027 */
  2148. {
  2149. 1,
  2150. TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256,
  2151. TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256,
  2152. SSL_kEECDH,
  2153. SSL_aRSA,
  2154. SSL_AES128,
  2155. SSL_SHA256,
  2156. SSL_TLSV1_2,
  2157. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  2158. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256,
  2159. 128,
  2160. 128,
  2161. },
  2162. /* Cipher C028 */
  2163. {
  2164. 1,
  2165. TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384,
  2166. TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384,
  2167. SSL_kEECDH,
  2168. SSL_aRSA,
  2169. SSL_AES256,
  2170. SSL_SHA384,
  2171. SSL_TLSV1_2,
  2172. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  2173. SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
  2174. 256,
  2175. 256,
  2176. },
  2177. /* Cipher C029 */
  2178. {
  2179. 1,
  2180. TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256,
  2181. TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256,
  2182. SSL_kECDHr,
  2183. SSL_aECDH,
  2184. SSL_AES128,
  2185. SSL_SHA256,
  2186. SSL_TLSV1_2,
  2187. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  2188. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256,
  2189. 128,
  2190. 128,
  2191. },
  2192. /* Cipher C02A */
  2193. {
  2194. 1,
  2195. TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384,
  2196. TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384,
  2197. SSL_kECDHr,
  2198. SSL_aECDH,
  2199. SSL_AES256,
  2200. SSL_SHA384,
  2201. SSL_TLSV1_2,
  2202. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  2203. SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
  2204. 256,
  2205. 256,
  2206. },
  2207. /* GCM based TLS v1.2 ciphersuites from RFC5289 */
  2208. /* Cipher C02B */
  2209. {
  2210. 1,
  2211. TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
  2212. TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
  2213. SSL_kEECDH,
  2214. SSL_aECDSA,
  2215. SSL_AES128GCM,
  2216. SSL_AEAD,
  2217. SSL_TLSV1_2,
  2218. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  2219. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  2220. 128,
  2221. 128,
  2222. },
  2223. /* Cipher C02C */
  2224. {
  2225. 1,
  2226. TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
  2227. TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
  2228. SSL_kEECDH,
  2229. SSL_aECDSA,
  2230. SSL_AES256GCM,
  2231. SSL_AEAD,
  2232. SSL_TLSV1_2,
  2233. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  2234. SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
  2235. SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  2236. 256,
  2237. 256,
  2238. },
  2239. /* Cipher C02D */
  2240. {
  2241. 1,
  2242. TLS1_TXT_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,
  2243. TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,
  2244. SSL_kECDHe,
  2245. SSL_aECDH,
  2246. SSL_AES128GCM,
  2247. SSL_AEAD,
  2248. SSL_TLSV1_2,
  2249. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  2250. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  2251. 128,
  2252. 128,
  2253. },
  2254. /* Cipher C02E */
  2255. {
  2256. 1,
  2257. TLS1_TXT_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,
  2258. TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,
  2259. SSL_kECDHe,
  2260. SSL_aECDH,
  2261. SSL_AES256GCM,
  2262. SSL_AEAD,
  2263. SSL_TLSV1_2,
  2264. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  2265. SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
  2266. SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  2267. 256,
  2268. 256,
  2269. },
  2270. /* Cipher C02F */
  2271. {
  2272. 1,
  2273. TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
  2274. TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
  2275. SSL_kEECDH,
  2276. SSL_aRSA,
  2277. SSL_AES128GCM,
  2278. SSL_AEAD,
  2279. SSL_TLSV1_2,
  2280. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  2281. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  2282. 128,
  2283. 128,
  2284. },
  2285. /* Cipher C030 */
  2286. {
  2287. 1,
  2288. TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
  2289. TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
  2290. SSL_kEECDH,
  2291. SSL_aRSA,
  2292. SSL_AES256GCM,
  2293. SSL_AEAD,
  2294. SSL_TLSV1_2,
  2295. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  2296. SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
  2297. SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  2298. 256,
  2299. 256,
  2300. },
  2301. /* Cipher C031 */
  2302. {
  2303. 1,
  2304. TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256,
  2305. TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256,
  2306. SSL_kECDHr,
  2307. SSL_aECDH,
  2308. SSL_AES128GCM,
  2309. SSL_AEAD,
  2310. SSL_TLSV1_2,
  2311. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  2312. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  2313. 128,
  2314. 128,
  2315. },
  2316. /* Cipher C032 */
  2317. {
  2318. 1,
  2319. TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384,
  2320. TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384,
  2321. SSL_kECDHr,
  2322. SSL_aECDH,
  2323. SSL_AES256GCM,
  2324. SSL_AEAD,
  2325. SSL_TLSV1_2,
  2326. SSL_NOT_EXP|SSL_HIGH|SSL_FIPS,
  2327. SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
  2328. SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  2329. 256,
  2330. 256,
  2331. },
  2332. #ifndef OPENSSL_NO_PSK
  2333. /* ECDH PSK ciphersuites */
  2334. /* Cipher CAFE */
  2335. {
  2336. 1,
  2337. TLS1_TXT_ECDHE_PSK_WITH_AES_128_GCM_SHA256,
  2338. TLS1_CK_ECDHE_PSK_WITH_AES_128_GCM_SHA256,
  2339. SSL_kEECDH,
  2340. SSL_aPSK,
  2341. SSL_AES128GCM,
  2342. SSL_AEAD,
  2343. SSL_TLSV1_2,
  2344. SSL_NOT_EXP|SSL_HIGH,
  2345. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
  2346. SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  2347. 128,
  2348. 128,
  2349. },
  2350. #endif /* OPENSSL_NO_PSK */
  2351. #endif /* OPENSSL_NO_ECDH */
  2352. #ifdef TEMP_GOST_TLS
  2353. /* Cipher FF00 */
  2354. {
  2355. 1,
  2356. "GOST-MD5",
  2357. 0x0300ff00,
  2358. SSL_kRSA,
  2359. SSL_aRSA,
  2360. SSL_eGOST2814789CNT,
  2361. SSL_MD5,
  2362. SSL_TLSV1,
  2363. SSL_NOT_EXP|SSL_HIGH,
  2364. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  2365. 256,
  2366. 256,
  2367. },
  2368. {
  2369. 1,
  2370. "GOST-GOST94",
  2371. 0x0300ff01,
  2372. SSL_kRSA,
  2373. SSL_aRSA,
  2374. SSL_eGOST2814789CNT,
  2375. SSL_GOST94,
  2376. SSL_TLSV1,
  2377. SSL_NOT_EXP|SSL_HIGH,
  2378. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  2379. 256,
  2380. 256
  2381. },
  2382. {
  2383. 1,
  2384. "GOST-GOST89MAC",
  2385. 0x0300ff02,
  2386. SSL_kRSA,
  2387. SSL_aRSA,
  2388. SSL_eGOST2814789CNT,
  2389. SSL_GOST89MAC,
  2390. SSL_TLSV1,
  2391. SSL_NOT_EXP|SSL_HIGH,
  2392. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  2393. 256,
  2394. 256
  2395. },
  2396. {
  2397. 1,
  2398. "GOST-GOST89STREAM",
  2399. 0x0300ff03,
  2400. SSL_kRSA,
  2401. SSL_aRSA,
  2402. SSL_eGOST2814789CNT,
  2403. SSL_GOST89MAC,
  2404. SSL_TLSV1,
  2405. SSL_NOT_EXP|SSL_HIGH,
  2406. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF|TLS1_STREAM_MAC,
  2407. 256,
  2408. 256
  2409. },
  2410. #endif
  2411. {
  2412. 1,
  2413. TLS1_TXT_ECDHE_RSA_WITH_CHACHA20_POLY1305,
  2414. TLS1_CK_ECDHE_RSA_CHACHA20_POLY1305,
  2415. SSL_kEECDH,
  2416. SSL_aRSA,
  2417. SSL_CHACHA20POLY1305,
  2418. SSL_AEAD,
  2419. SSL_TLSV1_2,
  2420. SSL_NOT_EXP|SSL_HIGH,
  2421. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(0),
  2422. 256,
  2423. 0,
  2424. },
  2425. {
  2426. 1,
  2427. TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
  2428. TLS1_CK_ECDHE_ECDSA_CHACHA20_POLY1305,
  2429. SSL_kEECDH,
  2430. SSL_aECDSA,
  2431. SSL_CHACHA20POLY1305,
  2432. SSL_AEAD,
  2433. SSL_TLSV1_2,
  2434. SSL_NOT_EXP|SSL_HIGH,
  2435. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(0),
  2436. 256,
  2437. 0,
  2438. },
  2439. {
  2440. 1,
  2441. TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305,
  2442. TLS1_CK_DHE_RSA_CHACHA20_POLY1305,
  2443. SSL_kEDH,
  2444. SSL_aRSA,
  2445. SSL_CHACHA20POLY1305,
  2446. SSL_AEAD,
  2447. SSL_TLSV1_2,
  2448. SSL_NOT_EXP|SSL_HIGH,
  2449. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(0),
  2450. 256,
  2451. 0,
  2452. },
  2453. /* end of list */
  2454. };
  2455. SSL3_ENC_METHOD SSLv3_enc_data={
  2456. ssl3_enc,
  2457. n_ssl3_mac,
  2458. ssl3_setup_key_block,
  2459. ssl3_generate_master_secret,
  2460. ssl3_change_cipher_state,
  2461. ssl3_final_finish_mac,
  2462. MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH,
  2463. ssl3_cert_verify_mac,
  2464. SSL3_MD_CLIENT_FINISHED_CONST,4,
  2465. SSL3_MD_SERVER_FINISHED_CONST,4,
  2466. ssl3_alert_code,
  2467. (int (*)(SSL *, unsigned char *, size_t, const char *,
  2468. size_t, const unsigned char *, size_t,
  2469. int use_context))ssl_undefined_function,
  2470. 0,
  2471. SSL3_HM_HEADER_LENGTH,
  2472. ssl3_set_handshake_header,
  2473. ssl3_handshake_write
  2474. };
  2475. long ssl3_default_timeout(void)
  2476. {
  2477. /* 2 hours, the 24 hours mentioned in the SSLv3 spec
  2478. * is way too long for http, the cache would over fill */
  2479. return(60*60*2);
  2480. }
  2481. int ssl3_num_ciphers(void)
  2482. {
  2483. return(SSL3_NUM_CIPHERS);
  2484. }
  2485. const SSL_CIPHER *ssl3_get_cipher(unsigned int u)
  2486. {
  2487. if (u < SSL3_NUM_CIPHERS)
  2488. return(&(ssl3_ciphers[SSL3_NUM_CIPHERS-1-u]));
  2489. else
  2490. return(NULL);
  2491. }
  2492. int ssl3_pending(const SSL *s)
  2493. {
  2494. if (s->rstate == SSL_ST_READ_BODY)
  2495. return 0;
  2496. return (s->s3->rrec.type == SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0;
  2497. }
  2498. void ssl3_set_handshake_header(SSL *s, int htype, unsigned long len)
  2499. {
  2500. unsigned char *p = (unsigned char *)s->init_buf->data;
  2501. *(p++) = htype;
  2502. l2n3(len, p);
  2503. s->init_num = (int)len + SSL3_HM_HEADER_LENGTH;
  2504. s->init_off = 0;
  2505. }
  2506. int ssl3_handshake_write(SSL *s)
  2507. {
  2508. return ssl3_do_write(s, SSL3_RT_HANDSHAKE);
  2509. }
  2510. int ssl3_new(SSL *s)
  2511. {
  2512. SSL3_STATE *s3;
  2513. if ((s3=OPENSSL_malloc(sizeof *s3)) == NULL) goto err;
  2514. memset(s3,0,sizeof *s3);
  2515. memset(s3->rrec.seq_num,0,sizeof(s3->rrec.seq_num));
  2516. memset(s3->wrec.seq_num,0,sizeof(s3->wrec.seq_num));
  2517. s->s3=s3;
  2518. #if !defined(OPENSSL_NO_TLSEXT)
  2519. s->tlsext_channel_id_enabled = s->ctx->tlsext_channel_id_enabled;
  2520. if (s->ctx->tlsext_channel_id_private)
  2521. s->tlsext_channel_id_private = EVP_PKEY_dup(s->ctx->tlsext_channel_id_private);
  2522. #endif
  2523. s->method->ssl_clear(s);
  2524. return(1);
  2525. err:
  2526. return(0);
  2527. }
  2528. void ssl3_free(SSL *s)
  2529. {
  2530. if(s == NULL)
  2531. return;
  2532. #ifdef TLSEXT_TYPE_opaque_prf_input
  2533. if (s->s3->client_opaque_prf_input != NULL)
  2534. OPENSSL_free(s->s3->client_opaque_prf_input);
  2535. if (s->s3->server_opaque_prf_input != NULL)
  2536. OPENSSL_free(s->s3->server_opaque_prf_input);
  2537. #endif
  2538. ssl3_cleanup_key_block(s);
  2539. if (s->s3->rbuf.buf != NULL)
  2540. ssl3_release_read_buffer(s);
  2541. if (s->s3->wbuf.buf != NULL)
  2542. ssl3_release_write_buffer(s);
  2543. if (s->s3->rrec.comp != NULL)
  2544. OPENSSL_free(s->s3->rrec.comp);
  2545. #ifndef OPENSSL_NO_DH
  2546. if (s->s3->tmp.dh != NULL)
  2547. DH_free(s->s3->tmp.dh);
  2548. #endif
  2549. #ifndef OPENSSL_NO_ECDH
  2550. if (s->s3->tmp.ecdh != NULL)
  2551. EC_KEY_free(s->s3->tmp.ecdh);
  2552. #endif
  2553. if (s->s3->tmp.ca_names != NULL)
  2554. sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free);
  2555. if (s->s3->handshake_buffer) {
  2556. BIO_free(s->s3->handshake_buffer);
  2557. }
  2558. if (s->s3->handshake_dgst) ssl3_free_digest_list(s);
  2559. #ifndef OPENSSL_NO_TLSEXT
  2560. if (s->s3->alpn_selected)
  2561. OPENSSL_free(s->s3->alpn_selected);
  2562. #endif
  2563. #ifndef OPENSSL_NO_TLSEXT
  2564. if (s->s3->tlsext_authz_client_types != NULL)
  2565. OPENSSL_free(s->s3->tlsext_authz_client_types);
  2566. if (s->s3->tlsext_custom_types != NULL)
  2567. OPENSSL_free(s->s3->tlsext_custom_types);
  2568. #endif
  2569. OPENSSL_cleanse(s->s3,sizeof *s->s3);
  2570. OPENSSL_free(s->s3);
  2571. s->s3=NULL;
  2572. }
  2573. void ssl3_clear(SSL *s)
  2574. {
  2575. unsigned char *rp,*wp;
  2576. size_t rlen, wlen;
  2577. int init_extra;
  2578. #ifdef TLSEXT_TYPE_opaque_prf_input
  2579. if (s->s3->client_opaque_prf_input != NULL)
  2580. OPENSSL_free(s->s3->client_opaque_prf_input);
  2581. s->s3->client_opaque_prf_input = NULL;
  2582. if (s->s3->server_opaque_prf_input != NULL)
  2583. OPENSSL_free(s->s3->server_opaque_prf_input);
  2584. s->s3->server_opaque_prf_input = NULL;
  2585. #endif
  2586. ssl3_cleanup_key_block(s);
  2587. if (s->s3->tmp.ca_names != NULL)
  2588. sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free);
  2589. if (s->s3->rrec.comp != NULL)
  2590. {
  2591. OPENSSL_free(s->s3->rrec.comp);
  2592. s->s3->rrec.comp=NULL;
  2593. }
  2594. #ifndef OPENSSL_NO_DH
  2595. if (s->s3->tmp.dh != NULL)
  2596. {
  2597. DH_free(s->s3->tmp.dh);
  2598. s->s3->tmp.dh = NULL;
  2599. }
  2600. #endif
  2601. #ifndef OPENSSL_NO_ECDH
  2602. if (s->s3->tmp.ecdh != NULL)
  2603. {
  2604. EC_KEY_free(s->s3->tmp.ecdh);
  2605. s->s3->tmp.ecdh = NULL;
  2606. }
  2607. #endif
  2608. #ifndef OPENSSL_NO_TLSEXT
  2609. if (s->s3->tlsext_authz_client_types != NULL)
  2610. {
  2611. OPENSSL_free(s->s3->tlsext_authz_client_types);
  2612. s->s3->tlsext_authz_client_types = NULL;
  2613. }
  2614. if (s->s3->tlsext_custom_types != NULL)
  2615. {
  2616. OPENSSL_free(s->s3->tlsext_custom_types);
  2617. s->s3->tlsext_custom_types = NULL;
  2618. }
  2619. s->s3->tlsext_custom_types_count = 0;
  2620. #ifndef OPENSSL_NO_EC
  2621. s->s3->is_probably_safari = 0;
  2622. #endif /* !OPENSSL_NO_EC */
  2623. #endif /* !OPENSSL_NO_TLSEXT */
  2624. rp = s->s3->rbuf.buf;
  2625. wp = s->s3->wbuf.buf;
  2626. rlen = s->s3->rbuf.len;
  2627. wlen = s->s3->wbuf.len;
  2628. init_extra = s->s3->init_extra;
  2629. if (s->s3->handshake_buffer) {
  2630. BIO_free(s->s3->handshake_buffer);
  2631. s->s3->handshake_buffer = NULL;
  2632. }
  2633. if (s->s3->handshake_dgst) {
  2634. ssl3_free_digest_list(s);
  2635. }
  2636. #if !defined(OPENSSL_NO_TLSEXT)
  2637. if (s->s3->alpn_selected)
  2638. {
  2639. free(s->s3->alpn_selected);
  2640. s->s3->alpn_selected = NULL;
  2641. }
  2642. #endif
  2643. memset(s->s3,0,sizeof *s->s3);
  2644. s->s3->rbuf.buf = rp;
  2645. s->s3->wbuf.buf = wp;
  2646. s->s3->rbuf.len = rlen;
  2647. s->s3->wbuf.len = wlen;
  2648. s->s3->init_extra = init_extra;
  2649. ssl_free_wbio_buffer(s);
  2650. s->packet_length=0;
  2651. s->s3->renegotiate=0;
  2652. s->s3->total_renegotiations=0;
  2653. s->s3->num_renegotiations=0;
  2654. s->s3->in_read_app_data=0;
  2655. s->version=SSL3_VERSION;
  2656. #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
  2657. if (s->next_proto_negotiated)
  2658. {
  2659. OPENSSL_free(s->next_proto_negotiated);
  2660. s->next_proto_negotiated = NULL;
  2661. s->next_proto_negotiated_len = 0;
  2662. }
  2663. #endif
  2664. #if !defined(OPENSSL_NO_TLSEXT)
  2665. s->s3->tlsext_channel_id_valid = 0;
  2666. #endif
  2667. }
  2668. static int ssl3_set_req_cert_type(CERT *c, const unsigned char *p, size_t len);
  2669. long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
  2670. {
  2671. int ret=0;
  2672. #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA)
  2673. if (
  2674. #ifndef OPENSSL_NO_RSA
  2675. cmd == SSL_CTRL_SET_TMP_RSA ||
  2676. cmd == SSL_CTRL_SET_TMP_RSA_CB ||
  2677. #endif
  2678. #ifndef OPENSSL_NO_DSA
  2679. cmd == SSL_CTRL_SET_TMP_DH ||
  2680. cmd == SSL_CTRL_SET_TMP_DH_CB ||
  2681. #endif
  2682. 0)
  2683. {
  2684. if (!ssl_cert_inst(&s->cert))
  2685. {
  2686. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_MALLOC_FAILURE);
  2687. return(0);
  2688. }
  2689. }
  2690. #endif
  2691. switch (cmd)
  2692. {
  2693. case SSL_CTRL_GET_SESSION_REUSED:
  2694. ret=s->hit;
  2695. break;
  2696. case SSL_CTRL_GET_CLIENT_CERT_REQUEST:
  2697. break;
  2698. case SSL_CTRL_GET_NUM_RENEGOTIATIONS:
  2699. ret=s->s3->num_renegotiations;
  2700. break;
  2701. case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS:
  2702. ret=s->s3->num_renegotiations;
  2703. s->s3->num_renegotiations=0;
  2704. break;
  2705. case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS:
  2706. ret=s->s3->total_renegotiations;
  2707. break;
  2708. case SSL_CTRL_GET_FLAGS:
  2709. ret=(int)(s->s3->flags);
  2710. break;
  2711. #ifndef OPENSSL_NO_RSA
  2712. case SSL_CTRL_NEED_TMP_RSA:
  2713. if ((s->cert != NULL) && (s->cert->rsa_tmp == NULL) &&
  2714. ((s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) ||
  2715. (EVP_PKEY_size(s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512/8))))
  2716. ret = 1;
  2717. break;
  2718. case SSL_CTRL_SET_TMP_RSA:
  2719. {
  2720. RSA *rsa = (RSA *)parg;
  2721. if (rsa == NULL)
  2722. {
  2723. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_PASSED_NULL_PARAMETER);
  2724. return(ret);
  2725. }
  2726. if ((rsa = RSAPrivateKey_dup(rsa)) == NULL)
  2727. {
  2728. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_RSA_LIB);
  2729. return(ret);
  2730. }
  2731. if (s->cert->rsa_tmp != NULL)
  2732. RSA_free(s->cert->rsa_tmp);
  2733. s->cert->rsa_tmp = rsa;
  2734. ret = 1;
  2735. }
  2736. break;
  2737. case SSL_CTRL_SET_TMP_RSA_CB:
  2738. {
  2739. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  2740. return(ret);
  2741. }
  2742. break;
  2743. #endif
  2744. #ifndef OPENSSL_NO_DH
  2745. case SSL_CTRL_SET_TMP_DH:
  2746. {
  2747. DH *dh = (DH *)parg;
  2748. if (dh == NULL)
  2749. {
  2750. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_PASSED_NULL_PARAMETER);
  2751. return(ret);
  2752. }
  2753. if ((dh = DHparams_dup(dh)) == NULL)
  2754. {
  2755. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_DH_LIB);
  2756. return(ret);
  2757. }
  2758. if (!(s->options & SSL_OP_SINGLE_DH_USE))
  2759. {
  2760. if (!DH_generate_key(dh))
  2761. {
  2762. DH_free(dh);
  2763. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_DH_LIB);
  2764. return(ret);
  2765. }
  2766. }
  2767. if (s->cert->dh_tmp != NULL)
  2768. DH_free(s->cert->dh_tmp);
  2769. s->cert->dh_tmp = dh;
  2770. ret = 1;
  2771. }
  2772. break;
  2773. case SSL_CTRL_SET_TMP_DH_CB:
  2774. {
  2775. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  2776. return(ret);
  2777. }
  2778. break;
  2779. #endif
  2780. #ifndef OPENSSL_NO_ECDH
  2781. case SSL_CTRL_SET_TMP_ECDH:
  2782. {
  2783. EC_KEY *ecdh = NULL;
  2784. if (parg == NULL)
  2785. {
  2786. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_PASSED_NULL_PARAMETER);
  2787. return(ret);
  2788. }
  2789. if (!EC_KEY_up_ref((EC_KEY *)parg))
  2790. {
  2791. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_ECDH_LIB);
  2792. return(ret);
  2793. }
  2794. ecdh = (EC_KEY *)parg;
  2795. if (!(s->options & SSL_OP_SINGLE_ECDH_USE))
  2796. {
  2797. if (!EC_KEY_generate_key(ecdh))
  2798. {
  2799. EC_KEY_free(ecdh);
  2800. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_ECDH_LIB);
  2801. return(ret);
  2802. }
  2803. }
  2804. if (s->cert->ecdh_tmp != NULL)
  2805. EC_KEY_free(s->cert->ecdh_tmp);
  2806. s->cert->ecdh_tmp = ecdh;
  2807. ret = 1;
  2808. }
  2809. break;
  2810. case SSL_CTRL_SET_TMP_ECDH_CB:
  2811. {
  2812. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  2813. return(ret);
  2814. }
  2815. break;
  2816. #endif /* !OPENSSL_NO_ECDH */
  2817. #ifndef OPENSSL_NO_TLSEXT
  2818. case SSL_CTRL_SET_TLSEXT_HOSTNAME:
  2819. if (larg == TLSEXT_NAMETYPE_host_name)
  2820. {
  2821. if (s->tlsext_hostname != NULL)
  2822. OPENSSL_free(s->tlsext_hostname);
  2823. s->tlsext_hostname = NULL;
  2824. ret = 1;
  2825. if (parg == NULL)
  2826. break;
  2827. if (strlen((char *)parg) > TLSEXT_MAXLEN_host_name)
  2828. {
  2829. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, SSL_R_SSL3_EXT_INVALID_SERVERNAME);
  2830. return 0;
  2831. }
  2832. if ((s->tlsext_hostname = BUF_strdup((char *)parg)) == NULL)
  2833. {
  2834. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_INTERNAL_ERROR);
  2835. return 0;
  2836. }
  2837. }
  2838. else
  2839. {
  2840. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE);
  2841. return 0;
  2842. }
  2843. break;
  2844. case SSL_CTRL_SET_TLSEXT_DEBUG_ARG:
  2845. s->tlsext_debug_arg=parg;
  2846. ret = 1;
  2847. break;
  2848. #ifdef TLSEXT_TYPE_opaque_prf_input
  2849. case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT:
  2850. if (larg > 12288) /* actual internal limit is 2^16 for the complete hello message
  2851. * (including the cert chain and everything) */
  2852. {
  2853. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, SSL_R_OPAQUE_PRF_INPUT_TOO_LONG);
  2854. break;
  2855. }
  2856. if (s->tlsext_opaque_prf_input != NULL)
  2857. OPENSSL_free(s->tlsext_opaque_prf_input);
  2858. if ((size_t)larg == 0)
  2859. s->tlsext_opaque_prf_input = OPENSSL_malloc(1); /* dummy byte just to get non-NULL */
  2860. else
  2861. s->tlsext_opaque_prf_input = BUF_memdup(parg, (size_t)larg);
  2862. if (s->tlsext_opaque_prf_input != NULL)
  2863. {
  2864. s->tlsext_opaque_prf_input_len = (size_t)larg;
  2865. ret = 1;
  2866. }
  2867. else
  2868. s->tlsext_opaque_prf_input_len = 0;
  2869. break;
  2870. #endif
  2871. case SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE:
  2872. s->tlsext_status_type=larg;
  2873. ret = 1;
  2874. break;
  2875. case SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS:
  2876. *(STACK_OF(X509_EXTENSION) **)parg = s->tlsext_ocsp_exts;
  2877. ret = 1;
  2878. break;
  2879. case SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS:
  2880. s->tlsext_ocsp_exts = parg;
  2881. ret = 1;
  2882. break;
  2883. case SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS:
  2884. *(STACK_OF(OCSP_RESPID) **)parg = s->tlsext_ocsp_ids;
  2885. ret = 1;
  2886. break;
  2887. case SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS:
  2888. s->tlsext_ocsp_ids = parg;
  2889. ret = 1;
  2890. break;
  2891. case SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP:
  2892. *(unsigned char **)parg = s->tlsext_ocsp_resp;
  2893. return s->tlsext_ocsp_resplen;
  2894. case SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP:
  2895. if (s->tlsext_ocsp_resp)
  2896. OPENSSL_free(s->tlsext_ocsp_resp);
  2897. s->tlsext_ocsp_resp = parg;
  2898. s->tlsext_ocsp_resplen = larg;
  2899. ret = 1;
  2900. break;
  2901. #ifndef OPENSSL_NO_HEARTBEATS
  2902. case SSL_CTRL_TLS_EXT_SEND_HEARTBEAT:
  2903. if (SSL_IS_DTLS(s))
  2904. ret = dtls1_heartbeat(s);
  2905. else
  2906. ret = tls1_heartbeat(s);
  2907. break;
  2908. case SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING:
  2909. ret = s->tlsext_hb_pending;
  2910. break;
  2911. case SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS:
  2912. if (larg)
  2913. s->tlsext_heartbeat |= SSL_TLSEXT_HB_DONT_RECV_REQUESTS;
  2914. else
  2915. s->tlsext_heartbeat &= ~SSL_TLSEXT_HB_DONT_RECV_REQUESTS;
  2916. ret = 1;
  2917. break;
  2918. #endif
  2919. #endif /* !OPENSSL_NO_TLSEXT */
  2920. case SSL_CTRL_CHAIN:
  2921. if (larg)
  2922. return ssl_cert_set1_chain(s->cert,
  2923. (STACK_OF (X509) *)parg);
  2924. else
  2925. return ssl_cert_set0_chain(s->cert,
  2926. (STACK_OF (X509) *)parg);
  2927. case SSL_CTRL_CHAIN_CERT:
  2928. if (larg)
  2929. return ssl_cert_add1_chain_cert(s->cert, (X509 *)parg);
  2930. else
  2931. return ssl_cert_add0_chain_cert(s->cert, (X509 *)parg);
  2932. case SSL_CTRL_GET_CHAIN_CERTS:
  2933. *(STACK_OF(X509) **)parg = s->cert->key->chain;
  2934. break;
  2935. case SSL_CTRL_SELECT_CURRENT_CERT:
  2936. return ssl_cert_select_current(s->cert, (X509 *)parg);
  2937. #ifndef OPENSSL_NO_EC
  2938. case SSL_CTRL_GET_CURVES:
  2939. {
  2940. unsigned char *clist;
  2941. size_t clistlen;
  2942. if (!s->session)
  2943. return 0;
  2944. clist = s->session->tlsext_ellipticcurvelist;
  2945. clistlen = s->session->tlsext_ellipticcurvelist_length / 2;
  2946. if (parg)
  2947. {
  2948. size_t i;
  2949. int *cptr = parg;
  2950. unsigned int cid, nid;
  2951. for (i = 0; i < clistlen; i++)
  2952. {
  2953. n2s(clist, cid);
  2954. nid = tls1_ec_curve_id2nid(cid);
  2955. if (nid != 0)
  2956. cptr[i] = nid;
  2957. else
  2958. cptr[i] = TLSEXT_nid_unknown | cid;
  2959. }
  2960. }
  2961. return (int)clistlen;
  2962. }
  2963. case SSL_CTRL_SET_CURVES:
  2964. return tls1_set_curves(&s->tlsext_ellipticcurvelist,
  2965. &s->tlsext_ellipticcurvelist_length,
  2966. parg, larg);
  2967. case SSL_CTRL_GET_SHARED_CURVE:
  2968. return tls1_shared_curve(s, larg);
  2969. case SSL_CTRL_SET_ECDH_AUTO:
  2970. s->cert->ecdh_tmp_auto = larg;
  2971. return 1;
  2972. #endif
  2973. case SSL_CTRL_SET_SIGALGS:
  2974. return tls1_set_sigalgs(s->cert, parg, larg, 0);
  2975. case SSL_CTRL_SET_CLIENT_SIGALGS:
  2976. return tls1_set_sigalgs(s->cert, parg, larg, 1);
  2977. case SSL_CTRL_GET_CLIENT_CERT_TYPES:
  2978. {
  2979. const unsigned char **pctype = parg;
  2980. if (s->server || !s->s3->tmp.cert_req)
  2981. return 0;
  2982. if (s->cert->ctypes)
  2983. {
  2984. if (pctype)
  2985. *pctype = s->cert->ctypes;
  2986. return (int)s->cert->ctype_num;
  2987. }
  2988. if (pctype)
  2989. *pctype = (unsigned char *)s->s3->tmp.ctype;
  2990. return s->s3->tmp.ctype_num;
  2991. }
  2992. case SSL_CTRL_SET_CLIENT_CERT_TYPES:
  2993. if (!s->server)
  2994. return 0;
  2995. return ssl3_set_req_cert_type(s->cert, parg, larg);
  2996. case SSL_CTRL_BUILD_CERT_CHAIN:
  2997. return ssl_build_cert_chain(s->cert, s->ctx->cert_store, larg);
  2998. case SSL_CTRL_SET_VERIFY_CERT_STORE:
  2999. return ssl_cert_set_cert_store(s->cert, parg, 0, larg);
  3000. case SSL_CTRL_SET_CHAIN_CERT_STORE:
  3001. return ssl_cert_set_cert_store(s->cert, parg, 1, larg);
  3002. case SSL_CTRL_GET_PEER_SIGNATURE_NID:
  3003. if (SSL_USE_SIGALGS(s))
  3004. {
  3005. if (s->session && s->session->sess_cert)
  3006. {
  3007. const EVP_MD *sig;
  3008. sig = s->session->sess_cert->peer_key->digest;
  3009. if (sig)
  3010. {
  3011. *(int *)parg = EVP_MD_type(sig);
  3012. return 1;
  3013. }
  3014. }
  3015. return 0;
  3016. }
  3017. /* Might want to do something here for other versions */
  3018. else
  3019. return 0;
  3020. case SSL_CTRL_GET_SERVER_TMP_KEY:
  3021. if (s->server || !s->session || !s->session->sess_cert)
  3022. return 0;
  3023. else
  3024. {
  3025. SESS_CERT *sc;
  3026. EVP_PKEY *ptmp;
  3027. int rv = 0;
  3028. sc = s->session->sess_cert;
  3029. #if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_NO_DH) && !defined(OPENSSL_NO_EC)
  3030. if (!sc->peer_rsa_tmp && !sc->peer_dh_tmp
  3031. && !sc->peer_ecdh_tmp)
  3032. return 0;
  3033. #endif
  3034. ptmp = EVP_PKEY_new();
  3035. if (!ptmp)
  3036. return 0;
  3037. if (0);
  3038. #ifndef OPENSSL_NO_RSA
  3039. else if (sc->peer_rsa_tmp)
  3040. rv = EVP_PKEY_set1_RSA(ptmp, sc->peer_rsa_tmp);
  3041. #endif
  3042. #ifndef OPENSSL_NO_DH
  3043. else if (sc->peer_dh_tmp)
  3044. rv = EVP_PKEY_set1_DH(ptmp, sc->peer_dh_tmp);
  3045. #endif
  3046. #ifndef OPENSSL_NO_ECDH
  3047. else if (sc->peer_ecdh_tmp)
  3048. rv = EVP_PKEY_set1_EC_KEY(ptmp, sc->peer_ecdh_tmp);
  3049. #endif
  3050. if (rv)
  3051. {
  3052. *(EVP_PKEY **)parg = ptmp;
  3053. return 1;
  3054. }
  3055. EVP_PKEY_free(ptmp);
  3056. return 0;
  3057. }
  3058. #ifndef OPENSSL_NO_EC
  3059. case SSL_CTRL_GET_EC_POINT_FORMATS:
  3060. {
  3061. SSL_SESSION *sess = s->session;
  3062. const unsigned char **pformat = parg;
  3063. if (!sess || !sess->tlsext_ecpointformatlist)
  3064. return 0;
  3065. *pformat = sess->tlsext_ecpointformatlist;
  3066. return (int)sess->tlsext_ecpointformatlist_length;
  3067. }
  3068. #endif
  3069. case SSL_CTRL_CHANNEL_ID:
  3070. s->tlsext_channel_id_enabled = 1;
  3071. ret = 1;
  3072. break;
  3073. case SSL_CTRL_SET_CHANNEL_ID:
  3074. if (s->server)
  3075. break;
  3076. s->tlsext_channel_id_enabled = 1;
  3077. if (EVP_PKEY_bits(parg) != 256)
  3078. {
  3079. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, SSL_R_CHANNEL_ID_NOT_P256);
  3080. break;
  3081. }
  3082. if (s->tlsext_channel_id_private)
  3083. EVP_PKEY_free(s->tlsext_channel_id_private);
  3084. s->tlsext_channel_id_private = EVP_PKEY_dup((EVP_PKEY*) parg);
  3085. ret = 1;
  3086. break;
  3087. case SSL_CTRL_GET_CHANNEL_ID:
  3088. if (!s->server)
  3089. break;
  3090. if (!s->s3->tlsext_channel_id_valid)
  3091. break;
  3092. memcpy(parg, s->s3->tlsext_channel_id, larg < 64 ? larg : 64);
  3093. return 64;
  3094. default:
  3095. break;
  3096. }
  3097. return(ret);
  3098. }
  3099. long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void))
  3100. {
  3101. int ret=0;
  3102. #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_RSA)
  3103. if (
  3104. #ifndef OPENSSL_NO_RSA
  3105. cmd == SSL_CTRL_SET_TMP_RSA_CB ||
  3106. #endif
  3107. #ifndef OPENSSL_NO_DSA
  3108. cmd == SSL_CTRL_SET_TMP_DH_CB ||
  3109. #endif
  3110. 0)
  3111. {
  3112. if (!ssl_cert_inst(&s->cert))
  3113. {
  3114. OPENSSL_PUT_ERROR(SSL, ssl3_callback_ctrl, ERR_R_MALLOC_FAILURE);
  3115. return(0);
  3116. }
  3117. }
  3118. #endif
  3119. switch (cmd)
  3120. {
  3121. #ifndef OPENSSL_NO_RSA
  3122. case SSL_CTRL_SET_TMP_RSA_CB:
  3123. {
  3124. s->cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp;
  3125. }
  3126. break;
  3127. #endif
  3128. #ifndef OPENSSL_NO_DH
  3129. case SSL_CTRL_SET_TMP_DH_CB:
  3130. {
  3131. s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
  3132. }
  3133. break;
  3134. #endif
  3135. #ifndef OPENSSL_NO_ECDH
  3136. case SSL_CTRL_SET_TMP_ECDH_CB:
  3137. {
  3138. s->cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
  3139. }
  3140. break;
  3141. #endif
  3142. #ifndef OPENSSL_NO_TLSEXT
  3143. case SSL_CTRL_SET_TLSEXT_DEBUG_CB:
  3144. s->tlsext_debug_cb=(void (*)(SSL *,int ,int,
  3145. unsigned char *, int, void *))fp;
  3146. break;
  3147. #endif
  3148. default:
  3149. break;
  3150. }
  3151. return(ret);
  3152. }
  3153. long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
  3154. {
  3155. CERT *cert;
  3156. cert=ctx->cert;
  3157. switch (cmd)
  3158. {
  3159. #ifndef OPENSSL_NO_RSA
  3160. case SSL_CTRL_NEED_TMP_RSA:
  3161. if ( (cert->rsa_tmp == NULL) &&
  3162. ((cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL) ||
  3163. (EVP_PKEY_size(cert->pkeys[SSL_PKEY_RSA_ENC].privatekey) > (512/8)))
  3164. )
  3165. return(1);
  3166. else
  3167. return(0);
  3168. /* break; */
  3169. case SSL_CTRL_SET_TMP_RSA:
  3170. {
  3171. RSA *rsa;
  3172. int i;
  3173. rsa=(RSA *)parg;
  3174. i=1;
  3175. if (rsa == NULL)
  3176. i=0;
  3177. else
  3178. {
  3179. if ((rsa=RSAPrivateKey_dup(rsa)) == NULL)
  3180. i=0;
  3181. }
  3182. if (!i)
  3183. {
  3184. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_RSA_LIB);
  3185. return(0);
  3186. }
  3187. else
  3188. {
  3189. if (cert->rsa_tmp != NULL)
  3190. RSA_free(cert->rsa_tmp);
  3191. cert->rsa_tmp=rsa;
  3192. return(1);
  3193. }
  3194. }
  3195. /* break; */
  3196. case SSL_CTRL_SET_TMP_RSA_CB:
  3197. {
  3198. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  3199. return(0);
  3200. }
  3201. break;
  3202. #endif
  3203. #ifndef OPENSSL_NO_DH
  3204. case SSL_CTRL_SET_TMP_DH:
  3205. {
  3206. DH *new=NULL,*dh;
  3207. dh=(DH *)parg;
  3208. if ((new=DHparams_dup(dh)) == NULL)
  3209. {
  3210. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_DH_LIB);
  3211. return 0;
  3212. }
  3213. if (!(ctx->options & SSL_OP_SINGLE_DH_USE))
  3214. {
  3215. if (!DH_generate_key(new))
  3216. {
  3217. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_DH_LIB);
  3218. DH_free(new);
  3219. return 0;
  3220. }
  3221. }
  3222. if (cert->dh_tmp != NULL)
  3223. DH_free(cert->dh_tmp);
  3224. cert->dh_tmp=new;
  3225. return 1;
  3226. }
  3227. /*break; */
  3228. case SSL_CTRL_SET_TMP_DH_CB:
  3229. {
  3230. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  3231. return(0);
  3232. }
  3233. break;
  3234. #endif
  3235. #ifndef OPENSSL_NO_ECDH
  3236. case SSL_CTRL_SET_TMP_ECDH:
  3237. {
  3238. EC_KEY *ecdh = NULL;
  3239. if (parg == NULL)
  3240. {
  3241. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_ECDH_LIB);
  3242. return 0;
  3243. }
  3244. ecdh = EC_KEY_dup((EC_KEY *)parg);
  3245. if (ecdh == NULL)
  3246. {
  3247. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_EC_LIB);
  3248. return 0;
  3249. }
  3250. if (!(ctx->options & SSL_OP_SINGLE_ECDH_USE))
  3251. {
  3252. if (!EC_KEY_generate_key(ecdh))
  3253. {
  3254. EC_KEY_free(ecdh);
  3255. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_ECDH_LIB);
  3256. return 0;
  3257. }
  3258. }
  3259. if (cert->ecdh_tmp != NULL)
  3260. {
  3261. EC_KEY_free(cert->ecdh_tmp);
  3262. }
  3263. cert->ecdh_tmp = ecdh;
  3264. return 1;
  3265. }
  3266. /* break; */
  3267. case SSL_CTRL_SET_TMP_ECDH_CB:
  3268. {
  3269. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  3270. return(0);
  3271. }
  3272. break;
  3273. #endif /* !OPENSSL_NO_ECDH */
  3274. #ifndef OPENSSL_NO_TLSEXT
  3275. case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG:
  3276. ctx->tlsext_servername_arg=parg;
  3277. break;
  3278. case SSL_CTRL_SET_TLSEXT_TICKET_KEYS:
  3279. case SSL_CTRL_GET_TLSEXT_TICKET_KEYS:
  3280. {
  3281. unsigned char *keys = parg;
  3282. if (!keys)
  3283. return 48;
  3284. if (larg != 48)
  3285. {
  3286. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, SSL_R_INVALID_TICKET_KEYS_LENGTH);
  3287. return 0;
  3288. }
  3289. if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS)
  3290. {
  3291. memcpy(ctx->tlsext_tick_key_name, keys, 16);
  3292. memcpy(ctx->tlsext_tick_hmac_key, keys + 16, 16);
  3293. memcpy(ctx->tlsext_tick_aes_key, keys + 32, 16);
  3294. }
  3295. else
  3296. {
  3297. memcpy(keys, ctx->tlsext_tick_key_name, 16);
  3298. memcpy(keys + 16, ctx->tlsext_tick_hmac_key, 16);
  3299. memcpy(keys + 32, ctx->tlsext_tick_aes_key, 16);
  3300. }
  3301. return 1;
  3302. }
  3303. #ifdef TLSEXT_TYPE_opaque_prf_input
  3304. case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG:
  3305. ctx->tlsext_opaque_prf_input_callback_arg = parg;
  3306. return 1;
  3307. #endif
  3308. case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG:
  3309. ctx->tlsext_status_arg=parg;
  3310. return 1;
  3311. break;
  3312. #ifndef OPENSSL_NO_EC
  3313. case SSL_CTRL_SET_CURVES:
  3314. return tls1_set_curves(&ctx->tlsext_ellipticcurvelist,
  3315. &ctx->tlsext_ellipticcurvelist_length,
  3316. parg, larg);
  3317. case SSL_CTRL_SET_ECDH_AUTO:
  3318. ctx->cert->ecdh_tmp_auto = larg;
  3319. return 1;
  3320. #endif
  3321. case SSL_CTRL_SET_SIGALGS:
  3322. return tls1_set_sigalgs(ctx->cert, parg, larg, 0);
  3323. case SSL_CTRL_SET_CLIENT_SIGALGS:
  3324. return tls1_set_sigalgs(ctx->cert, parg, larg, 1);
  3325. case SSL_CTRL_SET_CLIENT_CERT_TYPES:
  3326. return ssl3_set_req_cert_type(ctx->cert, parg, larg);
  3327. case SSL_CTRL_BUILD_CERT_CHAIN:
  3328. return ssl_build_cert_chain(ctx->cert, ctx->cert_store, larg);
  3329. case SSL_CTRL_SET_VERIFY_CERT_STORE:
  3330. return ssl_cert_set_cert_store(ctx->cert, parg, 0, larg);
  3331. case SSL_CTRL_SET_CHAIN_CERT_STORE:
  3332. return ssl_cert_set_cert_store(ctx->cert, parg, 1, larg);
  3333. case SSL_CTRL_SET_TLSEXT_AUTHZ_SERVER_AUDIT_PROOF_CB_ARG:
  3334. ctx->tlsext_authz_server_audit_proof_cb_arg = parg;
  3335. break;
  3336. #endif /* !OPENSSL_NO_TLSEXT */
  3337. /* A Thawte special :-) */
  3338. case SSL_CTRL_EXTRA_CHAIN_CERT:
  3339. if (ctx->extra_certs == NULL)
  3340. {
  3341. if ((ctx->extra_certs=sk_X509_new_null()) == NULL)
  3342. return(0);
  3343. }
  3344. sk_X509_push(ctx->extra_certs,(X509 *)parg);
  3345. break;
  3346. case SSL_CTRL_GET_EXTRA_CHAIN_CERTS:
  3347. if (ctx->extra_certs == NULL && larg == 0)
  3348. *(STACK_OF(X509) **)parg = ctx->cert->key->chain;
  3349. else
  3350. *(STACK_OF(X509) **)parg = ctx->extra_certs;
  3351. break;
  3352. case SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS:
  3353. if (ctx->extra_certs)
  3354. {
  3355. sk_X509_pop_free(ctx->extra_certs, X509_free);
  3356. ctx->extra_certs = NULL;
  3357. }
  3358. break;
  3359. case SSL_CTRL_CHAIN:
  3360. if (larg)
  3361. return ssl_cert_set1_chain(ctx->cert,
  3362. (STACK_OF (X509) *)parg);
  3363. else
  3364. return ssl_cert_set0_chain(ctx->cert,
  3365. (STACK_OF (X509) *)parg);
  3366. case SSL_CTRL_CHAIN_CERT:
  3367. if (larg)
  3368. return ssl_cert_add1_chain_cert(ctx->cert, (X509 *)parg);
  3369. else
  3370. return ssl_cert_add0_chain_cert(ctx->cert, (X509 *)parg);
  3371. case SSL_CTRL_GET_CHAIN_CERTS:
  3372. *(STACK_OF(X509) **)parg = ctx->cert->key->chain;
  3373. break;
  3374. case SSL_CTRL_SELECT_CURRENT_CERT:
  3375. return ssl_cert_select_current(ctx->cert, (X509 *)parg);
  3376. case SSL_CTRL_CHANNEL_ID:
  3377. /* must be called on a server */
  3378. if (ctx->method->ssl_accept == ssl_undefined_function)
  3379. return 0;
  3380. ctx->tlsext_channel_id_enabled=1;
  3381. return 1;
  3382. case SSL_CTRL_SET_CHANNEL_ID:
  3383. ctx->tlsext_channel_id_enabled = 1;
  3384. if (EVP_PKEY_bits(parg) != 256)
  3385. {
  3386. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, SSL_R_CHANNEL_ID_NOT_P256);
  3387. break;
  3388. }
  3389. if (ctx->tlsext_channel_id_private)
  3390. EVP_PKEY_free(ctx->tlsext_channel_id_private);
  3391. ctx->tlsext_channel_id_private = EVP_PKEY_dup((EVP_PKEY*) parg);
  3392. break;
  3393. default:
  3394. return(0);
  3395. }
  3396. return(1);
  3397. }
  3398. long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void))
  3399. {
  3400. CERT *cert;
  3401. cert=ctx->cert;
  3402. switch (cmd)
  3403. {
  3404. #ifndef OPENSSL_NO_RSA
  3405. case SSL_CTRL_SET_TMP_RSA_CB:
  3406. {
  3407. cert->rsa_tmp_cb = (RSA *(*)(SSL *, int, int))fp;
  3408. }
  3409. break;
  3410. #endif
  3411. #ifndef OPENSSL_NO_DH
  3412. case SSL_CTRL_SET_TMP_DH_CB:
  3413. {
  3414. cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
  3415. }
  3416. break;
  3417. #endif
  3418. #ifndef OPENSSL_NO_ECDH
  3419. case SSL_CTRL_SET_TMP_ECDH_CB:
  3420. {
  3421. cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
  3422. }
  3423. break;
  3424. #endif
  3425. #ifndef OPENSSL_NO_TLSEXT
  3426. case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB:
  3427. ctx->tlsext_servername_callback=(int (*)(SSL *,int *,void *))fp;
  3428. break;
  3429. #ifdef TLSEXT_TYPE_opaque_prf_input
  3430. case SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB:
  3431. ctx->tlsext_opaque_prf_input_callback = (int (*)(SSL *,void *, size_t, void *))fp;
  3432. break;
  3433. #endif
  3434. case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB:
  3435. ctx->tlsext_status_cb=(int (*)(SSL *,void *))fp;
  3436. break;
  3437. case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB:
  3438. ctx->tlsext_ticket_key_cb=(int (*)(SSL *,unsigned char *,
  3439. unsigned char *,
  3440. EVP_CIPHER_CTX *,
  3441. HMAC_CTX *, int))fp;
  3442. break;
  3443. case SSL_CTRL_SET_TLSEXT_AUTHZ_SERVER_AUDIT_PROOF_CB:
  3444. ctx->tlsext_authz_server_audit_proof_cb =
  3445. (int (*)(SSL *, void *))fp;
  3446. break;
  3447. #endif
  3448. default:
  3449. return(0);
  3450. }
  3451. return(1);
  3452. }
  3453. /* This function needs to check if the ciphers required are actually
  3454. * available */
  3455. const SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p)
  3456. {
  3457. SSL_CIPHER c;
  3458. const SSL_CIPHER *cp;
  3459. unsigned long id;
  3460. id=0x03000000L|((unsigned long)p[0]<<8L)|(unsigned long)p[1];
  3461. c.id=id;
  3462. cp = bsearch(&c, ssl3_ciphers, SSL3_NUM_CIPHERS, sizeof(SSL_CIPHER), ssl_cipher_id_cmp);
  3463. #ifdef DEBUG_PRINT_UNKNOWN_CIPHERSUITES
  3464. if (cp == NULL) fprintf(stderr, "Unknown cipher ID %x\n", (p[0] << 8) | p[1]);
  3465. #endif
  3466. return cp;
  3467. }
  3468. int ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p)
  3469. {
  3470. long l;
  3471. if (p != NULL)
  3472. {
  3473. l=c->id;
  3474. if ((l & 0xff000000) != 0x03000000) return(0);
  3475. p[0]=((unsigned char)(l>> 8L))&0xFF;
  3476. p[1]=((unsigned char)(l ))&0xFF;
  3477. }
  3478. return(2);
  3479. }
  3480. struct ssl_cipher_preference_list_st* ssl_get_cipher_preferences(SSL *s)
  3481. {
  3482. if (s->cipher_list != NULL)
  3483. return(s->cipher_list);
  3484. if (s->version >= TLS1_1_VERSION)
  3485. {
  3486. if (s->ctx != NULL && s->ctx->cipher_list_tls11 != NULL)
  3487. return s->ctx->cipher_list_tls11;
  3488. }
  3489. if ((s->ctx != NULL) && (s->ctx->cipher_list != NULL))
  3490. return(s->ctx->cipher_list);
  3491. return NULL;
  3492. }
  3493. SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
  3494. struct ssl_cipher_preference_list_st *server_pref)
  3495. {
  3496. SSL_CIPHER *c,*ret=NULL;
  3497. STACK_OF(SSL_CIPHER) *srvr = server_pref->ciphers, *prio, *allow;
  3498. int i,ok;
  3499. size_t cipher_index;
  3500. CERT *cert;
  3501. unsigned long alg_k,alg_a,mask_k,mask_a,emask_k,emask_a;
  3502. /* in_group_flags will either be NULL, or will point to an array of
  3503. * bytes which indicate equal-preference groups in the |prio| stack.
  3504. * See the comment about |in_group_flags| in the
  3505. * |ssl_cipher_preference_list_st| struct. */
  3506. const unsigned char *in_group_flags;
  3507. /* group_min contains the minimal index so far found in a group, or -1
  3508. * if no such value exists yet. */
  3509. int group_min = -1;
  3510. /* Let's see which ciphers we can support */
  3511. cert=s->cert;
  3512. #if 0
  3513. /* Do not set the compare functions, because this may lead to a
  3514. * reordering by "id". We want to keep the original ordering.
  3515. * We may pay a price in performance during sk_SSL_CIPHER_find(),
  3516. * but would have to pay with the price of sk_SSL_CIPHER_dup().
  3517. */
  3518. sk_SSL_CIPHER_set_cmp_func(srvr, ssl_cipher_ptr_id_cmp);
  3519. sk_SSL_CIPHER_set_cmp_func(clnt, ssl_cipher_ptr_id_cmp);
  3520. #endif
  3521. #ifdef CIPHER_DEBUG
  3522. printf("Server has %d from %p:\n", sk_SSL_CIPHER_num(srvr), (void *)srvr);
  3523. for(i=0 ; i < sk_SSL_CIPHER_num(srvr) ; ++i)
  3524. {
  3525. c=sk_SSL_CIPHER_value(srvr,i);
  3526. printf("%p:%s\n",(void *)c,c->name);
  3527. }
  3528. printf("Client sent %d from %p:\n", sk_SSL_CIPHER_num(clnt), (void *)clnt);
  3529. for(i=0 ; i < sk_SSL_CIPHER_num(clnt) ; ++i)
  3530. {
  3531. c=sk_SSL_CIPHER_value(clnt,i);
  3532. printf("%p:%s\n",(void *)c,c->name);
  3533. }
  3534. #endif
  3535. if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE || tls1_suiteb(s))
  3536. {
  3537. prio = srvr;
  3538. in_group_flags = server_pref->in_group_flags;
  3539. allow = clnt;
  3540. }
  3541. else
  3542. {
  3543. prio = clnt;
  3544. in_group_flags = NULL;
  3545. allow = srvr;
  3546. }
  3547. tls1_set_cert_validity(s);
  3548. for (i=0; i<sk_SSL_CIPHER_num(prio); i++)
  3549. {
  3550. c=sk_SSL_CIPHER_value(prio,i);
  3551. ok = 1;
  3552. /* Skip TLS v1.2 only ciphersuites if not supported */
  3553. if ((c->algorithm_ssl & SSL_TLSV1_2) &&
  3554. !SSL_USE_TLS1_2_CIPHERS(s))
  3555. ok = 0;
  3556. ssl_set_cert_masks(cert,c);
  3557. mask_k = cert->mask_k;
  3558. mask_a = cert->mask_a;
  3559. emask_k = cert->export_mask_k;
  3560. emask_a = cert->export_mask_a;
  3561. #ifdef KSSL_DEBUG
  3562. /* printf("ssl3_choose_cipher %d alg= %lx\n", i,c->algorithms);*/
  3563. #endif /* KSSL_DEBUG */
  3564. alg_k=c->algorithm_mkey;
  3565. alg_a=c->algorithm_auth;
  3566. #ifndef OPENSSL_NO_PSK
  3567. /* with PSK there must be server callback set */
  3568. if ((alg_a & SSL_aPSK) && s->psk_server_callback == NULL)
  3569. ok = 0;
  3570. #endif /* OPENSSL_NO_PSK */
  3571. if (SSL_C_IS_EXPORT(c))
  3572. {
  3573. ok = ok && (alg_k & emask_k) && (alg_a & emask_a);
  3574. #ifdef CIPHER_DEBUG
  3575. printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s (export)\n",ok,alg_k,alg_a,emask_k,emask_a,
  3576. (void *)c,c->name);
  3577. #endif
  3578. }
  3579. else
  3580. {
  3581. ok = ok && (alg_k & mask_k) && (alg_a & mask_a);
  3582. #ifdef CIPHER_DEBUG
  3583. printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s\n",ok,alg_k,alg_a,mask_k,mask_a,(void *)c,
  3584. c->name);
  3585. #endif
  3586. }
  3587. #ifndef OPENSSL_NO_TLSEXT
  3588. #ifndef OPENSSL_NO_EC
  3589. /* if we are considering an ECC cipher suite that uses
  3590. * an ephemeral EC key check it */
  3591. if (alg_k & SSL_kEECDH)
  3592. ok = ok && tls1_check_ec_tmp_key(s, c->id);
  3593. #endif /* OPENSSL_NO_EC */
  3594. #endif /* OPENSSL_NO_TLSEXT */
  3595. if (ok && sk_SSL_CIPHER_find(allow, &cipher_index, c))
  3596. {
  3597. if (in_group_flags != NULL && in_group_flags[i] == 1)
  3598. {
  3599. /* This element of |prio| is in a group. Update
  3600. * the minimum index found so far and continue
  3601. * looking. */
  3602. if (group_min == -1 || group_min > cipher_index)
  3603. group_min = cipher_index;
  3604. }
  3605. else
  3606. {
  3607. if (group_min != -1 && group_min < cipher_index)
  3608. cipher_index = group_min;
  3609. ret=sk_SSL_CIPHER_value(allow,cipher_index);
  3610. break;
  3611. }
  3612. }
  3613. if (in_group_flags != NULL &&
  3614. in_group_flags[i] == 0 &&
  3615. group_min != -1)
  3616. {
  3617. /* We are about to leave a group, but we found a match
  3618. * in it, so that's our answer. */
  3619. ret=sk_SSL_CIPHER_value(allow,group_min);
  3620. break;
  3621. }
  3622. }
  3623. return(ret);
  3624. }
  3625. int ssl3_get_req_cert_type(SSL *s, unsigned char *p)
  3626. {
  3627. int ret=0;
  3628. const unsigned char *sig;
  3629. size_t i, siglen;
  3630. int have_rsa_sign = 0, have_dsa_sign = 0;
  3631. #ifndef OPENSSL_NO_ECDSA
  3632. int have_ecdsa_sign = 0;
  3633. #endif
  3634. int nostrict = 1;
  3635. unsigned long alg_k;
  3636. /* If we have custom certificate types set, use them */
  3637. if (s->cert->ctypes)
  3638. {
  3639. memcpy(p, s->cert->ctypes, s->cert->ctype_num);
  3640. return (int)s->cert->ctype_num;
  3641. }
  3642. /* get configured sigalgs */
  3643. siglen = tls12_get_psigalgs(s, &sig);
  3644. if (s->cert->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT)
  3645. nostrict = 0;
  3646. for (i = 0; i < siglen; i+=2, sig+=2)
  3647. {
  3648. switch(sig[1])
  3649. {
  3650. case TLSEXT_signature_rsa:
  3651. have_rsa_sign = 1;
  3652. break;
  3653. case TLSEXT_signature_dsa:
  3654. have_dsa_sign = 1;
  3655. break;
  3656. #ifndef OPENSSL_NO_ECDSA
  3657. case TLSEXT_signature_ecdsa:
  3658. have_ecdsa_sign = 1;
  3659. break;
  3660. #endif
  3661. }
  3662. }
  3663. alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
  3664. #ifndef OPENSSL_NO_GOST
  3665. if (s->version >= TLS1_VERSION)
  3666. {
  3667. if (alg_k & SSL_kGOST)
  3668. {
  3669. p[ret++]=TLS_CT_GOST94_SIGN;
  3670. p[ret++]=TLS_CT_GOST01_SIGN;
  3671. return(ret);
  3672. }
  3673. }
  3674. #endif
  3675. #ifndef OPENSSL_NO_DH
  3676. if (alg_k & (SSL_kDHr|SSL_kEDH))
  3677. {
  3678. # ifndef OPENSSL_NO_RSA
  3679. /* Since this refers to a certificate signed with an RSA
  3680. * algorithm, only check for rsa signing in strict mode.
  3681. */
  3682. if (nostrict || have_rsa_sign)
  3683. p[ret++]=SSL3_CT_RSA_FIXED_DH;
  3684. # endif
  3685. # ifndef OPENSSL_NO_DSA
  3686. if (nostrict || have_dsa_sign)
  3687. p[ret++]=SSL3_CT_DSS_FIXED_DH;
  3688. # endif
  3689. }
  3690. if ((s->version == SSL3_VERSION) &&
  3691. (alg_k & (SSL_kEDH|SSL_kDHd|SSL_kDHr)))
  3692. {
  3693. # ifndef OPENSSL_NO_RSA
  3694. p[ret++]=SSL3_CT_RSA_EPHEMERAL_DH;
  3695. # endif
  3696. # ifndef OPENSSL_NO_DSA
  3697. p[ret++]=SSL3_CT_DSS_EPHEMERAL_DH;
  3698. # endif
  3699. }
  3700. #endif /* !OPENSSL_NO_DH */
  3701. #ifndef OPENSSL_NO_RSA
  3702. if (have_rsa_sign)
  3703. p[ret++]=SSL3_CT_RSA_SIGN;
  3704. #endif
  3705. #ifndef OPENSSL_NO_DSA
  3706. if (have_dsa_sign)
  3707. p[ret++]=SSL3_CT_DSS_SIGN;
  3708. #endif
  3709. #ifndef OPENSSL_NO_ECDH
  3710. if ((alg_k & (SSL_kECDHr|SSL_kECDHe)) && (s->version >= TLS1_VERSION))
  3711. {
  3712. if (nostrict || have_rsa_sign)
  3713. p[ret++]=TLS_CT_RSA_FIXED_ECDH;
  3714. if (nostrict || have_ecdsa_sign)
  3715. p[ret++]=TLS_CT_ECDSA_FIXED_ECDH;
  3716. }
  3717. #endif
  3718. #ifndef OPENSSL_NO_ECDSA
  3719. /* ECDSA certs can be used with RSA cipher suites as well
  3720. * so we don't need to check for SSL_kECDH or SSL_kEECDH
  3721. */
  3722. if (s->version >= TLS1_VERSION)
  3723. {
  3724. if (have_ecdsa_sign)
  3725. p[ret++]=TLS_CT_ECDSA_SIGN;
  3726. }
  3727. #endif
  3728. return(ret);
  3729. }
  3730. static int ssl3_set_req_cert_type(CERT *c, const unsigned char *p, size_t len)
  3731. {
  3732. if (c->ctypes)
  3733. {
  3734. OPENSSL_free(c->ctypes);
  3735. c->ctypes = NULL;
  3736. }
  3737. if (!p || !len)
  3738. return 1;
  3739. if (len > 0xff)
  3740. return 0;
  3741. c->ctypes = OPENSSL_malloc(len);
  3742. if (!c->ctypes)
  3743. return 0;
  3744. memcpy(c->ctypes, p, len);
  3745. c->ctype_num = len;
  3746. return 1;
  3747. }
  3748. int ssl3_shutdown(SSL *s)
  3749. {
  3750. int ret;
  3751. /* Don't do anything much if we have not done the handshake or
  3752. * we don't want to send messages :-) */
  3753. if ((s->quiet_shutdown) || (s->state == SSL_ST_BEFORE))
  3754. {
  3755. s->shutdown=(SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
  3756. return(1);
  3757. }
  3758. if (!(s->shutdown & SSL_SENT_SHUTDOWN))
  3759. {
  3760. s->shutdown|=SSL_SENT_SHUTDOWN;
  3761. #if 1
  3762. ssl3_send_alert(s,SSL3_AL_WARNING,SSL_AD_CLOSE_NOTIFY);
  3763. #endif
  3764. /* our shutdown alert has been sent now, and if it still needs
  3765. * to be written, s->s3->alert_dispatch will be true */
  3766. if (s->s3->alert_dispatch)
  3767. return(-1); /* return WANT_WRITE */
  3768. }
  3769. else if (s->s3->alert_dispatch)
  3770. {
  3771. /* resend it if not sent */
  3772. #if 1
  3773. ret=s->method->ssl_dispatch_alert(s);
  3774. if(ret == -1)
  3775. {
  3776. /* we only get to return -1 here the 2nd/Nth
  3777. * invocation, we must have already signalled
  3778. * return 0 upon a previous invoation,
  3779. * return WANT_WRITE */
  3780. return(ret);
  3781. }
  3782. #endif
  3783. }
  3784. else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN))
  3785. {
  3786. /* If we are waiting for a close from our peer, we are closed */
  3787. s->method->ssl_read_bytes(s,0,NULL,0,0);
  3788. if(!(s->shutdown & SSL_RECEIVED_SHUTDOWN))
  3789. {
  3790. return(-1); /* return WANT_READ */
  3791. }
  3792. }
  3793. if ((s->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) &&
  3794. !s->s3->alert_dispatch)
  3795. return(1);
  3796. else
  3797. return(0);
  3798. }
  3799. int ssl3_write(SSL *s, const void *buf, int len)
  3800. {
  3801. int ret,n;
  3802. #if 0
  3803. if (s->shutdown & SSL_SEND_SHUTDOWN)
  3804. {
  3805. s->rwstate=SSL_NOTHING;
  3806. return(0);
  3807. }
  3808. #endif
  3809. ERR_clear_system_error();
  3810. if (s->s3->renegotiate) ssl3_renegotiate_check(s);
  3811. /* This is an experimental flag that sends the
  3812. * last handshake message in the same packet as the first
  3813. * use data - used to see if it helps the TCP protocol during
  3814. * session-id reuse */
  3815. /* The second test is because the buffer may have been removed */
  3816. if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio))
  3817. {
  3818. /* First time through, we write into the buffer */
  3819. if (s->s3->delay_buf_pop_ret == 0)
  3820. {
  3821. ret=ssl3_write_bytes(s,SSL3_RT_APPLICATION_DATA,
  3822. buf,len);
  3823. if (ret <= 0) return(ret);
  3824. s->s3->delay_buf_pop_ret=ret;
  3825. }
  3826. s->rwstate=SSL_WRITING;
  3827. n=BIO_flush(s->wbio);
  3828. if (n <= 0) return(n);
  3829. s->rwstate=SSL_NOTHING;
  3830. /* We have flushed the buffer, so remove it */
  3831. ssl_free_wbio_buffer(s);
  3832. s->s3->flags&= ~SSL3_FLAGS_POP_BUFFER;
  3833. ret=s->s3->delay_buf_pop_ret;
  3834. s->s3->delay_buf_pop_ret=0;
  3835. }
  3836. else
  3837. {
  3838. ret=s->method->ssl_write_bytes(s,SSL3_RT_APPLICATION_DATA,
  3839. buf,len);
  3840. if (ret <= 0) return(ret);
  3841. }
  3842. return(ret);
  3843. }
  3844. static int ssl3_read_internal(SSL *s, void *buf, int len, int peek)
  3845. {
  3846. int n,ret;
  3847. ERR_clear_system_error();
  3848. if ((s->s3->flags & SSL3_FLAGS_POP_BUFFER) && (s->wbio == s->bbio))
  3849. {
  3850. /* Deal with an application that calls SSL_read() when handshake data
  3851. * is yet to be written.
  3852. */
  3853. if (BIO_wpending(s->wbio) > 0)
  3854. {
  3855. s->rwstate=SSL_WRITING;
  3856. n=BIO_flush(s->wbio);
  3857. if (n <= 0) return(n);
  3858. s->rwstate=SSL_NOTHING;
  3859. }
  3860. }
  3861. if (s->s3->renegotiate) ssl3_renegotiate_check(s);
  3862. s->s3->in_read_app_data=1;
  3863. ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);
  3864. if ((ret == -1) && (s->s3->in_read_app_data == 2))
  3865. {
  3866. /* ssl3_read_bytes decided to call s->handshake_func, which
  3867. * called ssl3_read_bytes to read handshake data.
  3868. * However, ssl3_read_bytes actually found application data
  3869. * and thinks that application data makes sense here; so disable
  3870. * handshake processing and try to read application data again. */
  3871. s->in_handshake++;
  3872. ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);
  3873. s->in_handshake--;
  3874. }
  3875. else
  3876. s->s3->in_read_app_data=0;
  3877. return(ret);
  3878. }
  3879. int ssl3_read(SSL *s, void *buf, int len)
  3880. {
  3881. return ssl3_read_internal(s, buf, len, 0);
  3882. }
  3883. int ssl3_peek(SSL *s, void *buf, int len)
  3884. {
  3885. return ssl3_read_internal(s, buf, len, 1);
  3886. }
  3887. int ssl3_renegotiate(SSL *s)
  3888. {
  3889. if (s->handshake_func == NULL)
  3890. return(1);
  3891. if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)
  3892. return(0);
  3893. s->s3->renegotiate=1;
  3894. return(1);
  3895. }
  3896. int ssl3_renegotiate_check(SSL *s)
  3897. {
  3898. int ret=0;
  3899. if (s->s3->renegotiate)
  3900. {
  3901. if ( (s->s3->rbuf.left == 0) &&
  3902. (s->s3->wbuf.left == 0) &&
  3903. !SSL_in_init(s))
  3904. {
  3905. /*
  3906. if we are the server, and we have sent a 'RENEGOTIATE' message, we
  3907. need to go to SSL_ST_ACCEPT.
  3908. */
  3909. /* SSL_ST_ACCEPT */
  3910. s->state=SSL_ST_RENEGOTIATE;
  3911. s->s3->renegotiate=0;
  3912. s->s3->num_renegotiations++;
  3913. s->s3->total_renegotiations++;
  3914. ret=1;
  3915. }
  3916. }
  3917. return(ret);
  3918. }
  3919. /* If we are using default SHA1+MD5 algorithms switch to new SHA256 PRF
  3920. * and handshake macs if required.
  3921. */
  3922. long ssl_get_algorithm2(SSL *s)
  3923. {
  3924. long alg2 = s->s3->tmp.new_cipher->algorithm2;
  3925. if (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_SHA256_PRF
  3926. && alg2 == (SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF))
  3927. return SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256;
  3928. return alg2;
  3929. }