Commit 4eb4517c authored by Ilya Dryomov's avatar Ilya Dryomov

libceph: tweak calcu_signature() a little

- replace an ad-hoc array with a struct
- rename to calc_signature() for consistency
Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
Reviewed-by: default avatarSage Weil <sage@redhat.com>
parent 7882a26d
...@@ -707,35 +707,48 @@ static void ceph_x_invalidate_authorizer(struct ceph_auth_client *ac, ...@@ -707,35 +707,48 @@ static void ceph_x_invalidate_authorizer(struct ceph_auth_client *ac,
invalidate_ticket(ac, CEPH_ENTITY_TYPE_AUTH); invalidate_ticket(ac, CEPH_ENTITY_TYPE_AUTH);
} }
static int calcu_signature(struct ceph_x_authorizer *au, static int calc_signature(struct ceph_x_authorizer *au, struct ceph_msg *msg,
struct ceph_msg *msg, __le64 *sig) __le64 *psig)
{ {
int ret;
char tmp_enc[40]; char tmp_enc[40];
__le32 tmp[5] = { struct {
cpu_to_le32(16), msg->hdr.crc, msg->footer.front_crc, __le32 len;
msg->footer.middle_crc, msg->footer.data_crc, __le32 header_crc;
}; __le32 front_crc;
ret = ceph_x_encrypt(&au->session_key, &tmp, sizeof(tmp), __le32 middle_crc;
__le32 data_crc;
} __packed sigblock;
int ret;
sigblock.len = cpu_to_le32(4*sizeof(u32));
sigblock.header_crc = msg->hdr.crc;
sigblock.front_crc = msg->footer.front_crc;
sigblock.middle_crc = msg->footer.middle_crc;
sigblock.data_crc = msg->footer.data_crc;
ret = ceph_x_encrypt(&au->session_key, &sigblock, sizeof(sigblock),
tmp_enc, sizeof(tmp_enc)); tmp_enc, sizeof(tmp_enc));
if (ret < 0) if (ret < 0)
return ret; return ret;
*sig = *(__le64*)(tmp_enc + 4);
*psig = *(__le64 *)(tmp_enc + sizeof(u32));
return 0; return 0;
} }
static int ceph_x_sign_message(struct ceph_auth_handshake *auth, static int ceph_x_sign_message(struct ceph_auth_handshake *auth,
struct ceph_msg *msg) struct ceph_msg *msg)
{ {
__le64 sig;
int ret; int ret;
if (ceph_test_opt(from_msgr(msg->con->msgr), NOMSGSIGN)) if (ceph_test_opt(from_msgr(msg->con->msgr), NOMSGSIGN))
return 0; return 0;
ret = calcu_signature((struct ceph_x_authorizer *)auth->authorizer, ret = calc_signature((struct ceph_x_authorizer *)auth->authorizer,
msg, &msg->footer.sig); msg, &sig);
if (ret < 0) if (ret)
return ret; return ret;
msg->footer.sig = sig;
msg->footer.flags |= CEPH_MSG_FOOTER_SIGNED; msg->footer.flags |= CEPH_MSG_FOOTER_SIGNED;
return 0; return 0;
} }
...@@ -749,9 +762,9 @@ static int ceph_x_check_message_signature(struct ceph_auth_handshake *auth, ...@@ -749,9 +762,9 @@ static int ceph_x_check_message_signature(struct ceph_auth_handshake *auth,
if (ceph_test_opt(from_msgr(msg->con->msgr), NOMSGSIGN)) if (ceph_test_opt(from_msgr(msg->con->msgr), NOMSGSIGN))
return 0; return 0;
ret = calcu_signature((struct ceph_x_authorizer *)auth->authorizer, ret = calc_signature((struct ceph_x_authorizer *)auth->authorizer,
msg, &sig_check); msg, &sig_check);
if (ret < 0) if (ret)
return ret; return ret;
if (sig_check == msg->footer.sig) if (sig_check == msg->footer.sig)
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment