亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mac_security.c

?? zigbee location examples
?? C
字號:
/*******************************************************************************************************
 *                                                                                                     *
 *        **********                                                                                   *
 *       ************                                                                                  *
 *      ***        ***                                                                                 *
 *      ***   +++   ***                                                                                *
 *      ***   + +   ***                                                                                *
 *      ***   +                        CHIPCON CC2430 INTEGRATED 802.15.4 MAC AND PHY                  *
 *      ***   + +   ***                MAC Security Support                                            *
 *      ***   +++   ***                                                                                *
 *      ***        ***                                                                                 *
 *       ************                                                                                  *
 *        **********                                                                                   *
 *                                                                                                     *
 *******************************************************************************************************
 * CONFIDENTIAL                                                                                        *
 * The use of this file is restricted by the signed MAC software license agreement.                    *
 *                                                                                                     *
 * Copyright Chipcon AS, 2005                                                                          *
 *******************************************************************************************************
 * This file implements the MAC security support functions, used internally in the MAC sublayer        *
 *******************************************************************************************************/
#include <mac_headers.h>


#if (MAC_OPT_SECURITY)

//-------------------------------------------------------------------------------------------------------
//  BYTE msecFindSecurityMaterial(BOOL isTX, BYTE addrMode, WORD panId, ADDRESS *pAddr, ...
//
//  DESCRIPTION:
//      Support function for selecting the correct security material.
//      First search the ACL, then default security. If neither is available for this frame,
//      return with the value UNAVAILABLE_KEY
//      Used ONLY for outgoing packets (incoming packets handled in receive routine)
//
//  PARAMETERS:
//
//  RETURN VALUE:
//      BYTE
//          UNAVAILABLE_KEY if no key is available
//          securitySuite (0 - 7) otherwise
//-------------------------------------------------------------------------------------------------------
ROOT void msecFindTxSecurityMaterial(MAC_TX_PACKET *pPacket, BOOL securityEnable, BYTE addrMode, WORD panId, ADDRESS *pAddr) {
    BYTE n;
    BOOL aclFound = FALSE;
    BYTE securitySuite;
    SECURITY_MATERIAL *pSecurityMaterial;

    if (securityEnable) {
        securitySuite = UNAVAILABLE_KEY;
        pSecurityMaterial = NULL;

        // Search through ACL for extended addresses
        for (n=0; n<mpib.macACLEntryDescriptorSetSize; n++) {
            if (addrMode == AM_EXTENDED_64) {
                if (msupCompareAddress(&pAddr->Extended, &mpib.ppMacACLEntryDescriptorSet[n]->extendedAddress)) {
                    aclFound = TRUE;
                    break;
                }
            } else if ((addrMode == AM_SHORT_16) && (panId == mpib.ppMacACLEntryDescriptorSet[n]->panId)) {
                if (pAddr->Short == mpib.ppMacACLEntryDescriptorSet[n]->shortAddress) {
                    aclFound = TRUE;
                    break;
                }
            }
        }

        if (aclFound) {
            pSecurityMaterial = &mpib.ppMacACLEntryDescriptorSet[n]->securityMaterial;
            securitySuite = mpib.ppMacACLEntryDescriptorSet[n]->securitySuite;

        // Is default security available ?
        // Default security can only be used in TX (when the 64 bit destination address is equal to
        // aExtendedAddress) or in RX when the source address mode is extended.
        } else if ((mpib.macSecurityMode == MAC_SECURED_MODE) && (mpib.macDefaultSecurity) && (securityEnable)) {
            // Default security enabled
            pSecurityMaterial = mpib.pMacDefaultSecurityMaterial;
            securitySuite = mpib.macDefaultSecuritySuite;
        }

        pPacket->pSecurityMaterial = pSecurityMaterial;
        pPacket->securitySuite = securitySuite;

    } else {
        // Security not enabled, no key is necessary
        pPacket->securitySuite = MAC_SECURITY_NONE;
    }
} // msecFindSecurityMaterial




