Beispiel #1
0
        internal KeyContainerPermission BuildKeyContainerPermission(KeyContainerPermissionFlags flags)
        {
            KeyContainerPermission permission = null;

            if (this.IsEphemeral)
            {
                return(permission);
            }
            string keyContainerName = null;
            string str2             = null;

            try
            {
                keyContainerName = this.KeyName;
                str2             = NCryptNative.GetPropertyAsString(this.m_kspHandle, "Name", CngPropertyOptions.None);
            }
            catch (CryptographicException)
            {
            }
            if (keyContainerName != null)
            {
                KeyContainerPermissionAccessEntry accessEntry = new KeyContainerPermissionAccessEntry(keyContainerName, flags)
                {
                    ProviderName = str2
                };
                permission = new KeyContainerPermission(KeyContainerPermissionFlags.NoFlags);
                permission.AccessEntries.Add(accessEntry);
                return(permission);
            }
            return(new KeyContainerPermission(flags));
        }
Beispiel #2
0
        internal string GetCurveName()
        {
            if (IsECNamedCurve())
            {
                return(NCryptNative.GetPropertyAsString(
                           m_keyHandle,
                           KeyPropertyName.ECCCurveName,
                           CngPropertyOptions.None));
            }

            // Use hard-coded values (for use with pre-Win10 APIs)
            return(GetECSpecificCurveName());
        }
Beispiel #3
0
        internal KeyContainerPermission BuildKeyContainerPermission(KeyContainerPermissionFlags flags)
        {
            Contract.Ensures(Contract.Result <KeyContainerPermission>() != null || IsEphemeral);
            Contract.Assert(m_keyHandle != null);
            Contract.Assert(m_kspHandle != null);

            KeyContainerPermission permission = null;

            if (!IsEphemeral)
            {
                // Try to get the name of the key and ksp to demand for this specific instance
                string keyName = null;
                string kspName = null;
                try {
                    keyName = KeyName;
                    kspName = NCryptNative.GetPropertyAsString(m_kspHandle,
                                                               NCryptNative.ProviderPropertyName.Name,
                                                               CngPropertyOptions.None);
                }
                catch (CryptographicException) { /* This may have been an imported ephemeral key */ }

                if (keyName != null)
                {
                    KeyContainerPermissionAccessEntry access = new KeyContainerPermissionAccessEntry(keyName, flags);
                    access.ProviderName = kspName;

                    permission = new KeyContainerPermission(KeyContainerPermissionFlags.NoFlags);
                    permission.AccessEntries.Add(access);
                }
                else
                {
                    permission = new KeyContainerPermission(flags);
                }
            }

            return(permission);
        }