Nonce

Struct Nonce 

Source
pub struct Nonce(/* private fields */);
Expand description

A random nonce (“number used once”).

A Nonce is a cryptographic primitive consisting of a random or pseudo-random number that is used only once in a cryptographic communication. Nonces are often used in authentication protocols, encryption algorithms, and digital signatures to prevent replay attacks and ensure the uniqueness of encrypted messages.

In this implementation, a Nonce is a 12-byte random value. The size is chosen to be sufficiently large to prevent collisions while remaining efficient for storage and transmission.

§CBOR Serialization

Nonce implements the CBORTaggedCodable trait, which means it can be serialized to and deserialized from CBOR with a specific tag. The tag used is TAG_NONCE defined in the tags module.

§UR Serialization

When serialized as a Uniform Resource (UR), a Nonce is represented as a binary blob with the type “nonce”.

§Common Uses

  • In authenticated encryption schemes like AES-GCM
  • For initializing counters in counter-mode block ciphers
  • In challenge-response authentication protocols
  • To prevent replay attacks in secure communications

§Examples

Creating a new random nonce:

use bc_components::Nonce;

// Generate a new random nonce
let nonce = Nonce::new();

Creating a nonce from existing data:

use bc_components::Nonce;

// Create a nonce from a byte array
let data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
let nonce = Nonce::from_data(data);

// Access the nonce data
let nonce_data = nonce.data();

Converting to and from hexadecimal representation:

use bc_components::Nonce;

// Create a nonce and convert to hex
let nonce = Nonce::new();
let hex_string = nonce.hex();

// Create a nonce from hex
let nonce_from_hex = Nonce::from_hex(&hex_string);
assert_eq!(nonce, nonce_from_hex);

Implementations§

Source§

impl Nonce

Source

pub const NONCE_SIZE: usize = 12usize

Source

pub fn new() -> Self

Create a new random nonce.

Source

pub const fn from_data(data: [u8; 12]) -> Self

Restores a nonce from data.

Source

pub fn from_data_ref(data: impl AsRef<[u8]>) -> Result<Self>

Restores a nonce from data.

Source

pub fn data(&self) -> &[u8; 12]

Get the data of the nonce.

Source

pub fn as_bytes(&self) -> &[u8]

Get the nonce as a byte slice.

Source

pub fn from_hex(hex: impl AsRef<str>) -> Self

Create a new nonce from the given hexadecimal string.

§Panics

Panics if the string is not exactly 24 hexadecimal digits.

Source

pub fn hex(&self) -> String

The data as a hexadecimal string.

Trait Implementations§

Source§

impl AsRef<[u8]> for Nonce

Source§

fn as_ref(&self) -> &[u8]

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl AsRef<Nonce> for Nonce

Provides a self-reference, enabling API consistency with other types.

Source§

fn as_ref(&self) -> &Self

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl CBORTagged for Nonce

Identifies the CBOR tags used for Nonce serialization.

Source§

fn cbor_tags() -> Vec<Tag>

Returns the CBOR tags associated with this type. Read more
Source§

impl CBORTaggedDecodable for Nonce

Defines how a Nonce is decoded from CBOR.

Source§

fn from_untagged_cbor(untagged_cbor: CBOR) -> Result<Self>

Creates an instance of this type by decoding it from untagged CBOR. Read more
Source§

fn from_tagged_cbor(cbor: CBOR) -> Result<Self, Error>
where Self: Sized,

Creates an instance of this type by decoding it from tagged CBOR. Read more
Source§

fn from_tagged_cbor_data(data: impl AsRef<[u8]>) -> Result<Self, Error>
where Self: Sized,

Creates an instance of this type by decoding it from binary encoded tagged CBOR. Read more
Source§

fn from_untagged_cbor_data(data: impl AsRef<[u8]>) -> Result<Self, Error>
where Self: Sized,

Creates an instance of this type by decoding it from binary encoded untagged CBOR. Read more
Source§

impl CBORTaggedEncodable for Nonce

