1. Cutomer asks for price and provides session keyThe description of the customer would be as follows, where constants are given in uppercase and variables are given in lowercase followed by their type.
C -> M : {DESC, K}_public(M)2. Merchant replies with price and transaction ID
M -> C : {PRICE, TID}_K3. Customer sends payment information (Cusotmer commit point)
C -> M : {{CC#, PRICE, M, TID}_public(A), TID}_K4. Merchant requests payment authorization (Merchant commit point)
M -> A : {{CC#, PRICE, M, TID}_public(A), PRICE, M, TID}_public(A)5. Authority authorizes payment (Authority commit point)
A -> M : {PRICE, M, TID}_sig(A)6. Merchant supplies receipt
M -> C : {PRICE, M, TID}_sig(A)
send: {DESC, K}_public(M)The lowercase variables are bound during the execution of the protocol when the customer receives a message of the correct type. For example, in step 2, the customer is willing to receive any message consisting of two data items encrypted with the key K. These items are then bound to the respective variables and used throughout the rest of the protocol. The authorize action in step 3 is an internal action used to mark the customer's commit point in the protocol so that the specification can refer to it. The description of the customer and credit card authority are given in a similar fashion.
receive: {price:data, tid:data}_K
authorize: (price:data)
send: {{CC#, price:data, M, tid:data}_public(A), tid:data}_K
receive: {price:data, M, tid:data}_sig(A)