浏览代码

some refactorings for Ed25519

Ugochukwu Mmaduekwe 6 年之前
父节点
当前提交
31102d59bd
共有 33 个文件被更改,包括 314 次插入1735 次删除
  1. 0 16
      CryptoLib.Tests/Delphi.Tests/CryptoLib.Tests.TestInsight.dpr
  2. 0 16
      CryptoLib.Tests/Delphi.Tests/CryptoLib.Tests.dpr
  3. 16 18
      CryptoLib.Tests/src/Others/Ed25519HigherLevelTests.pas
  4. 1 0
      CryptoLib/src/Asn1/Pkcs/ClpPkcsObjectIdentifiers.pas
  5. 0 71
      CryptoLib/src/Crypto/Generators/ClpEd25519Blake2BKeyPairGenerator.pas
  6. 10 1
      CryptoLib/src/Crypto/Generators/ClpEd25519KeyPairGenerator.pas
  7. 1 0
      CryptoLib/src/Crypto/Generators/ClpKdf1BytesGenerator.pas
  8. 0 48
      CryptoLib/src/Crypto/Parameters/ClpEd25519Blake2BKeyGenerationParameters.pas
  9. 0 212
      CryptoLib/src/Crypto/Parameters/ClpEd25519Blake2BPrivateKeyParameters.pas
  10. 0 119
      CryptoLib/src/Crypto/Parameters/ClpEd25519Blake2BPublicKeyParameters.pas
  11. 24 16
      CryptoLib/src/Crypto/Parameters/ClpEd25519PrivateKeyParameters.pas
  12. 0 194
      CryptoLib/src/Crypto/Signers/ClpEd25519Blake2BSigner.pas
  13. 0 197
      CryptoLib/src/Crypto/Signers/ClpEd25519CtxBlake2BSigner.pas
  14. 6 4
      CryptoLib/src/Crypto/Signers/ClpEd25519CtxSigner.pas
  15. 0 178
      CryptoLib/src/Crypto/Signers/ClpEd25519PhBlake2BSigner.pas
  16. 5 3
      CryptoLib/src/Crypto/Signers/ClpEd25519PhSigner.pas
  17. 3 3
      CryptoLib/src/Crypto/Signers/ClpEd25519Signer.pas
  18. 9 0
      CryptoLib/src/Interfaces/ClpIEd25519.pas
  19. 0 35
      CryptoLib/src/Interfaces/ClpIEd25519Blake2B.pas
  20. 0 35
      CryptoLib/src/Interfaces/ClpIEd25519Blake2BKeyGenerationParameters.pas
  21. 0 35
      CryptoLib/src/Interfaces/ClpIEd25519Blake2BKeyPairGenerator.pas
  22. 0 49
      CryptoLib/src/Interfaces/ClpIEd25519Blake2BPrivateKeyParameters.pas
  23. 0 41
      CryptoLib/src/Interfaces/ClpIEd25519Blake2BPublicKeyParameters.pas
  24. 0 36
      CryptoLib/src/Interfaces/ClpIEd25519Blake2BSigner.pas
  25. 0 36
      CryptoLib/src/Interfaces/ClpIEd25519CtxBlake2BSigner.pas
  26. 0 36
      CryptoLib/src/Interfaces/ClpIEd25519PhBlake2BSigner.pas
  27. 38 0
      CryptoLib/src/Math/EC/Rfc8032/ClpEd25519.pas
  28. 0 48
      CryptoLib/src/Math/EC/Rfc8032/ClpEd25519Blake2B.pas
  29. 0 16
      CryptoLib/src/Packages/Delphi/CryptoLib4PascalPackage.dpk
  30. 170 234
      CryptoLib/src/Packages/FPC/CryptoLib4PascalPackage.lpk
  31. 11 19
      CryptoLib/src/Packages/FPC/CryptoLib4PascalPackage.pas
  32. 6 5
      CryptoLib/src/Security/ClpGeneratorUtilities.pas
  33. 14 14
      CryptoLib/src/Security/ClpSignerUtilities.pas

+ 0 - 16
CryptoLib.Tests/Delphi.Tests/CryptoLib.Tests.TestInsight.dpr

@@ -290,8 +290,6 @@ uses
   ClpX25519Field in '..\..\CryptoLib\src\Math\EC\Rfc7748\ClpX25519Field.pas',
   ClpEd25519 in '..\..\CryptoLib\src\Math\EC\Rfc8032\ClpEd25519.pas',
   ClpIEd25519 in '..\..\CryptoLib\src\Interfaces\ClpIEd25519.pas',
-  ClpEd25519Blake2B in '..\..\CryptoLib\src\Math\EC\Rfc8032\ClpEd25519Blake2B.pas',
-  ClpIEd25519Blake2B in '..\..\CryptoLib\src\Interfaces\ClpIEd25519Blake2B.pas',
   ClpSpeckLegacyEngine in '..\..\CryptoLib\src\Crypto\Engines\ClpSpeckLegacyEngine.pas',
   ClpISpeckLegacyEngine in '..\..\CryptoLib\src\Interfaces\ClpISpeckLegacyEngine.pas',
   ClpX25519 in '..\..\CryptoLib\src\Math\EC\Rfc7748\ClpX25519.pas',
@@ -305,36 +303,22 @@ uses
   ClpX25519PublicKeyParameters in '..\..\CryptoLib\src\Crypto\Parameters\ClpX25519PublicKeyParameters.pas',
   ClpIEd25519PrivateKeyParameters in '..\..\CryptoLib\src\Interfaces\ClpIEd25519PrivateKeyParameters.pas',
   ClpIEd25519PublicKeyParameters in '..\..\CryptoLib\src\Interfaces\ClpIEd25519PublicKeyParameters.pas',
-  ClpIEd25519Blake2BPublicKeyParameters in '..\..\CryptoLib\src\Interfaces\ClpIEd25519Blake2BPublicKeyParameters.pas',
-  ClpIEd25519Blake2BPrivateKeyParameters in '..\..\CryptoLib\src\Interfaces\ClpIEd25519Blake2BPrivateKeyParameters.pas',
   ClpEd25519PrivateKeyParameters in '..\..\CryptoLib\src\Crypto\Parameters\ClpEd25519PrivateKeyParameters.pas',
-  ClpEd25519Blake2BPrivateKeyParameters in '..\..\CryptoLib\src\Crypto\Parameters\ClpEd25519Blake2BPrivateKeyParameters.pas',
   ClpEd25519PublicKeyParameters in '..\..\CryptoLib\src\Crypto\Parameters\ClpEd25519PublicKeyParameters.pas',
-  ClpEd25519Blake2BPublicKeyParameters in '..\..\CryptoLib\src\Crypto\Parameters\ClpEd25519Blake2BPublicKeyParameters.pas',
   ClpX25519KeyPairGenerator in '..\..\CryptoLib\src\Crypto\Generators\ClpX25519KeyPairGenerator.pas',
   ClpIX25519KeyPairGenerator in '..\..\CryptoLib\src\Interfaces\ClpIX25519KeyPairGenerator.pas',
   ClpIEd25519KeyPairGenerator in '..\..\CryptoLib\src\Interfaces\ClpIEd25519KeyPairGenerator.pas',
-  ClpIEd25519Blake2BKeyPairGenerator in '..\..\CryptoLib\src\Interfaces\ClpIEd25519Blake2BKeyPairGenerator.pas',
   ClpEd25519KeyPairGenerator in '..\..\CryptoLib\src\Crypto\Generators\ClpEd25519KeyPairGenerator.pas',
-  ClpEd25519Blake2BKeyPairGenerator in '..\..\CryptoLib\src\Crypto\Generators\ClpEd25519Blake2BKeyPairGenerator.pas',
   ClpX25519KeyGenerationParameters in '..\..\CryptoLib\src\Crypto\Parameters\ClpX25519KeyGenerationParameters.pas',
   ClpIX25519KeyGenerationParameters in '..\..\CryptoLib\src\Interfaces\ClpIX25519KeyGenerationParameters.pas',
   ClpIEd25519KeyGenerationParameters in '..\..\CryptoLib\src\Interfaces\ClpIEd25519KeyGenerationParameters.pas',
-  ClpIEd25519Blake2BKeyGenerationParameters in '..\..\CryptoLib\src\Interfaces\ClpIEd25519Blake2BKeyGenerationParameters.pas',
   ClpEd25519KeyGenerationParameters in '..\..\CryptoLib\src\Crypto\Parameters\ClpEd25519KeyGenerationParameters.pas',
-  ClpEd25519Blake2BKeyGenerationParameters in '..\..\CryptoLib\src\Crypto\Parameters\ClpEd25519Blake2BKeyGenerationParameters.pas',
   ClpIEd25519Signer in '..\..\CryptoLib\src\Interfaces\ClpIEd25519Signer.pas',
   ClpEd25519Signer in '..\..\CryptoLib\src\Crypto\Signers\ClpEd25519Signer.pas',
-  ClpIEd25519Blake2BSigner in '..\..\CryptoLib\src\Interfaces\ClpIEd25519Blake2BSigner.pas',
-  ClpEd25519Blake2BSigner in '..\..\CryptoLib\src\Crypto\Signers\ClpEd25519Blake2BSigner.pas',
-  ClpIEd25519CtxBlake2BSigner in '..\..\CryptoLib\src\Interfaces\ClpIEd25519CtxBlake2BSigner.pas',
   ClpEd25519CtxSigner in '..\..\CryptoLib\src\Crypto\Signers\ClpEd25519CtxSigner.pas',
   ClpIEd25519CtxSigner in '..\..\CryptoLib\src\Interfaces\ClpIEd25519CtxSigner.pas',
-  ClpEd25519CtxBlake2BSigner in '..\..\CryptoLib\src\Crypto\Signers\ClpEd25519CtxBlake2BSigner.pas',
   ClpIEd25519PhSigner in '..\..\CryptoLib\src\Interfaces\ClpIEd25519PhSigner.pas',
-  ClpIEd25519PhBlake2BSigner in '..\..\CryptoLib\src\Interfaces\ClpIEd25519PhBlake2BSigner.pas',
   ClpEd25519PhSigner in '..\..\CryptoLib\src\Crypto\Signers\ClpEd25519PhSigner.pas',
-  ClpEd25519PhBlake2BSigner in '..\..\CryptoLib\src\Crypto\Signers\ClpEd25519PhBlake2BSigner.pas',
   ClpTeleTrusTNamedCurves in '..\..\CryptoLib\src\Asn1\TeleTrust\ClpTeleTrusTNamedCurves.pas',
   ClpAgreementUtilities in '..\..\CryptoLib\src\Security\ClpAgreementUtilities.pas',
   ClpKdf1BytesGenerator in '..\..\CryptoLib\src\Crypto\Generators\ClpKdf1BytesGenerator.pas',

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

@@ -293,8 +293,6 @@ uses
   ClpX25519Field in '..\..\CryptoLib\src\Math\EC\Rfc7748\ClpX25519Field.pas',
   ClpEd25519 in '..\..\CryptoLib\src\Math\EC\Rfc8032\ClpEd25519.pas',
   ClpIEd25519 in '..\..\CryptoLib\src\Interfaces\ClpIEd25519.pas',
-  ClpEd25519Blake2B in '..\..\CryptoLib\src\Math\EC\Rfc8032\ClpEd25519Blake2B.pas',
-  ClpIEd25519Blake2B in '..\..\CryptoLib\src\Interfaces\ClpIEd25519Blake2B.pas',
   ClpSpeckLegacyEngine in '..\..\CryptoLib\src\Crypto\Engines\ClpSpeckLegacyEngine.pas',
   ClpISpeckLegacyEngine in '..\..\CryptoLib\src\Interfaces\ClpISpeckLegacyEngine.pas',
   ClpX25519 in '..\..\CryptoLib\src\Math\EC\Rfc7748\ClpX25519.pas',
@@ -308,36 +306,22 @@ uses
   ClpX25519PublicKeyParameters in '..\..\CryptoLib\src\Crypto\Parameters\ClpX25519PublicKeyParameters.pas',
   ClpIEd25519PrivateKeyParameters in '..\..\CryptoLib\src\Interfaces\ClpIEd25519PrivateKeyParameters.pas',
   ClpIEd25519PublicKeyParameters in '..\..\CryptoLib\src\Interfaces\ClpIEd25519PublicKeyParameters.pas',
-  ClpIEd25519Blake2BPublicKeyParameters in '..\..\CryptoLib\src\Interfaces\ClpIEd25519Blake2BPublicKeyParameters.pas',
-  ClpIEd25519Blake2BPrivateKeyParameters in '..\..\CryptoLib\src\Interfaces\ClpIEd25519Blake2BPrivateKeyParameters.pas',
   ClpEd25519PrivateKeyParameters in '..\..\CryptoLib\src\Crypto\Parameters\ClpEd25519PrivateKeyParameters.pas',
-  ClpEd25519Blake2BPrivateKeyParameters in '..\..\CryptoLib\src\Crypto\Parameters\ClpEd25519Blake2BPrivateKeyParameters.pas',
   ClpEd25519PublicKeyParameters in '..\..\CryptoLib\src\Crypto\Parameters\ClpEd25519PublicKeyParameters.pas',
-  ClpEd25519Blake2BPublicKeyParameters in '..\..\CryptoLib\src\Crypto\Parameters\ClpEd25519Blake2BPublicKeyParameters.pas',
   ClpX25519KeyPairGenerator in '..\..\CryptoLib\src\Crypto\Generators\ClpX25519KeyPairGenerator.pas',
   ClpIX25519KeyPairGenerator in '..\..\CryptoLib\src\Interfaces\ClpIX25519KeyPairGenerator.pas',
   ClpIEd25519KeyPairGenerator in '..\..\CryptoLib\src\Interfaces\ClpIEd25519KeyPairGenerator.pas',
-  ClpIEd25519Blake2BKeyPairGenerator in '..\..\CryptoLib\src\Interfaces\ClpIEd25519Blake2BKeyPairGenerator.pas',
   ClpEd25519KeyPairGenerator in '..\..\CryptoLib\src\Crypto\Generators\ClpEd25519KeyPairGenerator.pas',
-  ClpEd25519Blake2BKeyPairGenerator in '..\..\CryptoLib\src\Crypto\Generators\ClpEd25519Blake2BKeyPairGenerator.pas',
   ClpX25519KeyGenerationParameters in '..\..\CryptoLib\src\Crypto\Parameters\ClpX25519KeyGenerationParameters.pas',
   ClpIX25519KeyGenerationParameters in '..\..\CryptoLib\src\Interfaces\ClpIX25519KeyGenerationParameters.pas',
   ClpIEd25519KeyGenerationParameters in '..\..\CryptoLib\src\Interfaces\ClpIEd25519KeyGenerationParameters.pas',
-  ClpIEd25519Blake2BKeyGenerationParameters in '..\..\CryptoLib\src\Interfaces\ClpIEd25519Blake2BKeyGenerationParameters.pas',
   ClpEd25519KeyGenerationParameters in '..\..\CryptoLib\src\Crypto\Parameters\ClpEd25519KeyGenerationParameters.pas',
-  ClpEd25519Blake2BKeyGenerationParameters in '..\..\CryptoLib\src\Crypto\Parameters\ClpEd25519Blake2BKeyGenerationParameters.pas',
   ClpIEd25519Signer in '..\..\CryptoLib\src\Interfaces\ClpIEd25519Signer.pas',
   ClpEd25519Signer in '..\..\CryptoLib\src\Crypto\Signers\ClpEd25519Signer.pas',
