Compare commits

...

3 commits

Author SHA1 Message Date
bad
6bed1a222e Update tests to include multiple signatures 2022-08-19 15:55:03 +02:00
bad
b5156b645f Fix signature serialization 2022-08-19 15:53:40 +02:00
bad
3e34190ede Fix the sig parsing in narinfo parsing code
Unlike references, multiple signatures are stored as separate key-value
pairs. Previously this crate assumed that narinfo sigs were stored as a
single key, separated by spaces.
2022-08-19 13:47:32 +02:00
3 changed files with 14 additions and 12 deletions

View file

@ -8,3 +8,4 @@ NarSize: 11374872
References: mhhlymrg2m70r8h94cwhv2d7a0c8l7g6-glibc-2.34-210 ppn8983d9b5r6k7mnhkbg6rqw7vgl1ij-libyaml-0.2.5 qm2lv1gpbyn0rsfai40cbvj3h4gz69yc-bash-5.1-p16 sn0w3f12547crckss4ybmnxmi29gpgq7-perl-5.34.1 zzxrhj9056vjlanfjkinvhd7458yc2z8-liblouis-3.22.0
Deriver: dlxmsgfc0am35fh0kiy88zqr91x2dn5j-liblouis-3.22.0.drv
Sig: cache.nixos.org-1:BJ5QGcOta2s76XC6sep9DbAv0x3TILh3hHSKyR+9rFWYuBDTWdHs1KHeUEpw2espE/zPPBp2yURO6/J4Dhf9DQ==
Sig: fake-test-sig-1:BJ5QGcOta2s76XC6sep9DbAv0x3TILh3hHSKyR+9rFWYuBDTWdHs1KHeUEpw2espE/zPPBp2yURO6/J4Dhf9DQ==

View file

@ -23,6 +23,8 @@ impl<'a> NarInfo<'a> {
/// ```
pub fn parse(value: &'a str) -> ParsingResult<Self> {
let mut builder = NarInfoBuilder::default();
let mut sigs = Vec::new();
for line in value.lines() {
let (key, value) = line
.split_once(':')
@ -46,20 +48,15 @@ impl<'a> NarInfo<'a> {
"Deriver" => builder.deriver(Some(Cow::from(value))),
"System" => builder.system(Some(Cow::from(value))),
"References" => builder.references(value.split(' ').map(Cow::from).collect()),
// TODO: replace with try_collect once that gets stabilized
"Sig" => builder.sigs(value.split(' ').map(Sig::try_from).try_fold(
Vec::new(),
|mut a, c| {
c.map(|c| {
a.push(c);
a
})
},
)?),
"Sig" => {
sigs.push(Sig::try_from(value)?);
&mut builder
},
_ => return Err(ParsingError::UnknownKey { key }),
};
}
builder.sigs(sigs);
builder.build()
}
}
@ -124,6 +121,10 @@ mod tests {
assert_eq!(sig.key_name, "cache.nixos.org-1");
assert_eq!(sig.sig, "BJ5QGcOta2s76XC6sep9DbAv0x3TILh3hHSKyR+9rFWYuBDTWdHs1KHeUEpw2espE/zPPBp2yURO6/J4Dhf9DQ==");
assert!(info.sigs.len() == 1);
let sig = &info.sigs[1];
assert_eq!(sig.key_name, "fake-test-sig-1");
assert_eq!(sig.sig, "BJ5QGcOta2s76XC6sep9DbAv0x3TILh3hHSKyR+9rFWYuBDTWdHs1KHeUEpw2espE/zPPBp2yURO6/J4Dhf9DQ==");
assert!(info.sigs.len() == 2);
}
}

View file

@ -17,8 +17,8 @@ impl<'a> NarInfo<'a> {
write!(w, "\nNarSize: {}", self.nar_size)?;
write!(w, "\nReferences: {}", self.references.join(" "))?;
write!(w, "\nSig: ")?;
for sig in self.sigs.iter() {
write!(w, "\nSig: ")?;
sig.serialize_into(w)?;
}