From 08fbca88b58225ff1e9d61ba7fec0e5c4fa65cf6 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 29 Oct 2009 13:28:09 -0700 Subject: [PATCH] auth: simplify challenge key encoding --- src/auth/cephx/CephxProtocol.cc | 12 ++++++------ src/auth/cephx/CephxProtocol.h | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/auth/cephx/CephxProtocol.cc b/src/auth/cephx/CephxProtocol.cc index 95af04e1189ff..f58431a0c1b06 100644 --- a/src/auth/cephx/CephxProtocol.cc +++ b/src/auth/cephx/CephxProtocol.cc @@ -12,19 +12,19 @@ int cephx_calc_client_server_challenge(CryptoKey& secret, __u64 server_challenge, __u64 client_challenge, __u64 *key) { - bufferlist bl, enc; - ::encode(server_challenge, bl); - ::encode(client_challenge, bl); + CephXChallengeBlob b; + b.server_challenge = server_challenge; + b.client_challenge = client_challenge; - int ret = encode_encrypt(bl, secret, enc); + bufferlist enc; + int ret = encode_encrypt(b, secret, enc); if (ret < 0) return ret; __u64 k = 0; const uint64_t *p = (const uint64_t *)enc.c_str(); - for (int pos = 0; pos + sizeof(k) <= enc.length(); pos+=sizeof(k), p++) { + for (int pos = 0; pos + sizeof(k) <= enc.length(); pos+=sizeof(k), p++) k ^= *p; - } *key = k; return 0; } diff --git a/src/auth/cephx/CephxProtocol.h b/src/auth/cephx/CephxProtocol.h index e503a9fbededc..c2ecbba8202af 100644 --- a/src/auth/cephx/CephxProtocol.h +++ b/src/auth/cephx/CephxProtocol.h @@ -148,6 +148,20 @@ struct CephXAuthenticate { }; WRITE_CLASS_ENCODER(CephXAuthenticate) +struct CephXChallengeBlob { + __u64 server_challenge, client_challenge; + + void encode(bufferlist& bl) const { + ::encode(server_challenge, bl); + ::encode(client_challenge, bl); + } + void decode(bufferlist::iterator& bl) { + ::decode(server_challenge, bl); + ::decode(client_challenge, bl); + } +}; +WRITE_CLASS_ENCODER(CephXChallengeBlob) + int cephx_calc_client_server_challenge(CryptoKey& secret, __u64 server_challenge, __u64 client_challenge, __u64 *key); -- 2.39.5