| 1 |
|
| 2 | |
| 3 | *
|
| 4 | * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
|
| 5 | * Written by David Howells ([email protected])
|
| 6 |
|
| 7 |
|
| 8 | #ifndef _KEYS_RXRPC_TYPE_H
|
| 9 | #define _KEYS_RXRPC_TYPE_H
|
| 10 |
|
| 11 | #include <linux/key.h>
|
| 12 | #include <crypto/krb5.h>
|
| 13 |
|
| 14 | |
| 15 | * key type for AF_RXRPC keys
|
| 16 |
|
| 17 | extern struct key_type key_type_rxrpc;
|
| 18 |
|
| 19 | extern struct key *rxrpc_get_null_key(const char *);
|
| 20 |
|
| 21 | |
| 22 | * RxRPC key for Kerberos IV (type-2 security)
|
| 23 |
|
| 24 | struct rxkad_key {
|
| 25 | u32 vice_id;
|
| 26 | u32 start;
|
| 27 | u32 expiry;
|
| 28 | u32 kvno;
|
| 29 | u8 primary_flag;
|
| 30 | u16 ticket_len;
|
| 31 | u8 session_key[8];
|
| 32 | u8 ticket[];
|
| 33 | };
|
| 34 |
|
| 35 | |
| 36 | * RxRPC key for YFS-RxGK (type-6 security)
|
| 37 |
|
| 38 | struct rxgk_key {
|
| 39 | s64 begintime;
|
| 40 | s64 endtime;
|
| 41 | u64 lifetime;
|
| 42 | u64 bytelife;
|
| 43 | unsigned int enctype;
|
| 44 | s8 level;
|
| 45 | struct krb5_buffer key;
|
| 46 | struct krb5_buffer ticket;
|
| 47 | u8 _key[];
|
| 48 | };
|
| 49 |
|
| 50 | |
| 51 | * list of tokens attached to an rxrpc key
|
| 52 |
|
| 53 | struct rxrpc_key_token {
|
| 54 | u16 security_index;
|
| 55 | bool no_leak_key;
|
| 56 | struct rxrpc_key_token *next;
|
| 57 | union {
|
| 58 | struct rxkad_key *kad;
|
| 59 | struct rxgk_key *rxgk;
|
| 60 | };
|
| 61 | };
|
| 62 |
|
| 63 | |
| 64 | * structure of raw payloads passed to add_key() or instantiate key
|
| 65 |
|
| 66 | struct rxrpc_key_data_v1 {
|
| 67 | u16 security_index;
|
| 68 | u16 ticket_length;
|
| 69 | u32 expiry;
|
| 70 | u32 kvno;
|
| 71 | u8 session_key[8];
|
| 72 | u8 ticket[];
|
| 73 | };
|
| 74 |
|
| 75 | |
| 76 | * AF_RXRPC key payload derived from XDR format
|
| 77 | * - based on openafs-1.4.10/src/auth/afs_token.xg
|
| 78 |
|
| 79 | #define AFSTOKEN_LENGTH_MAX 16384
|
| 80 | #define AFSTOKEN_STRING_MAX 256
|
| 81 | #define AFSTOKEN_DATA_MAX 64
|
| 82 | #define AFSTOKEN_CELL_MAX 64
|
| 83 | #define AFSTOKEN_MAX 8
|
| 84 | #define AFSTOKEN_BDATALN_MAX 16384
|
| 85 | #define AFSTOKEN_RK_TIX_MAX 12000
|
| 86 | #define AFSTOKEN_GK_KEY_MAX 64
|
| 87 | #define AFSTOKEN_GK_TOKEN_MAX 16384
|
| 88 |
|
| 89 | |
| 90 | * Truncate a time64_t to the range from 1970 to 2106 as in the network
|
| 91 | * protocol.
|
| 92 |
|
| 93 | static inline u32 rxrpc_time64_to_u32(time64_t time)
|
| 94 | {
|
| 95 | if (time < 0)
|
| 96 | return 0;
|
| 97 |
|
| 98 | if (time > UINT_MAX)
|
| 99 | return UINT_MAX;
|
| 100 |
|
| 101 | return (u32)time;
|
| 102 | }
|
| 103 |
|
| 104 | |
| 105 | * Extend u32 back to time64_t using the same 1970-2106 range.
|
| 106 |
|
| 107 | static inline time64_t rxrpc_u32_to_time64(u32 time)
|
| 108 | {
|
| 109 | return (time64_t)time;
|
| 110 | }
|
| 111 |
|
| 112 | #endif
|