-  ClpIEd25519Blake2BSigner in '..\..\CryptoLib\src\Interfaces\ClpIEd25519Blake2BSigner.pas',
-  ClpEd25519Blake2BSigner in '..\..\CryptoLib\src\Crypto\Signers\ClpEd25519Blake2BSigner.pas',
-  ClpIEd25519CtxBlake2BSigner in '..\..\CryptoLib\src\Interfaces\ClpIEd25519CtxBlake2BSigner.pas',
   ClpEd25519CtxSigner in '..\..\CryptoLib\src\Crypto\Signers\ClpEd25519CtxSigner.pas',
   ClpIEd25519CtxSigner in '..\..\CryptoLib\src\Interfaces\ClpIEd25519CtxSigner.pas',
-  ClpEd25519CtxBlake2BSigner in '..\..\CryptoLib\src\Crypto\Signers\ClpEd25519CtxBlake2BSigner.pas',
   ClpIEd25519PhSigner in '..\..\CryptoLib\src\Interfaces\ClpIEd25519PhSigner.pas',
-  ClpIEd25519PhBlake2BSigner in '..\..\CryptoLib\src\Interfaces\ClpIEd25519PhBlake2BSigner.pas',
   ClpEd25519PhSigner in '..\..\CryptoLib\src\Crypto\Signers\ClpEd25519PhSigner.pas',
-  ClpEd25519PhBlake2BSigner in '..\..\CryptoLib\src\Crypto\Signers\ClpEd25519PhBlake2BSigner.pas',
   ClpTeleTrusTNamedCurves in '..\..\CryptoLib\src\Asn1\TeleTrust\ClpTeleTrusTNamedCurves.pas',
   ClpAgreementUtilities in '..\..\CryptoLib\src\Security\ClpAgreementUtilities.pas',
   ClpKdf1BytesGenerator in '..\..\CryptoLib\src\Crypto\Generators\ClpKdf1BytesGenerator.pas',

+ 16 - 18
CryptoLib.Tests/src/Others/Ed25519HigherLevelTests.pas

@@ -36,6 +36,7 @@ uses
   ClpISecureRandom,
   ClpISigner,
   ClpEd25519,
+  ClpIEd25519,
   ClpEd25519Signer,
   ClpIEd25519Signer,
   ClpEd25519CtxSigner,
@@ -44,12 +45,8 @@ uses
   ClpIEd25519PhSigner,
   ClpIEd25519PrivateKeyParameters,
   ClpIEd25519PublicKeyParameters,
-  ClpIEd25519Blake2BPrivateKeyParameters,
-  ClpIEd25519Blake2BPublicKeyParameters,
   ClpEd25519PrivateKeyParameters,
   ClpEd25519PublicKeyParameters,
-  ClpEd25519Blake2BPrivateKeyParameters,
-  ClpEd25519Blake2BPublicKeyParameters,
   ClpIAsymmetricCipherKeyPair,
   ClpAsymmetricCipherKeyPair,
   ClpEd25519KeyPairGenerator,
@@ -119,11 +116,14 @@ function TTestEd25519HigherLevel.CreateSigner
 begin
   case algorithm of
     TEd25519.TEd25519Algorithm.Ed25519:
-      Result := TEd25519Signer.Create() as IEd25519Signer;
+      Result := TEd25519Signer.Create(TEd25519.Create() as IEd25519)
+        as IEd25519Signer;
     TEd25519.TEd25519Algorithm.Ed25519ctx:
-      Result := TEd25519CtxSigner.Create(context) as IEd25519CtxSigner;
+      Result := TEd25519CtxSigner.Create(TEd25519.Create() as IEd25519, context)
+        as IEd25519CtxSigner;
     TEd25519.TEd25519Algorithm.Ed25519ph:
-      Result := TEd25519PhSigner.Create(context) as IEd25519PhSigner;
+      Result := TEd25519PhSigner.Create(TEd25519.Create() as IEd25519, context)
+        as IEd25519PhSigner;
   else
     begin
       raise EArgumentCryptoLibException.Create('algorithm');
@@ -167,8 +167,7 @@ begin
       end;
     TTestEd25519HigherLevel.TEd25519SignerAlgorithm.Ed25519Blake2B:
       begin
-        LKey := (LKeyPair.Private as IEd25519Blake2BPrivateKeyParameters)
-          .GetEncoded();
+        LKey := (LKeyPair.Private as IEd25519PrivateKeyParameters).GetEncoded();
         if not AreEqual(LKey, System.Copy(LSk, 0, 32)) then
         begin
           Fail(Format
@@ -176,8 +175,7 @@ begin
             [id, EncodeHex(LSk), EncodeHex(LKey)]));
         end;
 
-        LKey := (LKeyPair.Public as IEd25519Blake2BPublicKeyParameters)
-          .GetEncoded();
+        LKey := (LKeyPair.Public as IEd25519PublicKeyParameters).GetEncoded();
         if not AreEqual(LKey, System.Copy(LPk, 0, 64)) then
         begin
           Fail(Format
@@ -227,7 +225,7 @@ var
   algorithmName: String;
   tempRand: Int32;
 begin
-  kpg := TEd25519KeyPairGenerator.Create();
+  kpg := TEd25519KeyPairGenerator.Create(TEd25519.Create() as IEd25519);
   kpg.Init(TEd25519KeyGenerationParameters.Create(FRandom)
     as IEd25519KeyGenerationParameters);
 
@@ -300,16 +298,16 @@ begin
         Result := TAsymmetricCipherKeyPair.Create
           (TEd25519PublicKeyParameters.Create(pk, 0)
           as IEd25519PublicKeyParameters,
-          TEd25519PrivateKeyParameters.Create(sk, 0)
-          as IEd25519PrivateKeyParameters);
+          TEd25519PrivateKeyParameters.Create(TEd25519.Create() as IEd25519, sk,
+          0) as IEd25519PrivateKeyParameters);
       end;
     TTestEd25519HigherLevel.TEd25519SignerAlgorithm.Ed25519Blake2B:
       begin
         Result := TAsymmetricCipherKeyPair.Create
-          (TEd25519Blake2BPublicKeyParameters.Create(pk, 0)
-          as IEd25519Blake2BPublicKeyParameters,
-          TEd25519Blake2BPrivateKeyParameters.Create(sk, 0)
-          as IEd25519Blake2BPrivateKeyParameters);
+          (TEd25519PublicKeyParameters.Create(pk, 0)
+          as IEd25519PublicKeyParameters,
+          TEd25519PrivateKeyParameters.Create(TEd25519Blake2B.Create()
+          as IEd25519Blake2B, sk, 0) as IEd25519PrivateKeyParameters);
       end
   else
     begin

+ 1 - 0
CryptoLib/src/Asn1/Pkcs/ClpPkcsObjectIdentifiers.pas

@@ -182,3 +182,4 @@ begin
 end;
 
 end.
+

+ 0 - 71
CryptoLib/src/Crypto/Generators/ClpEd25519Blake2BKeyPairGenerator.pas

