Основы криптографии

История, предпосылки развития, необходимость применения криптографии в жизни общества. Описание протоколов, цифровых подписей, алгоритмов, ключей. Криптоанализ, формальный анализ протоколов проверки подлинности и обмена ключами. Практическая криптография.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 23.12.2011
Размер файла 767,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

И наконец, последняя часть - цифровые подписи

Цифровые подписи (сигнатура)

B августе 1991 года Национальный институт стандартов и техники Rational Institute of Standards and Technology, MST) предложил для использования в своем Стандарте цифровой подписи (Digital Signature Standard, DSS) Алгоритм цифровой подписи (Digital Signature Algorithm, DSA).

Описание DSA

DSA, представляющий собой вариант алгоритмов подписи EIGamal.

Алгоритм использует следующие параметры :

p = простое число длиной L битов, где L принимает значение, кратное 64, в диапазоне от 512 до 1024 (в первоначальном стандарте размер p был фиксирован и равен 512 битам ).

q = 160-битовой простое число - множитель p-1.

g = h(p-1)/q mod p, где h - любое число, меньшее p-l, для которого h(p-1)/q mod p больше 1.

x = число, меньшее q.

у = gx mod p.

B алгоритме также используется однонаправленная хэш-функция : H(m)

Первые три параметра, p, q и g, открыты и могут быть общими для пользователей сети . Закрытым ключом является x, а открытым - у. Чтобы подписать сообщение, т:

А генерирует случайное число k, меньшее q

А генерирует

r = (gk mod p) mod q

s = (k-1 (H(m) + xr)) mod q

Eго подписью служат параметры r и s, он посылает их В.

(3) В проверяет подпись, вычисляяw = s-1 mod q

u1 = (H(m} * w) mod q

u2 = (rw) mod q

v = ((g"1 *y"2 ) mod p) mod q

Если v = r, то подпись правильна.

Таблица представляет собой краткое описание алгоритма.

Подписи DSA

Открытый ключ

p

простое число длиной от 512 до 1024 битов (может использоваться группой пользователей)

q

160-битовый простой множитель р-1

g

=h(p-1)/q mod p, где h любое число меньше p-1, для которого h(p-1)/q >1

y

=gx mod p -p битовое число

Закрытый ключ

x

< q (160-битовое число)

Подпись:

k

выбирается случайно, меньшее q

r

(подпись)=(gk mod p) mod q

s

(подпись)=(k-1 (H(m)+xr)) mod q

Проверка

w

s-1mod q

u1

(H(m)*w)modq

u2

(rw) mod q

V

= ((gu1 *yu2) mod p) mod q

Если v = r, то подпись правильна.

Ускоряющие предварительные вычисления

Ниже приведены примеры скорости работы программных реализаций DSA .

Скорость DSA для различных длин модулей с 160-битовым показателем степени

512битов 768битов 1024битаПодпись 0.20 с 0.43 с 0.57 с

Проверка 0.35c 0.80c 1.27c

Практические реализации DSA часто можно ускорить с помощью предварительных вычислений. Обратите внимание, что значение r не зависит от сообщения. Можно создать строку случайных значений k, и затем рассчитать значения r для каждого из них. Можно также вычислить k-1 для каждого из этих значений k. Затем, когда приходит сообщение, можно вычислить s для заданных r и k-1.

Эти предварительные вычисления заметно ускоряют DSA. Ниже приведены сравнения времени вычисления DSA и RSA для конкретной реализации интеллектуальной карточки [

Сравнение времени вычислений RSA и DSA

DSA

RSA

DSA с общими р, q, g

Глобальные вычисления

Off-card (P)

N/A

Off-card (P)

Генерация ключа

14с

Off-card (S)

Предварительные вычисления

14с

N/A

Подпись

0.03с

15c

0.03с

Проверка

16с

1.5с

Юс

1-5 с off-card (P)

1-3 с off-card (P)

B обоих алгоритмах используется 512-битовый модуль.

Шифрование ElGamal с DSA

Утверждалось, что DSA так нравится правительству, потому что его нельзя использовать в качестве алгoритма шифрования. Однако можно использовать вызов функции DSA для шифрования EIGamal. Пусть алгоритм реализован как вызов одной функции

DSAsign (p, q, g, k, x, h, r, s)

Задав входные значения p, q, g, k, x и h, можно получить параметры подписи: r и s.

Для шифрования сообщения m алгоритмом EIGamal с помощью открытого ключа у выберем случайное число k и вызовем

DSAsign (p,p, g, k, 0, 0, r, s)

Возвращенное значение r и будет а из схемы EIGamal. Отбросим s. Затем вызовем:

DSAsign (p,p, у, k, 0, 0, r, s)

Переименуем значение r в u, отбросим s. Вызовем

DSAsign (p,p,m,l,u,O,r,s)

Отбросим r. Возвращенное значение s и будет b в схеме EIGamal. Теперь у вас есть шифротекст, а и b. Дешифрирование также просто. Используя закрытый ключ x и шифротекст сообщений, а и b, вызовем

DSAsign (p,p,a,x,0,0,r,s)

Значение r - это ax mod p. Назовем его e. Затем:

DSAsign (p,p,1,e,b,0,r,s)

Значение s и будет открытым текстом сообщения, m.

Этот способ работает не со всеми реализациями DSA - в некоторых из них могут быть зафиксированы знaчения p и q или длины некоторых других параметров. Тем не менее, если реализация является достаточно общей, то можно шифровать сообщение, не используя ничего, кроме функции цифровой подписи.

Шифрование RSA с DSA

Шифрование RSA еще проще. Используя модуль n, сообщение т и открытый ключ e, вызовем

DSAsign (n,n,m,e,0,0,r,s)

Возвращенное значение r и есть шифротекст. Дешифрирование RSA является точно таким же. Если d - закрытый ключ, то

DSAsign (n,n,m,d,0,0,r,s)

возвращает открытый текст как значение r.

Заключение

В данной работе я дал краткий обзор основных систем криптографии. Следует уточнить- я описывал классические, традиционные, системы шифрования. Конечно существуют и другие реализации симметричных систем (LOKI, NewDES, IDEA, SKIPJAK и.т.д) и систем с открытым ключём (LUC, Rabin)- но принцип действия, у них остается таким-же. Иными словами, я не задавался целью описать все известные системы- целью являлось дать общее описание, и по возможности простым языком.

В конце работы хочу привести исодные коды некоторых алгоритмов (на С)

Недавно меня спросили «А почему С?. Почему, скажем не Delphi, VisualBasic?»

Ответ на данной вопрос довольно прост…. Ну хотябы начнём с того что большинство современных языков базируются на С… точнее будет сказать что концепция обектно-орентированного программирования впервые была применнена в С++.Второе это то что любое написанное на С приложение достаточно легко перенести на другую платформу, например под UNIX. Ну и третьё и заключительное утверждение- Все алгоритмы киптографических систем публикуются и доступны всему миру на С++! Пожалуй этих трех аргументов достаточно, чтоб оправдять и сам выбор языка и меня .

Список литературы

1) Bruce Schneier, "Applied Cryptography: Protocols, Algorithms, and Source Code in C"

2) Landreth, Bill, “A Hacker's Guide to Computer Security”

3) Friedman, W.F., -“Elements of Cryptanalysis”

4) Sarnoff, Jane and Ruffins, Reynold.- “The Code and Cipher Book”

5) Владимир Жельников “Криптография от папируса до компьютер”

6) http://www.cryptography.ru

7) http://www.rsa.com

8) http://www.nsa.gov

9) http://www.pgpi.org

10) http://www.fssr.ru

