Class: WebPackage::MICE

Inherits:
Object
  • Object
show all
Includes:
Helpers
Defined in:
lib/web_package/mice.rb

Overview

Merkle Integrity Content Encoding tools.ietf.org/id/draft-thomson-http-mice-03.html

Constant Summary collapse

CHUNK_SIZE =

bytes

2**14

Instance Method Summary collapse

Instance Method Details

#encode(text) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/web_package/mice.rb', line 9

def encode(text)
  num_parts = text.bytesize.fdiv(CHUNK_SIZE).ceil

  chunks = []
  proofs = []

  num_parts.times do |i|
    delimeter = i.zero? && "\x00" || "\x01"
    ri = num_parts - i - 1

    chunks << force_bin(text.byteslice(ri * CHUNK_SIZE, CHUNK_SIZE))
    proofs << digest("#{chunks.last}#{proofs.last}#{delimeter}")
  end

  chunks << [CHUNK_SIZE].pack('Q>')

  return proofs.pop, chunks.zip(proofs).flatten.reverse!.join
end