1 /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
2 * vim:expandtab:shiftwidth=8:tabstop=8:
4 * Modified from NFSv4 project for Lustre
5 * Copyright 2004, Cluster File Systems, Inc.
7 * Author: Eric Mei <ericm@clusterfs.com>
10 #include <linux/lustre_sec.h>
11 #ifndef __SEC_GSS_GSS_INTERNAL_H_
12 #define __SEC_GSS_GSS_INTERNAL_H_
14 /* remove this mess when libkcrypt is ready --umka */
17 * Algorithm masks and types.
19 #define CRYPTO_ALG_TYPE_MASK 0x000000ff
20 #define CRYPTO_ALG_TYPE_CIPHER 0x00000001
21 #define CRYPTO_ALG_TYPE_DIGEST 0x00000002
22 #define CRYPTO_ALG_TYPE_COMPRESS 0x00000004
25 * Transform masks and values (for crt_flags).
27 #define CRYPTO_TFM_MODE_MASK 0x000000ff
28 #define CRYPTO_TFM_REQ_MASK 0x000fff00
29 #define CRYPTO_TFM_RES_MASK 0xfff00000
31 #define CRYPTO_TFM_MODE_ECB 0x00000001
32 #define CRYPTO_TFM_MODE_CBC 0x00000002
33 #define CRYPTO_TFM_MODE_CFB 0x00000004
34 #define CRYPTO_TFM_MODE_CTR 0x00000008
36 #define CRYPTO_TFM_REQ_WEAK_KEY 0x00000100
37 #define CRYPTO_TFM_RES_WEAK_KEY 0x00100000
38 #define CRYPTO_TFM_RES_BAD_KEY_LEN 0x00200000
39 #define CRYPTO_TFM_RES_BAD_KEY_SCHED 0x00400000
40 #define CRYPTO_TFM_RES_BAD_BLOCK_LEN 0x00800000
41 #define CRYPTO_TFM_RES_BAD_FLAGS 0x01000000
44 * Miscellaneous stuff.
46 #define CRYPTO_UNSPEC 0
47 #define CRYPTO_MAX_ALG_NAME 64
49 static inline struct crypto_tfm *
50 crypto_alloc_tfm(const char *name, __u32 flags)
56 crypto_free_tfm(struct crypto_tfm *tfm)
62 crypto_digest_setkey(struct crypto_tfm *tfm,
63 const __u8 *key, unsigned int keylen)
68 static inline unsigned int
69 crypto_tfm_alg_blocksize(struct crypto_tfm *tfm)
74 static inline unsigned int
75 crypto_tfm_alg_ivsize(struct crypto_tfm *tfm)
80 #endif /* __KERNEL__ */
88 typedef struct rawobj_s {
93 typedef struct rawobj_buf_s {
100 int rawobj_alloc(rawobj_t *obj, char *buf, int len);
101 void rawobj_free(rawobj_t *obj);
102 int rawobj_equal(rawobj_t *a, rawobj_t *b);
103 int rawobj_dup(rawobj_t *dest, rawobj_t *src);
104 int rawobj_serialize(rawobj_t *obj, __u32 **buf, __u32 *buflen);
105 int rawobj_extract(rawobj_t *obj, __u32 **buf, __u32 *buflen);
106 int rawobj_extract_local(rawobj_t *obj, __u32 **buf, __u32 *buflen);
109 * mark of the interface between kernel and lgssd/lsvcgssd
111 #define GSSD_INTERFACE_VERSION (1)
114 * target of gss request
116 #define LUSTRE_GSS_SVC_MDS 0
117 #define LUSTRE_GSS_SVC_OSS 1
120 /* on-the-wire gss cred: */
121 struct rpc_gss_wire_cred {
122 __u32 gc_v; /* version */
123 __u32 gc_proc; /* control procedure */
124 __u32 gc_seq; /* sequence number */
125 __u32 gc_svc; /* service */
126 rawobj_t gc_ctx; /* context handle */
129 struct gss_svc_data {
130 /* decoded gss client cred: */
131 struct rpc_gss_wire_cred clcred;
132 /* internal used status */
133 unsigned int is_init:1,
141 * data types in gss header
143 #define MAXSEQ 0x80000000 /* maximum legal sequence number, from rfc 2203 */
146 RPC_GSS_PROC_DATA = 0,
147 RPC_GSS_PROC_INIT = 1,
148 RPC_GSS_PROC_CONTINUE_INIT = 2,
149 RPC_GSS_PROC_DESTROY = 3,
153 RPC_GSS_SVC_NONE = 1,
154 RPC_GSS_SVC_INTEGRITY = 2,
155 RPC_GSS_SVC_PRIVACY = 3,
158 /* on-the-wire gss verifier: */
159 struct rpc_gss_wire_verf {
165 atomic_t gc_refcount;
168 spinlock_t gc_seq_lock;
169 struct gss_ctx *gc_gss_ctx;
170 rawobj_t gc_wire_ctx;
175 struct ptlrpc_cred gc_base;
177 struct gss_cl_ctx *gc_ctx;
181 * This only guaranteed be enough for current krb5 des-cbc-crc . We might
182 * adjust this when new enc type or mech added in.
184 #define GSS_PRIVBUF_PREFIX_LEN (32)
185 #define GSS_PRIVBUF_SUFFIX_LEN (32)
187 /* This is too coarse. We'll let mech determine it */
188 #define GSS_MAX_AUTH_PAYLOAD (128)
190 /* gss_mech_switch.c */
191 int init_kerberos_module(void);
192 void cleanup_kerberos_module(void);
194 /* gss_generic_token.c */
195 int g_token_size(rawobj_t *mech, unsigned int body_size);
196 void g_make_token_header(rawobj_t *mech, int body_size, unsigned char **buf);
197 __u32 g_verify_token_header(rawobj_t *mech, int *body_size,
198 unsigned char **buf_in, int toksize);
201 int gss_svc_init(void);
202 void gss_svc_exit(void);
204 #endif /* __SEC_GSS_GSS_INTERNAL_H_ */