11) http://www.citforum.ru/internet/securities/cryptobook.shtml

12) http://anmal.narod.ru/secyriti/algorithms/cryptography_algorithms.html

Приложение

DES

// The following DES code has been based and modified from "ALLENDES"

// by Steve Allen. 32 bit modifications, and MS visual C++ wrappers and

// implementations by Aman for inclusion into the "Scramdisk" system for

// MS Windows standard, and 3 key triple des, implemented. CBC feedback

// implemented by the caller. (outer CBC)

#define DES_ENCRYPT 1

#define DES_DECRYPT 0

//#define DEVICEDRIVER // uncomment for driver code......

typedef struct deskey // scramdisk key storage (in ram)

{

unsigned char e[16*8];

unsigned char d[16*8]; // key 2only used in EDE 3des mode......

unsigned char e2[16*8];// key 3 only used in EDE 3des mode

}deskey;

#ifdef DEVICEDRIVER

#pragma VxD_LOCKED_DATA_SEG

#endif

deskey sdisk_des_keys[8]; // 4 scramdisk disks

#if DEVICEDRIVER

#pragma VxD_LOCKED_DATA_SEG

#endif

unsigned long p1[]=

{

0x00000000, 0x00000000,

0x01000000, 0x00000000,

0x00000000, 0x01000000,

0x01000000, 0x01000000,

0x00010000, 0x00000000,

0x01010000, 0x00000000,

0x00010000, 0x01000000,

0x01010000, 0x01000000,

0x00000000, 0x00010000,

0x01000000, 0x00010000,

0x00000000, 0x01010000,

0x01000000, 0x01010000,

0x00010000, 0x00010000,

0x01010000, 0x00010000,

0x00010000, 0x01010000,

0x01010000, 0x01010000,

0x00000000, 0x00000000,

0x00000100, 0x00000000,

0x00000000, 0x00000100,

0x00000100, 0x00000100,

0x00000001, 0x00000000,

0x00000101, 0x00000000,

0x00000001, 0x00000100,

0x00000101, 0x00000100,

0x00000000, 0x00000001,

0x00000100, 0x00000001,

0x00000000, 0x00000101,

0x00000100, 0x00000101,

0x00000001, 0x00000001,

0x00000101, 0x00000001,

0x00000001, 0x00000101,

0x00000101, 0x00000101,

0x00000000, 0x00000000,

0x02000000, 0x00000000,

0x00000000, 0x02000000,

0x02000000, 0x02000000,

0x00020000, 0x00000000,

0x02020000, 0x00000000,

0x00020000, 0x02000000,

0x02020000, 0x02000000,

0x00000000, 0x00020000,

0x02000000, 0x00020000,

0x00000000, 0x02020000,

0x02000000, 0x02020000,

0x00020000, 0x00020000,

0x02020000, 0x00020000,

0x00020000, 0x02020000,

0x02020000, 0x02020000,

0x00000000, 0x00000000,

0x00000200, 0x00000000,

0x00000000, 0x00000200,

0x00000200, 0x00000200,

0x00000002, 0x00000000,

0x00000202, 0x00000000,

0x00000002, 0x00000200,

0x00000202, 0x00000200,

0x00000000, 0x00000002,

0x00000200, 0x00000002,

0x00000000, 0x00000202,

0x00000200, 0x00000202,

0x00000002, 0x00000002,

0x00000202, 0x00000002,

0x00000002, 0x00000202,

0x00000202, 0x00000202,

0x00000000, 0x00000000,

0x04000000, 0x00000000,

0x00000000, 0x04000000,

0x04000000, 0x04000000,

0x00040000, 0x00000000,

0x04040000, 0x00000000,

0x00040000, 0x04000000,

0x04040000, 0x04000000,

0x00000000, 0x00040000,

0x04000000, 0x00040000,

0x00000000, 0x04040000,

0x04000000, 0x04040000,

0x00040000, 0x00040000,

0x04040000, 0x00040000,

0x00040000, 0x04040000,

0x04040000, 0x04040000,

0x00000000, 0x00000000,

0x00000400, 0x00000000,

0x00000000, 0x00000400,

0x00000400, 0x00000400,

0x00000004, 0x00000000,

0x00000404, 0x00000000,

0x00000004, 0x00000400,

0x00000404, 0x00000400,

0x00000000, 0x00000004,

0x00000400, 0x00000004,

0x00000000, 0x00000404,

0x00000400, 0x00000404,

0x00000004, 0x00000004,

0x00000404, 0x00000004,

0x00000004, 0x00000404,

0x00000404, 0x00000404,

0x00000000, 0x00000000,

0x08000000, 0x00000000,

0x00000000, 0x08000000,

0x08000000, 0x08000000,

0x00080000, 0x00000000,

0x08080000, 0x00000000,

0x00080000, 0x08000000,

0x08080000, 0x08000000,

0x00000000, 0x00080000,

0x08000000, 0x00080000,

0x00000000, 0x08080000,

0x08000000, 0x08080000,

0x00080000, 0x00080000,

0x08080000, 0x00080000,

0x00080000, 0x08080000,

0x08080000, 0x08080000,

0x00000000, 0x00000000,

0x00000800, 0x00000000,

0x00000000, 0x00000800,

0x00000800, 0x00000800,

0x00000008, 0x00000000,

0x00000808, 0x00000000,

0x00000008, 0x00000800,

0x00000808, 0x00000800,

0x00000000, 0x00000008,

0x00000800, 0x00000008,

0x00000000, 0x00000808,

0x00000800, 0x00000808,

0x00000008, 0x00000008,

0x00000808, 0x00000008,

0x00000008, 0x00000808,

0x00000808, 0x00000808,

0x00000000, 0x00000000,

0x10000000, 0x00000000,

0x00000000, 0x10000000,

0x10000000, 0x10000000,

0x00100000, 0x00000000,

0x10100000, 0x00000000,

0x00100000, 0x10000000,

0x10100000, 0x10000000,

0x00000000, 0x00100000,

0x10000000, 0x00100000,

0x00000000, 0x10100000,

0x10000000, 0x10100000,

0x00100000, 0x00100000,

0x10100000, 0x00100000,

0x00100000, 0x10100000,

0x10100000, 0x10100000,

0x00000000, 0x00000000,

0x00001000, 0x00000000,

0x00000000, 0x00001000,

0x00001000, 0x00001000,

0x00000010, 0x00000000,

0x00001010, 0x00000000,

0x00000010, 0x00001000,

0x00001010, 0x00001000,

0x00000000, 0x00000010,

0x00001000, 0x00000010,

0x00000000, 0x00001010,

0x00001000, 0x00001010,

0x00000010, 0x00000010,

0x00001010, 0x00000010,

0x00000010, 0x00001010,

0x00001010, 0x00001010,

0x00000000, 0x00000000,

0x20000000, 0x00000000,

0x00000000, 0x20000000,

0x20000000, 0x20000000,

0x00200000, 0x00000000,

0x20200000, 0x00000000,

0x00200000, 0x20000000,

0x20200000, 0x20000000,

0x00000000, 0x00200000,

0x20000000, 0x00200000,

0x00000000, 0x20200000,

0x20000000, 0x20200000,

0x00200000, 0x00200000,

0x20200000, 0x00200000,

0x00200000, 0x20200000,

0x20200000, 0x20200000,

0x00000000, 0x00000000,

0x00002000, 0x00000000,

0x00000000, 0x00002000,

0x00002000, 0x00002000,

0x00000020, 0x00000000,

0x00002020, 0x00000000,

0x00000020, 0x00002000,

0x00002020, 0x00002000,

0x00000000, 0x00000020,

0x00002000, 0x00000020,

0x00000000, 0x00002020,

0x00002000, 0x00002020,

0x00000020, 0x00000020,

0x00002020, 0x00000020,

0x00000020, 0x00002020,

0x00002020, 0x00002020,

0x00000000, 0x00000000,

0x40000000, 0x00000000,

0x00000000, 0x40000000,

0x40000000, 0x40000000,

0x00400000, 0x00000000,

0x40400000, 0x00000000,

0x00400000, 0x40000000,

0x40400000, 0x40000000,

0x00000000, 0x00400000,

0x40000000, 0x00400000,

0x00000000, 0x40400000,

0x40000000, 0x40400000,

0x00400000, 0x00400000,

0x40400000, 0x00400000,

0x00400000, 0x40400000,

0x40400000, 0x40400000,

0x00000000, 0x00000000,

0x00004000, 0x00000000,

0x00000000, 0x00004000,

0x00004000, 0x00004000,

0x00000040, 0x00000000,

0x00004040, 0x00000000,

0x00000040, 0x00004000,

0x00004040, 0x00004000,

0x00000000, 0x00000040,

0x00004000, 0x00000040,

0x00000000, 0x00004040,

0x00004000, 0x00004040,

0x00000040, 0x00000040,

0x00004040, 0x00000040,

0x00000040, 0x00004040,

0x00004040, 0x00004040,

0x00000000, 0x00000000,

0x80000000, 0x00000000,

0x00000000, 0x80000000,

0x80000000, 0x80000000,

0x00800000, 0x00000000,

0x80800000, 0x00000000,

0x00800000, 0x80000000,

0x80800000, 0x80000000,

0x00000000, 0x00800000,

0x80000000, 0x00800000,

0x00000000, 0x80800000,

0x80000000, 0x80800000,

0x00800000, 0x00800000,

0x80800000, 0x00800000,

0x00800000, 0x80800000,

0x80800000, 0x80800000,

0x00000000, 0x00000000,

0x00008000, 0x00000000,

0x00000000, 0x00008000,

0x00008000, 0x00008000,

0x00000080, 0x00000000,

0x00008080, 0x00000000,

0x00000080, 0x00008000,

0x00008080, 0x00008000,

0x00000000, 0x00000080,

0x00008000, 0x00000080,

0x00000000, 0x00008080,

0x00008000, 0x00008080,

0x00000080, 0x00000080,

0x00008080, 0x00000080,

0x00000080, 0x00008080,

0x00008080, 0x00008080

};

