diff --git a/sdk/program/src/pubkey.rs b/sdk/program/src/pubkey.rs index 52b8f9bff23f14..2f1dc2ecab8c33 100644 --- a/sdk/program/src/pubkey.rs +++ b/sdk/program/src/pubkey.rs @@ -169,9 +169,13 @@ impl TryFrom<&str> for Pubkey { pub fn bytes_are_curve_point>(_bytes: T) -> bool { #[cfg(not(target_os = "solana"))] { - curve25519_dalek::edwards::CompressedEdwardsY::from_slice(_bytes.as_ref()) - .map(|compressed_edwards_y| compressed_edwards_y.decompress().is_some()) - .unwrap_or(false) + let Ok(compressed_edwards_y) = + curve25519_dalek::edwards::CompressedEdwardsY::from_slice(_bytes.as_ref()) + else { + return false; + }; + + compressed_edwards_y.decompress().is_some() } #[cfg(target_os = "solana")] unimplemented!(); diff --git a/zk-sdk/src/encryption/elgamal.rs b/zk-sdk/src/encryption/elgamal.rs index 96569d41d7f90b..7b0d1a5fe4f56a 100644 --- a/zk-sdk/src/encryption/elgamal.rs +++ b/zk-sdk/src/encryption/elgamal.rs @@ -373,11 +373,15 @@ impl TryFrom<&[u8]> for ElGamalPubkey { return Err(ElGamalError::PubkeyDeserialization); } - CompressedRistretto::from_slice(bytes) - .map_err(|_| ElGamalError::PubkeyDeserialization)? - .decompress() - .ok_or(ElGamalError::PubkeyDeserialization) - .map(ElGamalPubkey) + let Ok(compressed_ristretto) = CompressedRistretto::from_slice(bytes) else { + return Err(ElGamalError::PubkeyDeserialization); + }; + + let Some(ristretto_point) = compressed_ristretto.decompress() else { + return Err(ElGamalError::PubkeyDeserialization); + }; + + Ok(ElGamalPubkey(ristretto_point)) } } @@ -719,10 +723,15 @@ impl DecryptHandle { return None; } - CompressedRistretto::from_slice(bytes) - .ok()? - .decompress() - .map(DecryptHandle) + let Ok(compressed_ristretto) = CompressedRistretto::from_slice(bytes) else { + return None; + }; + + let Some(ristretto_point) = compressed_ristretto.decompress() else { + return None; + }; + + Some(DecryptHandle(ristretto_point)) } } diff --git a/zk-sdk/src/encryption/pedersen.rs b/zk-sdk/src/encryption/pedersen.rs index 318cb0915d17e3..0d11f2bb6272ab 100644 --- a/zk-sdk/src/encryption/pedersen.rs +++ b/zk-sdk/src/encryption/pedersen.rs @@ -184,10 +184,15 @@ impl PedersenCommitment { return None; } - CompressedRistretto::from_slice(bytes) - .ok()? - .decompress() - .map(PedersenCommitment) + let Ok(compressed_ristretto) = CompressedRistretto::from_slice(bytes) else { + return None; + }; + + let Some(ristretto_point) = compressed_ristretto.decompress() else { + return None; + }; + + Some(PedersenCommitment(ristretto_point)) } } diff --git a/zk-sdk/src/sigma_proofs/mod.rs b/zk-sdk/src/sigma_proofs/mod.rs index 9ee91ddb7dd0b0..060cfb96212887 100644 --- a/zk-sdk/src/sigma_proofs/mod.rs +++ b/zk-sdk/src/sigma_proofs/mod.rs @@ -66,12 +66,19 @@ use { fn ristretto_point_from_optional_slice( optional_slice: Option<&[u8]>, ) -> Result { - optional_slice - .and_then(|slice| (slice.len() == RISTRETTO_POINT_LEN).then_some(slice)) - .map(CompressedRistretto::from_slice) - .transpose() - .map_err(|_| SigmaProofVerificationError::Deserialization)? - .ok_or(SigmaProofVerificationError::Deserialization) + let Some(slice) = optional_slice else { + return Err(SigmaProofVerificationError::Deserialization); + }; + + if slice.len() != RISTRETTO_POINT_LEN { + return Err(SigmaProofVerificationError::Deserialization); + } + + let Ok(compressed_ristretto) = CompressedRistretto::from_slice(slice) else { + return Err(SigmaProofVerificationError::Deserialization); + }; + + Ok(compressed_ristretto) } /// Deserializes an optional slice of bytes to a scalar. diff --git a/zk-token-sdk/src/curve25519/edwards.rs b/zk-token-sdk/src/curve25519/edwards.rs index 90ed4249e32451..7c0220e31c538b 100644 --- a/zk-token-sdk/src/curve25519/edwards.rs +++ b/zk-token-sdk/src/curve25519/edwards.rs @@ -63,10 +63,13 @@ mod target_arch { type Error = Curve25519Error; fn try_from(pod: &PodEdwardsPoint) -> Result { - CompressedEdwardsY::from_slice(&pod.0) - .map_err(|_| Curve25519Error::PodConversion)? - .decompress() - .ok_or(Curve25519Error::PodConversion) + let Ok(compressed_edwards_y) = CompressedEdwardsY::from_slice(&pod.0) else { + return Err(Curve25519Error::PodConversion); + }; + let Some(edwards_point) = compressed_edwards_y.decompress() else { + return Err(Curve25519Error::PodConversion); + }; + Ok(edwards_point) } } @@ -74,9 +77,10 @@ mod target_arch { type Point = Self; fn validate_point(&self) -> bool { - CompressedEdwardsY::from_slice(&self.0) - .map(|compressed_edwards_y| compressed_edwards_y.decompress().is_some()) - .unwrap_or(false) + let Ok(compressed_edwards_y) = CompressedEdwardsY::from_slice(&self.0) else { + return false; + }; + compressed_edwards_y.decompress().is_some() } } diff --git a/zk-token-sdk/src/curve25519/ristretto.rs b/zk-token-sdk/src/curve25519/ristretto.rs index 0ce247ae56168b..47f866cdd1ec72 100644 --- a/zk-token-sdk/src/curve25519/ristretto.rs +++ b/zk-token-sdk/src/curve25519/ristretto.rs @@ -63,10 +63,13 @@ mod target_arch { type Error = Curve25519Error; fn try_from(pod: &PodRistrettoPoint) -> Result { - CompressedRistretto::from_slice(&pod.0) - .map_err(|_| Curve25519Error::PodConversion)? - .decompress() - .ok_or(Curve25519Error::PodConversion) + let Ok(compressed_ristretto) = CompressedRistretto::from_slice(&pod.0) else { + return Err(Curve25519Error::PodConversion); + }; + let Some(ristretto_point) = compressed_ristretto.decompress() else { + return Err(Curve25519Error::PodConversion); + }; + Ok(ristretto_point) } } @@ -74,10 +77,10 @@ mod target_arch { type Point = Self; fn validate_point(&self) -> bool { - CompressedRistretto::from_slice(&self.0) - .ok() - .and_then(|compressed_ristretto| compressed_ristretto.decompress()) - .is_some() + let Ok(compressed_ristretto) = CompressedRistretto::from_slice(&self.0) else { + return false; + }; + compressed_ristretto.decompress().is_some() } } diff --git a/zk-token-sdk/src/encryption/elgamal.rs b/zk-token-sdk/src/encryption/elgamal.rs index 3763505ceab915..8423a30fd28df8 100644 --- a/zk-token-sdk/src/encryption/elgamal.rs +++ b/zk-token-sdk/src/encryption/elgamal.rs @@ -378,10 +378,15 @@ impl ElGamalPubkey { return None; } - CompressedRistretto::from_slice(bytes) - .ok()? - .decompress() - .map(ElGamalPubkey) + let Ok(compressed_ristretto) = CompressedRistretto::from_slice(bytes) else { + return None; + }; + + let Some(ristretto_point) = compressed_ristretto.decompress() else { + return None; + }; + + Some(ElGamalPubkey(ristretto_point)) } /// Encrypts an amount under the public key. @@ -441,11 +446,15 @@ impl TryFrom<&[u8]> for ElGamalPubkey { return Err(ElGamalError::PubkeyDeserialization); } - CompressedRistretto::from_slice(bytes) - .map_err(|_| ElGamalError::PubkeyDeserialization)? - .decompress() - .ok_or(ElGamalError::PubkeyDeserialization) - .map(ElGamalPubkey) + let Ok(compressed_ristretto) = CompressedRistretto::from_slice(bytes) else { + return Err(ElGamalError::PubkeyDeserialization); + }; + + let Some(ristretto_point) = compressed_ristretto.decompress() else { + return Err(ElGamalError::PubkeyDeserialization); + }; + + Ok(ElGamalPubkey(ristretto_point)) } } @@ -802,10 +811,15 @@ impl DecryptHandle { return None; } - CompressedRistretto::from_slice(bytes) - .ok()? - .decompress() - .map(DecryptHandle) + let Ok(compressed_ristretto) = CompressedRistretto::from_slice(bytes) else { + return None; + }; + + let Some(ristretto_point) = compressed_ristretto.decompress() else { + return None; + }; + + Some(DecryptHandle(ristretto_point)) } } diff --git a/zk-token-sdk/src/encryption/pedersen.rs b/zk-token-sdk/src/encryption/pedersen.rs index 16d9e05353e36c..8f86a85e5b4ab6 100644 --- a/zk-token-sdk/src/encryption/pedersen.rs +++ b/zk-token-sdk/src/encryption/pedersen.rs @@ -195,10 +195,15 @@ impl PedersenCommitment { return None; } - CompressedRistretto::from_slice(bytes) - .ok()? - .decompress() - .map(PedersenCommitment) + let Ok(compressed_ristretto) = CompressedRistretto::from_slice(bytes) else { + return None; + }; + + let Some(ristretto_point) = compressed_ristretto.decompress() else { + return None; + }; + + Some(PedersenCommitment(ristretto_point)) } } diff --git a/zk-token-sdk/src/sigma_proofs/mod.rs b/zk-token-sdk/src/sigma_proofs/mod.rs index db2b6535843096..84df8d6c9566fa 100644 --- a/zk-token-sdk/src/sigma_proofs/mod.rs +++ b/zk-token-sdk/src/sigma_proofs/mod.rs @@ -36,12 +36,19 @@ use { fn ristretto_point_from_optional_slice( optional_slice: Option<&[u8]>, ) -> Result { - optional_slice - .and_then(|slice| (slice.len() == RISTRETTO_POINT_LEN).then_some(slice)) - .map(CompressedRistretto::from_slice) - .transpose() - .map_err(|_| SigmaProofVerificationError::Deserialization)? - .ok_or(SigmaProofVerificationError::Deserialization) + let Some(slice) = optional_slice else { + return Err(SigmaProofVerificationError::Deserialization); + }; + + if slice.len() != RISTRETTO_POINT_LEN { + return Err(SigmaProofVerificationError::Deserialization); + } + + let Ok(compressed_ristretto) = CompressedRistretto::from_slice(slice) else { + return Err(SigmaProofVerificationError::Deserialization); + }; + + Ok(compressed_ristretto) } /// Deserializes an optional slice of bytes to a scalar.