krb5.h

来自「一个支持FTP,SFTP的客户端程序」· C头文件 代码 · 共 1,815 行 · 第 1/5 页

H
1,815
字号
#define	ENCTYPE_DES_CBC_MD4	0x0002	/* DES cbc mode with RSA-MD4 */
#define	ENCTYPE_DES_CBC_MD5	0x0003	/* DES cbc mode with RSA-MD5 */
#define	ENCTYPE_DES_CBC_RAW	0x0004	/* DES cbc mode raw */
/* XXX deprecated? */
#define	ENCTYPE_DES3_CBC_SHA	0x0005	/* DES-3 cbc mode with NIST-SHA */
#define	ENCTYPE_DES3_CBC_RAW	0x0006	/* DES-3 cbc mode raw */
#define ENCTYPE_DES_HMAC_SHA1	0x0008
#define ENCTYPE_DES3_CBC_SHA1	0x0010
#define ENCTYPE_UNKNOWN		0x01ff
/* local crud */
/* marc's DES-3 with 32-bit length */
#define ENCTYPE_LOCAL_DES3_HMAC_SHA1 0x7007

#define	CKSUMTYPE_CRC32		0x0001
#define	CKSUMTYPE_RSA_MD4	0x0002
#define	CKSUMTYPE_RSA_MD4_DES	0x0003
#define	CKSUMTYPE_DESCBC	0x0004
/* des-mac-k */
/* rsa-md4-des-k */
#define	CKSUMTYPE_RSA_MD5	0x0007
#define	CKSUMTYPE_RSA_MD5_DES	0x0008
#define CKSUMTYPE_NIST_SHA	0x0009
#define CKSUMTYPE_HMAC_SHA1_DES3	0x000c

#ifndef krb5_roundup
/* round x up to nearest multiple of y */
#define krb5_roundup(x, y) ((((x) + (y) - 1)/(y))*(y))
#endif /* roundup */

/* macro function definitions to help clean up code */

#if 1
#define krb5_x(ptr,args) ((ptr)?((*(ptr)) args):(abort(),1))
#define krb5_xc(ptr,args) ((ptr)?((*(ptr)) args):(abort(),(char*)0))
#else
#define krb5_x(ptr,args) ((*(ptr)) args)
#define krb5_xc(ptr,args) ((*(ptr)) args)
#endif

KRB5_DLLIMP krb5_error_code KRB5_CALLCONV
    krb5_c_encrypt
    KRB5_PROTOTYPE((krb5_context context, krb5_const krb5_keyblock *key,
		    krb5_keyusage usage, krb5_const krb5_data *ivec,
		    krb5_const krb5_data *input, krb5_enc_data *output));

KRB5_DLLIMP krb5_error_code KRB5_CALLCONV
    krb5_c_decrypt
    KRB5_PROTOTYPE((krb5_context context, krb5_const krb5_keyblock *key,
		    krb5_keyusage usage, krb5_const krb5_data *ivec,
		    krb5_const krb5_enc_data *input, krb5_data *output));

KRB5_DLLIMP krb5_error_code KRB5_CALLCONV
    krb5_c_encrypt_length
    KRB5_PROTOTYPE((krb5_context context, krb5_enctype enctype,
		    size_t inputlen, size_t *length));

KRB5_DLLIMP krb5_error_code KRB5_CALLCONV
    krb5_c_block_size
    KRB5_PROTOTYPE((krb5_context context, krb5_enctype enctype,
		    size_t *blocksize));

KRB5_DLLIMP krb5_error_code KRB5_CALLCONV
    krb5_c_make_random_key
    KRB5_PROTOTYPE((krb5_context context, krb5_enctype enctype,
		    krb5_keyblock *random_key));

KRB5_DLLIMP krb5_error_code KRB5_CALLCONV
    krb5_c_random_make_octets
    KRB5_PROTOTYPE((krb5_context context, krb5_data *data));

KRB5_DLLIMP krb5_error_code KRB5_CALLCONV
    krb5_c_random_seed
    KRB5_PROTOTYPE((krb5_context context, krb5_data *data));

