#ifndef _OAKLEY_H
#define _OAKLEY_H
#include "vmbuf.h"
#define OAKLEY_ATTR_ENC_ALG 1
#define OAKLEY_ATTR_ENC_ALG_DES 1
#define OAKLEY_ATTR_ENC_ALG_IDEA 2
#define OAKLEY_ATTR_ENC_ALG_BLOWFISH 3
#define OAKLEY_ATTR_ENC_ALG_RC5 4
#define OAKLEY_ATTR_ENC_ALG_3DES 5
#define OAKLEY_ATTR_ENC_ALG_CAST 6
#define OAKLEY_ATTR_ENC_ALG_AES 7
#define OAKLEY_ATTR_ENC_ALG_CAMELLIA 8
#define OAKLEY_ATTR_HASH_ALG 2
#define OAKLEY_ATTR_HASH_ALG_MD5 1
#define OAKLEY_ATTR_HASH_ALG_SHA 2
#define OAKLEY_ATTR_HASH_ALG_TIGER 3
#if defined(WITH_SHA2)
#define OAKLEY_ATTR_HASH_ALG_SHA2_256 4
#define OAKLEY_ATTR_HASH_ALG_SHA2_384 5
#define OAKLEY_ATTR_HASH_ALG_SHA2_512 6
#endif
#define OAKLEY_ATTR_AUTH_METHOD 3
#define OAKLEY_ATTR_AUTH_METHOD_PSKEY 1
#define OAKLEY_ATTR_AUTH_METHOD_DSSSIG 2
#define OAKLEY_ATTR_AUTH_METHOD_RSASIG 3
#define OAKLEY_ATTR_AUTH_METHOD_RSAENC 4
#define OAKLEY_ATTR_AUTH_METHOD_RSAREV 5
#define OAKLEY_ATTR_AUTH_METHOD_EGENC 6
#define OAKLEY_ATTR_AUTH_METHOD_EGREV 7
#ifdef ENABLE_HYBRID
#define OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_I 64221
#define OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_R 64222
#define OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_I 64223
#define OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_R 64224
#define OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_I 65001
#define OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_R 65002
#define OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_I 65003
#define OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_R 65004
#define OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_I 65005
#define OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_R 65006
#define OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_I 65007
#define OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_R 65008
#define OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_I 65009
#define OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_R 65010
#endif
#define OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB (65001 + 0x10000)
#define OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB_REAL 65001
#define OAKLEY_ATTR_GRP_DESC 4
#define OAKLEY_ATTR_GRP_DESC_MODP768 1
#define OAKLEY_ATTR_GRP_DESC_MODP1024 2
#define OAKLEY_ATTR_GRP_DESC_EC2N155 3
#define OAKLEY_ATTR_GRP_DESC_EC2N185 4
#define OAKLEY_ATTR_GRP_DESC_MODP1536 5
#define OAKLEY_ATTR_GRP_DESC_MODP2048 14
#define OAKLEY_ATTR_GRP_DESC_MODP3072 15
#define OAKLEY_ATTR_GRP_DESC_MODP4096 16
#define OAKLEY_ATTR_GRP_DESC_MODP6144 17
#define OAKLEY_ATTR_GRP_DESC_MODP8192 18
#define OAKLEY_ATTR_GRP_TYPE 5
#define OAKLEY_ATTR_GRP_TYPE_MODP 1
#define OAKLEY_ATTR_GRP_TYPE_ECP 2
#define OAKLEY_ATTR_GRP_TYPE_EC2N 3
#define OAKLEY_ATTR_GRP_PI 6
#define OAKLEY_ATTR_GRP_GEN_ONE 7
#define OAKLEY_ATTR_GRP_GEN_TWO 8
#define OAKLEY_ATTR_GRP_CURVE_A 9
#define OAKLEY_ATTR_GRP_CURVE_B 10
#define OAKLEY_ATTR_SA_LD_TYPE 11
#define OAKLEY_ATTR_SA_LD_TYPE_DEFAULT 1
#define OAKLEY_ATTR_SA_LD_TYPE_SEC 1
#define OAKLEY_ATTR_SA_LD_TYPE_KB 2
#define OAKLEY_ATTR_SA_LD_TYPE_MAX 3
#define OAKLEY_ATTR_SA_LD 12
#define OAKLEY_ATTR_SA_LD_SEC_DEFAULT 28800
#define OAKLEY_ATTR_PRF 13
#define OAKLEY_ATTR_KEY_LEN 14
#define OAKLEY_ATTR_FIELD_SIZE 15
#define OAKLEY_ATTR_GRP_ORDER 16
#define OAKLEY_ATTR_BLOCK_SIZE 17
#define OAKLEY_ATTR_GSS_ID 16384
#define MAXPADLWORD 20
struct dhgroup {
int type;
vchar_t *prime;
int gen1;
int gen2;
vchar_t *curve_a;
vchar_t *curve_b;
vchar_t *order;
};
struct ph1handle;
struct ph2handle;
struct isakmp_ivm;
extern int oakley_get_defaultlifetime(void);
extern int oakley_dhinit(void);
extern void oakley_dhgrp_free(struct dhgroup *);
extern int oakley_dh_compute(const struct dhgroup *,
vchar_t *, vchar_t *, vchar_t *, vchar_t **);
extern int oakley_dh_generate(const struct dhgroup *,
vchar_t **, vchar_t **);
extern int oakley_setdhgroup(int, struct dhgroup **);
extern vchar_t *oakley_prf(vchar_t *, vchar_t *, struct ph1handle *);
extern vchar_t *oakley_hash(vchar_t *, struct ph1handle *);
extern int oakley_compute_keymat(struct ph2handle *, int);
#if notyet
extern vchar_t *oakley_compute_hashx(void);
#endif
extern vchar_t *oakley_compute_hash3(struct ph1handle *,
uint32_t, vchar_t *);
extern vchar_t *oakley_compute_hash1(struct ph1handle *,
uint32_t, vchar_t *);
extern vchar_t *oakley_ph1hash_common(struct ph1handle *, int);
extern vchar_t *oakley_ph1hash_base_i(struct ph1handle *, int);
extern vchar_t *oakley_ph1hash_base_r(struct ph1handle *, int);
extern int oakley_get_certtype(vchar_t *);
extern int oakley_validate_auth(struct ph1handle *);
extern int oakley_getmycert(struct ph1handle *);
extern int oakley_getsign(struct ph1handle *);
extern vchar_t *oakley_getcr(struct ph1handle *);
extern struct payload_list *oakley_append_cr(struct payload_list *,
struct ph1handle *);
extern int oakley_checkcr(struct ph1handle *);
extern int oakley_needcr(int);
struct isakmp_gen;
extern int oakley_savecert(struct ph1handle *, struct isakmp_gen *);
extern int oakley_savecr(struct ph1handle *, struct isakmp_gen *);
extern int oakley_skeyid(struct ph1handle *);
extern int oakley_skeyid_dae(struct ph1handle *);
extern int oakley_compute_enckey(struct ph1handle *);
extern int oakley_newiv(struct ph1handle *);
extern struct isakmp_ivm *oakley_newiv2(struct ph1handle *, uint32_t);
extern void oakley_delivm(struct isakmp_ivm *);
extern vchar_t *oakley_do_decrypt(struct ph1handle *,
vchar_t *, vchar_t *, vchar_t *);
extern vchar_t *oakley_do_encrypt(struct ph1handle *,
vchar_t *, vchar_t *, vchar_t *);
#endif