]> Cypherpunks.ru repositories - nncp.git/blobdiff - src/pkt.go
Merge branch 'develop'
[nncp.git] / src / pkt.go
index a1993e7a8ed98334e2c96dc14e22cc28d73235a1..2a161f721c6a3e955ef57ba1b06b44ce022408b7 100644 (file)
@@ -1,6 +1,6 @@
 /*
 NNCP -- Node to Node copy, utilities for store-and-forward data exchange
-Copyright (C) 2016-2021 Sergey Matveev <stargrave@stargrave.org>
+Copyright (C) 2016-2023 Sergey Matveev <stargrave@stargrave.org>
 
 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
@@ -44,6 +44,7 @@ const (
        PktTypeTrns    PktType = iota
        PktTypeExecFat PktType = iota
        PktTypeArea    PktType = iota
+       PktTypeACK     PktType = iota
 
        MaxPathSize = 1<<8 - 1
 
@@ -249,12 +250,14 @@ func PktEncWrite(
                return
        }
 
-       sharedKey := new([32]byte)
-       curve25519.ScalarMult(sharedKey, prv, their.ExchPub)
+       sharedKey, err := curve25519.X25519(prv[:], their.ExchPub[:])
+       if err != nil {
+               return
+       }
        keyFull := make([]byte, chacha20poly1305.KeySize)
        keySize := make([]byte, chacha20poly1305.KeySize)
-       blake3.DeriveKey(keyFull, DeriveKeyFullCtx, sharedKey[:])
-       blake3.DeriveKey(keySize, DeriveKeySizeCtx, sharedKey[:])
+       blake3.DeriveKey(keyFull, DeriveKeyFullCtx, sharedKey)
+       blake3.DeriveKey(keySize, DeriveKeySizeCtx, sharedKey)
        aeadFull, err := chacha20poly1305.New(keyFull)
        if err != nil {
                return
@@ -402,8 +405,11 @@ func PktEncRead(
        }
        ad := blake3.Sum256(tbsRaw)
        if sharedKeyCached == nil {
-               key := new([32]byte)
-               curve25519.ScalarMult(key, our.ExchPrv, &pktEnc.ExchPub)
+               var key []byte
+               key, err = curve25519.X25519(our.ExchPrv[:], pktEnc.ExchPub[:])
+               if err != nil {
+                       return
+               }
                sharedKey = key[:]
        } else {
                sharedKey = sharedKeyCached
@@ -513,7 +519,7 @@ FullRead:
                if err != nil {
                        panic(err)
                }
-               if bytes.Compare(ct[:n], pt[:n]) != 0 {
+               if !bytes.Equal(ct[:n], pt[:n]) {
                        err = errors.New("wrong pad value")
                        return
                }