bannerExchangeCallback(nullptr),
next_tag(static_cast<Tag>(0)),
keepalive(false) {
+ ceph::crypto::init(cct);
}
ProtocolV2::~ProtocolV2() {
state = AUTH_CONNECTING_SIGN;
- // FIXME, WIP: crc32 is just scaffolding
- auto sig_frame = AuthSignatureFrame::Encode(pre_auth.rxbuf.crc32c(-1));
+ const auto sig = auth_meta->session_key.empty() ? sha256_digest_t() :
+ auth_meta->session_key.hmac_sha256(cct, pre_auth.rxbuf);
+ auto sig_frame = AuthSignatureFrame::Encode(sig);
pre_auth.enabled = false;
pre_auth.rxbuf.clear();
return WRITE(sig_frame, "auth signature", read_frame);
session_stream_handlers = \
ceph::crypto::onwire::rxtx_t::create_handler_pair(cct, *auth_meta, true);
- // FIXME, WIP: crc32 is just scaffolding
- auto sig_frame = AuthSignatureFrame::Encode(pre_auth.rxbuf.crc32c(-1));
+ const auto sig = auth_meta->session_key.empty() ? sha256_digest_t() :
+ auth_meta->session_key.hmac_sha256(cct, pre_auth.rxbuf);
+ auto sig_frame = AuthSignatureFrame::Encode(sig);
pre_auth.enabled = false;
pre_auth.rxbuf.clear();
return WRITE(sig_frame, "auth signature", read_frame);
auto sig_frame = AuthSignatureFrame::Decode(payload);
- const auto actual_tx_sig = pre_auth.txbuf.crc32c(-1);
+ const auto actual_tx_sig = auth_meta->session_key.empty() ?
+ sha256_digest_t() : auth_meta->session_key.hmac_sha256(cct, pre_auth.txbuf);
if (sig_frame.signature() != actual_tx_sig) {
ldout(cct, 2) << __func__ << " pre-auth signature mismatch"
<< " actual_tx_sig=" << actual_tx_sig
struct AuthSignatureFrame
: public ControlFrame<AuthSignatureFrame,
- // FIXME: using crc32 as scaffolding
- uint32_t> {
+ sha256_digest_t> {
static const Tag tag = Tag::AUTH_SIGNATURE;
using ControlFrame::Encode;
using ControlFrame::Decode;
- inline uint32_t &signature() { return get_val<0>(); }
+ inline sha256_digest_t &signature() { return get_val<0>(); }
protected:
using ControlFrame::ControlFrame;