ccipher_factory 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
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