mcf: `PasswordHash::push_base64` with empty input produces an invalid hash
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 45/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- rust
- Ambito
- cryptography
Direzione di ricerca
Start at mcf::PasswordHash::push_base64 and compare its empty-input behavior with push_str and push_displayable. Reproduce the empty-salt path described through pbkdf2 0.13, then determine which API behavior preserves valid MCF strings and add coverage showing that empty input cannot produce an unparsable PasswordHash.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
mcf::PasswordHash is documented as a valid MCF string, and PasswordHashRef::new_unchecked relies on that. push_base64 is infallible, though, and with an empty slice it appends a bare $:
let mut h = mcf::PasswordHash::from_id("6").unwrap();
h.push_base64(b"", mcf::Base64::Crypt);
assert_eq!(h.as_str(), "$6$");
mcf::PasswordHash::new(h.as_str()); // Err(DelimiterInvalid)
h.push_str("tail").unwrap(); // "$6$$tail"
mcf::PasswordHash::new(h.as_str()); // Err(FieldInvalid)
h.fields().collect::<Vec<_>>(); // ["", "tail"]: an empty Field, which Field::new rejects
The other push methods already reject this: push_str("") and push_displayable("") return Err(FieldInvalid).
A real path to it: pbkdf2 0.13's MCF hasher calls push_base64(salt, ...). hash_password_customized with an empty salt then returns a PasswordHash that can't be stored and parsed back.
Possible fixes, which change the API differently, so I'm asking rather than sending a PR:
- Make
push_base64returnResult<()>and reject empty input, likepush_str(breaking). - Add a fallible
try_push_base64and document thatpush_base64requires non-empty input. - Panic on empty input, so the invariant can't be broken silently.
Happy to send a PR for whichever you prefer.
This issue was produced by AI agents (Claude) and reviewed by me before submission.
- Lingua principale
- Rust
- Stelle
- 341
- Fork
- 193
- Merge medio
- 1g 15h
- PR unite (30g)
- 21
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di RustCrypto/formats
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
RustCrypto/formats#2482 ·
I maintainer di solito rispondono entro 1 giorno
-
IssuingDistributionPoint has the wrong AssociatedOid (id-pe-subjectInfoAccess)Forse già presa @eyusd l’ha presa 71 giorni fa. Aperta
Difficoltà 1/5 1-3 ore Idoneità per principianti 86/100
RustCrypto/formats#2389 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
RustCrypto/formats#2366 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
RustCrypto/formats#2430 · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
RustCrypto/formats#2428 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di RustCrypto/formats
Issue simili
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
pop-os/cosmic-comp#2956 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
libp2p/rust-libp2p#6694 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
EmbarkStudios/cargo-deny#910 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
tursodatabase/turso#10054 ·
I maintainer di solito rispondono entro 1 giorno
-
build: Update rust versionForse già presa Una pull request collegata a questa issue è aperta o già unita. Apertadependencies
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
ibm-granite-community/granite-cli#229 ·
I maintainer di solito rispondono entro 1 giorno