| /* SPDX-License-Identifier: GPL-2.0 */ |
| #ifndef __FS_CEPH_AUTH_X_PROTOCOL |
| #define __FS_CEPH_AUTH_X_PROTOCOL |
| |
| #define CEPHX_GET_AUTH_SESSION_KEY 0x0100 |
| #define CEPHX_GET_PRINCIPAL_SESSION_KEY 0x0200 |
| #define CEPHX_GET_ROTATING_KEY 0x0400 |
| |
| /* Client <-> AuthMonitor */ |
| /* |
| * The AUTH session's connection secret: encrypted with the AUTH |
| * ticket session key |
| */ |
| #define CEPHX_KEY_USAGE_AUTH_CONNECTION_SECRET 0x03 |
| /* |
| * The ticket's blob for the client ("blob for me", contains the |
| * session key): encrypted with the client's secret key in case of |
| * the AUTH ticket and the AUTH ticket session key in case of other |
| * service tickets |
| */ |
| #define CEPHX_KEY_USAGE_TICKET_SESSION_KEY 0x04 |
| /* |
| * The ticket's blob for the service (ceph_x_ticket_blob): possibly |
| * encrypted with the old AUTH ticket session key in case of the AUTH |
| * ticket and not encrypted in case of other service tickets |
| */ |
| #define CEPHX_KEY_USAGE_TICKET_BLOB 0x05 |
| |
| /* Client <-> Service */ |
| /* |
| * The client's authorization request (ceph_x_authorize_b): |
| * encrypted with the service ticket session key |
| */ |
| #define CEPHX_KEY_USAGE_AUTHORIZE 0x10 |
| /* |
| * The service's challenge (ceph_x_authorize_challenge): |
| * encrypted with the service ticket session key |
| */ |
| #define CEPHX_KEY_USAGE_AUTHORIZE_CHALLENGE 0x11 |
| /* |
| * The service's final reply (ceph_x_authorize_reply + the service |
| * session's connection secret): encrypted with the service ticket |
| * session key |
| */ |
| #define CEPHX_KEY_USAGE_AUTHORIZE_REPLY 0x12 |
| |
| /* common bits */ |
| struct ceph_x_ticket_blob { |
| __u8 struct_v; |
| __le64 secret_id; |
| __le32 blob_len; |
| char blob[]; |
| } __attribute__ ((packed)); |
| |
| |
| /* common request/reply headers */ |
| struct ceph_x_request_header { |
| __le16 op; |
| } __attribute__ ((packed)); |
| |
| struct ceph_x_reply_header { |
| __le16 op; |
| __le32 result; |
| } __attribute__ ((packed)); |
| |
| |
| /* authenticate handshake */ |
| |
| /* initial hello (no reply header) */ |
| struct ceph_x_server_challenge { |
| __u8 struct_v; |
| __le64 server_challenge; |
| } __attribute__ ((packed)); |
| |
| struct ceph_x_authenticate { |
| __u8 struct_v; |
| __le64 client_challenge; |
| __le64 key; |
| /* old_ticket blob */ |
| /* nautilus+: other_keys */ |
| } __attribute__ ((packed)); |
| |
| struct ceph_x_service_ticket_request { |
| __u8 struct_v; |
| __le32 keys; |
| } __attribute__ ((packed)); |
| |
| struct ceph_x_challenge_blob { |
| __le64 server_challenge; |
| __le64 client_challenge; |
| } __attribute__ ((packed)); |
| |
| |
| |
| /* authorize handshake */ |
| |
| /* |
| * The authorizer consists of two pieces: |
| * a - service id, ticket blob |
| * b - encrypted with session key |
| */ |
| struct ceph_x_authorize_a { |
| __u8 struct_v; |
| __le64 global_id; |
| __le32 service_id; |
| struct ceph_x_ticket_blob ticket_blob; |
| } __attribute__ ((packed)); |
| |
| struct ceph_x_authorize_b { |
| __u8 struct_v; |
| __le64 nonce; |
| __u8 have_challenge; |
| __le64 server_challenge_plus_one; |
| } __attribute__ ((packed)); |
| |
| struct ceph_x_authorize_challenge { |
| __u8 struct_v; |
| __le64 server_challenge; |
| } __attribute__ ((packed)); |
| |
| struct ceph_x_authorize_reply { |
| __u8 struct_v; |
| __le64 nonce_plus_one; |
| } __attribute__ ((packed)); |
| |
| |
| /* |
| * encryption bundle |
| */ |
| #define CEPHX_ENC_MAGIC 0xff009cad8826aa55ull |
| |
| struct ceph_x_encrypt_header { |
| __u8 struct_v; |
| __le64 magic; |
| } __attribute__ ((packed)); |
| |
| #endif |