@driveflux/env 5.0.11 → 5.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build$colon$all.log +16 -0
- package/.turbo/turbo-build.log +4 -4
- package/CHANGELOG.md +22 -0
- package/dist/augment-env.js +8 -3
- package/dist/augment-env.js.map +3 -6
- package/dist/bin/init-env-bin.js.map +9 -11
- package/dist/bin/init-env.js +10708 -30
- package/dist/chunk-a04mfzxz.js +130 -0
- package/dist/chunk-a04mfzxz.js.map +12 -0
- package/dist/chunk-rjywhrqs.js +34 -0
- package/dist/chunk-rjywhrqs.js.map +10 -0
- package/dist/chunk-tx1bsdta.js +11092 -0
- package/dist/chunk-tx1bsdta.js.map +105 -0
- package/dist/init-env.js +9 -30
- package/dist/init-env.js.map +3 -99
- package/dist/init-shell.js +10 -3
- package/dist/init-shell.js.map +3 -4
- package/dist/main.js +16 -2
- package/dist/main.js.map +2 -2
- package/package.json +2 -2
- package/tsconfig.tsbuildinfo +1 -1
package/dist/init-env.js.map
CHANGED
|
@@ -1,105 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": [
|
|
3
|
+
"sources": [],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"const { name, version, description } = require('../../../package.json')\n\nmodule.exports = { name, version, description }\n",
|
|
6
|
-
"const { WriteStream } = require('tty')\n\nconst getColorDepth = () => {\n try {\n return WriteStream.prototype.getColorDepth()\n } catch (error) {\n const term = process.env.TERM\n\n if (term && (term.includes('256color') || term.includes('xterm'))) {\n return 8 // 256 colors\n }\n\n return 4\n }\n}\n\nmodule.exports = { getColorDepth }\n",
|
|
7
|
-
"const depth = require('../lib/helpers/colorDepth')\n\nconst colors16 = new Map([\n ['blue', 34],\n ['gray', 37],\n ['green', 32],\n ['olive', 33],\n ['orangered', 31], // mapped to red\n ['plum', 35], // mapped to magenta\n ['red', 31],\n ['electricblue', 36],\n ['dodgerblue', 36]\n])\n\nconst colors256 = new Map([\n ['blue', 21],\n ['gray', 244],\n ['green', 34],\n ['olive', 142],\n ['orangered', 202],\n ['plum', 182],\n ['red', 196],\n ['electricblue', 45],\n ['dodgerblue', 33]\n])\n\nfunction getColor (color) {\n const colorDepth = depth.getColorDepth()\n if (!colors256.has(color)) {\n throw new Error(`Invalid color ${color}`)\n }\n if (colorDepth >= 8) {\n const code = colors256.get(color)\n return (message) => `\\x1b[38;5;${code}m${message}\\x1b[39m`\n }\n if (colorDepth >= 4) {\n const code = colors16.get(color)\n return (message) => `\\x1b[${code}m${message}\\x1b[39m`\n }\n return (message) => message\n}\n\nfunction bold (message) {\n if (depth.getColorDepth() >= 4) {\n return `\\x1b[1m${message}\\x1b[22m`\n }\n\n return message\n}\n\nmodule.exports = {\n getColor,\n bold\n}\n",
|
|
8
|
-
"const packageJson = require('../lib/helpers/packageJson')\nconst { getColor, bold } = require('./colors')\n\nconst levels = {\n error: 0,\n warn: 1,\n success: 2,\n successv: 2,\n info: 2,\n help: 2,\n verbose: 4,\n debug: 5,\n silly: 6\n}\n\nconst error = (m) => bold(getColor('red')(m))\nconst warn = getColor('orangered')\nconst success = getColor('green')\nconst successv = getColor('olive') // yellow-ish tint that 'looks' like dotenv\nconst help = getColor('dodgerblue')\nconst verbose = getColor('plum')\nconst debug = getColor('plum')\n\nlet currentLevel = levels.info // default log level\nlet currentName = 'dotenvx' // default logger name\nlet currentVersion = packageJson.version // default logger version\n\nfunction stderr (level, message) {\n const formattedMessage = formatMessage(level, message)\n console.error(formattedMessage)\n}\n\nfunction stdout (level, message) {\n if (levels[level] === undefined) {\n throw new Error(`MISSING_LOG_LEVEL: '${level}'. implement in logger.`)\n }\n\n if (levels[level] <= currentLevel) {\n const formattedMessage = formatMessage(level, message)\n console.log(formattedMessage)\n }\n}\n\nfunction formatMessage (level, message) {\n const formattedMessage = typeof message === 'object' ? JSON.stringify(message) : message\n\n switch (level.toLowerCase()) {\n // errors\n case 'error':\n return error(formattedMessage)\n // warns\n case 'warn':\n return warn(formattedMessage)\n // successes\n case 'success':\n return success(formattedMessage)\n case 'successv': // success with 'version'\n return successv(`[${currentName}@${currentVersion}] ${formattedMessage}`)\n // info\n case 'info':\n return formattedMessage\n // help\n case 'help':\n return help(formattedMessage)\n // verbose\n case 'verbose':\n return verbose(formattedMessage)\n // debug\n case 'debug':\n return debug(formattedMessage)\n }\n}\n\nconst logger = {\n // track level\n level: 'info',\n\n // errors\n error: (msg) => stderr('error', msg),\n // warns\n warn: (msg) => stdout('warn', msg),\n // success\n success: (msg) => stdout('success', msg),\n successv: (msg) => stdout('successv', msg),\n // info\n info: (msg) => stdout('info', msg),\n // help\n help: (msg) => stdout('help', msg),\n // verbose\n verbose: (msg) => stdout('verbose', msg),\n // debug\n debug: (msg) => stdout('debug', msg),\n setLevel: (level) => {\n if (levels[level] !== undefined) {\n currentLevel = levels[level]\n logger.level = level\n }\n },\n setName: (name) => {\n currentName = name\n logger.name = name\n },\n setVersion: (version) => {\n currentVersion = version\n logger.version = version\n }\n}\n\nfunction setLogLevel (options) {\n const logLevel = options.debug\n ? 'debug'\n : options.verbose\n ? 'verbose'\n : options.quiet\n ? 'error'\n : options.logLevel\n\n if (!logLevel) return\n logger.setLevel(logLevel)\n // Only log which level it's setting if it's not set to quiet mode\n if (!options.quiet || (options.quiet && logLevel !== 'error')) {\n logger.debug(`Setting log level to ${logLevel}`)\n }\n}\n\nfunction setLogName (options) {\n const logName = options.logName\n if (!logName) return\n logger.setName(logName)\n}\n\nfunction setLogVersion (options) {\n const logVersion = options.logVersion\n if (!logVersion) return\n logger.setVersion(logVersion)\n}\n\nmodule.exports = {\n logger,\n getColor,\n setLogLevel,\n setLogName,\n setLogVersion,\n levels\n}\n",
|
|
9
|
-
"'use strict';\n\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\nconst SEP = '/';\n\nconst POSIX_CHARS = {\n DOT_LITERAL,\n PLUS_LITERAL,\n QMARK_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n QMARK,\n END_ANCHOR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR,\n SEP\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n ...POSIX_CHARS,\n\n SLASH_LITERAL: `[${WIN_SLASH}]`,\n QMARK: WIN_NO_SLASH,\n STAR: `${WIN_NO_SLASH}*?`,\n DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n NO_DOT: `(?!${DOT_LITERAL})`,\n NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n END_ANCHOR: `(?:[${WIN_SLASH}]|$)`,\n SEP: '\\\\'\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n alnum: 'a-zA-Z0-9',\n alpha: 'a-zA-Z',\n ascii: '\\\\x00-\\\\x7F',\n blank: ' \\\\t',\n cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n digit: '0-9',\n graph: '\\\\x21-\\\\x7E',\n lower: 'a-z',\n print: '\\\\x20-\\\\x7E ',\n punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n upper: 'A-Z',\n word: 'A-Za-z0-9_',\n xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n MAX_LENGTH: 1024 * 64,\n POSIX_REGEX_SOURCE,\n\n // regular expressions\n REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n // Replace globs with equivalent patterns to reduce parsing time.\n REPLACEMENTS: {\n __proto__: null,\n '***': '*',\n '**/**': '**',\n '**/**/**': '**'\n },\n\n // Digits\n CHAR_0: 48, /* 0 */\n CHAR_9: 57, /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 65, /* A */\n CHAR_LOWERCASE_A: 97, /* a */\n CHAR_UPPERCASE_Z: 90, /* Z */\n CHAR_LOWERCASE_Z: 122, /* z */\n\n CHAR_LEFT_PARENTHESES: 40, /* ( */\n CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n CHAR_ASTERISK: 42, /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: 38, /* & */\n CHAR_AT: 64, /* @ */\n CHAR_BACKWARD_SLASH: 92, /* \\ */\n CHAR_CARRIAGE_RETURN: 13, /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n CHAR_COLON: 58, /* : */\n CHAR_COMMA: 44, /* , */\n CHAR_DOT: 46, /* . */\n CHAR_DOUBLE_QUOTE: 34, /* \" */\n CHAR_EQUAL: 61, /* = */\n CHAR_EXCLAMATION_MARK: 33, /* ! */\n CHAR_FORM_FEED: 12, /* \\f */\n CHAR_FORWARD_SLASH: 47, /* / */\n CHAR_GRAVE_ACCENT: 96, /* ` */\n CHAR_HASH: 35, /* # */\n CHAR_HYPHEN_MINUS: 45, /* - */\n CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n CHAR_LEFT_CURLY_BRACE: 123, /* { */\n CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n CHAR_LINE_FEED: 10, /* \\n */\n CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n CHAR_PERCENT: 37, /* % */\n CHAR_PLUS: 43, /* + */\n CHAR_QUESTION_MARK: 63, /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n CHAR_SEMICOLON: 59, /* ; */\n CHAR_SINGLE_QUOTE: 39, /* ' */\n CHAR_SPACE: 32, /* */\n CHAR_TAB: 9, /* \\t */\n CHAR_UNDERSCORE: 95, /* _ */\n CHAR_VERTICAL_LINE: 124, /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n /**\n * Create EXTGLOB_CHARS\n */\n\n extglobChars(chars) {\n return {\n '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n '?': { type: 'qmark', open: '(?:', close: ')?' },\n '+': { type: 'plus', open: '(?:', close: ')+' },\n '*': { type: 'star', open: '(?:', close: ')*' },\n '@': { type: 'at', open: '(?:', close: ')' }\n };\n },\n\n /**\n * Create GLOB_CHARS\n */\n\n globChars(win32) {\n return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n }\n};\n",
|
|
10
|
-
"/*global navigator*/\n'use strict';\n\nconst {\n REGEX_BACKSLASH,\n REGEX_REMOVE_BACKSLASH,\n REGEX_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.isWindows = () => {\n if (typeof navigator !== 'undefined' && navigator.platform) {\n const platform = navigator.platform.toLowerCase();\n return platform === 'win32' || platform === 'windows';\n }\n\n if (typeof process !== 'undefined' && process.platform) {\n return process.platform === 'win32';\n }\n\n return false;\n};\n\nexports.removeBackslashes = str => {\n return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n return match === '\\\\' ? '' : match;\n });\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n const idx = input.lastIndexOf(char, lastIdx);\n if (idx === -1) return input;\n if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n let output = input;\n if (output.startsWith('./')) {\n output = output.slice(2);\n state.prefix = './';\n }\n return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n const prepend = options.contains ? '' : '^';\n const append = options.contains ? '' : '$';\n\n let output = `${prepend}(?:${input})${append}`;\n if (state.negated === true) {\n output = `(?:^(?!${output}).*$)`;\n }\n return output;\n};\n\nexports.basename = (path, { windows } = {}) => {\n const segs = path.split(windows ? /[\\\\/]/ : '/');\n const last = segs[segs.length - 1];\n\n if (last === '') {\n return segs[segs.length - 2];\n }\n\n return last;\n};\n",
|
|
11
|
-
"'use strict';\n\nconst utils = require('./utils');\nconst {\n CHAR_ASTERISK, /* * */\n CHAR_AT, /* @ */\n CHAR_BACKWARD_SLASH, /* \\ */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_EXCLAMATION_MARK, /* ! */\n CHAR_FORWARD_SLASH, /* / */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_PLUS, /* + */\n CHAR_QUESTION_MARK, /* ? */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_RIGHT_SQUARE_BRACKET /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n if (token.isPrefix !== true) {\n token.depth = token.isGlobstar ? Infinity : 1;\n }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n const opts = options || {};\n\n const length = input.length - 1;\n const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n const slashes = [];\n const tokens = [];\n const parts = [];\n\n let str = input;\n let index = -1;\n let start = 0;\n let lastIndex = 0;\n let isBrace = false;\n let isBracket = false;\n let isGlob = false;\n let isExtglob = false;\n let isGlobstar = false;\n let braceEscaped = false;\n let backslashes = false;\n let negated = false;\n let negatedExtglob = false;\n let finished = false;\n let braces = 0;\n let prev;\n let code;\n let token = { value: '', depth: 0, isGlob: false };\n\n const eos = () => index >= length;\n const peek = () => str.charCodeAt(index + 1);\n const advance = () => {\n prev = code;\n return str.charCodeAt(++index);\n };\n\n while (index < length) {\n code = advance();\n let next;\n\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braceEscaped = true;\n }\n continue;\n }\n\n if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n continue;\n }\n\n if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (braceEscaped !== true && code === CHAR_COMMA) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_RIGHT_CURLY_BRACE) {\n braces--;\n\n if (braces === 0) {\n braceEscaped = false;\n isBrace = token.isBrace = true;\n finished = true;\n break;\n }\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_FORWARD_SLASH) {\n slashes.push(index);\n tokens.push(token);\n token = { value: '', depth: 0, isGlob: false };\n\n if (finished === true) continue;\n if (prev === CHAR_DOT && index === (start + 1)) {\n start += 2;\n continue;\n }\n\n lastIndex = index + 1;\n continue;\n }\n\n if (opts.noext !== true) {\n const isExtglobChar = code === CHAR_PLUS\n || code === CHAR_AT\n || code === CHAR_ASTERISK\n || code === CHAR_QUESTION_MARK\n || code === CHAR_EXCLAMATION_MARK;\n\n if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n isExtglob = token.isExtglob = true;\n finished = true;\n if (code === CHAR_EXCLAMATION_MARK && index === start) {\n negatedExtglob = true;\n }\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n }\n\n if (code === CHAR_ASTERISK) {\n if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_QUESTION_MARK) {\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_LEFT_SQUARE_BRACKET) {\n while (eos() !== true && (next = advance())) {\n if (next === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n isBracket = token.isBracket = true;\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n negated = token.negated = true;\n start++;\n continue;\n }\n\n if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_LEFT_PARENTHESES) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n\n if (isGlob === true) {\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n }\n\n if (opts.noext === true) {\n isExtglob = false;\n isGlob = false;\n }\n\n let base = str;\n let prefix = '';\n let glob = '';\n\n if (start > 0) {\n prefix = str.slice(0, start);\n str = str.slice(start);\n lastIndex -= start;\n }\n\n if (base && isGlob === true && lastIndex > 0) {\n base = str.slice(0, lastIndex);\n glob = str.slice(lastIndex);\n } else if (isGlob === true) {\n base = '';\n glob = str;\n } else {\n base = str;\n }\n\n if (base && base !== '' && base !== '/' && base !== str) {\n if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n base = base.slice(0, -1);\n }\n }\n\n if (opts.unescape === true) {\n if (glob) glob = utils.removeBackslashes(glob);\n\n if (base && backslashes === true) {\n base = utils.removeBackslashes(base);\n }\n }\n\n const state = {\n prefix,\n input,\n start,\n base,\n glob,\n isBrace,\n isBracket,\n isGlob,\n isExtglob,\n isGlobstar,\n negated,\n negatedExtglob\n };\n\n if (opts.tokens === true) {\n state.maxDepth = 0;\n if (!isPathSeparator(code)) {\n tokens.push(token);\n }\n state.tokens = tokens;\n }\n\n if (opts.parts === true || opts.tokens === true) {\n let prevIndex;\n\n for (let idx = 0; idx < slashes.length; idx++) {\n const n = prevIndex ? prevIndex + 1 : start;\n const i = slashes[idx];\n const value = input.slice(n, i);\n if (opts.tokens) {\n if (idx === 0 && start !== 0) {\n tokens[idx].isPrefix = true;\n tokens[idx].value = prefix;\n } else {\n tokens[idx].value = value;\n }\n depth(tokens[idx]);\n state.maxDepth += tokens[idx].depth;\n }\n if (idx !== 0 || value !== '') {\n parts.push(value);\n }\n prevIndex = i;\n }\n\n if (prevIndex && prevIndex + 1 < input.length) {\n const value = input.slice(prevIndex + 1);\n parts.push(value);\n\n if (opts.tokens) {\n tokens[tokens.length - 1].value = value;\n depth(tokens[tokens.length - 1]);\n state.maxDepth += tokens[tokens.length - 1].depth;\n }\n }\n\n state.slashes = slashes;\n state.parts = parts;\n }\n\n return state;\n};\n\nmodule.exports = scan;\n",
|
|
12
|
-
"'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n POSIX_REGEX_SOURCE,\n REGEX_NON_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_BACKREF,\n REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n if (typeof options.expandRange === 'function') {\n return options.expandRange(...args, options);\n }\n\n args.sort();\n const value = `[${args.join('-')}]`;\n\n try {\n /* eslint-disable-next-line no-new */\n new RegExp(value);\n } catch (ex) {\n return args.map(v => utils.escapeRegex(v)).join('..');\n }\n\n return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n input = REPLACEMENTS[input] || input;\n\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n let len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n const tokens = [bos];\n\n const capture = opts.capture ? '' : '?:';\n\n // create constants based on platform, for windows or posix\n const PLATFORM_CHARS = constants.globChars(opts.windows);\n const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n const {\n DOT_LITERAL,\n PLUS_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n } = PLATFORM_CHARS;\n\n const globstar = opts => {\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const nodot = opts.dot ? '' : NO_DOT;\n const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n let star = opts.bash === true ? globstar(opts) : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n // minimatch options support\n if (typeof opts.noext === 'boolean') {\n opts.noextglob = opts.noext;\n }\n\n const state = {\n input,\n index: -1,\n start: 0,\n dot: opts.dot === true,\n consumed: '',\n output: '',\n prefix: '',\n backtrack: false,\n negated: false,\n brackets: 0,\n braces: 0,\n parens: 0,\n quotes: 0,\n globstar: false,\n tokens\n };\n\n input = utils.removePrefix(input, state);\n len = input.length;\n\n const extglobs = [];\n const braces = [];\n const stack = [];\n let prev = bos;\n let value;\n\n /**\n * Tokenizing helpers\n */\n\n const eos = () => state.index === len - 1;\n const peek = state.peek = (n = 1) => input[state.index + n];\n const advance = state.advance = () => input[++state.index] || '';\n const remaining = () => input.slice(state.index + 1);\n const consume = (value = '', num = 0) => {\n state.consumed += value;\n state.index += num;\n };\n\n const append = token => {\n state.output += token.output != null ? token.output : token.value;\n consume(token.value);\n };\n\n const negate = () => {\n let count = 1;\n\n while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n advance();\n state.start++;\n count++;\n }\n\n if (count % 2 === 0) {\n return false;\n }\n\n state.negated = true;\n state.start++;\n return true;\n };\n\n const increment = type => {\n state[type]++;\n stack.push(type);\n };\n\n const decrement = type => {\n state[type]--;\n stack.pop();\n };\n\n /**\n * Push tokens onto the tokens array. This helper speeds up\n * tokenizing by 1) helping us avoid backtracking as much as possible,\n * and 2) helping us avoid creating extra tokens when consecutive\n * characters are plain text. This improves performance and simplifies\n * lookbehinds.\n */\n\n const push = tok => {\n if (prev.type === 'globstar') {\n const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n state.output = state.output.slice(0, -prev.output.length);\n prev.type = 'star';\n prev.value = '*';\n prev.output = star;\n state.output += prev.output;\n }\n }\n\n if (extglobs.length && tok.type !== 'paren') {\n extglobs[extglobs.length - 1].inner += tok.value;\n }\n\n if (tok.value || tok.output) append(tok);\n if (prev && prev.type === 'text' && tok.type === 'text') {\n prev.output = (prev.output || prev.value) + tok.value;\n prev.value += tok.value;\n return;\n }\n\n tok.prev = prev;\n tokens.push(tok);\n prev = tok;\n };\n\n const extglobOpen = (type, value) => {\n const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n token.prev = prev;\n token.parens = state.parens;\n token.output = state.output;\n const output = (opts.capture ? '(' : '') + token.open;\n\n increment('parens');\n push({ type, value, output: state.output ? '' : ONE_CHAR });\n push({ type: 'paren', extglob: true, value: advance(), output });\n extglobs.push(token);\n };\n\n const extglobClose = token => {\n let output = token.close + (opts.capture ? ')' : '');\n let rest;\n\n if (token.type === 'negate') {\n let extglobStar = star;\n\n if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n extglobStar = globstar(opts);\n }\n\n if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n output = token.close = `)$))${extglobStar}`;\n }\n\n if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.\n // In this case, we need to parse the string and use it in the output of the original pattern.\n // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.\n //\n // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.\n const expression = parse(rest, { ...options, fastpaths: false }).output;\n\n output = token.close = `)${expression})${extglobStar})`;\n }\n\n if (token.prev.type === 'bos') {\n state.negatedExtglob = true;\n }\n }\n\n push({ type: 'paren', extglob: true, value, output });\n decrement('parens');\n };\n\n /**\n * Fast paths\n */\n\n if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n let backslashes = false;\n\n let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n if (first === '\\\\') {\n backslashes = true;\n return m;\n }\n\n if (first === '?') {\n if (esc) {\n return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n }\n if (index === 0) {\n return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n }\n return QMARK.repeat(chars.length);\n }\n\n if (first === '.') {\n return DOT_LITERAL.repeat(chars.length);\n }\n\n if (first === '*') {\n if (esc) {\n return esc + first + (rest ? star : '');\n }\n return star;\n }\n return esc ? m : `\\\\${m}`;\n });\n\n if (backslashes === true) {\n if (opts.unescape === true) {\n output = output.replace(/\\\\/g, '');\n } else {\n output = output.replace(/\\\\+/g, m => {\n return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n });\n }\n }\n\n if (output === input && opts.contains === true) {\n state.output = input;\n return state;\n }\n\n state.output = utils.wrapOutput(output, state, options);\n return state;\n }\n\n /**\n * Tokenize input until we reach end-of-string\n */\n\n while (!eos()) {\n value = advance();\n\n if (value === '\\u0000') {\n continue;\n }\n\n /**\n * Escaped characters\n */\n\n if (value === '\\\\') {\n const next = peek();\n\n if (next === '/' && opts.bash !== true) {\n continue;\n }\n\n if (next === '.' || next === ';') {\n continue;\n }\n\n if (!next) {\n value += '\\\\';\n push({ type: 'text', value });\n continue;\n }\n\n // collapse slashes to reduce potential for exploits\n const match = /^\\\\+/.exec(remaining());\n let slashes = 0;\n\n if (match && match[0].length > 2) {\n slashes = match[0].length;\n state.index += slashes;\n if (slashes % 2 !== 0) {\n value += '\\\\';\n }\n }\n\n if (opts.unescape === true) {\n value = advance();\n } else {\n value += advance();\n }\n\n if (state.brackets === 0) {\n push({ type: 'text', value });\n continue;\n }\n }\n\n /**\n * If we're inside a regex character class, continue\n * until we reach the closing bracket.\n */\n\n if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n if (opts.posix !== false && value === ':') {\n const inner = prev.value.slice(1);\n if (inner.includes('[')) {\n prev.posix = true;\n\n if (inner.includes(':')) {\n const idx = prev.value.lastIndexOf('[');\n const pre = prev.value.slice(0, idx);\n const rest = prev.value.slice(idx + 2);\n const posix = POSIX_REGEX_SOURCE[rest];\n if (posix) {\n prev.value = pre + posix;\n state.backtrack = true;\n advance();\n\n if (!bos.output && tokens.indexOf(prev) === 1) {\n bos.output = ONE_CHAR;\n }\n continue;\n }\n }\n }\n }\n\n if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n value = `\\\\${value}`;\n }\n\n if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n value = `\\\\${value}`;\n }\n\n if (opts.posix === true && value === '!' && prev.value === '[') {\n value = '^';\n }\n\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * If we're inside a quoted string, continue\n * until we reach the closing double quote.\n */\n\n if (state.quotes === 1 && value !== '\"') {\n value = utils.escapeRegex(value);\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * Double quotes\n */\n\n if (value === '\"') {\n state.quotes = state.quotes === 1 ? 0 : 1;\n if (opts.keepQuotes === true) {\n push({ type: 'text', value });\n }\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === '(') {\n increment('parens');\n push({ type: 'paren', value });\n continue;\n }\n\n if (value === ')') {\n if (state.parens === 0 && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '('));\n }\n\n const extglob = extglobs[extglobs.length - 1];\n if (extglob && state.parens === extglob.parens + 1) {\n extglobClose(extglobs.pop());\n continue;\n }\n\n push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n decrement('parens');\n continue;\n }\n\n /**\n * Square brackets\n */\n\n if (value === '[') {\n if (opts.nobracket === true || !remaining().includes(']')) {\n if (opts.nobracket !== true && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('closing', ']'));\n }\n\n value = `\\\\${value}`;\n } else {\n increment('brackets');\n }\n\n push({ type: 'bracket', value });\n continue;\n }\n\n if (value === ']') {\n if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n if (state.brackets === 0) {\n if (opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '['));\n }\n\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n decrement('brackets');\n\n const prevValue = prev.value.slice(1);\n if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n value = `/${value}`;\n }\n\n prev.value += value;\n append({ value });\n\n // when literal brackets are explicitly disabled\n // assume we should match with a regex character class\n if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n continue;\n }\n\n const escaped = utils.escapeRegex(prev.value);\n state.output = state.output.slice(0, -prev.value.length);\n\n // when literal brackets are explicitly enabled\n // assume we should escape the brackets to match literal characters\n if (opts.literalBrackets === true) {\n state.output += escaped;\n prev.value = escaped;\n continue;\n }\n\n // when the user specifies nothing, try to match both\n prev.value = `(${capture}${escaped}|${prev.value})`;\n state.output += prev.value;\n continue;\n }\n\n /**\n * Braces\n */\n\n if (value === '{' && opts.nobrace !== true) {\n increment('braces');\n\n const open = {\n type: 'brace',\n value,\n output: '(',\n outputIndex: state.output.length,\n tokensIndex: state.tokens.length\n };\n\n braces.push(open);\n push(open);\n continue;\n }\n\n if (value === '}') {\n const brace = braces[braces.length - 1];\n\n if (opts.nobrace === true || !brace) {\n push({ type: 'text', value, output: value });\n continue;\n }\n\n let output = ')';\n\n if (brace.dots === true) {\n const arr = tokens.slice();\n const range = [];\n\n for (let i = arr.length - 1; i >= 0; i--) {\n tokens.pop();\n if (arr[i].type === 'brace') {\n break;\n }\n if (arr[i].type !== 'dots') {\n range.unshift(arr[i].value);\n }\n }\n\n output = expandRange(range, opts);\n state.backtrack = true;\n }\n\n if (brace.comma !== true && brace.dots !== true) {\n const out = state.output.slice(0, brace.outputIndex);\n const toks = state.tokens.slice(brace.tokensIndex);\n brace.value = brace.output = '\\\\{';\n value = output = '\\\\}';\n state.output = out;\n for (const t of toks) {\n state.output += (t.output || t.value);\n }\n }\n\n push({ type: 'brace', value, output });\n decrement('braces');\n braces.pop();\n continue;\n }\n\n /**\n * Pipes\n */\n\n if (value === '|') {\n if (extglobs.length > 0) {\n extglobs[extglobs.length - 1].conditions++;\n }\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Commas\n */\n\n if (value === ',') {\n let output = value;\n\n const brace = braces[braces.length - 1];\n if (brace && stack[stack.length - 1] === 'braces') {\n brace.comma = true;\n output = '|';\n }\n\n push({ type: 'comma', value, output });\n continue;\n }\n\n /**\n * Slashes\n */\n\n if (value === '/') {\n // if the beginning of the glob is \"./\", advance the start\n // to the current index, and don't add the \"./\" characters\n // to the state. This greatly simplifies lookbehinds when\n // checking for BOS characters like \"!\" and \".\" (not \"./\")\n if (prev.type === 'dot' && state.index === state.start + 1) {\n state.start = state.index + 1;\n state.consumed = '';\n state.output = '';\n tokens.pop();\n prev = bos; // reset \"prev\" to the first token\n continue;\n }\n\n push({ type: 'slash', value, output: SLASH_LITERAL });\n continue;\n }\n\n /**\n * Dots\n */\n\n if (value === '.') {\n if (state.braces > 0 && prev.type === 'dot') {\n if (prev.value === '.') prev.output = DOT_LITERAL;\n const brace = braces[braces.length - 1];\n prev.type = 'dots';\n prev.output += value;\n prev.value += value;\n brace.dots = true;\n continue;\n }\n\n if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n push({ type: 'text', value, output: DOT_LITERAL });\n continue;\n }\n\n push({ type: 'dot', value, output: DOT_LITERAL });\n continue;\n }\n\n /**\n * Question marks\n */\n\n if (value === '?') {\n const isGroup = prev && prev.value === '(';\n if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('qmark', value);\n continue;\n }\n\n if (prev && prev.type === 'paren') {\n const next = peek();\n let output = value;\n\n if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n output = `\\\\${value}`;\n }\n\n push({ type: 'text', value, output });\n continue;\n }\n\n if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n push({ type: 'qmark', value, output: QMARK_NO_DOT });\n continue;\n }\n\n push({ type: 'qmark', value, output: QMARK });\n continue;\n }\n\n /**\n * Exclamation\n */\n\n if (value === '!') {\n if (opts.noextglob !== true && peek() === '(') {\n if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n extglobOpen('negate', value);\n continue;\n }\n }\n\n if (opts.nonegate !== true && state.index === 0) {\n negate();\n continue;\n }\n }\n\n /**\n * Plus\n */\n\n if (value === '+') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('plus', value);\n continue;\n }\n\n if ((prev && prev.value === '(') || opts.regex === false) {\n push({ type: 'plus', value, output: PLUS_LITERAL });\n continue;\n }\n\n if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n push({ type: 'plus', value });\n continue;\n }\n\n push({ type: 'plus', value: PLUS_LITERAL });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value === '@') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n push({ type: 'at', extglob: true, value, output: '' });\n continue;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value !== '*') {\n if (value === '$' || value === '^') {\n value = `\\\\${value}`;\n }\n\n const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n if (match) {\n value += match[0];\n state.index += match[0].length;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Stars\n */\n\n if (prev && (prev.type === 'globstar' || prev.star === true)) {\n prev.type = 'star';\n prev.star = true;\n prev.value += value;\n prev.output = star;\n state.backtrack = true;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n let rest = remaining();\n if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n extglobOpen('star', value);\n continue;\n }\n\n if (prev.type === 'star') {\n if (opts.noglobstar === true) {\n consume(value);\n continue;\n }\n\n const prior = prev.prev;\n const before = prior.prev;\n const isStart = prior.type === 'slash' || prior.type === 'bos';\n const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n // strip consecutive `/**/`\n while (rest.slice(0, 3) === '/**') {\n const after = input[state.index + 4];\n if (after && after !== '/') {\n break;\n }\n rest = rest.slice(3);\n consume('/**', 3);\n }\n\n if (prior.type === 'bos' && eos()) {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = globstar(opts);\n state.output = prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n prev.value += value;\n state.globstar = true;\n state.output += prior.output + prev.output;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n const end = rest[1] !== void 0 ? '|$' : '';\n\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n prev.value += value;\n\n state.output += prior.output + prev.output;\n state.globstar = true;\n\n consume(value + advance());\n\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n if (prior.type === 'bos' && rest[0] === '/') {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n state.output = prev.output;\n state.globstar = true;\n consume(value + advance());\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n // remove single star from output\n state.output = state.output.slice(0, -prev.output.length);\n\n // reset previous token to globstar\n prev.type = 'globstar';\n prev.output = globstar(opts);\n prev.value += value;\n\n // reset output with globstar\n state.output += prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n const token = { type: 'star', value, output: star };\n\n if (opts.bash === true) {\n token.output = '.*?';\n if (prev.type === 'bos' || prev.type === 'slash') {\n token.output = nodot + token.output;\n }\n push(token);\n continue;\n }\n\n if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n token.output = value;\n push(token);\n continue;\n }\n\n if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n if (prev.type === 'dot') {\n state.output += NO_DOT_SLASH;\n prev.output += NO_DOT_SLASH;\n\n } else if (opts.dot === true) {\n state.output += NO_DOTS_SLASH;\n prev.output += NO_DOTS_SLASH;\n\n } else {\n state.output += nodot;\n prev.output += nodot;\n }\n\n if (peek() !== '*') {\n state.output += ONE_CHAR;\n prev.output += ONE_CHAR;\n }\n }\n\n push(token);\n }\n\n while (state.brackets > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n state.output = utils.escapeLast(state.output, '[');\n decrement('brackets');\n }\n\n while (state.parens > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n state.output = utils.escapeLast(state.output, '(');\n decrement('parens');\n }\n\n while (state.braces > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n state.output = utils.escapeLast(state.output, '{');\n decrement('braces');\n }\n\n if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n }\n\n // rebuild the output if we had to backtrack at any point\n if (state.backtrack === true) {\n state.output = '';\n\n for (const token of state.tokens) {\n state.output += token.output != null ? token.output : token.value;\n\n if (token.suffix) {\n state.output += token.suffix;\n }\n }\n }\n\n return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n const len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n input = REPLACEMENTS[input] || input;\n\n // create constants based on platform, for windows or posix\n const {\n DOT_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOTS_SLASH,\n STAR,\n START_ANCHOR\n } = constants.globChars(opts.windows);\n\n const nodot = opts.dot ? NO_DOTS : NO_DOT;\n const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n const capture = opts.capture ? '' : '?:';\n const state = { negated: false, prefix: '' };\n let star = opts.bash === true ? '.*?' : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n const globstar = opts => {\n if (opts.noglobstar === true) return star;\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const create = str => {\n switch (str) {\n case '*':\n return `${nodot}${ONE_CHAR}${star}`;\n\n case '.*':\n return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*.*':\n return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*/*':\n return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n case '**':\n return nodot + globstar(opts);\n\n case '**/*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n case '**/*.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '**/.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n default: {\n const match = /^(.*?)\\.(\\w+)$/.exec(str);\n if (!match) return;\n\n const source = create(match[1]);\n if (!source) return;\n\n return source + DOT_LITERAL + match[2];\n }\n }\n };\n\n const output = utils.removePrefix(input, state);\n let source = create(output);\n\n if (source && opts.strictSlashes !== true) {\n source += `${SLASH_LITERAL}?`;\n }\n\n return source;\n};\n\nmodule.exports = parse;\n",
|
|
13
|
-
"'use strict';\n\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n if (Array.isArray(glob)) {\n const fns = glob.map(input => picomatch(input, options, returnState));\n const arrayMatcher = str => {\n for (const isMatch of fns) {\n const state = isMatch(str);\n if (state) return state;\n }\n return false;\n };\n return arrayMatcher;\n }\n\n const isState = isObject(glob) && glob.tokens && glob.input;\n\n if (glob === '' || (typeof glob !== 'string' && !isState)) {\n throw new TypeError('Expected pattern to be a non-empty string');\n }\n\n const opts = options || {};\n const posix = opts.windows;\n const regex = isState\n ? picomatch.compileRe(glob, options)\n : picomatch.makeRe(glob, options, false, true);\n\n const state = regex.state;\n delete regex.state;\n\n let isIgnored = () => false;\n if (opts.ignore) {\n const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n }\n\n const matcher = (input, returnObject = false) => {\n const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n if (typeof opts.onResult === 'function') {\n opts.onResult(result);\n }\n\n if (isMatch === false) {\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (isIgnored(input)) {\n if (typeof opts.onIgnore === 'function') {\n opts.onIgnore(result);\n }\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (typeof opts.onMatch === 'function') {\n opts.onMatch(result);\n }\n return returnObject ? result : true;\n };\n\n if (returnState) {\n matcher.state = state;\n }\n\n return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected input to be a string');\n }\n\n if (input === '') {\n return { isMatch: false, output: '' };\n }\n\n const opts = options || {};\n const format = opts.format || (posix ? utils.toPosixSlashes : null);\n let match = input === glob;\n let output = (match && format) ? format(input) : input;\n\n if (match === false) {\n output = format ? format(input) : input;\n match = output === glob;\n }\n\n if (match === false || opts.capture === true) {\n if (opts.matchBase === true || opts.basename === true) {\n match = picomatch.matchBase(input, regex, options, posix);\n } else {\n match = regex.exec(output);\n }\n }\n\n return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options) => {\n const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n return regex.test(utils.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n * input: '!./foo/*.js',\n * start: 3,\n * base: 'foo',\n * glob: '*.js',\n * isBrace: false,\n * isBracket: false,\n * isGlob: true,\n * isExtglob: false,\n * isGlobstar: false,\n * negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n if (returnOutput === true) {\n return state.output;\n }\n\n const opts = options || {};\n const prepend = opts.contains ? '' : '^';\n const append = opts.contains ? '' : '$';\n\n let source = `${prepend}(?:${state.output})${append}`;\n if (state && state.negated === true) {\n source = `^(?!${source}).*$`;\n }\n\n const regex = picomatch.toRegex(source, options);\n if (returnState === true) {\n regex.state = state;\n }\n\n return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n if (!input || typeof input !== 'string') {\n throw new TypeError('Expected a non-empty string');\n }\n\n let parsed = { negated: false, fastpaths: true };\n\n if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n parsed.output = parse.fastpaths(input, options);\n }\n\n if (!parsed.output) {\n parsed = parse(input, options);\n }\n\n return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n try {\n const opts = options || {};\n return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n } catch (err) {\n if (options && options.debug === true) throw err;\n return /$^/;\n }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n",
|
|
14
|
-
"'use strict';\n\nconst pico = require('./lib/picomatch');\nconst utils = require('./lib/utils');\n\nfunction picomatch(glob, options, returnState = false) {\n // default to os.platform()\n if (options && (options.windows === null || options.windows === undefined)) {\n // don't mutate the original options object\n options = { ...options, windows: utils.isWindows() };\n }\n\n return pico(glob, options, returnState);\n}\n\nObject.assign(picomatch, pico);\nmodule.exports = picomatch;\n",
|
|
15
|
-
"//#region rolldown:runtime\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __copyProps = (to, from, except, desc) => {\n\tif (from && typeof from === \"object\" || typeof from === \"function\") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {\n\t\tkey = keys[i];\n\t\tif (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {\n\t\t\tget: ((k) => from[k]).bind(null, key),\n\t\t\tenumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable\n\t\t});\n\t}\n\treturn to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", {\n\tvalue: mod,\n\tenumerable: true\n}) : target, mod));\n\n//#endregion\nconst path = __toESM(require(\"path\"));\nconst fs = __toESM(require(\"fs\"));\n\n//#region src/utils.ts\nfunction cleanPath(path$1) {\n\tlet normalized = (0, path.normalize)(path$1);\n\tif (normalized.length > 1 && normalized[normalized.length - 1] === path.sep) normalized = normalized.substring(0, normalized.length - 1);\n\treturn normalized;\n}\nconst SLASHES_REGEX = /[\\\\/]/g;\nfunction convertSlashes(path$1, separator) {\n\treturn path$1.replace(SLASHES_REGEX, separator);\n}\nconst WINDOWS_ROOT_DIR_REGEX = /^[a-z]:[\\\\/]$/i;\nfunction isRootDirectory(path$1) {\n\treturn path$1 === \"/\" || WINDOWS_ROOT_DIR_REGEX.test(path$1);\n}\nfunction normalizePath(path$1, options) {\n\tconst { resolvePaths, normalizePath: normalizePath$1, pathSeparator } = options;\n\tconst pathNeedsCleaning = process.platform === \"win32\" && path$1.includes(\"/\") || path$1.startsWith(\".\");\n\tif (resolvePaths) path$1 = (0, path.resolve)(path$1);\n\tif (normalizePath$1 || pathNeedsCleaning) path$1 = cleanPath(path$1);\n\tif (path$1 === \".\") return \"\";\n\tconst needsSeperator = path$1[path$1.length - 1] !== pathSeparator;\n\treturn convertSlashes(needsSeperator ? path$1 + pathSeparator : path$1, pathSeparator);\n}\n\n//#endregion\n//#region src/api/functions/join-path.ts\nfunction joinPathWithBasePath(filename, directoryPath) {\n\treturn directoryPath + filename;\n}\nfunction joinPathWithRelativePath(root, options) {\n\treturn function(filename, directoryPath) {\n\t\tconst sameRoot = directoryPath.startsWith(root);\n\t\tif (sameRoot) return directoryPath.slice(root.length) + filename;\n\t\telse return convertSlashes((0, path.relative)(root, directoryPath), options.pathSeparator) + options.pathSeparator + filename;\n\t};\n}\nfunction joinPath(filename) {\n\treturn filename;\n}\nfunction joinDirectoryPath(filename, directoryPath, separator) {\n\treturn directoryPath + filename + separator;\n}\nfunction build$7(root, options) {\n\tconst { relativePaths, includeBasePath } = options;\n\treturn relativePaths && root ? joinPathWithRelativePath(root, options) : includeBasePath ? joinPathWithBasePath : joinPath;\n}\n\n//#endregion\n//#region src/api/functions/push-directory.ts\nfunction pushDirectoryWithRelativePath(root) {\n\treturn function(directoryPath, paths) {\n\t\tpaths.push(directoryPath.substring(root.length) || \".\");\n\t};\n}\nfunction pushDirectoryFilterWithRelativePath(root) {\n\treturn function(directoryPath, paths, filters) {\n\t\tconst relativePath = directoryPath.substring(root.length) || \".\";\n\t\tif (filters.every((filter) => filter(relativePath, true))) paths.push(relativePath);\n\t};\n}\nconst pushDirectory = (directoryPath, paths) => {\n\tpaths.push(directoryPath || \".\");\n};\nconst pushDirectoryFilter = (directoryPath, paths, filters) => {\n\tconst path$1 = directoryPath || \".\";\n\tif (filters.every((filter) => filter(path$1, true))) paths.push(path$1);\n};\nconst empty$2 = () => {};\nfunction build$6(root, options) {\n\tconst { includeDirs, filters, relativePaths } = options;\n\tif (!includeDirs) return empty$2;\n\tif (relativePaths) return filters && filters.length ? pushDirectoryFilterWithRelativePath(root) : pushDirectoryWithRelativePath(root);\n\treturn filters && filters.length ? pushDirectoryFilter : pushDirectory;\n}\n\n//#endregion\n//#region src/api/functions/push-file.ts\nconst pushFileFilterAndCount = (filename, _paths, counts, filters) => {\n\tif (filters.every((filter) => filter(filename, false))) counts.files++;\n};\nconst pushFileFilter = (filename, paths, _counts, filters) => {\n\tif (filters.every((filter) => filter(filename, false))) paths.push(filename);\n};\nconst pushFileCount = (_filename, _paths, counts, _filters) => {\n\tcounts.files++;\n};\nconst pushFile = (filename, paths) => {\n\tpaths.push(filename);\n};\nconst empty$1 = () => {};\nfunction build$5(options) {\n\tconst { excludeFiles, filters, onlyCounts } = options;\n\tif (excludeFiles) return empty$1;\n\tif (filters && filters.length) return onlyCounts ? pushFileFilterAndCount : pushFileFilter;\n\telse if (onlyCounts) return pushFileCount;\n\telse return pushFile;\n}\n\n//#endregion\n//#region src/api/functions/get-array.ts\nconst getArray = (paths) => {\n\treturn paths;\n};\nconst getArrayGroup = () => {\n\treturn [\"\"].slice(0, 0);\n};\nfunction build$4(options) {\n\treturn options.group ? getArrayGroup : getArray;\n}\n\n//#endregion\n//#region src/api/functions/group-files.ts\nconst groupFiles = (groups, directory, files) => {\n\tgroups.push({\n\t\tdirectory,\n\t\tfiles,\n\t\tdir: directory\n\t});\n};\nconst empty = () => {};\nfunction build$3(options) {\n\treturn options.group ? groupFiles : empty;\n}\n\n//#endregion\n//#region src/api/functions/resolve-symlink.ts\nconst resolveSymlinksAsync = function(path$1, state, callback$1) {\n\tconst { queue, fs: fs$1, options: { suppressErrors } } = state;\n\tqueue.enqueue();\n\tfs$1.realpath(path$1, (error, resolvedPath) => {\n\t\tif (error) return queue.dequeue(suppressErrors ? null : error, state);\n\t\tfs$1.stat(resolvedPath, (error$1, stat) => {\n\t\t\tif (error$1) return queue.dequeue(suppressErrors ? null : error$1, state);\n\t\t\tif (stat.isDirectory() && isRecursive(path$1, resolvedPath, state)) return queue.dequeue(null, state);\n\t\t\tcallback$1(stat, resolvedPath);\n\t\t\tqueue.dequeue(null, state);\n\t\t});\n\t});\n};\nconst resolveSymlinks = function(path$1, state, callback$1) {\n\tconst { queue, fs: fs$1, options: { suppressErrors } } = state;\n\tqueue.enqueue();\n\ttry {\n\t\tconst resolvedPath = fs$1.realpathSync(path$1);\n\t\tconst stat = fs$1.statSync(resolvedPath);\n\t\tif (stat.isDirectory() && isRecursive(path$1, resolvedPath, state)) return;\n\t\tcallback$1(stat, resolvedPath);\n\t} catch (e) {\n\t\tif (!suppressErrors) throw e;\n\t}\n};\nfunction build$2(options, isSynchronous) {\n\tif (!options.resolveSymlinks || options.excludeSymlinks) return null;\n\treturn isSynchronous ? resolveSymlinks : resolveSymlinksAsync;\n}\nfunction isRecursive(path$1, resolved, state) {\n\tif (state.options.useRealPaths) return isRecursiveUsingRealPaths(resolved, state);\n\tlet parent = (0, path.dirname)(path$1);\n\tlet depth = 1;\n\twhile (parent !== state.root && depth < 2) {\n\t\tconst resolvedPath = state.symlinks.get(parent);\n\t\tconst isSameRoot = !!resolvedPath && (resolvedPath === resolved || resolvedPath.startsWith(resolved) || resolved.startsWith(resolvedPath));\n\t\tif (isSameRoot) depth++;\n\t\telse parent = (0, path.dirname)(parent);\n\t}\n\tstate.symlinks.set(path$1, resolved);\n\treturn depth > 1;\n}\nfunction isRecursiveUsingRealPaths(resolved, state) {\n\treturn state.visited.includes(resolved + state.options.pathSeparator);\n}\n\n//#endregion\n//#region src/api/functions/invoke-callback.ts\nconst onlyCountsSync = (state) => {\n\treturn state.counts;\n};\nconst groupsSync = (state) => {\n\treturn state.groups;\n};\nconst defaultSync = (state) => {\n\treturn state.paths;\n};\nconst limitFilesSync = (state) => {\n\treturn state.paths.slice(0, state.options.maxFiles);\n};\nconst onlyCountsAsync = (state, error, callback$1) => {\n\treport(error, callback$1, state.counts, state.options.suppressErrors);\n\treturn null;\n};\nconst defaultAsync = (state, error, callback$1) => {\n\treport(error, callback$1, state.paths, state.options.suppressErrors);\n\treturn null;\n};\nconst limitFilesAsync = (state, error, callback$1) => {\n\treport(error, callback$1, state.paths.slice(0, state.options.maxFiles), state.options.suppressErrors);\n\treturn null;\n};\nconst groupsAsync = (state, error, callback$1) => {\n\treport(error, callback$1, state.groups, state.options.suppressErrors);\n\treturn null;\n};\nfunction report(error, callback$1, output, suppressErrors) {\n\tif (error && !suppressErrors) callback$1(error, output);\n\telse callback$1(null, output);\n}\nfunction build$1(options, isSynchronous) {\n\tconst { onlyCounts, group, maxFiles } = options;\n\tif (onlyCounts) return isSynchronous ? onlyCountsSync : onlyCountsAsync;\n\telse if (group) return isSynchronous ? groupsSync : groupsAsync;\n\telse if (maxFiles) return isSynchronous ? limitFilesSync : limitFilesAsync;\n\telse return isSynchronous ? defaultSync : defaultAsync;\n}\n\n//#endregion\n//#region src/api/functions/walk-directory.ts\nconst readdirOpts = { withFileTypes: true };\nconst walkAsync = (state, crawlPath, directoryPath, currentDepth, callback$1) => {\n\tstate.queue.enqueue();\n\tif (currentDepth < 0) return state.queue.dequeue(null, state);\n\tconst { fs: fs$1 } = state;\n\tstate.visited.push(crawlPath);\n\tstate.counts.directories++;\n\tfs$1.readdir(crawlPath || \".\", readdirOpts, (error, entries = []) => {\n\t\tcallback$1(entries, directoryPath, currentDepth);\n\t\tstate.queue.dequeue(state.options.suppressErrors ? null : error, state);\n\t});\n};\nconst walkSync = (state, crawlPath, directoryPath, currentDepth, callback$1) => {\n\tconst { fs: fs$1 } = state;\n\tif (currentDepth < 0) return;\n\tstate.visited.push(crawlPath);\n\tstate.counts.directories++;\n\tlet entries = [];\n\ttry {\n\t\tentries = fs$1.readdirSync(crawlPath || \".\", readdirOpts);\n\t} catch (e) {\n\t\tif (!state.options.suppressErrors) throw e;\n\t}\n\tcallback$1(entries, directoryPath, currentDepth);\n};\nfunction build(isSynchronous) {\n\treturn isSynchronous ? walkSync : walkAsync;\n}\n\n//#endregion\n//#region src/api/queue.ts\n/**\n* This is a custom stateless queue to track concurrent async fs calls.\n* It increments a counter whenever a call is queued and decrements it\n* as soon as it completes. When the counter hits 0, it calls onQueueEmpty.\n*/\nvar Queue = class {\n\tcount = 0;\n\tconstructor(onQueueEmpty) {\n\t\tthis.onQueueEmpty = onQueueEmpty;\n\t}\n\tenqueue() {\n\t\tthis.count++;\n\t\treturn this.count;\n\t}\n\tdequeue(error, output) {\n\t\tif (this.onQueueEmpty && (--this.count <= 0 || error)) {\n\t\t\tthis.onQueueEmpty(error, output);\n\t\t\tif (error) {\n\t\t\t\toutput.controller.abort();\n\t\t\t\tthis.onQueueEmpty = void 0;\n\t\t\t}\n\t\t}\n\t}\n};\n\n//#endregion\n//#region src/api/counter.ts\nvar Counter = class {\n\t_files = 0;\n\t_directories = 0;\n\tset files(num) {\n\t\tthis._files = num;\n\t}\n\tget files() {\n\t\treturn this._files;\n\t}\n\tset directories(num) {\n\t\tthis._directories = num;\n\t}\n\tget directories() {\n\t\treturn this._directories;\n\t}\n\t/**\n\t* @deprecated use `directories` instead\n\t*/\n\t/* c8 ignore next 3 */\n\tget dirs() {\n\t\treturn this._directories;\n\t}\n};\n\n//#endregion\n//#region src/api/aborter.ts\n/**\n* AbortController is not supported on Node 14 so we use this until we can drop\n* support for Node 14.\n*/\nvar Aborter = class {\n\taborted = false;\n\tabort() {\n\t\tthis.aborted = true;\n\t}\n};\n\n//#endregion\n//#region src/api/walker.ts\nvar Walker = class {\n\troot;\n\tisSynchronous;\n\tstate;\n\tjoinPath;\n\tpushDirectory;\n\tpushFile;\n\tgetArray;\n\tgroupFiles;\n\tresolveSymlink;\n\twalkDirectory;\n\tcallbackInvoker;\n\tconstructor(root, options, callback$1) {\n\t\tthis.isSynchronous = !callback$1;\n\t\tthis.callbackInvoker = build$1(options, this.isSynchronous);\n\t\tthis.root = normalizePath(root, options);\n\t\tthis.state = {\n\t\t\troot: isRootDirectory(this.root) ? this.root : this.root.slice(0, -1),\n\t\t\tpaths: [\"\"].slice(0, 0),\n\t\t\tgroups: [],\n\t\t\tcounts: new Counter(),\n\t\t\toptions,\n\t\t\tqueue: new Queue((error, state) => this.callbackInvoker(state, error, callback$1)),\n\t\t\tsymlinks: /* @__PURE__ */ new Map(),\n\t\t\tvisited: [\"\"].slice(0, 0),\n\t\t\tcontroller: new Aborter(),\n\t\t\tfs: options.fs || fs\n\t\t};\n\t\tthis.joinPath = build$7(this.root, options);\n\t\tthis.pushDirectory = build$6(this.root, options);\n\t\tthis.pushFile = build$5(options);\n\t\tthis.getArray = build$4(options);\n\t\tthis.groupFiles = build$3(options);\n\t\tthis.resolveSymlink = build$2(options, this.isSynchronous);\n\t\tthis.walkDirectory = build(this.isSynchronous);\n\t}\n\tstart() {\n\t\tthis.pushDirectory(this.root, this.state.paths, this.state.options.filters);\n\t\tthis.walkDirectory(this.state, this.root, this.root, this.state.options.maxDepth, this.walk);\n\t\treturn this.isSynchronous ? this.callbackInvoker(this.state, null) : null;\n\t}\n\twalk = (entries, directoryPath, depth) => {\n\t\tconst { paths, options: { filters, resolveSymlinks: resolveSymlinks$1, excludeSymlinks, exclude, maxFiles, signal, useRealPaths, pathSeparator }, controller } = this.state;\n\t\tif (controller.aborted || signal && signal.aborted || maxFiles && paths.length > maxFiles) return;\n\t\tconst files = this.getArray(this.state.paths);\n\t\tfor (let i = 0; i < entries.length; ++i) {\n\t\t\tconst entry = entries[i];\n\t\t\tif (entry.isFile() || entry.isSymbolicLink() && !resolveSymlinks$1 && !excludeSymlinks) {\n\t\t\t\tconst filename = this.joinPath(entry.name, directoryPath);\n\t\t\t\tthis.pushFile(filename, files, this.state.counts, filters);\n\t\t\t} else if (entry.isDirectory()) {\n\t\t\t\tlet path$1 = joinDirectoryPath(entry.name, directoryPath, this.state.options.pathSeparator);\n\t\t\t\tif (exclude && exclude(entry.name, path$1)) continue;\n\t\t\t\tthis.pushDirectory(path$1, paths, filters);\n\t\t\t\tthis.walkDirectory(this.state, path$1, path$1, depth - 1, this.walk);\n\t\t\t} else if (this.resolveSymlink && entry.isSymbolicLink()) {\n\t\t\t\tlet path$1 = joinPathWithBasePath(entry.name, directoryPath);\n\t\t\t\tthis.resolveSymlink(path$1, this.state, (stat, resolvedPath) => {\n\t\t\t\t\tif (stat.isDirectory()) {\n\t\t\t\t\t\tresolvedPath = normalizePath(resolvedPath, this.state.options);\n\t\t\t\t\t\tif (exclude && exclude(entry.name, useRealPaths ? resolvedPath : path$1 + pathSeparator)) return;\n\t\t\t\t\t\tthis.walkDirectory(this.state, resolvedPath, useRealPaths ? resolvedPath : path$1 + pathSeparator, depth - 1, this.walk);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolvedPath = useRealPaths ? resolvedPath : path$1;\n\t\t\t\t\t\tconst filename = (0, path.basename)(resolvedPath);\n\t\t\t\t\t\tconst directoryPath$1 = normalizePath((0, path.dirname)(resolvedPath), this.state.options);\n\t\t\t\t\t\tresolvedPath = this.joinPath(filename, directoryPath$1);\n\t\t\t\t\t\tthis.pushFile(resolvedPath, files, this.state.counts, filters);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tthis.groupFiles(this.state.groups, directoryPath, files);\n\t};\n};\n\n//#endregion\n//#region src/api/async.ts\nfunction promise(root, options) {\n\treturn new Promise((resolve$1, reject) => {\n\t\tcallback(root, options, (err, output) => {\n\t\t\tif (err) return reject(err);\n\t\t\tresolve$1(output);\n\t\t});\n\t});\n}\nfunction callback(root, options, callback$1) {\n\tlet walker = new Walker(root, options, callback$1);\n\twalker.start();\n}\n\n//#endregion\n//#region src/api/sync.ts\nfunction sync(root, options) {\n\tconst walker = new Walker(root, options);\n\treturn walker.start();\n}\n\n//#endregion\n//#region src/builder/api-builder.ts\nvar APIBuilder = class {\n\tconstructor(root, options) {\n\t\tthis.root = root;\n\t\tthis.options = options;\n\t}\n\twithPromise() {\n\t\treturn promise(this.root, this.options);\n\t}\n\twithCallback(cb) {\n\t\tcallback(this.root, this.options, cb);\n\t}\n\tsync() {\n\t\treturn sync(this.root, this.options);\n\t}\n};\n\n//#endregion\n//#region src/builder/index.ts\nlet pm = null;\n/* c8 ignore next 6 */\ntry {\n\trequire.resolve(\"picomatch\");\n\tpm = require(\"picomatch\");\n} catch {}\nvar Builder = class {\n\tglobCache = {};\n\toptions = {\n\t\tmaxDepth: Infinity,\n\t\tsuppressErrors: true,\n\t\tpathSeparator: path.sep,\n\t\tfilters: []\n\t};\n\tglobFunction;\n\tconstructor(options) {\n\t\tthis.options = {\n\t\t\t...this.options,\n\t\t\t...options\n\t\t};\n\t\tthis.globFunction = this.options.globFunction;\n\t}\n\tgroup() {\n\t\tthis.options.group = true;\n\t\treturn this;\n\t}\n\twithPathSeparator(separator) {\n\t\tthis.options.pathSeparator = separator;\n\t\treturn this;\n\t}\n\twithBasePath() {\n\t\tthis.options.includeBasePath = true;\n\t\treturn this;\n\t}\n\twithRelativePaths() {\n\t\tthis.options.relativePaths = true;\n\t\treturn this;\n\t}\n\twithDirs() {\n\t\tthis.options.includeDirs = true;\n\t\treturn this;\n\t}\n\twithMaxDepth(depth) {\n\t\tthis.options.maxDepth = depth;\n\t\treturn this;\n\t}\n\twithMaxFiles(limit) {\n\t\tthis.options.maxFiles = limit;\n\t\treturn this;\n\t}\n\twithFullPaths() {\n\t\tthis.options.resolvePaths = true;\n\t\tthis.options.includeBasePath = true;\n\t\treturn this;\n\t}\n\twithErrors() {\n\t\tthis.options.suppressErrors = false;\n\t\treturn this;\n\t}\n\twithSymlinks({ resolvePaths = true } = {}) {\n\t\tthis.options.resolveSymlinks = true;\n\t\tthis.options.useRealPaths = resolvePaths;\n\t\treturn this.withFullPaths();\n\t}\n\twithAbortSignal(signal) {\n\t\tthis.options.signal = signal;\n\t\treturn this;\n\t}\n\tnormalize() {\n\t\tthis.options.normalizePath = true;\n\t\treturn this;\n\t}\n\tfilter(predicate) {\n\t\tthis.options.filters.push(predicate);\n\t\treturn this;\n\t}\n\tonlyDirs() {\n\t\tthis.options.excludeFiles = true;\n\t\tthis.options.includeDirs = true;\n\t\treturn this;\n\t}\n\texclude(predicate) {\n\t\tthis.options.exclude = predicate;\n\t\treturn this;\n\t}\n\tonlyCounts() {\n\t\tthis.options.onlyCounts = true;\n\t\treturn this;\n\t}\n\tcrawl(root) {\n\t\treturn new APIBuilder(root || \".\", this.options);\n\t}\n\twithGlobFunction(fn) {\n\t\tthis.globFunction = fn;\n\t\treturn this;\n\t}\n\t/**\n\t* @deprecated Pass options using the constructor instead:\n\t* ```ts\n\t* new fdir(options).crawl(\"/path/to/root\");\n\t* ```\n\t* This method will be removed in v7.0\n\t*/\n\t/* c8 ignore next 4 */\n\tcrawlWithOptions(root, options) {\n\t\tthis.options = {\n\t\t\t...this.options,\n\t\t\t...options\n\t\t};\n\t\treturn new APIBuilder(root || \".\", this.options);\n\t}\n\tglob(...patterns) {\n\t\tif (this.globFunction) return this.globWithOptions(patterns);\n\t\treturn this.globWithOptions(patterns, ...[{ dot: true }]);\n\t}\n\tglobWithOptions(patterns, ...options) {\n\t\tconst globFn = this.globFunction || pm;\n\t\t/* c8 ignore next 5 */\n\t\tif (!globFn) throw new Error(\"Please specify a glob function to use glob matching.\");\n\t\tvar isMatch = this.globCache[patterns.join(\"\\0\")];\n\t\tif (!isMatch) {\n\t\t\tisMatch = globFn(patterns, ...options);\n\t\t\tthis.globCache[patterns.join(\"\\0\")] = isMatch;\n\t\t}\n\t\tthis.options.filters.push((path$1) => isMatch(path$1));\n\t\treturn this;\n\t}\n};\n\n//#endregion\nexports.fdir = Builder;",
|
|
16
|
-
"const { fdir: Fdir } = require('fdir')\nconst path = require('path')\nconst picomatch = require('picomatch')\n\nclass Ls {\n constructor (directory = './', envFile = ['.env*'], excludeEnvFile = []) {\n this.ignore = ['node_modules/**', '.git/**']\n\n this.cwd = path.resolve(directory)\n this.envFile = envFile\n this.excludeEnvFile = excludeEnvFile\n }\n\n run () {\n return this._filepaths()\n }\n\n _filepaths () {\n const exclude = picomatch(this._exclude())\n const include = picomatch(this._patterns(), {\n ignore: this._exclude()\n })\n\n return new Fdir()\n .withRelativePaths()\n .exclude((dir, path) => exclude(path))\n .filter((path) => include(path))\n .crawl(this.cwd)\n .sync()\n }\n\n _patterns () {\n if (!Array.isArray(this.envFile)) {\n return [`**/${this.envFile}`]\n }\n\n return this.envFile.map(part => `**/${part}`)\n }\n\n _excludePatterns () {\n if (!Array.isArray(this.excludeEnvFile)) {\n return [`**/${this.excludeEnvFile}`]\n }\n\n return this.excludeEnvFile.map(part => `**/${part}`)\n }\n\n _exclude () {\n if (this._excludePatterns().length > 0) {\n return this.ignore.concat(this._excludePatterns())\n } else {\n return this.ignore\n }\n }\n}\n\nmodule.exports = Ls\n",
|
|
17
|
-
"const fs = require('fs')\n\nconst ENCODING = 'utf8'\n\nfunction readFileX (filepath, encoding = null) {\n if (!encoding) {\n encoding = ENCODING\n }\n\n return fs.readFileSync(filepath, encoding) // utf8 default so it returns a string\n}\n\nfunction writeFileX (filepath, str) {\n return fs.writeFileSync(filepath, str, ENCODING) // utf8 always\n}\n\nconst fsx = {\n chmodSync: fs.chmodSync,\n existsSync: fs.existsSync,\n readdirSync: fs.readdirSync,\n readFileSync: fs.readFileSync,\n writeFileSync: fs.writeFileSync,\n appendFileSync: fs.appendFileSync,\n\n // fsx special commands\n readFileX,\n writeFileX\n}\n\nmodule.exports = fsx\n",
|
|
18
|
-
"const fs = require('fs')\nconst path = require('path')\nconst os = require('os')\nconst crypto = require('crypto')\nconst packageJson = require('../package.json')\n\nconst version = packageJson.version\n\n// Array of tips to display randomly\nconst TIPS = [\n '🔐 encrypt with Dotenvx: https://dotenvx.com',\n '🔐 prevent committing .env to code: https://dotenvx.com/precommit',\n '🔐 prevent building .env in docker: https://dotenvx.com/prebuild',\n '📡 add observability to secrets: https://dotenvx.com/ops',\n '👥 sync secrets across teammates & machines: https://dotenvx.com/ops',\n '🗂️ backup and recover secrets: https://dotenvx.com/ops',\n '✅ audit secrets and track compliance: https://dotenvx.com/ops',\n '🔄 add secrets lifecycle management: https://dotenvx.com/ops',\n '🔑 add access controls to secrets: https://dotenvx.com/ops',\n '🛠️ run anywhere with `dotenvx run -- yourcommand`',\n '⚙️ specify custom .env file path with { path: \\'/custom/path/.env\\' }',\n '⚙️ enable debug logging with { debug: true }',\n '⚙️ override existing env vars with { override: true }',\n '⚙️ suppress all logs with { quiet: true }',\n '⚙️ write to custom object with { processEnv: myObject }',\n '⚙️ load multiple .env files with { path: [\\'.env.local\\', \\'.env\\'] }'\n]\n\n// Get a random tip from the tips array\nfunction _getRandomTip () {\n return TIPS[Math.floor(Math.random() * TIPS.length)]\n}\n\nfunction parseBoolean (value) {\n if (typeof value === 'string') {\n return !['false', '0', 'no', 'off', ''].includes(value.toLowerCase())\n }\n return Boolean(value)\n}\n\nfunction supportsAnsi () {\n return process.stdout.isTTY // && process.env.TERM !== 'dumb'\n}\n\nfunction dim (text) {\n return supportsAnsi() ? `\\x1b[2m${text}\\x1b[0m` : text\n}\n\nconst LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\n// Parse src into an Object\nfunction parse (src) {\n const obj = {}\n\n // Convert buffer to string\n let lines = src.toString()\n\n // Convert line breaks to same format\n lines = lines.replace(/\\r\\n?/mg, '\\n')\n\n let match\n while ((match = LINE.exec(lines)) != null) {\n const key = match[1]\n\n // Default undefined or null to empty string\n let value = (match[2] || '')\n\n // Remove whitespace\n value = value.trim()\n\n // Check if double quoted\n const maybeQuote = value[0]\n\n // Remove surrounding quotes\n value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/mg, '$2')\n\n // Expand newlines if double quoted\n if (maybeQuote === '\"') {\n value = value.replace(/\\\\n/g, '\\n')\n value = value.replace(/\\\\r/g, '\\r')\n }\n\n // Add to object\n obj[key] = value\n }\n\n return obj\n}\n\nfunction _parseVault (options) {\n options = options || {}\n\n const vaultPath = _vaultPath(options)\n options.path = vaultPath // parse .env.vault\n const result = DotenvModule.configDotenv(options)\n if (!result.parsed) {\n const err = new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`)\n err.code = 'MISSING_DATA'\n throw err\n }\n\n // handle scenario for comma separated keys - for use with key rotation\n // example: DOTENV_KEY=\"dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=prod,dotenv://:key_7890@dotenvx.com/vault/.env.vault?environment=prod\"\n const keys = _dotenvKey(options).split(',')\n const length = keys.length\n\n let decrypted\n for (let i = 0; i < length; i++) {\n try {\n // Get full key\n const key = keys[i].trim()\n\n // Get instructions for decrypt\n const attrs = _instructions(result, key)\n\n // Decrypt\n decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key)\n\n break\n } catch (error) {\n // last key\n if (i + 1 >= length) {\n throw error\n }\n // try next key\n }\n }\n\n // Parse decrypted .env string\n return DotenvModule.parse(decrypted)\n}\n\nfunction _warn (message) {\n console.error(`[dotenv@${version}][WARN] ${message}`)\n}\n\nfunction _debug (message) {\n console.log(`[dotenv@${version}][DEBUG] ${message}`)\n}\n\nfunction _log (message) {\n console.log(`[dotenv@${version}] ${message}`)\n}\n\nfunction _dotenvKey (options) {\n // prioritize developer directly setting options.DOTENV_KEY\n if (options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0) {\n return options.DOTENV_KEY\n }\n\n // secondary infra already contains a DOTENV_KEY environment variable\n if (process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0) {\n return process.env.DOTENV_KEY\n }\n\n // fallback to empty string\n return ''\n}\n\nfunction _instructions (result, dotenvKey) {\n // Parse DOTENV_KEY. Format is a URI\n let uri\n try {\n uri = new URL(dotenvKey)\n } catch (error) {\n if (error.code === 'ERR_INVALID_URL') {\n const err = new Error('INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n throw error\n }\n\n // Get decrypt key\n const key = uri.password\n if (!key) {\n const err = new Error('INVALID_DOTENV_KEY: Missing key part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get environment\n const environment = uri.searchParams.get('environment')\n if (!environment) {\n const err = new Error('INVALID_DOTENV_KEY: Missing environment part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get ciphertext payload\n const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`\n const ciphertext = result.parsed[environmentKey] // DOTENV_VAULT_PRODUCTION\n if (!ciphertext) {\n const err = new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`)\n err.code = 'NOT_FOUND_DOTENV_ENVIRONMENT'\n throw err\n }\n\n return { ciphertext, key }\n}\n\nfunction _vaultPath (options) {\n let possibleVaultPath = null\n\n if (options && options.path && options.path.length > 0) {\n if (Array.isArray(options.path)) {\n for (const filepath of options.path) {\n if (fs.existsSync(filepath)) {\n possibleVaultPath = filepath.endsWith('.vault') ? filepath : `${filepath}.vault`\n }\n }\n } else {\n possibleVaultPath = options.path.endsWith('.vault') ? options.path : `${options.path}.vault`\n }\n } else {\n possibleVaultPath = path.resolve(process.cwd(), '.env.vault')\n }\n\n if (fs.existsSync(possibleVaultPath)) {\n return possibleVaultPath\n }\n\n return null\n}\n\nfunction _resolveHome (envPath) {\n return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath\n}\n\nfunction _configVault (options) {\n const debug = parseBoolean(process.env.DOTENV_CONFIG_DEBUG || (options && options.debug))\n const quiet = parseBoolean(process.env.DOTENV_CONFIG_QUIET || (options && options.quiet))\n\n if (debug || !quiet) {\n _log('Loading env from encrypted .env.vault')\n }\n\n const parsed = DotenvModule._parseVault(options)\n\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n DotenvModule.populate(processEnv, parsed, options)\n\n return { parsed }\n}\n\nfunction configDotenv (options) {\n const dotenvPath = path.resolve(process.cwd(), '.env')\n let encoding = 'utf8'\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n let debug = parseBoolean(processEnv.DOTENV_CONFIG_DEBUG || (options && options.debug))\n let quiet = parseBoolean(processEnv.DOTENV_CONFIG_QUIET || (options && options.quiet))\n\n if (options && options.encoding) {\n encoding = options.encoding\n } else {\n if (debug) {\n _debug('No encoding is specified. UTF-8 is used by default')\n }\n }\n\n let optionPaths = [dotenvPath] // default, look for .env\n if (options && options.path) {\n if (!Array.isArray(options.path)) {\n optionPaths = [_resolveHome(options.path)]\n } else {\n optionPaths = [] // reset default\n for (const filepath of options.path) {\n optionPaths.push(_resolveHome(filepath))\n }\n }\n }\n\n // Build the parsed data in a temporary object (because we need to return it). Once we have the final\n // parsed data, we will combine it with process.env (or options.processEnv if provided).\n let lastError\n const parsedAll = {}\n for (const path of optionPaths) {\n try {\n // Specifying an encoding returns a string instead of a buffer\n const parsed = DotenvModule.parse(fs.readFileSync(path, { encoding }))\n\n DotenvModule.populate(parsedAll, parsed, options)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${path} ${e.message}`)\n }\n lastError = e\n }\n }\n\n const populated = DotenvModule.populate(processEnv, parsedAll, options)\n\n // handle user settings DOTENV_CONFIG_ options inside .env file(s)\n debug = parseBoolean(processEnv.DOTENV_CONFIG_DEBUG || debug)\n quiet = parseBoolean(processEnv.DOTENV_CONFIG_QUIET || quiet)\n\n if (debug || !quiet) {\n const keysCount = Object.keys(populated).length\n const shortPaths = []\n for (const filePath of optionPaths) {\n try {\n const relative = path.relative(process.cwd(), filePath)\n shortPaths.push(relative)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${filePath} ${e.message}`)\n }\n lastError = e\n }\n }\n\n _log(`injecting env (${keysCount}) from ${shortPaths.join(',')} ${dim(`-- tip: ${_getRandomTip()}`)}`)\n }\n\n if (lastError) {\n return { parsed: parsedAll, error: lastError }\n } else {\n return { parsed: parsedAll }\n }\n}\n\n// Populates process.env from .env file\nfunction config (options) {\n // fallback to original dotenv if DOTENV_KEY is not set\n if (_dotenvKey(options).length === 0) {\n return DotenvModule.configDotenv(options)\n }\n\n const vaultPath = _vaultPath(options)\n\n // dotenvKey exists but .env.vault file does not exist\n if (!vaultPath) {\n _warn(`You set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}. Did you forget to build it?`)\n\n return DotenvModule.configDotenv(options)\n }\n\n return DotenvModule._configVault(options)\n}\n\nfunction decrypt (encrypted, keyStr) {\n const key = Buffer.from(keyStr.slice(-64), 'hex')\n let ciphertext = Buffer.from(encrypted, 'base64')\n\n const nonce = ciphertext.subarray(0, 12)\n const authTag = ciphertext.subarray(-16)\n ciphertext = ciphertext.subarray(12, -16)\n\n try {\n const aesgcm = crypto.createDecipheriv('aes-256-gcm', key, nonce)\n aesgcm.setAuthTag(authTag)\n return `${aesgcm.update(ciphertext)}${aesgcm.final()}`\n } catch (error) {\n const isRange = error instanceof RangeError\n const invalidKeyLength = error.message === 'Invalid key length'\n const decryptionFailed = error.message === 'Unsupported state or unable to authenticate data'\n\n if (isRange || invalidKeyLength) {\n const err = new Error('INVALID_DOTENV_KEY: It must be 64 characters long (or more)')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n } else if (decryptionFailed) {\n const err = new Error('DECRYPTION_FAILED: Please check your DOTENV_KEY')\n err.code = 'DECRYPTION_FAILED'\n throw err\n } else {\n throw error\n }\n }\n}\n\n// Populate process.env with parsed values\nfunction populate (processEnv, parsed, options = {}) {\n const debug = Boolean(options && options.debug)\n const override = Boolean(options && options.override)\n const populated = {}\n\n if (typeof parsed !== 'object') {\n const err = new Error('OBJECT_REQUIRED: Please check the processEnv argument being passed to populate')\n err.code = 'OBJECT_REQUIRED'\n throw err\n }\n\n // Set process.env\n for (const key of Object.keys(parsed)) {\n if (Object.prototype.hasOwnProperty.call(processEnv, key)) {\n if (override === true) {\n processEnv[key] = parsed[key]\n populated[key] = parsed[key]\n }\n\n if (debug) {\n if (override === true) {\n _debug(`\"${key}\" is already defined and WAS overwritten`)\n } else {\n _debug(`\"${key}\" is already defined and was NOT overwritten`)\n }\n }\n } else {\n processEnv[key] = parsed[key]\n populated[key] = parsed[key]\n }\n }\n\n return populated\n}\n\nconst DotenvModule = {\n configDotenv,\n _configVault,\n _parseVault,\n config,\n decrypt,\n parse,\n populate\n}\n\nmodule.exports.configDotenv = DotenvModule.configDotenv\nmodule.exports._configVault = DotenvModule._configVault\nmodule.exports._parseVault = DotenvModule._parseVault\nmodule.exports.config = DotenvModule.config\nmodule.exports.decrypt = DotenvModule.decrypt\nmodule.exports.parse = DotenvModule.parse\nmodule.exports.populate = DotenvModule.populate\n\nmodule.exports = DotenvModule\n",
|
|
19
|
-
"function parseEncryptionKeyFromDotenvKey (dotenvKey) {\n // Parse DOTENV_KEY. Format is a URI\n let uri\n try {\n uri = new URL(dotenvKey)\n } catch (e) {\n throw new Error('INVALID_DOTENV_KEY: Incomplete format. It should be a dotenv uri. (dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development)')\n }\n\n // Get decrypt key\n const key = uri.password\n if (!key) {\n throw new Error('INVALID_DOTENV_KEY: Missing key part')\n }\n\n return Buffer.from(key.slice(-64), 'hex')\n}\n\nmodule.exports = parseEncryptionKeyFromDotenvKey\n",
|
|
20
|
-
"const dotenv = require('dotenv')\n\nconst parseEncryptionKeyFromDotenvKey = require('./parseEncryptionKeyFromDotenvKey')\n\nfunction decrypt (ciphertext, dotenvKey) {\n const key = parseEncryptionKeyFromDotenvKey(dotenvKey)\n\n try {\n return dotenv.decrypt(ciphertext, key)\n } catch (e) {\n if (e.code === 'DECRYPTION_FAILED') {\n const error = new Error('[DECRYPTION_FAILED] Unable to decrypt .env.vault with DOTENV_KEY.')\n error.code = 'DECRYPTION_FAILED'\n error.help = '[DECRYPTION_FAILED] Run with debug flag [dotenvx run --debug -- yourcommand] or manually run [echo $DOTENV_KEY] to compare it to the one in .env.keys.'\n error.debug = `[DECRYPTION_FAILED] DOTENV_KEY is ${dotenvKey}`\n throw error\n }\n\n if (e.code === 'ERR_CRYPTO_INVALID_AUTH_TAG') {\n const error = new Error('[INVALID_CIPHERTEXT] Unable to decrypt what appears to be invalid ciphertext.')\n error.code = 'INVALID_CIPHERTEXT'\n error.help = '[INVALID_CIPHERTEXT] Run with debug flag [dotenvx run --debug -- yourcommand] or manually check .env.vault.'\n error.debug = `[INVALID_CIPHERTEXT] ciphertext is '${ciphertext}'`\n throw error\n }\n\n throw e\n }\n}\n\nmodule.exports = decrypt\n",
|
|
21
|
-
"\"use strict\";\n/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.wrapCipher = exports.Hash = exports.nextTick = exports.isLE = void 0;\nexports.isBytes = isBytes;\nexports.abool = abool;\nexports.anumber = anumber;\nexports.abytes = abytes;\nexports.ahash = ahash;\nexports.aexists = aexists;\nexports.aoutput = aoutput;\nexports.u8 = u8;\nexports.u32 = u32;\nexports.clean = clean;\nexports.createView = createView;\nexports.bytesToHex = bytesToHex;\nexports.hexToBytes = hexToBytes;\nexports.hexToNumber = hexToNumber;\nexports.bytesToNumberBE = bytesToNumberBE;\nexports.numberToBytesBE = numberToBytesBE;\nexports.utf8ToBytes = utf8ToBytes;\nexports.bytesToUtf8 = bytesToUtf8;\nexports.toBytes = toBytes;\nexports.overlapBytes = overlapBytes;\nexports.complexOverlapBytes = complexOverlapBytes;\nexports.concatBytes = concatBytes;\nexports.checkOpts = checkOpts;\nexports.equalBytes = equalBytes;\nexports.getOutput = getOutput;\nexports.setBigUint64 = setBigUint64;\nexports.u64Lengths = u64Lengths;\nexports.isAligned32 = isAligned32;\nexports.copyBytes = copyBytes;\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nfunction isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is boolean. */\nfunction abool(b) {\n if (typeof b !== 'boolean')\n throw new Error(`boolean expected, not ${b}`);\n}\n/** Asserts something is positive integer. */\nfunction anumber(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error('positive integer expected, got ' + n);\n}\n/** Asserts something is Uint8Array. */\nfunction abytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n/**\n * Asserts something is hash\n * TODO: remove\n * @deprecated\n */\nfunction ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n/** Asserts a hash instance has not been destroyed / finished */\nfunction aexists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\n/** Asserts output is properly-sized byte array */\nfunction aoutput(out, instance) {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n/** Cast u8 / u16 / u32 to u8. */\nfunction u8(arr) {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** Cast u8 / u16 / u32 to u32. */\nfunction u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nfunction clean(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n/** Create DataView of an array for easy byte-level manipulation. */\nfunction createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexports.isLE = (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin = /* @__PURE__ */ (() => \n// @ts-ignore\ntypeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nfunction bytesToHex(bytes) {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin)\n return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nfunction hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin)\n return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n// Used in micro\nfunction hexToNumber(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n return BigInt(hex === '' ? '0' : '0x' + hex); // Big Endian\n}\n// Used in ff1\n// BE: Big Endian, LE: Little Endian\nfunction bytesToNumberBE(bytes) {\n return hexToNumber(bytesToHex(bytes));\n}\n// Used in micro, ff1\nfunction numberToBytesBE(n, len) {\n return hexToBytes(n.toString(16).padStart(len * 2, '0'));\n}\n// TODO: remove\n// There is no setImmediate in browser and setTimeout is slow.\n// call of async fn will return Promise, which will be fullfiled only on\n// next scheduler queue processing step and this is exactly what we need.\nconst nextTick = async () => { };\nexports.nextTick = nextTick;\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nfunction utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(new Uint8Array([97, 98, 99])) // 'abc'\n */\nfunction bytesToUtf8(bytes) {\n return new TextDecoder().decode(bytes);\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nfunction toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n else if (isBytes(data))\n data = copyBytes(data);\n else\n throw new Error('Uint8Array expected, got ' + typeof data);\n return data;\n}\n/**\n * Checks if two U8A use same underlying buffer and overlaps.\n * This is invalid and can corrupt data.\n */\nfunction overlapBytes(a, b) {\n return (a.buffer === b.buffer && // best we can do, may fail with an obscure Proxy\n a.byteOffset < b.byteOffset + b.byteLength && // a starts before b end\n b.byteOffset < a.byteOffset + a.byteLength // b starts before a end\n );\n}\n/**\n * If input and output overlap and input starts before output, we will overwrite end of input before\n * we start processing it, so this is not supported for most ciphers (except chacha/salse, which designed with this)\n */\nfunction complexOverlapBytes(input, output) {\n // This is very cursed. It works somehow, but I'm completely unsure,\n // reasoning about overlapping aligned windows is very hard.\n if (overlapBytes(input, output) && input.byteOffset < output.byteOffset)\n throw new Error('complex overlap of input and output is not supported');\n}\n/**\n * Copies several Uint8Arrays into one.\n */\nfunction concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\nfunction checkOpts(defaults, opts) {\n if (opts == null || typeof opts !== 'object')\n throw new Error('options must be defined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\n/** Compares 2 uint8array-s in kinda constant time. */\nfunction equalBytes(a, b) {\n if (a.length !== b.length)\n return false;\n let diff = 0;\n for (let i = 0; i < a.length; i++)\n diff |= a[i] ^ b[i];\n return diff === 0;\n}\n// TODO: remove\n/** For runtime check if class implements interface. */\nclass Hash {\n}\nexports.Hash = Hash;\n/**\n * Wraps a cipher: validates args, ensures encrypt() can only be called once.\n * @__NO_SIDE_EFFECTS__\n */\nconst wrapCipher = (params, constructor) => {\n function wrappedCipher(key, ...args) {\n // Validate key\n abytes(key);\n // Big-Endian hardware is rare. Just in case someone still decides to run ciphers:\n if (!exports.isLE)\n throw new Error('Non little-endian hardware is not yet supported');\n // Validate nonce if nonceLength is present\n if (params.nonceLength !== undefined) {\n const nonce = args[0];\n if (!nonce)\n throw new Error('nonce / iv required');\n if (params.varSizeNonce)\n abytes(nonce);\n else\n abytes(nonce, params.nonceLength);\n }\n // Validate AAD if tagLength present\n const tagl = params.tagLength;\n if (tagl && args[1] !== undefined) {\n abytes(args[1]);\n }\n const cipher = constructor(key, ...args);\n const checkOutput = (fnLength, output) => {\n if (output !== undefined) {\n if (fnLength !== 2)\n throw new Error('cipher output not supported');\n abytes(output);\n }\n };\n // Create wrapped cipher with validation and single-use encryption\n let called = false;\n const wrCipher = {\n encrypt(data, output) {\n if (called)\n throw new Error('cannot encrypt() twice with same key + nonce');\n called = true;\n abytes(data);\n checkOutput(cipher.encrypt.length, output);\n return cipher.encrypt(data, output);\n },\n decrypt(data, output) {\n abytes(data);\n if (tagl && data.length < tagl)\n throw new Error('invalid ciphertext length: smaller than tagLength=' + tagl);\n checkOutput(cipher.decrypt.length, output);\n return cipher.decrypt(data, output);\n },\n };\n return wrCipher;\n }\n Object.assign(wrappedCipher, params);\n return wrappedCipher;\n};\nexports.wrapCipher = wrapCipher;\n/**\n * By default, returns u8a of length.\n * When out is available, it checks it for validity and uses it.\n */\nfunction getOutput(expectedLength, out, onlyAligned = true) {\n if (out === undefined)\n return new Uint8Array(expectedLength);\n if (out.length !== expectedLength)\n throw new Error('invalid output length, expected ' + expectedLength + ', got: ' + out.length);\n if (onlyAligned && !isAligned32(out))\n throw new Error('invalid output, must be aligned');\n return out;\n}\n/** Polyfill for Safari 14. */\nfunction setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function')\n return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\nfunction u64Lengths(dataLength, aadLength, isLE) {\n abool(isLE);\n const num = new Uint8Array(16);\n const view = createView(num);\n setBigUint64(view, 0, BigInt(aadLength), isLE);\n setBigUint64(view, 8, BigInt(dataLength), isLE);\n return num;\n}\n// Is byte array aligned to 4 byte offset (u32)?\nfunction isAligned32(bytes) {\n return bytes.byteOffset % 4 === 0;\n}\n// copy bytes to new u8a (aligned). Because Buffer.slice is broken.\nfunction copyBytes(bytes) {\n return Uint8Array.from(bytes);\n}\n//# sourceMappingURL=utils.js.map",
|
|
22
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AEAD_TAG_LENGTH = exports.XCHACHA20_NONCE_LENGTH = exports.CURVE25519_PUBLIC_KEY_SIZE = exports.ETH_PUBLIC_KEY_SIZE = exports.UNCOMPRESSED_PUBLIC_KEY_SIZE = exports.COMPRESSED_PUBLIC_KEY_SIZE = exports.SECRET_KEY_LENGTH = void 0;\n// elliptic\nexports.SECRET_KEY_LENGTH = 32;\nexports.COMPRESSED_PUBLIC_KEY_SIZE = 33;\nexports.UNCOMPRESSED_PUBLIC_KEY_SIZE = 65;\nexports.ETH_PUBLIC_KEY_SIZE = 64;\nexports.CURVE25519_PUBLIC_KEY_SIZE = 32;\n// symmetric\nexports.XCHACHA20_NONCE_LENGTH = 24;\nexports.AEAD_TAG_LENGTH = 16;\n",
|
|
23
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ephemeralKeySize = exports.symmetricNonceLength = exports.symmetricAlgorithm = exports.isHkdfKeyCompressed = exports.isEphemeralKeyCompressed = exports.ellipticCurve = exports.ECIES_CONFIG = void 0;\nvar consts_1 = require(\"./consts\");\nvar Config = /** @class */ (function () {\n function Config() {\n this.ellipticCurve = \"secp256k1\";\n this.isEphemeralKeyCompressed = false; // secp256k1 only\n this.isHkdfKeyCompressed = false; // secp256k1 only\n this.symmetricAlgorithm = \"aes-256-gcm\";\n this.symmetricNonceLength = 16; // aes-256-gcm only\n }\n return Config;\n}());\nexports.ECIES_CONFIG = new Config();\nvar ellipticCurve = function () { return exports.ECIES_CONFIG.ellipticCurve; };\nexports.ellipticCurve = ellipticCurve;\nvar isEphemeralKeyCompressed = function () { return exports.ECIES_CONFIG.isEphemeralKeyCompressed; };\nexports.isEphemeralKeyCompressed = isEphemeralKeyCompressed;\nvar isHkdfKeyCompressed = function () { return exports.ECIES_CONFIG.isHkdfKeyCompressed; };\nexports.isHkdfKeyCompressed = isHkdfKeyCompressed;\nvar symmetricAlgorithm = function () { return exports.ECIES_CONFIG.symmetricAlgorithm; };\nexports.symmetricAlgorithm = symmetricAlgorithm;\nvar symmetricNonceLength = function () { return exports.ECIES_CONFIG.symmetricNonceLength; };\nexports.symmetricNonceLength = symmetricNonceLength;\nvar ephemeralKeySize = function () {\n var mapping = {\n secp256k1: exports.ECIES_CONFIG.isEphemeralKeyCompressed\n ? consts_1.COMPRESSED_PUBLIC_KEY_SIZE\n : consts_1.UNCOMPRESSED_PUBLIC_KEY_SIZE,\n x25519: consts_1.CURVE25519_PUBLIC_KEY_SIZE,\n ed25519: consts_1.CURVE25519_PUBLIC_KEY_SIZE,\n };\n if (exports.ECIES_CONFIG.ellipticCurve in mapping) {\n return mapping[exports.ECIES_CONFIG.ellipticCurve];\n } /* v8 ignore next 2 */\n else {\n throw new Error(\"Not implemented\");\n }\n};\nexports.ephemeralKeySize = ephemeralKeySize;\n",
|
|
24
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.crypto = void 0;\n/**\n * Internal webcrypto alias.\n * We prefer WebCrypto aka globalThis.crypto, which exists in node.js 16+.\n * Falls back to Node.js built-in crypto for Node.js <=v14.\n * See utils.ts for details.\n * @module\n */\n// @ts-ignore\nconst nc = require(\"node:crypto\");\nexports.crypto = nc && typeof nc === 'object' && 'webcrypto' in nc\n ? nc.webcrypto\n : nc && typeof nc === 'object' && 'randomBytes' in nc\n ? nc\n : undefined;\n//# sourceMappingURL=cryptoNode.js.map",
|
|
25
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.gcm = exports.ctr = exports.cbc = exports.utils = void 0;\nexports.randomBytes = randomBytes;\nexports.getWebcryptoSubtle = getWebcryptoSubtle;\nexports.managedNonce = managedNonce;\n/**\n * WebCrypto-based AES gcm/ctr/cbc, `managedNonce` and `randomBytes`.\n * We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n * node.js versions earlier than v19 don't declare it in global scope.\n * For node.js, package.js on#exports field mapping rewrites import\n * from `crypto` to `cryptoNode`, which imports native module.\n * Makes the utils un-importable in browsers without a bundler.\n * Once node.js 18 is deprecated, we can just drop the import.\n * @module\n */\n// Use full path so that Node.js can rewrite it to `cryptoNode.js`.\nconst crypto_1 = require(\"@noble/ciphers/crypto\");\nconst utils_ts_1 = require(\"./utils.js\");\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nfunction randomBytes(bytesLength = 32) {\n if (crypto_1.crypto && typeof crypto_1.crypto.getRandomValues === 'function') {\n return crypto_1.crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto_1.crypto && typeof crypto_1.crypto.randomBytes === 'function') {\n return Uint8Array.from(crypto_1.crypto.randomBytes(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\nfunction getWebcryptoSubtle() {\n if (crypto_1.crypto && typeof crypto_1.crypto.subtle === 'object' && crypto_1.crypto.subtle != null)\n return crypto_1.crypto.subtle;\n throw new Error('crypto.subtle must be defined');\n}\n/**\n * Uses CSPRG for nonce, nonce injected in ciphertext.\n * @example\n * const gcm = managedNonce(aes.gcm);\n * const ciphr = gcm(key).encrypt(data);\n * const plain = gcm(key).decrypt(ciph);\n */\nfunction managedNonce(fn) {\n const { nonceLength } = fn;\n (0, utils_ts_1.anumber)(nonceLength);\n return ((key, ...args) => ({\n encrypt(plaintext, ...argsEnc) {\n const nonce = randomBytes(nonceLength);\n const ciphertext = fn(key, nonce, ...args).encrypt(plaintext, ...argsEnc);\n const out = (0, utils_ts_1.concatBytes)(nonce, ciphertext);\n ciphertext.fill(0);\n return out;\n },\n decrypt(ciphertext, ...argsDec) {\n const nonce = ciphertext.subarray(0, nonceLength);\n const data = ciphertext.subarray(nonceLength);\n return fn(key, nonce, ...args).decrypt(data, ...argsDec);\n },\n }));\n}\n// Overridable\n// @TODO\nexports.utils = {\n async encrypt(key, keyParams, cryptParams, plaintext) {\n const cr = getWebcryptoSubtle();\n const iKey = await cr.importKey('raw', key, keyParams, true, ['encrypt']);\n const ciphertext = await cr.encrypt(cryptParams, iKey, plaintext);\n return new Uint8Array(ciphertext);\n },\n async decrypt(key, keyParams, cryptParams, ciphertext) {\n const cr = getWebcryptoSubtle();\n const iKey = await cr.importKey('raw', key, keyParams, true, ['decrypt']);\n const plaintext = await cr.decrypt(cryptParams, iKey, ciphertext);\n return new Uint8Array(plaintext);\n },\n};\nconst mode = {\n CBC: 'AES-CBC',\n CTR: 'AES-CTR',\n GCM: 'AES-GCM',\n};\nfunction getCryptParams(algo, nonce, AAD) {\n if (algo === mode.CBC)\n return { name: mode.CBC, iv: nonce };\n if (algo === mode.CTR)\n return { name: mode.CTR, counter: nonce, length: 64 };\n if (algo === mode.GCM) {\n if (AAD)\n return { name: mode.GCM, iv: nonce, additionalData: AAD };\n else\n return { name: mode.GCM, iv: nonce };\n }\n throw new Error('unknown aes block mode');\n}\nfunction generate(algo) {\n return (key, nonce, AAD) => {\n (0, utils_ts_1.abytes)(key);\n (0, utils_ts_1.abytes)(nonce);\n const keyParams = { name: algo, length: key.length * 8 };\n const cryptParams = getCryptParams(algo, nonce, AAD);\n let consumed = false;\n return {\n // keyLength,\n encrypt(plaintext) {\n (0, utils_ts_1.abytes)(plaintext);\n if (consumed)\n throw new Error('Cannot encrypt() twice with same key / nonce');\n consumed = true;\n return exports.utils.encrypt(key, keyParams, cryptParams, plaintext);\n },\n decrypt(ciphertext) {\n (0, utils_ts_1.abytes)(ciphertext);\n return exports.utils.decrypt(key, keyParams, cryptParams, ciphertext);\n },\n };\n };\n}\n/** AES-CBC, native webcrypto version */\nexports.cbc = (() => generate(mode.CBC))();\n/** AES-CTR, native webcrypto version */\nexports.ctr = (() => generate(mode.CTR))();\n/** AES-GCM, native webcrypto version */\nexports.gcm = \n/* @__PURE__ */ (() => generate(mode.GCM))();\n// // Type tests\n// import { siv, gcm, ctr, ecb, cbc } from '../aes.ts';\n// import { xsalsa20poly1305 } from '../salsa.ts';\n// import { chacha20poly1305, xchacha20poly1305 } from '../chacha.ts';\n// const wsiv = managedNonce(siv);\n// const wgcm = managedNonce(gcm);\n// const wctr = managedNonce(ctr);\n// const wcbc = managedNonce(cbc);\n// const wsalsapoly = managedNonce(xsalsa20poly1305);\n// const wchacha = managedNonce(chacha20poly1305);\n// const wxchacha = managedNonce(xchacha20poly1305);\n// // should fail\n// const wcbc2 = managedNonce(managedNonce(cbc));\n// const wctr = managedNonce(ctr);\n//# sourceMappingURL=webcrypto.js.map",
|
|
26
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.crypto = void 0;\n/**\n * Internal webcrypto alias.\n * We prefer WebCrypto aka globalThis.crypto, which exists in node.js 16+.\n * Falls back to Node.js built-in crypto for Node.js <=v14.\n * See utils.ts for details.\n * @module\n */\n// @ts-ignore\nconst nc = require(\"node:crypto\");\nexports.crypto = nc && typeof nc === 'object' && 'webcrypto' in nc\n ? nc.webcrypto\n : nc && typeof nc === 'object' && 'randomBytes' in nc\n ? nc\n : undefined;\n//# sourceMappingURL=cryptoNode.js.map",
|
|
27
|
-
"\"use strict\";\n/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.wrapXOFConstructorWithOpts = exports.wrapConstructorWithOpts = exports.wrapConstructor = exports.Hash = exports.nextTick = exports.swap32IfBE = exports.byteSwapIfBE = exports.swap8IfBE = exports.isLE = void 0;\nexports.isBytes = isBytes;\nexports.anumber = anumber;\nexports.abytes = abytes;\nexports.ahash = ahash;\nexports.aexists = aexists;\nexports.aoutput = aoutput;\nexports.u8 = u8;\nexports.u32 = u32;\nexports.clean = clean;\nexports.createView = createView;\nexports.rotr = rotr;\nexports.rotl = rotl;\nexports.byteSwap = byteSwap;\nexports.byteSwap32 = byteSwap32;\nexports.bytesToHex = bytesToHex;\nexports.hexToBytes = hexToBytes;\nexports.asyncLoop = asyncLoop;\nexports.utf8ToBytes = utf8ToBytes;\nexports.bytesToUtf8 = bytesToUtf8;\nexports.toBytes = toBytes;\nexports.kdfInputToBytes = kdfInputToBytes;\nexports.concatBytes = concatBytes;\nexports.checkOpts = checkOpts;\nexports.createHasher = createHasher;\nexports.createOptHasher = createOptHasher;\nexports.createXOFer = createXOFer;\nexports.randomBytes = randomBytes;\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nconst crypto_1 = require(\"@noble/hashes/crypto\");\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nfunction isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is positive integer. */\nfunction anumber(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error('positive integer expected, got ' + n);\n}\n/** Asserts something is Uint8Array. */\nfunction abytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n/** Asserts something is hash */\nfunction ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n/** Asserts a hash instance has not been destroyed / finished */\nfunction aexists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\n/** Asserts output is properly-sized byte array */\nfunction aoutput(out, instance) {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n/** Cast u8 / u16 / u32 to u8. */\nfunction u8(arr) {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** Cast u8 / u16 / u32 to u32. */\nfunction u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nfunction clean(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n/** Create DataView of an array for easy byte-level manipulation. */\nfunction createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** The rotate right (circular right shift) operation for uint32 */\nfunction rotr(word, shift) {\n return (word << (32 - shift)) | (word >>> shift);\n}\n/** The rotate left (circular left shift) operation for uint32 */\nfunction rotl(word, shift) {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexports.isLE = (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n/** The byte swap operation for uint32 */\nfunction byteSwap(word) {\n return (((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff));\n}\n/** Conditionally byte swap if on a big-endian platform */\nexports.swap8IfBE = exports.isLE\n ? (n) => n\n : (n) => byteSwap(n);\n/** @deprecated */\nexports.byteSwapIfBE = exports.swap8IfBE;\n/** In place byte swap for Uint32Array */\nfunction byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\nexports.swap32IfBE = exports.isLE\n ? (u) => u\n : byteSwap32;\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin = /* @__PURE__ */ (() => \n// @ts-ignore\ntypeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nfunction bytesToHex(bytes) {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin)\n return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nfunction hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin)\n return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nconst nextTick = async () => { };\nexports.nextTick = nextTick;\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nasync function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await (0, exports.nextTick)();\n ts += diff;\n }\n}\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nfunction utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\nfunction bytesToUtf8(bytes) {\n return new TextDecoder().decode(bytes);\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nfunction toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nfunction kdfInputToBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/** Copies several Uint8Arrays into one. */\nfunction concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\nfunction checkOpts(defaults, opts) {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\n/** For runtime check if class implements interface */\nclass Hash {\n}\nexports.Hash = Hash;\n/** Wraps hash function, creating an interface on top of it */\nfunction createHasher(hashCons) {\n const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\nfunction createOptHasher(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nfunction createXOFer(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexports.wrapConstructor = createHasher;\nexports.wrapConstructorWithOpts = createOptHasher;\nexports.wrapXOFConstructorWithOpts = createXOFer;\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nfunction randomBytes(bytesLength = 32) {\n if (crypto_1.crypto && typeof crypto_1.crypto.getRandomValues === 'function') {\n return crypto_1.crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto_1.crypto && typeof crypto_1.crypto.randomBytes === 'function') {\n return Uint8Array.from(crypto_1.crypto.randomBytes(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n//# sourceMappingURL=utils.js.map",
|
|
28
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SHA512_IV = exports.SHA384_IV = exports.SHA224_IV = exports.SHA256_IV = exports.HashMD = void 0;\nexports.setBigUint64 = setBigUint64;\nexports.Chi = Chi;\nexports.Maj = Maj;\n/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nconst utils_ts_1 = require(\"./utils.js\");\n/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */\nfunction setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function')\n return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n/** Choice: a ? b : c */\nfunction Chi(a, b, c) {\n return (a & b) ^ (~a & c);\n}\n/** Majority function, true if any two inputs is true. */\nfunction Maj(a, b, c) {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nclass HashMD extends utils_ts_1.Hash {\n constructor(blockLen, outputLen, padOffset, isLE) {\n super();\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = (0, utils_ts_1.createView)(this.buffer);\n }\n update(data) {\n (0, utils_ts_1.aexists)(this);\n data = (0, utils_ts_1.toBytes)(data);\n (0, utils_ts_1.abytes)(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = (0, utils_ts_1.createView)(data);\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n (0, utils_ts_1.aexists)(this);\n (0, utils_ts_1.aoutput)(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n (0, utils_ts_1.clean)(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = (0, utils_ts_1.createView)(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4)\n throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length)\n throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++)\n oview.setUint32(4 * i, state[i], isLE);\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n to || (to = new this.constructor());\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen)\n to.buffer.set(buffer);\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n}\nexports.HashMD = HashMD;\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexports.SHA256_IV = Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexports.SHA224_IV = Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexports.SHA384_IV = Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexports.SHA512_IV = Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n//# sourceMappingURL=_md.js.map",
|
|
29
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toBig = exports.shrSL = exports.shrSH = exports.rotrSL = exports.rotrSH = exports.rotrBL = exports.rotrBH = exports.rotr32L = exports.rotr32H = exports.rotlSL = exports.rotlSH = exports.rotlBL = exports.rotlBH = exports.add5L = exports.add5H = exports.add4L = exports.add4H = exports.add3L = exports.add3H = void 0;\nexports.add = add;\nexports.fromBig = fromBig;\nexports.split = split;\n/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\nfunction fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nfunction split(lst, le = false) {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\nexports.toBig = toBig;\n// for Shift in [0, 32)\nconst shrSH = (h, _l, s) => h >>> s;\nexports.shrSH = shrSH;\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\nexports.shrSL = shrSL;\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nexports.rotrSH = rotrSH;\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\nexports.rotrSL = rotrSL;\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nexports.rotrBH = rotrBH;\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\nexports.rotrBL = rotrBL;\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h, l) => l;\nexports.rotr32H = rotr32H;\nconst rotr32L = (h, _l) => h;\nexports.rotr32L = rotr32L;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nexports.rotlSH = rotlSH;\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\nexports.rotlSL = rotlSL;\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nexports.rotlBH = rotlBH;\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\nexports.rotlBL = rotlBL;\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nexports.add3L = add3L;\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nexports.add3H = add3H;\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nexports.add4L = add4L;\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nexports.add4H = add4H;\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nexports.add5L = add5L;\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\nexports.add5H = add5H;\n// prettier-ignore\nconst u64 = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexports.default = u64;\n//# sourceMappingURL=_u64.js.map",
|
|
30
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sha512_224 = exports.sha512_256 = exports.sha384 = exports.sha512 = exports.sha224 = exports.sha256 = exports.SHA512_256 = exports.SHA512_224 = exports.SHA384 = exports.SHA512 = exports.SHA224 = exports.SHA256 = void 0;\n/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://datatracker.ietf.org/doc/html/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nconst _md_ts_1 = require(\"./_md.js\");\nconst u64 = require(\"./_u64.js\");\nconst utils_ts_1 = require(\"./utils.js\");\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nclass SHA256 extends _md_ts_1.HashMD {\n constructor(outputLen = 32) {\n super(64, outputLen, 8, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n this.A = _md_ts_1.SHA256_IV[0] | 0;\n this.B = _md_ts_1.SHA256_IV[1] | 0;\n this.C = _md_ts_1.SHA256_IV[2] | 0;\n this.D = _md_ts_1.SHA256_IV[3] | 0;\n this.E = _md_ts_1.SHA256_IV[4] | 0;\n this.F = _md_ts_1.SHA256_IV[5] | 0;\n this.G = _md_ts_1.SHA256_IV[6] | 0;\n this.H = _md_ts_1.SHA256_IV[7] | 0;\n }\n get() {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F, G, H) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4)\n SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = (0, utils_ts_1.rotr)(W15, 7) ^ (0, utils_ts_1.rotr)(W15, 18) ^ (W15 >>> 3);\n const s1 = (0, utils_ts_1.rotr)(W2, 17) ^ (0, utils_ts_1.rotr)(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = (0, utils_ts_1.rotr)(E, 6) ^ (0, utils_ts_1.rotr)(E, 11) ^ (0, utils_ts_1.rotr)(E, 25);\n const T1 = (H + sigma1 + (0, _md_ts_1.Chi)(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = (0, utils_ts_1.rotr)(A, 2) ^ (0, utils_ts_1.rotr)(A, 13) ^ (0, utils_ts_1.rotr)(A, 22);\n const T2 = (sigma0 + (0, _md_ts_1.Maj)(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n roundClean() {\n (0, utils_ts_1.clean)(SHA256_W);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n (0, utils_ts_1.clean)(this.buffer);\n }\n}\nexports.SHA256 = SHA256;\nclass SHA224 extends SHA256 {\n constructor() {\n super(28);\n this.A = _md_ts_1.SHA224_IV[0] | 0;\n this.B = _md_ts_1.SHA224_IV[1] | 0;\n this.C = _md_ts_1.SHA224_IV[2] | 0;\n this.D = _md_ts_1.SHA224_IV[3] | 0;\n this.E = _md_ts_1.SHA224_IV[4] | 0;\n this.F = _md_ts_1.SHA224_IV[5] | 0;\n this.G = _md_ts_1.SHA224_IV[6] | 0;\n this.H = _md_ts_1.SHA224_IV[7] | 0;\n }\n}\nexports.SHA224 = SHA224;\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\nclass SHA512 extends _md_ts_1.HashMD {\n constructor(outputLen = 64) {\n super(128, outputLen, 16, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = _md_ts_1.SHA512_IV[0] | 0;\n this.Al = _md_ts_1.SHA512_IV[1] | 0;\n this.Bh = _md_ts_1.SHA512_IV[2] | 0;\n this.Bl = _md_ts_1.SHA512_IV[3] | 0;\n this.Ch = _md_ts_1.SHA512_IV[4] | 0;\n this.Cl = _md_ts_1.SHA512_IV[5] | 0;\n this.Dh = _md_ts_1.SHA512_IV[6] | 0;\n this.Dl = _md_ts_1.SHA512_IV[7] | 0;\n this.Eh = _md_ts_1.SHA512_IV[8] | 0;\n this.El = _md_ts_1.SHA512_IV[9] | 0;\n this.Fh = _md_ts_1.SHA512_IV[10] | 0;\n this.Fl = _md_ts_1.SHA512_IV[11] | 0;\n this.Gh = _md_ts_1.SHA512_IV[12] | 0;\n this.Gl = _md_ts_1.SHA512_IV[13] | 0;\n this.Hh = _md_ts_1.SHA512_IV[14] | 0;\n this.Hl = _md_ts_1.SHA512_IV[15] | 0;\n }\n // prettier-ignore\n get() {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n roundClean() {\n (0, utils_ts_1.clean)(SHA512_W_H, SHA512_W_L);\n }\n destroy() {\n (0, utils_ts_1.clean)(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\nexports.SHA512 = SHA512;\nclass SHA384 extends SHA512 {\n constructor() {\n super(48);\n this.Ah = _md_ts_1.SHA384_IV[0] | 0;\n this.Al = _md_ts_1.SHA384_IV[1] | 0;\n this.Bh = _md_ts_1.SHA384_IV[2] | 0;\n this.Bl = _md_ts_1.SHA384_IV[3] | 0;\n this.Ch = _md_ts_1.SHA384_IV[4] | 0;\n this.Cl = _md_ts_1.SHA384_IV[5] | 0;\n this.Dh = _md_ts_1.SHA384_IV[6] | 0;\n this.Dl = _md_ts_1.SHA384_IV[7] | 0;\n this.Eh = _md_ts_1.SHA384_IV[8] | 0;\n this.El = _md_ts_1.SHA384_IV[9] | 0;\n this.Fh = _md_ts_1.SHA384_IV[10] | 0;\n this.Fl = _md_ts_1.SHA384_IV[11] | 0;\n this.Gh = _md_ts_1.SHA384_IV[12] | 0;\n this.Gl = _md_ts_1.SHA384_IV[13] | 0;\n this.Hh = _md_ts_1.SHA384_IV[14] | 0;\n this.Hl = _md_ts_1.SHA384_IV[15] | 0;\n }\n}\nexports.SHA384 = SHA384;\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n 0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n 0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n 0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\nclass SHA512_224 extends SHA512 {\n constructor() {\n super(28);\n this.Ah = T224_IV[0] | 0;\n this.Al = T224_IV[1] | 0;\n this.Bh = T224_IV[2] | 0;\n this.Bl = T224_IV[3] | 0;\n this.Ch = T224_IV[4] | 0;\n this.Cl = T224_IV[5] | 0;\n this.Dh = T224_IV[6] | 0;\n this.Dl = T224_IV[7] | 0;\n this.Eh = T224_IV[8] | 0;\n this.El = T224_IV[9] | 0;\n this.Fh = T224_IV[10] | 0;\n this.Fl = T224_IV[11] | 0;\n this.Gh = T224_IV[12] | 0;\n this.Gl = T224_IV[13] | 0;\n this.Hh = T224_IV[14] | 0;\n this.Hl = T224_IV[15] | 0;\n }\n}\nexports.SHA512_224 = SHA512_224;\nclass SHA512_256 extends SHA512 {\n constructor() {\n super(32);\n this.Ah = T256_IV[0] | 0;\n this.Al = T256_IV[1] | 0;\n this.Bh = T256_IV[2] | 0;\n this.Bl = T256_IV[3] | 0;\n this.Ch = T256_IV[4] | 0;\n this.Cl = T256_IV[5] | 0;\n this.Dh = T256_IV[6] | 0;\n this.Dl = T256_IV[7] | 0;\n this.Eh = T256_IV[8] | 0;\n this.El = T256_IV[9] | 0;\n this.Fh = T256_IV[10] | 0;\n this.Fl = T256_IV[11] | 0;\n this.Gh = T256_IV[12] | 0;\n this.Gl = T256_IV[13] | 0;\n this.Hh = T256_IV[14] | 0;\n this.Hl = T256_IV[15] | 0;\n }\n}\nexports.SHA512_256 = SHA512_256;\n/**\n * SHA2-256 hash function from RFC 4634.\n *\n * It is the fastest JS hash, even faster than Blake3.\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n */\nexports.sha256 = (0, utils_ts_1.createHasher)(() => new SHA256());\n/** SHA2-224 hash function from RFC 4634 */\nexports.sha224 = (0, utils_ts_1.createHasher)(() => new SHA224());\n/** SHA2-512 hash function from RFC 4634. */\nexports.sha512 = (0, utils_ts_1.createHasher)(() => new SHA512());\n/** SHA2-384 hash function from RFC 4634. */\nexports.sha384 = (0, utils_ts_1.createHasher)(() => new SHA384());\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexports.sha512_256 = (0, utils_ts_1.createHasher)(() => new SHA512_256());\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexports.sha512_224 = (0, utils_ts_1.createHasher)(() => new SHA512_224());\n//# sourceMappingURL=sha2.js.map",
|
|
31
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.notImplemented = exports.bitMask = exports.utf8ToBytes = exports.randomBytes = exports.isBytes = exports.hexToBytes = exports.concatBytes = exports.bytesToUtf8 = exports.bytesToHex = exports.anumber = exports.abytes = void 0;\nexports.abool = abool;\nexports._abool2 = _abool2;\nexports._abytes2 = _abytes2;\nexports.numberToHexUnpadded = numberToHexUnpadded;\nexports.hexToNumber = hexToNumber;\nexports.bytesToNumberBE = bytesToNumberBE;\nexports.bytesToNumberLE = bytesToNumberLE;\nexports.numberToBytesBE = numberToBytesBE;\nexports.numberToBytesLE = numberToBytesLE;\nexports.numberToVarBytesBE = numberToVarBytesBE;\nexports.ensureBytes = ensureBytes;\nexports.equalBytes = equalBytes;\nexports.copyBytes = copyBytes;\nexports.asciiToBytes = asciiToBytes;\nexports.inRange = inRange;\nexports.aInRange = aInRange;\nexports.bitLen = bitLen;\nexports.bitGet = bitGet;\nexports.bitSet = bitSet;\nexports.createHmacDrbg = createHmacDrbg;\nexports.validateObject = validateObject;\nexports.isHash = isHash;\nexports._validateObject = _validateObject;\nexports.memoized = memoized;\n/**\n * Hex, bytes and number utilities.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nconst utils_js_1 = require(\"@noble/hashes/utils.js\");\nvar utils_js_2 = require(\"@noble/hashes/utils.js\");\nObject.defineProperty(exports, \"abytes\", { enumerable: true, get: function () { return utils_js_2.abytes; } });\nObject.defineProperty(exports, \"anumber\", { enumerable: true, get: function () { return utils_js_2.anumber; } });\nObject.defineProperty(exports, \"bytesToHex\", { enumerable: true, get: function () { return utils_js_2.bytesToHex; } });\nObject.defineProperty(exports, \"bytesToUtf8\", { enumerable: true, get: function () { return utils_js_2.bytesToUtf8; } });\nObject.defineProperty(exports, \"concatBytes\", { enumerable: true, get: function () { return utils_js_2.concatBytes; } });\nObject.defineProperty(exports, \"hexToBytes\", { enumerable: true, get: function () { return utils_js_2.hexToBytes; } });\nObject.defineProperty(exports, \"isBytes\", { enumerable: true, get: function () { return utils_js_2.isBytes; } });\nObject.defineProperty(exports, \"randomBytes\", { enumerable: true, get: function () { return utils_js_2.randomBytes; } });\nObject.defineProperty(exports, \"utf8ToBytes\", { enumerable: true, get: function () { return utils_js_2.utf8ToBytes; } });\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nfunction abool(title, value) {\n if (typeof value !== 'boolean')\n throw new Error(title + ' boolean expected, got ' + value);\n}\n// tmp name until v2\nfunction _abool2(value, title = '') {\n if (typeof value !== 'boolean') {\n const prefix = title && `\"${title}\"`;\n throw new Error(prefix + 'expected boolean, got type=' + typeof value);\n }\n return value;\n}\n// tmp name until v2\n/** Asserts something is Uint8Array. */\nfunction _abytes2(value, length, title = '') {\n const bytes = (0, utils_js_1.isBytes)(value);\n const len = value?.length;\n const needsLen = length !== undefined;\n if (!bytes || (needsLen && len !== length)) {\n const prefix = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : '';\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n throw new Error(prefix + 'expected Uint8Array' + ofLen + ', got ' + got);\n }\n return value;\n}\n// Used in weierstrass, der\nfunction numberToHexUnpadded(num) {\n const hex = num.toString(16);\n return hex.length & 1 ? '0' + hex : hex;\n}\nfunction hexToNumber(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n return hex === '' ? _0n : BigInt('0x' + hex); // Big Endian\n}\n// BE: Big Endian, LE: Little Endian\nfunction bytesToNumberBE(bytes) {\n return hexToNumber((0, utils_js_1.bytesToHex)(bytes));\n}\nfunction bytesToNumberLE(bytes) {\n (0, utils_js_1.abytes)(bytes);\n return hexToNumber((0, utils_js_1.bytesToHex)(Uint8Array.from(bytes).reverse()));\n}\nfunction numberToBytesBE(n, len) {\n return (0, utils_js_1.hexToBytes)(n.toString(16).padStart(len * 2, '0'));\n}\nfunction numberToBytesLE(n, len) {\n return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nfunction numberToVarBytesBE(n) {\n return (0, utils_js_1.hexToBytes)(numberToHexUnpadded(n));\n}\n/**\n * Takes hex string or Uint8Array, converts to Uint8Array.\n * Validates output length.\n * Will throw error for other types.\n * @param title descriptive title for an error e.g. 'secret key'\n * @param hex hex string or Uint8Array\n * @param expectedLength optional, will compare to result array's length\n * @returns\n */\nfunction ensureBytes(title, hex, expectedLength) {\n let res;\n if (typeof hex === 'string') {\n try {\n res = (0, utils_js_1.hexToBytes)(hex);\n }\n catch (e) {\n throw new Error(title + ' must be hex string or Uint8Array, cause: ' + e);\n }\n }\n else if ((0, utils_js_1.isBytes)(hex)) {\n // Uint8Array.from() instead of hash.slice() because node.js Buffer\n // is instance of Uint8Array, and its slice() creates **mutable** copy\n res = Uint8Array.from(hex);\n }\n else {\n throw new Error(title + ' must be hex string or Uint8Array');\n }\n const len = res.length;\n if (typeof expectedLength === 'number' && len !== expectedLength)\n throw new Error(title + ' of length ' + expectedLength + ' expected, got ' + len);\n return res;\n}\n// Compares 2 u8a-s in kinda constant time\nfunction equalBytes(a, b) {\n if (a.length !== b.length)\n return false;\n let diff = 0;\n for (let i = 0; i < a.length; i++)\n diff |= a[i] ^ b[i];\n return diff === 0;\n}\n/**\n * Copies Uint8Array. We can't use u8a.slice(), because u8a can be Buffer,\n * and Buffer#slice creates mutable copy. Never use Buffers!\n */\nfunction copyBytes(bytes) {\n return Uint8Array.from(bytes);\n}\n/**\n * Decodes 7-bit ASCII string to Uint8Array, throws on non-ascii symbols\n * Should be safe to use for things expected to be ASCII.\n * Returns exact same result as utf8ToBytes for ASCII or throws.\n */\nfunction asciiToBytes(ascii) {\n return Uint8Array.from(ascii, (c, i) => {\n const charCode = c.charCodeAt(0);\n if (c.length !== 1 || charCode > 127) {\n throw new Error(`string contains non-ASCII character \"${ascii[i]}\" with code ${charCode} at position ${i}`);\n }\n return charCode;\n });\n}\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\n// export const utf8ToBytes: typeof utf8ToBytes_ = utf8ToBytes_;\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\n// export const bytesToUtf8: typeof bytesToUtf8_ = bytesToUtf8_;\n// Is positive bigint\nconst isPosBig = (n) => typeof n === 'bigint' && _0n <= n;\nfunction inRange(n, min, max) {\n return isPosBig(n) && isPosBig(min) && isPosBig(max) && min <= n && n < max;\n}\n/**\n * Asserts min <= n < max. NOTE: It's < max and not <= max.\n * @example\n * aInRange('x', x, 1n, 256n); // would assume x is in (1n..255n)\n */\nfunction aInRange(title, n, min, max) {\n // Why min <= n < max and not a (min < n < max) OR b (min <= n <= max)?\n // consider P=256n, min=0n, max=P\n // - a for min=0 would require -1: `inRange('x', x, -1n, P)`\n // - b would commonly require subtraction: `inRange('x', x, 0n, P - 1n)`\n // - our way is the cleanest: `inRange('x', x, 0n, P)\n if (!inRange(n, min, max))\n throw new Error('expected valid ' + title + ': ' + min + ' <= n < ' + max + ', got ' + n);\n}\n// Bit operations\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n * TODO: merge with nLength in modular\n */\nfunction bitLen(n) {\n let len;\n for (len = 0; n > _0n; n >>= _1n, len += 1)\n ;\n return len;\n}\n/**\n * Gets single bit at position.\n * NOTE: first bit position is 0 (same as arrays)\n * Same as `!!+Array.from(n.toString(2)).reverse()[pos]`\n */\nfunction bitGet(n, pos) {\n return (n >> BigInt(pos)) & _1n;\n}\n/**\n * Sets single bit at position.\n */\nfunction bitSet(n, pos, value) {\n return n | ((value ? _1n : _0n) << BigInt(pos));\n}\n/**\n * Calculate mask for N bits. Not using ** operator with bigints because of old engines.\n * Same as BigInt(`0b${Array(i).fill('1').join('')}`)\n */\nconst bitMask = (n) => (_1n << BigInt(n)) - _1n;\nexports.bitMask = bitMask;\n/**\n * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n * @returns function that will call DRBG until 2nd arg returns something meaningful\n * @example\n * const drbg = createHmacDRBG<Key>(32, 32, hmac);\n * drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nfunction createHmacDrbg(hashLen, qByteLen, hmacFn) {\n if (typeof hashLen !== 'number' || hashLen < 2)\n throw new Error('hashLen must be a number');\n if (typeof qByteLen !== 'number' || qByteLen < 2)\n throw new Error('qByteLen must be a number');\n if (typeof hmacFn !== 'function')\n throw new Error('hmacFn must be a function');\n // Step B, Step C: set hashLen to 8*ceil(hlen/8)\n const u8n = (len) => new Uint8Array(len); // creates Uint8Array\n const u8of = (byte) => Uint8Array.of(byte); // another shortcut\n let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same\n let i = 0; // Iterations counter, will throw when over 1000\n const reset = () => {\n v.fill(1);\n k.fill(0);\n i = 0;\n };\n const h = (...b) => hmacFn(k, v, ...b); // hmac(k)(v, ...values)\n const reseed = (seed = u8n(0)) => {\n // HMAC-DRBG reseed() function. Steps D-G\n k = h(u8of(0x00), seed); // k = hmac(k || v || 0x00 || seed)\n v = h(); // v = hmac(k || v)\n if (seed.length === 0)\n return;\n k = h(u8of(0x01), seed); // k = hmac(k || v || 0x01 || seed)\n v = h(); // v = hmac(k || v)\n };\n const gen = () => {\n // HMAC-DRBG generate() function\n if (i++ >= 1000)\n throw new Error('drbg: tried 1000 values');\n let len = 0;\n const out = [];\n while (len < qByteLen) {\n v = h();\n const sl = v.slice();\n out.push(sl);\n len += v.length;\n }\n return (0, utils_js_1.concatBytes)(...out);\n };\n const genUntil = (seed, pred) => {\n reset();\n reseed(seed); // Steps D-G\n let res = undefined; // Step H: grind until k is in [1..n-1]\n while (!(res = pred(gen())))\n reseed();\n reset();\n return res;\n };\n return genUntil;\n}\n// Validating curves and fields\nconst validatorFns = {\n bigint: (val) => typeof val === 'bigint',\n function: (val) => typeof val === 'function',\n boolean: (val) => typeof val === 'boolean',\n string: (val) => typeof val === 'string',\n stringOrUint8Array: (val) => typeof val === 'string' || (0, utils_js_1.isBytes)(val),\n isSafeInteger: (val) => Number.isSafeInteger(val),\n array: (val) => Array.isArray(val),\n field: (val, object) => object.Fp.isValid(val),\n hash: (val) => typeof val === 'function' && Number.isSafeInteger(val.outputLen),\n};\n// type Record<K extends string | number | symbol, T> = { [P in K]: T; }\nfunction validateObject(object, validators, optValidators = {}) {\n const checkField = (fieldName, type, isOptional) => {\n const checkVal = validatorFns[type];\n if (typeof checkVal !== 'function')\n throw new Error('invalid validator function');\n const val = object[fieldName];\n if (isOptional && val === undefined)\n return;\n if (!checkVal(val, object)) {\n throw new Error('param ' + String(fieldName) + ' is invalid. Expected ' + type + ', got ' + val);\n }\n };\n for (const [fieldName, type] of Object.entries(validators))\n checkField(fieldName, type, false);\n for (const [fieldName, type] of Object.entries(optValidators))\n checkField(fieldName, type, true);\n return object;\n}\n// validate type tests\n// const o: { a: number; b: number; c: number } = { a: 1, b: 5, c: 6 };\n// const z0 = validateObject(o, { a: 'isSafeInteger' }, { c: 'bigint' }); // Ok!\n// // Should fail type-check\n// const z1 = validateObject(o, { a: 'tmp' }, { c: 'zz' });\n// const z2 = validateObject(o, { a: 'isSafeInteger' }, { c: 'zz' });\n// const z3 = validateObject(o, { test: 'boolean', z: 'bug' });\n// const z4 = validateObject(o, { a: 'boolean', z: 'bug' });\nfunction isHash(val) {\n return typeof val === 'function' && Number.isSafeInteger(val.outputLen);\n}\nfunction _validateObject(object, fields, optFields = {}) {\n if (!object || typeof object !== 'object')\n throw new Error('expected valid options object');\n function checkField(fieldName, expectedType, isOpt) {\n const val = object[fieldName];\n if (isOpt && val === undefined)\n return;\n const current = typeof val;\n if (current !== expectedType || val === null)\n throw new Error(`param \"${fieldName}\" is invalid: expected ${expectedType}, got ${current}`);\n }\n Object.entries(fields).forEach(([k, v]) => checkField(k, v, false));\n Object.entries(optFields).forEach(([k, v]) => checkField(k, v, true));\n}\n/**\n * throws not implemented error\n */\nconst notImplemented = () => {\n throw new Error('not implemented');\n};\nexports.notImplemented = notImplemented;\n/**\n * Memoizes (caches) computation result.\n * Uses WeakMap: the value is going auto-cleaned by GC after last reference is removed.\n */\nfunction memoized(fn) {\n const map = new WeakMap();\n return (arg, ...args) => {\n const val = map.get(arg);\n if (val !== undefined)\n return val;\n const computed = fn(arg, ...args);\n map.set(arg, computed);\n return computed;\n };\n}\n//# sourceMappingURL=utils.js.map",
|
|
32
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isNegativeLE = void 0;\nexports.mod = mod;\nexports.pow = pow;\nexports.pow2 = pow2;\nexports.invert = invert;\nexports.tonelliShanks = tonelliShanks;\nexports.FpSqrt = FpSqrt;\nexports.validateField = validateField;\nexports.FpPow = FpPow;\nexports.FpInvertBatch = FpInvertBatch;\nexports.FpDiv = FpDiv;\nexports.FpLegendre = FpLegendre;\nexports.FpIsSquare = FpIsSquare;\nexports.nLength = nLength;\nexports.Field = Field;\nexports.FpSqrtOdd = FpSqrtOdd;\nexports.FpSqrtEven = FpSqrtEven;\nexports.hashToPrivateScalar = hashToPrivateScalar;\nexports.getFieldBytesLength = getFieldBytesLength;\nexports.getMinHashLength = getMinHashLength;\nexports.mapHashToField = mapHashToField;\n/**\n * Utils for modular division and fields.\n * Field over 11 is a finite (Galois) field is integer number operations `mod 11`.\n * There is no division: it is replaced by modular multiplicative inverse.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nconst utils_ts_1 = require(\"../utils.js\");\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = /* @__PURE__ */ BigInt(2), _3n = /* @__PURE__ */ BigInt(3);\n// prettier-ignore\nconst _4n = /* @__PURE__ */ BigInt(4), _5n = /* @__PURE__ */ BigInt(5), _7n = /* @__PURE__ */ BigInt(7);\n// prettier-ignore\nconst _8n = /* @__PURE__ */ BigInt(8), _9n = /* @__PURE__ */ BigInt(9), _16n = /* @__PURE__ */ BigInt(16);\n// Calculates a modulo b\nfunction mod(a, b) {\n const result = a % b;\n return result >= _0n ? result : b + result;\n}\n/**\n * Efficiently raise num to power and do modular division.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n * @example\n * pow(2n, 6n, 11n) // 64n % 11n == 9n\n */\nfunction pow(num, power, modulo) {\n return FpPow(Field(modulo), num, power);\n}\n/** Does `x^(2^power)` mod p. `pow2(30, 4)` == `30^(2^4)` */\nfunction pow2(x, power, modulo) {\n let res = x;\n while (power-- > _0n) {\n res *= res;\n res %= modulo;\n }\n return res;\n}\n/**\n * Inverses number over modulo.\n * Implemented using [Euclidean GCD](https://brilliant.org/wiki/extended-euclidean-algorithm/).\n */\nfunction invert(number, modulo) {\n if (number === _0n)\n throw new Error('invert: expected non-zero number');\n if (modulo <= _0n)\n throw new Error('invert: expected positive modulus, got ' + modulo);\n // Fermat's little theorem \"CT-like\" version inv(n) = n^(m-2) mod m is 30x slower.\n let a = mod(number, modulo);\n let b = modulo;\n // prettier-ignore\n let x = _0n, y = _1n, u = _1n, v = _0n;\n while (a !== _0n) {\n // JIT applies optimization if those two lines follow each other\n const q = b / a;\n const r = b % a;\n const m = x - u * q;\n const n = y - v * q;\n // prettier-ignore\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n const gcd = b;\n if (gcd !== _1n)\n throw new Error('invert: does not exist');\n return mod(x, modulo);\n}\nfunction assertIsSquare(Fp, root, n) {\n if (!Fp.eql(Fp.sqr(root), n))\n throw new Error('Cannot find square root');\n}\n// Not all roots are possible! Example which will throw:\n// const NUM =\n// n = 72057594037927816n;\n// Fp = Field(BigInt('0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab'));\nfunction sqrt3mod4(Fp, n) {\n const p1div4 = (Fp.ORDER + _1n) / _4n;\n const root = Fp.pow(n, p1div4);\n assertIsSquare(Fp, root, n);\n return root;\n}\nfunction sqrt5mod8(Fp, n) {\n const p5div8 = (Fp.ORDER - _5n) / _8n;\n const n2 = Fp.mul(n, _2n);\n const v = Fp.pow(n2, p5div8);\n const nv = Fp.mul(n, v);\n const i = Fp.mul(Fp.mul(nv, _2n), v);\n const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));\n assertIsSquare(Fp, root, n);\n return root;\n}\n// Based on RFC9380, Kong algorithm\n// prettier-ignore\nfunction sqrt9mod16(P) {\n const Fp_ = Field(P);\n const tn = tonelliShanks(P);\n const c1 = tn(Fp_, Fp_.neg(Fp_.ONE)); // 1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F\n const c2 = tn(Fp_, c1); // 2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F\n const c3 = tn(Fp_, Fp_.neg(c1)); // 3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F\n const c4 = (P + _7n) / _16n; // 4. c4 = (q + 7) / 16 # Integer arithmetic\n return (Fp, n) => {\n let tv1 = Fp.pow(n, c4); // 1. tv1 = x^c4\n let tv2 = Fp.mul(tv1, c1); // 2. tv2 = c1 * tv1\n const tv3 = Fp.mul(tv1, c2); // 3. tv3 = c2 * tv1\n const tv4 = Fp.mul(tv1, c3); // 4. tv4 = c3 * tv1\n const e1 = Fp.eql(Fp.sqr(tv2), n); // 5. e1 = (tv2^2) == x\n const e2 = Fp.eql(Fp.sqr(tv3), n); // 6. e2 = (tv3^2) == x\n tv1 = Fp.cmov(tv1, tv2, e1); // 7. tv1 = CMOV(tv1, tv2, e1) # Select tv2 if (tv2^2) == x\n tv2 = Fp.cmov(tv4, tv3, e2); // 8. tv2 = CMOV(tv4, tv3, e2) # Select tv3 if (tv3^2) == x\n const e3 = Fp.eql(Fp.sqr(tv2), n); // 9. e3 = (tv2^2) == x\n const root = Fp.cmov(tv1, tv2, e3); // 10. z = CMOV(tv1, tv2, e3) # Select sqrt from tv1 & tv2\n assertIsSquare(Fp, root, n);\n return root;\n };\n}\n/**\n * Tonelli-Shanks square root search algorithm.\n * 1. https://eprint.iacr.org/2012/685.pdf (page 12)\n * 2. Square Roots from 1; 24, 51, 10 to Dan Shanks\n * @param P field order\n * @returns function that takes field Fp (created from P) and number n\n */\nfunction tonelliShanks(P) {\n // Initialization (precomputation).\n // Caching initialization could boost perf by 7%.\n if (P < _3n)\n throw new Error('sqrt is not defined for small field');\n // Factor P - 1 = Q * 2^S, where Q is odd\n let Q = P - _1n;\n let S = 0;\n while (Q % _2n === _0n) {\n Q /= _2n;\n S++;\n }\n // Find the first quadratic non-residue Z >= 2\n let Z = _2n;\n const _Fp = Field(P);\n while (FpLegendre(_Fp, Z) === 1) {\n // Basic primality test for P. After x iterations, chance of\n // not finding quadratic non-residue is 2^x, so 2^1000.\n if (Z++ > 1000)\n throw new Error('Cannot find square root: probably non-prime P');\n }\n // Fast-path; usually done before Z, but we do \"primality test\".\n if (S === 1)\n return sqrt3mod4;\n // Slow-path\n // TODO: test on Fp2 and others\n let cc = _Fp.pow(Z, Q); // c = z^Q\n const Q1div2 = (Q + _1n) / _2n;\n return function tonelliSlow(Fp, n) {\n if (Fp.is0(n))\n return n;\n // Check if n is a quadratic residue using Legendre symbol\n if (FpLegendre(Fp, n) !== 1)\n throw new Error('Cannot find square root');\n // Initialize variables for the main loop\n let M = S;\n let c = Fp.mul(Fp.ONE, cc); // c = z^Q, move cc from field _Fp into field Fp\n let t = Fp.pow(n, Q); // t = n^Q, first guess at the fudge factor\n let R = Fp.pow(n, Q1div2); // R = n^((Q+1)/2), first guess at the square root\n // Main loop\n // while t != 1\n while (!Fp.eql(t, Fp.ONE)) {\n if (Fp.is0(t))\n return Fp.ZERO; // if t=0 return R=0\n let i = 1;\n // Find the smallest i >= 1 such that t^(2^i) ≡ 1 (mod P)\n let t_tmp = Fp.sqr(t); // t^(2^1)\n while (!Fp.eql(t_tmp, Fp.ONE)) {\n i++;\n t_tmp = Fp.sqr(t_tmp); // t^(2^2)...\n if (i === M)\n throw new Error('Cannot find square root');\n }\n // Calculate the exponent for b: 2^(M - i - 1)\n const exponent = _1n << BigInt(M - i - 1); // bigint is important\n const b = Fp.pow(c, exponent); // b = 2^(M - i - 1)\n // Update variables\n M = i;\n c = Fp.sqr(b); // c = b^2\n t = Fp.mul(t, c); // t = (t * b^2)\n R = Fp.mul(R, b); // R = R*b\n }\n return R;\n };\n}\n/**\n * Square root for a finite field. Will try optimized versions first:\n *\n * 1. P ≡ 3 (mod 4)\n * 2. P ≡ 5 (mod 8)\n * 3. P ≡ 9 (mod 16)\n * 4. Tonelli-Shanks algorithm\n *\n * Different algorithms can give different roots, it is up to user to decide which one they want.\n * For example there is FpSqrtOdd/FpSqrtEven to choice root based on oddness (used for hash-to-curve).\n */\nfunction FpSqrt(P) {\n // P ≡ 3 (mod 4) => √n = n^((P+1)/4)\n if (P % _4n === _3n)\n return sqrt3mod4;\n // P ≡ 5 (mod 8) => Atkin algorithm, page 10 of https://eprint.iacr.org/2012/685.pdf\n if (P % _8n === _5n)\n return sqrt5mod8;\n // P ≡ 9 (mod 16) => Kong algorithm, page 11 of https://eprint.iacr.org/2012/685.pdf (algorithm 4)\n if (P % _16n === _9n)\n return sqrt9mod16(P);\n // Tonelli-Shanks algorithm\n return tonelliShanks(P);\n}\n// Little-endian check for first LE bit (last BE bit);\nconst isNegativeLE = (num, modulo) => (mod(num, modulo) & _1n) === _1n;\nexports.isNegativeLE = isNegativeLE;\n// prettier-ignore\nconst FIELD_FIELDS = [\n 'create', 'isValid', 'is0', 'neg', 'inv', 'sqrt', 'sqr',\n 'eql', 'add', 'sub', 'mul', 'pow', 'div',\n 'addN', 'subN', 'mulN', 'sqrN'\n];\nfunction validateField(field) {\n const initial = {\n ORDER: 'bigint',\n MASK: 'bigint',\n BYTES: 'number',\n BITS: 'number',\n };\n const opts = FIELD_FIELDS.reduce((map, val) => {\n map[val] = 'function';\n return map;\n }, initial);\n (0, utils_ts_1._validateObject)(field, opts);\n // const max = 16384;\n // if (field.BYTES < 1 || field.BYTES > max) throw new Error('invalid field');\n // if (field.BITS < 1 || field.BITS > 8 * max) throw new Error('invalid field');\n return field;\n}\n// Generic field functions\n/**\n * Same as `pow` but for Fp: non-constant-time.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n */\nfunction FpPow(Fp, num, power) {\n if (power < _0n)\n throw new Error('invalid exponent, negatives unsupported');\n if (power === _0n)\n return Fp.ONE;\n if (power === _1n)\n return num;\n let p = Fp.ONE;\n let d = num;\n while (power > _0n) {\n if (power & _1n)\n p = Fp.mul(p, d);\n d = Fp.sqr(d);\n power >>= _1n;\n }\n return p;\n}\n/**\n * Efficiently invert an array of Field elements.\n * Exception-free. Will return `undefined` for 0 elements.\n * @param passZero map 0 to 0 (instead of undefined)\n */\nfunction FpInvertBatch(Fp, nums, passZero = false) {\n const inverted = new Array(nums.length).fill(passZero ? Fp.ZERO : undefined);\n // Walk from first to last, multiply them by each other MOD p\n const multipliedAcc = nums.reduce((acc, num, i) => {\n if (Fp.is0(num))\n return acc;\n inverted[i] = acc;\n return Fp.mul(acc, num);\n }, Fp.ONE);\n // Invert last element\n const invertedAcc = Fp.inv(multipliedAcc);\n // Walk from last to first, multiply them by inverted each other MOD p\n nums.reduceRight((acc, num, i) => {\n if (Fp.is0(num))\n return acc;\n inverted[i] = Fp.mul(acc, inverted[i]);\n return Fp.mul(acc, num);\n }, invertedAcc);\n return inverted;\n}\n// TODO: remove\nfunction FpDiv(Fp, lhs, rhs) {\n return Fp.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, Fp.ORDER) : Fp.inv(rhs));\n}\n/**\n * Legendre symbol.\n * Legendre constant is used to calculate Legendre symbol (a | p)\n * which denotes the value of a^((p-1)/2) (mod p).\n *\n * * (a | p) ≡ 1 if a is a square (mod p), quadratic residue\n * * (a | p) ≡ -1 if a is not a square (mod p), quadratic non residue\n * * (a | p) ≡ 0 if a ≡ 0 (mod p)\n */\nfunction FpLegendre(Fp, n) {\n // We can use 3rd argument as optional cache of this value\n // but seems unneeded for now. The operation is very fast.\n const p1mod2 = (Fp.ORDER - _1n) / _2n;\n const powered = Fp.pow(n, p1mod2);\n const yes = Fp.eql(powered, Fp.ONE);\n const zero = Fp.eql(powered, Fp.ZERO);\n const no = Fp.eql(powered, Fp.neg(Fp.ONE));\n if (!yes && !zero && !no)\n throw new Error('invalid Legendre symbol result');\n return yes ? 1 : zero ? 0 : -1;\n}\n// This function returns True whenever the value x is a square in the field F.\nfunction FpIsSquare(Fp, n) {\n const l = FpLegendre(Fp, n);\n return l === 1;\n}\n// CURVE.n lengths\nfunction nLength(n, nBitLength) {\n // Bit size, byte size of CURVE.n\n if (nBitLength !== undefined)\n (0, utils_ts_1.anumber)(nBitLength);\n const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length;\n const nByteLength = Math.ceil(_nBitLength / 8);\n return { nBitLength: _nBitLength, nByteLength };\n}\n/**\n * Creates a finite field. Major performance optimizations:\n * * 1. Denormalized operations like mulN instead of mul.\n * * 2. Identical object shape: never add or remove keys.\n * * 3. `Object.freeze`.\n * Fragile: always run a benchmark on a change.\n * Security note: operations don't check 'isValid' for all elements for performance reasons,\n * it is caller responsibility to check this.\n * This is low-level code, please make sure you know what you're doing.\n *\n * Note about field properties:\n * * CHARACTERISTIC p = prime number, number of elements in main subgroup.\n * * ORDER q = similar to cofactor in curves, may be composite `q = p^m`.\n *\n * @param ORDER field order, probably prime, or could be composite\n * @param bitLen how many bits the field consumes\n * @param isLE (default: false) if encoding / decoding should be in little-endian\n * @param redef optional faster redefinitions of sqrt and other methods\n */\nfunction Field(ORDER, bitLenOrOpts, // TODO: use opts only in v2?\nisLE = false, opts = {}) {\n if (ORDER <= _0n)\n throw new Error('invalid field: expected ORDER > 0, got ' + ORDER);\n let _nbitLength = undefined;\n let _sqrt = undefined;\n let modFromBytes = false;\n let allowedLengths = undefined;\n if (typeof bitLenOrOpts === 'object' && bitLenOrOpts != null) {\n if (opts.sqrt || isLE)\n throw new Error('cannot specify opts in two arguments');\n const _opts = bitLenOrOpts;\n if (_opts.BITS)\n _nbitLength = _opts.BITS;\n if (_opts.sqrt)\n _sqrt = _opts.sqrt;\n if (typeof _opts.isLE === 'boolean')\n isLE = _opts.isLE;\n if (typeof _opts.modFromBytes === 'boolean')\n modFromBytes = _opts.modFromBytes;\n allowedLengths = _opts.allowedLengths;\n }\n else {\n if (typeof bitLenOrOpts === 'number')\n _nbitLength = bitLenOrOpts;\n if (opts.sqrt)\n _sqrt = opts.sqrt;\n }\n const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, _nbitLength);\n if (BYTES > 2048)\n throw new Error('invalid field: expected ORDER of <= 2048 bytes');\n let sqrtP; // cached sqrtP\n const f = Object.freeze({\n ORDER,\n isLE,\n BITS,\n BYTES,\n MASK: (0, utils_ts_1.bitMask)(BITS),\n ZERO: _0n,\n ONE: _1n,\n allowedLengths: allowedLengths,\n create: (num) => mod(num, ORDER),\n isValid: (num) => {\n if (typeof num !== 'bigint')\n throw new Error('invalid field element: expected bigint, got ' + typeof num);\n return _0n <= num && num < ORDER; // 0 is valid element, but it's not invertible\n },\n is0: (num) => num === _0n,\n // is valid and invertible\n isValidNot0: (num) => !f.is0(num) && f.isValid(num),\n isOdd: (num) => (num & _1n) === _1n,\n neg: (num) => mod(-num, ORDER),\n eql: (lhs, rhs) => lhs === rhs,\n sqr: (num) => mod(num * num, ORDER),\n add: (lhs, rhs) => mod(lhs + rhs, ORDER),\n sub: (lhs, rhs) => mod(lhs - rhs, ORDER),\n mul: (lhs, rhs) => mod(lhs * rhs, ORDER),\n pow: (num, power) => FpPow(f, num, power),\n div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER),\n // Same as above, but doesn't normalize\n sqrN: (num) => num * num,\n addN: (lhs, rhs) => lhs + rhs,\n subN: (lhs, rhs) => lhs - rhs,\n mulN: (lhs, rhs) => lhs * rhs,\n inv: (num) => invert(num, ORDER),\n sqrt: _sqrt ||\n ((n) => {\n if (!sqrtP)\n sqrtP = FpSqrt(ORDER);\n return sqrtP(f, n);\n }),\n toBytes: (num) => (isLE ? (0, utils_ts_1.numberToBytesLE)(num, BYTES) : (0, utils_ts_1.numberToBytesBE)(num, BYTES)),\n fromBytes: (bytes, skipValidation = true) => {\n if (allowedLengths) {\n if (!allowedLengths.includes(bytes.length) || bytes.length > BYTES) {\n throw new Error('Field.fromBytes: expected ' + allowedLengths + ' bytes, got ' + bytes.length);\n }\n const padded = new Uint8Array(BYTES);\n // isLE add 0 to right, !isLE to the left.\n padded.set(bytes, isLE ? 0 : padded.length - bytes.length);\n bytes = padded;\n }\n if (bytes.length !== BYTES)\n throw new Error('Field.fromBytes: expected ' + BYTES + ' bytes, got ' + bytes.length);\n let scalar = isLE ? (0, utils_ts_1.bytesToNumberLE)(bytes) : (0, utils_ts_1.bytesToNumberBE)(bytes);\n if (modFromBytes)\n scalar = mod(scalar, ORDER);\n if (!skipValidation)\n if (!f.isValid(scalar))\n throw new Error('invalid field element: outside of range 0..ORDER');\n // NOTE: we don't validate scalar here, please use isValid. This done such way because some\n // protocol may allow non-reduced scalar that reduced later or changed some other way.\n return scalar;\n },\n // TODO: we don't need it here, move out to separate fn\n invertBatch: (lst) => FpInvertBatch(f, lst),\n // We can't move this out because Fp6, Fp12 implement it\n // and it's unclear what to return in there.\n cmov: (a, b, c) => (c ? b : a),\n });\n return Object.freeze(f);\n}\n// Generic random scalar, we can do same for other fields if via Fp2.mul(Fp2.ONE, Fp2.random)?\n// This allows unsafe methods like ignore bias or zero. These unsafe, but often used in different protocols (if deterministic RNG).\n// which mean we cannot force this via opts.\n// Not sure what to do with randomBytes, we can accept it inside opts if wanted.\n// Probably need to export getMinHashLength somewhere?\n// random(bytes?: Uint8Array, unsafeAllowZero = false, unsafeAllowBias = false) {\n// const LEN = !unsafeAllowBias ? getMinHashLength(ORDER) : BYTES;\n// if (bytes === undefined) bytes = randomBytes(LEN); // _opts.randomBytes?\n// const num = isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n// // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n// const reduced = unsafeAllowZero ? mod(num, ORDER) : mod(num, ORDER - _1n) + _1n;\n// return reduced;\n// },\nfunction FpSqrtOdd(Fp, elm) {\n if (!Fp.isOdd)\n throw new Error(\"Field doesn't have isOdd\");\n const root = Fp.sqrt(elm);\n return Fp.isOdd(root) ? root : Fp.neg(root);\n}\nfunction FpSqrtEven(Fp, elm) {\n if (!Fp.isOdd)\n throw new Error(\"Field doesn't have isOdd\");\n const root = Fp.sqrt(elm);\n return Fp.isOdd(root) ? Fp.neg(root) : root;\n}\n/**\n * \"Constant-time\" private key generation utility.\n * Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field).\n * Which makes it slightly more biased, less secure.\n * @deprecated use `mapKeyToField` instead\n */\nfunction hashToPrivateScalar(hash, groupOrder, isLE = false) {\n hash = (0, utils_ts_1.ensureBytes)('privateHash', hash);\n const hashLen = hash.length;\n const minLen = nLength(groupOrder).nByteLength + 8;\n if (minLen < 24 || hashLen < minLen || hashLen > 1024)\n throw new Error('hashToPrivateScalar: expected ' + minLen + '-1024 bytes of input, got ' + hashLen);\n const num = isLE ? (0, utils_ts_1.bytesToNumberLE)(hash) : (0, utils_ts_1.bytesToNumberBE)(hash);\n return mod(num, groupOrder - _1n) + _1n;\n}\n/**\n * Returns total number of bytes consumed by the field element.\n * For example, 32 bytes for usual 256-bit weierstrass curve.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of field\n */\nfunction getFieldBytesLength(fieldOrder) {\n if (typeof fieldOrder !== 'bigint')\n throw new Error('field order must be bigint');\n const bitLength = fieldOrder.toString(2).length;\n return Math.ceil(bitLength / 8);\n}\n/**\n * Returns minimal amount of bytes that can be safely reduced\n * by field order.\n * Should be 2^-128 for 128-bit curve such as P256.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of target hash\n */\nfunction getMinHashLength(fieldOrder) {\n const length = getFieldBytesLength(fieldOrder);\n return length + Math.ceil(length / 2);\n}\n/**\n * \"Constant-time\" private key generation utility.\n * Can take (n + n/2) or more bytes of uniform input e.g. from CSPRNG or KDF\n * and convert them into private scalar, with the modulo bias being negligible.\n * Needs at least 48 bytes of input for 32-byte private key.\n * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/\n * FIPS 186-5, A.2 https://csrc.nist.gov/publications/detail/fips/186/5/final\n * RFC 9380, https://www.rfc-editor.org/rfc/rfc9380#section-5\n * @param hash hash output from SHA3 or a similar function\n * @param groupOrder size of subgroup - (e.g. secp256k1.CURVE.n)\n * @param isLE interpret hash bytes as LE num\n * @returns valid private scalar\n */\nfunction mapHashToField(key, fieldOrder, isLE = false) {\n const len = key.length;\n const fieldLen = getFieldBytesLength(fieldOrder);\n const minLen = getMinHashLength(fieldOrder);\n // No small numbers: need to understand bias story. No huge numbers: easier to detect JS timings.\n if (len < 16 || len < minLen || len > 1024)\n throw new Error('expected ' + minLen + '-1024 bytes of input, got ' + len);\n const num = isLE ? (0, utils_ts_1.bytesToNumberLE)(key) : (0, utils_ts_1.bytesToNumberBE)(key);\n // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n const reduced = mod(num, fieldOrder - _1n) + _1n;\n return isLE ? (0, utils_ts_1.numberToBytesLE)(reduced, fieldLen) : (0, utils_ts_1.numberToBytesBE)(reduced, fieldLen);\n}\n//# sourceMappingURL=modular.js.map",
|
|
33
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.wNAF = void 0;\nexports.negateCt = negateCt;\nexports.normalizeZ = normalizeZ;\nexports.mulEndoUnsafe = mulEndoUnsafe;\nexports.pippenger = pippenger;\nexports.precomputeMSMUnsafe = precomputeMSMUnsafe;\nexports.validateBasic = validateBasic;\nexports._createCurveFields = _createCurveFields;\n/**\n * Methods for elliptic curve multiplication by scalars.\n * Contains wNAF, pippenger.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nconst utils_ts_1 = require(\"../utils.js\");\nconst modular_ts_1 = require(\"./modular.js\");\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nfunction negateCt(condition, item) {\n const neg = item.negate();\n return condition ? neg : item;\n}\n/**\n * Takes a bunch of Projective Points but executes only one\n * inversion on all of them. Inversion is very slow operation,\n * so this improves performance massively.\n * Optimization: converts a list of projective points to a list of identical points with Z=1.\n */\nfunction normalizeZ(c, points) {\n const invertedZs = (0, modular_ts_1.FpInvertBatch)(c.Fp, points.map((p) => p.Z));\n return points.map((p, i) => c.fromAffine(p.toAffine(invertedZs[i])));\n}\nfunction validateW(W, bits) {\n if (!Number.isSafeInteger(W) || W <= 0 || W > bits)\n throw new Error('invalid window size, expected [1..' + bits + '], got W=' + W);\n}\nfunction calcWOpts(W, scalarBits) {\n validateW(W, scalarBits);\n const windows = Math.ceil(scalarBits / W) + 1; // W=8 33. Not 32, because we skip zero\n const windowSize = 2 ** (W - 1); // W=8 128. Not 256, because we skip zero\n const maxNumber = 2 ** W; // W=8 256\n const mask = (0, utils_ts_1.bitMask)(W); // W=8 255 == mask 0b11111111\n const shiftBy = BigInt(W); // W=8 8\n return { windows, windowSize, mask, maxNumber, shiftBy };\n}\nfunction calcOffsets(n, window, wOpts) {\n const { windowSize, mask, maxNumber, shiftBy } = wOpts;\n let wbits = Number(n & mask); // extract W bits.\n let nextN = n >> shiftBy; // shift number by W bits.\n // What actually happens here:\n // const highestBit = Number(mask ^ (mask >> 1n));\n // let wbits2 = wbits - 1; // skip zero\n // if (wbits2 & highestBit) { wbits2 ^= Number(mask); // (~);\n // split if bits > max: +224 => 256-32\n if (wbits > windowSize) {\n // we skip zero, which means instead of `>= size-1`, we do `> size`\n wbits -= maxNumber; // -32, can be maxNumber - wbits, but then we need to set isNeg here.\n nextN += _1n; // +256 (carry)\n }\n const offsetStart = window * windowSize;\n const offset = offsetStart + Math.abs(wbits) - 1; // -1 because we skip zero\n const isZero = wbits === 0; // is current window slice a 0?\n const isNeg = wbits < 0; // is current window slice negative?\n const isNegF = window % 2 !== 0; // fake random statement for noise\n const offsetF = offsetStart; // fake offset for noise\n return { nextN, offset, isZero, isNeg, isNegF, offsetF };\n}\nfunction validateMSMPoints(points, c) {\n if (!Array.isArray(points))\n throw new Error('array expected');\n points.forEach((p, i) => {\n if (!(p instanceof c))\n throw new Error('invalid point at index ' + i);\n });\n}\nfunction validateMSMScalars(scalars, field) {\n if (!Array.isArray(scalars))\n throw new Error('array of scalars expected');\n scalars.forEach((s, i) => {\n if (!field.isValid(s))\n throw new Error('invalid scalar at index ' + i);\n });\n}\n// Since points in different groups cannot be equal (different object constructor),\n// we can have single place to store precomputes.\n// Allows to make points frozen / immutable.\nconst pointPrecomputes = new WeakMap();\nconst pointWindowSizes = new WeakMap();\nfunction getW(P) {\n // To disable precomputes:\n // return 1;\n return pointWindowSizes.get(P) || 1;\n}\nfunction assert0(n) {\n if (n !== _0n)\n throw new Error('invalid wNAF');\n}\n/**\n * Elliptic curve multiplication of Point by scalar. Fragile.\n * Table generation takes **30MB of ram and 10ms on high-end CPU**,\n * but may take much longer on slow devices. Actual generation will happen on\n * first call of `multiply()`. By default, `BASE` point is precomputed.\n *\n * Scalars should always be less than curve order: this should be checked inside of a curve itself.\n * Creates precomputation tables for fast multiplication:\n * - private scalar is split by fixed size windows of W bits\n * - every window point is collected from window's table & added to accumulator\n * - since windows are different, same point inside tables won't be accessed more than once per calc\n * - each multiplication is 'Math.ceil(CURVE_ORDER / 𝑊) + 1' point additions (fixed for any scalar)\n * - +1 window is neccessary for wNAF\n * - wNAF reduces table size: 2x less memory + 2x faster generation, but 10% slower multiplication\n *\n * @todo Research returning 2d JS array of windows, instead of a single window.\n * This would allow windows to be in different memory locations\n */\nclass wNAF {\n // Parametrized with a given Point class (not individual point)\n constructor(Point, bits) {\n this.BASE = Point.BASE;\n this.ZERO = Point.ZERO;\n this.Fn = Point.Fn;\n this.bits = bits;\n }\n // non-const time multiplication ladder\n _unsafeLadder(elm, n, p = this.ZERO) {\n let d = elm;\n while (n > _0n) {\n if (n & _1n)\n p = p.add(d);\n d = d.double();\n n >>= _1n;\n }\n return p;\n }\n /**\n * Creates a wNAF precomputation window. Used for caching.\n * Default window size is set by `utils.precompute()` and is equal to 8.\n * Number of precomputed points depends on the curve size:\n * 2^(𝑊−1) * (Math.ceil(𝑛 / 𝑊) + 1), where:\n * - 𝑊 is the window size\n * - 𝑛 is the bitlength of the curve order.\n * For a 256-bit curve and window size 8, the number of precomputed points is 128 * 33 = 4224.\n * @param point Point instance\n * @param W window size\n * @returns precomputed point tables flattened to a single array\n */\n precomputeWindow(point, W) {\n const { windows, windowSize } = calcWOpts(W, this.bits);\n const points = [];\n let p = point;\n let base = p;\n for (let window = 0; window < windows; window++) {\n base = p;\n points.push(base);\n // i=1, bc we skip 0\n for (let i = 1; i < windowSize; i++) {\n base = base.add(p);\n points.push(base);\n }\n p = base.double();\n }\n return points;\n }\n /**\n * Implements ec multiplication using precomputed tables and w-ary non-adjacent form.\n * More compact implementation:\n * https://github.com/paulmillr/noble-secp256k1/blob/47cb1669b6e506ad66b35fe7d76132ae97465da2/index.ts#L502-L541\n * @returns real and fake (for const-time) points\n */\n wNAF(W, precomputes, n) {\n // Scalar should be smaller than field order\n if (!this.Fn.isValid(n))\n throw new Error('invalid scalar');\n // Accumulators\n let p = this.ZERO;\n let f = this.BASE;\n // This code was first written with assumption that 'f' and 'p' will never be infinity point:\n // since each addition is multiplied by 2 ** W, it cannot cancel each other. However,\n // there is negate now: it is possible that negated element from low value\n // would be the same as high element, which will create carry into next window.\n // It's not obvious how this can fail, but still worth investigating later.\n const wo = calcWOpts(W, this.bits);\n for (let window = 0; window < wo.windows; window++) {\n // (n === _0n) is handled and not early-exited. isEven and offsetF are used for noise\n const { nextN, offset, isZero, isNeg, isNegF, offsetF } = calcOffsets(n, window, wo);\n n = nextN;\n if (isZero) {\n // bits are 0: add garbage to fake point\n // Important part for const-time getPublicKey: add random \"noise\" point to f.\n f = f.add(negateCt(isNegF, precomputes[offsetF]));\n }\n else {\n // bits are 1: add to result point\n p = p.add(negateCt(isNeg, precomputes[offset]));\n }\n }\n assert0(n);\n // Return both real and fake points: JIT won't eliminate f.\n // At this point there is a way to F be infinity-point even if p is not,\n // which makes it less const-time: around 1 bigint multiply.\n return { p, f };\n }\n /**\n * Implements ec unsafe (non const-time) multiplication using precomputed tables and w-ary non-adjacent form.\n * @param acc accumulator point to add result of multiplication\n * @returns point\n */\n wNAFUnsafe(W, precomputes, n, acc = this.ZERO) {\n const wo = calcWOpts(W, this.bits);\n for (let window = 0; window < wo.windows; window++) {\n if (n === _0n)\n break; // Early-exit, skip 0 value\n const { nextN, offset, isZero, isNeg } = calcOffsets(n, window, wo);\n n = nextN;\n if (isZero) {\n // Window bits are 0: skip processing.\n // Move to next window.\n continue;\n }\n else {\n const item = precomputes[offset];\n acc = acc.add(isNeg ? item.negate() : item); // Re-using acc allows to save adds in MSM\n }\n }\n assert0(n);\n return acc;\n }\n getPrecomputes(W, point, transform) {\n // Calculate precomputes on a first run, reuse them after\n let comp = pointPrecomputes.get(point);\n if (!comp) {\n comp = this.precomputeWindow(point, W);\n if (W !== 1) {\n // Doing transform outside of if brings 15% perf hit\n if (typeof transform === 'function')\n comp = transform(comp);\n pointPrecomputes.set(point, comp);\n }\n }\n return comp;\n }\n cached(point, scalar, transform) {\n const W = getW(point);\n return this.wNAF(W, this.getPrecomputes(W, point, transform), scalar);\n }\n unsafe(point, scalar, transform, prev) {\n const W = getW(point);\n if (W === 1)\n return this._unsafeLadder(point, scalar, prev); // For W=1 ladder is ~x2 faster\n return this.wNAFUnsafe(W, this.getPrecomputes(W, point, transform), scalar, prev);\n }\n // We calculate precomputes for elliptic curve point multiplication\n // using windowed method. This specifies window size and\n // stores precomputed values. Usually only base point would be precomputed.\n createCache(P, W) {\n validateW(W, this.bits);\n pointWindowSizes.set(P, W);\n pointPrecomputes.delete(P);\n }\n hasCache(elm) {\n return getW(elm) !== 1;\n }\n}\nexports.wNAF = wNAF;\n/**\n * Endomorphism-specific multiplication for Koblitz curves.\n * Cost: 128 dbl, 0-256 adds.\n */\nfunction mulEndoUnsafe(Point, point, k1, k2) {\n let acc = point;\n let p1 = Point.ZERO;\n let p2 = Point.ZERO;\n while (k1 > _0n || k2 > _0n) {\n if (k1 & _1n)\n p1 = p1.add(acc);\n if (k2 & _1n)\n p2 = p2.add(acc);\n acc = acc.double();\n k1 >>= _1n;\n k2 >>= _1n;\n }\n return { p1, p2 };\n}\n/**\n * Pippenger algorithm for multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n * 30x faster vs naive addition on L=4096, 10x faster than precomputes.\n * For N=254bit, L=1, it does: 1024 ADD + 254 DBL. For L=5: 1536 ADD + 254 DBL.\n * Algorithmically constant-time (for same L), even when 1 point + scalar, or when scalar = 0.\n * @param c Curve Point constructor\n * @param fieldN field over CURVE.N - important that it's not over CURVE.P\n * @param points array of L curve points\n * @param scalars array of L scalars (aka secret keys / bigints)\n */\nfunction pippenger(c, fieldN, points, scalars) {\n // If we split scalars by some window (let's say 8 bits), every chunk will only\n // take 256 buckets even if there are 4096 scalars, also re-uses double.\n // TODO:\n // - https://eprint.iacr.org/2024/750.pdf\n // - https://tches.iacr.org/index.php/TCHES/article/view/10287\n // 0 is accepted in scalars\n validateMSMPoints(points, c);\n validateMSMScalars(scalars, fieldN);\n const plength = points.length;\n const slength = scalars.length;\n if (plength !== slength)\n throw new Error('arrays of points and scalars must have equal length');\n // if (plength === 0) throw new Error('array must be of length >= 2');\n const zero = c.ZERO;\n const wbits = (0, utils_ts_1.bitLen)(BigInt(plength));\n let windowSize = 1; // bits\n if (wbits > 12)\n windowSize = wbits - 3;\n else if (wbits > 4)\n windowSize = wbits - 2;\n else if (wbits > 0)\n windowSize = 2;\n const MASK = (0, utils_ts_1.bitMask)(windowSize);\n const buckets = new Array(Number(MASK) + 1).fill(zero); // +1 for zero array\n const lastBits = Math.floor((fieldN.BITS - 1) / windowSize) * windowSize;\n let sum = zero;\n for (let i = lastBits; i >= 0; i -= windowSize) {\n buckets.fill(zero);\n for (let j = 0; j < slength; j++) {\n const scalar = scalars[j];\n const wbits = Number((scalar >> BigInt(i)) & MASK);\n buckets[wbits] = buckets[wbits].add(points[j]);\n }\n let resI = zero; // not using this will do small speed-up, but will lose ct\n // Skip first bucket, because it is zero\n for (let j = buckets.length - 1, sumI = zero; j > 0; j--) {\n sumI = sumI.add(buckets[j]);\n resI = resI.add(sumI);\n }\n sum = sum.add(resI);\n if (i !== 0)\n for (let j = 0; j < windowSize; j++)\n sum = sum.double();\n }\n return sum;\n}\n/**\n * Precomputed multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n * @param c Curve Point constructor\n * @param fieldN field over CURVE.N - important that it's not over CURVE.P\n * @param points array of L curve points\n * @returns function which multiplies points with scaars\n */\nfunction precomputeMSMUnsafe(c, fieldN, points, windowSize) {\n /**\n * Performance Analysis of Window-based Precomputation\n *\n * Base Case (256-bit scalar, 8-bit window):\n * - Standard precomputation requires:\n * - 31 additions per scalar × 256 scalars = 7,936 ops\n * - Plus 255 summary additions = 8,191 total ops\n * Note: Summary additions can be optimized via accumulator\n *\n * Chunked Precomputation Analysis:\n * - Using 32 chunks requires:\n * - 255 additions per chunk\n * - 256 doublings\n * - Total: (255 × 32) + 256 = 8,416 ops\n *\n * Memory Usage Comparison:\n * Window Size | Standard Points | Chunked Points\n * ------------|-----------------|---------------\n * 4-bit | 520 | 15\n * 8-bit | 4,224 | 255\n * 10-bit | 13,824 | 1,023\n * 16-bit | 557,056 | 65,535\n *\n * Key Advantages:\n * 1. Enables larger window sizes due to reduced memory overhead\n * 2. More efficient for smaller scalar counts:\n * - 16 chunks: (16 × 255) + 256 = 4,336 ops\n * - ~2x faster than standard 8,191 ops\n *\n * Limitations:\n * - Not suitable for plain precomputes (requires 256 constant doublings)\n * - Performance degrades with larger scalar counts:\n * - Optimal for ~256 scalars\n * - Less efficient for 4096+ scalars (Pippenger preferred)\n */\n validateW(windowSize, fieldN.BITS);\n validateMSMPoints(points, c);\n const zero = c.ZERO;\n const tableSize = 2 ** windowSize - 1; // table size (without zero)\n const chunks = Math.ceil(fieldN.BITS / windowSize); // chunks of item\n const MASK = (0, utils_ts_1.bitMask)(windowSize);\n const tables = points.map((p) => {\n const res = [];\n for (let i = 0, acc = p; i < tableSize; i++) {\n res.push(acc);\n acc = acc.add(p);\n }\n return res;\n });\n return (scalars) => {\n validateMSMScalars(scalars, fieldN);\n if (scalars.length > points.length)\n throw new Error('array of scalars must be smaller than array of points');\n let res = zero;\n for (let i = 0; i < chunks; i++) {\n // No need to double if accumulator is still zero.\n if (res !== zero)\n for (let j = 0; j < windowSize; j++)\n res = res.double();\n const shiftBy = BigInt(chunks * windowSize - (i + 1) * windowSize);\n for (let j = 0; j < scalars.length; j++) {\n const n = scalars[j];\n const curr = Number((n >> shiftBy) & MASK);\n if (!curr)\n continue; // skip zero scalars chunks\n res = res.add(tables[j][curr - 1]);\n }\n }\n return res;\n };\n}\n// TODO: remove\n/** @deprecated */\nfunction validateBasic(curve) {\n (0, modular_ts_1.validateField)(curve.Fp);\n (0, utils_ts_1.validateObject)(curve, {\n n: 'bigint',\n h: 'bigint',\n Gx: 'field',\n Gy: 'field',\n }, {\n nBitLength: 'isSafeInteger',\n nByteLength: 'isSafeInteger',\n });\n // Set defaults\n return Object.freeze({\n ...(0, modular_ts_1.nLength)(curve.n, curve.nBitLength),\n ...curve,\n ...{ p: curve.Fp.ORDER },\n });\n}\nfunction createField(order, field, isLE) {\n if (field) {\n if (field.ORDER !== order)\n throw new Error('Field.ORDER must match order: Fp == p, Fn == n');\n (0, modular_ts_1.validateField)(field);\n return field;\n }\n else {\n return (0, modular_ts_1.Field)(order, { isLE });\n }\n}\n/** Validates CURVE opts and creates fields */\nfunction _createCurveFields(type, CURVE, curveOpts = {}, FpFnLE) {\n if (FpFnLE === undefined)\n FpFnLE = type === 'edwards';\n if (!CURVE || typeof CURVE !== 'object')\n throw new Error(`expected valid ${type} CURVE object`);\n for (const p of ['p', 'n', 'h']) {\n const val = CURVE[p];\n if (!(typeof val === 'bigint' && val > _0n))\n throw new Error(`CURVE.${p} must be positive bigint`);\n }\n const Fp = createField(CURVE.p, curveOpts.Fp, FpFnLE);\n const Fn = createField(CURVE.n, curveOpts.Fn, FpFnLE);\n const _b = type === 'weierstrass' ? 'b' : 'd';\n const params = ['Gx', 'Gy', 'a', _b];\n for (const p of params) {\n // @ts-ignore\n if (!Fp.isValid(CURVE[p]))\n throw new Error(`CURVE.${p} must be valid field element of CURVE.Fp`);\n }\n CURVE = Object.freeze(Object.assign({}, CURVE));\n return { CURVE, Fp, Fn };\n}\n//# sourceMappingURL=curve.js.map",
|
|
34
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PrimeEdwardsPoint = void 0;\nexports.edwards = edwards;\nexports.eddsa = eddsa;\nexports.twistedEdwards = twistedEdwards;\n/**\n * Twisted Edwards curve. The formula is: ax² + y² = 1 + dx²y².\n * For design rationale of types / exports, see weierstrass module documentation.\n * Untwisted Edwards curves exist, but they aren't used in real-world protocols.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nconst utils_ts_1 = require(\"../utils.js\");\nconst curve_ts_1 = require(\"./curve.js\");\nconst modular_ts_1 = require(\"./modular.js\");\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _8n = BigInt(8);\nfunction isEdValidXY(Fp, CURVE, x, y) {\n const x2 = Fp.sqr(x);\n const y2 = Fp.sqr(y);\n const left = Fp.add(Fp.mul(CURVE.a, x2), y2);\n const right = Fp.add(Fp.ONE, Fp.mul(CURVE.d, Fp.mul(x2, y2)));\n return Fp.eql(left, right);\n}\nfunction edwards(params, extraOpts = {}) {\n const validated = (0, curve_ts_1._createCurveFields)('edwards', params, extraOpts, extraOpts.FpFnLE);\n const { Fp, Fn } = validated;\n let CURVE = validated.CURVE;\n const { h: cofactor } = CURVE;\n (0, utils_ts_1._validateObject)(extraOpts, {}, { uvRatio: 'function' });\n // Important:\n // There are some places where Fp.BYTES is used instead of nByteLength.\n // So far, everything has been tested with curves of Fp.BYTES == nByteLength.\n // TODO: test and find curves which behave otherwise.\n const MASK = _2n << (BigInt(Fn.BYTES * 8) - _1n);\n const modP = (n) => Fp.create(n); // Function overrides\n // sqrt(u/v)\n const uvRatio = extraOpts.uvRatio ||\n ((u, v) => {\n try {\n return { isValid: true, value: Fp.sqrt(Fp.div(u, v)) };\n }\n catch (e) {\n return { isValid: false, value: _0n };\n }\n });\n // Validate whether the passed curve params are valid.\n // equation ax² + y² = 1 + dx²y² should work for generator point.\n if (!isEdValidXY(Fp, CURVE, CURVE.Gx, CURVE.Gy))\n throw new Error('bad curve params: generator point');\n /**\n * Asserts coordinate is valid: 0 <= n < MASK.\n * Coordinates >= Fp.ORDER are allowed for zip215.\n */\n function acoord(title, n, banZero = false) {\n const min = banZero ? _1n : _0n;\n (0, utils_ts_1.aInRange)('coordinate ' + title, n, min, MASK);\n return n;\n }\n function aextpoint(other) {\n if (!(other instanceof Point))\n throw new Error('ExtendedPoint expected');\n }\n // Converts Extended point to default (x, y) coordinates.\n // Can accept precomputed Z^-1 - for example, from invertBatch.\n const toAffineMemo = (0, utils_ts_1.memoized)((p, iz) => {\n const { X, Y, Z } = p;\n const is0 = p.is0();\n if (iz == null)\n iz = is0 ? _8n : Fp.inv(Z); // 8 was chosen arbitrarily\n const x = modP(X * iz);\n const y = modP(Y * iz);\n const zz = Fp.mul(Z, iz);\n if (is0)\n return { x: _0n, y: _1n };\n if (zz !== _1n)\n throw new Error('invZ was invalid');\n return { x, y };\n });\n const assertValidMemo = (0, utils_ts_1.memoized)((p) => {\n const { a, d } = CURVE;\n if (p.is0())\n throw new Error('bad point: ZERO'); // TODO: optimize, with vars below?\n // Equation in affine coordinates: ax² + y² = 1 + dx²y²\n // Equation in projective coordinates (X/Z, Y/Z, Z): (aX² + Y²)Z² = Z⁴ + dX²Y²\n const { X, Y, Z, T } = p;\n const X2 = modP(X * X); // X²\n const Y2 = modP(Y * Y); // Y²\n const Z2 = modP(Z * Z); // Z²\n const Z4 = modP(Z2 * Z2); // Z⁴\n const aX2 = modP(X2 * a); // aX²\n const left = modP(Z2 * modP(aX2 + Y2)); // (aX² + Y²)Z²\n const right = modP(Z4 + modP(d * modP(X2 * Y2))); // Z⁴ + dX²Y²\n if (left !== right)\n throw new Error('bad point: equation left != right (1)');\n // In Extended coordinates we also have T, which is x*y=T/Z: check X*Y == Z*T\n const XY = modP(X * Y);\n const ZT = modP(Z * T);\n if (XY !== ZT)\n throw new Error('bad point: equation left != right (2)');\n return true;\n });\n // Extended Point works in extended coordinates: (X, Y, Z, T) ∋ (x=X/Z, y=Y/Z, T=xy).\n // https://en.wikipedia.org/wiki/Twisted_Edwards_curve#Extended_coordinates\n class Point {\n constructor(X, Y, Z, T) {\n this.X = acoord('x', X);\n this.Y = acoord('y', Y);\n this.Z = acoord('z', Z, true);\n this.T = acoord('t', T);\n Object.freeze(this);\n }\n static CURVE() {\n return CURVE;\n }\n static fromAffine(p) {\n if (p instanceof Point)\n throw new Error('extended point not allowed');\n const { x, y } = p || {};\n acoord('x', x);\n acoord('y', y);\n return new Point(x, y, _1n, modP(x * y));\n }\n // Uses algo from RFC8032 5.1.3.\n static fromBytes(bytes, zip215 = false) {\n const len = Fp.BYTES;\n const { a, d } = CURVE;\n bytes = (0, utils_ts_1.copyBytes)((0, utils_ts_1._abytes2)(bytes, len, 'point'));\n (0, utils_ts_1._abool2)(zip215, 'zip215');\n const normed = (0, utils_ts_1.copyBytes)(bytes); // copy again, we'll manipulate it\n const lastByte = bytes[len - 1]; // select last byte\n normed[len - 1] = lastByte & ~0x80; // clear last bit\n const y = (0, utils_ts_1.bytesToNumberLE)(normed);\n // zip215=true is good for consensus-critical apps. =false follows RFC8032 / NIST186-5.\n // RFC8032 prohibits >= p, but ZIP215 doesn't\n // zip215=true: 0 <= y < MASK (2^256 for ed25519)\n // zip215=false: 0 <= y < P (2^255-19 for ed25519)\n const max = zip215 ? MASK : Fp.ORDER;\n (0, utils_ts_1.aInRange)('point.y', y, _0n, max);\n // Ed25519: x² = (y²-1)/(dy²+1) mod p. Ed448: x² = (y²-1)/(dy²-1) mod p. Generic case:\n // ax²+y²=1+dx²y² => y²-1=dx²y²-ax² => y²-1=x²(dy²-a) => x²=(y²-1)/(dy²-a)\n const y2 = modP(y * y); // denominator is always non-0 mod p.\n const u = modP(y2 - _1n); // u = y² - 1\n const v = modP(d * y2 - a); // v = d y² + 1.\n let { isValid, value: x } = uvRatio(u, v); // √(u/v)\n if (!isValid)\n throw new Error('bad point: invalid y coordinate');\n const isXOdd = (x & _1n) === _1n; // There are 2 square roots. Use x_0 bit to select proper\n const isLastByteOdd = (lastByte & 0x80) !== 0; // x_0, last bit\n if (!zip215 && x === _0n && isLastByteOdd)\n // if x=0 and x_0 = 1, fail\n throw new Error('bad point: x=0 and x_0=1');\n if (isLastByteOdd !== isXOdd)\n x = modP(-x); // if x_0 != x mod 2, set x = p-x\n return Point.fromAffine({ x, y });\n }\n static fromHex(bytes, zip215 = false) {\n return Point.fromBytes((0, utils_ts_1.ensureBytes)('point', bytes), zip215);\n }\n get x() {\n return this.toAffine().x;\n }\n get y() {\n return this.toAffine().y;\n }\n precompute(windowSize = 8, isLazy = true) {\n wnaf.createCache(this, windowSize);\n if (!isLazy)\n this.multiply(_2n); // random number\n return this;\n }\n // Useful in fromAffine() - not for fromBytes(), which always created valid points.\n assertValidity() {\n assertValidMemo(this);\n }\n // Compare one point to another.\n equals(other) {\n aextpoint(other);\n const { X: X1, Y: Y1, Z: Z1 } = this;\n const { X: X2, Y: Y2, Z: Z2 } = other;\n const X1Z2 = modP(X1 * Z2);\n const X2Z1 = modP(X2 * Z1);\n const Y1Z2 = modP(Y1 * Z2);\n const Y2Z1 = modP(Y2 * Z1);\n return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;\n }\n is0() {\n return this.equals(Point.ZERO);\n }\n negate() {\n // Flips point sign to a negative one (-x, y in affine coords)\n return new Point(modP(-this.X), this.Y, this.Z, modP(-this.T));\n }\n // Fast algo for doubling Extended Point.\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#doubling-dbl-2008-hwcd\n // Cost: 4M + 4S + 1*a + 6add + 1*2.\n double() {\n const { a } = CURVE;\n const { X: X1, Y: Y1, Z: Z1 } = this;\n const A = modP(X1 * X1); // A = X12\n const B = modP(Y1 * Y1); // B = Y12\n const C = modP(_2n * modP(Z1 * Z1)); // C = 2*Z12\n const D = modP(a * A); // D = a*A\n const x1y1 = X1 + Y1;\n const E = modP(modP(x1y1 * x1y1) - A - B); // E = (X1+Y1)2-A-B\n const G = D + B; // G = D+B\n const F = G - C; // F = G-C\n const H = D - B; // H = D-B\n const X3 = modP(E * F); // X3 = E*F\n const Y3 = modP(G * H); // Y3 = G*H\n const T3 = modP(E * H); // T3 = E*H\n const Z3 = modP(F * G); // Z3 = F*G\n return new Point(X3, Y3, Z3, T3);\n }\n // Fast algo for adding 2 Extended Points.\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#addition-add-2008-hwcd\n // Cost: 9M + 1*a + 1*d + 7add.\n add(other) {\n aextpoint(other);\n const { a, d } = CURVE;\n const { X: X1, Y: Y1, Z: Z1, T: T1 } = this;\n const { X: X2, Y: Y2, Z: Z2, T: T2 } = other;\n const A = modP(X1 * X2); // A = X1*X2\n const B = modP(Y1 * Y2); // B = Y1*Y2\n const C = modP(T1 * d * T2); // C = T1*d*T2\n const D = modP(Z1 * Z2); // D = Z1*Z2\n const E = modP((X1 + Y1) * (X2 + Y2) - A - B); // E = (X1+Y1)*(X2+Y2)-A-B\n const F = D - C; // F = D-C\n const G = D + C; // G = D+C\n const H = modP(B - a * A); // H = B-a*A\n const X3 = modP(E * F); // X3 = E*F\n const Y3 = modP(G * H); // Y3 = G*H\n const T3 = modP(E * H); // T3 = E*H\n const Z3 = modP(F * G); // Z3 = F*G\n return new Point(X3, Y3, Z3, T3);\n }\n subtract(other) {\n return this.add(other.negate());\n }\n // Constant-time multiplication.\n multiply(scalar) {\n // 1 <= scalar < L\n if (!Fn.isValidNot0(scalar))\n throw new Error('invalid scalar: expected 1 <= sc < curve.n');\n const { p, f } = wnaf.cached(this, scalar, (p) => (0, curve_ts_1.normalizeZ)(Point, p));\n return (0, curve_ts_1.normalizeZ)(Point, [p, f])[0];\n }\n // Non-constant-time multiplication. Uses double-and-add algorithm.\n // It's faster, but should only be used when you don't care about\n // an exposed private key e.g. sig verification.\n // Does NOT allow scalars higher than CURVE.n.\n // Accepts optional accumulator to merge with multiply (important for sparse scalars)\n multiplyUnsafe(scalar, acc = Point.ZERO) {\n // 0 <= scalar < L\n if (!Fn.isValid(scalar))\n throw new Error('invalid scalar: expected 0 <= sc < curve.n');\n if (scalar === _0n)\n return Point.ZERO;\n if (this.is0() || scalar === _1n)\n return this;\n return wnaf.unsafe(this, scalar, (p) => (0, curve_ts_1.normalizeZ)(Point, p), acc);\n }\n // Checks if point is of small order.\n // If you add something to small order point, you will have \"dirty\"\n // point with torsion component.\n // Multiplies point by cofactor and checks if the result is 0.\n isSmallOrder() {\n return this.multiplyUnsafe(cofactor).is0();\n }\n // Multiplies point by curve order and checks if the result is 0.\n // Returns `false` is the point is dirty.\n isTorsionFree() {\n return wnaf.unsafe(this, CURVE.n).is0();\n }\n // Converts Extended point to default (x, y) coordinates.\n // Can accept precomputed Z^-1 - for example, from invertBatch.\n toAffine(invertedZ) {\n return toAffineMemo(this, invertedZ);\n }\n clearCofactor() {\n if (cofactor === _1n)\n return this;\n return this.multiplyUnsafe(cofactor);\n }\n toBytes() {\n const { x, y } = this.toAffine();\n // Fp.toBytes() allows non-canonical encoding of y (>= p).\n const bytes = Fp.toBytes(y);\n // Each y has 2 valid points: (x, y), (x,-y).\n // When compressing, it's enough to store y and use the last byte to encode sign of x\n bytes[bytes.length - 1] |= x & _1n ? 0x80 : 0;\n return bytes;\n }\n toHex() {\n return (0, utils_ts_1.bytesToHex)(this.toBytes());\n }\n toString() {\n return `<Point ${this.is0() ? 'ZERO' : this.toHex()}>`;\n }\n // TODO: remove\n get ex() {\n return this.X;\n }\n get ey() {\n return this.Y;\n }\n get ez() {\n return this.Z;\n }\n get et() {\n return this.T;\n }\n static normalizeZ(points) {\n return (0, curve_ts_1.normalizeZ)(Point, points);\n }\n static msm(points, scalars) {\n return (0, curve_ts_1.pippenger)(Point, Fn, points, scalars);\n }\n _setWindowSize(windowSize) {\n this.precompute(windowSize);\n }\n toRawBytes() {\n return this.toBytes();\n }\n }\n // base / generator point\n Point.BASE = new Point(CURVE.Gx, CURVE.Gy, _1n, modP(CURVE.Gx * CURVE.Gy));\n // zero / infinity / identity point\n Point.ZERO = new Point(_0n, _1n, _1n, _0n); // 0, 1, 1, 0\n // math field\n Point.Fp = Fp;\n // scalar field\n Point.Fn = Fn;\n const wnaf = new curve_ts_1.wNAF(Point, Fn.BITS);\n Point.BASE.precompute(8); // Enable precomputes. Slows down first publicKey computation by 20ms.\n return Point;\n}\n/**\n * Base class for prime-order points like Ristretto255 and Decaf448.\n * These points eliminate cofactor issues by representing equivalence classes\n * of Edwards curve points.\n */\nclass PrimeEdwardsPoint {\n constructor(ep) {\n this.ep = ep;\n }\n // Static methods that must be implemented by subclasses\n static fromBytes(_bytes) {\n (0, utils_ts_1.notImplemented)();\n }\n static fromHex(_hex) {\n (0, utils_ts_1.notImplemented)();\n }\n get x() {\n return this.toAffine().x;\n }\n get y() {\n return this.toAffine().y;\n }\n // Common implementations\n clearCofactor() {\n // no-op for prime-order groups\n return this;\n }\n assertValidity() {\n this.ep.assertValidity();\n }\n toAffine(invertedZ) {\n return this.ep.toAffine(invertedZ);\n }\n toHex() {\n return (0, utils_ts_1.bytesToHex)(this.toBytes());\n }\n toString() {\n return this.toHex();\n }\n isTorsionFree() {\n return true;\n }\n isSmallOrder() {\n return false;\n }\n add(other) {\n this.assertSame(other);\n return this.init(this.ep.add(other.ep));\n }\n subtract(other) {\n this.assertSame(other);\n return this.init(this.ep.subtract(other.ep));\n }\n multiply(scalar) {\n return this.init(this.ep.multiply(scalar));\n }\n multiplyUnsafe(scalar) {\n return this.init(this.ep.multiplyUnsafe(scalar));\n }\n double() {\n return this.init(this.ep.double());\n }\n negate() {\n return this.init(this.ep.negate());\n }\n precompute(windowSize, isLazy) {\n return this.init(this.ep.precompute(windowSize, isLazy));\n }\n /** @deprecated use `toBytes` */\n toRawBytes() {\n return this.toBytes();\n }\n}\nexports.PrimeEdwardsPoint = PrimeEdwardsPoint;\n/**\n * Initializes EdDSA signatures over given Edwards curve.\n */\nfunction eddsa(Point, cHash, eddsaOpts = {}) {\n if (typeof cHash !== 'function')\n throw new Error('\"hash\" function param is required');\n (0, utils_ts_1._validateObject)(eddsaOpts, {}, {\n adjustScalarBytes: 'function',\n randomBytes: 'function',\n domain: 'function',\n prehash: 'function',\n mapToCurve: 'function',\n });\n const { prehash } = eddsaOpts;\n const { BASE, Fp, Fn } = Point;\n const randomBytes = eddsaOpts.randomBytes || utils_ts_1.randomBytes;\n const adjustScalarBytes = eddsaOpts.adjustScalarBytes || ((bytes) => bytes);\n const domain = eddsaOpts.domain ||\n ((data, ctx, phflag) => {\n (0, utils_ts_1._abool2)(phflag, 'phflag');\n if (ctx.length || phflag)\n throw new Error('Contexts/pre-hash are not supported');\n return data;\n }); // NOOP\n // Little-endian SHA512 with modulo n\n function modN_LE(hash) {\n return Fn.create((0, utils_ts_1.bytesToNumberLE)(hash)); // Not Fn.fromBytes: it has length limit\n }\n // Get the hashed private scalar per RFC8032 5.1.5\n function getPrivateScalar(key) {\n const len = lengths.secretKey;\n key = (0, utils_ts_1.ensureBytes)('private key', key, len);\n // Hash private key with curve's hash function to produce uniformingly random input\n // Check byte lengths: ensure(64, h(ensure(32, key)))\n const hashed = (0, utils_ts_1.ensureBytes)('hashed private key', cHash(key), 2 * len);\n const head = adjustScalarBytes(hashed.slice(0, len)); // clear first half bits, produce FE\n const prefix = hashed.slice(len, 2 * len); // second half is called key prefix (5.1.6)\n const scalar = modN_LE(head); // The actual private scalar\n return { head, prefix, scalar };\n }\n /** Convenience method that creates public key from scalar. RFC8032 5.1.5 */\n function getExtendedPublicKey(secretKey) {\n const { head, prefix, scalar } = getPrivateScalar(secretKey);\n const point = BASE.multiply(scalar); // Point on Edwards curve aka public key\n const pointBytes = point.toBytes();\n return { head, prefix, scalar, point, pointBytes };\n }\n /** Calculates EdDSA pub key. RFC8032 5.1.5. */\n function getPublicKey(secretKey) {\n return getExtendedPublicKey(secretKey).pointBytes;\n }\n // int('LE', SHA512(dom2(F, C) || msgs)) mod N\n function hashDomainToScalar(context = Uint8Array.of(), ...msgs) {\n const msg = (0, utils_ts_1.concatBytes)(...msgs);\n return modN_LE(cHash(domain(msg, (0, utils_ts_1.ensureBytes)('context', context), !!prehash)));\n }\n /** Signs message with privateKey. RFC8032 5.1.6 */\n function sign(msg, secretKey, options = {}) {\n msg = (0, utils_ts_1.ensureBytes)('message', msg);\n if (prehash)\n msg = prehash(msg); // for ed25519ph etc.\n const { prefix, scalar, pointBytes } = getExtendedPublicKey(secretKey);\n const r = hashDomainToScalar(options.context, prefix, msg); // r = dom2(F, C) || prefix || PH(M)\n const R = BASE.multiply(r).toBytes(); // R = rG\n const k = hashDomainToScalar(options.context, R, pointBytes, msg); // R || A || PH(M)\n const s = Fn.create(r + k * scalar); // S = (r + k * s) mod L\n if (!Fn.isValid(s))\n throw new Error('sign failed: invalid s'); // 0 <= s < L\n const rs = (0, utils_ts_1.concatBytes)(R, Fn.toBytes(s));\n return (0, utils_ts_1._abytes2)(rs, lengths.signature, 'result');\n }\n // verification rule is either zip215 or rfc8032 / nist186-5. Consult fromHex:\n const verifyOpts = { zip215: true };\n /**\n * Verifies EdDSA signature against message and public key. RFC8032 5.1.7.\n * An extended group equation is checked.\n */\n function verify(sig, msg, publicKey, options = verifyOpts) {\n const { context, zip215 } = options;\n const len = lengths.signature;\n sig = (0, utils_ts_1.ensureBytes)('signature', sig, len);\n msg = (0, utils_ts_1.ensureBytes)('message', msg);\n publicKey = (0, utils_ts_1.ensureBytes)('publicKey', publicKey, lengths.publicKey);\n if (zip215 !== undefined)\n (0, utils_ts_1._abool2)(zip215, 'zip215');\n if (prehash)\n msg = prehash(msg); // for ed25519ph, etc\n const mid = len / 2;\n const r = sig.subarray(0, mid);\n const s = (0, utils_ts_1.bytesToNumberLE)(sig.subarray(mid, len));\n let A, R, SB;\n try {\n // zip215=true is good for consensus-critical apps. =false follows RFC8032 / NIST186-5.\n // zip215=true: 0 <= y < MASK (2^256 for ed25519)\n // zip215=false: 0 <= y < P (2^255-19 for ed25519)\n A = Point.fromBytes(publicKey, zip215);\n R = Point.fromBytes(r, zip215);\n SB = BASE.multiplyUnsafe(s); // 0 <= s < l is done inside\n }\n catch (error) {\n return false;\n }\n if (!zip215 && A.isSmallOrder())\n return false; // zip215 allows public keys of small order\n const k = hashDomainToScalar(context, R.toBytes(), A.toBytes(), msg);\n const RkA = R.add(A.multiplyUnsafe(k));\n // Extended group equation\n // [8][S]B = [8]R + [8][k]A'\n return RkA.subtract(SB).clearCofactor().is0();\n }\n const _size = Fp.BYTES; // 32 for ed25519, 57 for ed448\n const lengths = {\n secretKey: _size,\n publicKey: _size,\n signature: 2 * _size,\n seed: _size,\n };\n function randomSecretKey(seed = randomBytes(lengths.seed)) {\n return (0, utils_ts_1._abytes2)(seed, lengths.seed, 'seed');\n }\n function keygen(seed) {\n const secretKey = utils.randomSecretKey(seed);\n return { secretKey, publicKey: getPublicKey(secretKey) };\n }\n function isValidSecretKey(key) {\n return (0, utils_ts_1.isBytes)(key) && key.length === Fn.BYTES;\n }\n function isValidPublicKey(key, zip215) {\n try {\n return !!Point.fromBytes(key, zip215);\n }\n catch (error) {\n return false;\n }\n }\n const utils = {\n getExtendedPublicKey,\n randomSecretKey,\n isValidSecretKey,\n isValidPublicKey,\n /**\n * Converts ed public key to x public key. Uses formula:\n * - ed25519:\n * - `(u, v) = ((1+y)/(1-y), sqrt(-486664)*u/x)`\n * - `(x, y) = (sqrt(-486664)*u/v, (u-1)/(u+1))`\n * - ed448:\n * - `(u, v) = ((y-1)/(y+1), sqrt(156324)*u/x)`\n * - `(x, y) = (sqrt(156324)*u/v, (1+u)/(1-u))`\n */\n toMontgomery(publicKey) {\n const { y } = Point.fromBytes(publicKey);\n const size = lengths.publicKey;\n const is25519 = size === 32;\n if (!is25519 && size !== 57)\n throw new Error('only defined for 25519 and 448');\n const u = is25519 ? Fp.div(_1n + y, _1n - y) : Fp.div(y - _1n, y + _1n);\n return Fp.toBytes(u);\n },\n toMontgomerySecret(secretKey) {\n const size = lengths.secretKey;\n (0, utils_ts_1._abytes2)(secretKey, size);\n const hashed = cHash(secretKey.subarray(0, size));\n return adjustScalarBytes(hashed).subarray(0, size);\n },\n /** @deprecated */\n randomPrivateKey: randomSecretKey,\n /** @deprecated */\n precompute(windowSize = 8, point = Point.BASE) {\n return point.precompute(windowSize, false);\n },\n };\n return Object.freeze({\n keygen,\n getPublicKey,\n sign,\n verify,\n utils,\n Point,\n lengths,\n });\n}\nfunction _eddsa_legacy_opts_to_new(c) {\n const CURVE = {\n a: c.a,\n d: c.d,\n p: c.Fp.ORDER,\n n: c.n,\n h: c.h,\n Gx: c.Gx,\n Gy: c.Gy,\n };\n const Fp = c.Fp;\n const Fn = (0, modular_ts_1.Field)(CURVE.n, c.nBitLength, true);\n const curveOpts = { Fp, Fn, uvRatio: c.uvRatio };\n const eddsaOpts = {\n randomBytes: c.randomBytes,\n adjustScalarBytes: c.adjustScalarBytes,\n domain: c.domain,\n prehash: c.prehash,\n mapToCurve: c.mapToCurve,\n };\n return { CURVE, curveOpts, hash: c.hash, eddsaOpts };\n}\nfunction _eddsa_new_output_to_legacy(c, eddsa) {\n const Point = eddsa.Point;\n const legacy = Object.assign({}, eddsa, {\n ExtendedPoint: Point,\n CURVE: c,\n nBitLength: Point.Fn.BITS,\n nByteLength: Point.Fn.BYTES,\n });\n return legacy;\n}\n// TODO: remove. Use eddsa\nfunction twistedEdwards(c) {\n const { CURVE, curveOpts, hash, eddsaOpts } = _eddsa_legacy_opts_to_new(c);\n const Point = edwards(CURVE, curveOpts);\n const EDDSA = eddsa(Point, hash, eddsaOpts);\n return _eddsa_new_output_to_legacy(c, EDDSA);\n}\n//# sourceMappingURL=edwards.js.map",
|
|
35
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports._DST_scalar = void 0;\nexports.expand_message_xmd = expand_message_xmd;\nexports.expand_message_xof = expand_message_xof;\nexports.hash_to_field = hash_to_field;\nexports.isogenyMap = isogenyMap;\nexports.createHasher = createHasher;\nconst utils_ts_1 = require(\"../utils.js\");\nconst modular_ts_1 = require(\"./modular.js\");\n// Octet Stream to Integer. \"spec\" implementation of os2ip is 2.5x slower vs bytesToNumberBE.\nconst os2ip = utils_ts_1.bytesToNumberBE;\n// Integer to Octet Stream (numberToBytesBE)\nfunction i2osp(value, length) {\n anum(value);\n anum(length);\n if (value < 0 || value >= 1 << (8 * length))\n throw new Error('invalid I2OSP input: ' + value);\n const res = Array.from({ length }).fill(0);\n for (let i = length - 1; i >= 0; i--) {\n res[i] = value & 0xff;\n value >>>= 8;\n }\n return new Uint8Array(res);\n}\nfunction strxor(a, b) {\n const arr = new Uint8Array(a.length);\n for (let i = 0; i < a.length; i++) {\n arr[i] = a[i] ^ b[i];\n }\n return arr;\n}\nfunction anum(item) {\n if (!Number.isSafeInteger(item))\n throw new Error('number expected');\n}\nfunction normDST(DST) {\n if (!(0, utils_ts_1.isBytes)(DST) && typeof DST !== 'string')\n throw new Error('DST must be Uint8Array or string');\n return typeof DST === 'string' ? (0, utils_ts_1.utf8ToBytes)(DST) : DST;\n}\n/**\n * Produces a uniformly random byte string using a cryptographic hash function H that outputs b bits.\n * [RFC 9380 5.3.1](https://www.rfc-editor.org/rfc/rfc9380#section-5.3.1).\n */\nfunction expand_message_xmd(msg, DST, lenInBytes, H) {\n (0, utils_ts_1.abytes)(msg);\n anum(lenInBytes);\n DST = normDST(DST);\n // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3\n if (DST.length > 255)\n DST = H((0, utils_ts_1.concatBytes)((0, utils_ts_1.utf8ToBytes)('H2C-OVERSIZE-DST-'), DST));\n const { outputLen: b_in_bytes, blockLen: r_in_bytes } = H;\n const ell = Math.ceil(lenInBytes / b_in_bytes);\n if (lenInBytes > 65535 || ell > 255)\n throw new Error('expand_message_xmd: invalid lenInBytes');\n const DST_prime = (0, utils_ts_1.concatBytes)(DST, i2osp(DST.length, 1));\n const Z_pad = i2osp(0, r_in_bytes);\n const l_i_b_str = i2osp(lenInBytes, 2); // len_in_bytes_str\n const b = new Array(ell);\n const b_0 = H((0, utils_ts_1.concatBytes)(Z_pad, msg, l_i_b_str, i2osp(0, 1), DST_prime));\n b[0] = H((0, utils_ts_1.concatBytes)(b_0, i2osp(1, 1), DST_prime));\n for (let i = 1; i <= ell; i++) {\n const args = [strxor(b_0, b[i - 1]), i2osp(i + 1, 1), DST_prime];\n b[i] = H((0, utils_ts_1.concatBytes)(...args));\n }\n const pseudo_random_bytes = (0, utils_ts_1.concatBytes)(...b);\n return pseudo_random_bytes.slice(0, lenInBytes);\n}\n/**\n * Produces a uniformly random byte string using an extendable-output function (XOF) H.\n * 1. The collision resistance of H MUST be at least k bits.\n * 2. H MUST be an XOF that has been proved indifferentiable from\n * a random oracle under a reasonable cryptographic assumption.\n * [RFC 9380 5.3.2](https://www.rfc-editor.org/rfc/rfc9380#section-5.3.2).\n */\nfunction expand_message_xof(msg, DST, lenInBytes, k, H) {\n (0, utils_ts_1.abytes)(msg);\n anum(lenInBytes);\n DST = normDST(DST);\n // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3\n // DST = H('H2C-OVERSIZE-DST-' || a_very_long_DST, Math.ceil((lenInBytes * k) / 8));\n if (DST.length > 255) {\n const dkLen = Math.ceil((2 * k) / 8);\n DST = H.create({ dkLen }).update((0, utils_ts_1.utf8ToBytes)('H2C-OVERSIZE-DST-')).update(DST).digest();\n }\n if (lenInBytes > 65535 || DST.length > 255)\n throw new Error('expand_message_xof: invalid lenInBytes');\n return (H.create({ dkLen: lenInBytes })\n .update(msg)\n .update(i2osp(lenInBytes, 2))\n // 2. DST_prime = DST || I2OSP(len(DST), 1)\n .update(DST)\n .update(i2osp(DST.length, 1))\n .digest());\n}\n/**\n * Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F.\n * [RFC 9380 5.2](https://www.rfc-editor.org/rfc/rfc9380#section-5.2).\n * @param msg a byte string containing the message to hash\n * @param count the number of elements of F to output\n * @param options `{DST: string, p: bigint, m: number, k: number, expand: 'xmd' | 'xof', hash: H}`, see above\n * @returns [u_0, ..., u_(count - 1)], a list of field elements.\n */\nfunction hash_to_field(msg, count, options) {\n (0, utils_ts_1._validateObject)(options, {\n p: 'bigint',\n m: 'number',\n k: 'number',\n hash: 'function',\n });\n const { p, k, m, hash, expand, DST } = options;\n if (!(0, utils_ts_1.isHash)(options.hash))\n throw new Error('expected valid hash');\n (0, utils_ts_1.abytes)(msg);\n anum(count);\n const log2p = p.toString(2).length;\n const L = Math.ceil((log2p + k) / 8); // section 5.1 of ietf draft link above\n const len_in_bytes = count * m * L;\n let prb; // pseudo_random_bytes\n if (expand === 'xmd') {\n prb = expand_message_xmd(msg, DST, len_in_bytes, hash);\n }\n else if (expand === 'xof') {\n prb = expand_message_xof(msg, DST, len_in_bytes, k, hash);\n }\n else if (expand === '_internal_pass') {\n // for internal tests only\n prb = msg;\n }\n else {\n throw new Error('expand must be \"xmd\" or \"xof\"');\n }\n const u = new Array(count);\n for (let i = 0; i < count; i++) {\n const e = new Array(m);\n for (let j = 0; j < m; j++) {\n const elm_offset = L * (j + i * m);\n const tv = prb.subarray(elm_offset, elm_offset + L);\n e[j] = (0, modular_ts_1.mod)(os2ip(tv), p);\n }\n u[i] = e;\n }\n return u;\n}\nfunction isogenyMap(field, map) {\n // Make same order as in spec\n const coeff = map.map((i) => Array.from(i).reverse());\n return (x, y) => {\n const [xn, xd, yn, yd] = coeff.map((val) => val.reduce((acc, i) => field.add(field.mul(acc, x), i)));\n // 6.6.3\n // Exceptional cases of iso_map are inputs that cause the denominator of\n // either rational function to evaluate to zero; such cases MUST return\n // the identity point on E.\n const [xd_inv, yd_inv] = (0, modular_ts_1.FpInvertBatch)(field, [xd, yd], true);\n x = field.mul(xn, xd_inv); // xNum / xDen\n y = field.mul(y, field.mul(yn, yd_inv)); // y * (yNum / yDev)\n return { x, y };\n };\n}\nexports._DST_scalar = (0, utils_ts_1.utf8ToBytes)('HashToScalar-');\n/** Creates hash-to-curve methods from EC Point and mapToCurve function. See {@link H2CHasher}. */\nfunction createHasher(Point, mapToCurve, defaults) {\n if (typeof mapToCurve !== 'function')\n throw new Error('mapToCurve() must be defined');\n function map(num) {\n return Point.fromAffine(mapToCurve(num));\n }\n function clear(initial) {\n const P = initial.clearCofactor();\n if (P.equals(Point.ZERO))\n return Point.ZERO; // zero will throw in assert\n P.assertValidity();\n return P;\n }\n return {\n defaults,\n hashToCurve(msg, options) {\n const opts = Object.assign({}, defaults, options);\n const u = hash_to_field(msg, 2, opts);\n const u0 = map(u[0]);\n const u1 = map(u[1]);\n return clear(u0.add(u1));\n },\n encodeToCurve(msg, options) {\n const optsDst = defaults.encodeDST ? { DST: defaults.encodeDST } : {};\n const opts = Object.assign({}, defaults, optsDst, options);\n const u = hash_to_field(msg, 1, opts);\n const u0 = map(u[0]);\n return clear(u0);\n },\n /** See {@link H2CHasher} */\n mapToCurve(scalars) {\n if (!Array.isArray(scalars))\n throw new Error('expected array of bigints');\n for (const i of scalars)\n if (typeof i !== 'bigint')\n throw new Error('expected array of bigints');\n return clear(map(scalars));\n },\n // hash_to_scalar can produce 0: https://www.rfc-editor.org/errata/eid8393\n // RFC 9380, draft-irtf-cfrg-bbs-signatures-08\n hashToScalar(msg, options) {\n // @ts-ignore\n const N = Point.Fn.ORDER;\n const opts = Object.assign({}, defaults, { p: N, m: 1, DST: exports._DST_scalar }, options);\n return hash_to_field(msg, 1, opts)[0][0];\n },\n };\n}\n//# sourceMappingURL=hash-to-curve.js.map",
|
|
36
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.montgomery = montgomery;\n/**\n * Montgomery curve methods. It's not really whole montgomery curve,\n * just bunch of very specific methods for X25519 / X448 from\n * [RFC 7748](https://www.rfc-editor.org/rfc/rfc7748)\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nconst utils_ts_1 = require(\"../utils.js\");\nconst modular_ts_1 = require(\"./modular.js\");\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nfunction validateOpts(curve) {\n (0, utils_ts_1._validateObject)(curve, {\n adjustScalarBytes: 'function',\n powPminus2: 'function',\n });\n return Object.freeze({ ...curve });\n}\nfunction montgomery(curveDef) {\n const CURVE = validateOpts(curveDef);\n const { P, type, adjustScalarBytes, powPminus2, randomBytes: rand } = CURVE;\n const is25519 = type === 'x25519';\n if (!is25519 && type !== 'x448')\n throw new Error('invalid type');\n const randomBytes_ = rand || utils_ts_1.randomBytes;\n const montgomeryBits = is25519 ? 255 : 448;\n const fieldLen = is25519 ? 32 : 56;\n const Gu = is25519 ? BigInt(9) : BigInt(5);\n // RFC 7748 #5:\n // The constant a24 is (486662 - 2) / 4 = 121665 for curve25519/X25519 and\n // (156326 - 2) / 4 = 39081 for curve448/X448\n // const a = is25519 ? 156326n : 486662n;\n const a24 = is25519 ? BigInt(121665) : BigInt(39081);\n // RFC: x25519 \"the resulting integer is of the form 2^254 plus\n // eight times a value between 0 and 2^251 - 1 (inclusive)\"\n // x448: \"2^447 plus four times a value between 0 and 2^445 - 1 (inclusive)\"\n const minScalar = is25519 ? _2n ** BigInt(254) : _2n ** BigInt(447);\n const maxAdded = is25519\n ? BigInt(8) * _2n ** BigInt(251) - _1n\n : BigInt(4) * _2n ** BigInt(445) - _1n;\n const maxScalar = minScalar + maxAdded + _1n; // (inclusive)\n const modP = (n) => (0, modular_ts_1.mod)(n, P);\n const GuBytes = encodeU(Gu);\n function encodeU(u) {\n return (0, utils_ts_1.numberToBytesLE)(modP(u), fieldLen);\n }\n function decodeU(u) {\n const _u = (0, utils_ts_1.ensureBytes)('u coordinate', u, fieldLen);\n // RFC: When receiving such an array, implementations of X25519\n // (but not X448) MUST mask the most significant bit in the final byte.\n if (is25519)\n _u[31] &= 127; // 0b0111_1111\n // RFC: Implementations MUST accept non-canonical values and process them as\n // if they had been reduced modulo the field prime. The non-canonical\n // values are 2^255 - 19 through 2^255 - 1 for X25519 and 2^448 - 2^224\n // - 1 through 2^448 - 1 for X448.\n return modP((0, utils_ts_1.bytesToNumberLE)(_u));\n }\n function decodeScalar(scalar) {\n return (0, utils_ts_1.bytesToNumberLE)(adjustScalarBytes((0, utils_ts_1.ensureBytes)('scalar', scalar, fieldLen)));\n }\n function scalarMult(scalar, u) {\n const pu = montgomeryLadder(decodeU(u), decodeScalar(scalar));\n // Some public keys are useless, of low-order. Curve author doesn't think\n // it needs to be validated, but we do it nonetheless.\n // https://cr.yp.to/ecdh.html#validate\n if (pu === _0n)\n throw new Error('invalid private or public key received');\n return encodeU(pu);\n }\n // Computes public key from private. By doing scalar multiplication of base point.\n function scalarMultBase(scalar) {\n return scalarMult(scalar, GuBytes);\n }\n // cswap from RFC7748 \"example code\"\n function cswap(swap, x_2, x_3) {\n // dummy = mask(swap) AND (x_2 XOR x_3)\n // Where mask(swap) is the all-1 or all-0 word of the same length as x_2\n // and x_3, computed, e.g., as mask(swap) = 0 - swap.\n const dummy = modP(swap * (x_2 - x_3));\n x_2 = modP(x_2 - dummy); // x_2 = x_2 XOR dummy\n x_3 = modP(x_3 + dummy); // x_3 = x_3 XOR dummy\n return { x_2, x_3 };\n }\n /**\n * Montgomery x-only multiplication ladder.\n * @param pointU u coordinate (x) on Montgomery Curve 25519\n * @param scalar by which the point would be multiplied\n * @returns new Point on Montgomery curve\n */\n function montgomeryLadder(u, scalar) {\n (0, utils_ts_1.aInRange)('u', u, _0n, P);\n (0, utils_ts_1.aInRange)('scalar', scalar, minScalar, maxScalar);\n const k = scalar;\n const x_1 = u;\n let x_2 = _1n;\n let z_2 = _0n;\n let x_3 = u;\n let z_3 = _1n;\n let swap = _0n;\n for (let t = BigInt(montgomeryBits - 1); t >= _0n; t--) {\n const k_t = (k >> t) & _1n;\n swap ^= k_t;\n ({ x_2, x_3 } = cswap(swap, x_2, x_3));\n ({ x_2: z_2, x_3: z_3 } = cswap(swap, z_2, z_3));\n swap = k_t;\n const A = x_2 + z_2;\n const AA = modP(A * A);\n const B = x_2 - z_2;\n const BB = modP(B * B);\n const E = AA - BB;\n const C = x_3 + z_3;\n const D = x_3 - z_3;\n const DA = modP(D * A);\n const CB = modP(C * B);\n const dacb = DA + CB;\n const da_cb = DA - CB;\n x_3 = modP(dacb * dacb);\n z_3 = modP(x_1 * modP(da_cb * da_cb));\n x_2 = modP(AA * BB);\n z_2 = modP(E * (AA + modP(a24 * E)));\n }\n ({ x_2, x_3 } = cswap(swap, x_2, x_3));\n ({ x_2: z_2, x_3: z_3 } = cswap(swap, z_2, z_3));\n const z2 = powPminus2(z_2); // `Fp.pow(x, P - _2n)` is much slower equivalent\n return modP(x_2 * z2); // Return x_2 * (z_2^(p - 2))\n }\n const lengths = {\n secretKey: fieldLen,\n publicKey: fieldLen,\n seed: fieldLen,\n };\n const randomSecretKey = (seed = randomBytes_(fieldLen)) => {\n (0, utils_ts_1.abytes)(seed, lengths.seed);\n return seed;\n };\n function keygen(seed) {\n const secretKey = randomSecretKey(seed);\n return { secretKey, publicKey: scalarMultBase(secretKey) };\n }\n const utils = {\n randomSecretKey,\n randomPrivateKey: randomSecretKey,\n };\n return {\n keygen,\n getSharedSecret: (secretKey, publicKey) => scalarMult(secretKey, publicKey),\n getPublicKey: (secretKey) => scalarMultBase(secretKey),\n scalarMult,\n scalarMultBase,\n utils,\n GuBytes: GuBytes.slice(),\n lengths,\n };\n}\n//# sourceMappingURL=montgomery.js.map",
|
|
37
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hash_to_ristretto255 = exports.hashToRistretto255 = exports.encodeToCurve = exports.hashToCurve = exports.RistrettoPoint = exports.edwardsToMontgomery = exports.ED25519_TORSION_SUBGROUP = exports.ristretto255_hasher = exports.ristretto255 = exports.ed25519_hasher = exports.x25519 = exports.ed25519ph = exports.ed25519ctx = exports.ed25519 = void 0;\nexports.edwardsToMontgomeryPub = edwardsToMontgomeryPub;\nexports.edwardsToMontgomeryPriv = edwardsToMontgomeryPriv;\n/**\n * ed25519 Twisted Edwards curve with following addons:\n * - X25519 ECDH\n * - Ristretto cofactor elimination\n * - Elligator hash-to-group / point indistinguishability\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nconst sha2_js_1 = require(\"@noble/hashes/sha2.js\");\nconst utils_js_1 = require(\"@noble/hashes/utils.js\");\nconst curve_ts_1 = require(\"./abstract/curve.js\");\nconst edwards_ts_1 = require(\"./abstract/edwards.js\");\nconst hash_to_curve_ts_1 = require(\"./abstract/hash-to-curve.js\");\nconst modular_ts_1 = require(\"./abstract/modular.js\");\nconst montgomery_ts_1 = require(\"./abstract/montgomery.js\");\nconst utils_ts_1 = require(\"./utils.js\");\n// prettier-ignore\nconst _0n = /* @__PURE__ */ BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n// prettier-ignore\nconst _5n = BigInt(5), _8n = BigInt(8);\n// P = 2n**255n-19n\nconst ed25519_CURVE_p = BigInt('0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed');\n// N = 2n**252n + 27742317777372353535851937790883648493n\n// a = Fp.create(BigInt(-1))\n// d = -121665/121666 a.k.a. Fp.neg(121665 * Fp.inv(121666))\nconst ed25519_CURVE = /* @__PURE__ */ (() => ({\n p: ed25519_CURVE_p,\n n: BigInt('0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed'),\n h: _8n,\n a: BigInt('0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec'),\n d: BigInt('0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3'),\n Gx: BigInt('0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a'),\n Gy: BigInt('0x6666666666666666666666666666666666666666666666666666666666666658'),\n}))();\nfunction ed25519_pow_2_252_3(x) {\n // prettier-ignore\n const _10n = BigInt(10), _20n = BigInt(20), _40n = BigInt(40), _80n = BigInt(80);\n const P = ed25519_CURVE_p;\n const x2 = (x * x) % P;\n const b2 = (x2 * x) % P; // x^3, 11\n const b4 = ((0, modular_ts_1.pow2)(b2, _2n, P) * b2) % P; // x^15, 1111\n const b5 = ((0, modular_ts_1.pow2)(b4, _1n, P) * x) % P; // x^31\n const b10 = ((0, modular_ts_1.pow2)(b5, _5n, P) * b5) % P;\n const b20 = ((0, modular_ts_1.pow2)(b10, _10n, P) * b10) % P;\n const b40 = ((0, modular_ts_1.pow2)(b20, _20n, P) * b20) % P;\n const b80 = ((0, modular_ts_1.pow2)(b40, _40n, P) * b40) % P;\n const b160 = ((0, modular_ts_1.pow2)(b80, _80n, P) * b80) % P;\n const b240 = ((0, modular_ts_1.pow2)(b160, _80n, P) * b80) % P;\n const b250 = ((0, modular_ts_1.pow2)(b240, _10n, P) * b10) % P;\n const pow_p_5_8 = ((0, modular_ts_1.pow2)(b250, _2n, P) * x) % P;\n // ^ To pow to (p+3)/8, multiply it by x.\n return { pow_p_5_8, b2 };\n}\nfunction adjustScalarBytes(bytes) {\n // Section 5: For X25519, in order to decode 32 random bytes as an integer scalar,\n // set the three least significant bits of the first byte\n bytes[0] &= 248; // 0b1111_1000\n // and the most significant bit of the last to zero,\n bytes[31] &= 127; // 0b0111_1111\n // set the second most significant bit of the last byte to 1\n bytes[31] |= 64; // 0b0100_0000\n return bytes;\n}\n// √(-1) aka √(a) aka 2^((p-1)/4)\n// Fp.sqrt(Fp.neg(1))\nconst ED25519_SQRT_M1 = /* @__PURE__ */ BigInt('19681161376707505956807079304988542015446066515923890162744021073123829784752');\n// sqrt(u/v)\nfunction uvRatio(u, v) {\n const P = ed25519_CURVE_p;\n const v3 = (0, modular_ts_1.mod)(v * v * v, P); // v³\n const v7 = (0, modular_ts_1.mod)(v3 * v3 * v, P); // v⁷\n // (p+3)/8 and (p-5)/8\n const pow = ed25519_pow_2_252_3(u * v7).pow_p_5_8;\n let x = (0, modular_ts_1.mod)(u * v3 * pow, P); // (uv³)(uv⁷)^(p-5)/8\n const vx2 = (0, modular_ts_1.mod)(v * x * x, P); // vx²\n const root1 = x; // First root candidate\n const root2 = (0, modular_ts_1.mod)(x * ED25519_SQRT_M1, P); // Second root candidate\n const useRoot1 = vx2 === u; // If vx² = u (mod p), x is a square root\n const useRoot2 = vx2 === (0, modular_ts_1.mod)(-u, P); // If vx² = -u, set x <-- x * 2^((p-1)/4)\n const noRoot = vx2 === (0, modular_ts_1.mod)(-u * ED25519_SQRT_M1, P); // There is no valid root, vx² = -u√(-1)\n if (useRoot1)\n x = root1;\n if (useRoot2 || noRoot)\n x = root2; // We return root2 anyway, for const-time\n if ((0, modular_ts_1.isNegativeLE)(x, P))\n x = (0, modular_ts_1.mod)(-x, P);\n return { isValid: useRoot1 || useRoot2, value: x };\n}\nconst Fp = /* @__PURE__ */ (() => (0, modular_ts_1.Field)(ed25519_CURVE.p, { isLE: true }))();\nconst Fn = /* @__PURE__ */ (() => (0, modular_ts_1.Field)(ed25519_CURVE.n, { isLE: true }))();\nconst ed25519Defaults = /* @__PURE__ */ (() => ({\n ...ed25519_CURVE,\n Fp,\n hash: sha2_js_1.sha512,\n adjustScalarBytes,\n // dom2\n // Ratio of u to v. Allows us to combine inversion and square root. Uses algo from RFC8032 5.1.3.\n // Constant-time, u/√v\n uvRatio,\n}))();\n/**\n * ed25519 curve with EdDSA signatures.\n * @example\n * import { ed25519 } from '@noble/curves/ed25519';\n * const { secretKey, publicKey } = ed25519.keygen();\n * const msg = new TextEncoder().encode('hello');\n * const sig = ed25519.sign(msg, priv);\n * ed25519.verify(sig, msg, pub); // Default mode: follows ZIP215\n * ed25519.verify(sig, msg, pub, { zip215: false }); // RFC8032 / FIPS 186-5\n */\nexports.ed25519 = (() => (0, edwards_ts_1.twistedEdwards)(ed25519Defaults))();\nfunction ed25519_domain(data, ctx, phflag) {\n if (ctx.length > 255)\n throw new Error('Context is too big');\n return (0, utils_js_1.concatBytes)((0, utils_js_1.utf8ToBytes)('SigEd25519 no Ed25519 collisions'), new Uint8Array([phflag ? 1 : 0, ctx.length]), ctx, data);\n}\n/** Context of ed25519. Uses context for domain separation. */\nexports.ed25519ctx = (() => (0, edwards_ts_1.twistedEdwards)({\n ...ed25519Defaults,\n domain: ed25519_domain,\n}))();\n/** Prehashed version of ed25519. Accepts already-hashed messages in sign() and verify(). */\nexports.ed25519ph = (() => (0, edwards_ts_1.twistedEdwards)(Object.assign({}, ed25519Defaults, {\n domain: ed25519_domain,\n prehash: sha2_js_1.sha512,\n})))();\n/**\n * ECDH using curve25519 aka x25519.\n * @example\n * import { x25519 } from '@noble/curves/ed25519';\n * const priv = 'a546e36bf0527c9d3b16154b82465edd62144c0ac1fc5a18506a2244ba449ac4';\n * const pub = 'e6db6867583030db3594c1a424b15f7c726624ec26b3353b10a903a6d0ab1c4c';\n * x25519.getSharedSecret(priv, pub) === x25519.scalarMult(priv, pub); // aliases\n * x25519.getPublicKey(priv) === x25519.scalarMultBase(priv);\n * x25519.getPublicKey(x25519.utils.randomSecretKey());\n */\nexports.x25519 = (() => {\n const P = Fp.ORDER;\n return (0, montgomery_ts_1.montgomery)({\n P,\n type: 'x25519',\n powPminus2: (x) => {\n // x^(p-2) aka x^(2^255-21)\n const { pow_p_5_8, b2 } = ed25519_pow_2_252_3(x);\n return (0, modular_ts_1.mod)((0, modular_ts_1.pow2)(pow_p_5_8, _3n, P) * b2, P);\n },\n adjustScalarBytes,\n });\n})();\n// Hash To Curve Elligator2 Map (NOTE: different from ristretto255 elligator)\n// NOTE: very important part is usage of FpSqrtEven for ELL2_C1_EDWARDS, since\n// SageMath returns different root first and everything falls apart\nconst ELL2_C1 = /* @__PURE__ */ (() => (ed25519_CURVE_p + _3n) / _8n)(); // 1. c1 = (q + 3) / 8 # Integer arithmetic\nconst ELL2_C2 = /* @__PURE__ */ (() => Fp.pow(_2n, ELL2_C1))(); // 2. c2 = 2^c1\nconst ELL2_C3 = /* @__PURE__ */ (() => Fp.sqrt(Fp.neg(Fp.ONE)))(); // 3. c3 = sqrt(-1)\n// prettier-ignore\nfunction map_to_curve_elligator2_curve25519(u) {\n const ELL2_C4 = (ed25519_CURVE_p - _5n) / _8n; // 4. c4 = (q - 5) / 8 # Integer arithmetic\n const ELL2_J = BigInt(486662);\n let tv1 = Fp.sqr(u); // 1. tv1 = u^2\n tv1 = Fp.mul(tv1, _2n); // 2. tv1 = 2 * tv1\n let xd = Fp.add(tv1, Fp.ONE); // 3. xd = tv1 + 1 # Nonzero: -1 is square (mod p), tv1 is not\n let x1n = Fp.neg(ELL2_J); // 4. x1n = -J # x1 = x1n / xd = -J / (1 + 2 * u^2)\n let tv2 = Fp.sqr(xd); // 5. tv2 = xd^2\n let gxd = Fp.mul(tv2, xd); // 6. gxd = tv2 * xd # gxd = xd^3\n let gx1 = Fp.mul(tv1, ELL2_J); // 7. gx1 = J * tv1 # x1n + J * xd\n gx1 = Fp.mul(gx1, x1n); // 8. gx1 = gx1 * x1n # x1n^2 + J * x1n * xd\n gx1 = Fp.add(gx1, tv2); // 9. gx1 = gx1 + tv2 # x1n^2 + J * x1n * xd + xd^2\n gx1 = Fp.mul(gx1, x1n); // 10. gx1 = gx1 * x1n # x1n^3 + J * x1n^2 * xd + x1n * xd^2\n let tv3 = Fp.sqr(gxd); // 11. tv3 = gxd^2\n tv2 = Fp.sqr(tv3); // 12. tv2 = tv3^2 # gxd^4\n tv3 = Fp.mul(tv3, gxd); // 13. tv3 = tv3 * gxd # gxd^3\n tv3 = Fp.mul(tv3, gx1); // 14. tv3 = tv3 * gx1 # gx1 * gxd^3\n tv2 = Fp.mul(tv2, tv3); // 15. tv2 = tv2 * tv3 # gx1 * gxd^7\n let y11 = Fp.pow(tv2, ELL2_C4); // 16. y11 = tv2^c4 # (gx1 * gxd^7)^((p - 5) / 8)\n y11 = Fp.mul(y11, tv3); // 17. y11 = y11 * tv3 # gx1*gxd^3*(gx1*gxd^7)^((p-5)/8)\n let y12 = Fp.mul(y11, ELL2_C3); // 18. y12 = y11 * c3\n tv2 = Fp.sqr(y11); // 19. tv2 = y11^2\n tv2 = Fp.mul(tv2, gxd); // 20. tv2 = tv2 * gxd\n let e1 = Fp.eql(tv2, gx1); // 21. e1 = tv2 == gx1\n let y1 = Fp.cmov(y12, y11, e1); // 22. y1 = CMOV(y12, y11, e1) # If g(x1) is square, this is its sqrt\n let x2n = Fp.mul(x1n, tv1); // 23. x2n = x1n * tv1 # x2 = x2n / xd = 2 * u^2 * x1n / xd\n let y21 = Fp.mul(y11, u); // 24. y21 = y11 * u\n y21 = Fp.mul(y21, ELL2_C2); // 25. y21 = y21 * c2\n let y22 = Fp.mul(y21, ELL2_C3); // 26. y22 = y21 * c3\n let gx2 = Fp.mul(gx1, tv1); // 27. gx2 = gx1 * tv1 # g(x2) = gx2 / gxd = 2 * u^2 * g(x1)\n tv2 = Fp.sqr(y21); // 28. tv2 = y21^2\n tv2 = Fp.mul(tv2, gxd); // 29. tv2 = tv2 * gxd\n let e2 = Fp.eql(tv2, gx2); // 30. e2 = tv2 == gx2\n let y2 = Fp.cmov(y22, y21, e2); // 31. y2 = CMOV(y22, y21, e2) # If g(x2) is square, this is its sqrt\n tv2 = Fp.sqr(y1); // 32. tv2 = y1^2\n tv2 = Fp.mul(tv2, gxd); // 33. tv2 = tv2 * gxd\n let e3 = Fp.eql(tv2, gx1); // 34. e3 = tv2 == gx1\n let xn = Fp.cmov(x2n, x1n, e3); // 35. xn = CMOV(x2n, x1n, e3) # If e3, x = x1, else x = x2\n let y = Fp.cmov(y2, y1, e3); // 36. y = CMOV(y2, y1, e3) # If e3, y = y1, else y = y2\n let e4 = Fp.isOdd(y); // 37. e4 = sgn0(y) == 1 # Fix sign of y\n y = Fp.cmov(y, Fp.neg(y), e3 !== e4); // 38. y = CMOV(y, -y, e3 XOR e4)\n return { xMn: xn, xMd: xd, yMn: y, yMd: _1n }; // 39. return (xn, xd, y, 1)\n}\nconst ELL2_C1_EDWARDS = /* @__PURE__ */ (() => (0, modular_ts_1.FpSqrtEven)(Fp, Fp.neg(BigInt(486664))))(); // sgn0(c1) MUST equal 0\nfunction map_to_curve_elligator2_edwards25519(u) {\n const { xMn, xMd, yMn, yMd } = map_to_curve_elligator2_curve25519(u); // 1. (xMn, xMd, yMn, yMd) =\n // map_to_curve_elligator2_curve25519(u)\n let xn = Fp.mul(xMn, yMd); // 2. xn = xMn * yMd\n xn = Fp.mul(xn, ELL2_C1_EDWARDS); // 3. xn = xn * c1\n let xd = Fp.mul(xMd, yMn); // 4. xd = xMd * yMn # xn / xd = c1 * xM / yM\n let yn = Fp.sub(xMn, xMd); // 5. yn = xMn - xMd\n let yd = Fp.add(xMn, xMd); // 6. yd = xMn + xMd # (n / d - 1) / (n / d + 1) = (n - d) / (n + d)\n let tv1 = Fp.mul(xd, yd); // 7. tv1 = xd * yd\n let e = Fp.eql(tv1, Fp.ZERO); // 8. e = tv1 == 0\n xn = Fp.cmov(xn, Fp.ZERO, e); // 9. xn = CMOV(xn, 0, e)\n xd = Fp.cmov(xd, Fp.ONE, e); // 10. xd = CMOV(xd, 1, e)\n yn = Fp.cmov(yn, Fp.ONE, e); // 11. yn = CMOV(yn, 1, e)\n yd = Fp.cmov(yd, Fp.ONE, e); // 12. yd = CMOV(yd, 1, e)\n const [xd_inv, yd_inv] = (0, modular_ts_1.FpInvertBatch)(Fp, [xd, yd], true); // batch division\n return { x: Fp.mul(xn, xd_inv), y: Fp.mul(yn, yd_inv) }; // 13. return (xn, xd, yn, yd)\n}\n/** Hashing to ed25519 points / field. RFC 9380 methods. */\nexports.ed25519_hasher = (() => (0, hash_to_curve_ts_1.createHasher)(exports.ed25519.Point, (scalars) => map_to_curve_elligator2_edwards25519(scalars[0]), {\n DST: 'edwards25519_XMD:SHA-512_ELL2_RO_',\n encodeDST: 'edwards25519_XMD:SHA-512_ELL2_NU_',\n p: ed25519_CURVE_p,\n m: 1,\n k: 128,\n expand: 'xmd',\n hash: sha2_js_1.sha512,\n}))();\n// √(-1) aka √(a) aka 2^((p-1)/4)\nconst SQRT_M1 = ED25519_SQRT_M1;\n// √(ad - 1)\nconst SQRT_AD_MINUS_ONE = /* @__PURE__ */ BigInt('25063068953384623474111414158702152701244531502492656460079210482610430750235');\n// 1 / √(a-d)\nconst INVSQRT_A_MINUS_D = /* @__PURE__ */ BigInt('54469307008909316920995813868745141605393597292927456921205312896311721017578');\n// 1-d²\nconst ONE_MINUS_D_SQ = /* @__PURE__ */ BigInt('1159843021668779879193775521855586647937357759715417654439879720876111806838');\n// (d-1)²\nconst D_MINUS_ONE_SQ = /* @__PURE__ */ BigInt('40440834346308536858101042469323190826248399146238708352240133220865137265952');\n// Calculates 1/√(number)\nconst invertSqrt = (number) => uvRatio(_1n, number);\nconst MAX_255B = /* @__PURE__ */ BigInt('0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff');\nconst bytes255ToNumberLE = (bytes) => exports.ed25519.Point.Fp.create((0, utils_ts_1.bytesToNumberLE)(bytes) & MAX_255B);\n/**\n * Computes Elligator map for Ristretto255.\n * Described in [RFC9380](https://www.rfc-editor.org/rfc/rfc9380#appendix-B) and on\n * the [website](https://ristretto.group/formulas/elligator.html).\n */\nfunction calcElligatorRistrettoMap(r0) {\n const { d } = ed25519_CURVE;\n const P = ed25519_CURVE_p;\n const mod = (n) => Fp.create(n);\n const r = mod(SQRT_M1 * r0 * r0); // 1\n const Ns = mod((r + _1n) * ONE_MINUS_D_SQ); // 2\n let c = BigInt(-1); // 3\n const D = mod((c - d * r) * mod(r + d)); // 4\n let { isValid: Ns_D_is_sq, value: s } = uvRatio(Ns, D); // 5\n let s_ = mod(s * r0); // 6\n if (!(0, modular_ts_1.isNegativeLE)(s_, P))\n s_ = mod(-s_);\n if (!Ns_D_is_sq)\n s = s_; // 7\n if (!Ns_D_is_sq)\n c = r; // 8\n const Nt = mod(c * (r - _1n) * D_MINUS_ONE_SQ - D); // 9\n const s2 = s * s;\n const W0 = mod((s + s) * D); // 10\n const W1 = mod(Nt * SQRT_AD_MINUS_ONE); // 11\n const W2 = mod(_1n - s2); // 12\n const W3 = mod(_1n + s2); // 13\n return new exports.ed25519.Point(mod(W0 * W3), mod(W2 * W1), mod(W1 * W3), mod(W0 * W2));\n}\nfunction ristretto255_map(bytes) {\n (0, utils_js_1.abytes)(bytes, 64);\n const r1 = bytes255ToNumberLE(bytes.subarray(0, 32));\n const R1 = calcElligatorRistrettoMap(r1);\n const r2 = bytes255ToNumberLE(bytes.subarray(32, 64));\n const R2 = calcElligatorRistrettoMap(r2);\n return new _RistrettoPoint(R1.add(R2));\n}\n/**\n * Wrapper over Edwards Point for ristretto255.\n *\n * Each ed25519/ExtendedPoint has 8 different equivalent points. This can be\n * a source of bugs for protocols like ring signatures. Ristretto was created to solve this.\n * Ristretto point operates in X:Y:Z:T extended coordinates like ExtendedPoint,\n * but it should work in its own namespace: do not combine those two.\n * See [RFC9496](https://www.rfc-editor.org/rfc/rfc9496).\n */\nclass _RistrettoPoint extends edwards_ts_1.PrimeEdwardsPoint {\n constructor(ep) {\n super(ep);\n }\n static fromAffine(ap) {\n return new _RistrettoPoint(exports.ed25519.Point.fromAffine(ap));\n }\n assertSame(other) {\n if (!(other instanceof _RistrettoPoint))\n throw new Error('RistrettoPoint expected');\n }\n init(ep) {\n return new _RistrettoPoint(ep);\n }\n /** @deprecated use `import { ristretto255_hasher } from '@noble/curves/ed25519.js';` */\n static hashToCurve(hex) {\n return ristretto255_map((0, utils_ts_1.ensureBytes)('ristrettoHash', hex, 64));\n }\n static fromBytes(bytes) {\n (0, utils_js_1.abytes)(bytes, 32);\n const { a, d } = ed25519_CURVE;\n const P = ed25519_CURVE_p;\n const mod = (n) => Fp.create(n);\n const s = bytes255ToNumberLE(bytes);\n // 1. Check that s_bytes is the canonical encoding of a field element, or else abort.\n // 3. Check that s is non-negative, or else abort\n if (!(0, utils_ts_1.equalBytes)(Fp.toBytes(s), bytes) || (0, modular_ts_1.isNegativeLE)(s, P))\n throw new Error('invalid ristretto255 encoding 1');\n const s2 = mod(s * s);\n const u1 = mod(_1n + a * s2); // 4 (a is -1)\n const u2 = mod(_1n - a * s2); // 5\n const u1_2 = mod(u1 * u1);\n const u2_2 = mod(u2 * u2);\n const v = mod(a * d * u1_2 - u2_2); // 6\n const { isValid, value: I } = invertSqrt(mod(v * u2_2)); // 7\n const Dx = mod(I * u2); // 8\n const Dy = mod(I * Dx * v); // 9\n let x = mod((s + s) * Dx); // 10\n if ((0, modular_ts_1.isNegativeLE)(x, P))\n x = mod(-x); // 10\n const y = mod(u1 * Dy); // 11\n const t = mod(x * y); // 12\n if (!isValid || (0, modular_ts_1.isNegativeLE)(t, P) || y === _0n)\n throw new Error('invalid ristretto255 encoding 2');\n return new _RistrettoPoint(new exports.ed25519.Point(x, y, _1n, t));\n }\n /**\n * Converts ristretto-encoded string to ristretto point.\n * Described in [RFC9496](https://www.rfc-editor.org/rfc/rfc9496#name-decode).\n * @param hex Ristretto-encoded 32 bytes. Not every 32-byte string is valid ristretto encoding\n */\n static fromHex(hex) {\n return _RistrettoPoint.fromBytes((0, utils_ts_1.ensureBytes)('ristrettoHex', hex, 32));\n }\n static msm(points, scalars) {\n return (0, curve_ts_1.pippenger)(_RistrettoPoint, exports.ed25519.Point.Fn, points, scalars);\n }\n /**\n * Encodes ristretto point to Uint8Array.\n * Described in [RFC9496](https://www.rfc-editor.org/rfc/rfc9496#name-encode).\n */\n toBytes() {\n let { X, Y, Z, T } = this.ep;\n const P = ed25519_CURVE_p;\n const mod = (n) => Fp.create(n);\n const u1 = mod(mod(Z + Y) * mod(Z - Y)); // 1\n const u2 = mod(X * Y); // 2\n // Square root always exists\n const u2sq = mod(u2 * u2);\n const { value: invsqrt } = invertSqrt(mod(u1 * u2sq)); // 3\n const D1 = mod(invsqrt * u1); // 4\n const D2 = mod(invsqrt * u2); // 5\n const zInv = mod(D1 * D2 * T); // 6\n let D; // 7\n if ((0, modular_ts_1.isNegativeLE)(T * zInv, P)) {\n let _x = mod(Y * SQRT_M1);\n let _y = mod(X * SQRT_M1);\n X = _x;\n Y = _y;\n D = mod(D1 * INVSQRT_A_MINUS_D);\n }\n else {\n D = D2; // 8\n }\n if ((0, modular_ts_1.isNegativeLE)(X * zInv, P))\n Y = mod(-Y); // 9\n let s = mod((Z - Y) * D); // 10 (check footer's note, no sqrt(-a))\n if ((0, modular_ts_1.isNegativeLE)(s, P))\n s = mod(-s);\n return Fp.toBytes(s); // 11\n }\n /**\n * Compares two Ristretto points.\n * Described in [RFC9496](https://www.rfc-editor.org/rfc/rfc9496#name-equals).\n */\n equals(other) {\n this.assertSame(other);\n const { X: X1, Y: Y1 } = this.ep;\n const { X: X2, Y: Y2 } = other.ep;\n const mod = (n) => Fp.create(n);\n // (x1 * y2 == y1 * x2) | (y1 * y2 == x1 * x2)\n const one = mod(X1 * Y2) === mod(Y1 * X2);\n const two = mod(Y1 * Y2) === mod(X1 * X2);\n return one || two;\n }\n is0() {\n return this.equals(_RistrettoPoint.ZERO);\n }\n}\n// Do NOT change syntax: the following gymnastics is done,\n// because typescript strips comments, which makes bundlers disable tree-shaking.\n// prettier-ignore\n_RistrettoPoint.BASE = \n/* @__PURE__ */ (() => new _RistrettoPoint(exports.ed25519.Point.BASE))();\n// prettier-ignore\n_RistrettoPoint.ZERO = \n/* @__PURE__ */ (() => new _RistrettoPoint(exports.ed25519.Point.ZERO))();\n// prettier-ignore\n_RistrettoPoint.Fp = \n/* @__PURE__ */ (() => Fp)();\n// prettier-ignore\n_RistrettoPoint.Fn = \n/* @__PURE__ */ (() => Fn)();\nexports.ristretto255 = { Point: _RistrettoPoint };\n/** Hashing to ristretto255 points / field. RFC 9380 methods. */\nexports.ristretto255_hasher = {\n hashToCurve(msg, options) {\n const DST = options?.DST || 'ristretto255_XMD:SHA-512_R255MAP_RO_';\n const xmd = (0, hash_to_curve_ts_1.expand_message_xmd)(msg, DST, 64, sha2_js_1.sha512);\n return ristretto255_map(xmd);\n },\n hashToScalar(msg, options = { DST: hash_to_curve_ts_1._DST_scalar }) {\n const xmd = (0, hash_to_curve_ts_1.expand_message_xmd)(msg, options.DST, 64, sha2_js_1.sha512);\n return Fn.create((0, utils_ts_1.bytesToNumberLE)(xmd));\n },\n};\n// export const ristretto255_oprf: OPRF = createORPF({\n// name: 'ristretto255-SHA512',\n// Point: RistrettoPoint,\n// hash: sha512,\n// hashToGroup: ristretto255_hasher.hashToCurve,\n// hashToScalar: ristretto255_hasher.hashToScalar,\n// });\n/**\n * Weird / bogus points, useful for debugging.\n * All 8 ed25519 points of 8-torsion subgroup can be generated from the point\n * T = `26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05`.\n * ⟨T⟩ = { O, T, 2T, 3T, 4T, 5T, 6T, 7T }\n */\nexports.ED25519_TORSION_SUBGROUP = [\n '0100000000000000000000000000000000000000000000000000000000000000',\n 'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac037a',\n '0000000000000000000000000000000000000000000000000000000000000080',\n '26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05',\n 'ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f',\n '26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc85',\n '0000000000000000000000000000000000000000000000000000000000000000',\n 'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac03fa',\n];\n/** @deprecated use `ed25519.utils.toMontgomery` */\nfunction edwardsToMontgomeryPub(edwardsPub) {\n return exports.ed25519.utils.toMontgomery((0, utils_ts_1.ensureBytes)('pub', edwardsPub));\n}\n/** @deprecated use `ed25519.utils.toMontgomery` */\nexports.edwardsToMontgomery = edwardsToMontgomeryPub;\n/** @deprecated use `ed25519.utils.toMontgomerySecret` */\nfunction edwardsToMontgomeryPriv(edwardsPriv) {\n return exports.ed25519.utils.toMontgomerySecret((0, utils_ts_1.ensureBytes)('pub', edwardsPriv));\n}\n/** @deprecated use `ristretto255.Point` */\nexports.RistrettoPoint = _RistrettoPoint;\n/** @deprecated use `import { ed25519_hasher } from '@noble/curves/ed25519.js';` */\nexports.hashToCurve = (() => exports.ed25519_hasher.hashToCurve)();\n/** @deprecated use `import { ed25519_hasher } from '@noble/curves/ed25519.js';` */\nexports.encodeToCurve = (() => exports.ed25519_hasher.encodeToCurve)();\n/** @deprecated use `import { ristretto255_hasher } from '@noble/curves/ed25519.js';` */\nexports.hashToRistretto255 = (() => exports.ristretto255_hasher.hashToCurve)();\n/** @deprecated use `import { ristretto255_hasher } from '@noble/curves/ed25519.js';` */\nexports.hash_to_ristretto255 = (() => exports.ristretto255_hasher.hashToCurve)();\n//# sourceMappingURL=ed25519.js.map",
|
|
38
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hmac = exports.HMAC = void 0;\n/**\n * HMAC: RFC2104 message authentication code.\n * @module\n */\nconst utils_ts_1 = require(\"./utils.js\");\nclass HMAC extends utils_ts_1.Hash {\n constructor(hash, _key) {\n super();\n this.finished = false;\n this.destroyed = false;\n (0, utils_ts_1.ahash)(hash);\n const key = (0, utils_ts_1.toBytes)(_key);\n this.iHash = hash.create();\n if (typeof this.iHash.update !== 'function')\n throw new Error('Expected instance of class which extends utils.Hash');\n this.blockLen = this.iHash.blockLen;\n this.outputLen = this.iHash.outputLen;\n const blockLen = this.blockLen;\n const pad = new Uint8Array(blockLen);\n // blockLen can be bigger than outputLen\n pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 0x36;\n this.iHash.update(pad);\n // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n this.oHash = hash.create();\n // Undo internal XOR && apply outer XOR\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 0x36 ^ 0x5c;\n this.oHash.update(pad);\n (0, utils_ts_1.clean)(pad);\n }\n update(buf) {\n (0, utils_ts_1.aexists)(this);\n this.iHash.update(buf);\n return this;\n }\n digestInto(out) {\n (0, utils_ts_1.aexists)(this);\n (0, utils_ts_1.abytes)(out, this.outputLen);\n this.finished = true;\n this.iHash.digestInto(out);\n this.oHash.update(out);\n this.oHash.digestInto(out);\n this.destroy();\n }\n digest() {\n const out = new Uint8Array(this.oHash.outputLen);\n this.digestInto(out);\n return out;\n }\n _cloneInto(to) {\n // Create new instance without calling constructor since key already in state and we don't know it.\n to || (to = Object.create(Object.getPrototypeOf(this), {}));\n const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n to = to;\n to.finished = finished;\n to.destroyed = destroyed;\n to.blockLen = blockLen;\n to.outputLen = outputLen;\n to.oHash = oHash._cloneInto(to.oHash);\n to.iHash = iHash._cloneInto(to.iHash);\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n destroy() {\n this.destroyed = true;\n this.oHash.destroy();\n this.iHash.destroy();\n }\n}\nexports.HMAC = HMAC;\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n * @example\n * import { hmac } from '@noble/hashes/hmac';\n * import { sha256 } from '@noble/hashes/sha2';\n * const mac1 = hmac(sha256, 'key', 'message');\n */\nconst hmac = (hash, key, message) => new HMAC(hash, key).update(message).digest();\nexports.hmac = hmac;\nexports.hmac.create = (hash, key) => new HMAC(hash, key);\n//# sourceMappingURL=hmac.js.map",
|
|
39
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DER = exports.DERErr = void 0;\nexports._splitEndoScalar = _splitEndoScalar;\nexports._normFnElement = _normFnElement;\nexports.weierstrassN = weierstrassN;\nexports.SWUFpSqrtRatio = SWUFpSqrtRatio;\nexports.mapToCurveSimpleSWU = mapToCurveSimpleSWU;\nexports.ecdh = ecdh;\nexports.ecdsa = ecdsa;\nexports.weierstrassPoints = weierstrassPoints;\nexports._legacyHelperEquat = _legacyHelperEquat;\nexports.weierstrass = weierstrass;\n/**\n * Short Weierstrass curve methods. The formula is: y² = x³ + ax + b.\n *\n * ### Design rationale for types\n *\n * * Interaction between classes from different curves should fail:\n * `k256.Point.BASE.add(p256.Point.BASE)`\n * * For this purpose we want to use `instanceof` operator, which is fast and works during runtime\n * * Different calls of `curve()` would return different classes -\n * `curve(params) !== curve(params)`: if somebody decided to monkey-patch their curve,\n * it won't affect others\n *\n * TypeScript can't infer types for classes created inside a function. Classes is one instance\n * of nominative types in TypeScript and interfaces only check for shape, so it's hard to create\n * unique type for every function call.\n *\n * We can use generic types via some param, like curve opts, but that would:\n * 1. Enable interaction between `curve(params)` and `curve(params)` (curves of same params)\n * which is hard to debug.\n * 2. Params can be generic and we can't enforce them to be constant value:\n * if somebody creates curve from non-constant params,\n * it would be allowed to interact with other curves with non-constant params\n *\n * @todo https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#unique-symbol\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nconst hmac_js_1 = require(\"@noble/hashes/hmac.js\");\nconst utils_1 = require(\"@noble/hashes/utils\");\nconst utils_ts_1 = require(\"../utils.js\");\nconst curve_ts_1 = require(\"./curve.js\");\nconst modular_ts_1 = require(\"./modular.js\");\n// We construct basis in such way that den is always positive and equals n, but num sign depends on basis (not on secret value)\nconst divNearest = (num, den) => (num + (num >= 0 ? den : -den) / _2n) / den;\n/**\n * Splits scalar for GLV endomorphism.\n */\nfunction _splitEndoScalar(k, basis, n) {\n // Split scalar into two such that part is ~half bits: `abs(part) < sqrt(N)`\n // Since part can be negative, we need to do this on point.\n // TODO: verifyScalar function which consumes lambda\n const [[a1, b1], [a2, b2]] = basis;\n const c1 = divNearest(b2 * k, n);\n const c2 = divNearest(-b1 * k, n);\n // |k1|/|k2| is < sqrt(N), but can be negative.\n // If we do `k1 mod N`, we'll get big scalar (`> sqrt(N)`): so, we do cheaper negation instead.\n let k1 = k - c1 * a1 - c2 * a2;\n let k2 = -c1 * b1 - c2 * b2;\n const k1neg = k1 < _0n;\n const k2neg = k2 < _0n;\n if (k1neg)\n k1 = -k1;\n if (k2neg)\n k2 = -k2;\n // Double check that resulting scalar less than half bits of N: otherwise wNAF will fail.\n // This should only happen on wrong basises. Also, math inside is too complex and I don't trust it.\n const MAX_NUM = (0, utils_ts_1.bitMask)(Math.ceil((0, utils_ts_1.bitLen)(n) / 2)) + _1n; // Half bits of N\n if (k1 < _0n || k1 >= MAX_NUM || k2 < _0n || k2 >= MAX_NUM) {\n throw new Error('splitScalar (endomorphism): failed, k=' + k);\n }\n return { k1neg, k1, k2neg, k2 };\n}\nfunction validateSigFormat(format) {\n if (!['compact', 'recovered', 'der'].includes(format))\n throw new Error('Signature format must be \"compact\", \"recovered\", or \"der\"');\n return format;\n}\nfunction validateSigOpts(opts, def) {\n const optsn = {};\n for (let optName of Object.keys(def)) {\n // @ts-ignore\n optsn[optName] = opts[optName] === undefined ? def[optName] : opts[optName];\n }\n (0, utils_ts_1._abool2)(optsn.lowS, 'lowS');\n (0, utils_ts_1._abool2)(optsn.prehash, 'prehash');\n if (optsn.format !== undefined)\n validateSigFormat(optsn.format);\n return optsn;\n}\nclass DERErr extends Error {\n constructor(m = '') {\n super(m);\n }\n}\nexports.DERErr = DERErr;\n/**\n * ASN.1 DER encoding utilities. ASN is very complex & fragile. Format:\n *\n * [0x30 (SEQUENCE), bytelength, 0x02 (INTEGER), intLength, R, 0x02 (INTEGER), intLength, S]\n *\n * Docs: https://letsencrypt.org/docs/a-warm-welcome-to-asn1-and-der/, https://luca.ntop.org/Teaching/Appunti/asn1.html\n */\nexports.DER = {\n // asn.1 DER encoding utils\n Err: DERErr,\n // Basic building block is TLV (Tag-Length-Value)\n _tlv: {\n encode: (tag, data) => {\n const { Err: E } = exports.DER;\n if (tag < 0 || tag > 256)\n throw new E('tlv.encode: wrong tag');\n if (data.length & 1)\n throw new E('tlv.encode: unpadded data');\n const dataLen = data.length / 2;\n const len = (0, utils_ts_1.numberToHexUnpadded)(dataLen);\n if ((len.length / 2) & 128)\n throw new E('tlv.encode: long form length too big');\n // length of length with long form flag\n const lenLen = dataLen > 127 ? (0, utils_ts_1.numberToHexUnpadded)((len.length / 2) | 128) : '';\n const t = (0, utils_ts_1.numberToHexUnpadded)(tag);\n return t + lenLen + len + data;\n },\n // v - value, l - left bytes (unparsed)\n decode(tag, data) {\n const { Err: E } = exports.DER;\n let pos = 0;\n if (tag < 0 || tag > 256)\n throw new E('tlv.encode: wrong tag');\n if (data.length < 2 || data[pos++] !== tag)\n throw new E('tlv.decode: wrong tlv');\n const first = data[pos++];\n const isLong = !!(first & 128); // First bit of first length byte is flag for short/long form\n let length = 0;\n if (!isLong)\n length = first;\n else {\n // Long form: [longFlag(1bit), lengthLength(7bit), length (BE)]\n const lenLen = first & 127;\n if (!lenLen)\n throw new E('tlv.decode(long): indefinite length not supported');\n if (lenLen > 4)\n throw new E('tlv.decode(long): byte length is too big'); // this will overflow u32 in js\n const lengthBytes = data.subarray(pos, pos + lenLen);\n if (lengthBytes.length !== lenLen)\n throw new E('tlv.decode: length bytes not complete');\n if (lengthBytes[0] === 0)\n throw new E('tlv.decode(long): zero leftmost byte');\n for (const b of lengthBytes)\n length = (length << 8) | b;\n pos += lenLen;\n if (length < 128)\n throw new E('tlv.decode(long): not minimal encoding');\n }\n const v = data.subarray(pos, pos + length);\n if (v.length !== length)\n throw new E('tlv.decode: wrong value length');\n return { v, l: data.subarray(pos + length) };\n },\n },\n // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n // since we always use positive integers here. It must always be empty:\n // - add zero byte if exists\n // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n _int: {\n encode(num) {\n const { Err: E } = exports.DER;\n if (num < _0n)\n throw new E('integer: negative integers are not allowed');\n let hex = (0, utils_ts_1.numberToHexUnpadded)(num);\n // Pad with zero byte if negative flag is present\n if (Number.parseInt(hex[0], 16) & 0b1000)\n hex = '00' + hex;\n if (hex.length & 1)\n throw new E('unexpected DER parsing assertion: unpadded hex');\n return hex;\n },\n decode(data) {\n const { Err: E } = exports.DER;\n if (data[0] & 128)\n throw new E('invalid signature integer: negative');\n if (data[0] === 0x00 && !(data[1] & 128))\n throw new E('invalid signature integer: unnecessary leading zero');\n return (0, utils_ts_1.bytesToNumberBE)(data);\n },\n },\n toSig(hex) {\n // parse DER signature\n const { Err: E, _int: int, _tlv: tlv } = exports.DER;\n const data = (0, utils_ts_1.ensureBytes)('signature', hex);\n const { v: seqBytes, l: seqLeftBytes } = tlv.decode(0x30, data);\n if (seqLeftBytes.length)\n throw new E('invalid signature: left bytes after parsing');\n const { v: rBytes, l: rLeftBytes } = tlv.decode(0x02, seqBytes);\n const { v: sBytes, l: sLeftBytes } = tlv.decode(0x02, rLeftBytes);\n if (sLeftBytes.length)\n throw new E('invalid signature: left bytes after parsing');\n return { r: int.decode(rBytes), s: int.decode(sBytes) };\n },\n hexFromSig(sig) {\n const { _tlv: tlv, _int: int } = exports.DER;\n const rs = tlv.encode(0x02, int.encode(sig.r));\n const ss = tlv.encode(0x02, int.encode(sig.s));\n const seq = rs + ss;\n return tlv.encode(0x30, seq);\n },\n};\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4);\nfunction _normFnElement(Fn, key) {\n const { BYTES: expected } = Fn;\n let num;\n if (typeof key === 'bigint') {\n num = key;\n }\n else {\n let bytes = (0, utils_ts_1.ensureBytes)('private key', key);\n try {\n num = Fn.fromBytes(bytes);\n }\n catch (error) {\n throw new Error(`invalid private key: expected ui8a of size ${expected}, got ${typeof key}`);\n }\n }\n if (!Fn.isValidNot0(num))\n throw new Error('invalid private key: out of range [1..N-1]');\n return num;\n}\n/**\n * Creates weierstrass Point constructor, based on specified curve options.\n *\n * @example\n```js\nconst opts = {\n p: BigInt('0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff'),\n n: BigInt('0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551'),\n h: BigInt(1),\n a: BigInt('0xffffffff00000001000000000000000000000000fffffffffffffffffffffffc'),\n b: BigInt('0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b'),\n Gx: BigInt('0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296'),\n Gy: BigInt('0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5'),\n};\nconst p256_Point = weierstrass(opts);\n```\n */\nfunction weierstrassN(params, extraOpts = {}) {\n const validated = (0, curve_ts_1._createCurveFields)('weierstrass', params, extraOpts);\n const { Fp, Fn } = validated;\n let CURVE = validated.CURVE;\n const { h: cofactor, n: CURVE_ORDER } = CURVE;\n (0, utils_ts_1._validateObject)(extraOpts, {}, {\n allowInfinityPoint: 'boolean',\n clearCofactor: 'function',\n isTorsionFree: 'function',\n fromBytes: 'function',\n toBytes: 'function',\n endo: 'object',\n wrapPrivateKey: 'boolean',\n });\n const { endo } = extraOpts;\n if (endo) {\n // validateObject(endo, { beta: 'bigint', splitScalar: 'function' });\n if (!Fp.is0(CURVE.a) || typeof endo.beta !== 'bigint' || !Array.isArray(endo.basises)) {\n throw new Error('invalid endo: expected \"beta\": bigint and \"basises\": array');\n }\n }\n const lengths = getWLengths(Fp, Fn);\n function assertCompressionIsSupported() {\n if (!Fp.isOdd)\n throw new Error('compression is not supported: Field does not have .isOdd()');\n }\n // Implements IEEE P1363 point encoding\n function pointToBytes(_c, point, isCompressed) {\n const { x, y } = point.toAffine();\n const bx = Fp.toBytes(x);\n (0, utils_ts_1._abool2)(isCompressed, 'isCompressed');\n if (isCompressed) {\n assertCompressionIsSupported();\n const hasEvenY = !Fp.isOdd(y);\n return (0, utils_ts_1.concatBytes)(pprefix(hasEvenY), bx);\n }\n else {\n return (0, utils_ts_1.concatBytes)(Uint8Array.of(0x04), bx, Fp.toBytes(y));\n }\n }\n function pointFromBytes(bytes) {\n (0, utils_ts_1._abytes2)(bytes, undefined, 'Point');\n const { publicKey: comp, publicKeyUncompressed: uncomp } = lengths; // e.g. for 32-byte: 33, 65\n const length = bytes.length;\n const head = bytes[0];\n const tail = bytes.subarray(1);\n // No actual validation is done here: use .assertValidity()\n if (length === comp && (head === 0x02 || head === 0x03)) {\n const x = Fp.fromBytes(tail);\n if (!Fp.isValid(x))\n throw new Error('bad point: is not on curve, wrong x');\n const y2 = weierstrassEquation(x); // y² = x³ + ax + b\n let y;\n try {\n y = Fp.sqrt(y2); // y = y² ^ (p+1)/4\n }\n catch (sqrtError) {\n const err = sqrtError instanceof Error ? ': ' + sqrtError.message : '';\n throw new Error('bad point: is not on curve, sqrt error' + err);\n }\n assertCompressionIsSupported();\n const isYOdd = Fp.isOdd(y); // (y & _1n) === _1n;\n const isHeadOdd = (head & 1) === 1; // ECDSA-specific\n if (isHeadOdd !== isYOdd)\n y = Fp.neg(y);\n return { x, y };\n }\n else if (length === uncomp && head === 0x04) {\n // TODO: more checks\n const L = Fp.BYTES;\n const x = Fp.fromBytes(tail.subarray(0, L));\n const y = Fp.fromBytes(tail.subarray(L, L * 2));\n if (!isValidXY(x, y))\n throw new Error('bad point: is not on curve');\n return { x, y };\n }\n else {\n throw new Error(`bad point: got length ${length}, expected compressed=${comp} or uncompressed=${uncomp}`);\n }\n }\n const encodePoint = extraOpts.toBytes || pointToBytes;\n const decodePoint = extraOpts.fromBytes || pointFromBytes;\n function weierstrassEquation(x) {\n const x2 = Fp.sqr(x); // x * x\n const x3 = Fp.mul(x2, x); // x² * x\n return Fp.add(Fp.add(x3, Fp.mul(x, CURVE.a)), CURVE.b); // x³ + a * x + b\n }\n // TODO: move top-level\n /** Checks whether equation holds for given x, y: y² == x³ + ax + b */\n function isValidXY(x, y) {\n const left = Fp.sqr(y); // y²\n const right = weierstrassEquation(x); // x³ + ax + b\n return Fp.eql(left, right);\n }\n // Validate whether the passed curve params are valid.\n // Test 1: equation y² = x³ + ax + b should work for generator point.\n if (!isValidXY(CURVE.Gx, CURVE.Gy))\n throw new Error('bad curve params: generator point');\n // Test 2: discriminant Δ part should be non-zero: 4a³ + 27b² != 0.\n // Guarantees curve is genus-1, smooth (non-singular).\n const _4a3 = Fp.mul(Fp.pow(CURVE.a, _3n), _4n);\n const _27b2 = Fp.mul(Fp.sqr(CURVE.b), BigInt(27));\n if (Fp.is0(Fp.add(_4a3, _27b2)))\n throw new Error('bad curve params: a or b');\n /** Asserts coordinate is valid: 0 <= n < Fp.ORDER. */\n function acoord(title, n, banZero = false) {\n if (!Fp.isValid(n) || (banZero && Fp.is0(n)))\n throw new Error(`bad point coordinate ${title}`);\n return n;\n }\n function aprjpoint(other) {\n if (!(other instanceof Point))\n throw new Error('ProjectivePoint expected');\n }\n function splitEndoScalarN(k) {\n if (!endo || !endo.basises)\n throw new Error('no endo');\n return _splitEndoScalar(k, endo.basises, Fn.ORDER);\n }\n // Memoized toAffine / validity check. They are heavy. Points are immutable.\n // Converts Projective point to affine (x, y) coordinates.\n // Can accept precomputed Z^-1 - for example, from invertBatch.\n // (X, Y, Z) ∋ (x=X/Z, y=Y/Z)\n const toAffineMemo = (0, utils_ts_1.memoized)((p, iz) => {\n const { X, Y, Z } = p;\n // Fast-path for normalized points\n if (Fp.eql(Z, Fp.ONE))\n return { x: X, y: Y };\n const is0 = p.is0();\n // If invZ was 0, we return zero point. However we still want to execute\n // all operations, so we replace invZ with a random number, 1.\n if (iz == null)\n iz = is0 ? Fp.ONE : Fp.inv(Z);\n const x = Fp.mul(X, iz);\n const y = Fp.mul(Y, iz);\n const zz = Fp.mul(Z, iz);\n if (is0)\n return { x: Fp.ZERO, y: Fp.ZERO };\n if (!Fp.eql(zz, Fp.ONE))\n throw new Error('invZ was invalid');\n return { x, y };\n });\n // NOTE: on exception this will crash 'cached' and no value will be set.\n // Otherwise true will be return\n const assertValidMemo = (0, utils_ts_1.memoized)((p) => {\n if (p.is0()) {\n // (0, 1, 0) aka ZERO is invalid in most contexts.\n // In BLS, ZERO can be serialized, so we allow it.\n // (0, 0, 0) is invalid representation of ZERO.\n if (extraOpts.allowInfinityPoint && !Fp.is0(p.Y))\n return;\n throw new Error('bad point: ZERO');\n }\n // Some 3rd-party test vectors require different wording between here & `fromCompressedHex`\n const { x, y } = p.toAffine();\n if (!Fp.isValid(x) || !Fp.isValid(y))\n throw new Error('bad point: x or y not field elements');\n if (!isValidXY(x, y))\n throw new Error('bad point: equation left != right');\n if (!p.isTorsionFree())\n throw new Error('bad point: not in prime-order subgroup');\n return true;\n });\n function finishEndo(endoBeta, k1p, k2p, k1neg, k2neg) {\n k2p = new Point(Fp.mul(k2p.X, endoBeta), k2p.Y, k2p.Z);\n k1p = (0, curve_ts_1.negateCt)(k1neg, k1p);\n k2p = (0, curve_ts_1.negateCt)(k2neg, k2p);\n return k1p.add(k2p);\n }\n /**\n * Projective Point works in 3d / projective (homogeneous) coordinates:(X, Y, Z) ∋ (x=X/Z, y=Y/Z).\n * Default Point works in 2d / affine coordinates: (x, y).\n * We're doing calculations in projective, because its operations don't require costly inversion.\n */\n class Point {\n /** Does NOT validate if the point is valid. Use `.assertValidity()`. */\n constructor(X, Y, Z) {\n this.X = acoord('x', X);\n this.Y = acoord('y', Y, true);\n this.Z = acoord('z', Z);\n Object.freeze(this);\n }\n static CURVE() {\n return CURVE;\n }\n /** Does NOT validate if the point is valid. Use `.assertValidity()`. */\n static fromAffine(p) {\n const { x, y } = p || {};\n if (!p || !Fp.isValid(x) || !Fp.isValid(y))\n throw new Error('invalid affine point');\n if (p instanceof Point)\n throw new Error('projective point not allowed');\n // (0, 0) would've produced (0, 0, 1) - instead, we need (0, 1, 0)\n if (Fp.is0(x) && Fp.is0(y))\n return Point.ZERO;\n return new Point(x, y, Fp.ONE);\n }\n static fromBytes(bytes) {\n const P = Point.fromAffine(decodePoint((0, utils_ts_1._abytes2)(bytes, undefined, 'point')));\n P.assertValidity();\n return P;\n }\n static fromHex(hex) {\n return Point.fromBytes((0, utils_ts_1.ensureBytes)('pointHex', hex));\n }\n get x() {\n return this.toAffine().x;\n }\n get y() {\n return this.toAffine().y;\n }\n /**\n *\n * @param windowSize\n * @param isLazy true will defer table computation until the first multiplication\n * @returns\n */\n precompute(windowSize = 8, isLazy = true) {\n wnaf.createCache(this, windowSize);\n if (!isLazy)\n this.multiply(_3n); // random number\n return this;\n }\n // TODO: return `this`\n /** A point on curve is valid if it conforms to equation. */\n assertValidity() {\n assertValidMemo(this);\n }\n hasEvenY() {\n const { y } = this.toAffine();\n if (!Fp.isOdd)\n throw new Error(\"Field doesn't support isOdd\");\n return !Fp.isOdd(y);\n }\n /** Compare one point to another. */\n equals(other) {\n aprjpoint(other);\n const { X: X1, Y: Y1, Z: Z1 } = this;\n const { X: X2, Y: Y2, Z: Z2 } = other;\n const U1 = Fp.eql(Fp.mul(X1, Z2), Fp.mul(X2, Z1));\n const U2 = Fp.eql(Fp.mul(Y1, Z2), Fp.mul(Y2, Z1));\n return U1 && U2;\n }\n /** Flips point to one corresponding to (x, -y) in Affine coordinates. */\n negate() {\n return new Point(this.X, Fp.neg(this.Y), this.Z);\n }\n // Renes-Costello-Batina exception-free doubling formula.\n // There is 30% faster Jacobian formula, but it is not complete.\n // https://eprint.iacr.org/2015/1060, algorithm 3\n // Cost: 8M + 3S + 3*a + 2*b3 + 15add.\n double() {\n const { a, b } = CURVE;\n const b3 = Fp.mul(b, _3n);\n const { X: X1, Y: Y1, Z: Z1 } = this;\n let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n let t0 = Fp.mul(X1, X1); // step 1\n let t1 = Fp.mul(Y1, Y1);\n let t2 = Fp.mul(Z1, Z1);\n let t3 = Fp.mul(X1, Y1);\n t3 = Fp.add(t3, t3); // step 5\n Z3 = Fp.mul(X1, Z1);\n Z3 = Fp.add(Z3, Z3);\n X3 = Fp.mul(a, Z3);\n Y3 = Fp.mul(b3, t2);\n Y3 = Fp.add(X3, Y3); // step 10\n X3 = Fp.sub(t1, Y3);\n Y3 = Fp.add(t1, Y3);\n Y3 = Fp.mul(X3, Y3);\n X3 = Fp.mul(t3, X3);\n Z3 = Fp.mul(b3, Z3); // step 15\n t2 = Fp.mul(a, t2);\n t3 = Fp.sub(t0, t2);\n t3 = Fp.mul(a, t3);\n t3 = Fp.add(t3, Z3);\n Z3 = Fp.add(t0, t0); // step 20\n t0 = Fp.add(Z3, t0);\n t0 = Fp.add(t0, t2);\n t0 = Fp.mul(t0, t3);\n Y3 = Fp.add(Y3, t0);\n t2 = Fp.mul(Y1, Z1); // step 25\n t2 = Fp.add(t2, t2);\n t0 = Fp.mul(t2, t3);\n X3 = Fp.sub(X3, t0);\n Z3 = Fp.mul(t2, t1);\n Z3 = Fp.add(Z3, Z3); // step 30\n Z3 = Fp.add(Z3, Z3);\n return new Point(X3, Y3, Z3);\n }\n // Renes-Costello-Batina exception-free addition formula.\n // There is 30% faster Jacobian formula, but it is not complete.\n // https://eprint.iacr.org/2015/1060, algorithm 1\n // Cost: 12M + 0S + 3*a + 3*b3 + 23add.\n add(other) {\n aprjpoint(other);\n const { X: X1, Y: Y1, Z: Z1 } = this;\n const { X: X2, Y: Y2, Z: Z2 } = other;\n let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n const a = CURVE.a;\n const b3 = Fp.mul(CURVE.b, _3n);\n let t0 = Fp.mul(X1, X2); // step 1\n let t1 = Fp.mul(Y1, Y2);\n let t2 = Fp.mul(Z1, Z2);\n let t3 = Fp.add(X1, Y1);\n let t4 = Fp.add(X2, Y2); // step 5\n t3 = Fp.mul(t3, t4);\n t4 = Fp.add(t0, t1);\n t3 = Fp.sub(t3, t4);\n t4 = Fp.add(X1, Z1);\n let t5 = Fp.add(X2, Z2); // step 10\n t4 = Fp.mul(t4, t5);\n t5 = Fp.add(t0, t2);\n t4 = Fp.sub(t4, t5);\n t5 = Fp.add(Y1, Z1);\n X3 = Fp.add(Y2, Z2); // step 15\n t5 = Fp.mul(t5, X3);\n X3 = Fp.add(t1, t2);\n t5 = Fp.sub(t5, X3);\n Z3 = Fp.mul(a, t4);\n X3 = Fp.mul(b3, t2); // step 20\n Z3 = Fp.add(X3, Z3);\n X3 = Fp.sub(t1, Z3);\n Z3 = Fp.add(t1, Z3);\n Y3 = Fp.mul(X3, Z3);\n t1 = Fp.add(t0, t0); // step 25\n t1 = Fp.add(t1, t0);\n t2 = Fp.mul(a, t2);\n t4 = Fp.mul(b3, t4);\n t1 = Fp.add(t1, t2);\n t2 = Fp.sub(t0, t2); // step 30\n t2 = Fp.mul(a, t2);\n t4 = Fp.add(t4, t2);\n t0 = Fp.mul(t1, t4);\n Y3 = Fp.add(Y3, t0);\n t0 = Fp.mul(t5, t4); // step 35\n X3 = Fp.mul(t3, X3);\n X3 = Fp.sub(X3, t0);\n t0 = Fp.mul(t3, t1);\n Z3 = Fp.mul(t5, Z3);\n Z3 = Fp.add(Z3, t0); // step 40\n return new Point(X3, Y3, Z3);\n }\n subtract(other) {\n return this.add(other.negate());\n }\n is0() {\n return this.equals(Point.ZERO);\n }\n /**\n * Constant time multiplication.\n * Uses wNAF method. Windowed method may be 10% faster,\n * but takes 2x longer to generate and consumes 2x memory.\n * Uses precomputes when available.\n * Uses endomorphism for Koblitz curves.\n * @param scalar by which the point would be multiplied\n * @returns New point\n */\n multiply(scalar) {\n const { endo } = extraOpts;\n if (!Fn.isValidNot0(scalar))\n throw new Error('invalid scalar: out of range'); // 0 is invalid\n let point, fake; // Fake point is used to const-time mult\n const mul = (n) => wnaf.cached(this, n, (p) => (0, curve_ts_1.normalizeZ)(Point, p));\n /** See docs for {@link EndomorphismOpts} */\n if (endo) {\n const { k1neg, k1, k2neg, k2 } = splitEndoScalarN(scalar);\n const { p: k1p, f: k1f } = mul(k1);\n const { p: k2p, f: k2f } = mul(k2);\n fake = k1f.add(k2f);\n point = finishEndo(endo.beta, k1p, k2p, k1neg, k2neg);\n }\n else {\n const { p, f } = mul(scalar);\n point = p;\n fake = f;\n }\n // Normalize `z` for both points, but return only real one\n return (0, curve_ts_1.normalizeZ)(Point, [point, fake])[0];\n }\n /**\n * Non-constant-time multiplication. Uses double-and-add algorithm.\n * It's faster, but should only be used when you don't care about\n * an exposed secret key e.g. sig verification, which works over *public* keys.\n */\n multiplyUnsafe(sc) {\n const { endo } = extraOpts;\n const p = this;\n if (!Fn.isValid(sc))\n throw new Error('invalid scalar: out of range'); // 0 is valid\n if (sc === _0n || p.is0())\n return Point.ZERO;\n if (sc === _1n)\n return p; // fast-path\n if (wnaf.hasCache(this))\n return this.multiply(sc);\n if (endo) {\n const { k1neg, k1, k2neg, k2 } = splitEndoScalarN(sc);\n const { p1, p2 } = (0, curve_ts_1.mulEndoUnsafe)(Point, p, k1, k2); // 30% faster vs wnaf.unsafe\n return finishEndo(endo.beta, p1, p2, k1neg, k2neg);\n }\n else {\n return wnaf.unsafe(p, sc);\n }\n }\n multiplyAndAddUnsafe(Q, a, b) {\n const sum = this.multiplyUnsafe(a).add(Q.multiplyUnsafe(b));\n return sum.is0() ? undefined : sum;\n }\n /**\n * Converts Projective point to affine (x, y) coordinates.\n * @param invertedZ Z^-1 (inverted zero) - optional, precomputation is useful for invertBatch\n */\n toAffine(invertedZ) {\n return toAffineMemo(this, invertedZ);\n }\n /**\n * Checks whether Point is free of torsion elements (is in prime subgroup).\n * Always torsion-free for cofactor=1 curves.\n */\n isTorsionFree() {\n const { isTorsionFree } = extraOpts;\n if (cofactor === _1n)\n return true;\n if (isTorsionFree)\n return isTorsionFree(Point, this);\n return wnaf.unsafe(this, CURVE_ORDER).is0();\n }\n clearCofactor() {\n const { clearCofactor } = extraOpts;\n if (cofactor === _1n)\n return this; // Fast-path\n if (clearCofactor)\n return clearCofactor(Point, this);\n return this.multiplyUnsafe(cofactor);\n }\n isSmallOrder() {\n // can we use this.clearCofactor()?\n return this.multiplyUnsafe(cofactor).is0();\n }\n toBytes(isCompressed = true) {\n (0, utils_ts_1._abool2)(isCompressed, 'isCompressed');\n this.assertValidity();\n return encodePoint(Point, this, isCompressed);\n }\n toHex(isCompressed = true) {\n return (0, utils_ts_1.bytesToHex)(this.toBytes(isCompressed));\n }\n toString() {\n return `<Point ${this.is0() ? 'ZERO' : this.toHex()}>`;\n }\n // TODO: remove\n get px() {\n return this.X;\n }\n get py() {\n return this.X;\n }\n get pz() {\n return this.Z;\n }\n toRawBytes(isCompressed = true) {\n return this.toBytes(isCompressed);\n }\n _setWindowSize(windowSize) {\n this.precompute(windowSize);\n }\n static normalizeZ(points) {\n return (0, curve_ts_1.normalizeZ)(Point, points);\n }\n static msm(points, scalars) {\n return (0, curve_ts_1.pippenger)(Point, Fn, points, scalars);\n }\n static fromPrivateKey(privateKey) {\n return Point.BASE.multiply(_normFnElement(Fn, privateKey));\n }\n }\n // base / generator point\n Point.BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n // zero / infinity / identity point\n Point.ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO); // 0, 1, 0\n // math field\n Point.Fp = Fp;\n // scalar field\n Point.Fn = Fn;\n const bits = Fn.BITS;\n const wnaf = new curve_ts_1.wNAF(Point, extraOpts.endo ? Math.ceil(bits / 2) : bits);\n Point.BASE.precompute(8); // Enable precomputes. Slows down first publicKey computation by 20ms.\n return Point;\n}\n// Points start with byte 0x02 when y is even; otherwise 0x03\nfunction pprefix(hasEvenY) {\n return Uint8Array.of(hasEvenY ? 0x02 : 0x03);\n}\n/**\n * Implementation of the Shallue and van de Woestijne method for any weierstrass curve.\n * TODO: check if there is a way to merge this with uvRatio in Edwards; move to modular.\n * b = True and y = sqrt(u / v) if (u / v) is square in F, and\n * b = False and y = sqrt(Z * (u / v)) otherwise.\n * @param Fp\n * @param Z\n * @returns\n */\nfunction SWUFpSqrtRatio(Fp, Z) {\n // Generic implementation\n const q = Fp.ORDER;\n let l = _0n;\n for (let o = q - _1n; o % _2n === _0n; o /= _2n)\n l += _1n;\n const c1 = l; // 1. c1, the largest integer such that 2^c1 divides q - 1.\n // We need 2n ** c1 and 2n ** (c1-1). We can't use **; but we can use <<.\n // 2n ** c1 == 2n << (c1-1)\n const _2n_pow_c1_1 = _2n << (c1 - _1n - _1n);\n const _2n_pow_c1 = _2n_pow_c1_1 * _2n;\n const c2 = (q - _1n) / _2n_pow_c1; // 2. c2 = (q - 1) / (2^c1) # Integer arithmetic\n const c3 = (c2 - _1n) / _2n; // 3. c3 = (c2 - 1) / 2 # Integer arithmetic\n const c4 = _2n_pow_c1 - _1n; // 4. c4 = 2^c1 - 1 # Integer arithmetic\n const c5 = _2n_pow_c1_1; // 5. c5 = 2^(c1 - 1) # Integer arithmetic\n const c6 = Fp.pow(Z, c2); // 6. c6 = Z^c2\n const c7 = Fp.pow(Z, (c2 + _1n) / _2n); // 7. c7 = Z^((c2 + 1) / 2)\n let sqrtRatio = (u, v) => {\n let tv1 = c6; // 1. tv1 = c6\n let tv2 = Fp.pow(v, c4); // 2. tv2 = v^c4\n let tv3 = Fp.sqr(tv2); // 3. tv3 = tv2^2\n tv3 = Fp.mul(tv3, v); // 4. tv3 = tv3 * v\n let tv5 = Fp.mul(u, tv3); // 5. tv5 = u * tv3\n tv5 = Fp.pow(tv5, c3); // 6. tv5 = tv5^c3\n tv5 = Fp.mul(tv5, tv2); // 7. tv5 = tv5 * tv2\n tv2 = Fp.mul(tv5, v); // 8. tv2 = tv5 * v\n tv3 = Fp.mul(tv5, u); // 9. tv3 = tv5 * u\n let tv4 = Fp.mul(tv3, tv2); // 10. tv4 = tv3 * tv2\n tv5 = Fp.pow(tv4, c5); // 11. tv5 = tv4^c5\n let isQR = Fp.eql(tv5, Fp.ONE); // 12. isQR = tv5 == 1\n tv2 = Fp.mul(tv3, c7); // 13. tv2 = tv3 * c7\n tv5 = Fp.mul(tv4, tv1); // 14. tv5 = tv4 * tv1\n tv3 = Fp.cmov(tv2, tv3, isQR); // 15. tv3 = CMOV(tv2, tv3, isQR)\n tv4 = Fp.cmov(tv5, tv4, isQR); // 16. tv4 = CMOV(tv5, tv4, isQR)\n // 17. for i in (c1, c1 - 1, ..., 2):\n for (let i = c1; i > _1n; i--) {\n let tv5 = i - _2n; // 18. tv5 = i - 2\n tv5 = _2n << (tv5 - _1n); // 19. tv5 = 2^tv5\n let tvv5 = Fp.pow(tv4, tv5); // 20. tv5 = tv4^tv5\n const e1 = Fp.eql(tvv5, Fp.ONE); // 21. e1 = tv5 == 1\n tv2 = Fp.mul(tv3, tv1); // 22. tv2 = tv3 * tv1\n tv1 = Fp.mul(tv1, tv1); // 23. tv1 = tv1 * tv1\n tvv5 = Fp.mul(tv4, tv1); // 24. tv5 = tv4 * tv1\n tv3 = Fp.cmov(tv2, tv3, e1); // 25. tv3 = CMOV(tv2, tv3, e1)\n tv4 = Fp.cmov(tvv5, tv4, e1); // 26. tv4 = CMOV(tv5, tv4, e1)\n }\n return { isValid: isQR, value: tv3 };\n };\n if (Fp.ORDER % _4n === _3n) {\n // sqrt_ratio_3mod4(u, v)\n const c1 = (Fp.ORDER - _3n) / _4n; // 1. c1 = (q - 3) / 4 # Integer arithmetic\n const c2 = Fp.sqrt(Fp.neg(Z)); // 2. c2 = sqrt(-Z)\n sqrtRatio = (u, v) => {\n let tv1 = Fp.sqr(v); // 1. tv1 = v^2\n const tv2 = Fp.mul(u, v); // 2. tv2 = u * v\n tv1 = Fp.mul(tv1, tv2); // 3. tv1 = tv1 * tv2\n let y1 = Fp.pow(tv1, c1); // 4. y1 = tv1^c1\n y1 = Fp.mul(y1, tv2); // 5. y1 = y1 * tv2\n const y2 = Fp.mul(y1, c2); // 6. y2 = y1 * c2\n const tv3 = Fp.mul(Fp.sqr(y1), v); // 7. tv3 = y1^2; 8. tv3 = tv3 * v\n const isQR = Fp.eql(tv3, u); // 9. isQR = tv3 == u\n let y = Fp.cmov(y2, y1, isQR); // 10. y = CMOV(y2, y1, isQR)\n return { isValid: isQR, value: y }; // 11. return (isQR, y) isQR ? y : y*c2\n };\n }\n // No curves uses that\n // if (Fp.ORDER % _8n === _5n) // sqrt_ratio_5mod8\n return sqrtRatio;\n}\n/**\n * Simplified Shallue-van de Woestijne-Ulas Method\n * https://www.rfc-editor.org/rfc/rfc9380#section-6.6.2\n */\nfunction mapToCurveSimpleSWU(Fp, opts) {\n (0, modular_ts_1.validateField)(Fp);\n const { A, B, Z } = opts;\n if (!Fp.isValid(A) || !Fp.isValid(B) || !Fp.isValid(Z))\n throw new Error('mapToCurveSimpleSWU: invalid opts');\n const sqrtRatio = SWUFpSqrtRatio(Fp, Z);\n if (!Fp.isOdd)\n throw new Error('Field does not have .isOdd()');\n // Input: u, an element of F.\n // Output: (x, y), a point on E.\n return (u) => {\n // prettier-ignore\n let tv1, tv2, tv3, tv4, tv5, tv6, x, y;\n tv1 = Fp.sqr(u); // 1. tv1 = u^2\n tv1 = Fp.mul(tv1, Z); // 2. tv1 = Z * tv1\n tv2 = Fp.sqr(tv1); // 3. tv2 = tv1^2\n tv2 = Fp.add(tv2, tv1); // 4. tv2 = tv2 + tv1\n tv3 = Fp.add(tv2, Fp.ONE); // 5. tv3 = tv2 + 1\n tv3 = Fp.mul(tv3, B); // 6. tv3 = B * tv3\n tv4 = Fp.cmov(Z, Fp.neg(tv2), !Fp.eql(tv2, Fp.ZERO)); // 7. tv4 = CMOV(Z, -tv2, tv2 != 0)\n tv4 = Fp.mul(tv4, A); // 8. tv4 = A * tv4\n tv2 = Fp.sqr(tv3); // 9. tv2 = tv3^2\n tv6 = Fp.sqr(tv4); // 10. tv6 = tv4^2\n tv5 = Fp.mul(tv6, A); // 11. tv5 = A * tv6\n tv2 = Fp.add(tv2, tv5); // 12. tv2 = tv2 + tv5\n tv2 = Fp.mul(tv2, tv3); // 13. tv2 = tv2 * tv3\n tv6 = Fp.mul(tv6, tv4); // 14. tv6 = tv6 * tv4\n tv5 = Fp.mul(tv6, B); // 15. tv5 = B * tv6\n tv2 = Fp.add(tv2, tv5); // 16. tv2 = tv2 + tv5\n x = Fp.mul(tv1, tv3); // 17. x = tv1 * tv3\n const { isValid, value } = sqrtRatio(tv2, tv6); // 18. (is_gx1_square, y1) = sqrt_ratio(tv2, tv6)\n y = Fp.mul(tv1, u); // 19. y = tv1 * u -> Z * u^3 * y1\n y = Fp.mul(y, value); // 20. y = y * y1\n x = Fp.cmov(x, tv3, isValid); // 21. x = CMOV(x, tv3, is_gx1_square)\n y = Fp.cmov(y, value, isValid); // 22. y = CMOV(y, y1, is_gx1_square)\n const e1 = Fp.isOdd(u) === Fp.isOdd(y); // 23. e1 = sgn0(u) == sgn0(y)\n y = Fp.cmov(Fp.neg(y), y, e1); // 24. y = CMOV(-y, y, e1)\n const tv4_inv = (0, modular_ts_1.FpInvertBatch)(Fp, [tv4], true)[0];\n x = Fp.mul(x, tv4_inv); // 25. x = x / tv4\n return { x, y };\n };\n}\nfunction getWLengths(Fp, Fn) {\n return {\n secretKey: Fn.BYTES,\n publicKey: 1 + Fp.BYTES,\n publicKeyUncompressed: 1 + 2 * Fp.BYTES,\n publicKeyHasPrefix: true,\n signature: 2 * Fn.BYTES,\n };\n}\n/**\n * Sometimes users only need getPublicKey, getSharedSecret, and secret key handling.\n * This helper ensures no signature functionality is present. Less code, smaller bundle size.\n */\nfunction ecdh(Point, ecdhOpts = {}) {\n const { Fn } = Point;\n const randomBytes_ = ecdhOpts.randomBytes || utils_ts_1.randomBytes;\n const lengths = Object.assign(getWLengths(Point.Fp, Fn), { seed: (0, modular_ts_1.getMinHashLength)(Fn.ORDER) });\n function isValidSecretKey(secretKey) {\n try {\n return !!_normFnElement(Fn, secretKey);\n }\n catch (error) {\n return false;\n }\n }\n function isValidPublicKey(publicKey, isCompressed) {\n const { publicKey: comp, publicKeyUncompressed } = lengths;\n try {\n const l = publicKey.length;\n if (isCompressed === true && l !== comp)\n return false;\n if (isCompressed === false && l !== publicKeyUncompressed)\n return false;\n return !!Point.fromBytes(publicKey);\n }\n catch (error) {\n return false;\n }\n }\n /**\n * Produces cryptographically secure secret key from random of size\n * (groupLen + ceil(groupLen / 2)) with modulo bias being negligible.\n */\n function randomSecretKey(seed = randomBytes_(lengths.seed)) {\n return (0, modular_ts_1.mapHashToField)((0, utils_ts_1._abytes2)(seed, lengths.seed, 'seed'), Fn.ORDER);\n }\n /**\n * Computes public key for a secret key. Checks for validity of the secret key.\n * @param isCompressed whether to return compact (default), or full key\n * @returns Public key, full when isCompressed=false; short when isCompressed=true\n */\n function getPublicKey(secretKey, isCompressed = true) {\n return Point.BASE.multiply(_normFnElement(Fn, secretKey)).toBytes(isCompressed);\n }\n function keygen(seed) {\n const secretKey = randomSecretKey(seed);\n return { secretKey, publicKey: getPublicKey(secretKey) };\n }\n /**\n * Quick and dirty check for item being public key. Does not validate hex, or being on-curve.\n */\n function isProbPub(item) {\n if (typeof item === 'bigint')\n return false;\n if (item instanceof Point)\n return true;\n const { secretKey, publicKey, publicKeyUncompressed } = lengths;\n if (Fn.allowedLengths || secretKey === publicKey)\n return undefined;\n const l = (0, utils_ts_1.ensureBytes)('key', item).length;\n return l === publicKey || l === publicKeyUncompressed;\n }\n /**\n * ECDH (Elliptic Curve Diffie Hellman).\n * Computes shared public key from secret key A and public key B.\n * Checks: 1) secret key validity 2) shared key is on-curve.\n * Does NOT hash the result.\n * @param isCompressed whether to return compact (default), or full key\n * @returns shared public key\n */\n function getSharedSecret(secretKeyA, publicKeyB, isCompressed = true) {\n if (isProbPub(secretKeyA) === true)\n throw new Error('first arg must be private key');\n if (isProbPub(publicKeyB) === false)\n throw new Error('second arg must be public key');\n const s = _normFnElement(Fn, secretKeyA);\n const b = Point.fromHex(publicKeyB); // checks for being on-curve\n return b.multiply(s).toBytes(isCompressed);\n }\n const utils = {\n isValidSecretKey,\n isValidPublicKey,\n randomSecretKey,\n // TODO: remove\n isValidPrivateKey: isValidSecretKey,\n randomPrivateKey: randomSecretKey,\n normPrivateKeyToScalar: (key) => _normFnElement(Fn, key),\n precompute(windowSize = 8, point = Point.BASE) {\n return point.precompute(windowSize, false);\n },\n };\n return Object.freeze({ getPublicKey, getSharedSecret, keygen, Point, utils, lengths });\n}\n/**\n * Creates ECDSA signing interface for given elliptic curve `Point` and `hash` function.\n * We need `hash` for 2 features:\n * 1. Message prehash-ing. NOT used if `sign` / `verify` are called with `prehash: false`\n * 2. k generation in `sign`, using HMAC-drbg(hash)\n *\n * ECDSAOpts are only rarely needed.\n *\n * @example\n * ```js\n * const p256_Point = weierstrass(...);\n * const p256_sha256 = ecdsa(p256_Point, sha256);\n * const p256_sha224 = ecdsa(p256_Point, sha224);\n * const p256_sha224_r = ecdsa(p256_Point, sha224, { randomBytes: (length) => { ... } });\n * ```\n */\nfunction ecdsa(Point, hash, ecdsaOpts = {}) {\n (0, utils_1.ahash)(hash);\n (0, utils_ts_1._validateObject)(ecdsaOpts, {}, {\n hmac: 'function',\n lowS: 'boolean',\n randomBytes: 'function',\n bits2int: 'function',\n bits2int_modN: 'function',\n });\n const randomBytes = ecdsaOpts.randomBytes || utils_ts_1.randomBytes;\n const hmac = ecdsaOpts.hmac ||\n ((key, ...msgs) => (0, hmac_js_1.hmac)(hash, key, (0, utils_ts_1.concatBytes)(...msgs)));\n const { Fp, Fn } = Point;\n const { ORDER: CURVE_ORDER, BITS: fnBits } = Fn;\n const { keygen, getPublicKey, getSharedSecret, utils, lengths } = ecdh(Point, ecdsaOpts);\n const defaultSigOpts = {\n prehash: false,\n lowS: typeof ecdsaOpts.lowS === 'boolean' ? ecdsaOpts.lowS : false,\n format: undefined, //'compact' as ECDSASigFormat,\n extraEntropy: false,\n };\n const defaultSigOpts_format = 'compact';\n function isBiggerThanHalfOrder(number) {\n const HALF = CURVE_ORDER >> _1n;\n return number > HALF;\n }\n function validateRS(title, num) {\n if (!Fn.isValidNot0(num))\n throw new Error(`invalid signature ${title}: out of range 1..Point.Fn.ORDER`);\n return num;\n }\n function validateSigLength(bytes, format) {\n validateSigFormat(format);\n const size = lengths.signature;\n const sizer = format === 'compact' ? size : format === 'recovered' ? size + 1 : undefined;\n return (0, utils_ts_1._abytes2)(bytes, sizer, `${format} signature`);\n }\n /**\n * ECDSA signature with its (r, s) properties. Supports compact, recovered & DER representations.\n */\n class Signature {\n constructor(r, s, recovery) {\n this.r = validateRS('r', r); // r in [1..N-1];\n this.s = validateRS('s', s); // s in [1..N-1];\n if (recovery != null)\n this.recovery = recovery;\n Object.freeze(this);\n }\n static fromBytes(bytes, format = defaultSigOpts_format) {\n validateSigLength(bytes, format);\n let recid;\n if (format === 'der') {\n const { r, s } = exports.DER.toSig((0, utils_ts_1._abytes2)(bytes));\n return new Signature(r, s);\n }\n if (format === 'recovered') {\n recid = bytes[0];\n format = 'compact';\n bytes = bytes.subarray(1);\n }\n const L = Fn.BYTES;\n const r = bytes.subarray(0, L);\n const s = bytes.subarray(L, L * 2);\n return new Signature(Fn.fromBytes(r), Fn.fromBytes(s), recid);\n }\n static fromHex(hex, format) {\n return this.fromBytes((0, utils_ts_1.hexToBytes)(hex), format);\n }\n addRecoveryBit(recovery) {\n return new Signature(this.r, this.s, recovery);\n }\n recoverPublicKey(messageHash) {\n const FIELD_ORDER = Fp.ORDER;\n const { r, s, recovery: rec } = this;\n if (rec == null || ![0, 1, 2, 3].includes(rec))\n throw new Error('recovery id invalid');\n // ECDSA recovery is hard for cofactor > 1 curves.\n // In sign, `r = q.x mod n`, and here we recover q.x from r.\n // While recovering q.x >= n, we need to add r+n for cofactor=1 curves.\n // However, for cofactor>1, r+n may not get q.x:\n // r+n*i would need to be done instead where i is unknown.\n // To easily get i, we either need to:\n // a. increase amount of valid recid values (4, 5...); OR\n // b. prohibit non-prime-order signatures (recid > 1).\n const hasCofactor = CURVE_ORDER * _2n < FIELD_ORDER;\n if (hasCofactor && rec > 1)\n throw new Error('recovery id is ambiguous for h>1 curve');\n const radj = rec === 2 || rec === 3 ? r + CURVE_ORDER : r;\n if (!Fp.isValid(radj))\n throw new Error('recovery id 2 or 3 invalid');\n const x = Fp.toBytes(radj);\n const R = Point.fromBytes((0, utils_ts_1.concatBytes)(pprefix((rec & 1) === 0), x));\n const ir = Fn.inv(radj); // r^-1\n const h = bits2int_modN((0, utils_ts_1.ensureBytes)('msgHash', messageHash)); // Truncate hash\n const u1 = Fn.create(-h * ir); // -hr^-1\n const u2 = Fn.create(s * ir); // sr^-1\n // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1). unsafe is fine: there is no private data.\n const Q = Point.BASE.multiplyUnsafe(u1).add(R.multiplyUnsafe(u2));\n if (Q.is0())\n throw new Error('point at infinify');\n Q.assertValidity();\n return Q;\n }\n // Signatures should be low-s, to prevent malleability.\n hasHighS() {\n return isBiggerThanHalfOrder(this.s);\n }\n toBytes(format = defaultSigOpts_format) {\n validateSigFormat(format);\n if (format === 'der')\n return (0, utils_ts_1.hexToBytes)(exports.DER.hexFromSig(this));\n const r = Fn.toBytes(this.r);\n const s = Fn.toBytes(this.s);\n if (format === 'recovered') {\n if (this.recovery == null)\n throw new Error('recovery bit must be present');\n return (0, utils_ts_1.concatBytes)(Uint8Array.of(this.recovery), r, s);\n }\n return (0, utils_ts_1.concatBytes)(r, s);\n }\n toHex(format) {\n return (0, utils_ts_1.bytesToHex)(this.toBytes(format));\n }\n // TODO: remove\n assertValidity() { }\n static fromCompact(hex) {\n return Signature.fromBytes((0, utils_ts_1.ensureBytes)('sig', hex), 'compact');\n }\n static fromDER(hex) {\n return Signature.fromBytes((0, utils_ts_1.ensureBytes)('sig', hex), 'der');\n }\n normalizeS() {\n return this.hasHighS() ? new Signature(this.r, Fn.neg(this.s), this.recovery) : this;\n }\n toDERRawBytes() {\n return this.toBytes('der');\n }\n toDERHex() {\n return (0, utils_ts_1.bytesToHex)(this.toBytes('der'));\n }\n toCompactRawBytes() {\n return this.toBytes('compact');\n }\n toCompactHex() {\n return (0, utils_ts_1.bytesToHex)(this.toBytes('compact'));\n }\n }\n // RFC6979: ensure ECDSA msg is X bytes and < N. RFC suggests optional truncating via bits2octets.\n // FIPS 186-4 4.6 suggests the leftmost min(nBitLen, outLen) bits, which matches bits2int.\n // bits2int can produce res>N, we can do mod(res, N) since the bitLen is the same.\n // int2octets can't be used; pads small msgs with 0: unacceptatble for trunc as per RFC vectors\n const bits2int = ecdsaOpts.bits2int ||\n function bits2int_def(bytes) {\n // Our custom check \"just in case\", for protection against DoS\n if (bytes.length > 8192)\n throw new Error('input is too large');\n // For curves with nBitLength % 8 !== 0: bits2octets(bits2octets(m)) !== bits2octets(m)\n // for some cases, since bytes.length * 8 is not actual bitLength.\n const num = (0, utils_ts_1.bytesToNumberBE)(bytes); // check for == u8 done here\n const delta = bytes.length * 8 - fnBits; // truncate to nBitLength leftmost bits\n return delta > 0 ? num >> BigInt(delta) : num;\n };\n const bits2int_modN = ecdsaOpts.bits2int_modN ||\n function bits2int_modN_def(bytes) {\n return Fn.create(bits2int(bytes)); // can't use bytesToNumberBE here\n };\n // Pads output with zero as per spec\n const ORDER_MASK = (0, utils_ts_1.bitMask)(fnBits);\n /** Converts to bytes. Checks if num in `[0..ORDER_MASK-1]` e.g.: `[0..2^256-1]`. */\n function int2octets(num) {\n // IMPORTANT: the check ensures working for case `Fn.BYTES != Fn.BITS * 8`\n (0, utils_ts_1.aInRange)('num < 2^' + fnBits, num, _0n, ORDER_MASK);\n return Fn.toBytes(num);\n }\n function validateMsgAndHash(message, prehash) {\n (0, utils_ts_1._abytes2)(message, undefined, 'message');\n return prehash ? (0, utils_ts_1._abytes2)(hash(message), undefined, 'prehashed message') : message;\n }\n /**\n * Steps A, D of RFC6979 3.2.\n * Creates RFC6979 seed; converts msg/privKey to numbers.\n * Used only in sign, not in verify.\n *\n * Warning: we cannot assume here that message has same amount of bytes as curve order,\n * this will be invalid at least for P521. Also it can be bigger for P224 + SHA256.\n */\n function prepSig(message, privateKey, opts) {\n if (['recovered', 'canonical'].some((k) => k in opts))\n throw new Error('sign() legacy options not supported');\n const { lowS, prehash, extraEntropy } = validateSigOpts(opts, defaultSigOpts);\n message = validateMsgAndHash(message, prehash); // RFC6979 3.2 A: h1 = H(m)\n // We can't later call bits2octets, since nested bits2int is broken for curves\n // with fnBits % 8 !== 0. Because of that, we unwrap it here as int2octets call.\n // const bits2octets = (bits) => int2octets(bits2int_modN(bits))\n const h1int = bits2int_modN(message);\n const d = _normFnElement(Fn, privateKey); // validate secret key, convert to bigint\n const seedArgs = [int2octets(d), int2octets(h1int)];\n // extraEntropy. RFC6979 3.6: additional k' (optional).\n if (extraEntropy != null && extraEntropy !== false) {\n // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n // gen random bytes OR pass as-is\n const e = extraEntropy === true ? randomBytes(lengths.secretKey) : extraEntropy;\n seedArgs.push((0, utils_ts_1.ensureBytes)('extraEntropy', e)); // check for being bytes\n }\n const seed = (0, utils_ts_1.concatBytes)(...seedArgs); // Step D of RFC6979 3.2\n const m = h1int; // NOTE: no need to call bits2int second time here, it is inside truncateHash!\n // Converts signature params into point w r/s, checks result for validity.\n // To transform k => Signature:\n // q = k⋅G\n // r = q.x mod n\n // s = k^-1(m + rd) mod n\n // Can use scalar blinding b^-1(bm + bdr) where b ∈ [1,q−1] according to\n // https://tches.iacr.org/index.php/TCHES/article/view/7337/6509. We've decided against it:\n // a) dependency on CSPRNG b) 15% slowdown c) doesn't really help since bigints are not CT\n function k2sig(kBytes) {\n // RFC 6979 Section 3.2, step 3: k = bits2int(T)\n // Important: all mod() calls here must be done over N\n const k = bits2int(kBytes); // mod n, not mod p\n if (!Fn.isValidNot0(k))\n return; // Valid scalars (including k) must be in 1..N-1\n const ik = Fn.inv(k); // k^-1 mod n\n const q = Point.BASE.multiply(k).toAffine(); // q = k⋅G\n const r = Fn.create(q.x); // r = q.x mod n\n if (r === _0n)\n return;\n const s = Fn.create(ik * Fn.create(m + r * d)); // Not using blinding here, see comment above\n if (s === _0n)\n return;\n let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n); // recovery bit (2 or 3, when q.x > n)\n let normS = s;\n if (lowS && isBiggerThanHalfOrder(s)) {\n normS = Fn.neg(s); // if lowS was passed, ensure s is always\n recovery ^= 1; // // in the bottom half of N\n }\n return new Signature(r, normS, recovery); // use normS, not s\n }\n return { seed, k2sig };\n }\n /**\n * Signs message hash with a secret key.\n *\n * ```\n * sign(m, d) where\n * k = rfc6979_hmac_drbg(m, d)\n * (x, y) = G × k\n * r = x mod n\n * s = (m + dr) / k mod n\n * ```\n */\n function sign(message, secretKey, opts = {}) {\n message = (0, utils_ts_1.ensureBytes)('message', message);\n const { seed, k2sig } = prepSig(message, secretKey, opts); // Steps A, D of RFC6979 3.2.\n const drbg = (0, utils_ts_1.createHmacDrbg)(hash.outputLen, Fn.BYTES, hmac);\n const sig = drbg(seed, k2sig); // Steps B, C, D, E, F, G\n return sig;\n }\n function tryParsingSig(sg) {\n // Try to deduce format\n let sig = undefined;\n const isHex = typeof sg === 'string' || (0, utils_ts_1.isBytes)(sg);\n const isObj = !isHex &&\n sg !== null &&\n typeof sg === 'object' &&\n typeof sg.r === 'bigint' &&\n typeof sg.s === 'bigint';\n if (!isHex && !isObj)\n throw new Error('invalid signature, expected Uint8Array, hex string or Signature instance');\n if (isObj) {\n sig = new Signature(sg.r, sg.s);\n }\n else if (isHex) {\n try {\n sig = Signature.fromBytes((0, utils_ts_1.ensureBytes)('sig', sg), 'der');\n }\n catch (derError) {\n if (!(derError instanceof exports.DER.Err))\n throw derError;\n }\n if (!sig) {\n try {\n sig = Signature.fromBytes((0, utils_ts_1.ensureBytes)('sig', sg), 'compact');\n }\n catch (error) {\n return false;\n }\n }\n }\n if (!sig)\n return false;\n return sig;\n }\n /**\n * Verifies a signature against message and public key.\n * Rejects lowS signatures by default: see {@link ECDSAVerifyOpts}.\n * Implements section 4.1.4 from https://www.secg.org/sec1-v2.pdf:\n *\n * ```\n * verify(r, s, h, P) where\n * u1 = hs^-1 mod n\n * u2 = rs^-1 mod n\n * R = u1⋅G + u2⋅P\n * mod(R.x, n) == r\n * ```\n */\n function verify(signature, message, publicKey, opts = {}) {\n const { lowS, prehash, format } = validateSigOpts(opts, defaultSigOpts);\n publicKey = (0, utils_ts_1.ensureBytes)('publicKey', publicKey);\n message = validateMsgAndHash((0, utils_ts_1.ensureBytes)('message', message), prehash);\n if ('strict' in opts)\n throw new Error('options.strict was renamed to lowS');\n const sig = format === undefined\n ? tryParsingSig(signature)\n : Signature.fromBytes((0, utils_ts_1.ensureBytes)('sig', signature), format);\n if (sig === false)\n return false;\n try {\n const P = Point.fromBytes(publicKey);\n if (lowS && sig.hasHighS())\n return false;\n const { r, s } = sig;\n const h = bits2int_modN(message); // mod n, not mod p\n const is = Fn.inv(s); // s^-1 mod n\n const u1 = Fn.create(h * is); // u1 = hs^-1 mod n\n const u2 = Fn.create(r * is); // u2 = rs^-1 mod n\n const R = Point.BASE.multiplyUnsafe(u1).add(P.multiplyUnsafe(u2)); // u1⋅G + u2⋅P\n if (R.is0())\n return false;\n const v = Fn.create(R.x); // v = r.x mod n\n return v === r;\n }\n catch (e) {\n return false;\n }\n }\n function recoverPublicKey(signature, message, opts = {}) {\n const { prehash } = validateSigOpts(opts, defaultSigOpts);\n message = validateMsgAndHash(message, prehash);\n return Signature.fromBytes(signature, 'recovered').recoverPublicKey(message).toBytes();\n }\n return Object.freeze({\n keygen,\n getPublicKey,\n getSharedSecret,\n utils,\n lengths,\n Point,\n sign,\n verify,\n recoverPublicKey,\n Signature,\n hash,\n });\n}\n/** @deprecated use `weierstrass` in newer releases */\nfunction weierstrassPoints(c) {\n const { CURVE, curveOpts } = _weierstrass_legacy_opts_to_new(c);\n const Point = weierstrassN(CURVE, curveOpts);\n return _weierstrass_new_output_to_legacy(c, Point);\n}\nfunction _weierstrass_legacy_opts_to_new(c) {\n const CURVE = {\n a: c.a,\n b: c.b,\n p: c.Fp.ORDER,\n n: c.n,\n h: c.h,\n Gx: c.Gx,\n Gy: c.Gy,\n };\n const Fp = c.Fp;\n let allowedLengths = c.allowedPrivateKeyLengths\n ? Array.from(new Set(c.allowedPrivateKeyLengths.map((l) => Math.ceil(l / 2))))\n : undefined;\n const Fn = (0, modular_ts_1.Field)(CURVE.n, {\n BITS: c.nBitLength,\n allowedLengths: allowedLengths,\n modFromBytes: c.wrapPrivateKey,\n });\n const curveOpts = {\n Fp,\n Fn,\n allowInfinityPoint: c.allowInfinityPoint,\n endo: c.endo,\n isTorsionFree: c.isTorsionFree,\n clearCofactor: c.clearCofactor,\n fromBytes: c.fromBytes,\n toBytes: c.toBytes,\n };\n return { CURVE, curveOpts };\n}\nfunction _ecdsa_legacy_opts_to_new(c) {\n const { CURVE, curveOpts } = _weierstrass_legacy_opts_to_new(c);\n const ecdsaOpts = {\n hmac: c.hmac,\n randomBytes: c.randomBytes,\n lowS: c.lowS,\n bits2int: c.bits2int,\n bits2int_modN: c.bits2int_modN,\n };\n return { CURVE, curveOpts, hash: c.hash, ecdsaOpts };\n}\nfunction _legacyHelperEquat(Fp, a, b) {\n /**\n * y² = x³ + ax + b: Short weierstrass curve formula. Takes x, returns y².\n * @returns y²\n */\n function weierstrassEquation(x) {\n const x2 = Fp.sqr(x); // x * x\n const x3 = Fp.mul(x2, x); // x² * x\n return Fp.add(Fp.add(x3, Fp.mul(x, a)), b); // x³ + a * x + b\n }\n return weierstrassEquation;\n}\nfunction _weierstrass_new_output_to_legacy(c, Point) {\n const { Fp, Fn } = Point;\n function isWithinCurveOrder(num) {\n return (0, utils_ts_1.inRange)(num, _1n, Fn.ORDER);\n }\n const weierstrassEquation = _legacyHelperEquat(Fp, c.a, c.b);\n return Object.assign({}, {\n CURVE: c,\n Point: Point,\n ProjectivePoint: Point,\n normPrivateKeyToScalar: (key) => _normFnElement(Fn, key),\n weierstrassEquation,\n isWithinCurveOrder,\n });\n}\nfunction _ecdsa_new_output_to_legacy(c, _ecdsa) {\n const Point = _ecdsa.Point;\n return Object.assign({}, _ecdsa, {\n ProjectivePoint: Point,\n CURVE: Object.assign({}, c, (0, modular_ts_1.nLength)(Point.Fn.ORDER, Point.Fn.BITS)),\n });\n}\n// _ecdsa_legacy\nfunction weierstrass(c) {\n const { CURVE, curveOpts, hash, ecdsaOpts } = _ecdsa_legacy_opts_to_new(c);\n const Point = weierstrassN(CURVE, curveOpts);\n const signs = ecdsa(Point, hash, ecdsaOpts);\n return _ecdsa_new_output_to_legacy(c, signs);\n}\n//# sourceMappingURL=weierstrass.js.map",
|
|
40
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getHash = getHash;\nexports.createCurve = createCurve;\n/**\n * Utilities for short weierstrass curves, combined with noble-hashes.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nconst weierstrass_ts_1 = require(\"./abstract/weierstrass.js\");\n/** connects noble-curves to noble-hashes */\nfunction getHash(hash) {\n return { hash };\n}\n/** @deprecated use new `weierstrass()` and `ecdsa()` methods */\nfunction createCurve(curveDef, defHash) {\n const create = (hash) => (0, weierstrass_ts_1.weierstrass)({ ...curveDef, hash: hash });\n return { ...create(defHash), create };\n}\n//# sourceMappingURL=_shortw_utils.js.map",
|
|
41
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.encodeToCurve = exports.hashToCurve = exports.secp256k1_hasher = exports.schnorr = exports.secp256k1 = void 0;\n/**\n * SECG secp256k1. See [pdf](https://www.secg.org/sec2-v2.pdf).\n *\n * Belongs to Koblitz curves: it has efficiently-computable GLV endomorphism ψ,\n * check out {@link EndomorphismOpts}. Seems to be rigid (not backdoored).\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nconst sha2_js_1 = require(\"@noble/hashes/sha2.js\");\nconst utils_js_1 = require(\"@noble/hashes/utils.js\");\nconst _shortw_utils_ts_1 = require(\"./_shortw_utils.js\");\nconst hash_to_curve_ts_1 = require(\"./abstract/hash-to-curve.js\");\nconst modular_ts_1 = require(\"./abstract/modular.js\");\nconst weierstrass_ts_1 = require(\"./abstract/weierstrass.js\");\nconst utils_ts_1 = require(\"./utils.js\");\n// Seems like generator was produced from some seed:\n// `Point.BASE.multiply(Point.Fn.inv(2n, N)).toAffine().x`\n// // gives short x 0x3b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63n\nconst secp256k1_CURVE = {\n p: BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f'),\n n: BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141'),\n h: BigInt(1),\n a: BigInt(0),\n b: BigInt(7),\n Gx: BigInt('0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798'),\n Gy: BigInt('0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8'),\n};\nconst secp256k1_ENDO = {\n beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n basises: [\n [BigInt('0x3086d221a7d46bcde86c90e49284eb15'), -BigInt('0xe4437ed6010e88286f547fa90abfe4c3')],\n [BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8'), BigInt('0x3086d221a7d46bcde86c90e49284eb15')],\n ],\n};\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nconst _2n = /* @__PURE__ */ BigInt(2);\n/**\n * √n = n^((p+1)/4) for fields p = 3 mod 4. We unwrap the loop and multiply bit-by-bit.\n * (P+1n/4n).toString(2) would produce bits [223x 1, 0, 22x 1, 4x 0, 11, 00]\n */\nfunction sqrtMod(y) {\n const P = secp256k1_CURVE.p;\n // prettier-ignore\n const _3n = BigInt(3), _6n = BigInt(6), _11n = BigInt(11), _22n = BigInt(22);\n // prettier-ignore\n const _23n = BigInt(23), _44n = BigInt(44), _88n = BigInt(88);\n const b2 = (y * y * y) % P; // x^3, 11\n const b3 = (b2 * b2 * y) % P; // x^7\n const b6 = ((0, modular_ts_1.pow2)(b3, _3n, P) * b3) % P;\n const b9 = ((0, modular_ts_1.pow2)(b6, _3n, P) * b3) % P;\n const b11 = ((0, modular_ts_1.pow2)(b9, _2n, P) * b2) % P;\n const b22 = ((0, modular_ts_1.pow2)(b11, _11n, P) * b11) % P;\n const b44 = ((0, modular_ts_1.pow2)(b22, _22n, P) * b22) % P;\n const b88 = ((0, modular_ts_1.pow2)(b44, _44n, P) * b44) % P;\n const b176 = ((0, modular_ts_1.pow2)(b88, _88n, P) * b88) % P;\n const b220 = ((0, modular_ts_1.pow2)(b176, _44n, P) * b44) % P;\n const b223 = ((0, modular_ts_1.pow2)(b220, _3n, P) * b3) % P;\n const t1 = ((0, modular_ts_1.pow2)(b223, _23n, P) * b22) % P;\n const t2 = ((0, modular_ts_1.pow2)(t1, _6n, P) * b2) % P;\n const root = (0, modular_ts_1.pow2)(t2, _2n, P);\n if (!Fpk1.eql(Fpk1.sqr(root), y))\n throw new Error('Cannot find square root');\n return root;\n}\nconst Fpk1 = (0, modular_ts_1.Field)(secp256k1_CURVE.p, { sqrt: sqrtMod });\n/**\n * secp256k1 curve, ECDSA and ECDH methods.\n *\n * Field: `2n**256n - 2n**32n - 2n**9n - 2n**8n - 2n**7n - 2n**6n - 2n**4n - 1n`\n *\n * @example\n * ```js\n * import { secp256k1 } from '@noble/curves/secp256k1';\n * const { secretKey, publicKey } = secp256k1.keygen();\n * const msg = new TextEncoder().encode('hello');\n * const sig = secp256k1.sign(msg, secretKey);\n * const isValid = secp256k1.verify(sig, msg, publicKey) === true;\n * ```\n */\nexports.secp256k1 = (0, _shortw_utils_ts_1.createCurve)({ ...secp256k1_CURVE, Fp: Fpk1, lowS: true, endo: secp256k1_ENDO }, sha2_js_1.sha256);\n// Schnorr signatures are superior to ECDSA from above. Below is Schnorr-specific BIP0340 code.\n// https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\n/** An object mapping tags to their tagged hash prefix of [SHA256(tag) | SHA256(tag)] */\nconst TAGGED_HASH_PREFIXES = {};\nfunction taggedHash(tag, ...messages) {\n let tagP = TAGGED_HASH_PREFIXES[tag];\n if (tagP === undefined) {\n const tagH = (0, sha2_js_1.sha256)((0, utils_ts_1.utf8ToBytes)(tag));\n tagP = (0, utils_ts_1.concatBytes)(tagH, tagH);\n TAGGED_HASH_PREFIXES[tag] = tagP;\n }\n return (0, sha2_js_1.sha256)((0, utils_ts_1.concatBytes)(tagP, ...messages));\n}\n// ECDSA compact points are 33-byte. Schnorr is 32: we strip first byte 0x02 or 0x03\nconst pointToBytes = (point) => point.toBytes(true).slice(1);\nconst Pointk1 = /* @__PURE__ */ (() => exports.secp256k1.Point)();\nconst hasEven = (y) => y % _2n === _0n;\n// Calculate point, scalar and bytes\nfunction schnorrGetExtPubKey(priv) {\n const { Fn, BASE } = Pointk1;\n const d_ = (0, weierstrass_ts_1._normFnElement)(Fn, priv);\n const p = BASE.multiply(d_); // P = d'⋅G; 0 < d' < n check is done inside\n const scalar = hasEven(p.y) ? d_ : Fn.neg(d_);\n return { scalar, bytes: pointToBytes(p) };\n}\n/**\n * lift_x from BIP340. Convert 32-byte x coordinate to elliptic curve point.\n * @returns valid point checked for being on-curve\n */\nfunction lift_x(x) {\n const Fp = Fpk1;\n if (!Fp.isValidNot0(x))\n throw new Error('invalid x: Fail if x ≥ p');\n const xx = Fp.create(x * x);\n const c = Fp.create(xx * x + BigInt(7)); // Let c = x³ + 7 mod p.\n let y = Fp.sqrt(c); // Let y = c^(p+1)/4 mod p. Same as sqrt().\n // Return the unique point P such that x(P) = x and\n // y(P) = y if y mod 2 = 0 or y(P) = p-y otherwise.\n if (!hasEven(y))\n y = Fp.neg(y);\n const p = Pointk1.fromAffine({ x, y });\n p.assertValidity();\n return p;\n}\nconst num = utils_ts_1.bytesToNumberBE;\n/**\n * Create tagged hash, convert it to bigint, reduce modulo-n.\n */\nfunction challenge(...args) {\n return Pointk1.Fn.create(num(taggedHash('BIP0340/challenge', ...args)));\n}\n/**\n * Schnorr public key is just `x` coordinate of Point as per BIP340.\n */\nfunction schnorrGetPublicKey(secretKey) {\n return schnorrGetExtPubKey(secretKey).bytes; // d'=int(sk). Fail if d'=0 or d'≥n. Ret bytes(d'⋅G)\n}\n/**\n * Creates Schnorr signature as per BIP340. Verifies itself before returning anything.\n * auxRand is optional and is not the sole source of k generation: bad CSPRNG won't be dangerous.\n */\nfunction schnorrSign(message, secretKey, auxRand = (0, utils_js_1.randomBytes)(32)) {\n const { Fn } = Pointk1;\n const m = (0, utils_ts_1.ensureBytes)('message', message);\n const { bytes: px, scalar: d } = schnorrGetExtPubKey(secretKey); // checks for isWithinCurveOrder\n const a = (0, utils_ts_1.ensureBytes)('auxRand', auxRand, 32); // Auxiliary random data a: a 32-byte array\n const t = Fn.toBytes(d ^ num(taggedHash('BIP0340/aux', a))); // Let t be the byte-wise xor of bytes(d) and hash/aux(a)\n const rand = taggedHash('BIP0340/nonce', t, px, m); // Let rand = hash/nonce(t || bytes(P) || m)\n // Let k' = int(rand) mod n. Fail if k' = 0. Let R = k'⋅G\n const { bytes: rx, scalar: k } = schnorrGetExtPubKey(rand);\n const e = challenge(rx, px, m); // Let e = int(hash/challenge(bytes(R) || bytes(P) || m)) mod n.\n const sig = new Uint8Array(64); // Let sig = bytes(R) || bytes((k + ed) mod n).\n sig.set(rx, 0);\n sig.set(Fn.toBytes(Fn.create(k + e * d)), 32);\n // If Verify(bytes(P), m, sig) (see below) returns failure, abort\n if (!schnorrVerify(sig, m, px))\n throw new Error('sign: Invalid signature produced');\n return sig;\n}\n/**\n * Verifies Schnorr signature.\n * Will swallow errors & return false except for initial type validation of arguments.\n */\nfunction schnorrVerify(signature, message, publicKey) {\n const { Fn, BASE } = Pointk1;\n const sig = (0, utils_ts_1.ensureBytes)('signature', signature, 64);\n const m = (0, utils_ts_1.ensureBytes)('message', message);\n const pub = (0, utils_ts_1.ensureBytes)('publicKey', publicKey, 32);\n try {\n const P = lift_x(num(pub)); // P = lift_x(int(pk)); fail if that fails\n const r = num(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r ≥ p.\n if (!(0, utils_ts_1.inRange)(r, _1n, secp256k1_CURVE.p))\n return false;\n const s = num(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s ≥ n.\n if (!(0, utils_ts_1.inRange)(s, _1n, secp256k1_CURVE.n))\n return false;\n // int(challenge(bytes(r)||bytes(P)||m))%n\n const e = challenge(Fn.toBytes(r), pointToBytes(P), m);\n // R = s⋅G - e⋅P, where -eP == (n-e)P\n const R = BASE.multiplyUnsafe(s).add(P.multiplyUnsafe(Fn.neg(e)));\n const { x, y } = R.toAffine();\n // Fail if is_infinite(R) / not has_even_y(R) / x(R) ≠ r.\n if (R.is0() || !hasEven(y) || x !== r)\n return false;\n return true;\n }\n catch (error) {\n return false;\n }\n}\n/**\n * Schnorr signatures over secp256k1.\n * https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\n * @example\n * ```js\n * import { schnorr } from '@noble/curves/secp256k1';\n * const { secretKey, publicKey } = schnorr.keygen();\n * // const publicKey = schnorr.getPublicKey(secretKey);\n * const msg = new TextEncoder().encode('hello');\n * const sig = schnorr.sign(msg, secretKey);\n * const isValid = schnorr.verify(sig, msg, publicKey);\n * ```\n */\nexports.schnorr = (() => {\n const size = 32;\n const seedLength = 48;\n const randomSecretKey = (seed = (0, utils_js_1.randomBytes)(seedLength)) => {\n return (0, modular_ts_1.mapHashToField)(seed, secp256k1_CURVE.n);\n };\n // TODO: remove\n exports.secp256k1.utils.randomSecretKey;\n function keygen(seed) {\n const secretKey = randomSecretKey(seed);\n return { secretKey, publicKey: schnorrGetPublicKey(secretKey) };\n }\n return {\n keygen,\n getPublicKey: schnorrGetPublicKey,\n sign: schnorrSign,\n verify: schnorrVerify,\n Point: Pointk1,\n utils: {\n randomSecretKey: randomSecretKey,\n randomPrivateKey: randomSecretKey,\n taggedHash,\n // TODO: remove\n lift_x,\n pointToBytes,\n numberToBytesBE: utils_ts_1.numberToBytesBE,\n bytesToNumberBE: utils_ts_1.bytesToNumberBE,\n mod: modular_ts_1.mod,\n },\n lengths: {\n secretKey: size,\n publicKey: size,\n publicKeyHasPrefix: false,\n signature: size * 2,\n seed: seedLength,\n },\n };\n})();\nconst isoMap = /* @__PURE__ */ (() => (0, hash_to_curve_ts_1.isogenyMap)(Fpk1, [\n // xNum\n [\n '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa8c7',\n '0x7d3d4c80bc321d5b9f315cea7fd44c5d595d2fc0bf63b92dfff1044f17c6581',\n '0x534c328d23f234e6e2a413deca25caece4506144037c40314ecbd0b53d9dd262',\n '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa88c',\n ],\n // xDen\n [\n '0xd35771193d94918a9ca34ccbb7b640dd86cd409542f8487d9fe6b745781eb49b',\n '0xedadc6f64383dc1df7c4b2d51b54225406d36b641f5e41bbc52a56612a8c6d14',\n '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n ],\n // yNum\n [\n '0x4bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684b8e38e23c',\n '0xc75e0c32d5cb7c0fa9d0a54b12a0a6d5647ab046d686da6fdffc90fc201d71a3',\n '0x29a6194691f91a73715209ef6512e576722830a201be2018a765e85a9ecee931',\n '0x2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f38e38d84',\n ],\n // yDen\n [\n '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffff93b',\n '0x7a06534bb8bdb49fd5e9e6632722c2989467c1bfc8e8d978dfb425d2685c2573',\n '0x6484aa716545ca2cf3a70c3fa8fe337e0a3d21162f0d6299a7bf8192bfd2a76f',\n '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n ],\n].map((i) => i.map((j) => BigInt(j)))))();\nconst mapSWU = /* @__PURE__ */ (() => (0, weierstrass_ts_1.mapToCurveSimpleSWU)(Fpk1, {\n A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),\n B: BigInt('1771'),\n Z: Fpk1.create(BigInt('-11')),\n}))();\n/** Hashing / encoding to secp256k1 points / field. RFC 9380 methods. */\nexports.secp256k1_hasher = (() => (0, hash_to_curve_ts_1.createHasher)(exports.secp256k1.Point, (scalars) => {\n const { x, y } = mapSWU(Fpk1.create(scalars[0]));\n return isoMap(x, y);\n}, {\n DST: 'secp256k1_XMD:SHA-256_SSWU_RO_',\n encodeDST: 'secp256k1_XMD:SHA-256_SSWU_NU_',\n p: Fpk1.ORDER,\n m: 1,\n k: 128,\n expand: 'xmd',\n hash: sha2_js_1.sha256,\n}))();\n/** @deprecated use `import { secp256k1_hasher } from '@noble/curves/secp256k1.js';` */\nexports.hashToCurve = (() => exports.secp256k1_hasher.hashToCurve)();\n/** @deprecated use `import { secp256k1_hasher } from '@noble/curves/secp256k1.js';` */\nexports.encodeToCurve = (() => exports.secp256k1_hasher.encodeToCurve)();\n//# sourceMappingURL=secp256k1.js.map",
|
|
42
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeHex = exports.remove0x = void 0;\nvar utils_1 = require(\"@noble/ciphers/utils\");\nvar remove0x = function (hex) {\n return hex.startsWith(\"0x\") || hex.startsWith(\"0X\") ? hex.slice(2) : hex;\n};\nexports.remove0x = remove0x;\nvar decodeHex = function (hex) { return (0, utils_1.hexToBytes)((0, exports.remove0x)(hex)); };\nexports.decodeHex = decodeHex;\n",
|
|
43
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hexToPublicKey = exports.convertPublicKeyFormat = exports.getSharedPoint = exports.getPublicKey = exports.isValidPrivateKey = exports.getValidSecret = void 0;\nvar webcrypto_1 = require(\"@noble/ciphers/webcrypto\");\nvar ed25519_1 = require(\"@noble/curves/ed25519\");\nvar secp256k1_1 = require(\"@noble/curves/secp256k1\");\nvar config_1 = require(\"../config\");\nvar consts_1 = require(\"../consts\");\nvar hex_1 = require(\"./hex\");\nvar getValidSecret = function (curve) {\n var key;\n do {\n key = (0, webcrypto_1.randomBytes)(consts_1.SECRET_KEY_LENGTH);\n } while (!(0, exports.isValidPrivateKey)(key, curve));\n return key;\n};\nexports.getValidSecret = getValidSecret;\nvar isValidPrivateKey = function (secret, curve) {\n // on secp256k1: only key ∈ (0, group order) is valid\n // on curve25519: any 32-byte key is valid\n return _exec(curve, function (curve) { return curve.utils.isValidSecretKey(secret); }, function () { return true; }, function () { return true; });\n};\nexports.isValidPrivateKey = isValidPrivateKey;\nvar getPublicKey = function (secret, curve) {\n return _exec(curve, function (curve) { return curve.getPublicKey(secret); }, function (curve) { return curve.getPublicKey(secret); }, function (curve) { return curve.getPublicKey(secret); });\n};\nexports.getPublicKey = getPublicKey;\nvar getSharedPoint = function (sk, pk, compressed, curve) {\n return _exec(curve, function (curve) { return curve.getSharedSecret(sk, pk, compressed); }, function (curve) { return curve.getSharedSecret(sk, pk); }, function (curve) { return getSharedPointOnEd25519(curve, sk, pk); });\n};\nexports.getSharedPoint = getSharedPoint;\nvar convertPublicKeyFormat = function (pk, compressed, curve) {\n // only for secp256k1\n return _exec(curve, function (curve) {\n return curve.getSharedSecret(Uint8Array.from(Array(31).fill(0).concat([1])), // 1 as private key\n pk, compressed);\n }, function () { return pk; }, function () { return pk; });\n};\nexports.convertPublicKeyFormat = convertPublicKeyFormat;\nvar hexToPublicKey = function (hex, curve) {\n var decoded = (0, hex_1.decodeHex)(hex);\n return _exec(curve, function () { return compatEthPublicKey(decoded); }, function () { return decoded; }, function () { return decoded; });\n};\nexports.hexToPublicKey = hexToPublicKey;\nfunction _exec(curve, secp256k1Callback, x25519Callback, ed25519Callback) {\n var _curve = curve || (0, config_1.ellipticCurve)(); // TODO: remove after 0.5.0\n if (_curve === \"secp256k1\") {\n return secp256k1Callback(secp256k1_1.secp256k1);\n }\n else if (_curve === \"x25519\") {\n return x25519Callback(ed25519_1.x25519);\n }\n else if (_curve === \"ed25519\") {\n return ed25519Callback(ed25519_1.ed25519);\n } /* v8 ignore next 2 */\n else {\n throw new Error(\"Not implemented\");\n }\n}\nvar compatEthPublicKey = function (pk) {\n if (pk.length === consts_1.ETH_PUBLIC_KEY_SIZE) {\n var fixed = new Uint8Array(1 + pk.length);\n fixed.set([0x04]);\n fixed.set(pk, 1);\n return fixed;\n }\n return pk;\n};\nvar getSharedPointOnEd25519 = function (curve, sk, pk) {\n // Note: scalar is hashed from sk\n var scalar = curve.utils.getExtendedPublicKey(sk).scalar;\n var point = curve.Point.fromBytes(pk).multiply(scalar);\n return point.toBytes();\n};\n",
|
|
44
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hkdf = void 0;\nexports.extract = extract;\nexports.expand = expand;\n/**\n * HKDF (RFC 5869): extract + expand in one step.\n * See https://soatok.blog/2021/11/17/understanding-hkdf/.\n * @module\n */\nconst hmac_ts_1 = require(\"./hmac.js\");\nconst utils_ts_1 = require(\"./utils.js\");\n/**\n * HKDF-extract from spec. Less important part. `HKDF-Extract(IKM, salt) -> PRK`\n * Arguments position differs from spec (IKM is first one, since it is not optional)\n * @param hash - hash function that would be used (e.g. sha256)\n * @param ikm - input keying material, the initial key\n * @param salt - optional salt value (a non-secret random value)\n */\nfunction extract(hash, ikm, salt) {\n (0, utils_ts_1.ahash)(hash);\n // NOTE: some libraries treat zero-length array as 'not provided';\n // we don't, since we have undefined as 'not provided'\n // https://github.com/RustCrypto/KDFs/issues/15\n if (salt === undefined)\n salt = new Uint8Array(hash.outputLen);\n return (0, hmac_ts_1.hmac)(hash, (0, utils_ts_1.toBytes)(salt), (0, utils_ts_1.toBytes)(ikm));\n}\nconst HKDF_COUNTER = /* @__PURE__ */ Uint8Array.from([0]);\nconst EMPTY_BUFFER = /* @__PURE__ */ Uint8Array.of();\n/**\n * HKDF-expand from the spec. The most important part. `HKDF-Expand(PRK, info, L) -> OKM`\n * @param hash - hash function that would be used (e.g. sha256)\n * @param prk - a pseudorandom key of at least HashLen octets (usually, the output from the extract step)\n * @param info - optional context and application specific information (can be a zero-length string)\n * @param length - length of output keying material in bytes\n */\nfunction expand(hash, prk, info, length = 32) {\n (0, utils_ts_1.ahash)(hash);\n (0, utils_ts_1.anumber)(length);\n const olen = hash.outputLen;\n if (length > 255 * olen)\n throw new Error('Length should be <= 255*HashLen');\n const blocks = Math.ceil(length / olen);\n if (info === undefined)\n info = EMPTY_BUFFER;\n // first L(ength) octets of T\n const okm = new Uint8Array(blocks * olen);\n // Re-use HMAC instance between blocks\n const HMAC = hmac_ts_1.hmac.create(hash, prk);\n const HMACTmp = HMAC._cloneInto();\n const T = new Uint8Array(HMAC.outputLen);\n for (let counter = 0; counter < blocks; counter++) {\n HKDF_COUNTER[0] = counter + 1;\n // T(0) = empty string (zero length)\n // T(N) = HMAC-Hash(PRK, T(N-1) | info | N)\n HMACTmp.update(counter === 0 ? EMPTY_BUFFER : T)\n .update(info)\n .update(HKDF_COUNTER)\n .digestInto(T);\n okm.set(T, olen * counter);\n HMAC._cloneInto(HMACTmp);\n }\n HMAC.destroy();\n HMACTmp.destroy();\n (0, utils_ts_1.clean)(T, HKDF_COUNTER);\n return okm.slice(0, length);\n}\n/**\n * HKDF (RFC 5869): derive keys from an initial input.\n * Combines hkdf_extract + hkdf_expand in one step\n * @param hash - hash function that would be used (e.g. sha256)\n * @param ikm - input keying material, the initial key\n * @param salt - optional salt value (a non-secret random value)\n * @param info - optional context and application specific information (can be a zero-length string)\n * @param length - length of output keying material in bytes\n * @example\n * import { hkdf } from '@noble/hashes/hkdf';\n * import { sha256 } from '@noble/hashes/sha2';\n * import { randomBytes } from '@noble/hashes/utils';\n * const inputKey = randomBytes(32);\n * const salt = randomBytes(32);\n * const info = 'application-key';\n * const hk1 = hkdf(sha256, inputKey, salt, info, 32);\n */\nconst hkdf = (hash, ikm, salt, info, length) => expand(hash, extract(hash, ikm, salt), info, length);\nexports.hkdf = hkdf;\n//# sourceMappingURL=hkdf.js.map",
|
|
45
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getSharedKey = exports.deriveKey = void 0;\nvar utils_1 = require(\"@noble/ciphers/utils\");\nvar hkdf_1 = require(\"@noble/hashes/hkdf\");\nvar sha2_1 = require(\"@noble/hashes/sha2\");\nvar deriveKey = function (master, salt, info) {\n // 32 bytes shared secret for aes256 and xchacha20 derived from HKDF-SHA256\n return (0, hkdf_1.hkdf)(sha2_1.sha256, master, salt, info, 32);\n};\nexports.deriveKey = deriveKey;\nvar getSharedKey = function () {\n var parts = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n parts[_i] = arguments[_i];\n }\n return (0, exports.deriveKey)(utils_1.concatBytes.apply(void 0, parts));\n};\nexports.getSharedKey = getSharedKey;\n",
|
|
46
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports._compat = void 0;\n// biome-ignore-all lint/suspicious/noExplicitAny: hide type error\nvar node_crypto_1 = require(\"node:crypto\");\nvar utils_1 = require(\"@noble/ciphers/utils\");\nvar AEAD_TAG_LENGTH = 16;\n// @ts-expect-error: only necessary for deno\nvar IS_DENO = globalThis.Deno !== undefined;\n/**\n * make `node:crypto`'s ciphers compatible with `@noble/ciphers`.\n *\n * `Cipher`'s interface is the same for both `aes-256-gcm` and `chacha20-poly1305`,\n * albeit the latter is one of `CipherCCMTypes`.\n * Interestingly, whether to set `plaintextLength` or not, or which value to set, has no actual effect.\n */\nvar _compat = function (algorithm, key, nonce, AAD) {\n var isAEAD = algorithm === \"aes-256-gcm\" || algorithm === \"chacha20-poly1305\";\n var authTagLength = isAEAD ? AEAD_TAG_LENGTH : 0;\n // authTagLength is necessary for `chacha20-poly1305` before Node v16.17\n var options = isAEAD ? { authTagLength: authTagLength } : undefined;\n var encrypt = function (plainText) {\n var cipher = (0, node_crypto_1.createCipheriv)(algorithm, key, nonce, options);\n if (isAEAD && AAD !== undefined) {\n cipher.setAAD(AAD);\n }\n var updated = cipher.update(plainText);\n var finalized = cipher.final();\n var tag = isAEAD ? cipher.getAuthTag() : new Uint8Array(0);\n return (0, utils_1.concatBytes)(updated, finalized, tag);\n };\n var decrypt = function (cipherText) {\n var rawCipherText = cipherText.subarray(0, cipherText.length - authTagLength);\n var tag = cipherText.subarray(cipherText.length - authTagLength);\n var decipher = (0, node_crypto_1.createDecipheriv)(algorithm, key, nonce, options);\n if (isAEAD) {\n if (AAD !== undefined) {\n decipher.setAAD(AAD);\n }\n decipher.setAuthTag(tag);\n }\n /* v8 ignore if -- @preserve */\n if (!isAEAD && IS_DENO) {\n decipher.setAutoPadding(false); // See: https://github.com/denoland/deno/issues/28381\n }\n var updated = decipher.update(rawCipherText);\n var finalized = decipher.final();\n return (0, utils_1.concatBytes)(updated, finalized);\n };\n return {\n encrypt: encrypt,\n decrypt: decrypt,\n };\n};\nexports._compat = _compat;\n",
|
|
47
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.aes256cbc = exports.aes256gcm = void 0;\nvar compat_js_1 = require(\"../_node/compat.js\");\nvar aes256gcm = function (key, nonce, AAD) {\n return (0, compat_js_1._compat)(\"aes-256-gcm\", key, nonce, AAD);\n};\nexports.aes256gcm = aes256gcm;\nvar aes256cbc = function (key, nonce, _AAD) {\n return (0, compat_js_1._compat)(\"aes-256-cbc\", key, nonce);\n};\nexports.aes256cbc = aes256cbc;\n",
|
|
48
|
-
"\"use strict\";\n// biome-ignore-all format lint: copied code\n// prettier-ignore\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports._hchacha20 = void 0;\n/**\n * Copied from `@noble/ciphers/chacha`\n */\nvar _hchacha20 = function (s, k, i, o32) {\n var x00 = s[0], x01 = s[1], x02 = s[2], x03 = s[3], x04 = k[0], x05 = k[1], x06 = k[2], x07 = k[3], x08 = k[4], x09 = k[5], x10 = k[6], x11 = k[7], x12 = i[0], x13 = i[1], x14 = i[2], x15 = i[3];\n for (var r = 0; r < 20; r += 2) {\n x00 = (x00 + x04) | 0;\n x12 = rotl(x12 ^ x00, 16);\n x08 = (x08 + x12) | 0;\n x04 = rotl(x04 ^ x08, 12);\n x00 = (x00 + x04) | 0;\n x12 = rotl(x12 ^ x00, 8);\n x08 = (x08 + x12) | 0;\n x04 = rotl(x04 ^ x08, 7);\n x01 = (x01 + x05) | 0;\n x13 = rotl(x13 ^ x01, 16);\n x09 = (x09 + x13) | 0;\n x05 = rotl(x05 ^ x09, 12);\n x01 = (x01 + x05) | 0;\n x13 = rotl(x13 ^ x01, 8);\n x09 = (x09 + x13) | 0;\n x05 = rotl(x05 ^ x09, 7);\n x02 = (x02 + x06) | 0;\n x14 = rotl(x14 ^ x02, 16);\n x10 = (x10 + x14) | 0;\n x06 = rotl(x06 ^ x10, 12);\n x02 = (x02 + x06) | 0;\n x14 = rotl(x14 ^ x02, 8);\n x10 = (x10 + x14) | 0;\n x06 = rotl(x06 ^ x10, 7);\n x03 = (x03 + x07) | 0;\n x15 = rotl(x15 ^ x03, 16);\n x11 = (x11 + x15) | 0;\n x07 = rotl(x07 ^ x11, 12);\n x03 = (x03 + x07) | 0;\n x15 = rotl(x15 ^ x03, 8);\n x11 = (x11 + x15) | 0;\n x07 = rotl(x07 ^ x11, 7);\n x00 = (x00 + x05) | 0;\n x15 = rotl(x15 ^ x00, 16);\n x10 = (x10 + x15) | 0;\n x05 = rotl(x05 ^ x10, 12);\n x00 = (x00 + x05) | 0;\n x15 = rotl(x15 ^ x00, 8);\n x10 = (x10 + x15) | 0;\n x05 = rotl(x05 ^ x10, 7);\n x01 = (x01 + x06) | 0;\n x12 = rotl(x12 ^ x01, 16);\n x11 = (x11 + x12) | 0;\n x06 = rotl(x06 ^ x11, 12);\n x01 = (x01 + x06) | 0;\n x12 = rotl(x12 ^ x01, 8);\n x11 = (x11 + x12) | 0;\n x06 = rotl(x06 ^ x11, 7);\n x02 = (x02 + x07) | 0;\n x13 = rotl(x13 ^ x02, 16);\n x08 = (x08 + x13) | 0;\n x07 = rotl(x07 ^ x08, 12);\n x02 = (x02 + x07) | 0;\n x13 = rotl(x13 ^ x02, 8);\n x08 = (x08 + x13) | 0;\n x07 = rotl(x07 ^ x08, 7);\n x03 = (x03 + x04) | 0;\n x14 = rotl(x14 ^ x03, 16);\n x09 = (x09 + x14) | 0;\n x04 = rotl(x04 ^ x09, 12);\n x03 = (x03 + x04) | 0;\n x14 = rotl(x14 ^ x03, 8);\n x09 = (x09 + x14) | 0;\n x04 = rotl(x04 ^ x09, 7);\n }\n var oi = 0;\n o32[oi++] = x00;\n o32[oi++] = x01;\n o32[oi++] = x02;\n o32[oi++] = x03;\n o32[oi++] = x12;\n o32[oi++] = x13;\n o32[oi++] = x14;\n o32[oi++] = x15;\n};\nexports._hchacha20 = _hchacha20;\nvar rotl = function (a, b) {\n return (a << b) | (a >>> (32 - b));\n};\n",
|
|
49
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.chacha20 = exports.xchacha20 = void 0;\nvar utils_1 = require(\"@noble/ciphers/utils\");\nvar compat_js_1 = require(\"../_node/compat.js\");\nvar hchacha_js_1 = require(\"../_node/hchacha.js\");\nvar xchacha20 = function (key, nonce, AAD) {\n if (nonce.length !== 24) {\n throw new Error(\"xchacha20's nonce must be 24 bytes\");\n }\n var constants = new Uint32Array([0x61707865, 0x3320646e, 0x79622d32, 0x6b206574]); // \"expand 32-byte k\"\n var subKey = new Uint32Array(8);\n (0, hchacha_js_1._hchacha20)(constants, (0, utils_1.u32)(key), (0, utils_1.u32)(nonce.subarray(0, 16)), subKey);\n var subNonce = new Uint8Array(12);\n subNonce.set([0, 0, 0, 0]);\n subNonce.set(nonce.subarray(16), 4);\n return (0, compat_js_1._compat)(\"chacha20-poly1305\", (0, utils_1.u8)(subKey), subNonce, AAD);\n};\nexports.xchacha20 = xchacha20;\nvar chacha20 = function (key, nonce, AAD) {\n if (nonce.length !== 12) {\n throw new Error(\"chacha20's nonce must be 12 bytes\");\n }\n return (0, compat_js_1._compat)(\"chacha20-poly1305\", key, nonce, AAD);\n};\nexports.chacha20 = chacha20;\n",
|
|
50
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.aesDecrypt = exports.aesEncrypt = exports.symDecrypt = exports.symEncrypt = void 0;\nvar aes_1 = require(\"@ecies/ciphers/aes\");\nvar chacha_1 = require(\"@ecies/ciphers/chacha\");\nvar utils_1 = require(\"@noble/ciphers/utils\");\nvar webcrypto_1 = require(\"@noble/ciphers/webcrypto\");\nvar config_1 = require(\"../config\");\nvar consts_1 = require(\"../consts\");\nvar symEncrypt = function (key, plainText, AAD) { return _exec(_encrypt, key, plainText, AAD); };\nexports.symEncrypt = symEncrypt;\nvar symDecrypt = function (key, cipherText, AAD) { return _exec(_decrypt, key, cipherText, AAD); };\nexports.symDecrypt = symDecrypt;\n/** @deprecated - use `symEncrypt` instead. */\nexports.aesEncrypt = exports.symEncrypt; // TODO: delete\n/** @deprecated - use `symDecrypt` instead. */\nexports.aesDecrypt = exports.symDecrypt; // TODO: delete\nfunction _exec(callback, key, data, AAD) {\n var algorithm = (0, config_1.symmetricAlgorithm)();\n if (algorithm === \"aes-256-gcm\") {\n return callback(aes_1.aes256gcm, key, data, (0, config_1.symmetricNonceLength)(), consts_1.AEAD_TAG_LENGTH, AAD);\n }\n else if (algorithm === \"xchacha20\") {\n return callback(chacha_1.xchacha20, key, data, consts_1.XCHACHA20_NONCE_LENGTH, consts_1.AEAD_TAG_LENGTH, AAD);\n }\n else if (algorithm === \"aes-256-cbc\") {\n // NOT RECOMMENDED. There is neither AAD nor AEAD tag in cbc mode\n // aes-256-cbc always uses 16 bytes iv\n return callback(aes_1.aes256cbc, key, data, 16, 0);\n }\n else {\n throw new Error(\"Not implemented\");\n }\n}\nfunction _encrypt(func, key, data, nonceLength, tagLength, AAD) {\n var nonce = (0, webcrypto_1.randomBytes)(nonceLength);\n var cipher = func(key, nonce, AAD);\n // @noble/ciphers format: cipherText || tag\n var encrypted = cipher.encrypt(data);\n if (tagLength === 0) {\n return (0, utils_1.concatBytes)(nonce, encrypted);\n }\n var cipherTextLength = encrypted.length - tagLength;\n var cipherText = encrypted.subarray(0, cipherTextLength);\n var tag = encrypted.subarray(cipherTextLength);\n // ecies payload format: pk || nonce || tag || cipherText\n return (0, utils_1.concatBytes)(nonce, tag, cipherText);\n}\nfunction _decrypt(func, key, data, nonceLength, tagLength, AAD) {\n var nonce = data.subarray(0, nonceLength);\n var cipher = func(key, Uint8Array.from(nonce), AAD); // to reset byteOffset\n var encrypted = data.subarray(nonceLength);\n if (tagLength === 0) {\n return cipher.decrypt(encrypted);\n }\n var tag = encrypted.subarray(0, tagLength);\n var cipherText = encrypted.subarray(tagLength);\n return cipher.decrypt((0, utils_1.concatBytes)(cipherText, tag));\n}\n",
|
|
51
|
-
"\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./elliptic\"), exports);\n__exportStar(require(\"./hash\"), exports);\n__exportStar(require(\"./hex\"), exports);\n__exportStar(require(\"./symmetric\"), exports);\n",
|
|
52
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PublicKey = void 0;\nvar utils_1 = require(\"@noble/ciphers/utils\");\nvar utils_2 = require(\"../utils\");\nvar PublicKey = /** @class */ (function () {\n function PublicKey(data, curve) {\n // data can be either compressed or uncompressed if secp256k1\n var compressed = (0, utils_2.convertPublicKeyFormat)(data, true, curve);\n var uncompressed = (0, utils_2.convertPublicKeyFormat)(data, false, curve);\n this.data = compressed;\n this.dataUncompressed =\n compressed.length !== uncompressed.length ? uncompressed : null;\n }\n PublicKey.fromHex = function (hex, curve) {\n return new PublicKey((0, utils_2.hexToPublicKey)(hex, curve), curve);\n };\n Object.defineProperty(PublicKey.prototype, \"_uncompressed\", {\n get: function () {\n return this.dataUncompressed !== null ? this.dataUncompressed : this.data;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PublicKey.prototype, \"uncompressed\", {\n /** @deprecated - use `PublicKey.toBytes(false)` instead. You may also need `Buffer.from`. */\n get: function () {\n return Buffer.from(this._uncompressed); // TODO: delete\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PublicKey.prototype, \"compressed\", {\n /** @deprecated - use `PublicKey.toBytes()` instead. You may also need `Buffer.from`. */\n get: function () {\n return Buffer.from(this.data); // TODO: delete\n },\n enumerable: false,\n configurable: true\n });\n PublicKey.prototype.toBytes = function (compressed) {\n if (compressed === void 0) { compressed = true; }\n return compressed ? this.data : this._uncompressed;\n };\n PublicKey.prototype.toHex = function (compressed) {\n if (compressed === void 0) { compressed = true; }\n return (0, utils_1.bytesToHex)(this.toBytes(compressed));\n };\n /**\n * Derives a shared secret from receiver's private key (sk) and ephemeral public key (this).\n * Opposite of `encapsulate`.\n * @see PrivateKey.encapsulate\n *\n * @param sk - Receiver's private key.\n * @param compressed - (default: `false`) Whether to use compressed or uncompressed public keys in the key derivation (secp256k1 only).\n * @returns Shared secret, derived with HKDF-SHA256.\n */\n PublicKey.prototype.decapsulate = function (sk, compressed) {\n if (compressed === void 0) { compressed = false; }\n var senderPoint = this.toBytes(compressed);\n var sharedPoint = sk.multiply(this, compressed);\n return (0, utils_2.getSharedKey)(senderPoint, sharedPoint);\n };\n PublicKey.prototype.equals = function (other) {\n return (0, utils_1.equalBytes)(this.data, other.data);\n };\n return PublicKey;\n}());\nexports.PublicKey = PublicKey;\n",
|
|
53
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PrivateKey = void 0;\nvar utils_1 = require(\"@noble/ciphers/utils\");\nvar utils_2 = require(\"../utils\");\nvar PublicKey_1 = require(\"./PublicKey\");\nvar PrivateKey = /** @class */ (function () {\n function PrivateKey(secret, curve) {\n this.curve = curve;\n if (secret === undefined) {\n this.data = (0, utils_2.getValidSecret)(curve);\n }\n else if ((0, utils_2.isValidPrivateKey)(secret, curve)) {\n this.data = secret;\n }\n else {\n throw new Error(\"Invalid private key\");\n }\n this.publicKey = new PublicKey_1.PublicKey((0, utils_2.getPublicKey)(this.data, curve), curve);\n }\n PrivateKey.fromHex = function (hex, curve) {\n return new PrivateKey((0, utils_2.decodeHex)(hex), curve);\n };\n Object.defineProperty(PrivateKey.prototype, \"secret\", {\n /** @description From version 0.5.0, `Uint8Array` will be returned instead of `Buffer`. */\n get: function () {\n // TODO: Uint8Array\n return Buffer.from(this.data);\n },\n enumerable: false,\n configurable: true\n });\n PrivateKey.prototype.toHex = function () {\n return (0, utils_1.bytesToHex)(this.data);\n };\n /**\n * Derives a shared secret from ephemeral private key (this) and receiver's public key (pk).\n * @description The shared key is 32 bytes, derived with `HKDF-SHA256(senderPoint || sharedPoint)`. See implementation for details.\n *\n * There are some variations in different ECIES implementations:\n * which key derivation function to use, compressed or uncompressed `senderPoint`/`sharedPoint`, whether to include `senderPoint`, etc.\n *\n * Because the entropy of `senderPoint`, `sharedPoint` is enough high[1], we don't need salt to derive keys.\n *\n * [1]: Two reasons: the public keys are \"random\" bytes (albeit secp256k1 public keys are **not uniformly** random), and ephemeral keys are generated in every encryption.\n *\n * @param pk - Receiver's public key.\n * @param compressed - (default: `false`) Whether to use compressed or uncompressed public keys in the key derivation (secp256k1 only).\n * @returns Shared secret, derived with HKDF-SHA256.\n */\n PrivateKey.prototype.encapsulate = function (pk, compressed) {\n if (compressed === void 0) { compressed = false; }\n var senderPoint = this.publicKey.toBytes(compressed);\n var sharedPoint = this.multiply(pk, compressed);\n return (0, utils_2.getSharedKey)(senderPoint, sharedPoint);\n };\n PrivateKey.prototype.multiply = function (pk, compressed) {\n if (compressed === void 0) { compressed = false; }\n return (0, utils_2.getSharedPoint)(this.data, pk.toBytes(true), compressed, this.curve);\n };\n PrivateKey.prototype.equals = function (other) {\n return (0, utils_1.equalBytes)(this.data, other.data);\n };\n return PrivateKey;\n}());\nexports.PrivateKey = PrivateKey;\n",
|
|
54
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PublicKey = exports.PrivateKey = void 0;\n// treat Buffer as Uint8array, i.e. no call of Buffer specific functions\n// finally Uint8Array only\nvar PrivateKey_1 = require(\"./PrivateKey\");\nObject.defineProperty(exports, \"PrivateKey\", { enumerable: true, get: function () { return PrivateKey_1.PrivateKey; } });\nvar PublicKey_1 = require(\"./PublicKey\");\nObject.defineProperty(exports, \"PublicKey\", { enumerable: true, get: function () { return PublicKey_1.PublicKey; } });\n",
|
|
55
|
-
"\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.utils = exports.PublicKey = exports.PrivateKey = exports.ECIES_CONFIG = void 0;\nexports.encrypt = encrypt;\nexports.decrypt = decrypt;\nvar utils_1 = require(\"@noble/ciphers/utils\");\nvar config_1 = require(\"./config\");\nvar keys_1 = require(\"./keys\");\nvar utils_2 = require(\"./utils\");\n/**\n * Encrypts data with a receiver's public key.\n * @description From version 0.5.0, `Uint8Array` will be returned instead of `Buffer`.\n * To keep the same behavior, use `Buffer.from(encrypt(...))`.\n *\n * @param receiverRawPK - Raw public key of the receiver, either as a hex `string` or a `Uint8Array`.\n * @param data - Data to encrypt.\n * @returns Encrypted payload, format: `public key || encrypted`.\n */\nfunction encrypt(receiverRawPK, data) {\n return Buffer.from(_encrypt(receiverRawPK, data));\n}\nfunction _encrypt(receiverRawPK, data) {\n var curve = (0, config_1.ellipticCurve)();\n var ephemeralSK = new keys_1.PrivateKey(undefined, curve);\n var receiverPK = receiverRawPK instanceof Uint8Array\n ? new keys_1.PublicKey(receiverRawPK, curve)\n : keys_1.PublicKey.fromHex(receiverRawPK, curve);\n var sharedKey = ephemeralSK.encapsulate(receiverPK, (0, config_1.isHkdfKeyCompressed)());\n var ephemeralPK = ephemeralSK.publicKey.toBytes((0, config_1.isEphemeralKeyCompressed)());\n var encrypted = (0, utils_2.symEncrypt)(sharedKey, data);\n return (0, utils_1.concatBytes)(ephemeralPK, encrypted);\n}\n/**\n * Decrypts data with a receiver's private key.\n * @description From version 0.5.0, `Uint8Array` will be returned instead of `Buffer`.\n * To keep the same behavior, use `Buffer.from(decrypt(...))`.\n *\n * @param receiverRawSK - Raw private key of the receiver, either as a hex `string` or a `Uint8Array`.\n * @param data - Data to decrypt.\n * @returns Decrypted plain text.\n */\nfunction decrypt(receiverRawSK, data) {\n return Buffer.from(_decrypt(receiverRawSK, data));\n}\nfunction _decrypt(receiverRawSK, data) {\n var curve = (0, config_1.ellipticCurve)();\n var receiverSK = receiverRawSK instanceof Uint8Array\n ? new keys_1.PrivateKey(receiverRawSK, curve)\n : keys_1.PrivateKey.fromHex(receiverRawSK, curve);\n var keySize = (0, config_1.ephemeralKeySize)();\n var ephemeralPK = new keys_1.PublicKey(data.subarray(0, keySize), curve);\n var encrypted = data.subarray(keySize);\n var sharedKey = ephemeralPK.decapsulate(receiverSK, (0, config_1.isHkdfKeyCompressed)());\n return (0, utils_2.symDecrypt)(sharedKey, encrypted);\n}\nvar config_2 = require(\"./config\");\nObject.defineProperty(exports, \"ECIES_CONFIG\", { enumerable: true, get: function () { return config_2.ECIES_CONFIG; } });\nvar keys_2 = require(\"./keys\");\nObject.defineProperty(exports, \"PrivateKey\", { enumerable: true, get: function () { return keys_2.PrivateKey; } });\nObject.defineProperty(exports, \"PublicKey\", { enumerable: true, get: function () { return keys_2.PublicKey; } });\n/** @deprecated - use `import utils from \"eciesjs/utils\"` instead. */\nexports.utils = {\n // TODO: remove these after 0.5.0\n aesEncrypt: utils_2.aesEncrypt,\n aesDecrypt: utils_2.aesDecrypt,\n symEncrypt: utils_2.symEncrypt,\n symDecrypt: utils_2.symDecrypt,\n decodeHex: utils_2.decodeHex,\n getValidSecret: utils_2.getValidSecret,\n remove0x: utils_2.remove0x,\n};\n",
|
|
56
|
-
"function truncate (str, showChar = 7) {\n if (str && str.length > 0) {\n const visiblePart = str.slice(0, showChar)\n return visiblePart + '…'\n } else {\n return ''\n }\n}\n\nmodule.exports = truncate\n",
|
|
57
|
-
"const truncate = require('./truncate')\n\nclass Errors {\n constructor (options = {}) {\n this.filepath = options.filepath\n this.envFilepath = options.envFilepath\n\n this.key = options.key\n this.privateKey = options.privateKey\n this.privateKeyName = options.privateKeyName\n this.command = options.command\n\n this.message = options.message\n }\n\n missingEnvFile () {\n const code = 'MISSING_ENV_FILE'\n const message = `[${code}] missing ${this.envFilepath} file (${this.filepath})`\n const help = `[${code}] https://github.com/dotenvx/dotenvx/issues/484`\n\n const e = new Error(message)\n e.code = code\n e.help = help\n return e\n }\n\n missingKey () {\n const code = 'MISSING_KEY'\n const message = `[${code}] missing ${this.key} key`\n\n const e = new Error(message)\n e.code = code\n return e\n }\n\n missingPrivateKey () {\n const code = 'MISSING_PRIVATE_KEY'\n const message = `[${code}] could not decrypt ${this.key} using private key '${this.privateKeyName}=${truncate(this.privateKey)}'`\n const help = `[${code}] https://github.com/dotenvx/dotenvx/issues/464`\n\n const e = new Error(message)\n e.code = code\n e.help = help\n return e\n }\n\n invalidPrivateKey () {\n const code = 'INVALID_PRIVATE_KEY'\n const message = `[${code}] could not decrypt ${this.key} using private key '${this.privateKeyName}=${truncate(this.privateKey)}'`\n const help = `[${code}] https://github.com/dotenvx/dotenvx/issues/465`\n\n const e = new Error(message)\n e.code = code\n e.help = help\n return e\n }\n\n looksWrongPrivateKey () {\n const code = 'WRONG_PRIVATE_KEY'\n const message = `[${code}] could not decrypt ${this.key} using private key '${this.privateKeyName}=${truncate(this.privateKey)}'`\n const help = `[${code}] https://github.com/dotenvx/dotenvx/issues/466`\n\n const e = new Error(message)\n e.code = code\n e.help = help\n return e\n }\n\n malformedEncryptedData () {\n const code = 'MALFORMED_ENCRYPTED_DATA'\n const message = `[${code}] could not decrypt ${this.key} because encrypted data appears malformed`\n const help = `[${code}] https://github.com/dotenvx/dotenvx/issues/467`\n\n const e = new Error(message)\n e.code = code\n e.help = help\n return e\n }\n\n decryptionFailed () {\n const code = 'DECRYPTION_FAILED'\n const message = this.message\n\n const e = new Error(message)\n e.code = code\n return e\n }\n\n commandSubstitutionFailed () {\n const code = 'COMMAND_SUBSTITUTION_FAILED'\n const message = `[${code}] could not eval ${this.key} containing command '${this.command}': ${this.message}`\n const help = `[${code}] https://github.com/dotenvx/dotenvx/issues/532`\n\n const e = new Error(message)\n e.code = code\n e.help = help\n return e\n }\n\n dangerousDependencyHoist () {\n const code = 'DANGEROUS_DEPENDENCY_HOIST'\n const message = `[${code}] your environment has hoisted an incompatible version of a dotenvx dependency: ${this.message}`\n const help = `[${code}] https://github.com/dotenvx/dotenvx/issues/622`\n\n const e = new Error(message)\n e.code = code\n e.help = help\n return e\n }\n}\n\nmodule.exports = Errors\n",
|
|
58
|
-
"const { decrypt } = require('eciesjs')\n\nconst Errors = require('./errors')\n\nconst PREFIX = 'encrypted:'\n\nfunction decryptKeyValue (key, value, privateKeyName, privateKey) {\n let decryptedValue\n let decryptionError\n\n if (!value.startsWith(PREFIX)) {\n return value\n }\n\n privateKey = privateKey || ''\n if (privateKey.length <= 0) {\n decryptionError = new Errors({ key, privateKeyName, privateKey }).missingPrivateKey()\n } else {\n const privateKeys = privateKey.split(',')\n for (const privKey of privateKeys) {\n const secret = Buffer.from(privKey, 'hex')\n const encoded = value.substring(PREFIX.length)\n const ciphertext = Buffer.from(encoded, 'base64')\n\n try {\n decryptedValue = decrypt(secret, ciphertext).toString()\n decryptionError = null // reset to null error (scenario for multiple private keys)\n break\n } catch (e) {\n if (e.message === 'Invalid private key') {\n decryptionError = new Errors({ key, privateKeyName, privateKey }).invalidPrivateKey()\n } else if (e.message === 'Unsupported state or unable to authenticate data') {\n decryptionError = new Errors({ key, privateKeyName, privateKey }).looksWrongPrivateKey()\n } else if (e.message === 'Point of length 65 was invalid. Expected 33 compressed bytes or 65 uncompressed bytes') {\n decryptionError = new Errors({ key, privateKeyName, privateKey }).malformedEncryptedData()\n } else {\n decryptionError = new Errors({ key, privateKeyName, privateKey, message: e.message }).decryptionFailed()\n }\n }\n }\n }\n\n if (decryptionError) {\n throw decryptionError\n }\n\n return decryptedValue\n}\n\nmodule.exports = decryptKeyValue\n",
|
|
59
|
-
"function chomp (value) {\n return value.replace(/[\\r\\n]+$/, '')\n}\n\nmodule.exports = chomp\n",
|
|
60
|
-
"const { execSync } = require('child_process')\nconst chomp = require('./chomp')\nconst Errors = require('./errors')\n\nfunction evalKeyValue (key, value, processEnv, runningParsed) {\n // Match everything between the outermost $() using a regex with non-capturing groups\n const matches = value.match(/\\$\\(([^)]+(?:\\)[^(]*)*)\\)/g) || []\n return matches.reduce((newValue, match) => {\n const command = match.slice(2, -1) // Extract command by removing $() wrapper\n let result\n\n try {\n result = execSync(command, { env: { ...processEnv, ...runningParsed } }).toString() // execute command (including runningParsed)\n } catch (e) {\n throw new Errors({ key, command, message: e.message.trim() }).commandSubstitutionFailed()\n }\n\n result = chomp(result) // chomp it\n return newValue.replace(match, result) // Replace match with result\n }, value)\n}\n\nmodule.exports = evalKeyValue\n",
|
|
61
|
-
"function resolveEscapeSequences (value) {\n return value.replace(/\\\\\\$/g, '$')\n}\n\nmodule.exports = resolveEscapeSequences\n",
|
|
62
|
-
"const decryptKeyValue = require('./decryptKeyValue')\nconst evalKeyValue = require('./evalKeyValue')\nconst resolveEscapeSequences = require('./resolveEscapeSequences')\n\nclass Parse {\n static LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\n constructor (src, privateKey = null, processEnv = process.env, overload = false, privateKeyName = null) {\n this.src = src\n this.privateKey = privateKey\n this.privateKeyName = privateKeyName\n this.processEnv = processEnv\n this.overload = overload\n\n this.parsed = {}\n this.preExisted = {}\n this.injected = {}\n this.errors = []\n\n // for use with progressive expansion\n this.runningParsed = {}\n // for use with stopping expansion for literals\n this.literals = {}\n }\n\n run () {\n const lines = this.getLines()\n\n let match\n while ((match = Parse.LINE.exec(lines)) !== null) {\n const key = match[1]\n const value = match[2]\n const quote = this.quote(value) // must be raw match\n this.parsed[key] = this.clean(value, quote) // file value\n\n if (!this.overload && this.inProcessEnv(key)) {\n this.parsed[key] = this.processEnv[key] // use process.env pre-existing value\n }\n\n // decrypt\n try {\n this.parsed[key] = this.decrypt(key, this.parsed[key])\n } catch (e) {\n this.errors.push(e)\n }\n\n // eval empty, double, or backticks\n let evaled = false\n if (quote !== \"'\" && (!this.inProcessEnv(key) || this.processEnv[key] === this.parsed[key])) {\n const priorEvaled = this.parsed[key]\n // eval\n try {\n this.parsed[key] = this.eval(key, priorEvaled)\n } catch (e) {\n this.errors.push(e)\n }\n if (priorEvaled !== this.parsed[key]) {\n evaled = true\n }\n }\n\n // expand empty, double, or backticks\n if (!evaled && quote !== \"'\" && (!this.processEnv[key] || this.overload)) {\n this.parsed[key] = resolveEscapeSequences(this.expand(this.parsed[key]))\n }\n\n if (quote === \"'\") {\n this.literals[key] = this.parsed[key]\n }\n\n // for use with progressive expansion\n this.runningParsed[key] = this.parsed[key]\n\n if (Object.prototype.hasOwnProperty.call(this.processEnv, key) && !this.overload) {\n this.preExisted[key] = this.processEnv[key] // track preExisted\n } else {\n this.injected[key] = this.parsed[key] // track injected\n }\n }\n\n return {\n parsed: this.parsed,\n processEnv: this.processEnv,\n injected: this.injected,\n preExisted: this.preExisted,\n errors: this.errors\n }\n }\n\n trimmer (value) {\n // Default undefined or null to empty string\n return (value || '').trim()\n }\n\n quote (value) {\n const v = this.trimmer(value)\n const maybeQuote = v[0]\n let q = ''\n switch (maybeQuote) {\n // single\n case \"'\":\n q = \"'\"\n break\n // double\n case '\"':\n q = '\"'\n break\n // backtick\n case '`':\n q = '`'\n break\n // empty\n default:\n q = ''\n }\n\n return q\n }\n\n clean (value, _quote) {\n let v = this.trimmer(value)\n\n // Remove surrounding quotes\n v = v.replace(/^(['\"`])([\\s\\S]*)\\1$/mg, '$2')\n\n // Expand newlines if double quoted\n if (_quote === '\"') {\n v = v.replace(/\\\\n/g, '\\n') // newline\n v = v.replace(/\\\\r/g, '\\r') // carriage return\n v = v.replace(/\\\\t/g, '\\t') // tabs\n }\n\n return v\n }\n\n decrypt (key, value) {\n return decryptKeyValue(key, value, this.privateKeyName, this.privateKey)\n }\n\n eval (key, value) {\n return evalKeyValue(key, value, this.processEnv, this.runningParsed)\n }\n\n expand (value) {\n let env = { ...this.runningParsed, ...this.processEnv } // typically process.env wins\n if (this.overload) {\n env = { ...this.processEnv, ...this.runningParsed } // parsed wins\n }\n\n const regex = /(?<!\\\\)\\${([^{}]+)}|(?<!\\\\)\\$([A-Za-z_][A-Za-z0-9_]*)/g\n\n let result = value\n let match\n\n while ((match = regex.exec(result)) !== null) {\n const [template, bracedExpression, unbracedExpression] = match\n const expression = bracedExpression || unbracedExpression\n\n // match the operators `:+`, `+`, `:-`, and `-`\n const opRegex = /(:\\+|\\+|:-|-)/\n // find first match\n const opMatch = expression.match(opRegex)\n const splitter = opMatch ? opMatch[0] : null\n\n const r = expression.split(splitter)\n\n let defaultValue\n let value\n const key = r.shift()\n\n if ([':+', '+'].includes(splitter)) {\n defaultValue = env[key] ? r.join(splitter) : ''\n value = null\n } else {\n defaultValue = r.join(splitter)\n value = env[key]\n }\n\n if (value) {\n result = result.replace(template, value)\n } else {\n result = result.replace(template, defaultValue)\n }\n\n // if the result equaled what was in env then stop expanding - handle self-referential check as well\n if (result === env[key]) {\n break\n }\n\n // if the result came from what was a literal value then stop expanding\n // BUT only if the literal value contains expansion patterns (${...} or $VAR)\n if (this.literals[key] && /\\$\\{[^}]+\\}|\\$[A-Za-z_][A-Za-z0-9_]*/.test(this.literals[key])) {\n break\n }\n\n regex.lastIndex = 0 // reset regex search position to re-evaluate after each replacement\n }\n\n return result\n }\n\n inProcessEnv (key) {\n return Object.prototype.hasOwnProperty.call(this.processEnv, key)\n }\n\n getLines () {\n return (this.src || '').toString().replace(/\\r\\n?/mg, '\\n') // Convert buffer to string and Convert line breaks to same format\n }\n}\n\nmodule.exports = Parse\n",
|
|
63
|
-
"// historical dotenv.parse - https://github.com/motdotla/dotenv)\nconst LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\nfunction dotenvParse (src, skipExpandForDoubleQuotes = false, skipConvertingWindowsNewlines = false, collectAllValues = false) {\n const obj = {}\n\n // Convert buffer to string\n let lines = src.toString()\n\n // Convert line breaks to same format\n if (!skipConvertingWindowsNewlines) {\n lines = lines.replace(/\\r\\n?/mg, '\\n')\n }\n\n let match\n while ((match = LINE.exec(lines)) != null) {\n const key = match[1]\n\n // Default undefined or null to empty string\n let value = (match[2] || '')\n\n // Remove whitespace\n value = value.trim()\n\n // Check if double quoted\n const maybeQuote = value[0]\n\n // Remove surrounding quotes\n value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/mg, '$2')\n\n // Expand newlines if double quoted\n if (maybeQuote === '\"' && !skipExpandForDoubleQuotes) {\n value = value.replace(/\\\\n/g, '\\n') // newline\n value = value.replace(/\\\\r/g, '\\r') // carriage return\n value = value.replace(/\\\\t/g, '\\t') // tabs\n }\n\n if (collectAllValues) {\n // handle scenario where user mistakenly includes plaintext duplicate in .env:\n //\n // # .env\n // HELLO=\"World\"\n // HELLO=\"encrypted:1234\"\n obj[key] = obj[key] || []\n obj[key].push(value)\n } else {\n // Add to object\n obj[key] = value\n }\n }\n\n return obj\n}\n\nmodule.exports = dotenvParse\n",
|
|
64
|
-
"function parseEnvironmentFromDotenvKey (dotenvKey) {\n // Parse DOTENV_KEY. Format is a URI\n let uri\n try {\n uri = new URL(dotenvKey)\n } catch (e) {\n throw new Error(`INVALID_DOTENV_KEY: ${e.message}`)\n }\n\n // Get environment\n const environment = uri.searchParams.get('environment')\n if (!environment) {\n throw new Error('INVALID_DOTENV_KEY: Missing environment part')\n }\n\n return environment\n}\n\nmodule.exports = parseEnvironmentFromDotenvKey\n",
|
|
65
|
-
"const fs = require('fs')\n\nfunction detectEncoding (filepath) {\n const buffer = fs.readFileSync(filepath)\n\n // check for UTF-16LE BOM (Byte Order Mark)\n if (buffer.length >= 2 && buffer[0] === 0xFF && buffer[1] === 0xFE) {\n return 'utf16le'\n }\n\n /* c8 ignore start */\n // check for UTF-8 BOM\n if (buffer.length >= 3 && buffer[0] === 0xEF && buffer[1] === 0xBB && buffer[2] === 0xBF) {\n return 'utf8'\n }\n\n /* c8 ignore stop */\n\n return 'utf8'\n}\n\nmodule.exports = detectEncoding\n",
|
|
66
|
-
"const path = require('path')\n\nfunction guessEnvironment (filepath) {\n const filename = path.basename(filepath)\n\n const parts = filename.split('.')\n const possibleEnvironmentList = [...parts.slice(2)]\n\n if (possibleEnvironmentList.length === 0) {\n // handle .env1 -> development1\n const environment = filename.replace('.env', 'development')\n\n return environment\n }\n\n if (possibleEnvironmentList.length === 1) {\n return possibleEnvironmentList[0]\n }\n\n if (\n possibleEnvironmentList.length === 2\n ) {\n return possibleEnvironmentList.join('_')\n }\n\n return possibleEnvironmentList.slice(0, 2).join('_')\n}\n\nmodule.exports = guessEnvironment\n",
|
|
67
|
-
"const path = require('path')\nconst guessEnvironment = require('./guessEnvironment')\n\nfunction guessPrivateKeyName (filepath) {\n const filename = path.basename(filepath).toLowerCase()\n\n // .env\n if (filename === '.env') {\n return 'DOTENV_PRIVATE_KEY'\n }\n\n // .env.ENVIRONMENT\n const environment = guessEnvironment(filename)\n\n return `DOTENV_PRIVATE_KEY_${environment.toUpperCase()}`\n}\n\nmodule.exports = guessPrivateKeyName\n",
|
|
68
|
-
"const path = require('path')\nconst guessEnvironment = require('./guessEnvironment')\n\nfunction guessPublicKeyName (filepath) {\n const filename = path.basename(filepath).toLowerCase()\n\n // .env\n if (filename === '.env') {\n return 'DOTENV_PUBLIC_KEY'\n }\n\n // .env.ENVIRONMENT\n const environment = guessEnvironment(filename)\n\n return `DOTENV_PUBLIC_KEY_${environment.toUpperCase()}`\n}\n\nmodule.exports = guessPublicKeyName\n",
|
|
69
|
-
"const path = require('path')\nconst childProcess = require('child_process')\n\nconst guessPrivateKeyName = require('./guessPrivateKeyName')\nconst guessPublicKeyName = require('./guessPublicKeyName')\n\nclass ProKeypair {\n constructor (envFilepath) {\n this.envFilepath = envFilepath\n }\n\n run () {\n let result = {}\n\n try {\n const fallbackBin = path.resolve(process.cwd(), 'node_modules/.bin/dotenvx-pro')\n const output = childProcess.execSync(`${fallbackBin} keypair -f ${this.envFilepath}`, { stdio: ['pipe', 'pipe', 'ignore'] }).toString().trim()\n result = JSON.parse(output)\n } catch (_e) {\n try {\n // if installed as binary cli\n const output = childProcess.execSync(`dotenvx-pro keypair -f ${this.envFilepath}`, { stdio: ['pipe', 'pipe', 'ignore'] }).toString().trim()\n\n result = JSON.parse(output)\n } catch (_e) {\n const privateKeyName = guessPrivateKeyName(this.envFilepath)\n const publicKeyName = guessPublicKeyName(this.envFilepath)\n\n // match format of dotenvx-pro\n result[privateKeyName] = null\n result[publicKeyName] = null\n }\n }\n\n return result\n }\n}\n\nmodule.exports = ProKeypair\n",
|
|
70
|
-
"const fsx = require('./fsx')\nconst dotenvParse = require('./dotenvParse')\n\nconst guessPublicKeyName = require('./guessPublicKeyName')\n\nfunction searchProcessEnv (publicKeyName) {\n if (process.env[publicKeyName] && process.env[publicKeyName].length > 0) {\n return process.env[publicKeyName]\n }\n}\n\nfunction searchEnvFile (publicKeyName, envFilepath) {\n if (fsx.existsSync(envFilepath)) {\n const keysSrc = fsx.readFileX(envFilepath)\n const keysParsed = dotenvParse(keysSrc)\n\n if (keysParsed[publicKeyName] && keysParsed[publicKeyName].length > 0) {\n return keysParsed[publicKeyName]\n }\n }\n}\n\nfunction smartDotenvPublicKey (envFilepath) {\n let publicKey = null\n const publicKeyName = guessPublicKeyName(envFilepath) // DOTENV_PUBLIC_KEY_${ENVIRONMENT}\n\n // 1. attempt process.env first\n publicKey = searchProcessEnv(publicKeyName)\n if (publicKey) {\n return publicKey\n }\n\n // 2. attempt .env.keys second (path/to/.env.keys)\n publicKey = searchEnvFile(publicKeyName, envFilepath)\n if (publicKey) {\n return publicKey\n }\n\n return null\n}\n\nmodule.exports = smartDotenvPublicKey\n",
|
|
71
|
-
"const fsx = require('./fsx')\nconst path = require('path')\n\nconst PUBLIC_KEY_SCHEMA = 'DOTENV_PUBLIC_KEY'\nconst PRIVATE_KEY_SCHEMA = 'DOTENV_PRIVATE_KEY'\n\nconst dotenvParse = require('./dotenvParse')\nconst guessPrivateKeyName = require('./guessPrivateKeyName')\n\nfunction searchProcessEnv (privateKeyName) {\n if (process.env[privateKeyName] && process.env[privateKeyName].length > 0) {\n return process.env[privateKeyName]\n }\n}\n\nfunction searchKeysFile (privateKeyName, envFilepath, envKeysFilepath = null) {\n let keysFilepath = path.resolve(path.dirname(envFilepath), '.env.keys') // typical scenario\n if (envKeysFilepath) { // user specified -fk flag\n keysFilepath = path.resolve(envKeysFilepath)\n }\n\n if (fsx.existsSync(keysFilepath)) {\n const keysSrc = fsx.readFileX(keysFilepath)\n const keysParsed = dotenvParse(keysSrc)\n\n if (keysParsed[privateKeyName] && keysParsed[privateKeyName].length > 0) {\n return keysParsed[privateKeyName]\n }\n }\n}\n\nfunction invertForPrivateKeyName (envFilepath) {\n if (!fsx.existsSync(envFilepath)) {\n return null\n }\n\n const envSrc = fsx.readFileX(envFilepath)\n const envParsed = dotenvParse(envSrc)\n\n let publicKeyName\n for (const keyName of Object.keys(envParsed)) {\n if (keyName === PUBLIC_KEY_SCHEMA || keyName.startsWith(PUBLIC_KEY_SCHEMA)) {\n publicKeyName = keyName // find DOTENV_PUBLIC_KEY* in filename\n }\n }\n\n if (publicKeyName) {\n return publicKeyName.replace(PUBLIC_KEY_SCHEMA, PRIVATE_KEY_SCHEMA) // return inverted (DOTENV_PUBLIC_KEY* -> DOTENV_PRIVATE_KEY*) if found\n }\n\n return null\n}\n\nfunction smartDotenvPrivateKey (envFilepath, envKeysFilepath = null) {\n let privateKey = null\n let privateKeyName = guessPrivateKeyName(envFilepath) // DOTENV_PRIVATE_KEY_${ENVIRONMENT}\n\n // 1. attempt process.env first\n privateKey = searchProcessEnv(privateKeyName)\n if (privateKey) {\n return privateKey\n }\n\n // 2. attempt .env.keys second (path/to/.env.keys)\n privateKey = searchKeysFile(privateKeyName, envFilepath, envKeysFilepath)\n if (privateKey) {\n return privateKey\n }\n\n // 3. attempt inverting `DOTENV_PUBLIC_KEY*` name inside file (unlocks custom filenames not matching .env.${ENVIRONMENT} pattern)\n privateKeyName = invertForPrivateKeyName(envFilepath)\n if (privateKeyName) {\n // 3.1 attempt process.env first\n privateKey = searchProcessEnv(privateKeyName)\n if (privateKey) {\n return privateKey\n }\n\n // 3.2. attempt .env.keys second (path/to/.env.keys)\n privateKey = searchKeysFile(privateKeyName, envFilepath, envKeysFilepath)\n if (privateKey) {\n return privateKey\n }\n }\n\n return null\n}\n\nmodule.exports = smartDotenvPrivateKey\n",
|
|
72
|
-
"const guessPublicKeyName = require('./../helpers/guessPublicKeyName')\nconst smartDotenvPublicKey = require('./../helpers/smartDotenvPublicKey')\nconst guessPrivateKeyName = require('./../helpers/guessPrivateKeyName')\nconst smartDotenvPrivateKey = require('./../helpers/smartDotenvPrivateKey')\n\nclass Keypair {\n constructor (envFile = '.env', envKeysFilepath = null) {\n this.envFile = envFile\n this.envKeysFilepath = envKeysFilepath\n }\n\n run () {\n const out = {}\n\n const envFilepaths = this._envFilepaths()\n for (const envFilepath of envFilepaths) {\n // public key\n const publicKeyName = guessPublicKeyName(envFilepath)\n const publicKeyValue = smartDotenvPublicKey(envFilepath)\n out[publicKeyName] = publicKeyValue\n\n // private key\n const privateKeyName = guessPrivateKeyName(envFilepath)\n const privateKeyValue = smartDotenvPrivateKey(envFilepath, this.envKeysFilepath)\n\n out[privateKeyName] = privateKeyValue\n }\n\n return out\n }\n\n _envFilepaths () {\n if (!Array.isArray(this.envFile)) {\n return [this.envFile]\n }\n\n return this.envFile\n }\n}\n\nmodule.exports = Keypair\n",
|
|
73
|
-
"// helpers\nconst guessPrivateKeyName = require('./guessPrivateKeyName')\nconst ProKeypair = require('./proKeypair')\n\n// services\nconst Keypair = require('./../services/keypair')\n\nfunction findPrivateKey (envFilepath, envKeysFilepath = null, opsOn = true) {\n // use path/to/.env.${environment} to generate privateKeyName\n const privateKeyName = guessPrivateKeyName(envFilepath)\n\n let proKeypairs = {}\n if (opsOn) {\n proKeypairs = new ProKeypair(envFilepath).run() // TODO: implement custom envKeysFilepath\n }\n\n const keypairs = new Keypair(envFilepath, envKeysFilepath).run()\n\n return proKeypairs[privateKeyName] || keypairs[privateKeyName]\n}\n\nmodule.exports = { findPrivateKey }\n",
|
|
74
|
-
"const PRIVATE_KEY_NAME_SCHEMA = 'DOTENV_PRIVATE_KEY'\n\nfunction dotenvPrivateKeyNames (processEnv) {\n return Object.keys(processEnv).filter(key => key.startsWith(PRIVATE_KEY_NAME_SCHEMA))\n}\n\nmodule.exports = dotenvPrivateKeyNames\n",
|
|
75
|
-
"const PREFIX = 'DOTENV_PRIVATE_KEY'\n\nfunction guessPrivateKeyFilename (privateKeyName) {\n // .env\n if (privateKeyName === PREFIX) {\n return '.env'\n }\n\n const filenameSuffix = privateKeyName.substring(`${PREFIX}_`.length).split('_').join('.').toLowerCase()\n // .env.ENVIRONMENT\n\n return `.env.${filenameSuffix}`\n}\n\nmodule.exports = guessPrivateKeyFilename\n",
|
|
76
|
-
"const dotenvPrivateKeyNames = require('./dotenvPrivateKeyNames')\nconst guessPrivateKeyFilename = require('./guessPrivateKeyFilename')\n\nconst TYPE_ENV_FILE = 'envFile'\nconst TYPE_ENV_VAULT_FILE = 'envVaultFile'\nconst DEFAULT_ENVS = [{ type: TYPE_ENV_FILE, value: '.env' }]\nconst DEFAULT_ENV_VAULTS = [{ type: TYPE_ENV_VAULT_FILE, value: '.env.vault' }]\n\nfunction determineEnvsFromDotenvPrivateKey (privateKeyNames) {\n const envs = []\n\n for (const privateKeyName of privateKeyNames) {\n const filename = guessPrivateKeyFilename(privateKeyName)\n envs.push({ type: TYPE_ENV_FILE, value: filename })\n }\n\n return envs\n}\n\nfunction determineEnvs (envs = [], processEnv, DOTENV_KEY = '') {\n const privateKeyNames = dotenvPrivateKeyNames(processEnv)\n if (!envs || envs.length <= 0) {\n // if process.env.DOTENV_PRIVATE_KEY or process.env.DOTENV_PRIVATE_KEY_${environment} is set, assume inline encryption methodology\n if (privateKeyNames.length > 0) {\n return determineEnvsFromDotenvPrivateKey(privateKeyNames)\n }\n\n if (DOTENV_KEY.length > 0) {\n // if DOTENV_KEY is set then default to look for .env.vault file\n return DEFAULT_ENV_VAULTS\n } else {\n return DEFAULT_ENVS // default to .env file expectation\n }\n } else {\n let fileAlreadySpecified = false // can be .env or .env.vault type\n\n for (const env of envs) {\n // if DOTENV_KEY set then we are checking if a .env.vault file is already specified\n if (DOTENV_KEY.length > 0 && env.type === TYPE_ENV_VAULT_FILE) {\n fileAlreadySpecified = true\n }\n\n // if DOTENV_KEY not set then we are checking if a .env file is already specified\n if (DOTENV_KEY.length <= 0 && env.type === TYPE_ENV_FILE) {\n fileAlreadySpecified = true\n }\n }\n\n // return early since envs array objects already contain 1 .env.vault or .env file\n if (fileAlreadySpecified) {\n return envs\n }\n\n // no .env.vault or .env file specified as a flag so we assume either .env.vault (if dotenv key is set) or a .env file\n if (DOTENV_KEY.length > 0) {\n // if DOTENV_KEY is set then default to look for .env.vault file\n return [...DEFAULT_ENV_VAULTS, ...envs]\n } else {\n // if no DOTENV_KEY then default to look for .env file\n return [...DEFAULT_ENVS, ...envs]\n }\n }\n}\n\nmodule.exports = determineEnvs\n",
|
|
77
|
-
"const fsx = require('./../helpers/fsx')\nconst path = require('path')\n\nconst TYPE_ENV = 'env'\nconst TYPE_ENV_FILE = 'envFile'\nconst TYPE_ENV_VAULT_FILE = 'envVaultFile'\n\nconst decrypt = require('./../helpers/decrypt')\nconst Parse = require('./../helpers/parse')\nconst Errors = require('./../helpers/errors')\nconst dotenvParse = require('./../helpers/dotenvParse')\nconst parseEnvironmentFromDotenvKey = require('./../helpers/parseEnvironmentFromDotenvKey')\nconst detectEncoding = require('./../helpers/detectEncoding')\nconst { findPrivateKey } = require('./../helpers/findPrivateKey')\nconst guessPrivateKeyName = require('./../helpers/guessPrivateKeyName')\nconst determineEnvs = require('./../helpers/determineEnvs')\n\nclass Run {\n constructor (envs = [], overload = false, DOTENV_KEY = '', processEnv = process.env, envKeysFilepath = null, opsOn = true) {\n this.envs = determineEnvs(envs, processEnv, DOTENV_KEY)\n this.overload = overload\n this.DOTENV_KEY = DOTENV_KEY\n this.processEnv = processEnv\n this.envKeysFilepath = envKeysFilepath\n this.opsOn = opsOn\n\n this.processedEnvs = []\n this.readableFilepaths = new Set()\n this.readableStrings = new Set()\n this.uniqueInjectedKeys = new Set()\n this.beforeEnv = { ...this.processEnv }\n }\n\n run () {\n // example\n // envs [\n // { type: 'envVaultFile', value: '.env.vault' },\n // { type: 'env', value: 'HELLO=one' },\n // { type: 'envFile', value: '.env' },\n // { type: 'env', value: 'HELLO=three' }\n // ]\n\n for (const env of this.envs) {\n if (env.type === TYPE_ENV_VAULT_FILE) { // deprecate someday - for deprecated .env.vault files\n this._injectEnvVaultFile(env.value)\n } else if (env.type === TYPE_ENV_FILE) {\n this._injectEnvFile(env.value)\n } else if (env.type === TYPE_ENV) {\n this._injectEnv(env.value)\n }\n }\n\n return {\n processedEnvs: this.processedEnvs,\n readableStrings: [...this.readableStrings],\n readableFilepaths: [...this.readableFilepaths],\n uniqueInjectedKeys: [...this.uniqueInjectedKeys],\n beforeEnv: this.beforeEnv,\n afterEnv: { ...this.processEnv }\n }\n }\n\n _injectEnv (env) {\n const row = {}\n row.type = TYPE_ENV\n row.string = env\n\n try {\n const { parsed, errors, injected, preExisted } = new Parse(env, null, this.processEnv, this.overload).run()\n row.parsed = parsed\n row.errors = errors\n row.injected = injected\n row.preExisted = preExisted\n\n this.inject(row.parsed) // inject\n\n this.readableStrings.add(env)\n\n for (const key of Object.keys(injected)) {\n this.uniqueInjectedKeys.add(key) // track uniqueInjectedKeys across multiple files\n }\n } catch (e) {\n row.errors = [e]\n }\n\n this.processedEnvs.push(row)\n }\n\n _injectEnvFile (envFilepath) {\n const row = {}\n row.type = TYPE_ENV_FILE\n row.filepath = envFilepath\n\n const filepath = path.resolve(envFilepath)\n try {\n const encoding = detectEncoding(filepath)\n const src = fsx.readFileX(filepath, { encoding })\n this.readableFilepaths.add(envFilepath)\n\n const privateKey = findPrivateKey(envFilepath, this.envKeysFilepath, this.opsOn)\n const privateKeyName = guessPrivateKeyName(envFilepath)\n const { parsed, errors, injected, preExisted } = new Parse(src, privateKey, this.processEnv, this.overload, privateKeyName).run()\n\n row.privateKeyName = privateKeyName\n row.privateKey = privateKey\n row.src = src\n row.parsed = parsed\n row.errors = errors\n row.injected = injected\n row.preExisted = preExisted\n\n this.inject(row.parsed) // inject\n\n for (const key of Object.keys(injected)) {\n this.uniqueInjectedKeys.add(key) // track uniqueInjectedKeys across multiple files\n }\n } catch (e) {\n if (e.code === 'ENOENT' || e.code === 'EISDIR') {\n row.errors = [new Errors({ envFilepath, filepath }).missingEnvFile()]\n } else {\n row.errors = [e]\n }\n }\n\n this.processedEnvs.push(row)\n }\n\n _injectEnvVaultFile (envVaultFilepath) {\n const row = {}\n row.type = TYPE_ENV_VAULT_FILE\n row.filepath = envVaultFilepath\n\n const filepath = path.resolve(envVaultFilepath)\n this.readableFilepaths.add(envVaultFilepath)\n\n if (!fsx.existsSync(filepath)) {\n const code = 'MISSING_ENV_VAULT_FILE'\n const message = `you set DOTENV_KEY but your .env.vault file is missing: ${filepath}`\n const error = new Error(message)\n error.code = code\n throw error\n }\n\n if (this.DOTENV_KEY.length < 1) {\n const code = 'MISSING_DOTENV_KEY'\n const message = `your DOTENV_KEY appears to be blank: '${this.DOTENV_KEY}'`\n const error = new Error(message)\n error.code = code\n throw error\n }\n\n let decrypted\n const dotenvKeys = this._dotenvKeys()\n const parsedVault = this._parsedVault(filepath)\n for (let i = 0; i < dotenvKeys.length; i++) {\n try {\n const dotenvKey = dotenvKeys[i].trim() // dotenv://key_1234@...?environment=prod\n\n decrypted = this._decrypted(dotenvKey, parsedVault)\n\n break\n } catch (error) {\n // last key\n if (i + 1 >= dotenvKeys.length) {\n throw error\n }\n // try next key\n }\n }\n\n try {\n // parse this. it's the equivalent of the .env file\n const { parsed, errors, injected, preExisted } = new Parse(decrypted, null, this.processEnv, this.overload).run()\n row.parsed = parsed\n row.errors = errors\n row.injected = injected\n row.preExisted = preExisted\n\n this.inject(row.parsed) // inject\n\n for (const key of Object.keys(injected)) {\n this.uniqueInjectedKeys.add(key) // track uniqueInjectedKeys across multiple files\n }\n } catch (e) {\n row.errors = [e]\n }\n\n this.processedEnvs.push(row)\n }\n\n inject (parsed) {\n for (const key of Object.keys(parsed)) {\n this.processEnv[key] = parsed[key] // inject to process.env\n }\n }\n\n // handle scenario for comma separated keys - for use with key rotation\n // example: DOTENV_KEY=\"dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=prod,dotenv://:key_7890@dotenvx.com/vault/.env.vault?environment=prod\"\n _dotenvKeys () {\n return this.DOTENV_KEY.split(',')\n }\n\n // { \"DOTENV_VAULT_DEVELOPMENT\": \"<ciphertext>\" }\n _parsedVault (filepath) {\n const src = fsx.readFileX(filepath)\n return dotenvParse(src)\n }\n\n _decrypted (dotenvKey, parsedVault) {\n const environment = parseEnvironmentFromDotenvKey(dotenvKey)\n\n // DOTENV_KEY_PRODUCTION\n const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`\n const ciphertext = parsedVault[environmentKey]\n if (!ciphertext) {\n const error = new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: cannot locate environment ${environmentKey} in your .env.vault file`)\n error.code = 'NOT_FOUND_DOTENV_ENVIRONMENT'\n\n throw error\n }\n\n return decrypt(ciphertext, dotenvKey)\n }\n}\n\nmodule.exports = Run\n",
|
|
78
|
-
"const { encrypt } = require('eciesjs')\n\nconst PREFIX = 'encrypted:'\n\nfunction encryptValue (value, publicKey) {\n const ciphertext = encrypt(publicKey, Buffer.from(value))\n const encoded = Buffer.from(ciphertext, 'hex').toString('base64') // base64 encode ciphertext\n\n return `${PREFIX}${encoded}`\n}\n\nmodule.exports = encryptValue\n",
|
|
79
|
-
"const LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\nfunction quotes (src) {\n const obj = {}\n // Convert buffer to string\n let lines = src.toString()\n\n // Convert line breaks to same format\n lines = lines.replace(/\\r\\n?/mg, '\\n')\n\n let match\n while ((match = LINE.exec(lines)) != null) {\n const key = match[1]\n\n // Default undefined or null to empty string\n let value = (match[2] || '')\n\n // Remove whitespace\n value = value.trim()\n\n // Check if double quoted\n const maybeQuote = value[0]\n\n value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/mg, '$2')\n\n if (maybeQuote === value[0]) {\n obj[key] = ''\n } else {\n obj[key] = maybeQuote\n }\n }\n\n return obj\n}\n\nmodule.exports = quotes\n",
|
|
80
|
-
"function escapeForRegex (str) {\n return str.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&').replace(/-/g, '\\\\x2d')\n}\n\nmodule.exports = escapeForRegex\n",
|
|
81
|
-
"function escapeDollarSigns (str) {\n return str.replace(/\\$/g, '$$$$')\n}\n\nmodule.exports = escapeDollarSigns\n",
|
|
82
|
-
"const quotes = require('./quotes')\nconst dotenvParse = require('./dotenvParse')\nconst escapeForRegex = require('./escapeForRegex')\nconst escapeDollarSigns = require('./escapeDollarSigns')\n\nfunction replace (src, key, replaceValue) {\n let output\n let newPart = ''\n\n const parsed = dotenvParse(src, true, true) // skip expanding \\n and skip converting \\r\\n\n const _quotes = quotes(src)\n if (Object.prototype.hasOwnProperty.call(parsed, key)) {\n const quote = _quotes[key]\n newPart += `${key}=${quote}${replaceValue}${quote}`\n\n const originalValue = parsed[key]\n const escapedOriginalValue = escapeForRegex(originalValue)\n\n // conditionally enforce end of line\n let enforceEndOfLine = ''\n if (escapedOriginalValue === '') {\n enforceEndOfLine = '$' // EMPTY scenario\n\n // if empty quote and consecutive newlines\n const newlineMatch = src.match(new RegExp(`${key}\\\\s*=\\\\s*\\n\\n`, 'm')) // match any consecutive newline scenario for a blank value\n if (quote === '' && newlineMatch) {\n const newlineCount = (newlineMatch[0].match(/\\n/g)).length - 1\n for (let i = 0; i < newlineCount; i++) {\n newPart += '\\n' // re-append the extra newline to preserve user's format choice\n }\n }\n }\n\n const currentPart = new RegExp(\n '^' + // start of line\n '(\\\\s*)?' + // spaces\n '(export\\\\s+)?' + // export\n key + // KEY\n '\\\\s*=\\\\s*' + // spaces (KEY = value)\n '[\"\\'`]?' + // open quote\n escapedOriginalValue + // escaped value\n '[\"\\'`]?' + // close quote\n enforceEndOfLine\n ,\n 'gm' // (g)lobal (m)ultiline\n )\n\n const saferInput = escapeDollarSigns(newPart) // cleanse user inputted capture groups ($1, $2 etc)\n\n // $1 preserves spaces\n // $2 preserves export\n output = src.replace(currentPart, `$1$2${saferInput}`)\n } else {\n newPart += `${key}=\"${replaceValue}\"`\n\n // append\n if (src.endsWith('\\n')) {\n newPart = newPart + '\\n'\n } else {\n newPart = '\\n' + newPart\n }\n\n output = src + newPart\n }\n\n return output\n}\n\nmodule.exports = replace\n",
|
|
83
|
-
"// helpers\nconst guessPublicKeyName = require('./guessPublicKeyName')\nconst ProKeypair = require('./proKeypair')\n\n// services\nconst Keypair = require('./../services/keypair')\n\nfunction findPublicKey (envFilepath, opsOn = true) {\n const publicKeyName = guessPublicKeyName(envFilepath)\n\n let proKeypairs = {}\n if (opsOn) {\n proKeypairs = new ProKeypair(envFilepath).run()\n }\n\n const keypairs = new Keypair(envFilepath).run()\n\n return proKeypairs[publicKeyName] || keypairs[publicKeyName]\n}\n\nmodule.exports = findPublicKey\n",
|
|
84
|
-
"const { PrivateKey } = require('eciesjs')\n\nfunction keypair (existingPrivateKey) {\n let kp\n\n if (existingPrivateKey) {\n kp = new PrivateKey(Buffer.from(existingPrivateKey, 'hex'))\n } else {\n kp = new PrivateKey()\n }\n\n const publicKey = kp.publicKey.toHex()\n const privateKey = kp.secret.toString('hex')\n\n return {\n publicKey,\n privateKey\n }\n}\n\nmodule.exports = keypair\n",
|
|
85
|
-
"const ENCRYPTION_PATTERN = /^encrypted:.+/\n\nfunction isEncrypted (value) {\n return ENCRYPTION_PATTERN.test(value)\n}\n\nmodule.exports = isEncrypted\n",
|
|
86
|
-
"const fsx = require('./../helpers/fsx')\nconst path = require('path')\n\nconst TYPE_ENV_FILE = 'envFile'\n\nconst Errors = require('./../helpers/errors')\nconst guessPrivateKeyName = require('./../helpers/guessPrivateKeyName')\nconst guessPublicKeyName = require('./../helpers/guessPublicKeyName')\nconst encryptValue = require('./../helpers/encryptValue')\nconst decryptKeyValue = require('./../helpers/decryptKeyValue')\nconst replace = require('./../helpers/replace')\nconst dotenvParse = require('./../helpers/dotenvParse')\nconst detectEncoding = require('./../helpers/detectEncoding')\nconst determineEnvs = require('./../helpers/determineEnvs')\nconst { findPrivateKey } = require('./../helpers/findPrivateKey')\nconst findPublicKey = require('./../helpers/findPublicKey')\nconst keypair = require('./../helpers/keypair')\nconst truncate = require('./../helpers/truncate')\nconst isEncrypted = require('./../helpers/isEncrypted')\n\nclass Sets {\n constructor (key, value, envs = [], encrypt = true, envKeysFilepath = null) {\n this.envs = determineEnvs(envs, process.env)\n this.key = key\n this.value = value\n this.encrypt = encrypt\n this.envKeysFilepath = envKeysFilepath\n\n this.processedEnvs = []\n this.changedFilepaths = new Set()\n this.unchangedFilepaths = new Set()\n this.readableFilepaths = new Set()\n }\n\n run () {\n // example\n // envs [\n // { type: 'envFile', value: '.env' }\n // ]\n\n for (const env of this.envs) {\n if (env.type === TYPE_ENV_FILE) {\n this._setEnvFile(env.value)\n }\n }\n\n return {\n processedEnvs: this.processedEnvs,\n changedFilepaths: [...this.changedFilepaths],\n unchangedFilepaths: [...this.unchangedFilepaths]\n }\n }\n\n _setEnvFile (envFilepath) {\n const row = {}\n row.key = this.key || null\n row.value = this.value || null\n row.type = TYPE_ENV_FILE\n\n const filename = path.basename(envFilepath)\n const filepath = path.resolve(envFilepath)\n row.filepath = filepath\n row.envFilepath = envFilepath\n row.changed = false\n\n try {\n const encoding = this._detectEncoding(filepath)\n let envSrc = fsx.readFileX(filepath, { encoding })\n const envParsed = dotenvParse(envSrc)\n row.originalValue = envParsed[row.key] || null\n const wasPlainText = !isEncrypted(row.originalValue)\n this.readableFilepaths.add(envFilepath)\n\n if (this.encrypt) {\n let publicKey\n let privateKey\n\n const publicKeyName = guessPublicKeyName(envFilepath)\n const privateKeyName = guessPrivateKeyName(envFilepath)\n const existingPrivateKey = findPrivateKey(envFilepath, this.envKeysFilepath)\n const existingPublicKey = findPublicKey(envFilepath)\n\n let envKeysFilepath = path.join(path.dirname(filepath), '.env.keys')\n if (this.envKeysFilepath) {\n envKeysFilepath = path.resolve(this.envKeysFilepath)\n }\n const relativeFilepath = path.relative(path.dirname(filepath), envKeysFilepath)\n\n if (existingPrivateKey) {\n const kp = keypair(existingPrivateKey)\n publicKey = kp.publicKey\n privateKey = kp.privateKey\n\n if (row.originalValue) {\n row.originalValue = decryptKeyValue(row.key, row.originalValue, privateKeyName, privateKey)\n }\n\n // if derivation doesn't match what's in the file (or preset in env)\n if (existingPublicKey && existingPublicKey !== publicKey) {\n const error = new Error(`derived public key (${truncate(publicKey)}) does not match the existing public key (${truncate(existingPublicKey)})`)\n error.code = 'INVALID_DOTENV_PRIVATE_KEY'\n error.help = `debug info: ${privateKeyName}=${truncate(existingPrivateKey)} (derived ${publicKeyName}=${truncate(publicKey)} vs existing ${publicKeyName}=${truncate(existingPublicKey)})`\n throw error\n }\n\n // typical scenario when encrypting a monorepo second .env file from a prior generated -fk .env.keys file\n if (!existingPublicKey) {\n const ps = this._preserveShebang(envSrc)\n const firstLinePreserved = ps.firstLinePreserved\n envSrc = ps.envSrc\n\n const prependPublicKey = this._prependPublicKey(publicKeyName, publicKey, filename, relativeFilepath)\n\n envSrc = `${firstLinePreserved}${prependPublicKey}\\n${envSrc}`\n }\n } else if (existingPublicKey) {\n publicKey = existingPublicKey\n } else {\n // .env.keys\n let keysSrc = ''\n if (fsx.existsSync(envKeysFilepath)) {\n keysSrc = fsx.readFileX(envKeysFilepath)\n }\n\n const ps = this._preserveShebang(envSrc)\n const firstLinePreserved = ps.firstLinePreserved\n envSrc = ps.envSrc\n\n const kp = keypair() // generates a fresh keypair in memory\n publicKey = kp.publicKey\n privateKey = kp.privateKey\n\n const prependPublicKey = this._prependPublicKey(publicKeyName, publicKey, filename, relativeFilepath)\n\n // privateKey\n const firstTimeKeysSrc = [\n '#/------------------!DOTENV_PRIVATE_KEYS!-------------------/',\n '#/ private decryption keys. DO NOT commit to source control /',\n '#/ [how it works](https://dotenvx.com/encryption) /',\n '#/----------------------------------------------------------/'\n ].join('\\n')\n const appendPrivateKey = [\n `# ${filename}`,\n `${privateKeyName}=${privateKey}`,\n ''\n ].join('\\n')\n\n envSrc = `${firstLinePreserved}${prependPublicKey}\\n${envSrc}`\n keysSrc = keysSrc.length > 1 ? keysSrc : `${firstTimeKeysSrc}\\n`\n keysSrc = `${keysSrc}\\n${appendPrivateKey}`\n\n // write to .env.keys\n fsx.writeFileX(envKeysFilepath, keysSrc)\n\n row.privateKeyAdded = true\n row.envKeysFilepath = this.envKeysFilepath || path.join(path.dirname(envFilepath), path.basename(envKeysFilepath))\n }\n\n row.publicKey = publicKey\n row.privateKey = privateKey\n row.encryptedValue = encryptValue(this.value, publicKey)\n row.privateKeyName = privateKeyName\n }\n\n const goingFromPlainTextToEncrypted = wasPlainText && this.encrypt\n const valueChanged = this.value !== row.originalValue\n if (goingFromPlainTextToEncrypted || valueChanged) {\n row.envSrc = replace(envSrc, this.key, row.encryptedValue || this.value)\n this.changedFilepaths.add(envFilepath)\n row.changed = true\n } else {\n row.envSrc = envSrc\n this.unchangedFilepaths.add(envFilepath)\n row.changed = false\n }\n } catch (e) {\n if (e.code === 'ENOENT') {\n row.error = new Errors({ envFilepath, filepath }).missingEnvFile()\n } else {\n row.error = e\n }\n }\n\n this.processedEnvs.push(row)\n }\n\n _detectEncoding (filepath) {\n return detectEncoding(filepath)\n }\n\n _prependPublicKey (publicKeyName, publicKey, filename, relativeFilepath = '.env.keys') {\n const comment = relativeFilepath === '.env.keys' ? '' : ` # -fk ${relativeFilepath}`\n\n return [\n '#/-------------------[DOTENV_PUBLIC_KEY]--------------------/',\n '#/ public-key encryption for .env files /',\n '#/ [how it works](https://dotenvx.com/encryption) /',\n '#/----------------------------------------------------------/',\n `${publicKeyName}=\"${publicKey}\"${comment}`,\n '',\n `# ${filename}`\n ].join('\\n')\n }\n\n _preserveShebang (envSrc) {\n // preserve shebang\n const [firstLine, ...remainingLines] = envSrc.split('\\n')\n let firstLinePreserved = ''\n\n if (firstLine.startsWith('#!')) {\n firstLinePreserved = firstLine + '\\n'\n envSrc = remainingLines.join('\\n')\n }\n\n return {\n firstLinePreserved,\n envSrc\n }\n }\n}\n\nmodule.exports = Sets\n",
|
|
87
|
-
"const Run = require('./run')\nconst Errors = require('./../helpers/errors')\n\nclass Get {\n constructor (key, envs = [], overload = false, DOTENV_KEY = '', all = false, envKeysFilepath = null) {\n this.key = key\n this.envs = envs\n this.overload = overload\n this.DOTENV_KEY = DOTENV_KEY\n this.all = all\n this.envKeysFilepath = envKeysFilepath\n }\n\n run () {\n const processEnv = { ...process.env }\n const { processedEnvs } = new Run(this.envs, this.overload, this.DOTENV_KEY, processEnv, this.envKeysFilepath).run()\n\n const errors = []\n for (const processedEnv of processedEnvs) {\n for (const error of processedEnv.errors) {\n errors.push(error)\n }\n }\n\n if (this.key) {\n const parsed = {}\n const value = processEnv[this.key]\n parsed[this.key] = value\n\n if (value === undefined) {\n errors.push(new Errors({ key: this.key }).missingKey())\n }\n\n return { parsed, errors }\n } else {\n // if user wants to return ALL envs (even prior set on machine)\n if (this.all) {\n return { parsed: processEnv, errors }\n }\n\n // typical scenario - return only envs that were identified in the .env file\n // iterate over all processedEnvs.parsed and grab from processEnv\n /** @type {Record<string, string>} */\n const parsed = {}\n for (const processedEnv of processedEnvs) {\n // parsed means we saw the key in a file or --env flag. this effectively filters out any preset machine envs - while still respecting complex evaluating, expansion, and overload. in other words, the value might be the machine value because the key was displayed in a .env file\n if (processedEnv.parsed) {\n for (const key of Object.keys(processedEnv.parsed)) {\n parsed[key] = processEnv[key]\n }\n }\n }\n\n return { parsed, errors }\n }\n }\n}\n\nmodule.exports = Get\n",
|
|
88
|
-
"const fsx = require('./fsx')\n\nconst RESERVED_ENV_FILES = ['.env.vault', '.env.project', '.env.keys', '.env.me', '.env.x', '.env.example']\n\nfunction findEnvFiles (directory) {\n try {\n const files = fsx.readdirSync(directory)\n const envFiles = files.filter(file =>\n file.startsWith('.env') &&\n !file.endsWith('.previous') &&\n !RESERVED_ENV_FILES.includes(file)\n )\n\n return envFiles\n } catch (e) {\n if (e.code === 'ENOENT') {\n const error = new Error(`missing directory (${directory})`)\n error.code = 'MISSING_DIRECTORY'\n\n throw error\n } else {\n throw e\n }\n }\n}\n\nmodule.exports = findEnvFiles\n",
|
|
89
|
-
"const fsx = require('./../helpers/fsx')\nconst path = require('path')\n\nconst Errors = require('../helpers/errors')\nconst findEnvFiles = require('../helpers/findEnvFiles')\nconst replace = require('../helpers/replace')\nconst dotenvParse = require('../helpers/dotenvParse')\n\nclass Genexample {\n constructor (directory = '.', envFile) {\n this.directory = directory\n this.envFile = envFile || findEnvFiles(directory)\n\n this.exampleFilename = '.env.example'\n this.exampleFilepath = path.resolve(this.directory, this.exampleFilename)\n }\n\n run () {\n if (this.envFile.length < 1) {\n const code = 'MISSING_ENV_FILES'\n const message = 'no .env* files found'\n const help = '? add one with [echo \"HELLO=World\" > .env] and then run [dotenvx genexample]'\n\n const error = new Error(message)\n error.code = code\n error.help = help\n throw error\n }\n\n const keys = new Set()\n const addedKeys = new Set()\n const envFilepaths = this._envFilepaths()\n /** @type {Record<string, string>} */\n const injected = {}\n /** @type {Record<string, string>} */\n const preExisted = {}\n\n let exampleSrc = `# ${this.exampleFilename} - generated with dotenvx\\n`\n\n for (const envFilepath of envFilepaths) {\n const filepath = path.resolve(this.directory, envFilepath)\n if (!fsx.existsSync(filepath)) {\n const error = new Errors({ envFilepath, filepath }).missingEnvFile()\n error.help = `? add it with [echo \"HELLO=World\" > ${envFilepath}] and then run [dotenvx genexample]`\n throw error\n }\n\n // get the original src\n let src = fsx.readFileX(filepath)\n const parsed = dotenvParse(src)\n for (const key in parsed) {\n // used later\n keys.add(key)\n\n // once newSrc is built write it out\n src = replace(src, key, '') // empty value\n }\n\n exampleSrc += `\\n${src}`\n }\n\n if (!fsx.existsSync(this.exampleFilepath)) {\n // it doesn't exist so just write this first generated one\n // exampleSrc - already written to from the prior loop\n for (const key of [...keys]) {\n // every key is added since it's the first time generating .env.example\n addedKeys.add(key)\n\n injected[key] = ''\n }\n } else {\n // it already exists (which means the user might have it modified a way in which they prefer, so replace exampleSrc with their existing .env.example)\n exampleSrc = fsx.readFileX(this.exampleFilepath)\n\n const parsed = dotenvParse(exampleSrc)\n for (const key of [...keys]) {\n if (key in parsed) {\n preExisted[key] = parsed[key]\n } else {\n exampleSrc += `${key}=''\\n`\n\n addedKeys.add(key)\n\n injected[key] = ''\n }\n }\n }\n\n return {\n envExampleFile: exampleSrc,\n envFile: this.envFile,\n exampleFilepath: this.exampleFilepath,\n addedKeys: [...addedKeys],\n injected,\n preExisted\n }\n }\n\n _envFilepaths () {\n if (!Array.isArray(this.envFile)) {\n return [this.envFile]\n }\n\n return this.envFile\n }\n}\n\nmodule.exports = Genexample\n",
|
|
90
|
-
"const path = require('path')\nconst childProcess = require('child_process')\n\nconst { logger } = require('./../../shared/logger')\n\nclass Radar {\n constructor () {\n this.radarLib = null\n\n // check npm lib\n try {\n this.radarLib = this._radarNpm()\n logger.warn('[DEPRECATION NOTICE] dotenvx-radar is renamed dotenv-ops. [See https://dotenvx.com/docs/ops]')\n logger.successv(`📡 radar: ${this.radarLib.status}`)\n } catch (e) {\n // check binary cli\n try {\n this.radarLib = this._radarCli()\n logger.warn('[DEPRECATION NOTICE] dotenvx-radar is renamed dotenv-ops. [See https://dotenvx.com/docs/ops]')\n logger.successv(`📡 radar: ${this.radarLib.status}`)\n } catch (_e2) {\n // noop\n }\n // noop\n }\n }\n\n observe (payload) {\n if (this.radarLib && this.radarLib.status !== 'off') {\n const encoded = this.encode(payload)\n this.radarLib.observe(encoded)\n }\n }\n\n encode (payload) {\n return Buffer.from(JSON.stringify(payload)).toString('base64')\n }\n\n _radarNpm () {\n const fallbackBin = path.resolve(process.cwd(), 'node_modules/.bin/dotenvx-radar')\n const status = childProcess.execSync(`${fallbackBin} status`, { stdio: ['pipe', 'pipe', 'ignore'] })\n\n return {\n status: status.toString().trim(),\n observe: (encoded) => {\n try {\n const subprocess = childProcess.spawn(fallbackBin, ['observe', encoded], {\n stdio: 'ignore',\n detached: true\n })\n\n subprocess.unref() // let it run independently\n } catch (e) {\n // noop\n }\n }\n }\n }\n\n _radarCli () {\n const status = childProcess.execSync('dotenvx-radar status', { stdio: ['pipe', 'pipe', 'ignore'] })\n\n return {\n status: status.toString().trim(),\n observe: (encoded) => {\n try {\n const subprocess = childProcess.spawn('dotenvx-radar', ['observe', encoded], {\n stdio: 'ignore',\n detached: true\n })\n\n subprocess.unref() // let it run independently\n } catch (e) {\n // noop\n }\n }\n }\n }\n}\n\nmodule.exports = Radar\n",
|
|
91
|
-
"const path = require('path')\nconst childProcess = require('child_process')\n\nconst { logger } = require('./../../shared/logger')\n\nclass Ops {\n constructor () {\n this.opsLib = null\n\n // check npm lib\n try {\n this.opsLib = this._opsNpm()\n logger.successv(`📡 radar: ${this.opsLib.status}`)\n } catch (e) {\n // check binary cli\n try {\n this.opsLib = this._opsCli()\n logger.successv(`📡 radar: ${this.opsLib.status}`)\n } catch (_e2) {\n // noop\n }\n // noop\n }\n }\n\n observe (payload) {\n if (this.opsLib && this.opsLib.status !== 'off') {\n const encoded = this.encode(payload)\n this.opsLib.observe(encoded)\n }\n }\n\n encode (payload) {\n return Buffer.from(JSON.stringify(payload)).toString('base64')\n }\n\n _opsNpm () {\n const fallbackBin = path.resolve(process.cwd(), 'node_modules/.bin/dotenvx-ops')\n const status = childProcess.execSync(`${fallbackBin} status`, { stdio: ['pipe', 'pipe', 'ignore'] })\n\n return {\n status: status.toString().trim(),\n observe: (encoded) => {\n try {\n const subprocess = childProcess.spawn(fallbackBin, ['observe', encoded], {\n stdio: 'ignore',\n detached: true\n })\n\n subprocess.unref() // let it run independently\n } catch (e) {\n // noop\n }\n }\n }\n }\n\n _opsCli () {\n const status = childProcess.execSync('dotenvx-ops status', { stdio: ['pipe', 'pipe', 'ignore'] })\n\n return {\n status: status.toString().trim(),\n observe: (encoded) => {\n try {\n const subprocess = childProcess.spawn('dotenvx-ops', ['observe', encoded], {\n stdio: 'ignore',\n detached: true\n })\n\n subprocess.unref() // let it run independently\n } catch (e) {\n // noop\n }\n }\n }\n }\n}\n\nmodule.exports = Ops\n",
|
|
92
|
-
"function conventions (convention) {\n const env = process.env.DOTENV_ENV || process.env.NODE_ENV || 'development'\n\n if (convention === 'nextjs') {\n const canonicalEnv = ['development', 'test', 'production'].includes(env) && env\n\n return [\n canonicalEnv && { type: 'envFile', value: `.env.${canonicalEnv}.local` },\n canonicalEnv !== 'test' && { type: 'envFile', value: '.env.local' },\n canonicalEnv && { type: 'envFile', value: `.env.${canonicalEnv}` },\n { type: 'envFile', value: '.env' }\n ].filter(Boolean)\n } else if (convention === 'flow') {\n return [\n { type: 'envFile', value: `.env.${env}.local` },\n { type: 'envFile', value: `.env.${env}` },\n { type: 'envFile', value: '.env.local' },\n { type: 'envFile', value: '.env' },\n { type: 'envFile', value: '.env.defaults' }\n ]\n } else {\n throw new Error(`INVALID_CONVENTION: '${convention}'. permitted conventions: ['nextjs', 'flow']`)\n }\n}\n\nmodule.exports = conventions\n",
|
|
93
|
-
"const os = require('os')\nconst path = require('path')\n\nfunction resolveHome (filepath) {\n if (filepath[0] === '~') {\n return path.join(os.homedir(), filepath.slice(1))\n }\n\n return filepath\n}\n\nmodule.exports = resolveHome\n",
|
|
94
|
-
"const resolveHome = require('./resolveHome')\n\nfunction dotenvOptionPaths (options) {\n let optionPaths = []\n\n if (options && options.path) {\n if (!Array.isArray(options.path)) {\n optionPaths = [resolveHome(options.path)]\n } else {\n optionPaths = [] // reset default\n\n for (const filepath of options.path) {\n optionPaths.push(resolveHome(filepath))\n }\n }\n }\n\n return optionPaths\n}\n\nmodule.exports = dotenvOptionPaths\n",
|
|
95
|
-
"const { logger } = require('./../../shared/logger')\n\nclass DeprecationNotice {\n constructor (options = {}) {\n this.DOTENV_KEY = options.DOTENV_KEY || process.env.DOTENV_KEY\n }\n\n dotenvKey () {\n if (this.DOTENV_KEY) {\n logger.warn('[DEPRECATION NOTICE] Setting DOTENV_KEY with .env.vault is deprecated.')\n logger.warn('[DEPRECATION NOTICE] Run [dotenvx ext vault migrate] for instructions on converting your .env.vault file to encrypted .env files (using public key encryption algorithm secp256k1)')\n logger.warn('[DEPRECATION NOTICE] Read more at [https://github.com/dotenvx/dotenvx/blob/main/CHANGELOG.md#0380]')\n }\n }\n}\n\nmodule.exports = DeprecationNotice\n",
|
|
96
|
-
"const path = require('path')\n\nconst conventions = require('./conventions')\nconst dotenvOptionPaths = require('./dotenvOptionPaths')\nconst DeprecationNotice = require('./deprecationNotice')\n\nfunction buildEnvs (options, DOTENV_KEY = undefined) {\n // build envs using user set option.path\n const optionPaths = dotenvOptionPaths(options) // [ '.env' ]\n\n let envs = []\n if (options.convention) { // handle shorthand conventions\n envs = conventions(options.convention).concat(envs)\n }\n\n new DeprecationNotice({ DOTENV_KEY }).dotenvKey() // DEPRECATION NOTICE\n\n for (const optionPath of optionPaths) {\n // if DOTENV_KEY is set then assume we are checking envVaultFile\n if (DOTENV_KEY) {\n envs.push({\n type: 'envVaultFile',\n value: path.join(path.dirname(optionPath), '.env.vault')\n })\n } else {\n envs.push({ type: 'envFile', value: optionPath })\n }\n }\n\n return envs\n}\n\nmodule.exports = buildEnvs\n",
|
|
97
|
-
"// A simple implementation of make-array\nfunction makeArray (subject) {\n return Array.isArray(subject)\n ? subject\n : [subject]\n}\n\nconst EMPTY = ''\nconst SPACE = ' '\nconst ESCAPE = '\\\\'\nconst REGEX_TEST_BLANK_LINE = /^\\s+$/\nconst REGEX_INVALID_TRAILING_BACKSLASH = /(?:[^\\\\]|^)\\\\$/\nconst REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\\\!/\nconst REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\\\#/\nconst REGEX_SPLITALL_CRLF = /\\r?\\n/g\n// /foo,\n// ./foo,\n// ../foo,\n// .\n// ..\nconst REGEX_TEST_INVALID_PATH = /^\\.*\\/|^\\.+$/\n\nconst SLASH = '/'\n\n// Do not use ternary expression here, since \"istanbul ignore next\" is buggy\nlet TMP_KEY_IGNORE = 'node-ignore'\n/* istanbul ignore else */\nif (typeof Symbol !== 'undefined') {\n TMP_KEY_IGNORE = Symbol.for('node-ignore')\n}\nconst KEY_IGNORE = TMP_KEY_IGNORE\n\nconst define = (object, key, value) =>\n Object.defineProperty(object, key, {value})\n\nconst REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g\n\nconst RETURN_FALSE = () => false\n\n// Sanitize the range of a regular expression\n// The cases are complicated, see test cases for details\nconst sanitizeRange = range => range.replace(\n REGEX_REGEXP_RANGE,\n (match, from, to) => from.charCodeAt(0) <= to.charCodeAt(0)\n ? match\n // Invalid range (out of order) which is ok for gitignore rules but\n // fatal for JavaScript regular expression, so eliminate it.\n : EMPTY\n)\n\n// See fixtures #59\nconst cleanRangeBackSlash = slashes => {\n const {length} = slashes\n return slashes.slice(0, length - length % 2)\n}\n\n// > If the pattern ends with a slash,\n// > it is removed for the purpose of the following description,\n// > but it would only find a match with a directory.\n// > In other words, foo/ will match a directory foo and paths underneath it,\n// > but will not match a regular file or a symbolic link foo\n// > (this is consistent with the way how pathspec works in general in Git).\n// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`'\n// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call\n// you could use option `mark: true` with `glob`\n\n// '`foo/`' should not continue with the '`..`'\nconst REPLACERS = [\n\n [\n // remove BOM\n // TODO:\n // Other similar zero-width characters?\n /^\\uFEFF/,\n () => EMPTY\n ],\n\n // > Trailing spaces are ignored unless they are quoted with backslash (\"\\\")\n [\n // (a\\ ) -> (a )\n // (a ) -> (a)\n // (a ) -> (a)\n // (a \\ ) -> (a )\n /((?:\\\\\\\\)*?)(\\\\?\\s+)$/,\n (_, m1, m2) => m1 + (\n m2.indexOf('\\\\') === 0\n ? SPACE\n : EMPTY\n )\n ],\n\n // replace (\\ ) with ' '\n // (\\ ) -> ' '\n // (\\\\ ) -> '\\\\ '\n // (\\\\\\ ) -> '\\\\ '\n [\n /(\\\\+?)\\s/g,\n (_, m1) => {\n const {length} = m1\n return m1.slice(0, length - length % 2) + SPACE\n }\n ],\n\n // Escape metacharacters\n // which is written down by users but means special for regular expressions.\n\n // > There are 12 characters with special meanings:\n // > - the backslash \\,\n // > - the caret ^,\n // > - the dollar sign $,\n // > - the period or dot .,\n // > - the vertical bar or pipe symbol |,\n // > - the question mark ?,\n // > - the asterisk or star *,\n // > - the plus sign +,\n // > - the opening parenthesis (,\n // > - the closing parenthesis ),\n // > - and the opening square bracket [,\n // > - the opening curly brace {,\n // > These special characters are often called \"metacharacters\".\n [\n /[\\\\$.|*+(){^]/g,\n match => `\\\\${match}`\n ],\n\n [\n // > a question mark (?) matches a single character\n /(?!\\\\)\\?/g,\n () => '[^/]'\n ],\n\n // leading slash\n [\n\n // > A leading slash matches the beginning of the pathname.\n // > For example, \"/*.c\" matches \"cat-file.c\" but not \"mozilla-sha1/sha1.c\".\n // A leading slash matches the beginning of the pathname\n /^\\//,\n () => '^'\n ],\n\n // replace special metacharacter slash after the leading slash\n [\n /\\//g,\n () => '\\\\/'\n ],\n\n [\n // > A leading \"**\" followed by a slash means match in all directories.\n // > For example, \"**/foo\" matches file or directory \"foo\" anywhere,\n // > the same as pattern \"foo\".\n // > \"**/foo/bar\" matches file or directory \"bar\" anywhere that is directly\n // > under directory \"foo\".\n // Notice that the '*'s have been replaced as '\\\\*'\n /^\\^*\\\\\\*\\\\\\*\\\\\\//,\n\n // '**/foo' <-> 'foo'\n () => '^(?:.*\\\\/)?'\n ],\n\n // starting\n [\n // there will be no leading '/'\n // (which has been replaced by section \"leading slash\")\n // If starts with '**', adding a '^' to the regular expression also works\n /^(?=[^^])/,\n function startingReplacer () {\n // If has a slash `/` at the beginning or middle\n return !/\\/(?!$)/.test(this)\n // > Prior to 2.22.1\n // > If the pattern does not contain a slash /,\n // > Git treats it as a shell glob pattern\n // Actually, if there is only a trailing slash,\n // git also treats it as a shell glob pattern\n\n // After 2.22.1 (compatible but clearer)\n // > If there is a separator at the beginning or middle (or both)\n // > of the pattern, then the pattern is relative to the directory\n // > level of the particular .gitignore file itself.\n // > Otherwise the pattern may also match at any level below\n // > the .gitignore level.\n ? '(?:^|\\\\/)'\n\n // > Otherwise, Git treats the pattern as a shell glob suitable for\n // > consumption by fnmatch(3)\n : '^'\n }\n ],\n\n // two globstars\n [\n // Use lookahead assertions so that we could match more than one `'/**'`\n /\\\\\\/\\\\\\*\\\\\\*(?=\\\\\\/|$)/g,\n\n // Zero, one or several directories\n // should not use '*', or it will be replaced by the next replacer\n\n // Check if it is not the last `'/**'`\n (_, index, str) => index + 6 < str.length\n\n // case: /**/\n // > A slash followed by two consecutive asterisks then a slash matches\n // > zero or more directories.\n // > For example, \"a/**/b\" matches \"a/b\", \"a/x/b\", \"a/x/y/b\" and so on.\n // '/**/'\n ? '(?:\\\\/[^\\\\/]+)*'\n\n // case: /**\n // > A trailing `\"/**\"` matches everything inside.\n\n // #21: everything inside but it should not include the current folder\n : '\\\\/.+'\n ],\n\n // normal intermediate wildcards\n [\n // Never replace escaped '*'\n // ignore rule '\\*' will match the path '*'\n\n // 'abc.*/' -> go\n // 'abc.*' -> skip this rule,\n // coz trailing single wildcard will be handed by [trailing wildcard]\n /(^|[^\\\\]+)(\\\\\\*)+(?=.+)/g,\n\n // '*.js' matches '.js'\n // '*.js' doesn't match 'abc'\n (_, p1, p2) => {\n // 1.\n // > An asterisk \"*\" matches anything except a slash.\n // 2.\n // > Other consecutive asterisks are considered regular asterisks\n // > and will match according to the previous rules.\n const unescaped = p2.replace(/\\\\\\*/g, '[^\\\\/]*')\n return p1 + unescaped\n }\n ],\n\n [\n // unescape, revert step 3 except for back slash\n // For example, if a user escape a '\\\\*',\n // after step 3, the result will be '\\\\\\\\\\\\*'\n /\\\\\\\\\\\\(?=[$.|*+(){^])/g,\n () => ESCAPE\n ],\n\n [\n // '\\\\\\\\' -> '\\\\'\n /\\\\\\\\/g,\n () => ESCAPE\n ],\n\n [\n // > The range notation, e.g. [a-zA-Z],\n // > can be used to match one of the characters in a range.\n\n // `\\` is escaped by step 3\n /(\\\\)?\\[([^\\]/]*?)(\\\\*)($|\\])/g,\n (match, leadEscape, range, endEscape, close) => leadEscape === ESCAPE\n // '\\\\[bar]' -> '\\\\\\\\[bar\\\\]'\n ? `\\\\[${range}${cleanRangeBackSlash(endEscape)}${close}`\n : close === ']'\n ? endEscape.length % 2 === 0\n // A normal case, and it is a range notation\n // '[bar]'\n // '[bar\\\\\\\\]'\n ? `[${sanitizeRange(range)}${endEscape}]`\n // Invalid range notaton\n // '[bar\\\\]' -> '[bar\\\\\\\\]'\n : '[]'\n : '[]'\n ],\n\n // ending\n [\n // 'js' will not match 'js.'\n // 'ab' will not match 'abc'\n /(?:[^*])$/,\n\n // WTF!\n // https://git-scm.com/docs/gitignore\n // changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1)\n // which re-fixes #24, #38\n\n // > If there is a separator at the end of the pattern then the pattern\n // > will only match directories, otherwise the pattern can match both\n // > files and directories.\n\n // 'js*' will not match 'a.js'\n // 'js/' will not match 'a.js'\n // 'js' will match 'a.js' and 'a.js/'\n match => /\\/$/.test(match)\n // foo/ will not match 'foo'\n ? `${match}$`\n // foo matches 'foo' and 'foo/'\n : `${match}(?=$|\\\\/$)`\n ],\n\n // trailing wildcard\n [\n /(\\^|\\\\\\/)?\\\\\\*$/,\n (_, p1) => {\n const prefix = p1\n // '\\^':\n // '/*' does not match EMPTY\n // '/*' does not match everything\n\n // '\\\\\\/':\n // 'abc/*' does not match 'abc/'\n ? `${p1}[^/]+`\n\n // 'a*' matches 'a'\n // 'a*' matches 'aa'\n : '[^/]*'\n\n return `${prefix}(?=$|\\\\/$)`\n }\n ],\n]\n\n// A simple cache, because an ignore rule only has only one certain meaning\nconst regexCache = Object.create(null)\n\n// @param {pattern}\nconst makeRegex = (pattern, ignoreCase) => {\n let source = regexCache[pattern]\n\n if (!source) {\n source = REPLACERS.reduce(\n (prev, [matcher, replacer]) =>\n prev.replace(matcher, replacer.bind(pattern)),\n pattern\n )\n regexCache[pattern] = source\n }\n\n return ignoreCase\n ? new RegExp(source, 'i')\n : new RegExp(source)\n}\n\nconst isString = subject => typeof subject === 'string'\n\n// > A blank line matches no files, so it can serve as a separator for readability.\nconst checkPattern = pattern => pattern\n && isString(pattern)\n && !REGEX_TEST_BLANK_LINE.test(pattern)\n && !REGEX_INVALID_TRAILING_BACKSLASH.test(pattern)\n\n // > A line starting with # serves as a comment.\n && pattern.indexOf('#') !== 0\n\nconst splitPattern = pattern => pattern.split(REGEX_SPLITALL_CRLF)\n\nclass IgnoreRule {\n constructor (\n origin,\n pattern,\n negative,\n regex\n ) {\n this.origin = origin\n this.pattern = pattern\n this.negative = negative\n this.regex = regex\n }\n}\n\nconst createRule = (pattern, ignoreCase) => {\n const origin = pattern\n let negative = false\n\n // > An optional prefix \"!\" which negates the pattern;\n if (pattern.indexOf('!') === 0) {\n negative = true\n pattern = pattern.substr(1)\n }\n\n pattern = pattern\n // > Put a backslash (\"\\\") in front of the first \"!\" for patterns that\n // > begin with a literal \"!\", for example, `\"\\!important!.txt\"`.\n .replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!')\n // > Put a backslash (\"\\\") in front of the first hash for patterns that\n // > begin with a hash.\n .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#')\n\n const regex = makeRegex(pattern, ignoreCase)\n\n return new IgnoreRule(\n origin,\n pattern,\n negative,\n regex\n )\n}\n\nconst throwError = (message, Ctor) => {\n throw new Ctor(message)\n}\n\nconst checkPath = (path, originalPath, doThrow) => {\n if (!isString(path)) {\n return doThrow(\n `path must be a string, but got \\`${originalPath}\\``,\n TypeError\n )\n }\n\n // We don't know if we should ignore EMPTY, so throw\n if (!path) {\n return doThrow(`path must not be empty`, TypeError)\n }\n\n // Check if it is a relative path\n if (checkPath.isNotRelative(path)) {\n const r = '`path.relative()`d'\n return doThrow(\n `path should be a ${r} string, but got \"${originalPath}\"`,\n RangeError\n )\n }\n\n return true\n}\n\nconst isNotRelative = path => REGEX_TEST_INVALID_PATH.test(path)\n\ncheckPath.isNotRelative = isNotRelative\ncheckPath.convert = p => p\n\nclass Ignore {\n constructor ({\n ignorecase = true,\n ignoreCase = ignorecase,\n allowRelativePaths = false\n } = {}) {\n define(this, KEY_IGNORE, true)\n\n this._rules = []\n this._ignoreCase = ignoreCase\n this._allowRelativePaths = allowRelativePaths\n this._initCache()\n }\n\n _initCache () {\n this._ignoreCache = Object.create(null)\n this._testCache = Object.create(null)\n }\n\n _addPattern (pattern) {\n // #32\n if (pattern && pattern[KEY_IGNORE]) {\n this._rules = this._rules.concat(pattern._rules)\n this._added = true\n return\n }\n\n if (checkPattern(pattern)) {\n const rule = createRule(pattern, this._ignoreCase)\n this._added = true\n this._rules.push(rule)\n }\n }\n\n // @param {Array<string> | string | Ignore} pattern\n add (pattern) {\n this._added = false\n\n makeArray(\n isString(pattern)\n ? splitPattern(pattern)\n : pattern\n ).forEach(this._addPattern, this)\n\n // Some rules have just added to the ignore,\n // making the behavior changed.\n if (this._added) {\n this._initCache()\n }\n\n return this\n }\n\n // legacy\n addPattern (pattern) {\n return this.add(pattern)\n }\n\n // | ignored : unignored\n // negative | 0:0 | 0:1 | 1:0 | 1:1\n // -------- | ------- | ------- | ------- | --------\n // 0 | TEST | TEST | SKIP | X\n // 1 | TESTIF | SKIP | TEST | X\n\n // - SKIP: always skip\n // - TEST: always test\n // - TESTIF: only test if checkUnignored\n // - X: that never happen\n\n // @param {boolean} whether should check if the path is unignored,\n // setting `checkUnignored` to `false` could reduce additional\n // path matching.\n\n // @returns {TestResult} true if a file is ignored\n _testOne (path, checkUnignored) {\n let ignored = false\n let unignored = false\n\n this._rules.forEach(rule => {\n const {negative} = rule\n if (\n unignored === negative && ignored !== unignored\n || negative && !ignored && !unignored && !checkUnignored\n ) {\n return\n }\n\n const matched = rule.regex.test(path)\n\n if (matched) {\n ignored = !negative\n unignored = negative\n }\n })\n\n return {\n ignored,\n unignored\n }\n }\n\n // @returns {TestResult}\n _test (originalPath, cache, checkUnignored, slices) {\n const path = originalPath\n // Supports nullable path\n && checkPath.convert(originalPath)\n\n checkPath(\n path,\n originalPath,\n this._allowRelativePaths\n ? RETURN_FALSE\n : throwError\n )\n\n return this._t(path, cache, checkUnignored, slices)\n }\n\n _t (path, cache, checkUnignored, slices) {\n if (path in cache) {\n return cache[path]\n }\n\n if (!slices) {\n // path/to/a.js\n // ['path', 'to', 'a.js']\n slices = path.split(SLASH)\n }\n\n slices.pop()\n\n // If the path has no parent directory, just test it\n if (!slices.length) {\n return cache[path] = this._testOne(path, checkUnignored)\n }\n\n const parent = this._t(\n slices.join(SLASH) + SLASH,\n cache,\n checkUnignored,\n slices\n )\n\n // If the path contains a parent directory, check the parent first\n return cache[path] = parent.ignored\n // > It is not possible to re-include a file if a parent directory of\n // > that file is excluded.\n ? parent\n : this._testOne(path, checkUnignored)\n }\n\n ignores (path) {\n return this._test(path, this._ignoreCache, false).ignored\n }\n\n createFilter () {\n return path => !this.ignores(path)\n }\n\n filter (paths) {\n return makeArray(paths).filter(this.createFilter())\n }\n\n // @returns {TestResult}\n test (path) {\n return this._test(path, this._testCache, true)\n }\n}\n\nconst factory = options => new Ignore(options)\n\nconst isPathValid = path =>\n checkPath(path && checkPath.convert(path), path, RETURN_FALSE)\n\nfactory.isPathValid = isPathValid\n\n// Fixes typescript\nfactory.default = factory\n\nmodule.exports = factory\n\n// Windows\n// --------------------------------------------------------------\n/* istanbul ignore if */\nif (\n // Detect `process` so that it can run in browsers.\n typeof process !== 'undefined'\n && (\n process.env && process.env.IGNORE_TEST_WIN32\n || process.platform === 'win32'\n )\n) {\n /* eslint no-control-regex: \"off\" */\n const makePosix = str => /^\\\\\\\\\\?\\\\/.test(str)\n || /[\"<>|\\u0000-\\u001F]+/u.test(str)\n ? str\n : str.replace(/\\\\/g, '/')\n\n checkPath.convert = makePosix\n\n // 'C:\\\\foo' <- 'C:\\\\foo' has been converted to 'C:/'\n // 'd:\\\\foo'\n const REGIX_IS_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\\//i\n checkPath.isNotRelative = path =>\n REGIX_IS_WINDOWS_PATH_ABSOLUTE.test(path)\n || isNotRelative(path)\n}\n",
|
|
98
|
-
"const fsx = require('./fsx')\nconst ignore = require('ignore')\n\nfunction isIgnoringDotenvKeys () {\n if (!fsx.existsSync('.gitignore')) {\n return false\n }\n\n const gitignore = fsx.readFileX('.gitignore')\n const ig = ignore(gitignore).add(gitignore)\n\n if (!ig.ignores('.env.keys')) {\n return false\n }\n\n return true\n}\n\nmodule.exports = isIgnoringDotenvKeys\n",
|
|
99
|
-
"// @ts-check\nconst path = require('path')\n\n// shared\nconst { setLogLevel, setLogName, setLogVersion, logger } = require('./../shared/logger')\nconst { getColor, bold } = require('./../shared/colors')\n\n// services\nconst Ls = require('./services/ls')\nconst Run = require('./services/run')\nconst Sets = require('./services/sets')\nconst Get = require('./services/get')\nconst Keypair = require('./services/keypair')\nconst Genexample = require('./services/genexample')\nconst Radar = require('./services/radar')\nconst Ops = require('./services/ops')\n\n// helpers\nconst buildEnvs = require('./helpers/buildEnvs')\nconst Parse = require('./helpers/parse')\nconst fsx = require('./helpers/fsx')\nconst isIgnoringDotenvKeys = require('./helpers/isIgnoringDotenvKeys')\n\n/** @type {import('./main').config} */\nconst config = function (options = {}) {\n // allow user to set processEnv to write to\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n // overload\n const overload = options.overload || options.override\n\n // ignore\n const ignore = options.ignore || []\n\n // strict\n const strict = options.strict\n\n // envKeysFile\n const envKeysFile = options.envKeysFile\n\n // DOTENV_KEY (DEPRECATED)\n let DOTENV_KEY = process.env.DOTENV_KEY\n if (options && options.DOTENV_KEY) {\n DOTENV_KEY = options.DOTENV_KEY\n }\n\n // dotenvx-ops related\n const opsOn = options.opsOff !== true\n\n if (options) {\n setLogLevel(options)\n setLogName(options)\n setLogVersion(options)\n }\n\n try {\n const envs = buildEnvs(options, DOTENV_KEY)\n const {\n beforeEnv,\n afterEnv,\n processedEnvs,\n readableFilepaths,\n uniqueInjectedKeys\n } = new Run(envs, overload, DOTENV_KEY, processEnv, envKeysFile, opsOn).run()\n\n if (opsOn) {\n try { new Radar().observe({ beforeEnv, processedEnvs, afterEnv }) } catch {}\n try { new Ops().observe({ beforeEnv, processedEnvs, afterEnv }) } catch {}\n }\n\n let lastError\n /** @type {Record<string, string>} */\n const parsedAll = {}\n for (const processedEnv of processedEnvs) {\n if (processedEnv.type === 'envVaultFile') {\n logger.verbose(`loading env from encrypted ${processedEnv.filepath} (${path.resolve(processedEnv.filepath)})`)\n logger.debug(`decrypting encrypted env from ${processedEnv.filepath} (${path.resolve(processedEnv.filepath)})`)\n }\n\n if (processedEnv.type === 'envFile') {\n logger.verbose(`loading env from ${processedEnv.filepath} (${path.resolve(processedEnv.filepath)})`)\n }\n\n for (const error of processedEnv.errors || []) {\n if (ignore.includes(error.code)) {\n logger.verbose(`ignored: ${error.message}`)\n continue // ignore error\n }\n\n if (strict) throw error // throw if strict and not ignored\n\n lastError = error // surface later in { error }\n\n if (error.code === 'MISSING_ENV_FILE') {\n if (!options.convention) { // do not output error for conventions (too noisy)\n logger.error(error.message)\n if (error.help) {\n logger.error(error.help)\n }\n }\n } else {\n logger.error(error.message)\n if (error.help) {\n logger.error(error.help)\n }\n }\n }\n\n Object.assign(parsedAll, processedEnv.injected || {})\n Object.assign(parsedAll, processedEnv.preExisted || {}) // preExisted 'wins'\n\n // debug parsed\n logger.debug(processedEnv.parsed)\n\n // verbose/debug injected key/value\n for (const [key, value] of Object.entries(processedEnv.injected || {})) {\n logger.verbose(`${key} set`)\n logger.debug(`${key} set to ${value}`)\n }\n\n // verbose/debug preExisted key/value\n for (const [key, value] of Object.entries(processedEnv.preExisted || {})) {\n logger.verbose(`${key} pre-exists (protip: use --overload to override)`)\n logger.debug(`${key} pre-exists as ${value} (protip: use --overload to override)`)\n }\n }\n\n let msg = `injecting env (${uniqueInjectedKeys.length})`\n if (readableFilepaths.length > 0) {\n msg += ` from ${readableFilepaths.join(', ')}`\n }\n logger.successv(msg)\n\n if (lastError) {\n return { parsed: parsedAll, error: lastError }\n } else {\n return { parsed: parsedAll }\n }\n } catch (error) {\n if (strict) throw error // throw immediately if strict\n\n logger.error(error.message)\n if (error.help) {\n logger.help(error.help)\n }\n\n return { parsed: {}, error }\n }\n}\n\n/** @type {import('./main').parse} */\nconst parse = function (src, options = {}) {\n // allow user to set processEnv to read from\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n // private decryption key\n const privateKey = options.privateKey || null\n\n // overload\n const overload = options.overload || options.override\n\n const { parsed, errors } = new Parse(src, privateKey, processEnv, overload).run()\n\n // display any errors\n for (const error of errors) {\n logger.error(error.message)\n if (error.help) {\n logger.error(error.help)\n }\n }\n\n return parsed\n}\n\n/* @type {import('./main').set} */\nconst set = function (key, value, options = {}) {\n // encrypt\n let encrypt = true\n if (options.plain) {\n encrypt = false\n } else if (options.encrypt === false) {\n encrypt = false\n }\n\n const envs = buildEnvs(options)\n const envKeysFilepath = options.envKeysFile\n\n const {\n processedEnvs,\n changedFilepaths,\n unchangedFilepaths\n } = new Sets(key, value, envs, encrypt, envKeysFilepath).run()\n\n let withEncryption = ''\n\n if (encrypt) {\n withEncryption = ' with encryption'\n }\n\n for (const processedEnv of processedEnvs) {\n logger.verbose(`setting for ${processedEnv.envFilepath}`)\n\n if (processedEnv.error) {\n if (processedEnv.error.code === 'MISSING_ENV_FILE') {\n logger.warn(processedEnv.error.message)\n logger.help(`? add one with [echo \"HELLO=World\" > ${processedEnv.envFilepath}] and re-run [dotenvx set]`)\n } else {\n logger.warn(processedEnv.error.message)\n if (processedEnv.error.help) {\n logger.help(processedEnv.error.help)\n }\n }\n } else {\n fsx.writeFileX(processedEnv.filepath, processedEnv.envSrc)\n\n logger.verbose(`${processedEnv.key} set${withEncryption} (${processedEnv.envFilepath})`)\n logger.debug(`${processedEnv.key} set${withEncryption} to ${processedEnv.value} (${processedEnv.envFilepath})`)\n }\n }\n\n if (changedFilepaths.length > 0) {\n logger.success(`✔ set ${key}${withEncryption} (${changedFilepaths.join(',')})`)\n } else if (unchangedFilepaths.length > 0) {\n logger.info(`no changes (${unchangedFilepaths})`)\n } else {\n // do nothing\n }\n\n for (const processedEnv of processedEnvs) {\n if (processedEnv.privateKeyAdded) {\n logger.success(`✔ key added to ${processedEnv.envKeysFilepath} (${processedEnv.privateKeyName})`)\n\n if (!isIgnoringDotenvKeys()) {\n logger.help('⮕ next run [dotenvx ext gitignore --pattern .env.keys] to gitignore .env.keys')\n }\n\n logger.help(`⮕ next run [${processedEnv.privateKeyName}='${processedEnv.privateKey}' dotenvx get ${key}] to test decryption locally`)\n }\n }\n\n return {\n processedEnvs,\n changedFilepaths,\n unchangedFilepaths\n }\n}\n\n/* @type {import('./main').get} */\nconst get = function (key, options = {}) {\n const envs = buildEnvs(options)\n\n // ignore\n const ignore = options.ignore || []\n\n const { parsed, errors } = new Get(key, envs, options.overload, process.env.DOTENV_KEY, options.all, options.envKeysFile).run()\n\n for (const error of errors || []) {\n if (ignore.includes(error.code)) {\n continue // ignore error\n }\n\n if (options.strict) throw error // throw immediately if strict\n\n logger.error(error.message)\n if (error.help) {\n logger.error(error.help)\n }\n }\n\n if (key) {\n const single = parsed[key]\n if (single === undefined) {\n return undefined\n } else {\n return single\n }\n } else {\n if (options.format === 'eval') {\n let inline = ''\n for (const [key, value] of Object.entries(parsed)) {\n inline += `${key}=${escape(value)}\\n`\n }\n inline = inline.trim()\n\n return inline\n } else if (options.format === 'shell') {\n let inline = ''\n for (const [key, value] of Object.entries(parsed)) {\n inline += `${key}=${value} `\n }\n inline = inline.trim()\n\n return inline\n } else {\n return parsed\n }\n }\n}\n\n/** @type {import('./main').ls} */\nconst ls = function (directory, envFile, excludeEnvFile) {\n return new Ls(directory, envFile, excludeEnvFile).run()\n}\n\n/** @type {import('./main').genexample} */\nconst genexample = function (directory, envFile) {\n return new Genexample(directory, envFile).run()\n}\n\n/** @type {import('./main').keypair} */\nconst keypair = function (envFile, key, envKeysFile = null) {\n const keypairs = new Keypair(envFile, envKeysFile).run()\n if (key) {\n return keypairs[key]\n } else {\n return keypairs\n }\n}\n\nmodule.exports = {\n // dotenv proxies\n config,\n parse,\n // actions related\n set,\n get,\n ls,\n keypair,\n genexample,\n // expose for libs depending on @dotenvx/dotenvx - like dotenvx-radar\n setLogLevel,\n logger,\n getColor,\n bold\n}\n",
|
|
100
|
-
"import path from 'node:path'\nimport dotenv from '@dotenvx/dotenvx'\nimport { augmentEnv } from './augment-env'\n\n/**\n * Dealing with env variables can be complicated. So we need to simplify the process\n *\n * Bun automatically loads a .env (or .env.[NODE_ENV]) file which will be detected\n * here as system set env variables and dotenvx won't work properly with USE_ENV.\n *\n * The way to fix this behaviour is to know how to separate between env set from the shell\n * and env loaded by bun.\n *\n * 1. Check the env loaded by bun according to its logic (load using NODE_ENV)\n * 2. If USE_ENV !== NODE_ENV, load those variables\n * 3. For each env loaded automatically by bun, we override the process env with the values from the loaded env.$USE_ENv files\n */\nexport const initEnv = async (pathPrefix?: string) => {\n if (!process.env.USE_ENV) {\n if (process.env.NODE_ENV && process.env.NODE_ENV !== 'development') {\n return\n }\n\n process.env.USE_ENV = process.env.NODE_ENV || 'development'\n }\n\n // By default bun will load the .env files, so for example, if NODE_ENV=production,\n // it will load the .env.production file even if we're in the staging env (USE_ENV=staging)\n // so we need to override that behaviour\n const nodeEnv = process.env.NODE_ENV || 'development'\n if (!process.env.NODE_ENV) {\n console.log('No NODE_ENV found, loading development env')\n }\n\n // For these, we won't need to load them into the env because bun did\n // however, we record them to override them in case USE_ENV is different from NODE_ENV\n const bunLoadedEnv: Record<string, string> = {}\n dotenv.config({\n convention: 'nextjs',\n ignore: ['MISSING_ENV_FILE'],\n path: prefix(\n [`.env.${nodeEnv}.local`, `.env.${nodeEnv}`, '.env.local', '.env'],\n pathPrefix,\n ),\n processEnv: bunLoadedEnv,\n logLevel: 'info',\n })\n\n // If USE_ENV is different from NODE_ENV, we need to load the .env.${USE_ENV} file and override\n // bun's loaded env from the files\n if (process.env.USE_ENV !== process.env.NODE_ENV) {\n const envBackup = process.env.NODE_ENV\n\n // Load the .env files initially\n const useEnvLoadedEnv: Record<string, string> = {}\n dotenv.config({\n ignore: ['MISSING_ENV_FILE'],\n // With override, the order is important. We must use override here\n // to override the loaded env from bun and the system env\n override: true,\n // !! Order is important here, the last one will override the first one\n path: prefix(\n [`.env.${process.env.USE_ENV}`, `.env.${process.env.USE_ENV}.local`],\n pathPrefix,\n ),\n logLevel: 'info',\n processEnv: useEnvLoadedEnv,\n })\n\n for (const [key, value] of Object.entries(useEnvLoadedEnv)) {\n // No process env found, just set it\n if (!process.env[key]) {\n process.env[key] = value\n }\n\n if (bunLoadedEnv[key] !== value) {\n // Now we set the value in the process env to override bun's loaded env\n process.env[key] = value\n }\n\n // Here we do nothing because the env was set from the shell\n }\n process.env.NODE_ENV = envBackup\n } else {\n // USE_ENV and NODE_ENV are the same, so we just use the bun loaded env\n for (const [key, value] of Object.entries(bunLoadedEnv)) {\n process.env[key] = value\n }\n }\n\n // Augment the env with the base configs\n augmentEnv()\n}\n\nconst prefix = (paths: string[], pathPrefix?: string) => {\n if (!pathPrefix) {\n return paths\n }\n\n return paths.map((p) => path.join(pathPrefix, p))\n}\n"
|
|
101
5
|
],
|
|
102
|
-
"mappings": "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",
|
|
103
|
-
"debugId": "
|
|
6
|
+
"mappings": "",
|
|
7
|
+
"debugId": "80407CC5F0328C9764756E2164756E21",
|
|
104
8
|
"names": []
|
|
105
9
|
}
|