diff --git a/docs/ciphers/jest-html-reporters-attach/test-report/result.js b/docs/ciphers/jest-html-reporters-attach/test-report/result.js
index da2436c..b843a89 100644
--- a/docs/ciphers/jest-html-reporters-attach/test-report/result.js
+++ b/docs/ciphers/jest-html-reporters-attach/test-report/result.js
@@ -1 +1 @@
-window.jest_html_reporters_callback__({"numFailedTestSuites":1,"numFailedTests":2,"numPassedTestSuites":2,"numPassedTests":28,"numPendingTestSuites":0,"numPendingTests":0,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":3,"numTotalTests":30,"startTime":1707996202647,"success":false,"testResults":[{"numFailingTests":0,"numPassingTests":5,"numPendingTests":0,"numTodoTests":0,"perfStats":{"end":1707996212488,"runtime":8999,"slow":true,"start":1707996203489},"testFilePath":"/encrypted-uri/packages/ciphers/aes.test.ts","failureMessage":null,"testResults":[{"ancestorTitles":["success flow aes"],"duration":85,"failureMessages":[],"fullName":"success flow aes cbc","status":"passed","title":"cbc"},{"ancestorTitles":["success flow aes"],"duration":11,"failureMessages":[],"fullName":"success flow aes ctr","status":"passed","title":"ctr"},{"ancestorTitles":["success flow aes"],"duration":16,"failureMessages":[],"fullName":"success flow aes ecb","status":"passed","title":"ecb"},{"ancestorTitles":["success flow aes"],"duration":16,"failureMessages":[],"fullName":"success flow aes gcm","status":"passed","title":"gcm"},{"ancestorTitles":["success flow aes"],"duration":15,"failureMessages":[],"fullName":"success flow aes siv","status":"passed","title":"siv"}]},{"numFailingTests":0,"numPassingTests":12,"numPendingTests":0,"numTodoTests":0,"perfStats":{"end":1707996212777,"runtime":9334,"slow":true,"start":1707996203443},"testFilePath":"/encrypted-uri/packages/ciphers/kdf.test.ts","failureMessage":null,"testResults":[{"ancestorTitles":["kdf success flow"],"duration":61,"failureMessages":[],"fullName":"kdf success flow [2] kdf include all parameters including default","status":"passed","title":"[2] kdf include all parameters including default"},{"ancestorTitles":["kdf success flow"],"duration":65,"failureMessages":[],"fullName":"kdf success flow [3] kdf with hasher sha512","status":"passed","title":"[3] kdf with hasher sha512"},{"ancestorTitles":["kdf success flow"],"duration":98,"failureMessages":[],"fullName":"kdf success flow [4] kdf with hasher sha512_256","status":"passed","title":"[4] kdf with hasher sha512_256"},{"ancestorTitles":["kdf success flow"],"duration":111,"failureMessages":[],"fullName":"kdf success flow [5] kdf with hasher sha384","status":"passed","title":"[5] kdf with hasher sha384"},{"ancestorTitles":["kdf success flow"],"duration":93,"failureMessages":[],"fullName":"kdf success flow [6] kdf with hasher sha3_512","status":"passed","title":"[6] kdf with hasher sha3_512"},{"ancestorTitles":["kdf success flow"],"duration":29,"failureMessages":[],"fullName":"kdf success flow [7] kdf with hasher sha3_384","status":"passed","title":"[7] kdf with hasher sha3_384"},{"ancestorTitles":["kdf success flow"],"duration":30,"failureMessages":[],"fullName":"kdf success flow [8] kdf with hasher sha3_256","status":"passed","title":"[8] kdf with hasher sha3_256"},{"ancestorTitles":["kdf success flow"],"duration":40,"failureMessages":[],"fullName":"kdf success flow [9] kdf with hasher sha3_224","status":"passed","title":"[9] kdf with hasher sha3_224"},{"ancestorTitles":["kdf success flow"],"duration":16,"failureMessages":[],"fullName":"kdf success flow [10] kdf with hasher keccak_512","status":"passed","title":"[10] kdf with hasher keccak_512"},{"ancestorTitles":["kdf success flow"],"duration":14,"failureMessages":[],"fullName":"kdf success flow [11] kdf with hasher keccak_384","status":"passed","title":"[11] kdf with hasher keccak_384"},{"ancestorTitles":["kdf success flow"],"duration":14,"failureMessages":[],"fullName":"kdf success flow [12] kdf with hasher keccak_256","status":"passed","title":"[12] kdf with hasher keccak_256"},{"ancestorTitles":["kdf success flow"],"duration":22,"failureMessages":[],"fullName":"kdf success flow [13] kdf with hasher keccak_224","status":"passed","title":"[13] kdf with hasher keccak_224"}]},{"numFailingTests":2,"numPassingTests":11,"numPendingTests":0,"numTodoTests":0,"perfStats":{"end":1707996218178,"runtime":14694,"slow":true,"start":1707996203484},"testFilePath":"/encrypted-uri/packages/ciphers/params.test.ts","failureMessage":"\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mhashing customization › [12] kdf with hasher keccak_256\u001b[39m\u001b[22m\n\n \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoEqual\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // deep equality\u001b[22m\n\n Expected: \u001b[32mundefined\u001b[39m\n Received: \u001b[31m\"aes/cbc\"\u001b[39m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 228 |\u001b[39m \u001b[36mconst\u001b[39m parser \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mEncryptedURIParser\u001b[39m(encoded)\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 229 |\u001b[39m expect(parser\u001b[33m.\u001b[39mdecoded\u001b[33m.\u001b[39mparams\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mkdf)\u001b[33m.\u001b[39mtoEqual(undefined)\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m \u001b[0m\u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 230 |\u001b[39m expect(parser\u001b[33m.\u001b[39mdecoded\u001b[33m.\u001b[39malgorithm)\u001b[33m.\u001b[39mtoEqual(undefined)\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 231 |\u001b[39m expect(parser\u001b[33m.\u001b[39mdecoded\u001b[33m.\u001b[39mparams\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mc)\u001b[33m.\u001b[39mtoEqual(undefined)\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 232 |\u001b[39m expect(parser\u001b[33m.\u001b[39mdecoded\u001b[33m.\u001b[39mparams\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mdklen)\u001b[33m.\u001b[39mtoEqual(undefined)\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 233 |\u001b[39m expect(parser\u001b[33m.\u001b[39mdecoded\u001b[33m.\u001b[39mparams\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mh)\u001b[33m.\u001b[39mtoEqual(\u001b[32m'keccak_256'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36mparams.test.ts\u001b[39m\u001b[0m\u001b[2m:230:38)\u001b[22m\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[22m\u001b[1mchecking if params are correctly encoded › [2] kdf include all parameters including default\u001b[39m\u001b[22m\n\n \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoEqual\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // deep equality\u001b[22m\n\n Expected: \u001b[32m\"pbkdf2\"\u001b[39m\n Received: \u001b[31mundefined\u001b[39m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 285 |\u001b[39m \u001b[36mconst\u001b[39m parser \u001b[33m=\u001b[39m \u001b[36mnew\u001b[39m \u001b[33mEncryptedURIParser\u001b[39m(encoded)\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 286 |\u001b[39m expect(parser\u001b[33m.\u001b[39mdecoded\u001b[33m.\u001b[39malgorithm)\u001b[33m.\u001b[39mtoEqual(\u001b[32m'aes/cbc'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m \u001b[0m\u001b[31m\u001b[1m>\u001b[22m\u001b[2m\u001b[39m\u001b[90m 287 |\u001b[39m expect(parser\u001b[33m.\u001b[39mdecoded\u001b[33m.\u001b[39mparams\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mkdf)\u001b[33m.\u001b[39mtoEqual(\u001b[32m'pbkdf2'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m |\u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[2m\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 288 |\u001b[39m expect(parser\u001b[33m.\u001b[39mdecoded\u001b[33m.\u001b[39mparams\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mc)\u001b[33m.\u001b[39mtoEqual(\u001b[32m'100'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 289 |\u001b[39m expect(parser\u001b[33m.\u001b[39mdecoded\u001b[33m.\u001b[39mparams\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mdklen)\u001b[33m.\u001b[39mtoEqual(\u001b[32m'32'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m \u001b[0m \u001b[90m 290 |\u001b[39m expect(parser\u001b[33m.\u001b[39mdecoded\u001b[33m.\u001b[39mparams\u001b[33m?\u001b[39m\u001b[33m.\u001b[39mh)\u001b[33m.\u001b[39mtoEqual(\u001b[32m'sha256'\u001b[39m)\u001b[33m;\u001b[39m\u001b[0m\u001b[22m\n\u001b[2m\u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[22m\u001b[2m\u001b[0m\u001b[36mparams.test.ts\u001b[39m\u001b[0m\u001b[2m:287:40)\u001b[22m\u001b[2m\u001b[22m\n","testResults":[{"ancestorTitles":["hashing customization"],"duration":65,"failureMessages":[],"fullName":"hashing customization [3] kdf with hasher sha512","status":"passed","title":"[3] kdf with hasher sha512"},{"ancestorTitles":["hashing customization"],"duration":37,"failureMessages":[],"fullName":"hashing customization [4] kdf with hasher sha512_256","status":"passed","title":"[4] kdf with hasher sha512_256"},{"ancestorTitles":["hashing customization"],"duration":39,"failureMessages":[],"fullName":"hashing customization [5] kdf with hasher sha384","status":"passed","title":"[5] kdf with hasher sha384"},{"ancestorTitles":["hashing customization"],"duration":58,"failureMessages":[],"fullName":"hashing customization [6] kdf with hasher sha3_512","status":"passed","title":"[6] kdf with hasher sha3_512"},{"ancestorTitles":["hashing customization"],"duration":21,"failureMessages":[],"fullName":"hashing customization [7] kdf with hasher sha3_384","status":"passed","title":"[7] kdf with hasher sha3_384"},{"ancestorTitles":["hashing customization"],"duration":12,"failureMessages":[],"fullName":"hashing customization [8] kdf with hasher sha3_256","status":"passed","title":"[8] kdf with hasher sha3_256"},{"ancestorTitles":["hashing customization"],"duration":15,"failureMessages":[],"fullName":"hashing customization [9] kdf with hasher sha3_224","status":"passed","title":"[9] kdf with hasher sha3_224"},{"ancestorTitles":["hashing customization"],"duration":14,"failureMessages":[],"fullName":"hashing customization [10] kdf with hasher keccak_512","status":"passed","title":"[10] kdf with hasher keccak_512"},{"ancestorTitles":["hashing customization"],"duration":14,"failureMessages":[],"fullName":"hashing customization [11] kdf with hasher keccak_384","status":"passed","title":"[11] kdf with hasher keccak_384"},{"ancestorTitles":["hashing customization"],"duration":14,"failureMessages":["Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoEqual\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // deep equality\u001b[22m\n\nExpected: \u001b[32mundefined\u001b[39m\nReceived: \u001b[31m\"aes/cbc\"\u001b[39m\n at Object. (/encrypted-uri/packages/ciphers/params.test.ts:230:38)"],"fullName":"hashing customization [12] kdf with hasher keccak_256","status":"failed","title":"[12] kdf with hasher keccak_256"},{"ancestorTitles":["checking if params are correctly encoded"],"duration":4343,"failureMessages":[],"fullName":"checking if params are correctly encoded [1] overriding default values in decrypt","status":"passed","title":"[1] overriding default values in decrypt"},{"ancestorTitles":["checking if params are correctly encoded"],"duration":5,"failureMessages":["Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoEqual\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // deep equality\u001b[22m\n\nExpected: \u001b[32m\"pbkdf2\"\u001b[39m\nReceived: \u001b[31mundefined\u001b[39m\n at Object. (/encrypted-uri/packages/ciphers/params.test.ts:287:40)"],"fullName":"checking if params are correctly encoded [2] kdf include all parameters including default","status":"failed","title":"[2] kdf include all parameters including default"},{"ancestorTitles":["checking if params are correctly encoded"],"duration":3,"failureMessages":[],"fullName":"checking if params are correctly encoded [3] kdf with algorithm not set","status":"passed","title":"[3] kdf with algorithm not set"}]}],"config":{"bail":0,"changedFilesWithAncestor":false,"ci":false,"collectCoverage":false,"collectCoverageFrom":[],"coverageDirectory":"/encrypted-uri/packages/ciphers/coverage","coverageProvider":"babel","coverageReporters":["json","text","lcov","clover"],"detectLeaks":false,"detectOpenHandles":false,"errorOnDeprecated":false,"expand":false,"findRelatedTests":false,"forceExit":false,"json":false,"lastCommit":false,"listTests":false,"logHeapUsage":false,"maxConcurrency":5,"maxWorkers":7,"noStackTrace":false,"nonFlagArgs":[],"notify":false,"notifyMode":"failure-change","onlyChanged":false,"onlyFailures":false,"openHandlesTimeout":1000,"passWithNoTests":false,"projects":[],"reporters":[["default",{}],["/encrypted-uri/packages/ciphers/node_modules/jest-html-reporters/index.js",{"publicPath":"../../docs/ciphers","filename":"test-report.html","expand":true}]],"rootDir":"/encrypted-uri/packages/ciphers","runTestsByPath":false,"seed":-1306968625,"skipFilter":false,"snapshotFormat":{"escapeString":false,"printBasicPrototype":false},"testFailureExitCode":1,"testPathPattern":"","testSequencer":"/encrypted-uri/packages/ciphers/node_modules/@jest/test-sequencer/build/index.js","updateSnapshot":"new","useStderr":false,"watch":false,"watchAll":false,"watchman":true,"workerThreads":false},"endTime":1707996218276,"_reporterOptions":{"publicPath":"../../docs/ciphers","filename":"test-report.html","expand":true,"pageTitle":"","hideIcon":false,"testCommand":"","openReport":false,"failureMessageOnly":0,"enableMergeData":false,"dataMergeLevel":1,"inlineSource":false,"urlForTestFiles":"","darkTheme":false,"includeConsoleLog":false,"stripSkippedTest":false},"logInfoMapping":{},"attachInfos":{}})
\ No newline at end of file
+window.jest_html_reporters_callback__({"numFailedTestSuites":0,"numFailedTests":0,"numPassedTestSuites":3,"numPassedTests":30,"numPendingTestSuites":0,"numPendingTests":0,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":3,"numTotalTests":30,"startTime":1708023519178,"success":false,"testResults":[{"numFailingTests":0,"numPassingTests":5,"numPendingTests":0,"numTodoTests":0,"perfStats":{"end":1708023603897,"runtime":84422,"slow":true,"start":1708023519475},"testFilePath":"/encrypted-uri/packages/ciphers/aes.test.ts","failureMessage":null,"testResults":[{"ancestorTitles":["success flow aes"],"duration":1485,"failureMessages":[],"fullName":"success flow aes cbc","status":"passed","title":"cbc"},{"ancestorTitles":["success flow aes"],"duration":46,"failureMessages":[],"fullName":"success flow aes ctr","status":"passed","title":"ctr"},{"ancestorTitles":["success flow aes"],"duration":4,"failureMessages":[],"fullName":"success flow aes ecb","status":"passed","title":"ecb"},{"ancestorTitles":["success flow aes"],"duration":4,"failureMessages":[],"fullName":"success flow aes gcm","status":"passed","title":"gcm"},{"ancestorTitles":["success flow aes"],"duration":6,"failureMessages":[],"fullName":"success flow aes siv","status":"passed","title":"siv"}]},{"numFailingTests":0,"numPassingTests":12,"numPendingTests":0,"numTodoTests":0,"perfStats":{"end":1708023603960,"runtime":84467,"slow":true,"start":1708023519493},"testFilePath":"/encrypted-uri/packages/ciphers/kdf.test.ts","failureMessage":null,"testResults":[{"ancestorTitles":["kdf success flow"],"duration":1480,"failureMessages":[],"fullName":"kdf success flow [2] kdf include all parameters including default","status":"passed","title":"[2] kdf include all parameters including default"},{"ancestorTitles":["kdf success flow"],"duration":28,"failureMessages":[],"fullName":"kdf success flow [3] kdf with hasher sha512","status":"passed","title":"[3] kdf with hasher sha512"},{"ancestorTitles":["kdf success flow"],"duration":19,"failureMessages":[],"fullName":"kdf success flow [4] kdf with hasher sha512_256","status":"passed","title":"[4] kdf with hasher sha512_256"},{"ancestorTitles":["kdf success flow"],"duration":21,"failureMessages":[],"fullName":"kdf success flow [5] kdf with hasher sha384","status":"passed","title":"[5] kdf with hasher sha384"},{"ancestorTitles":["kdf success flow"],"duration":15,"failureMessages":[],"fullName":"kdf success flow [6] kdf with hasher sha3_512","status":"passed","title":"[6] kdf with hasher sha3_512"},{"ancestorTitles":["kdf success flow"],"duration":5,"failureMessages":[],"fullName":"kdf success flow [7] kdf with hasher sha3_384","status":"passed","title":"[7] kdf with hasher sha3_384"},{"ancestorTitles":["kdf success flow"],"duration":4,"failureMessages":[],"fullName":"kdf success flow [8] kdf with hasher sha3_256","status":"passed","title":"[8] kdf with hasher sha3_256"},{"ancestorTitles":["kdf success flow"],"duration":5,"failureMessages":[],"fullName":"kdf success flow [9] kdf with hasher sha3_224","status":"passed","title":"[9] kdf with hasher sha3_224"},{"ancestorTitles":["kdf success flow"],"duration":4,"failureMessages":[],"fullName":"kdf success flow [10] kdf with hasher keccak_512","status":"passed","title":"[10] kdf with hasher keccak_512"},{"ancestorTitles":["kdf success flow"],"duration":11,"failureMessages":[],"fullName":"kdf success flow [11] kdf with hasher keccak_384","status":"passed","title":"[11] kdf with hasher keccak_384"},{"ancestorTitles":["kdf success flow"],"duration":5,"failureMessages":[],"fullName":"kdf success flow [12] kdf with hasher keccak_256","status":"passed","title":"[12] kdf with hasher keccak_256"},{"ancestorTitles":["kdf success flow"],"duration":5,"failureMessages":[],"fullName":"kdf success flow [13] kdf with hasher keccak_224","status":"passed","title":"[13] kdf with hasher keccak_224"}]},{"numFailingTests":0,"numPassingTests":13,"numPendingTests":0,"numTodoTests":0,"perfStats":{"end":1708023605109,"runtime":85639,"slow":true,"start":1708023519470},"testFilePath":"/encrypted-uri/packages/ciphers/params.test.ts","failureMessage":null,"testResults":[{"ancestorTitles":["hashing customization"],"duration":1438,"failureMessages":[],"fullName":"hashing customization [3] kdf with hasher sha512","status":"passed","title":"[3] kdf with hasher sha512"},{"ancestorTitles":["hashing customization"],"duration":41,"failureMessages":[],"fullName":"hashing customization [4] kdf with hasher sha512_256","status":"passed","title":"[4] kdf with hasher sha512_256"},{"ancestorTitles":["hashing customization"],"duration":22,"failureMessages":[],"fullName":"hashing customization [5] kdf with hasher sha384","status":"passed","title":"[5] kdf with hasher sha384"},{"ancestorTitles":["hashing customization"],"duration":42,"failureMessages":[],"fullName":"hashing customization [6] kdf with hasher sha3_512","status":"passed","title":"[6] kdf with hasher sha3_512"},{"ancestorTitles":["hashing customization"],"duration":5,"failureMessages":[],"fullName":"hashing customization [7] kdf with hasher sha3_384","status":"passed","title":"[7] kdf with hasher sha3_384"},{"ancestorTitles":["hashing customization"],"duration":4,"failureMessages":[],"fullName":"hashing customization [8] kdf with hasher sha3_256","status":"passed","title":"[8] kdf with hasher sha3_256"},{"ancestorTitles":["hashing customization"],"duration":3,"failureMessages":[],"fullName":"hashing customization [9] kdf with hasher sha3_224","status":"passed","title":"[9] kdf with hasher sha3_224"},{"ancestorTitles":["hashing customization"],"duration":2,"failureMessages":[],"fullName":"hashing customization [10] kdf with hasher keccak_512","status":"passed","title":"[10] kdf with hasher keccak_512"},{"ancestorTitles":["hashing customization"],"duration":2,"failureMessages":[],"fullName":"hashing customization [11] kdf with hasher keccak_384","status":"passed","title":"[11] kdf with hasher keccak_384"},{"ancestorTitles":["hashing customization"],"duration":3,"failureMessages":[],"fullName":"hashing customization [12] kdf with hasher keccak_256","status":"passed","title":"[12] kdf with hasher keccak_256"},{"ancestorTitles":["checking if params are correctly encoded"],"duration":1185,"failureMessages":[],"fullName":"checking if params are correctly encoded [1] overriding default values in decrypt","status":"passed","title":"[1] overriding default values in decrypt"},{"ancestorTitles":["checking if params are correctly encoded"],"duration":2,"failureMessages":[],"fullName":"checking if params are correctly encoded [2] kdf include all parameters including default","status":"passed","title":"[2] kdf include all parameters including default"},{"ancestorTitles":["checking if params are correctly encoded"],"duration":1,"failureMessages":[],"fullName":"checking if params are correctly encoded [3] kdf with algorithm not set","status":"passed","title":"[3] kdf with algorithm not set"}]}],"config":{"bail":0,"changedFilesWithAncestor":false,"ci":false,"collectCoverage":false,"collectCoverageFrom":[],"coverageDirectory":"/encrypted-uri/packages/ciphers/coverage","coverageProvider":"babel","coverageReporters":["json","text","lcov","clover"],"detectLeaks":false,"detectOpenHandles":false,"errorOnDeprecated":false,"expand":false,"findRelatedTests":false,"forceExit":false,"json":false,"lastCommit":false,"listTests":false,"logHeapUsage":false,"maxConcurrency":5,"maxWorkers":7,"noStackTrace":false,"nonFlagArgs":[],"notify":false,"notifyMode":"failure-change","onlyChanged":false,"onlyFailures":false,"openHandlesTimeout":1000,"passWithNoTests":false,"projects":[],"reporters":[["default",{}],["/encrypted-uri/packages/ciphers/node_modules/jest-html-reporters/index.js",{"publicPath":"../../docs/ciphers","filename":"test-report.html","expand":true}]],"rootDir":"/encrypted-uri/packages/ciphers","runTestsByPath":false,"seed":-984749182,"skipFilter":false,"snapshotFormat":{"escapeString":false,"printBasicPrototype":false},"testFailureExitCode":1,"testPathPattern":"","testSequencer":"/encrypted-uri/packages/ciphers/node_modules/@jest/test-sequencer/build/index.js","updateSnapshot":"new","useStderr":false,"watch":false,"watchAll":false,"watchman":true,"workerThreads":false},"endTime":1708023606008,"_reporterOptions":{"publicPath":"../../docs/ciphers","filename":"test-report.html","expand":true,"pageTitle":"","hideIcon":false,"testCommand":"","openReport":false,"failureMessageOnly":0,"enableMergeData":false,"dataMergeLevel":1,"inlineSource":false,"urlForTestFiles":"","darkTheme":false,"includeConsoleLog":false,"stripSkippedTest":false},"logInfoMapping":{},"attachInfos":{}})
\ No newline at end of file
diff --git a/docs/core/jest-html-reporters-attach/test-report/result.js b/docs/core/jest-html-reporters-attach/test-report/result.js
index 4ee234d..b3f7308 100644
--- a/docs/core/jest-html-reporters-attach/test-report/result.js
+++ b/docs/core/jest-html-reporters-attach/test-report/result.js
@@ -1 +1 @@
-window.jest_html_reporters_callback__({"numFailedTestSuites":0,"numFailedTests":0,"numPassedTestSuites":1,"numPassedTests":38,"numPendingTestSuites":0,"numPendingTests":0,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":1,"numTotalTests":38,"startTime":1707994599780,"success":false,"testResults":[{"numFailingTests":0,"numPassingTests":38,"numPendingTests":0,"numTodoTests":0,"perfStats":{"end":1707994604670,"runtime":4697,"slow":false,"start":1707994599973},"testFilePath":"/encrypted-uri/packages/core/index.test.ts","failureMessage":null,"testResults":[{"ancestorTitles":["decode uri with default values"],"duration":9,"failureMessages":[],"fullName":"decode uri with default values [1] decode uri with default values not include","status":"passed","title":"[1] decode uri with default values not include"},{"ancestorTitles":["decode uri with default values"],"duration":1,"failureMessages":[],"fullName":"decode uri with default values [2] decode uri with some default values not include","status":"passed","title":"[2] decode uri with some default values not include"},{"ancestorTitles":["decode uri with default values"],"duration":2,"failureMessages":[],"fullName":"decode uri with default values [3] decode uri with some default values not include","status":"passed","title":"[3] decode uri with some default values not include"},{"ancestorTitles":["decode uri with default values"],"duration":3,"failureMessages":[],"fullName":"decode uri with default values [4] decode uri with default values not include","status":"passed","title":"[4] decode uri with default values not include"},{"ancestorTitles":["decode uri with default values"],"duration":3,"failureMessages":[],"fullName":"decode uri with default values [5] decode uri with some default values not include","status":"passed","title":"[5] decode uri with some default values not include"},{"ancestorTitles":["decode uri with default values"],"duration":2,"failureMessages":[],"fullName":"decode uri with default values [6] decode uri with some default values not include","status":"passed","title":"[6] decode uri with some default values not include"},{"ancestorTitles":["decode uri with customized values"],"duration":1,"failureMessages":[],"fullName":"decode uri with customized values [1] decode aes/gcm with customized values","status":"passed","title":"[1] decode aes/gcm with customized values"},{"ancestorTitles":["decode uri with customized values"],"duration":1,"failureMessages":[],"fullName":"decode uri with customized values [2] decode salsa20 with customized values","status":"passed","title":"[2] decode salsa20 with customized values"},{"ancestorTitles":["decode uri with customized values"],"duration":1,"failureMessages":[],"fullName":"decode uri with customized values [3] decode xchacha with customized values","status":"passed","title":"[3] decode xchacha with customized values"},{"ancestorTitles":["decode uri with customized values"],"duration":2,"failureMessages":[],"fullName":"decode uri with customized values [4] decode chacha12 with customized values","status":"passed","title":"[4] decode chacha12 with customized values"},{"ancestorTitles":["encode uri with configs using default values"],"duration":1,"failureMessages":[],"fullName":"encode uri with configs using default values [1] encode with default config with default values","status":"passed","title":"[1] encode with default config with default values"},{"ancestorTitles":["encode uri with configs using default values"],"duration":2,"failureMessages":[],"fullName":"encode uri with configs using default values [2] encode with default config with default values","status":"passed","title":"[2] encode with default config with default values"},{"ancestorTitles":["encode uri with configs using default values"],"duration":1,"failureMessages":[],"fullName":"encode uri with configs using default values [3] encode with default config with default values","status":"passed","title":"[3] encode with default config with default values"},{"ancestorTitles":["encode uri with configs using default values"],"duration":1,"failureMessages":[],"fullName":"encode uri with configs using default values [4] encode with default config with default values","status":"passed","title":"[4] encode with default config with default values"},{"ancestorTitles":["encode uri with configs using default values"],"duration":1,"failureMessages":[],"fullName":"encode uri with configs using default values [5] encode with default config with default values","status":"passed","title":"[5] encode with default config with default values"},{"ancestorTitles":["encode uri with configs using default values"],"duration":1,"failureMessages":[],"fullName":"encode uri with configs using default values [6] encode with default config with default values","status":"passed","title":"[6] encode with default config with default values"},{"ancestorTitles":["encode uri with configs using default values"],"duration":1,"failureMessages":[],"fullName":"encode uri with configs using default values [7] encode with default config with default values","status":"passed","title":"[7] encode with default config with default values"},{"ancestorTitles":["encode uri with configs using default values"],"duration":2,"failureMessages":[],"fullName":"encode uri with configs using default values [8] encode with default config with default values","status":"passed","title":"[8] encode with default config with default values"},{"ancestorTitles":["encode uri with customized values"],"duration":1,"failureMessages":[],"fullName":"encode uri with customized values [1] encode aes/gcm with customized values","status":"passed","title":"[1] encode aes/gcm with customized values"},{"ancestorTitles":["encode uri with customized values"],"duration":1,"failureMessages":[],"fullName":"encode uri with customized values [2] encode salsa20 with customized values","status":"passed","title":"[2] encode salsa20 with customized values"},{"ancestorTitles":["encode uri with customized values"],"duration":1,"failureMessages":[],"fullName":"encode uri with customized values [3] encode xchacha with customized values","status":"passed","title":"[3] encode xchacha with customized values"},{"ancestorTitles":["encode uri with customized values"],"duration":1,"failureMessages":[],"fullName":"encode uri with customized values [4] encode chacha12 with customized values","status":"passed","title":"[4] encode chacha12 with customized values"},{"ancestorTitles":["uri matcher"],"duration":1,"failureMessages":[],"fullName":"uri matcher [1] match valid encrypted uri","status":"passed","title":"[1] match valid encrypted uri"},{"ancestorTitles":["uri matcher"],"duration":1,"failureMessages":[],"fullName":"uri matcher [2] match valid encrypted uri","status":"passed","title":"[2] match valid encrypted uri"},{"ancestorTitles":["uri matcher"],"duration":21,"failureMessages":[],"fullName":"uri matcher [3] match valid encrypted uri","status":"passed","title":"[3] match valid encrypted uri"},{"ancestorTitles":["uri matcher"],"duration":2,"failureMessages":[],"fullName":"uri matcher [4] match valid encrypted uri","status":"passed","title":"[4] match valid encrypted uri"},{"ancestorTitles":["uri matcher"],"duration":1,"failureMessages":[],"fullName":"uri matcher [5] match valid encrypted uri","status":"passed","title":"[5] match valid encrypted uri"},{"ancestorTitles":["uri matcher"],"duration":0,"failureMessages":[],"fullName":"uri matcher [6] match valid encrypted uri","status":"passed","title":"[6] match valid encrypted uri"},{"ancestorTitles":["uri matcher"],"duration":1,"failureMessages":[],"fullName":"uri matcher [7] match valid encrypted uri","status":"passed","title":"[7] match valid encrypted uri"},{"ancestorTitles":["uri matcher"],"duration":1,"failureMessages":[],"fullName":"uri matcher [8] match valid encrypted uri","status":"passed","title":"[8] match valid encrypted uri"},{"ancestorTitles":["uri matcher"],"duration":1,"failureMessages":[],"fullName":"uri matcher [9] match valid encrypted uri","status":"passed","title":"[9] match valid encrypted uri"},{"ancestorTitles":["uri matcher"],"duration":1,"failureMessages":[],"fullName":"uri matcher [10] match valid encrypted uri","status":"passed","title":"[10] match valid encrypted uri"},{"ancestorTitles":["uri matcher"],"duration":1,"failureMessages":[],"fullName":"uri matcher [11] match valid encrypted uri","status":"passed","title":"[11] match valid encrypted uri"},{"ancestorTitles":["EncryptedURI object"],"duration":1,"failureMessages":[],"fullName":"EncryptedURI object [1] match valid encrypted uri","status":"passed","title":"[1] match valid encrypted uri"},{"ancestorTitles":["EncryptedURI object"],"duration":3,"failureMessages":[],"fullName":"EncryptedURI object [2] EncryptedURI must run decrypt for custom algorithm","status":"passed","title":"[2] EncryptedURI must run decrypt for custom algorithm"},{"ancestorTitles":["EncryptedURI object"],"duration":3,"failureMessages":[],"fullName":"EncryptedURI object [3] EncryptedURI must run encrypt for custom algorithm","status":"passed","title":"[3] EncryptedURI must run encrypt for custom algorithm"},{"ancestorTitles":["EncryptedURI getKDFConfig"],"duration":1,"failureMessages":[],"fullName":"EncryptedURI getKDFConfig [1] EncryptedURI get KDF config from KDF config","status":"passed","title":"[1] EncryptedURI get KDF config from KDF config"},{"ancestorTitles":["EncryptedURI getKDFConfig"],"duration":1,"failureMessages":[],"fullName":"EncryptedURI getKDFConfig [2] EncryptedURI get KDF config from decoded URI","status":"passed","title":"[2] EncryptedURI get KDF config from decoded URI"}]}],"config":{"bail":0,"changedFilesWithAncestor":false,"ci":false,"collectCoverage":false,"collectCoverageFrom":[],"coverageDirectory":"/encrypted-uri/packages/core/coverage","coverageProvider":"babel","coverageReporters":["json","text","lcov","clover"],"detectLeaks":false,"detectOpenHandles":false,"errorOnDeprecated":false,"expand":false,"findRelatedTests":false,"forceExit":false,"json":false,"lastCommit":false,"listTests":false,"logHeapUsage":false,"maxConcurrency":5,"maxWorkers":7,"noStackTrace":false,"nonFlagArgs":[],"notify":false,"notifyMode":"failure-change","onlyChanged":false,"onlyFailures":false,"openHandlesTimeout":1000,"passWithNoTests":false,"projects":[],"reporters":[["default",{}],["/encrypted-uri/packages/core/node_modules/jest-html-reporters/index.js",{"publicPath":"../../docs/core","filename":"test-report.html","expand":true}]],"rootDir":"/encrypted-uri/packages/core","runTestsByPath":false,"seed":-1892291236,"skipFilter":false,"snapshotFormat":{"escapeString":false,"printBasicPrototype":false},"testFailureExitCode":1,"testPathPattern":"","testSequencer":"/encrypted-uri/packages/core/node_modules/@jest/test-sequencer/build/index.js","updateSnapshot":"new","useStderr":false,"verbose":true,"watch":false,"watchAll":false,"watchman":true,"workerThreads":false},"endTime":1707994604689,"_reporterOptions":{"publicPath":"../../docs/core","filename":"test-report.html","expand":true,"pageTitle":"","hideIcon":false,"testCommand":"","openReport":false,"failureMessageOnly":0,"enableMergeData":false,"dataMergeLevel":1,"inlineSource":false,"urlForTestFiles":"","darkTheme":false,"includeConsoleLog":false,"stripSkippedTest":false},"logInfoMapping":{},"attachInfos":{}})
\ No newline at end of file
+window.jest_html_reporters_callback__({"numFailedTestSuites":0,"numFailedTests":0,"numPassedTestSuites":1,"numPassedTests":38,"numPendingTestSuites":0,"numPendingTests":0,"numRuntimeErrorTestSuites":0,"numTodoTests":0,"numTotalTestSuites":1,"numTotalTests":38,"startTime":1708023511645,"success":false,"testResults":[{"numFailingTests":0,"numPassingTests":38,"numPendingTests":0,"numTodoTests":0,"perfStats":{"end":1708023515362,"runtime":3513,"slow":false,"start":1708023511849},"testFilePath":"/encrypted-uri/packages/core/index.test.ts","failureMessage":null,"testResults":[{"ancestorTitles":["decode uri with default values"],"duration":3,"failureMessages":[],"fullName":"decode uri with default values [1] decode uri with default values not include","status":"passed","title":"[1] decode uri with default values not include"},{"ancestorTitles":["decode uri with default values"],"duration":1,"failureMessages":[],"fullName":"decode uri with default values [2] decode uri with some default values not include","status":"passed","title":"[2] decode uri with some default values not include"},{"ancestorTitles":["decode uri with default values"],"duration":0,"failureMessages":[],"fullName":"decode uri with default values [3] decode uri with some default values not include","status":"passed","title":"[3] decode uri with some default values not include"},{"ancestorTitles":["decode uri with default values"],"duration":1,"failureMessages":[],"fullName":"decode uri with default values [4] decode uri with default values not include","status":"passed","title":"[4] decode uri with default values not include"},{"ancestorTitles":["decode uri with default values"],"duration":1,"failureMessages":[],"fullName":"decode uri with default values [5] decode uri with some default values not include","status":"passed","title":"[5] decode uri with some default values not include"},{"ancestorTitles":["decode uri with default values"],"duration":1,"failureMessages":[],"fullName":"decode uri with default values [6] decode uri with some default values not include","status":"passed","title":"[6] decode uri with some default values not include"},{"ancestorTitles":["decode uri with customized values"],"duration":1,"failureMessages":[],"fullName":"decode uri with customized values [1] decode aes/gcm with customized values","status":"passed","title":"[1] decode aes/gcm with customized values"},{"ancestorTitles":["decode uri with customized values"],"duration":0,"failureMessages":[],"fullName":"decode uri with customized values [2] decode salsa20 with customized values","status":"passed","title":"[2] decode salsa20 with customized values"},{"ancestorTitles":["decode uri with customized values"],"duration":0,"failureMessages":[],"fullName":"decode uri with customized values [3] decode xchacha with customized values","status":"passed","title":"[3] decode xchacha with customized values"},{"ancestorTitles":["decode uri with customized values"],"duration":0,"failureMessages":[],"fullName":"decode uri with customized values [4] decode chacha12 with customized values","status":"passed","title":"[4] decode chacha12 with customized values"},{"ancestorTitles":["encode uri with configs using default values"],"duration":1,"failureMessages":[],"fullName":"encode uri with configs using default values [1] encode with default config with default values","status":"passed","title":"[1] encode with default config with default values"},{"ancestorTitles":["encode uri with configs using default values"],"duration":1,"failureMessages":[],"fullName":"encode uri with configs using default values [2] encode with default config with default values","status":"passed","title":"[2] encode with default config with default values"},{"ancestorTitles":["encode uri with configs using default values"],"duration":0,"failureMessages":[],"fullName":"encode uri with configs using default values [3] encode with default config with default values","status":"passed","title":"[3] encode with default config with default values"},{"ancestorTitles":["encode uri with configs using default values"],"duration":1,"failureMessages":[],"fullName":"encode uri with configs using default values [4] encode with default config with default values","status":"passed","title":"[4] encode with default config with default values"},{"ancestorTitles":["encode uri with configs using default values"],"duration":3,"failureMessages":[],"fullName":"encode uri with configs using default values [5] encode with default config with default values","status":"passed","title":"[5] encode with default config with default values"},{"ancestorTitles":["encode uri with configs using default values"],"duration":0,"failureMessages":[],"fullName":"encode uri with configs using default values [6] encode with default config with default values","status":"passed","title":"[6] encode with default config with default values"},{"ancestorTitles":["encode uri with configs using default values"],"duration":1,"failureMessages":[],"fullName":"encode uri with configs using default values [7] encode with default config with default values","status":"passed","title":"[7] encode with default config with default values"},{"ancestorTitles":["encode uri with configs using default values"],"duration":0,"failureMessages":[],"fullName":"encode uri with configs using default values [8] encode with default config with default values","status":"passed","title":"[8] encode with default config with default values"},{"ancestorTitles":["encode uri with customized values"],"duration":0,"failureMessages":[],"fullName":"encode uri with customized values [1] encode aes/gcm with customized values","status":"passed","title":"[1] encode aes/gcm with customized values"},{"ancestorTitles":["encode uri with customized values"],"duration":0,"failureMessages":[],"fullName":"encode uri with customized values [2] encode salsa20 with customized values","status":"passed","title":"[2] encode salsa20 with customized values"},{"ancestorTitles":["encode uri with customized values"],"duration":0,"failureMessages":[],"fullName":"encode uri with customized values [3] encode xchacha with customized values","status":"passed","title":"[3] encode xchacha with customized values"},{"ancestorTitles":["encode uri with customized values"],"duration":0,"failureMessages":[],"fullName":"encode uri with customized values [4] encode chacha12 with customized values","status":"passed","title":"[4] encode chacha12 with customized values"},{"ancestorTitles":["uri matcher"],"duration":1,"failureMessages":[],"fullName":"uri matcher [1] match valid encrypted uri","status":"passed","title":"[1] match valid encrypted uri"},{"ancestorTitles":["uri matcher"],"duration":0,"failureMessages":[],"fullName":"uri matcher [2] match valid encrypted uri","status":"passed","title":"[2] match valid encrypted uri"},{"ancestorTitles":["uri matcher"],"duration":1,"failureMessages":[],"fullName":"uri matcher [3] match valid encrypted uri","status":"passed","title":"[3] match valid encrypted uri"},{"ancestorTitles":["uri matcher"],"duration":0,"failureMessages":[],"fullName":"uri matcher [4] match valid encrypted uri","status":"passed","title":"[4] match valid encrypted uri"},{"ancestorTitles":["uri matcher"],"duration":0,"failureMessages":[],"fullName":"uri matcher [5] match valid encrypted uri","status":"passed","title":"[5] match valid encrypted uri"},{"ancestorTitles":["uri matcher"],"duration":0,"failureMessages":[],"fullName":"uri matcher [6] match valid encrypted uri","status":"passed","title":"[6] match valid encrypted uri"},{"ancestorTitles":["uri matcher"],"duration":0,"failureMessages":[],"fullName":"uri matcher [7] match valid encrypted uri","status":"passed","title":"[7] match valid encrypted uri"},{"ancestorTitles":["uri matcher"],"duration":0,"failureMessages":[],"fullName":"uri matcher [8] match valid encrypted uri","status":"passed","title":"[8] match valid encrypted uri"},{"ancestorTitles":["uri matcher"],"duration":1,"failureMessages":[],"fullName":"uri matcher [9] match valid encrypted uri","status":"passed","title":"[9] match valid encrypted uri"},{"ancestorTitles":["uri matcher"],"duration":0,"failureMessages":[],"fullName":"uri matcher [10] match valid encrypted uri","status":"passed","title":"[10] match valid encrypted uri"},{"ancestorTitles":["uri matcher"],"duration":0,"failureMessages":[],"fullName":"uri matcher [11] match valid encrypted uri","status":"passed","title":"[11] match valid encrypted uri"},{"ancestorTitles":["EncryptedURI object"],"duration":0,"failureMessages":[],"fullName":"EncryptedURI object [1] match valid encrypted uri","status":"passed","title":"[1] match valid encrypted uri"},{"ancestorTitles":["EncryptedURI object"],"duration":1,"failureMessages":[],"fullName":"EncryptedURI object [2] EncryptedURI must run decrypt for custom algorithm","status":"passed","title":"[2] EncryptedURI must run decrypt for custom algorithm"},{"ancestorTitles":["EncryptedURI object"],"duration":1,"failureMessages":[],"fullName":"EncryptedURI object [3] EncryptedURI must run encrypt for custom algorithm","status":"passed","title":"[3] EncryptedURI must run encrypt for custom algorithm"},{"ancestorTitles":["EncryptedURI getKDFConfig"],"duration":0,"failureMessages":[],"fullName":"EncryptedURI getKDFConfig [1] EncryptedURI get KDF config from KDF config","status":"passed","title":"[1] EncryptedURI get KDF config from KDF config"},{"ancestorTitles":["EncryptedURI getKDFConfig"],"duration":1,"failureMessages":[],"fullName":"EncryptedURI getKDFConfig [2] EncryptedURI get KDF config from decoded URI","status":"passed","title":"[2] EncryptedURI get KDF config from decoded URI"}]}],"config":{"bail":0,"changedFilesWithAncestor":false,"ci":false,"collectCoverage":false,"collectCoverageFrom":[],"coverageDirectory":"/encrypted-uri/packages/core/coverage","coverageProvider":"babel","coverageReporters":["json","text","lcov","clover"],"detectLeaks":false,"detectOpenHandles":false,"errorOnDeprecated":false,"expand":false,"findRelatedTests":false,"forceExit":false,"json":false,"lastCommit":false,"listTests":false,"logHeapUsage":false,"maxConcurrency":5,"maxWorkers":7,"noStackTrace":false,"nonFlagArgs":[],"notify":false,"notifyMode":"failure-change","onlyChanged":false,"onlyFailures":false,"openHandlesTimeout":1000,"passWithNoTests":false,"projects":[],"reporters":[["default",{}],["/encrypted-uri/packages/core/node_modules/jest-html-reporters/index.js",{"publicPath":"../../docs/core","filename":"test-report.html","expand":true}]],"rootDir":"/encrypted-uri/packages/core","runTestsByPath":false,"seed":-1845586471,"skipFilter":false,"snapshotFormat":{"escapeString":false,"printBasicPrototype":false},"testFailureExitCode":1,"testPathPattern":"","testSequencer":"/encrypted-uri/packages/core/node_modules/@jest/test-sequencer/build/index.js","updateSnapshot":"new","useStderr":false,"verbose":true,"watch":false,"watchAll":false,"watchman":true,"workerThreads":false},"endTime":1708023515368,"_reporterOptions":{"publicPath":"../../docs/core","filename":"test-report.html","expand":true,"pageTitle":"","hideIcon":false,"testCommand":"","openReport":false,"failureMessageOnly":0,"enableMergeData":false,"dataMergeLevel":1,"inlineSource":false,"urlForTestFiles":"","darkTheme":false,"includeConsoleLog":false,"stripSkippedTest":false},"logInfoMapping":{},"attachInfos":{}})
\ No newline at end of file
diff --git a/packages/ciphers/aes/cbc/index.ts b/packages/ciphers/aes/cbc/index.ts
index 93679a0..cba6bb1 100755
--- a/packages/ciphers/aes/cbc/index.ts
+++ b/packages/ciphers/aes/cbc/index.ts
@@ -21,7 +21,6 @@ class EncryptedURIAESCBCDecrypter extends EncryptedURIDecrypter extends Enc
async decrypt(): Promise {
const cipher = base64.decode(this.decoded.cipher || '');
const params = getSalt(cipher, this.decoded?.params);
- const result = await ecb(kdf(this.password, params.salt, this.decoded))
+ const derivatedKey = kdf(this.password, params.salt, this.decoded);
+ const result = await ecb(derivatedKey)
.decrypt(params.cipher);
return bytesToUtf8(result);
@@ -42,7 +43,8 @@ class EncryptedURIAESECBEncrypter extends Enc
const content = utf8ToBytes(this.params.content);
const saltLength = 8;
const salt = randomBytes(saltLength);
- const rawCipher = await ecb(kdf(this.params.password, salt, this.params)).encrypt(content);
+ const derivatedKey = kdf(this.params.password, salt, this.params);
+ const rawCipher = await ecb(derivatedKey).encrypt(content);
const cipher = base64.encode(OpenSSLSerializer.encode(rawCipher, salt));
return Promise.resolve({ cipher });
diff --git a/packages/ciphers/aes/gcm/index.ts b/packages/ciphers/aes/gcm/index.ts
index b7ebc64..c64838f 100755
--- a/packages/ciphers/aes/gcm/index.ts
+++ b/packages/ciphers/aes/gcm/index.ts
@@ -20,7 +20,8 @@ class EncryptedURIAESGCMDecrypter extends EncryptedURIDecrypter {
constructor(
@@ -20,7 +20,8 @@ class EncryptedURIAESSIVDecrypter extends EncryptedURIDecrypter {
const parser = new EncryptedURIParser(encoded);
expect(parser.decoded.params?.kdf).toEqual(undefined);
- expect(parser.decoded.algorithm).toEqual('aes/cbc');
+ expect(parser.decoded.algorithm).toEqual(undefined);
expect(parser.decoded.params?.c).toEqual(undefined);
expect(parser.decoded.params?.dklen).toEqual(undefined);
expect(parser.decoded.params?.h).toEqual('keccak_512');
@@ -204,7 +204,7 @@ describe('hashing customization', () => {
const parser = new EncryptedURIParser(encoded);
expect(parser.decoded.params?.kdf).toEqual(undefined);
- expect(parser.decoded.algorithm).toEqual('aes/cbc');
+ expect(parser.decoded.algorithm).toEqual(undefined);
expect(parser.decoded.params?.c).toEqual(undefined);
expect(parser.decoded.params?.dklen).toEqual(undefined);
expect(parser.decoded.params?.h).toEqual('keccak_384');
@@ -301,7 +301,7 @@ describe('checking if params are correctly encoded', () => {
const parser = new EncryptedURIParser(encoded);
expect(parser.decoded.params?.kdf).toEqual(undefined);
- expect(parser.decoded.algorithm).toEqual('aes/cbc');
+ expect(parser.decoded.algorithm).toEqual(undefined);
expect(parser.decoded.params?.c).toEqual(undefined);
expect(parser.decoded.params?.dklen).toEqual(undefined);
expect(parser.decoded.params?.h).toEqual(undefined);
diff --git a/packages/core/index.test.ts b/packages/core/index.test.ts
index 4e89d92..6883004 100755
--- a/packages/core/index.test.ts
+++ b/packages/core/index.test.ts
@@ -19,9 +19,8 @@ describe('decode uri with default values', () => {
});
it('[3] decode uri with some default values not include', () => {
- expect(new EncryptedURIParser('encrypted:aes/cbc?2345678wertyui;en1e3kj3e31jn2algoritmgenerateddata').decoded)
+ expect(new EncryptedURIParser('encrypted:?2345678wertyui;en1e3kj3e31jn2algoritmgenerateddata').decoded)
.toEqual({
- algorithm: 'aes/cbc',
cipher: 'en1e3kj3e31jn2algoritmgenerateddata',
queryString: '2345678wertyui'
});
@@ -52,9 +51,8 @@ describe('decode uri with default values', () => {
});
it('[6] decode uri with some default values not include', () => {
- expect(new EncryptedURIParser('encrypted:aes/cbc?iv=2345678wertyui&pad=pkcs%237;en1e3kj3e31jn2algoritmgenerateddata').decoded)
+ expect(new EncryptedURIParser('encrypted:?iv=2345678wertyui&pad=pkcs%237;en1e3kj3e31jn2algoritmgenerateddata').decoded)
.toEqual({
- algorithm: 'aes/cbc',
cipher: 'en1e3kj3e31jn2algoritmgenerateddata',
queryString: 'iv=2345678wertyui&pad=pkcs%237',
params: {
@@ -126,7 +124,7 @@ describe('encode uri with configs using default values', () => {
params: {
iv: '2345678wertyui'
}
- }).encoded).toEqual('encrypted:aes/cbc?iv=2345678wertyui;en1e3kj3e31jn2algoritmgenerateddata')
+ }).encoded).toEqual('encrypted:?iv=2345678wertyui;en1e3kj3e31jn2algoritmgenerateddata')
});
it('[3] encode with default config with default values', () => {
@@ -142,7 +140,7 @@ describe('encode uri with configs using default values', () => {
algorithm: 'aes/cbc',
cipher: 'en1e3kj3e31jn2algoritmgenerateddata',
queryString: '2345678wertyui'
- }).encoded).toEqual('encrypted:aes/cbc?2345678wertyui;en1e3kj3e31jn2algoritmgenerateddata')
+ }).encoded).toEqual('encrypted:?2345678wertyui;en1e3kj3e31jn2algoritmgenerateddata')
});
it('[5] encode with default config with default values', () => {
@@ -153,7 +151,7 @@ describe('encode uri with configs using default values', () => {
iv: '2345678wertyui',
pad: 'pkcs#7'
}
- }).encoded).toEqual('encrypted:aes/cbc?iv=2345678wertyui&pad=pkcs%237;en1e3kj3e31jn2algoritmgenerateddata')
+ }).encoded).toEqual('encrypted:?iv=2345678wertyui&pad=pkcs%237;en1e3kj3e31jn2algoritmgenerateddata')
});
it('[6] encode with default config with default values', () => {
@@ -171,7 +169,7 @@ describe('encode uri with configs using default values', () => {
algorithm: 'aes/cbc',
cipher: 'en1e3kj3e31jn2algoritmgenerateddata',
queryString: 'iv=2345678wertyui'
- }).encoded).toEqual('encrypted:aes/cbc?iv=2345678wertyui;en1e3kj3e31jn2algoritmgenerateddata')
+ }).encoded).toEqual('encrypted:?iv=2345678wertyui;en1e3kj3e31jn2algoritmgenerateddata')
});
it('[8] encode with default config with default values', () => {
@@ -182,7 +180,7 @@ describe('encode uri with configs using default values', () => {
iv: '2345678wertyui',
pad: 'pkcs#7'
}
- }).encoded).toEqual('encrypted:aes/cbc?iv=2345678wertyui&pad=pkcs%237;en1e3kj3e31jn2algoritmgenerateddata')
+ }).encoded).toEqual('encrypted:?iv=2345678wertyui&pad=pkcs%237;en1e3kj3e31jn2algoritmgenerateddata')
});
});
@@ -244,7 +242,7 @@ describe('uri matcher', () => {
});
it('[3] match valid encrypted uri', () => {
- expect(EncryptedURIParser.matcher('encrypted:aes/cbc?2345678wertyui;en1e3kj3e31jn2algoritmgenerateddata'))
+ expect(EncryptedURIParser.matcher('encrypted:?2345678wertyui;en1e3kj3e31jn2algoritmgenerateddata'))
.toEqual(true);
});
@@ -259,7 +257,7 @@ describe('uri matcher', () => {
});
it('[6] match valid encrypted uri', () => {
- expect(EncryptedURIParser.matcher('encrypted:aes/cbc?iv=2345678wertyui&pad=pkcs%237;en1e3kj3e31jn2algoritmgenerateddata'))
+ expect(EncryptedURIParser.matcher('encrypted:?iv=2345678wertyui&pad=pkcs%237;en1e3kj3e31jn2algoritmgenerateddata'))
.toEqual(true);
});
diff --git a/packages/core/index.ts b/packages/core/index.ts
index 63b83b8..2abc70e 100755
--- a/packages/core/index.ts
+++ b/packages/core/index.ts
@@ -111,8 +111,6 @@ export type TEncryptedURI = {
};
class EncryptedURIDecoder {
-
-
private readonly ENCRYPTED_URI_MATCHER = /^encrypted:/;
private readonly QUERY_STRING_MATCHER = /^\?[^;]*;/;
@@ -229,7 +227,7 @@ class EncryptedURIEncoder {
return params;
}
- encode(content: TEncryptedURI & { kdf?: TEncryptedURIKDFParams }): string {
+ encode(content: TEncryptedURI & { kdf?: TEncryptedURIKDFParams, config?: TEncryptedDefaultsConfig }): string {
const algorithm = this.encodeAlgorithm(content);
const parameters = this.encodeParameters(content);
@@ -263,8 +261,19 @@ class EncryptedURIEncoder {
}
private encodeAlgorithm(
- content: TEncryptedURI
+ content: TEncryptedURI & {
+ config?: TEncryptedDefaultsConfig
+ }
): string {
+ const config = EncryptedURI.getConfigsOfDefaults(content.config);
+
+ if (
+ config.ignoreDefaultAlgorithm &&
+ content.algorithm === EncryptedURI.defaultAlgotithm
+ ) {
+ return '';
+ }
+
return content.algorithm || '';
}
}
@@ -280,10 +289,12 @@ export class EncryptedURIParser {
constructor(content: string);
constructor(content: TEncryptedURI & {
- kdf?: TEncryptedURIKDFParams | undefined;
+ kdf?: TEncryptedURIKDFParams;
+ config?: TEncryptedDefaultsConfig;
});
constructor(content: string | TEncryptedURI & {
- kdf?: TEncryptedURIKDFParams | undefined;
+ kdf?: TEncryptedURIKDFParams;
+ config?: TEncryptedDefaultsConfig;
}) {
if (typeof content === 'string') {
const decoder = new EncryptedURIDecoder();
@@ -530,7 +541,8 @@ export class EncryptedURI {
}
static encode(params: TEncryptedURI & {
- kdf?: TEncryptedURIKDFParams | undefined;
+ kdf?: TEncryptedURIKDFParams;
+ config?: TEncryptedDefaultsConfig;
}): string {
return new EncryptedURIParser(params).encoded;
}
@@ -542,7 +554,11 @@ export class EncryptedURI {
const ciphred = await new encrypter(params, ...args).encrypt();
ciphred.algorithm = encrypter.algorithm || params.algorithm;
- return Promise.resolve(this.encode({ ...ciphred, kdf: params.kdf }));
+ return Promise.resolve(this.encode({
+ ...ciphred,
+ kdf: params.kdf,
+ config: params.config
+ }));
}
static decrypt(