/// <summary>
        /// Initializes a new instance of the <see cref="IsolatedStorageBackingStore"/> class given the configuration data
        /// </summary>
        /// <param name="configurationView">An <see cref="CachingConfigurationView"></see> object</param>
        public override void Initialize(ConfigurationView configurationView)
        {
            ArgumentValidation.CheckForNullReference(configurationView, "configurationView");
            ArgumentValidation.CheckExpectedType(configurationView, typeof(CachingConfigurationView));

            CachingConfigurationView        cachingConfigurationView  = (CachingConfigurationView)configurationView;
            IsolatedStorageCacheStorageData isoStoreConfigurationData = (IsolatedStorageCacheStorageData)cachingConfigurationView.GetCacheStorageDataForCacheManager(CurrentCacheManager);

            if (isoStoreConfigurationData.PartitionName == null)
            {
                throw new ConfigurationException(SR.IsolatedStoreAreaNameNullException(isoStoreConfigurationData.Name));
            }

            if (isoStoreConfigurationData.PartitionName.Length == 0)
            {
                throw new ConfigurationException(SR.IsolatedStoreAreaNameEmptyException(isoStoreConfigurationData.Name));
            }

            this.storageAreaName = isoStoreConfigurationData.PartitionName;

            if (isoStoreConfigurationData.StorageEncryption != null)
            {
                StorageEncryptionFactory encryptionFactory = new StorageEncryptionFactory(cachingConfigurationView.ConfigurationContext);
                this.encryptionProvider = encryptionFactory.CreateSymmetricProvider(CurrentCacheManager);
            }

            Initialize();
        }
		public IsolatedStorageBackingStore(string storageAreaName, IStorageEncryptionProvider encryptionProvider)
		{
			if (string.IsNullOrEmpty(storageAreaName)) throw new ArgumentException(Resources.ExceptionStorageAreaNullOrEmpty, "storageAreaName");
			this.storageAreaName = storageAreaName;
			this.encryptionProvider = encryptionProvider;
			Initialize();
		}
        private void NullEncryptorTests(string instanceName)
        {
            MockStorageEncryptionProvider.Encrypted = false;
            MockStorageEncryptionProvider.Decrypted = false;

            CacheManagerSettings          settings               = (CacheManagerSettings)TestConfigurationSource.GenerateConfiguration().GetSection(CacheManagerSettings.SectionName);
            CacheStorageData              cacheStorageData       = settings.BackingStores.Get(settings.CacheManagers.Get(instanceName).CacheStorage);
            StorageEncryptionProviderData encryptionProviderData = settings.EncryptionProviders.Get(cacheStorageData.StorageEncryption);

            IStorageEncryptionProvider provider =
                EnterpriseLibraryFactory.BuildUp <IStorageEncryptionProvider>(encryptionProviderData.Name, TestConfigurationSource.GenerateConfiguration());

            Assert.IsNotNull(provider);

            byte[] input     = new byte[] { 0, 1, 2, 3, 4, 5 };
            byte[] encrypted = provider.Encrypt(input);

            Assert.IsTrue(MockStorageEncryptionProvider.Encrypted, "static encrypted");

            Assert.IsTrue(CompareBytes(input, encrypted), "no encryption performed");

            byte[] decrypted = provider.Decrypt(encrypted);
            Assert.IsTrue(MockStorageEncryptionProvider.Decrypted, "static decrypted");

            Assert.IsTrue(CompareBytes(encrypted, decrypted), "no decryption performed");
            Assert.IsTrue(CompareBytes(input, decrypted), "no decryption performed2");
        }
Exemplo n.º 4
0
 /// <summary>
 /// This is public purely for unit testing purposes and should never be called by application code
 /// </summary>
 /// <param name="database">Database to use for persistence</param>
 /// <param name="databasePartitionName">Partition name in database</param>
 /// <param name="encryptionProvider">Provider used for encryption</param>
 public DataBackingStore(Data.Database database,
                         string databasePartitionName,
                         IStorageEncryptionProvider encryptionProvider)
 {
     this.database           = database;
     partitionName           = databasePartitionName;
     this.encryptionProvider = encryptionProvider;
 }
 /// <summary>
 /// This is public purely for unit testing purposes and should never be called by application code
 /// </summary>
 /// <param name="database">Database to use for persistence</param>
 /// <param name="databasePartitionName">Partition name in database</param>
 /// <param name="encryptionProvider">Provider used for encryption</param>
 public DataBackingStore(Data.Database database,
                         string databasePartitionName,
                         IStorageEncryptionProvider encryptionProvider)
 {
     this.database = database;
     partitionName = databasePartitionName;
     this.encryptionProvider = encryptionProvider;
 }
