using System.ComponentModel.DataAnnotations.Schema; using IdentityShroud.Core.Contracts; namespace IdentityShroud.Core.Model; [Table("key")] public class Key { private byte[] _privateKeyDecrypted = []; public Guid Id { get; set; } public DateTime CreatedAt { get; set; } public DateTime? DeactivatedAt { get; set; } /// /// Key with highest priority will be used. While there is not really a use case for this I know some users /// are more comfortable replacing keys by using priority then directly deactivating the old key. /// public int Priority { get; set; } = 10; public byte[] PrivateKeyEncrypted { get; set { field = value; _privateKeyDecrypted = []; } } = []; public byte[] GetPrivateKey(IEncryptionService encryptionService) { if (_privateKeyDecrypted.Length == 0 && PrivateKeyEncrypted.Length > 0) _privateKeyDecrypted = encryptionService.Decrypt(PrivateKeyEncrypted); return _privateKeyDecrypted; } public void SetPrivateKey(IEncryptionService encryptionService, byte[] privateKey) { PrivateKeyEncrypted = encryptionService.Encrypt(privateKey); _privateKeyDecrypted = privateKey; } }