| 227 | } |
| 228 | |
| 229 | bool CKey::SignCompact(const uint256& hash, std::vector<uint8_t>& vchSig) const { |
| 230 | if (!fValid) |
| 231 | return false; |
| 232 | vchSig.resize(CPubKey::COMPACT_SIGNATURE_SIZE); |
| 233 | int rec = -1; |
| 234 | secp256k1_ecdsa_recoverable_signature sig; |
| 235 | int ret = secp256k1_ecdsa_sign_recoverable(secp256k1_context_sign, &sig, hash.begin(), begin(), secp256k1_nonce_function_rfc6979, nullptr); |
| 236 | assert(ret); |
| 237 | secp256k1_ecdsa_recoverable_signature_serialize_compact(secp256k1_context_sign, (unsigned char*)&vchSig[1], &rec, &sig); |
| 238 | assert(ret); |
| 239 | assert(rec != -1); |
| 240 | vchSig[0] = 27 + rec + (fCompressed ? 4 : 0); |
| 241 | return true; |
| 242 | } |
| 243 | |
| 244 | bool CKey::Load(const CPrivKey& privkey, const CPubKey& vchPubKey, bool fSkipCheck = false) { |
| 245 | if (!ec_privkey_import_der(secp256k1_context_sign, (unsigned char*)begin(), privkey.data(), privkey.size())) |