ccrypto-java 0.1.0 → 0.2.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 (62) hide show
  1. checksums.yaml +4 -4
  2. data/.java-version +1 -1
  3. data/.release_history.yml +4 -0
  4. data/.ruby-version +1 -0
  5. data/Gemfile +1 -1
  6. data/Gemfile.lock +68 -53
  7. data/Rakefile +2 -1
  8. data/bin/console +14 -0
  9. data/jars/bcjmail-jdk18on-172.jar +0 -0
  10. data/jars/bcmail-jdk18on-172.jar +0 -0
  11. data/jars/bcpg-jdk18on-172.1.jar +0 -0
  12. data/jars/bcpkix-jdk18on-172.jar +0 -0
  13. data/jars/bcprov-ext-jdk18on-172.jar +0 -0
  14. data/jars/bcprov-jdk18on-172.jar +0 -0
  15. data/jars/bctls-jdk18on-172.jar +0 -0
  16. data/jars/bcutil-jdk18on-172.jar +0 -0
  17. data/lib/ccrypto/java/bc_const_mapping.rb +42 -0
  18. data/lib/ccrypto/java/data_conversion.rb +23 -2
  19. data/lib/ccrypto/java/engines/argon2_engine.rb +95 -0
  20. data/lib/ccrypto/java/engines/asn1_engine.rb +2 -1
  21. data/lib/ccrypto/java/engines/bcrypt_engine.rb +56 -0
  22. data/lib/ccrypto/java/engines/cipher_engine.rb +462 -130
  23. data/lib/ccrypto/java/engines/compression_engine.rb +7 -28
  24. data/lib/ccrypto/java/engines/crystal_dilithium_engine.rb +226 -0
  25. data/lib/ccrypto/java/engines/crystal_kyber_engine.rb +260 -0
  26. data/lib/ccrypto/java/engines/decompression_engine.rb +5 -4
  27. data/lib/ccrypto/java/engines/digest_engine.rb +221 -139
  28. data/lib/ccrypto/java/engines/ecc_engine.rb +249 -96
  29. data/lib/ccrypto/java/engines/ed25519_engine.rb +211 -0
  30. data/lib/ccrypto/java/engines/hkdf_engine.rb +82 -23
  31. data/lib/ccrypto/java/engines/hmac_engine.rb +98 -23
  32. data/lib/ccrypto/java/engines/pbkdf2_engine.rb +82 -33
  33. data/lib/ccrypto/java/engines/pkcs7_engine.rb +44 -33
  34. data/lib/ccrypto/java/engines/rsa_engine.rb +85 -31
  35. data/lib/ccrypto/java/engines/scrypt_engine.rb +12 -3
  36. data/lib/ccrypto/java/engines/secret_key_engine.rb +77 -12
  37. data/lib/ccrypto/java/engines/secret_sharing_engine.rb +17 -2
  38. data/lib/ccrypto/java/engines/x25519_engine.rb +249 -0
  39. data/lib/ccrypto/java/engines/x509_csr_engine.rb +141 -0
  40. data/lib/ccrypto/java/engines/x509_engine.rb +365 -71
  41. data/lib/ccrypto/java/ext/secret_key.rb +37 -25
  42. data/lib/ccrypto/java/ext/x509_cert.rb +429 -5
  43. data/lib/ccrypto/java/ext/x509_csr.rb +151 -0
  44. data/lib/ccrypto/java/jce_provider.rb +0 -11
  45. data/lib/ccrypto/java/keystore/jce_keystore.rb +205 -0
  46. data/lib/ccrypto/java/keystore/jks_keystore.rb +52 -0
  47. data/lib/ccrypto/java/keystore/keystore.rb +97 -0
  48. data/lib/ccrypto/java/keystore/pem_keystore.rb +147 -0
  49. data/lib/ccrypto/java/keystore/pkcs12_keystore.rb +56 -0
  50. data/lib/ccrypto/java/utils/comparator.rb +25 -2
  51. data/lib/ccrypto/java/version.rb +1 -1
  52. data/lib/ccrypto/java.rb +46 -0
  53. data/lib/ccrypto/provider.rb +139 -3
  54. metadata +40 -24
  55. data/ccrypto-java.gemspec +0 -44
  56. data/jars/bcmail-jdk15on-165.jar +0 -0
  57. data/jars/bcpg-jdk15on-165.jar +0 -0
  58. data/jars/bcpkix-jdk15on-165.jar +0 -0
  59. data/jars/bcprov-ext-jdk15on-165.jar +0 -0
  60. data/jars/bcprov-jdk15on-165.jar +0 -0
  61. data/jars/bctls-jdk15on-165.jar +0 -0
  62. data/lib/ccrypto/java/keybundle_store/pkcs12.rb +0 -125
