mirror of
https://github.com/SHOGGOTH-SECTOR/sica-fondt.git
synced 2026-07-31 16:16:26 +00:00
Delete trust_boundary.adb
This commit is contained in:
parent
dadd786186
commit
63d0c79b30
@ -1,125 +0,0 @@
|
||||
package body Trust_Boundary
|
||||
with SPARK_Mode => On
|
||||
is
|
||||
|
||||
function Matches_Blocklist
|
||||
(Text : Bounded_Text;
|
||||
List : Blocklist) return Boolean
|
||||
is
|
||||
begin
|
||||
for I in Blocklist_Index loop
|
||||
declare
|
||||
P : constant Pattern_Entry := List (I);
|
||||
begin
|
||||
if not P.Active or else P.Pattern_Len = 0 then
|
||||
goto Next_Pattern;
|
||||
end if;
|
||||
-- Naive substring search
|
||||
if Text.Length >= P.Pattern_Len then
|
||||
for J in 1 .. Text.Length - P.Pattern_Len + 1 loop
|
||||
if Text.Data (J .. J + P.Pattern_Len - 1) =
|
||||
P.Pattern (1 .. P.Pattern_Len)
|
||||
then
|
||||
return True;
|
||||
end if;
|
||||
end loop;
|
||||
end if;
|
||||
end;
|
||||
<<Next_Pattern>>
|
||||
null;
|
||||
end loop;
|
||||
return False;
|
||||
end Matches_Blocklist;
|
||||
|
||||
procedure Validate_Provenance
|
||||
(Source : in Provenance_Tag;
|
||||
Claimed : in Provenance_Tag;
|
||||
Result : out Operation_Status)
|
||||
is
|
||||
begin
|
||||
if Source /= Claimed then
|
||||
Result := Error_Trust_Violation;
|
||||
else
|
||||
Result := OK;
|
||||
end if;
|
||||
end Validate_Provenance;
|
||||
|
||||
procedure Check_Rate
|
||||
(Limit : in out Rate_Limit;
|
||||
Tick : in Natural;
|
||||
Result : out Operation_Status)
|
||||
is
|
||||
begin
|
||||
-- Roll window if we've passed the window boundary
|
||||
if Tick - Limit.Window_Start >= Limit.Window_Size then
|
||||
Limit.Window_Start := Tick;
|
||||
Limit.Current_Count := 0;
|
||||
end if;
|
||||
|
||||
if Limit.Current_Count >= Limit.Max_Per_Window then
|
||||
Result := Error_Blocked;
|
||||
else
|
||||
Limit.Current_Count := Limit.Current_Count + 1;
|
||||
Result := OK;
|
||||
end if;
|
||||
end Check_Rate;
|
||||
|
||||
procedure Check_Message
|
||||
(Msg : in Organ_Message;
|
||||
Result : out Operation_Status)
|
||||
is
|
||||
begin
|
||||
-- System_Internal always passes (SPARK Post condition)
|
||||
if Msg.Provenance = System_Internal then
|
||||
Result := OK;
|
||||
return;
|
||||
end if;
|
||||
|
||||
-- Check blocklist
|
||||
if Matches_Blocklist (Msg.Payload, Default_Blocklist) then
|
||||
Result := Error_Trust_Violation;
|
||||
return;
|
||||
end if;
|
||||
|
||||
Result := OK;
|
||||
end Check_Message;
|
||||
|
||||
protected body Trust_Guard is
|
||||
|
||||
procedure Screen_Inbound
|
||||
(Msg : in Organ_Message;
|
||||
Status : out Operation_Status)
|
||||
is
|
||||
Rate_Status : Operation_Status;
|
||||
Msg_Status : Operation_Status;
|
||||
begin
|
||||
Tick := Tick + 1;
|
||||
Check_Rate (Inbound_Rate, Tick, Rate_Status);
|
||||
if Rate_Status /= OK then
|
||||
Status := Rate_Status;
|
||||
return;
|
||||
end if;
|
||||
Check_Message (Msg, Msg_Status);
|
||||
Status := Msg_Status;
|
||||
end Screen_Inbound;
|
||||
|
||||
procedure Screen_Outbound
|
||||
(Msg : in Organ_Message;
|
||||
Status : out Operation_Status)
|
||||
is
|
||||
Rate_Status : Operation_Status;
|
||||
Msg_Status : Operation_Status;
|
||||
begin
|
||||
Tick := Tick + 1;
|
||||
Check_Rate (Outbound_Rate, Tick, Rate_Status);
|
||||
if Rate_Status /= OK then
|
||||
Status := Rate_Status;
|
||||
return;
|
||||
end if;
|
||||
Check_Message (Msg, Msg_Status);
|
||||
Status := Msg_Status;
|
||||
end Screen_Outbound;
|
||||
|
||||
end Trust_Guard;
|
||||
|
||||
end Trust_Boundary;
|
||||
Loading…
x
Reference in New Issue
Block a user