core-lightning/lightningd/derive_basepoints.h
Rusty Russell b99c5620ef struct secret: use everywhere.
We alternated between using a sha256 and using a privkey, but there are
numerous places where we have a random 32 bytes which are neither.

This fixes many of them (plus, struct privkey is now defined in terms of
struct secret).

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2017-05-09 11:43:35 +09:30

47 lines
1.3 KiB
C

#ifndef LIGHTNING_LIGHTNINGD_DERIVE_BASEPOINTS_H
#define LIGHTNING_LIGHTNINGD_DERIVE_BASEPOINTS_H
#include "config.h"
#include <bitcoin/privkey.h>
#include <bitcoin/pubkey.h>
struct sha256;
struct basepoints {
struct pubkey revocation;
struct pubkey payment;
struct pubkey delayed_payment;
};
struct secrets {
struct privkey funding_privkey;
struct secret revocation_basepoint_secret;
struct secret payment_basepoint_secret;
struct secret delayed_payment_basepoint_secret;
};
bool derive_basepoints(const struct privkey *seed,
struct pubkey *funding_pubkey,
struct basepoints *basepoints,
struct secrets *secrets,
struct sha256 *shaseed,
struct pubkey *per_commit_point,
u64 per_commit_index);
/* Give up secret for index-1, and generate per-commitment point for N+1. */
bool next_per_commit_point(const struct sha256 *shaseed,
struct sha256 *old_commit_secret,
struct pubkey *per_commit_point,
u64 per_commit_index);
/* BOLT #3:
*
* the first secret used MUST be index 281474976710655, and then the index
* decremented.
*/
static inline u64 shachain_index(u64 per_commit_index)
{
assert(per_commit_index < (1ULL << 48));
return 281474976710655ULL - per_commit_index;
}
#endif /* LIGHTNING_LIGHTNINGD_DERIVE_BASEPOINTS_H */