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