I've setup Scrypt and hashing - the KDF - works fine.

However, whenever I try to verifyKdf() I get an error.

return scryptNative.verifySync(args[0], args[1]); ^


at Object.verifyKdfSync (/home/arc/Desktop/scrypt-test/node_modules/scrypt/index.js:331:25)

My code to hash it.

// a promise chain...

.then(() => scrypt.kdf(newPassword, scryptParameters))
.then(hashedPassword => {

    user.hashedPassword = hashedPassword.toString('base64')

    resolve(store.save(user.id, user))


then to verify: (here it falls into the catch() and err simple contains "Error")

scrypt.verifyKdf(user.hashdPassword, enteredPassword)
    .then(result => {
            if (result) return resolve(user)
            else return reject('Wrong password')
     .catch(err => {
            console.log('scrypt verify failed: ', err)
            return reject('Internal Error')
Question author Arcs | Source



The Problem is that .toString('base64') is used. Although this in itself is not a problem, you have to revert it back to a buffer.

To fix it use new Buffer( /* Password */ , 'base64') and would look like this:

scrypt.verifyKdf(new Buffer(user.hasdPassword, 'base64'), password)

This solution would work as well when instead of base64 hex was used.

Answer author Arcs