mirror of
https://github.com/torvalds/linux.git
synced 2026-01-25 07:47:50 +00:00
rxrpc: Add YFS RxGK (GSSAPI) security class
Add support for the YFS-variant RxGK security class to support
GSSAPI-derived authentication. This also allows the use of better crypto
over the rxkad security class.
The key payload is XDR encoded of the form:
typedef int64_t opr_time;
const AFSTOKEN_RK_TIX_MAX = 12000; /* Matches entry in rxkad.h */
struct token_rxkad {
afs_int32 viceid;
afs_int32 kvno;
afs_int64 key;
afs_int32 begintime;
afs_int32 endtime;
afs_int32 primary_flag;
opaque ticket<AFSTOKEN_RK_TIX_MAX>;
};
struct token_rxgk {
opr_time begintime;
opr_time endtime;
afs_int64 level;
afs_int64 lifetime;
afs_int64 bytelife;
afs_int64 enctype;
opaque key<>;
opaque ticket<>;
};
const AFSTOKEN_UNION_NOAUTH = 0;
const AFSTOKEN_UNION_KAD = 2;
const AFSTOKEN_UNION_YFSGK = 6;
union ktc_tokenUnion switch (afs_int32 type) {
case AFSTOKEN_UNION_KAD:
token_rxkad kad;
case AFSTOKEN_UNION_YFSGK:
token_rxgk gk;
};
const AFSTOKEN_LENGTH_MAX = 16384;
typedef opaque token_opaque<AFSTOKEN_LENGTH_MAX>;
const AFSTOKEN_MAX = 8;
const AFSTOKEN_CELL_MAX = 64;
struct ktc_setTokenData {
afs_int32 flags;
string cell<AFSTOKEN_CELL_MAX>;
token_opaque tokens<AFSTOKEN_MAX>;
};
The parser for the basic token struct is already present, as is the rxkad
token type. This adds a parser for the rxgk token type.
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: Herbert Xu <herbert@gondor.apana.org.au>
cc: Chuck Lever <chuck.lever@oracle.com>
cc: Simon Horman <horms@kernel.org>
cc: linux-afs@lists.infradead.org
Link: https://patch.msgid.link/20250411095303.2316168-7-dhowells@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
01af642697
commit
0ca100ff4d
@@ -9,6 +9,7 @@
|
||||
#define _KEYS_RXRPC_TYPE_H
|
||||
|
||||
#include <linux/key.h>
|
||||
#include <crypto/krb5.h>
|
||||
|
||||
/*
|
||||
* key type for AF_RXRPC keys
|
||||
@@ -31,6 +32,21 @@ struct rxkad_key {
|
||||
u8 ticket[]; /* the encrypted ticket */
|
||||
};
|
||||
|
||||
/*
|
||||
* RxRPC key for YFS-RxGK (type-6 security)
|
||||
*/
|
||||
struct rxgk_key {
|
||||
s64 begintime; /* Time at which the ticket starts */
|
||||
s64 endtime; /* Time at which the ticket ends */
|
||||
u64 lifetime; /* Maximum lifespan of a connection (seconds) */
|
||||
u64 bytelife; /* Maximum number of bytes on a connection */
|
||||
unsigned int enctype; /* Encoding type */
|
||||
s8 level; /* Negotiated security RXRPC_SECURITY_PLAIN/AUTH/ENCRYPT */
|
||||
struct krb5_buffer key; /* Master key, K0 */
|
||||
struct krb5_buffer ticket; /* Ticket to be passed to server */
|
||||
u8 _key[]; /* Key storage */
|
||||
};
|
||||
|
||||
/*
|
||||
* list of tokens attached to an rxrpc key
|
||||
*/
|
||||
@@ -40,6 +56,7 @@ struct rxrpc_key_token {
|
||||
struct rxrpc_key_token *next; /* the next token in the list */
|
||||
union {
|
||||
struct rxkad_key *kad;
|
||||
struct rxgk_key *rxgk;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user