Module: CcipherFactory::SymKey
- Extended by:
- TR::CondUtils
- Includes:
- ShamirSharingHelper
- Included in:
- DerivedSymKey, SoftSymKey
- Defined in:
- lib/ccipher_factory/symkey/symkey.rb
Overview
Generic category to handle 4 types of symkey:
-
software internal generated symkey (key value is generated internally)
-
software external generated symkey (key value is being set by caller)
-
derived symkey (key value is derived from password)
-
hardware symkey (key value is stored in hardware and not going to be available)
Defined Under Namespace
Classes: SymKeyError
Instance Attribute Summary collapse
-
#key ⇒ Object
Raw key.
-
#keysize ⇒ Object
Key length in bits.
-
#keytype ⇒ Object
Symmetric key type.
Class Method Summary collapse
Instance Method Summary collapse
- #dispose ⇒ Object
- #initialize(keytype, keysize, key = nil) ⇒ Object
- #is_equals?(key) ⇒ Boolean
-
#merge_key(shares) ⇒ Object
merge the splited share values into raw key value back.
- #raw_key ⇒ Object
-
#split_key(totalShare, reqShare, &block) ⇒ Object
split the raw key value into secret shares.
Methods included from ShamirSharingHelper
#shamir_recover, #shamir_split
Instance Attribute Details
#key ⇒ Object
Raw key. It could be bytes or key object
43 44 45 |
# File 'lib/ccipher_factory/symkey/symkey.rb', line 43 def key @key end |
#keysize ⇒ Object
Key length in bits
40 41 42 |
# File 'lib/ccipher_factory/symkey/symkey.rb', line 40 def keysize @keysize end |
#keytype ⇒ Object
Symmetric key type. Supported key type refers CcipherFactory::SymKeyGenerator#supported_symkey
37 38 39 |
# File 'lib/ccipher_factory/symkey/symkey.rb', line 37 def keytype @keytype end |
Class Method Details
.from_encoded(bin, &block) ⇒ Object
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/ccipher_factory/symkey/symkey.rb', line 96 def self.from_encoded(bin, &block) raise SymKeyError, "Input should not be empty" if is_empty?(bin) ts = BinStruct.instance.struct_from_bin(bin) case ts.oid when BTag.constant_value(:symkey_derived) DerivedSymKey.from_tspec(ts, &block) when BTag.constant_value(:symkey) SoftSymKey.from_tspec(ts, &block) else raise SymKeyError, "Unknown symkey envelope '#{ts.oid}'" end #case ts.id #when :symkey_derived # DerivedSymKey.from_tspec(ts, &block) #when :symkey # SoftSymKey.from_tspec(ts, &block) #else # raise SymKeyError, "Unknown symkey envelope '#{ts.id}'" #end end |
Instance Method Details
#dispose ⇒ Object
61 62 63 64 |
# File 'lib/ccipher_factory/symkey/symkey.rb', line 61 def dispose @key = nil GC.start end |
#initialize(keytype, keysize, key = nil) ⇒ Object
45 46 47 48 49 |
# File 'lib/ccipher_factory/symkey/symkey.rb', line 45 def initialize(keytype, keysize, key = nil) @keytype = keytype @keysize = keysize @key = key end |
#is_equals?(key) ⇒ Boolean
91 92 93 94 |
# File 'lib/ccipher_factory/symkey/symkey.rb', line 91 def is_equals?(key) comp = Ccrypto::UtilFactory.instance(:comparator) comp.is_equal?(@key, key) end |
#merge_key(shares) ⇒ Object
merge the splited share values into raw key value back
57 58 59 |
# File 'lib/ccipher_factory/symkey/symkey.rb', line 57 def merge_key(shares) @key = shamir_recover(shares) end |
#raw_key ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/ccipher_factory/symkey/symkey.rb', line 66 def raw_key if not @key.nil? nativeHelper = Ccrypto::UtilFactory.instance(:native_helper) if @key.is_a?(String) or nativeHelper.is_byte_array?(@key) @key elsif @key.respond_to?(:to_bin) @key.to_bin else raise SymKeyError, "Not sure how to get raw_key for #{@key.inspect}" end #case @key #when String, ::Java::byte[] # @key #else # if @key.respond_to?(:to_bin) # @key.to_bin # else # raise SymKeyError, "Not sure how to get raw_key for #{@key.inspect}" # end #end else raise SymKeyError, "Key instance is nil. Cannot get raw_key from nil instance" end end |
#split_key(totalShare, reqShare, &block) ⇒ Object
split the raw key value into secret shares
52 53 54 |
# File 'lib/ccipher_factory/symkey/symkey.rb', line 52 def split_key(totalShare, reqShare, &block) shamir_split(@key, totalShare, reqShare) end |