mirror of
https://github.com/in3rsha/sha256-animation
synced 2024-05-03 22:26:13 +02:00
690 lines
22 KiB
Ruby
690 lines
22 KiB
Ruby
# coding: utf-8
|
|
require_relative "sha256lib.rb"
|
|
|
|
# -------
|
|
# Default
|
|
# -------
|
|
if !defined? $input
|
|
$input = "abc"
|
|
$message = $input.unpack("B*")[0] # 011000010110001001100011
|
|
$padded = padding($message)
|
|
$blocks = split($padded, 512)
|
|
|
|
# message block
|
|
$block_number = 0 # message block number
|
|
$block = $blocks[$block_number]
|
|
|
|
# message schedule
|
|
$schedule = calculate_schedule($block)
|
|
end
|
|
|
|
# Schedule (Wt)
|
|
w = $schedule
|
|
|
|
# Constants (Kt)
|
|
k = K
|
|
|
|
# Initial Hash Values
|
|
initial = IV
|
|
$hash = initial.clone
|
|
|
|
# --------
|
|
# Settings
|
|
# --------
|
|
indent = " " * 2
|
|
|
|
# ---------
|
|
# Animation
|
|
# ---------
|
|
|
|
# Start
|
|
system "clear"
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts
|
|
puts
|
|
puts
|
|
puts
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])}"
|
|
puts "#{indent}d = #{bits($hash[3])}"
|
|
puts "#{indent}e = #{bits($hash[4])}"
|
|
puts "#{indent}f = #{bits($hash[5])}"
|
|
puts "#{indent}g = #{bits($hash[6])}"
|
|
puts "#{indent}h = #{bits($hash[7])}"
|
|
delay(:normal)
|
|
|
|
# Start
|
|
system "clear"
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}W0 = #{bits(w[0])} (message schedule)"
|
|
puts
|
|
puts
|
|
puts
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])}"
|
|
puts "#{indent}d = #{bits($hash[3])}"
|
|
puts "#{indent}e = #{bits($hash[4])}"
|
|
puts "#{indent}f = #{bits($hash[5])}"
|
|
puts "#{indent}g = #{bits($hash[6])}"
|
|
puts "#{indent}h = #{bits($hash[7])}"
|
|
delay(:normal)
|
|
|
|
# Start
|
|
system "clear"
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}W0 = #{bits(w[0])} (message schedule)"
|
|
puts "#{indent}K0 = #{bits(k[0])} (constant)"
|
|
puts
|
|
puts
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])}"
|
|
puts "#{indent}d = #{bits($hash[3])}"
|
|
puts "#{indent}e = #{bits($hash[4])}"
|
|
puts "#{indent}f = #{bits($hash[5])}"
|
|
puts "#{indent}g = #{bits($hash[6])}"
|
|
puts "#{indent}h = #{bits($hash[7])}"
|
|
delay(:normal)
|
|
|
|
# Start
|
|
system "clear"
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}W0 = #{bits(w[0])} (message schedule)"
|
|
puts "#{indent}K0 = #{bits(k[0])} (constant)"
|
|
puts
|
|
puts "#{indent}T1 ="
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])}"
|
|
puts "#{indent}d = #{bits($hash[3])}"
|
|
puts "#{indent}e = #{bits($hash[4])}"
|
|
puts "#{indent}f = #{bits($hash[5])}"
|
|
puts "#{indent}g = #{bits($hash[6])}"
|
|
puts "#{indent}h = #{bits($hash[7])}"
|
|
delay(:slow)
|
|
|
|
# Start
|
|
system "clear"
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}W0 = #{bits(w[0])} (message schedule)"
|
|
puts "#{indent}K0 = #{bits(k[0])} (constant)"
|
|
puts
|
|
puts "#{indent}T1 = Σ1(e) + Ch(e, f, g) + h + K0 + W0"
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])}"
|
|
puts "#{indent}d = #{bits($hash[3])}"
|
|
puts "#{indent}e = #{bits($hash[4])}"
|
|
puts "#{indent}f = #{bits($hash[5])}"
|
|
puts "#{indent}g = #{bits($hash[6])}"
|
|
puts "#{indent}h = #{bits($hash[7])}"
|
|
delay(:slow)
|
|
|
|
# Ch(e, f, g)
|
|
system "clear"
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}W0 = #{bits(w[0])} (message schedule)"
|
|
puts "#{indent}K0 = #{bits(k[0])} (constant)"
|
|
puts
|
|
puts "#{indent}T1 = Σ1(e) + Ch(e, f, g) + h + K0 + W0"
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])}"
|
|
puts "#{indent}d = #{bits($hash[3])}"
|
|
puts "#{indent}e = #{bits($hash[4])} ->"
|
|
puts "#{indent}f = #{bits($hash[5])} ->"
|
|
puts "#{indent}g = #{bits($hash[6])} ->"
|
|
puts "#{indent}h = #{bits($hash[7])}"
|
|
delay(:normal)
|
|
|
|
# Ch(e, f, g)
|
|
system "clear"
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}W0 = #{bits(w[0])} (message schedule)"
|
|
puts "#{indent}K0 = #{bits(k[0])} (constant)"
|
|
puts
|
|
puts "#{indent}T1 = Σ1(e) + Ch(e, f, g) + h + K0 + W0"
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])}"
|
|
puts "#{indent}d = #{bits($hash[3])}"
|
|
puts "#{indent}e = #{bits($hash[4])} -> #{bits($hash[4])}"
|
|
puts "#{indent}f = #{bits($hash[5])} -> #{bits($hash[5])}"
|
|
puts "#{indent}g = #{bits($hash[6])} -> #{bits($hash[6])}"
|
|
puts "#{indent}h = #{bits($hash[7])}"
|
|
delay(:normal)
|
|
|
|
# Ch(e, f, g)
|
|
32.downto(1) do |i|
|
|
system "clear"
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}W0 = #{bits(w[0])} (message schedule)"
|
|
puts "#{indent}K0 = #{bits(k[0])} (constant)"
|
|
puts
|
|
puts "#{indent}T1 = Σ1(e) + Ch(e, f, g) + h + K0 + W0"
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])}"
|
|
puts "#{indent}d = #{bits($hash[3])} #{"▼".rjust(i, " ")}"
|
|
puts "#{indent}e = #{bits($hash[4])} -> #{bits($hash[4])}"
|
|
puts "#{indent}f = #{bits($hash[5])} -> #{bits($hash[5])} #{bits($hash[4])[i-1] == '1' ? '◄' : ' '}"
|
|
puts "#{indent}g = #{bits($hash[6])} -> #{bits($hash[6])} #{bits($hash[4])[i-1] == '0' ? '◄' : ' '}"
|
|
puts "#{indent}h = #{bits($hash[7])} #{bits(ch($hash[4], $hash[5], $hash[6]))[i-1..-1].rjust(32, " ")} Ch(e, f, g)"
|
|
delay(:fastest)
|
|
end
|
|
delay(:normal)
|
|
|
|
# Ch(e, f, g)
|
|
system "clear"
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}W0 = #{bits(w[0])} (message schedule)"
|
|
puts "#{indent}K0 = #{bits(k[0])} (constant)"
|
|
puts
|
|
puts "#{indent}T1 = Σ1(e) + Ch(e, f, g) + h + K0 + W0"
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])}"
|
|
puts "#{indent}d = #{bits($hash[3])}"
|
|
puts "#{indent}e = #{bits($hash[4])} -> #{bits($hash[4])}"
|
|
puts "#{indent}f = #{bits($hash[5])} -> #{bits($hash[5])}"
|
|
puts "#{indent}g = #{bits($hash[6])} -> #{bits($hash[6])}"
|
|
puts "#{indent}h = #{bits($hash[7])} #{bits(ch($hash[4], $hash[5], $hash[6]))} Ch(e, f, g)"
|
|
delay(:normal)
|
|
|
|
# Ch(e, f, g)
|
|
system "clear"
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}W0 = #{bits(w[0])} (message schedule)"
|
|
puts "#{indent}K0 = #{bits(k[0])} (constant)"
|
|
puts
|
|
puts "#{indent}T1 = Σ1(e) + Ch(e, f, g) + h + K0 + W0"
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])}"
|
|
puts "#{indent}d = #{bits($hash[3])}"
|
|
puts "#{indent}e = #{bits($hash[4])}"
|
|
puts "#{indent}f = #{bits($hash[5])}"
|
|
puts "#{indent}g = #{bits($hash[6])}"
|
|
puts "#{indent}h = #{bits($hash[7])} #{bits(ch($hash[4], $hash[5], $hash[6]))} Ch(e, f, g)"
|
|
delay(:normal)
|
|
|
|
# Ch(e, f, g)
|
|
system "clear"
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}W0 = #{bits(w[0])} (message schedule)"
|
|
puts "#{indent}K0 = #{bits(k[0])} (constant)"
|
|
puts
|
|
puts "#{indent}T1 = Σ1(e) + Ch(e, f, g) + h + K0 + W0"
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])}"
|
|
puts "#{indent}d = #{bits($hash[3])}"
|
|
puts "#{indent}e = #{bits($hash[4])}"
|
|
puts "#{indent}f = #{bits($hash[5])}"
|
|
puts "#{indent}g = #{bits($hash[6])} #{bits(ch($hash[4], $hash[5], $hash[6]))} Ch(e, f, g)"
|
|
puts "#{indent}h = #{bits($hash[7])}"
|
|
delay(:normal)
|
|
|
|
# Σ1(e)
|
|
system "clear"
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}W0 = #{bits(w[0])} (message schedule)"
|
|
puts "#{indent}K0 = #{bits(k[0])} (constant)"
|
|
puts
|
|
puts "#{indent}T1 = Σ1(e) + Ch(e, f, g) + h + K0 + W0"
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])}"
|
|
puts "#{indent}d = #{bits($hash[3])}"
|
|
puts "#{indent}e = #{bits($hash[4])} -> "
|
|
puts "#{indent}f = #{bits($hash[5])}"
|
|
puts "#{indent}g = #{bits($hash[6])} #{bits(ch($hash[4], $hash[5], $hash[6]))} Ch(e, f, g)"
|
|
puts "#{indent}h = #{bits($hash[7])}"
|
|
delay(:fast)
|
|
|
|
# Σ1(e)
|
|
system "clear"
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}W0 = #{bits(w[0])} (message schedule)"
|
|
puts "#{indent}K0 = #{bits(k[0])} (constant)"
|
|
puts
|
|
puts "#{indent}T1 = Σ1(e) + Ch(e, f, g) + h + K0 + W0"
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])}"
|
|
puts "#{indent}d = #{bits($hash[3])}"
|
|
puts "#{indent}e = #{bits($hash[4])} -> #{bits($hash[4])}"
|
|
puts "#{indent}f = #{bits($hash[5])}"
|
|
puts "#{indent}g = #{bits($hash[6])} #{bits(ch($hash[4], $hash[5], $hash[6]))} Ch(e, f, g)"
|
|
puts "#{indent}h = #{bits($hash[7])}"
|
|
delay(:fast)
|
|
|
|
# Σ1(e)
|
|
system "clear"
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}W0 = #{bits(w[0])} (message schedule)"
|
|
puts "#{indent}K0 = #{bits(k[0])} (constant)"
|
|
puts
|
|
puts "#{indent}T1 = Σ1(e) + Ch(e, f, g) + h + K0 + W0"
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])}"
|
|
puts "#{indent}d = #{bits($hash[3])} #{bits($hash[4])}"
|
|
puts "#{indent}e = #{bits($hash[4])} -> #{bits($hash[4])}"
|
|
puts "#{indent}f = #{bits($hash[5])}"
|
|
puts "#{indent}g = #{bits($hash[6])} #{bits(ch($hash[4], $hash[5], $hash[6]))} Ch(e, f, g)"
|
|
puts "#{indent}h = #{bits($hash[7])}"
|
|
delay(:fast)
|
|
|
|
# Σ1(e)
|
|
system "clear"
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}W0 = #{bits(w[0])} (message schedule)"
|
|
puts "#{indent}K0 = #{bits(k[0])} (constant)"
|
|
puts
|
|
puts "#{indent}T1 = Σ1(e) + Ch(e, f, g) + h + K0 + W0"
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])} #{bits($hash[4])}"
|
|
puts "#{indent}d = #{bits($hash[3])} #{bits($hash[4])}"
|
|
puts "#{indent}e = #{bits($hash[4])} -> #{bits($hash[4])}"
|
|
puts "#{indent}f = #{bits($hash[5])}"
|
|
puts "#{indent}g = #{bits($hash[6])} #{bits(ch($hash[4], $hash[5], $hash[6]))} Ch(e, f, g)"
|
|
puts "#{indent}h = #{bits($hash[7])}"
|
|
delay(:normal)
|
|
|
|
# Σ1(e)
|
|
6.times do |i|
|
|
system "clear"
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}W0 = #{bits(w[0])} (message schedule)"
|
|
puts "#{indent}K0 = #{bits(k[0])} (constant)"
|
|
puts
|
|
puts "#{indent}T1 = Σ1(e) + Ch(e, f, g) + h + K0 + W0"
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])} #{bits(rotr(i+1, $hash[4]))} ROTR 6"
|
|
puts "#{indent}d = #{bits($hash[3])} #{bits($hash[4])}"
|
|
puts "#{indent}e = #{bits($hash[4])} -> #{bits($hash[4])}"
|
|
puts "#{indent}f = #{bits($hash[5])}"
|
|
puts "#{indent}g = #{bits($hash[6])} #{bits(ch($hash[4], $hash[5], $hash[6]))} Ch(e, f, g)"
|
|
puts "#{indent}h = #{bits($hash[7])}"
|
|
delay(:fastest)
|
|
end
|
|
delay(:normal)
|
|
|
|
# Σ1(e)
|
|
11.times do |i|
|
|
system "clear"
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}W0 = #{bits(w[0])} (message schedule)"
|
|
puts "#{indent}K0 = #{bits(k[0])} (constant)"
|
|
puts
|
|
puts "#{indent}T1 = Σ1(e) + Ch(e, f, g) + h + K0 + W0"
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])} #{bits(rotr(6, $hash[4]))} ROTR 6"
|
|
puts "#{indent}d = #{bits($hash[3])} #{bits(rotr(i+1, $hash[4]))} ROTR 11"
|
|
puts "#{indent}e = #{bits($hash[4])} -> #{bits($hash[4])}"
|
|
puts "#{indent}f = #{bits($hash[5])}"
|
|
puts "#{indent}g = #{bits($hash[6])} #{bits(ch($hash[4], $hash[5], $hash[6]))} Ch(e, f, g)"
|
|
puts "#{indent}h = #{bits($hash[7])}"
|
|
delay(:fastest)
|
|
end
|
|
delay(:normal)
|
|
|
|
# Σ1(e)
|
|
25.times do |i|
|
|
system "clear"
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}W0 = #{bits(w[0])} (message schedule)"
|
|
puts "#{indent}K0 = #{bits(k[0])} (constant)"
|
|
puts
|
|
puts "#{indent}T1 = Σ1(e) + Ch(e, f, g) + h + K0 + W0"
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])} #{bits(rotr(6, $hash[4]))} ROTR 6"
|
|
puts "#{indent}d = #{bits($hash[3])} #{bits(rotr(11, $hash[4]))} ROTR 11"
|
|
puts "#{indent}e = #{bits($hash[4])} -> #{bits(rotr(i+1, $hash[4]))} ROTR 25"
|
|
puts "#{indent}f = #{bits($hash[5])}"
|
|
puts "#{indent}g = #{bits($hash[6])} #{bits(ch($hash[4], $hash[5], $hash[6]))} Ch(e, f, g)"
|
|
puts "#{indent}h = #{bits($hash[7])}"
|
|
delay(:fastest)
|
|
end
|
|
delay(:normal)
|
|
|
|
# Σ1(e)
|
|
system "clear"
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}W0 = #{bits(w[0])} (message schedule)"
|
|
puts "#{indent}K0 = #{bits(k[0])} (constant)"
|
|
puts
|
|
puts "#{indent}T1 = Σ1(e) + Ch(e, f, g) + h + K0 + W0"
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])} #{bits(rotr(6, $hash[4]))}"
|
|
puts "#{indent}d = #{bits($hash[3])} #{bits(rotr(11, $hash[4]))}"
|
|
puts "#{indent}e = #{bits($hash[4])} -> #{bits(rotr(25, $hash[4]))}"
|
|
puts "#{indent}f = #{bits($hash[5])}"
|
|
puts "#{indent}g = #{bits($hash[6])} #{bits(ch($hash[4], $hash[5], $hash[6]))} Ch(e, f, g)"
|
|
puts "#{indent}h = #{bits($hash[7])}"
|
|
delay(:normal)
|
|
|
|
# Σ1(e)
|
|
system "clear"
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}W0 = #{bits(w[0])} (message schedule)"
|
|
puts "#{indent}K0 = #{bits(k[0])} (constant)"
|
|
puts
|
|
puts "#{indent}T1 = Σ1(e) + Ch(e, f, g) + h + K0 + W0"
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])} #{bits(rotr(6, $hash[4]))} XOR"
|
|
puts "#{indent}d = #{bits($hash[3])} #{bits(rotr(11, $hash[4]))}"
|
|
puts "#{indent}e = #{bits($hash[4])} -> #{bits(rotr(25, $hash[4]))}"
|
|
puts "#{indent}f = #{bits($hash[5])}"
|
|
puts "#{indent}g = #{bits($hash[6])} #{bits(ch($hash[4], $hash[5], $hash[6]))} Ch(e, f, g)"
|
|
puts "#{indent}h = #{bits($hash[7])}"
|
|
delay(:normal)
|
|
|
|
# Σ1(e)
|
|
system "clear"
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}W0 = #{bits(w[0])} (message schedule)"
|
|
puts "#{indent}K0 = #{bits(k[0])} (constant)"
|
|
puts
|
|
puts "#{indent}T1 = Σ1(e) + Ch(e, f, g) + h + K0 + W0"
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])}"
|
|
puts "#{indent}d = #{bits($hash[3])} #{bits(rotr(11, $hash[4]) ^ rotr(6, $hash[4]))} XOR"
|
|
puts "#{indent}e = #{bits($hash[4])} -> #{bits(rotr(25, $hash[4]))}"
|
|
puts "#{indent}f = #{bits($hash[5])}"
|
|
puts "#{indent}g = #{bits($hash[6])} #{bits(ch($hash[4], $hash[5], $hash[6]))} Ch(e, f, g)"
|
|
puts "#{indent}h = #{bits($hash[7])}"
|
|
delay(:normal)
|
|
|
|
# Σ1(e)
|
|
system "clear"
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}W0 = #{bits(w[0])} (message schedule)"
|
|
puts "#{indent}K0 = #{bits(k[0])} (constant)"
|
|
puts
|
|
puts "#{indent}T1 = Σ1(e) + Ch(e, f, g) + h + K0 + W0"
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])}"
|
|
puts "#{indent}d = #{bits($hash[3])}"
|
|
puts "#{indent}e = #{bits($hash[4])} -> #{bits(rotr(11, $hash[4]) ^ rotr(6, $hash[4]) ^ rotr(25, $hash[4]))} Σ1(e)"
|
|
puts "#{indent}f = #{bits($hash[5])}"
|
|
puts "#{indent}g = #{bits($hash[6])} #{bits(ch($hash[4], $hash[5], $hash[6]))} Ch(e, f, g)"
|
|
puts "#{indent}h = #{bits($hash[7])}"
|
|
delay(:normal)
|
|
|
|
# Σ1(e)
|
|
system "clear"
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}W0 = #{bits(w[0])} (message schedule)"
|
|
puts "#{indent}K0 = #{bits(k[0])} (constant)"
|
|
puts
|
|
puts "#{indent}T1 = Σ1(e) + Ch(e, f, g) + h + K0 + W0"
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])}"
|
|
puts "#{indent}d = #{bits($hash[3])}"
|
|
puts "#{indent}e = #{bits($hash[4])} #{bits(usigma1($hash[4]))} Σ1(e)"
|
|
puts "#{indent}f = #{bits($hash[5])}"
|
|
puts "#{indent}g = #{bits($hash[6])} #{bits(ch($hash[4], $hash[5], $hash[6]))} Ch(e, f, g)"
|
|
puts "#{indent}h = #{bits($hash[7])}"
|
|
delay(:normal)
|
|
|
|
# h
|
|
system "clear"
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}W0 = #{bits(w[0])} (message schedule)"
|
|
puts "#{indent}K0 = #{bits(k[0])} (constant)"
|
|
puts
|
|
puts "#{indent}T1 = Σ1(e) + Ch(e, f, g) + h + K0 + W0"
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])}"
|
|
puts "#{indent}d = #{bits($hash[3])}"
|
|
puts "#{indent}e = #{bits($hash[4])} #{bits(usigma1($hash[4]))} Σ1(e)"
|
|
puts "#{indent}f = #{bits($hash[5])}"
|
|
puts "#{indent}g = #{bits($hash[6])} #{bits(ch($hash[4], $hash[5], $hash[6]))} Ch(e, f, g)"
|
|
puts "#{indent}h = #{bits($hash[7])} -> "
|
|
delay(:normal)
|
|
|
|
# h
|
|
system "clear"
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}W0 = #{bits(w[0])} (message schedule)"
|
|
puts "#{indent}K0 = #{bits(k[0])} (constant)"
|
|
puts
|
|
puts "#{indent}T1 = Σ1(e) + Ch(e, f, g) + h + K0 + W0"
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])}"
|
|
puts "#{indent}d = #{bits($hash[3])}"
|
|
puts "#{indent}e = #{bits($hash[4])} #{bits(usigma1($hash[4]))} Σ1(e)"
|
|
puts "#{indent}f = #{bits($hash[5])}"
|
|
puts "#{indent}g = #{bits($hash[6])} #{bits(ch($hash[4], $hash[5], $hash[6]))} Ch(e, f, g)"
|
|
puts "#{indent}h = #{bits($hash[7])} -> #{bits($hash[7])}"
|
|
delay(:normal)
|
|
|
|
# h
|
|
system "clear"
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}W0 = #{bits(w[0])} (message schedule)"
|
|
puts "#{indent}K0 = #{bits(k[0])} (constant)"
|
|
puts
|
|
puts "#{indent}T1 = Σ1(e) + Ch(e, f, g) + h + K0 + W0"
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])}"
|
|
puts "#{indent}d = #{bits($hash[3])}"
|
|
puts "#{indent}e = #{bits($hash[4])} #{bits(usigma1($hash[4]))} Σ1(e)"
|
|
puts "#{indent}f = #{bits($hash[5])}"
|
|
puts "#{indent}g = #{bits($hash[6])} #{bits(ch($hash[4], $hash[5], $hash[6]))} Ch(e, f, g)"
|
|
puts "#{indent}h = #{bits($hash[7])} -> #{bits($hash[7])} h"
|
|
delay(:normal)
|
|
|
|
# h
|
|
system "clear"
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}W0 = #{bits(w[0])} (message schedule)"
|
|
puts "#{indent}K0 = #{bits(k[0])} (constant)"
|
|
puts
|
|
puts "#{indent}T1 = Σ1(e) + Ch(e, f, g) + h + K0 + W0"
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])}"
|
|
puts "#{indent}d = #{bits($hash[3])}"
|
|
puts "#{indent}e = #{bits($hash[4])} #{bits(usigma1($hash[4]))} Σ1(e)"
|
|
puts "#{indent}f = #{bits($hash[5])}"
|
|
puts "#{indent}g = #{bits($hash[6])} #{bits(ch($hash[4], $hash[5], $hash[6]))} Ch(e, f, g)"
|
|
puts "#{indent}h = #{bits($hash[7])} #{bits($hash[7])} h"
|
|
delay(:normal)
|
|
|
|
# T1
|
|
system "clear"
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}W0 = #{bits(w[0])} (message schedule)"
|
|
puts "#{indent}K0 = #{bits(k[0])} (constant)"
|
|
puts
|
|
puts "#{indent}T1 = Σ1(e) + Ch(e, f, g) + h + K0 + W0 = "
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])}"
|
|
puts "#{indent}d = #{bits($hash[3])}"
|
|
puts "#{indent}e = #{bits($hash[4])} #{bits(usigma1($hash[4]))} Σ1(e)"
|
|
puts "#{indent}f = #{bits($hash[5])}"
|
|
puts "#{indent}g = #{bits($hash[6])} #{bits(ch($hash[4], $hash[5], $hash[6]))} Ch(e, f, g)"
|
|
puts "#{indent}h = #{bits($hash[7])} #{bits($hash[7])} h"
|
|
delay(:normal)
|
|
|
|
# T1
|
|
system "clear"
|
|
t1 = add(w[0], k[0], usigma1($hash[4]), ch($hash[4], $hash[5], $hash[6]), $hash[7])
|
|
puts $state + "\n" if defined? $state
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}compression: (T1)"
|
|
puts "#{indent}-----------"
|
|
puts "#{indent}W0 = #{bits(w[0])} (message schedule)"
|
|
puts "#{indent}K0 = #{bits(k[0])} (constant)"
|
|
puts
|
|
puts "#{indent}T1 = Σ1(e) + Ch(e, f, g) + h + K0 + W0 = #{bits(t1)}"
|
|
puts
|
|
puts
|
|
puts "#{indent}a = #{bits($hash[0])}"
|
|
puts "#{indent}b = #{bits($hash[1])}"
|
|
puts "#{indent}c = #{bits($hash[2])}"
|
|
puts "#{indent}d = #{bits($hash[3])}"
|
|
puts "#{indent}e = #{bits($hash[4])} #{bits(usigma1($hash[4]))} Σ1(e)"
|
|
puts "#{indent}f = #{bits($hash[5])}"
|
|
puts "#{indent}g = #{bits($hash[6])} #{bits(ch($hash[4], $hash[5], $hash[6]))} Ch(e, f, g)"
|
|
puts "#{indent}h = #{bits($hash[7])} #{bits($hash[7])} h"
|
|
delay(:end)
|