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