📄 heccalgo.h
字号:
// HEccAlgo.h: interface for the CHEccAlgo class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_HECCALGO_H__90CE6596_85F7_434F_9715_EA18641EDE41__INCLUDED_)
#define AFX_HECCALGO_H__90CE6596_85F7_434F_9715_EA18641EDE41__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "HLib32.h"
#include "import.h"
class AFX_EXT_CLASS CHEccAlgo
{
public:
CHEccAlgo();
virtual ~CHEccAlgo();
private:
///////////////////////////////////////////////////////////////////////////////////
//
// 以下是椭圆曲线上数字签名的函数定义
//
//////////////////////////////////////////////////////////////////////////////////
static void preqq();
static void xyadd(BYTE a[48],BYTE b[48],BYTE c[48]);
static void xyaddd1(BYTE a[48]);
static void xysub(BYTE a[48],BYTE b[48],BYTE c[48]);
static void xysubb1(BYTE a[48]);
static void mulxy(BYTE a[32],BYTE b[32],BYTE c[48]);
static void xydiv(BYTE a[48],BYTE b[32],BYTE q[48],BYTE r[32]);
static void rround(BYTE a1[48],BYTE b1[32],BYTE a2[48],BYTE b2[32],BYTE c[32]);
static void rmod(BYTE c0[32],BYTE c1[32],BYTE r0[48],BYTE r1[48]);
static void rxymul(BYTE c0[32],BYTE c1[32],BYTE d0[32],BYTE d1[32],BYTE q0[48],BYTE q1[48]);
static void rxydiv(BYTE c0[32],BYTE c1[32],BYTE d0[32],BYTE d1[32],BYTE q0[32],BYTE q1[32]);
static void rinv(BYTE c0[32],BYTE c1[32],BYTE r0[32],BYTE r1[32]);
static void radic(BYTE c0[32],BYTE useq[640]);
static void radic1(BYTE c0[32],BYTE c1[32],BYTE useq[640]);
static void abadd(BYTE a[30],BYTE b[30]);
static void mod239(BYTE a[60],BYTE b[30]);
static void squ239(BYTE a[30],BYTE b[30]);
static void abcf(BYTE a[30],BYTE b[30],BYTE c[30]);
static void ysf(BYTE a[30],BYTE b[30]);
static int cgxs(BYTE *a);
static void ellisoinv(BYTE a[32],BYTE b[32],BYTE c[32],BYTE d[32]);
static void elliso(BYTE a[32],BYTE b[32],BYTE c[32],BYTE d[32]);
static void ell2x(BYTE a[30],BYTE b[30],BYTE c[30],BYTE d[30]);
static void ellxy(BYTE a0[30],BYTE a1[30],BYTE b0[30],BYTE b1[30],BYTE c0[30],BYTE c1[30]);
static void ellaut(BYTE a0[30],BYTE a1[30],BYTE b0[30],BYTE b1[30]);
static int valpoint(BYTE x0[32],BYTE y0[32]);
static int valpoint0(BYTE x0[32],BYTE y0[32]);
static void ellmult(BYTE *a,BYTE *b,BYTE x0[32],BYTE y0[32]);
static int campn(BYTE *a,BYTE *b,unsigned int n);
static void hashchange(BYTE *mes,BYTE mmm[32]);
///////////////////////////////////////////////////////////////////////////////////
//
// 以下是椭圆曲线上加/脱密的函数定义
//
//////////////////////////////////////////////////////////////////////////////////
static void jellsign(BYTE bufPuk[288],BYTE bufPrk[36],DWORD mesh[14],BYTE mess[80]);
static int jellval(BYTE bufPuk[288],DWORD mesh[14],BYTE mess[80]);
static void jxyadd(BYTE a[80],BYTE b[80],BYTE c[80]);
static void jxyaddd1(BYTE a[80]);
static void jxysub(BYTE a[80],BYTE b[80],BYTE c[80]);
static void jxysubb1(BYTE a[80]);
static void jmulxy(BYTE a[40],BYTE b[40],BYTE c[80]);
static void jxydiv(BYTE a[80],BYTE b[40],BYTE q[80],BYTE r[40]);
static void jrround(BYTE a1[80],BYTE b1[40],BYTE a2[80],BYTE b2[40],BYTE c[40]);
static void jrmod(BYTE c0[40],BYTE c1[40],BYTE r0[40],BYTE r1[40]);
static void jrxymul(BYTE c0[40],BYTE c1[40],BYTE d0[40],BYTE d1[40],BYTE q0[80],BYTE q1[80]);
static void jrxydiv(BYTE c0[40],BYTE c1[40],BYTE d0[40],BYTE d1[40],BYTE q0[40],BYTE q1[40]);
static void jrinv(BYTE c0[40],BYTE c1[40],BYTE r0[40],BYTE r1[40]);
static void jradic1(BYTE c0[40],BYTE c1[40],BYTE useq[1024]);
static void jabadd(BYTE a[36],BYTE b[36]);
static void mod283(BYTE a[72],BYTE b[36]);
static void squ283(BYTE a[36],BYTE b[36]);
static void jabcf(BYTE a[36],BYTE b[36],BYTE c[36]);
static void jysf(BYTE a[36],BYTE b[36]);
static int jcgxs(BYTE *a);
static void jellisoinv(BYTE a[36],BYTE b[36],BYTE c[36],BYTE d[36]);
static void jelliso(BYTE a[36],BYTE b[36],BYTE c[36],BYTE d[36]);
static void jell2x(BYTE a[36],BYTE b[36],BYTE c[36],BYTE d[36]);
static void jellxy(BYTE a0[36],BYTE a1[36],BYTE b0[36],BYTE b1[36],BYTE c0[36],BYTE c1[36]);
static void jellaut(BYTE a0[36],BYTE a1[36],BYTE b0[36],BYTE b1[36]);
static int jvalpoint(BYTE x0[36],BYTE y0[36]);
static int jvalpoint0(BYTE x0[36],BYTE y0[36]);
static void jellmult(BYTE *a,BYTE *b,BYTE x0[36],BYTE y0[36]);
static void jpreqq();
static void jmhash(DWORD TEXTLEN, BYTE *TEXTADR);
static void hhash(DWORD TEXTLEN, BYTE *TEXTADR,BYTE *HASHADR);
static void jmhashend(DWORD TEXTLEN, BYTE *TEXTADR,unsigned int flag,DWORD len);
static void hhashend(DWORD TEXTLEN, BYTE *TEXTADR,BYTE *HASHADR,DWORD len);
static void tmhash(DWORD TEXTLEN, BYTE *TEXTADR);
static void tmhashend(DWORD TEXTLEN, BYTE *TEXTADR,unsigned int flag,DWORD len);
static void jhashchange(BYTE *mes,BYTE mmm[36]);
///////////////////////////////////////////////////////////////////////////////////
//
// 以下是hash上的函数定义
//
//////////////////////////////////////////////////////////////////////////////////
static void hssh(DWORD *hssh_data);
static void schs();//消息调度,处理long xi[16][2]中的数据,处理后仍存放在xi[16][2]中
static void passhs(unsigned int pass_i);
//外部接口
public:
static void GenKeyPairForSign(BYTE bufPuk[240],BYTE bufPrk[30]);
static void Sign(BYTE *buf,DWORD dwLen,BYTE bufPuk[240],BYTE bufPrk[30],BYTE bufSign[64]);
static void Sign(BYTE bufHash[56],BYTE bufPuk[240],BYTE bufPrk[30],BYTE bufSign[64]);
static int VerifySign(BYTE *buf,DWORD dwLen,BYTE bufPuk[240],BYTE bufSign[64]);
static int VerifySign(BYTE bufHash[56],BYTE bufPuk[240],BYTE bufSign[64]);
/////////////////////////////////////////////////////////////////////////////
// 椭圆曲线上的接口函数
//////////////////////////////////////////////////////////////////////////////
static void GenKeyPairForEncrypt(BYTE bufPuk[288],BYTE bufPrk[36]);
static DWORD Encrypt(BYTE *buf,DWORD dwLen,BYTE bufPuk[288]);
static DWORD Decrypt(BYTE *buf,DWORD dwLen,BYTE bufPuk[288],BYTE bufPrk[36]);
/////////////////////////////////////////////////////////////////////////////
// 杂凑函数上的接口函数
//////////////////////////////////////////////////////////////////////////////
static void HashFile(char *szFile,DWORD dwLen[2],BYTE bufHash[56]);
static void Hash(BYTE *buf,DWORD dwLen,BYTE bufHash[56]);
};
#endif // !defined(AFX_HECCALGO_H__90CE6596_85F7_434F_9715_EA18641EDE41__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -