40 lines
1.1 KiB
C#
40 lines
1.1 KiB
C#
using System;
|
|
using System.Collections.Immutable;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace StellaOps.Cryptography.Kms;
|
|
|
|
public sealed partial class Fido2KmsClient
|
|
{
|
|
public Task<KmsKeyMetadata> 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);
|
|
}
|
|
}
|