⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mac_security.s51

📁 zigbee location examples
💻 S51
📖 第 1 页 / 共 2 页
字号:
//  140         pMSI->secFlags2420 = 0;
//  141         pMSI->secMode2420 = CC2420_SECCTRL0_CBC_MAC | (3 << CC2420_SECCTRL0_SEC_M_IDX);
//  142         pMSI->micLength = 8;
//  143         pMSI->clearTextLength = 0;
//  144         break;
//  145     case MAC_SECURITY_AES_CBC_MAC32:
//  146         pMSI->secFlags2420 = 0;
//  147         pMSI->secMode2420 = CC2420_SECCTRL0_CBC_MAC | (1 << CC2420_SECCTRL0_SEC_M_IDX);
//  148         pMSI->micLength = 4;
//  149         pMSI->clearTextLength = 0;
//  150         break;
//  151     case MAC_SECURITY_AES_CTR:
//  152         pMSI->secFlags2420 = MAC_CC2420_CTR_FLAGS;
//  153         pMSI->secMode2420 = CC2420_SECCTRL0_CTR;
//  154         pMSI->micLength = 0;
//  155         break;
//  156     default:
//  157         pMSI->secFlags2420 = 0;
//  158         pMSI->secMode2420 = 0;
//  159         pMSI->micLength = 0;
//  160         break;
//  161     }
//  162 } // msecDecodeSecuritySuite
//  163 
//  164 
//  165 
//  166 
//  167 //-------------------------------------------------------------------------------------------------------
//  168 //  void msecSetupCC2420KeyAndNonce(BOOL isTx, MSEC_SETUP_INFO *pMSI, KEY pKey, BYTE* pCounters)
//  169 //
//  170 //  DESCRIPTION:
//  171 //      Sets up CC2420 key and (optionally) nonce in CC2420 before RX / TX security operations
//  172 //
//  173 //  PARAMETERS:
//  174 //      BOOL isTx
//  175 //          TRUE for TX (FALSE for RX)
//  176 //      MSEC_SETUP_INFO *pMSI,
//  177 //          Pointer to the security setup struct in use
//  178 //      KEY pKey,
//  179 //          Pointer to the 16-byte (128 bit) key
//  180 //      BYTE* pCounters
//  181 //          Pointer to the Frame Counter (4 bytes) and Key Sequence Counter (1 byte)
//  182 //-------------------------------------------------------------------------------------------------------
//  183 ROOT void msecSetupCC2420KeyAndNonce(BOOL isTx, MSEC_SETUP_INFO *pMSI, KEY pKey, BYTE* pCounters) {
//  184     UINT16 keyAddressCC2420;
//  185     UINT8 n;
//  186     ADDRESS* pExtendedAddress;
//  187 
//  188     // Write 128-bit key to CC2420 RAM, using KEY0 for TX and KEY1 for RX
//  189     if (isTx) {
//  190         keyAddressCC2420 = CC2420RAM_KEY0;
//  191     } else {
//  192         keyAddressCC2420 = CC2420RAM_KEY1;
//  193     }
//  194 
//  195     // Write key to CC2420 RAM
//  196     msupWriteRam(pKey, keyAddressCC2420, 16, TRUE);
//  197 
//  198     // Write nonce/counter to CC2420 RAM, unless we are in CBC-MAC mode where the nonce/counter value is not used.
//  199     if (pMSI->secFlags2420) {
//  200 
//  201         DISABLE_GLOBAL_INT();
//  202         SPI_ENABLE();
//  203 
//  204         // RAM address
//  205         if (isTx) {
//  206             FASTSPI_TX(0x80 | (CC2420RAM_TXNONCE & 0x7F));
//  207             FASTSPI_TX((CC2420RAM_TXNONCE >> 1) & 0xC0);
//  208         } else {
//  209             FASTSPI_TX(0x80 | (CC2420RAM_RXNONCE & 0x7F));
//  210             FASTSPI_TX((CC2420RAM_RXNONCE >> 1) & 0xC0);
//  211         }
//  212 
//  213         // The 2-byte counter is initialized as 0 in counter mode, 1 in CCM
//  214         FASTSPI_TX(pMSI->secFlags2420 == MAC_CC2420_CCM_FLAGS);
//  215         FASTSPI_TX(0);
//  216 
//  217         // Key sequence counter (1 byte) and frame counter (4 bytes)
//  218         n = 5;
//  219         pCounters += 4;
//  220         do {
//  221             FASTSPI_TX(*(pCounters--));
//  222         } while (--n);
//  223 
//  224         if (isTx) {
//  225             pExtendedAddress = &aExtendedAddress;
//  226         } else {
//  227             pExtendedAddress = mrxSecurityInfo.pExtendedAddress;
//  228         }
//  229 
//  230         // Extended source address
//  231         FASTSPI_TX_MANY((BYTE*) pExtendedAddress, 8);
//  232 
//  233         // Flag byte
//  234         FASTSPI_TX(pMSI->secFlags2420);
//  235 
//  236         SPI_DISABLE();
//  237         ENABLE_GLOBAL_INT();
//  238     }
//  239 } // msupSetupCC2420KeyAndNonce
//  240 
//  241 
//  242 
//  243 
//  244 //-------------------------------------------------------------------------------------------------------
//  245 //  void msecSetupCC2420Regs(MSEC_SETUP_INFO *pMSI)
//  246 //
//  247 //  DESCRIPTION:
//  248 //      Sets up CC2420 security registers according to the security information struct
//  249 //
//  250 //  PARAMETERS:
//  251 //      MSEC_SETUP_INFO *pMSI,
//  252 //          Pointer to the security setup struct in use
//  253 //-------------------------------------------------------------------------------------------------------
//  254 ROOT void msecSetupCC2420Regs(MSEC_SETUP_INFO *pMSI) {
//  255     BYTE cleartextLength;
//  256 
//  257     DISABLE_GLOBAL_INT();
//  258 
//  259     // Configure CC2420 hardware security registers
//  260     if (pMSI->secMode2420) {
//  261         if (pMSI->secFlags2420) {
//  262 
//  263             cleartextLength = pMSI->clearTextLength;
//  264             FASTSPI_SETREG(CC2420_SECCTRL1, ((cleartextLength) << 8) | (cleartextLength));
//  265 
//  266         } else {
//  267             // l(a) = 0 for CBC-MAC
//  268             FASTSPI_SETREG(CC2420_SECCTRL1, 0);
//  269         }
//  270     }
//  271 
//  272     // Configure CC2420 hardware security registers
//  273     FASTSPI_SETREG(CC2420_SECCTRL0, CC2420_SECCTRL0_RXFIFO_PROTECTION | CC2420_SECCTRL0_SEC_CBC_HEAD | CC2420_SECCTRL0_TXKEYSEL0 | CC2420_SECCTRL0_RXKEYSEL1 | ((WORD) pMSI->secMode2420));
//  274     ENABLE_GLOBAL_INT();
//  275 } // msecSetupCC2420Regs
//  276 
//  277 
//  278 
//  279 
//  280 //-------------------------------------------------------------------------------------------------------
//  281 //  UINT8 msecProcessSecurityCounters(MAC_TX_PACKET *pPacket, BYTE *pPayload)
//  282 //
//  283 //  DESCRIPTION:
//  284 //      Inserts frame counter (4 bytes) and key sequence counter (1 byte) into an outgoing frame,
//  285 //      if the security suite is CTR or CCM.
//  286 //      Counters are inserted from the pointer pPayload, and frame counter is incremented.
//  287 //      pPacket->securitySuite is set to FAILED_SECURITY_CHECK if frame counter overflows.
//  288 //
//  289 //  PARAMETERS:
//  290 //      MAC_TX_PACKET *pPacket
//  291 //          Pointer to the outgoing packet in which security is to be inserted
//  292 //      BYTE *pPayload
//  293 //          Byte pointer to the location where the pointers should be inserted
//  294 //
//  295 //  RETURN VALUE
//  296 //      UINT8
//  297 //          Number of bytes (0 or 5) inserted into the frame
//  298 //-------------------------------------------------------------------------------------------------------
//  299 ROOT UINT8 msecProcessSecurityCounters(MAC_TX_PACKET *pPacket, BYTE *pPayload) {
//  300     BYTE *pSource;
//  301     SECURITY_MATERIAL *pSecurityMaterial;
//  302 
//  303     // Only CTR mode and CCM mode have the security flags set,
//  304     // and these modes require frame counter / key sequence counter
//  305     if (pPacket->securitySetup.secFlags2420) {
//  306 
//  307         // Set up pointer to security material for faster access
//  308         pSecurityMaterial = pPacket->pSecurityMaterial;
//  309 
//  310         // Copy the frame counter / key sequence counter into the frame
//  311         // with the MOST significant byte being transmitted FIRST
//  312         pSource = (BYTE*) &pSecurityMaterial->frameCounter + 3;
//  313 
//  314         *(pPayload++) = *(pSource--);
//  315         *(pPayload++) = *(pSource--);
//  316         *(pPayload++) = *(pSource--);
//  317         *(pPayload++) = *(pSource);
//  318 
//  319         *(pPayload++) = pSecurityMaterial->keySequenceCounter;
//  320 
//  321         if (pSecurityMaterial->frameCounter == 0xFFFF) {
//  322             // Frame counter cannot be incremented
//  323             pPacket->securitySuite = FAILED_SECURITY_CHECK;
//  324         } else {
//  325             // Increment frame counter
//  326             pSecurityMaterial->frameCounter++;
//  327         }
//  328 
//  329         pPacket->securitySetup.clearTextLength += 5;
//  330 
//  331         return 5;  // Frame Counter (4 bytes) and Key Sequence Counter (1 byte)
//  332 
//  333     // No frame counter / key sequence counter
//  334     } else {
//  335         return 0;
//  336     }
//  337 }
//  338 
//  339 #endif // MAC_OPT_SECURITY
//  340 
// 
// 
// 0 bytes of memory
//
//Errors: none
//Warnings: none

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -