Правильный адрес производства биткойнов - PullRequest
0 голосов
/ 07 октября 2018

Хотите понять, какие переменные и форматы я должен использовать для корректного использования криптоалгоритмов при создании адресов биткойнов.

Я использую 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*

Пожалуйста, помогите мне использовать правильные данные и результаты, похожие на примеры биткойнов.

...