KRB5_DLLIMP krb5_error_code KRB5_CALLCONV
    krb5_c_string_to_key
    KRB5_PROTOTYPE((krb5_context context, krb5_enctype enctype,
		    krb5_const krb5_data *string, krb5_const krb5_data *salt,
		    krb5_keyblock *key));

KRB5_DLLIMP krb5_error_code KRB5_CALLCONV
    krb5_c_enctype_compare
    KRB5_PROTOTYPE((krb5_context context, krb5_enctype e1, krb5_enctype e2,
		    krb5_boolean *similar));

KRB5_DLLIMP krb5_error_code KRB5_CALLCONV
    krb5_c_make_checksum
    KRB5_PROTOTYPE((krb5_context context, krb5_cksumtype cksumtype,
		    krb5_const krb5_keyblock *key, krb5_keyusage usage,
		    krb5_const krb5_data *input, krb5_checksum *cksum));
    
KRB5_DLLIMP krb5_error_code KRB5_CALLCONV
    krb5_c_verify_checksum
    KRB5_PROTOTYPE((krb5_context context, 
		    krb5_const krb5_keyblock *key, krb5_keyusage usage,
		    krb5_const krb5_data *data,
		    krb5_const krb5_checksum *cksum,
		    krb5_boolean *valid));
    
KRB5_DLLIMP krb5_error_code KRB5_CALLCONV
    krb5_c_checksum_length
    KRB5_PROTOTYPE((krb5_context context, krb5_cksumtype cksumtype,
		    size_t *length));

KRB5_DLLIMP krb5_error_code KRB5_CALLCONV
    krb5_c_keyed_checksum_types
    KRB5_PROTOTYPE((krb5_context context, krb5_enctype enctype, 
		    unsigned int *count, krb5_cksumtype **cksumtypes));

#define KRB5_KEYUSAGE_AS_REQ_PA_ENC_TS		1
#define KRB5_KEYUSAGE_KDC_REP_TICKET		2
#define KRB5_KEYUSAGE_AS_REP_ENCPART		3
#define KRB5_KEYUSAGE_TGS_REQ_AD_SESSKEY	4
#define KRB5_KEYUSAGE_TGS_REQ_AD_SUBKEY		5
#define KRB5_KEYUSAGE_TGS_REQ_AUTH_CKSUM	6
#define KRB5_KEYUSAGE_TGS_REQ_AUTH		7
#define KRB5_KEYUSAGE_TGS_REP_ENCPART_SESSKEY	8
#define KRB5_KEYUSAGE_TGS_REP_ENCPART_SUBKEY	9
#define KRB5_KEYUSAGE_AP_REQ_AUTH_CKSUM		10
#define KRB5_KEYUSAGE_AP_REQ_AUTH		11
#define KRB5_KEYUSAGE_AP_REP_ENCPART		12
#define KRB5_KEYUSAGE_KRB_PRIV_ENCPART		13
#define KRB5_KEYUSAGE_KRB_CRED_ENCPART		14
#define KRB5_KEYUSAGE_KRB_SAFE_CKSUM		15
#define KRB5_KEYUSAGE_APP_DATA_ENCRYPT		16
#define KRB5_KEYUSAGE_APP_DATA_CKSUM		17
#define KRB5_KEYUSAGE_KRB_ERROR_CKSUM		18
#define KRB5_KEYUSAGE_AD_KDCISSUED_CKSUM	19
#define KRB5_KEYUSAGE_AD_MTE			20
#define KRB5_KEYUSAGE_AD_ITE			21

/* XXX need to register these */

#define KRB5_KEYUSAGE_GSS_TOK_MIC		22
#define KRB5_KEYUSAGE_GSS_TOK_WRAP_INTEG	23
#define KRB5_KEYUSAGE_GSS_TOK_WRAP_PRIV		24


KRB5_DLLIMP krb5_boolean KRB5_CALLCONV valid_enctype
	KRB5_PROTOTYPE((krb5_const krb5_enctype ktype));
