42 lines
1.1 KiB
C
42 lines
1.1 KiB
C
#ifndef _ECDH_H_
|
||
#define _ECDH_H_
|
||
|
||
#include "bigint_impl.h"
|
||
|
||
#define ECDH_MEM_POOL_SIZE 0x750
|
||
|
||
typedef struct {
|
||
bigint *x;
|
||
bigint *y;
|
||
bigint *z;
|
||
int Z_is_one;
|
||
int Z_is_zero;
|
||
} EC_POINT;
|
||
|
||
struct ECDH_CTX_st {
|
||
BI_CTX ctx;
|
||
EC_POINT G;
|
||
EC_POINT PubKey;
|
||
bigint *ECDHKey;
|
||
bigint *PriKey;
|
||
};
|
||
|
||
typedef struct ECDH_CTX_st ECDH_CTX;
|
||
//In:Prikey 24byte
|
||
//Out:PubKeyx PubKeyy 24byte
|
||
void ecdh_Generate_PublicKey(ECDH_CTX *ecdh_ctx, const unsigned char *PriKey, unsigned char *PubKeyx, unsigned char *PubKeyy);
|
||
//In:PublicKeyBx PublicKeyBy 24byte
|
||
//Out:DHKey 24byte
|
||
void ecdh_Compute_DHKey(ECDH_CTX *ecdh_ctx, unsigned char *PublicKeyBx, unsigned char *PublicKeyBy, unsigned char *DHKey);
|
||
|
||
///由于计算和用于发送的buffer存在大小端相反问题,所以再封装一层函数
|
||
void ecdh_PublicKey(ECDH_CTX *ecdh_ctx, const unsigned char *PriKey, unsigned char *PubKeyx, unsigned char *PubKeyy);
|
||
void ecdh_DHKey(ECDH_CTX *ecdh_ctx, unsigned char *PublicKeyBx, unsigned char *PublicKeyBy, unsigned char *DHKey);
|
||
|
||
|
||
//ECDH_CTX *ecdh_init(void);
|
||
void ecdh_init(ECDH_CTX *ec_ctx, char *bigint_mem_pool);
|
||
void ecdh_free(ECDH_CTX *ecdh);
|
||
|
||
#endif
|