sm3hash_tosm2() 栈溢出报错。

main
陈曦 2 years ago
parent 28272fab96
commit 5234acf8fd

@ -1,23 +1,5 @@
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include <string>
#include <thread>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <linux/types.h>
#include <linux/spi/spidev.h>
#include <android/log.h>
#include "SpiLib.h"
using namespace std;
#define CMD_HEAD_SIZE 5
//typedef unsigned char u8;
#define RE_SUC 0x01
@ -166,8 +148,12 @@ void SpiLIb::RcvLEN(int fd, u8 *txbuf, u8 *buf, u8 len)
int retval;
/* receive length */
LEN:
retval = spi_transfer(fd, txbuf, buf, 1);
__android_log_print(ANDROID_LOG_INFO, "SPiLEN", "txbuf=%x,rxbuf=%hhu", *txbuf,*buf);
for(int i=0;i<len;i++){
txbuf[0]=0xaa;
retval = spi_transfer(fd, txbuf, buf+i, 1);
__android_log_print(ANDROID_LOG_INFO, "SPiLEN", "txbuf=%x,rxbuf=%x", *txbuf,*(buf+i));
}
}
//Rcvdata
@ -184,6 +170,20 @@ void SpiLIb::RcvData(int fd, u8 *txbuf, u8 *buf)
__android_log_print(ANDROID_LOG_INFO, "SPiDATA", "data[%d]=%x",i, *(buf+i));
}
}
void SpiLIb::RcvData(int fd, u8 *txbuf, u8 *buf,int len)
{
int i;
int retval;
/* receive data and crc */
for(i=0; i<len; i++)
{
retval = spi_transfer(fd, txbuf, buf+i, 1);
__android_log_print(ANDROID_LOG_INFO, "SPiDATA", "data[%d]=%x",i, *(buf+i));
}
}
//RcvSW
@ -1130,6 +1130,95 @@ int SpiLIb::SM2decoder(int index,unsigned char *to_decoder ,unsigned char *out_d
return 0;
}
int SpiLIb::SM2cert(int type,int index,string cert,unsigned char *out_cert)//证书
{
int i;
int cnt;
unsigned char txbuf[512];
unsigned char rxbuf[1024];
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);
int certlen=cert.length();
unsigned char to_cert[certlen];
for(int x=0;x<certlen;x++){
to_cert[x]=cert[x];
}
SM2cert_CMD[2]=type;
SM2cert_CMD[3]=index;
SM2cert_CMD[4]=certlen;
CMD_RESEND:
memcpy(txbuf, (const void *) SM2cert_CMD, sizeof(SM2cert_CMD));
SendCmdHeader(fd, txbuf, rxbuf);
RcvINS(fd,txbuf,rxbuf,txbuf[1]);
SendId(fd,txbuf,rxbuf, 0x55);
memcpy(txbuf, to_cert, certlen);
SendData(fd, txbuf, rxbuf,certlen);
SendEnd(fd,txbuf,rxbuf);
memcpy(txbuf, (const void *) SM2cert_CMD, sizeof(SM2cert_CMD));
RcvINS(fd,txbuf,rxbuf,txbuf[1]);
RcvLEN(fd,txbuf,rxbuf+1, 2);
int re[4]={0};
int x = 0;
int a=rxbuf[1];
while (a != 0) {
re[x] = a % 16;
a /= 16;
x++;
}
int outlen=re[0]*256+re[1]*4096+rxbuf[2];
RcvData(fd, txbuf, rxbuf+2,outlen);
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 < outlen+2; i++) {
//sprintf(output, " %02x ", rxbuf[i]);
out_cert[i-2]= rxbuf[i];
}
close(fd);
return 0;
}

