@@ -32,17 +32,19 @@ type ECDHSession interface {
3232 GetReadyPeersCount () int
3333 ErrChan () <- chan error
3434 Close () error
35+ OnKeyExchangeComplete (callback func ())
3536}
3637
3738type ecdhSession struct {
38- nodeID string
39- peerIDs []string
40- pubSub messaging.PubSub
41- ecdhSub messaging.Subscription
42- identityStore identity.Store
43- privateKey * ecdh.PrivateKey
44- publicKey * ecdh.PublicKey
45- errCh chan error
39+ nodeID string
40+ peerIDs []string
41+ pubSub messaging.PubSub
42+ ecdhSub messaging.Subscription
43+ identityStore identity.Store
44+ privateKey * ecdh.PrivateKey
45+ publicKey * ecdh.PublicKey
46+ errCh chan error
47+ onKeyExchangeComplete func ()
4648}
4749
4850func NewECDHSession (
@@ -72,6 +74,10 @@ func (e *ecdhSession) ErrChan() <-chan error {
7274 return e .errCh
7375}
7476
77+ func (e * ecdhSession ) OnKeyExchangeComplete (callback func ()) {
78+ e .onKeyExchangeComplete = callback
79+ }
80+
7581func (e * ecdhSession ) ListenKeyExchange () error {
7682 // Generate an ephemeral ECDH key pair
7783 privateKey , err := ecdh .X25519 ().GenerateKey (rand .Reader )
@@ -113,7 +119,15 @@ func (e *ecdhSession) ListenKeyExchange() error {
113119 // Derive symmetric key using HKDF
114120 symmetricKey := e .deriveSymmetricKey (sharedSecret , ecdhMsg .From )
115121 e .identityStore .SetSymmetricKey (ecdhMsg .From , symmetricKey )
116- logger .Debug ("ECDH progress" , "peer" , ecdhMsg .From , "current" , e .identityStore .GetSymetricKeyCount ())
122+
123+ currentKeyCount := e .identityStore .GetSymetricKeyCount ()
124+ logger .Debug ("ECDH progress" , "peer" , ecdhMsg .From , "current" , currentKeyCount , "expected" , len (e .peerIDs ))
125+
126+ // Check if ECDH exchange is complete and notify callback
127+ if currentKeyCount == len (e .peerIDs ) && e .onKeyExchangeComplete != nil {
128+ logger .Info ("ECDH key exchange completed successfully" , "totalKeys" , currentKeyCount )
129+ e .onKeyExchangeComplete ()
130+ }
117131 })
118132
119133 e .ecdhSub = sub
0 commit comments