package node import "golang.org/x/crypto/nacl/box" // Encrypting the packet will also set the header's DataSize field. func encryptPacket(h *header, sharedKey, data, out []byte) []byte { h.DataSize = uint16(len(data) + box.Overhead) out = out[:h.DataSize+headerSize] h.Marshal(out) box.SealAfterPrecomputation(out[headerSize:headerSize], data, (*[24]byte)(out[:headerSize]), (*[32]byte)(sharedKey)) return out } func decryptPacket(sharedKey, packetAndHeader, out []byte) (decrypted []byte, ok bool) { return box.OpenAfterPrecomputation( out[:0], packetAndHeader[headerSize:], (*[24]byte)(packetAndHeader[:headerSize]), (*[32]byte)(sharedKey)) } func computeSharedKey(peerPubKey, privKey []byte) []byte { shared := [32]byte{} box.Precompute(&shared, (*[32]byte)(peerPubKey), (*[32]byte)(privKey)) return shared[:] }