71 lines
2.8 KiB
C++
71 lines
2.8 KiB
C++
//
|
|
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2024
|
|
//
|
|
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
|
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
//
|
|
#include "td/telegram/net/PublicRsaKeySharedMain.h"
|
|
|
|
#include "td/utils/format.h"
|
|
#include "td/utils/Slice.h"
|
|
#include "td/utils/SliceBuilder.h"
|
|
|
|
namespace td {
|
|
|
|
std::shared_ptr<PublicRsaKeySharedMain> PublicRsaKeySharedMain::create(bool is_test) {
|
|
auto add_pem = [](vector<RsaKey> &keys, CSlice pem) {
|
|
auto rsa = mtproto::RSA::from_pem_public_key(pem).move_as_ok();
|
|
auto fingerprint = rsa.get_fingerprint();
|
|
keys.push_back(RsaKey{std::move(rsa), fingerprint});
|
|
};
|
|
|
|
if (is_test) {
|
|
static auto test_public_rsa_key = [&] {
|
|
vector<RsaKey> keys;
|
|
add_pem(keys,
|
|
"-----BEGIN RSA PUBLIC KEY-----\n"
|
|
"MIIBCgKCAQEAyMEdY1aR+sCR3ZSJrtztKTKqigvO/vBfqACJLZtS7QMgCGXJ6XIR\n"
|
|
"yy7mx66W0/sOFa7/1mAZtEoIokDP3ShoqF4fVNb6XeqgQfaUHd8wJpDWHcR2OFwv\n"
|
|
"plUUI1PLTktZ9uW2WE23b+ixNwJjJGwBDJPQEQFBE+vfmH0JP503wr5INS1poWg/\n"
|
|
"j25sIWeYPHYeOrFp/eXaqhISP6G+q2IeTaWTXpwZj4LzXq5YOpk4bYEQ6mvRq7D1\n"
|
|
"aHWfYmlEGepfaYR8Q0YqvvhYtMte3ITnuSJs171+GDqpdKcSwHnd6FudwGO4pcCO\n"
|
|
"j4WcDuXc2CTHgH8gFTNhp/Y8/SpDOhvn9QIDAQAB\n"
|
|
"-----END RSA PUBLIC KEY-----");
|
|
return std::make_shared<PublicRsaKeySharedMain>(std::move(keys));
|
|
}();
|
|
return test_public_rsa_key;
|
|
} else {
|
|
static auto main_public_rsa_key = [&] {
|
|
vector<RsaKey> keys;
|
|
add_pem(keys,
|
|
"-----BEGIN RSA PUBLIC KEY-----\n"
|
|
"MIIBCgKCAQEA6LszBcC1LGzyr992NzE0ieY+BSaOW622Aa9Bd4ZHLl+TuFQ4lo4g\n"
|
|
"5nKaMBwK/BIb9xUfg0Q29/2mgIR6Zr9krM7HjuIcCzFvDtr+L0GQjae9H0pRB2OO\n"
|
|
"62cECs5HKhT5DZ98K33vmWiLowc621dQuwKWSQKjWf50XYFw42h21P2KXUGyp2y/\n"
|
|
"+aEyZ+uVgLLQbRA1dEjSDZ2iGRy12Mk5gpYc397aYp438fsJoHIgJ2lgMv5h7WY9\n"
|
|
"t6N/byY9Nw9p21Og3AoXSL2q/2IJ1WRUhebgAdGVMlV1fkuOQoEzR7EdpqtQD9Cs\n"
|
|
"5+bfo3Nhmcyvk5ftB0WkJ9z6bNZ7yxrP8wIDAQAB\n"
|
|
"-----END RSA PUBLIC KEY-----");
|
|
return std::make_shared<PublicRsaKeySharedMain>(std::move(keys));
|
|
}();
|
|
return main_public_rsa_key;
|
|
}
|
|
}
|
|
|
|
Result<mtproto::PublicRsaKeyInterface::RsaKey> PublicRsaKeySharedMain::get_rsa_key(const vector<int64> &fingerprints) {
|
|
for (auto fingerprint : fingerprints) {
|
|
for (const auto &key : keys_) {
|
|
if (key.fingerprint == fingerprint) {
|
|
return RsaKey{key.rsa.clone(), fingerprint};
|
|
}
|
|
}
|
|
}
|
|
return Status::Error(PSLICE() << "Unknown fingerprints " << format::as_array(fingerprints));
|
|
}
|
|
|
|
void PublicRsaKeySharedMain::drop_keys() {
|
|
// nothing to do
|
|
}
|
|
|
|
} // namespace td
|