コード例 #1
0
ファイル: IAMKey.cs プロジェクト: radtek/safeid
        public static X509Certificate GenerateLicense(CertificateAuthority ca, Uri installCode, Boolean isServerKey, UInt32 numLic, Boolean isTemp, DateTime?tempDate)
        {
            String installKey = null;
            Uri    license    = null;

            System.Reflection.Assembly asm = null;
            FileInfo p12File = null;

            try
            {
                String[] iParts = installCode.AbsolutePath.Trim("/".ToCharArray()).Split("/".ToCharArray());

                IAMVersion version = IAMVersion.v100;
                switch (iParts[0].ToLower())
                {
                case "v1":
                case "v100":
                    version = IAMVersion.v100;
                    break;

                default:
                    throw new Exception("Install code version unrecognized");
                    break;
                }

                installKey = String.Join("/", iParts, 1, iParts.Length - 1);

                //Em caso de licença com data de expiração, adiciona 20 horas no tempo para evitar problemas com fuso
                tempDate += TimeSpan.FromHours(20);

                license = new Uri("license://safeid/" + version.ToString() + "/" + GeraKey(installKey, isServerKey, numLic, isTemp, tempDate, version));

                try
                {
                    CertificateAuthority.subjectAltName alt = new CertificateAuthority.subjectAltName();
                    alt.Uri.Add(installCode);
                    alt.Uri.Add(license);

                    String pkcs12Cert = ca.SignCert("SafeID IAM License", false, alt, false, (isTemp && tempDate.HasValue ? tempDate.Value : DateTime.Now + TimeSpan.FromDays(36500)));

                    return(CATools.GetX509CertFromPKCS12(Convert.FromBase64String(pkcs12Cert), ca.SignedPassword));
                }
                finally
                {
                    try
                    {
                        File.Delete(p12File.FullName);
                        File.Delete(p12File.FullName.Replace(p12File.Extension, ".cer"));
                    }
                    catch { }

                    p12File = null;
                    asm     = null;
                }
            }
            finally
            {
                installKey = null;
            }
        }