From 0d43ec8b837fbacb2995d0c9ab18cdea26c054ea Mon Sep 17 00:00:00 2001 From: "XI.CHEN" Date: Thu, 7 Dec 2023 16:11:00 +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=EF=BC=8CSM2=E7=AD=BE=E5=90=8D=E5=92=8C?= =?UTF-8?q?=E9=AA=8C=E7=AD=BE=E6=B2=A1=E6=B5=8B=E3=80=82=E5=AE=89=E5=85=A8?= =?UTF-8?q?=E8=AE=A4=E8=AF=81=E6=B2=A1=E8=BE=93=E5=85=A5=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=B2=A1=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/cpp/SpiLib.cpp | 66 +++++++++++++++++++++++++++++++++++++ app/src/main/cpp/SpiLib.h | 2 ++ 2 files changed, 68 insertions(+) diff --git a/app/src/main/cpp/SpiLib.cpp b/app/src/main/cpp/SpiLib.cpp index 30ec2b6..1934b92 100644 --- a/app/src/main/cpp/SpiLib.cpp +++ b/app/src/main/cpp/SpiLib.cpp @@ -1217,7 +1217,73 @@ int SpiLIb::SM2cert(int type,int index,string cert,unsigned char *out_cert)//证 close(fd); return 0; } +int SpiLIb::Indentify(unsigned char *to_idt,unsigned char *out_idt)//安全认证 +{ + 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); + + CMD_RESEND: + + memcpy(txbuf, (const void *) Indentify_CMD, sizeof(Indentify_CMD)); + + SendCmdHeader(fd, txbuf, rxbuf); + + RcvINS(fd,txbuf,rxbuf,txbuf[1]); + + SendId(fd,txbuf,rxbuf, 0x55); + memcpy(txbuf, to_idt, 32); + + SendData(fd, txbuf, rxbuf,32); + + 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_idt[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 d806ecb..f7767ca 100644 --- a/app/src/main/cpp/SpiLib.h +++ b/app/src/main/cpp/SpiLib.h @@ -26,6 +26,7 @@ class SpiLIb{ public: int Spirandom(); int Version(); + int Indentify(unsigned char *to_idt,unsigned char *out_idt); int SM2keypair(int index); int SM2OutPub(int index,unsigned char result[]); int SM2OutPri(int index,unsigned char result[]); @@ -42,6 +43,7 @@ public: + private: const unsigned char crc7_table[256]= { 0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f,