Module: Blowfish::Block

Defined in:
lib/blowfish/block.rb

Class Method Summary collapse

Class Method Details

.decrypt(b, key) ⇒ Object

Decrypt one block of data



26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/blowfish/block.rb', line 26

def self.decrypt(b, key)
  l, r = b.unpack('I>I>')
  16.step(1, -2) do |i|
    l ^= key.P[i + 1]
    r ^= f(l, key)
    r ^= key.P[i]
    l ^= f(r, key)
  end
  l ^= key.P[1]
  r ^= key.P[0]
  l, r = r, l
  [l, r].pack('I>I>')
end

.encrypt(b, key) ⇒ Object

Encrypt one block of data



11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/blowfish/block.rb', line 11

def self.encrypt(b, key)
  l, r = b.unpack('I>I>')
  (0..15).step(2) do |i|
    l ^= key.P[i]
    r ^= f(l, key)
    r ^= key.P[i + 1]
    l ^= f(r, key)
  end
  l ^= key.P[16]
  r ^= key.P[17]
  l, r = r, l
  [l, r].pack('I>I>')
end

.f(i, key) ⇒ Object



3
4
5
6
7
8
# File 'lib/blowfish/block.rb', line 3

def self.f(i, key)
  r = (key.S1[i >> 24] + key.S2[(i >> 16) & 0xff]) % (2**32)
  r ^= key.S3[(i >> 8) & 0xff]
  r += key.S4[i & 0xff]
  r % (2**32)
end