@pulse-compute/crypto 1.0.0-beta.5 → 1.0.0-beta.6

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.
Files changed (84) hide show
  1. package/README.md +56 -4
  2. package/dist/contracts.d.ts +34 -12
  3. package/dist/contracts.d.ts.map +1 -1
  4. package/dist/contracts.js +9 -3
  5. package/dist/contracts.js.map +1 -1
  6. package/dist/index.d.ts +3 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +17 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/internal/rsa.d.ts +58 -0
  11. package/dist/internal/rsa.d.ts.map +1 -0
  12. package/dist/internal/rsa.js +185 -0
  13. package/dist/internal/rsa.js.map +1 -0
  14. package/dist/internal/verification.d.ts +3 -3
  15. package/dist/internal/verification.d.ts.map +1 -1
  16. package/dist/internal/verification.js +2 -2
  17. package/dist/internal/verification.js.map +1 -1
  18. package/guests/es256-rustcrypto/README.md +43 -0
  19. package/guests/es256-rustcrypto/build.cjs +297 -0
  20. package/guests/es256-rustcrypto/prebuilt/es256-verifier.unoptimized.wasm +0 -0
  21. package/guests/es256-rustcrypto/prebuilt/es256-verifier.wasm +0 -0
  22. package/guests/es256-rustcrypto/probe/.cargo/config.toml +18 -0
  23. package/guests/es256-rustcrypto/probe/Cargo.lock +238 -0
  24. package/guests/es256-rustcrypto/probe/Cargo.toml +26 -0
  25. package/guests/es256-rustcrypto/probe/README.md +35 -0
  26. package/guests/es256-rustcrypto/probe/rust-toolchain.toml +5 -0
  27. package/guests/es256-rustcrypto/probe/src/lib.rs +108 -0
  28. package/guests/es256-rustcrypto/pulse.guest-unit.json +119 -0
  29. package/guests/es256-rustcrypto/source/.cargo/config.toml +18 -0
  30. package/guests/es256-rustcrypto/source/Cargo.lock +265 -0
  31. package/guests/es256-rustcrypto/source/Cargo.toml +23 -0
  32. package/guests/es256-rustcrypto/source/README.md +26 -0
  33. package/guests/es256-rustcrypto/source/bearssl/LICENSE.txt +21 -0
  34. package/guests/es256-rustcrypto/source/bearssl/UPSTREAM.json +49 -0
  35. package/guests/es256-rustcrypto/source/bearssl/inc/bearssl.h +170 -0
  36. package/guests/es256-rustcrypto/source/bearssl/inc/bearssl_aead.h +1059 -0
  37. package/guests/es256-rustcrypto/source/bearssl/inc/bearssl_block.h +2618 -0
  38. package/guests/es256-rustcrypto/source/bearssl/inc/bearssl_ec.h +883 -0
  39. package/guests/es256-rustcrypto/source/bearssl/inc/bearssl_hash.h +1346 -0
  40. package/guests/es256-rustcrypto/source/bearssl/inc/bearssl_hmac.h +241 -0
  41. package/guests/es256-rustcrypto/source/bearssl/inc/bearssl_kdf.h +185 -0
  42. package/guests/es256-rustcrypto/source/bearssl/inc/bearssl_pem.h +294 -0
  43. package/guests/es256-rustcrypto/source/bearssl/inc/bearssl_prf.h +150 -0
  44. package/guests/es256-rustcrypto/source/bearssl/inc/bearssl_rand.h +397 -0
  45. package/guests/es256-rustcrypto/source/bearssl/inc/bearssl_rsa.h +1366 -0
  46. package/guests/es256-rustcrypto/source/bearssl/inc/bearssl_ssl.h +4296 -0
  47. package/guests/es256-rustcrypto/source/bearssl/inc/bearssl_x509.h +1397 -0
  48. package/guests/es256-rustcrypto/source/bearssl/src/codec/ccopy.c +44 -0
  49. package/guests/es256-rustcrypto/source/bearssl/src/codec/dec32be.c +38 -0
  50. package/guests/es256-rustcrypto/source/bearssl/src/codec/enc32be.c +38 -0
  51. package/guests/es256-rustcrypto/source/bearssl/src/config.h +229 -0
  52. package/guests/es256-rustcrypto/source/bearssl/src/inner.h +2532 -0
  53. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_add.c +46 -0
  54. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_bitlen.c +44 -0
  55. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_decmod.c +124 -0
  56. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_decode.c +57 -0
  57. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_decred.c +103 -0
  58. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_encode.c +79 -0
  59. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_fmont.c +60 -0
  60. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_iszero.c +39 -0
  61. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_moddiv.c +488 -0
  62. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_modpow.c +65 -0
  63. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_modpow2.c +160 -0
  64. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_montmul.c +93 -0
  65. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_mulacc.c +61 -0
  66. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_muladd.c +157 -0
  67. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_ninv31.c +39 -0
  68. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_reduce.c +66 -0
  69. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_rshift.c +47 -0
  70. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_sub.c +46 -0
  71. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_tmont.c +36 -0
  72. package/guests/es256-rustcrypto/source/bearssl/src/int/i32_div32.c +56 -0
  73. package/guests/es256-rustcrypto/source/bearssl/src/rsa/rsa_i31_priv.c +203 -0
  74. package/guests/es256-rustcrypto/source/bearssl/src/rsa/rsa_i31_pub.c +106 -0
  75. package/guests/es256-rustcrypto/source/bearssl/src/rsa/rsa_pkcs1_sig_pad.c +100 -0
  76. package/guests/es256-rustcrypto/source/build.rs +38 -0
  77. package/guests/es256-rustcrypto/source/freestanding/string.h +8 -0
  78. package/guests/es256-rustcrypto/source/rs256.c +103 -0
  79. package/guests/es256-rustcrypto/source/rust-toolchain.toml +5 -0
  80. package/guests/es256-rustcrypto/source/src/lib.rs +308 -0
  81. package/package.json +6 -4
  82. package/pulsewasm.native.cjs +66 -0
  83. package/src/provider.cjs +71 -1
  84. package/src/provider.d.cts +6 -0
package/README.md CHANGED
@@ -7,15 +7,15 @@
7
7
  > **Supported entry points:** `@pulse-compute/crypto`<br>
8
8
  > **Stability:** The package root supports bounded verification and request-owned exact-text digests; provider, manifest/compiler and Native integration subpaths remain toolchain-only.<br>
