CEBF746 Module.. with TPM
Dependencies: cube_CEBF746 cube_crypto cube_crc_16
Diff: main.cpp
- Revision:
- 5:79ea2d57baf3
- Parent:
- 4:85dda8d9a528
- Child:
- 6:210b1bb7442b
--- a/main.cpp Wed Oct 19 08:53:08 2016 +0000 +++ b/main.cpp Thu Oct 20 08:18:41 2016 +0000 @@ -47,13 +47,16 @@ SPISlave spi_slave(SPI_MOSI, SPI_MISO, SPI_SCLK, SPI_SSEL); // MOSI, MISO, SCLK(CLK), SSEL(CS)=NC -uint8_t cebStatus; // 1byte Status Register +uint8_t cebf746_status_reg; // 1byte Status Register uint8_t cebBufEncrypt[CEB_BUF_SIZE] = {}; // 암호화 예정 버퍼 uint8_t cebBufEncrypted[CEB_BUF_SIZE] = {}; // 암호화 완료된 버퍼 uint8_t cebBufDecrypt[CEB_BUF_SIZE] = {}; // 복호화 예정 버퍼 uint8_t cebBufDecrypted[CEB_BUF_SIZE] = {}; // 복호화 완료된 버퍼 +uint8_t spiTXBuf[255]; // SPI TX 버퍼 +uint8_t spiRXBuf[255]; // SPI RX 버퍼 + extern uint8_t readSelfTestValidateData[CEB_BUF_SIZE]; extern uint8_t writeSelfTestValidateData[CEB_BUF_SIZE]; @@ -67,7 +70,6 @@ MENU_EXIT_Program = 9 }; -static char cebf746_status_reg = 0xAA; bool spi_receive_wait(void) @@ -304,13 +306,13 @@ uint8_t slave_read_byte() { - while(!spi_slave.receive()); + while(!spi_slave.receive()); // ★★★★ 마스터 쪽에서 패킷이 수신 안됐을 경우 loop에서 나오지 못함. 예외 처리(time out) 적용 해야함. return spi_slave.read(); } void slave_write_byte(uint8_t txData) { spi_slave.reply( txData ); - while(!spi_slave.receive()); + while(!spi_slave.receive()); // ★★★★ 마스터 쪽에서 패킷이 수신 안됐을 경우 loop에서 나오지 못함. 예외 처리(time out) 적용 해야함. spi_slave.read(); } @@ -339,6 +341,15 @@ } +void slave_write_packet(spiDataStr* packet) +{ + slave_write_byte((packet->size >> 8) & 0xFF); + slave_write_byte((packet->size ) & 0xFF); + slave_write_multi_byte(packet->buf, packet->size); + slave_write_byte((packet->crc16 >> 8) & 0xFF); + slave_write_byte((packet->crc16 ) & 0xFF); +} + #define YSH_CODE 1 #if YSH_CODE typedef struct // #include <aes.h> -> mbed tls lib @@ -466,6 +477,7 @@ #endif + /** @brief main function ################################################################### * */ @@ -477,7 +489,7 @@ char eepAddr = 0; char eepData = 0; - int packetLength = 0; + uint16_t packetLength = 0; uint8_t spiRxTempBuf = 0; @@ -487,6 +499,7 @@ uint16_t readCrc = 0; uint16_t genCrc = 0; + spiDataStr txData; spiDataStr rxData; pc_serial.printf("\n\n========== KSS SPI Slave1 [Start] ==========\n"); @@ -507,8 +520,6 @@ { pc_serial.printf("\n\nwaiting CEBF746 cmd...\n"); - - spiRxTempBuf = slave_read_byte(); printf("menu[%02X]\n", spiRxTempBuf); @@ -526,7 +537,7 @@ uint8_t tempBuf[CEB_BUF_SIZE] = {0, }; uint16_t retCrc = 0; - + packetSize = 0; slave_read_uint16(&packetSize); if(packetSize != CEB_BUF_SIZE) { @@ -547,8 +558,10 @@ if(true == crcCheck ) { + /// ★★★여기서 윤주임코드 암호화 스레드 동작할수 있게 flag setting 해야함!! cube_crypt_spi_cmd_set(&tempContext, 0x02,tempBuf, 0); pc_serial.printf("call \"cube_crypt_spi_cmd_set()\"\n"); + cebf746_status_reg = 0x00; // will delete code } else { @@ -558,6 +571,28 @@ break; case FUNC_READ_ENC_DATA: + uint16_t keyCrc = 0xAABB; // ★★★★ 윤주임 코드 들어오면 keyCrc 참조 변경 해야함 + packetLength = CEB_BUF_SIZE+2; + + + if(0 == (cebf746_status_reg & 0x02)) // 암호화가 완료 되었으면 + { + memcpy(spiTXBuf, cebBufEncrypted, CEB_BUF_SIZE); // encrypted data copy + spiTXBuf[CEB_BUF_SIZE + 0] = ((keyCrc >> 8) & 0xFF); // upper key crc copy + spiTXBuf[CEB_BUF_SIZE + 1] = ((keyCrc ) & 0xFF); // lower key crc copy + + + cebf746_set_packet(&txData, packetLength, spiTXBuf); + slave_write_packet(&txData); + + + _cebf746_print_packet(packetLength, spiTXBuf, genCrc); + + } + else + { + + } break; case FUNC_WRITE_DEC_DATA: @@ -600,31 +635,14 @@ break; - case FUNC_READ_SELF_TEST: // 161017_KSS_Test OK - //printf("FUNC_READ_SELF_TEST\n"); - // TODO check status reg - - cube_crc_16(CEB_BUF_SIZE, readSelfTestValidateData, &genCrc); - + case FUNC_READ_SELF_TEST: // 161017_KSS_Test OK - slave_write_byte((CEB_BUF_SIZE >> 8) & 0xFF); - slave_write_byte((CEB_BUF_SIZE ) & 0xFF); - slave_write_multi_byte(readSelfTestValidateData, CEB_BUF_SIZE); - slave_write_byte((genCrc >> 8) & 0xFF); - slave_write_byte((genCrc ) & 0xFF); - - + cebf746_set_packet(&txData, CEB_BUF_SIZE, readSelfTestValidateData); + slave_write_packet(&txData); - printf("--send end\n"); - - wait_ms(100); - + printf("--FUNC_READ_SELF_TEST end\n"); break; - - - - }