Feature: Linux/macOS server-identity gate via libsign.a
fix remote-cursor flicker on Windows controller
This commit is contained in:
52
client/sign_shim_unix.cpp
Normal file
52
client/sign_shim_unix.cpp
Normal file
@@ -0,0 +1,52 @@
|
||||
// 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 <string>
|
||||
#include <cstring>
|
||||
|
||||
// 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();
|
||||
}
|
||||
Reference in New Issue
Block a user