Exemplo n.º 6
0
 public IsolatedStorageCacheItemField(IsolatedStorageFile storage, string fieldName,
                                      string fileSystemLocation, IStorageEncryptionProvider encryptionProvider)
 {
     this.fieldName          = fieldName;
     this.fileSystemLocation = fileSystemLocation;
     this.storage            = storage;
     this.encryptionProvider = encryptionProvider;
 }
 /// <summary>
 /// Instance constructor
 /// </summary>
 /// <param name="storage">IsolatedStorage area to use. May not be null.</param>
 /// <param name="fieldName">Name of the file in which the field value is stored. May not be null.</param>
 /// <param name="fileSystemLocation">Complete path to directory where file specified in fieldName is to be found. May not be null.</param>
 /// <param name="encryptionProvider">Encryption provider</param>
 public IsolatedStorageCacheItemField(IsolatedStorageFile storage, string fieldName,
                                      string fileSystemLocation, IStorageEncryptionProvider encryptionProvider)
 {
     this.fieldName = fieldName;
     this.fileSystemLocation = fileSystemLocation;
     this.storage = storage;
     this.encryptionProvider = encryptionProvider;
 }
        public void AttemptingToReadEncryptedDataWithoutDecryptingThrowsException()
        {
            StorageEncryptionFactory factory = new StorageEncryptionFactory(Context);

            IStorageEncryptionProvider encryptionProvider     = factory.CreateSymmetricProvider(CacheManagerName);
            DataBackingStore           encryptingBackingStore = new DataBackingStore(db, "encryptionTests", encryptionProvider);

            encryptingBackingStore.Add(new CacheItem("key", "value", CacheItemPriority.Normal, new MockRefreshAction(), new AlwaysExpired()));
            Hashtable dataInCache = unencryptedBackingStore.Load();
        }
 public IsolatedStorageBackingStore(string storageAreaName, IStorageEncryptionProvider encryptionProvider)
 {
     if (string.IsNullOrEmpty(storageAreaName))
     {
         throw new ArgumentException(Resources.ExceptionStorageAreaNullOrEmpty, "storageAreaName");
     }
     this.storageAreaName    = storageAreaName;
     this.encryptionProvider = encryptionProvider;
     Initialize();
 }
        /// <summary>
        /// Instance constructor. Ensures that the storage location in Isolated Storage is prepared
        /// for reading and writing. This class stores each individual field of the CacheItem into its own
        /// file inside the directory specified by itemDirectoryRoot.
        /// </summary>
        /// <param name="storage">Isolated Storage area to use. May not be null.</param>
        /// <param name="itemDirectoryRoot">Complete path in Isolated Storage where the cache item should be stored. May not be null.</param>
        /// <param name="encryptionProvider">Encryption provider</param>
        public IsolatedStorageCacheItem(IsolatedStorageFile storage, string itemDirectoryRoot, IStorageEncryptionProvider encryptionProvider)
        {
            storage.CreateDirectory(itemDirectoryRoot);

            keyField = new IsolatedStorageCacheItemField(storage, "Key", itemDirectoryRoot, encryptionProvider);
            valueField = new IsolatedStorageCacheItemField(storage, "Val", itemDirectoryRoot, encryptionProvider);
            scavengingPriorityField = new IsolatedStorageCacheItemField(storage, "ScPr", itemDirectoryRoot, encryptionProvider);
            refreshActionField = new IsolatedStorageCacheItemField(storage, "RA", itemDirectoryRoot, encryptionProvider);
            expirationsField = new IsolatedStorageCacheItemField(storage, "Exp", itemDirectoryRoot, encryptionProvider);
            lastAccessedField = new IsolatedStorageCacheItemField(storage, "LA", itemDirectoryRoot, encryptionProvider);
        }
