private void HandleSendEncryptionKey(byte[] requester, byte[] requestContent, RouterSocket router, Guid requesterIdentity) { if (_encryptionKeys.ContainsKey(requesterIdentity)) { ErrorMessageSender.SendError(requester, router, ErrorCode.EncryptionKeyAlreadySent); } var encryptionKey = _decryptor.Decrypt(requestContent); StoreEncryptionKey(requesterIdentity, JsonConvert.DeserializeObject <EncryptionKey>(encryptionKey)); var challenge = ChallengeGenerator.Generate(requesterIdentity); var solution = ChallengeSolver.Solve(challenge); SaveSolutionForRequester(requesterIdentity, solution); SendChallenge(requester, requesterIdentity, router, challenge); }
private void HandleChallengeResponse(byte[] requester, byte[] requestContent, RouterSocket router, Guid requesterIdentity) { lock (_solutions) { if (!_solutions.ContainsKey(requesterIdentity)) { ErrorMessageSender.SendError(requester, router, ErrorCode.ChallengeFailed); } } var solutionDecryptedJson = GetDecryptorFor(requesterIdentity).Decrypt(requestContent); if (ChallengeResponseIsCorrect(requesterIdentity, JsonConvert.DeserializeObject <Solution>(solutionDecryptedJson))) { RemoveSolutionForRequester(requesterIdentity); SendAcknowledge(requester, router); return; } RemoveSolutionForRequester(requesterIdentity); ErrorMessageSender.SendError(requester, router, ErrorCode.ChallengeFailed); }