162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#ifndef __FS_CEPH_AUTH_X_PROTOCOL
362306a36Sopenharmony_ci#define __FS_CEPH_AUTH_X_PROTOCOL
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#define CEPHX_GET_AUTH_SESSION_KEY      0x0100
662306a36Sopenharmony_ci#define CEPHX_GET_PRINCIPAL_SESSION_KEY 0x0200
762306a36Sopenharmony_ci#define CEPHX_GET_ROTATING_KEY          0x0400
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci/* common bits */
1062306a36Sopenharmony_cistruct ceph_x_ticket_blob {
1162306a36Sopenharmony_ci	__u8 struct_v;
1262306a36Sopenharmony_ci	__le64 secret_id;
1362306a36Sopenharmony_ci	__le32 blob_len;
1462306a36Sopenharmony_ci	char blob[];
1562306a36Sopenharmony_ci} __attribute__ ((packed));
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci/* common request/reply headers */
1962306a36Sopenharmony_cistruct ceph_x_request_header {
2062306a36Sopenharmony_ci	__le16 op;
2162306a36Sopenharmony_ci} __attribute__ ((packed));
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_cistruct ceph_x_reply_header {
2462306a36Sopenharmony_ci	__le16 op;
2562306a36Sopenharmony_ci	__le32 result;
2662306a36Sopenharmony_ci} __attribute__ ((packed));
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci/* authenticate handshake */
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci/* initial hello (no reply header) */
3262306a36Sopenharmony_cistruct ceph_x_server_challenge {
3362306a36Sopenharmony_ci	__u8 struct_v;
3462306a36Sopenharmony_ci	__le64 server_challenge;
3562306a36Sopenharmony_ci} __attribute__ ((packed));
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_cistruct ceph_x_authenticate {
3862306a36Sopenharmony_ci	__u8 struct_v;
3962306a36Sopenharmony_ci	__le64 client_challenge;
4062306a36Sopenharmony_ci	__le64 key;
4162306a36Sopenharmony_ci	/* old_ticket blob */
4262306a36Sopenharmony_ci	/* nautilus+: other_keys */
4362306a36Sopenharmony_ci} __attribute__ ((packed));
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_cistruct ceph_x_service_ticket_request {
4662306a36Sopenharmony_ci	__u8 struct_v;
4762306a36Sopenharmony_ci	__le32 keys;
4862306a36Sopenharmony_ci} __attribute__ ((packed));
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_cistruct ceph_x_challenge_blob {
5162306a36Sopenharmony_ci	__le64 server_challenge;
5262306a36Sopenharmony_ci	__le64 client_challenge;
5362306a36Sopenharmony_ci} __attribute__ ((packed));
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci/* authorize handshake */
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ci/*
6062306a36Sopenharmony_ci * The authorizer consists of two pieces:
6162306a36Sopenharmony_ci *  a - service id, ticket blob
6262306a36Sopenharmony_ci *  b - encrypted with session key
6362306a36Sopenharmony_ci */
6462306a36Sopenharmony_cistruct ceph_x_authorize_a {
6562306a36Sopenharmony_ci	__u8 struct_v;
6662306a36Sopenharmony_ci	__le64 global_id;
6762306a36Sopenharmony_ci	__le32 service_id;
6862306a36Sopenharmony_ci	struct ceph_x_ticket_blob ticket_blob;
6962306a36Sopenharmony_ci} __attribute__ ((packed));
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_cistruct ceph_x_authorize_b {
7262306a36Sopenharmony_ci	__u8 struct_v;
7362306a36Sopenharmony_ci	__le64 nonce;
7462306a36Sopenharmony_ci	__u8 have_challenge;
7562306a36Sopenharmony_ci	__le64 server_challenge_plus_one;
7662306a36Sopenharmony_ci} __attribute__ ((packed));
7762306a36Sopenharmony_ci
7862306a36Sopenharmony_cistruct ceph_x_authorize_challenge {
7962306a36Sopenharmony_ci	__u8 struct_v;
8062306a36Sopenharmony_ci	__le64 server_challenge;
8162306a36Sopenharmony_ci} __attribute__ ((packed));
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_cistruct ceph_x_authorize_reply {
8462306a36Sopenharmony_ci	__u8 struct_v;
8562306a36Sopenharmony_ci	__le64 nonce_plus_one;
8662306a36Sopenharmony_ci} __attribute__ ((packed));
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ci/*
9062306a36Sopenharmony_ci * encryption bundle
9162306a36Sopenharmony_ci */
9262306a36Sopenharmony_ci#define CEPHX_ENC_MAGIC 0xff009cad8826aa55ull
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_cistruct ceph_x_encrypt_header {
9562306a36Sopenharmony_ci	__u8 struct_v;
9662306a36Sopenharmony_ci	__le64 magic;
9762306a36Sopenharmony_ci} __attribute__ ((packed));
9862306a36Sopenharmony_ci
9962306a36Sopenharmony_ci#endif
100