You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

2143 lines
49 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 <assert.h>
  149. #include <stdio.h>
  150. #include <openssl/buf.h>
  151. #include <openssl/dh.h>
  152. #include <openssl/md5.h>
  153. #include <openssl/mem.h>
  154. #include <openssl/obj.h>
  155. #include "ssl_locl.h"
  156. #define SSL3_NUM_CIPHERS (sizeof(ssl3_ciphers)/sizeof(SSL_CIPHER))
  157. /* FIXED_NONCE_LEN is a macro that results in the correct value to set the
  158. * fixed nonce length in SSL_CIPHER.algorithms2. It's the inverse of
  159. * SSL_CIPHER_AEAD_FIXED_NONCE_LEN. */
  160. #define FIXED_NONCE_LEN(x) ((x/2)<<24)
  161. /* list of available SSLv3 ciphers (sorted by id) */
  162. const SSL_CIPHER ssl3_ciphers[]={
  163. /* The RSA ciphers */
  164. /* Cipher 04 */
  165. {
  166. 1,
  167. SSL3_TXT_RSA_RC4_128_MD5,
  168. SSL3_CK_RSA_RC4_128_MD5,
  169. SSL_kRSA,
  170. SSL_aRSA,
  171. SSL_RC4,
  172. SSL_MD5,
  173. SSL_SSLV3,
  174. SSL_MEDIUM,
  175. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF|SSL_CIPHER_ALGORITHM2_STATEFUL_AEAD,
  176. 128,
  177. 128,
  178. },
  179. /* Cipher 05 */
  180. {
  181. 1,
  182. SSL3_TXT_RSA_RC4_128_SHA,
  183. SSL3_CK_RSA_RC4_128_SHA,
  184. SSL_kRSA,
  185. SSL_aRSA,
  186. SSL_RC4,
  187. SSL_SHA1,
  188. SSL_SSLV3,
  189. SSL_MEDIUM,
  190. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  191. 128,
  192. 128,
  193. },
  194. /* Cipher 0A */
  195. {
  196. 1,
  197. SSL3_TXT_RSA_DES_192_CBC3_SHA,
  198. SSL3_CK_RSA_DES_192_CBC3_SHA,
  199. SSL_kRSA,
  200. SSL_aRSA,
  201. SSL_3DES,
  202. SSL_SHA1,
  203. SSL_SSLV3,
  204. SSL_HIGH|SSL_FIPS,
  205. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  206. 112,
  207. 168,
  208. },
  209. /* The Ephemeral DH ciphers */
  210. /* Cipher 18 */
  211. {
  212. 1,
  213. SSL3_TXT_ADH_RC4_128_MD5,
  214. SSL3_CK_ADH_RC4_128_MD5,
  215. SSL_kEDH,
  216. SSL_aNULL,
  217. SSL_RC4,
  218. SSL_MD5,
  219. SSL_SSLV3,
  220. SSL_MEDIUM,
  221. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  222. 128,
  223. 128,
  224. },
  225. /* New AES ciphersuites */
  226. /* Cipher 2F */
  227. {
  228. 1,
  229. TLS1_TXT_RSA_WITH_AES_128_SHA,
  230. TLS1_CK_RSA_WITH_AES_128_SHA,
  231. SSL_kRSA,
  232. SSL_aRSA,
  233. SSL_AES128,
  234. SSL_SHA1,
  235. SSL_TLSV1,
  236. SSL_HIGH|SSL_FIPS,
  237. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  238. 128,
  239. 128,
  240. },
  241. /* Cipher 33 */
  242. {
  243. 1,
  244. TLS1_TXT_DHE_RSA_WITH_AES_128_SHA,
  245. TLS1_CK_DHE_RSA_WITH_AES_128_SHA,
  246. SSL_kEDH,
  247. SSL_aRSA,
  248. SSL_AES128,
  249. SSL_SHA1,
  250. SSL_TLSV1,
  251. SSL_HIGH|SSL_FIPS,
  252. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  253. 128,
  254. 128,
  255. },
  256. /* Cipher 34 */
  257. {
  258. 1,
  259. TLS1_TXT_ADH_WITH_AES_128_SHA,
  260. TLS1_CK_ADH_WITH_AES_128_SHA,
  261. SSL_kEDH,
  262. SSL_aNULL,
  263. SSL_AES128,
  264. SSL_SHA1,
  265. SSL_TLSV1,
  266. SSL_HIGH|SSL_FIPS,
  267. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  268. 128,
  269. 128,
  270. },
  271. /* Cipher 35 */
  272. {
  273. 1,
  274. TLS1_TXT_RSA_WITH_AES_256_SHA,
  275. TLS1_CK_RSA_WITH_AES_256_SHA,
  276. SSL_kRSA,
  277. SSL_aRSA,
  278. SSL_AES256,
  279. SSL_SHA1,
  280. SSL_TLSV1,
  281. SSL_HIGH|SSL_FIPS,
  282. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  283. 256,
  284. 256,
  285. },
  286. /* Cipher 39 */
  287. {
  288. 1,
  289. TLS1_TXT_DHE_RSA_WITH_AES_256_SHA,
  290. TLS1_CK_DHE_RSA_WITH_AES_256_SHA,
  291. SSL_kEDH,
  292. SSL_aRSA,
  293. SSL_AES256,
  294. SSL_SHA1,
  295. SSL_TLSV1,
  296. SSL_HIGH|SSL_FIPS,
  297. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  298. 256,
  299. 256,
  300. },
  301. /* Cipher 3A */
  302. {
  303. 1,
  304. TLS1_TXT_ADH_WITH_AES_256_SHA,
  305. TLS1_CK_ADH_WITH_AES_256_SHA,
  306. SSL_kEDH,
  307. SSL_aNULL,
  308. SSL_AES256,
  309. SSL_SHA1,
  310. SSL_TLSV1,
  311. SSL_HIGH|SSL_FIPS,
  312. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  313. 256,
  314. 256,
  315. },
  316. /* TLS v1.2 ciphersuites */
  317. /* Cipher 3C */
  318. {
  319. 1,
  320. TLS1_TXT_RSA_WITH_AES_128_SHA256,
  321. TLS1_CK_RSA_WITH_AES_128_SHA256,
  322. SSL_kRSA,
  323. SSL_aRSA,
  324. SSL_AES128,
  325. SSL_SHA256,
  326. SSL_TLSV1_2,
  327. SSL_HIGH|SSL_FIPS,
  328. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  329. 128,
  330. 128,
  331. },
  332. /* Cipher 3D */
  333. {
  334. 1,
  335. TLS1_TXT_RSA_WITH_AES_256_SHA256,
  336. TLS1_CK_RSA_WITH_AES_256_SHA256,
  337. SSL_kRSA,
  338. SSL_aRSA,
  339. SSL_AES256,
  340. SSL_SHA256,
  341. SSL_TLSV1_2,
  342. SSL_HIGH|SSL_FIPS,
  343. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  344. 256,
  345. 256,
  346. },
  347. /* TLS v1.2 ciphersuites */
  348. /* Cipher 67 */
  349. {
  350. 1,
  351. TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256,
  352. TLS1_CK_DHE_RSA_WITH_AES_128_SHA256,
  353. SSL_kEDH,
  354. SSL_aRSA,
  355. SSL_AES128,
  356. SSL_SHA256,
  357. SSL_TLSV1_2,
  358. SSL_HIGH|SSL_FIPS,
  359. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  360. 128,
  361. 128,
  362. },
  363. /* Cipher 6B */
  364. {
  365. 1,
  366. TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256,
  367. TLS1_CK_DHE_RSA_WITH_AES_256_SHA256,
  368. SSL_kEDH,
  369. SSL_aRSA,
  370. SSL_AES256,
  371. SSL_SHA256,
  372. SSL_TLSV1_2,
  373. SSL_HIGH|SSL_FIPS,
  374. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  375. 256,
  376. 256,
  377. },
  378. /* Cipher 6C */
  379. {
  380. 1,
  381. TLS1_TXT_ADH_WITH_AES_128_SHA256,
  382. TLS1_CK_ADH_WITH_AES_128_SHA256,
  383. SSL_kEDH,
  384. SSL_aNULL,
  385. SSL_AES128,
  386. SSL_SHA256,
  387. SSL_TLSV1_2,
  388. SSL_HIGH|SSL_FIPS,
  389. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  390. 128,
  391. 128,
  392. },
  393. /* Cipher 6D */
  394. {
  395. 1,
  396. TLS1_TXT_ADH_WITH_AES_256_SHA256,
  397. TLS1_CK_ADH_WITH_AES_256_SHA256,
  398. SSL_kEDH,
  399. SSL_aNULL,
  400. SSL_AES256,
  401. SSL_SHA256,
  402. SSL_TLSV1_2,
  403. SSL_HIGH|SSL_FIPS,
  404. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  405. 256,
  406. 256,
  407. },
  408. /* Cipher 8A */
  409. {
  410. 1,
  411. TLS1_TXT_PSK_WITH_RC4_128_SHA,
  412. TLS1_CK_PSK_WITH_RC4_128_SHA,
  413. SSL_kPSK,
  414. SSL_aPSK,
  415. SSL_RC4,
  416. SSL_SHA1,
  417. SSL_TLSV1,
  418. SSL_MEDIUM,
  419. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  420. 128,
  421. 128,
  422. },
  423. /* Cipher 8C */
  424. {
  425. 1,
  426. TLS1_TXT_PSK_WITH_AES_128_CBC_SHA,
  427. TLS1_CK_PSK_WITH_AES_128_CBC_SHA,
  428. SSL_kPSK,
  429. SSL_aPSK,
  430. SSL_AES128,
  431. SSL_SHA1,
  432. SSL_TLSV1,
  433. SSL_HIGH|SSL_FIPS,
  434. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  435. 128,
  436. 128,
  437. },
  438. /* Cipher 8D */
  439. {
  440. 1,
  441. TLS1_TXT_PSK_WITH_AES_256_CBC_SHA,
  442. TLS1_CK_PSK_WITH_AES_256_CBC_SHA,
  443. SSL_kPSK,
  444. SSL_aPSK,
  445. SSL_AES256,
  446. SSL_SHA1,
  447. SSL_TLSV1,
  448. SSL_HIGH|SSL_FIPS,
  449. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  450. 256,
  451. 256,
  452. },
  453. /* GCM ciphersuites from RFC5288 */
  454. /* Cipher 9C */
  455. {
  456. 1,
  457. TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256,
  458. TLS1_CK_RSA_WITH_AES_128_GCM_SHA256,
  459. SSL_kRSA,
  460. SSL_aRSA,
  461. SSL_AES128GCM,
  462. SSL_AEAD,
  463. SSL_TLSV1_2,
  464. SSL_HIGH|SSL_FIPS,
  465. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  466. 128,
  467. 128,
  468. },
  469. /* Cipher 9D */
  470. {
  471. 1,
  472. TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384,
  473. TLS1_CK_RSA_WITH_AES_256_GCM_SHA384,
  474. SSL_kRSA,
  475. SSL_aRSA,
  476. SSL_AES256GCM,
  477. SSL_AEAD,
  478. SSL_TLSV1_2,
  479. SSL_HIGH|SSL_FIPS,
  480. SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
  481. SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  482. 256,
  483. 256,
  484. },
  485. /* Cipher 9E */
  486. {
  487. 1,
  488. TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256,
  489. TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256,
  490. SSL_kEDH,
  491. SSL_aRSA,
  492. SSL_AES128GCM,
  493. SSL_AEAD,
  494. SSL_TLSV1_2,
  495. SSL_HIGH|SSL_FIPS,
  496. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  497. 128,
  498. 128,
  499. },
  500. /* Cipher 9F */
  501. {
  502. 1,
  503. TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384,
  504. TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384,
  505. SSL_kEDH,
  506. SSL_aRSA,
  507. SSL_AES256GCM,
  508. SSL_AEAD,
  509. SSL_TLSV1_2,
  510. SSL_HIGH|SSL_FIPS,
  511. SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
  512. SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  513. 256,
  514. 256,
  515. },
  516. /* Cipher A6 */
  517. {
  518. 1,
  519. TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256,
  520. TLS1_CK_ADH_WITH_AES_128_GCM_SHA256,
  521. SSL_kEDH,
  522. SSL_aNULL,
  523. SSL_AES128GCM,
  524. SSL_AEAD,
  525. SSL_TLSV1_2,
  526. SSL_HIGH|SSL_FIPS,
  527. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  528. 128,
  529. 128,
  530. },
  531. /* Cipher A7 */
  532. {
  533. 1,
  534. TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384,
  535. TLS1_CK_ADH_WITH_AES_256_GCM_SHA384,
  536. SSL_kEDH,
  537. SSL_aNULL,
  538. SSL_AES256GCM,
  539. SSL_AEAD,
  540. SSL_TLSV1_2,
  541. SSL_HIGH|SSL_FIPS,
  542. SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
  543. SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  544. 256,
  545. 256,
  546. },
  547. /* Cipher C007 */
  548. {
  549. 1,
  550. TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA,
  551. TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA,
  552. SSL_kEECDH,
  553. SSL_aECDSA,
  554. SSL_RC4,
  555. SSL_SHA1,
  556. SSL_TLSV1,
  557. SSL_MEDIUM,
  558. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  559. 128,
  560. 128,
  561. },
  562. /* Cipher C009 */
  563. {
  564. 1,
  565. TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
  566. TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
  567. SSL_kEECDH,
  568. SSL_aECDSA,
  569. SSL_AES128,
  570. SSL_SHA1,
  571. SSL_TLSV1,
  572. SSL_HIGH|SSL_FIPS,
  573. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  574. 128,
  575. 128,
  576. },
  577. /* Cipher C00A */
  578. {
  579. 1,
  580. TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
  581. TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
  582. SSL_kEECDH,
  583. SSL_aECDSA,
  584. SSL_AES256,
  585. SSL_SHA1,
  586. SSL_TLSV1,
  587. SSL_HIGH|SSL_FIPS,
  588. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  589. 256,
  590. 256,
  591. },
  592. /* Cipher C011 */
  593. {
  594. 1,
  595. TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA,
  596. TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA,
  597. SSL_kEECDH,
  598. SSL_aRSA,
  599. SSL_RC4,
  600. SSL_SHA1,
  601. SSL_TLSV1,
  602. SSL_MEDIUM,
  603. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  604. 128,
  605. 128,
  606. },
  607. /* Cipher C013 */
  608. {
  609. 1,
  610. TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA,
  611. TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA,
  612. SSL_kEECDH,
  613. SSL_aRSA,
  614. SSL_AES128,
  615. SSL_SHA1,
  616. SSL_TLSV1,
  617. SSL_HIGH|SSL_FIPS,
  618. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  619. 128,
  620. 128,
  621. },
  622. /* Cipher C014 */
  623. {
  624. 1,
  625. TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA,
  626. TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA,
  627. SSL_kEECDH,
  628. SSL_aRSA,
  629. SSL_AES256,
  630. SSL_SHA1,
  631. SSL_TLSV1,
  632. SSL_HIGH|SSL_FIPS,
  633. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  634. 256,
  635. 256,
  636. },
  637. /* Cipher C016 */
  638. {
  639. 1,
  640. TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA,
  641. TLS1_CK_ECDH_anon_WITH_RC4_128_SHA,
  642. SSL_kEECDH,
  643. SSL_aNULL,
  644. SSL_RC4,
  645. SSL_SHA1,
  646. SSL_TLSV1,
  647. SSL_MEDIUM,
  648. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  649. 128,
  650. 128,
  651. },
  652. /* Cipher C018 */
  653. {
  654. 1,
  655. TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA,
  656. TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA,
  657. SSL_kEECDH,
  658. SSL_aNULL,
  659. SSL_AES128,
  660. SSL_SHA1,
  661. SSL_TLSV1,
  662. SSL_HIGH|SSL_FIPS,
  663. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  664. 128,
  665. 128,
  666. },
  667. /* Cipher C019 */
  668. {
  669. 1,
  670. TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA,
  671. TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA,
  672. SSL_kEECDH,
  673. SSL_aNULL,
  674. SSL_AES256,
  675. SSL_SHA1,
  676. SSL_TLSV1,
  677. SSL_HIGH|SSL_FIPS,
  678. SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF,
  679. 256,
  680. 256,
  681. },
  682. /* HMAC based TLS v1.2 ciphersuites from RFC5289 */
  683. /* Cipher C023 */
  684. {
  685. 1,
  686. TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256,
  687. TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256,
  688. SSL_kEECDH,
  689. SSL_aECDSA,
  690. SSL_AES128,
  691. SSL_SHA256,
  692. SSL_TLSV1_2,
  693. SSL_HIGH|SSL_FIPS,
  694. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256,
  695. 128,
  696. 128,
  697. },
  698. /* Cipher C024 */
  699. {
  700. 1,
  701. TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384,
  702. TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384,
  703. SSL_kEECDH,
  704. SSL_aECDSA,
  705. SSL_AES256,
  706. SSL_SHA384,
  707. SSL_TLSV1_2,
  708. SSL_HIGH|SSL_FIPS,
  709. SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
  710. 256,
  711. 256,
  712. },
  713. /* Cipher C027 */
  714. {
  715. 1,
  716. TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256,
  717. TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256,
  718. SSL_kEECDH,
  719. SSL_aRSA,
  720. SSL_AES128,
  721. SSL_SHA256,
  722. SSL_TLSV1_2,
  723. SSL_HIGH|SSL_FIPS,
  724. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256,
  725. 128,
  726. 128,
  727. },
  728. /* Cipher C028 */
  729. {
  730. 1,
  731. TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384,
  732. TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384,
  733. SSL_kEECDH,
  734. SSL_aRSA,
  735. SSL_AES256,
  736. SSL_SHA384,
  737. SSL_TLSV1_2,
  738. SSL_HIGH|SSL_FIPS,
  739. SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384,
  740. 256,
  741. 256,
  742. },
  743. /* GCM based TLS v1.2 ciphersuites from RFC5289 */
  744. /* Cipher C02B */
  745. {
  746. 1,
  747. TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
  748. TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
  749. SSL_kEECDH,
  750. SSL_aECDSA,
  751. SSL_AES128GCM,
  752. SSL_AEAD,
  753. SSL_TLSV1_2,
  754. SSL_HIGH|SSL_FIPS,
  755. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  756. 128,
  757. 128,
  758. },
  759. /* Cipher C02C */
  760. {
  761. 1,
  762. TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
  763. TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
  764. SSL_kEECDH,
  765. SSL_aECDSA,
  766. SSL_AES256GCM,
  767. SSL_AEAD,
  768. SSL_TLSV1_2,
  769. SSL_HIGH|SSL_FIPS,
  770. SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
  771. SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  772. 256,
  773. 256,
  774. },
  775. /* Cipher C02F */
  776. {
  777. 1,
  778. TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
  779. TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
  780. SSL_kEECDH,
  781. SSL_aRSA,
  782. SSL_AES128GCM,
  783. SSL_AEAD,
  784. SSL_TLSV1_2,
  785. SSL_HIGH|SSL_FIPS,
  786. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  787. 128,
  788. 128,
  789. },
  790. /* Cipher C030 */
  791. {
  792. 1,
  793. TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
  794. TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
  795. SSL_kEECDH,
  796. SSL_aRSA,
  797. SSL_AES256GCM,
  798. SSL_AEAD,
  799. SSL_TLSV1_2,
  800. SSL_HIGH|SSL_FIPS,
  801. SSL_HANDSHAKE_MAC_SHA384|TLS1_PRF_SHA384|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
  802. SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  803. 256,
  804. 256,
  805. },
  806. /* ECDH PSK ciphersuites */
  807. /* Cipher CAFE */
  808. {
  809. 1,
  810. TLS1_TXT_ECDHE_PSK_WITH_AES_128_GCM_SHA256,
  811. TLS1_CK_ECDHE_PSK_WITH_AES_128_GCM_SHA256,
  812. SSL_kEECDH,
  813. SSL_aPSK,
  814. SSL_AES128GCM,
  815. SSL_AEAD,
  816. SSL_TLSV1_2,
  817. SSL_HIGH,
  818. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(4)|
  819. SSL_CIPHER_ALGORITHM2_VARIABLE_NONCE_INCLUDED_IN_RECORD,
  820. 128,
  821. 128,
  822. },
  823. {
  824. 1,
  825. TLS1_TXT_ECDHE_RSA_WITH_CHACHA20_POLY1305,
  826. TLS1_CK_ECDHE_RSA_CHACHA20_POLY1305,
  827. SSL_kEECDH,
  828. SSL_aRSA,
  829. SSL_CHACHA20POLY1305,
  830. SSL_AEAD,
  831. SSL_TLSV1_2,
  832. SSL_HIGH,
  833. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(0),
  834. 256,
  835. 0,
  836. },
  837. {
  838. 1,
  839. TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
  840. TLS1_CK_ECDHE_ECDSA_CHACHA20_POLY1305,
  841. SSL_kEECDH,
  842. SSL_aECDSA,
  843. SSL_CHACHA20POLY1305,
  844. SSL_AEAD,
  845. SSL_TLSV1_2,
  846. SSL_HIGH,
  847. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(0),
  848. 256,
  849. 0,
  850. },
  851. {
  852. 1,
  853. TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305,
  854. TLS1_CK_DHE_RSA_CHACHA20_POLY1305,
  855. SSL_kEDH,
  856. SSL_aRSA,
  857. SSL_CHACHA20POLY1305,
  858. SSL_AEAD,
  859. SSL_TLSV1_2,
  860. SSL_HIGH,
  861. SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256|SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(0),
  862. 256,
  863. 0,
  864. },
  865. /* end of list */
  866. };
  867. SSL3_ENC_METHOD SSLv3_enc_data={
  868. ssl3_enc,
  869. n_ssl3_mac,
  870. ssl3_setup_key_block,
  871. ssl3_generate_master_secret,
  872. ssl3_change_cipher_state,
  873. ssl3_final_finish_mac,
  874. MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH,
  875. ssl3_cert_verify_mac,
  876. SSL3_MD_CLIENT_FINISHED_CONST,4,
  877. SSL3_MD_SERVER_FINISHED_CONST,4,
  878. ssl3_alert_code,
  879. (int (*)(SSL *, unsigned char *, size_t, const char *,
  880. size_t, const unsigned char *, size_t,
  881. int use_context))ssl_undefined_function,
  882. 0,
  883. SSL3_HM_HEADER_LENGTH,
  884. ssl3_set_handshake_header,
  885. ssl3_handshake_write,
  886. ssl3_add_to_finished_hash,
  887. };
  888. int ssl3_num_ciphers(void)
  889. {
  890. return(SSL3_NUM_CIPHERS);
  891. }
  892. const SSL_CIPHER *ssl3_get_cipher(unsigned int u)
  893. {
  894. if (u < SSL3_NUM_CIPHERS)
  895. return(&(ssl3_ciphers[SSL3_NUM_CIPHERS-1-u]));
  896. else
  897. return(NULL);
  898. }
  899. int ssl3_pending(const SSL *s)
  900. {
  901. if (s->rstate == SSL_ST_READ_BODY)
  902. return 0;
  903. return (s->s3->rrec.type == SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0;
  904. }
  905. void ssl3_set_handshake_header(SSL *s, int htype, unsigned long len)
  906. {
  907. unsigned char *p = (unsigned char *)s->init_buf->data;
  908. *(p++) = htype;
  909. l2n3(len, p);
  910. s->init_num = (int)len + SSL3_HM_HEADER_LENGTH;
  911. s->init_off = 0;
  912. }
  913. int ssl3_handshake_write(SSL *s, enum should_add_to_finished_hash should_add_to_finished_hash)
  914. {
  915. return ssl3_do_write(s, SSL3_RT_HANDSHAKE, should_add_to_finished_hash);
  916. }
  917. void ssl3_add_to_finished_hash(SSL *s)
  918. {
  919. ssl3_finish_mac(s, (uint8_t*) s->init_buf->data, s->init_num);
  920. }
  921. int ssl3_new(SSL *s)
  922. {
  923. SSL3_STATE *s3;
  924. if ((s3=OPENSSL_malloc(sizeof *s3)) == NULL) goto err;
  925. memset(s3,0,sizeof *s3);
  926. memset(s3->rrec.seq_num,0,sizeof(s3->rrec.seq_num));
  927. memset(s3->wrec.seq_num,0,sizeof(s3->wrec.seq_num));
  928. s->s3=s3;
  929. s->tlsext_channel_id_enabled = s->ctx->tlsext_channel_id_enabled;
  930. if (s->ctx->tlsext_channel_id_private)
  931. s->tlsext_channel_id_private = EVP_PKEY_dup(s->ctx->tlsext_channel_id_private);
  932. s->method->ssl_clear(s);
  933. return(1);
  934. err:
  935. return(0);
  936. }
  937. void ssl3_free(SSL *s)
  938. {
  939. if(s == NULL)
  940. return;
  941. ssl3_cleanup_key_block(s);
  942. if (s->s3->rbuf.buf != NULL)
  943. ssl3_release_read_buffer(s);
  944. if (s->s3->wbuf.buf != NULL)
  945. ssl3_release_write_buffer(s);
  946. if (s->s3->tmp.dh != NULL)
  947. DH_free(s->s3->tmp.dh);
  948. if (s->s3->tmp.ecdh != NULL)
  949. EC_KEY_free(s->s3->tmp.ecdh);
  950. if (s->s3->tmp.ca_names != NULL)
  951. sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free);
  952. if (s->s3->tmp.certificate_types != NULL)
  953. OPENSSL_free(s->s3->tmp.certificate_types);
  954. if (s->s3->tmp.peer_ecpointformatlist)
  955. OPENSSL_free(s->s3->tmp.peer_ecpointformatlist);
  956. if (s->s3->tmp.peer_ellipticcurvelist)
  957. OPENSSL_free(s->s3->tmp.peer_ellipticcurvelist);
  958. if (s->s3->tmp.peer_psk_identity_hint)
  959. OPENSSL_free(s->s3->tmp.peer_psk_identity_hint);
  960. if (s->s3->handshake_buffer) {
  961. BIO_free(s->s3->handshake_buffer);
  962. }
  963. if (s->s3->handshake_dgst) ssl3_free_digest_list(s);
  964. if (s->s3->alpn_selected)
  965. OPENSSL_free(s->s3->alpn_selected);
  966. OPENSSL_cleanse(s->s3,sizeof *s->s3);
  967. OPENSSL_free(s->s3);
  968. s->s3=NULL;
  969. }
  970. void ssl3_clear(SSL *s)
  971. {
  972. unsigned char *rp,*wp;
  973. size_t rlen, wlen;
  974. int init_extra;
  975. /* TODO(davidben): Can this just call ssl3_free +
  976. * ssl3_new. rbuf, wbuf, and init_extra are preserved, but
  977. * this may not serve anything more than saving a malloc. */
  978. ssl3_cleanup_key_block(s);
  979. if (s->s3->tmp.ca_names != NULL)
  980. sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free);
  981. s->s3->tmp.ca_names = NULL;
  982. if (s->s3->tmp.certificate_types != NULL)
  983. OPENSSL_free(s->s3->tmp.certificate_types);
  984. s->s3->tmp.certificate_types = NULL;
  985. if (s->s3->tmp.peer_ecpointformatlist)
  986. OPENSSL_free(s->s3->tmp.peer_ecpointformatlist);
  987. s->s3->tmp.peer_ecpointformatlist = NULL;
  988. if (s->s3->tmp.peer_ellipticcurvelist)
  989. OPENSSL_free(s->s3->tmp.peer_ellipticcurvelist);
  990. s->s3->tmp.peer_ellipticcurvelist = NULL;
  991. if (s->s3->tmp.peer_psk_identity_hint)
  992. OPENSSL_free(s->s3->tmp.peer_psk_identity_hint);
  993. s->s3->tmp.peer_psk_identity_hint = NULL;
  994. if (s->s3->tmp.dh != NULL)
  995. {
  996. DH_free(s->s3->tmp.dh);
  997. s->s3->tmp.dh = NULL;
  998. }
  999. if (s->s3->tmp.ecdh != NULL)
  1000. {
  1001. EC_KEY_free(s->s3->tmp.ecdh);
  1002. s->s3->tmp.ecdh = NULL;
  1003. }
  1004. rp = s->s3->rbuf.buf;
  1005. wp = s->s3->wbuf.buf;
  1006. rlen = s->s3->rbuf.len;
  1007. wlen = s->s3->wbuf.len;
  1008. init_extra = s->s3->init_extra;
  1009. if (s->s3->handshake_buffer) {
  1010. BIO_free(s->s3->handshake_buffer);
  1011. s->s3->handshake_buffer = NULL;
  1012. }
  1013. if (s->s3->handshake_dgst) {
  1014. ssl3_free_digest_list(s);
  1015. }
  1016. if (s->s3->alpn_selected)
  1017. {
  1018. OPENSSL_free(s->s3->alpn_selected);
  1019. s->s3->alpn_selected = NULL;
  1020. }
  1021. memset(s->s3,0,sizeof *s->s3);
  1022. s->s3->rbuf.buf = rp;
  1023. s->s3->wbuf.buf = wp;
  1024. s->s3->rbuf.len = rlen;
  1025. s->s3->wbuf.len = wlen;
  1026. s->s3->init_extra = init_extra;
  1027. ssl_free_wbio_buffer(s);
  1028. s->packet_length=0;
  1029. s->s3->renegotiate=0;
  1030. s->s3->total_renegotiations=0;
  1031. s->s3->num_renegotiations=0;
  1032. s->s3->in_read_app_data=0;
  1033. s->version = s->method->version;
  1034. if (s->next_proto_negotiated)
  1035. {
  1036. OPENSSL_free(s->next_proto_negotiated);
  1037. s->next_proto_negotiated = NULL;
  1038. s->next_proto_negotiated_len = 0;
  1039. }
  1040. s->s3->tlsext_channel_id_valid = 0;
  1041. }
  1042. static int ssl3_set_req_cert_type(CERT *c, const unsigned char *p, size_t len);
  1043. long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
  1044. {
  1045. int ret=0;
  1046. if (cmd == SSL_CTRL_SET_TMP_RSA ||
  1047. cmd == SSL_CTRL_SET_TMP_RSA_CB ||
  1048. cmd == SSL_CTRL_SET_TMP_DH ||
  1049. cmd == SSL_CTRL_SET_TMP_DH_CB)
  1050. {
  1051. if (!ssl_cert_inst(&s->cert))
  1052. {
  1053. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_MALLOC_FAILURE);
  1054. return(0);
  1055. }
  1056. }
  1057. switch (cmd)
  1058. {
  1059. case SSL_CTRL_GET_SESSION_REUSED:
  1060. ret=s->hit;
  1061. break;
  1062. case SSL_CTRL_GET_CLIENT_CERT_REQUEST:
  1063. break;
  1064. case SSL_CTRL_GET_NUM_RENEGOTIATIONS:
  1065. ret=s->s3->num_renegotiations;
  1066. break;
  1067. case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS:
  1068. ret=s->s3->num_renegotiations;
  1069. s->s3->num_renegotiations=0;
  1070. break;
  1071. case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS:
  1072. ret=s->s3->total_renegotiations;
  1073. break;
  1074. case SSL_CTRL_GET_FLAGS:
  1075. ret=(int)(s->s3->flags);
  1076. break;
  1077. case SSL_CTRL_NEED_TMP_RSA:
  1078. /* Temporary RSA keys are never used. */
  1079. ret = 0;
  1080. break;
  1081. case SSL_CTRL_SET_TMP_RSA:
  1082. /* Temporary RSA keys are never used. */
  1083. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  1084. break;
  1085. case SSL_CTRL_SET_TMP_RSA_CB:
  1086. {
  1087. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  1088. return(ret);
  1089. }
  1090. break;
  1091. case SSL_CTRL_SET_TMP_DH:
  1092. {
  1093. DH *dh = (DH *)parg;
  1094. if (dh == NULL)
  1095. {
  1096. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_PASSED_NULL_PARAMETER);
  1097. return(ret);
  1098. }
  1099. if ((dh = DHparams_dup(dh)) == NULL)
  1100. {
  1101. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_DH_LIB);
  1102. return(ret);
  1103. }
  1104. if (!(s->options & SSL_OP_SINGLE_DH_USE))
  1105. {
  1106. if (!DH_generate_key(dh))
  1107. {
  1108. DH_free(dh);
  1109. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_DH_LIB);
  1110. return(ret);
  1111. }
  1112. }
  1113. if (s->cert->dh_tmp != NULL)
  1114. DH_free(s->cert->dh_tmp);
  1115. s->cert->dh_tmp = dh;
  1116. ret = 1;
  1117. }
  1118. break;
  1119. case SSL_CTRL_SET_TMP_DH_CB:
  1120. {
  1121. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  1122. return(ret);
  1123. }
  1124. break;
  1125. case SSL_CTRL_SET_TMP_ECDH:
  1126. {
  1127. EC_KEY *ecdh = NULL;
  1128. if (parg == NULL)
  1129. {
  1130. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_PASSED_NULL_PARAMETER);
  1131. return(ret);
  1132. }
  1133. if (!EC_KEY_up_ref((EC_KEY *)parg))
  1134. {
  1135. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_ECDH_LIB);
  1136. return(ret);
  1137. }
  1138. ecdh = (EC_KEY *)parg;
  1139. if (!(s->options & SSL_OP_SINGLE_ECDH_USE))
  1140. {
  1141. if (!EC_KEY_generate_key(ecdh))
  1142. {
  1143. EC_KEY_free(ecdh);
  1144. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_ECDH_LIB);
  1145. return(ret);
  1146. }
  1147. }
  1148. if (s->cert->ecdh_tmp != NULL)
  1149. EC_KEY_free(s->cert->ecdh_tmp);
  1150. s->cert->ecdh_tmp = ecdh;
  1151. ret = 1;
  1152. }
  1153. break;
  1154. case SSL_CTRL_SET_TMP_ECDH_CB:
  1155. {
  1156. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  1157. return(ret);
  1158. }
  1159. break;
  1160. case SSL_CTRL_SET_TLSEXT_HOSTNAME:
  1161. if (larg == TLSEXT_NAMETYPE_host_name)
  1162. {
  1163. if (s->tlsext_hostname != NULL)
  1164. OPENSSL_free(s->tlsext_hostname);
  1165. s->tlsext_hostname = NULL;
  1166. ret = 1;
  1167. if (parg == NULL)
  1168. break;
  1169. if (strlen((char *)parg) > TLSEXT_MAXLEN_host_name)
  1170. {
  1171. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, SSL_R_SSL3_EXT_INVALID_SERVERNAME);
  1172. return 0;
  1173. }
  1174. if ((s->tlsext_hostname = BUF_strdup((char *)parg)) == NULL)
  1175. {
  1176. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_INTERNAL_ERROR);
  1177. return 0;
  1178. }
  1179. }
  1180. else
  1181. {
  1182. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE);
  1183. return 0;
  1184. }
  1185. break;
  1186. case SSL_CTRL_SET_TLSEXT_DEBUG_ARG:
  1187. s->tlsext_debug_arg=parg;
  1188. ret = 1;
  1189. break;
  1190. case SSL_CTRL_CHAIN:
  1191. if (larg)
  1192. return ssl_cert_set1_chain(s->cert,
  1193. (STACK_OF (X509) *)parg);
  1194. else
  1195. return ssl_cert_set0_chain(s->cert,
  1196. (STACK_OF (X509) *)parg);
  1197. case SSL_CTRL_CHAIN_CERT:
  1198. if (larg)
  1199. return ssl_cert_add1_chain_cert(s->cert, (X509 *)parg);
  1200. else
  1201. return ssl_cert_add0_chain_cert(s->cert, (X509 *)parg);
  1202. case SSL_CTRL_GET_CHAIN_CERTS:
  1203. *(STACK_OF(X509) **)parg = s->cert->key->chain;
  1204. break;
  1205. case SSL_CTRL_SELECT_CURRENT_CERT:
  1206. return ssl_cert_select_current(s->cert, (X509 *)parg);
  1207. case SSL_CTRL_GET_CURVES:
  1208. {
  1209. const uint16_t *clist = s->s3->tmp.peer_ellipticcurvelist;
  1210. size_t clistlen = s->s3->tmp.peer_ellipticcurvelist_length;
  1211. if (parg)
  1212. {
  1213. size_t i;
  1214. int *cptr = parg;
  1215. int nid;
  1216. for (i = 0; i < clistlen; i++)
  1217. {
  1218. nid = tls1_ec_curve_id2nid(clist[i]);
  1219. if (nid != OBJ_undef)
  1220. cptr[i] = nid;
  1221. else
  1222. cptr[i] = TLSEXT_nid_unknown | clist[i];
  1223. }
  1224. }
  1225. return (int)clistlen;
  1226. }
  1227. case SSL_CTRL_SET_CURVES:
  1228. return tls1_set_curves(&s->tlsext_ellipticcurvelist,
  1229. &s->tlsext_ellipticcurvelist_length,
  1230. parg, larg);
  1231. case SSL_CTRL_SET_ECDH_AUTO:
  1232. s->cert->ecdh_tmp_auto = larg;
  1233. return 1;
  1234. case SSL_CTRL_SET_SIGALGS:
  1235. return tls1_set_sigalgs(s->cert, parg, larg, 0);
  1236. case SSL_CTRL_SET_CLIENT_SIGALGS:
  1237. return tls1_set_sigalgs(s->cert, parg, larg, 1);
  1238. case SSL_CTRL_GET_CLIENT_CERT_TYPES:
  1239. {
  1240. const unsigned char **pctype = parg;
  1241. if (s->server || !s->s3->tmp.cert_req)
  1242. return 0;
  1243. if (pctype)
  1244. *pctype = s->s3->tmp.certificate_types;
  1245. return (int)s->s3->tmp.num_certificate_types;
  1246. }
  1247. case SSL_CTRL_SET_CLIENT_CERT_TYPES:
  1248. if (!s->server)
  1249. return 0;
  1250. return ssl3_set_req_cert_type(s->cert, parg, larg);
  1251. case SSL_CTRL_BUILD_CERT_CHAIN:
  1252. return ssl_build_cert_chain(s->cert, s->ctx->cert_store, larg);
  1253. case SSL_CTRL_SET_VERIFY_CERT_STORE:
  1254. return ssl_cert_set_cert_store(s->cert, parg, 0, larg);
  1255. case SSL_CTRL_SET_CHAIN_CERT_STORE:
  1256. return ssl_cert_set_cert_store(s->cert, parg, 1, larg);
  1257. case SSL_CTRL_GET_PEER_SIGNATURE_NID:
  1258. if (SSL_USE_SIGALGS(s))
  1259. {
  1260. if (s->session && s->session->sess_cert)
  1261. {
  1262. const EVP_MD *sig;
  1263. sig = s->session->sess_cert->peer_key->digest;
  1264. if (sig)
  1265. {
  1266. *(int *)parg = EVP_MD_type(sig);
  1267. return 1;
  1268. }
  1269. }
  1270. return 0;
  1271. }
  1272. /* Might want to do something here for other versions */
  1273. else
  1274. return 0;
  1275. case SSL_CTRL_GET_SERVER_TMP_KEY:
  1276. if (s->server || !s->session || !s->session->sess_cert)
  1277. return 0;
  1278. else
  1279. {
  1280. SESS_CERT *sc;
  1281. EVP_PKEY *ptmp;
  1282. int rv = 0;
  1283. sc = s->session->sess_cert;
  1284. if (!sc->peer_dh_tmp && !sc->peer_ecdh_tmp)
  1285. return 0;
  1286. ptmp = EVP_PKEY_new();
  1287. if (!ptmp)
  1288. return 0;
  1289. if (sc->peer_dh_tmp)
  1290. rv = EVP_PKEY_set1_DH(ptmp, sc->peer_dh_tmp);
  1291. else if (sc->peer_ecdh_tmp)
  1292. rv = EVP_PKEY_set1_EC_KEY(ptmp, sc->peer_ecdh_tmp);
  1293. if (rv)
  1294. {
  1295. *(EVP_PKEY **)parg = ptmp;
  1296. return 1;
  1297. }
  1298. EVP_PKEY_free(ptmp);
  1299. return 0;
  1300. }
  1301. case SSL_CTRL_GET_EC_POINT_FORMATS:
  1302. {
  1303. const uint8_t **pformat = parg;
  1304. if (!s->s3->tmp.peer_ecpointformatlist)
  1305. return 0;
  1306. *pformat = s->s3->tmp.peer_ecpointformatlist;
  1307. return (int)s->s3->tmp.peer_ecpointformatlist_length;
  1308. }
  1309. case SSL_CTRL_CHANNEL_ID:
  1310. s->tlsext_channel_id_enabled = 1;
  1311. ret = 1;
  1312. break;
  1313. case SSL_CTRL_SET_CHANNEL_ID:
  1314. if (s->server)
  1315. break;
  1316. s->tlsext_channel_id_enabled = 1;
  1317. if (EVP_PKEY_bits(parg) != 256)
  1318. {
  1319. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, SSL_R_CHANNEL_ID_NOT_P256);
  1320. break;
  1321. }
  1322. if (s->tlsext_channel_id_private)
  1323. EVP_PKEY_free(s->tlsext_channel_id_private);
  1324. s->tlsext_channel_id_private = EVP_PKEY_dup((EVP_PKEY*) parg);
  1325. ret = 1;
  1326. break;
  1327. case SSL_CTRL_GET_CHANNEL_ID:
  1328. if (!s->server)
  1329. break;
  1330. if (!s->s3->tlsext_channel_id_valid)
  1331. break;
  1332. memcpy(parg, s->s3->tlsext_channel_id, larg < 64 ? larg : 64);
  1333. return 64;
  1334. case SSL_CTRL_FALLBACK_SCSV:
  1335. if (s->server)
  1336. break;
  1337. s->fallback_scsv = 1;
  1338. ret = 1;
  1339. break;
  1340. default:
  1341. break;
  1342. }
  1343. return(ret);
  1344. }
  1345. long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void))
  1346. {
  1347. int ret=0;
  1348. if (cmd == SSL_CTRL_SET_TMP_RSA_CB || cmd == SSL_CTRL_SET_TMP_DH_CB)
  1349. {
  1350. if (!ssl_cert_inst(&s->cert))
  1351. {
  1352. OPENSSL_PUT_ERROR(SSL, ssl3_callback_ctrl, ERR_R_MALLOC_FAILURE);
  1353. return(0);
  1354. }
  1355. }
  1356. switch (cmd)
  1357. {
  1358. case SSL_CTRL_SET_TMP_RSA_CB:
  1359. /* Ignore the callback; temporary RSA keys are never used. */
  1360. break;
  1361. case SSL_CTRL_SET_TMP_DH_CB:
  1362. {
  1363. s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
  1364. }
  1365. break;
  1366. case SSL_CTRL_SET_TMP_ECDH_CB:
  1367. {
  1368. s->cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
  1369. }
  1370. break;
  1371. case SSL_CTRL_SET_TLSEXT_DEBUG_CB:
  1372. s->tlsext_debug_cb=(void (*)(SSL *,int ,int,
  1373. unsigned char *, int, void *))fp;
  1374. break;
  1375. default:
  1376. break;
  1377. }
  1378. return(ret);
  1379. }
  1380. long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
  1381. {
  1382. CERT *cert;
  1383. cert=ctx->cert;
  1384. switch (cmd)
  1385. {
  1386. case SSL_CTRL_NEED_TMP_RSA:
  1387. /* Temporary RSA keys are never used. */
  1388. return 0;
  1389. case SSL_CTRL_SET_TMP_RSA:
  1390. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  1391. return 0;
  1392. case SSL_CTRL_SET_TMP_RSA_CB:
  1393. {
  1394. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  1395. return(0);
  1396. }
  1397. break;
  1398. case SSL_CTRL_SET_TMP_DH:
  1399. {
  1400. DH *new=NULL,*dh;
  1401. dh=(DH *)parg;
  1402. if ((new=DHparams_dup(dh)) == NULL)
  1403. {
  1404. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_DH_LIB);
  1405. return 0;
  1406. }
  1407. if (!(ctx->options & SSL_OP_SINGLE_DH_USE))
  1408. {
  1409. if (!DH_generate_key(new))
  1410. {
  1411. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_DH_LIB);
  1412. DH_free(new);
  1413. return 0;
  1414. }
  1415. }
  1416. if (cert->dh_tmp != NULL)
  1417. DH_free(cert->dh_tmp);
  1418. cert->dh_tmp=new;
  1419. return 1;
  1420. }
  1421. /*break; */
  1422. case SSL_CTRL_SET_TMP_DH_CB:
  1423. {
  1424. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  1425. return(0);
  1426. }
  1427. break;
  1428. case SSL_CTRL_SET_TMP_ECDH:
  1429. {
  1430. EC_KEY *ecdh = NULL;
  1431. if (parg == NULL)
  1432. {
  1433. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_ECDH_LIB);
  1434. return 0;
  1435. }
  1436. ecdh = EC_KEY_dup((EC_KEY *)parg);
  1437. if (ecdh == NULL)
  1438. {
  1439. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_EC_LIB);
  1440. return 0;
  1441. }
  1442. if (!(ctx->options & SSL_OP_SINGLE_ECDH_USE))
  1443. {
  1444. if (!EC_KEY_generate_key(ecdh))
  1445. {
  1446. EC_KEY_free(ecdh);
  1447. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_ECDH_LIB);
  1448. return 0;
  1449. }
  1450. }
  1451. if (cert->ecdh_tmp != NULL)
  1452. {
  1453. EC_KEY_free(cert->ecdh_tmp);
  1454. }
  1455. cert->ecdh_tmp = ecdh;
  1456. return 1;
  1457. }
  1458. /* break; */
  1459. case SSL_CTRL_SET_TMP_ECDH_CB:
  1460. {
  1461. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  1462. return(0);
  1463. }
  1464. break;
  1465. case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG:
  1466. ctx->tlsext_servername_arg=parg;
  1467. break;
  1468. case SSL_CTRL_SET_TLSEXT_TICKET_KEYS:
  1469. case SSL_CTRL_GET_TLSEXT_TICKET_KEYS:
  1470. {
  1471. unsigned char *keys = parg;
  1472. if (!keys)
  1473. return 48;
  1474. if (larg != 48)
  1475. {
  1476. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, SSL_R_INVALID_TICKET_KEYS_LENGTH);
  1477. return 0;
  1478. }
  1479. if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS)
  1480. {
  1481. memcpy(ctx->tlsext_tick_key_name, keys, 16);
  1482. memcpy(ctx->tlsext_tick_hmac_key, keys + 16, 16);
  1483. memcpy(ctx->tlsext_tick_aes_key, keys + 32, 16);
  1484. }
  1485. else
  1486. {
  1487. memcpy(keys, ctx->tlsext_tick_key_name, 16);
  1488. memcpy(keys + 16, ctx->tlsext_tick_hmac_key, 16);
  1489. memcpy(keys + 32, ctx->tlsext_tick_aes_key, 16);
  1490. }
  1491. return 1;
  1492. }
  1493. case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG:
  1494. ctx->tlsext_status_arg=parg;
  1495. return 1;
  1496. break;
  1497. case SSL_CTRL_SET_CURVES:
  1498. return tls1_set_curves(&ctx->tlsext_ellipticcurvelist,
  1499. &ctx->tlsext_ellipticcurvelist_length,
  1500. parg, larg);
  1501. case SSL_CTRL_SET_ECDH_AUTO:
  1502. ctx->cert->ecdh_tmp_auto = larg;
  1503. return 1;
  1504. case SSL_CTRL_SET_SIGALGS:
  1505. return tls1_set_sigalgs(ctx->cert, parg, larg, 0);
  1506. case SSL_CTRL_SET_CLIENT_SIGALGS:
  1507. return tls1_set_sigalgs(ctx->cert, parg, larg, 1);
  1508. case SSL_CTRL_SET_CLIENT_CERT_TYPES:
  1509. return ssl3_set_req_cert_type(ctx->cert, parg, larg);
  1510. case SSL_CTRL_BUILD_CERT_CHAIN:
  1511. return ssl_build_cert_chain(ctx->cert, ctx->cert_store, larg);
  1512. case SSL_CTRL_SET_VERIFY_CERT_STORE:
  1513. return ssl_cert_set_cert_store(ctx->cert, parg, 0, larg);
  1514. case SSL_CTRL_SET_CHAIN_CERT_STORE:
  1515. return ssl_cert_set_cert_store(ctx->cert, parg, 1, larg);
  1516. /* A Thawte special :-) */
  1517. case SSL_CTRL_EXTRA_CHAIN_CERT:
  1518. if (ctx->extra_certs == NULL)
  1519. {
  1520. if ((ctx->extra_certs=sk_X509_new_null()) == NULL)
  1521. return(0);
  1522. }
  1523. sk_X509_push(ctx->extra_certs,(X509 *)parg);
  1524. break;
  1525. case SSL_CTRL_GET_EXTRA_CHAIN_CERTS:
  1526. if (ctx->extra_certs == NULL && larg == 0)
  1527. *(STACK_OF(X509) **)parg = ctx->cert->key->chain;
  1528. else
  1529. *(STACK_OF(X509) **)parg = ctx->extra_certs;
  1530. break;
  1531. case SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS:
  1532. if (ctx->extra_certs)
  1533. {
  1534. sk_X509_pop_free(ctx->extra_certs, X509_free);
  1535. ctx->extra_certs = NULL;
  1536. }
  1537. break;
  1538. case SSL_CTRL_CHAIN:
  1539. if (larg)
  1540. return ssl_cert_set1_chain(ctx->cert,
  1541. (STACK_OF (X509) *)parg);
  1542. else
  1543. return ssl_cert_set0_chain(ctx->cert,
  1544. (STACK_OF (X509) *)parg);
  1545. case SSL_CTRL_CHAIN_CERT:
  1546. if (larg)
  1547. return ssl_cert_add1_chain_cert(ctx->cert, (X509 *)parg);
  1548. else
  1549. return ssl_cert_add0_chain_cert(ctx->cert, (X509 *)parg);
  1550. case SSL_CTRL_GET_CHAIN_CERTS:
  1551. *(STACK_OF(X509) **)parg = ctx->cert->key->chain;
  1552. break;
  1553. case SSL_CTRL_SELECT_CURRENT_CERT:
  1554. return ssl_cert_select_current(ctx->cert, (X509 *)parg);
  1555. case SSL_CTRL_CHANNEL_ID:
  1556. /* must be called on a server */
  1557. if (ctx->method->ssl_accept == ssl_undefined_function)
  1558. return 0;
  1559. ctx->tlsext_channel_id_enabled=1;
  1560. return 1;
  1561. case SSL_CTRL_SET_CHANNEL_ID:
  1562. ctx->tlsext_channel_id_enabled = 1;
  1563. if (EVP_PKEY_bits(parg) != 256)
  1564. {
  1565. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, SSL_R_CHANNEL_ID_NOT_P256);
  1566. break;
  1567. }
  1568. if (ctx->tlsext_channel_id_private)
  1569. EVP_PKEY_free(ctx->tlsext_channel_id_private);
  1570. ctx->tlsext_channel_id_private = EVP_PKEY_dup((EVP_PKEY*) parg);
  1571. break;
  1572. default:
  1573. return(0);
  1574. }
  1575. return(1);
  1576. }
  1577. long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void))
  1578. {
  1579. CERT *cert;
  1580. cert=ctx->cert;
  1581. switch (cmd)
  1582. {
  1583. case SSL_CTRL_SET_TMP_RSA_CB:
  1584. /* Ignore the callback; temporary RSA keys are never used. */
  1585. break;
  1586. case SSL_CTRL_SET_TMP_DH_CB:
  1587. {
  1588. cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
  1589. }
  1590. break;
  1591. case SSL_CTRL_SET_TMP_ECDH_CB:
  1592. {
  1593. cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
  1594. }
  1595. break;
  1596. case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB:
  1597. ctx->tlsext_servername_callback=(int (*)(SSL *,int *,void *))fp;
  1598. break;
  1599. case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB:
  1600. ctx->tlsext_status_cb=(int (*)(SSL *,void *))fp;
  1601. break;
  1602. case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB:
  1603. ctx->tlsext_ticket_key_cb=(int (*)(SSL *,unsigned char *,
  1604. unsigned char *,
  1605. EVP_CIPHER_CTX *,
  1606. HMAC_CTX *, int))fp;
  1607. break;
  1608. default:
  1609. return(0);
  1610. }
  1611. return(1);
  1612. }
  1613. /* ssl3_get_cipher_by_value returns the SSL_CIPHER with value |value| or NULL if
  1614. * none exists.
  1615. *
  1616. * This function needs to check if the ciphers required are actually
  1617. * available. */
  1618. const SSL_CIPHER *ssl3_get_cipher_by_value(uint16_t value)
  1619. {
  1620. SSL_CIPHER c;
  1621. c.id = 0x03000000L|value;
  1622. return bsearch(&c, ssl3_ciphers, SSL3_NUM_CIPHERS, sizeof(SSL_CIPHER), ssl_cipher_id_cmp);
  1623. }
  1624. /* ssl3_get_cipher_by_value returns the cipher value of |c|. */
  1625. uint16_t ssl3_get_cipher_value(const SSL_CIPHER *c)
  1626. {
  1627. unsigned long id = c->id;
  1628. /* All ciphers are SSLv3 now. */
  1629. assert((id & 0xff000000) == 0x03000000);
  1630. return id & 0xffff;
  1631. }
  1632. struct ssl_cipher_preference_list_st* ssl_get_cipher_preferences(SSL *s)
  1633. {
  1634. if (s->cipher_list != NULL)
  1635. return(s->cipher_list);
  1636. if (s->version >= TLS1_1_VERSION)
  1637. {
  1638. if (s->ctx != NULL && s->ctx->cipher_list_tls11 != NULL)
  1639. return s->ctx->cipher_list_tls11;
  1640. }
  1641. if ((s->ctx != NULL) && (s->ctx->cipher_list != NULL))
  1642. return(s->ctx->cipher_list);
  1643. return NULL;
  1644. }
  1645. const SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
  1646. struct ssl_cipher_preference_list_st *server_pref)
  1647. {
  1648. const SSL_CIPHER *c,*ret=NULL;
  1649. STACK_OF(SSL_CIPHER) *srvr = server_pref->ciphers, *prio, *allow;
  1650. size_t i;
  1651. int ok;
  1652. size_t cipher_index;
  1653. CERT *cert;
  1654. unsigned long alg_k,alg_a,mask_k,mask_a;
  1655. /* in_group_flags will either be NULL, or will point to an array of
  1656. * bytes which indicate equal-preference groups in the |prio| stack.
  1657. * See the comment about |in_group_flags| in the
  1658. * |ssl_cipher_preference_list_st| struct. */
  1659. const unsigned char *in_group_flags;
  1660. /* group_min contains the minimal index so far found in a group, or -1
  1661. * if no such value exists yet. */
  1662. int group_min = -1;
  1663. /* Let's see which ciphers we can support */
  1664. cert=s->cert;
  1665. #if 0
  1666. /* Do not set the compare functions, because this may lead to a
  1667. * reordering by "id". We want to keep the original ordering.
  1668. * We may pay a price in performance during sk_SSL_CIPHER_find(),
  1669. * but would have to pay with the price of sk_SSL_CIPHER_dup().
  1670. */
  1671. sk_SSL_CIPHER_set_cmp_func(srvr, ssl_cipher_ptr_id_cmp);
  1672. sk_SSL_CIPHER_set_cmp_func(clnt, ssl_cipher_ptr_id_cmp);
  1673. #endif
  1674. #ifdef CIPHER_DEBUG
  1675. printf("Server has %d from %p:\n", sk_SSL_CIPHER_num(srvr), (void *)srvr);
  1676. for(i=0 ; i < sk_SSL_CIPHER_num(srvr) ; ++i)
  1677. {
  1678. c=sk_SSL_CIPHER_value(srvr,i);
  1679. printf("%p:%s\n",(void *)c,c->name);
  1680. }
  1681. printf("Client sent %d from %p:\n", sk_SSL_CIPHER_num(clnt), (void *)clnt);
  1682. for(i=0 ; i < sk_SSL_CIPHER_num(clnt) ; ++i)
  1683. {
  1684. c=sk_SSL_CIPHER_value(clnt,i);
  1685. printf("%p:%s\n",(void *)c,c->name);
  1686. }
  1687. #endif
  1688. if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE)
  1689. {
  1690. prio = srvr;
  1691. in_group_flags = server_pref->in_group_flags;
  1692. allow = clnt;
  1693. }
  1694. else
  1695. {
  1696. prio = clnt;
  1697. in_group_flags = NULL;
  1698. allow = srvr;
  1699. }
  1700. tls1_set_cert_validity(s);
  1701. for (i=0; i<sk_SSL_CIPHER_num(prio); i++)
  1702. {
  1703. c=sk_SSL_CIPHER_value(prio,i);
  1704. ok = 1;
  1705. /* Skip TLS v1.2 only ciphersuites if not supported */
  1706. if ((c->algorithm_ssl & SSL_TLSV1_2) &&
  1707. !SSL_USE_TLS1_2_CIPHERS(s))
  1708. ok = 0;
  1709. ssl_set_cert_masks(cert,c);
  1710. mask_k = cert->mask_k;
  1711. mask_a = cert->mask_a;
  1712. alg_k=c->algorithm_mkey;
  1713. alg_a=c->algorithm_auth;
  1714. /* with PSK there must be server callback set */
  1715. if ((alg_a & SSL_aPSK) && s->psk_server_callback == NULL)
  1716. ok = 0;
  1717. ok = ok && (alg_k & mask_k) && (alg_a & mask_a);
  1718. #ifdef CIPHER_DEBUG
  1719. printf("%d:[%08lX:%08lX:%08lX:%08lX]%p:%s\n",ok,alg_k,alg_a,mask_k,mask_a,(void *)c,
  1720. c->name);
  1721. #endif
  1722. /* if we are considering an ECC cipher suite that uses
  1723. * an ephemeral EC key check it */
  1724. if (alg_k & SSL_kEECDH)
  1725. ok = ok && tls1_check_ec_tmp_key(s);
  1726. if (ok && sk_SSL_CIPHER_find(allow, &cipher_index, c))
  1727. {
  1728. if (in_group_flags != NULL && in_group_flags[i] == 1)
  1729. {
  1730. /* This element of |prio| is in a group. Update
  1731. * the minimum index found so far and continue
  1732. * looking. */
  1733. if (group_min == -1 || (size_t)group_min > cipher_index)
  1734. group_min = cipher_index;
  1735. }
  1736. else
  1737. {
  1738. if (group_min != -1 && (size_t)group_min < cipher_index)
  1739. cipher_index = group_min;
  1740. ret=sk_SSL_CIPHER_value(allow,cipher_index);
  1741. break;
  1742. }
  1743. }
  1744. if (in_group_flags != NULL &&
  1745. in_group_flags[i] == 0 &&
  1746. group_min != -1)
  1747. {
  1748. /* We are about to leave a group, but we found a match
  1749. * in it, so that's our answer. */
  1750. ret=sk_SSL_CIPHER_value(allow,group_min);
  1751. break;
  1752. }
  1753. }
  1754. return(ret);
  1755. }
  1756. int ssl3_get_req_cert_type(SSL *s, unsigned char *p)
  1757. {
  1758. int ret=0;
  1759. const unsigned char *sig;
  1760. size_t i, siglen;
  1761. int have_rsa_sign = 0;
  1762. int have_ecdsa_sign = 0;
  1763. /* If we have custom certificate types set, use them */
  1764. if (s->cert->client_certificate_types)
  1765. {
  1766. memcpy(p, s->cert->client_certificate_types,
  1767. s->cert->num_client_certificate_types);
  1768. return (int)s->cert->num_client_certificate_types;
  1769. }
  1770. /* get configured sigalgs */
  1771. siglen = tls12_get_psigalgs(s, &sig);
  1772. for (i = 0; i < siglen; i+=2, sig+=2)
  1773. {
  1774. switch(sig[1])
  1775. {
  1776. case TLSEXT_signature_rsa:
  1777. have_rsa_sign = 1;
  1778. break;
  1779. case TLSEXT_signature_ecdsa:
  1780. have_ecdsa_sign = 1;
  1781. break;
  1782. }
  1783. }
  1784. if (have_rsa_sign)
  1785. p[ret++]=SSL3_CT_RSA_SIGN;
  1786. /* ECDSA certs can be used with RSA cipher suites as well
  1787. * so we don't need to check for SSL_kECDH or SSL_kEECDH
  1788. */
  1789. if (s->version >= TLS1_VERSION)
  1790. {
  1791. if (have_ecdsa_sign)
  1792. p[ret++]=TLS_CT_ECDSA_SIGN;
  1793. }
  1794. return(ret);
  1795. }
  1796. static int ssl3_set_req_cert_type(CERT *c, const unsigned char *p, size_t len)
  1797. {
  1798. if (c->client_certificate_types)
  1799. {
  1800. OPENSSL_free(c->client_certificate_types);
  1801. c->client_certificate_types = NULL;
  1802. }
  1803. c->num_client_certificate_types = 0;
  1804. if (!p || !len)
  1805. return 1;
  1806. if (len > 0xff)
  1807. return 0;
  1808. c->client_certificate_types = BUF_memdup(p, len);
  1809. if (!c->client_certificate_types)
  1810. return 0;
  1811. c->num_client_certificate_types = len;
  1812. return 1;
  1813. }
  1814. int ssl3_shutdown(SSL *s)
  1815. {
  1816. int ret;
  1817. /* Don't do anything much if we have not done the handshake or
  1818. * we don't want to send messages :-) */
  1819. if ((s->quiet_shutdown) || (s->state == SSL_ST_BEFORE))
  1820. {
  1821. s->shutdown=(SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
  1822. return(1);
  1823. }
  1824. if (!(s->shutdown & SSL_SENT_SHUTDOWN))
  1825. {
  1826. s->shutdown|=SSL_SENT_SHUTDOWN;
  1827. #if 1
  1828. ssl3_send_alert(s,SSL3_AL_WARNING,SSL_AD_CLOSE_NOTIFY);
  1829. #endif
  1830. /* our shutdown alert has been sent now, and if it still needs
  1831. * to be written, s->s3->alert_dispatch will be true */
  1832. if (s->s3->alert_dispatch)
  1833. return(-1); /* return WANT_WRITE */
  1834. }
  1835. else if (s->s3->alert_dispatch)
  1836. {
  1837. /* resend it if not sent */
  1838. #if 1
  1839. ret=s->method->ssl_dispatch_alert(s);
  1840. if(ret == -1)
  1841. {
  1842. /* we only get to return -1 here the 2nd/Nth
  1843. * invocation, we must have already signalled
  1844. * return 0 upon a previous invoation,
  1845. * return WANT_WRITE */
  1846. return(ret);
  1847. }
  1848. #endif
  1849. }
  1850. else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN))
  1851. {
  1852. /* If we are waiting for a close from our peer, we are closed */
  1853. s->method->ssl_read_bytes(s,0,NULL,0,0);
  1854. if(!(s->shutdown & SSL_RECEIVED_SHUTDOWN))
  1855. {
  1856. return(-1); /* return WANT_READ */
  1857. }
  1858. }
  1859. if ((s->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) &&
  1860. !s->s3->alert_dispatch)
  1861. return(1);
  1862. else
  1863. return(0);
  1864. }
  1865. int ssl3_write(SSL *s, const void *buf, int len)
  1866. {
  1867. #if 0
  1868. if (s->shutdown & SSL_SEND_SHUTDOWN)
  1869. {
  1870. s->rwstate=SSL_NOTHING;
  1871. return(0);
  1872. }
  1873. #endif
  1874. ERR_clear_system_error();
  1875. if (s->s3->renegotiate) ssl3_renegotiate_check(s);
  1876. return s->method->ssl_write_bytes(s, SSL3_RT_APPLICATION_DATA, buf,
  1877. len);
  1878. }
  1879. static int ssl3_read_internal(SSL *s, void *buf, int len, int peek)
  1880. {
  1881. int ret;
  1882. ERR_clear_system_error();
  1883. if (s->s3->renegotiate) ssl3_renegotiate_check(s);
  1884. s->s3->in_read_app_data=1;
  1885. ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);
  1886. if ((ret == -1) && (s->s3->in_read_app_data == 2))
  1887. {
  1888. /* ssl3_read_bytes decided to call s->handshake_func, which
  1889. * called ssl3_read_bytes to read handshake data.
  1890. * However, ssl3_read_bytes actually found application data
  1891. * and thinks that application data makes sense here; so disable
  1892. * handshake processing and try to read application data again. */
  1893. s->in_handshake++;
  1894. ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);
  1895. s->in_handshake--;
  1896. }
  1897. else
  1898. s->s3->in_read_app_data=0;
  1899. return(ret);
  1900. }
  1901. int ssl3_read(SSL *s, void *buf, int len)
  1902. {
  1903. return ssl3_read_internal(s, buf, len, 0);
  1904. }
  1905. int ssl3_peek(SSL *s, void *buf, int len)
  1906. {
  1907. return ssl3_read_internal(s, buf, len, 1);
  1908. }
  1909. int ssl3_renegotiate(SSL *s)
  1910. {
  1911. if (s->handshake_func == NULL)
  1912. return(1);
  1913. if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)
  1914. return(0);
  1915. s->s3->renegotiate=1;
  1916. return(1);
  1917. }
  1918. int ssl3_renegotiate_check(SSL *s)
  1919. {
  1920. int ret=0;
  1921. if (s->s3->renegotiate)
  1922. {
  1923. if ( (s->s3->rbuf.left == 0) &&
  1924. (s->s3->wbuf.left == 0) &&
  1925. !SSL_in_init(s))
  1926. {
  1927. /*
  1928. if we are the server, and we have sent a 'RENEGOTIATE' message, we
  1929. need to go to SSL_ST_ACCEPT.
  1930. */
  1931. /* SSL_ST_ACCEPT */
  1932. s->state=SSL_ST_RENEGOTIATE;
  1933. s->s3->renegotiate=0;
  1934. s->s3->num_renegotiations++;
  1935. s->s3->total_renegotiations++;
  1936. ret=1;
  1937. }
  1938. }
  1939. return(ret);
  1940. }
  1941. /* If we are using default SHA1+MD5 algorithms switch to new SHA256 PRF
  1942. * and handshake macs if required.
  1943. */
  1944. long ssl_get_algorithm2(SSL *s)
  1945. {
  1946. static const unsigned long kMask = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF;
  1947. long alg2 = s->s3->tmp.new_cipher->algorithm2;
  1948. if (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_SHA256_PRF
  1949. && (alg2 & kMask) == kMask)
  1950. return SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256;
  1951. return alg2;
  1952. }