@pulse-compute/crypto 1.0.0-beta.4 → 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 (95) hide show
  1. package/README.md +89 -8
  2. package/as/digest-text.as.ts +34 -0
  3. package/as/pulse-hmac-as.ts +7 -1
  4. package/conformance/digest-text.json +38 -0
  5. package/conformance/hs256.json +85 -0
  6. package/dist/contracts.d.ts +34 -12
  7. package/dist/contracts.d.ts.map +1 -1
  8. package/dist/contracts.js +9 -3
  9. package/dist/contracts.js.map +1 -1
  10. package/dist/digest.d.ts +14 -0
  11. package/dist/digest.d.ts.map +1 -0
  12. package/dist/digest.js +17 -0
  13. package/dist/digest.js.map +1 -0
  14. package/dist/index.d.ts +6 -0
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +20 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/internal/rsa.d.ts +58 -0
  19. package/dist/internal/rsa.d.ts.map +1 -0
  20. package/dist/internal/rsa.js +185 -0
  21. package/dist/internal/rsa.js.map +1 -0
  22. package/dist/internal/verification.d.ts +3 -3
  23. package/dist/internal/verification.d.ts.map +1 -1
  24. package/dist/internal/verification.js +2 -2
  25. package/dist/internal/verification.js.map +1 -1
  26. package/guests/es256-rustcrypto/README.md +43 -0
  27. package/guests/es256-rustcrypto/build.cjs +297 -0
  28. package/guests/es256-rustcrypto/prebuilt/es256-verifier.unoptimized.wasm +0 -0
  29. package/guests/es256-rustcrypto/prebuilt/es256-verifier.wasm +0 -0
  30. package/guests/es256-rustcrypto/probe/.cargo/config.toml +18 -0
  31. package/guests/es256-rustcrypto/probe/Cargo.lock +238 -0
  32. package/guests/es256-rustcrypto/probe/Cargo.toml +26 -0
  33. package/guests/es256-rustcrypto/probe/README.md +35 -0
  34. package/guests/es256-rustcrypto/probe/rust-toolchain.toml +5 -0
  35. package/guests/es256-rustcrypto/probe/src/lib.rs +108 -0
  36. package/guests/es256-rustcrypto/pulse.guest-unit.json +119 -0
  37. package/guests/es256-rustcrypto/source/.cargo/config.toml +18 -0
  38. package/guests/es256-rustcrypto/source/Cargo.lock +265 -0
  39. package/guests/es256-rustcrypto/source/Cargo.toml +23 -0
  40. package/guests/es256-rustcrypto/source/README.md +26 -0
  41. package/guests/es256-rustcrypto/source/bearssl/LICENSE.txt +21 -0
  42. package/guests/es256-rustcrypto/source/bearssl/UPSTREAM.json +49 -0
  43. package/guests/es256-rustcrypto/source/bearssl/inc/bearssl.h +170 -0
  44. package/guests/es256-rustcrypto/source/bearssl/inc/bearssl_aead.h +1059 -0
  45. package/guests/es256-rustcrypto/source/bearssl/inc/bearssl_block.h +2618 -0
  46. package/guests/es256-rustcrypto/source/bearssl/inc/bearssl_ec.h +883 -0
  47. package/guests/es256-rustcrypto/source/bearssl/inc/bearssl_hash.h +1346 -0
  48. package/guests/es256-rustcrypto/source/bearssl/inc/bearssl_hmac.h +241 -0
  49. package/guests/es256-rustcrypto/source/bearssl/inc/bearssl_kdf.h +185 -0
  50. package/guests/es256-rustcrypto/source/bearssl/inc/bearssl_pem.h +294 -0
  51. package/guests/es256-rustcrypto/source/bearssl/inc/bearssl_prf.h +150 -0
  52. package/guests/es256-rustcrypto/source/bearssl/inc/bearssl_rand.h +397 -0
  53. package/guests/es256-rustcrypto/source/bearssl/inc/bearssl_rsa.h +1366 -0
  54. package/guests/es256-rustcrypto/source/bearssl/inc/bearssl_ssl.h +4296 -0
  55. package/guests/es256-rustcrypto/source/bearssl/inc/bearssl_x509.h +1397 -0
  56. package/guests/es256-rustcrypto/source/bearssl/src/codec/ccopy.c +44 -0
  57. package/guests/es256-rustcrypto/source/bearssl/src/codec/dec32be.c +38 -0
  58. package/guests/es256-rustcrypto/source/bearssl/src/codec/enc32be.c +38 -0
  59. package/guests/es256-rustcrypto/source/bearssl/src/config.h +229 -0
  60. package/guests/es256-rustcrypto/source/bearssl/src/inner.h +2532 -0
  61. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_add.c +46 -0
  62. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_bitlen.c +44 -0
  63. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_decmod.c +124 -0
  64. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_decode.c +57 -0
  65. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_decred.c +103 -0
  66. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_encode.c +79 -0
  67. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_fmont.c +60 -0
  68. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_iszero.c +39 -0
  69. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_moddiv.c +488 -0
  70. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_modpow.c +65 -0
  71. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_modpow2.c +160 -0
  72. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_montmul.c +93 -0
  73. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_mulacc.c +61 -0
  74. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_muladd.c +157 -0
  75. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_ninv31.c +39 -0
  76. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_reduce.c +66 -0
  77. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_rshift.c +47 -0
  78. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_sub.c +46 -0
  79. package/guests/es256-rustcrypto/source/bearssl/src/int/i31_tmont.c +36 -0
  80. package/guests/es256-rustcrypto/source/bearssl/src/int/i32_div32.c +56 -0
  81. package/guests/es256-rustcrypto/source/bearssl/src/rsa/rsa_i31_priv.c +203 -0
  82. package/guests/es256-rustcrypto/source/bearssl/src/rsa/rsa_i31_pub.c +106 -0
  83. package/guests/es256-rustcrypto/source/bearssl/src/rsa/rsa_pkcs1_sig_pad.c +100 -0
  84. package/guests/es256-rustcrypto/source/build.rs +38 -0
  85. package/guests/es256-rustcrypto/source/freestanding/string.h +8 -0
  86. package/guests/es256-rustcrypto/source/rs256.c +103 -0
  87. package/guests/es256-rustcrypto/source/rust-toolchain.toml +5 -0
  88. package/guests/es256-rustcrypto/source/src/lib.rs +308 -0
  89. package/package.json +22 -4
  90. package/pulse.package.json +64 -0
  91. package/pulsewasm.compiler.cjs +89 -0
  92. package/pulsewasm.manifest.cjs +15 -0
  93. package/pulsewasm.native.cjs +79 -7
  94. package/src/provider.cjs +141 -2
  95. package/src/provider.d.cts +6 -0