Exemplo n.º 11
0
        public void AttemptingToReadEncryptedDataWithoutDecryptingThrowsException()
        {
            IStorageEncryptionProvider encryptionProvider = null;

            encryptionProvider = EnterpriseLibraryFactory.BuildUp <IStorageEncryptionProvider>("Fred");

            DataBackingStore encryptingBackingStore = new DataBackingStore(db, "encryptionTests", encryptionProvider);

            encryptingBackingStore.Add(new CacheItem("key", "value", CacheItemPriority.Normal, new MockRefreshAction(), new AlwaysExpired()));
            Hashtable dataInCache = unencryptedBackingStore.Load();
        }
Exemplo n.º 12
0
        static void TestReadEncryptionProvider(IStorageProvider provider, IStorageEncryptionProvider encryptionProvider, byte[] iv)
        {
            var path       = "testfolder\\testencryption990.jpeg";
            var file       = provider.GetFile(path);
            var streamRead = file.OpenCryptoRead(encryptionProvider, iv);

            FileStream fs = new FileStream(@"..\..\TestDecryptFile990.jpeg",
                                           FileMode.OpenOrCreate,
                                           FileAccess.Write);

            CopyStream(streamRead, fs);
        }
        public IBackingStore Assemble(IBuilderContext context, CacheStorageData objectConfiguration, IConfigurationSource configurationSource, ConfigurationReflectionCache reflectionCache)
        {
            IsolatedStorageCacheStorageData castedObjectConfiguration
                = (IsolatedStorageCacheStorageData)objectConfiguration;
            IStorageEncryptionProvider encryptionProvider
                = GetStorageEncryptionProvider(context, castedObjectConfiguration.StorageEncryption, configurationSource, reflectionCache);
            IBackingStore createdObject
                = new IsolatedStorageBackingStore(
                      castedObjectConfiguration.PartitionName,
                      encryptionProvider);

            return(createdObject);
        }
        /// <summary>
        /// Instance constructor. Ensures that the storage location in Isolated Storage is prepared
        /// for reading and writing. This class stores each individual field of the CacheItem into its own
        /// file inside the directory specified by itemDirectoryRoot.
        /// </summary>
        /// <param name="storage">Isolated Storage area to use. May not be null.</param>
        /// <param name="itemDirectoryRoot">Complete path in Isolated Storage where the cache item should be stored. May not be null.</param>
        /// <param name="encryptionProvider">Encryption provider</param>
        public IsolatedStorageCacheItem(IsolatedStorageFile storage, string itemDirectoryRoot, IStorageEncryptionProvider encryptionProvider)
        {
			if (storage.GetDirectoryNames(itemDirectoryRoot).Length == 0)
			{
				// avoid creating if already exists - work around for partial trust
				storage.CreateDirectory(itemDirectoryRoot);
			}

            keyField = new IsolatedStorageCacheItemField(storage, "Key", itemDirectoryRoot, encryptionProvider);
            valueField = new IsolatedStorageCacheItemField(storage, "Val", itemDirectoryRoot, encryptionProvider);
            scavengingPriorityField = new IsolatedStorageCacheItemField(storage, "ScPr", itemDirectoryRoot, encryptionProvider);
            refreshActionField = new IsolatedStorageCacheItemField(storage, "RA", itemDirectoryRoot, encryptionProvider);
            expirationsField = new IsolatedStorageCacheItemField(storage, "Exp", itemDirectoryRoot, encryptionProvider);
            lastAccessedField = new IsolatedStorageCacheItemField(storage, "LA", itemDirectoryRoot, encryptionProvider);
        }
