using System.Collections.Generic;
using System.Security.Cryptography;
public const string pri_key = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDa+jA9ofHP59WaFgKRC5MovBMqgsfrKK+2+g17oqLB/+ExzSUUi4iiq+Ri2lLa8zaSlj68dJPQATscL01jHcQZ1KxEDJrOKA3/wXXYt/tsSi1RMheusD203Q6PaPXQ2zO+o64OqVljR/uSs1uDjh4cOoIk9H9uCfQhVVrm/GrbSD3/SL3Kx2ud6v7XmR3vjxBDzURnuMlraiLZLWsERzv3AosRkmX+MTcaf5KTXThxm3IkljriZUqlxJgi+64uKJnBStFNlLMzzflEiLHcdRoKV/nSC0EWWyuARAD5NF1ekAzdEalGG8gUYzxNLVZgBIhm0gm4WC41JTDnx2V+JhVzAgMBAAECggEAe/3QlQV++99lJrOxzlmEgTtFivu0oeZO4MfkHI6xpDH0XJOxnFmKC7pTPtoqskmnLAehDGriS5R22PW71xTCtnGi/YE5ouQxURFFXmqHFgFGecRofoTS2/eTyAaBsjp8qUTbSPgBYmMfAylF907go9FJYg2DnlZKgxlmuIZTJ0hLOaglFlXXc6wvW5Qe3TfRaMq9CPBCpLcCUBv8mk5qoTdzAUISIbH7H8Hpvy57Z6KYtVySefg3FhqrQRDaBiaKmMCAIdjuYP28p/ifl0ADOVMFf1562du7oEaRKkJYd8CM9yq8+EXZS1/cPL4SYmwhJiLqRhTNiSUa4s0IPJsaMQKBgQD5kMnMWagUz7UdkSEQlfQrzisPRp70f6UDodFOYjMWVP4WLu6AeCVQjRM4owhLC6U7lvB1aJbnO0aJ4wW5e92sJTWxJ+3QJj6iF9d30fCKJ4H/ccdfn19eWoNZWauT+ZYtabU0izn7gDDyNsioGk8GmE3ZK9+kyQvN2ETf1zyVKwKBgQDgn4ICBBHlKxT1rRGHcGSvkhbdLmuI4L+aVa1UvMTsiSW9o9Iyf/DBgHsxkUuMUEQDWisUuuPCgsw/r+A+ztzepQW+FMVGD+lbGFGdfft70phI/V+6lPtH1sTqQgb4hmSKeAGGTrvmt1R1+OEDZcbsDNZ8sERi1PXWmVLcAtjs2QKBgBDlaZQpOcT27wcqbTenP1m74pRtLpPVFIHzca1B3r2TUYSE9ubBu50BgBykhQo3pp8rL+pzA0xyaesp8JhHN5HRDxqIXoRqInFs9cyJ7SQdWqLFvD7QFm/X5u6ksIYbLryyXG9LQciyPB4Z8WnYJiOHKjYaz1BjwCXWj4ssElDzAoGBAJPyu9DUGW1WSQHgMnGA5/B0Srb4Qj/vuIPQ9s+fXh1l4APeiS5V8p+hHoNxbc9HduS2WTXYOvf86sbv8sWrvvKuwu+GAsG47Tzg8bDIMAJInaFFse3U/wU8QosBXlIHQuWpUWfDKCQ4kFr7yElSmgkUE5ohB4oJNrtYVakv/u1RAoGAeNJS+eV2ITDOdgqGlx+SRcCddQQKBymhG/INSNfNVoq4I2soAKNCLn5GxYLxvjCojYAJ8mHt1f9B3+boWzblpLNTqvFPfaKarLqMfuR7CIng4GxXxBBUW9sZbemCdUQ9mQRpv3p3nIb6wO9jLOIy9sao/44cEXfvgtkRBYsks6w=";
public const string pub_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2vowPaHxz+fVmhYCkQuTKLwTKoLH6yivtvoNe6Kiwf/hMc0lFIuIoqvkYtpS2vM2kpY+vHST0AE7HC9NYx3EGdSsRAyazigN/8F12Lf7bEotUTIXrrA9tN0Oj2j10NszvqOuDqlZY0f7krNbg44eHDqCJPR/bgn0IVVa5vxq20g9/0i9ysdrner+15kd748QQ81EZ7jJa2oi2S1rBEc79wKLEZJl/jE3Gn+Sk104cZtyJJY64mVKpcSYIvuuLiiZwUrRTZSzM835RIix3HUaClf50gtBFlsrgEQA+TRdXpAM3RGpRhvIFGM8TS1WYASIZtIJuFguNSUw58dlfiYVcwIDAQAB";
public static void Main()
var request = "{\"sample\":\"value\",\"sample2\":\"value2\"}&v-c-utc-timestamp=20151026T190357Z&v-c-env=TEST";
using (SHA256 sha256Hash = SHA256.Create())
byte[] payloadBytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(request));
digest = Convert.ToBase64String(payloadBytes);
digest = "SHA-256=" + digest;
StringBuilder signatureString = new StringBuilder();
signatureString.Append('\n');
signatureString.Append("host");
signatureString.Append(": ");
signatureString.Append("apitest.cybersource.com");
signatureString.Append('\n');
signatureString.Append("date");
signatureString.Append(": ");
signatureString.Append("20151026T190357Z");
signatureString.Append('\n');
signatureString.Append("(request-target)");
signatureString.Append(": ");
signatureString.Append("post" + " " + "/pts/v2/payments");
signatureString.Append('\n');
signatureString.Append("digest");
signatureString.Append(": ");
signatureString.Append(digest);
signatureString.Append('\n');
signatureString.Append("v-c-merchant-id");
signatureString.Append(": ");
signatureString.Append(merchantID);
signatureString.Remove(0, 1);
byte[] signatureByteString = Encoding.UTF8.GetBytes(signatureString.ToString());
byte[] decodedKey = Convert.FromBase64String(pri_key);
HMACSHA256 aKeyId = new HMACSHA256(decodedKey);
byte[] hashmessage = aKeyId.ComputeHash(signatureByteString);
string base64EncodedSignature = Convert.ToBase64String(hashmessage);
StringBuilder signatureHeaderValue = new StringBuilder();
signatureHeaderValue.Append("keyid=\"" + merchantKeyId + "\"");
signatureHeaderValue.Append(", algorithm=\"" + algorithm + "\"");
string postHeaders = "host date (request-target) digest v-c-merchant-id";
signatureHeaderValue.Append(", headers=\"" + postHeaders + "\"");
signatureHeaderValue.Append(", signature=\"" + base64EncodedSignature + "\"");
Console.WriteLine(base64EncodedSignature);
private static string merchantKeyId = "08c94330-f618-42a3-b09d-e1e43be5efda";
private static string algorithm = "HmacSHA256";
private static string merchantID = "testrest";