diff options
Diffstat (limited to 'src/mongo/crypto/rsa_public_key.cpp')
-rw-r--r-- | src/mongo/crypto/rsa_public_key.cpp | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/src/mongo/crypto/rsa_public_key.cpp b/src/mongo/crypto/rsa_public_key.cpp index 5e63377bea7..76390e44606 100644 --- a/src/mongo/crypto/rsa_public_key.cpp +++ b/src/mongo/crypto/rsa_public_key.cpp @@ -28,24 +28,22 @@ */ #include "mongo/crypto/rsa_public_key.h" -#include "mongo/crypto/jwt_types_gen.h" + +#include <iterator> + +#include "fmt/format.h" +#include "mongo/base/string_data.h" #include "mongo/util/base64.h" namespace mongo::crypto { -namespace { -std::vector<std::uint8_t> vectorFromCDR(ConstDataRange cdr) { - return {cdr.data(), cdr.data() + cdr.length()}; -} -} // namespace -RsaPublicKey::RsaPublicKey(StringData keyId, ConstDataRange e, ConstDataRange n) - : _keyId(keyId.toString()), _e(vectorFromCDR(e)), _n(vectorFromCDR(n)) {} - -void RsaPublicKey::appendToBSON(BSONObjBuilder* builder) const { - builder->append(JWK::kTypeFieldName, "RSA"_sd); - builder->append(JWK::kKeyIdFieldName, _keyId); - builder->append(JWK::kEFieldName, base64url::encode(_e.data(), _e.size())); - builder->append(JWK::kNFieldName, base64url::encode(_n.data(), _n.size())); +RsaPublicKey::RsaPublicKey(StringData keyId, StringData e, StringData n) + : _keyId(keyId.toString()) { + fmt::memory_buffer eBuffer; + base64url::decode(eBuffer, e); + std::copy(eBuffer.begin(), eBuffer.end(), std::back_inserter(_e)); + fmt::memory_buffer nBuffer; + base64url::decode(nBuffer, n); + std::copy(nBuffer.begin(), nBuffer.end(), std::back_inserter(_n)); } - } // namespace mongo::crypto |