public void SetRSAParameters(RSAParameters rsa) { //if (this.rsa == null) { this.rsa = rsa; meta = new RSAEncryptingKeyValueStorage (eMeta, rsa); symmetricKeys = new RSAEncryptingKeyValueStorage (eSymmetricKeys, rsa); try { eMeta.Get (System.Text.Encoding.Unicode.GetBytes ("RepositoryConfigurationsKeyID").SHA256 ()); } catch { byte[] id = new byte[32]; byte[] key = new byte[32]; RandomNumberGenerator rng = RandomNumberGenerator.Create (); rng.GetBytes (id); rng.GetBytes (key); symmetricKeys.Put (id, key); meta.Put (System.Text.Encoding.Unicode.GetBytes ("RepositoryConfigurationsKeyID").SHA256 (), id); } if (rsa.InverseQ != null) repositoryConfigurations = new AESEncryptingKeyValueStorage (eRepositoryConfigurations, symmetricKeys.Get (meta.Get (System.Text.Encoding.Unicode.GetBytes ("RepositoryConfigurationsKeyID").SHA256 ()))); //} else // throw new InvalidOperationException (); }
public KeyValueStorage<byte[]> GetStore(string name) { if (stores.ContainsKey (name)) return stores [name]; KeyValueStorage<byte[]> store = new SqliteKeyValueStorage (path, name); System.IO.MemoryStream ms = new System.IO.MemoryStream (repositoryConfigurations.Get (System.Text.Encoding.Unicode.GetBytes (name))); System.Xml.Serialization.XmlSerializer xmls = new System.Xml.Serialization.XmlSerializer (typeof(GenericUserStorageConfiguration)); GenericUserStorageConfiguration gurc = (GenericUserStorageConfiguration)xmls.Deserialize (ms); switch (gurc.EncryptionMehtod) { case EncryptionMethod.AES: store = new AESEncryptingKeyValueStorage (store, symmetricKeys.Get (gurc.AESKeyID)); stores.Add (name, store); return store; case EncryptionMethod.RSA: store = new RSAEncryptingKeyValueStorage (store, rsa.Value); stores.Add (name, store); return store; case EncryptionMethod.None: stores.Add (name, store); return store; default: throw new NotSupportedException ("Specified encryption method is not supported."); } }