Ugochukwu Mmaduekwe пре 2 недеља
родитељ
комит
3ecccf533b

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

@@ -98,7 +98,6 @@ uses
   ClpDsaKeyGenerationParameters in '..\..\CryptoLib\src\Crypto\Parameters\ClpDsaKeyGenerationParameters.pas',
   ClpDsaKeyPairGenerator in '..\..\CryptoLib\src\Crypto\Generators\ClpDsaKeyPairGenerator.pas',
   ClpDsaKeyParameters in '..\..\CryptoLib\src\Crypto\Parameters\ClpDsaKeyParameters.pas',
-  ClpDsaParameter in '..\..\CryptoLib\src\Asn1\X509\ClpDsaParameter.pas',
   ClpDsaParameterGenerationParameters in '..\..\CryptoLib\src\Crypto\Parameters\ClpDsaParameterGenerationParameters.pas',
   ClpDsaParameters in '..\..\CryptoLib\src\Crypto\Parameters\ClpDsaParameters.pas',
   ClpDsaParametersGenerator in '..\..\CryptoLib\src\Crypto\Generators\ClpDsaParametersGenerator.pas',
@@ -205,7 +204,6 @@ uses
   ClpIDsaKeyGenerationParameters in '..\..\CryptoLib\src\Interfaces\Crypto\Parameters\ClpIDsaKeyGenerationParameters.pas',
   ClpIDsaKeyPairGenerator in '..\..\CryptoLib\src\Interfaces\Crypto\Generators\ClpIDsaKeyPairGenerator.pas',
   ClpIDsaKeyParameters in '..\..\CryptoLib\src\Interfaces\Crypto\Parameters\ClpIDsaKeyParameters.pas',
-  ClpIDsaParameter in '..\..\CryptoLib\src\Interfaces\Asn1\X509\ClpIDsaParameter.pas',
   ClpIDsaParameterGenerationParameters in '..\..\CryptoLib\src\Interfaces\Crypto\Parameters\ClpIDsaParameterGenerationParameters.pas',
   ClpIDsaParameters in '..\..\CryptoLib\src\Interfaces\Crypto\Parameters\ClpIDsaParameters.pas',
   ClpIDsaParametersGenerator in '..\..\CryptoLib\src\Interfaces\Crypto\Generators\ClpIDsaParametersGenerator.pas',

+ 2 - 2
CryptoLib.Tests/src/Crypto/DSATests.pas

@@ -37,8 +37,8 @@ uses
   ClpIDsaParameters,
   ClpDsaParameters,
   ClpIECC,
-  ClpDsaParameter,
-  ClpIDsaParameter,
+  ClpIX509Asn1Objects,
+  ClpX509Asn1Objects,
   ClpECC,
   ClpECDomainParameters,
   ClpIECDomainParameters,