9
9
  > **npm:** [`@pulse-compute/crypto`](https://www.npmjs.com/package/@pulse-compute/crypto)<br>
10
- > **Canonical documentation:** [Package guide](https://pulsecompute.io/v1.0.0-beta.5/packages/crypto/)
10
+ > **Canonical documentation:** [Package guide](https://pulsecompute.io/v1.0.0-beta.6/packages/crypto/)
11
11
  >
12
- > This release-status block is generated from the synchronized `Pulse 1.0.0-beta.5` package policy.
12
+ > This release-status block is generated from the synchronized `Pulse 1.0.0-beta.6` package policy.
13
13
  <!-- pulse-package-status:end -->
14
14
 
15
15
  Provider-neutral verification and bounded exact-text SHA-256 for Pulse.
16
16
 
17
17
  This package and `@pulse-compute/jwt` are members of the synchronized
18
- `1.0.0-beta.5` release catalog.
18
+ `1.0.0-beta.6` release catalog.
19
19
 
20
20
  ## Exact-text SHA-256
21
21
 
@@ -38,7 +38,7 @@ the invocation. The named `digestText` export has the same contract.
38
38
  Node/Fastly Native reuse the selected Crypto SHA-256 guest source. Node/Fastly
39
39
  JavaScript use selected Web Crypto. Neither falls back. This bound matches
40
40
  current S3 text capacity and leaves larger Catalog envelopes for capacity work.
41
- See the [exact-text digest contract](https://pulsecompute.io/v1.0.0-beta.5/packages/crypto/#exact-text-digest).
41
+ See the [exact-text digest contract](https://pulsecompute.io/v1.0.0-beta.6/packages/crypto/#exact-text-digest).
42
42
 
43
43
  ## Verification contract
44
44
 
@@ -167,3 +167,55 @@ Large hashes use a separate lazy 2,097,184-byte Native staging frame; small
167
167
  hashes and HMAC keep the 40,992-byte frame. Primary-memory Native digest/S3
168
168
  modules have a 256 MiB Wasm maximum. Fixed-memory linked guests retain their
169
169
  separate ABI and do not establish the 2 MiB text capacity profile.
170
+
171
+
172
+ ## RS256 signature contract
173
+
174
+ `crypto.signature.verify` accepts `algorithm: 'RS256'` and a
175
+ `rsa-public-key-bytes` key. `normalizeRsaPublicKey({ n, e })` converts public
176
+ JWK integers into that representation; `normalizeRs256JoseVerifyRequest`
177
+ also decodes the canonical, fixed-width JOSE signature. JWT owns JWK metadata
178
+ and selection policy. No generic public signing API is introduced.
179
+
180
+ The normalized key is a little-endian 32-bit modulus byte length, the unsigned
181
+ big-endian modulus, and a four-byte big-endian public exponent. Supported
182
+ lengths are 256, 384, and 512 bytes; the modulus has its high bit set and is
183
+ odd. Exponents are odd integers in `[3, 4294967295]`. Signature width equals
184
+ modulus width, including any leading zero signature bytes. Data is at most
185
+ 12288 bytes. Verification returns the existing closed status taxonomy.
186
+
187
+ The exact Native selection is `guest-linked:pulse-rs256-bearssl-i31` with
188
+ `bearssl.0.6.rsa-i31.sha256.v1`. It shares the pinned ES256/RS256 prebuilt and
189
+ fixed 2 MiB memory with ES256. The private signing adapter accepts normalized
190
+ RSA/CRT bytes, validates their consistency, and checks every resulting
191
+ signature by public exponentiation before release. The caller erases its
192
+ 16640-byte invocation frame and the borrowed 64 KiB guest stack on return.
193
+ The Node wrapper also clears both regions on a trap; a Fastly Native trap
194
+ aborts execution before in-Wasm cleanup can run. The guest has no retained
195
+ key state, entropy imports, allocation, or host callbacks. PKCS#1 v1.5
196
+ signing is deterministic and needs no nonce.
197
+
198
+ BearSSL `i31` uses constant-time arithmetic rather than RSA blinding. Its
199
+ security assumptions include constant-time integer multiplication and a
200
+ compiler/engine that preserves the intended data-independent execution.
201
+ This is not a formal timing proof for every Wasm engine or CPU. The pinned
202
+ upstream source, license, archive hash, per-file hashes, compiler versions,
203
+ and reproducible build command ship with the guest. The historical guest
204
+ path and module name remain for compatibility; its ABI is now
205
+ `pulse.crypto.es256-rs256.verify-and-sign.v3`.
206
+
207
+ JavaScript explicitly selects `RSASSA-PKCS1-v1_5` with `SHA-256` in Web Crypto
208
+ and independently verifies signing output. Redundant private-field import
209
+ checks use JavaScript BigInt, which is not constant time; private
210
+ exponentiation and blinding belong to the selected Web Crypto runtime.
211
+ Immutable JWK strings and runtime-owned key objects cannot be explicitly
212
+ erased by Pulse. The provider retains its existing cancellation and
213
+ redaction boundaries.
214
+
215
+ The combined prebuilt is 36378 bytes. The development corpus observed 6324
216
+ bytes of guest stack writes within the reserved 65536 bytes. Local warmed
217
+ 4096-bit operations took roughly 43 ms to sign and 1.5 ms to verify; these
218
+ are local Node Wasm observations, not performance guarantees or Fastly
219
+ measurements. `crypto-rs256` regenerates the observations and tests independent
220
+ interoperability, malformed PKCS#1 encodings, CRT corruption, frame bounds,
221
+ and cleanup. `jwt-rs256` covers the provider and CLI paths.
@@ -6,13 +6,12 @@ export declare const CRYPTO_ES256_RUNTIME_BUILTIN_IMPLEMENTATION: "webcrypto.sub
6
6
  export declare const CRYPTO_ES256_GUEST_LINKED_REALIZATION: "guest-linked:pulse-es256-rustcrypto-p256";
7
7
  export declare const CRYPTO_ES256_GUEST_LINKED_IMPLEMENTATION: "rustcrypto.p256-0.13.2.ecdsa-0.16.9.sha2-0.10.9.v1";
8
8
  /**
9
- * Executable algorithms remain intentionally narrower than frozen future
10
- * contracts. G3, not G0, owns activation of ES256.
9
+ * Executable verification algorithms. Signature keys remain algorithm-bound.
11
10
  */
12
- export declare const CRYPTO_ALGORITHMS: readonly ["HS256", "ES256"];
11
+ export declare const CRYPTO_ALGORITHMS: readonly ["HS256", "ES256", "RS256"];
13
12
  export type CryptoAlgorithm = typeof CRYPTO_ALGORITHMS[number];
14
13
  export type MacAlgorithm = 'HS256';
15
- export type SignatureAlgorithm = 'ES256';
14
+ export type SignatureAlgorithm = 'ES256' | 'RS256';
16
15
  export declare const CRYPTO_VERIFICATION_STATUSES: readonly ["valid", "invalid-authenticator", "invalid-key", "invalid-input", "realization-failure"];
17
16
  export type CryptoVerificationStatus = typeof CRYPTO_VERIFICATION_STATUSES[number];
18
17
  export type CryptoVerificationResult = {
@@ -50,14 +49,18 @@ export interface P256PublicKeyBytes {
50
49
  /** Exactly 64 bytes: 32-byte big-endian x followed by 32-byte big-endian y. */
51
50
  readonly bytes: Uint8Array;
52
51
  }
53
- export interface SignatureVerifyRequest {
54
- readonly algorithm: SignatureAlgorithm;
55
- readonly key: P256PublicKeyBytes;
52
+ export type SignatureVerifyRequest = Readonly<{
56
53
  /** Exact original signing bytes; never a reserialized JWT representation. */
57
- readonly data: Uint8Array;
58
- /** Exactly 64 bytes: 32-byte big-endian r followed by 32-byte big-endian s. */
59
- readonly signature: Uint8Array;
60
- }
54
+ data: Uint8Array;
55
+ /** JOSE P-256 r||s, or one RSA modulus-width octet string. */
56
+ signature: Uint8Array;
57
+ }> & (Readonly<{
58
+ algorithm: 'ES256';
59
+ key: P256PublicKeyBytes;
60
+ }> | Readonly<{
61
+ algorithm: 'RS256';
62
+ key: RsaPublicKeyBytes;
63
+ }>);
61
64
  /**
62
65
  * Crypto-owned adapter input for the one JOSE representation accepted by the
63
66
  * JWT composition. JWT has already validated the public JWK policy; crypto
@@ -83,6 +86,9 @@ export declare const CRYPTO_RESOURCE_LIMITS: Readonly<{
83
86
  readonly es256PublicKeyBytes: 64;
84
87
  readonly es256SignatureBytes: 64;
85
88
  readonly es256SigningInputBytesMaximum: 16340;
89
+ readonly rs256ModulusBytes: readonly [256, 384, 512];
90
+ readonly rs256PublicExponentMaximum: 4294967295;
91
+ readonly rs256SigningInputBytesMaximum: 12288;
86
92
  }>;
87
93
  export declare const CRYPTO_ES256_CONTRACT: Readonly<{
88
94
  readonly version: "pulse.crypto.es256-verification.v1";
@@ -120,7 +126,7 @@ export declare const CRYPTO_ES256_CONTRACT: Readonly<{
120
126
  unitId: "pulse.crypto.es256.rustcrypto-p256.v1";
121
127
  module: "pulse_crypto_es256";
122
128
  owner: "@pulse-compute/crypto";
123
- abi: "pulse.crypto.es256.verify.v1";
129
+ abi: "pulse.crypto.es256-rs256.verify-and-sign.v3";
124
130
  export: Readonly<{
125
131
  name: "pulse_crypto_es256_verify";
126
132
  parameters: readonly ["i32", "i32"];
@@ -195,4 +201,20 @@ export declare const CRYPTO_ES256_CONTRACT: Readonly<{
195
201
  }>;
196
202
  readonly automaticFallback: false;
197
203
  }>;
204
+ export interface RsaPublicKeyBytes {
205
+ readonly type: 'rsa-public-key-bytes';
206
+ /** LE32 modulus byte length, big-endian modulus, four-byte public exponent. */
207
+ readonly bytes: Uint8Array;
208
+ }
209
+ export interface Rs256JoseVerifyInput {
210
+ readonly key: Readonly<{
211
+ n: string;
212
+ e: string;
213
+ }>;
214
+ readonly data: Uint8Array;
215
+ readonly signature: string;
216
+ }
217
+ export declare const CRYPTO_RS256_GUEST_LINKED_REALIZATION: "guest-linked:pulse-rs256-bearssl-i31";
218
+ export declare const CRYPTO_RS256_GUEST_LINKED_IMPLEMENTATION: "bearssl.0.6.rsa-i31.sha256.v1";
219
+ export declare const CRYPTO_RS256_RUNTIME_BUILTIN_IMPLEMENTATION: "webcrypto.subtle.rsassa-pkcs1-v1_5-sha-256.v1";
198
220
  //# sourceMappingURL=contracts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB,EAAG,8BAAuC,CAAC;AAC/E,eAAO,MAAM,qCAAqC,EAChD,kCAA2C,CAAC;AAC9C,eAAO,MAAM,kCAAkC,EAC7C,kBAA2B,CAAC;AAC9B,eAAO,MAAM,6BAA6B,EACxC,oCAA6C,CAAC;AAChD,eAAO,MAAM,2CAA2C,EACtD,wCAAiD,CAAC;AACpD,eAAO,MAAM,qCAAqC,EAChD,0CAAmD,CAAC;AACtD,eAAO,MAAM,wCAAwC,EACnD,oDAA6D,CAAC;AAEhE;;;GAGG;AACH,eAAO,MAAM,iBAAiB,6BAGnB,CAAC;AAEZ,MAAM,MAAM,eAAe,GAAG,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC/D,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC;AACnC,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAEzC,eAAO,MAAM,4BAA4B,oGAM9B,CAAC;AAEZ,MAAM,MAAM,wBAAwB,GAClC,OAAO,4BAA4B,CAAC,MAAM,CAAC,CAAC;AAE9C,MAAM,MAAM,wBAAwB,GAChC;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAA;CAAE,GAC5C;IAAE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;CAAE,GAClC;IAAE,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAA;CAAE,GACpC;IAAE,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAA;CAAE,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;CAC5B;AAED,MAAM,MAAM,mBAAmB,GAAG,YAAY,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,mBAAmB,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC;IACvC,+EAA+E;IAC/E,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAC;IACjC,6EAA6E;IAC7E,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,+EAA+E;IAC/E,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;CAChC;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;QACrB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;IACH,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,sBAAsB;;;;;;;;EAQxB,CAAC;AAEZ,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoHvB,CAAC"}
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
package/dist/contracts.js CHANGED
@@ -6,12 +6,12 @@ export const CRYPTO_ES256_RUNTIME_BUILTIN_IMPLEMENTATION = 'webcrypto.subtle.ecd
6
6
  export const CRYPTO_ES256_GUEST_LINKED_REALIZATION = 'guest-linked:pulse-es256-rustcrypto-p256';
7
7
  export const CRYPTO_ES256_GUEST_LINKED_IMPLEMENTATION = 'rustcrypto.p256-0.13.2.ecdsa-0.16.9.sha2-0.10.9.v1';
8
8
  /**
9
- * Executable algorithms remain intentionally narrower than frozen future
10
- * contracts. G3, not G0, owns activation of ES256.
9
+ * Executable verification algorithms. Signature keys remain algorithm-bound.
11
10
  */
12
11
  export const CRYPTO_ALGORITHMS = Object.freeze([
13
12
  'HS256',
14
13
  'ES256',
14
+ 'RS256',
15
15
  ]);
16
16
  export const CRYPTO_VERIFICATION_STATUSES = Object.freeze([
17
17
  'valid',
@@ -28,6 +28,9 @@ export const CRYPTO_RESOURCE_LIMITS = Object.freeze({
28
28
  es256PublicKeyBytes: 64,
29
29
  es256SignatureBytes: 64,
30
30
  es256SigningInputBytesMaximum: 16_340,
31
+ rs256ModulusBytes: Object.freeze([256, 384, 512]),
32
+ rs256PublicExponentMaximum: 0xffffffff,
33
+ rs256SigningInputBytesMaximum: 12_288,
31
34
  });
32
35
  export const CRYPTO_ES256_CONTRACT = Object.freeze({
33
36
  version: CRYPTO_ES256_CONTRACT_VERSION,
@@ -71,7 +74,7 @@ export const CRYPTO_ES256_CONTRACT = Object.freeze({
71
74
  unitId: 'pulse.crypto.es256.rustcrypto-p256.v1',
72
75
  module: 'pulse_crypto_es256',
73
76
  owner: '@pulse-compute/crypto',
74
- abi: 'pulse.crypto.es256.verify.v1',
77
+ abi: 'pulse.crypto.es256-rs256.verify-and-sign.v3',
75
78
  export: Object.freeze({
76
79
  name: 'pulse_crypto_es256_verify',
77
80
  parameters: Object.freeze(['i32', 'i32']),
@@ -146,4 +149,7 @@ export const CRYPTO_ES256_CONTRACT = Object.freeze({
146
149
  }),
147
150
  automaticFallback: false,
148
151
  });
152
+ export const CRYPTO_RS256_GUEST_LINKED_REALIZATION = 'guest-linked:pulse-rs256-bearssl-i31';
153
+ export const CRYPTO_RS256_GUEST_LINKED_IMPLEMENTATION = 'bearssl.0.6.rsa-i31.sha256.v1';
154
+ export const CRYPTO_RS256_RUNTIME_BUILTIN_IMPLEMENTATION = 'webcrypto.subtle.rsassa-pkcs1-v1_5-sha-256.v1';
149
155
  //# sourceMappingURL=contracts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,uBAAuB,GAAG,8BAAuC,CAAC;AAC/E,MAAM,CAAC,MAAM,qCAAqC,GAChD,kCAA2C,CAAC;AAC9C,MAAM,CAAC,MAAM,kCAAkC,GAC7C,kBAA2B,CAAC;AAC9B,MAAM,CAAC,MAAM,6BAA6B,GACxC,oCAA6C,CAAC;AAChD,MAAM,CAAC,MAAM,2CAA2C,GACtD,wCAAiD,CAAC;AACpD,MAAM,CAAC,MAAM,qCAAqC,GAChD,0CAAmD,CAAC;AACtD,MAAM,CAAC,MAAM,wCAAwC,GACnD,oDAA6D,CAAC;AAEhE;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7C,OAAO;IACP,OAAO;IACP,OAAO;CACC,CAAC,CAAC;AAMZ,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC,MAAM,CAAC;IACxD,OAAO;IACP,uBAAuB;IACvB,aAAa;IACb,eAAe;IACf,qBAAqB;CACb,CAAC,CAAC;AAmEZ,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC;IAClD,mBAAmB,EAAE,EAAE;IACvB,mBAAmB,EAAE,CAAC,GAAG,IAAI;IAC7B,mBAAmB,EAAE,IAAI,GAAG,IAAI;IAChC,aAAa,EAAE,EAAE;IACjB,mBAAmB,EAAE,EAAE;IACvB,mBAAmB,EAAE,EAAE;IACvB,6BAA6B,EAAE,MAAM;IACrC,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;IAC1D,0BAA0B,EAAE,UAAU;IACtC,6BAA6B,EAAE,MAAM;CAC7B,CAAC,CAAC;AAEZ,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,CAAC;IACjD,OAAO,EAAE,6BAA6B;IACtC,MAAM,EAAE,eAAe;IACvB,aAAa,EAAE,uBAAuB;IACtC,SAAS,EAAE,OAAO;IAClB,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;QACvB,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,SAAS;KAChB,CAAC;IACF,SAAS,EAAE,QAAQ;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;QACrB,QAAQ,EAAE,yBAAyB;QACnC,OAAO,EAAE,uBAAuB;QAChC,iBAAiB,EAAE,oBAAoB;QACvC,cAAc,EAAE,sBAAsB,CAAC,mBAAmB;QAC1D,gBAAgB,EAAE,sBAAsB,CAAC,6BAA6B;QACtE,iBAAiB,EAAE,qBAAqB;QACxC,cAAc,EAAE,sBAAsB,CAAC,mBAAmB;QAC1D,WAAW,EAAE,KAAK;KACnB,CAAC;IACF,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC;QAC5B,WAAW,EAAE,iBAAiB;QAC9B,cAAc,EAAE,2CAA2C;QAC3D,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC;YAC7B,iBAAiB;YACjB,mBAAmB;SACX,CAAC;KACZ,CAAC;IACF,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,qCAAqC;QAClD,cAAc,EAAE,wCAAwC;QACxD,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC;YAC7B,aAAa;YACb,eAAe;SACP,CAAC;KACZ,CAAC;IACF,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;QACnB,WAAW,EAAE,qBAAqB;QAClC,MAAM,EAAE,uCAAuC;QAC/C,MAAM,EAAE,oBAAoB;QAC5B,KAAK,EAAE,uBAAuB;QAC9B,GAAG,EAAE,6CAA6C;QAClD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,2BAA2B;YACjC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,CAAU,CAAC;YAClD,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAU,CAAC;SACzC,CAAC;QACF,MAAM,EAAE,kBAAkB;QAC1B,iCAAiC,EAAE,KAAK;QACxC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,wCAAwC;YAClD,MAAM,EAAE,YAAY;YACpB,YAAY,EAAE,EAAE;YAChB,YAAY,EAAE,EAAE;YAChB,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,KAAK,EAAE,WAAW;QAClB,aAAa,EAAE,KAAK;QACpB,SAAS,EAAE,KAAK;KACjB,CAAC;IACF,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;QACnB,QAAQ,EAAE,wCAAwC;QAClD,SAAS,EAAE,eAAe;QAC1B,gBAAgB,EAAE,EAAE;QACpB,KAAK,EAAE,UAAU;QACjB,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,EAAE;QACf,aAAa,EAAE,MAAM;QACrB,cAAc,EAAE,EAAE;QAClB,wBAAwB,EAAE,MAAM;QAChC,cAAc,EAAE,EAAE;QAClB,cAAc,EAAE,EAAE;QAClB,sBAAsB,EAAE,MAAM;QAC9B,+BAA+B,EAAE,GAAG;QACpC,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC;YAC9B,SAAS,EAAE,EAAE;YACb,SAAS,EAAE,GAAG;YACd,YAAY,EAAE,GAAG;SAClB,CAAC;QACF,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;YACpB,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,CAAC;YACV,YAAY,EAAE,CAAC;YACf,WAAW,EAAE,EAAE;YACf,SAAS,EAAE,EAAE;YACb,KAAK,EAAE,EAAE;YACT,kBAAkB,EAAE,EAAE;YACtB,kBAAkB,EAAE,EAAE;YACtB,eAAe,EAAE,EAAE;YACnB,eAAe,EAAE,EAAE;YACnB,eAAe,EAAE,EAAE;YACnB,eAAe,EAAE,EAAE;YACnB,SAAS,EAAE,EAAE;YACb,SAAS,EAAE,EAAE;YACb,SAAS,EAAE,EAAE;YACb,SAAS,EAAE,EAAE;SACd,CAAC;QACF,aAAa,EAAE,CAAC;QAChB,KAAK,EAAE,CAAC;QACR,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,CAAC;QACpB,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,KAAK;QACjB,8BAA8B,EAAE,IAAI;KACrC,CAAC;IACF,cAAc,EAAE,4BAA4B;IAC5C,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC;QACzB,KAAK,EAAE,CAAC;QACR,oBAAoB,EAAE,CAAC;QACvB,UAAU,EAAE,CAAC,CAAC;QACd,YAAY,EAAE,CAAC,CAAC;QAChB,kBAAkB,EAAE,CAAC,CAAC;KACvB,CAAC;IACF,iBAAiB,EAAE,KAAK;CAChB,CAAC,CAAC;AAYZ,MAAM,CAAC,MAAM,qCAAqC,GAAG,sCAA+C,CAAC;AACrG,MAAM,CAAC,MAAM,wCAAwC,GAAG,+BAAwC,CAAC;AACjG,MAAM,CAAC,MAAM,2CAA2C,GAAG,+CAAwD,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,6 @@
1
+ export { normalizeRsaPublicKey, normalizeRs256JoseVerifyRequest } from './internal/rsa.js';
2
+ export type { RsaPublicKeyBytes, Rs256JoseVerifyInput } from './contracts.js';
3
+ export { CRYPTO_RS256_GUEST_LINKED_REALIZATION, CRYPTO_RS256_GUEST_LINKED_IMPLEMENTATION, CRYPTO_RS256_RUNTIME_BUILTIN_IMPLEMENTATION } from './contracts.js';
1
4
  import { CRYPTO_ALGORITHMS, CRYPTO_CONTRACT_VERSION, CRYPTO_ES256_CONTRACT, CRYPTO_ES256_CONTRACT_VERSION, CRYPTO_ES256_GUEST_LINKED_IMPLEMENTATION, CRYPTO_ES256_GUEST_LINKED_REALIZATION, CRYPTO_ES256_RUNTIME_BUILTIN_IMPLEMENTATION, CRYPTO_GUEST_SOURCE_IMPLEMENTATION, CRYPTO_RESOURCE_LIMITS, CRYPTO_RUNTIME_BUILTIN_IMPLEMENTATION, CRYPTO_VERIFICATION_STATUSES, type CryptoAlgorithm, type CryptoVerificationResult, type CryptoVerificationStatus, type Es256JoseVerifyInput, type HmacKeyBytes, type HmacVerificationKey, type MacAlgorithm, type MacVerifyRequest, type P256PublicKeyBytes, type P256PublicKeyCoordinates, type SignatureAlgorithm, type SignatureVerifyRequest } from './contracts.js';
2
5
  import { normalizeEs256JoseVerifyRequest, normalizeP256PublicKeyCoordinates } from './internal/verification.js';
3
6
  export { CRYPTO_ALGORITHMS, CRYPTO_CONTRACT_VERSION, CRYPTO_ES256_CONTRACT, CRYPTO_ES256_CONTRACT_VERSION, CRYPTO_ES256_GUEST_LINKED_IMPLEMENTATION, CRYPTO_ES256_GUEST_LINKED_REALIZATION, CRYPTO_ES256_RUNTIME_BUILTIN_IMPLEMENTATION, CRYPTO_GUEST_SOURCE_IMPLEMENTATION, CRYPTO_RESOURCE_LIMITS, CRYPTO_RUNTIME_BUILTIN_IMPLEMENTATION, CRYPTO_VERIFICATION_STATUSES, };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,EACrB,6BAA6B,EAC7B,wCAAwC,EACxC,qCAAqC,EACrC,2CAA2C,EAC3C,kCAAkC,EAClC,sBAAsB,EACtB,qCAAqC,EACrC,4BAA4B,EAC5B,KAAK,eAAe,EACpB,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC5B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,+BAA+B,EAE/B,iCAAiC,EAGlC,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,EACrB,6BAA6B,EAC7B,wCAAwC,EACxC,qCAAqC,EACrC,2CAA2C,EAC3C,kCAAkC,EAClC,sBAAsB,EACtB,qCAAqC,EACrC,4BAA4B,GAC7B,CAAC;AACF,YAAY,EACV,eAAe,EACf,wBAAwB,EACxB,wBAAwB,EACxB,oBAAoB,EACpB,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,sBAAsB,GACvB,CAAC;AAEF,OAAO,EACL,+BAA+B,EAC/B,iCAAiC,GAClC,CAAC;AAEF,wBAAsB,SAAS,CAC7B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,wBAAwB,CAAC,CAcnC;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,wBAAwB,CAAC,CAenC;AAED,eAAO,MAAM,GAAG;;EAEd,CAAC;AAEH,eAAO,MAAM,SAAS;;EAEpB,CAAC;AAEH,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,eAAO,MAAM,MAAM;;;;;;;;EAIjB,CAAC;AAEH,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,+BAA+B,EAAE,MAAM,mBAAmB,CAAC;AAC3F,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,qCAAqC,EAAE,wCAAwC,EAAE,2CAA2C,EAAE,MAAM,gBAAgB,CAAC;AAC9J,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,EACrB,6BAA6B,EAC7B,wCAAwC,EACxC,qCAAqC,EACrC,2CAA2C,EAC3C,kCAAkC,EAClC,sBAAsB,EACtB,qCAAqC,EACrC,4BAA4B,EAC5B,KAAK,eAAe,EACpB,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC5B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,+BAA+B,EAE/B,iCAAiC,EAGlC,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,EACrB,6BAA6B,EAC7B,wCAAwC,EACxC,qCAAqC,EACrC,2CAA2C,EAC3C,kCAAkC,EAClC,sBAAsB,EACtB,qCAAqC,EACrC,4BAA4B,GAC7B,CAAC;AACF,YAAY,EACV,eAAe,EACf,wBAAwB,EACxB,wBAAwB,EACxB,oBAAoB,EACpB,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,sBAAsB,GACvB,CAAC;AAEF,OAAO,EACL,+BAA+B,EAC/B,iCAAiC,GAClC,CAAC;AAEF,wBAAsB,SAAS,CAC7B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,wBAAwB,CAAC,CAcnC;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,wBAAwB,CAAC,CAuBnC;AAED,eAAO,MAAM,GAAG;;EAEd,CAAC;AAEH,eAAO,MAAM,SAAS;;EAEpB,CAAC;AAEH,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,eAAO,MAAM,MAAM;;;;;;;;EAIjB,CAAC;AAEH,eAAe,MAAM,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,7 @@
1
+ import { normalizeRs256Request, verifyRs256 } from './internal/rsa.js';
2
+ import { ownDataProperty } from './internal/data.js';
3
+ export { normalizeRsaPublicKey, normalizeRs256JoseVerifyRequest } from './internal/rsa.js';
4
+ export { CRYPTO_RS256_GUEST_LINKED_REALIZATION, CRYPTO_RS256_GUEST_LINKED_IMPLEMENTATION, CRYPTO_RS256_RUNTIME_BUILTIN_IMPLEMENTATION } from './contracts.js';
1
5
  import { CRYPTO_ALGORITHMS, CRYPTO_CONTRACT_VERSION, CRYPTO_ES256_CONTRACT, CRYPTO_ES256_CONTRACT_VERSION, CRYPTO_ES256_GUEST_LINKED_IMPLEMENTATION, CRYPTO_ES256_GUEST_LINKED_REALIZATION, CRYPTO_ES256_RUNTIME_BUILTIN_IMPLEMENTATION, CRYPTO_GUEST_SOURCE_IMPLEMENTATION, CRYPTO_RESOURCE_LIMITS, CRYPTO_RUNTIME_BUILTIN_IMPLEMENTATION, CRYPTO_VERIFICATION_STATUSES, } from './contracts.js';
2
6
  import { verifyEs256, verifyHs256 } from './internal/realization.js';
3
7
  import { normalizeEs256JoseVerifyRequest, normalizeMacVerifyRequest, normalizeP256PublicKeyCoordinates, normalizeSignatureVerifyRequest, normalizeVerificationResult, } from './internal/verification.js';
@@ -21,6 +25,19 @@ export async function verifyMac(request) {
21
25
  }
22
26
  }
23
27
  export async function verifySignature(request) {
28
+ let rsa = false;
29
+ try {
30
+ rsa = ownDataProperty(request, 'algorithm').value === 'RS256';
31
+ }
32
+ catch {
33
+ return normalizeVerificationResult({ status: 'invalid-input' });
34
+ }
35
+ if (rsa) {
36
+ const normalized = normalizeRs256Request(request);
37
+ if (!normalized.ok)
38
+ return normalized.result;
39
+ return normalizeVerificationResult(await verifyRs256(normalized.request));
40
+ }
24
41
  let normalized;
25
42
  try {
26
43
  normalized = normalizeSignatureVerifyRequest(request);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,EACrB,6BAA6B,EAC7B,wCAAwC,EACxC,qCAAqC,EACrC,2CAA2C,EAC3C,kCAAkC,EAClC,sBAAsB,EACtB,qCAAqC,EACrC,4BAA4B,GAa7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EACL,+BAA+B,EAC/B,yBAAyB,EACzB,iCAAiC,EACjC,+BAA+B,EAC/B,2BAA2B,GAC5B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,EACrB,6BAA6B,EAC7B,wCAAwC,EACxC,qCAAqC,EACrC,2CAA2C,EAC3C,kCAAkC,EAClC,sBAAsB,EACtB,qCAAqC,EACrC,4BAA4B,GAC7B,CAAC;AAgBF,OAAO,EACL,+BAA+B,EAC/B,iCAAiC,GAClC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAyB;IAEzB,IAAI,UAAwD,CAAC;IAC7D,IAAI,CAAC;QACH,UAAU,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,2BAA2B,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,EAAE;QAAE,OAAO,UAAU,CAAC,MAAM,CAAC;IAE7C,IAAI,CAAC;QACH,OAAO,2BAA2B,CAAC,MAAM,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,2BAA2B,CAAC,SAAS,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAA+B;IAE/B,IAAI,UAA8D,CAAC;IACnE,IAAI,CAAC;QACH,UAAU,GAAG,+BAA+B,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,2BAA2B,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,EAAE;QAAE,OAAO,UAAU,CAAC,MAAM,CAAC;IAE7C,IAAI,CAAC;QACH,OAAO,2BAA2B,CAAC,MAAM,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,OAAO,2BAA2B,CAAC,SAAS,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;IAC/B,MAAM,EAAE,SAAS;CAClB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;IACrC,MAAM,EAAE,eAAe;CACxB,CAAC,CAAC;AAEH,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAyB,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAClC,UAAU;IACV,GAAG;IACH,SAAS;CACV,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import type { CryptoVerificationResult, RsaPublicKeyBytes, Rs256JoseVerifyInput } from '../contracts.js';
2
+ export declare const RSA_MODULUS_BYTES: readonly number[];
3
+ export declare const RSA_DATA_BYTES_MAXIMUM: 12288;
4
+ export declare function encodeRsaInteger(bytes: Uint8Array): string;
5
+ export declare function decodeRsaInteger(value: unknown, maximum: number): Uint8Array<ArrayBuffer>;
6
+ /** Normalized wire, independent of JWK policy: LE32(k), n[k], e[4], then
7
+ * d[k], p/q/dp/dq/qi[k/2] when private. Metadata is owned by JWT. */
8
+ export declare function rsaKeyBytes(components: Readonly<Record<string, unknown>>, privateKey?: boolean): Uint8Array<ArrayBuffer>;
9
+ export declare function rsaWireJwk(bytes: Uint8Array, privateKey?: boolean): Record<string, string>;
10
+ export declare function normalizeRsaPublicKey(value: Readonly<{
11
+ n: string;
12
+ e: string;
13
+ }>): {
14
+ ok: false;
15
+ result: CryptoVerificationResult;
16
+ } | {
17
+ ok: true;
18
+ key: {
19
+ type: "rsa-public-key-bytes";
20
+ bytes: Uint8Array<ArrayBuffer>;
21
+ };
22
+ };
23
+ export declare function normalizeRs256Request(value: unknown): {
24
+ ok: false;
25
+ result: CryptoVerificationResult;
26
+ } | {
27
+ ok: true;
28
+ request: {
29
+ algorithm: "RS256";
30
+ key: {
31
+ type: "rsa-public-key-bytes";
32
+ bytes: Uint8Array<ArrayBuffer>;
33
+ };
34
+ data: Uint8Array<ArrayBuffer>;
35
+ signature: Uint8Array<ArrayBuffer>;
36
+ };
37
+ };
38
+ export declare function normalizeRs256JoseVerifyRequest(value: Rs256JoseVerifyInput): {
39
+ ok: false;
40
+ result: CryptoVerificationResult;
41
+ } | {
42
+ ok: true;
43
+ request: {
44
+ algorithm: "RS256";
45
+ key: {
46
+ type: "rsa-public-key-bytes";
47
+ bytes: Uint8Array<ArrayBuffer>;
48
+ };
49
+ data: Uint8Array<ArrayBuffer>;
50
+ signature: Uint8Array<ArrayBuffer>;
51
+ };
52
+ };
53
+ export declare function verifyRs256(request: {
54
+ key: RsaPublicKeyBytes;
55
+ data: Uint8Array<ArrayBuffer>;
56
+ signature: Uint8Array<ArrayBuffer>;
57
+ }): Promise<CryptoVerificationResult>;
58
+ //# sourceMappingURL=rsa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsa.d.ts","sourceRoot":"","sources":["../../src/internal/rsa.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAGzG,eAAO,MAAM,iBAAiB,EAA+C,SAAS,MAAM,EAAE,CAAC;AAC/F,eAAO,MAAM,sBAAsB,OAAuD,CAAC;AAG3F,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAM1D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CASzF;AAED;qEACqE;AACrE,wBAAgB,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,UAAU,UAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,CAwBtH;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,UAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAcxF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;;YAjEwB,wBAAwB;;;;;;;EAuE9H;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO;;YAzEmD,wBAAwB;;;;;;;;;;;;EA4F9H;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,oBAAoB;;YA9F4B,wBAAwB;;;;;;;;;;;;EA2G9H;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IAAC,SAAS,EAAE,UAAU,CAAC,WAAW,CAAC,CAAA;CAAE,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAa3K"}
@@ -0,0 +1,185 @@
1
+ import { CRYPTO_RESOURCE_LIMITS } from '../contracts.js';
2
+ import { exactDataProperties, isOrdinaryObject, ownDataProperty, copyBytes } from './data.js';
3
+ export const RSA_MODULUS_BYTES = CRYPTO_RESOURCE_LIMITS.rs256ModulusBytes;
4
+ export const RSA_DATA_BYTES_MAXIMUM = CRYPTO_RESOURCE_LIMITS.rs256SigningInputBytesMaximum;
5
+ const fail = (status) => ({ ok: false, result: { status } });
6
+ export function encodeRsaInteger(bytes) {
7
+ let start = 0;
8
+ while (start + 1 < bytes.length && bytes[start] === 0)
9
+ start++;
10
+ let binary = '';
11
+ for (const byte of bytes.subarray(start))
12
+ binary += String.fromCharCode(byte);
13
+ return btoa(binary).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
14
+ }
15
+ export function decodeRsaInteger(value, maximum) {
16
+ if (typeof value !== 'string' || value.length > Math.ceil(maximum * 4 / 3)
17
+ || !/^[A-Za-z0-9_-]+$/.test(value) || value.length % 4 === 1)
18
+ throw new TypeError('Invalid RSA integer.');
19
+ const bytes = Uint8Array.from(atob(value.replace(/-/g, '+').replace(/_/g, '/')
20
+ + '='.repeat((4 - value.length % 4) % 4)), char => char.charCodeAt(0));
21
+ if (!bytes.length || bytes.length > maximum || bytes[0] === 0 || encodeRsaInteger(bytes) !== value) {
22
+ bytes.fill(0);
23
+ throw new TypeError('Invalid RSA integer.');
24
+ }
25
+ return bytes;
26
+ }
27
+ /** Normalized wire, independent of JWK policy: LE32(k), n[k], e[4], then
28
+ * d[k], p/q/dp/dq/qi[k/2] when private. Metadata is owned by JWT. */
29
+ export function rsaKeyBytes(components, privateKey = false) {
30
+ const decoded = [];
31
+ let output;
32
+ try {
33
+ const n = decodeRsaInteger(components.n, 512);
34
+ decoded.push(n);
35
+ const k = n.length;
36
+ if (!RSA_MODULUS_BYTES.includes(k) || n[0] < 128 || !(n[k - 1] & 1))
37
+ throw new TypeError();
38
+ const e = decodeRsaInteger(components.e, 4);
39
+ decoded.push(e);
40
+ let exponent = 0;
41
+ for (const byte of e)
42
+ exponent = exponent * 256 + byte;
43
+ if (exponent < 3 || exponent % 2 !== 1)
44
+ throw new TypeError();
45
+ output = new Uint8Array(privateKey ? 8 + k * 9 / 2 : 8 + k);
46
+ new DataView(output.buffer).setUint32(0, k, true);
47
+ output.set(n, 4);
48
+ output.set(e, 8 + k - e.length);
49
+ let offset = 8 + k;
50
+ if (privateKey)
51
+ for (const name of ['d', 'p', 'q', 'dp', 'dq', 'qi']) {
52
+ const width = name === 'd' ? k : k / 2;
53
+ const bytes = decodeRsaInteger(components[name], width);
54
+ decoded.push(bytes);
55
+ if ((name === 'p' || name === 'q') && (bytes.length !== width || bytes[0] < 128 || !(bytes[width - 1] & 1)))
56
+ throw new TypeError();
57
+ output.set(bytes, offset + width - bytes.length);
58
+ offset += width;
59
+ }
60
+ return output;
61
+ }
62
+ catch {
63
+ output?.fill(0);
64
+ throw new TypeError('Invalid RSA key components.');
65
+ }
66
+ finally {
67
+ for (const bytes of decoded)
68
+ bytes.fill(0);
69
+ }
70
+ }
71
+ export function rsaWireJwk(bytes, privateKey = false) {
72
+ if (!(bytes instanceof Uint8Array) || bytes.length < 8)
73
+ throw new TypeError('Invalid RSA key.');
74
+ const k = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength).getUint32(0, true);
75
+ if (!RSA_MODULUS_BYTES.includes(k) || bytes.length !== (privateKey ? 8 + k * 9 / 2 : 8 + k)
76
+ || bytes[4] < 128 || !(bytes[k + 3] & 1))
77
+ throw new TypeError('Invalid RSA key.');
78
+ const exponent = new DataView(bytes.buffer, bytes.byteOffset + 4 + k, 4).getUint32(0);
79
+ if (exponent < 3 || exponent % 2 !== 1)
80
+ throw new TypeError('Invalid RSA exponent.');
81
+ const jwk = { kty: 'RSA', n: encodeRsaInteger(bytes.subarray(4, 4 + k)), e: encodeRsaInteger(bytes.subarray(4 + k, 8 + k)) };
82
+ let offset = 8 + k;
83
+ if (privateKey)
84
+ for (const name of ['d', 'p', 'q', 'dp', 'dq', 'qi']) {
85
+ const width = name === 'd' ? k : k / 2;
86
+ jwk[name] = encodeRsaInteger(bytes.subarray(offset, offset + width));
87
+ offset += width;
88
+ }
89
+ return jwk;
90
+ }
91
+ export function normalizeRsaPublicKey(value) {
92
+ try {
93
+ if (!isOrdinaryObject(value) || !exactDataProperties(value, new Set(['n', 'e'])))
94
+ return fail('invalid-key');
95
+ const bytes = rsaKeyBytes({ n: ownDataProperty(value, 'n').value, e: ownDataProperty(value, 'e').value });
96
+ return { ok: true, key: { type: 'rsa-public-key-bytes', bytes } };
97
+ }
98
+ catch {
99
+ return fail('invalid-key');
100
+ }
101
+ }
102
+ export function normalizeRs256Request(value) {
103
+ try {
104
+ if (!isOrdinaryObject(value) || !exactDataProperties(value, new Set(['algorithm', 'key', 'data', 'signature']))
105
+ || ownDataProperty(value, 'algorithm').value !== 'RS256')
106
+ return fail('invalid-input');
107
+ const key = ownDataProperty(value, 'key').value;
108
+ if (!isOrdinaryObject(key) || !exactDataProperties(key, new Set(['type', 'bytes']))
109
+ || ownDataProperty(key, 'type').value !== 'rsa-public-key-bytes')
110
+ return fail('invalid-key');
111
+ const inputKey = ownDataProperty(key, 'bytes').value;
112
+ if (!(inputKey instanceof Uint8Array) || inputKey.length > 520)
113
+ return fail('invalid-key');
114
+ const bytes = copyBytes(inputKey);
115
+ if (!bytes || bytes.length > 520)
116
+ return fail('invalid-key');
117
+ try {
118
+ rsaWireJwk(bytes);
119
+ }
120
+ catch {
121
+ return fail('invalid-key');
122
+ }
123
+ const inputData = ownDataProperty(value, 'data').value, inputSignature = ownDataProperty(value, 'signature').value;
124
+ if (!(inputData instanceof Uint8Array) || inputData.length > RSA_DATA_BYTES_MAXIMUM
125
+ || !(inputSignature instanceof Uint8Array) || inputSignature.length !== bytes.length - 8)
126
+ return fail('invalid-input');
127
+ const data = copyBytes(inputData), signature = copyBytes(inputSignature);
128
+ if (!data || data.length > RSA_DATA_BYTES_MAXIMUM || !signature || signature.length !== bytes.length - 8)
129
+ return fail('invalid-input');
130
+ return { ok: true, request: { algorithm: 'RS256', key: { type: 'rsa-public-key-bytes', bytes }, data, signature } };
131
+ }
132
+ catch {
133
+ return fail('invalid-input');
134
+ }
135
+ }
136
+ export function normalizeRs256JoseVerifyRequest(value) {
137
+ try {
138
+ if (!isOrdinaryObject(value) || !exactDataProperties(value, new Set(['key', 'data', 'signature'])))
139
+ return fail('invalid-input');
140
+ const key = normalizeRsaPublicKey(ownDataProperty(value, 'key').value);
141
+ if (!key.ok)
142
+ return key;
143
+ const text = ownDataProperty(value, 'signature').value;
144
+ if (typeof text !== 'string' || text.length > 683 || !/^[A-Za-z0-9_-]+$/.test(text) || text.length % 4 === 1)
145
+ return fail('invalid-input');
146
+ // Signatures are fixed-width octet strings; leading zero bytes are valid.
147
+ const binary = atob(text.replace(/-/g, '+').replace(/_/g, '/') + '='.repeat((4 - text.length % 4) % 4));
148
+ if (btoa(binary).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '') !== text)
149
+ return fail('invalid-input');
150
+ return normalizeRs256Request({ algorithm: 'RS256', key: key.key, data: ownDataProperty(value, 'data').value,
151
+ signature: Uint8Array.from(binary, char => char.charCodeAt(0)) });
152
+ }
153
+ catch {
154
+ return fail('invalid-input');
155
+ }
156
+ }
157
+ export async function verifyRs256(request) {
158
+ let subtle;
159
+ try {
160
+ subtle = globalThis.crypto?.subtle;
161
+ }
162
+ catch {
163
+ return { status: 'realization-failure' };
164
+ }
165
+ if (!subtle)
166
+ return { status: 'realization-failure' };
167
+ let key;
168
+ try {
169
+ key = await subtle.importKey('jwk', rsaWireJwk(request.key.bytes), { name: 'RSASSA-PKCS1-v1_5', hash: 'SHA-256' }, false, ['verify']);
170
+ }
171
+ catch {
172
+ return { status: 'invalid-key' };
173
+ }
174
+ finally {
175
+ request.key.bytes.fill(0);
176
+ }
177
+ try {
178
+ const valid = await subtle.verify('RSASSA-PKCS1-v1_5', key, request.signature, request.data);
179
+ return { status: valid === true ? 'valid' : valid === false ? 'invalid-authenticator' : 'realization-failure' };
180
+ }
181
+ catch {
182
+ return { status: 'realization-failure' };
183
+ }
184
+ }
185
+ //# sourceMappingURL=rsa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsa.js","sourceRoot":"","sources":["../../src/internal/rsa.ts"],"names":[],"mappings":"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"}
@@ -55,10 +55,10 @@ export declare function redactMacVerifyRequest(request: MacVerifyRequest | Norma
55
55
  tag: '[redacted]';
56
56
  }>;
57
57
  export declare function redactSignatureVerifyRequest(request: SignatureVerifyRequest | NormalizedSignatureVerifyRequest): Readonly<{
58
- algorithm: 'ES256';
58
+ algorithm: 'ES256' | 'RS256';
59
59
  key: Readonly<{
60
- type: 'p256-public-key-bytes';
61
- compatibleAlgorithms: readonly ['ES256'];
60
+ type: 'p256-public-key-bytes' | 'rsa-public-key-bytes';
61
+ compatibleAlgorithms: readonly ('ES256' | 'RS256')[];
62
62
  identity: '[redacted]';
63
63
  }>;
64
64
  data: '[redacted]';
@@ -1 +1 @@
1
- {"version":3,"file":"verification.d.ts","sourceRoot":"","sources":["../../src/internal/verification.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verification.d.ts","sourceRoot":"","sources":["../../src/internal/verification.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC5B,MAAM,iBAAiB,CAAC;AA6BzB,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE;QACZ,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;QAChC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;KACzC,CAAC;IACF,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IACvC,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;CACvC;AAED,MAAM,MAAM,6BAA6B,GACrC;IACE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,OAAO,EAAE,0BAA0B,CAAC;CAC9C,GACD;IACE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC;CAC3C,CAAC;AAEN,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE;QACZ,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC;QACvC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;KACzC,CAAC;IACF,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;CAC7C;AAED,MAAM,MAAM,mCAAmC,GAC3C;IACE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,OAAO,EAAE,gCAAgC,CAAC;CACpD,GACD;IACE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC;CAC3C,CAAC;AAEN,MAAM,MAAM,0BAA0B,GAClC;IACE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,GAAG,EAAE,gCAAgC,CAAC,KAAK,CAAC,CAAC;CACvD,GACD;IACE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC;CAC3C,CAAC;AAEN,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,wBAAwB,GAC/B,wBAAwB,CAE1B;AAmFD,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,GACb,6BAA6B,CAgD/B;AAED,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,OAAO,GACb,mCAAmC,CA6CrC;AAED,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,oBAAoB,GAC1B,mCAAmC,CAqCrC;AAED,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,wBAAwB,GAC9B,0BAA0B,CAmC5B;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,OAAO,GACb,wBAAwB,CAY1B;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,gBAAgB,GAAG,0BAA0B,GACrD,QAAQ,CAAC;IACV,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,QAAQ,CAAC;QACZ,IAAI,EAAE,gBAAgB,CAAC;QACvB,oBAAoB,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;QACzC,QAAQ,EAAE,YAAY,CAAC;KACxB,CAAC,CAAC;IACH,IAAI,EAAE,YAAY,CAAC;IACnB,GAAG,EAAE,YAAY,CAAC;CACnB,CAAC,CAWD;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,sBAAsB,GAAG,gCAAgC,GACjE,QAAQ,CAAC;IACV,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC;IAC7B,GAAG,EAAE,QAAQ,CAAC;QACZ,IAAI,EAAE,uBAAuB,GAAG,sBAAsB,CAAC;QACvD,oBAAoB,EAAE,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC;QACrD,QAAQ,EAAE,YAAY,CAAC;KACxB,CAAC,CAAC;IACH,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,YAAY,CAAC;CACzB,CAAC,CAWD"}
@@ -262,8 +262,8 @@ export function redactSignatureVerifyRequest(request) {
262
262
  return Object.freeze({
263
263
  algorithm: request.algorithm,
264
264
  key: Object.freeze({
265
- type: 'p256-public-key-bytes',
266
- compatibleAlgorithms: Object.freeze(['ES256']),
265
+ type: request.key.type,
266
+ compatibleAlgorithms: Object.freeze([request.algorithm]),
267
267
  identity: '[redacted]',
268
268
  }),
269
269
  data: '[redacted]',