public CertificateString(string certificateString)
{
if (string.IsNullOrEmpty(certificateString))
throw new ArgumentNullException("certificateString");
_certificateString = certificateString;
// FIXME: Allow escaped semicolon caracters (ie. \; or semicolons between quotes "...;...")
var list = certificateString.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
foreach (var item in list)
{
// FIXME: Allow escaped equals caracters (ie. \= or between quotes "...=...")
var tmp = item.Split(new[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
if (tmp.Count() != 2)
throw new ArgumentException("Malformed certificate string property '{0}' has no property name (missing '=')");
_entries[tmp[0]] = tmp[1];
}
if (_entries.ContainsKey("StoreName"))
StoreName = (StoreName)Enum.Parse(typeof(StoreName), _entries["StoreName"]);
if (_entries.ContainsKey("StoreLocation"))
StoreLocation = (StoreLocation)Enum.Parse(typeof(StoreLocation), _entries["StoreLocation"]);
// TODO: Check invalid find by combinations.
if (_entries.ContainsKey("X509FindType"))
X509FindType = (X509FindType)Enum.Parse(typeof(X509FindType), _entries["X509FindType"]);
if (_entries.ContainsKey("X509FindBy"))
X509FindBy = (X509FindBy)Enum.Parse(typeof(X509FindBy), _entries["X509FindBy"]);
if (_entries.ContainsKey("X509FindValue"))
X509FindValue = _entries["X509FindValue"];
if (_entries.ContainsKey("Thumbprint"))
{
X509FindType = SysX509.X509FindType.FindByThumbprint;
X509FindValue = _entries["Thumbprint"];
}
if (_entries.ContainsKey("KeyContainerName"))
KeyContainerName = _entries["KeyContainerName"];
}