[−][src]Crate tx_padding
Padding and unpadding of messages with random prepended bytes and trailing zeros
This crate provides a padding scheme compatible with block-padding
crate
in which random bytes are prepended and zeros are appended.
For a message of length size
, a buffer of length
block_size * ((size + 1) / block_size) + 2 * block_size
is required for padding. Let pad_len
be
(-size - 2) % block_size + 2
. Apparently pad_len
is the number of bytes to pad the message into
multiple of block_size
. The padding scheme appends pad_len + 1
bytes at the front of the
message, where the lower log(block_size)
bits of the first byte stores pad_len - 2
and the rest
of the bits in the padding are random. At this point the message needs block_size - 1
more
bytes to form multiple of block_size
and we will just pad \0
at the end.
So TxPadding<N>
comes with a type parameter N
which specify the block size to use which is
essential for unpadding. N
must be a power of 2.
use tx_padding::{TxPadding, Padding}; use tx_padding::consts::{U8}; let msg = b"test"; let n = msg.len(); let mut buffer = [0xff; 16]; buffer[..n].copy_from_slice(msg); let padded_msg = TxPadding::<U8>::pad(&mut buffer, n, 8).unwrap(); assert_eq!(&padded_msg[5..], b"test\x00\x00\x00\x00\x00\x00\x00"); assert_eq!((padded_msg[0] & 0x7) + 2, 4); assert_eq!(TxPadding::<U8>::unpad(&padded_msg).unwrap(), msg);
use tx_padding::{TxPadding, Padding}; use tx_padding::consts::{U8}; let mut buffer = [0xff; 8]; assert!(TxPadding::<U8>::pad(&mut buffer, 5, 8).is_err());
pad_block
will always return PadError
since it is not intended to be called. pad
will
return PadError
if block_size > 511
, block_size
mismatch type parameter N
or buffer
is not sufficiently large, which is stricter than the requirement of the Padding
trait.
Modules
consts | Type aliases for many constants. |
Structs
PadError | Error for indicating failed padding operation |
UnpadError | Error for indicating failed unpadding operation |
Enums
TxPadding |
Traits
Padding | Trait for padding messages divided into blocks |