请问,有CC2530 AES裸机加密和解密的资料吗?目前只能实现裸机加密,但解密解出的值不正确
Viki Shi:
请参考这边文档: http://www.ti.com/lit/an/swra172c/swra172c.pdf
user4976959:
回复 Viki Shi:
你好,
那个文档里的不带DMA的CBC和ECB模式的加密可以用,但是解密出来的数据是错误的。
是我代码写错了吗
user4976959:
回复 Viki Shi:
你好,
根据文档写的不带DMA的,加密是正确的,但是解密出来的数据是错误的,麻烦可以看下哪里有错误吗
ENCCS = 0x40;//ECB // Generate Key:// In a radio application this is typically generated based on// a standard/protocol specification. However, for simplicity,// this app report does not use any particular specification// for generating it.for(i = 0; i < SIZE_OF_AES_BLOCK; i++) { key[i] = i * 2; }// Download Key (Set ENCCS.CMD = 10b),// and start corresponding AES process (ENCCS.ST = 1)ENCCS = 0x04 | 0x01;printf("key ");for (i = 0; i < SIZE_OF_AES_BLOCK; i++) {ENCDI = key[i];printf("%x ",key[i]);}printf("\r\n");// Monitor AES (ENCCS.RDY) to wait until key downloadedwhile(!(ENCCS & 0x08));// Generate IV/NONCE:// In a radio application this is typically generated based on// a standard/protocol specification. However, for simplicity,// this app report does not use any particular specification// for generating it.//printf("IV ");//for(i = 0; i < SIZE_OF_AES_BLOCK; i++) { iv_nonce[i] = i; //printf("%x ",iv_nonce[i]);//}//printf("\r\n");//// Dwonload IV/NONCE (Set ENCCS.CMD = 11b)//// and start corresponding AES process (ENCCS.ST = 1)//ENCCS = 0x06 | 0x01;//for (i = 0; i < SIZE_OF_AES_BLOCK; i++) {//ENCDI = iv_nonce[i];//}//// Monitor AES (ENCCS.RDY) to wait until IV/NONCE downloaded//while(!(ENCCS & 0x08));//
////////////////////////////////////////////////////////////////// Place code here for downloading key and IV/NONCE (see Example 5)////////////////////////////////////////////////////////////////// Perform AES encryption/decryption on allocated AES buffer ("aes_buffer_1"):for (j = 0; j < SIZE_OF_ENC_PACKET/SIZE_OF_AES_BLOCK; j++) {// Configure and start AES coprocessor for the desired AES mode:// Encryption => ENCCS.CMD = 00b, decryption mode => ENCCS.CMD = 01b.// Use so-called Cipher Block Chaining encryption mode => ENCCS.MODE = 000b.// Start AES processing (ENCCS.ST = 1) of source buffer (aes_buffer_1).ENCCS = 0x00 | 0x01; // Only valid for encryption mode !//ENCCS = 0x02 | 0x01; // Only valid for decryption mode !// Download data block (16 bytes) to AES coprocessor:// In encryption mode, "aes_buffer_1" represents the data to be encrypted.// In decryption mode, "aes_buffer_1" represents the data to be decrypted.printf("text ");for (i = 0; i < SIZE_OF_AES_BLOCK; i++) {ENCDI = aes_buffer_1[i+(j*SIZE_OF_AES_BLOCK)];printf("%x ",aes_buffer_1[i+(j*SIZE_OF_AES_BLOCK)]);}printf("\r\n");// Wait until AES download is finished, that is; apply delay// equivalent to 40 NOPs:asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");// Upload data block (16 bytes) to allocated AES buffer:// In encryption mode, "aes_buffer_2" represents the encrypted data.// In decryption mode, "aes_buffer_2" represents the decrypted data.printf("result ");for (i = 0; i < SIZE_OF_AES_BLOCK; i++) {aes_buffer_2[i+(j*SIZE_OF_AES_BLOCK)] = ENCDO;printf("%x ",aes_buffer_2[i+(j*SIZE_OF_AES_BLOCK)]);}printf("\r\n");// Monitor AES (ENCCS.RDY) to wait until data block downloadedwhile(!(ENCCS & 0x08));}
printf("\r\n");printf("\r\n");printf("\r\n");printf("\r\n");////////////////////////////////////////////////////////////////// Place code here for downloading key and IV/NONCE (see Example 5)////////////////////////////////////////////////////////////////// Perform AES encryption/decryption on allocated AES buffer ("aes_buffer_1"):for (j = 0; j < SIZE_OF_ENC_PACKET/SIZE_OF_AES_BLOCK; j++) {// Configure and start AES coprocessor for the desired AES mode:// Encryption => ENCCS.CMD = 00b, decryption mode => ENCCS.CMD = 01b.// Use so-called Cipher Block Chaining encryption mode => ENCCS.MODE = 000b.// Start AES processing (ENCCS.ST = 1) of source buffer (aes_buffer_1).//ENCCS = 0x00 | 0x01; // Only valid for encryption mode !ENCCS = 0x02 | 0x01; // Only valid for decryption mode !// Download data block (16 bytes) to AES coprocessor:// In encryption mode, "aes_buffer_1" represents the data to be encrypted.// In decryption mode, "aes_buffer_1" represents the data to be decrypted.printf("text ");for (i = 0; i < SIZE_OF_AES_BLOCK; i++) {ENCDI = aes_buffer_2[i+(j*SIZE_OF_AES_BLOCK)];printf("%x ",aes_buffer_2[i+(j*SIZE_OF_AES_BLOCK)]);}printf("\r\n");// Wait until AES download is finished, that is; apply delay// equivalent to 40 NOPs:asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");// Upload data block (16 bytes) to allocated AES buffer:// In encryption mode, "aes_buffer_2" represents the encrypted data.// In decryption mode, "aes_buffer_2" represents the decrypted data.printf("result ");for (i = 0; i < SIZE_OF_AES_BLOCK; i++) {aes_buffer_1[i+(j*SIZE_OF_AES_BLOCK)] = ENCDO;printf("%x ",aes_buffer_1[i+(j*SIZE_OF_AES_BLOCK)]);}printf("\r\n");// Monitor AES (ENCCS.RDY) to wait until data block downloadedwhile(!(ENCCS & 0x08));}
TI中文支持网