diff --git a/package-lock.json b/package-lock.json index fb3b59a..028f496 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "zkverifyjs", - "version": "2.2.0", + "version": "2.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "zkverifyjs", - "version": "2.2.0", + "version": "2.3.0", "license": "GPL-3.0", "dependencies": { "@polkadot/api": "16.2.2", diff --git a/package.json b/package.json index b30d897..29b2c65 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zkverifyjs", - "version": "2.2.0", + "version": "2.3.0", "description": "Submit proofs to zkVerify and query proof state with ease using our npm package.", "author": "zkVerify ", "license": "GPL-3.0", @@ -48,12 +48,14 @@ "pack-and-install": "npm run build && npm pack && rm -rf node_modules/zkverifyjs && npm install ./$(npm pack | tail -n 1) --no-save", "bump-version": "npm version $npm_config_level && git add . && git commit -S -m \"chore: bump version to $npm_package_version\" && git push && npm run build", "push-tag": "git checkout main && git pull && git tag -s -m $npm_package_version $npm_package_version && git push origin $npm_package_version", + "pretest": "node tests/common/scripts/refresh-tee-tcb.mjs", "test": "jest", - "test:coverage": "jest --coverage", + "test:coverage": "npm run refresh-tee-tcb && jest --coverage", "test:file:coverage": "node -e 'const path = process.argv[1]; require(\"child_process\").execSync(`jest --coverage --collectCoverageFrom=\"${path}/index.ts\" ${path}/index.test.ts`, { stdio: \"inherit\" });' --", "lint": "eslint 'src/**/*.ts' --fix --ignore-pattern '**/*.test.ts'", "format": "prettier --write 'src/**/*.ts'", "generate-readme-for-docs": "node ci/generateDocsReadme.js", + "refresh-tee-tcb": "node tests/common/scripts/refresh-tee-tcb.mjs", "prepare": "husky" }, "lint-staged": { diff --git a/src/config/index.ts b/src/config/index.ts index be33af9..71da896 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -12,6 +12,7 @@ import { Plonky2Processor, Risc0Processor, SP1Processor, + TEEProcessor, UltraHonkProcessor, UltraPlonkProcessor, } from '../proofTypes'; @@ -58,6 +59,7 @@ export enum ProofType { sp1 = 'sp1', ultrahonk = 'ultrahonk', ultraplonk = 'ultraplonk', + tee = 'tee', // ADD_NEW_PROOF_TYPE } @@ -99,6 +101,10 @@ export const proofConfigurations: Record = { pallet: 'settlementUltrahonkPallet', processor: UltraHonkProcessor, }, + [ProofType.tee]: { + pallet: 'settlementTeePallet', + processor: TEEProcessor, + }, // ADD_NEW_PROOF_TYPE - configurations }; @@ -171,6 +177,10 @@ export const zkvTypes = { EzklVk: { vkBytes: 'Bytes', }, + TeeVk: { + tcbResponse: 'Bytes', + certificates: 'Bytes', + }, }; export const zkvRpc = { @@ -279,6 +289,16 @@ export const zkvRpc = { ], type: 'H256', }, + tee: { + description: 'Get the hash of a TEE verification key', + params: [ + { + name: 'vk', + type: 'TeeVk', + }, + ], + type: 'H256', + }, // ADD_NEW_PROOF_TYPE }, }; diff --git a/src/enums.ts b/src/enums.ts index f35d54b..6b4688e 100644 --- a/src/enums.ts +++ b/src/enums.ts @@ -85,6 +85,7 @@ export enum Destination { export enum RuntimeVersion { V1_3_0 = 1003000, + V1_5_0 = 1005000, } export const PUBLIC_ZK_VERIFY_EVENTS: ZkVerifyEvents[] = [ diff --git a/src/proofTypes/index.ts b/src/proofTypes/index.ts index 2c669a1..46aeb5a 100644 --- a/src/proofTypes/index.ts +++ b/src/proofTypes/index.ts @@ -6,4 +6,5 @@ export { default as UltraPlonkProcessor } from './ultraplonk/processor'; export { default as Plonky2Processor } from './plonky2/processor'; export { default as SP1Processor } from './sp1/processor'; export { default as UltraHonkProcessor } from './ultrahonk/processor'; +export { default as TEEProcessor } from './tee/processor'; // ADD_NEW_PROOF_TYPE diff --git a/src/proofTypes/tee/formatter/index.ts b/src/proofTypes/tee/formatter/index.ts new file mode 100644 index 0000000..e13495c --- /dev/null +++ b/src/proofTypes/tee/formatter/index.ts @@ -0,0 +1,38 @@ +import { TeeProof, TeeVk } from '../types'; + +export function formatProof(proof: TeeProof['proof']): string { + return validateHexString(proof); +} + +export function formatVk(vk: TeeVk['vk']): { + tcbResponse: string; + certificates: string; +} { + if (typeof vk !== 'object' || vk === null) { + throw new Error( + 'Invalid TEE VK format: expected object with tcbResponse and certificates properties', + ); + } + + if (!('tcbResponse' in vk) || !('certificates' in vk)) { + throw new Error( + 'Invalid TEE VK format: expected object with tcbResponse and certificates properties', + ); + } + + const tcbResponse = validateHexString(vk.tcbResponse); + const certificates = validateHexString(vk.certificates); + + return { tcbResponse, certificates }; +} + +export function formatPubs(): string { + return '0x'; +} + +function validateHexString(input: string): string { + if (!input.startsWith('0x')) { + throw new Error('Invalid format: string input must be 0x-prefixed.'); + } + return input; +} diff --git a/src/proofTypes/tee/processor/index.ts b/src/proofTypes/tee/processor/index.ts new file mode 100644 index 0000000..9cf12c7 --- /dev/null +++ b/src/proofTypes/tee/processor/index.ts @@ -0,0 +1,19 @@ +import { ProofProcessor } from '../../../types'; +import { TeeVk } from '../types'; +import * as formatter from '../formatter'; + +class TEEProcessor implements ProofProcessor { + formatProof(proof: string): string { + return formatter.formatProof(proof); + } + + formatVk(vk: TeeVk['vk']): { tcbResponse: string; certificates: string } { + return formatter.formatVk(vk); + } + + formatPubs(): string { + return formatter.formatPubs(); + } +} + +export default new TEEProcessor(); diff --git a/src/proofTypes/tee/types.ts b/src/proofTypes/tee/types.ts new file mode 100644 index 0000000..843c9f7 --- /dev/null +++ b/src/proofTypes/tee/types.ts @@ -0,0 +1,14 @@ +export interface TeeProof { + proof: string; +} + +export interface TeeVk { + vk: { + tcbResponse: string; + certificates: string; + }; +} + +export interface TeePubs { + pubs: string; +} diff --git a/src/session/types.ts b/src/session/types.ts index f662f50..3a0d35a 100644 --- a/src/session/types.ts +++ b/src/session/types.ts @@ -46,6 +46,7 @@ type GenericProofMethodMap = { sp1: () => TBuilder; ultrahonk: (options?: UltrahonkConfig | null) => TBuilder; ultraplonk: (options: UltraplonkConfig) => TBuilder; + tee: () => TBuilder; // ADD_NEW_PROOF_TYPE }; diff --git a/src/session/validator/index.ts b/src/session/validator/index.ts index 3416c46..d401772 100644 --- a/src/session/validator/index.ts +++ b/src/session/validator/index.ts @@ -79,6 +79,13 @@ export function validateProofTypeOptions( case ProofType.sp1: // No specific options required for these proof types break; + case ProofType.tee: + requireVersionAtLeast( + runtimeSpec, + RuntimeVersion.V1_5_0, + 'TEE proof type', + ); + break; // ADD_NEW_PROOF_TYPE config validation per proof type // ADD RUNTIME SPECIFIC RULE IF NEEDED USING requireVersionAtLeast diff --git a/tests/common/data/tee.json b/tests/common/data/tee.json new file mode 100644 index 0000000..9ccc015 --- /dev/null +++ b/tests/common/data/tee.json @@ -0,0 +1,8 @@ +{ + "proof": "0x040002008100000000000000939a7233f79c4ca9940a0db3957f0607889b7d6ff9df2405b240a830e73faf3d00000000060103000000000000000000000000005b38e33a6487958b72c3c12a938eaa5e3fd4510c51aeeab58c7d5ecee41d7c436489d6c8e4f92f160b7cad34207b00c100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000e70206000000000091eb2b44d141d4ece09f0c75c2c53d247a3c68edd7fafe8a3520c942a604a407de03ae6dc5f87f27428b2538873118b700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044c0197b39157fdd7a4dcc44767f9d6b0bb3977c7a8e347b8492f827fe9d9e5c48aca29b220b80b6a540cf994b9bc9c00084452c01668329d4bc06acdf58a7205c26743304509973949e5619bf81a6a7aea8c323c173019b3093d54e579e9378d833feef2cd945148aa38ead2c53e9b7f138190aaaebfc551dccd829fc207aa3ba80b70870d7330733642e01d48c31320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a9d48e7f6799642d3d1b34e1e5e1742d4bb02dd6ddd551862c1211d35c304f9eca3efdbb481601c163cf52493d6e44aed55d51ec39b7e518fadb92c2b523f20cc100000f156eac8ad01d79f7cce668f60005819b22f2151a66155a430ad4f7a9538ae31330f9dfd5424e7c4124b44a668cb97fe2da48e617252ee5aeb6252d48e9324e5c78ac5859b9f567238fad82ad63202bc516ee7ad14ec1d9adfc633e4cf5f71f73d6138ce76d0d9c1443f695464d1ed419c37ce696e70e95a5b317894a58979070600461000000303191b04ff0006000000000000000000000000000000000000000000000000000000000000000000000000000000001500000000000000e700000000000000e5a3a7b5d830c2953b98534c6c59a3a34fdc34e933f7f5898f0a85cf08846bca0000000000000000000000000000000000000000000000000000000000000000dc9e2a7c6f948f17474e34a7fc43ed030f7c1563f1babddf6340c82e0e54a8c500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c936492a774946af9b588f6b3bd8beddc5957d1761ded2c0bb61d7b64de5b3240000000000000000000000000000000000000000000000000000000000000000ca1bd340a4c8437b3d3d6fcf8b40030ddb7ac7f22d9597f4b593120350c891cafdf7c699e6feac62e44d474b48c653114a2adf325623b6a218a166a27dfe85502000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f05005e0e00002d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d49494538544343424a6167417749424167495550426274564f724c744d3751637235795977794665497a30626a5977436759494b6f5a497a6a3045417749770a634445694d434147413155454177775a535735305a577767553064594946424453794251624746305a6d397962534244515445614d42674741315545436777520a535735305a577767513239796347397959585270623234784644415342674e564241634d43314e68626e526849454e7359584a684d51737743515944565151490a44414a445154454c4d416b474131554542684d4356564d774868634e4d6a55774d6a41324d6a4d794e5455785768634e4d7a49774d6a41324d6a4d794e5455780a576a42774d534977494159445651514444426c4a626e526c624342545231676755454e4c49454e6c636e52705a6d6c6a5958526c4d526f77474159445651514b0a4442464a626e526c6243424462334a7762334a6864476c76626a45554d424947413155454277774c553246756447456751327868636d4578437a414a42674e560a4241674d416b4e424d517377435159445651514745774a56557a425a4d424d4742797147534d34394167454743437147534d34394177454841304941424263670a2b67547437346141763764492f5a5a612b5431687042656f38664b5a454f6934697a5a6d332f39744b795a673879695049444e572b514a54702f62335a6862690a51684c434c507a44356d316f483563636c326d6a67674d4d4d4949444344416642674e5648534d4547444157674253566231334e765276683655424a796454300a4d383442567776655644427242674e56485238455a4442694d47436758714263686c706f64485277637a6f764c32467761533530636e567a6447566b633256790a646d6c6a5a584d75615735305a577775593239744c334e6e6543396a5a584a3061575a7059324630615739754c3359304c33426a61324e796244396a595431770a624746305a6d397962535a6c626d4e765a476c755a7a316b5a584977485159445652304f42425945464b75326d677765696c563157656b577743744c47612b410a5250765a4d41344741315564447745422f775145417749477744414d42674e5648524d4241663845416a41414d4949434f51594a4b6f5a496876684e415130420a424949434b6a4343416959774867594b4b6f5a496876684e41513042415151516752334b4b69613555756862746b534c4358756b2f54434341574d47436971470a534962345451454e41514977676746544d42414743797147534962345451454e41514942416745444d42414743797147534962345451454e41514943416745440a4d42414743797147534962345451454e41514944416745434d42414743797147534962345451454e41514945416745434d42414743797147534962345451454e0a41514946416745454d42414743797147534962345451454e41514947416745424d42414743797147534962345451454e41514948416745414d424147437971470a534962345451454e41514949416745464d42414743797147534962345451454e4151494a416745414d42414743797147534962345451454e4151494b416745410a4d42414743797147534962345451454e4151494c416745414d42414743797147534962345451454e4151494d416745414d42414743797147534962345451454e0a4151494e416745414d42414743797147534962345451454e4151494f416745414d42414743797147534962345451454e41514950416745414d424147437971470a534962345451454e41514951416745414d42414743797147534962345451454e415149524167454c4d42384743797147534962345451454e41514953424241440a41774943424145414251414141414141414141414d42414743697147534962345451454e41514d45416741414d42514743697147534962345451454e415151450a42724441627741414144415042676f71686b69472b45304244514546436745424d42344743697147534962345451454e415159454541654368485267506e415a0a334a4d4864662f6f7a6449775241594b4b6f5a496876684e41513042427a41324d42414743797147534962345451454e415163424151482f4d424147437971470a534962345451454e415163434151482f4d42414743797147534962345451454e415163444151482f4d416f4743437147534d343942414d4341306b414d4559430a4951444a4f39684e556453344e46544e31516b6e2b32634d63477465756231414e765176336c7675537048315a774968414a4c4368396b6941416f4f577a612f0a4a616f47696e67375533765872323654734d35366d715945776446560a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d4949436c6a4343416a32674177494241674956414a567658633239472b487051456e4a3150517a7a674658433935554d416f4743437147534d343942414d430a4d476778476a415942674e5642414d4d45556c756447567349464e48574342536232393049454e424d526f77474159445651514b4442464a626e526c624342440a62334a7762334a6864476c76626a45554d424947413155454277774c553246756447456751327868636d4578437a414a42674e564241674d416b4e424d5173770a435159445651514745774a56557a4165467730784f4441314d6a45784d4455774d5442614677307a4d7a41314d6a45784d4455774d5442614d484178496a41670a42674e5642414d4d47556c756447567349464e4857434251513073675547786864475a76636d306751304578476a415942674e5642416f4d45556c75644756730a49454e76636e4276636d4630615739754d5251774567594456515148444174545957353059534244624746795954454c4d416b474131554543417743513045780a437a414a42674e5642415954416c56544d466b77457759484b6f5a497a6a3043415159494b6f5a497a6a304441516344516741454e53422f377432316c58534f0a3243757a7078773734654a423732457944476757357258437478327456544c7136684b6b367a2b5569525a436e71523770734f766771466553786c6d546c4a6c0a65546d693257597a33714f42757a43427544416642674e5648534d4547444157674251695a517a575770303069664f44744a5653763141624f536347724442530a42674e5648523845537a424a4d45656752614244686b466f64485277637a6f764c324e6c636e52705a6d6c6a5958526c63793530636e567a6447566b633256790a646d6c6a5a584d75615735305a577775593239744c306c756447567355306459556d397664454e424c6d526c636a416442674e5648513445466751556c5739640a7a62306234656c4153636e553944504f4156634c336c517744675944565230504151482f42415144416745474d42494741315564457745422f7751494d4159420a4166384341514177436759494b6f5a497a6a30454177494452774177524149675873566b6930772b6936565947573355462f32327561586530594a446a3155650a6e412b546a44316169356343494359623153416d4435786b66545670766f34556f79695359787244574c6d5552344349394e4b7966504e2b0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d4949436a7a4343416a53674177494241674955496d554d316c71644e496e7a6737535655723951477a6b6e42717777436759494b6f5a497a6a3045417749770a614445614d4267474131554541777752535735305a5777675530645949464a766233516751304578476a415942674e5642416f4d45556c756447567349454e760a636e4276636d4630615739754d5251774567594456515148444174545957353059534244624746795954454c4d416b47413155454341774351304578437a414a0a42674e5642415954416c56544d423458445445344d4455794d5445774e4455784d466f58445451354d54497a4d54497a4e546b314f566f77614445614d4267470a4131554541777752535735305a5777675530645949464a766233516751304578476a415942674e5642416f4d45556c756447567349454e76636e4276636d46300a615739754d5251774567594456515148444174545957353059534244624746795954454c4d416b47413155454341774351304578437a414a42674e56424159540a416c56544d466b77457759484b6f5a497a6a3043415159494b6f5a497a6a3044415163445167414543366e45774d4449595a4f6a2f69505773437a61454b69370a314f694f534c52466857476a626e42564a66566e6b59347533496a6b4459594c304d784f346d717379596a6c42616c54565978465032734a424b357a6c4b4f420a757a43427544416642674e5648534d4547444157674251695a517a575770303069664f44744a5653763141624f5363477244425342674e5648523845537a424a0a4d45656752614244686b466f64485277637a6f764c324e6c636e52705a6d6c6a5958526c63793530636e567a6447566b63325679646d6c6a5a584d75615735300a5a577775593239744c306c756447567355306459556d397664454e424c6d526c636a416442674e564851344546675155496d554d316c71644e496e7a673753560a55723951477a6b6e4271777744675944565230504151482f42415144416745474d42494741315564457745422f7751494d4159424166384341514577436759490a4b6f5a497a6a3045417749445351417752674968414f572f35516b522b533943695344634e6f6f774c7550524c735747662f59693747535839344267775477670a41694541344a306c72486f4d732b586f356f2f7358364f39515778485241765a55474f6452513763767152586171493d0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "publicSignals": [], + "vk": { + "tcbResponse": "0x7b22746362496e666f223a7b226964223a22544458222c2276657273696f6e223a332c22697373756544617465223a22323032362d30332d30395431303a35323a30305a222c226e657874557064617465223a22323032362d30342d30385431303a35323a30305a222c22666d737063223a22423043303646303030303030222c227063654964223a2230303030222c2274636254797065223a302c227463624576616c756174696f6e446174614e756d626572223a31382c227464784d6f64756c65223a7b226d727369676e6572223a22303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030222c2261747472696275746573223a2230303030303030303030303030303030222c22617474726962757465734d61736b223a2246464646464646464646464646464646227d2c227464784d6f64756c654964656e746974696573223a5b7b226964223a225444585f3033222c226d727369676e6572223a22303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030222c2261747472696275746573223a2230303030303030303030303030303030222c22617474726962757465734d61736b223a2246464646464646464646464646464646222c227463624c6576656c73223a5b7b22746362223a7b2269737673766e223a337d2c2274636244617465223a22323032342d31312d31335430303a30303a30305a222c22746362537461747573223a225570546f44617465227d5d7d2c7b226964223a225444585f3031222c226d727369676e6572223a22303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030222c2261747472696275746573223a2230303030303030303030303030303030222c22617474726962757465734d61736b223a2246464646464646464646464646464646222c227463624c6576656c73223a5b7b22746362223a7b2269737673766e223a367d2c2274636244617465223a22323032342d31312d31335430303a30303a30305a222c22746362537461747573223a225570546f44617465227d2c7b22746362223a7b2269737673766e223a347d2c2274636244617465223a22323032342d30332d31335430303a30303a30305a222c22746362537461747573223a224f75744f6644617465222c2261647669736f7279494473223a5b22494e54454c2d53412d3031303336222c22494e54454c2d53412d3031303939225d7d2c7b22746362223a7b2269737673766e223a327d2c2274636244617465223a22323032332d30382d30395430303a30303a30305a222c22746362537461747573223a224f75744f6644617465222c2261647669736f7279494473223a5b22494e54454c2d53412d3031303336222c22494e54454c2d53412d3031303939225d7d5d7d5d2c227463624c6576656c73223a5b7b22746362223a7b22736778746362636f6d706f6e656e7473223a5b7b2273766e223a332c2263617465676f7279223a2242494f53222c2274797065223a224561726c79204d6963726f636f646520557064617465227d2c7b2273766e223a332c2263617465676f7279223a224f532f564d4d222c2274797065223a22534758204c617465204d6963726f636f646520557064617465227d2c7b2273766e223a322c2263617465676f7279223a224f532f564d4d222c2274797065223a225458542053494e4954227d2c7b2273766e223a322c2263617465676f7279223a2242494f53227d2c7b2273766e223a342c2263617465676f7279223a2242494f53227d2c7b2273766e223a312c2263617465676f7279223a2242494f53227d2c7b2273766e223a307d2c7b2273766e223a352c2263617465676f7279223a224f532f564d4d222c2274797065223a225345414d4c44522041434d227d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d5d2c2270636573766e223a31312c22746478746362636f6d706f6e656e7473223a5b7b2273766e223a352c2263617465676f7279223a224f532f564d4d222c2274797065223a22544458204d6f64756c65227d2c7b2273766e223a302c2263617465676f7279223a224f532f564d4d222c2274797065223a22544458204d6f64756c65227d2c7b2273766e223a332c2263617465676f7279223a224f532f564d4d222c2274797065223a22544458204c617465204d6963726f636f646520557064617465227d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d5d7d2c2274636244617465223a22323032342d31312d31335430303a30303a30305a222c22746362537461747573223a225570546f44617465227d2c7b22746362223a7b22736778746362636f6d706f6e656e7473223a5b7b2273766e223a322c2263617465676f7279223a2242494f53222c2274797065223a224561726c79204d6963726f636f646520557064617465227d2c7b2273766e223a322c2263617465676f7279223a224f532f564d4d222c2274797065223a22534758204c617465204d6963726f636f646520557064617465227d2c7b2273766e223a322c2263617465676f7279223a224f532f564d4d222c2274797065223a225458542053494e4954227d2c7b2273766e223a322c2263617465676f7279223a2242494f53227d2c7b2273766e223a332c2263617465676f7279223a2242494f53227d2c7b2273766e223a312c2263617465676f7279223a2242494f53227d2c7b2273766e223a307d2c7b2273766e223a352c2263617465676f7279223a224f532f564d4d222c2274797065223a225345414d4c44522041434d227d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d5d2c2270636573766e223a31312c22746478746362636f6d706f6e656e7473223a5b7b2273766e223a352c2263617465676f7279223a224f532f564d4d222c2274797065223a22544458204d6f64756c65227d2c7b2273766e223a302c2263617465676f7279223a224f532f564d4d222c2274797065223a22544458204d6f64756c65227d2c7b2273766e223a322c2263617465676f7279223a224f532f564d4d222c2274797065223a22544458204c617465204d6963726f636f646520557064617465227d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d5d7d2c2274636244617465223a22323032342d30332d31335430303a30303a30305a222c22746362537461747573223a224f75744f6644617465222c2261647669736f7279494473223a5b22494e54454c2d53412d3031303336222c22494e54454c2d53412d3031303739222c22494e54454c2d53412d3031303939222c22494e54454c2d53412d3031313033222c22494e54454c2d53412d3031313131225d7d2c7b22746362223a7b22736778746362636f6d706f6e656e7473223a5b7b2273766e223a322c2263617465676f7279223a2242494f53222c2274797065223a224561726c79204d6963726f636f646520557064617465227d2c7b2273766e223a322c2263617465676f7279223a224f532f564d4d222c2274797065223a22534758204c617465204d6963726f636f646520557064617465227d2c7b2273766e223a322c2263617465676f7279223a224f532f564d4d222c2274797065223a225458542053494e4954227d2c7b2273766e223a322c2263617465676f7279223a2242494f53227d2c7b2273766e223a332c2263617465676f7279223a2242494f53227d2c7b2273766e223a312c2263617465676f7279223a2242494f53227d2c7b2273766e223a307d2c7b2273766e223a352c2263617465676f7279223a224f532f564d4d222c2274797065223a225345414d4c44522041434d227d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d5d2c2270636573766e223a352c22746478746362636f6d706f6e656e7473223a5b7b2273766e223a352c2263617465676f7279223a224f532f564d4d222c2274797065223a22544458204d6f64756c65227d2c7b2273766e223a302c2263617465676f7279223a224f532f564d4d222c2274797065223a22544458204d6f64756c65227d2c7b2273766e223a322c2263617465676f7279223a224f532f564d4d222c2274797065223a22544458204c617465204d6963726f636f646520557064617465227d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d2c7b2273766e223a307d5d7d2c2274636244617465223a22323031382d30312d30345430303a30303a30305a222c22746362537461747573223a224f75744f6644617465222c2261647669736f7279494473223a5b22494e54454c2d53412d3030313036222c22494e54454c2d53412d3030313135222c22494e54454c2d53412d3030313335222c22494e54454c2d53412d3030323033222c22494e54454c2d53412d3030323230222c22494e54454c2d53412d3030323333222c22494e54454c2d53412d3030323730222c22494e54454c2d53412d3030323933222c22494e54454c2d53412d3030333230222c22494e54454c2d53412d3030333239222c22494e54454c2d53412d3030333831222c22494e54454c2d53412d3030333839222c22494e54454c2d53412d3030343737222c22494e54454c2d53412d3030383337222c22494e54454c2d53412d3031303336222c22494e54454c2d53412d3031303739222c22494e54454c2d53412d3031303939222c22494e54454c2d53412d3031313033222c22494e54454c2d53412d3031313131225d7d5d7d2c227369676e6174757265223a226361383763343665383064393863343565343535656435343630643831636135663338626337383539363138383131336639663335613939653530393961306365373634373032363563383466363033346637343464323535666637356363376137613162346434343034353331663564653135303464346436343633396131227d", + "certificates": "0x2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d4949436a544343416a4b674177494241674955666a6943316674564b5570415359354668415070464a473939465577436759494b6f5a497a6a3045417749770a614445614d4267474131554541777752535735305a5777675530645949464a766233516751304578476a415942674e5642416f4d45556c756447567349454e760a636e4276636d4630615739754d5251774567594456515148444174545957353059534244624746795954454c4d416b47413155454341774351304578437a414a0a42674e5642415954416c56544d423458445449314d4455774e6a41354d6a55774d466f5844544d794d4455774e6a41354d6a55774d466f77624445654d4277470a4131554541777756535735305a577767553064594946524451694254615764756157356e4d526f77474159445651514b4442464a626e526c6243424462334a770a62334a6864476c76626a45554d424947413155454277774c553246756447456751327868636d4578437a414a42674e564241674d416b4e424d517377435159440a5651514745774a56557a425a4d424d4742797147534d34394167454743437147534d3439417745484130494142454e464738787a79645752664b3932626d47760a502b6d4168393150457956374a683646474a64356e644539614248375233453441377562726c682f7a4e3343347876706f6f75476c69724d62612b57326c6a750a7970616a6762557767624977487759445652306a42426777466f4155496d554d316c71644e496e7a6737535655723951477a6b6e4271777755675944565230660a42457377535442486f45576751345a426148523063484d364c79396a5a584a3061575a70593246305a584d7564484a316333526c5a484e6c636e5a705932567a0a4c6d6c75644756734c6d4e766253394a626e526c62464e4857464a76623352445153356b5a584977485159445652304f42425945464834346774583756536c4b0a51456d4f5259514436525352766652564d41344741315564447745422f775145417749477744414d42674e5648524d4241663845416a41414d416f47434371470a534d343942414d4341306b414d455943495144646d6d5275416f3371434f38544331496f4a4d4954416f4f457734646c674542487a537a3154754d53544149680a414b5654714f6b7435392b636f304f336d3368432b763546623030466a5957636765753345696a4f554c6f350a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a2d2d2d2d2d424547494e2043455254494649434154452d2d2d2d2d0a4d4949436a7a4343416a53674177494241674955496d554d316c71644e496e7a6737535655723951477a6b6e42717777436759494b6f5a497a6a3045417749770a614445614d4267474131554541777752535735305a5777675530645949464a766233516751304578476a415942674e5642416f4d45556c756447567349454e760a636e4276636d4630615739754d5251774567594456515148444174545957353059534244624746795954454c4d416b47413155454341774351304578437a414a0a42674e5642415954416c56544d423458445445344d4455794d5445774e4455784d466f58445451354d54497a4d54497a4e546b314f566f77614445614d4267470a4131554541777752535735305a5777675530645949464a766233516751304578476a415942674e5642416f4d45556c756447567349454e76636e4276636d46300a615739754d5251774567594456515148444174545957353059534244624746795954454c4d416b47413155454341774351304578437a414a42674e56424159540a416c56544d466b77457759484b6f5a497a6a3043415159494b6f5a497a6a3044415163445167414543366e45774d4449595a4f6a2f69505773437a61454b69370a314f694f534c52466857476a626e42564a66566e6b59347533496a6b4459594c304d784f346d717379596a6c42616c54565978465032734a424b357a6c4b4f420a757a43427544416642674e5648534d4547444157674251695a517a575770303069664f44744a5653763141624f5363477244425342674e5648523845537a424a0a4d45656752614244686b466f64485277637a6f764c324e6c636e52705a6d6c6a5958526c63793530636e567a6447566b63325679646d6c6a5a584d75615735300a5a577775593239744c306c756447567355306459556d397664454e424c6d526c636a416442674e564851344546675155496d554d316c71644e496e7a673753560a55723951477a6b6e4271777744675944565230504151482f42415144416745474d42494741315564457745422f7751494d4159424166384341514577436759490a4b6f5a497a6a3045417749445351417752674968414f572f35516b522b533943695344634e6f6f774c7550524c735747662f59693747535839344267775477670a41694541344a306c72486f4d732b586f356f2f7358364f39515778485241765a55474f6452513763767152586171493d0a2d2d2d2d2d454e442043455254494649434154452d2d2d2d2d0a" + } +} diff --git a/tests/common/runners.ts b/tests/common/runners.ts index 6ecee80..7595305 100644 --- a/tests/common/runners.ts +++ b/tests/common/runners.ts @@ -162,6 +162,10 @@ export const generateTestPromises = ( promises.push(runTest({ proofType })); break; + case ProofType.tee: + promises.push(runTest({ proofType })); + break; + // ADD_NEW_PROOF_TYPE - generateTestPromises } }); diff --git a/tests/common/scripts/refresh-tee-tcb.mjs b/tests/common/scripts/refresh-tee-tcb.mjs new file mode 100644 index 0000000..d26b17c --- /dev/null +++ b/tests/common/scripts/refresh-tee-tcb.mjs @@ -0,0 +1,51 @@ +#!/usr/bin/env node + +/** + * Fetches fresh Intel TDX TCB info and updates the TEE test fixture. + * + * The TCB info expires roughly every 30 days, so this script should be run + * before TEE integration tests to ensure the fixture data is current. + * + * Usage: node tests/common/scripts/refresh-tee-tcb.mjs + */ + +import { readFileSync, writeFileSync } from 'fs'; +import { get } from 'https'; +import { resolve, dirname } from 'path'; +import { fileURLToPath } from 'url'; + +const __dirname = dirname(fileURLToPath(import.meta.url)); + +const TCB_URL = + 'https://api.trustedservices.intel.com/tdx/certification/v4/tcb?fmspc=B0C06F000000&update=standard'; +const TEE_JSON_PATH = resolve(__dirname, '../data/tee.json'); + +function fetchTcbInfo() { + return new Promise((resolve, reject) => { + get(TCB_URL, (res) => { + if (res.statusCode !== 200) { + reject(new Error(`Intel TCB API returned status ${res.statusCode}`)); + return; + } + const chunks = []; + res.on('data', (chunk) => chunks.push(chunk)); + res.on('end', () => resolve(Buffer.concat(chunks).toString('utf8'))); + res.on('error', reject); + }).on('error', reject); + }); +} + +const tcbJson = await fetchTcbInfo(); +const parsed = JSON.parse(tcbJson); + +console.log( + `TCB issueDate: ${parsed.tcbInfo.issueDate}, nextUpdate: ${parsed.tcbInfo.nextUpdate}`, +); + +const tcbHex = '0x' + Buffer.from(tcbJson, 'utf8').toString('hex'); + +const teeData = JSON.parse(readFileSync(TEE_JSON_PATH, 'utf8')); +teeData.vk.tcbResponse = tcbHex; +writeFileSync(TEE_JSON_PATH, JSON.stringify(teeData, null, 2) + '\n'); + +console.log(`Updated ${TEE_JSON_PATH}`); diff --git a/tests/common/utils.ts b/tests/common/utils.ts index 52f0a25..67cff11 100644 --- a/tests/common/utils.ts +++ b/tests/common/utils.ts @@ -66,6 +66,10 @@ export function getProofFilenameComponents(proofOptions: ProofOptions): string[] // No Config break; } + case ProofType.tee: { + // No Config + break; + } // ADD_NEW_PROOF_TYPE } @@ -567,6 +571,8 @@ export function dispatchBuilder( return methodMap.fflonk(); case ProofType.sp1: return methodMap.sp1(); + case ProofType.tee: + return methodMap.tee(); // ADD_NEW_PROOF_TYPE - used for tests. default: throw new Error(`Unsupported proof type: ${proofOptions.proofType}`);