@suveren/gateway 0.40.0 → 0.41.0
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/dist/control-plane/index.mjs +182 -37
- package/dist/mcp-server/http.mjs +355 -71
- package/dist/ui/assets/{index-C-lA_7Lt.js → index-CO-dj98E.js} +27 -27
- package/dist/ui/index.html +1 -1
- package/node_modules/@hap/core/README.md +3 -3
- package/node_modules/@hap/core/dist/index.d.mts +567 -123
- package/node_modules/@hap/core/dist/index.d.ts +567 -123
- package/node_modules/@hap/core/dist/index.js +869 -23
- package/node_modules/@hap/core/dist/index.mjs +829 -22
- package/node_modules/@hap/core/node_modules/@hpke/core/LICENSE +21 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/README.md +263 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/mod.d.ts +11 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/mod.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/mod.js +6 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/package.json +3 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/aeads/aesGcm.d.ts +80 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/aeads/aesGcm.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/aeads/aesGcm.js +167 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/aeads/exportOnly.d.ts +34 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/aeads/exportOnly.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/aeads/exportOnly.js +56 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/cipherSuiteNative.d.ts +145 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/cipherSuiteNative.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/cipherSuiteNative.js +326 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/encryptionContext.d.ts +15 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/encryptionContext.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/encryptionContext.js +68 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/exporterContext.d.ts +19 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/exporterContext.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/exporterContext.js +62 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/aeadParams.d.ts +17 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/aeadParams.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/aeadParams.js +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/cipherSuiteParams.d.ts +13 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/cipherSuiteParams.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/cipherSuiteParams.js +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/encapsulator.d.ts +8 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/encapsulator.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/encapsulator.js +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/encryptionContext.d.ts +40 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/encryptionContext.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/encryptionContext.js +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/exporter.d.ts +17 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/exporter.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/exporter.js +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/keyInfo.d.ts +7 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/keyInfo.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/keyInfo.js +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/responses.d.ts +10 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/responses.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/responses.js +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemNative.d.ts +26 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemNative.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemNative.js +112 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x25519.d.ts +24 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x25519.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x25519.js +214 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x448.d.ts +24 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x448.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x448.js +214 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemX25519.d.ts +38 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemX25519.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemX25519.js +66 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemX448.d.ts +38 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemX448.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemX448.js +66 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/mutex.d.ts +5 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/mutex.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/mutex.js +28 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/native.d.ts +236 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/native.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/native.js +235 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/recipientContext.d.ts +6 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/recipientContext.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/recipientContext.js +38 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/senderContext.d.ts +11 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/senderContext.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/senderContext.js +45 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/utils/emitNotSupported.d.ts +2 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/utils/emitNotSupported.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/utils/emitNotSupported.js +6 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/package.json +46 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/mod.d.ts +11 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/mod.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/mod.js +47 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/package.json +3 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/aeads/aesGcm.d.ts +80 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/aeads/aesGcm.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/aeads/aesGcm.js +183 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/aeads/exportOnly.d.ts +34 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/aeads/exportOnly.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/aeads/exportOnly.js +70 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/cipherSuiteNative.d.ts +145 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/cipherSuiteNative.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/cipherSuiteNative.js +340 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/encryptionContext.d.ts +15 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/encryptionContext.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/encryptionContext.js +82 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/exporterContext.d.ts +19 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/exporterContext.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/exporterContext.js +78 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/aeadParams.d.ts +17 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/aeadParams.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/aeadParams.js +12 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/cipherSuiteParams.d.ts +13 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/cipherSuiteParams.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/cipherSuiteParams.js +12 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/encapsulator.d.ts +8 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/encapsulator.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/encapsulator.js +12 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/encryptionContext.d.ts +40 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/encryptionContext.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/encryptionContext.js +12 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/exporter.d.ts +17 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/exporter.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/exporter.js +12 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/keyInfo.d.ts +7 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/keyInfo.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/keyInfo.js +12 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/responses.d.ts +10 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/responses.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/responses.js +12 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemNative.d.ts +26 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemNative.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemNative.js +128 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/x25519.d.ts +24 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/x25519.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/x25519.js +228 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/x448.d.ts +24 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/x448.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/x448.js +228 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemX25519.d.ts +38 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemX25519.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemX25519.js +80 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemX448.d.ts +38 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemX448.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemX448.js +80 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/mutex.d.ts +5 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/mutex.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/mutex.js +42 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/native.d.ts +236 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/native.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/native.js +255 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/recipientContext.d.ts +6 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/recipientContext.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/recipientContext.js +52 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/senderContext.d.ts +11 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/senderContext.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/senderContext.js +59 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/utils/emitNotSupported.d.ts +2 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/utils/emitNotSupported.d.ts.map +1 -0
- package/node_modules/@hap/core/node_modules/@hpke/core/script/src/utils/emitNotSupported.js +19 -0
- package/node_modules/@hap/core/package.json +2 -1
- package/node_modules/@hap/core/src/canonicalize.ts +9 -0
- package/node_modules/@hap/core/src/commitment-modes.ts +21 -9
- package/node_modules/@hap/core/src/errors.ts +24 -8
- package/node_modules/@hap/core/src/gatekeeper.ts +52 -8
- package/node_modules/@hap/core/src/index.ts +5 -1
- package/node_modules/@hap/core/src/issuance.ts +250 -0
- package/node_modules/@hap/core/src/mandate.ts +52 -14
- package/node_modules/@hap/core/src/owner-signature.ts +86 -39
- package/node_modules/@hap/core/src/profile.ts +45 -0
- package/node_modules/@hap/core/src/proposal-content.ts +219 -0
- package/node_modules/@hap/core/src/ticket-projection.ts +167 -0
- package/node_modules/@hap/core/src/ticket.ts +254 -20
- package/node_modules/@hap/core/src/types.ts +33 -5
- package/node_modules/@hap/core/src/verifier-policy.ts +178 -0
- package/node_modules/@hap/core/src/versions.ts +50 -19
- package/node_modules/@hono/node-server/dist/index.cjs +31 -6
- package/node_modules/@hono/node-server/dist/index.mjs +31 -6
- package/node_modules/@hono/node-server/package.json +1 -1
- package/node_modules/@hpke/common/esm/package.json +5 -1
- package/node_modules/@hpke/common/esm/src/curve/montgomery.d.ts +2 -2
- package/node_modules/@hpke/common/esm/src/curve/montgomery.d.ts.map +1 -1
- package/node_modules/@hpke/common/esm/src/curve/montgomery.js +41 -26
- package/node_modules/@hpke/common/esm/src/hash/sha3.d.ts.map +1 -1
- package/node_modules/@hpke/common/esm/src/hash/sha3.js +0 -15
- package/node_modules/@hpke/common/esm/src/kdfs/hkdf.d.ts +2 -1
- package/node_modules/@hpke/common/esm/src/kdfs/hkdf.d.ts.map +1 -1
- package/node_modules/@hpke/common/esm/src/kdfs/hkdf.js +12 -2
- package/node_modules/@hpke/common/esm/src/kems/dhkemPrimitives/xCurve.d.ts.map +1 -1
- package/node_modules/@hpke/common/esm/src/kems/dhkemPrimitives/xCurve.js +14 -3
- package/node_modules/@hpke/common/esm/src/utils/misc.d.ts +6 -0
- package/node_modules/@hpke/common/esm/src/utils/misc.d.ts.map +1 -1
- package/node_modules/@hpke/common/esm/src/utils/misc.js +43 -10
- package/node_modules/@hpke/common/esm/src/utils/noble.d.ts +1 -1
- package/node_modules/@hpke/common/esm/src/utils/noble.d.ts.map +1 -1
- package/node_modules/@hpke/common/esm/src/utils/noble.js +21 -10
- package/node_modules/@hpke/common/package.json +5 -1
- package/node_modules/@hpke/common/script/src/curve/montgomery.d.ts +2 -2
- package/node_modules/@hpke/common/script/src/curve/montgomery.d.ts.map +1 -1
- package/node_modules/@hpke/common/script/src/curve/montgomery.js +40 -25
- package/node_modules/@hpke/common/script/src/hash/sha3.d.ts.map +1 -1
- package/node_modules/@hpke/common/script/src/hash/sha3.js +0 -15
- package/node_modules/@hpke/common/script/src/kdfs/hkdf.d.ts +2 -1
- package/node_modules/@hpke/common/script/src/kdfs/hkdf.d.ts.map +1 -1
- package/node_modules/@hpke/common/script/src/kdfs/hkdf.js +12 -2
- package/node_modules/@hpke/common/script/src/kems/dhkemPrimitives/xCurve.d.ts.map +1 -1
- package/node_modules/@hpke/common/script/src/kems/dhkemPrimitives/xCurve.js +13 -2
- package/node_modules/@hpke/common/script/src/utils/misc.d.ts +6 -0
- package/node_modules/@hpke/common/script/src/utils/misc.d.ts.map +1 -1
- package/node_modules/@hpke/common/script/src/utils/misc.js +43 -9
- package/node_modules/@hpke/common/script/src/utils/noble.d.ts +1 -1
- package/node_modules/@hpke/common/script/src/utils/noble.d.ts.map +1 -1
- package/node_modules/@hpke/common/script/src/utils/noble.js +22 -11
- package/node_modules/@hpke/core/README.md +56 -56
- package/node_modules/@hpke/core/esm/package.json +2 -1
- package/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x25519.d.ts +3 -21
- package/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x25519.d.ts.map +1 -1
- package/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x25519.js +3 -201
- package/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x448.d.ts +3 -21
- package/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x448.d.ts.map +1 -1
- package/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x448.js +3 -201
- package/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/xCurveNative.d.ts +26 -0
- package/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/xCurveNative.d.ts.map +1 -0
- package/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/xCurveNative.js +216 -0
- package/node_modules/@hpke/core/package.json +6 -2
- package/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/x25519.d.ts +3 -21
- package/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/x25519.d.ts.map +1 -1
- package/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/x25519.js +4 -202
- package/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/x448.d.ts +3 -21
- package/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/x448.d.ts.map +1 -1
- package/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/x448.js +4 -202
- package/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/xCurveNative.d.ts +26 -0
- package/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/xCurveNative.d.ts.map +1 -0
- package/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/xCurveNative.js +230 -0
- package/node_modules/@types/node/README.md +1 -1
- package/node_modules/@types/node/package.json +2 -2
- package/node_modules/@types/node/zlib.d.ts +752 -0
- package/node_modules/encodeurl/README.md +14 -0
- package/node_modules/encodeurl/index.js +5 -10
- package/node_modules/encodeurl/package.json +10 -6
- package/node_modules/express-rate-limit/dist/index.cjs +7 -3
- package/node_modules/express-rate-limit/dist/index.mjs +7 -3
- package/node_modules/express-rate-limit/package.json +10 -10
- package/node_modules/hono/dist/cjs/adapter/bun/serve-static.js +1 -1
- package/node_modules/hono/dist/cjs/adapter/bun/websocket.js +1 -1
- package/node_modules/hono/dist/cjs/context.js +1 -1
- package/node_modules/hono/dist/cjs/helper/css/common.js +3 -5
- package/node_modules/hono/dist/cjs/hono-base.js +4 -10
- package/node_modules/hono/dist/cjs/hono.js +0 -1
- package/node_modules/hono/dist/cjs/middleware/basic-auth/index.js +1 -1
- package/node_modules/hono/dist/cjs/middleware/bearer-auth/index.js +1 -1
- package/node_modules/hono/dist/cjs/middleware/csrf/index.js +2 -2
- package/node_modules/hono/dist/cjs/middleware/jwk/jwk.js +2 -2
- package/node_modules/hono/dist/cjs/middleware/jwt/jwt.js +2 -2
- package/node_modules/hono/dist/cjs/middleware/mount/index.js +4 -4
- package/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +13 -11
- package/node_modules/hono/dist/cjs/router/reg-exp-router/prepared-router.js +4 -4
- package/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +39 -51
- package/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +15 -5
- package/node_modules/hono/dist/cjs/utils/jwt/jwt.js +2 -1
- package/node_modules/hono/dist/cjs/utils/mount.js +35 -0
- package/node_modules/hono/dist/cjs/utils/url.js +10 -0
- package/node_modules/hono/dist/cjs/validator/validator.js +1 -1
- package/node_modules/hono/dist/context.js +1 -1
- package/node_modules/hono/dist/helper/css/common.js +3 -5
- package/node_modules/hono/dist/hono-base.js +4 -10
- package/node_modules/hono/dist/hono.js +0 -1
- package/node_modules/hono/dist/middleware/basic-auth/index.js +1 -1
- package/node_modules/hono/dist/middleware/bearer-auth/index.js +1 -1
- package/node_modules/hono/dist/middleware/csrf/index.js +2 -2
- package/node_modules/hono/dist/middleware/jwk/jwk.js +2 -2
- package/node_modules/hono/dist/middleware/jwt/jwt.js +2 -2
- package/node_modules/hono/dist/middleware/language/language.js +1 -1
- package/node_modules/hono/dist/middleware/mount/index.js +4 -4
- package/node_modules/hono/dist/router/reg-exp-router/node.js +13 -11
- package/node_modules/hono/dist/router/reg-exp-router/prepared-router.js +5 -5
- package/node_modules/hono/dist/router/reg-exp-router/router.js +40 -52
- package/node_modules/hono/dist/router/reg-exp-router/trie.js +15 -5
- package/node_modules/hono/dist/types/middleware/mount/index.d.ts +1 -0
- package/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +3 -3
- package/node_modules/hono/dist/types/router/reg-exp-router/trie.d.ts +1 -1
- package/node_modules/hono/dist/types/utils/mount.d.ts +4 -0
- package/node_modules/hono/dist/types/utils/url.d.ts +1 -0
- package/node_modules/hono/dist/utils/jwt/jwt.js +2 -1
- package/node_modules/hono/dist/utils/mount.js +34 -0
- package/node_modules/hono/dist/utils/url.js +10 -1
- package/node_modules/hono/dist/validator/validator.js +1 -1
- package/node_modules/hono/package.json +1 -1
- package/node_modules/ip-address/README.md +39 -39
- package/node_modules/ip-address/dist/ipv6.js +1 -1
- package/node_modules/ip-address/dist/ipv6.js.map +1 -1
- package/node_modules/ip-address/package.json +1 -1
- package/node_modules/jose/dist/types/jwt/decrypt.d.ts +3 -0
- package/node_modules/jose/dist/types/jwt/unsecured.d.ts +2 -0
- package/node_modules/jose/dist/types/jwt/verify.d.ts +3 -0
- package/node_modules/jose/dist/types/types.d.ts +8 -0
- package/node_modules/jose/dist/types/util/decode_jwt.d.ts +1 -0
- package/node_modules/jose/dist/webapi/jwks/remote.js +3 -1
- package/node_modules/jose/dist/webapi/lib/deflate.js +2 -1
- package/node_modules/jose/dist/webapi/lib/jwt_claims_set.js +2 -1
- package/node_modules/jose/package.json +1 -1
- package/node_modules/qs/CHANGELOG.md +29 -22
- package/node_modules/qs/dist/qs.js +14 -14
- package/node_modules/qs/eslint.config.mjs +6 -0
- package/node_modules/qs/lib/stringify.js +1 -1
- package/node_modules/qs/package.json +5 -5
- package/node_modules/qs/test/stringify.js +74 -0
- package/package.json +2 -2
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verifier policy — `HAP-verifier-policy` (protocol.md → *Owner Signatures*
|
|
3
|
+
* → *Verifier policy*, new in v0.8, specification-led).
|
|
4
|
+
*
|
|
5
|
+
* The relying party's own, declarative statement of what it demands of a
|
|
6
|
+
* ticket (or projection) before acting on or trusting it. Every present
|
|
7
|
+
* line is a conjunct; an unmet line is a refusal naming the line and its
|
|
8
|
+
* code; absent lines impose nothing. The policy is never sent to the
|
|
9
|
+
* Authority Server.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { HapError, type HapErrorCode } from './errors';
|
|
13
|
+
import type { Mandate, OwnerSignatureBinding } from './types';
|
|
14
|
+
import type { TicketPayload } from './ticket';
|
|
15
|
+
import { verifyTicketSignature, verifyTicketApprovals, approvalsSufficient } from './ticket';
|
|
16
|
+
import { verifyTicketProjection, verifyProjectionOwner, type TicketProjection } from './ticket-projection';
|
|
17
|
+
import { verifyMandateSignature } from './mandate';
|
|
18
|
+
import { verifyOwnerSignatures, bindingRank, BINDING_RANK } from './owner-signature';
|
|
19
|
+
|
|
20
|
+
export interface VerifierPolicy {
|
|
21
|
+
typ: 'HAP-verifier-policy';
|
|
22
|
+
version: string;
|
|
23
|
+
trusted_issuers?: string[];
|
|
24
|
+
min_binding?: OwnerSignatureBinding | string;
|
|
25
|
+
required_owners?: string[];
|
|
26
|
+
profile_hashes?: Record<string, string>;
|
|
27
|
+
action_types?: string[];
|
|
28
|
+
freshness_seconds?: number;
|
|
29
|
+
required_fields?: string[];
|
|
30
|
+
require_approval_signature?: boolean;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** A refusal naming the policy line that failed. */
|
|
34
|
+
export class PolicyError extends HapError {
|
|
35
|
+
constructor(public readonly line: keyof VerifierPolicy, code: HapErrorCode, message: string) {
|
|
36
|
+
super(code, `${line}: ${message}`);
|
|
37
|
+
this.name = 'PolicyError';
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface PolicyInput {
|
|
42
|
+
/** The complete ticket, where the relying party holds it. */
|
|
43
|
+
ticket?: TicketPayload;
|
|
44
|
+
/** Or the projection, where only the public view was served. */
|
|
45
|
+
projection?: TicketProjection;
|
|
46
|
+
/** The mandate the artifact chains to, where the policy needs it
|
|
47
|
+
* (`min_binding`, `required_owners`, `profile_hashes`, `require_approval_signature`). */
|
|
48
|
+
mandate?: Mandate;
|
|
49
|
+
now?: number;
|
|
50
|
+
/** The relying party acts on the artifact (freshness applies to `valid_until`). */
|
|
51
|
+
asAuthorization?: boolean;
|
|
52
|
+
/** Whether the ticket's action exceeded an approval-kind cap — known to a
|
|
53
|
+
* party that holds the mandate's caps and the execution context. */
|
|
54
|
+
aboveCap?: boolean;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Evaluate a policy (protocol.md → *Verifier policy*, "Evaluation"). The
|
|
59
|
+
* artifact's own signature is verified first under `trusted_issuers` where
|
|
60
|
+
* present, else under any resolvable issuer.
|
|
61
|
+
* @throws PolicyError with the line and the code the table assigns.
|
|
62
|
+
*/
|
|
63
|
+
export async function evaluateVerifierPolicy(policy: VerifierPolicy, input: PolicyInput): Promise<void> {
|
|
64
|
+
if (policy.typ !== 'HAP-verifier-policy') {
|
|
65
|
+
throw new HapError('POLICY_UNMET', 'policy document must carry typ "HAP-verifier-policy"');
|
|
66
|
+
}
|
|
67
|
+
const artifact = input.ticket ?? input.projection;
|
|
68
|
+
if (!artifact) throw new HapError('POLICY_UNMET', 'no ticket or projection to evaluate');
|
|
69
|
+
const now = input.now ?? Math.floor(Date.now() / 1000);
|
|
70
|
+
|
|
71
|
+
// trusted_issuers — an unlisted issuer, or a signature that does not verify
|
|
72
|
+
// under the listed key, is reported as INVALID_SIGNATURE on purpose.
|
|
73
|
+
try {
|
|
74
|
+
if (input.ticket) {
|
|
75
|
+
await verifyTicketSignature(input.ticket, { trustedIssuers: policy.trusted_issuers });
|
|
76
|
+
} else if (input.projection) {
|
|
77
|
+
await verifyTicketProjection(input.projection, { trustedIssuers: policy.trusted_issuers, now, asAuthorization: input.asAuthorization });
|
|
78
|
+
}
|
|
79
|
+
if (input.mandate) {
|
|
80
|
+
await verifyMandateSignature(input.mandate, { trustedIssuers: policy.trusted_issuers });
|
|
81
|
+
}
|
|
82
|
+
} catch (err) {
|
|
83
|
+
const code = err instanceof HapError ? err.code : 'INVALID_SIGNATURE';
|
|
84
|
+
throw new PolicyError(code === 'POLICY_UNMET' ? 'freshness_seconds' : 'trusted_issuers', code, (err as Error).message);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Owner signatures on the mandate — verified once, used by two lines.
|
|
88
|
+
let verifiedOwnerDids: Map<string, string> | undefined; // did → binding
|
|
89
|
+
const needOwners = policy.min_binding !== undefined || policy.required_owners !== undefined;
|
|
90
|
+
if (needOwners) {
|
|
91
|
+
verifiedOwnerDids = new Map();
|
|
92
|
+
if (input.mandate) {
|
|
93
|
+
try {
|
|
94
|
+
const entries = await verifyOwnerSignatures(input.mandate);
|
|
95
|
+
for (const e of entries) verifiedOwnerDids.set(e.did, e.binding ?? 'raw');
|
|
96
|
+
if (input.projection?.owner) await verifyProjectionOwner(input.projection, input.mandate);
|
|
97
|
+
} catch (err) {
|
|
98
|
+
throw new PolicyError('min_binding', 'OWNER_SIGNATURE_REQUIRED', `no verifiable owner signature: ${(err as Error).message}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (policy.min_binding !== undefined) {
|
|
104
|
+
const minRank = BINDING_RANK[policy.min_binding as OwnerSignatureBinding];
|
|
105
|
+
if (minRank === undefined) {
|
|
106
|
+
throw new PolicyError('min_binding', 'OWNER_SIGNATURE_REQUIRED', `unknown binding "${policy.min_binding}" — satisfies no minimum`);
|
|
107
|
+
}
|
|
108
|
+
const best = Math.max(-1, ...[...verifiedOwnerDids!.values()].map(bindingRank));
|
|
109
|
+
if (best < minRank) {
|
|
110
|
+
throw new PolicyError('min_binding', 'OWNER_SIGNATURE_REQUIRED', `no verified owner signature at binding >= "${policy.min_binding}"`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if (policy.required_owners !== undefined) {
|
|
115
|
+
for (const did of policy.required_owners) {
|
|
116
|
+
if (!verifiedOwnerDids!.has(did)) {
|
|
117
|
+
throw new PolicyError('required_owners', 'OWNER_SIGNATURE_REQUIRED', `no verified owner signature by ${did}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (policy.profile_hashes !== undefined) {
|
|
123
|
+
const mandate = input.mandate;
|
|
124
|
+
if (!mandate) throw new PolicyError('profile_hashes', 'PROFILE_HASH_MISMATCH', 'the mandate is needed to check profile_hashes');
|
|
125
|
+
const expected = policy.profile_hashes[mandate.payload.profile_id];
|
|
126
|
+
if (expected === undefined) {
|
|
127
|
+
throw new PolicyError('profile_hashes', 'PROFILE_HASH_MISMATCH', `profile ${mandate.payload.profile_id} is not listed`);
|
|
128
|
+
}
|
|
129
|
+
if (expected !== mandate.payload.profile_hash) {
|
|
130
|
+
throw new PolicyError('profile_hashes', 'PROFILE_HASH_MISMATCH', `profile_hash differs from the listed one for ${mandate.payload.profile_id}`);
|
|
131
|
+
}
|
|
132
|
+
if (mandate.payload.mandate_id !== artifact.mandateId) {
|
|
133
|
+
throw new PolicyError('profile_hashes', 'PROFILE_HASH_MISMATCH', 'the mandate supplied is not the one the artifact names');
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
if (policy.action_types !== undefined && !policy.action_types.includes(artifact.actionType)) {
|
|
138
|
+
throw new PolicyError('action_types', 'POLICY_UNMET', `actionType ${artifact.actionType} is not in the listed set`);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
if (policy.freshness_seconds !== undefined) {
|
|
142
|
+
if (now - artifact.timestamp > policy.freshness_seconds) {
|
|
143
|
+
throw new PolicyError('freshness_seconds', 'POLICY_UNMET', `ticket is ${now - artifact.timestamp}s old, policy allows ${policy.freshness_seconds}s`);
|
|
144
|
+
}
|
|
145
|
+
if (input.projection && input.asAuthorization && now > input.projection.valid_until) {
|
|
146
|
+
throw new PolicyError('freshness_seconds', 'POLICY_UNMET', 'projection presented after valid_until');
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
if (policy.required_fields !== undefined) {
|
|
151
|
+
const ctx = input.ticket?.executionContext ?? input.projection?.executionContext ?? {};
|
|
152
|
+
for (const f of policy.required_fields) {
|
|
153
|
+
if (ctx[f] === undefined) {
|
|
154
|
+
throw new PolicyError('required_fields', 'POLICY_UNMET', `execution-context field ${f} is not ${input.ticket ? 'present' : 'disclosed'}`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if (policy.require_approval_signature) {
|
|
160
|
+
const ticket = input.ticket;
|
|
161
|
+
const mandate = input.mandate;
|
|
162
|
+
if (!ticket || !mandate) {
|
|
163
|
+
throw new PolicyError('require_approval_signature', 'APPROVAL_SIGNATURE_REQUIRED', 'the complete ticket and its mandate are needed to verify approvals');
|
|
164
|
+
}
|
|
165
|
+
if (ticket.proposalId !== undefined) {
|
|
166
|
+
let verified;
|
|
167
|
+
try {
|
|
168
|
+
verified = await verifyTicketApprovals(ticket, mandate);
|
|
169
|
+
} catch (err) {
|
|
170
|
+
throw new PolicyError('require_approval_signature', 'APPROVAL_SIGNATURE_REQUIRED', (err as Error).message);
|
|
171
|
+
}
|
|
172
|
+
const aboveCap = input.aboveCap ?? (ticket.approvalSignatures !== undefined && ticket.approvalSignatures.length > 0);
|
|
173
|
+
if (!approvalsSufficient(mandate, verified, aboveCap)) {
|
|
174
|
+
throw new PolicyError('require_approval_signature', 'APPROVAL_SIGNATURE_REQUIRED', 'the ticket lacks a verifiable signature for each decision it rests on');
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
@@ -1,36 +1,52 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Version negotiation — protocol.md → *Version negotiation (v0.7)
|
|
2
|
+
* Version negotiation — protocol.md → *Version negotiation (v0.7)* and the
|
|
3
|
+
* v0.7 → v0.8 exception (*Migration from v0.7*).
|
|
3
4
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* issues
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
5
|
+
* Two sets, because v0.8 is a re-grant release:
|
|
6
|
+
*
|
|
7
|
+
* - {@link PROTOCOL_VERSION} — the one version this package ISSUES. A v0.8
|
|
8
|
+
* Authority Server issues `version: "0.8"` only, and refuses a mandate
|
|
9
|
+
* request that does not support it (rule 3, exception).
|
|
10
|
+
* - {@link SUPPORTED_VERSIONS} — the versions this package can VERIFY and
|
|
11
|
+
* ENFORCE, each under its own rules (rule 4). A Gatekeeper sends this list
|
|
12
|
+
* as `supported_versions`; a verifier accepts an artifact of any of them.
|
|
13
|
+
* v0.7 is kept so that a Gatekeeper upgraded before its Authority Server
|
|
14
|
+
* keeps working, and so that v0.7 artifacts remain verifiable as evidence.
|
|
15
|
+
*
|
|
16
|
+
* `negotiateVersion` picks what an Authority Server issues. Its default is
|
|
17
|
+
* the strict v0.8 set; an AS that bridges the transition passes the wider
|
|
18
|
+
* set explicitly, behind its own switch.
|
|
13
19
|
*/
|
|
14
20
|
import { HapError } from './errors';
|
|
15
21
|
|
|
16
|
-
/** The protocol version this package issues
|
|
17
|
-
export const PROTOCOL_VERSION = '0.
|
|
22
|
+
/** The protocol version this package issues. */
|
|
23
|
+
export const PROTOCOL_VERSION = '0.8';
|
|
24
|
+
|
|
25
|
+
/** Every version this package verifies and enforces, newest first. */
|
|
26
|
+
export const SUPPORTED_VERSIONS: readonly string[] = ['0.8', '0.7'];
|
|
27
|
+
|
|
28
|
+
/** The versions an Authority Server built on this package issues. */
|
|
29
|
+
export const ISSUABLE_VERSIONS: readonly string[] = [PROTOCOL_VERSION];
|
|
18
30
|
|
|
19
|
-
/**
|
|
20
|
-
export
|
|
31
|
+
/** A protocol version this package knows the rules of. */
|
|
32
|
+
export type SupportedVersion = '0.8' | '0.7';
|
|
33
|
+
|
|
34
|
+
export function isSupportedVersion(v: unknown): v is SupportedVersion {
|
|
35
|
+
return typeof v === 'string' && SUPPORTED_VERSIONS.includes(v);
|
|
36
|
+
}
|
|
21
37
|
|
|
22
38
|
/**
|
|
23
|
-
* The highest version both the requester and
|
|
39
|
+
* The highest version both the requester and the issuer support.
|
|
24
40
|
*
|
|
25
41
|
* @param requested `supported_versions` from the mandate request. Absent →
|
|
26
|
-
* read as `["0.6"]` (protocol.md rule 1)
|
|
27
|
-
*
|
|
28
|
-
*
|
|
42
|
+
* read as `["0.6"]` (protocol.md rule 1), which no issuer here supports, so
|
|
43
|
+
* the refusal is honest rather than a silent assumption.
|
|
44
|
+
* @param supported What the issuer is willing to issue. Default: v0.8 only.
|
|
29
45
|
* @throws HapError `VERSION_UNSUPPORTED` when no version is common to both.
|
|
30
46
|
*/
|
|
31
47
|
export function negotiateVersion(
|
|
32
48
|
requested: readonly string[] | undefined,
|
|
33
|
-
supported: readonly string[] =
|
|
49
|
+
supported: readonly string[] = ISSUABLE_VERSIONS,
|
|
34
50
|
): string {
|
|
35
51
|
const requestedVersions = requested ?? ['0.6'];
|
|
36
52
|
// Highest-first so a requester offering several supported versions gets the
|
|
@@ -45,3 +61,18 @@ export function negotiateVersion(
|
|
|
45
61
|
}
|
|
46
62
|
return common[0];
|
|
47
63
|
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Refuse an artifact of a version this package cannot verify (rule 4: an
|
|
67
|
+
* artifact is read under its own version, never re-interpreted).
|
|
68
|
+
* @throws HapError `VERSION_UNSUPPORTED`
|
|
69
|
+
*/
|
|
70
|
+
export function assertSupportedVersion(version: unknown, what: string): asserts version is SupportedVersion {
|
|
71
|
+
if (!isSupportedVersion(version)) {
|
|
72
|
+
throw new HapError(
|
|
73
|
+
'VERSION_UNSUPPORTED',
|
|
74
|
+
`${what} version ${JSON.stringify(version)} is not verifiable by this implementation ` +
|
|
75
|
+
`(verifies [${SUPPORTED_VERSIONS.join(', ')}])`,
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
@@ -169,16 +169,27 @@ const newHeadersFromIncoming = (incoming) => globalThis.Headers === GlobalHeader
|
|
|
169
169
|
const reValidRequestUrl = /^\/[!#$&-;=?-\[\]_a-z~]*$/;
|
|
170
170
|
const reDotSegment = /\/\.\.?(?:[/?#]|$)/;
|
|
171
171
|
const reValidHost = /^[a-z0-9._-]+(?::(?:[1-5]\d{3,4}|[6-9]\d{3}))?$/;
|
|
172
|
+
const validateRequestTarget = (target) => {
|
|
173
|
+
const backslash = target.indexOf("\\");
|
|
174
|
+
if (backslash !== -1) {
|
|
175
|
+
const query = target.indexOf("?");
|
|
176
|
+
if (query === -1 || backslash < query) throw new RequestError("Backslash in request path");
|
|
177
|
+
}
|
|
178
|
+
};
|
|
172
179
|
const buildUrl = (scheme, host, incomingUrl) => {
|
|
173
180
|
const url = `${scheme}://${host}${incomingUrl}`;
|
|
174
181
|
if (!reValidHost.test(host)) {
|
|
182
|
+
validateRequestTarget(incomingUrl);
|
|
175
183
|
const urlObj = new URL(url);
|
|
176
184
|
if (urlObj.hostname.length !== host.length && urlObj.hostname !== (host.includes(":") ? host.replace(/:\d+$/, "") : host).toLowerCase()) throw new RequestError("Invalid host header");
|
|
177
185
|
return urlObj.href;
|
|
178
186
|
} else if (incomingUrl.length === 0) return url + "/";
|
|
179
187
|
else {
|
|
180
188
|
if (incomingUrl.charCodeAt(0) !== 47) throw new RequestError("Invalid URL");
|
|
181
|
-
if (!reValidRequestUrl.test(incomingUrl) || reDotSegment.test(incomingUrl))
|
|
189
|
+
if (!reValidRequestUrl.test(incomingUrl) || reDotSegment.test(incomingUrl)) {
|
|
190
|
+
validateRequestTarget(incomingUrl);
|
|
191
|
+
return new URL(url).href;
|
|
192
|
+
}
|
|
182
193
|
return url;
|
|
183
194
|
}
|
|
184
195
|
};
|
|
@@ -591,6 +602,7 @@ const newRequest = (incoming, defaultHostname) => {
|
|
|
591
602
|
if (incomingUrl[0] !== "/" && (incomingUrl.startsWith("http://") || incomingUrl.startsWith("https://"))) {
|
|
592
603
|
if (incoming instanceof node_http2.Http2ServerRequest) throw new RequestError("Absolute URL for :path is not allowed in HTTP/2");
|
|
593
604
|
try {
|
|
605
|
+
validateRequestTarget(incomingUrl);
|
|
594
606
|
req[urlKey] = new URL(incomingUrl).href;
|
|
595
607
|
} catch (e) {
|
|
596
608
|
throw new RequestError("Invalid absolute URL", { cause: e });
|
|
@@ -1143,6 +1155,7 @@ const appendResponseHeaders = (headers, responseHeaders) => {
|
|
|
1143
1155
|
});
|
|
1144
1156
|
};
|
|
1145
1157
|
const rejectUpgradeRequest = (socket, status, responseHeaders) => {
|
|
1158
|
+
if (socket.destroyed) return;
|
|
1146
1159
|
const responseLines = ["Connection: close", "Content-Length: 0"];
|
|
1147
1160
|
appendResponseHeaders(responseLines, responseHeaders);
|
|
1148
1161
|
socket.end(`HTTP/1.1 ${status.toString()} ${node_http.STATUS_CODES[status] ?? ""}\r\n${responseLines.join("\r\n")}\r\n\r
|
|
@@ -1150,7 +1163,12 @@ const rejectUpgradeRequest = (socket, status, responseHeaders) => {
|
|
|
1150
1163
|
};
|
|
1151
1164
|
const createUpgradeRequest = (request) => {
|
|
1152
1165
|
const protocol = request.socket.encrypted ? "https" : "http";
|
|
1153
|
-
const
|
|
1166
|
+
const incomingUrl = request.url ?? "/";
|
|
1167
|
+
let url;
|
|
1168
|
+
if (incomingUrl[0] !== "/" && (incomingUrl.startsWith("http://") || incomingUrl.startsWith("https://"))) {
|
|
1169
|
+
validateRequestTarget(incomingUrl);
|
|
1170
|
+
url = new URL(incomingUrl).href;
|
|
1171
|
+
} else url = buildUrl(protocol, request.headers.host ?? "localhost", incomingUrl);
|
|
1154
1172
|
const headers = new Headers();
|
|
1155
1173
|
for (const key in request.headers) {
|
|
1156
1174
|
const value = request.headers[key];
|
|
@@ -1187,6 +1205,10 @@ const setupWebSocket = (options) => {
|
|
|
1187
1205
|
};
|
|
1188
1206
|
server.on("upgrade", async (request, socket, head) => {
|
|
1189
1207
|
if (request.headers.upgrade?.toLowerCase() !== "websocket") return;
|
|
1208
|
+
const ignoreSocketError = () => {};
|
|
1209
|
+
const reclaimWaiterOnClose = () => rejectWaiter(request);
|
|
1210
|
+
socket.on("error", ignoreSocketError);
|
|
1211
|
+
socket.once("close", reclaimWaiterOnClose);
|
|
1190
1212
|
const env = {
|
|
1191
1213
|
incoming: request,
|
|
1192
1214
|
outgoing: void 0,
|
|
@@ -1201,8 +1223,12 @@ const setupWebSocket = (options) => {
|
|
|
1201
1223
|
status = response.status;
|
|
1202
1224
|
responseHeaders = response.headers;
|
|
1203
1225
|
}
|
|
1204
|
-
} catch {
|
|
1205
|
-
if (server.listenerCount("upgrade") === 1) rejectUpgradeRequest(socket, 500);
|
|
1226
|
+
} catch (error) {
|
|
1227
|
+
if (server.listenerCount("upgrade") === 1) rejectUpgradeRequest(socket, error instanceof RequestError ? 400 : 500);
|
|
1228
|
+
return;
|
|
1229
|
+
}
|
|
1230
|
+
if (socket.destroyed) {
|
|
1231
|
+
rejectWaiter(request);
|
|
1206
1232
|
return;
|
|
1207
1233
|
}
|
|
1208
1234
|
const waiter = waiterMap.get(request);
|
|
@@ -1214,12 +1240,11 @@ const setupWebSocket = (options) => {
|
|
|
1214
1240
|
const addResponseHeaders = (headers) => {
|
|
1215
1241
|
appendResponseHeaders(headers, responseHeaders);
|
|
1216
1242
|
};
|
|
1217
|
-
const reclaimWaiterOnClose = () => rejectWaiter(request);
|
|
1218
|
-
socket.once("close", reclaimWaiterOnClose);
|
|
1219
1243
|
wss.on("headers", addResponseHeaders);
|
|
1220
1244
|
try {
|
|
1221
1245
|
wss.handleUpgrade(request, socket, head, (ws) => {
|
|
1222
1246
|
socket.off("close", reclaimWaiterOnClose);
|
|
1247
|
+
socket.off("error", ignoreSocketError);
|
|
1223
1248
|
wss.emit("connection", ws, request);
|
|
1224
1249
|
});
|
|
1225
1250
|
} finally {
|
|
@@ -168,16 +168,27 @@ const newHeadersFromIncoming = (incoming) => globalThis.Headers === GlobalHeader
|
|
|
168
168
|
const reValidRequestUrl = /^\/[!#$&-;=?-\[\]_a-z~]*$/;
|
|
169
169
|
const reDotSegment = /\/\.\.?(?:[/?#]|$)/;
|
|
170
170
|
const reValidHost = /^[a-z0-9._-]+(?::(?:[1-5]\d{3,4}|[6-9]\d{3}))?$/;
|
|
171
|
+
const validateRequestTarget = (target) => {
|
|
172
|
+
const backslash = target.indexOf("\\");
|
|
173
|
+
if (backslash !== -1) {
|
|
174
|
+
const query = target.indexOf("?");
|
|
175
|
+
if (query === -1 || backslash < query) throw new RequestError("Backslash in request path");
|
|
176
|
+
}
|
|
177
|
+
};
|
|
171
178
|
const buildUrl = (scheme, host, incomingUrl) => {
|
|
172
179
|
const url = `${scheme}://${host}${incomingUrl}`;
|
|
173
180
|
if (!reValidHost.test(host)) {
|
|
181
|
+
validateRequestTarget(incomingUrl);
|
|
174
182
|
const urlObj = new URL(url);
|
|
175
183
|
if (urlObj.hostname.length !== host.length && urlObj.hostname !== (host.includes(":") ? host.replace(/:\d+$/, "") : host).toLowerCase()) throw new RequestError("Invalid host header");
|
|
176
184
|
return urlObj.href;
|
|
177
185
|
} else if (incomingUrl.length === 0) return url + "/";
|
|
178
186
|
else {
|
|
179
187
|
if (incomingUrl.charCodeAt(0) !== 47) throw new RequestError("Invalid URL");
|
|
180
|
-
if (!reValidRequestUrl.test(incomingUrl) || reDotSegment.test(incomingUrl))
|
|
188
|
+
if (!reValidRequestUrl.test(incomingUrl) || reDotSegment.test(incomingUrl)) {
|
|
189
|
+
validateRequestTarget(incomingUrl);
|
|
190
|
+
return new URL(url).href;
|
|
191
|
+
}
|
|
181
192
|
return url;
|
|
182
193
|
}
|
|
183
194
|
};
|
|
@@ -590,6 +601,7 @@ const newRequest = (incoming, defaultHostname) => {
|
|
|
590
601
|
if (incomingUrl[0] !== "/" && (incomingUrl.startsWith("http://") || incomingUrl.startsWith("https://"))) {
|
|
591
602
|
if (incoming instanceof Http2ServerRequest) throw new RequestError("Absolute URL for :path is not allowed in HTTP/2");
|
|
592
603
|
try {
|
|
604
|
+
validateRequestTarget(incomingUrl);
|
|
593
605
|
req[urlKey] = new URL(incomingUrl).href;
|
|
594
606
|
} catch (e) {
|
|
595
607
|
throw new RequestError("Invalid absolute URL", { cause: e });
|
|
@@ -1142,6 +1154,7 @@ const appendResponseHeaders = (headers, responseHeaders) => {
|
|
|
1142
1154
|
});
|
|
1143
1155
|
};
|
|
1144
1156
|
const rejectUpgradeRequest = (socket, status, responseHeaders) => {
|
|
1157
|
+
if (socket.destroyed) return;
|
|
1145
1158
|
const responseLines = ["Connection: close", "Content-Length: 0"];
|
|
1146
1159
|
appendResponseHeaders(responseLines, responseHeaders);
|
|
1147
1160
|
socket.end(`HTTP/1.1 ${status.toString()} ${STATUS_CODES[status] ?? ""}\r\n${responseLines.join("\r\n")}\r\n\r
|
|
@@ -1149,7 +1162,12 @@ const rejectUpgradeRequest = (socket, status, responseHeaders) => {
|
|
|
1149
1162
|
};
|
|
1150
1163
|
const createUpgradeRequest = (request) => {
|
|
1151
1164
|
const protocol = request.socket.encrypted ? "https" : "http";
|
|
1152
|
-
const
|
|
1165
|
+
const incomingUrl = request.url ?? "/";
|
|
1166
|
+
let url;
|
|
1167
|
+
if (incomingUrl[0] !== "/" && (incomingUrl.startsWith("http://") || incomingUrl.startsWith("https://"))) {
|
|
1168
|
+
validateRequestTarget(incomingUrl);
|
|
1169
|
+
url = new URL(incomingUrl).href;
|
|
1170
|
+
} else url = buildUrl(protocol, request.headers.host ?? "localhost", incomingUrl);
|
|
1153
1171
|
const headers = new Headers();
|
|
1154
1172
|
for (const key in request.headers) {
|
|
1155
1173
|
const value = request.headers[key];
|
|
@@ -1186,6 +1204,10 @@ const setupWebSocket = (options) => {
|
|
|
1186
1204
|
};
|
|
1187
1205
|
server.on("upgrade", async (request, socket, head) => {
|
|
1188
1206
|
if (request.headers.upgrade?.toLowerCase() !== "websocket") return;
|
|
1207
|
+
const ignoreSocketError = () => {};
|
|
1208
|
+
const reclaimWaiterOnClose = () => rejectWaiter(request);
|
|
1209
|
+
socket.on("error", ignoreSocketError);
|
|
1210
|
+
socket.once("close", reclaimWaiterOnClose);
|
|
1189
1211
|
const env = {
|
|
1190
1212
|
incoming: request,
|
|
1191
1213
|
outgoing: void 0,
|
|
@@ -1200,8 +1222,12 @@ const setupWebSocket = (options) => {
|
|
|
1200
1222
|
status = response.status;
|
|
1201
1223
|
responseHeaders = response.headers;
|
|
1202
1224
|
}
|
|
1203
|
-
} catch {
|
|
1204
|
-
if (server.listenerCount("upgrade") === 1) rejectUpgradeRequest(socket, 500);
|
|
1225
|
+
} catch (error) {
|
|
1226
|
+
if (server.listenerCount("upgrade") === 1) rejectUpgradeRequest(socket, error instanceof RequestError ? 400 : 500);
|
|
1227
|
+
return;
|
|
1228
|
+
}
|
|
1229
|
+
if (socket.destroyed) {
|
|
1230
|
+
rejectWaiter(request);
|
|
1205
1231
|
return;
|
|
1206
1232
|
}
|
|
1207
1233
|
const waiter = waiterMap.get(request);
|
|
@@ -1213,12 +1239,11 @@ const setupWebSocket = (options) => {
|
|
|
1213
1239
|
const addResponseHeaders = (headers) => {
|
|
1214
1240
|
appendResponseHeaders(headers, responseHeaders);
|
|
1215
1241
|
};
|
|
1216
|
-
const reclaimWaiterOnClose = () => rejectWaiter(request);
|
|
1217
|
-
socket.once("close", reclaimWaiterOnClose);
|
|
1218
1242
|
wss.on("headers", addResponseHeaders);
|
|
1219
1243
|
try {
|
|
1220
1244
|
wss.handleUpgrade(request, socket, head, (ws) => {
|
|
1221
1245
|
socket.off("close", reclaimWaiterOnClose);
|
|
1246
|
+
socket.off("error", ignoreSocketError);
|
|
1222
1247
|
wss.emit("connection", ws, request);
|
|
1223
1248
|
});
|
|
1224
1249
|
} finally {
|
|
@@ -12,7 +12,7 @@ export type CurveType = {
|
|
|
12
12
|
type: "x25519" | "x448";
|
|
13
13
|
adjustScalarBytes: (bytes: Uint8Array) => Uint8Array;
|
|
14
14
|
powPminus2: (x: bigint) => bigint;
|
|
15
|
-
randomBytes?: (bytesLength?: number) =>
|
|
15
|
+
randomBytes?: (bytesLength?: number) => Uint8Array;
|
|
16
16
|
};
|
|
17
17
|
export type MontgomeryECDH = {
|
|
18
18
|
scalarMult: (scalar: Uint8Array, u: Uint8Array) => Uint8Array;
|
|
@@ -20,7 +20,7 @@ export type MontgomeryECDH = {
|
|
|
20
20
|
getSharedSecret: (secretKeyA: Uint8Array, publicKeyB: Uint8Array) => Uint8Array;
|
|
21
21
|
getPublicKey: (secretKey: Uint8Array) => Uint8Array;
|
|
22
22
|
utils: {
|
|
23
|
-
randomSecretKey: (seed?: Uint8Array) =>
|
|
23
|
+
randomSecretKey: (seed?: Uint8Array) => Uint8Array;
|
|
24
24
|
};
|
|
25
25
|
GuBytes: Uint8Array;
|
|
26
26
|
lengths: CurveLengths;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"montgomery.d.ts","sourceRoot":"","sources":["../../../src/src/curve/montgomery.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAmBH,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAI7D,MAAM,MAAM,SAAS,GAAG;IACtB,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACxB,iBAAiB,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,UAAU,CAAC;IACrD,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAClC,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"montgomery.d.ts","sourceRoot":"","sources":["../../../src/src/curve/montgomery.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAmBH,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAI7D,MAAM,MAAM,SAAS,GAAG;IACtB,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACxB,iBAAiB,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,UAAU,CAAC;IACrD,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAClC,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,UAAU,CAAC;CACpD,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,KAAK,UAAU,CAAC;IAC9D,cAAc,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,UAAU,CAAC;IACnD,eAAe,EAAE,CACf,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,KACnB,UAAU,CAAC;IAChB,YAAY,EAAE,CAAC,SAAS,EAAE,UAAU,KAAK,UAAU,CAAC;IACpD,KAAK,EAAE;QACL,eAAe,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,KAAK,UAAU,CAAC;KACpD,CAAC;IACF,OAAO,EAAE,UAAU,CAAC;IACpB,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,CACN,IAAI,CAAC,EAAE,UAAU,KACd;QAAE,SAAS,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAE,CAAC;CACvD,CAAC;AAUF,wBAAgB,UAAU,CAAC,QAAQ,EAAE,SAAS,GAAG,cAAc,CAqJ9D"}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* @module
|
|
14
14
|
*/
|
|
15
15
|
/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
16
|
-
import { abytes, aInRange, bytesToNumberLE, copyBytes, numberToBytesLE,
|
|
16
|
+
import { abytes, aInRange, bytesToNumberLE, copyBytes, numberToBytesLE, randomBytes, validateObject, } from "../utils/noble.js";
|
|
17
17
|
import { createKeygen } from "./curve.js";
|
|
18
18
|
import { mod } from "./modular.js";
|
|
19
19
|
import { N_0, N_1, N_2 } from "../consts.js";
|
|
@@ -30,8 +30,8 @@ export function montgomery(curveDef) {
|
|
|
30
30
|
const is25519 = type === "x25519";
|
|
31
31
|
if (!is25519 && type !== "x448")
|
|
32
32
|
throw new Error("invalid type");
|
|
33
|
-
const randomBytes_ = rand ||
|
|
34
|
-
const montgomeryBits = is25519 ?
|
|
33
|
+
const randomBytes_ = rand || randomBytes;
|
|
34
|
+
const montgomeryBits = is25519 ? 255 : 448;
|
|
35
35
|
const fieldLen = is25519 ? 32 : 56;
|
|
36
36
|
const Gu = is25519 ? 9n : 5n;
|
|
37
37
|
// RFC 7748 #5:
|
|
@@ -50,17 +50,20 @@ export function montgomery(curveDef) {
|
|
|
50
50
|
function encodeU(u) {
|
|
51
51
|
return numberToBytesLE(modP(u), fieldLen);
|
|
52
52
|
}
|
|
53
|
+
// Mask for clearing bit 255 (x25519): (1n << 255n) - 1n
|
|
54
|
+
const uMask = is25519 ? (N_1 << 255n) - N_1 : N_0;
|
|
53
55
|
function decodeU(u) {
|
|
54
|
-
|
|
56
|
+
abytes(u, fieldLen, "uCoordinate");
|
|
57
|
+
let n = bytesToNumberLE(u);
|
|
55
58
|
// RFC: When receiving such an array, implementations of X25519
|
|
56
59
|
// (but not X448) MUST mask the most significant bit in the final byte.
|
|
57
60
|
if (is25519)
|
|
58
|
-
|
|
61
|
+
n &= uMask;
|
|
59
62
|
// RFC: Implementations MUST accept non-canonical values and process them as
|
|
60
63
|
// if they had been reduced modulo the field prime. The non-canonical
|
|
61
64
|
// values are 2^255 - 19 through 2^255 - 1 for X25519 and 2^448 - 2^224
|
|
62
65
|
// - 1 through 2^448 - 1 for X448.
|
|
63
|
-
return modP(
|
|
66
|
+
return modP(n);
|
|
64
67
|
}
|
|
65
68
|
function decodeScalar(scalar) {
|
|
66
69
|
return bytesToNumberLE(adjustScalarBytes(copyBytes(abytes(scalar, fieldLen, "scalar"))));
|
|
@@ -74,24 +77,21 @@ export function montgomery(curveDef) {
|
|
|
74
77
|
throw new Error("invalid private or public key received");
|
|
75
78
|
return encodeU(pu);
|
|
76
79
|
}
|
|
80
|
+
// Pre-decoded base point u-coordinate (avoids redundant decode on every call)
|
|
81
|
+
const GuDecoded = modP(Gu);
|
|
77
82
|
// Computes public key from private. By doing scalar multiplication of base point.
|
|
78
83
|
function scalarMultBase(scalar) {
|
|
79
|
-
|
|
84
|
+
const pu = montgomeryLadder(GuDecoded, decodeScalar(scalar));
|
|
85
|
+
if (pu === N_0)
|
|
86
|
+
throw new Error("invalid private or public key received");
|
|
87
|
+
return encodeU(pu);
|
|
80
88
|
}
|
|
81
89
|
const getPublicKey = scalarMultBase;
|
|
82
90
|
const getSharedSecret = scalarMult;
|
|
83
|
-
// cswap from RFC7748 "example code"
|
|
84
|
-
function cswap(swap, x_2, x_3) {
|
|
85
|
-
// dummy = mask(swap) AND (x_2 XOR x_3)
|
|
86
|
-
// Where mask(swap) is the all-1 or all-0 word of the same length as x_2
|
|
87
|
-
// and x_3, computed, e.g., as mask(swap) = 0 - swap.
|
|
88
|
-
const dummy = modP(swap * (x_2 - x_3));
|
|
89
|
-
x_2 = modP(x_2 - dummy); // x_2 = x_2 XOR dummy
|
|
90
|
-
x_3 = modP(x_3 + dummy); // x_3 = x_3 XOR dummy
|
|
91
|
-
return { x_2, x_3 };
|
|
92
|
-
}
|
|
93
91
|
/**
|
|
94
92
|
* Montgomery x-only multiplication ladder.
|
|
93
|
+
* cswap is inlined to avoid per-iteration object allocations.
|
|
94
|
+
* Loop counter uses number instead of bigint to avoid BigInt arithmetic overhead.
|
|
95
95
|
* @param pointU u coordinate (x) on Montgomery Curve 25519
|
|
96
96
|
* @param scalar by which the point would be multiplied
|
|
97
97
|
* @returns new Point on Montgomery curve
|
|
@@ -106,11 +106,19 @@ export function montgomery(curveDef) {
|
|
|
106
106
|
let x_3 = u;
|
|
107
107
|
let z_3 = N_1;
|
|
108
108
|
let swap = N_0;
|
|
109
|
-
|
|
110
|
-
|
|
109
|
+
let dummy;
|
|
110
|
+
for (let t = montgomeryBits - 1; t >= 0; t--) {
|
|
111
|
+
const k_t = (k >> BigInt(t)) & N_1;
|
|
111
112
|
swap ^= k_t;
|
|
112
|
-
|
|
113
|
-
|
|
113
|
+
// Masked cswap (best-effort constant-time for BigInt).
|
|
114
|
+
// Only dummy needs modP; x/z reductions are deferred to the
|
|
115
|
+
// subsequent multiplications in the ladder body.
|
|
116
|
+
dummy = modP(swap * (x_2 - x_3));
|
|
117
|
+
x_2 -= dummy;
|
|
118
|
+
x_3 += dummy;
|
|
119
|
+
dummy = modP(swap * (z_2 - z_3));
|
|
120
|
+
z_2 -= dummy;
|
|
121
|
+
z_3 += dummy;
|
|
114
122
|
swap = k_t;
|
|
115
123
|
const A = x_2 + z_2;
|
|
116
124
|
const AA = modP(A * A);
|
|
@@ -126,10 +134,17 @@ export function montgomery(curveDef) {
|
|
|
126
134
|
x_3 = modP(dacb * dacb);
|
|
127
135
|
z_3 = modP(x_1 * modP(da_cb * da_cb));
|
|
128
136
|
x_2 = modP(AA * BB);
|
|
129
|
-
|
|
137
|
+
// a24 is small (17-bit for x25519, 16-bit for x448), so a24 * E adds
|
|
138
|
+
// only ~17 bits beyond P — negligible impact on the outer multiplication.
|
|
139
|
+
z_2 = modP(E * (AA + a24 * E));
|
|
130
140
|
}
|
|
131
|
-
|
|
132
|
-
|
|
141
|
+
// Final masked cswap
|
|
142
|
+
dummy = modP(swap * (x_2 - x_3));
|
|
143
|
+
x_2 -= dummy;
|
|
144
|
+
x_3 += dummy;
|
|
145
|
+
dummy = modP(swap * (z_2 - z_3));
|
|
146
|
+
z_2 -= dummy;
|
|
147
|
+
z_3 += dummy;
|
|
133
148
|
const z2 = powPminus2(z_2); // `Fp.pow(x, P - N_2)` is much slower equivalent
|
|
134
149
|
return modP(x_2 * z2); // Return x_2 * (z_2^(p - 2))
|
|
135
150
|
}
|
|
@@ -138,9 +153,9 @@ export function montgomery(curveDef) {
|
|
|
138
153
|
publicKey: fieldLen,
|
|
139
154
|
seed: fieldLen,
|
|
140
155
|
};
|
|
141
|
-
const randomSecretKey =
|
|
156
|
+
const randomSecretKey = (seed) => {
|
|
142
157
|
if (seed === undefined) {
|
|
143
|
-
seed =
|
|
158
|
+
seed = randomBytes_(fieldLen);
|
|
144
159
|
}
|
|
145
160
|
abytes(seed, lengths.seed, "seed");
|
|
146
161
|
return seed;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sha3.d.ts","sourceRoot":"","sources":["../../../src/src/hash/sha3.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAwBH,OAAO,EACL,KAAK,KAAK,EACV,KAAK,QAAQ,EAEb,KAAK,IAAI,EAET,KAAK,OAAO,EACb,MAAM,WAAW,CAAC;AA4CnB,kFAAkF;AAClF,wBAAgB,OAAO,CACrB,CAAC,EAAE,WAAW,EACd,MAAM,GAAE,MAAW,EACnB,CAAC,CAAC,EAAE,WAAW,GACd,IAAI,CAySN;AAED,8BAA8B;AAC9B,qBAAa,MAAO,YAAW,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC;IAC1D,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC;IAC5B,SAAS,CAAC,GAAG,SAAK;IAClB,SAAS,CAAC,MAAM,SAAK;IACrB,SAAS,CAAC,QAAQ,UAAS;IAC3B,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC;IAC/B,SAAS,CAAC,SAAS,UAAS;IAC5B,OAAO,CAAC,EAAE,CAAuB;IAE1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,SAAS,UAAS;IAC5B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;gBAIvB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,SAAS,UAAQ,EACjB,MAAM,GAAE,MAAW;IAiBrB,KAAK,IAAI,MAAM;IAGf,0DAA0D;IAC1D,KAAK,IAAI,IAAI;IAOb,SAAS,CAAC,MAAM,IAAI,IAAI;IAOxB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAK9B,qFAAqF;IACrF,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAUpC,SAAS,CAAC,MAAM,IAAI,IAAI;IAUxB,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,UAAU,GAAG,UAAU;IAKhD,yFAAyF;IACzF,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,UAAU;IAa5C,OAAO,CAAC,GAAG,EAAE,UAAU,GAAG,UAAU;IAOpC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU;IAI9B,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,UAAU;IAOvC,MAAM,IAAI,UAAU;IAGpB,OAAO,IAAI,IAAI;IAIf,UAAU,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;CAehC;
|
|
1
|
+
{"version":3,"file":"sha3.d.ts","sourceRoot":"","sources":["../../../src/src/hash/sha3.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAwBH,OAAO,EACL,KAAK,KAAK,EACV,KAAK,QAAQ,EAEb,KAAK,IAAI,EAET,KAAK,OAAO,EACb,MAAM,WAAW,CAAC;AA4CnB,kFAAkF;AAClF,wBAAgB,OAAO,CACrB,CAAC,EAAE,WAAW,EACd,MAAM,GAAE,MAAW,EACnB,CAAC,CAAC,EAAE,WAAW,GACd,IAAI,CAySN;AAED,8BAA8B;AAC9B,qBAAa,MAAO,YAAW,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC;IAC1D,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC;IAC5B,SAAS,CAAC,GAAG,SAAK;IAClB,SAAS,CAAC,MAAM,SAAK;IACrB,SAAS,CAAC,QAAQ,UAAS;IAC3B,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC;IAC/B,SAAS,CAAC,SAAS,UAAS;IAC5B,OAAO,CAAC,EAAE,CAAuB;IAE1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,SAAS,UAAS;IAC5B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;gBAIvB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,SAAS,UAAQ,EACjB,MAAM,GAAE,MAAW;IAiBrB,KAAK,IAAI,MAAM;IAGf,0DAA0D;IAC1D,KAAK,IAAI,IAAI;IAOb,SAAS,CAAC,MAAM,IAAI,IAAI;IAOxB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAK9B,qFAAqF;IACrF,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAUpC,SAAS,CAAC,MAAM,IAAI,IAAI;IAUxB,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,UAAU,GAAG,UAAU;IAKhD,yFAAyF;IACzF,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,UAAU;IAa5C,OAAO,CAAC,GAAG,EAAE,UAAU,GAAG,UAAU;IAOpC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU;IAI9B,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,UAAU;IAOvC,MAAM,IAAI,UAAU;IAGpB,OAAO,IAAI,IAAI;IAIf,UAAU,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;CAehC;AASD,yDAAyD;AACzD,eAAO,MAAM,QAAQ,EAAE,KAKtB,CAAC;AAEF,8BAA8B;AAC9B,eAAO,MAAM,QAAQ,EAAE,KAKtB,CAAC;AAEF,8BAA8B;AAC9B,eAAO,MAAM,QAAQ,EAAE,KAKtB,CAAC;AAEF,gCAAgC;AAChC,eAAO,MAAM,UAAU,EAAE,KAAgD,CAAC;AAC1E,yDAAyD;AACzD,eAAO,MAAM,UAAU,EAAE,KAAgD,CAAC;AAC1E,gCAAgC;AAChC,eAAO,MAAM,UAAU,EAAE,KAAgD,CAAC;AAC1E,gCAAgC;AAChC,eAAO,MAAM,UAAU,EAAE,KAA+C,CAAC;AAEzE,MAAM,MAAM,SAAS,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAmB3C,0CAA0C;AAC1C,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAEO,CAAC;AACzD,0CAA0C;AAC1C,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAEO,CAAC"}
|