edge-util/src/Microsoft.Azure.Devices.Edge.Util/SharedAccessKeySignatureProvider.cs (27 lines of code) (raw):
// Copyright (c) Microsoft. All rights reserved.
namespace Microsoft.Azure.Devices.Edge.Util
{
using System;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
public class SharedAccessKeySignatureProvider : ISignatureProvider
{
readonly string sasKey;
public SharedAccessKeySignatureProvider(string sasKey)
{
this.sasKey = Preconditions.CheckNonWhiteSpace(sasKey, nameof(sasKey));
}
public Task<string> SignAsync(string data)
{
string token = Sign(data, this.sasKey);
return Task.FromResult(token);
}
static string Sign(string requestString, string key)
{
using (var algorithm = new HMACSHA256(Convert.FromBase64String(key)))
{
return Convert.ToBase64String(algorithm.ComputeHash(Encoding.UTF8.GetBytes(requestString)));
}
}
}
}