jruby-openssl 0.9.5-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. checksums.yaml +7 -0
  2. data/History.txt +218 -0
  3. data/License.txt +30 -0
  4. data/Mavenfile +44 -0
  5. data/README.txt +13 -0
  6. data/Rakefile +7 -0
  7. data/lib/jopenssl.jar +0 -0
  8. data/lib/jopenssl/load.rb +29 -0
  9. data/lib/jopenssl/version.rb +6 -0
  10. data/lib/jopenssl18/openssl.rb +23 -0
  11. data/lib/jopenssl18/openssl/bn.rb +35 -0
  12. data/lib/jopenssl18/openssl/buffering.rb +241 -0
  13. data/lib/jopenssl18/openssl/cipher.rb +65 -0
  14. data/lib/jopenssl18/openssl/config.rb +316 -0
  15. data/lib/jopenssl18/openssl/digest.rb +61 -0
  16. data/lib/jopenssl18/openssl/pkcs7.rb +25 -0
  17. data/lib/jopenssl18/openssl/ssl-internal.rb +179 -0
  18. data/lib/jopenssl18/openssl/ssl.rb +1 -0
  19. data/lib/jopenssl18/openssl/x509-internal.rb +153 -0
  20. data/lib/jopenssl18/openssl/x509.rb +1 -0
  21. data/lib/jopenssl19/openssl.rb +23 -0
  22. data/lib/jopenssl19/openssl/bn.rb +35 -0
  23. data/lib/jopenssl19/openssl/buffering.rb +449 -0
  24. data/lib/jopenssl19/openssl/cipher.rb +65 -0
  25. data/lib/jopenssl19/openssl/config.rb +313 -0
  26. data/lib/jopenssl19/openssl/digest.rb +72 -0
  27. data/lib/jopenssl19/openssl/ssl-internal.rb +177 -0
  28. data/lib/jopenssl19/openssl/ssl.rb +2 -0
  29. data/lib/jopenssl19/openssl/x509-internal.rb +158 -0
  30. data/lib/jopenssl19/openssl/x509.rb +2 -0
  31. data/lib/jopenssl21/openssl.rb +23 -0
  32. data/lib/jopenssl21/openssl/bn.rb +35 -0
  33. data/lib/jopenssl21/openssl/buffering.rb +449 -0
  34. data/lib/jopenssl21/openssl/cipher.rb +65 -0
  35. data/lib/jopenssl21/openssl/config.rb +313 -0
  36. data/lib/jopenssl21/openssl/digest.rb +89 -0
  37. data/lib/jopenssl21/openssl/ssl.rb +237 -0
  38. data/lib/jopenssl21/openssl/x509.rb +162 -0
  39. data/lib/jruby-openssl.rb +5 -0
  40. data/lib/openssl.rb +1 -0
  41. data/lib/openssl/bn.rb +7 -0
  42. data/lib/openssl/buffering.rb +7 -0
  43. data/lib/openssl/cipher.rb +7 -0
  44. data/lib/openssl/config.rb +7 -0
  45. data/lib/openssl/digest.rb +7 -0
  46. data/lib/openssl/pkcs12.rb +106 -0
  47. data/lib/openssl/pkcs7.rb +7 -0
  48. data/lib/openssl/ssl-internal.rb +7 -0
  49. data/lib/openssl/ssl.rb +7 -0
  50. data/lib/openssl/x509-internal.rb +7 -0
  51. data/lib/openssl/x509.rb +7 -0
  52. data/lib/org/bouncycastle/bcpkix-jdk15on/1.47/bcpkix-jdk15on-1.47.jar +0 -0
  53. data/lib/org/bouncycastle/bcprov-jdk15on/1.47/bcprov-jdk15on-1.47.jar +0 -0
  54. metadata +97 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 83b4b3bc5766a70b162d7fc27fc2f1ae6a1cc98d
