cryptic 1.0.0.beta.8 → 1.0.0.beta.9

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
  SHA1:
3
- metadata.gz: 19cd7f5683be40e75d7457f388347ab393863d1c
4
- data.tar.gz: d95bb120e657ac4c18ca6dd53c835dcf577ce64c
3
+ metadata.gz: e35bfdebfe81ab3a5f56618ad5a231e1f1db4e7d
4
+ data.tar.gz: 980067e2811eef4752ff7964ded44bbe546a59f4
5
5
  SHA512:
6
- metadata.gz: 711a1bee6d4cc23f19ba6600d6e51055e665b34fc68a44bc7fce19bad589a129df2a9fa1b4472d4a0c848ca417331aeecfad83e47dee351334223f9f3981de94
7
- data.tar.gz: d0445ac68371dc194064d75039a67a414152706dca59fe8eef8132d326bef753137287d535ebdd0053f88c8e516edb96ba599507664e8f7ba5ee9ab2e00977be
6
+ metadata.gz: a58727274617570b059f332d843236dd5c37aeb4397c2d48979e40357a07468b9beede0a5e6f8c47c1adb9e082a4f76f10c647d425fdc66983edc8b45b0b09c1
7
+ data.tar.gz: e99ecbd7df5eb8461512e93bfbed18434257284f0a457b0695678ade19b20533f6baf90dbb34ef43a7ff840262e3ba4f7a1a4e84c68ce58223143ec5e311c82c
data/bin/cryptic CHANGED
@@ -62,7 +62,7 @@ class CrypticCLI < Thor
62
62
  method_option :passphrase, aliases: %w[-p], default: nil, desc: 'The passphrase to generate the private key with'
63
63
  method_option :path, aliases: %w[-o], default: '.', desc: 'Where to place the generated keys'
64
64
  def generate
65
- keypair = Cryptic::Keypair.new(options[:passphrase], options[:bits])
65
+ keypair = Cryptic::Keypair.generate(options[:passphrase], options[:bits])
66
66
  keypair.save(options[:path])
67
67
  $stdout.puts "Generated keys saved as '#{File.expand_path(options[:path])}/cryptic_public.pem' and '#{File.expand_path(options[:path])}/cryptic_private.pem'"
68
68
  rescue Cryptic::KeyGenerationFailure => e
data/cryptic_private.pem CHANGED
@@ -1,30 +1,30 @@
1
1
  -----BEGIN RSA PRIVATE KEY-----
2
2
  Proc-Type: 4,ENCRYPTED
3
- DEK-Info: AES-256-CBC,7982FC649F5EDF03FA207CADC0B871BA
3
+ DEK-Info: AES-256-CBC,16AE475ED7BBA9616BCC2ED1DD9767BA
4
4
 
5
- 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
- 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
- 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
- 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
- qHutCCEMp0ei/p+mp/5COGKWgXsvnmIK7+KyaWq6G0k+iI/WfzGjt4qDRsa81duA
10
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- KYvM3pRVMK1LMeM8VtVbaJKtqr2bo2/FSPtxkzHqGQ9domkWuaczFiQ+Fk7/SAlF
20
- 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
- 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
- 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
- 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
- BxF0HgaZOpUgCZ2HQi+dKnb2NUhRa5wQZS3hHi6ZWwQgWyX+fQmlHvPnWqD5ZKbl
25
- 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
- +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
- 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
- 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
- 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
30
30
  -----END RSA PRIVATE KEY-----
data/cryptic_public.pem CHANGED
@@ -1,9 +1,9 @@
1
1
  -----BEGIN PUBLIC KEY-----
2
- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzOWt9cgkhxkdGs8SFlgZ
3
- BXCETwddfTg0zez/IeFiCAe8gcKQBDHa62jMbkwAg/tNAherRXqguWF9ZLm4ZTf3
4
- fxRHafj0KA83KLdLWcxaU1TsN/c2/DcDcsSwdgMKGz4YQR64RC6c98s/c0HZQzPj
5
- vEQPA/fU0LoFmGynZ9/pdEXQe6N3kzbpG8//64RxgFPco7g7HbZIVaRqyx3U4UgQ
6
- FKb+HoYDs5U+P6qz6TU4YFZbqglunptxKIjUZG7lywGPtDhD9gQf2n5n+wId4MgD
7
- xKwrj+ZQF220Mmq96LSm1a3BtiRhZInKLPn9Yr7JFh7CgVmqn2/50UVAbbdKKO4x
8
- TwIDAQAB
2
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA77uynFjDr8QenZojWGao
3
+ beqNoMB7f64QmTa7dnLgU1VDtkBn4ni3lzCXbaILvNb3fSP26qnry1vbJmxxJxd+
4
+ Vbz1Uo34+xGNmXRnQirY4PyOXrz6PhYScua/JvCr+mUo5tBz7SowG1UuH2eMWLyS
5
+ pcttlnNFaPGeuXkSuaO95ObLcXJIJgQdvFB+yccjLV218GjYR4ncYmOGXs+lxQWI
6
+ wywF2T160228JXWtNHwAfDe7cNUlgAknopMsTYuekMvDE9VB+vF0J+n+iRaQ3sOE
7
+ oqyPBuRJii3fG3h/F6sB/cOvBwd5J688u7LVRHbQJ/5IQ33WOAb36GBv13uoEv7Y
8
+ RwIDAQAB
9
9
  -----END PUBLIC KEY-----
@@ -16,7 +16,7 @@ module Cryptic
16
16
  # Initializes a Cryptic::Keypair object from a private/public keypair
17
17
  #
18
18
  # @note The passphrase isn't saved
