11cb0ef41Sopenharmony_ci'use strict'; 21cb0ef41Sopenharmony_ci 31cb0ef41Sopenharmony_ciconst common = require('../common'); 41cb0ef41Sopenharmony_ciif (!common.hasCrypto) 51cb0ef41Sopenharmony_ci common.skip('missing crypto'); 61cb0ef41Sopenharmony_ci 71cb0ef41Sopenharmony_ciconst { 81cb0ef41Sopenharmony_ci getCiphers, 91cb0ef41Sopenharmony_ci getCipherInfo 101cb0ef41Sopenharmony_ci} = require('crypto'); 111cb0ef41Sopenharmony_ci 121cb0ef41Sopenharmony_ciconst assert = require('assert'); 131cb0ef41Sopenharmony_ci 141cb0ef41Sopenharmony_ciconst ciphers = getCiphers(); 151cb0ef41Sopenharmony_ci 161cb0ef41Sopenharmony_ciassert.strictEqual(getCipherInfo(-1), undefined); 171cb0ef41Sopenharmony_ciassert.strictEqual(getCipherInfo('cipher that does not exist'), undefined); 181cb0ef41Sopenharmony_ci 191cb0ef41Sopenharmony_ciciphers.forEach((cipher) => { 201cb0ef41Sopenharmony_ci const info = getCipherInfo(cipher); 211cb0ef41Sopenharmony_ci assert(info); 221cb0ef41Sopenharmony_ci const info2 = getCipherInfo(info.nid); 231cb0ef41Sopenharmony_ci assert.deepStrictEqual(info, info2); 241cb0ef41Sopenharmony_ci}); 251cb0ef41Sopenharmony_ci 261cb0ef41Sopenharmony_ciconst info = getCipherInfo('aes-128-cbc'); 271cb0ef41Sopenharmony_ciassert.strictEqual(info.name, 'aes-128-cbc'); 281cb0ef41Sopenharmony_ciassert.strictEqual(info.nid, 419); 291cb0ef41Sopenharmony_ciassert.strictEqual(info.blockSize, 16); 301cb0ef41Sopenharmony_ciassert.strictEqual(info.ivLength, 16); 311cb0ef41Sopenharmony_ciassert.strictEqual(info.keyLength, 16); 321cb0ef41Sopenharmony_ciassert.strictEqual(info.mode, 'cbc'); 331cb0ef41Sopenharmony_ci 341cb0ef41Sopenharmony_ci[null, undefined, [], {}].forEach((arg) => { 351cb0ef41Sopenharmony_ci assert.throws(() => getCipherInfo(arg), { 361cb0ef41Sopenharmony_ci code: 'ERR_INVALID_ARG_TYPE' 371cb0ef41Sopenharmony_ci }); 381cb0ef41Sopenharmony_ci}); 391cb0ef41Sopenharmony_ci 401cb0ef41Sopenharmony_ci[null, '', 1, true].forEach((options) => { 411cb0ef41Sopenharmony_ci assert.throws( 421cb0ef41Sopenharmony_ci () => getCipherInfo('aes-192-cbc', options), { 431cb0ef41Sopenharmony_ci code: 'ERR_INVALID_ARG_TYPE' 441cb0ef41Sopenharmony_ci }); 451cb0ef41Sopenharmony_ci}); 461cb0ef41Sopenharmony_ci 471cb0ef41Sopenharmony_ci[null, '', {}, [], true].forEach((len) => { 481cb0ef41Sopenharmony_ci assert.throws( 491cb0ef41Sopenharmony_ci () => getCipherInfo('aes-192-cbc', { keyLength: len }), { 501cb0ef41Sopenharmony_ci code: 'ERR_INVALID_ARG_TYPE' 511cb0ef41Sopenharmony_ci }); 521cb0ef41Sopenharmony_ci assert.throws( 531cb0ef41Sopenharmony_ci () => getCipherInfo('aes-192-cbc', { ivLength: len }), { 541cb0ef41Sopenharmony_ci code: 'ERR_INVALID_ARG_TYPE' 551cb0ef41Sopenharmony_ci }); 561cb0ef41Sopenharmony_ci}); 571cb0ef41Sopenharmony_ci 581cb0ef41Sopenharmony_ciassert(!getCipherInfo('aes-128-cbc', { keyLength: 12 })); 591cb0ef41Sopenharmony_ciassert(getCipherInfo('aes-128-cbc', { keyLength: 16 })); 601cb0ef41Sopenharmony_ciassert(!getCipherInfo('aes-128-cbc', { ivLength: 12 })); 611cb0ef41Sopenharmony_ciassert(getCipherInfo('aes-128-cbc', { ivLength: 16 })); 621cb0ef41Sopenharmony_ci 631cb0ef41Sopenharmony_ciassert(!getCipherInfo('aes-128-ccm', { ivLength: 1 })); 641cb0ef41Sopenharmony_ciassert(!getCipherInfo('aes-128-ccm', { ivLength: 14 })); 651cb0ef41Sopenharmony_cifor (let n = 7; n <= 13; n++) 661cb0ef41Sopenharmony_ci assert(getCipherInfo('aes-128-ccm', { ivLength: n })); 671cb0ef41Sopenharmony_ci 681cb0ef41Sopenharmony_ciassert(!getCipherInfo('aes-128-ocb', { ivLength: 16 })); 691cb0ef41Sopenharmony_cifor (let n = 1; n < 16; n++) 701cb0ef41Sopenharmony_ci assert(getCipherInfo('aes-128-ocb', { ivLength: n })); 71