kingdom 0.1.0 → 0.1.1

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: 3b20a57126bd3b9df639b3980b9b164a75a5827c32ab2465a987d5e01f331abc
4
- data.tar.gz: 45a25f756a1a7371029d7781a9e070a8be25257b510eb64bc4d6d9e2683aa1b3
3
+ metadata.gz: 2f9d2f54fa9bf5796b92198195a91b8ac918fc5a83592715a33c808608801232
4
+ data.tar.gz: 19a90bbe41e91a3a07328441922147ce187adbec2a40fc8e4d580e4620c86647
5
5
  SHA512:
6
- metadata.gz: 1625758079dcc8ab760e706d0fb15ccbf448865cdc306da3ba6c47df363e07dcdad5244412bd37694db77af41672258602e9b1d62067ee2106d144ac6380dfe5
7
- data.tar.gz: 5113c2e14073a6ad9bd36fd233592279f37fa70625ed6086d6496c8c06c6f566802cda8447a17a7a20cbb059b5120ab0a4e7ac74fbde8a30a751109531db0030
6
+ metadata.gz: 0aa4fed59fe20af8083a9df2d14befbf41d85f2bb943ddc873a1dcad7a32448b16dae901f1108ac41f882ea9e17b5fc69e3a4b78ce0a555b4ad35084b8904ee5
7
+ data.tar.gz: 4d9d2727c894dfe186e3cb6bb6dd96f34d498f1114f348308b389955032fb84f5e3a2f3f967e3959b9523dc5b17c9e693441a688726902230ee4c412e736c135
data/Gemfile.lock ADDED
@@ -0,0 +1,29 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ kingdom (0.1.0)
5
+ base64
6
+ openssl
7
+ pry
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ base64 (0.1.1)
13
+ coderay (1.1.3)
14
+ method_source (1.1.0)
15
+ openssl (3.0.1)
16
+ pry (0.15.2)
17
+ coderay (~> 1.1)
18
+ method_source (~> 1.0)
19
+ rake (13.0.6)
20
+
21
+ PLATFORMS
22
+ x86_64-linux
23
+
24
+ DEPENDENCIES
25
+ kingdom!
26
+ rake (~> 13.0)
27
+
28
+ BUNDLED WITH
29
+ 2.3.15
data/kingdom-0.1.0.gem ADDED
Binary file
@@ -0,0 +1,54 @@
1
+ require 'base64'
2
+
3
+ module Kingdom
4
+ @@CIPHER = 'AES-256-CBC'
5
+
6
+ def self.cipher *c
7
+ if c[0]
8
+ @@CIPHER = c[0]
9
+ else
10
+ OpenSSL::Cipher.new(@@CIPHER)
11
+ end
12
+ end
13
+
14
+ def self.encode s
15
+ Base64.strict_encode64(s)
16
+ end
17
+
18
+ def self.decode s
19
+ Base64.strict_decode64(s)
20
+ end
21
+
22
+ class Box
23
+ def initialize k
24
+ @key = OpenSSL::Digest::SHA256.digest(k)
25
+ end
26
+ def encrypt s
27
+ c = Kingdom.cipher
28
+ c.encrypt
29
+ c.key = @key
30
+ iv = c.random_iv
31
+ e = c.update(s) + c.final
32
+ Kingdom.encode(iv + e)
33
+ end
34
+ def << i
35
+ encrypt(i)
36
+ end
37
+ def decrypt c
38
+ d = Kingdom.decode(c)
39
+ iv = d[0..15]
40
+ e = d[16..-1]
41
+ y = Kingdom.cipher
42
+ y.decrypt
43
+ y.key = @key
44
+ y.iv = iv
45
+ y.update(e) + y.final
46
+ end
47
+ def [] i
48
+ decrypt(i)
49
+ end
50
+ end
51
+ def self.box k
52
+ Box.new(k)
53
+ end
54
+ end
@@ -0,0 +1,48 @@
1
+ require 'base64'
2
+
3
+ module Kingdom
4
+ @@CIPHER = 'AES-256-CBC'
5
+
6
+ def self.cipher *c
7
+ if c[0]
8
+ @@CIPHER = c[0]
9
+ else
10
+ OpenSSL::Cipher.new(@@CIPHER)
11
+ end
12
+ end
13
+
14
+ def self.encode s
15
+ Base64.strict_encode64(s)
16
+ end
17
+
18
+ def self.decode s
19
+ Base64.strict_decode64(s)
20
+ end
21
+
22
+ class Box
23
+ def initialize k
24
+ @key = OpenSSL::Digest::SHA256.digest(k)
25
+ end
26
+ def encrypt s
27
+ c = Kingdom.cipher
28
+ c.encrypt
29
+ c.key = @key
30
+ iv = c.random_iv
31
+ e = c.update(s) + c.final
32
+ Kingdom.encode(iv + e)
33
+ end
34
+ def decrypt c
35
+ d = Kingdom.decode(c)
36
+ iv = d[0..15]
37
+ e = d[16..-1]
38
+ y = Kingdom.cipher
39
+ y.decrypt
40
+ y.key = @key
41
+ y.iv = iv
42
+ y.update(e) + y.final
43
+ end
44
+ end
45
+ def self.box k
46
+ Box.new(k)
47
+ end
48
+ end
@@ -0,0 +1,58 @@
1
+ module Kingdom
2
+ @@SIZE = 2048
3
+ def self.size *s
4
+ if s[0]
5
+ @@SIZE = s[0]
6
+ else
7
+ @@SIZE
8
+ end
9
+ end
10
+ def self.digest
11
+ OpenSSL::Digest::SHA256.new
12
+ end
13
+ # generic ssl context
14
+ def self.context
15
+ OpenSSL::SSL::SSLContext.new
16
+ end
17
+
18
+ # Kingdom.key() #=> create new key
19
+ # Kingdom.key(key) #=> load unexported key
20
+ # Kingdom.key(key, "password") #=> load exported key
21
+ def self.key *a, &b
22
+ if a[1]
23
+ b.call(Key.new(OpenSSL::PKey::RSA.new(a[0], a[1])))
24
+ else
25
+ if a[0]
26
+ b.call(Key.new(OpenSSL::PKey::RSA.new(a[0])))
27
+ else
28
+ b.call(Key.new(OpenSSL::PKey::RSA.new(Kingdom.size)))
29
+ end
30
+ end
31
+ end
32
+
33
+ class Key
34
+ attr_reader :key
35
+ def initialize k
36
+ @key = k
37
+ @h = { private: @key.to_s, public: @key.public_key.to_s }
38
+ end
39
+ # export key with password
40
+ def lock pass, &b
41
+ b.call(@key.export(Kingdom.cipher, pass))
42
+ end
43
+ # sign document with key
44
+ def sign doc
45
+ Kingdom.encode(@key.sign(Kingdom.digest, doc))
46
+ end
47
+ # validate document with signature
48
+ def valid? sig, doc
49
+ @key.verify(Kingdom.digest, Kingdom.decode(sig), doc)
50
+ end
51
+ def [] k
52
+ @h[k]
53
+ end
54
+ def to_h
55
+ @h
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,54 @@
1
+ module Kingdom
2
+ @@SIZE = 2048
3
+ def self.size *s
4
+ if s[0]
5
+ @@SIZE = s[0]
6
+ else
7
+ @@SIZE
8
+ end
9
+ end
10
+ def self.digest
11
+ OpenSSL::Digest::SHA256.new
12
+ end
13
+ # generic ssl context
14
+ def self.context
15
+ OpenSSL::SSL::SSLContext.new
16
+ end
17
+
18
+ # Kingdom.key() #=> create new key
19
+ # Kingdom.key(key) #=> load unexported key
20
+ # Kingdom.key(key, "password") #=> load exported key
21
+ def self.key *a, &b
22
+ if a[1]
23
+ b.call(Key.new(OpenSSL::PKey::RSA.new(a[0], a[1])))
24
+ else
25
+ if a[0]
26
+ b.call(Key.new(OpenSSL::PKey::RSA.new(a[0])))
27
+ else
28
+ b.call(Key.new(OpenSSL::PKey::RSA.new(Kingdom.size)))
29
+ end
30
+ end
31
+ end
32
+
33
+ class Key
34
+ attr_reader :key
35
+ def initialize k
36
+ @key = k
37
+ end
38
+ # export key with password
39
+ def export pass, &b
40
+ b.call(@key.export(Kingdom.cipher, pass))
41
+ end
42
+ # sign document with key
43
+ def sign doc
44
+ Kingdom.encode(@key.sign(Kingdom.digest, doc))
45
+ end
46
+ # validate document with signature
47
+ def valid? sig, doc
48
+ @key.verify(Kingdom.digest, Kingdom.decode(sig), doc)
49
+ end
50
+ def to_h
51
+ { private: @key.to_s, public: @key.public_key.to_s }
52
+ end
53
+ end
54
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Kingdom
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kingdom
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Erik Olson
@@ -62,10 +62,16 @@ files:
62
62
  - CHANGELOG.md
63
63
  - CODE_OF_CONDUCT.md
64
64
  - Gemfile
65
+ - Gemfile.lock
65
66
  - LICENSE.txt
66
67
  - README.md
67
68
  - Rakefile
69
+ - kingdom-0.1.0.gem
68
70
  - lib/kingdom.rb
71
+ - lib/kingdom/box.rb
72
+ - lib/kingdom/box.rb~
73
+ - lib/kingdom/key.rb
74
+ - lib/kingdom/key.rb~
69
75
  - lib/kingdom/version.rb
70
76
  - sig/kingdom.rbs
71
77
  homepage: https://github.com/xorgnak/kingdom