using System; using System.Collections.Generic; using Microsoft.Extensions.Options; using StellaOps.Cryptography; namespace StellaOps.Cryptography.DependencyInjection; internal sealed class CryptoPluginProviderRegistry : ICryptoProviderRegistry { private readonly CryptoProviderRegistry _registry; public CryptoPluginProviderRegistry( IReadOnlyList providers, IOptionsMonitor? optionsMonitor = null) { ArgumentNullException.ThrowIfNull(providers); var preferred = optionsMonitor?.CurrentValue?.ResolvePreferredProviders(); _registry = new CryptoProviderRegistry(providers, preferred); } public IReadOnlyCollection Providers => _registry.Providers; public bool TryResolve(string preferredProvider, out ICryptoProvider provider) => _registry.TryResolve(preferredProvider, out provider); public ICryptoProvider ResolveOrThrow(CryptoCapability capability, string algorithmId) => _registry.ResolveOrThrow(capability, algorithmId); public CryptoSignerResolution ResolveSigner( CryptoCapability capability, string algorithmId, CryptoKeyReference keyReference, string? preferredProvider = null) => _registry.ResolveSigner(capability, algorithmId, keyReference, preferredProvider); public CryptoHasherResolution ResolveHasher(string algorithmId, string? preferredProvider = null) => _registry.ResolveHasher(algorithmId, preferredProvider); }