mirror of
https://github.com/lightninglabs/lightning-terminal.git
synced 2026-08-14 12:43:32 +02:00
This commit does a few things: 1. Instead of deriving IDs using the first 4 bytes of the session's serialised local pub key, we instead use bytes [1:5] in order to skip the first byte which is either 0x02 or 0x03. This results in a greater entropy set. 2. We also add a new index from ID to key and we write to this index each time a new session is added. 3. We add a `ReserveNewSessionID` method to the session store which will grind through private keys until it finds one that does not clash with the current ID set. 4. A migration is added to back-fill the ID-to-key index. If any old sessions are found that _do_ have a colliding ID, they are sorted by created time and all but the newest session is revoked. Only an entry for the newest session will be added to the ID-to-key index.
34 lines
903 B
Go
34 lines
903 B
Go
package migration1
|
|
|
|
import (
|
|
"encoding/binary"
|
|
)
|
|
|
|
var (
|
|
// SuperMacaroonRootKeyPrefix is the prefix we set on a super macaroon's
|
|
// root key to clearly mark it as such.
|
|
SuperMacaroonRootKeyPrefix = [4]byte{0xFF, 0xEE, 0xDD, 0xCC}
|
|
)
|
|
|
|
// ID represents the id of a session.
|
|
type ID [4]byte
|
|
|
|
// NewSuperMacaroonRootKeyID returns a new macaroon root key ID that has the
|
|
// prefix to mark it as a super macaroon root key.
|
|
func NewSuperMacaroonRootKeyID(id [4]byte) uint64 {
|
|
rootKeyBytes := make([]byte, 8)
|
|
copy(rootKeyBytes[:], SuperMacaroonRootKeyPrefix[:])
|
|
copy(rootKeyBytes[4:], id[:])
|
|
return binary.BigEndian.Uint64(rootKeyBytes)
|
|
}
|
|
|
|
// IDFromMacRootKeyID converts a macaroon root key ID to a session ID.
|
|
func IDFromMacRootKeyID(rootKeyID uint64) ID {
|
|
rootKeyBytes := make([]byte, 8)
|
|
binary.BigEndian.PutUint64(rootKeyBytes[:], rootKeyID)
|
|
|
|
var id ID
|
|
copy(id[:], rootKeyBytes[4:])
|
|
|
|
return id
|
|
}
|