Class: Crypt::XXTEA

Inherits:
Object
  • Object
show all
Defined in:
lib/crypt/xxtea.rb

Class Method Summary collapse

Class Method Details

.decrypt(str, key) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/crypt/xxtea.rb', line 82

def decrypt(str, key)
  if str.empty? then return str end
  v = str2long(str, false)
  k = str2long(key.ljust(16, "\0"), false)
  n = v.size - 1
  z = v[n]
  y = v[0]
  q = 6 + 52 / (n + 1)
  sum = (q * Delta) & 0xffffffff
  while (sum != 0)
    e = sum >> 2 & 3
    n.downto(1) { |p|
      z = v[p - 1]
      y = v[p] = (v[p] -  ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z))) & 0xffffffff
    }
    z = v[n]
    y = v[0] = (v[0] -  ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[0 & 3 ^ e] ^ z))) & 0xffffffff
    sum = (sum - Delta) & 0xffffffff
  end
  long2str(v, true)
end

.encrypt(str, key) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/crypt/xxtea.rb', line 61

def encrypt(str, key)
  if str.empty? then return str end
  v = str2long(str, true)
  k = str2long(key.ljust(16, "\0"), false)
  n = v.size - 1
  z = v[n]
  y = v[0]
  sum = 0
  (6 + 52 / (n + 1)).downto(1) { |q|
    sum = (sum + Delta) & 0xffffffff
    e = sum >> 2 & 3
    for p in (0...n)
      y = v[p + 1]
      z = v[p] = (v[p] +  ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z))) & 0xffffffff
    end
    y = v[0]
    z = v[n] = (v[n] +  ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[n & 3 ^ e] ^ z))) & 0xffffffff
  }
  long2str(v, false)
end