Exemplo n.º 15
0
        static void TestWriteEncryptionProvider(IStorageProvider provider, IStorageEncryptionProvider encryptionProvider, byte[] iv)
        {
            byte[]     buff     = new byte[0];
            var        fileName = pathToTestFile;
            FileStream fs       = new FileStream(fileName,
                                                 FileMode.Open,
                                                 FileAccess.Read);

            var path = "testfolder\\testencryption990.jpeg";

            provider.DeleteFile(path);
            var file        = provider.CreateFile(path);
            var streamWrite = file.OpenCryptoWrite(encryptionProvider, iv);

            CopyStream(fs, streamWrite);
        }
        public void DecryptedDataCanBeReadBackFromDatabase()
        {
            StorageEncryptionFactory factory = new StorageEncryptionFactory(Context);

            IStorageEncryptionProvider encryptionProvider     = factory.CreateSymmetricProvider(CacheManagerName);
            DataBackingStore           encryptingBackingStore = new DataBackingStore(db, "encryptionTests", encryptionProvider);

            encryptingBackingStore.Add(new CacheItem("key", "value", CacheItemPriority.Normal, new MockRefreshAction(), new AlwaysExpired()));
            Hashtable dataInCache = encryptingBackingStore.Load();

            CacheItem retrievedItem = (CacheItem)dataInCache["key"];

            Assert.AreEqual("key", retrievedItem.Key);
            Assert.AreEqual("value", retrievedItem.Value);
            Assert.AreEqual(CacheItemPriority.Normal, retrievedItem.ScavengingPriority);
            Assert.AreEqual(typeof(MockRefreshAction), retrievedItem.RefreshAction.GetType());
            Assert.AreEqual(typeof(AlwaysExpired), retrievedItem.Expirations[0].GetType());
        }
Exemplo n.º 17
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DataBackingStore"/> class
        /// with the specified configuration information.
        /// </summary>
        /// <param name="configurationView">A <see cref="CachingConfigurationView"></see> object</param>
        /// <exception cref="System.Configuration.ConfigurationException">Reflects any failures to read configuration information</exception>
        /// <remarks>Other exceptions thrown depend on the implementation of the underlying database.</remarks>
        public override void Initialize(ConfigurationView configurationView)
        {
            ArgumentValidation.CheckForNullReference(configurationView, "configurationView");
            ArgumentValidation.CheckExpectedType(configurationView, typeof(CachingConfigurationView));

            CachingConfigurationView cachingConfigurationView = (CachingConfigurationView)configurationView;
            DataCacheStorageData     dataConfiguration        = (DataCacheStorageData)cachingConfigurationView.GetCacheStorageDataForCacheManager(CurrentCacheManager);

            partitionName = dataConfiguration.PartitionName;
            DatabaseProviderFactory dataFactory = new DatabaseProviderFactory(cachingConfigurationView.ConfigurationContext);

            database = dataFactory.CreateDatabase(dataConfiguration.DatabaseInstanceName);
            if (dataConfiguration.StorageEncryption != null)
            {
                StorageEncryptionFactory encryptionFactory = new StorageEncryptionFactory(cachingConfigurationView.ConfigurationContext);
                encryptionProvider = encryptionFactory.CreateSymmetricProvider(CurrentCacheManager);
            }
        }
        private CacheItem DoCacheItemRoundTripToStorage(CacheItem itemToStore, bool encrypted)
        {
            IStorageEncryptionProvider encryptionProvider = null;

            if (encrypted)
            {
                encryptionProvider = new MockStorageEncryptionProvider();
            }

            string itemRoot = DirectoryRoot + itemToStore.Key;

            IsolatedStorageCacheItem item = new IsolatedStorageCacheItem(storage, itemRoot, encryptionProvider);

            item.Store(itemToStore);

            IsolatedStorageCacheItem itemToRead = new IsolatedStorageCacheItem(storage, itemRoot, encryptionProvider);

            return(itemToRead.Load());
        }
