anchor.diff:        class function CreateBlake2S_160(): IHash; static;
         class function CreateBlake2S_224(): IHash; static;
         class function CreateBlake2S_256(): IHash; static;
  +
  +    end;
  +
  +    // ====================== TXOF ====================== //
  +
  +  type
  +    TXOF = class sealed(TObject)
  +
  +    public
  +
  +      class function CreateShake_128(a_xof_size_in_bits: UInt32): IHash; static;
  +      class function CreateShake_256(a_xof_size_in_bits: UInt32): IHash; static;
   
       end;
   
  
positive.code:   Result := TSHA3_512.Create();
  end;
  
  class function THashFactory.TCrypto.CreateShake_128(a_xof_size_in_bits
    : UInt32): IHash;
  var
    LXof: IXOF;
  begin
    LXof := (TShake_128.Create() as IXOF);
    LXof.XOFSizeInBits := a_xof_size_in_bits;
    Result := LXof as IHash;
  end;
  
  class function THashFactory.TCrypto.CreateShake_256(a_xof_size_in_bits
    : UInt32): IHash;
  var
    LXof: IXOF;
  begin
    LXof := (TShake_256.Create() as IXOF);
    LXof.XOFSizeInBits := a_xof_size_in_bits;
    Result := LXof as IHash;
  end;
  
  class function THashFactory.TCrypto.CreateKeccak_224: IHash;
  begin
    Result := TKeccak_224.Create();
  
negative.code:   Result := TTiger2_192.CreateRound5();
  end;
  
  { THashFactory.TXOF }
  
  class function THashFactory.TXOF.CreateShake_128(a_xof_size_in_bits
    : UInt32): IHash;
  var
    LXof: IXOF;
  begin
    LXof := (TShake_128.Create() as IXOF);
    LXof.XOFSizeInBits := a_xof_size_in_bits;
    Result := LXof as IHash;
  end;
  
  class function THashFactory.TXOF.CreateShake_256(a_xof_size_in_bits
    : UInt32): IHash;
  var
    LXof: IXOF;
  begin
    LXof := (TShake_256.Create() as IXOF);
    LXof.XOFSizeInBits := a_xof_size_in_bits;
    Result := LXof as IHash;
  end;
  
  { THashFactory.THMAC }
  
  class function THashFactory.THMAC.CreateHMAC(const a_hash: IHash;
  