Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kursova_Ivanenko2_chastina.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
216 Кб
Скачать
☆

В проекті використовуються наступні умовні позначення:

  • входные порты:

clk – тактовый сигнал;

clk_out – тактовый сигнал для вывода информации на выходные порты;

cod – тактовый сигнал, используемый процессе шифрования;

decod – тактовый сигнал используемый в процессе дешифрования;

en_rd_f – сигнал разрешения чтения текстовых данных из файла;

en_wr_f – сигнал разрешения записи дешифрованной информации в файл;

– выходные порты:

code – порт для вывода зашифрованной информации в формате integer;

code1 – порт для вывода зашифрованной информации в формате s_l_v;

decode – порт для вывода дешифрованной информации типом character.

Код програми:

library IEEE, lib_kyrs;

use IEEE.STD_LOGIC_1164.all;

use std.textio.all;

use CONVERTERS.all;

- ------------------------------------

entity elgamal is

port( clk : in std_logic;--тактовый сигнал

clk_out: in std_logic;-- т.с. для вывода инф-ии на вых. порты

cod : in std_logic;-- сигналы, используемые в процессах

decod : in std_logic;--шифрования и дешифрования

en_rd_f: in std_logic;--cигн.разреш. чтения текст. данных из файла ОС

en_wr_f: in std_logic;--cигн.разреш. записи деш.инф. в файл ОС

code : out integer; --порт для вывода зашифрованной инф.

code1 : out std_logic_vector (0 to 7);--порт для вывода зашифр. инф.

decode : out character );-- порт для вывода дешифрованной информации

end elgamal;

-------------------------------------

architecture arch of elgamal is

signal mas_inf :string(1 to 96);

signal sig_decod_ch :string(1 to 96);

signal sig_data_ch :string(1 to 96);

type mas_slv is array (1 to 96)of std_logic_vector(0 to 7);

type mas_int is array (1 to 96) of integer;

signal sig_cod1_slv : mas_slv;

signal sig_cod_int : mas_int;

signal sig_data_int : mas_int;

signal sig_decode_int:mas_int;

begin

- -Оператор process реализующий чтения текстовых данных из файла "data.dat"

-- mas_inf и инициализацию текстового массива mas_inf

read_proc: process(clk)

variable read_buf1 : string(1 to 96); --буфер

variable wid1 : natural;

--объявление файла-контейнера, с помощью которого буде осуществлять

-- чтение из файла ОС

file read_cont_data : TEXT open READ_MODE is

"C:\my_designs\hhhhhhh\src\1.txt";

begin

if clk'event and clk ='1' and en_rd_f ='1' then

FILE_OPEN(read_cont_data,"C:\my_designs\hhhhhhh\src\1.txt",

READ_MODE );

-- Инициализация текстового массива

mas_inf <= read_buf1;

end if;

FILE_CLOSE(read_cont_data);

end process;

---------- шифрование / дешифрование-----------

--Оператор process реализует процедуру шифрования

--текстовой информации с предварительным конвертированием

--их из формата character в формат integer

process(clk)

process(clk)

constant p: integer:=11;

constant k: integer:=9;

constant y: integer:=3;

constant g: integer:=2;

variable i: positive;

begin

if clk'event and clk = '1' and cod ='1' then

-- инициализация вспомогательного внутреннего сигнала

sig_data_ch <= mas_inf;

---шифрование с использованием открытого ключа (p,g,y)---

for i in 1 to 96 loop

-- преобразование character в integer

sig_data_int(i) <= CONV(sig_data_ch(i));

sig_cod_int(i)<=(sig_data_int(i)and(step(k,y)))rem p;

--преобразование integer в std_logic_vector

sig_cod1_slv(i)<=CONV(sig_cod_int(i));

end loop;

end if;

end process;

---дешифрование с использованием секретного ключа (х)---

process(clk)

variable i: positive;

constant x: integer:=8;

constant p: integer:=11;

constant a: integer:=6;

begin

if clk'event and clk = '1' and decod ='1' then

for i in 1 to 96 loop

sig_decode_int(i)<=(sig_cod_int(i) and (step(-x,a)))rem p;

--преобразование integer в character

sig_decod_ch(i) <= CONV(sig_decode_int(i));

end loop;

end if;

end process;

--процесс вывода зашифрованной / дешифрованной информации

--на выходные порты

process (clk_out)

variable i:positive;

begin

if clk_out'event and clk_out = '1' and i<=96 then

code <= sig_cod_int(i);

code1 <= sig_cod1_slv(i);

decode <= sig_decod_ch(i);

i:=i+1;

end if;

end process;

--Оператор process реализует процедуру записи дешифровфнных

--текстовых данных в файл ОС decode.dat.

--При записи новых данных в файл старые данные автоматически

--уничтожаются.

process(clk)

-- Объявление программного буферного массива

variable write_buf : string(1 to 96);

-- Организация контейнера (величины файлового типа)

file wtite_conteiner : TEXT open write_MODE is

" C:\my_designs\hhhhhhh\src\2.txt";

begin

if clk'event and clk ='1' and en_wr_f ='1' then

--Инициализация программного буферного массива write_buf массивом

-- decod_ch

write_buf := sig_decod_ch;

FILE_OPEN(wtite_conteiner,

" C:\my_designs\hhhhhhh\src\2.txt", write_MODE );

WRITE(wtite_conteiner, write_buf);

end if;

FILE_CLOSE(wtite_conteiner);

end process;

end arch;

К проекту подключен библиотечный пакет TEXTIO, в котором определен специальный файловый тип TEXT, дающий возможность получать доступ к текстовой информации в файлах ОС, а также выполнять операции READ, WRITE, APPEND.

Кроме того, к проекту подключена библиотека пользователя под названием lib_kyrs.lib. Эта библиотека используется только в пределах данного проекта. Библиотека lib_kyrs.lib содержит пакет func с описание функций conv ( ), конвертирующих данные разных типов, а также функцию возведения в степень step( ).

Используемые функции СONV конвертируюn данные таких типов:

–character -> integer;

–integer -> character;

–integer -> std_logic_vector;

Функция step( ) выполняет в проекте операции возведения в степень.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]