For successful stimulation of this protocol I used several classes that are interconnected for the realization of the project.
The requests and answers that are implemented are explained in the User class in the code in each step separately "Steps".
In my opinion it is not possible to perform a Man-In-The-Middle attack because it is an asymmetric signature and verification, and each exchanged parameter is encrypted / decrypted using a symmetric key.