ccrypto-java 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.java-version +1 -1
- data/.release_history.yml +4 -0
- data/.ruby-version +1 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +68 -53
- data/Rakefile +2 -1
- data/bin/console +14 -0
- data/jars/bcjmail-jdk18on-172.jar +0 -0
- data/jars/bcmail-jdk18on-172.jar +0 -0
- data/jars/bcpg-jdk18on-172.1.jar +0 -0
- data/jars/bcpkix-jdk18on-172.jar +0 -0
- data/jars/bcprov-ext-jdk18on-172.jar +0 -0
- data/jars/bcprov-jdk18on-172.jar +0 -0
- data/jars/bctls-jdk18on-172.jar +0 -0
- data/jars/bcutil-jdk18on-172.jar +0 -0
- data/lib/ccrypto/java/bc_const_mapping.rb +42 -0
- data/lib/ccrypto/java/data_conversion.rb +23 -2
- data/lib/ccrypto/java/engines/argon2_engine.rb +95 -0
- data/lib/ccrypto/java/engines/asn1_engine.rb +2 -1
- data/lib/ccrypto/java/engines/bcrypt_engine.rb +56 -0
- data/lib/ccrypto/java/engines/cipher_engine.rb +462 -130
- data/lib/ccrypto/java/engines/compression_engine.rb +7 -28
- data/lib/ccrypto/java/engines/crystal_dilithium_engine.rb +226 -0
- data/lib/ccrypto/java/engines/crystal_kyber_engine.rb +260 -0
- data/lib/ccrypto/java/engines/decompression_engine.rb +5 -4
- data/lib/ccrypto/java/engines/digest_engine.rb +221 -139
- data/lib/ccrypto/java/engines/ecc_engine.rb +249 -96
- data/lib/ccrypto/java/engines/ed25519_engine.rb +211 -0
- data/lib/ccrypto/java/engines/hkdf_engine.rb +82 -23
- data/lib/ccrypto/java/engines/hmac_engine.rb +98 -23
- data/lib/ccrypto/java/engines/pbkdf2_engine.rb +82 -33
- data/lib/ccrypto/java/engines/pkcs7_engine.rb +44 -33
- data/lib/ccrypto/java/engines/rsa_engine.rb +85 -31
- data/lib/ccrypto/java/engines/scrypt_engine.rb +12 -3
- data/lib/ccrypto/java/engines/secret_key_engine.rb +77 -12
- data/lib/ccrypto/java/engines/secret_sharing_engine.rb +17 -2
- data/lib/ccrypto/java/engines/x25519_engine.rb +249 -0
- data/lib/ccrypto/java/engines/x509_csr_engine.rb +141 -0
- data/lib/ccrypto/java/engines/x509_engine.rb +365 -71
- data/lib/ccrypto/java/ext/secret_key.rb +37 -25
- data/lib/ccrypto/java/ext/x509_cert.rb +429 -5
- data/lib/ccrypto/java/ext/x509_csr.rb +151 -0
- data/lib/ccrypto/java/jce_provider.rb +0 -11
- data/lib/ccrypto/java/keystore/jce_keystore.rb +205 -0
- data/lib/ccrypto/java/keystore/jks_keystore.rb +52 -0
- data/lib/ccrypto/java/keystore/keystore.rb +97 -0
- data/lib/ccrypto/java/keystore/pem_keystore.rb +147 -0
- data/lib/ccrypto/java/keystore/pkcs12_keystore.rb +56 -0
- data/lib/ccrypto/java/utils/comparator.rb +25 -2
- data/lib/ccrypto/java/version.rb +1 -1
- data/lib/ccrypto/java.rb +46 -0
- data/lib/ccrypto/provider.rb +139 -3
- metadata +40 -24
- data/ccrypto-java.gemspec +0 -44
- data/jars/bcmail-jdk15on-165.jar +0 -0
- data/jars/bcpg-jdk15on-165.jar +0 -0
- data/jars/bcpkix-jdk15on-165.jar +0 -0
- data/jars/bcprov-ext-jdk15on-165.jar +0 -0
- data/jars/bcprov-jdk15on-165.jar +0 -0
- data/jars/bctls-jdk15on-165.jar +0 -0
- data/lib/ccrypto/java/keybundle_store/pkcs12.rb +0 -125
@@ -7,169 +7,250 @@ module Ccrypto
|
|
7
7
|
include TR::CondUtils
|
8
8
|
include DataConversion
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
teLogger_tag :j_digest
|
13
|
-
|
14
|
-
Potential = [
|
15
|
-
|
16
|
-
Ccrypto::SHA1.provider_info("SHA-1"),
|
17
|
-
Ccrypto::SHA224.provider_info("SHA-224"),
|
18
|
-
Ccrypto::SHA256.provider_info("SHA-256"),
|
19
|
-
Ccrypto::SHA384.provider_info("SHA-384"),
|
20
|
-
Ccrypto::SHA512.provider_info("SHA-512"),
|
21
|
-
Ccrypto::SHA512_224.provider_info("SHA-512/224"),
|
22
|
-
Ccrypto::SHA512_256.provider_info("SHA-512/256"),
|
23
|
-
|
24
|
-
Ccrypto::SHA3_224.provider_info("SHA3-224"),
|
25
|
-
Ccrypto::SHA3_256.provider_info("SHA3-256"),
|
26
|
-
Ccrypto::SHA3_384.provider_info("SHA3-384"),
|
27
|
-
Ccrypto::SHA3_512.provider_info("SHA3-512"),
|
28
|
-
|
29
|
-
Ccrypto::BLAKE2b160.provider_info("BLAKE2B-160"),
|
30
|
-
Ccrypto::BLAKE2b256.provider_info("BLAKE2B-256"),
|
31
|
-
Ccrypto::BLAKE2b384.provider_info("BLAKE2B-384"),
|
32
|
-
Ccrypto::BLAKE2b512.provider_info("BLAKE2B-512"),
|
33
|
-
|
34
|
-
Ccrypto::BLAKE2s128.provider_info("BLAKE2S-128"),
|
35
|
-
Ccrypto::BLAKE2s160.provider_info("BLAKE2s-160"),
|
36
|
-
Ccrypto::BLAKE2s224.provider_info("BLAKE2s-224"),
|
37
|
-
Ccrypto::BLAKE2s256.provider_info("BLAKE2s-256"),
|
38
|
-
|
39
|
-
Ccrypto::HARAKA256.provider_info("HARAKA-256"),
|
40
|
-
Ccrypto::HARAKA512.provider_info("HARAKA-512"),
|
41
|
-
|
42
|
-
Ccrypto::KECCAK224.provider_info("KECCAK-224"),
|
43
|
-
Ccrypto::KECCAK256.provider_info("KECCAK-256"),
|
44
|
-
Ccrypto::KECCAK288.provider_info("KECCAK-288"),
|
45
|
-
Ccrypto::KECCAK384.provider_info("KECCAK-384"),
|
46
|
-
Ccrypto::KECCAK512.provider_info("KECCAK-512"),
|
47
|
-
|
48
|
-
Ccrypto::RIPEMD128.provider_info("RIPEMD128"),
|
49
|
-
Ccrypto::RIPEMD160.provider_info("RIPEMD160"),
|
50
|
-
Ccrypto::RIPEMD256.provider_info("RIPEMD256"),
|
51
|
-
Ccrypto::RIPEMD320.provider_info("RIPEMD320"),
|
52
|
-
|
53
|
-
Ccrypto::SHAKE128_256.provider_info("SHAKE128-256"),
|
54
|
-
Ccrypto::SHAKE256_512.provider_info("SHAKE256-512"),
|
55
|
-
|
56
|
-
Ccrypto::SKEIN1024_1024.provider_info("SKEIN-1024-1024"),
|
57
|
-
Ccrypto::SKEIN1024_384.provider_info("SKEIN-1024-384"),
|
58
|
-
Ccrypto::SKEIN1024_512.provider_info("SKEIN-1024-512"),
|
59
|
-
|
60
|
-
Ccrypto::SKEIN256_128.provider_info("SKEIN-256-128"),
|
61
|
-
Ccrypto::SKEIN256_160.provider_info("SKEIN-256-160"),
|
62
|
-
Ccrypto::SKEIN256_224.provider_info("SKEIN-256-224"),
|
63
|
-
Ccrypto::SKEIN256_256.provider_info("SKEIN-256-256"),
|
64
|
-
|
65
|
-
Ccrypto::SKEIN512_128.provider_info("SKEIN-512-128"),
|
66
|
-
Ccrypto::SKEIN512_160.provider_info("SKEIN-512-160"),
|
67
|
-
Ccrypto::SKEIN512_224.provider_info("SKEIN-512-224"),
|
68
|
-
Ccrypto::SKEIN512_256.provider_info("SKEIN-512-256"),
|
69
|
-
Ccrypto::SKEIN512_384.provider_info("SKEIN-512-384"),
|
70
|
-
Ccrypto::SKEIN512_512.provider_info("SKEIN-512-512"),
|
71
|
-
|
72
|
-
SM3 = Ccrypto::SM3.provider_info("SM3"),
|
73
|
-
WHIRLPOOL = Ccrypto::WHIRLPOOL.provider_info("WHIRLPOOL")
|
74
|
-
]
|
10
|
+
class SupportedDigestEngine
|
11
|
+
include InMemoryRecord
|
75
12
|
|
76
|
-
|
77
|
-
|
78
|
-
@supported = []
|
79
|
-
probe = java.security.Security.getAlgorithms("MessageDigest").to_a.delete_if { |e| e.include?(".") }
|
80
|
-
Potential.each do |po|
|
81
|
-
@supported << po if probe.include?(po.provider_config)
|
82
|
-
end
|
13
|
+
def initialize
|
14
|
+
define_search_key(:algo, :outBitLength, :outByteLength)
|
83
15
|
end
|
84
|
-
@supported
|
85
16
|
end
|
86
17
|
|
87
|
-
def self.
|
88
|
-
if
|
89
|
-
|
90
|
-
|
18
|
+
def self.supported
|
19
|
+
if @supported.nil?
|
20
|
+
if ENV[Java::ENV_PROBE_DIGEST_KEY] == "true"
|
21
|
+
@supported = SupportedDigestEngine.new
|
22
|
+
else
|
23
|
+
@supported = SupportedDigestEngine.load_from_storage("supported_digest")
|
24
|
+
end
|
91
25
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
26
|
+
if @supported.empty?
|
27
|
+
@supported = SupportedDigestEngine.new
|
28
|
+
probe = java.security.Security.getAlgorithms("MessageDigest").to_a.delete_if { |e| e.include?(".") }
|
29
|
+
|
30
|
+
logger = Ccrypto::Java.logger(:digest_eng)
|
31
|
+
|
32
|
+
blacklistedDigest = ["MD2","MD4","MD5"]
|
33
|
+
probe.sort.each do |found|
|
34
|
+
next if blacklistedDigest.include?(found)
|
35
|
+
logger.debug "Found digest algo : #{found}"
|
36
|
+
begin
|
37
|
+
md = java.security.MessageDigest.getInstance(found, JCEProvider::BCProv)
|
38
|
+
case found
|
39
|
+
when "HARAKA-256"
|
40
|
+
conf = { provider_config: { algo_name: found, jceProvider: JCEProvider::BCProv.name }, fixed_input_len_byte: 32 }
|
41
|
+
when "HARAKA-512"
|
42
|
+
conf = { provider_config: { algo_name: found, jceProvider: JCEProvider::BCProv.name }, fixed_input_len_byte: 64 }
|
43
|
+
else
|
44
|
+
conf = { provider_config: { algo_name: found, jceProvider: JCEProvider::BCProv.name } }
|
45
|
+
end
|
46
|
+
|
47
|
+
digConf = Ccrypto::DigestConfig.new(found, md.getDigestLength()*8, conf)
|
48
|
+
|
49
|
+
testDig = Ccrypto::DigestMatcher.generate_digest(digConf)
|
50
|
+
digKey = Ccrypto::DigestMatcher.find_digest_key(testDig)
|
51
|
+
if not_empty?(digKey)
|
52
|
+
# map the algo name to common name
|
53
|
+
digConf = Ccrypto::DigestConfig.new(digKey, md.getDigestLength()*8, conf)
|
54
|
+
@supported.register(digConf, { tag_under: :jceAlgo, tag_value: found })
|
55
|
+
|
56
|
+
else
|
57
|
+
logger.warn "Digest algo from Java named '#{found}' not listed in the Ccrypto::DigestMatcher. Skip or add the value into the table. [#{testDig}]"
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
rescue Exception => ex
|
62
|
+
logger.error ex.message
|
63
|
+
end
|
100
64
|
end
|
101
|
-
true
|
102
|
-
rescue java.security.NoSuchAlgorithmException => ex
|
103
|
-
p ex.message
|
104
|
-
false
|
105
65
|
end
|
66
|
+
|
67
|
+
@supported.save_to_storage("supported_digest")
|
68
|
+
|
106
69
|
end
|
70
|
+
@supported
|
71
|
+
end
|
72
|
+
class << self
|
73
|
+
alias_method :supported_digests, :supported
|
107
74
|
end
|
108
75
|
|
109
|
-
def self.
|
110
|
-
|
76
|
+
def self.is_digest_supported?(key)
|
77
|
+
(find_digest_config(key).length > 0)
|
111
78
|
end
|
112
79
|
|
113
80
|
def self.instance(conf, &block)
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
end
|
81
|
+
|
82
|
+
case conf
|
83
|
+
when String, Symbol
|
84
|
+
digEng = find_digest_config(conf)
|
85
|
+
when Ccrypto::DigestConfig
|
86
|
+
digEng = conf
|
121
87
|
else
|
122
|
-
|
88
|
+
raise DigestEngineException, "Unsupported instance type '#{conf}'"
|
123
89
|
end
|
124
|
-
end
|
125
90
|
|
126
|
-
|
127
|
-
res = engineKeys[key]
|
128
|
-
if is_empty?(res)
|
129
|
-
raise DigestEngine, "Not supported digest engine #{key}"
|
130
|
-
else
|
131
|
-
if block
|
132
|
-
digProv = block.call(:digest_jceProvider)
|
133
|
-
end
|
91
|
+
raise DigestEngineException, "Unsupported digest type '#{conf}'" if digEng.nil?
|
134
92
|
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
93
|
+
prov = digEng.provider_config[:jceProvider]
|
94
|
+
if not_empty?(prov)
|
95
|
+
JCEProvider.instance.add_provider(prov) if not JCEProvider.instance.is_provider_registered?(prov)
|
96
|
+
DigestEngine.new(digEng.provider_config[:algo_name], prov, &block)
|
97
|
+
else
|
98
|
+
DigestEngine.new(digEng.provider_config[:algo_name], &block)
|
140
99
|
end
|
100
|
+
|
141
101
|
end
|
142
102
|
|
143
|
-
def self.
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
@engineKeys[a.algo.to_sym] = a
|
148
|
-
end
|
149
|
-
end
|
150
|
-
@engineKeys
|
103
|
+
def self.find_digest_config(key)
|
104
|
+
res = supported.find(algo: key)
|
105
|
+
res.concat(supported.find(jceAlgo: key))
|
106
|
+
res.uniq
|
151
107
|
end
|
152
108
|
|
153
|
-
def self.
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
109
|
+
def self.to_bc_digest_inst(conf)
|
110
|
+
case conf
|
111
|
+
when Ccrypto::DigestConfig
|
112
|
+
algo = conf.provider_config[:algo_name]
|
113
|
+
when String
|
114
|
+
algo = conf.upcase
|
115
|
+
when Symbol
|
116
|
+
algo = conf.to_s.upcase
|
117
|
+
else
|
118
|
+
raise DigestEngineException, "Unsupported query type '#{conf.class}'"
|
119
|
+
end
|
120
|
+
|
121
|
+
logger.debug "BC digest matching : #{conf.inspect} ==> #{algo}"
|
122
|
+
|
123
|
+
case algo
|
124
|
+
when "BLAKE2B-160","BLAKE2B_160"
|
125
|
+
"org.bouncycastle.crypto.digests.Blake2bDigest.new(160)"
|
126
|
+
when "BLAKE2B-256"
|
127
|
+
"org.bouncycastle.crypto.digests.Blake2bDigest.new(256)"
|
128
|
+
when "BLAKE2B-384"
|
129
|
+
"org.bouncycastle.crypto.digests.Blake2bDigest.new(384)"
|
130
|
+
when "BLAKE2B-512"
|
131
|
+
"org.bouncycastle.crypto.digests.Blake2bDigest.new(512)"
|
132
|
+
when "BLAKE2S-128"
|
133
|
+
"org.bouncycastle.crypto.digests.Blake2sDigest.new(128)"
|
134
|
+
when "BLAKE2S-160"
|
135
|
+
"org.bouncycastle.crypto.digests.Blake2sDigest.new(160)"
|
136
|
+
when "BLAKE2S-224"
|
137
|
+
"org.bouncycastle.crypto.digests.Blake2sDigest.new(224)"
|
138
|
+
when "BLAKE2S-256"
|
139
|
+
"org.bouncycastle.crypto.digests.Blake2sDigest.new(256)"
|
140
|
+
when "BLAKE3-256"
|
141
|
+
"org.bouncycastle.crypto.digests.Blake3Digest.new #(256)"
|
142
|
+
when "DSTU7564-256"
|
143
|
+
"org.bouncycastle.crypto.digests.DSTU7564Digest.new(256)"
|
144
|
+
when "DSTU7564-384"
|
145
|
+
"org.bouncycastle.crypto.digests.DSTU7564Digest.new(384)"
|
146
|
+
when "DSTU7564-512"
|
147
|
+
"org.bouncycastle.crypto.digests.DSTU7564Digest.new(512)"
|
148
|
+
when "GOST3411"
|
149
|
+
"org.bouncycastle.crypto.digests.GOST3411Digest.new"
|
150
|
+
when "GOST3411-2012-256"
|
151
|
+
"org.bouncycastle.crypto.digests.GOST3411_2012_256Digest.new"
|
152
|
+
when "GOST3411-2012-512"
|
153
|
+
"org.bouncycastle.crypto.digests.GOST3411_2012_512Digest.new"
|
154
|
+
#when "HARAKA-256"
|
155
|
+
# org.bouncycastle.crypto.digests.Haraka256Digest.new
|
156
|
+
#when "HARAKA-512"
|
157
|
+
# org.bouncycastle.crypto.digests.Haraka512Digest.new
|
158
|
+
when "KECCAK-224"
|
159
|
+
"org.bouncycastle.crypto.digests.KeccakDigest.new(224)"
|
160
|
+
when "KECCAK-256"
|
161
|
+
"org.bouncycastle.crypto.digests.KeccakDigest.new(256)"
|
162
|
+
when "KECCAK-288"
|
163
|
+
"org.bouncycastle.crypto.digests.KeccakDigest.new(288)"
|
164
|
+
when "KECCAK-384"
|
165
|
+
"org.bouncycastle.crypto.digests.KeccakDigest.new(384)"
|
166
|
+
when "KECCAK-512"
|
167
|
+
"org.bouncycastle.crypto.digests.KeccakDigest.new(512)"
|
168
|
+
when "RIPEMD128"
|
169
|
+
"org.bouncycastle.crypto.digests.RIPEMD128Digest.new"
|
170
|
+
when "RIPEMD160"
|
171
|
+
"org.bouncycastle.crypto.digests.RIPEMD160Digest.new"
|
172
|
+
when "RIPEMD256"
|
173
|
+
"org.bouncycastle.crypto.digests.RIPEMD256Digest.new"
|
174
|
+
when "SHA-1", "SHA1"
|
175
|
+
"org.bouncycastle.crypto.digests.SHA1Digest.new"
|
176
|
+
when "SHA-224", "SHA224"
|
177
|
+
"org.bouncycastle.crypto.digests.SHA224Digest.new"
|
178
|
+
when "SHA-256", "SHA256"
|
179
|
+
"org.bouncycastle.crypto.digests.SHA256Digest.new"
|
180
|
+
when "SHA-384", "SHA384"
|
181
|
+
"org.bouncycastle.crypto.digests.SHA384Digest.new"
|
182
|
+
when "SHA-512", "SHA512"
|
183
|
+
"org.bouncycastle.crypto.digests.SHA512Digest.new"
|
184
|
+
when "SHA3-224","SHA3_224"
|
185
|
+
"org.bouncycastle.crypto.digests.SHA3Digest.new(224)"
|
186
|
+
when "SHA3-256","SHA3_256"
|
187
|
+
"org.bouncycastle.crypto.digests.SHA3Digest.new(256)"
|
188
|
+
when "SHA3-384","SHA3_384"
|
189
|
+
"org.bouncycastle.crypto.digests.SHA3Digest.new(384)"
|
190
|
+
when "SHA3-512","SHA3_512"
|
191
|
+
"org.bouncycastle.crypto.digests.SHA3Digest.new(512)"
|
192
|
+
when "SHAKE128-256","SHAKE128_256"
|
193
|
+
"org.bouncycastle.crypto.digests.SHAKEDigest.new(128)"
|
194
|
+
when "SHAKE256-512","SHAKE256_512"
|
195
|
+
"org.bouncycastle.crypto.digests.SHAKEDigest.new(256)"
|
196
|
+
when "SKEIN-1024-1024","SKEIN_1024_1024"
|
197
|
+
"org.bouncycastle.crypto.digests.SkeinDigest.new(1024,1024)"
|
198
|
+
when "SKEIN-1024-384","SKEIN_1024_384"
|
199
|
+
"org.bouncycastle.crypto.digests.SkeinDigest.new(1024,384)"
|
200
|
+
when "SKEIN-1024-512","SKEIN_1024_512"
|
201
|
+
"org.bouncycastle.crypto.digests.SkeinDigest.new(1024,512)"
|
202
|
+
when "SKEIN-256-128","SKEIN_256_128"
|
203
|
+
"org.bouncycastle.crypto.digests.SkeinDigest.new(256,128)"
|
204
|
+
when "SKEIN-256-160","SKEIN_256_160"
|
205
|
+
"org.bouncycastle.crypto.digests.SkeinDigest.new(256,160)"
|
206
|
+
when "SKEIN-256-224","SKEIN_256_224"
|
207
|
+
"org.bouncycastle.crypto.digests.SkeinDigest.new(256,224)"
|
208
|
+
when "SKEIN-256-256","SKEIN_256_256"
|
209
|
+
"org.bouncycastle.crypto.digests.SkeinDigest.new(256,256)"
|
210
|
+
when "SKEIN-512-128","SKEIN_512_128"
|
211
|
+
"org.bouncycastle.crypto.digests.SkeinDigest.new(512,128)"
|
212
|
+
when "SKEIN-512-160","SKEIN_512_160"
|
213
|
+
"org.bouncycastle.crypto.digests.SkeinDigest.new(512,160)"
|
214
|
+
when "SKEIN-512-224","SKEIN_512_224"
|
215
|
+
"org.bouncycastle.crypto.digests.SkeinDigest.new(512,224)"
|
216
|
+
when "SKEIN-512-256","SKEIN_512_256"
|
217
|
+
"org.bouncycastle.crypto.digests.SkeinDigest.new(512,256)"
|
218
|
+
when "SKEIN-512-384","SKEIN_512_384"
|
219
|
+
"org.bouncycastle.crypto.digests.SkeinDigest.new(512,384)"
|
220
|
+
when "SKEIN-512-512","SKEIN_512_512"
|
221
|
+
"org.bouncycastle.crypto.digests.SkeinDigest.new(512,512)"
|
222
|
+
when "SM3"
|
223
|
+
"org.bouncycastle.crypto.digests.SM3Digest.new"
|
224
|
+
when "TIGER"
|
225
|
+
"org.bouncycastle.crypto.digests.TigerDigest.new"
|
226
|
+
when "WHIRLPOOL"
|
227
|
+
"org.bouncycastle.crypto.digests.WhirlpoolDigest.new"
|
159
228
|
end
|
160
|
-
|
229
|
+
|
161
230
|
end
|
162
231
|
|
232
|
+
|
233
|
+
private
|
234
|
+
def self.logger
|
235
|
+
Ccrypto::Java.logger(:cj_digest_eng_c)
|
236
|
+
end
|
237
|
+
|
238
|
+
public
|
239
|
+
##
|
240
|
+
# Instance method
|
241
|
+
##
|
242
|
+
attr_reader :native_instance
|
163
243
|
def initialize(algo, prov = nil, &block)
|
164
|
-
|
165
|
-
|
244
|
+
|
245
|
+
logger.debug "Algo : #{algo}"
|
246
|
+
|
247
|
+
@algo = algo
|
166
248
|
begin
|
167
249
|
if not_empty?(prov)
|
168
|
-
@
|
250
|
+
@native_instance = java.security.MessageDigest.getInstance(@algo, prov)
|
169
251
|
else
|
170
|
-
@
|
252
|
+
@native_instance = java.security.MessageDigest.getInstance(@algo)
|
171
253
|
end
|
172
|
-
#rescue java.security.NoSuchAlgorithmException => ex
|
173
254
|
rescue Exception => ex
|
174
255
|
raise DigestEngineException, ex
|
175
256
|
end
|
@@ -180,15 +261,15 @@ module Ccrypto
|
|
180
261
|
end
|
181
262
|
|
182
263
|
def digest_update(val)
|
183
|
-
@
|
264
|
+
@native_instance.update(to_java_bytes(val))
|
184
265
|
end
|
185
266
|
|
186
267
|
def digest_final(val = nil, output = :binary)
|
187
268
|
if not_empty?(val)
|
188
|
-
@
|
269
|
+
@native_instance.update(to_java_bytes(val))
|
189
270
|
end
|
190
|
-
res = @
|
191
|
-
@
|
271
|
+
res = @native_instance.digest
|
272
|
+
@native_instance.reset
|
192
273
|
case output
|
193
274
|
when :hex
|
194
275
|
to_hex(res)
|
@@ -199,8 +280,9 @@ module Ccrypto
|
|
199
280
|
end
|
200
281
|
end
|
201
282
|
|
202
|
-
|
203
|
-
|
283
|
+
private
|
284
|
+
def logger
|
285
|
+
Ccrypto::Java.logger(:cj_digest_eng)
|
204
286
|
end
|
205
287
|
|
206
288
|
end
|