Git Product home page Git Product logo

node-mceliece-nist's Introduction

mceliece-nist

This package provides Node.js bindings for the reference implementation that is part of the NIST submission by Bernstein et al.

This version is based on the round-4 submission mceliece-20221023. See deps/mceliece.

Installation

Installation should work as usual:

npm i mceliece-nist

Example

const { McEliece } = require('mceliece-nist');

const kem = new McEliece('mceliece8192128');
const { publicKey, privateKey } = kem.keypair();

const { key, encryptedKey } = kem.generateKey(publicKey);
console.log(`Bob is using the key ${key.toString('hex')}`);

const receivedKey = kem.decryptKey(privateKey, encryptedKey);
console.log(`Alice is using the key ${receivedKey.toString('hex')}`);

API

The package exports a single class, McEliece.

Class McEliece

new McEliece(algorithm)

Creates a new instance using the specified algorithm. algorithm must be one of the values contained in McEliece.supportedAlgorithms.

McEliece.supportedAlgorithms

This static field is an array of all supported algorithms.

instance.keySize

The (maximum) key size in bytes that this instance can encapsulate.

instance.encryptedKeySize

The size of the encapsulated key in bytes.

instance.publicKeySize

The size of the public key in bytes.

instance.privateKeySize

The size of the private key in bytes.

instance.keypair([callback])

Creates and returns a new key pair { publicKey, privateKey }. Both keys will be returned as Buffers.

If callback is a function, keypair immediately returns undefined and calls callback(err, { publicKey, privateKey }) as soon as a new keypair has been generated.

instance.generateKey(publicKey)

Generates a new symmetric key and encrypts it using the given publicKey. Returns { key, encryptedKey }, both objects will be Buffers.

instance.decryptKey(privateKey, encryptedKey[, callback])

Decrypts the encryptedKey that was returned by instance.generateKey(publicKey) and returns the decrypted key as a Buffer.

If callback is a function, decryptKey immediately returns undefined and calls callback(err, key) as soon as the key has been decrypted.

License

This project is distributed under the ISC license.

node-mceliece-nist's People

Contributors

tniessen avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

node-mceliece-nist's Issues

Encrypt/Decrypt Content

Is this due to the strange names of the functions or is there no function for encrypting and decrypting a buffer with secret content? I have skimmed the code and see something with decryptKey, which suggests that the key is decrypted?

Napi::ObjectWrap<McEliece>::InstanceMethod("keypair", &McEliece::Keypair),
      Napi::ObjectWrap<McEliece>::InstanceMethod("generateKey", &McEliece::GenerateKey),
      Napi::ObjectWrap<McEliece>::InstanceMethod("decryptKey", &McEliece::DecryptKey),
      Napi::ObjectWrap<McEliece>::InstanceAccessor("keySize", &McEliece::GetKeySize, nullptr),
      Napi::ObjectWrap<McEliece>::InstanceAccessor("encryptedKeySize", &McEliece::GetEncryptedKeySize, nullptr),
      Napi::ObjectWrap<McEliece>::InstanceAccessor("publicKeySize", &McEliece::GetPublicKeySize, nullptr),
      Napi::ObjectWrap<McEliece>::InstanceAccessor("privateKeySize", &McEliece::GetPrivateKeySize, nullptr)

Normally you load/generate a key pair (private/public key). Then you encrypt something with the public key and the person who receives the message decrypts it with the private key.

I would have expected functions like this:

  • loadKeyPair
  • saveKeyPair
  • genKeyPair
  • encrypt
  • decrypt

Maybe you can clarify this or provide a more precise example with "Hello World" as the secret message.

const content = 'Hello World';
.... ?

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.