KRB5_DLLIMP krb5_boolean KRB5_CALLCONV valid_cksumtype
	KRB5_PROTOTYPE((krb5_const krb5_cksumtype ctype));
KRB5_DLLIMP krb5_boolean KRB5_CALLCONV is_coll_proof_cksum
	KRB5_PROTOTYPE((krb5_const krb5_cksumtype ctype));
KRB5_DLLIMP krb5_boolean KRB5_CALLCONV is_keyed_cksum
	KRB5_PROTOTYPE((krb5_const krb5_cksumtype ctype));

#ifdef KRB5_OLD_CRYPTO
/*
 * old cryptosystem routine prototypes.  These are now layered
 * on top of the functions above.
 */
KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_encrypt
	KRB5_PROTOTYPE((krb5_context context,
		krb5_const krb5_pointer inptr,
		krb5_pointer outptr,
		krb5_const size_t size,
		krb5_encrypt_block FAR * eblock,
		krb5_pointer ivec));
KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_decrypt
	KRB5_PROTOTYPE((krb5_context context,
		krb5_const krb5_pointer inptr,
		krb5_pointer outptr,
		krb5_const size_t size,
		krb5_encrypt_block FAR * eblock,
		krb5_pointer ivec));
KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_process_key
	KRB5_PROTOTYPE((krb5_context context,
		krb5_encrypt_block FAR * eblock,
		krb5_const krb5_keyblock FAR * key));
KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_finish_key
	KRB5_PROTOTYPE((krb5_context context,
		krb5_encrypt_block FAR * eblock));
KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_string_to_key
	KRB5_PROTOTYPE((krb5_context context,
		krb5_const krb5_encrypt_block FAR * eblock,
		krb5_keyblock FAR * keyblock,
		krb5_const krb5_data FAR * data,
		krb5_const krb5_data FAR * salt));
KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_init_random_key
	KRB5_PROTOTYPE((krb5_context context,
		krb5_const krb5_encrypt_block FAR * eblock,
		krb5_const krb5_keyblock FAR * keyblock,
		krb5_pointer FAR * ptr));
KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_finish_random_key
	KRB5_PROTOTYPE((krb5_context context,
		krb5_const krb5_encrypt_block FAR * eblock,
		krb5_pointer FAR * ptr));
KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_random_key
	KRB5_PROTOTYPE((krb5_context context,
		krb5_const krb5_encrypt_block FAR * eblock,
		krb5_pointer ptr,
		krb5_keyblock FAR * FAR * keyblock));
KRB5_DLLIMP krb5_enctype KRB5_CALLCONV krb5_eblock_enctype
	KRB5_PROTOTYPE((krb5_context context,
		krb5_const krb5_encrypt_block FAR * eblock));
KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_use_enctype
	KRB5_PROTOTYPE((krb5_context context,
		krb5_encrypt_block FAR * eblock,
		krb5_const krb5_enctype enctype));
KRB5_DLLIMP size_t KRB5_CALLCONV krb5_encrypt_size
	KRB5_PROTOTYPE((krb5_const size_t length,
		krb5_enctype crypto));
KRB5_DLLIMP size_t KRB5_CALLCONV krb5_checksum_size
	KRB5_PROTOTYPE((krb5_context context,
		krb5_const krb5_cksumtype ctype));
KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_calculate_checksum
	KRB5_PROTOTYPE((krb5_context context,
		krb5_const krb5_cksumtype ctype,
		krb5_const krb5_pointer in, krb5_const size_t in_length,
		krb5_const krb5_pointer seed, krb5_const size_t seed_length,
		krb5_checksum FAR * outcksum));
KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_verify_checksum
	KRB5_PROTOTYPE((krb5_context context,
		krb5_const krb5_cksumtype ctype,
		krb5_const krb5_checksum FAR * cksum,
		krb5_const krb5_pointer in, krb5_const size_t in_length,
		krb5_const krb5_pointer seed, krb5_const size_t seed_length));

