| /* SPDX-License-Identifier: GPL-2.0 */ |
| #ifndef _FS_CEPH_AUTH_X_H |
| #define _FS_CEPH_AUTH_X_H |
| |
| #include <linux/rbtree.h> |
| |
| #include <linux/ceph/auth.h> |
| |
| #include "crypto.h" |
| #include "auth_x_protocol.h" |
| |
| /* |
| * Handle ticket for a single service. |
| */ |
| struct ceph_x_ticket_handler { |
| struct rb_node node; |
| unsigned int service; |
| |
| struct ceph_crypto_key session_key; |
| bool have_key; |
| |
| u64 secret_id; |
| struct ceph_buffer *ticket_blob; |
| |
| unsigned long renew_after, expires; |
| }; |
| |
| #define CEPHX_AU_ENC_BUF_LEN 128 /* big enough for encrypted blob */ |
| |
| struct ceph_x_authorizer { |
| struct ceph_authorizer base; |
| struct ceph_crypto_key session_key; |
| struct ceph_buffer *buf; |
| unsigned int service; |
| u64 nonce; |
| u64 secret_id; |
| char enc_buf[CEPHX_AU_ENC_BUF_LEN] __aligned(8); |
| }; |
| |
| struct ceph_x_info { |
| struct ceph_crypto_key secret; |
| |
| bool starting; |
| u64 server_challenge; |
| |
| unsigned int have_keys; |
| struct rb_root ticket_handlers; |
| |
| struct ceph_x_authorizer auth_authorizer; |
| }; |
| |
| int ceph_x_init(struct ceph_auth_client *ac); |
| |
| #endif |
| |