Main step of GOST 28147-89: Difference between revisions

Line 205:
 
=={{header|JavaScript}}==
<lang JavaScript>var Таблица_замен = [
const Таблица_замен = [
[ 4, 10, 9, 2, 13, 8, 0, 14, 6, 11, 1, 12, 7, 15, 5, 3],
[ [144, 1110, 49, 12, 62, 13, 15, 108, 20, 314, 86, 11, 1, 012, 7, 15, 5, 93],
[14, 511, 84, 12, 16, 13, 15, 10, 32, 43, 28, 14, 151, 12 0, 7, 6, 05, 9, 11],
[ 5, [ 78, 1, 13, 10, 13, 04, 82, 914, 15, 1412, 47, 6, 12, 110, 29, 5, 311],
[ 67, 1213, 710, 1, 50, 15 8, 13 9, 15, 814, 4, 10 6, 912, 1411, 02, 35, 11, 23],
[ 46, 1112, 10, 07, 71, 25, 115, 13, 38, 64, 810, 59, 14, 9 0, 12 3, 1511, 14 2],
[ [134, 11, 410, 10, 37, 15 2, 51, 913, 03, 10, 146, 78, 65, 89, 12, 215, 1214],
[ 113, 1511, 13, 04, 51, 73, 1015, 45, 9, 20, 310, 14, 67, 11 6, 8, 2, 12]];,
[ 41, 1015, 913, 20, 13 5, 87, 010, 14 4, 69, 11 2, 13, 1214, 76, 1511, 58, 312],
];
 
functionconst Основной_шаг = ОсновнойШаг(блок_текста, элемент_ключа, ТЗ) => {
const
var N = блок_текста.slice(0);,
var X = элемент_ключа;
var S = (N[0] + X)элемент_ключа & 0xFFFFFFFF;
var ячейка; var let нов_S = 0;
for (varlet сч = 0; сч < 4; сч++) {
const ячейкаяч = (S >>> (сч << 3)) & 0xFF;
нов_S +=
нов_S += (Таблица_замен[сч*2][ячейка & 0x0F] + (Таблица_замен[сч*2+1][ячейка >>> 4] << 4)) << (сч << 3);
ТЗ[сч * 2][яч & 0x0F]
}
S = + (((нов_SТЗ[сч <<* 11)2 + (нов_S1][яч >>> 21))4] &<< 0xFFFFFFFF4) ^ N[1];
<< (сч << 3);
N[1] = N[0]; N[0] = S;
}
return N;
нов_S =
}</lang>
(нов_S << 11)
+ (нов_S >>> 21)
& 0xFFFFFFFF
^ N[1];
N[1] = N[0]; N[0] = Sнов_S;
return N;
};
}</lang>
 
Note: the variable "блок_текста" is an array of two 32-bit values that make up the block.