unsigned long p2[]=

{

0x00000000, 0x00000000,

0x00000040, 0x00000000,

0x00004000, 0x00000000,

0x00004040, 0x00000000,

0x00400000, 0x00000000,

0x00400040, 0x00000000,

0x00404000, 0x00000000,

0x00404040, 0x00000000,

0x40000000, 0x00000000,

0x40000040, 0x00000000,

0x40004000, 0x00000000,

0x40004040, 0x00000000,

0x40400000, 0x00000000,

0x40400040, 0x00000000,

0x40404000, 0x00000000,

0x40404040, 0x00000000,

0x00000000, 0x00000000,

0x00000000, 0x00000040,

0x00000000, 0x00004000,

0x00000000, 0x00004040,

0x00000000, 0x00400000,

0x00000000, 0x00400040,

0x00000000, 0x00404000,

0x00000000, 0x00404040,

0x00000000, 0x40000000,

0x00000000, 0x40000040,

0x00000000, 0x40004000,

0x00000000, 0x40004040,

0x00000000, 0x40400000,

0x00000000, 0x40400040,

0x00000000, 0x40404000,

0x00000000, 0x40404040,

0x00000000, 0x00000000,

0x00000010, 0x00000000,

0x00001000, 0x00000000,

0x00001010, 0x00000000,

0x00100000, 0x00000000,

0x00100010, 0x00000000,

0x00101000, 0x00000000,

0x00101010, 0x00000000,

0x10000000, 0x00000000,

0x10000010, 0x00000000,

0x10001000, 0x00000000,

0x10001010, 0x00000000,

0x10100000, 0x00000000,

0x10100010, 0x00000000,

0x10101000, 0x00000000,

0x10101010, 0x00000000,

0x00000000, 0x00000000,

0x00000000, 0x00000010,

0x00000000, 0x00001000,

0x00000000, 0x00001010,

0x00000000, 0x00100000,

0x00000000, 0x00100010,

0x00000000, 0x00101000,

0x00000000, 0x00101010,

0x00000000, 0x10000000,

0x00000000, 0x10000010,

0x00000000, 0x10001000,

0x00000000, 0x10001010,

0x00000000, 0x10100000,

0x00000000, 0x10100010,

0x00000000, 0x10101000,

0x00000000, 0x10101010,

0x00000000, 0x00000000,

0x00000004, 0x00000000,

0x00000400, 0x00000000,

0x00000404, 0x00000000,

0x00040000, 0x00000000,

0x00040004, 0x00000000,

0x00040400, 0x00000000,

0x00040404, 0x00000000,

0x04000000, 0x00000000,

0x04000004, 0x00000000,

0x04000400, 0x00000000,

0x04000404, 0x00000000,

0x04040000, 0x00000000,

0x04040004, 0x00000000,

0x04040400, 0x00000000,

0x04040404, 0x00000000,

0x00000000, 0x00000000,

0x00000000, 0x00000004,

0x00000000, 0x00000400,

0x00000000, 0x00000404,

0x00000000, 0x00040000,

0x00000000, 0x00040004,

0x00000000, 0x00040400,

0x00000000, 0x00040404,

0x00000000, 0x04000000,

0x00000000, 0x04000004,

0x00000000, 0x04000400,

0x00000000, 0x04000404,

0x00000000, 0x04040000,

0x00000000, 0x04040004,

0x00000000, 0x04040400,

0x00000000, 0x04040404,

0x00000000, 0x00000000,

0x00000001, 0x00000000,

0x00000100, 0x00000000,

0x00000101, 0x00000000,

0x00010000, 0x00000000,

0x00010001, 0x00000000,

0x00010100, 0x00000000,

0x00010101, 0x00000000,

0x01000000, 0x00000000,

0x01000001, 0x00000000,

0x01000100, 0x00000000,

0x01000101, 0x00000000,

0x01010000, 0x00000000,

0x01010001, 0x00000000,

0x01010100, 0x00000000,

0x01010101, 0x00000000,

0x00000000, 0x00000000,

0x00000000, 0x00000001,

0x00000000, 0x00000100,

0x00000000, 0x00000101,

0x00000000, 0x00010000,

0x00000000, 0x00010001,

0x00000000, 0x00010100,

0x00000000, 0x00010101,

0x00000000, 0x01000000,

0x00000000, 0x01000001,

0x00000000, 0x01000100,

0x00000000, 0x01000101,

0x00000000, 0x01010000,

0x00000000, 0x01010001,

0x00000000, 0x01010100,

0x00000000, 0x01010101,

0x00000000, 0x00000000,

0x00000080, 0x00000000,

0x00008000, 0x00000000,

0x00008080, 0x00000000,

0x00800000, 0x00000000,

0x00800080, 0x00000000,

0x00808000, 0x00000000,

0x00808080, 0x00000000,

0x80000000, 0x00000000,

0x80000080, 0x00000000,

0x80008000, 0x00000000,

0x80008080, 0x00000000,

0x80800000, 0x00000000,

0x80800080, 0x00000000,

0x80808000, 0x00000000,

0x80808080, 0x00000000,

0x00000000, 0x00000000,

0x00000000, 0x00000080,

0x00000000, 0x00008000,

0x00000000, 0x00008080,

0x00000000, 0x00800000,

0x00000000, 0x00800080,

0x00000000, 0x00808000,

0x00000000, 0x00808080,

0x00000000, 0x80000000,

0x00000000, 0x80000080,

0x00000000, 0x80008000,

0x00000000, 0x80008080,

0x00000000, 0x80800000,

0x00000000, 0x80800080,

0x00000000, 0x80808000,

0x00000000, 0x80808080,

0x00000000, 0x00000000,

0x00000020, 0x00000000,

0x00002000, 0x00000000,

0x00002020, 0x00000000,

0x00200000, 0x00000000,

0x00200020, 0x00000000,

0x00202000, 0x00000000,

0x00202020, 0x00000000,

0x20000000, 0x00000000,

0x20000020, 0x00000000,

0x20002000, 0x00000000,

0x20002020, 0x00000000,

0x20200000, 0x00000000,

0x20200020, 0x00000000,

0x20202000, 0x00000000,

0x20202020, 0x00000000,

0x00000000, 0x00000000,

0x00000000, 0x00000020,

0x00000000, 0x00002000,

0x00000000, 0x00002020,

0x00000000, 0x00200000,

0x00000000, 0x00200020,

0x00000000, 0x00202000,

0x00000000, 0x00202020,

0x00000000, 0x20000000,

0x00000000, 0x20000020,

0x00000000, 0x20002000,

0x00000000, 0x20002020,

0x00000000, 0x20200000,

0x00000000, 0x20200020,

0x00000000, 0x20202000,

0x00000000, 0x20202020,

0x00000000, 0x00000000,

0x00000008, 0x00000000,

0x00000800, 0x00000000,

0x00000808, 0x00000000,

0x00080000, 0x00000000,

0x00080008, 0x00000000,

0x00080800, 0x00000000,

0x00080808, 0x00000000,

0x08000000, 0x00000000,

0x08000008, 0x00000000,

0x08000800, 0x00000000,

0x08000808, 0x00000000,

0x08080000, 0x00000000,

0x08080008, 0x00000000,

0x08080800, 0x00000000,

0x08080808, 0x00000000,

0x00000000, 0x00000000,

0x00000000, 0x00000008,

0x00000000, 0x00000800,

0x00000000, 0x00000808,

0x00000000, 0x00080000,

0x00000000, 0x00080008,

0x00000000, 0x00080800,

0x00000000, 0x00080808,

0x00000000, 0x08000000,

0x00000000, 0x08000008,

0x00000000, 0x08000800,

0x00000000, 0x08000808,

0x00000000, 0x08080000,

0x00000000, 0x08080008,

0x00000000, 0x08080800,

0x00000000, 0x08080808,

0x00000000, 0x00000000,

0x00000002, 0x00000000,

0x00000200, 0x00000000,

0x00000202, 0x00000000,

0x00020000, 0x00000000,

0x00020002, 0x00000000,

0x00020200, 0x00000000,

0x00020202, 0x00000000,

0x02000000, 0x00000000,

0x02000002, 0x00000000,

0x02000200, 0x00000000,

0x02000202, 0x00000000,

0x02020000, 0x00000000,

0x02020002, 0x00000000,

0x02020200, 0x00000000,

0x02020202, 0x00000000,

0x00000000, 0x00000000,

0x00000000, 0x00000002,

0x00000000, 0x00000200,

0x00000000, 0x00000202,

0x00000000, 0x00020000,

0x00000000, 0x00020002,

0x00000000, 0x00020200,

0x00000000, 0x00020202,

0x00000000, 0x02000000,

0x00000000, 0x02000002,

0x00000000, 0x02000200,

0x00000000, 0x02000202,

0x00000000, 0x02020000,

0x00000000, 0x02020002,

0x00000000, 0x02020200,

0x00000000, 0x02020202

};

unsigned char Pmask[]=

{

0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01

};

unsigned char PC1tbl[]=

{

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

};

unsigned char PC2tbl[]=

{

0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,

0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,

0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,

0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,

0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,

0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,

0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,

0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,

0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00

};

unsigned long sp_table[]= // label dword

{

// sp[0]

0x00828000,

0x00000000,

0x00800000,

0x02828000,

0x02808000,

0x02820000,

0x02000000,

0x00800000,

0x00020000,

0x00828000,

0x02828000,

0x00020000,

0x02028000,

0x02808000,

0x00008000,

0x02000000,

0x02020000,

0x00028000,

0x00028000,

0x00820000,

0x00820000,

0x00808000,

0x00808000,

0x02028000,

0x02800000,

0x02008000,

0x02008000,

0x02800000,

0x00000000,

0x02020000,

0x02820000,

0x00008000,

0x00800000,

0x02828000,

0x02000000,

0x00808000,

0x00828000,

0x00008000,

0x00008000,

0x00020000,

0x02808000,

0x00800000,

0x00820000,

0x02008000,

0x00020000,

0x02000000,

0x02028000,

0x02820000,

0x02828000,

0x02800000,

0x00808000,

0x02028000,

0x02008000,

0x02020000,

0x02820000,

0x00828000,

0x02020000,

0x00028000,

0x00028000,

0x00000000,

0x02800000,

0x00820000,

0x00000000,

0x02808000,

//; sp[1]

0x10400840,

0x00400040,

0x00400000,

0x10400800,

0x00000800,

0x10000000,

0x10000840,

0x10400040,

0x10000040,

0x10400840,

0x00400840,

0x00000040,

0x00400040,

0x00000800,

0x10000000,

0x10000840,

0x00400800,

0x10000800,

0x10400040,

0x00000000,

0x00000040,

0x00400000,

0x10400800,

0x00000840,

0x10000800,

0x10000040,

0x00000000,

0x00400800,

0x10400000,

0x00400840,

0x00000840,

0x10400000,

0x00000000,

0x10400800,

0x10000840,

0x00000800,

0x10400040,

0x00000840,

0x00400840,

0x00400000,

0x00000840,

0x00400040,

0x10000000,

0x10400840,

0x10400800,

0x10000000,

0x00400000,

0x00000040,

0x10400000,

0x00400840,

0x00000800,

0x10000040,

0x10000800,

0x10400040,

0x10000040,

0x10000800,

0x00400800,

0x00000000,

0x00400040,

0x10400000,

0x00000040,

0x10000840,

0x10400840,

0x00400800,

//; sp[2]

0x04010000,

0x00010104,

0x00000000,

0x04000104,

0x00010004,

0x00000000,

0x04010100,

0x00010004,

0x04000100,

0x04000004,

0x04000004,

0x00000100,

0x04010104,

0x04000100,

0x00000104,

0x04010000,

0x00000004,

0x04000000,

0x00010104,

0x00010000,

0x00010100,

0x00000104,

0x04000104,

0x04010100,

0x04010004,

0x00010100,

0x00000100,

0x04010004,

0x04000000,

0x04010104,

0x00010000,

0x00000004,

0x00010104,

0x00000004,

0x04000100,

0x04010000,

0x00000100,

0x00010104,

0x00010004,

0x00000000,

0x00010000,

0x04000100,

0x04010104,

0x00010004,

0x04000004,

0x00010000,

0x00000000,

0x04000104,

0x04010004,

0x00000100,

0x00000004,

0x04010104,

0x04000000,

0x04010100,

0x00010100,

0x04000004,

0x00000104,

0x04010004,

0x04010000,

0x00000104,

0x04010100,

0x04000000,

0x04000104,

0x00010100,

//; sp[3]

0x00104080,

0x40100080,

0x40100080,

0x40000000,

0x40104000,

0x40004080,

0x00004080,

0x00100080,

0x00000000,

0x00104000,

0x00104000,

0x40104080,

0x40000080,

0x00000000,

0x40004000,

0x00004080,

0x00000080,

0x00100000,

0x00004000,

0x00104080,

0x40000000,

0x00004000,

0x00100080,

0x40100000,

0x40004080,

0x00000080,

0x40100000,

0x40004000,

0x00100000,

0x40104000,

0x40104080,

0x40000080,

0x40004000,

0x00004080,

0x00104000,

0x40104080,

0x40000080,

0x00000000,

0x00000000,

0x00104000,

0x40100000,

0x40004000,

0x40004080,

0x00000080,

0x00104080,

0x40100080,

0x40100080,

0x40000000,

0x40104080,

0x40000080,

0x00000080,

0x00100000,

0x00004080,

0x00100080,

0x40104000,

0x40004080,

0x00100080,

0x40100000,

0x00004000,

0x00104080,

0x40000000,

0x00004000,

0x00100000,

0x40104000,

//; sp[4]

0x80000000,

0x80000401,

0x00000401,

0x80000021,

0x00000400,

0x80000000,

0x00000020,

0x00000401,

0x80000420,

0x00000400,

0x80000001,

0x80000420,

0x80000021,

0x00000421,

0x80000400,

0x00000020,

0x00000001,

0x00000420,

0x00000420,

0x00000000,

0x80000020,

0x80000421,

0x80000421,

0x80000001,

0x00000421,

0x80000020,

0x00000000,

0x00000021,

0x80000401,

0x00000001,

0x00000021,

0x80000400,

0x00000400,

0x80000021,

0x80000000,

0x00000001,

0x00000020,

0x00000401,

0x80000021,

0x80000420,

0x80000001,

0x00000020,

0x00000421,

0x80000401,

0x80000420,

0x80000000,

0x00000001,

0x00000421,

0x80000421,

0x80000400,

0x00000021,

0x80000421,

0x00000401,

0x00000000,

0x00000420,

0x00000021,

0x80000400,

0x80000001,

0x80000020,

0x00000400,

0x00000000,

0x00000420,

0x80000401,

0x80000020,

//; sp[5]

0x08000010,

0x00002010,

0x00200000,

0x08202010,

0x00002010,

0x08000000,

0x08202010,

0x00002000,

0x00200010,

0x08202000,

0x00002000,

0x08000010,

0x08002000,

0x00200010,

0x00000010,

0x08200000,

0x00000000,

0x08002000,

0x08200010,

0x00200000,

0x00202000,

0x08200010,

0x08000000,

0x08002010,

0x08002010,

0x00000000,

0x08202000,

0x00202010,

0x08200000,

0x00202000,

0x00202010,

0x00000010,

0x00200010,

0x08000000,

0x08002010,

0x00202000,

0x08202010,

0x00002000,

0x08200000,

0x08000010,

0x00002000,

0x00200010,

0x00000010,

0x08200000,

0x08000010,

0x08202010,

0x00202000,

0x00002010,

0x08202000,

0x00202010,

0x00000000,

0x08002010,

0x08000000,

0x00200000,

0x00002010,

0x08202000,

0x00200000,

0x08002000,

0x08200010,

0x00000000,

0x00202010,

0x00000010,

0x08002000,

0x08200010,

//; sp[6]

0x00001000,

0x01001002,

0x01040002,

0x00000000,

0x00040000,

0x01040002,

0x01041000,

0x00041002,

0x01041002,

0x00001000,

0x00000000,

0x01000002,

0x01000000,

0x00000002,

0x01001002,

0x01040000,

0x00040002,

0x01041000,

0x01001000,

0x00040002,

0x01000002,

0x00001002,

0x00041002,

0x01001000,

0x00001002,

0x00040000,

0x01040000,

0x01041002,

0x00041000,

0x01000000,

0x00000002,

0x00041000,

0x00000002,

0x00041000,

0x00001000,

0x01040002,

0x01040002,

0x01001002,

0x01001002,

0x01000000,

0x01001000,

0x00000002,

0x00040002,

0x00001000,

0x00041002,

0x01040000,

0x01041000,

0x00041002,

0x01040000,

0x01000002,

0x01041002,

0x00001002,

0x00041000,

0x00000000,

0x01000000,

0x01041002,

0x00000000,

0x01041000,

0x00001002,

0x00040000,

0x01000002,

0x00040002,

0x00040000,

0x01001000,

//; sp[7]

0x20080008,

0x00080000,

0x00000200,

0x20080208,

0x00000008,

0x20080008,

0x20000000,

0x00000008,

0x20000200,

0x00000208,

0x20080208,

0x00080200,

0x00080208,

0x20080200,

0x00080000,

0x20000000,

0x00000208,

0x20000008,

0x00080008,

0x20080000,

0x00080200,

0x20000200,

0x20000208,

0x00080208,

0x20080000,

0x00000000,

0x00000000,

0x20000208,

0x20000008,

0x00080008,

0x20080200,

0x00000200,

0x20080200,

0x00000200,

0x00080208,

0x00080000,

0x20000000,

0x20000208,

0x00080000,

0x20080200,

0x00080008,

0x20000000,

0x20000008,

0x00000208,

0x20000208,

0x00000008,

0x00000200,

0x20080008,

0x00000000,

0x20080208,

0x20000200,

0x20000008,

0x00000208,

0x00080008,

0x20080008,

0x00000000,

0x20080208,

0x00080200,

0x00080200,

0x20080000,

0x20080000,

0x20000200,

0x00000008,

0x00080208

};

