'use strict'; // This tests crypto.hash() works. const common = require('../common'); if (!common.hasCrypto) common.skip('missing crypto'); const assert = require('assert'); const crypto = require('crypto'); const fixtures = require('../common/fixtures'); const fs = require('fs'); // Test errors for invalid arguments. [undefined, null, true, 1, () => {}, {}].forEach((invalid) => { assert.throws(() => { crypto.hash(invalid, 'test'); }, { code: 'ERR_INVALID_ARG_TYPE' }); }); [undefined, null, true, 1, () => {}, {}].forEach((invalid) => { assert.throws(() => { crypto.hash('sha1', invalid); }, { code: 'ERR_INVALID_ARG_TYPE' }); }); [null, true, 1, () => {}, {}].forEach((invalid) => { assert.throws(() => { crypto.hash('sha1', 'test', invalid); }, { code: 'ERR_INVALID_ARG_TYPE' }); }); assert.throws(() => { crypto.hash('sha1', 'test', 'not an encoding'); }, { code: 'ERR_INVALID_ARG_VALUE' }); // Test that the output of crypto.hash() is the same as crypto.createHash(). const methods = crypto.getHashes(); const input = fs.readFileSync(fixtures.path('utf8_test_text.txt')); for (const method of methods) { for (const outputEncoding of ['buffer', 'hex', 'base64', undefined]) { const oldDigest = crypto.createHash(method).update(input).digest(outputEncoding || 'hex'); const digestFromBuffer = crypto.hash(method, input, outputEncoding); assert.deepStrictEqual(digestFromBuffer, oldDigest, `different result from ${method} with encoding ${outputEncoding}`); const digestFromString = crypto.hash(method, input.toString(), outputEncoding); assert.deepStrictEqual(digestFromString, oldDigest, `different result from ${method} with encoding ${outputEncoding}`); } }