ソースを参照

some refactorings

Ugochukwu Mmaduekwe 1 週間 前
コミット
575e9807b5

+ 3 - 2
CryptoLib.Tests/src/Asn1/EqualsAndHashCodeTests.pas

@@ -37,6 +37,7 @@ uses
   ClpIAsn1Core,
   ClpAsn1Streams,
   ClpConverters,
+  ClpPlatformUtilities,
   ClpCryptoLibTypes,
   CryptoLibTestBase;
 
@@ -133,11 +134,11 @@ begin
         LObj := LAIn.ReadObject();
         if not LObj.Equals(LValues[I]) then
         begin
-          Fail(Format('Failed equality test for %s', [(LObj as TObject).ClassName]));
+          Fail(Format('Failed equality test for %s', [TPlatformUtilities.GetTypeName(LObj as TObject)]));
         end;
         if LObj.GetHashCode() <> LValues[I].GetHashCode() then
         begin
-          Fail(Format('Failed hashCode test for %s', [(LObj as TObject).ClassName]));
+          Fail(Format('Failed hashCode test for %s', [TPlatformUtilities.GetTypeName(LObj as TObject)]));
         end;
       end;
     finally

+ 1 - 1
CryptoLib.Tests/src/Crypto/DHTests.pas

@@ -116,7 +116,7 @@ var
   dhkgParams: IDHKeyGenerationParameters;
   kpGen: IDHBasicKeyPairGenerator;
 begin
