diff options
| author | Kevin Coffman <kwc@citi.umich.edu> | 2010-03-17 13:02:53 -0400 |
|---|---|---|
| committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2010-05-14 15:09:16 -0400 |
| commit | 4891f2d008e4343eedea39ba1fe74864f1d32be0 (patch) | |
| tree | 6fb4048a44cd1c91f818ddc372d5410e59108bdb /include/linux | |
| parent | e1f6c07b1160ef28e8754d12e6c03288dd9d5ca8 (diff) | |
gss_krb5: import functionality to derive keys into the kernel
Import the code to derive Kerberos keys from a base key into the
kernel. This will allow us to change the format of the context
information sent down from gssd to include only a single key.
Signed-off-by: Kevin Coffman <kwc@citi.umich.edu>
Signed-off-by: Steve Dickson <steved@redhat.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/sunrpc/gss_krb5.h | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/include/linux/sunrpc/gss_krb5.h b/include/linux/sunrpc/gss_krb5.h index abf26efd44ac..d31ba0304d18 100644 --- a/include/linux/sunrpc/gss_krb5.h +++ b/include/linux/sunrpc/gss_krb5.h | |||
| @@ -41,6 +41,9 @@ | |||
| 41 | #include <linux/sunrpc/gss_err.h> | 41 | #include <linux/sunrpc/gss_err.h> |
| 42 | #include <linux/sunrpc/gss_asn1.h> | 42 | #include <linux/sunrpc/gss_asn1.h> |
| 43 | 43 | ||
| 44 | /* Length of constant used in key derivation */ | ||
| 45 | #define GSS_KRB5_K5CLENGTH (5) | ||
| 46 | |||
| 44 | /* Maximum key length (in bytes) for the supported crypto algorithms*/ | 47 | /* Maximum key length (in bytes) for the supported crypto algorithms*/ |
| 45 | #define GSS_KRB5_MAX_KEYLEN (32) | 48 | #define GSS_KRB5_MAX_KEYLEN (32) |
| 46 | 49 | ||
| @@ -69,6 +72,9 @@ struct gss_krb5_enctype { | |||
| 69 | u32 (*decrypt) (struct crypto_blkcipher *tfm, | 72 | u32 (*decrypt) (struct crypto_blkcipher *tfm, |
| 70 | void *iv, void *in, void *out, | 73 | void *iv, void *in, void *out, |
| 71 | int length); /* decryption function */ | 74 | int length); /* decryption function */ |
| 75 | u32 (*mk_key) (struct gss_krb5_enctype *gk5e, | ||
| 76 | struct xdr_netobj *in, | ||
| 77 | struct xdr_netobj *out); /* complete key generation */ | ||
| 72 | }; | 78 | }; |
| 73 | 79 | ||
| 74 | struct krb5_ctx { | 80 | struct krb5_ctx { |
| @@ -148,6 +154,25 @@ enum seal_alg { | |||
| 148 | #define ENCTYPE_UNKNOWN 0x01ff | 154 | #define ENCTYPE_UNKNOWN 0x01ff |
| 149 | 155 | ||
| 150 | /* | 156 | /* |
| 157 | * Constants used for key derivation | ||
| 158 | */ | ||
| 159 | /* for 3DES */ | ||
| 160 | #define KG_USAGE_SEAL (22) | ||
| 161 | #define KG_USAGE_SIGN (23) | ||
| 162 | #define KG_USAGE_SEQ (24) | ||
| 163 | |||
| 164 | /* from rfc3961 */ | ||
| 165 | #define KEY_USAGE_SEED_CHECKSUM (0x99) | ||
| 166 | #define KEY_USAGE_SEED_ENCRYPTION (0xAA) | ||
| 167 | #define KEY_USAGE_SEED_INTEGRITY (0x55) | ||
| 168 | |||
| 169 | /* from rfc4121 */ | ||
| 170 | #define KG_USAGE_ACCEPTOR_SEAL (22) | ||
| 171 | #define KG_USAGE_ACCEPTOR_SIGN (23) | ||
| 172 | #define KG_USAGE_INITIATOR_SEAL (24) | ||
| 173 | #define KG_USAGE_INITIATOR_SIGN (25) | ||
| 174 | |||
| 175 | /* | ||
| 151 | * This compile-time check verifies that we will not exceed the | 176 | * This compile-time check verifies that we will not exceed the |
| 152 | * slack space allotted by the client and server auth_gss code | 177 | * slack space allotted by the client and server auth_gss code |
| 153 | * before they call gss_wrap(). | 178 | * before they call gss_wrap(). |
| @@ -211,3 +236,9 @@ krb5_get_seq_num(struct crypto_blkcipher *key, | |||
| 211 | 236 | ||
| 212 | int | 237 | int |
| 213 | xdr_extend_head(struct xdr_buf *buf, unsigned int base, unsigned int shiftlen); | 238 | xdr_extend_head(struct xdr_buf *buf, unsigned int base, unsigned int shiftlen); |
| 239 | |||
| 240 | u32 | ||
| 241 | krb5_derive_key(struct gss_krb5_enctype *gk5e, | ||
| 242 | const struct xdr_netobj *inkey, | ||
| 243 | struct xdr_netobj *outkey, | ||
| 244 | const struct xdr_netobj *in_constant); | ||
