|
@@ -28,6 +28,7 @@ uses
|
|
|
ClpIBlockCipher,
|
|
ClpIBlockCipher,
|
|
|
ClpICipherParameters,
|
|
ClpICipherParameters,
|
|
|
ClpIKeyParameter,
|
|
ClpIKeyParameter,
|
|
|
|
|
+ ClpArrayUtils,
|
|
|
ClpCryptoLibTypes;
|
|
ClpCryptoLibTypes;
|
|
|
|
|
|
|
|
resourcestring
|
|
resourcestring
|
|
@@ -598,7 +599,12 @@ procedure TSpeckLegacyEngine.EngineInit(forEncryption: Boolean;
|
|
|
const keyBytes: TCryptoLibByteArray);
|
|
const keyBytes: TCryptoLibByteArray);
|
|
|
begin
|
|
begin
|
|
|
FforEncryption := forEncryption;
|
|
FforEncryption := forEncryption;
|
|
|
- CheckKeySize(System.Length(keyBytes));
|
|
|
|
|
|
|
+ // ensure we clear "Key" from memory in case of exceptions when checking KeyLength
|
|
|
|
|
+ try
|
|
|
|
|
+ CheckKeySize(System.Length(keyBytes));
|
|
|
|
|
+ except
|
|
|
|
|
+ TArrayUtils.ZeroFill(keyBytes);
|
|
|
|
|
+ end;
|
|
|
SetKey(keyBytes);
|
|
SetKey(keyBytes);
|
|
|
Finitialised := true;
|
|
Finitialised := true;
|
|
|
end;
|
|
end;
|
|
@@ -617,7 +623,6 @@ procedure TSpeckLegacyEngine.Init(forEncryption: Boolean;
|
|
|
const parameters: ICipherParameters);
|
|
const parameters: ICipherParameters);
|
|
|
var
|
|
var
|
|
|
keyParameter: IKeyParameter;
|
|
keyParameter: IKeyParameter;
|
|
|
- keyBytes: TCryptoLibByteArray;
|
|
|
|
|
begin
|
|
begin
|
|
|
|
|
|
|
|
if not Supports(parameters, IKeyParameter, keyParameter) then
|
|
if not Supports(parameters, IKeyParameter, keyParameter) then
|
|
@@ -625,8 +630,7 @@ begin
|
|
|
raise EArgumentCryptoLibException.CreateResFmt
|
|
raise EArgumentCryptoLibException.CreateResFmt
|
|
|
(@SInvalidParameterSpeckLegacyInit, [(parameters as TObject).ToString]);
|
|
(@SInvalidParameterSpeckLegacyInit, [(parameters as TObject).ToString]);
|
|
|
end;
|
|
end;
|
|
|
- keyBytes := keyParameter.GetKey;
|
|
|
|
|
- EngineInit(forEncryption, keyBytes);
|
|
|
|
|
|
|
+ EngineInit(forEncryption, keyParameter.GetKey());
|
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
function TSpeckLegacyEngine.ProcessBlock(const input: TCryptoLibByteArray;
|
|
function TSpeckLegacyEngine.ProcessBlock(const input: TCryptoLibByteArray;
|
|
@@ -817,6 +821,7 @@ begin
|
|
|
|
|
|
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|
|
+ TArrayUtils.ZeroFill(keyBytes);
|
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
{ TSpeckUInt64LegacyEngine }
|
|
{ TSpeckUInt64LegacyEngine }
|
|
@@ -983,6 +988,7 @@ begin
|
|
|
|
|
|
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|
|
+ TArrayUtils.ZeroFill(keyBytes);
|
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
{ TSpeck32LegacyEngine }
|
|
{ TSpeck32LegacyEngine }
|