| Step 1: |
Upon obtaining the message from , the checks if holds. If this does not true then session expires. Otherwise, calculates and computes , then verifies if equals or not. If this holds, goes to next step. Otherwise, the session is rejected. |
| Step 2: |
Now, generates a random nonce and computes a new , where = Then, computes =⊕, , and ⊕ and sends to via public channel. |
| Step 3: |
After getting the request message from , the checks if holds. If this does not true then session expires. Otherwise, calculates and , then checks if holds. If the condition is true then it proceeds further. Otherwise, the session is terminated. |
| Step 4: |
Now, the generates a random nonce , calculates = and , then sends to . |
| Step 5: |
Upon obtaining the message from , the checks if holds. If this does not true then session expires. Otherwise, calculates , and . Then, verifies if holds. If the condition is true then it proceeds further. Otherwise, the session is terminated. |
| Step 6: |
Now, the generates a random nonce , computes , and . Then, sends to . |
| Step 7: |
Upon receiving the message from , firstly verifies if holds. If this is not true then the session expires. Otherwise, calculates , and , then checks if holds. If the condition is true then further is proceeded. Otherwise, the session is terminated. |
| Step 8: |
The computes and . Then, sends to . |
| Step 9: |
Upon receiving the message from , firstly verifies if holds. If this does not true then session expires. Otherwise, computes =⊕, =, , and verifies if holds. If the condition is true then mutual authentication and session key agreement holds. Otherwise, the session is terminated. |
| Step 10: |
The computes and . Then, replaces with , , , respectively. |