-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfile_crypter.adb
51 lines (50 loc) · 1.32 KB
/
file_crypter.adb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package body file_crypter is
procedure init_key(key : key_s) is
begin
raiden.init_key(key);
end init_key;
procedure file_crypt(in_file : byte_io.File_Type; out_file : out byte_io.File_Type; mode_crypt : mode) is
type raiden_access is access procedure (x : in byte_array_8; y : out byte_array_8);
raiden_operation : raiden_access;
t_b : byte;
in_buf, out_buf : byte_array_8;
in_ind : earth := 0;
t_i : integer := 7;
begin
if mode_crypt = mode'(encrypt) then
raiden_operation := raiden.raiden_encrypt'access;
else
raiden_operation := raiden.raiden_decrypt'access;
end if;
loop
if byte_io.end_of_file(in_file) then
if in_ind /= 0 then
for i in in_ind..7 loop
in_buf(integer(i)) := 0;
end loop;
else
exit;
end if;
in_ind := 0;
else
byte_io.read(in_file, t_b);
in_buf(integer(in_ind)) := t_b;
increment(in_ind);
end if;
if in_ind = 0 then
raiden_operation(in_buf, out_buf);
if byte_io.end_of_file(in_file) then
for i in reverse 0..7 loop
if out_buf(i) /= 0 then
t_i := i;
exit;
end if;
end loop;
end if;
for i in 0..t_i loop
byte_io.write(out_file, out_buf(i));
end loop;
end if;
end loop;
end file_crypt;
end file_crypter;