/* esign.h - ESIGN software specification Copyright NTT MCL, 2000. Duncan S Wong Security Group, NTT MCL July 2000 */ typedef unsigned char BYTE; typedef unsigned long WORD; #define MAX_PRIME_LEN 768 #define MAX_MODULUS_LEN (MAX_PRIME_LEN*3) #define TRUE 1 #define FALSE 0 #define MD_MD5 1 #define MD_SHA 2 /* ESIGN public and private key */ typedef struct { mpz_t n; mpz_t e; BYTE Hid; WORD pLen; } ESIGN_PUB_KEY; typedef struct { mpz_t p; mpz_t q; } ESIGN_PRIV_KEY; /* key-pair generation */ BYTE ESIGN_GenerateKeys ( WORD k, /* desired key length */ ESIGN_PUB_KEY *publicKey, /* new ESIGN public key */ ESIGN_PRIV_KEY *privateKey /* new ESIGN private key */ ); /* signature generation */ BYTE ESIGN_Sign ( BYTE *message, /* plaintext */ WORD mLen, /* length of the message in bits */ ESIGN_PUB_KEY *publicKey, /* ESIGN public key */ ESIGN_PRIV_KEY *privateKey, /* ESIGN private key */ BYTE *signature ); /* signature verification */ BYTE ESIGN_SignVer ( BYTE *signature, BYTE *message, WORD mLen, ESIGN_PUB_KEY *publicKey ); #define ABS(x) (x >= 0 ? x : -x)