//-------------------------------------------------------------------------------------------------------
//  void msecDecodeSecuritySuite(MSEC_SETUP_INFO *pMSI, BYTE securityMode)
//
//  DESCRIPTION:
//      Decodes the given security mode, and sets up the MSEC_SETUP_INFO struct with the necessary
//      information.
//
//  PARAMETERS:
//      MSEC_SETUP_INFO *pMSI
//          Pointer to the MSEC_SETUP_INFO struct used for RX or TX
//
//      BYTE securityMode
//          MAC security mode
//          (MAC_SECURITY_NONE |  MAC_SECURITY_AES_CTR | MAC_SECURITY_AES_CCM128 |
//           MAC_SECURITY_AES_CCM64 | MAC_SECURITY_AES_CCM32 | MAC_SECURITY_AES_CBC_MAC128 |
//           MAC_SECURITY_AES_CBC_MAC64 | MAC_SECURITY_AES_CBC_MAC32)
//
//  RETURN VALUE:
//      void
//-------------------------------------------------------------------------------------------------------
ROOT void msecDecodeSecuritySuite(MSEC_SETUP_INFO *pMSI, BYTE securitySuite) {

    // Which security mode is used?
    switch (securitySuite) {
    case MAC_SECURITY_AES_CCM128:
        pMSI->secFlags2420 = MAC_CC2420_CCM_FLAGS;
        pMSI->secMode2420 = CC2420_SECCTRL0_CCM | (7 << CC2420_SECCTRL0_SEC_M_IDX);
        pMSI->micLength = 16;
        break;
    case MAC_SECURITY_AES_CCM64:
        pMSI->secFlags2420 = MAC_CC2420_CCM_FLAGS;
        pMSI->secMode2420 = CC2420_SECCTRL0_CCM | (3 << CC2420_SECCTRL0_SEC_M_IDX);
        pMSI->micLength = 8;
        break;
    case MAC_SECURITY_AES_CCM32:
        pMSI->secFlags2420 = MAC_CC2420_CCM_FLAGS;
        pMSI->secMode2420 = CC2420_SECCTRL0_CCM | (1 << CC2420_SECCTRL0_SEC_M_IDX);
        pMSI->micLength = 4;
        break;
    case MAC_SECURITY_AES_CBC_MAC128:
        pMSI->secFlags2420 = 0;
        pMSI->secMode2420 = CC2420_SECCTRL0_CBC_MAC | (7 << CC2420_SECCTRL0_SEC_M_IDX);
        pMSI->micLength = 16;
        pMSI->clearTextLength = 0;
        break;
    case MAC_SECURITY_AES_CBC_MAC64:
        pMSI->secFlags2420 = 0;
        pMSI->secMode2420 = CC2420_SECCTRL0_CBC_MAC | (3 << CC2420_SECCTRL0_SEC_M_IDX);
        pMSI->micLength = 8;
        pMSI->clearTextLength = 0;
        break;
    case MAC_SECURITY_AES_CBC_MAC32:
        pMSI->secFlags2420 = 0;
        pMSI->secMode2420 = CC2420_SECCTRL0_CBC_MAC | (1 << CC2420_SECCTRL0_SEC_M_IDX);
        pMSI->micLength = 4;
        pMSI->clearTextLength = 0;
        break;
    case MAC_SECURITY_AES_CTR:
        pMSI->secFlags2420 = MAC_CC2420_CTR_FLAGS;
        pMSI->secMode2420 = CC2420_SECCTRL0_CTR;
        pMSI->micLength = 0;
        break;
    default:
        pMSI->secFlags2420 = 0;
        pMSI->secMode2420 = 0;
        pMSI->micLength = 0;
        break;
    }
} // msecDecodeSecuritySuite




