@reclaimprotocol/attestor-core 5.0.1-beta.2 → 5.0.1-beta.22
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/browser/resources/attestor-browser.min.mjs +4512 -0
- package/lib/avs/abis/avsDirectoryABI.js +338 -341
- package/lib/avs/abis/delegationABI.js +1 -4
- package/lib/avs/abis/registryABI.js +719 -722
- package/lib/avs/client/create-claim-on-avs.js +129 -157
- package/lib/avs/config.js +18 -24
- package/lib/avs/contracts/ReclaimServiceManager.js +1 -0
- package/lib/avs/contracts/common.js +1 -0
- package/lib/avs/contracts/factories/ReclaimServiceManager__factory.js +1139 -1156
- package/lib/avs/contracts/factories/index.js +4 -4
- package/lib/avs/contracts/index.js +2 -6
- package/lib/avs/types/index.js +1 -0
- package/lib/avs/utils/contracts.js +30 -50
- package/lib/avs/utils/register.js +75 -70
- package/lib/avs/utils/tasks.js +38 -45
- package/lib/client/create-claim.js +402 -431
- package/lib/client/tunnels/make-rpc-tcp-tunnel.js +46 -48
- package/lib/client/tunnels/make-rpc-tls-tunnel.js +125 -121
- package/lib/client/utils/attestor-pool.js +23 -22
- package/lib/client/utils/client-socket.js +86 -109
- package/lib/client/utils/message-handler.js +79 -89
- package/lib/config/index.js +40 -58
- package/lib/external-rpc/benchmark.js +61 -74
- package/lib/external-rpc/event-bus.js +12 -15
- package/lib/external-rpc/handle-incoming-msg.js +216 -225
- package/lib/external-rpc/jsc-polyfills/1.js +70 -68
- package/lib/external-rpc/jsc-polyfills/2.js +17 -12
- package/lib/external-rpc/jsc-polyfills/event.js +10 -15
- package/lib/external-rpc/jsc-polyfills/index.js +2 -2
- package/lib/external-rpc/jsc-polyfills/ws.js +77 -79
- package/lib/external-rpc/setup-browser.js +28 -28
- package/lib/external-rpc/setup-jsc.js +17 -17
- package/lib/external-rpc/types.js +1 -0
- package/lib/external-rpc/utils.js +89 -89
- package/lib/external-rpc/zk.js +55 -50
- package/lib/index.js +2 -6
- package/lib/mechain/abis/governanceABI.js +457 -460
- package/lib/mechain/abis/taskABI.js +502 -505
- package/lib/mechain/client/create-claim-on-mechain.js +24 -29
- package/lib/mechain/constants/index.js +3 -8
- package/lib/mechain/types/index.js +1 -0
- package/lib/proto/api.js +4200 -4087
- package/lib/proto/tee-bundle.js +1261 -1241
- package/lib/providers/http/index.js +616 -603
- package/lib/providers/http/patch-parse5-tree.js +27 -29
- package/lib/providers/http/utils.js +289 -248
- package/lib/providers/index.js +3 -6
- package/lib/server/create-server.js +89 -91
- package/lib/server/handlers/claimTeeBundle.js +231 -211
- package/lib/server/handlers/claimTunnel.js +66 -73
- package/lib/server/handlers/completeClaimOnChain.js +20 -25
- package/lib/server/handlers/createClaimOnChain.js +21 -27
- package/lib/server/handlers/createTaskOnMechain.js +40 -50
- package/lib/server/handlers/createTunnel.js +85 -90
- package/lib/server/handlers/disconnectTunnel.js +4 -7
- package/lib/server/handlers/fetchCertificateBytes.js +37 -53
- package/lib/server/handlers/index.js +21 -24
- package/lib/server/handlers/init.js +27 -28
- package/lib/server/handlers/toprf.js +13 -16
- package/lib/server/socket.js +97 -100
- package/lib/server/tunnels/make-tcp-tunnel.js +161 -186
- package/lib/server/utils/apm.js +32 -25
- package/lib/server/utils/assert-valid-claim-request.js +305 -334
- package/lib/server/utils/config-env.js +2 -2
- package/lib/server/utils/dns.js +12 -18
- package/lib/server/utils/gcp-attestation.js +233 -181
- package/lib/server/utils/generics.d.ts +1 -1
- package/lib/server/utils/generics.js +43 -37
- package/lib/server/utils/iso.js +253 -256
- package/lib/server/utils/keep-alive.js +36 -36
- package/lib/server/utils/nitro-attestation.js +295 -220
- package/lib/server/utils/oprf-raw.js +48 -55
- package/lib/server/utils/process-handshake.js +200 -218
- package/lib/server/utils/proxy-session.js +5 -5
- package/lib/server/utils/tee-oprf-mpc-verification.js +82 -78
- package/lib/server/utils/tee-oprf-verification.js +165 -142
- package/lib/server/utils/tee-transcript-reconstruction.js +176 -129
- package/lib/server/utils/tee-verification.js +397 -334
- package/lib/server/utils/validation.js +30 -37
- package/lib/types/bgp.js +1 -0
- package/lib/types/claims.js +1 -0
- package/lib/types/client.js +1 -0
- package/lib/types/general.js +1 -0
- package/lib/types/handlers.js +1 -0
- package/lib/types/providers.d.ts +3 -2
- package/lib/types/providers.gen.js +9 -15
- package/lib/types/providers.js +1 -0
- package/lib/types/rpc.js +1 -0
- package/lib/types/signatures.d.ts +1 -2
- package/lib/types/signatures.js +1 -0
- package/lib/types/tunnel.js +1 -0
- package/lib/types/zk.js +1 -0
- package/lib/utils/auth.js +54 -66
- package/lib/utils/b64-json.js +15 -15
- package/lib/utils/bgp-listener.js +107 -111
- package/lib/utils/claims.js +89 -80
- package/lib/utils/env.js +13 -17
- package/lib/utils/error.js +43 -47
- package/lib/utils/generics.js +284 -235
- package/lib/utils/http-parser.js +232 -187
- package/lib/utils/logger.js +80 -71
- package/lib/utils/prepare-packets.js +69 -67
- package/lib/utils/redactions.js +163 -121
- package/lib/utils/retries.js +22 -24
- package/lib/utils/signatures/eth.js +29 -28
- package/lib/utils/signatures/index.js +5 -10
- package/lib/utils/socket-base.js +84 -88
- package/lib/utils/tls.js +28 -28
- package/lib/utils/ws.js +19 -19
- package/lib/utils/zk.js +542 -582
- package/package.json +12 -5
- package/lib/external-rpc/global.d.js +0 -0
- package/lib/scripts/build-browser.d.ts +0 -1
- package/lib/scripts/build-jsc.d.ts +0 -1
- package/lib/scripts/build-lib.d.ts +0 -1
- package/lib/scripts/check-avs-registration.d.ts +0 -1
- package/lib/scripts/check-avs-registration.js +0 -28
- package/lib/scripts/fallbacks/crypto.d.ts +0 -1
- package/lib/scripts/fallbacks/crypto.js +0 -4
- package/lib/scripts/fallbacks/empty.d.ts +0 -3
- package/lib/scripts/fallbacks/empty.js +0 -4
- package/lib/scripts/fallbacks/re2.d.ts +0 -1
- package/lib/scripts/fallbacks/re2.js +0 -7
- package/lib/scripts/fallbacks/snarkjs.d.ts +0 -1
- package/lib/scripts/fallbacks/snarkjs.js +0 -10
- package/lib/scripts/fallbacks/stwo.d.ts +0 -6
- package/lib/scripts/fallbacks/stwo.js +0 -159
- package/lib/scripts/generate-provider-types.d.ts +0 -5
- package/lib/scripts/generate-provider-types.js +0 -101
- package/lib/scripts/generate-receipt.d.ts +0 -9
- package/lib/scripts/generate-receipt.js +0 -101
- package/lib/scripts/generate-toprf-keys.d.ts +0 -1
- package/lib/scripts/generate-toprf-keys.js +0 -24
- package/lib/scripts/jsc-cli-rpc.d.ts +0 -1
- package/lib/scripts/jsc-cli-rpc.js +0 -35
- package/lib/scripts/register-avs-operator.d.ts +0 -1
- package/lib/scripts/register-avs-operator.js +0 -3
- package/lib/scripts/start-server.d.ts +0 -1
- package/lib/scripts/start-server.js +0 -11
- package/lib/scripts/update-avs-metadata.d.ts +0 -1
- package/lib/scripts/update-avs-metadata.js +0 -20
- package/lib/scripts/utils.d.ts +0 -1
- package/lib/scripts/utils.js +0 -10
- package/lib/scripts/whitelist-operator.d.ts +0 -1
- package/lib/scripts/whitelist-operator.js +0 -16
package/lib/utils/claims.js
CHANGED
|
@@ -1,89 +1,98 @@
|
|
|
1
|
-
import canonicalize from
|
|
2
|
-
import { keccak256 } from
|
|
1
|
+
import canonicalize from 'canonicalize';
|
|
2
|
+
import { keccak256 } from 'ethers';
|
|
3
3
|
import { DEFAULT_METADATA } from "../config/index.js";
|
|
4
4
|
import { ClaimTunnelResponse } from "../proto/api.js";
|
|
5
|
-
import { SIGNATURES, strToUint8Array } from "
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
5
|
+
import { SIGNATURES, strToUint8Array } from "../..";
|
|
6
|
+
/**
|
|
7
|
+
* Creates the standard string to sign for a claim.
|
|
8
|
+
* This data is what the attestor will sign when it successfully
|
|
9
|
+
* verifies a claim.
|
|
10
|
+
*/
|
|
11
|
+
export function createSignDataForClaim(data) {
|
|
12
|
+
const lines = [
|
|
13
|
+
getIdentifierFromClaimInfo(data),
|
|
14
|
+
// we lowercase the owner to ensure that the
|
|
15
|
+
// ETH addresses always serialize the same way
|
|
16
|
+
data.owner.toLowerCase(),
|
|
17
|
+
data.timestampS.toString(),
|
|
18
|
+
data.epoch.toString(),
|
|
19
|
+
];
|
|
20
|
+
return lines.join('\n');
|
|
16
21
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
if (
|
|
34
|
-
|
|
22
|
+
/**
|
|
23
|
+
* Verify the claim tunnel response from a attestor.
|
|
24
|
+
*
|
|
25
|
+
* If you'd only like to verify the claim signature, you can
|
|
26
|
+
* optionally only pass "claim" & "signatures.claimSignature"
|
|
27
|
+
* to this function.
|
|
28
|
+
*
|
|
29
|
+
* The successful run of this function means that the claim
|
|
30
|
+
* is valid, and the attestor that signed the claim is valid.
|
|
31
|
+
*/
|
|
32
|
+
export async function assertValidClaimSignatures({ signatures, ...res }, metadata = DEFAULT_METADATA) {
|
|
33
|
+
if (!signatures) {
|
|
34
|
+
throw new Error('No signatures provided');
|
|
35
|
+
}
|
|
36
|
+
const { resultSignature, claimSignature, attestorAddress } = signatures;
|
|
37
|
+
const { verify } = SIGNATURES[metadata.signatureType];
|
|
38
|
+
if (signatures?.resultSignature) {
|
|
39
|
+
const resBytes = ClaimTunnelResponse
|
|
40
|
+
.encode(ClaimTunnelResponse.create(res)).finish();
|
|
41
|
+
const verified = await verify(resBytes, resultSignature, attestorAddress);
|
|
42
|
+
if (!verified) {
|
|
43
|
+
throw new Error('Invalid result signature');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// claim wasn't generated -- i.e. the transcript
|
|
47
|
+
// did not contain the necessary data
|
|
48
|
+
if (!res.claim) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const signData = createSignDataForClaim(res.claim);
|
|
52
|
+
const verifiedClaim = await verify(strToUint8Array(signData), claimSignature, attestorAddress);
|
|
53
|
+
if (!verifiedClaim) {
|
|
54
|
+
throw new Error('Invalid claim signature');
|
|
35
55
|
}
|
|
36
|
-
}
|
|
37
|
-
if (!res.claim) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
const signData = createSignDataForClaim(res.claim);
|
|
41
|
-
const verifiedClaim = await verify(
|
|
42
|
-
strToUint8Array(signData),
|
|
43
|
-
claimSignature,
|
|
44
|
-
attestorAddress
|
|
45
|
-
);
|
|
46
|
-
if (!verifiedClaim) {
|
|
47
|
-
throw new Error("Invalid claim signature");
|
|
48
|
-
}
|
|
49
56
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
+
/**
|
|
58
|
+
* Generates a unique identifier for given claim info
|
|
59
|
+
* @param info
|
|
60
|
+
* @returns
|
|
61
|
+
*/
|
|
62
|
+
export function getIdentifierFromClaimInfo(info) {
|
|
63
|
+
//re-canonicalize context if it's not empty
|
|
64
|
+
if (info.context?.length > 0) {
|
|
65
|
+
try {
|
|
66
|
+
const ctx = JSON.parse(info.context);
|
|
67
|
+
info.context = canonicalStringify(ctx);
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
throw new Error('unable to parse non-empty context. Must be JSON');
|
|
71
|
+
}
|
|
57
72
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
${info.context || ""}`;
|
|
62
|
-
return keccak256(strToUint8Array(str)).toLowerCase();
|
|
73
|
+
const str = `${info.provider}\n${info.parameters}\n${info.context || ''}`;
|
|
74
|
+
//console.log('Identifier: ' + btoa(str))
|
|
75
|
+
return keccak256(strToUint8Array(str)).toLowerCase();
|
|
63
76
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
77
|
+
/**
|
|
78
|
+
* Canonically stringifies an object, so that the same object will always
|
|
79
|
+
* produce the same string despite the order of keys
|
|
80
|
+
*/
|
|
81
|
+
export function canonicalStringify(params) {
|
|
82
|
+
if (!params) {
|
|
83
|
+
return '';
|
|
84
|
+
}
|
|
85
|
+
// have to cast as ESM isn't correctly typing this
|
|
86
|
+
return canonicalize(params) || '';
|
|
69
87
|
}
|
|
70
|
-
function hashProviderParams(params) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
strToUint8Array(serializedParams)
|
|
81
|
-
).toLowerCase();
|
|
88
|
+
export function hashProviderParams(params) {
|
|
89
|
+
const filteredParams = {
|
|
90
|
+
url: params.url,
|
|
91
|
+
method: params.method,
|
|
92
|
+
body: params.body,
|
|
93
|
+
responseMatches: params.responseMatches,
|
|
94
|
+
responseRedactions: params.responseRedactions
|
|
95
|
+
};
|
|
96
|
+
const serializedParams = canonicalStringify(filteredParams);
|
|
97
|
+
return keccak256(strToUint8Array(serializedParams)).toLowerCase();
|
|
82
98
|
}
|
|
83
|
-
export {
|
|
84
|
-
assertValidClaimSignatures,
|
|
85
|
-
canonicalStringify,
|
|
86
|
-
createSignDataForClaim,
|
|
87
|
-
getIdentifierFromClaimInfo,
|
|
88
|
-
hashProviderParams
|
|
89
|
-
};
|
package/lib/utils/env.js
CHANGED
|
@@ -1,19 +1,15 @@
|
|
|
1
|
-
function detectEnvironment() {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
export function detectEnvironment() {
|
|
2
|
+
if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {
|
|
3
|
+
return 'react-native';
|
|
4
|
+
}
|
|
5
|
+
if (typeof window !== 'undefined') {
|
|
6
|
+
return 'browser';
|
|
7
|
+
}
|
|
8
|
+
return 'node';
|
|
9
9
|
}
|
|
10
|
-
function getEnvVariable(name) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
export function getEnvVariable(name) {
|
|
11
|
+
if (typeof process === 'undefined') {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
return process?.env[name];
|
|
15
15
|
}
|
|
16
|
-
export {
|
|
17
|
-
detectEnvironment,
|
|
18
|
-
getEnvVariable
|
|
19
|
-
};
|
package/lib/utils/error.js
CHANGED
|
@@ -1,54 +1,50 @@
|
|
|
1
1
|
import { ErrorCode, ErrorData } from "../proto/api.js";
|
|
2
2
|
const PROTO_ERROR = ErrorData.fromJSON({});
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
)
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Represents an error that can be thrown by the Attestor Core
|
|
5
|
+
* or server. Provides a code, and optional data
|
|
6
|
+
* to pass along with the error.
|
|
7
|
+
*/
|
|
8
|
+
export class AttestorError extends Error {
|
|
9
|
+
name = 'AttestorError';
|
|
10
|
+
code;
|
|
11
|
+
data;
|
|
12
|
+
constructor(code, message, data) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.code = code;
|
|
15
|
+
this.data = data;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Encodes the error as a ErrorData
|
|
19
|
+
* protobuf message
|
|
20
|
+
*/
|
|
21
|
+
toProto() {
|
|
22
|
+
return ErrorData.create({
|
|
23
|
+
code: ErrorCode[this.code],
|
|
24
|
+
message: this.message,
|
|
25
|
+
data: JSON.stringify(this.data)
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
static fromProto(data = PROTO_ERROR) {
|
|
29
|
+
return new AttestorError(typeof data.code === 'number'
|
|
30
|
+
? getKeyForValue(ErrorCode, data.code) || 'UNRECOGNIZED'
|
|
31
|
+
: data.code, data.message, data.data ? JSON.parse(data.data) : undefined);
|
|
32
|
+
}
|
|
33
|
+
static fromError(err, code = 'ERROR_INTERNAL') {
|
|
34
|
+
if (err instanceof AttestorError) {
|
|
35
|
+
return err;
|
|
36
|
+
}
|
|
37
|
+
return new AttestorError(code, err.message);
|
|
38
|
+
}
|
|
39
|
+
static badRequest(message, data) {
|
|
40
|
+
return new AttestorError('ERROR_BAD_REQUEST', message, data);
|
|
33
41
|
}
|
|
34
|
-
return new AttestorError(code, err.message);
|
|
35
|
-
}
|
|
36
|
-
static badRequest(message, data) {
|
|
37
|
-
return new AttestorError(
|
|
38
|
-
"ERROR_BAD_REQUEST",
|
|
39
|
-
message,
|
|
40
|
-
data
|
|
41
|
-
);
|
|
42
|
-
}
|
|
43
42
|
}
|
|
44
43
|
function getKeyForValue(obj, value) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
for (const key in obj) {
|
|
45
|
+
if (obj[key] === value) {
|
|
46
|
+
return key;
|
|
47
|
+
}
|
|
48
48
|
}
|
|
49
|
-
|
|
50
|
-
return void 0;
|
|
49
|
+
return undefined;
|
|
51
50
|
}
|
|
52
|
-
export {
|
|
53
|
-
AttestorError
|
|
54
|
-
};
|