#ifndef _ALGORITHM_H
#define _ALGORITHM_H
#include <gnuc.h>
enum {
algclass_ipsec_enc,
algclass_ipsec_auth,
algclass_ipsec_comp,
algclass_isakmp_enc,
algclass_isakmp_hash,
algclass_isakmp_dh,
algclass_isakmp_ameth,
#define MAXALGCLASS 7
};
#define ALG_DEFAULT_KEYLEN 64
#define ALGTYPE_NOTHING 0
enum algtype {
algtype_nothing = 0,
algtype_des_iv64,
algtype_des,
algtype_3des,
algtype_rc5,
algtype_idea,
algtype_cast128,
algtype_blowfish,
algtype_3idea,
algtype_des_iv32,
algtype_rc4,
algtype_null_enc,
algtype_aes,
algtype_aesgcm16,
algtype_twofish,
algtype_camellia,
algtype_hmac_md5,
algtype_hmac_sha1,
algtype_des_mac,
algtype_kpdk,
algtype_non_auth,
algtype_hmac_sha2_256,
algtype_hmac_sha2_384,
algtype_hmac_sha2_512,
algtype_oui,
algtype_deflate,
algtype_lzs,
algtype_md5,
algtype_sha1,
algtype_tiger,
algtype_sha2_256,
algtype_sha2_384,
algtype_sha2_512,
algtype_modp768,
algtype_modp1024,
algtype_ec2n155,
algtype_ec2n185,
algtype_modp1536,
algtype_modp2048,
algtype_modp3072,
algtype_modp4096,
algtype_modp6144,
algtype_modp8192,
algtype_psk,
algtype_dsssig,
algtype_rsasig,
algtype_rsaenc,
algtype_rsarev,
algtype_gssapikrb,
#ifdef ENABLE_HYBRID
algtype_hybrid_rsa_s,
algtype_hybrid_dss_s,
algtype_hybrid_rsa_c,
algtype_hybrid_dss_c,
algtype_xauth_psk_s,
algtype_xauth_psk_c,
algtype_xauth_rsa_s,
algtype_xauth_rsa_c,
#endif
};
struct hmac_algorithm {
const char *name;
int type;
int doi;
caddr_t (*init)(vchar_t *);
void (*update)(caddr_t, vchar_t *);
vchar_t *(*final)(caddr_t);
int (*hashlen)(void);
vchar_t *(*one)(vchar_t *, vchar_t *);
};
struct hash_algorithm {
const char *name;
int type;
int doi;
caddr_t (*init)(void);
void (*update)(caddr_t, vchar_t *);
vchar_t *(*final)(caddr_t);
int (*hashlen)(void);
vchar_t *(*one)(vchar_t *);
};
struct enc_algorithm {
const char *name;
int type;
int doi;
int blocklen;
vchar_t *(*encrypt)(vchar_t *, vchar_t *, vchar_t *);
vchar_t *(*decrypt)(vchar_t *, vchar_t *, vchar_t *);
int (*weakkey)(vchar_t *);
int (*keylen)(int);
};
struct dh_algorithm {
const char *name;
int type;
int doi;
struct dhgroup *dhgroup;
};
struct misc_algorithm {
const char *name;
int type;
int doi;
};
extern int alg_oakley_hashdef_ok(int);
extern int alg_oakley_hashdef_doi(int);
extern int alg_oakley_hashdef_hashlen(int);
extern vchar_t *alg_oakley_hashdef_one(int, vchar_t *);
extern int alg_oakley_hmacdef_doi(int);
extern vchar_t *alg_oakley_hmacdef_one(int, vchar_t *, vchar_t *);
extern int alg_oakley_encdef_ok(int);
extern int alg_oakley_encdef_doi(int);
extern int alg_oakley_encdef_keylen(int, int);
extern int alg_oakley_encdef_blocklen(int);
extern vchar_t *alg_oakley_encdef_decrypt(int, vchar_t *, vchar_t *, vchar_t *);
extern vchar_t *alg_oakley_encdef_encrypt(int, vchar_t *, vchar_t *, vchar_t *);
extern int alg_ipsec_encdef_doi(int);
extern int alg_ipsec_encdef_keylen(int, int);
extern int alg_ipsec_hmacdef_doi(int);
extern int alg_ipsec_hmacdef_hashlen(int);
extern int alg_ipsec_compdef_doi(int);
extern int alg_oakley_dhdef_doi(int);
extern int alg_oakley_dhdef_ok(int);
extern struct dhgroup *alg_oakley_dhdef_group(int);
extern int alg_oakley_authdef_doi(int);
extern int default_keylen(int, int);
extern int check_keylen(int, int, int);
extern int algtype2doi(int, int);
extern int algclass2doi(int);
extern const char *alg_oakley_encdef_name(int);
extern const char *alg_oakley_hashdef_name(int);
extern const char *alg_oakley_dhdef_name(int);
extern const char *alg_oakley_authdef_name(int);
#endif