+ 0 - 178
CryptoLib/src/Asn1/X509/ClpDsaParameter.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 ClpDsaParameter;
-
-{$I ..\..\Include\CryptoLib.inc}
-
-interface
-
-uses
-  SysUtils,
-  ClpIDsaParameter,
-  ClpAsn1Objects,
-  ClpIAsn1Objects,
-  ClpAsn1Core,
-  ClpIAsn1Core,
-  ClpBigInteger,
-  ClpCryptoLibTypes;
-
-resourcestring
-  SBadSequenceSize = 'Bad Sequence Size "seq": %d';
-  SInvalidDsaParameter = 'Invalid DsaParameter: %s';
-
-type
-  TDsaParameter = class(TAsn1Encodable, IDsaParameter)
-
-  strict private
-  var
-    FP, FQ, FG: IDerInteger;
-
-    function GetG: TBigInteger; inline;
-    function GetP: TBigInteger; inline;
-    function GetQ: TBigInteger; inline;
-
-    constructor Create(const ASeq: IAsn1Sequence); overload;
-
-  public
-    constructor Create(const AP, AQ, AG: TBigInteger); overload;
-
-    function ToAsn1Object(): IAsn1Object; override;
-
-    property P: TBigInteger read GetP;
-    property Q: TBigInteger read GetQ;
-    property G: TBigInteger read GetG;
-
-    /// <summary>
-    /// Parse a DsaParameter from an object.
-    /// </summary>
-    class function GetInstance(AObj: TObject): IDsaParameter; overload; static;
-    /// <summary>
-    /// Get instance from ASN.1 convertible.
-    /// </summary>
-    class function GetInstance(const AObj: IAsn1Convertible): IDsaParameter; overload; static;
-    /// <summary>
-    /// Parse a DsaParameter from DER-encoded bytes.
-    /// </summary>
-    class function GetInstance(const AEncoded: TCryptoLibByteArray): IDsaParameter; overload; static;
-    /// <summary>
-    /// Parse a DsaParameter from a tagged object.
-    /// </summary>
-    class function GetInstance(const AObj: IAsn1TaggedObject; AExplicitly: Boolean): IDsaParameter; overload; static;
-    /// <summary>
-    /// Get tagged DsaParameter.
-    /// </summary>
-    class function GetTagged(const ATaggedObject: IAsn1TaggedObject; ADeclaredExplicit: Boolean): IDsaParameter; static;
-
-  end;
-
-implementation
-
-{ TDsaParameter }
-
-function TDsaParameter.GetP: TBigInteger;
-begin
-  result := FP.PositiveValue;
-end;
-
-function TDsaParameter.GetQ: TBigInteger;
-begin
-  result := FQ.PositiveValue;
-end;
-
-function TDsaParameter.GetG: TBigInteger;
-begin
-  result := FG.PositiveValue;
-end;
-
-function TDsaParameter.ToAsn1Object: IAsn1Object;
-begin
-  result := TDerSequence.Create([FP, FQ, FG]);
-end;
-
-constructor TDsaParameter.Create(const ASeq: IAsn1Sequence);
-begin
-  Inherited Create();
-  if (ASeq.Count <> 3) then
-  begin
-    raise EArgumentCryptoLibException.CreateResFmt(@SBadSequenceSize,
-      [ASeq.Count]);
-  end;
-
-  FP := TDerInteger.GetInstance(ASeq[0]);
-  FQ := TDerInteger.GetInstance(ASeq[1]);
-  FG := TDerInteger.GetInstance(ASeq[2]);
-end;
-
-constructor TDsaParameter.Create(const AP, AQ, AG: TBigInteger);
-begin
-  Inherited Create();
-  FP := TDerInteger.Create(AP);
-  FQ := TDerInteger.Create(AQ);
-  FG := TDerInteger.Create(AG);
-end;
-
-class function TDsaParameter.GetInstance(AObj: TObject): IDsaParameter;
-begin
-  if AObj = nil then
-  begin
-    Result := nil;
-    Exit;
-  end;
-
-  if Supports(AObj, IDsaParameter, Result) then
-    Exit;
-
-  Result := TDsaParameter.Create(TAsn1Sequence.GetInstance(AObj));
-end;
-
-class function TDsaParameter.GetInstance(const AObj: IAsn1Convertible): IDsaParameter;
-begin
-  if AObj = nil then
-  begin
-    Result := nil;
-    Exit;
-  end;
-
-  if Supports(AObj, IDsaParameter, Result) then
-    Exit;
-
-  Result := TDsaParameter.Create(TAsn1Sequence.GetInstance(AObj));
-end;
-
-class function TDsaParameter.GetInstance(const AEncoded: TCryptoLibByteArray): IDsaParameter;
-begin
-  if AEncoded = nil then
-  begin
-    Result := nil;
-    Exit;
-  end;
-
-  Result := TDsaParameter.Create(TAsn1Sequence.GetInstance(AEncoded));
-end;
-
-class function TDsaParameter.GetInstance(const AObj: IAsn1TaggedObject; AExplicitly: Boolean): IDsaParameter;
-begin
-  Result := TDsaParameter.Create(TAsn1Sequence.GetInstance(AObj, AExplicitly));
-end;
-
-class function TDsaParameter.GetTagged(const ATaggedObject: IAsn1TaggedObject; ADeclaredExplicit: Boolean): IDsaParameter;
-begin
-  Result := TDsaParameter.Create(TAsn1Sequence.GetTagged(ATaggedObject, ADeclaredExplicit));
-end;
-
-end.

+ 141 - 0
CryptoLib/src/Asn1/X509/ClpX509Asn1Objects.pas

@@ -76,6 +76,7 @@ resourcestring
   SDeltaCertDescSerialNil = 'serialNumber';
   SDeltaCertDescSpkiNil = 'subjectPublicKeyInfo';
   SDeltaCertDescSigValNil = 'signatureValue';
+  SInvalidDsaParameter = 'Invalid DsaParameter: %s';
 
 type
   /// <summary>
@@ -1630,6 +1631,53 @@ type
 
   end;
 
