summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustus Winter <justus@sequoia-pgp.org>2023-03-14 14:18:14 +0100
committerJustus Winter <justus@sequoia-pgp.org>2023-03-14 16:17:26 +0100
commitaa7e617e4a6aee954d30651d7ba9e6b9c51e57c0 (patch)
tree68e4d12393292a2235fa20c302f53fd51ee40fc0
parent62e52e7b1d88c98a5be051c407024e68ca506a90 (diff)
openpgp: Simplify trimming of leading zeros.
-rw-r--r--openpgp/src/crypto/mpi.rs17
1 files changed, 7 insertions, 10 deletions
diff --git a/openpgp/src/crypto/mpi.rs b/openpgp/src/crypto/mpi.rs
index 7cc94206..e9b65bf6 100644
--- a/openpgp/src/crypto/mpi.rs
+++ b/openpgp/src/crypto/mpi.rs
@@ -51,20 +51,17 @@ impl From<Vec<u8>> for MPI {
}
impl MPI {
+ /// Trims leading zero octets.
+ fn trim_leading_zeros(v: &[u8]) -> &[u8] {
+ let offset = v.iter().take_while(|&&o| o == 0).count();
+ &v[offset..]
+ }
+
/// Creates a new MPI.
///
/// This function takes care of removing leading zeros.
pub fn new(value: &[u8]) -> Self {
- let mut leading_zeros = 0;
- for b in value {
- leading_zeros += b.leading_zeros() as usize;
- if *b != 0 {
- break;
- }
- }
-
- let offset = leading_zeros / 8;
- let value = Vec::from(&value[offset..]).into_boxed_slice();
+ let value = Self::trim_leading_zeros(value).to_vec().into_boxed_slice();
MPI {
value,