コード例 #1
0
ファイル: pkicard.cpp プロジェクト: giapdangle/eid-mw
CByteArray CPkiCard::GetRandom(unsigned long ulLen)
{
	CAutoLock oAutoLock(this);

	if (m_selectAppletMode == ALW_SELECT_APPLET)
	{
		SelectApplet();
	}

	CByteArray oRandom(ulLen);

try_again:
    // Use a Get Challenge command to gather 8 bytes with each loop
    for (unsigned long i = 0; i < ulLen; i += 20)
    {
        unsigned char ucLen = (unsigned char) (ulLen - i > 20 ? 20 : ulLen - i);

        // Get challenge command
        CByteArray oResp = SendAPDU(0x84, 0x00, 0x00, (unsigned char) ucLen);
		if (ShouldSelectApplet(0x84, getSW12(oResp)))
		{
			// First try to select 
			if (SelectApplet())
			{
				m_selectAppletMode = ALW_SELECT_APPLET;
				goto try_again;
			}
		}
		getSW12(oResp, 0x9000);

		oRandom.Append(oResp.GetBytes(), oResp.Size() - 2);
    }

    return oRandom;
}
コード例 #2
0
ファイル: mdbPeerInfo.cpp プロジェクト: alienyu9527/QMDB81
void TMdbPeerInfo::SetMsgHandleMode(bool bDetached)
{
    TMdbNtcAutoLock oAutoLock(&m_oSpinLock);
    if(bDetached)
    {
        m_uiPeerFlag = (MDB_UINT16)(m_uiPeerFlag|MDB_NTC_PEER_MSG_DETACHED_FLAG);
        if(m_pRecvMsgQueue == NULL) m_pRecvMsgQueue = new TMdbNtcQueue;
    }
    else
    {
        m_uiPeerFlag = (MDB_UINT16)(m_uiPeerFlag&(~MDB_NTC_PEER_MSG_DETACHED_FLAG));
        if(m_pRecvMsgQueue == NULL) return;
        do
        {
            TMdbMsgInfo* pMsgInfo = static_cast<TMdbMsgInfo*>(m_pRecvMsgQueue->Pop(0));
            if(pMsgInfo == NULL) break;
            this->GetEventDispatcher()->Dispatch(new TMdbRecvMsgEvent(this, pMsgInfo));
        } while (1);
        m_pRecvMsgQueue->Wakeup();
    }
}