|
2021/8/22(Sun) 20:57:27|NO.93658
がんばったのですが仕様通りの結果になりませんでした・・・。
#include "hsp3dish.as"
#packopt xsize 1024 ; 横サイズ
#packopt ysize 576 ; 縦サイズ
#define ctype ROTR(%1,%2) (%1 >> %2) OR (%1 << (32 - %2))
#define ctype SHR(%1,%2) (%1 >> %2)
#define ctype CH(%1,%2,%3) (%1 AND %2) XOR ((%1 XOR $FFFFFFFF) AND %3)
#define ctype MAJ(%1,%2,%3) (%1 AND %2) XOR (%1 AND %3) XOR (%2 AND %3)
#define ctype SIGMA0(%1) ROTR(%1,2) XOR ROTR(%1,13) XOR ROTR(%1,22)
#define ctype SIGMA1(%1) ROTR(%1,6) XOR ROTR(%1,11) XOR ROTR(%1,25)
#define ctype sSIGMA0(%1) ROTR(%1,7) XOR ROTR(%1,18) XOR SHR(%1,3)
#define ctype sSIGMA1(%1) ROTR(%1,17) XOR ROTR(%1,19) XOR SHR(%1,10)
shaK = 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
shaH0 = 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
dim shaW,64
dim shaH,8
cls
redraw 0
color 255,255,255
boxf 0,0,ginfo_winx,ginfo_winy
color 0,0,0
msg = "abc"
gosub *sha256
mes "end"
redraw 1
stop
*sha256
SHAmsgsize = strlen(msg)
if SHAmsgsize \ 64 < 56{
Pmsgsize = SHAmsgsize + (56 - SHAmsgsize \ 64) + 8
}else{
Pmsgsize = SHAmsgsize + (56 + 64 - SHAmsgsize \ 64) + 8
}
mes "msg"
mes msg
mes "SHAmsgsize"
mes SHAmsgsize
mes "Pmessize"
mes Pmsgsize
memexpand msg,Pmsgsize
memset msg,0,Pmsgsize-SHAmsgsize,SHAmsgsize
poke msg,SHAmsgsize,128
shaidx = SHAmsgsize*8
poke msg,Pmsgsize-4,(shaidx AND 0xff000000) >> 24
poke msg,Pmsgsize-3,(shaidx AND 0x00ff0000) >> 16
poke msg,Pmsgsize-2,(shaidx AND 0x0000ff00) >> 8
poke msg,Pmsgsize-1,(shaidx AND 0x000000ff)
repeat 8
shaH(cnt) = shaH0(cnt)
loop
*sha2562
repeat Pmsgsize / 64;メッセージ数分ループ
SHAcnt = cnt
repeat 16;メッセージスケジュールWの生成
shaidx = (SHAcnt*64) + (cnt*4)
shaW(cnt) = (peek(msg,shaidx) << 24) + (peek(msg,shaidx+1) << 16) + (peek(msg,shaidx+2) << 8) + peek(msg,shaidx+3)
loop
repeat 48,16
shaW(cnt) = (sSIGMA1(shaW(cnt-2)) + shaW(cnt-7) + sSIGMA0(shaW(cnt-15)) + shaW(cnt-16)) AND 0xffffffff
loop
shaA = shaH(0)
shaB = shaH(1)
shaC = shaH(2)
shaD = shaH(3)
shaE = shaH(4)
shaF = shaH(5)
shaG = shaH(6)
shaH2 = shaH(7)
repeat 64
shaidx = (shaH2 + SIGMA1(shaE) + CH(shaE, shaF, shaG) + shaK(cnt) + shaW(cnt)) AND 0xffffffff
shaidx2 = (SIGMA0(shaA) + MAJ(shaA, shaB, shaC)) AND 0xffffffff
shaH2 = shaG
shaG = shaF
shaF = shaE
shaE = (shaD + shaidx) AND 0xffffffff
shaD = shaC
shaC = shaB
shaB = shaA
shaA = (shaidx + shaidx2) AND 0xffffffff
loop
shaH(0) = (shaA + shaH(0)) AND 0xffffffff
shaH(1) = (shaB + shaH(1)) AND 0xffffffff
shaH(2) = (shaC + shaH(2)) AND 0xffffffff
shaH(3) = (shaD + shaH(3)) AND 0xffffffff
shaH(4) = (shaE + shaH(4)) AND 0xffffffff
shaH(5) = (shaF + shaH(5)) AND 0xffffffff
shaH(6) = (shaG + shaH(6)) AND 0xffffffff
shaH(7) = (shaH2 + shaH(7)) AND 0xffffffff
loop
repeat 8
mes strf("%x", shaH(cnt))
loop
return
| |