19
- # @todo Use the Ruby 2 named parameters syntax vs. an opts hash
19
+ # @todo Code clean up between initialize and generate!
20
20
  # @todo Validate that keys are public/private
21
21
  # @param [String] private_key the private key (or file) to use
22
22
  # @param [Hash] opts additional options to configure your Keypair with
@@ -25,32 +25,41 @@ module Cryptic
25
25
  # from
26
26
  # @return [Keypair] the initialized Cryptic::Keypair object
27
27
  def initialize(private_key, opts = { public_key: nil, passphrase: nil })
28
- @private_key = OpenSSL::PKey::RSA.new(
29
- if File.exists?(private_key)
30
- File.read(private_key)
31
- else
32
- private_key
33
- end,
34
- opts[:passphrase]
35
- )
36
-
37
- unless @private_key.private?
38
- raise(
39
- Cryptic::InvalidKey,
40
- "Public key '#{private_key}' provided as a private key."
41
- )
28
+ if private_key.is_a? OpenSSL::PKey::RSA
29
+ @private_key = private_key
30
+ elsif !private_key.to_pem.eql? ''
31
+ @private_key = OpenSSL::PKey::RSA.new(
32
+ if File.exists?(private_key)
33
+ File.read(private_key)
34
+ else
35
+ private_key
36
+ end,
37
+ opts[:passphrase]
38
+ )
39
+ unless @private_key.private?
40
+ raise(
41
+ Cryptic::InvalidKey,
42
+ "Public key '#{private_key}' provided as a private key."
43
+ )
44
+ end
42
45
  end
43
46
 
44
- @public_key = OpenSSL::PKey::RSA.new(
45
- if opts[:public_key] && File.exists?(opts[:public_key])
46
- File.read(opts[:public_key])
47
- elsif opts[:public_key]
48
- opts[:public_key]
49
- else
50
- @private_key
51
- end,
52
- opts[:passphrase]
53
- ).public_key
47
+ if public_key.is_a? OpenSSL::PKey::RSA
48
+ @public_key = public_key
49
+ else
50
+ @public_key = OpenSSL::PKey::RSA.new(
51
+ if opts[:public_key] && File.exists?(opts[:public_key].to_s)
52
+ File.read(opts[:public_key])
53
+ elsif opts[:public_key]
54
+ opts[:public_key]
55
+ else
56
+ require 'pry'
57
+ binding.pry
58
+ @private_key or raise(Cryptic::KeyNotFound)
59
+ end,
60
+ opts[:passphrase]
61
+ ).public_key
62
+ end
54
63
  rescue OpenSSL::PKey::RSAError => e
55
64
  if e.message.eql? 'Neither PUB key nor PRIV key:: not enough data'
56
65
  if @private_key.nil?
@@ -73,16 +82,21 @@ module Cryptic
73
82
  # @param [Fixnum] size the amount of bits to use in your key
74
83
  # @return [Keypair] an object representing a private/public keypair
75
84
  def self.generate(passphrase = nil, size = 2048)
76
- # OPTIMIZE: There are so many hammers in here it looks like we're playing
77
- # Whack-a-mole
78
85
  # TODO: Find a better way to handle retries
79
86
  attempts ||= 0
80
87
  attempts += 1
81
88
 
82
- rsa_key = OpenSSL::PKey::RSA.new(size)
83
- cipher ||= OpenSSL::Cipher::AES256.new(:CBC)
89
+ rsa_key = OpenSSL::PKey::RSA.new(size, passphrase)
90
+ cipher = OpenSSL::Cipher::AES256.new(:CBC)
84
91
 
85
- new(rsa_key.to_pem(cipher, passphrase), { public_key: rsa_key.public_key.to_pem, passphrase: passphrase })
92
+ new(
93
+ rsa_key,
94
+ {
95
+ cipher: cipher,
96
+ public_key: rsa_key.public_key,
97
+ passphrase: passphrase
98
+ }
99
+ )
86
100
  rescue OpenSSL::PKey::RSAError => e
87
101
  if e.message =~ /^read key$/
88
102
  retry unless attempts > 1
@@ -97,19 +111,22 @@ module Cryptic
97
111
  # @todo Document what save may raise
98
112
  # @todo Update this method
99
113
  # @return [String] returns the path files were saved to
100
- def save(path = '.')
101
- if @private_key.to_pem.eql?('') || @public_key.to_pem.eql?('')
114
+ def save(path = '.', opts = { cipher: OpenSSL::Cipher::AES256.new(:CBC), passphrase: nil})
115
+ priv = @private_key.to_pem(opts[:cipher], opts[:passphrase])
116
+ pub = (opts[:public_key] || @public_key || @private_key.public_key).to_pem
117
+
118
+ if priv.eql?('') || pub.eql?('')
102
119
  raise Cryptic::KeyGenerationFailure, "The keypair was never successfully generated"
103
120
  end
104
121
 
105
122
  FileUtils.mkdir_p(File.dirname(path))
106
123
 
107
124
  File.open("#{File.expand_path(path)}/cryptic_private.pem", 'w') do |file|
108
- file.write @private_key
125
+ file.write priv
109
126
  end
110
127
 
111
128
  File.open("#{File.expand_path(path)}/cryptic_public.pem", 'w') do |file|
112
- file.write @public_key
129
+ file.write pub
113
130
  end
114
131
 
115
132
  path
@@ -1,4 +1,4 @@
1
1
  module Cryptic
2
2
  # The version of the cryptic gem
3
- VERSION = '1.0.0.beta.8'
3
+ VERSION = '1.0.0.beta.9'
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cryptic
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.beta.8
4
+ version: 1.0.0.beta.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Erran Carey