Exemplo n.º 19
0
        /// <summary>
        /// This method supports the Enterprise Library infrastructure and is not intended to be used directly from your code.
        /// Builds an <see cref="DataBackingStore"/> based on an instance of <see cref="DataCacheStorageData"/>.
        /// </summary>
        /// <seealso cref="BackingStoreCustomFactory"/>
        /// <param name="context">The <see cref="IBuilderContext"/> that represents the current building process.</param>
        /// <param name="objectConfiguration">The configuration object that describes the object to build. Must be an instance of <see cref="DataCacheStorageData"/>.</param>
        /// <param name="configurationSource">The source for configuration objects.</param>
        /// <param name="reflectionCache">The cache to use retrieving reflection information.</param>
        /// <returns>A fully initialized instance of <see cref="DataBackingStore"/>.</returns>
        public IBackingStore Assemble(IBuilderContext context, CacheStorageData objectConfiguration, IConfigurationSource configurationSource, ConfigurationReflectionCache reflectionCache)
        {
            DataCacheStorageData castedObjectConfiguration
                = (DataCacheStorageData)objectConfiguration;

            Data.Database database
                = (Data.Database)context.HeadOfChain.BuildUp(context, typeof(Data.Database), null, castedObjectConfiguration.DatabaseInstanceName);

            IStorageEncryptionProvider encryptionProvider
                = GetStorageEncryptionProvider(context, castedObjectConfiguration.StorageEncryption, configurationSource, reflectionCache);

            IBackingStore createdObjet
                = new DataBackingStore(
                      database,
                      castedObjectConfiguration.PartitionName,
                      encryptionProvider);

            return(createdObjet);
        }
Exemplo n.º 20
0
        public void DecryptedDataCanBeReadBackFromDatabase()
        {
            IStorageEncryptionProvider encryptionProvider = null;

            encryptionProvider = EnterpriseLibraryFactory.BuildUp <IStorageEncryptionProvider>("Fred");

            DataBackingStore encryptingBackingStore = new DataBackingStore(db, "encryptionTests", encryptionProvider);

            encryptingBackingStore.Add(new CacheItem("key", "value", CacheItemPriority.Normal, new MockRefreshAction(), new AlwaysExpired()));
            Hashtable dataInCache = encryptingBackingStore.Load();

            CacheItem retrievedItem = (CacheItem)dataInCache["key"];

            Assert.AreEqual("key", retrievedItem.Key);
            Assert.AreEqual("value", retrievedItem.Value);
            Assert.AreEqual(CacheItemPriority.Normal, retrievedItem.ScavengingPriority);
            Assert.AreEqual(typeof(MockRefreshAction), retrievedItem.RefreshAction.GetType());
            Assert.AreEqual(typeof(AlwaysExpired), retrievedItem.GetExpirations()[0].GetType());
        }
Exemplo n.º 21
0
        private void NullEncryptorTests(string instanceName)
        {
            MockStorageEncryptionProvider.Encrypted = false;
            MockStorageEncryptionProvider.Decrypted = false;
            CacheManagerSettings settings = (CacheManagerSettings)Context.GetConfiguration(CacheManagerSettings.SectionName);

            StorageEncryptionFactory   factory  = new StorageEncryptionFactory(Context);
            IStorageEncryptionProvider provider = factory.CreateSymmetricProvider(settings.CacheManagers[instanceName].Name);

            Assert.IsNotNull(provider);

            byte[] input     = new byte[] { 0, 1, 2, 3, 4, 5 };
            byte[] encrypted = provider.Encrypt(input);

            Assert.IsTrue(MockStorageEncryptionProvider.Encrypted, "static encrypted");

            Assert.IsTrue(CompareBytes(input, encrypted), "no encryption performed");

            byte[] decrypted = provider.Decrypt(encrypted);
            Assert.IsTrue(MockStorageEncryptionProvider.Decrypted, "static decrypted");

            Assert.IsTrue(CompareBytes(encrypted, decrypted), "no decryption performed");
            Assert.IsTrue(CompareBytes(input, decrypted), "no decryption performed2");
        }
Exemplo n.º 22
0
 public Stream OpenCryptoWrite(IStorageEncryptionProvider encryptionProvider, byte[] iv)
 {
     return(encryptionProvider.Encrypt(_blob.OpenWriteAsync().Result, iv));
 }
