Access violation if GCM mode is set after cipher is initialized
@MHumm 已经在做这个了。
开始于 2024年5月8日。
评估
这个 Issue 还没有评估数据。
描述
To Reproduce
- Open demo project Cipher_Console
- Change Cipher.Mode to cmGCM
- Run the code. You receive EAccessViolation
Usually, if you change the cipher mode after the cipher has been initialized, then TDECCipher.SetMode should call Done on the cipher and re-initialize it.
GCM Encode requires that TGCM.Init is called and has set FEncryptionMethod := EncryptionMethod. However, if Ciper.Mode is set after the cipher has been initialized, then TGCM is created but TGCM.Init has not been called.
procedure TDECCipherModes.InitMode;
begin
if FMode = TCipherMode.cmGCM then
begin
if Context.BlockSize = 16 then
FGCM := TGCM.Create
else
// GCM requires a cipher with 128 bit block size
raise EDECCipherException.CreateResFmt(@sInvalidBlockSize,
[128, GetEnumName(TypeInfo(TCipherMode),
Integer(FMode))]);
end
else
if Assigned(FGCM) then
FreeAndNil(FGCM);
end;
The program flow if Mode has been set before init:
- TDECCipher.Init()
- TDECCipher.Init()
- TDECCipherModes.OnAfterInitVectorInitialized ( calls
FGCM.Init(self.DoEncode, OriginalInitVector)) - TGCM.Init
The program flow if Mode has been set after init:
- TDECCipher.SetMode
- TDECCipherModes.InitMode
- TGCM.Create, but not TGCM.Init ( I am not sure where I get
OriginalInitVectorfrom )
So... what do we do? We probably need to preserve the InitVector, so we can call TGCM.Init with the correct parameters.
The other solution is to forbid to change the mode after the cipher has been initialized. But this is a code breaking change.
- 主要语言
- HTML
- 星标
- 286
- 派生
- 78
- 平均合并
- 1 天 4 小时
- 30 天内合并 PR
- 4
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
MHumm/DelphiEncryptionCompendium 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 68/100
-
CRC64 - PKI Addition可能重新可做 @MHumm 于 149 天前认领,目前没有进行中的 PR。 未关闭enhancement help wanted
MHumm/DelphiEncryptionCompendium#93 · 1 条评论 · 已指派 1 人 ·
-
Missing PUInt8Array type in the GetIt version.可能重新可做 @MHumm 于 160 天前认领,目前没有进行中的 PR。 未关闭bug delphi
MHumm/DelphiEncryptionCompendium#92 · 2 条评论 · 已指派 1 人 ·
-
Help with demo未关闭question
难度 4/5 1-2 天 新手友好度 25/100
MHumm/DelphiEncryptionCompendium#91 · 6 条评论 ·
-
Chacha20 Poly1305可能重新可做 @MHumm 于 459 天前认领,目前没有进行中的 PR。 未关闭enhancement
MHumm/DelphiEncryptionCompendium#89 · 1 条评论 · 已指派 1 人 ·