rsa-proxy-reencrypt

0.0.2 • Public • Published

rsa-proxy-reencrypt

Build Status

Proxy Re-encryption library for Javascript using RSA cryptography

Introduction

This library is based on the suggested implementation in Section 4.3, Dodis, Y. and Ivan, A. 2003. Proxy cryptography revisited. In Proceedings of the Tenth Network and Distributed System Security Symposium..

This package is intended as native Javascript implementation which allows the following functionality:

  • Encrypting data*
  • Decrypting data**
  • Generating Re-encryption keys***
  • Re-encrypting data***

*Data must currently be a string **Data must have been encrypted using this scheme ***Not-yet implemented

Usage

Encrypting data

// Generate a key / Use existing key
import forge from 'node-forge'
const rsa = forge.pki.rsa
const key = rsa.generateKeyPair({ bits: 2048 })
 
// Get a data url
import { sync as DataURI } from 'datauri'
const data = DataURI('./some/file/path')
 
import RSAProxyReencrypt from 'rsa-proxy-reencrypt'
 
const encrypter = new RSAProxyReencrypt({ rsa: key })
 
const encrypted = encrypter.encrypt(data)

Decrypting data

// Use existing key
import forge from 'node-forge'
const rsa = forge.pki.rsa
const key = rsa.generateKeyPair({ bits: 2048 })
 
import RSAProxyReencrypt from 'rsa-proxy-reencrypt'
 
const encrypter = new RSAProxyReencrypt({ rsa: key })
 
// Assume encrypted is data previously encrypted by this scheme
const decrypted = encrypter.decrypt(encrypted)

Generating Re-encryption Keys

Proposed

Reencrypting data

Proposed

// Use existing key
import forge from 'node-forge'
const rsa = forge.pki.rsa
const ownerPrivateKey = rsa.generateKeyPair({ bits: 2048 }).privateKey
const userPublicKey = rsa.generateKeyPair({ bits: 2048}).publicKey
 
import RSAProxyReencrypt from 'rsa-proxy-reencrypt'
 
// ------------------------------------------------------------
// OWNER
// ------------------------------------------------------------
const encrypter = new RSAProxyReencrypt({
  rsa: { privateKey: ownerPrivateKey }
})
const { proxyKey, userKey } = encrypter.generateReencryptionKey(userPublicKey)
const ownerDecryptable = encrypter.encrypt('some data uri')
 
// ------------------------------------------------------------
// PROXY
// ------------------------------------------------------------
const proxyEncrypter = new RSAProxyReencrypt({
  rsa: { privateKey: proxyKey }
})
const userDecryptable = proxyEncrypter.decrypt(ownerDecryptable, { partial: true })
 
// ------------------------------------------------------------
// USER
// ------------------------------------------------------------
const userEncrypter = new RSAProxyReencrypt({
  rsa: { privateKey: userKey }
})
const message = proxyEncrypter.decrypt(userDecryptable)

Readme

Keywords

none

Package Sidebar

Install

npm i rsa-proxy-reencrypt

Weekly Downloads

2

Version

0.0.2

License

MIT

Last publish

Collaborators

  • freddielindsey