-  dhParams := TDHParameters.Create(p, g, Default (TBigInteger),
+  dhParams := TDHParameters.Create(p, g, TBigInteger.GetDefault,
     privateValueSize);
 
   dhkgParams := TDHKeyGenerationParameters.Create(TSecureRandom.Create()

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

@@ -1904,8 +1904,7 @@ begin
 
   encodeParams := (TDsaParameter.Create(p.p, p.Q, p.G) as IDsaParameter).GetDerEncoded();
 
-  dsaP := TDsaParameter.GetInstance(TAsn1Object.FromByteArray(encodeParams)
-    as TAsn1Object);
+  dsaP := TDsaParameter.GetInstance(TAsn1Object.FromByteArray(encodeParams));
   p2 := TDSAParameters.Create(dsaP.p, dsaP.Q, dsaP.G);
 
   // a and a2 should be equivalent!

+ 4 - 8
CryptoLib.Tests/src/Math/ECPointTests.pas

@@ -772,8 +772,7 @@ end;
 procedure TTestECPoint.TestPointCreationConsistency;
 begin
   try
-    FpInstance.Fcurve.CreatePoint(TBigInteger.ValueOf(12),
-      Default (TBigInteger));
+    FpInstance.Fcurve.CreatePoint(TBigInteger.ValueOf(12), TBigInteger.GetDefault);
     Fail('expected EArgumentCryptoLibException');
   except
     on e: EArgumentCryptoLibException do
@@ -784,8 +783,7 @@ begin
   end;
 
   try
-    FpInstance.Fcurve.CreatePoint(Default (TBigInteger),
-      TBigInteger.ValueOf(12));
+    FpInstance.Fcurve.CreatePoint(TBigInteger.GetDefault, TBigInteger.ValueOf(12));
     Fail('expected EArgumentCryptoLibException');
   except
     on e: EArgumentCryptoLibException do
@@ -796,8 +794,7 @@ begin
   end;
 
   try
-    FpInstance.Fcurve.CreatePoint(TBigInteger.Create('1011'),
-      Default (TBigInteger));
+    FpInstance.Fcurve.CreatePoint(TBigInteger.Create('1011'), TBigInteger.GetDefault);
     Fail('expected EArgumentCryptoLibException');
   except
     on e: EArgumentCryptoLibException do
@@ -808,8 +805,7 @@ begin
   end;
 
   try
-    FpInstance.Fcurve.CreatePoint(Default (TBigInteger),
-      TBigInteger.Create('1011'));
+    FpInstance.Fcurve.CreatePoint(TBigInteger.GetDefault, TBigInteger.Create('1011'));
     Fail('expected EArgumentCryptoLibException');
   except
     on e: EArgumentCryptoLibException do

+ 25 - 6
CryptoLib/src/Asn1/ClpAsn1Objects.pas

@@ -688,8 +688,11 @@ type
     /// <summary>
     /// Check instance helper.
     /// </summary>
-    class function CheckInstance(const ATaggedObject: IAsn1TaggedObject;
-      ADeclaredExplicit: Boolean): IAsn1TaggedObject; overload; static;
+    class function CheckInstance(const AObj: IAsn1Convertible): IAsn1TaggedObject; overload; static;
+    /// <summary>
+    /// Check instance helper.
+    /// </summary>
+    class function CheckInstance(const ATaggedObject: IAsn1TaggedObject; ADeclaredExplicit: Boolean): IAsn1TaggedObject; overload; static;
     /// <summary>
     /// Checked cast helper.
     /// </summary>
@@ -729,6 +732,10 @@ type
     /// </summary>
     class function GetInstance(const AObj: IAsn1Object; ATagClass, ATagNo: Int32): IAsn1TaggedObject; overload; static;
     /// <summary>
+    /// Get instance from ASN.1 object with tag class and tag number.
+    /// </summary>
+    class function GetInstance(const AObj: IAsn1Convertible; ATagClass, ATagNo: Int32): IAsn1TaggedObject; overload; static;
+    /// <summary>
     /// Get instance from tagged object.
     /// </summary>
     class function GetInstance(const ATaggedObject: IAsn1TaggedObject;
@@ -3551,6 +3558,13 @@ begin
     raise EArgumentNilCryptoLibException.Create('obj');
 end;
 
+class function TAsn1TaggedObject.CheckInstance(const AObj: IAsn1Convertible): IAsn1TaggedObject;
+begin
+  Result := GetInstance(AObj);
+  if Result = nil then
+    raise EArgumentNilCryptoLibException.Create('obj');
+end;
+
 class function TAsn1TaggedObject.CheckInstance(const ATaggedObject: IAsn1TaggedObject;
   ADeclaredExplicit: Boolean): IAsn1TaggedObject;
 begin
@@ -3659,6 +3673,11 @@ begin
   Result := TAsn1Utilities.CheckTag(CheckInstance(AObj), ATagClass, ATagNo);
 end;
 
+class function TAsn1TaggedObject.GetInstance(const AObj: IAsn1Convertible; ATagClass, ATagNo: Int32): IAsn1TaggedObject;
+begin
+  Result := TAsn1Utilities.CheckTag(CheckInstance(AObj), ATagClass, ATagNo);
+end;
+
 class function TAsn1TaggedObject.GetInstance(const ATaggedObject: IAsn1TaggedObject;
   ADeclaredExplicit: Boolean): IAsn1TaggedObject;
 begin
@@ -8566,7 +8585,7 @@ var
 begin
   LObjId := '';
   LValue := 0;
-  LBigValue := Default(TBigInteger);
+  LBigValue := TBigInteger.GetDefault;
   LFirst := True;
 
   for I := 0 to System.Length(AContents) - 1 do
@@ -8618,7 +8637,7 @@ begin
         end;
 
         LObjId := LObjId + '.' + LBigValue.ToString();
-        LBigValue := Default(TBigInteger);
+        LBigValue := TBigInteger.GetDefault;
         LValue := 0;
       end
       else
@@ -8989,7 +9008,7 @@ var
 begin
   LObjId := '';
   LValue := 0;
-  LBigValue := Default(TBigInteger);
+  LBigValue := TBigInteger.GetDefault;
   LFirst := True;
 
   for I := 0 to System.Length(AContents) - 1 do
@@ -9035,7 +9054,7 @@ begin
           LObjId := LObjId + '.';
         end;
         LObjId := LObjId + LBigValue.ToString();
-        LBigValue := Default(TBigInteger);
+        LBigValue := TBigInteger.GetDefault;
         LValue := 0;
       end
       else

+ 1 - 1
CryptoLib/src/Asn1/Pkcs/ClpPkcsAsn1Objects.pas

@@ -956,7 +956,7 @@ begin
 
   if ASeq.Count > 1 then
   begin
-    LTagged := TAsn1TaggedObject.GetInstance(ASeq[1] as TObject, TAsn1Tags.ContextSpecific, 0);
+    LTagged := TAsn1TaggedObject.GetInstance(ASeq[1], TAsn1Tags.ContextSpecific, 0);
     FContent := LTagged.GetExplicitBaseObject();
   end
   else

+ 2 - 2
CryptoLib/src/Asn1/X509/ClpX509Asn1Objects.pas

@@ -2923,7 +2923,7 @@ end;
 function TBasicConstraints.GetPathLenConstraint: TBigInteger;
 begin
   if FPathLenConstraint = nil then
-    Result := Default(TBigInteger)
+    Result := TBigInteger.GetDefault
   else
     Result := FPathLenConstraint.Value;
 end;
@@ -4462,7 +4462,7 @@ end;
 
 constructor TAuthorityKeyIdentifier.Create(const AKeyIdentifier: TCryptoLibByteArray);
 begin
-  Create(AKeyIdentifier, nil, Default(TBigInteger));
+  Create(AKeyIdentifier, nil, TBigInteger.GetDefault);
 end;
 
 constructor TAuthorityKeyIdentifier.Create(const AKeyIdentifier: TCryptoLibByteArray;

+ 5 - 5
CryptoLib/src/Asn1/X9/ClpX9ECAsn1Objects.pas

@@ -764,15 +764,15 @@ begin
   if (LCount < 5) or (LCount > 6) then
     raise EArgumentCryptoLibException.CreateResFmt(@SBadSequenceSize, [LCount]);
 
-  LVersion := TDerInteger.GetInstance(ASeq[LPos] as TAsn1Encodable);
+  LVersion := TDerInteger.GetInstance(ASeq[LPos]);
   System.Inc(LPos);
-  FFieldID := TX9FieldID.GetInstance(ASeq[LPos] as TAsn1Encodable);
+  FFieldID := TX9FieldID.GetInstance(ASeq[LPos]);
   System.Inc(LPos);
   LX9CurveSequence := TAsn1Sequence.GetInstance(ASeq[LPos]);
   System.Inc(LPos);
-  LP := ASeq[LPos] as TAsn1Encodable;
+  LP := ASeq[LPos];
   System.Inc(LPos);
-  FN := (TDerInteger.GetInstance(ASeq[LPos] as TAsn1Encodable) as IDerInteger).Value;
+  FN := (TDerInteger.GetInstance(ASeq[LPos]) as IDerInteger).Value;
   System.Inc(LPos);
   FH := TAsn1Utilities.ReadOptional<TBigInteger>(ASeq, LPos, function(AElement: IAsn1Encodable): TBigInteger
     var
@@ -782,7 +782,7 @@ begin
       if LDerInt <> nil then
         Result := LDerInt.Value
       else
-        Result := Default(TBigInteger);
+        Result := TBigInteger.GetDefault;
     end);
 
   if LPos <> LCount then

+ 1 - 1
CryptoLib/src/Crypto/Generators/ClpDHKeyGeneratorHelper.pas

@@ -76,7 +76,7 @@ var
   limit, minWeight, m: Int32;
   x, min, q, max: TBigInteger;
 begin
-  Result := Default (TBigInteger);
+  Result := TBigInteger.GetDefault;
   limit := dhParams.L;
 
   if (limit <> 0) then

+ 1 - 1
CryptoLib/src/Crypto/Generators/ClpDsaKeyPairGenerator.pas

@@ -108,7 +108,7 @@ var
   x, One: TBigInteger;
 begin
   One := TBigInteger.One;
-  result := Default (TBigInteger);
+  result := TBigInteger.GetDefault;
   // B.1.2 Key Pair Generation by Testing Candidates
   minWeight := TBitUtilities.Asr32(q.BitLength, 2);
   while (True) do

+ 2 - 2
CryptoLib/src/Crypto/Generators/ClpDsaParametersGenerator.pas

@@ -242,7 +242,7 @@ class function TDsaParametersGenerator.CalculateGenerator_FIPS186_2(const p,
 var
   e, pSub2, h, g: TBigInteger;
 begin
-  result := Default (TBigInteger);
+  result := TBigInteger.GetDefault;
   e := p.subtract(TBigInteger.One).Divide(q);
   pSub2 := p.subtract(TBigInteger.Two);
 
@@ -300,7 +300,7 @@ begin
     System.Inc(count);
   end;
 
-  result := Default (TBigInteger);
+  result := TBigInteger.GetDefault;
 end;
 
 function TDsaParametersGenerator.GenerateParameters_FIPS186_2: IDsaParameters;

+ 3 - 3
CryptoLib/src/Crypto/Parameters/ClpDHParameters.pas

@@ -144,7 +144,7 @@ end;
 
 constructor TDHParameters.Create(const p, g: TBigInteger);
 begin
-  Create(p, g, Default (TBigInteger), 0);
+  Create(p, g, TBigInteger.GetDefault, 0);
 end;
 
 constructor TDHParameters.Create(const p, g, q: TBigInteger);
@@ -154,12 +154,12 @@ end;
 
 constructor TDHParameters.Create(const p, g, q: TBigInteger; l: Int32);
 begin
-  Create(p, g, q, GetDefaultMParam(l), l, Default (TBigInteger), Nil);
+  Create(p, g, q, GetDefaultMParam(l), l, TBigInteger.GetDefault, Nil);
 end;
 
 constructor TDHParameters.Create(const p, g, q: TBigInteger; m, l: Int32);
 begin
-  Create(p, g, q, m, l, Default (TBigInteger), Nil);
+  Create(p, g, q, m, l, TBigInteger.GetDefault, Nil);
 end;
 
 constructor TDHParameters.Create(const p, g, q, j: TBigInteger;

+ 2 - 2
CryptoLib/src/Crypto/Parameters/ClpECDomainParameters.pas

@@ -140,7 +140,7 @@ begin
     Exit;
   end;
 
-  LX9 := TX9ECParameters.GetInstance(AX962Parameters.GetParameters as TObject);
+  LX9 := TX9ECParameters.GetInstance(AX962Parameters.GetParameters);
   Result := FromX9ECParameters(LX9);
 end;
 
@@ -215,7 +215,7 @@ begin
   Fg := ValidatePublicPoint(curve, g);
   Fn := n;
   Fh := h;
-  FhInv := Default (TBigInteger);
+  FhInv := TBigInteger.GetDefault;
 
   Fseed := System.Copy(seed);
 

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

@@ -164,14 +164,14 @@ begin
   // r in the range [1,n-1]
   if ((AR.CompareTo(TBigInteger.One) < 0) or (AR.CompareTo(LN) >= 0)) then
   begin
-    Result := Default(TBigInteger);
+    Result := TBigInteger.GetDefault;
     Exit;
   end;
 
   // s in the range [0,n-1]           NB: ECNR spec says 0
   if ((&AS.CompareTo(TBigInteger.Zero) < 0) or (&AS.CompareTo(LN) >= 0)) then
   begin
-    Result := Default(TBigInteger);
+    Result := TBigInteger.GetDefault;
     Exit;
   end;
 
@@ -185,7 +185,7 @@ begin
   // components must be bogus.
   if (LP.IsInfinity) then
   begin
-    Result := Default(TBigInteger);
+    Result := TBigInteger.GetDefault;
     Exit;
   end;
 

+ 1 - 1
CryptoLib/src/Crypto/Signers/SignerCalculators/ClpHMacDsaKCalculator.pas

@@ -186,7 +186,7 @@ var
   LT: TCryptoLibByteArray;
   LTOff, LLength: Int32;
 begin
-  Result := Default (TBigInteger);
+  Result := TBigInteger.GetDefault;
   System.SetLength(LT, TBigIntegers.GetUnsignedByteLength(FN));
 
   while True do

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

@@ -134,7 +134,7 @@ begin
     LDsaX := TDerInteger.GetInstance(AKeyInfo.ParsePrivateKey());
     if LAlgID.Parameters <> nil then
     begin
-      LDsaPara := TDsaParameter.GetInstance(LAlgID.Parameters.ToAsn1Object() as TAsn1Object);
+      LDsaPara := TDsaParameter.GetInstance(LAlgID.Parameters.ToAsn1Object());
       LDsaParams := TDsaParameters.Create(LDsaPara.P, LDsaPara.Q, LDsaPara.G);
     end
     else

+ 1 - 1
CryptoLib/src/Factories/ClpPublicKeyFactory.pas

@@ -116,7 +116,7 @@ begin
     LDsaY := TDerInteger.GetInstance(AKeyInfo.ParsePublicKey());
     if LAlgID.Parameters <> nil then
     begin
-      LDsaPara := TDsaParameter.GetInstance(LAlgID.Parameters.ToAsn1Object() as TAsn1Object);
+      LDsaPara := TDsaParameter.GetInstance(LAlgID.Parameters.ToAsn1Object());
       LDsaParams := TDsaParameters.Create(LDsaPara.P, LDsaPara.Q, LDsaPara.G);
     end
     else

+ 0 - 1
CryptoLib/src/Interfaces/Asn1/ClpIAsn1Objects.pas

@@ -435,7 +435,6 @@ type
     /// </summary>
     function GetBaseUniversal(ADeclaredExplicit: Boolean; const AUniversalType: IAsn1UniversalType): IAsn1Object; overload;
 
-    // Methods from IAsn1TaggedObjectParser (since TAsn1TaggedObject implements both interfaces)
     /// <summary>
     /// Parse a base universal object
     /// </summary>

+ 1 - 1
CryptoLib/src/Math/EC/Abc/ClpTnaf.pas

@@ -429,7 +429,7 @@ begin
   while i < k do
   begin
     // u2 = mu*u1 - 2*u0;
-    s := Default (TBigInteger);
+    s := TBigInteger.GetDefault;
     if (mu = 1) then
     begin
       s := u1;

+ 5 - 5
CryptoLib/src/Math/EC/ClpECC.pas

@@ -2030,7 +2030,7 @@ begin
       Exit;
     end;
   end;
-  result := Default (TBigInteger);
+  result := TBigInteger.GetDefault;
 end;
 
 function TFpFieldElement.CheckSqrt(const z: IECFieldElement): IECFieldElement;
@@ -3209,7 +3209,7 @@ end;
 constructor TFpCurve.Create(const Q, r: TBigInteger;
   const a, b: IECFieldElement);
 begin
-  Create(Q, r, a, b, Default (TBigInteger), Default (TBigInteger));
+  Create(Q, r, a, b, TBigInteger.GetDefault, TBigInteger.GetDefault);
 end;
 
 constructor TFpCurve.Create(const Q, a, b, Order, Cofactor: TBigInteger);
@@ -3228,7 +3228,7 @@ end;
 
 constructor TFpCurve.Create(const Q, a, b: TBigInteger);
 begin
-  Create(Q, a, b, Default (TBigInteger), Default (TBigInteger));
+  Create(Q, a, b, TBigInteger.GetDefault, TBigInteger.GetDefault);
 end;
 
 function TFpCurve.CreateRawPoint(const x, y: IECFieldElement;
@@ -3578,7 +3578,7 @@ end;
 
 constructor TF2mCurve.Create(m, K: Int32; const a, b: TBigInteger);
 begin
-  Create(m, K, 0, 0, a, b, Default (TBigInteger), Default (TBigInteger));
+  Create(m, K, 0, 0, a, b, TBigInteger.GetDefault, TBigInteger.GetDefault);
 end;
 
 constructor TF2mCurve.Create(m, k1, k2, k3: Int32; const a, b: IECFieldElement;
@@ -3673,7 +3673,7 @@ end;
 
 constructor TF2mCurve.Create(m, k1, k2, k3: Int32; const a, b: TBigInteger);
 begin
-  Create(m, k1, k2, k3, a, b, Default (TBigInteger), Default (TBigInteger));
+  Create(m, k1, k2, k3, a, b, TBigInteger.GetDefault, TBigInteger.GetDefault);
 end;
 
 function TF2mCurve.CreateDefaultMultiplier: IECMultiplier;

+ 1 - 1
CryptoLib/src/X509/ClpAttributeCertificateHolder.pas

@@ -205,7 +205,7 @@ var
 begin
   LBaseId := FHolder.BaseCertificateID;
   if LBaseId = nil then
-    Result := Default(TBigInteger)
+    Result := TBigInteger.GetDefault
   else
     Result := LBaseId.Serial.Value;
 end;