A simple Javascript wrapper for Libsodiumjs
A simple Javascript class making Libsodium easier to use.
See it in action here: https://jakcodex.github.io/seasalt/seasalt.html
You can find a full reference guide available in the docs.
Utilizes the XCHACHA20-POLY1305-IETF 2-way Cipher
let seasalt = new SeaSalt({
passphrase: 'a3a44974a290878ad341befe2b96dc561d7692e02ab39c7bef26c67f37a5f46e'
});
let ciphertext = seasalt.encrypt('test');
let decrypted = seasalt.decrypt(ciphertext);
// or
let seasalt = new SeaSalt;
let original = 'test';
let ciphertext = seasalt.encrypt(
original,
'a3a44974a290878ad341befe2b96dc561d7692e02ab39c7bef26c67f37a5f46e',
'xchacha'
);
let decrypted = seasalt.decrypt(
ciphertext,
'a3a44974a290878ad341befe2b96dc561d7692e02ab39c7bef26c67f37a5f46e',
'xchacha'
);
// or
let aead = new SeaSalt_AEAD_XChacha;
let original = 'test';
let ciphertext = aead.encrypt(
original,
'a3a44974a290878ad341befe2b96dc561d7692e02ab39c7bef26c67f37a5f46e'
);
let decrypted = aead.decrypt(
ciphertext,
'a3a44974a290878ad341befe2b96dc561d7692e02ab39c7bef26c67f37a5f46e'
);
// or
let original = 'test';
let k1 = new SeaSalt_AEAD_XChacha(
test,
'a3a44974a290878ad341befe2b96dc561d7692e02ab39c7bef26c67f37a5f46e'
);
let decrypted = k1.decrypt(
k1.ciphertext,
'a3a44974a290878ad341befe2b96dc561d7692e02ab39c7bef26c67f37a5f46e'
);
Create a box with a secret item that can be repackaged and used in encryption and decryption.
Attempts to convert any supplied secret item to text. If no item is provided it generates a random secret key.
When used in AEAD encryption, the secret box is secured with the user’s password and contains the actual encryption key used on data.
let seasalt = new SeaSalt;
let userPassword = 'this is an AMAZING! password :) 4';
let box = new SeaSalt_AEAD_SecretBox(userPassword);
let k1 = new SeaSalt_AEAD_XChacha('My secret message', userPassword, box);
let decrypted = k1.decrypt(
k1.ciphertext,
userPassword,
box
);
Changing the user password on a box is easy. If repackaging fails, the original box is returned.
let newPassword = 'IKShkhsfh(@#08us0dSklhgfdksghbf3';
let newbox = (new SeaSalt).box_repackage(box, userPassword, newPassword);
let decrypted2 = k1.decrypt(
k1.ciphertext,
newPassword,
newbox
);
Create and manage one or more encryption keys using a fully featured keychain. Provides access to both direct string encryption as well as a fully encrypted localStorage API.
This class is not interfaced in SeaSalt_Common because by default it sets up a stored configuration.
Check out the detailed docs for more information.
Test the strength of a supplied password against basic user-defined requirements.
let seasalt = new SeaSalt({
minimumEntropy: 8,
minimumKeyLength: 8,
minimumStrength: 2
});
strength = seasalt.tools.passwordStrength('test8885'); // returns 0
strength = seasalt.tools.passwordStrength('testapple8885'); // returns 2
strength = seasalt.tools.passwordStrength('testApple8885'); // returns 3
strength = seasalt.tools.passwordStrength('testApp!e8885'); // returns 4
// or
let tools = new SeaSalt_Tools({
minimumEntropy: 8,
minimumKeyLength: 8,
minimumStrength: 2
});
strength = tools.passwordStrength('test8885'); // returns 0
strength = tools.passwordStrength('testapple8885'); // returns 2
strength = tools.passwordStrength('testApple8885'); // returns 3
strength = tools.passwordStrength('testApp!e8885'); // returns 4
Supports Argon2 and SCrypt.
let seasalt = new SeaSalt;
let password = 'test'
let hash = seasalt.pwhash_create(password, 'normal', 'argon2');
let verify = seasalt.pwhash_verify(hash, password);
// or
let pwhash = new SeaSalt_PWHash_Argon2;
let password = 'test';
let hash = pwhash.create(password);
let verify = pwhash.verify(hash, password);
// or
let pwhash = new SeaSalt_PWHash_SCrypt;
/*...*/
Supports SHA256 and SHA512.
let seasate = new SeaSalt;
let string = 'test'
let hash = seasalt.hash.sha256(string);
// or
let tools = new SeaSalt_Hashing;
let string = 'test';
let hash = tools.sha256(string);
// or
let string = 'test';
let hash = new SeaSalt_Hashing(string, 'sha512');
You can set the encryption key in advanced by passing it along at runtime:
let seasalt = new SeaSalt({
algorithm: 'xchacha',
secret: 'changeme3xg4#',
pwhash: 'argon2',
minimumEntropy: 1,
minimumKeyLength: 1,
minimumStrength: 0
});
Libsodium supports more than just XChaCha20-Poly1305; however, the Javascript library does not support AES-256-GCM.