diff --git a/CyberChef_backport_changes-10.22.1.txt b/CyberChef_backport_changes-10.22.1.txt new file mode 100644 index 00000000..ed42087f --- /dev/null +++ b/CyberChef_backport_changes-10.22.1.txt @@ -0,0 +1,5755 @@ +CHANGED: .editorconfig — mkilijanek/.editorconfig +++ gchq/.editorconfig +@@ -12,3 +12,7 @@ [{package.json,.travis.yml,nightwatch.json}] + +indent_style = space + +indent_size = 2 + +- + ++[.github/**.yml] + ++indent_style = space + ++indent_size = 2 + +REMOVED in gchq (exists in mkilijanek): .github/dependabot.yml REMOVED +in gchq (exists in mkilijanek): .github/workflows/codeql-analysis.yml +REMOVED in gchq (exists in mkilijanek): .github/workflows/codeql.yml +REMOVED in gchq (exists in mkilijanek): +.github/workflows/dependency-review.yml + +CHANGED: .github/workflows/master.yml — +mkilijanek/.github/workflows/master.yml +++ +gchq/.github/workflows/master.yml @@ -2,129 +2,64 @@ + +on: + +workflow_dispatch: + +- inputs: + +- nightly: + +- description: "Tag build as nightly" + +- required: false + +- default: "false" + + push: + + branches: + +- - master + +- schedule: + +- Weekly build and publish to keep images fresh + +- - cron: ‘0 3 * * 1’ + +- - master + +-env: + +- REGISTRY: ghcr.io + +- IMAGE_NAME: ${{ github.repository }} + +- PLATFORMS: linux/amd64,linux/arm64 + +- + +-env: + +- REGISTRY: ghcr.io + +- IMAGE_NAME: ${{ github.repository }} + +- PLATFORMS: linux/amd64,linux/arm64 + ++permissions: + +- contents: read + +jobs: + +main: + +- permissions: + +- contents: write + +- pages: write + + runs-on: ubuntu-latest + + steps: + +- - uses: actions/checkout@v3 + +- - uses: actions/checkout@v6 + +- - name: Set node version + +- uses: actions/setup-node@v3 + +- with: + +- node-version: '18.x' + +- - name: Set node version + +- uses: actions/setup-node@v6 + +- with: + +- node-version: 18 + +- registry-url: "https://registry.npmjs.org" + +- - name: Install + +- run: | + +- export DETECT_CHROMEDRIVER_VERSION=true + +- npm install + +- npm run setheapsize + +- - name: Install + +- run: | + +- export DETECT_CHROMEDRIVER_VERSION=true + +- npm install + +- npm run setheapsize + +- - name: Lint + +- run: npx grunt lint + +- - name: Lint + +- run: npx grunt lint + +- - name: Unit Tests + +- run: | + +- npm test + +- npm run testnodeconsumer + +- - name: Unit Tests + +- run: | + +- npm test + +- npm run testnodeconsumer + +- - name: Production Build + +- if: success() + +- run: npx grunt prod --msg="Version 10 is here! Read about the new features here" + +- - name: Production Build + +- if: success() + +- run: npx grunt prod --msg="" + +- - name: Generate sitemap + +- run: npx grunt exec:sitemap + +- - name: Generate sitemap + +- run: npx grunt exec:sitemap + +- - name: UI Tests + +- if: success() + +- run: | + +- sudo apt-get install xvfb + +- xvfb-run --server-args="-screen 0 1200x800x24" npx grunt testui + +- - name: UI Tests + +- if: success() + +- run: | + +- sudo apt-get install xvfb + +- xvfb-run --server-args="-screen 0 1200x800x24" npx grunt testui + +- - name: Prepare for GitHub Pages + +- if: success() + +- run: npx grunt copy:ghPages + +- - name: Prepare for GitHub Pages + +- if: success() + +- run: npx grunt copy:ghPages + +- - name: Deploy to GitHub Pages + +- if: success() && github.ref == 'refs/heads/master' + +- uses: crazy-max/ghaction-github-pages@v3 + +- with: + +- target_branch: gh-pages + +- build_dir: ./build/prod + +- env: + +- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + +- + +- docker-images: + +- name: Build & Publish Docker Images + +- runs-on: ubuntu-latest + +- needs: main + +- if: github.ref == ‘refs/heads/master’ + +- permissions: + +- contents: read + +- packages: write + +- steps: + +- - uses: actions/checkout@v4 + +- + +- - name: Set up QEMU + +- uses: docker/setup-qemu-action@v3 + +- + +- - name: Set up Docker Buildx + +- uses: docker/setup-buildx-action@v3 + +- + +- - name: Log in to GitHub Container Registry + +- uses: docker/login-action@v3 + +- with: + +- registry: ${{ env.REGISTRY }} + +- username: ${{ github.actor }} + +- password: ${{ secrets.GITHUB_TOKEN }} + +- + +- - name: Set extra tags + +- run: | + +- if [ "${{ github.event_name }}" = "workflow_dispatch" ] && [ "${{ github.event.inputs.nightly }}" = "true" ]; then + +- echo "EXTRA_TAGS=type=raw,value=nightly" >> $GITHUB_ENV + +- else + +- echo "EXTRA_TAGS=" >> $GITHUB_ENV + +- fi + +- + +- - name: Docker metadata + +- id: meta + +- uses: docker/metadata-action@v5 + +- with: + +- images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + +- tags: | + +- type=raw,value=latest + +- type=sha,format=long + +- ${{ env.EXTRA_TAGS }} + +- + +- - name: Build and push multi-arch image + +- uses: docker/build-push-action@v5 + +- with: + +- context: . + +- file: ./Dockerfile + +- platforms: ${{ env.PLATFORMS }} + +- push: true + +- tags: ${{ steps.meta.outputs.tags }} + +- labels: ${{ steps.meta.outputs.labels }} + +- cache-from: type=gha + +- cache-to: type=gha,mode=max + +- - name: Deploy to GitHub Pages + +- if: success() && github.ref == 'refs/heads/master' + +- uses: crazy-max/ghaction-github-pages@v3 + +- with: + +- target_branch: gh-pages + +- build_dir: ./build/prod + +- env: + +- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + +CHANGED: .github/workflows/pull_requests.yml — +mkilijanek/.github/workflows/pull_requests.yml +++ +gchq/.github/workflows/pull_requests.yml @@ -1,4 +1,7 @@ name: “Pull +Requests” + +- + ++permissions: + +- contents: read + +on: + +workflow_dispatch: + +@@ -9,47 +12,46 @@ main: + + runs-on: ubuntu-latest + + steps: + +- - uses: actions/checkout@v3 + +- - uses: actions/checkout@v6 + +- - name: Set node version + +- uses: actions/setup-node@v3 + +- with: + +- node-version: '18.x' + +- - name: Set node version + +- uses: actions/setup-node@v6 + +- with: + +- node-version: 18 + +- registry-url: "https://registry.npmjs.org" + +- - name: Install + +- run: | + +- export DETECT_CHROMEDRIVER_VERSION=true + +- npm install + +- npm run setheapsize + +- - name: Install + +- run: | + +- export DETECT_CHROMEDRIVER_VERSION=true + +- npm install + +- npm run setheapsize + +- - name: Lint + +- run: npx grunt lint + +- - name: Lint + +- run: npx grunt lint + +- - name: Unit Tests + +- run: | + +- npm test + +- npm run testnodeconsumer + +- - name: Unit Tests + +- run: | + +- npm test + +- npm run testnodeconsumer + +- - name: Production Build + +- if: success() + +- run: npx grunt prod + +- - name: Production Build + +- if: success() + +- run: npx grunt prod + +- - name: Production Image Build + +- if: success() + +- id: build-image + +- uses: redhat-actions/buildah-build@v2 + +- with: + +- # Not being uploaded to any registry, use a simple name to allow Buildah to build correctly. + +- image: cyberchef + +- containerfiles: ./Dockerfile + +- platforms: linux/amd64 + +- oci: true + +- # Webpack seems to use a lot of open files, increase the max open file limit to accomodate. + +- extra-args: | + +- --ulimit nofile=10000 + +- - name: Set up Docker Buildx + +- uses: docker/setup-buildx-action@v3 + +- - name: UI Tests + +- if: success() + +- run: | + +- sudo apt-get install xvfb + +- xvfb-run --server-args="-screen 0 1200x800x24" npx grunt testui + +- - name: Set up QEMU + +- uses: docker/setup-qemu-action@v3 + +- + +- - name: Production Image Build + +- if: success() + +- id: build-image + +- uses: docker/build-push-action@v6 + +- with: + +- platforms: linux/amd64,linux/arm64 + +- - name: UI Tests + +- if: success() + +- run: | + +- sudo apt-get install xvfb + +- xvfb-run --server-args="-screen 0 1200x800x24" npx grunt testui + +CHANGED: .github/workflows/releases.yml — +mkilijanek/.github/workflows/releases.yml +++ +gchq/.github/workflows/releases.yml @@ -4,7 +4,10 @@ workflow_dispatch: + +push: + + tags: + +- - ’v*’ + +- - "v*" + +- + ++permissions: + +- contents: read + +env: + +REGISTRY: ghcr.io + +@@ -14,83 +17,110 @@ + +jobs: + +main: + +- permissions: + +- packages: write + +- contents: write + + runs-on: ubuntu-latest + + steps: + +- - uses: actions/checkout@v3 + +- - uses: actions/checkout@v6 + +- - name: Set node version + +- uses: actions/setup-node@v3 + +- with: + +- node-version: '18.x' + +- - name: Set node version + +- uses: actions/setup-node@v6 + +- with: + +- node-version: 18 + +- registry-url: "https://registry.npmjs.org" + +- - name: Install + +- run: | + +- export DETECT_CHROMEDRIVER_VERSION=true + +- npm ci + +- npm run setheapsize + +- - name: Install + +- run: | + +- export DETECT_CHROMEDRIVER_VERSION=true + +- npm ci + +- npm run setheapsize + +- - name: Lint + +- run: npx grunt lint + +- - name: Lint + +- run: npx grunt lint + +- - name: Unit Tests + +- run: | + +- npm test + +- npm run testnodeconsumer + +- - name: Unit Tests + +- run: | + +- npm test + +- npm run testnodeconsumer + +- - name: Production Build + +- run: npx grunt prod + +- - name: Production Build + +- run: npx grunt prod + +- - name: UI Tests + +- run: | + +- sudo apt-get install xvfb + +- xvfb-run --server-args="-screen 0 1200x800x24" npx grunt testui + +- - name: UI Tests + +- run: | + +- sudo apt-get install xvfb + +- xvfb-run --server-args="-screen 0 1200x800x24" npx grunt testui + +- - name: Image Metadata + +- id: image-metadata + +- uses: docker/metadata-action@v4 + +- with: + +- images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + +- tags: | + +- type=semver,pattern={{major}} + +- type=semver,pattern={{major}}.{{minor}} + +- type=semver,pattern={{version}} + +- - name: Set up Docker Buildx + +- uses: docker/setup-buildx-action@v3 + +- - name: Production Image Build + +- id: build-image + +- uses: redhat-actions/buildah-build@v2 + +- with: + +- tags: ${{ steps.image-metadata.outputs.tags }} + +- labels: ${{ steps.image-metadata.outputs.labels }} + +- containerfiles: ./Dockerfile + +- platforms: linux/amd64,linux/arm64 + +- oci: true + +- # enable build layer caching between platforms + +- layers: true + +- # Webpack seems to use a lot of open files, increase the max open file limit to accomodate. + +- extra-args: | + +- --ulimit nofile=10000 + +- - name: Set up QEMU + +- uses: docker/setup-qemu-action@v3 + +- - name: Publish to GHCR + +- uses: redhat-actions/push-to-registry@v2 + +- with: + +- image: ${{ steps.build-image.outputs.image }} + +- tags: ${{ steps.build-image.outputs.tags }} + +- registry: ${{ env.REGISTRY }} + +- username: ${{ env.REGISTRY_USER }} + +- password: ${{ env.REGISTRY_PASSWORD }} + +- - name: Image Metadata + +- id: image-metadata + +- uses: docker/metadata-action@v4 + +- with: + +- images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + +- tags: | + +- type=semver,pattern={{major}} + +- type=semver,pattern={{major}}.{{minor}} + +- type=semver,pattern={{version}} + +- - name: Upload Release Assets + +- id: upload-release-assets + +- uses: svenstaro/upload-release-action@v2 + +- with: + +- repo_token: ${{ secrets.GITHUB_TOKEN }} + +- file: build/prod/*.zip + +- tag: ${{ github.ref }} + +- overwrite: true + +- file_glob: true + +- body: "See the [CHANGELOG](https://github.com/gchq/CyberChef/blob/master/CHANGELOG.md) and [commit messages](https://github.com/gchq/CyberChef/commits/master) for details." + +- - name: Log in to GHCR + +- uses: docker/login-action@v3 + +- with: + +- registry: ${{ env.REGISTRY }} + +- username: ${{ env.REGISTRY_USER }} + +- password: ${{ env.REGISTRY_PASSWORD }} + +- - name: Publish to NPM + +- uses: JS-DevTools/npm-publish@v1 + +- with: + +- token: ${{ secrets.NPM_TOKEN }} + +- - name: Publish to GHCR + +- uses: docker/build-push-action@v6 + +- with: + +- context: . + +- push: true + +- tags: ${{ steps.image-metadata.outputs.tags }} + +- labels: ${{ steps.image-metadata.outputs.labels }} + +- platforms: linux/amd64,linux/arm64 + +- + +- - name: Upload Release Assets + +- id: upload-release-assets + +- uses: svenstaro/upload-release-action@v2 + +- with: + +- repo_token: ${{ secrets.GITHUB_TOKEN }} + +- file: build/prod/*.zip + +- tag: ${{ github.ref }} + +- overwrite: true + +- file_glob: true + +- body: "See the [CHANGELOG](https://github.com/gchq/CyberChef/blob/master/CHANGELOG.md) and [commit messages](https://github.com/gchq/CyberChef/commits/master) for details." + +- + +- npm-publish: + +- permissions: + +- id-token: write + +- contents: read + +- needs: main + +- runs-on: ubuntu-latest + +- steps: + +- - uses: actions/checkout@v6 + +- + +- - name: Set node version + +- uses: actions/setup-node@v6 + +- with: + +- node-version: 18 + +- registry-url: "https://registry.npmjs.org" + +- + +- - name: Install + +- run: npm ci + +- + +- - name: Create machine generated files + +- run: npm run node + +- + +- - name: Reset node version ready for publish + +- uses: actions/setup-node@v6 + +- with: + +- node-version: ^24.5 + +- registry-url: "https://registry.npmjs.org" + +- + +- - name: Publish to NPM + +- run: npm publish + +REMOVED in gchq (exists in mkilijanek): +.github/workflows/security-auto-fix.yml + +CHANGED: CHANGELOG.md — mkilijanek/CHANGELOG.md +++ gchq/CHANGELOG.md @@ +-12,6 +12,104 @@ + +## Details + +- + ++### [10.22.0] - 2026-02-11 + ++- Separate npm publish out into separate job and run with Node 24.5 +[@GCHQDeveloper581] | [#2188] + ++- Fixed Percent delimiter for hex encoding [@beneri] [@C85297] | +[#2137] + ++- Added the ability to paste one or more Images from the Clipboard +[@t-martine] [@a3957273] [@C85297] | [#1876] + ++- Quoted Printable - consistent reference to ‘email’ [@wesinator] | +[#2186] + ++- Fix freeze when output text decoding fails [@Raka-loah] | [#1573] + ++- Update Browserslist DB [@C85297] | [#2183] + ++- Add contents write permission to releases workflow [@C85297] | +[#2182] + ++- Fix release workflow permissions [@C85297] | [#2181] + +- + ++### [10.21.0] - 2026-02-05 + ++- Fix import operations with special chars in them [@d98762625] +[@jg42526] | [#1040] + ++- Remove custom CodeQL workflow [@C85297] | [#2176] + ++- Fix code scanning warnings in workflows [@GCHQDeveloper581] | [#2177] + ++- Use NPM trusted publishing [@C85297] [@GCHQDeveloper581] | [#2174] + ++- Fix: Correctly parse xxd odd byte hexdumps [@ThomasNotTom] +[@GCHQDeveloper581] | [#2058] + ++- Update Sitemap URLs to Use Valid Paths in sitemap.mjs [@rbpi] +[@C85297] | [#1861] + ++- Use recommended GitHub Actions to build image [@AlexGustafsson] +[@C85297] | [#2055] + ++- Remove version 10 message from banner [@C85297] | [#2169] + ++- Bump form-data from 4.0.1 to 4.0.5 | [#2175] + ++- Bump node-forge from 1.3.1 to 1.3.3 | [#2173] + ++- Update crypto browserify [@C85297] | [#2172] + ++- Update kbpgp package (resolves #2135) [@GCHQDeveloper581] | [#2136] + ++- Fix the processing of ALPNs for JA4 to align with new specification +update [@tuliperis] | [#2165] + ++- Add Bech32 and Bech32m encoding/decoding operations [@thomasxm] | +[#2159] + ++- Exclude Delete character from hex dump output [@mikecat] [@C85297] | +[#2086] + ++- Tiny typo fix in “To Base85” operation [@twostraws] | [#2118] + ++- Bump jsonpath-plus [@C85297] | [#2166] + +- + ++### [10.20.0] - 2026-01-28 + ++- Fixed Optical Character Recognition and added tests [@n1474335] | +[ab37c1e] + ++- Fixed JA4 version fallback value [@n1474335] | [7a5225c] + ++- Updated chromedriver [@n1474335] | [0e82e4b] + ++- Fixed RSA Sign and Verify character encodings [@n1474335] | [895a929] + ++- Updated chromedriver [@n1474335] | [d3adfc7] + ++- Added message format arg to RSA Verify operation [@n1474335] | +[47c85a1] + ++- Add operation for parsing X.509 CRLs [@robinsandhu] | [#1887] + ++- Fix typo in description of JWT Sign recipe [@GuilhermoReadonly] | +[#1961] + ++- Corrected path to generateNodeIndex.mjs [@simonarnell] | [#1959] + ++- Add ‘header’ ingredient to JWT Sign operation [@RandomByte] | [#1957] + ++- Add Parse TLS record operation [@c65722] | [#1936] + ++- Automatically detect chrome driver version [@gchq] | [#1972] + ++- Add Strip UDP header operation [@c65722] | [#1900] + ++- Add Strip TCP header operation [@c65722] | [#1898] + ++- Webpack compress with gzip and brotli [@max0x53] | [#1955] + ++- add offset field to ‘Add Line Numbers’ operation [@Adamkadaban] | +[#1866] + ++- Disable flakey URL test [@a3957273] | [#1973] + ++- Add Strip IPv4 header operation [@c65722] | [#1899] + ++- IPv6 Transition Operation [@jb30795] | [#1780] + ++- fix: Blowfish - ignore IV length in ECB mode [@FranciscoPombal] | +[#1902] + ++- Add ‘Drop nth bytes’ operation [@Oshawk] | [#1914] + ++- Add ‘Take nth bytes’ operation [@Oshawk] | [#1915] + ++- Add Leet Speak [@bartblaze] | [#1971] + ++- Fix Generate TOTP & HOPT [@exactlyaron] | [#1966] + ++- Updated luhn checksum operation to work with different bases [@k3ach] +| [#1933] + ++- automatically theme mode based on user preference [@vs4vijay] | +[#1921] + ++- fix: DES/Triple DES - misleading error messages [@FranciscoPombal] | +[#1904] + ++- fix: ROT13 - shifting numbers by negative amounts [@FranciscoPombal] +| [#1903] + ++- Introduce Yubico’s Modhex for Conversion [@linuxgemini] | [#1105] + ++- Feature: MIME RFC2047 Decoding [@MShwed] | [#630] + ++- CC-1889 add _ option [@depperm] | [#1977] + ++- chore(root): add cspell [@evenstensberg] | [#1976] + ++- Preserve uppercase for Leet Speak [@bartblaze] | [#1981] + ++- Load the user’s preferred color scheme if the URL contains an invalid +theme [@0xh3xa] | [#2007] + ++- Add SM2 Encrypt and Decrypt Operations [@flakjacket95] | [#1909] + ++- Support jq as an operation. [@zhzy0077] | [#1604] + ++- Add fingerprints to the ‘Parse X.509 certificate’ operation +[@JSCU-CNI] | [#1863] + ++- Added a JSON to YAML and a YAML to JSON operation [@ccarpo] | [#1286] + ++- Add CRC Operation [@r4mos] | [#1993] + ++- Bug Fix: selected theme not loading when refreshing [@0xh3xa] | +[#2006] + ++- Fix(RecipeWaiter): sanitize user input in addOperation to prevent XSS +[@0xh3xa] | [#2014] + ++- Docker multiplatform build support [@PathToLife] | [#1974] + ++- Add Base32 Hex Extended Alphabet and Base32 Tests. [@peterc-s] | +[#1991] + ++- Add ECB/NoPadding and CBC/NoPadding support to AES encryption +[@plvie] | [#2013] + ++- Add new operation: PHP Serialize [@brun0ne] | [#1548] + ++- Push input through postmessage [@kenduguay1] | [#1992] + ++- Add jsonata query operation [@jonking-ajar] | [#1587] + ++- Re-enable Npm Release in github workflows [@PathToLife] | [#2031] + ++- Add to ECDSA Verify the message format [@r4mos] | [#2027] + ++- Added alternating caps functionality [@sw5678] | [#1897] + ++- XOR Checksum operation added [@jg42526] | [#2035] + ++- Add GenerateAllChecksums operation * Remove checksums from +GenerateAllHashes operation [@es45411] | [66d445c] + ++- Update GenerateAllChecksums infoURL [@es45411] | [#2037] + ++- Add toggle “+” character to URLDecode operation [@es45411] | [#2040] + ++- Workaround for Safari load bug [@GCHQDeveloper94872] | [#2038] + ++- Updated Dockerfile to correctly build on ARM64 platforms [@Sma-Das] | +[#2042] + ++- Addresses bug report #2008 Added explicit support for octal IP +addresses. Changed approach to IPv4 regex to be string manipulation +generated. Added some unit tests for IP address parsing - probably not +full coverage. Added lookahead and lookbehind tricks to resolve warned +issue that 1.2.3.256 would still be extracted as 1.2.3.25. Now only +accepts valid IP addresses. Warning replaced with clause about infinite +length dotted decimal forms. [@gchqdev364] | [#2041] + ++- Remove trim from rail fence [@Odyhibit] | [#1986] + ++- Fix email regex [@ericli-splunk] | [#2025] + ++- Add Blake3 hashing [@xumptex] | [#2023] + ++- Use defaultIndex instead of 0 in transformArgs [@bartvanandel] | +[#2015] + ++- Add “Generate UUID” and “Analyse UUID” operations [@bartvanandel] | +[#2011] + ++- Add new operation: Template [@kendallgoto] | [#2021] + ++- Add more clear build instructions [@remingtr] | [#1873] + ++- Show On Map updated to use leaflet over WikiMedia [@0xff1ce] | +[#1884] + ++- Fixed ToDecimal signed logic [@starplanet] | [#1545] + ++- Use BigInt for encoding/decoding VarInt [@mikecat] | [#1978] + +### 10.19.0 - 2024-06-21 + +- Add support for ECDSA and DSA in ‘Parse CSR’ [@robinsandhu] | + [#1828] + +@@ -440,6 +538,9 @@ ## [4.0.0] - 2016-11-28 + +- Initial open source commit [@n1474335] | b1d73a72 + ++[10.22.0]: https://github.com/gchq/CyberChef/releases/tag/v10.22.0 + ++[10.21.0]: https://github.com/gchq/CyberChef/releases/tag/v10.21.0 + ++[10.20.0]: https://github.com/gchq/CyberChef/releases/tag/v10.20.0 + +@@ -630,6 +731,72 @@ [@cplussharp]: https://github.com/cplussharp + +[@robinsandhu]: https://github.com/robinsandhu + +[@eltociear]: https://github.com/eltociear + ++[@GuilhermoReadonly]: https://github.com/GuilhermoReadonly + ++[@simonarnell]: https://github.com/simonarnell + ++[@RandomByte]: https://github.com/RandomByte + ++[@c65722]: https://github.com/c65722 + ++[@c65722]: https://github.com/c65722 + ++[@c65722]: https://github.com/c65722 + ++[@max0x53]: https://github.com/max0x53 + ++[@Adamkadaban]: https://github.com/Adamkadaban + ++[@c65722]: https://github.com/c65722 + ++[@jb30795]: https://github.com/jb30795 + ++[@FranciscoPombal]: https://github.com/FranciscoPombal + ++[@Oshawk]: https://github.com/Oshawk + ++[@Oshawk]: https://github.com/Oshawk + ++[@bartblaze]: https://github.com/bartblaze + ++[@exactlyaron]: https://github.com/exactlyaron + ++[@k3ach]: https://github.com/k3ach + ++[@vs4vijay]: https://github.com/vs4vijay + ++[@FranciscoPombal]: https://github.com/FranciscoPombal + ++[@FranciscoPombal]: https://github.com/FranciscoPombal + ++[@linuxgemini]: https://github.com/linuxgemini + ++[@depperm]: https://github.com/depperm + ++[@evenstensberg]: https://github.com/evenstensberg + ++[@bartblaze]: https://github.com/bartblaze + ++[@0xh3xa]: https://github.com/0xh3xa + ++[@flakjacket95]: https://github.com/flakjacket95 + ++[@zhzy0077]: https://github.com/zhzy0077 + ++[@JSCU-CNI]: https://github.com/JSCU-CNI + ++[@ccarpo]: https://github.com/ccarpo + ++[@r4mos]: https://github.com/r4mos + ++[@0xh3xa]: https://github.com/0xh3xa + ++[@0xh3xa]: https://github.com/0xh3xa + ++[@PathToLife]: https://github.com/PathToLife + ++[@peterc-s]: https://github.com/peterc-s + ++[@plvie]: https://github.com/plvie + ++[@kenduguay1]: https://github.com/kenduguay1 + ++[@jonking-ajar]: https://github.com/jonking-ajar + ++[@PathToLife]: https://github.com/PathToLife + ++[@r4mos]: https://github.com/r4mos + ++[@jg42526]: https://github.com/jg42526 + ++[@es45411]: https://github.com/es45411 + ++[@gchq]: https://github.com/gchq + ++[@gchqdev364]: https://github.com/gchqdev364 + ++[@GCHQDeveloper94872]: https://github.com/GCHQDeveloper94872 + ++[@Sma-Das]: https://github.com/Sma-Das + ++[@gchq]: https://github.com/gchq + ++[@Odyhibit]: https://github.com/Odyhibit + ++[@ericli-splunk]: https://github.com/ericli-splunk + ++[@xumptex]: https://github.com/xumptex + ++[@bartvanandel]: https://github.com/bartvanandel + ++[@bartvanandel]: https://github.com/bartvanandel + ++[@kendallgoto]: https://github.com/kendallgoto + ++[@remingtr]: https://github.com/remingtr + ++[@0xff1ce]: https://github.com/0xff1ce + ++[@starplanet]: https://github.com/starplanet + ++[@C85297]: https://github.com/C85297 + ++[@GCHQDeveloper581]: https://github.com/GCHQDeveloper581 + ++[@ThomasNotTom]: https://github.com/ThomasNotTom + ++[@rbpi]: https://github.com/rbpi + ++[@AlexGustafsson]: https://github.com/AlexGustafsson + ++[@tuliperis]: https://github.com/tuliperis + ++[@thomasxm]: https://github.com/thomasxm + ++[@twostraws]: https://github.com/twostraws + ++[@beneri]: https://github.com/beneri + ++[@t-martine]: https://github.com/t-martine + ++[@wesinator]: https://github.com/wesinator + ++[@Raka-loah]: https://github.com/Raka-loah + +@@ -642,6 +809,46 @@ [760eff4]: +https://github.com/gchq/CyberChef/commit/760eff49b5307aaa3104c5e5b437ffe62299acd1 + ++[66d445c]: +https://github.com/gchq/CyberChef/commit/66d445c5ef4e8bd896fd15396e3ce2d660d8ace1 + ++[ab37c1e]: +https://github.com/gchq/CyberChef/commit/ab37c1e562dbee0495ed32876ecbb8225282af25 + ++[965570d]: +https://github.com/gchq/CyberChef/commit/965570d2504c17ee1f96211a1dc10ed40cd2b332 + ++[a477f47]: +https://github.com/gchq/CyberChef/commit/a477f47aecd01d78b11fe186ed4b20d9c487cfac + ++[7a5225c]: +https://github.com/gchq/CyberChef/commit/7a5225c961a5e0d192b03152117cd10a761f73d6 + ++[5f88ae4]: +https://github.com/gchq/CyberChef/commit/5f88ae44ec77228d9bed8f11e8cc8e7dcfb36914 + ++[0e82e4b]: +https://github.com/gchq/CyberChef/commit/0e82e4b7c6c77cadb8be61cb145e081d6ecfdc88 + ++[d635cca]: +https://github.com/gchq/CyberChef/commit/d635cca2106aae2a59caf0e5d7e3633ee1ea3155 + ++[895a929]: +https://github.com/gchq/CyberChef/commit/895a9299255525cb57886deb9d9fd4ba17ae9548 + ++[270a333]: +https://github.com/gchq/CyberChef/commit/270a33317944612d27ea1cc15275ad6b0ed097e5 + ++[d3adfc7]: +https://github.com/gchq/CyberChef/commit/d3adfc7c3e5719279524356bce5261bd8350c0f8 + ++[47c85a1]: +https://github.com/gchq/CyberChef/commit/47c85a105ddbdd4cabfa44ddddbc56e3907a8c33 + ++[3822c6c]: +https://github.com/gchq/CyberChef/commit/3822c6c520a0b4200abc675c33f46082f5b9efc6 + ++[66d445c]: +https://github.com/gchq/CyberChef/commit/66d445c5ef4e8bd896fd15396e3ce2d660d8ace1 + ++[ab37c1e]: +https://github.com/gchq/CyberChef/commit/ab37c1e562dbee0495ed32876ecbb8225282af25 + ++[965570d]: +https://github.com/gchq/CyberChef/commit/965570d2504c17ee1f96211a1dc10ed40cd2b332 + ++[a477f47]: +https://github.com/gchq/CyberChef/commit/a477f47aecd01d78b11fe186ed4b20d9c487cfac + ++[7a5225c]: +https://github.com/gchq/CyberChef/commit/7a5225c961a5e0d192b03152117cd10a761f73d6 + ++[5f88ae4]: +https://github.com/gchq/CyberChef/commit/5f88ae44ec77228d9bed8f11e8cc8e7dcfb36914 + ++[0e82e4b]: +https://github.com/gchq/CyberChef/commit/0e82e4b7c6c77cadb8be61cb145e081d6ecfdc88 + ++[d635cca]: +https://github.com/gchq/CyberChef/commit/d635cca2106aae2a59caf0e5d7e3633ee1ea3155 + ++[895a929]: +https://github.com/gchq/CyberChef/commit/895a9299255525cb57886deb9d9fd4ba17ae9548 + ++[270a333]: +https://github.com/gchq/CyberChef/commit/270a33317944612d27ea1cc15275ad6b0ed097e5 + ++[d3adfc7]: +https://github.com/gchq/CyberChef/commit/d3adfc7c3e5719279524356bce5261bd8350c0f8 + ++[47c85a1]: +https://github.com/gchq/CyberChef/commit/47c85a105ddbdd4cabfa44ddddbc56e3907a8c33 + ++[3822c6c]: +https://github.com/gchq/CyberChef/commit/3822c6c520a0b4200abc675c33f46082f5b9efc6 + ++[66d445c]: +https://github.com/gchq/CyberChef/commit/66d445c5ef4e8bd896fd15396e3ce2d660d8ace1 + ++[ab37c1e]: +https://github.com/gchq/CyberChef/commit/ab37c1e562dbee0495ed32876ecbb8225282af25 + ++[965570d]: +https://github.com/gchq/CyberChef/commit/965570d2504c17ee1f96211a1dc10ed40cd2b332 + ++[a477f47]: +https://github.com/gchq/CyberChef/commit/a477f47aecd01d78b11fe186ed4b20d9c487cfac + ++[7a5225c]: +https://github.com/gchq/CyberChef/commit/7a5225c961a5e0d192b03152117cd10a761f73d6 + ++[5f88ae4]: +https://github.com/gchq/CyberChef/commit/5f88ae44ec77228d9bed8f11e8cc8e7dcfb36914 + ++[0e82e4b]: +https://github.com/gchq/CyberChef/commit/0e82e4b7c6c77cadb8be61cb145e081d6ecfdc88 + ++[d635cca]: +https://github.com/gchq/CyberChef/commit/d635cca2106aae2a59caf0e5d7e3633ee1ea3155 + ++[895a929]: +https://github.com/gchq/CyberChef/commit/895a9299255525cb57886deb9d9fd4ba17ae9548 + ++[270a333]: +https://github.com/gchq/CyberChef/commit/270a33317944612d27ea1cc15275ad6b0ed097e5 + ++[d3adfc7]: +https://github.com/gchq/CyberChef/commit/d3adfc7c3e5719279524356bce5261bd8350c0f8 + ++[47c85a1]: +https://github.com/gchq/CyberChef/commit/47c85a105ddbdd4cabfa44ddddbc56e3907a8c33 + ++[3822c6c]: +https://github.com/gchq/CyberChef/commit/3822c6c520a0b4200abc675c33f46082f5b9efc6 + ++[66d445c]: +https://github.com/gchq/CyberChef/commit/66d445c5ef4e8bd896fd15396e3ce2d660d8ace1 + +@@ -778,4 +985,29 @@ [#512]: +https://github.com/gchq/CyberChef/issues/512 + +- + ++[#1040]: https://github.com/gchq/CyberChef/pull/1040 + ++[#2176]: https://github.com/gchq/CyberChef/pull/2176 + ++[#2177]: https://github.com/gchq/CyberChef/pull/2177 + ++[#2174]: https://github.com/gchq/CyberChef/pull/2174 + ++[#2058]: https://github.com/gchq/CyberChef/pull/2058 + ++[#1861]: https://github.com/gchq/CyberChef/pull/1861 + ++[#2055]: https://github.com/gchq/CyberChef/pull/2055 + ++[#2169]: https://github.com/gchq/CyberChef/pull/2169 + ++[#2175]: https://github.com/gchq/CyberChef/pull/2175 + ++[#2173]: https://github.com/gchq/CyberChef/pull/2173 + ++[#2172]: https://github.com/gchq/CyberChef/pull/2172 + ++[#2136]: https://github.com/gchq/CyberChef/pull/2136 + ++[#2165]: https://github.com/gchq/CyberChef/pull/2165 + ++[#2159]: https://github.com/gchq/CyberChef/pull/2159 + ++[#2086]: https://github.com/gchq/CyberChef/pull/2086 + ++[#2118]: https://github.com/gchq/CyberChef/pull/2118 + ++[#2166]: https://github.com/gchq/CyberChef/pull/2166 + ++[#2188]: https://github.com/gchq/CyberChef/pull/2188 + ++[#2137]: https://github.com/gchq/CyberChef/pull/2137 + ++[#1876]: https://github.com/gchq/CyberChef/pull/1876 + ++[#2186]: https://github.com/gchq/CyberChef/pull/2186 + ++[#1573]: https://github.com/gchq/CyberChef/pull/1573 + ++[#2183]: https://github.com/gchq/CyberChef/pull/2183 + ++[#2182]: https://github.com/gchq/CyberChef/pull/2182 + ++[#2181]: https://github.com/gchq/CyberChef/pull/2181 + +- + +CHANGED: Dockerfile — mkilijanek/Dockerfile +++ gchq/Dockerfile @@ -27,9 ++27,6 @@ ######################################### + +# Package static build files into nginx # + +######################################### + +-# We are using Github Actions: redhat-actions/buildah-build@v2 which +needs manual selection of arch in base image + +-# Remove TARGETARCH if docker buildx is supported in the CI release as +–platform=$TARGETPLATFORM will be automatically set + +-ARG TARGETPLATFORM + +-FROM –platform=${TARGETPLATFORM} nginx:stable-alpine AS cyberchef + ++FROM nginx:stable-alpine AS cyberchef + +COPY –from=builder /app/build/prod /usr/share/nginx/html/ + +REMOVED in gchq (exists in mkilijanek): Makefile REMOVED in gchq (exists +in mkilijanek): SECURITY_ANALYSIS.md REMOVED in gchq (exists in +mkilijanek): SECURITY_AUTOMATION.md REMOVED in gchq (exists in +mkilijanek): SECURITY_FIXES_APPLIED.md REMOVED in gchq (exists in +mkilijanek): SECURITY_QUICK_START.md + +CHANGED: package-lock.json — mkilijanek/package-lock.json +++ +gchq/package-lock.json @@ -1,12 +1,12 @@ { + +“name”: “cyberchef”, + +- “version”: “10.19.4”, + +- “version”: “10.22.1”, + + “lockfileVersion”: 3, + + “requires”: true, + + “packages”: { + + ““: { + + "name": "cyberchef", + +- "version": "10.19.4", + +- "version": "10.22.1", + + "hasInstallScript": true, + + "license": "Apache-2.0", + + "dependencies": { + +@@ -31,7 +31,7 @@ “chi-squared”: “^1.1.0”, + + "codepage": "^1.15.0", + + "crypto-api": "^0.8.5", + +- "crypto-browserify": "^3.12.0", + +- "crypto-browserify": "^3.12.1", + + "crypto-js": "^4.2.0", + + "ctph.js": "0.0.5", + + "d3": "7.9.0", + +@@ -58,10 +58,10 @@ “json5”: “^2.2.3”, + + "jsonata": "^2.0.3", + + "jsonpath-plus": "^10.3.0", + +- "jsonwebtoken": "9.0.0", + +- "jsonwebtoken": "8.5.1", + + "jsqr": "^1.4.0", + + "jsrsasign": "^11.1.0", + +- "kbpgp": "2.1.15", + +- "kbpgp": "^2.1.17", + + "libbzip2-wasm": "0.0.4", + + "libyara-wasm": "^1.2.1", + + "lodash": "^4.17.21", + +@@ -156,7 +156,7 @@ “terser”: “^5.31.1”, + + "webpack": "^5.91.0", + + "webpack-bundle-analyzer": "^4.10.2", + +- "webpack-dev-server": "5.2.1", + +- "webpack-dev-server": "5.0.4", + + "webpack-node-externals": "^3.0.0", + + "worker-loader": "^3.0.8" + + } + +@@ -255,7 +255,6 @@ “integrity”: +“sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==”, + + "dev": true, + + "license": "MIT", + +- "peer": true, + + "dependencies": { + + "@ampproject/remapping": "^2.2.0", + + "@babel/code-frame": "^7.26.0", + +@@ -1744,16 +1743,23 @@ } + + }, + + "node_modules/@babel/runtime-corejs3": { + +- "version": "7.28.4", + +- "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.28.4.tgz", + +- "integrity": "sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ==", + +- "license": "MIT", + +- "dependencies": { + +- "core-js-pure": "^3.43.0" + +- "version": "7.26.0", + +- "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.26.0.tgz", + +- "integrity": "sha512-YXHu5lN8kJCb1LOb9PgV6pvak43X2h4HvRApcN5SdWeaItQOzfn1hgP6jasD6KWQyJDBxrVmA9o9OivlnNJK/w==", + +- "license": "MIT", + +- "dependencies": { + +- "core-js-pure": "^3.30.2", + +- "regenerator-runtime": "^0.14.0" + + }, + + "engines": { + + "node": ">=6.9.0" + + } + +- }, + +- “node_modules/@babel/runtime-corejs3/node_modules/regenerator-runtime”: + { + +- "version": "0.14.1", + +- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + +- "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + +- "license": "MIT" + + }, + + “node_modules/@babel/runtime/node_modules/regenerator-runtime”: { + + "version": "0.14.1", + +@@ -2098,8 +2104,7 @@ “resolved”: +“https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.17.tgz”, + + "integrity": "sha512-2EisRLHk6X/PdicybwlajLGKF5aJf4xnX2uuG5lexuYKt05xV/J/OiBADmi8q9obhxf1nesrMQbqAt+6CsHo/w==", + + "dev": true, + +- "license": "MIT", + +- "peer": true + +- "license": "MIT" + + }, + + “node_modules/@cspell/dict-dart”: { + + "version": "2.3.0", + +@@ -2239,16 +2244,14 @@ “resolved”: +“https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.11.tgz”, + + "integrity": "sha512-QR3b/PB972SRQ2xICR1Nw/M44IJ6rjypwzA4jn+GH8ydjAX9acFNfc+hLZVyNe0FqsE90Gw3evLCOIF0vy1vQw==", + + "dev": true, + +- "license": "MIT", + +- "peer": true + +- "license": "MIT" + + }, + + “node_modules/@cspell/dict-html-symbol-entities”: { + + "version": "4.0.3", + + "resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.3.tgz", + + "integrity": "sha512-aABXX7dMLNFdSE8aY844X4+hvfK7977sOWgZXo4MTGAmOzR8524fjbJPswIBK7GaD3+SgFZ2yP2o0CFvXDGF+A==", + + "dev": true, + +- "license": "MIT", + +- "peer": true + +- "license": "MIT" + + }, + + “node_modules/@cspell/dict-java”: { + + "version": "5.0.11", + +@@ -2446,8 +2449,7 @@ “resolved”: +“https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.2.0.tgz”, + + "integrity": "sha512-Pk3zNePLT8qg51l0M4g1ISowYAEGxTuNfZlgkU5SvHa9Cu7x/BWoyYq9Fvc3kAyoisCjRPyvWF4uRYrPitPDFw==", + + "dev": true, + +- "license": "MIT", + +- "peer": true + +- "license": "MIT" + + }, + + “node_modules/@cspell/dict-vue”: { + + "version": "3.0.4", + +@@ -2588,7 +2590,6 @@ } + + ], + + "license": "MIT", + +- "peer": true, + + "engines": { + + "node": ">=18" + + }, + +@@ -2612,7 +2613,6 @@ } + + ], + + "license": "MIT", + +- "peer": true, + + "engines": { + + "node": ">=18" + + } + +@@ -2847,6 +2847,109 @@ “funding”: { + + "type": "github", + + "url": "https://github.com/sponsors/nzakas" + +- } + +- }, + +- “node_modules/@isaacs/cliui”: { + +- "version": "8.0.2", + +- "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + +- "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + +- "dev": true, + +- "license": "ISC", + +- "dependencies": { + +- "string-width": "^5.1.2", + +- "string-width-cjs": "npm:string-width@^4.2.0", + +- "strip-ansi": "^7.0.1", + +- "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + +- "wrap-ansi": "^8.1.0", + +- "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + +- }, + +- "engines": { + +- "node": ">=12" + +- } + +- }, + +- “node_modules/@isaacs/cliui/node_modules/ansi-regex”: { + +- "version": "6.1.0", + +- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + +- "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + +- "dev": true, + +- "license": "MIT", + +- "engines": { + +- "node": ">=12" + +- }, + +- "funding": { + +- "url": "https://github.com/chalk/ansi-regex?sponsor=1" + +- } + +- }, + +- “node_modules/@isaacs/cliui/node_modules/ansi-styles”: { + +- "version": "6.2.1", + +- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + +- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + +- "dev": true, + +- "license": "MIT", + +- "engines": { + +- "node": ">=12" + +- }, + +- "funding": { + +- "url": "https://github.com/chalk/ansi-styles?sponsor=1" + +- } + +- }, + +- “node_modules/@isaacs/cliui/node_modules/emoji-regex”: { + +- "version": "9.2.2", + +- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + +- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + +- "dev": true, + +- "license": "MIT" + +- }, + +- “node_modules/@isaacs/cliui/node_modules/string-width”: { + +- "version": "5.1.2", + +- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + +- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + +- "dev": true, + +- "license": "MIT", + +- "dependencies": { + +- "eastasianwidth": "^0.2.0", + +- "emoji-regex": "^9.2.2", + +- "strip-ansi": "^7.0.1" + +- }, + +- "engines": { + +- "node": ">=12" + +- }, + +- "funding": { + +- "url": "https://github.com/sponsors/sindresorhus" + +- } + +- }, + +- “node_modules/@isaacs/cliui/node_modules/strip-ansi”: { + +- "version": "7.1.0", + +- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + +- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + +- "dev": true, + +- "license": "MIT", + +- "dependencies": { + +- "ansi-regex": "^6.0.1" + +- }, + +- "engines": { + +- "node": ">=12" + +- }, + +- "funding": { + +- "url": "https://github.com/chalk/strip-ansi?sponsor=1" + +- } + +- }, + +- “node_modules/@isaacs/cliui/node_modules/wrap-ansi”: { + +- "version": "8.1.0", + +- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + +- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + +- "dev": true, + +- "license": "MIT", + +- "dependencies": { + +- "ansi-styles": "^6.1.0", + +- "string-width": "^5.0.1", + +- "strip-ansi": "^7.0.1" + +- }, + +- "engines": { + +- "node": ">=12" + +- }, + +- "funding": { + +- "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + + } + + }, + + “node_modules/@jimp/bmp”: { + +@@ -2907,7 +3010,6 @@ “resolved”: +“https://registry.npmjs.org/@jimp/custom/-/custom-0.22.12.tgz”, + + "integrity": "sha512-xcmww1O/JFP2MrlGUMd3Q78S3Qu6W3mYTXYuIqFq33EorgYHV/HqymHfXy9GjiCJ7OI+7lWx6nYFOzU7M4rd1Q==", + + "license": "MIT", + +- "peer": true, + + "dependencies": { + + "@jimp/core": "^0.22.12" + + } + +@@ -2944,7 +3046,6 @@ “resolved”: +“https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.22.12.tgz”, + + "integrity": "sha512-xslz2ZoFZOPLY8EZ4dC29m168BtDx95D6K80TzgUi8gqT7LY6CsajWO0FAxDwHz6h0eomHMfyGX0stspBrTKnQ==", + + "license": "MIT", + +- "peer": true, + + "dependencies": { + + "@jimp/utils": "^0.22.12" + + }, + +@@ -2957,7 +3058,6 @@ “resolved”: +“https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.22.12.tgz”, + + "integrity": "sha512-S0vJADTuh1Q9F+cXAwFPlrKWzDj2F9t/9JAbUvaaDuivpyWuImEKXVz5PUZw2NbpuSHjwssbTpOZ8F13iJX4uw==", + + "license": "MIT", + +- "peer": true, + + "dependencies": { + + "@jimp/utils": "^0.22.12" + + }, + +@@ -2982,7 +3082,6 @@ “resolved”: +“https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.22.12.tgz”, + + "integrity": "sha512-xImhTE5BpS8xa+mAN6j4sMRWaUgUDLoaGHhJhpC+r7SKKErYDR0WQV4yCE4gP+N0gozD0F3Ka1LUSaMXrn7ZIA==", + + "license": "MIT", + +- "peer": true, + + "dependencies": { + + "@jimp/utils": "^0.22.12", + + "tinycolor2": "^1.6.0" + +@@ -3026,7 +3125,6 @@ “resolved”: +“https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.22.12.tgz”, + + "integrity": "sha512-FNuUN0OVzRCozx8XSgP9MyLGMxNHHJMFt+LJuFjn1mu3k0VQxrzqbN06yIl46TVejhyAhcq5gLzqmSCHvlcBVw==", + + "license": "MIT", + +- "peer": true, + + "dependencies": { + + "@jimp/utils": "^0.22.12" + + }, + +@@ -3150,7 +3248,6 @@ “resolved”: +“https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.22.12.tgz”, + + "integrity": "sha512-3NyTPlPbTnGKDIbaBgQ3HbE6wXbAlFfxHVERmrbqAi8R3r6fQPxpCauA8UVDnieg5eo04D0T8nnnNIX//i/sXg==", + + "license": "MIT", + +- "peer": true, + + "dependencies": { + + "@jimp/utils": "^0.22.12" + + }, + +@@ -3163,7 +3260,6 @@ “resolved”: +“https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.22.12.tgz”, + + "integrity": "sha512-9YNEt7BPAFfTls2FGfKBVgwwLUuKqy+E8bDGGEsOqHtbuhbshVGxN2WMZaD4gh5IDWvR+emmmPPWGgaYNYt1gA==", + + "license": "MIT", + +- "peer": true, + + "dependencies": { + + "@jimp/utils": "^0.22.12" + + }, + +@@ -3179,7 +3275,6 @@ “resolved”: +“https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.22.12.tgz”, + + "integrity": "sha512-dghs92qM6MhHj0HrV2qAwKPMklQtjNpoYgAB94ysYpsXslhRTiPisueSIELRwZGEr0J0VUxpUY7HgJwlSIgGZw==", + + "license": "MIT", + +- "peer": true, + + "dependencies": { + + "@jimp/utils": "^0.22.12" + + }, + +@@ -3887,6 +3982,17 @@ “node”: “>= 8” + + } + + }, + +- “node_modules/@pkgjs/parseargs”: { + +- "version": "0.11.0", + +- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + +- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + +- "dev": true, + +- "license": "MIT", + +- "optional": true, + +- "engines": { + +- "node": ">=14" + +- } + +- }, + + “node_modules/@pkgr/core”: { + + “version”: “0.1.1”, + + “resolved”: + “https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz”, + +@@ -4508,7 +4614,6 @@ “integrity”: +“sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==”, + + "dev": true, + + "license": "MIT", + +- "peer": true, + + "bin": { + + "acorn": "bin/acorn" + + }, + +@@ -4555,7 +4660,6 @@ “integrity”: +“sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==”, + + "dev": true, + + "license": "MIT", + +- "peer": true, + + "dependencies": { + + "fast-deep-equal": "^3.1.1", + + "fast-json-stable-stringify": "^2.0.0", + +@@ -5064,14 +5168,14 @@ } + + }, + + "node_modules/axios": { + +- "version": "1.13.2", + +- "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", + +- "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", + +- "version": "1.7.9", + +- "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", + +- "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", + + "dev": true, + + "license": "MIT", + + "dependencies": { + + "follow-redirects": "^1.15.6", + +- "form-data": "^4.0.4", + +- "form-data": "^4.0.0", + + "proxy-from-env": "^1.1.0" + + } + + }, + +@@ -5898,7 +6002,6 @@ } + + ], + + "license": "MIT", + +- "peer": true, + + "dependencies": { + + "caniuse-lite": "^1.0.30001688", + + "electron-to-chromium": "^1.5.73", + +@@ -6120,9 +6223,9 @@ } + + }, + + "node_modules/caniuse-lite": { + +- "version": "1.0.30001695", + +- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001695.tgz", + +- "integrity": "sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==", + +- "version": "1.0.30001769", + +- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz", + +- "integrity": "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==", + + "dev": true, + + "funding": [ + + { + +@@ -6653,9 +6756,9 @@ } + + }, + + "node_modules/compression": { + +- "version": "1.8.1", + +- "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + +- "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + +- "version": "1.7.5", + +- "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.5.tgz", + +- "integrity": "sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==", + + "dev": true, + + "license": "MIT", + + "dependencies": { + +@@ -6663,7 +6766,7 @@ “compressible”: “~2.0.18”, + + "debug": "2.6.9", + + "negotiator": "~0.6.4", + +- "on-headers": "~1.1.0", + +- "on-headers": "~1.0.2", + + "safe-buffer": "5.2.1", + + "vary": "~1.1.2" + + }, + +@@ -6894,9 +6997,9 @@ } + + }, + + "node_modules/core-js-pure": { + +- "version": "3.47.0", + +- "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.47.0.tgz", + +- "integrity": "sha512-BcxeDbzUrRnXGYIVAGFtcGQVNpFcUhVjr6W7F8XktvQW2iJP9e66GP6xdKotCRFlrxBvNIBrhwKteRXqMV86Nw==", + +- "version": "3.40.0", + +- "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.40.0.tgz", + +- "integrity": "sha512-AtDzVIgRrmRKQai62yuSIN5vNiQjcJakJb4fbhVw3ehxx7Lohphvw9SGNWKhLFqSxC4ilD0g/L1huAYFQU3Q6A==", + + "hasInstallScript": true, + + "license": "MIT", + + "funding": { + +@@ -7801,7 +7904,6 @@ “resolved”: +“https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz”, + + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + + "license": "ISC", + +- "peer": true, + + "engines": { + + "node": ">=12" + + } + +@@ -8043,6 +8145,19 @@ }, + + "funding": { + + "url": "https://github.com/sponsors/sindresorhus" + +- } + +- }, + +- “node_modules/default-gateway”: { + +- "version": "6.0.3", + +- "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + +- "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + +- "dev": true, + +- "license": "BSD-2-Clause", + +- "dependencies": { + +- "execa": "^5.0.0" + +- }, + +- "engines": { + +- "node": ">= 10" + + } + + }, + + “node_modules/defaults”: { + +@@ -8387,6 +8502,13 @@ “readable-stream”: “^2.0.0”, + + "stream-shift": "^1.0.0" + + } + +- }, + +- “node_modules/eastasianwidth”: { + +- "version": "0.2.0", + +- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + +- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + +- "dev": true, + +- "license": "MIT" + + }, + + “node_modules/ecdsa-sig-formatter”: { + + "version": "1.0.11", + +@@ -8720,7 +8842,6 @@ “integrity”: +“sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==”, + + "dev": true, + + "license": "MIT", + +- "peer": true, + + "dependencies": { + + "@eslint-community/eslint-utils": "^4.2.0", + + "@eslint-community/regexpp": "^4.12.1", + +@@ -9082,6 +9203,43 @@ “safe-buffer”: “^5.1.1” + + } + + }, + +- “node_modules/execa”: { + +- "version": "5.1.1", + +- "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + +- "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + +- "dev": true, + +- "license": "MIT", + +- "dependencies": { + +- "cross-spawn": "^7.0.3", + +- "get-stream": "^6.0.0", + +- "human-signals": "^2.1.0", + +- "is-stream": "^2.0.0", + +- "merge-stream": "^2.0.0", + +- "npm-run-path": "^4.0.1", + +- "onetime": "^5.1.2", + +- "signal-exit": "^3.0.3", + +- "strip-final-newline": "^2.0.0" + +- }, + +- "engines": { + +- "node": ">=10" + +- }, + +- "funding": { + +- "url": "https://github.com/sindresorhus/execa?sponsor=1" + +- } + +- }, + +- “node_modules/execa/node_modules/get-stream”: { + +- "version": "6.0.1", + +- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + +- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + +- "dev": true, + +- "license": "MIT", + +- "engines": { + +- "node": ">=10" + +- }, + +- "funding": { + +- "url": "https://github.com/sponsors/sindresorhus" + +- } + +- }, + + “node_modules/exif-parser”: { + + “version”: “0.1.12”, + + “resolved”: + “https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz”, + +@@ -9729,6 +9887,36 @@ “node”: “>=0.10.0” + + } + + }, + +- “node_modules/foreground-child”: { + +- "version": "3.3.0", + +- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + +- "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + +- "dev": true, + +- "license": "ISC", + +- "dependencies": { + +- "cross-spawn": "^7.0.0", + +- "signal-exit": "^4.0.1" + +- }, + +- "engines": { + +- "node": ">=14" + +- }, + +- "funding": { + +- "url": "https://github.com/sponsors/isaacs" + +- } + +- }, + +- “node_modules/foreground-child/node_modules/signal-exit”: { + +- "version": "4.1.0", + +- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + +- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + +- "dev": true, + +- "license": "ISC", + +- "engines": { + +- "node": ">=14" + +- }, + +- "funding": { + +- "url": "https://github.com/sponsors/isaacs" + +- } + +- }, + + “node_modules/form-data”: { + + “version”: “4.0.5”, + + “resolved”: + “https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz”, + +@@ -10202,7 +10390,6 @@ “integrity”: +“sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA==”, + + "dev": true, + + "license": "MIT", + +- "peer": true, + + "dependencies": { + + "dateformat": "~4.6.2", + + "eventemitter2": "~0.4.13", + +@@ -10899,6 +11086,23 @@ “node”: “>=18” + + } + + }, + +- “node_modules/html-entities”: { + +- "version": "2.5.2", + +- "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + +- "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + +- "dev": true, + +- "funding": [ + +- { + +- "type": "github", + +- "url": "https://github.com/sponsors/mdevils" + +- }, + +- { + +- "type": "patreon", + +- "url": "https://patreon.com/mdevils" + +- } + +- ], + +- "license": "MIT" + +- }, + + “node_modules/html-escaper”: { + + “version”: “2.0.2”, + + “resolved”: + “https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz”, + +@@ -11078,9 +11282,9 @@ } + + }, + + "node_modules/http-proxy-middleware": { + +- "version": "2.0.9", + +- "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + +- "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + +- "version": "2.0.7", + +- "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", + +- "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", + + "dev": true, + + "license": "MIT", + + "dependencies": { + +@@ -11121,6 +11325,16 @@ }, + + "engines": { + + "node": ">= 14" + +- } + +- }, + +- “node_modules/human-signals”: { + +- "version": "2.1.0", + +- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + +- "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + +- "dev": true, + +- "license": "Apache-2.0", + +- "engines": { + +- "node": ">=10.17.0" + + } + + }, + + “node_modules/hyperdyperid”: { + +@@ -11810,6 +12024,19 @@ “url”: “https://github.com/sponsors/ljharb” + + } + + }, + +- “node_modules/is-stream”: { + +- "version": "2.0.1", + +- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + +- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + +- "dev": true, + +- "license": "MIT", + +- "engines": { + +- "node": ">=8" + +- }, + +- "funding": { + +- "url": "https://github.com/sponsors/sindresorhus" + +- } + +- }, + + “node_modules/is-string”: { + + “version”: “1.1.1”, + + “resolved”: + “https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz”, + +@@ -12000,6 +12227,22 @@ “dev”: true, + + "license": "MIT" + + }, + +- “node_modules/jackspeak”: { + +- "version": "3.4.3", + +- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + +- "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + +- "dev": true, + +- "license": "BlueOak-1.0.0", + +- "dependencies": { + +- "@isaacs/cliui": "^8.0.2" + +- }, + +- "funding": { + +- "url": "https://github.com/sponsors/isaacs" + +- }, + +- "optionalDependencies": { + +- "@pkgjs/parseargs": "^0.11.0" + +- } + +- }, + + “node_modules/jake”: { + + “version”: “10.9.2”, + + “resolved”: “https://registry.npmjs.org/jake/-/jake-10.9.2.tgz”, + +@@ -12114,7 +12357,6 @@ “integrity”: +“sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==”, + + "dev": true, + + "license": "MIT", + +- "peer": true, + + "bin": { + + "jiti": "bin/jiti.js" + + } + +@@ -12135,8 +12377,7 @@ “version”: “3.7.1”, + + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", + +- "license": "MIT", + +- "peer": true + +- "license": "MIT" + + }, + + “node_modules/js-sha3”: { + + "version": "0.9.3", + +@@ -12227,7 +12468,6 @@ “resolved”: +“https://registry.npmjs.org/jsep/-/jsep-1.4.0.tgz”, + + "integrity": "sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==", + + "license": "MIT", + +- "peer": true, + + "engines": { + + "node": ">= 10.16.0" + + } + +@@ -12311,31 +12551,34 @@ } + + }, + + "node_modules/jsonwebtoken": { + +- "version": "9.0.0", + +- "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + +- "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", + +- "version": "8.5.1", + +- "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + +- "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + + "license": "MIT", + + "dependencies": { + + "jws": "^3.2.2", + +- "lodash": "^4.17.21", + +- "lodash.includes": "^4.3.0", + +- "lodash.isboolean": "^3.0.3", + +- "lodash.isinteger": "^4.0.4", + +- "lodash.isnumber": "^3.0.3", + +- "lodash.isplainobject": "^4.0.6", + +- "lodash.isstring": "^4.0.1", + +- "lodash.once": "^4.0.0", + + "ms": "^2.1.1", + +- "semver": "^7.3.8" + +- }, + +- "engines": { + +- "node": ">=12", + +- "npm": ">=6" + +- "semver": "^5.6.0" + +- }, + +- "engines": { + +- "node": ">=4", + +- "npm": ">=1.4.28" + + } + + }, + + “node_modules/jsonwebtoken/node_modules/semver”: { + +- "version": "7.7.3", + +- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + +- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + +- "version": "5.7.2", + +- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + +- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + + "license": "ISC", + + "bin": { + +- "semver": "bin/semver.js" + +- }, + +- "engines": { + +- "node": ">=10" + +- "semver": "bin/semver" + + } + + }, + + “node_modules/jsqr”: { + +@@ -12367,30 +12610,30 @@ } + + }, + + "node_modules/jwa": { + +- "version": "1.4.2", + +- "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", + +- "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + +- "license": "MIT", + +- "dependencies": { + +- "buffer-equal-constant-time": "^1.0.1", + +- "version": "1.4.1", + +- "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + +- "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + +- "license": "MIT", + +- "dependencies": { + +- "buffer-equal-constant-time": "1.0.1", + + "ecdsa-sig-formatter": "1.0.11", + + "safe-buffer": "^5.0.1" + + } + + }, + + “node_modules/jws”: { + +- "version": "3.2.3", + +- "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.3.tgz", + +- "integrity": "sha512-byiJ0FLRdLdSVSReO/U4E7RoEyOCKnEnEPMjq3HxWtvzLsV08/i5RQKsFVNkCldrCaPr2vDNAOMsfs8T/Hze7g==", + +- "license": "MIT", + +- "dependencies": { + +- "jwa": "^1.4.2", + +- "version": "3.2.2", + +- "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + +- "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + +- "license": "MIT", + +- "dependencies": { + +- "jwa": "^1.4.1", + + "safe-buffer": "^5.0.1" + + } + + }, + + “node_modules/kbpgp”: { + +- "version": "2.1.15", + +- "resolved": "https://registry.npmjs.org/kbpgp/-/kbpgp-2.1.15.tgz", + +- "integrity": "sha512-iFdQT+m2Mi2DB14kEFydF2joNe9x3E2VZCGZUt7UXsiZnQx5TtSl4KofP7EPtjHvf7weCxNKlEPSYiiCNMZ2jA==", + +- "version": "2.1.17", + +- "resolved": "https://registry.npmjs.org/kbpgp/-/kbpgp-2.1.17.tgz", + +- "integrity": "sha512-pnjH7amyg6dZLXyF42BKbCTST0l0r1ErunqtFRrJCkHkGJb83cZZmx1pnqNFr+d/ls+5gvcHrZLPfUG5q7oRYw==", + + "license": "BSD-3-Clause", + + "dependencies": { + + "bn": "^1.0.5", + +@@ -12673,6 +12916,18 @@ “dev”: true, + + "license": "MIT" + + }, + +- “node_modules/lodash.includes”: { + +- "version": "4.3.0", + +- "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + +- "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + +- "license": "MIT" + +- }, + +- “node_modules/lodash.isboolean”: { + +- "version": "3.0.3", + +- "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + +- "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + +- "license": "MIT" + +- }, + + “node_modules/lodash.isfinite”: { + + “version”: “3.3.2”, + + “resolved”: + “https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz”, + +@@ -12680,11 +12935,28 @@ “dev”: true, + + "license": "MIT" + + }, + +- “node_modules/lodash.isinteger”: { + +- "version": "4.0.4", + +- "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + +- "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + +- "license": "MIT" + +- }, + +- “node_modules/lodash.isnumber”: { + +- "version": "3.0.3", + +- "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + +- "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + +- "license": "MIT" + +- }, + + “node_modules/lodash.isplainobject”: { + + “version”: “4.0.6”, + + “resolved”: + “https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz”, + + “integrity”: + “sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==”, + +- "dev": true, + +- "license": "MIT" + +- }, + +- “node_modules/lodash.isstring”: { + +- "version": "4.0.1", + +- "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + +- "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + + "license": "MIT" + + }, + + “node_modules/lodash.merge”: { + +@@ -12692,6 +12964,12 @@ “resolved”: +“https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz”, + + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + + "dev": true, + +- "license": "MIT" + +- }, + +- “node_modules/lodash.once”: { + +- "version": "4.1.1", + +- "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + +- "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + + "license": "MIT" + + }, + + “node_modules/lodash.union”: { + +@@ -13064,10 +13342,9 @@ } + + }, + + "node_modules/min-document": { + +- "version": "2.19.2", + +- "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.2.tgz", + +- "integrity": "sha512-8S5I8db/uZN8r9HSLFVWPdJCvYOejMcEC82VIzNUc6Zkklf/d1gg2psfE79/vyhWOj4+J8MtwmoOz3TmvaGu5A==", + +- "license": "MIT", + +- "version": "2.19.0", + +- "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + +- "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", + + "dependencies": { + + "dom-walk": "^0.1.0" + + } + +@@ -13125,6 +13402,16 @@ “license”: “MIT”, + + "funding": { + + "url": "https://github.com/sponsors/ljharb" + +- } + +- }, + +- “node_modules/minipass”: { + +- "version": "7.1.2", + +- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + +- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + +- "dev": true, + +- "license": "ISC", + +- "engines": { + +- "node": ">=16 || 14 >=14.17" + + } + + }, + + “node_modules/mocha”: { + +@@ -13325,9 +13612,9 @@ } + + }, + + "node_modules/morgan": { + +- "version": "1.10.1", + +- "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.1.tgz", + +- "integrity": "sha512-223dMRJtI/l25dJKWpgij2cMtywuG/WiUKXdvwfbhGKBhy1puASqXwFzmWZ7+K73vUPoR7SS2Qz2cI/g9MKw0A==", + +- "version": "1.10.0", + +- "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + +- "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + + "dev": true, + + "license": "MIT", + + "dependencies": { + +@@ -13335,7 +13622,7 @@ “debug”: “2.6.9”, + + "depd": "~2.0.0", + + "on-finished": "~2.3.0", + +- "on-headers": "~1.1.0" + +- "on-headers": "~1.0.2" + + }, + + "engines": { + + "node": ">= 0.8.0" + +@@ -13832,6 +14119,19 @@ “integrity”: +“sha512-TKC/8zH5pXIAMVQio2TvVDTtPRX+DJPHDqjRbxogtFiByHyzKmy96RA0JtCQJ+WouyyL4A10xomQzgbUT+1jCg==”, + + "license": "MIT" + + }, + +- “node_modules/npm-run-path”: { + +- "version": "4.0.1", + +- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + +- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + +- "dev": true, + +- "license": "MIT", + +- "dependencies": { + +- "path-key": "^3.0.0" + +- }, + +- "engines": { + +- "node": ">=8" + +- } + +- }, + + “node_modules/nth-check”: { + + “version”: “2.1.1”, + + “resolved”: + “https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz”, + +@@ -14005,9 +14305,9 @@ } + + }, + + "node_modules/on-headers": { + +- "version": "1.1.0", + +- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + +- "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + +- "version": "1.0.2", + +- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + +- "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + + "dev": true, + + "license": "MIT", + + "engines": { + +@@ -14316,6 +14616,13 @@ “node”: “>= 14” + + } + + }, + +- “node_modules/package-json-from-dist”: { + +- "version": "1.0.1", + +- "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + +- "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + +- "dev": true, + +- "license": "BlueOak-1.0.0" + +- }, + + “node_modules/pad-stream”: { + + “version”: “2.0.0”, + + “resolved”: + “https://registry.npmjs.org/pad-stream/-/pad-stream-2.0.0.tgz”, + +@@ -14568,6 +14875,30 @@ “node”: “>=0.10.0” + + } + + }, + +- “node_modules/path-scurry”: { + +- "version": "1.11.1", + +- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + +- "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + +- "dev": true, + +- "license": "BlueOak-1.0.0", + +- "dependencies": { + +- "lru-cache": "^10.2.0", + +- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + +- }, + +- "engines": { + +- "node": ">=16 || 14 >=14.18" + +- }, + +- "funding": { + +- "url": "https://github.com/sponsors/isaacs" + +- } + +- }, + +- “node_modules/path-scurry/node_modules/lru-cache”: { + +- "version": "10.4.3", + +- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + +- "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + +- "dev": true, + +- "license": "ISC" + +- }, + + “node_modules/path-to-regexp”: { + + “version”: “0.1.12”, + + “resolved”: + “https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz”, + +@@ -14836,7 +15167,6 @@ “integrity”: +“sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==”, + + "deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1", + + "license": "MIT", + +- "peer": true, + + "funding": { + + "type": "opencollective", + + "url": "https://opencollective.com/popperjs" + +@@ -14896,7 +15226,6 @@ } + + ], + + "license": "MIT", + +- "peer": true, + + "dependencies": { + + "nanoid": "^3.3.8", + + "picocolors": "^1.1.1", + +@@ -16034,7 +16363,6 @@ “integrity”: +“sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==”, + + "dev": true, + + "license": "MIT", + +- "peer": true, + + "dependencies": { + + "fast-deep-equal": "^3.1.3", + + "fast-uri": "^3.0.1", + +@@ -16891,6 +17219,45 @@ “node”: “>=8” + + } + + }, + +- “node_modules/string-width-cjs”: { + +- "name": "string-width", + +- "version": "4.2.3", + +- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + +- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + +- "dev": true, + +- "license": "MIT", + +- "dependencies": { + +- "emoji-regex": "^8.0.0", + +- "is-fullwidth-code-point": "^3.0.0", + +- "strip-ansi": "^6.0.1" + +- }, + +- "engines": { + +- "node": ">=8" + +- } + +- }, + +- “node_modules/string-width-cjs/node_modules/ansi-regex”: { + +- "version": "5.0.1", + +- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + +- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + +- "dev": true, + +- "license": "MIT", + +- "engines": { + +- "node": ">=8" + +- } + +- }, + +- “node_modules/string-width-cjs/node_modules/strip-ansi”: { + +- "version": "6.0.1", + +- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + +- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + +- "dev": true, + +- "license": "MIT", + +- "dependencies": { + +- "ansi-regex": "^5.0.1" + +- }, + +- "engines": { + +- "node": ">=8" + +- } + +- }, + + “node_modules/string-width/node_modules/ansi-regex”: { + + “version”: “5.0.1”, + + “resolved”: + “https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz”, + +@@ -16927,6 +17294,30 @@ “node”: “>=0.10.0” + + } + + }, + +- “node_modules/strip-ansi-cjs”: { + +- "name": "strip-ansi", + +- "version": "6.0.1", + +- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + +- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + +- "dev": true, + +- "license": "MIT", + +- "dependencies": { + +- "ansi-regex": "^5.0.1" + +- }, + +- "engines": { + +- "node": ">=8" + +- } + +- }, + +- “node_modules/strip-ansi-cjs/node_modules/ansi-regex”: { + +- "version": "5.0.1", + +- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + +- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + +- "dev": true, + +- "license": "MIT", + +- "engines": { + +- "node": ">=8" + +- } + +- }, + + “node_modules/strip-comments”: { + + “version”: “2.0.1”, + + “resolved”: + “https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz”, + +@@ -16935,6 +17326,16 @@ “license”: “MIT”, + + "engines": { + + "node": ">=10" + +- } + +- }, + +- “node_modules/strip-final-newline”: { + +- "version": "2.0.0", + +- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + +- "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + +- "dev": true, + +- "license": "MIT", + +- "engines": { + +- "node": ">=6" + + } + + }, + + “node_modules/strip-json-comments”: { + +@@ -17300,7 +17701,6 @@ “integrity”: +“sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==”, + + "dev": true, + + "license": "MIT", + +- "peer": true, + + "engines": { + + "node": ">=12" + + }, + +@@ -17309,9 +17709,9 @@ } + + }, + + "node_modules/tmp": { + +- "version": "0.2.5", + +- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + +- "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + +- "version": "0.2.3", + +- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + +- "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + + "dev": true, + + "license": "MIT", + + "engines": { + +@@ -17462,8 +17862,7 @@ “resolved”: +“https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz”, + + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + + "dev": true, + +- "license": "0BSD", + +- "peer": true + +- "license": "0BSD" + + }, + + “node_modules/tweetnacl”: { + + "version": "0.13.3", + +@@ -17980,7 +18379,6 @@ “integrity”: +“sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==”, + + "dev": true, + + "license": "MIT", + +- "peer": true, + + "dependencies": { + + "@types/eslint-scope": "^3.7.7", + + "@types/estree": "^1.0.6", + +@@ -18128,16 +18526,15 @@ } + + }, + + "node_modules/webpack-dev-server": { + +- "version": "5.2.1", + +- "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.1.tgz", + +- "integrity": "sha512-ml/0HIj9NLpVKOMq+SuBPLHcmbG+TGIjXRHsYfZwocUBIqEvws8NnS/V9AFQ5FKP+tgn5adwVwRrTEpGL33QFQ==", + +- "version": "5.0.4", + +- "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz", + +- "integrity": "sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==", + + "dev": true, + + "license": "MIT", + + "dependencies": { + + "@types/bonjour": "^3.5.13", + + "@types/connect-history-api-fallback": "^1.5.4", + + "@types/express": "^4.17.21", + +- "@types/express-serve-static-core": "^4.17.21", + + "@types/serve-index": "^1.9.4", + + "@types/serve-static": "^1.15.5", + + "@types/sockjs": "^0.3.36", + +@@ -18148,20 +18545,23 @@ “colorette”: “^2.0.10”, + + "compression": "^1.7.4", + + "connect-history-api-fallback": "^2.0.0", + +- "express": "^4.21.2", + +- "default-gateway": "^6.0.3", + +- "express": "^4.17.3", + + "graceful-fs": "^4.2.6", + +- "http-proxy-middleware": "^2.0.7", + +- "html-entities": "^2.4.0", + +- "http-proxy-middleware": "^2.0.3", + + "ipaddr.js": "^2.1.0", + + "launch-editor": "^2.6.1", + + "open": "^10.0.3", + + "p-retry": "^6.2.0", + +- "rimraf": "^5.0.5", + + "schema-utils": "^4.2.0", + + "selfsigned": "^2.4.1", + + "serve-index": "^1.9.1", + + "sockjs": "^0.3.24", + + "spdy": "^4.0.2", + +- "webpack-dev-middleware": "^7.4.2", + +- "ws": "^8.18.0" + +- "webpack-dev-middleware": "^7.1.0", + +- "ws": "^8.16.0" + + }, + + "bin": { + + "webpack-dev-server": "bin/webpack-dev-server.js" + +@@ -18185,17 +18585,14 @@ } + + } + + }, + +- “node_modules/webpack-dev-server/node_modules/@types/express-serve-static-core”: + { + +- "version": "4.19.7", + +- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.7.tgz", + +- "integrity": "sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==", + +- "dev": true, + +- "license": "MIT", + +- "dependencies": { + +- "@types/node": "*", + +- "@types/qs": "*", + +- "@types/range-parser": "*", + +- "@types/send": "*" + +- “node_modules/webpack-dev-server/node_modules/brace-expansion”: { + +- "version": "2.0.1", + +- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + +- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + +- "dev": true, + +- "license": "MIT", + +- "dependencies": { + +- "balanced-match": "^1.0.0" + + } + + }, + + “node_modules/webpack-dev-server/node_modules/chokidar”: { + +@@ -18236,6 +18633,27 @@ “url”: +“https://github.com/sponsors/sindresorhus” + + } + + }, + +- “node_modules/webpack-dev-server/node_modules/glob”: { + +- "version": "10.4.5", + +- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + +- "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + +- "dev": true, + +- "license": "ISC", + +- "dependencies": { + +- "foreground-child": "^3.1.0", + +- "jackspeak": "^3.1.2", + +- "minimatch": "^9.0.4", + +- "minipass": "^7.1.2", + +- "package-json-from-dist": "^1.0.0", + +- "path-scurry": "^1.11.1" + +- }, + +- "bin": { + +- "glob": "dist/esm/bin.mjs" + +- }, + +- "funding": { + +- "url": "https://github.com/sponsors/isaacs" + +- } + +- }, + + “node_modules/webpack-dev-server/node_modules/glob-parent”: { + + “version”: “5.1.2”, + + “resolved”: + “https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz”, + +@@ -18265,6 +18683,22 @@ “url”: +“https://github.com/sponsors/sindresorhus” + + } + + }, + +- “node_modules/webpack-dev-server/node_modules/minimatch”: { + +- "version": "9.0.5", + +- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + +- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + +- "dev": true, + +- "license": "ISC", + +- "dependencies": { + +- "brace-expansion": "^2.0.1" + +- }, + +- "engines": { + +- "node": ">=16 || 14 >=14.17" + +- }, + +- "funding": { + +- "url": "https://github.com/sponsors/isaacs" + +- } + +- }, + + “node_modules/webpack-dev-server/node_modules/open”: { + + “version”: “10.1.0”, + + “resolved”: “https://registry.npmjs.org/open/-/open-10.1.0.tgz”, + +@@ -18282,6 +18716,22 @@ }, + + "funding": { + + "url": "https://github.com/sponsors/sindresorhus" + +- } + +- }, + +- “node_modules/webpack-dev-server/node_modules/rimraf”: { + +- "version": "5.0.10", + +- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + +- "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + +- "dev": true, + +- "license": "ISC", + +- "dependencies": { + +- "glob": "^10.3.7" + +- }, + +- "bin": { + +- "rimraf": "dist/esm/bin.mjs" + +- }, + +- "funding": { + +- "url": "https://github.com/sponsors/isaacs" + + } + + }, + + “node_modules/webpack-node-externals”: { + +@@ -18640,6 +19090,64 @@ }, + + "funding": { + + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + +- } + +- }, + +- “node_modules/wrap-ansi-cjs”: { + +- "name": "wrap-ansi", + +- "version": "7.0.0", + +- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + +- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + +- "dev": true, + +- "license": "MIT", + +- "dependencies": { + +- "ansi-styles": "^4.0.0", + +- "string-width": "^4.1.0", + +- "strip-ansi": "^6.0.0" + +- }, + +- "engines": { + +- "node": ">=10" + +- }, + +- "funding": { + +- "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + +- } + +- }, + +- “node_modules/wrap-ansi-cjs/node_modules/ansi-regex”: { + +- "version": "5.0.1", + +- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + +- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + +- "dev": true, + +- "license": "MIT", + +- "engines": { + +- "node": ">=8" + +- } + +- }, + +- “node_modules/wrap-ansi-cjs/node_modules/ansi-styles”: { + +- "version": "4.3.0", + +- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + +- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + +- "dev": true, + +- "license": "MIT", + +- "dependencies": { + +- "color-convert": "^2.0.1" + +- }, + +- "engines": { + +- "node": ">=8" + +- }, + +- "funding": { + +- "url": "https://github.com/chalk/ansi-styles?sponsor=1" + +- } + +- }, + +- “node_modules/wrap-ansi-cjs/node_modules/strip-ansi”: { + +- "version": "6.0.1", + +- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + +- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + +- "dev": true, + +- "license": "MIT", + +- "dependencies": { + +- "ansi-regex": "^5.0.1" + +- }, + +- "engines": { + +- "node": ">=8" + + } + + }, + + “node_modules/wrap-ansi/node_modules/ansi-regex”: { + +CHANGED: package.json — mkilijanek/package.json +++ gchq/package.json @@ +-1,6 +1,6 @@ { + +“name”: “cyberchef”, + +- “version”: “10.19.4”, + +- “version”: “10.22.1”, + + “description”: “The Cyber Swiss Army Knife for encryption, encoding, + compression and data analysis.”, + + “author”: “n1474335 n1474335@gmail.com”, + + “homepage”: “https://gchq.github.io/CyberChef”, + +@@ -91,7 +91,7 @@ “terser”: “^5.31.1”, + + "webpack": "^5.91.0", + + "webpack-bundle-analyzer": "^4.10.2", + +- “webpack-dev-server”: “5.2.1”, + +- “webpack-dev-server”: “5.0.4”, + + “webpack-node-externals”: “^3.0.0”, + + “worker-loader”: “^3.0.8” + +}, + +@@ -117,7 +117,7 @@ “chi-squared”: “^1.1.0”, + + "codepage": "^1.15.0", + + "crypto-api": "^0.8.5", + +- “crypto-browserify”: “^3.12.0”, + +- “crypto-browserify”: “^3.12.1”, + + “crypto-js”: “^4.2.0”, + + “ctph.js”: “0.0.5”, + + “d3”: “7.9.0”, + +@@ -144,10 +144,10 @@ “json5”: “^2.2.3”, + + "jsonata": "^2.0.3", + + "jsonpath-plus": "^10.3.0", + +- “jsonwebtoken”: “9.0.0”, + +- “jsonwebtoken”: “8.5.1”, + + “jsqr”: “^1.4.0”, + + “jsrsasign”: “^11.1.0”, + +- “kbpgp”: “2.1.15”, + +- “kbpgp”: “^2.1.17”, + + “libbzip2-wasm”: “0.0.4”, + + “libyara-wasm”: “^1.2.1”, + + “lodash”: “^4.17.21”, + +@@ -202,14 +202,9 @@ “lint:grammar”: “cspell ./src”, + + "postinstall": "npx grunt exec:fixCryptoApiImports && npx grunt exec:fixSnackbarMarkup && npx grunt exec:fixJimpModule", + + "newop": "node --experimental-modules --experimental-json-modules src/core/config/scripts/newOperation.mjs", + +- “minor”: “node –experimental-modules –experimental-json-modules + src/core/config/scripts/newMinorVersion.mjs”, + +- “minor”: “node –experimental-modules –experimental-json-modules + src/core/config/scripts/newMinorVersion.mjs && npm version minor + –git-tag-version=false && echo "Updated to version v$(npm pkg get + version | xargs), please create a pull request and once merged use + ‘npm run tag’"”, + +- “tag”: “git tag -s "v$(npm pkg get version | xargs)\" -m \"$(npm pkg + get version | xargs)" && echo "Created v$(npm pkg get version | + xargs), now check and push the tag"”, + + “getheapsize”: “node -e + ‘console.log(node heap limit = ${require(\"v8\").getHeapStatistics().heap_size_limit / (1024 * 1024)} Mb)’”, + +- “setheapsize”: “export NODE_OPTIONS=–max_old_space_size=2048”, + +- “security:audit”: “npm audit”, + +- “security:audit:json”: “npm audit –json”, + +- “security:fix”: “./scripts/security-fix.sh”, + +- “security:triage”: “node scripts/vulnerability-triage.js”, + +- “security:triage:json”: “node scripts/vulnerability-triage.js + –json”, + +- “security:check”: “npm run security:triage && npm run lint” + +- “setheapsize”: “export NODE_OPTIONS=–max_old_space_size=2048” + +} + +} + +REMOVED in gchq (exists in mkilijanek): scripts/security-fix.sh REMOVED +in gchq (exists in mkilijanek): scripts/vulnerability-triage.js + +CHANGED: src/core/Utils.mjs — mkilijanek/src/core/Utils.mjs +++ +gchq/src/core/Utils.mjs @@ -177,7 +177,7 @@ */ + + static printable(str, preserveWs=false, onlyAscii=false) { + + if (onlyAscii) { + +- return str.replace(/[^\x20-\x7f]/g, "."); + +- return str.replace(/[^\x20-\x7e]/g, "."); + + } + + + + // eslint-disable-next-line no-misleading-character-class + +CHANGED: src/core/config/Categories.json — +mkilijanek/src/core/config/Categories.json +++ +gchq/src/core/config/Categories.json @@ -26,6 +26,8 @@ “From Base45”, + + "To Base58", + + "From Base58", + +- "To Bech32", + +- "From Bech32", + + "To Base62", + + "From Base62", + + "To Base64", + +CHANGED: src/core/config/scripts/newMinorVersion.mjs — +mkilijanek/src/core/config/scripts/newMinorVersion.mjs +++ +gchq/src/core/config/scripts/newMinorVersion.mjs @@ -7,138 +7,197 @@ */ + +/* eslint no-console: [“off”] */ + +- + +-import prompt from “prompt”; + +-import colors from “colors”; + ++/* eslint jsdoc/require-jsdoc: [“off”] */ + +- import path from “path”; + +-import fs from “fs”; + ++import fs from “fs”; + +import process from “process”; + +- + +-const dir = path.join(process.cwd() + “/src/core/config/”); + +-if (!fs.existsSync(dir)) { + +- console.log(“:” + process.cwd()); + +- console.log(“Error: newMinorVersion.mjs should be run from the + project root”); + +- console.log(“Example> node –experimental-modules + src/core/config/scripts/newMinorVersion.mjs”); + +- process.exit(1); + ++import { execSync } from “child_process”; + +- + ++const ignoredAuthors = [“github-advanced-security[bot]”, +“dependabot[bot]”]; + +- + ++async function main() { + +- const dir = path.join(process.cwd() + “/src/core/config/”); + +- if (!fs.existsSync(dir)) { + +- console.log("\nCWD: " + process.cwd()); + +- console.log( + +- "Error: newMinorVersion.mjs should be run from the project root", + +- ); + +- console.log( + +- "Example> node --experimental-modules src/core/config/scripts/newMinorVersion.mjs", + +- ); + +- process.exit(1); + +- } + +- + +- let changelogData = fs.readFileSync( + +- path.join(process.cwd(), "CHANGELOG.md"), + +- "utf8", + +- ); + +- const lastVersion = changelogData.match( + +- /## Details\s+### \[(\d+)\.(\d+)\.(\d+)\]/, + +- ); + +- const newVersion = [ + +- parseInt(lastVersion[1], 10), + +- parseInt(lastVersion[2], 10) + 1, + +- 0, + +- ]; + +- + +- let knownContributors = changelogData.match(/^[@([^\]]+)]/gm); + +- knownContributors = knownContributors.map((c) => c.slice(2, -1)); + +- + +- const date = new Date().toISOString().split(“T”)[0]; + +- + +- const lastVersionSha = execSync( + +- `git rev-list -n 1 v${lastVersion[1]}.${lastVersion[2]}.${lastVersion[3]}`, + +- { + +- encoding: "utf8", + +- }, + +- ).trim(); + +- if (lastVersionSha.length !== 40) { + +- throw new Error( + +- `Unexpected output from git rev-list: ${lastVersionSha}`, + +- ); + +- } + +- + +- const features = []; + +- + +- const commits = await ( + +- await fetch(`https://api.github.com/repos/gchq/cyberchef/commits`) + +- ).json(); + +- let foundLast = false; + +- for (const commit of commits) { + +- if (commit.sha === lastVersionSha) { + +- foundLast = true; + +- break; + +- } else { + +- const feature = { + +- message: "", + +- authors: [], + +- id: "", + +- }; + +- + +- const msgparts = commit.commit.message.split("\n\n"); + +- feature.message = msgparts[0]; + +- const prIdMatch = feature.message.match(/\(#(\d+)\)$/); + +- if (prIdMatch !== null) { + +- feature.message = feature.message + +- .replace(prIdMatch[0], "") + +- .trim(); + +- feature.id = prIdMatch[1]; + +- } + +- + +- if (!ignoredAuthors.includes(commit.author.login)) { + +- feature.authors.push(commit.author.login); + +- } + +- + +- if (msgparts.length > 1) { + +- msgparts[1] + +- .split("\n") + +- .filter((line) => line.startsWith("Co-authored-by: ")) + +- .forEach((line) => { + +- let coAuthor = line.slice("Co-authored-by: ".length); + +- if (coAuthor.indexOf(">") !== -1) { + +- const email = coAuthor.slice( + +- coAuthor.indexOf("<") + 1, + +- coAuthor.indexOf(">"), + +- ); + +- if (email.endsWith("@users.noreply.github.com")) { + +- coAuthor = email.slice( + +- email.indexOf("+") + 1, + +- -"@users.noreply.github.com".length, + +- ); + +- } else { + +- throw new Error( + +- "Could not get ID of co-author: " + + +- coAuthor, + +- ); + +- } + +- } else { + +- throw new Error( + +- "Could not get email of co-author: " + coAuthor, + +- ); + +- } + +- if (!ignoredAuthors.includes(coAuthor)) { + +- feature.authors.push(coAuthor); + +- } + +- }); + +- } + +- + +- features.push(feature); + +- } + +- } + +- if (!foundLast) { + +- throw new Error( + +- `Could not find last version commit: ${lastVersionSha} - need to add paging functionality`, + +- ); + +- } + +- + +- let message = + ### [${newVersion[0]}.${newVersion[1]}.${newVersion[2]}] - ${date}\n; + +- + +- const authors = []; + +- const prIDs = []; + +- const commitIDs = []; + +- + +- features.forEach((feature) => { + +- const id = + +- feature.id.length > 10 ? feature.id.slice(0, 7) : "#" + feature.id; + +- message += `- ${feature.message} ${feature.authors.map((a) => `[@${a}]`).join(" ")} | [${id}]\n`; + +- + +- feature.authors.forEach((author) => { + +- if (!knownContributors.includes(author)) { + +- knownContributors.push(author); + +- authors.push(`[@${author}]: https://github.com/${author}`); + +- } + +- }); + +- + +- if (feature.id.length > 10) { + +- commitIDs.push( + +- `[${id}]: https://github.com/gchq/CyberChef/commit/${feature.id}`, + +- ); + +- } else { + +- prIDs.push( + +- `[#${feature.id}]: https://github.com/gchq/CyberChef/pull/${feature.id}`, + +- ); + +- } + +- }); + +- + +- // Message + +- changelogData = changelogData.replace( + +- /## Details\n\n/, + +- "## Details\n\n" + message + "\n", + +- ); + +- + +- // Tag + +- const newTag = + [${newVersion[0]}.${newVersion[1]}.${newVersion[2]}]: https://github.com/gchq/CyberChef/releases/tag/v${newVersion[0]}.${newVersion[1]}.${newVersion[2]}\n; + +- changelogData = changelogData.replace( + +- /\n\n(\[\d+\.\d+\.\d+\]: https)/, + +- "\n\n" + newTag + "$1", + +- ); + +- + +- // Author + +- authors.forEach((author) => { + +- changelogData = changelogData.replace( + +- /(\n\[@[^\]]+\]: https:\/\/github\.com\/[^\n]+\n)\n/, + +- "$1" + author + "\n\n", + +- ); + +- }); + +- + +- // Commit IDs + +- commitIDs.forEach((commitID) => { + +- changelogData = changelogData.replace( + +- /(\n\[[^\].]+\]: https:\/\/github.com\/gchq\/CyberChef\/commit\/[^\n]+\n)\n/, + +- "$1" + commitID + "\n\n", + +- ); + +- }); + +- + +- // PR IDs + +- prIDs.forEach((prID) => { + +- changelogData = changelogData.replace( + +- /(\n\[#[^\]]+\]: https:\/\/github.com\/gchq\/CyberChef\/(?:pull|issues)\/[^\n]+\n)\n*$/, + +- "$1" + prID + "\n\n", + +- ); + +- }); + +- + +- fs.writeFileSync(path.join(process.cwd(), “CHANGELOG.md”), + changelogData); + +} + +- + +-let changelogData = fs.readFileSync(path.join(process.cwd(), +“CHANGELOG.md”), “utf8”); + +-const lastVersion = changelogData.match(/## Details+### [().().()]/); + +-const newVersion = []; + +- + +-let knownContributors = changelogData.match(/^[@([^\]]+)]/gm); + +-knownContributors = knownContributors.map(c => c.slice(2, -1)); + +- + +-const date = (new Date()).toISOString().split(“T”)[0]; + +- + +-const schema = { + +- properties: { + +- message: { + +- description: "A short but descriptive summary of a feature in this version", + +- example: "Added 'Op name' operation", + +- prompt: "Feature description", + +- type: "string", + +- required: true, + +- }, + +- author: { + +- description: "The author of the feature (only one supported, edit manually to add more)", + +- example: "n1474335", + +- prompt: "Author", + +- type: "string", + +- default: "n1474335" + +- }, + +- id: { + +- description: "The PR number or full commit hash for this feature.", + +- example: "1200", + +- prompt: "Pull request or commit ID", + +- type: "string" + +- }, + +- another: { + +- description: "y/n", + +- example: "y", + +- prompt: "Add another feature?", + +- type: "string", + +- pattern: /^[yn]$/, + +- } + +- } + +-}; + +- + +-// Build schema + +-for (const prop in schema.properties) { + +- const p = schema.properties[prop]; + +- p.description = “” + colors.white(p.description) + colors.cyan(“:” + + p.example) + “” + colors.green(p.prompt); + +-} + +- + +-prompt.message = ““; + +-prompt.delimiter = “:”.green; + +- + +-const features = []; + +-const authors = []; + +-const prIDs = []; + +-const commitIDs = []; + +- + +-prompt.start(); + +- + +-const getFeature = function() { + +- prompt.get(schema, (err, result) => { + +- if (err) { + +- console.log("\nExiting script."); + +- process.exit(0); + +- } + +- + +- features.push(result); + +- + +- if (result.another === "y") { + +- getFeature(); + +- } else { + +- let message = `### [${newVersion[0]}.${newVersion[1]}.${newVersion[2]}] - ${date}\n`; + +- + +- features.forEach(feature => { + +- const id = feature.id.length > 10 ? feature.id.slice(0, 7) : "#" + feature.id; + +- message += `- ${feature.message} [@${feature.author}] | [${id}]\n`; + +- + +- if (!knownContributors.includes(feature.author)) { + +- authors.push(`[@${feature.author}]: https://github.com/${feature.author}`); + +- } + +- + +- if (feature.id.length > 10) { + +- commitIDs.push(`[${id}]: https://github.com/gchq/CyberChef/commit/${feature.id}`); + +- } else { + +- prIDs.push(`[#${feature.id}]: https://github.com/gchq/CyberChef/pull/${feature.id}`); + +- } + +- }); + +- + +- // Message + +- changelogData = changelogData.replace(/## Details\n\n/, "## Details\n\n" + message + "\n"); + +- + +- // Tag + +- const newTag = `[${newVersion[0]}.${newVersion[1]}.${newVersion[2]}]: https://github.com/gchq/CyberChef/releases/tag/v${newVersion[0]}.${newVersion[1]}.${newVersion[2]}\n`; + +- changelogData = changelogData.replace(/\n\n(\[\d+\.\d+\.\d+\]: https)/, "\n\n" + newTag + "$1"); + +- + +- // Author + +- authors.forEach(author => { + +- changelogData = changelogData.replace(/(\n\[@[^\]]+\]: https:\/\/github\.com\/[^\n]+\n)\n/, "$1" + author + "\n\n"); + +- }); + +- + +- // Commit IDs + +- commitIDs.forEach(commitID => { + +- changelogData = changelogData.replace(/(\n\[[^\].]+\]: https:\/\/github.com\/gchq\/CyberChef\/commit\/[^\n]+\n)\n/, "$1" + commitID + "\n\n"); + +- }); + +- + +- // PR IDs + +- prIDs.forEach(prID => { + +- changelogData = changelogData.replace(/(\n\[#[^\]]+\]: https:\/\/github.com\/gchq\/CyberChef\/pull\/[^\n]+\n)\n*$/, "$1" + prID + "\n\n"); + +- }); + +- + +- fs.writeFileSync(path.join(process.cwd(), "CHANGELOG.md"), changelogData); + +- + +- console.log("Written CHANGELOG.md\nCommit changes and then run `npm version minor`."); + +- } + +- }); + +-}; + +- + +-getFeature(); + ++main().catch(console.error); + +ADDED in gchq (missing in mkilijanek): src/core/lib/Bech32.mjs + +CHANGED: src/core/lib/Hex.mjs — mkilijanek/src/core/lib/Hex.mjs +++ +gchq/src/core/lib/Hex.mjs @@ -33,7 +33,7 @@ if (data instanceof +ArrayBuffer) data = new Uint8Array(data); + + let output = ""; + +- const prepend = (delim === “0x” || delim === “\x”); + +- const prepend = (delim === “0x” || delim === “\x” || delim === “%”); + + for (let i = 0; i < data.length; i++) { + + const hex = data[i].toString(16).padStart(padding, "0"); + +CHANGED: src/core/lib/JA4.mjs — mkilijanek/src/core/lib/JA4.mjs +++ +gchq/src/core/lib/JA4.mjs @@ -91,9 +91,7 @@ let alpn = “00”; + + for (const ext of tlsr.handshake.value.extensions.value) { + + if (ext.type.value === "application_layer_protocol_negotiation") { + +- alpn = parseFirstALPNValue(ext.value.data); + +- alpn = alpn.charAt(0) + alpn.charAt(alpn.length - 1); + +- if (alpn.charCodeAt(0) > 127) alpn = "99"; + +- alpn = alpnFingerprint(parseFirstALPNValue(ext.value.data)); + + break; + + } + + } + +@@ -212,9 +210,7 @@ let alpn = “00”; + + for (const ext of tlsr.handshake.value.extensions.value) { + + if (ext.type.value === "application_layer_protocol_negotiation") { + +- alpn = parseFirstALPNValue(ext.value.data); + +- alpn = alpn.charAt(0) + alpn.charAt(alpn.length - 1); + +- if (alpn.charCodeAt(0) > 127) alpn = "99"; + +- alpn = alpnFingerprint(parseFirstALPNValue(ext.value.data)); + + break; + + } + + } + +@@ -262,3 +258,33 @@ default: return “00”; // Unknown + + } + +} + +- + ++/** + +- - Checks if a byte is ASCII alphanumeric (0-9, A-Z, a-z). + +- - @param {number} byte + +- - @returns {boolean} + +- */ + ++function isAlphanumeric(byte) { + +- return (byte >= 0x30 && byte <= 0x39) || + +- (byte >= 0x41 && byte <= 0x5A) || + +- (byte >= 0x61 && byte <= 0x7A); + ++} + +- + ++/** + +- - Computes the 2-character ALPN fingerprint from raw ALPN bytes. + +- - If both first and last bytes are ASCII alphanumeric, returns + their characters. + +- - Otherwise, returns first hex digit of first byte + last hex + digit of last byte. + +- - @param {Uint8Array|null} rawBytes + +- - @returns {string} + +- */ + ++function alpnFingerprint(rawBytes) { + +- if (!rawBytes || rawBytes.length === 0) return “00”; + +- const firstByte = rawBytes[0]; + +- const lastByte = rawBytes[rawBytes.length - 1]; + +- if (isAlphanumeric(firstByte) && isAlphanumeric(lastByte)) { + +- return String.fromCharCode(firstByte) + String.fromCharCode(lastByte); + +- } + +- const firstHex = firstByte.toString(16).padStart(2, “0”); + +- const lastHex = lastByte.toString(16).padStart(2, “0”); + +- return firstHex[0] + lastHex[1]; + ++} + +CHANGED: src/core/lib/LS47.mjs — mkilijanek/src/core/lib/LS47.mjs +++ +gchq/src/core/lib/LS47.mjs @@ -223,19 +223,8 @@ initTiles(); + + checkKey(key); + + let padding = ""; + +- + +- // Use cryptographically secure random if available, otherwise + fallback to Math.random + +- const getSecureRandom = () => { + +- if (typeof crypto !== "undefined" && crypto.getRandomValues) { + +- const array = new Uint32Array(1); + +- crypto.getRandomValues(array); + +- return array[0] / (0xFFFFFFFF + 1); + +- } + +- return Math.random(); + +- }; + +- for (let i = 0; i < paddingSize; i++) { + +- padding += letters.charAt(Math.floor(getSecureRandom() * letters.length)); + +- padding += letters.charAt(Math.floor(Math.random() * letters.length)); + + } + + return encrypt(key, padding+plaintext+“—”+signature); + +} + +CHANGED: src/core/lib/TLS.mjs — mkilijanek/src/core/lib/TLS.mjs +++ +gchq/src/core/lib/TLS.mjs @@ -247,7 +247,7 @@ description: “Selected +Compression Method”, + + length: 1, + + data: b.getBytes(1), + +- value: COMPRESSION_METHODS_LOOKUP[s.readInt(1)] || "Unknown" + +- value: s.readInt(1) // TODO: Compression method name here + + }; + + // Extensions Length + +@@ -303,7 +303,7 @@ description: “Compression Method”, + + length: 1, + + data: b.getBytes(1), + +- value: COMPRESSION_METHODS_LOOKUP[s.readInt(1)] || "Unknown" + +- value: s.readInt(1) // TODO: Compression method name here + + }); + + } + + return cm; + +@@ -837,15 +837,6 @@ ]; + +/** + +- - Compression methods lookup table + +- */ + +-const COMPRESSION_METHODS_LOOKUP = { + +- 0: “null”, + +- 1: “DEFLATE”, + +- 64: “LZS” + +-}; + +- + +-/** + +- Parses the supported_versions extension and returns the highest + supported version. + +- @param {Uint8Array} bytes + +- @returns {number} + +@@ -872,15 +863,15 @@ } + +/** + +- - Parses the application_layer_protocol_negotiation extension and + returns the first value. + +- - Parses the application_layer_protocol_negotiation extension and + returns the first value as raw bytes. + + - @param {Uint8Array} bytes + +- - @returns {number} + +- - @returns {Uint8Array|null} + + */ + +export function parseFirstALPNValue(bytes) { + + const s = new Stream(bytes); + + const alpnExtLen = s.readInt(2); + +- if (alpnExtLen < 3) return “00”; + +- if (alpnExtLen < 2) return null; + + const strLen = s.readInt(1); + +- if (strLen < 2) return “00”; + +- return s.readString(strLen); + +- if (strLen < 1) return null; + +- return s.getBytes(strLen); + +} + +ADDED in gchq (missing in mkilijanek): +src/core/operations/FromBech32.mjs + +CHANGED: src/core/operations/FromHexdump.mjs — +mkilijanek/src/core/operations/FromHexdump.mjs +++ +gchq/src/core/operations/FromHexdump.mjs @@ -43,7 +43,7 @@ */ + + run(input, args) { + + const output = [], + +- regex = /^\s*(?:[\dA-F]{4,16}h?:?)?[ \t]+((?:[\dA-F]{2} ){1,8}(?:[ \t]|[\dA-F]{2}-)(?:[\dA-F]{2} ){1,8}|(?:[\dA-F]{4} )*[\dA-F]{4}|(?:[\dA-F]{2} )*[\dA-F]{2})/igm; + +- regex = /^\s*(?:[\dA-F]{4,16}h?:?)?[ \t]+((?:[\dA-F]{2} ){1,8}(?:[ \t]|[\dA-F]{2}-)(?:[\dA-F]{2} ){1,8}|(?:[\dA-F]{4} )+(?:[\dA-F]{2})?|(?:[\dA-F]{2} )*[\dA-F]{2})/igm; + + let block, line; + + + + while ((block = regex.exec(input))) { + +CHANGED: src/core/operations/FromQuotedPrintable.mjs — +mkilijanek/src/core/operations/FromQuotedPrintable.mjs +++ +gchq/src/core/operations/FromQuotedPrintable.mjs @@ -23,7 +23,7 @@ + + this.name = "From Quoted Printable"; + + this.module = "Default"; + +- this.description = "Converts QP-encoded text back to standard text.

e.g. The quoted-printable encoded string hello=20world becomes hello world"; + +- this.description = "Converts QP-encoded text back to standard text. This format is a content transfer encoding common in email messages.

e.g. The quoted-printable encoded string hello=20world becomes hello world"; + + this.infoURL = "https://wikipedia.org/wiki/Quoted-printable"; + + this.inputType = "string"; + + this.outputType = "byteArray"; + +CHANGED: src/core/operations/ToBase85.mjs — +mkilijanek/src/core/operations/ToBase85.mjs +++ +gchq/src/core/operations/ToBase85.mjs @@ -33,7 +33,7 @@ value: +ALPHABET_OPTIONS + + }, + + { + +- name: "Include delimeter", + +- name: "Include delimiter", + + type: "boolean", + + value: false + + } + +ADDED in gchq (missing in mkilijanek): src/core/operations/ToBech32.mjs + +CHANGED: src/core/operations/ToQuotedPrintable.mjs — +mkilijanek/src/core/operations/ToQuotedPrintable.mjs +++ +gchq/src/core/operations/ToQuotedPrintable.mjs @@ -23,7 +23,7 @@ + + this.name = "To Quoted Printable"; + + this.module = "Default"; + +- this.description = "Quoted-Printable, or QP encoding, is an encoding using printable ASCII characters (alphanumeric and the equals sign '=') to transmit 8-bit data over a 7-bit data path or, generally, over a medium which is not 8-bit clean. It is defined as a MIME content transfer encoding for use in e-mail.

QP works by using the equals sign '=' as an escape character. It also limits line length to 76, as some software has limits on line length."; + +- this.description = "Quoted-Printable, or QP encoding, is an encoding using printable ASCII characters (alphanumeric and the equals sign '=') to transmit 8-bit data over a 7-bit data path or, generally, over a medium which is not 8-bit clean. It is defined as a MIME content transfer encoding for use in email.

QP works by using the equals sign '=' as an escape character. It also limits line length to 76, as some software has limits on line length."; + + this.infoURL = "https://wikipedia.org/wiki/Quoted-printable"; + + this.inputType = "ArrayBuffer"; + + this.outputType = "string"; + +CHANGED: src/core/vendor/gost/gostRandom.mjs — +mkilijanek/src/core/vendor/gost/gostRandom.mjs +++ +gchq/src/core/vendor/gost/gostRandom.mjs @@ -114,10 +114,7 @@ // Native +window cryptographic interface + + rootCrypto.getRandomValues(u8); + + } else { + +- // Standard Javascript method - WARNING: Not cryptographically secure! + +- if (typeof console !== "undefined" && console.warn) { + +- console.warn("SECURITY WARNING: crypto.getRandomValues not available, falling back to Math.random() which is NOT cryptographically secure!"); + +- } + +- // Standard Javascript method + + for (var i = 0, n = u8.length; i < n; i++) + + u8[i] = Math.floor(256 * Math.random()) & 255; + + } + +CHANGED: src/node/apiUtils.mjs — mkilijanek/src/node/apiUtils.mjs +++ +gchq/src/node/apiUtils.mjs @@ -66,7 +66,7 @@ * @param str + +*/ + +export function sanitise(str) { + +- return str.replace(/ /g, ““).toLowerCase(); + +- return str.replace(/[/.-]/g, ““).toLowerCase(); + +} + +CHANGED: src/web/App.mjs — mkilijanek/src/web/App.mjs +++ +gchq/src/web/App.mjs @@ -650,7 +650,7 @@ + + // const compareURL = `https://github.com/gchq/CyberChef/compare/v${prev.join(".")}...v${PKG_VERSION}`; + +- let compileInfo = `Last build: ${timeSinceCompile.substr(0, 1).toUpperCase() + timeSinceCompile.substr(1)} ago`; + +- let compileInfo = `Last build: ${timeSinceCompile.substring(0, 1).toUpperCase() + timeSinceCompile.substring(1)} ago`; + + + + if (window.compileMessage !== "") { + + compileInfo += " - " + window.compileMessage; + +CHANGED: src/web/static/sitemap.mjs — +mkilijanek/src/web/static/sitemap.mjs +++ +gchq/src/web/static/sitemap.mjs @@ -1,6 +1,5 @@ import sm from +“sitemap”; + +-import OperationConfig from “../../core/config/OperationConfig.json” +assert {type: “json”}; + +- + ++import OperationConfig from “../../core/config/OperationConfig.json” +assert { type: “json” }; + +/** + +- Generates an XML sitemap for all CyberChef operations and a number + of recipes. + +@@ -10,25 +9,25 @@ * @license Apache-2.0 + +*/ + +-const smStream = new sm.SitemapStream({ + +- hostname: “https://gchq.github.io/CyberChef”, + +-}); + ++const baseUrl = “https://gchq.github.io/CyberChef/”; + +- + ++const smStream = new sm.SitemapStream({}); + +smStream.write({ + +- url: “/”, + +- url: baseUrl, + + changefreq: “weekly”, + +- priority: 1.0 + +- priority: 1.0, + +}); + +for (const op in OperationConfig) { + + smStream.write({ + +- url: `/?op=${encodeURIComponent(op)}`, + +- url: `${baseUrl}?op=${encodeURIComponent(op)}`, + + changeFreq: "yearly", + +- priority: 0.5 + +- priority: 0.5, + + }); + +} + +smStream.end(); + +sm.streamToPromise(smStream).then( + +- buffer => console.log(buffer.toString()) // eslint-disable-line + no-console + +- (buffer) => console.log(buffer.toString()), // eslint-disable-line + no-console + +); + +CHANGED: src/web/waiters/InputWaiter.mjs — +mkilijanek/src/web/waiters/InputWaiter.mjs +++ +gchq/src/web/waiters/InputWaiter.mjs @@ -151,8 +151,20 @@ // Event +handlers + + EditorView.domEventHandlers({ + + paste(event, view) { + +- const clipboardData = event.clipboardData; + +- const items = clipboardData.items; + +- const files = []; + +- for (let i = 0; i < items.length; i++) { + +- const item = items[i]; + +- if (item.kind === "file") { + +- const file = item.getAsFile(); + +- files.push(file); + +- + +- event.preventDefault(); // Prevent the default paste behavior + +- } + +- } + + setTimeout(() => { + +- self.afterPaste(event); + +- self.afterPaste(files); + + }); + + } + + }) + +@@ -914,9 +926,12 @@ * Handler that fires just after input paste events. + + * Checks whether the EOL separator or character encoding should be updated. + + * + +- * @param {event} e + +- */ + +- afterPaste(e) { + +- * @param {File[]} files - An array of any files that were included in the paste event + +- */ + +- afterPaste(files) { + +- if (files.length > 0) { + +- this.loadUIFiles(files); + +- } + + // If EOL has been fixed, skip this. + + if (this.eolState > 1) return; + +CHANGED: src/web/workers/DishWorker.mjs — +mkilijanek/src/web/workers/DishWorker.mjs +++ +gchq/src/web/workers/DishWorker.mjs @@ -7,6 +7,8 @@ */ + +import Dish from “../../core/Dish.mjs”; + ++import DishError from “../../core/errors/DishError.mjs”; + ++import { CHR_ENC_SIMPLE_REVERSE_LOOKUP } from +“../../core/lib/ChrEnc.mjs”; + +import Utils from “../../core/Utils.mjs”; + +import cptable from “codepage”; + +import loglevelMessagePrefix from “loglevel-message-prefix”; + +@@ -98,7 +100,7 @@ try { + + str = cptable.utils.decode(data.encoding, new Uint8Array(data.buffer)); + + } catch (err) { + +- str = err; + +- str = new DishError(`Error decoding buffer with encoding ${CHR_ENC_SIMPLE_REVERSE_LOOKUP[data.encoding]}: ${err.message}`).toString(); + + } + + } + +CHANGED: tests/node/tests/Utils.mjs — +mkilijanek/tests/node/tests/Utils.mjs +++ +gchq/tests/node/tests/Utils.mjs @@ -20,4 +20,10 @@ +assert.equal(Utils.parseEscapedChars(“\\\‘“),”\’”); + + }), + +- it(“Utils: should replace delete character”, () => { + +- assert.equal( + +- Utils.printable("\x7e\x7f\x80\xa7", false, true), + +- "\x7e...", + +- ); + +- }), + +]); + +CHANGED: tests/node/tests/nodeApi.mjs — +mkilijanek/tests/node/tests/nodeApi.mjs +++ +gchq/tests/node/tests/nodeApi.mjs @@ -343,6 +343,42 @@ “args”: [false] } + + ]); + + assert.strictEqual(result.toString(), "begin_something_aaaaaaaaaaaaaa_end_something"); + +- }), + +- + +- it(“chef.bake: should accept operation names from Chef Website which + contain forward slash”, () => { + +- const result = chef.bake("I'll have the test salmon", [ + +- { "op": "Find / Replace", + +- "args": [{ "option": "Regex", "string": "test" }, "good", true, false, true, false]} + +- ]); + +- assert.strictEqual(result.toString(), "I'll have the good salmon"); + +- }), + +- + +- it(“chef.bake: should accept operation names from Chef Website which + contain a hyphen”, () => { + +- const result = chef.bake("I'll have the test salmon", [ + +- { "op": "Adler-32 Checksum", + +- "args": [] } + +- ]); + +- assert.strictEqual(result.toString(), "6e4208f8"); + +- }), + +- + +- it(“chef.bake: should accept operation names from Chef Website which + contain a period”, () => { + +- const result = chef.bake("30 13 02 01 05 16 0e 41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f", [ + +- { "op": "Parse ASN.1 hex string", + +- "args": [0, 32] } + +- ]); + +- assert.strictEqual(result.toString(), `SEQUENCE + +- INTEGER 05 + +- IA5String ‘Anybody there?’ + ++`); + +- }), + +- + +- it(“Excluded operations: throw a sensible error when you try and + call one”, () => { + +- try { + +- chef.fork(); + +- } catch (e) { + +- assert.strictEqual(e.type, "ExcludedOperationError"); + +- assert.strictEqual(e.message, "Sorry, the Fork operation is not available in the Node.js version of CyberChef."); + +- } + + }), + + it(“chef.bake: cannot accept flowControl operations in recipe”, () + => { + +CHANGED: tests/operations/index.mjs — +mkilijanek/tests/operations/index.mjs +++ +gchq/tests/operations/index.mjs @@ -26,6 +26,7 @@ import +“./tests/Base85.mjs”; + +import “./tests/Base92.mjs”; + +import “./tests/BCD.mjs”; + ++import “./tests/Bech32.mjs”; + +import “./tests/BitwiseOp.mjs”; + +import “./tests/BLAKE2b.mjs”; + +import “./tests/BLAKE2s.mjs”; + +ADDED in gchq (missing in mkilijanek): tests/operations/tests/Bech32.mjs + +CHANGED: tests/operations/tests/Code.mjs — +mkilijanek/tests/operations/tests/Code.mjs +++ +gchq/tests/operations/tests/Code.mjs @@ -322,8 +322,21 @@ ] + + } + + ], + +- expectedMatch: /^Invalid JPath expression: jsonPath: self is not defined:/ + +- }, + +- expectedMatch: /^Invalid JPath expression: Unexpected "{" at character 1/ + +- }, + +- { + +- name: "JPath Expression: Script-based RCE", + +- input: "[{}]", + +- recipeConfig: [ + +- { + +- "op": "JPath expression", + +- "args": [ + +- "$..[?(p=\"console.log(this.process.mainModule.require('child_process').execSync('id').toString())\";a=''[['constructor']][['constructor']](p);a())]", + +- "\n" + +- ] + +- } + +- ], + +- expectedMatch: /^Invalid JPath expression: jsonPath: Cannot read properties of {2}\(reading 'constructor'\): / }, + + { + + name: "CSS selector", + + input: '
\n

hello

\n

world

\n

again

\n
', + +CHANGED: tests/operations/tests/Hex.mjs — +mkilijanek/tests/operations/tests/Hex.mjs +++ +gchq/tests/operations/tests/Hex.mjs @@ -38,6 +38,20 @@ “op”: “To Hex”, + + "args": [ + + "0x with comma", + +- 0 + +- ] + +- } + +- ] + +- }, + +- { + +- name: "ASCII to Hex with percent deliminator", + +- input: "aberystwyth", + +- expectedOutput: "%61%62%65%72%79%73%74%77%79%74%68", + +- recipeConfig: [ + +- { + +- "op": "To Hex", + +- "args": [ + +- "Percent", + + 0 + + ] + + } + +CHANGED: tests/operations/tests/Hexdump.mjs — +mkilijanek/tests/operations/tests/Hexdump.mjs +++ +gchq/tests/operations/tests/Hexdump.mjs @@ -153,6 +153,17 @@ ], + + }, + + { + +- name: "From Hexdump: xxd format, odd number of bytes", + +- input: "00000000: 6162 6364 65 abcde", + +- expectedOutput: "abcde", + +- recipeConfig: [ + +- { + +- op: "From Hexdump", + +- args: [] + +- } + +- ], + +- }, + +- { + + name: "From Hexdump: Wireshark", + + input: `00000000 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f ........ ........ + +00000010 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f …….. …….. + +CHANGED: tests/operations/tests/JA4.mjs — +mkilijanek/tests/operations/tests/JA4.mjs +++ +gchq/tests/operations/tests/JA4.mjs @@ -27,6 +27,28 @@ { + + "op": "JA4 Fingerprint", + + "args": ["Hex", "JA4 Original Rendering"] + +- } + +- ], + +- }, + +- { + +- name: "JA4 Fingerprint: TLS 1.3 with whitespace-only ALPN", + +- input: "1603010200010001fc0303ed338a18e711d670cdc472ff570a5b59f1ace12e5365918bf68bf845019147b6207e4437bfb062d98a4aeb753be8f09022a9dc9413d7694dad4db57fcdcf076e820024130213031301c02cc030c02bc02fcca9cca8c024c028c023c027009f009e006b006700ff0100018f0000001800160000136465762e636f6e74656e74677261622e6e6574000b000403000102000a00160014001d0017001e00190018010001010102010301040023000000100004000201200016000000170000000d002a0028040305030603080708080809080a080b080408050806040105010601030303010302040205020602002b00050403040303002d00020101003300260024001d00207af053336d5e2c1675aa4c6ce78de5e5fdbd296538113f051ea17ccb64289f22001500d2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + +- expectedOutput: "t13d181220_85036bcba153_d41ae481755e", + +- recipeConfig: [ + +- { + +- "op": "JA4 Fingerprint", + +- "args": ["Hex", "JA4"] + +- } + +- ], + +- }, + +- { + +- name: "JA4 Fingerprint: TLS 1.3 with ALPN containing a whitespace", + +- input: "1603010200010001fc0303273682a603be3f64dd025df4ad0f4d2d13043c3a233405a68bb29b865808749a20f4dfc40242b2fce38fae26c516ef9bef20a1b9349eba3c003780168d72471f5c0024130213031301c02cc030c02bc02fcca9cca8c024c028c023c027009f009e006b006700ff0100018f0000001800160000136465762e636f6e74656e74677261622e6e6574000b000403000102000a00160014001d0017001e0019001801000101010201030104002300000010000500030261200016000000170000000d002a0028040305030603080708080809080a080b080408050806040105010601030303010302040205020602002b00050403040303002d00020101003300260024001d0020f4dd1567bd858d3a9f1d88db1fee6a10ab0ea1aa6afe96ffb6a7c4d79dea4075001500d10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + +- expectedOutput: "t13d181260_85036bcba153_d41ae481755e", + +- recipeConfig: [ + +- { + +- "op": "JA4 Fingerprint", + +- "args": ["Hex", "JA4"] + + } + + ], + + },