/*
 psec1.h - PSEC-1 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_FIELD_LEN            256

#define TRUE                     1
#define FALSE                    0

#define MD_MD5                   1
#define MD_SHA                   2


/* PSEC-1 public and private key */
typedef struct {
	EC_POINT pk;
	WORD Hid;
	WORD mLen;
	WORD hLen;
	WORD rLen;
} PSEC1_PUB_KEY;


typedef struct {
	mpz_t sk;
} PSEC1_PRIV_KEY;


/* PSEC-1 ciphertext */
typedef struct {
	EC_POINT C1;
	mpz_t c2;
} PSEC1_CIPHERTEXT;
	

/* key-pair generation */
BYTE PSEC1_KeyGeneration (
	EC_PARAM     *E,
	mpz_t        sk,
	EC_POINT     *pk
);


/* encryption */
BYTE PSEC1_Encryption (
	BYTE             *message,       /* plaintext */
	PSEC1_PUB_KEY    *publicKey,     /* PSEC1 public key */
	PSEC1_CIPHERTEXT *ciphertext,    /* returned ciphertext */
	EC_PARAM         *E
);


/* decryption */
BYTE PSEC1_Decryption (
	PSEC1_CIPHERTEXT *ciphertext,
	PSEC1_PUB_KEY    *publicKey,
	PSEC1_PRIV_KEY   *privateKey,
	BYTE             *message,
	EC_PARAM         *E
);


#define ABS(x) (x >= 0 ? x : -x)
