class SipHash::State
Constants
- MASK_64
Public Class Methods
new(key)
click to toggle source
# File lib/siphash.rb, line 64 def initialize(key) @v0 = 0x736f6d6570736575 @v1 = 0x646f72616e646f6d @v2 = 0x6c7967656e657261 @v3 = 0x7465646279746573 k0 = key.slice(0, 8).unpack('Q<')[0] k1 = key.slice(8, 8).unpack('Q<')[0] @v0 ^= k0 @v1 ^= k1 @v2 ^= k0 @v3 ^= k1 end
Public Instance Methods
apply_block(m)
click to toggle source
# File lib/siphash.rb, line 79 def apply_block(m) @v3 ^= m 2.times { compress } @v0 ^= m end
compress()
click to toggle source
# File lib/siphash.rb, line 89 def compress @v0 = (@v0 + @v1) & MASK_64 @v2 = (@v2 + @v3) & MASK_64 @v1 = rotl64(@v1, 13) @v3 = rotl64(@v3, 16) @v1 ^= @v0 @v3 ^= @v2 @v0 = rotl64(@v0, 32) @v2 = (@v2 + @v1) & MASK_64 @v0 = (@v0 + @v3) & MASK_64 @v1 = rotl64(@v1, 17) @v3 = rotl64(@v3, 21) @v1 ^= @v2 @v3 ^= @v0 @v2 = rotl64(@v2, 32) end
digest()
click to toggle source
# File lib/siphash.rb, line 111 def digest @v0 ^ @v1 ^ @v2 ^ @v3 end
finalize()
click to toggle source
# File lib/siphash.rb, line 106 def finalize @v2 ^= 0xff 4.times { compress } end
rotl64(num, shift)
click to toggle source
# File lib/siphash.rb, line 85 def rotl64(num, shift) ((num << shift) & MASK_64) | (num >> (64 - shift)) end