Browse Source

some refactoring for consistency purposes

Ugochukwu Mmaduekwe 7 years ago
parent
commit
5ab8caea0d
38 changed files with 760 additions and 744 deletions
  1. 0 1
      CryptoLib.Samples/Delphi.Samples/UsageSamples.dpr
  2. 0 1
      CryptoLib.Tests/Delphi.Tests/CryptoLib.Tests.dpr
  3. 1 1
      CryptoLib/src/Asn1/ClpAsn1Object.pas
  4. 6 3
      CryptoLib/src/Asn1/ClpBerBitString.pas
  5. 5 4
      CryptoLib/src/Asn1/ClpBerNull.pas
  6. 9 7
      CryptoLib/src/Asn1/ClpBerOctetString.pas
  7. 8 7
      CryptoLib/src/Asn1/ClpBerSequence.pas
  8. 9 7
      CryptoLib/src/Asn1/ClpBerSet.pas
  9. 11 8
      CryptoLib/src/Asn1/ClpBerTaggedObject.pas
  10. 4 3
      CryptoLib/src/Asn1/ClpDerApplicationSpecific.pas
  11. 6 4
      CryptoLib/src/Asn1/ClpDerBitString.pas
  12. 5 3
      CryptoLib/src/Asn1/ClpDerBmpString.pas
  13. 6 3
      CryptoLib/src/Asn1/ClpDerBoolean.pas
  14. 5 3
      CryptoLib/src/Asn1/ClpDerEnumerated.pas
  15. 5 3
      CryptoLib/src/Asn1/ClpDerExternal.pas
  16. 6 3
      CryptoLib/src/Asn1/ClpDerGeneralString.pas
  17. 5 3
      CryptoLib/src/Asn1/ClpDerGraphicString.pas
  18. 5 3
      CryptoLib/src/Asn1/ClpDerIA5String.pas
  19. 5 3
      CryptoLib/src/Asn1/ClpDerInteger.pas
  20. 5 3
      CryptoLib/src/Asn1/ClpDerNull.pas
  21. 6 3
      CryptoLib/src/Asn1/ClpDerNumericString.pas
  22. 21 5
      CryptoLib/src/Asn1/ClpDerObjectIdentifier.pas
  23. 4 3
      CryptoLib/src/Asn1/ClpDerOctetString.pas
  24. 1 1
      CryptoLib/src/Asn1/ClpDerOutputStream.pas
  25. 6 3
      CryptoLib/src/Asn1/ClpDerPrintableString.pas
  26. 4 3
      CryptoLib/src/Asn1/ClpDerSequence.pas
  27. 4 3
      CryptoLib/src/Asn1/ClpDerSet.pas
  28. 5 3
      CryptoLib/src/Asn1/ClpDerT61String.pas
  29. 9 6
      CryptoLib/src/Asn1/ClpDerTaggedObject.pas
  30. 4 3
      CryptoLib/src/Asn1/ClpDerUniversalString.pas
  31. 5 3
      CryptoLib/src/Asn1/ClpDerUtf8String.pas
  32. 5 3
      CryptoLib/src/Asn1/ClpDerVideotexString.pas
  33. 6 3
      CryptoLib/src/Asn1/ClpDerVisibleString.pas
  34. 1 2
      CryptoLib/src/Crypto/Signers/ClpSchnorrDigestSigner.pas
  35. 3 24
      CryptoLib/src/Interfaces/ClpIProxiedInterface.pas
  36. 563 567
      CryptoLib/src/Packages/FPC/CryptoLib4PascalPackage.lpk
  37. 4 4
      CryptoLib/src/Packages/FPC/CryptoLib4PascalPackage.pas
  38. 3 32
      CryptoLib/src/Utils/IO/ClpFilterStream.pas

+ 0 - 1
CryptoLib.Samples/Delphi.Samples/UsageSamples.dpr

@@ -165,7 +165,6 @@ uses
   ClpIECPrivateKeyParameters in '..\..\CryptoLib\src\Interfaces\ClpIECPrivateKeyParameters.pas',
   ClpIECPrivateKeyParameters in '..\..\CryptoLib\src\Interfaces\ClpIECPrivateKeyParameters.pas',
   ClpIECPublicKeyParameters in '..\..\CryptoLib\src\Interfaces\ClpIECPublicKeyParameters.pas',
   ClpIECPublicKeyParameters in '..\..\CryptoLib\src\Interfaces\ClpIECPublicKeyParameters.pas',
   ClpIExtensionField in '..\..\CryptoLib\src\Interfaces\ClpIExtensionField.pas',
   ClpIExtensionField in '..\..\CryptoLib\src\Interfaces\ClpIExtensionField.pas',
-  ClpIFilterStream in '..\..\CryptoLib\src\Interfaces\ClpIFilterStream.pas',
   ClpIFiniteField in '..\..\CryptoLib\src\Interfaces\ClpIFiniteField.pas',
   ClpIFiniteField in '..\..\CryptoLib\src\Interfaces\ClpIFiniteField.pas',
   ClpIFixedPointCombMultiplier in '..\..\CryptoLib\src\Interfaces\ClpIFixedPointCombMultiplier.pas',
   ClpIFixedPointCombMultiplier in '..\..\CryptoLib\src\Interfaces\ClpIFixedPointCombMultiplier.pas',
   ClpIFixedPointPreCompInfo in '..\..\CryptoLib\src\Interfaces\ClpIFixedPointPreCompInfo.pas',
   ClpIFixedPointPreCompInfo in '..\..\CryptoLib\src\Interfaces\ClpIFixedPointPreCompInfo.pas',

+ 0 - 1
CryptoLib.Tests/Delphi.Tests/CryptoLib.Tests.dpr

@@ -400,7 +400,6 @@ uses
   ClpPkcs5S2ParametersGenerator in '..\..\CryptoLib\src\Crypto\Generators\ClpPkcs5S2ParametersGenerator.pas',
   ClpPkcs5S2ParametersGenerator in '..\..\CryptoLib\src\Crypto\Generators\ClpPkcs5S2ParametersGenerator.pas',
   ClpIPkcs5S2ParametersGenerator in '..\..\CryptoLib\src\Interfaces\ClpIPkcs5S2ParametersGenerator.pas',
   ClpIPkcs5S2ParametersGenerator in '..\..\CryptoLib\src\Interfaces\ClpIPkcs5S2ParametersGenerator.pas',
   Pkcs5Tests in '..\src\Crypto\Pkcs5Tests.pas',
   Pkcs5Tests in '..\src\Crypto\Pkcs5Tests.pas',
-  ClpIFilterStream in '..\..\CryptoLib\src\Interfaces\ClpIFilterStream.pas',
   ClpECNRSigner in '..\..\CryptoLib\src\Crypto\Signers\ClpECNRSigner.pas',
   ClpECNRSigner in '..\..\CryptoLib\src\Crypto\Signers\ClpECNRSigner.pas',
   ClpIECNRSigner in '..\..\CryptoLib\src\Interfaces\ClpIECNRSigner.pas',
   ClpIECNRSigner in '..\..\CryptoLib\src\Interfaces\ClpIECNRSigner.pas',
   ClpDsaValidationParameters in '..\..\CryptoLib\src\Crypto\Parameters\ClpDsaValidationParameters.pas',
   ClpDsaValidationParameters in '..\..\CryptoLib\src\Crypto\Parameters\ClpDsaValidationParameters.pas',

+ 1 - 1
CryptoLib/src/Asn1/ClpAsn1Object.pas

@@ -62,7 +62,7 @@ type
 
 
     function ToAsn1Object(): IAsn1Object; override;
     function ToAsn1Object(): IAsn1Object; override;
 
 
-    procedure Encode(const derOut: IDerOutputStream); virtual; abstract;
+    procedure Encode(const derOut: TStream); virtual; abstract;
 
 
     function CallAsn1Equals(const obj: IAsn1Object): Boolean;
     function CallAsn1Equals(const obj: IAsn1Object): Boolean;
 
 

+ 6 - 3
CryptoLib/src/Asn1/ClpBerBitString.pas

@@ -22,10 +22,12 @@ unit ClpBerBitString;
 interface
 interface
 
 
 uses
 uses
+  Classes,
   SysUtils,
   SysUtils,
   ClpCryptoLibTypes,
   ClpCryptoLibTypes,
   ClpAsn1OutputStream,
   ClpAsn1OutputStream,
   ClpBerOutputStream,
   ClpBerOutputStream,
+  ClpDerOutputStream,
   ClpIProxiedInterface,
   ClpIProxiedInterface,
   ClpDerBitString,
   ClpDerBitString,
   ClpIBerBitString,
   ClpIBerBitString,
@@ -41,7 +43,7 @@ type
     constructor Create(namedBits: Int32); overload;
     constructor Create(namedBits: Int32); overload;
     constructor Create(const obj: IAsn1Encodable); overload;
     constructor Create(const obj: IAsn1Encodable); overload;
 
 
-    procedure Encode(const derOut: IDerOutputStream); override;
+    procedure Encode(const derOut: TStream); override;
 
 
   end;
   end;
 
 
@@ -70,11 +72,12 @@ begin
   Inherited Create(namedBits);
   Inherited Create(namedBits);
 end;
 end;
 
 
-procedure TBerBitString.Encode(const derOut: IDerOutputStream);
+procedure TBerBitString.Encode(const derOut: TStream);
 begin
 begin
   if ((derOut is TAsn1OutputStream) or (derOut is TBerOutputStream)) then
   if ((derOut is TAsn1OutputStream) or (derOut is TBerOutputStream)) then
   begin
   begin
-    derOut.WriteEncoded(TAsn1Tags.BitString, Byte(mPadBits), mData);
+    (derOut as TDerOutputStream).WriteEncoded(TAsn1Tags.BitString,
+      Byte(mPadBits), mData);
   end
   end
   else
   else
   begin
   begin

+ 5 - 4
CryptoLib/src/Asn1/ClpBerNull.pas

@@ -22,12 +22,13 @@ unit ClpBerNull;
 interface
 interface
 
 
 uses
 uses
+  Classes,
   SysUtils,
   SysUtils,
   ClpAsn1Tags,
   ClpAsn1Tags,
   ClpAsn1OutputStream,
   ClpAsn1OutputStream,
   ClpBerOutputStream,
   ClpBerOutputStream,
+  ClpDerOutputStream,
   ClpDerNull,
   ClpDerNull,
-  ClpIProxiedInterface,
   ClpIBerNull;
   ClpIBerNull;
 
 
 type
 type
@@ -51,7 +52,7 @@ type
 
 
   public
   public
 
 
-    procedure Encode(const derOut: IDerOutputStream); override;
+    procedure Encode(const derOut: TStream); override;
     class property Instance: IBerNull read GetInstance;
     class property Instance: IBerNull read GetInstance;
 
 
   end;
   end;
@@ -70,12 +71,12 @@ begin
   FInstance := TBerNull.Create(0);
   FInstance := TBerNull.Create(0);
 end;
 end;
 
 
-procedure TBerNull.Encode(const derOut: IDerOutputStream);
+procedure TBerNull.Encode(const derOut: TStream);
 begin
 begin
 
 
   if ((derOut is TAsn1OutputStream) or (derOut is TBerOutputStream)) then
   if ((derOut is TAsn1OutputStream) or (derOut is TBerOutputStream)) then
   begin
   begin
-    derOut.WriteByte(TAsn1Tags.Null);
+    (derOut as TDerOutputStream).WriteByte(TAsn1Tags.Null);
   end
   end
   else
   else
   begin
   begin

+ 9 - 7
CryptoLib/src/Asn1/ClpBerOctetString.pas

@@ -32,6 +32,7 @@ uses
   ClpAsn1Tags,
   ClpAsn1Tags,
   ClpAsn1OutputStream,
   ClpAsn1OutputStream,
   ClpBerOutputStream,
   ClpBerOutputStream,
+  ClpDerOutputStream,
   ClpIBerOctetString,
   ClpIBerOctetString,
   ClpIDerOctetString,
   ClpIDerOctetString,
   ClpDerOctetString;
   ClpDerOctetString;
@@ -69,7 +70,7 @@ type
     /// </summary>
     /// </summary>
     function GetEnumerable: TCryptoLibGenericArray<IDerOctetString>; virtual;
     function GetEnumerable: TCryptoLibGenericArray<IDerOctetString>; virtual;
 
 
-    procedure Encode(const derOut: IDerOutputStream); override;
+    procedure Encode(const derOut: TStream); override;
 
 
     class function FromSequence(const seq: IAsn1Sequence)
     class function FromSequence(const seq: IAsn1Sequence)
       : IBerOctetString; static;
       : IBerOctetString; static;
@@ -107,16 +108,17 @@ begin
   Inherited Create(obj);
   Inherited Create(obj);
 end;
 end;
 
 
-procedure TBerOctetString.Encode(const derOut: IDerOutputStream);
+procedure TBerOctetString.Encode(const derOut: TStream);
 var
 var
   oct: IDerOctetString;
   oct: IDerOctetString;
   LListIDerOctetString: TCryptoLibGenericArray<IDerOctetString>;
   LListIDerOctetString: TCryptoLibGenericArray<IDerOctetString>;
 begin
 begin
   if ((derOut is TAsn1OutputStream) or (derOut is TBerOutputStream)) then
   if ((derOut is TAsn1OutputStream) or (derOut is TBerOutputStream)) then
   begin
   begin
-    derOut.WriteByte(TAsn1Tags.Constructed or TAsn1Tags.OctetString);
+    (derOut as TDerOutputStream).WriteByte(TAsn1Tags.Constructed or
+      TAsn1Tags.OctetString);
 
 
-    derOut.WriteByte($80);
+    (derOut as TDerOutputStream).WriteByte($80);
 
 
     //
     //
     // write out the octet array
     // write out the octet array
@@ -124,11 +126,11 @@ begin
     LListIDerOctetString := Self.GetEnumerable;
     LListIDerOctetString := Self.GetEnumerable;
     for oct in LListIDerOctetString do
     for oct in LListIDerOctetString do
     begin
     begin
-      derOut.WriteObject(oct);
+      (derOut as TDerOutputStream).WriteObject(oct);
     end;
     end;
 
 
-    derOut.WriteByte($00);
-    derOut.WriteByte($00);
+    (derOut as TDerOutputStream).WriteByte($00);
+    (derOut as TDerOutputStream).WriteByte($00);
   end
   end
   else
   else
   begin
   begin

+ 8 - 7
CryptoLib/src/Asn1/ClpBerSequence.pas

@@ -29,6 +29,7 @@ uses
   ClpDerSequence,
   ClpDerSequence,
   ClpAsn1OutputStream,
   ClpAsn1OutputStream,
   ClpBerOutputStream,
   ClpBerOutputStream,
+  ClpDerOutputStream,
   ClpIAsn1EncodableVector,
   ClpIAsn1EncodableVector,
   ClpIBerSequence,
   ClpIBerSequence,
   ClpCryptoLibTypes;
   ClpCryptoLibTypes;
@@ -76,7 +77,7 @@ type
     /// just outputing Sequence, <br />we also have to specify Constructed,
     /// just outputing Sequence, <br />we also have to specify Constructed,
     /// and the objects length. <br />
     /// and the objects length. <br />
     /// </summary>
     /// </summary>
-    procedure Encode(const derOut: IDerOutputStream); override;
+    procedure Encode(const derOut: TStream); override;
 
 
     class property Empty: IBerSequence read GetEmpty;
     class property Empty: IBerSequence read GetEmpty;
 
 
@@ -122,7 +123,7 @@ begin
   FEmpty := TBerSequence.Create();
   FEmpty := TBerSequence.Create();
 end;
 end;
 
 
-procedure TBerSequence.Encode(const derOut: IDerOutputStream);
+procedure TBerSequence.Encode(const derOut: TStream);
 var
 var
   o: IAsn1Encodable;
   o: IAsn1Encodable;
   LListAsn1Encodable: TCryptoLibGenericArray<IAsn1Encodable>;
   LListAsn1Encodable: TCryptoLibGenericArray<IAsn1Encodable>;
@@ -130,17 +131,17 @@ begin
 
 
   if ((derOut is TAsn1OutputStream) or (derOut is TBerOutputStream)) then
   if ((derOut is TAsn1OutputStream) or (derOut is TBerOutputStream)) then
   begin
   begin
-    derOut.WriteByte(TAsn1Tags.Sequence or TAsn1Tags.Constructed);
-    derOut.WriteByte($80);
+    (derOut as TDerOutputStream).WriteByte(TAsn1Tags.Sequence or TAsn1Tags.Constructed);
+    (derOut as TDerOutputStream).WriteByte($80);
 
 
     LListAsn1Encodable := Self.GetEnumerable;
     LListAsn1Encodable := Self.GetEnumerable;
     for o in LListAsn1Encodable do
     for o in LListAsn1Encodable do
     begin
     begin
-      derOut.WriteObject(o);
+      (derOut as TDerOutputStream).WriteObject(o);
     end;
     end;
 
 
-    derOut.WriteByte($00);
-    derOut.WriteByte($00);
+    (derOut as TDerOutputStream).WriteByte($00);
+    (derOut as TDerOutputStream).WriteByte($00);
   end
   end
   else
   else
   begin
   begin

+ 9 - 7
CryptoLib/src/Asn1/ClpBerSet.pas

@@ -29,6 +29,7 @@ uses
   ClpIBerSet,
   ClpIBerSet,
   ClpAsn1OutputStream,
   ClpAsn1OutputStream,
   ClpBerOutputStream,
   ClpBerOutputStream,
+  ClpDerOutputStream,
   ClpIProxiedInterface,
   ClpIProxiedInterface,
   ClpIAsn1EncodableVector,
   ClpIAsn1EncodableVector,
   ClpCryptoLibTypes;
   ClpCryptoLibTypes;
@@ -81,7 +82,7 @@ type
     /// just outputing Set, <br />we also have to specify Constructed, and
     /// just outputing Set, <br />we also have to specify Constructed, and
     /// the objects length. <br />
     /// the objects length. <br />
     /// </summary>
     /// </summary>
-    procedure Encode(const derOut: IDerOutputStream); override;
+    procedure Encode(const derOut: TStream); override;
 
 
     class property Empty: IBerSet read GetEmpty;
     class property Empty: IBerSet read GetEmpty;
 
 
@@ -128,25 +129,26 @@ begin
   FEmpty := TBerSet.Create();
   FEmpty := TBerSet.Create();
 end;
 end;
 
 
-procedure TBerSet.Encode(const derOut: IDerOutputStream);
+procedure TBerSet.Encode(const derOut: TStream);
 var
 var
   o: IAsn1Encodable;
   o: IAsn1Encodable;
   LListAsn1Encodable: TCryptoLibGenericArray<IAsn1Encodable>;
   LListAsn1Encodable: TCryptoLibGenericArray<IAsn1Encodable>;
 begin
 begin
   if ((derOut is TAsn1OutputStream) or (derOut is TBerOutputStream)) then
   if ((derOut is TAsn1OutputStream) or (derOut is TBerOutputStream)) then
   begin
   begin
-    derOut.WriteByte(TAsn1Tags.&Set or TAsn1Tags.Constructed);
+    (derOut as TDerOutputStream).WriteByte(TAsn1Tags.&Set or
+      TAsn1Tags.Constructed);
 
 
-    derOut.WriteByte($80);
+    (derOut as TDerOutputStream).WriteByte($80);
 
 
     LListAsn1Encodable := Self.GetEnumerable;
     LListAsn1Encodable := Self.GetEnumerable;
     for o in LListAsn1Encodable do
     for o in LListAsn1Encodable do
     begin
     begin
-      derOut.WriteObject(o);
+      (derOut as TDerOutputStream).WriteObject(o);
     end;
     end;
 
 
-    derOut.WriteByte($00);
-    derOut.WriteByte($00);
+    (derOut as TDerOutputStream).WriteByte($00);
+    (derOut as TDerOutputStream).WriteByte($00);
   end
   end
   else
   else
   begin
   begin

+ 11 - 8
CryptoLib/src/Asn1/ClpBerTaggedObject.pas

@@ -22,6 +22,7 @@ unit ClpBerTaggedObject;
 interface
 interface
 
 
 uses
 uses
+  Classes,
   SysUtils,
   SysUtils,
   Generics.Collections,
   Generics.Collections,
   ClpCryptoLibTypes,
   ClpCryptoLibTypes,
@@ -33,6 +34,7 @@ uses
   ClpBerSequence,
   ClpBerSequence,
   ClpAsn1OutputStream,
   ClpAsn1OutputStream,
   ClpBerOutputStream,
   ClpBerOutputStream,
+  ClpDerOutputStream,
   ClpIAsn1OctetString,
   ClpIAsn1OctetString,
   ClpAsn1Encodable,
   ClpAsn1Encodable,
   ClpBerOctetString,
   ClpBerOctetString,
@@ -86,7 +88,7 @@ type
     /// </param>
     /// </param>
     constructor Create(tagNo: Int32); overload;
     constructor Create(tagNo: Int32); overload;
 
 
-    procedure Encode(const derOut: IDerOutputStream); override;
+    procedure Encode(const derOut: TStream); override;
 
 
   end;
   end;
 
 
@@ -110,7 +112,7 @@ begin
   Inherited Create(false, tagNo, TBerSequence.Empty)
   Inherited Create(false, tagNo, TBerSequence.Empty)
 end;
 end;
 
 
-procedure TBerTaggedObject.Encode(const derOut: IDerOutputStream);
+procedure TBerTaggedObject.Encode(const derOut: TStream);
 var
 var
   eObj: TList<IAsn1Encodable>;
   eObj: TList<IAsn1Encodable>;
   LListIDerOctetString: TCryptoLibGenericArray<IDerOctetString>;
   LListIDerOctetString: TCryptoLibGenericArray<IDerOctetString>;
@@ -126,8 +128,9 @@ begin
   try
   try
     if ((derOut is TAsn1OutputStream) or (derOut is TBerOutputStream)) then
     if ((derOut is TAsn1OutputStream) or (derOut is TBerOutputStream)) then
     begin
     begin
-      derOut.WriteTag(Byte(TAsn1Tags.Constructed or TAsn1Tags.Tagged), tagNo);
-      derOut.WriteByte($80);
+      (derOut as TDerOutputStream)
+        .WriteTag(Byte(TAsn1Tags.Constructed or TAsn1Tags.Tagged), tagNo);
+      (derOut as TDerOutputStream).WriteByte($80);
 
 
       if (not IsEmpty()) then
       if (not IsEmpty()) then
       begin
       begin
@@ -178,17 +181,17 @@ begin
 
 
           for o in eObj do
           for o in eObj do
           begin
           begin
-            derOut.WriteObject(o);
+            (derOut as TDerOutputStream).WriteObject(o);
           end;
           end;
         end
         end
         else
         else
         begin
         begin
-          derOut.WriteObject(obj);
+          (derOut as TDerOutputStream).WriteObject(obj);
         end;
         end;
       end;
       end;
 
 
-      derOut.WriteByte($00);
-      derOut.WriteByte($00);
+      (derOut as TDerOutputStream).WriteByte($00);
+      (derOut as TDerOutputStream).WriteByte($00);
     end
     end
     else
     else
     begin
     begin

+ 4 - 3
CryptoLib/src/Asn1/ClpDerApplicationSpecific.pas

