ccrypto-ruby 0.1.0

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 (39) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/Gemfile +12 -0
  4. data/Gemfile.lock +64 -0
  5. data/README.md +149 -0
  6. data/Rakefile +10 -0
  7. data/bin/console +15 -0
  8. data/bin/setup +8 -0
  9. data/ccrypto-ruby.gemspec +45 -0
  10. data/lib/ccrypto/provider.rb +175 -0
  11. data/lib/ccrypto/ruby/data_conversion.rb +68 -0
  12. data/lib/ccrypto/ruby/engines/asn1_engine.rb +110 -0
  13. data/lib/ccrypto/ruby/engines/asn1_object.rb +19 -0
  14. data/lib/ccrypto/ruby/engines/cipher_engine.rb +170 -0
  15. data/lib/ccrypto/ruby/engines/compression_engine.rb +61 -0
  16. data/lib/ccrypto/ruby/engines/data_conversion_engine.rb +9 -0
  17. data/lib/ccrypto/ruby/engines/decompression_engine.rb +70 -0
  18. data/lib/ccrypto/ruby/engines/digest_engine.rb +127 -0
  19. data/lib/ccrypto/ruby/engines/ecc_engine.rb +218 -0
  20. data/lib/ccrypto/ruby/engines/hkdf_engine.rb +54 -0
  21. data/lib/ccrypto/ruby/engines/hmac_engine.rb +53 -0
  22. data/lib/ccrypto/ruby/engines/pbkdf2_engine.rb +69 -0
  23. data/lib/ccrypto/ruby/engines/pkcs7_engine.rb +179 -0
  24. data/lib/ccrypto/ruby/engines/rsa_engine.rb +300 -0
  25. data/lib/ccrypto/ruby/engines/scrypt_engine.rb +34 -0
  26. data/lib/ccrypto/ruby/engines/secret_key_engine.rb +18 -0
  27. data/lib/ccrypto/ruby/engines/secret_sharing_engine.rb +331 -0
  28. data/lib/ccrypto/ruby/engines/secure_random_engine.rb +34 -0
  29. data/lib/ccrypto/ruby/engines/x509_engine.rb +213 -0
  30. data/lib/ccrypto/ruby/ext/secret_key.rb +24 -0
  31. data/lib/ccrypto/ruby/ext/x509_cert.rb +24 -0
  32. data/lib/ccrypto/ruby/keybundle_store/pem_store.rb +73 -0
  33. data/lib/ccrypto/ruby/keybundle_store/pkcs12.rb +111 -0
  34. data/lib/ccrypto/ruby/utils/comparator.rb +15 -0
  35. data/lib/ccrypto/ruby/utils/memory_buffer.rb +63 -0
  36. data/lib/ccrypto/ruby/utils/native_helper.rb +17 -0
  37. data/lib/ccrypto/ruby/version.rb +7 -0
  38. data/lib/ccrypto/ruby.rb +25 -0
  39. metadata +136 -0
