internal static UriQueryBuilder GetSignature( SharedAccessAccountPolicy policy, string signature, string accountKeyName, string sasVersion) { CommonUtility.AssertNotNull("signature", signature); CommonUtility.AssertNotNull("policy", policy); UriQueryBuilder builder = new UriQueryBuilder(); AddEscapedIfNotNull(builder, Constants.QueryConstants.SignedVersion, sasVersion); AddEscapedIfNotNull(builder, Constants.QueryConstants.SignedKey, accountKeyName); AddEscapedIfNotNull(builder, Constants.QueryConstants.Signature, signature); AddEscapedIfNotNull(builder, Constants.QueryConstants.SignedProtocols, policy.Protocols == null ? null : GetProtocolString(policy.Protocols.Value)); AddEscapedIfNotNull(builder, Constants.QueryConstants.SignedIP, policy.IPAddressOrRange == null ? null : policy.IPAddressOrRange.ToString()); AddEscapedIfNotNull(builder, Constants.QueryConstants.SignedStart, GetDateTimeOrNull(policy.SharedAccessStartTime)); AddEscapedIfNotNull(builder, Constants.QueryConstants.SignedExpiry, GetDateTimeOrNull(policy.SharedAccessExpiryTime)); string resourceTypes = SharedAccessAccountPolicy.ResourceTypesToString(policy.ResourceTypes); if (!string.IsNullOrEmpty(resourceTypes)) { AddEscapedIfNotNull(builder, Constants.QueryConstants.SignedResourceTypes, resourceTypes); } string services = SharedAccessAccountPolicy.ServicesToString(policy.Services); if (!string.IsNullOrEmpty(services)) { AddEscapedIfNotNull(builder, Constants.QueryConstants.SignedServices, services); } string permissions = SharedAccessAccountPolicy.PermissionsToString(policy.Permissions); if (!string.IsNullOrEmpty(permissions)) { AddEscapedIfNotNull(builder, Constants.QueryConstants.SignedPermissions, permissions); } return(builder); }
internal static string GetHash( SharedAccessAccountPolicy policy, string accountName, string sasVersion, byte[] keyValue) { string stringToSign = string.Format( CultureInfo.InvariantCulture, "{0}\n{1}\n{2}\n{3}\n{4}\n{5}\n{6}\n{7}\n{8}\n{9}", accountName, SharedAccessAccountPolicy.PermissionsToString(policy.Permissions), SharedAccessAccountPolicy.ServicesToString(policy.Services), SharedAccessAccountPolicy.ResourceTypesToString(policy.ResourceTypes), GetDateTimeOrEmpty(policy.SharedAccessStartTime), GetDateTimeOrEmpty(policy.SharedAccessExpiryTime), policy.IPAddressOrRange == null ? string.Empty : policy.IPAddressOrRange.ToString(), GetProtocolString(policy.Protocols), sasVersion, string.Empty); Logger.LogVerbose(null /* operationContext */, SR.TraceStringToSign, stringToSign); return(CryptoUtility.ComputeHmac256(keyValue, stringToSign)); }