Module: Rsa::Encrypter

Defined in:
lib/rsa-encrypter.rb,
lib/rsa-encrypter/version.rb

Constant Summary collapse

VERSION =
"0.2.2"

Class Method Summary collapse

Class Method Details

.decrypt(message, d, n) ⇒ Object


73
74
75
76
77
78
79
# File 'lib/rsa-encrypter.rb', line 73

def self.decrypt(message, d, n)
  m = ""
  message.each do |c|
    m += (c**d % n).to_i.chr
  end  
  return m
end

.encrypt(message, e, n) ⇒ Object


49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/rsa-encrypter.rb', line 49

def self.encrypt(message, e, n)
  byte = []
  ms = []
  crypt = []
  message.each_char do |c|
    byte << c.ord
  end
  byte.each do |b|
    if b.to_s.length < 3
      ms << "0"+b.to_s
    else
      ms << b  
    end 
          
  end  
  

  ms.each do |b|
    crypt << c = b.to_i**e % n
  end

  return crypt
end

.generate_rsa(a = 5) ⇒ Object


34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/rsa-encrypter.rb', line 34

def self.generate_rsa(a=5)
  secure = [ [11,13], [61,53], [163,181], [443,463], [859,769], [1033,977] ]
  a-=1
  raise "wrong secure level: #{a+1}  please use level 1-6" if a > 5 or a < 0
  p = prime?(secure[a][0])
  q = prime?(secure[a][1])
  n = p * q
  n2 = (p-1)*(q-1)
  e = (p+q) -1 
  t = ggt(e, n2)
  d = t 
  rsa = [n, e, d]
  return rsa
end

.ggt(a, b) ⇒ Object


5
6
7
8
9
10
11
12
13
14
15
# File 'lib/rsa-encrypter.rb', line 5

def self.ggt(a, b)
  u=t=1
  v=s=0
  while b > 0 do
      q=a/b
      a, b = b, a-q*b
      u, s = s, u-q*s
      v, t = t, v-q*t
  end    
  return u
end

.prime?(x) ⇒ Boolean

Returns:

  • (Boolean)

17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/rsa-encrypter.rb', line 17

def self.prime?(x)
  if x == 0 or x == 1
    return false
  end

  i = 2
  limit = x / i
  while i < limit
    if x % i == 0
      raise "#{x} not prime"
    end
    i += 1
    limit = x / i
  end
  return x
end