diff --git a/tests/keyringTest.cs b/tests/keyringTest.cs new file mode 100644 index 0000000..c9ef54b --- /dev/null +++ b/tests/keyringTest.cs @@ -0,0 +1,45 @@ +using NUnit.Framework; +using System; +using chestcrypto; +using keyring; +using chestcrypto.identity; +using Sodium; + +namespace keyringTests +{ + public class Tests + { + [SetUp] + public void Setup() + { + } + + [Test] + public void TestKeyringAddPublic() + { + DoublePublicKey key = new DoublePublicKey(PublicKeyAuth.GenerateKeyPair().PublicKey, PublicKeyBox.GenerateKeyPair().PublicKey); + PublicIdentity iden = new PublicIdentity(key, "bob"); + DoublePublicKey key2 = new DoublePublicKey(PublicKeyAuth.GenerateKeyPair().PublicKey, PublicKeyBox.GenerateKeyPair().PublicKey); + PublicIdentity iden2 = new PublicIdentity(key2, "alice"); + KeyRing ring = new KeyRing(); + ring.addPublicIdentity(iden); + + Assert.IsTrue(ring.publicIdentities.Contains(iden)); + Assert.IsFalse(ring.publicIdentities.Contains(iden2)); + } + + [Test] + public void TestKeyringAddPrivate(){ + DoublePrivateKey key = new DoublePrivateKey(PublicKeyAuth.GenerateKeyPair().PrivateKey, PublicKeyBox.GenerateKeyPair().PrivateKey); + PrivateIdentity iden = new PrivateIdentity(key, "bob"); + DoublePrivateKey key2 = new DoublePrivateKey(PublicKeyAuth.GenerateKeyPair().PrivateKey, PublicKeyBox.GenerateKeyPair().PrivateKey); + PrivateIdentity iden2 = new PrivateIdentity(key2, "alice"); + KeyRing ring = new KeyRing(); + ring.addPrivateIdentity(iden); + + Assert.IsTrue(ring.privateIdentities.Contains(iden)); + Assert.IsFalse(ring.privateIdentities.Contains(iden2)); + } + + } +} \ No newline at end of file diff --git a/tests/profile/testLoad.cs b/tests/profile/testLoad.cs new file mode 100644 index 0000000..43630a5 --- /dev/null +++ b/tests/profile/testLoad.cs @@ -0,0 +1,25 @@ +using NUnit.Framework; +using chestcrypto.identity; +using chestcrypto; +using chestcrypto.profile; +using System; +using System.IO; +using System.Linq; + +namespace testProfileLoad +{ + public class Tests + { + [SetUp] + public void Setup() + { + } + + [Test] + public void TestLoad(){ + RestoreKeyring restore = new RestoreKeyring("test.profile"); + } + + + } +} \ No newline at end of file diff --git a/treasurechest/identity/public.cs b/treasurechest/identity/public.cs index c1068d9..cb055ef 100644 --- a/treasurechest/identity/public.cs +++ b/treasurechest/identity/public.cs @@ -12,14 +12,14 @@ namespace chestcrypto.identity private string name; private string comment; // human's note - public PublicIdentity(DoublePublicKey doublePrivateKey, string alias){ - key = doublePrivateKey; + public PublicIdentity(DoublePublicKey doublePublicKey, string alias){ + key = doublePublicKey; name = alias; comment = ""; } - public PublicIdentity(DoublePublicKey doublePrivateKey, string alias, string note){ - key = doublePrivateKey; + public PublicIdentity(DoublePublicKey doublePublicKey, string alias, string note){ + key = doublePublicKey; name = alias; comment = note; } diff --git a/treasurechest/keyring/file.cs b/treasurechest/keyring/file.cs deleted file mode 100644 index c8d4a79..0000000 --- a/treasurechest/keyring/file.cs +++ /dev/null @@ -1,18 +0,0 @@ -using chestcrypto; - -namespace keyring{ - - internal class KeyRingFile - { - private string storageFile = null; - - internal KeyRingFile(string filePath){ - storageFile = filePath; - } - - internal void write(byte[] data){ - - } - } - -} \ No newline at end of file diff --git a/treasurechest/keyring/keyring.cs b/treasurechest/keyring/keyring.cs index 97858f4..56ce7ae 100644 --- a/treasurechest/keyring/keyring.cs +++ b/treasurechest/keyring/keyring.cs @@ -1,19 +1,38 @@ -using chestcrypto; -using chestcrypto.exceptions; using chestcrypto.identity; +using chestcrypto.exceptions; using System.Collections.Generic; +using System.Linq; namespace keyring{ public class KeyRing { - //private List publicIdentities; - private List privateIdentities; + public List publicIdentities { get; set; } + public List privateIdentities { get; set; } public KeyRing(){ - //publicIdentities = new List(); + publicIdentities = new List(); privateIdentities = new List(); } + + public void addPublicIdentity(PublicIdentity newIden){ + foreach(PublicIdentity iden in publicIdentities){ + if (Enumerable.ReferenceEquals(iden.getPublicKey(), iden)){ + throw new DuplicateIdentityException(); + } + } + publicIdentities.Add(newIden); + } + public void addPrivateIdentity(PrivateIdentity newIden){ + foreach(PrivateIdentity iden in privateIdentities){ + if (Enumerable.ReferenceEquals(iden.getPrivateKey(), iden)){ + throw new DuplicateIdentityException(); + } + } + privateIdentities.Add(newIden); + } + + } } \ No newline at end of file diff --git a/treasurechest/profile/restoreKeyring.cs b/treasurechest/profile/restoreKeyring.cs new file mode 100644 index 0000000..27204f3 --- /dev/null +++ b/treasurechest/profile/restoreKeyring.cs @@ -0,0 +1,25 @@ +using System.IO; + +using keyring; + +namespace chestcrypto.profile{ + + public class RestoreKeyring{ + + private string profileDir; + + public RestoreKeyring(string profileDirectory){ + profileDir = profileDirectory; + + if (! Directory.Exists(profileDir)){ + Directory.CreateDirectory(profileDir); // Does not error if it exists already + } + } + + private void getKeyring(){ + KeyRing keyRing = new KeyRing(); + } + + } + +} \ No newline at end of file