+  /// <summary>
+  /// The DsaParameter object.
+  /// </summary>
+  TDsaParameter = class(TAsn1Encodable, IDsaParameter)
+
+  strict private
+  var
+    FP, FQ, FG: IDerInteger;
+
+    function GetG: TBigInteger; inline;
+    function GetP: TBigInteger; inline;
+    function GetQ: TBigInteger; inline;
+
+    constructor Create(const ASeq: IAsn1Sequence); overload;
+
+  public
+    constructor Create(const AP, AQ, AG: TBigInteger); overload;
+
+    function ToAsn1Object(): IAsn1Object; override;
+
+    property P: TBigInteger read GetP;
+    property Q: TBigInteger read GetQ;
+    property G: TBigInteger read GetG;
+
+    /// <summary>
+    /// Parse a DsaParameter from an object.
+    /// </summary>
+    class function GetInstance(AObj: TObject): IDsaParameter; overload; static;
+    /// <summary>
+    /// Get instance from ASN.1 convertible.
+    /// </summary>
+    class function GetInstance(const AObj: IAsn1Convertible): IDsaParameter; overload; static;
+    /// <summary>
+    /// Parse a DsaParameter from DER-encoded bytes.
+    /// </summary>
+    class function GetInstance(const AEncoded: TCryptoLibByteArray): IDsaParameter; overload; static;
+    /// <summary>
+    /// Parse a DsaParameter from a tagged object.
+    /// </summary>
+    class function GetInstance(const AObj: IAsn1TaggedObject; AExplicitly: Boolean): IDsaParameter; overload; static;
+    /// <summary>
+    /// Get tagged DsaParameter.
+    /// </summary>
+    class function GetTagged(const ATaggedObject: IAsn1TaggedObject; ADeclaredExplicit: Boolean): IDsaParameter; static;
+
+  end;
+
   /// <summary>
   /// The AttCertIssuer object.
   /// </summary>
@@ -7086,6 +7134,99 @@ begin
   end;
 end;
 
+{ TDsaParameter }
+
+function TDsaParameter.GetP: TBigInteger;
+begin
+  result := FP.PositiveValue;
+end;
+
+function TDsaParameter.GetQ: TBigInteger;
+begin
+  result := FQ.PositiveValue;
+end;
+
+function TDsaParameter.GetG: TBigInteger;
+begin
+  result := FG.PositiveValue;
+end;
+
+function TDsaParameter.ToAsn1Object: IAsn1Object;
+begin
+  result := TDerSequence.Create([FP, FQ, FG]);
+end;
+
+constructor TDsaParameter.Create(const ASeq: IAsn1Sequence);
+begin
+  Inherited Create();
+  if (ASeq.Count <> 3) then
+  begin
+    raise EArgumentCryptoLibException.CreateResFmt(@SBadSequenceSize,
+      [ASeq.Count]);
+  end;
+
+  FP := TDerInteger.GetInstance(ASeq[0]);
+  FQ := TDerInteger.GetInstance(ASeq[1]);
+  FG := TDerInteger.GetInstance(ASeq[2]);
+end;
+
+constructor TDsaParameter.Create(const AP, AQ, AG: TBigInteger);
+begin
+  Inherited Create();
+  FP := TDerInteger.Create(AP);
+  FQ := TDerInteger.Create(AQ);
+  FG := TDerInteger.Create(AG);
+end;
+
+class function TDsaParameter.GetInstance(AObj: TObject): IDsaParameter;
+begin
+  if AObj = nil then
+  begin
+    Result := nil;
+    Exit;
+  end;
+
+  if Supports(AObj, IDsaParameter, Result) then
+    Exit;
+
+  Result := TDsaParameter.Create(TAsn1Sequence.GetInstance(AObj));
+end;
+
+class function TDsaParameter.GetInstance(const AObj: IAsn1Convertible): IDsaParameter;
+begin
+  if AObj = nil then
+  begin
+    Result := nil;
+    Exit;
+  end;
+
+  if Supports(AObj, IDsaParameter, Result) then
+    Exit;
+
+  Result := TDsaParameter.Create(TAsn1Sequence.GetInstance(AObj));
+end;
+
+class function TDsaParameter.GetInstance(const AEncoded: TCryptoLibByteArray): IDsaParameter;
+begin
+  if AEncoded = nil then
+  begin
+    Result := nil;
+    Exit;
+  end;
+
+  Result := TDsaParameter.Create(TAsn1Sequence.GetInstance(AEncoded));
+end;
+
+class function TDsaParameter.GetInstance(const AObj: IAsn1TaggedObject; AExplicitly: Boolean): IDsaParameter;
+begin
+  Result := TDsaParameter.Create(TAsn1Sequence.GetInstance(AObj, AExplicitly));
+end;
+
+class function TDsaParameter.GetTagged(const ATaggedObject: IAsn1TaggedObject; ADeclaredExplicit: Boolean): IDsaParameter;
+begin
+  Result := TDsaParameter.Create(TAsn1Sequence.GetTagged(ATaggedObject, ADeclaredExplicit));
+end;
+
 { TDistributionPointName }
 
 class function TDistributionPointName.GetInstance(AObj: TObject): IDistributionPointName;

