Main step of GOST 28147-89: Difference between revisions

m
(→‎{{header|RPL}}: improved code)
 
(3 intermediate revisions by 2 users not shown)
Line 740:
for (let сч = 0; сч < 4; сч++) {
const яч = (S >>> (сч << 3)) & 0xFF;
нов_S += ТЗ[сч * 2][яч & 0x0F] + (ТЗ[сч * 2 + 1][яч >>> 4] << 4) << (сч << 3);
нов_S +=
ТЗ[сч * 2][яч & 0x0F]
+ (ТЗ[сч * 2 + 1][яч >>> 4] << 4)
<< (сч << 3);
}
нов_S = (нов_S << 11) + (нов_S >>> 21) & 0xFFFFFFFF ^ N[1];
нов_S =
(нов_S << 11)
+ (нов_S >>> 21)
& 0xFFFFFFFF
^ N[1];
N[1] = N[0]; N[0] = нов_S;
return N;
Line 787 ⟶ 780:
end
 
bytes2int(arr) = arr[1] + reinterpret(UInt32(arr[2]), << 8) + (UInt32(arr[3]) << 16) + (UInt32(arr[4begin])) << 24
int2bytes(x) = [UInt8reinterpret(x&0xff), UInt8((x&0xff00)>>8), UInt8(([x&0xff0000])>>16), UInt8(x>>24)]
 
function mainstep(inputbytes, keybytes)
Line 1,314 ⟶ 1,307:
« « SWAP SLB OR » → input key cast
« key REVLIST cast STREAM <span style="color:grey">@ convert key into a little-endian integer</span>
input 1 4 SUB REVLIST cast STREAM + <span style="color:blue">B→LIST</span> <span style="color:grey">@ same for input part 1, then add and back to list format</span>
{ K21 K43 K65 K87 } SWAP B→R 1 ADD GET <span style="color:grey">@ replace bytes according to the table</span>
{ K21 K43 K65 K87 }
REVLIST cast STREAM <span style="color:grey">@ back to little-endian format</span>
SWAP B→R 1 ADD GET
RLB RL RL RL <span style="color:blue">B→LIST</span> <span style="color:grey">@ roll 11 bits, back to list format</span>
REVLIST cast STREAM
RLBinput 5 8 SUB XOR RL RL RL <span style="color:bluegrey">B→LIST@ add part 2</span>
input 1 4 SUB + <span style="color:grey">@ append part 1</span>
input 5 8 SUB XOR
input 1 4 SUB +
» » '<span style="color:blue">MAINSTEP</span>' STO