Browse Source

minor update

Ugochukwu Mmaduekwe 6 years ago
parent
commit
efce751ed9

+ 5 - 6
CryptoLib/src/Crypto/Agreement/ClpECDHBasicAgreement.pas

@@ -53,10 +53,10 @@ type
   /// used with the schemes ECKAS-DH1 and <br />DL/ECKAS-DH2. It assumes that
   /// the input keys are valid (see also <br />Section 7.2.2). <br />
   /// </summary>
-  TECDHBasicAgreement = class(TInterfacedObject, IECDHBasicAgreement,
+  TECDHBasicAgreement = class sealed(TInterfacedObject, IECDHBasicAgreement,
     IBasicAgreement)
 
-  strict protected
+  strict private
   var
     FprivKey: IECPrivateKeyParameters;
 
@@ -64,19 +64,18 @@ type
     /// <summary>
     /// initialise the agreement engine.
     /// </summary>
-    procedure Init(const parameters: ICipherParameters); virtual;
+    procedure Init(const parameters: ICipherParameters);
 
     /// <summary>
     /// return the field size for the agreement algorithm in bytes.
     /// </summary>
-    function GetFieldSize(): Int32; virtual;
+    function GetFieldSize(): Int32;
 
     /// <summary>
     /// given a public key from a given party calculate the next message
     /// in the agreement sequence.
     /// </summary>
-    function CalculateAgreement(const pubKey: ICipherParameters)
-      : TBigInteger; virtual;
+    function CalculateAgreement(const pubKey: ICipherParameters): TBigInteger;
 
   end;
 

+ 5 - 6
CryptoLib/src/Crypto/Agreement/ClpECDHCBasicAgreement.pas

@@ -58,10 +58,10 @@ type
   /// (if you want that just use ECDHBasicAgreement and note they both
   /// implement <br />BasicAgreement!). <br />
   /// </summary>
-  TECDHCBasicAgreement = class(TInterfacedObject, IECDHCBasicAgreement,
+  TECDHCBasicAgreement = class sealed(TInterfacedObject, IECDHCBasicAgreement,
     IBasicAgreement)
 
-  strict protected
+  strict private
   var
     FprivKey: IECPrivateKeyParameters;
 
@@ -69,19 +69,18 @@ type
     /// <summary>
     /// initialise the agreement engine.
     /// </summary>
-    procedure Init(const parameters: ICipherParameters); virtual;
+    procedure Init(const parameters: ICipherParameters);
 
     /// <summary>
     /// return the field size for the agreement algorithm in bytes.
     /// </summary>
-    function GetFieldSize(): Int32; virtual;
+    function GetFieldSize(): Int32;
 
     /// <summary>
     /// given a public key from a given party calculate the next message
     /// in the agreement sequence.
     /// </summary>
-    function CalculateAgreement(const pubKey: ICipherParameters)
-      : TBigInteger; virtual;
+    function CalculateAgreement(const pubKey: ICipherParameters): TBigInteger;
 
   end;
 

+ 5 - 4
CryptoLib/src/Crypto/Agreement/ClpX25519Agreement.pas

@@ -36,17 +36,18 @@ resourcestring
     'The Init Parameter does not Contain the Private Key';
 
 type
-  TX25519Agreement = class(TInterfacedObject, IX25519Agreement, IRawAgreement)
+  TX25519Agreement = class sealed(TInterfacedObject, IX25519Agreement,
+    IRawAgreement)
 
-  strict protected
+  strict private
   var
     FPrivateKey: IX25519PrivateKeyParameters;
 
-    function GetAgreementSize(): Int32; virtual;
+    function GetAgreementSize(): Int32;
 
   public
 
-    procedure Init(const parameters: ICipherParameters); virtual;
+    procedure Init(const parameters: ICipherParameters);
 
     procedure CalculateAgreement(const publicKey: ICipherParameters;
       const buf: TCryptoLibByteArray; off: Int32);

+ 8 - 0
CryptoLib/src/Security/ClpAgreementUtilities.pas

@@ -25,6 +25,8 @@ uses
   SysUtils,
   Generics.Collections,
   ClpIBasicAgreement,
+  ClpDHBasicAgreement,
+  ClpIDHBasicAgreement,
   ClpECDHBasicAgreement,
   ClpIECDHBasicAgreement,
   ClpECDHCBasicAgreement,
@@ -129,6 +131,12 @@ var
 begin
   mechanism := GetMechanism(algorithm);
 
+  if ((mechanism = 'DH') or (mechanism = 'DIFFIEHELLMAN')) then
+  begin
+    result := TDHBasicAgreement.Create() as IDHBasicAgreement;
+    Exit;
+  end;
+
   if (mechanism = 'ECDH') then
   begin
     result := TECDHBasicAgreement.Create() as IECDHBasicAgreement;

+ 9 - 0
CryptoLib/src/Security/ClpGeneratorUtilities.pas

@@ -31,6 +31,8 @@ uses
   ClpIAsn1Objects,
   ClpDsaKeyPairGenerator,
   ClpIDsaKeyPairGenerator,
+  ClpDHKeyPairGenerator,
+  ClpIDHKeyPairGenerator,
   ClpEd25519KeyPairGenerator,
   ClpIEd25519KeyPairGenerator,
   ClpEd25519Blake2BKeyPairGenerator,
@@ -254,6 +256,7 @@ begin
   // key pair generators.
   //
 
+  AddKpgAlgorithm('DH', ['DIFFIEHELLMAN']);
   AddKpgAlgorithm('DSA', []);
   AddKpgAlgorithm('ECDH', ['ECIES']);
   AddKpgAlgorithm('ECDHC', []);
@@ -385,6 +388,12 @@ begin
       (@SKeyPairGeneratorAlgorithmNotRecognised, [algorithm]);
   end;
 
+  if (canonicalName = 'DH') then
+  begin
+    result := TDHKeyPairGenerator.Create() as IDHKeyPairGenerator;
+    Exit;
+  end;
+
   if (canonicalName = 'DSA') then
   begin
     result := TDsaKeyPairGenerator.Create() as IDsaKeyPairGenerator;