using System; using System.Collections.Immutable; using System.Threading; using System.Threading.Tasks; namespace StellaOps.Cryptography.Kms; public sealed partial class Fido2KmsClient { public Task GetMetadataAsync(string keyId, CancellationToken cancellationToken = default) { ThrowIfDisposed(); var now = _timeProvider.GetUtcNow(); if (_cachedMetadata is not null && _metadataExpiresAt > now) { return Task.FromResult(_cachedMetadata); } var createdAt = _options.CreatedAt ?? _timeProvider.GetUtcNow(); var version = new KmsKeyVersionMetadata( _options.CredentialId, KmsKeyState.Active, createdAt, null, Convert.ToBase64String(_subjectPublicKeyInfo), _curveName); _cachedMetadata = new KmsKeyMetadata( _options.CredentialId, KmsAlgorithms.Es256, KmsKeyState.Active, createdAt, ImmutableArray.Create(version)); _metadataExpiresAt = now.Add(_metadataCacheDuration); return Task.FromResult(_cachedMetadata); } }