コード例 #1
0
        public TResponse Send <TResponse>(string httpMethod, object request)
        {
            byte[] cryptKey, authKey, iv;
            AesUtils.CreateCryptAuthKeysAndIv(out cryptKey, out authKey, out iv);

            try
            {
                var encryptedMessage = CreateEncryptedMessage(request, request.GetType().Name, cryptKey, authKey, iv, httpMethod);
                var encResponse      = Client.Send(encryptedMessage);

                var authEncryptedBytes = Convert.FromBase64String(encResponse.EncryptedBody);

                if (!HmacUtils.Verify(authEncryptedBytes, authKey))
                {
                    throw new Exception("Invalid EncryptedBody");
                }

                var decryptedBytes = HmacUtils.DecryptAuthenticated(authEncryptedBytes, cryptKey);

                var responseJson = decryptedBytes.FromUtf8Bytes();
                var response     = JsonServiceClient.FromJson <TResponse>(responseJson);

                return(response);
            }
            catch (WebServiceException ex)
            {
                throw DecryptedException(ex, cryptKey, authKey);
            }
        }
コード例 #2
0
        public WebServiceException DecryptedException(WebServiceException ex, byte[] cryptKey, byte[] authKey)
        {
            //Encrypted Messsage Exceptions are always written with 400 BadRequest
            if (ex.StatusCode != (int)HttpStatusCode.BadRequest)
            {
                if (ex.ResponseStatus == null)
                {
                    ex.ResponseDto = JsonServiceClient.FromJson <ErrorResponse>(ex.ResponseBody);
                }

                return(ex);
            }

            var encResponse = ex.ResponseDto as EncryptedMessageResponse;

            if (encResponse != null)
            {
                var authEncryptedBytes = Convert.FromBase64String(encResponse.EncryptedBody);
                if (!HmacUtils.Verify(authEncryptedBytes, authKey))
                {
                    throw new Exception("EncryptedBody is Invalid");
                }

                var responseBytes = HmacUtils.DecryptAuthenticated(authEncryptedBytes, cryptKey);
                var responseJson  = responseBytes.FromUtf8Bytes();
                var errorResponse = JsonServiceClient.FromJson <ErrorResponse>(responseJson);

                ex.ResponseDto = errorResponse;
            }

            return(ex);
        }
コード例 #3
0
        public List <TResponse> SendAll <TResponse>(IEnumerable <object> requests)
        {
            byte[] cryptKey, authKey, iv;
            AesUtils.CreateCryptAuthKeysAndIv(out cryptKey, out authKey, out iv);

            try
            {
                var elType           = requests.GetType().GetCollectionType();
                var encryptedMessage = CreateEncryptedMessage(requests, elType.Name + "[]", cryptKey, authKey, iv);
                var encResponse      = Client.Send(encryptedMessage);

                var authEncryptedBytes = Convert.FromBase64String(encResponse.EncryptedBody);

                if (!HmacUtils.Verify(authEncryptedBytes, authKey))
                {
                    throw new Exception("Invalid EncryptedBody");
                }

                var decryptedBytes = HmacUtils.DecryptAuthenticated(authEncryptedBytes, cryptKey);

                var responseJson = decryptedBytes.FromUtf8Bytes();
                var response     = JsonServiceClient.FromJson <List <TResponse> >(responseJson);

                return(response);
            }
            catch (WebServiceException ex)
            {
                throw DecryptedException(ex, cryptKey, authKey);
            }
        }
コード例 #4
0
        public WebServiceException DecryptedException(WebServiceException ex, SymmetricAlgorithm aes)
        {
            var encResponse = ex.ResponseDto as EncryptedMessageResponse;

            if (encResponse != null)
            {
                var responseJson  = AesUtils.Decrypt(encResponse.EncryptedBody, aes.Key, aes.IV);
                var errorResponse = JsonServiceClient.FromJson <ErrorResponse>(responseJson);
                ex.ResponseDto = errorResponse;
            }

            return(ex);
        }
コード例 #5
0
        public TResponse Send <TResponse>(string httpMethod, object request)
        {
            using (var aes = new AesManaged {
                KeySize = AesUtils.KeySize
            })
            {
                try
                {
                    var encryptedMessage = CreateEncryptedMessage(request, request.GetType().Name, aes, httpMethod);
                    var encResponse      = Client.Send(encryptedMessage);

                    var responseJson = AesUtils.Decrypt(encResponse.EncryptedBody, aes.Key, aes.IV);
                    var response     = JsonServiceClient.FromJson <TResponse>(responseJson);

                    return(response);
                }
                catch (WebServiceException ex)
                {
                    throw DecryptedException(ex, aes);
                }
            }
        }
コード例 #6
0
        public List <TResponse> SendAll <TResponse>(IEnumerable <IReturn <TResponse> > requests)
        {
            using (var aes = new AesManaged {
                KeySize = AesUtils.KeySize
            })
            {
                try
                {
                    var elType           = requests.GetType().GetCollectionType();
                    var encryptedMessage = CreateEncryptedMessage(requests, elType.Name + "[]", aes);
                    var encResponse      = Client.Send(encryptedMessage);

                    var responseJson = AesUtils.Decrypt(encResponse.EncryptedBody, aes.Key, aes.IV);
                    var response     = JsonServiceClient.FromJson <List <TResponse> >(responseJson);

                    return(response);
                }
                catch (WebServiceException ex)
                {
                    throw DecryptedException(ex, aes);
                }
            }
        }