//unsigned char en_keytbl[16*8];

//int loopcount;

//unsigned int block[2];

void des_encrypt(unsigned int *bl,unsigned char* kp,unsigned int mode)

{

static unsigned char * keyptr;

static unsigned int loopcount;

static unsigned int block[2];

keyptr=kp;

block[0]=bl[0];

block[1]=bl[1];

_asm

{

cmp [mode],0

jz decrypt_block

;--------------------------------------------------------------------

; Local PERMUTE for encrypt_block & decrypt_block

;input conditions:

; esi:perm. table ptr

; edx:eax input high and low

; ebp:edi output high and low

; destroys all registers except cx!

;----------------------------------------------------------------------

; void encrypt_block(void);

; encrypts data in (unsigned char block[8] ),

; returning it in the same block[].

;;encrypt_block:

push esi

push edi

push ebp

mov esi, offset p1

mov edx,dword ptr[block]

mov eax,dword ptr[block+4]

call l_permute ;returns with output in ebp:edi

mov eax,edi ;f() input is ebp:eax

mov esi,[keyptr]

add esi,7

mov [loopcount],16 ;yes, this is the full 16 round DES

dxlp1:

and ebx,0ffffh

mov edx,eax ;prepare to operate on right half

mov ecx,eax ;and save it: it becomes left half

bswap edx ;edx has f() input

sub eax,eax ;output gets zero

mov edi,offset sp_table+7*4*64 ;point to combined s & p boxes

rol edx,3 ;prepare for E() function

;THE F() FUNCTION (encrypt)

mov bx,dx ;nybble 1

xor bl,[esi] ;XOR with key bits

and bx,11111100b

dec esi

or eax, [ebx+edi] ;set bits for this nybble

ror edx,4 ; (E function)

sub edi,4*64 ;sizeof(long)*sizeof(table)

mov bx,dx ;nybble 2

xor bl,[esi] ;XOR with key bits

and bx,11111100b

dec esi

or eax, [ebx+edi] ;set bits for this nybble

ror edx,4 ; (E function)

sub edi,4*64 ;sizeof(long)*sizeof(table)

mov bx,dx ;nybble 3

xor bl,[esi] ;XOR with key bits

and bx,11111100b

dec esi

or eax, [ebx+edi] ;set bits for this nybble

ror edx,4 ; (E function)

sub edi,4*64 ;sizeof(long)*sizeof(table)

mov bx,dx ;nybble 4

xor bl,[esi] ;XOR with key bits

and bx,11111100b

dec esi

or eax, [ebx+edi] ;set bits for this nybble

ror edx,4 ; (E function)

sub edi,4*64 ;sizeof(long)*sizeof(table)

mov bx,dx ;nybble 5

xor bl,[esi] ;XOR with key bits

and bx,11111100b

dec esi

or eax, [ebx+edi] ;set bits for this nybble

ror edx,4 ; (E function)

sub edi,4*64 ;sizeof(long)*sizeof(table)

mov bx,dx ;nybble 6

xor bl,[esi] ;XOR with key bits

and bx,11111100b

dec esi

or eax, [ebx+edi] ;set bits for this nybble

ror edx,4 ; (E function)

sub edi,4*64 ;sizeof(long)*sizeof(table)

mov bx,dx ;nybble 7

xor bl,[esi] ;XOR with key bits

and bx,11111100b

dec esi

or eax, [ebx+edi] ;set bits for this nybble

ror edx,4 ; (E function)

sub edi,4*64 ;sizeof(long)*sizeof(table)

mov bx,dx ;nybble 8

xor bl,[esi] ;XOR with key bits

and bx,11111100b

dec esi

or eax, [ebx+edi] ;set bits for this nybble

xor eax,ebp ;left half^= f(right half,keytbl[n]);

add esi,16 ;point to next keytable

mov ebp,ecx ;old right half becomes new left half

dec [loopcount]

jnz dxlp1

mov esi, offset p2

mov edx,eax

mov eax,ebp

call l_permute

mov ebx,ebp

//mov dword ptr[block],ebp

pop ebp

mov [block],ebx

mov dword ptr[block+4],edi

;;pop ebp

pop edi

pop esi

jmp ddone

;----------------------------------------------------------------------

decrypt_block:

push esi

push edi

push ebp

mov esi, offset p1

mov edx,dword ptr[block] ;get input for l_permute

mov eax,dword ptr[block+4]

call l_permute

mov [loopcount],16 ;yes, this is the full 16 round DES

//ifdef TRIPLE_DES

// mov esi,[de_keyptr]

//else

mov esi,[keyptr]

//endif

add esi,15*8+7

mov eax, edi ;ip.L=op.R

//align 4

dxlp2: and ebx,0ffffh

mov edx,eax ;f() input is ip.L

mov ecx,edx ;op.R=ip.L

bswap edx

sub eax,eax ;output gets zero

mov edi,offset sp_table + 7*4*64 ;point to s&p boxes

rol edx,3 ;set up bits 32,1,2,3,4,5 shl 2

;THE F() FUNCTION (decrypt)

mov bx,dx ;nybble 1

xor bl,[esi] ;XOR with key bits

and bx,11111100b

dec esi

or eax, [ebx+edi] ;set bits for this nybble

ror edx,4 ;(see E Bit-Selection Table)

sub edi,4*64 ;sizeof(long)*sizeof(table)

mov bx,dx ;nybble 2

xor bl,[esi] ;XOR with key bits

and bx,11111100b

dec esi

or eax, [ebx+edi] ;set bits for this nybble

ror edx,4 ;(see E Bit-Selection Table)

sub edi,4*64 ;sizeof(long)*sizeof(table)

mov bx,dx ;nybble 3

xor bl,[esi] ;XOR with key bits

and bx,11111100b

dec esi

or eax, [ebx+edi] ;set bits for this nybble

ror edx,4 ;(see E Bit-Selection Table)

sub edi,4*64 ;sizeof(long)*sizeof(table)

mov bx,dx ;nybble 4

xor bl,[esi] ;XOR with key bits

and bx,11111100b

dec esi

or eax, [ebx+edi] ;set bits for this nybble

ror edx,4 ;(see E Bit-Selection Table)

sub edi,4*64 ;sizeof(long)*sizeof(table)

mov bx,dx ;nybble 5

xor bl,[esi] ;XOR with key bits

and bx,11111100b

dec si

or eax, [ebx+edi] ;set bits for this nybble

ror edx,4 ;(see E Bit-Selection Table)

sub edi,4*64 ;sizeof(long)*sizeof(table)

mov bx,dx ;nybble 6

xor bl,[esi] ;XOR with key bits

and bx,11111100b

dec esi

or eax, [ebx+edi] ;set bits for this nybble

ror edx,4 ;(see E Bit-Selection Table)

sub edi,4*64 ;sizeof(long)*sizeof(table)

mov bx,dx ;nybble 7

xor bl,[esi] ;XOR with key bits

and bx,11111100b

dec esi

or eax, [ebx+edi] ;set bits for this nybble

ror edx,4 ;(see E Bit-Selection Table)

sub di,4*64 ;sizeof(long)*sizeof(table)

mov bx,dx ;nybble 8

xor bl,[esi] ;XOR with key bits

and bx,11111100b

dec esi

or eax, [ebx+edi] ;set bits for this nybble

xor eax,ebp ;ip.R ^ f(ip.L,keytbl[n]);

mov ebp,ecx ;ip.R=op.R;

dec [loopcount]

jnz dxlp2

mov esi,offset p2 ;set up for inverse permutation

mov edx,eax ;get input

mov eax,ebp

call l_permute

;;mov dword ptr[block],ebp

;;mov dword ptr[block+4],edi

mov ebx,ebp

pop ebp

mov [block],ebx

mov [block+4],edi

pop edi

pop esi

jmp ddone

l_permute:

; do high dword

movzx ebx,dx ;nybble 1

shl bx,3

and bx,1111000b

shr edx,1

mov ebp,[esi+ebx] ;output high

mov edi,[esi+4+ebx] ;output low

add esi,8*16

;@@2:

mov bx,dx ;nybble 2

and bx,1111000b

shr edx,4

or ebp,[esi+ebx]

or edi,[esi+4+ebx]

add esi,8*16

mov bx,dx ;nybble 3

and bx,1111000b

shr edx,4

or ebp,[esi+ebx]

or edi,[esi+4+ebx]

add esi,8*16

mov bx,dx ;nybble 4

and bx,1111000b

shr edx,4

or ebp,[esi+ebx]

or edi,[esi+4+ebx]

add esi,8*16

mov bx,dx ;nybble 5

and bx,1111000b

shr edx,4

or ebp,[esi+ebx]

or edi,[esi+4+ebx]

add esi,8*16

mov bx,dx ;nybble 6

and bx,1111000b

shr edx,4

or ebp,[esi+ebx]

or edi,[esi+4+ebx]

add esi,8*16

mov bx,dx ;nybble 7

and bx,1111000b

shr edx,4

or ebp,[esi+ebx]

or edi,[esi+4+ebx]

add esi,8*16

mov bx,dx ;nybble 8

and bx,1111000b

or ebp,[esi+ebx]

or edi,[esi+4+ebx]

add esi,8*16

; do low dword

mov bx,ax ;nybble 1

shl bx,3 ;index * 8

and bx,1111000b

shr eax,1

or ebp,[esi+ebx]

or edi,[esi+4+ebx]

add esi,8*16

;@@3:

mov bx, ax ;nybble 2

and bx,1111000b

shr eax,4 ;next nybble

or ebp,[esi+ebx]

or edi,[esi+4+ebx]

add esi,8*16

mov bx, ax ;nybble 3

and bx,1111000b

shr eax,4 ;next nybble

or ebp,[esi+ebx]

or edi,[esi+4+ebx]

add esi,8*16

mov bx, ax ;nybble 4

and bx,1111000b

shr eax,4 ;next nybble

or ebp,[esi+ebx]

or edi,[esi+4+ebx]

add esi,8*16

mov bx, ax ;nybble 5

and bx,1111000b

shr eax,4 ;next nybble

or ebp,[esi+ebx]

or edi,[esi+4+ebx]

add esi,8*16

mov bx, ax ;nybble 6

and bx,1111000b

shr eax,4 ;next nybble

or ebp,[esi+ebx]

or edi,[esi+4+ebx]

add esi,8*16

mov bx, ax ;nybble 7

and bx,1111000b

shr eax,4 ;next nybble

or ebp,[esi+ebx]

or edi,[esi+4+ebx]

add esi,8*16

mov bx, ax ;nybble 8

and bx,1111000b

or ebp,[esi+ebx]

or edi,[esi+4+ebx]

ret

ddone:

}

bl[0]=block[0];

bl[1]=block[1];

}

