anchor.diff:    private
     public
       class function IsHexString(const AHexString: AnsiString) : boolean;
  -    class function ToHexaString(const raw : TRawBytes) : AnsiString;
  +    class function ToHexaString(const raw : TRawBytes) : AnsiString; // DEPRECATED: Use TRawBytes.ToHexaString instead
       class function HexaToRaw(const HexaString : AnsiString) : TRawBytes; overload;
       class function HexaToRaw(const HexaString : AnsiString; out raw : TRawBytes) : Boolean; overload;
       class function DoSha256(p : PAnsiChar; plength : Cardinal) : TRawBytes; overload;
  -    class function DoSha256(const TheMessage : AnsiString) : TRawBytes; overload;
  -    class procedure DoSha256(const TheMessage : AnsiString; out ResultSha256 : TRawBytes);  overload;
  -    class function DoDoubleSha256(const TheMessage : AnsiString) : TRawBytes; overload;
  +    class function DoSha256(const TheMessage : TRawBytes) : TRawBytes; overload;
  +    class procedure DoSha256(const TheMessage : TRawBytes; out ResultSha256 : TRawBytes);  overload;
  +    class function DoDoubleSha256(const TheMessage : TRawBytes) : TRawBytes; overload;
       class procedure DoDoubleSha256(p : PAnsiChar; plength : Cardinal; out ResultSha256 : TRawBytes); overload;
  -    class function DoRandomHash(const TheMessage : AnsiString) : TRawBytes; overload;
  +    class function DoRandomHash(const TheMessage : TRawBytes) : TRawBytes; overload;
       class procedure DoRandomHash(p : PAnsiChar; plength : Cardinal; out ResultSha256 : TRawBytes); overload;
       class procedure DoRandomHash(AFastHasher : TRandomHashFast; p : PAnsiChar; plength : Cardinal; out ResultSha256 : TRawBytes); overload;
  -    class function DoRipeMD160_HEXASTRING(const TheMessage : AnsiString) : TRawBytes; overload;
  +    class function DoRipeMD160_HEXASTRING(const TheMessage : TRawBytes) : TRawBytes; overload;
       class function DoRipeMD160AsRaw(p : PAnsiChar; plength : Cardinal) : TRawBytes; overload;
  -    class function DoRipeMD160AsRaw(const TheMessage : AnsiString) : TRawBytes; overload;
  +    class function DoRipeMD160AsRaw(const TheMessage : TRawBytes) : TRawBytes; overload;
       class function PrivateKey2Hexa(Key : PEC_KEY) : AnsiString;
  -    class function ECDSASign(Key : PEC_KEY; const digest : AnsiString) : TECDSA_SIG;
  -    class function ECDSAVerify(EC_OpenSSL_NID : Word; PubKey : EC_POINT; const digest : AnsiString; Signature : TECDSA_SIG) : Boolean; overload;
  -    class function ECDSAVerify(PubKey : TECDSA_Public; const digest : AnsiString; Signature : TECDSA_SIG) : Boolean; overload;
  +    class function ECDSASign(Key : PEC_KEY; const digest : TRawBytes) : TECDSA_SIG;
  +    class function ECDSAVerify(EC_OpenSSL_NID : Word; PubKey : EC_POINT; const digest : TRawBytes; Signature : TECDSA_SIG) : Boolean; overload;
  +    class function ECDSAVerify(PubKey : TECDSA_Public; const digest : TRawBytes; Signature : TECDSA_SIG) : Boolean; overload;
       class procedure InitCrypto;
       class function IsHumanReadable(Const ReadableText : TRawBytes) : Boolean;
       class function EncodeSignature(const signature : TECDSA_SIG) : TRawBytes;
  
positive.code:   SHA256(p,plength,PS);
  end;
  
  class function TCrypto.DoSha256(const TheMessage: AnsiString): TRawBytes;
  Var PS : PAnsiChar;
  begin
    SetLength(Result,32);
    PS := @Result[Low(Result)];
    SHA256(PAnsiChar(TheMessage),Length(TheMessage),PS);
  end;
  
  { New at Build 2.1.6
    Note: Delphi is slowly when working with Strings (allowing space)... so to
    increase speed we use a String as a pointer, and only increase speed if
    needed. Also the same with functions "GetMem" and "FreeMem" }
  class procedure TCrypto.DoSha256(const TheMessage: AnsiString; out ResultSha256: TRawBytes);
  Var PS : PAnsiChar;
  begin
    If length(ResultSha256)<>32 then SetLength(ResultSha256,32);
    PS := @ResultSha256[Low(ResultSha256)];
    SHA256(PAnsiChar(TheMessage),Length(TheMessage),PS);
  end;
  
  class function TCrypto.ECDSASign(Key: PEC_KEY; const digest: AnsiString): TECDSA_SIG;
  Var PECS : PECDSA_SIG;
    p : PAnsiChar;
    i : Integer;
  begin
    PECS := ECDSA_do_sign(PAnsiChar(digest),length(digest),Key);
    Try
      if PECS = Nil then raise ECryptoException.Create('Error signing');
  
  
negative.code: 
  { New at Build 4.0.0 }
  
  class function TCrypto.DoRandomHash(const TheMessage: TRawBytes): TRawBytes;
  begin
    Result := TRandomHashFast.Compute(TheMessage);
  end;
  
  class procedure TCrypto.DoRandomHash(p : PAnsiChar; plength : Cardinal; out ResultSha256 : TRawBytes);
  