| 
 | 
 
tx官方bot要用到这个算法,想问下怎么封装成火山视窗的类,研究了一下午没研究出来 
 
以下代码来自ai 
#include <iomanip> 
#include <iostream> 
#include <sodium.h> 
#include <sstream> 
#include <string> 
 
class TX签名计算器 { 
public: 
    // 初始化类并生成密钥对 
    bool 初始化(const std::string& 密钥) { 
        if (sodium_init() < 0) return false; 
        std::string 填充密钥 = 密钥; 
        while (填充密钥.size() < 32) { 
            填充密钥 = 填充密钥 + 密钥.substr(0, 32 - 填充密钥.size()); 
        } 
        // 截取前32字节作为最终使用的密钥 
        填充密钥 = 填充密钥.substr(0, 32); 
        //std::string 填充密钥 = 密钥.substr(0, 32).append(32 - 密钥.size(), 密钥[0]); 
        crypto_sign_seed_keypair(公钥, 私钥, reinterpret_cast<const unsigned char*>(填充密钥.data())); 
        return true; 
    } 
 
    // 计算消息的签名并返回十六进制格式 
    std::string 计算签名(const std::string& 消息) { 
        unsigned char 签名[crypto_sign_BYTES]; 
        crypto_sign_detached(签名, nullptr, reinterpret_cast<const unsigned char*>(消息.c_str()), 消息.length(), 私钥); 
        return 转为十六进制(签名, crypto_sign_BYTES); 
    } 
 
private: 
    // 将字节数组转换为十六进制字符串 
    std::string 转为十六进制(const unsigned char* 数据, size_t 长度) { 
        std: stringstream oss; 
        for (size_t i = 0; i < 长度; ++i) oss << std::hex << std::setw(2) << std::setfill('0') << (int)数据; 
        return oss.str(); 
    } 
 
    unsigned char 私钥[crypto_sign_SECRETKEYBYTES]; // 私钥 
    unsigned char 公钥[crypto_sign_PUBLICKEYBYTES];  // 公钥 
}; 
 
 |   
 
 
 
 |