@@ -53,16 +53,26 @@ impl EnforcingChannelKeys {
53
53
54
54
impl ChannelKeys for EnforcingChannelKeys {
55
55
fn get_per_commitment_point < T : secp256k1:: Signing + secp256k1:: Verification > ( & self , idx : u64 , secp_ctx : & Secp256k1 < T > ) -> PublicKey {
56
- self . inner . get_per_commitment_point ( idx, secp_ctx)
56
+ let res = self . inner . get_per_commitment_point ( idx, secp_ctx) ;
57
+ println ! ( "XXX get_per {} {} = point {}" , self . inner. commitment_seed[ 0 ] , idx, res) ;
58
+ res
57
59
}
58
60
59
61
fn get_revoke_commitment_secret ( & self , idx : u64 ) -> [ u8 ; 32 ] {
60
- let mut revoked = self . revoked_commitment . lock ( ) . unwrap ( ) ;
61
- if idx != * revoked && idx != * revoked - 1 {
62
- panic ! ( "can only revoke the current or next unrevoked commitment - trying {}, revoked {}" , idx, * revoked)
62
+ println ! ( "XXX revoke {} {}" , self . inner. commitment_seed[ 0 ] , idx) ;
63
+ let res = {
64
+ let mut revoked = self . revoked_commitment . lock ( ) . unwrap ( ) ;
65
+ if idx != * revoked && idx != * revoked - 1 {
66
+ panic ! ( "can only revoke the current or next unrevoked commitment - trying {}, revoked {}" , idx, * revoked)
67
+ }
68
+ * revoked = idx;
69
+ self . inner . get_revoke_commitment_secret ( idx)
70
+ } ;
71
+ {
72
+ let revoked = self . revoked_commitment . lock ( ) . unwrap ( ) ;
73
+ assert_eq ! ( idx, * revoked) ;
63
74
}
64
- * revoked = idx;
65
- self . inner . get_revoke_commitment_secret ( idx)
75
+ res
66
76
}
67
77
fn pubkeys ( & self ) -> & ChannelPublicKeys { self . inner . pubkeys ( ) }
68
78
fn key_derivation_params ( & self ) -> ( u64 , u64 ) { self . inner . key_derivation_params ( ) }
@@ -86,6 +96,19 @@ impl ChannelKeys for EnforcingChannelKeys {
86
96
}
87
97
88
98
fn sign_local_commitment < T : secp256k1:: Signing + secp256k1:: Verification > ( & self , local_commitment_tx : & LocalCommitmentTransaction , secp_ctx : & Secp256k1 < T > ) -> Result < Signature , ( ) > {
99
+ let revoked = self . revoked_commitment . lock ( ) . unwrap ( ) ;
100
+ let keys = & local_commitment_tx. local_keys ;
101
+ if keys. per_commitment_point != self . inner . get_per_commitment_point ( * revoked - 1 , secp_ctx) {
102
+ if keys. per_commitment_point != self . inner . get_per_commitment_point ( * revoked - 2 , secp_ctx) {
103
+ if keys. per_commitment_point == self . inner . get_per_commitment_point ( * revoked, secp_ctx) {
104
+ panic ! ( "attempted to sign the latest revoked local commitment {}" , self . inner. commitment_seed[ 0 ] ) ;
105
+ } else {
106
+ panic ! ( "can only sign the next two unrevoked commitment numbers, {} revoked={} point={}" ,
107
+ self . inner. commitment_seed[ 0 ] , * revoked, keys. per_commitment_point) ;
108
+ }
109
+ }
110
+ }
111
+
89
112
Ok ( self . inner . sign_local_commitment ( local_commitment_tx, secp_ctx) . unwrap ( ) )
90
113
}
91
114
@@ -137,6 +160,8 @@ impl Writeable for EnforcingChannelKeys {
137
160
self . inner . write ( writer) ?;
138
161
let revoked = * self . revoked_commitment . lock ( ) . unwrap ( ) ;
139
162
revoked. write ( writer) ?;
163
+ println ! ( "XXX write {} {}" , self . inner. commitment_seed[ 0 ] , revoked) ;
164
+
140
165
let ( obscure, last) = * self . commitment_number_obscure_and_last . lock ( ) . unwrap ( ) ;
141
166
obscure. write ( writer) ?;
142
167
last. write ( writer) ?;
@@ -146,9 +171,10 @@ impl Writeable for EnforcingChannelKeys {
146
171
147
172
impl Readable for EnforcingChannelKeys {
148
173
fn read < R : :: std:: io:: Read > ( reader : & mut R ) -> Result < Self , DecodeError > {
149
- let inner = Readable :: read ( reader) ?;
174
+ let inner: InMemoryChannelKeys = Readable :: read ( reader) ?;
150
175
let revoked = Readable :: read ( reader) ?;
151
176
let obscure_and_last = Readable :: read ( reader) ?;
177
+ println ! ( "XXX read {} {}" , inner. commitment_seed[ 0 ] , revoked) ;
152
178
Ok ( EnforcingChannelKeys {
153
179
inner : inner,
154
180
revoked_commitment : Arc :: new ( Mutex :: new ( revoked) ) ,
0 commit comments