rhodes 3.3.5 → 3.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1678) hide show
  1. data/CHANGELOG +3 -1
  2. data/CREDITS +5 -0
  3. data/Rakefile +173 -17
  4. data/doc/build.txt +71 -27
  5. data/doc/configuration.txt +2 -0
  6. data/doc/device-caps.txt +103 -27
  7. data/doc/extensions.txt +49 -33
  8. data/doc/install.txt +15 -12
  9. data/doc/introduction.txt +1 -1
  10. data/doc/nfc.txt +3 -2
  11. data/doc/rhom.txt +22 -1
  12. data/doc/{rhostudio-eclipse.txt → rhostudio-eclipse_outdated.txt} +0 -0
  13. data/doc/rhostudio-test-plan.txt +79 -22
  14. data/doc/simulator.txt +19 -52
  15. data/doc/standard-css.txt +1 -1
  16. data/doc/synchronization.txt +2 -0
  17. data/doc/test-log-debug.txt +149 -1
  18. data/doc/ui.txt +57 -0
  19. data/lib/build/jake.rb +33 -22
  20. data/lib/extensions/barcode/ext/barcode/platform/iphone/Barcode.xcodeproj/project.pbxproj +4 -10
  21. data/lib/extensions/debugger/debugger.rb +18 -5
  22. data/lib/extensions/digest-md5/digest/md5.rb +0 -0
  23. data/lib/extensions/digest-md5/ext/iphone/Dmd5.xcodeproj/project.pbxproj +4 -10
  24. data/lib/extensions/digest-sha1/digest/sha1.rb +0 -0
  25. data/lib/extensions/digest-sha1/ext/iphone/Dsha1.xcodeproj/project.pbxproj +4 -10
  26. data/lib/extensions/digest-sha2/digest/sha2.rb +0 -0
  27. data/lib/extensions/digest-sha2/ext.yml +2 -0
  28. data/lib/extensions/digest-sha2/ext/Rakefile +128 -0
  29. data/lib/extensions/digest-sha2/ext/build +12 -0
  30. data/lib/extensions/digest-sha2/ext/build.bat +1 -0
  31. data/lib/extensions/digest-sha2/ext/depend +6 -0
  32. data/lib/extensions/digest-sha2/ext/digest-sha2.sln +44 -0
  33. data/lib/extensions/digest-sha2/ext/digest-sha2.vcproj +666 -0
  34. data/lib/extensions/digest-sha2/ext/extconf.rb +27 -0
  35. data/lib/extensions/digest-sha2/ext/iphone/Dsha2.xcodeproj/project.pbxproj +272 -0
  36. data/lib/extensions/digest-sha2/ext/iphone/Dsha2_Prefix.pch +7 -0
  37. data/lib/extensions/digest-sha2/ext/iphone/Rakefile +79 -0
  38. data/lib/extensions/digest-sha2/ext/sha2.c +1070 -0
  39. data/lib/extensions/digest-sha2/ext/sha2.h +225 -0
  40. data/lib/extensions/digest-sha2/ext/sha2.rb +1 -0
  41. data/lib/extensions/digest-sha2/ext/sha2init.c +56 -0
  42. data/lib/extensions/digest-sha2/ext/sha2ossl.c +11 -0
  43. data/lib/extensions/digest-sha2/ext/sha2ossl.h +17 -0
  44. data/lib/extensions/digest-sha2/sha2/sha2.rb +74 -0
  45. data/lib/extensions/digest/digest.so.rb +0 -0
  46. data/lib/extensions/digest/ext/iphone/Digest.xcodeproj/project.pbxproj +4 -10
  47. data/lib/extensions/esri/ext/esri/platform/iphone/ESRI.xcodeproj/project.pbxproj +4 -10
  48. data/lib/extensions/ezcrypto/ext/CHANGELOG +85 -0
  49. data/lib/extensions/ezcrypto/ext/MIT-LICENSE +21 -0
  50. data/lib/extensions/ezcrypto/ext/README.rdoc +152 -0
  51. data/lib/extensions/ezcrypto/ext/README_ACTIVE_CRYPTO +122 -0
  52. data/lib/extensions/ezcrypto/ext/README_DIGITAL_SIGNATURES +55 -0
  53. data/lib/extensions/ezcrypto/ext/rakefile +200 -0
  54. data/lib/extensions/ezcrypto/ext/test/active_crypto_test.rb +211 -0
  55. data/lib/extensions/ezcrypto/ext/test/agree2.com.cert +31 -0
  56. data/lib/extensions/ezcrypto/ext/test/association_key_holder_test.rb +38 -0
  57. data/lib/extensions/ezcrypto/ext/test/database.yml +18 -0
  58. data/lib/extensions/ezcrypto/ext/test/digest_test.rb +51 -0
  59. data/lib/extensions/ezcrypto/ext/test/dsakey.pem +12 -0
  60. data/lib/extensions/ezcrypto/ext/test/dsapubkey.pem +12 -0
  61. data/lib/extensions/ezcrypto/ext/test/dsig_test.rb +288 -0
  62. data/lib/extensions/ezcrypto/ext/test/encrypt_test.rb +41 -0
  63. data/lib/extensions/ezcrypto/ext/test/ezcrypto_test.rb +212 -0
  64. data/lib/extensions/ezcrypto/ext/test/key_holder_test.rb +44 -0
  65. data/lib/extensions/ezcrypto/ext/test/protectedsigner.pem +12 -0
  66. data/lib/extensions/ezcrypto/ext/test/sf-class2-root.crt +24 -0
  67. data/lib/extensions/ezcrypto/ext/test/sf_intermediate.crt +29 -0
  68. data/lib/extensions/ezcrypto/ext/test/test_helper.rb +35 -0
  69. data/lib/extensions/ezcrypto/ext/test/testchild.pem +15 -0
  70. data/lib/extensions/ezcrypto/ext/test/testchild.req +12 -0
  71. data/lib/extensions/ezcrypto/ext/test/testpub.pem +4 -0
  72. data/lib/extensions/ezcrypto/ext/test/testsigner.cert +20 -0
  73. data/lib/extensions/ezcrypto/ext/test/testsigner.pem +9 -0
  74. data/lib/extensions/ezcrypto/ext/test/valicert_class2_root.crt +18 -0
  75. data/lib/extensions/ezcrypto/ezcrypto.rb +1 -0
  76. data/lib/extensions/ezcrypto/ezcrypto/ezcrypto.rb +612 -0
  77. data/lib/extensions/ezcrypto/ezcrypto/ezsig.rb +535 -0
  78. data/lib/extensions/ezcrypto/ezcrypto/trusted.pem +2363 -0
  79. data/lib/extensions/fcntl/ext/iphone/Fcntl.xcodeproj/project.pbxproj +4 -10
  80. data/lib/extensions/fcntl/fcntl.rb +0 -0
  81. data/lib/extensions/nfc/ext/nfc/platform/android/src/com/rhomobile/nfc/Nfc.java +9 -22
  82. data/lib/extensions/openssl.so.src/ext.yml +2 -0
  83. data/lib/extensions/openssl.so.src/ext/Rakefile +107 -0
  84. data/lib/extensions/openssl.so.src/ext/build +12 -0
  85. data/lib/extensions/openssl.so.src/ext/build.bat +1 -0
  86. data/lib/extensions/openssl.so/ext.yml +9 -0
  87. data/lib/extensions/openssl.so/ext/Rakefile +139 -0
  88. data/lib/extensions/openssl.so/ext/android/libopenssl.so.a +0 -0
  89. data/lib/extensions/openssl.so/ext/build +12 -0
  90. data/lib/extensions/openssl.so/ext/build.bat +1 -0
  91. data/lib/extensions/openssl.so/ext/iphone/Rakefile +79 -0
  92. data/lib/extensions/openssl.so/ext/iphone/Release-iphoneos/libopenssl.so.a +0 -0
  93. data/lib/extensions/openssl.so/ext/iphone/Release-iphonesimulator/libopenssl.so.a +0 -0
  94. data/lib/extensions/openssl.so/ext/iphone/openssl/openssl.xcodeproj/project.pbxproj +4300 -0
  95. data/lib/extensions/openssl.so/ext/iphone/openssl/openssl/openssl-Prefix.pch +7 -0
  96. data/lib/extensions/openssl.so/ext/sources/apps/apps.h +373 -0
  97. data/lib/extensions/openssl.so/ext/sources/apps/progs.h +366 -0
  98. data/lib/extensions/openssl.so/ext/sources/apps/s_apps.h +176 -0
  99. data/lib/extensions/openssl.so/ext/sources/apps/testdsa.h +217 -0
  100. data/lib/extensions/openssl.so/ext/sources/apps/testrsa.h +518 -0
  101. data/lib/extensions/openssl.so/ext/sources/crypto/LPdir_unix.c +127 -0
  102. data/lib/extensions/openssl.so/ext/sources/crypto/LPdir_win.c +153 -0
  103. data/lib/extensions/openssl.so/ext/sources/crypto/LPdir_win32.c +30 -0
  104. data/lib/extensions/openssl.so/ext/sources/crypto/aes/aes.h +147 -0
  105. data/lib/extensions/openssl.so/ext/sources/crypto/aes/aes_cbc.c +63 -0
  106. data/lib/extensions/openssl.so/ext/sources/crypto/aes/aes_cfb.c +81 -0
  107. data/lib/extensions/openssl.so/ext/sources/crypto/aes/aes_core.c +1358 -0
  108. data/lib/extensions/openssl.so/ext/sources/crypto/aes/aes_ctr.c +61 -0
  109. data/lib/extensions/openssl.so/ext/sources/crypto/aes/aes_ecb.c +73 -0
  110. data/lib/extensions/openssl.so/ext/sources/crypto/aes/aes_ige.c +323 -0
  111. data/lib/extensions/openssl.so/ext/sources/crypto/aes/aes_locl.h +89 -0
  112. data/lib/extensions/openssl.so/ext/sources/crypto/aes/aes_misc.c +85 -0
  113. data/lib/extensions/openssl.so/ext/sources/crypto/aes/aes_ofb.c +60 -0
  114. data/lib/extensions/openssl.so/ext/sources/crypto/aes/aes_wrap.c +259 -0
  115. data/lib/extensions/openssl.so/ext/sources/crypto/arm_arch.h +51 -0
  116. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/a_bitstr.c +248 -0
  117. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/a_bool.c +114 -0
  118. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/a_bytes.c +314 -0
  119. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/a_d2i_fp.c +286 -0
  120. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/a_digest.c +113 -0
  121. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/a_dup.c +109 -0
  122. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/a_enum.c +182 -0
  123. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/a_gentm.c +263 -0
  124. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/a_i2d_fp.c +163 -0
  125. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/a_int.c +458 -0
  126. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/a_mbstr.c +400 -0
  127. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/a_object.c +403 -0
  128. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/a_octet.c +71 -0
  129. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/a_print.c +127 -0
  130. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/a_set.c +241 -0
  131. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/a_sign.c +333 -0
  132. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/a_strex.c +574 -0
  133. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/a_strnid.c +290 -0
  134. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/a_time.c +198 -0
  135. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/a_type.c +159 -0
  136. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/a_utctm.c +318 -0
  137. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/a_utf8.c +211 -0
  138. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/a_verify.c +228 -0
  139. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/ameth_lib.c +460 -0
  140. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/asn1.h +1404 -0
  141. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/asn1_err.c +332 -0
  142. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/asn1_gen.c +854 -0
  143. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/asn1_lib.c +482 -0
  144. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/asn1_locl.h +145 -0
  145. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/asn1_mac.h +578 -0
  146. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/asn1_par.c +437 -0
  147. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/asn1t.h +960 -0
  148. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/asn_mime.c +951 -0
  149. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/asn_moid.c +160 -0
  150. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/asn_pack.c +191 -0
  151. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/bio_asn1.c +495 -0
  152. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/bio_ndef.c +243 -0
  153. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/charmap.h +15 -0
  154. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/d2i_pr.c +170 -0
  155. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/d2i_pu.c +139 -0
  156. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/evp_asn1.c +189 -0
  157. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/f_enum.c +207 -0
  158. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/f_int.c +219 -0
  159. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/f_string.c +212 -0
  160. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/i2d_pr.c +80 -0
  161. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/i2d_pu.c +95 -0
  162. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/n_pkey.c +357 -0
  163. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/nsseq.c +83 -0
  164. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/p5_pbe.c +148 -0
  165. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/p5_pbev2.c +280 -0
  166. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/p8_pkey.c +155 -0
  167. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/t_bitst.c +102 -0
  168. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/t_crl.c +132 -0
  169. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/t_pkey.c +114 -0
  170. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/t_req.c +266 -0
  171. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/t_spki.c +107 -0
  172. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/t_x509.c +528 -0
  173. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/t_x509a.c +110 -0
  174. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/tasn_dec.c +1347 -0
  175. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/tasn_enc.c +691 -0
  176. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/tasn_fre.c +266 -0
  177. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/tasn_new.c +396 -0
  178. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/tasn_prn.c +627 -0
  179. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/tasn_typ.c +148 -0
  180. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/tasn_utl.c +279 -0
  181. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/x_algor.c +144 -0
  182. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/x_attrib.c +118 -0
  183. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/x_bignum.c +139 -0
  184. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/x_crl.c +527 -0
  185. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/x_exten.c +76 -0
  186. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/x_info.c +114 -0
  187. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/x_long.c +179 -0
  188. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/x_name.c +519 -0
  189. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/x_nx509.c +72 -0
  190. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/x_pkey.c +151 -0
  191. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/x_pubkey.c +382 -0
  192. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/x_req.c +113 -0
  193. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/x_sig.c +69 -0
  194. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/x_spki.c +81 -0
  195. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/x_val.c +69 -0
  196. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/x_x509.c +194 -0
  197. data/lib/extensions/openssl.so/ext/sources/crypto/asn1/x_x509a.c +180 -0
  198. data/lib/extensions/openssl.so/ext/sources/crypto/bf/bf_cfb64.c +121 -0
  199. data/lib/extensions/openssl.so/ext/sources/crypto/bf/bf_ecb.c +96 -0
  200. data/lib/extensions/openssl.so/ext/sources/crypto/bf/bf_enc.c +306 -0
  201. data/lib/extensions/openssl.so/ext/sources/crypto/bf/bf_locl.h +219 -0
  202. data/lib/extensions/openssl.so/ext/sources/crypto/bf/bf_ofb64.c +110 -0
  203. data/lib/extensions/openssl.so/ext/sources/crypto/bf/bf_pi.h +325 -0
  204. data/lib/extensions/openssl.so/ext/sources/crypto/bf/bf_skey.c +124 -0
  205. data/lib/extensions/openssl.so/ext/sources/crypto/bf/blowfish.h +129 -0
  206. data/lib/extensions/openssl.so/ext/sources/crypto/bio/b_dump.c +187 -0
  207. data/lib/extensions/openssl.so/ext/sources/crypto/bio/b_print.c +842 -0
  208. data/lib/extensions/openssl.so/ext/sources/crypto/bio/b_sock.c +975 -0
  209. data/lib/extensions/openssl.so/ext/sources/crypto/bio/bf_buff.c +512 -0
  210. data/lib/extensions/openssl.so/ext/sources/crypto/bio/bf_nbio.c +253 -0
  211. data/lib/extensions/openssl.so/ext/sources/crypto/bio/bf_null.c +183 -0
  212. data/lib/extensions/openssl.so/ext/sources/crypto/bio/bio.h +847 -0
  213. data/lib/extensions/openssl.so/ext/sources/crypto/bio/bio_cb.c +143 -0
  214. data/lib/extensions/openssl.so/ext/sources/crypto/bio/bio_err.c +155 -0
  215. data/lib/extensions/openssl.so/ext/sources/crypto/bio/bio_lcl.h +36 -0
  216. data/lib/extensions/openssl.so/ext/sources/crypto/bio/bio_lib.c +602 -0
  217. data/lib/extensions/openssl.so/ext/sources/crypto/bio/bss_acpt.c +478 -0
  218. data/lib/extensions/openssl.so/ext/sources/crypto/bio/bss_bio.c +924 -0
  219. data/lib/extensions/openssl.so/ext/sources/crypto/bio/bss_conn.c +652 -0
  220. data/lib/extensions/openssl.so/ext/sources/crypto/bio/bss_dgram.c +1832 -0
  221. data/lib/extensions/openssl.so/ext/sources/crypto/bio/bss_fd.c +319 -0
  222. data/lib/extensions/openssl.so/ext/sources/crypto/bio/bss_file.c +477 -0
  223. data/lib/extensions/openssl.so/ext/sources/crypto/bio/bss_log.c +399 -0
  224. data/lib/extensions/openssl.so/ext/sources/crypto/bio/bss_mem.c +319 -0
  225. data/lib/extensions/openssl.so/ext/sources/crypto/bio/bss_null.c +150 -0
  226. data/lib/extensions/openssl.so/ext/sources/crypto/bio/bss_sock.c +294 -0
  227. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn.h +891 -0
  228. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_add.c +313 -0
  229. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_asm.c +1030 -0
  230. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_blind.c +385 -0
  231. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_const.c +402 -0
  232. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_ctx.c +454 -0
  233. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_depr.c +112 -0
  234. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_div.c +446 -0
  235. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_err.c +150 -0
  236. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_exp.c +1097 -0
  237. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_exp2.c +312 -0
  238. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_gcd.c +654 -0
  239. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_gf2m.c +1113 -0
  240. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_kron.c +184 -0
  241. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_lcl.h +508 -0
  242. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_lib.c +826 -0
  243. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_mod.c +301 -0
  244. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_mont.c +509 -0
  245. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_mpi.c +130 -0
  246. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_mul.c +1166 -0
  247. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_nist.c +1102 -0
  248. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_prime.c +494 -0
  249. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_prime.h +327 -0
  250. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_print.c +378 -0
  251. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_rand.c +305 -0
  252. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_recp.c +234 -0
  253. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_shift.c +223 -0
  254. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_sqr.c +294 -0
  255. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_sqrt.c +393 -0
  256. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_word.c +247 -0
  257. data/lib/extensions/openssl.so/ext/sources/crypto/bn/bn_x931p.c +272 -0
  258. data/lib/extensions/openssl.so/ext/sources/crypto/buffer/buf_err.c +99 -0
  259. data/lib/extensions/openssl.so/ext/sources/crypto/buffer/buf_str.c +119 -0
  260. data/lib/extensions/openssl.so/ext/sources/crypto/buffer/buffer.c +203 -0
  261. data/lib/extensions/openssl.so/ext/sources/crypto/buffer/buffer.h +119 -0
  262. data/lib/extensions/openssl.so/ext/sources/crypto/buildinf.h +12 -0
  263. data/lib/extensions/openssl.so/ext/sources/crypto/camellia/camellia.c +582 -0
  264. data/lib/extensions/openssl.so/ext/sources/crypto/camellia/camellia.h +130 -0
  265. data/lib/extensions/openssl.so/ext/sources/crypto/camellia/cmll_cbc.c +64 -0
  266. data/lib/extensions/openssl.so/ext/sources/crypto/camellia/cmll_cfb.c +139 -0
  267. data/lib/extensions/openssl.so/ext/sources/crypto/camellia/cmll_ctr.c +64 -0
  268. data/lib/extensions/openssl.so/ext/sources/crypto/camellia/cmll_ecb.c +74 -0
  269. data/lib/extensions/openssl.so/ext/sources/crypto/camellia/cmll_locl.h +86 -0
  270. data/lib/extensions/openssl.so/ext/sources/crypto/camellia/cmll_misc.c +80 -0
  271. data/lib/extensions/openssl.so/ext/sources/crypto/camellia/cmll_ofb.c +119 -0
  272. data/lib/extensions/openssl.so/ext/sources/crypto/camellia/cmll_utl.c +64 -0
  273. data/lib/extensions/openssl.so/ext/sources/crypto/cast/c_cfb64.c +121 -0
  274. data/lib/extensions/openssl.so/ext/sources/crypto/cast/c_ecb.c +79 -0
  275. data/lib/extensions/openssl.so/ext/sources/crypto/cast/c_enc.c +208 -0
  276. data/lib/extensions/openssl.so/ext/sources/crypto/cast/c_ofb64.c +110 -0
  277. data/lib/extensions/openssl.so/ext/sources/crypto/cast/c_skey.c +173 -0
  278. data/lib/extensions/openssl.so/ext/sources/crypto/cast/cast.h +107 -0
  279. data/lib/extensions/openssl.so/ext/sources/crypto/cast/cast_lcl.h +227 -0
  280. data/lib/extensions/openssl.so/ext/sources/crypto/cast/cast_s.h +585 -0
  281. data/lib/extensions/openssl.so/ext/sources/crypto/cmac/cm_ameth.c +97 -0
  282. data/lib/extensions/openssl.so/ext/sources/crypto/cmac/cm_pmeth.c +224 -0
  283. data/lib/extensions/openssl.so/ext/sources/crypto/cmac/cmac.c +308 -0
  284. data/lib/extensions/openssl.so/ext/sources/crypto/cmac/cmac.h +82 -0
  285. data/lib/extensions/openssl.so/ext/sources/crypto/cms/cms.h +501 -0
  286. data/lib/extensions/openssl.so/ext/sources/crypto/cms/cms_asn1.c +389 -0
  287. data/lib/extensions/openssl.so/ext/sources/crypto/cms/cms_att.c +195 -0
  288. data/lib/extensions/openssl.so/ext/sources/crypto/cms/cms_cd.c +134 -0
  289. data/lib/extensions/openssl.so/ext/sources/crypto/cms/cms_dd.c +148 -0
  290. data/lib/extensions/openssl.so/ext/sources/crypto/cms/cms_enc.c +294 -0
  291. data/lib/extensions/openssl.so/ext/sources/crypto/cms/cms_env.c +876 -0
  292. data/lib/extensions/openssl.so/ext/sources/crypto/cms/cms_err.c +245 -0
  293. data/lib/extensions/openssl.so/ext/sources/crypto/cms/cms_ess.c +420 -0
  294. data/lib/extensions/openssl.so/ext/sources/crypto/cms/cms_io.c +133 -0
  295. data/lib/extensions/openssl.so/ext/sources/crypto/cms/cms_lcl.h +473 -0
  296. data/lib/extensions/openssl.so/ext/sources/crypto/cms/cms_lib.c +626 -0
  297. data/lib/extensions/openssl.so/ext/sources/crypto/cms/cms_pwri.c +454 -0
  298. data/lib/extensions/openssl.so/ext/sources/crypto/cms/cms_sd.c +985 -0
  299. data/lib/extensions/openssl.so/ext/sources/crypto/cms/cms_smime.c +850 -0
  300. data/lib/extensions/openssl.so/ext/sources/crypto/comp/c_rle.c +61 -0
  301. data/lib/extensions/openssl.so/ext/sources/crypto/comp/c_zlib.c +799 -0
  302. data/lib/extensions/openssl.so/ext/sources/crypto/comp/comp.h +80 -0
  303. data/lib/extensions/openssl.so/ext/sources/crypto/comp/comp_err.c +100 -0
  304. data/lib/extensions/openssl.so/ext/sources/crypto/comp/comp_lib.c +72 -0
  305. data/lib/extensions/openssl.so/ext/sources/crypto/conf/conf.h +263 -0
  306. data/lib/extensions/openssl.so/ext/sources/crypto/conf/conf_api.c +301 -0
  307. data/lib/extensions/openssl.so/ext/sources/crypto/conf/conf_api.h +89 -0
  308. data/lib/extensions/openssl.so/ext/sources/crypto/conf/conf_def.c +740 -0
  309. data/lib/extensions/openssl.so/ext/sources/crypto/conf/conf_def.h +180 -0
  310. data/lib/extensions/openssl.so/ext/sources/crypto/conf/conf_err.c +131 -0
  311. data/lib/extensions/openssl.so/ext/sources/crypto/conf/conf_lib.c +407 -0
  312. data/lib/extensions/openssl.so/ext/sources/crypto/conf/conf_mall.c +80 -0
  313. data/lib/extensions/openssl.so/ext/sources/crypto/conf/conf_mod.c +623 -0
  314. data/lib/extensions/openssl.so/ext/sources/crypto/conf/conf_sap.c +111 -0
  315. data/lib/extensions/openssl.so/ext/sources/crypto/cpt_err.c +105 -0
  316. data/lib/extensions/openssl.so/ext/sources/crypto/cryptlib.c +926 -0
  317. data/lib/extensions/openssl.so/ext/sources/crypto/cryptlib.h +111 -0
  318. data/lib/extensions/openssl.so/ext/sources/crypto/crypto.h +604 -0
  319. data/lib/extensions/openssl.so/ext/sources/crypto/cversion.c +117 -0
  320. data/lib/extensions/openssl.so/ext/sources/crypto/des/cbc_cksm.c +106 -0
  321. data/lib/extensions/openssl.so/ext/sources/crypto/des/cbc_enc.c +61 -0
  322. data/lib/extensions/openssl.so/ext/sources/crypto/des/cfb64ede.c +254 -0
  323. data/lib/extensions/openssl.so/ext/sources/crypto/des/cfb64enc.c +121 -0
  324. data/lib/extensions/openssl.so/ext/sources/crypto/des/cfb_enc.c +195 -0
  325. data/lib/extensions/openssl.so/ext/sources/crypto/des/des.h +248 -0
  326. data/lib/extensions/openssl.so/ext/sources/crypto/des/des_enc.c +400 -0
  327. data/lib/extensions/openssl.so/ext/sources/crypto/des/des_locl.h +432 -0
  328. data/lib/extensions/openssl.so/ext/sources/crypto/des/des_old.c +273 -0
  329. data/lib/extensions/openssl.so/ext/sources/crypto/des/des_old.h +446 -0
  330. data/lib/extensions/openssl.so/ext/sources/crypto/des/des_old2.c +82 -0
  331. data/lib/extensions/openssl.so/ext/sources/crypto/des/des_ver.h +71 -0
  332. data/lib/extensions/openssl.so/ext/sources/crypto/des/ecb3_enc.c +83 -0
  333. data/lib/extensions/openssl.so/ext/sources/crypto/des/ecb_enc.c +122 -0
  334. data/lib/extensions/openssl.so/ext/sources/crypto/des/ede_cbcm_enc.c +199 -0
  335. data/lib/extensions/openssl.so/ext/sources/crypto/des/enc_read.c +240 -0
  336. data/lib/extensions/openssl.so/ext/sources/crypto/des/enc_writ.c +179 -0
  337. data/lib/extensions/openssl.so/ext/sources/crypto/des/fcrypt.c +170 -0
  338. data/lib/extensions/openssl.so/ext/sources/crypto/des/fcrypt_b.c +143 -0
  339. data/lib/extensions/openssl.so/ext/sources/crypto/des/ncbc_enc.c +148 -0
  340. data/lib/extensions/openssl.so/ext/sources/crypto/des/ofb64ede.c +125 -0
  341. data/lib/extensions/openssl.so/ext/sources/crypto/des/ofb64enc.c +110 -0
  342. data/lib/extensions/openssl.so/ext/sources/crypto/des/ofb_enc.c +135 -0
  343. data/lib/extensions/openssl.so/ext/sources/crypto/des/pcbc_enc.c +123 -0
  344. data/lib/extensions/openssl.so/ext/sources/crypto/des/qud_cksm.c +139 -0
  345. data/lib/extensions/openssl.so/ext/sources/crypto/des/rand_key.c +68 -0
  346. data/lib/extensions/openssl.so/ext/sources/crypto/des/read2pwd.c +140 -0
  347. data/lib/extensions/openssl.so/ext/sources/crypto/des/rpc_des.h +131 -0
  348. data/lib/extensions/openssl.so/ext/sources/crypto/des/rpc_enc.c +98 -0
  349. data/lib/extensions/openssl.so/ext/sources/crypto/des/set_key.c +416 -0
  350. data/lib/extensions/openssl.so/ext/sources/crypto/des/spr.h +204 -0
  351. data/lib/extensions/openssl.so/ext/sources/crypto/des/str2key.c +174 -0
  352. data/lib/extensions/openssl.so/ext/sources/crypto/des/xcbc_enc.c +197 -0
  353. data/lib/extensions/openssl.so/ext/sources/crypto/dh/dh.h +280 -0
  354. data/lib/extensions/openssl.so/ext/sources/crypto/dh/dh_ameth.c +501 -0
  355. data/lib/extensions/openssl.so/ext/sources/crypto/dh/dh_asn1.c +93 -0
  356. data/lib/extensions/openssl.so/ext/sources/crypto/dh/dh_check.c +142 -0
  357. data/lib/extensions/openssl.so/ext/sources/crypto/dh/dh_depr.c +83 -0
  358. data/lib/extensions/openssl.so/ext/sources/crypto/dh/dh_err.c +122 -0
  359. data/lib/extensions/openssl.so/ext/sources/crypto/dh/dh_gen.c +192 -0
  360. data/lib/extensions/openssl.so/ext/sources/crypto/dh/dh_key.c +292 -0
  361. data/lib/extensions/openssl.so/ext/sources/crypto/dh/dh_lib.c +260 -0
  362. data/lib/extensions/openssl.so/ext/sources/crypto/dh/dh_pmeth.c +254 -0
  363. data/lib/extensions/openssl.so/ext/sources/crypto/dh/dh_prn.c +80 -0
  364. data/lib/extensions/openssl.so/ext/sources/crypto/dsa/dsa.h +327 -0
  365. data/lib/extensions/openssl.so/ext/sources/crypto/dsa/dsa_ameth.c +704 -0
  366. data/lib/extensions/openssl.so/ext/sources/crypto/dsa/dsa_asn1.c +188 -0
  367. data/lib/extensions/openssl.so/ext/sources/crypto/dsa/dsa_depr.c +106 -0
  368. data/lib/extensions/openssl.so/ext/sources/crypto/dsa/dsa_err.c +130 -0
  369. data/lib/extensions/openssl.so/ext/sources/crypto/dsa/dsa_gen.c +371 -0
  370. data/lib/extensions/openssl.so/ext/sources/crypto/dsa/dsa_key.c +144 -0
  371. data/lib/extensions/openssl.so/ext/sources/crypto/dsa/dsa_lib.c +329 -0
  372. data/lib/extensions/openssl.so/ext/sources/crypto/dsa/dsa_locl.h +60 -0
  373. data/lib/extensions/openssl.so/ext/sources/crypto/dsa/dsa_ossl.c +412 -0
  374. data/lib/extensions/openssl.so/ext/sources/crypto/dsa/dsa_pmeth.c +318 -0
  375. data/lib/extensions/openssl.so/ext/sources/crypto/dsa/dsa_prn.c +121 -0
  376. data/lib/extensions/openssl.so/ext/sources/crypto/dsa/dsa_sign.c +114 -0
  377. data/lib/extensions/openssl.so/ext/sources/crypto/dsa/dsa_vrf.c +76 -0
  378. data/lib/extensions/openssl.so/ext/sources/crypto/dso/dso.h +409 -0
  379. data/lib/extensions/openssl.so/ext/sources/crypto/dso/dso_beos.c +270 -0
  380. data/lib/extensions/openssl.so/ext/sources/crypto/dso/dso_dl.c +393 -0
  381. data/lib/extensions/openssl.so/ext/sources/crypto/dso/dso_dlfcn.c +484 -0
  382. data/lib/extensions/openssl.so/ext/sources/crypto/dso/dso_err.c +159 -0
  383. data/lib/extensions/openssl.so/ext/sources/crypto/dso/dso_lib.c +483 -0
  384. data/lib/extensions/openssl.so/ext/sources/crypto/dso/dso_null.c +90 -0
  385. data/lib/extensions/openssl.so/ext/sources/crypto/dso/dso_openssl.c +83 -0
  386. data/lib/extensions/openssl.so/ext/sources/crypto/dso/dso_vms.c +525 -0
  387. data/lib/extensions/openssl.so/ext/sources/crypto/dso/dso_win32.c +844 -0
  388. data/lib/extensions/openssl.so/ext/sources/crypto/ebcdic.c +221 -0
  389. data/lib/extensions/openssl.so/ext/sources/crypto/ebcdic.h +19 -0
  390. data/lib/extensions/openssl.so/ext/sources/crypto/ec/ec.h +1159 -0
  391. data/lib/extensions/openssl.so/ext/sources/crypto/ec/ec2_mult.c +390 -0
  392. data/lib/extensions/openssl.so/ext/sources/crypto/ec/ec2_oct.c +407 -0
  393. data/lib/extensions/openssl.so/ext/sources/crypto/ec/ec2_smpl.c +719 -0
  394. data/lib/extensions/openssl.so/ext/sources/crypto/ec/ec_ameth.c +660 -0
  395. data/lib/extensions/openssl.so/ext/sources/crypto/ec/ec_asn1.c +1447 -0
  396. data/lib/extensions/openssl.so/ext/sources/crypto/ec/ec_check.c +123 -0
  397. data/lib/extensions/openssl.so/ext/sources/crypto/ec/ec_curve.c +2100 -0
  398. data/lib/extensions/openssl.so/ext/sources/crypto/ec/ec_cvt.c +170 -0
  399. data/lib/extensions/openssl.so/ext/sources/crypto/ec/ec_err.c +276 -0
  400. data/lib/extensions/openssl.so/ext/sources/crypto/ec/ec_key.c +563 -0
  401. data/lib/extensions/openssl.so/ext/sources/crypto/ec/ec_lcl.h +446 -0
  402. data/lib/extensions/openssl.so/ext/sources/crypto/ec/ec_lib.c +1096 -0
  403. data/lib/extensions/openssl.so/ext/sources/crypto/ec/ec_mult.c +940 -0
  404. data/lib/extensions/openssl.so/ext/sources/crypto/ec/ec_oct.c +199 -0
  405. data/lib/extensions/openssl.so/ext/sources/crypto/ec/ec_pmeth.c +341 -0
  406. data/lib/extensions/openssl.so/ext/sources/crypto/ec/ec_print.c +195 -0
  407. data/lib/extensions/openssl.so/ext/sources/crypto/ec/eck_prn.c +392 -0
  408. data/lib/extensions/openssl.so/ext/sources/crypto/ec/ecp_mont.c +323 -0
  409. data/lib/extensions/openssl.so/ext/sources/crypto/ec/ecp_nist.c +217 -0
  410. data/lib/extensions/openssl.so/ext/sources/crypto/ec/ecp_nistp224.c +1658 -0
  411. data/lib/extensions/openssl.so/ext/sources/crypto/ec/ecp_nistp256.c +2171 -0
  412. data/lib/extensions/openssl.so/ext/sources/crypto/ec/ecp_nistp521.c +2025 -0
  413. data/lib/extensions/openssl.so/ext/sources/crypto/ec/ecp_nistputil.c +197 -0
  414. data/lib/extensions/openssl.so/ext/sources/crypto/ec/ecp_oct.c +433 -0
  415. data/lib/extensions/openssl.so/ext/sources/crypto/ec/ecp_smpl.c +1360 -0
  416. data/lib/extensions/openssl.so/ext/sources/crypto/ecdh/ecdh.h +125 -0
  417. data/lib/extensions/openssl.so/ext/sources/crypto/ecdh/ech_err.c +100 -0
  418. data/lib/extensions/openssl.so/ext/sources/crypto/ecdh/ech_key.c +83 -0
  419. data/lib/extensions/openssl.so/ext/sources/crypto/ecdh/ech_lib.c +266 -0
  420. data/lib/extensions/openssl.so/ext/sources/crypto/ecdh/ech_locl.h +102 -0
  421. data/lib/extensions/openssl.so/ext/sources/crypto/ecdh/ech_ossl.c +215 -0
  422. data/lib/extensions/openssl.so/ext/sources/crypto/ecdsa/ecdsa.h +260 -0
  423. data/lib/extensions/openssl.so/ext/sources/crypto/ecdsa/ecs_asn1.c +69 -0
  424. data/lib/extensions/openssl.so/ext/sources/crypto/ecdsa/ecs_err.c +106 -0
  425. data/lib/extensions/openssl.so/ext/sources/crypto/ecdsa/ecs_lib.c +278 -0
  426. data/lib/extensions/openssl.so/ext/sources/crypto/ecdsa/ecs_locl.h +115 -0
  427. data/lib/extensions/openssl.so/ext/sources/crypto/ecdsa/ecs_ossl.c +483 -0
  428. data/lib/extensions/openssl.so/ext/sources/crypto/ecdsa/ecs_sign.c +106 -0
  429. data/lib/extensions/openssl.so/ext/sources/crypto/ecdsa/ecs_vrf.c +96 -0
  430. data/lib/extensions/openssl.so/ext/sources/crypto/engine/eng_all.c +135 -0
  431. data/lib/extensions/openssl.so/ext/sources/crypto/engine/eng_cnf.c +259 -0
  432. data/lib/extensions/openssl.so/ext/sources/crypto/engine/eng_cryptodev.c +1450 -0
  433. data/lib/extensions/openssl.so/ext/sources/crypto/engine/eng_ctrl.c +389 -0
  434. data/lib/extensions/openssl.so/ext/sources/crypto/engine/eng_dyn.c +548 -0
  435. data/lib/extensions/openssl.so/ext/sources/crypto/engine/eng_err.c +173 -0
  436. data/lib/extensions/openssl.so/ext/sources/crypto/engine/eng_fat.c +182 -0
  437. data/lib/extensions/openssl.so/ext/sources/crypto/engine/eng_init.c +154 -0
  438. data/lib/extensions/openssl.so/ext/sources/crypto/engine/eng_int.h +206 -0
  439. data/lib/extensions/openssl.so/ext/sources/crypto/engine/eng_lib.c +332 -0
  440. data/lib/extensions/openssl.so/ext/sources/crypto/engine/eng_list.c +433 -0
  441. data/lib/extensions/openssl.so/ext/sources/crypto/engine/eng_openssl.c +384 -0
  442. data/lib/extensions/openssl.so/ext/sources/crypto/engine/eng_pkey.c +196 -0
  443. data/lib/extensions/openssl.so/ext/sources/crypto/engine/eng_rdrand.c +142 -0
  444. data/lib/extensions/openssl.so/ext/sources/crypto/engine/eng_rsax.c +668 -0
  445. data/lib/extensions/openssl.so/ext/sources/crypto/engine/eng_table.c +351 -0
  446. data/lib/extensions/openssl.so/ext/sources/crypto/engine/engine.h +842 -0
  447. data/lib/extensions/openssl.so/ext/sources/crypto/engine/tb_asnmth.c +246 -0
  448. data/lib/extensions/openssl.so/ext/sources/crypto/engine/tb_cipher.c +143 -0
  449. data/lib/extensions/openssl.so/ext/sources/crypto/engine/tb_dh.c +118 -0
  450. data/lib/extensions/openssl.so/ext/sources/crypto/engine/tb_digest.c +143 -0
  451. data/lib/extensions/openssl.so/ext/sources/crypto/engine/tb_dsa.c +118 -0
  452. data/lib/extensions/openssl.so/ext/sources/crypto/engine/tb_ecdh.c +133 -0
  453. data/lib/extensions/openssl.so/ext/sources/crypto/engine/tb_ecdsa.c +118 -0
  454. data/lib/extensions/openssl.so/ext/sources/crypto/engine/tb_pkmeth.c +167 -0
  455. data/lib/extensions/openssl.so/ext/sources/crypto/engine/tb_rand.c +118 -0
  456. data/lib/extensions/openssl.so/ext/sources/crypto/engine/tb_rsa.c +118 -0
  457. data/lib/extensions/openssl.so/ext/sources/crypto/engine/tb_store.c +123 -0
  458. data/lib/extensions/openssl.so/ext/sources/crypto/err/err.c +1138 -0
  459. data/lib/extensions/openssl.so/ext/sources/crypto/err/err.h +386 -0
  460. data/lib/extensions/openssl.so/ext/sources/crypto/err/err_all.c +167 -0
  461. data/lib/extensions/openssl.so/ext/sources/crypto/err/err_prn.c +114 -0
  462. data/lib/extensions/openssl.so/ext/sources/crypto/evp/bio_b64.c +598 -0
  463. data/lib/extensions/openssl.so/ext/sources/crypto/evp/bio_enc.c +428 -0
  464. data/lib/extensions/openssl.so/ext/sources/crypto/evp/bio_md.c +275 -0
  465. data/lib/extensions/openssl.so/ext/sources/crypto/evp/bio_ok.c +624 -0
  466. data/lib/extensions/openssl.so/ext/sources/crypto/evp/c_all.c +90 -0
  467. data/lib/extensions/openssl.so/ext/sources/crypto/evp/c_allc.c +230 -0
  468. data/lib/extensions/openssl.so/ext/sources/crypto/evp/c_alld.c +114 -0
  469. data/lib/extensions/openssl.so/ext/sources/crypto/evp/digest.c +403 -0
  470. data/lib/extensions/openssl.so/ext/sources/crypto/evp/e_aes.c +1313 -0
  471. data/lib/extensions/openssl.so/ext/sources/crypto/evp/e_aes_cbc_hmac_sha1.c +406 -0
  472. data/lib/extensions/openssl.so/ext/sources/crypto/evp/e_bf.c +88 -0
  473. data/lib/extensions/openssl.so/ext/sources/crypto/evp/e_camellia.c +131 -0
  474. data/lib/extensions/openssl.so/ext/sources/crypto/evp/e_cast.c +90 -0
  475. data/lib/extensions/openssl.so/ext/sources/crypto/evp/e_des.c +224 -0
  476. data/lib/extensions/openssl.so/ext/sources/crypto/evp/e_des3.c +316 -0
  477. data/lib/extensions/openssl.so/ext/sources/crypto/evp/e_idea.c +118 -0
  478. data/lib/extensions/openssl.so/ext/sources/crypto/evp/e_null.c +104 -0
  479. data/lib/extensions/openssl.so/ext/sources/crypto/evp/e_old.c +125 -0
  480. data/lib/extensions/openssl.so/ext/sources/crypto/evp/e_rc2.c +238 -0
  481. data/lib/extensions/openssl.so/ext/sources/crypto/evp/e_rc4.c +137 -0
  482. data/lib/extensions/openssl.so/ext/sources/crypto/evp/e_rc4_hmac_md5.c +298 -0
  483. data/lib/extensions/openssl.so/ext/sources/crypto/evp/e_rc5.c +126 -0
  484. data/lib/extensions/openssl.so/ext/sources/crypto/evp/e_seed.c +83 -0
  485. data/lib/extensions/openssl.so/ext/sources/crypto/evp/e_xcbc_d.c +138 -0
  486. data/lib/extensions/openssl.so/ext/sources/crypto/evp/encode.c +445 -0
  487. data/lib/extensions/openssl.so/ext/sources/crypto/evp/evp.h +1402 -0
  488. data/lib/extensions/openssl.so/ext/sources/crypto/evp/evp_acnf.c +73 -0
  489. data/lib/extensions/openssl.so/ext/sources/crypto/evp/evp_enc.c +681 -0
  490. data/lib/extensions/openssl.so/ext/sources/crypto/evp/evp_err.c +234 -0
  491. data/lib/extensions/openssl.so/ext/sources/crypto/evp/evp_fips.c +113 -0
  492. data/lib/extensions/openssl.so/ext/sources/crypto/evp/evp_key.c +189 -0
  493. data/lib/extensions/openssl.so/ext/sources/crypto/evp/evp_lib.c +316 -0
  494. data/lib/extensions/openssl.so/ext/sources/crypto/evp/evp_locl.h +385 -0
  495. data/lib/extensions/openssl.so/ext/sources/crypto/evp/evp_pbe.c +316 -0
  496. data/lib/extensions/openssl.so/ext/sources/crypto/evp/evp_pkey.c +242 -0
  497. data/lib/extensions/openssl.so/ext/sources/crypto/evp/m_dss.c +101 -0
  498. data/lib/extensions/openssl.so/ext/sources/crypto/evp/m_dss1.c +103 -0
  499. data/lib/extensions/openssl.so/ext/sources/crypto/evp/m_ecdsa.c +151 -0
  500. data/lib/extensions/openssl.so/ext/sources/crypto/evp/m_md4.c +103 -0
  501. data/lib/extensions/openssl.so/ext/sources/crypto/evp/m_md5.c +102 -0
  502. data/lib/extensions/openssl.so/ext/sources/crypto/evp/m_mdc2.c +103 -0
  503. data/lib/extensions/openssl.so/ext/sources/crypto/evp/m_null.c +95 -0
  504. data/lib/extensions/openssl.so/ext/sources/crypto/evp/m_ripemd.c +102 -0
  505. data/lib/extensions/openssl.so/ext/sources/crypto/evp/m_sha.c +101 -0
  506. data/lib/extensions/openssl.so/ext/sources/crypto/evp/m_sha1.c +209 -0
  507. data/lib/extensions/openssl.so/ext/sources/crypto/evp/m_sigver.c +200 -0
  508. data/lib/extensions/openssl.so/ext/sources/crypto/evp/m_wp.c +43 -0
  509. data/lib/extensions/openssl.so/ext/sources/crypto/evp/names.c +206 -0
  510. data/lib/extensions/openssl.so/ext/sources/crypto/evp/p5_crpt.c +143 -0
  511. data/lib/extensions/openssl.so/ext/sources/crypto/evp/p5_crpt2.c +322 -0
  512. data/lib/extensions/openssl.so/ext/sources/crypto/evp/p_dec.c +87 -0
  513. data/lib/extensions/openssl.so/ext/sources/crypto/evp/p_enc.c +86 -0
  514. data/lib/extensions/openssl.so/ext/sources/crypto/evp/p_lib.c +469 -0
  515. data/lib/extensions/openssl.so/ext/sources/crypto/evp/p_open.c +128 -0
  516. data/lib/extensions/openssl.so/ext/sources/crypto/evp/p_seal.c +116 -0
  517. data/lib/extensions/openssl.so/ext/sources/crypto/evp/p_sign.c +139 -0
  518. data/lib/extensions/openssl.so/ext/sources/crypto/evp/p_verify.c +121 -0
  519. data/lib/extensions/openssl.so/ext/sources/crypto/evp/pmeth_fn.c +368 -0
  520. data/lib/extensions/openssl.so/ext/sources/crypto/evp/pmeth_gn.c +221 -0
  521. data/lib/extensions/openssl.so/ext/sources/crypto/evp/pmeth_lib.c +593 -0
  522. data/lib/extensions/openssl.so/ext/sources/crypto/ex_data.c +636 -0
  523. data/lib/extensions/openssl.so/ext/sources/crypto/fips_err.h +209 -0
  524. data/lib/extensions/openssl.so/ext/sources/crypto/fips_ers.c +7 -0
  525. data/lib/extensions/openssl.so/ext/sources/crypto/hmac/hm_ameth.c +167 -0
  526. data/lib/extensions/openssl.so/ext/sources/crypto/hmac/hm_pmeth.c +271 -0
  527. data/lib/extensions/openssl.so/ext/sources/crypto/hmac/hmac.c +251 -0
  528. data/lib/extensions/openssl.so/ext/sources/crypto/hmac/hmac.h +110 -0
  529. data/lib/extensions/openssl.so/ext/sources/crypto/idea/i_cbc.c +168 -0
  530. data/lib/extensions/openssl.so/ext/sources/crypto/idea/i_cfb64.c +122 -0
  531. data/lib/extensions/openssl.so/ext/sources/crypto/idea/i_ecb.c +85 -0
  532. data/lib/extensions/openssl.so/ext/sources/crypto/idea/i_ofb64.c +111 -0
  533. data/lib/extensions/openssl.so/ext/sources/crypto/idea/i_skey.c +164 -0
  534. data/lib/extensions/openssl.so/ext/sources/crypto/idea/idea.h +103 -0
  535. data/lib/extensions/openssl.so/ext/sources/crypto/idea/idea_lcl.h +215 -0
  536. data/lib/extensions/openssl.so/ext/sources/crypto/krb5/krb5_asn.c +167 -0
  537. data/lib/extensions/openssl.so/ext/sources/crypto/krb5/krb5_asn.h +256 -0
  538. data/lib/extensions/openssl.so/ext/sources/crypto/lhash/lh_stats.c +248 -0
  539. data/lib/extensions/openssl.so/ext/sources/crypto/lhash/lhash.c +475 -0
  540. data/lib/extensions/openssl.so/ext/sources/crypto/lhash/lhash.h +241 -0
  541. data/lib/extensions/openssl.so/ext/sources/crypto/md32_common.h +415 -0
  542. data/lib/extensions/openssl.so/ext/sources/crypto/md4/md4.h +120 -0
  543. data/lib/extensions/openssl.so/ext/sources/crypto/md4/md4_dgst.c +168 -0
  544. data/lib/extensions/openssl.so/ext/sources/crypto/md4/md4_locl.h +112 -0
  545. data/lib/extensions/openssl.so/ext/sources/crypto/md4/md4_one.c +97 -0
  546. data/lib/extensions/openssl.so/ext/sources/crypto/md5/md5.h +120 -0
  547. data/lib/extensions/openssl.so/ext/sources/crypto/md5/md5_dgst.c +185 -0
  548. data/lib/extensions/openssl.so/ext/sources/crypto/md5/md5_locl.h +130 -0
  549. data/lib/extensions/openssl.so/ext/sources/crypto/md5/md5_one.c +97 -0
  550. data/lib/extensions/openssl.so/ext/sources/crypto/mdc2/mdc2.h +98 -0
  551. data/lib/extensions/openssl.so/ext/sources/crypto/mdc2/mdc2_one.c +76 -0
  552. data/lib/extensions/openssl.so/ext/sources/crypto/mdc2/mdc2dgst.c +200 -0
  553. data/lib/extensions/openssl.so/ext/sources/crypto/mem.c +420 -0
  554. data/lib/extensions/openssl.so/ext/sources/crypto/mem_clr.c +77 -0
  555. data/lib/extensions/openssl.so/ext/sources/crypto/mem_dbg.c +874 -0
  556. data/lib/extensions/openssl.so/ext/sources/crypto/modes/cbc128.c +202 -0
  557. data/lib/extensions/openssl.so/ext/sources/crypto/modes/ccm128.c +441 -0
  558. data/lib/extensions/openssl.so/ext/sources/crypto/modes/cfb128.c +242 -0
  559. data/lib/extensions/openssl.so/ext/sources/crypto/modes/ctr128.c +252 -0
  560. data/lib/extensions/openssl.so/ext/sources/crypto/modes/cts128.c +465 -0
  561. data/lib/extensions/openssl.so/ext/sources/crypto/modes/gcm128.c +1757 -0
  562. data/lib/extensions/openssl.so/ext/sources/crypto/modes/modes.h +135 -0
  563. data/lib/extensions/openssl.so/ext/sources/crypto/modes/modes_lcl.h +131 -0
  564. data/lib/extensions/openssl.so/ext/sources/crypto/modes/ofb128.c +121 -0
  565. data/lib/extensions/openssl.so/ext/sources/crypto/modes/xts128.c +187 -0
  566. data/lib/extensions/openssl.so/ext/sources/crypto/o_dir.c +83 -0
  567. data/lib/extensions/openssl.so/ext/sources/crypto/o_dir.h +53 -0
  568. data/lib/extensions/openssl.so/ext/sources/crypto/o_fips.c +96 -0
  569. data/lib/extensions/openssl.so/ext/sources/crypto/o_init.c +82 -0
  570. data/lib/extensions/openssl.so/ext/sources/crypto/o_str.c +111 -0
  571. data/lib/extensions/openssl.so/ext/sources/crypto/o_str.h +68 -0
  572. data/lib/extensions/openssl.so/ext/sources/crypto/o_time.c +372 -0
  573. data/lib/extensions/openssl.so/ext/sources/crypto/o_time.h +67 -0
  574. data/lib/extensions/openssl.so/ext/sources/crypto/objects/o_names.c +372 -0
  575. data/lib/extensions/openssl.so/ext/sources/crypto/objects/obj_dat.c +810 -0
  576. data/lib/extensions/openssl.so/ext/sources/crypto/objects/obj_dat.h +5102 -0
  577. data/lib/extensions/openssl.so/ext/sources/crypto/objects/obj_err.c +102 -0
  578. data/lib/extensions/openssl.so/ext/sources/crypto/objects/obj_lib.c +129 -0
  579. data/lib/extensions/openssl.so/ext/sources/crypto/objects/obj_mac.h +4032 -0
  580. data/lib/extensions/openssl.so/ext/sources/crypto/objects/obj_xref.c +234 -0
  581. data/lib/extensions/openssl.so/ext/sources/crypto/objects/obj_xref.h +77 -0
  582. data/lib/extensions/openssl.so/ext/sources/crypto/objects/objects.h +1138 -0
  583. data/lib/extensions/openssl.so/ext/sources/crypto/ocsp/ocsp.h +623 -0
  584. data/lib/extensions/openssl.so/ext/sources/crypto/ocsp/ocsp_asn.c +182 -0
  585. data/lib/extensions/openssl.so/ext/sources/crypto/ocsp/ocsp_cl.c +371 -0
  586. data/lib/extensions/openssl.so/ext/sources/crypto/ocsp/ocsp_err.c +142 -0
  587. data/lib/extensions/openssl.so/ext/sources/crypto/ocsp/ocsp_ext.c +518 -0
  588. data/lib/extensions/openssl.so/ext/sources/crypto/ocsp/ocsp_ht.c +504 -0
  589. data/lib/extensions/openssl.so/ext/sources/crypto/ocsp/ocsp_lib.c +266 -0
  590. data/lib/extensions/openssl.so/ext/sources/crypto/ocsp/ocsp_prn.c +290 -0
  591. data/lib/extensions/openssl.so/ext/sources/crypto/ocsp/ocsp_srv.c +264 -0
  592. data/lib/extensions/openssl.so/ext/sources/crypto/ocsp/ocsp_vfy.c +446 -0
  593. data/lib/extensions/openssl.so/ext/sources/crypto/opensslconf.h +230 -0
  594. data/lib/extensions/openssl.so/ext/sources/crypto/opensslconf.h.in +154 -0
  595. data/lib/extensions/openssl.so/ext/sources/crypto/opensslv.h +89 -0
  596. data/lib/extensions/openssl.so/ext/sources/crypto/ossl_typ.h +202 -0
  597. data/lib/extensions/openssl.so/ext/sources/crypto/pem/pem.h +641 -0
  598. data/lib/extensions/openssl.so/ext/sources/crypto/pem/pem2.h +70 -0
  599. data/lib/extensions/openssl.so/ext/sources/crypto/pem/pem_all.c +296 -0
  600. data/lib/extensions/openssl.so/ext/sources/crypto/pem/pem_err.c +161 -0
  601. data/lib/extensions/openssl.so/ext/sources/crypto/pem/pem_info.c +405 -0
  602. data/lib/extensions/openssl.so/ext/sources/crypto/pem/pem_lib.c +852 -0
  603. data/lib/extensions/openssl.so/ext/sources/crypto/pem/pem_oth.c +86 -0
  604. data/lib/extensions/openssl.so/ext/sources/crypto/pem/pem_pk8.c +242 -0
  605. data/lib/extensions/openssl.so/ext/sources/crypto/pem/pem_pkey.c +242 -0
  606. data/lib/extensions/openssl.so/ext/sources/crypto/pem/pem_seal.c +189 -0
  607. data/lib/extensions/openssl.so/ext/sources/crypto/pem/pem_sign.c +102 -0
  608. data/lib/extensions/openssl.so/ext/sources/crypto/pem/pem_x509.c +68 -0
  609. data/lib/extensions/openssl.so/ext/sources/crypto/pem/pem_xaux.c +68 -0
  610. data/lib/extensions/openssl.so/ext/sources/crypto/pem/pvkfmt.c +950 -0
  611. data/lib/extensions/openssl.so/ext/sources/crypto/pkcs12/p12_add.c +240 -0
  612. data/lib/extensions/openssl.so/ext/sources/crypto/pkcs12/p12_asn.c +125 -0
  613. data/lib/extensions/openssl.so/ext/sources/crypto/pkcs12/p12_attr.c +145 -0
  614. data/lib/extensions/openssl.so/ext/sources/crypto/pkcs12/p12_crpt.c +112 -0
  615. data/lib/extensions/openssl.so/ext/sources/crypto/pkcs12/p12_crt.c +359 -0
  616. data/lib/extensions/openssl.so/ext/sources/crypto/pkcs12/p12_decr.c +184 -0
  617. data/lib/extensions/openssl.so/ext/sources/crypto/pkcs12/p12_init.c +92 -0
  618. data/lib/extensions/openssl.so/ext/sources/crypto/pkcs12/p12_key.c +219 -0
  619. data/lib/extensions/openssl.so/ext/sources/crypto/pkcs12/p12_kiss.c +302 -0
  620. data/lib/extensions/openssl.so/ext/sources/crypto/pkcs12/p12_mutl.c +190 -0
  621. data/lib/extensions/openssl.so/ext/sources/crypto/pkcs12/p12_npas.c +225 -0
  622. data/lib/extensions/openssl.so/ext/sources/crypto/pkcs12/p12_p8d.c +68 -0
  623. data/lib/extensions/openssl.so/ext/sources/crypto/pkcs12/p12_p8e.c +97 -0
  624. data/lib/extensions/openssl.so/ext/sources/crypto/pkcs12/p12_utl.c +146 -0
  625. data/lib/extensions/openssl.so/ext/sources/crypto/pkcs12/pk12err.c +144 -0
  626. data/lib/extensions/openssl.so/ext/sources/crypto/pkcs12/pkcs12.h +331 -0
  627. data/lib/extensions/openssl.so/ext/sources/crypto/pkcs7/bio_pk7.c +69 -0
  628. data/lib/extensions/openssl.so/ext/sources/crypto/pkcs7/pk7_asn1.c +247 -0
  629. data/lib/extensions/openssl.so/ext/sources/crypto/pkcs7/pk7_attr.c +165 -0
  630. data/lib/extensions/openssl.so/ext/sources/crypto/pkcs7/pk7_doit.c +1299 -0
  631. data/lib/extensions/openssl.so/ext/sources/crypto/pkcs7/pk7_lib.c +665 -0
  632. data/lib/extensions/openssl.so/ext/sources/crypto/pkcs7/pk7_mime.c +97 -0
  633. data/lib/extensions/openssl.so/ext/sources/crypto/pkcs7/pk7_smime.c +606 -0
  634. data/lib/extensions/openssl.so/ext/sources/crypto/pkcs7/pkcs7.h +499 -0
  635. data/lib/extensions/openssl.so/ext/sources/crypto/pkcs7/pkcs7err.c +187 -0
  636. data/lib/extensions/openssl.so/ext/sources/crypto/pqueue/pqueue.c +252 -0
  637. data/lib/extensions/openssl.so/ext/sources/crypto/pqueue/pqueue.h +94 -0
  638. data/lib/extensions/openssl.so/ext/sources/crypto/rand/md_rand.c +592 -0
  639. data/lib/extensions/openssl.so/ext/sources/crypto/rand/rand.h +149 -0
  640. data/lib/extensions/openssl.so/ext/sources/crypto/rand/rand_egd.c +303 -0
  641. data/lib/extensions/openssl.so/ext/sources/crypto/rand/rand_err.c +100 -0
  642. data/lib/extensions/openssl.so/ext/sources/crypto/rand/rand_lcl.h +158 -0
  643. data/lib/extensions/openssl.so/ext/sources/crypto/rand/rand_lib.c +295 -0
  644. data/lib/extensions/openssl.so/ext/sources/crypto/rand/rand_nw.c +183 -0
  645. data/lib/extensions/openssl.so/ext/sources/crypto/rand/rand_os2.c +153 -0
  646. data/lib/extensions/openssl.so/ext/sources/crypto/rand/rand_unix.c +431 -0
  647. data/lib/extensions/openssl.so/ext/sources/crypto/rand/rand_win.c +807 -0
  648. data/lib/extensions/openssl.so/ext/sources/crypto/rand/randfile.c +326 -0
  649. data/lib/extensions/openssl.so/ext/sources/crypto/rc2/rc2.h +103 -0
  650. data/lib/extensions/openssl.so/ext/sources/crypto/rc2/rc2_cbc.c +226 -0
  651. data/lib/extensions/openssl.so/ext/sources/crypto/rc2/rc2_ecb.c +88 -0
  652. data/lib/extensions/openssl.so/ext/sources/crypto/rc2/rc2_locl.h +156 -0
  653. data/lib/extensions/openssl.so/ext/sources/crypto/rc2/rc2_skey.c +153 -0
  654. data/lib/extensions/openssl.so/ext/sources/crypto/rc2/rc2cfb64.c +122 -0
  655. data/lib/extensions/openssl.so/ext/sources/crypto/rc2/rc2ofb64.c +111 -0
  656. data/lib/extensions/openssl.so/ext/sources/crypto/rc4/rc4.h +90 -0
  657. data/lib/extensions/openssl.so/ext/sources/crypto/rc4/rc4_enc.c +315 -0
  658. data/lib/extensions/openssl.so/ext/sources/crypto/rc4/rc4_locl.h +5 -0
  659. data/lib/extensions/openssl.so/ext/sources/crypto/rc4/rc4_skey.c +116 -0
  660. data/lib/extensions/openssl.so/ext/sources/crypto/rc4/rc4_utl.c +62 -0
  661. data/lib/extensions/openssl.so/ext/sources/crypto/ripemd/ripemd.h +107 -0
  662. data/lib/extensions/openssl.so/ext/sources/crypto/ripemd/rmd_dgst.c +292 -0
  663. data/lib/extensions/openssl.so/ext/sources/crypto/ripemd/rmd_locl.h +150 -0
  664. data/lib/extensions/openssl.so/ext/sources/crypto/ripemd/rmd_one.c +78 -0
  665. data/lib/extensions/openssl.so/ext/sources/crypto/ripemd/rmdconst.h +399 -0
  666. data/lib/extensions/openssl.so/ext/sources/crypto/rsa/rsa.h +582 -0
  667. data/lib/extensions/openssl.so/ext/sources/crypto/rsa/rsa_ameth.c +698 -0
  668. data/lib/extensions/openssl.so/ext/sources/crypto/rsa/rsa_asn1.c +121 -0
  669. data/lib/extensions/openssl.so/ext/sources/crypto/rsa/rsa_chk.c +184 -0
  670. data/lib/extensions/openssl.so/ext/sources/crypto/rsa/rsa_crpt.c +257 -0
  671. data/lib/extensions/openssl.so/ext/sources/crypto/rsa/rsa_depr.c +101 -0
  672. data/lib/extensions/openssl.so/ext/sources/crypto/rsa/rsa_eay.c +915 -0
  673. data/lib/extensions/openssl.so/ext/sources/crypto/rsa/rsa_err.c +209 -0
  674. data/lib/extensions/openssl.so/ext/sources/crypto/rsa/rsa_gen.c +234 -0
  675. data/lib/extensions/openssl.so/ext/sources/crypto/rsa/rsa_lib.c +333 -0
  676. data/lib/extensions/openssl.so/ext/sources/crypto/rsa/rsa_locl.h +4 -0
  677. data/lib/extensions/openssl.so/ext/sources/crypto/rsa/rsa_none.c +98 -0
  678. data/lib/extensions/openssl.so/ext/sources/crypto/rsa/rsa_null.c +151 -0
  679. data/lib/extensions/openssl.so/ext/sources/crypto/rsa/rsa_oaep.c +235 -0
  680. data/lib/extensions/openssl.so/ext/sources/crypto/rsa/rsa_pk1.c +224 -0
  681. data/lib/extensions/openssl.so/ext/sources/crypto/rsa/rsa_pmeth.c +723 -0
  682. data/lib/extensions/openssl.so/ext/sources/crypto/rsa/rsa_prn.c +93 -0
  683. data/lib/extensions/openssl.so/ext/sources/crypto/rsa/rsa_pss.c +300 -0
  684. data/lib/extensions/openssl.so/ext/sources/crypto/rsa/rsa_saos.c +150 -0
  685. data/lib/extensions/openssl.so/ext/sources/crypto/rsa/rsa_sign.c +318 -0
  686. data/lib/extensions/openssl.so/ext/sources/crypto/rsa/rsa_ssl.c +154 -0
  687. data/lib/extensions/openssl.so/ext/sources/crypto/rsa/rsa_x931.c +177 -0
  688. data/lib/extensions/openssl.so/ext/sources/crypto/seed/seed.c +336 -0
  689. data/lib/extensions/openssl.so/ext/sources/crypto/seed/seed.h +139 -0
  690. data/lib/extensions/openssl.so/ext/sources/crypto/seed/seed_cbc.c +63 -0
  691. data/lib/extensions/openssl.so/ext/sources/crypto/seed/seed_cfb.c +116 -0
  692. data/lib/extensions/openssl.so/ext/sources/crypto/seed/seed_ecb.c +60 -0
  693. data/lib/extensions/openssl.so/ext/sources/crypto/seed/seed_locl.h +116 -0
  694. data/lib/extensions/openssl.so/ext/sources/crypto/seed/seed_ofb.c +116 -0
  695. data/lib/extensions/openssl.so/ext/sources/crypto/sha/sha.h +214 -0
  696. data/lib/extensions/openssl.so/ext/sources/crypto/sha/sha1_one.c +78 -0
  697. data/lib/extensions/openssl.so/ext/sources/crypto/sha/sha1dgst.c +75 -0
  698. data/lib/extensions/openssl.so/ext/sources/crypto/sha/sha256.c +282 -0
  699. data/lib/extensions/openssl.so/ext/sources/crypto/sha/sha512.c +597 -0
  700. data/lib/extensions/openssl.so/ext/sources/crypto/sha/sha_dgst.c +75 -0
  701. data/lib/extensions/openssl.so/ext/sources/crypto/sha/sha_locl.h +441 -0
  702. data/lib/extensions/openssl.so/ext/sources/crypto/sha/sha_one.c +78 -0
  703. data/lib/extensions/openssl.so/ext/sources/crypto/srp/srp.h +172 -0
  704. data/lib/extensions/openssl.so/ext/sources/crypto/srp/srp_grps.h +517 -0
  705. data/lib/extensions/openssl.so/ext/sources/crypto/srp/srp_lcl.h +83 -0
  706. data/lib/extensions/openssl.so/ext/sources/crypto/srp/srp_lib.c +357 -0
  707. data/lib/extensions/openssl.so/ext/sources/crypto/srp/srp_vfy.c +657 -0
  708. data/lib/extensions/openssl.so/ext/sources/crypto/stack/safestack.h +2663 -0
  709. data/lib/extensions/openssl.so/ext/sources/crypto/stack/stack.c +334 -0
  710. data/lib/extensions/openssl.so/ext/sources/crypto/stack/stack.h +108 -0
  711. data/lib/extensions/openssl.so/ext/sources/crypto/symhacks.h +477 -0
  712. data/lib/extensions/openssl.so/ext/sources/crypto/ts/ts.h +858 -0
  713. data/lib/extensions/openssl.so/ext/sources/crypto/ts/ts_asn1.c +322 -0
  714. data/lib/extensions/openssl.so/ext/sources/crypto/ts/ts_conf.c +507 -0
  715. data/lib/extensions/openssl.so/ext/sources/crypto/ts/ts_err.c +179 -0
  716. data/lib/extensions/openssl.so/ext/sources/crypto/ts/ts_lib.c +145 -0
  717. data/lib/extensions/openssl.so/ext/sources/crypto/ts/ts_req_print.c +102 -0
  718. data/lib/extensions/openssl.so/ext/sources/crypto/ts/ts_req_utils.c +234 -0
  719. data/lib/extensions/openssl.so/ext/sources/crypto/ts/ts_rsp_print.c +287 -0
  720. data/lib/extensions/openssl.so/ext/sources/crypto/ts/ts_rsp_sign.c +1020 -0
  721. data/lib/extensions/openssl.so/ext/sources/crypto/ts/ts_rsp_utils.c +409 -0
  722. data/lib/extensions/openssl.so/ext/sources/crypto/ts/ts_rsp_verify.c +728 -0
  723. data/lib/extensions/openssl.so/ext/sources/crypto/ts/ts_verify_ctx.c +159 -0
  724. data/lib/extensions/openssl.so/ext/sources/crypto/txt_db/txt_db.c +388 -0
  725. data/lib/extensions/openssl.so/ext/sources/crypto/txt_db/txt_db.h +112 -0
  726. data/lib/extensions/openssl.so/ext/sources/crypto/ui/ui.h +383 -0
  727. data/lib/extensions/openssl.so/ext/sources/crypto/ui/ui_compat.c +67 -0
  728. data/lib/extensions/openssl.so/ext/sources/crypto/ui/ui_compat.h +83 -0
  729. data/lib/extensions/openssl.so/ext/sources/crypto/ui/ui_err.c +112 -0
  730. data/lib/extensions/openssl.so/ext/sources/crypto/ui/ui_lib.c +924 -0
  731. data/lib/extensions/openssl.so/ext/sources/crypto/ui/ui_locl.h +153 -0
  732. data/lib/extensions/openssl.so/ext/sources/crypto/ui/ui_openssl.c +712 -0
  733. data/lib/extensions/openssl.so/ext/sources/crypto/ui/ui_util.c +91 -0
  734. data/lib/extensions/openssl.so/ext/sources/crypto/uid.c +89 -0
  735. data/lib/extensions/openssl.so/ext/sources/crypto/vms_rms.h +51 -0
  736. data/lib/extensions/openssl.so/ext/sources/crypto/whrlpool/whrlpool.h +41 -0
  737. data/lib/extensions/openssl.so/ext/sources/crypto/whrlpool/wp_block.c +655 -0
  738. data/lib/extensions/openssl.so/ext/sources/crypto/whrlpool/wp_dgst.c +265 -0
  739. data/lib/extensions/openssl.so/ext/sources/crypto/whrlpool/wp_locl.h +3 -0
  740. data/lib/extensions/openssl.so/ext/sources/crypto/x509/by_dir.c +482 -0
  741. data/lib/extensions/openssl.so/ext/sources/crypto/x509/by_file.c +300 -0
  742. data/lib/extensions/openssl.so/ext/sources/crypto/x509/x509.h +1297 -0
  743. data/lib/extensions/openssl.so/ext/sources/crypto/x509/x509_att.c +359 -0
  744. data/lib/extensions/openssl.so/ext/sources/crypto/x509/x509_cmp.c +344 -0
  745. data/lib/extensions/openssl.so/ext/sources/crypto/x509/x509_d2.c +107 -0
  746. data/lib/extensions/openssl.so/ext/sources/crypto/x509/x509_def.c +81 -0
  747. data/lib/extensions/openssl.so/ext/sources/crypto/x509/x509_err.c +164 -0
  748. data/lib/extensions/openssl.so/ext/sources/crypto/x509/x509_ext.c +210 -0
  749. data/lib/extensions/openssl.so/ext/sources/crypto/x509/x509_lu.c +716 -0
  750. data/lib/extensions/openssl.so/ext/sources/crypto/x509/x509_obj.c +226 -0
  751. data/lib/extensions/openssl.so/ext/sources/crypto/x509/x509_r2x.c +114 -0
  752. data/lib/extensions/openssl.so/ext/sources/crypto/x509/x509_req.c +316 -0
  753. data/lib/extensions/openssl.so/ext/sources/crypto/x509/x509_set.c +150 -0
  754. data/lib/extensions/openssl.so/ext/sources/crypto/x509/x509_trs.c +288 -0
  755. data/lib/extensions/openssl.so/ext/sources/crypto/x509/x509_txt.c +193 -0
  756. data/lib/extensions/openssl.so/ext/sources/crypto/x509/x509_v3.c +274 -0
  757. data/lib/extensions/openssl.so/ext/sources/crypto/x509/x509_vfy.c +2214 -0
  758. data/lib/extensions/openssl.so/ext/sources/crypto/x509/x509_vfy.h +567 -0
  759. data/lib/extensions/openssl.so/ext/sources/crypto/x509/x509_vpm.c +438 -0
  760. data/lib/extensions/openssl.so/ext/sources/crypto/x509/x509cset.c +170 -0
  761. data/lib/extensions/openssl.so/ext/sources/crypto/x509/x509name.c +383 -0
  762. data/lib/extensions/openssl.so/ext/sources/crypto/x509/x509rset.c +83 -0
  763. data/lib/extensions/openssl.so/ext/sources/crypto/x509/x509spki.c +121 -0
  764. data/lib/extensions/openssl.so/ext/sources/crypto/x509/x509type.c +131 -0
  765. data/lib/extensions/openssl.so/ext/sources/crypto/x509/x_all.c +535 -0
  766. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/ext_dat.h +132 -0
  767. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/pcy_cache.c +286 -0
  768. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/pcy_data.c +135 -0
  769. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/pcy_int.h +212 -0
  770. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/pcy_lib.c +167 -0
  771. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/pcy_map.c +132 -0
  772. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/pcy_node.c +197 -0
  773. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/pcy_tree.c +872 -0
  774. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_addr.c +1338 -0
  775. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_akey.c +208 -0
  776. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_akeya.c +72 -0
  777. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_alt.c +614 -0
  778. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_asid.c +890 -0
  779. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_bcons.c +124 -0
  780. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_bitst.c +141 -0
  781. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_conf.c +525 -0
  782. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_cpols.c +457 -0
  783. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_crld.c +616 -0
  784. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_enum.c +97 -0
  785. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_extku.c +144 -0
  786. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_genn.c +252 -0
  787. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_ia5.c +116 -0
  788. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_info.c +193 -0
  789. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_int.c +89 -0
  790. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_lib.c +309 -0
  791. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_ncons.c +505 -0
  792. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_ocsp.c +289 -0
  793. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_pci.c +328 -0
  794. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_pcia.c +55 -0
  795. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_pcons.c +140 -0
  796. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_pku.c +108 -0
  797. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_pmaps.c +155 -0
  798. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_prn.c +234 -0
  799. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_purp.c +767 -0
  800. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_skey.c +145 -0
  801. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_sxnet.c +262 -0
  802. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3_utl.c +874 -0
  803. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/v3err.c +226 -0
  804. data/lib/extensions/openssl.so/ext/sources/crypto/x509v3/x509v3.h +1007 -0
  805. data/lib/extensions/openssl.so/ext/sources/e_os.h +735 -0
  806. data/lib/extensions/openssl.so/ext/sources/e_os2.h +315 -0
  807. data/lib/extensions/openssl.so/ext/sources/engines/ccgost/e_gost_err.c +212 -0
  808. data/lib/extensions/openssl.so/ext/sources/engines/ccgost/e_gost_err.h +156 -0
  809. data/lib/extensions/openssl.so/ext/sources/engines/ccgost/gost2001.c +343 -0
  810. data/lib/extensions/openssl.so/ext/sources/engines/ccgost/gost2001_keyx.c +308 -0
  811. data/lib/extensions/openssl.so/ext/sources/engines/ccgost/gost2001_keyx.h +10 -0
  812. data/lib/extensions/openssl.so/ext/sources/engines/ccgost/gost89.c +409 -0
  813. data/lib/extensions/openssl.so/ext/sources/engines/ccgost/gost89.h +96 -0
  814. data/lib/extensions/openssl.so/ext/sources/engines/ccgost/gost94_keyx.c +291 -0
  815. data/lib/extensions/openssl.so/ext/sources/engines/ccgost/gost_ameth.c +945 -0
  816. data/lib/extensions/openssl.so/ext/sources/engines/ccgost/gost_asn1.c +55 -0
  817. data/lib/extensions/openssl.so/ext/sources/engines/ccgost/gost_crypt.c +617 -0
  818. data/lib/extensions/openssl.so/ext/sources/engines/ccgost/gost_ctl.c +89 -0
  819. data/lib/extensions/openssl.so/ext/sources/engines/ccgost/gost_eng.c +273 -0
  820. data/lib/extensions/openssl.so/ext/sources/engines/ccgost/gost_keywrap.c +109 -0
  821. data/lib/extensions/openssl.so/ext/sources/engines/ccgost/gost_keywrap.h +56 -0
  822. data/lib/extensions/openssl.so/ext/sources/engines/ccgost/gost_lcl.h +221 -0
  823. data/lib/extensions/openssl.so/ext/sources/engines/ccgost/gost_md.c +75 -0
  824. data/lib/extensions/openssl.so/ext/sources/engines/ccgost/gost_params.c +198 -0
  825. data/lib/extensions/openssl.so/ext/sources/engines/ccgost/gost_params.h +34 -0
  826. data/lib/extensions/openssl.so/ext/sources/engines/ccgost/gost_pmeth.c +628 -0
  827. data/lib/extensions/openssl.so/ext/sources/engines/ccgost/gost_sign.c +321 -0
  828. data/lib/extensions/openssl.so/ext/sources/engines/ccgost/gosthash.c +255 -0
  829. data/lib/extensions/openssl.so/ext/sources/engines/ccgost/gosthash.h +48 -0
  830. data/lib/extensions/openssl.so/ext/sources/engines/e_4758cca.c +987 -0
  831. data/lib/extensions/openssl.so/ext/sources/engines/e_4758cca_err.c +153 -0
  832. data/lib/extensions/openssl.so/ext/sources/engines/e_4758cca_err.h +97 -0
  833. data/lib/extensions/openssl.so/ext/sources/engines/e_aep.c +1139 -0
  834. data/lib/extensions/openssl.so/ext/sources/engines/e_aep_err.c +161 -0
  835. data/lib/extensions/openssl.so/ext/sources/engines/e_aep_err.h +105 -0
  836. data/lib/extensions/openssl.so/ext/sources/engines/e_atalla.c +607 -0
  837. data/lib/extensions/openssl.so/ext/sources/engines/e_atalla_err.c +149 -0
  838. data/lib/extensions/openssl.so/ext/sources/engines/e_atalla_err.h +93 -0
  839. data/lib/extensions/openssl.so/ext/sources/engines/e_capi.c +1913 -0
  840. data/lib/extensions/openssl.so/ext/sources/engines/e_capi_err.c +184 -0
  841. data/lib/extensions/openssl.so/ext/sources/engines/e_capi_err.h +128 -0
  842. data/lib/extensions/openssl.so/ext/sources/engines/e_chil.c +1356 -0
  843. data/lib/extensions/openssl.so/ext/sources/engines/e_chil_err.c +160 -0
  844. data/lib/extensions/openssl.so/ext/sources/engines/e_chil_err.h +104 -0
  845. data/lib/extensions/openssl.so/ext/sources/engines/e_cswift.c +1129 -0
  846. data/lib/extensions/openssl.so/ext/sources/engines/e_cswift_err.c +154 -0
  847. data/lib/extensions/openssl.so/ext/sources/engines/e_cswift_err.h +98 -0
  848. data/lib/extensions/openssl.so/ext/sources/engines/e_gmp.c +480 -0
  849. data/lib/extensions/openssl.so/ext/sources/engines/e_gmp_err.c +141 -0
  850. data/lib/extensions/openssl.so/ext/sources/engines/e_gmp_err.h +85 -0
  851. data/lib/extensions/openssl.so/ext/sources/engines/e_nuron.c +434 -0
  852. data/lib/extensions/openssl.so/ext/sources/engines/e_nuron_err.c +146 -0
  853. data/lib/extensions/openssl.so/ext/sources/engines/e_nuron_err.h +90 -0
  854. data/lib/extensions/openssl.so/ext/sources/engines/e_padlock.c +1239 -0
  855. data/lib/extensions/openssl.so/ext/sources/engines/e_sureware.c +1055 -0
  856. data/lib/extensions/openssl.so/ext/sources/engines/e_sureware_err.c +158 -0
  857. data/lib/extensions/openssl.so/ext/sources/engines/e_sureware_err.h +102 -0
  858. data/lib/extensions/openssl.so/ext/sources/engines/e_ubsec.c +1069 -0
  859. data/lib/extensions/openssl.so/ext/sources/engines/e_ubsec_err.c +157 -0
  860. data/lib/extensions/openssl.so/ext/sources/engines/e_ubsec_err.h +101 -0
  861. data/lib/extensions/openssl.so/ext/sources/engines/vendor_defns/aep.h +178 -0
  862. data/lib/extensions/openssl.so/ext/sources/engines/vendor_defns/atalla.h +48 -0
  863. data/lib/extensions/openssl.so/ext/sources/engines/vendor_defns/cswift.h +234 -0
  864. data/lib/extensions/openssl.so/ext/sources/engines/vendor_defns/hw_4758_cca.h +149 -0
  865. data/lib/extensions/openssl.so/ext/sources/engines/vendor_defns/hw_ubsec.h +100 -0
  866. data/lib/extensions/openssl.so/ext/sources/engines/vendor_defns/hwcryptohook.h +486 -0
  867. data/lib/extensions/openssl.so/ext/sources/engines/vendor_defns/sureware.h +239 -0
  868. data/lib/extensions/openssl.so/ext/sources/include/openssl/aes.h +1 -0
  869. data/lib/extensions/openssl.so/ext/sources/include/openssl/asn1.h +1 -0
  870. data/lib/extensions/openssl.so/ext/sources/include/openssl/asn1_mac.h +1 -0
  871. data/lib/extensions/openssl.so/ext/sources/include/openssl/asn1t.h +1 -0
  872. data/lib/extensions/openssl.so/ext/sources/include/openssl/bio.h +1 -0
  873. data/lib/extensions/openssl.so/ext/sources/include/openssl/blowfish.h +1 -0
  874. data/lib/extensions/openssl.so/ext/sources/include/openssl/bn.h +1 -0
  875. data/lib/extensions/openssl.so/ext/sources/include/openssl/buffer.h +1 -0
  876. data/lib/extensions/openssl.so/ext/sources/include/openssl/camellia.h +1 -0
  877. data/lib/extensions/openssl.so/ext/sources/include/openssl/cast.h +1 -0
  878. data/lib/extensions/openssl.so/ext/sources/include/openssl/cmac.h +1 -0
  879. data/lib/extensions/openssl.so/ext/sources/include/openssl/cms.h +1 -0
  880. data/lib/extensions/openssl.so/ext/sources/include/openssl/comp.h +1 -0
  881. data/lib/extensions/openssl.so/ext/sources/include/openssl/conf.h +1 -0
  882. data/lib/extensions/openssl.so/ext/sources/include/openssl/conf_api.h +1 -0
  883. data/lib/extensions/openssl.so/ext/sources/include/openssl/crypto.h +1 -0
  884. data/lib/extensions/openssl.so/ext/sources/include/openssl/des.h +1 -0
  885. data/lib/extensions/openssl.so/ext/sources/include/openssl/des_old.h +1 -0
  886. data/lib/extensions/openssl.so/ext/sources/include/openssl/dh.h +1 -0
  887. data/lib/extensions/openssl.so/ext/sources/include/openssl/dsa.h +1 -0
  888. data/lib/extensions/openssl.so/ext/sources/include/openssl/dso.h +1 -0
  889. data/lib/extensions/openssl.so/ext/sources/include/openssl/dtls1.h +1 -0
  890. data/lib/extensions/openssl.so/ext/sources/include/openssl/e_os2.h +1 -0
  891. data/lib/extensions/openssl.so/ext/sources/include/openssl/ebcdic.h +1 -0
  892. data/lib/extensions/openssl.so/ext/sources/include/openssl/ec.h +1 -0
  893. data/lib/extensions/openssl.so/ext/sources/include/openssl/ecdh.h +1 -0
  894. data/lib/extensions/openssl.so/ext/sources/include/openssl/ecdsa.h +1 -0
  895. data/lib/extensions/openssl.so/ext/sources/include/openssl/engine.h +1 -0
  896. data/lib/extensions/openssl.so/ext/sources/include/openssl/err.h +1 -0
  897. data/lib/extensions/openssl.so/ext/sources/include/openssl/evp.h +1 -0
  898. data/lib/extensions/openssl.so/ext/sources/include/openssl/hmac.h +1 -0
  899. data/lib/extensions/openssl.so/ext/sources/include/openssl/idea.h +1 -0
  900. data/lib/extensions/openssl.so/ext/sources/include/openssl/krb5_asn.h +1 -0
  901. data/lib/extensions/openssl.so/ext/sources/include/openssl/kssl.h +1 -0
  902. data/lib/extensions/openssl.so/ext/sources/include/openssl/lhash.h +1 -0
  903. data/lib/extensions/openssl.so/ext/sources/include/openssl/md4.h +1 -0
  904. data/lib/extensions/openssl.so/ext/sources/include/openssl/md5.h +1 -0
  905. data/lib/extensions/openssl.so/ext/sources/include/openssl/mdc2.h +1 -0
  906. data/lib/extensions/openssl.so/ext/sources/include/openssl/modes.h +1 -0
  907. data/lib/extensions/openssl.so/ext/sources/include/openssl/obj_mac.h +1 -0
  908. data/lib/extensions/openssl.so/ext/sources/include/openssl/objects.h +1 -0
  909. data/lib/extensions/openssl.so/ext/sources/include/openssl/ocsp.h +1 -0
  910. data/lib/extensions/openssl.so/ext/sources/include/openssl/opensslconf.h +1 -0
  911. data/lib/extensions/openssl.so/ext/sources/include/openssl/opensslv.h +1 -0
  912. data/lib/extensions/openssl.so/ext/sources/include/openssl/ossl_typ.h +1 -0
  913. data/lib/extensions/openssl.so/ext/sources/include/openssl/pem.h +1 -0
  914. data/lib/extensions/openssl.so/ext/sources/include/openssl/pem2.h +1 -0
  915. data/lib/extensions/openssl.so/ext/sources/include/openssl/pkcs12.h +1 -0
  916. data/lib/extensions/openssl.so/ext/sources/include/openssl/pkcs7.h +1 -0
  917. data/lib/extensions/openssl.so/ext/sources/include/openssl/pqueue.h +1 -0
  918. data/lib/extensions/openssl.so/ext/sources/include/openssl/rand.h +1 -0
  919. data/lib/extensions/openssl.so/ext/sources/include/openssl/rc2.h +1 -0
  920. data/lib/extensions/openssl.so/ext/sources/include/openssl/rc4.h +1 -0
  921. data/lib/extensions/openssl.so/ext/sources/include/openssl/ripemd.h +1 -0
  922. data/lib/extensions/openssl.so/ext/sources/include/openssl/rsa.h +1 -0
  923. data/lib/extensions/openssl.so/ext/sources/include/openssl/safestack.h +1 -0
  924. data/lib/extensions/openssl.so/ext/sources/include/openssl/seed.h +1 -0
  925. data/lib/extensions/openssl.so/ext/sources/include/openssl/sha.h +1 -0
  926. data/lib/extensions/openssl.so/ext/sources/include/openssl/srp.h +1 -0
  927. data/lib/extensions/openssl.so/ext/sources/include/openssl/srtp.h +1 -0
  928. data/lib/extensions/openssl.so/ext/sources/include/openssl/ssl.h +1 -0
  929. data/lib/extensions/openssl.so/ext/sources/include/openssl/ssl2.h +1 -0
  930. data/lib/extensions/openssl.so/ext/sources/include/openssl/ssl23.h +1 -0
  931. data/lib/extensions/openssl.so/ext/sources/include/openssl/ssl3.h +1 -0
  932. data/lib/extensions/openssl.so/ext/sources/include/openssl/stack.h +1 -0
  933. data/lib/extensions/openssl.so/ext/sources/include/openssl/store.h +1 -0
  934. data/lib/extensions/openssl.so/ext/sources/include/openssl/symhacks.h +1 -0
  935. data/lib/extensions/openssl.so/ext/sources/include/openssl/tls1.h +1 -0
  936. data/lib/extensions/openssl.so/ext/sources/include/openssl/ts.h +1 -0
  937. data/lib/extensions/openssl.so/ext/sources/include/openssl/txt_db.h +1 -0
  938. data/lib/extensions/openssl.so/ext/sources/include/openssl/ui.h +1 -0
  939. data/lib/extensions/openssl.so/ext/sources/include/openssl/ui_compat.h +1 -0
  940. data/lib/extensions/openssl.so/ext/sources/include/openssl/whrlpool.h +1 -0
  941. data/lib/extensions/openssl.so/ext/sources/include/openssl/x509.h +1 -0
  942. data/lib/extensions/openssl.so/ext/sources/include/openssl/x509_vfy.h +1 -0
  943. data/lib/extensions/openssl.so/ext/sources/include/openssl/x509v3.h +1 -0
  944. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/assert.h +50 -0
  945. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/conio.h +40 -0
  946. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/ctype.h +90 -0
  947. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/direct.h +22 -0
  948. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/errno.h +158 -0
  949. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/fcntl.h +56 -0
  950. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/float.h +330 -0
  951. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/io.h +63 -0
  952. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/limits.h +95 -0
  953. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/malloc.h +59 -0
  954. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/math.h +95 -0
  955. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/memory.h +44 -0
  956. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/process.h +59 -0
  957. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/setjmp.h +69 -0
  958. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/signal.h +53 -0
  959. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/stdarg.h +78 -0
  960. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/stddef.h +88 -0
  961. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/stdio.h +182 -0
  962. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/stdlib.h +142 -0
  963. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/string.h +109 -0
  964. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/strings.h +3 -0
  965. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/sys/locking.h +31 -0
  966. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/sys/stat.h +92 -0
  967. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/sys/time.h +20 -0
  968. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/sys/timeb.h +58 -0
  969. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/sys/types.h +35 -0
  970. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/sys/utime.h +21 -0
  971. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/time.h +81 -0
  972. data/lib/extensions/openssl.so/ext/sources/include/wcecompat/winsock_extras.h +46 -0
  973. data/lib/extensions/openssl.so/ext/sources/ssl/bio_ssl.c +605 -0
  974. data/lib/extensions/openssl.so/ext/sources/ssl/d1_both.c +1591 -0
  975. data/lib/extensions/openssl.so/ext/sources/ssl/d1_clnt.c +1710 -0
  976. data/lib/extensions/openssl.so/ext/sources/ssl/d1_enc.c +289 -0
  977. data/lib/extensions/openssl.so/ext/sources/ssl/d1_lib.c +482 -0
  978. data/lib/extensions/openssl.so/ext/sources/ssl/d1_meth.c +77 -0
  979. data/lib/extensions/openssl.so/ext/sources/ssl/d1_pkt.c +1876 -0
  980. data/lib/extensions/openssl.so/ext/sources/ssl/d1_srtp.c +493 -0
  981. data/lib/extensions/openssl.so/ext/sources/ssl/d1_srvr.c +1711 -0
  982. data/lib/extensions/openssl.so/ext/sources/ssl/dtls1.h +283 -0
  983. data/lib/extensions/openssl.so/ext/sources/ssl/kssl.c +2221 -0
  984. data/lib/extensions/openssl.so/ext/sources/ssl/kssl.h +183 -0
  985. data/lib/extensions/openssl.so/ext/sources/ssl/kssl_lcl.h +87 -0
  986. data/lib/extensions/openssl.so/ext/sources/ssl/s23_clnt.c +779 -0
  987. data/lib/extensions/openssl.so/ext/sources/ssl/s23_lib.c +187 -0
  988. data/lib/extensions/openssl.so/ext/sources/ssl/s23_meth.c +92 -0
  989. data/lib/extensions/openssl.so/ext/sources/ssl/s23_pkt.c +117 -0
  990. data/lib/extensions/openssl.so/ext/sources/ssl/s23_srvr.c +638 -0
  991. data/lib/extensions/openssl.so/ext/sources/ssl/s2_clnt.c +1125 -0
  992. data/lib/extensions/openssl.so/ext/sources/ssl/s2_enc.c +193 -0
  993. data/lib/extensions/openssl.so/ext/sources/ssl/s2_lib.c +556 -0
  994. data/lib/extensions/openssl.so/ext/sources/ssl/s2_meth.c +84 -0
  995. data/lib/extensions/openssl.so/ext/sources/ssl/s2_pkt.c +744 -0
  996. data/lib/extensions/openssl.so/ext/sources/ssl/s2_srvr.c +1142 -0
  997. data/lib/extensions/openssl.so/ext/sources/ssl/s3_both.c +843 -0
  998. data/lib/extensions/openssl.so/ext/sources/ssl/s3_clnt.c +3371 -0
  999. data/lib/extensions/openssl.so/ext/sources/ssl/s3_enc.c +861 -0
  1000. data/lib/extensions/openssl.so/ext/sources/ssl/s3_lib.c +4282 -0
  1001. data/lib/extensions/openssl.so/ext/sources/ssl/s3_meth.c +77 -0
  1002. data/lib/extensions/openssl.so/ext/sources/ssl/s3_pkt.c +1518 -0
  1003. data/lib/extensions/openssl.so/ext/sources/ssl/s3_srvr.c +3586 -0
  1004. data/lib/extensions/openssl.so/ext/sources/ssl/srtp.h +145 -0
  1005. data/lib/extensions/openssl.so/ext/sources/ssl/ssl.h +2573 -0
  1006. data/lib/extensions/openssl.so/ext/sources/ssl/ssl2.h +272 -0
  1007. data/lib/extensions/openssl.so/ext/sources/ssl/ssl23.h +83 -0
  1008. data/lib/extensions/openssl.so/ext/sources/ssl/ssl3.h +678 -0
  1009. data/lib/extensions/openssl.so/ext/sources/ssl/ssl_algs.c +149 -0
  1010. data/lib/extensions/openssl.so/ext/sources/ssl/ssl_asn1.c +642 -0
  1011. data/lib/extensions/openssl.so/ext/sources/ssl/ssl_cert.c +853 -0
  1012. data/lib/extensions/openssl.so/ext/sources/ssl/ssl_ciph.c +1852 -0
  1013. data/lib/extensions/openssl.so/ext/sources/ssl/ssl_err.c +609 -0
  1014. data/lib/extensions/openssl.so/ext/sources/ssl/ssl_err2.c +70 -0
  1015. data/lib/extensions/openssl.so/ext/sources/ssl/ssl_lib.c +3251 -0
  1016. data/lib/extensions/openssl.so/ext/sources/ssl/ssl_locl.h +1134 -0
  1017. data/lib/extensions/openssl.so/ext/sources/ssl/ssl_rsa.c +779 -0
  1018. data/lib/extensions/openssl.so/ext/sources/ssl/ssl_sess.c +1159 -0
  1019. data/lib/extensions/openssl.so/ext/sources/ssl/ssl_stat.c +567 -0
  1020. data/lib/extensions/openssl.so/ext/sources/ssl/ssl_txt.c +248 -0
  1021. data/lib/extensions/openssl.so/ext/sources/ssl/t1_clnt.c +92 -0
  1022. data/lib/extensions/openssl.so/ext/sources/ssl/t1_enc.c +1256 -0
  1023. data/lib/extensions/openssl.so/ext/sources/ssl/t1_lib.c +2578 -0
  1024. data/lib/extensions/openssl.so/ext/sources/ssl/t1_meth.c +88 -0
  1025. data/lib/extensions/openssl.so/ext/sources/ssl/t1_reneg.c +292 -0
  1026. data/lib/extensions/openssl.so/ext/sources/ssl/t1_srvr.c +93 -0
  1027. data/lib/extensions/openssl.so/ext/sources/ssl/tls1.h +735 -0
  1028. data/lib/extensions/openssl.so/ext/sources/ssl/tls_srp.c +506 -0
  1029. data/lib/extensions/openssl.so/ext/win32/UPDATE +15 -0
  1030. data/lib/extensions/openssl.so/ext/win32/bin/libeay32.dll +0 -0
  1031. data/lib/extensions/openssl.so/ext/win32/bin/ssleay32.dll +0 -0
  1032. data/lib/extensions/openssl.so/ext/win32/include/openssl/aes.h +147 -0
  1033. data/lib/extensions/openssl.so/ext/win32/include/openssl/applink.c +94 -0
  1034. data/lib/extensions/openssl.so/ext/win32/include/openssl/asn1.h +1404 -0
  1035. data/lib/extensions/openssl.so/ext/win32/include/openssl/asn1_mac.h +578 -0
  1036. data/lib/extensions/openssl.so/ext/win32/include/openssl/asn1t.h +960 -0
  1037. data/lib/extensions/openssl.so/ext/win32/include/openssl/bio.h +847 -0
  1038. data/lib/extensions/openssl.so/ext/win32/include/openssl/blowfish.h +129 -0
  1039. data/lib/extensions/openssl.so/ext/win32/include/openssl/bn.h +891 -0
  1040. data/lib/extensions/openssl.so/ext/win32/include/openssl/buffer.h +119 -0
  1041. data/lib/extensions/openssl.so/ext/win32/include/openssl/camellia.h +130 -0
  1042. data/lib/extensions/openssl.so/ext/win32/include/openssl/cast.h +107 -0
  1043. data/lib/extensions/openssl.so/ext/win32/include/openssl/cmac.h +82 -0
  1044. data/lib/extensions/openssl.so/ext/win32/include/openssl/cms.h +501 -0
  1045. data/lib/extensions/openssl.so/ext/win32/include/openssl/comp.h +80 -0
  1046. data/lib/extensions/openssl.so/ext/win32/include/openssl/conf.h +263 -0
  1047. data/lib/extensions/openssl.so/ext/win32/include/openssl/conf_api.h +89 -0
  1048. data/lib/extensions/openssl.so/ext/win32/include/openssl/crypto.h +604 -0
  1049. data/lib/extensions/openssl.so/ext/win32/include/openssl/des.h +248 -0
  1050. data/lib/extensions/openssl.so/ext/win32/include/openssl/des_old.h +446 -0
  1051. data/lib/extensions/openssl.so/ext/win32/include/openssl/dh.h +280 -0
  1052. data/lib/extensions/openssl.so/ext/win32/include/openssl/dsa.h +327 -0
  1053. data/lib/extensions/openssl.so/ext/win32/include/openssl/dso.h +409 -0
  1054. data/lib/extensions/openssl.so/ext/win32/include/openssl/dtls1.h +283 -0
  1055. data/lib/extensions/openssl.so/ext/win32/include/openssl/e_os2.h +315 -0
  1056. data/lib/extensions/openssl.so/ext/win32/include/openssl/ebcdic.h +19 -0
  1057. data/lib/extensions/openssl.so/ext/win32/include/openssl/ec.h +1159 -0
  1058. data/lib/extensions/openssl.so/ext/win32/include/openssl/ecdh.h +125 -0
  1059. data/lib/extensions/openssl.so/ext/win32/include/openssl/ecdsa.h +260 -0
  1060. data/lib/extensions/openssl.so/ext/win32/include/openssl/engine.h +842 -0
  1061. data/lib/extensions/openssl.so/ext/win32/include/openssl/err.h +386 -0
  1062. data/lib/extensions/openssl.so/ext/win32/include/openssl/evp.h +1402 -0
  1063. data/lib/extensions/openssl.so/ext/win32/include/openssl/hmac.h +110 -0
  1064. data/lib/extensions/openssl.so/ext/win32/include/openssl/idea.h +103 -0
  1065. data/lib/extensions/openssl.so/ext/win32/include/openssl/krb5_asn.h +256 -0
  1066. data/lib/extensions/openssl.so/ext/win32/include/openssl/kssl.h +183 -0
  1067. data/lib/extensions/openssl.so/ext/win32/include/openssl/lhash.h +241 -0
  1068. data/lib/extensions/openssl.so/ext/win32/include/openssl/md4.h +120 -0
  1069. data/lib/extensions/openssl.so/ext/win32/include/openssl/md5.h +120 -0
  1070. data/lib/extensions/openssl.so/ext/win32/include/openssl/mdc2.h +98 -0
  1071. data/lib/extensions/openssl.so/ext/win32/include/openssl/modes.h +135 -0
  1072. data/lib/extensions/openssl.so/ext/win32/include/openssl/obj_mac.h +4032 -0
  1073. data/lib/extensions/openssl.so/ext/win32/include/openssl/objects.h +1138 -0
  1074. data/lib/extensions/openssl.so/ext/win32/include/openssl/ocsp.h +623 -0
  1075. data/lib/extensions/openssl.so/ext/win32/include/openssl/opensslconf.h +235 -0
  1076. data/lib/extensions/openssl.so/ext/win32/include/openssl/opensslv.h +89 -0
  1077. data/lib/extensions/openssl.so/ext/win32/include/openssl/ossl_typ.h +202 -0
  1078. data/lib/extensions/openssl.so/ext/win32/include/openssl/pem.h +641 -0
  1079. data/lib/extensions/openssl.so/ext/win32/include/openssl/pem2.h +70 -0
  1080. data/lib/extensions/openssl.so/ext/win32/include/openssl/pkcs12.h +331 -0
  1081. data/lib/extensions/openssl.so/ext/win32/include/openssl/pkcs7.h +499 -0
  1082. data/lib/extensions/openssl.so/ext/win32/include/openssl/pqueue.h +94 -0
  1083. data/lib/extensions/openssl.so/ext/win32/include/openssl/rand.h +149 -0
  1084. data/lib/extensions/openssl.so/ext/win32/include/openssl/rc2.h +103 -0
  1085. data/lib/extensions/openssl.so/ext/win32/include/openssl/rc4.h +90 -0
  1086. data/lib/extensions/openssl.so/ext/win32/include/openssl/ripemd.h +107 -0
  1087. data/lib/extensions/openssl.so/ext/win32/include/openssl/rsa.h +582 -0
  1088. data/lib/extensions/openssl.so/ext/win32/include/openssl/safestack.h +2663 -0
  1089. data/lib/extensions/openssl.so/ext/win32/include/openssl/seed.h +139 -0
  1090. data/lib/extensions/openssl.so/ext/win32/include/openssl/sha.h +214 -0
  1091. data/lib/extensions/openssl.so/ext/win32/include/openssl/srp.h +172 -0
  1092. data/lib/extensions/openssl.so/ext/win32/include/openssl/srtp.h +145 -0
  1093. data/lib/extensions/openssl.so/ext/win32/include/openssl/ssl.h +2572 -0
  1094. data/lib/extensions/openssl.so/ext/win32/include/openssl/ssl2.h +272 -0
  1095. data/lib/extensions/openssl.so/ext/win32/include/openssl/ssl23.h +83 -0
  1096. data/lib/extensions/openssl.so/ext/win32/include/openssl/ssl3.h +678 -0
  1097. data/lib/extensions/openssl.so/ext/win32/include/openssl/stack.h +108 -0
  1098. data/lib/extensions/openssl.so/ext/win32/include/openssl/symhacks.h +477 -0
  1099. data/lib/extensions/openssl.so/ext/win32/include/openssl/tls1.h +735 -0
  1100. data/lib/extensions/openssl.so/ext/win32/include/openssl/ts.h +858 -0
  1101. data/lib/extensions/openssl.so/ext/win32/include/openssl/txt_db.h +112 -0
  1102. data/lib/extensions/openssl.so/ext/win32/include/openssl/ui.h +383 -0
  1103. data/lib/extensions/openssl.so/ext/win32/include/openssl/ui_compat.h +83 -0
  1104. data/lib/extensions/openssl.so/ext/win32/include/openssl/whrlpool.h +41 -0
  1105. data/lib/extensions/openssl.so/ext/win32/include/openssl/x509.h +1297 -0
  1106. data/lib/extensions/openssl.so/ext/win32/include/openssl/x509_vfy.h +567 -0
  1107. data/lib/extensions/openssl.so/ext/win32/include/openssl/x509v3.h +1007 -0
  1108. data/lib/extensions/openssl.so/ext/win32/lib/libeay32.lib +0 -0
  1109. data/lib/extensions/openssl.so/ext/win32/lib/ssleay32.lib +0 -0
  1110. data/lib/extensions/openssl.so/ext/wm/lib/libopenssl.lib +0 -0
  1111. data/lib/extensions/openssl.so/ext/wm/openssl.sln +30 -0
  1112. data/lib/extensions/openssl.so/ext/wm/openssl.vcproj +3254 -0
  1113. data/lib/extensions/openssl.so/ext/wm/tmp/MC3000c50b (ARMV4I)/Release/BuildLog.htm +0 -0
  1114. data/lib/extensions/openssl.so/ext/wm/tmp/Windows Mobile 6 Professional SDK (ARMV4I)/Release/BuildLog.htm +0 -0
  1115. data/lib/extensions/openssl.so/openssl.so.rb +1 -0
  1116. data/lib/extensions/openssl/ext.yml +2 -0
  1117. data/lib/extensions/openssl/ext/Rakefile +132 -0
  1118. data/lib/extensions/openssl/ext/android/extconf.h +55 -0
  1119. data/lib/extensions/openssl/ext/build +12 -0
  1120. data/lib/extensions/openssl/ext/build.bat +1 -0
  1121. data/lib/extensions/openssl/ext/extconf.rb +141 -0
  1122. data/lib/extensions/openssl/ext/iphone/Rakefile +79 -0
  1123. data/lib/extensions/openssl/ext/iphone/extconf.h +55 -0
  1124. data/lib/extensions/openssl/ext/iphone/openssl.xcodeproj/project.pbxproj +472 -0
  1125. data/lib/extensions/openssl/ext/iphone/openssl_Prefix.pch +7 -0
  1126. data/lib/extensions/openssl/ext/macosx/extconf.h +53 -0
  1127. data/lib/extensions/openssl/ext/openssl.sln +44 -0
  1128. data/lib/extensions/openssl/ext/openssl.vcproj +844 -0
  1129. data/lib/extensions/openssl/ext/openssl_missing.c +361 -0
  1130. data/lib/extensions/openssl/ext/openssl_missing.h +194 -0
  1131. data/lib/extensions/openssl/ext/ossl.c +514 -0
  1132. data/lib/extensions/openssl/ext/ossl.h +243 -0
  1133. data/lib/extensions/openssl/ext/ossl_asn1.c +1170 -0
  1134. data/lib/extensions/openssl/ext/ossl_asn1.h +59 -0
  1135. data/lib/extensions/openssl/ext/ossl_bio.c +86 -0
  1136. data/lib/extensions/openssl/ext/ossl_bio.h +21 -0
  1137. data/lib/extensions/openssl/ext/ossl_bn.c +852 -0
  1138. data/lib/extensions/openssl/ext/ossl_bn.h +25 -0
  1139. data/lib/extensions/openssl/ext/ossl_cipher.c +546 -0
  1140. data/lib/extensions/openssl/ext/ossl_cipher.h +22 -0
  1141. data/lib/extensions/openssl/ext/ossl_config.c +492 -0
  1142. data/lib/extensions/openssl/ext/ossl_config.h +22 -0
  1143. data/lib/extensions/openssl/ext/ossl_digest.c +257 -0
  1144. data/lib/extensions/openssl/ext/ossl_digest.h +22 -0
  1145. data/lib/extensions/openssl/ext/ossl_engine.c +411 -0
  1146. data/lib/extensions/openssl/ext/ossl_engine.h +20 -0
  1147. data/lib/extensions/openssl/ext/ossl_hmac.c +270 -0
  1148. data/lib/extensions/openssl/ext/ossl_hmac.h +19 -0
  1149. data/lib/extensions/openssl/ext/ossl_ns_spki.c +257 -0
  1150. data/lib/extensions/openssl/ext/ossl_ns_spki.h +21 -0
  1151. data/lib/extensions/openssl/ext/ossl_ocsp.c +773 -0
  1152. data/lib/extensions/openssl/ext/ossl_ocsp.h +24 -0
  1153. data/lib/extensions/openssl/ext/ossl_pkcs12.c +212 -0
  1154. data/lib/extensions/openssl/ext/ossl_pkcs12.h +15 -0
  1155. data/lib/extensions/openssl/ext/ossl_pkcs5.c +98 -0
  1156. data/lib/extensions/openssl/ext/ossl_pkcs5.h +6 -0
  1157. data/lib/extensions/openssl/ext/ossl_pkcs7.c +1041 -0
  1158. data/lib/extensions/openssl/ext/ossl_pkcs7.h +22 -0
  1159. data/lib/extensions/openssl/ext/ossl_pkey.c +240 -0
  1160. data/lib/extensions/openssl/ext/ossl_pkey.h +141 -0
  1161. data/lib/extensions/openssl/ext/ossl_pkey_dh.c +536 -0
  1162. data/lib/extensions/openssl/ext/ossl_pkey_dsa.c +492 -0
  1163. data/lib/extensions/openssl/ext/ossl_pkey_ec.c +1597 -0
  1164. data/lib/extensions/openssl/ext/ossl_pkey_rsa.c +601 -0
  1165. data/lib/extensions/openssl/ext/ossl_rand.c +202 -0
  1166. data/lib/extensions/openssl/ext/ossl_rand.h +20 -0
  1167. data/lib/extensions/openssl/ext/ossl_ssl.c +1691 -0
  1168. data/lib/extensions/openssl/ext/ossl_ssl.h +36 -0
  1169. data/lib/extensions/openssl/ext/ossl_ssl_session.c +306 -0
  1170. data/lib/extensions/openssl/ext/ossl_version.h +16 -0
  1171. data/lib/extensions/openssl/ext/ossl_x509.c +104 -0
  1172. data/lib/extensions/openssl/ext/ossl_x509.h +114 -0
  1173. data/lib/extensions/openssl/ext/ossl_x509attr.c +275 -0
  1174. data/lib/extensions/openssl/ext/ossl_x509cert.c +766 -0
  1175. data/lib/extensions/openssl/ext/ossl_x509crl.c +537 -0
  1176. data/lib/extensions/openssl/ext/ossl_x509ext.c +459 -0
  1177. data/lib/extensions/openssl/ext/ossl_x509name.c +375 -0
  1178. data/lib/extensions/openssl/ext/ossl_x509req.c +468 -0
  1179. data/lib/extensions/openssl/ext/ossl_x509revoked.c +229 -0
  1180. data/lib/extensions/openssl/ext/ossl_x509store.c +624 -0
  1181. data/lib/extensions/openssl/ext/ruby_missing.h +41 -0
  1182. data/lib/extensions/openssl/ext/windows/extconf.h +66 -0
  1183. data/lib/extensions/openssl/openssl.rb +24 -0
  1184. data/lib/extensions/openssl/openssl/bn.rb +35 -0
  1185. data/lib/extensions/openssl/openssl/buffering.rb +341 -0
  1186. data/lib/extensions/openssl/openssl/cipher.rb +65 -0
  1187. data/lib/extensions/openssl/openssl/digest.rb +61 -0
  1188. data/lib/extensions/openssl/openssl/ssl-internal.rb +178 -0
  1189. data/lib/extensions/openssl/openssl/ssl.rb +1 -0
  1190. data/lib/extensions/openssl/openssl/x509-internal.rb +153 -0
  1191. data/lib/extensions/openssl/openssl/x509.rb +1 -0
  1192. data/lib/extensions/rhoxml/rexml/xmldecl.rb +119 -0
  1193. data/lib/extensions/zlib/ext.yml +2 -0
  1194. data/lib/extensions/zlib/ext/README +115 -0
  1195. data/lib/extensions/zlib/ext/Rakefile +127 -0
  1196. data/lib/extensions/zlib/ext/adler32.c +179 -0
  1197. data/lib/extensions/zlib/ext/build +12 -0
  1198. data/lib/extensions/zlib/ext/build.bat +1 -0
  1199. data/lib/extensions/zlib/ext/compress.c +80 -0
  1200. data/lib/extensions/zlib/ext/crc32.c +425 -0
  1201. data/lib/extensions/zlib/ext/crc32.h +441 -0
  1202. data/lib/extensions/zlib/ext/deflate.c +1965 -0
  1203. data/lib/extensions/zlib/ext/deflate.h +346 -0
  1204. data/lib/extensions/zlib/ext/gzclose.c +25 -0
  1205. data/lib/extensions/zlib/ext/gzguts.h +193 -0
  1206. data/lib/extensions/zlib/ext/gzlib.c +620 -0
  1207. data/lib/extensions/zlib/ext/gzread.c +589 -0
  1208. data/lib/extensions/zlib/ext/gzwrite.c +565 -0
  1209. data/lib/extensions/zlib/ext/infback.c +640 -0
  1210. data/lib/extensions/zlib/ext/inffast.c +340 -0
  1211. data/lib/extensions/zlib/ext/inffast.h +11 -0
  1212. data/lib/extensions/zlib/ext/inffixed.h +94 -0
  1213. data/lib/extensions/zlib/ext/inflate.c +1496 -0
  1214. data/lib/extensions/zlib/ext/inflate.h +122 -0
  1215. data/lib/extensions/zlib/ext/inftrees.c +306 -0
  1216. data/lib/extensions/zlib/ext/inftrees.h +62 -0
  1217. data/lib/extensions/zlib/ext/iphone/Rakefile +79 -0
  1218. data/lib/extensions/zlib/ext/iphone/zlib.xcodeproj/project.pbxproj +360 -0
  1219. data/lib/extensions/zlib/ext/iphone/zlib_Prefix.pch +7 -0
  1220. data/lib/extensions/zlib/ext/trees.c +1224 -0
  1221. data/lib/extensions/zlib/ext/trees.h +128 -0
  1222. data/lib/extensions/zlib/ext/uncompr.c +59 -0
  1223. data/lib/extensions/zlib/ext/zconf.h +506 -0
  1224. data/lib/extensions/zlib/ext/zlib.c +3762 -0
  1225. data/lib/extensions/zlib/ext/zlib.h +1744 -0
  1226. data/lib/extensions/zlib/ext/zlib.sln +36 -0
  1227. data/lib/extensions/zlib/ext/zlib.vcproj +746 -0
  1228. data/lib/extensions/zlib/ext/zlib.vsprops +16 -0
  1229. data/lib/extensions/zlib/ext/zutil.c +324 -0
  1230. data/lib/extensions/zlib/ext/zutil.h +252 -0
  1231. data/lib/extensions/zlib/zlib.rb +0 -0
  1232. data/lib/framework/rbconfig.rb +1 -1
  1233. data/lib/framework/rho/render.rb +31 -34
  1234. data/lib/framework/rho/rho.rb +89 -24
  1235. data/lib/framework/rho/rhocontroller.rb +8 -5
  1236. data/lib/framework/rho/rhofsconnector.rb +3 -0
  1237. data/lib/framework/rhodes.rb +9 -9
  1238. data/lib/framework/rhom/rhom.rb +15 -0
  1239. data/lib/framework/rhom/rhom_db_adapter.rb +18 -0
  1240. data/lib/framework/rhom/rhom_object_factory.rb +36 -26
  1241. data/lib/framework/rhomotoapi.rb +65 -1
  1242. data/lib/framework/rhosystem.rb +23 -19
  1243. data/lib/framework/version.rb +7 -7
  1244. data/lib/rhodes.rb +9 -9
  1245. data/platform/android/Rhodes/AndroidManifest.xml +117 -117
  1246. data/platform/android/Rhodes/AndroidManifest.xml.erb +77 -0
  1247. data/platform/android/Rhodes/PushReceiver.erb +14 -0
  1248. data/platform/android/Rhodes/jni/Android.mk +3 -1
  1249. data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_Logger.h +16 -0
  1250. data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_RhodesService.h +8 -0
  1251. data/platform/android/Rhodes/jni/src/fileapi.cpp +18 -0
  1252. data/platform/android/Rhodes/jni/src/logger.cpp +16 -0
  1253. data/platform/android/Rhodes/jni/src/rhodesapp.cpp +9 -2
  1254. data/platform/android/Rhodes/jni/src/signature.cpp +3 -28
  1255. data/platform/android/Rhodes/src/com/rhomobile/rhodes/BaseActivity.java +41 -37
  1256. data/platform/android/Rhodes/src/com/rhomobile/rhodes/Logger.java +5 -5
  1257. data/platform/android/Rhodes/src/com/rhomobile/rhodes/PushReceiver.java +6 -2
  1258. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesActivity.java +38 -15
  1259. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesApplication.java +49 -9
  1260. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesService.java +130 -10
  1261. data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothManagerNew.java +13 -1
  1262. data/platform/android/Rhodes/src/com/rhomobile/rhodes/camera/Camera.java +8 -6
  1263. data/platform/android/Rhodes/src/com/rhomobile/rhodes/camera/CameraNewService.java +20 -0
  1264. data/platform/android/Rhodes/src/com/rhomobile/rhodes/camera/CameraOldService.java +5 -0
  1265. data/platform/android/Rhodes/src/com/rhomobile/rhodes/camera/CameraSemiService.java +14 -0
  1266. data/platform/android/Rhodes/src/com/rhomobile/rhodes/camera/CameraService.java +2 -0
  1267. data/platform/android/Rhodes/src/com/rhomobile/rhodes/camera/ImageCapture.java +16 -13
  1268. data/platform/android/Rhodes/src/com/rhomobile/rhodes/extmanager/AbstractRhoExtension.java +1 -1
  1269. data/platform/android/Rhodes/src/com/rhomobile/rhodes/extmanager/Config.java +3 -0
  1270. data/platform/android/Rhodes/src/com/rhomobile/rhodes/extmanager/IRhoExtManager.java +1 -1
  1271. data/platform/android/Rhodes/src/com/rhomobile/rhodes/extmanager/IRhoExtension.java +3 -1
  1272. data/platform/android/Rhodes/src/com/rhomobile/rhodes/extmanager/RhoExtManager.java +10 -0
  1273. data/platform/android/Rhodes/src/com/rhomobile/rhodes/extmanager/RhoExtManagerImpl.java +23 -35
  1274. data/platform/android/Rhodes/src/com/rhomobile/rhodes/file/RhoFileApi.java +10 -0
  1275. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/SplashScreen.java +60 -34
  1276. data/platform/android/Rhodes/src/com/rhomobile/rhodes/osfunctionality/AndroidFunctionality.java +14 -1
  1277. data/platform/android/Rhodes/src/com/rhomobile/rhodes/osfunctionality/AndroidFunctionality01.java +38 -3
  1278. data/platform/android/Rhodes/src/com/rhomobile/rhodes/osfunctionality/AndroidFunctionality08.java +26 -4
  1279. data/platform/android/Rhodes/src/com/rhomobile/rhodes/osfunctionality/AndroidFunctionality11.java +47 -0
  1280. data/platform/android/Rhodes/src/com/rhomobile/rhodes/osfunctionality/AndroidFunctionalityManager.java +4 -1
  1281. data/platform/android/Rhodes/src/com/rhomobile/rhodes/socket/RhoSocketImpl.java +9 -1
  1282. data/platform/android/Rhodes/src/com/rhomobile/rhodes/webview/GoogleWebView.java +10 -0
  1283. data/platform/android/Rhodes/src/com/rhomobile/rhodes/webview/IRhoWebView.java +2 -0
  1284. data/platform/android/Rhodes/src/com/rhomobile/rhodes/webview/RhoWebViewClient.java +10 -3
  1285. data/platform/android/build/RhodesSRC_build.files +1 -1
  1286. data/platform/android/build/android.rake +567 -556
  1287. data/platform/android/build/android_tools.rb +87 -0
  1288. data/platform/android/build/librhocommon_build.files +3 -0
  1289. data/platform/android/build/librhodb_build.files +2 -0
  1290. data/platform/android/build/manifest_generator.rb +96 -0
  1291. data/platform/bb/Hsqldb/src/org/hsqldb/Expression.java +2 -4
  1292. data/platform/bb/RubyVM/src/com/rho/RhoProfiler.java +11 -0
  1293. data/platform/bb/RubyVM/src/com/xruby/runtime/lang/RhoSupport.java +61 -48
  1294. data/platform/bb/build/rhodes_build.files +0 -1
  1295. data/platform/bb/rhodes/platform/4.7/com/rho/rubyext/SignatureCapture.java +314 -0
  1296. data/platform/bb/rhodes/platform/common/com/rho/rubyext/SignatureCapture.java +312 -0
  1297. data/platform/bb/rhodes/src/rhomobile/RhodesApplication.java +4 -1
  1298. data/platform/iphone/Classes/AppManager/AppManager.h +1 -0
  1299. data/platform/iphone/Classes/AppManager/AppManager.m +165 -123
  1300. data/platform/iphone/Classes/Event/Event.m +53 -14
  1301. data/platform/iphone/Classes/Rhodes.h +5 -4
  1302. data/platform/iphone/Classes/Rhodes.m +10 -8
  1303. data/platform/iphone/Classes/Signature/SignatureDelegate.m +2 -2
  1304. data/platform/iphone/Classes/SimpleMainView.m +55 -17
  1305. data/platform/iphone/Classes/SplashViewController.m +28 -1
  1306. data/platform/iphone/Info.plist +59 -54
  1307. data/platform/iphone/RhoLib/RhoLib.xcodeproj/project.pbxproj +43 -14
  1308. data/platform/iphone/curl/curl.xcodeproj/project.pbxproj +15 -18
  1309. data/platform/iphone/rbuild/iphone.rake +113 -4
  1310. data/platform/iphone/rhoextlib/rhoextlib.xcodeproj/project.pbxproj +15 -17
  1311. data/platform/iphone/rhorubylib/rhorubylib.xcodeproj/project.pbxproj +6 -14
  1312. data/platform/iphone/rhorunner.xcodeproj/project.pbxproj +20 -23
  1313. data/platform/iphone/rhosynclib/rhosynclib.xcodeproj/project.pbxproj +22 -14
  1314. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/Frameworks/QtCore.framework/Versions/4/QtCore +0 -0
  1315. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/Frameworks/QtGui.framework/Versions/4/QtGui +0 -0
  1316. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/Frameworks/QtNetwork.framework/Versions/4/QtNetwork +0 -0
  1317. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/Frameworks/QtWebKit.framework/Versions/4/QtWebKit +0 -0
  1318. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/Info.plist +1 -1
  1319. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/MacOS/RhoSimulator +0 -0
  1320. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/accessible/libqtaccessiblewidgets.dylib +0 -0
  1321. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/bearer/libqcorewlanbearer.dylib +0 -0
  1322. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/bearer/libqgenericbearer.dylib +0 -0
  1323. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/codecs/libqcncodecs.dylib +0 -0
  1324. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/codecs/libqjpcodecs.dylib +0 -0
  1325. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/codecs/libqkrcodecs.dylib +0 -0
  1326. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/codecs/libqtwcodecs.dylib +0 -0
  1327. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/graphicssystems/libqtracegraphicssystem.dylib +0 -0
  1328. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/imageformats/libqgif.dylib +0 -0
  1329. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/imageformats/libqico.dylib +0 -0
  1330. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/imageformats/libqjpeg.dylib +0 -0
  1331. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/imageformats/libqmng.dylib +0 -0
  1332. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/imageformats/libqtga.dylib +0 -0
  1333. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/imageformats/libqtiff.dylib +0 -0
  1334. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/qmltooling/libqmldbg_inspector.dylib +0 -0
  1335. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/qmltooling/libqmldbg_tcp.dylib +0 -0
  1336. data/platform/osx/build/osx.rake +18 -9
  1337. data/platform/shared/RhoConnectClient/RhoConnectClient.cpp +12 -0
  1338. data/platform/shared/RhoConnectClient/RhoConnectClient.h +3 -0
  1339. data/platform/shared/common/Android.mk +1 -0
  1340. data/platform/shared/common/BundleManager.cpp +503 -47
  1341. data/platform/shared/common/ExtManager.h +4 -0
  1342. data/platform/shared/common/RhoSettingsDefs.h +3 -0
  1343. data/platform/shared/common/RhoStd.h +14 -1
  1344. data/platform/shared/common/RhodesApp.cpp +84 -137
  1345. data/platform/shared/common/RhodesApp.h +12 -7
  1346. data/platform/shared/common/RhodesAppBase.cpp +124 -2
  1347. data/platform/shared/common/RhodesAppBase.h +43 -2
  1348. data/platform/shared/common/ThreadQueue.cpp +1 -1
  1349. data/platform/shared/common/app_build_capabilities.h +0 -7
  1350. data/platform/shared/common/map/MapEngine.h +1 -0
  1351. data/platform/shared/common/push/IRhoPushClient.h +46 -0
  1352. data/platform/shared/common/push/RhoPushManager.cpp +146 -0
  1353. data/platform/shared/common/push/RhoPushManager.h +79 -0
  1354. data/platform/shared/curl/lib/curl_config.h +8 -0
  1355. data/platform/shared/curl/lib/netrc.c +2 -0
  1356. data/platform/shared/db/Android.mk +4 -1
  1357. data/platform/shared/db/DBAdapter.cpp +218 -12
  1358. data/platform/shared/db/DBAdapter.h +16 -1
  1359. data/platform/shared/db/DBAttrManager.cpp +18 -1
  1360. data/platform/shared/db/DBAttrManager.h +2 -1
  1361. data/platform/shared/db/DBImportTransaction.cpp +300 -0
  1362. data/platform/shared/db/DBImportTransaction.h +56 -0
  1363. data/platform/shared/db/DBRequestHelper.cpp +114 -0
  1364. data/platform/shared/db/DBRequestHelper.h +27 -0
  1365. data/platform/shared/logging/RhoLogConf.h +2 -0
  1366. data/platform/shared/net/AsyncHttp.cpp +4 -3
  1367. data/platform/shared/net/AsyncHttp.h +3 -2
  1368. data/platform/shared/net/CURLNetRequest.cpp +18 -5
  1369. data/platform/shared/net/HttpServer.cpp +18 -14
  1370. data/platform/shared/qt/rhodes/MainWindowCallback.h +0 -1
  1371. data/platform/shared/qt/rhodes/QtMainWindow.cpp +180 -36
  1372. data/platform/shared/qt/rhodes/QtMainWindow.h +13 -1
  1373. data/platform/shared/qt/rhodes/QtMainWindow.ui +22 -3
  1374. data/platform/shared/qt/rhodes/RhoSimulator.h +3 -0
  1375. data/platform/shared/qt/rhodes/impl/MainWindowImpl.cpp +22 -0
  1376. data/platform/shared/qt/rhodes/impl/MainWindowImpl.h +6 -0
  1377. data/platform/shared/qt/rhodes/impl/SystemImpl.cpp +15 -0
  1378. data/platform/shared/qt/rhodes/main.cpp +15 -1
  1379. data/platform/shared/qt/rholib/rholib.pro +8 -2
  1380. data/platform/shared/qt/syncengine/syncengine.pro +6 -2
  1381. data/platform/shared/ruby/ext/rho/extensions.c +2 -0
  1382. data/platform/shared/ruby/ext/rho/rhoruby.c +12 -0
  1383. data/platform/shared/ruby/ext/rho/rhoruby.h +2 -0
  1384. data/platform/shared/ruby/ext/rho/rhosupport.c +77 -38
  1385. data/platform/shared/ruby/ext/sqlite3_api/sqlite3_api_wrap.c +54 -2
  1386. data/platform/shared/ruby/ext/syncengine/syncengine.i +4 -0
  1387. data/platform/shared/ruby/ext/syncengine/syncengine_wrap.c +40 -1
  1388. data/platform/shared/ruby/ext/system/system.i +38 -4
  1389. data/platform/shared/ruby/ext/system/system_wrap.c +277 -9
  1390. data/platform/shared/ruby/iphone/ruby/config.h +28 -0
  1391. data/platform/shared/ruby/main.c +8 -0
  1392. data/platform/shared/ruby/wince/sys/timeb.c +4 -0
  1393. data/platform/shared/ruby/wince/sys/timeb.h +1 -0
  1394. data/platform/shared/rubyext/Android.mk +2 -1
  1395. data/platform/shared/rubyext/System.cpp +93 -3
  1396. data/platform/shared/rubyext/ZipFiles.cpp +65 -0
  1397. data/platform/shared/statistic/RhoProfiler.cpp +36 -6
  1398. data/platform/shared/statistic/RhoProfiler.h +3 -0
  1399. data/platform/shared/sync/ClientRegister.cpp +21 -5
  1400. data/platform/shared/sync/ClientRegister.h +4 -2
  1401. data/platform/shared/sync/ISyncProtocol.h +5 -2
  1402. data/platform/shared/sync/SyncEngine.cpp +85 -15
  1403. data/platform/shared/sync/SyncEngine.h +5 -0
  1404. data/platform/shared/sync/SyncNotify.cpp +3 -0
  1405. data/platform/shared/sync/SyncProtocol_3.h +14 -2
  1406. data/platform/shared/sync/SyncSource.cpp +238 -40
  1407. data/platform/shared/sync/SyncSource.h +2 -0
  1408. data/platform/shared/sync/SyncThread.cpp +7 -0
  1409. data/platform/shared/sync/SyncThread.h +1 -0
  1410. data/platform/shared/tcmalloc/rhomem.h +1 -1
  1411. data/platform/shared/tcmalloc/windows/port.cpp +1 -1
  1412. data/platform/shared/unzip/Android.mk +1 -1
  1413. data/platform/shared/unzip/zip.cpp +2953 -0
  1414. data/platform/shared/unzip/zip.h +255 -0
  1415. data/platform/win32/RhoSimulator/QtCore4.dll +0 -0
  1416. data/platform/win32/RhoSimulator/QtGui4.dll +0 -0
  1417. data/platform/win32/RhoSimulator/QtNetwork4.dll +0 -0
  1418. data/platform/win32/RhoSimulator/QtWebKit4.dll +0 -0
  1419. data/platform/win32/RhoSimulator/RhoSimulator.exe +0 -0
  1420. data/platform/win32/RhoSimulator/imageformats/qgif4.dll +0 -0
  1421. data/platform/win32/RhoSimulator/imageformats/qico4.dll +0 -0
  1422. data/platform/win32/RhoSimulator/imageformats/qjpeg4.dll +0 -0
  1423. data/platform/win32/RhoSimulator/imageformats/qmng4.dll +0 -0
  1424. data/platform/win32/RhoSimulator/imageformats/qsvg4.dll +0 -0
  1425. data/platform/win32/RhoSimulator/imageformats/qtiff4.dll +0 -0
  1426. data/platform/win32/RhoSimulator/phonon4.dll +0 -0
  1427. data/platform/win32/RubyWin/RubyWin.sln +2 -2
  1428. data/platform/win32/RubyWin/RubyWin.vcproj +6 -7
  1429. data/platform/wm/RhoLib/RhoLib.vcproj +33 -3
  1430. data/platform/wm/build/rhodes.nsi +64 -230
  1431. data/platform/wm/build/wm.rake +306 -93
  1432. data/platform/wm/rhodes.sln +70 -21
  1433. data/platform/wm/rhodes/DateTimePicker.h +1 -1
  1434. data/platform/wm/rhodes/IEBrowserEngine.cpp +4 -1
  1435. data/platform/wm/rhodes/MainWindow.cpp +8 -7
  1436. data/platform/wm/rhodes/MainWindow.h +1 -1
  1437. data/platform/wm/rhodes/RhoNativeViewManager.cpp +2 -2
  1438. data/platform/wm/rhodes/Rhodes.cpp +80 -30
  1439. data/platform/wm/rhodes/camera/Camera.cpp +44 -65
  1440. data/platform/wm/rhodes/camera/Camera.h +6 -0
  1441. data/platform/wm/rhodes/rho/common/ExtManager.cpp +29 -6
  1442. data/platform/wm/rhodes/rho/common/RhoClassFactory.cpp +6 -1
  1443. data/platform/wm/rhodes/rho/net/NetRequestImpl.cpp +3 -0
  1444. data/platform/wm/rhodes/rho/net/NetRequestImpl.h +1 -1
  1445. data/platform/wm/rhodes/rho/rubyext/NativeToolbarExt.cpp +5 -5
  1446. data/platform/wm/rhodes/rho/rubyext/SystemImpl.cpp +188 -29
  1447. data/platform/wm/rhodes/rho/rubyext/WebView.cpp +3 -3
  1448. data/platform/wm/rhodes/rhodes.vcproj +2284 -148
  1449. data/platform/wm/rhodes/simulator/MainWindowQt.cpp +48 -10
  1450. data/platform/wm/rhodes/simulator/MainWindowQt.h +6 -2
  1451. data/platform/wm/rhoelements.sln +122 -0
  1452. data/platform/wm/rubylib/rubylib.vcproj +4 -2
  1453. data/platform/wm/sqlite3/sqlite3.vcproj +4 -2
  1454. data/platform/wm/syncengine/syncengine.vcproj +20 -2
  1455. data/platform/wm/tcmalloc/tcmalloc.vcproj +160 -0
  1456. data/platform/wp7/RhoRubyLib/rubyext/RhoSyncEngine.cs +4 -0
  1457. data/platform/wp7/RhoRubyLib/rubyext/RhoSystem.cs +4 -0
  1458. data/rakefile.rb +173 -17
  1459. data/res/build-tools/license_rc.dll +0 -0
  1460. data/res/build-tools/win32/license_rc.dll +0 -0
  1461. data/res/generators/templates/application/app/layout.erb +7 -3
  1462. data/res/generators/templates/application/public/css/re_webkit.css +1 -1
  1463. data/res/generators/templates/application/public/css/re_webkit_flat.css +753 -0
  1464. data/res/generators/templates/extension/extensions/montana/ext/montana/platform/iphone/Montana.xcodeproj/project.pbxproj +4 -10
  1465. data/spec/framework_spec/app/spec/core/file/new_spec.rb +2 -2
  1466. data/spec/framework_spec/app/spec/core/file/open_spec.rb +6 -6
  1467. data/spec/framework_spec/app/spec/core/file/shared/open.rb +1 -1
  1468. data/spec/framework_spec/app/spec/core/file/shared/stat.rb +2 -2
  1469. data/spec/framework_spec/app/spec/core/file/stat/blksize_spec.rb +1 -1
  1470. data/spec/framework_spec/app/spec/core/file/stat/blocks_spec.rb +1 -1
  1471. data/spec/framework_spec/app/spec/core/file/stat/comparison_spec.rb +1 -1
  1472. data/spec/framework_spec/app/spec/core/file/stat/ino_spec.rb +1 -1
  1473. data/spec/framework_spec/app/spec/core/file/stat/inspect_spec.rb +1 -1
  1474. data/spec/framework_spec/app/spec/core/file/stat/mode_spec.rb +1 -1
  1475. data/spec/framework_spec/app/spec/core/file/stat/nlink_spec.rb +1 -1
  1476. data/spec/framework_spec/app/spec/core/file/stat_spec.rb +1 -1
  1477. data/spec/framework_spec/app/spec/core/file/sticky_spec.rb +2 -2
  1478. data/spec/framework_spec/app/spec/core/io/close_read_spec.rb +1 -1
  1479. data/spec/framework_spec/app/spec/core/io/close_write_spec.rb +1 -1
  1480. data/spec/framework_spec/app/spec/core/io/foreach_spec.rb +8 -8
  1481. data/spec/framework_spec/app/spec/core/io/getc_spec.rb +1 -1
  1482. data/spec/framework_spec/app/spec/core/io/gets_spec.rb +1 -1
  1483. data/spec/framework_spec/app/spec/core/io/stat_spec.rb +1 -1
  1484. data/spec/framework_spec/app/spec/core/kernel/respond_to_spec.rb +1 -1
  1485. data/spec/framework_spec/app/spec/core/time/shared/gmt_offset.rb +1 -1
  1486. data/spec/framework_spec/app/spec/library/digest/hmac_spec.rb +91 -0
  1487. data/spec/framework_spec/app/spec/library/digest/md5/file_spec.rb +1 -1
  1488. data/spec/framework_spec/app/spec/library/digest/sha256/append_spec.rb +7 -0
  1489. data/spec/framework_spec/app/spec/library/digest/sha256/block_length_spec.rb +12 -0
  1490. data/spec/framework_spec/app/spec/library/digest/sha256/digest_bang_spec.rb +13 -0
  1491. data/spec/framework_spec/app/spec/library/digest/sha256/digest_length_spec.rb +12 -0
  1492. data/spec/framework_spec/app/spec/library/digest/sha256/digest_spec.rb +32 -0
  1493. data/spec/framework_spec/app/spec/library/digest/sha256/equal_spec.rb +37 -0
  1494. data/spec/framework_spec/app/spec/library/digest/sha256/file_spec.rb +47 -0
  1495. data/spec/framework_spec/app/spec/library/digest/sha256/hexdigest_bang_spec.rb +14 -0
  1496. data/spec/framework_spec/app/spec/library/digest/sha256/hexdigest_spec.rb +32 -0
  1497. data/spec/framework_spec/app/spec/library/digest/sha256/inspect_spec.rb +12 -0
  1498. data/spec/framework_spec/app/spec/library/digest/sha256/length_spec.rb +8 -0
  1499. data/spec/framework_spec/app/spec/library/digest/sha256/reset_spec.rb +15 -0
  1500. data/spec/framework_spec/app/spec/library/digest/sha256/shared/constants.rb +15 -0
  1501. data/spec/framework_spec/app/spec/library/digest/sha256/shared/length.rb +8 -0
  1502. data/spec/framework_spec/app/spec/library/digest/sha256/shared/update.rb +7 -0
  1503. data/spec/framework_spec/app/spec/library/digest/sha256/size_spec.rb +8 -0
  1504. data/spec/framework_spec/app/spec/library/digest/sha256/to_s_spec.rb +21 -0
  1505. data/spec/framework_spec/app/spec/library/digest/sha256/update_spec.rb +7 -0
  1506. data/spec/framework_spec/app/spec/library/digest/sha384/append_spec.rb +7 -0
  1507. data/spec/framework_spec/app/spec/library/digest/sha384/block_length_spec.rb +12 -0
  1508. data/spec/framework_spec/app/spec/library/digest/sha384/digest_bang_spec.rb +13 -0
  1509. data/spec/framework_spec/app/spec/library/digest/sha384/digest_length_spec.rb +12 -0
  1510. data/spec/framework_spec/app/spec/library/digest/sha384/digest_spec.rb +32 -0
  1511. data/spec/framework_spec/app/spec/library/digest/sha384/equal_spec.rb +37 -0
  1512. data/spec/framework_spec/app/spec/library/digest/sha384/file_spec.rb +47 -0
  1513. data/spec/framework_spec/app/spec/library/digest/sha384/hexdigest_bang_spec.rb +14 -0
  1514. data/spec/framework_spec/app/spec/library/digest/sha384/hexdigest_spec.rb +32 -0
  1515. data/spec/framework_spec/app/spec/library/digest/sha384/inspect_spec.rb +12 -0
  1516. data/spec/framework_spec/app/spec/library/digest/sha384/length_spec.rb +8 -0
  1517. data/spec/framework_spec/app/spec/library/digest/sha384/reset_spec.rb +15 -0
  1518. data/spec/framework_spec/app/spec/library/digest/sha384/shared/constants.rb +16 -0
  1519. data/spec/framework_spec/app/spec/library/digest/sha384/shared/length.rb +8 -0
  1520. data/spec/framework_spec/app/spec/library/digest/sha384/shared/update.rb +7 -0
  1521. data/spec/framework_spec/app/spec/library/digest/sha384/size_spec.rb +8 -0
  1522. data/spec/framework_spec/app/spec/library/digest/sha384/to_s_spec.rb +21 -0
  1523. data/spec/framework_spec/app/spec/library/digest/sha384/update_spec.rb +7 -0
  1524. data/spec/framework_spec/app/spec/library/digest/sha512/append_spec.rb +7 -0
  1525. data/spec/framework_spec/app/spec/library/digest/sha512/block_length_spec.rb +12 -0
  1526. data/spec/framework_spec/app/spec/library/digest/sha512/digest_bang_spec.rb +13 -0
  1527. data/spec/framework_spec/app/spec/library/digest/sha512/digest_length_spec.rb +12 -0
  1528. data/spec/framework_spec/app/spec/library/digest/sha512/digest_spec.rb +32 -0
  1529. data/spec/framework_spec/app/spec/library/digest/sha512/equal_spec.rb +37 -0
  1530. data/spec/framework_spec/app/spec/library/digest/sha512/file_spec.rb +47 -0
  1531. data/spec/framework_spec/app/spec/library/digest/sha512/hexdigest_bang_spec.rb +14 -0
  1532. data/spec/framework_spec/app/spec/library/digest/sha512/hexdigest_spec.rb +32 -0
  1533. data/spec/framework_spec/app/spec/library/digest/sha512/inspect_spec.rb +12 -0
  1534. data/spec/framework_spec/app/spec/library/digest/sha512/length_spec.rb +8 -0
  1535. data/spec/framework_spec/app/spec/library/digest/sha512/reset_spec.rb +15 -0
  1536. data/spec/framework_spec/app/spec/library/digest/sha512/shared/constants.rb +15 -0
  1537. data/spec/framework_spec/app/spec/library/digest/sha512/shared/length.rb +8 -0
  1538. data/spec/framework_spec/app/spec/library/digest/sha512/shared/update.rb +7 -0
  1539. data/spec/framework_spec/app/spec/library/digest/sha512/size_spec.rb +8 -0
  1540. data/spec/framework_spec/app/spec/library/digest/sha512/to_s_spec.rb +21 -0
  1541. data/spec/framework_spec/app/spec/library/digest/sha512/update_spec.rb +7 -0
  1542. data/spec/framework_spec/app/spec/library/ezcrypto/ezcrypto_spec.rb +13 -0
  1543. data/spec/framework_spec/app/spec/library/net/ftp/nlst_spec.rb +1 -1
  1544. data/spec/framework_spec/app/spec/library/net/ftp/retrbinary_spec.rb +1 -1
  1545. data/spec/framework_spec/app/spec/library/net/ftp/retrlines_spec.rb +1 -1
  1546. data/spec/framework_spec/app/spec/library/net/ftp/shared/getbinaryfile.rb +1 -1
  1547. data/spec/framework_spec/app/spec/library/net/ftp/shared/gettextfile.rb +1 -1
  1548. data/spec/framework_spec/app/spec/library/net/ftp/shared/list.rb +1 -1
  1549. data/spec/framework_spec/app/spec/library/net/ftp/shared/putbinaryfile.rb +1 -1
  1550. data/spec/framework_spec/app/spec/library/net/ftp/shared/puttextfile.rb +1 -1
  1551. data/spec/framework_spec/app/spec/library/net/ftp/storbinary_spec.rb +1 -1
  1552. data/spec/framework_spec/app/spec/library/net/ftp/storlines_spec.rb +1 -1
  1553. data/spec/framework_spec/app/spec/library/openssl/cipher_spec.rb +19 -0
  1554. data/spec/framework_spec/app/spec/library/openssl/config/freeze_spec.rb +21 -0
  1555. data/spec/framework_spec/app/spec/library/openssl/hmac/digest_spec.rb +18 -0
  1556. data/spec/framework_spec/app/spec/library/openssl/hmac/hexdigest_spec.rb +18 -0
  1557. data/spec/framework_spec/app/spec/library/openssl/random/pseudo_bytes_spec.rb +7 -0
  1558. data/spec/framework_spec/app/spec/library/openssl/random/random_bytes_spec.rb +7 -0
  1559. data/spec/framework_spec/app/spec/library/openssl/random/shared/random_bytes.rb +29 -0
  1560. data/spec/framework_spec/app/spec/library/openssl/shared/constants.rb +10 -0
  1561. data/spec/framework_spec/app/spec/library/zlib/adler32_spec.rb +46 -0
  1562. data/spec/framework_spec/app/spec/library/zlib/crc32_spec.rb +52 -0
  1563. data/spec/framework_spec/app/spec/library/zlib/crc_table_spec.rb +11 -0
  1564. data/spec/framework_spec/app/spec/library/zlib/deflate/append_spec.rb +1 -0
  1565. data/spec/framework_spec/app/spec/library/zlib/deflate/deflate_spec.rb +49 -0
  1566. data/spec/framework_spec/app/spec/library/zlib/deflate/flush_spec.rb +1 -0
  1567. data/spec/framework_spec/app/spec/library/zlib/deflate/initialize_copy_spec.rb +1 -0
  1568. data/spec/framework_spec/app/spec/library/zlib/deflate/new_spec.rb +1 -0
  1569. data/spec/framework_spec/app/spec/library/zlib/deflate/params_spec.rb +20 -0
  1570. data/spec/framework_spec/app/spec/library/zlib/deflate/set_dictionary_spec.rb +14 -0
  1571. data/spec/framework_spec/app/spec/library/zlib/gzipfile/close_spec.rb +23 -0
  1572. data/spec/framework_spec/app/spec/library/zlib/gzipfile/closed_spec.rb +17 -0
  1573. data/spec/framework_spec/app/spec/library/zlib/gzipfile/comment_spec.rb +27 -0
  1574. data/spec/framework_spec/app/spec/library/zlib/gzipfile/crc_spec.rb +1 -0
  1575. data/spec/framework_spec/app/spec/library/zlib/gzipfile/finish_spec.rb +1 -0
  1576. data/spec/framework_spec/app/spec/library/zlib/gzipfile/level_spec.rb +1 -0
  1577. data/spec/framework_spec/app/spec/library/zlib/gzipfile/mtime_spec.rb +1 -0
  1578. data/spec/framework_spec/app/spec/library/zlib/gzipfile/orig_name_spec.rb +27 -0
  1579. data/spec/framework_spec/app/spec/library/zlib/gzipfile/os_code_spec.rb +1 -0
  1580. data/spec/framework_spec/app/spec/library/zlib/gzipfile/sync_spec.rb +1 -0
  1581. data/spec/framework_spec/app/spec/library/zlib/gzipfile/to_io_spec.rb +1 -0
  1582. data/spec/framework_spec/app/spec/library/zlib/gzipfile/wrap_spec.rb +1 -0
  1583. data/spec/framework_spec/app/spec/library/zlib/gzipreader/each_byte_spec.rb +33 -0
  1584. data/spec/framework_spec/app/spec/library/zlib/gzipreader/each_line_spec.rb +1 -0
  1585. data/spec/framework_spec/app/spec/library/zlib/gzipreader/each_spec.rb +1 -0
  1586. data/spec/framework_spec/app/spec/library/zlib/gzipreader/eof_spec.rb +55 -0
  1587. data/spec/framework_spec/app/spec/library/zlib/gzipreader/getc_spec.rb +55 -0
  1588. data/spec/framework_spec/app/spec/library/zlib/gzipreader/gets_spec.rb +1 -0
  1589. data/spec/framework_spec/app/spec/library/zlib/gzipreader/lineno_spec.rb +1 -0
  1590. data/spec/framework_spec/app/spec/library/zlib/gzipreader/new_spec.rb +1 -0
  1591. data/spec/framework_spec/app/spec/library/zlib/gzipreader/open_spec.rb +1 -0
  1592. data/spec/framework_spec/app/spec/library/zlib/gzipreader/pos_spec.rb +26 -0
  1593. data/spec/framework_spec/app/spec/library/zlib/gzipreader/read_spec.rb +58 -0
  1594. data/spec/framework_spec/app/spec/library/zlib/gzipreader/readchar_spec.rb +1 -0
  1595. data/spec/framework_spec/app/spec/library/zlib/gzipreader/readline_spec.rb +1 -0
  1596. data/spec/framework_spec/app/spec/library/zlib/gzipreader/readlines_spec.rb +1 -0
  1597. data/spec/framework_spec/app/spec/library/zlib/gzipreader/rewind_spec.rb +47 -0
  1598. data/spec/framework_spec/app/spec/library/zlib/gzipreader/tell_spec.rb +1 -0
  1599. data/spec/framework_spec/app/spec/library/zlib/gzipreader/ungetc_spec.rb +1 -0
  1600. data/spec/framework_spec/app/spec/library/zlib/gzipreader/unused_spec.rb +1 -0
  1601. data/spec/framework_spec/app/spec/library/zlib/gzipwriter/append_spec.rb +1 -0
  1602. data/spec/framework_spec/app/spec/library/zlib/gzipwriter/comment_spec.rb +1 -0
  1603. data/spec/framework_spec/app/spec/library/zlib/gzipwriter/flush_spec.rb +1 -0
  1604. data/spec/framework_spec/app/spec/library/zlib/gzipwriter/mtime_spec.rb +41 -0
  1605. data/spec/framework_spec/app/spec/library/zlib/gzipwriter/new_spec.rb +1 -0
  1606. data/spec/framework_spec/app/spec/library/zlib/gzipwriter/open_spec.rb +1 -0
  1607. data/spec/framework_spec/app/spec/library/zlib/gzipwriter/orig_name_spec.rb +1 -0
  1608. data/spec/framework_spec/app/spec/library/zlib/gzipwriter/pos_spec.rb +1 -0
  1609. data/spec/framework_spec/app/spec/library/zlib/gzipwriter/print_spec.rb +1 -0
  1610. data/spec/framework_spec/app/spec/library/zlib/gzipwriter/printf_spec.rb +1 -0
  1611. data/spec/framework_spec/app/spec/library/zlib/gzipwriter/putc_spec.rb +1 -0
  1612. data/spec/framework_spec/app/spec/library/zlib/gzipwriter/puts_spec.rb +1 -0
  1613. data/spec/framework_spec/app/spec/library/zlib/gzipwriter/tell_spec.rb +1 -0
  1614. data/spec/framework_spec/app/spec/library/zlib/gzipwriter/write_spec.rb +24 -0
  1615. data/spec/framework_spec/app/spec/library/zlib/inflate/append_spec.rb +60 -0
  1616. data/spec/framework_spec/app/spec/library/zlib/inflate/inflate_spec.rb +109 -0
  1617. data/spec/framework_spec/app/spec/library/zlib/inflate/new_spec.rb +1 -0
  1618. data/spec/framework_spec/app/spec/library/zlib/inflate/set_dictionary_spec.rb +20 -0
  1619. data/spec/framework_spec/app/spec/library/zlib/inflate/sync_point_spec.rb +1 -0
  1620. data/spec/framework_spec/app/spec/library/zlib/inflate/sync_spec.rb +1 -0
  1621. data/spec/framework_spec/app/spec/library/zlib/zlib_version_spec.rb +1 -0
  1622. data/spec/framework_spec/app/spec/library/zlib/zstream/adler_spec.rb +1 -0
  1623. data/spec/framework_spec/app/spec/library/zlib/zstream/avail_in_spec.rb +1 -0
  1624. data/spec/framework_spec/app/spec/library/zlib/zstream/avail_out_spec.rb +1 -0
  1625. data/spec/framework_spec/app/spec/library/zlib/zstream/close_spec.rb +1 -0
  1626. data/spec/framework_spec/app/spec/library/zlib/zstream/closed_spec.rb +1 -0
  1627. data/spec/framework_spec/app/spec/library/zlib/zstream/data_type_spec.rb +1 -0
  1628. data/spec/framework_spec/app/spec/library/zlib/zstream/end_spec.rb +1 -0
  1629. data/spec/framework_spec/app/spec/library/zlib/zstream/ended_spec.rb +1 -0
  1630. data/spec/framework_spec/app/spec/library/zlib/zstream/finish_spec.rb +1 -0
  1631. data/spec/framework_spec/app/spec/library/zlib/zstream/finished_spec.rb +1 -0
  1632. data/spec/framework_spec/app/spec/library/zlib/zstream/flush_next_in_spec.rb +1 -0
  1633. data/spec/framework_spec/app/spec/library/zlib/zstream/flush_next_out_spec.rb +16 -0
  1634. data/spec/framework_spec/app/spec/library/zlib/zstream/reset_spec.rb +1 -0
  1635. data/spec/framework_spec/app/spec/library/zlib/zstream/stream_end_spec.rb +1 -0
  1636. data/spec/framework_spec/app/spec/library/zlib/zstream/total_in_spec.rb +1 -0
  1637. data/spec/framework_spec/app/spec/library/zlib/zstream/total_out_spec.rb +1 -0
  1638. data/spec/framework_spec/app/spec/shared/file/executable_real.rb +1 -1
  1639. data/spec/framework_spec/app/spec/shared/file/file.rb +1 -1
  1640. data/spec/framework_spec/app/spec_runner.rb +6 -5
  1641. data/spec/framework_spec/build.yml +4 -1
  1642. data/spec/phone_spec/app/BlobBulkTest/blob_bulk_test.png +0 -0
  1643. data/spec/phone_spec/app/BlobBulkTest/blob_bulk_test.rb +11 -0
  1644. data/spec/phone_spec/app/BlobBulkTest_s/blob_bulk_test_s.png +0 -0
  1645. data/spec/phone_spec/app/BlobBulkTest_s/blob_bulk_test_s.rb +11 -0
  1646. data/spec/phone_spec/app/Data/invalid_import_db.zip +0 -0
  1647. data/spec/phone_spec/app/Data/valid_import_db.zip +0 -0
  1648. data/spec/phone_spec/app/spec/asynchttp_spec.rb +1 -1
  1649. data/spec/phone_spec/app/spec/blob_bulksync_spec.rb +160 -0
  1650. data/spec/phone_spec/app/spec/bulksync_spec.rb +51 -1
  1651. data/spec/phone_spec/app/spec/bundle_update_spec.rb +85 -0
  1652. data/spec/phone_spec/app/spec/database_spec.rb +174 -0
  1653. data/spec/phone_spec/app/spec/events_spec.rb +4 -4
  1654. data/spec/phone_spec/app/spec/json_spec.rb +1 -1
  1655. data/spec/phone_spec/app/spec/rho_spec.rb +88 -12
  1656. data/spec/phone_spec/app/spec/rhofile_spec.rb +1 -1
  1657. data/spec/phone_spec/app/spec/rhom_object_spec.rb +8 -5
  1658. data/spec/phone_spec/app/spec/syncengine_spec.rb +281 -18
  1659. data/spec/phone_spec/app/spec/uri_spec.rb +5 -5
  1660. data/spec/phone_spec/app/spec_runner.rb +16 -9
  1661. data/spec/phone_spec/build.yml +2 -1
  1662. data/spec/phone_spec/public/file_for_replace.txt +1 -0
  1663. data/spec/phone_spec/public/file_to_remove.png +0 -0
  1664. data/spec/phone_spec/public/folder_to_remove.png +0 -0
  1665. data/spec/phone_spec/public/folder_to_remove/switch.png +0 -0
  1666. data/spec/phone_spec/public/partial_update_bundle/upgrade_bundle_partial.zip +0 -0
  1667. data/spec/phone_spec/upgrade_package_add_files.txt +2 -0
  1668. data/spec/phone_spec/upgrade_package_remove_files.txt +2 -0
  1669. data/version +1 -1
  1670. metadata +1384 -12
  1671. data/Manifest.txt +0 -8054
  1672. data/doc/alert-api.txt +0 -51
  1673. data/doc/files.txt +0 -4
  1674. data/doc/rhodes-api.txt +0 -147
  1675. data/doc/scanner.txt +0 -507
  1676. data/doc/timer-api.txt +0 -39
  1677. data/doc/tutorial.txt +0 -130
  1678. data/platform/android/Rhodes/src/com/rhomobile/rhodes/extmanager/WebkitExtension.java +0 -53
