Make SpendDescription.spend_auth_sig optional

This commit is contained in:
Jack Grigg 2018-12-01 00:43:45 +00:00
parent 012d43bc8c
commit 3d39706aee
No known key found for this signature in database
GPG Key ID: 1B8D649257DB0829
1 changed files with 11 additions and 3 deletions

View File

@ -148,7 +148,7 @@ pub struct SpendDescription {
pub nullifier: [u8; 32], pub nullifier: [u8; 32],
pub rk: PublicKey<Bls12>, pub rk: PublicKey<Bls12>,
pub zkproof: [u8; GROTH_PROOF_SIZE], pub zkproof: [u8; GROTH_PROOF_SIZE],
pub spend_auth_sig: Signature, pub spend_auth_sig: Option<Signature>,
} }
impl std::fmt::Debug for SpendDescription { impl std::fmt::Debug for SpendDescription {
@ -194,7 +194,7 @@ impl SpendDescription {
// Consensus rules (§4.4): // Consensus rules (§4.4):
// - Canonical encoding is enforced here. // - Canonical encoding is enforced here.
// - Signature validity is enforced in SaplingVerificationContext::check_spend() // - Signature validity is enforced in SaplingVerificationContext::check_spend()
let spend_auth_sig = Signature::read(&mut reader)?; let spend_auth_sig = Some(Signature::read(&mut reader)?);
Ok(SpendDescription { Ok(SpendDescription {
cv, cv,
@ -212,7 +212,15 @@ impl SpendDescription {
writer.write_all(&self.nullifier)?; writer.write_all(&self.nullifier)?;
self.rk.write(&mut writer)?; self.rk.write(&mut writer)?;
writer.write_all(&self.zkproof)?; writer.write_all(&self.zkproof)?;
self.spend_auth_sig.write(&mut writer) match self.spend_auth_sig {
Some(sig) => sig.write(&mut writer),
None => {
return Err(io::Error::new(
io::ErrorKind::InvalidInput,
"Missing spend auth signature",
))
}
}
} }
} }