From 28272fab96cbe03a5c485970b3cc40dae6fd7570 Mon Sep 17 00:00:00 2001 From: "XI.CHEN" Date: Wed, 6 Dec 2023 17:31:32 +0800 Subject: [PATCH] =?UTF-8?q?sm3hash=5Ftosm2()=20=E6=A0=88=E6=BA=A2=E5=87=BA?= =?UTF-8?q?=E6=8A=A5=E9=94=99=E3=80=82=E5=8A=A0=E5=AF=86=E8=A7=A3=E5=AF=86?= =?UTF-8?q?=E5=BE=85=E6=B5=8B=E8=AF=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/cpp/SpiLib.cpp | 142 ++++++++++++++++++++++++++++++++++++ app/src/main/cpp/SpiLib.h | 2 + 2 files changed, 144 insertions(+) diff --git a/app/src/main/cpp/SpiLib.cpp b/app/src/main/cpp/SpiLib.cpp index 3096434..c0f07fa 100644 --- a/app/src/main/cpp/SpiLib.cpp +++ b/app/src/main/cpp/SpiLib.cpp @@ -898,6 +898,7 @@ int SpiLIb::SM2Sign(int index,const unsigned char *to_sign,unsigned char *out_si //printf("tx %1d bytes: ", msglen); //__android_log_print(ANDROID_LOG_INFO, "SPi", "tx %1d bytes", msglen); + SM2Sign_CMD[3]=index; CMD_RESEND: @@ -964,6 +965,7 @@ int SpiLIb::SM2VerifySign(int index, unsigned char *hash,unsigned char *vs)//SM2 //printf("tx %1d bytes: ", msglen); //__android_log_print(ANDROID_LOG_INFO, "SPi", "tx %1d bytes", msglen); + SM2VerifySign_CMD[3]=index; CMD_RESEND: @@ -991,3 +993,143 @@ int SpiLIb::SM2VerifySign(int index, unsigned char *hash,unsigned char *vs)//SM2 return 0; } +int SpiLIb::SM2encrypt(int index,unsigned char *to_encrypt ,unsigned char *out_encrypt)//加密 +{ + int i; + int cnt; + unsigned char txbuf[512]; + unsigned char rxbuf[512]; + + int retval; + int msglen; + int fd; + const char *devname = "/dev/spidevSE"; + //const char *devname = "/dev/spidev0.0"; + //const char *devname = "/dev/mtkgpioctrl"; + + // NrsecSpiPort spi("/dev/spidevSE"); + // + // // NrsecSpiPort spi("/dev/spidev0.0") + fd = open(devname, O_RDWR); + if (fd < 0) { + perror("open"); + return 1; + } + spi_master_init(devname, fd); + + + msglen = 5; + memset(rxbuf, 0, sizeof(rxbuf)); + memset(txbuf, 0, sizeof(txbuf)); + + //printf("tx %1d bytes: ", msglen); + //__android_log_print(ANDROID_LOG_INFO, "SPi", "tx %1d bytes", msglen); + SM2encrypt_CMD[3]=index; + + CMD_RESEND: + + memcpy(txbuf, (const void *) SM2encrypt_CMD, sizeof(SM2encrypt_CMD)); + + SendCmdHeader(fd, txbuf, rxbuf); + + RcvINS(fd,txbuf,rxbuf,txbuf[1]); + + SendId(fd,txbuf,rxbuf, 0x55); + + memcpy(txbuf, to_encrypt, 32); + + SendData(fd, txbuf, rxbuf,32); + + SendEnd(fd,txbuf,rxbuf); + + memcpy(txbuf, (const void *) SM2encrypt_CMD, sizeof(SM2encrypt_CMD)); + + RcvINS(fd,txbuf,rxbuf,txbuf[1]); + + RcvLEN(fd,txbuf,rxbuf+1, 1); + + RcvData(fd, txbuf, rxbuf+2); + + RcvSW(fd, txbuf, rxbuf+2+rxbuf[1], 0x90); + + //__android_log_print(ANDROID_LOG_INFO, "SPi", "rx %1d bytes:", rxbuf[1]+4); + for (i = 2; i < rxbuf[1]+2; i++) { + //sprintf(output, " %02x ", rxbuf[i]); + out_encrypt[i-2]= rxbuf[i]; + } + + close(fd); + return 0; +} +int SpiLIb::SM2decoder(int index,unsigned char *to_decoder ,unsigned char *out_decoder)//解密 +{ + int i; + int cnt; + unsigned char txbuf[512]; + unsigned char rxbuf[512]; + + int retval; + int msglen; + int fd; + const char *devname = "/dev/spidevSE"; + //const char *devname = "/dev/spidev0.0"; + //const char *devname = "/dev/mtkgpioctrl"; + + // NrsecSpiPort spi("/dev/spidevSE"); + // + // // NrsecSpiPort spi("/dev/spidev0.0") + fd = open(devname, O_RDWR); + if (fd < 0) { + perror("open"); + return 1; + } + spi_master_init(devname, fd); + + + msglen = 5; + memset(rxbuf, 0, sizeof(rxbuf)); + memset(txbuf, 0, sizeof(txbuf)); + + //printf("tx %1d bytes: ", msglen); + //__android_log_print(ANDROID_LOG_INFO, "SPi", "tx %1d bytes", msglen); + SM2decoder_CMD[3]=index; + + CMD_RESEND: + + memcpy(txbuf, (const void *) SM2decoder_CMD, sizeof(SM2decoder_CMD)); + + SendCmdHeader(fd, txbuf, rxbuf); + + RcvINS(fd,txbuf,rxbuf,txbuf[1]); + + SendId(fd,txbuf,rxbuf, 0x55); + + memcpy(txbuf, to_decoder, 128); + + SendData(fd, txbuf, rxbuf,128); + + SendEnd(fd,txbuf,rxbuf); + + memcpy(txbuf, (const void *) SM2decoder_CMD, sizeof(SM2decoder_CMD)); + + RcvINS(fd,txbuf,rxbuf,txbuf[1]); + + RcvLEN(fd,txbuf,rxbuf+1, 1); + + RcvData(fd, txbuf, rxbuf+2); + + RcvSW(fd, txbuf, rxbuf+2+rxbuf[1], 0x90); + + //__android_log_print(ANDROID_LOG_INFO, "SPi", "rx %1d bytes:", rxbuf[1]+4); + for (i = 2; i < rxbuf[1]+2; i++) { + //sprintf(output, " %02x ", rxbuf[i]); + out_decoder[i-2]= rxbuf[i]; + } + + close(fd); + return 0; +} + + + + diff --git a/app/src/main/cpp/SpiLib.h b/app/src/main/cpp/SpiLib.h index 00f4353..2f2521a 100644 --- a/app/src/main/cpp/SpiLib.h +++ b/app/src/main/cpp/SpiLib.h @@ -17,6 +17,8 @@ public: *pucID, int idl); int SM2Sign(int index,const unsigned char *to_sign,unsigned char *out_sign); int SM2VerifySign(int index,unsigned char *hash,unsigned char *vs); + int SM2encrypt(int index,unsigned char *to_encrypt ,unsigned char *out_encrypt); + int SM2decoder(int index,unsigned char *to_decoder ,unsigned char *out_decoder);