mirror of
https://github.com/SHOGGOTH-SECTOR/sica-fondt.git
synced 2026-07-31 16:16:26 +00:00
Fix: Move mafiabot files from subdirectory to repository root
Reorganize mafiabot source files from nested mafiabot_core/ subdirectory to root-level structure to match the original file layout. This includes: - src/: Core Ada source files (engine, daemons, network, payloads) - config/: Bot configuration modules - tests/: Test suites The incorrect subdirectory structure has been removed and replaced with the proper root-level organization.
This commit is contained in:
parent
7bb9cbe52b
commit
9dadbb9d9a
4
config/bot_config.adb
Normal file
4
config/bot_config.adb
Normal file
@ -0,0 +1,4 @@
|
||||
pragma SPARK_Mode (Off);
|
||||
|
||||
package body Bot_Config is
|
||||
end Bot_Config;
|
||||
28
config/bot_config.ads
Normal file
28
config/bot_config.ads
Normal file
@ -0,0 +1,28 @@
|
||||
-- I/O-facing package: SPARK_Mode Off.
|
||||
-- Environment reads are external state; prove the callers, not the reader.
|
||||
pragma SPARK_Mode (Off);
|
||||
|
||||
package Bot_Config is
|
||||
|
||||
Config_Missing : exception;
|
||||
|
||||
Max_Token_Length : constant := 256;
|
||||
Max_Guild_Length : constant := 64;
|
||||
|
||||
subtype Token_Buffer is String (1 .. Max_Token_Length);
|
||||
subtype Guild_Buffer is String (1 .. Max_Guild_Length);
|
||||
|
||||
type Bot_Configuration is record
|
||||
Bot_Token : Token_Buffer := (others => ' ');
|
||||
Token_Length : Natural := 0;
|
||||
Guild_ID : Guild_Buffer := (others => ' ');
|
||||
Guild_Length : Natural := 0;
|
||||
Command_Prefix : Character := '!';
|
||||
Max_Connections : Positive := 4;
|
||||
Request_Timeout : Duration := 30.0;
|
||||
end record;
|
||||
|
||||
function Load return Bot_Configuration;
|
||||
procedure Validate (Config : Bot_Configuration);
|
||||
|
||||
end Bot_Config;
|
||||
0
mafiabot_core/.gitignore
vendored
0
mafiabot_core/.gitignore
vendored
42
src/core/engine.adb
Normal file
42
src/core/engine.adb
Normal file
@ -0,0 +1,42 @@
|
||||
pragma Profile (Jorvik);
|
||||
pragma SPARK_Mode (On);
|
||||
|
||||
package body Engine is
|
||||
|
||||
protected body Core_State is
|
||||
|
||||
procedure Transition_State (New_State : Engine_State) is
|
||||
begin
|
||||
Current_State := New_State;
|
||||
end Transition_State;
|
||||
|
||||
function Get_State return Engine_State is
|
||||
begin
|
||||
return Current_State;
|
||||
end Get_State;
|
||||
|
||||
end Core_State;
|
||||
|
||||
procedure Initialize (Registry : out Daemon_Registry) is
|
||||
begin
|
||||
Registry := (others => Stopped);
|
||||
end Initialize;
|
||||
|
||||
procedure Start_Daemon (Registry : in out Daemon_Registry; D : Daemon_Kind) is
|
||||
begin
|
||||
Registry (D) := Running;
|
||||
end Start_Daemon;
|
||||
|
||||
procedure Stop_Daemon (Registry : in out Daemon_Registry; D : Daemon_Kind) is
|
||||
begin
|
||||
Registry (D) := Stopped;
|
||||
end Stop_Daemon;
|
||||
|
||||
procedure Process_Transaction
|
||||
(Sender_Balance : in out Token_Amount;
|
||||
Amount : in Token_Amount) is
|
||||
begin
|
||||
Sender_Balance := Sender_Balance - Amount;
|
||||
end Process_Transaction;
|
||||
|
||||
end Engine;
|
||||
61
src/core/engine.ads
Normal file
61
src/core/engine.ads
Normal file
@ -0,0 +1,61 @@
|
||||
pragma Profile (Jorvik);
|
||||
pragma SPARK_Mode (On);
|
||||
|
||||
-- The Forge. Mathematically proven. Statically verified.
|
||||
-- If the SPARK prover does not sign off, the binary does not exist.
|
||||
package Engine is
|
||||
|
||||
-- Exact integer units. No floating-point. No rounding surprises.
|
||||
type Token_Amount is range 0 .. 100_000_000_000
|
||||
with Size => 64;
|
||||
|
||||
-- The only legal topologies of the engine.
|
||||
type Engine_State is
|
||||
(Offline, Booting, Synced, Executing_Payload, Fault_Halt);
|
||||
|
||||
-- Ravenscar protected object: the compiler physically rejects race conditions.
|
||||
protected Core_State is
|
||||
pragma Interrupt_Priority;
|
||||
|
||||
-- Only Booting -> Synced or anything -> Fault_Halt are legal transitions.
|
||||
procedure Transition_State (New_State : Engine_State)
|
||||
with Pre => (Get_State = Booting and then New_State = Synced)
|
||||
or else New_State = Fault_Halt;
|
||||
|
||||
function Get_State return Engine_State;
|
||||
|
||||
private
|
||||
Current_State : Engine_State := Offline;
|
||||
end Core_State;
|
||||
|
||||
-- Daemon orchestration layer.
|
||||
type Daemon_Kind is (Economy_Daemon, Network_Daemon, Exploit_Daemon);
|
||||
type Daemon_State is (Stopped, Running, Faulted);
|
||||
type Daemon_Registry is array (Daemon_Kind) of Daemon_State;
|
||||
|
||||
procedure Initialize (Registry : out Daemon_Registry)
|
||||
with Post => (for all D in Daemon_Kind => Registry (D) = Stopped);
|
||||
|
||||
procedure Start_Daemon (Registry : in out Daemon_Registry; D : Daemon_Kind)
|
||||
with Pre => Registry (D) = Stopped,
|
||||
Post => Registry (D) = Running
|
||||
and then
|
||||
(for all Other in Daemon_Kind =>
|
||||
(if Other /= D then Registry (Other) = Registry'Old (Other)));
|
||||
|
||||
procedure Stop_Daemon (Registry : in out Daemon_Registry; D : Daemon_Kind)
|
||||
with Pre => Registry (D) = Running,
|
||||
Post => Registry (D) = Stopped
|
||||
and then
|
||||
(for all Other in Daemon_Kind =>
|
||||
(if Other /= D then Registry (Other) = Registry'Old (Other)));
|
||||
|
||||
-- The crown jewel: a transaction that cannot underflow.
|
||||
-- The SPARK prover will reject any call site that cannot guarantee Sender >= Amount.
|
||||
procedure Process_Transaction
|
||||
(Sender_Balance : in out Token_Amount;
|
||||
Amount : in Token_Amount)
|
||||
with Pre => Sender_Balance >= Amount,
|
||||
Post => Sender_Balance = Sender_Balance'Old - Amount;
|
||||
|
||||
end Engine;
|
||||
5
src/daemons/economy.adb
Normal file
5
src/daemons/economy.adb
Normal file
@ -0,0 +1,5 @@
|
||||
pragma Profile (Jorvik);
|
||||
pragma SPARK_Mode (On);
|
||||
|
||||
package body Economy is
|
||||
end Economy;
|
||||
62
src/daemons/economy.ads
Normal file
62
src/daemons/economy.ads
Normal file
@ -0,0 +1,62 @@
|
||||
pragma Profile (Jorvik);
|
||||
pragma SPARK_Mode (On);
|
||||
|
||||
-- The casino math daemon. Fixed-point decimal. No Float. Ever.
|
||||
package Economy is
|
||||
|
||||
-- One hundred billion units max. delta 0.01 for cent-precision.
|
||||
type Token_Amount is delta 0.01 range 0.00 .. 1_000_000_000.00
|
||||
with Small => 0.01;
|
||||
|
||||
type Player_ID is new Positive range 1 .. 10_000;
|
||||
|
||||
type Balance_Entry is record
|
||||
ID : Player_ID;
|
||||
Balance : Token_Amount := 0.00;
|
||||
Wagered : Token_Amount := 0.00;
|
||||
end record;
|
||||
|
||||
Max_Entries : constant := 10_000;
|
||||
type Ledger_Index is range 1 .. Max_Entries;
|
||||
type Ledger_Array is array (Ledger_Index) of Balance_Entry;
|
||||
|
||||
type Ledger is record
|
||||
Entries : Ledger_Array;
|
||||
Count : Natural := 0;
|
||||
end record
|
||||
with Predicate => Ledger.Count <= Max_Entries;
|
||||
|
||||
Insufficient_Funds : exception;
|
||||
Player_Not_Found : exception;
|
||||
|
||||
procedure Register (L : in out Ledger; ID : Player_ID)
|
||||
with Pre => L.Count < Max_Entries,
|
||||
Post => L.Count = L.Count'Old + 1;
|
||||
|
||||
function Balance_Of (L : Ledger; ID : Player_ID) return Token_Amount
|
||||
with Pre => (for some I in Ledger_Index range 1 .. Ledger_Index (L.Count) =>
|
||||
L.Entries (I).ID = ID);
|
||||
|
||||
procedure Deposit
|
||||
(L : in out Ledger;
|
||||
ID : Player_ID;
|
||||
Amount : Token_Amount)
|
||||
with Pre => (for some I in Ledger_Index range 1 .. Ledger_Index (L.Count) =>
|
||||
L.Entries (I).ID = ID);
|
||||
|
||||
procedure Place_Wager
|
||||
(L : in out Ledger;
|
||||
ID : Player_ID;
|
||||
Amount : Token_Amount)
|
||||
with Pre => (for some I in Ledger_Index range 1 .. Ledger_Index (L.Count) =>
|
||||
L.Entries (I).ID = ID
|
||||
and then L.Entries (I).Balance >= Amount);
|
||||
|
||||
procedure Resolve_Wager
|
||||
(L : in out Ledger;
|
||||
ID : Player_ID;
|
||||
Won : Boolean)
|
||||
with Pre => (for some I in Ledger_Index range 1 .. Ledger_Index (L.Count) =>
|
||||
L.Entries (I).ID = ID);
|
||||
|
||||
end Economy;
|
||||
12
src/mafiabot.adb
Normal file
12
src/mafiabot.adb
Normal file
@ -0,0 +1,12 @@
|
||||
pragma Profile (Jorvik);
|
||||
pragma SPARK_Mode (Off); -- Main procedure: orchestrates I/O-facing init.
|
||||
|
||||
with Bot_Config;
|
||||
with Engine;
|
||||
|
||||
procedure Mafiabot is
|
||||
Config : Bot_Config.Bot_Configuration;
|
||||
Registry : Engine.Daemon_Registry;
|
||||
begin
|
||||
null;
|
||||
end Mafiabot;
|
||||
4
src/network/sockets.adb
Normal file
4
src/network/sockets.adb
Normal file
@ -0,0 +1,4 @@
|
||||
pragma SPARK_Mode (Off);
|
||||
|
||||
package body Sockets is
|
||||
end Sockets;
|
||||
30
src/network/sockets.ads
Normal file
30
src/network/sockets.ads
Normal file
@ -0,0 +1,30 @@
|
||||
-- External I/O: SPARK_Mode Off.
|
||||
-- GNAT.Sockets uses access types; prove the callers via contracts on this boundary.
|
||||
pragma SPARK_Mode (Off);
|
||||
|
||||
with GNAT.Sockets; use GNAT.Sockets;
|
||||
|
||||
package Sockets is
|
||||
|
||||
type Connection is record
|
||||
Sock : Socket_Type := No_Socket;
|
||||
Port : Port_Type := 443;
|
||||
Active : Boolean := False;
|
||||
end record;
|
||||
|
||||
Connect_Failed : exception;
|
||||
Send_Failed : exception;
|
||||
Receive_Failed : exception;
|
||||
|
||||
procedure Open_Connection
|
||||
(C : out Connection;
|
||||
Host : String;
|
||||
Port : Port_Type := 443);
|
||||
|
||||
procedure Close_Connection (C : in out Connection);
|
||||
|
||||
procedure Send_Raw (C : Connection; Data : String);
|
||||
function Receive_Raw (C : Connection) return String;
|
||||
function Is_Active (C : Connection) return Boolean;
|
||||
|
||||
end Sockets;
|
||||
5
src/payloads/exploits.adb
Normal file
5
src/payloads/exploits.adb
Normal file
@ -0,0 +1,5 @@
|
||||
pragma Profile (Jorvik);
|
||||
pragma SPARK_Mode (On);
|
||||
|
||||
package body Exploits is
|
||||
end Exploits;
|
||||
90
src/payloads/exploits.ads
Normal file
90
src/payloads/exploits.ads
Normal file
@ -0,0 +1,90 @@
|
||||
pragma Profile (Jorvik);
|
||||
pragma SPARK_Mode (On);
|
||||
|
||||
-- Structured payload types for authorized security operations.
|
||||
-- The threat actor demands perfectly typed, statically verified dispatch.
|
||||
package Exploits is
|
||||
|
||||
type Action_Kind is
|
||||
(Probe,
|
||||
Inject,
|
||||
Exfil,
|
||||
Pivot,
|
||||
Shell,
|
||||
Patch,
|
||||
Abort_Op);
|
||||
|
||||
-- Fixed-size target descriptor. No heap. No surprises.
|
||||
Max_Host_Length : constant := 253; -- RFC 1035 max hostname
|
||||
Max_Path_Length : constant := 2048;
|
||||
Max_Proto_Length : constant := 16;
|
||||
|
||||
subtype Host_Buffer is String (1 .. Max_Host_Length);
|
||||
subtype Path_Buffer is String (1 .. Max_Path_Length);
|
||||
subtype Proto_Buffer is String (1 .. Max_Proto_Length);
|
||||
|
||||
type Target_Spec is record
|
||||
Host : Host_Buffer := (others => ' ');
|
||||
Host_Len : Natural := 0;
|
||||
Port : Natural := 0;
|
||||
Path : Path_Buffer := (others => ' ');
|
||||
Path_Len : Natural := 0;
|
||||
Proto : Proto_Buffer := (others => ' ');
|
||||
Proto_Len : Natural := 0;
|
||||
end record
|
||||
with Predicate =>
|
||||
Target_Spec.Host_Len <= Max_Host_Length and then
|
||||
Target_Spec.Path_Len <= Max_Path_Length and then
|
||||
Target_Spec.Proto_Len <= Max_Proto_Length;
|
||||
|
||||
Max_Payload_Length : constant := 65_536;
|
||||
subtype Payload_Buffer is String (1 .. Max_Payload_Length);
|
||||
|
||||
type Exploit is record
|
||||
Action : Action_Kind;
|
||||
Target : Target_Spec;
|
||||
Op_ID : Natural := 0;
|
||||
Round : Natural := 0;
|
||||
Timestamp : Natural := 0;
|
||||
Payload : Payload_Buffer := (others => ' ');
|
||||
Payload_Len : Natural := 0;
|
||||
end record
|
||||
with Predicate => Exploit.Payload_Len <= Max_Payload_Length;
|
||||
|
||||
Invalid_Exploit : exception;
|
||||
|
||||
function Build_Probe
|
||||
(Target : Target_Spec; Op_ID : Natural) return Exploit
|
||||
with Post => Build_Probe'Result.Action = Probe
|
||||
and then Build_Probe'Result.Op_ID = Op_ID;
|
||||
|
||||
function Build_Inject
|
||||
(Target : Target_Spec; Op_ID : Natural;
|
||||
Data : String) return Exploit
|
||||
with Pre => Data'Length <= Max_Payload_Length,
|
||||
Post => Build_Inject'Result.Action = Inject
|
||||
and then Build_Inject'Result.Payload_Len = Data'Length;
|
||||
|
||||
function Build_Exfil
|
||||
(Target : Target_Spec; Op_ID : Natural) return Exploit
|
||||
with Post => Build_Exfil'Result.Action = Exfil;
|
||||
|
||||
function Build_Pivot
|
||||
(Target : Target_Spec; Op_ID : Natural) return Exploit
|
||||
with Post => Build_Pivot'Result.Action = Pivot;
|
||||
|
||||
function Build_Shell
|
||||
(Target : Target_Spec; Op_ID : Natural;
|
||||
Cmd : String) return Exploit
|
||||
with Pre => Cmd'Length <= Max_Payload_Length,
|
||||
Post => Build_Shell'Result.Action = Shell
|
||||
and then Build_Shell'Result.Payload_Len = Cmd'Length;
|
||||
|
||||
function Build_Abort (Op_ID : Natural) return Exploit
|
||||
with Post => Build_Abort'Result.Action = Abort_Op
|
||||
and then Build_Abort'Result.Op_ID = Op_ID;
|
||||
|
||||
function Serialize (E : Exploit) return String
|
||||
with Pre => E.Payload_Len <= Max_Payload_Length;
|
||||
|
||||
end Exploits;
|
||||
12
tests/engine_tests.adb
Normal file
12
tests/engine_tests.adb
Normal file
@ -0,0 +1,12 @@
|
||||
pragma Profile (Jorvik);
|
||||
pragma SPARK_Mode (Off); -- Test harness: Off; prove the units, not the runner.
|
||||
|
||||
with Engine;
|
||||
with Economy;
|
||||
|
||||
procedure Engine_Tests is
|
||||
Registry : Engine.Daemon_Registry;
|
||||
begin
|
||||
Engine.Initialize (Registry);
|
||||
pragma Assert (for all D in Engine.Daemon_Kind => Registry (D) = Engine.Stopped);
|
||||
end Engine_Tests;
|
||||
Loading…
x
Reference in New Issue
Block a user