Adding inner symetric encryption
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
@@ -73,6 +73,7 @@ func (p *Peer) GetMyContact() *meowlib.ContactCard {
|
||||
c.InvitationId = p.InvitationId
|
||||
c.InvitationMessage = p.InvitationMessage
|
||||
c.Name = p.MyName
|
||||
c.SymetricKey = p.MySymKey
|
||||
return &c
|
||||
}
|
||||
|
||||
@@ -199,6 +200,24 @@ func (p *Peer) DeserializeUserMessage(data []byte) (*meowlib.UserMessage, error)
|
||||
return &msg, nil
|
||||
}
|
||||
|
||||
// SymEncryptPayload applies the shared symmetric key over already-encrypted data.
|
||||
// If MySymKey is empty, data is returned unchanged (peer has no symkey configured).
|
||||
func (p *Peer) SymEncryptPayload(data []byte) ([]byte, error) {
|
||||
if p.MySymKey == "" {
|
||||
return data, nil
|
||||
}
|
||||
return meowlib.SymEncrypt(p.MySymKey, data)
|
||||
}
|
||||
|
||||
// SymDecryptPayload removes the outer symmetric encryption layer.
|
||||
// If MySymKey is empty, data is returned unchanged.
|
||||
func (p *Peer) SymDecryptPayload(data []byte) ([]byte, error) {
|
||||
if p.MySymKey == "" {
|
||||
return data, nil
|
||||
}
|
||||
return meowlib.SymDecrypt(p.MySymKey, data)
|
||||
}
|
||||
|
||||
// AsymEncryptMessage prepares a message to send to a specific peer contact
|
||||
func (p *Peer) AsymEncryptMessage(Message []byte) (*meowlib.EncryptedMessage, error) {
|
||||
var enc *meowlib.EncryptedMessage
|
||||
@@ -259,19 +278,29 @@ func (p *Peer) ProcessOutboundUserMessage(usermessage *meowlib.UserMessage) (*me
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// Encrypting it
|
||||
// Asymmetric encryption + signature (inner layer)
|
||||
enc, err := p.AsymEncryptMessage(serializedMessage)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// Symmetric encryption (outer layer, if symkey is configured)
|
||||
symEncrypted, err := p.SymEncryptPayload(enc.Data)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// Packing it
|
||||
packedMsg := p.PackUserMessage(enc.Data, enc.Signature)
|
||||
packedMsg := p.PackUserMessage(symEncrypted, enc.Signature)
|
||||
return packedMsg, nil
|
||||
}
|
||||
|
||||
// ProcessInboundUserMessage is a helper function that decrypts and deserializes a user message
|
||||
func (p *Peer) ProcessInboundUserMessage(message []byte, signature []byte) (*meowlib.UserMessage, error) {
|
||||
dec, err := p.AsymDecryptMessage(message, signature)
|
||||
// Symmetric decryption (outer layer, if symkey is configured)
|
||||
symDecrypted, err := p.SymDecryptPayload(message)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
dec, err := p.AsymDecryptMessage(symDecrypted, signature)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user