Beispiel #1
0
        internal int AddObject(CryptokiObjectType type, object data)
        {
            int handle = Interlocked.Increment(ref s_nextHandle);

            m_objects[handle] = new CryptokiObject(type, data);

            return(handle);
        }
Beispiel #2
0
 internal CryptokiObject(CryptokiObjectType type, object data)
 {
     Type = type;
     Data = data;
 }
Beispiel #3
0
        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);
            }
        }