
Добавил:
LeHAHAHA
Да поможет вам Котельников
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Курсовая / poiasn
.txt .SECTION/DM vars;
//-Переменные для обработки сигнала-//
.var t;
.var g = 1234; //Входной ключ
.var k;
.var z = 62023;
.var n = 40977;
.var sd;
.var otvet;
.var/circ bank[16];
//----------------------------------//
.SECTION/PM varsp;
.SECTION/PM program;
jump def; rti; rti; rti;
rti; rti; rti; rti;
rti; rti; rti; rti;
rti; rti; rti; rti;
rti; rti; rti; rti;
rti; rti; rti; rti;
rti; rti; rti; rti;
rti; rti; rti; rti;
rti; rti; rti; rti;
rti; rti; rti; rti;
rti; rti; rti; rti;
rti; rti; rti; rti;
//----------------Подпрограмма обратки инфорамации-----------//
//Генерация ключей по алгоритму Диффи-Хелмана в расширенных полях Галуа
//-----------------------------------------------------------//
def:
ena m_mode;
dis ar_sat;
//Возведение сообщения в степень z
ax0 = dm(g);
dm(t) = ax0;
ax0 = dm(z);
dm(k) = ax0;
call stepen;
dm(otvet) = ar;
rts;
//----------------------------------------------------------------//
// Банк степеней
//----------------------------------------------------------------//
stepen:
I0 = bank; //иницилизация банка степей регистрами ГАДа
L0 = length(bank);
m1 = 1;
ar = dm(t); //множимое
mr0 = dm(t); //множитель
dm(I0,m1) = ar; //заполнение g^1
cntr = 15;
do ms until ce;
call umn; //подпрограмма умножения
dm(I0,m1) = ar; // запись в банк g^(2^i) mod n
ms: mr0 = ar; // обновление множителя
ax0 = dm(k); //запись степени
sr0 = 1; // иницилизация указателя
dm(sd) = sr0; // буффер указателя
se = 1; // шаг сдвига
mr0 = 1; // буффер итогового значения
dm(otvet) = mr0; // иницилизация ответа буффером
ar = 1;
cntr = 16;
do p1 until ce;
ar = dm(I0,m1); //запись в множимое значения из банка
mr0 = dm(otvet); //запись в множитель значения из банка
ay0 = dm(sd); // запись указателя для проверки
none = ax0 and ay0; // проверка степени указателем (если 0, то данная степень не является нашей / если не 0 , то данная степень является нашей)
if ne call umn; // вызов подпрограммы уможения при не 0 значении none
sr0 = dm(sd); //запись указателя
sr = lshift sr0(lo); //сдвиг указателя влево на 1
dm(sd) = sr0; //обновление указателя
p1: nop;
rts;
//----------------------------------------------------------------//
// Умножение в расшширенных полях Галуа
//----------------------------------------------------------------//
umn:
ay0 = 0; // обнуление переменной
af = pass ay0; // обнуление переменной
ay1 = dm(n); // запись модуля поля
sr0 = 1; // иницилизация указателя
se = 1; //шаг сдвигателя
ay0 = sr0; //запись указателя
none = mr0 and ay0; //проверка младшего бита множителя (если 0, то мы не записываем множимое/если не 0 , то записываем множимое)
if NE af = pass ar; //обновление буффера для записи ответа
CNTR = 15;
do cicle until CE;
sr = lshift sr0 (lo); //сдвиг указателя
ay0 = ar; //запись множимого
ar = ar + ay0; //сдвиг множимого на 1 бит влево
ay0 = sr0; //запись указателя
if ac ar = ar xor ay1; //проверка признака АС, при условии что оно есть происходит xor множимого и модуля поля
none = mr0 and ay0; //проверка бита множителя указателем
cicle: if ne af = ar xor af; //если значение не 0, то используем xor множимого и буффера
ar = pass af; //запись ответа
dm(otvet) = ar; //обновление буффера
RTS;
//-Переменные для обработки сигнала-//
.var t;
.var g = 1234; //Входной ключ
.var k;
.var z = 62023;
.var n = 40977;
.var sd;
.var otvet;
.var/circ bank[16];
//----------------------------------//
.SECTION/PM varsp;
.SECTION/PM program;
jump def; rti; rti; rti;
rti; rti; rti; rti;
rti; rti; rti; rti;
rti; rti; rti; rti;
rti; rti; rti; rti;
rti; rti; rti; rti;
rti; rti; rti; rti;
rti; rti; rti; rti;
rti; rti; rti; rti;
rti; rti; rti; rti;
rti; rti; rti; rti;
rti; rti; rti; rti;
//----------------Подпрограмма обратки инфорамации-----------//
//Генерация ключей по алгоритму Диффи-Хелмана в расширенных полях Галуа
//-----------------------------------------------------------//
def:
ena m_mode;
dis ar_sat;
//Возведение сообщения в степень z
ax0 = dm(g);
dm(t) = ax0;
ax0 = dm(z);
dm(k) = ax0;
call stepen;
dm(otvet) = ar;
rts;
//----------------------------------------------------------------//
// Банк степеней
//----------------------------------------------------------------//
stepen:
I0 = bank; //иницилизация банка степей регистрами ГАДа
L0 = length(bank);
m1 = 1;
ar = dm(t); //множимое
mr0 = dm(t); //множитель
dm(I0,m1) = ar; //заполнение g^1
cntr = 15;
do ms until ce;
call umn; //подпрограмма умножения
dm(I0,m1) = ar; // запись в банк g^(2^i) mod n
ms: mr0 = ar; // обновление множителя
ax0 = dm(k); //запись степени
sr0 = 1; // иницилизация указателя
dm(sd) = sr0; // буффер указателя
se = 1; // шаг сдвига
mr0 = 1; // буффер итогового значения
dm(otvet) = mr0; // иницилизация ответа буффером
ar = 1;
cntr = 16;
do p1 until ce;
ar = dm(I0,m1); //запись в множимое значения из банка
mr0 = dm(otvet); //запись в множитель значения из банка
ay0 = dm(sd); // запись указателя для проверки
none = ax0 and ay0; // проверка степени указателем (если 0, то данная степень не является нашей / если не 0 , то данная степень является нашей)
if ne call umn; // вызов подпрограммы уможения при не 0 значении none
sr0 = dm(sd); //запись указателя
sr = lshift sr0(lo); //сдвиг указателя влево на 1
dm(sd) = sr0; //обновление указателя
p1: nop;
rts;
//----------------------------------------------------------------//
// Умножение в расшширенных полях Галуа
//----------------------------------------------------------------//
umn:
ay0 = 0; // обнуление переменной
af = pass ay0; // обнуление переменной
ay1 = dm(n); // запись модуля поля
sr0 = 1; // иницилизация указателя
se = 1; //шаг сдвигателя
ay0 = sr0; //запись указателя
none = mr0 and ay0; //проверка младшего бита множителя (если 0, то мы не записываем множимое/если не 0 , то записываем множимое)
if NE af = pass ar; //обновление буффера для записи ответа
CNTR = 15;
do cicle until CE;
sr = lshift sr0 (lo); //сдвиг указателя
ay0 = ar; //запись множимого
ar = ar + ay0; //сдвиг множимого на 1 бит влево
ay0 = sr0; //запись указателя
if ac ar = ar xor ay1; //проверка признака АС, при условии что оно есть происходит xor множимого и модуля поля
none = mr0 and ay0; //проверка бита множителя указателем
cicle: if ne af = ar xor af; //если значение не 0, то используем xor множимого и буффера
ar = pass af; //запись ответа
dm(otvet) = ar; //обновление буффера
RTS;
Соседние файлы в папке Курсовая