void initializeFromCOM(IX509CertificateTemplate template)
        {
            if (CryptographyUtils.TestOleCompat())
            {
                GeneralFlags      = (CertificateTemplateFlags)template.Property[EnrollmentTemplateProperty.TemplatePropGeneralFlags];
                EnrollmentOptions = (CertificateTemplateEnrollmentFlags)template.Property[EnrollmentTemplateProperty.TemplatePropEnrollmentFlags];
                subjectFlags      = (Int32)template.Property[EnrollmentTemplateProperty.TemplatePropSubjectNameFlags];
                ValidityPeriod    = readValidity(null, (Int64)template.Property[EnrollmentTemplateProperty.TemplatePropValidityPeriod]);
                RenewalPeriod     = readValidity(null, (Int64)template.Property[EnrollmentTemplateProperty.TemplatePropRenewalPeriod]);
            }
            else
            {
                GeneralFlags      = (CertificateTemplateFlags)Convert.ToInt32((UInt32)template.Property[EnrollmentTemplateProperty.TemplatePropGeneralFlags]);
                EnrollmentOptions = (CertificateTemplateEnrollmentFlags)Convert.ToInt32((UInt32)template.Property[EnrollmentTemplateProperty.TemplatePropEnrollmentFlags]);
                subjectFlags      = unchecked ((Int32)(UInt32)template.Property[EnrollmentTemplateProperty.TemplatePropSubjectNameFlags]);
                ValidityPeriod    = readValidity(null, Convert.ToInt64((UInt64)template.Property[EnrollmentTemplateProperty.TemplatePropValidityPeriod]));
                RenewalPeriod     = readValidity(null, Convert.ToInt64((UInt64)template.Property[EnrollmentTemplateProperty.TemplatePropRenewalPeriod]));
            }
            try {
                SupersededTemplates = (String[])template.Property[EnrollmentTemplateProperty.TemplatePropSupersede];
            } catch {
                SupersededTemplates = Array.Empty <String>();
            }
            List <X509Extension> exts2 = (from IX509Extension ext in (IX509Extensions)template.Property[EnrollmentTemplateProperty.TemplatePropExtensions] select new X509Extension(ext.ObjectId.Value, Convert.FromBase64String(ext.RawData[Interop.CERTENROLLLib.EncodingType.XCN_CRYPT_STRING_BASE64]), ext.Critical)).Select(CryptographyUtils.ConvertExtension).ToList();

            foreach (X509Extension ext in exts2)
            {
                _extensions.Add(ext);
            }
        }
 void initializeFromDsEntry()
 {
     GeneralFlags      = (CertificateTemplateFlags)_entry[DsUtils.PropFlags];
     subjectFlags      = (Int32)_entry[DsUtils.PropPkiSubjectFlags];
     EnrollmentOptions = (CertificateTemplateEnrollmentFlags)_entry[DsUtils.PropPkiEnrollFlags];
     pkf            = (Int32)_entry[DsUtils.PropPkiPKeyFlags];
     ValidityPeriod = readValidity((Byte[])_entry[DsUtils.PropPkiNotAfter]);
     RenewalPeriod  = readValidity((Byte[])_entry[DsUtils.PropPkiRenewalPeriod]);
     pathLength     = (Int32)_entry[DsUtils.PropPkiPathLength];
     if ((EnrollmentOptions & CertificateTemplateEnrollmentFlags.CAManagerApproval) > 0)
     {
         CAManagerApproval = true;
     }
     readEKU();
     readCertPolicies();
     readCriticalExtensions();
     readSuperseded();
     readExtensions();
 }