Форум: "Прочее";
Текущий архив: 2012.02.26;
Скачать: [xml.tar.bz2];
ВнизПомогите переписать функцию с ASM на Pascal или C Найти похожие ветки
← →
DVM © (2011-11-08 16:28) [0]Функция, я так понимаю, представляет собой базовый шаг кодирования ГОСТ 28147-89 или какую то вариацию на эту тему. Автор функции, вроде бы, местный форумчанин Alexander Panfilov (palva?). В принципе я бы мог конечно реализовать алгоритм шифрования по ГОСТ с нуля самостоятельно, но, дело в том, что функция вот в таком виде уже используется клиентом сервера (который мне недоступен), а сервер требуется перевести на 64 бит. И я не уверен, что эта функция точно соответствует алгоритму ГОСТ. Т.е нужена точная копия именно этой функции на Pascal-е или C.
В ASM я не особенно силен, потому прошу помощи у знатоков.
type
TGOSTBlock = array[0..1] of LongWord;
TGOSTKey = array[0..7] of LongWord;
TGOSTSubstitutionTable = array[0..3, 0..255] of Byte;
var
GOSTKey: TGOSTKey = {$INCLUDE key.inc }
GOSTTable: TGOSTSubstitutionTable = {$INCLUDE table.inc }
procedure GOST_EncryptBlock(var GBlock: TGOSTBlock); assembler;
var
blk: Pointer;
i: LongInt;
label
L, L1, L2;
asm
push ebx
push esi
push edi
mov ebx, GBlock
mov blk, ebx
mov eax, [ebx]
mov edx, [ebx+4]
mov i, 3
L:
mov ecx, 8
lea esi, GOSTKey
L1:
mov edi, eax
add eax, [esi]
lea ebx, GOSTTable
xlat
ror eax, 8
add ebx, 256
xlat
ror eax, 8
add ebx, 256
xlat
ror eax, 8
add ebx, 256
xlat
rol eax, 3
xor eax, edx
mov edx, edi
add esi, 4
loop L1
sub i, 1
jnz L
mov ecx, 8
lea esi, GOSTKey
add esi, 28
L2:
mov edi, eax
add eax, [esi]
lea ebx, GOSTTable
xlat
ror eax, 8
add ebx, 256
xlat
ror eax, 8
add ebx, 256
xlat
ror eax, 8
add ebx, 256
xlat
rol eax, 3
xor eax, edx
mov edx, edi
sub esi, 4
loop L2
mov ebx, blk
mov [ebx], edx
mov [ebx+4], eax
pop edi
pop esi
pop ebx
end;
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2012.02.26;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c