bool generate_key_image_helper(const AccountKeys& ack, const PublicKey& tx_public_key, size_t real_output_index, KeyPair& in_ephemeral, KeyImage& ki) { KeyDerivation recv_derivation; bool r = generate_key_derivation(tx_public_key, ack.viewSecretKey, recv_derivation); assert(r && "key image helper: failed to generate_key_derivation"); if (!r) { return false; } r = derive_public_key(recv_derivation, real_output_index, ack.address.spendPublicKey, in_ephemeral.publicKey); assert(r && "key image helper: failed to derive_public_key"); if (!r) { return false; } derive_secret_key(recv_derivation, real_output_index, ack.spendSecretKey, in_ephemeral.secretKey); generate_key_image(in_ephemeral.publicKey, in_ephemeral.secretKey, ki); return true; }
buffer derive_secret_key(const BufferType& peer_key) { return derive_secret_key(buffer_cast<const char*>(peer_key), buffer_size(peer_key)); }