Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Документация по криптоалгоритмам / GOST-28147-89 / GOST_UTI / MAKE1KEY
.C/*-----------------------------------------------------
Make1Key.c -- ўла Ў®вЄ ®¤®Ј® ЄаЁЇв®Ја дЁзҐбЄ®Ј®
Є«оз б Ї®¬®ймо "н«ҐЄва®®© аг«ҐвЄЁ"
-----------------------------------------------------
ђ §а Ў®в « Ђ.ћ.‚Ё®Єга®ў, Ј.Њ®бЄў , дҐўа «м 1995 Ј.
(c) 1995, ‘ў®Ў®¤®Ґ ЁбЇ®«м§®ў ЁҐ Ё Є®ЇЁа®ў ЁҐ.
-----------------------------------------------------
ќв Їа®Ја ¬¬ бЇҐжЁ «м® а §а Ў®в ¤«п ЇгЎ«ЁЄ жЁЁ
ў "Њ®Ёв®аҐ".
-----------------------------------------------------
*/
#pragma inline
#include <conio.h> // kbhit,getch
#include <dos.h> // delay
#include <stdio.h> // printf,fopen,fclose,putc,...
#include <stdlib.h> // atoi
unsigned char port61h;
// Џа®в®вЁЇл дгЄжЁ©
void timer2(unsigned short count);
unsigned short get2channel(void);
// ѓ« ў п Їа®Ја ¬¬
int main(int argc, char *argv[])
{
printf("Џа®Ја ¬¬ ўла Ў®вЄЁ 1 Є«оз б Ї®¬®ймо "
"н«ҐЄва®®Ј® «®Ј аг«ҐвЄЁ.\n"
"‘®бв ўЁ« Ђ.ћ.‚Ё®Єга®ў, пў ам 1995 Ј®¤ ,"
" бў®Ў®¤®Ґ ЁбЇ®«м§®ў ЁҐ Ё Є®ЇЁа®ў ЁҐ\n");
if ( argc < 2 || argc > 3 )
return printf(
"Љ®¬ ¤ § ЇгбЄ : \"make1key д ©« [¤«Ё ]\" ,Ј¤Ґ:\n"
" д ©« - Ё¬п д ©« ¤«п § ЇЁбЁ Є«оз \n"
" ¤«Ё - ¤«Ё Є«оз ў Ў ©в е, Ї® 㬮«з Ёо - 32\n"
),-1;
else
{
unsigned short length=32;
FILE *key=fopen(argv[1],"wb");
if(!key)
{
printf(
"ЌҐ ¬®Јг ®вЄалвм д ©« Є«оз \"%s\" ¤«п § ЇЁбЁ\n",
argv[1]);
return 1;
}
if (argc==3) length=atoi(argv[2]);
timer2(256);
printf("Ќ ¦Ё¬ © «оЎлҐ Є« ўЁил :");
while(length--)
{
while (delay(300),kbhit())
getch(),putchar('\007'),timer2(256);
getch();
if (putc(get2channel(),key)==EOF)
return printf("ЋиЁЎЄ д ©«Ґ Є«оз \n"),1;
putchar('.');
}
asm {
mov AL,port61h
out 0x61,AL
}
putchar('\n');
return fclose(key) ?
(printf("ЋиЁЎЄ д ©«Ґ Є«оз \n"),1) :
(printf("Љ«оз бЈҐҐаЁа®ў \n"),0) ;
}
}
// Їа®жҐ¤га Їа®Ја ¬¬Ёа®ў Ёп 2 Є « в ©¬Ґа
void timer2(unsigned short count)
{
asm {
mov AL,0xb4 // ‡ Јаг¦ Ґ¬ ў в ©¬Ґа
out 0x43,AL // гЇа ў«по饥 б«®ў®
mov AX,count// AX <- ¬« ¤иЁ© Ў ©в Є®бв вл
out 0x42,AL // § Јаг¦ Ґ¬ ¬« ¤иЁ© Ў ©в ў в ©¬Ґа
mov AL,AH // AL <- бв аиЁ© Ў ©в Є®бв вл
out 0x42,AL // § Јаг¦ Ґ¬ бв аиЁ© Ў ©в ў в ©¬Ґа
in AL,0x61 // AL <- б®бв®пЁҐ Ї®ав 61h
mov port61h,AL // б®еа 塞 б®бв®пЁҐ
or AL,1 // а §аҐи Ґ¬ а Ў®вг 2 Є «
out 0x61,AL // ...
}
return;
}
// Їа®жҐ¤га бзЁвлў Ёп Ї®Є § Ёп 2 Є « в ©¬Ґа
unsigned short get2channel(void)
{
asm {
mov AL,0x86 // дЁЄбЁа㥬 ¤ лҐ
out 0x43,AL // 2-Ј® Є « в ©¬Ґа
jmp inpt // ўбпЄЁ© б«гз ©
}
inpt: asm {
in AL,0x42 // бзЁвлў Ґ¬ ¬« ¤иЁ© Ў ©в
mov AH,AL // ®бў®Ў®¦¤ Ґ¬ AL
in AL,0x42 // бзЁвлў Ґ¬ бв аиЁ© Ў ©в
xchg AH,AL // Ў ©вл ў ®Ўа ⮬ Ї®ап¤ЄҐ
}
return _AX;
}
Соседние файлы в папке GOST_UTI