public MutableKeySet PublicKey()
{
if (!typeof (IPrivateKey).IsAssignableFrom(Metadata.KeyType.RepresentedType))
{
return null;
}
var newMeta = new KeyMetadata(Metadata);
newMeta.Purpose = newMeta.Purpose == KeyPurpose.SignAndVerify
? KeyPurpose.Verify
: KeyPurpose.Encrypt;
var copiedKeys = _keys.Select(p => new {p.Key, ((IPrivateKey) p.Value).PublicKey})
.Select(
p =>
new
{
p.Key,
Type = p.PublicKey.KeyType,
Value = Keyczar.RawStringEncoding.GetBytes(p.PublicKey.ToJson())
})
.Select(p => new {p.Key, Value = Key.Read(p.Type, p.Value)});
newMeta.KeyType = copiedKeys.Select(it => it.Value.KeyType).First();
return new MutableKeySet(newMeta, copiedKeys.ToDictionary(k => k.Key, v => v.Value));
}