cryptify 0.0.1 → 0.0.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
  SHA1:
3
- metadata.gz: 12ff2d1a0ee63b491dfbcbb9fc15b9b73399efb0
4
- data.tar.gz: 33bd2ece291e0e59e285983a0ff7f2832e62cf57
3
+ metadata.gz: 5d199af44df145429bd4b0fc5b35f54c64f9c25a
4
+ data.tar.gz: e7157ef88b167976c2941f65d9799ad433cdd086
5
5
  SHA512:
6
- metadata.gz: b997e9368027cf33a7f34f934741f47c27911383d6c55ce0d61f6dda73e7ac37da10d3908b8a250d747cccfcdb0506b7a0fb5816ec529b62b6fe78f933d1a5c1
7
- data.tar.gz: 2b426c829cdd182eee6a5dd7f68667df36b7c54a4857cb864f77ad1d68cee156eb2d712ecf598949842067a8573f792fc660f0a8fba2e10cec0d58f9af61c1b0
6
+ metadata.gz: 84dd0654015cae58eb810ddd02f38628158260bd6cd6dbf03090822aac08b5a82a5cf2fb4521ef72a5e3045893fa5194ab51ee1fca927561ec81bf811c6d5455
7
+ data.tar.gz: c5764003c196130abf920c1fb8311128be61cd07713fa83bbf952f526ac02707cede394d5767b394dd19b938622eeef5ecd91ebbe89288a70fcfc90158b7243e
data/Rakefile CHANGED
@@ -1,12 +1,5 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "rake/testtask"
3
3
 
4
- # Runner.
5
- Rake::TestTask.new do |t|
6
- t.libs << "test"
7
- t.test_files = FileList["test/**/*_test.rb"]
8
- t.verbose = true
9
- end
10
-
11
- # Default task.
12
- # task default: :test
4
+ # RSpect tasks.
5
+ Dir.glob("tasks/**/*.rake").each(&method(:import))
@@ -9,7 +9,8 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["Pablo Vallejo"]
10
10
  spec.email = ["pabloninety@gmail.com"]
11
11
  spec.summary = %q{RSA implementation.}
12
- spec.description = %q{Simple RSA encoder and decoder}
12
+ spec.description = %q{Simple RSA encoder and decoder implementation.
13
+ NOTE: this gem is not intended to be used in production.}
13
14
  spec.homepage = ""
14
15
  spec.license = "MIT"
15
16
 
@@ -20,4 +21,6 @@ Gem::Specification.new do |spec|
20
21
 
21
22
  spec.add_development_dependency "bundler", "~> 1.7"
22
23
  spec.add_development_dependency "rake", "~> 10.0"
24
+ # spec.add_development_dependency "rspec", ">= 3.1.0"
25
+ spec.add_development_dependency "rspec", "~> 3.1", ">= 3.1.0"
23
26
  end
@@ -1,4 +1,5 @@
1
1
  require "cryptify/version"
2
+ require 'prime'
2
3
 
3
4
  module Cryptify
4
5
 
@@ -6,10 +7,123 @@ module Cryptify
6
7
  # RSA implementation class.
7
8
  #
8
9
  class Rsa
9
- def self.debug
10
- puts 'Dummy output from Rsa::debug'
10
+
11
+ #
12
+ # Attributes used.
13
+ #
14
+ # @p, @q
15
+ # Random prime numbers.
16
+ #
17
+ # @e
18
+ # Public exponent
19
+ #
20
+ # @n
21
+ # @p and @q computation
22
+ #
23
+ # @d
24
+ # Inverse multiplicative
25
+ #
26
+
27
+
28
+ #
29
+ # Construtor.
30
+ #
31
+ def initialize
32
+
33
+ prime_list = Prime.take(100)
34
+
35
+ # Generate p and q
36
+ @p = prime_list.sample
37
+ prime_list.delete(@p)
38
+ @q = prime_list.sample
39
+
40
+ # Compute n.
41
+ @n = @p * @q
42
+
43
+ # 1.3 Calculate `z`.
44
+ @z = (@p - 1) * (@q - 1)
45
+
46
+ # 1.4 Calculate coprime.
47
+ @z.downto(0) do |i|
48
+ if self.is_coprime(i, @z)
49
+ @e = i; break;
50
+ end
51
+ end
52
+
53
+ # 1.5 Modular inverse
54
+ @d = modinv(@e, @z)
55
+
11
56
  end
12
- end
13
57
 
58
+
59
+ #
60
+ # Encrypt a message.
61
+ #
62
+ def encrypt(message)
63
+
64
+ # Represent the message as a positive integer.
65
+ # message = 29
66
+
67
+ # Compute the ciphertext c to b.
68
+ (message ** @e) % @n
69
+ end
70
+
71
+
72
+ #
73
+ # Decrypt message.
74
+ #
75
+ def decrypt(encrypted_message)
76
+
77
+ # Uses his private key (n, d) to compute:
78
+ (encrypted_message ** @d) % @n
79
+
80
+ end
81
+
82
+
83
+ #
84
+ # Checks whether `a` and `b` are coprime.
85
+ #
86
+ def is_coprime(a, b)
87
+
88
+ # Cycle from 2 until the smaller number of a and b.
89
+ 2.upto([a, b].min) do |i|
90
+
91
+ # If both modulus with `i` are equal to `0`
92
+ # then, the numbers are no coprime.
93
+ if a % i == b % i && a % i == 0
94
+ return false
95
+ end
96
+ end
97
+
98
+ return true
99
+ end
100
+
101
+
102
+ #
103
+ # Returns a triple (g, x, y), such that ax + by = g = gcd(a, b).
104
+ # Assumes a, b >= 0, and that at least one of them is > 0.
105
+ # Bounds on output values: |x|, |y| < [a, b].max
106
+ #
107
+ def egcd(a, b)
108
+
109
+ if a == 0
110
+ return [b, 0, 1]
111
+ else
112
+ g, y, x = egcd(b % a, a)
113
+ return [g, x - (b / a) * y, y]
114
+ end
115
+
116
+ end
117
+
118
+ #
119
+ # Modular inverse.
120
+ #
121
+ def modinv(a, m)
122
+ g, x, y = self.egcd(a, m)
123
+ return g != 1 ? nil : x % m
124
+ end
125
+
126
+
127
+ end
14
128
  end
15
129
 
@@ -1,3 +1,3 @@
1
1
  module Cryptify
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -0,0 +1,40 @@
1
+ require "spec_helper"
2
+
3
+
4
+ describe Cryptify do
5
+ subject { Cryptify.new }
6
+
7
+ describe '#Process' do
8
+
9
+ it 'Should pass' do
10
+ expect('debug').to eq 'debug'
11
+
12
+ # RSA tests.
13
+ RSA = Cryptify::Rsa.new
14
+
15
+ puts 'Encryption of text'
16
+ # puts KCS1.i2osp(encrypt_integer(PKCS1.os2ip(plaintext), options))
17
+
18
+ puts RSA.inspect
19
+
20
+ # puts 'Public keys'
21
+ # puts '-----------'
22
+ # puts RSA.get_public_keys
23
+
24
+ puts ''
25
+ puts 'Encryped message'
26
+ puts '-----------'
27
+ encrypted_message = RSA.encrypt(33)
28
+ puts encrypted_message
29
+
30
+ puts ''
31
+ puts 'Decrypted message'
32
+ puts '------------'
33
+ puts RSA.decrypt(encrypted_message)
34
+
35
+
36
+ end
37
+
38
+ end
39
+
40
+ end
@@ -0,0 +1 @@
1
+ require "cryptify"
@@ -0,0 +1,3 @@
1
+ require "rspec/core/rake_task"
2
+
3
+ RSpec::Core::RakeTask.new(:spec)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cryptify
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pablo Vallejo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-15 00:00:00.000000000 Z
11
+ date: 2014-11-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,7 +38,29 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
- description: Simple RSA encoder and decoder
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.1'
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: 3.1.0
51
+ type: :development
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - "~>"
56
+ - !ruby/object:Gem::Version
57
+ version: '3.1'
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 3.1.0
61
+ description: |-
62
+ Simple RSA encoder and decoder implementation.
63
+ NOTE: this gem is not intended to be used in production.
42
64
  email:
43
65
  - pabloninety@gmail.com
44
66
  executables: []
@@ -53,8 +75,9 @@ files:
53
75
  - cryptify.gemspec
54
76
  - lib/cryptify.rb
55
77
  - lib/cryptify/version.rb
56
- - test/cryptify_test.rb
57
- - test/test_helper.rb
78
+ - spec/cryptify_spec.rb
79
+ - spec/spec_helper.rb
80
+ - tasks/rspec.rake
58
81
  homepage: ''
59
82
  licenses:
60
83
  - MIT
@@ -79,6 +102,4 @@ rubygems_version: 2.2.2
79
102
  signing_key:
80
103
  specification_version: 4
81
104
  summary: RSA implementation.
82
- test_files:
83
- - test/cryptify_test.rb
84
- - test/test_helper.rb
105
+ test_files: []
@@ -1,9 +0,0 @@
1
- require "test_helper"
2
-
3
- class CryptifyTest < Test::Unit::TestHelper
4
-
5
- def test_version
6
- assert_equal "0.0.1", Cryptify::VERSION
7
- end
8
-
9
- end
@@ -1,2 +0,0 @@
1
- require "test/unit"
2
- require "cryptify"