Exemplo n.º 23
0
        /// <summary>
        /// Instance constructor. Ensures that the storage location in Isolated Storage is prepared
        /// for reading and writing. This class stores each individual field of the CacheItem into its own
        /// file inside the directory specified by itemDirectoryRoot.
        /// </summary>
        /// <param name="storage">Isolated Storage area to use. May not be null.</param>
        /// <param name="itemDirectoryRoot">Complete path in Isolated Storage where the cache item should be stored. May not be null.</param>
        /// <param name="encryptionProvider">Encryption provider</param>
        public IsolatedStorageCacheItem(IsolatedStorageFile storage, string itemDirectoryRoot, IStorageEncryptionProvider encryptionProvider)
        {
            if (storage.GetDirectoryNames(itemDirectoryRoot).Length == 0)
            {
                // avoid creating if already exists - work around for partial trust
                storage.CreateDirectory(itemDirectoryRoot);
            }

            keyField   = new IsolatedStorageCacheItemField(storage, "Key", itemDirectoryRoot, encryptionProvider);
            valueField = new IsolatedStorageCacheItemField(storage, "Val", itemDirectoryRoot, encryptionProvider);
            scavengingPriorityField = new IsolatedStorageCacheItemField(storage, "ScPr", itemDirectoryRoot, encryptionProvider);
            refreshActionField      = new IsolatedStorageCacheItemField(storage, "RA", itemDirectoryRoot, encryptionProvider);
            expirationsField        = new IsolatedStorageCacheItemField(storage, "Exp", itemDirectoryRoot, encryptionProvider);
            lastAccessedField       = new IsolatedStorageCacheItemField(storage, "LA", itemDirectoryRoot, encryptionProvider);
        }
Exemplo n.º 24
0
        /// <summary>
        /// Instance constructor. Ensures that the storage location in Isolated Storage is prepared
        /// for reading and writing. This class stores each individual field of the CacheItem into its own
        /// file inside the directory specified by itemDirectoryRoot.
        /// </summary>
        /// <param name="storage">Isolated Storage area to use. May not be null.</param>
        /// <param name="itemDirectoryRoot">Complete path in Isolated Storage where the cache item should be stored. May not be null.</param>
        /// <param name="encryptionProvider">Encryption provider</param>
        public IsolatedStorageCacheItem(IsolatedStorageFile storage, string itemDirectoryRoot, IStorageEncryptionProvider encryptionProvider)
        {
            storage.CreateDirectory(itemDirectoryRoot);

            keyField   = new IsolatedStorageCacheItemField(storage, "Key", itemDirectoryRoot, encryptionProvider);
            valueField = new IsolatedStorageCacheItemField(storage, "Val", itemDirectoryRoot, encryptionProvider);
            scavengingPriorityField = new IsolatedStorageCacheItemField(storage, "ScPr", itemDirectoryRoot, encryptionProvider);
            refreshActionField      = new IsolatedStorageCacheItemField(storage, "RA", itemDirectoryRoot, encryptionProvider);
            expirationsField        = new IsolatedStorageCacheItemField(storage, "Exp", itemDirectoryRoot, encryptionProvider);
            lastAccessedField       = new IsolatedStorageCacheItemField(storage, "LA", itemDirectoryRoot, encryptionProvider);
        }
        public IsolatedStorageCacheItem(IsolatedStorageFile storage, string itemDirectoryRoot, IStorageEncryptionProvider encryptionProvider)
        {
            int retriesLeft = MaxRetries;

            while (true)
            {
                try
                {
                    storage.CreateDirectory(itemDirectoryRoot);
                    using (IsolatedStorageFileStream fileStream =
                               new IsolatedStorageFileStream(itemDirectoryRoot + @"\sanity-check.txt", FileMode.Create, FileAccess.Write, FileShare.None, storage))
                    { }
                    break;
                }
                catch (UnauthorizedAccessException)
                {
                    if (retriesLeft-- > 0)
                    {
                        Thread.Sleep(RetryDelayInMilliseconds);
                        continue;
                    }
                    throw;
                }
                catch (DirectoryNotFoundException)
                {
                    if (retriesLeft-- > 0)
                    {
                        Thread.Sleep(RetryDelayInMilliseconds);
                        continue;
                    }
                    throw;
                }
            }
            keyField   = new IsolatedStorageCacheItemField(storage, "Key", itemDirectoryRoot, encryptionProvider);
            valueField = new IsolatedStorageCacheItemField(storage, "Val", itemDirectoryRoot, encryptionProvider);
            scavengingPriorityField = new IsolatedStorageCacheItemField(storage, "ScPr", itemDirectoryRoot, encryptionProvider);
            refreshActionField      = new IsolatedStorageCacheItemField(storage, "RA", itemDirectoryRoot, encryptionProvider);
            expirationsField        = new IsolatedStorageCacheItemField(storage, "Exp", itemDirectoryRoot, encryptionProvider);
            lastAccessedField       = new IsolatedStorageCacheItemField(storage, "LA", itemDirectoryRoot, encryptionProvider);
        }