4
+ data.tar.gz: 9b35fc5907f29cd2d46690e2b639429da44970e0
5
+ SHA512:
6
+ metadata.gz: 7b59627e9a268c6942c5210cd0ccf28aca4ed1ca550fd72d8d8735c8d8dd735d3abea3b488799c98e34d1f9aed3986790a4e01abe0381c2884b4ace3e218234c
7
+ data.tar.gz: 7f72bdc6f8abad2b5d2ccccf858b6eb0531be0a6da2dc56774c74227dc6c6d9dd80f379ca3c693ac3b47236bda760a9bfb089230d7c860da8588b80d32b6ae0a
@@ -0,0 +1,218 @@
1
+ == 0.7.7
2
+
3
+ This release includes bug fixes.
4
+
5
+ - JRUBY-6622: Support loading encrypted RSA key with PBES2
6
+ - JRUBY-4326: Confusing (and late) OpenSSL error message
7
+ - JRUBY-6579: Avoid ClassCastException for public key loading
8
+ - JRUBY-6515: sending UTF-8 data over SSL can hang with openssl
9
+ - Update tests to sync with CRuby ruby_1_9_3
10
+
11
+ == 0.7.6
12
+
13
+ This release includes initial implementation of PKCS12 by Owen Ou.
14
+
15
+ - JRUBY-5066: Implement OpenSSL::PKCS12 (only for simple case)
16
+ - JRUBY-6385: Assertion failure with -J-ea
17
+
18
+ == 0.7.5
19
+
20
+ This release improved 1.9 mode support with help of
21
+ Duncan Mak <duncan@earthaid.net>. Now jruby-ossl gem includes both 1.8 and 1.9
22
+ libraries and part of features should work fine on 1.9 mode, too.
23
+
24
+ - JRUBY-6270: Wrong keyUsage check for SSL server
25
+ - JRUBY-6260: OpenSSL::ASN1::Integer#value incompatibility
26
+ - JRUBY-6044: Improve Ecrypted RSA/DSA pem support
27
+ - JRUBY-5972: Allow to load/dump empty PKCS7 data
28
+ - JRUBY-5834: Fix X509Name handling; X509Name RDN can include multiple elements
29
+ - JRUBY-5362: Improved 1.9 support
30
+ - JRUBY-4992: Warn if loaded by non JRuby interpreter
31
+
32
+ == 0.7.4
33
+
34
+ - JRUBY-5519: Avoid String encoding dependency in DER loading. PEM loading
35
+ failed on JRuby 1.6.x. Fixed.
36
+ - JRUBY-5510: Add debug information to released jar
37
+ - JRUBY-5478: Update bouncycastle jars to the latest version. (1.46)
38
+
39
+ == 0.7.3
40
+
41
+ - JRUBY-5200: Net::IMAP + SSL(imaps) login could hang. Fixed.
42
+ - JRUBY-5253: Allow to load the certificate file which includes private
43
+ key for activemarchant compatibility.
44
+ - JRUBY-5267: Added SSL socket error-checks to avoid busy loop under an
45
+ unknown condition.
46
+ - JRUBY-5316: Improvements for J9's IBMJCE support. Now all testcases
47
+ pass on J9 JDK 6.
48
+
49
+ == 0.7.2
50
+
51
+ - JRUBY-5126: Ignore Cipher#reset and Cipher#iv= when it's a stream
52
+ cipher (Net::SSH compatibility)
53
+ - JRUBY-5125: let Cipher#name for 'rc4' to be 'RC4' (Net::SSH
54
+ compatibility)
55
+ - JRUBY-5096: Fixed inconsistent Certificate verification behavior
56
+ - JRUBY-5060: Avoid NPE from to_pem for empty X509 Objects
57
+ - JRUBY-5059: SSLSocket ignores Timeout (Fixed)
58
+ - JRUBY-4965: implemented OpenSSL::Config
59
+ - JRUBY-5023: make Certificate#signature_algorithm return correct algo
60
+ name; "sha1WithRSAEncryption" instead of "SHA1"
61
+ - JRUBY-5024: let HMAC.new accept a String as a digest name
62
+ - JRUBY-5018: SSLSocket holds selectors, keys, preventing quick
63
+ cleanup of resources when dereferenced
64
+
65
+ == 0.7.1
66
+
67
+ - NOTE: Now BouncyCastle jars has moved out to its own gem
68
+ "bouncy-castle-java" (http://rubygems.org/gems/bouncy-castle-java).
69
+ You don't need to care about it because "jruby-openssl" gem depends
70
+ on it from now on.
71
+
72
+ === SSL bugfix
73
+
74
+ - JRUBY-4826 net/https client possibly raises "rbuf_fill': End of file
75
+ reached (EOFError)" for HTTP chunked read.
76
+
77
+ === Misc
78
+
79
+ - JRUBY-4900: Set proper String to OpenSSL::OPENSSL_VERSION. Make sure
80
+ it's not an OpenSSL artifact: "OpenSSL 0.9.8b 04 May 2006
81
+ (JRuby-OpenSSL fake)" -> "jruby-ossl 0.7.1"
82
+ - JRUBY-4975: Moving BouncyCastle jars out to its own gem.
83
+
84
+ == 0.7
85
+
86
+ - Follow MRI 1.8.7 openssl API changes
87
+ - Fixes so that jruby-openssl can run on appengine
88
+ - Many bug and compatibility fixes, see below.
89
+ - This is the last release that will be compatible with JRuby 1.4.x.
90
+ - Compatibility issues
91
+ -- JRUBY-4342: Follow ruby-openssl of CRuby 1.8.7.
92
+ -- JRUBY-4346: Sync tests with tests for ruby-openssl of CRuby 1.8.7.
93
+ -- JRUBY-4444: OpenSSL crash running RubyGems tests
94
+ -- JRUBY-4075: Net::SSH gives OpenSSL::Cipher::CipherError "No message
95
+ available"
96
+ -- JRUBY-4076: Net::SSH padding error using 3des-cbc on Solaris
97
+ -- JRUBY-4541: jruby-openssl doesn't load on App Engine.
98
+ -- JRUBY-4077: Net::SSH "all authorization methods failed" Solaris -> Solaris
99
+ -- JRUBY-4535: Issues with the BouncyCastle provider
100
+ -- JRUBY-4510: JRuby-OpenSSL crashes when JCE fails a initialise bcprov
101
+ -- JRUBY-4343: Update BouncyCastle jar to upstream version; jdk14-139 ->
102
+ jdk15-144
103
+ - Cipher issues
104
+ -- JRUBY-4012: Initialization vector length handled differently than in MRI
105
+ (longer IV sequence are trimmed to fit the required)
106
+ -- JRUBY-4473: Implemented DSA key generation
107
+ -- JRUBY-4472: Cipher does not support RC4 and CAST
108
+ -- JRUBY-4577: InvalidParameterException 'Wrong keysize: must be equal to 112 or
109
+ 168' for DES3 + SunJCE
110
+ - SSL and X.509(PKIX) issues
111
+ -- JRUBY-4384: TCP socket connection causes busy loop of SSL server
112
+ -- JRUBY-4370: Implement SSLContext#ciphers
113
+ -- JRUBY-4688: SSLContext#ciphers does not accept 'DEFAULT'
114
+ -- JRUBY-4357: SSLContext#{setup,ssl_version=} are not implemented
115
+ -- JRUBY-4397: SSLContext#extra_chain_cert and SSLContext#client_ca
116
+ -- JRUBY-4684: SSLContext#verify_depth is ignored
117
+ -- JRUBY-4398: SSLContext#options does not affect to SSL sessions
118
+ -- JRUBY-4360: Implement SSLSocket#verify_result and dependents
119
+ -- JRUBY-3829: SSLSocket#read should clear given buffer before concatenating
120
+ (ByteBuffer.java:328:in `allocate': java.lang.IllegalArgumentException when
121
+ returning SOAP queries over a certain size)
122
+ -- JRUBY-4686: SSLSocket can drop last chunk of data just before inbound channel
123
+ close
124
+ -- JRUBY-4369: X509Store#verify_callback is not called
125
+ -- JRUBY-4409: OpenSSL::X509::Store#add_file corrupts when it includes
126
+ certificates which have the same subject (problem with
127
+ ruby-openid-apps-discovery (github jruby-openssl issue #2))
128
+ -- JRUBY-4333: PKCS#8 formatted privkey read
129
+ -- JRUBY-4454: Loading Key file as a Certificate causes NPE
130
+ -- JRUBY-4455: calling X509::Certificate#sign for the Certificate initialized
131
+ from PEM causes IllegalStateException
132
+ - PKCS#7 issues
133
+ -- JRUBY-4379: PKCS7#sign failed for DES3 cipher algorithm
134
+ -- JRUBY-4428: Allow to use DES-EDE3-CBC in PKCS#7 w/o the Policy Files (rake
135
+ test doesn't finish on JDK5 w/o policy files update)
136
+ - Misc
137
+ -- JRUBY-4574: jruby-openssl deprecation warning cleanup
138
+ -- JRUBY-4591: jruby-1.4 support
139
+
140
+ == 0.6
141
+
142
+ - This is a recommended upgrade to jruby-openssl. A security problem
143
+ involving peer certificate verification was found where failed
144
+ verification silently did nothing, making affected applications
145
+ vulnerable to attackers. Attackers could lead a client application
146
+ to believe that a secure connection to a rogue SSL server is
147
+ legitimate. Attackers could also penetrate client-validated SSL
148
+ server applications with a dummy certificate. Your application would
149
+ be vulnerable if you're using the 'net/https' library with
150
+ OpenSSL::SSL::VERIFY_PEER mode and any version of jruby-openssl
151
+ prior to 0.6. Thanks to NaHi (NAKAMURA Hiroshi) for finding the
152
+ problem and providing the fix. See
153
+ http://www.jruby.org/2009/12/07/vulnerability-in-jruby-openssl.html
154
+ for details.
155
+ - This release addresses CVE-2009-4123 which was reserved for the
156
+ above vulnerability.
157
+ - Many fixes from NaHi, including issues related to certificate
158
+ verification and certificate store purpose verification.
159
+ - implement OpenSSL::X509::Store#set_default_paths
160
+ - MRI compat. fix: OpenSSL::X509::Store#add_file
161
+ - Fix nsCertType handling.
162
+ - Fix Cipher#key_len for DES-EDE3: 16 should be 24.
163
+ - Modified test expectations around Cipher#final.
164
+ - Public keys are lazily instantiated when the
165
+ X509::Certificate#public_key method is called (Dave Garcia)
166
+
167
+ == 0.5.2
168
+
169
+ * Multiple bugs fixed:
170
+ ** JRUBY-3895 Could not verify server signature with net-ssh against Cygwin
171
+ ** JRUBY-3864 jruby-openssl depends on Base64Coder from JvYAMLb
172
+ ** JRUBY-3790 JRuby-OpenSSL test_post_connection_check is not passing
173
+ ** JRUBY-3767 OpenSSL ssl implementation doesn't support client auth
174
+ ** JRUBY-3673 jRuby-OpenSSL does not properly load certificate authority file
175
+
176
+ == 0.5.1
177
+
178
+ * Multiple fixes by Brice Figureau to get net/ssh working. Requires JRuby 1.3.1
179
+ to be 100%
180
+ * Fix by Frederic Jean for a character-decoding issue for some certificates
181
+
182
+ == 0.5
183
+
184
+ * Fixed JRUBY-3614: Unsupported HMAC algorithm (HMACSHA-256)
185
+ * Fixed JRUBY-3570: ActiveMerchant's AuthorizeNet Gateway throws OpenSSL Cert
186
+ Validation Error, when there should be no error
187
+ * Fixed JRUBY-3557 Class cast exception in PKeyRSA.java
188
+ * Fixed JRUBY-3468 X.509 certificates: subjectKeyIdentifier corrupted
189
+ * Fixed JRUBY-3285 Unsupported HMAC algorithm (HMACSHA1) error when generating
190
+ digest
191
+ * Misc code cleanup
192
+
193
+ == 0.2
194
+
195
+ - Enable remaining tests; fix a nil string issue in SSLSocket.sysread
196
+ (JRUBY-1888)
197
+ - Fix socket buffering issue by setting socket IO sync = true
198
+ - Fix bad file descriptor issue caused by unnecessary close (JRUBY-2152)
199
+ - Fix AES key length (JRUBY-2187)
200
+ - Fix cipher initialization (JRUBY-1100)
201
+ - Now, only compatible with JRuby 1.1
202
+
203
+ == 0.1.1
204
+
205
+ - Fixed blocker issue preventing HTTPS/SSL from working (JRUBY-1222)
206
+
207
+ == 0.1
208
+
209
+ - PLEASE NOTE: This release is not compatible with JRuby releases earlier than
210
+ 1.0.3 or 1.1b2. If you must use JRuby 1.0.2 or earlier, please install the
211
+ 0.6 release.
212
+ - Release coincides with JRuby 1.0.3 and JRuby 1.1b2 releases
213
+ - Simultaneous support for JRuby trunk and 1.0 branch
214
+ - Start of support for OpenSSL::BN
215
+
216
+ == 0.0.5 and prior
217
+
218
+ - Initial versions with maintenance updates
@@ -0,0 +1,30 @@
1
+ JRuby-OpenSSL is distributed under the same license as JRuby (http://www.jruby.org/).
2
+
3
+ Version: EPL 1.0/GPL 2.0/LGPL 2.1
4
+
5
+ The contents of this file are subject to the Common Public
6
+ License Version 1.0 (the "License"); you may not use this file
7
+ except in compliance with the License. You may obtain a copy of
8
+ the License at http://www.eclipse.org/legal/cpl-v10.html
9
+
10
+ Software distributed under the License is distributed on an "AS
11
+ IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
12
+ implied. See the License for the specific language governing
13
+ rights and limitations under the License.
14
+
15
+ Copyright (C) 2007 Ola Bini <ola.bini@gmail.com>
16
+
17
+ Alternatively, the contents of this file may be used under the terms of
18
+ either of the GNU General Public License Version 2 or later (the "GPL"),
19
+ or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
20
+ in which case the provisions of the GPL or the LGPL are applicable instead
21
+ of those above. If you wish to allow use of your version of this file only
22
+ under the terms of either the GPL or the LGPL, and not to allow others to
23
+ use your version of this file under the terms of the EPL, indicate your
24
+ decision by deleting the provisions above and replace them with the notice
25
+ and other provisions required by the GPL or the LGPL. If you do not delete
26
+ the provisions above, a recipient may use your version of this file under
27
+ the terms of any one of the EPL, the GPL or the LGPL.
28
+
29
+ JRuby-OpenSSL includes software by the Legion of the Bouncy Castle
30
+ (http://bouncycastle.org/license.html).
@@ -0,0 +1,44 @@
1
+ #-*- mode: ruby -*-
2
+
3
+ snapshot_repository :id => 'sonatype', :url => 'https://oss.sonatype.org/content/repositories/snapshots'
4
+
5
+ gemspec :jar => 'jopenssl', :include_jars => true
6
+
7
+ if model.version.to_s.match /[a-zA-Z]/
8
+ model.group_id = 'org.jruby.gems'
9
+
10
+ model.version = model.version + '-SNAPSHOT'
11
+ plugin :deploy do
12
+ execute_goals( :deploy,
13
+ :skip => false,
14
+ :altDeploymentRepository => 'sonatype-nexus-snapshots::default::https://oss.sonatype.org/content/repositories/snapshots/' )
15
+ end
16
+ end
17
+
18
+ plugin( :compiler, :target => '1.6', :source => '1.6', :debug => true, :verbose => false, :showWarnings => true, :showDeprecation => true )
19
+
20
+ jruby_plugin! :gem do
21
+ # avoid adding this not yet built openssl to the load_path
22
+ # when installing dependent gems
23
+ execute_goal :initialize, :lib => 'non-existing'
24
+ execute_goals :id => 'default-push', :skip => true
25
+ end
26
+
27
+ # you can use -Djruby.version=1.6.8 to pick a jruby version
28
+ # TODO use 1.6.8 and let the gem-maven-plugin pick the right version
29
+ properties 'jruby.version' => '1.7.12'
30
+ # we need the jruby API here, the version should be less important here
31
+ jar 'org.jruby:jruby-core', '${jruby.version}', :scope => :provided
32
+ # this artifact is needed to run the packaging at the end of the build
33
+ jar 'org.jruby:jruby-stdlib', '${jruby.version}', :scope => :provided
34
+
35
+ scope :test do
36
+ jar 'junit:junit:4.11'
37
+ end
38
+
39
+ properties( 'gem.home' => '../target/rubygems',
40
+ 'gem.path' => '${gem.home}',
41
+ 'tesla.dump.pom' => 'pom.xml',
42
+ 'tesla.dump.readonly' => true )
43
+
44
+ # vim: syntax=Ruby
@@ -0,0 +1,13 @@
1
+ = JRuby-OpenSSL
2
+
3
+ * https://github.com/jruby/jruby/tree/master/maven/gems/jruby-openssl
4
+
5
+ == DESCRIPTION:
6
+
7
+ JRuby-OpenSSL is an add-on gem for JRuby that emulates the Ruby OpenSSL native library.
8
+
9
+ Please report bugs and incompatibilities (preferably with testcases) to either the JRuby
10
+ mailing list [1] or the JRuby bug tracker [2].
11
+
12
+ [1]: http://xircles.codehaus.org/projects/jruby/lists
13
+ [2]: https://github.com/jruby/jruby/issues
@@ -0,0 +1,7 @@
1
+ #-*- mode: ruby -*-
2
+
3
+ require 'maven/ruby/tasks'
4
+
5
+ # the actual build configuration is inside the Mavenfile
6
+
7
+ task :default => :build
Binary file
@@ -0,0 +1,29 @@
1
+ unless defined? JRUBY_VERSION
2
+ warn 'Loading jruby-openssl in a non-JRuby interpreter'
3
+ end
4
+
5
+ require 'jopenssl/version'
6
+ begin
7
+ # if we have jar-dependencies we let it track the jars
8
+ require 'jar-dependencies'
9
+ require_jar( 'org.bouncycastle', 'bcpkix-jdk15on', Jopenssl::Version::BOUNCY_CASTLE_VERSION )
10
+ require_jar( 'org.bouncycastle', 'bcprov-jdk15on', Jopenssl::Version::BOUNCY_CASTLE_VERSION )
11
+ rescue LoadError
12
+ require "org/bouncycastle/bcpkix-jdk15on/#{Jopenssl::Version::BOUNCY_CASTLE_VERSION}/bcpkix-jdk15on-#{Jopenssl::Version::BOUNCY_CASTLE_VERSION}.jar"
13
+ require "org/bouncycastle/bcprov-jdk15on/#{Jopenssl::Version::BOUNCY_CASTLE_VERSION}/bcprov-jdk15on-#{Jopenssl::Version::BOUNCY_CASTLE_VERSION}.jar"
14
+ end
15
+
16
+ # Load extension
17
+ require 'jruby'
18
+ require 'jopenssl.jar'
19
+ org.jruby.ext.openssl.OSSLLibrary.new.load(JRuby.runtime, false)
20
+
21
+ if RUBY_VERSION >= '2.1.0'
22
+ load('jopenssl21/openssl.rb')
23
+ elsif RUBY_VERSION >= '1.9.0'
24
+ load('jopenssl19/openssl.rb')
25
+ else
26
+ load('jopenssl18/openssl.rb')
27
+ end
28
+
29
+ require 'openssl/pkcs12'
@@ -0,0 +1,6 @@
1
+ module Jopenssl
2
+ module Version
3
+ VERSION = "0.9.5"
4
+ BOUNCY_CASTLE_VERSION = "1.47"
5
+ end
6
+ end
@@ -0,0 +1,23 @@
1
+ =begin
2
+ = $RCSfile$ -- Loader for all OpenSSL C-space and Ruby-space definitions
3
+
4
+ = Info
5
+ 'OpenSSL for Ruby 2' project
6
+ Copyright (C) 2002 Michal Rokos <m.rokos@sh.cvut.cz>
7
+ All rights reserved.
8
+
9
+ = Licence
10
+ This program is licenced under the same licence as Ruby.
11
+ (See the file 'LICENCE'.)
12
+
13
+ = Version
14
+ $Id: openssl.rb 12496 2007-06-08 15:02:04Z technorama $
15
+ =end
16
+
17
+ require 'openssl/bn'
18
+ require 'openssl/cipher'
19
+ require 'openssl/config'
20
+ require 'openssl/digest'
21
+ require 'openssl/pkcs7'
22
+ require 'openssl/ssl-internal'
23
+ require 'openssl/x509-internal'
@@ -0,0 +1,35 @@
1
+ =begin
2
+ = $RCSfile$ -- Ruby-space definitions that completes C-space funcs for BN
3
+
4
+ = Info
5
+ 'OpenSSL for Ruby 2' project
6
+ Copyright (C) 2002 Michal Rokos <m.rokos@sh.cvut.cz>
7
+ All rights reserved.
8
+
9
+ = Licence
10
+ This program is licenced under the same licence as Ruby.
11
+ (See the file 'LICENCE'.)
12
+
13
+ = Version
14
+ $Id$
15
+ =end
16
+
17
+ ##
18
+ # Should we care what if somebody require this file directly?
19
+ #require 'openssl'
20
+
21
+ module OpenSSL
22
+ class BN
23
+ include Comparable
24
+ end # BN
25
+ end # OpenSSL
26
+
27
+ ##
28
+ # Add double dispatch to Integer
29
+ #
30
+ class Integer
31
+ def to_bn
32
+ OpenSSL::BN::new(self.to_s(16), 16)
33
+ end
34
+ end # Integer
35
+
@@ -0,0 +1,241 @@
1
+ =begin
2
+ = $RCSfile$ -- Buffering mix-in module.
3
+
4
+ = Info
5
+ 'OpenSSL for Ruby 2' project
6
+ Copyright (C) 2001 GOTOU YUUZOU <gotoyuzo@notwork.org>
7
+ All rights reserved.
8
+
9
+ = Licence
10
+ This program is licenced under the same licence as Ruby.
11
+ (See the file 'LICENCE'.)
12
+
13
+ = Version
14
+ $Id$
15
+ =end
16
+
17
+ module OpenSSL
18
+ module Buffering
19
+ include Enumerable
20
+ attr_accessor :sync
21
+ BLOCK_SIZE = 1024*16
22
+
23
+ def initialize(*args)
24
+ @eof = false
25
+ @rbuffer = ""
26
+ @sync = @io.sync
27
+ end
28
+
29
+ #
30
+ # for reading.
31
+ #
32
+ private
33
+
34
+ def fill_rbuff
35
+ begin
36
+ @rbuffer << self.sysread(BLOCK_SIZE)
37
+ rescue Errno::EAGAIN
38
+ retry
39
+ rescue EOFError
40
+ @eof = true
41
+ end
42
+ end
43
+
44
+ def consume_rbuff(size=nil)
45
+ if @rbuffer.empty?
46
+ nil
47
+ else
48
+ size = @rbuffer.size unless size
49
+ ret = @rbuffer[0, size]
50
+ @rbuffer[0, size] = ""
51
+ ret
52
+ end
53
+ end
54
+
55
+ public
56
+
57
+ def read(size=nil, buf=nil)
58
+ if size == 0
59
+ if buf
60
+ buf.clear
61
+ else
62
+ buf = ""
63
+ end
64
+ return @eof ? nil : buf
65
+ end
66
+ until @eof
67
+ break if size && size <= @rbuffer.size
68
+ fill_rbuff
69
+ end
70
+ ret = consume_rbuff(size) || ""
71
+ if buf
72
+ buf.replace(ret)
73
+ ret = buf
74
+ end
75
+ (size && ret.empty?) ? nil : ret
76
+ end
77
+
78
+ def readpartial(maxlen, buf=nil)
79
+ if maxlen == 0
80
+ if buf
81
+ buf.clear
82
+ else
83
+ buf = ""
84
+ end
85
+ return @eof ? nil : buf
86
+ end
87
+ if @rbuffer.empty?
88
+ begin
89
+ return sysread(maxlen, buf)
90
+ rescue Errno::EAGAIN
91
+ retry
92
+ end
93
+ end
94
+ ret = consume_rbuff(maxlen)
95
+ if buf
96
+ buf.replace(ret)
97
+ ret = buf
98
+ end
99
+ raise EOFError if ret.empty?
100
+ ret
101
+ end
102
+
103
+ def gets(eol=$/)
104
+ idx = @rbuffer.index(eol)
105
+ until @eof
106
+ break if idx
107
+ fill_rbuff
108
+ idx = @rbuffer.index(eol)
109
+ end
110
+ if eol.is_a?(Regexp)
111
+ size = idx ? idx+$&.size : nil
112
+ else
113
+ size = idx ? idx+eol.size : nil
114
+ end
115
+ consume_rbuff(size)
116
+ end
117
+
118
+ def each(eol=$/)
119
+ while line = self.gets(eol)
120
+ yield line
121
+ end
122
+ end
123
+ alias each_line each
124
+
125
+ def readlines(eol=$/)
126
+ ary = []
127
+ while line = self.gets(eol)
128
+ ary << line
129
+ end
130
+ ary
131
+ end
132
+
133
+ def readline(eol=$/)
134
+ raise EOFError if eof?
135
+ gets(eol)
136
+ end
137
+
138
+ def getc
139
+ c = read(1)
140
+ c ? c[0] : nil
141
+ end
142
+
143
+ def each_byte
144
+ while c = getc
145
+ yield(c)
146
+ end
147
+ end
148
+
149
+ def readchar
150
+ raise EOFError if eof?
151
+ getc
152
+ end
153
+
154
+ def ungetc(c)
155
+ @rbuffer[0,0] = c.chr
156
+ end
157
+
158
+ def eof?
159
+ fill_rbuff if !@eof && @rbuffer.empty?
160
+ @eof && @rbuffer.empty?
161
+ end
162
+ alias eof eof?
163
+
164
+ #
165
+ # for writing.
166
+ #
167
+ private
168
+
169
+ def do_write(s)
170
+ @wbuffer = "" unless defined? @wbuffer
171
+ @wbuffer << s
172
+ @sync ||= false
173
+ if @sync or @wbuffer.size > BLOCK_SIZE or idx = @wbuffer.rindex($/)
174
+ remain = idx ? idx + $/.size : @wbuffer.length
175
+ nwritten = 0
176
+ while remain > 0
177
+ str = @wbuffer[nwritten,remain]
178
+ begin
179
+ nwrote = syswrite(str)
180
+ rescue Errno::EAGAIN
181
+ retry
182
+ end
183
+ remain -= nwrote
184
+ nwritten += nwrote
185
+ end
186
+ @wbuffer[0,nwritten] = ""
187
+ end
188
+ end
189
+
190
+ public
191
+
192
+ def write(s)
193
+ do_write(s)
194
+ s.length
195
+ end
196
+
197
+ def << (s)
198
+ do_write(s)
199
+ self
200
+ end
201
+
202
+ def puts(*args)
203
+ s = ""
204
+ if args.empty?
205
+ s << "\n"
206
+ end
207
+ args.each{|arg|
208
+ s << arg.to_s
209
+ if $/ && /\n\z/ !~ s
210
+ s << "\n"
211
+ end
212
+ }
213
+ do_write(s)
214
+ nil
215
+ end
216
+
217
+ def print(*args)
218
+ s = ""
219
+ args.each{ |arg| s << arg.to_s }
220
+ do_write(s)
221
+ nil
222
+ end
223
+
224
+ def printf(s, *args)
225
+ do_write(s % args)
226
+ nil
227
+ end
228
+
229
+ def flush
230
+ osync = @sync
231
+ @sync = true
232
+ do_write ""
233
+ @sync = osync
234
+ end
235
+
236
+ def close
237
+ flush rescue nil
238
+ sysclose
239
+ end
240
+ end
241
+ end