/// <summary> /// Returns all the keys in storage. /// </summary> /// <returns></returns> public async Task <IEnumerable <SerializedKey> > LoadKeysAsync() { var list = new List <SerializedKey>(); var files = _directory.GetFiles(KeyFilePrefix + "*" + KeyFileExtension); foreach (var file in files) { var id = file.Name.Substring(4); try { using (var reader = new StreamReader(file.OpenRead())) { var json = await reader.ReadToEndAsync(); var item = KeySerializer.Deserialize <SerializedKey>(json, EncodeJson); list.Add(item); } } catch (Exception ex) { _logger.LogError(ex, "Error reading file: " + file.Name); } } return(list); }
/// <summary> /// Unprotects RsaKeyContainer. /// </summary> /// <param name="key"></param> /// <returns></returns> public RsaKeyContainer Unprotect(SerializedKey key) { var data = key.DataProtected ? _dataProtectionProvider.Unprotect(key.Data) : key.Data; var item = KeySerializer.Deserialize <RsaKeyContainer>(data); if (item.KeyType == KeyType.X509) { item = KeySerializer.Deserialize <X509KeyContainer>(data); } return(item); }
/// <inheritdoc/> public KeyContainer Unprotect(SerializedKey key) { var data = key.DataProtected ? _dataProtectionProvider.Unprotect(key.Data) : key.Data; if (key.IsX509Certificate) { return(KeySerializer.Deserialize <X509KeyContainer>(data)); } if (key.Algorithm.StartsWith("R") || key.Algorithm.StartsWith("P")) { return(KeySerializer.Deserialize <RsaKeyContainer>(data)); } if (key.Algorithm.StartsWith("E")) { return(KeySerializer.Deserialize <EcKeyContainer>(data)); } throw new Exception($"Invalid Algorithm: {key.Algorithm} for kid: {key.Id}"); }