ccipher_factory 0.1.1 → 0.1.2
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bb2ce71c27c1cf55de4c778e9acd14c66eb67776886877ba62fc07dfa9e7d291
|
4
|
+
data.tar.gz: ab03a998acdad1131b9fe94d969f1854105767a2a81ac80c003e17967da2b5db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4ae234edf1e0ca9c126600c8f5813950645912dbd400171bea2b2e911b7c5db18f76252636d4a699cbccc10b8ee281cc7f76236bbbf48831c1d2a4ab8f679f58
|
7
|
+
data.tar.gz: 85e8d6d06350ce23c78d649f94662c8a8bf2dbaa815c7f566742bed79037746c7f766d599022543459a94415f1ff5930443a0c1ed523543b8d53ba3bd5293d25
|
data/.release_history.yml
CHANGED
@@ -152,6 +152,15 @@ module CcipherFactory
|
|
152
152
|
int :keysize
|
153
153
|
bin :key
|
154
154
|
end,
|
155
|
+
|
156
|
+
symkey_keystore: Binenc::EngineFactory.instance(:bin_struct).define do
|
157
|
+
oid :oid, BTag.constant_value(:symkey_keystore)
|
158
|
+
int :version, 0x0100
|
159
|
+
bin :symkey_derived
|
160
|
+
bin :symkey_cipher
|
161
|
+
bin :symkey
|
162
|
+
end,
|
163
|
+
|
155
164
|
|
156
165
|
symkey_att_sign: Binenc::EngineFactory.instance(:bin_struct).define do
|
157
166
|
oid :oid, BTag.constant_value(:symkey_att_sign)
|
@@ -27,6 +27,8 @@ if not defined?(BTag)
|
|
27
27
|
define_constant(:symkey_att_sign, "#.22")
|
28
28
|
|
29
29
|
define_constant(:kcv, "#.30")
|
30
|
+
|
31
|
+
define_constant(:symkey_keystore, "#.50")
|
30
32
|
end
|
31
33
|
|
32
34
|
define_constant(:compression, "#.40") do
|
@@ -44,6 +46,8 @@ if not defined?(BTag)
|
|
44
46
|
|
45
47
|
define_constant(:ecc_att_sign, "#.12")
|
46
48
|
end
|
49
|
+
|
50
|
+
define_constant(:asymkey_keystore, "#.50")
|
47
51
|
end
|
48
52
|
|
49
53
|
define_constant(:composite, "#.60") do
|
@@ -0,0 +1,74 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
module CcipherFactory
|
4
|
+
class SymKeyKeystore
|
5
|
+
include TR::CondUtils
|
6
|
+
def self.from_encoded(bin, &block)
|
7
|
+
|
8
|
+
raise SymKeyCipherError, "Block is required" if not block
|
9
|
+
|
10
|
+
ts = BinStruct.instance.struct_from_bin(bin)
|
11
|
+
from_tspec(ts, &block)
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.from_tspec(ts, &block)
|
15
|
+
|
16
|
+
sk = CcipherFactory::SymKey.from_encoded(ts.symkey_derived) do |ops|
|
17
|
+
case ops
|
18
|
+
when :password
|
19
|
+
block.call(:password)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
dec = CcipherFactory::SymKeyCipher.att_decryptor
|
24
|
+
decOut = MemBuf.new
|
25
|
+
dec.output(decOut)
|
26
|
+
dec.key = sk
|
27
|
+
dec.att_decrypt_init
|
28
|
+
dec.att_decrypt_update(ts.symkey_cipher)
|
29
|
+
dec.att_decrypt_final
|
30
|
+
|
31
|
+
CcipherFactory::SymKey.from_encoded(decOut.bytes)
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
def to_keystore(key, &block)
|
36
|
+
|
37
|
+
raise SymKeyCipherError, "Key is required" if is_empty?(key)
|
38
|
+
raise SymKeyCipherError, "Block is required" if not block
|
39
|
+
|
40
|
+
# 1. Derive session key from user password
|
41
|
+
sk = CcipherFactory::SymKeyGenerator.derive(:aes, 256) do |ops|
|
42
|
+
case ops
|
43
|
+
when :password
|
44
|
+
pass = block.call(:password)
|
45
|
+
if is_empty?(pass)
|
46
|
+
raise SymKeyCipherError, "Password is required"
|
47
|
+
end
|
48
|
+
pass
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# 2. Encrypt the given key with session key
|
53
|
+
enc = CcipherFactory::SymKeyCipher.att_encryptor
|
54
|
+
enc.mode = :gcm
|
55
|
+
enc.key = sk
|
56
|
+
|
57
|
+
encOut = MemBuf.new
|
58
|
+
enc.output(encOut)
|
59
|
+
|
60
|
+
key.attach_mode
|
61
|
+
|
62
|
+
enc.att_encrypt_init
|
63
|
+
enc.att_encrypt_update(key.encoded)
|
64
|
+
enc.att_encrypt_final
|
65
|
+
|
66
|
+
ts = BinStruct.instance.struct(:symkey_keystore)
|
67
|
+
ts.symkey_derived = sk.encoded
|
68
|
+
ts.symkey_cipher = encOut.bytes
|
69
|
+
ts.symkey = "testing"
|
70
|
+
ts.encoded
|
71
|
+
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ccipher_factory
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ian
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-03-
|
11
|
+
date: 2023-03-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: toolrack
|
@@ -146,6 +146,7 @@ files:
|
|
146
146
|
- lib/ccipher_factory/symkey_cipher/symkey_sign.rb
|
147
147
|
- lib/ccipher_factory/symkey_cipher/symkey_signer.rb
|
148
148
|
- lib/ccipher_factory/symkey_cipher/symkey_verify.rb
|
149
|
+
- lib/ccipher_factory/symkey_keystore/symkey_keystore.rb
|
149
150
|
- lib/ccipher_factory/version.rb
|
150
151
|
- run_test.rb
|
151
152
|
homepage: https://github.com/cameronian/ccipher_factory
|