public virtual async Task CommitWriteStream(IStorageStream stream) { await CommitWriteStreamInternal(stream); if (this.UseCatalog) { await AddToCatalog(stream.Identifier); } }
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); }
/// <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)); }
/// <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);