diff --git a/pkg/middleware/encrypt/keyexchange/curve25519messages.go b/pkg/middleware/encrypt/keyexchange/curve25519messages.go index ade186a..5f6b9a4 100644 --- a/pkg/middleware/encrypt/keyexchange/curve25519messages.go +++ b/pkg/middleware/encrypt/keyexchange/curve25519messages.go @@ -23,6 +23,23 @@ type Init struct { Salt types.Salt `json:"salt"` } +func NewInit(pubKey types.PublicKey, sign []byte, sessionID types.EncryptionSessionID, salt types.Salt) (*Init, error) { + msg := &Init{ + PublicKey: pubKey, + Signature: sign, + SessionID: sessionID, + Salt: salt, + } + + bmsg, err := interceptor.NewBaseMessage(message.NoneProtocol, nil, msg) + if err != nil { + return nil, err + } + msg.BaseMessage = bmsg + + return msg, nil +} + func (m *Init) WriteProcess(_ interceptor.Interceptor, _ interceptor.Connection) error { return nil } @@ -76,9 +93,14 @@ func (m *Init) Process(protocol interfaces.Protocol, s interfaces.State) error { p.decKey = decKey p.sessionID = m.SessionID - if err := s.WriteMessage(nil); err != nil { + msg, err := NewResponse(p.pubKey) + if err != nil { + return err + } - } // TODO: ADD RESPONSE MESSAGE + if err := s.WriteMessage(msg); err != nil { + return err + } p.state = types.SessionStateInProgress return nil @@ -89,6 +111,20 @@ type Response struct { PublicKey types.PublicKey `json:"public_key"` } +func NewResponse(pubKey types.PublicKey) (*Response, error) { + msg := &Response{ + PublicKey: pubKey, + } + + bmsg, err := interceptor.NewBaseMessage(message.NoneProtocol, nil, msg) + if err != nil { + return nil, err + } + msg.BaseMessage = bmsg + + return msg, nil +} + func (m *Response) WriteProcess(_ interceptor.Interceptor, _ interceptor.Connection) error { return nil } @@ -135,9 +171,14 @@ func (m *Response) Process(protocol interfaces.Protocol, s interfaces.State) err p.encKey = encKey p.decKey = decKey - if err := s.WriteMessage(nil); err != nil { + msg, err := NewDone() + if err != nil { return err - } // TODO: Send Done message + } + + if err := s.WriteMessage(msg); err != nil { + return err + } p.state = types.SessionStateInProgress return nil diff --git a/pkg/middleware/encrypt/keyexchange/curve25519protocol.go b/pkg/middleware/encrypt/keyexchange/curve25519protocol.go index a320b45..0f8a6c8 100644 --- a/pkg/middleware/encrypt/keyexchange/curve25519protocol.go +++ b/pkg/middleware/encrypt/keyexchange/curve25519protocol.go @@ -51,9 +51,14 @@ func (p *Curve25519Protocol) Init(s interfaces.State) error { return err } - _ = ed25519.Sign(p.options.SigningKey, append(p.pubKey[:], p.salt[:]...)) + sign := ed25519.Sign(p.options.SigningKey, append(p.pubKey[:], p.salt[:]...)) - if err := s.WriteMessage(nil); err != nil { // TODO: SEND INIT MESSAGE + msg, err := NewInit(p.pubKey, sign, p.sessionID, p.salt) + if err != nil { + return err + } + + if err := s.WriteMessage(msg); err != nil { p.state = types.SessionStateError return err }