// sign_shim_unix.cpp - Linux/macOS adapter for libsign.a's C interface // // libsign.a 公开 ABI 是 C linkage(避免 std::string 跨编译器/跨 libstdc++ // 版本 ABI 风险),但 YAMA 客户端代码(IOCPClient.cpp / KernelManager.cpp / // linux/main.cpp / macos/main.mm)习惯用 std::string 调用 signMessage / // verifyMessage。本文件提供 C++ 适配,让两边契合。 // // Windows 不编译这个文件——Windows 直接链接私有 .lib 提供的 std::string 版本。 #include #include // libsign.a 提供的 C 接口 extern "C" { int signMessage_c(const char* privateKey, int privateKeyLen, const unsigned char* msg, int msgLen, char* outBuf, int outBufSize); int verifyMessage_c(const char* publicKey, int publicKeyLen, const unsigned char* msg, int msgLen, const char* sigHex, int sigLen); int isVerifyCalled_c(void); } // 与 YAMA common/commands.h 中 BYTE 一致 typedef unsigned char BYTE; // ============================================================================ // 提供 YAMA 既有声明所期望的 C++ 符号 // ============================================================================ std::string signMessage(const std::string& privateKey, BYTE* msg, int len) { char buf[65] = {}; int n = signMessage_c(privateKey.c_str(), (int)privateKey.size(), msg, len, buf, sizeof(buf)); if (n != 64) return std::string(); return std::string(buf, 64); } bool verifyMessage(const std::string& publicKey, BYTE* msg, int len, const std::string& signature) { return verifyMessage_c(publicKey.c_str(), (int)publicKey.size(), msg, len, signature.data(), (int)signature.size()) != 0; } int isVerifyCalled() { return isVerifyCalled_c(); }