internal int AddObject(CryptokiObjectType type, object data) { int handle = Interlocked.Increment(ref s_nextHandle); m_objects[handle] = new CryptokiObject(type, data); return(handle); }
internal CryptokiObject(CryptokiObjectType type, object data) { Type = type; Data = data; }
public bool FindObjectsInit(int session, IntPtr pTemplate, int ulCount) { try { SessionData ctx = ((SessionDriver)this.Hal.Session).GetSessionCtx(session); if (ctx.FindObjCtx != null) { return(false); } ctx.FindObjCtx = new FindObjectsContext(); string fileName = ""; string group = ""; CryptokiObjectType type = CryptokiObjectType.Data; byte[] data; while (ulCount-- > 0) { CryptokiAttribute attrib = new CryptokiAttribute(); Marshal.PtrToStructure(pTemplate, attrib); switch ((CryptokiAttribType)attrib.type) { case CryptokiAttribType.Class: switch ((CryptokiClass)Marshal.ReadInt32(attrib.pValue)) { case CryptokiClass.CERTIFICATE: type = CryptokiObjectType.Cert; break; case CryptokiClass.OTP_KEY: type = CryptokiObjectType.Key; break; } break; case CryptokiAttribType.ObjectID: data = new byte[attrib.ulValueLen]; Marshal.Copy(attrib.pValue, data, 0, data.Length); fileName = UTF8Encoding.UTF8.GetString(data); break; case CryptokiAttribType.Label: data = new byte[attrib.ulValueLen]; Marshal.Copy(attrib.pValue, data, 0, data.Length); group = UTF8Encoding.UTF8.GetString(data); break; } pTemplate += Marshal.SizeOf(attrib); } ctx.FindObjCtx.FileName = fileName; ctx.FindObjCtx.Group = group; ctx.FindObjCtx.Type = type; return(true); } catch { return(false); } }