@@ -0,0 +1,3371 @@
1
+ /* ssl/s3_clnt.c */
2
+ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3
+ * All rights reserved.
4
+ *
5
+ * This package is an SSL implementation written
6
+ * by Eric Young (eay@cryptsoft.com).
7
+ * The implementation was written so as to conform with Netscapes SSL.
8
+ *
9
+ * This library is free for commercial and non-commercial use as long as
10
+ * the following conditions are aheared to. The following conditions
11
+ * apply to all code found in this distribution, be it the RC4, RSA,
12
+ * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13
+ * included with this distribution is covered by the same copyright terms
14
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15
+ *
16
+ * Copyright remains Eric Young's, and as such any Copyright notices in
17
+ * the code are not to be removed.
18
+ * If this package is used in a product, Eric Young should be given attribution
19
+ * as the author of the parts of the library used.
20
+ * This can be in the form of a textual message at program startup or
21
+ * in documentation (online or textual) provided with the package.
22
+ *
23
+ * Redistribution and use in source and binary forms, with or without
24
+ * modification, are permitted provided that the following conditions
25
+ * are met:
26
+ * 1. Redistributions of source code must retain the copyright
27
+ * notice, this list of conditions and the following disclaimer.
28
+ * 2. Redistributions in binary form must reproduce the above copyright
29
+ * notice, this list of conditions and the following disclaimer in the
30
+ * documentation and/or other materials provided with the distribution.
31
+ * 3. All advertising materials mentioning features or use of this software
32
+ * must display the following acknowledgement:
33
+ * "This product includes cryptographic software written by
34
+ * Eric Young (eay@cryptsoft.com)"
35
+ * The word 'cryptographic' can be left out if the rouines from the library
36
+ * being used are not cryptographic related :-).
37
+ * 4. If you include any Windows specific code (or a derivative thereof) from
38
+ * the apps directory (application code) you must include an acknowledgement:
39
+ * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40
+ *
41
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51
+ * SUCH DAMAGE.
52
+ *
53
+ * The licence and distribution terms for any publically available version or
54
+ * derivative of this code cannot be changed. i.e. this code cannot simply be
55
+ * copied and put under another distribution licence
56
+ * [including the GNU Public Licence.]
57
+ */
58
+ /* ====================================================================
59
+ * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved.
60
+ *
61
+ * Redistribution and use in source and binary forms, with or without
62
+ * modification, are permitted provided that the following conditions
63
+ * are met:
64
+ *
65
+ * 1. Redistributions of source code must retain the above copyright
66
+ * notice, this list of conditions and the following disclaimer.
67
+ *
68
+ * 2. Redistributions in binary form must reproduce the above copyright
69
+ * notice, this list of conditions and the following disclaimer in
70
+ * the documentation and/or other materials provided with the
71
+ * distribution.
72
+ *
73
+ * 3. All advertising materials mentioning features or use of this
74
+ * software must display the following acknowledgment:
75
+ * "This product includes software developed by the OpenSSL Project
76
+ * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
77
+ *
78
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
79
+ * endorse or promote products derived from this software without
80
+ * prior written permission. For written permission, please contact
81
+ * openssl-core@openssl.org.
82
+ *
83
+ * 5. Products derived from this software may not be called "OpenSSL"
84
+ * nor may "OpenSSL" appear in their names without prior written
85
+ * permission of the OpenSSL Project.
86
+ *
87
+ * 6. Redistributions of any form whatsoever must retain the following
88
+ * acknowledgment:
89
+ * "This product includes software developed by the OpenSSL Project
90
+ * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
91
+ *
92
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
93
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
94
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
95
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
96
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
97
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
98
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
99
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
100
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
101
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
102
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
103
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
104
+ * ====================================================================
105
+ *
106
+ * This product includes cryptographic software written by Eric Young
107
+ * (eay@cryptsoft.com). This product includes software written by Tim
108
+ * Hudson (tjh@cryptsoft.com).
109
+ *
110
+ */
111
+ /* ====================================================================
112
+ * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
113
+ *
114
+ * Portions of the attached software ("Contribution") are developed by
115
+ * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
116
+ *
117
+ * The Contribution is licensed pursuant to the OpenSSL open source
118
+ * license provided above.
119
+ *
120
+ * ECC cipher suite support in OpenSSL originally written by
121
+ * Vipul Gupta and Sumit Gupta of Sun Microsystems Laboratories.
122
+ *
123
+ */
124
+ /* ====================================================================
125
+ * Copyright 2005 Nokia. All rights reserved.
126
+ *
127
+ * The portions of the attached software ("Contribution") is developed by
128
+ * Nokia Corporation and is licensed pursuant to the OpenSSL open source
129
+ * license.
130
+ *
131
+ * The Contribution, originally written by Mika Kousa and Pasi Eronen of
132
+ * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites
133
+ * support (see RFC 4279) to OpenSSL.
134
+ *
135
+ * No patent licenses or other rights except those expressly stated in
136
+ * the OpenSSL open source license shall be deemed granted or received
137
+ * expressly, by implication, estoppel, or otherwise.
138
+ *
139
+ * No assurances are provided by Nokia that the Contribution does not
140
+ * infringe the patent or other intellectual property rights of any third
141
+ * party or that the license provides you with all the necessary rights
142
+ * to make use of the Contribution.
143
+ *
144
+ * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN
145
+ * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA
146
+ * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY
147
+ * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR
148
+ * OTHERWISE.
149
+ */
150
+
151
+ #include <stdio.h>
152
+ #include "ssl_locl.h"
153
+ #include "kssl_lcl.h"
154
+ #include <openssl/buffer.h>
155
+ #include <openssl/rand.h>
156
+ #include <openssl/objects.h>
157
+ #include <openssl/evp.h>
158
+ #include <openssl/md5.h>
159
+ #ifdef OPENSSL_FIPS
160
+ #include <openssl/fips.h>
161
+ #endif
162
+ #ifndef OPENSSL_NO_DH
163
+ #include <openssl/dh.h>
164
+ #endif
165
+ #include <openssl/bn.h>
166
+ #ifndef OPENSSL_NO_ENGINE
167
+ #include <openssl/engine.h>
168
+ #endif
169
+
170
+ static const SSL_METHOD *ssl3_get_client_method(int ver);
171
+ static int ca_dn_cmp(const X509_NAME * const *a,const X509_NAME * const *b);
172
+
173
+ static const SSL_METHOD *ssl3_get_client_method(int ver)
174
+ {
175
+ if (ver == SSL3_VERSION)
176
+ return(SSLv3_client_method());
177
+ else
178
+ return(NULL);
179
+ }
180
+
181
+ IMPLEMENT_ssl3_meth_func(SSLv3_client_method,
182
+ ssl_undefined_function,
183
+ ssl3_connect,
184
+ ssl3_get_client_method)
185
+
186
+ int ssl3_connect(SSL *s)
187
+ {
188
+ BUF_MEM *buf=NULL;
189
+ unsigned long Time=(unsigned long)time(NULL);
190
+ void (*cb)(const SSL *ssl,int type,int val)=NULL;
191
+ int ret= -1;
192
+ int new_state,state,skip=0;
193
+
194
+ RAND_add(&Time,sizeof(Time),0);
195
+ ERR_clear_error();
196
+ clear_sys_error();
197
+
198
+ if (s->info_callback != NULL)
199
+ cb=s->info_callback;
200
+ else if (s->ctx->info_callback != NULL)
201
+ cb=s->ctx->info_callback;
202
+
203
+ s->in_handshake++;
204
+ if (!SSL_in_init(s) || SSL_in_before(s)) SSL_clear(s);
205
+
206
+ #ifndef OPENSSL_NO_HEARTBEATS
207
+ /* If we're awaiting a HeartbeatResponse, pretend we
208
+ * already got and don't await it anymore, because
209
+ * Heartbeats don't make sense during handshakes anyway.
210
+ */
211
+ if (s->tlsext_hb_pending)
212
+ {
213
+ s->tlsext_hb_pending = 0;
214
+ s->tlsext_hb_seq++;
215
+ }
216
+ #endif
217
+
218
+ for (;;)
219
+ {
220
+ state=s->state;
221
+
222
+ switch(s->state)
223
+ {
224
+ case SSL_ST_RENEGOTIATE:
225
+ s->renegotiate=1;
226
+ s->state=SSL_ST_CONNECT;
227
+ s->ctx->stats.sess_connect_renegotiate++;
228
+ /* break */
229
+ case SSL_ST_BEFORE:
230
+ case SSL_ST_CONNECT:
231
+ case SSL_ST_BEFORE|SSL_ST_CONNECT:
232
+ case SSL_ST_OK|SSL_ST_CONNECT:
233
+
234
+ s->server=0;
235
+ if (cb != NULL) cb(s,SSL_CB_HANDSHAKE_START,1);
236
+
237
+ if ((s->version & 0xff00 ) != 0x0300)
238
+ {
239
+ SSLerr(SSL_F_SSL3_CONNECT, ERR_R_INTERNAL_ERROR);
240
+ ret = -1;
241
+ goto end;
242
+ }
243
+
244
+ /* s->version=SSL3_VERSION; */
245
+ s->type=SSL_ST_CONNECT;
246
+
247
+ if (s->init_buf == NULL)
248
+ {
249
+ if ((buf=BUF_MEM_new()) == NULL)
250
+ {
251
+ ret= -1;
252
+ goto end;
253
+ }
254
+ if (!BUF_MEM_grow(buf,SSL3_RT_MAX_PLAIN_LENGTH))
255
+ {
256
+ ret= -1;
257
+ goto end;
258
+ }
259
+ s->init_buf=buf;
260
+ buf=NULL;
261
+ }
262
+
263
+ if (!ssl3_setup_buffers(s)) { ret= -1; goto end; }
264
+
265
+ /* setup buffing BIO */
266
+ if (!ssl_init_wbio_buffer(s,0)) { ret= -1; goto end; }
267
+
268
+ /* don't push the buffering BIO quite yet */
269
+
270
+ ssl3_init_finished_mac(s);
271
+
272
+ s->state=SSL3_ST_CW_CLNT_HELLO_A;
273
+ s->ctx->stats.sess_connect++;
274
+ s->init_num=0;
275
+ break;
276
+
277
+ case SSL3_ST_CW_CLNT_HELLO_A:
278
+ case SSL3_ST_CW_CLNT_HELLO_B:
279
+
280
+ s->shutdown=0;
281
+ ret=ssl3_client_hello(s);
282
+ if (ret <= 0) goto end;
283
+ s->state=SSL3_ST_CR_SRVR_HELLO_A;
284
+ s->init_num=0;
285
+
286
+ /* turn on buffering for the next lot of output */
287
+ if (s->bbio != s->wbio)
288
+ s->wbio=BIO_push(s->bbio,s->wbio);
289
+
290
+ break;
291
+
292
+ case SSL3_ST_CR_SRVR_HELLO_A:
293
+ case SSL3_ST_CR_SRVR_HELLO_B:
294
+ ret=ssl3_get_server_hello(s);
295
+ if (ret <= 0) goto end;
296
+
297
+ if (s->hit)
298
+ {
299
+ s->state=SSL3_ST_CR_FINISHED_A;
300
+ #ifndef OPENSSL_NO_TLSEXT
301
+ if (s->tlsext_ticket_expected)
302
+ {
303
+ /* receive renewed session ticket */
304
+ s->state=SSL3_ST_CR_SESSION_TICKET_A;
305
+ }
306
+ #endif
307
+ }
308
+ else
309
+ s->state=SSL3_ST_CR_CERT_A;
310
+ s->init_num=0;
311
+ break;
312
+
313
+ case SSL3_ST_CR_CERT_A:
314
+ case SSL3_ST_CR_CERT_B:
315
+ #ifndef OPENSSL_NO_TLSEXT
316
+ ret=ssl3_check_finished(s);
317
+ if (ret <= 0) goto end;
318
+ if (ret == 2)
319
+ {
320
+ s->hit = 1;
321
+ if (s->tlsext_ticket_expected)
322
+ s->state=SSL3_ST_CR_SESSION_TICKET_A;
323
+ else
324
+ s->state=SSL3_ST_CR_FINISHED_A;
325
+ s->init_num=0;
326
+ break;
327
+ }
328
+ #endif
329
+ /* Check if it is anon DH/ECDH */
330
+ /* or PSK */
331
+ if (!(s->s3->tmp.new_cipher->algorithm_auth & SSL_aNULL) &&
332
+ !(s->s3->tmp.new_cipher->algorithm_mkey & SSL_kPSK))
333
+ {
334
+ ret=ssl3_get_server_certificate(s);
335
+ if (ret <= 0) goto end;
336
+ #ifndef OPENSSL_NO_TLSEXT
337
+ if (s->tlsext_status_expected)
338
+ s->state=SSL3_ST_CR_CERT_STATUS_A;
339
+ else
340
+ s->state=SSL3_ST_CR_KEY_EXCH_A;
341
+ }
342
+ else
343
+ {
344
+ skip = 1;
345
+ s->state=SSL3_ST_CR_KEY_EXCH_A;
346
+ }
347
+ #else
348
+ }
349
+ else
350
+ skip=1;
351
+
352
+ s->state=SSL3_ST_CR_KEY_EXCH_A;
353
+ #endif
354
+ s->init_num=0;
355
+ break;
356
+
357
+ case SSL3_ST_CR_KEY_EXCH_A:
358
+ case SSL3_ST_CR_KEY_EXCH_B:
359
+ ret=ssl3_get_key_exchange(s);
360
+ if (ret <= 0) goto end;
361
+ s->state=SSL3_ST_CR_CERT_REQ_A;
362
+ s->init_num=0;
363
+
364
+ /* at this point we check that we have the
365
+ * required stuff from the server */
366
+ if (!ssl3_check_cert_and_algorithm(s))
367
+ {
368
+ ret= -1;
369
+ goto end;
370
+ }
371
+ break;
372
+
373
+ case SSL3_ST_CR_CERT_REQ_A:
374
+ case SSL3_ST_CR_CERT_REQ_B:
375
+ ret=ssl3_get_certificate_request(s);
376
+ if (ret <= 0) goto end;
377
+ s->state=SSL3_ST_CR_SRVR_DONE_A;
378
+ s->init_num=0;
379
+ break;
380
+
381
+ case SSL3_ST_CR_SRVR_DONE_A:
382
+ case SSL3_ST_CR_SRVR_DONE_B:
383
+ ret=ssl3_get_server_done(s);
384
+ if (ret <= 0) goto end;
385
+ #ifndef OPENSSL_NO_SRP
386
+ if (s->s3->tmp.new_cipher->algorithm_mkey & SSL_kSRP)
387
+ {
388
+ if ((ret = SRP_Calc_A_param(s))<=0)
389
+ {
390
+ SSLerr(SSL_F_SSL3_CONNECT,SSL_R_SRP_A_CALC);
391
+ ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_INTERNAL_ERROR);
392
+ goto end;
393
+ }
394
+ }
395
+ #endif
396
+ if (s->s3->tmp.cert_req)
397
+ s->state=SSL3_ST_CW_CERT_A;
398
+ else
399
+ s->state=SSL3_ST_CW_KEY_EXCH_A;
400
+ s->init_num=0;
401
+
402
+ break;
403
+
404
+ case SSL3_ST_CW_CERT_A:
405
+ case SSL3_ST_CW_CERT_B:
406
+ case SSL3_ST_CW_CERT_C:
407
+ case SSL3_ST_CW_CERT_D:
408
+ ret=ssl3_send_client_certificate(s);
409
+ if (ret <= 0) goto end;
410
+ s->state=SSL3_ST_CW_KEY_EXCH_A;
411
+ s->init_num=0;
412
+ break;
413
+
414
+ case SSL3_ST_CW_KEY_EXCH_A:
415
+ case SSL3_ST_CW_KEY_EXCH_B:
416
+ ret=ssl3_send_client_key_exchange(s);
417
+ if (ret <= 0) goto end;
418
+ /* EAY EAY EAY need to check for DH fix cert
419
+ * sent back */
420
+ /* For TLS, cert_req is set to 2, so a cert chain
421
+ * of nothing is sent, but no verify packet is sent */
422
+ /* XXX: For now, we do not support client
423
+ * authentication in ECDH cipher suites with
424
+ * ECDH (rather than ECDSA) certificates.
425
+ * We need to skip the certificate verify
426
+ * message when client's ECDH public key is sent
427
+ * inside the client certificate.
428
+ */
429
+ if (s->s3->tmp.cert_req == 1)
430
+ {
431
+ s->state=SSL3_ST_CW_CERT_VRFY_A;
432
+ }
433
+ else
434
+ {
435
+ s->state=SSL3_ST_CW_CHANGE_A;
436
+ s->s3->change_cipher_spec=0;
437
+ }
438
+ if (s->s3->flags & TLS1_FLAGS_SKIP_CERT_VERIFY)
439
+ {
440
+ s->state=SSL3_ST_CW_CHANGE_A;
441
+ s->s3->change_cipher_spec=0;
442
+ }
443
+
444
+ s->init_num=0;
445
+ break;
446
+
447
+ case SSL3_ST_CW_CERT_VRFY_A:
448
+ case SSL3_ST_CW_CERT_VRFY_B:
449
+ ret=ssl3_send_client_verify(s);
450
+ if (ret <= 0) goto end;
451
+ s->state=SSL3_ST_CW_CHANGE_A;
452
+ s->init_num=0;
453
+ s->s3->change_cipher_spec=0;
454
+ break;
455
+
456
+ case SSL3_ST_CW_CHANGE_A:
457
+ case SSL3_ST_CW_CHANGE_B:
458
+ ret=ssl3_send_change_cipher_spec(s,
459
+ SSL3_ST_CW_CHANGE_A,SSL3_ST_CW_CHANGE_B);
460
+ if (ret <= 0) goto end;
461
+
462
+
463
+ #if defined(OPENSSL_NO_TLSEXT) || defined(OPENSSL_NO_NEXTPROTONEG)
464
+ s->state=SSL3_ST_CW_FINISHED_A;
465
+ #else
466
+ if (s->s3->next_proto_neg_seen)
467
+ s->state=SSL3_ST_CW_NEXT_PROTO_A;
468
+ else
469
+ s->state=SSL3_ST_CW_FINISHED_A;
470
+ #endif
471
+ s->init_num=0;
472
+
473
+ s->session->cipher=s->s3->tmp.new_cipher;
474
+ #ifdef OPENSSL_NO_COMP
475
+ s->session->compress_meth=0;
476
+ #else
477
+ if (s->s3->tmp.new_compression == NULL)
478
+ s->session->compress_meth=0;
479
+ else
480
+ s->session->compress_meth=
481
+ s->s3->tmp.new_compression->id;
482
+ #endif
483
+ if (!s->method->ssl3_enc->setup_key_block(s))
484
+ {
485
+ ret= -1;
486
+ goto end;
487
+ }
488
+
489
+ if (!s->method->ssl3_enc->change_cipher_state(s,
490
+ SSL3_CHANGE_CIPHER_CLIENT_WRITE))
491
+ {
492
+ ret= -1;
493
+ goto end;
494
+ }
495
+
496
+ break;
497
+
498
+ #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
499
+ case SSL3_ST_CW_NEXT_PROTO_A:
500
+ case SSL3_ST_CW_NEXT_PROTO_B:
501
+ ret=ssl3_send_next_proto(s);
502
+ if (ret <= 0) goto end;
503
+ s->state=SSL3_ST_CW_FINISHED_A;
504
+ break;
505
+ #endif
506
+
507
+ case SSL3_ST_CW_FINISHED_A:
508
+ case SSL3_ST_CW_FINISHED_B:
509
+ ret=ssl3_send_finished(s,
510
+ SSL3_ST_CW_FINISHED_A,SSL3_ST_CW_FINISHED_B,
511
+ s->method->ssl3_enc->client_finished_label,
512
+ s->method->ssl3_enc->client_finished_label_len);
513
+ if (ret <= 0) goto end;
514
+ s->state=SSL3_ST_CW_FLUSH;
515
+
516
+ /* clear flags */
517
+ s->s3->flags&= ~SSL3_FLAGS_POP_BUFFER;
518
+ if (s->hit)
519
+ {
520
+ s->s3->tmp.next_state=SSL_ST_OK;
521
+ if (s->s3->flags & SSL3_FLAGS_DELAY_CLIENT_FINISHED)
522
+ {
523
+ s->state=SSL_ST_OK;
524
+ s->s3->flags|=SSL3_FLAGS_POP_BUFFER;
525
+ s->s3->delay_buf_pop_ret=0;
526
+ }
527
+ }
528
+ else
529
+ {
530
+ #ifndef OPENSSL_NO_TLSEXT
531
+ /* Allow NewSessionTicket if ticket expected */
532
+ if (s->tlsext_ticket_expected)
533
+ s->s3->tmp.next_state=SSL3_ST_CR_SESSION_TICKET_A;
534
+ else
535
+ #endif
536
+
537
+ s->s3->tmp.next_state=SSL3_ST_CR_FINISHED_A;
538
+ }
539
+ s->init_num=0;
540
+ break;
541
+
542
+ #ifndef OPENSSL_NO_TLSEXT
543
+ case SSL3_ST_CR_SESSION_TICKET_A:
544
+ case SSL3_ST_CR_SESSION_TICKET_B:
545
+ ret=ssl3_get_new_session_ticket(s);
546
+ if (ret <= 0) goto end;
547
+ s->state=SSL3_ST_CR_FINISHED_A;
548
+ s->init_num=0;
549
+ break;
550
+
551
+ case SSL3_ST_CR_CERT_STATUS_A:
552
+ case SSL3_ST_CR_CERT_STATUS_B:
553
+ ret=ssl3_get_cert_status(s);
554
+ if (ret <= 0) goto end;
555
+ s->state=SSL3_ST_CR_KEY_EXCH_A;
556
+ s->init_num=0;
557
+ break;
558
+ #endif
559
+
560
+ case SSL3_ST_CR_FINISHED_A:
561
+ case SSL3_ST_CR_FINISHED_B:
562
+
563
+ ret=ssl3_get_finished(s,SSL3_ST_CR_FINISHED_A,
564
+ SSL3_ST_CR_FINISHED_B);
565
+ if (ret <= 0) goto end;
566
+
567
+ if (s->hit)
568
+ s->state=SSL3_ST_CW_CHANGE_A;
569
+ else
570
+ s->state=SSL_ST_OK;
571
+ s->init_num=0;
572
+ break;
573
+
574
+ case SSL3_ST_CW_FLUSH:
575
+ s->rwstate=SSL_WRITING;
576
+ if (BIO_flush(s->wbio) <= 0)
577
+ {
578
+ ret= -1;
579
+ goto end;
580
+ }
581
+ s->rwstate=SSL_NOTHING;
582
+ s->state=s->s3->tmp.next_state;
583
+ break;
584
+
585
+ case SSL_ST_OK:
586
+ /* clean a few things up */
587
+ ssl3_cleanup_key_block(s);
588
+
589
+ if (s->init_buf != NULL)
590
+ {
591
+ BUF_MEM_free(s->init_buf);
592
+ s->init_buf=NULL;
593
+ }
594
+
595
+ /* If we are not 'joining' the last two packets,
596
+ * remove the buffering now */
597
+ if (!(s->s3->flags & SSL3_FLAGS_POP_BUFFER))
598
+ ssl_free_wbio_buffer(s);
599
+ /* else do it later in ssl3_write */
600
+
601
+ s->init_num=0;
602
+ s->renegotiate=0;
603
+ s->new_session=0;
604
+
605
+ ssl_update_cache(s,SSL_SESS_CACHE_CLIENT);
606
+ if (s->hit) s->ctx->stats.sess_hit++;
607
+
608
+ ret=1;
609
+ /* s->server=0; */
610
+ s->handshake_func=ssl3_connect;
611
+ s->ctx->stats.sess_connect_good++;
612
+
613
+ if (cb != NULL) cb(s,SSL_CB_HANDSHAKE_DONE,1);
614
+
615
+ goto end;
616
+ /* break; */
617
+
618
+ default:
619
+ SSLerr(SSL_F_SSL3_CONNECT,SSL_R_UNKNOWN_STATE);
620
+ ret= -1;
621
+ goto end;
622
+ /* break; */
623
+ }
624
+
625
+ /* did we do anything */
626
+ if (!s->s3->tmp.reuse_message && !skip)
627
+ {
628
+ if (s->debug)
629
+ {
630
+ if ((ret=BIO_flush(s->wbio)) <= 0)
631
+ goto end;
632
+ }
633
+
634
+ if ((cb != NULL) && (s->state != state))
635
+ {
636
+ new_state=s->state;
637
+ s->state=state;
638
+ cb(s,SSL_CB_CONNECT_LOOP,1);
639
+ s->state=new_state;
640
+ }
641
+ }
642
+ skip=0;
643
+ }
644
+ end:
645
+ s->in_handshake--;
646
+ if (buf != NULL)
647
+ BUF_MEM_free(buf);
648
+ if (cb != NULL)
649
+ cb(s,SSL_CB_CONNECT_EXIT,ret);
650
+ return(ret);
651
+ }
652
+
653
+
654
+ int ssl3_client_hello(SSL *s)
655
+ {
656
+ unsigned char *buf;
657
+ unsigned char *p,*d;
658
+ int i;
659
+ unsigned long Time,l;
660
+ #ifndef OPENSSL_NO_COMP
661
+ int j;
662
+ SSL_COMP *comp;
663
+ #endif
664
+
665
+ buf=(unsigned char *)s->init_buf->data;
666
+ if (s->state == SSL3_ST_CW_CLNT_HELLO_A)
667
+ {
668
+ SSL_SESSION *sess = s->session;
669
+ if ((sess == NULL) ||
670
+ (sess->ssl_version != s->version) ||
671
+ #ifdef OPENSSL_NO_TLSEXT
672
+ !sess->session_id_length ||
673
+ #else
674
+ (!sess->session_id_length && !sess->tlsext_tick) ||
675
+ #endif
676
+ (sess->not_resumable))
677
+ {
678
+ if (!ssl_get_new_session(s,0))
679
+ goto err;
680
+ }
681
+ /* else use the pre-loaded session */
682
+
683
+ p=s->s3->client_random;
684
+ Time=(unsigned long)time(NULL); /* Time */
685
+ l2n(Time,p);
686
+ if (RAND_pseudo_bytes(p,SSL3_RANDOM_SIZE-4) <= 0)
687
+ goto err;
688
+
689
+ /* Do the message type and length last */
690
+ d=p= &(buf[4]);
691
+
692
+ /* version indicates the negotiated version: for example from
693
+ * an SSLv2/v3 compatible client hello). The client_version
694
+ * field is the maximum version we permit and it is also
695
+ * used in RSA encrypted premaster secrets. Some servers can
696
+ * choke if we initially report a higher version then
697
+ * renegotiate to a lower one in the premaster secret. This
698
+ * didn't happen with TLS 1.0 as most servers supported it
699
+ * but it can with TLS 1.1 or later if the server only supports
700
+ * 1.0.
701
+ *
702
+ * Possible scenario with previous logic:
703
+ * 1. Client hello indicates TLS 1.2
704
+ * 2. Server hello says TLS 1.0
705
+ * 3. RSA encrypted premaster secret uses 1.2.
706
+ * 4. Handhaked proceeds using TLS 1.0.
707
+ * 5. Server sends hello request to renegotiate.
708
+ * 6. Client hello indicates TLS v1.0 as we now
709
+ * know that is maximum server supports.
710
+ * 7. Server chokes on RSA encrypted premaster secret
711
+ * containing version 1.0.
712
+ *
713
+ * For interoperability it should be OK to always use the
714
+ * maximum version we support in client hello and then rely
715
+ * on the checking of version to ensure the servers isn't
716
+ * being inconsistent: for example initially negotiating with
717
+ * TLS 1.0 and renegotiating with TLS 1.2. We do this by using
718
+ * client_version in client hello and not resetting it to
719
+ * the negotiated version.
720
+ */
721
+ #if 0
722
+ *(p++)=s->version>>8;
723
+ *(p++)=s->version&0xff;
724
+ s->client_version=s->version;
725
+ #else
726
+ *(p++)=s->client_version>>8;
727
+ *(p++)=s->client_version&0xff;
728
+ #endif
729
+
730
+ /* Random stuff */
731
+ memcpy(p,s->s3->client_random,SSL3_RANDOM_SIZE);
732
+ p+=SSL3_RANDOM_SIZE;
733
+
734
+ /* Session ID */
735
+ if (s->new_session)
736
+ i=0;
737
+ else
738
+ i=s->session->session_id_length;
739
+ *(p++)=i;
740
+ if (i != 0)
741
+ {
742
+ if (i > (int)sizeof(s->session->session_id))
743
+ {
744
+ SSLerr(SSL_F_SSL3_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
745
+ goto err;
746
+ }
747
+ memcpy(p,s->session->session_id,i);
748
+ p+=i;
749
+ }
750
+
751
+ /* Ciphers supported */
752
+ i=ssl_cipher_list_to_bytes(s,SSL_get_ciphers(s),&(p[2]),0);
753
+ if (i == 0)
754
+ {
755
+ SSLerr(SSL_F_SSL3_CLIENT_HELLO,SSL_R_NO_CIPHERS_AVAILABLE);
756
+ goto err;
757
+ }
758
+ #ifdef OPENSSL_MAX_TLS1_2_CIPHER_LENGTH
759
+ /* Some servers hang if client hello > 256 bytes
760
+ * as hack workaround chop number of supported ciphers
761
+ * to keep it well below this if we use TLS v1.2
762
+ */
763
+ if (TLS1_get_version(s) >= TLS1_2_VERSION
764
+ && i > OPENSSL_MAX_TLS1_2_CIPHER_LENGTH)
765
+ i = OPENSSL_MAX_TLS1_2_CIPHER_LENGTH & ~1;
766
+ #endif
767
+ s2n(i,p);
768
+ p+=i;
769
+
770
+ /* COMPRESSION */
771
+ #ifdef OPENSSL_NO_COMP
772
+ *(p++)=1;
773
+ #else
774
+
775
+ if ((s->options & SSL_OP_NO_COMPRESSION)
776
+ || !s->ctx->comp_methods)
777
+ j=0;
778
+ else
779
+ j=sk_SSL_COMP_num(s->ctx->comp_methods);
780
+ *(p++)=1+j;
781
+ for (i=0; i<j; i++)
782
+ {
783
+ comp=sk_SSL_COMP_value(s->ctx->comp_methods,i);
784
+ *(p++)=comp->id;
785
+ }
786
+ #endif
787
+ *(p++)=0; /* Add the NULL method */
788
+
789
+ #ifndef OPENSSL_NO_TLSEXT
790
+ /* TLS extensions*/
791
+ if (ssl_prepare_clienthello_tlsext(s) <= 0)
792
+ {
793
+ SSLerr(SSL_F_SSL3_CLIENT_HELLO,SSL_R_CLIENTHELLO_TLSEXT);
794
+ goto err;
795
+ }
796
+ if ((p = ssl_add_clienthello_tlsext(s, p, buf+SSL3_RT_MAX_PLAIN_LENGTH)) == NULL)
797
+ {
798
+ SSLerr(SSL_F_SSL3_CLIENT_HELLO,ERR_R_INTERNAL_ERROR);
799
+ goto err;
800
+ }
801
+ #endif
802
+
803
+ l=(p-d);
804
+ d=buf;
805
+ *(d++)=SSL3_MT_CLIENT_HELLO;
806
+ l2n3(l,d);
807
+
808
+ s->state=SSL3_ST_CW_CLNT_HELLO_B;
809
+ /* number of bytes to write */
810
+ s->init_num=p-buf;
811
+ s->init_off=0;
812
+ }
813
+
814
+ /* SSL3_ST_CW_CLNT_HELLO_B */
815
+ return(ssl3_do_write(s,SSL3_RT_HANDSHAKE));
816
+ err:
817
+ return(-1);
818
+ }
819
+
820
+ int ssl3_get_server_hello(SSL *s)
821
+ {
822
+ STACK_OF(SSL_CIPHER) *sk;
823
+ const SSL_CIPHER *c;
824
+ unsigned char *p,*d;
825
+ int i,al,ok;
826
+ unsigned int j;
827
+ long n;
828
+ #ifndef OPENSSL_NO_COMP
829
+ SSL_COMP *comp;
830
+ #endif
831
+
832
+ n=s->method->ssl_get_message(s,
833
+ SSL3_ST_CR_SRVR_HELLO_A,
834
+ SSL3_ST_CR_SRVR_HELLO_B,
835
+ -1,
836
+ 20000, /* ?? */
837
+ &ok);
838
+
839
+ if (!ok) return((int)n);
840
+
841
+ if ( SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER)
842
+ {
843
+ if ( s->s3->tmp.message_type == DTLS1_MT_HELLO_VERIFY_REQUEST)
844
+ {
845
+ if ( s->d1->send_cookie == 0)
846
+ {
847
+ s->s3->tmp.reuse_message = 1;
848
+ return 1;
849
+ }
850
+ else /* already sent a cookie */
851
+ {
852
+ al=SSL_AD_UNEXPECTED_MESSAGE;
853
+ SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_BAD_MESSAGE_TYPE);
854
+ goto f_err;
855
+ }
856
+ }
857
+ }
858
+
859
+ if ( s->s3->tmp.message_type != SSL3_MT_SERVER_HELLO)
860
+ {
861
+ al=SSL_AD_UNEXPECTED_MESSAGE;
862
+ SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_BAD_MESSAGE_TYPE);
863
+ goto f_err;
864
+ }
865
+
866
+ d=p=(unsigned char *)s->init_msg;
867
+
868
+ if ((p[0] != (s->version>>8)) || (p[1] != (s->version&0xff)))
869
+ {
870
+ SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_WRONG_SSL_VERSION);
871
+ s->version=(s->version&0xff00)|p[1];
872
+ al=SSL_AD_PROTOCOL_VERSION;
873
+ goto f_err;
874
+ }
875
+ p+=2;
876
+
877
+ /* load the server hello data */
878
+ /* load the server random */
879
+ memcpy(s->s3->server_random,p,SSL3_RANDOM_SIZE);
880
+ p+=SSL3_RANDOM_SIZE;
881
+
882
+ /* get the session-id */
883
+ j= *(p++);
884
+
885
+ if ((j > sizeof s->session->session_id) || (j > SSL3_SESSION_ID_SIZE))
886
+ {
887
+ al=SSL_AD_ILLEGAL_PARAMETER;
888
+ SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_SSL3_SESSION_ID_TOO_LONG);
889
+ goto f_err;
890
+ }
891
+
892
+ #ifndef OPENSSL_NO_TLSEXT
893
+ /* check if we want to resume the session based on external pre-shared secret */
894
+ if (s->version >= TLS1_VERSION && s->tls_session_secret_cb)
895
+ {
896
+ SSL_CIPHER *pref_cipher=NULL;
897
+ s->session->master_key_length=sizeof(s->session->master_key);
898
+ if (s->tls_session_secret_cb(s, s->session->master_key,
899
+ &s->session->master_key_length,
900
+ NULL, &pref_cipher,
901
+ s->tls_session_secret_cb_arg))
902
+ {
903
+ s->session->cipher = pref_cipher ?
904
+ pref_cipher : ssl_get_cipher_by_char(s, p+j);
905
+ }
906
+ }
907
+ #endif /* OPENSSL_NO_TLSEXT */
908
+
909
+ if (j != 0 && j == s->session->session_id_length
910
+ && memcmp(p,s->session->session_id,j) == 0)
911
+ {
912
+ if(s->sid_ctx_length != s->session->sid_ctx_length
913
+ || memcmp(s->session->sid_ctx,s->sid_ctx,s->sid_ctx_length))
914
+ {
915
+ /* actually a client application bug */
916
+ al=SSL_AD_ILLEGAL_PARAMETER;
917
+ SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT);
918
+ goto f_err;
919
+ }
920
+ s->hit=1;
921
+ }
922
+ else /* a miss or crap from the other end */
923
+ {
924
+ /* If we were trying for session-id reuse, make a new
925
+ * SSL_SESSION so we don't stuff up other people */
926
+ s->hit=0;
927
+ if (s->session->session_id_length > 0)
928
+ {
929
+ if (!ssl_get_new_session(s,0))
930
+ {
931
+ al=SSL_AD_INTERNAL_ERROR;
932
+ goto f_err;
933
+ }
934
+ }
935
+ s->session->session_id_length=j;
936
+ memcpy(s->session->session_id,p,j); /* j could be 0 */
937
+ }
938
+ p+=j;
939
+ c=ssl_get_cipher_by_char(s,p);
940
+ if (c == NULL)
941
+ {
942
+ /* unknown cipher */
943
+ al=SSL_AD_ILLEGAL_PARAMETER;
944
+ SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_UNKNOWN_CIPHER_RETURNED);
945
+ goto f_err;
946
+ }
947
+ /* TLS v1.2 only ciphersuites require v1.2 or later */
948
+ if ((c->algorithm_ssl & SSL_TLSV1_2) &&
949
+ (TLS1_get_version(s) < TLS1_2_VERSION))
950
+ {
951
+ al=SSL_AD_ILLEGAL_PARAMETER;
952
+ SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_WRONG_CIPHER_RETURNED);
953
+ goto f_err;
954
+ }
955
+ p+=ssl_put_cipher_by_char(s,NULL,NULL);
956
+
957
+ sk=ssl_get_ciphers_by_id(s);
958
+ i=sk_SSL_CIPHER_find(sk,c);
959
+ if (i < 0)
960
+ {
961
+ /* we did not say we would use this cipher */
962
+ al=SSL_AD_ILLEGAL_PARAMETER;
963
+ SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_WRONG_CIPHER_RETURNED);
964
+ goto f_err;
965
+ }
966
+
967
+ /* Depending on the session caching (internal/external), the cipher
968
+ and/or cipher_id values may not be set. Make sure that
969
+ cipher_id is set and use it for comparison. */
970
+ if (s->session->cipher)
971
+ s->session->cipher_id = s->session->cipher->id;
972
+ if (s->hit && (s->session->cipher_id != c->id))
973
+ {
974
+ /* Workaround is now obsolete */
975
+ #if 0
976
+ if (!(s->options &
977
+ SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG))
978
+ #endif
979
+ {
980
+ al=SSL_AD_ILLEGAL_PARAMETER;
981
+ SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED);
982
+ goto f_err;
983
+ }
984
+ }
985
+ s->s3->tmp.new_cipher=c;
986
+ /* Don't digest cached records if TLS v1.2: we may need them for
987
+ * client authentication.
988
+ */
989
+ if (TLS1_get_version(s) < TLS1_2_VERSION && !ssl3_digest_cached_records(s))
990
+ goto f_err;
991
+ /* lets get the compression algorithm */
992
+ /* COMPRESSION */
993
+ #ifdef OPENSSL_NO_COMP
994
+ if (*(p++) != 0)
995
+ {
996
+ al=SSL_AD_ILLEGAL_PARAMETER;
997
+ SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM);
998
+ goto f_err;
999
+ }
1000
+ /* If compression is disabled we'd better not try to resume a session
1001
+ * using compression.
1002
+ */
1003
+ if (s->session->compress_meth != 0)
1004
+ {
1005
+ al=SSL_AD_INTERNAL_ERROR;
1006
+ SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_INCONSISTENT_COMPRESSION);
1007
+ goto f_err;
1008
+ }
1009
+ #else
1010
+ j= *(p++);
1011
+ if (s->hit && j != s->session->compress_meth)
1012
+ {
1013
+ al=SSL_AD_ILLEGAL_PARAMETER;
1014
+ SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED);
1015
+ goto f_err;
1016
+ }
1017
+ if (j == 0)
1018
+ comp=NULL;
1019
+ else if (s->options & SSL_OP_NO_COMPRESSION)
1020
+ {
1021
+ al=SSL_AD_ILLEGAL_PARAMETER;
1022
+ SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_COMPRESSION_DISABLED);
1023
+ goto f_err;
1024
+ }
1025
+ else
1026
+ comp=ssl3_comp_find(s->ctx->comp_methods,j);
1027
+
1028
+ if ((j != 0) && (comp == NULL))
1029
+ {
1030
+ al=SSL_AD_ILLEGAL_PARAMETER;
1031
+ SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM);
1032
+ goto f_err;
1033
+ }
1034
+ else
1035
+ {
1036
+ s->s3->tmp.new_compression=comp;
1037
+ }
1038
+ #endif
1039
+
1040
+ #ifndef OPENSSL_NO_TLSEXT
1041
+ /* TLS extensions*/
1042
+ if (s->version >= SSL3_VERSION)
1043
+ {
1044
+ if (!ssl_parse_serverhello_tlsext(s,&p,d,n, &al))
1045
+ {
1046
+ /* 'al' set by ssl_parse_serverhello_tlsext */
1047
+ SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_PARSE_TLSEXT);
1048
+ goto f_err;
1049
+ }
1050
+ if (ssl_check_serverhello_tlsext(s) <= 0)
1051
+ {
1052
+ SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_SERVERHELLO_TLSEXT);
1053
+ goto err;
1054
+ }
1055
+ }
1056
+ #endif
1057
+
1058
+ if (p != (d+n))
1059
+ {
1060
+ /* wrong packet length */
1061
+ al=SSL_AD_DECODE_ERROR;
1062
+ SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_BAD_PACKET_LENGTH);
1063
+ goto f_err;
1064
+ }
1065
+
1066
+ return(1);
1067
+ f_err:
1068
+ ssl3_send_alert(s,SSL3_AL_FATAL,al);
1069
+ err:
1070
+ return(-1);
1071
+ }
1072
+
1073
+ int ssl3_get_server_certificate(SSL *s)
1074
+ {
1075
+ int al,i,ok,ret= -1;
1076
+ unsigned long n,nc,llen,l;
1077
+ X509 *x=NULL;
1078
+ const unsigned char *q,*p;
1079
+ unsigned char *d;
1080
+ STACK_OF(X509) *sk=NULL;
1081
+ SESS_CERT *sc;
1082
+ EVP_PKEY *pkey=NULL;
1083
+ int need_cert = 1; /* VRS: 0=> will allow null cert if auth == KRB5 */
1084
+
1085
+ n=s->method->ssl_get_message(s,
1086
+ SSL3_ST_CR_CERT_A,
1087
+ SSL3_ST_CR_CERT_B,
1088
+ -1,
1089
+ s->max_cert_list,
1090
+ &ok);
1091
+
1092
+ if (!ok) return((int)n);
1093
+
1094
+ if ((s->s3->tmp.message_type == SSL3_MT_SERVER_KEY_EXCHANGE) ||
1095
+ ((s->s3->tmp.new_cipher->algorithm_auth & SSL_aKRB5) &&
1096
+ (s->s3->tmp.message_type == SSL3_MT_SERVER_DONE)))
1097
+ {
1098
+ s->s3->tmp.reuse_message=1;
1099
+ return(1);
1100
+ }
1101
+
1102
+ if (s->s3->tmp.message_type != SSL3_MT_CERTIFICATE)
1103
+ {
1104
+ al=SSL_AD_UNEXPECTED_MESSAGE;
1105
+ SSLerr(SSL_F_SSL3_GET_SERVER_CERTIFICATE,SSL_R_BAD_MESSAGE_TYPE);
1106
+ goto f_err;
1107
+ }
1108
+ p=d=(unsigned char *)s->init_msg;
1109
+
1110
+ if ((sk=sk_X509_new_null()) == NULL)
1111
+ {
1112
+ SSLerr(SSL_F_SSL3_GET_SERVER_CERTIFICATE,ERR_R_MALLOC_FAILURE);
1113
+ goto err;
1114
+ }
1115
+
1116
+ n2l3(p,llen);
1117
+ if (llen+3 != n)
1118
+ {
1119
+ al=SSL_AD_DECODE_ERROR;
1120
+ SSLerr(SSL_F_SSL3_GET_SERVER_CERTIFICATE,SSL_R_LENGTH_MISMATCH);
1121
+ goto f_err;
1122
+ }
1123
+ for (nc=0; nc<llen; )
1124
+ {
1125
+ n2l3(p,l);
1126
+ if ((l+nc+3) > llen)
1127
+ {
1128
+ al=SSL_AD_DECODE_ERROR;
1129
+ SSLerr(SSL_F_SSL3_GET_SERVER_CERTIFICATE,SSL_R_CERT_LENGTH_MISMATCH);
1130
+ goto f_err;
1131
+ }
1132
+
1133
+ q=p;
1134
+ x=d2i_X509(NULL,&q,l);
1135
+ if (x == NULL)
1136
+ {
1137
+ al=SSL_AD_BAD_CERTIFICATE;
1138
+ SSLerr(SSL_F_SSL3_GET_SERVER_CERTIFICATE,ERR_R_ASN1_LIB);
1139
+ goto f_err;
1140
+ }
1141
+ if (q != (p+l))
1142
+ {
1143
+ al=SSL_AD_DECODE_ERROR;
1144
+ SSLerr(SSL_F_SSL3_GET_SERVER_CERTIFICATE,SSL_R_CERT_LENGTH_MISMATCH);
1145
+ goto f_err;
1146
+ }
1147
+ if (!sk_X509_push(sk,x))
1148
+ {
1149
+ SSLerr(SSL_F_SSL3_GET_SERVER_CERTIFICATE,ERR_R_MALLOC_FAILURE);
1150
+ goto err;
1151
+ }
1152
+ x=NULL;
1153
+ nc+=l+3;
1154
+ p=q;
1155
+ }
1156
+
1157
+ i=ssl_verify_cert_chain(s,sk);
1158
+ if ((s->verify_mode != SSL_VERIFY_NONE) && (i <= 0)
1159
+ #ifndef OPENSSL_NO_KRB5
1160
+ && !((s->s3->tmp.new_cipher->algorithm_mkey & SSL_kKRB5) &&
1161
+ (s->s3->tmp.new_cipher->algorithm_auth & SSL_aKRB5))
1162
+ #endif /* OPENSSL_NO_KRB5 */
1163
+ )
1164
+ {
1165
+ al=ssl_verify_alarm_type(s->verify_result);
1166
+ SSLerr(SSL_F_SSL3_GET_SERVER_CERTIFICATE,SSL_R_CERTIFICATE_VERIFY_FAILED);
1167
+ goto f_err;
1168
+ }
1169
+ ERR_clear_error(); /* but we keep s->verify_result */
1170
+
1171
+ sc=ssl_sess_cert_new();
1172
+ if (sc == NULL) goto err;
1173
+
1174
+ if (s->session->sess_cert) ssl_sess_cert_free(s->session->sess_cert);
1175
+ s->session->sess_cert=sc;
1176
+
1177
+ sc->cert_chain=sk;
1178
+ /* Inconsistency alert: cert_chain does include the peer's
1179
+ * certificate, which we don't include in s3_srvr.c */
1180
+ x=sk_X509_value(sk,0);
1181
+ sk=NULL;
1182
+ /* VRS 19990621: possible memory leak; sk=null ==> !sk_pop_free() @end*/
1183
+
1184
+ pkey=X509_get_pubkey(x);
1185
+
1186
+ /* VRS: allow null cert if auth == KRB5 */
1187
+ need_cert = ((s->s3->tmp.new_cipher->algorithm_mkey & SSL_kKRB5) &&
1188
+ (s->s3->tmp.new_cipher->algorithm_auth & SSL_aKRB5))
1189
+ ? 0 : 1;
1190
+
1191
+ #ifdef KSSL_DEBUG
1192
+ printf("pkey,x = %p, %p\n", pkey,x);
1193
+ printf("ssl_cert_type(x,pkey) = %d\n", ssl_cert_type(x,pkey));
1194
+ printf("cipher, alg, nc = %s, %lx, %lx, %d\n", s->s3->tmp.new_cipher->name,
1195
+ s->s3->tmp.new_cipher->algorithm_mkey, s->s3->tmp.new_cipher->algorithm_auth, need_cert);
1196
+ #endif /* KSSL_DEBUG */
1197
+
1198
+ if (need_cert && ((pkey == NULL) || EVP_PKEY_missing_parameters(pkey)))
1199
+ {
1200
+ x=NULL;
1201
+ al=SSL3_AL_FATAL;
1202
+ SSLerr(SSL_F_SSL3_GET_SERVER_CERTIFICATE,
1203
+ SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS);
1204
+ goto f_err;
1205
+ }
1206
+
1207
+ i=ssl_cert_type(x,pkey);
1208
+ if (need_cert && i < 0)
1209
+ {
1210
+ x=NULL;
1211
+ al=SSL3_AL_FATAL;
1212
+ SSLerr(SSL_F_SSL3_GET_SERVER_CERTIFICATE,
1213
+ SSL_R_UNKNOWN_CERTIFICATE_TYPE);
1214
+ goto f_err;
1215
+ }
1216
+
1217
+ if (need_cert)
1218
+ {
1219
+ sc->peer_cert_type=i;
1220
+ CRYPTO_add(&x->references,1,CRYPTO_LOCK_X509);
1221
+ /* Why would the following ever happen?
1222
+ * We just created sc a couple of lines ago. */
1223
+ if (sc->peer_pkeys[i].x509 != NULL)
1224
+ X509_free(sc->peer_pkeys[i].x509);
1225
+ sc->peer_pkeys[i].x509=x;
1226
+ sc->peer_key= &(sc->peer_pkeys[i]);
1227
+
1228
+ if (s->session->peer != NULL)
1229
+ X509_free(s->session->peer);
1230
+ CRYPTO_add(&x->references,1,CRYPTO_LOCK_X509);
1231
+ s->session->peer=x;
1232
+ }
1233
+ else
1234
+ {
1235
+ sc->peer_cert_type=i;
1236
+ sc->peer_key= NULL;
1237
+
1238
+ if (s->session->peer != NULL)
1239
+ X509_free(s->session->peer);
1240
+ s->session->peer=NULL;
1241
+ }
1242
+ s->session->verify_result = s->verify_result;
1243
+
1244
+ x=NULL;
1245
+ ret=1;
1246
+
1247
+ if (0)
1248
+ {
1249
+ f_err:
1250
+ ssl3_send_alert(s,SSL3_AL_FATAL,al);
1251
+ }
1252
+ err:
1253
+ EVP_PKEY_free(pkey);
1254
+ X509_free(x);
1255
+ sk_X509_pop_free(sk,X509_free);
1256
+ return(ret);
1257
+ }
1258
+
1259
+ int ssl3_get_key_exchange(SSL *s)
1260
+ {
1261
+ #ifndef OPENSSL_NO_RSA
1262
+ unsigned char *q,md_buf[EVP_MAX_MD_SIZE*2];
1263
+ #endif
1264
+ EVP_MD_CTX md_ctx;
1265
+ unsigned char *param,*p;
1266
+ int al,i,j,param_len,ok;
1267
+ long n,alg_k,alg_a;
1268
+ EVP_PKEY *pkey=NULL;
1269
+ const EVP_MD *md = NULL;
1270
+ #ifndef OPENSSL_NO_RSA
1271
+ RSA *rsa=NULL;
1272
+ #endif
1273
+ #ifndef OPENSSL_NO_DH
1274
+ DH *dh=NULL;
1275
+ #endif
1276
+ #ifndef OPENSSL_NO_ECDH
1277
+ EC_KEY *ecdh = NULL;
1278
+ BN_CTX *bn_ctx = NULL;
1279
+ EC_POINT *srvr_ecpoint = NULL;
1280
+ int curve_nid = 0;
1281
+ int encoded_pt_len = 0;
1282
+ #endif
1283
+
1284
+ /* use same message size as in ssl3_get_certificate_request()
1285
+ * as ServerKeyExchange message may be skipped */
1286
+ n=s->method->ssl_get_message(s,
1287
+ SSL3_ST_CR_KEY_EXCH_A,
1288
+ SSL3_ST_CR_KEY_EXCH_B,
1289
+ -1,
1290
+ s->max_cert_list,
1291
+ &ok);
1292
+ if (!ok) return((int)n);
1293
+
1294
+ if (s->s3->tmp.message_type != SSL3_MT_SERVER_KEY_EXCHANGE)
1295
+ {
1296
+ #ifndef OPENSSL_NO_PSK
1297
+ /* In plain PSK ciphersuite, ServerKeyExchange can be
1298
+ omitted if no identity hint is sent. Set
1299
+ session->sess_cert anyway to avoid problems
1300
+ later.*/
1301
+ if (s->s3->tmp.new_cipher->algorithm_mkey & SSL_kPSK)
1302
+ {
1303
+ s->session->sess_cert=ssl_sess_cert_new();
1304
+ if (s->ctx->psk_identity_hint)
1305
+ OPENSSL_free(s->ctx->psk_identity_hint);
1306
+ s->ctx->psk_identity_hint = NULL;
1307
+ }
1308
+ #endif
1309
+ s->s3->tmp.reuse_message=1;
1310
+ return(1);
1311
+ }
1312
+
1313
+ param=p=(unsigned char *)s->init_msg;
1314
+ if (s->session->sess_cert != NULL)
1315
+ {
1316
+ #ifndef OPENSSL_NO_RSA
1317
+ if (s->session->sess_cert->peer_rsa_tmp != NULL)
1318
+ {
1319
+ RSA_free(s->session->sess_cert->peer_rsa_tmp);
1320
+ s->session->sess_cert->peer_rsa_tmp=NULL;
1321
+ }
1322
+ #endif
1323
+ #ifndef OPENSSL_NO_DH
1324
+ if (s->session->sess_cert->peer_dh_tmp)
1325
+ {
1326
+ DH_free(s->session->sess_cert->peer_dh_tmp);
1327
+ s->session->sess_cert->peer_dh_tmp=NULL;
1328
+ }
1329
+ #endif
1330
+ #ifndef OPENSSL_NO_ECDH
1331
+ if (s->session->sess_cert->peer_ecdh_tmp)
1332
+ {
1333
+ EC_KEY_free(s->session->sess_cert->peer_ecdh_tmp);
1334
+ s->session->sess_cert->peer_ecdh_tmp=NULL;
1335
+ }
1336
+ #endif
1337
+ }
1338
+ else
1339
+ {
1340
+ s->session->sess_cert=ssl_sess_cert_new();
1341
+ }
1342
+
1343
+ param_len=0;
1344
+ alg_k=s->s3->tmp.new_cipher->algorithm_mkey;
1345
+ alg_a=s->s3->tmp.new_cipher->algorithm_auth;
1346
+ EVP_MD_CTX_init(&md_ctx);
1347
+
1348
+ #ifndef OPENSSL_NO_PSK
1349
+ if (alg_k & SSL_kPSK)
1350
+ {
1351
+ char tmp_id_hint[PSK_MAX_IDENTITY_LEN+1];
1352
+
1353
+ al=SSL_AD_HANDSHAKE_FAILURE;
1354
+ n2s(p,i);
1355
+ param_len=i+2;
1356
+ /* Store PSK identity hint for later use, hint is used
1357
+ * in ssl3_send_client_key_exchange. Assume that the
1358
+ * maximum length of a PSK identity hint can be as
1359
+ * long as the maximum length of a PSK identity. */
1360
+ if (i > PSK_MAX_IDENTITY_LEN)
1361
+ {
1362
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,
1363
+ SSL_R_DATA_LENGTH_TOO_LONG);
1364
+ goto f_err;
1365
+ }
1366
+ if (param_len > n)
1367
+ {
1368
+ al=SSL_AD_DECODE_ERROR;
1369
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,
1370
+ SSL_R_BAD_PSK_IDENTITY_HINT_LENGTH);
1371
+ goto f_err;
1372
+ }
1373
+ /* If received PSK identity hint contains NULL
1374
+ * characters, the hint is truncated from the first
1375
+ * NULL. p may not be ending with NULL, so create a
1376
+ * NULL-terminated string. */
1377
+ memcpy(tmp_id_hint, p, i);
1378
+ memset(tmp_id_hint+i, 0, PSK_MAX_IDENTITY_LEN+1-i);
1379
+ if (s->ctx->psk_identity_hint != NULL)
1380
+ OPENSSL_free(s->ctx->psk_identity_hint);
1381
+ s->ctx->psk_identity_hint = BUF_strdup(tmp_id_hint);
1382
+ if (s->ctx->psk_identity_hint == NULL)
1383
+ {
1384
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, ERR_R_MALLOC_FAILURE);
1385
+ goto f_err;
1386
+ }
1387
+
1388
+ p+=i;
1389
+ n-=param_len;
1390
+ }
1391
+ else
1392
+ #endif /* !OPENSSL_NO_PSK */
1393
+ #ifndef OPENSSL_NO_SRP
1394
+ if (alg_k & SSL_kSRP)
1395
+ {
1396
+ n2s(p,i);
1397
+ param_len=i+2;
1398
+ if (param_len > n)
1399
+ {
1400
+ al=SSL_AD_DECODE_ERROR;
1401
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_BAD_SRP_N_LENGTH);
1402
+ goto f_err;
1403
+ }
1404
+ if (!(s->srp_ctx.N=BN_bin2bn(p,i,NULL)))
1405
+ {
1406
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,ERR_R_BN_LIB);
1407
+ goto err;
1408
+ }
1409
+ p+=i;
1410
+
1411
+ n2s(p,i);
1412
+ param_len+=i+2;
1413
+ if (param_len > n)
1414
+ {
1415
+ al=SSL_AD_DECODE_ERROR;
1416
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_BAD_SRP_G_LENGTH);
1417
+ goto f_err;
1418
+ }
1419
+ if (!(s->srp_ctx.g=BN_bin2bn(p,i,NULL)))
1420
+ {
1421
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,ERR_R_BN_LIB);
1422
+ goto err;
1423
+ }
1424
+ p+=i;
1425
+
1426
+ i = (unsigned int)(p[0]);
1427
+ p++;
1428
+ param_len+=i+1;
1429
+ if (param_len > n)
1430
+ {
1431
+ al=SSL_AD_DECODE_ERROR;
1432
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_BAD_SRP_S_LENGTH);
1433
+ goto f_err;
1434
+ }
1435
+ if (!(s->srp_ctx.s=BN_bin2bn(p,i,NULL)))
1436
+ {
1437
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,ERR_R_BN_LIB);
1438
+ goto err;
1439
+ }
1440
+ p+=i;
1441
+
1442
+ n2s(p,i);
1443
+ param_len+=i+2;
1444
+ if (param_len > n)
1445
+ {
1446
+ al=SSL_AD_DECODE_ERROR;
1447
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_BAD_SRP_B_LENGTH);
1448
+ goto f_err;
1449
+ }
1450
+ if (!(s->srp_ctx.B=BN_bin2bn(p,i,NULL)))
1451
+ {
1452
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,ERR_R_BN_LIB);
1453
+ goto err;
1454
+ }
1455
+ p+=i;
1456
+ n-=param_len;
1457
+
1458
+ /* We must check if there is a certificate */
1459
+ #ifndef OPENSSL_NO_RSA
1460
+ if (alg_a & SSL_aRSA)
1461
+ pkey=X509_get_pubkey(s->session->sess_cert->peer_pkeys[SSL_PKEY_RSA_ENC].x509);
1462
+ #else
1463
+ if (0)
1464
+ ;
1465
+ #endif
1466
+ #ifndef OPENSSL_NO_DSA
1467
+ else if (alg_a & SSL_aDSS)
1468
+ pkey=X509_get_pubkey(s->session->sess_cert->peer_pkeys[SSL_PKEY_DSA_SIGN].x509);
1469
+ #endif
1470
+ }
1471
+ else
1472
+ #endif /* !OPENSSL_NO_SRP */
1473
+ #ifndef OPENSSL_NO_RSA
1474
+ if (alg_k & SSL_kRSA)
1475
+ {
1476
+ if ((rsa=RSA_new()) == NULL)
1477
+ {
1478
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,ERR_R_MALLOC_FAILURE);
1479
+ goto err;
1480
+ }
1481
+ n2s(p,i);
1482
+ param_len=i+2;
1483
+ if (param_len > n)
1484
+ {
1485
+ al=SSL_AD_DECODE_ERROR;
1486
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_BAD_RSA_MODULUS_LENGTH);
1487
+ goto f_err;
1488
+ }
1489
+ if (!(rsa->n=BN_bin2bn(p,i,rsa->n)))
1490
+ {
1491
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,ERR_R_BN_LIB);
1492
+ goto err;
1493
+ }
1494
+ p+=i;
1495
+
1496
+ n2s(p,i);
1497
+ param_len+=i+2;
1498
+ if (param_len > n)
1499
+ {
1500
+ al=SSL_AD_DECODE_ERROR;
1501
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_BAD_RSA_E_LENGTH);
1502
+ goto f_err;
1503
+ }
1504
+ if (!(rsa->e=BN_bin2bn(p,i,rsa->e)))
1505
+ {
1506
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,ERR_R_BN_LIB);
1507
+ goto err;
1508
+ }
1509
+ p+=i;
1510
+ n-=param_len;
1511
+
1512
+ /* this should be because we are using an export cipher */
1513
+ if (alg_a & SSL_aRSA)
1514
+ pkey=X509_get_pubkey(s->session->sess_cert->peer_pkeys[SSL_PKEY_RSA_ENC].x509);
1515
+ else
1516
+ {
1517
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,ERR_R_INTERNAL_ERROR);
1518
+ goto err;
1519
+ }
1520
+ s->session->sess_cert->peer_rsa_tmp=rsa;
1521
+ rsa=NULL;
1522
+ }
1523
+ #else /* OPENSSL_NO_RSA */
1524
+ if (0)
1525
+ ;
1526
+ #endif
1527
+ #ifndef OPENSSL_NO_DH
1528
+ else if (alg_k & SSL_kEDH)
1529
+ {
1530
+ if ((dh=DH_new()) == NULL)
1531
+ {
1532
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,ERR_R_DH_LIB);
1533
+ goto err;
1534
+ }
1535
+ n2s(p,i);
1536
+ param_len=i+2;
1537
+ if (param_len > n)
1538
+ {
1539
+ al=SSL_AD_DECODE_ERROR;
1540
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_BAD_DH_P_LENGTH);
1541
+ goto f_err;
1542
+ }
1543
+ if (!(dh->p=BN_bin2bn(p,i,NULL)))
1544
+ {
1545
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,ERR_R_BN_LIB);
1546
+ goto err;
1547
+ }
1548
+ p+=i;
1549
+
1550
+ n2s(p,i);
1551
+ param_len+=i+2;
1552
+ if (param_len > n)
1553
+ {
1554
+ al=SSL_AD_DECODE_ERROR;
1555
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_BAD_DH_G_LENGTH);
1556
+ goto f_err;
1557
+ }
1558
+ if (!(dh->g=BN_bin2bn(p,i,NULL)))
1559
+ {
1560
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,ERR_R_BN_LIB);
1561
+ goto err;
1562
+ }
1563
+ p+=i;
1564
+
1565
+ n2s(p,i);
1566
+ param_len+=i+2;
1567
+ if (param_len > n)
1568
+ {
1569
+ al=SSL_AD_DECODE_ERROR;
1570
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_BAD_DH_PUB_KEY_LENGTH);
1571
+ goto f_err;
1572
+ }
1573
+ if (!(dh->pub_key=BN_bin2bn(p,i,NULL)))
1574
+ {
1575
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,ERR_R_BN_LIB);
1576
+ goto err;
1577
+ }
1578
+ p+=i;
1579
+ n-=param_len;
1580
+
1581
+ #ifndef OPENSSL_NO_RSA
1582
+ if (alg_a & SSL_aRSA)
1583
+ pkey=X509_get_pubkey(s->session->sess_cert->peer_pkeys[SSL_PKEY_RSA_ENC].x509);
1584
+ #else
1585
+ if (0)
1586
+ ;
1587
+ #endif
1588
+ #ifndef OPENSSL_NO_DSA
1589
+ else if (alg_a & SSL_aDSS)
1590
+ pkey=X509_get_pubkey(s->session->sess_cert->peer_pkeys[SSL_PKEY_DSA_SIGN].x509);
1591
+ #endif
1592
+ /* else anonymous DH, so no certificate or pkey. */
1593
+
1594
+ s->session->sess_cert->peer_dh_tmp=dh;
1595
+ dh=NULL;
1596
+ }
1597
+ else if ((alg_k & SSL_kDHr) || (alg_k & SSL_kDHd))
1598
+ {
1599
+ al=SSL_AD_ILLEGAL_PARAMETER;
1600
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_TRIED_TO_USE_UNSUPPORTED_CIPHER);
1601
+ goto f_err;
1602
+ }
1603
+ #endif /* !OPENSSL_NO_DH */
1604
+
1605
+ #ifndef OPENSSL_NO_ECDH
1606
+ else if (alg_k & SSL_kEECDH)
1607
+ {
1608
+ EC_GROUP *ngroup;
1609
+ const EC_GROUP *group;
1610
+
1611
+ if ((ecdh=EC_KEY_new()) == NULL)
1612
+ {
1613
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,ERR_R_MALLOC_FAILURE);
1614
+ goto err;
1615
+ }
1616
+
1617
+ /* Extract elliptic curve parameters and the
1618
+ * server's ephemeral ECDH public key.
1619
+ * Keep accumulating lengths of various components in
1620
+ * param_len and make sure it never exceeds n.
1621
+ */
1622
+
1623
+ /* XXX: For now we only support named (not generic) curves
1624
+ * and the ECParameters in this case is just three bytes.
1625
+ */
1626
+ param_len=3;
1627
+ if ((param_len > n) ||
1628
+ (*p != NAMED_CURVE_TYPE) ||
1629
+ ((curve_nid = tls1_ec_curve_id2nid(*(p + 2))) == 0))
1630
+ {
1631
+ al=SSL_AD_INTERNAL_ERROR;
1632
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS);
1633
+ goto f_err;
1634
+ }
1635
+
1636
+ ngroup = EC_GROUP_new_by_curve_name(curve_nid);
1637
+ if (ngroup == NULL)
1638
+ {
1639
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,ERR_R_EC_LIB);
1640
+ goto err;
1641
+ }
1642
+ if (EC_KEY_set_group(ecdh, ngroup) == 0)
1643
+ {
1644
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,ERR_R_EC_LIB);
1645
+ goto err;
1646
+ }
1647
+ EC_GROUP_free(ngroup);
1648
+
1649
+ group = EC_KEY_get0_group(ecdh);
1650
+
1651
+ if (SSL_C_IS_EXPORT(s->s3->tmp.new_cipher) &&
1652
+ (EC_GROUP_get_degree(group) > 163))
1653
+ {
1654
+ al=SSL_AD_EXPORT_RESTRICTION;
1655
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_ECGROUP_TOO_LARGE_FOR_CIPHER);
1656
+ goto f_err;
1657
+ }
1658
+
1659
+ p+=3;
1660
+
1661
+ /* Next, get the encoded ECPoint */
1662
+ if (((srvr_ecpoint = EC_POINT_new(group)) == NULL) ||
1663
+ ((bn_ctx = BN_CTX_new()) == NULL))
1664
+ {
1665
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,ERR_R_MALLOC_FAILURE);
1666
+ goto err;
1667
+ }
1668
+
1669
+ encoded_pt_len = *p; /* length of encoded point */
1670
+ p+=1;
1671
+ param_len += (1 + encoded_pt_len);
1672
+ if ((param_len > n) ||
1673
+ (EC_POINT_oct2point(group, srvr_ecpoint,
1674
+ p, encoded_pt_len, bn_ctx) == 0))
1675
+ {
1676
+ al=SSL_AD_DECODE_ERROR;
1677
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_BAD_ECPOINT);
1678
+ goto f_err;
1679
+ }
1680
+
1681
+ n-=param_len;
1682
+ p+=encoded_pt_len;
1683
+
1684
+ /* The ECC/TLS specification does not mention
1685
+ * the use of DSA to sign ECParameters in the server
1686
+ * key exchange message. We do support RSA and ECDSA.
1687
+ */
1688
+ if (0) ;
1689
+ #ifndef OPENSSL_NO_RSA
1690
+ else if (alg_a & SSL_aRSA)
1691
+ pkey=X509_get_pubkey(s->session->sess_cert->peer_pkeys[SSL_PKEY_RSA_ENC].x509);
1692
+ #endif
1693
+ #ifndef OPENSSL_NO_ECDSA
1694
+ else if (alg_a & SSL_aECDSA)
1695
+ pkey=X509_get_pubkey(s->session->sess_cert->peer_pkeys[SSL_PKEY_ECC].x509);
1696
+ #endif
1697
+ /* else anonymous ECDH, so no certificate or pkey. */
1698
+ EC_KEY_set_public_key(ecdh, srvr_ecpoint);
1699
+ s->session->sess_cert->peer_ecdh_tmp=ecdh;
1700
+ ecdh=NULL;
1701
+ BN_CTX_free(bn_ctx);
1702
+ bn_ctx = NULL;
1703
+ EC_POINT_free(srvr_ecpoint);
1704
+ srvr_ecpoint = NULL;
1705
+ }
1706
+ else if (alg_k)
1707
+ {
1708
+ al=SSL_AD_UNEXPECTED_MESSAGE;
1709
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_UNEXPECTED_MESSAGE);
1710
+ goto f_err;
1711
+ }
1712
+ #endif /* !OPENSSL_NO_ECDH */
1713
+
1714
+
1715
+ /* p points to the next byte, there are 'n' bytes left */
1716
+
1717
+ /* if it was signed, check the signature */
1718
+ if (pkey != NULL)
1719
+ {
1720
+ if (TLS1_get_version(s) >= TLS1_2_VERSION)
1721
+ {
1722
+ int sigalg = tls12_get_sigid(pkey);
1723
+ /* Should never happen */
1724
+ if (sigalg == -1)
1725
+ {
1726
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,ERR_R_INTERNAL_ERROR);
1727
+ goto err;
1728
+ }
1729
+ /* Check key type is consistent with signature */
1730
+ if (sigalg != (int)p[1])
1731
+ {
1732
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_WRONG_SIGNATURE_TYPE);
1733
+ al=SSL_AD_DECODE_ERROR;
1734
+ goto f_err;
1735
+ }
1736
+ md = tls12_get_hash(p[0]);
1737
+ if (md == NULL)
1738
+ {
1739
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_UNKNOWN_DIGEST);
1740
+ al=SSL_AD_DECODE_ERROR;
1741
+ goto f_err;
1742
+ }
1743
+ #ifdef SSL_DEBUG
1744
+ fprintf(stderr, "USING TLSv1.2 HASH %s\n", EVP_MD_name(md));
1745
+ #endif
1746
+ p += 2;
1747
+ n -= 2;
1748
+ }
1749
+ else
1750
+ md = EVP_sha1();
1751
+
1752
+ n2s(p,i);
1753
+ n-=2;
1754
+ j=EVP_PKEY_size(pkey);
1755
+
1756
+ if ((i != n) || (n > j) || (n <= 0))
1757
+ {
1758
+ /* wrong packet length */
1759
+ al=SSL_AD_DECODE_ERROR;
1760
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_WRONG_SIGNATURE_LENGTH);
1761
+ goto f_err;
1762
+ }
1763
+
1764
+ #ifndef OPENSSL_NO_RSA
1765
+ if (pkey->type == EVP_PKEY_RSA && TLS1_get_version(s) < TLS1_2_VERSION)
1766
+ {
1767
+ int num;
1768
+
1769
+ j=0;
1770
+ q=md_buf;
1771
+ for (num=2; num > 0; num--)
1772
+ {
1773
+ EVP_MD_CTX_set_flags(&md_ctx,
1774
+ EVP_MD_CTX_FLAG_NON_FIPS_ALLOW);
1775
+ EVP_DigestInit_ex(&md_ctx,(num == 2)
1776
+ ?s->ctx->md5:s->ctx->sha1, NULL);
1777
+ EVP_DigestUpdate(&md_ctx,&(s->s3->client_random[0]),SSL3_RANDOM_SIZE);
1778
+ EVP_DigestUpdate(&md_ctx,&(s->s3->server_random[0]),SSL3_RANDOM_SIZE);
1779
+ EVP_DigestUpdate(&md_ctx,param,param_len);
1780
+ EVP_DigestFinal_ex(&md_ctx,q,(unsigned int *)&i);
1781
+ q+=i;
1782
+ j+=i;
1783
+ }
1784
+ i=RSA_verify(NID_md5_sha1, md_buf, j, p, n,
1785
+ pkey->pkey.rsa);
1786
+ if (i < 0)
1787
+ {
1788
+ al=SSL_AD_DECRYPT_ERROR;
1789
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_BAD_RSA_DECRYPT);
1790
+ goto f_err;
1791
+ }
1792
+ if (i == 0)
1793
+ {
1794
+ /* bad signature */
1795
+ al=SSL_AD_DECRYPT_ERROR;
1796
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_BAD_SIGNATURE);
1797
+ goto f_err;
1798
+ }
1799
+ }
1800
+ else
1801
+ #endif
1802
+ {
1803
+ EVP_VerifyInit_ex(&md_ctx, md, NULL);
1804
+ EVP_VerifyUpdate(&md_ctx,&(s->s3->client_random[0]),SSL3_RANDOM_SIZE);
1805
+ EVP_VerifyUpdate(&md_ctx,&(s->s3->server_random[0]),SSL3_RANDOM_SIZE);
1806
+ EVP_VerifyUpdate(&md_ctx,param,param_len);
1807
+ if (EVP_VerifyFinal(&md_ctx,p,(int)n,pkey) <= 0)
1808
+ {
1809
+ /* bad signature */
1810
+ al=SSL_AD_DECRYPT_ERROR;
1811
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_BAD_SIGNATURE);
1812
+ goto f_err;
1813
+ }
1814
+ }
1815
+ }
1816
+ else
1817
+ {
1818
+ if (!(alg_a & SSL_aNULL) && !(alg_k & SSL_kPSK))
1819
+ /* aNULL or kPSK do not need public keys */
1820
+ {
1821
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,ERR_R_INTERNAL_ERROR);
1822
+ goto err;
1823
+ }
1824
+ /* still data left over */
1825
+ if (n != 0)
1826
+ {
1827
+ al=SSL_AD_DECODE_ERROR;
1828
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,SSL_R_EXTRA_DATA_IN_MESSAGE);
1829
+ goto f_err;
1830
+ }
1831
+ }
1832
+ EVP_PKEY_free(pkey);
1833
+ EVP_MD_CTX_cleanup(&md_ctx);
1834
+ return(1);
1835
+ f_err:
1836
+ ssl3_send_alert(s,SSL3_AL_FATAL,al);
1837
+ err:
1838
+ EVP_PKEY_free(pkey);
1839
+ #ifndef OPENSSL_NO_RSA
1840
+ if (rsa != NULL)
1841
+ RSA_free(rsa);
1842
+ #endif
1843
+ #ifndef OPENSSL_NO_DH
1844
+ if (dh != NULL)
1845
+ DH_free(dh);
1846
+ #endif
1847
+ #ifndef OPENSSL_NO_ECDH
1848
+ BN_CTX_free(bn_ctx);
1849
+ EC_POINT_free(srvr_ecpoint);
1850
+ if (ecdh != NULL)
1851
+ EC_KEY_free(ecdh);
1852
+ #endif
1853
+ EVP_MD_CTX_cleanup(&md_ctx);
1854
+ return(-1);
1855
+ }
1856
+
1857
+ int ssl3_get_certificate_request(SSL *s)
1858
+ {
1859
+ int ok,ret=0;
1860
+ unsigned long n,nc,l;
1861
+ unsigned int llen, ctype_num,i;
1862
+ X509_NAME *xn=NULL;
1863
+ const unsigned char *p,*q;
1864
+ unsigned char *d;
1865
+ STACK_OF(X509_NAME) *ca_sk=NULL;
1866
+
1867
+ n=s->method->ssl_get_message(s,
1868
+ SSL3_ST_CR_CERT_REQ_A,
1869
+ SSL3_ST_CR_CERT_REQ_B,
1870
+ -1,
1871
+ s->max_cert_list,
1872
+ &ok);
1873
+
1874
+ if (!ok) return((int)n);
1875
+
1876
+ s->s3->tmp.cert_req=0;
1877
+
1878
+ if (s->s3->tmp.message_type == SSL3_MT_SERVER_DONE)
1879
+ {
1880
+ s->s3->tmp.reuse_message=1;
1881
+ /* If we get here we don't need any cached handshake records
1882
+ * as we wont be doing client auth.
1883
+ */
1884
+ if (s->s3->handshake_buffer)
1885
+ {
1886
+ if (!ssl3_digest_cached_records(s))
1887
+ goto err;
1888
+ }
1889
+ return(1);
1890
+ }
1891
+
1892
+ if (s->s3->tmp.message_type != SSL3_MT_CERTIFICATE_REQUEST)
1893
+ {
1894
+ ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_UNEXPECTED_MESSAGE);
1895
+ SSLerr(SSL_F_SSL3_GET_CERTIFICATE_REQUEST,SSL_R_WRONG_MESSAGE_TYPE);
1896
+ goto err;
1897
+ }
1898
+
1899
+ /* TLS does not like anon-DH with client cert */
1900
+ if (s->version > SSL3_VERSION)
1901
+ {
1902
+ if (s->s3->tmp.new_cipher->algorithm_auth & SSL_aNULL)
1903
+ {
1904
+ ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_UNEXPECTED_MESSAGE);
1905
+ SSLerr(SSL_F_SSL3_GET_CERTIFICATE_REQUEST,SSL_R_TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER);
1906
+ goto err;
1907
+ }
1908
+ }
1909
+
1910
+ p=d=(unsigned char *)s->init_msg;
1911
+
1912
+ if ((ca_sk=sk_X509_NAME_new(ca_dn_cmp)) == NULL)
1913
+ {
1914
+ SSLerr(SSL_F_SSL3_GET_CERTIFICATE_REQUEST,ERR_R_MALLOC_FAILURE);
1915
+ goto err;
1916
+ }
1917
+
1918
+ /* get the certificate types */
1919
+ ctype_num= *(p++);
1920
+ if (ctype_num > SSL3_CT_NUMBER)
1921
+ ctype_num=SSL3_CT_NUMBER;
1922
+ for (i=0; i<ctype_num; i++)
1923
+ s->s3->tmp.ctype[i]= p[i];
1924
+ p+=ctype_num;
1925
+ if (TLS1_get_version(s) >= TLS1_2_VERSION)
1926
+ {
1927
+ n2s(p, llen);
1928
+ /* Check we have enough room for signature algorithms and
1929
+ * following length value.
1930
+ */
1931
+ if ((unsigned long)(p - d + llen + 2) > n)
1932
+ {
1933
+ ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_DECODE_ERROR);
1934
+ SSLerr(SSL_F_SSL3_GET_CERTIFICATE_REQUEST,SSL_R_DATA_LENGTH_TOO_LONG);
1935
+ goto err;
1936
+ }
1937
+ if ((llen & 1) || !tls1_process_sigalgs(s, p, llen))
1938
+ {
1939
+ ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_DECODE_ERROR);
1940
+ SSLerr(SSL_F_SSL3_GET_CERTIFICATE_REQUEST,SSL_R_SIGNATURE_ALGORITHMS_ERROR);
1941
+ goto err;
1942
+ }
1943
+ p += llen;
1944
+ }
1945
+
1946
+ /* get the CA RDNs */
1947
+ n2s(p,llen);
1948
+ #if 0
1949
+ {
1950
+ FILE *out;
1951
+ out=fopen("/tmp/vsign.der","w");
1952
+ fwrite(p,1,llen,out);
1953
+ fclose(out);
1954
+ }
1955
+ #endif
1956
+
1957
+ if ((unsigned long)(p - d + llen) != n)
1958
+ {
1959
+ ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_DECODE_ERROR);
1960
+ SSLerr(SSL_F_SSL3_GET_CERTIFICATE_REQUEST,SSL_R_LENGTH_MISMATCH);
1961
+ goto err;
1962
+ }
1963
+
1964
+ for (nc=0; nc<llen; )
1965
+ {
1966
+ n2s(p,l);
1967
+ if ((l+nc+2) > llen)
1968
+ {
1969
+ if ((s->options & SSL_OP_NETSCAPE_CA_DN_BUG))
1970
+ goto cont; /* netscape bugs */
1971
+ ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_DECODE_ERROR);
1972
+ SSLerr(SSL_F_SSL3_GET_CERTIFICATE_REQUEST,SSL_R_CA_DN_TOO_LONG);
1973
+ goto err;
1974
+ }
1975
+
1976
+ q=p;
1977
+
1978
+ if ((xn=d2i_X509_NAME(NULL,&q,l)) == NULL)
1979
+ {
1980
+ /* If netscape tolerance is on, ignore errors */
1981
+ if (s->options & SSL_OP_NETSCAPE_CA_DN_BUG)
1982
+ goto cont;
1983
+ else
1984
+ {
1985
+ ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_DECODE_ERROR);
1986
+ SSLerr(SSL_F_SSL3_GET_CERTIFICATE_REQUEST,ERR_R_ASN1_LIB);
1987
+ goto err;
1988
+ }
1989
+ }
1990
+
1991
+ if (q != (p+l))
1992
+ {
1993
+ ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_DECODE_ERROR);
1994
+ SSLerr(SSL_F_SSL3_GET_CERTIFICATE_REQUEST,SSL_R_CA_DN_LENGTH_MISMATCH);
1995
+ goto err;
1996
+ }
1997
+ if (!sk_X509_NAME_push(ca_sk,xn))
1998
+ {
1999
+ SSLerr(SSL_F_SSL3_GET_CERTIFICATE_REQUEST,ERR_R_MALLOC_FAILURE);
2000
+ goto err;
2001
+ }
2002
+
2003
+ p+=l;
2004
+ nc+=l+2;
2005
+ }
2006
+
2007
+ if (0)
2008
+ {
2009
+ cont:
2010
+ ERR_clear_error();
2011
+ }
2012
+
2013
+ /* we should setup a certificate to return.... */
2014
+ s->s3->tmp.cert_req=1;
2015
+ s->s3->tmp.ctype_num=ctype_num;
2016
+ if (s->s3->tmp.ca_names != NULL)
2017
+ sk_X509_NAME_pop_free(s->s3->tmp.ca_names,X509_NAME_free);
2018
+ s->s3->tmp.ca_names=ca_sk;
2019
+ ca_sk=NULL;
2020
+
2021
+ ret=1;
2022
+ err:
2023
+ if (ca_sk != NULL) sk_X509_NAME_pop_free(ca_sk,X509_NAME_free);
2024
+ return(ret);
2025
+ }
2026
+
2027
+ static int ca_dn_cmp(const X509_NAME * const *a, const X509_NAME * const *b)
2028
+ {
2029
+ return(X509_NAME_cmp(*a,*b));
2030
+ }
2031
+ #ifndef OPENSSL_NO_TLSEXT
2032
+ int ssl3_get_new_session_ticket(SSL *s)
2033
+ {
2034
+ int ok,al,ret=0, ticklen;
2035
+ long n;
2036
+ const unsigned char *p;
2037
+ unsigned char *d;
2038
+
2039
+ n=s->method->ssl_get_message(s,
2040
+ SSL3_ST_CR_SESSION_TICKET_A,
2041
+ SSL3_ST_CR_SESSION_TICKET_B,
2042
+ -1,
2043
+ 16384,
2044
+ &ok);
2045
+
2046
+ if (!ok)
2047
+ return((int)n);
2048
+
2049
+ if (s->s3->tmp.message_type == SSL3_MT_FINISHED)
2050
+ {
2051
+ s->s3->tmp.reuse_message=1;
2052
+ return(1);
2053
+ }
2054
+ if (s->s3->tmp.message_type != SSL3_MT_NEWSESSION_TICKET)
2055
+ {
2056
+ al=SSL_AD_UNEXPECTED_MESSAGE;
2057
+ SSLerr(SSL_F_SSL3_GET_NEW_SESSION_TICKET,SSL_R_BAD_MESSAGE_TYPE);
2058
+ goto f_err;
2059
+ }
2060
+ if (n < 6)
2061
+ {
2062
+ /* need at least ticket_lifetime_hint + ticket length */
2063
+ al = SSL_AD_DECODE_ERROR;
2064
+ SSLerr(SSL_F_SSL3_GET_NEW_SESSION_TICKET,SSL_R_LENGTH_MISMATCH);
2065
+ goto f_err;
2066
+ }
2067
+
2068
+ p=d=(unsigned char *)s->init_msg;
2069
+ n2l(p, s->session->tlsext_tick_lifetime_hint);
2070
+ n2s(p, ticklen);
2071
+ /* ticket_lifetime_hint + ticket_length + ticket */
2072
+ if (ticklen + 6 != n)
2073
+ {
2074
+ al = SSL_AD_DECODE_ERROR;
2075
+ SSLerr(SSL_F_SSL3_GET_NEW_SESSION_TICKET,SSL_R_LENGTH_MISMATCH);
2076
+ goto f_err;
2077
+ }
2078
+ if (s->session->tlsext_tick)
2079
+ {
2080
+ OPENSSL_free(s->session->tlsext_tick);
2081
+ s->session->tlsext_ticklen = 0;
2082
+ }
2083
+ s->session->tlsext_tick = OPENSSL_malloc(ticklen);
2084
+ if (!s->session->tlsext_tick)
2085
+ {
2086
+ SSLerr(SSL_F_SSL3_GET_NEW_SESSION_TICKET,ERR_R_MALLOC_FAILURE);
2087
+ goto err;
2088
+ }
2089
+ memcpy(s->session->tlsext_tick, p, ticklen);
2090
+ s->session->tlsext_ticklen = ticklen;
2091
+ /* There are two ways to detect a resumed ticket sesion.
2092
+ * One is to set an appropriate session ID and then the server
2093
+ * must return a match in ServerHello. This allows the normal
2094
+ * client session ID matching to work and we know much
2095
+ * earlier that the ticket has been accepted.
2096
+ *
2097
+ * The other way is to set zero length session ID when the
2098
+ * ticket is presented and rely on the handshake to determine
2099
+ * session resumption.
2100
+ *
2101
+ * We choose the former approach because this fits in with
2102
+ * assumptions elsewhere in OpenSSL. The session ID is set
2103
+ * to the SHA256 (or SHA1 is SHA256 is disabled) hash of the
2104
+ * ticket.
2105
+ */
2106
+ EVP_Digest(p, ticklen,
2107
+ s->session->session_id, &s->session->session_id_length,
2108
+ #ifndef OPENSSL_NO_SHA256
2109
+ EVP_sha256(), NULL);
2110
+ #else
2111
+ EVP_sha1(), NULL);
2112
+ #endif
2113
+ ret=1;
2114
+ return(ret);
2115
+ f_err:
2116
+ ssl3_send_alert(s,SSL3_AL_FATAL,al);
2117
+ err:
2118
+ return(-1);
2119
+ }
2120
+
2121
+ int ssl3_get_cert_status(SSL *s)
2122
+ {
2123
+ int ok, al;
2124
+ unsigned long resplen,n;
2125
+ const unsigned char *p;
2126
+
2127
+ n=s->method->ssl_get_message(s,
2128
+ SSL3_ST_CR_CERT_STATUS_A,
2129
+ SSL3_ST_CR_CERT_STATUS_B,
2130
+ SSL3_MT_CERTIFICATE_STATUS,
2131
+ 16384,
2132
+ &ok);
2133
+
2134
+ if (!ok) return((int)n);
2135
+ if (n < 4)
2136
+ {
2137
+ /* need at least status type + length */
2138
+ al = SSL_AD_DECODE_ERROR;
2139
+ SSLerr(SSL_F_SSL3_GET_CERT_STATUS,SSL_R_LENGTH_MISMATCH);
2140
+ goto f_err;
2141
+ }
2142
+ p = (unsigned char *)s->init_msg;
2143
+ if (*p++ != TLSEXT_STATUSTYPE_ocsp)
2144
+ {
2145
+ al = SSL_AD_DECODE_ERROR;
2146
+ SSLerr(SSL_F_SSL3_GET_CERT_STATUS,SSL_R_UNSUPPORTED_STATUS_TYPE);
2147
+ goto f_err;
2148
+ }
2149
+ n2l3(p, resplen);
2150
+ if (resplen + 4 != n)
2151
+ {
2152
+ al = SSL_AD_DECODE_ERROR;
2153
+ SSLerr(SSL_F_SSL3_GET_CERT_STATUS,SSL_R_LENGTH_MISMATCH);
2154
+ goto f_err;
2155
+ }
2156
+ if (s->tlsext_ocsp_resp)
2157
+ OPENSSL_free(s->tlsext_ocsp_resp);
2158
+ s->tlsext_ocsp_resp = BUF_memdup(p, resplen);
2159
+ if (!s->tlsext_ocsp_resp)
2160
+ {
2161
+ al = SSL_AD_INTERNAL_ERROR;
2162
+ SSLerr(SSL_F_SSL3_GET_CERT_STATUS,ERR_R_MALLOC_FAILURE);
2163
+ goto f_err;
2164
+ }
2165
+ s->tlsext_ocsp_resplen = resplen;
2166
+ if (s->ctx->tlsext_status_cb)
2167
+ {
2168
+ int ret;
2169
+ ret = s->ctx->tlsext_status_cb(s, s->ctx->tlsext_status_arg);
2170
+ if (ret == 0)
2171
+ {
2172
+ al = SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE;
2173
+ SSLerr(SSL_F_SSL3_GET_CERT_STATUS,SSL_R_INVALID_STATUS_RESPONSE);
2174
+ goto f_err;
2175
+ }
2176
+ if (ret < 0)
2177
+ {
2178
+ al = SSL_AD_INTERNAL_ERROR;
2179
+ SSLerr(SSL_F_SSL3_GET_CERT_STATUS,ERR_R_MALLOC_FAILURE);
2180
+ goto f_err;
2181
+ }
2182
+ }
2183
+ return 1;
2184
+ f_err:
2185
+ ssl3_send_alert(s,SSL3_AL_FATAL,al);
2186
+ return(-1);
2187
+ }
2188
+ #endif
2189
+
2190
+ int ssl3_get_server_done(SSL *s)
2191
+ {
2192
+ int ok,ret=0;
2193
+ long n;
2194
+
2195
+ n=s->method->ssl_get_message(s,
2196
+ SSL3_ST_CR_SRVR_DONE_A,
2197
+ SSL3_ST_CR_SRVR_DONE_B,
2198
+ SSL3_MT_SERVER_DONE,
2199
+ 30, /* should be very small, like 0 :-) */
2200
+ &ok);
2201
+
2202
+ if (!ok) return((int)n);
2203
+ if (n > 0)
2204
+ {
2205
+ /* should contain no data */
2206
+ ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_DECODE_ERROR);
2207
+ SSLerr(SSL_F_SSL3_GET_SERVER_DONE,SSL_R_LENGTH_MISMATCH);
2208
+ return -1;
2209
+ }
2210
+ ret=1;
2211
+ return(ret);
2212
+ }
2213
+
2214
+
2215
+ int ssl3_send_client_key_exchange(SSL *s)
2216
+ {
2217
+ unsigned char *p,*d;
2218
+ int n;
2219
+ unsigned long alg_k;
2220
+ #ifndef OPENSSL_NO_RSA
2221
+ unsigned char *q;
2222
+ EVP_PKEY *pkey=NULL;
2223
+ #endif
2224
+ #ifndef OPENSSL_NO_KRB5
2225
+ KSSL_ERR kssl_err;
2226
+ #endif /* OPENSSL_NO_KRB5 */
2227
+ #ifndef OPENSSL_NO_ECDH
2228
+ EC_KEY *clnt_ecdh = NULL;
2229
+ const EC_POINT *srvr_ecpoint = NULL;
2230
+ EVP_PKEY *srvr_pub_pkey = NULL;
2231
+ unsigned char *encodedPoint = NULL;
2232
+ int encoded_pt_len = 0;
2233
+ BN_CTX * bn_ctx = NULL;
2234
+ #endif
2235
+
2236
+ if (s->state == SSL3_ST_CW_KEY_EXCH_A)
2237
+ {
2238
+ d=(unsigned char *)s->init_buf->data;
2239
+ p= &(d[4]);
2240
+
2241
+ alg_k=s->s3->tmp.new_cipher->algorithm_mkey;
2242
+
2243
+ /* Fool emacs indentation */
2244
+ if (0) {}
2245
+ #ifndef OPENSSL_NO_RSA
2246
+ else if (alg_k & SSL_kRSA)
2247
+ {
2248
+ RSA *rsa;
2249
+ unsigned char tmp_buf[SSL_MAX_MASTER_KEY_LENGTH];
2250
+
2251
+ if (s->session->sess_cert->peer_rsa_tmp != NULL)
2252
+ rsa=s->session->sess_cert->peer_rsa_tmp;
2253
+ else
2254
+ {
2255
+ pkey=X509_get_pubkey(s->session->sess_cert->peer_pkeys[SSL_PKEY_RSA_ENC].x509);
2256
+ if ((pkey == NULL) ||
2257
+ (pkey->type != EVP_PKEY_RSA) ||
2258
+ (pkey->pkey.rsa == NULL))
2259
+ {
2260
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,ERR_R_INTERNAL_ERROR);
2261
+ goto err;
2262
+ }
2263
+ rsa=pkey->pkey.rsa;
2264
+ EVP_PKEY_free(pkey);
2265
+ }
2266
+
2267
+ tmp_buf[0]=s->client_version>>8;
2268
+ tmp_buf[1]=s->client_version&0xff;
2269
+ if (RAND_bytes(&(tmp_buf[2]),sizeof tmp_buf-2) <= 0)
2270
+ goto err;
2271
+
2272
+ s->session->master_key_length=sizeof tmp_buf;
2273
+
2274
+ q=p;
2275
+ /* Fix buf for TLS and beyond */
2276
+ if (s->version > SSL3_VERSION)
2277
+ p+=2;
2278
+ n=RSA_public_encrypt(sizeof tmp_buf,
2279
+ tmp_buf,p,rsa,RSA_PKCS1_PADDING);
2280
+ #ifdef PKCS1_CHECK
2281
+ if (s->options & SSL_OP_PKCS1_CHECK_1) p[1]++;
2282
+ if (s->options & SSL_OP_PKCS1_CHECK_2) tmp_buf[0]=0x70;
2283
+ #endif
2284
+ if (n <= 0)
2285
+ {
2286
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,SSL_R_BAD_RSA_ENCRYPT);
2287
+ goto err;
2288
+ }
2289
+
2290
+ /* Fix buf for TLS and beyond */
2291
+ if (s->version > SSL3_VERSION)
2292
+ {
2293
+ s2n(n,q);
2294
+ n+=2;
2295
+ }
2296
+
2297
+ s->session->master_key_length=
2298
+ s->method->ssl3_enc->generate_master_secret(s,
2299
+ s->session->master_key,
2300
+ tmp_buf,sizeof tmp_buf);
2301
+ OPENSSL_cleanse(tmp_buf,sizeof tmp_buf);
2302
+ }
2303
+ #endif
2304
+ #ifndef OPENSSL_NO_KRB5
2305
+ else if (alg_k & SSL_kKRB5)
2306
+ {
2307
+ krb5_error_code krb5rc;
2308
+ KSSL_CTX *kssl_ctx = s->kssl_ctx;
2309
+ /* krb5_data krb5_ap_req; */
2310
+ krb5_data *enc_ticket;
2311
+ krb5_data authenticator, *authp = NULL;
2312
+ EVP_CIPHER_CTX ciph_ctx;
2313
+ const EVP_CIPHER *enc = NULL;
2314
+ unsigned char iv[EVP_MAX_IV_LENGTH];
2315
+ unsigned char tmp_buf[SSL_MAX_MASTER_KEY_LENGTH];
2316
+ unsigned char epms[SSL_MAX_MASTER_KEY_LENGTH
2317
+ + EVP_MAX_IV_LENGTH];
2318
+ int padl, outl = sizeof(epms);
2319
+
2320
+ EVP_CIPHER_CTX_init(&ciph_ctx);
2321
+
2322
+ #ifdef KSSL_DEBUG
2323
+ printf("ssl3_send_client_key_exchange(%lx & %lx)\n",
2324
+ alg_k, SSL_kKRB5);
2325
+ #endif /* KSSL_DEBUG */
2326
+
2327
+ authp = NULL;
2328
+ #ifdef KRB5SENDAUTH
2329
+ if (KRB5SENDAUTH) authp = &authenticator;
2330
+ #endif /* KRB5SENDAUTH */
2331
+
2332
+ krb5rc = kssl_cget_tkt(kssl_ctx, &enc_ticket, authp,
2333
+ &kssl_err);
2334
+ enc = kssl_map_enc(kssl_ctx->enctype);
2335
+ if (enc == NULL)
2336
+ goto err;
2337
+ #ifdef KSSL_DEBUG
2338
+ {
2339
+ printf("kssl_cget_tkt rtn %d\n", krb5rc);
2340
+ if (krb5rc && kssl_err.text)
2341
+ printf("kssl_cget_tkt kssl_err=%s\n", kssl_err.text);
2342
+ }
2343
+ #endif /* KSSL_DEBUG */
2344
+
2345
+ if (krb5rc)
2346
+ {
2347
+ ssl3_send_alert(s,SSL3_AL_FATAL,
2348
+ SSL_AD_HANDSHAKE_FAILURE);
2349
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,
2350
+ kssl_err.reason);
2351
+ goto err;
2352
+ }
2353
+
2354
+ /* 20010406 VRS - Earlier versions used KRB5 AP_REQ
2355
+ ** in place of RFC 2712 KerberosWrapper, as in:
2356
+ **
2357
+ ** Send ticket (copy to *p, set n = length)
2358
+ ** n = krb5_ap_req.length;
2359
+ ** memcpy(p, krb5_ap_req.data, krb5_ap_req.length);
2360
+ ** if (krb5_ap_req.data)
2361
+ ** kssl_krb5_free_data_contents(NULL,&krb5_ap_req);
2362
+ **
2363
+ ** Now using real RFC 2712 KerberosWrapper
2364
+ ** (Thanks to Simon Wilkinson <sxw@sxw.org.uk>)
2365
+ ** Note: 2712 "opaque" types are here replaced
2366
+ ** with a 2-byte length followed by the value.
2367
+ ** Example:
2368
+ ** KerberosWrapper= xx xx asn1ticket 0 0 xx xx encpms
2369
+ ** Where "xx xx" = length bytes. Shown here with
2370
+ ** optional authenticator omitted.
2371
+ */
2372
+
2373
+ /* KerberosWrapper.Ticket */
2374
+ s2n(enc_ticket->length,p);
2375
+ memcpy(p, enc_ticket->data, enc_ticket->length);
2376
+ p+= enc_ticket->length;
2377
+ n = enc_ticket->length + 2;
2378
+
2379
+ /* KerberosWrapper.Authenticator */
2380
+ if (authp && authp->length)
2381
+ {
2382
+ s2n(authp->length,p);
2383
+ memcpy(p, authp->data, authp->length);
2384
+ p+= authp->length;
2385
+ n+= authp->length + 2;
2386
+
2387
+ free(authp->data);
2388
+ authp->data = NULL;
2389
+ authp->length = 0;
2390
+ }
2391
+ else
2392
+ {
2393
+ s2n(0,p);/* null authenticator length */
2394
+ n+=2;
2395
+ }
2396
+
2397
+ tmp_buf[0]=s->client_version>>8;
2398
+ tmp_buf[1]=s->client_version&0xff;
2399
+ if (RAND_bytes(&(tmp_buf[2]),sizeof tmp_buf-2) <= 0)
2400
+ goto err;
2401
+
2402
+ /* 20010420 VRS. Tried it this way; failed.
2403
+ ** EVP_EncryptInit_ex(&ciph_ctx,enc, NULL,NULL);
2404
+ ** EVP_CIPHER_CTX_set_key_length(&ciph_ctx,
2405
+ ** kssl_ctx->length);
2406
+ ** EVP_EncryptInit_ex(&ciph_ctx,NULL, key,iv);
2407
+ */
2408
+
2409
+ memset(iv, 0, sizeof iv); /* per RFC 1510 */
2410
+ EVP_EncryptInit_ex(&ciph_ctx,enc, NULL,
2411
+ kssl_ctx->key,iv);
2412
+ EVP_EncryptUpdate(&ciph_ctx,epms,&outl,tmp_buf,
2413
+ sizeof tmp_buf);
2414
+ EVP_EncryptFinal_ex(&ciph_ctx,&(epms[outl]),&padl);
2415
+ outl += padl;
2416
+ if (outl > (int)sizeof epms)
2417
+ {
2418
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR);
2419
+ goto err;
2420
+ }
2421
+ EVP_CIPHER_CTX_cleanup(&ciph_ctx);
2422
+
2423
+ /* KerberosWrapper.EncryptedPreMasterSecret */
2424
+ s2n(outl,p);
2425
+ memcpy(p, epms, outl);
2426
+ p+=outl;
2427
+ n+=outl + 2;
2428
+
2429
+ s->session->master_key_length=
2430
+ s->method->ssl3_enc->generate_master_secret(s,
2431
+ s->session->master_key,
2432
+ tmp_buf, sizeof tmp_buf);
2433
+
2434
+ OPENSSL_cleanse(tmp_buf, sizeof tmp_buf);
2435
+ OPENSSL_cleanse(epms, outl);
2436
+ }
2437
+ #endif
2438
+ #ifndef OPENSSL_NO_DH
2439
+ else if (alg_k & (SSL_kEDH|SSL_kDHr|SSL_kDHd))
2440
+ {
2441
+ DH *dh_srvr,*dh_clnt;
2442
+
2443
+ if (s->session->sess_cert == NULL)
2444
+ {
2445
+ ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_UNEXPECTED_MESSAGE);
2446
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,SSL_R_UNEXPECTED_MESSAGE);
2447
+ goto err;
2448
+ }
2449
+
2450
+ if (s->session->sess_cert->peer_dh_tmp != NULL)
2451
+ dh_srvr=s->session->sess_cert->peer_dh_tmp;
2452
+ else
2453
+ {
2454
+ /* we get them from the cert */
2455
+ ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_HANDSHAKE_FAILURE);
2456
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,SSL_R_UNABLE_TO_FIND_DH_PARAMETERS);
2457
+ goto err;
2458
+ }
2459
+
2460
+ /* generate a new random key */
2461
+ if ((dh_clnt=DHparams_dup(dh_srvr)) == NULL)
2462
+ {
2463
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,ERR_R_DH_LIB);
2464
+ goto err;
2465
+ }
2466
+ if (!DH_generate_key(dh_clnt))
2467
+ {
2468
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,ERR_R_DH_LIB);
2469
+ DH_free(dh_clnt);
2470
+ goto err;
2471
+ }
2472
+
2473
+ /* use the 'p' output buffer for the DH key, but
2474
+ * make sure to clear it out afterwards */
2475
+
2476
+ n=DH_compute_key(p,dh_srvr->pub_key,dh_clnt);
2477
+
2478
+ if (n <= 0)
2479
+ {
2480
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,ERR_R_DH_LIB);
2481
+ DH_free(dh_clnt);
2482
+ goto err;
2483
+ }
2484
+
2485
+ /* generate master key from the result */
2486
+ s->session->master_key_length=
2487
+ s->method->ssl3_enc->generate_master_secret(s,
2488
+ s->session->master_key,p,n);
2489
+ /* clean up */
2490
+ memset(p,0,n);
2491
+
2492
+ /* send off the data */
2493
+ n=BN_num_bytes(dh_clnt->pub_key);
2494
+ s2n(n,p);
2495
+ BN_bn2bin(dh_clnt->pub_key,p);
2496
+ n+=2;
2497
+
2498
+ DH_free(dh_clnt);
2499
+
2500
+ /* perhaps clean things up a bit EAY EAY EAY EAY*/
2501
+ }
2502
+ #endif
2503
+
2504
+ #ifndef OPENSSL_NO_ECDH
2505
+ else if (alg_k & (SSL_kEECDH|SSL_kECDHr|SSL_kECDHe))
2506
+ {
2507
+ const EC_GROUP *srvr_group = NULL;
2508
+ EC_KEY *tkey;
2509
+ int ecdh_clnt_cert = 0;
2510
+ int field_size = 0;
2511
+
2512
+ /* Did we send out the client's
2513
+ * ECDH share for use in premaster
2514
+ * computation as part of client certificate?
2515
+ * If so, set ecdh_clnt_cert to 1.
2516
+ */
2517
+ if ((alg_k & (SSL_kECDHr|SSL_kECDHe)) && (s->cert != NULL))
2518
+ {
2519
+ /* XXX: For now, we do not support client
2520
+ * authentication using ECDH certificates.
2521
+ * To add such support, one needs to add
2522
+ * code that checks for appropriate
2523
+ * conditions and sets ecdh_clnt_cert to 1.
2524
+ * For example, the cert have an ECC
2525
+ * key on the same curve as the server's
2526
+ * and the key should be authorized for
2527
+ * key agreement.
2528
+ *
2529
+ * One also needs to add code in ssl3_connect
2530
+ * to skip sending the certificate verify
2531
+ * message.
2532
+ *
2533
+ * if ((s->cert->key->privatekey != NULL) &&
2534
+ * (s->cert->key->privatekey->type ==
2535
+ * EVP_PKEY_EC) && ...)
2536
+ * ecdh_clnt_cert = 1;
2537
+ */
2538
+ }
2539
+
2540
+ if (s->session->sess_cert->peer_ecdh_tmp != NULL)
2541
+ {
2542
+ tkey = s->session->sess_cert->peer_ecdh_tmp;
2543
+ }
2544
+ else
2545
+ {
2546
+ /* Get the Server Public Key from Cert */
2547
+ srvr_pub_pkey = X509_get_pubkey(s->session-> \
2548
+ sess_cert->peer_pkeys[SSL_PKEY_ECC].x509);
2549
+ if ((srvr_pub_pkey == NULL) ||
2550
+ (srvr_pub_pkey->type != EVP_PKEY_EC) ||
2551
+ (srvr_pub_pkey->pkey.ec == NULL))
2552
+ {
2553
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,
2554
+ ERR_R_INTERNAL_ERROR);
2555
+ goto err;
2556
+ }
2557
+
2558
+ tkey = srvr_pub_pkey->pkey.ec;
2559
+ }
2560
+
2561
+ srvr_group = EC_KEY_get0_group(tkey);
2562
+ srvr_ecpoint = EC_KEY_get0_public_key(tkey);
2563
+
2564
+ if ((srvr_group == NULL) || (srvr_ecpoint == NULL))
2565
+ {
2566
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,
2567
+ ERR_R_INTERNAL_ERROR);
2568
+ goto err;
2569
+ }
2570
+
2571
+ if ((clnt_ecdh=EC_KEY_new()) == NULL)
2572
+ {
2573
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,ERR_R_MALLOC_FAILURE);
2574
+ goto err;
2575
+ }
2576
+
2577
+ if (!EC_KEY_set_group(clnt_ecdh, srvr_group))
2578
+ {
2579
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,ERR_R_EC_LIB);
2580
+ goto err;
2581
+ }
2582
+ if (ecdh_clnt_cert)
2583
+ {
2584
+ /* Reuse key info from our certificate
2585
+ * We only need our private key to perform
2586
+ * the ECDH computation.
2587
+ */
2588
+ const BIGNUM *priv_key;
2589
+ tkey = s->cert->key->privatekey->pkey.ec;
2590
+ priv_key = EC_KEY_get0_private_key(tkey);
2591
+ if (priv_key == NULL)
2592
+ {
2593
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,ERR_R_MALLOC_FAILURE);
2594
+ goto err;
2595
+ }
2596
+ if (!EC_KEY_set_private_key(clnt_ecdh, priv_key))
2597
+ {
2598
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,ERR_R_EC_LIB);
2599
+ goto err;
2600
+ }
2601
+ }
2602
+ else
2603
+ {
2604
+ /* Generate a new ECDH key pair */
2605
+ if (!(EC_KEY_generate_key(clnt_ecdh)))
2606
+ {
2607
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_ECDH_LIB);
2608
+ goto err;
2609
+ }
2610
+ }
2611
+
2612
+ /* use the 'p' output buffer for the ECDH key, but
2613
+ * make sure to clear it out afterwards
2614
+ */
2615
+
2616
+ field_size = EC_GROUP_get_degree(srvr_group);
2617
+ if (field_size <= 0)
2618
+ {
2619
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,
2620
+ ERR_R_ECDH_LIB);
2621
+ goto err;
2622
+ }
2623
+ n=ECDH_compute_key(p, (field_size+7)/8, srvr_ecpoint, clnt_ecdh, NULL);
2624
+ if (n <= 0)
2625
+ {
2626
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,
2627
+ ERR_R_ECDH_LIB);
2628
+ goto err;
2629
+ }
2630
+
2631
+ /* generate master key from the result */
2632
+ s->session->master_key_length = s->method->ssl3_enc \
2633
+ -> generate_master_secret(s,
2634
+ s->session->master_key,
2635
+ p, n);
2636
+
2637
+ memset(p, 0, n); /* clean up */
2638
+
2639
+ if (ecdh_clnt_cert)
2640
+ {
2641
+ /* Send empty client key exch message */
2642
+ n = 0;
2643
+ }
2644
+ else
2645
+ {
2646
+ /* First check the size of encoding and
2647
+ * allocate memory accordingly.
2648
+ */
2649
+ encoded_pt_len =
2650
+ EC_POINT_point2oct(srvr_group,
2651
+ EC_KEY_get0_public_key(clnt_ecdh),
2652
+ POINT_CONVERSION_UNCOMPRESSED,
2653
+ NULL, 0, NULL);
2654
+
2655
+ encodedPoint = (unsigned char *)
2656
+ OPENSSL_malloc(encoded_pt_len *
2657
+ sizeof(unsigned char));
2658
+ bn_ctx = BN_CTX_new();
2659
+ if ((encodedPoint == NULL) ||
2660
+ (bn_ctx == NULL))
2661
+ {
2662
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,ERR_R_MALLOC_FAILURE);
2663
+ goto err;
2664
+ }
2665
+
2666
+ /* Encode the public key */
2667
+ n = EC_POINT_point2oct(srvr_group,
2668
+ EC_KEY_get0_public_key(clnt_ecdh),
2669
+ POINT_CONVERSION_UNCOMPRESSED,
2670
+ encodedPoint, encoded_pt_len, bn_ctx);
2671
+
2672
+ *p = n; /* length of encoded point */
2673
+ /* Encoded point will be copied here */
2674
+ p += 1;
2675
+ /* copy the point */
2676
+ memcpy((unsigned char *)p, encodedPoint, n);
2677
+ /* increment n to account for length field */
2678
+ n += 1;
2679
+ }
2680
+
2681
+ /* Free allocated memory */
2682
+ BN_CTX_free(bn_ctx);
2683
+ if (encodedPoint != NULL) OPENSSL_free(encodedPoint);
2684
+ if (clnt_ecdh != NULL)
2685
+ EC_KEY_free(clnt_ecdh);
2686
+ EVP_PKEY_free(srvr_pub_pkey);
2687
+ }
2688
+ #endif /* !OPENSSL_NO_ECDH */
2689
+ else if (alg_k & SSL_kGOST)
2690
+ {
2691
+ /* GOST key exchange message creation */
2692
+ EVP_PKEY_CTX *pkey_ctx;
2693
+ X509 *peer_cert;
2694
+ size_t msglen;
2695
+ unsigned int md_len;
2696
+ int keytype;
2697
+ unsigned char premaster_secret[32],shared_ukm[32], tmp[256];
2698
+ EVP_MD_CTX *ukm_hash;
2699
+ EVP_PKEY *pub_key;
2700
+
2701
+ /* Get server sertificate PKEY and create ctx from it */
2702
+ peer_cert=s->session->sess_cert->peer_pkeys[(keytype=SSL_PKEY_GOST01)].x509;
2703
+ if (!peer_cert)
2704
+ peer_cert=s->session->sess_cert->peer_pkeys[(keytype=SSL_PKEY_GOST94)].x509;
2705
+ if (!peer_cert) {
2706
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER);
2707
+ goto err;
2708
+ }
2709
+
2710
+ pkey_ctx=EVP_PKEY_CTX_new(pub_key=X509_get_pubkey(peer_cert),NULL);
2711
+ /* If we have send a certificate, and certificate key
2712
+
2713
+ * parameters match those of server certificate, use
2714
+ * certificate key for key exchange
2715
+ */
2716
+
2717
+ /* Otherwise, generate ephemeral key pair */
2718
+
2719
+ EVP_PKEY_encrypt_init(pkey_ctx);
2720
+ /* Generate session key */
2721
+ RAND_bytes(premaster_secret,32);
2722
+ /* If we have client certificate, use its secret as peer key */
2723
+ if (s->s3->tmp.cert_req && s->cert->key->privatekey) {
2724
+ if (EVP_PKEY_derive_set_peer(pkey_ctx,s->cert->key->privatekey) <=0) {
2725
+ /* If there was an error - just ignore it. Ephemeral key
2726
+ * would be used
2727
+ */
2728
+ ERR_clear_error();
2729
+ }
2730
+ }
2731
+ /* Compute shared IV and store it in algorithm-specific
2732
+ * context data */
2733
+ ukm_hash = EVP_MD_CTX_create();
2734
+ EVP_DigestInit(ukm_hash,EVP_get_digestbynid(NID_id_GostR3411_94));
2735
+ EVP_DigestUpdate(ukm_hash,s->s3->client_random,SSL3_RANDOM_SIZE);
2736
+ EVP_DigestUpdate(ukm_hash,s->s3->server_random,SSL3_RANDOM_SIZE);
2737
+ EVP_DigestFinal_ex(ukm_hash, shared_ukm, &md_len);
2738
+ EVP_MD_CTX_destroy(ukm_hash);
2739
+ if (EVP_PKEY_CTX_ctrl(pkey_ctx,-1,EVP_PKEY_OP_ENCRYPT,EVP_PKEY_CTRL_SET_IV,
2740
+ 8,shared_ukm)<0) {
2741
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,
2742
+ SSL_R_LIBRARY_BUG);
2743
+ goto err;
2744
+ }
2745
+ /* Make GOST keytransport blob message */
2746
+ /*Encapsulate it into sequence */
2747
+ *(p++)=V_ASN1_SEQUENCE | V_ASN1_CONSTRUCTED;
2748
+ msglen=255;
2749
+ if (EVP_PKEY_encrypt(pkey_ctx,tmp,&msglen,premaster_secret,32)<0) {
2750
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,
2751
+ SSL_R_LIBRARY_BUG);
2752
+ goto err;
2753
+ }
2754
+ if (msglen >= 0x80)
2755
+ {
2756
+ *(p++)=0x81;
2757
+ *(p++)= msglen & 0xff;
2758
+ n=msglen+3;
2759
+ }
2760
+ else
2761
+ {
2762
+ *(p++)= msglen & 0xff;
2763
+ n=msglen+2;
2764
+ }
2765
+ memcpy(p, tmp, msglen);
2766
+ /* Check if pubkey from client certificate was used */
2767
+ if (EVP_PKEY_CTX_ctrl(pkey_ctx, -1, -1, EVP_PKEY_CTRL_PEER_KEY, 2, NULL) > 0)
2768
+ {
2769
+ /* Set flag "skip certificate verify" */
2770
+ s->s3->flags |= TLS1_FLAGS_SKIP_CERT_VERIFY;
2771
+ }
2772
+ EVP_PKEY_CTX_free(pkey_ctx);
2773
+ s->session->master_key_length=
2774
+ s->method->ssl3_enc->generate_master_secret(s,
2775
+ s->session->master_key,premaster_secret,32);
2776
+ EVP_PKEY_free(pub_key);
2777
+
2778
+ }
2779
+ #ifndef OPENSSL_NO_SRP
2780
+ else if (alg_k & SSL_kSRP)
2781
+ {
2782
+ if (s->srp_ctx.A != NULL)
2783
+ {
2784
+ /* send off the data */
2785
+ n=BN_num_bytes(s->srp_ctx.A);
2786
+ s2n(n,p);
2787
+ BN_bn2bin(s->srp_ctx.A,p);
2788
+ n+=2;
2789
+ }
2790
+ else
2791
+ {
2792
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,ERR_R_INTERNAL_ERROR);
2793
+ goto err;
2794
+ }
2795
+ if (s->session->srp_username != NULL)
2796
+ OPENSSL_free(s->session->srp_username);
2797
+ s->session->srp_username = BUF_strdup(s->srp_ctx.login);
2798
+ if (s->session->srp_username == NULL)
2799
+ {
2800
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,
2801
+ ERR_R_MALLOC_FAILURE);
2802
+ goto err;
2803
+ }
2804
+
2805
+ if ((s->session->master_key_length = SRP_generate_client_master_secret(s,s->session->master_key))<0)
2806
+ {
2807
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,ERR_R_INTERNAL_ERROR);
2808
+ goto err;
2809
+ }
2810
+ }
2811
+ #endif
2812
+ #ifndef OPENSSL_NO_PSK
2813
+ else if (alg_k & SSL_kPSK)
2814
+ {
2815
+ char identity[PSK_MAX_IDENTITY_LEN];
2816
+ unsigned char *t = NULL;
2817
+ unsigned char psk_or_pre_ms[PSK_MAX_PSK_LEN*2+4];
2818
+ unsigned int pre_ms_len = 0, psk_len = 0;
2819
+ int psk_err = 1;
2820
+
2821
+ n = 0;
2822
+ if (s->psk_client_callback == NULL)
2823
+ {
2824
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,
2825
+ SSL_R_PSK_NO_CLIENT_CB);
2826
+ goto err;
2827
+ }
2828
+
2829
+ psk_len = s->psk_client_callback(s, s->ctx->psk_identity_hint,
2830
+ identity, PSK_MAX_IDENTITY_LEN,
2831
+ psk_or_pre_ms, sizeof(psk_or_pre_ms));
2832
+ if (psk_len > PSK_MAX_PSK_LEN)
2833
+ {
2834
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,
2835
+ ERR_R_INTERNAL_ERROR);
2836
+ goto psk_err;
2837
+ }
2838
+ else if (psk_len == 0)
2839
+ {
2840
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,
2841
+ SSL_R_PSK_IDENTITY_NOT_FOUND);
2842
+ goto psk_err;
2843
+ }
2844
+
2845
+ /* create PSK pre_master_secret */
2846
+ pre_ms_len = 2+psk_len+2+psk_len;
2847
+ t = psk_or_pre_ms;
2848
+ memmove(psk_or_pre_ms+psk_len+4, psk_or_pre_ms, psk_len);
2849
+ s2n(psk_len, t);
2850
+ memset(t, 0, psk_len);
2851
+ t+=psk_len;
2852
+ s2n(psk_len, t);
2853
+
2854
+ if (s->session->psk_identity_hint != NULL)
2855
+ OPENSSL_free(s->session->psk_identity_hint);
2856
+ s->session->psk_identity_hint = BUF_strdup(s->ctx->psk_identity_hint);
2857
+ if (s->ctx->psk_identity_hint != NULL &&
2858
+ s->session->psk_identity_hint == NULL)
2859
+ {
2860
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,
2861
+ ERR_R_MALLOC_FAILURE);
2862
+ goto psk_err;
2863
+ }
2864
+
2865
+ if (s->session->psk_identity != NULL)
2866
+ OPENSSL_free(s->session->psk_identity);
2867
+ s->session->psk_identity = BUF_strdup(identity);
2868
+ if (s->session->psk_identity == NULL)
2869
+ {
2870
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,
2871
+ ERR_R_MALLOC_FAILURE);
2872
+ goto psk_err;
2873
+ }
2874
+
2875
+ s->session->master_key_length =
2876
+ s->method->ssl3_enc->generate_master_secret(s,
2877
+ s->session->master_key,
2878
+ psk_or_pre_ms, pre_ms_len);
2879
+ n = strlen(identity);
2880
+ s2n(n, p);
2881
+ memcpy(p, identity, n);
2882
+ n+=2;
2883
+ psk_err = 0;
2884
+ psk_err:
2885
+ OPENSSL_cleanse(identity, PSK_MAX_IDENTITY_LEN);
2886
+ OPENSSL_cleanse(psk_or_pre_ms, sizeof(psk_or_pre_ms));
2887
+ if (psk_err != 0)
2888
+ {
2889
+ ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
2890
+ goto err;
2891
+ }
2892
+ }
2893
+ #endif
2894
+ else
2895
+ {
2896
+ ssl3_send_alert(s, SSL3_AL_FATAL,
2897
+ SSL_AD_HANDSHAKE_FAILURE);
2898
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,
2899
+ ERR_R_INTERNAL_ERROR);
2900
+ goto err;
2901
+ }
2902
+
2903
+ *(d++)=SSL3_MT_CLIENT_KEY_EXCHANGE;
2904
+ l2n3(n,d);
2905
+
2906
+ s->state=SSL3_ST_CW_KEY_EXCH_B;
2907
+ /* number of bytes to write */
2908
+ s->init_num=n+4;
2909
+ s->init_off=0;
2910
+ }
2911
+
2912
+ /* SSL3_ST_CW_KEY_EXCH_B */
2913
+ return(ssl3_do_write(s,SSL3_RT_HANDSHAKE));
2914
+ err:
2915
+ #ifndef OPENSSL_NO_ECDH
2916
+ BN_CTX_free(bn_ctx);
2917
+ if (encodedPoint != NULL) OPENSSL_free(encodedPoint);
2918
+ if (clnt_ecdh != NULL)
2919
+ EC_KEY_free(clnt_ecdh);
2920
+ EVP_PKEY_free(srvr_pub_pkey);
2921
+ #endif
2922
+ return(-1);
2923
+ }
2924
+
2925
+ int ssl3_send_client_verify(SSL *s)
2926
+ {
2927
+ unsigned char *p,*d;
2928
+ unsigned char data[MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH];
2929
+ EVP_PKEY *pkey;
2930
+ EVP_PKEY_CTX *pctx=NULL;
2931
+ EVP_MD_CTX mctx;
2932
+ unsigned u=0;
2933
+ unsigned long n;
2934
+ int j;
2935
+
2936
+ EVP_MD_CTX_init(&mctx);
2937
+
2938
+ if (s->state == SSL3_ST_CW_CERT_VRFY_A)
2939
+ {
2940
+ d=(unsigned char *)s->init_buf->data;
2941
+ p= &(d[4]);
2942
+ pkey=s->cert->key->privatekey;
2943
+ /* Create context from key and test if sha1 is allowed as digest */
2944
+ pctx = EVP_PKEY_CTX_new(pkey,NULL);
2945
+ EVP_PKEY_sign_init(pctx);
2946
+ if (EVP_PKEY_CTX_set_signature_md(pctx, EVP_sha1())>0)
2947
+ {
2948
+ if (TLS1_get_version(s) < TLS1_2_VERSION)
2949
+ s->method->ssl3_enc->cert_verify_mac(s,
2950
+ NID_sha1,
2951
+ &(data[MD5_DIGEST_LENGTH]));
2952
+ }
2953
+ else
2954
+ {
2955
+ ERR_clear_error();
2956
+ }
2957
+ /* For TLS v1.2 send signature algorithm and signature
2958
+ * using agreed digest and cached handshake records.
2959
+ */
2960
+ if (TLS1_get_version(s) >= TLS1_2_VERSION)
2961
+ {
2962
+ long hdatalen = 0;
2963
+ void *hdata;
2964
+ const EVP_MD *md = s->cert->key->digest;
2965
+ hdatalen = BIO_get_mem_data(s->s3->handshake_buffer,
2966
+ &hdata);
2967
+ if (hdatalen <= 0 || !tls12_get_sigandhash(p, pkey, md))
2968
+ {
2969
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY,
2970
+ ERR_R_INTERNAL_ERROR);
2971
+ goto err;
2972
+ }
2973
+ p += 2;
2974
+ #ifdef SSL_DEBUG
2975
+ fprintf(stderr, "Using TLS 1.2 with client alg %s\n",
2976
+ EVP_MD_name(md));
2977
+ #endif
2978
+ if (!EVP_SignInit_ex(&mctx, md, NULL)
2979
+ || !EVP_SignUpdate(&mctx, hdata, hdatalen)
2980
+ || !EVP_SignFinal(&mctx, p + 2, &u, pkey))
2981
+ {
2982
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY,
2983
+ ERR_R_EVP_LIB);
2984
+ goto err;
2985
+ }
2986
+ s2n(u,p);
2987
+ n = u + 4;
2988
+ if (!ssl3_digest_cached_records(s))
2989
+ goto err;
2990
+ }
2991
+ else
2992
+ #ifndef OPENSSL_NO_RSA
2993
+ if (pkey->type == EVP_PKEY_RSA)
2994
+ {
2995
+ s->method->ssl3_enc->cert_verify_mac(s,
2996
+ NID_md5,
2997
+ &(data[0]));
2998
+ if (RSA_sign(NID_md5_sha1, data,
2999
+ MD5_DIGEST_LENGTH+SHA_DIGEST_LENGTH,
3000
+ &(p[2]), &u, pkey->pkey.rsa) <= 0 )
3001
+ {
3002
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY,ERR_R_RSA_LIB);
3003
+ goto err;
3004
+ }
3005
+ s2n(u,p);
3006
+ n=u+2;
3007
+ }
3008
+ else
3009
+ #endif
3010
+ #ifndef OPENSSL_NO_DSA
3011
+ if (pkey->type == EVP_PKEY_DSA)
3012
+ {
3013
+ if (!DSA_sign(pkey->save_type,
3014
+ &(data[MD5_DIGEST_LENGTH]),
3015
+ SHA_DIGEST_LENGTH,&(p[2]),
3016
+ (unsigned int *)&j,pkey->pkey.dsa))
3017
+ {
3018
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY,ERR_R_DSA_LIB);
3019
+ goto err;
3020
+ }
3021
+ s2n(j,p);
3022
+ n=j+2;
3023
+ }
3024
+ else
3025
+ #endif
3026
+ #ifndef OPENSSL_NO_ECDSA
3027
+ if (pkey->type == EVP_PKEY_EC)
3028
+ {
3029
+ if (!ECDSA_sign(pkey->save_type,
3030
+ &(data[MD5_DIGEST_LENGTH]),
3031
+ SHA_DIGEST_LENGTH,&(p[2]),
3032
+ (unsigned int *)&j,pkey->pkey.ec))
3033
+ {
3034
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY,
3035
+ ERR_R_ECDSA_LIB);
3036
+ goto err;
3037
+ }
3038
+ s2n(j,p);
3039
+ n=j+2;
3040
+ }
3041
+ else
3042
+ #endif
3043
+ if (pkey->type == NID_id_GostR3410_94 || pkey->type == NID_id_GostR3410_2001)
3044
+ {
3045
+ unsigned char signbuf[64];
3046
+ int i;
3047
+ size_t sigsize=64;
3048
+ s->method->ssl3_enc->cert_verify_mac(s,
3049
+ NID_id_GostR3411_94,
3050
+ data);
3051
+ if (EVP_PKEY_sign(pctx, signbuf, &sigsize, data, 32) <= 0) {
3052
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY,
3053
+ ERR_R_INTERNAL_ERROR);
3054
+ goto err;
3055
+ }
3056
+ for (i=63,j=0; i>=0; j++, i--) {
3057
+ p[2+j]=signbuf[i];
3058
+ }
3059
+ s2n(j,p);
3060
+ n=j+2;
3061
+ }
3062
+ else
3063
+ {
3064
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY,ERR_R_INTERNAL_ERROR);
3065
+ goto err;
3066
+ }
3067
+ *(d++)=SSL3_MT_CERTIFICATE_VERIFY;
3068
+ l2n3(n,d);
3069
+
3070
+ s->state=SSL3_ST_CW_CERT_VRFY_B;
3071
+ s->init_num=(int)n+4;
3072
+ s->init_off=0;
3073
+ }
3074
+ EVP_MD_CTX_cleanup(&mctx);
3075
+ EVP_PKEY_CTX_free(pctx);
3076
+ return(ssl3_do_write(s,SSL3_RT_HANDSHAKE));
3077
+ err:
3078
+ EVP_MD_CTX_cleanup(&mctx);
3079
+ EVP_PKEY_CTX_free(pctx);
3080
+ return(-1);
3081
+ }
3082
+
3083
+ int ssl3_send_client_certificate(SSL *s)
3084
+ {
3085
+ X509 *x509=NULL;
3086
+ EVP_PKEY *pkey=NULL;
3087
+ int i;
3088
+ unsigned long l;
3089
+
3090
+ if (s->state == SSL3_ST_CW_CERT_A)
3091
+ {
3092
+ if ((s->cert == NULL) ||
3093
+ (s->cert->key->x509 == NULL) ||
3094
+ (s->cert->key->privatekey == NULL))
3095
+ s->state=SSL3_ST_CW_CERT_B;
3096
+ else
3097
+ s->state=SSL3_ST_CW_CERT_C;
3098
+ }
3099
+
3100
+ /* We need to get a client cert */
3101
+ if (s->state == SSL3_ST_CW_CERT_B)
3102
+ {
3103
+ /* If we get an error, we need to
3104
+ * ssl->rwstate=SSL_X509_LOOKUP; return(-1);
3105
+ * We then get retied later */
3106
+ i=0;
3107
+ i = ssl_do_client_cert_cb(s, &x509, &pkey);
3108
+ if (i < 0)
3109
+ {
3110
+ s->rwstate=SSL_X509_LOOKUP;
3111
+ return(-1);
3112
+ }
3113
+ s->rwstate=SSL_NOTHING;
3114
+ if ((i == 1) && (pkey != NULL) && (x509 != NULL))
3115
+ {
3116
+ s->state=SSL3_ST_CW_CERT_B;
3117
+ if ( !SSL_use_certificate(s,x509) ||
3118
+ !SSL_use_PrivateKey(s,pkey))
3119
+ i=0;
3120
+ }
3121
+ else if (i == 1)
3122
+ {
3123
+ i=0;
3124
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_CERTIFICATE,SSL_R_BAD_DATA_RETURNED_BY_CALLBACK);
3125
+ }
3126
+
3127
+ if (x509 != NULL) X509_free(x509);
3128
+ if (pkey != NULL) EVP_PKEY_free(pkey);
3129
+ if (i == 0)
3130
+ {
3131
+ if (s->version == SSL3_VERSION)
3132
+ {
3133
+ s->s3->tmp.cert_req=0;
3134
+ ssl3_send_alert(s,SSL3_AL_WARNING,SSL_AD_NO_CERTIFICATE);
3135
+ return(1);
3136
+ }
3137
+ else
3138
+ {
3139
+ s->s3->tmp.cert_req=2;
3140
+ }
3141
+ }
3142
+
3143
+ /* Ok, we have a cert */
3144
+ s->state=SSL3_ST_CW_CERT_C;
3145
+ }
3146
+
3147
+ if (s->state == SSL3_ST_CW_CERT_C)
3148
+ {
3149
+ s->state=SSL3_ST_CW_CERT_D;
3150
+ l=ssl3_output_cert_chain(s,
3151
+ (s->s3->tmp.cert_req == 2)?NULL:s->cert->key->x509);
3152
+ s->init_num=(int)l;
3153
+ s->init_off=0;
3154
+ }
3155
+ /* SSL3_ST_CW_CERT_D */
3156
+ return(ssl3_do_write(s,SSL3_RT_HANDSHAKE));
3157
+ }
3158
+
3159
+ #define has_bits(i,m) (((i)&(m)) == (m))
3160
+
3161
+ int ssl3_check_cert_and_algorithm(SSL *s)
3162
+ {
3163
+ int i,idx;
3164
+ long alg_k,alg_a;
3165
+ EVP_PKEY *pkey=NULL;
3166
+ SESS_CERT *sc;
3167
+ #ifndef OPENSSL_NO_RSA
3168
+ RSA *rsa;
3169
+ #endif
3170
+ #ifndef OPENSSL_NO_DH
3171
+ DH *dh;
3172
+ #endif
3173
+
3174
+ alg_k=s->s3->tmp.new_cipher->algorithm_mkey;
3175
+ alg_a=s->s3->tmp.new_cipher->algorithm_auth;
3176
+
3177
+ /* we don't have a certificate */
3178
+ if ((alg_a & (SSL_aDH|SSL_aNULL|SSL_aKRB5)) || (alg_k & SSL_kPSK))
3179
+ return(1);
3180
+
3181
+ sc=s->session->sess_cert;
3182
+ if (sc == NULL)
3183
+ {
3184
+ SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,ERR_R_INTERNAL_ERROR);
3185
+ goto err;
3186
+ }
3187
+
3188
+ #ifndef OPENSSL_NO_RSA
3189
+ rsa=s->session->sess_cert->peer_rsa_tmp;
3190
+ #endif
3191
+ #ifndef OPENSSL_NO_DH
3192
+ dh=s->session->sess_cert->peer_dh_tmp;
3193
+ #endif
3194
+
3195
+ /* This is the passed certificate */
3196
+
3197
+ idx=sc->peer_cert_type;
3198
+ #ifndef OPENSSL_NO_ECDH
3199
+ if (idx == SSL_PKEY_ECC)
3200
+ {
3201
+ if (ssl_check_srvr_ecc_cert_and_alg(sc->peer_pkeys[idx].x509,
3202
+ s) == 0)
3203
+ { /* check failed */
3204
+ SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,SSL_R_BAD_ECC_CERT);
3205
+ goto f_err;
3206
+ }
3207
+ else
3208
+ {
3209
+ return 1;
3210
+ }
3211
+ }
3212
+ #endif
3213
+ pkey=X509_get_pubkey(sc->peer_pkeys[idx].x509);
3214
+ i=X509_certificate_type(sc->peer_pkeys[idx].x509,pkey);
3215
+ EVP_PKEY_free(pkey);
3216
+
3217
+
3218
+ /* Check that we have a certificate if we require one */
3219
+ if ((alg_a & SSL_aRSA) && !has_bits(i,EVP_PK_RSA|EVP_PKT_SIGN))
3220
+ {
3221
+ SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,SSL_R_MISSING_RSA_SIGNING_CERT);
3222
+ goto f_err;
3223
+ }
3224
+ #ifndef OPENSSL_NO_DSA
3225
+ else if ((alg_a & SSL_aDSS) && !has_bits(i,EVP_PK_DSA|EVP_PKT_SIGN))
3226
+ {
3227
+ SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,SSL_R_MISSING_DSA_SIGNING_CERT);
3228
+ goto f_err;
3229
+ }
3230
+ #endif
3231
+ #ifndef OPENSSL_NO_RSA
3232
+ if ((alg_k & SSL_kRSA) &&
3233
+ !(has_bits(i,EVP_PK_RSA|EVP_PKT_ENC) || (rsa != NULL)))
3234
+ {
3235
+ SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,SSL_R_MISSING_RSA_ENCRYPTING_CERT);
3236
+ goto f_err;
3237
+ }
3238
+ #endif
3239
+ #ifndef OPENSSL_NO_DH
3240
+ if ((alg_k & SSL_kEDH) &&
3241
+ !(has_bits(i,EVP_PK_DH|EVP_PKT_EXCH) || (dh != NULL)))
3242
+ {
3243
+ SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,SSL_R_MISSING_DH_KEY);
3244
+ goto f_err;
3245
+ }
3246
+ else if ((alg_k & SSL_kDHr) && !has_bits(i,EVP_PK_DH|EVP_PKS_RSA))
3247
+ {
3248
+ SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,SSL_R_MISSING_DH_RSA_CERT);
3249
+ goto f_err;
3250
+ }
3251
+ #ifndef OPENSSL_NO_DSA
3252
+ else if ((alg_k & SSL_kDHd) && !has_bits(i,EVP_PK_DH|EVP_PKS_DSA))
3253
+ {
3254
+ SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,SSL_R_MISSING_DH_DSA_CERT);
3255
+ goto f_err;
3256
+ }
3257
+ #endif
3258
+ #endif
3259
+
3260
+ if (SSL_C_IS_EXPORT(s->s3->tmp.new_cipher) && !has_bits(i,EVP_PKT_EXP))
3261
+ {
3262
+ #ifndef OPENSSL_NO_RSA
3263
+ if (alg_k & SSL_kRSA)
3264
+ {
3265
+ if (rsa == NULL
3266
+ || RSA_size(rsa)*8 > SSL_C_EXPORT_PKEYLENGTH(s->s3->tmp.new_cipher))
3267
+ {
3268
+ SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,SSL_R_MISSING_EXPORT_TMP_RSA_KEY);
3269
+ goto f_err;
3270
+ }
3271
+ }
3272
+ else
3273
+ #endif
3274
+ #ifndef OPENSSL_NO_DH
3275
+ if (alg_k & (SSL_kEDH|SSL_kDHr|SSL_kDHd))
3276
+ {
3277
+ if (dh == NULL
3278
+ || DH_size(dh)*8 > SSL_C_EXPORT_PKEYLENGTH(s->s3->tmp.new_cipher))
3279
+ {
3280
+ SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,SSL_R_MISSING_EXPORT_TMP_DH_KEY);
3281
+ goto f_err;
3282
+ }
3283
+ }
3284
+ else
3285
+ #endif
3286
+ {
3287
+ SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE);
3288
+ goto f_err;
3289
+ }
3290
+ }
3291
+ return(1);
3292
+ f_err:
3293
+ ssl3_send_alert(s,SSL3_AL_FATAL,SSL_AD_HANDSHAKE_FAILURE);
3294
+ err:
3295
+ return(0);
3296
+ }
3297
+
3298
+ #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
3299
+ int ssl3_send_next_proto(SSL *s)
3300
+ {
3301
+ unsigned int len, padding_len;
3302
+ unsigned char *d;
3303
+
3304
+ if (s->state == SSL3_ST_CW_NEXT_PROTO_A)
3305
+ {
3306
+ len = s->next_proto_negotiated_len;
3307
+ padding_len = 32 - ((len + 2) % 32);
3308
+ d = (unsigned char *)s->init_buf->data;
3309
+ d[4] = len;
3310
+ memcpy(d + 5, s->next_proto_negotiated, len);
3311
+ d[5 + len] = padding_len;
3312
+ memset(d + 6 + len, 0, padding_len);
3313
+ *(d++)=SSL3_MT_NEXT_PROTO;
3314
+ l2n3(2 + len + padding_len, d);
3315
+ s->state = SSL3_ST_CW_NEXT_PROTO_B;
3316
+ s->init_num = 4 + 2 + len + padding_len;
3317
+ s->init_off = 0;
3318
+ }
3319
+
3320
+ return ssl3_do_write(s, SSL3_RT_HANDSHAKE);
3321
+ }
3322
+ #endif /* !OPENSSL_NO_TLSEXT && !OPENSSL_NO_NEXTPROTONEG */
3323
+
3324
+ /* Check to see if handshake is full or resumed. Usually this is just a
3325
+ * case of checking to see if a cache hit has occurred. In the case of
3326
+ * session tickets we have to check the next message to be sure.
3327
+ */
3328
+
3329
+ #ifndef OPENSSL_NO_TLSEXT
3330
+ int ssl3_check_finished(SSL *s)
3331
+ {
3332
+ int ok;
3333
+ long n;
3334
+ /* If we have no ticket it cannot be a resumed session. */
3335
+ if (!s->session->tlsext_tick)
3336
+ return 1;
3337
+ /* this function is called when we really expect a Certificate
3338
+ * message, so permit appropriate message length */
3339
+ n=s->method->ssl_get_message(s,
3340
+ SSL3_ST_CR_CERT_A,
3341
+ SSL3_ST_CR_CERT_B,
3342
+ -1,
3343
+ s->max_cert_list,
3344
+ &ok);
3345
+ if (!ok) return((int)n);
3346
+ s->s3->tmp.reuse_message = 1;
3347
+ if ((s->s3->tmp.message_type == SSL3_MT_FINISHED)
3348
+ || (s->s3->tmp.message_type == SSL3_MT_NEWSESSION_TICKET))
3349
+ return 2;
3350
+
3351
+ return 1;
3352
+ }
3353
+ #endif
3354
+
3355
+ int ssl_do_client_cert_cb(SSL *s, X509 **px509, EVP_PKEY **ppkey)
3356
+ {
3357
+ int i = 0;
3358
+ #ifndef OPENSSL_NO_ENGINE
3359
+ if (s->ctx->client_cert_engine)
3360
+ {
3361
+ i = ENGINE_load_ssl_client_cert(s->ctx->client_cert_engine, s,
3362
+ SSL_get_client_CA_list(s),
3363
+ px509, ppkey, NULL, NULL, NULL);
3364
+ if (i != 0)
3365
+ return i;
3366
+ }
3367
+ #endif
3368
+ if (s->ctx->client_cert_cb)
3369
+ i = s->ctx->client_cert_cb(s,px509,ppkey);
3370
+ return i;
3371
+ }