Class: Crypt::XXTEA
- Inherits:
-
Object
- Object
- Crypt::XXTEA
- 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 |