Exemplo n.º 26
0
        /// <summary>
        /// Initializes a new instance of the <see cref="IsolatedStorageBackingStore"/> class given the configuration data
        /// </summary>
        /// <param name="configurationView">An <see cref="CachingConfigurationView"></see> object</param>
        public override void Initialize(ConfigurationView configurationView)
        {
            ArgumentValidation.CheckForNullReference(configurationView, "configurationView");
            ArgumentValidation.CheckExpectedType(configurationView, typeof (CachingConfigurationView));

            CachingConfigurationView cachingConfigurationView = (CachingConfigurationView) configurationView;
            IsolatedStorageCacheStorageData isoStoreConfigurationData = (IsolatedStorageCacheStorageData) cachingConfigurationView.GetCacheStorageDataForCacheManager(CurrentCacheManager);

            if (isoStoreConfigurationData.PartitionName == null)
            {
                throw new ConfigurationException(SR.IsolatedStoreAreaNameNullException(isoStoreConfigurationData.Name));
            }

            if (isoStoreConfigurationData.PartitionName.Length == 0)
            {
                throw new ConfigurationException(SR.IsolatedStoreAreaNameEmptyException(isoStoreConfigurationData.Name));
            }

            this.storageAreaName = isoStoreConfigurationData.PartitionName;

            if (isoStoreConfigurationData.StorageEncryption != null)
            {
                StorageEncryptionFactory encryptionFactory = new StorageEncryptionFactory(cachingConfigurationView.ConfigurationContext);
                this.encryptionProvider = encryptionFactory.CreateSymmetricProvider(CurrentCacheManager);
            }

            Initialize();
        }
Exemplo n.º 27
0
 public Stream OpenCryptoWrite(IStorageEncryptionProvider encryptionProvider, byte[] iv)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 28
0
 public Stream OpenCryptoRead(IStorageEncryptionProvider encryptionProvider, byte[] iv)
 {
     return(encryptionProvider.Decrypt(_bucket.OpenDownloadStream(_fileInfo.Id), iv));
 }
Exemplo n.º 29
0
 public Stream OpenCryptoWrite(IStorageEncryptionProvider encryptionProvider, byte[] iv)
 {
     return(encryptionProvider.Encrypt(new FileStream(_fileInfo.FullName, FileMode.Open, FileAccess.ReadWrite), iv));
 }
Exemplo n.º 30
0
 public Stream OpenCryptoWrite(IStorageEncryptionProvider encryptionProvider, byte[] iv)
 {
     return(encryptionProvider.Encrypt(_bucket.OpenUploadStream(_fileInfo.Filename), iv));
 }
Exemplo n.º 31
0
 public Stream OpenCryptoRead(IStorageEncryptionProvider encryptionProvider, byte[] iv)
 {
     return(encryptionProvider.Decrypt(_fileInfo.OpenRead(), iv));
 }
Exemplo n.º 32
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DataBackingStore"/> class
        /// with the specified configuration information.
        /// </summary>
        /// <param name="configurationView">A <see cref="CachingConfigurationView"></see> object</param>
        /// <exception cref="System.Configuration.ConfigurationException">Reflects any failures to read configuration information</exception>
        /// <remarks>Other exceptions thrown depend on the implementation of the underlying database.</remarks>
        public override void Initialize(ConfigurationView configurationView)
        {
            ArgumentValidation.CheckForNullReference(configurationView, "configurationView");
            ArgumentValidation.CheckExpectedType(configurationView, typeof (CachingConfigurationView));

            CachingConfigurationView cachingConfigurationView = (CachingConfigurationView) configurationView;
            DataCacheStorageData dataConfiguration = (DataCacheStorageData) cachingConfigurationView.GetCacheStorageDataForCacheManager(CurrentCacheManager);
            partitionName = dataConfiguration.PartitionName;
            DatabaseProviderFactory dataFactory = new DatabaseProviderFactory(cachingConfigurationView.ConfigurationContext);
            database = dataFactory.CreateDatabase(dataConfiguration.DatabaseInstanceName);
            if (dataConfiguration.StorageEncryption != null)
            {
                StorageEncryptionFactory encryptionFactory = new StorageEncryptionFactory(cachingConfigurationView.ConfigurationContext);
                encryptionProvider = encryptionFactory.CreateSymmetricProvider(CurrentCacheManager);
            }
        }