@ -1,5 +1,24 @@
#ifndef TESTCOMM_SPILIB_H
#define TESTCOMM_SPILIB_H
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include <string>
#include <thread>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <linux/types.h>
#include <linux/spi/spidev.h>
#include <android/log.h>
using namespace std;
#define CMD_HEAD_SIZE 5
using namespace std;
typedef unsigned char u8;
@ -19,6 +38,7 @@ public:
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);
int SM2cert(int type,int index,string cert,unsigned char *out_cert);
@ -85,6 +105,7 @@ private:
void RcvINS(int fd, u8 *txbuf, u8 *buf, u8 ins);
void RcvLEN(int fd, u8 *txbuf, u8 *buf, u8 len);
void RcvData(int fd, u8 *txbuf, u8 *buf);
void RcvData(int fd, u8 *txbuf, u8 *buf, int len);
void RcvSW(int fd, u8 *txbuf, u8 *buf, u8 sw);
void SendEnd(int fd, u8 *txbuf, u8 *buf);
void SendId(int fd, u8 *txbuf, u8 *buf, u8 id);
@ -92,8 +113,6 @@ private:
};

@ -71,31 +71,36 @@ Java_com_xinyingpower_testcomm_MainActivity_testSpi(
jobject /* this */, jint port) {
//testSpi();
SpiLIb a;
unsigned char newkey[64]={0xaf,0x0c,0xa9,0x40,0x1f,0xe6,0xee,0x0f,0x4c,
unsigned char newkey[32]={0xaf,0x0c,0xa9,0x40,0x1f,0xe6,0xee,0x0f,0x4c,
0xfb,0xf7,0x17,0x71,0xde,0x61,0x59
,0x0a,0x05,0x77,
0xfa,0xe7,0xd1,0x8d,0x10,0x3a,0x79,0x23,0xf2,0xb3,
0x6d,0xea,0x8e,0xe0,0x64,0xe7,0x5d,0x49,0x84,0xe4,
0x5f,0xc9,0x07,0x03,0x52,0x33,0x79,0x87,0xd4,0x62,
0x62,0xc0,0xcc,0xf0,0xd6,0x85,0x20,0x7f,0x7a,0xe8,
0xc8,0xed,0x12,0xdb,0xdc
0x6d,0xea,0x8e
// ,0xe0,0x64,0xe7,0x5d,0x49,0x84,0xe4,
// 0x5f,0xc9,0x07,0x03,0x52,0x33,0x79,0x87,0xd4,0x62,
// 0x62,0xc0,0xcc,0xf0,0xd6,0x85,0x20,0x7f,0x7a,0xe8,
// 0xc8,0xed,0x12,0xdb,0xdc
};
unsigned char outpub[32],outsign[64];
unsigned char outpub[32],outsign[64], *outen = new unsigned char [256];
unsigned char pucid[16]={0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01};
string b="C=CN,ST=jiangsu,L=nanjing,O=GDD,OU=nari,CN=test001";
//a.SM2keypair(0x00);
//a.SM3Hash(newkey,16, outpub);
a.sm3hash_tosm2(newkey,16,outpub,newkey,pucid,16);
a.SM2Sign(0x00,outpub,outsign);
a.SM2VerifySign(0x00,outpub,outsign);
//a.sm3hash_tosm2(newkey,16,outpub,newkey,pucid,16);
//a.SM2Sign(0x00,outpub,outsign);
//a.SM2VerifySign(0x00,outpub,outsign);
a.SM2cert(0x00,0x00,b,outen);
for (int i = 0; i < 32; i++) {
//sprintf(output, " %02x ", rxbuf[i]);
__android_log_print(ANDROID_LOG_INFO, "SPi", "%02x", outpub[i]);
}
for (int i = 0; i < 64; i++) {
//sprintf(output, " %02x ", rxbuf[i]);
__android_log_print(ANDROID_LOG_INFO, "SPi", "%02x", outsign[i]);
__android_log_print(ANDROID_LOG_INFO, "SPi", "%02x", outen[i]);
}
// a.SM2decoder(0x00,outen,outpub);
//
// for (int i = 0; i < 64; i++) {
// //sprintf(output, " %02x ", rxbuf[i]);
// __android_log_print(ANDROID_LOG_INFO, "SPi", "%02x", outpub[i]);
// }
//a.SM3Hash(0x00,0x10,newkey);
//testVersion();

Loading…
Cancel
Save