1with Ada.IO_Exceptions; 2 3package body Crypto.Types.Nonces.Nonces_Ctr is 4 5 function Update(This : in out Nonce_Ctr) return N.Block is 6 Return_Value : N.Block; 7 begin 8 This.Mutex.Seize; 9 This.Value := Inc(This.Value); 10 ADIO.Write(This.File,This.Value); 11 ADIO.Set_Index(This.File,1); 12 Return_Value := This.Value; 13 This.Mutex.Release; 14 return Return_Value; 15 end Update; 16 17 ---------------------------------------------------------------------------- 18 19 procedure Aux_Init(This : in out Nonce_Ctr; IV: in N.Block) is 20 begin 21 if ADIO.End_Of_File (This.File) then 22 This.Value := IV; 23 ADIO.Write(This.File,This.Value); 24 else 25 ADIO.Read(This.File, This.Value); 26 end if; 27 ADIO.Set_Index(This.File,1); 28 end Aux_Init; 29 30------------------------------------------------------------------------------- 31 32 procedure Initialize(This : in out Nonce_Ctr; File_Path : in String) is 33 begin 34 ADIO.Open(This.File, ADIO.Inout_File, File_Path); 35 ADIO.Read(This.File, This.Value); 36 ADIO.Set_Index(This.File,1); 37 end Initialize; 38 39------------------------------------------------------------------------------- 40 41 procedure Initialize(This : in out Nonce_Ctr; File_Path : in String; IV: in N.Block) is 42 begin 43 ADIO.Open(This.File, ADIO.Inout_File, File_Path); 44 Aux_Init(This, IV); 45 exception 46 when Ada.IO_Exceptions.Status_Error | Ada.IO_Exceptions.Name_Error => 47 ADIO.Create(This.File, ADIO.Inout_File, File_Path); 48 Aux_Init(This, IV ); 49 end Initialize; 50 51-------------------------------------------------------------------------------- 52 53 procedure Finalize(This : in out Nonce_Ctr) is 54 begin 55 if ADIO.Is_Open(This.File) then 56 ADIO.Close(This.File); 57 end if; 58 end Finalize; 59 60-------------------------------------------------------------------------------- 61 62end Crypto.Types.Nonces.Nonces_Ctr; 63