@@ -28,6 +28,7 @@ uses
   ClpArrayUtils,
   ClpArrayUtils,
   ClpAsn1TaggedObject,
   ClpAsn1TaggedObject,
   ClpAsn1Tags,
   ClpAsn1Tags,
+  ClpDerOutputStream,
   ClpIProxiedInterface,
   ClpIProxiedInterface,
   ClpIDerApplicationSpecific,
   ClpIDerApplicationSpecific,
   ClpIAsn1EncodableVector,
   ClpIAsn1EncodableVector,
@@ -99,7 +100,7 @@ type
     /// </exception>
     /// </exception>
     function GetObject(derTagNo: Int32): IAsn1Object; overload; inline;
     function GetObject(derTagNo: Int32): IAsn1Object; overload; inline;
 
 
-    procedure Encode(const derOut: IDerOutputStream); override;
+    procedure Encode(const derOut: TStream); override;
 
 
     property ApplicationTag: Int32 read GetApplicationTag;
     property ApplicationTag: Int32 read GetApplicationTag;
   end;
   end;
@@ -247,7 +248,7 @@ begin
 
 
 end;
 end;
 
 
-procedure TDerApplicationSpecific.Encode(const derOut: IDerOutputStream);
+procedure TDerApplicationSpecific.Encode(const derOut: TStream);
 var
 var
   classBits: Int32;
   classBits: Int32;
 begin
 begin
@@ -257,7 +258,7 @@ begin
     classBits := classBits or TAsn1Tags.Constructed;
     classBits := classBits or TAsn1Tags.Constructed;
   end;
   end;
 
 
-  derOut.WriteEncoded(classBits, Ftag, Foctets);
+  (derOut as TDerOutputStream).WriteEncoded(classBits, Ftag, Foctets);
 end;
 end;
 
 
 constructor TDerApplicationSpecific.Create(isExplicit: Boolean; tag: Int32;
 constructor TDerApplicationSpecific.Create(isExplicit: Boolean; tag: Int32;

+ 6 - 4
CryptoLib/src/Asn1/ClpDerBitString.pas

@@ -31,6 +31,7 @@ uses
   ClpAsn1Tags,
   ClpAsn1Tags,
   ClpBigInteger,
   ClpBigInteger,
   ClpAsn1Object,
   ClpAsn1Object,
+  ClpDerOutputStream,
   ClpIProxiedInterface,
   ClpIProxiedInterface,
   ClpCryptoLibTypes,
   ClpCryptoLibTypes,
   ClpIAsn1TaggedObject,
   ClpIAsn1TaggedObject,
@@ -88,7 +89,7 @@ type
 
 
     function GetBytes(): TCryptoLibByteArray; virtual;
     function GetBytes(): TCryptoLibByteArray; virtual;
 
 
-    procedure Encode(const derOut: IDerOutputStream); override;
+    procedure Encode(const derOut: TStream); override;
 
 
     function GetInt32Value: Int32; virtual;
     function GetInt32Value: Int32; virtual;
     property Int32Value: Int32 read GetInt32Value;
     property Int32Value: Int32 read GetInt32Value;
@@ -263,7 +264,7 @@ begin
   FmPadBits := padBits;
   FmPadBits := padBits;
 end;
 end;
 
 
-procedure TDerBitString.Encode(const derOut: IDerOutputStream);
+procedure TDerBitString.Encode(const derOut: TStream);
 var
 var
   last, mask, unusedBits: Int32;
   last, mask, unusedBits: Int32;
   contents: TCryptoLibByteArray;
   contents: TCryptoLibByteArray;
@@ -283,12 +284,13 @@ begin
       // */
       // */
       contents[System.Length(contents) - 1] := Byte(last xor unusedBits);
       contents[System.Length(contents) - 1] := Byte(last xor unusedBits);
 
 
-      derOut.WriteEncoded(TAsn1Tags.BitString, contents);
+      (derOut as TDerOutputStream).WriteEncoded(TAsn1Tags.BitString, contents);
       Exit;
       Exit;
     end;
     end;
   end;
   end;
 
 
-  derOut.WriteEncoded(TAsn1Tags.BitString, Byte(mPadBits), mData);
+  (derOut as TDerOutputStream).WriteEncoded(TAsn1Tags.BitString,
+    Byte(mPadBits), mData);
 end;
 end;
 
 
 class function TDerBitString.FromAsn1Octets(const octets: TCryptoLibByteArray)
 class function TDerBitString.FromAsn1Octets(const octets: TCryptoLibByteArray)

+ 5 - 3
CryptoLib/src/Asn1/ClpDerBmpString.pas

@@ -22,11 +22,13 @@ unit ClpDerBmpString;
 interface
 interface
 
 
 uses
 uses
+  Classes,
   SysUtils,
   SysUtils,
   ClpCryptoLibTypes,
   ClpCryptoLibTypes,
   ClpAsn1Object,
   ClpAsn1Object,
   ClpAsn1Tags,
   ClpAsn1Tags,
   ClpAsn1OctetString,
   ClpAsn1OctetString,
+  ClpDerOutputStream,
   ClpIProxiedInterface,
   ClpIProxiedInterface,
   ClpIDerBmpString,
   ClpIDerBmpString,
   ClpIAsn1TaggedObject,
   ClpIAsn1TaggedObject,
@@ -63,7 +65,7 @@ type
 
 
     function GetString(): String; override;
     function GetString(): String; override;
 
 
-    procedure Encode(const derOut: IDerOutputStream); override;
+    procedure Encode(const derOut: TStream); override;
 
 
     /// <summary>
     /// <summary>
     /// return a BMP string from the given object.
     /// return a BMP string from the given object.
@@ -152,7 +154,7 @@ begin
   FStr := astr;
   FStr := astr;
 end;
 end;
 
 
-procedure TDerBmpString.Encode(const derOut: IDerOutputStream);
+procedure TDerBmpString.Encode(const derOut: TStream);
 var
 var
   c: TCryptoLibCharArray;
   c: TCryptoLibCharArray;
   b: TCryptoLibByteArray;
   b: TCryptoLibByteArray;
@@ -183,7 +185,7 @@ begin
     System.Inc(i);
     System.Inc(i);
   end;
   end;
 
 
-  derOut.WriteEncoded(TAsn1Tags.BmpString, b);
+  (derOut as TDerOutputStream).WriteEncoded(TAsn1Tags.BmpString, b);
 
 
 end;
 end;
 
 

+ 6 - 3
CryptoLib/src/Asn1/ClpDerBoolean.pas

@@ -22,11 +22,13 @@ unit ClpDerBoolean;
 interface
 interface
 
 
 uses
 uses
+  Classes,
   SysUtils,
   SysUtils,
   ClpAsn1Tags,
   ClpAsn1Tags,
   ClpIAsn1OctetString,
   ClpIAsn1OctetString,
   ClpIDerBoolean,
   ClpIDerBoolean,
   ClpCryptoLibTypes,
   ClpCryptoLibTypes,
+  ClpDerOutputStream,
   ClpIProxiedInterface,
   ClpIProxiedInterface,
   ClpIAsn1TaggedObject,
   ClpIAsn1TaggedObject,
   ClpAsn1Object;
   ClpAsn1Object;
@@ -65,7 +67,7 @@ type
 
 
     constructor Create(const val: TCryptoLibByteArray); overload;
     constructor Create(const val: TCryptoLibByteArray); overload;
 
 
-    procedure Encode(const derOut: IDerOutputStream); override;
+    procedure Encode(const derOut: TStream); override;
 
 
     function ToString(): String; override;
     function ToString(): String; override;
 
 
@@ -170,10 +172,11 @@ begin
   FTrue := TDerBoolean.Create(System.True);
   FTrue := TDerBoolean.Create(System.True);
 end;
 end;
 
 
-procedure TDerBoolean.Encode(const derOut: IDerOutputStream);
+procedure TDerBoolean.Encode(const derOut: TStream);
 begin
 begin
   // TODO Should we make sure the byte value is one of '0' or '0xff' here?
   // TODO Should we make sure the byte value is one of '0' or '0xff' here?
-  derOut.WriteEncoded(TAsn1Tags.Boolean, TCryptoLibByteArray.Create(Fvalue));
+  (derOut as TDerOutputStream).WriteEncoded(TAsn1Tags.Boolean,
+    TCryptoLibByteArray.Create(Fvalue));
 end;
 end;
 
 
 class function TDerBoolean.FromOctetString(const value: TCryptoLibByteArray)
 class function TDerBoolean.FromOctetString(const value: TCryptoLibByteArray)

+ 5 - 3
CryptoLib/src/Asn1/ClpDerEnumerated.pas

@@ -22,12 +22,14 @@ unit ClpDerEnumerated;
 interface
 interface
 
 
 uses
 uses
+  Classes,
   SysUtils,
   SysUtils,
   ClpCryptoLibTypes,
   ClpCryptoLibTypes,
   ClpArrayUtils,
   ClpArrayUtils,
   ClpBigInteger,
   ClpBigInteger,
   ClpIAsn1OctetString,
   ClpIAsn1OctetString,
   ClpAsn1Tags,
   ClpAsn1Tags,
+  ClpDerOutputStream,
   ClpIProxiedInterface,
   ClpIProxiedInterface,
   ClpIDerEnumerated,
   ClpIDerEnumerated,
   ClpIAsn1TaggedObject,
   ClpIAsn1TaggedObject,
@@ -65,7 +67,7 @@ type
     constructor Create(const val: TBigInteger); overload;
     constructor Create(const val: TBigInteger); overload;
     constructor Create(const bytes: TCryptoLibByteArray); overload;
     constructor Create(const bytes: TCryptoLibByteArray); overload;
 
 
-    procedure Encode(const derOut: IDerOutputStream); override;
+    procedure Encode(const derOut: TStream); override;
 
 
     property Value: TBigInteger read GetValue;
     property Value: TBigInteger read GetValue;
     property bytes: TCryptoLibByteArray read GetBytes;
     property bytes: TCryptoLibByteArray read GetBytes;
@@ -162,9 +164,9 @@ begin
   System.SetLength(Fcache, 12);
   System.SetLength(Fcache, 12);
 end;
 end;
 
 
-procedure TDerEnumerated.Encode(const derOut: IDerOutputStream);
+procedure TDerEnumerated.Encode(const derOut: TStream);
 begin
 begin
-  derOut.WriteEncoded(TAsn1Tags.Enumerated, Fbytes);
+  (derOut as TDerOutputStream).WriteEncoded(TAsn1Tags.Enumerated, Fbytes);
 end;
 end;
 
 
 class function TDerEnumerated.FromOctetString(const enc: TCryptoLibByteArray)
 class function TDerEnumerated.FromOctetString(const enc: TCryptoLibByteArray)

+ 5 - 3
CryptoLib/src/Asn1/ClpDerExternal.pas

@@ -29,6 +29,7 @@ uses
   ClpIAsn1TaggedObject,
   ClpIAsn1TaggedObject,
   ClpDerTaggedObject,
   ClpDerTaggedObject,
   ClpAsn1Tags,
   ClpAsn1Tags,
+  ClpDerOutputStream,
   ClpIAsn1EncodableVector,
   ClpIAsn1EncodableVector,
   ClpIDerTaggedObject,
   ClpIDerTaggedObject,
   ClpIProxiedInterface,
   ClpIProxiedInterface,
@@ -121,7 +122,7 @@ type
       const dataValueDescriptor: IAsn1Object; encoding: Int32;
       const dataValueDescriptor: IAsn1Object; encoding: Int32;
       const externalData: IAsn1Object); overload;
       const externalData: IAsn1Object); overload;
 
 
-    procedure Encode(const derOut: IDerOutputStream); override;
+    procedure Encode(const derOut: TStream); override;
 
 
     property dataValueDescriptor: IAsn1Object read GetDataValueDescriptor
     property dataValueDescriptor: IAsn1Object read GetDataValueDescriptor
       write SetDataValueDescriptor;
       write SetDataValueDescriptor;
@@ -284,7 +285,7 @@ begin
     externalData.TagNo, externalData.ToAsn1Object());
     externalData.TagNo, externalData.ToAsn1Object());
 end;
 end;
 
 
-procedure TDerExternal.Encode(const derOut: IDerOutputStream);
+procedure TDerExternal.Encode(const derOut: TStream);
 var
 var
   ms: TMemoryStream;
   ms: TMemoryStream;
   Buffer: TCryptoLibByteArray;
   Buffer: TCryptoLibByteArray;
@@ -300,7 +301,8 @@ begin
     System.SetLength(Buffer, ms.Size);
     System.SetLength(Buffer, ms.Size);
     ms.Position := 0;
     ms.Position := 0;
     ms.Read(Buffer[0], ms.Size);
     ms.Read(Buffer[0], ms.Size);
-    derOut.WriteEncoded(TAsn1Tags.Constructed, TAsn1Tags.External, Buffer);
+    (derOut as TDerOutputStream).WriteEncoded(TAsn1Tags.Constructed,
+      TAsn1Tags.External, Buffer);
   finally
   finally
     ms.Free;
     ms.Free;
   end;
   end;

+ 6 - 3
CryptoLib/src/Asn1/ClpDerGeneralString.pas

@@ -22,12 +22,14 @@ unit ClpDerGeneralString;
 interface
 interface
 
 
 uses
 uses
+  Classes,
   SysUtils,
   SysUtils,
   ClpDerStringBase,
   ClpDerStringBase,
   ClpAsn1Tags,
   ClpAsn1Tags,
   ClpAsn1OctetString,
   ClpAsn1OctetString,
   ClpAsn1Object,
   ClpAsn1Object,
   ClpIProxiedInterface,
   ClpIProxiedInterface,
+  ClpDerOutputStream,
   ClpCryptoLibTypes,
   ClpCryptoLibTypes,
   ClpIAsn1TaggedObject,
   ClpIAsn1TaggedObject,
   ClpIDerGeneralString,
   ClpIDerGeneralString,
@@ -61,7 +63,7 @@ type
 
 
     function GetOctets(): TCryptoLibByteArray; inline;
     function GetOctets(): TCryptoLibByteArray; inline;
 
 
-    procedure Encode(const derOut: IDerOutputStream); override;
+    procedure Encode(const derOut: TStream); override;
 
 
     class function GetInstance(const obj: TObject): IDerGeneralString; overload;
     class function GetInstance(const obj: TObject): IDerGeneralString; overload;
       static; inline;
       static; inline;
@@ -115,9 +117,10 @@ begin
   FStr := Str;
   FStr := Str;
 end;
 end;
 
 
-procedure TDerGeneralString.Encode(const derOut: IDerOutputStream);
+procedure TDerGeneralString.Encode(const derOut: TStream);
 begin
 begin
-  derOut.WriteEncoded(TAsn1Tags.GeneralString, GetOctets());
+  (derOut as TDerOutputStream).WriteEncoded(TAsn1Tags.GeneralString,
+    GetOctets());
 end;
 end;
 
 
 class function TDerGeneralString.GetInstance(const obj: TObject)
 class function TDerGeneralString.GetInstance(const obj: TObject)

+ 5 - 3
CryptoLib/src/Asn1/ClpDerGraphicString.pas

@@ -22,12 +22,14 @@ unit ClpDerGraphicString;
 interface
 interface
 
 
 uses
 uses
+  Classes,
   SysUtils,
   SysUtils,
   ClpArrayUtils,
   ClpArrayUtils,
   ClpCryptoLibTypes,
   ClpCryptoLibTypes,
   ClpAsn1Object,
   ClpAsn1Object,
   ClpAsn1Tags,
   ClpAsn1Tags,
   ClpAsn1OctetString,
   ClpAsn1OctetString,
+  ClpDerOutputStream,
   ClpIProxiedInterface,
   ClpIProxiedInterface,
   ClpIDerGraphicString,
   ClpIDerGraphicString,
   ClpIAsn1TaggedObject,
   ClpIAsn1TaggedObject,
@@ -66,7 +68,7 @@ type
 
 
     function GetOctets(): TCryptoLibByteArray; inline;
     function GetOctets(): TCryptoLibByteArray; inline;
 
 
-    procedure Encode(const derOut: IDerOutputStream); override;
+    procedure Encode(const derOut: TStream); override;
 
 
     /// <summary>
     /// <summary>
     /// return a Graphic String from the passed in object
     /// return a Graphic String from the passed in object
@@ -137,9 +139,9 @@ begin
   FmString := System.Copy(encoding);
   FmString := System.Copy(encoding);
 end;
 end;
 
 
-procedure TDerGraphicString.Encode(const derOut: IDerOutputStream);
+procedure TDerGraphicString.Encode(const derOut: TStream);
 begin
 begin
-  derOut.WriteEncoded(TAsn1Tags.GraphicString, mString);
+  (derOut as TDerOutputStream).WriteEncoded(TAsn1Tags.GraphicString, mString);
 end;
 end;
 
 
 class function TDerGraphicString.GetInstance(const obj: TObject)
 class function TDerGraphicString.GetInstance(const obj: TObject)

+ 5 - 3
CryptoLib/src/Asn1/ClpDerIA5String.pas

@@ -22,6 +22,7 @@ unit ClpDerIA5String;
 interface
 interface
 
 
 uses
 uses
+  Classes,
   SysUtils,
   SysUtils,
   ClpDerStringBase,
   ClpDerStringBase,
   ClpAsn1Tags,
   ClpAsn1Tags,
@@ -29,6 +30,7 @@ uses
   ClpAsn1Object,
   ClpAsn1Object,
   ClpStringUtils,
   ClpStringUtils,
   ClpIProxiedInterface,
   ClpIProxiedInterface,
+  ClpDerOutputStream,
   ClpCryptoLibTypes,
   ClpCryptoLibTypes,
   ClpIAsn1TaggedObject,
   ClpIAsn1TaggedObject,
   ClpIDerIA5String,
   ClpIDerIA5String,
@@ -87,7 +89,7 @@ type
 
 
     function GetOctets(): TCryptoLibByteArray; inline;
     function GetOctets(): TCryptoLibByteArray; inline;
 
 
-    procedure Encode(const derOut: IDerOutputStream); override;
+    procedure Encode(const derOut: TStream); override;
 
 
     /// <summary>
     /// <summary>
     /// return a DerIA5String from the passed in object
     /// return a DerIA5String from the passed in object
@@ -204,9 +206,9 @@ begin
   FStr := Str;
   FStr := Str;
 end;
 end;
 
 
-procedure TDerIA5String.Encode(const derOut: IDerOutputStream);
+procedure TDerIA5String.Encode(const derOut: TStream);
 begin
 begin
-  derOut.WriteEncoded(TAsn1Tags.IA5String, GetOctets());
+  (derOut as TDerOutputStream).WriteEncoded(TAsn1Tags.IA5String, GetOctets());
 end;
 end;
 
 
 class function TDerIA5String.GetInstance(const obj: TObject): IDerIA5String;
 class function TDerIA5String.GetInstance(const obj: TObject): IDerIA5String;

+ 5 - 3
CryptoLib/src/Asn1/ClpDerInteger.pas

@@ -22,6 +22,7 @@ unit ClpDerInteger;
 interface
 interface
 
 
 uses
 uses
+  Classes,
   SysUtils,
   SysUtils,
   ClpCryptoLibTypes,
   ClpCryptoLibTypes,
   ClpBigInteger,
   ClpBigInteger,
@@ -29,6 +30,7 @@ uses
   ClpIProxiedInterface,
   ClpIProxiedInterface,
   ClpIAsn1TaggedObject,
   ClpIAsn1TaggedObject,
   ClpAsn1OctetString,
   ClpAsn1OctetString,
+  ClpDerOutputStream,
   ClpAsn1Tags,
   ClpAsn1Tags,
   ClpArrayUtils,
   ClpArrayUtils,
   ClpIDerInteger;
   ClpIDerInteger;
@@ -63,7 +65,7 @@ type
     property PositiveValue: TBigInteger read GetPositiveValue;
     property PositiveValue: TBigInteger read GetPositiveValue;
     property bytes: TCryptoLibByteArray read GetBytes;
     property bytes: TCryptoLibByteArray read GetBytes;
 
 
-    procedure Encode(const derOut: IDerOutputStream); override;
+    procedure Encode(const derOut: TStream); override;
 
 
     function ToString(): String; override;
     function ToString(): String; override;
 
 
@@ -165,9 +167,9 @@ begin
   Fbytes := System.Copy(bytes);
   Fbytes := System.Copy(bytes);
 end;
 end;
 
 
-procedure TDerInteger.Encode(const derOut: IDerOutputStream);
+procedure TDerInteger.Encode(const derOut: TStream);
 begin
 begin
