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: 4a83a5b71fd4c1ed7974bd951d3ecb84b01ca18060a323a7bf76d25d9c63ca3a
4
- data.tar.gz: b5ef665bf09048f3c2c8534beafb13e7624d0f18403292ab7122d02b7735ef3c
3
+ metadata.gz: bb2ce71c27c1cf55de4c778e9acd14c66eb67776886877ba62fc07dfa9e7d291
4
+ data.tar.gz: ab03a998acdad1131b9fe94d969f1854105767a2a81ac80c003e17967da2b5db
5
5
  SHA512:
6
- metadata.gz: f96c5d460d68e4a70300861d7e94e8a0abc7d0b86b207d50763caef2099470cc8e4da26ea523b3bd8a5d3224724d4a33d2043f66d6d2273c67b90dddbe3709b0
7
- data.tar.gz: 2b2e4585e99cd7c1ecea2b07ebf4dadfa90111a3c17763c64684483d19ab6e9f476fa6ce4049ce014708ff4ae8b9fefde203debac21fe37c96f4737fee9ef8f5
6
+ metadata.gz: 4ae234edf1e0ca9c126600c8f5813950645912dbd400171bea2b2e911b7c5db18f76252636d4a699cbccc10b8ee281cc7f76236bbbf48831c1d2a4ab8f679f58
7
+ data.tar.gz: 85e8d6d06350ce23c78d649f94662c8a8bf2dbaa815c7f566742bed79037746c7f766d599022543459a94415f1ff5930443a0c1ed523543b8d53ba3bd5293d25
data/.release_history.yml CHANGED
@@ -2,3 +2,5 @@
2
2
  ccipher_factory:
3
3
  - :version: 0.1.0
4
4
  :timestamp: 1660211506.8015714
5
+ - :version: 0.1.1
6
+ :timestamp: 1678183843.7795694
@@ -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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CcipherFactory
4
- VERSION = "0.1.1"
4
+ VERSION = "0.1.2"
5
5
  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.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-07 00:00:00.000000000 Z
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