Exemplo n.º 33
0
        /// <summary>
        /// Instance constructor. Ensures that the storage location in Isolated Storage is prepared
        /// for reading and writing. This class stores each individual field of the CacheItem into its own
        /// file inside the directory specified by itemDirectoryRoot.
        /// </summary>
        /// <param name="storage">Isolated Storage area to use. May not be null.</param>
        /// <param name="itemDirectoryRoot">Complete path in Isolated Storage where the cache item should be stored. May not be null.</param>
        /// <param name="encryptionProvider">Encryption provider</param>
        public IsolatedStorageCacheItem(IsolatedStorageFile storage, string itemDirectoryRoot, IStorageEncryptionProvider encryptionProvider)
        {
            if (storage == null)
            {
                throw new ArgumentNullException("storage");
            }

            int retriesLeft = MaxRetries;

            while (true)
            {
                // work around - attempt to write a file in the folder to determine whether delayed io
                // needs to be processed
                // since only a limited number of retries will be attempted, some extreme cases may
                // still fail if file io is deferred long enough.
                // while it's still possible that the deferred IO is still pending when the item that failed
                // to be added is removed by the cleanup code, thus making the cleanup fail,
                // the item should eventually be removed (by the original removal)
                try
                {
                    storage.CreateDirectory(itemDirectoryRoot);

                    // try to write a file
                    // if there is a pending operation or the folder is gone, this should find the problem
                    // before writing an actual field is attempted
                    using (IsolatedStorageFileStream fileStream =
                               new IsolatedStorageFileStream(itemDirectoryRoot + @"\sanity-check.txt", FileMode.Create, FileAccess.Write, FileShare.None, storage))
                    { }
                    break;
                }
                catch (UnauthorizedAccessException)
                {
                    // there are probably pending operations on the directory - retry if allowed
                    if (retriesLeft-- > 0)
                    {
                        Thread.Sleep(RetryDelayInMilliseconds);
                        continue;
                    }

                    throw;
                }
                catch (DirectoryNotFoundException)
                {
                    // a pending deletion on the directory was processed before creating the file
                    // but after attempting to create it - retry if allowed
                    if (retriesLeft-- > 0)
                    {
                        Thread.Sleep(RetryDelayInMilliseconds);
                        continue;
                    }

                    throw;
                }
            }

            keyField   = new IsolatedStorageCacheItemField(storage, "Key", itemDirectoryRoot, encryptionProvider);
            valueField = new IsolatedStorageCacheItemField(storage, "Val", itemDirectoryRoot, encryptionProvider);
            scavengingPriorityField = new IsolatedStorageCacheItemField(storage, "ScPr", itemDirectoryRoot, encryptionProvider);
            refreshActionField      = new IsolatedStorageCacheItemField(storage, "RA", itemDirectoryRoot, encryptionProvider);
            expirationsField        = new IsolatedStorageCacheItemField(storage, "Exp", itemDirectoryRoot, encryptionProvider);
            lastAccessedField       = new IsolatedStorageCacheItemField(storage, "LA", itemDirectoryRoot, encryptionProvider);
        }
Exemplo n.º 34
0
 public Stream OpenCryptoWrite(IStorageEncryptionProvider encryptionProvider, byte[] iv)
 {
     return(encryptionProvider.Encrypt(_fileInfo.OpenWrite(), iv));
 }
Exemplo n.º 35
0
 public Stream OpenCryptoRead(IStorageEncryptionProvider encryptionProvider, byte[] iv)
 {
     return(encryptionProvider.Decrypt(_blob.OpenReadAsync().Result, iv));
 }