Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /* RxRPC key type
0003  *
0004  * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
0005  * Written by David Howells (dhowells@redhat.com)
0006  */
0007 
0008 #ifndef _KEYS_RXRPC_TYPE_H
0009 #define _KEYS_RXRPC_TYPE_H
0010 
0011 #include <linux/key.h>
0012 
0013 /*
0014  * key type for AF_RXRPC keys
0015  */
0016 extern struct key_type key_type_rxrpc;
0017 
0018 extern struct key *rxrpc_get_null_key(const char *);
0019 
0020 /*
0021  * RxRPC key for Kerberos IV (type-2 security)
0022  */
0023 struct rxkad_key {
0024     u32 vice_id;
0025     u32 start;          /* time at which ticket starts */
0026     u32 expiry;         /* time at which ticket expires */
0027     u32 kvno;           /* key version number */
0028     u8  primary_flag;       /* T if key for primary cell for this user */
0029     u16 ticket_len;     /* length of ticket[] */
0030     u8  session_key[8];     /* DES session key */
0031     u8  ticket[];       /* the encrypted ticket */
0032 };
0033 
0034 /*
0035  * list of tokens attached to an rxrpc key
0036  */
0037 struct rxrpc_key_token {
0038     u16 security_index;     /* RxRPC header security index */
0039     bool    no_leak_key;        /* Don't copy the key to userspace */
0040     struct rxrpc_key_token *next;   /* the next token in the list */
0041     union {
0042         struct rxkad_key *kad;
0043     };
0044 };
0045 
0046 /*
0047  * structure of raw payloads passed to add_key() or instantiate key
0048  */
0049 struct rxrpc_key_data_v1 {
0050     u16     security_index;
0051     u16     ticket_length;
0052     u32     expiry;         /* time_t */
0053     u32     kvno;
0054     u8      session_key[8];
0055     u8      ticket[];
0056 };
0057 
0058 /*
0059  * AF_RXRPC key payload derived from XDR format
0060  * - based on openafs-1.4.10/src/auth/afs_token.xg
0061  */
0062 #define AFSTOKEN_LENGTH_MAX     16384   /* max payload size */
0063 #define AFSTOKEN_STRING_MAX     256 /* max small string length */
0064 #define AFSTOKEN_DATA_MAX       64  /* max small data length */
0065 #define AFSTOKEN_CELL_MAX       64  /* max cellname length */
0066 #define AFSTOKEN_MAX            8   /* max tokens per payload */
0067 #define AFSTOKEN_BDATALN_MAX        16384   /* max big data length */
0068 #define AFSTOKEN_RK_TIX_MAX     12000   /* max RxKAD ticket size */
0069 #define AFSTOKEN_GK_KEY_MAX     64  /* max GSSAPI key size */
0070 #define AFSTOKEN_GK_TOKEN_MAX       16384   /* max GSSAPI token size */
0071 
0072 /*
0073  * Truncate a time64_t to the range from 1970 to 2106 as in the network
0074  * protocol.
0075  */
0076 static inline u32 rxrpc_time64_to_u32(time64_t time)
0077 {
0078     if (time < 0)
0079         return 0;
0080 
0081     if (time > UINT_MAX)
0082         return UINT_MAX;
0083 
0084     return (u32)time;
0085 }
0086 
0087 /*
0088  * Extend u32 back to time64_t using the same 1970-2106 range.
0089  */
0090 static inline time64_t rxrpc_u32_to_time64(u32 time)
0091 {
0092     return (time64_t)time;
0093 }
0094 
0095 #endif /* _KEYS_RXRPC_TYPE_H */