module Whirlpool

Constants

VERSION

Attributes

instance[RW]

Public Class Methods

digest(str) click to toggle source
# File lib/whirlpool.rb, line 13
def self.digest(str)
  subject = str.to_s.bytes
  length_of_subject = subject.size
  input_pointer = instance.exports.allocate length_of_subject

  memory = instance.memory.uint8_view input_pointer

  length_of_subject.times do |nth|
    memory[nth] = subject[nth]
  end

  memory[length_of_subject] = 0

  output_pointer = instance.exports.whirlpool input_pointer
  memory = instance.memory.uint8_view output_pointer

  digest_result = ''
  length_of_output = 0

  memory.each_with_index do |char, _index|
    break if char.zero?

    digest_result += char.chr
    length_of_output += 1
  end

  instance.exports.deallocate(input_pointer, length_of_subject)
  instance.exports.deallocate(output_pointer, length_of_output)
  digest_result
end