KRB5_DLLIMP krb5_error_code KRB5_CALLCONV krb5_random_confounder
	KRB5_PROTOTYPE((size_t, krb5_pointer));

krb5_error_code krb5_encrypt_data
	KRB5_PROTOTYPE((krb5_context context, krb5_keyblock *key, 
		krb5_pointer ivec, krb5_data *data, 
		krb5_enc_data *enc_data));

krb5_error_code krb5_decrypt_data
	KRB5_PROTOTYPE((krb5_context context, krb5_keyblock *key, 
		krb5_pointer ivec, krb5_enc_data *data, 
		krb5_data *enc_data));

#endif /* KRB5_OLD_CRYPTO */

/*
 * end "encryption.h"
 */

/*
 * begin "fieldbits.h"
 */

/* kdc_options for kdc_request */
/* options is 32 bits; each host is responsible to put the 4 bytes
   representing these bits into net order before transmission */
/* #define	KDC_OPT_RESERVED	0x80000000 */
#define	KDC_OPT_FORWARDABLE		0x40000000
#define	KDC_OPT_FORWARDED		0x20000000
#define	KDC_OPT_PROXIABLE		0x10000000
#define	KDC_OPT_PROXY			0x08000000
#define	KDC_OPT_ALLOW_POSTDATE		0x04000000
#define	KDC_OPT_POSTDATED		0x02000000
/* #define	KDC_OPT_UNUSED		0x01000000 */
#define	KDC_OPT_RENEWABLE		0x00800000
/* #define	KDC_OPT_UNUSED		0x00400000 */
/* #define	KDC_OPT_RESERVED	0x00200000 */
/* #define	KDC_OPT_RESERVED	0x00100000 */
/* #define	KDC_OPT_RESERVED	0x00080000 */
/* #define	KDC_OPT_RESERVED	0x00040000 */
/* #define	KDC_OPT_RESERVED	0x00020000 */
/* #define	KDC_OPT_RESERVED	0x00010000 */
/* #define	KDC_OPT_RESERVED	0x00008000 */
/* #define	KDC_OPT_RESERVED	0x00004000 */
/* #define	KDC_OPT_RESERVED	0x00002000 */
/* #define	KDC_OPT_RESERVED	0x00001000 */
/* #define	KDC_OPT_RESERVED	0x00000800 */
/* #define	KDC_OPT_RESERVED	0x00000400 */
/* #define	KDC_OPT_RESERVED	0x00000200 */
/* #define	KDC_OPT_RESERVED	0x00000100 */
/* #define	KDC_OPT_RESERVED	0x00000080 */
/* #define	KDC_OPT_RESERVED	0x00000040 */
/* #define	KDC_OPT_RESERVED	0x00000020 */
#define	KDC_OPT_RENEWABLE_OK		0x00000010
#define	KDC_OPT_ENC_TKT_IN_SKEY		0x00000008
/* #define	KDC_OPT_UNUSED		0x00000004 */
#define	KDC_OPT_RENEW			0x00000002
#define	KDC_OPT_VALIDATE		0x00000001

/*
 * Mask of ticket flags in the TGT which should be converted into KDC
 * options when using the TGT to get derivitive tickets.
 * 
 *  New mask = KDC_OPT_FORWARDABLE | KDC_OPT_PROXIABLE |
 *	       KDC_OPT_ALLOW_POSTDATE | KDC_OPT_RENEWABLE
 */
#define KDC_TKT_COMMON_MASK		0x54800000

/* definitions for ap_options fields */
/* ap_options are 32 bits; each host is responsible to put the 4 bytes
   representing these bits into net order before transmission */
