Security News
PyPI’s New Archival Feature Closes a Major Security Gap
PyPI now allows maintainers to archive projects, improving security and helping users make informed decisions about their dependencies.
@emartech/easy-crypto
Advanced tools
Provides simple wrappers around Node's crypto implementation. The library provides two interfaces: simple and advanced. Simple mode is designed for ease-of-use and advanced mode provides some performance benefits in certain use-cases. See below for more details.
All the underlying crypto operations are the same.
To get started just require the lib and create an instance right away.
const crypto = require('crypto');
const ecrypto = require('@emartech/easy-crypto')();
const password = crypto.randomBytes(24).toString('hex');
const randomData = crypto.randomBytes(1024).toString('hex');
async function exampleAsyncFunction() {
const encrypted = await ecrypto.encrypt(password, randomData);
const decrypted = await ecrypto.decrypt(password, encrypted);
randomData === decrypted; //true
}
Key derivation is a resource heavy process. The simple interface abstracts this away and forces you to recompute the key before each encryption/decryption process.
This interface allows you to cache the result of the key derivation. This is required if you need to encrypt/decrypt multiple times with the same derived key. Caching the key saves you the time to have to recompute it before every encryption/decryption.
To get started just require the lib and create an instance right away.
const crypto = require('crypto');
const ecrypto = require('@emartech/easy-crypto')();
const password = crypto.randomBytes(24).toString('hex');
const randomData = [
crypto.randomBytes(1024).toString('hex'),
crypto.randomBytes(1024).toString('hex'),
crypto.randomBytes(1024).toString('hex')
];
async function example(password, data) {
const salt = await ecrypto.generateSalt();
const key = await ecrypto.generateKey(password, salt);
const encrypted = await Promise.all(
data.map(item => ecrypto.encryptWithKey(key, item))
);
const saltFromEncrypted = ecrypto.getSaltFromEncrypted(encrypted[0]);
const keyForDecryption = await ecrypto.generateKey(password, saltFromEncrypted);
const decrypted = await Promise.all(
encrypted.map(item => ecrypto.decryptWithKey(keyForDecryption, item))
);
return data.reduce((allValid, item, index) => {
return allValid && item === decrypted[index];
}, true);
}
example(password, randomData);
There aren't too many options you can change and that is on purpose. This small wrapper library is secure by default. You can change two configurations: passwordSaltSize
, iterationCount
by passing them to the initialization function as follows:
let ecrypto = require('easy-crypto')(12, 10000); // parameters are in order: passwordSaltSize, iterationCount
The default value for passwordSaltSize
is 12 bytes
, for iterationCount
it is 10k iterations
.
passwordSaltSize
The size of the random data used to generate the encryption key. This value is in bytes
.
iterationCount
The iteration count used to generate the encryption key.
password
, plaintext
) -> ciphertext
password
should be any normal string. It will be used to generate the encryption key. plaintext
must be utf-8
encoded string. It will be "converted" to bytes
and those will be used for the cryptographic operations. The output of this operations is base64
encoded buffers. This will be used as the input of the decrypt
operation. This return value is a Promise
.
password
, ciphertext
) -> plaintext
password
should be any normal string. It will be used to generate the encryption key. ciphertext
must be the output of the encrypt
method. The library is not compatible with any other encryption library out of the box! The output of this operation is the original utf-8
encoded string. This return value is a Promise
.
key
, plaintext
) -> ciphertext
key
is an object returned by generateKey
. plaintext
must be utf-8
encoded string. It will be "converted" to bytes
and those will be used for the cryptographic operations. The output of this operations is base64
encoded buffers. This will be used as the input of the decryptWithKey
operation. This return value is a Promise
.
key
, ciphertext
) -> plaintext
key
is an object returned by generateKey
. ciphertext
must be the output of the encrypt
method. The library is not compatible with any other encryption library out of the box! The output of this operation is the original utf-8
encoded string. This return value is a Promise
.
password
, salt
) -> key
password
should be any normal string. It will be used to generate the encryption key. salt
is the buffer returned by generateSalt
or getSaltFromEncrypted
. These values will be used to derive a key
.
salt
Generates a random buffer of passwordSaltSize
bytes. Returns a Promise
which resolves to a Buffer
.
ciphertext
) -> salt
Extracts the salt
used for deriving the key
which can be used to decrypt the ciphertext
. Returns a Buffer
.
The library is only a thin wrapper of node's own crypto
module. It uses well known and battle tested encryption techniques. It provides a convenient wrapper around these functions, taking away the details of using encryption correctly. Feel free to explore the source!
passwordSaltSize
random bytes
are used to create the 256 bit
long encryption key from the password
using pbkdf2
and the given iteration count
plaintext
is encrypted using aes-256-gcm
with the generated key and a 12 bytes
long random initialization vector
, this operation also yields a 16 bytes
long authentication tag
, which can be used to verify the encrypted data's integritypasswordSalt bytes
, initialization vector bytes
, ciphertext bytes
, authentication tag bytes
base64
and returns itbase64
input to bytespasswordSalt bytes
, initialization vector bytes
, ciphertext bytes
, authentication tag bytes
passwordSalt bytes
and the password
are used to generate the 256 bit
long encryption key using pbkdf2
and the given iteration count
ciphertext bytes
are decrypted using aes-256-gcm
with the generated key the initialization vector bytes
. During encryption the integrity of the date is also verified using the authentication tag bytes
utf-8
and returns itPlease find us, we would love your feedback!
FAQs
Provides simple wrappers around Node's crypto implementation.
The npm package @emartech/easy-crypto receives a total of 229 weekly downloads. As such, @emartech/easy-crypto popularity was classified as not popular.
We found that @emartech/easy-crypto demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 153 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
PyPI now allows maintainers to archive projects, improving security and helping users make informed decisions about their dependencies.
Research
Security News
Malicious npm package postcss-optimizer delivers BeaverTail malware, targeting developer systems; similarities to past campaigns suggest a North Korean connection.
Security News
CISA's KEV data is now on GitHub, offering easier access, API integration, commit history tracking, and automated updates for security teams and researchers.