[−][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 |