u8 *scriptsig_pay_to_pubkeyhash(const tal_t *ctx, const struct pubkey *key, const struct bitcoin_signature *sig) { u8 *script = tal_arr(ctx, u8, 0); add_push_sig(&script, sig); add_push_key(&script, key); return script; }
/* Assumes redeemscript contains CHECKSIG, not CHECKMULTISIG */ u8 *scriptsig_p2sh_single_sig(const tal_t *ctx, const u8 *redeem_script, size_t redeem_len, const struct bitcoin_signature *sig) { u8 *script = tal_arr(ctx, u8, 0); add_push_sig(&script, sig); add_push_bytes(&script, redeem_script, redeem_len); return script; }
u8 *scriptsig_p2sh_secret(const tal_t *ctx, const void *secret, size_t secret_len, const struct bitcoin_signature *sig, const u8 *redeemscript, size_t redeem_len) { u8 *script = tal_arr(ctx, u8, 0); add_push_sig(&script, sig); add_push_bytes(&script, secret, secret_len); add_push_bytes(&script, redeemscript, redeem_len); return script; }
u8 *scriptsig_p2sh_2of2(const tal_t *ctx, const struct bitcoin_signature *sig1, const struct bitcoin_signature *sig2, const struct pubkey *key1, const struct pubkey *key2) { u8 *script = tal_arr(ctx, u8, 0); u8 *redeemscript; /* OP_CHECKMULTISIG has an out-by-one bug, which MBZ */ add_number(&script, 0); /* sig order should match key order. */ if (key_less(key1, key2)) { add_push_sig(&script, sig1); add_push_sig(&script, sig2); } else { add_push_sig(&script, sig2); add_push_sig(&script, sig1); } redeemscript = bitcoin_redeem_2of2(script, key1, key2); add_push_bytes(&script, redeemscript, tal_count(redeemscript)); return script; }
u8 *scriptsig_p2sh_revoke(const tal_t *ctx, const struct sha256 *preimage, const struct bitcoin_signature *sig, const u8 *revocable_redeem, size_t redeem_len) { u8 *script = tal_arr(ctx, u8, 0); add_push_sig(&script, sig); add_push_bytes(&script, preimage, sizeof(*preimage)); add_push_bytes(&script, revocable_redeem, redeem_len); return script; }