void permute(long *op,long *ip, char *tbl,int n)

{

_asm

{

;permute proc near

; arg op:dataptr, ip:dataptr, tbl:dataptr, n:word

; push bp

; mov bp,sp

; push si

; push di

mov ebx,[op]

mov esi,[tbl] ;permutation table to si

mov edi,offset Pmask ;setting-bits in di

mov dword ptr[ebx],0

mov dword ptr[ebx+4],0 ;output=0

mov ebx,[ip]

mov eax,[ebx]

mov edx,[ebx+4] ;input to edx:eax

mov ecx,[n] ;count to cx

pm1: mov ebx,[esi] ;get high dword perm bit

test eax,ebx ;is this bit set?

jnz pmis_hit

mov ebx,[esi+4] ;get low dword perm bit

test edx,ebx ;any action?

jz pmno_hit

pmis_hit:

push esi

mov esi,[op] ;point to output

mov ebx,[edi] ;get setting-bit

or [esi],ebx ;set the bit

mov ebx,[edi+4] ;do for both halves

or [esi+4],ebx ;set bit

pop esi

pmno_hit:

add esi,8 ;next permutation entry

add edi,8 ;next setting-bits entry

loop pm1

; pop di

; pop si

; mov sp,bp

; pop bp

}

}

//;----------------------------------------------------------------------

