Skip to content

Commit

Permalink
Add GetKeyTypeFromVariant on LCP Key Store
Browse files Browse the repository at this point in the history
  • Loading branch information
Maxhy committed Apr 3, 2024
1 parent 4630e60 commit 283f026
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 25 deletions.
19 changes: 19 additions & 0 deletions KeyManager.Library.KeyStore.LCP/LCPKeyEntry.cs
Original file line number Diff line number Diff line change
Expand Up @@ -97,5 +97,24 @@ public override IList<KeyEntryVariant> GetAllVariants(KeyEntryClass? classFilter
}
return CreateVariantFromAlgo(algo, keySize);
}

public static string GetKeyTypeFromVariant(KeyEntryVariant variant)
{
var vname = variant.Name.ToLowerInvariant();
string keyType;
if (vname == "des")
{
keyType = "2k3des";
}
else if (vname == "tk3des")
{
keyType = "3k3des";
}
else
{
keyType = vname;
}
return keyType;
}
}
}
56 changes: 31 additions & 25 deletions KeyManager.Library.KeyStore.LCP/LCPKeyStore.cs
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ public override async Task Create(IChangeKeyEntry change)

if (change is KeyEntry entry && entry.Variant != null && entry.Variant.KeyContainers.Count > 0)
{
var key = CreateCredentialKey(entry.Identifier, entry.Variant.KeyContainers[0] as KeyVersion, (entry as LCPKeyEntry)?.LCPProperties);
var key = CreateCredentialKey(entry.Identifier, entry.Variant, (entry as LCPKeyEntry)?.LCPProperties);
if (key != null)
{
await _keyAPI!.Create(key);
Expand Down Expand Up @@ -276,7 +276,7 @@ public override async Task Update(IChangeKeyEntry change, bool ignoreIfMissing)
{
if (entry.Variant?.KeyContainers.Count == 1)
{
var key = CreateCredentialKey(entry.Identifier, entry.Variant.KeyContainers[0] as KeyVersion, (entry as LCPKeyEntry)?.LCPProperties);
var key = CreateCredentialKey(entry.Identifier, entry.Variant, (entry as LCPKeyEntry)?.LCPProperties);
if (key != null)
{
// We should already have only one key material during an update
Expand All @@ -297,37 +297,43 @@ public override async Task Update(IChangeKeyEntry change, bool ignoreIfMissing)
return base.GetDefaultKeyEntry(keClass) ?? new LCPKeyEntry(keClass);
}

public static CredentialKey CreateCredentialKey(KeyEntryId identifier, KeyContainer? kc, LCPKeyEntryProperties? properties)
public static CredentialKey CreateCredentialKey(KeyEntryId identifier, KeyEntryVariant? variant, LCPKeyEntryProperties? properties)
{
var key = new CredentialKey();
if (!string.IsNullOrEmpty(identifier.Id))
{
key.Id = Guid.Parse(identifier.Id);
}
if (kc != null)
{
var rawkey = kc.Key.GetAggregatedValueAsBinary();
key.Value = (rawkey != null) ? Convert.ToHexString(rawkey) : null;
}
if (!string.IsNullOrEmpty(kc?.Key.Link?.KeyStoreFavorite))
{
key.KeyStore = kc.Key.Link.KeyStoreFavorite != Link.StorePlaceholder ? kc.Key.Link.KeyStoreFavorite : null;
key.KeyStoreReference = kc.Key.Link.KeyIdentifier?.Id;
key.KeyStoreType = "sam"; // TODO: get the referenced key store type here
}
else
{
key.KeyStoreType = "database";
}

if (kc is KeyVersion kv)
{
key.Version = kv.Version;
}
if (properties != null)
if (variant != null)
{
key.Scope = properties.Scope;
key.ScopeDiversifier = properties.ScopeDiversifier;
var kc = variant.KeyContainers[0];
key.KeyType = LCPKeyEntry.GetKeyTypeFromVariant(variant);
if (kc != null)
{
var rawkey = kc.Key.GetAggregatedValueAsBinary();
key.Value = (rawkey != null) ? Convert.ToHexString(rawkey) : null;
}
if (!string.IsNullOrEmpty(kc?.Key.Link?.KeyStoreFavorite))
{
key.KeyStore = kc.Key.Link.KeyStoreFavorite != Link.StorePlaceholder ? kc.Key.Link.KeyStoreFavorite : null;
key.KeyStoreReference = kc.Key.Link.KeyIdentifier?.Id;
key.KeyStoreType = "sam"; // TODO: get the referenced key store type here
}
else
{
key.KeyStoreType = "database";
}

if (kc is KeyVersion kv)
{
key.Version = kv.Version;
}
if (properties != null)
{
key.Scope = properties.Scope;
key.ScopeDiversifier = properties.ScopeDiversifier;
}
}
return key;
}
Expand Down

0 comments on commit 283f026

Please sign in to comment.