-  derOut.WriteEncoded(TAsn1Tags.Integer, Fbytes);
+  (derOut as TDerOutputStream).WriteEncoded(TAsn1Tags.Integer, Fbytes);
 end;
 end;
 
 
 class function TDerInteger.GetInstance(const obj: IAsn1TaggedObject;
 class function TDerInteger.GetInstance(const obj: IAsn1TaggedObject;

+ 5 - 3
CryptoLib/src/Asn1/ClpDerNull.pas

@@ -22,10 +22,12 @@ unit ClpDerNull;
 interface
 interface
 
 
 uses
 uses
+  Classes,
   SysUtils,
   SysUtils,
   ClpCryptoLibTypes,
   ClpCryptoLibTypes,
   ClpAsn1Tags,
   ClpAsn1Tags,
   ClpIProxiedInterface,
   ClpIProxiedInterface,
+  ClpDerOutputStream,
   ClpAsn1Null,
   ClpAsn1Null,
   ClpIDerNull;
   ClpIDerNull;
 
 
@@ -54,7 +56,7 @@ type
 
 
   public
   public
 
 
-    procedure Encode(const derOut: IDerOutputStream); override;
+    procedure Encode(const derOut: TStream); override;
     class property Instance: IDerNull read GetInstance;
     class property Instance: IDerNull read GetInstance;
 
 
   end;
   end;
@@ -87,9 +89,9 @@ begin
   System.SetLength(FZeroBytes, 0);
   System.SetLength(FZeroBytes, 0);
 end;
 end;
 
 
-procedure TDerNull.Encode(const derOut: IDerOutputStream);
+procedure TDerNull.Encode(const derOut: TStream);
 begin
 begin
-  derOut.WriteEncoded(TAsn1Tags.Null, FZeroBytes);
+  (derOut as TDerOutputStream).WriteEncoded(TAsn1Tags.Null, FZeroBytes);
 end;
 end;
 
 
 class function TDerNull.GetInstance: IDerNull;
 class function TDerNull.GetInstance: IDerNull;

+ 6 - 3
CryptoLib/src/Asn1/ClpDerNumericString.pas

@@ -22,12 +22,14 @@ unit ClpDerNumericString;
 interface
 interface
 
 
 uses
 uses
+  Classes,
   SysUtils,
   SysUtils,
   ClpDerStringBase,
   ClpDerStringBase,
   ClpAsn1Tags,
   ClpAsn1Tags,
   ClpAsn1OctetString,
   ClpAsn1OctetString,
   ClpAsn1Object,
   ClpAsn1Object,
   ClpIProxiedInterface,
   ClpIProxiedInterface,
+  ClpDerOutputStream,
   ClpCryptoLibTypes,
   ClpCryptoLibTypes,
   ClpIAsn1TaggedObject,
   ClpIAsn1TaggedObject,
   ClpIDerNumericString,
   ClpIDerNumericString,
@@ -86,7 +88,7 @@ type
 
 
     function GetOctets(): TCryptoLibByteArray; inline;
     function GetOctets(): TCryptoLibByteArray; inline;
 
 
-    procedure Encode(const derOut: IDerOutputStream); override;
+    procedure Encode(const derOut: TStream); override;
 
 
     /// <summary>
     /// <summary>
     /// return a Numeric string from the passed in object
     /// return a Numeric string from the passed in object
@@ -203,9 +205,10 @@ begin
   FStr := Str;
   FStr := Str;
 end;
 end;
 
 
-procedure TDerNumericString.Encode(const derOut: IDerOutputStream);
+procedure TDerNumericString.Encode(const derOut: TStream);
 begin
 begin
-  derOut.WriteEncoded(TAsn1Tags.NumericString, GetOctets());
+  (derOut as TDerOutputStream).WriteEncoded(TAsn1Tags.NumericString,
+    GetOctets());
 end;
 end;
 
 
 class function TDerNumericString.GetInstance(const obj: TObject)
 class function TDerNumericString.GetInstance(const obj: TObject)

+ 21 - 5
CryptoLib/src/Asn1/ClpDerObjectIdentifier.pas

@@ -35,6 +35,7 @@ uses
   ClpAsn1Tags,
   ClpAsn1Tags,
   ClpOidTokenizer,
   ClpOidTokenizer,
   ClpIOidTokenizer,
   ClpIOidTokenizer,
+  ClpDerOutputStream,
   ClpAsn1Object,
   ClpAsn1Object,
   ClpAsn1OctetString,
   ClpAsn1OctetString,
   ClpIAsn1TaggedObject,
   ClpIAsn1TaggedObject,
@@ -57,6 +58,7 @@ type
 
 
   class var
   class var
 
 
+    FIsBooted: Boolean;
     FLock: TCriticalSection;
     FLock: TCriticalSection;
     Fcache: TCryptoLibGenericArray<IDerObjectIdentifier>;
     Fcache: TCryptoLibGenericArray<IDerObjectIdentifier>;
 
 
@@ -67,6 +69,8 @@ type
     class constructor CreateDerObjectIdentifier();
     class constructor CreateDerObjectIdentifier();
     class destructor DestroyDerObjectIdentifier();
     class destructor DestroyDerObjectIdentifier();
 
 
+    class procedure Boot();
+
     constructor Create(const oid: IDerObjectIdentifier;
     constructor Create(const oid: IDerObjectIdentifier;
       const branchID: String); overload;
       const branchID: String); overload;
     constructor Create(const bytes: TCryptoLibByteArray); overload;
     constructor Create(const bytes: TCryptoLibByteArray); overload;
@@ -133,7 +137,7 @@ type
 
 
     function &On(const stem: IDerObjectIdentifier): Boolean; virtual;
     function &On(const stem: IDerObjectIdentifier): Boolean; virtual;
 
 
-    procedure Encode(const derOut: IDerOutputStream); override;
+    procedure Encode(const derOut: TStream); override;
 
 
     function ToString(): String; override;
     function ToString(): String; override;
 
 
@@ -167,6 +171,16 @@ begin
   result := TStringUtils.GetStringHashCode(Fidentifier);
   result := TStringUtils.GetStringHashCode(Fidentifier);
 end;
 end;
 
 
+class procedure TDerObjectIdentifier.Boot;
+begin
+  if not FIsBooted then
+  begin
+    FLock := TCriticalSection.Create;
+    System.SetLength(Fcache, 1024);
+    FIsBooted := True;
+  end;
+end;
+
 function TDerObjectIdentifier.Branch(const branchID: String)
 function TDerObjectIdentifier.Branch(const branchID: String)
   : IDerObjectIdentifier;
   : IDerObjectIdentifier;
 begin
 begin
@@ -221,8 +235,7 @@ end;
 
 
 class constructor TDerObjectIdentifier.CreateDerObjectIdentifier;
 class constructor TDerObjectIdentifier.CreateDerObjectIdentifier;
 begin
 begin
-  FLock := TCriticalSection.Create;
-  System.SetLength(Fcache, 1024);
+  TDerObjectIdentifier.Boot;
 end;
 end;
 
 
 class destructor TDerObjectIdentifier.DestroyDerObjectIdentifier;
 class destructor TDerObjectIdentifier.DestroyDerObjectIdentifier;
@@ -263,9 +276,10 @@ begin
   end;
   end;
 end;
 end;
 
 
-procedure TDerObjectIdentifier.Encode(const derOut: IDerOutputStream);
+procedure TDerObjectIdentifier.Encode(const derOut: TStream);
 begin
 begin
-  derOut.WriteEncoded(TAsn1Tags.ObjectIdentifier, GetBody());
+  (derOut as TDerOutputStream).WriteEncoded(TAsn1Tags.ObjectIdentifier,
+    GetBody());
 end;
 end;
 
 
 class function TDerObjectIdentifier.FromOctetString
 class function TDerObjectIdentifier.FromOctetString
@@ -278,6 +292,7 @@ begin
   HashCode := TArrayUtils.GetArrayHashCode(enc);
   HashCode := TArrayUtils.GetArrayHashCode(enc);
   first := HashCode and 1023;
   first := HashCode and 1023;
 
 
+  TDerObjectIdentifier.Boot;
   FLock.Acquire;
   FLock.Acquire;
   try
   try
     entry := Fcache[first];
     entry := Fcache[first];
@@ -300,6 +315,7 @@ function TDerObjectIdentifier.GetBody: TCryptoLibByteArray;
 var
 var
   bOut: TMemoryStream;
   bOut: TMemoryStream;
 begin
 begin
+  TDerObjectIdentifier.Boot;
   FLock.Acquire;
   FLock.Acquire;
   try
   try
     if (Fbody = Nil) then
     if (Fbody = Nil) then

+ 4 - 3
CryptoLib/src/Asn1/ClpDerOctetString.pas

@@ -22,6 +22,7 @@ unit ClpDerOctetString;
 interface
 interface
 
 
 uses
 uses
+  Classes,
   ClpCryptoLibTypes,
   ClpCryptoLibTypes,
   ClpAsn1Tags,
   ClpAsn1Tags,
   ClpDerOutputStream,
   ClpDerOutputStream,
@@ -39,7 +40,7 @@ type
 
 
     destructor Destroy(); override;
     destructor Destroy(); override;
 
 
-    procedure Encode(const derOut: IDerOutputStream); overload; override;
+    procedure Encode(const derOut: TStream); overload; override;
     class procedure Encode(const derOut: TDerOutputStream;
     class procedure Encode(const derOut: TDerOutputStream;
       const bytes: TCryptoLibByteArray; offset, length: Int32); reintroduce;
       const bytes: TCryptoLibByteArray; offset, length: Int32); reintroduce;
       overload; static; inline;
       overload; static; inline;
@@ -65,9 +66,9 @@ begin
   inherited Destroy;
   inherited Destroy;
 end;
 end;
 
 
-procedure TDerOctetString.Encode(const derOut: IDerOutputStream);
+procedure TDerOctetString.Encode(const derOut: TStream);
 begin
 begin
-  derOut.WriteEncoded(TAsn1Tags.OctetString, str);
+  (derOut as TDerOutputStream).WriteEncoded(TAsn1Tags.OctetString, str);
 end;
 end;
 
 
 class procedure TDerOctetString.Encode(const derOut: TDerOutputStream;
 class procedure TDerOctetString.Encode(const derOut: TDerOutputStream;

+ 1 - 1
CryptoLib/src/Asn1/ClpDerOutputStream.pas

@@ -30,7 +30,7 @@ uses
   ClpFilterStream;
   ClpFilterStream;
 
 
 type
 type
-  TDerOutputStream = class(TFilterStream, IDerOutputStream)
+  TDerOutputStream = class(TFilterStream)
 
 
   strict private
   strict private
     procedure WriteLength(length: Int32);
     procedure WriteLength(length: Int32);

+ 6 - 3
CryptoLib/src/Asn1/ClpDerPrintableString.pas

@@ -22,6 +22,7 @@ unit ClpDerPrintableString;
 interface
 interface
 
 
 uses
 uses
+  Classes,
   SysUtils,
   SysUtils,
   StrUtils,
   StrUtils,
   ClpDerStringBase,
   ClpDerStringBase,
@@ -29,6 +30,7 @@ uses
   ClpAsn1OctetString,
   ClpAsn1OctetString,
   ClpAsn1Object,
   ClpAsn1Object,
   ClpIProxiedInterface,
   ClpIProxiedInterface,
+  ClpDerOutputStream,
   ClpCryptoLibTypes,
   ClpCryptoLibTypes,
   ClpIAsn1TaggedObject,
   ClpIAsn1TaggedObject,
   ClpIDerPrintableString,
   ClpIDerPrintableString,
@@ -85,7 +87,7 @@ type
 
 
     function GetOctets(): TCryptoLibByteArray; inline;
     function GetOctets(): TCryptoLibByteArray; inline;
 
 
-    procedure Encode(const derOut: IDerOutputStream); override;
+    procedure Encode(const derOut: TStream); override;
 
 
     property Str: String read GetStr;
     property Str: String read GetStr;
 
 
@@ -227,9 +229,10 @@ begin
   FStr := Str;
   FStr := Str;
 end;
 end;
 
 
-procedure TDerPrintableString.Encode(const derOut: IDerOutputStream);
+procedure TDerPrintableString.Encode(const derOut: TStream);
 begin
 begin
-  derOut.WriteEncoded(TAsn1Tags.PrintableString, GetOctets());
+  (derOut as TDerOutputStream).WriteEncoded(TAsn1Tags.PrintableString,
+    GetOctets());
 end;
 end;
 
 
 class function TDerPrintableString.GetInstance(const obj: TObject)
 class function TDerPrintableString.GetInstance(const obj: TObject)

+ 4 - 3
CryptoLib/src/Asn1/ClpDerSequence.pas

@@ -75,7 +75,7 @@ type
     /// just outputing Sequence, <br />we also have to specify Constructed,
     /// just outputing Sequence, <br />we also have to specify Constructed,
     /// and the objects length. <br />
     /// and the objects length. <br />
     /// </summary>
     /// </summary>
-    procedure Encode(const derOut: IDerOutputStream); override;
+    procedure Encode(const derOut: TStream); override;
 
 
     class property Empty: IDerSequence read GetEmpty;
     class property Empty: IDerSequence read GetEmpty;
 
 
@@ -136,7 +136,7 @@ begin
   inherited Destroy;
   inherited Destroy;
 end;
 end;
 
 
-procedure TDerSequence.Encode(const derOut: IDerOutputStream);
+procedure TDerSequence.Encode(const derOut: TStream);
 var
 var
   bOut: TMemoryStream;
   bOut: TMemoryStream;
   dOut: TDerOutputStream;
   dOut: TDerOutputStream;
@@ -163,7 +163,8 @@ begin
     dOut.Free;
     dOut.Free;
   end;
   end;
 
 
-  derOut.WriteEncoded(TAsn1Tags.Sequence or TAsn1Tags.Constructed, bytes);
+  (derOut as TDerOutputStream).WriteEncoded(TAsn1Tags.Sequence or
+    TAsn1Tags.Constructed, bytes);
 end;
 end;
 
 
 class function TDerSequence.FromVector(const v: IAsn1EncodableVector)
 class function TDerSequence.FromVector(const v: IAsn1EncodableVector)

+ 4 - 3
CryptoLib/src/Asn1/ClpDerSet.pas

@@ -81,7 +81,7 @@ type
     /// just outputing Set, <br />we also have to specify Constructed, and
     /// just outputing Set, <br />we also have to specify Constructed, and
     /// the objects length. <br />
     /// the objects length. <br />
     /// </summary>
     /// </summary>
-    procedure Encode(const derOut: IDerOutputStream); override;
+    procedure Encode(const derOut: TStream); override;
 
 
     class property Empty: IDerSet read GetEmpty;
     class property Empty: IDerSet read GetEmpty;
 
 
@@ -155,7 +155,7 @@ begin
   inherited Destroy;
   inherited Destroy;
 end;
 end;
 
 
-procedure TDerSet.Encode(const derOut: IDerOutputStream);
+procedure TDerSet.Encode(const derOut: TStream);
 var
 var
   bOut: TMemoryStream;
   bOut: TMemoryStream;
   dOut: TDerOutputStream;
   dOut: TDerOutputStream;
@@ -182,7 +182,8 @@ begin
     dOut.Free;
     dOut.Free;
   end;
   end;
 
 
-  derOut.WriteEncoded(TAsn1Tags.&Set or TAsn1Tags.Constructed, bytes);
+  (derOut as TDerOutputStream).WriteEncoded(TAsn1Tags.&Set or
+    TAsn1Tags.Constructed, bytes);
 end;
 end;
 
 
 class function TDerSet.FromVector(const v: IAsn1EncodableVector;
 class function TDerSet.FromVector(const v: IAsn1EncodableVector;

+ 5 - 3
CryptoLib/src/Asn1/ClpDerT61String.pas

@@ -22,12 +22,14 @@ unit ClpDerT61String;
 interface
 interface
 
 
 uses
 uses
+  Classes,
   SysUtils,
   SysUtils,
   ClpDerStringBase,
   ClpDerStringBase,
   ClpAsn1Tags,
   ClpAsn1Tags,
   ClpAsn1OctetString,
   ClpAsn1OctetString,
   ClpAsn1Object,
   ClpAsn1Object,
   ClpIProxiedInterface,
   ClpIProxiedInterface,
+  ClpDerOutputStream,
   ClpCryptoLibTypes,
   ClpCryptoLibTypes,
   ClpIAsn1TaggedObject,
   ClpIAsn1TaggedObject,
   ClpIDerT61String,
   ClpIDerT61String,
@@ -76,7 +78,7 @@ type
 
 
     function GetOctets(): TCryptoLibByteArray; inline;
     function GetOctets(): TCryptoLibByteArray; inline;
 
 
-    procedure Encode(const derOut: IDerOutputStream); override;
+    procedure Encode(const derOut: TStream); override;
 
 
     /// <summary>
     /// <summary>
     /// return a T61 string from the passed in object.
     /// return a T61 string from the passed in object.
@@ -165,9 +167,9 @@ begin
   FEncoding.Free;
   FEncoding.Free;
 end;
 end;
 
 
-procedure TDerT61String.Encode(const derOut: IDerOutputStream);
+procedure TDerT61String.Encode(const derOut: TStream);
 begin
 begin
-  derOut.WriteEncoded(TAsn1Tags.T61String, GetOctets());
+  (derOut as TDerOutputStream).WriteEncoded(TAsn1Tags.T61String, GetOctets());
 end;
 end;
 
 
 class function TDerT61String.GetInstance(const obj: TObject): IDerT61String;
 class function TDerT61String.GetInstance(const obj: TObject): IDerT61String;

+ 9 - 6
CryptoLib/src/Asn1/ClpDerTaggedObject.pas

@@ -22,6 +22,7 @@ unit ClpDerTaggedObject;
 interface
 interface
 
 
 uses
 uses
+  Classes,
   ClpCryptoLibTypes,
   ClpCryptoLibTypes,
   ClpAsn1Tags,
   ClpAsn1Tags,
   ClpDerSequence,
   ClpDerSequence,
@@ -29,6 +30,7 @@ uses
   ClpIDerSequence,
   ClpIDerSequence,
 {$ENDIF DELPHI}
 {$ENDIF DELPHI}
   ClpIProxiedInterface,
   ClpIProxiedInterface,
+  ClpDerOutputStream,
   ClpAsn1TaggedObject,
   ClpAsn1TaggedObject,
   ClpIDerTaggedObject;
   ClpIDerTaggedObject;
 
 
@@ -71,7 +73,7 @@ type
     /// </param>
     /// </param>
     constructor Create(tagNo: Int32); overload;
     constructor Create(tagNo: Int32); overload;
 
 
-    procedure Encode(const derOut: IDerOutputStream); override;
+    procedure Encode(const derOut: TStream); override;
 
 
   end;
   end;
 
 
@@ -95,7 +97,7 @@ begin
   Inherited Create(false, tagNo, TDerSequence.Empty)
   Inherited Create(false, tagNo, TDerSequence.Empty)
 end;
 end;
 
 
-procedure TDerTaggedObject.Encode(const derOut: IDerOutputStream);
+procedure TDerTaggedObject.Encode(const derOut: TStream);
 var
 var
   bytes: TCryptoLibByteArray;
   bytes: TCryptoLibByteArray;
   flags: Int32;
   flags: Int32;
@@ -106,8 +108,8 @@ begin
 
 
     if (explicitly) then
     if (explicitly) then
     begin
     begin
-      derOut.WriteEncoded(TAsn1Tags.Constructed or TAsn1Tags.Tagged,
-        tagNo, bytes);
+      (derOut as TDerOutputStream).WriteEncoded(TAsn1Tags.Constructed or
+        TAsn1Tags.Tagged, tagNo, bytes);
     end
     end
     else
     else
     begin
     begin
@@ -115,13 +117,14 @@ begin
       // need to mark constructed types... (preserve Constructed tag)
       // need to mark constructed types... (preserve Constructed tag)
       //
       //
       flags := (bytes[0] and TAsn1Tags.Constructed) or TAsn1Tags.Tagged;
       flags := (bytes[0] and TAsn1Tags.Constructed) or TAsn1Tags.Tagged;
-      derOut.WriteTag(flags, tagNo);
+      (derOut as TDerOutputStream).WriteTag(flags, tagNo);
       derOut.Write(bytes[1], System.Length(bytes) - 1);
       derOut.Write(bytes[1], System.Length(bytes) - 1);
     end
     end
   end
   end
   else
   else
   begin
   begin
-    derOut.WriteEncoded(TAsn1Tags.Constructed or TAsn1Tags.Tagged, tagNo, Nil);
+    (derOut as TDerOutputStream).WriteEncoded(TAsn1Tags.Constructed or
+      TAsn1Tags.Tagged, tagNo, Nil);
   end;
   end;
 end;
 end;
 
 

+ 4 - 3
CryptoLib/src/Asn1/ClpDerUniversalString.pas

@@ -30,6 +30,7 @@ uses
   ClpAsn1OctetString,
   ClpAsn1OctetString,
   ClpAsn1Object,
   ClpAsn1Object,
   ClpIProxiedInterface,
   ClpIProxiedInterface,
+  ClpDerOutputStream,
   ClpCryptoLibTypes,
   ClpCryptoLibTypes,
   ClpIAsn1TaggedObject,
   ClpIAsn1TaggedObject,
   ClpIDerUniversalString;
   ClpIDerUniversalString;
@@ -69,7 +70,7 @@ type
 
 
     function GetOctets(): TCryptoLibByteArray; inline;
     function GetOctets(): TCryptoLibByteArray; inline;
 
 
-    procedure Encode(const derOut: IDerOutputStream); override;
+    procedure Encode(const derOut: TStream); override;
 
 
     /// <summary>
     /// <summary>
     /// return a Universal String from the passed in object.
     /// return a Universal String from the passed in object.
@@ -142,9 +143,9 @@ begin
   FStr := Str;
   FStr := Str;
 end;
 end;
 
 
-procedure TDerUniversalString.Encode(const derOut: IDerOutputStream);
+procedure TDerUniversalString.Encode(const derOut: TStream);
 begin
 begin
-  derOut.WriteEncoded(TAsn1Tags.UniversalString, Str);
+  (derOut as TDerOutputStream).WriteEncoded(TAsn1Tags.UniversalString, Str);
 end;
 end;
 
 
 class function TDerUniversalString.GetInstance(const obj: TObject)
 class function TDerUniversalString.GetInstance(const obj: TObject)

+ 5 - 3
CryptoLib/src/Asn1/ClpDerUtf8String.pas

@@ -22,12 +22,14 @@ unit ClpDerUtf8String;
 interface
 interface
 
 
 uses
 uses
+  Classes,
   SysUtils,
   SysUtils,
   ClpDerStringBase,
   ClpDerStringBase,
   ClpAsn1Tags,
   ClpAsn1Tags,
   ClpAsn1OctetString,
   ClpAsn1OctetString,
   ClpAsn1Object,
   ClpAsn1Object,
   ClpIProxiedInterface,
   ClpIProxiedInterface,
+  ClpDerOutputStream,
   ClpCryptoLibTypes,
   ClpCryptoLibTypes,
   ClpIAsn1TaggedObject,
   ClpIAsn1TaggedObject,
   ClpIDerUtf8String,
   ClpIDerUtf8String,
@@ -67,7 +69,7 @@ type
 
 
     function GetString(): String; override;
     function GetString(): String; override;
 
 
-    procedure Encode(const derOut: IDerOutputStream); override;
+    procedure Encode(const derOut: TStream); override;
 
 
     /// <summary>
     /// <summary>
     /// return an UTF8 string from the passed in object.
     /// return an UTF8 string from the passed in object.
@@ -140,9 +142,9 @@ begin
   FStr := Str;
   FStr := Str;
 end;
 end;
 
 
-procedure TDerUtf8String.Encode(const derOut: IDerOutputStream);
+procedure TDerUtf8String.Encode(const derOut: TStream);
 begin
 begin
-  derOut.WriteEncoded(TAsn1Tags.Utf8String,
+  (derOut as TDerOutputStream).WriteEncoded(TAsn1Tags.Utf8String,
     TConverters.ConvertStringToBytes(Str, TEncoding.UTF8));
     TConverters.ConvertStringToBytes(Str, TEncoding.UTF8));
 end;
 end;
 
 

+ 5 - 3
CryptoLib/src/Asn1/ClpDerVideotexString.pas

@@ -22,12 +22,14 @@ unit ClpDerVideotexString;
 interface
 interface
 
 
 uses
 uses
+  Classes,
   SysUtils,
   SysUtils,
   ClpArrayUtils,
   ClpArrayUtils,
   ClpCryptoLibTypes,
   ClpCryptoLibTypes,
   ClpAsn1Object,
   ClpAsn1Object,
   ClpAsn1Tags,
   ClpAsn1Tags,
   ClpAsn1OctetString,
   ClpAsn1OctetString,
+  ClpDerOutputStream,
   ClpIProxiedInterface,
   ClpIProxiedInterface,
   ClpIDerVideotexString,
   ClpIDerVideotexString,
   ClpIAsn1TaggedObject,
   ClpIAsn1TaggedObject,
@@ -66,7 +68,7 @@ type
 
 
     function GetOctets(): TCryptoLibByteArray; inline;
     function GetOctets(): TCryptoLibByteArray; inline;
 
 
-    procedure Encode(const derOut: IDerOutputStream); override;
+    procedure Encode(const derOut: TStream); override;
 
 
     /// <summary>
     /// <summary>
     /// return a Videotex String from the passed in object
     /// return a Videotex String from the passed in object
@@ -137,9 +139,9 @@ begin
   FmString := System.Copy(encoding);
   FmString := System.Copy(encoding);
 end;
 end;
 
 
-procedure TDerVideotexString.Encode(const derOut: IDerOutputStream);
+procedure TDerVideotexString.Encode(const derOut: TStream);
 begin
 begin
-  derOut.WriteEncoded(TAsn1Tags.VideotexString, mString);
+  (derOut as TDerOutputStream).WriteEncoded(TAsn1Tags.VideotexString, mString);
 end;
 end;
 
 
 class function TDerVideotexString.GetInstance(const obj: TObject)
 class function TDerVideotexString.GetInstance(const obj: TObject)

+ 6 - 3
CryptoLib/src/Asn1/ClpDerVisibleString.pas

@@ -22,6 +22,7 @@ unit ClpDerVisibleString;
 interface
 interface
 
 
 uses
 uses
+  Classes,
   SysUtils,
   SysUtils,
   ClpDerStringBase,
   ClpDerStringBase,
   ClpAsn1Tags,
   ClpAsn1Tags,
@@ -29,6 +30,7 @@ uses
   ClpIAsn1OctetString,
   ClpIAsn1OctetString,
   ClpStringUtils,
   ClpStringUtils,
   ClpIProxiedInterface,
   ClpIProxiedInterface,
+  ClpDerOutputStream,
   ClpCryptoLibTypes,
   ClpCryptoLibTypes,
   ClpIAsn1TaggedObject,
   ClpIAsn1TaggedObject,
   ClpIDerVisibleString,
   ClpIDerVisibleString,
@@ -71,7 +73,7 @@ type
 
 
     function GetOctets(): TCryptoLibByteArray; inline;
     function GetOctets(): TCryptoLibByteArray; inline;
 
 
-    procedure Encode(const derOut: IDerOutputStream); override;
+    procedure Encode(const derOut: TStream); override;
 
 
     /// <summary>
     /// <summary>
     /// return a DerVisibleString from the passed in object
     /// return a DerVisibleString from the passed in object
@@ -154,9 +156,10 @@ begin
   FStr := Str;
   FStr := Str;
 end;
 end;
 
 
-procedure TDerVisibleString.Encode(const derOut: IDerOutputStream);
+procedure TDerVisibleString.Encode(const derOut: TStream);
 begin
 begin
-  derOut.WriteEncoded(TAsn1Tags.VisibleString, GetOctets());
+  (derOut as TDerOutputStream).WriteEncoded(TAsn1Tags.VisibleString,
+    GetOctets());
 end;
 end;
 
 
 class function TDerVisibleString.GetInstance(const obj: TObject)
 class function TDerVisibleString.GetInstance(const obj: TObject)

+ 1 - 2
CryptoLib/src/Crypto/Signers/ClpSchnorrDigestSigner.pas

@@ -35,8 +35,7 @@ uses
   ClpStandardDsaEncoding,
   ClpStandardDsaEncoding,
   ClpIAsymmetricKeyParameter,
   ClpIAsymmetricKeyParameter,
   ClpICipherParameters,
   ClpICipherParameters,
-  ClpISigner,
-  ClpArrayUtils;
+  ClpISigner;
 
 
 resourcestring
 resourcestring
   SPrivateKey = 'Signing Requires Private Key.';
   SPrivateKey = 'Signing Requires Private Key.';

+ 3 - 24
CryptoLib/src/Interfaces/ClpIProxiedInterface.pas

@@ -22,8 +22,8 @@ unit ClpIProxiedInterface;
 interface
 interface
 
 
 uses
 uses
-  ClpCryptoLibTypes,
-  ClpIFilterStream;
+  Classes,
+  ClpCryptoLibTypes;
 
 
 type
 type
   IAsn1Object = interface;
   IAsn1Object = interface;
@@ -48,8 +48,6 @@ type
 {$ENDIF DELPHI}
 {$ENDIF DELPHI}
   end;
   end;
 
 
-  IDerOutputStream = interface;
-
   IAsn1Object = interface(IAsn1Encodable)
   IAsn1Object = interface(IAsn1Encodable)
 
 
     ['{83A52A0F-570B-43BB-9B98-8E5351FDA996}']
     ['{83A52A0F-570B-43BB-9B98-8E5351FDA996}']
@@ -58,7 +56,7 @@ type
 
 
     function Asn1GetHashCode(): Int32;
     function Asn1GetHashCode(): Int32;
 
 
-    procedure Encode(const derOut: IDerOutputStream);
+    procedure Encode(const derOut: TStream);
 
 
     function CallAsn1Equals(const obj: IAsn1Object): Boolean;
     function CallAsn1Equals(const obj: IAsn1Object): Boolean;
 
 
@@ -66,25 +64,6 @@ type
 
 
   end;
   end;
 
 
-  IDerOutputStream = interface(IFilterStream)
-    ['{2210ED27-9DB1-4BFC-9462-8AA35AF0C4C5}']
-
-    procedure WriteNull();
-    procedure WriteEncoded(tag: Int32;
-      const bytes: TCryptoLibByteArray); overload;
-    procedure WriteEncoded(tag: Int32; first: Byte;
-      const bytes: TCryptoLibByteArray); overload;
-    procedure WriteEncoded(tag: Int32; const bytes: TCryptoLibByteArray;
-      offset, length: Int32); overload;
-    procedure WriteEncoded(flags, tagNo: Int32;
-      const bytes: TCryptoLibByteArray); overload;
-    procedure WriteTag(flags, tagNo: Int32);
-
-    procedure WriteObject(const obj: IAsn1Encodable); overload;
-    procedure WriteObject(const obj: IAsn1Object); overload;
-
-  end;
-
 implementation
 implementation
 
 
 end.
 end.

+ 563 - 567
CryptoLib/src/Packages/FPC/CryptoLib4PascalPackage.lpk

@@ -24,8 +24,8 @@
 
 
  Acknowledgements: 
  Acknowledgements: 
 Thanks to Sphere 10 Software (http://www.sphere10.com/) for sponsoring the development of this library "/>
 Thanks to Sphere 10 Software (http://www.sphere10.com/) for sponsoring the development of this library "/>
-    <Version Major="2" Minor="6"/>
-    <Files Count="459">
+    <Version Major="2" Minor="7"/>
+    <Files Count="458">
       <Item1>
       <Item1>
         <Filename Value="..\..\Asn1\ClpAsn1Encodable.pas"/>
         <Filename Value="..\..\Asn1\ClpAsn1Encodable.pas"/>
         <UnitName Value="ClpAsn1Encodable"/>
         <UnitName Value="ClpAsn1Encodable"/>
@@ -735,1135 +735,1131 @@ Thanks to Sphere 10 Software (http://www.sphere10.com/) for sponsoring the devel
         <UnitName Value="ClpIExtensionField"/>
         <UnitName Value="ClpIExtensionField"/>
       </Item177>
       </Item177>
       <Item178>
       <Item178>
-        <Filename Value="..\..\Interfaces\ClpIFilterStream.pas"/>
-        <UnitName Value="ClpIFilterStream"/>
-      </Item178>
-      <Item179>
         <Filename Value="..\..\Interfaces\ClpIFiniteField.pas"/>
         <Filename Value="..\..\Interfaces\ClpIFiniteField.pas"/>
         <UnitName Value="ClpIFiniteField"/>
         <UnitName Value="ClpIFiniteField"/>
-      </Item179>
-      <Item180>
+      </Item178>
+      <Item179>
         <Filename Value="..\..\Interfaces\ClpIFixedPointCombMultiplier.pas"/>
         <Filename Value="..\..\Interfaces\ClpIFixedPointCombMultiplier.pas"/>
         <UnitName Value="ClpIFixedPointCombMultiplier"/>
         <UnitName Value="ClpIFixedPointCombMultiplier"/>
-      </Item180>
-      <Item181>
+      </Item179>
+      <Item180>
         <Filename Value="..\..\Interfaces\ClpIFixedPointPreCompInfo.pas"/>
         <Filename Value="..\..\Interfaces\ClpIFixedPointPreCompInfo.pas"/>
         <UnitName Value="ClpIFixedPointPreCompInfo"/>
         <UnitName Value="ClpIFixedPointPreCompInfo"/>
-      </Item181>
-      <Item182>
+      </Item180>
+      <Item181>
         <Filename Value="..\..\Interfaces\ClpIGenericPolynomialExtensionField.pas"/>
         <Filename Value="..\..\Interfaces\ClpIGenericPolynomialExtensionField.pas"/>
         <UnitName Value="ClpIGenericPolynomialExtensionField"/>
         <UnitName Value="ClpIGenericPolynomialExtensionField"/>
-      </Item182>
-      <Item183>
+      </Item181>
+      <Item182>
         <Filename Value="..\..\Interfaces\ClpIGF2Polynomial.pas"/>
         <Filename Value="..\..\Interfaces\ClpIGF2Polynomial.pas"/>
         <UnitName Value="ClpIGF2Polynomial"/>
         <UnitName Value="ClpIGF2Polynomial"/>
-      </Item183>
-      <Item184>
+      </Item182>
+      <Item183>
         <Filename Value="..\..\Interfaces\ClpIGlvEndomorphism.pas"/>
         <Filename Value="..\..\Interfaces\ClpIGlvEndomorphism.pas"/>
         <UnitName Value="ClpIGlvEndomorphism"/>
         <UnitName Value="ClpIGlvEndomorphism"/>
-      </Item184>
-      <Item185>
+      </Item183>
+      <Item184>
         <Filename Value="..\..\Interfaces\ClpIGlvMultiplier.pas"/>
         <Filename Value="..\..\Interfaces\ClpIGlvMultiplier.pas"/>
         <UnitName Value="ClpIGlvMultiplier"/>
         <UnitName Value="ClpIGlvMultiplier"/>
-      </Item185>
-      <Item186>
+      </Item184>
+      <Item185>
         <Filename Value="..\..\Interfaces\ClpIGlvTypeBEndomorphism.pas"/>
         <Filename Value="..\..\Interfaces\ClpIGlvTypeBEndomorphism.pas"/>
         <UnitName Value="ClpIGlvTypeBEndomorphism"/>
         <UnitName Value="ClpIGlvTypeBEndomorphism"/>
-      </Item186>
-      <Item187>
+      </Item185>
+      <Item186>
         <Filename Value="..\..\Interfaces\ClpIGlvTypeBParameters.pas"/>
         <Filename Value="..\..\Interfaces\ClpIGlvTypeBParameters.pas"/>
         <UnitName Value="ClpIGlvTypeBParameters"/>
         <UnitName Value="ClpIGlvTypeBParameters"/>
-      </Item187>
-      <Item188>
+      </Item186>
+      <Item187>
         <Filename Value="..\..\Interfaces\ClpIKeyGenerationParameters.pas"/>
         <Filename Value="..\..\Interfaces\ClpIKeyGenerationParameters.pas"/>
         <UnitName Value="ClpIKeyGenerationParameters"/>
         <UnitName Value="ClpIKeyGenerationParameters"/>
-      </Item188>
-      <Item189>
+      </Item187>
+      <Item188>
         <Filename Value="..\..\Interfaces\ClpIOidTokenizer.pas"/>
         <Filename Value="..\..\Interfaces\ClpIOidTokenizer.pas"/>
         <UnitName Value="ClpIOidTokenizer"/>
         <UnitName Value="ClpIOidTokenizer"/>
-      </Item189>
-      <Item190>
+      </Item188>
+      <Item189>
         <Filename Value="..\..\Interfaces\ClpIOSRandomNumberGenerator.pas"/>
         <Filename Value="..\..\Interfaces\ClpIOSRandomNumberGenerator.pas"/>
         <UnitName Value="ClpIOSRandomNumberGenerator"/>
         <UnitName Value="ClpIOSRandomNumberGenerator"/>
-      </Item190>
-      <Item191>
+      </Item189>
+      <Item190>
         <Filename Value="..\..\Interfaces\ClpIParametersWithRandom.pas"/>
         <Filename Value="..\..\Interfaces\ClpIParametersWithRandom.pas"/>
         <UnitName Value="ClpIParametersWithRandom"/>
         <UnitName Value="ClpIParametersWithRandom"/>
-      </Item191>
-      <Item192>
+      </Item190>
+      <Item191>
         <Filename Value="..\..\Interfaces\ClpIPCGRandomNumberGenerator.pas"/>
         <Filename Value="..\..\Interfaces\ClpIPCGRandomNumberGenerator.pas"/>
         <UnitName Value="ClpIPCGRandomNumberGenerator"/>
         <UnitName Value="ClpIPCGRandomNumberGenerator"/>
-      </Item192>
-      <Item193>
+      </Item191>
+      <Item192>
         <Filename Value="..\..\Interfaces\ClpIPolynomial.pas"/>
         <Filename Value="..\..\Interfaces\ClpIPolynomial.pas"/>
         <UnitName Value="ClpIPolynomial"/>
         <UnitName Value="ClpIPolynomial"/>
-      </Item193>
-      <Item194>
+      </Item192>
+      <Item193>
         <Filename Value="..\..\Interfaces\ClpIPolynomialExtensionField.pas"/>
         <Filename Value="..\..\Interfaces\ClpIPolynomialExtensionField.pas"/>
         <UnitName Value="ClpIPolynomialExtensionField"/>
         <UnitName Value="ClpIPolynomialExtensionField"/>
-      </Item194>
-      <Item195>
+      </Item193>
+      <Item194>
         <Filename Value="..\..\Interfaces\ClpIPreCompInfo.pas"/>
         <Filename Value="..\..\Interfaces\ClpIPreCompInfo.pas"/>
         <UnitName Value="ClpIPreCompInfo"/>
         <UnitName Value="ClpIPreCompInfo"/>
-      </Item195>
-      <Item196>
+      </Item194>
+      <Item195>
         <Filename Value="..\..\Interfaces\ClpIPrimeField.pas"/>
         <Filename Value="..\..\Interfaces\ClpIPrimeField.pas"/>
         <UnitName Value="ClpIPrimeField"/>
         <UnitName Value="ClpIPrimeField"/>
-      </Item196>
-      <Item197>
+      </Item195>
+      <Item196>
         <Filename Value="..\..\Interfaces\ClpIProxiedInterface.pas"/>
         <Filename Value="..\..\Interfaces\ClpIProxiedInterface.pas"/>
         <UnitName Value="ClpIProxiedInterface"/>
         <UnitName Value="ClpIProxiedInterface"/>
-      </Item197>
-      <Item198>
+      </Item196>
+      <Item197>
         <Filename Value="..\..\Interfaces\ClpIRandom.pas"/>
         <Filename Value="..\..\Interfaces\ClpIRandom.pas"/>
         <UnitName Value="ClpIRandom"/>
         <UnitName Value="ClpIRandom"/>
-      </Item198>
-      <Item199>
+      </Item197>
+      <Item198>
         <Filename Value="..\..\Interfaces\ClpIRandomDsaKCalculator.pas"/>
         <Filename Value="..\..\Interfaces\ClpIRandomDsaKCalculator.pas"/>
         <UnitName Value="ClpIRandomDsaKCalculator"/>
         <UnitName Value="ClpIRandomDsaKCalculator"/>
-      </Item199>
-      <Item200>
+      </Item198>
+      <Item199>
         <Filename Value="..\..\Interfaces\ClpIRandomGenerator.pas"/>
         <Filename Value="..\..\Interfaces\ClpIRandomGenerator.pas"/>
         <UnitName Value="ClpIRandomGenerator"/>
         <UnitName Value="ClpIRandomGenerator"/>
-      </Item200>
-      <Item201>
+      </Item199>
+      <Item200>
         <Filename Value="..\..\Interfaces\ClpIRandomNumberGenerator.pas"/>
         <Filename Value="..\..\Interfaces\ClpIRandomNumberGenerator.pas"/>
         <UnitName Value="ClpIRandomNumberGenerator"/>
         <UnitName Value="ClpIRandomNumberGenerator"/>
-      </Item201>
-      <Item202>
+      </Item200>
+      <Item201>
         <Filename Value="..\..\Interfaces\ClpIScaleXPointMap.pas"/>
         <Filename Value="..\..\Interfaces\ClpIScaleXPointMap.pas"/>
         <UnitName Value="ClpIScaleXPointMap"/>
         <UnitName Value="ClpIScaleXPointMap"/>
-      </Item202>
-      <Item203>
+      </Item201>
+      <Item202>
         <Filename Value="..\..\Interfaces\ClpISecureRandom.pas"/>
         <Filename Value="..\..\Interfaces\ClpISecureRandom.pas"/>
         <UnitName Value="ClpISecureRandom"/>
         <UnitName Value="ClpISecureRandom"/>
-      </Item203>
-      <Item204>
+      </Item202>
+      <Item203>
         <Filename Value="..\..\Interfaces\ClpISigner.pas"/>
         <Filename Value="..\..\Interfaces\ClpISigner.pas"/>
         <UnitName Value="ClpISigner"/>
         <UnitName Value="ClpISigner"/>
-      </Item204>
-      <Item205>
+      </Item203>
+      <Item204>
         <Filename Value="..\..\Interfaces\ClpIWNafL2RMultiplier.pas"/>
         <Filename Value="..\..\Interfaces\ClpIWNafL2RMultiplier.pas"/>
         <UnitName Value="ClpIWNafL2RMultiplier"/>
         <UnitName Value="ClpIWNafL2RMultiplier"/>
-      </Item205>
-      <Item206>
+      </Item204>
+      <Item205>
         <Filename Value="..\..\Interfaces\ClpIWNafPreCompInfo.pas"/>
         <Filename Value="..\..\Interfaces\ClpIWNafPreCompInfo.pas"/>
         <UnitName Value="ClpIWNafPreCompInfo"/>
         <UnitName Value="ClpIWNafPreCompInfo"/>
-      </Item206>
-      <Item207>
+      </Item205>
+      <Item206>
         <Filename Value="..\..\Interfaces\ClpIWTauNafMultiplier.pas"/>
         <Filename Value="..\..\Interfaces\ClpIWTauNafMultiplier.pas"/>
         <UnitName Value="ClpIWTauNafMultiplier"/>
         <UnitName Value="ClpIWTauNafMultiplier"/>
-      </Item207>
-      <Item208>
+      </Item206>
+      <Item207>
         <Filename Value="..\..\Interfaces\ClpIWTauNafPreCompInfo.pas"/>
         <Filename Value="..\..\Interfaces\ClpIWTauNafPreCompInfo.pas"/>
         <UnitName Value="ClpIWTauNafPreCompInfo"/>
         <UnitName Value="ClpIWTauNafPreCompInfo"/>
-      </Item208>
-      <Item209>
+      </Item207>
+      <Item208>
         <Filename Value="..\..\Interfaces\ClpIX9Curve.pas"/>
         <Filename Value="..\..\Interfaces\ClpIX9Curve.pas"/>
         <UnitName Value="ClpIX9Curve"/>
         <UnitName Value="ClpIX9Curve"/>
-      </Item209>
-      <Item210>
+      </Item208>
+      <Item209>
         <Filename Value="..\..\Interfaces\ClpIX9ECParameters.pas"/>
         <Filename Value="..\..\Interfaces\ClpIX9ECParameters.pas"/>
         <UnitName Value="ClpIX9ECParameters"/>
         <UnitName Value="ClpIX9ECParameters"/>
-      </Item210>
-      <Item211>
+      </Item209>
+      <Item210>
         <Filename Value="..\..\Interfaces\ClpIX9ECParametersHolder.pas"/>
         <Filename Value="..\..\Interfaces\ClpIX9ECParametersHolder.pas"/>
         <UnitName Value="ClpIX9ECParametersHolder"/>
         <UnitName Value="ClpIX9ECParametersHolder"/>
-      </Item211>
-      <Item212>
+      </Item210>
+      <Item211>
         <Filename Value="..\..\Interfaces\ClpIX9ECPoint.pas"/>
         <Filename Value="..\..\Interfaces\ClpIX9ECPoint.pas"/>
         <UnitName Value="ClpIX9ECPoint"/>
         <UnitName Value="ClpIX9ECPoint"/>
-      </Item212>
-      <Item213>
+      </Item211>
+      <Item212>
         <Filename Value="..\..\Interfaces\ClpIX9FieldElement.pas"/>
         <Filename Value="..\..\Interfaces\ClpIX9FieldElement.pas"/>
         <UnitName Value="ClpIX9FieldElement"/>
         <UnitName Value="ClpIX9FieldElement"/>
-      </Item213>
-      <Item214>
+      </Item212>
+      <Item213>
         <Filename Value="..\..\Interfaces\ClpIX9FieldID.pas"/>
         <Filename Value="..\..\Interfaces\ClpIX9FieldID.pas"/>
         <UnitName Value="ClpIX9FieldID"/>
         <UnitName Value="ClpIX9FieldID"/>
-      </Item214>
-      <Item215>
+      </Item213>
+      <Item214>
         <Filename Value="..\..\Interfaces\ClpIZTauElement.pas"/>
         <Filename Value="..\..\Interfaces\ClpIZTauElement.pas"/>
         <UnitName Value="ClpIZTauElement"/>
         <UnitName Value="ClpIZTauElement"/>
-      </Item215>
-      <Item216>
+      </Item214>
+      <Item215>
         <Filename Value="..\..\Math\ClpBigInteger.pas"/>
         <Filename Value="..\..\Math\ClpBigInteger.pas"/>
         <UnitName Value="ClpBigInteger"/>
         <UnitName Value="ClpBigInteger"/>
-      </Item216>
-      <Item217>
+      </Item215>
+      <Item216>
         <Filename Value="..\..\Math\ClpNumberStyles.pas"/>
         <Filename Value="..\..\Math\ClpNumberStyles.pas"/>
         <UnitName Value="ClpNumberStyles"/>
         <UnitName Value="ClpNumberStyles"/>
-      </Item217>
-      <Item218>
+      </Item216>
+      <Item217>
         <Filename Value="..\..\Math\EC\ClpECAlgorithms.pas"/>
         <Filename Value="..\..\Math\EC\ClpECAlgorithms.pas"/>
         <UnitName Value="ClpECAlgorithms"/>
         <UnitName Value="ClpECAlgorithms"/>
-      </Item218>
-      <Item219>
+      </Item217>
+      <Item218>
         <Filename Value="..\..\Math\EC\ClpECCurve.pas"/>
         <Filename Value="..\..\Math\EC\ClpECCurve.pas"/>
         <UnitName Value="ClpECCurve"/>
         <UnitName Value="ClpECCurve"/>
-      </Item219>
-      <Item220>
+      </Item218>
+      <Item219>
         <Filename Value="..\..\Math\EC\ClpECFieldElement.pas"/>
         <Filename Value="..\..\Math\EC\ClpECFieldElement.pas"/>
         <UnitName Value="ClpECFieldElement"/>
         <UnitName Value="ClpECFieldElement"/>
-      </Item220>
-      <Item221>
+      </Item219>
+      <Item220>
         <Filename Value="..\..\Math\EC\ClpECPoint.pas"/>
         <Filename Value="..\..\Math\EC\ClpECPoint.pas"/>
         <UnitName Value="ClpECPoint"/>
         <UnitName Value="ClpECPoint"/>
-      </Item221>
-      <Item222>
+      </Item220>
+      <Item221>
         <Filename Value="..\..\Math\EC\ClpLongArray.pas"/>
         <Filename Value="..\..\Math\EC\ClpLongArray.pas"/>
         <UnitName Value="ClpLongArray"/>
         <UnitName Value="ClpLongArray"/>
-      </Item222>
-      <Item223>
+      </Item221>
+      <Item222>
         <Filename Value="..\..\Math\EC\ClpScaleXPointMap.pas"/>
         <Filename Value="..\..\Math\EC\ClpScaleXPointMap.pas"/>
         <UnitName Value="ClpScaleXPointMap"/>
         <UnitName Value="ClpScaleXPointMap"/>
-      </Item223>
-      <Item224>
+      </Item222>
+      <Item223>
         <Filename Value="..\..\Math\EC\Abc\ClpSimpleBigDecimal.pas"/>
         <Filename Value="..\..\Math\EC\Abc\ClpSimpleBigDecimal.pas"/>
         <UnitName Value="ClpSimpleBigDecimal"/>
         <UnitName Value="ClpSimpleBigDecimal"/>
-      </Item224>
-      <Item225>
+      </Item223>
+      <Item224>
         <Filename Value="..\..\Math\EC\Abc\ClpTnaf.pas"/>
         <Filename Value="..\..\Math\EC\Abc\ClpTnaf.pas"/>
         <UnitName Value="ClpTnaf"/>
         <UnitName Value="ClpTnaf"/>
-      </Item225>
-      <Item226>
+      </Item224>
+      <Item225>
         <Filename Value="..\..\Math\EC\Abc\ClpZTauElement.pas"/>
         <Filename Value="..\..\Math\EC\Abc\ClpZTauElement.pas"/>
         <UnitName Value="ClpZTauElement"/>
         <UnitName Value="ClpZTauElement"/>
-      </Item226>
-      <Item227>
+      </Item225>
+      <Item226>
         <Filename Value="..\..\Math\EC\Endo\ClpGlvTypeBEndomorphism.pas"/>
         <Filename Value="..\..\Math\EC\Endo\ClpGlvTypeBEndomorphism.pas"/>
         <UnitName Value="ClpGlvTypeBEndomorphism"/>
         <UnitName Value="ClpGlvTypeBEndomorphism"/>
-      </Item227>
-      <Item228>
+      </Item226>
+      <Item227>
         <Filename Value="..\..\Math\EC\Endo\ClpGlvTypeBParameters.pas"/>
         <Filename Value="..\..\Math\EC\Endo\ClpGlvTypeBParameters.pas"/>
         <UnitName Value="ClpGlvTypeBParameters"/>
         <UnitName Value="ClpGlvTypeBParameters"/>
-      </Item228>
-      <Item229>
+      </Item227>
+      <Item228>
         <Filename Value="..\..\Math\EC\Multiplier\ClpAbstractECMultiplier.pas"/>
         <Filename Value="..\..\Math\EC\Multiplier\ClpAbstractECMultiplier.pas"/>
         <UnitName Value="ClpAbstractECMultiplier"/>
         <UnitName Value="ClpAbstractECMultiplier"/>
-      </Item229>
-      <Item230>
+      </Item228>
+      <Item229>
         <Filename Value="..\..\Math\EC\Multiplier\ClpFixedPointCombMultiplier.pas"/>
         <Filename Value="..\..\Math\EC\Multiplier\ClpFixedPointCombMultiplier.pas"/>
         <UnitName Value="ClpFixedPointCombMultiplier"/>
         <UnitName Value="ClpFixedPointCombMultiplier"/>
-      </Item230>
-      <Item231>
+      </Item229>
+      <Item230>
         <Filename Value="..\..\Math\EC\Multiplier\ClpFixedPointPreCompInfo.pas"/>
         <Filename Value="..\..\Math\EC\Multiplier\ClpFixedPointPreCompInfo.pas"/>
         <UnitName Value="ClpFixedPointPreCompInfo"/>
         <UnitName Value="ClpFixedPointPreCompInfo"/>
-      </Item231>
-      <Item232>
+      </Item230>
+      <Item231>
         <Filename Value="..\..\Math\EC\Multiplier\ClpFixedPointUtilities.pas"/>
         <Filename Value="..\..\Math\EC\Multiplier\ClpFixedPointUtilities.pas"/>
         <UnitName Value="ClpFixedPointUtilities"/>
         <UnitName Value="ClpFixedPointUtilities"/>
-      </Item232>
-      <Item233>
+      </Item231>
+      <Item232>
         <Filename Value="..\..\Math\EC\Multiplier\ClpGlvMultiplier.pas"/>
         <Filename Value="..\..\Math\EC\Multiplier\ClpGlvMultiplier.pas"/>
         <UnitName Value="ClpGlvMultiplier"/>
         <UnitName Value="ClpGlvMultiplier"/>
-      </Item233>
-      <Item234>
+      </Item232>
+      <Item233>
         <Filename Value="..\..\Math\EC\Multiplier\ClpWNafL2RMultiplier.pas"/>
         <Filename Value="..\..\Math\EC\Multiplier\ClpWNafL2RMultiplier.pas"/>
         <UnitName Value="ClpWNafL2RMultiplier"/>
         <UnitName Value="ClpWNafL2RMultiplier"/>
-      </Item234>
-      <Item235>
+      </Item233>
+      <Item234>
         <Filename Value="..\..\Math\EC\Multiplier\ClpWNafPreCompInfo.pas"/>
         <Filename Value="..\..\Math\EC\Multiplier\ClpWNafPreCompInfo.pas"/>
         <UnitName Value="ClpWNafPreCompInfo"/>
         <UnitName Value="ClpWNafPreCompInfo"/>
-      </Item235>
-      <Item236>
+      </Item234>
+      <Item235>
         <Filename Value="..\..\Math\EC\Multiplier\ClpWNafUtilities.pas"/>
         <Filename Value="..\..\Math\EC\Multiplier\ClpWNafUtilities.pas"/>
         <UnitName Value="ClpWNafUtilities"/>
         <UnitName Value="ClpWNafUtilities"/>
-      </Item236>
-      <Item237>
+      </Item235>
+      <Item236>
         <Filename Value="..\..\Math\EC\Multiplier\ClpWTauNafMultiplier.pas"/>
         <Filename Value="..\..\Math\EC\Multiplier\ClpWTauNafMultiplier.pas"/>
         <UnitName Value="ClpWTauNafMultiplier"/>
         <UnitName Value="ClpWTauNafMultiplier"/>
-      </Item237>
-      <Item238>
+      </Item236>
+      <Item237>
         <Filename Value="..\..\Math\EC\Multiplier\ClpWTauNafPreCompInfo.pas"/>
         <Filename Value="..\..\Math\EC\Multiplier\ClpWTauNafPreCompInfo.pas"/>
         <UnitName Value="ClpWTauNafPreCompInfo"/>
         <UnitName Value="ClpWTauNafPreCompInfo"/>
-      </Item238>
-      <Item239>
+      </Item237>
+      <Item238>
         <Filename Value="..\..\Math\Field\ClpFiniteFields.pas"/>
         <Filename Value="..\..\Math\Field\ClpFiniteFields.pas"/>
         <UnitName Value="ClpFiniteFields"/>
         <UnitName Value="ClpFiniteFields"/>
-      </Item239>
-      <Item240>
+      </Item238>
+      <Item239>
         <Filename Value="..\..\Math\Field\ClpGenericPolynomialExtensionField.pas"/>
         <Filename Value="..\..\Math\Field\ClpGenericPolynomialExtensionField.pas"/>
         <UnitName Value="ClpGenericPolynomialExtensionField"/>
         <UnitName Value="ClpGenericPolynomialExtensionField"/>
-      </Item240>
-      <Item241>
+      </Item239>
+      <Item240>
         <Filename Value="..\..\Math\Field\ClpGF2Polynomial.pas"/>
         <Filename Value="..\..\Math\Field\ClpGF2Polynomial.pas"/>
         <UnitName Value="ClpGF2Polynomial"/>
         <UnitName Value="ClpGF2Polynomial"/>
-      </Item241>
-      <Item242>
+      </Item240>
+      <Item241>
         <Filename Value="..\..\Math\Field\ClpPrimeField.pas"/>
         <Filename Value="..\..\Math\Field\ClpPrimeField.pas"/>
         <UnitName Value="ClpPrimeField"/>
         <UnitName Value="ClpPrimeField"/>
-      </Item242>
-      <Item243>
+      </Item241>
+      <Item242>
         <Filename Value="..\..\Math\Raw\ClpMod.pas"/>
         <Filename Value="..\..\Math\Raw\ClpMod.pas"/>
         <UnitName Value="ClpMod"/>
         <UnitName Value="ClpMod"/>
-      </Item243>
-      <Item244>
+      </Item242>
+      <Item243>
         <Filename Value="..\..\Math\Raw\ClpNat.pas"/>
         <Filename Value="..\..\Math\Raw\ClpNat.pas"/>
         <UnitName Value="ClpNat"/>
         <UnitName Value="ClpNat"/>
-      </Item244>
-      <Item245>
+      </Item243>
+      <Item244>
         <Filename Value="..\..\Security\ClpDigestUtilities.pas"/>
         <Filename Value="..\..\Security\ClpDigestUtilities.pas"/>
         <UnitName Value="ClpDigestUtilities"/>
         <UnitName Value="ClpDigestUtilities"/>
-      </Item245>
-      <Item246>
+      </Item244>
+      <Item245>
         <Filename Value="..\..\Security\ClpRandom.pas"/>
         <Filename Value="..\..\Security\ClpRandom.pas"/>
         <UnitName Value="ClpRandom"/>
         <UnitName Value="ClpRandom"/>
-      </Item246>
-      <Item247>
+      </Item245>
+      <Item246>
         <Filename Value="..\..\Security\ClpSecureRandom.pas"/>
         <Filename Value="..\..\Security\ClpSecureRandom.pas"/>
         <UnitName Value="ClpSecureRandom"/>
         <UnitName Value="ClpSecureRandom"/>
-      </Item247>
-      <Item248>
+      </Item246>
+      <Item247>
         <Filename Value="..\..\Security\ClpSignerUtilities.pas"/>
         <Filename Value="..\..\Security\ClpSignerUtilities.pas"/>
         <UnitName Value="ClpSignerUtilities"/>
         <UnitName Value="ClpSignerUtilities"/>
-      </Item248>
-      <Item249>
+      </Item247>
+      <Item248>
         <Filename Value="..\..\Utils\ClpArrayUtils.pas"/>
         <Filename Value="..\..\Utils\ClpArrayUtils.pas"/>
         <UnitName Value="ClpArrayUtils"/>
         <UnitName Value="ClpArrayUtils"/>
-      </Item249>
-      <Item250>
+      </Item248>
+      <Item249>
         <Filename Value="..\..\Utils\ClpBigIntegers.pas"/>
         <Filename Value="..\..\Utils\ClpBigIntegers.pas"/>
         <UnitName Value="ClpBigIntegers"/>
         <UnitName Value="ClpBigIntegers"/>
-      </Item250>
-      <Item251>
+      </Item249>
+      <Item250>
         <Filename Value="..\..\Utils\ClpBitConverter.pas"/>
         <Filename Value="..\..\Utils\ClpBitConverter.pas"/>
         <UnitName Value="ClpBitConverter"/>
         <UnitName Value="ClpBitConverter"/>
-      </Item251>
-      <Item252>
+      </Item250>
+      <Item251>
         <Filename Value="..\..\Utils\ClpBits.pas"/>
         <Filename Value="..\..\Utils\ClpBits.pas"/>
         <UnitName Value="ClpBits"/>
         <UnitName Value="ClpBits"/>
-      </Item252>
-      <Item253>
+      </Item251>
+      <Item252>
         <Filename Value="..\..\Utils\ClpConverters.pas"/>
         <Filename Value="..\..\Utils\ClpConverters.pas"/>
         <UnitName Value="ClpConverters"/>
         <UnitName Value="ClpConverters"/>
-      </Item253>
-      <Item254>
+      </Item252>
+      <Item253>
         <Filename Value="..\..\Utils\ClpCryptoLibTypes.pas"/>
         <Filename Value="..\..\Utils\ClpCryptoLibTypes.pas"/>
         <UnitName Value="ClpCryptoLibTypes"/>
         <UnitName Value="ClpCryptoLibTypes"/>
-      </Item254>
-      <Item255>
+      </Item253>
+      <Item254>
         <Filename Value="..\..\Utils\ClpStreamSorter.pas"/>
         <Filename Value="..\..\Utils\ClpStreamSorter.pas"/>
         <UnitName Value="ClpStreamSorter"/>
         <UnitName Value="ClpStreamSorter"/>
-      </Item255>
-      <Item256>
+      </Item254>
+      <Item255>
         <Filename Value="..\..\Utils\ClpTimes.pas"/>
         <Filename Value="..\..\Utils\ClpTimes.pas"/>
         <UnitName Value="ClpTimes"/>
         <UnitName Value="ClpTimes"/>
-      </Item256>
-      <Item257>
+      </Item255>
+      <Item256>
         <Filename Value="..\..\Utils\Collections\ClpCollectionUtilities.pas"/>
         <Filename Value="..\..\Utils\Collections\ClpCollectionUtilities.pas"/>
         <UnitName Value="ClpCollectionUtilities"/>
         <UnitName Value="ClpCollectionUtilities"/>
-      </Item257>
-      <Item258>
+      </Item256>
+      <Item257>
         <Filename Value="..\..\Utils\Encoders\ClpBase64.pas"/>
         <Filename Value="..\..\Utils\Encoders\ClpBase64.pas"/>
         <UnitName Value="ClpBase64"/>
         <UnitName Value="ClpBase64"/>
-      </Item258>
-      <Item259>
+      </Item257>
+      <Item258>
         <Filename Value="..\..\Utils\Encoders\ClpHex.pas"/>
         <Filename Value="..\..\Utils\Encoders\ClpHex.pas"/>
         <UnitName Value="ClpHex"/>
         <UnitName Value="ClpHex"/>
-      </Item259>
-      <Item260>
+      </Item258>
+      <Item259>
         <Filename Value="..\..\Utils\Helpers\ClpStreamHelper.pas"/>
         <Filename Value="..\..\Utils\Helpers\ClpStreamHelper.pas"/>
         <UnitName Value="ClpStreamHelper"/>
         <UnitName Value="ClpStreamHelper"/>
-      </Item260>
-      <Item261>
+      </Item259>
+      <Item260>
         <Filename Value="..\..\Utils\IO\ClpBaseInputStream.pas"/>
         <Filename Value="..\..\Utils\IO\ClpBaseInputStream.pas"/>
         <UnitName Value="ClpBaseInputStream"/>
         <UnitName Value="ClpBaseInputStream"/>
-      </Item261>
-      <Item262>
+      </Item260>
+      <Item261>
         <Filename Value="..\..\Utils\IO\ClpFilterStream.pas"/>
         <Filename Value="..\..\Utils\IO\ClpFilterStream.pas"/>
         <UnitName Value="ClpFilterStream"/>
         <UnitName Value="ClpFilterStream"/>
-      </Item262>
-      <Item263>
+      </Item261>
+      <Item262>
         <Filename Value="..\..\Utils\IO\ClpStreams.pas"/>
         <Filename Value="..\..\Utils\IO\ClpStreams.pas"/>
         <UnitName Value="ClpStreams"/>
         <UnitName Value="ClpStreams"/>
-      </Item263>
-      <Item264>
+      </Item262>
+      <Item263>
         <Filename Value="..\..\Utils\Randoms\ClpOSRandom.pas"/>
         <Filename Value="..\..\Utils\Randoms\ClpOSRandom.pas"/>
         <UnitName Value="ClpOSRandom"/>
         <UnitName Value="ClpOSRandom"/>
-      </Item264>
-      <Item265>
+      </Item263>
+      <Item264>
         <Filename Value="..\..\Utils\Randoms\ClpPcgRandomMinimal.pas"/>
         <Filename Value="..\..\Utils\Randoms\ClpPcgRandomMinimal.pas"/>
         <UnitName Value="ClpPcgRandomMinimal"/>
         <UnitName Value="ClpPcgRandomMinimal"/>
-      </Item265>
-      <Item266>
+      </Item264>
+      <Item265>
         <Filename Value="..\..\Utils\Rng\ClpOSRandomNumberGenerator.pas"/>
         <Filename Value="..\..\Utils\Rng\ClpOSRandomNumberGenerator.pas"/>
         <UnitName Value="ClpOSRandomNumberGenerator"/>
         <UnitName Value="ClpOSRandomNumberGenerator"/>
-      </Item266>
-      <Item267>
+      </Item265>
+      <Item266>
         <Filename Value="..\..\Utils\Rng\ClpPCGRandomNumberGenerator.pas"/>
         <Filename Value="..\..\Utils\Rng\ClpPCGRandomNumberGenerator.pas"/>
         <UnitName Value="ClpPCGRandomNumberGenerator"/>
         <UnitName Value="ClpPCGRandomNumberGenerator"/>
-      </Item267>
-      <Item268>
+      </Item266>
+      <Item267>
         <Filename Value="..\..\Utils\Rng\ClpRandomNumberGenerator.pas"/>
         <Filename Value="..\..\Utils\Rng\ClpRandomNumberGenerator.pas"/>
         <UnitName Value="ClpRandomNumberGenerator"/>
         <UnitName Value="ClpRandomNumberGenerator"/>
-      </Item268>
-      <Item269>
+      </Item267>
+      <Item268>
         <Filename Value="..\..\Utils\ClpSetWeakRef.pas"/>
         <Filename Value="..\..\Utils\ClpSetWeakRef.pas"/>
         <UnitName Value="ClpSetWeakRef"/>
         <UnitName Value="ClpSetWeakRef"/>
-      </Item269>
-      <Item270>
+      </Item268>
+      <Item269>
         <Filename Value="..\..\Asn1\ClpDefiniteLengthInputStream.pas"/>
         <Filename Value="..\..\Asn1\ClpDefiniteLengthInputStream.pas"/>
         <UnitName Value="ClpDefiniteLengthInputStream"/>
         <UnitName Value="ClpDefiniteLengthInputStream"/>
-      </Item270>
-      <Item271>
+      </Item269>
+      <Item270>
         <Filename Value="..\..\Security\ClpParameterUtilities.pas"/>
         <Filename Value="..\..\Security\ClpParameterUtilities.pas"/>
         <UnitName Value="ClpParameterUtilities"/>
         <UnitName Value="ClpParameterUtilities"/>
-      </Item271>
-      <Item272>
+      </Item270>
+      <Item271>
         <Filename Value="..\..\Security\ClpGeneratorUtilities.pas"/>
         <Filename Value="..\..\Security\ClpGeneratorUtilities.pas"/>
         <UnitName Value="ClpGeneratorUtilities"/>
         <UnitName Value="ClpGeneratorUtilities"/>
-      </Item272>
-      <Item273>
+      </Item271>
+      <Item272>
         <Filename Value="..\..\Security\ClpCipherUtilities.pas"/>
         <Filename Value="..\..\Security\ClpCipherUtilities.pas"/>
         <UnitName Value="ClpCipherUtilities"/>
         <UnitName Value="ClpCipherUtilities"/>
-      </Item273>
-      <Item274>
+      </Item272>
+      <Item273>
         <Filename Value="..\..\Interfaces\ClpIAesEngine.pas"/>
         <Filename Value="..\..\Interfaces\ClpIAesEngine.pas"/>
         <UnitName Value="ClpIAesEngine"/>
         <UnitName Value="ClpIAesEngine"/>
-      </Item274>
-      <Item275>
+      </Item273>
+      <Item274>
         <Filename Value="..\..\Interfaces\ClpIPkcs7Padding.pas"/>
         <Filename Value="..\..\Interfaces\ClpIPkcs7Padding.pas"/>
         <UnitName Value="ClpIPkcs7Padding"/>
         <UnitName Value="ClpIPkcs7Padding"/>
-      </Item275>
-      <Item276>
+      </Item274>
+      <Item275>
         <Filename Value="..\..\Interfaces\ClpIParametersWithIV.pas"/>
         <Filename Value="..\..\Interfaces\ClpIParametersWithIV.pas"/>
         <UnitName Value="ClpIParametersWithIV"/>
         <UnitName Value="ClpIParametersWithIV"/>
-      </Item276>
-      <Item277>
+      </Item275>
+      <Item276>
         <Filename Value="..\..\Interfaces\ClpIPaddedBufferedBlockCipher.pas"/>
         <Filename Value="..\..\Interfaces\ClpIPaddedBufferedBlockCipher.pas"/>
         <UnitName Value="ClpIPaddedBufferedBlockCipher"/>
         <UnitName Value="ClpIPaddedBufferedBlockCipher"/>
-      </Item277>
-      <Item278>
+      </Item276>
+      <Item277>
         <Filename Value="..\..\Interfaces\ClpIKeyParameter.pas"/>
         <Filename Value="..\..\Interfaces\ClpIKeyParameter.pas"/>
         <UnitName Value="ClpIKeyParameter"/>
         <UnitName Value="ClpIKeyParameter"/>
-      </Item278>
-      <Item279>
+      </Item277>
+      <Item278>
         <Filename Value="..\..\Interfaces\ClpICbcBlockCipher.pas"/>
         <Filename Value="..\..\Interfaces\ClpICbcBlockCipher.pas"/>
         <UnitName Value="ClpICbcBlockCipher"/>
         <UnitName Value="ClpICbcBlockCipher"/>
-      </Item279>
-      <Item280>
+      </Item278>
+      <Item279>
         <Filename Value="..\..\Interfaces\ClpIBufferedCipherBase.pas"/>
         <Filename Value="..\..\Interfaces\ClpIBufferedCipherBase.pas"/>
         <UnitName Value="ClpIBufferedCipherBase"/>
         <UnitName Value="ClpIBufferedCipherBase"/>
-      </Item280>
-      <Item281>
+      </Item279>
+      <Item280>
         <Filename Value="..\..\Interfaces\ClpIBufferedCipher.pas"/>
         <Filename Value="..\..\Interfaces\ClpIBufferedCipher.pas"/>
         <UnitName Value="ClpIBufferedCipher"/>
         <UnitName Value="ClpIBufferedCipher"/>
-      </Item281>
-      <Item282>
+      </Item280>
+      <Item281>
         <Filename Value="..\..\Interfaces\ClpIBufferedBlockCipher.pas"/>
         <Filename Value="..\..\Interfaces\ClpIBufferedBlockCipher.pas"/>
         <UnitName Value="ClpIBufferedBlockCipher"/>
         <UnitName Value="ClpIBufferedBlockCipher"/>
-      </Item282>
-      <Item283>
+      </Item281>
+      <Item282>
         <Filename Value="..\..\Interfaces\ClpIBlockCipherPadding.pas"/>
         <Filename Value="..\..\Interfaces\ClpIBlockCipherPadding.pas"/>
         <UnitName Value="ClpIBlockCipherPadding"/>
         <UnitName Value="ClpIBlockCipherPadding"/>
-      </Item283>
-      <Item284>
+      </Item282>
+      <Item283>
         <Filename Value="..\..\Interfaces\ClpIBlockCipher.pas"/>
         <Filename Value="..\..\Interfaces\ClpIBlockCipher.pas"/>
         <UnitName Value="ClpIBlockCipher"/>
         <UnitName Value="ClpIBlockCipher"/>
-      </Item284>
-      <Item285>
+      </Item283>
+      <Item284>
         <Filename Value="..\..\Crypto\Modes\ClpCbcBlockCipher.pas"/>
         <Filename Value="..\..\Crypto\Modes\ClpCbcBlockCipher.pas"/>
         <UnitName Value="ClpCbcBlockCipher"/>
         <UnitName Value="ClpCbcBlockCipher"/>
-      </Item285>
-      <Item286>
+      </Item284>
+      <Item285>
         <Filename Value="..\..\Crypto\Paddings\ClpPaddedBufferedBlockCipher.pas"/>
         <Filename Value="..\..\Crypto\Paddings\ClpPaddedBufferedBlockCipher.pas"/>
         <UnitName Value="ClpPaddedBufferedBlockCipher"/>
         <UnitName Value="ClpPaddedBufferedBlockCipher"/>
-      </Item286>
-      <Item287>
+      </Item285>
+      <Item286>
         <Filename Value="..\..\Crypto\Paddings\ClpPkcs7Padding.pas"/>
         <Filename Value="..\..\Crypto\Paddings\ClpPkcs7Padding.pas"/>
         <UnitName Value="ClpPkcs7Padding"/>
         <UnitName Value="ClpPkcs7Padding"/>
-      </Item287>
-      <Item288>
+      </Item286>
+      <Item287>
         <Filename Value="..\..\Crypto\Parameters\ClpParametersWithIV.pas"/>
         <Filename Value="..\..\Crypto\Parameters\ClpParametersWithIV.pas"/>
         <UnitName Value="ClpParametersWithIV"/>
         <UnitName Value="ClpParametersWithIV"/>
-      </Item288>
-      <Item289>
+      </Item287>
+      <Item288>
         <Filename Value="..\..\Crypto\Parameters\ClpKeyParameter.pas"/>
         <Filename Value="..\..\Crypto\Parameters\ClpKeyParameter.pas"/>
         <UnitName Value="ClpKeyParameter"/>
         <UnitName Value="ClpKeyParameter"/>
-      </Item289>
-      <Item290>
+      </Item288>
+      <Item289>
         <Filename Value="..\..\Crypto\ClpBufferedBlockCipher.pas"/>
         <Filename Value="..\..\Crypto\ClpBufferedBlockCipher.pas"/>
         <UnitName Value="ClpBufferedBlockCipher"/>
         <UnitName Value="ClpBufferedBlockCipher"/>
-      </Item290>
-      <Item291>
+      </Item289>
+      <Item290>
         <Filename Value="..\..\Crypto\ClpBufferedCipherBase.pas"/>
         <Filename Value="..\..\Crypto\ClpBufferedCipherBase.pas"/>
         <UnitName Value="ClpBufferedCipherBase"/>
         <UnitName Value="ClpBufferedCipherBase"/>
-      </Item291>
-      <Item292>
+      </Item290>
+      <Item291>
         <Filename Value="..\..\Utils\ClpCheck.pas"/>
         <Filename Value="..\..\Utils\ClpCheck.pas"/>
         <UnitName Value="ClpCheck"/>
         <UnitName Value="ClpCheck"/>
-      </Item292>
-      <Item293>
+      </Item291>
+      <Item292>
         <Filename Value="..\..\Crypto\Engines\ClpAesEngine.pas"/>
         <Filename Value="..\..\Crypto\Engines\ClpAesEngine.pas"/>
         <UnitName Value="ClpAesEngine"/>
         <UnitName Value="ClpAesEngine"/>
-      </Item293>
-      <Item294>
+      </Item292>
+      <Item293>
         <Filename Value="..\..\Crypto\Generators\ClpPascalCoinECIESKdfBytesGenerator.pas"/>
         <Filename Value="..\..\Crypto\Generators\ClpPascalCoinECIESKdfBytesGenerator.pas"/>
         <UnitName Value="ClpPascalCoinECIESKdfBytesGenerator"/>
         <UnitName Value="ClpPascalCoinECIESKdfBytesGenerator"/>
-      </Item294>
-      <Item295>
+      </Item293>
+      <Item294>
         <Filename Value="..\..\Crypto\Engines\ClpPascalCoinIESEngine.pas"/>
         <Filename Value="..\..\Crypto\Engines\ClpPascalCoinIESEngine.pas"/>
         <UnitName Value="ClpPascalCoinIESEngine"/>
         <UnitName Value="ClpPascalCoinIESEngine"/>
-      </Item295>
-      <Item296>
+      </Item294>
+      <Item295>
         <Filename Value="..\..\Crypto\Generators\ClpBaseKdfBytesGenerator.pas"/>
         <Filename Value="..\..\Crypto\Generators\ClpBaseKdfBytesGenerator.pas"/>
         <UnitName Value="ClpBaseKdfBytesGenerator"/>
         <UnitName Value="ClpBaseKdfBytesGenerator"/>
-      </Item296>
-      <Item297>
+      </Item295>
+      <Item296>
         <Filename Value="..\..\Crypto\Engines\ClpIESEngine.pas"/>
         <Filename Value="..\..\Crypto\Engines\ClpIESEngine.pas"/>
         <UnitName Value="ClpIESEngine"/>
         <UnitName Value="ClpIESEngine"/>
-      </Item297>
-      <Item298>
+      </Item296>
+      <Item297>
         <Filename Value="..\..\Crypto\Parsers\ClpECIESPublicKeyParser.pas"/>
         <Filename Value="..\..\Crypto\Parsers\ClpECIESPublicKeyParser.pas"/>
         <UnitName Value="ClpECIESPublicKeyParser"/>
         <UnitName Value="ClpECIESPublicKeyParser"/>
-      </Item298>
-      <Item299>
+      </Item297>
+      <Item298>
         <Filename Value="..\..\Crypto\ClpIESCipher.pas"/>
         <Filename Value="..\..\Crypto\ClpIESCipher.pas"/>
         <UnitName Value="ClpIESCipher"/>
         <UnitName Value="ClpIESCipher"/>
-      </Item299>
-      <Item300>
+      </Item298>
+      <Item299>
         <Filename Value="..\..\Crypto\Agreement\ClpECDHBasicAgreement.pas"/>
         <Filename Value="..\..\Crypto\Agreement\ClpECDHBasicAgreement.pas"/>
         <UnitName Value="ClpECDHBasicAgreement"/>
         <UnitName Value="ClpECDHBasicAgreement"/>
-      </Item300>
-      <Item301>
+      </Item299>
+      <Item300>
         <Filename Value="..\..\Crypto\ClpEphemeralKeyPair.pas"/>
         <Filename Value="..\..\Crypto\ClpEphemeralKeyPair.pas"/>
         <UnitName Value="ClpEphemeralKeyPair"/>
         <UnitName Value="ClpEphemeralKeyPair"/>
-      </Item301>
-      <Item302>
+      </Item300>
+      <Item301>
         <Filename Value="..\..\Crypto\ClpKeyEncoder.pas"/>
         <Filename Value="..\..\Crypto\ClpKeyEncoder.pas"/>
         <UnitName Value="ClpKeyEncoder"/>
         <UnitName Value="ClpKeyEncoder"/>
-      </Item302>
-      <Item303>
+      </Item301>
+      <Item302>
         <Filename Value="..\..\Crypto\Paddings\ClpZeroBytePadding.pas"/>
         <Filename Value="..\..\Crypto\Paddings\ClpZeroBytePadding.pas"/>
         <UnitName Value="ClpZeroBytePadding"/>
         <UnitName Value="ClpZeroBytePadding"/>
-      </Item303>
-      <Item304>
+      </Item302>
+      <Item303>
         <Filename Value="..\..\Crypto\Parameters\ClpIESWithCipherParameters.pas"/>
         <Filename Value="..\..\Crypto\Parameters\ClpIESWithCipherParameters.pas"/>
         <UnitName Value="ClpIESWithCipherParameters"/>
         <UnitName Value="ClpIESWithCipherParameters"/>
-      </Item304>
-      <Item305>
+      </Item303>
+      <Item304>
         <Filename Value="..\..\Crypto\Parameters\ClpIESParameters.pas"/>
         <Filename Value="..\..\Crypto\Parameters\ClpIESParameters.pas"/>
         <UnitName Value="ClpIESParameters"/>
         <UnitName Value="ClpIESParameters"/>
-      </Item305>
-      <Item306>
+      </Item304>
+      <Item305>
         <Filename Value="..\..\Crypto\Generators\ClpEphemeralKeyPairGenerator.pas"/>
         <Filename Value="..\..\Crypto\Generators\ClpEphemeralKeyPairGenerator.pas"/>
         <UnitName Value="ClpEphemeralKeyPairGenerator"/>
         <UnitName Value="ClpEphemeralKeyPairGenerator"/>
-      </Item306>
-      <Item307>
+      </Item305>
+      <Item306>
         <Filename Value="..\..\Crypto\Generators\ClpKdf2BytesGenerator.pas"/>
         <Filename Value="..\..\Crypto\Generators\ClpKdf2BytesGenerator.pas"/>
         <UnitName Value="ClpKdf2BytesGenerator"/>
         <UnitName Value="ClpKdf2BytesGenerator"/>
-      </Item307>
-      <Item308>
+      </Item306>
+      <Item307>
         <Filename Value="..\..\Crypto\Parameters\ClpIso18033KdfParameters.pas"/>
         <Filename Value="..\..\Crypto\Parameters\ClpIso18033KdfParameters.pas"/>
         <UnitName Value="ClpIso18033KdfParameters"/>
         <UnitName Value="ClpIso18033KdfParameters"/>
-      </Item308>
-      <Item309>
+      </Item307>
+      <Item308>
         <Filename Value="..\..\Crypto\Parameters\ClpKdfParameters.pas"/>
         <Filename Value="..\..\Crypto\Parameters\ClpKdfParameters.pas"/>
         <UnitName Value="ClpKdfParameters"/>
         <UnitName Value="ClpKdfParameters"/>
-      </Item309>
-      <Item310>
+      </Item308>
+      <Item309>
         <Filename Value="..\..\Interfaces\ClpIIESWithCipherParameters.pas"/>
         <Filename Value="..\..\Interfaces\ClpIIESWithCipherParameters.pas"/>
         <UnitName Value="ClpIIESWithCipherParameters"/>
         <UnitName Value="ClpIIESWithCipherParameters"/>
-      </Item310>
-      <Item311>
+      </Item309>
+      <Item310>
         <Filename Value="..\..\Interfaces\ClpIIESParameters.pas"/>
         <Filename Value="..\..\Interfaces\ClpIIESParameters.pas"/>
         <UnitName Value="ClpIIESParameters"/>
         <UnitName Value="ClpIIESParameters"/>
-      </Item311>
-      <Item312>
+      </Item310>
+      <Item311>
         <Filename Value="..\..\Interfaces\ClpIPascalCoinECIESKdfBytesGenerator.pas"/>
         <Filename Value="..\..\Interfaces\ClpIPascalCoinECIESKdfBytesGenerator.pas"/>
         <UnitName Value="ClpIPascalCoinECIESKdfBytesGenerator"/>
         <UnitName Value="ClpIPascalCoinECIESKdfBytesGenerator"/>
-      </Item312>
-      <Item313>
+      </Item311>
+      <Item312>
         <Filename Value="..\..\Interfaces\ClpIPascalCoinIESEngine.pas"/>
         <Filename Value="..\..\Interfaces\ClpIPascalCoinIESEngine.pas"/>
         <UnitName Value="ClpIPascalCoinIESEngine"/>
         <UnitName Value="ClpIPascalCoinIESEngine"/>
-      </Item313>
-      <Item314>
+      </Item312>
+      <Item313>
         <Filename Value="..\..\Interfaces\ClpIIESEngine.pas"/>
         <Filename Value="..\..\Interfaces\ClpIIESEngine.pas"/>
         <UnitName Value="ClpIIESEngine"/>
         <UnitName Value="ClpIIESEngine"/>
-      </Item314>
-      <Item315>
+      </Item313>
+      <Item314>
         <Filename Value="..\..\Interfaces\ClpIIESCipher.pas"/>
         <Filename Value="..\..\Interfaces\ClpIIESCipher.pas"/>
         <UnitName Value="ClpIIESCipher"/>
         <UnitName Value="ClpIIESCipher"/>
-      </Item315>
-      <Item316>
+      </Item314>
+      <Item315>
         <Filename Value="..\..\Interfaces\ClpIZeroBytePadding.pas"/>
         <Filename Value="..\..\Interfaces\ClpIZeroBytePadding.pas"/>
         <UnitName Value="ClpIZeroBytePadding"/>
         <UnitName Value="ClpIZeroBytePadding"/>
-      </Item316>
-      <Item317>
+      </Item315>
+      <Item316>
         <Filename Value="..\..\Interfaces\ClpIECIESPublicKeyParser.pas"/>
         <Filename Value="..\..\Interfaces\ClpIECIESPublicKeyParser.pas"/>
         <UnitName Value="ClpIECIESPublicKeyParser"/>
         <UnitName Value="ClpIECIESPublicKeyParser"/>
-      </Item317>
-      <Item318>
+      </Item316>
+      <Item317>
         <Filename Value="..\..\Interfaces\ClpIEphemeralKeyPairGenerator.pas"/>
         <Filename Value="..\..\Interfaces\ClpIEphemeralKeyPairGenerator.pas"/>
         <UnitName Value="ClpIEphemeralKeyPairGenerator"/>
         <UnitName Value="ClpIEphemeralKeyPairGenerator"/>
-      </Item318>
-      <Item319>
+      </Item317>
+      <Item318>
         <Filename Value="..\..\Interfaces\ClpIEphemeralKeyPair.pas"/>
         <Filename Value="..\..\Interfaces\ClpIEphemeralKeyPair.pas"/>
         <UnitName Value="ClpIEphemeralKeyPair"/>
         <UnitName Value="ClpIEphemeralKeyPair"/>
-      </Item319>
-      <Item320>
+      </Item318>
+      <Item319>
         <Filename Value="..\..\Interfaces\ClpIKeyParser.pas"/>
         <Filename Value="..\..\Interfaces\ClpIKeyParser.pas"/>
         <UnitName Value="ClpIKeyParser"/>
         <UnitName Value="ClpIKeyParser"/>
-      </Item320>
-      <Item321>
+      </Item319>
+      <Item320>
         <Filename Value="..\..\Interfaces\ClpIKdf2BytesGenerator.pas"/>
         <Filename Value="..\..\Interfaces\ClpIKdf2BytesGenerator.pas"/>
         <UnitName Value="ClpIKdf2BytesGenerator"/>
         <UnitName Value="ClpIKdf2BytesGenerator"/>
-      </Item321>
-      <Item322>
+      </Item320>
+      <Item321>
         <Filename Value="..\..\Interfaces\ClpIBaseKdfBytesGenerator.pas"/>
         <Filename Value="..\..\Interfaces\ClpIBaseKdfBytesGenerator.pas"/>
         <UnitName Value="ClpIBaseKdfBytesGenerator"/>
         <UnitName Value="ClpIBaseKdfBytesGenerator"/>
-      </Item322>
-      <Item323>
+      </Item321>
+      <Item322>
         <Filename Value="..\..\Interfaces\ClpIIso18033KdfParameters.pas"/>
         <Filename Value="..\..\Interfaces\ClpIIso18033KdfParameters.pas"/>
         <UnitName Value="ClpIIso18033KdfParameters"/>
         <UnitName Value="ClpIIso18033KdfParameters"/>
-      </Item323>
-      <Item324>
+      </Item322>
+      <Item323>
         <Filename Value="..\..\Interfaces\ClpIKdfParameters.pas"/>
         <Filename Value="..\..\Interfaces\ClpIKdfParameters.pas"/>
         <UnitName Value="ClpIKdfParameters"/>
         <UnitName Value="ClpIKdfParameters"/>
-      </Item324>
-      <Item325>
+      </Item323>
+      <Item324>
         <Filename Value="..\..\Interfaces\ClpIDerivationFunction.pas"/>
         <Filename Value="..\..\Interfaces\ClpIDerivationFunction.pas"/>
         <UnitName Value="ClpIDerivationFunction"/>
         <UnitName Value="ClpIDerivationFunction"/>
-      </Item325>
-      <Item326>
+      </Item324>
+      <Item325>
         <Filename Value="..\..\Interfaces\ClpIDerivationParameters.pas"/>
         <Filename Value="..\..\Interfaces\ClpIDerivationParameters.pas"/>
         <UnitName Value="ClpIDerivationParameters"/>
         <UnitName Value="ClpIDerivationParameters"/>
-      </Item326>
-      <Item327>
+      </Item325>
+      <Item326>
         <Filename Value="..\..\Interfaces\ClpIECDHBasicAgreement.pas"/>
         <Filename Value="..\..\Interfaces\ClpIECDHBasicAgreement.pas"/>
         <UnitName Value="ClpIECDHBasicAgreement"/>
         <UnitName Value="ClpIECDHBasicAgreement"/>
-      </Item327>
-      <Item328>
+      </Item326>
+      <Item327>
         <Filename Value="..\..\Interfaces\ClpIBasicAgreement.pas"/>
         <Filename Value="..\..\Interfaces\ClpIBasicAgreement.pas"/>
         <UnitName Value="ClpIBasicAgreement"/>
         <UnitName Value="ClpIBasicAgreement"/>
-      </Item328>
-      <Item329>
+      </Item327>
+      <Item328>
         <Filename Value="..\..\Crypto\Modes\ClpSicBlockCipher.pas"/>
         <Filename Value="..\..\Crypto\Modes\ClpSicBlockCipher.pas"/>
         <UnitName Value="ClpSicBlockCipher"/>
         <UnitName Value="ClpSicBlockCipher"/>
-      </Item329>
-      <Item330>
+      </Item328>
+      <Item329>
         <Filename Value="..\..\Crypto\Modes\ClpCfbBlockCipher.pas"/>
         <Filename Value="..\..\Crypto\Modes\ClpCfbBlockCipher.pas"/>
         <UnitName Value="ClpCfbBlockCipher"/>
         <UnitName Value="ClpCfbBlockCipher"/>
-      </Item330>
-      <Item331>
+      </Item329>
+      <Item330>
         <Filename Value="..\..\Crypto\Generators\ClpCipherKeyGenerator.pas"/>
         <Filename Value="..\..\Crypto\Generators\ClpCipherKeyGenerator.pas"/>
         <UnitName Value="ClpCipherKeyGenerator"/>
         <UnitName Value="ClpCipherKeyGenerator"/>
-      </Item331>
-      <Item332>
+      </Item330>
+      <Item331>
         <Filename Value="..\..\Utils\ClpStringUtils.pas"/>
         <Filename Value="..\..\Utils\ClpStringUtils.pas"/>
         <UnitName Value="ClpStringUtils"/>
         <UnitName Value="ClpStringUtils"/>
-      </Item332>
-      <Item333>
+      </Item331>
+      <Item332>
         <Filename Value="..\..\Interfaces\ClpICipherKeyGenerator.pas"/>
         <Filename Value="..\..\Interfaces\ClpICipherKeyGenerator.pas"/>
         <UnitName Value="ClpICipherKeyGenerator"/>
         <UnitName Value="ClpICipherKeyGenerator"/>
-      </Item333>
-      <Item334>
+      </Item332>
+      <Item333>
         <Filename Value="..\..\Interfaces\ClpIDigest.pas"/>
         <Filename Value="..\..\Interfaces\ClpIDigest.pas"/>
         <UnitName Value="ClpIDigest"/>
         <UnitName Value="ClpIDigest"/>
-      </Item334>
-      <Item335>
+      </Item333>
+      <Item334>
         <Filename Value="..\..\Interfaces\ClpISicBlockCipher.pas"/>
         <Filename Value="..\..\Interfaces\ClpISicBlockCipher.pas"/>
         <UnitName Value="ClpISicBlockCipher"/>
         <UnitName Value="ClpISicBlockCipher"/>
-      </Item335>
-      <Item336>
+      </Item334>
+      <Item335>
         <Filename Value="..\..\Interfaces\ClpIStreamCipher.pas"/>
         <Filename Value="..\..\Interfaces\ClpIStreamCipher.pas"/>
         <UnitName Value="ClpIStreamCipher"/>
         <UnitName Value="ClpIStreamCipher"/>
-      </Item336>
-      <Item337>
+      </Item335>
+      <Item336>
         <Filename Value="..\..\Crypto\Modes\ClpOfbBlockCipher.pas"/>
         <Filename Value="..\..\Crypto\Modes\ClpOfbBlockCipher.pas"/>
         <UnitName Value="ClpOfbBlockCipher"/>
         <UnitName Value="ClpOfbBlockCipher"/>
-      </Item337>
-      <Item338>
+      </Item336>
+      <Item337>
         <Filename Value="..\..\Interfaces\ClpIOfbBlockCipher.pas"/>
         <Filename Value="..\..\Interfaces\ClpIOfbBlockCipher.pas"/>
         <UnitName Value="ClpIOfbBlockCipher"/>
         <UnitName Value="ClpIOfbBlockCipher"/>
-      </Item338>
-      <Item339>
+      </Item337>
+      <Item338>
         <Filename Value="..\..\Interfaces\ClpICfbBlockCipher.pas"/>
         <Filename Value="..\..\Interfaces\ClpICfbBlockCipher.pas"/>
         <UnitName Value="ClpICfbBlockCipher"/>
         <UnitName Value="ClpICfbBlockCipher"/>
-      </Item339>
-      <Item340>
+      </Item338>
+      <Item339>
         <Filename Value="..\..\Crypto\Paddings\ClpX923Padding.pas"/>
         <Filename Value="..\..\Crypto\Paddings\ClpX923Padding.pas"/>
         <UnitName Value="ClpX923Padding"/>
         <UnitName Value="ClpX923Padding"/>
-      </Item340>
-      <Item341>
+      </Item339>
+      <Item340>
         <Filename Value="..\..\Interfaces\ClpIX923Padding.pas"/>
         <Filename Value="..\..\Interfaces\ClpIX923Padding.pas"/>
         <UnitName Value="ClpIX923Padding"/>
         <UnitName Value="ClpIX923Padding"/>
-      </Item341>
-      <Item342>
+      </Item340>
+      <Item341>
         <Filename Value="..\..\Crypto\Paddings\ClpTTBCPadding.pas"/>
         <Filename Value="..\..\Crypto\Paddings\ClpTTBCPadding.pas"/>
         <UnitName Value="ClpTTBCPadding"/>
         <UnitName Value="ClpTTBCPadding"/>
-      </Item342>
-      <Item343>
+      </Item341>
+      <Item342>
         <Filename Value="..\..\Crypto\Paddings\ClpISO7816d4Padding.pas"/>
         <Filename Value="..\..\Crypto\Paddings\ClpISO7816d4Padding.pas"/>
         <UnitName Value="ClpISO7816d4Padding"/>
         <UnitName Value="ClpISO7816d4Padding"/>
-      </Item343>
-      <Item344>
+      </Item342>
+      <Item343>
         <Filename Value="..\..\Interfaces\ClpITBCPadding.pas"/>
         <Filename Value="..\..\Interfaces\ClpITBCPadding.pas"/>
         <UnitName Value="ClpITBCPadding"/>
         <UnitName Value="ClpITBCPadding"/>
-      </Item344>
-      <Item345>
+      </Item343>
+      <Item344>
         <Filename Value="..\..\Interfaces\ClpIISO7816d4Padding.pas"/>
         <Filename Value="..\..\Interfaces\ClpIISO7816d4Padding.pas"/>
         <UnitName Value="ClpIISO7816d4Padding"/>
         <UnitName Value="ClpIISO7816d4Padding"/>
-      </Item345>
-      <Item346>
+      </Item344>
+      <Item345>
         <Filename Value="..\..\Crypto\Paddings\ClpISO10126d2Padding.pas"/>
         <Filename Value="..\..\Crypto\Paddings\ClpISO10126d2Padding.pas"/>
         <UnitName Value="ClpISO10126d2Padding"/>
         <UnitName Value="ClpISO10126d2Padding"/>
-      </Item346>
-      <Item347>
+      </Item345>
+      <Item346>
         <Filename Value="..\..\Interfaces\ClpIISO10126d2Padding.pas"/>
         <Filename Value="..\..\Interfaces\ClpIISO10126d2Padding.pas"/>
         <UnitName Value="ClpIISO10126d2Padding"/>
         <UnitName Value="ClpIISO10126d2Padding"/>
-      </Item347>
-      <Item348>
+      </Item346>
+      <Item347>
         <Filename Value="CryptoLib4PascalPackage.pas"/>
         <Filename Value="CryptoLib4PascalPackage.pas"/>
         <AddToUsesPkgSection Value="False"/>
         <AddToUsesPkgSection Value="False"/>
         <UnitName Value="CryptoLib4PascalPackage"/>
         <UnitName Value="CryptoLib4PascalPackage"/>
-      </Item348>
-      <Item349>
+      </Item347>
+      <Item348>
         <Filename Value="..\..\Crypto\Generators\ClpPkcs5S2ParametersGenerator.pas"/>
         <Filename Value="..\..\Crypto\Generators\ClpPkcs5S2ParametersGenerator.pas"/>
         <UnitName Value="ClpPkcs5S2ParametersGenerator"/>
         <UnitName Value="ClpPkcs5S2ParametersGenerator"/>
-      </Item349>
-      <Item350>
+      </Item348>
+      <Item349>
         <Filename Value="..\..\Interfaces\ClpIPkcs5S2ParametersGenerator.pas"/>
         <Filename Value="..\..\Interfaces\ClpIPkcs5S2ParametersGenerator.pas"/>
         <UnitName Value="ClpIPkcs5S2ParametersGenerator"/>
         <UnitName Value="ClpIPkcs5S2ParametersGenerator"/>
-      </Item350>
-      <Item351>
+      </Item349>
+      <Item350>
         <Filename Value="..\..\Interfaces\ClpIPbeParametersGenerator.pas"/>
         <Filename Value="..\..\Interfaces\ClpIPbeParametersGenerator.pas"/>
         <UnitName Value="ClpIPbeParametersGenerator"/>
         <UnitName Value="ClpIPbeParametersGenerator"/>
-      </Item351>
-      <Item352>
+      </Item350>
+      <Item351>
         <Filename Value="..\..\Crypto\Generators\ClpPbeParametersGenerator.pas"/>
         <Filename Value="..\..\Crypto\Generators\ClpPbeParametersGenerator.pas"/>
         <UnitName Value="ClpPbeParametersGenerator"/>
         <UnitName Value="ClpPbeParametersGenerator"/>
-      </Item352>
-      <Item353>
+      </Item351>
+      <Item352>
         <Filename Value="..\..\Crypto\Macs\ClpHMac.pas"/>
         <Filename Value="..\..\Crypto\Macs\ClpHMac.pas"/>
         <UnitName Value="ClpHMac"/>
         <UnitName Value="ClpHMac"/>
-      </Item353>
-      <Item354>
+      </Item352>
+      <Item353>
         <Filename Value="..\..\Asn1\Misc\ClpMiscObjectIdentifiers.pas"/>
         <Filename Value="..\..\Asn1\Misc\ClpMiscObjectIdentifiers.pas"/>
         <UnitName Value="ClpMiscObjectIdentifiers"/>
         <UnitName Value="ClpMiscObjectIdentifiers"/>
-      </Item354>
-      <Item355>
+      </Item353>
+      <Item354>
         <Filename Value="..\..\Asn1\Iana\ClpIanaObjectIdentifiers.pas"/>
         <Filename Value="..\..\Asn1\Iana\ClpIanaObjectIdentifiers.pas"/>
         <UnitName Value="ClpIanaObjectIdentifiers"/>
         <UnitName Value="ClpIanaObjectIdentifiers"/>
-      </Item355>
-      <Item356>
+      </Item354>
+      <Item355>
         <Filename Value="..\..\Security\ClpMacUtilities.pas"/>
         <Filename Value="..\..\Security\ClpMacUtilities.pas"/>
         <UnitName Value="ClpMacUtilities"/>
         <UnitName Value="ClpMacUtilities"/>
-      </Item356>
-      <Item357>
+      </Item355>
+      <Item356>
         <Filename Value="..\..\Interfaces\ClpIMac.pas"/>
         <Filename Value="..\..\Interfaces\ClpIMac.pas"/>
         <UnitName Value="ClpIMac"/>
         <UnitName Value="ClpIMac"/>
-      </Item357>
-      <Item358>
+      </Item356>
+      <Item357>
         <Filename Value="..\..\Interfaces\ClpIHMac.pas"/>
         <Filename Value="..\..\Interfaces\ClpIHMac.pas"/>
         <UnitName Value="ClpIHMac"/>
         <UnitName Value="ClpIHMac"/>
-      </Item358>
-      <Item359>
+      </Item357>
+      <Item358>
         <Filename Value="..\..\Crypto\Signers\ClpDsaSigner.pas"/>
         <Filename Value="..\..\Crypto\Signers\ClpDsaSigner.pas"/>
         <UnitName Value="ClpDsaSigner"/>
         <UnitName Value="ClpDsaSigner"/>
-      </Item359>
-      <Item360>
+      </Item358>
+      <Item359>
         <Filename Value="..\..\Crypto\Generators\ClpDsaKeyPairGenerator.pas"/>
         <Filename Value="..\..\Crypto\Generators\ClpDsaKeyPairGenerator.pas"/>
         <UnitName Value="ClpDsaKeyPairGenerator"/>
         <UnitName Value="ClpDsaKeyPairGenerator"/>
-      </Item360>
-      <Item361>
+      </Item359>
+      <Item360>
         <Filename Value="..\..\Crypto\Signers\ClpECNRSigner.pas"/>
         <Filename Value="..\..\Crypto\Signers\ClpECNRSigner.pas"/>
         <UnitName Value="ClpECNRSigner"/>
         <UnitName Value="ClpECNRSigner"/>
-      </Item361>
-      <Item362>
+      </Item360>
+      <Item361>
         <Filename Value="..\..\Crypto\Parameters\ClpDsaKeyGenerationParameters.pas"/>
         <Filename Value="..\..\Crypto\Parameters\ClpDsaKeyGenerationParameters.pas"/>
         <UnitName Value="ClpDsaKeyGenerationParameters"/>
         <UnitName Value="ClpDsaKeyGenerationParameters"/>
-      </Item362>
-      <Item363>
+      </Item361>
+      <Item362>
         <Filename Value="..\..\Crypto\Parameters\ClpDsaPrivateKeyParameters.pas"/>
         <Filename Value="..\..\Crypto\Parameters\ClpDsaPrivateKeyParameters.pas"/>
         <UnitName Value="ClpDsaPrivateKeyParameters"/>
         <UnitName Value="ClpDsaPrivateKeyParameters"/>
-      </Item363>
-      <Item364>
+      </Item362>
+      <Item363>
         <Filename Value="..\..\Crypto\Parameters\ClpDsaPublicKeyParameters.pas"/>
         <Filename Value="..\..\Crypto\Parameters\ClpDsaPublicKeyParameters.pas"/>
         <UnitName Value="ClpDsaPublicKeyParameters"/>
         <UnitName Value="ClpDsaPublicKeyParameters"/>
-      </Item364>
-      <Item365>
+      </Item363>
+      <Item364>
         <Filename Value="..\..\Crypto\Parameters\ClpDsaValidationParameters.pas"/>
         <Filename Value="..\..\Crypto\Parameters\ClpDsaValidationParameters.pas"/>
         <UnitName Value="ClpDsaValidationParameters"/>
         <UnitName Value="ClpDsaValidationParameters"/>
-      </Item365>
-      <Item366>
+      </Item364>
+      <Item365>
         <Filename Value="..\..\Crypto\Parameters\ClpDsaParameters.pas"/>
         <Filename Value="..\..\Crypto\Parameters\ClpDsaParameters.pas"/>
         <UnitName Value="ClpDsaParameters"/>
         <UnitName Value="ClpDsaParameters"/>
-      </Item366>
-      <Item367>
+      </Item365>
+      <Item366>
         <Filename Value="..\..\Crypto\Parameters\ClpDsaKeyParameters.pas"/>
         <Filename Value="..\..\Crypto\Parameters\ClpDsaKeyParameters.pas"/>
         <UnitName Value="ClpDsaKeyParameters"/>
         <UnitName Value="ClpDsaKeyParameters"/>
-      </Item367>
-      <Item368>
+      </Item366>
+      <Item367>
         <Filename Value="..\..\Interfaces\ClpIECNRSigner.pas"/>
         <Filename Value="..\..\Interfaces\ClpIECNRSigner.pas"/>
         <UnitName Value="ClpIECNRSigner"/>
         <UnitName Value="ClpIECNRSigner"/>
-      </Item368>
-      <Item369>
+      </Item367>
+      <Item368>
         <Filename Value="..\..\Interfaces\ClpIDsaSigner.pas"/>
         <Filename Value="..\..\Interfaces\ClpIDsaSigner.pas"/>
         <UnitName Value="ClpIDsaSigner"/>
         <UnitName Value="ClpIDsaSigner"/>
-      </Item369>
-      <Item370>
+      </Item368>
+      <Item369>
         <Filename Value="..\..\Interfaces\ClpIDsaKeyPairGenerator.pas"/>
         <Filename Value="..\..\Interfaces\ClpIDsaKeyPairGenerator.pas"/>
         <UnitName Value="ClpIDsaKeyPairGenerator"/>
         <UnitName Value="ClpIDsaKeyPairGenerator"/>
-      </Item370>
-      <Item371>
+      </Item369>
+      <Item370>
         <Filename Value="..\..\Interfaces\ClpIDsaPrivateKeyParameters.pas"/>
         <Filename Value="..\..\Interfaces\ClpIDsaPrivateKeyParameters.pas"/>
         <UnitName Value="ClpIDsaPrivateKeyParameters"/>
         <UnitName Value="ClpIDsaPrivateKeyParameters"/>
-      </Item371>
-      <Item372>
+      </Item370>
+      <Item371>
         <Filename Value="..\..\Interfaces\ClpIDsaKeyGenerationParameters.pas"/>
         <Filename Value="..\..\Interfaces\ClpIDsaKeyGenerationParameters.pas"/>
         <UnitName Value="ClpIDsaKeyGenerationParameters"/>
         <UnitName Value="ClpIDsaKeyGenerationParameters"/>
-      </Item372>
-      <Item373>
+      </Item371>
+      <Item372>
         <Filename Value="..\..\Interfaces\ClpIDsaKeyParameters.pas"/>
         <Filename Value="..\..\Interfaces\ClpIDsaKeyParameters.pas"/>
         <UnitName Value="ClpIDsaKeyParameters"/>
         <UnitName Value="ClpIDsaKeyParameters"/>
-      </Item373>
-      <Item374>
+      </Item372>
+      <Item373>
         <Filename Value="..\..\Interfaces\ClpIDsaPublicKeyParameters.pas"/>
         <Filename Value="..\..\Interfaces\ClpIDsaPublicKeyParameters.pas"/>
         <UnitName Value="ClpIDsaPublicKeyParameters"/>
         <UnitName Value="ClpIDsaPublicKeyParameters"/>
-      </Item374>
-      <Item375>
+      </Item373>
+      <Item374>
         <Filename Value="..\..\Interfaces\ClpIDsaParameters.pas"/>
         <Filename Value="..\..\Interfaces\ClpIDsaParameters.pas"/>
         <UnitName Value="ClpIDsaParameters"/>
         <UnitName Value="ClpIDsaParameters"/>
-      </Item375>
-      <Item376>
+      </Item374>
+      <Item375>
         <Filename Value="..\..\Interfaces\ClpIDsaValidationParameters.pas"/>
         <Filename Value="..\..\Interfaces\ClpIDsaValidationParameters.pas"/>
         <UnitName Value="ClpIDsaValidationParameters"/>
         <UnitName Value="ClpIDsaValidationParameters"/>
-      </Item376>
-      <Item377>
+      </Item375>
+      <Item376>
         <Filename Value="..\..\Utils\Encoders\ClpBase58.pas"/>
         <Filename Value="..\..\Utils\Encoders\ClpBase58.pas"/>
         <UnitName Value="ClpBase58"/>
         <UnitName Value="ClpBase58"/>
-      </Item377>
-      <Item378>
+      </Item376>
+      <Item377>
         <Filename Value="..\..\Crypto\Digests\ClpDigest.pas"/>
         <Filename Value="..\..\Crypto\Digests\ClpDigest.pas"/>
         <UnitName Value="ClpDigest"/>
         <UnitName Value="ClpDigest"/>
-      </Item378>
-      <Item379>
+      </Item377>
+      <Item378>
         <Filename Value="..\..\Crypto\Agreement\ClpECDHCBasicAgreement.pas"/>
         <Filename Value="..\..\Crypto\Agreement\ClpECDHCBasicAgreement.pas"/>
         <UnitName Value="ClpECDHCBasicAgreement"/>
         <UnitName Value="ClpECDHCBasicAgreement"/>
-      </Item379>
-      <Item380>
+      </Item378>
+      <Item379>
         <Filename Value="..\..\Interfaces\ClpIECDHCBasicAgreement.pas"/>
         <Filename Value="..\..\Interfaces\ClpIECDHCBasicAgreement.pas"/>
         <UnitName Value="ClpIECDHCBasicAgreement"/>
         <UnitName Value="ClpIECDHCBasicAgreement"/>
-      </Item380>
-      <Item381>
+      </Item379>
+      <Item380>
         <Filename Value="..\..\Crypto\Signers\ClpHMacDsaKCalculator.pas"/>
         <Filename Value="..\..\Crypto\Signers\ClpHMacDsaKCalculator.pas"/>
         <UnitName Value="ClpHMacDsaKCalculator"/>
         <UnitName Value="ClpHMacDsaKCalculator"/>
-      </Item381>
-      <Item382>
+      </Item380>
+      <Item381>
         <Filename Value="..\..\Interfaces\ClpIHMacDsaKCalculator.pas"/>
         <Filename Value="..\..\Interfaces\ClpIHMacDsaKCalculator.pas"/>
         <UnitName Value="ClpIHMacDsaKCalculator"/>
         <UnitName Value="ClpIHMacDsaKCalculator"/>
-      </Item382>
-      <Item383>
+      </Item381>
+      <Item382>
         <Filename Value="..\..\Crypto\Generators\ClpHkdfBytesGenerator.pas"/>
         <Filename Value="..\..\Crypto\Generators\ClpHkdfBytesGenerator.pas"/>
         <UnitName Value="ClpHkdfBytesGenerator"/>
         <UnitName Value="ClpHkdfBytesGenerator"/>
-      </Item383>
-      <Item384>
+      </Item382>
+      <Item383>
         <Filename Value="..\..\Interfaces\ClpIHkdfBytesGenerator.pas"/>
         <Filename Value="..\..\Interfaces\ClpIHkdfBytesGenerator.pas"/>
         <UnitName Value="ClpIHkdfBytesGenerator"/>
         <UnitName Value="ClpIHkdfBytesGenerator"/>
-      </Item384>
-      <Item385>
+      </Item383>
+      <Item384>
         <Filename Value="..\..\Crypto\Parameters\ClpHkdfParameters.pas"/>
         <Filename Value="..\..\Crypto\Parameters\ClpHkdfParameters.pas"/>
         <UnitName Value="ClpHkdfParameters"/>
         <UnitName Value="ClpHkdfParameters"/>
-      </Item385>
-      <Item386>
+      </Item384>
+      <Item385>
         <Filename Value="..\..\Interfaces\ClpIHkdfParameters.pas"/>
         <Filename Value="..\..\Interfaces\ClpIHkdfParameters.pas"/>
         <UnitName Value="ClpIHkdfParameters"/>
         <UnitName Value="ClpIHkdfParameters"/>
-      </Item386>
-      <Item387>
+      </Item385>
+      <Item386>
         <Filename Value="..\..\Crypto\Parameters\ClpDsaParameterGenerationParameters.pas"/>
         <Filename Value="..\..\Crypto\Parameters\ClpDsaParameterGenerationParameters.pas"/>
         <UnitName Value="ClpDsaParameterGenerationParameters"/>
         <UnitName Value="ClpDsaParameterGenerationParameters"/>
-      </Item387>
-      <Item388>
+      </Item386>
+      <Item387>
         <Filename Value="..\..\Interfaces\ClpIDsaParameterGenerationParameters.pas"/>
         <Filename Value="..\..\Interfaces\ClpIDsaParameterGenerationParameters.pas"/>
         <UnitName Value="ClpIDsaParameterGenerationParameters"/>
         <UnitName Value="ClpIDsaParameterGenerationParameters"/>
-      </Item388>
-      <Item389>
+      </Item387>
+      <Item388>
         <Filename Value="..\..\Math\EC\ClpValidityPrecompInfo.pas"/>
         <Filename Value="..\..\Math\EC\ClpValidityPrecompInfo.pas"/>
         <UnitName Value="ClpValidityPrecompInfo"/>
         <UnitName Value="ClpValidityPrecompInfo"/>
-      </Item389>
-      <Item390>
+      </Item388>
+      <Item389>
         <Filename Value="..\..\Interfaces\ClpIValidityPrecompInfo.pas"/>
         <Filename Value="..\..\Interfaces\ClpIValidityPrecompInfo.pas"/>
         <UnitName Value="ClpIValidityPrecompInfo"/>
         <UnitName Value="ClpIValidityPrecompInfo"/>
-      </Item390>
-      <Item391>
+      </Item389>
+      <Item390>
         <Filename Value="..\..\Crypto\Generators\ClpDsaParametersGenerator.pas"/>
         <Filename Value="..\..\Crypto\Generators\ClpDsaParametersGenerator.pas"/>
         <UnitName Value="ClpDsaParametersGenerator"/>
         <UnitName Value="ClpDsaParametersGenerator"/>
-      </Item391>
-      <Item392>
+      </Item390>
+      <Item391>
         <Filename Value="..\..\Asn1\X509\ClpDsaParameter.pas"/>
         <Filename Value="..\..\Asn1\X509\ClpDsaParameter.pas"/>
         <UnitName Value="ClpDsaParameter"/>
         <UnitName Value="ClpDsaParameter"/>
-      </Item392>
-      <Item393>
+      </Item391>
+      <Item392>
         <Filename Value="..\..\Interfaces\ClpIDsaParameter.pas"/>
         <Filename Value="..\..\Interfaces\ClpIDsaParameter.pas"/>
         <UnitName Value="ClpIDsaParameter"/>
         <UnitName Value="ClpIDsaParameter"/>
-      </Item393>
-      <Item394>
+      </Item392>
+      <Item393>
         <Filename Value="..\..\Interfaces\ClpIKeyEncoder.pas"/>
         <Filename Value="..\..\Interfaces\ClpIKeyEncoder.pas"/>
         <UnitName Value="ClpIKeyEncoder"/>
         <UnitName Value="ClpIKeyEncoder"/>
-      </Item394>
-      <Item395>
+      </Item393>
+      <Item394>
         <Filename Value="..\..\Interfaces\ClpIDsaParametersGenerator.pas"/>
         <Filename Value="..\..\Interfaces\ClpIDsaParametersGenerator.pas"/>
         <UnitName Value="ClpIDsaParametersGenerator"/>
         <UnitName Value="ClpIDsaParametersGenerator"/>
-      </Item395>
-      <Item396>
+      </Item394>
+      <Item395>
         <Filename Value="..\..\Interfaces\ClpIPreCompCallBack.pas"/>
         <Filename Value="..\..\Interfaces\ClpIPreCompCallBack.pas"/>
         <UnitName Value="ClpIPreCompCallBack"/>
         <UnitName Value="ClpIPreCompCallBack"/>
-      </Item396>
-      <Item397>
+      </Item395>
+      <Item396>
         <Filename Value="..\..\Math\EC\Multiplier\ClpValidityPrecompInfo.pas"/>
         <Filename Value="..\..\Math\EC\Multiplier\ClpValidityPrecompInfo.pas"/>
         <AddToUsesPkgSection Value="False"/>
         <AddToUsesPkgSection Value="False"/>
         <UnitName Value="ClpValidityPrecompInfo"/>
         <UnitName Value="ClpValidityPrecompInfo"/>
-      </Item397>
-      <Item398>
+      </Item396>
+      <Item397>
         <Filename Value="..\..\Asn1\Nist\ClpNistNamedCurves.pas"/>
         <Filename Value="..\..\Asn1\Nist\ClpNistNamedCurves.pas"/>
         <UnitName Value="ClpNistNamedCurves"/>
         <UnitName Value="ClpNistNamedCurves"/>
-      </Item398>
-      <Item399>
+      </Item397>
+      <Item398>
         <Filename Value="..\..\Math\Raw\ClpNat256.pas"/>
         <Filename Value="..\..\Math\Raw\ClpNat256.pas"/>
         <UnitName Value="ClpNat256"/>
         <UnitName Value="ClpNat256"/>
-      </Item399>
-      <Item400>
+      </Item398>
+      <Item399>
         <Filename Value="..\..\Math\Raw\ClpNat320.pas"/>
         <Filename Value="..\..\Math\Raw\ClpNat320.pas"/>
         <UnitName Value="ClpNat320"/>
         <UnitName Value="ClpNat320"/>
-      </Item400>
-      <Item401>
+      </Item399>
+      <Item400>
         <Filename Value="..\..\Crypto\Engines\ClpAesLightEngine.pas"/>
         <Filename Value="..\..\Crypto\Engines\ClpAesLightEngine.pas"/>
         <UnitName Value="ClpAesLightEngine"/>
         <UnitName Value="ClpAesLightEngine"/>
-      </Item401>
-      <Item402>
+      </Item400>
+      <Item401>
         <Filename Value="..\..\Interfaces\ClpIAesLightEngine.pas"/>
         <Filename Value="..\..\Interfaces\ClpIAesLightEngine.pas"/>
         <UnitName Value="ClpIAesLightEngine"/>
         <UnitName Value="ClpIAesLightEngine"/>
-      </Item402>
-      <Item403>
+      </Item401>
+      <Item402>
         <Filename Value="..\..\Crypto\EC\ClpCustomNamedCurves.pas"/>
         <Filename Value="..\..\Crypto\EC\ClpCustomNamedCurves.pas"/>
         <UnitName Value="ClpCustomNamedCurves"/>
         <UnitName Value="ClpCustomNamedCurves"/>
-      </Item403>
-      <Item404>
+      </Item402>
+      <Item403>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP256K1Field.pas"/>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP256K1Field.pas"/>
         <UnitName Value="ClpSecP256K1Field"/>
         <UnitName Value="ClpSecP256K1Field"/>
-      </Item404>
-      <Item405>
+      </Item403>
+      <Item404>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP256K1FieldElement.pas"/>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP256K1FieldElement.pas"/>
         <UnitName Value="ClpSecP256K1FieldElement"/>
         <UnitName Value="ClpSecP256K1FieldElement"/>
-      </Item405>
-      <Item406>
+      </Item404>
+      <Item405>
         <Filename Value="..\..\Interfaces\ClpISecP256K1FieldElement.pas"/>
         <Filename Value="..\..\Interfaces\ClpISecP256K1FieldElement.pas"/>
         <UnitName Value="ClpISecP256K1FieldElement"/>
         <UnitName Value="ClpISecP256K1FieldElement"/>
-      </Item406>
-      <Item407>
+      </Item405>
+      <Item406>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP256K1Point.pas"/>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP256K1Point.pas"/>
         <UnitName Value="ClpSecP256K1Point"/>
         <UnitName Value="ClpSecP256K1Point"/>
-      </Item407>
-      <Item408>
+      </Item406>
+      <Item407>
         <Filename Value="..\..\Interfaces\ClpISecP256K1Point.pas"/>
         <Filename Value="..\..\Interfaces\ClpISecP256K1Point.pas"/>
         <UnitName Value="ClpISecP256K1Point"/>
         <UnitName Value="ClpISecP256K1Point"/>
-      </Item408>
-      <Item409>
+      </Item407>
+      <Item408>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP256K1Curve.pas"/>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP256K1Curve.pas"/>
         <UnitName Value="ClpSecP256K1Curve"/>
         <UnitName Value="ClpSecP256K1Curve"/>
-      </Item409>
-      <Item410>
+      </Item408>
+      <Item409>
         <Filename Value="..\..\Interfaces\ClpISecP256K1Curve.pas"/>
         <Filename Value="..\..\Interfaces\ClpISecP256K1Curve.pas"/>
         <UnitName Value="ClpISecP256K1Curve"/>
         <UnitName Value="ClpISecP256K1Curve"/>
-      </Item410>
-      <Item411>
+      </Item409>
+      <Item410>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP384R1Field.pas"/>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP384R1Field.pas"/>
         <UnitName Value="ClpSecP384R1Field"/>
         <UnitName Value="ClpSecP384R1Field"/>
-      </Item411>
-      <Item412>
+      </Item410>
+      <Item411>
         <Filename Value="..\..\Math\Raw\ClpNat384.pas"/>
         <Filename Value="..\..\Math\Raw\ClpNat384.pas"/>
         <UnitName Value="ClpNat384"/>
         <UnitName Value="ClpNat384"/>
-      </Item412>
-      <Item413>
+      </Item411>
+      <Item412>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP384R1FieldElement.pas"/>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP384R1FieldElement.pas"/>
         <UnitName Value="ClpSecP384R1FieldElement"/>
         <UnitName Value="ClpSecP384R1FieldElement"/>
-      </Item413>
-      <Item414>
+      </Item412>
+      <Item413>
         <Filename Value="..\..\Interfaces\ClpISecP384R1FieldElement.pas"/>
         <Filename Value="..\..\Interfaces\ClpISecP384R1FieldElement.pas"/>
         <UnitName Value="ClpISecP384R1FieldElement"/>
         <UnitName Value="ClpISecP384R1FieldElement"/>
-      </Item414>
-      <Item415>
+      </Item413>
+      <Item414>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP384R1Point.pas"/>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP384R1Point.pas"/>
         <UnitName Value="ClpSecP384R1Point"/>
         <UnitName Value="ClpSecP384R1Point"/>
-      </Item415>
-      <Item416>
+      </Item414>
+      <Item415>
         <Filename Value="..\..\Interfaces\ClpISecP384R1Point.pas"/>
         <Filename Value="..\..\Interfaces\ClpISecP384R1Point.pas"/>
         <UnitName Value="ClpISecP384R1Point"/>
         <UnitName Value="ClpISecP384R1Point"/>
-      </Item416>
-      <Item417>
+      </Item415>
+      <Item416>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP384R1Curve.pas"/>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP384R1Curve.pas"/>
         <UnitName Value="ClpSecP384R1Curve"/>
         <UnitName Value="ClpSecP384R1Curve"/>
-      </Item417>
-      <Item418>
+      </Item416>
+      <Item417>
         <Filename Value="..\..\Math\Raw\ClpNat192.pas"/>
         <Filename Value="..\..\Math\Raw\ClpNat192.pas"/>
         <UnitName Value="ClpNat192"/>
         <UnitName Value="ClpNat192"/>
-      </Item418>
-      <Item419>
+      </Item417>
+      <Item418>
         <Filename Value="..\..\Interfaces\ClpISecP384R1Curve.pas"/>
         <Filename Value="..\..\Interfaces\ClpISecP384R1Curve.pas"/>
         <UnitName Value="ClpISecP384R1Curve"/>
         <UnitName Value="ClpISecP384R1Curve"/>
-      </Item419>
-      <Item420>
+      </Item418>
+      <Item419>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP521R1Field.pas"/>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP521R1Field.pas"/>
         <UnitName Value="ClpSecP521R1Field"/>
         <UnitName Value="ClpSecP521R1Field"/>
-      </Item420>
-      <Item421>
+      </Item419>
+      <Item420>
         <Filename Value="..\..\Math\Raw\ClpNat512.pas"/>
         <Filename Value="..\..\Math\Raw\ClpNat512.pas"/>
         <UnitName Value="ClpNat512"/>
         <UnitName Value="ClpNat512"/>
-      </Item421>
-      <Item422>
+      </Item420>
+      <Item421>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP521R1FieldElement.pas"/>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP521R1FieldElement.pas"/>
         <UnitName Value="ClpSecP521R1FieldElement"/>
         <UnitName Value="ClpSecP521R1FieldElement"/>
-      </Item422>
-      <Item423>
+      </Item421>
+      <Item422>
         <Filename Value="..\..\Interfaces\ClpISecP521R1FieldElement.pas"/>
         <Filename Value="..\..\Interfaces\ClpISecP521R1FieldElement.pas"/>
         <UnitName Value="ClpISecP521R1FieldElement"/>
         <UnitName Value="ClpISecP521R1FieldElement"/>
-      </Item423>
-      <Item424>
+      </Item422>
+      <Item423>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP521R1Point.pas"/>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP521R1Point.pas"/>
         <UnitName Value="ClpSecP521R1Point"/>
         <UnitName Value="ClpSecP521R1Point"/>
-      </Item424>
-      <Item425>
+      </Item423>
+      <Item424>
         <Filename Value="..\..\Interfaces\ClpISecP521R1Point.pas"/>
         <Filename Value="..\..\Interfaces\ClpISecP521R1Point.pas"/>
         <UnitName Value="ClpISecP521R1Point"/>
         <UnitName Value="ClpISecP521R1Point"/>
-      </Item425>
-      <Item426>
+      </Item424>
+      <Item425>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP521R1Curve.pas"/>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP521R1Curve.pas"/>
         <UnitName Value="ClpSecP521R1Curve"/>
         <UnitName Value="ClpSecP521R1Curve"/>
-      </Item426>
-      <Item427>
+      </Item425>
+      <Item426>
         <Filename Value="..\..\Interfaces\ClpISecP521R1Curve.pas"/>
         <Filename Value="..\..\Interfaces\ClpISecP521R1Curve.pas"/>
         <UnitName Value="ClpISecP521R1Curve"/>
         <UnitName Value="ClpISecP521R1Curve"/>
-      </Item427>
-      <Item428>
+      </Item426>
+      <Item427>
         <Filename Value="..\..\Math\Raw\ClpInterleave.pas"/>
         <Filename Value="..\..\Math\Raw\ClpInterleave.pas"/>
         <UnitName Value="ClpInterleave"/>
         <UnitName Value="ClpInterleave"/>
-      </Item428>
-      <Item429>
+      </Item427>
+      <Item428>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecT283Field.pas"/>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecT283Field.pas"/>
         <UnitName Value="ClpSecT283Field"/>
         <UnitName Value="ClpSecT283Field"/>
-      </Item429>
-      <Item430>
+      </Item428>
+      <Item429>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecT283FieldElement.pas"/>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecT283FieldElement.pas"/>
         <UnitName Value="ClpSecT283FieldElement"/>
         <UnitName Value="ClpSecT283FieldElement"/>
-      </Item430>
-      <Item431>
+      </Item429>
+      <Item430>
         <Filename Value="..\..\Interfaces\ClpISecT283FieldElement.pas"/>
         <Filename Value="..\..\Interfaces\ClpISecT283FieldElement.pas"/>
         <UnitName Value="ClpISecT283FieldElement"/>
         <UnitName Value="ClpISecT283FieldElement"/>
-      </Item431>
-      <Item432>
+      </Item430>
+      <Item431>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecT283K1Point.pas"/>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecT283K1Point.pas"/>
         <UnitName Value="ClpSecT283K1Point"/>
         <UnitName Value="ClpSecT283K1Point"/>
-      </Item432>
-      <Item433>
+      </Item431>
+      <Item432>
         <Filename Value="..\..\Interfaces\ClpISecT283K1Point.pas"/>
         <Filename Value="..\..\Interfaces\ClpISecT283K1Point.pas"/>
         <UnitName Value="ClpISecT283K1Point"/>
         <UnitName Value="ClpISecT283K1Point"/>
-      </Item433>
-      <Item434>
+      </Item432>
+      <Item433>
         <Filename Value="..\..\Interfaces\ClpISecT283K1Curve.pas"/>
         <Filename Value="..\..\Interfaces\ClpISecT283K1Curve.pas"/>
         <UnitName Value="ClpISecT283K1Curve"/>
         <UnitName Value="ClpISecT283K1Curve"/>
-      </Item434>
-      <Item435>
+      </Item433>
+      <Item434>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecT283K1Curve.pas"/>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecT283K1Curve.pas"/>
         <UnitName Value="ClpSecT283K1Curve"/>
         <UnitName Value="ClpSecT283K1Curve"/>
-      </Item435>
-      <Item436>
+      </Item434>
+      <Item435>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP256R1Field.pas"/>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP256R1Field.pas"/>
         <UnitName Value="ClpSecP256R1Field"/>
         <UnitName Value="ClpSecP256R1Field"/>
-      </Item436>
-      <Item437>
+      </Item435>
+      <Item436>
         <Filename Value="..\..\Interfaces\ClpISecP256R1FieldElement.pas"/>
         <Filename Value="..\..\Interfaces\ClpISecP256R1FieldElement.pas"/>
         <UnitName Value="ClpISecP256R1FieldElement"/>
         <UnitName Value="ClpISecP256R1FieldElement"/>
-      </Item437>
-      <Item438>
+      </Item436>
+      <Item437>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP256R1FieldElement.pas"/>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP256R1FieldElement.pas"/>
         <UnitName Value="ClpSecP256R1FieldElement"/>
         <UnitName Value="ClpSecP256R1FieldElement"/>
-      </Item438>
-      <Item439>
+      </Item437>
+      <Item438>
         <Filename Value="..\..\Interfaces\ClpISecP256R1Point.pas"/>
         <Filename Value="..\..\Interfaces\ClpISecP256R1Point.pas"/>
         <UnitName Value="ClpISecP256R1Point"/>
         <UnitName Value="ClpISecP256R1Point"/>
-      </Item439>
-      <Item440>
+      </Item438>
+      <Item439>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP256R1Point.pas"/>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP256R1Point.pas"/>
         <UnitName Value="ClpSecP256R1Point"/>
         <UnitName Value="ClpSecP256R1Point"/>
-      </Item440>
-      <Item441>
+      </Item439>
+      <Item440>
         <Filename Value="..\..\Interfaces\ClpISecP256R1Curve.pas"/>
         <Filename Value="..\..\Interfaces\ClpISecP256R1Curve.pas"/>
         <UnitName Value="ClpISecP256R1Curve"/>
         <UnitName Value="ClpISecP256R1Curve"/>
-      </Item441>
-      <Item442>
+      </Item440>
+      <Item441>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP256R1Curve.pas"/>
         <Filename Value="..\..\Math\EC\Custom\Sec\ClpSecP256R1Curve.pas"/>
         <UnitName Value="ClpSecP256R1Curve"/>
         <UnitName Value="ClpSecP256R1Curve"/>
-      </Item442>
-      <Item443>
+      </Item441>
+      <Item442>
         <Filename Value="..\..\Asn1\Bsi\ClpBsiObjectIdentifiers.pas"/>
         <Filename Value="..\..\Asn1\Bsi\ClpBsiObjectIdentifiers.pas"/>
         <UnitName Value="ClpBsiObjectIdentifiers"/>
         <UnitName Value="ClpBsiObjectIdentifiers"/>
-      </Item443>
-      <Item444>
+      </Item442>
+      <Item443>
         <Filename Value="..\..\Asn1\Eac\ClpEacObjectIdentifiers.pas"/>
         <Filename Value="..\..\Asn1\Eac\ClpEacObjectIdentifiers.pas"/>
         <UnitName Value="ClpEacObjectIdentifiers"/>
         <UnitName Value="ClpEacObjectIdentifiers"/>
-      </Item444>
-      <Item445>
+      </Item443>
+      <Item444>
         <Filename Value="..\..\Crypto\Signers\ClpPlainDsaEncoding.pas"/>
         <Filename Value="..\..\Crypto\Signers\ClpPlainDsaEncoding.pas"/>
         <UnitName Value="ClpPlainDsaEncoding"/>
         <UnitName Value="ClpPlainDsaEncoding"/>
-      </Item445>
-      <Item446>
+      </Item444>
+      <Item445>
         <Filename Value="..\..\Crypto\Signers\ClpStandardDsaEncoding.pas"/>
         <Filename Value="..\..\Crypto\Signers\ClpStandardDsaEncoding.pas"/>
         <UnitName Value="ClpStandardDsaEncoding"/>
         <UnitName Value="ClpStandardDsaEncoding"/>
-      </Item446>
-      <Item447>
+      </Item445>
+      <Item446>
         <Filename Value="..\..\Interfaces\ClpIStandardDsaEncoding.pas"/>
         <Filename Value="..\..\Interfaces\ClpIStandardDsaEncoding.pas"/>
         <UnitName Value="ClpIStandardDsaEncoding"/>
         <UnitName Value="ClpIStandardDsaEncoding"/>
-      </Item447>
-      <Item448>
+      </Item446>
+      <Item447>
         <Filename Value="..\..\Interfaces\ClpIPlainDsaEncoding.pas"/>
         <Filename Value="..\..\Interfaces\ClpIPlainDsaEncoding.pas"/>
         <UnitName Value="ClpIPlainDsaEncoding"/>
         <UnitName Value="ClpIPlainDsaEncoding"/>
-      </Item448>
-      <Item449>
+      </Item447>
+      <Item448>
         <Filename Value="..\..\Interfaces\ClpIDsaExt.pas"/>
         <Filename Value="..\..\Interfaces\ClpIDsaExt.pas"/>
         <UnitName Value="ClpIDsaExt"/>
         <UnitName Value="ClpIDsaExt"/>
-      </Item449>
-      <Item450>
+      </Item448>
+      <Item449>
         <Filename Value="..\..\Interfaces\ClpIDsaEncoding.pas"/>
         <Filename Value="..\..\Interfaces\ClpIDsaEncoding.pas"/>
         <UnitName Value="ClpIDsaEncoding"/>
         <UnitName Value="ClpIDsaEncoding"/>
-      </Item450>
-      <Item451>
+      </Item449>
+      <Item450>
         <Filename Value="..\..\Interfaces\ClpISchnorrDigestSigner.pas"/>
         <Filename Value="..\..\Interfaces\ClpISchnorrDigestSigner.pas"/>
         <UnitName Value="ClpISchnorrDigestSigner"/>
         <UnitName Value="ClpISchnorrDigestSigner"/>
-      </Item451>
-      <Item452>
+      </Item450>
+      <Item451>
         <Filename Value="..\..\Interfaces\ClpIECSchnorrSipaSigner.pas"/>
         <Filename Value="..\..\Interfaces\ClpIECSchnorrSipaSigner.pas"/>
         <UnitName Value="ClpIECSchnorrSipaSigner"/>
         <UnitName Value="ClpIECSchnorrSipaSigner"/>
-      </Item452>
-      <Item453>
+      </Item451>
+      <Item452>
         <Filename Value="..\..\Crypto\Signers\ClpECSchnorrSipaSigner.pas"/>
         <Filename Value="..\..\Crypto\Signers\ClpECSchnorrSipaSigner.pas"/>
         <UnitName Value="ClpECSchnorrSipaSigner"/>
         <UnitName Value="ClpECSchnorrSipaSigner"/>
-      </Item453>
-      <Item454>
+      </Item452>
+      <Item453>
         <Filename Value="..\..\Crypto\Signers\ClpSchnorrDigestSigner.pas"/>
         <Filename Value="..\..\Crypto\Signers\ClpSchnorrDigestSigner.pas"/>
         <UnitName Value="ClpSchnorrDigestSigner"/>
         <UnitName Value="ClpSchnorrDigestSigner"/>
-      </Item454>
-      <Item455>
+      </Item453>
+      <Item454>
         <Filename Value="..\..\Crypto\Signers\ClpPlainSchnorrEncoding.pas"/>
         <Filename Value="..\..\Crypto\Signers\ClpPlainSchnorrEncoding.pas"/>
         <UnitName Value="ClpPlainSchnorrEncoding"/>
         <UnitName Value="ClpPlainSchnorrEncoding"/>
-      </Item455>
-      <Item456>
+      </Item454>
+      <Item455>
         <Filename Value="..\..\Interfaces\ClpIPlainSchnorrEncoding.pas"/>
         <Filename Value="..\..\Interfaces\ClpIPlainSchnorrEncoding.pas"/>
         <UnitName Value="ClpIPlainSchnorrEncoding"/>
         <UnitName Value="ClpIPlainSchnorrEncoding"/>
-      </Item456>
-      <Item457>
+      </Item455>
+      <Item456>
         <Filename Value="..\..\Interfaces\ClpISchnorrEncoding.pas"/>
         <Filename Value="..\..\Interfaces\ClpISchnorrEncoding.pas"/>
         <UnitName Value="ClpISchnorrEncoding"/>
         <UnitName Value="ClpISchnorrEncoding"/>
-      </Item457>
-      <Item458>
+      </Item456>
+      <Item457>
         <Filename Value="..\..\Interfaces\ClpISchnorr.pas"/>
         <Filename Value="..\..\Interfaces\ClpISchnorr.pas"/>
         <UnitName Value="ClpISchnorr"/>
         <UnitName Value="ClpISchnorr"/>
-      </Item458>
-      <Item459>
+      </Item457>
+      <Item458>
         <Filename Value="..\..\Interfaces\ClpISchnorrExt.pas"/>
         <Filename Value="..\..\Interfaces\ClpISchnorrExt.pas"/>
         <UnitName Value="ClpISchnorrExt"/>
         <UnitName Value="ClpISchnorrExt"/>
-      </Item459>
+      </Item458>
     </Files>
     </Files>
     <RequiredPkgs Count="3">
     <RequiredPkgs Count="3">
       <Item1>
       <Item1>

+ 4 - 4
CryptoLib/src/Packages/FPC/CryptoLib4PascalPackage.pas

@@ -63,10 +63,10 @@ uses
   ClpIECDomainParameters, ClpIECDsaSigner, ClpIECFieldElement, 
   ClpIECDomainParameters, ClpIECDsaSigner, ClpIECFieldElement, 
   ClpIECInterface, ClpIECKeyGenerationParameters, ClpIECKeyPairGenerator, 
   ClpIECInterface, ClpIECKeyGenerationParameters, ClpIECKeyPairGenerator, 
   ClpIECKeyParameters, ClpIECPrivateKeyParameters, ClpIECPublicKeyParameters, 
   ClpIECKeyParameters, ClpIECPrivateKeyParameters, ClpIECPublicKeyParameters, 
-  ClpIExtensionField, ClpIFilterStream, ClpIFiniteField, 
-  ClpIFixedPointCombMultiplier, ClpIFixedPointPreCompInfo, 
-  ClpIGenericPolynomialExtensionField, ClpIGF2Polynomial, ClpIGlvEndomorphism, 
-  ClpIGlvMultiplier, ClpIGlvTypeBEndomorphism, ClpIGlvTypeBParameters, 
+  ClpIExtensionField, ClpIFiniteField, ClpIFixedPointCombMultiplier, 
+  ClpIFixedPointPreCompInfo, ClpIGenericPolynomialExtensionField, 
+  ClpIGF2Polynomial, ClpIGlvEndomorphism, ClpIGlvMultiplier, 
+  ClpIGlvTypeBEndomorphism, ClpIGlvTypeBParameters, 
   ClpIKeyGenerationParameters, ClpIOidTokenizer, ClpIOSRandomNumberGenerator, 
   ClpIKeyGenerationParameters, ClpIOidTokenizer, ClpIOSRandomNumberGenerator, 
   ClpIParametersWithRandom, ClpIPCGRandomNumberGenerator, ClpIPolynomial, 
   ClpIParametersWithRandom, ClpIPCGRandomNumberGenerator, ClpIPolynomial, 
   ClpIPolynomialExtensionField, ClpIPreCompInfo, ClpIPrimeField, 
   ClpIPolynomialExtensionField, ClpIPreCompInfo, ClpIPrimeField, 

+ 3 - 32
CryptoLib/src/Utils/IO/ClpFilterStream.pas

@@ -24,11 +24,10 @@ interface
 uses
 uses
   Classes,
   Classes,
   ClpStreamHelper,
   ClpStreamHelper,
-  ClpIFilterStream,
   ClpDefiniteLengthInputStream;
   ClpDefiniteLengthInputStream;
 
 
 type
 type
-  TFilterStream = class(TStream, IFilterStream)
+  TFilterStream = class(TStream)
 
 
   protected
   protected
   var
   var
@@ -39,15 +38,6 @@ type
 {$ENDIF FPC}
 {$ENDIF FPC}
     function GetSize: Int64; override;
     function GetSize: Int64; override;
 
 
-    function QueryInterface({$IFDEF FPC}constref {$ELSE}const
-{$ENDIF FPC} IID: TGUID; out Obj): HResult;
-{$IF DEFINED(MSWINDOWS) OR DEFINED(DELPHI)} stdcall
-{$ELSE} cdecl {$IFEND};
-    function _AddRef: Integer; {$IF DEFINED(MSWINDOWS) OR DEFINED(DELPHI)} stdcall {$ELSE} cdecl
-{$IFEND};
-    function _Release: Integer; {$IF DEFINED(MSWINDOWS) OR DEFINED(DELPHI)} stdcall {$ELSE} cdecl
-{$IFEND};
-
   public
   public
     constructor Create(const s: TStream);
     constructor Create(const s: TStream);
 
 
@@ -58,8 +48,8 @@ type
     function Read(var Buffer; Count: LongInt): LongInt; override;
     function Read(var Buffer; Count: LongInt): LongInt; override;
     function Write(const Buffer; Count: LongInt): LongInt; override;
     function Write(const Buffer; Count: LongInt): LongInt; override;
 
 
-    function ReadByte(): Int32; inline;
-    procedure WriteByte(Value: Byte); inline;
+    function ReadByte(): Int32;
+    procedure WriteByte(Value: Byte);
 
 
   end;
   end;
 
 
@@ -71,25 +61,6 @@ uses
 
 
 { TFilterStream }
 { TFilterStream }
 
 
-function TFilterStream._AddRef: Integer;
-begin
-  Result := -1;
-end;
-
-function TFilterStream._Release: Integer;
-begin
-  Result := -1;
-end;
-
-function TFilterStream.QueryInterface({$IFDEF FPC}constref {$ELSE}const
-{$ENDIF FPC} IID: TGUID; out Obj): HResult;
-begin
-  if GetInterface(IID, Obj) then
-    Result := 0
-  else
-    Result := E_NOINTERFACE;
-end;
-
 constructor TFilterStream.Create(const s: TStream);
 constructor TFilterStream.Create(const s: TStream);
 begin
 begin
   inherited Create();
   inherited Create();