+++ /dev/null
-Generate key pairs:
-
-> newmalleablekey
-{
-"PrivatePair" : "DgiohBCDx3N528wVLC3DZzAeAk3dnaSS7zt7dL3HBpNh4MAGk2xHRVxHQNNGg6eX3MmAV8bPLPMfRJ2m14wMjagpjpCsV33A",
-"PublicPair" : "5GRZdncReLgGZL7pjFQCpWMLzRpb4FxfYEGdaQeMSRZdZZWFmDR7qSuQHNxXX1UcAkdPSGiqdTKWfnayCX2vJbf2SgfoqdvC5mP",
-"PublicBytes" : "01210390db9818fc073642977989afb9e8e4c47adaf8d940a8a0562a0d7230bdbf8af1210326cf4bcaccb70d418dab3304d7b8eddf00c900ff8ce22eaa639214c40e937220"
-}
-
-Create public key variant:
-
-> adjustmalleablepubkey 5GRZdncReLgGZL7pjFQCpWMLzRpb4FxfYEGdaQeMSRZdZZWFmDR7qSuQHNxXX1UcAkdPSGiqdTKWfnayCX2vJbf2SgfoqdvC5mP
-{
-"R" : "020b2e43c4c5984d02c564a18f0efb64cb9d3617ff3154699d2ed4718d0512365d",
-"Rcrypted" : "03ffdb5faf6c54db89e14b11b92f28dfda1f65e09001276cc38491b69b94e85b1c4ee0d6ff62db2aaa5669f884afcab7b6690ea3cc97c5b4a2eba8960bcbf089c53dfb92225b4dfde0658419acc56976477dac66343a6621dea05889badcc68b0ed019edde",
-"PubkeyVariant" : "02f956d11ece637741bc96f441209dc36c78aa3f0320cc22433ae053a1d27a2a25",
-"KeyVariantID" : "4NA1e7f5qD68ApK8vbaX7VVjfAitSLbyNu"
-}
-
-Now, the both crypted and uncrypted R parameter should produce identical private keys:
-
-> adjustmalleablekey DgiohBCDx3N528wVLC3DZzAeAk3dnaSS7zt7dL3HBpNh4MAGk2xHRVxHQNNGg6eX3MmAV8bPLPMfRJ2m14wMjagpjpCsV33A 02f956d11ece637741bc96f441209dc36c78aa3f0320cc22433ae053a1d27a2a25 020b2e43c4c5984d02c564a18f0efb64cb9d3617ff3154699d2ed4718d0512365d
-{
-"PrivateKey" : "MBhrGekLruK6GsNTvWq9gJDtJ7EAGH2Rixv81ZwqbbGBah1Cz5jV"
-}
-
-> adjustmalleablekey DgiohBCDx3N528wVLC3DZzAeAk3dnaSS7zt7dL3HBpNh4MAGk2xHRVxHQNNGg6eX3MmAV8bPLPMfRJ2m14wMjagpjpCsV33A 02f956d11ece637741bc96f441209dc36c78aa3f0320cc22433ae053a1d27a2a25 03ffdb5faf6c54db89e14b11b92f28dfda1f65e09001276cc38491b69b94e85b1c4ee0d6ff62db2aaa5669f884afcab7b6690ea3cc97c5b4a2eba8960bcbf089c53dfb92225b4dfde0658419acc56976477dac66343a6621dea05889badcc68b0ed019edde
-{
-"PrivateKey" : "MBhrGekLruK6GsNTvWq9gJDtJ7EAGH2Rixv81ZwqbbGBah1Cz5jV"
-}
CKey privKeyVariant;
CPubKey vchPubKeyVariant = CPubKey(ParseHex(params[1].get_str()));
- std::vector<unsigned char> vchR = ParseHex(params[2].get_str());
-
- CPubKey R;
- if (vchR.size() == 33)
- R = CPubKey(vchR);
- else {
- // R is encrypted
- CSecret pvchSecretL, pvchSecretH;
-
- malleableKey.GetSecrets(pvchSecretL, pvchSecretH);
- CKey key;
- key.SetSecret(pvchSecretL);
-
- std::vector<unsigned char> vchDecryptedR;
- key.DecryptData(vchR, vchDecryptedR);
- R = CPubKey(vchDecryptedR);
- }
+ CPubKey R(ParseHex(params[2].get_str()));
if (!malleableKey.CheckKeyVariant(R,vchPubKeyVariant, privKeyVariant)) {
throw runtime_error("Unable to calculate the private key");
CPubKey R, vchPubKeyVariant;
malleablePubKey.GetVariant(R, vchPubKeyVariant);
- std::vector<unsigned char> encryptedR;
- malleablePubKey.GetL().EncryptData(R.Raw(), encryptedR);
-
Object result;
result.push_back(Pair("R", HexStr(R.Raw())));
- result.push_back(Pair("Rcrypted", HexStr(encryptedR)));
result.push_back(Pair("PubkeyVariant", HexStr(vchPubKeyVariant.Raw())));
result.push_back(Pair("KeyVariantID", CBitcoinAddress(vchPubKeyVariant.GetID()).ToString()));