/// <summary>
        /// Creates attribute of given type with mechanism array value
        /// </summary>
        /// <param name="type">Attribute type</param>
        /// <param name="value">Attribute value</param>
        public ObjectAttribute(CKA type, List <CKM> value)
        {
            CKM[] mechanisms = null;

            if (value != null)
            {
                mechanisms = value.ToArray();
            }

            _ckAttribute = LowLevelAPI.CkaUtils.CreateAttribute(type, mechanisms);
        }
        /// <summary>
        /// Creates attribute of given type with uint array value
        /// </summary>
        /// <param name="type">Attribute type</param>
        /// <param name="value">Attribute value</param>
        public ObjectAttribute(CKA type, List <uint> value)
        {
            uint[] uints = null;

            if (value != null)
            {
                uints = value.ToArray();
            }

            _ckAttribute = LowLevelAPI.CkaUtils.CreateAttribute(type, uints);
        }
        /// <summary>
        /// Creates attribute of given type with attribute array value
        /// </summary>
        /// <param name="type">Attribute type</param>
        /// <param name="value">Attribute value</param>
        public ObjectAttribute(CKA type, List <ObjectAttribute> value)
        {
            LowLevelAPI.CK_ATTRIBUTE[] attributes = null;

            if (value != null)
            {
                attributes = new LowLevelAPI.CK_ATTRIBUTE[value.Count];
                for (int i = 0; i < value.Count; i++)
                {
                    attributes[i] = value[i].CkAttribute;
                }
            }

            // Note: Each attribute in the input list still owns unmanaged memory used by its value and will free it when disposed.
            _ckAttribute = LowLevelAPI.CkaUtils.CreateAttribute(type, attributes);
        }
 /// <summary>
 /// Creates attribute defined by low level CK_ATTRIBUTE structure
 /// </summary>
 /// <param name="attribute">CK_ATTRIBUTE structure</param>
 internal ObjectAttribute(LowLevelAPI.CK_ATTRIBUTE attribute)
 {
     _ckAttribute = attribute;
 }
 /// <summary>
 /// Creates attribute of given type with DateTime (CK_DATE) value
 /// </summary>
 /// <param name="type">Attribute type</param>
 /// <param name="value">Attribute value</param>
 public ObjectAttribute(CKA type, DateTime value)
 {
     _ckAttribute = LowLevelAPI.CkaUtils.CreateAttribute(type, value);
 }
 /// <summary>
 /// Creates attribute of given type with byte array value
 /// </summary>
 /// <param name="type">Attribute type</param>
 /// <param name="value">Attribute value</param>
 public ObjectAttribute(uint type, byte[] value)
 {
     _ckAttribute = LowLevelAPI.CkaUtils.CreateAttribute(type, value);
 }
 /// <summary>
 /// Creates attribute of given type with no value
 /// </summary>
 /// <param name="type">Attribute type</param>
 public ObjectAttribute(CKA type)
 {
     _ckAttribute = LowLevelAPI.CkaUtils.CreateAttribute(type);
 }