File: Algorithm.cs
Web Access
Project: src\src\Microsoft.DotNet.StrongName\Microsoft.DotNet.StrongName.csproj (Microsoft.DotNet.StrongName)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
namespace Microsoft.DotNet.StrongName
{
    internal static class Algorithm
    {
        /// <summary>
        /// Adapted from roslyn's CryptoBlobParser
        /// </summary>
        internal enum AlgorithmClass
        {
            Signature = 1,
            Hash = 4,
        }
 
        /// <summary>
        /// Adapted from roslyn's CryptoBlobParser
        /// </summary>
        internal enum AlgorithmSubId
        {
            Sha1Hash = 4,
            // Other possible values ommitted
        }
 
        /// <summary>
        /// Adapted from roslyn's CryptoBlobParser
        /// </summary>
        internal struct AlgorithmId
        {
            // From wincrypt.h
            private const int AlgorithmClassOffset = 13;
            private const int AlgorithmClassMask = 0x7;
            private const int AlgorithmSubIdOffset = 0;
            private const int AlgorithmSubIdMask = 0x1ff;
 
            private readonly uint _flags;
 
            internal const int RsaSign = 0x00002400;
            internal const int Sha = 0x00008004;
 
            internal bool IsSet
            {
                get { return _flags != 0; }
            }
 
            internal AlgorithmClass Class
            {
                get { return (AlgorithmClass)((_flags >> AlgorithmClassOffset) & AlgorithmClassMask); }
            }
 
            internal AlgorithmSubId SubId
            {
                get { return (AlgorithmSubId)((_flags >> AlgorithmSubIdOffset) & AlgorithmSubIdMask); }
            }
 
            internal AlgorithmId(uint flags)
            {
                _flags = flags;
            }
        }
    }
}