openssl-extensions 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,12 @@
1
+ module OpenSSLExtensions
2
+
3
+ def self.check_dependencies!
4
+ begin
5
+ require 'openssl'
6
+ rescue LoadError
7
+ $stderr.puts "OpenSSLExtensions requires Ruby to be compiled with OpenSSL support."
8
+ exit(1)
9
+ end
10
+ end
11
+
12
+ end
@@ -0,0 +1,5 @@
1
+ require 'openssl-extensions'
2
+ OpenSSLExtensions.check_dependencies!
3
+
4
+ require 'openssl-extensions/x509/certificate'
5
+ require 'openssl-extensions/x509/name'
@@ -0,0 +1,3 @@
1
+ module OpenSSLExtensions
2
+ Version = '0.0.1'
3
+ end
@@ -0,0 +1,2 @@
1
+ module OpenSSLExtensions::X509
2
+ end
@@ -0,0 +1,36 @@
1
+ require 'openssl-extensions/x509'
2
+
3
+ class OpenSSLExtensions::X509::AuthorityKeyIdentifier
4
+
5
+ attr_reader :issuer_name, :serial_number, :key_id
6
+ alias :serial :serial_number
7
+
8
+ def initialize(extension_string)
9
+ parse(extension_string.dup)
10
+ end
11
+
12
+ def parse(string)
13
+ Hash[string.scan(%r{(\w+):([^,\n]+)})].tap do |h|
14
+ @issuer_name = common_name(strip(h['DirName']))
15
+ @serial_number = strip(h['serial'])
16
+ @key_id = strip(h['keyid'])
17
+ end
18
+ end
19
+ private :parse
20
+
21
+ def strip(input)
22
+ input ? input.to_s.strip : nil
23
+ end
24
+ private :strip
25
+
26
+ def common_name(input)
27
+ if input
28
+ name = input.split('/').
29
+ collect { |v| v.split('=') }.
30
+ detect { |id, val| id == 'CN' }
31
+ name[1] if name
32
+ end
33
+ end
34
+ private :common_name
35
+
36
+ end
@@ -0,0 +1,26 @@
1
+ require 'openssl-extensions/x509'
2
+ require 'openssl-extensions/x509/authority_key_identifier'
3
+
4
+ module OpenSSLExtensions::X509::Certificate
5
+
6
+ def subject_alternative_names
7
+ names_string = read_extension_by_oid('subjectAltName')
8
+ names_string ? names_string.scan(%r{DNS:([^,]+)}).flatten : []
9
+ end
10
+
11
+ def subject_key_identifier
12
+ read_extension_by_oid('subjectKeyIdentifier')
13
+ end
14
+
15
+ def authority_key_identifier
16
+ OpenSSLExtensions::X509::AuthorityKeyIdentifier.new(read_extension_by_oid('authorityKeyIdentifier'))
17
+ end
18
+
19
+ def read_extension_by_oid(oid)
20
+ (extensions.detect { |e| e.to_a.first == oid } || []).to_a[1]
21
+ end
22
+ protected :read_extension_by_oid
23
+
24
+ end
25
+
26
+ OpenSSL::X509::Certificate.send(:include, OpenSSLExtensions::X509::Certificate)
@@ -0,0 +1,38 @@
1
+ require 'openssl-extensions/x509'
2
+
3
+ module OpenSSLExtensions::X509::Name
4
+ def organization
5
+ read_entry_by_oid('O')
6
+ end
7
+
8
+ def organizational_unit
9
+ read_entry_by_oid('OU')
10
+ end
11
+
12
+ def common_name
13
+ read_entry_by_oid('CN')
14
+ end
15
+
16
+ def country
17
+ read_entry_by_oid('C')
18
+ end
19
+
20
+ def locality
21
+ read_entry_by_oid('L')
22
+ end
23
+
24
+ def state
25
+ read_entry_by_oid('ST')
26
+ end
27
+ alias :region :state
28
+
29
+
30
+ protected
31
+
32
+
33
+ def read_entry_by_oid(oid)
34
+ (to_a.detect { |e| e.first == oid } || [])[1]
35
+ end
36
+ end
37
+
38
+ OpenSSL::X509::Name.send(:include, OpenSSLExtensions::X509::Name)
metadata ADDED
@@ -0,0 +1,86 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: openssl-extensions
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Nathaniel Bibler
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-10-01 00:00:00 -04:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rspec
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 2
29
+ - 0
30
+ - 0
31
+ - beta
32
+ - 19
33
+ version: 2.0.0.beta.19
34
+ type: :development
35
+ version_requirements: *id001
36
+ description: This library patches OpenSSL to add helper methods and extensions to OpenSSL objects with the intention of making the interface more intuitive.
37
+ email:
38
+ - nate@envylabs.com
39
+ executables: []
40
+
41
+ extensions: []
42
+
43
+ extra_rdoc_files: []
44
+
45
+ files:
46
+ - lib/openssl-extensions/all.rb
47
+ - lib/openssl-extensions/version.rb
48
+ - lib/openssl-extensions/x509/authority_key_identifier.rb
49
+ - lib/openssl-extensions/x509/certificate.rb
50
+ - lib/openssl-extensions/x509/name.rb
51
+ - lib/openssl-extensions/x509.rb
52
+ - lib/openssl-extensions.rb
53
+ has_rdoc: true
54
+ homepage: http://github.com/envylabs/openssl-extensions
55
+ licenses: []
56
+
57
+ post_install_message:
58
+ rdoc_options: []
59
+
60
+ require_paths:
61
+ - lib
62
+ required_ruby_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ segments:
67
+ - 0
68
+ version: "0"
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ segments:
74
+ - 1
75
+ - 3
76
+ - 6
77
+ version: 1.3.6
78
+ requirements: []
79
+
80
+ rubyforge_project:
81
+ rubygems_version: 1.3.6
82
+ signing_key:
83
+ specification_version: 3
84
+ summary: Helper methods and extensions for OpenSSL to make the interface more intuitive.
85
+ test_files: []
86
+