35 lines
1.5 KiB
C#
35 lines
1.5 KiB
C#
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<ICryptoProvider> providers,
|
|
IOptionsMonitor<CryptoProviderRegistryOptions>? optionsMonitor = null)
|
|
{
|
|
ArgumentNullException.ThrowIfNull(providers);
|
|
var preferred = optionsMonitor?.CurrentValue?.ResolvePreferredProviders();
|
|
_registry = new CryptoProviderRegistry(providers, preferred);
|
|
}
|
|
|
|
public IReadOnlyCollection<ICryptoProvider> 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);
|
|
}
|