class SipHash::State
Constants
- MASK_64
Public Class Methods
new(key)
click to toggle source
# File lib/siphash.rb, line 42 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 57 def apply_block(m) @v3 ^= m 2.times { compress } @v0 ^= m end
compress()
click to toggle source
# File lib/siphash.rb, line 67 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 89 def digest @v0 ^ @v1 ^ @v2 ^ @v3 end
finalize()
click to toggle source
# File lib/siphash.rb, line 84 def finalize @v2 ^= 0xff 4.times { compress } end
rotl64(num, shift)
click to toggle source
# File lib/siphash.rb, line 63 def rotl64(num, shift) ((num << shift) & MASK_64) | (num >> (64 - shift)) end