Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
28
Добавлен:
16.04.2013
Размер:
5.04 Кб
Скачать
/*----------------------------------------------------
  ShowGost.c - Їа®Ја ¬¬  ¤«п ўлў®¤  ®взҐв  ® Їа®жҐббҐ
	       иЁда®ў ­Ёп Ї® ѓЋ‘’ 28147-89
  ----------------------------------------------------
  (c) Copyright 1995 Ђ­¤аҐ© ћа쥢Ёз ‚Ё­®Єга®ў, Њ®бЄў 
  ‚ҐабЁп 1.00, 09.02.95
  ----------------------------------------------------
  Џа®Ја ¬¬  ўл¤ Ґв ®взҐв ® б®бв®п­Ёпе ॣЁбва®ў ¬®¤Ґ-
  «Ё иЁда®ў вҐ«п Ї® ѓЋ‘’ 28147-89. ‚ᥠЇ а ¬Ґвал иЁд-
  а®ў вҐ«п § ¤ овбп Їа®Ё§ў®«м­®, зв®Ўл ‚л ¬®Ј«Ё ®б­®-
  ў вҐ«м­® Ї®Ґ..вм  «Ј®аЁв¬. ќв  Їа®Ја ¬¬  Ўг¤Ґв  ‚ ¬
  ®..ЁвҐ«м­® Ї®«Ґ§­  ЇаЁ ®в« ¤ЄҐ ¬®¤г«Ґ© ѓЋ‘’ .
  ----------------------------------------------------
  ‘ 楫мо  ¤®бвЁ¦Ґ­Ёп  ¬ ЄбЁ¬ «м­®©  Їа®бв®вл  ¤ ­­ п
  Їа®Ја ¬¬   ᮤҐа¦Ёв  «Ёим  ¬Ё­Ё¬ «м­лҐ Їа®ўҐаЄЁ  ­ 
  Є®а४⭮бвм ўе®¤­ле ¤ ­­ле.
  ----------------------------------------------------
*/
#include <ctype.h>	// isspace
#include <io.h>		// eof
#include <stdio.h>	// FILE,scanf,printf,etc....
#include <stdlib.h>	// strtoul,lrotl
#include <string.h>	// strcpy,strlen

typedef struct
{
  unsigned long low,high;
} CryptoBlock;

unsigned short	KeyLength,KeyRepeat;
unsigned long	Key[64];
unsigned short	Cht[8][16];
char		KeyUse[64+1];
CryptoBlock	data;

