本文整理汇总了C++中CByteArray::Size方法的典型用法代码示例。如果您正苦于以下问题:C++ CByteArray::Size方法的具体用法?C++ CByteArray::Size怎么用?C++ CByteArray::Size使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CByteArray
的用法示例。
在下文中一共展示了CByteArray::Size方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ProcessInMsgs
void CBuzzController::ProcessInMsgs() {
/* Reset neighbor information */
buzzneighbors_reset(m_tBuzzVM);
/* Go through RAB messages and add them to the FIFO */
const CCI_RangeAndBearingSensor::TReadings& tPackets = m_pcRABS->GetReadings();
for(size_t i = 0; i < tPackets.size(); ++i) {
/* Copy packet into temporary buffer */
CByteArray cData = tPackets[i].Data;
/* Get robot id and update neighbor information */
UInt16 unRobotId = cData.PopFront<UInt16>();
buzzneighbors_add(m_tBuzzVM,
unRobotId,
tPackets[i].Range,
tPackets[i].HorizontalBearing.GetValue(),
tPackets[i].VerticalBearing.GetValue());
/* Go through the messages until there's nothing else to read */
UInt16 unMsgSize;
do {
/* Get payload size */
unMsgSize = cData.PopFront<UInt16>();
/* Append message to the Buzz input message queue */
if(unMsgSize > 0 && cData.Size() >= unMsgSize) {
buzzinmsg_queue_append(m_tBuzzVM,
unRobotId,
buzzmsg_payload_frombuffer(cData.ToCArray(), unMsgSize));
/* Get rid of the data read */
for(size_t i = 0; i < unMsgSize; ++i) cData.PopFront<UInt8>();
}
}
while(cData.Size() > sizeof(UInt16) && unMsgSize > 0);
}
/* Process messages */
buzzvm_process_inmsgs(m_tBuzzVM);
}
示例2: ProcessOutMsgs
void CBuzzController::ProcessOutMsgs() {
/* Send robot id */
CByteArray cData;
cData << m_tBuzzVM->robot;
/* Send messages from FIFO */
do {
/* Are there more messages? */
if(buzzoutmsg_queue_isempty(m_tBuzzVM->outmsgs)) break;
/* Get first message */
buzzmsg_payload_t m = buzzoutmsg_queue_first(m_tBuzzVM->outmsgs);
/* Make sure the next message fits the data buffer */
if(cData.Size() + buzzmsg_payload_size(m) + sizeof(UInt16)
>
m_pcRABA->GetSize()) {
buzzmsg_payload_destroy(&m);
break;
}
/* Add message length to data buffer */
cData << static_cast<UInt16>(buzzmsg_payload_size(m));
/* Add payload to data buffer */
cData.AddBuffer(reinterpret_cast<UInt8*>(m->data), buzzmsg_payload_size(m));
/* Get rid of message */
buzzoutmsg_queue_next(m_tBuzzVM->outmsgs);
buzzmsg_payload_destroy(&m);
} while(1);
/* Pad the rest of the data with zeroes */
while(cData.Size() < m_pcRABA->GetSize()) cData << static_cast<UInt8>(0);
/* Send message */
m_pcRABA->SetData(cData);
}
示例3: TestPteidCtrl
static long TestPteidCtrl(CReader & oReader, unsigned char ucVersion)
{
long lErrors = 0;
printf("\nTesting Ctrl()\n");
// CTRL_PTEID_GETCARDDATA
CByteArray oCardInfo = oReader.GetInfo();
CByteArray oUnsignedCardData = oReader.Ctrl(CTRL_PTEID_GETCARDDATA, CByteArray());
if (!oCardInfo.Equals(oUnsignedCardData))
ERR_LOG("ERR: Ctrl(CTRL_PTEID_GETCARDDATA) != GetInfo()\n", lErrors);
// CTRL_PTEID_GETSIGNEDCARDDATA
if (ucVersion >= 0x20)
{
CByteArray oSignedCardData = oReader.Ctrl(CTRL_PTEID_GETSIGNEDCARDDATA, CByteArray());
if (oSignedCardData.Size() != oUnsignedCardData.Size() + 128)
ERR_LOG("ERR: signed and unsigned card data should differ in size by 128 bytes\n", lErrors);
oSignedCardData.Chop(128);
if (!oUnsignedCardData.Equals(oSignedCardData))
ERR_LOG("ERR: start of unsigned card data should be the same as for unsigned card data\n", lErrors);
}
// CTRL_PTEID_GETSIGNEDPINSTATUS
if (ucVersion >= 0x20)
{
tPin pin = oReader.GetPin(0);
CByteArray oData(1);
oData.Append((unsigned char) pin.ulPinRef);
CByteArray oSignedPinStatus = oReader.Ctrl(CTRL_PTEID_GETSIGNEDPINSTATUS, oData);
if (oSignedPinStatus.Size() != 129)
ERR_LOG("ERR: signed pin status response should be (1 + 128) bytes\n", lErrors);
else if (oSignedPinStatus.GetByte(0) != oReader.PinStatus(pin))
ERR_LOG("ERR: signed pin status differs from unsigned PIN status\n", lErrors);
}
// CTRL_PTEID_INTERNAL_AUTH
CByteArray oData(21); // Key ref (1 byte) + challenge(20 bytes)
oData.Append(0x81);
for (int i = 0; i < 20; i++)
oData.Append((unsigned char) rand());
CByteArray oResp1 = oReader.Ctrl(CTRL_PTEID_INTERNAL_AUTH, oData);
if (oResp1.Size() != 128)
ERR_LOG("ERR: Internal Auth. didn't return 128 bytes\n", lErrors);
CByteArray oResp2 = oReader.Ctrl(CTRL_PTEID_INTERNAL_AUTH, oData);
if (!oResp1.Equals(oResp2))
ERR_LOG("ERR: Internal Auth. on the same data returns a different result\n", lErrors);
oData.SetByte(oData.GetByte(5) + 0x01, 5);
CByteArray oResp3 = oReader.Ctrl(CTRL_PTEID_INTERNAL_AUTH, oData);
if (oResp1.Equals(oResp3))
ERR_LOG("ERR: Internal Auth. on the different data returns the same result\n", lErrors);
return lErrors;
}
示例4: Equals
bool CByteArray::Equals(const CByteArray & oByteArray) const
{
if (m_bMallocError)
throw CMWEXCEPTION(EIDMW_ERR_MEMORY);
if (m_ulSize == 0 && oByteArray.Size() == 0)
return true;
return m_ulSize == oByteArray.Size() &&
memcmp(m_pucData, oByteArray.GetBytes(), m_ulSize) == 0;
}
示例5: WriteUncachedFile
void CPkiCard::WriteUncachedFile(const std::string & csPath,
unsigned long ulOffset, const CByteArray & oData)
{
CAutoLock autolock(this);
tFileInfo fileInfo = SelectFile(csPath, true);
const unsigned char *pucData = oData.GetBytes();
unsigned long ulDataLen = oData.Size();
for (unsigned long i = 0; i < ulDataLen; i += MAX_APDU_WRITE_LEN)
{
unsigned long ulLen = ulDataLen - i;
if (ulLen > MAX_APDU_WRITE_LEN)
ulLen = MAX_APDU_WRITE_LEN;
CByteArray oResp = UpdateBinary(ulOffset + i, CByteArray(pucData + i, ulLen));
unsigned long ulSW12 = getSW12(oResp);
if (ulSW12 == 0x6982)
throw CNotAuthenticatedException(
EIDMW_ERR_NOT_AUTHENTICATED, fileInfo.lWritePINRef);
else if (ulSW12 != 0x9000)
throw CMWEXCEPTION(m_poContext->m_oPCSC.SW12ToErr(ulSW12));
}
MWLOG(LEV_INFO, MOD_CAL, L"Written file %ls to card", utilStringWiden(csPath).c_str());
}
示例6: TestPteidSendApdu
static long TestPteidSendApdu(CReader & oReader)
{
long lErrors = 0;
printf("\nTesting SendAPDU()\n");
// Send a Get Card Data APDU
unsigned char tucGetCardData[] = {0x80, 0xE4, 0x00, 0x00, 0x1C};
CByteArray oGetCardData(tucGetCardData, sizeof(tucGetCardData));
CByteArray oData = oReader.SendAPDU(oGetCardData);
// Serial nr. are the first 16 bytes of the Get Card Data APDU
std::string csSerialNr = oReader.GetSerialNr();
if (csSerialNr != oData.ToString(false, true, 0, 16))
ERR_LOG("SendAPDU(GetCardData) returns wrong data (bad serial nr.)\n", lErrors);
// Send a Select MF APDU
unsigned char tucSelectMF[] = {0x00, 0xa4, 0x02, 0x0C, 0x02, 0x3f, 0x00};
CByteArray oSelectMF(tucSelectMF, sizeof(tucSelectMF));
oData = oReader.SendAPDU(oSelectMF);
// Result should be 90 00
if (oData.Size() != 2 || oData.GetByte(0) != 0x90 || oData.GetByte(1) != 0x00)
{
ERR_LOG("SendAPDU(GetCardData) returns wrong data (bad serial nr.)\n", lErrors);
printf(" (result = %s\n", oData.ToString().c_str());
}
return lErrors;
}
示例7: GetRandom
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;
}
示例8: UpdateFile
static long UpdateFile(const std::vector <std::string> & vcsPaths,
const CByteArray & oData, unsigned long ulOffset)
{
long lRet = 0;
CReader &oReader = g_oCardLayer.getReader(g_csReaderName);
if (oReader.Connect())
{
printf("Reader \"%s\":\n", oReader.GetReaderName().c_str());
// Verify PIN if specified
lRet = VerifyPIN(oReader, 0);
if (lRet == 0)
{
oReader.WriteFile(vcsPaths[0], ulOffset, oData);
printf("Written %d bytes to file %s, starting at offset %d\n",
oData.Size(), vcsPaths[0].c_str(), ulOffset);
}
oReader.Disconnect();
}
else
printf(" No card found in the reader, exiting\n");
return lRet;
}
示例9: SendAPDUs
static long SendAPDUs(std::vector <std::string> & vcsAPDUs)
{
long lRet = 0;
CReader &oReader = g_oCardLayer.getReader(g_csReaderName);
if (oReader.Connect())
{
for (unsigned int i = 0; i < vcsAPDUs.size(); i++)
{
CByteArray oRequestAPDU(vcsAPDUs[i], true);
printf("\nIN: %s\n", oRequestAPDU.ToString().c_str());
CByteArray oResponseAPDU = oReader.SendAPDU(oRequestAPDU);
printf("OUT: %s\n", oResponseAPDU.Size() < 14 ? oResponseAPDU.ToString().c_str():
oResponseAPDU.ToString(true, false).c_str());
}
oReader.Disconnect();
}
else
printf(" No card found in the reader, exiting\n");
return lRet;
}
示例10: SignInternal
CByteArray CBeidCard::SignInternal(const tPrivKey & key, unsigned long algo,
const CByteArray & oData, const tPin *pPin)
{
CAutoLock autolock(this);
// For V1.7 cards, the Belpic dir has to be selected
if (m_ucAppletVersion >= 0x17)
SelectFile(key.csPath);
else if (m_selectAppletMode == ALW_SELECT_APPLET)
SelectApplet();
SetSecurityEnv(key, algo, oData.Size());
// Pretty unique for smart cards: first MSE SET, then verify PIN
// (needed for the nonrep key/pin, but also usable for the auth key/pin)
if (pPin != NULL)
{
//unsigned long ulRemaining = 0;
bool bOK = PinCmd(PIN_OP_VERIFY, *pPin, "", "", m_ulRemaining, &key);
if (!bOK)
throw CMWEXCEPTION(m_ulRemaining == 0 ? EIDMW_ERR_PIN_BLOCKED : EIDMW_ERR_PIN_BAD);
}
// PSO: Compute Digital Signature
CByteArray oResp = SendAPDU(0x2A, 0x9E, 0x9A, oData);
unsigned long ulSW12 = getSW12(oResp);
if (ulSW12 != 0x9000)
throw CMWEXCEPTION(m_poContext->m_oPCSC.SW12ToErr(ulSW12));
// Remove SW1-SW2 from the response
oResp.Chop(2);
return oResp;
}
示例11: BeidCardSelectApplet
static bool BeidCardSelectApplet(CContext *poContext, SCARDHANDLE hCard)
{
long lRetVal = 0;
unsigned char tucSelectApp[] = {0x00, 0xA4, 0x04, 0x00};
CByteArray oCmd(40);
oCmd.Append(tucSelectApp, sizeof(tucSelectApp));
oCmd.Append((unsigned char) sizeof(APPLET_AID));
oCmd.Append(APPLET_AID, sizeof(APPLET_AID));
CByteArray oResp;
try {
oResp = poContext->m_oPCSC.Transmit(hCard, oCmd, &lRetVal);
}
catch(CMWException e)
{
MWLOG(LEV_CRIT, MOD_CAL, L"Failed to select applet: 0x%0x", e.GetError());
return false;
}
catch(...)
{
MWLOG(LEV_CRIT, MOD_CAL, L"Failed to select applet");
return false;
}
return (oResp.Size() == 2 && (oResp.GetByte(0) == 0x61 || oResp.GetByte(0) == 0x90));
}
示例12: ListReaders
/**
* This is something you typically do just once, unless you
* want to check if new readers were inserted/removed.
* Note: PKCS#11 assumes that the number of readers never
* change, so you have to call this function only in
* C_GetSlotList().
*/
CReadersInfo CCardLayer::ListReaders()
{
CReadersInfo theReadersInfo;
CByteArray oReaders;
// Do an SCardEstablishContext() if not done yet
try
{
m_oPCSC.EstablishContext();
oReaders = m_oPCSC.ListReaders();
}
catch(CMWException & e)
{
unsigned long err = e.GetError();
if (err == EIDMW_ERR_NO_READER)
return theReadersInfo;
throw;
}
theReadersInfo = CReadersInfo(oReaders);
if (oReaders.Size() != 0)
{
m_szDefaultReaderName = (char *) oReaders.GetBytes();
}
return theReadersInfo;
}
示例13: SetData
void CCI_RangeAndBearingActuator::SetData(const CByteArray& c_data) {
if(m_cData.Size() == c_data.Size()) {
m_cData = c_data;
}
else {
THROW_ARGOSEXCEPTION("CCI_RangeAndBearingActuator::SetData() : data size does not match, expected " << m_cData.Size() << ", got " << c_data.Size());
}
}
示例14: SetData
void CRABEquippedEntity::SetData(const CByteArray& c_data) {
if(m_cData.Size() == c_data.Size()) {
m_cData = c_data;
}
else {
THROW_ARGOSEXCEPTION("CRABEquippedEntity::SetData() : data size does not match, expected " << m_cData.Size() << ", got " << c_data.Size());
}
}
示例15: ReadUncachedFile
CByteArray CPkiCard::ReadUncachedFile(const std::string & csPath,
unsigned long ulOffset, unsigned long ulMaxLen)
{
CByteArray oData(ulMaxLen);
CAutoLock autolock(this);
tFileInfo fileInfo = SelectFile(csPath, true);
// Loop until we've read ulMaxLen bytes or until EOF (End Of File)
bool bEOF = false;
for (unsigned long i = 0; i < ulMaxLen && !bEOF; i += MAX_APDU_READ_LEN)
{
unsigned long ulLen = ulMaxLen - i <= MAX_APDU_READ_LEN ?
ulMaxLen - i : MAX_APDU_READ_LEN;
CByteArray oResp = ReadBinary(ulOffset + i, ulLen);
unsigned long ulSW12 = getSW12(oResp);
// If the file is a multiple of the block read size, you will get
// an SW12 = 6B00 (at least with BE eID) but that OK then..
if (ulSW12 == 0x9000 || (i != 0 && ulSW12 == 0x6B00))
oData.Append(oResp.GetBytes(), oResp.Size() - 2);
else if (ulSW12 == 0x6982) {
throw CNotAuthenticatedException(
EIDMW_ERR_NOT_AUTHENTICATED, fileInfo.lReadPINRef);
}
else if (ulSW12 == 0x6B00)
throw CMWEXCEPTION(EIDMW_ERR_PARAM_RANGE);
else if (ulSW12 == 0x6D00)
throw CMWEXCEPTION(EIDMW_ERR_NOT_ACTIVATED);
else
throw CMWEXCEPTION(m_poContext->m_oPCSC.SW12ToErr(ulSW12));
// If the driver/reader itself did the 6CXX handling,
// we assume we're at the EOF
if (oResp.Size() < MAX_APDU_READ_LEN)
bEOF = true;
}
MWLOG(LEV_INFO, MOD_CAL, L" Read file %ls (%d bytes) from card",
utilStringWiden(csPath).c_str(), oData.Size());
return oData;
}