#include <linux/ceph/ceph_debug.h>
#include <linux/err.h>
#include <linux/module.h>
#include <linux/random.h>
#include <linux/slab.h>
#include <linux/ceph/decode.h>
#include <linux/ceph/auth.h>
#include <linux/ceph/ceph_features.h>
#include <linux/ceph/libceph.h>
#include <linux/ceph/messenger.h>
#include "crypto.h"
#include "auth_x.h"
#include "auth_x_protocol.h"
static void ceph_x_validate_tickets(struct ceph_auth_client *ac, int *pneed);
static int ceph_x_is_authenticated(struct ceph_auth_client *ac)
{ … }
static int ceph_x_should_authenticate(struct ceph_auth_client *ac)
{ … }
static int ceph_x_encrypt_offset(void)
{ … }
static int ceph_x_encrypt_buflen(int ilen)
{ … }
static int ceph_x_encrypt(struct ceph_crypto_key *secret, void *buf,
int buf_len, int plaintext_len)
{ … }
static int __ceph_x_decrypt(struct ceph_crypto_key *secret, void *p,
int ciphertext_len)
{ … }
static int ceph_x_decrypt(struct ceph_crypto_key *secret, void **p, void *end)
{ … }
static struct ceph_x_ticket_handler *
get_ticket_handler(struct ceph_auth_client *ac, int service)
{ … }
static void remove_ticket_handler(struct ceph_auth_client *ac,
struct ceph_x_ticket_handler *th)
{ … }
static int process_one_ticket(struct ceph_auth_client *ac,
struct ceph_crypto_key *secret,
void **p, void *end)
{ … }
static int ceph_x_proc_ticket_reply(struct ceph_auth_client *ac,
struct ceph_crypto_key *secret,
void **p, void *end)
{ … }
static int encrypt_authorizer(struct ceph_x_authorizer *au,
u64 *server_challenge)
{ … }
static void ceph_x_authorizer_cleanup(struct ceph_x_authorizer *au)
{ … }
static int ceph_x_build_authorizer(struct ceph_auth_client *ac,
struct ceph_x_ticket_handler *th,
struct ceph_x_authorizer *au)
{ … }
static int ceph_x_encode_ticket(struct ceph_x_ticket_handler *th,
void **p, void *end)
{ … }
static bool need_key(struct ceph_x_ticket_handler *th)
{ … }
static bool have_key(struct ceph_x_ticket_handler *th)
{ … }
static void ceph_x_validate_tickets(struct ceph_auth_client *ac, int *pneed)
{ … }
static int ceph_x_build_request(struct ceph_auth_client *ac,
void *buf, void *end)
{ … }
static int decode_con_secret(void **p, void *end, u8 *con_secret,
int *con_secret_len)
{ … }
static int handle_auth_session_key(struct ceph_auth_client *ac, u64 global_id,
void **p, void *end,
u8 *session_key, int *session_key_len,
u8 *con_secret, int *con_secret_len)
{ … }
static int ceph_x_handle_reply(struct ceph_auth_client *ac, u64 global_id,
void *buf, void *end,
u8 *session_key, int *session_key_len,
u8 *con_secret, int *con_secret_len)
{ … }
static void ceph_x_destroy_authorizer(struct ceph_authorizer *a)
{ … }
static int ceph_x_create_authorizer(
struct ceph_auth_client *ac, int peer_type,
struct ceph_auth_handshake *auth)
{ … }
static int ceph_x_update_authorizer(
struct ceph_auth_client *ac, int peer_type,
struct ceph_auth_handshake *auth)
{ … }
static int decrypt_authorizer_challenge(struct ceph_crypto_key *secret,
void *challenge, int challenge_len,
u64 *server_challenge)
{ … }
static int ceph_x_add_authorizer_challenge(struct ceph_auth_client *ac,
struct ceph_authorizer *a,
void *challenge, int challenge_len)
{ … }
static int decrypt_authorizer_reply(struct ceph_crypto_key *secret,
void **p, void *end, u64 *nonce_plus_one,
u8 *con_secret, int *con_secret_len)
{ … }
static int ceph_x_verify_authorizer_reply(struct ceph_auth_client *ac,
struct ceph_authorizer *a,
void *reply, int reply_len,
u8 *session_key, int *session_key_len,
u8 *con_secret, int *con_secret_len)
{ … }
static void ceph_x_reset(struct ceph_auth_client *ac)
{ … }
static void ceph_x_destroy(struct ceph_auth_client *ac)
{ … }
static void invalidate_ticket(struct ceph_auth_client *ac, int peer_type)
{ … }
static void ceph_x_invalidate_authorizer(struct ceph_auth_client *ac,
int peer_type)
{ … }
static int calc_signature(struct ceph_x_authorizer *au, struct ceph_msg *msg,
__le64 *psig)
{ … }
static int ceph_x_sign_message(struct ceph_auth_handshake *auth,
struct ceph_msg *msg)
{ … }
static int ceph_x_check_message_signature(struct ceph_auth_handshake *auth,
struct ceph_msg *msg)
{ … }
static const struct ceph_auth_client_ops ceph_x_ops = …;
int ceph_x_init(struct ceph_auth_client *ac)
{ … }