static public bool InstallCertificate(byte[] data) { if (ContainsLoadedCert(data) == true) { return(true); } string CertFolder = SystemInfos.ProgramData + "Certificates\\"; FilesystemCertificateData cer = new FilesystemCertificateData(); for (int i = 1; i < 100; i++) { if (File.Exists(CertFolder + "Certificate" + i.ToString("00") + ".cer") == false) { File.WriteAllBytes(CertFolder + "Certificate" + i.ToString("00") + ".cer", data); byte[] d = ApplicationCertificate.Sign(data); if (d != null) { File.WriteAllBytes(CertFolder + "Certificate" + i.ToString("00") + ".sign", d); } FoxEventLog.WriteEventLog("Certificate " + Certificates.GetCN(data) + " installed as ID=" + i.ToString("00"), System.Diagnostics.EventLogEntryType.Information); cer.FSFilename = "Certificate" + i.ToString("00") + ".cer"; cer.Certificate = data; break; } } LoadedCertificates.Add(cer); FoxEventLog.WriteEventLog("Certificate " + Certificates.GetCN(data) + " loaded", System.Diagnostics.EventLogEntryType.Information); return(true); }
static public bool LoadCertificates(bool Shutup = false) { LoadedCertificates = new List <FilesystemCertificateData>(); string CertFolder = SystemInfos.ProgramData + "Certificates\\"; if (Directory.Exists(CertFolder) == false) { Directory.CreateDirectory(CertFolder); } for (int i = 1; i < 100; i++) { if (File.Exists(CertFolder + "Certificate" + i.ToString("00") + ".cer") == false) { if (File.Exists(CertFolder + "Certificate" + i.ToString("00") + ".sign") == true) { FoxEventLog.WriteEventLog("Found lonely file \"Certificate" + i.ToString("00") + ".sign\" - deleting the file", System.Diagnostics.EventLogEntryType.Warning); File.Delete(CertFolder + "Certificate" + i.ToString("00") + ".sign"); } } else { if (File.Exists(CertFolder + "Certificate" + i.ToString("00") + ".sign") == false) { FoxEventLog.WriteEventLog("Found \"Certificate" + i.ToString("00") + ".cer\" but no signature - deleting the file", System.Diagnostics.EventLogEntryType.Warning); File.Delete(CertFolder + "Certificate" + i.ToString("00") + ".cer"); } else { FileInfo file; file = new FileInfo(CertFolder + "Certificate" + i.ToString("00") + ".cer"); if (file.Length > 5242880) { FoxEventLog.WriteEventLog("File \"Certificate" + i.ToString("00") + ".cer\" too large (>5MB) - deleting the files", System.Diagnostics.EventLogEntryType.Warning); File.Delete(CertFolder + "Certificate" + i.ToString("00") + ".cer"); File.Delete(CertFolder + "Certificate" + i.ToString("00") + ".sign"); continue; } file = new FileInfo(CertFolder + "Certificate" + i.ToString("00") + ".sign"); if (file.Length > 5242880) { FoxEventLog.WriteEventLog("File \"Certificate" + i.ToString("00") + ".sign\" too large (>5MB) - deleting the files", System.Diagnostics.EventLogEntryType.Warning); File.Delete(CertFolder + "Certificate" + i.ToString("00") + ".cer"); File.Delete(CertFolder + "Certificate" + i.ToString("00") + ".sign"); continue; } byte[] cert = File.ReadAllBytes(CertFolder + "Certificate" + i.ToString("00") + ".cer"); byte[] sign = File.ReadAllBytes(CertFolder + "Certificate" + i.ToString("00") + ".sign"); if (ApplicationCertificate.Verify(cert, sign) == false) { FoxEventLog.WriteEventLog("File \"Certificate" + i.ToString("00") + ".cer\" and \"Certificate" + i.ToString("00") + ".sign\" do not match - deleting the files", System.Diagnostics.EventLogEntryType.Warning); File.Delete(CertFolder + "Certificate" + i.ToString("00") + ".cer"); File.Delete(CertFolder + "Certificate" + i.ToString("00") + ".sign"); continue; } if (ContainsLoadedCert(cert) == true) { FoxEventLog.WriteEventLog("File \"Certificate" + i.ToString("00") + ".cer\" this certificate is already loaded from a different file - deleting the files", System.Diagnostics.EventLogEntryType.Warning); File.Delete(CertFolder + "Certificate" + i.ToString("00") + ".cer"); File.Delete(CertFolder + "Certificate" + i.ToString("00") + ".sign"); continue; } Debug.WriteLine(CertFolder + "Certificate" + i.ToString("00") + ".cer loaded"); FilesystemCertificateData fscer = new FilesystemCertificateData(); fscer.FSFilename = "Certificate" + i.ToString("00") + ".cer"; fscer.Certificate = cert; LoadedCertificates.Add(fscer); if (Shutup == false) { FoxEventLog.WriteEventLog("Certificate " + Certificates.GetCN(cert) + " loaded", System.Diagnostics.EventLogEntryType.Information); } } } } return(true); }