rsa-proxy-reencrypt
v0.0.2
Published
Encryption and decryption algorithms with applications for proxy re-encryption
Downloads
12
Readme
rsa-proxy-reencrypt
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)