選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 
 
 

2069 行
47 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. const 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. };
  887. int ssl3_num_ciphers(void)
  888. {
  889. return(SSL3_NUM_CIPHERS);
  890. }
  891. const SSL_CIPHER *ssl3_get_cipher(unsigned int u)
  892. {
  893. if (u < SSL3_NUM_CIPHERS)
  894. return(&(ssl3_ciphers[SSL3_NUM_CIPHERS-1-u]));
  895. else
  896. return(NULL);
  897. }
  898. int ssl3_pending(const SSL *s)
  899. {
  900. if (s->rstate == SSL_ST_READ_BODY)
  901. return 0;
  902. return (s->s3->rrec.type == SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0;
  903. }
  904. void ssl3_set_handshake_header(SSL *s, int htype, unsigned long len)
  905. {
  906. unsigned char *p = (unsigned char *)s->init_buf->data;
  907. *(p++) = htype;
  908. l2n3(len, p);
  909. s->init_num = (int)len + SSL3_HM_HEADER_LENGTH;
  910. s->init_off = 0;
  911. /* Add the message to the handshake hash. */
  912. ssl3_finish_mac(s, (uint8_t*) s->init_buf->data, s->init_num);
  913. }
  914. int ssl3_handshake_write(SSL *s)
  915. {
  916. return ssl3_do_write(s, SSL3_RT_HANDSHAKE);
  917. }
  918. int ssl3_new(SSL *s)
  919. {
  920. SSL3_STATE *s3;
  921. if ((s3=OPENSSL_malloc(sizeof *s3)) == NULL) goto err;
  922. memset(s3,0,sizeof *s3);
  923. memset(s3->rrec.seq_num,0,sizeof(s3->rrec.seq_num));
  924. memset(s3->wrec.seq_num,0,sizeof(s3->wrec.seq_num));
  925. s->s3=s3;
  926. s->tlsext_channel_id_enabled = s->ctx->tlsext_channel_id_enabled;
  927. if (s->ctx->tlsext_channel_id_private)
  928. s->tlsext_channel_id_private = EVP_PKEY_dup(s->ctx->tlsext_channel_id_private);
  929. s->method->ssl_clear(s);
  930. return(1);
  931. err:
  932. return(0);
  933. }
  934. void ssl3_free(SSL *s)
  935. {
  936. if(s == NULL)
  937. return;
  938. if (s->s3->sniff_buffer != NULL)
  939. BUF_MEM_free(s->s3->sniff_buffer);
  940. ssl3_cleanup_key_block(s);
  941. if (s->s3->rbuf.buf != NULL)
  942. ssl3_release_read_buffer(s);
  943. if (s->s3->wbuf.buf != NULL)
  944. ssl3_release_write_buffer(s);
  945. if (s->s3->tmp.dh != NULL)
  946. DH_free(s->s3->tmp.dh);
  947. if (s->s3->tmp.ecdh != NULL)
  948. EC_KEY_free(s->s3->tmp.ecdh);
  949. if (s->s3->tmp.ca_names != NULL)
  950. sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free);
  951. if (s->s3->tmp.certificate_types != NULL)
  952. OPENSSL_free(s->s3->tmp.certificate_types);
  953. if (s->s3->tmp.peer_ecpointformatlist)
  954. OPENSSL_free(s->s3->tmp.peer_ecpointformatlist);
  955. if (s->s3->tmp.peer_ellipticcurvelist)
  956. OPENSSL_free(s->s3->tmp.peer_ellipticcurvelist);
  957. if (s->s3->tmp.peer_psk_identity_hint)
  958. OPENSSL_free(s->s3->tmp.peer_psk_identity_hint);
  959. if (s->s3->handshake_buffer) {
  960. BIO_free(s->s3->handshake_buffer);
  961. }
  962. if (s->s3->handshake_dgst) ssl3_free_digest_list(s);
  963. if (s->s3->alpn_selected)
  964. OPENSSL_free(s->s3->alpn_selected);
  965. OPENSSL_cleanse(s->s3,sizeof *s->s3);
  966. OPENSSL_free(s->s3);
  967. s->s3=NULL;
  968. }
  969. void ssl3_clear(SSL *s)
  970. {
  971. unsigned char *rp,*wp;
  972. size_t rlen, wlen;
  973. int init_extra;
  974. /* TODO(davidben): Can this just call ssl3_free +
  975. * ssl3_new. rbuf, wbuf, and init_extra are preserved, but
  976. * this may not serve anything more than saving a malloc. */
  977. if (s->s3->sniff_buffer != NULL)
  978. BUF_MEM_free(s->s3->sniff_buffer);
  979. s->s3->sniff_buffer = NULL;
  980. ssl3_cleanup_key_block(s);
  981. if (s->s3->tmp.ca_names != NULL)
  982. sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free);
  983. s->s3->tmp.ca_names = NULL;
  984. if (s->s3->tmp.certificate_types != NULL)
  985. OPENSSL_free(s->s3->tmp.certificate_types);
  986. s->s3->tmp.certificate_types = NULL;
  987. if (s->s3->tmp.peer_ecpointformatlist)
  988. OPENSSL_free(s->s3->tmp.peer_ecpointformatlist);
  989. s->s3->tmp.peer_ecpointformatlist = NULL;
  990. if (s->s3->tmp.peer_ellipticcurvelist)
  991. OPENSSL_free(s->s3->tmp.peer_ellipticcurvelist);
  992. s->s3->tmp.peer_ellipticcurvelist = NULL;
  993. if (s->s3->tmp.peer_psk_identity_hint)
  994. OPENSSL_free(s->s3->tmp.peer_psk_identity_hint);
  995. s->s3->tmp.peer_psk_identity_hint = NULL;
  996. if (s->s3->tmp.dh != NULL)
  997. {
  998. DH_free(s->s3->tmp.dh);
  999. s->s3->tmp.dh = NULL;
  1000. }
  1001. if (s->s3->tmp.ecdh != NULL)
  1002. {
  1003. EC_KEY_free(s->s3->tmp.ecdh);
  1004. s->s3->tmp.ecdh = NULL;
  1005. }
  1006. rp = s->s3->rbuf.buf;
  1007. wp = s->s3->wbuf.buf;
  1008. rlen = s->s3->rbuf.len;
  1009. wlen = s->s3->wbuf.len;
  1010. init_extra = s->s3->init_extra;
  1011. if (s->s3->handshake_buffer) {
  1012. BIO_free(s->s3->handshake_buffer);
  1013. s->s3->handshake_buffer = NULL;
  1014. }
  1015. if (s->s3->handshake_dgst) {
  1016. ssl3_free_digest_list(s);
  1017. }
  1018. if (s->s3->alpn_selected)
  1019. {
  1020. OPENSSL_free(s->s3->alpn_selected);
  1021. s->s3->alpn_selected = NULL;
  1022. }
  1023. memset(s->s3,0,sizeof *s->s3);
  1024. s->s3->rbuf.buf = rp;
  1025. s->s3->wbuf.buf = wp;
  1026. s->s3->rbuf.len = rlen;
  1027. s->s3->wbuf.len = wlen;
  1028. s->s3->init_extra = init_extra;
  1029. ssl_free_wbio_buffer(s);
  1030. s->packet_length=0;
  1031. s->s3->renegotiate=0;
  1032. s->s3->total_renegotiations=0;
  1033. s->s3->num_renegotiations=0;
  1034. s->s3->in_read_app_data=0;
  1035. s->version = TLS1_2_VERSION;
  1036. if (s->next_proto_negotiated)
  1037. {
  1038. OPENSSL_free(s->next_proto_negotiated);
  1039. s->next_proto_negotiated = NULL;
  1040. s->next_proto_negotiated_len = 0;
  1041. }
  1042. s->s3->tlsext_channel_id_valid = 0;
  1043. }
  1044. static int ssl3_set_req_cert_type(CERT *c, const unsigned char *p, size_t len);
  1045. long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
  1046. {
  1047. int ret=0;
  1048. if (cmd == SSL_CTRL_SET_TMP_RSA ||
  1049. cmd == SSL_CTRL_SET_TMP_RSA_CB ||
  1050. cmd == SSL_CTRL_SET_TMP_DH ||
  1051. cmd == SSL_CTRL_SET_TMP_DH_CB)
  1052. {
  1053. if (!ssl_cert_inst(&s->cert))
  1054. {
  1055. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_MALLOC_FAILURE);
  1056. return(0);
  1057. }
  1058. }
  1059. switch (cmd)
  1060. {
  1061. case SSL_CTRL_GET_SESSION_REUSED:
  1062. ret=s->hit;
  1063. break;
  1064. case SSL_CTRL_GET_CLIENT_CERT_REQUEST:
  1065. break;
  1066. case SSL_CTRL_GET_NUM_RENEGOTIATIONS:
  1067. ret=s->s3->num_renegotiations;
  1068. break;
  1069. case SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS:
  1070. ret=s->s3->num_renegotiations;
  1071. s->s3->num_renegotiations=0;
  1072. break;
  1073. case SSL_CTRL_GET_TOTAL_RENEGOTIATIONS:
  1074. ret=s->s3->total_renegotiations;
  1075. break;
  1076. case SSL_CTRL_GET_FLAGS:
  1077. ret=(int)(s->s3->flags);
  1078. break;
  1079. case SSL_CTRL_NEED_TMP_RSA:
  1080. /* Temporary RSA keys are never used. */
  1081. ret = 0;
  1082. break;
  1083. case SSL_CTRL_SET_TMP_RSA:
  1084. /* Temporary RSA keys are never used. */
  1085. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  1086. break;
  1087. case SSL_CTRL_SET_TMP_RSA_CB:
  1088. {
  1089. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  1090. return(ret);
  1091. }
  1092. break;
  1093. case SSL_CTRL_SET_TMP_DH:
  1094. {
  1095. DH *dh = (DH *)parg;
  1096. if (dh == NULL)
  1097. {
  1098. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_PASSED_NULL_PARAMETER);
  1099. return(ret);
  1100. }
  1101. if ((dh = DHparams_dup(dh)) == NULL)
  1102. {
  1103. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_DH_LIB);
  1104. return(ret);
  1105. }
  1106. if (!(s->options & SSL_OP_SINGLE_DH_USE))
  1107. {
  1108. if (!DH_generate_key(dh))
  1109. {
  1110. DH_free(dh);
  1111. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_DH_LIB);
  1112. return(ret);
  1113. }
  1114. }
  1115. if (s->cert->dh_tmp != NULL)
  1116. DH_free(s->cert->dh_tmp);
  1117. s->cert->dh_tmp = dh;
  1118. ret = 1;
  1119. }
  1120. break;
  1121. case SSL_CTRL_SET_TMP_DH_CB:
  1122. {
  1123. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  1124. return(ret);
  1125. }
  1126. break;
  1127. case SSL_CTRL_SET_TMP_ECDH:
  1128. {
  1129. EC_KEY *ecdh = NULL;
  1130. if (parg == NULL)
  1131. {
  1132. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_PASSED_NULL_PARAMETER);
  1133. return(ret);
  1134. }
  1135. if (!EC_KEY_up_ref((EC_KEY *)parg))
  1136. {
  1137. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_ECDH_LIB);
  1138. return(ret);
  1139. }
  1140. ecdh = (EC_KEY *)parg;
  1141. if (!(s->options & SSL_OP_SINGLE_ECDH_USE))
  1142. {
  1143. if (!EC_KEY_generate_key(ecdh))
  1144. {
  1145. EC_KEY_free(ecdh);
  1146. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_ECDH_LIB);
  1147. return(ret);
  1148. }
  1149. }
  1150. if (s->cert->ecdh_tmp != NULL)
  1151. EC_KEY_free(s->cert->ecdh_tmp);
  1152. s->cert->ecdh_tmp = ecdh;
  1153. ret = 1;
  1154. }
  1155. break;
  1156. case SSL_CTRL_SET_TMP_ECDH_CB:
  1157. {
  1158. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  1159. return(ret);
  1160. }
  1161. break;
  1162. case SSL_CTRL_SET_TLSEXT_HOSTNAME:
  1163. if (larg == TLSEXT_NAMETYPE_host_name)
  1164. {
  1165. if (s->tlsext_hostname != NULL)
  1166. OPENSSL_free(s->tlsext_hostname);
  1167. s->tlsext_hostname = NULL;
  1168. ret = 1;
  1169. if (parg == NULL)
  1170. break;
  1171. if (strlen((char *)parg) > TLSEXT_MAXLEN_host_name)
  1172. {
  1173. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, SSL_R_SSL3_EXT_INVALID_SERVERNAME);
  1174. return 0;
  1175. }
  1176. if ((s->tlsext_hostname = BUF_strdup((char *)parg)) == NULL)
  1177. {
  1178. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, ERR_R_INTERNAL_ERROR);
  1179. return 0;
  1180. }
  1181. }
  1182. else
  1183. {
  1184. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE);
  1185. return 0;
  1186. }
  1187. break;
  1188. case SSL_CTRL_SET_TLSEXT_DEBUG_ARG:
  1189. s->tlsext_debug_arg=parg;
  1190. ret = 1;
  1191. break;
  1192. case SSL_CTRL_CHAIN:
  1193. if (larg)
  1194. return ssl_cert_set1_chain(s->cert,
  1195. (STACK_OF (X509) *)parg);
  1196. else
  1197. return ssl_cert_set0_chain(s->cert,
  1198. (STACK_OF (X509) *)parg);
  1199. case SSL_CTRL_CHAIN_CERT:
  1200. if (larg)
  1201. return ssl_cert_add1_chain_cert(s->cert, (X509 *)parg);
  1202. else
  1203. return ssl_cert_add0_chain_cert(s->cert, (X509 *)parg);
  1204. case SSL_CTRL_GET_CHAIN_CERTS:
  1205. *(STACK_OF(X509) **)parg = s->cert->key->chain;
  1206. break;
  1207. case SSL_CTRL_SELECT_CURRENT_CERT:
  1208. return ssl_cert_select_current(s->cert, (X509 *)parg);
  1209. case SSL_CTRL_GET_CURVES:
  1210. {
  1211. const uint16_t *clist = s->s3->tmp.peer_ellipticcurvelist;
  1212. size_t clistlen = s->s3->tmp.peer_ellipticcurvelist_length;
  1213. if (parg)
  1214. {
  1215. size_t i;
  1216. int *cptr = parg;
  1217. int nid;
  1218. for (i = 0; i < clistlen; i++)
  1219. {
  1220. nid = tls1_ec_curve_id2nid(clist[i]);
  1221. if (nid != OBJ_undef)
  1222. cptr[i] = nid;
  1223. else
  1224. cptr[i] = TLSEXT_nid_unknown | clist[i];
  1225. }
  1226. }
  1227. return (int)clistlen;
  1228. }
  1229. case SSL_CTRL_SET_CURVES:
  1230. return tls1_set_curves(&s->tlsext_ellipticcurvelist,
  1231. &s->tlsext_ellipticcurvelist_length,
  1232. parg, larg);
  1233. case SSL_CTRL_SET_ECDH_AUTO:
  1234. s->cert->ecdh_tmp_auto = larg;
  1235. return 1;
  1236. case SSL_CTRL_SET_SIGALGS:
  1237. return tls1_set_sigalgs(s->cert, parg, larg, 0);
  1238. case SSL_CTRL_SET_CLIENT_SIGALGS:
  1239. return tls1_set_sigalgs(s->cert, parg, larg, 1);
  1240. case SSL_CTRL_GET_CLIENT_CERT_TYPES:
  1241. {
  1242. const unsigned char **pctype = parg;
  1243. if (s->server || !s->s3->tmp.cert_req)
  1244. return 0;
  1245. if (pctype)
  1246. *pctype = s->s3->tmp.certificate_types;
  1247. return (int)s->s3->tmp.num_certificate_types;
  1248. }
  1249. case SSL_CTRL_SET_CLIENT_CERT_TYPES:
  1250. if (!s->server)
  1251. return 0;
  1252. return ssl3_set_req_cert_type(s->cert, parg, larg);
  1253. case SSL_CTRL_BUILD_CERT_CHAIN:
  1254. return ssl_build_cert_chain(s->cert, s->ctx->cert_store, larg);
  1255. case SSL_CTRL_SET_VERIFY_CERT_STORE:
  1256. return ssl_cert_set_cert_store(s->cert, parg, 0, larg);
  1257. case SSL_CTRL_SET_CHAIN_CERT_STORE:
  1258. return ssl_cert_set_cert_store(s->cert, parg, 1, larg);
  1259. case SSL_CTRL_GET_SERVER_TMP_KEY:
  1260. if (s->server || !s->session || !s->session->sess_cert)
  1261. return 0;
  1262. else
  1263. {
  1264. SESS_CERT *sc;
  1265. EVP_PKEY *ptmp;
  1266. int rv = 0;
  1267. sc = s->session->sess_cert;
  1268. if (!sc->peer_dh_tmp && !sc->peer_ecdh_tmp)
  1269. return 0;
  1270. ptmp = EVP_PKEY_new();
  1271. if (!ptmp)
  1272. return 0;
  1273. if (sc->peer_dh_tmp)
  1274. rv = EVP_PKEY_set1_DH(ptmp, sc->peer_dh_tmp);
  1275. else if (sc->peer_ecdh_tmp)
  1276. rv = EVP_PKEY_set1_EC_KEY(ptmp, sc->peer_ecdh_tmp);
  1277. if (rv)
  1278. {
  1279. *(EVP_PKEY **)parg = ptmp;
  1280. return 1;
  1281. }
  1282. EVP_PKEY_free(ptmp);
  1283. return 0;
  1284. }
  1285. case SSL_CTRL_GET_EC_POINT_FORMATS:
  1286. {
  1287. const uint8_t **pformat = parg;
  1288. if (!s->s3->tmp.peer_ecpointformatlist)
  1289. return 0;
  1290. *pformat = s->s3->tmp.peer_ecpointformatlist;
  1291. return (int)s->s3->tmp.peer_ecpointformatlist_length;
  1292. }
  1293. case SSL_CTRL_CHANNEL_ID:
  1294. s->tlsext_channel_id_enabled = 1;
  1295. ret = 1;
  1296. break;
  1297. case SSL_CTRL_SET_CHANNEL_ID:
  1298. s->tlsext_channel_id_enabled = 1;
  1299. if (EVP_PKEY_bits(parg) != 256)
  1300. {
  1301. OPENSSL_PUT_ERROR(SSL, ssl3_ctrl, SSL_R_CHANNEL_ID_NOT_P256);
  1302. break;
  1303. }
  1304. if (s->tlsext_channel_id_private)
  1305. EVP_PKEY_free(s->tlsext_channel_id_private);
  1306. s->tlsext_channel_id_private = EVP_PKEY_dup((EVP_PKEY*) parg);
  1307. ret = 1;
  1308. break;
  1309. case SSL_CTRL_GET_CHANNEL_ID:
  1310. if (!s->s3->tlsext_channel_id_valid)
  1311. break;
  1312. memcpy(parg, s->s3->tlsext_channel_id, larg < 64 ? larg : 64);
  1313. return 64;
  1314. case SSL_CTRL_FALLBACK_SCSV:
  1315. s->fallback_scsv = 1;
  1316. ret = 1;
  1317. break;
  1318. default:
  1319. break;
  1320. }
  1321. return(ret);
  1322. }
  1323. long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void))
  1324. {
  1325. int ret=0;
  1326. if (cmd == SSL_CTRL_SET_TMP_RSA_CB || cmd == SSL_CTRL_SET_TMP_DH_CB)
  1327. {
  1328. if (!ssl_cert_inst(&s->cert))
  1329. {
  1330. OPENSSL_PUT_ERROR(SSL, ssl3_callback_ctrl, ERR_R_MALLOC_FAILURE);
  1331. return(0);
  1332. }
  1333. }
  1334. switch (cmd)
  1335. {
  1336. case SSL_CTRL_SET_TMP_RSA_CB:
  1337. /* Ignore the callback; temporary RSA keys are never used. */
  1338. break;
  1339. case SSL_CTRL_SET_TMP_DH_CB:
  1340. {
  1341. s->cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
  1342. }
  1343. break;
  1344. case SSL_CTRL_SET_TMP_ECDH_CB:
  1345. {
  1346. s->cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
  1347. }
  1348. break;
  1349. case SSL_CTRL_SET_TLSEXT_DEBUG_CB:
  1350. s->tlsext_debug_cb=(void (*)(SSL *,int ,int,
  1351. unsigned char *, int, void *))fp;
  1352. break;
  1353. default:
  1354. break;
  1355. }
  1356. return(ret);
  1357. }
  1358. long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
  1359. {
  1360. CERT *cert;
  1361. cert=ctx->cert;
  1362. switch (cmd)
  1363. {
  1364. case SSL_CTRL_NEED_TMP_RSA:
  1365. /* Temporary RSA keys are never used. */
  1366. return 0;
  1367. case SSL_CTRL_SET_TMP_RSA:
  1368. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  1369. return 0;
  1370. case SSL_CTRL_SET_TMP_RSA_CB:
  1371. {
  1372. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  1373. return(0);
  1374. }
  1375. break;
  1376. case SSL_CTRL_SET_TMP_DH:
  1377. {
  1378. DH *new=NULL,*dh;
  1379. dh=(DH *)parg;
  1380. if ((new=DHparams_dup(dh)) == NULL)
  1381. {
  1382. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_DH_LIB);
  1383. return 0;
  1384. }
  1385. if (!(ctx->options & SSL_OP_SINGLE_DH_USE))
  1386. {
  1387. if (!DH_generate_key(new))
  1388. {
  1389. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_DH_LIB);
  1390. DH_free(new);
  1391. return 0;
  1392. }
  1393. }
  1394. if (cert->dh_tmp != NULL)
  1395. DH_free(cert->dh_tmp);
  1396. cert->dh_tmp=new;
  1397. return 1;
  1398. }
  1399. /*break; */
  1400. case SSL_CTRL_SET_TMP_DH_CB:
  1401. {
  1402. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  1403. return(0);
  1404. }
  1405. break;
  1406. case SSL_CTRL_SET_TMP_ECDH:
  1407. {
  1408. EC_KEY *ecdh = NULL;
  1409. if (parg == NULL)
  1410. {
  1411. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_ECDH_LIB);
  1412. return 0;
  1413. }
  1414. ecdh = EC_KEY_dup((EC_KEY *)parg);
  1415. if (ecdh == NULL)
  1416. {
  1417. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_EC_LIB);
  1418. return 0;
  1419. }
  1420. if (!(ctx->options & SSL_OP_SINGLE_ECDH_USE))
  1421. {
  1422. if (!EC_KEY_generate_key(ecdh))
  1423. {
  1424. EC_KEY_free(ecdh);
  1425. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_ECDH_LIB);
  1426. return 0;
  1427. }
  1428. }
  1429. if (cert->ecdh_tmp != NULL)
  1430. {
  1431. EC_KEY_free(cert->ecdh_tmp);
  1432. }
  1433. cert->ecdh_tmp = ecdh;
  1434. return 1;
  1435. }
  1436. /* break; */
  1437. case SSL_CTRL_SET_TMP_ECDH_CB:
  1438. {
  1439. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
  1440. return(0);
  1441. }
  1442. break;
  1443. case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG:
  1444. ctx->tlsext_servername_arg=parg;
  1445. break;
  1446. case SSL_CTRL_SET_TLSEXT_TICKET_KEYS:
  1447. case SSL_CTRL_GET_TLSEXT_TICKET_KEYS:
  1448. {
  1449. unsigned char *keys = parg;
  1450. if (!keys)
  1451. return 48;
  1452. if (larg != 48)
  1453. {
  1454. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, SSL_R_INVALID_TICKET_KEYS_LENGTH);
  1455. return 0;
  1456. }
  1457. if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS)
  1458. {
  1459. memcpy(ctx->tlsext_tick_key_name, keys, 16);
  1460. memcpy(ctx->tlsext_tick_hmac_key, keys + 16, 16);
  1461. memcpy(ctx->tlsext_tick_aes_key, keys + 32, 16);
  1462. }
  1463. else
  1464. {
  1465. memcpy(keys, ctx->tlsext_tick_key_name, 16);
  1466. memcpy(keys + 16, ctx->tlsext_tick_hmac_key, 16);
  1467. memcpy(keys + 32, ctx->tlsext_tick_aes_key, 16);
  1468. }
  1469. return 1;
  1470. }
  1471. case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG:
  1472. ctx->tlsext_status_arg=parg;
  1473. return 1;
  1474. break;
  1475. case SSL_CTRL_SET_CURVES:
  1476. return tls1_set_curves(&ctx->tlsext_ellipticcurvelist,
  1477. &ctx->tlsext_ellipticcurvelist_length,
  1478. parg, larg);
  1479. case SSL_CTRL_SET_ECDH_AUTO:
  1480. ctx->cert->ecdh_tmp_auto = larg;
  1481. return 1;
  1482. case SSL_CTRL_SET_SIGALGS:
  1483. return tls1_set_sigalgs(ctx->cert, parg, larg, 0);
  1484. case SSL_CTRL_SET_CLIENT_SIGALGS:
  1485. return tls1_set_sigalgs(ctx->cert, parg, larg, 1);
  1486. case SSL_CTRL_SET_CLIENT_CERT_TYPES:
  1487. return ssl3_set_req_cert_type(ctx->cert, parg, larg);
  1488. case SSL_CTRL_BUILD_CERT_CHAIN:
  1489. return ssl_build_cert_chain(ctx->cert, ctx->cert_store, larg);
  1490. case SSL_CTRL_SET_VERIFY_CERT_STORE:
  1491. return ssl_cert_set_cert_store(ctx->cert, parg, 0, larg);
  1492. case SSL_CTRL_SET_CHAIN_CERT_STORE:
  1493. return ssl_cert_set_cert_store(ctx->cert, parg, 1, larg);
  1494. /* A Thawte special :-) */
  1495. case SSL_CTRL_EXTRA_CHAIN_CERT:
  1496. if (ctx->extra_certs == NULL)
  1497. {
  1498. if ((ctx->extra_certs=sk_X509_new_null()) == NULL)
  1499. return(0);
  1500. }
  1501. sk_X509_push(ctx->extra_certs,(X509 *)parg);
  1502. break;
  1503. case SSL_CTRL_GET_EXTRA_CHAIN_CERTS:
  1504. if (ctx->extra_certs == NULL && larg == 0)
  1505. *(STACK_OF(X509) **)parg = ctx->cert->key->chain;
  1506. else
  1507. *(STACK_OF(X509) **)parg = ctx->extra_certs;
  1508. break;
  1509. case SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS:
  1510. if (ctx->extra_certs)
  1511. {
  1512. sk_X509_pop_free(ctx->extra_certs, X509_free);
  1513. ctx->extra_certs = NULL;
  1514. }
  1515. break;
  1516. case SSL_CTRL_CHAIN:
  1517. if (larg)
  1518. return ssl_cert_set1_chain(ctx->cert,
  1519. (STACK_OF (X509) *)parg);
  1520. else
  1521. return ssl_cert_set0_chain(ctx->cert,
  1522. (STACK_OF (X509) *)parg);
  1523. case SSL_CTRL_CHAIN_CERT:
  1524. if (larg)
  1525. return ssl_cert_add1_chain_cert(ctx->cert, (X509 *)parg);
  1526. else
  1527. return ssl_cert_add0_chain_cert(ctx->cert, (X509 *)parg);
  1528. case SSL_CTRL_GET_CHAIN_CERTS:
  1529. *(STACK_OF(X509) **)parg = ctx->cert->key->chain;
  1530. break;
  1531. case SSL_CTRL_SELECT_CURRENT_CERT:
  1532. return ssl_cert_select_current(ctx->cert, (X509 *)parg);
  1533. case SSL_CTRL_CHANNEL_ID:
  1534. ctx->tlsext_channel_id_enabled=1;
  1535. return 1;
  1536. case SSL_CTRL_SET_CHANNEL_ID:
  1537. ctx->tlsext_channel_id_enabled = 1;
  1538. if (EVP_PKEY_bits(parg) != 256)
  1539. {
  1540. OPENSSL_PUT_ERROR(SSL, ssl3_ctx_ctrl, SSL_R_CHANNEL_ID_NOT_P256);
  1541. break;
  1542. }
  1543. if (ctx->tlsext_channel_id_private)
  1544. EVP_PKEY_free(ctx->tlsext_channel_id_private);
  1545. ctx->tlsext_channel_id_private = EVP_PKEY_dup((EVP_PKEY*) parg);
  1546. break;
  1547. default:
  1548. return(0);
  1549. }
  1550. return(1);
  1551. }
  1552. long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void))
  1553. {
  1554. CERT *cert;
  1555. cert=ctx->cert;
  1556. switch (cmd)
  1557. {
  1558. case SSL_CTRL_SET_TMP_RSA_CB:
  1559. /* Ignore the callback; temporary RSA keys are never used. */
  1560. break;
  1561. case SSL_CTRL_SET_TMP_DH_CB:
  1562. {
  1563. cert->dh_tmp_cb = (DH *(*)(SSL *, int, int))fp;
  1564. }
  1565. break;
  1566. case SSL_CTRL_SET_TMP_ECDH_CB:
  1567. {
  1568. cert->ecdh_tmp_cb = (EC_KEY *(*)(SSL *, int, int))fp;
  1569. }
  1570. break;
  1571. case SSL_CTRL_SET_TLSEXT_SERVERNAME_CB:
  1572. ctx->tlsext_servername_callback=(int (*)(SSL *,int *,void *))fp;
  1573. break;
  1574. case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB:
  1575. ctx->tlsext_status_cb=(int (*)(SSL *,void *))fp;
  1576. break;
  1577. case SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB:
  1578. ctx->tlsext_ticket_key_cb=(int (*)(SSL *,unsigned char *,
  1579. unsigned char *,
  1580. EVP_CIPHER_CTX *,
  1581. HMAC_CTX *, int))fp;
  1582. break;
  1583. default:
  1584. return(0);
  1585. }
  1586. return(1);
  1587. }
  1588. /* ssl3_get_cipher_by_value returns the SSL_CIPHER with value |value| or NULL if
  1589. * none exists.
  1590. *
  1591. * This function needs to check if the ciphers required are actually
  1592. * available. */
  1593. const SSL_CIPHER *ssl3_get_cipher_by_value(uint16_t value)
  1594. {
  1595. SSL_CIPHER c;
  1596. c.id = 0x03000000L|value;
  1597. return bsearch(&c, ssl3_ciphers, SSL3_NUM_CIPHERS, sizeof(SSL_CIPHER), ssl_cipher_id_cmp);
  1598. }
  1599. /* ssl3_get_cipher_by_value returns the cipher value of |c|. */
  1600. uint16_t ssl3_get_cipher_value(const SSL_CIPHER *c)
  1601. {
  1602. unsigned long id = c->id;
  1603. /* All ciphers are SSLv3 now. */
  1604. assert((id & 0xff000000) == 0x03000000);
  1605. return id & 0xffff;
  1606. }
  1607. struct ssl_cipher_preference_list_st* ssl_get_cipher_preferences(SSL *s)
  1608. {
  1609. if (s->cipher_list != NULL)
  1610. return(s->cipher_list);
  1611. if (s->version >= TLS1_1_VERSION)
  1612. {
  1613. if (s->ctx != NULL && s->ctx->cipher_list_tls11 != NULL)
  1614. return s->ctx->cipher_list_tls11;
  1615. }
  1616. if ((s->ctx != NULL) && (s->ctx->cipher_list != NULL))
  1617. return(s->ctx->cipher_list);
  1618. return NULL;
  1619. }
  1620. const SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
  1621. struct ssl_cipher_preference_list_st *server_pref)
  1622. {
  1623. const SSL_CIPHER *c,*ret=NULL;
  1624. STACK_OF(SSL_CIPHER) *srvr = server_pref->ciphers, *prio, *allow;
  1625. size_t i;
  1626. int ok;
  1627. size_t cipher_index;
  1628. unsigned long alg_k,alg_a,mask_k,mask_a;
  1629. /* in_group_flags will either be NULL, or will point to an array of
  1630. * bytes which indicate equal-preference groups in the |prio| stack.
  1631. * See the comment about |in_group_flags| in the
  1632. * |ssl_cipher_preference_list_st| struct. */
  1633. const unsigned char *in_group_flags;
  1634. /* group_min contains the minimal index so far found in a group, or -1
  1635. * if no such value exists yet. */
  1636. int group_min = -1;
  1637. if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE)
  1638. {
  1639. prio = srvr;
  1640. in_group_flags = server_pref->in_group_flags;
  1641. allow = clnt;
  1642. }
  1643. else
  1644. {
  1645. prio = clnt;
  1646. in_group_flags = NULL;
  1647. allow = srvr;
  1648. }
  1649. ssl_get_compatible_server_ciphers(s, &mask_k, &mask_a);
  1650. for (i=0; i<sk_SSL_CIPHER_num(prio); i++)
  1651. {
  1652. c=sk_SSL_CIPHER_value(prio,i);
  1653. ok = 1;
  1654. /* Skip TLS v1.2 only ciphersuites if not supported */
  1655. if ((c->algorithm_ssl & SSL_TLSV1_2) &&
  1656. !SSL_USE_TLS1_2_CIPHERS(s))
  1657. ok = 0;
  1658. alg_k=c->algorithm_mkey;
  1659. alg_a=c->algorithm_auth;
  1660. ok = ok && (alg_k & mask_k) && (alg_a & mask_a);
  1661. if (ok && sk_SSL_CIPHER_find(allow, &cipher_index, c))
  1662. {
  1663. if (in_group_flags != NULL && in_group_flags[i] == 1)
  1664. {
  1665. /* This element of |prio| is in a group. Update
  1666. * the minimum index found so far and continue
  1667. * looking. */
  1668. if (group_min == -1 || (size_t)group_min > cipher_index)
  1669. group_min = cipher_index;
  1670. }
  1671. else
  1672. {
  1673. if (group_min != -1 && (size_t)group_min < cipher_index)
  1674. cipher_index = group_min;
  1675. ret=sk_SSL_CIPHER_value(allow,cipher_index);
  1676. break;
  1677. }
  1678. }
  1679. if (in_group_flags != NULL &&
  1680. in_group_flags[i] == 0 &&
  1681. group_min != -1)
  1682. {
  1683. /* We are about to leave a group, but we found a match
  1684. * in it, so that's our answer. */
  1685. ret=sk_SSL_CIPHER_value(allow,group_min);
  1686. break;
  1687. }
  1688. }
  1689. return(ret);
  1690. }
  1691. int ssl3_get_req_cert_type(SSL *s, unsigned char *p)
  1692. {
  1693. int ret=0;
  1694. const unsigned char *sig;
  1695. size_t i, siglen;
  1696. int have_rsa_sign = 0;
  1697. int have_ecdsa_sign = 0;
  1698. /* If we have custom certificate types set, use them */
  1699. if (s->cert->client_certificate_types)
  1700. {
  1701. memcpy(p, s->cert->client_certificate_types,
  1702. s->cert->num_client_certificate_types);
  1703. return (int)s->cert->num_client_certificate_types;
  1704. }
  1705. /* get configured sigalgs */
  1706. siglen = tls12_get_psigalgs(s, &sig);
  1707. for (i = 0; i < siglen; i+=2, sig+=2)
  1708. {
  1709. switch(sig[1])
  1710. {
  1711. case TLSEXT_signature_rsa:
  1712. have_rsa_sign = 1;
  1713. break;
  1714. case TLSEXT_signature_ecdsa:
  1715. have_ecdsa_sign = 1;
  1716. break;
  1717. }
  1718. }
  1719. if (have_rsa_sign)
  1720. p[ret++]=SSL3_CT_RSA_SIGN;
  1721. /* ECDSA certs can be used with RSA cipher suites as well
  1722. * so we don't need to check for SSL_kECDH or SSL_kEECDH
  1723. */
  1724. if (s->version >= TLS1_VERSION)
  1725. {
  1726. if (have_ecdsa_sign)
  1727. p[ret++]=TLS_CT_ECDSA_SIGN;
  1728. }
  1729. return(ret);
  1730. }
  1731. static int ssl3_set_req_cert_type(CERT *c, const unsigned char *p, size_t len)
  1732. {
  1733. if (c->client_certificate_types)
  1734. {
  1735. OPENSSL_free(c->client_certificate_types);
  1736. c->client_certificate_types = NULL;
  1737. }
  1738. c->num_client_certificate_types = 0;
  1739. if (!p || !len)
  1740. return 1;
  1741. if (len > 0xff)
  1742. return 0;
  1743. c->client_certificate_types = BUF_memdup(p, len);
  1744. if (!c->client_certificate_types)
  1745. return 0;
  1746. c->num_client_certificate_types = len;
  1747. return 1;
  1748. }
  1749. int ssl3_shutdown(SSL *s)
  1750. {
  1751. int ret;
  1752. /* Do nothing if configured not to send a close_notify. */
  1753. if (s->quiet_shutdown)
  1754. {
  1755. s->shutdown = SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN;
  1756. return 1;
  1757. }
  1758. if (!(s->shutdown & SSL_SENT_SHUTDOWN))
  1759. {
  1760. s->shutdown|=SSL_SENT_SHUTDOWN;
  1761. #if 1
  1762. ssl3_send_alert(s,SSL3_AL_WARNING,SSL_AD_CLOSE_NOTIFY);
  1763. #endif
  1764. /* our shutdown alert has been sent now, and if it still needs
  1765. * to be written, s->s3->alert_dispatch will be true */
  1766. if (s->s3->alert_dispatch)
  1767. return(-1); /* return WANT_WRITE */
  1768. }
  1769. else if (s->s3->alert_dispatch)
  1770. {
  1771. /* resend it if not sent */
  1772. #if 1
  1773. ret=s->method->ssl_dispatch_alert(s);
  1774. if(ret == -1)
  1775. {
  1776. /* we only get to return -1 here the 2nd/Nth
  1777. * invocation, we must have already signalled
  1778. * return 0 upon a previous invoation,
  1779. * return WANT_WRITE */
  1780. return(ret);
  1781. }
  1782. #endif
  1783. }
  1784. else if (!(s->shutdown & SSL_RECEIVED_SHUTDOWN))
  1785. {
  1786. /* If we are waiting for a close from our peer, we are closed */
  1787. s->method->ssl_read_bytes(s,0,NULL,0,0);
  1788. if(!(s->shutdown & SSL_RECEIVED_SHUTDOWN))
  1789. {
  1790. return(-1); /* return WANT_READ */
  1791. }
  1792. }
  1793. if ((s->shutdown == (SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN)) &&
  1794. !s->s3->alert_dispatch)
  1795. return(1);
  1796. else
  1797. return(0);
  1798. }
  1799. int ssl3_write(SSL *s, const void *buf, int len)
  1800. {
  1801. #if 0
  1802. if (s->shutdown & SSL_SEND_SHUTDOWN)
  1803. {
  1804. s->rwstate=SSL_NOTHING;
  1805. return(0);
  1806. }
  1807. #endif
  1808. ERR_clear_system_error();
  1809. if (s->s3->renegotiate) ssl3_renegotiate_check(s);
  1810. return s->method->ssl_write_bytes(s, SSL3_RT_APPLICATION_DATA, buf,
  1811. len);
  1812. }
  1813. static int ssl3_read_internal(SSL *s, void *buf, int len, int peek)
  1814. {
  1815. int ret;
  1816. ERR_clear_system_error();
  1817. if (s->s3->renegotiate) ssl3_renegotiate_check(s);
  1818. s->s3->in_read_app_data=1;
  1819. ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);
  1820. if ((ret == -1) && (s->s3->in_read_app_data == 2))
  1821. {
  1822. /* ssl3_read_bytes decided to call s->handshake_func, which
  1823. * called ssl3_read_bytes to read handshake data.
  1824. * However, ssl3_read_bytes actually found application data
  1825. * and thinks that application data makes sense here; so disable
  1826. * handshake processing and try to read application data again. */
  1827. s->in_handshake++;
  1828. ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);
  1829. s->in_handshake--;
  1830. }
  1831. else
  1832. s->s3->in_read_app_data=0;
  1833. return(ret);
  1834. }
  1835. int ssl3_read(SSL *s, void *buf, int len)
  1836. {
  1837. return ssl3_read_internal(s, buf, len, 0);
  1838. }
  1839. int ssl3_peek(SSL *s, void *buf, int len)
  1840. {
  1841. return ssl3_read_internal(s, buf, len, 1);
  1842. }
  1843. int ssl3_renegotiate(SSL *s)
  1844. {
  1845. if (s->handshake_func == NULL)
  1846. return 1;
  1847. s->s3->renegotiate = 1;
  1848. return 1;
  1849. }
  1850. int ssl3_renegotiate_check(SSL *s)
  1851. {
  1852. int ret=0;
  1853. if (s->s3->renegotiate)
  1854. {
  1855. if ( (s->s3->rbuf.left == 0) &&
  1856. (s->s3->wbuf.left == 0) &&
  1857. !SSL_in_init(s))
  1858. {
  1859. /*
  1860. if we are the server, and we have sent a 'RENEGOTIATE' message, we
  1861. need to go to SSL_ST_ACCEPT.
  1862. */
  1863. /* SSL_ST_ACCEPT */
  1864. s->state=SSL_ST_RENEGOTIATE;
  1865. s->s3->renegotiate=0;
  1866. s->s3->num_renegotiations++;
  1867. s->s3->total_renegotiations++;
  1868. ret=1;
  1869. }
  1870. }
  1871. return(ret);
  1872. }
  1873. /* If we are using default SHA1+MD5 algorithms switch to new SHA256 PRF
  1874. * and handshake macs if required.
  1875. */
  1876. long ssl_get_algorithm2(SSL *s)
  1877. {
  1878. static const unsigned long kMask = SSL_HANDSHAKE_MAC_DEFAULT|TLS1_PRF;
  1879. long alg2 = s->s3->tmp.new_cipher->algorithm2;
  1880. if (s->enc_method->enc_flags & SSL_ENC_FLAG_SHA256_PRF
  1881. && (alg2 & kMask) == kMask)
  1882. return SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256;
  1883. return alg2;
  1884. }