Commit graph

116 commits

Author SHA1 Message Date
Matt Corallo
5588eeb06b
Merge pull request #1867 from wpaulino/remove-signer-persistence
Re-derive signers instead of persisting them
2022-12-06 18:13:49 +00:00
Wilmer Paulino
444fce71f4
Remove unnecessary byte_utils helpers
Now that to_be_bytes is available under our current MSRV of 1.41, we
can use it instead of our own version.
2022-12-05 12:11:38 -08:00
Wilmer Paulino
648a69a1e3
Rename KeysInterface ready_channel to provide_channel_parameters
Now that ready_channel is also called on startup upon deserializing
channels, we opt to rename it to a more indicative name.

We also derive `PartialEq` on ChannelTransactionParameters to allow
implementations to determine whether `provide_channel_parameters` calls
are idempotent after the channel parameters have already been provided.
2022-12-05 12:11:26 -08:00
Wilmer Paulino
b04d1b868f
Split KeysInterface::get_channel_signer into two
`get_channel_signer` previously had two different responsibilites:
generating unique `channel_keys_id` and using said ID to derive channel
keys. We decide to split it into two methods `generate_channel_keys_id`
and `derive_channel_signer`, such that we can use the latter to fulfill
our goal of re-deriving signers instead of persisting them. There's no
point in storing data that can be easily re-derived.
2022-12-05 12:11:23 -08:00
Matt Corallo
14d2e97965
Merge pull request #1887 from TheBlueMatt/2022-11-definitely-valid
Remove cryptographically unreachable error conditions
2022-12-03 19:01:15 +00:00
Matt Corallo
2cfc1dbb44 Remove unreachable Err cases when constructing TxCreationKeys 2022-11-30 22:43:29 +00:00
Matt Corallo
5671d2930d Remove unreachable Err cases on derive_*_revocation_key
The `derive_{public,private}_revocation_key` methods hash the two
input keys and then multiply the two input keys by hashed values
before adding them together. Because addition can fail if the tweak
is the inverse of the secret key this method currently returns a
`Result`.

However, it is not cryptographically possible to reach the error
case - in order to create an issue, the point-multiplied-by-hash
values must be the inverse of each other, however each point
commits the SHA-256 hash of both keys together. Thus, because
changing either key changes the hashes (and the ultimate points
added together) in an unpredictable way, there should be no way to
construct such points.
2022-11-30 22:34:11 +00:00
Matt Corallo
27461902ab Remove unreachable Err cases on derive_{public,private}_key
The `derive_{public,private}_key` methods hash the two input keys
and then add them to the input public key. Because addition can
fail if the tweak is the inverse of the secret key this method
currently returns a `Result`.