//-------------------------------------------------------------------------------------------------------
//  void msecSetupCC2420KeyAndNonce(BOOL isTx, MSEC_SETUP_INFO *pMSI, KEY pKey, BYTE* pCounters)
//
//  DESCRIPTION:
//      Sets up CC2420 key and (optionally) nonce in CC2420 before RX / TX security operations
//
//  PARAMETERS:
//      BOOL isTx
//          TRUE for TX (FALSE for RX)
//      MSEC_SETUP_INFO *pMSI,
//          Pointer to the security setup struct in use
//      KEY pKey,
//          Pointer to the 16-byte (128 bit) key
//      BYTE* pCounters
//          Pointer to the Frame Counter (4 bytes) and Key Sequence Counter (1 byte)
//-------------------------------------------------------------------------------------------------------
ROOT void msecSetupCC2420KeyAndNonce(BOOL isTx, MSEC_SETUP_INFO *pMSI, KEY pKey, BYTE* pCounters) {
    UINT16 keyAddressCC2420;
    UINT8 n;
    ADDRESS* pExtendedAddress;

    // Write 128-bit key to CC2420 RAM, using KEY0 for TX and KEY1 for RX
    if (isTx) {
        keyAddressCC2420 = CC2420RAM_KEY0;
    } else {
        keyAddressCC2420 = CC2420RAM_KEY1;
    }

    // Write key to CC2420 RAM
    msupWriteRam(pKey, keyAddressCC2420, 16, TRUE);

    // Write nonce/counter to CC2420 RAM, unless we are in CBC-MAC mode where the nonce/counter value is not used.
    if (pMSI->secFlags2420) {

        DISABLE_GLOBAL_INT();
        SPI_ENABLE();

        // RAM address
        if (isTx) {
            FASTSPI_TX(0x80 | (CC2420RAM_TXNONCE & 0x7F));
            FASTSPI_TX((CC2420RAM_TXNONCE >> 1) & 0xC0);
        } else {
            FASTSPI_TX(0x80 | (CC2420RAM_RXNONCE & 0x7F));
            FASTSPI_TX((CC2420RAM_RXNONCE >> 1) & 0xC0);
        }

        // The 2-byte counter is initialized as 0 in counter mode, 1 in CCM
        FASTSPI_TX(pMSI->secFlags2420 == MAC_CC2420_CCM_FLAGS);
        FASTSPI_TX(0);

        // Key sequence counter (1 byte) and frame counter (4 bytes)
        n = 5;
        pCounters += 4;
        do {
            FASTSPI_TX(*(pCounters--));
        } while (--n);

        if (isTx) {
            pExtendedAddress = &aExtendedAddress;
        } else {
            pExtendedAddress = mrxSecurityInfo.pExtendedAddress;
        }

        // Extended source address
        FASTSPI_TX_MANY((BYTE*) pExtendedAddress, 8);

        // Flag byte
        FASTSPI_TX(pMSI->secFlags2420);

        SPI_DISABLE();
        ENABLE_GLOBAL_INT();
    }
} // msupSetupCC2420KeyAndNonce




//-------------------------------------------------------------------------------------------------------
//  void msecSetupCC2420Regs(MSEC_SETUP_INFO *pMSI)
//
//  DESCRIPTION:
//      Sets up CC2420 security registers according to the security information struct
//
//  PARAMETERS:
//      MSEC_SETUP_INFO *pMSI,
//          Pointer to the security setup struct in use
//-------------------------------------------------------------------------------------------------------
ROOT void msecSetupCC2420Regs(MSEC_SETUP_INFO *pMSI) {
    BYTE cleartextLength;

    DISABLE_GLOBAL_INT();

    // Configure CC2420 hardware security registers
    if (pMSI->secMode2420) {
        if (pMSI->secFlags2420) {

            cleartextLength = pMSI->clearTextLength;
            FASTSPI_SETREG(CC2420_SECCTRL1, ((cleartextLength) << 8) | (cleartextLength));

        } else {
            // l(a) = 0 for CBC-MAC
            FASTSPI_SETREG(CC2420_SECCTRL1, 0);
        }
    }

    // Configure CC2420 hardware security registers
    FASTSPI_SETREG(CC2420_SECCTRL0, CC2420_SECCTRL0_RXFIFO_PROTECTION | CC2420_SECCTRL0_SEC_CBC_HEAD | CC2420_SECCTRL0_TXKEYSEL0 | CC2420_SECCTRL0_RXKEYSEL1 | ((WORD) pMSI->secMode2420));
    ENABLE_GLOBAL_INT();
} // msecSetupCC2420Regs




