Giter Club home page Giter Club logo

ca-net's Introduction

ca-net

Simple TCP/IP Communication Lib

This lib creates a wrapper of sorts around the node.js's net.createServer and net.connect. It sets up encrypted communication between a client and server using DiffieHellman Key Exchange, and aes-256-cbc encryption from node.js's crypto. It also takes care of message compression and splitting.

##Install npm install ca-net

##API

ca-net.client(Host, Port, API, callback)

Wrapper for net.connect

Parameters

Host: string, Address of Server

Port: int, Port of Server

API: function, [optional] Called on('data') will pass arguments objCon,Buffer

callback: function, [optional] Called on('connect') will pass arguments net.Socket,objCon

 

ca-net.server(Port, API, callback)

Wrapper for net.createServer

Parameters

Port: int, Port to listen on

API: function, [optional] Called on('data') will pass arguments objCon,Buffer

callback: function, [optional] Called on('listening') will pass arguments net.Server,{'token':objCon}

 

objData

internal class

ca-net.objData.objData(objCon, data)

internal class

Parameters

objCon: objCon, internal class

data: Buffer, internal class

 

ca-net.objData.destruct()

internal function called at the tail of a recursive objData.combine, objData.unpack, objData.pack or when objData times out on objData.ttl timeout

 

ca-net.objData.combine(aObjData)

internal function called to join together data that has been split by objData.pack

Parameters

aObjData: objData, internal function called to join together data that has been split by objData.pack

 

ca-net.objData.send(data)

internal function Prepends data Buffer with length and writes it socket

Parameters

data: Buffer, Data to send

 

ca-net.objData.recieve()

internal function Processes Prepended length and split data Buffer if longer than length calls .unpack() on data creates new objData for remaining data and calls .recieve() on new objData

 

ca-net.objData.pack(c, z, s)

internal function processes objData.data before calling objData.send zip? > encrypt? > split?

Parameters

c: bool, [optional] toEncrypt flag

z: bool, [optional] toZip flag

s: bool, [optional] Special Flag used for pubKey syncing

 

ca-net.objData.unpack()

internal function process objData.data before passing objData.data to objData.objCon.API join? > decrypt? > unzip?

 

objCon

internal class

ca-net.objCon.objCon(con, token, address, API)

internal class

Parameters

con: net.Socket, internal class

token: string, [optional]

address: string, [optional]

API: function, [optional]

 

ca-net.objCon.API(c, r)

Handles encryption setup on initial connection

Parameters

c: objCon, Handles encryption setup on initial connection

r: Buffer, Handles encryption setup on initial connection

 

ca-net.objCon.destruct()

destroys objCon on time out

 

ca-net.objCon.keepAlive()

updates objCon.ttl to keep connection from self destructing

 

ca-net.objCon.send(msg, flg)

send messages to remote connection

Parameters

msg: Buffer, Message to send to remote connection

flg: bool, internal var for connection initilization

##TODO:

Coding:

  • create objCon class for uniformity betwen Cli & Serv
  • create objData class for simulated low level exchange
  • objData Send/Recieve
  • objData Zipping
  • objData Encryption
  • objData pubKey Sync
  • add functionality for externaly checking if objCon.destruct() has been called
  • change .onError() so that host script is informed

Testing / Doc:

  • Test Send / Recieve
  • Test Zipping
  • Test Encryption
  • Test Splitting
  • remove cb from source & testing
  • update testing w/ random data
  • Test Zip > Encrypt > Split > Send\Recieve > Join > Decrypt > Unzip
  • Test objCon
  • Doc API
  • Add Example Code

Eventualy:

  • Rewrite objData.pack() and objData.unpack() to use a fixed length binnary header instead of dirty string manipulation

####Disclaimer: This is a toy project, and should not be used for production grade anything ... use at your own risk

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.