Defines how a Nonce is encoded as CBOR (as a byte string).

Source§

fn untagged_cbor(&self) -> CBOR

Returns the untagged CBOR encoding of this instance. Read more
Source§

fn tagged_cbor(&self) -> CBOR

Returns the tagged CBOR encoding of this instance. Read more
Source§

fn tagged_cbor_data(&self) -> Vec<u8>

Returns the tagged value in CBOR binary representation. Read more
Source§

impl Clone for Nonce

Source§

fn clone(&self) -> Nonce

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Nonce

Provides a debug representation showing the nonce’s hexadecimal value.

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Nonce

Provides a default implementation that creates a new random nonce.

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'a> From<&'a Nonce> for &'a [u8; 12]

Allows accessing the underlying data as a fixed-size byte array reference.

Source§

fn from(value: &'a Nonce) -> Self

Converts to this type from the input type.
Source§

impl From<&Nonce> for Nonce

Enables cloning a Nonce from a reference using From trait.

Source§

fn from(nonce: &Nonce) -> Self

Converts to this type from the input type.
Source§

impl From<&Nonce> for Vec<u8>

Converts a Nonce reference into a Vec<u8> containing the nonce bytes.

Source§

fn from(nonce: &Nonce) -> Self

Converts to this type from the input type.
Source§

impl From<Nonce> for CBOR

Enables conversion of a Nonce into a tagged CBOR value.

Source§

fn from(value: Nonce) -> Self

Converts to this type from the input type.
Source§

impl From<Nonce> for Vec<u8>

Converts a Nonce into a Vec<u8> containing the nonce bytes.

Source§

fn from(nonce: Nonce) -> Self

Converts to this type from the input type.
Source§

impl From<Rc<Nonce>> for Nonce

Converts an Rc-wrapped Nonce into a Nonce by cloning the inner value.

Source§

fn from(value: Rc<Nonce>) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for Nonce

Source§

fn eq(&self, other: &Nonce) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl TryFrom<CBOR> for Nonce

Enables conversion from CBOR to Nonce, with proper error handling.

Source§

type Error = Error

The type returned in the event of a conversion error.
Source§

fn try_from(cbor: CBOR) -> Result<Self>

Performs the conversion.
Source§

impl Eq for Nonce

Source§

impl StructuralPartialEq for Nonce

Auto Trait Implementations§

§

impl Freeze for Nonce

§

impl RefUnwindSafe for Nonce

§

impl Send for Nonce

§

impl Sync for Nonce

§

impl Unpin for Nonce

§

impl UnwindSafe for Nonce

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CBORDecodable for T
where T: TryFrom<CBOR, Error = Error>,

Source§

fn try_from_cbor(cbor: &CBOR) -> Result<Self, Error>

Source§

impl<T> CBOREncodable for T
where T: Into<CBOR> + Clone,

Source§

fn to_cbor(&self) -> CBOR

Converts this value to a CBOR object. Read more
Source§

fn to_cbor_data(&self) -> Vec<u8>

Converts this value directly to binary CBOR data. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToHex for T
where T: AsRef<[u8]>,

Source§

fn encode_hex<U>(&self) -> U
where U: FromIterator<char>,

Encode the hex strict representing self into the result. Lower case letters are used (e.g. f9b4ca)
Source§

fn encode_hex_upper<U>(&self) -> U
where U: FromIterator<char>,

Encode the hex strict representing self into the result. Upper case letters are used (e.g. F9B4CA)
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> URDecodable for T

Source§

fn from_ur(ur: impl AsRef<UR>) -> Result<Self, Error>
where Self: Sized,

Source§

fn from_ur_string(ur_string: impl Into<String>) -> Result<Self, Error>
where Self: Sized,

Source§

impl<T> UREncodable for T

Source§

fn ur(&self) -> UR

Returns the UR representation of the object.
Source§

fn ur_string(&self) -> String

Returns the UR string representation of the object.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> CBORCodable for T

Source§

impl<T> CBORTaggedCodable for T

Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> URCodable for T