1
0

add namespace

This commit is contained in:
2025-11-21 15:42:03 +08:00
parent 33ac4f1250
commit 16c1e1a782
8 changed files with 58 additions and 13 deletions

View File

@@ -4,6 +4,7 @@
"name": "MinGW64",
"includePath": [
"${workspaceFolder}/include",
"${workspaceFolder}/qrcodegen",
"${workspaceFolder}",
"C:\\MinGW64\\include",
"C:\\MinGW64\\x86_64-w64-mingw32\\include"

View File

@@ -1,12 +1,39 @@
cmake_minimum_required(VERSION 3.15)
set(CMAKE_BUILD_TYPE Release)
option(USE_SYSTEM_CURL "use system installed libcurl" ON)
find_package(mbedtls REQUIRED)
find_package(CURL REQUIRED)
if (USE_SYSTEM_CURL)
find_package(CURL REQUIRED)
else ()
include(FetchContent)
FetchContent_Declare(curl
URL https://curl.se/download/curl-8.16.0.tar.xz
DOWNLOAD_EXTRACT_TIMESTAMP TRUE
)
set(ZLIB_USE_STATIC_LIBS ON)
set(CURL_USE_MBEDTLS ON)
set(HTTP_ONLY ON)
set(BUILD_CURL_EXE OFF)
set(BUILD_TESTING OFF)
set(BUILD_EXAMPLES OFF)
set(BUILD_LIBCURL_DOCS OFF)
set(BUILD_MISC_DOCS OFF)
set(ENABLE_CURL_MANUAL OFF)
set(USE_NGHTTP2 OFF)
set(USE_LIBIDN2 OFF)
set(CURL_BROTLI OFF)
set(CURL_ZSTD OFF)
set(CURL_USE_LIBSSH2 OFF)
set(CURL_USE_LIBPSL OFF)
set(CURL_DISABLE_PROGRESS_METER ON)
FetchContent_MakeAvailable(curl)
endif ()
project(clist)
file(GLOB_RECURSE MAIN_SRC "${CMAKE_SOURCE_DIR}/src/*.cpp")
file(GLOB_RECURSE MAIN_SRC "${CMAKE_SOURCE_DIR}/src/*.cpp" "qrcodegen/qrcodegen.c")
add_executable(${PROJECT_NAME} ${MAIN_SRC})
target_include_directories(${PROJECT_NAME} PRIVATE include qrcodegen)
target_link_libraries(${PROJECT_NAME} PRIVATE mbedtls CURL::libcurl)
target_link_libraries(${PROJECT_NAME} PRIVATE fmt mbedcrypto CURL::libcurl bcrypt)

View File

@@ -4,6 +4,8 @@
#include <vector>
#include <memory>
namespace drive {
enum drive_type {
dt_alipan,
dt_filebrowser,
@@ -35,3 +37,5 @@ drive::ref new_drive(drive_type type);
std::string hex_encode(const unsigned char* data, size_t len);
std::string device_name();
}

View File

@@ -10,6 +10,8 @@
#include <mbedtls/base64.h>
#include <fmt/format.h>
namespace drive {
using json = nlohmann::json;
namespace fs = std::filesystem;
@@ -116,7 +118,7 @@ bool alipan::qrLogin(fnQrcode printQr) {
this->refresh_token = login.at("refreshToken");
// 计算设备ID
unsigned char digest[32];
mbedtls_sha256_ret((uint8_t*)this->user_id.c_str(), this->user_id.size(), digest, 0);
mbedtls_sha256((uint8_t*)this->user_id.c_str(), this->user_id.size(), digest, 0);
this->device_id = hex_encode(digest, sizeof(digest));
fmt::print("login user_id({}) drive_id({})\n", this->user_id, this->drive_id);
@@ -307,18 +309,19 @@ bool alipan::createSession() {
size_t pub_len = 0;
std::vector<uint8_t> pub(MBEDTLS_ECP_MAX_BYTES, 0);
mbedtls_ecp_point_write_binary(
&ctx_sign.grp, &ctx_sign.Q, MBEDTLS_ECP_PF_UNCOMPRESSED, &pub_len, pub.data(), pub.size());
&ctx_sign.private_grp, &ctx_sign.private_Q, MBEDTLS_ECP_PF_UNCOMPRESSED, &pub_len, pub.data(), pub.size());
pub_key = hex_encode(pub.data(), pub_len);
// sign message
unsigned char msg_hash[32];
mbedtls_sha256_ret((uint8_t*)msg.c_str(), msg.size(), msg_hash, 0);
mbedtls_sha256((uint8_t*)msg.c_str(), msg.size(), msg_hash, 0);
mbedtls_mpi r, s;
std::vector<uint8_t> sigdata(MBEDTLS_ECDSA_MAX_LEN, 0);
mbedtls_mpi_init(&r);
mbedtls_mpi_init(&s);
mbedtls_ecdsa_sign(&ctx_sign.grp, &r, &s, &ctx_sign.d, msg_hash, sizeof(msg_hash), mbd_rand, nullptr);
mbedtls_ecdsa_sign(
&ctx_sign.private_grp, &r, &s, &ctx_sign.private_d, msg_hash, sizeof(msg_hash), mbd_rand, nullptr);
size_t plen = mbedtls_mpi_size(&r);
mbedtls_mpi_write_binary(&r, sigdata.data(), plen);
@@ -343,4 +346,6 @@ bool alipan::createSession() {
{"device_id", this->device_id},
});
return j.at("success").get<bool>();
}
}
} // namespace drive

View File

@@ -4,6 +4,8 @@
#include "http.h"
#include "drive.h"
namespace drive {
class alipan : public drive {
public:
bool qrLogin(fnQrcode printQr) override;
@@ -28,4 +30,6 @@ private:
std::string drive_id;
std::string user_id;
};
};
}

View File

@@ -1,5 +1,7 @@
#include "alipan.h"
namespace drive {
static std::map<drive_type, drive::ref> m;
drive::ref new_drive(drive_type type) {
@@ -15,4 +17,6 @@ drive::ref new_drive(drive_type type) {
m.insert(std::make_pair(type, it->second));
}
return it->second;
}
}

View File

@@ -15,7 +15,7 @@
#include <unistd.h>
#endif
std::string hex_encode(const unsigned char* data, size_t len) {
std::string drive::hex_encode(const unsigned char* data, size_t len) {
std::stringstream ss;
for (size_t i = 0; i < len; i++) ss << std::hex << std::setw(2) << std::setfill('0') << (int)data[i];
return ss.str();
@@ -36,7 +36,7 @@ std::string ansi_to_utf8(const char* locale, std::string const& str_gbk) {
return cutf8.to_bytes(std::wstring(buff.data(), to_next));
}
std::string device_name() {
std::string drive::device_name() {
#ifdef __SWITCH__
SetSysDeviceNickName nick;
if (R_SUCCEEDED(setsysGetDeviceNickname(&nick))) {

View File

@@ -1,6 +1,6 @@
#include "http.h"
#include "drive.h"
#include <qrcodegen/qrcodegen.h>
#include <qrcodegen.h>
#include <fmt/format.h>
void printQr(const std::string& text) {
@@ -23,7 +23,7 @@ void printQr(const std::string& text) {
int main(int argc, char* argv[]) {
curl_global_init(CURL_GLOBAL_ALL);
drive::ref c = new_drive(dt_alipan);
auto c = drive::new_drive(drive::dt_alipan);
if (!c->qrLogin(printQr)) return 1;
uint32_t choice = 0;