private async void UnprotectAsyncBuffer_Click(object sender, RoutedEventArgs e) { string outputStr = ""; string plainMessage = ""; try { if (m_protectedBuffer != null) { BufferProtectUnprotectResult unBuffer = await DataProtectionManager.UnprotectAsync(m_protectedBuffer); m_unprotectedBuffer = unBuffer.Buffer; plainMessage = CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, m_unprotectedBuffer ); outputStr += "\n Status: " + unBuffer.ProtectionInfo.Status; outputStr += "\n Unprotected string:" + plainMessage; rootPage.NotifyUser(outputStr, NotifyType.StatusMessage); } else { rootPage.NotifyUser("Please protect a buffer to unprotect", NotifyType.ErrorMessage); } } catch (Exception ex) { rootPage.NotifyUser(outputStr + "\n" + ex.ToString(), NotifyType.ErrorMessage); } }
private async void DoBufferWork(IBackgroundTaskInstance taskInstance) { string message = "Hello World!"; string unprotectedMessage = ""; string logFileName = "Bufferlog.txt"; string logFileContent = ""; StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder; StorageFile logFile = await localFolder.CreateFileAsync(logFileName, CreationCollisionOption.OpenIfExists); IBuffer inputBuffer = CryptographicBuffer.ConvertStringToBinary(message, BinaryStringEncoding.Utf8); BufferProtectUnprotectResult procBuffer = await DataProtectionManager.ProtectAsync(inputBuffer, m_EnterpriseID); logFileContent += "\r\n" + DateTime.Now + ":" + "ProtStatus:" + procBuffer.ProtectionInfo.Status + "\n"; logFileContent += "\r\n" + "Protected Buffer:" + CryptographicBuffer.EncodeToHexString(procBuffer.Buffer).Substring(0, 5); // If keys are dropped under lock, unprotectBuffer will fail so don't unprotectbuffer under lock if (!m_areKeysDropped) { BufferProtectUnprotectResult unBuffer = await DataProtectionManager.UnprotectAsync(procBuffer.Buffer); unprotectedMessage = CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, procBuffer.Buffer); logFileContent += "\n Unprotected string:" + unprotectedMessage; if (message != unprotectedMessage) { throw new Exception("Original string does not match with unprotectedMessage!"); } } await FileIO.AppendTextAsync(logFile, logFileContent); }
private async void ProtectedAccessSuspending(object sender, ProtectedAccessSuspendingEventArgs args) { string logFileContent = ""; Windows.Foundation.Deferral deferal = args.GetDeferral(); // Protect any sensitive data in Memory so that it cannot be accessed while the device is locked // You should encrypt or destory any copies of sensitve data while device is going to a locked state. IBuffer inputBuffer = CryptographicBuffer.ConvertStringToBinary(m_SecretMessage, BinaryStringEncoding.Utf8); BufferProtectUnprotectResult procBuffer = await DataProtectionManager.ProtectAsync(inputBuffer, m_EnterpriseID); m_protectedBuffer = procBuffer.Buffer; deferal.Complete(); m_areKeysDropped = true; var settings = ApplicationData.Current.LocalSettings; settings.Values[m_taskName] += "\nApp got DPL suspend event"; StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder; StorageFile logFile = await localFolder.CreateFileAsync("SuspendLog.txt", CreationCollisionOption.OpenIfExists); logFileContent += "\r\n" + DateTime.Now + ":" + "Got DPL Protected Suspended"; logFileContent += "\r\n" + "Protection Status:" + procBuffer.ProtectionInfo.Status; await FileIO.AppendTextAsync(logFile, logFileContent); }
private async void ProtectedAccessResumed(object sender, ProtectedAccessResumedEventArgs args) { string logFileContent = ""; // Keys are available so can read and write from a protected file m_areKeysDropped = false; // BufferProtectUnprotectResult unBuffer = await DataProtectionManager.UnprotectAsync(m_protectedBuffer); m_SecretMessage = CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, m_protectedBuffer ); logFileContent += "\n Unprotected string:" + m_SecretMessage; var settings = ApplicationData.Current.LocalSettings; settings.Values[m_taskName] += "\nApp got DPL resumed event"; StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder; StorageFile logFile = await localFolder.CreateFileAsync("ResumeLog.txt", CreationCollisionOption.OpenIfExists); await FileIO.AppendTextAsync(logFile, "\r\n" + DateTime.Now + ":" + "Got DPL Protected resumed"); }
private async void ProtectAsyncBuffer_Click(object sender, RoutedEventArgs e) { string outputStr = "\n Protecting string:" + m_protectedMessage; IBuffer inputBuffer = CryptographicBuffer.ConvertStringToBinary(m_protectedMessage, BinaryStringEncoding.Utf8); BufferProtectUnprotectResult procBuffer = await DataProtectionManager.ProtectAsync(inputBuffer, Scenario1.m_enterpriseId); m_protectedBuffer = procBuffer.Buffer; outputStr += "\n Status: " + procBuffer.ProtectionInfo.Status; outputStr += "\n Protected string:"; outputStr += CryptographicBuffer.EncodeToHexString(m_protectedBuffer).Substring(0, 20); rootPage.NotifyUser(outputStr, NotifyType.StatusMessage); }