Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }