ccrypto-java 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 (47) hide show
  1. checksums.yaml +7 -0
  2. data/.java-version +1 -0
  3. data/.rspec +3 -0
  4. data/Gemfile +13 -0
  5. data/Gemfile.lock +94 -0
  6. data/README.md +150 -0
  7. data/Rakefile +10 -0
  8. data/bin/console +15 -0
  9. data/bin/setup +8 -0
  10. data/ccrypto-java.gemspec +44 -0
  11. data/jars/bcmail-jdk15on-165.jar +0 -0
  12. data/jars/bcpg-jdk15on-165.jar +0 -0
  13. data/jars/bcpkix-jdk15on-165.jar +0 -0
  14. data/jars/bcprov-ext-jdk15on-165.jar +0 -0
  15. data/jars/bcprov-jdk15on-165.jar +0 -0
  16. data/jars/bctls-jdk15on-165.jar +0 -0
  17. data/jars/shamir-0.6.1-p.jar +0 -0
  18. data/lib/ccrypto/java/data_conversion.rb +80 -0
  19. data/lib/ccrypto/java/engines/asn1_engine.rb +161 -0
  20. data/lib/ccrypto/java/engines/asn1_object.rb +12 -0
  21. data/lib/ccrypto/java/engines/cipher_engine.rb +255 -0
  22. data/lib/ccrypto/java/engines/compression_engine.rb +92 -0
  23. data/lib/ccrypto/java/engines/data_conversion_engine.rb +9 -0
  24. data/lib/ccrypto/java/engines/decompression_engine.rb +48 -0
  25. data/lib/ccrypto/java/engines/digest_engine.rb +208 -0
  26. data/lib/ccrypto/java/engines/ecc_engine.rb +263 -0
  27. data/lib/ccrypto/java/engines/hkdf_engine.rb +72 -0
  28. data/lib/ccrypto/java/engines/hmac_engine.rb +75 -0
  29. data/lib/ccrypto/java/engines/pbkdf2_engine.rb +87 -0
  30. data/lib/ccrypto/java/engines/pkcs7_engine.rb +558 -0
  31. data/lib/ccrypto/java/engines/rsa_engine.rb +572 -0
  32. data/lib/ccrypto/java/engines/scrypt_engine.rb +35 -0
  33. data/lib/ccrypto/java/engines/secret_key_engine.rb +44 -0
  34. data/lib/ccrypto/java/engines/secret_sharing_engine.rb +59 -0
  35. data/lib/ccrypto/java/engines/secure_random_engine.rb +76 -0
  36. data/lib/ccrypto/java/engines/x509_engine.rb +311 -0
  37. data/lib/ccrypto/java/ext/secret_key.rb +75 -0
  38. data/lib/ccrypto/java/ext/x509_cert.rb +48 -0
  39. data/lib/ccrypto/java/jce_provider.rb +52 -0
  40. data/lib/ccrypto/java/keybundle_store/pkcs12.rb +125 -0
  41. data/lib/ccrypto/java/utils/comparator.rb +20 -0
  42. data/lib/ccrypto/java/utils/memory_buffer.rb +77 -0
  43. data/lib/ccrypto/java/utils/native_helper.rb +19 -0
  44. data/lib/ccrypto/java/version.rb +7 -0
  45. data/lib/ccrypto/java.rb +30 -0
  46. data/lib/ccrypto/provider.rb +132 -0
  47. metadata +144 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 6de516075322f46df8dc000fb1160c5719cc993b9ac3619e643eef54dfa4cf7c