//; Rotate 28 bits (for KS function)

//; void rotate(long *input,int count);

void rotate(long *input,int count)

//rotate proc near

// arg input:dataptr,count:word

{

_asm

{

mov ecx,[count]

mov ebx, [input]

mov eax,[ebx]

bswap eax ;get bits in good order

xor ebx,ebx

shld ebx, eax,cl ;shift high bits to bl

shl eax,cl

shl ebx,4 ;move from bit 32 to bit 28

add eax,ebx

mov ebx,[input]

bswap eax ;reverse bytes...

mov [ebx],eax ;...so they store correctly

}

}

void set_table(char*input,int num,long*tbl)

{

_asm

{

;----------------------------------------------------------------------

; void set_table(char*input,int n,long*keytbl);

; Take a 48-bit input, and make 8 bytes of 6 bits each.

; Output goes into tbl[].

;align 16

;proc set_table near

; arg input:dataptr,num:word, tbl:dataptr

;push bp

;mov bp,sp

;push di

mov edi, [tbl]

mov eax,[num]

mov bl,8

mul bl

add edi,eax ;now di points to proper offset in keytbl

mov ebx,[input]

mov dx,word ptr[ebx+4]

bswap edx ;edx highbits now has highbits of key sched.

mov ebx,[ebx]

bswap ebx ;ebx gets 48 bits of key sched.

mov cx,8 ;loop count

stble1: shld eax,ebx,6 ;get next 6 bits

shld ebx,edx,6

shl edx,6

shl ax,2 ;pre-shift for sizeof(long) in f() function

and al,11111100b

mov [edi],al

inc edi

loop stble1

;pop di

;mov sp,bp

;pop bp

}

}

void des_key_sched(char * password, unsigned char *keytble)

{

static char *input;

static unsigned char *tbl;

static unsigned long block1[2];

static unsigned long temp [2];

static loopcount;

static unsigned short r_sched[]=

{

1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1

};

input=password;

tbl=keytble;

_asm

{

;----------------------------------------------------------------------

; void schedule(char *password long keytbl[]);

; Expand a password into 16 rounds of Key Schedule.

; Output goes into extern keytbl[16][8]

; (This is not a time-critical function, and I simply

; rewrote the c source into assembler, to make

; DES programming a 2-step process-- schedule the key,

; encrypt/decrypt the block.)

;align 16

;proc schedule

; arg input:dataptr, tbl:dataptr

push ebp

;mov bp,sp

push edi

push 64

push offset PC1tbl

mov ebx,[input]

push ebx

push offset temp

call permute ;select 56 bits

add sp,8*2

mov ecx,16

mov [loopcount],ecx

xor edi,edi

sch1:

mov ebx,edi

shl ebx,1

add ebx,offset r_sched

movzx eax,[word ptr ebx]

push eax ;save for 2nd rotate

push eax ;arg for rotate func.

push offset temp

call rotate

add esp,4*2

push offset temp+4

call rotate

add esp,4*2

push 48

push offset PC2tbl ;perm table

push offset temp ;input

push offset block1 ;output

call permute

add esp,8*2

mov eax,[tbl]

push eax

push edi ;table number

push offset block1 ;input

call set_table

add esp,6*2

inc edi

dec [loopcount]

jnz sch1

mov ebx,[input] ;erase the password space

mov cx,4

xor ax,ax

sch2: mov [ebx],ax

inc ebx

inc ebx

loop sch2

pop edi

pop ebp

jmp scdone

;;set_table:

scdone:

}

}

// Scramdisk specific code.....

//key schedules

// Three key triple des...

void desencipher(unsigned long *b, int slot)

{

des_encrypt(b,sdisk_des_keys[slot].e,DES_ENCRYPT);

}

void threedesencipher(unsigned long *b, int slot)

{

des_encrypt(b, sdisk_des_keys[slot].e,DES_ENCRYPT);

des_encrypt(b, sdisk_des_keys[slot].d,DES_DECRYPT);

des_encrypt(b, sdisk_des_keys[slot].e2,DES_ENCRYPT);

}

void desdecipher(unsigned long *b, int slot)

{

des_encrypt(b, sdisk_des_keys[slot].e,DES_DECRYPT);

}

void threedesdecipher(unsigned long *b, int slot)

{

des_encrypt(b, sdisk_des_keys[slot].e2,DES_DECRYPT);

des_encrypt(b, sdisk_des_keys[slot].d,DES_ENCRYPT);

des_encrypt(b, sdisk_des_keys[slot].e,DES_DECRYPT);

}

void desinitialise(char *key,int slot)

{

des_key_sched(key,sdisk_des_keys[slot].e);

}

void threedesinitialise(char *key,int slot)

{

char *key2=key+8;

char *key3=key2+8;

des_key_sched(key,sdisk_des_keys[slot].e);

des_key_sched(key2,sdisk_des_keys[slot].d);

des_key_sched(key3,sdisk_des_keys[slot].e2);

}

//;1F08260D1AC2465E 6B056E18759F5CCA EF1BF03E5DFA575A

void main (void) //test code

