@joclaim/attestor-core 0.2.0 → 0.2.3
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 +21 -15
- package/lib/avs/abis/avsDirectoryABI.d.ts +60 -0
- package/lib/avs/abis/avsDirectoryABI.js +340 -0
- package/lib/avs/abis/delegationABI.d.ts +126 -0
- package/lib/avs/abis/delegationABI.js +1 -0
- package/lib/avs/abis/registryABI.d.ts +136 -0
- package/lib/avs/abis/registryABI.js +725 -0
- package/lib/avs/client/create-claim-on-avs.d.ts +12 -0
- package/lib/avs/client/create-claim-on-avs.js +138 -0
- package/lib/avs/config.d.ts +7 -0
- package/lib/avs/config.js +20 -0
- package/lib/avs/contracts/ReclaimServiceManager.d.ts +697 -0
- package/lib/avs/contracts/ReclaimServiceManager.js +1 -0
- package/lib/avs/contracts/common.d.ts +21 -0
- package/lib/avs/contracts/common.js +1 -0
- package/lib/avs/contracts/factories/ReclaimServiceManager__factory.d.ts +888 -0
- package/lib/avs/contracts/factories/ReclaimServiceManager__factory.js +1169 -0
- package/lib/avs/contracts/factories/index.d.ts +1 -0
- package/{src/avs/contracts/factories/index.ts → lib/avs/contracts/factories/index.js} +1 -1
- package/{src/avs/contracts/index.ts → lib/avs/contracts/index.d.ts} +0 -3
- package/lib/avs/contracts/index.js +2 -0
- package/lib/avs/types/index.d.ts +55 -0
- package/lib/avs/types/index.js +1 -0
- package/lib/avs/utils/contracts.d.ts +21 -0
- package/lib/avs/utils/contracts.js +33 -0
- package/lib/avs/utils/register.d.ts +27 -0
- package/lib/avs/utils/register.js +78 -0
- package/lib/avs/utils/tasks.d.ts +22 -0
- package/lib/avs/utils/tasks.js +40 -0
- package/lib/client/create-claim.d.ts +5 -0
- package/lib/client/create-claim.js +437 -0
- package/lib/client/index.d.ts +3 -0
- package/lib/client/index.js +3 -0
- package/lib/client/tunnels/make-rpc-tcp-tunnel.d.ts +16 -0
- package/lib/client/tunnels/make-rpc-tcp-tunnel.js +51 -0
- package/lib/client/tunnels/make-rpc-tls-tunnel.d.ts +26 -0
- package/lib/client/tunnels/make-rpc-tls-tunnel.js +131 -0
- package/lib/client/utils/attestor-pool.d.ts +8 -0
- package/lib/client/utils/attestor-pool.js +25 -0
- package/lib/client/utils/client-socket.d.ts +11 -0
- package/lib/client/utils/client-socket.js +98 -0
- package/lib/client/utils/message-handler.d.ts +4 -0
- package/lib/client/utils/message-handler.js +87 -0
- package/lib/config/index.d.ts +30 -0
- package/lib/config/index.js +43 -0
- package/lib/external-rpc/benchmark.d.ts +1 -0
- package/lib/external-rpc/benchmark.js +69 -0
- package/lib/external-rpc/event-bus.d.ts +7 -0
- package/lib/external-rpc/event-bus.js +14 -0
- package/lib/external-rpc/handle-incoming-msg.d.ts +2 -0
- package/lib/external-rpc/handle-incoming-msg.js +233 -0
- package/lib/external-rpc/index.d.ts +3 -0
- package/lib/external-rpc/index.js +3 -0
- package/lib/external-rpc/jsc-polyfills/1.d.ts +14 -0
- package/lib/external-rpc/jsc-polyfills/1.js +82 -0
- package/lib/external-rpc/jsc-polyfills/2.d.ts +1 -0
- package/lib/external-rpc/jsc-polyfills/2.js +20 -0
- package/lib/external-rpc/jsc-polyfills/event.d.ts +10 -0
- package/lib/external-rpc/jsc-polyfills/event.js +14 -0
- package/lib/external-rpc/jsc-polyfills/index.d.ts +2 -0
- package/lib/external-rpc/jsc-polyfills/index.js +2 -0
- package/lib/external-rpc/jsc-polyfills/ws.d.ts +21 -0
- package/lib/external-rpc/jsc-polyfills/ws.js +81 -0
- package/lib/external-rpc/setup-browser.d.ts +6 -0
- package/lib/external-rpc/setup-browser.js +33 -0
- package/lib/external-rpc/setup-jsc.d.ts +24 -0
- package/lib/external-rpc/setup-jsc.js +22 -0
- package/lib/external-rpc/types.d.ts +213 -0
- package/lib/external-rpc/types.js +1 -0
- package/lib/external-rpc/utils.d.ts +20 -0
- package/lib/external-rpc/utils.js +100 -0
- package/lib/external-rpc/zk.d.ts +14 -0
- package/lib/external-rpc/zk.js +63 -0
- package/lib/index.d.ts +9 -0
- package/lib/index.js +9 -0
- package/lib/mechain/abis/governanceABI.d.ts +50 -0
- package/lib/mechain/abis/governanceABI.js +458 -0
- package/lib/mechain/abis/taskABI.d.ts +157 -0
- package/lib/mechain/abis/taskABI.js +509 -0
- package/lib/mechain/client/create-claim-on-mechain.d.ts +10 -0
- package/lib/mechain/client/create-claim-on-mechain.js +28 -0
- package/lib/mechain/client/index.d.ts +1 -0
- package/lib/mechain/client/index.js +1 -0
- package/lib/mechain/constants/index.d.ts +3 -0
- package/{src/mechain/constants/index.ts → lib/mechain/constants/index.js} +3 -5
- package/lib/mechain/index.d.ts +2 -0
- package/lib/mechain/index.js +2 -0
- package/lib/mechain/types/index.d.ts +23 -0
- package/lib/mechain/types/index.js +1 -0
- package/lib/proto/api.d.ts +633 -0
- package/lib/proto/api.js +4258 -0
- package/lib/proto/tee-bundle.d.ts +135 -0
- package/lib/proto/tee-bundle.js +1161 -0
- package/lib/providers/http/index.d.ts +18 -0
- package/lib/providers/http/index.js +658 -0
- package/lib/providers/http/patch-parse5-tree.d.ts +6 -0
- package/lib/providers/http/patch-parse5-tree.js +33 -0
- package/lib/providers/http/utils.d.ts +77 -0
- package/lib/providers/http/utils.js +324 -0
- package/lib/providers/index.d.ts +4 -0
- package/lib/providers/index.js +4 -0
- package/lib/scripts/build-browser.d.ts +1 -0
- package/lib/scripts/build-browser.js +37 -0
- package/lib/scripts/build-jsc.d.ts +1 -0
- package/lib/scripts/build-jsc.js +49 -0
- package/lib/scripts/check-avs-registration.d.ts +1 -0
- package/lib/scripts/check-avs-registration.js +26 -0
- package/lib/scripts/fallbacks/crypto.d.ts +1 -0
- package/lib/scripts/fallbacks/crypto.js +1 -0
- package/lib/scripts/fallbacks/empty.d.ts +3 -0
- package/lib/scripts/fallbacks/empty.js +1 -0
- package/lib/scripts/fallbacks/re2.d.ts +1 -0
- package/lib/scripts/fallbacks/re2.js +4 -0
- package/lib/scripts/fallbacks/snarkjs.d.ts +1 -0
- package/lib/scripts/fallbacks/snarkjs.js +1 -0
- package/lib/scripts/generate-provider-types.d.ts +5 -0
- package/lib/scripts/generate-provider-types.js +78 -0
- package/lib/scripts/generate-receipt.d.ts +9 -0
- package/lib/scripts/generate-receipt.js +90 -0
- package/lib/scripts/generate-toprf-keys.d.ts +1 -0
- package/lib/scripts/generate-toprf-keys.js +20 -0
- package/lib/scripts/jsc-cli-rpc.d.ts +1 -0
- package/lib/scripts/jsc-cli-rpc.js +37 -0
- package/lib/scripts/register-avs-operator.d.ts +1 -0
- package/lib/scripts/register-avs-operator.js +4 -0
- package/lib/scripts/start-server.d.ts +1 -0
- package/lib/scripts/start-server.js +13 -0
- package/lib/scripts/update-avs-metadata.d.ts +1 -0
- package/lib/scripts/update-avs-metadata.js +19 -0
- package/lib/scripts/utils.d.ts +1 -0
- package/lib/scripts/utils.js +7 -0
- package/lib/scripts/whitelist-operator.d.ts +1 -0
- package/lib/scripts/whitelist-operator.js +15 -0
- package/lib/server/create-server.d.ts +7 -0
- package/lib/server/create-server.js +122 -0
- package/lib/server/handlers/claimTeeBundle.d.ts +6 -0
- package/lib/server/handlers/claimTeeBundle.js +206 -0
- package/lib/server/handlers/claimTunnel.d.ts +2 -0
- package/lib/server/handlers/claimTunnel.js +73 -0
- package/lib/server/handlers/completeClaimOnChain.d.ts +2 -0
- package/lib/server/handlers/completeClaimOnChain.js +22 -0
- package/lib/server/handlers/createClaimOnChain.d.ts +2 -0
- package/lib/server/handlers/createClaimOnChain.js +26 -0
- package/lib/server/handlers/createTaskOnMechain.d.ts +2 -0
- package/lib/server/handlers/createTaskOnMechain.js +47 -0
- package/lib/server/handlers/createTunnel.d.ts +2 -0
- package/lib/server/handlers/createTunnel.js +93 -0
- package/lib/server/handlers/disconnectTunnel.d.ts +2 -0
- package/lib/server/handlers/disconnectTunnel.js +5 -0
- package/lib/server/handlers/fetchCertificateBytes.d.ts +2 -0
- package/lib/server/handlers/fetchCertificateBytes.js +41 -0
- package/lib/server/handlers/index.d.ts +4 -0
- package/lib/server/handlers/index.js +22 -0
- package/lib/server/handlers/init.d.ts +2 -0
- package/lib/server/handlers/init.js +30 -0
- package/lib/server/handlers/toprf.d.ts +2 -0
- package/lib/server/handlers/toprf.js +16 -0
- package/lib/server/index.d.ts +4 -0
- package/lib/server/index.js +4 -0
- package/lib/server/provider-api.d.ts +9 -0
- package/lib/server/provider-api.js +98 -0
- package/lib/server/provider-store.d.ts +53 -0
- package/lib/server/provider-store.js +80 -0
- package/lib/server/session-api.d.ts +9 -0
- package/lib/server/session-api.js +95 -0
- package/lib/server/session-store.d.ts +14 -0
- package/lib/server/session-store.js +36 -0
- package/lib/server/socket.d.ts +13 -0
- package/lib/server/socket.js +109 -0
- package/lib/server/tunnels/make-tcp-tunnel.d.ts +22 -0
- package/lib/server/tunnels/make-tcp-tunnel.js +177 -0
- package/lib/server/utils/apm.d.ts +11 -0
- package/lib/server/utils/apm.js +36 -0
- package/lib/server/utils/assert-valid-claim-request.d.ts +31 -0
- package/lib/server/utils/assert-valid-claim-request.js +229 -0
- package/lib/server/utils/config-env.d.ts +1 -0
- package/lib/server/utils/config-env.js +4 -0
- package/lib/server/utils/dns.d.ts +1 -0
- package/lib/server/utils/dns.js +18 -0
- package/lib/server/utils/gcp-attestation.d.ts +17 -0
- package/lib/server/utils/gcp-attestation.js +289 -0
- package/lib/server/utils/generics.d.ts +22 -0
- package/lib/server/utils/generics.js +51 -0
- package/lib/server/utils/iso.d.ts +1 -0
- package/lib/server/utils/iso.js +256 -0
- package/lib/server/utils/keep-alive.d.ts +7 -0
- package/lib/server/utils/keep-alive.js +38 -0
- package/lib/server/utils/nitro-attestation.d.ts +33 -0
- package/lib/server/utils/nitro-attestation.js +325 -0
- package/lib/server/utils/process-handshake.d.ts +13 -0
- package/lib/server/utils/process-handshake.js +214 -0
- package/lib/server/utils/proxy-session.d.ts +1 -0
- package/lib/server/utils/proxy-session.js +6 -0
- package/lib/server/utils/tee-oprf-verification.d.ts +22 -0
- package/lib/server/utils/tee-oprf-verification.js +160 -0
- package/lib/server/utils/tee-transcript-reconstruction.d.ts +24 -0
- package/lib/server/utils/tee-transcript-reconstruction.js +187 -0
- package/lib/server/utils/tee-verification.d.ts +27 -0
- package/lib/server/utils/tee-verification.js +365 -0
- package/lib/server/utils/validation.d.ts +2 -0
- package/lib/server/utils/validation.js +38 -0
- package/lib/types/bgp.d.ts +11 -0
- package/lib/types/bgp.js +1 -0
- package/lib/types/claims.d.ts +73 -0
- package/lib/types/claims.js +1 -0
- package/lib/types/client.d.ts +163 -0
- package/lib/types/client.js +1 -0
- package/lib/types/general.d.ts +54 -0
- package/lib/types/general.js +1 -0
- package/lib/types/handlers.d.ts +10 -0
- package/lib/types/handlers.js +1 -0
- package/lib/types/index.d.ts +10 -0
- package/lib/types/index.js +10 -0
- package/lib/types/providers.d.ts +161 -0
- package/lib/types/providers.gen.d.ts +443 -0
- package/lib/types/providers.gen.js +10 -0
- package/lib/types/providers.js +1 -0
- package/lib/types/rpc.d.ts +35 -0
- package/lib/types/rpc.js +1 -0
- package/lib/types/signatures.d.ts +28 -0
- package/lib/types/signatures.js +1 -0
- package/lib/types/tunnel.d.ts +18 -0
- package/lib/types/tunnel.js +1 -0
- package/lib/types/zk.d.ts +28 -0
- package/lib/types/zk.js +1 -0
- package/lib/utils/auth.d.ts +8 -0
- package/lib/utils/auth.js +59 -0
- package/lib/utils/b64-json.d.ts +2 -0
- package/lib/utils/b64-json.js +17 -0
- package/lib/utils/bgp-listener.d.ts +7 -0
- package/lib/utils/bgp-listener.js +119 -0
- package/lib/utils/claims.d.ts +33 -0
- package/lib/utils/claims.js +101 -0
- package/lib/utils/env.d.ts +3 -0
- package/lib/utils/env.js +15 -0
- package/lib/utils/error.d.ts +26 -0
- package/lib/utils/error.js +50 -0
- package/lib/utils/generics.d.ts +114 -0
- package/lib/utils/generics.js +317 -0
- package/lib/utils/http-parser.d.ts +59 -0
- package/lib/utils/http-parser.js +246 -0
- package/lib/utils/index.d.ts +13 -0
- package/lib/utils/index.js +13 -0
- package/lib/utils/logger.d.ts +13 -0
- package/lib/utils/logger.js +91 -0
- package/lib/utils/prepare-packets.d.ts +16 -0
- package/lib/utils/prepare-packets.js +62 -0
- package/lib/utils/redactions.d.ts +62 -0
- package/lib/utils/redactions.js +148 -0
- package/lib/utils/retries.d.ts +12 -0
- package/lib/utils/retries.js +24 -0
- package/lib/utils/signatures/eth.d.ts +2 -0
- package/lib/utils/signatures/eth.js +29 -0
- package/lib/utils/signatures/index.d.ts +5 -0
- package/lib/utils/signatures/index.js +7 -0
- package/lib/utils/socket-base.d.ts +23 -0
- package/lib/utils/socket-base.js +90 -0
- package/lib/utils/tls.d.ts +2 -0
- package/{src/utils/tls.ts → lib/utils/tls.js} +28 -35
- package/lib/utils/ws.d.ts +7 -0
- package/lib/utils/ws.js +22 -0
- package/lib/utils/zk.d.ts +70 -0
- package/lib/utils/zk.js +572 -0
- package/package.json +19 -12
- package/src/avs/abis/avsDirectoryABI.ts +0 -340
- package/src/avs/abis/delegationABI.ts +0 -1
- package/src/avs/abis/registryABI.ts +0 -725
- package/src/avs/client/create-claim-on-avs.ts +0 -206
- package/src/avs/config.ts +0 -25
- package/src/avs/contracts/ReclaimServiceManager.ts +0 -1457
- package/src/avs/contracts/common.ts +0 -44
- package/src/avs/contracts/factories/ReclaimServiceManager__factory.ts +0 -1213
- package/src/avs/tests/test.operator.ts +0 -413
- package/src/avs/tests/utils.ts +0 -51
- package/src/avs/types/index.ts +0 -60
- package/src/avs/utils/contracts.ts +0 -66
- package/src/avs/utils/register.ts +0 -125
- package/src/avs/utils/tasks.ts +0 -76
- package/src/client/create-claim.ts +0 -626
- package/src/client/index.ts +0 -3
- package/src/client/tunnels/make-rpc-tcp-tunnel.ts +0 -78
- package/src/client/tunnels/make-rpc-tls-tunnel.ts +0 -172
- package/src/client/utils/attestor-pool.ts +0 -35
- package/src/client/utils/client-socket.ts +0 -160
- package/src/client/utils/message-handler.ts +0 -116
- package/src/config/index.ts +0 -65
- package/src/external-rpc/benchmark.ts +0 -102
- package/src/external-rpc/event-bus.ts +0 -19
- package/src/external-rpc/global.d.ts +0 -20
- package/src/external-rpc/handle-incoming-msg.ts +0 -308
- package/src/external-rpc/index.ts +0 -3
- package/src/external-rpc/jsc-polyfills/1.ts +0 -117
- package/src/external-rpc/jsc-polyfills/2.ts +0 -24
- package/src/external-rpc/jsc-polyfills/event.ts +0 -16
- package/src/external-rpc/jsc-polyfills/index.ts +0 -2
- package/src/external-rpc/jsc-polyfills/ws.ts +0 -105
- package/src/external-rpc/setup-browser.ts +0 -42
- package/src/external-rpc/setup-jsc.ts +0 -48
- package/src/external-rpc/types.ts +0 -289
- package/src/external-rpc/utils.ts +0 -126
- package/src/external-rpc/zk.ts +0 -79
- package/src/index.ts +0 -9
- package/src/mechain/abis/governanceABI.ts +0 -458
- package/src/mechain/abis/taskABI.ts +0 -509
- package/src/mechain/client/create-claim-on-mechain.ts +0 -52
- package/src/mechain/client/index.ts +0 -1
- package/src/mechain/index.ts +0 -2
- package/src/mechain/types/index.ts +0 -29
- package/src/proto/api.ts +0 -5285
- package/src/proto/tee-bundle.ts +0 -1413
- package/src/providers/http/index.ts +0 -873
- package/src/providers/http/patch-parse5-tree.ts +0 -49
- package/src/providers/http/utils.ts +0 -439
- package/src/providers/index.ts +0 -8
- package/src/scripts/build-browser.sh +0 -9
- package/src/scripts/build-browser.ts +0 -40
- package/src/scripts/build-jsc.ts +0 -55
- package/src/scripts/check-avs-registration.ts +0 -38
- package/src/scripts/contract-data-gen.sh +0 -8
- package/src/scripts/fallbacks/crypto.ts +0 -1
- package/src/scripts/fallbacks/empty.ts +0 -2
- package/src/scripts/fallbacks/re2.ts +0 -5
- package/src/scripts/fallbacks/snarkjs.ts +0 -5
- package/src/scripts/generate-certs.sh +0 -11
- package/src/scripts/generate-proto.sh +0 -5
- package/src/scripts/generate-provider-types.ts +0 -121
- package/src/scripts/generate-receipt.ts +0 -138
- package/src/scripts/generate-toprf-keys.ts +0 -30
- package/src/scripts/jsc-cli-rpc.ts +0 -48
- package/src/scripts/register-avs-operator.ts +0 -5
- package/src/scripts/start-server.ts +0 -17
- package/src/scripts/update-avs-metadata.ts +0 -26
- package/src/scripts/utils.ts +0 -8
- package/src/scripts/whitelist-operator.ts +0 -22
- package/src/server/create-server.ts +0 -169
- package/src/server/handlers/claimTeeBundle.ts +0 -308
- package/src/server/handlers/claimTunnel.ts +0 -106
- package/src/server/handlers/completeClaimOnChain.ts +0 -36
- package/src/server/handlers/createClaimOnChain.ts +0 -39
- package/src/server/handlers/createTaskOnMechain.ts +0 -80
- package/src/server/handlers/createTunnel.ts +0 -128
- package/src/server/handlers/disconnectTunnel.ts +0 -11
- package/src/server/handlers/fetchCertificateBytes.ts +0 -66
- package/src/server/handlers/index.ts +0 -24
- package/src/server/handlers/init.ts +0 -46
- package/src/server/handlers/toprf.ts +0 -25
- package/src/server/index.ts +0 -4
- package/src/server/provider-api.ts +0 -118
- package/src/server/provider-store.ts +0 -117
- package/src/server/session-api.ts +0 -115
- package/src/server/session-store.ts +0 -60
- package/src/server/socket.ts +0 -156
- package/src/server/tunnels/make-tcp-tunnel.ts +0 -275
- package/src/server/utils/apm.ts +0 -49
- package/src/server/utils/assert-valid-claim-request.ts +0 -375
- package/src/server/utils/config-env.ts +0 -6
- package/src/server/utils/dns.ts +0 -25
- package/src/server/utils/gcp-attestation.ts +0 -415
- package/src/server/utils/generics.ts +0 -68
- package/src/server/utils/iso.ts +0 -258
- package/src/server/utils/keep-alive.ts +0 -50
- package/src/server/utils/nitro-attestation.ts +0 -396
- package/src/server/utils/process-handshake.ts +0 -311
- package/src/server/utils/proxy-session.ts +0 -6
- package/src/server/utils/tee-oprf-verification.ts +0 -231
- package/src/server/utils/tee-transcript-reconstruction.ts +0 -254
- package/src/server/utils/tee-verification.ts +0 -513
- package/src/server/utils/validation.ts +0 -57
- package/src/tests/auth.test.ts +0 -105
- package/src/tests/bgp-listener.test.ts +0 -193
- package/src/tests/claim-creation.test.ts +0 -415
- package/src/tests/describe-with-server.ts +0 -94
- package/src/tests/gcp-attestation.test.ts +0 -206
- package/src/tests/http-parser.test.ts +0 -135
- package/src/tests/http-provider-utils.test.ts +0 -3306
- package/src/tests/http-provider.test.ts +0 -125
- package/src/tests/jsc.test_mac.ts +0 -296
- package/src/tests/mock-provider-server.ts +0 -106
- package/src/tests/mocks.ts +0 -25
- package/src/tests/proof_bundle.bin +0 -0
- package/src/tests/rpc-communication.test.ts +0 -115
- package/src/tests/rpc-tunnel.test.ts +0 -239
- package/src/tests/signatures.test.ts +0 -37
- package/src/tests/tcp-tunnel.test.ts +0 -154
- package/src/tests/tee-bundle.test.ts +0 -321
- package/src/tests/tee-signatures.test.ts +0 -81
- package/src/tests/utils.ts +0 -108
- package/src/tests/verification_bundle.pb +0 -0
- package/src/tests/verification_bundle_tee.pb +0 -0
- package/src/tests/zk.test.ts +0 -453
- package/src/types/bgp.ts +0 -17
- package/src/types/claims.ts +0 -79
- package/src/types/client.ts +0 -205
- package/src/types/general.ts +0 -61
- package/src/types/handlers.ts +0 -16
- package/src/types/index.ts +0 -10
- package/src/types/providers.gen.ts +0 -135
- package/src/types/providers.ts +0 -203
- package/src/types/rpc.ts +0 -46
- package/src/types/signatures.ts +0 -29
- package/src/types/tunnel.ts +0 -25
- package/src/types/zk.ts +0 -31
- package/src/utils/auth.ts +0 -92
- package/src/utils/b64-json.ts +0 -25
- package/src/utils/bgp-listener.ts +0 -159
- package/src/utils/claims.ts +0 -132
- package/src/utils/env.ts +0 -21
- package/src/utils/error.ts +0 -76
- package/src/utils/generics.ts +0 -429
- package/src/utils/http-parser.ts +0 -312
- package/src/utils/index.ts +0 -13
- package/src/utils/logger.ts +0 -114
- package/src/utils/prepare-packets.ts +0 -98
- package/src/utils/redactions.ts +0 -203
- package/src/utils/retries.ts +0 -41
- package/src/utils/signatures/eth.ts +0 -35
- package/src/utils/signatures/index.ts +0 -11
- package/src/utils/socket-base.ts +0 -132
- package/src/utils/ws.ts +0 -30
- package/src/utils/zk.ts +0 -908
package/src/server/utils/iso.ts
DELETED
|
@@ -1,258 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
const countries = {
|
|
3
|
-
AF: 'Afghanistan',
|
|
4
|
-
AX: 'Åland Islands',
|
|
5
|
-
AL: 'Albania',
|
|
6
|
-
DZ: 'Algeria',
|
|
7
|
-
AS: 'American Samoa',
|
|
8
|
-
AD: 'Andorra',
|
|
9
|
-
AO: 'Angola',
|
|
10
|
-
AI: 'Anguilla',
|
|
11
|
-
AQ: 'Antarctica',
|
|
12
|
-
AG: 'Antigua and Barbuda',
|
|
13
|
-
AR: 'Argentina',
|
|
14
|
-
AM: 'Armenia',
|
|
15
|
-
AW: 'Aruba',
|
|
16
|
-
AU: 'Australia',
|
|
17
|
-
AT: 'Austria',
|
|
18
|
-
AZ: 'Azerbaijan',
|
|
19
|
-
BS: 'Bahamas',
|
|
20
|
-
BH: 'Bahrain',
|
|
21
|
-
BD: 'Bangladesh',
|
|
22
|
-
BB: 'Barbados',
|
|
23
|
-
BY: 'Belarus',
|
|
24
|
-
BE: 'Belgium',
|
|
25
|
-
BZ: 'Belize',
|
|
26
|
-
BJ: 'Benin',
|
|
27
|
-
BM: 'Bermuda',
|
|
28
|
-
BT: 'Bhutan',
|
|
29
|
-
BO: 'Bolivia, Plurinational State of',
|
|
30
|
-
BQ: 'Bonaire, Sint Eustatius and Saba',
|
|
31
|
-
BA: 'Bosnia and Herzegovina',
|
|
32
|
-
BW: 'Botswana',
|
|
33
|
-
BV: 'Bouvet Island',
|
|
34
|
-
BR: 'Brazil',
|
|
35
|
-
IO: 'British Indian Ocean Territory',
|
|
36
|
-
BN: 'Brunei Darussalam',
|
|
37
|
-
BG: 'Bulgaria',
|
|
38
|
-
BF: 'Burkina Faso',
|
|
39
|
-
BI: 'Burundi',
|
|
40
|
-
KH: 'Cambodia',
|
|
41
|
-
CM: 'Cameroon',
|
|
42
|
-
CA: 'Canada',
|
|
43
|
-
CV: 'Cape Verde',
|
|
44
|
-
KY: 'Cayman Islands',
|
|
45
|
-
CF: 'Central African Republic',
|
|
46
|
-
TD: 'Chad',
|
|
47
|
-
CL: 'Chile',
|
|
48
|
-
CN: 'China',
|
|
49
|
-
CX: 'Christmas Island',
|
|
50
|
-
CC: 'Cocos (Keeling) Islands',
|
|
51
|
-
CO: 'Colombia',
|
|
52
|
-
KM: 'Comoros',
|
|
53
|
-
CG: 'Congo',
|
|
54
|
-
CD: 'Congo, the Democratic Republic of the',
|
|
55
|
-
CK: 'Cook Islands',
|
|
56
|
-
CR: 'Costa Rica',
|
|
57
|
-
CI: "Côte d'Ivoire",
|
|
58
|
-
HR: 'Croatia',
|
|
59
|
-
CU: 'Cuba',
|
|
60
|
-
CW: 'Curaçao',
|
|
61
|
-
CY: 'Cyprus',
|
|
62
|
-
CZ: 'Czech Republic',
|
|
63
|
-
DK: 'Denmark',
|
|
64
|
-
DJ: 'Djibouti',
|
|
65
|
-
DM: 'Dominica',
|
|
66
|
-
DO: 'Dominican Republic',
|
|
67
|
-
EC: 'Ecuador',
|
|
68
|
-
EG: 'Egypt',
|
|
69
|
-
SV: 'El Salvador',
|
|
70
|
-
GQ: 'Equatorial Guinea',
|
|
71
|
-
ER: 'Eritrea',
|
|
72
|
-
EE: 'Estonia',
|
|
73
|
-
ET: 'Ethiopia',
|
|
74
|
-
FK: 'Falkland Islands (Malvinas)',
|
|
75
|
-
FO: 'Faroe Islands',
|
|
76
|
-
FJ: 'Fiji',
|
|
77
|
-
FI: 'Finland',
|
|
78
|
-
FR: 'France',
|
|
79
|
-
GF: 'French Guiana',
|
|
80
|
-
PF: 'French Polynesia',
|
|
81
|
-
TF: 'French Southern Territories',
|
|
82
|
-
GA: 'Gabon',
|
|
83
|
-
GM: 'Gambia',
|
|
84
|
-
GE: 'Georgia',
|
|
85
|
-
DE: 'Germany',
|
|
86
|
-
GH: 'Ghana',
|
|
87
|
-
GI: 'Gibraltar',
|
|
88
|
-
GR: 'Greece',
|
|
89
|
-
GL: 'Greenland',
|
|
90
|
-
GD: 'Grenada',
|
|
91
|
-
GP: 'Guadeloupe',
|
|
92
|
-
GU: 'Guam',
|
|
93
|
-
GT: 'Guatemala',
|
|
94
|
-
GG: 'Guernsey',
|
|
95
|
-
GN: 'Guinea',
|
|
96
|
-
GW: 'Guinea-Bissau',
|
|
97
|
-
GY: 'Guyana',
|
|
98
|
-
HT: 'Haiti',
|
|
99
|
-
HM: 'Heard Island and McDonald Mcdonald Islands',
|
|
100
|
-
VA: 'Holy See (Vatican City State)',
|
|
101
|
-
HN: 'Honduras',
|
|
102
|
-
HK: 'Hong Kong',
|
|
103
|
-
HU: 'Hungary',
|
|
104
|
-
IS: 'Iceland',
|
|
105
|
-
IN: 'India',
|
|
106
|
-
ID: 'Indonesia',
|
|
107
|
-
IR: 'Iran, Islamic Republic of',
|
|
108
|
-
IQ: 'Iraq',
|
|
109
|
-
IE: 'Ireland',
|
|
110
|
-
IM: 'Isle of Man',
|
|
111
|
-
IL: 'Israel',
|
|
112
|
-
IT: 'Italy',
|
|
113
|
-
JM: 'Jamaica',
|
|
114
|
-
JP: 'Japan',
|
|
115
|
-
JE: 'Jersey',
|
|
116
|
-
JO: 'Jordan',
|
|
117
|
-
KZ: 'Kazakhstan',
|
|
118
|
-
KE: 'Kenya',
|
|
119
|
-
KI: 'Kiribati',
|
|
120
|
-
XK: 'Kosovo',
|
|
121
|
-
KP: "Korea, Democratic People's Republic of",
|
|
122
|
-
KR: 'Korea, Republic of',
|
|
123
|
-
KW: 'Kuwait',
|
|
124
|
-
KG: 'Kyrgyzstan',
|
|
125
|
-
LA: "Lao People's Democratic Republic",
|
|
126
|
-
LV: 'Latvia',
|
|
127
|
-
LB: 'Lebanon',
|
|
128
|
-
LS: 'Lesotho',
|
|
129
|
-
LR: 'Liberia',
|
|
130
|
-
LY: 'Libya',
|
|
131
|
-
LI: 'Liechtenstein',
|
|
132
|
-
LT: 'Lithuania',
|
|
133
|
-
LU: 'Luxembourg',
|
|
134
|
-
MO: 'Macao',
|
|
135
|
-
MK: 'North Macedonia',
|
|
136
|
-
MG: 'Madagascar',
|
|
137
|
-
MW: 'Malawi',
|
|
138
|
-
MY: 'Malaysia',
|
|
139
|
-
MV: 'Maldives',
|
|
140
|
-
ML: 'Mali',
|
|
141
|
-
MT: 'Malta',
|
|
142
|
-
MH: 'Marshall Islands',
|
|
143
|
-
MQ: 'Martinique',
|
|
144
|
-
MR: 'Mauritania',
|
|
145
|
-
MU: 'Mauritius',
|
|
146
|
-
YT: 'Mayotte',
|
|
147
|
-
MX: 'Mexico',
|
|
148
|
-
FM: 'Micronesia, Federated States of',
|
|
149
|
-
MD: 'Moldova, Republic of',
|
|
150
|
-
MC: 'Monaco',
|
|
151
|
-
MN: 'Mongolia',
|
|
152
|
-
ME: 'Montenegro',
|
|
153
|
-
MS: 'Montserrat',
|
|
154
|
-
MA: 'Morocco',
|
|
155
|
-
MZ: 'Mozambique',
|
|
156
|
-
MM: 'Myanmar',
|
|
157
|
-
NA: 'Namibia',
|
|
158
|
-
NR: 'Nauru',
|
|
159
|
-
NP: 'Nepal',
|
|
160
|
-
NL: 'Netherlands',
|
|
161
|
-
AN: 'Netherlands Antilles',
|
|
162
|
-
NC: 'New Caledonia',
|
|
163
|
-
NZ: 'New Zealand',
|
|
164
|
-
NI: 'Nicaragua',
|
|
165
|
-
NE: 'Niger',
|
|
166
|
-
NG: 'Nigeria',
|
|
167
|
-
NU: 'Niue',
|
|
168
|
-
NF: 'Norfolk Island',
|
|
169
|
-
MP: 'Northern Mariana Islands',
|
|
170
|
-
NO: 'Norway',
|
|
171
|
-
OM: 'Oman',
|
|
172
|
-
PK: 'Pakistan',
|
|
173
|
-
PW: 'Palau',
|
|
174
|
-
PS: 'Palestine, State of',
|
|
175
|
-
PA: 'Panama',
|
|
176
|
-
PG: 'Papua New Guinea',
|
|
177
|
-
PY: 'Paraguay',
|
|
178
|
-
PE: 'Peru',
|
|
179
|
-
PH: 'Philippines',
|
|
180
|
-
PN: 'Pitcairn',
|
|
181
|
-
PL: 'Poland',
|
|
182
|
-
PT: 'Portugal',
|
|
183
|
-
PR: 'Puerto Rico',
|
|
184
|
-
QA: 'Qatar',
|
|
185
|
-
RE: 'Réunion',
|
|
186
|
-
RO: 'Romania',
|
|
187
|
-
RU: 'Russian Federation',
|
|
188
|
-
RW: 'Rwanda',
|
|
189
|
-
BL: 'Saint Barthélemy',
|
|
190
|
-
SH: 'Saint Helena, Ascension and Tristan da Cunha',
|
|
191
|
-
KN: 'Saint Kitts and Nevis',
|
|
192
|
-
LC: 'Saint Lucia',
|
|
193
|
-
MF: 'Saint Martin (French part)',
|
|
194
|
-
PM: 'Saint Pierre and Miquelon',
|
|
195
|
-
VC: 'Saint Vincent and the Grenadines',
|
|
196
|
-
WS: 'Samoa',
|
|
197
|
-
SM: 'San Marino',
|
|
198
|
-
ST: 'Sao Tome and Principe',
|
|
199
|
-
SA: 'Saudi Arabia',
|
|
200
|
-
SN: 'Senegal',
|
|
201
|
-
RS: 'Serbia',
|
|
202
|
-
SC: 'Seychelles',
|
|
203
|
-
SL: 'Sierra Leone',
|
|
204
|
-
SG: 'Singapore',
|
|
205
|
-
SX: 'Sint Maarten (Dutch part)',
|
|
206
|
-
SK: 'Slovakia',
|
|
207
|
-
SI: 'Slovenia',
|
|
208
|
-
SB: 'Solomon Islands',
|
|
209
|
-
SO: 'Somalia',
|
|
210
|
-
ZA: 'South Africa',
|
|
211
|
-
GS: 'South Georgia and the South Sandwich Islands',
|
|
212
|
-
SS: 'South Sudan',
|
|
213
|
-
ES: 'Spain',
|
|
214
|
-
LK: 'Sri Lanka',
|
|
215
|
-
SD: 'Sudan',
|
|
216
|
-
SR: 'Suriname',
|
|
217
|
-
SJ: 'Svalbard and Jan Mayen',
|
|
218
|
-
SZ: 'Swaziland',
|
|
219
|
-
SE: 'Sweden',
|
|
220
|
-
CH: 'Switzerland',
|
|
221
|
-
SY: 'Syrian Arab Republic',
|
|
222
|
-
TW: 'Taiwan, Province of China',
|
|
223
|
-
TJ: 'Tajikistan',
|
|
224
|
-
TZ: 'Tanzania, United Republic of',
|
|
225
|
-
TH: 'Thailand',
|
|
226
|
-
TL: 'Timor-Leste',
|
|
227
|
-
TG: 'Togo',
|
|
228
|
-
TK: 'Tokelau',
|
|
229
|
-
TO: 'Tonga',
|
|
230
|
-
TT: 'Trinidad and Tobago',
|
|
231
|
-
TN: 'Tunisia',
|
|
232
|
-
TR: 'Turkey',
|
|
233
|
-
TM: 'Turkmenistan',
|
|
234
|
-
TC: 'Turks and Caicos Islands',
|
|
235
|
-
TV: 'Tuvalu',
|
|
236
|
-
UG: 'Uganda',
|
|
237
|
-
UA: 'Ukraine',
|
|
238
|
-
AE: 'United Arab Emirates',
|
|
239
|
-
GB: 'United Kingdom',
|
|
240
|
-
US: 'United States',
|
|
241
|
-
UM: 'United States Minor Outlying Islands',
|
|
242
|
-
UY: 'Uruguay',
|
|
243
|
-
UZ: 'Uzbekistan',
|
|
244
|
-
VU: 'Vanuatu',
|
|
245
|
-
VE: 'Venezuela, Bolivarian Republic of',
|
|
246
|
-
VN: 'Viet Nam',
|
|
247
|
-
VG: 'Virgin Islands, British',
|
|
248
|
-
VI: 'Virgin Islands, U.S.',
|
|
249
|
-
WF: 'Wallis and Futuna',
|
|
250
|
-
EH: 'Western Sahara',
|
|
251
|
-
YE: 'Yemen',
|
|
252
|
-
ZM: 'Zambia',
|
|
253
|
-
ZW: 'Zimbabwe'
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
export function isValidCountryCode(countryCode: string): boolean {
|
|
257
|
-
return (countryCode.toUpperCase() in countries)
|
|
258
|
-
}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import type { Logger } from 'pino'
|
|
2
|
-
import type { WebSocket } from 'ws'
|
|
3
|
-
|
|
4
|
-
import { MAX_NO_DATA_INTERVAL_MS, PING_INTERVAL_MS } from '#src/config/index.ts'
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Adds a keep-alive mechanism to the WebSocket
|
|
8
|
-
* client
|
|
9
|
-
*/
|
|
10
|
-
export function addKeepAlive(ws: WebSocket, logger: Logger) {
|
|
11
|
-
let sendTimeout: NodeJS.Timeout
|
|
12
|
-
let killTimeout: NodeJS.Timeout
|
|
13
|
-
|
|
14
|
-
ws.on('message', () => {
|
|
15
|
-
logger.trace('data recv, resetting timer')
|
|
16
|
-
resetTimer()
|
|
17
|
-
})
|
|
18
|
-
ws.on('pong', () => {
|
|
19
|
-
logger.trace('pong received, resetting timer')
|
|
20
|
-
resetTimer()
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
ws.on('error', cleanup)
|
|
24
|
-
ws.on('close', cleanup)
|
|
25
|
-
|
|
26
|
-
function resetTimer() {
|
|
27
|
-
cleanup()
|
|
28
|
-
resetSendTimeout()
|
|
29
|
-
|
|
30
|
-
killTimeout = setTimeout(() => {
|
|
31
|
-
logger.warn(
|
|
32
|
-
'no data received in a while, closing connection'
|
|
33
|
-
)
|
|
34
|
-
ws.close()
|
|
35
|
-
}, MAX_NO_DATA_INTERVAL_MS)
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function resetSendTimeout() {
|
|
39
|
-
// reset ping
|
|
40
|
-
sendTimeout = setTimeout(() => {
|
|
41
|
-
ws.ping()
|
|
42
|
-
resetSendTimeout()
|
|
43
|
-
}, PING_INTERVAL_MS)
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
function cleanup() {
|
|
47
|
-
clearTimeout(killTimeout)
|
|
48
|
-
clearTimeout(sendTimeout)
|
|
49
|
-
}
|
|
50
|
-
}
|
|
@@ -1,396 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Working Nitro Attestation validation utilities
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { AsnParser } from '@peculiar/asn1-schema'
|
|
6
|
-
import { SubjectPublicKeyInfo } from '@peculiar/asn1-x509'
|
|
7
|
-
import { Crypto } from '@peculiar/webcrypto'
|
|
8
|
-
import { X509Certificate, X509ChainBuilder } from '@peculiar/x509'
|
|
9
|
-
import { sign } from 'cose-js'
|
|
10
|
-
|
|
11
|
-
// Nitro-specific types
|
|
12
|
-
export interface AttestationDocument {
|
|
13
|
-
module_id: string
|
|
14
|
-
digest: string
|
|
15
|
-
timestamp: bigint
|
|
16
|
-
pcrs: { [key: number]: Buffer }
|
|
17
|
-
certificate: Buffer
|
|
18
|
-
cabundle: Buffer[]
|
|
19
|
-
public_key?: Buffer
|
|
20
|
-
user_data?: Buffer
|
|
21
|
-
nonce?: Buffer
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export interface NitroValidationResult {
|
|
25
|
-
isValid: boolean
|
|
26
|
-
errors: string[]
|
|
27
|
-
warnings: string[]
|
|
28
|
-
userDataType?: 'tee_k' | 'tee_t'
|
|
29
|
-
ethAddress?: string
|
|
30
|
-
pcr0: string
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export interface AddressExtractionResult {
|
|
34
|
-
teeType: 'tee_k' | 'tee_t'
|
|
35
|
-
ethAddress?: string
|
|
36
|
-
pcr0: string
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
// Helper function to dynamically import cbor-x
|
|
40
|
-
async function getCborDecode() {
|
|
41
|
-
const { decode } = await import('cbor-x')
|
|
42
|
-
return decode
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
// AWS Nitro root certificate (from nitrite)
|
|
46
|
-
const AWS_NITRO_ROOT_CERT = `-----BEGIN CERTIFICATE-----
|
|
47
|
-
MIICETCCAZagAwIBAgIRAPkxdWgbkK/hHUbMtOTn+FYwCgYIKoZIzj0EAwMwSTEL
|
|
48
|
-
MAkGA1UEBhMCVVMxDzANBgNVBAoMBkFtYXpvbjEMMAoGA1UECwwDQVdTMRswGQYD
|
|
49
|
-
VQQDDBJhd3Mubml0cm8tZW5jbGF2ZXMwHhcNMTkxMDI4MTMyODA1WhcNNDkxMDI4
|
|
50
|
-
MTQyODA1WjBJMQswCQYDVQQGEwJVUzEPMA0GA1UECgwGQW1hem9uMQwwCgYDVQQL
|
|
51
|
-
DANBV1MxGzAZBgNVBAMMEmF3cy5uaXRyby1lbmNsYXZlczB2MBAGByqGSM49AgEG
|
|
52
|
-
BSuBBAAiA2IABPwCVOumCMHzaHDimtqQvkY4MpJzbolL//Zy2YlES1BR5TSksfbb
|
|
53
|
-
48C8WBoyt7F2Bw7eEtaaP+ohG2bnUs990d0JX28TcPQXCEPZ3BABIeTPYwEoCWZE
|
|
54
|
-
h8l5YoQwTcU/9KNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUkCW1DdkF
|
|
55
|
-
R+eWw5b6cp3PmanfS5YwDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2kAMGYC
|
|
56
|
-
MQCjfy+Rocm9Xue4YnwWmNJVA44fA0P5W2OpYow9OYCVRaEevL8uO1XYru5xtMPW
|
|
57
|
-
rfMCMQCi85sWBbJwKKXdS6BptQFuZbT73o/gBh1qUxl/nNr12UO8Yfwr6wPLb+6N
|
|
58
|
-
IwLz3/Y=
|
|
59
|
-
-----END CERTIFICATE-----`
|
|
60
|
-
|
|
61
|
-
// Expected PCR values (replace with actual values)
|
|
62
|
-
// const EXPECTED_PCRS = {
|
|
63
|
-
// //0: Buffer.from('000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 'hex'),
|
|
64
|
-
// }
|
|
65
|
-
//
|
|
66
|
-
// // Secure buffer comparison to prevent timing attacks
|
|
67
|
-
// function secureBufferCompare(a: Buffer, b: Buffer): boolean {
|
|
68
|
-
// if(a.length !== b.length) {
|
|
69
|
-
// return false
|
|
70
|
-
// }
|
|
71
|
-
//
|
|
72
|
-
// let result = 0
|
|
73
|
-
// for(const [i, element] of a.entries()) {
|
|
74
|
-
// result |= element ^ b[i]
|
|
75
|
-
// }
|
|
76
|
-
//
|
|
77
|
-
// return result === 0
|
|
78
|
-
// }
|
|
79
|
-
|
|
80
|
-
// Enhanced certificate chain validation
|
|
81
|
-
async function validateCertificateChain(
|
|
82
|
-
targetCert: X509Certificate,
|
|
83
|
-
intermediateCerts: X509Certificate[],
|
|
84
|
-
rootCert: X509Certificate,
|
|
85
|
-
crypto: Crypto
|
|
86
|
-
): Promise<{ isValid: boolean, errors: string[], chain: X509Certificate[] }> {
|
|
87
|
-
const errors: string[] = []
|
|
88
|
-
|
|
89
|
-
try {
|
|
90
|
-
// Validate root certificate is self-signed and trusted
|
|
91
|
-
const rootSubject = rootCert.subject
|
|
92
|
-
const rootIssuer = rootCert.issuer
|
|
93
|
-
|
|
94
|
-
if(rootSubject !== rootIssuer) {
|
|
95
|
-
errors.push('Root certificate is not self-signed')
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// Verify root certificate signature (self-verification)
|
|
99
|
-
try {
|
|
100
|
-
const isRootValid = await rootCert.verify(undefined, crypto)
|
|
101
|
-
if(!isRootValid) {
|
|
102
|
-
errors.push('Root certificate signature verification failed')
|
|
103
|
-
}
|
|
104
|
-
} catch(error) {
|
|
105
|
-
errors.push(`Root certificate verification failed: ${(error as Error).message}`)
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// Build the certificate chain
|
|
109
|
-
const chainBuilder = new X509ChainBuilder({
|
|
110
|
-
certificates: [rootCert, ...intermediateCerts]
|
|
111
|
-
})
|
|
112
|
-
|
|
113
|
-
let chain: X509Certificate[]
|
|
114
|
-
try {
|
|
115
|
-
chain = await chainBuilder.build(targetCert, crypto)
|
|
116
|
-
} catch(error) {
|
|
117
|
-
errors.push(`Certificate chain building failed: ${(error as Error).message}`)
|
|
118
|
-
return { isValid: false, errors, chain: [] }
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
if(!chain || chain.length === 0) {
|
|
122
|
-
errors.push('No valid certificate chain could be built')
|
|
123
|
-
return { isValid: false, errors, chain: [] }
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// Validate each certificate in the chain
|
|
127
|
-
const now = new Date()
|
|
128
|
-
for(let i = 0; i < chain.length; i++) {
|
|
129
|
-
const cert = chain[i]
|
|
130
|
-
|
|
131
|
-
// Check expiration dates
|
|
132
|
-
if(now < cert.notBefore) {
|
|
133
|
-
errors.push(`Certificate ${i} (${cert.subject}) is not yet valid`)
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
if(now > cert.notAfter) {
|
|
137
|
-
errors.push(`Certificate ${i} (${cert.subject}) has expired`)
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
// Verify each certificate's signature (except root which is self-signed)
|
|
141
|
-
if(i < chain.length - 1) {
|
|
142
|
-
try {
|
|
143
|
-
const issuer = chain[i + 1]
|
|
144
|
-
const isValid = await cert.verify(issuer, crypto)
|
|
145
|
-
// eslint-disable-next-line max-depth
|
|
146
|
-
if(!isValid) {
|
|
147
|
-
errors.push(`Certificate ${i} signature verification failed`)
|
|
148
|
-
}
|
|
149
|
-
} catch(error) {
|
|
150
|
-
errors.push(`Certificate ${i} verification failed: ${(error as Error).message}`)
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
return {
|
|
156
|
-
isValid: errors.length === 0,
|
|
157
|
-
errors,
|
|
158
|
-
chain
|
|
159
|
-
}
|
|
160
|
-
} catch(error) {
|
|
161
|
-
errors.push(`Certificate chain validation error: ${(error as Error).message}`)
|
|
162
|
-
return { isValid: false, errors, chain: [] }
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* Extract public key from user_data field in attestation document
|
|
168
|
-
*/
|
|
169
|
-
function extractPublicKeyFromUserData(userDataBuffer: Buffer): AddressExtractionResult | null {
|
|
170
|
-
try {
|
|
171
|
-
const userDataString = userDataBuffer.toString('utf-8')
|
|
172
|
-
|
|
173
|
-
// Parse new format: "tee_k_public_key:0xETH_ADDRESS" or "tee_t_public_key:0xETH_ADDRESS"
|
|
174
|
-
const teeKMatch = userDataString.match(/^tee_k_public_key:(0x[0-9a-fA-F]{40})$/)
|
|
175
|
-
const teeTMatch = userDataString.match(/^tee_t_public_key:(0x[0-9a-fA-F]{40})$/)
|
|
176
|
-
|
|
177
|
-
if(teeKMatch) {
|
|
178
|
-
return {
|
|
179
|
-
teeType: 'tee_k',
|
|
180
|
-
ethAddress: teeKMatch[1], // Store the full ETH address with 0x prefix
|
|
181
|
-
pcr0: ''
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
if(teeTMatch) {
|
|
186
|
-
return {
|
|
187
|
-
teeType: 'tee_t',
|
|
188
|
-
ethAddress: teeTMatch[1], // Store the full ETH address with 0x prefix
|
|
189
|
-
pcr0: ''
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
return null
|
|
194
|
-
} catch(error) {
|
|
195
|
-
return null
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
/**
|
|
200
|
-
* Working validation function copied from nitroattestor
|
|
201
|
-
*/
|
|
202
|
-
export async function validateNitroAttestationAndExtractKey(
|
|
203
|
-
attestationBytes: Uint8Array
|
|
204
|
-
): Promise<NitroValidationResult> {
|
|
205
|
-
const errors: string[] = []
|
|
206
|
-
const warnings: string[] = []
|
|
207
|
-
|
|
208
|
-
try {
|
|
209
|
-
// Set up WebCrypto
|
|
210
|
-
const crypto = new Crypto()
|
|
211
|
-
|
|
212
|
-
// Decode CBOR - use exact same approach as working nitroattestor
|
|
213
|
-
const decode = await getCborDecode()
|
|
214
|
-
let decoded: any
|
|
215
|
-
try {
|
|
216
|
-
decoded = decode(Buffer.from(attestationBytes))
|
|
217
|
-
} catch(error) {
|
|
218
|
-
errors.push(`CBOR decoding failed: ${(error as Error).message}`)
|
|
219
|
-
return { isValid: false, errors, warnings, pcr0: '' }
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
// Extract COSE_Sign1 structure
|
|
223
|
-
if(!Array.isArray(decoded) || decoded.length < 4) {
|
|
224
|
-
errors.push('Invalid COSE_Sign1 structure: expected array with 4 elements')
|
|
225
|
-
return { isValid: false, errors, warnings, pcr0: '' }
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
const [, , payload] = decoded
|
|
229
|
-
|
|
230
|
-
// Validate payload exists and is not empty
|
|
231
|
-
if(!payload || payload.length === 0) {
|
|
232
|
-
errors.push('Empty or missing payload in COSE_Sign1 structure')
|
|
233
|
-
return { isValid: false, errors, warnings, pcr0: '' }
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
// Decode payload - use exact same approach as working code
|
|
237
|
-
let doc: AttestationDocument
|
|
238
|
-
try {
|
|
239
|
-
doc = decode(payload) as AttestationDocument
|
|
240
|
-
} catch(error) {
|
|
241
|
-
errors.push(`Payload decoding failed: ${(error as Error).message}`)
|
|
242
|
-
return { isValid: false, errors, warnings, pcr0: '' }
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
// Validate mandatory fields with strict type checking
|
|
246
|
-
if(doc.module_id.length === 0) {
|
|
247
|
-
errors.push('Missing or invalid module_id')
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
if(doc.digest.length === 0) {
|
|
251
|
-
errors.push('Missing or invalid digest')
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
if(!doc.pcrs || typeof doc.pcrs !== 'object') {
|
|
255
|
-
errors.push('Missing or invalid pcrs')
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
if(!Buffer.isBuffer(doc.certificate) || doc.certificate.length === 0) {
|
|
259
|
-
errors.push('Missing or invalid certificate')
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
if(!Array.isArray(doc.cabundle) || doc.cabundle.length === 0) {
|
|
263
|
-
errors.push('Missing or invalid cabundle')
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
// Early return if basic validation fails
|
|
267
|
-
if(errors.length > 0) {
|
|
268
|
-
return { isValid: false, errors, warnings, pcr0: '' }
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
const pcr0 = doc.pcrs[0].toString('hex')
|
|
272
|
-
|
|
273
|
-
// Validate PCRs with secure comparison
|
|
274
|
-
// for(const [index, expected] of Object.entries(EXPECTED_PCRS)) {
|
|
275
|
-
// const pcrIndex = parseInt(index)
|
|
276
|
-
// const actualPcr = doc.pcrs[pcrIndex]
|
|
277
|
-
//
|
|
278
|
-
// if(!Buffer.isBuffer(actualPcr)) {
|
|
279
|
-
// errors.push(`PCR${index} is not a Buffer`)
|
|
280
|
-
// continue
|
|
281
|
-
// }
|
|
282
|
-
//
|
|
283
|
-
// if(!secureBufferCompare(expected, actualPcr)) {
|
|
284
|
-
// errors.push(`PCR${index} mismatch`)
|
|
285
|
-
// }
|
|
286
|
-
// }
|
|
287
|
-
|
|
288
|
-
// Parse certificates with better error handling
|
|
289
|
-
const intermediateCerts: X509Certificate[] = []
|
|
290
|
-
for(let i = 0; i < doc.cabundle.length; i++) {
|
|
291
|
-
try {
|
|
292
|
-
const cert = new X509Certificate(doc.cabundle[i].toString('base64'))
|
|
293
|
-
intermediateCerts.push(cert)
|
|
294
|
-
} catch(error) {
|
|
295
|
-
errors.push(`Failed to parse cabundle certificate ${i}: ${(error as Error).message}`)
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
// Parse target certificate
|
|
300
|
-
let targetCert: X509Certificate
|
|
301
|
-
try {
|
|
302
|
-
targetCert = new X509Certificate(doc.certificate.toString('base64'))
|
|
303
|
-
} catch(error) {
|
|
304
|
-
errors.push(`Failed to parse target certificate: ${(error as Error).message}`)
|
|
305
|
-
return { isValid: false, errors, warnings, pcr0: '' }
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
// Parse root certificate
|
|
309
|
-
let rootCert: X509Certificate
|
|
310
|
-
try {
|
|
311
|
-
rootCert = new X509Certificate(AWS_NITRO_ROOT_CERT)
|
|
312
|
-
} catch(error) {
|
|
313
|
-
errors.push(`Failed to parse AWS Nitro root certificate: ${(error as Error).message}`)
|
|
314
|
-
return { isValid: false, errors, warnings, pcr0: '' }
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
// Enhanced certificate chain validation
|
|
318
|
-
const chainResult = await validateCertificateChain(targetCert, intermediateCerts, rootCert, crypto)
|
|
319
|
-
if(!chainResult.isValid) {
|
|
320
|
-
errors.push(...chainResult.errors)
|
|
321
|
-
return { isValid: false, errors, warnings, pcr0: '' }
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
// Parse and validate public key
|
|
325
|
-
let publicKeyRaw: Buffer
|
|
326
|
-
try {
|
|
327
|
-
publicKeyRaw = Buffer.from(targetCert.publicKey.rawData)
|
|
328
|
-
} catch(error) {
|
|
329
|
-
errors.push(`Failed to extract public key: ${(error as Error).message}`)
|
|
330
|
-
return { isValid: false, errors, warnings, pcr0: '' }
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
// Validate public key format (P-384 ECDSA)
|
|
334
|
-
if(publicKeyRaw.length !== 120 || publicKeyRaw[0] !== 0x30) {
|
|
335
|
-
errors.push(`Invalid public key format: expected 120-byte DER-encoded key, got ${publicKeyRaw.length} bytes`)
|
|
336
|
-
return { isValid: false, errors, warnings, pcr0: '' }
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
let spki: SubjectPublicKeyInfo
|
|
340
|
-
try {
|
|
341
|
-
spki = AsnParser.parse(publicKeyRaw, SubjectPublicKeyInfo)
|
|
342
|
-
} catch(error) {
|
|
343
|
-
errors.push(`Failed to parse SubjectPublicKeyInfo: ${(error as Error).message}`)
|
|
344
|
-
return { isValid: false, errors, warnings, pcr0: '' }
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
const ecPoint = Buffer.from(spki.subjectPublicKey)
|
|
348
|
-
if(ecPoint.length !== 97 || ecPoint[0] !== 0x04) {
|
|
349
|
-
errors.push('Invalid EC point: expected 97-byte uncompressed P-384 key')
|
|
350
|
-
return { isValid: false, errors, warnings, pcr0: '' }
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
const x = ecPoint.subarray(1, 49) // 48-byte x coordinate
|
|
354
|
-
const y = ecPoint.subarray(49, 97) // 48-byte y coordinate
|
|
355
|
-
|
|
356
|
-
// Validate ECDSA signature using cose-js
|
|
357
|
-
try {
|
|
358
|
-
const verifier = {
|
|
359
|
-
key: {
|
|
360
|
-
x: x,
|
|
361
|
-
y: y,
|
|
362
|
-
},
|
|
363
|
-
}
|
|
364
|
-
const options = { defaultType: 18 } // cose.sign.Sign1Tag
|
|
365
|
-
await sign.verify(Buffer.from(attestationBytes), verifier, options)
|
|
366
|
-
} catch(error) {
|
|
367
|
-
errors.push(`COSE signature verification failed: ${(error as Error).message}`)
|
|
368
|
-
return { isValid: false, errors, warnings, pcr0: '' }
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
// Extract public key from user_data if present
|
|
372
|
-
let userDataType: 'tee_k' | 'tee_t' | undefined
|
|
373
|
-
let ethAddress: string | undefined
|
|
374
|
-
|
|
375
|
-
if(doc.user_data) {
|
|
376
|
-
const keyInfo = extractPublicKeyFromUserData(doc.user_data)
|
|
377
|
-
if(keyInfo) {
|
|
378
|
-
userDataType = keyInfo.teeType
|
|
379
|
-
ethAddress = keyInfo.ethAddress
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
return {
|
|
384
|
-
isValid: errors.length === 0,
|
|
385
|
-
errors,
|
|
386
|
-
warnings,
|
|
387
|
-
userDataType,
|
|
388
|
-
ethAddress,
|
|
389
|
-
pcr0: pcr0
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
} catch(error) {
|
|
393
|
-
errors.push(`Unexpected error during validation: ${(error as Error).message}`)
|
|
394
|
-
return { isValid: false, errors, warnings, pcr0: '' }
|
|
395
|
-
}
|
|
396
|
-
}
|