zcash_note_encryption: Pass cmstar_bytes to Domain::derive_ock
PRF^ock in the spec takes cm* as a byte array.
This commit is contained in:
parent
ee2b96c82d
commit
ae43e6c074
|
@ -110,7 +110,7 @@ pub trait Domain {
|
||||||
fn derive_ock(
|
fn derive_ock(
|
||||||
ovk: &Self::OutgoingViewingKey,
|
ovk: &Self::OutgoingViewingKey,
|
||||||
cv: &Self::ValueCommitment,
|
cv: &Self::ValueCommitment,
|
||||||
cmstar: &Self::ExtractedCommitment,
|
cmstar_bytes: &Self::ExtractedCommitmentBytes,
|
||||||
ephemeral_key: &EphemeralKeyBytes,
|
ephemeral_key: &EphemeralKeyBytes,
|
||||||
) -> OutgoingCipherKey;
|
) -> OutgoingCipherKey;
|
||||||
|
|
||||||
|
@ -291,7 +291,7 @@ impl<D: Domain> NoteEncryption<D> {
|
||||||
rng: &mut R,
|
rng: &mut R,
|
||||||
) -> [u8; OUT_CIPHERTEXT_SIZE] {
|
) -> [u8; OUT_CIPHERTEXT_SIZE] {
|
||||||
let (ock, input) = if let Some(ovk) = &self.ovk {
|
let (ock, input) = if let Some(ovk) = &self.ovk {
|
||||||
let ock = D::derive_ock(ovk, &cv, &cmstar, &D::epk_bytes(&self.epk));
|
let ock = D::derive_ock(ovk, &cv, &cmstar.into(), &D::epk_bytes(&self.epk));
|
||||||
let input = D::outgoing_plaintext_bytes(&self.note, &self.esk);
|
let input = D::outgoing_plaintext_bytes(&self.note, &self.esk);
|
||||||
|
|
||||||
(ock, input)
|
(ock, input)
|
||||||
|
|
|
@ -54,7 +54,7 @@ fn kdf_sapling(dhsecret: jubjub::SubgroupPoint, ephemeral_key: &EphemeralKeyByte
|
||||||
pub fn prf_ock(
|
pub fn prf_ock(
|
||||||
ovk: &OutgoingViewingKey,
|
ovk: &OutgoingViewingKey,
|
||||||
cv: &jubjub::ExtendedPoint,
|
cv: &jubjub::ExtendedPoint,
|
||||||
cmu: &bls12_381::Scalar,
|
cmu_bytes: &[u8; 32],
|
||||||
ephemeral_key: &EphemeralKeyBytes,
|
ephemeral_key: &EphemeralKeyBytes,
|
||||||
) -> OutgoingCipherKey {
|
) -> OutgoingCipherKey {
|
||||||
OutgoingCipherKey(
|
OutgoingCipherKey(
|
||||||
|
@ -64,7 +64,7 @@ pub fn prf_ock(
|
||||||
.to_state()
|
.to_state()
|
||||||
.update(&ovk.0)
|
.update(&ovk.0)
|
||||||
.update(&cv.to_bytes())
|
.update(&cv.to_bytes())
|
||||||
.update(&cmu.to_repr())
|
.update(cmu_bytes)
|
||||||
.update(ephemeral_key.as_ref())
|
.update(ephemeral_key.as_ref())
|
||||||
.finalize()
|
.finalize()
|
||||||
.as_bytes()
|
.as_bytes()
|
||||||
|
@ -209,10 +209,10 @@ impl<P: consensus::Parameters> Domain for SaplingDomain<P> {
|
||||||
fn derive_ock(
|
fn derive_ock(
|
||||||
ovk: &Self::OutgoingViewingKey,
|
ovk: &Self::OutgoingViewingKey,
|
||||||
cv: &Self::ValueCommitment,
|
cv: &Self::ValueCommitment,
|
||||||
cmu: &Self::ExtractedCommitment,
|
cmu_bytes: &Self::ExtractedCommitmentBytes,
|
||||||
epk: &EphemeralKeyBytes,
|
epk: &EphemeralKeyBytes,
|
||||||
) -> OutgoingCipherKey {
|
) -> OutgoingCipherKey {
|
||||||
prf_ock(ovk, cv, cmu, epk)
|
prf_ock(ovk, cv, cmu_bytes, epk)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn outgoing_plaintext_bytes(
|
fn outgoing_plaintext_bytes(
|
||||||
|
@ -413,7 +413,7 @@ pub fn try_sapling_output_recovery<P: consensus::Parameters>(
|
||||||
&prf_ock(
|
&prf_ock(
|
||||||
&ovk,
|
&ovk,
|
||||||
&output.cv,
|
&output.cv,
|
||||||
&output.cmu,
|
&output.cmu.to_repr(),
|
||||||
&epk_bytes(&output.ephemeral_key),
|
&epk_bytes(&output.ephemeral_key),
|
||||||
),
|
),
|
||||||
output,
|
output,
|
||||||
|
@ -524,7 +524,7 @@ mod tests {
|
||||||
&mut rng,
|
&mut rng,
|
||||||
);
|
);
|
||||||
let epk = *ne.epk();
|
let epk = *ne.epk();
|
||||||
let ock = prf_ock(&ovk, &cv, &cmu, &epk_bytes(&epk));
|
let ock = prf_ock(&ovk, &cv, &cmu.to_repr(), &epk_bytes(&epk));
|
||||||
|
|
||||||
let output = OutputDescription {
|
let output = OutputDescription {
|
||||||
cv,
|
cv,
|
||||||
|
@ -547,7 +547,7 @@ mod tests {
|
||||||
out_ciphertext: &[u8; OUT_CIPHERTEXT_SIZE],
|
out_ciphertext: &[u8; OUT_CIPHERTEXT_SIZE],
|
||||||
modify_plaintext: impl Fn(&mut [u8; NOTE_PLAINTEXT_SIZE]),
|
modify_plaintext: impl Fn(&mut [u8; NOTE_PLAINTEXT_SIZE]),
|
||||||
) {
|
) {
|
||||||
let ock = prf_ock(&ovk, &cv, &cmu, &epk_bytes(epk));
|
let ock = prf_ock(&ovk, &cv, &cmu.to_repr(), &epk_bytes(epk));
|
||||||
|
|
||||||
let mut op = [0; OUT_CIPHERTEXT_SIZE];
|
let mut op = [0; OUT_CIPHERTEXT_SIZE];
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
|
@ -1279,7 +1279,7 @@ mod tests {
|
||||||
assert_eq!(k_enc.as_bytes(), tv.k_enc);
|
assert_eq!(k_enc.as_bytes(), tv.k_enc);
|
||||||
|
|
||||||
let ovk = OutgoingViewingKey(tv.ovk);
|
let ovk = OutgoingViewingKey(tv.ovk);
|
||||||
let ock = prf_ock(&ovk, &cv, &cmu, &epk_bytes(&epk));
|
let ock = prf_ock(&ovk, &cv, &cmu.to_repr(), &epk_bytes(&epk));
|
||||||
assert_eq!(ock.as_ref(), tv.ock);
|
assert_eq!(ock.as_ref(), tv.ock);
|
||||||
|
|
||||||
let to = PaymentAddress::from_parts(Diversifier(tv.default_d), pk_d).unwrap();
|
let to = PaymentAddress::from_parts(Diversifier(tv.default_d), pk_d).unwrap();
|
||||||
|
|
Loading…
Reference in New Issue