@spinajs/authn-keys 0.0.0-stage → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +165 -2
- package/lib/cjs/bootstrap.d.ts +6 -0
- package/lib/cjs/bootstrap.d.ts.map +1 -0
- package/lib/cjs/bootstrap.js +23 -0
- package/lib/cjs/bootstrap.js.map +1 -0
- package/lib/cjs/challenge/challenge.d.ts +27 -0
- package/lib/cjs/challenge/challenge.d.ts.map +1 -0
- package/lib/cjs/challenge/challenge.js +56 -0
- package/lib/cjs/challenge/challenge.js.map +1 -0
- package/lib/cjs/challenge/index.d.ts +2 -0
- package/lib/cjs/challenge/index.d.ts.map +1 -0
- package/lib/cjs/challenge/index.js +18 -0
- package/lib/cjs/challenge/index.js.map +1 -0
- package/lib/cjs/cli/AddKey.d.ts +18 -0
- package/lib/cjs/cli/AddKey.d.ts.map +1 -0
- package/lib/cjs/cli/AddKey.js +65 -0
- package/lib/cjs/cli/AddKey.js.map +1 -0
- package/lib/cjs/cli/ListKeys.d.ts +11 -0
- package/lib/cjs/cli/ListKeys.d.ts.map +1 -0
- package/lib/cjs/cli/ListKeys.js +48 -0
- package/lib/cjs/cli/ListKeys.js.map +1 -0
- package/lib/cjs/cli/RevokeKey.d.ts +9 -0
- package/lib/cjs/cli/RevokeKey.d.ts.map +1 -0
- package/lib/cjs/cli/RevokeKey.js +42 -0
- package/lib/cjs/cli/RevokeKey.js.map +1 -0
- package/lib/cjs/cli/common.d.ts +9 -0
- package/lib/cjs/cli/common.d.ts.map +1 -0
- package/lib/cjs/cli/common.js +35 -0
- package/lib/cjs/cli/common.js.map +1 -0
- package/lib/cjs/cli/index.d.ts +5 -0
- package/lib/cjs/cli/index.d.ts.map +1 -0
- package/lib/cjs/cli/index.js +21 -0
- package/lib/cjs/cli/index.js.map +1 -0
- package/lib/cjs/config/authn-keys.d.ts +9 -0
- package/lib/cjs/config/authn-keys.d.ts.map +1 -0
- package/lib/cjs/config/authn-keys.js +23 -0
- package/lib/cjs/config/authn-keys.js.map +1 -0
- package/lib/cjs/httpsig/base.d.ts +8 -0
- package/lib/cjs/httpsig/base.d.ts.map +1 -0
- package/lib/cjs/httpsig/base.js +73 -0
- package/lib/cjs/httpsig/base.js.map +1 -0
- package/lib/cjs/httpsig/fields.d.ts +17 -0
- package/lib/cjs/httpsig/fields.d.ts.map +1 -0
- package/lib/cjs/httpsig/fields.js +137 -0
- package/lib/cjs/httpsig/fields.js.map +1 -0
- package/lib/cjs/httpsig/index.d.ts +3 -0
- package/lib/cjs/httpsig/index.d.ts.map +1 -0
- package/lib/cjs/httpsig/index.js +19 -0
- package/lib/cjs/httpsig/index.js.map +1 -0
- package/lib/cjs/index.d.ts +13 -0
- package/lib/cjs/index.d.ts.map +1 -0
- package/lib/cjs/index.js +29 -0
- package/lib/cjs/index.js.map +1 -0
- package/lib/cjs/jwk/base64url.d.ts +7 -0
- package/lib/cjs/jwk/base64url.d.ts.map +1 -0
- package/lib/cjs/jwk/base64url.js +22 -0
- package/lib/cjs/jwk/base64url.js.map +1 -0
- package/lib/cjs/jwk/ed25519.d.ts +9 -0
- package/lib/cjs/jwk/ed25519.d.ts.map +1 -0
- package/lib/cjs/jwk/ed25519.js +47 -0
- package/lib/cjs/jwk/ed25519.js.map +1 -0
- package/lib/cjs/jwk/index.d.ts +5 -0
- package/lib/cjs/jwk/index.d.ts.map +1 -0
- package/lib/cjs/jwk/index.js +21 -0
- package/lib/cjs/jwk/index.js.map +1 -0
- package/lib/cjs/jwk/keys.d.ts +18 -0
- package/lib/cjs/jwk/keys.d.ts.map +1 -0
- package/lib/cjs/jwk/keys.js +102 -0
- package/lib/cjs/jwk/keys.js.map +1 -0
- package/lib/cjs/jwk/signature.d.ts +11 -0
- package/lib/cjs/jwk/signature.d.ts.map +1 -0
- package/lib/cjs/jwk/signature.js +45 -0
- package/lib/cjs/jwk/signature.js.map +1 -0
- package/lib/cjs/jws/index.d.ts +4 -0
- package/lib/cjs/jws/index.d.ts.map +1 -0
- package/lib/cjs/jws/index.js +20 -0
- package/lib/cjs/jws/index.js.map +1 -0
- package/lib/cjs/jws/json.d.ts +11 -0
- package/lib/cjs/jws/json.d.ts.map +1 -0
- package/lib/cjs/jws/json.js +76 -0
- package/lib/cjs/jws/json.js.map +1 -0
- package/lib/cjs/jws/signer.d.ts +25 -0
- package/lib/cjs/jws/signer.d.ts.map +1 -0
- package/lib/cjs/jws/signer.js +83 -0
- package/lib/cjs/jws/signer.js.map +1 -0
- package/lib/cjs/jws/verifier.d.ts +10 -0
- package/lib/cjs/jws/verifier.d.ts.map +1 -0
- package/lib/cjs/jws/verifier.js +86 -0
- package/lib/cjs/jws/verifier.js.map +1 -0
- package/lib/cjs/migrations/AuthnKeys_2026_10_02_00_00_00.d.ts +7 -0
- package/lib/cjs/migrations/AuthnKeys_2026_10_02_00_00_00.d.ts.map +1 -0
- package/lib/cjs/migrations/AuthnKeys_2026_10_02_00_00_00.js +40 -0
- package/lib/cjs/migrations/AuthnKeys_2026_10_02_00_00_00.js.map +1 -0
- package/lib/cjs/migrations/index.d.ts +2 -0
- package/lib/cjs/migrations/index.d.ts.map +1 -0
- package/lib/cjs/migrations/index.js +18 -0
- package/lib/cjs/migrations/index.js.map +1 -0
- package/lib/cjs/models/AuthnKey.d.ts +22 -0
- package/lib/cjs/models/AuthnKey.d.ts.map +1 -0
- package/lib/cjs/models/AuthnKey.js +43 -0
- package/lib/cjs/models/AuthnKey.js.map +1 -0
- package/lib/cjs/models/AuthnNonce.d.ts +8 -0
- package/lib/cjs/models/AuthnNonce.d.ts.map +1 -0
- package/lib/cjs/models/AuthnNonce.js +31 -0
- package/lib/cjs/models/AuthnNonce.js.map +1 -0
- package/lib/cjs/models/index.d.ts +3 -0
- package/lib/cjs/models/index.d.ts.map +1 -0
- package/lib/cjs/models/index.js +19 -0
- package/lib/cjs/models/index.js.map +1 -0
- package/lib/cjs/nonce/index.d.ts +2 -0
- package/lib/cjs/nonce/index.d.ts.map +1 -0
- package/lib/cjs/nonce/index.js +18 -0
- package/lib/cjs/nonce/index.js.map +1 -0
- package/lib/cjs/nonce/store.d.ts +22 -0
- package/lib/cjs/nonce/store.d.ts.map +1 -0
- package/lib/cjs/nonce/store.js +98 -0
- package/lib/cjs/nonce/store.js.map +1 -0
- package/lib/cjs/options/index.d.ts +2 -0
- package/lib/cjs/options/index.d.ts.map +1 -0
- package/lib/cjs/options/index.js +18 -0
- package/lib/cjs/options/index.js.map +1 -0
- package/lib/cjs/options/options.d.ts +47 -0
- package/lib/cjs/options/options.d.ts.map +1 -0
- package/lib/cjs/options/options.js +42 -0
- package/lib/cjs/options/options.js.map +1 -0
- package/lib/cjs/package.json +1 -0
- package/lib/cjs/register-schema.d.ts +2 -0
- package/lib/cjs/register-schema.d.ts.map +1 -0
- package/lib/cjs/register-schema.js +9 -0
- package/lib/cjs/register-schema.js.map +1 -0
- package/lib/cjs/registry/index.d.ts +4 -0
- package/lib/cjs/registry/index.d.ts.map +1 -0
- package/lib/cjs/registry/index.js +20 -0
- package/lib/cjs/registry/index.js.map +1 -0
- package/lib/cjs/registry/orm-store.d.ts +15 -0
- package/lib/cjs/registry/orm-store.d.ts.map +1 -0
- package/lib/cjs/registry/orm-store.js +109 -0
- package/lib/cjs/registry/orm-store.js.map +1 -0
- package/lib/cjs/registry/registry.d.ts +54 -0
- package/lib/cjs/registry/registry.d.ts.map +1 -0
- package/lib/cjs/registry/registry.js +244 -0
- package/lib/cjs/registry/registry.js.map +1 -0
- package/lib/cjs/registry/store.d.ts +25 -0
- package/lib/cjs/registry/store.d.ts.map +1 -0
- package/lib/cjs/registry/store.js +66 -0
- package/lib/cjs/registry/store.js.map +1 -0
- package/lib/cjs/schema.d.ts +88 -0
- package/lib/cjs/schema.d.ts.map +1 -0
- package/lib/cjs/schema.js +41 -0
- package/lib/cjs/schema.js.map +1 -0
- package/lib/cjs/strategies/assertion.d.ts +29 -0
- package/lib/cjs/strategies/assertion.d.ts.map +1 -0
- package/lib/cjs/strategies/assertion.js +118 -0
- package/lib/cjs/strategies/assertion.js.map +1 -0
- package/lib/cjs/strategies/challenge.d.ts +25 -0
- package/lib/cjs/strategies/challenge.d.ts.map +1 -0
- package/lib/cjs/strategies/challenge.js +81 -0
- package/lib/cjs/strategies/challenge.js.map +1 -0
- package/lib/cjs/strategies/httpsig.d.ts +34 -0
- package/lib/cjs/strategies/httpsig.d.ts.map +1 -0
- package/lib/cjs/strategies/httpsig.js +127 -0
- package/lib/cjs/strategies/httpsig.js.map +1 -0
- package/lib/cjs/strategies/index.d.ts +5 -0
- package/lib/cjs/strategies/index.d.ts.map +1 -0
- package/lib/cjs/strategies/index.js +21 -0
- package/lib/cjs/strategies/index.js.map +1 -0
- package/lib/cjs/strategies/keys.d.ts +43 -0
- package/lib/cjs/strategies/keys.d.ts.map +1 -0
- package/lib/cjs/strategies/keys.js +93 -0
- package/lib/cjs/strategies/keys.js.map +1 -0
- package/lib/mjs/bootstrap.d.ts +6 -0
- package/lib/mjs/bootstrap.d.ts.map +1 -0
- package/lib/mjs/bootstrap.js +20 -0
- package/lib/mjs/bootstrap.js.map +1 -0
- package/lib/mjs/challenge/challenge.d.ts +27 -0
- package/lib/mjs/challenge/challenge.d.ts.map +1 -0
- package/lib/mjs/challenge/challenge.js +45 -0
- package/lib/mjs/challenge/challenge.js.map +1 -0
- package/lib/mjs/challenge/index.d.ts +2 -0
- package/lib/mjs/challenge/index.d.ts.map +1 -0
- package/lib/mjs/challenge/index.js +2 -0
- package/lib/mjs/challenge/index.js.map +1 -0
- package/lib/mjs/cli/AddKey.d.ts +18 -0
- package/lib/mjs/cli/AddKey.d.ts.map +1 -0
- package/lib/mjs/cli/AddKey.js +62 -0
- package/lib/mjs/cli/AddKey.js.map +1 -0
- package/lib/mjs/cli/ListKeys.d.ts +11 -0
- package/lib/mjs/cli/ListKeys.d.ts.map +1 -0
- package/lib/mjs/cli/ListKeys.js +44 -0
- package/lib/mjs/cli/ListKeys.js.map +1 -0
- package/lib/mjs/cli/RevokeKey.d.ts +9 -0
- package/lib/mjs/cli/RevokeKey.d.ts.map +1 -0
- package/lib/mjs/cli/RevokeKey.js +39 -0
- package/lib/mjs/cli/RevokeKey.js.map +1 -0
- package/lib/mjs/cli/common.d.ts +9 -0
- package/lib/mjs/cli/common.d.ts.map +1 -0
- package/lib/mjs/cli/common.js +30 -0
- package/lib/mjs/cli/common.js.map +1 -0
- package/lib/mjs/cli/index.d.ts +5 -0
- package/lib/mjs/cli/index.d.ts.map +1 -0
- package/lib/mjs/cli/index.js +5 -0
- package/lib/mjs/cli/index.js.map +1 -0
- package/lib/mjs/config/authn-keys.d.ts +9 -0
- package/lib/mjs/config/authn-keys.d.ts.map +1 -0
- package/lib/mjs/config/authn-keys.js +21 -0
- package/lib/mjs/config/authn-keys.js.map +1 -0
- package/lib/mjs/httpsig/base.d.ts +8 -0
- package/lib/mjs/httpsig/base.d.ts.map +1 -0
- package/lib/mjs/httpsig/base.js +67 -0
- package/lib/mjs/httpsig/base.js.map +1 -0
- package/lib/mjs/httpsig/fields.d.ts +17 -0
- package/lib/mjs/httpsig/fields.d.ts.map +1 -0
- package/lib/mjs/httpsig/fields.js +133 -0
- package/lib/mjs/httpsig/fields.js.map +1 -0
- package/lib/mjs/httpsig/index.d.ts +3 -0
- package/lib/mjs/httpsig/index.d.ts.map +1 -0
- package/lib/mjs/httpsig/index.js +3 -0
- package/lib/mjs/httpsig/index.js.map +1 -0
- package/lib/mjs/index.d.ts +13 -0
- package/lib/mjs/index.d.ts.map +1 -0
- package/lib/mjs/index.js +13 -0
- package/lib/mjs/index.js.map +1 -0
- package/lib/mjs/jwk/base64url.d.ts +7 -0
- package/lib/mjs/jwk/base64url.d.ts.map +1 -0
- package/lib/mjs/jwk/base64url.js +18 -0
- package/lib/mjs/jwk/base64url.js.map +1 -0
- package/lib/mjs/jwk/ed25519.d.ts +9 -0
- package/lib/mjs/jwk/ed25519.d.ts.map +1 -0
- package/lib/mjs/jwk/ed25519.js +42 -0
- package/lib/mjs/jwk/ed25519.js.map +1 -0
- package/lib/mjs/jwk/index.d.ts +5 -0
- package/lib/mjs/jwk/index.d.ts.map +1 -0
- package/lib/mjs/jwk/index.js +5 -0
- package/lib/mjs/jwk/index.js.map +1 -0
- package/lib/mjs/jwk/keys.d.ts +18 -0
- package/lib/mjs/jwk/keys.d.ts.map +1 -0
- package/lib/mjs/jwk/keys.js +95 -0
- package/lib/mjs/jwk/keys.js.map +1 -0
- package/lib/mjs/jwk/signature.d.ts +11 -0
- package/lib/mjs/jwk/signature.d.ts.map +1 -0
- package/lib/mjs/jwk/signature.js +39 -0
- package/lib/mjs/jwk/signature.js.map +1 -0
- package/lib/mjs/jws/index.d.ts +4 -0
- package/lib/mjs/jws/index.d.ts.map +1 -0
- package/lib/mjs/jws/index.js +4 -0
- package/lib/mjs/jws/index.js.map +1 -0
- package/lib/mjs/jws/json.d.ts +11 -0
- package/lib/mjs/jws/json.d.ts.map +1 -0
- package/lib/mjs/jws/json.js +72 -0
- package/lib/mjs/jws/json.js.map +1 -0
- package/lib/mjs/jws/signer.d.ts +25 -0
- package/lib/mjs/jws/signer.d.ts.map +1 -0
- package/lib/mjs/jws/signer.js +79 -0
- package/lib/mjs/jws/signer.js.map +1 -0
- package/lib/mjs/jws/verifier.d.ts +10 -0
- package/lib/mjs/jws/verifier.d.ts.map +1 -0
- package/lib/mjs/jws/verifier.js +83 -0
- package/lib/mjs/jws/verifier.js.map +1 -0
- package/lib/mjs/migrations/AuthnKeys_2026_10_02_00_00_00.d.ts +7 -0
- package/lib/mjs/migrations/AuthnKeys_2026_10_02_00_00_00.d.ts.map +1 -0
- package/lib/mjs/migrations/AuthnKeys_2026_10_02_00_00_00.js +37 -0
- package/lib/mjs/migrations/AuthnKeys_2026_10_02_00_00_00.js.map +1 -0
- package/lib/mjs/migrations/index.d.ts +2 -0
- package/lib/mjs/migrations/index.d.ts.map +1 -0
- package/lib/mjs/migrations/index.js +2 -0
- package/lib/mjs/migrations/index.js.map +1 -0
- package/lib/mjs/models/AuthnKey.d.ts +22 -0
- package/lib/mjs/models/AuthnKey.d.ts.map +1 -0
- package/lib/mjs/models/AuthnKey.js +40 -0
- package/lib/mjs/models/AuthnKey.js.map +1 -0
- package/lib/mjs/models/AuthnNonce.d.ts +8 -0
- package/lib/mjs/models/AuthnNonce.d.ts.map +1 -0
- package/lib/mjs/models/AuthnNonce.js +28 -0
- package/lib/mjs/models/AuthnNonce.js.map +1 -0
- package/lib/mjs/models/index.d.ts +3 -0
- package/lib/mjs/models/index.d.ts.map +1 -0
- package/lib/mjs/models/index.js +3 -0
- package/lib/mjs/models/index.js.map +1 -0
- package/lib/mjs/nonce/index.d.ts +2 -0
- package/lib/mjs/nonce/index.d.ts.map +1 -0
- package/lib/mjs/nonce/index.js +2 -0
- package/lib/mjs/nonce/index.js.map +1 -0
- package/lib/mjs/nonce/store.d.ts +22 -0
- package/lib/mjs/nonce/store.d.ts.map +1 -0
- package/lib/mjs/nonce/store.js +92 -0
- package/lib/mjs/nonce/store.js.map +1 -0
- package/lib/mjs/options/index.d.ts +2 -0
- package/lib/mjs/options/index.d.ts.map +1 -0
- package/lib/mjs/options/index.js +2 -0
- package/lib/mjs/options/index.js.map +1 -0
- package/lib/mjs/options/options.d.ts +47 -0
- package/lib/mjs/options/options.d.ts.map +1 -0
- package/lib/mjs/options/options.js +39 -0
- package/lib/mjs/options/options.js.map +1 -0
- package/lib/mjs/package.json +1 -0
- package/lib/mjs/register-schema.d.ts +2 -0
- package/lib/mjs/register-schema.d.ts.map +1 -0
- package/lib/mjs/register-schema.js +7 -0
- package/lib/mjs/register-schema.js.map +1 -0
- package/lib/mjs/registry/index.d.ts +4 -0
- package/lib/mjs/registry/index.d.ts.map +1 -0
- package/lib/mjs/registry/index.js +4 -0
- package/lib/mjs/registry/index.js.map +1 -0
- package/lib/mjs/registry/orm-store.d.ts +15 -0
- package/lib/mjs/registry/orm-store.d.ts.map +1 -0
- package/lib/mjs/registry/orm-store.js +106 -0
- package/lib/mjs/registry/orm-store.js.map +1 -0
- package/lib/mjs/registry/registry.d.ts +54 -0
- package/lib/mjs/registry/registry.d.ts.map +1 -0
- package/lib/mjs/registry/registry.js +239 -0
- package/lib/mjs/registry/registry.js.map +1 -0
- package/lib/mjs/registry/store.d.ts +25 -0
- package/lib/mjs/registry/store.d.ts.map +1 -0
- package/lib/mjs/registry/store.js +57 -0
- package/lib/mjs/registry/store.js.map +1 -0
- package/lib/mjs/schema.d.ts +88 -0
- package/lib/mjs/schema.d.ts.map +1 -0
- package/lib/mjs/schema.js +38 -0
- package/lib/mjs/schema.js.map +1 -0
- package/lib/mjs/strategies/assertion.d.ts +29 -0
- package/lib/mjs/strategies/assertion.d.ts.map +1 -0
- package/lib/mjs/strategies/assertion.js +115 -0
- package/lib/mjs/strategies/assertion.js.map +1 -0
- package/lib/mjs/strategies/challenge.d.ts +25 -0
- package/lib/mjs/strategies/challenge.d.ts.map +1 -0
- package/lib/mjs/strategies/challenge.js +78 -0
- package/lib/mjs/strategies/challenge.js.map +1 -0
- package/lib/mjs/strategies/httpsig.d.ts +34 -0
- package/lib/mjs/strategies/httpsig.d.ts.map +1 -0
- package/lib/mjs/strategies/httpsig.js +124 -0
- package/lib/mjs/strategies/httpsig.js.map +1 -0
- package/lib/mjs/strategies/index.d.ts +5 -0
- package/lib/mjs/strategies/index.d.ts.map +1 -0
- package/lib/mjs/strategies/index.js +5 -0
- package/lib/mjs/strategies/index.js.map +1 -0
- package/lib/mjs/strategies/keys.d.ts +43 -0
- package/lib/mjs/strategies/keys.d.ts.map +1 -0
- package/lib/mjs/strategies/keys.js +85 -0
- package/lib/mjs/strategies/keys.js.map +1 -0
- package/lib/tsconfig.cjs.tsbuildinfo +1 -0
- package/lib/tsconfig.mjs.tsbuildinfo +1 -0
- package/package.json +79 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./common.js"), exports);
|
|
18
|
+
__exportStar(require("./AddKey.js"), exports);
|
|
19
|
+
__exportStar(require("./ListKeys.js"), exports);
|
|
20
|
+
__exportStar(require("./RevokeKey.js"), exports);
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,8CAA4B;AAC5B,gDAA8B;AAC9B,iDAA+B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authn-keys.d.ts","sourceRoot":"","sources":["../../../src/config/authn-keys.ts"],"names":[],"mappings":"AAeA,QAAA,MAAM,SAAS;IACb,MAAM;QACJ,IAAI;YACF,GAAG;;;CAGR,CAAC;eAEa,SAAS"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const path_1 = require("path");
|
|
4
|
+
function dir(path) {
|
|
5
|
+
const inCommonJs = typeof module !== 'undefined';
|
|
6
|
+
return [
|
|
7
|
+
(0, path_1.resolve)((0, path_1.normalize)((0, path_1.join)(process.env.WORKSPACE_ROOT_PATH ?? process.cwd(), 'node_modules', '@spinajs', 'authn-keys', 'lib', inCommonJs ? 'cjs' : 'mjs', path))),
|
|
8
|
+
// one up if we run from app or build folder
|
|
9
|
+
(0, path_1.resolve)((0, path_1.normalize)((0, path_1.join)(process.env.WORKSPACE_ROOT_PATH ?? process.cwd(), '../', 'node_modules', '@spinajs', 'authn-keys', 'lib', inCommonJs ? 'cjs' : 'mjs', path))),
|
|
10
|
+
];
|
|
11
|
+
}
|
|
12
|
+
// Only the CLI scan dir. A non-empty system.dirs.migrations would replace the orm's defaults in every app (see
|
|
13
|
+
// authn-token's config); the migration and the models register through their decorators. The authn.keys defaults
|
|
14
|
+
// live in the authn schema.
|
|
15
|
+
const authnKeys = {
|
|
16
|
+
system: {
|
|
17
|
+
dirs: {
|
|
18
|
+
cli: [...dir('cli')],
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
exports.default = authnKeys;
|
|
23
|
+
//# sourceMappingURL=authn-keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authn-keys.js","sourceRoot":"","sources":["../../../src/config/authn-keys.ts"],"names":[],"mappings":";;AAAA,+BAAgD;AAEhD,SAAS,GAAG,CAAC,IAAY;IACvB,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;IACjD,OAAO;QACL,IAAA,cAAO,EAAC,IAAA,gBAAS,EAAC,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;QAE7J,4CAA4C;QAC5C,IAAA,cAAO,EAAC,IAAA,gBAAS,EAAC,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;KACrK,CAAC;AACJ,CAAC;AAED,+GAA+G;AAC/G,iHAAiH;AACjH,4BAA4B;AAC5B,MAAM,SAAS,GAAG;IAChB,MAAM,EAAE;QACN,IAAI,EAAE;YACJ,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;SACrB;KACF;CACF,CAAC;kBAEa,SAAS"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SignedRequest } from '@spinajs/authn/contracts';
|
|
2
|
+
import type { SignatureInput } from './fields.js';
|
|
3
|
+
export declare const lowerCaseHeaders: (headers: Readonly<Record<string, string>>) => Record<string, string>;
|
|
4
|
+
/** RFC 9421 §2.5 for the covered components; null when one may not be covered or has no value. */
|
|
5
|
+
export declare function signatureBase(req: SignedRequest, input: SignatureInput): string | null;
|
|
6
|
+
/** RFC 9530 Content-Digest: every member is sha-256 or sha-512 and matches the body. */
|
|
7
|
+
export declare function digestMatches(header: unknown, body: Uint8Array): boolean;
|
|
8
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/httpsig/base.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAOlD,eAAO,MAAM,gBAAgB,YAAa,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAA4F,CAAC;AA6B/L,kGAAkG;AAClG,wBAAgB,aAAa,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,CAetF;AAID,wFAAwF;AACxF,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAYxE"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.lowerCaseHeaders = void 0;
|
|
4
|
+
exports.signatureBase = signatureBase;
|
|
5
|
+
exports.digestMatches = digestMatches;
|
|
6
|
+
const node_crypto_1 = require("node:crypto");
|
|
7
|
+
const fields_js_1 = require("./fields.js");
|
|
8
|
+
const DERIVED = ['@method', '@target-uri', '@authority', '@path', '@query'];
|
|
9
|
+
const HEADER_NAME = /^[a-z0-9!#$%&'*+\-.^_`|~]+$/;
|
|
10
|
+
// A signature never covers the headers that carry it.
|
|
11
|
+
const NOT_COVERABLE = ['signature', 'signature-input'];
|
|
12
|
+
const lowerCaseHeaders = (headers) => Object.fromEntries(Object.entries(headers ?? {}).map(([k, v]) => [k.toLowerCase(), v]));
|
|
13
|
+
exports.lowerCaseHeaders = lowerCaseHeaders;
|
|
14
|
+
function componentValue(req, headers, name) {
|
|
15
|
+
if (name.startsWith('@')) {
|
|
16
|
+
let url;
|
|
17
|
+
try {
|
|
18
|
+
url = new URL(req.targetUri);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
switch (name) {
|
|
24
|
+
case '@method':
|
|
25
|
+
return req.method.toUpperCase();
|
|
26
|
+
case '@target-uri':
|
|
27
|
+
return req.targetUri;
|
|
28
|
+
case '@authority':
|
|
29
|
+
return url.host.toLowerCase();
|
|
30
|
+
case '@path':
|
|
31
|
+
return url.pathname || '/';
|
|
32
|
+
case '@query':
|
|
33
|
+
return url.search || '?';
|
|
34
|
+
default:
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const v = headers[name];
|
|
39
|
+
return typeof v === 'string' ? v.trim() : null;
|
|
40
|
+
}
|
|
41
|
+
/** RFC 9421 §2.5 for the covered components; null when one may not be covered or has no value. */
|
|
42
|
+
function signatureBase(req, input) {
|
|
43
|
+
const headers = (0, exports.lowerCaseHeaders)(req.headers);
|
|
44
|
+
const lines = [];
|
|
45
|
+
for (const name of input.components) {
|
|
46
|
+
if (!(DERIVED.includes(name) || (HEADER_NAME.test(name) && !NOT_COVERABLE.includes(name)))) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
const value = componentValue(req, headers, name);
|
|
50
|
+
if (value === null || /[\r\n]/.test(value)) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
lines.push(`"${name}": ${value}`);
|
|
54
|
+
}
|
|
55
|
+
lines.push(`"@signature-params": ${input.value}`);
|
|
56
|
+
return lines.join('\n');
|
|
57
|
+
}
|
|
58
|
+
const DIGESTS = { 'sha-256': 'sha256', 'sha-512': 'sha512' };
|
|
59
|
+
/** RFC 9530 Content-Digest: every member is sha-256 or sha-512 and matches the body. */
|
|
60
|
+
function digestMatches(header, body) {
|
|
61
|
+
const members = (0, fields_js_1.parseByteSequenceDictionary)(header);
|
|
62
|
+
if (!members) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
for (const [alg, digest] of members) {
|
|
66
|
+
const hash = DIGESTS[alg];
|
|
67
|
+
if (!hash || !(0, node_crypto_1.createHash)(hash).update(body).digest().equals(digest)) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/httpsig/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type ParamValue = number | string;
|
|
2
|
+
export interface SignatureInput {
|
|
3
|
+
readonly label: string;
|
|
4
|
+
readonly components: readonly string[];
|
|
5
|
+
readonly params: ReadonlyMap<string, ParamValue>;
|
|
6
|
+
/** The member value as sent; it is the `@signature-params` line of the signature base. */
|
|
7
|
+
readonly value: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* `Signature-Input` with exactly one member: `<label>=("<component>" …);<name>=<integer or string>…`. Component
|
|
11
|
+
* names carry no parameters; parameter values are integers or strings. Null for anything else, a second member,
|
|
12
|
+
* a duplicate parameter or component, or text that is not in canonical form.
|
|
13
|
+
*/
|
|
14
|
+
export declare function parseSignatureInput(header: unknown): SignatureInput | null;
|
|
15
|
+
/** A dictionary whose members are all byte sequences (`Signature`, `Content-Digest`); null when not exactly that. */
|
|
16
|
+
export declare function parseByteSequenceDictionary(header: unknown): Map<string, Buffer> | null;
|
|
17
|
+
//# sourceMappingURL=fields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../../src/httpsig/fields.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACjD,0FAA0F;IAC1F,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAoCD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CA0D1E;AAWD,qHAAqH;AACrH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAkBvF"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// The RFC 8941 structured-field subset RFC 9421 signatures and RFC 9530 digests need, parsed strictly: one canonical
|
|
3
|
+
// text form per value, so the signature base can use the Signature-Input text exactly as sent.
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.parseSignatureInput = parseSignatureInput;
|
|
6
|
+
exports.parseByteSequenceDictionary = parseByteSequenceDictionary;
|
|
7
|
+
const KEY = /^[a-z*][a-z0-9_\-.*]*$/;
|
|
8
|
+
const MAX_KEY = 64;
|
|
9
|
+
const INTEGER = /^-?[0-9]{1,15}$/;
|
|
10
|
+
const BASE64 = /^[A-Za-z0-9+/]*={0,2}$/;
|
|
11
|
+
/** An sf-string at `s[i]` (which must be '"'): its value and the index after it, or null. */
|
|
12
|
+
function readString(s, i) {
|
|
13
|
+
let value = '';
|
|
14
|
+
for (let j = i + 1; j < s.length; j += 1) {
|
|
15
|
+
const c = s[j];
|
|
16
|
+
if (c === '\\') {
|
|
17
|
+
const n = s[j + 1];
|
|
18
|
+
if (n !== '"' && n !== '\\') {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
value += n;
|
|
22
|
+
j += 1;
|
|
23
|
+
}
|
|
24
|
+
else if (c === '"') {
|
|
25
|
+
return { value, end: j + 1 };
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
const code = c.charCodeAt(0);
|
|
29
|
+
if (code < 0x20 || code > 0x7e) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
value += c;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
const serializeString = (v) => `"${v.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
|
|
38
|
+
/** A dictionary key ending at the first '=' from `i`, or null. */
|
|
39
|
+
function readKey(s, i) {
|
|
40
|
+
const eq = s.indexOf('=', i);
|
|
41
|
+
const key = eq < 0 ? '' : s.slice(i, eq);
|
|
42
|
+
return KEY.test(key) && key.length <= MAX_KEY ? { key, end: eq + 1 } : null;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* `Signature-Input` with exactly one member: `<label>=("<component>" …);<name>=<integer or string>…`. Component
|
|
46
|
+
* names carry no parameters; parameter values are integers or strings. Null for anything else, a second member,
|
|
47
|
+
* a duplicate parameter or component, or text that is not in canonical form.
|
|
48
|
+
*/
|
|
49
|
+
function parseSignatureInput(header) {
|
|
50
|
+
if (typeof header !== 'string') {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
const s = header.trim();
|
|
54
|
+
const key = readKey(s, 0);
|
|
55
|
+
if (!key || s[key.end] !== '(') {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
const components = [];
|
|
59
|
+
let i = key.end + 1;
|
|
60
|
+
while (s[i] !== ')') {
|
|
61
|
+
if (components.length > 0) {
|
|
62
|
+
if (s[i] !== ' ') {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
i += 1;
|
|
66
|
+
}
|
|
67
|
+
if (s[i] !== '"') {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
const str = readString(s, i);
|
|
71
|
+
if (!str || str.value.length === 0 || components.includes(str.value)) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
components.push(str.value);
|
|
75
|
+
i = str.end;
|
|
76
|
+
}
|
|
77
|
+
i += 1;
|
|
78
|
+
const params = new Map();
|
|
79
|
+
while (i < s.length) {
|
|
80
|
+
if (s[i] !== ';') {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
const name = readKey(s, i + 1);
|
|
84
|
+
if (!name || params.has(name.key)) {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
i = name.end;
|
|
88
|
+
if (s[i] === '"') {
|
|
89
|
+
const str = readString(s, i);
|
|
90
|
+
if (!str) {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
params.set(name.key, str.value);
|
|
94
|
+
i = str.end;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
const m = /^-?[0-9]+/.exec(s.slice(i));
|
|
98
|
+
if (!m || !INTEGER.test(m[0]) || (m[0].length > 1 && /^-?0/.test(m[0]))) {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
params.set(name.key, Number(m[0]));
|
|
102
|
+
i += m[0].length;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const value = s.slice(key.end);
|
|
106
|
+
const canonical = `(${components.map(serializeString).join(' ')})${[...params].map(([k, v]) => `;${k}=${typeof v === 'number' ? v : serializeString(v)}`).join('')}`;
|
|
107
|
+
return canonical === value ? { label: key.key, components, params, value } : null;
|
|
108
|
+
}
|
|
109
|
+
/** RFC 8941 byte sequence in standard base64, canonical (padded, no stray bits). */
|
|
110
|
+
function decodeByteSequence(text) {
|
|
111
|
+
if (!BASE64.test(text) || text.length % 4 !== 0) {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
const bytes = Buffer.from(text, 'base64');
|
|
115
|
+
return bytes.toString('base64') === text ? bytes : null;
|
|
116
|
+
}
|
|
117
|
+
/** A dictionary whose members are all byte sequences (`Signature`, `Content-Digest`); null when not exactly that. */
|
|
118
|
+
function parseByteSequenceDictionary(header) {
|
|
119
|
+
if (typeof header !== 'string') {
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
const out = new Map();
|
|
123
|
+
for (const member of header.split(',')) {
|
|
124
|
+
const m = member.trim();
|
|
125
|
+
const key = readKey(m, 0);
|
|
126
|
+
if (!key || out.has(key.key) || m[key.end] !== ':' || !m.endsWith(':') || m.length < key.end + 2) {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
const bytes = decodeByteSequence(m.slice(key.end + 1, -1));
|
|
130
|
+
if (!bytes) {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
out.set(key.key, bytes);
|
|
134
|
+
}
|
|
135
|
+
return out.size > 0 ? out : null;
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../../../src/httpsig/fields.ts"],"names":[],"mappings":";AAAA,qHAAqH;AACrH,+FAA+F;;;;AAE/F,MAAM,GAAG,GAAG,wBAAwB,CAAC;AACrC,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,MAAM,OAAO,GAAG,iBAAiB,CAAC;AAClC,MAAM,MAAM,GAAG,wBAAwB,CAAC;AAYxC,6FAA6F;AAC7F,SAAS,UAAU,CAAC,CAAS,EAAE,CAAS;IACtC,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACf,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACf,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,KAAK,IAAI,CAAC,CAAC;YACX,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACrB,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;gBAC/B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,eAAe,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;AAEpG,kEAAkE;AAClE,SAAS,OAAO,CAAC,CAAS,EAAE,CAAS;IACnC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzC,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9E,CAAC;AAED;;;;GAIG;AACH,6BAAoC,MAAe;IACjD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IACxB,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1B,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IACpB,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QACpB,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACjB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;QACD,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACrE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;IACd,CAAC;IACD,CAAC,IAAI,CAAC,CAAC;IACP,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QACpB,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;QACb,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACjB,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;QACd,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxE,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACnB,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IACrK,OAAO,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACpF,CAAC;AAED,oFAAoF;AACpF,SAAS,kBAAkB,CAAC,IAAY;IACtC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC1C,OAAO,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1D,CAAC;AAED,qHAAqH;AACrH,qCAA4C,MAAe;IACzD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;YACjG,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,KAAK,GAAG,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACd,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/httpsig/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./fields.js"), exports);
|
|
18
|
+
__exportStar(require("./base.js"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/httpsig/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,4CAA0B"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export * from './jwk/index.js';
|
|
2
|
+
export * from './challenge/index.js';
|
|
3
|
+
export * from './options/index.js';
|
|
4
|
+
export * from './models/index.js';
|
|
5
|
+
export * from './migrations/index.js';
|
|
6
|
+
export * from './registry/index.js';
|
|
7
|
+
export * from './jws/index.js';
|
|
8
|
+
export * from './nonce/index.js';
|
|
9
|
+
export * from './strategies/index.js';
|
|
10
|
+
export * from './httpsig/index.js';
|
|
11
|
+
export * from './schema.js';
|
|
12
|
+
export * from './bootstrap.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC"}
|
package/lib/cjs/index.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./jwk/index.js"), exports);
|
|
18
|
+
__exportStar(require("./challenge/index.js"), exports);
|
|
19
|
+
__exportStar(require("./options/index.js"), exports);
|
|
20
|
+
__exportStar(require("./models/index.js"), exports);
|
|
21
|
+
__exportStar(require("./migrations/index.js"), exports);
|
|
22
|
+
__exportStar(require("./registry/index.js"), exports);
|
|
23
|
+
__exportStar(require("./jws/index.js"), exports);
|
|
24
|
+
__exportStar(require("./nonce/index.js"), exports);
|
|
25
|
+
__exportStar(require("./strategies/index.js"), exports);
|
|
26
|
+
__exportStar(require("./httpsig/index.js"), exports);
|
|
27
|
+
__exportStar(require("./schema.js"), exports);
|
|
28
|
+
__exportStar(require("./bootstrap.js"), exports);
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,uDAAqC;AACrC,qDAAmC;AACnC,oDAAkC;AAClC,wDAAsC;AACtC,sDAAoC;AACpC,iDAA+B;AAC/B,mDAAiC;AACjC,wDAAsC;AACtC,qDAAmC;AACnC,8CAA4B;AAC5B,iDAA+B"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strict unpadded base64url: Node's decoder skips bad characters and stray bits, so the result is re-encoded and
|
|
3
|
+
* compared, and every value has exactly one text form (canvas C8 `decodeB64url`).
|
|
4
|
+
*/
|
|
5
|
+
export declare function decodeB64url(text: unknown): Buffer | null;
|
|
6
|
+
export declare function encodeB64url(data: Uint8Array | string): string;
|
|
7
|
+
//# sourceMappingURL=base64url.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64url.d.ts","sourceRoot":"","sources":["../../../src/jwk/base64url.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAOzD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAE9D"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.decodeB64url = decodeB64url;
|
|
4
|
+
exports.encodeB64url = encodeB64url;
|
|
5
|
+
const util_1 = require("@spinajs/util");
|
|
6
|
+
const ALPHABET = /^[A-Za-z0-9_-]*$/;
|
|
7
|
+
/**
|
|
8
|
+
* Strict unpadded base64url: Node's decoder skips bad characters and stray bits, so the result is re-encoded and
|
|
9
|
+
* compared, and every value has exactly one text form (canvas C8 `decodeB64url`).
|
|
10
|
+
*/
|
|
11
|
+
function decodeB64url(text) {
|
|
12
|
+
const [ok, encoded] = (0, util_1._try_check_arg)((0, util_1._is_string)((0, util_1._reg_match)(ALPHABET), (0, util_1._custom)((s) => s.length % 4 !== 1)))(text, 'text');
|
|
13
|
+
if (!ok) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
const bytes = Buffer.from(encoded, 'base64url');
|
|
17
|
+
return bytes.toString('base64url') === encoded ? bytes : null;
|
|
18
|
+
}
|
|
19
|
+
function encodeB64url(data) {
|
|
20
|
+
return (typeof data === 'string' ? Buffer.from(data, 'utf8') : Buffer.from(data)).toString('base64url');
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=base64url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64url.js","sourceRoot":"","sources":["../../../src/jwk/base64url.ts"],"names":[],"mappings":";;;;AAAA,wCAAgF;AAEhF,MAAM,QAAQ,GAAG,kBAAkB,CAAC;AAEpC;;;GAGG;AACH,sBAA6B,IAAa;IACxC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,IAAA,qBAAc,EAAC,IAAA,iBAAU,EAAC,IAAA,iBAAU,EAAC,QAAQ,CAAC,EAAE,IAAA,cAAO,EAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACjI,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAiB,EAAE,WAAW,CAAC,CAAC;IAC1D,OAAO,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAChE,CAAC;AAED,sBAA6B,IAAyB;IACpD,OAAO,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC1G,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RFC 8032 §5.1.3 decoding: y < p, x² = (y² − 1) / (d y² + 1) has a root, and x = 0 has no sign bit. The root itself
|
|
3
|
+
* is not needed, so the sqrt(−1) correction reduces to accepting v x² = −u as well as v x² = u.
|
|
4
|
+
*/
|
|
5
|
+
export declare function isCanonicalPoint(bytes: Uint8Array): boolean;
|
|
6
|
+
/** Canonical encodings of the 8 points of order 1, 2, 4 and 8 (canvas C8 `SMALL_ORDER`, checked complete there). */
|
|
7
|
+
export declare const SMALL_ORDER: readonly string[];
|
|
8
|
+
export declare function isSmallOrder(bytes: Uint8Array): boolean;
|
|
9
|
+
//# sourceMappingURL=ed25519.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ed25519.d.ts","sourceRoot":"","sources":["../../../src/jwk/ed25519.ts"],"names":[],"mappings":"AAmBA;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAiB3D;AAED,oHAAoH;AACpH,eAAO,MAAM,WAAW,EAAE,SAAS,MAAM,EAAojB,CAAC;AAE9lB,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAEvD"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Ed25519 point checks that node:crypto skips: `createPublicKey` takes any 32 bytes, and `verify` (cofactorless)
|
|
3
|
+
// accepts forgeries under small-order keys. Ported from canvas C8 (`contracts/ts/plane-api/src/ed25519.ts`).
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.SMALL_ORDER = void 0;
|
|
6
|
+
exports.isCanonicalPoint = isCanonicalPoint;
|
|
7
|
+
exports.isSmallOrder = isSmallOrder;
|
|
8
|
+
const P = 2n ** 255n - 19n;
|
|
9
|
+
const mod = (a) => ((a % P) + P) % P;
|
|
10
|
+
function pow(base, exp) {
|
|
11
|
+
let result = 1n;
|
|
12
|
+
for (let b = mod(base), e = exp; e > 0n; b = (b * b) % P, e >>= 1n) {
|
|
13
|
+
if (e & 1n) {
|
|
14
|
+
result = (result * b) % P;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return result;
|
|
18
|
+
}
|
|
19
|
+
const D = mod(-121665n * pow(121666n, P - 2n));
|
|
20
|
+
/**
|
|
21
|
+
* RFC 8032 §5.1.3 decoding: y < p, x² = (y² − 1) / (d y² + 1) has a root, and x = 0 has no sign bit. The root itself
|
|
22
|
+
* is not needed, so the sqrt(−1) correction reduces to accepting v x² = −u as well as v x² = u.
|
|
23
|
+
*/
|
|
24
|
+
function isCanonicalPoint(bytes) {
|
|
25
|
+
if (bytes.length !== 32) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
const n = BigInt(`0x${Buffer.from(bytes).reverse().toString('hex')}`);
|
|
29
|
+
const y = n & ((1n << 255n) - 1n);
|
|
30
|
+
if (y >= P) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
const u = mod(y * y - 1n);
|
|
34
|
+
const v = mod(D * y * y + 1n);
|
|
35
|
+
const x = mod(u * pow(v, 3n) * pow(u * pow(v, 7n), (P - 5n) / 8n));
|
|
36
|
+
const vxx = mod(v * x * x);
|
|
37
|
+
if (vxx !== u && vxx !== mod(-u)) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
return !(u === 0n && n >> 255n === 1n);
|
|
41
|
+
}
|
|
42
|
+
/** Canonical encodings of the 8 points of order 1, 2, 4 and 8 (canvas C8 `SMALL_ORDER`, checked complete there). */
|
|
43
|
+
exports.SMALL_ORDER = Object.freeze(['0100000000000000000000000000000000000000000000000000000000000000', 'ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f', '0000000000000000000000000000000000000000000000000000000000000000', '0000000000000000000000000000000000000000000000000000000000000080', '26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05', '26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc85', 'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac037a', 'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac03fa']);
|
|
44
|
+
function isSmallOrder(bytes) {
|
|
45
|
+
return bytes.length === 32 && exports.SMALL_ORDER.includes(Buffer.from(bytes).toString('hex'));
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=ed25519.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ed25519.js","sourceRoot":"","sources":["../../../src/jwk/ed25519.ts"],"names":[],"mappings":";AAAA,iHAAiH;AACjH,6GAA6G;;;;;AAE7G,MAAM,CAAC,GAAG,EAAE,IAAI,IAAI,GAAG,GAAG,CAAC;AAE3B,MAAM,GAAG,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAErD,SAAS,GAAG,CAAC,IAAY,EAAE,GAAW;IACpC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;QACnE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YACX,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAE/C;;;GAGG;AACH,0BAAiC,KAAiB;IAChD,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACtE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACX,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1B,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9B,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACnE,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,oHAAoH;AACvG,QAAA,WAAW,GAAsB,MAAM,CAAC,MAAM,CAAC,CAAC,kEAAkE,EAAE,kEAAkE,EAAE,kEAAkE,EAAE,kEAAkE,EAAE,kEAAkE,EAAE,kEAAkE,EAAE,kEAAkE,EAAE,kEAAkE,CAAC,CAAC,CAAC;AAE9lB,sBAA6B,KAAiB;IAC5C,OAAO,KAAK,CAAC,MAAM,KAAK,EAAE,IAAI,QAAA,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AACzF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jwk/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./base64url.js"), exports);
|
|
18
|
+
__exportStar(require("./ed25519.js"), exports);
|
|
19
|
+
__exportStar(require("./keys.js"), exports);
|
|
20
|
+
__exportStar(require("./signature.js"), exports);
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/jwk/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,+CAA6B;AAC7B,4CAA0B;AAC1B,iDAA+B"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { KeyObject } from 'node:crypto';
|
|
2
|
+
import type { KeyAlgorithm, KeyMaterial, PublicJwk } from '@spinajs/authn/contracts';
|
|
3
|
+
export declare const KEY_ALGORITHMS: readonly KeyAlgorithm[];
|
|
4
|
+
export declare function isValidKid(kid: unknown): kid is string;
|
|
5
|
+
/**
|
|
6
|
+
* Design §22.10, canvas C8 D5: an Ed25519 key (RFC 8037) whose `x` is a canonical point and not of small order, or a
|
|
7
|
+
* P-256 key whose `x` and `y` are 32 bytes and on the curve; never a private part. Members other than the required ones
|
|
8
|
+
* are dropped, never trusted (the algorithm comes from the key type). Null for anything else.
|
|
9
|
+
*/
|
|
10
|
+
export declare function checkPublicJwk(input: unknown, allowed?: readonly KeyAlgorithm[]): KeyMaterial | null;
|
|
11
|
+
/** RFC 7638: the required members only, in lexicographic order, no whitespace; SHA-256, base64url. */
|
|
12
|
+
export declare function thumbprint(jwk: PublicJwk): string;
|
|
13
|
+
/**
|
|
14
|
+
* The node:crypto key for a material that passes checkPublicJwk with its own algorithm, or null. Materials can come
|
|
15
|
+
* from a caller's key lookup, so they are checked again here (cached, as the point check costs a few modular powers).
|
|
16
|
+
*/
|
|
17
|
+
export declare function publicKeyObject(material: KeyMaterial): KeyObject | null;
|
|
18
|
+
//# sourceMappingURL=keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/jwk/keys.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAoB,YAAY,EAAE,WAAW,EAAiB,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAKtH,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EAAsC,CAAC;AAIzF,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CAEtD;AAYD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,SAAS,YAAY,EAAmB,GAAG,WAAW,GAAG,IAAI,CAmBpH;AAED,sGAAsG;AACtG,wBAAgB,UAAU,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAGjD;AAmBD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,CAyBvE"}
|