public TClass ExecuteSymKeyEncryption <TClass>(RestRequest request, string body) where TClass : new() { request.AddHeader("client", DtoGobalSettings.ClientIdentity.Name); request.AddHeader("identifier", DtoGobalSettings.ClientIdentity.Guid); var serviceSetting = new ServiceSetting(); var entropy = serviceSetting.GetSetting("entropy"); var encryptedKey = serviceSetting.GetSetting("encryption_key"); var decryptedKey = ServiceDP.DecryptData(Convert.FromBase64String(encryptedKey.Value), true, Convert.FromBase64String(entropy.Value)); if (!string.IsNullOrEmpty(body)) { var encryptedContent = new ServiceSymmetricEncryption().EncryptData(decryptedKey, body); request.AddParameter("text/xml", encryptedContent, ParameterType.RequestBody); } var deviceThumbprint = new ServiceSetting().GetSetting("device_thumbprint"); var deviceCert = ServiceCertificate.GetCertificateFromStore(deviceThumbprint.Value, StoreName.My); if (deviceCert == null) { return(default(TClass)); } var encryptedCert = new ServiceSymmetricEncryption().EncryptData(decryptedKey, Convert.ToBase64String(deviceCert.RawData)); request.AddHeader("device_cert", Convert.ToBase64String(encryptedCert)); return(SubmitRequest <TClass>(request, decryptedKey)); }
public bool DownloadFile(RestRequest request, string body, string destination) { if (string.IsNullOrEmpty(body)) { throw new ArgumentException("body"); } request.AddHeader("client", DtoGobalSettings.ClientIdentity.Name); request.AddHeader("identifier", DtoGobalSettings.ClientIdentity.Guid); var serviceSetting = new ServiceSetting(); var entropy = serviceSetting.GetSetting("entropy"); var encryptedKey = serviceSetting.GetSetting("encryption_key"); var decryptedKey = ServiceDP.DecryptData(Convert.FromBase64String(encryptedKey.Value), true, Convert.FromBase64String(entropy.Value)); var encryptedContent = new ServiceSymmetricEncryption().EncryptData(decryptedKey, body); request.AddParameter("text/xml", encryptedContent, ParameterType.RequestBody); var deviceThumbprint = new ServiceSetting().GetSetting("device_thumbprint"); var deviceCert = ServiceCertificate.GetCertificateFromStore(deviceThumbprint.Value, StoreName.My); if (deviceCert == null) { return(false); } var encryptedCert = new ServiceSymmetricEncryption().EncryptData(decryptedKey, Convert.ToBase64String(deviceCert.RawData)); request.AddHeader("device_cert", Convert.ToBase64String(encryptedCert)); try { _log.Debug(request.Resource); using (var stream = File.Create(destination, 4096)) { request.ResponseWriter = (responseStream) => responseStream.CopyTo(stream); _client.DownloadData(request); if (stream.Length == 0) { //something went wrong, rest sharp can't display any other info with downloaddata, so we don't know why return(false); } } return(true); } catch (Exception ex) { _log.Error("Could Not Save File: " + destination); _log.Error(ex.Message); return(false); } }
public TClass ExecuteHMAC <TClass>(RestRequest request, string computerName) where TClass : new() { //Calculate UNIX time var epochStart = new DateTime(1970, 01, 01, 0, 0, 0, 0, DateTimeKind.Utc); var timeSpan = DateTime.UtcNow - epochStart; var requestTimeStamp = Convert.ToUInt64(timeSpan.TotalSeconds).ToString(); var nonce = Guid.NewGuid().ToString("N"); var url = HttpUtility.UrlEncode(_client.BaseUrl + request.Resource).ToLower(); var body = request.Parameters.FirstOrDefault(p => p.Type == ParameterType.RequestBody); var requestContentBase64String = string.Empty; if (body != null) { var content = Encoding.ASCII.GetBytes(body.Value.ToString()); var md5 = MD5.Create(); var requestContentHash = md5.ComputeHash(content); requestContentBase64String = Convert.ToBase64String(requestContentHash); } var signatureRawData = string.Format("{0}{1}{2}{3}{4}{5}", computerName, request.Method, url, requestTimeStamp, nonce, requestContentBase64String); var serviceSetting = new ServiceSetting(); var serverKeyEntropy = serviceSetting.GetSetting("server_key_entropy"); var encryptedServerKey = serviceSetting.GetSetting("server_key"); var decryptedServerKey = ServiceDP.DecryptData(Convert.FromBase64String(encryptedServerKey.Value), true, Convert.FromBase64String(serverKeyEntropy.Value)); var signature = Encoding.UTF8.GetBytes(signatureRawData); string requestSignatureBase64String; using (var hmac = new HMACSHA256(decryptedServerKey)) { var signatureBytes = hmac.ComputeHash(signature); requestSignatureBase64String = Convert.ToBase64String(signatureBytes); } request.AddHeader("Authorization", "amx " + string.Format("{0}:{1}:{2}:{3}", computerName, requestSignatureBase64String, nonce, requestTimeStamp)); return(SubmitRequest <TClass>(request)); }