ccrypto 0.1.3 → 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.
- checksums.yaml +4 -4
- data/.release_history.yml +2 -0
- data/.rubocop.yml +2 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +43 -29
- data/Rakefile +1 -2
- data/ccrypto.gemspec +3 -1
- data/lib/ccrypto/capability.rb +15 -0
- data/lib/ccrypto/configs/algo_config.rb +5 -5
- data/lib/ccrypto/configs/cipher_config.rb +41 -98
- data/lib/ccrypto/configs/digest_config.rb +89 -78
- data/lib/ccrypto/configs/hmac_config.rb +8 -3
- data/lib/ccrypto/configs/kdf_config.rb +73 -11
- data/lib/ccrypto/configs/key_config.rb +8 -1
- data/lib/ccrypto/configs/keypair_config.rb +93 -14
- data/lib/ccrypto/configs/secret_sharing_config.rb +7 -0
- data/lib/ccrypto/configs/x509_cert_profile.rb +10 -7
- data/lib/ccrypto/configs/x509_csr_profile.rb +1 -1
- data/lib/ccrypto/digest_matcher.rb +122 -0
- data/lib/ccrypto/in_memory_record.rb +255 -0
- data/lib/ccrypto/key_bundle.rb +20 -1
- data/lib/ccrypto/keystore.rb +25 -0
- data/lib/ccrypto/private_key.rb +8 -0
- data/lib/ccrypto/public_key.rb +13 -0
- data/lib/ccrypto/secret_key.rb +9 -4
- data/lib/ccrypto/supported_cipher_list.rb +6 -127
- data/lib/ccrypto/version.rb +1 -1
- data/lib/ccrypto/x509_cert.rb +5 -0
- data/lib/ccrypto/x509_csr.rb +2 -0
- data/lib/ccrypto.rb +41 -0
- metadata +12 -7
@@ -0,0 +1,255 @@
|
|
1
|
+
|
2
|
+
require 'yaml'
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
module Ccrypto
|
6
|
+
class InMemoryRecordError < StandardError; end
|
7
|
+
|
8
|
+
module InMemoryRecord
|
9
|
+
include TR::CondUtils
|
10
|
+
|
11
|
+
module ClassMethods
|
12
|
+
|
13
|
+
def record_storage_root=(val)
|
14
|
+
@store_root
|
15
|
+
FileUtils.mkdir_p(@store_root) if not File.exist?(@store_root)
|
16
|
+
end
|
17
|
+
|
18
|
+
def record_storage_root
|
19
|
+
if @store_root.nil?
|
20
|
+
@store_root = File.join(Dir.home,".ccrypto")
|
21
|
+
FileUtils.mkdir_p(@store_root) if not File.exist?(@store_root)
|
22
|
+
end
|
23
|
+
@store_root
|
24
|
+
end
|
25
|
+
|
26
|
+
def load_from_storage(record, &block)
|
27
|
+
recFile = File.join(record_storage_root, "#{record.gsub(" ","_")}.imr")
|
28
|
+
if File.exist?(recFile)
|
29
|
+
YAML.unsafe_load_file(recFile)
|
30
|
+
else
|
31
|
+
if block
|
32
|
+
block.call(:init_new_instance)
|
33
|
+
else
|
34
|
+
# try to do generic
|
35
|
+
eval("#{self.name}.new")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
alias_method :load, :load_from_storage
|
40
|
+
|
41
|
+
end # ClassMethods
|
42
|
+
def self.included(klass)
|
43
|
+
klass.extend(ClassMethods)
|
44
|
+
@klass = klass
|
45
|
+
end
|
46
|
+
|
47
|
+
#
|
48
|
+
# Instance methods
|
49
|
+
#
|
50
|
+
def save_to_storage(record)
|
51
|
+
target = File.join(self.class.record_storage_root,"#{record}.imr")
|
52
|
+
File.open(target,"w") do |f|
|
53
|
+
f.write YAML.dump(self)
|
54
|
+
end
|
55
|
+
self
|
56
|
+
end
|
57
|
+
alias_method :save, :save_to_storage
|
58
|
+
|
59
|
+
def register(obj, opts = {})
|
60
|
+
logger.debug "Giving #{obj} to register"
|
61
|
+
if not obj.nil?
|
62
|
+
extrapolate(obj, opts)
|
63
|
+
logger.debug "Extrapolated object #{obj}"
|
64
|
+
records << obj
|
65
|
+
logger.debug "Object #{obj} added to records"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# finder only accept hash
|
70
|
+
def find(field)
|
71
|
+
res = []
|
72
|
+
case field
|
73
|
+
when Hash
|
74
|
+
loopRes = []
|
75
|
+
field.each do |k,v|
|
76
|
+
case v
|
77
|
+
when Array
|
78
|
+
# extra configration at value is array
|
79
|
+
# 1st parameter always the keyword to find
|
80
|
+
ss = v.first
|
81
|
+
fuzzy = v[1] || false
|
82
|
+
else
|
83
|
+
ss = v
|
84
|
+
fuzzy = false
|
85
|
+
end
|
86
|
+
|
87
|
+
if not searchRes[k.to_sym].nil?
|
88
|
+
if fuzzy
|
89
|
+
found = searchRes[k.to_sym].select { |sk,sv|
|
90
|
+
sk.to_s.downcase =~ /#{ss.downcase}/
|
91
|
+
}
|
92
|
+
loopRes = found.values
|
93
|
+
else
|
94
|
+
ss = ss.to_s.downcase
|
95
|
+
if searchRes[k.to_sym].keys.include?(ss)
|
96
|
+
loopRes = searchRes[k.to_sym][ss]
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
if is_empty?(res)
|
102
|
+
res = loopRes
|
103
|
+
else
|
104
|
+
res = res & loopRes
|
105
|
+
end
|
106
|
+
end
|
107
|
+
else
|
108
|
+
raise InMemoryRecordError, "Hash is expected for finder function"
|
109
|
+
end
|
110
|
+
|
111
|
+
# apparantly dup and clone has some different side effects
|
112
|
+
# dup will not copy the frozen flag but shall also ignore the dynamic method
|
113
|
+
# created using instance_eval
|
114
|
+
# clone shall retain the frozen flag but shall also carry over the instance_eval
|
115
|
+
# result.
|
116
|
+
# Hence let the application to decide to use dup or clone
|
117
|
+
res
|
118
|
+
#if field[:do_not_dup] == true
|
119
|
+
# res
|
120
|
+
#else
|
121
|
+
# # always return a copy instead of actual one
|
122
|
+
# # dup call here might not help if there are embedded
|
123
|
+
# # object in the class as the dup only does swallow
|
124
|
+
# # copy, not deep copy
|
125
|
+
# # Library user need to handle deep copy
|
126
|
+
# res.map { |r|
|
127
|
+
# if r.respond_to?(:ddup)
|
128
|
+
# r.ddup
|
129
|
+
# else
|
130
|
+
# r.clone
|
131
|
+
# end
|
132
|
+
# }
|
133
|
+
#end
|
134
|
+
|
135
|
+
end # find() operation
|
136
|
+
|
137
|
+
def each(&block)
|
138
|
+
raise InMemoryRecordError, "each function requires a block" if not block
|
139
|
+
records.each(&block)
|
140
|
+
#records.map {|r|
|
141
|
+
# if r.respond_to?(:ddup)
|
142
|
+
# r.ddup
|
143
|
+
# else
|
144
|
+
# r.clone
|
145
|
+
# end
|
146
|
+
#}.each(&block)
|
147
|
+
end
|
148
|
+
|
149
|
+
def collect(&block)
|
150
|
+
records.collect(&block)
|
151
|
+
end
|
152
|
+
|
153
|
+
def select(&block)
|
154
|
+
records.select(&block)
|
155
|
+
#records.map { |r|
|
156
|
+
# if r.respond_to?(:ddup)
|
157
|
+
# r.ddup
|
158
|
+
# else
|
159
|
+
# r.clone
|
160
|
+
# end
|
161
|
+
#}.select(&block)
|
162
|
+
end
|
163
|
+
|
164
|
+
def empty?
|
165
|
+
records.empty?
|
166
|
+
end
|
167
|
+
|
168
|
+
def to_a
|
169
|
+
records #.freeze
|
170
|
+
#records.map { |c|
|
171
|
+
# if c.respond_to?(:ddup)
|
172
|
+
# c.ddup
|
173
|
+
# else
|
174
|
+
# c.clone
|
175
|
+
# end
|
176
|
+
#}.freeze
|
177
|
+
end
|
178
|
+
|
179
|
+
private
|
180
|
+
def records
|
181
|
+
if @records.nil?
|
182
|
+
@records = []
|
183
|
+
end
|
184
|
+
@records
|
185
|
+
end
|
186
|
+
|
187
|
+
def define_search_key(*args)
|
188
|
+
args.map { |s|
|
189
|
+
raise InMemoryRecordError, "Only support Symbol/String as search key" if not [String, Symbol].include?(s.class)
|
190
|
+
}
|
191
|
+
searchKeys.concat(args)
|
192
|
+
end
|
193
|
+
|
194
|
+
def extrapolate(a, opts = {})
|
195
|
+
if not_empty?(opts) and not_empty?(opts[:tag_under])
|
196
|
+
tag = opts[:tag_under]
|
197
|
+
searchRes[tag] = {} if searchRes[tag].nil?
|
198
|
+
|
199
|
+
val = opts[:tag_value]
|
200
|
+
val = val.to_s.downcase
|
201
|
+
|
202
|
+
if not_empty?(val)
|
203
|
+
searchRes[tag][val] = [] if searchRes[tag][val].nil?
|
204
|
+
searchRes[tag][val] << a
|
205
|
+
logger.debug "Registering #{tag}/#{val}"
|
206
|
+
|
207
|
+
else
|
208
|
+
raise InMemoryRecordError, ":tag_under requires :tag_value to operate"
|
209
|
+
end
|
210
|
+
end # additional tagging
|
211
|
+
|
212
|
+
searchKeys.each do |ss|
|
213
|
+
case ss
|
214
|
+
when Symbol, String
|
215
|
+
val = a.send(ss)
|
216
|
+
#logger.debug "Extrapolating #{ss} got : #{val}"
|
217
|
+
if not_empty?(val)
|
218
|
+
val = val.to_s.downcase
|
219
|
+
# search field has value
|
220
|
+
searchRes[ss.to_sym] = {} if searchRes[ss.to_sym].nil?
|
221
|
+
searchRes[ss.to_sym][val] = [] if searchRes[ss.to_sym][val].nil?
|
222
|
+
searchRes[ss.to_sym][val] << a
|
223
|
+
logger.debug "Registering #{ss.to_sym}/#{val}"
|
224
|
+
end
|
225
|
+
end
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
def searchKeys
|
230
|
+
if @searchKeys.nil?
|
231
|
+
@searchKeys = []
|
232
|
+
end
|
233
|
+
@searchKeys
|
234
|
+
end
|
235
|
+
|
236
|
+
def searchRes
|
237
|
+
if @searchRes.nil?
|
238
|
+
@searchRes = {}
|
239
|
+
end
|
240
|
+
@searchRes
|
241
|
+
end
|
242
|
+
|
243
|
+
def hash_tree
|
244
|
+
Hash.new do |hash, key|
|
245
|
+
hash[key] = hash_tree
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
249
|
+
def logger
|
250
|
+
Ccrypto.logger(:inMemRec)
|
251
|
+
end
|
252
|
+
|
253
|
+
|
254
|
+
end
|
255
|
+
end
|
data/lib/ccrypto/key_bundle.rb
CHANGED
@@ -2,12 +2,31 @@
|
|
2
2
|
|
3
3
|
module Ccrypto
|
4
4
|
module KeyBundle
|
5
|
-
|
5
|
+
attr_reader :nativeKeypair
|
6
6
|
|
7
7
|
def KeyBundle.from_storage(*args, &block)
|
8
8
|
Provider.instance.provider.keybundle_from_storage(*args, &block)
|
9
9
|
end
|
10
10
|
|
11
|
+
def native
|
12
|
+
@nativeKeypair
|
13
|
+
end
|
14
|
+
alias_method :keypair, :native
|
15
|
+
|
16
|
+
private
|
17
|
+
def method_missing(mtd, *args, &block)
|
18
|
+
if not @nativeKeypair.nil?
|
19
|
+
logger.debug "Sending to method #{mtd} of object '#{@nativeKeypair}' at KeyBundle level"
|
20
|
+
@nativeKeypair.send(mtd, *args, &block)
|
21
|
+
else
|
22
|
+
super
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def logger
|
27
|
+
Ccrypto.logger(:keybundle)
|
28
|
+
end
|
29
|
+
|
11
30
|
end
|
12
31
|
|
13
32
|
module ECCKeyBundle
|
@@ -0,0 +1,25 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
module Ccrypto
|
4
|
+
module Keystore
|
5
|
+
|
6
|
+
class KeystoreException < StandardError; end
|
7
|
+
|
8
|
+
def Keystore.load_keystore(*args, &block)
|
9
|
+
Provider.instance.provider.load_keystore(*args, &block)
|
10
|
+
end
|
11
|
+
|
12
|
+
def Keystore.load_keystore_file(*args, &block)
|
13
|
+
Provider.instance.provider.load_keystore_file(*args, &block)
|
14
|
+
end
|
15
|
+
|
16
|
+
def Keystore.convert_keystore(*args, &block)
|
17
|
+
Provider.instance.provider.convert_keystore(*args, &block)
|
18
|
+
end
|
19
|
+
|
20
|
+
def Keystore.convert_keystore_file(*args, &block)
|
21
|
+
Provider.instance.provider.convert_keystore_file(*args, &block)
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
data/lib/ccrypto/private_key.rb
CHANGED
@@ -23,10 +23,18 @@ module Ccrypto
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
+
def native
|
27
|
+
@native_privKey
|
28
|
+
end
|
29
|
+
|
26
30
|
end # PrivateKey
|
27
31
|
|
28
32
|
class ECCPrivateKey < PrivateKey; end
|
29
33
|
class RSAPrivateKey < PrivateKey; end
|
30
34
|
class ED25519PrivateKey < PrivateKey; end
|
31
35
|
class X25519PrivateKey < PrivateKey; end
|
36
|
+
|
37
|
+
class CrystalDilithiumPrivateKey < PrivateKey; end
|
38
|
+
class CrystalKyberPrivateKey < PrivateKey; end
|
39
|
+
|
32
40
|
end
|
data/lib/ccrypto/public_key.rb
CHANGED
@@ -7,10 +7,20 @@ module Ccrypto
|
|
7
7
|
@native_pubKey = pubkey
|
8
8
|
end
|
9
9
|
|
10
|
+
def native
|
11
|
+
@native_pubKey
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
def logger
|
16
|
+
Ccrypto.logger(:pubkey)
|
17
|
+
end
|
18
|
+
|
10
19
|
def method_missing(mtd, *args, &block)
|
11
20
|
if @native_pubKey.nil?
|
12
21
|
super
|
13
22
|
else
|
23
|
+
logger.debug "Sending to native pubKey '#{@native_pubKey}' of method '#{mtd}'"
|
14
24
|
@native_pubKey.send(mtd, *args, &block)
|
15
25
|
end
|
16
26
|
end
|
@@ -29,4 +39,7 @@ module Ccrypto
|
|
29
39
|
class RSAPublicKey < PublicKey; end
|
30
40
|
class ED25519PublicKey < PublicKey; end
|
31
41
|
class X25519PublicKey < PublicKey; end
|
42
|
+
|
43
|
+
class CrystalDilithiumPublicKey < PublicKey; end
|
44
|
+
class CrystalKyberPublicKey < PublicKey; end
|
32
45
|
end
|
data/lib/ccrypto/secret_key.rb
CHANGED
@@ -2,12 +2,17 @@
|
|
2
2
|
|
3
3
|
module Ccrypto
|
4
4
|
class SecretKey
|
5
|
-
|
6
|
-
attr_accessor :key
|
5
|
+
attr_reader :algo, :keysize
|
7
6
|
|
8
|
-
|
7
|
+
attr_reader :native_key
|
8
|
+
|
9
|
+
attr_accessor :provider_config
|
10
|
+
|
11
|
+
def initialize(algo, keysize, key)
|
9
12
|
@algo = algo
|
10
|
-
@
|
13
|
+
@keysize = keysize
|
14
|
+
@native_key = key
|
11
15
|
end
|
16
|
+
|
12
17
|
end
|
13
18
|
end
|
@@ -1,5 +1,8 @@
|
|
1
1
|
|
2
|
-
require '
|
2
|
+
require 'yaml'
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
require_relative 'in_memory_record'
|
3
6
|
|
4
7
|
module Ccrypto
|
5
8
|
|
@@ -7,134 +10,10 @@ module Ccrypto
|
|
7
10
|
|
8
11
|
class SupportedCipherList
|
9
12
|
include TR::CondUtils
|
10
|
-
include
|
11
|
-
|
12
|
-
include TeLogger::TeLogHelper
|
13
|
-
teLogger_tag :supCipherList
|
13
|
+
include InMemoryRecord
|
14
14
|
|
15
15
|
def initialize
|
16
|
-
|
17
|
-
@keysizes = {}
|
18
|
-
@modes = {}
|
19
|
-
|
20
|
-
@algoKeysize = {}
|
21
|
-
@algoKeysizeMode = {}
|
22
|
-
@keysizeMode = {}
|
23
|
-
@algoMode = {}
|
24
|
-
@items = []
|
25
|
-
end
|
26
|
-
|
27
|
-
def register(cc)
|
28
|
-
raise SupportedCipherListError, "Ccrypto::CipherConfig required. Got '#{cc.class}'" if not cc.is_a?(Ccrypto::CipherConfig)
|
29
|
-
|
30
|
-
@items << cc
|
31
|
-
algo = cc.algo.to_sym
|
32
|
-
@algos[algo] = [] if @algos[algo].nil?
|
33
|
-
@algos[algo] << cc
|
34
|
-
|
35
|
-
keysize = cc.keysize.to_s
|
36
|
-
@keysizes[keysize] = [] if @keysizes[keysize].nil?
|
37
|
-
@keysizes[keysize] << cc
|
38
|
-
|
39
|
-
mode = cc.mode.nil? ? "" : cc.mode.to_s
|
40
|
-
if not_empty?(mode)
|
41
|
-
@modes[mode] = [] if @modes[mode].nil?
|
42
|
-
@modes[mode] << cc
|
43
|
-
end
|
44
|
-
|
45
|
-
@algoKeysize[algo] = { } if @algoKeysize[algo].nil?
|
46
|
-
@algoKeysize[algo][keysize] = [] if @algoKeysize[algo][keysize].nil?
|
47
|
-
@algoKeysize[algo][keysize] << cc
|
48
|
-
|
49
|
-
if not_empty?(mode)
|
50
|
-
@algoMode[algo] = {} if @algoMode[algo].nil?
|
51
|
-
@algoMode[algo][mode] = [] if @algoMode[algo][mode].nil?
|
52
|
-
@algoMode[algo][mode] << cc
|
53
|
-
|
54
|
-
@keysizeMode[keysize] = {} if @keysizeMode[keysize].nil?
|
55
|
-
@keysizeMode[keysize][mode] = [] if @keysizeMode[keysize][mode].nil?
|
56
|
-
@keysizeMode[keysize][mode] << cc
|
57
|
-
|
58
|
-
@algoKeysizeMode[algo] = {} if @algoKeysizeMode[algo].nil?
|
59
|
-
@algoKeysizeMode[algo][keysize] = {} if @algoKeysizeMode[algo][keysize].nil?
|
60
|
-
@algoKeysizeMode[algo][keysize][mode] = [] if @algoKeysizeMode[algo][keysize][mode].nil?
|
61
|
-
@algoKeysizeMode[algo][keysize][mode] << cc
|
62
|
-
end
|
63
|
-
|
64
|
-
end
|
65
|
-
|
66
|
-
def items
|
67
|
-
@items.freeze
|
68
|
-
end
|
69
|
-
|
70
|
-
def each(&block)
|
71
|
-
@items.each(&block)
|
72
|
-
end
|
73
|
-
|
74
|
-
def algo_count
|
75
|
-
@algos.length
|
76
|
-
end
|
77
|
-
def find_algo(algo)
|
78
|
-
res = @algos[algo.to_sym] || []
|
79
|
-
res.freeze
|
80
|
-
end
|
81
|
-
|
82
|
-
# Problem with this is the algo is in symbol
|
83
|
-
# and external app need to remember to conver it to
|
84
|
-
# symbol in order to compare.
|
85
|
-
# therefore the new method is_algo_supported? created
|
86
|
-
# to solve this issue
|
87
|
-
def algos
|
88
|
-
@algos.keys.freeze
|
89
|
-
end
|
90
|
-
|
91
|
-
def is_algo_supported?(algo)
|
92
|
-
@algos.keys.include?(algo.to_sym)
|
93
|
-
end
|
94
|
-
|
95
|
-
def keysizes_count
|
96
|
-
@keysizes.length
|
97
|
-
end
|
98
|
-
def keysizes
|
99
|
-
@keysizes.keys.freeze
|
100
|
-
end
|
101
|
-
def find_config_by_keysize(keysize)
|
102
|
-
@keysizes[keysize.to_s].freeze
|
103
|
-
end
|
104
|
-
|
105
|
-
def mode_count
|
106
|
-
@modes.length
|
107
|
-
end
|
108
|
-
def find_config_by_mode(mode)
|
109
|
-
@modes[mode.to_s].freeze
|
110
|
-
end
|
111
|
-
def modes
|
112
|
-
@modes.keys.freeze
|
113
|
-
end
|
114
|
-
|
115
|
-
def find_algo_keysize(algo, keysize)
|
116
|
-
res = @algoKeysize[algo.to_sym] || { }
|
117
|
-
res = res[keysize.to_s] || []
|
118
|
-
res.freeze
|
119
|
-
end
|
120
|
-
|
121
|
-
def find_algo_mode(algo, mode)
|
122
|
-
res = @algoMode[algo.to_sym] || {}
|
123
|
-
res = res[mode.to_s] || []
|
124
|
-
res.freeze
|
125
|
-
end
|
126
|
-
|
127
|
-
def find_algo_keysize_mode(algo, keysize, mode)
|
128
|
-
res = @algoKeysizeMode[algo.to_sym] || {}
|
129
|
-
res = res[keysize.to_s] || {}
|
130
|
-
res = res[mode.to_s] || []
|
131
|
-
res.freeze
|
132
|
-
end
|
133
|
-
|
134
|
-
def find_keysize_modes(keysize, mode)
|
135
|
-
res = @keysizeMode[keysize.to_s] || {}
|
136
|
-
res = res[mode.to_s] || []
|
137
|
-
res.freeze
|
16
|
+
define_search_key(:algo, :keysize, :mode, :padding, :ivLength)
|
138
17
|
end
|
139
18
|
|
140
19
|
end
|
data/lib/ccrypto/version.rb
CHANGED
data/lib/ccrypto/x509_cert.rb
CHANGED
data/lib/ccrypto/x509_csr.rb
CHANGED
data/lib/ccrypto.rb
CHANGED
@@ -26,7 +26,16 @@ require_relative 'ccrypto/secret_key'
|
|
26
26
|
require_relative 'ccrypto/x509_cert'
|
27
27
|
require_relative 'ccrypto/x509_csr'
|
28
28
|
|
29
|
+
require_relative 'ccrypto/digest_matcher'
|
30
|
+
require_relative 'ccrypto/in_memory_record'
|
31
|
+
|
32
|
+
require_relative 'ccrypto/keystore'
|
33
|
+
|
34
|
+
require_relative 'ccrypto/capability'
|
35
|
+
|
29
36
|
module Ccrypto
|
37
|
+
include TR::CondUtils
|
38
|
+
|
30
39
|
class Error < StandardError; end
|
31
40
|
class CcryptoProviderException < StandardError; end
|
32
41
|
|
@@ -59,4 +68,36 @@ module Ccrypto
|
|
59
68
|
|
60
69
|
Root_OID = ["2","0","18"]
|
61
70
|
|
71
|
+
def self.logger(tag = nil, &block)
|
72
|
+
if @_logger.nil?
|
73
|
+
@_logger = TeLogger::Tlogger.new
|
74
|
+
end
|
75
|
+
|
76
|
+
if block
|
77
|
+
if not_empty?(tag)
|
78
|
+
@_logger.with_tag(tag, &block)
|
79
|
+
else
|
80
|
+
@_logger.with_tag(@_logger.tag, &block)
|
81
|
+
end
|
82
|
+
else
|
83
|
+
if is_empty?(tag)
|
84
|
+
@_logger.tag = :CryptoJava
|
85
|
+
@_logger
|
86
|
+
else
|
87
|
+
# no block but tag is given? hmm
|
88
|
+
@_logger.tag = tag
|
89
|
+
@_logger
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
def self.if_detail_debug(msg)
|
96
|
+
logger.tdebug(:ccrypto_detail_debug, msg) if is_detail_debug_on?
|
97
|
+
end
|
98
|
+
|
99
|
+
def self.is_detail_debug_on?
|
100
|
+
ENV['CCRYPTO_DEBUG'] == "true"
|
101
|
+
end
|
102
|
+
|
62
103
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ccrypto
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ian
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-12-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: teLogger
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: release-gem
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
@@ -76,6 +76,7 @@ extra_rdoc_files: []
|
|
76
76
|
files:
|
77
77
|
- ".release_history.yml"
|
78
78
|
- ".rspec"
|
79
|
+
- ".rubocop.yml"
|
79
80
|
- Gemfile
|
80
81
|
- Gemfile.lock
|
81
82
|
- README.md
|
@@ -87,6 +88,7 @@ files:
|
|
87
88
|
- lib/ccrypto/algo_factory.rb
|
88
89
|
- lib/ccrypto/asn1.rb
|
89
90
|
- lib/ccrypto/asn1_object.rb
|
91
|
+
- lib/ccrypto/capability.rb
|
90
92
|
- lib/ccrypto/configs/algo_config.rb
|
91
93
|
- lib/ccrypto/configs/cipher_config.rb
|
92
94
|
- lib/ccrypto/configs/compress_config.rb
|
@@ -100,7 +102,10 @@ files:
|
|
100
102
|
- lib/ccrypto/configs/secure_random_config.rb
|
101
103
|
- lib/ccrypto/configs/x509_cert_profile.rb
|
102
104
|
- lib/ccrypto/configs/x509_csr_profile.rb
|
105
|
+
- lib/ccrypto/digest_matcher.rb
|
106
|
+
- lib/ccrypto/in_memory_record.rb
|
103
107
|
- lib/ccrypto/key_bundle.rb
|
108
|
+
- lib/ccrypto/keystore.rb
|
104
109
|
- lib/ccrypto/private_key.rb
|
105
110
|
- lib/ccrypto/provider.rb
|
106
111
|
- lib/ccrypto/public_key.rb
|
@@ -113,7 +118,7 @@ files:
|
|
113
118
|
homepage: https://github.com/cameronian/ccrypto
|
114
119
|
licenses: []
|
115
120
|
metadata: {}
|
116
|
-
post_install_message:
|
121
|
+
post_install_message:
|
117
122
|
rdoc_options: []
|
118
123
|
require_paths:
|
119
124
|
- lib
|
@@ -128,8 +133,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
128
133
|
- !ruby/object:Gem::Version
|
129
134
|
version: '0'
|
130
135
|
requirements: []
|
131
|
-
rubygems_version: 3.
|
132
|
-
signing_key:
|
136
|
+
rubygems_version: 3.5.1
|
137
|
+
signing_key:
|
133
138
|
specification_version: 4
|
134
139
|
summary: Crypto API normalization for Ruby and Java
|
135
140
|
test_files: []
|