示例#1
0
        static String getEntryNameFromIssuer(X509CRL2 crl)
        {
            X500RdnAttributeCollection tokens = crl.IssuerName.GetRdnAttributes();
            String objectName;

            // if subject is empty, calculate SHA1 hash over subject name's raw data (48, 0)
            if (tokens.Count == 0)
            {
                var sb = new StringBuilder();
                using (SHA1 hasher = SHA1.Create()) {
                    foreach (Byte b in hasher.ComputeHash(crl.IssuerName.RawData))
                    {
                        sb.AppendFormat("{0:x2}", b);
                    }
                }
                objectName = sb.ToString();
            }
            else
            {
                objectName = tokens[0].Value;
            }
            var caVersion = (X509CAVersionExtension)crl.Extensions[X509CertExtensions.X509CAVersion];

            if (caVersion == null || caVersion.CAKeyVersion < 1)
            {
                return(objectName);
            }
            return(DsUtils.GetSanitizedName($"{objectName}({caVersion.CAKeyVersion})"));
        }
        /// <summary>
        /// Converts an <see cref="X500DistinguishedName"/> instance in to a collection of individual
        /// RDN attributes.
        /// </summary>
        /// <param name="name">Existing instance of <strong>X500DistinguishedName</strong>.</param>
        /// <returns>A collection of RDN attributes.</returns>
        public static X500RdnAttributeCollection GetRdnAttributes(this X500DistinguishedName name)
        {
            if (name == null)
            {
                throw new ArgumentNullException(nameof(name));
            }
            if (name.RawData == null || name.RawData.Length == 0)
            {
                return(null);
            }
            var retValue = new X500RdnAttributeCollection();

            retValue.Decode(name.RawData);
            return(retValue);
        }
示例#3
0
        // generates DS object name from X.500 name. If name is empty, an SHA-1 hash value of empty name is used.
        static String generateContainerName(X500DistinguishedName name)
        {
            X500RdnAttributeCollection tokens = name.GetRdnAttributes();

            // if subject is empty, calculate SHA1 hash over subject name's raw data (48, 0)
            if (tokens.Count == 0)
            {
                var sb = new StringBuilder();
                using (SHA1 hasher = SHA1.Create()) {
                    foreach (Byte b in hasher.ComputeHash(name.RawData))
                    {
                        sb.AppendFormat("{0:x2}", b);
                    }
                }
                return(sb.ToString());
            }
            return(DsUtils.GetSanitizedName(tokens[0].Value));
        }