@blamejs/blamejs-shop 0.5.12 → 0.5.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -0
- package/lib/asset-manifest.json +1 -1
- package/lib/vendor/MANIFEST.json +632 -416
- package/lib/vendor/blamejs/.clusterfuzzlite/Dockerfile +21 -10
- package/lib/vendor/blamejs/.clusterfuzzlite/build.sh +30 -9
- package/lib/vendor/blamejs/.github/dependabot.yml +8 -0
- package/lib/vendor/blamejs/.github/workflows/actions-lint.yml +3 -3
- package/lib/vendor/blamejs/.github/workflows/cflite_batch.yml +7 -2
- package/lib/vendor/blamejs/.github/workflows/cflite_pr.yml +7 -2
- package/lib/vendor/blamejs/.github/workflows/ci.yml +21 -21
- package/lib/vendor/blamejs/.github/workflows/codeql.yml +3 -3
- package/lib/vendor/blamejs/.github/workflows/npm-publish.yml +4 -4
- package/lib/vendor/blamejs/.github/workflows/release-container.yml +7 -7
- package/lib/vendor/blamejs/.github/workflows/scorecard.yml +3 -3
- package/lib/vendor/blamejs/.github/workflows/sha-to-tag-verify.yml +1 -1
- package/lib/vendor/blamejs/.gitignore +2 -0
- package/lib/vendor/blamejs/CHANGELOG.md +122 -0
- package/lib/vendor/blamejs/NOTICE +26 -1
- package/lib/vendor/blamejs/SECURITY.md +1 -1
- package/lib/vendor/blamejs/api-snapshot.json +207 -5
- package/lib/vendor/blamejs/docker/keycloak/realm-blamejs-test.json +29 -0
- package/lib/vendor/blamejs/examples/wiki/DEPLOY.md +1 -0
- package/lib/vendor/blamejs/examples/wiki/lib/build-app.js +31 -0
- package/lib/vendor/blamejs/examples/wiki/lib/source-comment-block-validator.js +109 -0
- package/lib/vendor/blamejs/examples/wiki/nginx.conf +106 -0
- package/lib/vendor/blamejs/examples/wiki/package-lock.json +1 -1
- package/lib/vendor/blamejs/examples/wiki/test/e2e.js +92 -0
- package/lib/vendor/blamejs/fuzz/asn1-der.fuzz.js +28 -0
- package/lib/vendor/blamejs/fuzz/cms-codec.fuzz.js +17 -0
- package/lib/vendor/blamejs/fuzz/link-header.fuzz.js +18 -0
- package/lib/vendor/blamejs/index.js +6 -0
- package/lib/vendor/blamejs/lib/a2a.js +4 -4
- package/lib/vendor/blamejs/lib/agent-idempotency.js +18 -2
- package/lib/vendor/blamejs/lib/agent-saga.js +36 -8
- package/lib/vendor/blamejs/lib/agent-snapshot.js +63 -6
- package/lib/vendor/blamejs/lib/app-shutdown.js +23 -20
- package/lib/vendor/blamejs/lib/archive-read.js +8 -0
- package/lib/vendor/blamejs/lib/archive-tar.js +12 -2
- package/lib/vendor/blamejs/lib/arg-parser.js +49 -5
- package/lib/vendor/blamejs/lib/asn1-der.js +12 -0
- package/lib/vendor/blamejs/lib/audit-sign.js +47 -1
- package/lib/vendor/blamejs/lib/audit.js +71 -8
- package/lib/vendor/blamejs/lib/auth/ciba.js +14 -2
- package/lib/vendor/blamejs/lib/auth/fido-mds3.js +58 -47
- package/lib/vendor/blamejs/lib/auth/jwt.js +34 -0
- package/lib/vendor/blamejs/lib/auth/oauth.js +90 -13
- package/lib/vendor/blamejs/lib/auth/oid4vci.js +20 -17
- package/lib/vendor/blamejs/lib/auth/openid-federation.js +214 -23
- package/lib/vendor/blamejs/lib/auth/saml.js +38 -20
- package/lib/vendor/blamejs/lib/auth/sd-jwt-vc.js +10 -4
- package/lib/vendor/blamejs/lib/backup/bundle.js +13 -3
- package/lib/vendor/blamejs/lib/backup/index.js +16 -5
- package/lib/vendor/blamejs/lib/backup/manifest.js +18 -5
- package/lib/vendor/blamejs/lib/base32.js +21 -0
- package/lib/vendor/blamejs/lib/break-glass.js +19 -10
- package/lib/vendor/blamejs/lib/bundler.js +5 -1
- package/lib/vendor/blamejs/lib/cache-status.js +3 -7
- package/lib/vendor/blamejs/lib/calendar.js +21 -1
- package/lib/vendor/blamejs/lib/cbor.js +12 -1
- package/lib/vendor/blamejs/lib/cert.js +29 -11
- package/lib/vendor/blamejs/lib/cli.js +94 -24
- package/lib/vendor/blamejs/lib/cloud-events.js +2 -2
- package/lib/vendor/blamejs/lib/cluster-provider-db.js +13 -3
- package/lib/vendor/blamejs/lib/codepoint-class.js +85 -0
- package/lib/vendor/blamejs/lib/compliance-ai-act-prohibited.js +8 -4
- package/lib/vendor/blamejs/lib/compliance-ai-act-transparency.js +19 -4
- package/lib/vendor/blamejs/lib/compliance-ai-act.js +6 -8
- package/lib/vendor/blamejs/lib/content-credentials.js +1 -1
- package/lib/vendor/blamejs/lib/content-digest.js +2 -1
- package/lib/vendor/blamejs/lib/cookies.js +13 -3
- package/lib/vendor/blamejs/lib/cose.js +31 -16
- package/lib/vendor/blamejs/lib/crypto-field.js +32 -0
- package/lib/vendor/blamejs/lib/crypto-oprf.js +11 -2
- package/lib/vendor/blamejs/lib/crypto-xwing.js +22 -4
- package/lib/vendor/blamejs/lib/crypto.js +314 -19
- package/lib/vendor/blamejs/lib/csp.js +11 -3
- package/lib/vendor/blamejs/lib/daemon.js +270 -24
- package/lib/vendor/blamejs/lib/dark-patterns.js +5 -2
- package/lib/vendor/blamejs/lib/db-declare-view.js +2 -2
- package/lib/vendor/blamejs/lib/db-query.js +34 -7
- package/lib/vendor/blamejs/lib/db.js +18 -6
- package/lib/vendor/blamejs/lib/dbsc.js +17 -0
- package/lib/vendor/blamejs/lib/dev.js +21 -2
- package/lib/vendor/blamejs/lib/dsr.js +157 -102
- package/lib/vendor/blamejs/lib/external-db.js +41 -2
- package/lib/vendor/blamejs/lib/file-upload.js +25 -7
- package/lib/vendor/blamejs/lib/flag-providers.js +27 -15
- package/lib/vendor/blamejs/lib/forms.js +113 -27
- package/lib/vendor/blamejs/lib/gate-contract.js +23 -10
- package/lib/vendor/blamejs/lib/gdpr-ropa.js +8 -1
- package/lib/vendor/blamejs/lib/guard-agent-registry.js +1 -1
- package/lib/vendor/blamejs/lib/guard-archive.js +2 -2
- package/lib/vendor/blamejs/lib/guard-cidr.js +27 -1
- package/lib/vendor/blamejs/lib/guard-graphql.js +30 -11
- package/lib/vendor/blamejs/lib/guard-html.js +26 -53
- package/lib/vendor/blamejs/lib/guard-image.js +24 -5
- package/lib/vendor/blamejs/lib/guard-imap-command.js +10 -2
- package/lib/vendor/blamejs/lib/guard-jmap.js +19 -3
- package/lib/vendor/blamejs/lib/guard-jwt.js +18 -2
- package/lib/vendor/blamejs/lib/guard-list-unsubscribe.js +2 -2
- package/lib/vendor/blamejs/lib/guard-managesieve-command.js +10 -2
- package/lib/vendor/blamejs/lib/guard-markdown.js +11 -24
- package/lib/vendor/blamejs/lib/guard-pdf.js +18 -2
- package/lib/vendor/blamejs/lib/guard-pop3-command.js +10 -2
- package/lib/vendor/blamejs/lib/guard-regex.js +8 -5
- package/lib/vendor/blamejs/lib/guard-svg.js +31 -32
- package/lib/vendor/blamejs/lib/guard-time.js +1 -1
- package/lib/vendor/blamejs/lib/guard-uuid.js +2 -2
- package/lib/vendor/blamejs/lib/html-balance.js +3 -3
- package/lib/vendor/blamejs/lib/http-client-cache.js +82 -4
- package/lib/vendor/blamejs/lib/http-client-cookie-jar.js +16 -1
- package/lib/vendor/blamejs/lib/http-client.js +39 -7
- package/lib/vendor/blamejs/lib/http-message-signature.js +35 -1
- package/lib/vendor/blamejs/lib/i18n-messageformat.js +31 -6
- package/lib/vendor/blamejs/lib/i18n.js +35 -21
- package/lib/vendor/blamejs/lib/incident-report.js +8 -1
- package/lib/vendor/blamejs/lib/ip-utils.js +11 -1
- package/lib/vendor/blamejs/lib/json-path.js +23 -1
- package/lib/vendor/blamejs/lib/jwk.js +20 -3
- package/lib/vendor/blamejs/lib/link-header.js +2 -1
- package/lib/vendor/blamejs/lib/log-stream-otlp-grpc.js +5 -1
- package/lib/vendor/blamejs/lib/log-stream-otlp.js +5 -1
- package/lib/vendor/blamejs/lib/log-stream.js +8 -3
- package/lib/vendor/blamejs/lib/mail-auth.js +123 -22
- package/lib/vendor/blamejs/lib/mail-bimi.js +1 -1
- package/lib/vendor/blamejs/lib/mail-bounce.js +8 -0
- package/lib/vendor/blamejs/lib/mail-crypto-pgp.js +46 -10
- package/lib/vendor/blamejs/lib/mail-dav.js +22 -3
- package/lib/vendor/blamejs/lib/mail-dkim.js +96 -30
- package/lib/vendor/blamejs/lib/mail-helo.js +6 -1
- package/lib/vendor/blamejs/lib/mail-scan.js +23 -16
- package/lib/vendor/blamejs/lib/mail-send-deliver.js +34 -8
- package/lib/vendor/blamejs/lib/mail-server-imap.js +3 -4
- package/lib/vendor/blamejs/lib/mail-server-managesieve.js +7 -11
- package/lib/vendor/blamejs/lib/mail-server-mx.js +93 -7
- package/lib/vendor/blamejs/lib/mail-server-registry.js +8 -2
- package/lib/vendor/blamejs/lib/mail.js +15 -5
- package/lib/vendor/blamejs/lib/metrics.js +268 -63
- package/lib/vendor/blamejs/lib/middleware/age-gate.js +7 -1
- package/lib/vendor/blamejs/lib/middleware/asyncapi-serve.js +1 -1
- package/lib/vendor/blamejs/lib/middleware/body-parser.js +19 -4
- package/lib/vendor/blamejs/lib/middleware/bot-guard.js +5 -9
- package/lib/vendor/blamejs/lib/middleware/csp-report.js +40 -8
- package/lib/vendor/blamejs/lib/middleware/csrf-protect.js +24 -10
- package/lib/vendor/blamejs/lib/middleware/dpop.js +10 -5
- package/lib/vendor/blamejs/lib/middleware/index.js +6 -1
- package/lib/vendor/blamejs/lib/middleware/nel.js +1 -1
- package/lib/vendor/blamejs/lib/middleware/openapi-serve.js +1 -1
- package/lib/vendor/blamejs/lib/middleware/rate-limit.js +12 -1
- package/lib/vendor/blamejs/lib/middleware/require-bound-key.js +1 -1
- package/lib/vendor/blamejs/lib/middleware/scim-server.js +1 -1
- package/lib/vendor/blamejs/lib/middleware/tus-upload.js +6 -2
- package/lib/vendor/blamejs/lib/mtls-ca.js +18 -2
- package/lib/vendor/blamejs/lib/network-dns-resolver.js +11 -1
- package/lib/vendor/blamejs/lib/network-dns.js +21 -2
- package/lib/vendor/blamejs/lib/network-tls.js +69 -7
- package/lib/vendor/blamejs/lib/nonce-store.js +9 -1
- package/lib/vendor/blamejs/lib/object-store/gcs.js +7 -0
- package/lib/vendor/blamejs/lib/object-store/sigv4.js +31 -0
- package/lib/vendor/blamejs/lib/observability-otlp-exporter.js +1 -1
- package/lib/vendor/blamejs/lib/outbox.js +1 -1
- package/lib/vendor/blamejs/lib/parsers/safe-ini.js +9 -1
- package/lib/vendor/blamejs/lib/parsers/safe-toml.js +10 -1
- package/lib/vendor/blamejs/lib/permissions.js +6 -3
- package/lib/vendor/blamejs/lib/pid-probe.js +55 -0
- package/lib/vendor/blamejs/lib/pqc-agent.js +8 -1
- package/lib/vendor/blamejs/lib/pqc-software.js +3 -3
- package/lib/vendor/blamejs/lib/pubsub.js +20 -9
- package/lib/vendor/blamejs/lib/queue-local.js +8 -1
- package/lib/vendor/blamejs/lib/queue-redis.js +5 -0
- package/lib/vendor/blamejs/lib/redact.js +54 -0
- package/lib/vendor/blamejs/lib/restore-bundle.js +10 -2
- package/lib/vendor/blamejs/lib/restore.js +19 -0
- package/lib/vendor/blamejs/lib/retention.js +12 -4
- package/lib/vendor/blamejs/lib/router.js +60 -6
- package/lib/vendor/blamejs/lib/safe-buffer.js +69 -0
- package/lib/vendor/blamejs/lib/safe-decompress.js +8 -2
- package/lib/vendor/blamejs/lib/safe-dns.js +25 -20
- package/lib/vendor/blamejs/lib/safe-ical.js +7 -3
- package/lib/vendor/blamejs/lib/safe-mime.js +12 -1
- package/lib/vendor/blamejs/lib/safe-object.js +80 -0
- package/lib/vendor/blamejs/lib/safe-path.js +52 -4
- package/lib/vendor/blamejs/lib/safe-redirect.js +10 -2
- package/lib/vendor/blamejs/lib/safe-schema.js +4 -1
- package/lib/vendor/blamejs/lib/safe-sieve.js +33 -1
- package/lib/vendor/blamejs/lib/safe-sql.js +88 -0
- package/lib/vendor/blamejs/lib/safe-vcard.js +7 -3
- package/lib/vendor/blamejs/lib/scheduler.js +8 -1
- package/lib/vendor/blamejs/lib/security-assert.js +6 -6
- package/lib/vendor/blamejs/lib/self-update-standalone-verifier.js +74 -27
- package/lib/vendor/blamejs/lib/self-update.js +517 -87
- package/lib/vendor/blamejs/lib/server-timing.js +2 -4
- package/lib/vendor/blamejs/lib/session.js +34 -12
- package/lib/vendor/blamejs/lib/sql.js +15 -1
- package/lib/vendor/blamejs/lib/ssrf-guard.js +52 -0
- package/lib/vendor/blamejs/lib/static.js +55 -13
- package/lib/vendor/blamejs/lib/storage.js +8 -2
- package/lib/vendor/blamejs/lib/subject.js +6 -1
- package/lib/vendor/blamejs/lib/tenant-quota.js +52 -13
- package/lib/vendor/blamejs/lib/tls-exporter.js +3 -3
- package/lib/vendor/blamejs/lib/tsa.js +34 -13
- package/lib/vendor/blamejs/lib/uri-template.js +8 -1
- package/lib/vendor/blamejs/lib/vault/index.js +13 -0
- package/lib/vendor/blamejs/lib/vc.js +44 -5
- package/lib/vendor/blamejs/lib/vendor/MANIFEST.json +26 -26
- package/lib/vendor/blamejs/lib/vendor/noble-ciphers.cjs +792 -1
- package/lib/vendor/blamejs/lib/vendor/noble-curves.cjs +3443 -1
- package/lib/vendor/blamejs/lib/vendor/noble-post-quantum.cjs +2737 -1
- package/lib/vendor/blamejs/lib/vendor/pki.cjs +39550 -13
- package/lib/vendor/blamejs/lib/vendor/public-suffix-list.dat +55 -53
- package/lib/vendor/blamejs/lib/vendor/public-suffix-list.data.js +5551 -5554
- package/lib/vendor/blamejs/lib/vendor/simplewebauthn-server.cjs +22459 -32
- package/lib/vendor/blamejs/lib/watcher.js +89 -17
- package/lib/vendor/blamejs/lib/webhook-dispatcher.js +25 -3
- package/lib/vendor/blamejs/lib/webhook.js +12 -2
- package/lib/vendor/blamejs/lib/ws-client.js +32 -1
- package/lib/vendor/blamejs/lib/xml-c14n.js +29 -1
- package/lib/vendor/blamejs/oss-fuzz/projects/blamejs/Dockerfile +1 -1
- package/lib/vendor/blamejs/package-lock.json +2 -2
- package/lib/vendor/blamejs/package.json +1 -1
- package/lib/vendor/blamejs/release-notes/v0.16.x.json +1462 -0
- package/lib/vendor/blamejs/release-notes/v0.17.0.json +31 -0
- package/lib/vendor/blamejs/release-notes/v0.17.1.json +31 -0
- package/lib/vendor/blamejs/release-notes/v0.17.10.json +30 -0
- package/lib/vendor/blamejs/release-notes/v0.17.11.json +22 -0
- package/lib/vendor/blamejs/release-notes/v0.17.12.json +18 -0
- package/lib/vendor/blamejs/release-notes/v0.17.13.json +77 -0
- package/lib/vendor/blamejs/release-notes/v0.17.14.json +40 -0
- package/lib/vendor/blamejs/release-notes/v0.17.15.json +18 -0
- package/lib/vendor/blamejs/release-notes/v0.17.16.json +27 -0
- package/lib/vendor/blamejs/release-notes/v0.17.17.json +31 -0
- package/lib/vendor/blamejs/release-notes/v0.17.18.json +18 -0
- package/lib/vendor/blamejs/release-notes/v0.17.19.json +18 -0
- package/lib/vendor/blamejs/release-notes/v0.17.2.json +26 -0
- package/lib/vendor/blamejs/release-notes/v0.17.20.json +43 -0
- package/lib/vendor/blamejs/release-notes/v0.17.21.json +26 -0
- package/lib/vendor/blamejs/release-notes/v0.17.22.json +18 -0
- package/lib/vendor/blamejs/release-notes/v0.17.3.json +43 -0
- package/lib/vendor/blamejs/release-notes/v0.17.4.json +35 -0
- package/lib/vendor/blamejs/release-notes/v0.17.5.json +26 -0
- package/lib/vendor/blamejs/release-notes/v0.17.6.json +26 -0
- package/lib/vendor/blamejs/release-notes/v0.17.7.json +35 -0
- package/lib/vendor/blamejs/release-notes/v0.17.8.json +22 -0
- package/lib/vendor/blamejs/release-notes/v0.17.9.json +26 -0
- package/lib/vendor/blamejs/scripts/validate-source-comment-blocks.js +4 -0
- package/lib/vendor/blamejs/scripts/vendor-update.sh +293 -9
- package/lib/vendor/blamejs/socket.yml +94 -0
- package/lib/vendor/blamejs/test/00-primitives.js +605 -0
- package/lib/vendor/blamejs/test/helpers/drivers.js +12 -9
- package/lib/vendor/blamejs/test/integration/audit-stack-mysql.test.js +90 -1
- package/lib/vendor/blamejs/test/integration/audit-stack-postgres.test.js +122 -1
- package/lib/vendor/blamejs/test/integration/data-layer-mysql.test.js +30 -0
- package/lib/vendor/blamejs/test/integration/data-layer-pg.test.js +29 -0
- package/lib/vendor/blamejs/test/integration/dsr-cluster-mysql.test.js +479 -0
- package/lib/vendor/blamejs/test/integration/dsr-cluster-pg.test.js +487 -0
- package/lib/vendor/blamejs/test/integration/federation-auth.test.js +313 -5
- package/lib/vendor/blamejs/test/integration/mail-dkim.test.js +80 -0
- package/lib/vendor/blamejs/test/integration/openid-federation-chain.test.js +275 -0
- package/lib/vendor/blamejs/test/integration/webhook-dispatcher-pg.test.js +96 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/a2a-tasks.test.js +401 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/acme.test.js +1649 -2
- package/lib/vendor/blamejs/test/layer-0-primitives/age-gate.test.js +33 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/agent-idempotency.test.js +0 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/agent-saga.test.js +60 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/agent-snapshot.test.js +524 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/api-encrypt.test.js +891 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/app-shutdown.test.js +128 -1
- package/lib/vendor/blamejs/test/layer-0-primitives/archive-adapters.test.js +271 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/archive-read.test.js +628 -1
- package/lib/vendor/blamejs/test/layer-0-primitives/archive-tar-read.test.js +0 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/archive-wrap.test.js +227 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/arg-parser.test.js +15 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/asn1-der.test.js +73 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/atomic-file.test.js +114 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/audit-sign-anchor.test.js +141 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/audit-tools.test.js +624 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/audit.test.js +769 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/auth-jwt-defenses.test.js +436 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/auth-oauth.test.js +1697 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/auth-oid4vp.test.js +495 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/auth-password.test.js +500 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/auth-saml.test.js +1809 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/auth-status-list.test.js +243 -1
- package/lib/vendor/blamejs/test/layer-0-primitives/backup-index.test.js +2226 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/backup-manifest-signature.test.js +183 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/base32.test.js +105 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/break-glass.test.js +693 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cache.test.js +603 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/calendar.test.js +557 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/case-insensitive-security-token-guard.test.js +214 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cbor.test.js +25 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cert.test.js +843 -6
- package/lib/vendor/blamejs/test/layer-0-primitives/ciba-authreqid-binding.test.js +77 -2
- package/lib/vendor/blamejs/test/layer-0-primitives/ciba.test.js +866 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/clear-site-data.test.js +18 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-erase.test.js +19 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli.test.js +2790 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cluster-lease-renewal-ttl.test.js +114 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cluster.test.js +1032 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cms-codec.test.js +575 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/codebase-patterns.test.js +739 -1
- package/lib/vendor/blamejs/test/layer-0-primitives/codepoint-class.test.js +8 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/compliance-ai-act.test.js +194 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/compliance-lifecycle-proto-key.test.js +104 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/compliance-sanctions.test.js +254 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/content-credentials.test.js +613 -3
- package/lib/vendor/blamejs/test/layer-0-primitives/cookies.test.js +140 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cose.test.js +407 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-adversarial.test.js +352 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field-derived-hash.test.js +32 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field.test.js +575 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hash-files-parallel.test.js +10 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hash-stream.test.js +24 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-oprf.test.js +17 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-spki-pin.test.js +183 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-xwing.test.js +48 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto.test.js +345 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/csp-report.test.js +58 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/csv.test.js +48 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/daemon.test.js +459 -1
- package/lib/vendor/blamejs/test/layer-0-primitives/dark-patterns.test.js +19 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/db-query.test.js +1019 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/db-raw-residency-gate.test.js +77 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/db.test.js +1621 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/ddl-change-control.test.js +462 -3
- package/lib/vendor/blamejs/test/layer-0-primitives/dnssec.test.js +323 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/dpop-middleware-verify.test.js +562 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/dsr.test.js +901 -1
- package/lib/vendor/blamejs/test/layer-0-primitives/dual-control.test.js +249 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/external-db-migrate.test.js +561 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/external-db.test.js +1214 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/fal.test.js +21 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/fedcm-dbsc.test.js +46 -20
- package/lib/vendor/blamejs/test/layer-0-primitives/federation-vc-suite.test.js +147 -3
- package/lib/vendor/blamejs/test/layer-0-primitives/fido-mds3.test.js +907 -38
- package/lib/vendor/blamejs/test/layer-0-primitives/file-upload-content-safety-skip-audit.test.js +29 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/file-upload.test.js +1135 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/flag.test.js +30 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/forms.test.js +747 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/gate-contract.test.js +1855 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/gdpr-ropa.test.js +30 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-archive.test.js +86 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-auth.test.js +117 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-cidr.test.js +151 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-domain.test.js +422 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-filename.test.js +424 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/{guard-gate-disposition-coverage.test.js → guard-gate-disposition.test.js} +1 -1
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-graphql.test.js +340 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-html.test.js +29 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-idempotency-key.test.js +28 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-image.test.js +519 -45
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-imap-command.test.js +0 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-jmap.test.js +51 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-jsonpath.test.js +66 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-jwt.test.js +436 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-managesieve-command.test.js +25 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-markdown.test.js +16 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-mime.test.js +86 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-oauth.test.js +140 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-pdf.test.js +80 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-pop3-command.test.js +27 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-regex.test.js +99 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-shell.test.js +76 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/{guard-sql-coverage.test.js → guard-sql.test.js} +3 -3
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-svg.test.js +524 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-template.test.js +71 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-time.test.js +92 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-uuid.test.js +86 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/html-balance.test.js +38 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/http-client-cache-authorization.test.js +347 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/http-client-cache.test.js +908 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/http-client.test.js +2874 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/http-message-signature.test.js +643 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/i18n-messageformat.test.js +38 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/i18n.test.js +1153 -1
- package/lib/vendor/blamejs/test/layer-0-primitives/idempotency-key.test.js +494 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/ip-utils.test.js +30 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/jsdoc-example-execution.test.js +177 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/json-path.test.js +103 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/json-schema.test.js +214 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/jwk.test.js +41 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/jwt-external.test.js +276 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/keychain.test.js +0 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/log-stream.test.js +241 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/log.test.js +106 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-agent.test.js +441 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-auth.test.js +2136 -4
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-bimi.test.js +759 -12
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-bounce.test.js +811 -1
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-pgp-experimental.test.js +401 -3
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-pgp.test.js +751 -8
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-smime.test.js +864 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto.test.js +110 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-dav.test.js +830 -1
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-deploy.test.js +635 -86
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-dkim.test.js +818 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-helo.test.js +27 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-scan.test.js +199 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-send-deliver.test.js +686 -2
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-imap.test.js +778 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-jmap.test.js +1438 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-managesieve.test.js +449 -6
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-mx.test.js +773 -2
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-pop3.test.js +623 -3
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-rate-limit.test.js +55 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-registry.test.js +13 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-submission.test.js +877 -1
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-sieve.test.js +326 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-store-fts.test.js +55 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-store.test.js +242 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail.test.js +1596 -2
- package/lib/vendor/blamejs/test/layer-0-primitives/mcp.test.js +440 -4
- package/lib/vendor/blamejs/test/layer-0-primitives/metrics-snapshot.test.js +89 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/metrics.test.js +1230 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/middleware-assetlinks.test.js +113 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/middleware-body-parser.test.js +1169 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/middleware-bot-disclose.test.js +123 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/middleware-cookies.test.js +108 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/middleware-gpc.test.js +121 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/middleware-headers.test.js +163 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/middleware-host-allowlist.test.js +154 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/middleware-require-content-type.test.js +127 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/{middleware-tus-upload-coverage.test.js → middleware-tus-upload.test.js} +45 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/middleware-web-app-manifest.test.js +132 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mtls-ca-crl-fingerprint-only.test.js +92 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/network-dns-resolver.test.js +65 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/network-dns.test.js +1727 -1
- package/lib/vendor/blamejs/test/layer-0-primitives/network-nts.test.js +699 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/network-smtp-policy.test.js +1181 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/network-tls.test.js +1876 -3
- package/lib/vendor/blamejs/test/layer-0-primitives/network.test.js +32 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/nonce-store-enforce-replay-nonboolean.test.js +81 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/ntp-check.test.js +122 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/observability-tracing.test.js +378 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/observability.test.js +77 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/oid4vci.test.js +1016 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/openid-federation.test.js +946 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/outbox.test.js +818 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/own-property-membership-guards.test.js +109 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/parsers-safe-toml.test.js +543 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/{parsers-safe-yaml-coverage.test.js → parsers-safe-yaml.test.js} +2 -2
- package/lib/vendor/blamejs/test/layer-0-primitives/parsers-standalone.test.js +73 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/passkey.test.js +649 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/permissions.test.js +524 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/pqc-agent-curve.test.js +22 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/pubsub.test.js +295 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/queue-flow-repeat.test.js +36 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/queue.test.js +83 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/rate-limit-xff-spoofing.test.js +34 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/redact.test.js +1031 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/request-helpers.test.js +94 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/require-bound-key.test.js +401 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/restore-empty-manifest-wipe.test.js +154 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/retention.test.js +600 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/router-host-path-injection.test.js +231 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/router-tls0rtt.test.js +21 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/router.test.js +1277 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-async.test.js +133 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-buffer-linear-scans.test.js +14 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-buffer.test.js +80 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-decompress.test.js +28 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-dns.test.js +245 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-ical.test.js +32 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-ini.test.js +376 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-json.test.js +175 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-mime.test.js +518 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-object.test.js +62 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-path.test.js +30 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-schema.test.js +104 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-sql.test.js +142 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-url.test.js +112 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-vcard.test.js +26 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/scheduler.test.js +157 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/scim-server.test.js +396 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/sd-jwt-vc.test.js +930 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/security-assert.test.js +755 -82
- package/lib/vendor/blamejs/test/layer-0-primitives/self-update.test.js +1053 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/session-device-binding.test.js +200 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/session-strict-binding-missing-failclosed.test.js +110 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/sigv4-bucket-ops.test.js +636 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/sql-offset-without-limit.test.js +94 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/sql.test.js +1190 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/ssrf-guard.test.js +21 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/static.test.js +850 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/storage-presigned-url.test.js +146 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/storage.test.js +621 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/subject.test.js +47 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/template.test.js +582 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/tenant-quota.test.js +587 -25
- package/lib/vendor/blamejs/test/layer-0-primitives/time.test.js +11 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/tsa.test.js +524 -63
- package/lib/vendor/blamejs/test/layer-0-primitives/uri-template.test.js +27 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/vault-rotate.test.js +866 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/vault.test.js +74 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/vc.test.js +215 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/watcher.test.js +550 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/webhook-dispatcher.test.js +388 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/webhook.test.js +262 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/websocket.test.js +1294 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/ws-client.test.js +629 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/xml-c14n-attr-normalization.test.js +164 -0
- package/lib/vendor/blamejs/test/smoke.js +2 -0
- package/package.json +1 -1
- package/lib/vendor/blamejs/release-notes/v0.16.0.json +0 -44
- package/lib/vendor/blamejs/release-notes/v0.16.1.json +0 -36
- package/lib/vendor/blamejs/release-notes/v0.16.2.json +0 -71
- package/lib/vendor/blamejs/release-notes/v0.16.3.json +0 -71
- package/lib/vendor/blamejs/test/layer-0-primitives/acme-coverage.test.js +0 -441
- package/lib/vendor/blamejs/test/layer-0-primitives/auth-oauth-coverage.test.js +0 -482
- package/lib/vendor/blamejs/test/layer-0-primitives/auth-saml-coverage.test.js +0 -671
- package/lib/vendor/blamejs/test/layer-0-primitives/backup-index-coverage.test.js +0 -690
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-coverage.test.js +0 -238
- package/lib/vendor/blamejs/test/layer-0-primitives/content-credentials-coverage.test.js +0 -319
- package/lib/vendor/blamejs/test/layer-0-primitives/keychain-coverage.test.js +0 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-auth-coverage.test.js +0 -437
- package/lib/vendor/blamejs/test/layer-0-primitives/mcp-coverage.test.js +0 -443
- package/lib/vendor/blamejs/test/layer-0-primitives/metrics-coverage.test.js +0 -395
- package/lib/vendor/blamejs/test/layer-0-primitives/network-smtp-policy-coverage.test.js +0 -565
- package/lib/vendor/blamejs/test/layer-0-primitives/router-coverage.test.js +0 -592
- package/lib/vendor/blamejs/test/layer-0-primitives/sql-coverage.test.js +0 -422
- package/lib/vendor/blamejs/test/layer-0-primitives/test-coverage.test.js +0 -573
|
@@ -3,7 +3,2743 @@
|
|
|
3
3
|
// Bundled with esbuild. Exports: ml_kem512 / ml_kem768 / ml_kem1024 (FIPS 203 KEM),
|
|
4
4
|
// ml_dsa44 / ml_dsa65 / ml_dsa87 (FIPS 204 lattice signatures),
|
|
5
5
|
// slh_dsa_sha2_*f / slh_dsa_shake_*f (FIPS 205 hash signatures).
|
|
6
|
-
var Nt=Object.defineProperty;var ar=Object.getOwnPropertyDescriptor;var fr=Object.getOwnPropertyNames;var ur=Object.prototype.hasOwnProperty;var dr=(e,t)=>{for(var n in t)Nt(e,n,{get:t[n],enumerable:!0})},lr=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of fr(t))!ur.call(e,o)&&o!==n&&Nt(e,o,{get:()=>t[o],enumerable:!(r=ar(t,o))||r.enumerable});return e};var hr=e=>lr(Nt({},"__esModule",{value:!0}),e);var Zr={};dr(Zr,{ml_dsa44:()=>Wn,ml_dsa65:()=>$n,ml_dsa87:()=>Vn,ml_kem1024:()=>jn,ml_kem512:()=>Kn,ml_kem768:()=>Pn,slh_dsa_sha2_128f:()=>sr,slh_dsa_sha2_192f:()=>cr,slh_dsa_sha2_256f:()=>ir,slh_dsa_shake_128f:()=>er,slh_dsa_shake_192f:()=>tr,slh_dsa_shake_256f:()=>nr});module.exports=hr(Zr);var _t=BigInt(4294967295),nn=BigInt(32);function pr(e,t=!1){return t?{h:Number(e&_t),l:Number(e>>nn&_t)}:{h:Number(e>>nn&_t)|0,l:Number(e&_t)|0}}function kt(e,t=!1){let n=e.length,r=new Uint32Array(n),o=new Uint32Array(n);for(let c=0;c<n;c++){let{h:s,l:i}=pr(e[c],t);[r[c],o[c]]=[s,i]}return[r,o]}var Mt=(e,t,n)=>e>>>n,Kt=(e,t,n)=>e<<32-n|t>>>n,We=(e,t,n)=>e>>>n|t<<32-n,$e=(e,t,n)=>e<<32-n|t>>>n,ut=(e,t,n)=>e<<64-n|t>>>n-32,dt=(e,t,n)=>e>>>n-32|t<<64-n;var rn=(e,t,n)=>e<<n|t>>>32-n,on=(e,t,n)=>t<<n|e>>>32-n,sn=(e,t,n)=>t<<n-32|e>>>64-n,cn=(e,t,n)=>e<<n-32|t>>>64-n;function Be(e,t,n,r){let o=(t>>>0)+(r>>>0);return{h:e+n+(o/2**32|0)|0,l:o|0}}var an=(e,t,n)=>(e>>>0)+(t>>>0)+(n>>>0),fn=(e,t,n,r)=>t+n+r+(e/2**32|0)|0,un=(e,t,n,r)=>(e>>>0)+(t>>>0)+(n>>>0)+(r>>>0),dn=(e,t,n,r,o)=>t+n+r+o+(e/2**32|0)|0,ln=(e,t,n,r,o)=>(e>>>0)+(t>>>0)+(n>>>0)+(r>>>0)+(o>>>0),hn=(e,t,n,r,o,c)=>t+n+r+o+c+(e/2**32|0)|0;function yr(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in e&&e.BYTES_PER_ELEMENT===1}function Ve(e,t=""){if(typeof e!="number"){let n=t&&`"${t}" `;throw new TypeError(`${n}expected number, got ${typeof e}`)}if(!Number.isSafeInteger(e)||e<0){let n=t&&`"${t}" `;throw new RangeError(`${n}expected integer >= 0, got ${e}`)}}function Q(e,t,n=""){let r=yr(e),o=e?.length,c=t!==void 0;if(!r||c&&o!==t){let s=n&&`"${n}" `,i=c?` of length ${t}`:"",a=r?`length=${o}`:`type=${typeof e}`,w=s+"expected Uint8Array"+i+", got "+a;throw r?new RangeError(w):new TypeError(w)}return e}function xn(e){if(typeof e!="function"||typeof e.create!="function")throw new TypeError("Hash must wrapped by utils.createHasher");if(Ve(e.outputLen),Ve(e.blockLen),e.outputLen<1)throw new Error('"outputLen" must be >= 1');if(e.blockLen<1)throw new Error('"blockLen" must be >= 1')}function He(e,t=!0){if(e.destroyed)throw new Error("Hash instance has been destroyed");if(t&&e.finished)throw new Error("Hash#digest() has already been called")}function et(e,t){Q(e,void 0,"digestInto() output");let n=t.outputLen;if(e.length<n)throw new RangeError('"digestInto() output" expected to be of length >='+n)}function Bt(e){return new Uint32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4))}function Ee(...e){for(let t=0;t<e.length;t++)e[t].fill(0)}function Xe(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}function ke(e,t){return e<<32-t|e>>>t}var yn=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function br(e){return e<<24&4278190080|e<<8&16711680|e>>>8&65280|e>>>24&255}function gr(e){for(let t=0;t<e.length;t++)e[t]=br(e[t]);return e}var tt=yn?e=>e:gr,bn=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",wr=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0"));function gn(e){if(Q(e),bn)return e.toHex();let t="";for(let n=0;n<e.length;n++)t+=wr[e[n]];return t}var Oe={_0:48,_9:57,A:65,F:70,a:97,f:102};function pn(e){if(e>=Oe._0&&e<=Oe._9)return e-Oe._0;if(e>=Oe.A&&e<=Oe.F)return e-(Oe.A-10);if(e>=Oe.a&&e<=Oe.f)return e-(Oe.a-10)}function wn(e){if(typeof e!="string")throw new TypeError("hex string expected, got "+typeof e);if(bn)try{return Uint8Array.fromHex(e)}catch(o){throw o instanceof SyntaxError?new RangeError(o.message):o}let t=e.length,n=t/2;if(t%2)throw new RangeError("hex string expected, got unpadded hex of length "+t);let r=new Uint8Array(n);for(let o=0,c=0;o<n;o++,c+=2){let s=pn(e.charCodeAt(c)),i=pn(e.charCodeAt(c+1));if(s===void 0||i===void 0){let a=e[c]+e[c+1];throw new RangeError('hex string expected, got non-hex character "'+a+'" at index '+c)}r[o]=s*16+i}return r}function Ye(...e){let t=0;for(let r=0;r<e.length;r++){let o=e[r];Q(o),t+=o.length}let n=new Uint8Array(t);for(let r=0,o=0;r<e.length;r++){let c=e[r];n.set(c,o),o+=c.length}return n}function nt(e,t={}){let n=(o,c)=>e(c).update(o).digest(),r=e(void 0);return n.outputLen=r.outputLen,n.blockLen=r.blockLen,n.canXOF=r.canXOF,n.create=o=>e(o),Object.assign(n,t),Object.freeze(n)}function mn(e=32){Ve(e,"bytesLength");let t=typeof globalThis=="object"?globalThis.crypto:null;if(typeof t?.getRandomValues!="function")throw new Error("crypto.getRandomValues must be defined");if(e>65536)throw new RangeError(`"bytesLength" expected <= 65536, got ${e}`);return t.getRandomValues(new Uint8Array(e))}var Fe=e=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,e])});var mr=BigInt(0),lt=BigInt(1),Ar=BigInt(2),Tr=BigInt(7),Er=BigInt(256),_r=BigInt(113),En=[],_n=[],kn=[];for(let e=0,t=lt,n=1,r=0;e<24;e++){[n,r]=[r,(2*n+3*r)%5],En.push(2*(5*r+n)),_n.push((e+1)*(e+2)/2%64);let o=mr;for(let c=0;c<7;c++)t=(t<<lt^(t>>Tr)*_r)%Er,t&Ar&&(o^=lt<<(lt<<BigInt(c))-lt);kn.push(o)}var Bn=kt(kn,!0),kr=Bn[0],Br=Bn[1],An=(e,t,n)=>n>32?sn(e,t,n):rn(e,t,n),Tn=(e,t,n)=>n>32?cn(e,t,n):on(e,t,n);function Lr(e,t=24){if(Ve(t,"rounds"),t<1||t>24)throw new Error('"rounds" expected integer 1..24');let n=new Uint32Array(10);for(let r=24-t;r<24;r++){for(let s=0;s<10;s++)n[s]=e[s]^e[s+10]^e[s+20]^e[s+30]^e[s+40];for(let s=0;s<10;s+=2){let i=(s+8)%10,a=(s+2)%10,w=n[a],h=n[a+1],y=An(w,h,1)^n[i],_=Tn(w,h,1)^n[i+1];for(let k=0;k<50;k+=10)e[s+k]^=y,e[s+k+1]^=_}let o=e[2],c=e[3];for(let s=0;s<24;s++){let i=_n[s],a=An(o,c,i),w=Tn(o,c,i),h=En[s];o=e[h],c=e[h+1],e[h]=a,e[h+1]=w}for(let s=0;s<50;s+=10){let i=e[s],a=e[s+1],w=e[s+2],h=e[s+3];e[s]^=~e[s+2]&e[s+4],e[s+1]^=~e[s+3]&e[s+5],e[s+2]^=~e[s+4]&e[s+6],e[s+3]^=~e[s+5]&e[s+7],e[s+4]^=~e[s+6]&e[s+8],e[s+5]^=~e[s+7]&e[s+9],e[s+6]^=~e[s+8]&i,e[s+7]^=~e[s+9]&a,e[s+8]^=~i&w,e[s+9]^=~a&h}e[0]^=kr[r],e[1]^=Br[r]}Ee(n)}var Lt=class e{state;pos=0;posOut=0;finished=!1;state32;destroyed=!1;blockLen;suffix;outputLen;canXOF;enableXOF=!1;rounds;constructor(t,n,r,o=!1,c=24){if(this.blockLen=t,this.suffix=n,this.outputLen=r,this.enableXOF=o,this.canXOF=o,this.rounds=c,Ve(r,"outputLen"),!(0<t&&t<200))throw new Error("only keccak-f1600 function is supported");this.state=new Uint8Array(200),this.state32=Bt(this.state)}clone(){return this._cloneInto()}keccak(){tt(this.state32),Lr(this.state32,this.rounds),tt(this.state32),this.posOut=0,this.pos=0}update(t){He(this),Q(t);let{blockLen:n,state:r}=this,o=t.length;for(let c=0;c<o;){let s=Math.min(n-this.pos,o-c);for(let i=0;i<s;i++)r[this.pos++]^=t[c++];this.pos===n&&this.keccak()}return this}finish(){if(this.finished)return;this.finished=!0;let{state:t,suffix:n,pos:r,blockLen:o}=this;t[r]^=n,(n&128)!==0&&r===o-1&&this.keccak(),t[o-1]^=128,this.keccak()}writeInto(t){He(this,!1),Q(t),this.finish();let n=this.state,{blockLen:r}=this;for(let o=0,c=t.length;o<c;){this.posOut>=r&&this.keccak();let s=Math.min(r-this.posOut,c-o);t.set(n.subarray(this.posOut,this.posOut+s),o),this.posOut+=s,o+=s}return t}xofInto(t){if(!this.enableXOF)throw new Error("XOF is not possible for this instance");return this.writeInto(t)}xof(t){return Ve(t),this.xofInto(new Uint8Array(t))}digestInto(t){if(et(t,this),this.finished)throw new Error("digest() was already called");this.writeInto(t.subarray(0,this.outputLen)),this.destroy()}digest(){let t=new Uint8Array(this.outputLen);return this.digestInto(t),t}destroy(){this.destroyed=!0,Ee(this.state)}_cloneInto(t){let{blockLen:n,suffix:r,outputLen:o,rounds:c,enableXOF:s}=this;return t||=new e(n,r,o,s,c),t.blockLen=n,t.state32.set(this.state32),t.pos=this.pos,t.posOut=this.posOut,t.finished=this.finished,t.rounds=c,t.suffix=r,t.outputLen=o,t.enableXOF=s,t.canXOF=this.canXOF,t.destroyed=this.destroyed,t}},Ln=(e,t,n,r={})=>nt(()=>new Lt(t,e,n),r);var On=Ln(6,136,32,Fe(8));var Hn=Ln(6,72,64,Fe(10));var Sn=(e,t,n,r={})=>nt((o={})=>new Lt(t,e,o.dkLen===void 0?n:o.dkLen,!0),r),In=Sn(31,168,16,Fe(11)),re=Sn(31,136,32,Fe(12));function Pt(e){if(!Number.isSafeInteger(e)||e<0||e>4294967295)throw new Error("wrong u32 integer:"+e);return e}function Un(e){return Pt(e),(e&e-1)===0&&e!==0}function jt(e,t){if(Pt(e),!Number.isSafeInteger(t)||t<0||t>32)throw new Error(`expected integer 0 <= bits <= 32, got ${t}`);let n=0;for(let r=0;r<t;r++,e>>>=1)n=n<<1|e&1;return n>>>0}function Cn(e){return Pt(e),31-Math.clz32(e)}function Rn(e){let t=e.length;if(!Un(t))throw new Error("expected positive power-of-two length, got "+t);let n=Cn(t);for(let r=0;r<t;r++){let o=jt(r,n);if(r<o){let c=e[r];e[r]=e[o],e[o]=c}}return e}var vt=(e,t)=>{let{N:n,roots:r,dit:o,invertButterflies:c=!1,skipStages:s=0,brp:i=!0}=t,a=Cn(n);if(!Un(n))throw new Error("FFT: Polynomial size should be power of two");if(r.length!==n)throw new Error(`FFT: wrong roots length: expected ${n}, got ${r.length}`);let w=o!==c;return h=>{if(h.length!==n)throw new Error("FFT: wrong Polynomial length");o&&i&&Rn(h);for(let y=0,_=1;y<a-s;y++){let k=o?y+1+s:a-y,O=1<<k,E=O>>1,U=n>>k;for(let N=0;N<n;N+=O)for(let b=0,l=_++;b<E;b++){let I=c?o?n-l:l:b*U,F=N+b,P=N+b+E,v=r[I],K=h[P],g=h[F];if(w){let M=e.mul(K,v);h[F]=e.add(g,M),h[P]=e.sub(g,M)}else c?(h[F]=e.add(K,g),h[P]=e.mul(e.sub(K,g),v)):(h[F]=e.add(g,K),h[P]=e.mul(e.sub(g,K),v))}}return!o&&i&&Rn(h),h}};var be=Q;var Se=mn;function Ie(e,t){if(e.length!==t.length)return!1;let n=0;for(let r=0;r<e.length;r++)n|=e[r]^t[r];return n===0}function rt(e){return Uint8Array.from(Q(e))}function Dt(e){if(Object.prototype.toString.call(e)!=="[object Object]")throw new TypeError("expected valid options object")}function Ze(e){Dt(e),e.context!==void 0&&Q(e.context,void 0,"opts.context")}function Ne(e){Ze(e),e.extraEntropy!==!1&&e.extraEntropy!==void 0&&Q(e.extraEntropy,void 0,"opts.extraEntropy")}function ce(e,...t){let n=o=>typeof o=="number"?o:o.bytesLen,r=t.reduce((o,c)=>o+n(c),0);return{bytesLen:r,encode:o=>{let c=new Uint8Array(r);for(let s=0,i=0;s<t.length;s++){let a=t[s],w=n(a),h=typeof a=="number"?o[s]:a.encode(o[s]);Q(h,w,e),c.set(h,i),typeof a!="number"&&h.fill(0),i+=w}return c},decode:o=>{Q(o,r,e);let c=[];for(let s of t){let i=n(s),a=o.subarray(0,i);c.push(typeof s=="number"?a:s.decode(a)),o=o.subarray(i)}return c}}}function ge(e,t){let n=e,r=t*n.bytesLen;return{bytesLen:r,encode:o=>{if(o.length!==t)throw new RangeError(`vecCoder.encode: wrong length=${o.length}. Expected: ${t}`);let c=new Uint8Array(r);for(let s=0,i=0;s<o.length;s++){let a=n.encode(o[s]);c.set(a,i),a.fill(0),i+=a.length}return c},decode:o=>{Q(o,r);let c=[];for(let s=0;s<o.length;s+=n.bytesLen)c.push(n.decode(o.subarray(s,s+n.bytesLen)));return c}}}function V(...e){for(let t of e)if(Array.isArray(t))for(let n of t)n.fill(0);else t.fill(0)}function qe(e){if(!Number.isSafeInteger(e)||e<0||e>32)throw new RangeError(`expected bits in [0..32], got ${e}`);return e===32?4294967295:~(-1<<e)>>>0}var Fn=Uint8Array.of();function ot(e,t=Fn){if(Q(e),Q(t),t.length>255)throw new RangeError("context should be 255 bytes or less");return Ye(new Uint8Array([0,t.length]),t,e)}var Or=Uint8Array.from([6,9,96,134,72,1,101,3,4,2]);function Ot(e,t=0){if(!e.oid||!Ie(e.oid.subarray(0,10),Or))throw new Error("hash.oid is invalid: expected NIST hash");let n=e.outputLen*8/2;if(t>n)throw new Error("Pre-hash security strength too low: "+n+", required: "+t)}function st(e,t,n=Fn){if(Q(t),Q(n),n.length>255)throw new RangeError("context should be 255 bytes or less");let r=e(t);return Ye(new Uint8Array([1,n.length]),n,e.oid,r)}var Ht=e=>{let{newPoly:t,N:n,Q:r,F:o,ROOT_OF_UNITY:c,brvBits:s,isKyber:i}=e,a=(b,l=r)=>{let I=b%l|0;return(I>=0?I|0:l+I|0)|0},w=(b,l=r)=>{let I=a(b,l)|0;return(I>l>>1?I-l|0:I)|0};function h(){let b=t(n);for(let l=0;l<n;l++){let I=jt(l,s),F=BigInt(c)**BigInt(I)%BigInt(r);b[l]=Number(F)|0}return b}let y=h(),_={add:(b,l)=>a((b|0)+(l|0))|0,sub:(b,l)=>a((b|0)-(l|0))|0,mul:(b,l)=>a((b|0)*(l|0))|0,inv:b=>{throw new Error("not implemented")}},k={N:n,roots:y,invertButterflies:!0,skipStages:i?1:0,brp:!1},O=vt(_,{dit:!1,...k}),E=vt(_,{dit:!0,...k}),U={encode:b=>O(b),decode:b=>{E(b);for(let l=0;l<b.length;l++)b[l]=a(o*b[l]);return b}};return{mod:a,smod:w,nttZetas:y,NTT:{encode:b=>U.encode(b),decode:b=>U.decode(b)},bitsCoder:(b,l)=>{let I=qe(b),F=b*(n/8);return{bytesLen:F,encode:P=>{let v=P,K=new Uint8Array(F);for(let g=0,M=0,J=0,$=0;g<v.length;g++)for(M|=(l.encode(v[g])&I)<<J,J+=b;J>=8;J-=8,M>>=8)K[$++]=M&qe(J);return K},decode:P=>{let v=t(n);for(let K=0,g=0,M=0,J=0;K<P.length;K++)for(g|=P[K]<<M,M+=8;M>=b;M-=b,g>>=b)v[J++]=l.decode(g&I);return v}}}}},Nn=e=>(t,n)=>{n||(n=e.blockLen);let r=new Uint8Array(t.length+2);r.set(t);let o=t.length,c=new Uint8Array(n),s=e.create({}),i=0,a=0;return{stats:()=>({calls:i,xofs:a}),get:(w,h)=>(r[o+0]=w,r[o+1]=h,s.destroy(),s=e.create({}).update(r),i++,()=>(a++,s.xofInto(c))),clean:()=>{s.destroy(),V(c,r)}}},ct=Nn(In),St=Nn(re);var le=256,we=3329,Hr=3303,Sr=17,ye=Ht({N:le,Q:we,F:Hr,ROOT_OF_UNITY:Sr,newPoly:e=>new Uint16Array(e),brvBits:7,isKyber:!0}),Gt=Object.freeze({512:Object.freeze({N:le,Q:we,K:2,ETA1:3,ETA2:2,du:10,dv:4,RBGstrength:128}),768:Object.freeze({N:le,Q:we,K:3,ETA1:2,ETA2:2,du:10,dv:4,RBGstrength:192}),1024:Object.freeze({N:le,Q:we,K:4,ETA1:2,ETA2:2,du:11,dv:5,RBGstrength:256})}),Ir=e=>{if(e>=12)return{encode:n=>n,decode:n=>n>=we?n-we:n};let t=2**(e-1);return{encode:n=>((n<<e)+we/2)/we,decode:n=>n*we+t>>>e}},Rr=e=>ye.bitsCoder(e,e===12?{encode:t=>t,decode:t=>t>=we?t-we:t}:{encode:t=>t,decode:t=>t}),ht=e=>e===12?Rr(12):ye.bitsCoder(e,Ir(e));function Qe(e,t){let n=e,r=t;for(let o=0;o<le;o++)n[o]=ye.mod(n[o]+r[o])}function Ur(e,t){let n=e,r=t;for(let o=0;o<le;o++)n[o]=ye.mod(n[o]-r[o])}function Cr(e,t,n,r,o){let c=ye.mod(t*r*o+e*n),s=ye.mod(e*r+t*n);return{c0:c,c1:s}}function It(e,t){let n=e,r=t;for(let o=0;o<le/2;o++){let c=ye.nttZetas[64+(o>>1)];o&1&&(c=-c);let{c0:s,c1:i}=Cr(n[2*o+0],n[2*o+1],r[2*o+0],r[2*o+1],c);n[2*o+0]=s,n[2*o+1]=i}return n}function Mn(e){let t=e,n=new Uint16Array(le);for(let r=0;r<le;){let o=t();if(o.length%3)throw new Error("SampleNTT: unaligned block");for(let c=0;r<le&&c+3<=o.length;c+=3){let s=(o[c+0]>>0|o[c+1]<<8)&4095,i=(o[c+1]>>4|o[c+2]<<4)&4095;s<we&&(n[r++]=s),r<le&&i<we&&(n[r++]=i)}}return n}var Fr=(e,t)=>{let n=new Uint16Array(le),r=Bt(e);tt(r);let o=0;for(let c=0,s=0,i=0,a=0;c<r.length;c++){let w=r[c];for(let h=0;h<32;h++)i+=w&1,w>>=1,o+=1,o===t?(a=i,i=0):o===2*t&&(n[s++]=ye.mod(a-i),i=0,o=0)}if(tt(r),o)throw new Error(`sampleCBD: leftover bits: ${o}`);return n};function pt(e,t,n,r){return Fr(e(r*le/4,t,n),r)}var Nr=e=>{let t=e,{K:n,PRF:r,XOF:o,HASH512:c,ETA1:s,ETA2:i,du:a,dv:w}=t,h=ht(1),y=ht(w),_=ht(a),k=ce("publicKey",ge(ht(12),n),32),O=ge(ht(12),n),E=ce("ciphertext",ge(_,n),y),U=ce("seed",32,32);return{secretCoder:O,lengths:{secretKey:O.bytesLen,publicKey:k.bytesLen,cipherText:E.bytesLen},keygen:N=>{be(N,32,"seed");let b=new Uint8Array(33);b.set(N),b[32]=n;let l=c(b),[I,F]=U.decode(l),P=[],v=[];for(let M=0;M<n;M++)P.push(ye.NTT.encode(pt(r,F,M,s)));let K=o(I);for(let M=0;M<n;M++){let J=ye.NTT.encode(pt(r,F,n+M,s));for(let $=0;$<n;$++){let fe=Mn(K.get($,M));Qe(J,It(fe,P[$]))}v.push(J)}K.clean();let g={publicKey:k.encode([v,I]),secretKey:O.encode(P)};return V(I,F,P,v,b,l),g},encrypt:(N,b,l)=>{let[I,F]=k.decode(N),P=[];for(let $=0;$<n;$++)P.push(ye.NTT.encode(pt(r,l,$,s)));let v=o(F),K=new Uint16Array(le),g=[];for(let $=0;$<n;$++){let fe=pt(r,l,n+$,i),Ae=new Uint16Array(le);for(let pe=0;pe<n;pe++){let Ge=Mn(v.get($,pe));Qe(Ae,It(Ge,P[pe]))}Qe(fe,ye.NTT.decode(Ae)),g.push(fe),Qe(K,It(I[$],P[$])),V(Ae)}v.clean();let M=pt(r,l,2*n,i);Qe(M,ye.NTT.decode(K));let J=h.decode(b);return Qe(J,M),V(I,P,K,M),E.encode([g,J])},decrypt:(N,b)=>{let[l,I]=E.decode(N),F=O.decode(b),P=new Uint16Array(le);for(let v=0;v<n;v++)Qe(P,It(F[v],ye.NTT.encode(l[v])));return Ur(I,ye.NTT.decode(P)),V(P,F,l),h.encode(I)}}};function Mr(e){let t=e,n=Nr(t),{HASH256:r,HASH512:o,KDF:c}=t,{secretCoder:s,lengths:i}=n,a=ce("secretKey",i.secretKey,i.publicKey,32,32),w=32,h=64,y=Object.freeze({...i,seed:64,msg:w,msgRand:w,secretKey:a.bytesLen});return Object.freeze({info:Object.freeze({type:"ml-kem"}),lengths:y,keygen:(_=Se(h))=>{be(_,h,"seed");let{publicKey:k,secretKey:O}=n.keygen(_.subarray(0,32)),E=r(k),U=a.encode([O,k,E,_.subarray(32)]);return V(O,E),{publicKey:k,secretKey:U}},getPublicKey:_=>{let[k,O,E,U]=a.decode(_);return Uint8Array.from(O)},encapsulate:(_,k=Se(w))=>{be(_,i.publicKey,"publicKey"),be(k,w,"message");let O=_.subarray(0,384*e.K),E=s.encode(s.decode(rt(O)));if(!Ie(E,O))throw V(E),new Error("ML-KEM.encapsulate: wrong publicKey modulus");V(E);let U=o.create().update(k).update(r(_)).digest(),N=n.encrypt(_,k,U.subarray(32,64));return V(U.subarray(32)),{cipherText:N,sharedSecret:U.subarray(0,32)}},decapsulate:(_,k)=>{be(k,a.bytesLen,"secretKey"),be(_,i.cipherText,"cipherText");let O=a.bytesLen-96,E=O+32,U=r(k.subarray(O/2,E));if(!Ie(U,k.subarray(E,E+32)))throw new Error("invalid secretKey: hash check failed");let[N,b,l,I]=a.decode(k),F=n.decrypt(_,N),P=o.create().update(F).update(l).digest(),v=P.subarray(0,32),K=n.encrypt(b,F,P.subarray(32,64)),g=Ie(_,K),M=c.create({dkLen:32}).update(I).update(_).digest();return V(F,K,g?M:v),g?v:M}})}function Kr(e,t,n){return re.create({dkLen:e}).update(t).update(new Uint8Array([n])).digest()}var Pr={HASH256:On,HASH512:Hn,KDF:re,XOF:ct,PRF:Kr},zt=e=>Mr({...Pr,...e}),Kn=zt(Gt[512]),Pn=zt(Gt[768]),jn=zt(Gt[1024]);function vn(e,t=""){if(typeof e!="boolean"){let n=t&&`"${t}" `;throw new TypeError(n+"expected boolean, got type="+typeof e)}return e}function Dn(e){Dt(e),e.externalMu!==void 0&&vn(e.externalMu,"opts.externalMu")}var Z=256,Pe=8380417,jr=1753,vr=8347681,Je=13,Wt=Math.floor((Pe-1)/88)|0,$t=Math.floor((Pe-1)/32)|0,Vt=Object.freeze({2:Object.freeze({K:4,L:4,D:Je,GAMMA1:2**17,GAMMA2:Wt,TAU:39,ETA:2,OMEGA:80}),3:Object.freeze({K:6,L:5,D:Je,GAMMA1:2**19,GAMMA2:$t,TAU:49,ETA:4,OMEGA:55}),5:Object.freeze({K:8,L:7,D:Je,GAMMA1:2**19,GAMMA2:$t,TAU:60,ETA:2,OMEGA:75})}),me=e=>new Int32Array(e),W=Ht({N:Z,Q:Pe,F:vr,ROOT_OF_UNITY:jr,newPoly:me,isKyber:!1,brvBits:8}),Gn=e=>e,xt=(e,t=Gn,n=Gn)=>W.bitsCoder(e,{encode:r=>t(n(r)),decode:r=>n(t(r))}),Me=(e,t)=>{let n=e,r=t;for(let o=0;o<n.length;o++)n[o]=W.mod(n[o]+r[o]);return n},zn=(e,t)=>{let n=e,r=t;for(let o=0;o<n.length;o++)n[o]=W.mod(n[o]-r[o]);return n},Dr=e=>{let t=e;for(let n=0;n<Z;n++)t[n]<<=Je;return t},yt=(e,t)=>{let n=e;for(let r=0;r<Z;r++)if(Math.abs(W.smod(n[r]))>=t)return!0;return!1},Ke=(e,t)=>{let n=e,r=t,o=me(Z);for(let c=0;c<n.length;c++)o[c]=W.mod(n[c]*r[c]);return o};function Rt(e){let t=e,n=me(Z);for(let r=0;r<Z;){let o=t();if(o.length%3)throw new Error("RejNTTPoly: unaligned block");for(let c=0;r<Z&&c<=o.length-3;c+=3){let s=(o[c+0]|o[c+1]<<8|o[c+2]<<16)&8388607;s<Pe&&(n[r++]=s)}}return n}function Xt(e){let t=e,{K:n,L:r,GAMMA1:o,GAMMA2:c,TAU:s,ETA:i,OMEGA:a}=t,{CRH_BYTES:w,TR_BYTES:h,C_TILDE_BYTES:y,XOF128:_,XOF256:k,securityLevel:O}=t;if(![2,4].includes(i))throw new Error("Wrong ETA");if(![1<<17,1<<19].includes(o))throw new Error("Wrong GAMMA1");if(![Wt,$t].includes(c))throw new Error("Wrong GAMMA2");let E=s*i,U=p=>{let L=W.mod(p),T=W.smod(L,2*c)|0;return L-T===Pe-1?{r1:0,r0:T-1|0}:{r1:Math.floor((L-T)/(2*c))|0,r0:T}},N=p=>U(p).r1,b=p=>U(p).r0,l=(p,L)=>p<=c||p>Pe-c||p===Pe-c&&L===0?0:1,I=(p,L)=>{let T=Math.floor((Pe-1)/(2*c)),{r1:x,r0:u}=U(L);return p===1?u>0?W.mod(x+1,T)|0:W.mod(x-1,T)|0:x|0},F=p=>{let L=W.mod(p),T=W.smod(L,2**Je)|0;return{r1:Math.floor((L-T)/2**Je)|0,r0:T}},P={bytesLen:a+n,encode:p=>{let L=p;if(L===!1)throw new Error("hint.encode: hint is false");let T=new Uint8Array(a+n);for(let x=0,u=0;x<n;x++){for(let f=0;f<Z;f++)L[x][f]!==0&&(T[u++]=f);T[a+x]=u}return T},decode:p=>{let L=[],T=0;for(let x=0;x<n;x++){let u=me(Z);if(p[a+x]<T||p[a+x]>a)return!1;for(let f=T;f<p[a+x];f++){if(f>T&&p[f]<=p[f-1])return!1;u[p[f]]=1}T=p[a+x],L.push(u)}for(let x=T;x<a;x++)if(p[x]!==0)return!1;return L}},v=xt(i===2?3:4,p=>i-p,p=>{if(!(-i<=p&&p<=i))throw new Error(`malformed key s1/s3 ${p} outside of ETA range [${-i}, ${i}]`);return p}),K=xt(13,p=>(1<<Je-1)-p),g=xt(10),M=xt(o===1<<17?18:20,p=>W.smod(o-p)),J=xt(c===Wt?6:4),$=ge(J,n),fe=ce("publicKey",32,ge(g,n)),Ae=ce("secretKey",32,32,h,ge(v,r),ge(v,n),ge(K,n)),pe=ce("signature",y,ge(M,r),P),Ge=i===2?p=>p<15?2-p%5:!1:p=>p<9?4-p:!1;function ft(p){let L=p,T=me(Z);for(let x=0;x<Z;){let u=L();for(let f=0;x<Z&&f<u.length;f+=1){let A=Ge(u[f]&15),d=Ge(u[f]>>4&15);A!==!1&&(T[x++]=A),x<Z&&d!==!1&&(T[x++]=d)}}return T}let gt=p=>{let L=me(Z),T=re.create({}).update(p),x=new Uint8Array(re.blockLen);T.xofInto(x);let u=x.slice(0,8);for(let f=Z-s,A=8,d=0,B=0;f<Z;f++){let H=f+1;for(;H>f;)H=x[A++],!(A<re.blockLen)&&(T.xofInto(x),A=0);L[f]=L[H],L[H]=1-((u[d]>>B++&1)<<1),B>=8&&(d++,B=0)}return L},wt=p=>{let L=p,T=me(Z),x=me(Z);for(let u=0;u<L.length;u++){let{r0:f,r1:A}=F(L[u]);T[u]=f,x[u]=A}return{r0:T,r1:x}},mt=(p,L)=>{let T=p,x=L;for(let u=0;u<Z;u++)T[u]=I(x[u],T[u]);return T},At=(p,L)=>{let T=p,x=L,u=me(Z),f=0;for(let A=0;A<Z;A++){let d=l(T[A],x[A]);u[A]=d,f+=d}return{v:u,cnt:f}},ze=32,Ue=ce("seed",32,64,32),ue=Object.freeze({info:Object.freeze({type:"internal-ml-dsa"}),lengths:Object.freeze({secretKey:Ae.bytesLen,publicKey:fe.bytesLen,seed:32,signature:pe.bytesLen,signRand:ze}),keygen:p=>{let L=new Uint8Array(34),T=p===void 0;T&&(p=Se(32)),be(p,32,"seed"),L.set(p),T&&V(p),L[32]=n,L[33]=r;let[x,u,f]=Ue.decode(re(L,{dkLen:Ue.bytesLen})),A=k(u),d=[];for(let m=0;m<r;m++)d.push(ft(A.get(m&255,m>>8&255)));let B=[];for(let m=r;m<r+n;m++)B.push(ft(A.get(m&255,m>>8&255)));let H=d.map(m=>W.NTT.encode(m.slice())),R=[],C=[],G=_(x),S=me(Z);for(let m=0;m<n;m++){V(S);for(let Y=0;Y<r;Y++){let oe=Rt(G.get(Y,m));Me(S,Ke(oe,H[Y]))}W.NTT.decode(S);let{r0:X,r1:q}=wt(Me(S,B[m]));R.push(X),C.push(q)}let j=fe.encode([x,C]),D=re(j,{dkLen:h}),ee=Ae.encode([x,f,D,d,B,R]);return G.clean(),A.clean(),V(x,u,f,d,B,H,S,R,C,D,L),{publicKey:j,secretKey:ee}},getPublicKey:p=>{let[L,T,x,u,f,A]=Ae.decode(p),d=_(L),B=u.map(C=>W.NTT.encode(C.slice())),H=[],R=me(Z);for(let C=0;C<n;C++){R.fill(0);for(let S=0;S<r;S++){let j=Rt(d.get(S,C));Me(R,Ke(j,B[S]))}W.NTT.decode(R),Me(R,f[C]);let{r1:G}=wt(R);H.push(G)}return d.clean(),V(R,B,A,u,f),fe.encode([L,H])},sign:(p,L,T={})=>{Ne(T),Dn(T);let{extraEntropy:x,externalMu:u=!1}=T,[f,A,d,B,H,R]=Ae.decode(L),C=[],G=_(f);for(let m=0;m<n;m++){let X=[];for(let q=0;q<r;q++)X.push(Rt(G.get(q,m)));C.push(X)}G.clean();for(let m=0;m<r;m++)W.NTT.encode(B[m]);for(let m=0;m<n;m++)W.NTT.encode(H[m]),W.NTT.encode(R[m]);let S=u?p:re.create({dkLen:w}).update(d).update(p).digest(),j=x===!1?new Uint8Array(32):x===void 0?Se(ze):x;be(j,32,"extraEntropy");let D=re.create({dkLen:w}).update(A).update(j).update(S).digest();be(D,w);let ee=k(D,M.bytesLen);e:for(let m=0;;){let X=[];for(let z=0;z<r;z++,m++)X.push(M.decode(ee.get(m&255,m>>8)()));let q=X.map(z=>W.NTT.encode(z.slice())),Y=[];for(let z=0;z<n;z++){let ne=me(Z);for(let ie=0;ie<r;ie++)Me(ne,Ke(C[z][ie],q[ie]));W.NTT.decode(ne),Y.push(ne)}let oe=Y.map(z=>z.map(N)),te=re.create({dkLen:y}).update(S).update($.encode(oe)).digest(),de=W.NTT.encode(gt(te)),Te=B.map(z=>Ke(z,de));for(let z=0;z<r;z++)if(Me(W.NTT.decode(Te[z]),X[z]),yt(Te[z],o-E))continue e;let _e=0,se=[];for(let z=0;z<n;z++){let ne=W.NTT.decode(Ke(H[z],de)),ie=zn(Y[z],ne).map(b);if(yt(ie,c-E))continue e;let xe=W.NTT.decode(Ke(R[z],de));if(yt(xe,c))continue e;Me(ie,xe);let Le=At(ie,oe[z]);se.push(Le.v),_e+=Le.cnt}if(_e>a)continue;ee.clean();let Ce=pe.encode([te,Te,se]);return V(te,Te,se,de,oe,Y,q,X,D,B,H,R,...C),u||V(S),Ce}throw new Error("Unreachable code path reached, report this error")},verify:(p,L,T,x={})=>{Dn(x);let{externalMu:u=!1}=x,[f,A]=fe.decode(T),d=re(T,{dkLen:h});if(p.length!==pe.bytesLen)return!1;let[B,H,R]=pe.decode(p);if(R===!1)return!1;for(let m=0;m<r;m++)if(yt(H[m],o-E))return!1;let C=u?L:re.create({dkLen:w}).update(d).update(L).digest(),G=W.NTT.encode(gt(B)),S=H.map(m=>m.slice());for(let m=0;m<r;m++)W.NTT.encode(S[m]);let j=[],D=_(f);for(let m=0;m<n;m++){let X=Ke(W.NTT.encode(Dr(A[m])),G),q=me(Z);for(let oe=0;oe<r;oe++){let te=Rt(D.get(oe,m));Me(q,Ke(te,S[oe]))}let Y=W.NTT.decode(zn(q,X));j.push(mt(Y,R[m]))}D.clean();let ee=re.create({dkLen:y}).update(C).update($.encode(j)).digest();for(let m of R)if(!(m.reduce((q,Y)=>q+Y,0)<=a))return!1;for(let m of H)if(yt(m,o-E))return!1;return Ie(B,ee)}});return Object.freeze({info:Object.freeze({type:"ml-dsa"}),internal:ue,securityLevel:O,keygen:ue.keygen,lengths:ue.lengths,getPublicKey:ue.getPublicKey,sign:(p,L,T={})=>{Ne(T);let x=ot(p,T.context),u=ue.sign(x,L,T);return V(x),u},verify:(p,L,T,x={})=>(Ze(x),ue.verify(p,ot(L,x.context),T)),prehash:p=>(Ot(p,O),Object.freeze({info:Object.freeze({type:"hashml-dsa"}),securityLevel:O,lengths:ue.lengths,keygen:ue.keygen,getPublicKey:ue.getPublicKey,sign:(L,T,x={})=>{Ne(x);let u=st(p,L,x.context),f=ue.sign(u,T,x);return V(u),f},verify:(L,T,x,u={})=>(Ze(u),ue.verify(L,st(p,T,u.context),x))}))})}var Wn=Xt({...Vt[2],CRH_BYTES:64,TR_BYTES:64,C_TILDE_BYTES:32,XOF128:ct,XOF256:St,securityLevel:128}),$n=Xt({...Vt[3],CRH_BYTES:64,TR_BYTES:64,C_TILDE_BYTES:48,XOF128:ct,XOF256:St,securityLevel:192}),Vn=Xt({...Vt[5],CRH_BYTES:64,TR_BYTES:64,C_TILDE_BYTES:64,XOF128:ct,XOF256:St,securityLevel:256});var Ut=class{oHash;iHash;blockLen;outputLen;canXOF=!1;finished=!1;destroyed=!1;constructor(t,n){if(xn(t),Q(n,void 0,"key"),this.iHash=t.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let r=this.blockLen,o=new Uint8Array(r);o.set(n.length>r?t.create().update(n).digest():n);for(let c=0;c<o.length;c++)o[c]^=54;this.iHash.update(o),this.oHash=t.create();for(let c=0;c<o.length;c++)o[c]^=106;this.oHash.update(o),Ee(o)}update(t){return He(this),this.iHash.update(t),this}digestInto(t){He(this),et(t,this),this.finished=!0;let n=t.subarray(0,this.outputLen);this.iHash.digestInto(n),this.oHash.update(n),this.oHash.digestInto(n),this.destroy()}digest(){let t=new Uint8Array(this.oHash.outputLen);return this.digestInto(t),t}_cloneInto(t){t||=Object.create(Object.getPrototypeOf(this),{});let{oHash:n,iHash:r,finished:o,destroyed:c,blockLen:s,outputLen:i}=this;return t=t,t.finished=o,t.destroyed=c,t.blockLen=s,t.outputLen=i,t.oHash=n._cloneInto(t.oHash),t.iHash=r._cloneInto(t.iHash),t}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},Xn=(()=>{let e=((t,n,r)=>new Ut(t,n).update(r).digest());return e.create=(t,n)=>new Ut(t,n),e})();function Yn(e,t,n){return e&t^~e&n}function Zn(e,t,n){return e&t^e&n^t&n}var bt=class{blockLen;outputLen;canXOF=!1;padOffset;isLE;buffer;view;finished=!1;length=0;pos=0;destroyed=!1;constructor(t,n,r,o){this.blockLen=t,this.outputLen=n,this.padOffset=r,this.isLE=o,this.buffer=new Uint8Array(t),this.view=Xe(this.buffer)}update(t){He(this),Q(t);let{view:n,buffer:r,blockLen:o}=this,c=t.length;for(let s=0;s<c;){let i=Math.min(o-this.pos,c-s);if(i===o){let a=Xe(t);for(;o<=c-s;s+=o)this.process(a,s);continue}r.set(t.subarray(s,s+i),this.pos),this.pos+=i,s+=i,this.pos===o&&(this.process(n,0),this.pos=0)}return this.length+=t.length,this.roundClean(),this}digestInto(t){He(this),et(t,this),this.finished=!0;let{buffer:n,view:r,blockLen:o,isLE:c}=this,{pos:s}=this;n[s++]=128,Ee(this.buffer.subarray(s)),this.padOffset>o-s&&(this.process(r,0),s=0);for(let y=s;y<o;y++)n[y]=0;r.setBigUint64(o-8,BigInt(this.length*8),c),this.process(r,0);let i=Xe(t),a=this.outputLen;if(a%4)throw new Error("_sha2: outputLen must be aligned to 32bit");let w=a/4,h=this.get();if(w>h.length)throw new Error("_sha2: outputLen bigger than state");for(let y=0;y<w;y++)i.setUint32(4*y,h[y],c)}digest(){let{buffer:t,outputLen:n}=this;this.digestInto(t);let r=t.slice(0,n);return this.destroy(),r}_cloneInto(t){t||=new this.constructor,t.set(...this.get());let{blockLen:n,buffer:r,length:o,finished:c,destroyed:s,pos:i}=this;return t.destroyed=s,t.finished=c,t.length=o,t.pos=i,o%n&&t.buffer.set(r),t}clone(){return this._cloneInto()}},Re=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var ae=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]);var Gr=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),je=new Uint32Array(64),Yt=class extends bt{constructor(t){super(64,t,8,!1)}get(){let{A:t,B:n,C:r,D:o,E:c,F:s,G:i,H:a}=this;return[t,n,r,o,c,s,i,a]}set(t,n,r,o,c,s,i,a){this.A=t|0,this.B=n|0,this.C=r|0,this.D=o|0,this.E=c|0,this.F=s|0,this.G=i|0,this.H=a|0}process(t,n){for(let y=0;y<16;y++,n+=4)je[y]=t.getUint32(n,!1);for(let y=16;y<64;y++){let _=je[y-15],k=je[y-2],O=ke(_,7)^ke(_,18)^_>>>3,E=ke(k,17)^ke(k,19)^k>>>10;je[y]=E+je[y-7]+O+je[y-16]|0}let{A:r,B:o,C:c,D:s,E:i,F:a,G:w,H:h}=this;for(let y=0;y<64;y++){let _=ke(i,6)^ke(i,11)^ke(i,25),k=h+_+Yn(i,a,w)+Gr[y]+je[y]|0,E=(ke(r,2)^ke(r,13)^ke(r,22))+Zn(r,o,c)|0;h=w,w=a,a=i,i=s+k|0,s=c,c=o,o=r,r=k+E|0}r=r+this.A|0,o=o+this.B|0,c=c+this.C|0,s=s+this.D|0,i=i+this.E|0,a=a+this.F|0,w=w+this.G|0,h=h+this.H|0,this.set(r,o,c,s,i,a,w,h)}roundClean(){Ee(je)}destroy(){this.destroyed=!0,this.set(0,0,0,0,0,0,0,0),Ee(this.buffer)}},Zt=class extends Yt{A=Re[0]|0;B=Re[1]|0;C=Re[2]|0;D=Re[3]|0;E=Re[4]|0;F=Re[5]|0;G=Re[6]|0;H=Re[7]|0;constructor(){super(32)}};var qn=kt(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(e=>BigInt(e))),zr=qn[0],Wr=qn[1],ve=new Uint32Array(80),De=new Uint32Array(80),qt=class extends bt{constructor(t){super(128,t,16,!1)}get(){let{Ah:t,Al:n,Bh:r,Bl:o,Ch:c,Cl:s,Dh:i,Dl:a,Eh:w,El:h,Fh:y,Fl:_,Gh:k,Gl:O,Hh:E,Hl:U}=this;return[t,n,r,o,c,s,i,a,w,h,y,_,k,O,E,U]}set(t,n,r,o,c,s,i,a,w,h,y,_,k,O,E,U){this.Ah=t|0,this.Al=n|0,this.Bh=r|0,this.Bl=o|0,this.Ch=c|0,this.Cl=s|0,this.Dh=i|0,this.Dl=a|0,this.Eh=w|0,this.El=h|0,this.Fh=y|0,this.Fl=_|0,this.Gh=k|0,this.Gl=O|0,this.Hh=E|0,this.Hl=U|0}process(t,n){for(let l=0;l<16;l++,n+=4)ve[l]=t.getUint32(n),De[l]=t.getUint32(n+=4);for(let l=16;l<80;l++){let I=ve[l-15]|0,F=De[l-15]|0,P=We(I,F,1)^We(I,F,8)^Mt(I,F,7),v=$e(I,F,1)^$e(I,F,8)^Kt(I,F,7),K=ve[l-2]|0,g=De[l-2]|0,M=We(K,g,19)^ut(K,g,61)^Mt(K,g,6),J=$e(K,g,19)^dt(K,g,61)^Kt(K,g,6),$=un(v,J,De[l-7],De[l-16]),fe=dn($,P,M,ve[l-7],ve[l-16]);ve[l]=fe|0,De[l]=$|0}let{Ah:r,Al:o,Bh:c,Bl:s,Ch:i,Cl:a,Dh:w,Dl:h,Eh:y,El:_,Fh:k,Fl:O,Gh:E,Gl:U,Hh:N,Hl:b}=this;for(let l=0;l<80;l++){let I=We(y,_,14)^We(y,_,18)^ut(y,_,41),F=$e(y,_,14)^$e(y,_,18)^dt(y,_,41),P=y&k^~y&E,v=_&O^~_&U,K=ln(b,F,v,Wr[l],De[l]),g=hn(K,N,I,P,zr[l],ve[l]),M=K|0,J=We(r,o,28)^ut(r,o,34)^ut(r,o,39),$=$e(r,o,28)^dt(r,o,34)^dt(r,o,39),fe=r&c^r&i^c&i,Ae=o&s^o&a^s&a;N=E|0,b=U|0,E=k|0,U=O|0,k=y|0,O=_|0,{h:y,l:_}=Be(w|0,h|0,g|0,M|0),w=i|0,h=a|0,i=c|0,a=s|0,c=r|0,s=o|0;let pe=an(M,$,Ae);r=fn(pe,g,J,fe),o=pe|0}({h:r,l:o}=Be(this.Ah|0,this.Al|0,r|0,o|0)),{h:c,l:s}=Be(this.Bh|0,this.Bl|0,c|0,s|0),{h:i,l:a}=Be(this.Ch|0,this.Cl|0,i|0,a|0),{h:w,l:h}=Be(this.Dh|0,this.Dl|0,w|0,h|0),{h:y,l:_}=Be(this.Eh|0,this.El|0,y|0,_|0),{h:k,l:O}=Be(this.Fh|0,this.Fl|0,k|0,O|0),{h:E,l:U}=Be(this.Gh|0,this.Gl|0,E|0,U|0),{h:N,l:b}=Be(this.Hh|0,this.Hl|0,N|0,b|0),this.set(r,o,c,s,i,a,w,h,y,_,k,O,E,U,N,b)}roundClean(){Ee(ve,De)}destroy(){this.destroyed=!0,Ee(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}},Qt=class extends qt{Ah=ae[0]|0;Al=ae[1]|0;Bh=ae[2]|0;Bl=ae[3]|0;Ch=ae[4]|0;Cl=ae[5]|0;Dh=ae[6]|0;Dl=ae[7]|0;Eh=ae[8]|0;El=ae[9]|0;Fh=ae[10]|0;Fl=ae[11]|0;Gh=ae[12]|0;Gl=ae[13]|0;Hh=ae[14]|0;Hl=ae[15]|0;constructor(){super(64)}};var Ct=nt(()=>new Zt,Fe(1));var Qn=nt(()=>new Qt,Fe(3));var it=Object.freeze({"128f":Object.freeze({W:16,N:16,H:66,D:22,K:33,A:6,securityLevel:128}),"128s":Object.freeze({W:16,N:16,H:63,D:7,K:14,A:12,securityLevel:128}),"192f":Object.freeze({W:16,N:24,H:66,D:22,K:33,A:8,securityLevel:192}),"192s":Object.freeze({W:16,N:24,H:63,D:7,K:17,A:14,securityLevel:192}),"256f":Object.freeze({W:16,N:32,H:68,D:17,K:35,A:9,securityLevel:256}),"256s":Object.freeze({W:16,N:32,H:64,D:8,K:22,A:14,securityLevel:256})}),he={WOTS:0,WOTSPK:1,HASHTREE:2,FORSTREE:3,FORSPK:4,WOTSPRF:5,FORSPRF:6};function $r(e){if(typeof e!="string")throw new Error("hex string expected, got "+typeof e);return BigInt(e===""?"0":"0x"+e)}function Jn(e){return $r(gn(e))}function Vr(e,t){return wn(e.toString(16).padStart(t*2,"0"))}var Jt=(e,t)=>{let n=qe(t);return r=>{let o=new Uint32Array(e);for(let c=0,s=0,i=0,a=0;c<e;c++){for(;i<t;)a=a<<8|r[s++],i+=8;i-=t,o[c]=a>>>i&n}return o}};function en(e){return(1n<<BigInt(e))-1n}function at(e,t){let n=t,{N:r,W:o,H:c,D:s,K:i,A:a,securityLevel:w}=e,h=n.getContext(e);if(o!==16)throw new Error("Unsupported Winternitz parameter");let y=4,_=Math.floor(8*r/y),k=r<=8?2:r<=136?3:4,O=Math.floor(c/s),E=_+k,U=22,N=0,b=1,l=9,I=12,F=13,P=17,v=18,K=21;n.isCompressed||(U=32,N+=3,b+=7,l+=10,I+=10,F+=10,P+=10,v+=10,K+=10);let g=(u,f=new Uint8Array(U))=>{let{type:A,height:d,tree:B,layer:H,index:R,chain:C,hash:G,keypair:S}=u,{subtreeAddr:j,keypairAddr:D}=u,ee=Xe(f);return d!==void 0&&(f[P]=d),H!==void 0&&(f[N]=H),A!==void 0&&(f[l]=A),C!==void 0&&(f[P]=C),G!==void 0&&(f[K]=G),R!==void 0&&ee.setUint32(v,R,!1),j&&f.set(j.subarray(0,b+8)),B!==void 0&&ee.setBigUint64(b,B,!1),S!==void 0&&(f[F]=S,O>8&&(f[I]=S>>>8)),D&&(f.set(D.subarray(0,b+8)),f[F]=D[F],O>8&&(f[I]=D[I])),f},M=Jt(k,y),J=u=>{let f=Jt(_,y)(u),A=0;for(let H=0;H<f.length;H++)A+=o-1-f[H];A<<=(8-k*y%8)%8;let d=M(Vr(A,Math.ceil(k*y/8))),B=new Uint32Array(E);return B.set(f),B.set(d,f.length),B},$=Jt(i,a),fe=O*(s-1),Ae=O,pe=ce("hashedMessage",Math.ceil(a*i/8),Math.ceil(fe/8),Math.ceil(O/8)),Ge=(u,f,A,d)=>{let H=d.Hmsg(u,f,A,pe.bytesLen),[R,C,G]=pe.decode(H),S=Jn(C)&en(fe),j=Number(Jn(G))&qe(Ae);return{tree:S,leafIdx:j,md:R}},ft=(u,f)=>function(d,B,H,R,C){let G=d,S=f,j=(1<<u)-1,D=new Uint8Array(u*r),ee=new Uint8Array(u*r);for(let m=0;;m++){let X=new Uint8Array(2*r),q=X.subarray(0,r),Y=X.subarray(r),oe=m+H;Y.set(S(B,oe,G,C));let te=0;for(let de=m,Te=H,_e=B;;te++,de>>>=1,_e>>>=1,Te>>>=1){if(te===u)return{root:Y,authPath:ee};if((de^_e)===1&&ee.subarray(te*r).set(Y),(de&1)===0&&m<j)break;g({height:te+1,index:(de>>1)+(Te>>1)},R),q.set(D.subarray(te*r).subarray(0,r)),Y.set(G.thashN(2,X,R))}D.subarray(te*r).set(Y)}throw new Error("Unreachable code path reached, report this error")},gt=ft(O,(u,f,A,d)=>{let B=A,H=new Uint8Array(E*r),R=f===u?0:-1>>>0;g({keypair:f},d.leafAddr),g({keypair:f},d.pkAddr);for(let C=0;C<E;C++){let G=d.wotsSteps[C]|R,S=H.subarray(C*r,(C+1)*r);g({chain:C,hash:0,type:he.WOTSPRF},d.leafAddr),S.set(B.PRFaddr(d.leafAddr)),g({type:he.WOTS},d.leafAddr);for(let j=0;j===G&&d.wotsSig.subarray(C*r).set(S),j!==o-1;j++)g({hash:j},d.leafAddr),S.set(B.thash1(S,d.leafAddr))}return B.thashN(E,H,d.pkAddr)}),wt=ft(a,(u,f,A,d)=>{let B=A;g({type:he.FORSPRF,index:f},d);let H=B.PRFaddr(d);return g({type:he.FORSTREE},d),B.thash1(H,d)}),mt=(u,f,A,d,B=new Uint8Array(r))=>{g({type:he.HASHTREE},A);let H={wotsSig:new Uint8Array(L.bytesLen),wotsSteps:J(B),leafAddr:g({subtreeAddr:f}),pkAddr:g({type:he.WOTSPK,subtreeAddr:f})},{root:R,authPath:C}=gt(u,d,0,A,H);return{root:R,sigWots:H.wotsSig.subarray(0,E*r),sigAuth:C}},At=(u,f,A,d,B,H,R)=>{let C=H,G=new Uint8Array(2*r),S=G.subarray(0,r),j=G.subarray(r,2*r);(f&1)!==0?(j.set(u.subarray(0,r)),S.set(d.subarray(0,r))):(S.set(u.subarray(0,r)),j.set(d.subarray(0,r))),f>>>=1,A>>>=1;for(let D=0;D<B-1;D++,f>>=1,A>>=1){g({height:D+1,index:f+A},R);let ee=d.subarray((D+1)*r,(D+2)*r);(f&1)!==0?(j.set(C.thashN(2,G,R)),S.set(ee)):(G.set(C.thashN(2,G,R)),j.set(ee))}return g({height:B,index:f+A},R),C.thashN(2,G,R)},ze=ce("seed",r,r,r),Ue=ce("publicKey",r,r),ue=ce("secretKey",r,r,Ue.bytesLen),p=ge(ce("fors",r,r*a),i),L=ge(ce("wots",E*r,O*r),s),T=ce("signature",r,p,L),x=Object.freeze({info:Object.freeze({type:"internal-slh-dsa"}),lengths:Object.freeze({publicKey:Ue.bytesLen,secretKey:ue.bytesLen,signature:T.bytesLen,seed:ze.bytesLen,signRand:r}),keygen(u){u!==void 0&&be(u,ze.bytesLen,"seed"),u=u===void 0?Se(ze.bytesLen):rt(u);let[f,A,d]=ze.decode(u),B=h(d,f),H=g({layer:s-1}),R=g({layer:s-1}),{root:C}=mt(B,R,H,-1>>>0),G=Ue.encode([d,C]),S=ue.encode([f,A,G]);return B.clean(),V(f,A,C,R,H),{publicKey:G,secretKey:S}},getPublicKey:u=>{let[f,A,d]=ue.decode(u);return Uint8Array.from(d)},sign:(u,f,A={})=>{Ne(A);let{extraEntropy:d}=A,[B,H,R]=ue.decode(f),[C,G]=Ue.decode(R);d===!1?d=rt(C):d===void 0?d=Se(r):d=rt(d),be(d,r);let S=h(C,B),j=S.PRFmsg(H,d,u),{tree:D,leafIdx:ee,md:m}=Ge(j,R,u,S),X=g({type:he.WOTS,tree:D,keypair:ee}),q=[],Y=g({keypairAddr:X}),oe=g({keypairAddr:X}),te=$(m),de=[];for(let ne=0;ne<te.length;ne++){let ie=ne<<a;g({type:he.FORSPRF,height:0,index:te[ne]+ie},oe);let xe=S.PRFaddr(oe);g({type:he.FORSTREE},oe);let{root:Le,authPath:Tt}=wt(S,te[ne],ie,oe,Y);q.push(Le),de.push([xe,Tt])}let Te=g({type:he.FORSPK,keypairAddr:X}),_e=S.thashN(i,Ye(...q),Te),se=g({type:he.HASHTREE}),Ce=[];for(let ne=0;ne<s;ne++,D>>=BigInt(O)){g({tree:D,layer:ne},se),g({subtreeAddr:se,keypair:ee},X);let{sigWots:ie,sigAuth:xe,root:Le}=mt(S,X,se,ee,_e);_e.set(Le),V(Le),Ce.push([ie,xe]),ee=Number(D&en(O))}S.clean();let z=T.encode([j,de,Ce]);return V(j,d,se,X,Y,oe,te,q),z},verify:(u,f,A)=>{let[d,B]=Ue.decode(A),[H,R,C]=T.decode(u),G=A;if(u.length!==T.bytesLen)return!1;let S=h(d),{tree:j,leafIdx:D,md:ee}=Ge(H,G,f,S),m=g({type:he.WOTS,tree:j,keypair:D}),X=[],q=g({type:he.FORSTREE,keypairAddr:m}),Y=$(ee);for(let se=0;se<R.length;se++){let[Ce,z]=R[se],ne=se<<a;g({height:0,index:Y[se]+ne},q);let ie=S.thash1(Ce,q);X.push(At(ie,Y[se],ne,z,a,S,q))}let oe=g({type:he.FORSPK,keypairAddr:m}),te=S.thashN(i,Ye(...X),oe),de=g({type:he.HASHTREE}),Te=g({type:he.WOTSPK}),_e=new Uint8Array(E*r);for(let se=0;se<C.length;se++,j>>=BigInt(O)){let[Ce,z]=C[se];g({tree:j,layer:se},de),g({subtreeAddr:de,keypair:D},m),g({keypairAddr:m},Te);let ne=J(te);for(let xe=0;xe<E;xe++){g({chain:xe},m);let Le=o-1-ne[xe],Tt=ne[xe],Ft=_e.subarray(xe*r);Ft.set(Ce.subarray(xe*r,(xe+1)*r));for(let Et=Tt;Et<Tt+Le&&Et<o;Et++)g({hash:Et},m),Ft.set(S.thash1(Ft,m))}let ie=S.thashN(E,_e,Te);te=At(ie,D,0,z,O,S,de),D=Number(j&en(O))}return Ie(te,B)}});return Object.freeze({info:Object.freeze({type:"slh-dsa"}),internal:x,securityLevel:w,lengths:x.lengths,keygen:x.keygen,getPublicKey:x.getPublicKey,sign:(u,f,A={})=>{Ne(A);let d=ot(u,A.context),B=x.sign(d,f,A);return V(d),B},verify:(u,f,A,d={})=>(Ze(d),x.verify(u,ot(f,d.context),A)),prehash:u=>{Ot(u,w);let f=u;return Object.freeze({info:Object.freeze({type:"hashslh-dsa"}),lengths:x.lengths,keygen:x.keygen,getPublicKey:x.getPublicKey,sign:(A,d,B={})=>{Ne(B);let H=st(f,A,B.context),R=x.sign(H,d,B);return V(H),R},verify:(A,d,B,H={})=>(Ze(H),x.verify(A,st(f,d,H.context),B))})}})}var Xr=()=>e=>(t,n)=>{let{N:r}=e,o={prf:0,thash:0,hmsg:0,gen_message_random:0},c=re.create({}).update(t),s=c.clone(),i=(a,w,h)=>(o.thash++,c._cloneInto(s).update(h).update(w.subarray(0,a*r)).xof(r));return{PRFaddr:a=>{if(!n)throw new Error("no sk seed");return o.prf++,c._cloneInto(s).update(a).update(n).xof(r)},PRFmsg:(a,w,h)=>(o.gen_message_random++,re.create({}).update(a).update(w).update(h).digest().subarray(0,r)),Hmsg:(a,w,h,y)=>(o.hmsg++,re.create({}).update(a.subarray(0,r)).update(w).update(h).xof(y)),thash1:i.bind(null,1),thashN:i,clean:()=>{c.destroy(),s.destroy()}}},tn={getContext:Xr()},er=at(it["128f"],tn);var tr=at(it["192f"],tn);var nr=at(it["256f"],tn);var rr=(e,t)=>n=>(r,o)=>{let{N:c}=n,s={prf:0,thash:0,hmsg:0,gen_message_random:0,mgf1:0},i=new Uint8Array(4),a=Xe(i),w=e.create().update(r).update(new Uint8Array(e.blockLen-c)),h=t.create().update(r).update(new Uint8Array(t.blockLen-c)),y=w.clone(),_=h.clone();function k(E,U,N){s.mgf1++;let b=new Uint8Array(Math.ceil(U/N.outputLen)*N.outputLen);if(U>2**32)throw new Error("mask too long");for(let l=0,I=b;I.length;l++)a.setUint32(0,l,!1),N.create().update(E).update(i).digestInto(I),I=I.subarray(N.outputLen);return V(b.subarray(U)),b.subarray(0,U)}let O=(E,U,N)=>(b,l,I)=>(s.thash++,U._cloneInto(N).update(I).update(l.subarray(0,b*c)).digest().subarray(0,c));return{PRFaddr:E=>{if(!o)throw new Error("No sk seed");return s.prf++,w._cloneInto(y).update(E).update(o).digest().subarray(0,c)},PRFmsg:(E,U,N)=>(s.gen_message_random++,Xn.create(t,E).update(U).update(N).digest().subarray(0,c)),Hmsg:(E,U,N,b)=>{s.hmsg++;let l=Ye(E.subarray(0,c),U.subarray(0,c),t.create().update(E.subarray(0,c)).update(U).update(N).digest());return k(l,b,t)},thash1:O(e,w,y).bind(null,1),thashN:O(t,h,_),clean:()=>{w.destroy(),h.destroy(),y.destroy(),_.destroy()}}},Yr={isCompressed:!0,getContext:rr(Ct,Ct)},or={isCompressed:!0,getContext:rr(Ct,Qn)},sr=at(it["128f"],Yr);var cr=at(it["192f"],or);var ir=at(it["256f"],or);0&&(module.exports={ml_dsa44,ml_dsa65,ml_dsa87,ml_kem1024,ml_kem512,ml_kem768,slh_dsa_sha2_128f,slh_dsa_sha2_192f,slh_dsa_sha2_256f,slh_dsa_shake_128f,slh_dsa_shake_192f,slh_dsa_shake_256f});
|
|
6
|
+
var __defProp = Object.defineProperty;
|
|
7
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
8
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
9
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
10
|
+
var __export = (target, all) => {
|
|
11
|
+
for (var name in all)
|
|
12
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
13
|
+
};
|
|
14
|
+
var __copyProps = (to, from, except, desc) => {
|
|
15
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
16
|
+
for (let key of __getOwnPropNames(from))
|
|
17
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
18
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
19
|
+
}
|
|
20
|
+
return to;
|
|
21
|
+
};
|
|
22
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
23
|
+
|
|
24
|
+
// _entry.mjs
|
|
25
|
+
var entry_exports = {};
|
|
26
|
+
__export(entry_exports, {
|
|
27
|
+
ml_dsa44: () => ml_dsa44,
|
|
28
|
+
ml_dsa65: () => ml_dsa65,
|
|
29
|
+
ml_dsa87: () => ml_dsa87,
|
|
30
|
+
ml_kem1024: () => ml_kem1024,
|
|
31
|
+
ml_kem512: () => ml_kem512,
|
|
32
|
+
ml_kem768: () => ml_kem768,
|
|
33
|
+
slh_dsa_sha2_128f: () => slh_dsa_sha2_128f,
|
|
34
|
+
slh_dsa_sha2_192f: () => slh_dsa_sha2_192f,
|
|
35
|
+
slh_dsa_sha2_256f: () => slh_dsa_sha2_256f,
|
|
36
|
+
slh_dsa_shake_128f: () => slh_dsa_shake_128f,
|
|
37
|
+
slh_dsa_shake_192f: () => slh_dsa_shake_192f,
|
|
38
|
+
slh_dsa_shake_256f: () => slh_dsa_shake_256f
|
|
39
|
+
});
|
|
40
|
+
module.exports = __toCommonJS(entry_exports);
|
|
41
|
+
|
|
42
|
+
// node_modules/@noble/hashes/_u64.js
|
|
43
|
+
var U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);
|
|
44
|
+
var _32n = /* @__PURE__ */ BigInt(32);
|
|
45
|
+
function fromBig(n, le = false) {
|
|
46
|
+
if (le)
|
|
47
|
+
return { h: Number(n & U32_MASK64), l: Number(n >> _32n & U32_MASK64) };
|
|
48
|
+
return { h: Number(n >> _32n & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };
|
|
49
|
+
}
|
|
50
|
+
function split(lst, le = false) {
|
|
51
|
+
const len = lst.length;
|
|
52
|
+
let Ah = new Uint32Array(len);
|
|
53
|
+
let Al = new Uint32Array(len);
|
|
54
|
+
for (let i = 0; i < len; i++) {
|
|
55
|
+
const { h, l } = fromBig(lst[i], le);
|
|
56
|
+
[Ah[i], Al[i]] = [h, l];
|
|
57
|
+
}
|
|
58
|
+
return [Ah, Al];
|
|
59
|
+
}
|
|
60
|
+
var shrSH = (h, _l, s) => h >>> s;
|
|
61
|
+
var shrSL = (h, l, s) => h << 32 - s | l >>> s;
|
|
62
|
+
var rotrSH = (h, l, s) => h >>> s | l << 32 - s;
|
|
63
|
+
var rotrSL = (h, l, s) => h << 32 - s | l >>> s;
|
|
64
|
+
var rotrBH = (h, l, s) => h << 64 - s | l >>> s - 32;
|
|
65
|
+
var rotrBL = (h, l, s) => h >>> s - 32 | l << 64 - s;
|
|
66
|
+
var rotlSH = (h, l, s) => h << s | l >>> 32 - s;
|
|
67
|
+
var rotlSL = (h, l, s) => l << s | h >>> 32 - s;
|
|
68
|
+
var rotlBH = (h, l, s) => l << s - 32 | h >>> 64 - s;
|
|
69
|
+
var rotlBL = (h, l, s) => h << s - 32 | l >>> 64 - s;
|
|
70
|
+
function add(Ah, Al, Bh, Bl) {
|
|
71
|
+
const l = (Al >>> 0) + (Bl >>> 0);
|
|
72
|
+
return { h: Ah + Bh + (l / 2 ** 32 | 0) | 0, l: l | 0 };
|
|
73
|
+
}
|
|
74
|
+
var add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);
|
|
75
|
+
var add3H = (low, Ah, Bh, Ch) => Ah + Bh + Ch + (low / 2 ** 32 | 0) | 0;
|
|
76
|
+
var add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);
|
|
77
|
+
var add4H = (low, Ah, Bh, Ch, Dh) => Ah + Bh + Ch + Dh + (low / 2 ** 32 | 0) | 0;
|
|
78
|
+
var add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);
|
|
79
|
+
var add5H = (low, Ah, Bh, Ch, Dh, Eh) => Ah + Bh + Ch + Dh + Eh + (low / 2 ** 32 | 0) | 0;
|
|
80
|
+
|
|
81
|
+
// node_modules/@noble/hashes/utils.js
|
|
82
|
+
function isBytes(a) {
|
|
83
|
+
return a instanceof Uint8Array || ArrayBuffer.isView(a) && a.constructor.name === "Uint8Array" && "BYTES_PER_ELEMENT" in a && a.BYTES_PER_ELEMENT === 1;
|
|
84
|
+
}
|
|
85
|
+
function anumber(n, title = "") {
|
|
86
|
+
if (typeof n !== "number") {
|
|
87
|
+
const prefix = title && `"${title}" `;
|
|
88
|
+
throw new TypeError(`${prefix}expected number, got ${typeof n}`);
|
|
89
|
+
}
|
|
90
|
+
if (!Number.isSafeInteger(n) || n < 0) {
|
|
91
|
+
const prefix = title && `"${title}" `;
|
|
92
|
+
throw new RangeError(`${prefix}expected integer >= 0, got ${n}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
function abytes(value, length, title = "") {
|
|
96
|
+
const bytes = isBytes(value);
|
|
97
|
+
const len = value?.length;
|
|
98
|
+
const needsLen = length !== void 0;
|
|
99
|
+
if (!bytes || needsLen && len !== length) {
|
|
100
|
+
const prefix = title && `"${title}" `;
|
|
101
|
+
const ofLen = needsLen ? ` of length ${length}` : "";
|
|
102
|
+
const got = bytes ? `length=${len}` : `type=${typeof value}`;
|
|
103
|
+
const message = prefix + "expected Uint8Array" + ofLen + ", got " + got;
|
|
104
|
+
if (!bytes)
|
|
105
|
+
throw new TypeError(message);
|
|
106
|
+
throw new RangeError(message);
|
|
107
|
+
}
|
|
108
|
+
return value;
|
|
109
|
+
}
|
|
110
|
+
function ahash(h) {
|
|
111
|
+
if (typeof h !== "function" || typeof h.create !== "function")
|
|
112
|
+
throw new TypeError("Hash must wrapped by utils.createHasher");
|
|
113
|
+
anumber(h.outputLen);
|
|
114
|
+
anumber(h.blockLen);
|
|
115
|
+
if (h.outputLen < 1)
|
|
116
|
+
throw new Error('"outputLen" must be >= 1');
|
|
117
|
+
if (h.blockLen < 1)
|
|
118
|
+
throw new Error('"blockLen" must be >= 1');
|
|
119
|
+
}
|
|
120
|
+
function aexists(instance, checkFinished = true) {
|
|
121
|
+
if (instance.destroyed)
|
|
122
|
+
throw new Error("Hash instance has been destroyed");
|
|
123
|
+
if (checkFinished && instance.finished)
|
|
124
|
+
throw new Error("Hash#digest() has already been called");
|
|
125
|
+
}
|
|
126
|
+
function aoutput(out, instance) {
|
|
127
|
+
abytes(out, void 0, "digestInto() output");
|
|
128
|
+
const min = instance.outputLen;
|
|
129
|
+
if (out.length < min) {
|
|
130
|
+
throw new RangeError('"digestInto() output" expected to be of length >=' + min);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function u32(arr) {
|
|
134
|
+
return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));
|
|
135
|
+
}
|
|
136
|
+
function clean(...arrays) {
|
|
137
|
+
for (let i = 0; i < arrays.length; i++) {
|
|
138
|
+
arrays[i].fill(0);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
function createView(arr) {
|
|
142
|
+
return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);
|
|
143
|
+
}
|
|
144
|
+
function rotr(word, shift) {
|
|
145
|
+
return word << 32 - shift | word >>> shift;
|
|
146
|
+
}
|
|
147
|
+
var isLE = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([287454020]).buffer)[0] === 68)();
|
|
148
|
+
function byteSwap(word) {
|
|
149
|
+
return word << 24 & 4278190080 | word << 8 & 16711680 | word >>> 8 & 65280 | word >>> 24 & 255;
|
|
150
|
+
}
|
|
151
|
+
function byteSwap32(arr) {
|
|
152
|
+
for (let i = 0; i < arr.length; i++) {
|
|
153
|
+
arr[i] = byteSwap(arr[i]);
|
|
154
|
+
}
|
|
155
|
+
return arr;
|
|
156
|
+
}
|
|
157
|
+
var swap32IfBE = isLE ? (u) => u : byteSwap32;
|
|
158
|
+
var hasHexBuiltin = /* @__PURE__ */ (() => (
|
|
159
|
+
// @ts-ignore
|
|
160
|
+
typeof Uint8Array.from([]).toHex === "function" && typeof Uint8Array.fromHex === "function"
|
|
161
|
+
))();
|
|
162
|
+
var hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, "0"));
|
|
163
|
+
function bytesToHex(bytes) {
|
|
164
|
+
abytes(bytes);
|
|
165
|
+
if (hasHexBuiltin)
|
|
166
|
+
return bytes.toHex();
|
|
167
|
+
let hex = "";
|
|
168
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
169
|
+
hex += hexes[bytes[i]];
|
|
170
|
+
}
|
|
171
|
+
return hex;
|
|
172
|
+
}
|
|
173
|
+
var asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };
|
|
174
|
+
function asciiToBase16(ch) {
|
|
175
|
+
if (ch >= asciis._0 && ch <= asciis._9)
|
|
176
|
+
return ch - asciis._0;
|
|
177
|
+
if (ch >= asciis.A && ch <= asciis.F)
|
|
178
|
+
return ch - (asciis.A - 10);
|
|
179
|
+
if (ch >= asciis.a && ch <= asciis.f)
|
|
180
|
+
return ch - (asciis.a - 10);
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
function hexToBytes(hex) {
|
|
184
|
+
if (typeof hex !== "string")
|
|
185
|
+
throw new TypeError("hex string expected, got " + typeof hex);
|
|
186
|
+
if (hasHexBuiltin) {
|
|
187
|
+
try {
|
|
188
|
+
return Uint8Array.fromHex(hex);
|
|
189
|
+
} catch (error) {
|
|
190
|
+
if (error instanceof SyntaxError)
|
|
191
|
+
throw new RangeError(error.message);
|
|
192
|
+
throw error;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
const hl = hex.length;
|
|
196
|
+
const al = hl / 2;
|
|
197
|
+
if (hl % 2)
|
|
198
|
+
throw new RangeError("hex string expected, got unpadded hex of length " + hl);
|
|
199
|
+
const array = new Uint8Array(al);
|
|
200
|
+
for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {
|
|
201
|
+
const n1 = asciiToBase16(hex.charCodeAt(hi));
|
|
202
|
+
const n2 = asciiToBase16(hex.charCodeAt(hi + 1));
|
|
203
|
+
if (n1 === void 0 || n2 === void 0) {
|
|
204
|
+
const char = hex[hi] + hex[hi + 1];
|
|
205
|
+
throw new RangeError('hex string expected, got non-hex character "' + char + '" at index ' + hi);
|
|
206
|
+
}
|
|
207
|
+
array[ai] = n1 * 16 + n2;
|
|
208
|
+
}
|
|
209
|
+
return array;
|
|
210
|
+
}
|
|
211
|
+
function concatBytes(...arrays) {
|
|
212
|
+
let sum = 0;
|
|
213
|
+
for (let i = 0; i < arrays.length; i++) {
|
|
214
|
+
const a = arrays[i];
|
|
215
|
+
abytes(a);
|
|
216
|
+
sum += a.length;
|
|
217
|
+
}
|
|
218
|
+
const res = new Uint8Array(sum);
|
|
219
|
+
for (let i = 0, pad = 0; i < arrays.length; i++) {
|
|
220
|
+
const a = arrays[i];
|
|
221
|
+
res.set(a, pad);
|
|
222
|
+
pad += a.length;
|
|
223
|
+
}
|
|
224
|
+
return res;
|
|
225
|
+
}
|
|
226
|
+
function createHasher(hashCons, info = {}) {
|
|
227
|
+
const hashC = (msg, opts2) => hashCons(opts2).update(msg).digest();
|
|
228
|
+
const tmp = hashCons(void 0);
|
|
229
|
+
hashC.outputLen = tmp.outputLen;
|
|
230
|
+
hashC.blockLen = tmp.blockLen;
|
|
231
|
+
hashC.canXOF = tmp.canXOF;
|
|
232
|
+
hashC.create = (opts2) => hashCons(opts2);
|
|
233
|
+
Object.assign(hashC, info);
|
|
234
|
+
return Object.freeze(hashC);
|
|
235
|
+
}
|
|
236
|
+
function randomBytes(bytesLength = 32) {
|
|
237
|
+
anumber(bytesLength, "bytesLength");
|
|
238
|
+
const cr = typeof globalThis === "object" ? globalThis.crypto : null;
|
|
239
|
+
if (typeof cr?.getRandomValues !== "function")
|
|
240
|
+
throw new Error("crypto.getRandomValues must be defined");
|
|
241
|
+
if (bytesLength > 65536)
|
|
242
|
+
throw new RangeError(`"bytesLength" expected <= 65536, got ${bytesLength}`);
|
|
243
|
+
return cr.getRandomValues(new Uint8Array(bytesLength));
|
|
244
|
+
}
|
|
245
|
+
var oidNist = (suffix) => ({
|
|
246
|
+
// Current NIST hashAlgs suffixes used here fit in one DER subidentifier octet.
|
|
247
|
+
// Larger suffix values would need base-128 OID encoding and a different length byte.
|
|
248
|
+
oid: Uint8Array.from([6, 9, 96, 134, 72, 1, 101, 3, 4, 2, suffix])
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
// node_modules/@noble/hashes/sha3.js
|
|
252
|
+
var _0n = BigInt(0);
|
|
253
|
+
var _1n = BigInt(1);
|
|
254
|
+
var _2n = BigInt(2);
|
|
255
|
+
var _7n = BigInt(7);
|
|
256
|
+
var _256n = BigInt(256);
|
|
257
|
+
var _0x71n = BigInt(113);
|
|
258
|
+
var SHA3_PI = [];
|
|
259
|
+
var SHA3_ROTL = [];
|
|
260
|
+
var _SHA3_IOTA = [];
|
|
261
|
+
for (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {
|
|
262
|
+
[x, y] = [y, (2 * x + 3 * y) % 5];
|
|
263
|
+
SHA3_PI.push(2 * (5 * y + x));
|
|
264
|
+
SHA3_ROTL.push((round + 1) * (round + 2) / 2 % 64);
|
|
265
|
+
let t = _0n;
|
|
266
|
+
for (let j = 0; j < 7; j++) {
|
|
267
|
+
R = (R << _1n ^ (R >> _7n) * _0x71n) % _256n;
|
|
268
|
+
if (R & _2n)
|
|
269
|
+
t ^= _1n << (_1n << BigInt(j)) - _1n;
|
|
270
|
+
}
|
|
271
|
+
_SHA3_IOTA.push(t);
|
|
272
|
+
}
|
|
273
|
+
var IOTAS = split(_SHA3_IOTA, true);
|
|
274
|
+
var SHA3_IOTA_H = IOTAS[0];
|
|
275
|
+
var SHA3_IOTA_L = IOTAS[1];
|
|
276
|
+
var rotlH = (h, l, s) => s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s);
|
|
277
|
+
var rotlL = (h, l, s) => s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s);
|
|
278
|
+
function keccakP(s, rounds = 24) {
|
|
279
|
+
anumber(rounds, "rounds");
|
|
280
|
+
if (rounds < 1 || rounds > 24)
|
|
281
|
+
throw new Error('"rounds" expected integer 1..24');
|
|
282
|
+
const B = new Uint32Array(5 * 2);
|
|
283
|
+
for (let round = 24 - rounds; round < 24; round++) {
|
|
284
|
+
for (let x = 0; x < 10; x++)
|
|
285
|
+
B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];
|
|
286
|
+
for (let x = 0; x < 10; x += 2) {
|
|
287
|
+
const idx1 = (x + 8) % 10;
|
|
288
|
+
const idx0 = (x + 2) % 10;
|
|
289
|
+
const B0 = B[idx0];
|
|
290
|
+
const B1 = B[idx0 + 1];
|
|
291
|
+
const Th = rotlH(B0, B1, 1) ^ B[idx1];
|
|
292
|
+
const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];
|
|
293
|
+
for (let y = 0; y < 50; y += 10) {
|
|
294
|
+
s[x + y] ^= Th;
|
|
295
|
+
s[x + y + 1] ^= Tl;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
let curH = s[2];
|
|
299
|
+
let curL = s[3];
|
|
300
|
+
for (let t = 0; t < 24; t++) {
|
|
301
|
+
const shift = SHA3_ROTL[t];
|
|
302
|
+
const Th = rotlH(curH, curL, shift);
|
|
303
|
+
const Tl = rotlL(curH, curL, shift);
|
|
304
|
+
const PI = SHA3_PI[t];
|
|
305
|
+
curH = s[PI];
|
|
306
|
+
curL = s[PI + 1];
|
|
307
|
+
s[PI] = Th;
|
|
308
|
+
s[PI + 1] = Tl;
|
|
309
|
+
}
|
|
310
|
+
for (let y = 0; y < 50; y += 10) {
|
|
311
|
+
const b0 = s[y], b1 = s[y + 1], b2 = s[y + 2], b3 = s[y + 3];
|
|
312
|
+
s[y] ^= ~s[y + 2] & s[y + 4];
|
|
313
|
+
s[y + 1] ^= ~s[y + 3] & s[y + 5];
|
|
314
|
+
s[y + 2] ^= ~s[y + 4] & s[y + 6];
|
|
315
|
+
s[y + 3] ^= ~s[y + 5] & s[y + 7];
|
|
316
|
+
s[y + 4] ^= ~s[y + 6] & s[y + 8];
|
|
317
|
+
s[y + 5] ^= ~s[y + 7] & s[y + 9];
|
|
318
|
+
s[y + 6] ^= ~s[y + 8] & b0;
|
|
319
|
+
s[y + 7] ^= ~s[y + 9] & b1;
|
|
320
|
+
s[y + 8] ^= ~b0 & b2;
|
|
321
|
+
s[y + 9] ^= ~b1 & b3;
|
|
322
|
+
}
|
|
323
|
+
s[0] ^= SHA3_IOTA_H[round];
|
|
324
|
+
s[1] ^= SHA3_IOTA_L[round];
|
|
325
|
+
}
|
|
326
|
+
clean(B);
|
|
327
|
+
}
|
|
328
|
+
var Keccak = class _Keccak {
|
|
329
|
+
state;
|
|
330
|
+
pos = 0;
|
|
331
|
+
posOut = 0;
|
|
332
|
+
finished = false;
|
|
333
|
+
state32;
|
|
334
|
+
destroyed = false;
|
|
335
|
+
blockLen;
|
|
336
|
+
suffix;
|
|
337
|
+
outputLen;
|
|
338
|
+
canXOF;
|
|
339
|
+
enableXOF = false;
|
|
340
|
+
rounds;
|
|
341
|
+
// NOTE: we accept arguments in bytes instead of bits here.
|
|
342
|
+
constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) {
|
|
343
|
+
this.blockLen = blockLen;
|
|
344
|
+
this.suffix = suffix;
|
|
345
|
+
this.outputLen = outputLen;
|
|
346
|
+
this.enableXOF = enableXOF;
|
|
347
|
+
this.canXOF = enableXOF;
|
|
348
|
+
this.rounds = rounds;
|
|
349
|
+
anumber(outputLen, "outputLen");
|
|
350
|
+
if (!(0 < blockLen && blockLen < 200))
|
|
351
|
+
throw new Error("only keccak-f1600 function is supported");
|
|
352
|
+
this.state = new Uint8Array(200);
|
|
353
|
+
this.state32 = u32(this.state);
|
|
354
|
+
}
|
|
355
|
+
clone() {
|
|
356
|
+
return this._cloneInto();
|
|
357
|
+
}
|
|
358
|
+
keccak() {
|
|
359
|
+
swap32IfBE(this.state32);
|
|
360
|
+
keccakP(this.state32, this.rounds);
|
|
361
|
+
swap32IfBE(this.state32);
|
|
362
|
+
this.posOut = 0;
|
|
363
|
+
this.pos = 0;
|
|
364
|
+
}
|
|
365
|
+
update(data) {
|
|
366
|
+
aexists(this);
|
|
367
|
+
abytes(data);
|
|
368
|
+
const { blockLen, state } = this;
|
|
369
|
+
const len = data.length;
|
|
370
|
+
for (let pos = 0; pos < len; ) {
|
|
371
|
+
const take = Math.min(blockLen - this.pos, len - pos);
|
|
372
|
+
for (let i = 0; i < take; i++)
|
|
373
|
+
state[this.pos++] ^= data[pos++];
|
|
374
|
+
if (this.pos === blockLen)
|
|
375
|
+
this.keccak();
|
|
376
|
+
}
|
|
377
|
+
return this;
|
|
378
|
+
}
|
|
379
|
+
finish() {
|
|
380
|
+
if (this.finished)
|
|
381
|
+
return;
|
|
382
|
+
this.finished = true;
|
|
383
|
+
const { state, suffix, pos, blockLen } = this;
|
|
384
|
+
state[pos] ^= suffix;
|
|
385
|
+
if ((suffix & 128) !== 0 && pos === blockLen - 1)
|
|
386
|
+
this.keccak();
|
|
387
|
+
state[blockLen - 1] ^= 128;
|
|
388
|
+
this.keccak();
|
|
389
|
+
}
|
|
390
|
+
writeInto(out) {
|
|
391
|
+
aexists(this, false);
|
|
392
|
+
abytes(out);
|
|
393
|
+
this.finish();
|
|
394
|
+
const bufferOut = this.state;
|
|
395
|
+
const { blockLen } = this;
|
|
396
|
+
for (let pos = 0, len = out.length; pos < len; ) {
|
|
397
|
+
if (this.posOut >= blockLen)
|
|
398
|
+
this.keccak();
|
|
399
|
+
const take = Math.min(blockLen - this.posOut, len - pos);
|
|
400
|
+
out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);
|
|
401
|
+
this.posOut += take;
|
|
402
|
+
pos += take;
|
|
403
|
+
}
|
|
404
|
+
return out;
|
|
405
|
+
}
|
|
406
|
+
xofInto(out) {
|
|
407
|
+
if (!this.enableXOF)
|
|
408
|
+
throw new Error("XOF is not possible for this instance");
|
|
409
|
+
return this.writeInto(out);
|
|
410
|
+
}
|
|
411
|
+
xof(bytes) {
|
|
412
|
+
anumber(bytes);
|
|
413
|
+
return this.xofInto(new Uint8Array(bytes));
|
|
414
|
+
}
|
|
415
|
+
digestInto(out) {
|
|
416
|
+
aoutput(out, this);
|
|
417
|
+
if (this.finished)
|
|
418
|
+
throw new Error("digest() was already called");
|
|
419
|
+
this.writeInto(out.subarray(0, this.outputLen));
|
|
420
|
+
this.destroy();
|
|
421
|
+
}
|
|
422
|
+
digest() {
|
|
423
|
+
const out = new Uint8Array(this.outputLen);
|
|
424
|
+
this.digestInto(out);
|
|
425
|
+
return out;
|
|
426
|
+
}
|
|
427
|
+
destroy() {
|
|
428
|
+
this.destroyed = true;
|
|
429
|
+
clean(this.state);
|
|
430
|
+
}
|
|
431
|
+
_cloneInto(to) {
|
|
432
|
+
const { blockLen, suffix, outputLen, rounds, enableXOF } = this;
|
|
433
|
+
to ||= new _Keccak(blockLen, suffix, outputLen, enableXOF, rounds);
|
|
434
|
+
to.blockLen = blockLen;
|
|
435
|
+
to.state32.set(this.state32);
|
|
436
|
+
to.pos = this.pos;
|
|
437
|
+
to.posOut = this.posOut;
|
|
438
|
+
to.finished = this.finished;
|
|
439
|
+
to.rounds = rounds;
|
|
440
|
+
to.suffix = suffix;
|
|
441
|
+
to.outputLen = outputLen;
|
|
442
|
+
to.enableXOF = enableXOF;
|
|
443
|
+
to.canXOF = this.canXOF;
|
|
444
|
+
to.destroyed = this.destroyed;
|
|
445
|
+
return to;
|
|
446
|
+
}
|
|
447
|
+
};
|
|
448
|
+
var genKeccak = (suffix, blockLen, outputLen, info = {}) => createHasher(() => new Keccak(blockLen, suffix, outputLen), info);
|
|
449
|
+
var sha3_256 = /* @__PURE__ */ genKeccak(
|
|
450
|
+
6,
|
|
451
|
+
136,
|
|
452
|
+
32,
|
|
453
|
+
/* @__PURE__ */ oidNist(8)
|
|
454
|
+
);
|
|
455
|
+
var sha3_512 = /* @__PURE__ */ genKeccak(
|
|
456
|
+
6,
|
|
457
|
+
72,
|
|
458
|
+
64,
|
|
459
|
+
/* @__PURE__ */ oidNist(10)
|
|
460
|
+
);
|
|
461
|
+
var genShake = (suffix, blockLen, outputLen, info = {}) => createHasher((opts2 = {}) => new Keccak(blockLen, suffix, opts2.dkLen === void 0 ? outputLen : opts2.dkLen, true), info);
|
|
462
|
+
var shake128 = /* @__PURE__ */ genShake(31, 168, 16, /* @__PURE__ */ oidNist(11));
|
|
463
|
+
var shake256 = /* @__PURE__ */ genShake(31, 136, 32, /* @__PURE__ */ oidNist(12));
|
|
464
|
+
|
|
465
|
+
// node_modules/@noble/curves/abstract/fft.js
|
|
466
|
+
function checkU32(n) {
|
|
467
|
+
if (!Number.isSafeInteger(n) || n < 0 || n > 4294967295)
|
|
468
|
+
throw new Error("wrong u32 integer:" + n);
|
|
469
|
+
return n;
|
|
470
|
+
}
|
|
471
|
+
function isPowerOfTwo(x) {
|
|
472
|
+
checkU32(x);
|
|
473
|
+
return (x & x - 1) === 0 && x !== 0;
|
|
474
|
+
}
|
|
475
|
+
function reverseBits(n, bits) {
|
|
476
|
+
checkU32(n);
|
|
477
|
+
if (!Number.isSafeInteger(bits) || bits < 0 || bits > 32)
|
|
478
|
+
throw new Error(`expected integer 0 <= bits <= 32, got ${bits}`);
|
|
479
|
+
let reversed = 0;
|
|
480
|
+
for (let i = 0; i < bits; i++, n >>>= 1)
|
|
481
|
+
reversed = reversed << 1 | n & 1;
|
|
482
|
+
return reversed >>> 0;
|
|
483
|
+
}
|
|
484
|
+
function log2(n) {
|
|
485
|
+
checkU32(n);
|
|
486
|
+
return 31 - Math.clz32(n);
|
|
487
|
+
}
|
|
488
|
+
function bitReversalInplace(values) {
|
|
489
|
+
const n = values.length;
|
|
490
|
+
if (!isPowerOfTwo(n))
|
|
491
|
+
throw new Error("expected positive power-of-two length, got " + n);
|
|
492
|
+
const bits = log2(n);
|
|
493
|
+
for (let i = 0; i < n; i++) {
|
|
494
|
+
const j = reverseBits(i, bits);
|
|
495
|
+
if (i < j) {
|
|
496
|
+
const tmp = values[i];
|
|
497
|
+
values[i] = values[j];
|
|
498
|
+
values[j] = tmp;
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
return values;
|
|
502
|
+
}
|
|
503
|
+
var FFTCore = (F3, coreOpts) => {
|
|
504
|
+
const { N: N3, roots, dit, invertButterflies = false, skipStages = 0, brp = true } = coreOpts;
|
|
505
|
+
const bits = log2(N3);
|
|
506
|
+
if (!isPowerOfTwo(N3))
|
|
507
|
+
throw new Error("FFT: Polynomial size should be power of two");
|
|
508
|
+
if (roots.length !== N3)
|
|
509
|
+
throw new Error(`FFT: wrong roots length: expected ${N3}, got ${roots.length}`);
|
|
510
|
+
const isDit = dit !== invertButterflies;
|
|
511
|
+
isDit;
|
|
512
|
+
return (values) => {
|
|
513
|
+
if (values.length !== N3)
|
|
514
|
+
throw new Error("FFT: wrong Polynomial length");
|
|
515
|
+
if (dit && brp)
|
|
516
|
+
bitReversalInplace(values);
|
|
517
|
+
for (let i = 0, g = 1; i < bits - skipStages; i++) {
|
|
518
|
+
const s = dit ? i + 1 + skipStages : bits - i;
|
|
519
|
+
const m = 1 << s;
|
|
520
|
+
const m2 = m >> 1;
|
|
521
|
+
const stride = N3 >> s;
|
|
522
|
+
for (let k = 0; k < N3; k += m) {
|
|
523
|
+
for (let j = 0, grp = g++; j < m2; j++) {
|
|
524
|
+
const rootPos = invertButterflies ? dit ? N3 - grp : grp : j * stride;
|
|
525
|
+
const i0 = k + j;
|
|
526
|
+
const i1 = k + j + m2;
|
|
527
|
+
const omega = roots[rootPos];
|
|
528
|
+
const b = values[i1];
|
|
529
|
+
const a = values[i0];
|
|
530
|
+
if (isDit) {
|
|
531
|
+
const t = F3.mul(b, omega);
|
|
532
|
+
values[i0] = F3.add(a, t);
|
|
533
|
+
values[i1] = F3.sub(a, t);
|
|
534
|
+
} else if (invertButterflies) {
|
|
535
|
+
values[i0] = F3.add(b, a);
|
|
536
|
+
values[i1] = F3.mul(F3.sub(b, a), omega);
|
|
537
|
+
} else {
|
|
538
|
+
values[i0] = F3.add(a, b);
|
|
539
|
+
values[i1] = F3.mul(F3.sub(a, b), omega);
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
if (!dit && brp)
|
|
545
|
+
bitReversalInplace(values);
|
|
546
|
+
return values;
|
|
547
|
+
};
|
|
548
|
+
};
|
|
549
|
+
|
|
550
|
+
// node_modules/@noble/post-quantum/utils.js
|
|
551
|
+
var abytesDoc = abytes;
|
|
552
|
+
var randomBytes2 = randomBytes;
|
|
553
|
+
function equalBytes(a, b) {
|
|
554
|
+
if (a.length !== b.length)
|
|
555
|
+
return false;
|
|
556
|
+
let diff = 0;
|
|
557
|
+
for (let i = 0; i < a.length; i++)
|
|
558
|
+
diff |= a[i] ^ b[i];
|
|
559
|
+
return diff === 0;
|
|
560
|
+
}
|
|
561
|
+
function copyBytes(bytes) {
|
|
562
|
+
return Uint8Array.from(abytes(bytes));
|
|
563
|
+
}
|
|
564
|
+
function validateOpts(opts2) {
|
|
565
|
+
if (Object.prototype.toString.call(opts2) !== "[object Object]")
|
|
566
|
+
throw new TypeError("expected valid options object");
|
|
567
|
+
}
|
|
568
|
+
function validateVerOpts(opts2) {
|
|
569
|
+
validateOpts(opts2);
|
|
570
|
+
if (opts2.context !== void 0)
|
|
571
|
+
abytes(opts2.context, void 0, "opts.context");
|
|
572
|
+
}
|
|
573
|
+
function validateSigOpts(opts2) {
|
|
574
|
+
validateVerOpts(opts2);
|
|
575
|
+
if (opts2.extraEntropy !== false && opts2.extraEntropy !== void 0)
|
|
576
|
+
abytes(opts2.extraEntropy, void 0, "opts.extraEntropy");
|
|
577
|
+
}
|
|
578
|
+
function splitCoder(label, ...lengths) {
|
|
579
|
+
const getLength = (c) => typeof c === "number" ? c : c.bytesLen;
|
|
580
|
+
const bytesLen = lengths.reduce((sum, a) => sum + getLength(a), 0);
|
|
581
|
+
return {
|
|
582
|
+
bytesLen,
|
|
583
|
+
encode: (bufs) => {
|
|
584
|
+
const res = new Uint8Array(bytesLen);
|
|
585
|
+
for (let i = 0, pos = 0; i < lengths.length; i++) {
|
|
586
|
+
const c = lengths[i];
|
|
587
|
+
const l = getLength(c);
|
|
588
|
+
const b = typeof c === "number" ? bufs[i] : c.encode(bufs[i]);
|
|
589
|
+
abytes(b, l, label);
|
|
590
|
+
res.set(b, pos);
|
|
591
|
+
if (typeof c !== "number")
|
|
592
|
+
b.fill(0);
|
|
593
|
+
pos += l;
|
|
594
|
+
}
|
|
595
|
+
return res;
|
|
596
|
+
},
|
|
597
|
+
decode: (buf) => {
|
|
598
|
+
abytes(buf, bytesLen, label);
|
|
599
|
+
const res = [];
|
|
600
|
+
for (const c of lengths) {
|
|
601
|
+
const l = getLength(c);
|
|
602
|
+
const b = buf.subarray(0, l);
|
|
603
|
+
res.push(typeof c === "number" ? b : c.decode(b));
|
|
604
|
+
buf = buf.subarray(l);
|
|
605
|
+
}
|
|
606
|
+
return res;
|
|
607
|
+
}
|
|
608
|
+
};
|
|
609
|
+
}
|
|
610
|
+
function vecCoder(c, vecLen) {
|
|
611
|
+
const coder = c;
|
|
612
|
+
const bytesLen = vecLen * coder.bytesLen;
|
|
613
|
+
return {
|
|
614
|
+
bytesLen,
|
|
615
|
+
encode: (u) => {
|
|
616
|
+
if (u.length !== vecLen)
|
|
617
|
+
throw new RangeError(`vecCoder.encode: wrong length=${u.length}. Expected: ${vecLen}`);
|
|
618
|
+
const res = new Uint8Array(bytesLen);
|
|
619
|
+
for (let i = 0, pos = 0; i < u.length; i++) {
|
|
620
|
+
const b = coder.encode(u[i]);
|
|
621
|
+
res.set(b, pos);
|
|
622
|
+
b.fill(0);
|
|
623
|
+
pos += b.length;
|
|
624
|
+
}
|
|
625
|
+
return res;
|
|
626
|
+
},
|
|
627
|
+
decode: (a) => {
|
|
628
|
+
abytes(a, bytesLen);
|
|
629
|
+
const r = [];
|
|
630
|
+
for (let i = 0; i < a.length; i += coder.bytesLen)
|
|
631
|
+
r.push(coder.decode(a.subarray(i, i + coder.bytesLen)));
|
|
632
|
+
return r;
|
|
633
|
+
}
|
|
634
|
+
};
|
|
635
|
+
}
|
|
636
|
+
function cleanBytes(...list) {
|
|
637
|
+
for (const t of list) {
|
|
638
|
+
if (Array.isArray(t))
|
|
639
|
+
for (const b of t)
|
|
640
|
+
b.fill(0);
|
|
641
|
+
else
|
|
642
|
+
t.fill(0);
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
function getMask(bits) {
|
|
646
|
+
if (!Number.isSafeInteger(bits) || bits < 0 || bits > 32)
|
|
647
|
+
throw new RangeError(`expected bits in [0..32], got ${bits}`);
|
|
648
|
+
return bits === 32 ? 4294967295 : ~(-1 << bits) >>> 0;
|
|
649
|
+
}
|
|
650
|
+
var EMPTY = /* @__PURE__ */ Uint8Array.of();
|
|
651
|
+
function getMessage(msg, ctx = EMPTY) {
|
|
652
|
+
abytes(msg);
|
|
653
|
+
abytes(ctx);
|
|
654
|
+
if (ctx.length > 255)
|
|
655
|
+
throw new RangeError("context should be 255 bytes or less");
|
|
656
|
+
return concatBytes(new Uint8Array([0, ctx.length]), ctx, msg);
|
|
657
|
+
}
|
|
658
|
+
var oidNistP = /* @__PURE__ */ Uint8Array.from([6, 9, 96, 134, 72, 1, 101, 3, 4, 2]);
|
|
659
|
+
function checkHash(hash, requiredStrength = 0) {
|
|
660
|
+
if (!hash.oid || !equalBytes(hash.oid.subarray(0, 10), oidNistP))
|
|
661
|
+
throw new Error("hash.oid is invalid: expected NIST hash");
|
|
662
|
+
const collisionResistance = hash.outputLen * 8 / 2;
|
|
663
|
+
if (requiredStrength > collisionResistance) {
|
|
664
|
+
throw new Error("Pre-hash security strength too low: " + collisionResistance + ", required: " + requiredStrength);
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
function getMessagePrehash(hash, msg, ctx = EMPTY) {
|
|
668
|
+
abytes(msg);
|
|
669
|
+
abytes(ctx);
|
|
670
|
+
if (ctx.length > 255)
|
|
671
|
+
throw new RangeError("context should be 255 bytes or less");
|
|
672
|
+
const hashed = hash(msg);
|
|
673
|
+
return concatBytes(new Uint8Array([1, ctx.length]), ctx, hash.oid, hashed);
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
// node_modules/@noble/post-quantum/_crystals.js
|
|
677
|
+
var genCrystals = (opts2) => {
|
|
678
|
+
const { newPoly: newPoly2, N: N3, Q: Q3, F: F3, ROOT_OF_UNITY: ROOT_OF_UNITY3, brvBits, isKyber } = opts2;
|
|
679
|
+
const mod = (a, modulo = Q3) => {
|
|
680
|
+
const result = a % modulo | 0;
|
|
681
|
+
return (result >= 0 ? result | 0 : modulo + result | 0) | 0;
|
|
682
|
+
};
|
|
683
|
+
const smod = (a, modulo = Q3) => {
|
|
684
|
+
const r = mod(a, modulo) | 0;
|
|
685
|
+
return (r > modulo >> 1 ? r - modulo | 0 : r) | 0;
|
|
686
|
+
};
|
|
687
|
+
function getZettas() {
|
|
688
|
+
const out = newPoly2(N3);
|
|
689
|
+
for (let i = 0; i < N3; i++) {
|
|
690
|
+
const b = reverseBits(i, brvBits);
|
|
691
|
+
const p = BigInt(ROOT_OF_UNITY3) ** BigInt(b) % BigInt(Q3);
|
|
692
|
+
out[i] = Number(p) | 0;
|
|
693
|
+
}
|
|
694
|
+
return out;
|
|
695
|
+
}
|
|
696
|
+
const nttZetas = getZettas();
|
|
697
|
+
const field = {
|
|
698
|
+
add: (a, b) => mod((a | 0) + (b | 0)) | 0,
|
|
699
|
+
sub: (a, b) => mod((a | 0) - (b | 0)) | 0,
|
|
700
|
+
mul: (a, b) => mod((a | 0) * (b | 0)) | 0,
|
|
701
|
+
inv: (_a) => {
|
|
702
|
+
throw new Error("not implemented");
|
|
703
|
+
}
|
|
704
|
+
};
|
|
705
|
+
const nttOpts = {
|
|
706
|
+
N: N3,
|
|
707
|
+
roots: nttZetas,
|
|
708
|
+
invertButterflies: true,
|
|
709
|
+
skipStages: isKyber ? 1 : 0,
|
|
710
|
+
brp: false
|
|
711
|
+
};
|
|
712
|
+
const dif = FFTCore(field, { dit: false, ...nttOpts });
|
|
713
|
+
const dit = FFTCore(field, { dit: true, ...nttOpts });
|
|
714
|
+
const NTT = {
|
|
715
|
+
encode: (r) => {
|
|
716
|
+
return dif(r);
|
|
717
|
+
},
|
|
718
|
+
decode: (r) => {
|
|
719
|
+
dit(r);
|
|
720
|
+
for (let i = 0; i < r.length; i++)
|
|
721
|
+
r[i] = mod(F3 * r[i]);
|
|
722
|
+
return r;
|
|
723
|
+
}
|
|
724
|
+
};
|
|
725
|
+
const bitsCoder = (d, c) => {
|
|
726
|
+
const mask = getMask(d);
|
|
727
|
+
const bytesLen = d * (N3 / 8);
|
|
728
|
+
return {
|
|
729
|
+
bytesLen,
|
|
730
|
+
encode: (poly_) => {
|
|
731
|
+
const poly = poly_;
|
|
732
|
+
const r = new Uint8Array(bytesLen);
|
|
733
|
+
for (let i = 0, buf = 0, bufLen = 0, pos = 0; i < poly.length; i++) {
|
|
734
|
+
buf |= (c.encode(poly[i]) & mask) << bufLen;
|
|
735
|
+
bufLen += d;
|
|
736
|
+
for (; bufLen >= 8; bufLen -= 8, buf >>= 8)
|
|
737
|
+
r[pos++] = buf & getMask(bufLen);
|
|
738
|
+
}
|
|
739
|
+
return r;
|
|
740
|
+
},
|
|
741
|
+
decode: (bytes) => {
|
|
742
|
+
const r = newPoly2(N3);
|
|
743
|
+
for (let i = 0, buf = 0, bufLen = 0, pos = 0; i < bytes.length; i++) {
|
|
744
|
+
buf |= bytes[i] << bufLen;
|
|
745
|
+
bufLen += 8;
|
|
746
|
+
for (; bufLen >= d; bufLen -= d, buf >>= d)
|
|
747
|
+
r[pos++] = c.decode(buf & mask);
|
|
748
|
+
}
|
|
749
|
+
return r;
|
|
750
|
+
}
|
|
751
|
+
};
|
|
752
|
+
};
|
|
753
|
+
return {
|
|
754
|
+
mod,
|
|
755
|
+
smod,
|
|
756
|
+
nttZetas,
|
|
757
|
+
NTT: {
|
|
758
|
+
encode: (r) => NTT.encode(r),
|
|
759
|
+
decode: (r) => NTT.decode(r)
|
|
760
|
+
},
|
|
761
|
+
bitsCoder
|
|
762
|
+
};
|
|
763
|
+
};
|
|
764
|
+
var createXofShake = (shake) => (seed, blockLen) => {
|
|
765
|
+
if (!blockLen)
|
|
766
|
+
blockLen = shake.blockLen;
|
|
767
|
+
const _seed = new Uint8Array(seed.length + 2);
|
|
768
|
+
_seed.set(seed);
|
|
769
|
+
const seedLen = seed.length;
|
|
770
|
+
const buf = new Uint8Array(blockLen);
|
|
771
|
+
let h = shake.create({});
|
|
772
|
+
let calls = 0;
|
|
773
|
+
let xofs = 0;
|
|
774
|
+
return {
|
|
775
|
+
stats: () => ({ calls, xofs }),
|
|
776
|
+
get: (x, y) => {
|
|
777
|
+
_seed[seedLen + 0] = x;
|
|
778
|
+
_seed[seedLen + 1] = y;
|
|
779
|
+
h.destroy();
|
|
780
|
+
h = shake.create({}).update(_seed);
|
|
781
|
+
calls++;
|
|
782
|
+
return () => {
|
|
783
|
+
xofs++;
|
|
784
|
+
return h.xofInto(buf);
|
|
785
|
+
};
|
|
786
|
+
},
|
|
787
|
+
clean: () => {
|
|
788
|
+
h.destroy();
|
|
789
|
+
cleanBytes(buf, _seed);
|
|
790
|
+
}
|
|
791
|
+
};
|
|
792
|
+
};
|
|
793
|
+
var XOF128 = /* @__PURE__ */ createXofShake(shake128);
|
|
794
|
+
var XOF256 = /* @__PURE__ */ createXofShake(shake256);
|
|
795
|
+
|
|
796
|
+
// node_modules/@noble/post-quantum/ml-kem.js
|
|
797
|
+
var N = 256;
|
|
798
|
+
var Q = 3329;
|
|
799
|
+
var F = 3303;
|
|
800
|
+
var ROOT_OF_UNITY = 17;
|
|
801
|
+
var crystals = /* @__PURE__ */ genCrystals({
|
|
802
|
+
N,
|
|
803
|
+
Q,
|
|
804
|
+
F,
|
|
805
|
+
ROOT_OF_UNITY,
|
|
806
|
+
newPoly: (n) => new Uint16Array(n),
|
|
807
|
+
brvBits: 7,
|
|
808
|
+
isKyber: true
|
|
809
|
+
});
|
|
810
|
+
var PARAMS = /* @__PURE__ */ (() => Object.freeze({
|
|
811
|
+
512: Object.freeze({ N, Q, K: 2, ETA1: 3, ETA2: 2, du: 10, dv: 4, RBGstrength: 128 }),
|
|
812
|
+
768: Object.freeze({ N, Q, K: 3, ETA1: 2, ETA2: 2, du: 10, dv: 4, RBGstrength: 192 }),
|
|
813
|
+
1024: Object.freeze({ N, Q, K: 4, ETA1: 2, ETA2: 2, du: 11, dv: 5, RBGstrength: 256 })
|
|
814
|
+
}))();
|
|
815
|
+
var compress = (d) => {
|
|
816
|
+
if (d >= 12)
|
|
817
|
+
return { encode: (i) => i, decode: (i) => i >= Q ? i - Q : i };
|
|
818
|
+
const a = 2 ** (d - 1);
|
|
819
|
+
return {
|
|
820
|
+
// This only matches standalone Compress_d after bitsCoder masks the result into Z_(2^d).
|
|
821
|
+
encode: (i) => ((i << d) + Q / 2) / Q,
|
|
822
|
+
// const decompress = (i: number) => round((Q / 2 ** d) * i);
|
|
823
|
+
decode: (i) => i * Q + a >>> d
|
|
824
|
+
};
|
|
825
|
+
};
|
|
826
|
+
var byteCoder = (d) => crystals.bitsCoder(d, d === 12 ? { encode: (i) => i, decode: (i) => i >= Q ? i - Q : i } : { encode: (i) => i, decode: (i) => i });
|
|
827
|
+
var polyCoder = (d) => d === 12 ? byteCoder(12) : crystals.bitsCoder(d, compress(d));
|
|
828
|
+
function polyAdd(a_, b_) {
|
|
829
|
+
const a = a_;
|
|
830
|
+
const b = b_;
|
|
831
|
+
for (let i = 0; i < N; i++)
|
|
832
|
+
a[i] = crystals.mod(a[i] + b[i]);
|
|
833
|
+
}
|
|
834
|
+
function polySub(a_, b_) {
|
|
835
|
+
const a = a_;
|
|
836
|
+
const b = b_;
|
|
837
|
+
for (let i = 0; i < N; i++)
|
|
838
|
+
a[i] = crystals.mod(a[i] - b[i]);
|
|
839
|
+
}
|
|
840
|
+
function BaseCaseMultiply(a0, a1, b0, b1, zeta) {
|
|
841
|
+
const c0 = crystals.mod(a1 * b1 * zeta + a0 * b0);
|
|
842
|
+
const c1 = crystals.mod(a0 * b1 + a1 * b0);
|
|
843
|
+
return { c0, c1 };
|
|
844
|
+
}
|
|
845
|
+
function MultiplyNTTs(f_, g_) {
|
|
846
|
+
const f = f_;
|
|
847
|
+
const g = g_;
|
|
848
|
+
for (let i = 0; i < N / 2; i++) {
|
|
849
|
+
let z = crystals.nttZetas[64 + (i >> 1)];
|
|
850
|
+
if (i & 1)
|
|
851
|
+
z = -z;
|
|
852
|
+
const { c0, c1 } = BaseCaseMultiply(f[2 * i + 0], f[2 * i + 1], g[2 * i + 0], g[2 * i + 1], z);
|
|
853
|
+
f[2 * i + 0] = c0;
|
|
854
|
+
f[2 * i + 1] = c1;
|
|
855
|
+
}
|
|
856
|
+
return f;
|
|
857
|
+
}
|
|
858
|
+
function SampleNTT(xof_) {
|
|
859
|
+
const xof = xof_;
|
|
860
|
+
const r = new Uint16Array(N);
|
|
861
|
+
for (let j = 0; j < N; ) {
|
|
862
|
+
const b = xof();
|
|
863
|
+
if (b.length % 3)
|
|
864
|
+
throw new Error("SampleNTT: unaligned block");
|
|
865
|
+
for (let i = 0; j < N && i + 3 <= b.length; i += 3) {
|
|
866
|
+
const d1 = (b[i + 0] >> 0 | b[i + 1] << 8) & 4095;
|
|
867
|
+
const d2 = (b[i + 1] >> 4 | b[i + 2] << 4) & 4095;
|
|
868
|
+
if (d1 < Q)
|
|
869
|
+
r[j++] = d1;
|
|
870
|
+
if (j < N && d2 < Q)
|
|
871
|
+
r[j++] = d2;
|
|
872
|
+
}
|
|
873
|
+
}
|
|
874
|
+
return r;
|
|
875
|
+
}
|
|
876
|
+
var sampleCBDBytes = (buf, eta) => {
|
|
877
|
+
const r = new Uint16Array(N);
|
|
878
|
+
const b32 = u32(buf);
|
|
879
|
+
swap32IfBE(b32);
|
|
880
|
+
let len = 0;
|
|
881
|
+
for (let i = 0, p = 0, bb = 0, t0 = 0; i < b32.length; i++) {
|
|
882
|
+
let b = b32[i];
|
|
883
|
+
for (let j = 0; j < 32; j++) {
|
|
884
|
+
bb += b & 1;
|
|
885
|
+
b >>= 1;
|
|
886
|
+
len += 1;
|
|
887
|
+
if (len === eta) {
|
|
888
|
+
t0 = bb;
|
|
889
|
+
bb = 0;
|
|
890
|
+
} else if (len === 2 * eta) {
|
|
891
|
+
r[p++] = crystals.mod(t0 - bb);
|
|
892
|
+
bb = 0;
|
|
893
|
+
len = 0;
|
|
894
|
+
}
|
|
895
|
+
}
|
|
896
|
+
}
|
|
897
|
+
swap32IfBE(b32);
|
|
898
|
+
if (len)
|
|
899
|
+
throw new Error(`sampleCBD: leftover bits: ${len}`);
|
|
900
|
+
return r;
|
|
901
|
+
};
|
|
902
|
+
function sampleCBD(PRF_, seed, nonce, eta) {
|
|
903
|
+
const PRF = PRF_;
|
|
904
|
+
return sampleCBDBytes(PRF(eta * N / 4, seed, nonce), eta);
|
|
905
|
+
}
|
|
906
|
+
var genKPKE = (opts_) => {
|
|
907
|
+
const opts2 = opts_;
|
|
908
|
+
const { K, PRF, XOF, HASH512, ETA1, ETA2, du, dv } = opts2;
|
|
909
|
+
const poly1 = polyCoder(1);
|
|
910
|
+
const polyV = polyCoder(dv);
|
|
911
|
+
const polyU = polyCoder(du);
|
|
912
|
+
const publicCoder = splitCoder("publicKey", vecCoder(polyCoder(12), K), 32);
|
|
913
|
+
const secretCoder = vecCoder(polyCoder(12), K);
|
|
914
|
+
const cipherCoder = splitCoder("ciphertext", vecCoder(polyU, K), polyV);
|
|
915
|
+
const seedCoder = splitCoder("seed", 32, 32);
|
|
916
|
+
return {
|
|
917
|
+
secretCoder,
|
|
918
|
+
lengths: {
|
|
919
|
+
secretKey: secretCoder.bytesLen,
|
|
920
|
+
publicKey: publicCoder.bytesLen,
|
|
921
|
+
cipherText: cipherCoder.bytesLen
|
|
922
|
+
},
|
|
923
|
+
keygen: (seed) => {
|
|
924
|
+
abytesDoc(seed, 32, "seed");
|
|
925
|
+
const seedDst = new Uint8Array(33);
|
|
926
|
+
seedDst.set(seed);
|
|
927
|
+
seedDst[32] = K;
|
|
928
|
+
const seedHash = HASH512(seedDst);
|
|
929
|
+
const [rho, sigma] = seedCoder.decode(seedHash);
|
|
930
|
+
const sHat = [];
|
|
931
|
+
const tHat = [];
|
|
932
|
+
for (let i = 0; i < K; i++)
|
|
933
|
+
sHat.push(crystals.NTT.encode(sampleCBD(PRF, sigma, i, ETA1)));
|
|
934
|
+
const x = XOF(rho);
|
|
935
|
+
for (let i = 0; i < K; i++) {
|
|
936
|
+
const e = crystals.NTT.encode(sampleCBD(PRF, sigma, K + i, ETA1));
|
|
937
|
+
for (let j = 0; j < K; j++) {
|
|
938
|
+
const aji = SampleNTT(x.get(j, i));
|
|
939
|
+
polyAdd(e, MultiplyNTTs(aji, sHat[j]));
|
|
940
|
+
}
|
|
941
|
+
tHat.push(e);
|
|
942
|
+
}
|
|
943
|
+
x.clean();
|
|
944
|
+
const res = {
|
|
945
|
+
publicKey: publicCoder.encode([tHat, rho]),
|
|
946
|
+
secretKey: secretCoder.encode(sHat)
|
|
947
|
+
};
|
|
948
|
+
cleanBytes(rho, sigma, sHat, tHat, seedDst, seedHash);
|
|
949
|
+
return res;
|
|
950
|
+
},
|
|
951
|
+
encrypt: (publicKey, msg, seed) => {
|
|
952
|
+
const [tHat, rho] = publicCoder.decode(publicKey);
|
|
953
|
+
const rHat = [];
|
|
954
|
+
for (let i = 0; i < K; i++)
|
|
955
|
+
rHat.push(crystals.NTT.encode(sampleCBD(PRF, seed, i, ETA1)));
|
|
956
|
+
const x = XOF(rho);
|
|
957
|
+
const tmp2 = new Uint16Array(N);
|
|
958
|
+
const u = [];
|
|
959
|
+
for (let i = 0; i < K; i++) {
|
|
960
|
+
const e1 = sampleCBD(PRF, seed, K + i, ETA2);
|
|
961
|
+
const tmp = new Uint16Array(N);
|
|
962
|
+
for (let j = 0; j < K; j++) {
|
|
963
|
+
const aij = SampleNTT(x.get(i, j));
|
|
964
|
+
polyAdd(tmp, MultiplyNTTs(aij, rHat[j]));
|
|
965
|
+
}
|
|
966
|
+
polyAdd(e1, crystals.NTT.decode(tmp));
|
|
967
|
+
u.push(e1);
|
|
968
|
+
polyAdd(tmp2, MultiplyNTTs(tHat[i], rHat[i]));
|
|
969
|
+
cleanBytes(tmp);
|
|
970
|
+
}
|
|
971
|
+
x.clean();
|
|
972
|
+
const e2 = sampleCBD(PRF, seed, 2 * K, ETA2);
|
|
973
|
+
polyAdd(e2, crystals.NTT.decode(tmp2));
|
|
974
|
+
const v = poly1.decode(msg);
|
|
975
|
+
polyAdd(v, e2);
|
|
976
|
+
cleanBytes(tHat, rHat, tmp2, e2);
|
|
977
|
+
return cipherCoder.encode([u, v]);
|
|
978
|
+
},
|
|
979
|
+
decrypt: (cipherText, privateKey) => {
|
|
980
|
+
const [u, v] = cipherCoder.decode(cipherText);
|
|
981
|
+
const sk = secretCoder.decode(privateKey);
|
|
982
|
+
const tmp = new Uint16Array(N);
|
|
983
|
+
for (let i = 0; i < K; i++)
|
|
984
|
+
polyAdd(tmp, MultiplyNTTs(sk[i], crystals.NTT.encode(u[i])));
|
|
985
|
+
polySub(v, crystals.NTT.decode(tmp));
|
|
986
|
+
cleanBytes(tmp, sk, u);
|
|
987
|
+
return poly1.encode(v);
|
|
988
|
+
}
|
|
989
|
+
};
|
|
990
|
+
};
|
|
991
|
+
function createKyber(opts2) {
|
|
992
|
+
const rawOpts = opts2;
|
|
993
|
+
const KPKE = genKPKE(rawOpts);
|
|
994
|
+
const { HASH256, HASH512, KDF } = rawOpts;
|
|
995
|
+
const { secretCoder: KPKESecretCoder, lengths } = KPKE;
|
|
996
|
+
const secretCoder = splitCoder("secretKey", lengths.secretKey, lengths.publicKey, 32, 32);
|
|
997
|
+
const msgLen = 32;
|
|
998
|
+
const seedLen = 64;
|
|
999
|
+
const kemLengths = Object.freeze({
|
|
1000
|
+
...lengths,
|
|
1001
|
+
seed: 64,
|
|
1002
|
+
msg: msgLen,
|
|
1003
|
+
msgRand: msgLen,
|
|
1004
|
+
secretKey: secretCoder.bytesLen
|
|
1005
|
+
});
|
|
1006
|
+
return Object.freeze({
|
|
1007
|
+
info: Object.freeze({ type: "ml-kem" }),
|
|
1008
|
+
lengths: kemLengths,
|
|
1009
|
+
keygen: (seed = randomBytes2(seedLen)) => {
|
|
1010
|
+
abytesDoc(seed, seedLen, "seed");
|
|
1011
|
+
const { publicKey, secretKey: sk } = KPKE.keygen(seed.subarray(0, 32));
|
|
1012
|
+
const publicKeyHash = HASH256(publicKey);
|
|
1013
|
+
const secretKey = secretCoder.encode([sk, publicKey, publicKeyHash, seed.subarray(32)]);
|
|
1014
|
+
cleanBytes(sk, publicKeyHash);
|
|
1015
|
+
return {
|
|
1016
|
+
publicKey,
|
|
1017
|
+
secretKey
|
|
1018
|
+
};
|
|
1019
|
+
},
|
|
1020
|
+
getPublicKey: (secretKey) => {
|
|
1021
|
+
const [_sk, publicKey, _publicKeyHash, _z] = secretCoder.decode(secretKey);
|
|
1022
|
+
return Uint8Array.from(publicKey);
|
|
1023
|
+
},
|
|
1024
|
+
encapsulate: (publicKey, msg = randomBytes2(msgLen)) => {
|
|
1025
|
+
abytesDoc(publicKey, lengths.publicKey, "publicKey");
|
|
1026
|
+
abytesDoc(msg, msgLen, "message");
|
|
1027
|
+
const eke = publicKey.subarray(0, 384 * opts2.K);
|
|
1028
|
+
const ek = KPKESecretCoder.encode(KPKESecretCoder.decode(copyBytes(eke)));
|
|
1029
|
+
if (!equalBytes(ek, eke)) {
|
|
1030
|
+
cleanBytes(ek);
|
|
1031
|
+
throw new Error("ML-KEM.encapsulate: wrong publicKey modulus");
|
|
1032
|
+
}
|
|
1033
|
+
cleanBytes(ek);
|
|
1034
|
+
const kr = HASH512.create().update(msg).update(HASH256(publicKey)).digest();
|
|
1035
|
+
const cipherText = KPKE.encrypt(publicKey, msg, kr.subarray(32, 64));
|
|
1036
|
+
cleanBytes(kr.subarray(32));
|
|
1037
|
+
return {
|
|
1038
|
+
cipherText,
|
|
1039
|
+
sharedSecret: kr.subarray(0, 32)
|
|
1040
|
+
};
|
|
1041
|
+
},
|
|
1042
|
+
decapsulate: (cipherText, secretKey) => {
|
|
1043
|
+
abytesDoc(secretKey, secretCoder.bytesLen, "secretKey");
|
|
1044
|
+
abytesDoc(cipherText, lengths.cipherText, "cipherText");
|
|
1045
|
+
const k768 = secretCoder.bytesLen - 96;
|
|
1046
|
+
const start = k768 + 32;
|
|
1047
|
+
const test = HASH256(secretKey.subarray(k768 / 2, start));
|
|
1048
|
+
if (!equalBytes(test, secretKey.subarray(start, start + 32)))
|
|
1049
|
+
throw new Error("invalid secretKey: hash check failed");
|
|
1050
|
+
const [sk, publicKey, publicKeyHash, z] = secretCoder.decode(secretKey);
|
|
1051
|
+
const msg = KPKE.decrypt(cipherText, sk);
|
|
1052
|
+
const kr = HASH512.create().update(msg).update(publicKeyHash).digest();
|
|
1053
|
+
const Khat = kr.subarray(0, 32);
|
|
1054
|
+
const cipherText2 = KPKE.encrypt(publicKey, msg, kr.subarray(32, 64));
|
|
1055
|
+
const isValid = equalBytes(cipherText, cipherText2);
|
|
1056
|
+
const Kbar = KDF.create({ dkLen: 32 }).update(z).update(cipherText).digest();
|
|
1057
|
+
cleanBytes(msg, cipherText2, !isValid ? Khat : Kbar);
|
|
1058
|
+
return isValid ? Khat : Kbar;
|
|
1059
|
+
}
|
|
1060
|
+
});
|
|
1061
|
+
}
|
|
1062
|
+
function shakePRF(dkLen, key, nonce) {
|
|
1063
|
+
return shake256.create({ dkLen }).update(key).update(new Uint8Array([nonce])).digest();
|
|
1064
|
+
}
|
|
1065
|
+
var opts = /* @__PURE__ */ (() => ({
|
|
1066
|
+
HASH256: sha3_256,
|
|
1067
|
+
HASH512: sha3_512,
|
|
1068
|
+
KDF: shake256,
|
|
1069
|
+
XOF: XOF128,
|
|
1070
|
+
PRF: shakePRF
|
|
1071
|
+
}))();
|
|
1072
|
+
var mk = (params) => createKyber({
|
|
1073
|
+
...opts,
|
|
1074
|
+
...params
|
|
1075
|
+
});
|
|
1076
|
+
var ml_kem512 = /* @__PURE__ */ (() => mk(PARAMS[512]))();
|
|
1077
|
+
var ml_kem768 = /* @__PURE__ */ (() => mk(PARAMS[768]))();
|
|
1078
|
+
var ml_kem1024 = /* @__PURE__ */ (() => mk(PARAMS[1024]))();
|
|
1079
|
+
|
|
1080
|
+
// node_modules/@noble/curves/utils.js
|
|
1081
|
+
function abool(value, title = "") {
|
|
1082
|
+
if (typeof value !== "boolean") {
|
|
1083
|
+
const prefix = title && `"${title}" `;
|
|
1084
|
+
throw new TypeError(prefix + "expected boolean, got type=" + typeof value);
|
|
1085
|
+
}
|
|
1086
|
+
return value;
|
|
1087
|
+
}
|
|
1088
|
+
|
|
1089
|
+
// node_modules/@noble/post-quantum/ml-dsa.js
|
|
1090
|
+
function validateInternalOpts(opts2) {
|
|
1091
|
+
validateOpts(opts2);
|
|
1092
|
+
if (opts2.externalMu !== void 0)
|
|
1093
|
+
abool(opts2.externalMu, "opts.externalMu");
|
|
1094
|
+
}
|
|
1095
|
+
var N2 = 256;
|
|
1096
|
+
var Q2 = 8380417;
|
|
1097
|
+
var ROOT_OF_UNITY2 = 1753;
|
|
1098
|
+
var F2 = 8347681;
|
|
1099
|
+
var D = 13;
|
|
1100
|
+
var GAMMA2_1 = Math.floor((Q2 - 1) / 88) | 0;
|
|
1101
|
+
var GAMMA2_2 = Math.floor((Q2 - 1) / 32) | 0;
|
|
1102
|
+
var PARAMS2 = /* @__PURE__ */ (() => Object.freeze({
|
|
1103
|
+
2: Object.freeze({
|
|
1104
|
+
K: 4,
|
|
1105
|
+
L: 4,
|
|
1106
|
+
D,
|
|
1107
|
+
GAMMA1: 2 ** 17,
|
|
1108
|
+
GAMMA2: GAMMA2_1,
|
|
1109
|
+
TAU: 39,
|
|
1110
|
+
ETA: 2,
|
|
1111
|
+
OMEGA: 80
|
|
1112
|
+
}),
|
|
1113
|
+
3: Object.freeze({
|
|
1114
|
+
K: 6,
|
|
1115
|
+
L: 5,
|
|
1116
|
+
D,
|
|
1117
|
+
GAMMA1: 2 ** 19,
|
|
1118
|
+
GAMMA2: GAMMA2_2,
|
|
1119
|
+
TAU: 49,
|
|
1120
|
+
ETA: 4,
|
|
1121
|
+
OMEGA: 55
|
|
1122
|
+
}),
|
|
1123
|
+
5: Object.freeze({
|
|
1124
|
+
K: 8,
|
|
1125
|
+
L: 7,
|
|
1126
|
+
D,
|
|
1127
|
+
GAMMA1: 2 ** 19,
|
|
1128
|
+
GAMMA2: GAMMA2_2,
|
|
1129
|
+
TAU: 60,
|
|
1130
|
+
ETA: 2,
|
|
1131
|
+
OMEGA: 75
|
|
1132
|
+
})
|
|
1133
|
+
}))();
|
|
1134
|
+
var newPoly = (n) => new Int32Array(n);
|
|
1135
|
+
var crystals2 = /* @__PURE__ */ genCrystals({
|
|
1136
|
+
N: N2,
|
|
1137
|
+
Q: Q2,
|
|
1138
|
+
F: F2,
|
|
1139
|
+
ROOT_OF_UNITY: ROOT_OF_UNITY2,
|
|
1140
|
+
newPoly,
|
|
1141
|
+
isKyber: false,
|
|
1142
|
+
brvBits: 8
|
|
1143
|
+
});
|
|
1144
|
+
var id = (n) => n;
|
|
1145
|
+
var polyCoder2 = (d, compress2 = id, verify = id) => crystals2.bitsCoder(d, {
|
|
1146
|
+
encode: (i) => compress2(verify(i)),
|
|
1147
|
+
decode: (i) => verify(compress2(i))
|
|
1148
|
+
});
|
|
1149
|
+
var polyAdd2 = (a_, b_) => {
|
|
1150
|
+
const a = a_;
|
|
1151
|
+
const b = b_;
|
|
1152
|
+
for (let i = 0; i < a.length; i++)
|
|
1153
|
+
a[i] = crystals2.mod(a[i] + b[i]);
|
|
1154
|
+
return a;
|
|
1155
|
+
};
|
|
1156
|
+
var polySub2 = (a_, b_) => {
|
|
1157
|
+
const a = a_;
|
|
1158
|
+
const b = b_;
|
|
1159
|
+
for (let i = 0; i < a.length; i++)
|
|
1160
|
+
a[i] = crystals2.mod(a[i] - b[i]);
|
|
1161
|
+
return a;
|
|
1162
|
+
};
|
|
1163
|
+
var polyShiftl = (p_) => {
|
|
1164
|
+
const p = p_;
|
|
1165
|
+
for (let i = 0; i < N2; i++)
|
|
1166
|
+
p[i] <<= D;
|
|
1167
|
+
return p;
|
|
1168
|
+
};
|
|
1169
|
+
var polyChknorm = (p_, B) => {
|
|
1170
|
+
const p = p_;
|
|
1171
|
+
for (let i = 0; i < N2; i++)
|
|
1172
|
+
if (Math.abs(crystals2.smod(p[i])) >= B)
|
|
1173
|
+
return true;
|
|
1174
|
+
return false;
|
|
1175
|
+
};
|
|
1176
|
+
var MultiplyNTTs2 = (a_, b_) => {
|
|
1177
|
+
const a = a_;
|
|
1178
|
+
const b = b_;
|
|
1179
|
+
const c = newPoly(N2);
|
|
1180
|
+
for (let i = 0; i < a.length; i++)
|
|
1181
|
+
c[i] = crystals2.mod(a[i] * b[i]);
|
|
1182
|
+
return c;
|
|
1183
|
+
};
|
|
1184
|
+
function RejNTTPoly(xof_) {
|
|
1185
|
+
const xof = xof_;
|
|
1186
|
+
const r = newPoly(N2);
|
|
1187
|
+
for (let j = 0; j < N2; ) {
|
|
1188
|
+
const b = xof();
|
|
1189
|
+
if (b.length % 3)
|
|
1190
|
+
throw new Error("RejNTTPoly: unaligned block");
|
|
1191
|
+
for (let i = 0; j < N2 && i <= b.length - 3; i += 3) {
|
|
1192
|
+
const t = (b[i + 0] | b[i + 1] << 8 | b[i + 2] << 16) & 8388607;
|
|
1193
|
+
if (t < Q2)
|
|
1194
|
+
r[j++] = t;
|
|
1195
|
+
}
|
|
1196
|
+
}
|
|
1197
|
+
return r;
|
|
1198
|
+
}
|
|
1199
|
+
function getDilithium(opts_) {
|
|
1200
|
+
const opts2 = opts_;
|
|
1201
|
+
const { K, L, GAMMA1, GAMMA2, TAU, ETA, OMEGA } = opts2;
|
|
1202
|
+
const { CRH_BYTES, TR_BYTES, C_TILDE_BYTES, XOF128: XOF1282, XOF256: XOF2562, securityLevel } = opts2;
|
|
1203
|
+
if (![2, 4].includes(ETA))
|
|
1204
|
+
throw new Error("Wrong ETA");
|
|
1205
|
+
if (![1 << 17, 1 << 19].includes(GAMMA1))
|
|
1206
|
+
throw new Error("Wrong GAMMA1");
|
|
1207
|
+
if (![GAMMA2_1, GAMMA2_2].includes(GAMMA2))
|
|
1208
|
+
throw new Error("Wrong GAMMA2");
|
|
1209
|
+
const BETA = TAU * ETA;
|
|
1210
|
+
const decompose = (r) => {
|
|
1211
|
+
const rPlus = crystals2.mod(r);
|
|
1212
|
+
const r0 = crystals2.smod(rPlus, 2 * GAMMA2) | 0;
|
|
1213
|
+
if (rPlus - r0 === Q2 - 1)
|
|
1214
|
+
return { r1: 0 | 0, r0: r0 - 1 | 0 };
|
|
1215
|
+
const r1 = Math.floor((rPlus - r0) / (2 * GAMMA2)) | 0;
|
|
1216
|
+
return { r1, r0 };
|
|
1217
|
+
};
|
|
1218
|
+
const HighBits = (r) => decompose(r).r1;
|
|
1219
|
+
const LowBits = (r) => decompose(r).r0;
|
|
1220
|
+
const MakeHint = (z, r) => {
|
|
1221
|
+
const res0 = z <= GAMMA2 || z > Q2 - GAMMA2 || z === Q2 - GAMMA2 && r === 0 ? 0 : 1;
|
|
1222
|
+
return res0;
|
|
1223
|
+
};
|
|
1224
|
+
const UseHint = (h, r) => {
|
|
1225
|
+
const m = Math.floor((Q2 - 1) / (2 * GAMMA2));
|
|
1226
|
+
const { r1, r0 } = decompose(r);
|
|
1227
|
+
if (h === 1)
|
|
1228
|
+
return r0 > 0 ? crystals2.mod(r1 + 1, m) | 0 : crystals2.mod(r1 - 1, m) | 0;
|
|
1229
|
+
return r1 | 0;
|
|
1230
|
+
};
|
|
1231
|
+
const Power2Round = (r) => {
|
|
1232
|
+
const rPlus = crystals2.mod(r);
|
|
1233
|
+
const r0 = crystals2.smod(rPlus, 2 ** D) | 0;
|
|
1234
|
+
return { r1: Math.floor((rPlus - r0) / 2 ** D) | 0, r0 };
|
|
1235
|
+
};
|
|
1236
|
+
const hintCoder = {
|
|
1237
|
+
bytesLen: OMEGA + K,
|
|
1238
|
+
encode: (h_) => {
|
|
1239
|
+
const h = h_;
|
|
1240
|
+
if (h === false)
|
|
1241
|
+
throw new Error("hint.encode: hint is false");
|
|
1242
|
+
const res = new Uint8Array(OMEGA + K);
|
|
1243
|
+
for (let i = 0, k = 0; i < K; i++) {
|
|
1244
|
+
for (let j = 0; j < N2; j++)
|
|
1245
|
+
if (h[i][j] !== 0)
|
|
1246
|
+
res[k++] = j;
|
|
1247
|
+
res[OMEGA + i] = k;
|
|
1248
|
+
}
|
|
1249
|
+
return res;
|
|
1250
|
+
},
|
|
1251
|
+
decode: (buf) => {
|
|
1252
|
+
const h = [];
|
|
1253
|
+
let k = 0;
|
|
1254
|
+
for (let i = 0; i < K; i++) {
|
|
1255
|
+
const hi = newPoly(N2);
|
|
1256
|
+
if (buf[OMEGA + i] < k || buf[OMEGA + i] > OMEGA)
|
|
1257
|
+
return false;
|
|
1258
|
+
for (let j = k; j < buf[OMEGA + i]; j++) {
|
|
1259
|
+
if (j > k && buf[j] <= buf[j - 1])
|
|
1260
|
+
return false;
|
|
1261
|
+
hi[buf[j]] = 1;
|
|
1262
|
+
}
|
|
1263
|
+
k = buf[OMEGA + i];
|
|
1264
|
+
h.push(hi);
|
|
1265
|
+
}
|
|
1266
|
+
for (let j = k; j < OMEGA; j++)
|
|
1267
|
+
if (buf[j] !== 0)
|
|
1268
|
+
return false;
|
|
1269
|
+
return h;
|
|
1270
|
+
}
|
|
1271
|
+
};
|
|
1272
|
+
const ETACoder = polyCoder2(ETA === 2 ? 3 : 4, (i) => ETA - i, (i) => {
|
|
1273
|
+
if (!(-ETA <= i && i <= ETA))
|
|
1274
|
+
throw new Error(`malformed key s1/s3 ${i} outside of ETA range [${-ETA}, ${ETA}]`);
|
|
1275
|
+
return i;
|
|
1276
|
+
});
|
|
1277
|
+
const T0Coder = polyCoder2(13, (i) => (1 << D - 1) - i);
|
|
1278
|
+
const T1Coder = polyCoder2(10);
|
|
1279
|
+
const ZCoder = polyCoder2(GAMMA1 === 1 << 17 ? 18 : 20, (i) => crystals2.smod(GAMMA1 - i));
|
|
1280
|
+
const W1Coder = polyCoder2(GAMMA2 === GAMMA2_1 ? 6 : 4);
|
|
1281
|
+
const W1Vec = vecCoder(W1Coder, K);
|
|
1282
|
+
const publicCoder = splitCoder("publicKey", 32, vecCoder(T1Coder, K));
|
|
1283
|
+
const secretCoder = splitCoder("secretKey", 32, 32, TR_BYTES, vecCoder(ETACoder, L), vecCoder(ETACoder, K), vecCoder(T0Coder, K));
|
|
1284
|
+
const sigCoder = splitCoder("signature", C_TILDE_BYTES, vecCoder(ZCoder, L), hintCoder);
|
|
1285
|
+
const CoefFromHalfByte = ETA === 2 ? (n) => n < 15 ? 2 - n % 5 : false : (n) => n < 9 ? 4 - n : false;
|
|
1286
|
+
function RejBoundedPoly(xof_) {
|
|
1287
|
+
const xof = xof_;
|
|
1288
|
+
const r = newPoly(N2);
|
|
1289
|
+
for (let j = 0; j < N2; ) {
|
|
1290
|
+
const b = xof();
|
|
1291
|
+
for (let i = 0; j < N2 && i < b.length; i += 1) {
|
|
1292
|
+
const d1 = CoefFromHalfByte(b[i] & 15);
|
|
1293
|
+
const d2 = CoefFromHalfByte(b[i] >> 4 & 15);
|
|
1294
|
+
if (d1 !== false)
|
|
1295
|
+
r[j++] = d1;
|
|
1296
|
+
if (j < N2 && d2 !== false)
|
|
1297
|
+
r[j++] = d2;
|
|
1298
|
+
}
|
|
1299
|
+
}
|
|
1300
|
+
return r;
|
|
1301
|
+
}
|
|
1302
|
+
const SampleInBall = (seed) => {
|
|
1303
|
+
const pre = newPoly(N2);
|
|
1304
|
+
const s = shake256.create({}).update(seed);
|
|
1305
|
+
const buf = new Uint8Array(shake256.blockLen);
|
|
1306
|
+
s.xofInto(buf);
|
|
1307
|
+
const masks = buf.slice(0, 8);
|
|
1308
|
+
for (let i = N2 - TAU, pos = 8, maskPos = 0, maskBit = 0; i < N2; i++) {
|
|
1309
|
+
let b = i + 1;
|
|
1310
|
+
for (; b > i; ) {
|
|
1311
|
+
b = buf[pos++];
|
|
1312
|
+
if (pos < shake256.blockLen)
|
|
1313
|
+
continue;
|
|
1314
|
+
s.xofInto(buf);
|
|
1315
|
+
pos = 0;
|
|
1316
|
+
}
|
|
1317
|
+
pre[i] = pre[b];
|
|
1318
|
+
pre[b] = 1 - ((masks[maskPos] >> maskBit++ & 1) << 1);
|
|
1319
|
+
if (maskBit >= 8) {
|
|
1320
|
+
maskPos++;
|
|
1321
|
+
maskBit = 0;
|
|
1322
|
+
}
|
|
1323
|
+
}
|
|
1324
|
+
return pre;
|
|
1325
|
+
};
|
|
1326
|
+
const polyPowerRound = (p_) => {
|
|
1327
|
+
const p = p_;
|
|
1328
|
+
const res0 = newPoly(N2);
|
|
1329
|
+
const res1 = newPoly(N2);
|
|
1330
|
+
for (let i = 0; i < p.length; i++) {
|
|
1331
|
+
const { r0, r1 } = Power2Round(p[i]);
|
|
1332
|
+
res0[i] = r0;
|
|
1333
|
+
res1[i] = r1;
|
|
1334
|
+
}
|
|
1335
|
+
return { r0: res0, r1: res1 };
|
|
1336
|
+
};
|
|
1337
|
+
const polyUseHint = (u_, h_) => {
|
|
1338
|
+
const u = u_;
|
|
1339
|
+
const h = h_;
|
|
1340
|
+
for (let i = 0; i < N2; i++)
|
|
1341
|
+
u[i] = UseHint(h[i], u[i]);
|
|
1342
|
+
return u;
|
|
1343
|
+
};
|
|
1344
|
+
const polyMakeHint = (a_, b_) => {
|
|
1345
|
+
const a = a_;
|
|
1346
|
+
const b = b_;
|
|
1347
|
+
const v = newPoly(N2);
|
|
1348
|
+
let cnt = 0;
|
|
1349
|
+
for (let i = 0; i < N2; i++) {
|
|
1350
|
+
const h = MakeHint(a[i], b[i]);
|
|
1351
|
+
v[i] = h;
|
|
1352
|
+
cnt += h;
|
|
1353
|
+
}
|
|
1354
|
+
return { v, cnt };
|
|
1355
|
+
};
|
|
1356
|
+
const signRandBytes = 32;
|
|
1357
|
+
const seedCoder = splitCoder("seed", 32, 64, 32);
|
|
1358
|
+
const internal = Object.freeze({
|
|
1359
|
+
info: Object.freeze({ type: "internal-ml-dsa" }),
|
|
1360
|
+
lengths: Object.freeze({
|
|
1361
|
+
secretKey: secretCoder.bytesLen,
|
|
1362
|
+
publicKey: publicCoder.bytesLen,
|
|
1363
|
+
seed: 32,
|
|
1364
|
+
signature: sigCoder.bytesLen,
|
|
1365
|
+
signRand: signRandBytes
|
|
1366
|
+
}),
|
|
1367
|
+
keygen: (seed) => {
|
|
1368
|
+
const seedDst = new Uint8Array(32 + 2);
|
|
1369
|
+
const randSeed = seed === void 0;
|
|
1370
|
+
if (randSeed)
|
|
1371
|
+
seed = randomBytes2(32);
|
|
1372
|
+
abytesDoc(seed, 32, "seed");
|
|
1373
|
+
seedDst.set(seed);
|
|
1374
|
+
if (randSeed)
|
|
1375
|
+
cleanBytes(seed);
|
|
1376
|
+
seedDst[32] = K;
|
|
1377
|
+
seedDst[33] = L;
|
|
1378
|
+
const [rho, rhoPrime, K_] = seedCoder.decode(shake256(seedDst, { dkLen: seedCoder.bytesLen }));
|
|
1379
|
+
const xofPrime = XOF2562(rhoPrime);
|
|
1380
|
+
const s1 = [];
|
|
1381
|
+
for (let i = 0; i < L; i++)
|
|
1382
|
+
s1.push(RejBoundedPoly(xofPrime.get(i & 255, i >> 8 & 255)));
|
|
1383
|
+
const s2 = [];
|
|
1384
|
+
for (let i = L; i < L + K; i++)
|
|
1385
|
+
s2.push(RejBoundedPoly(xofPrime.get(i & 255, i >> 8 & 255)));
|
|
1386
|
+
const s1Hat = s1.map((i) => crystals2.NTT.encode(i.slice()));
|
|
1387
|
+
const t0 = [];
|
|
1388
|
+
const t1 = [];
|
|
1389
|
+
const xof = XOF1282(rho);
|
|
1390
|
+
const t = newPoly(N2);
|
|
1391
|
+
for (let i = 0; i < K; i++) {
|
|
1392
|
+
cleanBytes(t);
|
|
1393
|
+
for (let j = 0; j < L; j++) {
|
|
1394
|
+
const aij = RejNTTPoly(xof.get(j, i));
|
|
1395
|
+
polyAdd2(t, MultiplyNTTs2(aij, s1Hat[j]));
|
|
1396
|
+
}
|
|
1397
|
+
crystals2.NTT.decode(t);
|
|
1398
|
+
const { r0, r1 } = polyPowerRound(polyAdd2(t, s2[i]));
|
|
1399
|
+
t0.push(r0);
|
|
1400
|
+
t1.push(r1);
|
|
1401
|
+
}
|
|
1402
|
+
const publicKey = publicCoder.encode([rho, t1]);
|
|
1403
|
+
const tr = shake256(publicKey, { dkLen: TR_BYTES });
|
|
1404
|
+
const secretKey = secretCoder.encode([rho, K_, tr, s1, s2, t0]);
|
|
1405
|
+
xof.clean();
|
|
1406
|
+
xofPrime.clean();
|
|
1407
|
+
cleanBytes(rho, rhoPrime, K_, s1, s2, s1Hat, t, t0, t1, tr, seedDst);
|
|
1408
|
+
return {
|
|
1409
|
+
publicKey,
|
|
1410
|
+
secretKey
|
|
1411
|
+
};
|
|
1412
|
+
},
|
|
1413
|
+
getPublicKey: (secretKey) => {
|
|
1414
|
+
const [rho, _K, _tr, s1, s2, _t0] = secretCoder.decode(secretKey);
|
|
1415
|
+
const xof = XOF1282(rho);
|
|
1416
|
+
const s1Hat = s1.map((p) => crystals2.NTT.encode(p.slice()));
|
|
1417
|
+
const t1 = [];
|
|
1418
|
+
const tmp = newPoly(N2);
|
|
1419
|
+
for (let i = 0; i < K; i++) {
|
|
1420
|
+
tmp.fill(0);
|
|
1421
|
+
for (let j = 0; j < L; j++) {
|
|
1422
|
+
const aij = RejNTTPoly(xof.get(j, i));
|
|
1423
|
+
polyAdd2(tmp, MultiplyNTTs2(aij, s1Hat[j]));
|
|
1424
|
+
}
|
|
1425
|
+
crystals2.NTT.decode(tmp);
|
|
1426
|
+
polyAdd2(tmp, s2[i]);
|
|
1427
|
+
const { r1 } = polyPowerRound(tmp);
|
|
1428
|
+
t1.push(r1);
|
|
1429
|
+
}
|
|
1430
|
+
xof.clean();
|
|
1431
|
+
cleanBytes(tmp, s1Hat, _t0, s1, s2);
|
|
1432
|
+
return publicCoder.encode([rho, t1]);
|
|
1433
|
+
},
|
|
1434
|
+
// NOTE: random is optional.
|
|
1435
|
+
sign: (msg, secretKey, opts3 = {}) => {
|
|
1436
|
+
validateSigOpts(opts3);
|
|
1437
|
+
validateInternalOpts(opts3);
|
|
1438
|
+
let { extraEntropy: random, externalMu = false } = opts3;
|
|
1439
|
+
const [rho, _K, tr, s1, s2, t0] = secretCoder.decode(secretKey);
|
|
1440
|
+
const A = [];
|
|
1441
|
+
const xof = XOF1282(rho);
|
|
1442
|
+
for (let i = 0; i < K; i++) {
|
|
1443
|
+
const pv = [];
|
|
1444
|
+
for (let j = 0; j < L; j++)
|
|
1445
|
+
pv.push(RejNTTPoly(xof.get(j, i)));
|
|
1446
|
+
A.push(pv);
|
|
1447
|
+
}
|
|
1448
|
+
xof.clean();
|
|
1449
|
+
for (let i = 0; i < L; i++)
|
|
1450
|
+
crystals2.NTT.encode(s1[i]);
|
|
1451
|
+
for (let i = 0; i < K; i++) {
|
|
1452
|
+
crystals2.NTT.encode(s2[i]);
|
|
1453
|
+
crystals2.NTT.encode(t0[i]);
|
|
1454
|
+
}
|
|
1455
|
+
const mu = externalMu ? msg : (
|
|
1456
|
+
// 6: µ ← H(tr||M, 512)
|
|
1457
|
+
// ▷ Compute message representative µ
|
|
1458
|
+
shake256.create({ dkLen: CRH_BYTES }).update(tr).update(msg).digest()
|
|
1459
|
+
);
|
|
1460
|
+
const rnd = random === false ? new Uint8Array(32) : random === void 0 ? randomBytes2(signRandBytes) : random;
|
|
1461
|
+
abytesDoc(rnd, 32, "extraEntropy");
|
|
1462
|
+
const rhoprime = shake256.create({ dkLen: CRH_BYTES }).update(_K).update(rnd).update(mu).digest();
|
|
1463
|
+
abytesDoc(rhoprime, CRH_BYTES);
|
|
1464
|
+
const x256 = XOF2562(rhoprime, ZCoder.bytesLen);
|
|
1465
|
+
main_loop: for (let kappa = 0; ; ) {
|
|
1466
|
+
const y = [];
|
|
1467
|
+
for (let i = 0; i < L; i++, kappa++)
|
|
1468
|
+
y.push(ZCoder.decode(x256.get(kappa & 255, kappa >> 8)()));
|
|
1469
|
+
const z = y.map((i) => crystals2.NTT.encode(i.slice()));
|
|
1470
|
+
const w = [];
|
|
1471
|
+
for (let i = 0; i < K; i++) {
|
|
1472
|
+
const wi = newPoly(N2);
|
|
1473
|
+
for (let j = 0; j < L; j++)
|
|
1474
|
+
polyAdd2(wi, MultiplyNTTs2(A[i][j], z[j]));
|
|
1475
|
+
crystals2.NTT.decode(wi);
|
|
1476
|
+
w.push(wi);
|
|
1477
|
+
}
|
|
1478
|
+
const w1 = w.map((j) => j.map(HighBits));
|
|
1479
|
+
const cTilde = shake256.create({ dkLen: C_TILDE_BYTES }).update(mu).update(W1Vec.encode(w1)).digest();
|
|
1480
|
+
const cHat = crystals2.NTT.encode(SampleInBall(cTilde));
|
|
1481
|
+
const cs1 = s1.map((i) => MultiplyNTTs2(i, cHat));
|
|
1482
|
+
for (let i = 0; i < L; i++) {
|
|
1483
|
+
polyAdd2(crystals2.NTT.decode(cs1[i]), y[i]);
|
|
1484
|
+
if (polyChknorm(cs1[i], GAMMA1 - BETA))
|
|
1485
|
+
continue main_loop;
|
|
1486
|
+
}
|
|
1487
|
+
let cnt = 0;
|
|
1488
|
+
const h = [];
|
|
1489
|
+
for (let i = 0; i < K; i++) {
|
|
1490
|
+
const cs2 = crystals2.NTT.decode(MultiplyNTTs2(s2[i], cHat));
|
|
1491
|
+
const r0 = polySub2(w[i], cs2).map(LowBits);
|
|
1492
|
+
if (polyChknorm(r0, GAMMA2 - BETA))
|
|
1493
|
+
continue main_loop;
|
|
1494
|
+
const ct0 = crystals2.NTT.decode(MultiplyNTTs2(t0[i], cHat));
|
|
1495
|
+
if (polyChknorm(ct0, GAMMA2))
|
|
1496
|
+
continue main_loop;
|
|
1497
|
+
polyAdd2(r0, ct0);
|
|
1498
|
+
const hint = polyMakeHint(r0, w1[i]);
|
|
1499
|
+
h.push(hint.v);
|
|
1500
|
+
cnt += hint.cnt;
|
|
1501
|
+
}
|
|
1502
|
+
if (cnt > OMEGA)
|
|
1503
|
+
continue;
|
|
1504
|
+
x256.clean();
|
|
1505
|
+
const res = sigCoder.encode([cTilde, cs1, h]);
|
|
1506
|
+
cleanBytes(cTilde, cs1, h, cHat, w1, w, z, y, rhoprime, s1, s2, t0, ...A);
|
|
1507
|
+
if (!externalMu)
|
|
1508
|
+
cleanBytes(mu);
|
|
1509
|
+
return res;
|
|
1510
|
+
}
|
|
1511
|
+
throw new Error("Unreachable code path reached, report this error");
|
|
1512
|
+
},
|
|
1513
|
+
verify: (sig, msg, publicKey, opts3 = {}) => {
|
|
1514
|
+
validateInternalOpts(opts3);
|
|
1515
|
+
const { externalMu = false } = opts3;
|
|
1516
|
+
const [rho, t1] = publicCoder.decode(publicKey);
|
|
1517
|
+
const tr = shake256(publicKey, { dkLen: TR_BYTES });
|
|
1518
|
+
if (sig.length !== sigCoder.bytesLen)
|
|
1519
|
+
return false;
|
|
1520
|
+
const [cTilde, z, h] = sigCoder.decode(sig);
|
|
1521
|
+
if (h === false)
|
|
1522
|
+
return false;
|
|
1523
|
+
for (let i = 0; i < L; i++)
|
|
1524
|
+
if (polyChknorm(z[i], GAMMA1 - BETA))
|
|
1525
|
+
return false;
|
|
1526
|
+
const mu = externalMu ? msg : (
|
|
1527
|
+
// 7: µ ← H(tr||M, 512)
|
|
1528
|
+
shake256.create({ dkLen: CRH_BYTES }).update(tr).update(msg).digest()
|
|
1529
|
+
);
|
|
1530
|
+
const c = crystals2.NTT.encode(SampleInBall(cTilde));
|
|
1531
|
+
const zNtt = z.map((i) => i.slice());
|
|
1532
|
+
for (let i = 0; i < L; i++)
|
|
1533
|
+
crystals2.NTT.encode(zNtt[i]);
|
|
1534
|
+
const wTick1 = [];
|
|
1535
|
+
const xof = XOF1282(rho);
|
|
1536
|
+
for (let i = 0; i < K; i++) {
|
|
1537
|
+
const ct12d = MultiplyNTTs2(crystals2.NTT.encode(polyShiftl(t1[i])), c);
|
|
1538
|
+
const Az = newPoly(N2);
|
|
1539
|
+
for (let j = 0; j < L; j++) {
|
|
1540
|
+
const aij = RejNTTPoly(xof.get(j, i));
|
|
1541
|
+
polyAdd2(Az, MultiplyNTTs2(aij, zNtt[j]));
|
|
1542
|
+
}
|
|
1543
|
+
const wApprox = crystals2.NTT.decode(polySub2(Az, ct12d));
|
|
1544
|
+
wTick1.push(polyUseHint(wApprox, h[i]));
|
|
1545
|
+
}
|
|
1546
|
+
xof.clean();
|
|
1547
|
+
const c2 = shake256.create({ dkLen: C_TILDE_BYTES }).update(mu).update(W1Vec.encode(wTick1)).digest();
|
|
1548
|
+
for (const t of h) {
|
|
1549
|
+
const sum = t.reduce((acc, i) => acc + i, 0);
|
|
1550
|
+
if (!(sum <= OMEGA))
|
|
1551
|
+
return false;
|
|
1552
|
+
}
|
|
1553
|
+
for (const t of z)
|
|
1554
|
+
if (polyChknorm(t, GAMMA1 - BETA))
|
|
1555
|
+
return false;
|
|
1556
|
+
return equalBytes(cTilde, c2);
|
|
1557
|
+
}
|
|
1558
|
+
});
|
|
1559
|
+
return Object.freeze({
|
|
1560
|
+
info: Object.freeze({ type: "ml-dsa" }),
|
|
1561
|
+
internal,
|
|
1562
|
+
securityLevel,
|
|
1563
|
+
keygen: internal.keygen,
|
|
1564
|
+
lengths: internal.lengths,
|
|
1565
|
+
getPublicKey: internal.getPublicKey,
|
|
1566
|
+
sign: (msg, secretKey, opts3 = {}) => {
|
|
1567
|
+
validateSigOpts(opts3);
|
|
1568
|
+
const M = getMessage(msg, opts3.context);
|
|
1569
|
+
const res = internal.sign(M, secretKey, opts3);
|
|
1570
|
+
cleanBytes(M);
|
|
1571
|
+
return res;
|
|
1572
|
+
},
|
|
1573
|
+
verify: (sig, msg, publicKey, opts3 = {}) => {
|
|
1574
|
+
validateVerOpts(opts3);
|
|
1575
|
+
return internal.verify(sig, getMessage(msg, opts3.context), publicKey);
|
|
1576
|
+
},
|
|
1577
|
+
prehash: (hash) => {
|
|
1578
|
+
checkHash(hash, securityLevel);
|
|
1579
|
+
return Object.freeze({
|
|
1580
|
+
info: Object.freeze({ type: "hashml-dsa" }),
|
|
1581
|
+
securityLevel,
|
|
1582
|
+
lengths: internal.lengths,
|
|
1583
|
+
keygen: internal.keygen,
|
|
1584
|
+
getPublicKey: internal.getPublicKey,
|
|
1585
|
+
sign: (msg, secretKey, opts3 = {}) => {
|
|
1586
|
+
validateSigOpts(opts3);
|
|
1587
|
+
const M = getMessagePrehash(hash, msg, opts3.context);
|
|
1588
|
+
const res = internal.sign(M, secretKey, opts3);
|
|
1589
|
+
cleanBytes(M);
|
|
1590
|
+
return res;
|
|
1591
|
+
},
|
|
1592
|
+
verify: (sig, msg, publicKey, opts3 = {}) => {
|
|
1593
|
+
validateVerOpts(opts3);
|
|
1594
|
+
return internal.verify(sig, getMessagePrehash(hash, msg, opts3.context), publicKey);
|
|
1595
|
+
}
|
|
1596
|
+
});
|
|
1597
|
+
}
|
|
1598
|
+
});
|
|
1599
|
+
}
|
|
1600
|
+
var ml_dsa44 = /* @__PURE__ */ (() => getDilithium({
|
|
1601
|
+
...PARAMS2[2],
|
|
1602
|
+
CRH_BYTES: 64,
|
|
1603
|
+
TR_BYTES: 64,
|
|
1604
|
+
C_TILDE_BYTES: 32,
|
|
1605
|
+
XOF128,
|
|
1606
|
+
XOF256,
|
|
1607
|
+
securityLevel: 128
|
|
1608
|
+
}))();
|
|
1609
|
+
var ml_dsa65 = /* @__PURE__ */ (() => getDilithium({
|
|
1610
|
+
...PARAMS2[3],
|
|
1611
|
+
CRH_BYTES: 64,
|
|
1612
|
+
TR_BYTES: 64,
|
|
1613
|
+
C_TILDE_BYTES: 48,
|
|
1614
|
+
XOF128,
|
|
1615
|
+
XOF256,
|
|
1616
|
+
securityLevel: 192
|
|
1617
|
+
}))();
|
|
1618
|
+
var ml_dsa87 = /* @__PURE__ */ (() => getDilithium({
|
|
1619
|
+
...PARAMS2[5],
|
|
1620
|
+
CRH_BYTES: 64,
|
|
1621
|
+
TR_BYTES: 64,
|
|
1622
|
+
C_TILDE_BYTES: 64,
|
|
1623
|
+
XOF128,
|
|
1624
|
+
XOF256,
|
|
1625
|
+
securityLevel: 256
|
|
1626
|
+
}))();
|
|
1627
|
+
|
|
1628
|
+
// node_modules/@noble/hashes/hmac.js
|
|
1629
|
+
var _HMAC = class {
|
|
1630
|
+
oHash;
|
|
1631
|
+
iHash;
|
|
1632
|
+
blockLen;
|
|
1633
|
+
outputLen;
|
|
1634
|
+
canXOF = false;
|
|
1635
|
+
finished = false;
|
|
1636
|
+
destroyed = false;
|
|
1637
|
+
constructor(hash, key) {
|
|
1638
|
+
ahash(hash);
|
|
1639
|
+
abytes(key, void 0, "key");
|
|
1640
|
+
this.iHash = hash.create();
|
|
1641
|
+
if (typeof this.iHash.update !== "function")
|
|
1642
|
+
throw new Error("Expected instance of class which extends utils.Hash");
|
|
1643
|
+
this.blockLen = this.iHash.blockLen;
|
|
1644
|
+
this.outputLen = this.iHash.outputLen;
|
|
1645
|
+
const blockLen = this.blockLen;
|
|
1646
|
+
const pad = new Uint8Array(blockLen);
|
|
1647
|
+
pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);
|
|
1648
|
+
for (let i = 0; i < pad.length; i++)
|
|
1649
|
+
pad[i] ^= 54;
|
|
1650
|
+
this.iHash.update(pad);
|
|
1651
|
+
this.oHash = hash.create();
|
|
1652
|
+
for (let i = 0; i < pad.length; i++)
|
|
1653
|
+
pad[i] ^= 54 ^ 92;
|
|
1654
|
+
this.oHash.update(pad);
|
|
1655
|
+
clean(pad);
|
|
1656
|
+
}
|
|
1657
|
+
update(buf) {
|
|
1658
|
+
aexists(this);
|
|
1659
|
+
this.iHash.update(buf);
|
|
1660
|
+
return this;
|
|
1661
|
+
}
|
|
1662
|
+
digestInto(out) {
|
|
1663
|
+
aexists(this);
|
|
1664
|
+
aoutput(out, this);
|
|
1665
|
+
this.finished = true;
|
|
1666
|
+
const buf = out.subarray(0, this.outputLen);
|
|
1667
|
+
this.iHash.digestInto(buf);
|
|
1668
|
+
this.oHash.update(buf);
|
|
1669
|
+
this.oHash.digestInto(buf);
|
|
1670
|
+
this.destroy();
|
|
1671
|
+
}
|
|
1672
|
+
digest() {
|
|
1673
|
+
const out = new Uint8Array(this.oHash.outputLen);
|
|
1674
|
+
this.digestInto(out);
|
|
1675
|
+
return out;
|
|
1676
|
+
}
|
|
1677
|
+
_cloneInto(to) {
|
|
1678
|
+
to ||= Object.create(Object.getPrototypeOf(this), {});
|
|
1679
|
+
const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;
|
|
1680
|
+
to = to;
|
|
1681
|
+
to.finished = finished;
|
|
1682
|
+
to.destroyed = destroyed;
|
|
1683
|
+
to.blockLen = blockLen;
|
|
1684
|
+
to.outputLen = outputLen;
|
|
1685
|
+
to.oHash = oHash._cloneInto(to.oHash);
|
|
1686
|
+
to.iHash = iHash._cloneInto(to.iHash);
|
|
1687
|
+
return to;
|
|
1688
|
+
}
|
|
1689
|
+
clone() {
|
|
1690
|
+
return this._cloneInto();
|
|
1691
|
+
}
|
|
1692
|
+
destroy() {
|
|
1693
|
+
this.destroyed = true;
|
|
1694
|
+
this.oHash.destroy();
|
|
1695
|
+
this.iHash.destroy();
|
|
1696
|
+
}
|
|
1697
|
+
};
|
|
1698
|
+
var hmac = /* @__PURE__ */ (() => {
|
|
1699
|
+
const hmac_ = ((hash, key, message) => new _HMAC(hash, key).update(message).digest());
|
|
1700
|
+
hmac_.create = (hash, key) => new _HMAC(hash, key);
|
|
1701
|
+
return hmac_;
|
|
1702
|
+
})();
|
|
1703
|
+
|
|
1704
|
+
// node_modules/@noble/hashes/_md.js
|
|
1705
|
+
function Chi(a, b, c) {
|
|
1706
|
+
return a & b ^ ~a & c;
|
|
1707
|
+
}
|
|
1708
|
+
function Maj(a, b, c) {
|
|
1709
|
+
return a & b ^ a & c ^ b & c;
|
|
1710
|
+
}
|
|
1711
|
+
var HashMD = class {
|
|
1712
|
+
blockLen;
|
|
1713
|
+
outputLen;
|
|
1714
|
+
canXOF = false;
|
|
1715
|
+
padOffset;
|
|
1716
|
+
isLE;
|
|
1717
|
+
// For partial updates less than block size
|
|
1718
|
+
buffer;
|
|
1719
|
+
view;
|
|
1720
|
+
finished = false;
|
|
1721
|
+
length = 0;
|
|
1722
|
+
pos = 0;
|
|
1723
|
+
destroyed = false;
|
|
1724
|
+
constructor(blockLen, outputLen, padOffset, isLE2) {
|
|
1725
|
+
this.blockLen = blockLen;
|
|
1726
|
+
this.outputLen = outputLen;
|
|
1727
|
+
this.padOffset = padOffset;
|
|
1728
|
+
this.isLE = isLE2;
|
|
1729
|
+
this.buffer = new Uint8Array(blockLen);
|
|
1730
|
+
this.view = createView(this.buffer);
|
|
1731
|
+
}
|
|
1732
|
+
update(data) {
|
|
1733
|
+
aexists(this);
|
|
1734
|
+
abytes(data);
|
|
1735
|
+
const { view, buffer, blockLen } = this;
|
|
1736
|
+
const len = data.length;
|
|
1737
|
+
for (let pos = 0; pos < len; ) {
|
|
1738
|
+
const take = Math.min(blockLen - this.pos, len - pos);
|
|
1739
|
+
if (take === blockLen) {
|
|
1740
|
+
const dataView = createView(data);
|
|
1741
|
+
for (; blockLen <= len - pos; pos += blockLen)
|
|
1742
|
+
this.process(dataView, pos);
|
|
1743
|
+
continue;
|
|
1744
|
+
}
|
|
1745
|
+
buffer.set(data.subarray(pos, pos + take), this.pos);
|
|
1746
|
+
this.pos += take;
|
|
1747
|
+
pos += take;
|
|
1748
|
+
if (this.pos === blockLen) {
|
|
1749
|
+
this.process(view, 0);
|
|
1750
|
+
this.pos = 0;
|
|
1751
|
+
}
|
|
1752
|
+
}
|
|
1753
|
+
this.length += data.length;
|
|
1754
|
+
this.roundClean();
|
|
1755
|
+
return this;
|
|
1756
|
+
}
|
|
1757
|
+
digestInto(out) {
|
|
1758
|
+
aexists(this);
|
|
1759
|
+
aoutput(out, this);
|
|
1760
|
+
this.finished = true;
|
|
1761
|
+
const { buffer, view, blockLen, isLE: isLE2 } = this;
|
|
1762
|
+
let { pos } = this;
|
|
1763
|
+
buffer[pos++] = 128;
|
|
1764
|
+
clean(this.buffer.subarray(pos));
|
|
1765
|
+
if (this.padOffset > blockLen - pos) {
|
|
1766
|
+
this.process(view, 0);
|
|
1767
|
+
pos = 0;
|
|
1768
|
+
}
|
|
1769
|
+
for (let i = pos; i < blockLen; i++)
|
|
1770
|
+
buffer[i] = 0;
|
|
1771
|
+
view.setBigUint64(blockLen - 8, BigInt(this.length * 8), isLE2);
|
|
1772
|
+
this.process(view, 0);
|
|
1773
|
+
const oview = createView(out);
|
|
1774
|
+
const len = this.outputLen;
|
|
1775
|
+
if (len % 4)
|
|
1776
|
+
throw new Error("_sha2: outputLen must be aligned to 32bit");
|
|
1777
|
+
const outLen = len / 4;
|
|
1778
|
+
const state = this.get();
|
|
1779
|
+
if (outLen > state.length)
|
|
1780
|
+
throw new Error("_sha2: outputLen bigger than state");
|
|
1781
|
+
for (let i = 0; i < outLen; i++)
|
|
1782
|
+
oview.setUint32(4 * i, state[i], isLE2);
|
|
1783
|
+
}
|
|
1784
|
+
digest() {
|
|
1785
|
+
const { buffer, outputLen } = this;
|
|
1786
|
+
this.digestInto(buffer);
|
|
1787
|
+
const res = buffer.slice(0, outputLen);
|
|
1788
|
+
this.destroy();
|
|
1789
|
+
return res;
|
|
1790
|
+
}
|
|
1791
|
+
_cloneInto(to) {
|
|
1792
|
+
to ||= new this.constructor();
|
|
1793
|
+
to.set(...this.get());
|
|
1794
|
+
const { blockLen, buffer, length, finished, destroyed, pos } = this;
|
|
1795
|
+
to.destroyed = destroyed;
|
|
1796
|
+
to.finished = finished;
|
|
1797
|
+
to.length = length;
|
|
1798
|
+
to.pos = pos;
|
|
1799
|
+
if (length % blockLen)
|
|
1800
|
+
to.buffer.set(buffer);
|
|
1801
|
+
return to;
|
|
1802
|
+
}
|
|
1803
|
+
clone() {
|
|
1804
|
+
return this._cloneInto();
|
|
1805
|
+
}
|
|
1806
|
+
};
|
|
1807
|
+
var SHA256_IV = /* @__PURE__ */ Uint32Array.from([
|
|
1808
|
+
1779033703,
|
|
1809
|
+
3144134277,
|
|
1810
|
+
1013904242,
|
|
1811
|
+
2773480762,
|
|
1812
|
+
1359893119,
|
|
1813
|
+
2600822924,
|
|
1814
|
+
528734635,
|
|
1815
|
+
1541459225
|
|
1816
|
+
]);
|
|
1817
|
+
var SHA512_IV = /* @__PURE__ */ Uint32Array.from([
|
|
1818
|
+
1779033703,
|
|
1819
|
+
4089235720,
|
|
1820
|
+
3144134277,
|
|
1821
|
+
2227873595,
|
|
1822
|
+
1013904242,
|
|
1823
|
+
4271175723,
|
|
1824
|
+
2773480762,
|
|
1825
|
+
1595750129,
|
|
1826
|
+
1359893119,
|
|
1827
|
+
2917565137,
|
|
1828
|
+
2600822924,
|
|
1829
|
+
725511199,
|
|
1830
|
+
528734635,
|
|
1831
|
+
4215389547,
|
|
1832
|
+
1541459225,
|
|
1833
|
+
327033209
|
|
1834
|
+
]);
|
|
1835
|
+
|
|
1836
|
+
// node_modules/@noble/hashes/sha2.js
|
|
1837
|
+
var SHA256_K = /* @__PURE__ */ Uint32Array.from([
|
|
1838
|
+
1116352408,
|
|
1839
|
+
1899447441,
|
|
1840
|
+
3049323471,
|
|
1841
|
+
3921009573,
|
|
1842
|
+
961987163,
|
|
1843
|
+
1508970993,
|
|
1844
|
+
2453635748,
|
|
1845
|
+
2870763221,
|
|
1846
|
+
3624381080,
|
|
1847
|
+
310598401,
|
|
1848
|
+
607225278,
|
|
1849
|
+
1426881987,
|
|
1850
|
+
1925078388,
|
|
1851
|
+
2162078206,
|
|
1852
|
+
2614888103,
|
|
1853
|
+
3248222580,
|
|
1854
|
+
3835390401,
|
|
1855
|
+
4022224774,
|
|
1856
|
+
264347078,
|
|
1857
|
+
604807628,
|
|
1858
|
+
770255983,
|
|
1859
|
+
1249150122,
|
|
1860
|
+
1555081692,
|
|
1861
|
+
1996064986,
|
|
1862
|
+
2554220882,
|
|
1863
|
+
2821834349,
|
|
1864
|
+
2952996808,
|
|
1865
|
+
3210313671,
|
|
1866
|
+
3336571891,
|
|
1867
|
+
3584528711,
|
|
1868
|
+
113926993,
|
|
1869
|
+
338241895,
|
|
1870
|
+
666307205,
|
|
1871
|
+
773529912,
|
|
1872
|
+
1294757372,
|
|
1873
|
+
1396182291,
|
|
1874
|
+
1695183700,
|
|
1875
|
+
1986661051,
|
|
1876
|
+
2177026350,
|
|
1877
|
+
2456956037,
|
|
1878
|
+
2730485921,
|
|
1879
|
+
2820302411,
|
|
1880
|
+
3259730800,
|
|
1881
|
+
3345764771,
|
|
1882
|
+
3516065817,
|
|
1883
|
+
3600352804,
|
|
1884
|
+
4094571909,
|
|
1885
|
+
275423344,
|
|
1886
|
+
430227734,
|
|
1887
|
+
506948616,
|
|
1888
|
+
659060556,
|
|
1889
|
+
883997877,
|
|
1890
|
+
958139571,
|
|
1891
|
+
1322822218,
|
|
1892
|
+
1537002063,
|
|
1893
|
+
1747873779,
|
|
1894
|
+
1955562222,
|
|
1895
|
+
2024104815,
|
|
1896
|
+
2227730452,
|
|
1897
|
+
2361852424,
|
|
1898
|
+
2428436474,
|
|
1899
|
+
2756734187,
|
|
1900
|
+
3204031479,
|
|
1901
|
+
3329325298
|
|
1902
|
+
]);
|
|
1903
|
+
var SHA256_W = /* @__PURE__ */ new Uint32Array(64);
|
|
1904
|
+
var SHA2_32B = class extends HashMD {
|
|
1905
|
+
constructor(outputLen) {
|
|
1906
|
+
super(64, outputLen, 8, false);
|
|
1907
|
+
}
|
|
1908
|
+
get() {
|
|
1909
|
+
const { A, B, C, D: D2, E, F: F3, G, H } = this;
|
|
1910
|
+
return [A, B, C, D2, E, F3, G, H];
|
|
1911
|
+
}
|
|
1912
|
+
// prettier-ignore
|
|
1913
|
+
set(A, B, C, D2, E, F3, G, H) {
|
|
1914
|
+
this.A = A | 0;
|
|
1915
|
+
this.B = B | 0;
|
|
1916
|
+
this.C = C | 0;
|
|
1917
|
+
this.D = D2 | 0;
|
|
1918
|
+
this.E = E | 0;
|
|
1919
|
+
this.F = F3 | 0;
|
|
1920
|
+
this.G = G | 0;
|
|
1921
|
+
this.H = H | 0;
|
|
1922
|
+
}
|
|
1923
|
+
process(view, offset) {
|
|
1924
|
+
for (let i = 0; i < 16; i++, offset += 4)
|
|
1925
|
+
SHA256_W[i] = view.getUint32(offset, false);
|
|
1926
|
+
for (let i = 16; i < 64; i++) {
|
|
1927
|
+
const W15 = SHA256_W[i - 15];
|
|
1928
|
+
const W2 = SHA256_W[i - 2];
|
|
1929
|
+
const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ W15 >>> 3;
|
|
1930
|
+
const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ W2 >>> 10;
|
|
1931
|
+
SHA256_W[i] = s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16] | 0;
|
|
1932
|
+
}
|
|
1933
|
+
let { A, B, C, D: D2, E, F: F3, G, H } = this;
|
|
1934
|
+
for (let i = 0; i < 64; i++) {
|
|
1935
|
+
const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);
|
|
1936
|
+
const T1 = H + sigma1 + Chi(E, F3, G) + SHA256_K[i] + SHA256_W[i] | 0;
|
|
1937
|
+
const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);
|
|
1938
|
+
const T2 = sigma0 + Maj(A, B, C) | 0;
|
|
1939
|
+
H = G;
|
|
1940
|
+
G = F3;
|
|
1941
|
+
F3 = E;
|
|
1942
|
+
E = D2 + T1 | 0;
|
|
1943
|
+
D2 = C;
|
|
1944
|
+
C = B;
|
|
1945
|
+
B = A;
|
|
1946
|
+
A = T1 + T2 | 0;
|
|
1947
|
+
}
|
|
1948
|
+
A = A + this.A | 0;
|
|
1949
|
+
B = B + this.B | 0;
|
|
1950
|
+
C = C + this.C | 0;
|
|
1951
|
+
D2 = D2 + this.D | 0;
|
|
1952
|
+
E = E + this.E | 0;
|
|
1953
|
+
F3 = F3 + this.F | 0;
|
|
1954
|
+
G = G + this.G | 0;
|
|
1955
|
+
H = H + this.H | 0;
|
|
1956
|
+
this.set(A, B, C, D2, E, F3, G, H);
|
|
1957
|
+
}
|
|
1958
|
+
roundClean() {
|
|
1959
|
+
clean(SHA256_W);
|
|
1960
|
+
}
|
|
1961
|
+
destroy() {
|
|
1962
|
+
this.destroyed = true;
|
|
1963
|
+
this.set(0, 0, 0, 0, 0, 0, 0, 0);
|
|
1964
|
+
clean(this.buffer);
|
|
1965
|
+
}
|
|
1966
|
+
};
|
|
1967
|
+
var _SHA256 = class extends SHA2_32B {
|
|
1968
|
+
// We cannot use array here since array allows indexing by variable
|
|
1969
|
+
// which means optimizer/compiler cannot use registers.
|
|
1970
|
+
A = SHA256_IV[0] | 0;
|
|
1971
|
+
B = SHA256_IV[1] | 0;
|
|
1972
|
+
C = SHA256_IV[2] | 0;
|
|
1973
|
+
D = SHA256_IV[3] | 0;
|
|
1974
|
+
E = SHA256_IV[4] | 0;
|
|
1975
|
+
F = SHA256_IV[5] | 0;
|
|
1976
|
+
G = SHA256_IV[6] | 0;
|
|
1977
|
+
H = SHA256_IV[7] | 0;
|
|
1978
|
+
constructor() {
|
|
1979
|
+
super(32);
|
|
1980
|
+
}
|
|
1981
|
+
};
|
|
1982
|
+
var K512 = /* @__PURE__ */ (() => split([
|
|
1983
|
+
"0x428a2f98d728ae22",
|
|
1984
|
+
"0x7137449123ef65cd",
|
|
1985
|
+
"0xb5c0fbcfec4d3b2f",
|
|
1986
|
+
"0xe9b5dba58189dbbc",
|
|
1987
|
+
"0x3956c25bf348b538",
|
|
1988
|
+
"0x59f111f1b605d019",
|
|
1989
|
+
"0x923f82a4af194f9b",
|
|
1990
|
+
"0xab1c5ed5da6d8118",
|
|
1991
|
+
"0xd807aa98a3030242",
|
|
1992
|
+
"0x12835b0145706fbe",
|
|
1993
|
+
"0x243185be4ee4b28c",
|
|
1994
|
+
"0x550c7dc3d5ffb4e2",
|
|
1995
|
+
"0x72be5d74f27b896f",
|
|
1996
|
+
"0x80deb1fe3b1696b1",
|
|
1997
|
+
"0x9bdc06a725c71235",
|
|
1998
|
+
"0xc19bf174cf692694",
|
|
1999
|
+
"0xe49b69c19ef14ad2",
|
|
2000
|
+
"0xefbe4786384f25e3",
|
|
2001
|
+
"0x0fc19dc68b8cd5b5",
|
|
2002
|
+
"0x240ca1cc77ac9c65",
|
|
2003
|
+
"0x2de92c6f592b0275",
|
|
2004
|
+
"0x4a7484aa6ea6e483",
|
|
2005
|
+
"0x5cb0a9dcbd41fbd4",
|
|
2006
|
+
"0x76f988da831153b5",
|
|
2007
|
+
"0x983e5152ee66dfab",
|
|
2008
|
+
"0xa831c66d2db43210",
|
|
2009
|
+
"0xb00327c898fb213f",
|
|
2010
|
+
"0xbf597fc7beef0ee4",
|
|
2011
|
+
"0xc6e00bf33da88fc2",
|
|
2012
|
+
"0xd5a79147930aa725",
|
|
2013
|
+
"0x06ca6351e003826f",
|
|
2014
|
+
"0x142929670a0e6e70",
|
|
2015
|
+
"0x27b70a8546d22ffc",
|
|
2016
|
+
"0x2e1b21385c26c926",
|
|
2017
|
+
"0x4d2c6dfc5ac42aed",
|
|
2018
|
+
"0x53380d139d95b3df",
|
|
2019
|
+
"0x650a73548baf63de",
|
|
2020
|
+
"0x766a0abb3c77b2a8",
|
|
2021
|
+
"0x81c2c92e47edaee6",
|
|
2022
|
+
"0x92722c851482353b",
|
|
2023
|
+
"0xa2bfe8a14cf10364",
|
|
2024
|
+
"0xa81a664bbc423001",
|
|
2025
|
+
"0xc24b8b70d0f89791",
|
|
2026
|
+
"0xc76c51a30654be30",
|
|
2027
|
+
"0xd192e819d6ef5218",
|
|
2028
|
+
"0xd69906245565a910",
|
|
2029
|
+
"0xf40e35855771202a",
|
|
2030
|
+
"0x106aa07032bbd1b8",
|
|
2031
|
+
"0x19a4c116b8d2d0c8",
|
|
2032
|
+
"0x1e376c085141ab53",
|
|
2033
|
+
"0x2748774cdf8eeb99",
|
|
2034
|
+
"0x34b0bcb5e19b48a8",
|
|
2035
|
+
"0x391c0cb3c5c95a63",
|
|
2036
|
+
"0x4ed8aa4ae3418acb",
|
|
2037
|
+
"0x5b9cca4f7763e373",
|
|
2038
|
+
"0x682e6ff3d6b2b8a3",
|
|
2039
|
+
"0x748f82ee5defb2fc",
|
|
2040
|
+
"0x78a5636f43172f60",
|
|
2041
|
+
"0x84c87814a1f0ab72",
|
|
2042
|
+
"0x8cc702081a6439ec",
|
|
2043
|
+
"0x90befffa23631e28",
|
|
2044
|
+
"0xa4506cebde82bde9",
|
|
2045
|
+
"0xbef9a3f7b2c67915",
|
|
2046
|
+
"0xc67178f2e372532b",
|
|
2047
|
+
"0xca273eceea26619c",
|
|
2048
|
+
"0xd186b8c721c0c207",
|
|
2049
|
+
"0xeada7dd6cde0eb1e",
|
|
2050
|
+
"0xf57d4f7fee6ed178",
|
|
2051
|
+
"0x06f067aa72176fba",
|
|
2052
|
+
"0x0a637dc5a2c898a6",
|
|
2053
|
+
"0x113f9804bef90dae",
|
|
2054
|
+
"0x1b710b35131c471b",
|
|
2055
|
+
"0x28db77f523047d84",
|
|
2056
|
+
"0x32caab7b40c72493",
|
|
2057
|
+
"0x3c9ebe0a15c9bebc",
|
|
2058
|
+
"0x431d67c49c100d4c",
|
|
2059
|
+
"0x4cc5d4becb3e42b6",
|
|
2060
|
+
"0x597f299cfc657e2a",
|
|
2061
|
+
"0x5fcb6fab3ad6faec",
|
|
2062
|
+
"0x6c44198c4a475817"
|
|
2063
|
+
].map((n) => BigInt(n))))();
|
|
2064
|
+
var SHA512_Kh = /* @__PURE__ */ (() => K512[0])();
|
|
2065
|
+
var SHA512_Kl = /* @__PURE__ */ (() => K512[1])();
|
|
2066
|
+
var SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);
|
|
2067
|
+
var SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);
|
|
2068
|
+
var SHA2_64B = class extends HashMD {
|
|
2069
|
+
constructor(outputLen) {
|
|
2070
|
+
super(128, outputLen, 16, false);
|
|
2071
|
+
}
|
|
2072
|
+
// prettier-ignore
|
|
2073
|
+
get() {
|
|
2074
|
+
const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;
|
|
2075
|
+
return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];
|
|
2076
|
+
}
|
|
2077
|
+
// prettier-ignore
|
|
2078
|
+
set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {
|
|
2079
|
+
this.Ah = Ah | 0;
|
|
2080
|
+
this.Al = Al | 0;
|
|
2081
|
+
this.Bh = Bh | 0;
|
|
2082
|
+
this.Bl = Bl | 0;
|
|
2083
|
+
this.Ch = Ch | 0;
|
|
2084
|
+
this.Cl = Cl | 0;
|
|
2085
|
+
this.Dh = Dh | 0;
|
|
2086
|
+
this.Dl = Dl | 0;
|
|
2087
|
+
this.Eh = Eh | 0;
|
|
2088
|
+
this.El = El | 0;
|
|
2089
|
+
this.Fh = Fh | 0;
|
|
2090
|
+
this.Fl = Fl | 0;
|
|
2091
|
+
this.Gh = Gh | 0;
|
|
2092
|
+
this.Gl = Gl | 0;
|
|
2093
|
+
this.Hh = Hh | 0;
|
|
2094
|
+
this.Hl = Hl | 0;
|
|
2095
|
+
}
|
|
2096
|
+
process(view, offset) {
|
|
2097
|
+
for (let i = 0; i < 16; i++, offset += 4) {
|
|
2098
|
+
SHA512_W_H[i] = view.getUint32(offset);
|
|
2099
|
+
SHA512_W_L[i] = view.getUint32(offset += 4);
|
|
2100
|
+
}
|
|
2101
|
+
for (let i = 16; i < 80; i++) {
|
|
2102
|
+
const W15h = SHA512_W_H[i - 15] | 0;
|
|
2103
|
+
const W15l = SHA512_W_L[i - 15] | 0;
|
|
2104
|
+
const s0h = rotrSH(W15h, W15l, 1) ^ rotrSH(W15h, W15l, 8) ^ shrSH(W15h, W15l, 7);
|
|
2105
|
+
const s0l = rotrSL(W15h, W15l, 1) ^ rotrSL(W15h, W15l, 8) ^ shrSL(W15h, W15l, 7);
|
|
2106
|
+
const W2h = SHA512_W_H[i - 2] | 0;
|
|
2107
|
+
const W2l = SHA512_W_L[i - 2] | 0;
|
|
2108
|
+
const s1h = rotrSH(W2h, W2l, 19) ^ rotrBH(W2h, W2l, 61) ^ shrSH(W2h, W2l, 6);
|
|
2109
|
+
const s1l = rotrSL(W2h, W2l, 19) ^ rotrBL(W2h, W2l, 61) ^ shrSL(W2h, W2l, 6);
|
|
2110
|
+
const SUMl = add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);
|
|
2111
|
+
const SUMh = add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);
|
|
2112
|
+
SHA512_W_H[i] = SUMh | 0;
|
|
2113
|
+
SHA512_W_L[i] = SUMl | 0;
|
|
2114
|
+
}
|
|
2115
|
+
let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;
|
|
2116
|
+
for (let i = 0; i < 80; i++) {
|
|
2117
|
+
const sigma1h = rotrSH(Eh, El, 14) ^ rotrSH(Eh, El, 18) ^ rotrBH(Eh, El, 41);
|
|
2118
|
+
const sigma1l = rotrSL(Eh, El, 14) ^ rotrSL(Eh, El, 18) ^ rotrBL(Eh, El, 41);
|
|
2119
|
+
const CHIh = Eh & Fh ^ ~Eh & Gh;
|
|
2120
|
+
const CHIl = El & Fl ^ ~El & Gl;
|
|
2121
|
+
const T1ll = add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);
|
|
2122
|
+
const T1h = add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);
|
|
2123
|
+
const T1l = T1ll | 0;
|
|
2124
|
+
const sigma0h = rotrSH(Ah, Al, 28) ^ rotrBH(Ah, Al, 34) ^ rotrBH(Ah, Al, 39);
|
|
2125
|
+
const sigma0l = rotrSL(Ah, Al, 28) ^ rotrBL(Ah, Al, 34) ^ rotrBL(Ah, Al, 39);
|
|
2126
|
+
const MAJh = Ah & Bh ^ Ah & Ch ^ Bh & Ch;
|
|
2127
|
+
const MAJl = Al & Bl ^ Al & Cl ^ Bl & Cl;
|
|
2128
|
+
Hh = Gh | 0;
|
|
2129
|
+
Hl = Gl | 0;
|
|
2130
|
+
Gh = Fh | 0;
|
|
2131
|
+
Gl = Fl | 0;
|
|
2132
|
+
Fh = Eh | 0;
|
|
2133
|
+
Fl = El | 0;
|
|
2134
|
+
({ h: Eh, l: El } = add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));
|
|
2135
|
+
Dh = Ch | 0;
|
|
2136
|
+
Dl = Cl | 0;
|
|
2137
|
+
Ch = Bh | 0;
|
|
2138
|
+
Cl = Bl | 0;
|
|
2139
|
+
Bh = Ah | 0;
|
|
2140
|
+
Bl = Al | 0;
|
|
2141
|
+
const All = add3L(T1l, sigma0l, MAJl);
|
|
2142
|
+
Ah = add3H(All, T1h, sigma0h, MAJh);
|
|
2143
|
+
Al = All | 0;
|
|
2144
|
+
}
|
|
2145
|
+
({ h: Ah, l: Al } = add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));
|
|
2146
|
+
({ h: Bh, l: Bl } = add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));
|
|
2147
|
+
({ h: Ch, l: Cl } = add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));
|
|
2148
|
+
({ h: Dh, l: Dl } = add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));
|
|
2149
|
+
({ h: Eh, l: El } = add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));
|
|
2150
|
+
({ h: Fh, l: Fl } = add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));
|
|
2151
|
+
({ h: Gh, l: Gl } = add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));
|
|
2152
|
+
({ h: Hh, l: Hl } = add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));
|
|
2153
|
+
this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);
|
|
2154
|
+
}
|
|
2155
|
+
roundClean() {
|
|
2156
|
+
clean(SHA512_W_H, SHA512_W_L);
|
|
2157
|
+
}
|
|
2158
|
+
destroy() {
|
|
2159
|
+
this.destroyed = true;
|
|
2160
|
+
clean(this.buffer);
|
|
2161
|
+
this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
|
|
2162
|
+
}
|
|
2163
|
+
};
|
|
2164
|
+
var _SHA512 = class extends SHA2_64B {
|
|
2165
|
+
Ah = SHA512_IV[0] | 0;
|
|
2166
|
+
Al = SHA512_IV[1] | 0;
|
|
2167
|
+
Bh = SHA512_IV[2] | 0;
|
|
2168
|
+
Bl = SHA512_IV[3] | 0;
|
|
2169
|
+
Ch = SHA512_IV[4] | 0;
|
|
2170
|
+
Cl = SHA512_IV[5] | 0;
|
|
2171
|
+
Dh = SHA512_IV[6] | 0;
|
|
2172
|
+
Dl = SHA512_IV[7] | 0;
|
|
2173
|
+
Eh = SHA512_IV[8] | 0;
|
|
2174
|
+
El = SHA512_IV[9] | 0;
|
|
2175
|
+
Fh = SHA512_IV[10] | 0;
|
|
2176
|
+
Fl = SHA512_IV[11] | 0;
|
|
2177
|
+
Gh = SHA512_IV[12] | 0;
|
|
2178
|
+
Gl = SHA512_IV[13] | 0;
|
|
2179
|
+
Hh = SHA512_IV[14] | 0;
|
|
2180
|
+
Hl = SHA512_IV[15] | 0;
|
|
2181
|
+
constructor() {
|
|
2182
|
+
super(64);
|
|
2183
|
+
}
|
|
2184
|
+
};
|
|
2185
|
+
var sha256 = /* @__PURE__ */ createHasher(
|
|
2186
|
+
() => new _SHA256(),
|
|
2187
|
+
/* @__PURE__ */ oidNist(1)
|
|
2188
|
+
);
|
|
2189
|
+
var sha512 = /* @__PURE__ */ createHasher(
|
|
2190
|
+
() => new _SHA512(),
|
|
2191
|
+
/* @__PURE__ */ oidNist(3)
|
|
2192
|
+
);
|
|
2193
|
+
|
|
2194
|
+
// node_modules/@noble/post-quantum/slh-dsa.js
|
|
2195
|
+
var PARAMS3 = /* @__PURE__ */ (() => Object.freeze({
|
|
2196
|
+
"128f": Object.freeze({ W: 16, N: 16, H: 66, D: 22, K: 33, A: 6, securityLevel: 128 }),
|
|
2197
|
+
"128s": Object.freeze({ W: 16, N: 16, H: 63, D: 7, K: 14, A: 12, securityLevel: 128 }),
|
|
2198
|
+
"192f": Object.freeze({ W: 16, N: 24, H: 66, D: 22, K: 33, A: 8, securityLevel: 192 }),
|
|
2199
|
+
"192s": Object.freeze({ W: 16, N: 24, H: 63, D: 7, K: 17, A: 14, securityLevel: 192 }),
|
|
2200
|
+
"256f": Object.freeze({ W: 16, N: 32, H: 68, D: 17, K: 35, A: 9, securityLevel: 256 }),
|
|
2201
|
+
"256s": Object.freeze({ W: 16, N: 32, H: 64, D: 8, K: 22, A: 14, securityLevel: 256 })
|
|
2202
|
+
}))();
|
|
2203
|
+
var AddressType = {
|
|
2204
|
+
WOTS: 0,
|
|
2205
|
+
WOTSPK: 1,
|
|
2206
|
+
HASHTREE: 2,
|
|
2207
|
+
FORSTREE: 3,
|
|
2208
|
+
FORSPK: 4,
|
|
2209
|
+
WOTSPRF: 5,
|
|
2210
|
+
FORSPRF: 6
|
|
2211
|
+
};
|
|
2212
|
+
function hexToNumber(hex) {
|
|
2213
|
+
if (typeof hex !== "string")
|
|
2214
|
+
throw new Error("hex string expected, got " + typeof hex);
|
|
2215
|
+
return BigInt(hex === "" ? "0" : "0x" + hex);
|
|
2216
|
+
}
|
|
2217
|
+
function bytesToNumberBE(bytes) {
|
|
2218
|
+
return hexToNumber(bytesToHex(bytes));
|
|
2219
|
+
}
|
|
2220
|
+
function numberToBytesBE(n, len) {
|
|
2221
|
+
return hexToBytes(n.toString(16).padStart(len * 2, "0"));
|
|
2222
|
+
}
|
|
2223
|
+
var base2b = (outLen, b) => {
|
|
2224
|
+
const mask = getMask(b);
|
|
2225
|
+
return (bytes) => {
|
|
2226
|
+
const baseB = new Uint32Array(outLen);
|
|
2227
|
+
for (let out = 0, pos = 0, bits = 0, total = 0; out < outLen; out++) {
|
|
2228
|
+
while (bits < b) {
|
|
2229
|
+
total = total << 8 | bytes[pos++];
|
|
2230
|
+
bits += 8;
|
|
2231
|
+
}
|
|
2232
|
+
bits -= b;
|
|
2233
|
+
baseB[out] = total >>> bits & mask;
|
|
2234
|
+
}
|
|
2235
|
+
return baseB;
|
|
2236
|
+
};
|
|
2237
|
+
};
|
|
2238
|
+
function getMaskBig(bits) {
|
|
2239
|
+
return (1n << BigInt(bits)) - 1n;
|
|
2240
|
+
}
|
|
2241
|
+
function gen(opts2, hashOpts_) {
|
|
2242
|
+
const hashOpts = hashOpts_;
|
|
2243
|
+
const { N: N3, W, H, D: D2, K, A, securityLevel } = opts2;
|
|
2244
|
+
const getContext = hashOpts.getContext(opts2);
|
|
2245
|
+
if (W !== 16)
|
|
2246
|
+
throw new Error("Unsupported Winternitz parameter");
|
|
2247
|
+
const WOTS_LOGW = 4;
|
|
2248
|
+
const WOTS_LEN1 = Math.floor(8 * N3 / WOTS_LOGW);
|
|
2249
|
+
const WOTS_LEN2 = N3 <= 8 ? 2 : N3 <= 136 ? 3 : 4;
|
|
2250
|
+
const TREE_HEIGHT = Math.floor(H / D2);
|
|
2251
|
+
const WOTS_LEN = WOTS_LEN1 + WOTS_LEN2;
|
|
2252
|
+
let ADDR_BYTES = 22;
|
|
2253
|
+
let OFFSET_LAYER = 0;
|
|
2254
|
+
let OFFSET_TREE = 1;
|
|
2255
|
+
let OFFSET_TYPE = 9;
|
|
2256
|
+
let OFFSET_KP_ADDR2 = 12;
|
|
2257
|
+
let OFFSET_KP_ADDR1 = 13;
|
|
2258
|
+
let OFFSET_CHAIN_ADDR = 17;
|
|
2259
|
+
let OFFSET_TREE_INDEX = 18;
|
|
2260
|
+
let OFFSET_HASH_ADDR = 21;
|
|
2261
|
+
if (!hashOpts.isCompressed) {
|
|
2262
|
+
ADDR_BYTES = 32;
|
|
2263
|
+
OFFSET_LAYER += 3;
|
|
2264
|
+
OFFSET_TREE += 7;
|
|
2265
|
+
OFFSET_TYPE += 10;
|
|
2266
|
+
OFFSET_KP_ADDR2 += 10;
|
|
2267
|
+
OFFSET_KP_ADDR1 += 10;
|
|
2268
|
+
OFFSET_CHAIN_ADDR += 10;
|
|
2269
|
+
OFFSET_TREE_INDEX += 10;
|
|
2270
|
+
OFFSET_HASH_ADDR += 10;
|
|
2271
|
+
}
|
|
2272
|
+
const setAddr = (opts3, addr = new Uint8Array(ADDR_BYTES)) => {
|
|
2273
|
+
const { type, height, tree, layer, index, chain, hash, keypair } = opts3;
|
|
2274
|
+
const { subtreeAddr, keypairAddr } = opts3;
|
|
2275
|
+
const v = createView(addr);
|
|
2276
|
+
if (height !== void 0)
|
|
2277
|
+
addr[OFFSET_CHAIN_ADDR] = height;
|
|
2278
|
+
if (layer !== void 0)
|
|
2279
|
+
addr[OFFSET_LAYER] = layer;
|
|
2280
|
+
if (type !== void 0)
|
|
2281
|
+
addr[OFFSET_TYPE] = type;
|
|
2282
|
+
if (chain !== void 0)
|
|
2283
|
+
addr[OFFSET_CHAIN_ADDR] = chain;
|
|
2284
|
+
if (hash !== void 0)
|
|
2285
|
+
addr[OFFSET_HASH_ADDR] = hash;
|
|
2286
|
+
if (index !== void 0)
|
|
2287
|
+
v.setUint32(OFFSET_TREE_INDEX, index, false);
|
|
2288
|
+
if (subtreeAddr)
|
|
2289
|
+
addr.set(subtreeAddr.subarray(0, OFFSET_TREE + 8));
|
|
2290
|
+
if (tree !== void 0)
|
|
2291
|
+
v.setBigUint64(OFFSET_TREE, tree, false);
|
|
2292
|
+
if (keypair !== void 0) {
|
|
2293
|
+
addr[OFFSET_KP_ADDR1] = keypair;
|
|
2294
|
+
if (TREE_HEIGHT > 8)
|
|
2295
|
+
addr[OFFSET_KP_ADDR2] = keypair >>> 8;
|
|
2296
|
+
}
|
|
2297
|
+
if (keypairAddr) {
|
|
2298
|
+
addr.set(keypairAddr.subarray(0, OFFSET_TREE + 8));
|
|
2299
|
+
addr[OFFSET_KP_ADDR1] = keypairAddr[OFFSET_KP_ADDR1];
|
|
2300
|
+
if (TREE_HEIGHT > 8)
|
|
2301
|
+
addr[OFFSET_KP_ADDR2] = keypairAddr[OFFSET_KP_ADDR2];
|
|
2302
|
+
}
|
|
2303
|
+
return addr;
|
|
2304
|
+
};
|
|
2305
|
+
const chainCoder = base2b(WOTS_LEN2, WOTS_LOGW);
|
|
2306
|
+
const chainLengths = (msg) => {
|
|
2307
|
+
const W1 = base2b(WOTS_LEN1, WOTS_LOGW)(msg);
|
|
2308
|
+
let csum = 0;
|
|
2309
|
+
for (let i = 0; i < W1.length; i++)
|
|
2310
|
+
csum += W - 1 - W1[i];
|
|
2311
|
+
csum <<= (8 - WOTS_LEN2 * WOTS_LOGW % 8) % 8;
|
|
2312
|
+
const W2 = chainCoder(numberToBytesBE(csum, Math.ceil(WOTS_LEN2 * WOTS_LOGW / 8)));
|
|
2313
|
+
const lengths = new Uint32Array(WOTS_LEN);
|
|
2314
|
+
lengths.set(W1);
|
|
2315
|
+
lengths.set(W2, W1.length);
|
|
2316
|
+
return lengths;
|
|
2317
|
+
};
|
|
2318
|
+
const messageToIndices = base2b(K, A);
|
|
2319
|
+
const TREE_BITS = TREE_HEIGHT * (D2 - 1);
|
|
2320
|
+
const LEAF_BITS = TREE_HEIGHT;
|
|
2321
|
+
const hashMsgCoder = splitCoder("hashedMessage", Math.ceil(A * K / 8), Math.ceil(TREE_BITS / 8), Math.ceil(TREE_HEIGHT / 8));
|
|
2322
|
+
const hashMessage = (R, pkSeed, msg, context) => {
|
|
2323
|
+
const rawContext = context;
|
|
2324
|
+
const digest = rawContext.Hmsg(R, pkSeed, msg, hashMsgCoder.bytesLen);
|
|
2325
|
+
const [md, tmpIdxTree, tmpIdxLeaf] = hashMsgCoder.decode(digest);
|
|
2326
|
+
const tree = bytesToNumberBE(tmpIdxTree) & getMaskBig(TREE_BITS);
|
|
2327
|
+
const leafIdx = Number(bytesToNumberBE(tmpIdxLeaf)) & getMask(LEAF_BITS);
|
|
2328
|
+
return { tree, leafIdx, md };
|
|
2329
|
+
};
|
|
2330
|
+
const treehash = (height, fn) => function treehash_i(context, leafIdx, idxOffset, treeAddr, info) {
|
|
2331
|
+
const rawContext = context;
|
|
2332
|
+
const leafFn = fn;
|
|
2333
|
+
const maxIdx = (1 << height) - 1;
|
|
2334
|
+
const stack = new Uint8Array(height * N3);
|
|
2335
|
+
const authPath = new Uint8Array(height * N3);
|
|
2336
|
+
for (let idx = 0; ; idx++) {
|
|
2337
|
+
const current = new Uint8Array(2 * N3);
|
|
2338
|
+
const cur0 = current.subarray(0, N3);
|
|
2339
|
+
const cur1 = current.subarray(N3);
|
|
2340
|
+
const addrOffset = idx + idxOffset;
|
|
2341
|
+
cur1.set(leafFn(leafIdx, addrOffset, rawContext, info));
|
|
2342
|
+
let h = 0;
|
|
2343
|
+
for (let i = idx, o = idxOffset, l = leafIdx; ; h++, i >>>= 1, l >>>= 1, o >>>= 1) {
|
|
2344
|
+
if (h === height)
|
|
2345
|
+
return { root: cur1, authPath };
|
|
2346
|
+
if ((i ^ l) === 1)
|
|
2347
|
+
authPath.subarray(h * N3).set(cur1);
|
|
2348
|
+
if ((i & 1) === 0 && idx < maxIdx)
|
|
2349
|
+
break;
|
|
2350
|
+
setAddr({ height: h + 1, index: (i >> 1) + (o >> 1) }, treeAddr);
|
|
2351
|
+
cur0.set(stack.subarray(h * N3).subarray(0, N3));
|
|
2352
|
+
cur1.set(rawContext.thashN(2, current, treeAddr));
|
|
2353
|
+
}
|
|
2354
|
+
stack.subarray(h * N3).set(cur1);
|
|
2355
|
+
}
|
|
2356
|
+
throw new Error("Unreachable code path reached, report this error");
|
|
2357
|
+
};
|
|
2358
|
+
const wotsTreehash = treehash(TREE_HEIGHT, (leafIdx, addrOffset, context, info) => {
|
|
2359
|
+
const rawContext = context;
|
|
2360
|
+
const wotsPk = new Uint8Array(WOTS_LEN * N3);
|
|
2361
|
+
const wotsKmask = addrOffset === leafIdx ? 0 : ~0 >>> 0;
|
|
2362
|
+
setAddr({ keypair: addrOffset }, info.leafAddr);
|
|
2363
|
+
setAddr({ keypair: addrOffset }, info.pkAddr);
|
|
2364
|
+
for (let i = 0; i < WOTS_LEN; i++) {
|
|
2365
|
+
const wotsK = info.wotsSteps[i] | wotsKmask;
|
|
2366
|
+
const pk = wotsPk.subarray(i * N3, (i + 1) * N3);
|
|
2367
|
+
setAddr({ chain: i, hash: 0, type: AddressType.WOTSPRF }, info.leafAddr);
|
|
2368
|
+
pk.set(rawContext.PRFaddr(info.leafAddr));
|
|
2369
|
+
setAddr({ type: AddressType.WOTS }, info.leafAddr);
|
|
2370
|
+
for (let k = 0; ; k++) {
|
|
2371
|
+
if (k === wotsK)
|
|
2372
|
+
info.wotsSig.subarray(i * N3).set(pk);
|
|
2373
|
+
if (k === W - 1)
|
|
2374
|
+
break;
|
|
2375
|
+
setAddr({ hash: k }, info.leafAddr);
|
|
2376
|
+
pk.set(rawContext.thash1(pk, info.leafAddr));
|
|
2377
|
+
}
|
|
2378
|
+
}
|
|
2379
|
+
return rawContext.thashN(WOTS_LEN, wotsPk, info.pkAddr);
|
|
2380
|
+
});
|
|
2381
|
+
const forsTreehash = treehash(A, (_, addrOffset, context, forsLeafAddr) => {
|
|
2382
|
+
const rawContext = context;
|
|
2383
|
+
setAddr({ type: AddressType.FORSPRF, index: addrOffset }, forsLeafAddr);
|
|
2384
|
+
const prf = rawContext.PRFaddr(forsLeafAddr);
|
|
2385
|
+
setAddr({ type: AddressType.FORSTREE }, forsLeafAddr);
|
|
2386
|
+
return rawContext.thash1(prf, forsLeafAddr);
|
|
2387
|
+
});
|
|
2388
|
+
const merkleSign = (context, wotsAddr, treeAddr, leafIdx, prevRoot = new Uint8Array(N3)) => {
|
|
2389
|
+
setAddr({ type: AddressType.HASHTREE }, treeAddr);
|
|
2390
|
+
const info = {
|
|
2391
|
+
wotsSig: new Uint8Array(wotsCoder.bytesLen),
|
|
2392
|
+
wotsSteps: chainLengths(prevRoot),
|
|
2393
|
+
leafAddr: setAddr({ subtreeAddr: wotsAddr }),
|
|
2394
|
+
pkAddr: setAddr({ type: AddressType.WOTSPK, subtreeAddr: wotsAddr })
|
|
2395
|
+
};
|
|
2396
|
+
const { root, authPath } = wotsTreehash(context, leafIdx, 0, treeAddr, info);
|
|
2397
|
+
return {
|
|
2398
|
+
root,
|
|
2399
|
+
sigWots: info.wotsSig.subarray(0, WOTS_LEN * N3),
|
|
2400
|
+
sigAuth: authPath
|
|
2401
|
+
};
|
|
2402
|
+
};
|
|
2403
|
+
const computeRoot = (leaf, leafIdx, idxOffset, authPath, treeHeight, context, addr) => {
|
|
2404
|
+
const rawContext = context;
|
|
2405
|
+
const buffer = new Uint8Array(2 * N3);
|
|
2406
|
+
const b0 = buffer.subarray(0, N3);
|
|
2407
|
+
const b1 = buffer.subarray(N3, 2 * N3);
|
|
2408
|
+
if ((leafIdx & 1) !== 0) {
|
|
2409
|
+
b1.set(leaf.subarray(0, N3));
|
|
2410
|
+
b0.set(authPath.subarray(0, N3));
|
|
2411
|
+
} else {
|
|
2412
|
+
b0.set(leaf.subarray(0, N3));
|
|
2413
|
+
b1.set(authPath.subarray(0, N3));
|
|
2414
|
+
}
|
|
2415
|
+
leafIdx >>>= 1;
|
|
2416
|
+
idxOffset >>>= 1;
|
|
2417
|
+
for (let i = 0; i < treeHeight - 1; i++, leafIdx >>= 1, idxOffset >>= 1) {
|
|
2418
|
+
setAddr({ height: i + 1, index: leafIdx + idxOffset }, addr);
|
|
2419
|
+
const a = authPath.subarray((i + 1) * N3, (i + 2) * N3);
|
|
2420
|
+
if ((leafIdx & 1) !== 0) {
|
|
2421
|
+
b1.set(rawContext.thashN(2, buffer, addr));
|
|
2422
|
+
b0.set(a);
|
|
2423
|
+
} else {
|
|
2424
|
+
buffer.set(rawContext.thashN(2, buffer, addr));
|
|
2425
|
+
b1.set(a);
|
|
2426
|
+
}
|
|
2427
|
+
}
|
|
2428
|
+
setAddr({ height: treeHeight, index: leafIdx + idxOffset }, addr);
|
|
2429
|
+
return rawContext.thashN(2, buffer, addr);
|
|
2430
|
+
};
|
|
2431
|
+
const seedCoder = splitCoder("seed", N3, N3, N3);
|
|
2432
|
+
const publicCoder = splitCoder("publicKey", N3, N3);
|
|
2433
|
+
const secretCoder = splitCoder("secretKey", N3, N3, publicCoder.bytesLen);
|
|
2434
|
+
const forsCoder = vecCoder(splitCoder("fors", N3, N3 * A), K);
|
|
2435
|
+
const wotsCoder = vecCoder(splitCoder("wots", WOTS_LEN * N3, TREE_HEIGHT * N3), D2);
|
|
2436
|
+
const sigCoder = splitCoder("signature", N3, forsCoder, wotsCoder);
|
|
2437
|
+
const internal = Object.freeze({
|
|
2438
|
+
info: Object.freeze({ type: "internal-slh-dsa" }),
|
|
2439
|
+
lengths: Object.freeze({
|
|
2440
|
+
publicKey: publicCoder.bytesLen,
|
|
2441
|
+
secretKey: secretCoder.bytesLen,
|
|
2442
|
+
signature: sigCoder.bytesLen,
|
|
2443
|
+
seed: seedCoder.bytesLen,
|
|
2444
|
+
signRand: N3
|
|
2445
|
+
}),
|
|
2446
|
+
keygen(seed) {
|
|
2447
|
+
if (seed !== void 0)
|
|
2448
|
+
abytesDoc(seed, seedCoder.bytesLen, "seed");
|
|
2449
|
+
seed = seed === void 0 ? randomBytes2(seedCoder.bytesLen) : copyBytes(seed);
|
|
2450
|
+
const [secretSeed, secretPRF, publicSeed] = seedCoder.decode(seed);
|
|
2451
|
+
const context = getContext(publicSeed, secretSeed);
|
|
2452
|
+
const topTreeAddr = setAddr({ layer: D2 - 1 });
|
|
2453
|
+
const wotsAddr = setAddr({ layer: D2 - 1 });
|
|
2454
|
+
const { root } = merkleSign(context, wotsAddr, topTreeAddr, ~0 >>> 0);
|
|
2455
|
+
const publicKey = publicCoder.encode([publicSeed, root]);
|
|
2456
|
+
const secretKey = secretCoder.encode([secretSeed, secretPRF, publicKey]);
|
|
2457
|
+
context.clean();
|
|
2458
|
+
cleanBytes(secretSeed, secretPRF, root, wotsAddr, topTreeAddr);
|
|
2459
|
+
return {
|
|
2460
|
+
publicKey,
|
|
2461
|
+
secretKey
|
|
2462
|
+
};
|
|
2463
|
+
},
|
|
2464
|
+
getPublicKey: (secretKey) => {
|
|
2465
|
+
const [_skSeed, _skPRF, pk] = secretCoder.decode(secretKey);
|
|
2466
|
+
return Uint8Array.from(pk);
|
|
2467
|
+
},
|
|
2468
|
+
sign: (msg, sk, opts3 = {}) => {
|
|
2469
|
+
validateSigOpts(opts3);
|
|
2470
|
+
let { extraEntropy: random } = opts3;
|
|
2471
|
+
const [skSeed, skPRF, pk] = secretCoder.decode(sk);
|
|
2472
|
+
const [pkSeed, _] = publicCoder.decode(pk);
|
|
2473
|
+
if (random === false)
|
|
2474
|
+
random = copyBytes(pkSeed);
|
|
2475
|
+
else if (random === void 0)
|
|
2476
|
+
random = randomBytes2(N3);
|
|
2477
|
+
else
|
|
2478
|
+
random = copyBytes(random);
|
|
2479
|
+
abytesDoc(random, N3);
|
|
2480
|
+
const context = getContext(pkSeed, skSeed);
|
|
2481
|
+
const R = context.PRFmsg(skPRF, random, msg);
|
|
2482
|
+
let { tree, leafIdx, md } = hashMessage(R, pk, msg, context);
|
|
2483
|
+
const wotsAddr = setAddr({
|
|
2484
|
+
type: AddressType.WOTS,
|
|
2485
|
+
tree,
|
|
2486
|
+
keypair: leafIdx
|
|
2487
|
+
});
|
|
2488
|
+
const roots = [];
|
|
2489
|
+
const forsLeaf = setAddr({ keypairAddr: wotsAddr });
|
|
2490
|
+
const forsTreeAddr = setAddr({ keypairAddr: wotsAddr });
|
|
2491
|
+
const indices = messageToIndices(md);
|
|
2492
|
+
const fors = [];
|
|
2493
|
+
for (let i = 0; i < indices.length; i++) {
|
|
2494
|
+
const idxOffset = i << A;
|
|
2495
|
+
setAddr({
|
|
2496
|
+
type: AddressType.FORSPRF,
|
|
2497
|
+
height: 0,
|
|
2498
|
+
index: indices[i] + idxOffset
|
|
2499
|
+
}, forsTreeAddr);
|
|
2500
|
+
const prf = context.PRFaddr(forsTreeAddr);
|
|
2501
|
+
setAddr({ type: AddressType.FORSTREE }, forsTreeAddr);
|
|
2502
|
+
const { root: root2, authPath } = forsTreehash(context, indices[i], idxOffset, forsTreeAddr, forsLeaf);
|
|
2503
|
+
roots.push(root2);
|
|
2504
|
+
fors.push([prf, authPath]);
|
|
2505
|
+
}
|
|
2506
|
+
const forsPkAddr = setAddr({
|
|
2507
|
+
type: AddressType.FORSPK,
|
|
2508
|
+
keypairAddr: wotsAddr
|
|
2509
|
+
});
|
|
2510
|
+
const root = context.thashN(K, concatBytes(...roots), forsPkAddr);
|
|
2511
|
+
const treeAddr = setAddr({ type: AddressType.HASHTREE });
|
|
2512
|
+
const wots = [];
|
|
2513
|
+
for (let i = 0; i < D2; i++, tree >>= BigInt(TREE_HEIGHT)) {
|
|
2514
|
+
setAddr({ tree, layer: i }, treeAddr);
|
|
2515
|
+
setAddr({ subtreeAddr: treeAddr, keypair: leafIdx }, wotsAddr);
|
|
2516
|
+
const { sigWots, sigAuth, root: r } = merkleSign(context, wotsAddr, treeAddr, leafIdx, root);
|
|
2517
|
+
root.set(r);
|
|
2518
|
+
cleanBytes(r);
|
|
2519
|
+
wots.push([sigWots, sigAuth]);
|
|
2520
|
+
leafIdx = Number(tree & getMaskBig(TREE_HEIGHT));
|
|
2521
|
+
}
|
|
2522
|
+
context.clean();
|
|
2523
|
+
const SIG = sigCoder.encode([R, fors, wots]);
|
|
2524
|
+
cleanBytes(R, random, treeAddr, wotsAddr, forsLeaf, forsTreeAddr, indices, roots);
|
|
2525
|
+
return SIG;
|
|
2526
|
+
},
|
|
2527
|
+
verify: (sig, msg, publicKey) => {
|
|
2528
|
+
const [pkSeed, pubRoot] = publicCoder.decode(publicKey);
|
|
2529
|
+
const [random, forsVec, wotsVec] = sigCoder.decode(sig);
|
|
2530
|
+
const pk = publicKey;
|
|
2531
|
+
if (sig.length !== sigCoder.bytesLen)
|
|
2532
|
+
return false;
|
|
2533
|
+
const context = getContext(pkSeed);
|
|
2534
|
+
let { tree, leafIdx, md } = hashMessage(random, pk, msg, context);
|
|
2535
|
+
const wotsAddr = setAddr({
|
|
2536
|
+
type: AddressType.WOTS,
|
|
2537
|
+
tree,
|
|
2538
|
+
keypair: leafIdx
|
|
2539
|
+
});
|
|
2540
|
+
const roots = [];
|
|
2541
|
+
const forsTreeAddr = setAddr({
|
|
2542
|
+
type: AddressType.FORSTREE,
|
|
2543
|
+
keypairAddr: wotsAddr
|
|
2544
|
+
});
|
|
2545
|
+
const indices = messageToIndices(md);
|
|
2546
|
+
for (let i = 0; i < forsVec.length; i++) {
|
|
2547
|
+
const [prf, authPath] = forsVec[i];
|
|
2548
|
+
const idxOffset = i << A;
|
|
2549
|
+
setAddr({ height: 0, index: indices[i] + idxOffset }, forsTreeAddr);
|
|
2550
|
+
const leaf = context.thash1(prf, forsTreeAddr);
|
|
2551
|
+
roots.push(computeRoot(leaf, indices[i], idxOffset, authPath, A, context, forsTreeAddr));
|
|
2552
|
+
}
|
|
2553
|
+
const forsPkAddr = setAddr({
|
|
2554
|
+
type: AddressType.FORSPK,
|
|
2555
|
+
keypairAddr: wotsAddr
|
|
2556
|
+
});
|
|
2557
|
+
let root = context.thashN(K, concatBytes(...roots), forsPkAddr);
|
|
2558
|
+
const treeAddr = setAddr({ type: AddressType.HASHTREE });
|
|
2559
|
+
const wotsPkAddr = setAddr({ type: AddressType.WOTSPK });
|
|
2560
|
+
const wotsPk = new Uint8Array(WOTS_LEN * N3);
|
|
2561
|
+
for (let i = 0; i < wotsVec.length; i++, tree >>= BigInt(TREE_HEIGHT)) {
|
|
2562
|
+
const [wots, sigAuth] = wotsVec[i];
|
|
2563
|
+
setAddr({ tree, layer: i }, treeAddr);
|
|
2564
|
+
setAddr({ subtreeAddr: treeAddr, keypair: leafIdx }, wotsAddr);
|
|
2565
|
+
setAddr({ keypairAddr: wotsAddr }, wotsPkAddr);
|
|
2566
|
+
const lengths = chainLengths(root);
|
|
2567
|
+
for (let i2 = 0; i2 < WOTS_LEN; i2++) {
|
|
2568
|
+
setAddr({ chain: i2 }, wotsAddr);
|
|
2569
|
+
const steps = W - 1 - lengths[i2];
|
|
2570
|
+
const start = lengths[i2];
|
|
2571
|
+
const out = wotsPk.subarray(i2 * N3);
|
|
2572
|
+
out.set(wots.subarray(i2 * N3, (i2 + 1) * N3));
|
|
2573
|
+
for (let j = start; j < start + steps && j < W; j++) {
|
|
2574
|
+
setAddr({ hash: j }, wotsAddr);
|
|
2575
|
+
out.set(context.thash1(out, wotsAddr));
|
|
2576
|
+
}
|
|
2577
|
+
}
|
|
2578
|
+
const leaf = context.thashN(WOTS_LEN, wotsPk, wotsPkAddr);
|
|
2579
|
+
root = computeRoot(leaf, leafIdx, 0, sigAuth, TREE_HEIGHT, context, treeAddr);
|
|
2580
|
+
leafIdx = Number(tree & getMaskBig(TREE_HEIGHT));
|
|
2581
|
+
}
|
|
2582
|
+
return equalBytes(root, pubRoot);
|
|
2583
|
+
}
|
|
2584
|
+
});
|
|
2585
|
+
return Object.freeze({
|
|
2586
|
+
info: Object.freeze({ type: "slh-dsa" }),
|
|
2587
|
+
internal,
|
|
2588
|
+
securityLevel,
|
|
2589
|
+
lengths: internal.lengths,
|
|
2590
|
+
keygen: internal.keygen,
|
|
2591
|
+
getPublicKey: internal.getPublicKey,
|
|
2592
|
+
sign: (msg, secretKey, opts3 = {}) => {
|
|
2593
|
+
validateSigOpts(opts3);
|
|
2594
|
+
const M = getMessage(msg, opts3.context);
|
|
2595
|
+
const res = internal.sign(M, secretKey, opts3);
|
|
2596
|
+
cleanBytes(M);
|
|
2597
|
+
return res;
|
|
2598
|
+
},
|
|
2599
|
+
verify: (sig, msg, publicKey, opts3 = {}) => {
|
|
2600
|
+
validateVerOpts(opts3);
|
|
2601
|
+
return internal.verify(sig, getMessage(msg, opts3.context), publicKey);
|
|
2602
|
+
},
|
|
2603
|
+
prehash: (hash) => {
|
|
2604
|
+
checkHash(hash, securityLevel);
|
|
2605
|
+
const rawHash = hash;
|
|
2606
|
+
return Object.freeze({
|
|
2607
|
+
info: Object.freeze({ type: "hashslh-dsa" }),
|
|
2608
|
+
lengths: internal.lengths,
|
|
2609
|
+
keygen: internal.keygen,
|
|
2610
|
+
getPublicKey: internal.getPublicKey,
|
|
2611
|
+
sign: (msg, secretKey, opts3 = {}) => {
|
|
2612
|
+
validateSigOpts(opts3);
|
|
2613
|
+
const M = getMessagePrehash(rawHash, msg, opts3.context);
|
|
2614
|
+
const res = internal.sign(M, secretKey, opts3);
|
|
2615
|
+
cleanBytes(M);
|
|
2616
|
+
return res;
|
|
2617
|
+
},
|
|
2618
|
+
verify: (sig, msg, publicKey, opts3 = {}) => {
|
|
2619
|
+
validateVerOpts(opts3);
|
|
2620
|
+
return internal.verify(sig, getMessagePrehash(rawHash, msg, opts3.context), publicKey);
|
|
2621
|
+
}
|
|
2622
|
+
});
|
|
2623
|
+
}
|
|
2624
|
+
});
|
|
2625
|
+
}
|
|
2626
|
+
var genShake2 = () => (opts2) => (pubSeed, skSeed) => {
|
|
2627
|
+
const { N: N3 } = opts2;
|
|
2628
|
+
const stats = { prf: 0, thash: 0, hmsg: 0, gen_message_random: 0 };
|
|
2629
|
+
const h0 = shake256.create({}).update(pubSeed);
|
|
2630
|
+
const h0tmp = h0.clone();
|
|
2631
|
+
const thash = (blocks, input, addr) => {
|
|
2632
|
+
stats.thash++;
|
|
2633
|
+
return h0._cloneInto(h0tmp).update(addr).update(input.subarray(0, blocks * N3)).xof(N3);
|
|
2634
|
+
};
|
|
2635
|
+
return {
|
|
2636
|
+
PRFaddr: (addr) => {
|
|
2637
|
+
if (!skSeed)
|
|
2638
|
+
throw new Error("no sk seed");
|
|
2639
|
+
stats.prf++;
|
|
2640
|
+
const res = h0._cloneInto(h0tmp).update(addr).update(skSeed).xof(N3);
|
|
2641
|
+
return res;
|
|
2642
|
+
},
|
|
2643
|
+
PRFmsg: (skPRF, random, msg) => {
|
|
2644
|
+
stats.gen_message_random++;
|
|
2645
|
+
return shake256.create({}).update(skPRF).update(random).update(msg).digest().subarray(0, N3);
|
|
2646
|
+
},
|
|
2647
|
+
Hmsg: (R, pk, m, outLen) => {
|
|
2648
|
+
stats.hmsg++;
|
|
2649
|
+
return shake256.create({}).update(R.subarray(0, N3)).update(pk).update(m).xof(outLen);
|
|
2650
|
+
},
|
|
2651
|
+
thash1: thash.bind(null, 1),
|
|
2652
|
+
thashN: thash,
|
|
2653
|
+
clean: () => {
|
|
2654
|
+
h0.destroy();
|
|
2655
|
+
h0tmp.destroy();
|
|
2656
|
+
}
|
|
2657
|
+
};
|
|
2658
|
+
};
|
|
2659
|
+
var SHAKE_SIMPLE = /* @__PURE__ */ (() => ({ getContext: genShake2() }))();
|
|
2660
|
+
var slh_dsa_shake_128f = /* @__PURE__ */ (() => gen(PARAMS3["128f"], SHAKE_SIMPLE))();
|
|
2661
|
+
var slh_dsa_shake_192f = /* @__PURE__ */ (() => gen(PARAMS3["192f"], SHAKE_SIMPLE))();
|
|
2662
|
+
var slh_dsa_shake_256f = /* @__PURE__ */ (() => gen(PARAMS3["256f"], SHAKE_SIMPLE))();
|
|
2663
|
+
var genSha = (h0, h1) => (opts2) => (pub_seed, sk_seed) => {
|
|
2664
|
+
const { N: N3 } = opts2;
|
|
2665
|
+
const stats = { prf: 0, thash: 0, hmsg: 0, gen_message_random: 0, mgf1: 0 };
|
|
2666
|
+
const counterB = new Uint8Array(4);
|
|
2667
|
+
const counterV = createView(counterB);
|
|
2668
|
+
const h0ps = h0.create().update(pub_seed).update(new Uint8Array(h0.blockLen - N3));
|
|
2669
|
+
const h1ps = h1.create().update(pub_seed).update(new Uint8Array(h1.blockLen - N3));
|
|
2670
|
+
const h0tmp = h0ps.clone();
|
|
2671
|
+
const h1tmp = h1ps.clone();
|
|
2672
|
+
function mgf1(seed, length, hash) {
|
|
2673
|
+
stats.mgf1++;
|
|
2674
|
+
const out = new Uint8Array(Math.ceil(length / hash.outputLen) * hash.outputLen);
|
|
2675
|
+
if (length > 2 ** 32)
|
|
2676
|
+
throw new Error("mask too long");
|
|
2677
|
+
for (let counter = 0, o = out; o.length; counter++) {
|
|
2678
|
+
counterV.setUint32(0, counter, false);
|
|
2679
|
+
hash.create().update(seed).update(counterB).digestInto(o);
|
|
2680
|
+
o = o.subarray(hash.outputLen);
|
|
2681
|
+
}
|
|
2682
|
+
cleanBytes(out.subarray(length));
|
|
2683
|
+
return out.subarray(0, length);
|
|
2684
|
+
}
|
|
2685
|
+
const thash = (_, h, hTmp) => (blocks, input, addr) => {
|
|
2686
|
+
stats.thash++;
|
|
2687
|
+
const d = h._cloneInto(hTmp).update(addr).update(input.subarray(0, blocks * N3)).digest();
|
|
2688
|
+
return d.subarray(0, N3);
|
|
2689
|
+
};
|
|
2690
|
+
return {
|
|
2691
|
+
PRFaddr: (addr) => {
|
|
2692
|
+
if (!sk_seed)
|
|
2693
|
+
throw new Error("No sk seed");
|
|
2694
|
+
stats.prf++;
|
|
2695
|
+
const res = h0ps._cloneInto(h0tmp).update(addr).update(sk_seed).digest().subarray(0, N3);
|
|
2696
|
+
return res;
|
|
2697
|
+
},
|
|
2698
|
+
PRFmsg: (skPRF, random, msg) => {
|
|
2699
|
+
stats.gen_message_random++;
|
|
2700
|
+
return hmac.create(h1, skPRF).update(random).update(msg).digest().subarray(0, N3);
|
|
2701
|
+
},
|
|
2702
|
+
Hmsg: (R, pk, m, outLen) => {
|
|
2703
|
+
stats.hmsg++;
|
|
2704
|
+
const seed = concatBytes(R.subarray(0, N3), pk.subarray(0, N3), h1.create().update(R.subarray(0, N3)).update(pk).update(m).digest());
|
|
2705
|
+
return mgf1(seed, outLen, h1);
|
|
2706
|
+
},
|
|
2707
|
+
thash1: thash(h0, h0ps, h0tmp).bind(null, 1),
|
|
2708
|
+
thashN: thash(h1, h1ps, h1tmp),
|
|
2709
|
+
clean: () => {
|
|
2710
|
+
h0ps.destroy();
|
|
2711
|
+
h1ps.destroy();
|
|
2712
|
+
h0tmp.destroy();
|
|
2713
|
+
h1tmp.destroy();
|
|
2714
|
+
}
|
|
2715
|
+
};
|
|
2716
|
+
};
|
|
2717
|
+
var SHA256_SIMPLE = /* @__PURE__ */ (() => ({
|
|
2718
|
+
isCompressed: true,
|
|
2719
|
+
getContext: genSha(sha256, sha256)
|
|
2720
|
+
}))();
|
|
2721
|
+
var SHA512_SIMPLE = /* @__PURE__ */ (() => ({
|
|
2722
|
+
isCompressed: true,
|
|
2723
|
+
getContext: genSha(sha256, sha512)
|
|
2724
|
+
}))();
|
|
2725
|
+
var slh_dsa_sha2_128f = /* @__PURE__ */ (() => gen(PARAMS3["128f"], SHA256_SIMPLE))();
|
|
2726
|
+
var slh_dsa_sha2_192f = /* @__PURE__ */ (() => gen(PARAMS3["192f"], SHA512_SIMPLE))();
|
|
2727
|
+
var slh_dsa_sha2_256f = /* @__PURE__ */ (() => gen(PARAMS3["256f"], SHA512_SIMPLE))();
|
|
2728
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
2729
|
+
0 && (module.exports = {
|
|
2730
|
+
ml_dsa44,
|
|
2731
|
+
ml_dsa65,
|
|
2732
|
+
ml_dsa87,
|
|
2733
|
+
ml_kem1024,
|
|
2734
|
+
ml_kem512,
|
|
2735
|
+
ml_kem768,
|
|
2736
|
+
slh_dsa_sha2_128f,
|
|
2737
|
+
slh_dsa_sha2_192f,
|
|
2738
|
+
slh_dsa_sha2_256f,
|
|
2739
|
+
slh_dsa_shake_128f,
|
|
2740
|
+
slh_dsa_shake_192f,
|
|
2741
|
+
slh_dsa_shake_256f
|
|
2742
|
+
});
|
|
7
2743
|
/*! Bundled license information:
|
|
8
2744
|
|
|
9
2745
|
@noble/post-quantum/utils.js:
|