@@ -0,0 +1,111 @@
1
+
2
+ require_relative '../data_conversion'
3
+
4
+ module Ccrypto
5
+ module Ruby
6
+
7
+ module PKCS12Store
8
+ include TR::CondUtils
9
+ include DataConversion
10
+
11
+ class PKCS12StoreException < KeyBundleStorageException; end
12
+
13
+ module ClassMethods
14
+ def from_pkcs12(input, &block)
15
+ raise PKCS12StoreException, "Input cannot be empty" if is_empty?(input)
16
+
17
+ raise PKCS12StoreException, "Block is required" if not block
18
+
19
+ inForm = block.call(:in_format)
20
+ case inForm
21
+ when :b64
22
+ inp = from_b64(bin)
23
+ when :hex
24
+ inp = from_hex(bin)
25
+ else
26
+ inp = input
27
+ end
28
+
29
+ pass = block.call(:p12_pass)
30
+ raise PKCS12StoreException, "Password cannot be empty" if is_empty?(pass)
31
+
32
+ begin
33
+ p12 = OpenSSL::PKCS12.new(inp, pass)
34
+ case p12.key
35
+ when OpenSSL::PKey::EC
36
+ [Ccrypto::Ruby::ECCKeyBundle.new(p12.key), Ccrypto::X509Cert.new(p12.certificate), p12.ca_certs.collect{ |c| Ccrypto::X509Cert.new(c) }]
37
+ else
38
+ [Ccrypto::Ruby::RSAKeyBundle.new(p12.key), Ccrypto::X509Cert.new(p12.certificate), p12.ca_certs.collect{ |c| Ccrypto::X509Cert.new(c) }]
39
+ end
40
+ rescue Exception => ex
41
+ raise PKCS12StoreException, ex
42
+ end
43
+
44
+ end
45
+ end
46
+ def self.included(klass)
47
+ klass.extend(ClassMethods)
48
+ end
49
+
50
+ def to_pkcs12(&block)
51
+
52
+ raise PKCS12StoreException, "Block is required" if not block
53
+
54
+ ucert = block.call(:cert)
55
+ raise PKCS12StoreException, "Certificate is required" if is_empty?(ucert)
56
+
57
+ case ucert
58
+ when String
59
+ begin
60
+ cert = OpenSSL::X509::Certificate.new(ucert)
61
+ rescue Exception => ex
62
+ raise PKCS12StoreException, ex
63
+ end
64
+ when OpenSSL::X509::Certificate
65
+ cert = ucert
66
+ when Ccrypto::X509Cert
67
+ cert = ucert.nativeX509
68
+ else
69
+ raise PKCS12StoreException, "Unknown given certificate to store in P12 : #{cert}"
70
+ end
71
+
72
+ ca = block.call(:certchain)
73
+ ca = [cert] if is_empty?(ca)
74
+ ca = ca.collect do |c|
75
+ case c
76
+ when Ccrypto::X509Cert
77
+ c.nativeX509
78
+ else
79
+ c
80
+ end
81
+ end
82
+
83
+ pass = block.call(:p12_pass)
84
+ raise PKCS12StoreException, "Password is required" if is_empty?(pass)
85
+
86
+ name = block.call(:p12_name)
87
+ name = "Ccrypto KeyBundle" if is_empty?(name)
88
+
89
+ keypair = block.call(:keypair)
90
+ raise PKCS12StoreException, "Keypair is required" if is_empty?(keypair)
91
+
92
+ res = OpenSSL::PKCS12.create(pass, name, keypair, cert, ca)
93
+
94
+ outFormat = block.call(:out_format)
95
+ outFormat = :bin if is_empty?(outFormat)
96
+
97
+ case outFormat
98
+ when :b64
99
+ to_b64(res.to_der)
100
+ when :to_hex
101
+ to_hex(res.to_der)
102
+ else
103
+ res.to_der
104
+ end
105
+
106
+ end
107
+
108
+ end
109
+
110
+ end
111
+ end
@@ -0,0 +1,15 @@
1
+
2
+
3
+ module Ccrypto
4
+ module Ruby
5
+ class ComparatorUtil
6
+ include DataConversion
7
+
8
+ def self.is_equal?(val1, val2)
9
+ val1 == val2
10
+ end
11
+ self.singleton_class.alias_method :is_equals?, :is_equal?
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,63 @@
1
+
2
+
3
+ module Ccrypto
4
+ module Ruby
5
+ class MemoryBuffer
6
+
7
+ def initialize(*args,&block)
8
+ @buf = StringIO.new
9
+ @buf.binmode
10
+ end
11
+
12
+ def bytes
13
+ @buf.string
14
+ end
15
+
16
+ def pos
17
+ @buf.pos
18
+ end
19
+
20
+ def length
21
+ @buf.length
22
+ end
23
+
24
+ def rewind
25
+ @buf.rewind
26
+ end
27
+
28
+ def dispose(wcnt = 32)
29
+
30
+ len = @buf.length
31
+ cnt = 0
32
+ loop do
33
+ @buf.rewind
34
+ @buf.write(SecureRandom.random_bytes(len))
35
+
36
+ cnt += 1
37
+ break if cnt >= wcnt
38
+ end
39
+
40
+ @buffer = nil
41
+ GC.start
42
+
43
+ end
44
+
45
+ def write(val)
46
+ @buf.write(val)
47
+ end
48
+
49
+ def read(len)
50
+ @buf.read(len)
51
+ end
52
+
53
+ def respond_to_missing?(mtd, *args, &block)
54
+ @buf.respond_to?(mtd, *args, &block)
55
+ end
56
+
57
+ def equals?(val)
58
+ bytes == val
59
+ end
60
+
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,17 @@
1
+
2
+
3
+ module Ccrypto
4
+ module Ruby
5
+ class NativeHelper
6
+
7
+ def self.is_byte_array?(dat)
8
+ if not dat.nil?
9
+ dat.is_a?(String) and (dat.count('01') == dat.size)
10
+ else
11
+ false
12
+ end
13
+ end
14
+
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ccrypto
4
+ module Ruby
5
+ VERSION = "0.1.0"
6
+ end
7
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'openssl'
4
+ require 'teLogger'
5
+ require 'toolrack'
6
+
7
+ require 'ccrypto'
8
+
9
+
10
+ require_relative "ruby/version"
11
+
12
+ require_relative 'provider'
13
+
14
+ require_relative 'ruby/ext/secret_key'
15
+ require_relative 'ruby/ext/x509_cert'
16
+
17
+ module Ccrypto
18
+ module Ruby
19
+ class Error < StandardError; end
20
+ # Your code goes here...
21
+ end
22
+ end
23
+
24
+ require 'ccrypto'
25
+ Ccrypto::Provider.instance.register(Ccrypto::Ruby::Provider)
metadata ADDED
@@ -0,0 +1,136 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ccrypto-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Ian
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2022-08-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: teLogger
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: toolrack
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: ccrypto
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: devops_assist
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: Refers Ccrypto library for further info. This is the Ruby implementation
70
+ of the core cryptographic API
71
+ email:
72
+ - cameronian0@protonmail.com
73
+ executables: []
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - ".rspec"
78
+ - Gemfile
79
+ - Gemfile.lock
80
+ - README.md
81
+ - Rakefile
82
+ - bin/console
83
+ - bin/setup
84
+ - ccrypto-ruby.gemspec
85
+ - lib/ccrypto/provider.rb
86
+ - lib/ccrypto/ruby.rb
87
+ - lib/ccrypto/ruby/data_conversion.rb
88
+ - lib/ccrypto/ruby/engines/asn1_engine.rb
89
+ - lib/ccrypto/ruby/engines/asn1_object.rb
90
+ - lib/ccrypto/ruby/engines/cipher_engine.rb
91
+ - lib/ccrypto/ruby/engines/compression_engine.rb
92
+ - lib/ccrypto/ruby/engines/data_conversion_engine.rb
93
+ - lib/ccrypto/ruby/engines/decompression_engine.rb
94
+ - lib/ccrypto/ruby/engines/digest_engine.rb
95
+ - lib/ccrypto/ruby/engines/ecc_engine.rb
96
+ - lib/ccrypto/ruby/engines/hkdf_engine.rb
97
+ - lib/ccrypto/ruby/engines/hmac_engine.rb
98
+ - lib/ccrypto/ruby/engines/pbkdf2_engine.rb
99
+ - lib/ccrypto/ruby/engines/pkcs7_engine.rb
100
+ - lib/ccrypto/ruby/engines/rsa_engine.rb
101
+ - lib/ccrypto/ruby/engines/scrypt_engine.rb
102
+ - lib/ccrypto/ruby/engines/secret_key_engine.rb
103
+ - lib/ccrypto/ruby/engines/secret_sharing_engine.rb
104
+ - lib/ccrypto/ruby/engines/secure_random_engine.rb
105
+ - lib/ccrypto/ruby/engines/x509_engine.rb
106
+ - lib/ccrypto/ruby/ext/secret_key.rb
107
+ - lib/ccrypto/ruby/ext/x509_cert.rb
108
+ - lib/ccrypto/ruby/keybundle_store/pem_store.rb
109
+ - lib/ccrypto/ruby/keybundle_store/pkcs12.rb
110
+ - lib/ccrypto/ruby/utils/comparator.rb
111
+ - lib/ccrypto/ruby/utils/memory_buffer.rb
112
+ - lib/ccrypto/ruby/utils/native_helper.rb
113
+ - lib/ccrypto/ruby/version.rb
114
+ homepage: https://github.com/cameronian/ccrypto-ruby
115
+ licenses: []
116
+ metadata: {}
117
+ post_install_message:
118
+ rdoc_options: []
119
+ require_paths:
120
+ - lib
121
+ required_ruby_version: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: 2.4.0
126
+ required_rubygems_version: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ requirements: []
132
+ rubygems_version: 3.2.22
133
+ signing_key:
134
+ specification_version: 4
135
+ summary: Ccrypto API provider for Ruby runtime
136
+ test_files: []