* Do not make assumptions about string encoding

This commit is contained in:
Michaël Van Canneyt 2022-05-04 10:00:38 +02:00
parent c6e9c7c1f8
commit 82c27c72c9
3 changed files with 33 additions and 5 deletions

View File

@ -97,8 +97,36 @@ Function Base64 : TAlphabetEncoder;
Function Base64URL : TAlphabetEncoder;
Function GetStandardEncoder(aEncoder : TStandardEncoder): TAlphabetEncoder;
Function GetRawStringBytes(S : String) : TBytes;
Function GetRawStringFromBytes(B : TBytes) : RawByteString;
implementation
Function GetRawStringFromBytes(B : TBytes) : RawByteString;
Var
L : Integer;
begin
L:=Length(B);
SetLength(Result,L);
If L>0 then
Move(B[0],Result[1],L);
end;
Function GetRawStringBytes(S : String) : TBytes;
Var
L : Integer;
begin
L:=Length(S);
SetLength(Result,L);
If L>0 then
Move(S[1],Result[0],L);
end;
Function TAlphabetEncoder.Encode(aBuffer : TBytes; doPad : Boolean = True) : AnsiString;
begin
@ -109,7 +137,7 @@ end;
function TAlphabetEncoder.Encode(Const aBuffer: AnsiString; doPad : Boolean = True): AnsiString;
begin
Result:=Encode(TEncoding.UTF8.GetAnsiBytes(aBuffer),DoPad);
Result:=Encode(GetRawBytesFromString(aBuffer),DoPad);
end;

View File

@ -767,7 +767,7 @@ begin
BufToString(S2);
if S2[1] = Char(#00) then
Delete(S2,1,1);
BytesToHexStr(S,TEncoding.UTF8.GetAnsiBytes(S2));
BytesToHexStr(S,GetRawStringBytes(S2));
end;
ASNParseAdd(List, S, ASNType, ASNSize);
end;

View File

@ -59,7 +59,7 @@ begin
PemLoadPublicKey64FromList(List,PrivateKey,PublicKey,PublicKeyX64,PublicKeyY64);
// Thumbprint
S:='{"crv":"P-256","kty":"EC","x":"' + PublicKeyX64 + '","y":"' + PublicKeyY64 + '"}';
TSHA256.DigestBase64(TEncoding.UTF8.GetAnsiBytes(S),True,ThumbPrint);
TSHA256.DigestBase64(GetRawStringBytes(S),True,ThumbPrint);
end;
procedure PemLoadPublicKey64FromList(List: TStrings; out PrivateKey: TEccPrivateKey; out PublicKey: TEccPublicKey; out PublicKeyX64, PublicKeyY64: AnsiString);
@ -346,12 +346,12 @@ end;
procedure PemToDER(PEM: TBytes; const BeginTag, EndTag: String; out DER: TBytes);
begin
DER:=PemToDER(TEncoding.UTF8.GetAnsiString(PEM),BeginTag,EndTag);
DER:=PemToDER(GetRawStringFromBytes(PEM),BeginTag,EndTag);
end;
procedure ASNParsePemSection(const PEM: TBytes; List: TStrings; const BeginTag, EndTag: String);
begin
ASNParsePemSection(TEncoding.UTF8.GetAnsiString(PEM),List,BeginTag,EndTag);
ASNParsePemSection(GetRawStringFromBytes(PEM),List,BeginTag,EndTag);
end;
procedure ASNParsePemSection(const PEM: String; List: TStrings; const BeginTag, EndTag: String);