4
+ data.tar.gz: eca79e4bf92f9cefb090e5aaa06401774a19d4d194cff264cf939f2200b2a772
5
+ SHA512:
6
+ metadata.gz: 1e2d6bcefb3e2288526ccad521bcdaa01e959c3d4f336f8ce67c239f0f4fe6d958e95a6b601f8abc76a6ab3bf259d3ef2e94557d7d85195c68987609be83c298
7
+ data.tar.gz: b74f70994b7828b6db115c242cc5e4daed1452b67d1d801620ee4f91e8566a593fdd10c5616eaf0e9911f4482fc65b692cb501473ae5e940710cda125700cb7c
data/.java-version ADDED
@@ -0,0 +1 @@
1
+ 11
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ # Specify your gem's dependencies in ccrypto-java.gemspec
6
+ gemspec
7
+
8
+ gem "rake", "~> 13.0"
9
+
10
+ gem "rspec", "~> 3.0"
11
+
12
+ #gem "ccrypto", git: "ccrypto", branch: 'main'
13
+
data/Gemfile.lock ADDED
@@ -0,0 +1,94 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ ccrypto-java (0.1.0)
5
+ ccrypto
6
+ teLogger
7
+ toolrack
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ activesupport (6.1.6)
13
+ concurrent-ruby (~> 1.0, >= 1.0.2)
14
+ i18n (>= 1.6, < 2)
15
+ minitest (>= 5.1)
16
+ tzinfo (~> 2.0)
17
+ zeitwerk (~> 2.3)
18
+ base58 (0.2.3)
19
+ ccrypto (0.1.0)
20
+ activesupport
21
+ teLogger
22
+ toolrack
23
+ concurrent-ruby (1.1.10)
24
+ devops_assist (0.2.0)
25
+ git_cli
26
+ git_cli_prompt
27
+ gvcs
28
+ teLogger
29
+ toolrack
30
+ tty-prompt
31
+ diff-lcs (1.5.0)
32
+ git_cli (0.9.0)
33
+ gvcs
34
+ ptools (~> 1.4.0)
35
+ tlogger
36
+ toolrack
37
+ git_cli_prompt (0.2.2)
38
+ tlogger
39
+ toolrack
40
+ tty-prompt
41
+ gvcs (0.1.0)
42
+ i18n (1.10.0)
43
+ concurrent-ruby (~> 1.0)
44
+ minitest (5.16.2)
45
+ pastel (0.8.0)
46
+ tty-color (~> 0.5)
47
+ ptools (1.4.2)
48
+ rake (13.0.6)
49
+ rspec (3.11.0)
50
+ rspec-core (~> 3.11.0)
51
+ rspec-expectations (~> 3.11.0)
52
+ rspec-mocks (~> 3.11.0)
53
+ rspec-core (3.11.0)
54
+ rspec-support (~> 3.11.0)
55
+ rspec-expectations (3.11.0)
56
+ diff-lcs (>= 1.2.0, < 2.0)
57
+ rspec-support (~> 3.11.0)
58
+ rspec-mocks (3.11.0)
59
+ diff-lcs (>= 1.2.0, < 2.0)
60
+ rspec-support (~> 3.11.0)
61
+ rspec-support (3.11.0)
62
+ teLogger (0.1.0)
63
+ tlogger (0.26.3)
64
+ toolrack (0.18.6)
65
+ base58
66
+ tlogger
67
+ tty-color (0.6.0)
68
+ tty-cursor (0.7.1)
69
+ tty-prompt (0.23.1)
70
+ pastel (~> 0.8)
71
+ tty-reader (~> 0.8)
72
+ tty-reader (0.9.0)
73
+ tty-cursor (~> 0.7)
74
+ tty-screen (~> 0.8)
75
+ wisper (~> 2.0)
76
+ tty-screen (0.8.1)
77
+ tzinfo (2.0.4)
78
+ concurrent-ruby (~> 1.0)
79
+ wisper (2.0.1)
80
+ zeitwerk (2.6.0)
81
+
82
+ PLATFORMS
83
+ universal-java-1.8
84
+ universal-java-11
85
+ x86_64-linux
86
+
87
+ DEPENDENCIES
88
+ ccrypto-java!
89
+ devops_assist
90
+ rake (~> 13.0)
91
+ rspec (~> 3.0)
92
+
93
+ BUNDLED WITH
94
+ 2.3.6
data/README.md ADDED
@@ -0,0 +1,150 @@
1
+ # Ccrypto::Java
2
+
3
+ This project is the Java implementation for the [Ccrypto](https://github.com/cameronian/ccrypto) Common Crypto API.
4
+
5
+ This collection of API is meant to normalize the differences between runtimes.
6
+
7
+ Another notable implementation is [Ruby](https://github.com/cameronian/ccrypto-ruby).
8
+
9
+
10
+
11
+ ## Installation
12
+
13
+ Add this line to your application's Gemfile:
14
+
15
+ ```ruby
16
+ gem 'ccrypto'
17
+ gem 'ccrypto-java'
18
+ ```
19
+
20
+ Note that gem 'ccrypto' need to precede 'ccrypto-java'
21
+
22
+ And then execute:
23
+
24
+ $ bundle install
25
+
26
+ Or install it yourself as:
27
+
28
+ $ gem install ccrypto
29
+ $ gem install ccrypto-java
30
+
31
+ ## Usage
32
+
33
+ All operations is driven by the config object in [Ccrypto](https://github.com/cameronian/ccrypto).
34
+
35
+ The following are some common operations that can easily be initiated via the respective config object.
36
+
37
+ The value of [Ccrypto](https://github.com/cameronian/ccrypto) is the following codes should have same result when run with Ruby runtime using [ccrypto-ruby](https://github.com/cameronian/ccrypto-ruby) gem.
38
+
39
+
40
+ ### Generate Secret Key
41
+
42
+ ```ruby
43
+ # Ccrypto::KeyConfig is the object for secret key generation
44
+ keyConfig = Ccrypto::KeyConfig.new
45
+ keyConfig.algo = :aes
46
+ keyConfig.keysize = 256
47
+
48
+ # instantiate the key generator by giving the class of Ccrypto::KeyConfig
49
+ # There are two ways to instantiate: with class and with instance.
50
+ # There are some engine which provides class methods which can be call when passing in the class.
51
+ # Engine that provides instance method requires to pass in the instance to instantiate.
52
+
53
+ keyGen = Ccrypto::AlgoFactory.engine(Ccrypto::KeyConfig)
54
+ key = keyGen.generate(keyConfig)
55
+ # key is now the AES key in 256 bits
56
+
57
+ ```
58
+
59
+ ### Encrypt & Decrypt with Secret Key
60
+
61
+ ```ruby
62
+
63
+ # generate key
64
+ keyConfig = Ccrypto::KeyConfig.new
65
+ keyConfig.algo = :aes
66
+ keyConfig.keysize = 256
67
+
68
+ keyGen = Ccrypto::AlgoFactory.engine(Ccrypto::KeyConfig)
69
+ key = keyGen.generate(keyConfig)
70
+
71
+ cipherConfig = Ccrypto::DirectCipherConfig.new({ algo: :aes, keysize: 256, mode: :gcm, padding: :pkcs5, key: key })
72
+
73
+ cipherConfig.cipherOps = :encrypt
74
+
75
+ # library shall generate missing component such as IV if required
76
+ # and store it back into the passed in config object
77
+ cipher = Ccrypto::AlgoFactory.engine(cipherConfig)
78
+
79
+ output = []
80
+ output << cipher.update(data)
81
+ output << cipher.update(data)
82
+
83
+ output << cipher.final
84
+
85
+ res = output.join
86
+
87
+ # Encryption done!
88
+ # res now is the encrypted data
89
+
90
+ ```
91
+
92
+
93
+ ### Decrypt with Secret Key
94
+
95
+ ```ruby
96
+
97
+ decConfig = Ccrypto::DirectCipherConfig.new({ algo: :aes, keysize: 256, mode: :gcm, padding: :pkcs5, key: key, iv: cipherConfig.iv })
98
+
99
+ # GCM mode has this additional tag
100
+ decConfig.auth_tag = cipherConfig.auth_tag
101
+
102
+ deCipher = Ccrypto::AlgoFactory.engine(decConfig)
103
+
104
+ dres = []
105
+ dres << deCipher.update(res)
106
+ dres << deCipher.final
107
+
108
+ # decryption done!
109
+ # dres is the decrypted output
110
+
111
+ ```
112
+
113
+
114
+ ### Digest / Hashing
115
+
116
+ ```ruby
117
+
118
+ digest = Ccrypto::AlgoFactory.engine(Ccrypto::DigestConfig)
119
+
120
+ digest.digest_update("data to be digested")
121
+ res = digest.digest_final
122
+
123
+ # res is the digest output in String
124
+
125
+ hres = digest.digest_final(:hex)
126
+ # hres is the digest output converted to hex
127
+
128
+ b64res = digest.digest_final(:b64)
129
+ # b64res is the digest output converted to Base64
130
+
131
+ ```
132
+
133
+
134
+ ### ECC key generation
135
+
136
+ ```ruby
137
+ # set the required curve name
138
+ eccConfig = CCrypto::ECCConfig.new("secp256k1")
139
+ ecc = Ccrypto::AlgoFactory.engine(Ccrypto::ECCConfig)
140
+ eccKey = ecc.generate_keypair
141
+
142
+ # eccKey shall be a ECC keypair
143
+
144
+ ```
145
+
146
+
147
+ Refers to spec inside spec/ccrypto/xxx\_spec.rb
148
+
149
+
150
+
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rspec/core/rake_task"
5
+
6
+ require 'devops_assist'
7
+
8
+ RSpec::Core::RakeTask.new(:spec)
9
+
10
+ task default: :spec
data/bin/console ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "bundler/setup"
5
+ require "ccrypto/java"
6
+
7
+ # You can add fixtures and/or initialization code here to make experimenting
8
+ # with your gem easier. You can also use a different console, if you like.
9
+
10
+ # (If you use this, don't forget to add pry to your Gemfile!)
11
+ # require "pry"
12
+ # Pry.start
13
+
14
+ require "irb"
15
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/ccrypto/java/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "ccrypto-java"
7
+ spec.version = Ccrypto::Java::VERSION
8
+ spec.authors = ["Ian"]
9
+ spec.email = ["cameronian0@protonmail.com"]
10
+
11
+ spec.summary = "Cryptographic API for Java runtime based on Bouncycastle library. Provider for Ccrypto library"
12
+ spec.description = "Refers to Ccrypto library for more info"
13
+ spec.homepage = "https://github.com/cameronian/ccrypto-java"
14
+ spec.required_ruby_version = ">= 2.4.0"
15
+
16
+ #spec.metadata["allowed_push_host"] = "TODO: Set to your gem server 'https://example.com'"
17
+
18
+ #spec.metadata["homepage_uri"] = spec.homepage
19
+ #spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
20
+ #spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
21
+
22
+ # Specify which files should be added to the gem when it is released.
23
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
24
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
25
+ `git ls-files -z`.split("\x0").reject do |f|
26
+ (f == __FILE__) || f.match(%r{\A(?:(?:test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
27
+ end
28
+ end
29
+ spec.bindir = "exe"
30
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
31
+ spec.require_paths = ["lib"]
32
+
33
+ spec.add_dependency 'teLogger'
34
+ spec.add_dependency "toolrack"
35
+
36
+ spec.add_dependency 'ccrypto'
37
+ spec.add_development_dependency 'devops_assist'
38
+
39
+ # Uncomment to register a new dependency of your gem
40
+ # spec.add_dependency "example-gem", "~> 1.0"
41
+
42
+ # For more information and examples about making a new gem, checkout our
43
+ # guide at: https://bundler.io/guides/creating_gem.html
44
+ end
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,80 @@
1
+
2
+
3
+ module Ccrypto
4
+ module Java
5
+ module DataConversion
6
+
7
+ def to_hex(bin)
8
+ String.from_java_bytes(org.bouncycastle.util.encoders.Hex.encode(to_java_bytes(bin)))
9
+ end
10
+ # end to_hex
11
+
12
+ def from_hex(str)
13
+ org.bouncycastle.util.encoders.Hex.decode(str)
14
+ end
15
+ # end from_hex
16
+
17
+ def to_b64(bin)
18
+ String.from_java_bytes(java.util.Base64.encoder.encode(bin))
19
+ end
20
+ # end to_b64
21
+ #
22
+
23
+ def to_b64_mime(bin)
24
+ String.from_java_bytes(java.util.Base64.mime_encoder.encode(bin))
25
+ end
26
+
27
+ def from_b64(str)
28
+ java.util.Base64.decoder.decode(str)
29
+ end
30
+ # end from_b64
31
+
32
+ def to_str(bin)
33
+ if bin.is_a?(::Java::byte[])
34
+ String.from_java_bytes(bin)
35
+ else
36
+ bin
37
+ end
38
+ end
39
+
40
+ def to_bin(str)
41
+ if str.nil?
42
+ ::Java::byte[0].new
43
+ else
44
+ str.to_java.getBytes
45
+ end
46
+ end
47
+
48
+ def to_java_bytes(val, encoding = nil)
49
+ case val
50
+ when String
51
+ val.to_java_bytes
52
+ when java.lang.String
53
+ if not_empty?(encoding)
54
+ val.getBytes(encoding)
55
+ else
56
+ val.getBytes
57
+ end
58
+ when Ccrypto::Java::ManagedMemoryBuffer
59
+ val.bytes
60
+ else
61
+ if val.respond_to?(:encoded)
62
+ val.encoded
63
+ else
64
+ val
65
+ end
66
+ end
67
+ end
68
+
69
+ #
70
+ # Add the methods to class level
71
+ #
72
+ def self.included(klass)
73
+ klass.class_eval <<-END
74
+ extend Ccrypto::Java::DataConversion
75
+ END
76
+ end
77
+
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,161 @@
1
+
2
+ require 'java'
3
+
4
+ require_relative 'asn1_object'
5
+
6
+ require_relative '../data_conversion'
7
+
8
+ module Ccrypto
9
+ module Java
10
+
11
+ class ASN1Engine
12
+ include TR::CondUtils
13
+ extend DataConversion
14
+
15
+ include TeLogger::TeLogHelper
16
+
17
+ teLogger_tag :j_asn1
18
+
19
+ def self.build(*args,&block)
20
+ type = args.first
21
+ val = args[1]
22
+ case type
23
+ when :oid
24
+ ASN1Object.new(type,org.bouncycastle.asn1.ASN1ObjectIdentifier.new(val))
25
+
26
+ when :seq
27
+ v = org.bouncycastle.asn1.ASN1EncodableVector.new
28
+ val.each do |vv|
29
+ if vv.is_a?(::Java::byte[])
30
+ v.add(org.bouncycastle.asn1.DERBitString.new(vv))
31
+ else
32
+ v.add(vv)
33
+ end
34
+ end
35
+ ASN1Object.new(type,org.bouncycastle.asn1.DERSequence.new(v))
36
+
37
+ when :str, :utf8_str
38
+ ASN1Object.new(type,org.bouncycastle.asn1.DERUTF8String.new(val.to_s))
39
+
40
+ when :octet_str
41
+ if val.is_a?(Array)
42
+ val = val.pack("c*").to_java_bytes
43
+ elsif val.respond_to?(:to_bin)
44
+ val = val.to_bin
45
+ end
46
+
47
+ ASN1Object.new(type, val)
48
+
49
+ when :int
50
+ ASN1Object.new(type,org.bouncycastle.asn1.DERInteger.new(val))
51
+ #Java::OrgBouncycastleAsn1::DERInteger.new(val)
52
+
53
+ when :bin
54
+ ASN1Object.new(type,org.bouncycastle.asn1.DERBitString.new(to_java_bytes(val)))
55
+ #baos = java.io.ByteArrayOutputStream.new
56
+ #aos = org.bouncycastle.asn1.ASN1OutputStream.new(baos)
57
+ #aos.writeObject(org.bouncycastle.asn1.DERBitString.new(to_java_bytes(val)))
58
+ #aos.flush
59
+ #aos.close
60
+
61
+ #baos
62
+
63
+ when :date, :time, :generalize_time
64
+ if val.is_a?(Time)
65
+ val = val.to_java
66
+ elsif not val.is_a?(java.util.Date)
67
+ raise ASN1EngineException, "Unknown datetime objec to convert ['#{val.class}']"
68
+ end
69
+
70
+ #ASN1Object.new(type,org.bouncycastle.asn1.DERUTCTime.new(val))
71
+ ASN1Object.new(type,org.bouncycastle.asn1.DERGeneralizedTime.new(val))
72
+
73
+ else
74
+ raise ASN1EngineException, "Unknown ASN1 Object type '#{type.class}'"
75
+ end
76
+ end
77
+
78
+
79
+ def self.to_value(*args, &block)
80
+
81
+ val = args.first
82
+ #teLogger.debug "Received #{val}"
83
+
84
+ expectedType = args[1]
85
+
86
+ if val.is_a?(::Java::byte[])
87
+ ais = org.bouncycastle.asn1.ASN1InputStream.new(val)
88
+ tag = ais.readObject
89
+ elsif val.is_a?(String)
90
+ ais = org.bouncycastle.asn1.ASN1InputStream.new(val.to_java_bytes)
91
+ tag = ais.readObject
92
+ else
93
+ tag = val
94
+ end
95
+ #raise ASN1EngineException, "Byte array is expected" if not val.is_a?(::Java::byte[])
96
+
97
+ #teLogger.debug "Tag : #{tag} / #{tag.class}"
98
+
99
+ case tag
100
+ when org.bouncycastle.asn1.ASN1ObjectIdentifier
101
+ tag.id
102
+
103
+ when org.bouncycastle.asn1.DEROctetString
104
+ tag.octets
105
+
106
+ when org.bouncycastle.asn1.ASN1Integer
107
+ #tag.int_value_exact
108
+ tag.value
109
+
110
+ when org.bouncycastle.asn1.DLSequence, org.bouncycastle.asn1.DERSequence
111
+ tag.to_a
112
+
113
+ when org.bouncycastle.asn1.DERUTF8String, org.bouncycastle.asn1.DERPrintableString, org.bouncycastle.asn1.DERVisibleString
114
+ tag.to_s
115
+
116
+ when org.bouncycastle.asn1.DERNumericString
117
+ "#{tag.to_i}"
118
+
119
+ when org.bouncycastle.asn1.DERUTCTime, org.bouncycastle.asn1.ASN1UTCTime, org.bouncycastle.asn1.ASN1GeneralizedTime
120
+ tag.date
121
+
122
+ when org.bouncycastle.asn1.DERBitString
123
+ tag.bytes
124
+
125
+ else
126
+ raise ASN1EngineException, "Unknown type '#{tag}'"
127
+ end
128
+
129
+
130
+
131
+ end
132
+
133
+ def self.asn1_length(*args, &block)
134
+ val = args.first
135
+ if not_empty?(val)
136
+ if val.is_a?(ASN1Object)
137
+ v = val.native_asn1
138
+ elsif val.is_a?(String)
139
+ v = val.to_java_bytes
140
+ else
141
+ v = val
142
+ end
143
+
144
+ totalLen = 0
145
+
146
+ ais = org.bouncycastle.asn1.ASN1InputStream.new(v)
147
+ res = ais.readObject
148
+ totalLen = res.encoded.length
149
+
150
+ totalLen
151
+
152
+ else
153
+ 0
154
+ end
155
+ end
156
+
157
+
158
+ end
159
+
160
+ end
161
+ end
@@ -0,0 +1,12 @@
1
+
2
+
3
+ module Ccrypto
4
+ module Java
5
+ class ASN1Object < Ccrypto::ASN1Object
6
+
7
+ def to_bin
8
+ @asn1.encoded
9
+ end
10
+ end
11
+ end
12
+ end