this->payload.append((char *)&t, sizeof(t));
} else if constexpr (std::is_same<T, signature_t const>()) {
ceph_assert(protocol);
- protocol->sign_payload(this->payload);
- protocol->encrypt_payload(this->payload);
+ protocol->authencrypt_payload(this->payload);
} else {
encode(t, this->payload, features);
}
SignedEncryptedFrame(ProtocolV2 *protocol, char *payload, uint32_t length)
: PayloadFrame<T, Args..., signature_t>(protocol) {
ceph_assert(protocol);
- protocol->decrypt_payload(payload, length);
- protocol->verify_signature(payload, length);
+ protocol->authdecrypt_payload(payload, length);
this->decode_frame(payload, length);
}
flat_bl.claim_append(bl);
}
- sign_payload(flat_bl);
- encrypt_payload(flat_bl);
+ authencrypt_payload(flat_bl);
MessageFrame message(this, header2, flat_bl);
ldout(cct, 5) << __func__ << " sending message m=" << m
<< dendl;
}
+void ProtocolV2::authencrypt_payload(bufferlist &payload) {
+ sign_payload(payload);
+ encrypt_payload(payload);
+}
+
+void ProtocolV2::authdecrypt_payload(char *payload, uint32_t &length) {
+ decrypt_payload(payload, length);
+ verify_signature(payload, length);
+}
+
CtPtr ProtocolV2::read(CONTINUATION_PARAM(next, ProtocolV2, char *, int),
int len, char *buffer) {
if (!buffer) {
msg_payload.claim_append(extra);
uint32_t payload_len = msg_payload.length();
- decrypt_payload(msg_payload.c_str(), payload_len);
- verify_signature(msg_payload.c_str(), payload_len);
+ authdecrypt_payload(msg_payload.c_str(), payload_len);
front.clear();
middle.clear();
uint32_t *sig_pad_len = nullptr,
uint32_t *enc_pad_len = nullptr);
+ // We are doing *authenticated encryption*
+ void authencrypt_payload(ceph::bufferlist &payload);
+ void authdecrypt_payload(char *payload, uint32_t &length);
+
private:
// Client Protocol
CONTINUATION_DECL(ProtocolV2, start_client_banner_exchange);