diff options
author | Justus Winter <justus@sequoia-pgp.org> | 2023-03-14 14:18:14 +0100 |
---|---|---|
committer | Justus Winter <justus@sequoia-pgp.org> | 2023-03-14 16:17:26 +0100 |
commit | aa7e617e4a6aee954d30651d7ba9e6b9c51e57c0 (patch) | |
tree | 68e4d12393292a2235fa20c302f53fd51ee40fc0 /openpgp/src | |
parent | 62e52e7b1d88c98a5be051c407024e68ca506a90 (diff) |
openpgp: Simplify trimming of leading zeros.
Diffstat (limited to 'openpgp/src')
-rw-r--r-- | openpgp/src/crypto/mpi.rs | 17 |
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, |