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); }
// 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)); }