Browse Source

fixed some more memory leaks.

Ugochukwu Mmaduekwe 7 years ago
parent
commit
1195cad053

+ 1 - 1
CryptoLib.Samples/src/UsageExamples.pas

@@ -297,7 +297,7 @@ begin
     sLineBreak);
     sLineBreak);
 
 
   PublicKeyByteArray := pubParams.Q.GetEncoded;
   PublicKeyByteArray := pubParams.Q.GetEncoded;
-  // using ToByteArray here because bytes is unsigned in Pascal
+  // using ToByteArray here because bytes are unsigned in Pascal
   PrivateKeyByteArray := privParams.D.ToByteArray;
   PrivateKeyByteArray := privParams.D.ToByteArray;
 
 
   RegeneratedPublicKey := TECPublicKeyParameters.Create('ECDSA',
   RegeneratedPublicKey := TECPublicKeyParameters.Create('ECDSA',

+ 6 - 3
CryptoLib.Tests/src/Others/ECDsa5Tests.pas

@@ -274,7 +274,8 @@ begin
   spec := TECDomainParameters.Create(curve,
   spec := TECDomainParameters.Create(curve,
 
 
     curve.DecodePoint(THex.Decode
     curve.DecodePoint(THex.Decode
-    ('020ffa963cdca8816ccc33b8642bedf905c3d358573d3f27fbbd3b3cb9aaaf')), // G
+    ('020ffa963cdca8816ccc33b8642bedf905c3d358573d3f27fbbd3b3cb9aaaf'))
+    as IECPoint, // G
     TBigInteger.Create
     TBigInteger.Create
     ('883423532389192164791648750360308884807550341691627752275345424702807307'),
     ('883423532389192164791648750360308884807550341691627752275345424702807307'),
     // n
     // n
@@ -289,7 +290,8 @@ begin
   vKey := TECPublicKeyParameters.Create('ECDSA',
   vKey := TECPublicKeyParameters.Create('ECDSA',
 
 
     curve.DecodePoint(THex.Decode
     curve.DecodePoint(THex.Decode
-    ('025b6dc53bc61a2548ffb0f671472de6c9521a9d2d2534e65abfcbd5fe0c70')), // Q
+    ('025b6dc53bc61a2548ffb0f671472de6c9521a9d2d2534e65abfcbd5fe0c70'))
+    as IECPoint, // Q
     spec);
     spec);
 
 
   sgr := TSignerUtilities.GetSigner('ECDSA');
   sgr := TSignerUtilities.GetSigner('ECDSA');
@@ -355,7 +357,8 @@ begin
 
 
   ecSpec := TECDomainParameters.Create(curve,
   ecSpec := TECDomainParameters.Create(curve,
     curve.DecodePoint(THex.Decode
     curve.DecodePoint(THex.Decode
-    ('020ffa963cdca8816ccc33b8642bedf905c3d358573d3f27fbbd3b3cb9aaaf')), // G
+    ('020ffa963cdca8816ccc33b8642bedf905c3d358573d3f27fbbd3b3cb9aaaf'))
+    as IECPoint, // G
     TBigInteger.Create
     TBigInteger.Create
     ('883423532389192164791648750360308884807550341691627752275345424702807307'),
     ('883423532389192164791648750360308884807550341691627752275345424702807307'),
     // n
     // n

+ 12 - 10
CryptoLib.Tests/src/Others/ECTests.pas

@@ -207,7 +207,7 @@ begin
   parameters := TECDomainParameters.Create(curve,
   parameters := TECDomainParameters.Create(curve,
     curve.DecodePoint(THex.Decode
     curve.DecodePoint(THex.Decode
     ('0436B3DAF8A23206F9C4F299D7B21A9C369137F2C84AE1AA0D765BE73433B3F95E332932E70EA245CA2418EA0EF98018FB')
     ('0436B3DAF8A23206F9C4F299D7B21A9C369137F2C84AE1AA0D765BE73433B3F95E332932E70EA245CA2418EA0EF98018FB')
-    ), // G
+    ) as IECPoint, // G
     TBigInteger.Create
     TBigInteger.Create
     ('1569275433846670190958947355803350458831205595451630533029'), // n
     ('1569275433846670190958947355803350458831205595451630533029'), // n
     TBigInteger.Two); // h
     TBigInteger.Two); // h
@@ -242,7 +242,7 @@ begin
   pubKey := TECPublicKeyParameters.Create('ECDSA',
   pubKey := TECPublicKeyParameters.Create('ECDSA',
     curve.DecodePoint(THex.Decode
     curve.DecodePoint(THex.Decode
     ('045DE37E756BD55D72E3768CB396FFEB962614DEA4CE28A2E755C0E0E02F5FB132CAF416EF85B229BBB8E1352003125BA1')
     ('045DE37E756BD55D72E3768CB396FFEB962614DEA4CE28A2E755C0E0E02F5FB132CAF416EF85B229BBB8E1352003125BA1')
-    ), // Q
+    ) as IECPoint, // Q
     parameters);
     parameters);
 
 
   ecdsa.Init(false, pubKey);
   ecdsa.Init(false, pubKey);
@@ -291,7 +291,7 @@ begin
 
 
   parameters := TECDomainParameters.Create(curve,
   parameters := TECDomainParameters.Create(curve,
     curve.DecodePoint(THex.Decode
     curve.DecodePoint(THex.Decode
-    ('03188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012')), // G
+    ('03188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012')) as IECPoint, // G
     n);
     n);
 
 
   priKey := TECPrivateKeyParameters.Create('ECDSA',
   priKey := TECPrivateKeyParameters.Create('ECDSA',
@@ -324,7 +324,7 @@ begin
   // Verify the signature
   // Verify the signature
   pubKey := TECPublicKeyParameters.Create('ECDSA',
   pubKey := TECPublicKeyParameters.Create('ECDSA',
     curve.DecodePoint(THex.Decode
     curve.DecodePoint(THex.Decode
-    ('0262b12d60690cdcf330babab6e69763b471f994dd702d16a5')), // Q
+    ('0262b12d60690cdcf330babab6e69763b471f994dd702d16a5')) as IECPoint, // Q
     parameters);
     parameters);
 
 
   ecdsa.Init(false, pubKey);
   ecdsa.Init(false, pubKey);
@@ -370,7 +370,7 @@ begin
   parameters := TECDomainParameters.Create(curve,
   parameters := TECDomainParameters.Create(curve,
     curve.DecodePoint(THex.Decode
     curve.DecodePoint(THex.Decode
     ('0457927098FA932E7C0A96D3FD5B706EF7E5F5C156E16B7E7C86038552E91D61D8EE5077C33FECF6F1A16B268DE469C3C7744EA9A971649FC7A9616305')
     ('0457927098FA932E7C0A96D3FD5B706EF7E5F5C156E16B7E7C86038552E91D61D8EE5077C33FECF6F1A16B268DE469C3C7744EA9A971649FC7A9616305')
-    ), // G
+    ) as IECPoint, // G
     TBigInteger.Create
     TBigInteger.Create
     ('220855883097298041197912187592864814557886993776713230936715041207411783'),
     ('220855883097298041197912187592864814557886993776713230936715041207411783'),
     // n
     // n
@@ -407,7 +407,7 @@ begin
   pubKey := TECPublicKeyParameters.Create('ECDSA',
   pubKey := TECPublicKeyParameters.Create('ECDSA',
     curve.DecodePoint(THex.Decode
     curve.DecodePoint(THex.Decode
     ('045894609CCECF9A92533F630DE713A958E96C97CCB8F5ABB5A688A238DEED6DC2D9D0C94EBFB7D526BA6A61764175B99CB6011E2047F9F067293F57F5')
     ('045894609CCECF9A92533F630DE713A958E96C97CCB8F5ABB5A688A238DEED6DC2D9D0C94EBFB7D526BA6A61764175B99CB6011E2047F9F067293F57F5')
-    ), // Q
+    ) as IECPoint, // Q
     parameters);
     parameters);
 
 
   ecdsa.Init(false, pubKey);
   ecdsa.Init(false, pubKey);
@@ -452,7 +452,7 @@ begin
   parameters := TECDomainParameters.Create(curve,
   parameters := TECDomainParameters.Create(curve,
     curve.DecodePoint(THex.Decode
     curve.DecodePoint(THex.Decode
     ('0457927098FA932E7C0A96D3FD5B706EF7E5F5C156E16B7E7C86038552E91D61D8EE5077C33FECF6F1A16B268DE469C3C7744EA9A971649FC7A9616305')
     ('0457927098FA932E7C0A96D3FD5B706EF7E5F5C156E16B7E7C86038552E91D61D8EE5077C33FECF6F1A16B268DE469C3C7744EA9A971649FC7A9616305')
-    ), // G
+    ) as IECPoint, // G
     TBigInteger.Create
     TBigInteger.Create
     ('220855883097298041197912187592864814557886993776713230936715041207411783'),
     ('220855883097298041197912187592864814557886993776713230936715041207411783'),
     // n
     // n
@@ -490,7 +490,7 @@ begin
   pubKey := TECPublicKeyParameters.Create('ECDSA',
   pubKey := TECPublicKeyParameters.Create('ECDSA',
     curve.DecodePoint(THex.Decode
     curve.DecodePoint(THex.Decode
     ('045894609CCECF9A92533F630DE713A958E96C97CCB8F5ABB5A688A238DEED6DC2D9D0C94EBFB7D526BA6A61764175B99CB6011E2047F9F067293F57F5')
     ('045894609CCECF9A92533F630DE713A958E96C97CCB8F5ABB5A688A238DEED6DC2D9D0C94EBFB7D526BA6A61764175B99CB6011E2047F9F067293F57F5')
-    ), // Q
+    ) as IECPoint, // Q
     parameters);
     parameters);
 
 
   ecdsa.Init(false, pubKey);
   ecdsa.Init(false, pubKey);
@@ -540,7 +540,8 @@ begin
 
 
   parameters := TECDomainParameters.Create(curve,
   parameters := TECDomainParameters.Create(curve,
     curve.DecodePoint(THex.Decode
     curve.DecodePoint(THex.Decode
-    ('020ffa963cdca8816ccc33b8642bedf905c3d358573d3f27fbbd3b3cb9aaaf')), // G
+    ('020ffa963cdca8816ccc33b8642bedf905c3d358573d3f27fbbd3b3cb9aaaf'))
+    as IECPoint, // G
     n);
     n);
 
 
   priKey := TECPrivateKeyParameters.Create('ECDSA',
   priKey := TECPrivateKeyParameters.Create('ECDSA',
@@ -573,7 +574,8 @@ begin
   // Verify the signature
   // Verify the signature
   pubKey := TECPublicKeyParameters.Create('ECDSA',
   pubKey := TECPublicKeyParameters.Create('ECDSA',
     curve.DecodePoint(THex.Decode
     curve.DecodePoint(THex.Decode
-    ('025b6dc53bc61a2548ffb0f671472de6c9521a9d2d2534e65abfcbd5fe0c70')), // Q
+    ('025b6dc53bc61a2548ffb0f671472de6c9521a9d2d2534e65abfcbd5fe0c70'))
+    as IECPoint, // Q
     parameters);
     parameters);
 
 
   ecdsa.Init(false, pubKey);
   ecdsa.Init(false, pubKey);

+ 2 - 1
CryptoLib.Tests/src/Others/NamedCurveTests.pas

@@ -45,6 +45,7 @@ uses
   ClpIAsymmetricKeyParameter,
   ClpIAsymmetricKeyParameter,
   ClpIAsymmetricCipherKeyPairGenerator,
   ClpIAsymmetricCipherKeyPairGenerator,
   ClpIAsymmetricCipherKeyPair,
   ClpIAsymmetricCipherKeyPair,
+  ClpIECKeyGenerationParameters,
   ClpCryptoLibTypes;
   ClpCryptoLibTypes;
 
 
 resourcestring
 resourcestring
@@ -89,7 +90,7 @@ begin
   g := TECKeyPairGenerator.Create('ECDSA');
   g := TECKeyPairGenerator.Create('ECDSA');
 
 
   g.Init(TECKeyGenerationParameters.Create(ecSpec, TSecureRandom.Create()
   g.Init(TECKeyGenerationParameters.Create(ecSpec, TSecureRandom.Create()
-    as ISecureRandom));
+    as ISecureRandom) as IECKeyGenerationParameters);
 
 
   sgr := TSignerUtilities.GetSigner('ECDSA');
   sgr := TSignerUtilities.GetSigner('ECDSA');
   pair := g.GenerateKeyPair();
   pair := g.GenerateKeyPair();

+ 1 - 1
CryptoLib.Tests/src/Others/SignerUtilitiesTests.pas

@@ -130,7 +130,7 @@ begin
 
 
   FecDomain := TECDomainParameters.Create(Fcurve,
   FecDomain := TECDomainParameters.Create(Fcurve,
     TFpPoint.Create(Fcurve, Fcurve.FromBigInteger(FECParraGX),
     TFpPoint.Create(Fcurve, Fcurve.FromBigInteger(FECParraGX),
-    Fcurve.FromBigInteger(FECParraGY)), FECParraN);
+    Fcurve.FromBigInteger(FECParraGY)) as IFpPoint, FECParraN);
 
 
   FecPub := TECPublicKeyParameters.Create(TFpPoint.Create(Fcurve,
   FecPub := TECPublicKeyParameters.Create(TFpPoint.Create(Fcurve,
     Fcurve.FromBigInteger(FECPubQX), Fcurve.FromBigInteger(FECPubQY))
     Fcurve.FromBigInteger(FECPubQX), Fcurve.FromBigInteger(FECPubQY))

+ 10 - 0
CryptoLib/src/Math/EC/ClpECAlgorithms.pas

@@ -259,6 +259,11 @@ begin
   result := ImplShamirsTrickWNaf(preCompP, preCompNegP, wnafP, preCompQ,
   result := ImplShamirsTrickWNaf(preCompP, preCompNegP, wnafP, preCompQ,
     preCompNegQ, wnafQ);
     preCompNegQ, wnafQ);
 
 
+  infoP.PreComp := Nil;
+  infoP.PreCompNeg := Nil;
+  infoQ.PreComp := Nil;
+  infoQ.PreCompNeg := Nil;
+
 end;
 end;
 
 
 class function TECAlgorithms.ImplShamirsTrickWNaf(const P: IECPoint;
 class function TECAlgorithms.ImplShamirsTrickWNaf(const P: IECPoint;
@@ -324,6 +329,10 @@ begin
 
 
   result := ImplShamirsTrickWNaf(preCompP, preCompNegP, wnafP, preCompQ,
   result := ImplShamirsTrickWNaf(preCompP, preCompNegP, wnafP, preCompQ,
     preCompNegQ, wnafQ);
     preCompNegQ, wnafQ);
+  infoP.PreComp := Nil;
+  infoP.PreCompNeg := Nil;
+  infoQ.PreComp := Nil;
+  infoQ.PreCompNeg := Nil;
 end;
 end;
 
 
 class function TECAlgorithms.ImplShamirsTrickWNaf(preCompP,
 class function TECAlgorithms.ImplShamirsTrickWNaf(preCompP,
@@ -465,6 +474,7 @@ begin
   end;
   end;
 
 
   result := ImplSumOfMultiplies(negs, infos, wnafs);
   result := ImplSumOfMultiplies(negs, infos, wnafs);
+
 end;
 end;
 
 
 class function TECAlgorithms.ImplSumOfMultiplies
 class function TECAlgorithms.ImplSumOfMultiplies

+ 1 - 0
CryptoLib/src/Math/EC/ClpScaleXPointMap.pas

@@ -43,6 +43,7 @@ implementation
 
 
 constructor TScaleXPointMap.Create(const scale: IECFieldElement);
 constructor TScaleXPointMap.Create(const scale: IECFieldElement);
 begin
 begin
+  Inherited Create();
   Fscale := scale;
   Fscale := scale;
 end;
 end;
 
 

+ 7 - 0
CryptoLib/src/Math/EC/Endo/ClpGlvTypeBEndomorphism.pas

@@ -50,6 +50,7 @@ type
   public
   public
     constructor Create(const curve: IECCurve;
     constructor Create(const curve: IECCurve;
       const parameters: IGlvTypeBParameters);
       const parameters: IGlvTypeBParameters);
+    destructor Destroy; override;
     function DecomposeScalar(const k: TBigInteger)
     function DecomposeScalar(const k: TBigInteger)
       : TCryptoLibGenericArray<TBigInteger>; virtual;
       : TCryptoLibGenericArray<TBigInteger>; virtual;
 
 
@@ -88,6 +89,7 @@ end;
 constructor TGlvTypeBEndomorphism.Create(const curve: IECCurve;
 constructor TGlvTypeBEndomorphism.Create(const curve: IECCurve;
   const parameters: IGlvTypeBParameters);
   const parameters: IGlvTypeBParameters);
 begin
 begin
+  Inherited Create();
   Fm_curve := curve;
   Fm_curve := curve;
   Fm_parameters := parameters;
   Fm_parameters := parameters;
   Fm_pointMap := TScaleXPointMap.Create(curve.FromBigInteger(parameters.Beta));
   Fm_pointMap := TScaleXPointMap.Create(curve.FromBigInteger(parameters.Beta));
@@ -112,6 +114,11 @@ begin
   Result := TCryptoLibGenericArray<TBigInteger>.Create(a, b);
   Result := TCryptoLibGenericArray<TBigInteger>.Create(a, b);
 end;
 end;
 
 
+destructor TGlvTypeBEndomorphism.Destroy;
+begin
+  inherited Destroy;
+end;
+
 function TGlvTypeBEndomorphism.GetHasEfficientPointMap: Boolean;
 function TGlvTypeBEndomorphism.GetHasEfficientPointMap: Boolean;
 begin
 begin
   Result := true;
   Result := true;

+ 7 - 0
CryptoLib/src/Math/EC/Endo/ClpGlvTypeBParameters.pas

@@ -48,6 +48,8 @@ type
       v1, v2: TCryptoLibGenericArray<TBigInteger>; const g1, g2: TBigInteger;
       v1, v2: TCryptoLibGenericArray<TBigInteger>; const g1, g2: TBigInteger;
       bits: Int32);
       bits: Int32);
 
 
+    destructor Destroy; override;
+
     property beta: TBigInteger read GetBeta;
     property beta: TBigInteger read GetBeta;
     property lambda: TBigInteger read GetLambda;
     property lambda: TBigInteger read GetLambda;
     property v1: TCryptoLibGenericArray<TBigInteger> read GetV1;
     property v1: TCryptoLibGenericArray<TBigInteger> read GetV1;
@@ -75,6 +77,11 @@ begin
   Fm_bits := bits;
   Fm_bits := bits;
 end;
 end;
 
 
+destructor TGlvTypeBParameters.Destroy;
+begin
+  inherited Destroy;
+end;
+
 function TGlvTypeBParameters.GetBeta: TBigInteger;
 function TGlvTypeBParameters.GetBeta: TBigInteger;
 begin
 begin
   Result := Fm_beta;
   Result := Fm_beta;

+ 15 - 0
CryptoLib/src/Math/EC/Multiplier/ClpFixedPointCombMultiplier.pas

@@ -43,12 +43,26 @@ type
       : IECPoint; override;
       : IECPoint; override;
     function GetWidthForCombSize(combSize: Int32): Int32; virtual;
     function GetWidthForCombSize(combSize: Int32): Int32; virtual;
 
 
+  public
+    constructor Create();
+    destructor Destroy; override;
+
   end;
   end;
 
 
 implementation
 implementation
 
 
 { TFixedPointCombMultiplier }
 { TFixedPointCombMultiplier }
 
 
+constructor TFixedPointCombMultiplier.Create;
+begin
+  Inherited Create();
+end;
+
+destructor TFixedPointCombMultiplier.Destroy;
+begin
+  inherited Destroy;
+end;
+
 function TFixedPointCombMultiplier.GetWidthForCombSize(combSize: Int32): Int32;
 function TFixedPointCombMultiplier.GetWidthForCombSize(combSize: Int32): Int32;
 begin
 begin
   if (combSize > 257) then
   if (combSize > 257) then
@@ -119,6 +133,7 @@ begin
   end;
   end;
 
 
   Result := R.Add(info.Offset);
   Result := R.Add(info.Offset);
+  info.PreComp := Nil;
 
 
 end;
 end;
 
 

+ 3 - 0
CryptoLib/src/Math/EC/Multiplier/ClpWNafL2RMultiplier.pas

@@ -183,6 +183,9 @@ begin
 
 
   Result := R;
   Result := R;
 
 
+  wnafPreCompInfo.preComp := Nil;
+  wnafPreCompInfo.PreCompNeg := Nil;
+
 end;
 end;
 
 
 end.
 end.

+ 15 - 0
CryptoLib/src/Math/EC/Multiplier/ClpWTauNafMultiplier.pas

@@ -88,12 +88,26 @@ type
     function MultiplyPositive(const point: IECPoint; const k: TBigInteger)
     function MultiplyPositive(const point: IECPoint; const k: TBigInteger)
       : IECPoint; override;
       : IECPoint; override;
 
 
+  public
+    constructor Create();
+    destructor Destroy; override;
+
   end;
   end;
 
 
 implementation
 implementation
 
 
 { TWTauNafMultiplier }
 { TWTauNafMultiplier }
 
 
+constructor TWTauNafMultiplier.Create;
+begin
+  Inherited Create();
+end;
+
+destructor TWTauNafMultiplier.Destroy;
+begin
+  inherited Destroy;
+end;
+
 class function TWTauNafMultiplier.MultiplyFromWTnaf(const p: IAbstractF2mPoint;
 class function TWTauNafMultiplier.MultiplyFromWTnaf(const p: IAbstractF2mPoint;
   u: TCryptoLibShortIntArray; const preCompInfo: IPreCompInfo)
   u: TCryptoLibShortIntArray; const preCompInfo: IPreCompInfo)
   : IAbstractF2mPoint;
   : IAbstractF2mPoint;
@@ -162,6 +176,7 @@ begin
     q := q.TauPow(tauCount);
     q := q.TauPow(tauCount);
   end;
   end;
   result := q;
   result := q;
+
 end;
 end;
 
 
 function TWTauNafMultiplier.MultiplyWTnaf(const p: IAbstractF2mPoint;
 function TWTauNafMultiplier.MultiplyWTnaf(const p: IAbstractF2mPoint;