Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Документация по криптоалгоритмам / GOST-28147-89 / GOST_T32 / XCRYPTOR
.C/*----------------------------------------------------
xcryptor.c -- иЁда®ў ЁҐ д ©«®ў Ї® ѓЋ‘’ 28147-89 Ё
¬®¤ЁдЁЄ жЁп¬ Ї®¤ DOS/Win32.
ђ §а Ў®в « Ђ¤аҐ© ћа쥢Ёз ‚Ё®Єга®ў, Ј.Њ®бЄў
(c) 1994-1998 FreeWare
‘ў®Ў®¤®Ґ ЁбЇ®«м§®ў ЁҐ Ё Є®ЇЁа®ў ЁҐ.
----------------------------------------------------
Ќ з в® 1.00 ®в 25.06.94,
‚ҐабЁп 2.00 ®в 05.02.95.
‚ҐабЁп 3.00 ®в 08.03.98.
‚ҐабЁп 3.00 ®в 16.04.98.
‚ҐабЁп 3.01 ®в 07.07.98.
Њ®¤ЁдЁЄ жЁп Ѓ §®ў п ¬®¤ЁдЁЄ жЁп ¤«п i8088-80286
Њ®¤ЁдЁЄ жЁп-386 Њ®¤ЁдЁЄ жЁп ¤«п i386 Ї®¤ „Ћ‘/Win16
Њ®¤ЁдЁЄ жЁп-W32 Њ®¤ЁдЁЄ жЁп ¤«п i386 Ї®¤ Win32
----------------------------------------------------
‚Ё¬ ЁҐ :
‚ўЁ¤г «ЁзЁп ®иЁЎ®Є ў ўҐабЁЁ 1.00, ®ЇгЎ«ЁЄ®ў ®©
ў "Њ®Ёв®аҐ" N 1/95 Ё в Є¦Ґ а бЇа®бва 塞®© б "Њ®-
Ёв®а-¤ЁбЄ®¬", ¤ п Їа®Ја ¬¬ Ґ ў® ўбҐе ०Ё¬ е
б®ў¬ҐбвЁ¬ б гЄ § ®© ўҐабЁҐ© Ї® १г«мв в ¬ иЁд-
а®ў Ёп.
----------------------------------------------------
„®Ў ў«ҐЁп ў ўҐабЁЁ 2.0 (ўҐабЁп 1.0 ®ЇгЎ«ЁЄ®ў
ў ¬®Ёв®аҐ N1/95)
-- inline help;
-- ў®§¬®¦®бвм § иЁда®ўлў вм д ©«л ¤«Ё®©,Єа в®© 8
б Ї®¬®ймо «Ј®аЁв¬ Їа®бв®© § ¬Ґл; ќв® Ї®ў«ҐЄ«®
§ ¬Ґг дгЄжЁЁ а биЁаҐЁп Є«оз ExpKey33;
-- а § а Ў®в ў аЁ в ¤«п 32-ЎЁв®ўле Їа®жҐбб®а®ў
ᥬҐ©бвў Intel 80x86;
-- Ёб祧« ў®§¬®¦®бвм § Јаг¦ вм а биЁаҐл© Є«оз
¤«Ё®© 128 Ў ©в; ¤«Ё § Јаг¦ Ґ¬®Ј® Є«оз - 32
Ў ©в ;
-- ЎгдҐа ¤«п з⥨п д ©« ўл¤Ґ«пҐвбп ¤Ё ¬ЁзҐбЄЁ Ё
ҐЈ® а §¬Ґа®¬ ¬®¦® гЇа ў«пвм;
-- ¤®Ў ўЁ« бм Ў®«ҐҐ ®ЎиЁа п ¤Ё Ј®бвЁЄ ®иЁЎ®Є ў®
ўе®¤ле ¤ ле;
----------------------------------------------------
„®Ў ў«ҐЁп ў ўҐабЁЁ 3.00
-- Їа®Ё§ў®«мл© а §¬Ґа Є«оз , ®¤ Є® ў® Ё§ЎҐ¦ ЁҐ
иЁда®ў Ёп б ®зҐм ¤«Ёл¬ Є«о箬 зЁб«® а 㤮ў
®Ја ЁзҐ® Є®бв в®© MaxKeyItems, Ё§ з «м п
ҐҐ гбв ®ўЄ - 128, ў бв ¤ а⥠- 32;
-- Їа®Ё§ў®«м п б奬 ЁбЇ®«м§®ў Ёп н«Ґ¬Ґв®ў Є«оз ,
§ ¤ Ґвбп ў Є«озҐ Є®¬ ¤®© бва®ЄЁ /m{0|1}...,
нв® Ї®ў«ҐЄ«® § б®Ў®© ЁбЇ®«м§®ў ЁҐ ў Їа®Ја ¬¬Ґ
гЁўҐаб «м®© дгЄжЁЁ а биЁаҐЁп Є«оз ExpKey;
-- бЁеа®Ї®бл«Є ¬®¦Ґв Ўлвм Їа®Ё§ў®«м®©, ў ўҐабЁЁ
2.0 ҐҐ бв аи п Ї®«®ўЁ ўбҐЈ¤ Ўа « бм а ў®© 0;
-- ЁбЇ®«м§гҐвбп ¤агЈ®© бЇ®б®Ў § ¤ Ёп ¬Ґв®¤ иЁда®-
ў Ёп - ў ўҐабЁЁ 2.0 ® § ¤ ў «бп ®в¤Ґ«мл¬ Є«о-
箬 ў Є®¬ ¤®© бва®ЄҐ, ⥯Ґам бЁ¬ў®« ¬Ґв®¤
б«Ґ¤гҐв § бЁ¬ў®«®¬ ®ЇҐа жЁЁ - в Є Їа®йҐ;
----------------------------------------------------
€§¬ҐҐЁп ў ўҐабЁЁ 3.01
-- ЁбЇа ў«Ґ ®иЁЎЄ , ЇаЁў®¤Ёўи п Є ҐўҐа®¬г ўл-
зЁб«ҐЁо Ё¬Ёв®ўбв ўЄЁ;
-- Ґб«Ё а §¬Ґа ®Ў¬Ґ®Ј® ЎгдҐа § ¤ г«Ґўл¬ (/Z0)
® гбв ў«Ёў Ґвбп а ўл¬ ¬ ЄбЁ¬ «м® ¤®ЇгбвЁ¬®-
¬г а §¬Ґаг;
-- § ¤ ў п а §¬Ґа ЎгдҐа ў Є«озҐ /Z, ¬®¦® гЄ §л-
ў вм а §¬Ґа®бвм K (ЄЁ«®Ў ©вл) Ё«Ё M (¬ҐЈ Ў ©вл
- в®«мЄ® ¤«п Win32) - ЇаЁ¬Ґа, /Z12K Ё«Ё /Z1M;
-- Ї®Їа ў«Ґ ⥪бв®ўл© ўлў®¤ ў ҐЄ®в®але ¬Ґбв е;
----------------------------------------------------
‚ аЁ вл Є®¤Ёа®ў Ёп:
‘Ё¬ў®« VarKey:
-- Ґб«Ё § ¤ , ў Їа®Ја ¬¬Ґ ॠ«Ё§говбп ў®§¬®¦®бвЁ
ЁбЇ®«м§®ў Ёп Є«оз ЇҐаҐ¬Ґ®Ј® а §¬Ґа Ё Їа®Ё§-
ў®«м®© ¬ бЄЁ Їа ў«ҐЁ© Їа®б¬®ва н«Ґ¬Ґв®ў
Є«оз ;
-- Ґб«Ё Ґ § ¤ , Їа®Ја ¬¬ иЁдагҐв бва®Ј® Ї® ѓЋ‘’г
ЎҐ§ ў®§¬®¦®бвЁ ЁбЇ®«м§®ў вм ҐЈ® ¬®¤ЁдЁЄ жЁЁ;
----------------------------------------------------
*/
#include <io.h> // open, filelength
#include <fcntl.h> // O_xxxxx
#include <memory.h> // memset,memcpy
#include <stdlib.h> // strtoul,ultoa,toupper,
// malloc,free
#include <ctype.h> // toupper (BorlandC)
#include <stdio.h> // printf
#include <string.h> // strlen
#include <sys\stat.h> // S_IREAD,S_IWRITE
#ifdef __BORLANDC__
# include <alloc.h> // farmalloc
#endif
#ifndef _WIN32
# include <dos.h> // farmalloc
#endif
#include "gost.h" // „ лҐ Ё Їа®в®вЁЇл ѓЋ‘’
#define DefaultBufferSize 512
#ifdef _WIN32
# define far
# define huge
# define MaxBufferSize 1048576
# define __memset memset
# define __memcpy memcpy
# define __malloc malloc
# define __read(a,b,c) _read(a,b,c)
# define __write(a,b,c) _write(a,b,c)
#else
# define MaxBufferSize 65528
# define __memset _fmemset
# define __memcpy _fmemcpy
# define __malloc farmalloc
# define __read(a,b,c) (_dos_read(a,b,c,&bytesread),bytesread)
# define __write(a,b,c) (_dos_write(a,b,c,&bytesread),bytesread)
#endif
enum { MaxKeyItems = 128 };
typedef enum
{
O_K_=0, // ўбҐ O.K.
errDoNotMatch, // Ґб®ўЇ ¤ҐЁҐ Ё¬Ёв®ўбв ўЄЁ
errNoParam, // § ЇгбЄ ЎҐ§ Ї а ¬Ґва®ў
errInvalidFlag, // ҐўҐал© д« Ј ўл§®ў Їа®Ја ¬¬л
errBadMemorySize, // ҐўҐа® § ¤ а §¬Ґа ЎгдҐа
errMissingSynchro,// ў Є«озҐ /s Ґв бЁеа®Ї®бл«ЄЁ
errBadSynchro, // ҐўҐа® § ¤ бЁеа®Ї®бл«Є
errBadImito, // ҐўҐа® § ¤ Ё¬Ёв®ўбв ўЄ
errTooFiewParm, // ¬ «® Ї а ¬Ґва®ў ўл§®ў
errTooManyParm, // ¬®Ј® Ї а ¬Ґва®ў ўл§®ў
errMissingKey, // ў Є«озҐ /k Ґ § ¤ ® Ё¬п д ©«
errBadKey, // Ї«®е®© д ©« Є«оз
errMissingXCHT, // ў Є«озҐ /б Ґ § ¤ ® Ё¬п д ©«
errBadXCHT, // Ї«®е®© д ©« б в Ў«ЁжҐ© § ¬Ґ
errInvalidOper, // ҐўҐа п ®ЇҐа жЁп
errSourceFailure, // ®иЁЎЄ д ©«Ґ-Ёбв®зЁЄҐ
errNotDividedBy8, // ¤«Ё д ©« Ґ Єа в 8
errTargetFailure, // ®иЁЎЄ д ©«Ґ-ЇаЁҐ¬ЁЄҐ
errRenameFailure, // ®иЁЎЄ ЇаЁ ЇҐаҐЁ¬Ґ®ў ЁЁ
errDeleteFailure, // ®иЁЎЄ ЇаЁ г¤ «ҐЁЁ Ёбе. д ©«
#ifdef VarKey
errMissingScheme, // ў Є«озҐ /m Ґв б奬л
errBadScheme, // ў Є«озҐ /m § ¤ ҐўҐа п б奬
errKeyTooLong, // ‘«ЁиЄ®¬ ¤«Ёл© Є«оз иЁда®ў Ёп
#endif
errInsufMemory, // ЌҐ еў в Ґв ¤Ё ¬ЁзҐбЄ®© Ї ¬пвЁ
dummy // дЁЄвЁў®Ґ § 票Ґ
} errList;
unsigned char chtab[1024];
void far* buffer=NULL;
unsigned long Memory=DefaultBufferSize;
Item far *Key, // ¤аҐб Є«оз иЁда®ў Ёп
far *KeyImito; // ¤аҐб Є«оз ўла Ў®вЄЁ
// Ё¬Ёв®ўбв ўЄЁ
Item Synchro[2]= // бЁеа®Ї®бл«Є
{
0UL,0UL
};
Item Imito[2]=
{
0UL,0UL
};
Item _Imito;
errList code=O_K_; // Є®¤ ўл室
int BackLink= 0; // иЁда®ў вм б Ћ‘
int ShowImito= 0; // Ї®Є § вм Ё¬Ёв®ЇаЁбв ўЄг
int CheckImito=0; // Їа®ўҐаЁвм Ё¬Ёв®ЇаЁбв ўЄг
int Operation= 0; // § иЁда®ў ЁҐ
int ParmCount= 0; // бзҐвзЁЄ Ї а ¬Ґва®ў
int Deletion= 0; // г¤ «ҐЁҐ Ёб室ЁЄ
int SimpleChange=0; // Џа®бв п § ¬Ґ
int KeyRepeat= 4; // —Ёб«® Ї®ўв®аҐЁ© Є«оз
int KeyMask= 8; // ‘в ¤ ав п ¬ бЄ 0001
int KeySize= 32; // —Ёб«® а 㤮ў иЁда®ў Ёп
int iKeySize= 16; // —Ёб«® а 㤮ў Ё¬Ёв®ўбв ўЄЁ
char *KeyFile= NULL;// д ©« Є«оз
char *ChtFile= NULL;// д ©« в Ў«Ёжл § ¬Ґ
char *InFile= NULL;// Ёбе®¤л© д ©«
char *OutFile= NULL;// д ©« १г«мв в
#ifndef _WIN32
unsigned bytesread; // ‚бЇ®¬®Ј в. ЇҐаҐ¬Ґ п
#endif
// Џа®в®вЁЇл дгЄжЁ©
errList setParam (int argc, char **argv);
errList SignalError (errList errType,
char *errPlace);
errList loadCht (void);
errList loadKey (void);
errList execute (void);
// ѓ« ў п Їа®Ја ¬¬ ¬®¤г«п
errList main(int argc, char *argv[])
{
unsigned short i;
#if defined(CPU386) && !defined(_WIN32)
void ge386CPU(void);
ge386CPU();
#endif
printf(
#ifdef VarKey
"Џа®Ја ¬¬ иЁда®ў Ёп ¤ ле Ї® ¬®¤ЁдЁжЁа"
"®ў л¬ ў аЁ в ¬ ѓЋ‘’ 28147-89\n"
#else
"Џа®Ја ¬¬ иЁда®ў Ёп ¤ ле Ї® ѓЋ‘’ 2814"
"7-89\n"
#endif
"‚ҐабЁп 3.01"
#ifdef _WIN32
"-W32"
#else
# ifdef CPU386
"-386"
# endif
#endif
",а §а Ў®в « Ђ.‚Ё®Єга®ў, "
"бў®Ў®¤®Ґ ЁбЇ®«м§®ў ЁҐ Ё Є®ЇЁа®ў ЁҐ.\n"
);
// ќв®в жЁЄ« бва®Ёв ваЁўЁ «мго в Ў«Ёжг § ¬Ґ
// “¤ «ЁвҐ ҐЈ®, Ґб«Ё Ўг¤ҐвҐ ЁЁжЁ «Ё§Ёа®ў вм chtab
for (i=0; i<1024; i++) chtab[i]=(unsigned char)i;
return
argc<=1 ? SignalError(errNoParam,NULL) :
(code=setParam(argc,argv))!=O_K_ ? code :
!InFile ? SignalError(errTooFiewParm,NULL) :
(ChtFile && loadCht() != O_K_) ?
SignalError(errBadXCHT,ChtFile) :
loadKey() != O_K_ ?
SignalError(errBadKey,KeyFile) :
execute();
}
// гбв ®ўЄ ०Ё¬®ў б®Ј« б® д« Ј ¬ ўл§®ў
errList setParam(int argc, char **argv)
{
for ( ; ++argv,--argc; ) // Їа®б¬®ва аЈг¬Ґв®ў
{
char *c,d;
int length;
#ifdef VarKey
int weight;
#endif
if (**argv=='/') // Є«оз Є®¬ ¤®© бва®ЄЁ
switch (toupper(*(*argv+1))) // ўлЎ®а Ї® ЎгЄўҐ
{
case 'D': Deletion=1; break;
case 'K':
if (!*(KeyFile=*argv+2))
return SignalError(errMissingKey,*argv);
break;
case 'C':
if (!*(ChtFile=*argv+2))
return SignalError(errMissingKey,*argv);
break;
case 'Z':
if (!*(*argv+2))
Memory=MaxBufferSize;
else
{
Memory=strtoul(*argv+2,&c,10);
switch(*c)
{
case 'K': case 'k': Memory *= 1024; c++; break;
#ifdef _WIN32
case 'M': case 'm': Memory *= 1048576; c++; break;
#endif
}
}
if (*c) return SignalError(errBadMemorySize,*argv+2);
if (!Memory) Memory = MaxBufferSize;
break;
case 'S':
if (!*(*argv+2))
return SignalError(errMissingSynchro,*argv+2);
length=strlen(*argv);
if (length<=10)
if (Synchro[0]=strtoul(*argv+2,&c,16),*c)
return SignalError(errBadSynchro,*argv+2);
else
{
if (Synchro[0]=strtoul(*argv+length-8,&c,16),*c)
return SignalError(errBadSynchro,*argv+2);
d=*(*argv+length-8);
*(*argv+length-8)=0;
if (Synchro[1]=strtoul(*argv+2,&c,16),*c)
return *(*argv+length-8)=d,
SignalError(errBadSynchro,*argv+2);
}
break;
#ifdef VarKey
case 'M':
for (KeyRepeat=KeyMask=0, weight=1;
*(*argv+2+KeyRepeat);
KeyRepeat++,weight<<=1)
{
switch(*(*argv+2+KeyRepeat))
{
default:
return SignalError(errBadScheme,*argv+2);
case '1':
KeyMask |= weight;
case '0': ;
}
}
if (!KeyRepeat)
return SignalError(errMissingScheme,*argv+2);
break;
#endif
case 'I':
if (*(*argv+2))
if (_Imito=strtoul(*argv+2,&c,16),*c)
return SignalError(errBadImito,*argv+2);
else CheckImito=ShowImito=1;
else ShowImito=1;
break;
default:
return SignalError(errInvalidFlag,*argv);
}
else switch(ParmCount++) // ¤агЈ®© аЈг¬Ґв
{
default:
return SignalError(errTooManyParm,*argv);
case 0: // ¤ҐЄ®¤Ёа㥬 дгЄжЁо
if (*(*argv+1) && *(*argv+2)) // > 2 ЎгЄў
return SignalError(errInvalidOper,*argv);
switch(toupper(**argv)) // бЁ¬ў®« ®ЇҐа жЁЁ ?
{
default: // ®иЁЎЄ
return SignalError(errInvalidOper,*argv);
case 'D': Operation=1;// а биЁда®ў ЁҐ
case 'E':; // § иЁда®ў ЁҐ
}
switch(toupper(*(*argv+1))) // бЁ¬ў®« ¬Ґв®¤ ?
{
default: // ®иЁЎЄ
return SignalError(errInvalidOper,*argv);
case 'B':
SimpleChange=0; BackLink=1; break;
case 'G': case '\0':
SimpleChange=0; BackLink=0; break;
case 'S':
SimpleChange=1; break;
}
break;
case 1: // ®ЇаҐ¤Ґ«пҐ¬ Ёбв®зЁЄ
InFile=*argv; break;
case 2: // ®ЇаҐ¤Ґ«пҐ¬ ЇаЁҐ¬ЁЄ
OutFile=*argv;
}
}
return O_K_;
}
// ‡ Јаг§Є в Ў«Ёжл § ¬Ґ
errList loadCht(void)
{
int handle,FileSize;
unsigned char buffer[128];
if ((handle=open(ChtFile,O_RDONLY|O_BINARY))==-1 ||
((FileSize=filelength(handle)) != 128 &&
FileSize != 1024) ||
read(handle,
FileSize==128 ? buffer : chtab,FileSize)==-1)
return errBadKey;
if (FileSize == 128)
ExpCht((Item *)buffer,(Item *) chtab);
close(handle);
return O_K_;
}
// €ўҐавЁа®ў ЁҐ ¬ бЄЁ Є«оз
unsigned int inverse(unsigned int arg,
unsigned int size)
{
unsigned int result = 0;
for ( arg=~arg; size; size--)
{
result=(result<<1) + (arg & 1);
arg >>= 1;
}
return result;
}
// ‡ Јаг§Є Є«оз
errList loadKey(void)
{
int handle;
unsigned long FileSize;
unsigned int inverse(unsigned int arg, unsigned int size);
if (KeyFile)
{
if ((handle=open(KeyFile,O_RDONLY|O_BINARY))==-1 ||
((FileSize=filelength(handle))
#ifdef VarKey
% sizeof (Item)) || FileSize == 0)
#else
) != 32)
#endif
return errBadKey;
}
else
FileSize = 32;
#ifdef VarKey
if (FileSize / sizeof (Item) * KeyRepeat > MaxKeyItems)
return errKeyTooLong;
KeySize = FileSize / sizeof (Item) * KeyRepeat;
iKeySize = 1 + (ShowImito && KeyRepeat > 2);
#else
KeySize = 32;
iKeySize = 1 + ShowImito;
#endif
if (!(Key = __malloc((iKeySize+KeyRepeat)*FileSize)))
return errInsufMemory;
KeyImito = (Item far *)
((char huge *) Key + FileSize * KeyRepeat);
if (KeyFile)
{
if (__read(handle, KeyImito, FileSize) <
(signed long) FileSize)
return errBadKey;
}
else
__memset(KeyImito, 0, FileSize);
if (iKeySize == 2)
__memcpy((char far *) KeyImito+FileSize,
KeyImito,FileSize);
iKeySize*=FileSize/sizeof (Item);
ExpandKey (KeyImito, Key, FileSize/sizeof (Item),
KeyRepeat,
SimpleChange && Operation ?
inverse(KeyMask,KeyRepeat) : KeyMask);
close(handle);
return O_K_;
}
// ЋбгйҐбвў«ҐЁҐ иЁда®ў Ёп
errList execute(void)
{
int inHandle,outHandle,same,lastloop;
long FileSize;
char number[11];
unsigned long quant,blocks;
// Ї®¤Ј®в®ўЄ д ©«®ў
if (!BackLink && !SimpleChange)
simple(Key,Synchro,chtab,1
#ifdef VarKey
,KeySize
#endif
);
if ((same=!OutFile)!=0)
OutFile="$$$$$$$$.$$$";
if((inHandle=open(InFile,O_RDONLY|O_BINARY))==-1 ||
(FileSize=filelength(inHandle))== -1 ||
FileSize == 0)
return SignalError(errSourceFailure,InFile);
if(SimpleChange && filelength(inHandle)%8)
return SignalError(errNotDividedBy8,
ultoa(filelength(inHandle),number,10));
if((outHandle=open(OutFile,
O_WRONLY|O_CREAT|O_BINARY|O_TRUNC,
S_IREAD|S_IWRITE))==-1)
return SignalError(errTargetFailure,OutFile);
// ўл¤Ґ«ҐЁҐ Ї ¬пвЁ
if (Memory>(unsigned long)FileSize) Memory=FileSize;
Memory=(Memory+7UL) & 0xFFFFFFF8UL;
if (Memory>MaxBufferSize) Memory=MaxBufferSize;
if(!(buffer=__malloc(Memory)))
return SignalError(errInsufMemory,NULL);
// Notification
printf("ђ §¬Ґа ®Ў¬Ґ®Ј® ЎгдҐа - %lu Ў ©в®ў\n",Memory);
printf("%sиЁда®ў ЁҐ д ©« %s"
#ifdef VarKey
", %sбв ¤ авл© аҐ¦Ё¬"
#endif
"\n",
Operation ? "ђ б" : "‡ ", InFile
#ifdef VarKey
,KeyMask==8 && KeyRepeat==4 && KeySize==32 ? "" : "Ґ"
#endif
);
// жЁЄ« иЁда®ў Ёп
for ( lastloop=0, blocks=(quant=Memory)/sizeof(CrBlock) ;
FileSize>0 ;
FileSize-=Memory)
{
if ((unsigned long) FileSize < Memory)
{
quant = (unsigned long) FileSize;
blocks= (quant+sizeof(CrBlock)-1)/sizeof(CrBlock);
lastloop = 1;
}
if ((unsigned long)__read(inHandle,buffer,quant) < quant)
return SignalError(errSourceFailure,InFile);
if (!Operation && ShowImito)
{
if (lastloop && FileSize % 8)
__memset((char far *)buffer+FileSize, 0, 8-FileSize%8);
imito (KeyImito,Imito,chtab,buffer,blocks
#ifdef VarKey
,iKeySize
#endif
);
}
if(SimpleChange)
simple(Key,buffer,chtab,blocks
#ifdef VarKey
,KeySize
#endif
);
else
(BackLink ? Operation ? gammaLD : gammaLE : gamma)
(Key,Synchro,chtab,buffer,blocks
#ifdef VarKey
,KeySize
#endif
);
if (Operation && ShowImito)
{
if (lastloop && FileSize % 8)
__memset((char far *)buffer+FileSize, 0, 8-FileSize%8);
imito (KeyImito,Imito,chtab,buffer,blocks
#ifdef VarKey
,iKeySize
#endif
);
}
if ((unsigned long)__write(outHandle,buffer,quant) < quant)
return SignalError(errTargetFailure,OutFile);
}
// § ўҐаи ойЁҐ ¤Ґ©бвўЁп
close(inHandle);
close(outHandle);
if(ShowImito)
{
printf("€¬Ёв®ўбв ўЄ ");
if(CheckImito)
printf(" %s б®ўЇ ¤ Ґв !\n",
Imito[1]==_Imito ? "" : " Ќ… ");
else
printf("=%lx\n",Imito[1]);
}
if (Deletion || same)
{
if (unlink(InFile)==-1)
return SignalError(errDeleteFailure,InFile);
if (same && rename(OutFile,InFile)==-1)
return SignalError(errRenameFailure,InFile);
}
return O_K_;
}
// ‚л¤ з б®®ЎйҐЁп ®Ў ®иЁЎЄҐ
errList SignalError(errList errType, char *errPlace)
{
char *errText[]=
{
"Љ®¬ ¤ § ЇгбЄ Їа®Ја ¬¬л : \"Ё¬п [/Є«оз]... дгЄжЁ"
"п Ёб室ЁЄ [१г«мв в]\" , Ј¤Ґ\n"
"/Є«оз - ®¤Ё Ё«Ё ҐбЄ®«мЄ® Є«о祩 Ё§ б«Ґ¤го饣® б"
"ЇЁбЄ :\n"
" /d - гЁз⮦ҐЁҐ Ёб室®Ј® д ©« Ї®б«Ґ гб"
"ЇҐи®Ј® иЁда®ў Ёп;\n"
" /k<д ©«>,/c<д ©«> - § ¤ Ґв д ©« б Є«о箬 (k) Ё«"
"Ё в Ў«ЁжҐ© § ¬Ґ (c). ‡¤Ґбм\n"
" <д ©«> - «оЎ®Ґ ¤®ЇгбвЁ¬®Ґ ў MS-DOS Ё"
"¬п д ©« , и Ў«®л Ґ¤®ЇгбвЁ¬л;\n"
" Џ® 㬮«з Ёо ЎҐаҐвбп г«Ґў®© Є«оз "
"Ё ⮦¤Ґб⢥ п в Ў«Ёж § ¬Ґ;\n"
" /s<§ 票Ґ> - § ¤ Ґв бЁеа®Ї®бл«Єг, <§ 票Ґ>"
" - ®в 1 ¤® 16 16-аЁзле жЁда;\n"
#ifdef VarKey
" /m<б奬 > - § ¤ Ґв б奬㠨ᯮ«м§®ў Ёп н«Ґ¬Ґв®"
"ў Є«оз , <б奬 > - Ї®б«Ґ¤®ў -\n"
" ⥫м®бвм н«Ґ¬Ґв®ў 0 Ё 1, ®§ з ойЁ"
"е Їаאַ© Ё ®Ўа вл© Ї®а冷Є;\n"
#endif
" /i[<§ 票Ґ>] - § ¤ Ґв ०Ё¬ ўлзЁб«ҐЁп Ё¬Ёв®ў"
"бв ўЄЁ; Ґб«Ё § 票Ґ - ®в 1\n"
" ¤® 8 16-аЁзле жЁда - § ¤ ®, нЄа"
" ўлў®¤Ёвбп १г«мв в ҐЈ®\n"
" ба ўҐЁп б ўлзЁб«Ґл¬, Ё зҐ ўлў®¤"
"Ёвбп ўлзЁб«Ґ®Ґ § 票Ґ.\n"
#ifdef _WIN32
" /z[<а §¬Ґа>[K|M]] ®ЇаҐ¤Ґ«пҐв а §¬Ґа ЎгдҐа ®Ў¬Ґ"
" ў [K|M]Ў ©в е, Ґб«Ё а §¬Ґа\n"
#else
" /z[<а §¬Ґа>[K]] ®ЇаҐ¤Ґ«пҐв а §¬Ґа ЎгдҐа ®Ў¬Ґ"
" ў [K]Ў ©в е, Ґб«Ё а §¬Ґа\n"
#endif
" Ґ § ¤ ў Є«озҐ, а ўҐ 0 Ё«Ё ЇаҐўл"
"и Ґв ¬ ЄбЁ¬ «м®Ґ § 票Ґ, в®\n"
" ЎҐаҐвбп ¬ ЄбЁ¬ «м®Ґ § 票Ґ, Ґб«Ё "
"ҐЄа ⥠8, ®ЄагЈ«пҐвбп ўўҐае.\n"
"дгЄжЁп - {e|d}[g|b|s] -1-© бЁ¬ў®«: e-§ иЁда®ў Ё"
"Ґ, d-а биЁда®ў ЁҐ; 2-© бЁ¬ў®«\n"
"-¬Ґв®¤ иЁда®ў Ёп: g-Ј ¬¬Ёа®ў ЁҐ (Ї® 㬮«з Ёо),"
"b-Ј ¬¬Ёа®ў ЁҐ б ®Ўа в®© бўп-\n"
"§мо, s-Їа®бв п § ¬Ґ . ‚ Ї®б«Ґ¤Ґ¬ б«гз Ґ ¤«Ё и"
"Ёда㥬®Ј® д ©« ¤/Ў Єа в 8.\n"
"Ёб室ЁЄ,१г«мв в - Ё¬п иЁда㥬®Ј® д ©« Ё д ©« "
" ¤«п § ЇЁбЁ १г«мв в . …б«Ё\n"
"д ©« १г«мв в Ґ § ¤ , в® ® § ¬Ґй Ґв иЁда㥬л"
"© д ©«.\n",
"ЌҐўҐал© д« Ј ўл§®ў Їа®Ја ¬¬л - \"%s\". „«п Ї®«гзҐ"
"Ёп Ёд®а¬ жЁЁ ® Є®¬ ¤®©\n"
"бва®ЄҐ Їа®Ја ¬¬л § ЇгбвЁвҐ ҐҐ ЎҐ§ Ї а ¬Ґва®ў\n",
"ЌҐўҐа® § ¤ а §¬Ґа ЎгдҐа - %s\n",
"‘Ёеа®Ї®бл«Є ®вбгвбвўгҐв ў Є«озҐ /s\n",
"ЌҐўҐа® § ¤ бЁеа®Ї®бл«Є - %s\n",
"ЌҐўҐа® § ¤ Ё¬Ёв®ЇаЁбв ўЄ - %s\n",
"ЌҐ®Ўе®¤Ё¬л Є®¤ дгЄжЁЁ Ё Ё¬п иЁда㥬®Ј® д ©« \n",
"‹ЁиЁ© Ї а ¬Ґва ўл§®ў - %s\n",
"€¬п д ©« б Є«о箬 ®вбгвбвўгҐв ў Є«озҐ /k\n",
"ЌҐўҐа® § ¤ д ©« б Є«о箬 - %s\n",
"€¬п д ©« б в Ў«ЁжҐ© § ¬Ґ ®вбгвбвўгҐв ў Є«озҐ /c\n",
"ЌҐўҐа® § ¤ д ©« б в Ў«ЁжҐ© § ¬Ґ - %s\n",
"ЌҐўҐа® § ¤ ўлЇ®«пҐ¬ п ®ЇҐа жЁп - %s\n",
"ЋиЁЎЄ Ёб室®¬ д ©«Ґ - %s\n",
"ЏаЁ Їа®бв®© § ¬ҐҐ ¤«Ё д ©« - %s - Ґ Єа в 8\n",
"ЋиЁЎЄ д ©«Ґ १г«мв в - %s\n",
"ЌҐў®§¬®¦® ЇҐаҐЁ¬Ґ®ў вм д ©« $$$$$$$$.$$$ ў %s\n",
"ЌҐў®§¬®¦® г¤ «Ёвм д ©« %s\n",
#ifdef VarKey
"‚ Є«озҐ /m Ґв беҐ¬л ЁбЇ®«м§®ў Ёп Є«оз \n",
"‚ Є«озҐ /m § ¤ ҐўҐа п б奬 - %s\n",
"‘«ЁиЄ®¬ ¤«Ёл© Є«оз иЁда®ў Ёп\n",
#endif
"ЌҐ еў в Ґв ¤Ё ¬ЁзҐбЄ®© Ї ¬пвЁ\n"
};
printf(errText[errType-2],errPlace);
return errType;
}
Соседние файлы в папке GOST_T32