pub struct Authenticator { /* private fields */ }Expand description
The Authenticator is the main component with which users interact with the World ID Protocol.
Implementations§
Source§impl Authenticator
impl Authenticator
Sourcepub fn init_storage(&self, now: u64) -> Result<(), WalletKitError>
pub fn init_storage(&self, now: u64) -> Result<(), WalletKitError>
Initializes storage using the authenticator’s leaf index.
§Errors
Returns an error if the leaf index is invalid or storage initialization fails.
Sourcepub fn destroy_storage(&self) -> Result<(), WalletKitError>
pub fn destroy_storage(&self) -> Result<(), WalletKitError>
Permanently destroys all credential storage data.
Removes the encryption keys, vault database, and cache database. After this call the authenticator can no longer generate proofs or access stored credentials. Intended for logout or account deletion.
§Errors
Returns an error if the storage destruction fails.
Source§impl Authenticator
impl Authenticator
Sourcepub async fn init_with_config(
seed: &[u8],
config: Config,
materials: Arc<Groth16Materials>,
store: Arc<CredentialStore>,
) -> Result<Self, WalletKitError>
pub async fn init_with_config( seed: &[u8], config: Config, materials: Arc<Groth16Materials>, store: Arc<CredentialStore>, ) -> Result<Self, WalletKitError>
Source§impl Authenticator
impl Authenticator
Sourcepub fn packed_account_data(&self) -> Uint256
pub fn packed_account_data(&self) -> Uint256
Returns the packed account data for the holder’s World ID.
The packed account data is a 256 bit integer which includes the user’s leaf index, their recovery counter, and their pubkey id/commitment.
Sourcepub fn leaf_index(&self) -> u64
pub fn leaf_index(&self) -> u64
Returns the leaf index for the holder’s World ID.
This is the index in the Merkle tree where the holder’s World ID account is registered. It should only be used inside the authenticator and never shared.
Sourcepub fn onchain_address(&self) -> String
pub fn onchain_address(&self) -> String
Returns the Authenticator’s onchain_address.
See world_id_core::Authenticator::onchain_address for more details.
Sourcepub async fn get_packed_account_data_remote(
&self,
) -> Result<Uint256, WalletKitError>
pub async fn get_packed_account_data_remote( &self, ) -> Result<Uint256, WalletKitError>
Returns the packed account data for the holder’s World ID fetching it from the on-chain registry.
§Errors
Will error if the provided RPC URL is not valid or if there are RPC call failures.
Sourcepub async fn generate_credential_blinding_factor_remote(
&self,
issuer_schema_id: u64,
) -> Result<FieldElement, WalletKitError>
pub async fn generate_credential_blinding_factor_remote( &self, issuer_schema_id: u64, ) -> Result<FieldElement, WalletKitError>
Generates a blinding factor for a Credential sub (through OPRF Nodes).
See CoreAuthenticator::generate_credential_blinding_factor for more details.
§Errors
- Will generally error if there are network issues or if the OPRF Nodes return an error.
- Raises an error if the OPRF Nodes configuration is not correctly set.
Sourcepub fn compute_credential_sub(
&self,
blinding_factor: &FieldElement,
) -> FieldElement
pub fn compute_credential_sub( &self, blinding_factor: &FieldElement, ) -> FieldElement
Compute the sub for a credential from the authenticator’s leaf index and a blinding_factor.
Sourcepub fn danger_sign_challenge(
&self,
challenge: &[u8],
) -> Result<Vec<u8>, WalletKitError>
pub fn danger_sign_challenge( &self, challenge: &[u8], ) -> Result<Vec<u8>, WalletKitError>
Signs an arbitrary challenge with the authenticator’s on-chain key.
§Warning
This is considered a dangerous operation because it leaks the user’s on-chain key,
hence its leaf_index. The only acceptable use is to prove the user’s leaf_index
to a Recovery Agent. The Recovery Agent is the only party beyond the user who needs
to know the leaf_index.
§Errors
May error if very unexpectedly the signing process fails. Not expected.
Sourcepub async fn danger_sign_initiate_recovery_agent_update(
&self,
new_recovery_agent: String,
) -> Result<RecoveryUpdateSignature, WalletKitError>
pub async fn danger_sign_initiate_recovery_agent_update( &self, new_recovery_agent: String, ) -> Result<RecoveryUpdateSignature, WalletKitError>
Signs the EIP-712 InitiateRecoveryAgentUpdate payload and returns the
raw signature bytes and signing nonce without submitting anything to the
gateway.
This is the signing-only counterpart of Self::initiate_recovery_agent_update.
Callers can use the returned bytes to build and submit the gateway request
themselves.
§Warning
This method uses the onchain_signer (secp256k1 ECDSA) and produces a
recoverable signature. Any holder of the signature together with the
EIP-712 parameters can call ecrecover to obtain the onchain_address,
which can then be looked up in the registry to derive the user’s
leaf_index. Only expose the output to trusted parties (e.g. a Recovery
Agent).
§Arguments
new_recovery_agent— the checksummed hex address of the new recovery agent (e.g."0x1234…").
§Errors
- Returns
WalletKitError::InvalidInputifnew_recovery_agentis not a valid address. - Returns an error if the nonce fetch or signing step fails.
Sourcepub async fn initiate_recovery_agent_update(
&self,
new_recovery_agent: String,
) -> Result<String, WalletKitError>
pub async fn initiate_recovery_agent_update( &self, new_recovery_agent: String, ) -> Result<String, WalletKitError>
Initiates a time-locked recovery agent update (14-day cooldown).
Signs an EIP-712 InitiateRecoveryAgentUpdate payload and submits it to
the gateway. Returns the gateway request ID that can be used to poll
status.
§Arguments
new_recovery_agent— the checksummed hex address of the new recovery agent (e.g."0x1234…").
§Errors
- Returns
WalletKitError::InvalidInputifnew_recovery_agentis not a valid address. - Returns a network error if the gateway request fails.
Sourcepub async fn execute_recovery_agent_update(
&self,
) -> Result<String, WalletKitError>
pub async fn execute_recovery_agent_update( &self, ) -> Result<String, WalletKitError>
Executes a pending recovery agent update after the 14-day cooldown has elapsed.
This call is permissionless — no signature is required. The contract
enforces the cooldown and will revert with
RecoveryAgentUpdateStillInCooldown if called too early.
Returns the gateway request ID that can be used to poll status.
§Errors
Returns a network error if the gateway request fails.
Sourcepub async fn cancel_recovery_agent_update(
&self,
) -> Result<String, WalletKitError>
pub async fn cancel_recovery_agent_update( &self, ) -> Result<String, WalletKitError>
Cancels a pending time-locked recovery agent update before the cooldown expires.
Signs an EIP-712 CancelRecoveryAgentUpdate payload and submits it to
the gateway. Returns the gateway request ID that can be used to poll
status.
§Errors
Returns a network error if the gateway request fails.
Source§impl Authenticator
impl Authenticator
Sourcepub async fn init_with_defaults(
seed: &[u8],
rpc_url: Option<String>,
environment: &Environment,
region: Option<Region>,
materials: Arc<Groth16Materials>,
store: Arc<CredentialStore>,
) -> Result<Self, WalletKitError>
pub async fn init_with_defaults( seed: &[u8], rpc_url: Option<String>, environment: &Environment, region: Option<Region>, materials: Arc<Groth16Materials>, store: Arc<CredentialStore>, ) -> Result<Self, WalletKitError>
Initializes a new Authenticator from a seed and with SDK defaults.
The user’s World ID must already be registered in the WorldIDRegistry,
otherwise a WalletKitError::AccountDoesNotExist error will be returned.
§Errors
See CoreAuthenticator::init for potential errors.
Sourcepub async fn init_with_ohttp_defaults(
seed: &[u8],
rpc_url: Option<String>,
environment: &Environment,
region: Option<Region>,
materials: Arc<Groth16Materials>,
store: Arc<CredentialStore>,
) -> Result<Self, WalletKitError>
pub async fn init_with_ohttp_defaults( seed: &[u8], rpc_url: Option<String>, environment: &Environment, region: Option<Region>, materials: Arc<Groth16Materials>, store: Arc<CredentialStore>, ) -> Result<Self, WalletKitError>
Initializes a new Authenticator from a seed using SDK defaults routed
through the OHTTP relay. Opt-in alternative to
Authenticator::init_with_defaults.
The user’s World ID must already be registered in the WorldIDRegistry,
otherwise a WalletKitError::AccountDoesNotExist error will be returned.
§Errors
See CoreAuthenticator::init for potential errors.
Sourcepub async fn init(
seed: &[u8],
config: &str,
materials: Arc<Groth16Materials>,
store: Arc<CredentialStore>,
) -> Result<Self, WalletKitError>
pub async fn init( seed: &[u8], config: &str, materials: Arc<Groth16Materials>, store: Arc<CredentialStore>, ) -> Result<Self, WalletKitError>
Initializes a new Authenticator from a seed and config.
The user’s World ID must already be registered in the WorldIDRegistry,
otherwise a WalletKitError::AccountDoesNotExist error will be returned.
§Errors
Will error if the provided seed is not valid or if the config is not valid.
Sourcepub async fn generate_proof(
&self,
proof_request: &ProofRequest,
now: Option<u64>,
) -> Result<ProofResponse, WalletKitError>
pub async fn generate_proof( &self, proof_request: &ProofRequest, now: Option<u64>, ) -> Result<ProofResponse, WalletKitError>
Sourcepub async fn prove_credential_sub(
&self,
nonce: &FieldElement,
blinding_factor: &FieldElement,
sub: &FieldElement,
) -> Result<OwnershipProof, WalletKitError>
pub async fn prove_credential_sub( &self, nonce: &FieldElement, blinding_factor: &FieldElement, sub: &FieldElement, ) -> Result<OwnershipProof, WalletKitError>
Generates a WIP-103 Ownership Proof for Issuers.
An Ownership Proof lets the user prove they own the credential sub
associated with a stored credential without revealing their leaf_index.
§Security-critical usage constraint
This method MUST only be called as part of a direct user-initiated action in the client. Callers MUST NOT expose this method to issuer-triggered, backend-triggered, or unauthenticated request flows.
§Arguments
nonce- A field element provided by the Issuer to prevent replay.blinding_factor- The credential blinding factor previously used to derive the credentialsub.sub- The credentialsub(commitment) to prove ownership of.
§Errors
- Returns
WalletKitError::InvalidInputifblinding_factorandsubare inconsistent with each other (i.e.subwas not derived from this authenticator’s leaf index and the provided blinding factor). - Returns a network error if the Merkle inclusion proof cannot be fetched from the indexer.
- Returns
WalletKitError::ProofGenerationif the ZK proof fails.
Trait Implementations§
Source§impl Debug for Authenticator
impl Debug for Authenticator
Source§impl<UT> LiftRef<UT> for Authenticator
impl<UT> LiftRef<UT> for Authenticator
type LiftType = Arc<Authenticator>
Source§impl<UT> LowerError<UT> for Authenticator
impl<UT> LowerError<UT> for Authenticator
Source§fn lower_error(obj: Self) -> RustBuffer
fn lower_error(obj: Self) -> RustBuffer
Source§impl<UT> LowerReturn<UT> for Authenticator
impl<UT> LowerReturn<UT> for Authenticator
Source§type ReturnType = <Arc<Authenticator> as LowerReturn<UniFfiTag>>::ReturnType
type ReturnType = <Arc<Authenticator> as LowerReturn<UniFfiTag>>::ReturnType
Source§fn lower_return(obj: Self) -> Result<Self::ReturnType, RustCallError>
fn lower_return(obj: Self) -> Result<Self::ReturnType, RustCallError>
Source§fn handle_failed_lift(
error: LiftArgsError,
) -> Result<Self::ReturnType, RustCallError>
fn handle_failed_lift( error: LiftArgsError, ) -> Result<Self::ReturnType, RustCallError>
Source§impl<UT> TypeId<UT> for Authenticator
impl<UT> TypeId<UT> for Authenticator
Auto Trait Implementations§
impl !RefUnwindSafe for Authenticator
impl !UnwindSafe for Authenticator
impl Freeze for Authenticator
impl Send for Authenticator
impl Sync for Authenticator
impl Unpin for Authenticator
impl UnsafeUnpin for Authenticator
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T, UT> HandleAlloc<UT> for T
impl<T, UT> HandleAlloc<UT> for T
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> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Layering for T
impl<T> Layering for T
impl<T> MaybeSend for Twhere
T: Send,
Source§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more