Beispiel #1
0
        /// <summary>
        /// Remove a key for single key scheme.
        /// </summary>
        /// <param name="scheme">The key scheme.</param>
        /// <param name="key">The key to remove.</param>
        public virtual void Remove(SingleKeyScheme scheme, Key key)
        {
            IKeySet keys;

            if (keySets.TryGetValue(scheme, out keys))
            {
                keys.Remove(key);

                if (keys.IsEmpty)
                    keySets.Remove(scheme);
            }
        }
Beispiel #2
0
        /// <summary>
        /// Remove a key for dual key scheme.
        /// </summary>
        /// <param name="scheme">The key scheme.</param>
        /// <param name="subset">The key subset (PRODUCER or CONSUMER) to remove the key from.</param>
        /// <param name="key">The key to remove.</param>
        public virtual void Remove(DualKeyScheme scheme,
                            DualKeyScheme.Subset subset,
                            Key key)
        {
            IKeySet keySet;

            if (keySets.TryGetValue(scheme, out keySet))
            {
                ((DualKeySet)keySet).KeysFor(subset).Remove(key);

                if (keySet.IsEmpty)
                    keySets.Remove(scheme);
            }
        }
Beispiel #3
0
 /// <summary>
 /// Add a key for single key scheme.
 /// </summary>
 /// <param name="scheme">The key scheme.</param>
 /// <param name="key">The key to add.</param>
 public virtual void Add(SingleKeyScheme scheme, Key key)
 {
     NewKeysetFor(scheme).Add(key);
 }
Beispiel #4
0
 /// <summary>
 /// Add a key for dual key scheme.
 /// </summary>
 /// <param name="scheme">The key scheme.</param>
 /// <param name="subset">The key subset (PRODUCER or CONSUMER) to add the key to. </param>
 /// <param name="key"> The key to add.</param>
 public virtual void Add(DualKeyScheme scheme,
                  DualKeyScheme.Subset subset, Key key)
 {
     NewKeysetFor(scheme).KeysFor(subset).Add(key);
 }
Beispiel #5
0
        public void producer()
        {
            Key alicePrivate = new Key("alice private");
            Key alicePublic = alicePrivate.PublicKeyFor(KeyScheme.Sha1Producer);

            Keys aliceNtfnKeys = new Keys();
            aliceNtfnKeys.Add(KeyScheme.Sha1Producer, alicePrivate);

            Keys bobSubKeys = new Keys();
            bobSubKeys.Add(KeyScheme.Sha1Producer, alicePublic);

            Keys eveSubKeys = new Keys();
            eveSubKeys.Add(KeyScheme.Sha1Producer, new Key("Not alice's key").PublicKeyFor(KeyScheme.Sha1Producer));

            Assert.IsTrue(bobSubKeys.Match(aliceNtfnKeys));
            Assert.IsFalse(eveSubKeys.Match(aliceNtfnKeys));
        }
Beispiel #6
0
 /**
  * Create the public (aka prime) key for a given private (aka raw)
  * key using this scheme's hash.
  */
 public Key PublicKeyFor(Key privateKey)
 {
     return new Key(KeyHash.Hash(privateKey.Data));
 }
Beispiel #7
0
        public void consumer()
        {
            Key bobPrivate = new Key("bob private");
            Key bobPublic = bobPrivate.PublicKeyFor(KeyScheme.Sha1Consumer);

            Keys aliceNtfnKeys = new Keys();
            aliceNtfnKeys.Add(KeyScheme.Sha1Consumer, bobPublic);

            Keys bobSubKeys = new Keys();
            bobSubKeys.Add(KeyScheme.Sha1Consumer, bobPrivate);

            Keys eveSubKeys = new Keys();
            eveSubKeys.Add(KeyScheme.Sha1Consumer, new Key("Not bob's key"));

            Assert.IsTrue(bobSubKeys.Match(aliceNtfnKeys));
            Assert.IsFalse(eveSubKeys.Match(aliceNtfnKeys));
        }
Beispiel #8
0
        public void dual()
        {
            Key alicePrivate = new Key("alice private");
            Key alicePublic = alicePrivate.PublicKeyFor(KeyScheme.Sha1Dual);
            Key bobPrivate = new Key("bob private");
            Key bobPublic = bobPrivate.PublicKeyFor(KeyScheme.Sha1Dual);

            Keys aliceNtfnKeys = new Keys();
            aliceNtfnKeys.Add(KeyScheme.Sha1Dual, DualKeyScheme.Subset.Consumer, bobPublic);
            aliceNtfnKeys.Add(KeyScheme.Sha1Dual, DualKeyScheme.Subset.Producer, alicePrivate);

            Keys bobSubKeys = new Keys();
            bobSubKeys.Add(KeyScheme.Sha1Dual, DualKeyScheme.Subset.Consumer, bobPrivate);
            bobSubKeys.Add(KeyScheme.Sha1Dual, DualKeyScheme.Subset.Producer, alicePublic);

            Keys eveSubKeys = new Keys();
            Key randomPrivate = new Key("Not bob's key");
            eveSubKeys.Add(KeyScheme.Sha1Dual, DualKeyScheme.Subset.Consumer, randomPrivate);
            eveSubKeys.Add(KeyScheme.Sha1Dual, DualKeyScheme.Subset.Producer, randomPrivate.PublicKeyFor(KeyScheme.Sha1Dual));

            Assert.IsTrue(bobSubKeys.Match(aliceNtfnKeys));
            Assert.IsFalse(aliceNtfnKeys.Match(bobSubKeys));
            Assert.IsFalse(eveSubKeys.Match(aliceNtfnKeys));
        }
