Хотите понять, какие переменные и форматы я должен использовать для корректного использования криптоалгоритмов при создании адресов биткойнов.
Я использую Chilkat lib для криптографических функций ecdsa и palemd-160 sha256.
CkPrng fortuna;
const char *entropy = fortuna.getEntropy(32, "base64");
fortuna.AddEntropy(entropy, "base64");
// cout << string(entropy) << endl;
// 0210qtm3T9YoNlmMjRpiyzgVnawK2H6f1dusP1iP+38=
CkEcc ecc;
// Generate a random ECC private key on the secp256r1 curve.
// Chilkat also supports other curves, such as secp384r1, secp521r1, and secp256k1.
CkPrivateKey *privKey = ecc.GenEccKey("secp256r1", fortuna);
if (privKey == 0) {
cout << ecc.lastErrorText() << "\r\n";
return;
}
success = privKey->SavePkcs8EncryptedPemFile(privatePass.c_str(), privatePath.c_str());
if (success != true) {
cout << privKey->lastErrorText() << "\r\n";
return trust;
}
CkPublicKey *pubKey = privKey->GetPublicKey();
delete privKey;
bool bPreferPkcs1 = false;
success = pubKey->SavePemFile(bPreferPkcs1, publicPath.c_str());
if (success != true) {
cout << pubKey->lastErrorText() << "\r\n";
return trust;
}
CkJsonObject ckJson;
ckJson.Load(jwk);
ckJson.put_EmitCompact(false);
CkString xValue;
ckJson.StringOf("x", xValue);
CkString yValue;
ckJson.StringOf("y", yValue);
string ecdsaStr = string(xValue.getString()) + string(yValue.getString());
const char *sha256Str = 0;
crypt.put_HashAlgorithm("sha256");
sha256Str = crypt.hashStringENC(ecdsaStr.c_str());
cout << "sha256: " << sha256Str << "\r\n";
// zu68LKfjotv+nm2qX4YROFajICbf2x1hy92YLixM8Q=
Во-первых, я прав, используя значения X, Y для создания символа sha256.
Во-вторых, у меня получилась странная выходная строка sha256, но в исходном примере адреса биткойна: 0b7c28c9b7290c98d7438e70b3d3f7c848fbd7d1dc19eb88884989b883*
Пожалуйста, помогите мне использовать правильные данные и результаты, похожие на примеры биткойнов.