@startuml
autonumber

participant "BPA" as BPA
participant "BSL" as BSL
participant "Policy Provider" as Policy
participant "Security Context" as SC
participant "Crypto Library" as Crypto

activate BPA #dcebff
BPA -> BSL : query security
activate BSL #dcebff
loop each provider
    BSL -> Policy : query

    activate Policy #dcebff
    Policy -> BPA : [as needed]\nget data

    activate BPA #dcebff
    BPA --> Policy
    deactivate BPA

    ||5||

    Policy --> BSL : action set
    ||5||
    deactivate Policy
end
BSL --> BPA : action set
deactivate BSL

||20||

BPA -> BSL : apply security
activate BSL #dcebff

loop each action
    loop each secop
        BSL -> SC : validate secop
        activate SC #dcebff
        ||10||
        SC --> BSL
        deactivate SC
    end

    alt all validated

        loop each secop

            BSL -> SC : run secop
            activate SC #dcebff

            SC -> BPA : [as needed]\nget data
            activate BPA #dcebff
            BPA --> SC
            deactivate BPA

            SC -> Crypto : [as needed]\ncrypto functions
            activate Crypto #dcebff
            ||10||
            Crypto --> SC
            deactivate Crypto

            SC -> BPA : [as needed]\nalter bundle
            activate BPA #dcebff
            deactivate BPA

            SC --> BSL : secop outcome
            ||5||
            deactivate SC
        end
    else any validation failed
        BSL -> BSL : action failed
    end
end
BSL --> BPA : action outcomes
deactivate BSL

||20||

loop each action
    BPA -> BSL : finalize
    activate BSL #dcebff

    BSL -> BSL : lookup PP

    BSL -> Policy : finalize
    activate Policy #dcebff

    Policy -> BPA : [as needed]\nalter bundle
    activate BPA #dcebff
    deactivate BPA

    Policy --> BSL
    deactivate Policy

    BSL --> BPA
    deactivate BSL
    ||5||
end

||10||

@enduml