/// <exception cref="System.IO.IOException"/>
 public override KeyProvider.KeyVersion RollNewVersion(string name, byte[] material
                                                       )
 {
     writeLock.Lock();
     try
     {
         KeyProvider.Metadata meta = GetMetadata(name);
         if (meta == null)
         {
             throw new IOException("Key " + name + " not found");
         }
         if (meta.GetBitLength() != 8 * material.Length)
         {
             throw new IOException("Wrong key length. Required " + meta.GetBitLength() + ", but got "
                                   + (8 * material.Length));
         }
         int    nextVersion = meta.AddVersion();
         string versionName = BuildVersionName(name, nextVersion);
         return(InnerSetKeyVersion(name, versionName, material, meta.GetCipher()));
     }
     finally
     {
         writeLock.Unlock();
     }
 }
        public virtual void TestMetadata()
        {
            //Metadata without description
            DateFormat format = new SimpleDateFormat("y/m/d");
            DateTime   date   = format.Parse("2013/12/25");

            KeyProvider.Metadata meta = new KeyProvider.Metadata("myCipher", 100, null, null,
                                                                 date, 123);
            Assert.Equal("myCipher", meta.GetCipher());
            Assert.Equal(100, meta.GetBitLength());
            NUnit.Framework.Assert.IsNull(meta.GetDescription());
            Assert.Equal(date, meta.GetCreated());
            Assert.Equal(123, meta.GetVersions());
            KeyProvider.Metadata second = new KeyProvider.Metadata(meta.Serialize());
            Assert.Equal(meta.GetCipher(), second.GetCipher());
            Assert.Equal(meta.GetBitLength(), second.GetBitLength());
            NUnit.Framework.Assert.IsNull(second.GetDescription());
            Assert.True(second.GetAttributes().IsEmpty());
            Assert.Equal(meta.GetCreated(), second.GetCreated());
            Assert.Equal(meta.GetVersions(), second.GetVersions());
            int newVersion = second.AddVersion();

            Assert.Equal(123, newVersion);
            Assert.Equal(124, second.GetVersions());
            Assert.Equal(123, meta.GetVersions());
            //Metadata with description
            format = new SimpleDateFormat("y/m/d");
            date   = format.Parse("2013/12/25");
            IDictionary <string, string> attributes = new Dictionary <string, string>();

            attributes["a"] = "A";
            meta            = new KeyProvider.Metadata("myCipher", 100, "description", attributes, date,
                                                       123);
            Assert.Equal("myCipher", meta.GetCipher());
            Assert.Equal(100, meta.GetBitLength());
            Assert.Equal("description", meta.GetDescription());
            Assert.Equal(attributes, meta.GetAttributes());
            Assert.Equal(date, meta.GetCreated());
            Assert.Equal(123, meta.GetVersions());
            second = new KeyProvider.Metadata(meta.Serialize());
            Assert.Equal(meta.GetCipher(), second.GetCipher());
            Assert.Equal(meta.GetBitLength(), second.GetBitLength());
            Assert.Equal(meta.GetDescription(), second.GetDescription());
            Assert.Equal(meta.GetAttributes(), second.GetAttributes());
            Assert.Equal(meta.GetCreated(), second.GetCreated());
            Assert.Equal(meta.GetVersions(), second.GetVersions());
            newVersion = second.AddVersion();
            Assert.Equal(123, newVersion);
            Assert.Equal(124, second.GetVersions());
            Assert.Equal(123, meta.GetVersions());
        }
Exemple #3
0
 /// <exception cref="System.IO.IOException"/>
 public override KeyProvider.KeyVersion RollNewVersion(string name, byte[] material
                                                       )
 {
     lock (this)
     {
         KeyProvider.Metadata meta = GetMetadata(name);
         if (meta == null)
         {
             throw new IOException("Key " + name + " not found");
         }
         if (meta.GetBitLength() != 8 * material.Length)
         {
             throw new IOException("Wrong key length. Required " + meta.GetBitLength() + ", but got "
                                   + (8 * material.Length));
         }
         int nextVersion = meta.AddVersion();
         credentials.AddSecretKey(new Text(name), meta.Serialize());
         string versionName = BuildVersionName(name, nextVersion);
         credentials.AddSecretKey(new Text(versionName), material);
         return(new KeyProvider.KeyVersion(name, versionName, material));
     }
 }