otp-encryption-decryption-lib

0.3.1 • Public • Published

otp-encryption-decryption-lib

NPM version NPM downloads jSDelivr CDN tests MIT License

Library of small snippets, tools and helper-functions for encrypting and decrypting messages with OTPs - One-time pads.

Example-code

Will be core functionality together with nfc-json-transfer for creating otp-encryption-toy

Getting the script in your environment

CJS - CommonJS

const { textToPlaincode, plaincodeToText, createOnetimePad, nob, codebook, checkLength, encryptPlaincode, decryptEncryptedMsg } = require('otp-encryption-decryption-lib')

ESM - Ecmascript Modules

import { textToPlaincode, plaincodeToText, createOnetimePad, nob, codebook, checkLength, encryptPlaincode, decryptEncryptedMsg } from 'otp-encryption-decryption-lib'

Usage

index.mjs:

import { textToPlaincode, plaincodeToText, createOnetimePad, nob, codebook, checkLength, encryptPlaincode, decryptEncryptedMsg } from 'otp-encryption-decryption-lib'

// The message
const txt = 'Hello 👨‍👩‍👦‍👦🏳️‍🌈😀🇿🇼  world 123 æøå!'
console.log('\n\nInput:               ' + txt)

// ### Text to plaincode
const plaincodeConverted = textToPlaincode(txt, nob, codebook)
console.log('Plaincode:           ' + plaincodeConverted)

// ### Creating a one-time pad
const otp = createOnetimePad(96)
console.log('One-time pad:        ' + otp)

// ### Checking length of plaincode vs. one-time pad
const lengthObj = checkLength(plaincodeConverted, otp)
console.log('Length:              ' + JSON.stringify(lengthObj))

// ### Encrypting plaincode
const encryptedMsg = encryptPlaincode(plaincodeConverted, otp)
console.log('Encrypted plaincode: ' + encryptedMsg.join(''))

// ### Decrypting encrypted message
const decryptedPlaincode = decryptEncryptedMsg(encryptedMsg.join(''), otp)
console.log('Decrypted plaincode: ' + decryptedPlaincode.join(''))

// ### Plaincode to text - The message delivered!
const textConverted = plaincodeToText(decryptedPlaincode.join(''), nob, codebook)
console.log('Decrypted msg:       ' + textConverted + '\n\n')

When doing ESM-version of the library, run it with:

node --experimental-json-modules index.mjs

API

textToPlaincode

textToPlaincode(text, conversionLanguage, codebook)
// Returns plaincode string from text.

plaincodeToText

plaincodeToText(plaincode, conversionLanguage, codebook)
// Returns text string from plaincode string.

createOnetimePad

createOnetimePad(length)
// Return a one-time pad of desired length.

Language conversion tables and regexes

eng

eng.textRegex // regex pattern for converting english text, numbers and punctuation into single characters
eng.plaincodeRegex // regex pattern for converting english plaincode string into array of plaincodes
eng.table // unicode <-> plaincode conversion table for english

nob

nob.textRegex // regex pattern for converting norwegian text, numbers and punctuation into single characters
nob.plaincodeRegex // regex pattern for converting norwegian plaincode string into array of plaincodes
nob.table // unicode <-> plaincode conversion table for norwegian

codebook

codebook // conversion table for all (almost) unicode emojis <-> plaincode

checkLength

checkLength(plaincode, otp)
// returns { plaincodeLength: plaincodeLength, otpLength: otpLength, tooLong: tooLong }

Helper function to check if plaincode length (and thus your message length) is too long, and also show the user how close they are to exceed length of one-time pad.

encryptPlaincode

encryptPlaincode(plaincode, otp)
// Returns encrypted message as an array of numbers.

decryptEncryptedMsg

decryptEncryptedMsg(encryptedMsg, otp)
// Returns message as an array of characters.

Maintenance

If unicode emojis are updated (to i.e. v.16 from v.15)

cd scipts
node ./fetch-emojis.mjs && node ./create-emoji-regex.mjs && node ./create-emoji-codebook.mjs

Possible issue

Haven't found a unique way of numbering/addressing the unicode emojis that will work cross unicode emoji versions, so then stuff won't encrypt/decrypt properly if you use different versions of the library.

Package Sidebar

Install

npm i otp-encryption-decryption-lib

Weekly Downloads

6

Version

0.3.1

License

MIT

Unpacked Size

2.63 MB

Total Files

35

Last publish

Collaborators

  • eklem