//-------------------------------------------------------------------------------------------------------
//  UINT8 msecProcessSecurityCounters(MAC_TX_PACKET *pPacket, BYTE *pPayload)
//
//  DESCRIPTION:
//      Inserts frame counter (4 bytes) and key sequence counter (1 byte) into an outgoing frame,
//      if the security suite is CTR or CCM.
//      Counters are inserted from the pointer pPayload, and frame counter is incremented.
//      pPacket->securitySuite is set to FAILED_SECURITY_CHECK if frame counter overflows.
//
//  PARAMETERS:
//      MAC_TX_PACKET *pPacket
//          Pointer to the outgoing packet in which security is to be inserted
//      BYTE *pPayload
//          Byte pointer to the location where the pointers should be inserted
//
//  RETURN VALUE
//      UINT8
//          Number of bytes (0 or 5) inserted into the frame
//-------------------------------------------------------------------------------------------------------
ROOT UINT8 msecProcessSecurityCounters(MAC_TX_PACKET *pPacket, BYTE *pPayload) {
    BYTE *pSource;
    SECURITY_MATERIAL *pSecurityMaterial;

    // Only CTR mode and CCM mode have the security flags set,
    // and these modes require frame counter / key sequence counter
    if (pPacket->securitySetup.secFlags2420) {

        // Set up pointer to security material for faster access
        pSecurityMaterial = pPacket->pSecurityMaterial;

        // Copy the frame counter / key sequence counter into the frame
        // with the MOST significant byte being transmitted FIRST
        pSource = (BYTE*) &pSecurityMaterial->frameCounter + 3;

        *(pPayload++) = *(pSource--);
        *(pPayload++) = *(pSource--);
        *(pPayload++) = *(pSource--);
        *(pPayload++) = *(pSource);

        *(pPayload++) = pSecurityMaterial->keySequenceCounter;

        if (pSecurityMaterial->frameCounter == 0xFFFF) {
            // Frame counter cannot be incremented
            pPacket->securitySuite = FAILED_SECURITY_CHECK;
        } else {
            // Increment frame counter
            pSecurityMaterial->frameCounter++;
        }

        pPacket->securitySetup.clearTextLength += 5;

        return 5;  // Frame Counter (4 bytes) and Key Sequence Counter (1 byte)

    // No frame counter / key sequence counter
    } else {
        return 0;
    }
}