Beispiel #9
0
        public void computeDeltaSingleScheme()
        {
            Keys keys1 = new Keys();
            Keys keys2 = new Keys();

            Key key1 = new Key("key 1");
            Key key2 = new Key("key 2");

            Delta delta = keys1.DeltaFrom(keys2);

            Assert.AreEqual(0, delta.Added.KeysetFor(KeyScheme.Sha1Producer).Count);
            Assert.AreEqual(0, delta.Added.KeysetFor(KeyScheme.Sha1Consumer).Count);
            Assert.AreEqual(0, delta.Added.KeysetFor(KeyScheme.Sha1Dual).Count);

            Assert.AreEqual(0, delta.Removed.KeysetFor(KeyScheme.Sha1Producer).Count);
            Assert.AreEqual(0, delta.Removed.KeysetFor(KeyScheme.Sha1Consumer).Count);
            Assert.AreEqual(0, delta.Removed.KeysetFor(KeyScheme.Sha1Dual).Count);

            // add a single producer key
            keys2.Add(KeyScheme.Sha1Producer, key1);

            delta = keys1.DeltaFrom(keys2);
            Assert.AreEqual(1, delta.Added.KeysetFor(KeyScheme.Sha1Producer).Count);
            Assert.AreEqual(0, delta.Removed.KeysetFor(KeyScheme.Sha1Producer).Count);

            checkApplyDelta(delta, keys1, keys2);

            // remove a single producer key
            keys1.Add(KeyScheme.Sha1Producer, key2);

            delta = keys1.DeltaFrom(keys2);
            Assert.AreEqual(1, delta.Added.KeysetFor(KeyScheme.Sha1Producer).Count);
            Assert.AreEqual(1, delta.Removed.KeysetFor(KeyScheme.Sha1Producer).Count);

            checkApplyDelta(delta, keys1, keys2);

            // key1 is now in both sets
            keys1.Add(KeyScheme.Sha1Producer, key1);

            delta = keys1.DeltaFrom(keys2);
            Assert.AreEqual(0, delta.Added.KeysetFor(KeyScheme.Sha1Producer).Count);
            Assert.AreEqual(1, delta.Removed.KeysetFor(KeyScheme.Sha1Producer).Count);

            // key2 is not in both
            keys2.Add(KeyScheme.Sha1Producer, key2);

            delta = keys1.DeltaFrom(keys2);
            Assert.AreEqual(0, delta.Added.KeysetFor(KeyScheme.Sha1Producer).Count);
            Assert.AreEqual(0, delta.Removed.KeysetFor(KeyScheme.Sha1Producer).Count);

            checkApplyDelta(delta, keys1, keys2);
        }
Beispiel #10
0
        public void computeDeltaDual()
        {
            Keys keys1 = new Keys();
            Keys keys2 = new Keys();

            Key key1 = new Key("key 1");
            Key key2 = new Key("key 2");
            Key key3 = new Key("key 3");

            keys1.Add(KeyScheme.Sha1Dual, DualKeyScheme.Subset.Producer, key1);
            keys1.Add(KeyScheme.Sha1Dual, DualKeyScheme.Subset.Consumer, key2);
            keys1.Add(KeyScheme.Sha1Dual, DualKeyScheme.Subset.Consumer, key3);

            keys2.Add(KeyScheme.Sha1Dual, DualKeyScheme.Subset.Producer, key3);
            keys2.Add(KeyScheme.Sha1Dual, DualKeyScheme.Subset.Consumer, key3);

            Delta delta = keys1.DeltaFrom(keys2);
            Assert.AreEqual(1, delta.Added.KeysetFor(KeyScheme.Sha1Dual).ProducerKeys.Count);
            Assert.AreEqual(1, delta.Removed.KeysetFor(KeyScheme.Sha1Dual).ProducerKeys.Count);

            Assert.AreEqual(0, delta.Added.KeysetFor(KeyScheme.Sha1Dual).ConsumerKeys.Count);
            Assert.AreEqual(1, delta.Removed.KeysetFor(KeyScheme.Sha1Dual).ConsumerKeys.Count);

            checkApplyDelta(delta, keys1, keys2);
        }
Beispiel #11
0
 public bool Equals(Key key)
 {
     return hash == key.hash && new ArrayEqualityComparer<byte>().Equals(Data, key.Data);
 }
Beispiel #12
0
 public bool Add(Key key)
 {
     throw new NotSupportedException("Cannot add to a dual key set");
 }
Beispiel #13
0
 public bool Remove(Key key)
 {
     throw new NotSupportedException("Cannot remove from a dual key set");
 }