using System.Collections.Generic;
using NUnit.Framework;
namespace Net.Pkcs11Interop.Tests.HighLevelAPI
{
[TestFixture()]
public class _13_ObjectAttributeTest
{
[Test()]
public void _01_DisposeAttributeTest()
{
IObjectAttribute attr1 = Settings.Factories.ObjectAttributeFactory.Create(
CKA.CKA_CLASS,
CKO.CKO_DATA);
attr1.Dispose();
using (IObjectAttribute attr2 = Settings.Factories.ObjectAttributeFactory.Create(
CKA.CKA_CLASS,
CKO.CKO_DATA))
{
}
#pragma warning disable 0219
IObjectAttribute attr3 = Settings.Factories.ObjectAttributeFactory.Create(
CKA.CKA_CLASS,
CKO.CKO_DATA);
#pragma warning restore 0219
}
[Test()]
public void _02_EmptyAttributeTest()
{
using (IObjectAttribute attr = Settings.Factories.ObjectAttributeFactory.Create(
CKA.CKA_CLASS))
{
Assert.IsTrue(attr.Type == ConvertUtils.UInt64FromCKA(
CKA.CKA_CLASS));
Assert.IsTrue(attr.GetValueAsByteArray() == null);
}
}
[Test()]
public void _03_ULongAttributeTest()
{
ulong value = ConvertUtils.UInt64FromCKO(
CKO.CKO_DATA);
using (IObjectAttribute attr = Settings.Factories.ObjectAttributeFactory.Create(
CKA.CKA_CLASS, value))
{
Assert.IsTrue(attr.Type == ConvertUtils.UInt64FromCKA(
CKA.CKA_CLASS));
Assert.IsTrue(attr.GetValueAsUlong() == value);
}
}
[Test()]
public void _04_BoolAttributeTest()
{
bool value = true;
using (IObjectAttribute attr = Settings.Factories.ObjectAttributeFactory.Create(
CKA.CKA_TOKEN, value))
{
Assert.IsTrue(attr.Type == ConvertUtils.UInt64FromCKA(
CKA.CKA_TOKEN));
Assert.IsTrue(attr.GetValueAsBool() == value);
}
}
[Test()]
public void _05_StringAttributeTest()
{
string value = "Hello world";
using (IObjectAttribute attr = Settings.Factories.ObjectAttributeFactory.Create(
CKA.CKA_LABEL, value))
{
Assert.IsTrue(attr.Type == ConvertUtils.UInt64FromCKA(
CKA.CKA_LABEL));
Assert.IsTrue(attr.GetValueAsString() == value);
}
value = null;
using (IObjectAttribute attr = Settings.Factories.ObjectAttributeFactory.Create(
CKA.CKA_LABEL, value))
{
Assert.IsTrue(attr.Type == ConvertUtils.UInt64FromCKA(
CKA.CKA_LABEL));
Assert.IsTrue(attr.GetValueAsString() == value);
}
}
[Test()]
public void _06_ByteArrayAttributeTest()
{
byte[] value = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09 };
using (IObjectAttribute attr = Settings.Factories.ObjectAttributeFactory.Create(
CKA.CKA_ID, value))
{
Assert.IsTrue(attr.Type == ConvertUtils.UInt64FromCKA(
CKA.CKA_ID));
Assert.IsTrue(ConvertUtils.BytesToBase64String(attr.GetValueAsByteArray()) == ConvertUtils.BytesToBase64String(value));
}
value = null;
using (IObjectAttribute attr = Settings.Factories.ObjectAttributeFactory.Create(
CKA.CKA_ID, value))
{
Assert.IsTrue(attr.Type == ConvertUtils.UInt64FromCKA(
CKA.CKA_ID));
Assert.IsTrue(attr.GetValueAsByteArray() == value);
}
}
[Test()]
public void _07_DateTimeAttributeTest()
{
DateTime value = new DateTime(2012, 1, 30, 0, 0, 0, DateTimeKind.Utc);
using (IObjectAttribute attr = Settings.Factories.ObjectAttributeFactory.Create(
CKA.CKA_START_DATE, value))
{
Assert.IsTrue(attr.Type == ConvertUtils.UInt64FromCKA(
CKA.CKA_START_DATE));
Assert.IsTrue(attr.GetValueAsDateTime() == value);
}
}
[Test()]
public void _08_AttributeArrayAttributeTest()
{
IObjectAttribute nestedAttribute1 = Settings.Factories.ObjectAttributeFactory.Create(
CKA.CKA_TOKEN,
true);
IObjectAttribute nestedAttribute2 = Settings.Factories.ObjectAttributeFactory.Create(
CKA.CKA_PRIVATE,
true);
List<IObjectAttribute> originalValue = new List<IObjectAttribute>();
originalValue.Add(nestedAttribute1);
originalValue.Add(nestedAttribute2);
using (IObjectAttribute attr = Settings.Factories.ObjectAttributeFactory.Create(
CKA.CKA_WRAP_TEMPLATE, originalValue))
{
Assert.IsTrue(attr.Type == ConvertUtils.UInt64FromCKA(
CKA.CKA_WRAP_TEMPLATE));
List<IObjectAttribute> recoveredValue = attr.GetValueAsObjectAttributeList();
Assert.IsTrue(recoveredValue.Count == 2);
Assert.IsTrue(recoveredValue[0].Type == ConvertUtils.UInt64FromCKA(
CKA.CKA_TOKEN));
Assert.IsTrue(recoveredValue[0].GetValueAsBool() == true);
Assert.IsTrue(recoveredValue[1].Type == ConvertUtils.UInt64FromCKA(
CKA.CKA_PRIVATE));
Assert.IsTrue(recoveredValue[1].GetValueAsBool() == true);
}
if (Platform.NativeULongSize == 4)
{
if (Platform.StructPackingSize == 0)
{
HLA40.ObjectAttribute objectAttribute40a = (HLA40.ObjectAttribute)nestedAttribute1;
LLA40.CK_ATTRIBUTE ckAttribute40a = (LLA40.CK_ATTRIBUTE)typeof(HLA40.ObjectAttribute).GetField("_ckAttribute", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(objectAttribute40a);
ckAttribute40a.value = IntPtr.Zero;
ckAttribute40a.valueLen = 0;
typeof(HLA40.ObjectAttribute).GetField("_ckAttribute", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(objectAttribute40a, ckAttribute40a);
HLA40.ObjectAttribute objectAttribute40b = (HLA40.ObjectAttribute)nestedAttribute2;
LLA40.CK_ATTRIBUTE ckAttribute40b = (LLA40.CK_ATTRIBUTE)typeof(HLA40.ObjectAttribute).GetField("_ckAttribute", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(objectAttribute40b);
ckAttribute40b.value = IntPtr.Zero;
ckAttribute40b.valueLen = 0;
typeof(HLA40.ObjectAttribute).GetField("_ckAttribute", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(objectAttribute40b, ckAttribute40b);
}
else
{
HLA41.ObjectAttribute objectAttribute41a = (HLA41.ObjectAttribute)nestedAttribute1;
LLA41.CK_ATTRIBUTE ckAttribute41a = (LLA41.CK_ATTRIBUTE)typeof(HLA41.ObjectAttribute).GetField("_ckAttribute", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(objectAttribute41a);
ckAttribute41a.value = IntPtr.Zero;
ckAttribute41a.valueLen = 0;
typeof(HLA41.ObjectAttribute).GetField("_ckAttribute", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(objectAttribute41a, ckAttribute41a);
HLA41.ObjectAttribute objectAttribute41b = (HLA41.ObjectAttribute)nestedAttribute2;
LLA41.CK_ATTRIBUTE ckAttribute41b = (LLA41.CK_ATTRIBUTE)typeof(HLA41.ObjectAttribute).GetField("_ckAttribute", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(objectAttribute41b);
ckAttribute41b.value = IntPtr.Zero;
ckAttribute41b.valueLen = 0;
typeof(HLA41.ObjectAttribute).GetField("_ckAttribute", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(objectAttribute41b, ckAttribute41b);
}
}
else
{
if (Platform.StructPackingSize == 0)
{
HLA80.ObjectAttribute objectAttribute80a = (HLA80.ObjectAttribute)nestedAttribute1;
LLA80.CK_ATTRIBUTE ckAttribute80a = (LLA80.CK_ATTRIBUTE)typeof(HLA80.ObjectAttribute).GetField("_ckAttribute", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(objectAttribute80a);
ckAttribute80a.value = IntPtr.Zero;
ckAttribute80a.valueLen = 0;
typeof(HLA80.ObjectAttribute).GetField("_ckAttribute", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(objectAttribute80a, ckAttribute80a);
HLA80.ObjectAttribute objectAttribute80b = (HLA80.ObjectAttribute)nestedAttribute2;
LLA80.CK_ATTRIBUTE ckAttribute80b = (LLA80.CK_ATTRIBUTE)typeof(HLA80.ObjectAttribute).GetField("_ckAttribute", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(objectAttribute80b);
ckAttribute80b.value = IntPtr.Zero;
ckAttribute80b.valueLen = 0;
typeof(HLA80.ObjectAttribute).GetField("_ckAttribute", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(objectAttribute80b, ckAttribute80b);
}
else
{
HLA81.ObjectAttribute objectAttribute81a = (HLA81.ObjectAttribute)nestedAttribute1;
LLA81.CK_ATTRIBUTE ckAttribute81a = (LLA81.CK_ATTRIBUTE)typeof(HLA81.ObjectAttribute).GetField("_ckAttribute", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(objectAttribute81a);
ckAttribute81a.value = IntPtr.Zero;
ckAttribute81a.valueLen = 0;
typeof(HLA81.ObjectAttribute).GetField("_ckAttribute", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(objectAttribute81a, ckAttribute81a);
HLA81.ObjectAttribute objectAttribute81b = (HLA81.ObjectAttribute)nestedAttribute2;
LLA81.CK_ATTRIBUTE ckAttribute81b = (LLA81.CK_ATTRIBUTE)typeof(HLA81.ObjectAttribute).GetField("_ckAttribute", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(objectAttribute81b);
ckAttribute81b.value = IntPtr.Zero;
ckAttribute81b.valueLen = 0;
typeof(HLA81.ObjectAttribute).GetField("_ckAttribute", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(objectAttribute81b, ckAttribute81b);
}
}
originalValue = null;
using (IObjectAttribute attr = Settings.Factories.ObjectAttributeFactory.Create(
CKA.CKA_WRAP_TEMPLATE, originalValue))
{
Assert.IsTrue(attr.Type == ConvertUtils.UInt64FromCKA(
CKA.CKA_WRAP_TEMPLATE));
Assert.IsTrue(attr.GetValueAsObjectAttributeList() == originalValue);
}
originalValue = new List<IObjectAttribute>();
using (IObjectAttribute attr = Settings.Factories.ObjectAttributeFactory.Create(
CKA.CKA_WRAP_TEMPLATE, originalValue))
{
Assert.IsTrue(attr.Type == ConvertUtils.UInt64FromCKA(
CKA.CKA_WRAP_TEMPLATE));
Assert.IsTrue(attr.GetValueAsObjectAttributeList() == null);
}
}
[Test()]
public void _09_ULongArrayAttributeTest()
{
List<ulong> originalValue = new List<ulong>();
originalValue.Add(333333);
originalValue.Add(666666);
using (IObjectAttribute attr = Settings.Factories.ObjectAttributeFactory.Create(
CKA.CKA_ALLOWED_MECHANISMS, originalValue))
{
Assert.IsTrue(attr.Type == ConvertUtils.UInt64FromCKA(
CKA.CKA_ALLOWED_MECHANISMS));
List<ulong> recoveredValue = attr.GetValueAsULongList();
for (int i = 0; i < recoveredValue.Count; i++)
Assert.IsTrue(originalValue[i] == recoveredValue[i]);
}
originalValue = null;
using (IObjectAttribute attr = Settings.Factories.ObjectAttributeFactory.Create(
CKA.CKA_ALLOWED_MECHANISMS, originalValue))
{
Assert.IsTrue(attr.Type == ConvertUtils.UInt64FromCKA(
CKA.CKA_ALLOWED_MECHANISMS));
Assert.IsTrue(attr.GetValueAsULongList() == originalValue);
}
originalValue = new List<ulong>();
using (IObjectAttribute attr = Settings.Factories.ObjectAttributeFactory.Create(
CKA.CKA_ALLOWED_MECHANISMS, originalValue))
{
Assert.IsTrue(attr.Type == ConvertUtils.UInt64FromCKA(
CKA.CKA_ALLOWED_MECHANISMS));
Assert.IsTrue(attr.GetValueAsULongList() == null);
}
}
[Test()]
public void _10_MechanismArrayAttributeTest()
{
List<CKM> originalValue = new List<CKM>();
originalValue.Add(
CKM.CKM_RSA_PKCS);
originalValue.Add(
CKM.CKM_AES_CBC);
using (IObjectAttribute attr = Settings.Factories.ObjectAttributeFactory.Create(
CKA.CKA_ALLOWED_MECHANISMS, originalValue))
{
Assert.IsTrue(attr.Type == ConvertUtils.UInt64FromCKA(
CKA.CKA_ALLOWED_MECHANISMS));
List<CKM> recoveredValue = attr.GetValueAsCkmList();
for (int i = 0; i < recoveredValue.Count; i++)
Assert.IsTrue(originalValue[i] == recoveredValue[i]);
}
originalValue = null;
using (IObjectAttribute attr = Settings.Factories.ObjectAttributeFactory.Create(
CKA.CKA_ALLOWED_MECHANISMS, originalValue))
{
Assert.IsTrue(attr.Type == ConvertUtils.UInt64FromCKA(
CKA.CKA_ALLOWED_MECHANISMS));
Assert.IsTrue(attr.GetValueAsCkmList() == originalValue);
}
originalValue = new List<CKM>();
using (IObjectAttribute attr = Settings.Factories.ObjectAttributeFactory.Create(
CKA.CKA_ALLOWED_MECHANISMS, originalValue))
{
Assert.IsTrue(attr.Type == ConvertUtils.UInt64FromCKA(
CKA.CKA_ALLOWED_MECHANISMS));
Assert.IsTrue(attr.GetValueAsCkmList() == null);
}
}
}
}