/// <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()); }
/// <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)); } }