#define	AP_OPTS_RESERVED		0x80000000
#define	AP_OPTS_USE_SESSION_KEY		0x40000000
#define	AP_OPTS_MUTUAL_REQUIRED		0x20000000
/* #define	AP_OPTS_RESERVED	0x10000000 */
/* #define	AP_OPTS_RESERVED	0x08000000 */
/* #define	AP_OPTS_RESERVED	0x04000000 */
/* #define	AP_OPTS_RESERVED	0x02000000 */
/* #define	AP_OPTS_RESERVED	0x01000000 */
/* #define	AP_OPTS_RESERVED	0x00800000 */
/* #define	AP_OPTS_RESERVED	0x00400000 */
/* #define	AP_OPTS_RESERVED	0x00200000 */
/* #define	AP_OPTS_RESERVED	0x00100000 */
/* #define	AP_OPTS_RESERVED	0x00080000 */
/* #define	AP_OPTS_RESERVED	0x00040000 */
/* #define	AP_OPTS_RESERVED	0x00020000 */
/* #define	AP_OPTS_RESERVED	0x00010000 */
/* #define	AP_OPTS_RESERVED	0x00008000 */
/* #define	AP_OPTS_RESERVED	0x00004000 */
/* #define	AP_OPTS_RESERVED	0x00002000 */
/* #define	AP_OPTS_RESERVED	0x00001000 */
/* #define	AP_OPTS_RESERVED	0x00000800 */
/* #define	AP_OPTS_RESERVED	0x00000400 */
/* #define	AP_OPTS_RESERVED	0x00000200 */
/* #define	AP_OPTS_RESERVED	0x00000100 */
/* #define	AP_OPTS_RESERVED	0x00000080 */
/* #define	AP_OPTS_RESERVED	0x00000040 */
/* #define	AP_OPTS_RESERVED	0x00000020 */
/* #define	AP_OPTS_RESERVED	0x00000010 */
/* #define	AP_OPTS_RESERVED	0x00000008 */
/* #define	AP_OPTS_RESERVED	0x00000004 */
/* #define	AP_OPTS_RESERVED	0x00000002 */
#define AP_OPTS_USE_SUBKEY	0x00000001

#define AP_OPTS_WIRE_MASK	0xfffffff0

/* definitions for ad_type fields. */
#define	AD_TYPE_RESERVED	0x8000
#define	AD_TYPE_EXTERNAL	0x4000
#define	AD_TYPE_REGISTERED	0x2000

#define AD_TYPE_FIELD_TYPE_MASK	0x1fff

/* Ticket flags */
/* flags are 32 bits; each host is responsible to put the 4 bytes
   representing these bits into net order before transmission */
/* #define	TKT_FLG_RESERVED	0x80000000 */
#define	TKT_FLG_FORWARDABLE		0x40000000
#define	TKT_FLG_FORWARDED		0x20000000
#define	TKT_FLG_PROXIABLE		0x10000000
#define	TKT_FLG_PROXY			0x08000000
#define	TKT_FLG_MAY_POSTDATE		0x04000000
#define	TKT_FLG_POSTDATED		0x02000000
#define	TKT_FLG_INVALID			0x01000000
#define	TKT_FLG_RENEWABLE		0x00800000
#define	TKT_FLG_INITIAL			0x00400000
#define	TKT_FLG_PRE_AUTH		0x00200000
#define	TKT_FLG_HW_AUTH			0x00100000
/* #define	TKT_FLG_RESERVED	0x00080000 */
/* #define	TKT_FLG_RESERVED	0x00040000 */
/* #define	TKT_FLG_RESERVED	0x00020000 */
/* #define	TKT_FLG_RESERVED	0x00010000 */
/* #define	TKT_FLG_RESERVED	0x00008000 */
/* #define	TKT_FLG_RESERVED	0x00004000 */
/* #define	TKT_FLG_RESERVED	0x00002000 */
/* #define	TKT_FLG_RESERVED	0x00001000 */
/* #define	TKT_FLG_RESERVED	0x00000800 */
/* #define	TKT_FLG_RESERVED	0x00000400 */
/* #define	TKT_FLG_RESERVED	0x00000200 */
/* #define	TKT_FLG_RESERVED	0x00000100 */
/* #define	TKT_FLG_RESERVED	0x00000080 */
/* #define	TKT_FLG_RESERVED	0x00000040 */
/* #define	TKT_FLG_RESERVED	0x00000020 */
/* #define	TKT_FLG_RESERVED	0x00000010 */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?