fsec
is derived from forward-secrecy
forward-secrecy
is a simple implementation of the Axolotl key-ratcheting protocol written in Javascript. It uses NaCl (in this case, TweetNacl) for encryption, meaning sessions are secured with Curve25519 keys and Salsa20 encryption. which can be found @ https://github.com/alax/forward-secrecy
fsec
aims to become a fully contained, easy to read, test and expand, implementation of the omemo protocol.
current:
- 8-10 june 2017: forward-secrecy forked, built and tested
- 11 june 2017: reading axolotl/olm spec as well as further omemo protocol inspection to identify missing pieces
- encountered Error with node-machine-id package - see output: https://gist.github.com/Shokodemon/5148d0dafb27fa6427cbc28c52ee8416
+ must fix package before proceeding so that we can grab a deviceId for omemo
+ 18:00 forking, fixing and sending a pull request.
+ 20:00 issue fixed, sent a pull request to author.
upcoming
- 11-18 june 2017: fsec gets prepared to implement omemo by creating a skeleton of missing functions between axolotl/olm and omemo.
future 1 19 june onwards
- implementing said functions
future 2
- implementing tests for the added functions
future 3
- adding xmpp layer, look into the possibility of protocol modularity to see if an omemo session can benefit something else other than xmpp.
august 30th.
- solicit auditing to make sure fsec is safe for critical applications
- module maintenance
- move from pbkdf2-sha256 to pbkdf2 node module in order to use sha512 hmac.
- maintenance as open source project
- maintenance as a crypto pedagogical resource
report ---> ModuleReport {
methodAggregate:
AggregateMethodReport {
methodAggregate: undefined,
cyclomatic: 52,
cyclomaticDensity: 22.222,
halstead:
HalsteadData {
bugs: 4.827,
difficulty: 86.821,
effort: 1257319.965,
length: 1891,
time: 69851.109,
vocabulary: 202,
volume: 14481.678,
operands: [Object],
operators: [Object] },
params: 34,
sloc: { logical: 234, physical: 824 } },
settings:
{ commonjs: false,
dependencyResolver: undefined,
forin: false,
logicalor: true,
switchcase: true,
trycatch: false,
newmi: false },
classes:
[ ClassReport {
methodAggregate: [Object],
errors: [],
lineEnd: 824,
lineStart: 4,
methods: [Object],
methodAverage: [Object],
name: '<anonymous>',
maintainability: 110.608 } ],
dependencies:
[ { line: 1, path: 'tweetnacl', type: 'esm' },
{ line: 2, path: './utils', type: 'esm' } ],
errors: [],
filePath: undefined,
lineEnd: 824,
lineStart: 1,
maintainability: 110.608,
methods: [],
methodAverage:
MethodAverage {
cyclomatic: 2.417,
cyclomaticDensity: 45.861,
halstead:
HalsteadAverage {
bugs: 0.091,
difficulty: 6.356,
effort: 6330.063,
length: 50.972,
time: 351.67,
vocabulary: 17.417,
volume: 273.224,
operands: [Object],
operators: [Object] },
params: 0.944,
sloc: { logical: 6.472, physical: 28.5 } },
srcPath: undefined,
srcPathAlias: undefined,
module: 'src/index.js',
aggregate:
{ complexity:
{ methodAggregate: undefined,
cyclomatic: 52,
cyclomaticDensity: 22.222,
halstead: [Object],
params: 34,
sloc: [Object] } },
functions: [] }