#endif // MAC_OPT_SECURITY

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品男人天堂av| 7799精品视频| 国产精品看片你懂得| 国产一区二区伦理片| 久久综合狠狠综合久久激情| 久久精品国产一区二区三| 精品国产麻豆免费人成网站| 美国av一区二区| 欧美一级欧美一级在线播放| 免费观看30秒视频久久| 久久免费视频一区| 99视频在线精品| 亚洲国产日产av| 日韩丝袜情趣美女图片| 久99久精品视频免费观看| 国产日韩视频一区二区三区| 91年精品国产| 日韩中文字幕av电影| 精品久久久久久久久久久院品网 | 国产一区二区三区综合| 国产欧美日韩三区| 欧洲精品一区二区| 卡一卡二国产精品| 国产精品免费aⅴ片在线观看| 色欲综合视频天天天| 亚洲高清不卡在线观看| 2024国产精品视频| 99视频在线精品| 理论片日本一区| 国产精品久久久久久久岛一牛影视 | 欧美色爱综合网| 美国三级日本三级久久99| 国产精品久久99| 欧美日本免费一区二区三区| 激情偷乱视频一区二区三区| 亚洲欧洲综合另类在线| 欧美精品一区二| 日本韩国一区二区三区| 久久国产免费看| 亚洲猫色日本管| 精品捆绑美女sm三区| 在线精品视频一区二区三四| 国产一区二区在线影院| 亚洲综合在线五月| 国产片一区二区| 欧美一区二区在线不卡| 白白色亚洲国产精品| 久久se这里有精品| 亚洲一区日韩精品中文字幕| 久久精品一区二区| 欧美高清视频在线高清观看mv色露露十八 | 日本少妇一区二区| 中文字幕一区二区在线观看| 精品久久久久久久久久久久久久久 | 欧美综合在线视频| 国产麻豆精品在线| 日韩高清电影一区| 亚洲精品日韩一| 国产日韩精品一区| 精品国内二区三区| 制服丝袜国产精品| 欧美午夜视频网站| 色综合天天天天做夜夜夜夜做| 精品一区二区三区日韩| 婷婷开心激情综合| 国产精品伦一区二区三级视频| 日韩午夜激情免费电影| 在线观看免费一区| 91蜜桃在线观看| 成人一区在线看| 国产成人精品免费在线| 久久99精品国产.久久久久久| 性感美女极品91精品| 国产精品无圣光一区二区| 久久精品夜色噜噜亚洲aⅴ| 欧美一卡二卡在线| 91精品国产一区二区三区| 欧美日韩一区二区三区在线看| 97se亚洲国产综合自在线| av网站免费线看精品| 成人免费视频网站在线观看| 国产麻豆精品theporn| 国产精品中文字幕日韩精品| 国产一区二区主播在线| 国产成人自拍在线| 国产mv日韩mv欧美| 成人18精品视频| 成人国产视频在线观看| 91蜜桃视频在线| 在线观看三级视频欧美| 欧美精品视频www在线观看| 欧美色电影在线| 欧美一区二区三区在| 日韩亚洲电影在线| 久久久久成人黄色影片| 国产精品少妇自拍| 亚洲三级在线免费| 亚洲国产美女搞黄色| 天堂一区二区在线免费观看| 久久精品久久精品| 成人黄色电影在线 | 久久成人免费网站| 国产精品影视网| 99久久精品国产导航| 色综合天天天天做夜夜夜夜做| 91精品国产综合久久久久久漫画| 欧美精品精品一区| 精品欧美一区二区久久| 欧美国产综合色视频| 一区二区三区中文字幕在线观看| 天天av天天翘天天综合网 | 韩国视频一区二区| 成人网在线免费视频| 欧美性做爰猛烈叫床潮| 欧美一区二区播放| 最新中文字幕一区二区三区| 亚洲成人av福利| 国产一区999| 欧美在线观看视频一区二区三区| 日韩欧美高清在线| 亚洲人成小说网站色在线| 日韩电影网1区2区| 粉嫩av亚洲一区二区图片| 在线看一区二区| 久久五月婷婷丁香社区| 一区二区三区免费| 精品一区二区三区在线播放| av高清不卡在线| 日韩一区国产二区欧美三区| 最新欧美精品一区二区三区| 久久99精品久久久| 在线观看日韩高清av| 国产日韩在线不卡| 男人的天堂久久精品| 色综合一个色综合亚洲| 欧美精品一区二区高清在线观看| 亚洲精品写真福利| 国产乱人伦精品一区二区在线观看 | 欧美主播一区二区三区| 精品国产髙清在线看国产毛片| 亚洲欧美成aⅴ人在线观看| 久久国产精品色婷婷| 欧洲亚洲国产日韩| 最近日韩中文字幕| 精品在线你懂的| 欧美日韩精品一二三区| 亚洲欧美综合网| 国产v综合v亚洲欧| 精品国产a毛片| 五月综合激情婷婷六月色窝| www.亚洲色图| 国产欧美一区二区在线| 激情六月婷婷久久| 91精品国产综合久久久蜜臀粉嫩| 一区二区三区色| 91香蕉视频mp4| 国产香蕉久久精品综合网| 日本不卡高清视频| 欧美一区二区三级| 图片区小说区国产精品视频| 欧美性做爰猛烈叫床潮| 亚洲综合一二区| 色婷婷一区二区三区四区| 亚洲日本青草视频在线怡红院 | 午夜精品久久久久| 在线观看www91| 一区二区三区 在线观看视频| caoporn国产精品| 国产精品嫩草99a| 成人国产一区二区三区精品| 国产精品亲子伦对白| 粉嫩av亚洲一区二区图片| 中文字幕巨乱亚洲| 成人美女视频在线看| 国产精品久久久久影院老司| 国产a区久久久| 亚洲国产成人一区二区三区| 成人深夜福利app| 国产精品久久久久久户外露出 | 亚洲h在线观看| 欧美精品在线观看播放| 蜜臀精品久久久久久蜜臀| 日韩一卡二卡三卡四卡| 久久黄色级2电影| 久久综合视频网| 成人深夜在线观看| 亚洲男帅同性gay1069| 欧美日韩视频专区在线播放| 石原莉奈在线亚洲二区| 日韩亚洲欧美在线| 国产精品亚洲成人| 亚洲欧洲在线观看av| 欧美午夜精品久久久久久孕妇 | 国产精品久久一级| 91麻豆免费观看| 亚洲成人av中文| 精品va天堂亚洲国产| 99久久久久久| 日韩精品电影一区亚洲| 精品理论电影在线观看|