32 lines
1.3 KiB
C#

using DigitalData.Core.Abstractions.Security;
using System.Collections;
namespace DigitalData.Core.Security.Cryptographer
{
public class RSACryptographerList<TRSACryptographer> : IEnumerable<TRSACryptographer> where TRSACryptographer : IRSACryptographer
{
private readonly Func<TRSACryptographer, string> _keyGenerator;
private readonly IEnumerable<TRSACryptographer> _cryptographers;
internal RSACryptographerList(Func<TRSACryptographer, string> keyGenerator, IEnumerable<TRSACryptographer> cryptographers)
{
_keyGenerator = keyGenerator;
_cryptographers = cryptographers;
}
public TRSACryptographer this[string key]
=> _cryptographers.SingleOrDefault(crypt => _keyGenerator(crypt) == key)
?? throw new InvalidOperationException($"No {typeof(TRSACryptographer).GetType().Name.TrimStart('I')} found with Key: {key}.");
public bool TryGet(string key, out TRSACryptographer? cryptographer)
{
cryptographer = _cryptographers.SingleOrDefault(crypt => _keyGenerator(crypt) == key);
return cryptographer is not null;
}
public IEnumerator<TRSACryptographer> GetEnumerator() => _cryptographers.GetEnumerator();
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
}