@@ -7,36 +7,11 @@ module Ccrypto
7
7
  include DataConversion
8
8
  include TR::CondUtils
9
9
 
10
- include TeLogger::TeLogHelper
11
-
12
- teLogger_tag :j_compression
13
-
14
10
  def initialize(*args, &block)
15
11
 
16
12
  @config = args.first
17
13
  raise CompressionError, "Compress Config is expected. Given #{@config}" if not @config.is_a?(Ccrypto::CompressionConfig)
18
14
 
19
- #if block
20
-
21
- # outPath = block.call(:out_path)
22
- # if is_empty?(outPath)
23
- # outFile = block.call(:out_file)
24
- # raise CompressionError, "OutputStream required" if not outFile.is_a?(java.io.OutputStream)
25
- # @out = outFile
26
- # else
27
- # @out = java.io.RandomAccessFile.new(java.io.File.new(outPath), "w")
28
- # end
29
-
30
- # @intBufSize = block.call(:int_buf_size) || 102400
31
-
32
- #else
33
- # @intBufSize = 102400
34
-
35
- #end
36
-
37
- #@in = java.io.RandomAccessFile.new(java.nio.file.Files.createTempFile(nil,".zl").toFile, "rw")
38
- #@inPtr = 0
39
-
40
15
  case @config.level
41
16
  when :best_compression
42
17
  teLogger.debug "Compression with best compression"
@@ -63,15 +38,13 @@ module Ccrypto
63
38
  def update(val)
64
39
  if val.length > 0
65
40
  teLogger.debug "Given #{val.length} bytes for compression"
66
- #teLogger.debug "Write ready-to-compress data : #{val.length}"
67
- #@in.write(to_java_bytes(val))
68
41
 
69
42
  @eng.setInput(to_java_bytes(val))
70
43
 
71
44
  @eng.finish
72
45
 
73
46
  baos = java.io.ByteArrayOutputStream.new
74
- buf = ::Java::byte[102400].new
47
+ buf = ::Java::byte[READ_BUF_SIZE].new
75
48
  while not @eng.finished
76
49
  done = @eng.deflate(buf)
77
50
  @os.write(buf,0,done)
@@ -87,6 +60,12 @@ module Ccrypto
87
60
 
88
61
  end
89
62
 
63
+ private
64
+ def teLogger
65
+ Java.logger(:comp_eng)
66
+ end
67
+
68
+
90
69
  end
91
70
  end
92
71
  end
