Exemple #1
0
        private void ReadX509CertificateProperties(JsonElement json)
        {
            foreach (JsonProperty prop in json.EnumerateObject())
            {
                switch (prop.Name)
                {
                case SubjectPropertyName:
                    Subject = prop.Value.GetString();
                    break;

                case SansPropertyName:
                    SubjectAlternativeNames = new SubjectAlternativeNames();
                    ((IJsonDeserializable)SubjectAlternativeNames).ReadProperties(prop.Value);
                    break;

                case KeyUsagePropertyName:
                    foreach (JsonElement usageElem in prop.Value.EnumerateArray())
                    {
                        KeyUsage.Add(usageElem.GetString());
                    }
                    break;

                case EkusPropertyName:
                    foreach (JsonElement usageElem in prop.Value.EnumerateArray())
                    {
                        EnhancedKeyUsage.Add(usageElem.GetString());
                    }
                    break;

                case ValidityMonthsPropertyName:
                    ValidityInMonths = prop.Value.GetInt32();
                    break;
                }
            }
        }
Exemple #2
0
        public KeyUsage GetKeyUsage(X509Certificate2 cert)
        {
            if (cert == null || cert.Handle == IntPtr.Zero)
            {
                throw new ArgumentNullException(nameof(cert));
            }

            if (cert.Extensions == null)
            {
                return(KeyUsage.None);
            }

            KeyUsage keyUsage = KeyUsage.None;

            foreach (var extension in cert.Extensions)
            {
                X509EnhancedKeyUsageExtension ekus = extension as X509EnhancedKeyUsageExtension;

                if (ekus != null)
                {
                    foreach (var eku in ekus.EnhancedKeyUsages)
                    {
                        if (EnhancedKeyUsage.ContainsKey(eku.Value))
                        {
                            keyUsage = SetFlag(keyUsage, EnhancedKeyUsage[eku.Value]);
                        }
                    }
                }

                ekus = null;


                X509BasicConstraintsExtension basicConstraintsExtension = extension as X509BasicConstraintsExtension;

                if (basicConstraintsExtension != null)
                {
                    if (basicConstraintsExtension.CertificateAuthority == true)
                    {
                        keyUsage = SetFlag(keyUsage, KeyUsage.CertificateAuthority);
                    }
                }

                basicConstraintsExtension = null;
            }

            return(keyUsage);
        }
Exemple #3
0
        private void WriteX509CertificateProperties(Utf8JsonWriter json)
        {
            if (Subject != null)
            {
                json.WriteString(s_subjectPropertyNameBytes, Subject);
            }

            if (SubjectAlternativeNames != null)
            {
                json.WriteStartObject(s_sansPropertyNameBytes);

                ((IJsonSerializable)SubjectAlternativeNames).WriteProperties(json);

                json.WriteEndObject();
            }

            if (!KeyUsage.IsNullOrEmpty())
            {
                json.WriteStartArray(s_keyUsagePropertyNameBytes);
                foreach (CertificateKeyUsage usage in KeyUsage)
                {
                    json.WriteStringValue(usage.ToString());
                }
                json.WriteEndArray();
            }

            if (!EnhancedKeyUsage.IsNullOrEmpty())
            {
                json.WriteStartArray(s_ekusPropertyNameBytes);
                foreach (var usage in EnhancedKeyUsage)
                {
                    json.WriteStringValue(usage);
                }
                json.WriteEndArray();
            }

            if (ValidityInMonths.HasValue)
            {
                json.WriteNumber(s_validityMonthsPropertyNameBytes, ValidityInMonths.Value);
            }
        }
Exemple #4
0
        void IJsonSerializable.WriteProperties(Utf8JsonWriter json)
        {
            // Key Props
            if (KeyType.HasValue || KeyCurveName.HasValue || KeySize.HasValue)
            {
                json.WriteStartObject(s_keyPropsPropertyNameBytes);

                WriteKeyProperties(json);

                json.WriteEndObject();
            }

            // Secret Props
            if (ContentType.HasValue)
            {
                json.WriteStartObject(s_secretPropsPropertyNameBytes);

                WriteSecretProperties(json);

                json.WriteEndObject();
            }

            // X509 Props
            if (Subject != null || SubjectAlternativeNames != null || !KeyUsage.IsNullOrEmpty() || !EnhancedKeyUsage.IsNullOrEmpty() || ValidityInMonths.HasValue)
            {
                json.WriteStartObject(s_x509PropsPropertyNameBytes);

                WriteX509CertificateProperties(json);

                json.WriteEndObject();
            }

            // Issuer Props
            if (IssuerName != null || CertificateType != null || CertificateTransparency.HasValue)
            {
                json.WriteStartObject(s_issuerPropertyNameBytes);

                WriteIssuerProperties(json);

                json.WriteEndObject();
            }

            if (Enabled.HasValue)
            {
                json.WriteStartObject(s_attributesPropertyNameBytes);

                WriteAttributesProperties(json);

                json.WriteEndObject();
            }

            if (!LifetimeActions.IsNullOrEmpty())
            {
                json.WriteStartArray(s_lifetimeActionsPropertyNameBytes);

                foreach (LifetimeAction action in LifetimeActions)
                {
                    if (action != null)
                    {
                        json.WriteStartObject();

                        ((IJsonSerializable)action).WriteProperties(json);

                        json.WriteEndObject();
                    }
                }

                json.WriteEndArray();
            }
        }