+ 1 - 2
CryptoLib/src/Factories/ClpPrivateKeyFactory.pas

@@ -34,7 +34,6 @@ uses
   ClpDsaPrivateKeyParameters,
   ClpECPrivateKeyParameters,
   ClpDsaParameters,
-  ClpDsaParameter,
   ClpECDomainParameters,
   ClpPkcsObjectIdentifiers,
   ClpX509ObjectIdentifiers,
@@ -44,8 +43,8 @@ uses
   ClpPkcsAsn1Objects,
   ClpIECDomainParameters,
   ClpIDsaParameters,
-  ClpIDsaParameter,
   ClpIX509Asn1Objects,
+  ClpX509Asn1Objects,
   ClpSecAsn1Objects,
   ClpISecAsn1Objects,
   ClpBigInteger,

+ 2 - 4
CryptoLib/src/Factories/ClpPublicKeyFactory.pas

@@ -24,7 +24,6 @@ interface
 uses
   Classes,
   ClpIAsn1Objects,
-  ClpIX509Asn1Objects,
   ClpIAsymmetricKeyParameter,
   ClpRsaKeyParameters,
   ClpDsaPublicKeyParameters,
@@ -38,13 +37,12 @@ uses
   ClpX9Asn1Objects,
   ClpIX9Asn1Objects,
   ClpIX9ECParameters,
-  ClpX509Asn1Objects,
   ClpAsn1Objects,
   ClpIECC,
   ClpIECDomainParameters,
   ClpIDsaParameters,
-  ClpIDsaParameter,
-  ClpDsaParameter,
+  ClpIX509Asn1Objects,
+  ClpX509Asn1Objects,
   ClpCryptoLibTypes;
 
 type

+ 2 - 4
CryptoLib/src/Factories/ClpSubjectPublicKeyInfoFactory.pas

@@ -25,8 +25,6 @@ uses
   SysUtils,
   ClpAsn1Objects,
   ClpIAsn1Objects,
-  ClpIX509Asn1Objects,
-  ClpX509Asn1Objects,
   ClpIAsymmetricKeyParameter,
   ClpIRsaKeyParameters,
   ClpIDsaPublicKeyParameters,
@@ -37,9 +35,9 @@ uses
   ClpPkcsObjectIdentifiers,
   ClpX9ObjectIdentifiers,
   ClpEdECObjectIdentifiers,
-  ClpIDsaParameter,
-  ClpDsaParameter,
   ClpIDsaParameters,
+  ClpIX509Asn1Objects,
+  ClpX509Asn1Objects,
   ClpX9Asn1Objects,
   ClpIX9Asn1Objects,
   ClpX9ECParameters,

+ 0 - 45
CryptoLib/src/Interfaces/Asn1/X509/ClpIDsaParameter.pas

@@ -1,45 +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 ClpIDsaParameter;
-
-{$I ..\..\..\Include\CryptoLib.inc}
-
-interface
-
-uses
-  ClpIAsn1Core,
-  ClpBigInteger;
-
-type
-  IDsaParameter = interface(IAsn1Encodable)
-    ['{037E0113-0BD6-4A61-8BDC-DBEBE6136A6C}']
-
-    function GetP: TBigInteger;
-    property P: TBigInteger read GetP;
-
-    function GetG: TBigInteger;
-    property G: TBigInteger read GetG;
-
-    function GetQ: TBigInteger;
-    property Q: TBigInteger read GetQ;
-
-  end;
-
-implementation
-
-end.

+ 18 - 0
CryptoLib/src/Interfaces/Asn1/X509/ClpIX509Asn1Objects.pas

@@ -53,6 +53,7 @@ type
   IIssuerSerial = interface;
   IObjectDigestInfo = interface;
   IDistributionPoint = interface;
+  IDsaParameter = interface;
   IV2Form = interface;
   IDistributionPointName = interface;
   IReasonFlags = interface;
@@ -574,6 +575,23 @@ type
     property CrlIssuer: IGeneralNames read GetCrlIssuer;
   end;
 
+  /// <summary>
+  /// Interface for DsaParameter.
+  /// </summary>
+  IDsaParameter = interface(IAsn1Encodable)
+    ['{037E0113-0BD6-4A61-8BDC-DBEBE6136A6C}']
+
+    function GetP: TBigInteger;
+    property P: TBigInteger read GetP;
+
+    function GetG: TBigInteger;
+    property G: TBigInteger read GetG;
+
+    function GetQ: TBigInteger;
+    property Q: TBigInteger read GetQ;
+
+  end;
+
   /// <summary>
   /// Interface for DistributionPointName.
   /// </summary>