private static void VerifyKeyIsNull(string serviceName, string accountName) { if (MacKeyChain.RetrieveKey(serviceName, accountName) != null) { #pragma warning disable CA2201 // Do not raise reserved exception types throw new Exception(string.Format(CultureInfo.CurrentCulture, "key exists when it shouldn't be. keychainData=\"{0}\"", Encoding.UTF8.GetString(MacKeyChain.RetrieveKey(serviceName, accountName)))); #pragma warning restore CA2201 // Do not raise reserved exception types } }
public byte[] Read() { _logger.LogInformation("ReadDataCore"); _logger.LogInformation($"ReadDataCore, Before reading from mac keychain"); byte[] fileData = MacKeyChain.RetrieveKey(_keyChainServiceName, _keyChainAccountName, _logger); _logger.LogInformation($"ReadDataCore, read '{fileData?.Length}' bytes from the keychain"); return(fileData); }
private static void VerifyKey(string serviceName, string accountName, string expectedData) { string keychainData = Encoding.UTF8.GetString(MacKeyChain.RetrieveKey(serviceName, accountName)); if (!keychainData.Equals(expectedData)) { #pragma warning disable CA2201 // Do not raise reserved exception types throw new Exception(string.Format(CultureInfo.CurrentCulture, "keychainData=\"{0}\" doesn't match expected data=\"{1}\"", keychainData, expectedData)); #pragma warning restore CA2201 // Do not raise reserved exception types } }
private byte[] ReadDataCore() { _logger.TraceEvent(TraceEventType.Information, /*id*/ 0, "ReadDataCore"); byte[] fileData = null; bool cacheFileExists = File.Exists(CacheFilePath); _logger.TraceEvent(TraceEventType.Information, /*id*/ 0, $"ReadDataCore Cache file exists '{cacheFileExists}'"); if (SharedUtilities.IsWindowsPlatform()) { if (cacheFileExists) { TryProcessFile(() => { fileData = File.ReadAllBytes(CacheFilePath); _logger.TraceEvent(TraceEventType.Information, /*id*/ 0, $"ReadDataCore, read '{fileData.Length}' bytes from the file"); }); } } else if (SharedUtilities.IsMacPlatform()) { _logger.TraceEvent(TraceEventType.Information, /*id*/ 0, $"ReadDataCore, Before reading from mac keychain"); fileData = MacKeyChain.RetrieveKey(_creationProperties.MacKeyChainServiceName, _creationProperties.MacKeyChainAccountName, _logger); _logger.TraceEvent(TraceEventType.Information, /*id*/ 0, $"ReadDataCore, read '{fileData?.Length}' bytes from the keychain"); } else if (SharedUtilities.IsLinuxPlatform()) { _logger.TraceEvent(TraceEventType.Information, /*id*/ 0, $"ReadDataCore, Before reading from linux keyring"); IntPtr error = IntPtr.Zero; string secret = Libsecret.secret_password_lookup_sync( schema: GetLibsecretSchema(), cancellable: IntPtr.Zero, error: out error, attribute1Type: _creationProperties.KeyringAttribute1.Key, attribute1Value: _creationProperties.KeyringAttribute1.Value, attribute2Type: _creationProperties.KeyringAttribute2.Key, attribute2Value: _creationProperties.KeyringAttribute2.Value, end: IntPtr.Zero); if (error != IntPtr.Zero) { try { GError err = (GError)Marshal.PtrToStructure(error, typeof(GError)); _logger.TraceEvent(TraceEventType.Error, /*id*/ 0, $"An error was encountered while reading secret from keyring in the {nameof(MsalCacheStorage)} domain:'{err.Domain}' code:'{err.Code}' message:'{err.Message}'"); } catch (Exception e) { _logger.TraceEvent(TraceEventType.Error, /*id*/ 0, $"An exception was encountered while processing libsecret error information during reading in the {nameof(MsalCacheStorage)} ex:'{e}'"); } } else if (string.IsNullOrEmpty(secret)) { _logger.TraceEvent(TraceEventType.Error, /*id*/ 0, "No matching secret found in the keyring"); } else { _logger.TraceEvent(TraceEventType.Information, /*id*/ 0, "Base64 decoding the secret string"); fileData = Convert.FromBase64String(secret); _logger.TraceEvent(TraceEventType.Information, /*id*/ 0, $"ReadDataCore, read '{fileData?.Length}' bytes from the keyring"); } } else { _logger.TraceEvent(TraceEventType.Error, /*id*/ 0, "Platform not supported"); throw new PlatformNotSupportedException(); } return(fileData); }