@@ -0,0 +1,108 @@
1
+ #![no_std]
2
+
3
+ use core::{panic::PanicInfo, slice};
4
+ use ecdsa::{
5
+ hazmat::{bits2field, verify_prehashed},
6
+ Signature,
7
+ };
8
+ use p256::{
9
+ elliptic_curve::sec1::FromEncodedPoint,
10
+ AffinePoint,
11
+ EncodedPoint,
12
+ NistP256,
13
+ ProjectivePoint,
14
+ };
15
+ use sha2::{Digest, Sha256};
16
+
17
+ type P256Signature = Signature<NistP256>;
18
+
19
+ const P256_PUBLIC_KEY_BYTES: usize = 64;
20
+ const ES256_SIGNATURE_BYTES: usize = 64;
21
+ const ES256_SIGNING_INPUT_BYTES_MAXIMUM: usize = 16_340;
22
+
23
+ const STATUS_VALID: i32 = 1;
24
+ const STATUS_INVALID_AUTHENTICATOR: i32 = 0;
25
+ const STATUS_INVALID_KEY: i32 = -1;
26
+ const STATUS_INVALID_INPUT: i32 = -2;
27
+
28
+ #[panic_handler]
29
+ fn panic(_info: &PanicInfo<'_>) -> ! {
30
+ loop {
31
+ core::hint::spin_loop();
32
+ }
33
+ }
34
+
35
+ /// Dependency-selection probe only. G1 owns the private frame and production
36
+ /// guest ABI; this function must not become an application or package API.
37
+ ///
38
+ /// # Safety
39
+ ///
40
+ /// The caller must provide readable, non-overlapping spans in the imported
41
+ /// fixed memory. G0 executes only maintainer-controlled vectors. G1 must
42
+ /// replace this probe boundary with complete frame validation before any
43
+ /// dereference.
44
+ #[no_mangle]
45
+ pub unsafe extern "C" fn pulse_es256_dependency_probe(
46
+ key_pointer: u32,
47
+ key_length: u32,
48
+ data_pointer: u32,
49
+ data_length: u32,
50
+ signature_pointer: u32,
51
+ signature_length: u32,
52
+ ) -> i32 {
53
+ if key_length as usize != P256_PUBLIC_KEY_BYTES {
54
+ return STATUS_INVALID_KEY;
55
+ }
56
+ if signature_length as usize != ES256_SIGNATURE_BYTES
57
+ || data_length as usize > ES256_SIGNING_INPUT_BYTES_MAXIMUM
58
+ {
59
+ return STATUS_INVALID_INPUT;
60
+ }
61
+
62
+ let key_bytes = slice::from_raw_parts(
63
+ key_pointer as *const u8,
64
+ P256_PUBLIC_KEY_BYTES,
65
+ );
66
+ let data = slice::from_raw_parts(
67
+ data_pointer as *const u8,
68
+ data_length as usize,
69
+ );
70
+ let signature_bytes = slice::from_raw_parts(
71
+ signature_pointer as *const u8,
72
+ ES256_SIGNATURE_BYTES,
73
+ );
74
+
75
+ let mut sec1_key = [0_u8; P256_PUBLIC_KEY_BYTES + 1];
76
+ sec1_key[0] = 0x04;
77
+ sec1_key[1..].copy_from_slice(key_bytes);
78
+
79
+ let encoded_point = match EncodedPoint::from_bytes(sec1_key) {
80
+ Ok(value) => value,
81
+ Err(_) => return STATUS_INVALID_KEY,
82
+ };
83
+ let affine_point = match Option::<AffinePoint>::from(
84
+ AffinePoint::from_encoded_point(&encoded_point),
85
+ ) {
86
+ Some(value) => value,
87
+ None => return STATUS_INVALID_KEY,
88
+ };
89
+ let public_point = ProjectivePoint::from(affine_point);
90
+ let signature = match P256Signature::from_slice(signature_bytes) {
91
+ Ok(value) => value,
92
+ Err(_) => return STATUS_INVALID_INPUT,
93
+ };
94
+ let digest = Sha256::digest(data);
95
+ let digest_field = match bits2field::<NistP256>(&digest) {
96
+ Ok(value) => value,
97
+ Err(_) => return STATUS_INVALID_INPUT,
98
+ };
99
+
100
+ match verify_prehashed::<NistP256>(
101
+ &public_point,
102
+ &digest_field,
103
+ &signature,
104
+ ) {
105
+ Ok(()) => STATUS_VALID,
106
+ Err(_) => STATUS_INVALID_AUTHENTICATOR,
107
+ }
108
+ }
@@ -0,0 +1,119 @@
1
+ {
2
+ "version": "pulse.guest-unit.v2",
3
+ "id": "pulse.crypto.es256.rustcrypto-p256.v1",
4
+ "module": "pulse_crypto_es256",
5
+ "owner": "@pulse-compute/crypto",
6
+ "packageVersion": "1.0.0-beta.6",
7
+ "abi": "pulse.crypto.es256-rs256.verify-and-sign.v3",
8
+ "origin": "package-prebuilt",
9
+ "artifact": {
10
+ "file": "prebuilt/es256-verifier.wasm",
11
+ "bytes": 36378,
12
+ "sha256": "b1d09f10fddf7587cb9e87f959fa908457e076e207db078fc101390c70e4aecf"
13
+ },
14
+ "source": {
15
+ "included": true,
16
+ "directory": "source",
17
+ "treeSha256": "581fa765f228bd1a3ab6a40ee3cbb35a9d7a101e2839d32e36ececc94b66a741"
18
+ },
19
+ "toolchain": {
20
+ "kind": "rust-cargo",
21
+ "target": "wasm32v1-none",
22
+ "locked": true,
23
+ "versions": {
24
+ "rustc": "1.97.1 (8bab26f4f 2026-07-14)",
25
+ "cargo": "1.97.1 (c980f4866 2026-06-30)",
26
+ "zig": "0.13.0",
27
+ "binaryen": "129.0.0-nightly.20260428"
28
+ }
29
+ },
30
+ "imports": [
31
+ {
32
+ "module": "env",
33
+ "name": "memory",
34
+ "kind": "memory",
35
+ "type": {
36
+ "minimumPages": 32,
37
+ "maximumPages": 32,
38
+ "shared": false
39
+ }
40
+ }
41
+ ],
42
+ "exports": [
43
+ {
44
+ "name": "pulse_crypto_es256_sign",
45
+ "kind": "function",
46
+ "parameters": [
47
+ "i32",
48
+ "i32"
49
+ ],
50
+ "results": [
51
+ "i32"
52
+ ],
53
+ "role": "abi"
54
+ },
55
+ {
56
+ "name": "pulse_crypto_es256_verify",
57
+ "kind": "function",
58
+ "parameters": [
59
+ "i32",
60
+ "i32"
61
+ ],
62
+ "results": [
63
+ "i32"
64
+ ],
65
+ "role": "abi"
66
+ },
67
+ {
68
+ "name": "pulse_crypto_rs256_sign",
69
+ "kind": "function",
70
+ "parameters": [
71
+ "i32",
72
+ "i32"
73
+ ],
74
+ "results": [
75
+ "i32"
76
+ ],
77
+ "role": "abi"
78
+ },
79
+ {
80
+ "name": "pulse_crypto_rs256_verify",
81
+ "kind": "function",
82
+ "parameters": [
83
+ "i32",
84
+ "i32"
85
+ ],
86
+ "results": [
87
+ "i32"
88
+ ],
89
+ "role": "abi"
90
+ }
91
+ ],
92
+ "memory": {
93
+ "identity": "pulse.guest-memory.invocation-frame.v2",
94
+ "import": "env.memory",
95
+ "owner": "link-stage"
96
+ },
97
+ "start": {
98
+ "policy": "forbidden"
99
+ },
100
+ "features": {
101
+ "baseline": "mvp",
102
+ "allowed": [],
103
+ "required": []
104
+ },
105
+ "provenance": {
106
+ "packageManifest": "../../package.json",
107
+ "lockfile": "source/Cargo.lock",
108
+ "reproducibleSourceIncluded": true,
109
+ "cargoLockSha256": "d5ecc12c9c846468686974aaed841156cc82ab8f876fec4d40b2baa29dff1551",
110
+ "sourceTreeSha256": "581fa765f228bd1a3ab6a40ee3cbb35a9d7a101e2839d32e36ececc94b66a741",
111
+ "reconstructionCommandIdentity": "pulse.crypto.es256-rs256.build.v3",
112
+ "buildScript": "build.cjs",
113
+ "buildScriptSha256": "85d99761b442ec3ea11af6496206f475c14e6c419b5aa89bbedc730d8b61e95d",
114
+ "optimizationPosture": "native-size",
115
+ "binaryenWasmOptSha256": "1304eb38ad315a0d70d8427757f641c110d972468c126af645ef800b09c26e56",
116
+ "g0SourceDecision": "../../../../wasm/.test-results/jwt-g0/es256-source-decision.json",
117
+ "g0SourceDecisionSha256": "58db9e3587ace112a8864c7916f603d8773dce653deafb7d743c0dc1f4d62d63"
118
+ }
119
+ }
@@ -0,0 +1,18 @@
1
+ [build]
2
+ target = "wasm32v1-none"
3
+
4
+ [target.wasm32v1-none]
5
+ rustflags = [
6
+ "-C",
7
+ "link-arg=--import-memory",
8
+ "-C",
9
+ "link-arg=--initial-memory=2097152",
10
+ "-C",
11
+ "link-arg=--max-memory=2097152",
12
+ "-C",
13
+ "link-arg=--stack-first",
14
+ "-C",
15
+ "link-arg=-zstack-size=65536",
16
+ "-C",
17
+ "link-arg=--global-base=131072",
18
+ ]
@@ -0,0 +1,265 @@
1
+ # This file is automatically @generated by Cargo.
2
+ # It is not intended for manual editing.
3
+ version = 4
4
+
5
+ [[package]]
6
+ name = "base16ct"
7
+ version = "0.2.0"
8
+ source = "registry+https://github.com/rust-lang/crates.io-index"
9
+ checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
10
+
11
+ [[package]]
12
+ name = "block-buffer"
13
+ version = "0.10.4"
14
+ source = "registry+https://github.com/rust-lang/crates.io-index"
15
+ checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
16
+ dependencies = [
17
+ "generic-array",
18
+ ]
19
+
20
+ [[package]]
21
+ name = "cfg-if"
22
+ version = "1.0.4"
23
+ source = "registry+https://github.com/rust-lang/crates.io-index"
24
+ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
25
+
26
+ [[package]]
27
+ name = "const-oid"
28
+ version = "0.9.6"
29
+ source = "registry+https://github.com/rust-lang/crates.io-index"
30
+ checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
31
+
32
+ [[package]]
33
+ name = "cpufeatures"
34
+ version = "0.2.17"
35
+ source = "registry+https://github.com/rust-lang/crates.io-index"
36
+ checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
37
+ dependencies = [
38
+ "libc",
39
+ ]
40
+
41
+ [[package]]
42
+ name = "crypto-bigint"
43
+ version = "0.5.5"
44
+ source = "registry+https://github.com/rust-lang/crates.io-index"
45
+ checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76"
46
+ dependencies = [
47
+ "generic-array",
48
+ "rand_core",
49
+ "subtle",
50
+ "zeroize",
51
+ ]
52
+
53
+ [[package]]
54
+ name = "crypto-common"
55
+ version = "0.1.6"
56
+ source = "registry+https://github.com/rust-lang/crates.io-index"
57
+ checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
58
+ dependencies = [
59
+ "generic-array",
60
+ "typenum",
61
+ ]
62
+
63
+ [[package]]
64
+ name = "der"
65
+ version = "0.7.10"
66
+ source = "registry+https://github.com/rust-lang/crates.io-index"
67
+ checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb"
68
+ dependencies = [
69
+ "const-oid",
70
+ "zeroize",
71
+ ]
72
+
73
+ [[package]]
74
+ name = "digest"
75
+ version = "0.10.7"
76
+ source = "registry+https://github.com/rust-lang/crates.io-index"
77
+ checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
78
+ dependencies = [
79
+ "block-buffer",
80
+ "const-oid",
81
+ "crypto-common",
82
+ "subtle",
83
+ ]
84
+
85
+ [[package]]
86
+ name = "ecdsa"
87
+ version = "0.16.9"
88
+ source = "registry+https://github.com/rust-lang/crates.io-index"
89
+ checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca"
90
+ dependencies = [
91
+ "der",
92
+ "digest",
93
+ "elliptic-curve",
94
+ "rfc6979",
95
+ "signature",
96
+ ]
97
+
98
+ [[package]]
99
+ name = "elliptic-curve"
100
+ version = "0.13.8"
101
+ source = "registry+https://github.com/rust-lang/crates.io-index"
102
+ checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47"
103
+ dependencies = [
104
+ "base16ct",
105
+ "crypto-bigint",
106
+ "digest",
107
+ "ff",
108
+ "generic-array",
109
+ "group",
110
+ "rand_core",
111
+ "sec1",
112
+ "subtle",
113
+ "zeroize",
114
+ ]
115
+
116
+ [[package]]
117
+ name = "ff"
118
+ version = "0.13.1"
119
+ source = "registry+https://github.com/rust-lang/crates.io-index"
120
+ checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393"
121
+ dependencies = [
122
+ "rand_core",
123
+ "subtle",
124
+ ]
125
+
126
+ [[package]]
127
+ name = "generic-array"
128
+ version = "0.14.9"
129
+ source = "registry+https://github.com/rust-lang/crates.io-index"
130
+ checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2"
131
+ dependencies = [
132
+ "typenum",
133
+ "version_check",
134
+ "zeroize",
135
+ ]
136
+
137
+ [[package]]
138
+ name = "group"
139
+ version = "0.13.0"
140
+ source = "registry+https://github.com/rust-lang/crates.io-index"
141
+ checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
142
+ dependencies = [
143
+ "ff",
144
+ "rand_core",
145
+ "subtle",
146
+ ]
147
+
148
+ [[package]]
149
+ name = "hmac"
150
+ version = "0.12.1"
151
+ source = "registry+https://github.com/rust-lang/crates.io-index"
152
+ checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
153
+ dependencies = [
154
+ "digest",
155
+ ]
156
+
157
+ [[package]]
158
+ name = "libc"
159
+ version = "0.2.189"
160
+ source = "registry+https://github.com/rust-lang/crates.io-index"
161
+ checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"
162
+
163
+ [[package]]
164
+ name = "p256"
165
+ version = "0.13.2"
166
+ source = "registry+https://github.com/rust-lang/crates.io-index"
167
+ checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b"
168
+ dependencies = [
169
+ "ecdsa",
170
+ "elliptic-curve",
171
+ "primeorder",
172
+ "sha2",
173
+ ]
174
+
175
+ [[package]]
176
+ name = "primeorder"
177
+ version = "0.13.6"
178
+ source = "registry+https://github.com/rust-lang/crates.io-index"
179
+ checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6"
180
+ dependencies = [
181
+ "elliptic-curve",
182
+ ]
183
+
184
+ [[package]]
185
+ name = "pulse-es256-rustcrypto-verifier"
186
+ version = "0.0.0"
187
+ dependencies = [
188
+ "ecdsa",
189
+ "p256",
190
+ "sha2",
191
+ ]
192
+
193
+ [[package]]
194
+ name = "rand_core"
195
+ version = "0.6.4"
196
+ source = "registry+https://github.com/rust-lang/crates.io-index"
197
+ checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
198
+
199
+ [[package]]
200
+ name = "rfc6979"
201
+ version = "0.4.0"
202
+ source = "registry+https://github.com/rust-lang/crates.io-index"
203
+ checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2"
204
+ dependencies = [
205
+ "hmac",
206
+ "subtle",
207
+ ]
208
+
209
+ [[package]]
210
+ name = "sec1"
211
+ version = "0.7.3"
212
+ source = "registry+https://github.com/rust-lang/crates.io-index"
213
+ checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc"
214
+ dependencies = [
215
+ "base16ct",
216
+ "der",
217
+ "generic-array",
218
+ "subtle",
219
+ "zeroize",
220
+ ]
221
+
222
+ [[package]]
223
+ name = "sha2"
224
+ version = "0.10.9"
225
+ source = "registry+https://github.com/rust-lang/crates.io-index"
226
+ checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
227
+ dependencies = [
228
+ "cfg-if",
229
+ "cpufeatures",
230
+ "digest",
231
+ ]
232
+
233
+ [[package]]
234
+ name = "signature"
235
+ version = "2.2.0"
236
+ source = "registry+https://github.com/rust-lang/crates.io-index"
237
+ checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
238
+ dependencies = [
239
+ "digest",
240
+ "rand_core",
241
+ ]
242
+
243
+ [[package]]
244
+ name = "subtle"
245
+ version = "2.6.1"
246
+ source = "registry+https://github.com/rust-lang/crates.io-index"
247
+ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
248
+
249
+ [[package]]
250
+ name = "typenum"
251
+ version = "1.20.1"
252
+ source = "registry+https://github.com/rust-lang/crates.io-index"
253
+ checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20"
254
+
255
+ [[package]]
256
+ name = "version_check"
257
+ version = "0.9.5"
258
+ source = "registry+https://github.com/rust-lang/crates.io-index"
259
+ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
260
+
261
+ [[package]]
262
+ name = "zeroize"
263
+ version = "1.9.0"
264
+ source = "registry+https://github.com/rust-lang/crates.io-index"
265
+ checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e"
@@ -0,0 +1,23 @@
1
+ [package]
2
+ name = "pulse-es256-rustcrypto-verifier"
3
+ version = "0.0.0"
4
+ edition = "2021"
5
+ publish = false
6
+ license = "Apache-2.0"
7
+
8
+ [lib]
9
+ crate-type = ["cdylib"]
10
+
11
+ [dependencies]
12
+ ecdsa = { version = "=0.16.9", default-features = false, features = ["arithmetic", "hazmat"] }
13
+ p256 = { version = "=0.13.2", default-features = false, features = ["arithmetic", "ecdsa"] }
14
+ sha2 = { version = "=0.10.9", default-features = false }
15
+
16
+ [profile.release]
17
+ codegen-units = 1
18
+ debug = false
19
+ incremental = false
20
+ lto = true
21
+ opt-level = "z"
22
+ panic = "abort"
23
+ strip = "symbols"
@@ -0,0 +1,26 @@
1
+ # Pulse ES256 guest source
2
+
3
+ This Crypto-owned Rust unit implements ES256 verification and deterministic
4
+ RFC6979 signing with the pinned RustCrypto P-256 implementation. It imports
5
+ only fixed `env.memory`; the guest-link stage admits the exact reviewed binary,
6
+ source, lockfile, build identity, and two scalar exports.
7
+
8
+ Verification retains the existing invocation-frame v2 contract and 64-byte
9
+ `x || y` public key. Signing uses the same checked 16,640-byte envelope with
10
+ 96-byte `x || y || d` key material and a disjoint, writable 64-byte JOSE `r || s`
11
+ output span. The scalar must be valid and match the supplied public point.
12
+ Each exported function validates its own key width and never changes operation
13
+ based on untrusted flags. Signing adds no allocator, host callback, random
14
+ source, key generation, JWK/PEM parsing, or provider authority.
15
+
16
+ The caller clears the invocation frame and borrowed Rust stack after capturing
17
+ the signing result. SigningKey also zeroizes its owned scalar on drop. Private
18
+ JWK decoding belongs to JWT; secrets and request lifetime belong to providers.
19
+
20
+ The earlier G0 source-selection hash records the foundation, not signing
21
+ acceptance. Signing acceptance requires the current guest and JWT signing
22
+ fixtures. Historical seal reports do not validate this revised artifact.
23
+
24
+ Ordinary application builds consume the checked-in prebuilt. Only maintainers
25
+ run `node ../build.cjs --write` with the pinned toolchain; the script rebuilds
26
+ twice and requires identical raw and optimized bytes.
@@ -0,0 +1,21 @@
1
+ Copyright (c) 2016 Thomas Pornin <pornin@bolet.org>
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
18
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
19
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,49 @@
1
+ {
2
+ "url": "https://www.bearssl.org/bearssl-0.6.tar.gz",
3
+ "version": "0.6",
4
+ "archiveSha256": "6705bba1714961b41a728dfc5debbe348d2966c117649392f8c8139efc83ff14",
5
+ "files": {
6
+ "inc/bearssl_ssl.h": "52ea66d52eac903661865d99a05b5621e743a4acb227d7faf154bb5ce1ea48f3",
7
+ "inc/bearssl_rsa.h": "1d9538cb78269cd02ca9ec118f67930ba88730eece4427f973fda2cb7122f9ff",
8
+ "inc/bearssl_hmac.h": "a40c14a7a71d5b4fa21f8485d7ad3975d3a37b9cd8b9f72cd0fa032af8105614",
9
+ "inc/bearssl_prf.h": "0162e674d6c49425bfa0e8e9c79b3d850530e7928288930284fb7ac940a12b17",
10
+ "inc/bearssl_ec.h": "3ee566b317361828cce70a96ce22d34d865b8dea73e65de55a6f511076bab766",
11
+ "inc/bearssl_aead.h": "9d90afbc65535335517c028817ac0704af6b58971f2c262a65eb26e0b4099201",
12
+ "inc/bearssl.h": "5e73cb64005a5efd5082932bb9b7a3301a748969841c45d7f61123006e9ca5fe",
13
+ "inc/bearssl_x509.h": "92a1674630209ee2a35d078990f7d8a1bf98753b4ec97db9aa9c288f7c294ab1",
14
+ "inc/bearssl_pem.h": "ef36260e8568e5927178e92c2aab849be71bc07414c01baeb1d12a3a51a82c3e",
15
+ "inc/bearssl_rand.h": "968335e8a2957e5bf64cb0b6b1f916e53bc330e8c66d5f2d2f658f415a56dd44",
16
+ "inc/bearssl_kdf.h": "dee68113a97743febd0fee22d545c9548d81a6448e5b28311fa8ce384ee48bd8",
17
+ "inc/bearssl_hash.h": "adfe3039fe48962c7fd74a1031f6d9dde951fb12a6acdae65a39f4d8537d2ef9",
18
+ "inc/bearssl_block.h": "a00b4a48c42c824f2ec4ee775672df9cec86ad455b08cb8ae7eb8c89e63d082a",
19
+ "LICENSE.txt": "771bf18c8633ea69ec9b07d2e604c4b99b7bef41b0f5ce6385d24df4448f61ca",
20
+ "src/inner.h": "05a4c5b30599a00deda2648fbb842c07eb783bc5a62589ba90c3fada36ad732a",
21
+ "src/config.h": "785d0cea25a7bbcb2b6d32e096072ac00b12f4d0b4819aa95ca28816a0e484d0",
22
+ "src/int/i31_ninv31.c": "6e8cb090af5052252253597338b7b1c3b5f1c34a31b7b9668cfb512b9c5854eb",
23
+ "src/int/i31_fmont.c": "2d327ab832882c41ebd7be305883e48d7b7c1ddc25a84ae1894914ec7429201d",
24
+ "src/int/i31_decode.c": "93690aeb61b5986c2bed451e6fb9dadd893b7caf132d21dd10d980ae6c47eb92",
25
+ "src/int/i31_reduce.c": "7dab79ac842ef8fbf45441a1453e2661049b2166dd76e220dffade5621cdea27",
26
+ "src/int/i31_modpow.c": "484c22d19397cda93be1b349683a3128e5f51fb8fb408ddc6a7bbdf96ee53993",
27
+ "src/int/i31_decred.c": "99ccf4b5c0d7c88ae4f233801ba6e4ce7363bf58d8d3eed0f4693f0a70dacb4a",
28
+ "src/int/i31_moddiv.c": "e930db501f7c400ed036e2e9054216afc8c4d4bb0701563e97520f96dea3131b",
29
+ "src/int/i31_muladd.c": "243f4587f7eb443e2844d7e3ccd7b5177187a7c4d1707344d085599ba28fe192",
30
+ "src/int/i31_tmont.c": "a16cd1f0b8a1658b6db2b4ea3d6423dab0da9294ce2a146fa7bc46de5dd84798",
31
+ "src/int/i31_decmod.c": "654e982c3fefbd874effb816646159f08340291c4805df9a28aba29f1c8eb12c",
32
+ "src/int/i31_montmul.c": "c2a8a366679fc13ce77e207f11f627d3f1e6cae2b57610215774eb5c5058064e",
33
+ "src/int/i31_sub.c": "08e82e7fbb042081b6b37e882f05e4611e8c9502f0acb19234520a6f8b8e22c8",
34
+ "src/int/i31_bitlen.c": "c0bb679941783edf36ef941e11258ffa9261255ec1095e916f3b43c87b28a044",
35
+ "src/int/i31_encode.c": "4235d5bb38695e8296603682c84a1b1959fd3e6a44fe9d26f6c1e320c110f923",
36
+ "src/int/i31_rshift.c": "0e9b7fbbd45c6ed7d4647cbd84afa9a8ff51d3c3b7033e8c103de630c17b1ef0",
37
+ "src/int/i31_add.c": "d8b364d686757e2ea87e900930f84cc1ed6991e67ee454c3c4edbede745762dc",
38
+ "src/int/i31_mulacc.c": "f08baed7329c5fd66d5c2272ea977e697c8ea16daf8e08c6d85cd94ed9d43171",
39
+ "src/int/i31_modpow2.c": "9f1996dc8e0fbeee66d9535a44d4f89836848206cac44cee01db52191e79c008",
40
+ "src/int/i31_iszero.c": "a479041e88dfc813e1560442b31c4e6a4b1f40ce1c0c50335a52dfd5205c47f2",
41
+ "src/rsa/rsa_i31_priv.c": "f4755814fc081deaaba6ba84000cd04558018da71e718df438c85b65572a595a",
42
+ "src/rsa/rsa_i31_pub.c": "e6514c5c4eba7068a7e6655717d18a20ac8f19524501120ac117d8a859542631",
43
+ "src/rsa/rsa_pkcs1_sig_pad.c": "0b1ea86930f5454def4370667a30deb31f577e13287e85a95d5c483290b98eb6",
44
+ "src/codec/ccopy.c": "5163871149faa35a4ba026a915743065238fc94cc4312f02867a4f50ff2631f8",
45
+ "src/codec/dec32be.c": "ebd7bf469655a9e4de4b3d1d01d4c54f19117def3e3b918242629c150979bd9c",
46
+ "src/codec/enc32be.c": "8090b5bd6959586e769814e9d3698ac1c454e31ee4dfd5a2b2eb95a805063ae4",
47
+ "src/int/i32_div32.c": "f0ade1999953e879c5cdb2ae66fd00438d09cab3099ed1143288cbeaaad40295"
48
+ }
49
+ }