فهرست منبع

fix some bugs in OpenSSL BigNum to TBigInteger mappings.

Ugochukwu Mmaduekwe 6 سال پیش
والد
کامیت
9556862584
1فایلهای تغییر یافته به همراه17 افزوده شده و 5 حذف شده
  1. 17 5
      src/core/UCrypto.pas

+ 17 - 5
src/core/UCrypto.pas

@@ -928,7 +928,7 @@ begin
   {$ENDIF}
   OPENSSL_free(p);
 {$ELSE}
-  Result := FBigInteger.ToByteArrayUnsigned.ToHexaString;
+  Result := FBigInteger.ToString(16);
 {$ENDIF}
 end;
 
@@ -936,6 +936,9 @@ function TBigNum.GetRawValue: TRawBytes;
 {$IFDEF Use_OpenSSL}
 Var p : PAnsiChar;
   i : Integer;
+{$ELSE}
+ var
+ LBigInteger: TBigInteger;
 {$ENDIF}
 begin
 {$IFDEF Use_OpenSSL}
@@ -944,7 +947,10 @@ begin
   p := @Result[Low(Result)];
   i := BN_bn2bin(FBN,p);
 {$ELSE}
-  Result := FBigInteger.ToByteArrayUnsigned;
+ if FBigInteger.SignValue < 0 then LBigInteger := FBigInteger.Negate // make copy !!! important
+ else
+  LBigInteger := FBigInteger;
+  Result := LBigInteger.ToByteArrayUnsigned;
 {$ENDIF}
 end;
 
@@ -1060,7 +1066,9 @@ procedure TBigNum.SetHexaValue(const Value: String);
 Var i : Integer;
   tmp_ansistring : RawByteString;
 {$ELSE}
-var LRaw : TBytes;
+var
+ LValue: String;
+ LowIndex: Integer;
 {$ENDIF}
 begin
 {$IFDEF Use_OpenSSL}
@@ -1070,9 +1078,13 @@ begin
       Raise ECryptoException.Create('Invalid Hexadecimal value:'+Value);
   end;
 {$ELSE}
-  if not TCrypto.HexaToRaw(value,LRaw) then
+  LowIndex := Low(Value);
+  if Value[LowIndex] = '-' then LValue := System.Copy(Value, LowIndex + 1, High(Value) - 1)
+  else
+ LValue := Value;
+  if not TCrypto.IsHexString(LValue) then
       Raise ECryptoException.Create('Invalid Hexadecimal value:'+Value);
-  FBigInteger := TBigInteger.Create(1,LRaw);
+  FBigInteger := TBigInteger.Create(Value, 16);
 {$ENDIF}
 end;