| 239 | } |
| 240 | |
| 241 | bool CKey::SignCompact(const uint256 &hash, std::vector<unsigned char>& vchSig) const { |
| 242 | if (!fValid) |
| 243 | return false; |
| 244 | vchSig.resize(CPubKey::COMPACT_SIGNATURE_SIZE); |
| 245 | int rec = -1; |
| 246 | secp256k1_ecdsa_recoverable_signature sig; |
| 247 | int ret = secp256k1_ecdsa_sign_recoverable(secp256k1_context_sign, &sig, hash.begin(), begin(), secp256k1_nonce_function_rfc6979, nullptr); |
| 248 | assert(ret); |
| 249 | secp256k1_ecdsa_recoverable_signature_serialize_compact(secp256k1_context_sign, &vchSig[1], &rec, &sig); |
| 250 | assert(ret); |
| 251 | assert(rec != -1); |
| 252 | vchSig[0] = 27 + rec + (fCompressed ? 4 : 0); |
| 253 | return true; |
| 254 | } |
| 255 | |
| 256 | bool CKey::Load(const CPrivKey &privkey, const CPubKey &vchPubKey, bool fSkipCheck=false) { |
| 257 | if (!ec_privkey_import_der(secp256k1_context_sign, (unsigned char*)begin(), privkey.data(), privkey.size())) |