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); } }
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); }
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); } }
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); }
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); } } }
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); } } }