cryptic 1.0.0.beta.6 → 1.0.0.beta.7

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -15,4 +15,3 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
- cryptic_*.pem
data/README.md CHANGED
@@ -11,7 +11,7 @@ Just run: `gem install cryptic` or add `gem 'cryptic'` to your Gemfile.
11
11
  ### Command line
12
12
 
13
13
  ```
14
- [ecarey @ cryptic]$ cryptic
14
+ [ecarey @ cryptic]$ cryptic
15
15
  Commands:
16
16
  cryptic decrypt [PRIVATE_KEY] [ENCRYPTED_FILE] [OPTIONS] # Decrypt a file with a private key
17
17
  cryptic encrypt [PUBLIC_KEY] [TEXT_FILE] [OPTIONS] # Encrypt a file with a public key
@@ -24,22 +24,22 @@ Commands:
24
24
  ```ruby
25
25
  require 'cryptic'
26
26
 
27
- # Generate a keypair to use with a passphrase and the number of bits you'd like:
28
- keypair = Cryptic::Keypair.new('P4$SpHr4z3', 2048)
29
- keypair.save("#{ENV['HOME']}/.cryptic_keys")
27
+ # Load a keypair to use:
28
+ keypair = Cryptic::Keypair.new('cryptic_private.pem', public_key: 'cryptic_public.pem')
30
29
 
30
+ # Obtain your public/private keys from the `Cryptic::Keypair` object:
31
31
  private_key = keypair.private_key
32
32
  public_key = keypair.public_key
33
33
 
34
34
  # Encrypt a file:
35
35
  data = File.read('foo.txt')
36
- encrypted = Cryptic::EncryptedData.new(data, public_key)
36
+ encrypted = Cryptic::EncryptedData.new(data, public_key, :base64)
37
37
 
38
- # Returns an encrypted string you can save off to a file
38
+ # Returns an encrypted string you can save off to a file:
39
39
  encrypted.data
40
40
 
41
- # To return the data call decrypt on the encrypted data object w/ the private key and passphrase
42
- decrypted = encrypted.decrypt(private_key, 'P4$SpHr4z3')
41
+ # To return the data call decrypt on the encrypted data object w/ the private key and passphrase:
42
+ decrypted = encrypted.decrypt(private_key, 'P4$SpHr4z3', :base64)
43
43
  ```
44
44
  ## Contributing
45
45
 
data/bin/cryptic CHANGED
@@ -5,6 +5,10 @@
5
5
  require 'cryptic'
6
6
  require 'thor'
7
7
 
8
+ # TODO: Add support for localized descriptions
9
+ # TODO: Add support for localized alias of commands in locales that share the
10
+ # English alphabet?
11
+
8
12
  class CrypticCLI < Thor
9
13
  desc 'decrypt [PRIVATE_KEY] [ENCRYPTED_FILE] [OPTIONS]', 'Decrypt a file with a private key'
10
14
  method_option :passphrase, aliases: %w[-p], default: nil, desc: 'The passphrase to unlock the private key with'
@@ -53,7 +57,7 @@ class CrypticCLI < Thor
53
57
  end
54
58
  end
55
59
 
56
- desc 'generate [OPTIONS]', 'Generate a private/public keypair', aliases: %w[gen key-gen]
60
+ desc 'generate [OPTIONS]', 'Generate a private/public keypair'
57
61
  method_option :bits, aliases: %w[-b size], default: 2048, desc: 'The number of bits to use when generating your key'
58
62
  method_option :passphrase, aliases: %w[-p], default: nil, desc: 'The passphrase to generate the private key with'
59
63
  method_option :path, aliases: %w[-o], default: '.', desc: 'Where to place the generated keys'
@@ -0,0 +1,30 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ Proc-Type: 4,ENCRYPTED
3
+ DEK-Info: AES-256-CBC,7982FC649F5EDF03FA207CADC0B871BA
4
+
5
+ 3MXSorbMApz+QvQOB/yBrsBMdOk6sNZCmxdAVO+LAXsgifLJJuRnaJlFb7pqTSsI
6
+ bXSmDuhleIEoTMCVnThnLsWV16Aw/rYPv2hB1g8PUsiJlMMjaDep2tCgPb1RE0pH
7
+ Soq3vh5sX49TsSXPf1WTUnYnUnbdxyVaBsKaGfvxrI7Dq6RI5D6DPr7ZmP0XJkFb
8
+ xiILWriqbnTrf3gbnAEZsz+msledZ9zT1bEJJLOoGOzF2UhrHZnestDakl2mK+RS
9
+ qHutCCEMp0ei/p+mp/5COGKWgXsvnmIK7+KyaWq6G0k+iI/WfzGjt4qDRsa81duA
10
+ /f9i86aONqullGOannQr/YzTuFoURKbmG6aRJ/EDmXsEFmlritSuJRh8c956l8U5
11
+ wAYuo+fRWP2nOkEAL3z8xvDaGCX33jyGcRn8krH2xQSAgElItSmxpLVqEFfvlOUn
12
+ 5Hxw7g8z0OS+XnkiwhGMg1yrFp/e5RewAQwbyUFHf0XN9U06iVooSlPOgOptZFLK
13
+ HaRmm9rjhZbrxQf1Yb1O8B2gfu05VmKLI8sNPz/3sSYaNVTAil4f4JZ1vclac+Gr
14
+ drtD6z1llUbRK1svX7IjFvOUJZ92oblYBnSzyGsV0QzQiyu2rKyKa67/aR8Syaou
15
+ PfHGS+VoibquyYQL+YCASf7x9UZIV0X4CCj2JpE1iV0YknDcYT+MxCWA12itdmw+
16
+ 6D9fYRuroE3YX4g/md3XUnklFb/XnUHr40HxuKo3wHa6xoTvCCwooi3HmlCUsKIl
17
+ b57TlfejlbfVFYNEIDjz1rCv2FZjgB6cITNaIeoHKxGzjPtql/llnKNnjW+8z1Hj
18
+ udSTehbB7SBiZKS5rj0WHKwMmvrkzagnhSxxS4sGHH17rsxSj3YeXG2ABKhz1ark
19
+ KYvM3pRVMK1LMeM8VtVbaJKtqr2bo2/FSPtxkzHqGQ9domkWuaczFiQ+Fk7/SAlF
20
+ wxaLs1KlnGA5RVfuOysDr+EbqbDvoABLOx0Ec0Wv5OkUmHtn7zvAxY+brQLOld8l
21
+ 9LeXwmQS4ELAdS9uuhpWlZ9Qa8/fimbBcYWU/EVlBEw65avtZ/O9T1n2LKnd9WSZ
22
+ fVioG86EE1MXqEX9KOWRu2VKMoemjwq5AJBENyHyofPQN13UH4uHiYHe+DghrAw4
23
+ WYX7cgKHh1fuRHrdqwTfScUNMWQWamQj4I5Uny1aWtGhPrPyoW2lfMIe/CzF2O0O
24
+ BxF0HgaZOpUgCZ2HQi+dKnb2NUhRa5wQZS3hHi6ZWwQgWyX+fQmlHvPnWqD5ZKbl
25
+ rKnZiUX9AVWNsIri/Xfe4p+3sT4Bq0wGrQc22jjWbeSvbRkOxGt7iXbrUwQhGq/V
26
+ +MOIDiXBlQZBVan98cKQYYZCILLKsMnP0QUHyGOU2r6oI+bi31dpTE5/nYA8MULS
27
+ sGN33v8v3OQtTA0LAOb3VTl9FYshpfuYkR1SYYM5ft2rhleybWRguF3eduxO0GmB
28
+ WJ5xYWbU7FAoYIox2mg8zehL8n71aiH8LOPPkAzhn+NNP67GdVgvIeRgxPB4fdw1
29
+ sVlcWO7yFTz1PO8XS21RJntidcEUzndjlC4OPksjWUobz08m8ZpPyHLh+8xDJxlp
30
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,9 @@
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
9
+ -----END PUBLIC KEY-----
@@ -46,6 +46,7 @@ module Cryptic
46
46
  # Creates a new encrypted data object from an encrypted data string
47
47
  #
48
48
  # @param [String] data the encrypted data to load
49
+ # @param [Symbol] encoding the encoding to use
49
50
  # @return [EncryptedData] an encrypted data object
50
51
  def self.load(data, encoding = :none)
51
52
  new(data, nil, encoding)
@@ -0,0 +1,9 @@
1
+ module Cryptic
2
+ module Exceptions
3
+ # A exception to throw if the the passphrase for a private key was entered
4
+ # incorrectly
5
+ #
6
+ # @author Erran Carey <me@errancarey.com>
7
+ class IncorrectPassphrase < ArgumentError; end
8
+ end
9
+ end
@@ -0,0 +1,8 @@
1
+ module Cryptic
2
+ module Exceptions
3
+ # A exception to throw if an invalid key was provided
4
+ #
5
+ # @author Erran Carey <me@errancarey.com>
6
+ class InvalidKey < ArgumentError; end
7
+ end
8
+ end
@@ -2,6 +2,8 @@ require 'colorize'
2
2
  require 'cryptic/exceptions/decryption_error'
3
3
  require 'cryptic/exceptions/encryption_error'
4
4
  require 'cryptic/exceptions/invalid_data'
5
+ require 'cryptic/exceptions/invalid_key'
6
+ require 'cryptic/exceptions/incorrect_passphrase'
5
7
  require 'cryptic/exceptions/key_generation_failure'
6
8
  require 'cryptic/exceptions/key_mismatch'
7
9
  require 'cryptic/exceptions/key_not_found'
@@ -8,27 +8,81 @@ module Cryptic
8
8
 
9
9
  # A class that represents a private and public keypair
10
10
  #
11
- # @!attribute [String] private_key the contents of the private key file
12
- # @!attribute [String] public_key the contents of the public key file
13
11
  # @author Erran Carey <me@errancarey.com>
14
12
  class Keypair
15
- attr_reader :private_key
16
- attr_reader :public_key
13
+ attr_accessor :private_key
14
+ attr_accessor :public_key
15
+
16
+ # Initializes a Cryptic::Keypair object from a private/public keypair
17
+ #
18
+ # @note The passphrase isn't saved
19
+ # @todo Use the Ruby 2 named parameters syntax vs. an opts hash
20
+ # @todo Validate that keys are public/private
21
+ # @param [String] private_key the private key (or file) to use
22
+ # @param [Hash] opts additional options to configure your Keypair with
23
+ # @option opts [String] public_key the public key (or file) to use
24
+ # @option opts [String] passphrase the passphrase to determine the public key
25
+ # from
26
+ # @return [Keypair] the initialized Cryptic::Keypair object
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
+ )
42
+ end
43
+
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
54
+ rescue OpenSSL::PKey::RSAError => e
55
+ if e.message.eql? 'Neither PUB key nor PRIV key:: not enough data'
56
+ if @private_key.nil?
57
+ raise Cryptic::InvalidKey, "Invalid private key: #{private_key}"
58
+ elsif @public_key.nil?
59
+ raise Cryptic::InvalidKey, "Invalid public key: #{public_key}"
60
+ end
61
+ elsif e.message.eql? 'Neither PUB key nor PRIV key:: nested asn1 error'
62
+ raise Cryptic::IncorrectPassphrase, "Unable to open private key:
63
+ '#{private_key}'. was the passphrase valid?"
64
+ else
65
+ raise e
66
+ end
67
+ end
68
+
17
69
  # Creates a keypair to be saved with #save
18
70
  #
71
+ # @note The passphrase isn't saved
72
+ # @param [String] passphrase the passphrase to give the private key
19
73
  # @param [Fixnum] size the amount of bits to use in your key
20
74
  # @return [Keypair] an object representing a private/public keypair
21
- def initialize(passphrase = nil, size = 2048)
22
- @saved = false
23
-
75
+ 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
+ # TODO: Find a better way to handle retries
24
79
  attempts ||= 0
25
80
  attempts += 1
26
81
 
27
82
  rsa_key = OpenSSL::PKey::RSA.new(size)
28
- cipher = OpenSSL::Cipher::AES256.new(:CBC)
83
+ cipher ||= OpenSSL::Cipher::AES256.new(:CBC)
29
84
 
30
- @private_key = rsa_key.to_pem(cipher, passphrase)
31
- @public_key = rsa_key.public_key.to_pem
85
+ new(rsa_key.to_pem(cipher, passphrase), rsa_key.public_key.to_pem)
32
86
  rescue OpenSSL::PKey::RSAError => e
33
87
  if e.message =~ /^read key$/
34
88
  retry unless attempts > 1
@@ -41,9 +95,10 @@ module Cryptic
41
95
  #
42
96
  # @param [String] path the path to save the keypair into
43
97
  # @todo Document what save may raise
98
+ # @todo Update this method
44
99
  # @return [String] returns the path files were saved to
45
100
  def save(path = '.')
46
- if @private_key.to_s.eql?('') || @public_key.to_s.eql?('')
101
+ if @private_key.to_pem.eql?('') || @public_key.to_pem.eql?('')
47
102
  raise Cryptic::KeyGenerationFailure, "The keypair was never successfully generated"
48
103
  end
49
104
 
@@ -57,7 +112,6 @@ module Cryptic
57
112
  file.write @public_key
58
113
  end
59
114
 
60
- @saved = true
61
115
  path
62
116
  end
63
117
  end
@@ -1,4 +1,4 @@
1
1
  module Cryptic
2
2
  # The version of the cryptic gem
3
- VERSION = '1.0.0.beta.6'
3
+ VERSION = '1.0.0.beta.7'
4
4
  end
@@ -0,0 +1,50 @@
1
+ # Cryptic [![Build Status](https://secure.travis-ci.org/ipwnstuff/cryptic.png)](http://travis-ci.org/ipwnstuff/cryptic) [![Dependency Status](https://gemnasium.com/ipwnstuff/cryptic.png)](https://gemnasium.com/ipwnstuff/cryptic)
2
+ A Ruby gem for public key encryption, private key decryption, and generating key pairs.
3
+
4
+ ## Documentation
5
+ http://www.rubydoc.info/github/ipwnstuff/cryptic
6
+
7
+ ## Installation
8
+ Just run: `gem install cryptic` or add `gem 'cryptic'` to your Gemfile.
9
+
10
+ ## Usage
11
+ ### Command line
12
+
13
+ ```
14
+ [ecarey @ cryptic]$ cryptic
15
+ Commands:
16
+ cryptic decrypt [PRIVATE_KEY] [ENCRYPTED_FILE] [OPTIONS] # Decrypt a file with a private key
17
+ cryptic encrypt [PUBLIC_KEY] [TEXT_FILE] [OPTIONS] # Encrypt a file with a public key
18
+ cryptic generate [OPTIONS] # Generate a private/public keypair
19
+ cryptic help [COMMAND] # Describe available commands or one specific command
20
+ ```
21
+
22
+ ### Ruby
23
+
24
+ ```ruby
25
+ require 'cryptic'
26
+
27
+ # Load a keypair to use:
28
+ keypair = Cryptic::Keypair.new('cryptic_private.pem', public_key: 'cryptic_public.pem')
29
+
30
+ # Obtain your public/private keys from the `Cryptic::Keypair` object:
31
+ private_key = keypair.private_key
32
+ public_key = keypair.public_key
33
+
34
+ # Encrypt a file:
35
+ data = File.read('foo.txt')
36
+ encrypted = Cryptic::EncryptedData.new(data, public_key, :base64)
37
+
38
+ # Returns an encrypted string you can save off to a file:
39
+ encrypted.data
40
+
41
+ # To return the data call decrypt on the encrypted data object w/ the private key and passphrase:
42
+ decrypted = encrypted.decrypt(private_key, 'P4$SpHr4z3', :base64)
43
+ ```
44
+ ## Contributing
45
+
46
+ 1. Fork it
47
+ 2. Create your feature branch (`git checkout -b feature/my-awesome-feature`)
48
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
49
+ 4. Push to the branch (`git push origin feature/my-awesome-feature`)
50
+ 5. Create new Pull Request
@@ -0,0 +1,52 @@
1
+ # Cryptic [![Estado de Creación](https://secure.travis-ci.org/ipwnstuff/cryptic.png)](http://travis-ci.org/ipwnstuff/cryptic) [![Estado de Dependencia](https://gemnasium.com/ipwnstuff/cryptic.png)](https://gemnasium.com/ipwnstuff/cryptic)
2
+ Una Ruby gem para cifrar datos con su clave pública, descifrarlos con su clave privada, y generar nuevas claves.
3
+
4
+ ## Documentación
5
+ Ahorita no hay ninguna documentación española.
6
+ En Inglès: http://www.rubydoc.info/github/ipwnstuff/cryptic
7
+
8
+ ## Instalación
9
+ Sólo corra `gem install cryptic` o añada `gem 'cryptic'` a su `Gemfile`.
10
+ También se puede descargar desde el código fuente.
11
+
12
+ ## Uso
13
+ ### Línea de Comandos
14
+
15
+ ```
16
+ [ecarey @ cryptic]$ cryptic
17
+ Commands:
18
+ cryptic decrypt [CLAVE_PRIVADA] [FICHERO_CIFRADO] [OPCIONES] # Descifrar una fichero con una clave privada
19
+ cryptic encrypt [CLAVE_PUBLICO] [FICHERO_TEXTO] [OPTIONS] # Cifrar una fichero con una clave pública
20
+ cryptic generate [OPTIONS] # Generar nuevas claves
21
+ cryptic help [COMMAND] # Describe available commands or one specific command
22
+ ```
23
+
24
+ ### Ruby
25
+
26
+ ```ruby
27
+ require 'cryptic'
28
+
29
+ # Para cargar las claves existantes:
30
+ claves = Cryptic::Keypair.new('cryptic_private.pem', public_key: 'cryptic_public.pem')
31
+
32
+ # Obtener las claves desde el objeto `Cryptic::Keypair`:
33
+ clave_privada = claves.private_key
34
+ clave_publica = claves.public_key
35
+
36
+ # Cifrar un fichero:
37
+ datos = File.read('foo.txt')
38
+ cifrado = Cryptic::EncryptedData.new(datos, clave_publica, :base64)
39
+
40
+ # Retornar los datos cifrados:
41
+ cifrado.data
42
+
43
+ # Descifrarlos con su clave privada y su contraseña:
44
+ descifrado = cifrado.decrypt(clave_privada, 'P4$SpHr4z3', :base64)
45
+ ```
46
+
47
+ ## Contribuyendo
48
+ 1. Bifurcarlo
49
+ 2. Crear un rama de la característica en Inglés (`git checkout -b feature/my-awesome-feature`)
50
+ 3. Comfirmar su cambios con un mensaje Inglés (`git commit -am 'Add some feature'`)
51
+ 4. Empujar a su rama (`git push origin feature/my-awesome-feature`)
52
+ 5. Crear un nuevo Pull Request
@@ -0,0 +1,79 @@
1
+ require 'cryptic/keypair'
2
+
3
+ describe Cryptic::Keypair do
4
+ let :private_keys do
5
+ keys = [
6
+ './cryptic_private.pem',
7
+ File.read('./cryptic_private.pem')
8
+ ]
9
+
10
+ # Repeat the keys for zipping
11
+ keys *= 2
12
+ end
13
+
14
+ let :public_keys do
15
+ keys = [
16
+ './cryptic_public.pem',
17
+ File.read('./cryptic_public.pem')
18
+ ]
19
+
20
+ # Repeat the keys in opposing order for zipping
21
+ keys += keys.reverse
22
+ end
23
+
24
+ it 'should be able to create a keypair from a private key' do
25
+ private_keys.uniq.each do |private_key|
26
+ expect {
27
+ Cryptic::Keypair.new(
28
+ private_key,
29
+ passphrase: 'P4$SpHr4z3'
30
+ )
31
+ }.to_not raise_error
32
+ end
33
+ end
34
+
35
+ it 'should be able to create a keypair from a private key and a public key' do
36
+ private_keys.zip(public_keys).each do |private_key, public_key|
37
+ expect {
38
+ Cryptic::Keypair.new(
39
+ private_key,
40
+ passphrase: 'P4$SpHr4z3',
41
+ public_key: public_key
42
+ )
43
+ }.to_not raise_error
44
+ end
45
+ end
46
+
47
+ # TODO: Add custom error classes below once implemented
48
+
49
+ it 'should not be able to create a keypair with an empty private key' do
50
+ expect { Cryptic::Keypair.new('') }.to raise_error
51
+ expect { Cryptic::Keypair.new(nil) }.to raise_error
52
+ end
53
+
54
+ it 'should not be able to create a keypair with an invalid private key' do
55
+ public_keys.uniq.each do |public_key|
56
+ expect {
57
+ Cryptic::Keypair.new(
58
+ public_key,
59
+ passphrase: 'P4$SpHr4z3'
60
+ )
61
+ }.to raise_error
62
+
63
+ expect { Cryptic::Keypair.new(public_key) }.to raise_error
64
+ end
65
+
66
+ expect { Cryptic::Keypair.new('invalid') }.to raise_error
67
+ end
68
+
69
+ it 'should not be able to create a keypair with an invalid passphrase' do
70
+ private_keys.uniq.each do |private_key|
71
+ expect {
72
+ Cryptic::Keypair.new(
73
+ private_key,
74
+ passphrase: 'BadPassphrase'
75
+ )
76
+ }.to raise_error
77
+ end
78
+ end
79
+ 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.6
4
+ version: 1.0.0.beta.7
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-06 00:00:00.000000000 Z
12
+ date: 2013-07-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: colorize
@@ -139,19 +139,25 @@ files:
139
139
  - Thorfile
140
140
  - bin/cryptic
141
141
  - cryptic.gemspec
142
+ - cryptic_private.pem
143
+ - cryptic_public.pem
142
144
  - lib/cryptic.rb
143
145
  - lib/cryptic/encrypted_data.rb
144
146
  - lib/cryptic/exceptions.rb
145
147
  - lib/cryptic/exceptions/decryption_error.rb
146
148
  - lib/cryptic/exceptions/encryption_error.rb
149
+ - lib/cryptic/exceptions/incorrect_passphrase.rb
147
150
  - lib/cryptic/exceptions/invalid_data.rb
151
+ - lib/cryptic/exceptions/invalid_key.rb
148
152
  - lib/cryptic/exceptions/key_generation_failure.rb
149
153
  - lib/cryptic/exceptions/key_mismatch.rb
150
154
  - lib/cryptic/exceptions/key_not_found.rb
151
155
  - lib/cryptic/exceptions/unsupported_encoding.rb
152
156
  - lib/cryptic/keypair.rb
153
157
  - lib/cryptic/version.rb
154
- - spec/default_spec.rb
158
+ - locales/files/README.en.md
159
+ - locales/files/README.es.md
160
+ - spec/keypair_spec.rb
155
161
  homepage: https://github.com/ipwnstuff/cryptic
156
162
  licenses:
157
163
  - MIT
@@ -167,7 +173,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
167
173
  version: '0'
168
174
  segments:
169
175
  - 0
170
- hash: -2304157530869896599
176
+ hash: -1776955629962300703
171
177
  required_rubygems_version: !ruby/object:Gem::Requirement
172
178
  none: false
173
179
  requirements:
@@ -182,5 +188,5 @@ specification_version: 3
182
188
  summary: A quick way to encrypt data using public keys. Only people with the private
183
189
  key can decrypt said data.
184
190
  test_files:
185
- - spec/default_spec.rb
191
+ - spec/keypair_spec.rb
186
192
  has_rdoc:
data/spec/default_spec.rb DELETED
@@ -1 +0,0 @@
1
- # TODO: Implement tests