@@ -0,0 +1,226 @@
1
+
2
+ require_relative '../data_conversion'
3
+
4
+ java_import org.bouncycastle.pqc.crypto.crystals.dilithium.DilithiumParameters
5
+ java_import org.bouncycastle.pqc.crypto.crystals.dilithium.DilithiumKeyGenerationParameters
6
+ java_import org.bouncycastle.pqc.crypto.crystals.dilithium.DilithiumKeyPairGenerator
7
+ java_import org.bouncycastle.pqc.crypto.crystals.dilithium.DilithiumPublicKeyParameters
8
+ java_import org.bouncycastle.pqc.crypto.crystals.dilithium.DilithiumSigner
9
+
10
+ module Ccrypto
11
+ module Java
12
+
13
+ class CrystalDilithiumEngineError < StandardError; end
14
+
15
+ class CrystalDilithiumPublicKey < Ccrypto::PublicKey
16
+ include DataConversion
17
+ include TR::CondUtils
18
+
19
+ attr_reader :param
20
+ def initialize(pubKey, param)
21
+ super(pubKey)
22
+ @param = param
23
+ end
24
+
25
+ def to_bin
26
+ @native_pubKey.encoded
27
+ end
28
+
29
+ def encoded
30
+ to_bin
31
+ end
32
+
33
+ def self.to_key(params, bin)
34
+ bin = to_java_bytes(bin) if not bin.is_a?(::Java::byte[])
35
+
36
+ case params
37
+ when Ccrypto::CrystalDilithiumConfig
38
+ pa = params.provider_config[:params]
39
+ when Symbol
40
+ pa = CrystalDilithiumEngine.supported_configs[params]
41
+ if not_empty?(pa)
42
+ pa = pa.provider_config[:params]
43
+ end
44
+ else
45
+ raise CrystalDilithiumEngineError, "Unsupported params type '#{params.class}'"
46
+ end
47
+
48
+ raise CrystalDilithiumEngineError, "Unknown param '#{param}'" if is_empty?(pa)
49
+
50
+ pubKey = DilithiumPublicKeyParameters.new(pa, bin)
51
+ CrystalDilithiumPublicKey.new(pubKey, pa)
52
+ end
53
+
54
+ def equals?(pubKey)
55
+ if not @native_pubKey.nil?
56
+ case pubKey
57
+ when CrystalDilithiumPublicKey
58
+ @native_pubKey.encoded == pubKey.to_bin
59
+ else
60
+ logger.warn "Unmatched public key : (native) #{@native_pubKey} vs. (subject) #{pubKey}"
61
+ false
62
+ end
63
+ else
64
+ logger.warn "CrystalDilithiumPublicKey equals? returned false because native_pubKey is nil"
65
+ false
66
+ end
67
+ end
68
+ alias_method :key_equals?, :equals?
69
+
70
+ end # class CrystalDilithiumPublicKey
71
+
72
+ class CrystalDilithiumPrivateKey < Ccrypto::PrivateKey
73
+
74
+ attr_reader :param
75
+ def initialize(privKey, param)
76
+ super(privKey)
77
+ @param = param
78
+ end
79
+
80
+ def to_bin
81
+ @native_privKey.encoded
82
+ end
83
+
84
+ def self.to_key(params = {})
85
+ param = params[:param]
86
+ bcParam = CrystalDilithiumEngine.find_config(param)
87
+ bcPrivKey = org.bouncycastle.pqc.crypto.crystals.dilithium::DilithiumPrivateKeyParameters.new(bcParam.provider_config[:params], params[:rho].to_java_bytes, params[:k].to_java_bytes, params[:tr].to_java_bytes, params[:s1].to_java_bytes, params[:s2].to_java_bytes, params[:t0].to_java_bytes, params[:t1].to_java_bytes)
88
+ CrystalDilithiumPrivateKey.new(bcPrivKey, param)
89
+ end
90
+
91
+ def equals?(privKey)
92
+ if not @native_privKey.nil?
93
+ case privKey
94
+ when CrystalDilithiumPrivateKey
95
+ @native_privKey.encoded == privKey.to_bin
96
+ else
97
+ logger.warn "Unmatched private key : (native) #{@native_privKey} vs. (subject) #{privKey}"
98
+ false
99
+ end
100
+ else
101
+ logger.warn "ED25519PrivateKey equals? returned false because native_privKey is nil"
102
+ false
103
+ end
104
+ end
105
+ alias_method :key_equals?, :equals?
106
+
107
+ end # class CrystalDilithiumPrivateKey
108
+
109
+ #
110
+ # Crystal-Dilithium mainly for data signing
111
+ #
112
+ class CrystalDilithiumKeyBundle
113
+ include Ccrypto::KeyBundle
114
+ include TR::CondUtils
115
+
116
+ def initialize(kp, param)
117
+ @nativeKeypair = kp
118
+ @param = param
119
+ raise KeypairEngineException, "Given keypair is nil" if @param.nil?
120
+ end
121
+
122
+ def public_key
123
+ if @_pubKey.nil?
124
+ @_pubKey = CrystalDilithiumPublicKey.new(@nativeKeypair.getPublic(), @param.param)
125
+ end
126
+ @_pubKey
127
+ end
128
+
129
+ def private_key
130
+ if @_privKey.nil?
131
+ @_privKey = CrystalDilithiumPrivateKey.new(@nativeKeypair.getPrivate(), @param.param)
132
+ end
133
+ @_privKey
134
+ end
135
+
136
+ def is_public_key_equal?(pubKey)
137
+ @nativeKeypair.getPublic().encoded == pubKey.encoded
138
+ end
139
+
140
+ end # class CrystalDilithiumKeyBundle
141
+
142
+ class CrystalDilithiumEngine
143
+ include DataConversion
144
+ include TR::CondUtils
145
+
146
+ def self.supported_params
147
+ supported_configs.keys
148
+ end
149
+
150
+ def self.supported_configs
151
+ if @supportedConfig.nil?
152
+ @supportedConfig = {}
153
+ {
154
+ dilithium2: DilithiumParameters::dilithium2,
155
+ dilithium3: DilithiumParameters::dilithium3,
156
+ dilithium5: DilithiumParameters::dilithium5,
157
+ dilithium2_aes: DilithiumParameters::dilithium2_aes,
158
+ dilithium3_aes: DilithiumParameters::dilithium3_aes,
159
+ dilithium5_aes: DilithiumParameters::dilithium5_aes,
160
+ }.each do |k,kp|
161
+ conf = Ccrypto::CrystalDilithiumConfig.new(k)
162
+ conf.provider_config = { params: kp.dup }
163
+ @supportedConfig[k] = conf
164
+ end
165
+ end
166
+ @supportedConfig.freeze
167
+ end
168
+
169
+ def self.find_config(conf)
170
+ supported_configs.select { |k,v| k == conf }.first[1]
171
+ end
172
+
173
+ def self.logger
174
+ Ccrypto::Java.logger(:dilithium_engine)
175
+ end
176
+
177
+ def initialize(*args, &block)
178
+ @config = args.first
179
+ raise KeypairEngineException, "1st parameter must be a #{Ccrypto::KeypairConfig.class} object" if not @config.is_a?(Ccrypto::KeypairConfig)
180
+ end
181
+
182
+ def generate_keypair(&block)
183
+
184
+ rand = java.security.SecureRandom.getInstanceStrong
185
+ kpg = DilithiumKeyPairGenerator.new
186
+ #logger.debug "CD config : #{@config.inspect}"
187
+ #logger.debug "CD config : #{DilithiumKeyGenerationParameters}"
188
+ #logger.debug "CD provider config : #{@config.provider_config}"
189
+ #logger.debug "CD provider config params : #{@config.provider_config[:params]}"
190
+ #logger.debug "CD provider config params : #{DilithiumParameters::dilithium2}"
191
+ param = DilithiumKeyGenerationParameters.new(rand, @config.provider_config[:params])
192
+ logger.debug "CD param : #{param.inspect}"
193
+ kpg.init(param)
194
+
195
+ CrystalDilithiumKeyBundle.new(kpg.generateKeyPair(), @config)
196
+
197
+ end
198
+
199
+ def sign(data, &block)
200
+
201
+ raise KeypairEngineException, "Keypair is required" if @config.keypair.nil?
202
+ raise KeypairEngineException, "Crystal Dilithium keypair is required. Given #{@config.keypair}" if not @config.keypair.is_a?(CrystalDilithiumKeyBundle)
203
+ kp = @config.keypair
204
+
205
+ signer = DilithiumSigner.new
206
+ signer.init(true, kp.private_key.native)
207
+ signer.generateSignature(to_java_bytes(data))
208
+
209
+ end
210
+
211
+ def self.verify(pubKey, data, sign)
212
+ raise KeypairEngineException, "Given public key to verify is empty" if is_empty?(pubKey)
213
+ raise KeypairEngineException, "Given data to verify is empty" if is_empty?(data)
214
+ raise KeypairEngineException, "Given signature to verify is empty" if is_empty?(sign)
215
+
216
+ ver = DilithiumSigner.new
217
+ puts "verifying public key #{pubKey.inspect}"
218
+ ver.init(false, pubKey.native)
219
+
220
+ ver.verifySignature(to_java_bytes(data), to_java_bytes(sign))
221
+ end
222
+
223
+ end # class CrystalDilithiumEngine
224
+
225
+ end
226
+ end
@@ -0,0 +1,260 @@
1
+
2
+ require_relative '../data_conversion'
3
+
4
+ java_import org.bouncycastle.pqc.crypto.crystals.kyber.KyberParameters
5
+ java_import org.bouncycastle.pqc.crypto.crystals.kyber.KyberKeyGenerationParameters
6
+ java_import org.bouncycastle.pqc.crypto.crystals.kyber.KyberPublicKeyParameters
7
+ java_import org.bouncycastle.pqc.crypto.crystals.kyber.KyberKEMGenerator
8
+ java_import org.bouncycastle.pqc.crypto.crystals.kyber.KyberKEMExtractor
9
+
10
+ require_relative '../data_conversion'
11
+
12
+ module Ccrypto
13
+ module Java
14
+
15
+ class CrystalKyberPublicKey < Ccrypto::CrystalKyberPublicKey
16
+ include DataConversion
17
+ include TR::CondUtils
18
+
19
+ def initialize(kp, param)
20
+ super(kp)
21
+ @keyParam = param
22
+ end
23
+
24
+ # Public API
25
+ def key_param
26
+ @keyParam
27
+ end
28
+ alias_method :param, :key_param
29
+
30
+ # Public API
31
+ def to_bin
32
+ @native_pubKey.encoded
33
+ end
34
+
35
+ # Public API
36
+ def encoded
37
+ to_bin
38
+ end
39
+
40
+ def to_s
41
+ "Crystal Kyber - #{@keyParam} : #{native.inspect}"
42
+ end
43
+
44
+ # Public API
45
+ def self.to_key(params, bin)
46
+ bin = to_java_bytes(bin) if not bin.is_a?(::Java::byte[])
47
+
48
+ case params
49
+ when Ccrypto::CrystalKyberConfig
50
+ pa = params.provider_config[:params]
51
+ when Symbol
52
+ pa = CrystalKyberEngine.supported_configs[params]
53
+ if not_empty?(pa)
54
+ pa = pa.provider_config[:params]
55
+ end
56
+ else
57
+ raise CrystalKyberEngineError, "Unsupported params type '#{params.class}'"
58
+ end
59
+
60
+ raise CrystalKyberEngineError, "Unknown param '#{param}'" if is_empty?(pa)
61
+
62
+ pubKey = KyberPublicKeyParameters.new(pa, bin)
63
+ CrystalKyberPublicKey.new(pubKey, params)
64
+ end
65
+
66
+ def key_equals?(pubKey)
67
+ if not @native_pubKey.nil?
68
+ case pubKey
69
+ when CrystalKyberPublicKey
70
+ @native_pubKey.encoded == pubKey.to_bin
71
+ else
72
+ logger.warn "Unmatched public key : (native) #{@native_pubKey} vs. (subject) #{pubKey}"
73
+
74
+ false
75
+ end
76
+ else
77
+ logger.warn "CrystalKyberPublicKey equals? returned false because native_pubKey is nil"
78
+ false
79
+ end
80
+ end
81
+ alias_method :equals?, :key_equals?
82
+
83
+ end # class CrystalKyberPublicKey
84
+
85
+ class CrystalKyberPrivateKey < Ccrypto::PrivateKey
86
+
87
+ def initialize(kp, param)
88
+ super(kp)
89
+ @keyParam = param
90
+ end
91
+
92
+ def key_param
93
+ @keyParam
94
+ end
95
+ alias_method :param, :key_param
96
+
97
+ def to_bin
98
+ @native_privKey.encoded
99
+ end
100
+
101
+ def self.to_key(params = {})
102
+ param = params[:param]
103
+ bcParam = CrystalKyberEngine.find_config(param)
104
+ bcPrivKey = org.bouncycastle.pqc.crypto.crystals.kyber::KyberPrivateKeyParameters.new(bcParam.provider_config[:params], params[:s].to_java_bytes, params[:hpk].to_java_bytes, params[:nonce].to_java_bytes, params[:t].to_java_bytes, params[:rho].to_java_bytes)
105
+ CrystalKyberPrivateKey.new(bcPrivKey, param)
106
+ end
107
+
108
+ def equals?(privKey)
109
+ if not @native_privKey.nil?
110
+ case privKey
111
+ when CrystalKyberPrivateKey
112
+ @native_privKey.encoded == privKey.to_bin
113
+ else
114
+ logger.warn "Unmatched private key : (native) #{@native_privKey} vs. (subject) #{privKey}"
115
+ false
116
+ end
117
+ else
118
+ logger.warn "CrystalKyberPrivateKey equals? returned false because native_privKey is nil"
119
+ false
120
+ end
121
+ end
122
+ alias_method :key_equals?, :equals?
123
+
124
+ end # class CrystalKyberPrivateKey
125
+
126
+ class CrystalKyberKEM
127
+ include TR::CondUtils
128
+ include DataConversion
129
+
130
+ def initialize(kem)
131
+ @kem = kem
132
+ raise KeypairEngineException, "KEM cannot be empty" if is_empty?(@kem)
133
+ end
134
+
135
+ def for_recipient
136
+ @kem.getEncapsulation()
137
+ end
138
+
139
+ def for_cipher
140
+ @kem.getSecret()
141
+ end
142
+
143
+ def native
144
+ @kem
145
+ end
146
+
147
+ end # class CrystalKyberKEM
148
+
149
+ #
150
+ # Crystal-Kyber mainly for encryption via derivation
151
+ #
152
+ class CrystalKyberKeyBundle
153
+ include Ccrypto::KeyBundle
154
+ include TR::CondUtils
155
+ include DataConversion
156
+
157
+ def initialize(kp, params)
158
+ @nativeKeypair = kp
159
+ @nativeParam = params
160
+ end
161
+
162
+ def enc_derive(pubKey, &block)
163
+ raise KeypairEngineException, "Given public key to derive cannot be empty" if is_empty?(pubKey)
164
+ raise KeypairEngineException, "Given public key need to be a Crystal Kyber public key" if not pubKey.is_a?(CrystalKyberPublicKey)
165
+
166
+ rand = java.security.SecureRandom.getInstanceStrong()
167
+ kemGen = KyberKEMGenerator.new(rand)
168
+ CrystalKyberKEM.new(kemGen.generateEncapsulated(pubKey.native))
169
+ end
170
+ alias_method :derive_enc_shared_secret, :enc_derive
171
+
172
+ def dec_derive(kem, &block)
173
+ raise KeypairEngineException, "Native Keypair not available" if is_empty?(@nativeKeypair)
174
+
175
+ kemExt = KyberKEMExtractor.new(@nativeKeypair.getPrivate)
176
+ kemExt.extractSecret(to_java_bytes(kem))
177
+ end
178
+ alias_method :derive_dec_shared_secret, :dec_derive
179
+
180
+ def public_key
181
+ if @_pubKey.nil?
182
+ @_pubKey = CrystalKyberPublicKey.new(@nativeKeypair.getPublic(), @nativeParam.param)
183
+ end
184
+ @_pubKey
185
+ end
186
+
187
+ def private_key
188
+ if @_privKey.nil?
189
+ @_privKey = CrystalKyberPrivateKey.new(@nativeKeypair.getPrivate(), @nativeParam.param)
190
+ end
191
+ @_privKey
192
+ end
193
+
194
+ end # class CrystalKyberKeyBundle
195
+
196
+ class CrystalKyberEngine
197
+
198
+ def self.supported_params
199
+ supported_configs.keys
200
+ end
201
+
202
+ def self.supported_configs
203
+ if @supportedConfig.nil?
204
+ @supportedConfig = {}
205
+ {
206
+ kyber512: KyberParameters::kyber512,
207
+ kyber768: KyberParameters::kyber768,
208
+ kyber1024: KyberParameters::kyber1024,
209
+ kyber512_aes: KyberParameters::kyber512_aes,
210
+ kyber768_aes: KyberParameters::kyber768_aes,
211
+ kyber1024_aes: KyberParameters::kyber1024_aes,
212
+ }.each do |k,kp|
213
+ conf = Ccrypto::CrystalKyberConfig.new(k)
214
+ conf.provider_config = { params: kp }
215
+ @supportedConfig[k] = conf
216
+ end
217
+ end
218
+ @supportedConfig.freeze
219
+ end
220
+
221
+ def self.find_config(conf)
222
+ supported_configs.select { |k,v| k == conf }.first[1]
223
+ end
224
+
225
+ def self.get_available_session_keysize
226
+ [512, 768, 1024].freeze
227
+ end
228
+
229
+ def self.get_session_keysize_param(keysize, with_aes = false)
230
+ case keysize.to_i
231
+ when 512, 768, 1024
232
+ if with_aes
233
+ supported_configs["kyber#{keysize.to_i}_aes".to_sym]
234
+ else
235
+ supported_configs["kyber#{keysize.to_i}".to_sym]
236
+ end
237
+ else
238
+ raise KeypairEngineException, "Crystal Kyber only has keysizes of 512,768 and 1024"
239
+ end
240
+ end
241
+
242
+ def initialize(*args, &block)
243
+ @config = args.first
244
+ raise KeypairEngineException, "1st parameter must be a #{Ccrypto::KeypairConfig.class} object" if not @config.is_a?(Ccrypto::KeypairConfig)
245
+ end
246
+
247
+ def generate_keypair(&block)
248
+
249
+ rand = java.security.SecureRandom.getInstanceStrong
250
+ kpg = org.bouncycastle.pqc.crypto.crystals.kyber.KyberKeyPairGenerator.new
251
+ kpg.init(KyberKeyGenerationParameters.new(rand, @config.provider_config[:params]))
252
+
253
+ CrystalKyberKeyBundle.new(kpg.generateKeyPair(), @config)
254
+
255
+ end
256
+
257
+ end # class CrystalKyberEngine
258
+
259
+ end
260
+ end
@@ -7,9 +7,6 @@ module Ccrypto
7
7
  include DataConversion
8
8
  include TR::CondUtils
9
9
 
10
- include TeLogger::TeLogHelper
11
- teLogger_tag :j_decompression
12
-
13
10
  def initialize(*args,&block)
14
11
 
15
12
  @eng = java.util.zip.Inflater.new
@@ -25,7 +22,7 @@ module Ccrypto
25
22
  @eng.setInput(to_java_bytes(val))
26
23
 
27
24
  baos = java.io.ByteArrayOutputStream.new
28
- buf = ::Java::byte[102400].new
25
+ buf = ::Java::byte[READ_BUF_SIZE].new
29
26
  while not @eng.finished
30
27
  done = @eng.inflate(buf)
31
28
  teLogger.debug "Done #{done} bytes"
@@ -43,6 +40,10 @@ module Ccrypto
43
40
  def final
44
41
  end
45
42
 
43
+ def teLogger
44
+ Java.logger(:decomp_eng)
45
+ end
46
+
46
47
  end
47
48
  end
48
49
  end