Documentation

Cedar.Thm.Authorization.Authorizer

This file contains useful lemmas about the Authorizer functions.

theorem Cedar.Thm.if_hasError_then_exists_error {policy : Spec.Policy} {request : Spec.Request} {entities : Spec.Entities} :
Spec.hasError policy request entities = true (err : Spec.Error), Spec.evaluate policy.toExpr request entities = Except.error err
theorem Cedar.Thm.satisfiedPolicies_order_and_dup_independent {policies₁ policies₂ : Spec.Policies} (effect : Spec.Effect) (request : Spec.Request) (entities : Spec.Entities) :
policies₁ policies₂Spec.satisfiedPolicies effect policies₁ request entities = Spec.satisfiedPolicies effect policies₂ request entities
theorem Cedar.Thm.errorPolicies_order_and_dup_independent {policies₁ policies₂ : Spec.Policies} (request : Spec.Request) (entities : Spec.Entities) :
policies₁ policies₂Spec.errorPolicies policies₁ request entities = Spec.errorPolicies policies₂ request entities
theorem Cedar.Thm.satisfied_policies_congr_evaluate {ps : Spec.Policies} {r₁ r₂ : Spec.Request} {es₁ es₂ : Spec.Entities} (effect : Spec.Effect) (heq : ∀ (p : Spec.Policy), p psSpec.evaluate p.toExpr r₁ es₁ = Spec.evaluate p.toExpr r₂ es₂) :
Spec.satisfiedPolicies effect ps r₁ es₁ = Spec.satisfiedPolicies effect ps r₂ es₂
theorem Cedar.Thm.error_policies_congr_evaluate {ps : Spec.Policies} {r₁ r₂ : Spec.Request} {es₁ es₂ : Spec.Entities} (heq : ∀ (p : Spec.Policy), p psSpec.evaluate p.toExpr r₁ es₁ = Spec.evaluate p.toExpr r₂ es₂) :
Spec.errorPolicies ps r₁ es₁ = Spec.errorPolicies ps r₂ es₂
theorem Cedar.Thm.is_authorized_congr_evaluate {ps : Spec.Policies} {r₁ r₂ : Spec.Request} {es₁ es₂ : Spec.Entities} (heq : ∀ (p : Spec.Policy), p psSpec.evaluate p.toExpr r₁ es₁ = Spec.evaluate p.toExpr r₂ es₂) :
Spec.isAuthorized r₁ es₁ ps = Spec.isAuthorized r₂ es₂ ps

an alternate, proved-equivalent, definition of errorPolicies that's easier to prove things about

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    theorem Cedar.Thm.alternate_errorPolicies_equiv_errorPolicies (policies : Spec.Policies) (request : Spec.Request) (entities : Spec.Entities) :
    Spec.errorPolicies policies request entities = alternateErrorPolicies policies request entities
    theorem Cedar.Thm.satisfied_implies_principal_scope {policy : Spec.Policy} {request : Spec.Request} {entities : Spec.Entities} {uid : Spec.EntityUID} :
    Spec.satisfied policy request entities = truepolicy.principalScope.scope.bound = some uidSpec.inₑ request.principal uid entities = true
    theorem Cedar.Thm.satisfied_implies_resource_scope {policy : Spec.Policy} {request : Spec.Request} {entities : Spec.Entities} {uid : Spec.EntityUID} :
    Spec.satisfied policy request entities = truepolicy.resourceScope.scope.bound = some uidSpec.inₑ request.resource uid entities = true
    theorem Cedar.Thm.Except.isOk_iff_exists {ε : Type u_1} {α : Type u_2} {x : Except ε α} :

    Batteries has Option.isSome_iff_exists, but not this analogue for Except

    theorem Cedar.Thm.if_mapM_doesn't_fail_on_list_then_doesn't_fail_on_set {α : Type u_1} {ε : Type u_2} {β : Type u_3} [LT α] [DecidableLT α] [Data.StrictLT α] {f : αExcept ε β} {as : List α} :
    theorem Cedar.Thm.principal_scope_produces_boolean (policy : Spec.Policy) (request : Spec.Request) (entities : Spec.Entities) :
    producesBool policy.principalScope.toExpr request entities

    Lemma: evaluating the principalScope of any policy produces a boolean (and does not error)

    theorem Cedar.Thm.action_scope_produces_boolean (policy : Spec.Policy) (request : Spec.Request) (entities : Spec.Entities) :
    producesBool policy.actionScope.toExpr request entities

    Lemma: evaluating the actionScope of any policy produces a boolean (and does not error)

    theorem Cedar.Thm.resource_scope_produces_boolean (policy : Spec.Policy) (request : Spec.Request) (entities : Spec.Entities) :
    producesBool policy.resourceScope.toExpr request entities

    Lemma: evaluating the resourceScope of any policy produces a boolean (and does not error)

    theorem Cedar.Thm.produces_boolean_means_not_non_boolean {e : Spec.Expr} {request : Spec.Request} {entities : Spec.Entities} :
    producesBool e request entities¬producesNonBool e request entities

    Lemma: if something produces a boolean, it does not produce a non-boolean

    theorem Cedar.Thm.action_scope_does_not_throw (policy : Spec.Policy) (request : Spec.Request) (entities : Spec.Entities) (err : Spec.Error) :
    ¬Spec.evaluate policy.actionScope.toExpr request entities = Except.error err

    For a policy to throw an error, we must have at least gotten past the scope, so the scope constraints must have been satisfied.

    theorem Cedar.Thm.error_implies_principal_scope_in {policy : Spec.Policy} {request : Spec.Request} {entities : Spec.Entities} {uid : Spec.EntityUID} {err : Spec.Error} :
    Spec.evaluate policy.toExpr request entities = Except.error errpolicy.principalScope.scope.bound = some uidSpec.inₑ request.principal uid entities = true

    For a policy to throw an error, we must have at least gotten past the scope, so the scope constraints must have been satisfied.

    theorem Cedar.Thm.error_implies_resource_scope_in {policy : Spec.Policy} {request : Spec.Request} {entities : Spec.Entities} {uid : Spec.EntityUID} {err : Spec.Error} :
    Spec.evaluate policy.toExpr request entities = Except.error errpolicy.resourceScope.scope.bound = some uidSpec.inₑ request.resource uid entities = true

    For a policy to throw an error, we must have at least gotten past the scope, so the scope constraints must have been satisfied.