private string SignRequest(string containerName, string blockName, string contentMD5, string contentType, string method, IEnumerable<KeyValuePair<string, string>> headers)
{
StringBuilder builder = new StringBuilder();
builder.Append(method);
builder.Append("\n");
builder.Append(contentMD5);
builder.Append("\n");
builder.Append(contentType);
builder.Append("\n\n");
foreach (KeyValuePair<string, string> header in headers.OrderBy(h => h.Key))
{
builder.Append(header.Key.ToLowerInvariant());
builder.Append(":");
builder.Append(header.Value);
builder.Append("\n");
}
builder.Append("/");
if (!string.IsNullOrEmpty(containerName))
{
builder.Append(containerName);
builder.Append("/");
builder.Append(blockName);
}
byte[] signatureBytes;
using (HMACSHA1 algorithm = new HMACSHA1(Encoding.UTF8.GetBytes(_serviceSecret)))
{
signatureBytes = algorithm.ComputeHash(Encoding.UTF8.GetBytes(builder.ToString()));
}
builder = new StringBuilder("AWS ");
builder.Append(_serviceId);
builder.Append(':');
builder.Append(Convert.ToBase64String(signatureBytes));
return builder.ToString();
}