@@ -1,71 +0,0 @@
-{ *********************************************************************************** }
-{ *                              CryptoLib Library                                  * }
-{ *                Copyright (c) 2018 - 20XX Ugochukwu Mmaduekwe                    * }
-{ *                 Github Repository <https://github.com/Xor-el>                   * }
-
-{ *  Distributed under the MIT software license, see the accompanying file LICENSE  * }
-{ *          or visit http://www.opensource.org/licenses/mit-license.php.           * }
-
-{ *                              Acknowledgements:                                  * }
-{ *                                                                                 * }
-{ *      Thanks to Sphere 10 Software (http://www.sphere10.com/) for sponsoring     * }
-{ *                           development of this library                           * }
-
-{ * ******************************************************************************* * }
-
-(* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *)
-
-unit ClpEd25519Blake2BKeyPairGenerator;
-
-{$I ..\..\Include\CryptoLib.inc}
-
-interface
-
-uses
-  ClpAsymmetricCipherKeyPair,
-  ClpIEd25519Blake2BKeyPairGenerator,
-  ClpIEd25519Blake2BPrivateKeyParameters,
-  ClpEd25519Blake2BPrivateKeyParameters,
-  ClpIEd25519Blake2BPublicKeyParameters,
-  ClpISecureRandom,
-  ClpIKeyGenerationParameters,
-  ClpIAsymmetricCipherKeyPair,
-  ClpIAsymmetricCipherKeyPairGenerator;
-
-type
-  TEd25519Blake2BKeyPairGenerator = class(TInterfacedObject,
-    IEd25519Blake2BKeyPairGenerator, IAsymmetricCipherKeyPairGenerator)
-
-  strict private
-  var
-    FRandom: ISecureRandom;
-
-  public
-    procedure Init(const parameters: IKeyGenerationParameters);
-
-    function GenerateKeyPair(): IAsymmetricCipherKeyPair;
-
-  end;
-
-implementation
-
-{ TEd25519Blake2BKeyPairGenerator }
-
-function TEd25519Blake2BKeyPairGenerator.GenerateKeyPair
-  : IAsymmetricCipherKeyPair;
-var
-  privateKey: IEd25519Blake2BPrivateKeyParameters;
-  publicKey: IEd25519Blake2BPublicKeyParameters;
-begin
-  privateKey := TEd25519Blake2BPrivateKeyParameters.Create(FRandom);
-  publicKey := privateKey.GeneratePublicKey();
-  result := TAsymmetricCipherKeyPair.Create(publicKey, privateKey);
-end;
-
-procedure TEd25519Blake2BKeyPairGenerator.Init(const parameters
-  : IKeyGenerationParameters);
-begin
-  FRandom := parameters.random;
-end;
-
-end.

+ 10 - 1
CryptoLib/src/Crypto/Generators/ClpEd25519KeyPairGenerator.pas

@@ -22,6 +22,7 @@ unit ClpEd25519KeyPairGenerator;
 interface
 
 uses
+  ClpIEd25519,
   ClpAsymmetricCipherKeyPair,
   ClpIEd25519KeyPairGenerator,
   ClpIEd25519PrivateKeyParameters,
@@ -39,8 +40,10 @@ type
   strict private
   var
     FRandom: ISecureRandom;
+    FEd25519Instance: IEd25519;
 
   public
+    constructor Create(const Ed25519Instance: IEd25519);
     procedure Init(const parameters: IKeyGenerationParameters);
 
     function GenerateKeyPair(): IAsymmetricCipherKeyPair;
@@ -51,12 +54,18 @@ implementation
 
 { TEd25519KeyPairGenerator }
 
+constructor TEd25519KeyPairGenerator.Create(const Ed25519Instance: IEd25519);
+begin
+  inherited Create();
+  FEd25519Instance := Ed25519Instance;
+end;
+
 function TEd25519KeyPairGenerator.GenerateKeyPair: IAsymmetricCipherKeyPair;
 var
   privateKey: IEd25519PrivateKeyParameters;
   publicKey: IEd25519PublicKeyParameters;
 begin
-  privateKey := TEd25519PrivateKeyParameters.Create(FRandom);
+  privateKey := TEd25519PrivateKeyParameters.Create(FEd25519Instance, FRandom);
   publicKey := privateKey.GeneratePublicKey();
   result := TAsymmetricCipherKeyPair.Create(publicKey, privateKey);
 end;

+ 1 - 0
CryptoLib/src/Crypto/Generators/ClpKdf1BytesGenerator.pas

@@ -61,3 +61,4 @@ begin
 end;
 
 end.
+

+ 0 - 48
CryptoLib/src/Crypto/Parameters/ClpEd25519Blake2BKeyGenerationParameters.pas

@@ -1,48 +0,0 @@
-{ *********************************************************************************** }
-{ *                              CryptoLib Library                                  * }
-{ *                Copyright (c) 2018 - 20XX Ugochukwu Mmaduekwe                    * }
-{ *                 Github Repository <https://github.com/Xor-el>                   * }
-
-{ *  Distributed under the MIT software license, see the accompanying file LICENSE  * }
-{ *          or visit http://www.opensource.org/licenses/mit-license.php.           * }
-
-{ *                              Acknowledgements:                                  * }
-{ *                                                                                 * }
-{ *      Thanks to Sphere 10 Software (http://www.sphere10.com/) for sponsoring     * }
-{ *                           development of this library                           * }
-
-{ * ******************************************************************************* * }
-
-(* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *)
-
-unit ClpEd25519Blake2BKeyGenerationParameters;
-
-{$I ..\..\Include\CryptoLib.inc}
-
-interface
-
-uses
-  ClpISecureRandom,
-  ClpIEd25519Blake2BKeyGenerationParameters,
-  ClpKeyGenerationParameters;
-
-type
-  TEd25519Blake2BKeyGenerationParameters = class sealed
-    (TKeyGenerationParameters, IEd25519Blake2BKeyGenerationParameters)
-
-  public
-    constructor Create(const random: ISecureRandom);
-
-  end;
-
-implementation
-
-{ TEd25519Blake2BKeyGenerationParameters }
-
-constructor TEd25519Blake2BKeyGenerationParameters.Create
-  (const random: ISecureRandom);
-begin
-  Inherited Create(random, 256);
-end;
-
-end.

+ 0 - 212
CryptoLib/src/Crypto/Parameters/ClpEd25519Blake2BPrivateKeyParameters.pas

@@ -1,212 +0,0 @@
-{ *********************************************************************************** }
-{ *                              CryptoLib Library                                  * }
-{ *                Copyright (c) 2018 - 20XX Ugochukwu Mmaduekwe                    * }
-{ *                 Github Repository <https://github.com/Xor-el>                   * }
-
-{ *  Distributed under the MIT software license, see the accompanying file LICENSE  * }
-{ *          or visit http://www.opensource.org/licenses/mit-license.php.           * }
-
-{ *                              Acknowledgements:                                  * }
-{ *                                                                                 * }
-{ *      Thanks to Sphere 10 Software (http://www.sphere10.com/) for sponsoring     * }
-{ *                           development of this library                           * }
-
-{ * ******************************************************************************* * }
-
-(* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *)
-
-unit ClpEd25519Blake2BPrivateKeyParameters;
-
-{$I ..\..\Include\CryptoLib.inc}
-
-interface
-
-uses
-  Classes,
-  ClpEd25519Blake2B,
-  ClpIEd25519Blake2B,
-  ClpISecureRandom,
-  ClpAsymmetricKeyParameter,
-  ClpIEd25519Blake2BPrivateKeyParameters,
-  ClpIEd25519Blake2BPublicKeyParameters,
-  ClpEd25519Blake2BPublicKeyParameters,
-  ClpArrayUtils,
-  ClpAsn1Objects,
-  ClpCryptoLibTypes;
-
-resourcestring
-  SEOFInPrivateKey = 'EOF encountered in middle of Ed25519Blake2B private key';
-  SUnsupportedAlgorithm = 'Unsupported Algorithm';
-  SCtxNotNil = 'Ctx must be Nil for Ed25519 Algorithm';
-  SMsgLen = 'MsgLen must be Equal to "PreHashSize" for Ed25519ph Algorithm';
-
-type
-  TEd25519Blake2BPrivateKeyParameters = class sealed(TAsymmetricKeyParameter,
-    IEd25519Blake2BPrivateKeyParameters)
-
-  strict private
-  var
-    FData: TCryptoLibByteArray;
-    FEd25519Blake2BInstance: IEd25519Blake2B;
-
-  public
-
-    const
-    KeySize = Int32(TEd25519Blake2B.SecretKeySize);
-    SignatureSize = Int32(TEd25519Blake2B.SignatureSize);
-
-    constructor Create(const random: ISecureRandom); overload;
-    constructor Create(const buf: TCryptoLibByteArray; off: Int32); overload;
-    constructor Create(input: TStream); overload;
-
-    procedure Encode(const buf: TCryptoLibByteArray; off: Int32); inline;
-    function GetEncoded(): TCryptoLibByteArray; inline;
-    function GeneratePublicKey(): IEd25519Blake2BPublicKeyParameters; inline;
-
-    procedure Sign(algorithm: TEd25519Blake2B.TEd25519Algorithm;
-      const publicKey: IEd25519Blake2BPublicKeyParameters;
-      const ctx, msg: TCryptoLibByteArray; msgOff, msgLen: Int32;
-      const sig: TCryptoLibByteArray; sigOff: Int32);
-
-    function Equals(const other: IEd25519Blake2BPrivateKeyParameters): Boolean;
-      reintroduce; overload;
-    function GetHashCode(): {$IFDEF DELPHI}Int32; {$ELSE}PtrInt;
-{$ENDIF DELPHI}override;
-
-  end;
-
-implementation
-
-{ TEd25519Blake2BPrivateKeyParameters }
-
-function TEd25519Blake2BPrivateKeyParameters.GeneratePublicKey
-  : IEd25519Blake2BPublicKeyParameters;
-var
-  publicKey: TCryptoLibByteArray;
-begin
-  System.SetLength(publicKey, TEd25519Blake2B.PublicKeySize);
-  FEd25519Blake2BInstance.GeneratePublicKey(FData, 0, publicKey, 0);
-  result := TEd25519Blake2BPublicKeyParameters.Create(publicKey, 0);
-end;
-
-function TEd25519Blake2BPrivateKeyParameters.GetEncoded: TCryptoLibByteArray;
-begin
-  result := System.Copy(FData);
-end;
-
-constructor TEd25519Blake2BPrivateKeyParameters.Create
-  (const random: ISecureRandom);
-begin
-  Inherited Create(true);
-  System.SetLength(FData, KeySize);
-  FEd25519Blake2BInstance := TEd25519Blake2B.Create();
-  FEd25519Blake2BInstance.GeneratePrivateKey(random, FData);
-end;
-
-constructor TEd25519Blake2BPrivateKeyParameters.Create
-  (const buf: TCryptoLibByteArray; off: Int32);
-begin
-  Inherited Create(true);
-  System.SetLength(FData, KeySize);
-  FEd25519Blake2BInstance := TEd25519Blake2B.Create();
-  System.Move(buf[off], FData[0], KeySize * System.SizeOf(Byte));
-end;
-
-constructor TEd25519Blake2BPrivateKeyParameters.Create(input: TStream);
-begin
-  Inherited Create(true);
-  System.SetLength(FData, KeySize);
-  FEd25519Blake2BInstance := TEd25519Blake2B.Create();
-  if (KeySize <> TStreamUtils.ReadFully(input, FData)) then
-  begin
-    raise EEndOfStreamCryptoLibException.CreateRes(@SEOFInPrivateKey);
-  end;
-end;
-
-procedure TEd25519Blake2BPrivateKeyParameters.Encode
-  (const buf: TCryptoLibByteArray; off: Int32);
-begin
-  System.Move(FData[0], buf[off], KeySize * System.SizeOf(Byte));
-end;
-
-function TEd25519Blake2BPrivateKeyParameters.Equals
-  (const other: IEd25519Blake2BPrivateKeyParameters): Boolean;
-begin
-  if (other = Self as IEd25519Blake2BPrivateKeyParameters) then
-  begin
-    result := true;
-    Exit;
-  end;
-
-  if (other = Nil) then
-  begin
-    result := false;
-    Exit;
-  end;
-  result := TArrayUtils.ConstantTimeAreEqual(FData, other.GetEncoded())
-end;
-
-function TEd25519Blake2BPrivateKeyParameters.GetHashCode: {$IFDEF DELPHI}Int32;
-{$ELSE}PtrInt;
-{$ENDIF DELPHI}
-begin
-  result := TArrayUtils.GetArrayHashCode(FData);
-end;
-
-procedure TEd25519Blake2BPrivateKeyParameters.Sign
-  (algorithm: TEd25519Blake2B.TEd25519Algorithm;
-  const publicKey: IEd25519Blake2BPublicKeyParameters;
-  const ctx, msg: TCryptoLibByteArray; msgOff, msgLen: Int32;
-  const sig: TCryptoLibByteArray; sigOff: Int32);
-var
-  pk: TCryptoLibByteArray;
-begin
-  System.SetLength(pk, TEd25519Blake2B.PublicKeySize);
-
-  if (publicKey = Nil) then
-  begin
-    FEd25519Blake2BInstance.GeneratePublicKey(FData, 0, pk, 0);
-  end
-  else
-  begin
-    publicKey.Encode(pk, 0);
-  end;
-
-  case algorithm of
-    TEd25519Blake2B.TEd25519Algorithm.Ed25519:
-      begin
-        if (ctx <> Nil) then
-        begin
-          raise EArgumentCryptoLibException.CreateRes(@SCtxNotNil);
-        end;
-
-        FEd25519Blake2BInstance.Sign(FData, 0, pk, 0, msg, msgOff, msgLen,
-          sig, sigOff);
-      end;
-
-    TEd25519Blake2B.TEd25519Algorithm.Ed25519ctx:
-      begin
-        FEd25519Blake2BInstance.Sign(FData, 0, pk, 0, ctx, msg, msgOff, msgLen,
-          sig, sigOff);
-      end;
-
-    TEd25519Blake2B.TEd25519Algorithm.Ed25519ph:
-      begin
-        if (TEd25519Blake2B.PreHashSize <> msgLen) then
-        begin
-          raise EArgumentCryptoLibException.CreateRes(@SMsgLen);
-        end;
-
-        FEd25519Blake2BInstance.SignPrehash(FData, 0, pk, 0, ctx, msg, msgOff,
-          sig, sigOff);
-      end
-  else
-    begin
-      raise EInvalidOperationCryptoLibException.CreateRes
-        (@SUnsupportedAlgorithm);
-    end;
-
-  end;
-end;
-
-end.

+ 0 - 119
CryptoLib/src/Crypto/Parameters/ClpEd25519Blake2BPublicKeyParameters.pas

@@ -1,119 +0,0 @@
-{ *********************************************************************************** }
-{ *                              CryptoLib Library                                  * }
-{ *                Copyright (c) 2018 - 20XX Ugochukwu Mmaduekwe                    * }
-{ *                 Github Repository <https://github.com/Xor-el>                   * }
-
-{ *  Distributed under the MIT software license, see the accompanying file LICENSE  * }
-{ *          or visit http://www.opensource.org/licenses/mit-license.php.           * }
-
-{ *                              Acknowledgements:                                  * }
-{ *                                                                                 * }
-{ *      Thanks to Sphere 10 Software (http://www.sphere10.com/) for sponsoring     * }
-{ *                           development of this library                           * }
-
-{ * ******************************************************************************* * }
-
-(* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *)
-
-unit ClpEd25519Blake2BPublicKeyParameters;
-
-{$I ..\..\Include\CryptoLib.inc}
-
-interface
-
-uses
-  Classes,
-  ClpEd25519Blake2B,
-  ClpAsymmetricKeyParameter,
-  ClpIEd25519Blake2BPublicKeyParameters,
-  ClpArrayUtils,
-  ClpAsn1Objects,
-  ClpCryptoLibTypes;
-
-resourcestring
-  SEOFInPublicKey = 'EOF encountered in middle of Ed25519Blake2B public key';
-
-type
-  TEd25519Blake2BPublicKeyParameters = class sealed(TAsymmetricKeyParameter,
-    IEd25519Blake2BPublicKeyParameters)
-
-  strict private
-  var
-    FData: TCryptoLibByteArray;
-
-  public
-
-    const
-    KeySize = Int32(TEd25519Blake2B.PublicKeySize);
-
-    constructor Create(const buf: TCryptoLibByteArray; off: Int32); overload;
-    constructor Create(input: TStream); overload;
-
-    procedure Encode(const buf: TCryptoLibByteArray; off: Int32); inline;
-    function GetEncoded(): TCryptoLibByteArray; inline;
-
-    function Equals(const other: IEd25519Blake2BPublicKeyParameters): Boolean;
-      reintroduce; overload;
-    function GetHashCode(): {$IFDEF DELPHI}Int32; {$ELSE}PtrInt;
-{$ENDIF DELPHI}override;
-
-  end;
-
-implementation
-
-{ TEd25519Blake2BPublicKeyParameters }
-
-function TEd25519Blake2BPublicKeyParameters.GetEncoded: TCryptoLibByteArray;
-begin
-  result := System.Copy(FData);
-end;
-
-constructor TEd25519Blake2BPublicKeyParameters.Create
-  (const buf: TCryptoLibByteArray; off: Int32);
-begin
-  Inherited Create(false);
-  System.SetLength(FData, KeySize);
-  System.Move(buf[off], FData[0], KeySize * System.SizeOf(Byte));
-end;
-
-constructor TEd25519Blake2BPublicKeyParameters.Create(input: TStream);
-begin
-  Inherited Create(false);
-  System.SetLength(FData, KeySize);
-  if (KeySize <> TStreamUtils.ReadFully(input, FData)) then
-  begin
-    raise EEndOfStreamCryptoLibException.CreateRes(@SEOFInPublicKey);
-  end;
-end;
-
-procedure TEd25519Blake2BPublicKeyParameters.Encode
-  (const buf: TCryptoLibByteArray; off: Int32);
-begin
-  System.Move(FData[0], buf[off], KeySize * System.SizeOf(Byte));
-end;
-
-function TEd25519Blake2BPublicKeyParameters.Equals
-  (const other: IEd25519Blake2BPublicKeyParameters): Boolean;
-begin
-  if (other = Self as IEd25519Blake2BPublicKeyParameters) then
-  begin
-    result := true;
-    Exit;
-  end;
-
-  if (other = Nil) then
-  begin
-    result := false;
-    Exit;
-  end;
-  result := TArrayUtils.ConstantTimeAreEqual(FData, other.GetEncoded())
-end;
-
-function TEd25519Blake2BPublicKeyParameters.GetHashCode: {$IFDEF DELPHI}Int32;
-{$ELSE}PtrInt;
-{$ENDIF DELPHI}
-begin
-  result := TArrayUtils.GetArrayHashCode(FData);
-end;
-
-end.

+ 24 - 16
CryptoLib/src/Crypto/Parameters/ClpEd25519PrivateKeyParameters.pas

@@ -35,10 +35,10 @@ uses
   ClpCryptoLibTypes;
 
 resourcestring
-  SEOFInPrivateKey = 'EOF encountered in middle of Ed25519 private key';
+  SEOFInPrivateKey = 'EOF encountered in middle of %s private key';
   SUnsupportedAlgorithm = 'Unsupported Algorithm';
-  SCtxNotNil = 'Ctx must be Nil for Ed25519 Algorithm';
-  SMsgLen = 'MsgLen must be Equal to "PreHashSize" for Ed25519ph Algorithm';
+  SCtxNotNil = 'Ctx must be Nil for %s Algorithm';
+  SMsgLen = 'MsgLen must be Equal to "PreHashSize" for %sph Algorithm';
 
 type
   TEd25519PrivateKeyParameters = class sealed(TAsymmetricKeyParameter,
@@ -55,9 +55,12 @@ type
     KeySize = Int32(TEd25519.SecretKeySize);
     SignatureSize = Int32(TEd25519.SignatureSize);
 
-    constructor Create(const random: ISecureRandom); overload;
-    constructor Create(const buf: TCryptoLibByteArray; off: Int32); overload;
-    constructor Create(input: TStream); overload;
+    constructor Create(const Ed25519Instance: IEd25519;
+      const random: ISecureRandom); overload;
+    constructor Create(const Ed25519Instance: IEd25519;
+      const buf: TCryptoLibByteArray; off: Int32); overload;
+    constructor Create(const Ed25519Instance: IEd25519;
+      input: TStream); overload;
 
     procedure Encode(const buf: TCryptoLibByteArray; off: Int32); inline;
     function GetEncoded(): TCryptoLibByteArray; inline;
@@ -94,31 +97,34 @@ begin
   result := System.Copy(FData);
 end;
 
-constructor TEd25519PrivateKeyParameters.Create(const random: ISecureRandom);
+constructor TEd25519PrivateKeyParameters.Create(const Ed25519Instance: IEd25519;
+  const random: ISecureRandom);
 begin
   Inherited Create(true);
   System.SetLength(FData, KeySize);
-  FEd25519Instance := TEd25519.Create();
+  FEd25519Instance := Ed25519Instance;
   FEd25519Instance.GeneratePrivateKey(random, FData);
 end;
 
-constructor TEd25519PrivateKeyParameters.Create(const buf: TCryptoLibByteArray;
-  off: Int32);
+constructor TEd25519PrivateKeyParameters.Create(const Ed25519Instance: IEd25519;
+  const buf: TCryptoLibByteArray; off: Int32);
 begin
   Inherited Create(true);
   System.SetLength(FData, KeySize);
-  FEd25519Instance := TEd25519.Create();
+  FEd25519Instance := Ed25519Instance;
   System.Move(buf[off], FData[0], KeySize * System.SizeOf(Byte));
 end;
 
-constructor TEd25519PrivateKeyParameters.Create(input: TStream);
+constructor TEd25519PrivateKeyParameters.Create(const Ed25519Instance: IEd25519;
+  input: TStream);
 begin
   Inherited Create(true);
   System.SetLength(FData, KeySize);
-  FEd25519Instance := TEd25519.Create();
+  FEd25519Instance := Ed25519Instance;
   if (KeySize <> TStreamUtils.ReadFully(input, FData)) then
   begin
-    raise EEndOfStreamCryptoLibException.CreateRes(@SEOFInPrivateKey);
+    raise EEndOfStreamCryptoLibException.CreateResFmt(@SEOFInPrivateKey,
+      [FEd25519Instance.AlgorithmName]);
   end;
 end;
 
@@ -175,7 +181,8 @@ begin
       begin
         if (ctx <> Nil) then
         begin
-          raise EArgumentCryptoLibException.CreateRes(@SCtxNotNil);
+          raise EArgumentCryptoLibException.CreateResFmt(@SCtxNotNil,
+            [FEd25519Instance.AlgorithmName]);
         end;
 
         FEd25519Instance.Sign(FData, 0, pk, 0, msg, msgOff, msgLen,
@@ -192,7 +199,8 @@ begin
       begin
         if (TEd25519.PreHashSize <> msgLen) then
         begin
-          raise EArgumentCryptoLibException.CreateRes(@SMsgLen);
+          raise EArgumentCryptoLibException.CreateResFmt(@SMsgLen,
+            [FEd25519Instance.AlgorithmName]);
         end;
 
         FEd25519Instance.SignPrehash(FData, 0, pk, 0, ctx, msg, msgOff,

+ 0 - 194
CryptoLib/src/Crypto/Signers/ClpEd25519Blake2BSigner.pas

@@ -1,194 +0,0 @@
-{ *********************************************************************************** }
-{ *                              CryptoLib Library                                  * }
-{ *                Copyright (c) 2018 - 20XX Ugochukwu Mmaduekwe                    * }
-{ *                 Github Repository <https://github.com/Xor-el>                   * }
-
-{ *  Distributed under the MIT software license, see the accompanying file LICENSE  * }
-{ *          or visit http://www.opensource.org/licenses/mit-license.php.           * }
-
-{ *                              Acknowledgements:                                  * }
-{ *                                                                                 * }
-{ *      Thanks to Sphere 10 Software (http://www.sphere10.com/) for sponsoring     * }
-{ *                           development of this library                           * }
-
-{ * ******************************************************************************* * }
-
-(* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *)
-
-unit ClpEd25519Blake2BSigner;
-
-{$I ..\..\Include\CryptoLib.inc}
-
-interface
-
-uses
-  Classes,
-  ClpIEd25519Blake2B,
-  ClpEd25519Blake2B,
-  ClpICipherParameters,
-  ClpIEd25519Blake2BSigner,
-  ClpIEd25519Blake2BPrivateKeyParameters,
-  ClpIEd25519Blake2BPublicKeyParameters,
-  ClpEd25519Blake2BPrivateKeyParameters,
-  ClpCryptoLibTypes;
-
-resourcestring
-  SNotInitializedForSigning =
-    'Ed25519Blake2BSigner not Initialised for Signature Generation.';
-  SNotInitializedForVerifying =
-    'Ed25519Blake2BSigner not Initialised for Verification';
-
-type
-  TEd25519Blake2BSigner = class(TInterfacedObject, IEd25519Blake2BSigner)
-
-  strict private
-  var
-    FBuffer: TMemoryStream;
-    FforSigning: Boolean;
-    FEd25519Blake2BInstance: IEd25519Blake2B;
-    FPrivateKey: IEd25519Blake2BPrivateKeyParameters;
-    FPublicKey: IEd25519Blake2BPublicKeyParameters;
-
-    function Aggregate: TCryptoLibByteArray; inline;
-
-  strict protected
-    function GetAlgorithmName: String; virtual;
-
-  public
-    constructor Create();
-    destructor Destroy(); override;
-
-    procedure Init(forSigning: Boolean;
-      const parameters: ICipherParameters); virtual;
-    procedure Update(b: Byte); virtual;
-    procedure BlockUpdate(const buf: TCryptoLibByteArray;
-      off, len: Int32); virtual;
-    function GenerateSignature(): TCryptoLibByteArray; virtual;
-    function VerifySignature(const signature: TCryptoLibByteArray)
-      : Boolean; virtual;
-    procedure Reset(); virtual;
-
-    property AlgorithmName: String read GetAlgorithmName;
-
-  end;
-
-implementation
-
-{ TEd25519Blake2BSigner }
-
-function TEd25519Blake2BSigner.Aggregate: TCryptoLibByteArray;
-begin
-  Result := Nil;
-  if FBuffer.Size > 0 then
-  begin
-    FBuffer.Position := 0;
-    System.SetLength(Result, FBuffer.Size);
-    FBuffer.Read(Result[0], FBuffer.Size);
-  end;
-end;
-
-procedure TEd25519Blake2BSigner.BlockUpdate(const buf: TCryptoLibByteArray;
-  off, len: Int32);
-begin
-  if buf <> Nil then
-  begin
-    FBuffer.Write(buf[off], len);
-  end;
-end;
-
-constructor TEd25519Blake2BSigner.Create;
-begin
-  Inherited Create();
-  FBuffer := TMemoryStream.Create();
-  FEd25519Blake2BInstance := TEd25519Blake2B.Create();
-end;
-
-destructor TEd25519Blake2BSigner.Destroy;
-begin
-  FBuffer.Free;
-  inherited Destroy;
-end;
-
-function TEd25519Blake2BSigner.GetAlgorithmName: String;
-begin
-  Result := 'Ed25519Blake2B';
-end;
-
-procedure TEd25519Blake2BSigner.Init(forSigning: Boolean;
-  const parameters: ICipherParameters);
-begin
-  FforSigning := forSigning;
-
-  if (forSigning) then
-  begin
-    // TODO Allow IAsymmetricCipherKeyPair to be an ICipherParameters?
-
-    FPrivateKey := parameters as IEd25519Blake2BPrivateKeyParameters;
-    FPublicKey := FPrivateKey.GeneratePublicKey();
-  end
-  else
-  begin
-    FPrivateKey := Nil;
-    FPublicKey := parameters as IEd25519Blake2BPublicKeyParameters;
-  end;
-
-  Reset();
-end;
-
-procedure TEd25519Blake2BSigner.Reset;
-begin
-  FBuffer.Clear;
-  FBuffer.SetSize(Int64(0));
-end;
-
-procedure TEd25519Blake2BSigner.Update(b: Byte);
-begin
-  FBuffer.Write(TCryptoLibByteArray.Create(b)[0], 1);
-end;
-
-function TEd25519Blake2BSigner.GenerateSignature: TCryptoLibByteArray;
-var
-  signature, buf: TCryptoLibByteArray;
-  count: Int32;
-begin
-  if ((not FforSigning) or (FPrivateKey = Nil)) then
-  begin
-    raise EInvalidOperationCryptoLibException.CreateRes
-      (@SNotInitializedForSigning);
-  end;
-
-  System.SetLength(signature,
-    TEd25519Blake2BPrivateKeyParameters.SignatureSize);
-  buf := Aggregate();
-  count := System.Length(buf);
-
-  FPrivateKey.Sign(TEd25519Blake2B.TEd25519Algorithm.Ed25519, FPublicKey, Nil,
-    buf, 0, count, signature, 0);
-  Reset();
-  Result := signature;
-end;
-
-function TEd25519Blake2BSigner.VerifySignature(const signature
-  : TCryptoLibByteArray): Boolean;
-var
-  buf, pk: TCryptoLibByteArray;
-  count: Int32;
-begin
-  if ((FforSigning) or (FPublicKey = Nil)) then
-  begin
-    raise EInvalidOperationCryptoLibException.CreateRes
-      (@SNotInitializedForVerifying);
-  end;
-  if (TEd25519Blake2B.SignatureSize <> System.Length(signature)) then
-  begin
-    Result := false;
-    Exit;
-  end;
-  pk := FPublicKey.GetEncoded();
-  buf := Aggregate();
-  count := System.Length(buf);
-  Result := FEd25519Blake2BInstance.Verify(signature, 0, pk, 0, buf, 0, count);
-  Reset();
-end;
-
-end.

+ 0 - 197
CryptoLib/src/Crypto/Signers/ClpEd25519CtxBlake2BSigner.pas

@@ -1,197 +0,0 @@
-{ *********************************************************************************** }
-{ *                              CryptoLib Library                                  * }
-{ *                Copyright (c) 2018 - 20XX Ugochukwu Mmaduekwe                    * }
-{ *                 Github Repository <https://github.com/Xor-el>                   * }
-
-{ *  Distributed under the MIT software license, see the accompanying file LICENSE  * }
-{ *          or visit http://www.opensource.org/licenses/mit-license.php.           * }
-
-{ *                              Acknowledgements:                                  * }
-{ *                                                                                 * }
-{ *      Thanks to Sphere 10 Software (http://www.sphere10.com/) for sponsoring     * }
-{ *                           development of this library                           * }
-
-{ * ******************************************************************************* * }
-
-(* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *)
-
-unit ClpEd25519CtxBlake2BSigner;
-
-{$I ..\..\Include\CryptoLib.inc}
-
-interface
-
-uses
-  Classes,
-  ClpIEd25519Blake2B,
-  ClpEd25519Blake2B,
-  ClpICipherParameters,
-  ClpIEd25519CtxBlake2BSigner,
-  ClpIEd25519Blake2BPrivateKeyParameters,
-  ClpIEd25519Blake2BPublicKeyParameters,
-  ClpEd25519Blake2BPrivateKeyParameters,
-  ClpCryptoLibTypes;
-
-resourcestring
-  SNotInitializedForSigning =
-    'Ed25519CtxBlake2BSigner not Initialised for Signature Generation.';
-  SNotInitializedForVerifying =
-    'Ed25519CtxBlake2BSigner not Initialised for Verification';
-
-type
-  TEd25519CtxBlake2BSigner = class(TInterfacedObject, IEd25519CtxBlake2BSigner)
-
-  strict private
-  var
-    FContext: TCryptoLibByteArray;
-    FBuffer: TMemoryStream;
-    FforSigning: Boolean;
-    FEd25519Blake2BInstance: IEd25519Blake2B;
-    FPrivateKey: IEd25519Blake2BPrivateKeyParameters;
-    FPublicKey: IEd25519Blake2BPublicKeyParameters;
-
-    function Aggregate: TCryptoLibByteArray; inline;
-
-  strict protected
-    function GetAlgorithmName: String; virtual;
-
-  public
-    constructor Create(const context: TCryptoLibByteArray);
-    destructor Destroy(); override;
-
-    procedure Init(forSigning: Boolean;
-      const parameters: ICipherParameters); virtual;
-    procedure Update(b: Byte); virtual;
-    procedure BlockUpdate(const buf: TCryptoLibByteArray;
-      off, len: Int32); virtual;
-    function GenerateSignature(): TCryptoLibByteArray; virtual;
-    function VerifySignature(const signature: TCryptoLibByteArray)
-      : Boolean; virtual;
-    procedure Reset(); virtual;
-
-    property AlgorithmName: String read GetAlgorithmName;
-
-  end;
-
-implementation
-
-{ TEd25519CtxBlake2BSigner }
-
-function TEd25519CtxBlake2BSigner.Aggregate: TCryptoLibByteArray;
-begin
-  Result := Nil;
-  if FBuffer.Size > 0 then
-  begin
-    FBuffer.Position := 0;
-    System.SetLength(Result, FBuffer.Size);
-    FBuffer.Read(Result[0], FBuffer.Size);
-  end;
-end;
-
-procedure TEd25519CtxBlake2BSigner.BlockUpdate(const buf: TCryptoLibByteArray;
-  off, len: Int32);
-begin
-  if buf <> Nil then
-  begin
-    FBuffer.Write(buf[off], len);
-  end;
-end;
-
-constructor TEd25519CtxBlake2BSigner.Create(const context: TCryptoLibByteArray);
-begin
-  Inherited Create();
-  FBuffer := TMemoryStream.Create();
-  FContext := System.Copy(context);
-  FEd25519Blake2BInstance := TEd25519Blake2B.Create();
-end;
-
-destructor TEd25519CtxBlake2BSigner.Destroy;
-begin
-  FBuffer.Free;
-  inherited Destroy;
-end;
-
-function TEd25519CtxBlake2BSigner.GetAlgorithmName: String;
-begin
-  Result := 'Ed25519CtxBlake2B';
-end;
-
-procedure TEd25519CtxBlake2BSigner.Init(forSigning: Boolean;
-  const parameters: ICipherParameters);
-begin
-  FforSigning := forSigning;
-
-  if (forSigning) then
-  begin
-    // TODO Allow IAsymmetricCipherKeyPair to be an ICipherParameters?
-
-    FPrivateKey := parameters as IEd25519Blake2BPrivateKeyParameters;
-    FPublicKey := FPrivateKey.GeneratePublicKey();
-  end
-  else
-  begin
-    FPrivateKey := Nil;
-    FPublicKey := parameters as IEd25519Blake2BPublicKeyParameters;
-  end;
-
-  Reset();
-end;
-
-procedure TEd25519CtxBlake2BSigner.Reset;
-begin
-  FBuffer.Clear;
-  FBuffer.SetSize(Int64(0));
-end;
-
-procedure TEd25519CtxBlake2BSigner.Update(b: Byte);
-begin
-  FBuffer.Write(TCryptoLibByteArray.Create(b)[0], 1);
-end;
-
-function TEd25519CtxBlake2BSigner.GenerateSignature: TCryptoLibByteArray;
-var
-  signature, buf: TCryptoLibByteArray;
-  count: Int32;
-begin
-  if ((not FforSigning) or (FPrivateKey = Nil)) then
-  begin
-    raise EInvalidOperationCryptoLibException.CreateRes
-      (@SNotInitializedForSigning);
-  end;
-
-  System.SetLength(signature,
-    TEd25519Blake2BPrivateKeyParameters.SignatureSize);
-  buf := Aggregate();
-  count := System.Length(buf);
-
-  FPrivateKey.Sign(TEd25519Blake2B.TEd25519Algorithm.Ed25519Ctx, FPublicKey,
-    FContext, buf, 0, count, signature, 0);
-  Reset();
-  Result := signature;
-end;
-
-function TEd25519CtxBlake2BSigner.VerifySignature(const signature
-  : TCryptoLibByteArray): Boolean;
-var
-  buf, pk: TCryptoLibByteArray;
-  count: Int32;
-begin
-  if ((FforSigning) or (FPublicKey = Nil)) then
-  begin
-    raise EInvalidOperationCryptoLibException.CreateRes
-      (@SNotInitializedForVerifying);
-  end;
-  if (TEd25519Blake2B.SignatureSize <> System.Length(signature)) then
-  begin
-    Result := false;
-    Exit;
-  end;
-  pk := FPublicKey.GetEncoded();
-  buf := Aggregate();
-  count := System.Length(buf);
-  Result := FEd25519Blake2BInstance.Verify(signature, 0, pk, 0, FContext, buf,
-    0, count);
-  Reset();
-end;
-
-end.

+ 6 - 4
CryptoLib/src/Crypto/Signers/ClpEd25519CtxSigner.pas

@@ -56,7 +56,8 @@ type
     function GetAlgorithmName: String; virtual;
 
   public
-    constructor Create(const context: TCryptoLibByteArray);
+    constructor Create(const Ed25519Instance: IEd25519;
+      const context: TCryptoLibByteArray);
     destructor Destroy(); override;
 
     procedure Init(forSigning: Boolean;
@@ -97,12 +98,13 @@ begin
   end;
 end;
 
-constructor TEd25519CtxSigner.Create(const context: TCryptoLibByteArray);
+constructor TEd25519CtxSigner.Create(const Ed25519Instance: IEd25519;
+  const context: TCryptoLibByteArray);
 begin
   Inherited Create();
   FBuffer := TMemoryStream.Create();
   FContext := System.Copy(context);
-  FEd25519Instance := TEd25519.Create();
+  FEd25519Instance := Ed25519Instance;
 end;
 
 destructor TEd25519CtxSigner.Destroy;
@@ -113,7 +115,7 @@ end;
 
 function TEd25519CtxSigner.GetAlgorithmName: String;
 begin
-  Result := 'Ed25519ctx';
+  Result := 'Ed25519Ctx';
 end;
 
 procedure TEd25519CtxSigner.Init(forSigning: Boolean;

+ 0 - 178
CryptoLib/src/Crypto/Signers/ClpEd25519PhBlake2BSigner.pas

@@ -1,178 +0,0 @@
-{ *********************************************************************************** }
-{ *                              CryptoLib Library                                  * }
-{ *                Copyright (c) 2018 - 20XX Ugochukwu Mmaduekwe                    * }
-{ *                 Github Repository <https://github.com/Xor-el>                   * }
-
-{ *  Distributed under the MIT software license, see the accompanying file LICENSE  * }
-{ *          or visit http://www.opensource.org/licenses/mit-license.php.           * }
-
-{ *                              Acknowledgements:                                  * }
-{ *                                                                                 * }
-{ *      Thanks to Sphere 10 Software (http://www.sphere10.com/) for sponsoring     * }
-{ *                           development of this library                           * }
-
-{ * ******************************************************************************* * }
-
-(* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *)
-
-unit ClpEd25519PhBlake2BSigner;
-
-{$I ..\..\Include\CryptoLib.inc}
-
-interface
-
-uses
-  ClpIDigest,
-  ClpIEd25519Blake2B,
-  ClpEd25519Blake2B,
-  ClpICipherParameters,
-  ClpIEd25519PhBlake2BSigner,
-  ClpIEd25519Blake2BPrivateKeyParameters,
-  ClpIEd25519Blake2BPublicKeyParameters,
-  ClpEd25519Blake2BPrivateKeyParameters,
-  ClpCryptoLibTypes;
-
-resourcestring
-  SNotInitializedForSigning =
-    'Ed25519PhBlake2BSigner not Initialised for Signature Generation.';
-  SNotInitializedForVerifying =
-    'Ed25519PhBlake2BSigner not Initialised for Verification';
-  SPreHashDigestFailed = 'PreHash Digest Failed';
-
-type
-  TEd25519PhBlake2BSigner = class(TInterfacedObject, IEd25519PhBlake2BSigner)
-
-  strict private
-  var
-    FPreHash: IDigest;
-    FContext: TCryptoLibByteArray;
-    FforSigning: Boolean;
-    FEd25519Blake2BInstance: IEd25519Blake2B;
-    FPrivateKey: IEd25519Blake2BPrivateKeyParameters;
-    FPublicKey: IEd25519Blake2BPublicKeyParameters;
-
-  strict protected
-    function GetAlgorithmName: String; virtual;
-
-  public
-    constructor Create(const context: TCryptoLibByteArray);
-    destructor Destroy(); override;
-
-    procedure Init(forSigning: Boolean;
-      const parameters: ICipherParameters); virtual;
-    procedure Update(b: Byte); virtual;
-    procedure BlockUpdate(const buf: TCryptoLibByteArray;
-      off, len: Int32); virtual;
-    function GenerateSignature(): TCryptoLibByteArray; virtual;
-    function VerifySignature(const signature: TCryptoLibByteArray)
-      : Boolean; virtual;
-    procedure Reset(); virtual;
-
-    property AlgorithmName: String read GetAlgorithmName;
-
-  end;
-
-implementation
-
-{ TEd25519PhBlake2BSigner }
-
-procedure TEd25519PhBlake2BSigner.BlockUpdate(const buf: TCryptoLibByteArray;
-  off, len: Int32);
-begin
-  FPreHash.BlockUpdate(buf, off, len);
-end;
-
-constructor TEd25519PhBlake2BSigner.Create(const context: TCryptoLibByteArray);
-begin
-  Inherited Create();
-  FContext := System.Copy(context);
-  FEd25519Blake2BInstance := TEd25519Blake2B.Create();
-  FPreHash := FEd25519Blake2BInstance.CreatePreHash();
-end;
-
-destructor TEd25519PhBlake2BSigner.Destroy;
-begin
-  inherited Destroy;
-end;
-
-function TEd25519PhBlake2BSigner.GetAlgorithmName: String;
-begin
-  Result := 'Ed25519PhBlake2B';
-end;
-
-procedure TEd25519PhBlake2BSigner.Init(forSigning: Boolean;
-  const parameters: ICipherParameters);
-begin
-  FforSigning := forSigning;
-
-  if (forSigning) then
-  begin
-    // TODO Allow IAsymmetricCipherKeyPair to be an ICipherParameters?
-
-    FPrivateKey := parameters as IEd25519Blake2BPrivateKeyParameters;
-    FPublicKey := FPrivateKey.GeneratePublicKey();
-  end
-  else
-  begin
-    FPrivateKey := Nil;
-    FPublicKey := parameters as IEd25519Blake2BPublicKeyParameters;
-  end;
-
-  Reset();
-end;
-
-procedure TEd25519PhBlake2BSigner.Reset;
-begin
-  FPreHash.Reset();
-end;
-
-procedure TEd25519PhBlake2BSigner.Update(b: Byte);
-begin
-  FPreHash.Update(b);
-end;
-
-function TEd25519PhBlake2BSigner.GenerateSignature: TCryptoLibByteArray;
-var
-  signature, msg: TCryptoLibByteArray;
-begin
-  if ((not FforSigning) or (FPrivateKey = Nil)) then
-  begin
-    raise EInvalidOperationCryptoLibException.CreateRes
-      (@SNotInitializedForSigning);
-  end;
-  System.SetLength(msg, TEd25519Blake2B.PreHashSize);
-
-  if ((TEd25519Blake2B.PreHashSize) <> (FPreHash.DoFinal(msg, 0))) then
-  begin
-    raise EInvalidOperationCryptoLibException.CreateRes(@SPreHashDigestFailed);
-  end;
-
-  System.SetLength(signature,
-    TEd25519Blake2BPrivateKeyParameters.SignatureSize);
-
-  FPrivateKey.Sign(TEd25519Blake2B.TEd25519Algorithm.Ed25519Ph, FPublicKey,
-    FContext, msg, 0, TEd25519Blake2B.PreHashSize, signature, 0);
-  Result := signature;
-end;
-
-function TEd25519PhBlake2BSigner.VerifySignature(const signature
-  : TCryptoLibByteArray): Boolean;
-var
-  pk: TCryptoLibByteArray;
-begin
-  if ((FforSigning) or (FPublicKey = Nil)) then
-  begin
-    raise EInvalidOperationCryptoLibException.CreateRes
-      (@SNotInitializedForVerifying);
-  end;
-  if (TEd25519Blake2B.SignatureSize <> System.Length(signature)) then
-  begin
-    Result := false;
-    Exit;
-  end;
-  pk := FPublicKey.GetEncoded();
-  Result := FEd25519Blake2BInstance.VerifyPrehash(signature, 0, pk, 0, FContext,
-    FPreHash);
-end;
-
-end.

+ 5 - 3
CryptoLib/src/Crypto/Signers/ClpEd25519PhSigner.pas

@@ -55,7 +55,8 @@ type
     function GetAlgorithmName: String; virtual;
 
   public
-    constructor Create(const context: TCryptoLibByteArray);
+    constructor Create(const Ed25519Instance: IEd25519;
+      const context: TCryptoLibByteArray);
     destructor Destroy(); override;
 
     procedure Init(forSigning: Boolean;
@@ -82,12 +83,13 @@ begin
   FPreHash.BlockUpdate(buf, off, len);
 end;
 
-constructor TEd25519PhSigner.Create(const context: TCryptoLibByteArray);
+constructor TEd25519PhSigner.Create(const Ed25519Instance: IEd25519;
+  const context: TCryptoLibByteArray);
 begin
   Inherited Create();
   FContext := System.Copy(context);
   FEd25519Instance := TEd25519.Create();
-  FPreHash := FEd25519Instance.CreatePreHash();
+  FPreHash := Ed25519Instance.CreatePreHash();
 end;
 
 destructor TEd25519PhSigner.Destroy;

+ 3 - 3
CryptoLib/src/Crypto/Signers/ClpEd25519Signer.pas

@@ -55,7 +55,7 @@ type
     function GetAlgorithmName: String; virtual;
 
   public
-    constructor Create();
+    constructor Create(const Ed25519Instance: IEd25519);
     destructor Destroy(); override;
 
     procedure Init(forSigning: Boolean;
@@ -96,11 +96,11 @@ begin
   end;
 end;
 
-constructor TEd25519Signer.Create;
+constructor TEd25519Signer.Create(const Ed25519Instance: IEd25519);
 begin
   Inherited Create();
   FBuffer := TMemoryStream.Create();
-  FEd25519Instance := TEd25519.Create();
+  FEd25519Instance := Ed25519Instance;
 end;
 
 destructor TEd25519Signer.Destroy;

+ 9 - 0
CryptoLib/src/Interfaces/ClpIEd25519.pas

@@ -30,6 +30,7 @@ type
   IEd25519 = interface(IInterface)
     ['{2C6CD9DD-8809-44E6-979D-1EBE465CE9E2}']
 
+    function GetAlgorithmName: String;
     function CreatePreHash(): IDigest;
 
     procedure GeneratePrivateKey(const random: ISecureRandom;
@@ -90,6 +91,14 @@ type
       const pk: TCryptoLibByteArray; pkOff: Int32;
       const ctx: TCryptoLibByteArray; const ph: IDigest): Boolean; overload;
 
+    property AlgorithmName: String read GetAlgorithmName;
+
+  end;
+
+type
+  IEd25519Blake2B = interface(IEd25519)
+    ['{4EF6C436-D49D-4442-A014-848E08D81BE6}']
+
   end;
 
 implementation

+ 0 - 35
CryptoLib/src/Interfaces/ClpIEd25519Blake2B.pas

@@ -1,35 +0,0 @@
-{ *********************************************************************************** }
-{ *                              CryptoLib Library                                  * }
-{ *                Copyright (c) 2018 - 20XX Ugochukwu Mmaduekwe                    * }
-{ *                 Github Repository <https://github.com/Xor-el>                   * }
-
-{ *  Distributed under the MIT software license, see the accompanying file LICENSE  * }
-{ *          or visit http://www.opensource.org/licenses/mit-license.php.           * }
-
-{ *                              Acknowledgements:                                  * }
-{ *                                                                                 * }
-{ *      Thanks to Sphere 10 Software (http://www.sphere10.com/) for sponsoring     * }
-{ *                           development of this library                           * }
-
-{ * ******************************************************************************* * }
-
-(* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *)
-
-unit ClpIEd25519Blake2B;
-
-{$I ..\Include\CryptoLib.inc}
-
-interface
-
-uses
-  ClpIEd25519;
-
-type
-  IEd25519Blake2B = interface(IEd25519)
-    ['{4EF6C436-D49D-4442-A014-848E08D81BE6}']
-
-  end;
-
-implementation
-
-end.

+ 0 - 35
CryptoLib/src/Interfaces/ClpIEd25519Blake2BKeyGenerationParameters.pas

@@ -1,35 +0,0 @@
-{ *********************************************************************************** }
-{ *                              CryptoLib Library                                  * }
-{ *                Copyright (c) 2018 - 20XX Ugochukwu Mmaduekwe                    * }
-{ *                 Github Repository <https://github.com/Xor-el>                   * }
-
-{ *  Distributed under the MIT software license, see the accompanying file LICENSE  * }
-{ *          or visit http://www.opensource.org/licenses/mit-license.php.           * }
-
-{ *                              Acknowledgements:                                  * }
-{ *                                                                                 * }
-{ *      Thanks to Sphere 10 Software (http://www.sphere10.com/) for sponsoring     * }
-{ *                           development of this library                           * }
-
-{ * ******************************************************************************* * }
-
-(* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *)
-
-unit ClpIEd25519Blake2BKeyGenerationParameters;
-
-{$I ..\Include\CryptoLib.inc}
-
-interface
-
-uses
-  ClpIKeyGenerationParameters;
-
-type
-  IEd25519Blake2BKeyGenerationParameters = interface(IKeyGenerationParameters)
-    ['{83EED7AC-2214-444D-8411-CD5CDFC32972}']
-
-  end;
-
-implementation
-
-end.

+ 0 - 35
CryptoLib/src/Interfaces/ClpIEd25519Blake2BKeyPairGenerator.pas

@@ -1,35 +0,0 @@
-{ *********************************************************************************** }
-{ *                              CryptoLib Library                                  * }
-{ *                Copyright (c) 2018 - 20XX Ugochukwu Mmaduekwe                    * }
-{ *                 Github Repository <https://github.com/Xor-el>                   * }
-
-{ *  Distributed under the MIT software license, see the accompanying file LICENSE  * }
-{ *          or visit http://www.opensource.org/licenses/mit-license.php.           * }
-
-{ *                              Acknowledgements:                                  * }
-{ *                                                                                 * }
-{ *      Thanks to Sphere 10 Software (http://www.sphere10.com/) for sponsoring     * }
-{ *                           development of this library                           * }
-
-{ * ******************************************************************************* * }
-
-(* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *)
-
-unit ClpIEd25519Blake2BKeyPairGenerator;
-
-{$I ..\Include\CryptoLib.inc}
-
-interface
-
-uses
-  ClpIEd25519KeyPairGenerator;
-
-type
-  IEd25519Blake2BKeyPairGenerator = interface(IEd25519KeyPairGenerator)
-    ['{1923A01B-2246-4F5B-8BD5-3C78C181029E}']
-
-  end;
-
-implementation
-
-end.

+ 0 - 49
CryptoLib/src/Interfaces/ClpIEd25519Blake2BPrivateKeyParameters.pas

@@ -1,49 +0,0 @@
-{ *********************************************************************************** }
-{ *                              CryptoLib Library                                  * }
-{ *                Copyright (c) 2018 - 20XX Ugochukwu Mmaduekwe                    * }
-{ *                 Github Repository <https://github.com/Xor-el>                   * }
-
-{ *  Distributed under the MIT software license, see the accompanying file LICENSE  * }
-{ *          or visit http://www.opensource.org/licenses/mit-license.php.           * }
-
-{ *                              Acknowledgements:                                  * }
-{ *                                                                                 * }
-{ *      Thanks to Sphere 10 Software (http://www.sphere10.com/) for sponsoring     * }
-{ *                           development of this library                           * }
-
-{ * ******************************************************************************* * }
-
-(* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *)
-
-unit ClpIEd25519Blake2BPrivateKeyParameters;
-
-{$I ..\Include\CryptoLib.inc}
-
-interface
-
-uses
-  ClpEd25519,
-  ClpIEd25519Blake2BPublicKeyParameters,
-  ClpIAsymmetricKeyParameter,
-  ClpCryptoLibTypes;
-
-type
-  IEd25519Blake2BPrivateKeyParameters = interface(IAsymmetricKeyParameter)
-    ['{AA0786F9-11D8-4B36-B9AE-A108FE678774}']
-
-    procedure Encode(const buf: TCryptoLibByteArray; off: Int32);
-    function GetEncoded(): TCryptoLibByteArray;
-    function GeneratePublicKey(): IEd25519Blake2BPublicKeyParameters;
-
-    procedure Sign(algorithm: TEd25519.TEd25519Algorithm;
-      const publicKey: IEd25519Blake2BPublicKeyParameters;
-      const ctx, msg: TCryptoLibByteArray; msgOff, msgLen: Int32;
-      const sig: TCryptoLibByteArray; sigOff: Int32);
-
-    function Equals(const other: IEd25519Blake2BPrivateKeyParameters)
-      : Boolean; overload;
-  end;
-
-implementation
-
-end.

+ 0 - 41
CryptoLib/src/Interfaces/ClpIEd25519Blake2BPublicKeyParameters.pas

@@ -1,41 +0,0 @@
-{ *********************************************************************************** }
-{ *                              CryptoLib Library                                  * }
-{ *                Copyright (c) 2018 - 20XX Ugochukwu Mmaduekwe                    * }
-{ *                 Github Repository <https://github.com/Xor-el>                   * }
-
-{ *  Distributed under the MIT software license, see the accompanying file LICENSE  * }
-{ *          or visit http://www.opensource.org/licenses/mit-license.php.           * }
-
-{ *                              Acknowledgements:                                  * }
-{ *                                                                                 * }
-{ *      Thanks to Sphere 10 Software (http://www.sphere10.com/) for sponsoring     * }
-{ *                           development of this library                           * }
-
-{ * ******************************************************************************* * }
-
-(* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *)
-
-unit ClpIEd25519Blake2BPublicKeyParameters;
-
-{$I ..\Include\CryptoLib.inc}
-
-interface
-
-uses
-  ClpIAsymmetricKeyParameter,
-  ClpCryptoLibTypes;
-
-type
-  IEd25519Blake2BPublicKeyParameters = interface(IAsymmetricKeyParameter)
-    ['{54BC984B-F087-463C-AB06-BCB8C61D9770}']
-
-    procedure Encode(const buf: TCryptoLibByteArray; off: Int32);
-    function GetEncoded(): TCryptoLibByteArray;
-
-    function Equals(const other: IEd25519Blake2BPublicKeyParameters)
-      : Boolean; overload;
-  end;
-
-implementation
-
-end.

+ 0 - 36
CryptoLib/src/Interfaces/ClpIEd25519Blake2BSigner.pas

@@ -1,36 +0,0 @@
-{ *********************************************************************************** }
-{ *                              CryptoLib Library                                  * }
-{ *                Copyright (c) 2018 - 20XX Ugochukwu Mmaduekwe                    * }
-{ *                 Github Repository <https://github.com/Xor-el>                   * }
-
-{ *  Distributed under the MIT software license, see the accompanying file LICENSE  * }
-{ *          or visit http://www.opensource.org/licenses/mit-license.php.           * }
-
-{ *                              Acknowledgements:                                  * }
-{ *                                                                                 * }
-{ *      Thanks to Sphere 10 Software (http://www.sphere10.com/) for sponsoring     * }
-{ *                           development of this library                           * }
-
-{ * ******************************************************************************* * }
-
-(* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *)
-
-unit ClpIEd25519Blake2BSigner;
-
-{$I ..\Include\CryptoLib.inc}
-
-interface
-
-uses
-  ClpISigner;
-
-type
-  IEd25519Blake2BSigner = interface(ISigner)
-
-    ['{3BF234D8-550D-4505-9C55-2C93733DCE30}']
-
-  end;
-
-implementation
-
-end.

+ 0 - 36
CryptoLib/src/Interfaces/ClpIEd25519CtxBlake2BSigner.pas

@@ -1,36 +0,0 @@
-{ *********************************************************************************** }
-{ *                              CryptoLib Library                                  * }
-{ *                Copyright (c) 2018 - 20XX Ugochukwu Mmaduekwe                    * }
-{ *                 Github Repository <https://github.com/Xor-el>                   * }
-
-{ *  Distributed under the MIT software license, see the accompanying file LICENSE  * }
-{ *          or visit http://www.opensource.org/licenses/mit-license.php.           * }
-
-{ *                              Acknowledgements:                                  * }
-{ *                                                                                 * }
-{ *      Thanks to Sphere 10 Software (http://www.sphere10.com/) for sponsoring     * }
-{ *                           development of this library                           * }
-
-{ * ******************************************************************************* * }
-
-(* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *)
-
-unit ClpIEd25519CtxBlake2BSigner;
-
-{$I ..\Include\CryptoLib.inc}
-
-interface
-
-uses
-  ClpISigner;
-
-type
-  IEd25519CtxBlake2BSigner = interface(ISigner)
-
-    ['{E3138C67-743D-4772-BF30-63D398AE4D2D}']
-
-  end;
-
-implementation
-
-end.

+ 0 - 36
CryptoLib/src/Interfaces/ClpIEd25519PhBlake2BSigner.pas

@@ -1,36 +0,0 @@
-{ *********************************************************************************** }
-{ *                              CryptoLib Library                                  * }
-{ *                Copyright (c) 2018 - 20XX Ugochukwu Mmaduekwe                    * }
-{ *                 Github Repository <https://github.com/Xor-el>                   * }
-
-{ *  Distributed under the MIT software license, see the accompanying file LICENSE  * }
-{ *          or visit http://www.opensource.org/licenses/mit-license.php.           * }
-
-{ *                              Acknowledgements:                                  * }
-{ *                                                                                 * }
-{ *      Thanks to Sphere 10 Software (http://www.sphere10.com/) for sponsoring     * }
-{ *                           development of this library                           * }
-
-{ * ******************************************************************************* * }
-
-(* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *)
-
-unit ClpIEd25519PhBlake2BSigner;
-
-{$I ..\Include\CryptoLib.inc}
-
-interface
-
-uses
-  ClpISigner;
-
-type
-  IEd25519PhBlake2BSigner = interface(ISigner)
-
-    ['{C51DD3EF-C78A-4C0A-993E-F1B4BA414875}']
-
-  end;
-
-implementation
-
-end.

+ 38 - 0
CryptoLib/src/Math/EC/Rfc8032/ClpEd25519.pas

@@ -322,6 +322,7 @@ type
 
   strict protected
 
+    function GetAlgorithmName: String; virtual;
     function CreateDigest(): IDigest; virtual;
 
   public
@@ -405,6 +406,21 @@ type
   class procedure ScalarMult(const k: TCryptoLibByteArray; var p: TPointAffine;
     var r: TPointAccum); static;
 
+  property AlgorithmName: String read GetAlgorithmName;
+
+  end;
+
+type
+  TEd25519Blake2B = class sealed(TEd25519, IEd25519Blake2B)
+
+  strict protected
+
+    function GetAlgorithmName: String; override;
+    function CreateDigest(): IDigest; override;
+
+  public
+    constructor Create();
+
   end;
 
 implementation
@@ -816,6 +832,11 @@ begin
   TX25519Field.Copy(table, off, r.T, 0);
 end;
 
+function TEd25519.GetAlgorithmName: String;
+begin
+  result := 'Ed25519';
+end;
+
 class function TEd25519.GetWindow4(const X: TCryptoLibUInt32Array;
   n: Int32): Int32;
 var
@@ -2264,4 +2285,21 @@ begin
   result.Fy := TX25519Field.Create();
 end;
 
+{ TEd25519Blake2B }
+
+constructor TEd25519Blake2B.Create;
+begin
+  Inherited Create();
+end;
+
+function TEd25519Blake2B.CreateDigest: IDigest;
+begin
+  result := TDigestUtilities.GetDigest('BLAKE2B-512');
+end;
+
+function TEd25519Blake2B.GetAlgorithmName: String;
+begin
+  result := 'Ed25519Blake2B';
+end;
+
 end.

+ 0 - 48
CryptoLib/src/Math/EC/Rfc8032/ClpEd25519Blake2B.pas

@@ -1,48 +0,0 @@
-{ *********************************************************************************** }
-{ *                              CryptoLib Library                                  * }
-{ *                Copyright (c) 2018 - 20XX Ugochukwu Mmaduekwe                    * }
-{ *                 Github Repository <https://github.com/Xor-el>                   * }
-
-{ *  Distributed under the MIT software license, see the accompanying file LICENSE  * }
-{ *          or visit http://www.opensource.org/licenses/mit-license.php.           * }
-
-{ *                              Acknowledgements:                                  * }
-{ *                                                                                 * }
-{ *      Thanks to Sphere 10 Software (http://www.sphere10.com/) for sponsoring     * }
-{ *                           development of this library                           * }
-
-{ * ******************************************************************************* * }
-
-(* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *)
-
-unit ClpEd25519Blake2B;
-
-{$I ..\..\..\Include\CryptoLib.inc}
-
-interface
-
-uses
-  ClpIDigest,
-  ClpEd25519,
-  ClpDigestUtilities,
-  ClpIEd25519Blake2B;
-
-type
-  TEd25519Blake2B = class sealed(TEd25519, IEd25519Blake2B)
-
-  strict protected
-
-    function CreateDigest(): IDigest; override;
-
-  end;
-
-implementation
-
-{ TEd25519Blake2B }
-
-function TEd25519Blake2B.CreateDigest: IDigest;
-begin
-  result := TDigestUtilities.GetDigest('BLAKE2B-512');
-end;
-
-end.

+ 0 - 16
CryptoLib/src/Packages/Delphi/CryptoLib4PascalPackage.dpk

@@ -48,7 +48,6 @@ contains
   ClpNat in '..\..\Math\Raw\ClpNat.pas',
   ClpX25519Field in '..\..\Math\EC\Rfc7748\ClpX25519Field.pas',
   ClpEd25519 in '..\..\Math\EC\Rfc8032\ClpEd25519.pas',
-  ClpEd25519Blake2B in '..\..\Math\EC\Rfc8032\ClpEd25519Blake2B.pas',
   ClpX25519 in '..\..\Math\EC\Rfc7748\ClpX25519.pas',
   ClpBigInteger in '..\..\Math\ClpBigInteger.pas',
   ClpCurve25519Custom in '..\..\Math\EC\Custom\Djb\ClpCurve25519Custom.pas',
@@ -76,16 +75,8 @@ contains
   ClpIEd25519PhSigner in '..\..\Interfaces\ClpIEd25519PhSigner.pas',
   ClpIEd25519KeyGenerationParameters in '..\..\Interfaces\ClpIEd25519KeyGenerationParameters.pas',
   ClpIEd25519KeyPairGenerator in '..\..\Interfaces\ClpIEd25519KeyPairGenerator.pas',
-  ClpIEd25519PhBlake2BSigner in '..\..\Interfaces\ClpIEd25519PhBlake2BSigner.pas',
-  ClpIEd25519Blake2BPublicKeyParameters in '..\..\Interfaces\ClpIEd25519Blake2BPublicKeyParameters.pas',
   ClpIEd25519CtxSigner in '..\..\Interfaces\ClpIEd25519CtxSigner.pas',
-  ClpIEd25519Blake2BSigner in '..\..\Interfaces\ClpIEd25519Blake2BSigner.pas',
-  ClpIEd25519CtxBlake2BSigner in '..\..\Interfaces\ClpIEd25519CtxBlake2BSigner.pas',
   ClpIECPublicKeyParameters in '..\..\Interfaces\ClpIECPublicKeyParameters.pas',
-  ClpIEd25519Blake2BKeyGenerationParameters in '..\..\Interfaces\ClpIEd25519Blake2BKeyGenerationParameters.pas',
-  ClpIEd25519Blake2BKeyPairGenerator in '..\..\Interfaces\ClpIEd25519Blake2BKeyPairGenerator.pas',
-  ClpIEd25519Blake2BPrivateKeyParameters in '..\..\Interfaces\ClpIEd25519Blake2BPrivateKeyParameters.pas',
-  ClpIEd25519Blake2B in '..\..\Interfaces\ClpIEd25519Blake2B.pas',
   ClpIECKeyParameters in '..\..\Interfaces\ClpIECKeyParameters.pas',
   ClpIEd25519 in '..\..\Interfaces\ClpIEd25519.pas',
   ClpIDsaPublicKeyParameters in '..\..\Interfaces\ClpIDsaPublicKeyParameters.pas',
@@ -99,23 +90,17 @@ contains
   ClpIAlgorithmParameterSpec in '..\..\Interfaces\ClpIAlgorithmParameterSpec.pas',
   ClpSchnorrDigestSigner in '..\..\Crypto\Signers\ClpSchnorrDigestSigner.pas',
   ClpEd25519Signer in '..\..\Crypto\Signers\ClpEd25519Signer.pas',
-  ClpEd25519PhBlake2BSigner in '..\..\Crypto\Signers\ClpEd25519PhBlake2BSigner.pas',
   ClpEd25519PhSigner in '..\..\Crypto\Signers\ClpEd25519PhSigner.pas',
   ClpEd25519CtxSigner in '..\..\Crypto\Signers\ClpEd25519CtxSigner.pas',
-  ClpEd25519CtxBlake2BSigner in '..\..\Crypto\Signers\ClpEd25519CtxBlake2BSigner.pas',
   ClpX25519KeyGenerationParameters in '..\..\Crypto\Parameters\ClpX25519KeyGenerationParameters.pas',
-  ClpEd25519Blake2BSigner in '..\..\Crypto\Signers\ClpEd25519Blake2BSigner.pas',
   ClpX25519PublicKeyParameters in '..\..\Crypto\Parameters\ClpX25519PublicKeyParameters.pas',
   ClpX25519PrivateKeyParameters in '..\..\Crypto\Parameters\ClpX25519PrivateKeyParameters.pas',
   ClpIESWithCipherParameters in '..\..\Crypto\Parameters\ClpIESWithCipherParameters.pas',
   ClpIESParameters in '..\..\Crypto\Parameters\ClpIESParameters.pas',
   ClpIESParameterSpec in '..\..\Crypto\Parameters\ClpIESParameterSpec.pas',
-  ClpEd25519Blake2BPublicKeyParameters in '..\..\Crypto\Parameters\ClpEd25519Blake2BPublicKeyParameters.pas',
   ClpEd25519PrivateKeyParameters in '..\..\Crypto\Parameters\ClpEd25519PrivateKeyParameters.pas',
   ClpEd25519PublicKeyParameters in '..\..\Crypto\Parameters\ClpEd25519PublicKeyParameters.pas',
   ClpEd25519KeyGenerationParameters in '..\..\Crypto\Parameters\ClpEd25519KeyGenerationParameters.pas',
-  ClpEd25519Blake2BKeyGenerationParameters in '..\..\Crypto\Parameters\ClpEd25519Blake2BKeyGenerationParameters.pas',
-  ClpEd25519Blake2BPrivateKeyParameters in '..\..\Crypto\Parameters\ClpEd25519Blake2BPrivateKeyParameters.pas',
   ClpECPublicKeyParameters in '..\..\Crypto\Parameters\ClpECPublicKeyParameters.pas',
   ClpBlockCipherModes in '..\..\Crypto\Modes\ClpBlockCipherModes.pas',
   ClpECKeyParameters in '..\..\Crypto\Parameters\ClpECKeyParameters.pas',
@@ -123,7 +108,6 @@ contains
   ClpX25519KeyPairGenerator in '..\..\Crypto\Generators\ClpX25519KeyPairGenerator.pas',
   ClpPascalCoinECIESKdfBytesGenerator in '..\..\Crypto\Generators\ClpPascalCoinECIESKdfBytesGenerator.pas',
   ClpSpeckLegacyEngine in '..\..\Crypto\Engines\ClpSpeckLegacyEngine.pas',
-  ClpEd25519Blake2BKeyPairGenerator in '..\..\Crypto\Generators\ClpEd25519Blake2BKeyPairGenerator.pas',
   ClpEd25519KeyPairGenerator in '..\..\Crypto\Generators\ClpEd25519KeyPairGenerator.pas',
   ClpXSalsa20Engine in '..\..\Crypto\Engines\ClpXSalsa20Engine.pas',
   ClpSpeckEngine in '..\..\Crypto\Engines\ClpSpeckEngine.pas',

+ 170 - 234
CryptoLib/src/Packages/FPC/CryptoLib4PascalPackage.lpk

@@ -25,7 +25,7 @@
  Acknowledgements: 
 Thanks to Sphere 10 Software (http://www.sphere10.com/) for sponsoring the development of this library "/>
     <Version Major="3" Minor="1"/>
-    <Files Count="375">
+    <Files Count="359">
       <Item1>
         <Filename Value="..\..\Asn1\ClpOidTokenizer.pas"/>
         <UnitName Value="ClpOidTokenizer"/>
@@ -1124,409 +1124,345 @@ Thanks to Sphere 10 Software (http://www.sphere10.com/) for sponsoring the devel
         <UnitName Value="ClpIEd25519"/>
       </Item274>
       <Item275>
-        <Filename Value="..\..\Interfaces\ClpIEd25519Blake2B.pas"/>
-        <UnitName Value="ClpIEd25519Blake2B"/>
-      </Item275>
-      <Item276>
         <Filename Value="..\..\Math\EC\Rfc7748\ClpX25519Field.pas"/>
         <UnitName Value="ClpX25519Field"/>
-      </Item276>
-      <Item277>
+      </Item275>
+      <Item276>
         <Filename Value="..\..\Math\EC\Rfc8032\ClpEd25519.pas"/>
         <UnitName Value="ClpEd25519"/>
-      </Item277>
-      <Item278>
-        <Filename Value="..\..\Math\EC\Rfc8032\ClpEd25519Blake2B.pas"/>
-        <UnitName Value="ClpEd25519Blake2B"/>
-      </Item278>
-      <Item279>
+      </Item276>
+      <Item277>
         <Filename Value="..\..\Math\EC\Rfc7748\ClpX25519.pas"/>
         <UnitName Value="ClpX25519"/>
-      </Item279>
-      <Item280>
+      </Item277>
+      <Item278>
         <Filename Value="..\..\Asn1\Edec\ClpEdECObjectIdentifiers.pas"/>
         <UnitName Value="ClpEdECObjectIdentifiers"/>
-      </Item280>
-      <Item281>
-        <Filename Value="..\..\Interfaces\ClpIEd25519CtxBlake2BSigner.pas"/>
-        <UnitName Value="ClpIEd25519CtxBlake2BSigner"/>
-      </Item281>
-      <Item282>
-        <Filename Value="..\..\Interfaces\ClpIEd25519PhBlake2BSigner.pas"/>
-        <UnitName Value="ClpIEd25519PhBlake2BSigner"/>
-      </Item282>
-      <Item283>
+      </Item278>
+      <Item279>
         <Filename Value="..\..\Interfaces\ClpIEd25519PhSigner.pas"/>
         <UnitName Value="ClpIEd25519PhSigner"/>
-      </Item283>
-      <Item284>
+      </Item279>
+      <Item280>
         <Filename Value="..\..\Interfaces\ClpIEd25519CtxSigner.pas"/>
         <UnitName Value="ClpIEd25519CtxSigner"/>
-      </Item284>
-      <Item285>
-        <Filename Value="..\..\Interfaces\ClpIEd25519Blake2BSigner.pas"/>
-        <UnitName Value="ClpIEd25519Blake2BSigner"/>
-      </Item285>
-      <Item286>
+      </Item280>
+      <Item281>
         <Filename Value="..\..\Interfaces\ClpIEd25519Signer.pas"/>
         <UnitName Value="ClpIEd25519Signer"/>
-      </Item286>
-      <Item287>
-        <Filename Value="..\..\Interfaces\ClpIEd25519Blake2BKeyGenerationParameters.pas"/>
-        <UnitName Value="ClpIEd25519Blake2BKeyGenerationParameters"/>
-      </Item287>
-      <Item288>
+      </Item281>
+      <Item282>
         <Filename Value="..\..\Interfaces\ClpIEd25519KeyGenerationParameters.pas"/>
         <UnitName Value="ClpIEd25519KeyGenerationParameters"/>
-      </Item288>
-      <Item289>
+      </Item282>
+      <Item283>
         <Filename Value="..\..\Interfaces\ClpIX25519KeyGenerationParameters.pas"/>
         <UnitName Value="ClpIX25519KeyGenerationParameters"/>
-      </Item289>
-      <Item290>
-        <Filename Value="..\..\Interfaces\ClpIEd25519Blake2BKeyPairGenerator.pas"/>
-        <UnitName Value="ClpIEd25519Blake2BKeyPairGenerator"/>
-      </Item290>
-      <Item291>
+      </Item283>
+      <Item284>
         <Filename Value="..\..\Interfaces\ClpIEd25519KeyPairGenerator.pas"/>
         <UnitName Value="ClpIEd25519KeyPairGenerator"/>
-      </Item291>
-      <Item292>
+      </Item284>
+      <Item285>
         <Filename Value="..\..\Interfaces\ClpIX25519KeyPairGenerator.pas"/>
         <UnitName Value="ClpIX25519KeyPairGenerator"/>
-      </Item292>
-      <Item293>
-        <Filename Value="..\..\Interfaces\ClpIEd25519Blake2BPrivateKeyParameters.pas"/>
-        <UnitName Value="ClpIEd25519Blake2BPrivateKeyParameters"/>
-      </Item293>
-      <Item294>
-        <Filename Value="..\..\Interfaces\ClpIEd25519Blake2BPublicKeyParameters.pas"/>
-        <UnitName Value="ClpIEd25519Blake2BPublicKeyParameters"/>
-      </Item294>
-      <Item295>
+      </Item285>
+      <Item286>
         <Filename Value="..\..\Interfaces\ClpIEd25519PrivateKeyParameters.pas"/>
         <UnitName Value="ClpIEd25519PrivateKeyParameters"/>
-      </Item295>
-      <Item296>
+      </Item286>
+      <Item287>
         <Filename Value="..\..\Interfaces\ClpIEd25519PublicKeyParameters.pas"/>
         <UnitName Value="ClpIEd25519PublicKeyParameters"/>
-      </Item296>
-      <Item297>
+      </Item287>
+      <Item288>
         <Filename Value="..\..\Interfaces\ClpIX25519PublicKeyParameters.pas"/>
         <UnitName Value="ClpIX25519PublicKeyParameters"/>
-      </Item297>
-      <Item298>
+      </Item288>
+      <Item289>
         <Filename Value="..\..\Interfaces\ClpIX25519PrivateKeyParameters.pas"/>
         <UnitName Value="ClpIX25519PrivateKeyParameters"/>
-      </Item298>
-      <Item299>
+      </Item289>
+      <Item290>
         <Filename Value="..\..\Interfaces\ClpIX25519Agreement.pas"/>
         <UnitName Value="ClpIX25519Agreement"/>
-      </Item299>
-      <Item300>
+      </Item290>
+      <Item291>
         <Filename Value="..\..\Interfaces\ClpIRawAgreement.pas"/>
         <UnitName Value="ClpIRawAgreement"/>
-      </Item300>
-      <Item301>
+      </Item291>
+      <Item292>
         <Filename Value="..\..\Crypto\Agreement\ClpX25519Agreement.pas"/>
         <UnitName Value="ClpX25519Agreement"/>
-      </Item301>
-      <Item302>
-        <Filename Value="..\..\Crypto\Parameters\ClpEd25519Blake2BKeyGenerationParameters.pas"/>
-        <UnitName Value="ClpEd25519Blake2BKeyGenerationParameters"/>
-      </Item302>
-      <Item303>
+      </Item292>
+      <Item293>
         <Filename Value="..\..\Crypto\Parameters\ClpEd25519KeyGenerationParameters.pas"/>
         <UnitName Value="ClpEd25519KeyGenerationParameters"/>
-      </Item303>
-      <Item304>
+      </Item293>
+      <Item294>
         <Filename Value="..\..\Crypto\Parameters\ClpX25519KeyGenerationParameters.pas"/>
         <UnitName Value="ClpX25519KeyGenerationParameters"/>
-      </Item304>
-      <Item305>
-        <Filename Value="..\..\Crypto\Parameters\ClpEd25519Blake2BPrivateKeyParameters.pas"/>
-        <UnitName Value="ClpEd25519Blake2BPrivateKeyParameters"/>
-      </Item305>
-      <Item306>
-        <Filename Value="..\..\Crypto\Parameters\ClpEd25519Blake2BPublicKeyParameters.pas"/>
-        <UnitName Value="ClpEd25519Blake2BPublicKeyParameters"/>
-      </Item306>
-      <Item307>
+      </Item294>
+      <Item295>
         <Filename Value="..\..\Crypto\Parameters\ClpEd25519PublicKeyParameters.pas"/>
         <UnitName Value="ClpEd25519PublicKeyParameters"/>
-      </Item307>
-      <Item308>
+      </Item295>
+      <Item296>
         <Filename Value="..\..\Crypto\Parameters\ClpEd25519PrivateKeyParameters.pas"/>
         <UnitName Value="ClpEd25519PrivateKeyParameters"/>
-      </Item308>
-      <Item309>
+      </Item296>
+      <Item297>
         <Filename Value="..\..\Crypto\Parameters\ClpX25519PublicKeyParameters.pas"/>
         <UnitName Value="ClpX25519PublicKeyParameters"/>
-      </Item309>
-      <Item310>
+      </Item297>
+      <Item298>
         <Filename Value="..\..\Crypto\Parameters\ClpX25519PrivateKeyParameters.pas"/>
         <UnitName Value="ClpX25519PrivateKeyParameters"/>
-      </Item310>
-      <Item311>
-        <Filename Value="..\..\Crypto\Generators\ClpEd25519Blake2BKeyPairGenerator.pas"/>
-        <UnitName Value="ClpEd25519Blake2BKeyPairGenerator"/>
-      </Item311>
-      <Item312>
+      </Item298>
+      <Item299>
         <Filename Value="..\..\Crypto\Generators\ClpEd25519KeyPairGenerator.pas"/>
         <UnitName Value="ClpEd25519KeyPairGenerator"/>
-      </Item312>
-      <Item313>
+      </Item299>
+      <Item300>
         <Filename Value="..\..\Crypto\Generators\ClpX25519KeyPairGenerator.pas"/>
         <UnitName Value="ClpX25519KeyPairGenerator"/>
-      </Item313>
-      <Item314>
-        <Filename Value="..\..\Crypto\Signers\ClpEd25519PhBlake2BSigner.pas"/>
-        <UnitName Value="ClpEd25519PhBlake2BSigner"/>
-      </Item314>
-      <Item315>
+      </Item300>
+      <Item301>
         <Filename Value="..\..\Crypto\Signers\ClpEd25519PhSigner.pas"/>
         <UnitName Value="ClpEd25519PhSigner"/>
-      </Item315>
-      <Item316>
+      </Item301>
+      <Item302>
         <Filename Value="..\..\Crypto\Signers\ClpEd25519Signer.pas"/>
         <UnitName Value="ClpEd25519Signer"/>
-      </Item316>
-      <Item317>
-        <Filename Value="..\..\Crypto\Signers\ClpEd25519CtxBlake2BSigner.pas"/>
-        <UnitName Value="ClpEd25519CtxBlake2BSigner"/>
-      </Item317>
-      <Item318>
+      </Item302>
+      <Item303>
         <Filename Value="..\..\Crypto\Signers\ClpEd25519CtxSigner.pas"/>
         <UnitName Value="ClpEd25519CtxSigner"/>
-      </Item318>
-      <Item319>
-        <Filename Value="..\..\Crypto\Signers\ClpEd25519Blake2BSigner.pas"/>
-        <UnitName Value="ClpEd25519Blake2BSigner"/>
-      </Item319>
-      <Item320>
+      </Item303>
+      <Item304>
         <Filename Value="..\..\Asn1\TeleTrust\ClpTeleTrusTNamedCurves.pas"/>
         <UnitName Value="ClpTeleTrusTNamedCurves"/>
-      </Item320>
-      <Item321>
+      </Item304>
+      <Item305>
         <Filename Value="..\..\Security\ClpAgreementUtilities.pas"/>
         <UnitName Value="ClpAgreementUtilities"/>
-      </Item321>
-      <Item322>
+      </Item305>
+      <Item306>
         <Filename Value="..\..\Interfaces\ClpIKdf1BytesGenerator.pas"/>
         <UnitName Value="ClpIKdf1BytesGenerator"/>
-      </Item322>
-      <Item323>
+      </Item306>
+      <Item307>
         <Filename Value="..\..\Crypto\Generators\ClpKdf1BytesGenerator.pas"/>
         <UnitName Value="ClpKdf1BytesGenerator"/>
-      </Item323>
-      <Item324>
+      </Item307>
+      <Item308>
         <Filename Value="..\..\Interfaces\ClpIArgon2ParametersGenerator.pas"/>
         <UnitName Value="ClpIArgon2ParametersGenerator"/>
-      </Item324>
-      <Item325>
+      </Item308>
+      <Item309>
         <Filename Value="..\..\Crypto\Generators\ClpArgon2ParametersGenerator.pas"/>
         <UnitName Value="ClpArgon2ParametersGenerator"/>
-      </Item325>
-      <Item326>
+      </Item309>
+      <Item310>
         <Filename Value="..\..\Interfaces\ClpIScryptParametersGenerator.pas"/>
         <UnitName Value="ClpIScryptParametersGenerator"/>
-      </Item326>
-      <Item327>
+      </Item310>
+      <Item311>
         <Filename Value="..\..\Crypto\Generators\ClpScryptParametersGenerator.pas"/>
         <UnitName Value="ClpScryptParametersGenerator"/>
-      </Item327>
-      <Item328>
+      </Item311>
+      <Item312>
         <Filename Value="..\..\Interfaces\ClpIDHAgreement.pas"/>
         <UnitName Value="ClpIDHAgreement"/>
-      </Item328>
-      <Item329>
+      </Item312>
+      <Item313>
         <Filename Value="..\..\Interfaces\ClpIDHBasicAgreement.pas"/>
         <UnitName Value="ClpIDHBasicAgreement"/>
-      </Item329>
-      <Item330>
+      </Item313>
+      <Item314>
         <Filename Value="..\..\Interfaces\ClpIDHBasicKeyPairGenerator.pas"/>
         <UnitName Value="ClpIDHBasicKeyPairGenerator"/>
-      </Item330>
-      <Item331>
+      </Item314>
+      <Item315>
         <Filename Value="..\..\Interfaces\ClpIDHKeyPairGenerator.pas"/>
         <UnitName Value="ClpIDHKeyPairGenerator"/>
-      </Item331>
-      <Item332>
+      </Item315>
+      <Item316>
         <Filename Value="..\..\Interfaces\ClpIDHPrivateKeyParameters.pas"/>
         <UnitName Value="ClpIDHPrivateKeyParameters"/>
-      </Item332>
-      <Item333>
+      </Item316>
+      <Item317>
         <Filename Value="..\..\Interfaces\ClpIDHPublicKeyParameters.pas"/>
         <UnitName Value="ClpIDHPublicKeyParameters"/>
-      </Item333>
-      <Item334>
+      </Item317>
+      <Item318>
         <Filename Value="..\..\Interfaces\ClpIDHParametersGenerator.pas"/>
         <UnitName Value="ClpIDHParametersGenerator"/>
-      </Item334>
-      <Item335>
+      </Item318>
+      <Item319>
         <Filename Value="..\..\Interfaces\ClpIDHKeyGenerationParameters.pas"/>
         <UnitName Value="ClpIDHKeyGenerationParameters"/>
-      </Item335>
-      <Item336>
+      </Item319>
+      <Item320>
         <Filename Value="..\..\Interfaces\ClpIDHParameters.pas"/>
         <UnitName Value="ClpIDHParameters"/>
-      </Item336>
-      <Item337>
+      </Item320>
+      <Item321>
         <Filename Value="..\..\Interfaces\ClpIDHKeyGeneratorHelper.pas"/>
         <UnitName Value="ClpIDHKeyGeneratorHelper"/>
-      </Item337>
-      <Item338>
+      </Item321>
+      <Item322>
         <Filename Value="..\..\Interfaces\ClpIDHKeyParameters.pas"/>
         <UnitName Value="ClpIDHKeyParameters"/>
-      </Item338>
-      <Item339>
+      </Item322>
+      <Item323>
         <Filename Value="..\..\Interfaces\ClpIDHValidationParameters.pas"/>
         <UnitName Value="ClpIDHValidationParameters"/>
-      </Item339>
-      <Item340>
+      </Item323>
+      <Item324>
         <Filename Value="..\..\Interfaces\ClpIDHDomainParameters.pas"/>
         <UnitName Value="ClpIDHDomainParameters"/>
-      </Item340>
-      <Item341>
+      </Item324>
+      <Item325>
         <Filename Value="..\..\Interfaces\ClpIDHValidationParams.pas"/>
         <UnitName Value="ClpIDHValidationParams"/>
-      </Item341>
-      <Item342>
+      </Item325>
+      <Item326>
         <Filename Value="..\..\Crypto\Agreement\ClpDHAgreement.pas"/>
         <UnitName Value="ClpDHAgreement"/>
-      </Item342>
-      <Item343>
+      </Item326>
+      <Item327>
         <Filename Value="..\..\Crypto\Agreement\ClpDHBasicAgreement.pas"/>
         <UnitName Value="ClpDHBasicAgreement"/>
-      </Item343>
-      <Item344>
+      </Item327>
+      <Item328>
         <Filename Value="..\..\Crypto\Generators\ClpDHBasicKeyPairGenerator.pas"/>
         <UnitName Value="ClpDHBasicKeyPairGenerator"/>
-      </Item344>
-      <Item345>
+      </Item328>
+      <Item329>
         <Filename Value="..\..\Crypto\Generators\ClpDHKeyPairGenerator.pas"/>
         <UnitName Value="ClpDHKeyPairGenerator"/>
-      </Item345>
-      <Item346>
+      </Item329>
+      <Item330>
         <Filename Value="..\..\Crypto\Generators\ClpDHParametersGenerator.pas"/>
         <UnitName Value="ClpDHParametersGenerator"/>
-      </Item346>
-      <Item347>
+      </Item330>
+      <Item331>
         <Filename Value="..\..\Crypto\Generators\ClpDHKeyGeneratorHelper.pas"/>
         <UnitName Value="ClpDHKeyGeneratorHelper"/>
-      </Item347>
-      <Item348>
+      </Item331>
+      <Item332>
         <Filename Value="..\..\Crypto\Generators\ClpDHParametersHelper.pas"/>
         <UnitName Value="ClpDHParametersHelper"/>
-      </Item348>
-      <Item349>
+      </Item332>
+      <Item333>
         <Filename Value="..\..\Crypto\Parameters\ClpDHPrivateKeyParameters.pas"/>
         <UnitName Value="ClpDHPrivateKeyParameters"/>
-      </Item349>
-      <Item350>
+      </Item333>
+      <Item334>
         <Filename Value="..\..\Crypto\Parameters\ClpDHPublicKeyParameters.pas"/>
         <UnitName Value="ClpDHPublicKeyParameters"/>
-      </Item350>
-      <Item351>
+      </Item334>
+      <Item335>
         <Filename Value="..\..\Crypto\Parameters\ClpDHKeyGenerationParameters.pas"/>
         <UnitName Value="ClpDHKeyGenerationParameters"/>
-      </Item351>
-      <Item352>
+      </Item335>
+      <Item336>
         <Filename Value="..\..\Crypto\Parameters\ClpDHKeyParameters.pas"/>
         <UnitName Value="ClpDHKeyParameters"/>
-      </Item352>
-      <Item353>
+      </Item336>
+      <Item337>
         <Filename Value="..\..\Crypto\Parameters\ClpDHValidationParameters.pas"/>
         <UnitName Value="ClpDHValidationParameters"/>
-      </Item353>
-      <Item354>
+      </Item337>
+      <Item338>
         <Filename Value="..\..\Crypto\Parameters\ClpDHParameters.pas"/>
         <UnitName Value="ClpDHParameters"/>
-      </Item354>
-      <Item355>
+      </Item338>
+      <Item339>
         <Filename Value="..\..\Asn1\X9\ClpDHDomainParameters.pas"/>
         <UnitName Value="ClpDHDomainParameters"/>
-      </Item355>
-      <Item356>
+      </Item339>
+      <Item340>
         <Filename Value="..\..\Asn1\X9\ClpDHValidationParams.pas"/>
         <UnitName Value="ClpDHValidationParams"/>
-      </Item356>
-      <Item357>
+      </Item340>
+      <Item341>
         <Filename Value="..\..\Utils\Randoms\ClpAESPRNGRandom.pas"/>
         <UnitName Value="ClpAESPRNGRandom"/>
-      </Item357>
-      <Item358>
+      </Item341>
+      <Item342>
         <Filename Value="..\..\Asn1\CryptLib\ClpCryptLibObjectIdentifiers.pas"/>
         <UnitName Value="ClpCryptLibObjectIdentifiers"/>
-      </Item358>
-      <Item359>
+      </Item342>
+      <Item343>
         <Filename Value="..\..\Interfaces\ClpIEndoPreCompInfo.pas"/>
         <UnitName Value="ClpIEndoPreCompInfo"/>
-      </Item359>
-      <Item360>
+      </Item343>
+      <Item344>
         <Filename Value="..\..\Math\EC\Endo\ClpEndoPreCompInfo.pas"/>
         <UnitName Value="ClpEndoPreCompInfo"/>
-      </Item360>
-      <Item361>
+      </Item344>
+      <Item345>
         <Filename Value="..\..\Math\EC\ClpScaleXNegateYPointMap.pas"/>
         <UnitName Value="ClpScaleXNegateYPointMap"/>
-      </Item361>
-      <Item362>
+      </Item345>
+      <Item346>
         <Filename Value="..\..\Math\EC\ClpScaleYNegateXPointMap.pas"/>
         <UnitName Value="ClpScaleYNegateXPointMap"/>
-      </Item362>
-      <Item363>
+      </Item346>
+      <Item347>
         <Filename Value="..\..\Math\EC\Endo\ClpGlvTypeAEndomorphism.pas"/>
         <UnitName Value="ClpGlvTypeAEndomorphism"/>
-      </Item363>
-      <Item364>
+      </Item347>
+      <Item348>
         <Filename Value="..\..\Math\EC\Endo\ClpGlvTypeAParameters.pas"/>
         <UnitName Value="ClpGlvTypeAParameters"/>
-      </Item364>
-      <Item365>
+      </Item348>
+      <Item349>
         <Filename Value="..\..\Math\EC\Endo\ClpScalarSplitParameters.pas"/>
         <UnitName Value="ClpScalarSplitParameters"/>
-      </Item365>
-      <Item366>
+      </Item349>
+      <Item350>
         <Filename Value="..\..\Interfaces\ClpIGlvTypeAParameters.pas"/>
         <UnitName Value="ClpIGlvTypeAParameters"/>
-      </Item366>
-      <Item367>
+      </Item350>
+      <Item351>
         <Filename Value="..\..\Interfaces\ClpIGlvTypeAEndomorphism.pas"/>
         <UnitName Value="ClpIGlvTypeAEndomorphism"/>
-      </Item367>
-      <Item368>
+      </Item351>
+      <Item352>
         <Filename Value="..\..\Interfaces\ClpIScaleXNegateYPointMap.pas"/>
         <UnitName Value="ClpIScaleXNegateYPointMap"/>
-      </Item368>
-      <Item369>
+      </Item352>
+      <Item353>
         <Filename Value="..\..\Interfaces\ClpIScaleYNegateXPointMap.pas"/>
         <UnitName Value="ClpIScaleYNegateXPointMap"/>
-      </Item369>
-      <Item370>
+      </Item353>
+      <Item354>
         <Filename Value="..\..\Interfaces\ClpIScalarSplitParameters.pas"/>
         <UnitName Value="ClpIScalarSplitParameters"/>
-      </Item370>
-      <Item371>
+      </Item354>
+      <Item355>
         <Filename Value="..\..\Math\EC\ClpECCompUtilities.pas"/>
         <UnitName Value="ClpECCompUtilities"/>
-      </Item371>
-      <Item372>
+      </Item355>
+      <Item356>
         <Filename Value="..\..\Math\EC\Multiplier\ClpValidityPreCompInfo.pas"/>
         <UnitName Value="ClpValidityPreCompInfo"/>
-      </Item372>
-      <Item373>
+      </Item356>
+      <Item357>
         <Filename Value="..\..\Interfaces\ClpIValidityPreCompInfo.pas"/>
         <UnitName Value="ClpIValidityPreCompInfo"/>
-      </Item373>
-      <Item374>
+      </Item357>
+      <Item358>
         <Filename Value="..\..\Crypto\Macs\ClpKMac.pas"/>
         <UnitName Value="ClpKMac"/>
-      </Item374>
-      <Item375>
+      </Item358>
+      <Item359>
         <Filename Value="..\..\Interfaces\ClpIKMac.pas"/>
         <UnitName Value="ClpIKMac"/>
-      </Item375>
+      </Item359>
     </Files>
     <RequiredPkgs Count="3">
       <Item1>

+ 11 - 19
CryptoLib/src/Packages/FPC/CryptoLib4PascalPackage.pas

@@ -94,27 +94,19 @@ uses
   ClpSalsa20Engine, ClpXSalsa20Engine, ClpChaChaEngine, ClpIRijndaelEngine, 
   ClpRijndaelEngine, ClpIIESParameterSpec, ClpIAlgorithmParameterSpec, 
   ClpIESParameterSpec, ClpCurve25519Custom, ClpICurve25519Custom, 
-  ClpSpeckLegacyEngine, ClpISpeckLegacyEngine, ClpIEd25519, 
-  ClpIEd25519Blake2B, ClpX25519Field, ClpEd25519, ClpEd25519Blake2B, 
-  ClpX25519, ClpEdECObjectIdentifiers, ClpIEd25519CtxBlake2BSigner, 
-  ClpIEd25519PhBlake2BSigner, ClpIEd25519PhSigner, ClpIEd25519CtxSigner, 
-  ClpIEd25519Blake2BSigner, ClpIEd25519Signer, 
-  ClpIEd25519Blake2BKeyGenerationParameters, 
-  ClpIEd25519KeyGenerationParameters, ClpIX25519KeyGenerationParameters, 
-  ClpIEd25519Blake2BKeyPairGenerator, ClpIEd25519KeyPairGenerator, 
-  ClpIX25519KeyPairGenerator, ClpIEd25519Blake2BPrivateKeyParameters, 
-  ClpIEd25519Blake2BPublicKeyParameters, ClpIEd25519PrivateKeyParameters, 
+  ClpSpeckLegacyEngine, ClpISpeckLegacyEngine, ClpIEd25519, ClpX25519Field, 
+  ClpEd25519, ClpX25519, ClpEdECObjectIdentifiers, ClpIEd25519PhSigner, 
+  ClpIEd25519CtxSigner, ClpIEd25519Signer, ClpIEd25519KeyGenerationParameters, 
+  ClpIX25519KeyGenerationParameters, ClpIEd25519KeyPairGenerator, 
+  ClpIX25519KeyPairGenerator, ClpIEd25519PrivateKeyParameters, 
   ClpIEd25519PublicKeyParameters, ClpIX25519PublicKeyParameters, 
   ClpIX25519PrivateKeyParameters, ClpIX25519Agreement, ClpIRawAgreement, 
-  ClpX25519Agreement, ClpEd25519Blake2BKeyGenerationParameters, 
-  ClpEd25519KeyGenerationParameters, ClpX25519KeyGenerationParameters, 
-  ClpEd25519Blake2BPrivateKeyParameters, ClpEd25519Blake2BPublicKeyParameters, 
-  ClpEd25519PublicKeyParameters, ClpEd25519PrivateKeyParameters, 
-  ClpX25519PublicKeyParameters, ClpX25519PrivateKeyParameters, 
-  ClpEd25519Blake2BKeyPairGenerator, ClpEd25519KeyPairGenerator, 
-  ClpX25519KeyPairGenerator, ClpEd25519PhBlake2BSigner, ClpEd25519PhSigner, 
-  ClpEd25519Signer, ClpEd25519CtxBlake2BSigner, ClpEd25519CtxSigner, 
-  ClpEd25519Blake2BSigner, ClpTeleTrusTNamedCurves, ClpAgreementUtilities, 
+  ClpX25519Agreement, ClpEd25519KeyGenerationParameters, 
+  ClpX25519KeyGenerationParameters, ClpEd25519PublicKeyParameters, 
+  ClpEd25519PrivateKeyParameters, ClpX25519PublicKeyParameters, 
+  ClpX25519PrivateKeyParameters, ClpEd25519KeyPairGenerator, 
+  ClpX25519KeyPairGenerator, ClpEd25519PhSigner, ClpEd25519Signer, 
+  ClpEd25519CtxSigner, ClpTeleTrusTNamedCurves, ClpAgreementUtilities, 
   ClpIKdf1BytesGenerator, ClpKdf1BytesGenerator, 
   ClpIArgon2ParametersGenerator, ClpArgon2ParametersGenerator, 
   ClpIScryptParametersGenerator, ClpScryptParametersGenerator, 

+ 6 - 5
CryptoLib/src/Security/ClpGeneratorUtilities.pas

@@ -23,6 +23,8 @@ interface
 
 uses
   SysUtils,
+  ClpEd25519,
+  ClpIEd25519,
   Generics.Collections,
   ClpECKeyPairGenerator,
   ClpIECKeyPairGenerator,
@@ -35,8 +37,6 @@ uses
   ClpIDHKeyPairGenerator,
   ClpEd25519KeyPairGenerator,
   ClpIEd25519KeyPairGenerator,
-  ClpEd25519Blake2BKeyPairGenerator,
-  ClpIEd25519Blake2BKeyPairGenerator,
   ClpX25519KeyPairGenerator,
   ClpIX25519KeyPairGenerator,
   ClpIAsymmetricCipherKeyPairGenerator,
@@ -409,14 +409,15 @@ begin
 
   if (canonicalName = 'Ed25519') then
   begin
-    result := TEd25519KeyPairGenerator.Create() as IEd25519KeyPairGenerator;
+    result := TEd25519KeyPairGenerator.Create(TEd25519.Create() as IEd25519)
+      as IEd25519KeyPairGenerator;
     Exit;
   end;
 
   if (canonicalName = 'Ed25519Blake2B') then
   begin
-    result := TEd25519Blake2BKeyPairGenerator.Create()
-      as IEd25519Blake2BKeyPairGenerator;
+    result := TEd25519KeyPairGenerator.Create(TEd25519Blake2B.Create()
+      as IEd25519Blake2B) as IEd25519KeyPairGenerator;
     Exit;
   end;
 

+ 14 - 14
CryptoLib/src/Security/ClpSignerUtilities.pas

@@ -39,6 +39,8 @@ uses
   ClpEdECObjectIdentifiers,
   ClpParameterUtilities,
   ClpIAsymmetricKeyParameter,
+  ClpEd25519,
+  ClpIEd25519,
   ClpDsaSigner,
   ClpIDsaSigner,
   ClpECDsaSigner,
@@ -49,12 +51,6 @@ uses
   ClpIEd25519CtxSigner,
   ClpEd25519PhSigner,
   ClpIEd25519PhSigner,
-  ClpEd25519Blake2BSigner,
-  ClpIEd25519Blake2BSigner,
-  ClpEd25519CtxBlake2BSigner,
-  ClpIEd25519CtxBlake2BSigner,
-  ClpEd25519PhBlake2BSigner,
-  ClpIEd25519PhBlake2BSigner,
   ClpISigner,
   ClpISecureRandom,
   ClpIAsn1Objects,
@@ -508,19 +504,20 @@ begin
     begin
       if (mechanism = 'Ed25519Blake2B') then
       begin
-        Result := TEd25519Blake2BSigner.Create() as IEd25519Blake2BSigner;
+        Result := TEd25519Signer.Create(TEd25519Blake2B.Create()
+          as IEd25519Blake2B) as IEd25519Signer;
         Exit;
       end;
       if (mechanism = 'Ed25519ctxBlake2B') then
       begin
-        Result := TEd25519ctxBlake2BSigner.Create(Nil)
-          as IEd25519ctxBlake2BSigner;
+        Result := TEd25519ctxSigner.Create(TEd25519Blake2B.Create()
+          as IEd25519Blake2B, Nil) as IEd25519ctxSigner;
         Exit;
       end;
       if (mechanism = 'Ed25519phBlake2B') then
       begin
-        Result := TEd25519phBlake2BSigner.Create(Nil)
-          as IEd25519phBlake2BSigner;
+        Result := TEd25519phSigner.Create(TEd25519Blake2B.Create()
+          as IEd25519Blake2B, Nil) as IEd25519phSigner;
         Exit;
       end;
     end
@@ -528,17 +525,20 @@ begin
     begin
       if (mechanism = 'Ed25519') then
       begin
-        Result := TEd25519Signer.Create() as IEd25519Signer;
+        Result := TEd25519Signer.Create(TEd25519.Create() as IEd25519)
+          as IEd25519Signer;
         Exit;
       end;
       if (mechanism = 'Ed25519ctx') then
       begin
-        Result := TEd25519ctxSigner.Create(Nil) as IEd25519ctxSigner;
+        Result := TEd25519ctxSigner.Create(TEd25519.Create() as IEd25519, Nil)
+          as IEd25519ctxSigner;
         Exit;
       end;
       if (mechanism = 'Ed25519ph') then
       begin
-        Result := TEd25519phSigner.Create(Nil) as IEd25519phSigner;
+        Result := TEd25519phSigner.Create(TEd25519.Create() as IEd25519, Nil)
+          as IEd25519phSigner;
         Exit;
       end;
     end;