However, it is not cryptographically possible to reach the error
case - in order to create an issue, the SHA-256 hash of the
`base_point` (and other data) must be the inverse of the
`base_point`('s secret key). Because changing the `base_point`
changes the hash in an unpredictable way, there should be no way to
construct such a `base_point`.
2022-11-30 22:21:24 +00:00
Matt Corallo
2f0ddf0763
Merge pull request #1839 from ariard/2022-11-increase-visibility-helpers
Chan_utils helpers visibility relaxation
2022-11-30 18:56:15 +00:00
Antoine Riard
605d30eb03 Remove get_p2wpkh_redeemscript in favor of lib helper 2022-11-29 19:50:30 -05:00
Antoine Riard
263d76eb3d Increase visibility of script helper 2022-11-29 19:50:30 -05:00
Antoine Riard
2e4fab028b Increase visibility of protocol-level consts 2022-11-29 19:50:25 -05:00
Devrandom
e6b9694498 Re-add support for non-zero-fee-anchors to chan_utils and InMemorySigner 2022-11-22 12:28:51 +01:00
Wilmer Paulino
f4f1093edc
Bump workspace to rust edition 2018
Mostly motivated by the need of async/await.
2022-10-21 14:47:34 -07:00
Wilmer Paulino
abe85a1f44
Add public helper to build anchor input witnesses 2022-10-18 12:23:29 -07:00
Wilmer Paulino
892f8fe843
Yield channel close bump events 2022-10-18 12:23:15 -07:00
Wilmer Paulino
e9ac2b1669
Generate ClaimEvent for HolderFundingOutput inputs from anchor channels 2022-10-18 12:23:10 -07:00
Gabriel Comte
aa916bb594
Derive Eq for all structs that derive PartialEq 2022-10-14 13:24:02 +02:00
Wilmer Paulino
cd0d19c005
Update HTLC script detection to check for anchor output variants 2022-09-13 10:58:32 -07:00
Wilmer Paulino
a447965b80
Use zero fee HTLC transactions for anchor channels
This is based on the assumption that we only support the zero HTLC
transaction fee variant of anchor channels.
2022-09-13 10:58:29 -07:00
Devrandom
7e05623bef Update bitcoin crate to 0.29.0 2022-08-11 00:21:26 +02:00
Elias Rohrer
ba7935d1f3 Use new spec repository URL. 2022-05-20 17:17:29 +02:00
Devrandom
28d33ff9e0 bitcoin crate 0.28.1 2022-05-05 18:04:42 +02:00
Devrandom
8d7b38fcf1 Add low_r signature grinding
default on, can be turned off via a feature gate
2022-03-25 20:34:02 +01:00
Matt Corallo
acb4c539f7 Drop fuzztarget feature entirely
Some time ago we started transitioning to `cfg(fuzzing)` instead of
exposing a full feature. Here we complete the transition.
2022-02-18 17:03:04 +00:00
Tibo-lg
ba289b8872 Make CounterpartyCommitmentSecrets public 2022-02-10 15:25:08 +09:00
Ken Sedgwick
557a83096f
Convert HTLC_{SUCCESS,TIMEOUT}_TX_WEIGHT to anchor-aware functions 2022-01-13 15:01:21 -08:00
Ken Sedgwick
8f09e5a7ff
Set the SigHashType of remote htlc signatures w/ anchors to SinglePlusAnyoneCanPay 2022-01-13 14:37:03 -08:00
Matt Corallo
04d0cca872 Implement Clone, Hash, PartialEq for ClosingTransaction
This is a public struct intended to be used as an object by users,
so it should likely have common implementations, given they're
trivial.
2021-11-29 01:30:44 +00:00
Ken Sedgwick
530abc5efd
Add test vectors for get_htlc_redeemscript wrt anchors 2021-11-23 08:05:23 -08:00
Ken Sedgwick
50d81220df
Adjust HTLC_{SUCCESS,TIMEOUT}_TX_WEIGHT when anchors used 2021-11-23 08:05:22 -08:00
Ken Sedgwick
6c36e011a8
Add anchor support to build_htlc_transaction 2021-11-23 08:05:16 -08:00
Ken Sedgwick
c077f36b4b
Increase visibility of anchor related methods 2021-11-23 08:01:34 -08:00
Ken Sedgwick
3efcbab5d4
Add anchor support to commitment HTLC outputs 2021-11-23 08:00:42 -08:00
Ken Sedgwick
7dd8bd7068
Renamed script_for_p2wpkh to get_p2wpkh_redeemscript to match convention 2021-11-11 15:08:26 -08:00
Ken Sedgwick
1366d30531
Fix to_remote output redeemscript when anchors enabled 2021-11-11 15:08:15 -08:00
Devrandom
eebc0a921e Use ClosingTransaction in BaseSign 2021-09-09 20:49:24 +02:00
Devrandom
54907a0f4a Introduce ClosingTransaction 2021-09-09 20:49:24 +02:00
Devrandom
3dd99ebda6 Factor out low-level build_closing_transaction 2021-09-03 13:57:21 +02:00
Devrandom
8275698f3a Add anchor outputs pair in CommitmentTransaction
The anchor ouputs pair is added if there are pending HTLCs. Or a
a per-party anchor is added if the party has a pending balance.
2021-09-02 09:13:46 +02:00
Antoine Riard
97c29cfd34 Add get_anchor_script
This is a script builder to generate anchor output ones. They can be
satisfied either by a signature for the committed funding pubkey or anyone
after CSV delay expiration.

This is used at anchor output addition while generating commitment transaction.
2021-08-28 11:09:42 +02:00
Devrandom
0dfcacd22c Actual no_std support 2021-08-03 09:34:56 +02:00
Valentine Wallace
40959b74b7
Fix TLV serialization to work with large types.
Previous to this PR, TLV serialization involved iterating from 0 to the highest
given TLV type. This worked until we decided to implement keysend, which has a
TLV type of ~5.48 billion.

So instead, we now specify the type of whatever is being (de)serialized (which
can be an Option, a Vec type, or a non-Option (specified in the serialization macros as "required").
2021-06-24 16:25:31 -04:00
Matt Corallo
8cdc855f01 Clean up docs on public chan_utils methods to be more useful 2021-06-08 01:52:09 +00:00
Matt Corallo
66784e32fe Convert remaining channel inner structs and enums to TLV-based ser 2021-06-01 21:53:06 +00:00
Matt Corallo
df829a8526
Merge pull request #928 from TheBlueMatt/2021-05-really-tlv-ser
Migrate some inner structs to TLVs
2021-05-27 23:05:47 +00:00
Matt Corallo
c8bc1b6d3d Use TLV serialization for Commitment transaction structures 2021-05-27 21:41:24 +00:00
Gene Ferneau
12461fcba1
Use alloc for no_std builds
Replace std structs with alloc equivalents to support no_std builds

f use prelude::* credit @devrandom
2021-05-27 17:35:20 +00:00
Antoine Riard
c9bd7b3f2d Introduce PackageTemplae, a replacement of InputMaterial
PackageTemplate aims to replace InputMaterial, introducing a clean
interface to manipulate a wide range of claim types without
OnchainTxHandler aware of special content of each.

This is used in next commits.
2021-05-25 19:54:57 -04:00
Gene Ferneau
ec3739b7a2
Use core replacements for std members
In preparation for no_std build support, replace std structs and
functions with core equivalents
2021-05-23 23:48:27 +00:00