XID

Struct XID 

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

A XID (eXtensible IDentifier).

A XID is a unique 32-byte identifier for a subject entity (person, organization, device, or any other entity). XIDs have the following characteristics:

  • They’re cryptographically tied to a public key at inception (the “inception key”)
  • They remain stable throughout their lifecycle even as their keys and permissions change
  • They can be extended to XID documents containing keys, endpoints, permissions, and delegation info
  • They support key rotation and multiple verification schemes
  • They allow for delegation of specific permissions to other entities
  • They can include resolution methods to locate and verify the XID document

A XID is created by taking the SHA-256 hash of the CBOR encoding of a public signing key. This ensures the XID is cryptographically tied to the key.

As defined in BCR-2024-010.

Implementations§

Source§

impl XID

Source

pub const XID_SIZE: usize = 32usize

Source

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

Create a new XID from data.

Source

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

Create a new XID from data.

Returns None if the data is not the correct length.

Source

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

Return the data of the XID.

Source

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

Get the data of the XID as a byte slice.

Source

pub fn new(genesis_key: impl AsRef<SigningPublicKey>) -> Self

Create a new XID from the given public key (the “genesis key”).

The XID is the SHA-256 digest of the CBOR encoding of the public key.

Source

pub fn validate(&self, key: &SigningPublicKey) -> bool

Validate the XID against the given public key.

Source

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

Create a new XID from the given hexadecimal string.

§Panics

Panics if the string is not exactly 64 hexadecimal digits.

Source

pub fn to_hex(&self) -> String

The data as a hexadecimal string.

Source

pub fn short_description(&self) -> String

The first four bytes of the XID as a hexadecimal string.

Source

pub fn bytewords_identifier(&self, prefix: bool) -> String

The first four bytes of the XID as upper-case ByteWords.

Source

pub fn bytemoji_identifier(&self, prefix: bool) -> String

The first four bytes of the XID as Bytemoji.

Trait Implementations§

Source§

impl AsRef<[u8]> for XID

Implements AsRef<u8> to allow XID to be treated as a byte slice.

Source§

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

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

impl CBORTagged for XID

Implements CBORTagged trait to provide CBOR tag information for XID.

Source§

fn cbor_tags() -> Vec<Tag>

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

impl CBORTaggedDecodable for XID

Implements CBORTaggedDecodable to provide CBOR decoding functionality for XID.

Source§

fn from_untagged_cbor(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 XID

Implements CBORTaggedEncodable to provide CBOR encoding functionality for XID.

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 XID

Source§

fn clone(&self) -> XID

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 XID

Implements Debug formatting for XID showing the full hex representation.

Source§

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

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

impl Display for XID

Implements Display formatting for XID showing a shortened hex representation.

Source§

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

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

impl From<&PrivateKeyBase> for XID

Implements conversion from PrivateKeyBase reference to XID via the Schnorr signing key.

Source§

fn from(key: &PrivateKeyBase) -> Self

Converts to this type from the input type.
Source§

impl From<&PublicKeys> for XID

Implements conversion from PublicKeys reference to XID via the signing public key.

Source§

fn from(key: &PublicKeys) -> Self

Converts to this type from the input type.
Source§

impl From<&SigningPublicKey> for XID

Implements conversion from SigningPublicKey reference to XID.

Source§

fn from(key: &SigningPublicKey) -> Self

Converts to this type from the input type.
Source§

impl<'a> From<&'a XID> for &'a [u8]

Implements conversion from a XID reference to a byte slice reference.

Source§

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

Converts to this type from the input type.
Source§

impl<'a> From<&'a XID> for &'a [u8; 32]

Implements conversion from a XID reference to a byte array reference.

Source§

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

Converts to this type from the input type.
Source§

impl From<XID> for CBOR

Implements conversion from XID to CBOR for serialization.

Source§

fn from(value: XID) -> Self

Converts to this type from the input type.
Source§

impl From<XID> for Vec<u8>

Implements conversion from XID to Vec<u8> to allow access to the raw bytes.

Source§

fn from(xid: XID) -> Self

Converts to this type from the input type.
Source§

impl Hash for XID

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Ord for XID

Implements Ord to allow XIDs to be fully ordered.

Source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for XID

Source§

fn eq(&self, other: &XID) -> 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 PartialOrd for XID

Implements PartialOrd to allow XIDs to be compared and partially ordered.

Source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

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

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

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

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

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

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

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

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl ReferenceProvider for XID

Implements ReferenceProvider for XID to generate a Reference from the XID.

Source§

fn reference(&self) -> Reference

Returns a cryptographic reference that uniquely identifies this object. Read more
Source§

fn ref_hex(&self) -> String

Returns the reference data as a hexadecimal string. Read more
Source§

fn ref_data_short(&self) -> [u8; 4]

Returns the first four bytes of the reference. Read more
Source§

fn ref_hex_short(&self) -> String

Returns the first four bytes of the reference as a hexadecimal string. Read more
Source§

fn ref_bytewords(&self, prefix: Option<&str>) -> String

Returns the first four bytes of the reference as upper-case ByteWords. Read more
Source§

fn ref_bytemoji(&self, prefix: Option<&str>) -> String

Returns the first four bytes of the reference as Bytemoji. Read more
Source§

impl TryFrom<&SigningPrivateKey> for XID

Implements conversion from SigningPrivateKey reference to XID via the public key.

Source§

type Error = Error

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

fn try_from(key: &SigningPrivateKey) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl TryFrom<CBOR> for XID

Implements conversion from CBOR to XID for deserialization.

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 XIDProvider for XID

Implements XIDProvider for XID to return itself.

Source§

fn xid(&self) -> XID

Returns the XID for this object.
Source§

impl Copy for XID

Source§

impl Eq for XID

Source§

impl StructuralPartialEq for XID

Auto Trait Implementations§

§

impl Freeze for XID

§

impl RefUnwindSafe for XID

§

impl Send for XID

§

impl Sync for XID

§

impl Unpin for XID

§

impl UnwindSafe for XID

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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. 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