This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
/* Algorithm info parsing and creation functions
|
||||
* Author: JuanJo Ciarlante <[email protected]>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* for more details.
|
||||
*
|
||||
* RCSID $Id: alg_info.h,v 1.4 2004/09/29 22:39:44 as Exp $
|
||||
*/
|
||||
|
||||
#ifndef ALG_INFO_H
|
||||
#define ALG_INFO_H
|
||||
|
||||
struct esp_info {
|
||||
u_int8_t transid; /* ESP transform */
|
||||
u_int16_t auth; /* AUTH */
|
||||
size_t enckeylen; /* keylength for ESP transform */
|
||||
size_t authkeylen; /* keylength for AUTH */
|
||||
u_int8_t encryptalg; /* normally encryptalg=transid */
|
||||
u_int8_t authalg; /* normally authalg=auth+1 */
|
||||
};
|
||||
|
||||
struct ike_info {
|
||||
u_int16_t ike_ealg; /* high 16 bit nums for reserved */
|
||||
u_int8_t ike_halg;
|
||||
size_t ike_eklen;
|
||||
size_t ike_hklen;
|
||||
u_int16_t ike_modp;
|
||||
};
|
||||
|
||||
#define ALG_INFO_COMMON \
|
||||
int alg_info_cnt; \
|
||||
int ref_cnt; \
|
||||
unsigned alg_info_flags; \
|
||||
unsigned alg_info_protoid
|
||||
|
||||
struct alg_info {
|
||||
ALG_INFO_COMMON;
|
||||
};
|
||||
|
||||
struct alg_info_esp {
|
||||
ALG_INFO_COMMON;
|
||||
struct esp_info esp[64];
|
||||
int esp_pfsgroup;
|
||||
};
|
||||
|
||||
struct alg_info_ike {
|
||||
ALG_INFO_COMMON;
|
||||
struct ike_info ike[64];
|
||||
};
|
||||
#define esp_ealg_id transid
|
||||
#define esp_aalg_id auth
|
||||
#define esp_ealg_keylen enckeylen /* bits */
|
||||
#define esp_aalg_keylen authkeylen /* bits */
|
||||
|
||||
/* alg_info_flags bits */
|
||||
#define ALG_INFO_F_STRICT 0x01
|
||||
|
||||
extern int alg_info_esp_aa2sadb(int auth);
|
||||
extern int alg_info_esp_sadb2aa(int sadb_aalg);
|
||||
extern void alg_info_free(struct alg_info *alg_info);
|
||||
extern void alg_info_addref(struct alg_info *alg_info);
|
||||
extern void alg_info_delref(struct alg_info **alg_info);
|
||||
extern struct alg_info_esp* alg_info_esp_create_from_str(const char *alg_str
|
||||
, const char **err_p);
|
||||
extern struct alg_info_ike* alg_info_ike_create_from_str(const char *alg_str
|
||||
, const char **err_p);
|
||||
extern int alg_info_parse(const char *str);
|
||||
extern int alg_info_snprint(char *buf, int buflen
|
||||
, struct alg_info *alg_info);
|
||||
extern int alg_info_snprint_esp(char *buf, int buflen
|
||||
, struct alg_info_esp *alg_info);
|
||||
extern int alg_info_snprint_ike(char *buf, int buflen
|
||||
, struct alg_info_ike *alg_info);
|
||||
#define ALG_INFO_ESP_FOREACH(ai, ai_esp, i) \
|
||||
for (i=(ai)->alg_info_cnt,ai_esp=(ai)->esp; i--; ai_esp++)
|
||||
#define ALG_INFO_IKE_FOREACH(ai, ai_ike, i) \
|
||||
for (i=(ai)->alg_info_cnt,ai_ike=(ai)->ike; i--; ai_ike++)
|
||||
#endif /* ALG_INFO_H */
|
||||
Reference in New Issue
Block a user