defsha256_hash_computation(message_block):
W = [0] * 64# 1. Prepare the message schedule, W[t]:
W[0:16] = message_block
for t inrange(16, 64):
W[t] = (
sigma1(W[t - 2]) + W[t - 7] + sigma0(W[t - 15]) + W[t - 16]
) & 0xFFFFFFFF# +はmod 2^32上の演算であることに注意# 2. Initialize the eight working variables, a-h with the (i-1)st hash value:
a, b, c, d, e, f, g, h = H
# 3.for t inrange(64):
T1 = h + SIGMA1(e) + Ch(e, f, g) + K[t] + W[t]
T2 = SIGMA0(a) + Maj(a, b, c)
h = g
g = f
f = e
e = (d + T1) & 0xFFFFFFFF
d = c
c = b
b = a
a = (T1 + T2) & 0xFFFFFFFF# 4. Compute the ith intermediate hash value Hireturn [(x + y) & 0xFFFFFFFFfor x, y inzip(H, [a, b, c, d, e, f, g, h])]
結合
最後に、8つの数が入っている配列Hを結合します。
message_digest = b"".join([struct.pack("!L", i) for i in H])
set terminal epslatex size 14cm,10cm
set output "graph.eps"
set border lw 2
set xlabel "{$x(t)$}"
set ylabel "{$y(t)$}"
set zlabel "{$z(t)$}"
set ztics 10
set mxtics 2
set mytics 2
set mztics 2
splot "lorenz_equation.txt" u 2:3:4 w l title "Lorenz equation"
quit
はじめにmacならターミナルを開いて作業フォルダでgnuplotと打ち込んで起動。その後set term tikz createstyleをする(なぜかパイプで渡せないため)。と、なんかいろいろ3つくらいgnuplot-lua-tikz.texみたいなファイルができる。
set terminal tikz size 8cm,6cm
set output"graph.tex"
set border lw 2
set xlabel "{$t$}"
set ylabel "{$u$}"
set mxtics 4
set mytics 4
#set xrange [0:20]
set yrange [0:10]
plot \
"09.txt" u 1:2 w l lw 2 title "{$u_0=0.9$}",\
"10.txt" u 1:2 w l lw 2 title "{$u_0=1.0$}",\
"11.txt" u 1:2 w l lw 2 title "{$u_0=1.1$}"
quit
width=0.22
lms0=0.03
rms0=lms0+width
lms1=rms0+0.02
rms1=lms1+width
lms2=rms1+0.02
rms2=lms2+width
lms3=rms2+0.02
rms3=lms3+width
height=0.3
bms2=0.04
tms2=bms2+height
bms1=tms2+0.03
tms1=bms1+height
bms0=tms1+0.03
tms0=bms0+height
#set terminal postscript enhanced color
#set output"kadai3graph.eps"
#set terminal epslatex size 24cm,18cm
#set output"kadai3graph.eps"
set terminal tikz size 24cm,14cm
set output"kadai3graph.tex"
set border lw 2
#set ylabel "{$x(t)$}"
set clip two
set mytics 4
#set xrange [0:100]
set xtics 20
set logscale y
#set key left top
unset key
set multiplot
##########0
set title "{$n=100$}"
set lmargin screen lms0
set rmargin screen rms0
set tmargin screen tms0
set bmargin screen bms0
set logscale y
set format x ""
set format y "{$%2.1t\\times 10^{%L}$}"
set ylabel "residue"
set yrange [10**(-5):10**0]
stats "kadai3_100.txt" u 3 name "residue100"
set label 1 at graph 0,0.95 left sprintf("\\tiny Average:%e",residue100_mean) tc rgb "red"
plot "kadai3_100.txt" u 1:3 w p pt 2 lt 1 lw 2,\
residue100_mean lc rgb "red" lw 1 dt 2
unset title
set lmargin screen lms0
set rmargin screen rms0
set tmargin screen tms1
set bmargin screen bms1
set logscale y
set format x ""
set format y "{$%2.1t\\times 10^{%L}$}"
set yrange [10**(-6):10**(-2)]
set ylabel "relative error"
stats "kadai3_100.txt" u 4 name "relativeerror100"
set label 1 at graph 0,0.95 left sprintf("\\tiny Average:%e",relativeerror100_mean) tc rgb "red"
plot "kadai3_100.txt" u 1:4 w p pt 3 lt 1 lw 2,\
relativeerror100_mean lc rgb "red" lw 1 dt 2
set lmargin screen lms0
set rmargin screen rms0
set tmargin screen tms2
set bmargin screen bms2
set logscale y
set format"%g"
#unset format y
set format y "{$%2.1t\\times 10^{%L}$}"
set xlabel "trials"
set ylabel "time[ms]"
set yrange [10**1:10**4.3]
stats "kadai3_100.txt" u 2 name "time100"
set label 1 at graph 0,0.95 left sprintf("\\tiny Average:%e",time100_mean) tc rgb "red"
plot "kadai3_100.txt" u 1:2 w p pt 4 lt 1 lw 2,\
time100_mean lc rgb "red" lw 1 dt 2
##########1
set logscale y
set title "{$n=200$}"
set format""
unset xlabel
unset ylabel
set lmargin screen lms1
set rmargin screen rms1
set tmargin screen tms0
set bmargin screen bms0
set yrange [10**(-5):10**0]
stats "kadai3_200.txt" u 3 name "residue200"
set label 1 at graph 0,0.95 left sprintf("\\tiny Average:%e",residue200_mean) tc rgb "red"
plot "kadai3_200.txt" u 1:3 w p pt 2 lt 2 lw 2,\
residue200_mean lc rgb "red" lw 1 dt 2
unset title
set logscale y
set lmargin screen lms1
set rmargin screen rms1
set tmargin screen tms1
set bmargin screen bms1
set format""
set yrange [10**(-6):10**(-2)]
stats "kadai3_200.txt" u 4 name "relativeerror200"
set label 1 at graph 0,0.95 left sprintf("\\tiny Average:%e",relativeerror200_mean) tc rgb "red"
plot "kadai3_200.txt" u 1:4 w p pt 3 lt 2 lw 2,\
relativeerror200_mean lc rgb "red" lw 1 dt 2
set lmargin screen lms1
set rmargin screen rms1
set tmargin screen tms2
set bmargin screen bms2
set logscale y
set format x "%g"
set format y ""
set xlabel "trials"
set yrange [10**1:10**4.3]
stats "kadai3_200.txt" u 2 name "time200"
set label 1 at graph 0,0.95 left sprintf("\\tiny Average:%e",time200_mean) tc rgb "red"
plot "kadai3_200.txt" u 1:2 w p pt 4 lt 2 lw 2,\
time200_mean lc rgb "red" lw 1 dt 2
##########2
set logscale y
set title "{$n=400$}"
set format""
unset xlabel
unset ylabel
set lmargin screen lms2
set rmargin screen rms2
set tmargin screen tms0
set bmargin screen bms0
set yrange [10**(-5):10**0]
stats "kadai3_400.txt" u 3 name "residue400"
set label 1 at graph 0,0.95 left sprintf("\\tiny Average:%e",residue400_mean) tc rgb "red"
plot "kadai3_400.txt" u 1:3 w p pt 2 lt 3 lw 2,\
residue400_mean lc rgb "red" lw 1 dt 2
unset title
set logscale y
set lmargin screen lms2
set rmargin screen rms2
set tmargin screen tms1
set bmargin screen bms1
set format""
set yrange [10**(-6):10**(-2)]
stats "kadai3_400.txt" u 4 name "relativeerror400"
set label 1 at graph 0,0.95 left sprintf("\\tiny Average:%e",relativeerror400_mean) tc rgb "red"
plot "kadai3_400.txt" u 1:4 w p pt 3 lt 3 lw 2,\
relativeerror400_mean lc rgb "red" lw 1 dt 2
set lmargin screen lms2
set rmargin screen rms2
set tmargin screen tms2
set bmargin screen bms2
set logscale y
set format x "%g"
set format y ""
set xlabel "trials"
set yrange [10**1:10**4.3]
stats "kadai3_400.txt" u 2 name "time400"
set label 1 at graph 0,0.95 left sprintf("\\tiny Average:%e",time400_mean) tc rgb "red"
plot "kadai3_400.txt" u 1:2 w p pt 4 lt 3 lw 2,\
time400_mean lc rgb "red" lw 1 dt 2
##########
set logscale y
set title "{$n=800$}"
set format""
unset xlabel
unset ylabel
set lmargin screen lms3
set rmargin screen rms3
set tmargin screen tms0
set bmargin screen bms0
set format""
set yrange [10**(-5):10**0]
stats "kadai3_800.txt" u 3 name "residue800"
set label 1 at graph 0,0.95 left sprintf("\\tiny Average:%e",residue800_mean) tc rgb "red"
plot "kadai3_800.txt" u 1:3 w p pt 2 lt 4 lw 2,\
residue800_mean lc rgb "red" lw 1 dt 2
unset title
set logscale y
set lmargin screen lms3
set rmargin screen rms3
set tmargin screen tms1
set bmargin screen bms1
set format""
set yrange [10**(-6):10**(-2)]
stats "kadai3_800.txt" u 4 name "relativeerror800"
set label 1 at graph 0,0.95 left sprintf("\\tiny Average:%e",relativeerror800_mean) tc rgb "red"
plot "kadai3_800.txt" u 1:4 w p pt 3 lt 4 lw 2,\
relativeerror800_mean lc rgb "red" lw 1 dt 2
set lmargin screen lms3
set rmargin screen rms3
set tmargin screen tms2
set bmargin screen bms2
set logscale y
set format x "%g"
set format y ""
set xlabel "trials"
set yrange [10**1:10**4.3]
stats "kadai3_800.txt" u 2 name "time800"
set label 1 at graph 0,0.95 left sprintf("\\tiny Average:%e",time800_mean) tc rgb "red"
plot "kadai3_800.txt" u 1:2 w p pt 4 lt 4 lw 2,\
time800_mean lc rgb "red" lw 1 dt 2
unset multiplot
quit