CustomerProvidedKey
Wrapper for an encryption key to be used with client provided key server-side encryption.
using System;
using System.Runtime.CompilerServices;
using System.Security.Cryptography;
namespace Azure.Storage.Blobs.Models
{
public readonly struct CustomerProvidedKey : IEquatable<CustomerProvidedKey>
{
public string EncryptionKey { get; }
public string EncryptionKeyHash { get; }
public EncryptionAlgorithmType EncryptionAlgorithm { get; }
public CustomerProvidedKey(string key)
{
EncryptionKey = key;
EncryptionAlgorithm = EncryptionAlgorithmType.Aes256;
using (SHA256 sHA = SHA256.Create()) {
byte[] inArray = sHA.ComputeHash(Convert.FromBase64String(key));
EncryptionKeyHash = Convert.ToBase64String(inArray);
}
}
public CustomerProvidedKey(byte[] key)
{
this = new CustomerProvidedKey(Convert.ToBase64String(key));
}
public override bool Equals(object obj)
{
if (obj is CustomerProvidedKey) {
CustomerProvidedKey other = (CustomerProvidedKey)obj;
return Equals(other);
}
return false;
}
public override int GetHashCode()
{
return EncryptionKey.GetHashCode() ^ EncryptionKeyHash.GetHashCode() ^ EncryptionAlgorithm.GetHashCode();
}
public static bool operator ==(CustomerProvidedKey left, CustomerProvidedKey right)
{
return left.Equals(right);
}
public static bool operator !=(CustomerProvidedKey left, CustomerProvidedKey right)
{
return !(left == right);
}
public bool Equals(CustomerProvidedKey other)
{
if (EncryptionKey == other.EncryptionKey && EncryptionKeyHash == other.EncryptionKeyHash)
return EncryptionAlgorithm == other.EncryptionAlgorithm;
return false;
}
public override string ToString()
{
DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(8, 7);
defaultInterpolatedStringHandler.AppendLiteral("[");
defaultInterpolatedStringHandler.AppendFormatted("CustomerProvidedKey");
defaultInterpolatedStringHandler.AppendLiteral(":");
defaultInterpolatedStringHandler.AppendFormatted("EncryptionKey");
defaultInterpolatedStringHandler.AppendLiteral("=");
defaultInterpolatedStringHandler.AppendFormatted(EncryptionKey);
defaultInterpolatedStringHandler.AppendLiteral(";");
defaultInterpolatedStringHandler.AppendFormatted("EncryptionKeyHash");
defaultInterpolatedStringHandler.AppendLiteral("=");
defaultInterpolatedStringHandler.AppendFormatted(EncryptionKeyHash);
defaultInterpolatedStringHandler.AppendLiteral(";");
defaultInterpolatedStringHandler.AppendFormatted("EncryptionAlgorithm");
defaultInterpolatedStringHandler.AppendLiteral("=");
defaultInterpolatedStringHandler.AppendFormatted(EncryptionAlgorithm);
defaultInterpolatedStringHandler.AppendLiteral("]");
return defaultInterpolatedStringHandler.ToStringAndClear();
}
}
}