DecodeBytes decodes in place and overwrites the caller's ciphertext (non-GCM modes)
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 68/100
- Tipo de issue
- Bug
- Clareza
- Claramente especificada
- Status de atividade
- Ativa
- Domínio
- cryptography, testing
Direção de pesquisa
Comece por TDECFormattedCipher.DecodeBytes, onde Result := Source faz com que ambos os arrays compartilhem memória. Somente o ramo cmGCM chama SetLength, então copie a entrada para Result antes de Decode em todos os modos. A correção paralela está em TestTFormat_UU.TestIsValidTypeless, onde @SrcBuf deve virar @SrcBuf[0]. Está concluído quando o array de entrada do chamador permanece inalterado após a decodificação em todos os modos e os testes passam no Win64.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
TDECFormattedCipher.DecodeBytes overwrites the caller's input array for every mode except GCM.
Cause
DecodeBytes starts with Result := Source. For dynamic arrays this only copies the reference, so Result and Source point to the same memory. Only for cmGCM is SetLength(Result, Length(Source)) called, which creates a separate copy. For all other modes Decode(Source[0], Result[0], ...) writes the plaintext straight into the caller's array.
Effect
After Plain := Cipher.DecodeBytes(CipherText), CipherText contains the plaintext too. Code that decodes the same buffer twice, or keeps the ciphertext for later use (logging, retry, comparing), silently works on wrong data.
Repro
Cipher := TCipher_Twofish.Create;
Cipher.Mode := cmCBCx;
Cipher.Init(Key, IV, $FF);
Original := Copy(Source);
Plain := Cipher.DecodeBytes(Source);
// Source is now equal to Plain instead of Original
I came across this in the ChaCha20 speed tests on development_chacha20poly1305, which decode the same buffer once per CPU mode. Every decode after the first one failed.
Side note
TestTFormat_UU.TestIsValidTypeless fails now and then on Win64. It uses p := @SrcBuf, which points at the array variable instead of the data, so IsValid checks the bytes of a heap pointer. It should be @SrcBuf[0]. I fix that in the same PR.
- Linguagem predominante
- HTML
- Estrelas
- 286
- Forks
- 78
- Merge médio
- 1d 4h
- PRs com merge (30d)
- 4
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Sem modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de MHumm/DelphiEncryptionCompendium
-
CRC64 - PKI AdditionTalvez livre de novo @MHumm assumiu há 148 dias e não há nenhum pull request aberto. Abertaenhancement help wanted
MHumm/DelphiEncryptionCompendium#93 · 1 comentário · 1 responsável ·
-
Missing PUInt8Array type in the GetIt version.Talvez livre de novo @MHumm assumiu há 160 dias e não há nenhum pull request aberto. Abertabug delphi
MHumm/DelphiEncryptionCompendium#92 · 2 comentários · 1 responsável ·
-
Help with demoAbertaquestion
Dificuldade 4/5 1-2 dias Facilidade para iniciantes 25/100
MHumm/DelphiEncryptionCompendium#91 · 6 comentários ·
-
Chacha20 Poly1305Talvez livre de novo @MHumm assumiu há 458 dias e não há nenhum pull request aberto. Abertaenhancement
MHumm/DelphiEncryptionCompendium#89 · 1 comentário · 1 responsável ·
-
Confused by NEXTGEN directiveTalvez livre de novo @MHumm assumiu há 531 dias e não há nenhum pull request aberto. Abertabug
MHumm/DelphiEncryptionCompendium#88 · 8 comentários · 1 responsável ·
Todas as issues de MHumm/DelphiEncryptionCompendium
Issues semelhantes
-
Client customer-reported KeyVault needs-team-attention question Service Attention
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 62/100
Azure/azure-sdk-for-net#63861 · 3 comentários · 1 reação ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
raspberrypi/picotool#365 · 1 comentário ·
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 70/100
SpecterOps/BloodHound#3462 ·
Mantenedores costumam responder em até 2 dias
-
[Good First Issue]: Rename the misspelled indicies variable in the cryptography packageTalvez já em andamento @achintya2k5 assumiu há 1 dia. AbertaGood First Issue hacktoberfest
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 92/100
hiero-ledger/hiero-sdk-js#4508 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
dev-tools
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
iotaledger/iota-rust-sdk#1709 ·
Mantenedores costumam responder em até 1 dia