pub struct Mpint { /* private fields */ }
alloc
only.Expand description
Multiple precision integer, a.k.a. “mpint”.
This type is used for representing the big integer components of DSA and RSA keys.
Described in RFC4251 § 5:
Represents multiple precision integers in two’s complement format, stored as a string, 8 bits per byte, MSB first. Negative numbers have the value 1 as the most significant bit of the first byte of the data partition. If the most significant bit would be set for a positive number, the number MUST be preceded by a zero byte. Unnecessary leading bytes with the value 0 or 255 MUST NOT be included. The value zero MUST be stored as a string with zero bytes of data.
By convention, a number that is used in modular computations in Z_n SHOULD be represented in the range 0 <= x < n.
§Examples
value (hex) | representation (hex) |
---|---|
0 | 00 00 00 00 |
9a378f9b2e332a7 | 00 00 00 08 09 a3 78 f9 b2 e3 32 a7 |
80 | 00 00 00 02 00 80 |
-1234 | 00 00 00 02 ed cc |
-deadbeef | 00 00 00 05 ff 21 52 41 11 |
Implementations§
source§impl Mpint
impl Mpint
sourcepub fn from_bytes(bytes: &[u8]) -> Result<Self>
pub fn from_bytes(bytes: &[u8]) -> Result<Self>
Create a new multiple precision integer from the given big endian-encoded byte slice.
Note that this method expects a leading zero on positive integers whose MSB is set, but does NOT expect a 4-byte length prefix.
sourcepub fn from_positive_bytes(bytes: &[u8]) -> Result<Self>
pub fn from_positive_bytes(bytes: &[u8]) -> Result<Self>
Create a new multiple precision integer from the given big endian encoded byte slice representing a positive integer.
The input may begin with leading zeros, which will be stripped when
converted to Mpint
encoding.
sourcepub fn as_bytes(&self) -> &[u8] ⓘ
pub fn as_bytes(&self) -> &[u8] ⓘ
Get the big integer data encoded as big endian bytes.
This slice will contain a leading zero if the value is positive but the
MSB is also set. Use Mpint::as_positive_bytes
to ensure the number
is positive and strip the leading zero byte if it exists.
sourcepub fn as_positive_bytes(&self) -> Option<&[u8]>
pub fn as_positive_bytes(&self) -> Option<&[u8]>
Get the bytes of a positive integer.
§Returns
Some(bytes)
if the number is positive. The leading zero byte will be stripped.None
if the value is negative
Trait Implementations§
source§impl ConstantTimeEq for Mpint
impl ConstantTimeEq for Mpint
source§impl Encode for Mpint
impl Encode for Mpint
source§fn encoded_len(&self) -> Result<usize>
fn encoded_len(&self) -> Result<usize>
source§fn encode(&self, writer: &mut impl Writer) -> Result<()>
fn encode(&self, writer: &mut impl Writer) -> Result<()>
Writer
.source§fn encoded_len_prefixed(&self) -> Result<usize, Error>
fn encoded_len_prefixed(&self) -> Result<usize, Error>
uint32
length prefix.source§fn encode_prefixed(&self, writer: &mut impl Writer) -> Result<(), Error>
fn encode_prefixed(&self, writer: &mut impl Writer) -> Result<(), Error>
uint32
length prefix
set to Encode::encoded_len
.source§impl Ord for Mpint
impl Ord for Mpint
source§impl PartialOrd for Mpint
impl PartialOrd for Mpint
impl Eq for Mpint
Auto Trait Implementations§
impl Freeze for Mpint
impl RefUnwindSafe for Mpint
impl Send for Mpint
impl Sync for Mpint
impl Unpin for Mpint
impl UnwindSafe for Mpint
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)