pub struct AuthSingleSigAcl { /* private fields */ }Expand description
An AccountComponent implementing a procedure-based Access Control List (ACL) using either
the EcdsaK256Keccak or Falcon512 Poseidon2 signature scheme for authentication of transactions.
This component provides fine-grained authentication control based on three conditions:
- Procedure-based authentication: Requires authentication when any of the specified trigger procedures are called during the transaction.
- Output note authentication: Controls whether creating output notes requires
authentication. Output notes are new notes created by the account and sent to other accounts
(e.g., when transferring assets). When
allow_unauthorized_output_notesisfalse, any transaction that creates output notes must be authenticated, ensuring account owners control when their account sends assets to other accounts. - Input note authentication: Controls whether consuming input notes requires
authentication. Input notes are notes that were sent to this account by other accounts (e.g.,
incoming asset transfers). When
allow_unauthorized_input_notesisfalse, any transaction that consumes input notes must be authenticated, ensuring account owners control when their account processes incoming notes.
§Authentication Logic
Authentication is required if ANY of the following conditions are true:
- Any trigger procedure from the ACL was called
- Output notes were created AND
allow_unauthorized_output_notesisfalse - Input notes were consumed AND
allow_unauthorized_input_notesisfalse
If none of these conditions are met, only the nonce is incremented without requiring a signature.
§Use Cases
- Restrictive mode (
allow_unauthorized_output_notes=false,allow_unauthorized_input_notes=false): All note operations require authentication, providing maximum security. - Selective mode: Allow some note operations without authentication while protecting specific procedures, useful for accounts that need to process certain operations automatically.
- Procedure-only mode (
allow_unauthorized_output_notes=true,allow_unauthorized_input_notes=true): Only specific procedures require authentication, allowing free note processing.
§Storage Layout
Self::public_key_slot: Public keySelf::config_slot:[num_trigger_procs, allow_unauthorized_output_notes, allow_unauthorized_input_notes, 0]Self::trigger_procedure_roots_slot: A map with trigger procedure roots
§Important Note on Procedure Detection
The procedure-based authentication relies on the was_procedure_called kernel function,
which only returns true if the procedure in question called into a kernel account API
that is restricted to the account context. Procedures that don’t interact with account
state or kernel APIs may not be detected as “called” even if they were executed during
the transaction. This is an important limitation to consider when designing trigger
procedures for authentication.
This component supports all account types.
Implementations§
Source§impl AuthSingleSigAcl
impl AuthSingleSigAcl
Sourcepub const NAME: &'static str = "miden::standards::components::auth::singlesig_acl"
pub const NAME: &'static str = "miden::standards::components::auth::singlesig_acl"
The name of the component.
Sourcepub fn new(
pub_key: PublicKeyCommitment,
auth_scheme: AuthScheme,
config: AuthSingleSigAclConfig,
) -> Result<AuthSingleSigAcl, AccountError>
pub fn new( pub_key: PublicKeyCommitment, auth_scheme: AuthScheme, config: AuthSingleSigAclConfig, ) -> Result<AuthSingleSigAcl, AccountError>
Creates a new AuthSingleSigAcl component with the given public_key and
configuration.
§Panics
Panics if more than AccountCode::MAX_NUM_PROCEDURES procedures are specified.
Sourcepub fn public_key_slot() -> &'static StorageSlotName
pub fn public_key_slot() -> &'static StorageSlotName
Returns the StorageSlotName where the public key is stored.
Sourcepub fn scheme_id_slot() -> &'static StorageSlotName
pub fn scheme_id_slot() -> &'static StorageSlotName
Returns the StorageSlotName where the scheme ID is stored.
Sourcepub fn config_slot() -> &'static StorageSlotName
pub fn config_slot() -> &'static StorageSlotName
Returns the StorageSlotName where the component’s configuration is stored.
Sourcepub fn trigger_procedure_roots_slot() -> &'static StorageSlotName
pub fn trigger_procedure_roots_slot() -> &'static StorageSlotName
Returns the StorageSlotName where the trigger procedure roots are stored.
Sourcepub fn public_key_slot_schema() -> (StorageSlotName, StorageSlotSchema)
pub fn public_key_slot_schema() -> (StorageSlotName, StorageSlotSchema)
Returns the storage slot schema for the public key slot.
Sourcepub fn config_slot_schema() -> (StorageSlotName, StorageSlotSchema)
pub fn config_slot_schema() -> (StorageSlotName, StorageSlotSchema)
Returns the storage slot schema for the configuration slot.
pub fn auth_scheme_slot_schema() -> (StorageSlotName, StorageSlotSchema)
Sourcepub fn trigger_procedure_roots_slot_schema() -> (StorageSlotName, StorageSlotSchema)
pub fn trigger_procedure_roots_slot_schema() -> (StorageSlotName, StorageSlotSchema)
Returns the storage slot schema for the trigger procedure roots slot.
Sourcepub fn component_metadata() -> AccountComponentMetadata
pub fn component_metadata() -> AccountComponentMetadata
Returns the AccountComponentMetadata for this component.
Trait Implementations§
Source§impl From<AuthSingleSigAcl> for AccountComponent
impl From<AuthSingleSigAcl> for AccountComponent
Source§fn from(singlesig_acl: AuthSingleSigAcl) -> AccountComponent
fn from(singlesig_acl: AuthSingleSigAcl) -> AccountComponent
Auto Trait Implementations§
impl Freeze for AuthSingleSigAcl
impl RefUnwindSafe for AuthSingleSigAcl
impl Send for AuthSingleSigAcl
impl Sync for AuthSingleSigAcl
impl Unpin for AuthSingleSigAcl
impl UnsafeUnpin for AuthSingleSigAcl
impl UnwindSafe for AuthSingleSigAcl
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<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> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§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