2003-11-08 Sebastien Pouliot <spouliot@videotron.ca>
authorSebastien Pouliot <sebastien@ximian.com>
Sat, 8 Nov 2003 23:59:59 +0000 (23:59 -0000)
committerSebastien Pouliot <sebastien@ximian.com>
Sat, 8 Nov 2003 23:59:59 +0000 (23:59 -0000)
* ICertificateStore.cs: Interface for certificate stores.
* FileCertificateStore.cs: File-based certificate stores using SPC (PKCS7) files.

svn path=/trunk/mcs/; revision=19747

mcs/class/Mono.Security/Mono.Security.X509.Stores/ChangeLog [new file with mode: 0755]
mcs/class/Mono.Security/Mono.Security.X509.Stores/FileCertificateStore.cs [new file with mode: 0755]
mcs/class/Mono.Security/Mono.Security.X509.Stores/ICertificateStore.cs [new file with mode: 0755]

diff --git a/mcs/class/Mono.Security/Mono.Security.X509.Stores/ChangeLog b/mcs/class/Mono.Security/Mono.Security.X509.Stores/ChangeLog
new file mode 100755 (executable)
index 0000000..a343904
--- /dev/null
@@ -0,0 +1,4 @@
+2003-11-08  Sebastien Pouliot  <spouliot@videotron.ca>
+
+       * ICertificateStore.cs: Interface for certificate stores.
+       * FileCertificateStore.cs: File-based certificate stores using SPC (PKCS7) files.
diff --git a/mcs/class/Mono.Security/Mono.Security.X509.Stores/FileCertificateStore.cs b/mcs/class/Mono.Security/Mono.Security.X509.Stores/FileCertificateStore.cs
new file mode 100755 (executable)
index 0000000..70f0785
--- /dev/null
@@ -0,0 +1,97 @@
+//
+// FileCertificateStore.cs: Handles a file-based certificate store.
+//
+// Author:
+//     Sebastien Pouliot (spouliot@motus.com)
+//
+// (C) 2003 Motus Technologies Inc. (http://www.motus.com)
+//
+
+using System;
+using System.IO;
+
+using Mono.Security.Authenticode;
+using Mono.Security.X509;
+using Mono.Security.X509.Stores;
+
+namespace Mono.Security.X509.Stores {
+
+       public class FileCertificateStore : ICertificateStore {
+
+               private string _name;
+               private string _location;
+               private bool _readOnly;
+               private bool _createIfRequired;
+               private bool _includeArchives;
+               private bool _saveOnClose;
+               private SoftwarePublisherCertificate _spc;
+
+               public FileCertificateStore ()
+               {
+                       _readOnly = true;
+                       _includeArchives = false;
+                       _createIfRequired = true;
+               }
+
+               // properties
+
+               public X509CertificateCollection Certificates {
+                       get { 
+                               if (_spc != null)
+                                       return _spc.Certificates; 
+                               return null;
+                       }
+               }
+                
+               public IntPtr Handle {
+                       get { return (IntPtr) 0; }
+               }
+
+               // methods
+
+               public void Open (string name, string location, bool readOnly, bool createIfNonExisting, bool includeArchives) 
+               {
+                       _name = name;
+                       _location = _location;
+                       _readOnly = readOnly;
+                       _createIfRequired = createIfNonExisting;
+                       _includeArchives = includeArchives;
+                       _saveOnClose = false;
+
+                       if (File.Exists (_name)) {
+                               _spc = SoftwarePublisherCertificate.CreateFromFile (_name);
+                       }
+                       else if (_createIfRequired) {
+                               _spc = new SoftwarePublisherCertificate ();
+                               _saveOnClose = true;
+                       }
+               }
+
+               public void Close () 
+               {
+                       if (_saveOnClose) {
+                               byte[] store = _spc.GetBytes ();
+                               using (FileStream fs = File.OpenWrite (_name)) {
+                                       fs.Write (store, 0, store.Length);
+                                       fs.Close ();
+                               }
+                       }
+               }
+               
+               public void Add (X509Certificate certificate) 
+               {
+                       if ((!_readOnly) && (_spc != null)) {
+                               _spc.Certificates.Add (certificate);
+                               _saveOnClose = true;
+                       }
+               }
+               
+               public void Remove (X509Certificate certificate) 
+               {
+                       if ((!_readOnly) && (_spc != null)) {
+                               _spc.Certificates.Remove (certificate);
+                               _saveOnClose = true;
+                       }
+               }
+       }
+}
diff --git a/mcs/class/Mono.Security/Mono.Security.X509.Stores/ICertificateStore.cs b/mcs/class/Mono.Security/Mono.Security.X509.Stores/ICertificateStore.cs
new file mode 100755 (executable)
index 0000000..983bc74
--- /dev/null
@@ -0,0 +1,30 @@
+//
+// ICertificateStore.cs: Interface for certificate stores.
+//
+// Author:
+//     Sebastien Pouliot (spouliot@motus.com)
+//
+// (C) 2003 Motus Technologies Inc. (http://www.motus.com)
+//
+
+using System;
+using Mono.Security.X509;
+
+namespace Mono.Security.X509.Stores {
+
+       public interface ICertificateStore {
+
+               // properties
+
+               X509CertificateCollection Certificates { get; }
+               IntPtr Handle { get; }
+
+               // methods
+
+               void Open (string name, string location, bool readOnly, bool createIfNonExisting, bool includeArchives);
+               void Close ();
+               
+               void Add (X509Certificate certificate);
+               void Remove (X509Certificate certificate);
+       }
+}