| #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 |
| |
| /* 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; |
| /* ticket blob */ |
| } __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; |
| } __attribute__ ((packed)); |
| |
| struct ceph_x_authorize_reply { |
| __u8 struct_v; |
| __le64 nonce_plus_one; |
| } __attribute__ ((packed)); |
| |
| |
| /* |
| * encyption bundle |
| */ |
| #define CEPHX_ENC_MAGIC 0xff009cad8826aa55ull |
| |
| struct ceph_x_encrypt_header { |
| __u8 struct_v; |
| __le64 magic; |
| } __attribute__ ((packed)); |
| |
| #endif |