{

//char keytable[16*8];

unsigned char key[]=

{

0x1f,0x08,0x26,0x0d,0x1a,0xc2,0x46,0x5e

};

unsigned char key3[]=

{

0x1f,0x08,0x26,0x0d,0x1a,0xc2,0x46,0x5e,

0x44,0x28,0x1d,0x6b,0x61,0x11,0x52,0x47,

0x12,0x41,0x34,0x26,0x1d,0x3e,0xf4,0x45

};

unsigned char cipher[]=

{

0xef,0x1b,0xf0,0x3e,0x5d,0xfa,0x57,0x5a //cipher text...

};

//void Eblock(unsigned int mode,unsigned int *kp,unsigned int *bl)

//des_key_sched((unsigned char *) &key,keytable);

//des_encrypt((unsigned int *) cipher,keytable,0);

//des_encrypt((unsigned int *) cipher,keytable,1);

desinitialise(key,0);

desdecipher((unsigned long *) cipher,0);

desencipher((unsigned long *) cipher,0);

threedesinitialise(key3,0);

threedesdecipher((unsigned long *) cipher,0);

threedesencipher((unsigned long *) cipher,0);

cout<< Enter key;

}

GOST

/*

* The GOST 28147-89 cipher

*

* This is based on the 25 Movember 1993 draft translation

* by Aleksandr Malchik, with Whitfield Diffie, of the Government

* Standard of the U.S.S.R. GOST 28149-89, "Cryptographic Transformation

* Algorithm", effective 1 July 1990. (Whitfield.Diffie@eng.sun.com)

*

* That is a draft, and may contain errors, which will be faithfully

* reflected here, along with possible exciting new bugs.

*

* Some details have been cleared up by the paper "Soviet Encryption

* Algorithm" by Josef Pieprzyk and Leonid Tombak of the University

* of Wollongong, New South Wales. (josef/leo@cs.adfa.oz.au)

*

* The standard is written by A. Zabotin (project leader), G.P. Glazkov,

* and V.B. Isaeva. It was accepted and introduced into use by the

* action of the State Standards Committee of the USSR on 2 June 89 as

* No. 1409. It was to be reviewed in 1993, but whether anyone wishes

* to take on this obligation from the USSR is questionable.

*

* This code is placed in the public domain.

*/

/*

* If you read the standard, it belabors the point of copying corresponding

* bits from point A to point B quite a bit. It helps to understand that

* the standard is uniformly little-endian, although it numbers bits from

* 1 rather than 0, so bit n has value 2^(n-1). The least significant bit

* of the 32-bit words that are manipulated in the algorithm is the first,

* lowest-numbered, in the bit string.

*/

/* A 32-bit data type */

#ifdef __alpha /* Any other 64-bit machines? */

typedef unsigned int word32;

#else

typedef unsigned long word32;

#endif

/*

* The standard does not specify the contents of the 8 4 bit->4 bit

* substitution boxes, saying they're a parameter of the network

* being set up. For illustration purposes here, I have used

* the first rows of the 8 S-boxes from the DES. (Note that the

* DES S-boxes are numbered starting from 1 at the msb. In keeping

* with the rest of the GOST, I have used little-endian numbering.

* Thus, k8 is S-box 1.

*

* Obviously, a careful look at the cryptographic properties of the cipher

* must be undertaken before "production" substitution boxes are defined.

*

* The standard also does not specify a standard bit-string representation

* for the contents of these blocks.

*/

static unsigned char const k8[16] = {

14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7 };

static unsigned char const k7[16] = {

15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10 };

static unsigned char const k6[16] = {

10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8 };

static unsigned char const k5[16] = {

7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15 };

static unsigned char const k4[16] = {

2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9 };

static unsigned char const k3[16] = {

12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11 };

static unsigned char const k2[16] = {

4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1 };

static unsigned char const k1[16] = {

13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7 };

/* Byte-at-a-time substitution boxes */

static unsigned char k87[256];

static unsigned char k65[256];

static unsigned char k43[256];

static unsigned char k21[256];

/*

* Build byte-at-a-time subtitution tables.

* This must be called once for global setup.

*/

void

kboxinit(void)

{

int i;

for (i = 0; i < 256; i++) {

k87[i] = k8[i >> 4] << 4 | k7[i & 15];

k65[i] = k6[i >> 4] << 4 | k5[i & 15];

k43[i] = k4[i >> 4] << 4 | k3[i & 15];

k21[i] = k2[i >> 4] << 4 | k1[i & 15];

}

}

/*

* Do the substitution and rotation that are the core of the operation,

* like the expansion, substitution and permutation of the DES.

* It would be possible to perform DES-like optimisations and store

* the table entries as 32-bit words, already rotated, but the

* efficiency gain is questionable.


Подобные документы

  • Изучение основных методов и алгоритмов криптографии с открытым ключом и их практического использования. Анализ и практическое применение алгоритмов криптографии с открытым ключом: шифрование данных, конфиденциальность, генерация и управление ключами.

    дипломная работа [1,2 M], добавлен 20.06.2011

  • Краткая история развития криптографических методов защиты информации. Сущность шифрования и криптографии с симметричными ключами. Описание аналитических и аддитивных методов шифрования. Методы криптографии с открытыми ключами и цифровые сертификаты.

    курсовая работа [1,2 M], добавлен 28.12.2014

  • Определения криптографии как практической дисциплины, изучающей и разрабатывающей способы шифрования сообщений. История развития шифров. Хэш-функции и понятие электронной подписи. Системы идентификации, аутентификации и сертификации открытых ключей.

    реферат [77,1 K], добавлен 10.12.2011

  • Классы сложности задач в теории алгоритмов. Общие сведения о симметричной и ассиметрично-ключевой криптографии. "Лазейка" в односторонней функции. Криптографическая система RSA. Криптографическая система Эль-Гамаля. Алгоритм обмена ключами Диффи-Хеллмана.

    курсовая работа [706,6 K], добавлен 06.06.2010

  • Криптография - наука о методах обеспечения конфиденциальности и аутентичности информации. Этапы развития криптографии. Криптографический протокол и требования к его безопасности. Криптографические генераторы случайных чисел. Основные методы криптоанализа.

    реферат [29,3 K], добавлен 01.05.2012

  • Криптография — наука о методах обеспечения конфиденциальности и аутентичности информации. Реализация криптографии на примере трех программных продуктов: PGP, Tor, I2P. Понятие криптографических примитивов и протоколов, симметричных и асимметричных шифров.

    учебное пособие [180,4 K], добавлен 17.06.2011

  • История развития криптографии, ее основные понятия. Простейший прием дешифровки сообщения. Основные методы и способы шифрования, современный криптографический анализ. Перспективы развития криптографии. Создание легкого для запоминания и надежного пароля.

    курсовая работа [3,9 M], добавлен 18.12.2011

  • История криптографии и ее основные задачи. Основные понятия криптографии (конфиденциальность, целостность, аутентификация, цифровая подпись). Криптографические средства защиты (криптосистемы и принципы ее работы, распространение ключей, алгоритмы).

    курсовая работа [55,7 K], добавлен 08.03.2008

  • Криптографическая защита как элемент систем обеспечения безопасности информации. Исторические шифры и их взлом. Особенности современной криптологии и криптографии. Основные методы современного криптоанализа, их сущность, особенности и характеристика.

    курсовая работа [57,1 K], добавлен 14.06.2012

  • Принципы криптографии, история ее развития. Шифры с секретным и с открытым ключом. Криптография как оружие, угрозы данным, их раскрытие. Ужесточчение мер в отношении использования криптоалгоритмов. Раскрытие криптосистемы и стойкость системы к раскрытию.

    доклад [35,8 K], добавлен 09.11.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.