public virtual async Task CommitWriteStream(IStorageStream stream)
        {
            await CommitWriteStreamInternal(stream);

            if (this.UseCatalog)
            {
                await AddToCatalog(stream.Identifier);
            }
        }
Exemplo n.º 2
0
        protected override Task CommitWriteStreamInternal(IStorageStream stream)
        {
            PlayerPrefsStorageStream memoryStream = (PlayerPrefsStorageStream)stream;
            string data = null;

            if (useBase64)
            {
                data = Convert.ToBase64String(((MemoryStream)memoryStream.UnderlyingStream).ToArray());
            }
            else
            {
                data = this.TextEncoding.GetString(((MemoryStream)memoryStream.UnderlyingStream).ToArray());
            }
            PlayerPrefs.SetString(memoryStream.Identifier, data);
            return(Task.CompletedTask);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Gets the cryptographic stream by using the given stream for writting encrypted data. (Encrypting)
        /// </summary>
        /// <param name="stream">The raw stream</param>
        /// <param name="password">The encryption password</param>
        /// <returns>A cryptographic stream wrapper which has an underlying <see cref="CryptoStream"/> for writting encrypted data</returns>
        public virtual SaveSystemCryptoStream GetWriteStream(IStorageStream stream, string password)
        {
            var alg = SymmetricAlgorithm.Create(this.AlgorithmName);

            alg.Mode    = CipherMode.CBC;
            alg.Padding = PaddingMode.PKCS7;
            alg.GenerateIV();
            var key = new Rfc2898DeriveBytes(password, alg.IV, pwIterations);

            alg.Key = key.GetBytes(keySize);

            // Write the IV to the stream
            stream.UnderlyingStream.Write(alg.IV, 0, ivSize);
            var encryptor = alg.CreateEncryptor();

            return(new SaveSystemSymmetricCryptoStream(new CryptoStream(stream.UnderlyingStream, encryptor, CryptoStreamMode.Write), alg, encryptor));
        }
Exemplo n.º 4
0
        /// <summary>
        /// Gets the cryptographic stream by using the given stream for reading encrypted data. (Decrypting)
        /// </summary>
        /// <param name="stream">The raw stream</param>
        /// <param name="password">The decryption password</param>
        /// <returns>A cryptographic stream wrapper which has an underlying <see cref="CryptoStream"/> for reading encrypted data</returns>
        public virtual SaveSystemCryptoStream GetReadStream(IStorageStream stream, string password)
        {
            var alg = SymmetricAlgorithm.Create(this.AlgorithmName);

            alg.Mode    = CipherMode.CBC;
            alg.Padding = PaddingMode.PKCS7;
            var thisIV = new byte[ivSize];

            // Read the IV from the stream
            stream.UnderlyingStream.Read(thisIV, 0, ivSize);
            alg.IV = thisIV;

            var key = new Rfc2898DeriveBytes(password, alg.IV, pwIterations);

            alg.Key = key.GetBytes(keySize);

            var decryptor = alg.CreateDecryptor();

            return(new SaveSystemSymmetricCryptoStream(new CryptoStream(stream.UnderlyingStream, decryptor, CryptoStreamMode.Read), alg, decryptor));
        }
        Task CommitWriteStreamInternal(IStorageStream stream)
        {
            FileStorageStream fileStream = (FileStorageStream)stream;

#if !UNITY_EDITOR && (UNITY_WSA || UNITY_WINRT)
            stream.UnderlyingStream.Close();
            StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(this.BasePath.Replace('/', '\\'));

            string folderName = Path.GetDirectoryName(stream.Identifier);
            if (!string.IsNullOrEmpty(folderName))
            {
                folder = await folder.GetFolderAsync(folderName);
            }
            StorageFile tempFile = await folder.GetFileAsync(Path.GetFileName(stream.Identifier) + this.TemporarySuffix);

            await tempFile.RenameAsync(Path.GetFileName(stream.Identifier), NameCollisionOption.ReplaceExisting);
#else
            File.Delete(fileStream.FullPath);
            File.Move(fileStream.FullPath + this.TemporarySuffix, fileStream.FullPath);
            return(Task.CompletedTask);
#endif
        }
 /// <summary>
 /// Commit the write stream internally without doing any other actions.
 /// </summary>
 /// <param name="stream">The stream</param>
 protected abstract Task CommitWriteStreamInternal(IStorageStream stream);