watchtower: add wtclient.ClientSession constructor
This commit is contained in:
2 files changed
+34
-15
No files matched your search
@@ -435,27 +435,19 @@ func getTowerAndSessionCandidates(db DB, keyRing ECDHKeyRing,
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, s := range sessions {
|
for _, s := range sessions {
|
||||||
towerKeyDesc, err := keyRing.DeriveKey(
|
if !sessionFilter(s) {
|
||||||
keychain.KeyLocator{
|
continue
|
||||||
Family: keychain.KeyFamilyTowerSession,
|
}
|
||||||
Index: s.KeyIndex,
|
|
||||||
},
|
cs, err := NewClientSessionFromDBSession(
|
||||||
|
s, tower, keyRing,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
sessionKeyECDH := keychain.NewPubKeyECDH(
|
|
||||||
towerKeyDesc, keyRing,
|
|
||||||
)
|
|
||||||
|
|
||||||
// Add the session to the set of candidate sessions.
|
// Add the session to the set of candidate sessions.
|
||||||
candidateSessions[s.ID] = &ClientSession{
|
candidateSessions[s.ID] = cs
|
||||||
ID: s.ID,
|
|
||||||
ClientSessionBody: s.ClientSessionBody,
|
|
||||||
Tower: tower,
|
|
||||||
SessionKeyECDH: sessionKeyECDH,
|
|
||||||
}
|
|
||||||
|
|
||||||
perActiveTower(tower)
|
perActiveTower(tower)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,3 +198,30 @@ type ClientSession struct {
|
|||||||
// key used to connect to the watchtower.
|
// key used to connect to the watchtower.
|
||||||
SessionKeyECDH keychain.SingleKeyECDH
|
SessionKeyECDH keychain.SingleKeyECDH
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewClientSessionFromDBSession converts a wtdb.ClientSession to a
|
||||||
|
// ClientSession.
|
||||||
|
func NewClientSessionFromDBSession(s *wtdb.ClientSession, tower *Tower,
|
||||||
|
keyRing ECDHKeyRing) (*ClientSession, error) {
|
||||||
|
|
||||||
|
towerKeyDesc, err := keyRing.DeriveKey(
|
||||||
|
keychain.KeyLocator{
|
||||||
|
Family: keychain.KeyFamilyTowerSession,
|
||||||
|
Index: s.KeyIndex,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
sessionKeyECDH := keychain.NewPubKeyECDH(
|
||||||
|
towerKeyDesc, keyRing,
|
||||||
|
)
|
||||||
|
|
||||||
|
return &ClientSession{
|
||||||
|
ID: s.ID,
|
||||||
|
ClientSessionBody: s.ClientSessionBody,
|
||||||
|
Tower: tower,
|
||||||
|
SessionKeyECDH: sessionKeyECDH,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
Reference in new issue
Block a user