| Step 1: |
Upon obtaining the message from , the computes , and checks if holds. If this does not true, then session expires. Otherwise, computes and verifies if equals or not. If it holds, then is legal and goes to next step. Otherwise, the session is rejected. |
| Step 2: |
Now, the produces a random nonce and computes , and then sends to via public channel. |
| Step 3: |
After getting request message from , the computes and , then checks if two condition and hold. If both conditions are true then it proceeds further. Otherwise, the session is terminated. |
| Step 4: |
Now, the generates a random nonce and calculates , and then sends to . |
| Step 5: |
Upon obtaining the message from , the computes , and then verifies if two conditions and hold. If both are true, then goes to the next step, Otherwise, the session is terminated. |
| Step 6: |
Now, the generates a random nonce , computes , , and sends to via public channel. |
| Step 7: |
After getting the message from , firstly verifies if holds. If true, the process continues. Otherwise, the session expires. Then, calculates , and , then checks if . If it holds, the next step proceeds. Otherwise, the session is terminated. |
| Step 8: |
The computes and sends to via public channel. |
| Step 9: |
After getting the message from , computes and verifies if holds. If it holds, the next step proceeds. |
| Step 10: |
The calculates =, and checks if holds. If it holds, mutual-authentication and session-key agreement holds. |