jruby-openssl 0.9.5-java

Sign up to get free protection for your applications and to get access to all the features.
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,65 @@
1
+ =begin
2
+ = $RCSfile$ -- Ruby-space predefined Cipher subclasses
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 Cipher
23
+ %w(AES CAST5 BF DES IDEA RC2 RC4 RC5).each{|name|
24
+ klass = Class.new(Cipher){
25
+ define_method(:initialize){|*args|
26
+ cipher_name = args.inject(name){|n, arg| "#{n}-#{arg}" }
27
+ super(cipher_name)
28
+ }
29
+ }
30
+ const_set(name, klass)
31
+ }
32
+
33
+ %w(128 192 256).each{|keylen|
34
+ klass = Class.new(Cipher){
35
+ define_method(:initialize){|mode|
36
+ mode ||= "CBC"
37
+ cipher_name = "AES-#{keylen}-#{mode}"
38
+ super(cipher_name)
39
+ }
40
+ }
41
+ const_set("AES#{keylen}", klass)
42
+ }
43
+
44
+ # Generate, set, and return a random key.
45
+ # You must call cipher.encrypt or cipher.decrypt before calling this method.
46
+ def random_key
47
+ str = OpenSSL::Random.random_bytes(self.key_len)
48
+ self.key = str
49
+ return str
50
+ end
51
+
52
+ # Generate, set, and return a random iv.
53
+ # You must call cipher.encrypt or cipher.decrypt before calling this method.
54
+ def random_iv
55
+ str = OpenSSL::Random.random_bytes(self.iv_len)
56
+ self.iv = str
57
+ return str
58
+ end
59
+
60
+ # This class is only provided for backwards compatibility. Use OpenSSL::Digest in the future.
61
+ class Cipher < Cipher
62
+ # add warning
63
+ end
64
+ end # Cipher
65
+ end # OpenSSL
@@ -0,0 +1,316 @@
1
+ =begin
2
+ = Ruby-space definitions that completes C-space funcs for Config
3
+
4
+ = Info
5
+ Copyright (C) 2010 Hiroshi Nakamura <nahi@ruby-lang.org>
6
+
7
+ = Licence
8
+ This program is licenced under the same licence as Ruby.
9
+ (See the file 'LICENCE'.)
10
+
11
+ =end
12
+
13
+ ##
14
+ # Should we care what if somebody require this file directly?
15
+ #require 'openssl'
16
+ require 'stringio'
17
+
18
+ module OpenSSL
19
+ class Config
20
+ include Enumerable
21
+
22
+ class << self
23
+ def parse(str)
24
+ c = new()
25
+ parse_config(StringIO.new(str)).each do |section, hash|
26
+ c[section] = hash
27
+ end
28
+ c
29
+ end
30
+
31
+ alias load new
32
+
33
+ def parse_config(io)
34
+ begin
35
+ parse_config_lines(io)
36
+ rescue ConfigError => e
37
+ e.message.replace("error in line #{io.lineno}: " + e.message)
38
+ raise
39
+ end
40
+ end
41
+
42
+ def get_key_string(data, section, key) # :nodoc:
43
+ if v = data[section] && data[section][key]
44
+ return v
45
+ elsif section == 'ENV'
46
+ if v = ENV[key]
47
+ return v
48
+ end
49
+ end
50
+ if v = data['default'] && data['default'][key]
51
+ return v
52
+ end
53
+ end
54
+
55
+ private
56
+
57
+ def parse_config_lines(io)
58
+ section = 'default'
59
+ data = {section => {}}
60
+ while definition = get_definition(io)
61
+ definition = clear_comments(definition)
62
+ next if definition.empty?
63
+ if definition[0] == ?[
64
+ if /\[([^\]]*)\]/ =~ definition
65
+ section = $1.strip
66
+ data[section] ||= {}
67
+ else
68
+ raise ConfigError, "missing close square bracket"
69
+ end
70
+ else
71
+ if /\A([^:\s]*)(?:::([^:\s]*))?\s*=(.*)\z/ =~ definition
72
+ if $2
73
+ section = $1
74
+ key = $2
75
+ else
76
+ key = $1
77
+ end
78
+ value = unescape_value(data, section, $3)
79
+ (data[section] ||= {})[key] = value.strip
80
+ else
81
+ raise ConfigError, "missing equal sign"
82
+ end
83
+ end
84
+ end
85
+ data
86
+ end
87
+
88
+ # escape with backslash
89
+ QUOTE_REGEXP_SQ = /\A([^'\\]*(?:\\.[^'\\]*)*)'/
90
+ # escape with backslash and doubled dq
91
+ QUOTE_REGEXP_DQ = /\A([^"\\]*(?:""[^"\\]*|\\.[^"\\]*)*)"/
92
+ # escaped char map
93
+ ESCAPE_MAP = {
94
+ "r" => "\r",
95
+ "n" => "\n",
96
+ "b" => "\b",
97
+ "t" => "\t",
98
+ }
99
+
100
+ def unescape_value(data, section, value)
101
+ scanned = []
102
+ while m = value.match(/['"\\$]/)
103
+ scanned << m.pre_match
104
+ c = m[0]
105
+ value = m.post_match
106
+ case c
107
+ when "'"
108
+ if m = value.match(QUOTE_REGEXP_SQ)
109
+ scanned << m[1].gsub(/\\(.)/, '\\1')
110
+ value = m.post_match
111
+ else
112
+ break
113
+ end
114
+ when '"'
115
+ if m = value.match(QUOTE_REGEXP_DQ)
116
+ scanned << m[1].gsub(/""/, '').gsub(/\\(.)/, '\\1')
117
+ value = m.post_match
118
+ else
119
+ break
120
+ end
121
+ when "\\"
122
+ c = value.slice!(0, 1)
123
+ scanned << (ESCAPE_MAP[c] || c)
124
+ when "$"
125
+ ref, value = extract_reference(value)
126
+ refsec = section
127
+ if ref.index('::')
128
+ refsec, ref = ref.split('::', 2)
129
+ end
130
+ if v = get_key_string(data, refsec, ref)
131
+ scanned << v
132
+ else
133
+ raise ConfigError, "variable has no value"
134
+ end
135
+ else
136
+ raise 'must not reaced'
137
+ end
138
+ end
139
+ scanned << value
140
+ scanned.join
141
+ end
142
+
143
+ def extract_reference(value)
144
+ rest = ''
145
+ if m = value.match(/\(([^)]*)\)|\{([^}]*)\}/)
146
+ value = m[1] || m[2]
147
+ rest = m.post_match
148
+ elsif [?(, ?{].include?(value[0])
149
+ raise ConfigError, "no close brace"
150
+ end
151
+ if m = value.match(/[a-zA-Z0-9_]*(?:::[a-zA-Z0-9_]*)?/)
152
+ return m[0], m.post_match + rest
153
+ else
154
+ raise
155
+ end
156
+ end
157
+
158
+ def clear_comments(line)
159
+ # FCOMMENT
160
+ if m = line.match(/\A([\t\n\f ]*);.*\z/)
161
+ return m[1]
162
+ end
163
+ # COMMENT
164
+ scanned = []
165
+ while m = line.match(/[#'"\\]/)
166
+ scanned << m.pre_match
167
+ c = m[0]
168
+ line = m.post_match
169
+ case c
170
+ when '#'
171
+ line = nil
172
+ break
173
+ when "'", '"'
174
+ regexp = (c == "'") ? QUOTE_REGEXP_SQ : QUOTE_REGEXP_DQ
175
+ scanned << c
176
+ if m = line.match(regexp)
177
+ scanned << m[0]
178
+ line = m.post_match
179
+ else
180
+ scanned << line
181
+ line = nil
182
+ break
183
+ end
184
+ when "\\"
185
+ scanned << c
186
+ scanned << line.slice!(0, 1)
187
+ else
188
+ raise 'must not reaced'
189
+ end
190
+ end
191
+ scanned << line
192
+ scanned.join
193
+ end
194
+
195
+ def get_definition(io)
196
+ if line = get_line(io)
197
+ while /[^\\]\\\z/ =~ line
198
+ if extra = get_line(io)
199
+ line += extra
200
+ else
201
+ break
202
+ end
203
+ end
204
+ return line.strip
205
+ end
206
+ end
207
+
208
+ def get_line(io)
209
+ if line = io.gets
210
+ line.gsub(/[\r\n]*/, '')
211
+ end
212
+ end
213
+ end
214
+
215
+ def initialize(filename = nil)
216
+ @data = {}
217
+ if filename
218
+ File.open(filename.to_s) do |file|
219
+ Config.parse_config(file).each do |section, hash|
220
+ self[section] = hash
221
+ end
222
+ end
223
+ end
224
+ end
225
+
226
+ def get_value(section, key)
227
+ if section.nil?
228
+ raise TypeError.new('nil not allowed')
229
+ end
230
+ section = 'default' if section.empty?
231
+ get_key_string(section, key)
232
+ end
233
+
234
+ def value(arg1, arg2 = nil)
235
+ warn('Config#value is deprecated; use Config#get_value')
236
+ if arg2.nil?
237
+ section, key = 'default', arg1
238
+ else
239
+ section, key = arg1, arg2
240
+ end
241
+ section ||= 'default'
242
+ section = 'default' if section.empty?
243
+ get_key_string(section, key)
244
+ end
245
+
246
+ def add_value(section, key, value)
247
+ check_modify
248
+ (@data[section] ||= {})[key] = value
249
+ end
250
+
251
+ def [](section)
252
+ @data[section] || {}
253
+ end
254
+
255
+ def section(name)
256
+ warn('Config#section is deprecated; use Config#[]')
257
+ @data[name] || {}
258
+ end
259
+
260
+ def []=(section, pairs)
261
+ check_modify
262
+ @data[section] ||= {}
263
+ pairs.each do |key, value|
264
+ self.add_value(section, key, value)
265
+ end
266
+ end
267
+
268
+ def sections
269
+ @data.keys
270
+ end
271
+
272
+ def to_s
273
+ ary = []
274
+ @data.keys.sort.each do |section|
275
+ ary << "[ #{section} ]\n"
276
+ @data[section].keys.each do |key|
277
+ ary << "#{key}=#{@data[section][key]}\n"
278
+ end
279
+ ary << "\n"
280
+ end
281
+ ary.join
282
+ end
283
+
284
+ def each
285
+ @data.each do |section, hash|
286
+ hash.each do |key, value|
287
+ yield(section, key, value)
288
+ end
289
+ end
290
+ end
291
+
292
+ def inspect
293
+ "#<#{self.class.name} sections=#{sections.inspect}>"
294
+ end
295
+
296
+ protected
297
+
298
+ def data
299
+ @data
300
+ end
301
+
302
+ private
303
+
304
+ def initialize_copy(other)
305
+ @data = other.data.dup
306
+ end
307
+
308
+ def check_modify
309
+ raise TypeError.new("Insecure: can't modify OpenSSL config") if frozen?
310
+ end
311
+
312
+ def get_key_string(section, key)
313
+ Config.get_key_string(@data, section, key)
314
+ end
315
+ end
316
+ end
@@ -0,0 +1,61 @@
1
+ =begin
2
+ = $RCSfile$ -- Ruby-space predefined Digest subclasses
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 Digest
23
+
24
+ alg = %w(DSS DSS1 MD2 MD4 MD5 MDC2 RIPEMD160 SHA SHA1)
25
+ if OPENSSL_VERSION_NUMBER > 0x00908000
26
+ alg += %w(SHA224 SHA256 SHA384 SHA512)
27
+ end
28
+
29
+ def self.digest(name, data)
30
+ super(data, name)
31
+ end
32
+
33
+ alg.each{|name|
34
+ klass = Class.new(Digest){
35
+ define_method(:initialize){|*data|
36
+ if data.length > 1
37
+ raise ArgumentError,
38
+ "wrong number of arguments (#{data.length} for 1)"
39
+ end
40
+ super(name, data.first)
41
+ }
42
+ }
43
+ singleton = (class << klass; self; end)
44
+ singleton.class_eval{
45
+ define_method(:digest){|data| Digest.digest(name, data) }
46
+ define_method(:hexdigest){|data| Digest.hexdigest(name, data) }
47
+ }
48
+ const_set(name, klass)
49
+ }
50
+
51
+ # This class is only provided for backwards compatibility. Use OpenSSL::Digest in the future.
52
+ class Digest < Digest
53
+ def initialize(*args)
54
+ # add warning
55
+ super(*args)
56
+ end
57
+ end
58
+
59
+ end # Digest
60
+ end # OpenSSL
61
+
@@ -0,0 +1,25 @@
1
+ =begin
2
+ = $RCSfile$ -- PKCS7
3
+
4
+ = Licence
5
+ This program is licenced under the same licence as Ruby.
6
+ (See the file 'LICENCE'.)
7
+
8
+ = Version
9
+ $Id: digest.rb 12148 2007-04-05 05:59:22Z technorama $
10
+ =end
11
+
12
+ module OpenSSL
13
+ class PKCS7
14
+ # This class is only provided for backwards compatibility. Use OpenSSL::PKCS7 in the future.
15
+ class PKCS7 < PKCS7
16
+ def initialize(*args)
17
+ super(*args)
18
+
19
+ warn("Warning: OpenSSL::PKCS7::PKCS7 is deprecated after Ruby 1.9; use OpenSSL::PKCS7 instead")
20
+ end
21
+ end
22
+
23
+ end # PKCS7
24
+ end # OpenSSL
25
+