4
4
#include <common/utils.h>
5
5
#include <wire/wire.h>
6
6
7
+ #if DEVELOPER
8
+ /* If they specify --dev-force-channel-secrets it ends up in here. */
9
+ struct secrets * dev_force_channel_secrets ;
10
+ struct sha256 * dev_force_channel_secrets_shaseed ;
11
+
12
+ void towire_secrets (u8 * * pptr , const struct secrets * s )
13
+ {
14
+ towire_privkey (pptr , & s -> funding_privkey );
15
+ towire_secret (pptr , & s -> revocation_basepoint_secret );
16
+ towire_secret (pptr , & s -> payment_basepoint_secret );
17
+ towire_secret (pptr , & s -> delayed_payment_basepoint_secret );
18
+ towire_secret (pptr , & s -> htlc_basepoint_secret );
19
+ }
20
+
21
+ void fromwire_secrets (const u8 * * ptr , size_t * max , struct secrets * s )
22
+ {
23
+ fromwire_privkey (ptr , max , & s -> funding_privkey );
24
+ fromwire_secret (ptr , max , & s -> revocation_basepoint_secret );
25
+ fromwire_secret (ptr , max , & s -> payment_basepoint_secret );
26
+ fromwire_secret (ptr , max , & s -> delayed_payment_basepoint_secret );
27
+ fromwire_secret (ptr , max , & s -> htlc_basepoint_secret );
28
+ }
29
+ #else /* !DEVELOPER */
30
+ /* Generate code refers to this, but should never be called! */
31
+ void towire_secrets (u8 * * pptr , const struct secrets * s )
32
+ {
33
+ abort ();
34
+ }
35
+
36
+ void fromwire_secrets (const u8 * * ptr , size_t * max , struct secrets * s )
37
+ {
38
+ abort ();
39
+ }
40
+ #endif
41
+
42
+ struct keys {
43
+ struct privkey f , r , h , p , d ;
44
+ struct sha256 shaseed ;
45
+ };
46
+
47
+ static void derive_keys (const struct secret * seed , struct keys * keys )
48
+ {
49
+ hkdf_sha256 (keys , sizeof (* keys ), NULL , 0 , seed , sizeof (* seed ),
50
+ "c-lightning" , strlen ("c-lightning" ));
51
+
52
+ #if DEVELOPER
53
+ if (dev_force_channel_secrets ) {
54
+ keys -> f = dev_force_channel_secrets -> funding_privkey ;
55
+ keys -> r .secret = dev_force_channel_secrets -> revocation_basepoint_secret ;
56
+ keys -> p .secret = dev_force_channel_secrets -> payment_basepoint_secret ;
57
+ keys -> h .secret = dev_force_channel_secrets -> htlc_basepoint_secret ;
58
+ keys -> d .secret = dev_force_channel_secrets -> delayed_payment_basepoint_secret ;
59
+ }
60
+ if (dev_force_channel_secrets_shaseed )
61
+ keys -> shaseed = * dev_force_channel_secrets_shaseed ;
62
+ #endif
63
+ }
64
+
7
65
bool derive_basepoints (const struct secret * seed ,
8
66
struct pubkey * funding_pubkey ,
9
67
struct basepoints * basepoints ,
10
68
struct secrets * secrets ,
11
69
struct sha256 * shaseed )
12
70
{
13
- struct keys {
14
- struct privkey f , r , h , p , d ;
15
- struct sha256 shaseed ;
16
- } keys ;
71
+ struct keys keys ;
17
72
18
- hkdf_sha256 (& keys , sizeof (keys ), NULL , 0 , seed , sizeof (* seed ),
19
- "c-lightning" , strlen ("c-lightning" ));
73
+ derive_keys (seed , & keys );
20
74
21
75
if (secrets ) {
22
76
secrets -> funding_privkey = keys .f ;
@@ -95,13 +149,9 @@ bool derive_payment_basepoint(const struct secret *seed,
95
149
struct pubkey * payment_basepoint ,
96
150
struct secret * payment_secret )
97
151
{
98
- struct keys {
99
- struct privkey f , r , h , p , d ;
100
- struct sha256 shaseed ;
101
- } keys ;
152
+ struct keys keys ;
102
153
103
- hkdf_sha256 (& keys , sizeof (keys ), NULL , 0 , seed , sizeof (* seed ),
104
- "c-lightning" , strlen ("c-lightning" ));
154
+ derive_keys (seed , & keys );
105
155
106
156
if (payment_basepoint ) {
107
157
if (!pubkey_from_privkey (& keys .p , payment_basepoint ))
@@ -118,13 +168,9 @@ bool derive_delayed_payment_basepoint(const struct secret *seed,
118
168
struct pubkey * delayed_payment_basepoint ,
119
169
struct secret * delayed_payment_secret )
120
170
{
121
- struct keys {
122
- struct privkey f , r , h , p , d ;
123
- struct sha256 shaseed ;
124
- } keys ;
171
+ struct keys keys ;
125
172
126
- hkdf_sha256 (& keys , sizeof (keys ), NULL , 0 , seed , sizeof (* seed ),
127
- "c-lightning" , strlen ("c-lightning" ));
173
+ derive_keys (seed , & keys );
128
174
129
175
if (delayed_payment_basepoint ) {
130
176
if (!pubkey_from_privkey (& keys .d , delayed_payment_basepoint ))
@@ -139,13 +185,10 @@ bool derive_delayed_payment_basepoint(const struct secret *seed,
139
185
140
186
bool derive_shaseed (const struct secret * seed , struct sha256 * shaseed )
141
187
{
142
- struct keys {
143
- struct privkey f , r , h , p , d ;
144
- struct sha256 shaseed ;
145
- } keys ;
188
+ struct keys keys ;
189
+
190
+ derive_keys (seed , & keys );
146
191
147
- hkdf_sha256 (& keys , sizeof (keys ), NULL , 0 , seed , sizeof (* seed ),
148
- "c-lightning" , strlen ("c-lightning" ));
149
192
* shaseed = keys .shaseed ;
150
193
return true;
151
194
}
@@ -154,18 +197,17 @@ bool derive_funding_key(const struct secret *seed,
154
197
struct pubkey * funding_pubkey ,
155
198
struct privkey * funding_privkey )
156
199
{
157
- struct privkey f ;
200
+ struct keys keys ;
158
201
159
- hkdf_sha256 (& f , sizeof (f ), NULL , 0 , seed , sizeof (* seed ),
160
- "c-lightning" , strlen ("c-lightning" ));
202
+ derive_keys (seed , & keys );
161
203
162
204
if (funding_pubkey ) {
163
- if (!pubkey_from_privkey (& f , funding_pubkey ))
205
+ if (!pubkey_from_privkey (& keys . f , funding_pubkey ))
164
206
return false;
165
207
}
166
208
167
209
if (funding_privkey )
168
- * funding_privkey = f ;
210
+ * funding_privkey = keys . f ;
169
211
170
212
return true;
171
213
}
@@ -174,13 +216,9 @@ bool derive_revocation_basepoint(const struct secret *seed,
174
216
struct pubkey * revocation_basepoint ,
175
217
struct secret * revocation_secret )
176
218
{
177
- struct keys {
178
- struct privkey f , r , h , p , d ;
179
- struct sha256 shaseed ;
180
- } keys ;
219
+ struct keys keys ;
181
220
182
- hkdf_sha256 (& keys , sizeof (keys ), NULL , 0 , seed , sizeof (* seed ),
183
- "c-lightning" , strlen ("c-lightning" ));
221
+ derive_keys (seed , & keys );
184
222
185
223
if (revocation_basepoint ) {
186
224
if (!pubkey_from_privkey (& keys .r , revocation_basepoint ))
@@ -197,13 +235,9 @@ bool derive_htlc_basepoint(const struct secret *seed,
197
235
struct pubkey * htlc_basepoint ,
198
236
struct secret * htlc_secret )
199
237
{
200
- struct keys {
201
- struct privkey f , r , h , p , d ;
202
- struct sha256 shaseed ;
203
- } keys ;
238
+ struct keys keys ;
204
239
205
- hkdf_sha256 (& keys , sizeof (keys ), NULL , 0 , seed , sizeof (* seed ),
206
- "c-lightning" , strlen ("c-lightning" ));
240
+ derive_keys (seed , & keys );
207
241
208
242
if (htlc_basepoint ) {
209
243
if (!pubkey_from_privkey (& keys .h , htlc_basepoint ))
0 commit comments