aboutsummaryrefslogblamecommitdiffstats
path: root/library/sodium-plus/test/sodiumplus-pwhashstr-test.js
blob: 749d168f3d70038c497884a98015f2481f32affb (plain) (tree)




















































                                                                                              
const assert = require('assert');
const { describe, it } = require('mocha');
const { expect } = require('chai');
const { SodiumPlus } = require('../index');
const VERBOSE = false;

let sodium;

(async () => {
    if (!sodium) sodium = await SodiumPlus.auto();
    if (VERBOSE) {
        console.log({
            'libsodium-wrappers': sodium.isLibsodiumWrappers(),
            'sodium-native': sodium.isSodiumNative()
        });
    }
})();

describe('SodiumPlus', () => {
    it('SodiumPlus.crypto_pwhash_str', async function () {
        this.timeout(0);
        if (!sodium) sodium = await SodiumPlus.auto();
        let password = 'correct horse battery staple';
        let hashed = await sodium.crypto_pwhash_str(
            password,
            sodium.CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
            sodium.CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
        );
        assert(hashed);
        assert(await sodium.crypto_pwhash_str_verify(password, hashed));
        assert(await sodium.crypto_pwhash_str_verify('incorrect password', hashed) === false);

        let needs;
        needs = await sodium.crypto_pwhash_str_needs_rehash(
            hashed,
            sodium.CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
            sodium.CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
        );
        expect(needs).to.be.equals(false);
        needs = await sodium.crypto_pwhash_str_needs_rehash(
            hashed,
            sodium.CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE + 1,
            sodium.CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
        );
        expect(needs).to.be.equals(true);
        needs = await sodium.crypto_pwhash_str_needs_rehash(
            hashed,
            sodium.CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
            sodium.CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE << 1
        );
        expect(needs).to.be.equals(true);
    });
});