Class: CcipherFactory::DerivedSymKey
- Inherits:
-
Object
- Object
- CcipherFactory::DerivedSymKey
show all
- Includes:
- Common, SymKey, TR::CondUtils
- Defined in:
- lib/ccipher_factory/symkey/derived_symkey.rb
Instance Attribute Summary collapse
Attributes included from SymKey
#key, #keysize, #keytype
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Common
#attach_mode, #cleanup_intOutputBuf, #cleanup_intOutputFile, #detach_mode, #disposeOutput, #intOutputBuf, #intOutputFile, #is_attach_mode?, #is_output_given?, #output, #output_obj, #sanitize_symbol, #write_to_output
Methods included from SymKey
#dispose, #initialize, #is_equals?, #merge_key, #raw_key, #split_key
#shamir_recover, #shamir_split
Instance Attribute Details
#kdf ⇒ Object
Returns the value of attribute kdf.
53
54
55
|
# File 'lib/ccipher_factory/symkey/derived_symkey.rb', line 53
def kdf
@kdf
end
|
Class Method Details
.from_encoded(bin, &block) ⇒ Object
10
11
12
13
|
# File 'lib/ccipher_factory/symkey/derived_symkey.rb', line 10
def self.from_encoded(bin, &block)
ts = BinStruct.instance.struct_from_bin(bin)
from_tspec(ts, &block)
end
|
.from_tspec(ts, &block) ⇒ Object
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
# File 'lib/ccipher_factory/symkey/derived_symkey.rb', line 15
def self.from_tspec(ts, &block)
raise SymKeyError, "Block is required" if not block
pass = block.call(:password)
raise SymKeyError, "Password to derive symkey is not available" if is_empty?(pass)
keytype = BTag.value_constant(ts.keytype)
keysize = ts.keysize
dsk = DerivedSymKey.new(keytype, keysize)
dsk.kdf = KDF.from_encoded(ts.kdf_config)
dsk.derive(pass)
kcvBin = ts.kcv
if block
if not_empty?(kcvBin) and block.call(:pre_verify_password) == true
kcv = KCV.from_encoded(kcvBin)
kcv.key = dsk
raise SymKeyError, "Given password is incorrect" if not kcv.is_matched?
end
end
dsk
end
|
.logger ⇒ Object
45
46
47
48
49
50
51
|
# File 'lib/ccipher_factory/symkey/derived_symkey.rb', line 45
def self.logger
if @logger.nil?
@logger = Tlogger.new
@logger.tag = :derived_symkey
end
@logger
end
|
Instance Method Details
#activate_password_verifier ⇒ Object
54
55
56
|
# File 'lib/ccipher_factory/symkey/derived_symkey.rb', line 54
def activate_password_verifier
@passVer = true
end
|
#deactivate_password_verifier ⇒ Object
57
58
59
|
# File 'lib/ccipher_factory/symkey/derived_symkey.rb', line 57
def deactivate_password_verifier
@passVer = false
end
|
#derive(pass, eng = :scrypt, &block) ⇒ Object
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
# File 'lib/ccipher_factory/symkey/derived_symkey.rb', line 61
def derive(pass, eng = :scrypt, &block)
if is_empty?(@kdf)
@kdf = KDF.instance(eng)
if block
case eng
when :scrypt
@kdf.cost = block.call(:kdf_scrypt_cost)
@kdf.parallel = block.call(:kdf_scrypt_parallel)
@kdf.blocksize = block.call(:kdf_scrypt_blocksize)
@kdf.salt = block.call(:kdf_scrypt_salt)
@kdf.digestAlgo = block.call(:kdf_scrypt_digestAlgo)
end
end
@kdf.derive_init(@keysize)
end
@kdf.derive_update(pass)
@kdfAsn1 = @kdf.derive_final
@key = @kdf.derivedVal
end
|
#encoded ⇒ Object
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
# File 'lib/ccipher_factory/symkey/derived_symkey.rb', line 88
def encoded
ts = BinStruct.instance.struct(:symkey_derived)
ts.keytype = BTag.constant_value(@keytype)
ts.keysize = @keysize
ts.kdf_config = @kdfAsn1
if @passVer == true
kcv = KCV.new
kcv.key = self
ts.kcv = kcv.encoded
else
ts.kcv = ""
end
ts.encoded
end
|
#logger ⇒ Object
105
106
107
|
# File 'lib/ccipher_factory/symkey/derived_symkey.rb', line 105
def logger
self.class.logger
end
|