Trait strict_encoding::StrictDecode
source · [−]pub trait StrictDecode: Sized {
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>;
fn strict_deserialize(data: impl AsRef<[u8]>) -> Result<Self, Error> { ... }
}
Expand description
Binary decoding according to the strict rules that usually apply to
consensus-critical data structures. May be used for network communications.
MUST NOT be used for commitment verification: even if the commit procedure
uses StrictEncode
, the actual commit verification MUST be done with
CommitVerify
, TryCommitVerify
and EmbedCommitVerify
traits, which,
instead of deserializing (nonce operation for commitments) repeat the
commitment procedure for the revealed message and verify it against the
provided commitment.
Required Methods
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
Decode with the given std::io::Read
instance; must either
construct an instance or return implementation-specific error type.
Provided Methods
Tries to deserialize byte array into the current type using
StrictDecode::strict_decode
Implementations on Foreign Types
sourceimpl StrictDecode for FlagVec
impl StrictDecode for FlagVec
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for u256
impl StrictDecode for u256
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for u512
impl StrictDecode for u512
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for u1024
impl StrictDecode for u1024
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for LeafVersion
impl StrictDecode for LeafVersion
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for FutureLeafVersion
impl StrictDecode for FutureLeafVersion
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for TaprootMerkleBranch
impl StrictDecode for TaprootMerkleBranch
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for SecretKey
impl StrictDecode for SecretKey
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for TweakedKeyPair
impl StrictDecode for TweakedKeyPair
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for KeyPair
impl StrictDecode for KeyPair
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for PublicKey
impl StrictDecode for PublicKey
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for XOnlyPublicKey
impl StrictDecode for XOnlyPublicKey
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for TweakedPublicKey
impl StrictDecode for TweakedPublicKey
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for Signature
impl StrictDecode for Signature
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for Signature
impl StrictDecode for Signature
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for PsbtSighashType
impl StrictDecode for PsbtSighashType
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for EcdsaSighashType
impl StrictDecode for EcdsaSighashType
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for SchnorrSighashType
impl StrictDecode for SchnorrSighashType
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for EcdsaSig
impl StrictDecode for EcdsaSig
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for SchnorrSig
impl StrictDecode for SchnorrSig
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for Payload
impl StrictDecode for Payload
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for Address
impl StrictDecode for Address
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for Amount
impl StrictDecode for Amount
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for Script
impl StrictDecode for Script
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for ControlBlock
impl StrictDecode for ControlBlock
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for Network
impl StrictDecode for Network
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for ChildNumber
impl StrictDecode for ChildNumber
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for DerivationPath
impl StrictDecode for DerivationPath
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for ChainCode
impl StrictDecode for ChainCode
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for Fingerprint
impl StrictDecode for Fingerprint
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for ExtendedPubKey
impl StrictDecode for ExtendedPubKey
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for ExtendedPrivKey
impl StrictDecode for ExtendedPrivKey
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for Key
impl StrictDecode for Key
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for Pair
impl StrictDecode for Pair
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for ProprietaryKey
impl StrictDecode for ProprietaryKey
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl StrictDecode for TapTree
impl StrictDecode for TapTree
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl<T> StrictDecode for Range<T> where
T: StrictDecode,
impl<T> StrictDecode for Range<T> where
T: StrictDecode,
In terms of strict decoding, ranges are represented as a tuples of two values: start and end.
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl<T> StrictDecode for RangeInclusive<T> where
T: StrictDecode,
impl<T> StrictDecode for RangeInclusive<T> where
T: StrictDecode,
In terms of strict decoding, inclusive ranges are represented as a tuples of two values: start and end.
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl<T> StrictDecode for RangeFrom<T> where
T: StrictDecode,
impl<T> StrictDecode for RangeFrom<T> where
T: StrictDecode,
In terms of strict decoding, partial ranges are represented as a single value.
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl<T> StrictDecode for RangeTo<T> where
T: StrictDecode,
impl<T> StrictDecode for RangeTo<T> where
T: StrictDecode,
In terms of strict decoding, partial ranges are represented as a single value.
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl<T> StrictDecode for RangeToInclusive<T> where
T: StrictDecode,
impl<T> StrictDecode for RangeToInclusive<T> where
T: StrictDecode,
In terms of strict decoding, partial ranges are represented as a single value.
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl<T> StrictDecode for Option<T> where
T: StrictDecode,
impl<T> StrictDecode for Option<T> where
T: StrictDecode,
In terms of strict encoding, Option
(optional values) are
represented by a significator byte, which MUST be either 0
(for no
value present) or 1
, followed by the value strict encoding.
For decoding an attempt to read Option
from a encoded non-0
or non-1 length Vec will result in Error::WrongOptionalEncoding
.
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl<T> StrictDecode for Vec<T> where
T: StrictDecode,
impl<T> StrictDecode for Vec<T> where
T: StrictDecode,
In terms of strict encoding, Vec
is stored in form of
usize-encoded length (see StrictEncode
implementation for usize
type for encoding platform-independent constant-length
encoding rules) followed by a consequently-encoded vec items,
according to their type.
An attempt to encode Vec
with more items than can fit in usize
encoding rules will result in Error::ExceedMaxItems
.
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl<T> StrictDecode for HashSet<T> where
T: StrictDecode + Eq + Ord + Hash + Debug,
impl<T> StrictDecode for HashSet<T> where
T: StrictDecode + Eq + Ord + Hash + Debug,
Strict decoding of a unique value collection represented by a rust
HashSet
type is performed alike Vec
decoding with the only
exception: if the repeated value met a Error::RepeatedValue is
returned.
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl<T> StrictDecode for BTreeSet<T> where
T: StrictDecode + Eq + Ord + Debug,
impl<T> StrictDecode for BTreeSet<T> where
T: StrictDecode + Eq + Ord + Debug,
Strict decoding of a unique value collection represented by a rust
BTreeSet
type is performed alike Vec
decoding with the only
exception: if the repeated value met a Error::RepeatedValue is
returned.
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl<T> StrictDecode for HashMap<usize, T> where
T: StrictDecode + Clone,
impl<T> StrictDecode for HashMap<usize, T> where
T: StrictDecode + Clone,
LNP/BP library uses HashMap<usize, T: StrictEncode>
s to encode
ordered lists, where the position of the list item must be fixed, since
the item is referenced from elsewhere by its index. Thus, the library
does not supports and recommends not to support strict encoding
of any other HashMap
variants.
Strict encoding of the HashMap<usize, T>
type is performed by
converting into a fixed-order Vec<T>
and serializing it according to
the Vec
strict encoding rules. This operation is internally
performed via conversion into BTreeMap<usize, T: StrictEncode>
.
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl<K, V> StrictDecode for BTreeMap<K, V> where
K: StrictDecode + Ord + Clone + Debug,
V: StrictDecode + Clone,
impl<K, V> StrictDecode for BTreeMap<K, V> where
K: StrictDecode + Ord + Clone + Debug,
V: StrictDecode + Clone,
LNP/BP library uses BTreeMap<usize, T: StrictEncode>
s to encode
ordered lists, where the position of the list item must be fixed, since
the item is referenced from elsewhere by its index. Thus, the library
does not supports and recommends not to support strict encoding
of any other BTreeMap
variants.
Strict encoding of the BTreeMap<usize, T>
type is performed
by converting into a fixed-order Vec<T>
and serializing it according
to the Vec
strict encoding rules.
fn strict_decode<D: Read>(d: D) -> Result<Self, Error>
sourceimpl<K, V> StrictDecode for (K, V) where
K: StrictDecode + Clone,
V: StrictDecode + Clone,
impl<K, V> StrictDecode for (K, V) where
K: StrictDecode + Clone,
V: StrictDecode + Clone,
Two-component tuples are decoded as they were fields in the parent data structure