Struct identity_iota::iota::IotaDocument
source · pub struct IotaDocument {
pub metadata: IotaDocumentMetadata,
/* private fields */
}
Expand description
A DID Document adhering to the IOTA DID method specification.
This extends CoreDocument
.
Fields§
§metadata: IotaDocumentMetadata
The metadata of an IOTA DID document.
Implementations§
source§impl IotaDocument
impl IotaDocument
sourcepub fn new(network: &NetworkName) -> IotaDocument
pub fn new(network: &NetworkName) -> IotaDocument
Constructs an empty DID Document with a IotaDID::placeholder
identifier
for the given network
.
sourcepub fn new_with_id(id: IotaDID) -> IotaDocument
pub fn new_with_id(id: IotaDID) -> IotaDocument
Constructs an empty DID Document with the given identifier.
sourcepub fn controller(&self) -> impl Iterator<Item = &IotaDID>
pub fn controller(&self) -> impl Iterator<Item = &IotaDID>
Returns an iterator yielding the DID controllers.
sourcepub fn set_controller<T>(&mut self, controller: T)where
T: IntoIterator<Item = IotaDID>,
pub fn set_controller<T>(&mut self, controller: T)where
T: IntoIterator<Item = IotaDID>,
Sets the value of the document controller.
Note:
- Duplicates in
controller
will be ignored. - Use an empty collection to clear all controllers.
sourcepub fn also_known_as(&self) -> &OrderedSet<Url>
pub fn also_known_as(&self) -> &OrderedSet<Url>
Returns a reference to the alsoKnownAs
set.
sourcepub fn also_known_as_mut(&mut self) -> &mut OrderedSet<Url>
pub fn also_known_as_mut(&mut self) -> &mut OrderedSet<Url>
Returns a mutable reference to the alsoKnownAs
set.
sourcepub fn core_document(&self) -> &CoreDocument
pub fn core_document(&self) -> &CoreDocument
Returns a reference to the underlying CoreDocument
.
sourcepub fn properties(&self) -> &BTreeMap<String, Value>
pub fn properties(&self) -> &BTreeMap<String, Value>
Returns a reference to the custom DID Document properties.
sourcepub fn properties_mut_unchecked(&mut self) -> &mut BTreeMap<String, Value>
pub fn properties_mut_unchecked(&mut self) -> &mut BTreeMap<String, Value>
Returns a mutable reference to the custom DID Document properties.
§Warning
The properties returned are not checked against the standard fields in a CoreDocument
. Incautious use can have
undesired consequences such as key collision when attempting to serialize the document or distinct resources (such
as services and methods) being identified by the same DID URL.
sourcepub fn service(&self) -> &OrderedSet<Service>
pub fn service(&self) -> &OrderedSet<Service>
Return a set of all Service
s in the document.
sourcepub fn remove_service(&mut self, did_url: &DIDUrl) -> Option<Service>
pub fn remove_service(&mut self, did_url: &DIDUrl) -> Option<Service>
sourcepub fn methods(&self, scope: Option<MethodScope>) -> Vec<&VerificationMethod>
pub fn methods(&self, scope: Option<MethodScope>) -> Vec<&VerificationMethod>
Returns a Vec
of verification method references whose verification relationship matches scope
.
If scope
is None
, all embedded methods are returned.
sourcepub fn insert_method(
&mut self,
method: VerificationMethod,
scope: MethodScope
) -> Result<(), Error>
pub fn insert_method( &mut self, method: VerificationMethod, scope: MethodScope ) -> Result<(), Error>
Adds a new VerificationMethod
to the document in the given MethodScope
.
§Errors
Returns an error if a method with the same fragment already exists.
sourcepub fn remove_method(&mut self, did_url: &DIDUrl) -> Option<VerificationMethod>
pub fn remove_method(&mut self, did_url: &DIDUrl) -> Option<VerificationMethod>
Removes and returns the VerificationMethod
identified by did_url
from the document.
§Note
All references to the method found in the document will be removed. This includes cases where the reference is to a method contained in another DID document.
sourcepub fn remove_method_and_scope(
&mut self,
did_url: &DIDUrl
) -> Option<(VerificationMethod, MethodScope)>
pub fn remove_method_and_scope( &mut self, did_url: &DIDUrl ) -> Option<(VerificationMethod, MethodScope)>
Removes and returns the VerificationMethod
from the document. The MethodScope
under which the method was
found is appended to the second position of the returned tuple.
§Note
All references to the method found in the document will be removed. This includes cases where the reference is to a method contained in another DID document.
sourcepub fn attach_method_relationship<'query, Q>(
&mut self,
method_query: Q,
relationship: MethodRelationship
) -> Result<bool, Error>where
Q: Into<DIDUrlQuery<'query>>,
pub fn attach_method_relationship<'query, Q>(
&mut self,
method_query: Q,
relationship: MethodRelationship
) -> Result<bool, Error>where
Q: Into<DIDUrlQuery<'query>>,
Attaches the relationship to the method resolved by method_query
.
§Errors
Returns an error if the method does not exist or if it is embedded.
To convert an embedded method into a generic verification method, remove it first
and insert it with MethodScope::VerificationMethod
.
sourcepub fn detach_method_relationship<'query, Q>(
&mut self,
method_query: Q,
relationship: MethodRelationship
) -> Result<bool, Error>where
Q: Into<DIDUrlQuery<'query>>,
pub fn detach_method_relationship<'query, Q>(
&mut self,
method_query: Q,
relationship: MethodRelationship
) -> Result<bool, Error>where
Q: Into<DIDUrlQuery<'query>>,
Detaches the relationship
from the method identified by did_url
.
Returns true
if the relationship was found and removed, false
otherwise.
§Errors
Returns an error if the method does not exist or is embedded.
To remove an embedded method, use Self::remove_method
.
§Note
If the method is referenced in the given scope, but the document does not contain the referenced verification method, then the reference will persist in the document (i.e. it is not removed).
sourcepub fn resolve_method_mut<'query, Q>(
&mut self,
method_query: Q,
scope: Option<MethodScope>
) -> Option<&mut VerificationMethod>where
Q: Into<DIDUrlQuery<'query>>,
pub fn resolve_method_mut<'query, Q>(
&mut self,
method_query: Q,
scope: Option<MethodScope>
) -> Option<&mut VerificationMethod>where
Q: Into<DIDUrlQuery<'query>>,
Returns the first VerificationMethod
with an id
property matching the
provided method_query
and the verification relationship specified by scope
if present.
§Warning
Incorrect use of this method can lead to distinct document resources being identified by the same DID URL.
sourcepub fn resolve_service<'query, 'me, Q>(
&'me self,
service_query: Q
) -> Option<&'me Service>where
Q: Into<DIDUrlQuery<'query>>,
pub fn resolve_service<'query, 'me, Q>(
&'me self,
service_query: Q
) -> Option<&'me Service>where
Q: Into<DIDUrlQuery<'query>>,
Returns the first Service
with an id
property matching the provided service_query
, if present.
sourcepub fn resolve_method<'query, 'me, Q>(
&'me self,
method_query: Q,
scope: Option<MethodScope>
) -> Option<&'me VerificationMethod>where
Q: Into<DIDUrlQuery<'query>>,
pub fn resolve_method<'query, 'me, Q>(
&'me self,
method_query: Q,
scope: Option<MethodScope>
) -> Option<&'me VerificationMethod>where
Q: Into<DIDUrlQuery<'query>>,
Returns the first VerificationMethod
with an id
property matching the
provided method_query
and the verification relationship specified by scope
if present.
sourcepub fn verify_jws<'jws, T>(
&self,
jws: &'jws Jws,
detached_payload: Option<&'jws [u8]>,
signature_verifier: &T,
options: &JwsVerificationOptions
) -> Result<DecodedJws<'jws>, Error>where
T: JwsVerifier,
pub fn verify_jws<'jws, T>(
&self,
jws: &'jws Jws,
detached_payload: Option<&'jws [u8]>,
signature_verifier: &T,
options: &JwsVerificationOptions
) -> Result<DecodedJws<'jws>, Error>where
T: JwsVerifier,
Decodes and verifies the provided JWS according to the passed JwsVerificationOptions
and
JwsVerifier
.
Regardless of which options are passed the following conditions must be met in order for a verification attempt to take place.
- The JWS must be encoded according to the JWS compact serialization.
- The
kid
value in the protected header must be an identifier of a verification method in this DID document.
sourcepub fn pack(self) -> Result<Vec<u8>, Error>
pub fn pack(self) -> Result<Vec<u8>, Error>
Serializes the document for inclusion in an Alias Output’s state metadata
with the default StateMetadataEncoding
.
sourcepub fn pack_with_encoding(
self,
encoding: StateMetadataEncoding
) -> Result<Vec<u8>, Error>
pub fn pack_with_encoding( self, encoding: StateMetadataEncoding ) -> Result<Vec<u8>, Error>
Serializes the document for inclusion in an Alias Output’s state metadata.
source§impl IotaDocument
impl IotaDocument
sourcepub fn unpack_from_output(
did: &IotaDID,
alias_output: &AliasOutput,
allow_empty: bool
) -> Result<IotaDocument, Error>
pub fn unpack_from_output( did: &IotaDID, alias_output: &AliasOutput, allow_empty: bool ) -> Result<IotaDocument, Error>
Deserializes the document from an Alias Output.
If allow_empty
is true, this will return an empty DID document marked as deactivated
if state_metadata
is empty.
NOTE: did
is required since it is omitted from the serialized DID Document and
cannot be inferred from the state metadata. It also indicates the network, which is not
encoded in the AliasId
alone.
sourcepub fn unpack_from_block(
network: &NetworkName,
block: &Block
) -> Result<Vec<IotaDocument>, Error>
pub fn unpack_from_block( network: &NetworkName, block: &Block ) -> Result<Vec<IotaDocument>, Error>
Returns all DID documents of the Alias Outputs contained in the block’s transaction payload outputs, if any.
Errors if any Alias Output does not contain a valid or empty DID Document.
source§impl IotaDocument
impl IotaDocument
sourcepub fn revoke_credentials<'query, 'me, Q>(
&mut self,
service_query: Q,
indices: &[u32]
) -> Result<(), Error>where
Q: Into<DIDUrlQuery<'query>>,
pub fn revoke_credentials<'query, 'me, Q>(
&mut self,
service_query: Q,
indices: &[u32]
) -> Result<(), Error>where
Q: Into<DIDUrlQuery<'query>>,
If the document has a RevocationBitmap
service identified by service_query
, revoke all specified indices
.
sourcepub fn unrevoke_credentials<'query, 'me, Q>(
&'me mut self,
service_query: Q,
indices: &[u32]
) -> Result<(), Error>where
Q: Into<DIDUrlQuery<'query>>,
pub fn unrevoke_credentials<'query, 'me, Q>(
&'me mut self,
service_query: Q,
indices: &[u32]
) -> Result<(), Error>where
Q: Into<DIDUrlQuery<'query>>,
If the document has a RevocationBitmap
service with an id by service_query
, unrevoke all specified indices
.
Trait Implementations§
source§impl AsRef<CoreDocument> for IotaDocument
impl AsRef<CoreDocument> for IotaDocument
source§fn as_ref(&self) -> &CoreDocument
fn as_ref(&self) -> &CoreDocument
source§impl Clone for IotaDocument
impl Clone for IotaDocument
source§fn clone(&self) -> IotaDocument
fn clone(&self) -> IotaDocument
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for IotaDocument
impl Debug for IotaDocument
source§impl<'de> Deserialize<'de> for IotaDocument
impl<'de> Deserialize<'de> for IotaDocument
source§fn deserialize<__D>(
__deserializer: __D
) -> Result<IotaDocument, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D
) -> Result<IotaDocument, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
source§impl Display for IotaDocument
impl Display for IotaDocument
source§impl From<IotaDocument> for CoreDocument
impl From<IotaDocument> for CoreDocument
source§fn from(document: IotaDocument) -> CoreDocument
fn from(document: IotaDocument) -> CoreDocument
source§impl From<IotaDocument> for StateMetadataDocument
impl From<IotaDocument> for StateMetadataDocument
source§fn from(document: IotaDocument) -> StateMetadataDocument
fn from(document: IotaDocument) -> StateMetadataDocument
Transforms a IotaDocument
into its state metadata representation by replacing all
occurrences of its did with a placeholder.
source§impl JwkDocumentExt for IotaDocument
impl JwkDocumentExt for IotaDocument
source§fn generate_method<'life0, 'life1, 'life2, 'async_trait, K, I>(
&'life0 mut self,
storage: &'life1 Storage<K, I>,
key_type: KeyType,
alg: JwsAlgorithm,
fragment: Option<&'life2 str>,
scope: MethodScope
) -> Pin<Box<dyn Future<Output = Result<String, JwkStorageDocumentError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
K: JwkStorage + 'async_trait,
I: KeyIdStorage + 'async_trait,
IotaDocument: 'async_trait,
fn generate_method<'life0, 'life1, 'life2, 'async_trait, K, I>(
&'life0 mut self,
storage: &'life1 Storage<K, I>,
key_type: KeyType,
alg: JwsAlgorithm,
fragment: Option<&'life2 str>,
scope: MethodScope
) -> Pin<Box<dyn Future<Output = Result<String, JwkStorageDocumentError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
K: JwkStorage + 'async_trait,
I: KeyIdStorage + 'async_trait,
IotaDocument: 'async_trait,
storage
and insert a new verification method with the corresponding
public key material into the DID document. Read moresource§fn purge_method<'life0, 'life1, 'life2, 'async_trait, K, I>(
&'life0 mut self,
storage: &'life1 Storage<K, I>,
id: &'life2 DIDUrl
) -> Pin<Box<dyn Future<Output = Result<(), JwkStorageDocumentError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
K: JwkStorage + 'async_trait,
I: KeyIdStorage + 'async_trait,
IotaDocument: 'async_trait,
fn purge_method<'life0, 'life1, 'life2, 'async_trait, K, I>(
&'life0 mut self,
storage: &'life1 Storage<K, I>,
id: &'life2 DIDUrl
) -> Pin<Box<dyn Future<Output = Result<(), JwkStorageDocumentError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
K: JwkStorage + 'async_trait,
I: KeyIdStorage + 'async_trait,
IotaDocument: 'async_trait,
id
from the document and delete the corresponding key material in
the given storage
. Read moresource§fn create_jws<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait, K, I>(
&'life0 self,
storage: &'life1 Storage<K, I>,
fragment: &'life2 str,
payload: &'life3 [u8],
options: &'life4 JwsSignatureOptions
) -> Pin<Box<dyn Future<Output = Result<Jws, JwkStorageDocumentError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
K: JwkStorage + 'async_trait,
I: KeyIdStorage + 'async_trait,
IotaDocument: 'async_trait,
fn create_jws<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait, K, I>(
&'life0 self,
storage: &'life1 Storage<K, I>,
fragment: &'life2 str,
payload: &'life3 [u8],
options: &'life4 JwsSignatureOptions
) -> Pin<Box<dyn Future<Output = Result<Jws, JwkStorageDocumentError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
K: JwkStorage + 'async_trait,
I: KeyIdStorage + 'async_trait,
IotaDocument: 'async_trait,
payload
according to options
with the storage backed private key corresponding to the
public key material in the verification method identified by the given `fragment. Read moresource§fn create_credential_jwt<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait, K, I, T>(
&'life0 self,
credential: &'life1 Credential<T>,
storage: &'life2 Storage<K, I>,
fragment: &'life3 str,
options: &'life4 JwsSignatureOptions,
custom_claims: Option<BTreeMap<String, Value>>
) -> Pin<Box<dyn Future<Output = Result<Jwt, JwkStorageDocumentError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
K: JwkStorage + 'async_trait,
I: KeyIdStorage + 'async_trait,
T: ToOwned<Owned = T> + Serialize + DeserializeOwned + Sync + 'async_trait,
IotaDocument: 'async_trait,
fn create_credential_jwt<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait, K, I, T>(
&'life0 self,
credential: &'life1 Credential<T>,
storage: &'life2 Storage<K, I>,
fragment: &'life3 str,
options: &'life4 JwsSignatureOptions,
custom_claims: Option<BTreeMap<String, Value>>
) -> Pin<Box<dyn Future<Output = Result<Jwt, JwkStorageDocumentError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
K: JwkStorage + 'async_trait,
I: KeyIdStorage + 'async_trait,
T: ToOwned<Owned = T> + Serialize + DeserializeOwned + Sync + 'async_trait,
IotaDocument: 'async_trait,
credential
in accordance with VC Data Model v1.1. Read moresource§fn create_presentation_jwt<'life0, 'life1, 'life2, 'life3, 'life4, 'life5, 'async_trait, K, I, CRED, T>(
&'life0 self,
presentation: &'life1 Presentation<CRED, T>,
storage: &'life2 Storage<K, I>,
fragment: &'life3 str,
options: &'life4 JwsSignatureOptions,
jwt_options: &'life5 JwtPresentationOptions
) -> Pin<Box<dyn Future<Output = Result<Jwt, JwkStorageDocumentError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
'life5: 'async_trait,
K: JwkStorage + 'async_trait,
I: KeyIdStorage + 'async_trait,
T: ToOwned<Owned = T> + Serialize + DeserializeOwned + Sync + 'async_trait,
CRED: ToOwned<Owned = CRED> + Serialize + DeserializeOwned + Clone + Sync + 'async_trait,
IotaDocument: 'async_trait,
fn create_presentation_jwt<'life0, 'life1, 'life2, 'life3, 'life4, 'life5, 'async_trait, K, I, CRED, T>(
&'life0 self,
presentation: &'life1 Presentation<CRED, T>,
storage: &'life2 Storage<K, I>,
fragment: &'life3 str,
options: &'life4 JwsSignatureOptions,
jwt_options: &'life5 JwtPresentationOptions
) -> Pin<Box<dyn Future<Output = Result<Jwt, JwkStorageDocumentError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
'life5: 'async_trait,
K: JwkStorage + 'async_trait,
I: KeyIdStorage + 'async_trait,
T: ToOwned<Owned = T> + Serialize + DeserializeOwned + Sync + 'async_trait,
CRED: ToOwned<Owned = CRED> + Serialize + DeserializeOwned + Clone + Sync + 'async_trait,
IotaDocument: 'async_trait,
presentation
in accordance with VC Data Model v1.1. Read moresource§impl PartialEq for IotaDocument
impl PartialEq for IotaDocument
source§fn eq(&self, other: &IotaDocument) -> bool
fn eq(&self, other: &IotaDocument) -> bool
self
and other
values to be equal, and is used
by ==
.source§impl Serialize for IotaDocument
impl Serialize for IotaDocument
source§fn serialize<__S>(
&self,
__serializer: __S
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
source§impl TryFrom<(CoreDocument, IotaDocumentMetadata)> for IotaDocument
impl TryFrom<(CoreDocument, IotaDocumentMetadata)> for IotaDocument
source§fn try_from(
value: (CoreDocument, IotaDocumentMetadata)
) -> Result<IotaDocument, <IotaDocument as TryFrom<(CoreDocument, IotaDocumentMetadata)>>::Error>
fn try_from( value: (CoreDocument, IotaDocumentMetadata) ) -> Result<IotaDocument, <IotaDocument as TryFrom<(CoreDocument, IotaDocumentMetadata)>>::Error>
Converts the tuple into an IotaDocument
if the given CoreDocument
has an identifier satisfying the
requirements of the IOTA UTXO method and the same holds for all of the CoreDocument's
controllers.
§Important
This does not check the relationship between the CoreDocument
and the IotaDocumentMetadata
.
source§impl TryFrom<ProvisionalIotaDocument> for IotaDocument
impl TryFrom<ProvisionalIotaDocument> for IotaDocument
impl Eq for IotaDocument
impl StructuralPartialEq for IotaDocument
Auto Trait Implementations§
impl Freeze for IotaDocument
impl RefUnwindSafe for IotaDocument
impl Send for IotaDocument
impl Sync for IotaDocument
impl Unpin for IotaDocument
impl UnwindSafe for IotaDocument
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.source§impl<T> FromJson for Twhere
T: for<'de> Deserialize<'de>,
impl<T> FromJson for Twhere
T: for<'de> Deserialize<'de>,
source§fn from_json(json: &(impl AsRef<str> + ?Sized)) -> Result<Self, Error>
fn from_json(json: &(impl AsRef<str> + ?Sized)) -> Result<Self, Error>
Self
from a string of JSON text.source§fn from_json_slice(json: &(impl AsRef<[u8]> + ?Sized)) -> Result<Self, Error>
fn from_json_slice(json: &(impl AsRef<[u8]> + ?Sized)) -> Result<Self, Error>
Self
from bytes of JSON text.source§fn from_json_value(json: Value) -> Result<Self, Error>
fn from_json_value(json: Value) -> Result<Self, Error>
Self
from a serde_json::Value
.source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> ToJson for Twhere
T: Serialize,
impl<T> ToJson for Twhere
T: Serialize,
source§fn to_json_value(&self) -> Result<Value, Error>
fn to_json_value(&self) -> Result<Value, Error>
self
as a serde_json::Value
.