void main(int argc,char **argv)
{
  FILE     *file;
  unsigned i,j,k,l;
  char	   *p;
  unsigned long Old=0UL;

// ўл¤ з  Є®ЇЁа ©в 
  printf(
  "Џа®Ја ¬¬  ўл¤ зЁ Ї®¤а®Ў­®Ј® ®взҐв  ® Їа®жҐбᥠиЁда®ў ­Ёп "
						 "Ї® ѓЋ‘’ 28147-89\n"
  "(c) Copyright 1995 Ђ­¤аҐ© ћа쥢Ёз ‚Ё­®Єга®ў, Ј.Њ®бЄў \n\n"
     );
  if (argc<6)
  {
    printf(
    "”®а¬ в Є®¬ ­¤­®© бва®ЄЁ § ЇгбЄ  Їа®Ја ¬¬л ¤®«¦Ґ­ Ўлвм б«Ґ¤гойЁ© :\n"
    "\"name ChangeTableFile KeyFile KeyUsingScheme N1 N2\",  Ј¤Ґ :\n"
    "name            - Ё¬п д ©«  б Їа®Ја ¬¬®©;\n"
    "ChangeTableFile - Ё¬п д ©«  б в Ў«ЁжҐ© § ¬Ґ­,"
					 " § ¤ ­­®© ў ⥪бв®ў®© д®а¬Ґ\n"
    "                  ’‡ ¤®«¦­  ᮤҐа¦ вм а®ў­® 128 зЁбҐ« ®в 0 ¤® 255,\n"
    "                  § ЇЁб ­­ле ў 16-аЁз­®© бЁб⥬Ґ бзЁб«Ґ­Ёп;\n"
    "KeyFile         - Ё¬п д ©«  б Є«о箬, ЇаҐ¤бв ў«Ґ­­л¬"
					 " ў бЁ¬ў®«м­®© д®а¬Ґ;\n"
    "                  Є«оз ¤®«¦Ґ­ ᮤҐа¦ вм ®в 1 ¤® 64 н«Ґ¬Ґ­в®ў"
					 " - ¤«Ё­­ле 楫ле\n"
    "                  ЎҐ§ §­ Є , § ЇЁб ­­ле ў 16-аЁз­®© бЁб⥬Ґ;\n"
    "KeyUsingScheme  - бва®Є  Ё§ бЁ¬ў®«®ў 0 Ё 1, "
					 "®ва ¦ ой п Ї®а冷Є ЁбЇ®«м§®ў ­Ёп\n"
    "                  н«Ґ¬Ґ­в®ў Є«оз : 0-ўЇҐаҐ¤, 1-­ § ¤;\n"
    "N1,N2           - ᮮ⢥вб⢥­­® ¬« ¤и п Ё бв аи п з бвЁ"
					 " иЁда㥬®Ј® Ў«®Є ;\n"
    "                  ¤ ­­ле\n"
    "\n"
    );
    return;
  }

// з⥭ЁҐ в Ў«Ёжл § ¬Ґ­
  if(!(file=fopen(argv[1],"rt")))
  {
    printf("ЌҐ ¬®Јг ®вЄалвм д ©« в Ў«Ёжл § ¬Ґ­ - \"%s\"\n");
    return;
  }
  for (i=0; i<8*16; i++)
  {
    fscanf(file,"%hx",Cht[0]+i);
/*  if(eof(fileno(file)) || !isspace(getc(file)))
    {
      printf("ЌҐ¤®ЇгбвЁ¬л© бЁ¬ў®« ў® ўе®¤­®¬ Ї®в®ЄҐ\n");
      return;
    }
*/
  }
  fclose(file);

// з⥭ЁҐ Є«оз 
  if(!(file=fopen(argv[2],"rt")))
  {
    printf("ЌҐ ¬®Јг ®вЄалвм д ©« Є«оз  - \"%s\"\n");
    return;
  }
  for (KeyLength=0; KeyLength<64; KeyLength++)
    if (!(fscanf(file,"%lx",Key+KeyLength)==1))
      break;
  fclose(file);

// з⥭ЁҐ беҐ¬л ЁбЇ®«м§®ў ­Ёп Є«оз 
  if ((KeyRepeat=strlen(argv[3])) > 64)
  {
    printf("‘ва®Є  беҐ¬л ЁбЇ®«м§®ў ­Ёп Є«оз  б«ЁиЄ®¬ ¤«Ё­­ п\n");
    return;
  }
  strcpy(KeyUse,argv[3]);
  for (p=KeyUse; *p; p++)
  {
    if (*p != '0'  &&  *p != '1')
    {
      printf("‚ б奬Ґ ЁбЇ®«м§®ў ­Ёп Є«оз  ¤®ЇгбвЁ¬л в®«мЄ® 0 Ё 1\n");
      return;
    }
  }

// ¤ҐЄ®¤Ёа®ў ­ЁҐ ¤ ­­ле ¤«п иЁда®ў ­Ёп
  data.low=strtoul(argv[4],&p,16);
  if (*p)
  {
    printf("ЌҐ¤®ЇгбвЁ¬л© бЁ¬ў®« ў § ЇЁбЁ 16-аЁз­®Ј® зЁб«  N1 - \"%c\"\n",
	    *p);
    return;
  }
  data.high=strtou(argv[5],&p,16);
  if (*p)
  {
    printf("ЌҐ¤®ЇгбвЁ¬л© бЁ¬ў®« ў § ЇЁбЁ 16-аЁз­®Ј® зЁб«  N2 - \"%c\"\n",
	    *p);
    return;
  }

// ђҐ «Ё§ жЁп  «Ј®аЁв¬  иЁда®ў ­Ёп
// ўл¤ з  § Ј®«®ўЄ 
  printf(
  "Ёда®ў ­ЁҐ ¤ ­­ле Ї® ®Ў®ЎйҐ­­®¬г  «Ј®аЁв¬г ѓЋ‘’ 28147-89\n"
  "<i> <--N2--> <--N1--> <-K[i]-> <N1+Ki > <§ ¬Ґ­ > "
       "<ўа й11> <--N2\'-> <--N1\'->\n"
  );

// ®бгйҐбвў«Ґ­ЁҐ Їа®жҐ¤гал § иЁда®ў ­Ёп
  for (i=0,l=0; i<KeyRepeat; i++)
  {
    putchar('\n');
    for (j=0; j<KeyLength; j++,l++)
    {
      Old=data.low;
      k= (KeyUse[i]=='0') ? j : KeyLength-j-1;
      printf ("%03u %08lx %08lx %08lx",
      k,data.high,data.low,Key[k]);
      data.low+=Key[k];
      printf (" %08lx",data.low);
      for (k=0; k<8; k++)
      {
	unsigned long L;
	L=Cht[k][(unsigned)(data.low & 0x0000000FUL)];
	data.low &= ~0x0000000FUL;
	data.low |= L;
	data.low = _lrotl(data.low,4);
      }
      printf (" %08lx",data.low);
      data.low=_lrotl(data.low,11);
      printf (" %08lx",data.low);
      data.low ^= data.high;
      data.high = Old;
      printf (" %08lx %08lx\n",data.high,data.low);
    }
  }
  printf("\n\n Result=%08lx%08lx",data.low,data.high);

}
Соседние файлы в папке GOST_UTI
  • #
    16.04.20131.2 Кб26MAKEKEYS.MAK
  • #
    16.04.201312.72 Кб28MAKEPSWS.C
  • #
    16.04.20131.2 Кб26MAKEPSWS.MAK
  • #
    16.04.2013670 б27README.1ST
  • #
    16.04.201311.22 Кб28README.TXT
  • #
    16.04.20135.04 Кб28SHOWGOST.C
  • #
    16.04.2013157 б28TEST.PWC
  • #
    16.04.2013177 б28TEST2.PWC
  • #
    16.04.2013152 б27TEST3.PWC
  • #
    16.04.2013154 б26TEST4.PWC