@docknetwork/wallet-sdk-wasm 1.7.7-alpha.0 → 1.9.0
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/package.json +7 -20
- package/rollup.config.mjs +1 -0
- package/src/globals.d.ts +4 -1
- package/src/services/blockchain/cached-did-resolver.ts +4 -3
- package/src/services/blockchain/normalize-did-document.ts +73 -0
- package/src/services/blockchain/service.ts +0 -2
- package/src/services/credential/bbs-revocation.test.js +147 -0
- package/src/services/credential/bbs-revocation.ts +65 -18
- package/src/services/credential/config.ts +7 -0
- package/src/services/credential/index.test.js +261 -17
- package/src/services/credential/oid4vci.js +44 -0
- package/src/services/credential/oid4vci.test.js +162 -0
- package/src/services/credential/pex-helpers.js +77 -31
- package/src/services/credential/pex-helpers.test.js +4 -4
- package/src/services/credential/sd-jwt.ts +41 -5
- package/src/services/credential/service-rpc.js +6 -0
- package/src/services/credential/service.ts +171 -16
- package/src/services/credential/utils.js +3 -5
- package/src/services/delegation/index.android.js +3 -0
- package/src/services/delegation/index.ios.js +3 -0
- package/src/services/delegation/index.ts +1 -0
- package/src/services/delegation/service-rpc.ts +21 -0
- package/src/services/delegation/service.ts +59 -0
- package/src/services/edv/service-rpc.js +18 -2
- package/src/services/edv/service.test.js +327 -0
- package/src/services/edv/service.ts +103 -13
- package/src/services/index.js +2 -0
- package/src/wallet/rpc-storage-interface.js +9 -4
- package/lib/core/crypto.js +0 -45
- package/lib/core/crypto.mjs +0 -33
- package/lib/core/format-utils.js +0 -51
- package/lib/core/format-utils.mjs +0 -42
- package/lib/core/keychain.js +0 -61
- package/lib/core/keychain.mjs +0 -37
- package/lib/core/logger.js +0 -13
- package/lib/core/logger.mjs +0 -9
- package/lib/core/storage.js +0 -14
- package/lib/core/storage.mjs +0 -9
- package/lib/core/validation.js +0 -29
- package/lib/core/validation.mjs +0 -16
- package/lib/core/webview-logger.js +0 -49
- package/lib/core/webview-logger.mjs +0 -41
- package/lib/errors.js +0 -17
- package/lib/errors.mjs +0 -12
- package/lib/events.js +0 -18
- package/lib/events.mjs +0 -13
- package/lib/index.js +0 -146
- package/lib/index.mjs +0 -144
- package/lib/logger.js +0 -22
- package/lib/logger.mjs +0 -17
- package/lib/modules/event-manager.js +0 -46
- package/lib/modules/event-manager.mjs +0 -37
- package/lib/modules/network-manager.js +0 -80
- package/lib/modules/network-manager.mjs +0 -71
- package/lib/mrklt.js +0 -2
- package/lib/mrklt.mjs +0 -1
- package/lib/rpc-client.js +0 -83
- package/lib/rpc-client.mjs +0 -73
- package/lib/rpc-server.js +0 -97
- package/lib/rpc-server.mjs +0 -95
- package/lib/rpc-util.js +0 -113
- package/lib/rpc-util.mjs +0 -103
- package/lib/sandbox-rpc-server.js +0 -28
- package/lib/sandbox-rpc-server.mjs +0 -26
- package/lib/sandbox.js +0 -102
- package/lib/sandbox.mjs +0 -100
- package/lib/services/blockchain/cached-did-resolver.js +0 -113
- package/lib/services/blockchain/cached-did-resolver.mjs +0 -109
- package/lib/services/blockchain/configs.js +0 -7
- package/lib/services/blockchain/configs.mjs +0 -3
- package/lib/services/blockchain/index.android.js +0 -18
- package/lib/services/blockchain/index.android.mjs +0 -14
- package/lib/services/blockchain/index.ios.js +0 -18
- package/lib/services/blockchain/index.ios.mjs +0 -14
- package/lib/services/blockchain/index.js +0 -36
- package/lib/services/blockchain/index.mjs +0 -28
- package/lib/services/blockchain/service-rpc.js +0 -72
- package/lib/services/blockchain/service-rpc.mjs +0 -68
- package/lib/services/blockchain/service.js +0 -312
- package/lib/services/blockchain/service.mjs +0 -306
- package/lib/services/credential/bbs-revocation.js +0 -92
- package/lib/services/credential/bbs-revocation.mjs +0 -87
- package/lib/services/credential/bound-check.js +0 -77
- package/lib/services/credential/bound-check.mjs +0 -64
- package/lib/services/credential/config.js +0 -56
- package/lib/services/credential/config.mjs +0 -47
- package/lib/services/credential/delegatable-credentials.js +0 -300
- package/lib/services/credential/delegatable-credentials.mjs +0 -263
- package/lib/services/credential/index.android.js +0 -19
- package/lib/services/credential/index.android.mjs +0 -15
- package/lib/services/credential/index.ios.js +0 -19
- package/lib/services/credential/index.ios.mjs +0 -15
- package/lib/services/credential/index.js +0 -106
- package/lib/services/credential/index.mjs +0 -67
- package/lib/services/credential/pex-helpers.js +0 -333
- package/lib/services/credential/pex-helpers.mjs +0 -319
- package/lib/services/credential/range-proofs-example.js +0 -107
- package/lib/services/credential/range-proofs-example.mjs +0 -103
- package/lib/services/credential/sd-jwt.js +0 -214
- package/lib/services/credential/sd-jwt.mjs +0 -200
- package/lib/services/credential/service-rpc.js +0 -61
- package/lib/services/credential/service-rpc.mjs +0 -57
- package/lib/services/credential/service.js +0 -683
- package/lib/services/credential/service.mjs +0 -672
- package/lib/services/credential/utils.js +0 -103
- package/lib/services/credential/utils.mjs +0 -78
- package/lib/services/dids/config.js +0 -40
- package/lib/services/dids/config.mjs +0 -31
- package/lib/services/dids/index.android.js +0 -19
- package/lib/services/dids/index.android.mjs +0 -15
- package/lib/services/dids/index.ios.js +0 -19
- package/lib/services/dids/index.ios.mjs +0 -15
- package/lib/services/dids/index.js +0 -23
- package/lib/services/dids/index.mjs +0 -19
- package/lib/services/dids/keypair-utils.js +0 -142
- package/lib/services/dids/keypair-utils.mjs +0 -113
- package/lib/services/dids/service-rpc.js +0 -37
- package/lib/services/dids/service-rpc.mjs +0 -33
- package/lib/services/dids/service.js +0 -100
- package/lib/services/dids/service.mjs +0 -92
- package/lib/services/edv/configs.js +0 -25
- package/lib/services/edv/configs.mjs +0 -16
- package/lib/services/edv/hmac.js +0 -88
- package/lib/services/edv/hmac.mjs +0 -63
- package/lib/services/edv/index.android.js +0 -19
- package/lib/services/edv/index.android.mjs +0 -15
- package/lib/services/edv/index.ios.js +0 -19
- package/lib/services/edv/index.ios.mjs +0 -15
- package/lib/services/edv/index.js +0 -32
- package/lib/services/edv/index.mjs +0 -24
- package/lib/services/edv/service-rpc.js +0 -78
- package/lib/services/edv/service-rpc.mjs +0 -74
- package/lib/services/edv/service.js +0 -370
- package/lib/services/edv/service.mjs +0 -357
- package/lib/services/index.js +0 -94
- package/lib/services/index.mjs +0 -92
- package/lib/services/pex/config.js +0 -29
- package/lib/services/pex/config.mjs +0 -20
- package/lib/services/pex/index.android.js +0 -19
- package/lib/services/pex/index.android.mjs +0 -15
- package/lib/services/pex/index.ios.js +0 -19
- package/lib/services/pex/index.ios.mjs +0 -15
- package/lib/services/pex/index.js +0 -12
- package/lib/services/pex/index.mjs +0 -4
- package/lib/services/pex/service-rpc.js +0 -39
- package/lib/services/pex/service-rpc.mjs +0 -35
- package/lib/services/pex/service.js +0 -91
- package/lib/services/pex/service.mjs +0 -86
- package/lib/services/pex/tests/jest.config.js +0 -25
- package/lib/services/pex/tests/jest.config.mjs +0 -23
- package/lib/services/relay-service/configs.js +0 -45
- package/lib/services/relay-service/configs.mjs +0 -36
- package/lib/services/relay-service/index.android.js +0 -21
- package/lib/services/relay-service/index.android.mjs +0 -17
- package/lib/services/relay-service/index.ios.js +0 -21
- package/lib/services/relay-service/index.ios.mjs +0 -17
- package/lib/services/relay-service/index.js +0 -14
- package/lib/services/relay-service/index.mjs +0 -6
- package/lib/services/relay-service/service-rpc.js +0 -47
- package/lib/services/relay-service/service-rpc.mjs +0 -43
- package/lib/services/relay-service/service.js +0 -181
- package/lib/services/relay-service/service.mjs +0 -173
- package/lib/services/rpc-service-client.js +0 -36
- package/lib/services/rpc-service-client.mjs +0 -28
- package/lib/services/sandbox.js +0 -10
- package/lib/services/sandbox.mjs +0 -8
- package/lib/services/storage/configs.js +0 -7
- package/lib/services/storage/configs.mjs +0 -3
- package/lib/services/storage/index.android.js +0 -18
- package/lib/services/storage/index.android.mjs +0 -14
- package/lib/services/storage/index.ios.js +0 -18
- package/lib/services/storage/index.ios.mjs +0 -14
- package/lib/services/storage/index.js +0 -26
- package/lib/services/storage/index.mjs +0 -24
- package/lib/services/storage/service-rpc.js +0 -37
- package/lib/services/storage/service-rpc.mjs +0 -33
- package/lib/services/storage/service.js +0 -32
- package/lib/services/storage/service.mjs +0 -27
- package/lib/services/test-utils.js +0 -98
- package/lib/services/test-utils.mjs +0 -84
- package/lib/services/util-crypto/configs.js +0 -23
- package/lib/services/util-crypto/configs.mjs +0 -15
- package/lib/services/util-crypto/index.android.js +0 -19
- package/lib/services/util-crypto/index.android.mjs +0 -15
- package/lib/services/util-crypto/index.ios.js +0 -19
- package/lib/services/util-crypto/index.ios.mjs +0 -15
- package/lib/services/util-crypto/index.js +0 -14
- package/lib/services/util-crypto/index.mjs +0 -6
- package/lib/services/util-crypto/service-rpc.js +0 -42
- package/lib/services/util-crypto/service-rpc.mjs +0 -38
- package/lib/services/util-crypto/service.js +0 -108
- package/lib/services/util-crypto/service.mjs +0 -83
- package/lib/services/wallet/configs.js +0 -32
- package/lib/services/wallet/configs.mjs +0 -23
- package/lib/services/wallet/index.android.js +0 -21
- package/lib/services/wallet/index.android.mjs +0 -17
- package/lib/services/wallet/index.ios.js +0 -21
- package/lib/services/wallet/index.ios.mjs +0 -17
- package/lib/services/wallet/index.js +0 -17
- package/lib/services/wallet/index.mjs +0 -9
- package/lib/services/wallet/service-rpc.js +0 -33
- package/lib/services/wallet/service-rpc.mjs +0 -29
- package/lib/services/wallet/service.js +0 -62
- package/lib/services/wallet/service.mjs +0 -57
- package/lib/setup-nodejs.js +0 -93
- package/lib/setup-nodejs.mjs +0 -91
- package/lib/setup-tests.js +0 -92
- package/lib/setup-tests.mjs +0 -90
- package/lib/src/core/crypto.d.ts +0 -8
- package/lib/src/core/crypto.d.ts.map +0 -1
- package/lib/src/core/format-utils.d.ts +0 -26
- package/lib/src/core/format-utils.d.ts.map +0 -1
- package/lib/src/core/logger.d.ts +0 -3
- package/lib/src/core/logger.d.ts.map +0 -1
- package/lib/src/core/storage.d.ts +0 -8
- package/lib/src/core/storage.d.ts.map +0 -1
- package/lib/src/core/validation.d.ts +0 -6
- package/lib/src/core/validation.d.ts.map +0 -1
- package/lib/src/errors.d.ts +0 -7
- package/lib/src/errors.d.ts.map +0 -1
- package/lib/src/logger.d.ts +0 -5
- package/lib/src/logger.d.ts.map +0 -1
- package/lib/src/modules/event-manager.d.ts +0 -12
- package/lib/src/modules/event-manager.d.ts.map +0 -1
- package/lib/src/modules/network-manager.d.ts +0 -32
- package/lib/src/modules/network-manager.d.ts.map +0 -1
- package/lib/src/rpc-client.d.ts +0 -4
- package/lib/src/rpc-client.d.ts.map +0 -1
- package/lib/src/rpc-util.d.ts +0 -11
- package/lib/src/rpc-util.d.ts.map +0 -1
- package/lib/src/services/blockchain/cached-did-resolver.d.ts +0 -28
- package/lib/src/services/blockchain/cached-did-resolver.d.ts.map +0 -1
- package/lib/src/services/blockchain/cached-did-resolver.test.d.ts +0 -2
- package/lib/src/services/blockchain/cached-did-resolver.test.d.ts.map +0 -1
- package/lib/src/services/blockchain/configs.d.ts +0 -7
- package/lib/src/services/blockchain/configs.d.ts.map +0 -1
- package/lib/src/services/blockchain/service.d.ts +0 -155
- package/lib/src/services/blockchain/service.d.ts.map +0 -1
- package/lib/src/services/credential/bbs-revocation.d.ts +0 -10
- package/lib/src/services/credential/bbs-revocation.d.ts.map +0 -1
- package/lib/src/services/credential/bound-check.d.ts +0 -61
- package/lib/src/services/credential/bound-check.d.ts.map +0 -1
- package/lib/src/services/credential/bound-check.test.d.ts +0 -2
- package/lib/src/services/credential/bound-check.test.d.ts.map +0 -1
- package/lib/src/services/credential/config.d.ts +0 -10
- package/lib/src/services/credential/config.d.ts.map +0 -1
- package/lib/src/services/credential/delegatable-credentials.d.ts +0 -272
- package/lib/src/services/credential/delegatable-credentials.d.ts.map +0 -1
- package/lib/src/services/credential/index.d.ts +0 -35
- package/lib/src/services/credential/index.d.ts.map +0 -1
- package/lib/src/services/credential/pex-helpers.d.ts +0 -23
- package/lib/src/services/credential/pex-helpers.d.ts.map +0 -1
- package/lib/src/services/credential/range-proofs-example.d.ts +0 -2
- package/lib/src/services/credential/range-proofs-example.d.ts.map +0 -1
- package/lib/src/services/credential/sd-jwt.test.d.ts +0 -2
- package/lib/src/services/credential/sd-jwt.test.d.ts.map +0 -1
- package/lib/src/services/credential/service.d.ts +0 -313
- package/lib/src/services/credential/service.d.ts.map +0 -1
- package/lib/src/services/credential/utils.d.ts +0 -3
- package/lib/src/services/credential/utils.d.ts.map +0 -1
- package/lib/src/services/dids/config.d.ts +0 -24
- package/lib/src/services/dids/config.d.ts.map +0 -1
- package/lib/src/services/dids/keypair-utils.d.ts +0 -15
- package/lib/src/services/dids/keypair-utils.d.ts.map +0 -1
- package/lib/src/services/dids/service-rpc.d.ts +0 -11
- package/lib/src/services/dids/service-rpc.d.ts.map +0 -1
- package/lib/src/services/dids/service.d.ts +0 -70
- package/lib/src/services/dids/service.d.ts.map +0 -1
- package/lib/src/services/edv/configs.d.ts +0 -12
- package/lib/src/services/edv/configs.d.ts.map +0 -1
- package/lib/src/services/edv/hmac.d.ts +0 -29
- package/lib/src/services/edv/hmac.d.ts.map +0 -1
- package/lib/src/services/edv/service.d.ts +0 -229
- package/lib/src/services/edv/service.d.ts.map +0 -1
- package/lib/src/services/pex/config.d.ts +0 -21
- package/lib/src/services/pex/config.d.ts.map +0 -1
- package/lib/src/services/pex/service.d.ts +0 -21
- package/lib/src/services/pex/service.d.ts.map +0 -1
- package/lib/src/services/relay-service/configs.d.ts +0 -35
- package/lib/src/services/relay-service/configs.d.ts.map +0 -1
- package/lib/src/services/relay-service/service-rpc.d.ts +0 -12
- package/lib/src/services/relay-service/service-rpc.d.ts.map +0 -1
- package/lib/src/services/relay-service/service.d.ts +0 -159
- package/lib/src/services/relay-service/service.d.ts.map +0 -1
- package/lib/src/services/rpc-service-client.d.ts +0 -7
- package/lib/src/services/rpc-service-client.d.ts.map +0 -1
- package/lib/src/services/storage/configs.d.ts +0 -2
- package/lib/src/services/storage/configs.d.ts.map +0 -1
- package/lib/src/services/storage/index.d.ts +0 -2
- package/lib/src/services/storage/index.d.ts.map +0 -1
- package/lib/src/services/storage/service-rpc.d.ts +0 -9
- package/lib/src/services/storage/service-rpc.d.ts.map +0 -1
- package/lib/src/services/storage/service.d.ts +0 -10
- package/lib/src/services/storage/service.d.ts.map +0 -1
- package/lib/src/services/util-crypto/configs.d.ts +0 -5
- package/lib/src/services/util-crypto/configs.d.ts.map +0 -1
- package/lib/src/services/util-crypto/index.d.ts +0 -2
- package/lib/src/services/util-crypto/index.d.ts.map +0 -1
- package/lib/src/services/util-crypto/service.d.ts +0 -10
- package/lib/src/services/util-crypto/service.d.ts.map +0 -1
- package/lib/src/services/wallet/configs.d.ts +0 -13
- package/lib/src/services/wallet/configs.d.ts.map +0 -1
- package/lib/src/services/wallet/service.d.ts +0 -13
- package/lib/src/services/wallet/service.d.ts.map +0 -1
- package/lib/src/types.d.ts +0 -12
- package/lib/src/types.d.ts.map +0 -1
- package/lib/src/wallet/memory-storage-interface.d.ts +0 -31
- package/lib/src/wallet/memory-storage-interface.d.ts.map +0 -1
- package/lib/src/wallet/memory-storage-wallet.d.ts +0 -6
- package/lib/src/wallet/memory-storage-wallet.d.ts.map +0 -1
- package/lib/src/wallet/rpc-storage-interface.d.ts +0 -32
- package/lib/src/wallet/rpc-storage-interface.d.ts.map +0 -1
- package/lib/src/wallet/rpc-storage-wallet.d.ts +0 -6
- package/lib/src/wallet/rpc-storage-wallet.d.ts.map +0 -1
- package/lib/test-utils.js +0 -46
- package/lib/test-utils.mjs +0 -38
- package/lib/tsconfig.tsbuildinfo +0 -1
- package/lib/types.js +0 -7
- package/lib/types.mjs +0 -3
- package/lib/wallet/memory-storage-interface.js +0 -101
- package/lib/wallet/memory-storage-interface.mjs +0 -95
- package/lib/wallet/memory-storage-wallet.js +0 -30
- package/lib/wallet/memory-storage-wallet.mjs +0 -24
- package/lib/wallet/rpc-storage-interface.js +0 -134
- package/lib/wallet/rpc-storage-interface.mjs +0 -128
- package/lib/wallet/rpc-storage-wallet.js +0 -46
- package/lib/wallet/rpc-storage-wallet.mjs +0 -40
|
@@ -1,319 +0,0 @@
|
|
|
1
|
-
import { JSONPath } from '@astronautlabs/jsonpath';
|
|
2
|
-
|
|
3
|
-
const EPSILON_NUMBER = 0.001;
|
|
4
|
-
const EPSILON_INT = 1;
|
|
5
|
-
|
|
6
|
-
const MAX_DATE_PLACEHOLDER = 884541351600000;
|
|
7
|
-
const MIN_DATE_PLACEHOLDER = -17592186044415;
|
|
8
|
-
const MAX_INTEGER = Number.MAX_SAFE_INTEGER;
|
|
9
|
-
const MIN_INTEGER = Number.MIN_SAFE_INTEGER;
|
|
10
|
-
const MAX_NUMBER = Number.MAX_SAFE_INTEGER;
|
|
11
|
-
const MIN_NUMBER = Number.MIN_SAFE_INTEGER;
|
|
12
|
-
|
|
13
|
-
/*
|
|
14
|
-
PEX Filter rules:
|
|
15
|
-
greater-than - Use the exclusiveMinimum descriptor
|
|
16
|
-
less-than - Use the exclusiveMaximum descriptor
|
|
17
|
-
greater-than or equal-to - Use the minimum descriptor
|
|
18
|
-
less-than or equal-to - Use the maximum descriptor
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
|
-
function correctFieldPath(path) {
|
|
22
|
-
// NOTE: may not work for advanced jsonpath selectors, needs investigation
|
|
23
|
-
return path.replace('$.', '');
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
function getNumDecimalPlaces(n) {
|
|
27
|
-
const parts = n.toString().split('.');
|
|
28
|
-
return parts.length > 1 && parts[1].length;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
function toMaxDecimalPlaces(n, maxDecimalPlaces) {
|
|
32
|
-
return +n.toFixed(maxDecimalPlaces);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
function getAttributeName({field, selectedCredentials, index}) {
|
|
36
|
-
let attributeName;
|
|
37
|
-
if (Array.isArray(field.path) && field.path.length > 1) {
|
|
38
|
-
const selectedCredential = selectedCredentials[index];
|
|
39
|
-
if (!selectedCredential) {
|
|
40
|
-
throw new Error(`Expected selected credential at index ${index}`);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// Must find a path that matches in selectedcredential, and choose that for bounds
|
|
44
|
-
const pathCount = field.path.length;
|
|
45
|
-
for (let i = 0; i < pathCount; i++) {
|
|
46
|
-
const path = field.path[i];
|
|
47
|
-
const paths = JSONPath.paths(selectedCredential, path);
|
|
48
|
-
if (paths.length) {
|
|
49
|
-
// First come first served
|
|
50
|
-
attributeName = correctFieldPath(JSONPath.stringify(paths[0]));
|
|
51
|
-
break;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
} else {
|
|
55
|
-
attributeName = correctFieldPath(
|
|
56
|
-
Array.isArray(field.path) ? field.path[0] : field.path,
|
|
57
|
-
);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
return attributeName;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Convert PEX request to bounds for each descriptor
|
|
65
|
-
* @param {*} pexRequest - The PEX request object containing input descriptors and constraints
|
|
66
|
-
* @param {*} selectedCredentials - Array of selected credentials corresponding to the input descriptors
|
|
67
|
-
* @param {*} removeFromRequest - if true, removes range proofs fields from the request. it might be dangerous if you will be using the proof request later
|
|
68
|
-
* because it will not have the range proofs fields anymore.
|
|
69
|
-
* @returns {Array} - Array of bounds for each descriptor, where each bound is an object with attributeName, min, and max
|
|
70
|
-
* @throws {Error} - If a field path is missing or empty
|
|
71
|
-
* @throws {Error} - If an unsupported format or type is encountered
|
|
72
|
-
* @throws {Error} - If a selected credential is expected but not found at the given index
|
|
73
|
-
*/
|
|
74
|
-
function pexToBounds(
|
|
75
|
-
pexRequest,
|
|
76
|
-
selectedCredentials = [],
|
|
77
|
-
removeFromRequest = false,
|
|
78
|
-
) {
|
|
79
|
-
const descriptorBounds = [];
|
|
80
|
-
const fieldsToRemove = [];
|
|
81
|
-
|
|
82
|
-
// One list of bounds per descriptor/credential
|
|
83
|
-
pexRequest.input_descriptors.forEach((inputDescriptor, index) => {
|
|
84
|
-
const selectedCredential = selectedCredentials[index];
|
|
85
|
-
if (!selectedCredential) {
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// Get embedded schema if existing
|
|
90
|
-
let decodedSchema = {};
|
|
91
|
-
if (selectedCredential.credentialSchema) {
|
|
92
|
-
const schemaStartStr = 'data:application/json;charset=utf-8,';
|
|
93
|
-
|
|
94
|
-
if (selectedCredential.credentialSchema.details) {
|
|
95
|
-
decodedSchema =
|
|
96
|
-
JSON.parse(selectedCredential.credentialSchema.details).jsonSchema ||
|
|
97
|
-
{};
|
|
98
|
-
} else if (
|
|
99
|
-
selectedCredential.credentialSchema.id &&
|
|
100
|
-
selectedCredential.credentialSchema.id.startsWith(schemaStartStr)
|
|
101
|
-
) {
|
|
102
|
-
// LEGACY embedded schema handling
|
|
103
|
-
decodedSchema = JSON.parse(
|
|
104
|
-
decodeURIComponent(
|
|
105
|
-
selectedCredential.credentialSchema.id.split(schemaStartStr)[1],
|
|
106
|
-
),
|
|
107
|
-
);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
const bounds = [];
|
|
112
|
-
inputDescriptor.constraints.fields.forEach(field => {
|
|
113
|
-
const {
|
|
114
|
-
exclusiveMaximum,
|
|
115
|
-
exclusiveMinimum,
|
|
116
|
-
formatMaximum,
|
|
117
|
-
formatMinimum,
|
|
118
|
-
maximum,
|
|
119
|
-
minimum,
|
|
120
|
-
format,
|
|
121
|
-
type,
|
|
122
|
-
} = field.filter || {};
|
|
123
|
-
|
|
124
|
-
if (!field.path || field.path.length === 0) {
|
|
125
|
-
throw new Error(
|
|
126
|
-
'Missing or empty field "path" property, expected array or string',
|
|
127
|
-
);
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
let attributeName;
|
|
131
|
-
if (Array.isArray(field.path) && field.path.length > 1) {
|
|
132
|
-
// Must find a path that matches in selectedcredential, and choose that for bounds
|
|
133
|
-
const pathCount = field.path.length;
|
|
134
|
-
for (let i = 0; i < pathCount; i++) {
|
|
135
|
-
const path = field.path[i];
|
|
136
|
-
const paths = JSONPath.paths(selectedCredential, path);
|
|
137
|
-
if (paths.length) {
|
|
138
|
-
// First come first served
|
|
139
|
-
attributeName = correctFieldPath(JSONPath.stringify(paths[0]));
|
|
140
|
-
break;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
} else {
|
|
144
|
-
const path = Array.isArray(field.path) ? field.path[0] : field.path;
|
|
145
|
-
attributeName = correctFieldPath(path);
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
if (!attributeName) {
|
|
149
|
-
return;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
const schemaPath = `$.properties.${attributeName.replaceAll(
|
|
153
|
-
'.',
|
|
154
|
-
'.properties.',
|
|
155
|
-
)}`;
|
|
156
|
-
const attributeSchema = JSONPath.query(
|
|
157
|
-
decodedSchema,
|
|
158
|
-
schemaPath,
|
|
159
|
-
1,
|
|
160
|
-
)[0] || {type};
|
|
161
|
-
|
|
162
|
-
let max =
|
|
163
|
-
maximum === undefined
|
|
164
|
-
? formatMaximum === undefined
|
|
165
|
-
? exclusiveMaximum
|
|
166
|
-
: formatMaximum
|
|
167
|
-
: maximum;
|
|
168
|
-
|
|
169
|
-
let min =
|
|
170
|
-
minimum === undefined
|
|
171
|
-
? formatMinimum === undefined
|
|
172
|
-
? exclusiveMinimum
|
|
173
|
-
: formatMinimum
|
|
174
|
-
: minimum;
|
|
175
|
-
|
|
176
|
-
const proofRequestMax = max;
|
|
177
|
-
const proofRequestMin = min;
|
|
178
|
-
|
|
179
|
-
if (max === undefined && min === undefined) {
|
|
180
|
-
return;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
const attributeType = attributeSchema.type || type;
|
|
184
|
-
|
|
185
|
-
// Get min/max bounds values, if using exclusive we must apply an epsilon so equality isnt true
|
|
186
|
-
if (format === 'date-time' || format === 'date') {
|
|
187
|
-
max = new Date(max === undefined ? MAX_DATE_PLACEHOLDER : max);
|
|
188
|
-
min = new Date(min === undefined ? MIN_DATE_PLACEHOLDER : min);
|
|
189
|
-
} else if (attributeType === 'number') {
|
|
190
|
-
const epsilon = attributeSchema.multipleOf || EPSILON_NUMBER;
|
|
191
|
-
const attribDecimalPlaces = getNumDecimalPlaces(epsilon);
|
|
192
|
-
|
|
193
|
-
max =
|
|
194
|
-
max === undefined
|
|
195
|
-
? attributeSchema.maximum === undefined
|
|
196
|
-
? MAX_NUMBER
|
|
197
|
-
: attributeSchema.maximum
|
|
198
|
-
: exclusiveMaximum === undefined
|
|
199
|
-
? max
|
|
200
|
-
: max - epsilon;
|
|
201
|
-
min =
|
|
202
|
-
min === undefined
|
|
203
|
-
? attributeSchema.minimum === undefined
|
|
204
|
-
? MIN_NUMBER
|
|
205
|
-
: attributeSchema.minimum
|
|
206
|
-
: exclusiveMinimum === undefined
|
|
207
|
-
? min
|
|
208
|
-
: min + epsilon;
|
|
209
|
-
|
|
210
|
-
// Because of floating point math sucks, sometimes we can get extra decimal points
|
|
211
|
-
// the bounds must also match the same decimal points as the input
|
|
212
|
-
// for this we read from the embedded schema
|
|
213
|
-
min = toMaxDecimalPlaces(min, attribDecimalPlaces);
|
|
214
|
-
max = toMaxDecimalPlaces(max, attribDecimalPlaces);
|
|
215
|
-
} else if (attributeType === 'integer') {
|
|
216
|
-
max =
|
|
217
|
-
max === undefined
|
|
218
|
-
? attributeSchema.maximum === undefined
|
|
219
|
-
? MAX_INTEGER
|
|
220
|
-
: attributeSchema.maximum
|
|
221
|
-
: exclusiveMaximum === undefined
|
|
222
|
-
? max
|
|
223
|
-
: max - EPSILON_INT;
|
|
224
|
-
min =
|
|
225
|
-
min === undefined
|
|
226
|
-
? attributeSchema.minimum === undefined
|
|
227
|
-
? MIN_INTEGER
|
|
228
|
-
: attributeSchema.minimum
|
|
229
|
-
: exclusiveMinimum === undefined
|
|
230
|
-
? min
|
|
231
|
-
: min + EPSILON_INT;
|
|
232
|
-
|
|
233
|
-
// Ensure that input values are not decimals otherwise crypto-wasm-ts will complain
|
|
234
|
-
min = Math.floor(min);
|
|
235
|
-
max = Math.floor(max);
|
|
236
|
-
} else {
|
|
237
|
-
throw new Error(
|
|
238
|
-
`Unsupported format ${format} and type ${type} for enforce bounds`,
|
|
239
|
-
);
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
if (removeFromRequest) {
|
|
243
|
-
fieldsToRemove.push({
|
|
244
|
-
fields: inputDescriptor.constraints.fields,
|
|
245
|
-
field,
|
|
246
|
-
});
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
bounds.push({
|
|
250
|
-
attributeName,
|
|
251
|
-
min,
|
|
252
|
-
max,
|
|
253
|
-
proofRequestMax,
|
|
254
|
-
proofRequestMin,
|
|
255
|
-
format,
|
|
256
|
-
type,
|
|
257
|
-
});
|
|
258
|
-
});
|
|
259
|
-
|
|
260
|
-
descriptorBounds.push(bounds);
|
|
261
|
-
});
|
|
262
|
-
|
|
263
|
-
fieldsToRemove.forEach(({fields, field}) => {
|
|
264
|
-
const idx = fields.indexOf(field);
|
|
265
|
-
if (idx !== -1) {
|
|
266
|
-
fields.splice(idx, 1);
|
|
267
|
-
}
|
|
268
|
-
});
|
|
269
|
-
|
|
270
|
-
return descriptorBounds;
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
const attributesToSkip = [
|
|
274
|
-
/^type/,
|
|
275
|
-
/^issuer/,
|
|
276
|
-
/^@context/,
|
|
277
|
-
/^proof/,
|
|
278
|
-
/^credentialSchema/,
|
|
279
|
-
/^issuanceDate/,
|
|
280
|
-
];
|
|
281
|
-
|
|
282
|
-
const shouldSkipAttribute = attributeName =>
|
|
283
|
-
attributesToSkip.some(regex => regex.test(attributeName));
|
|
284
|
-
|
|
285
|
-
function getPexRequiredAttributes(pexRequest, selectedCredentials = []) {
|
|
286
|
-
return pexRequest.input_descriptors
|
|
287
|
-
.map((inputDescriptor, index) => {
|
|
288
|
-
return inputDescriptor.constraints.fields
|
|
289
|
-
.filter(field => {
|
|
290
|
-
if (field.filter || field.optional) {
|
|
291
|
-
return false;
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
try {
|
|
295
|
-
if (!selectedCredentials[index]) {
|
|
296
|
-
return false;
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
const paths = Array.isArray(field.path)
|
|
300
|
-
? field.path.flatMap(singlePath =>
|
|
301
|
-
JSONPath.paths(selectedCredentials[index], singlePath),
|
|
302
|
-
)
|
|
303
|
-
: JSONPath.paths(selectedCredentials[index], field.path);
|
|
304
|
-
|
|
305
|
-
return paths.length !== 0;
|
|
306
|
-
} catch (error) {
|
|
307
|
-
console.error(`Error in field ${field.path}: ${error.message}`);
|
|
308
|
-
return false;
|
|
309
|
-
}
|
|
310
|
-
})
|
|
311
|
-
.map(field => getAttributeName({field, selectedCredentials, index}))
|
|
312
|
-
.filter(attributeName => {
|
|
313
|
-
return !shouldSkipAttribute(attributeName);
|
|
314
|
-
});
|
|
315
|
-
})
|
|
316
|
-
.filter(requiredAttributes => requiredAttributes.length > 0);
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
export { EPSILON_INT, EPSILON_NUMBER, MAX_DATE_PLACEHOLDER, MAX_INTEGER, MAX_NUMBER, MIN_DATE_PLACEHOLDER, MIN_INTEGER, MIN_NUMBER, getPexRequiredAttributes, pexToBounds, shouldSkipAttribute };
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
var lib = require('@docknetwork/crypto-wasm-ts/lib');
|
|
6
|
-
var boundCheck = require('@docknetwork/crypto-wasm-ts/lib/bound-check');
|
|
7
|
-
var index = require('@docknetwork/crypto-wasm-ts/lib/index');
|
|
8
|
-
|
|
9
|
-
const stringToBytes = (string) => Uint8Array.from(Buffer.from(string, 'utf-8'));
|
|
10
|
-
function getRevealedUnrevealed(messages, revealedIndices) {
|
|
11
|
-
const revealedMsgs = new Map();
|
|
12
|
-
const unrevealedMsgs = new Map();
|
|
13
|
-
for (let i = 0; i < messages.length; i++) {
|
|
14
|
-
if (revealedIndices.has(i)) {
|
|
15
|
-
revealedMsgs.set(i, messages[i]);
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
unrevealedMsgs.set(i, messages[i]);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
return [revealedMsgs, unrevealedMsgs];
|
|
22
|
-
}
|
|
23
|
-
async function rangeProofExample() {
|
|
24
|
-
await index.initializeWasm();
|
|
25
|
-
const pk = boundCheck.BoundCheckSnarkSetup();
|
|
26
|
-
const snarkProvingKey = pk.decompress();
|
|
27
|
-
const snarkVerifyingKey = pk.getVerifyingKeyUncompressed();
|
|
28
|
-
const earliestIssuance = 642709800000; // Timestamp of the earliest acceptable issuance, used as lower bound
|
|
29
|
-
const latestIssuance = 1588271400000; // Timestamp of the latest acceptable issuance, used as upper bound
|
|
30
|
-
const bornAfter = 642709800000; // Timestamp of the latest acceptable birth date, used as lower bound
|
|
31
|
-
const now = 1620585000000; // Timestamp as of now, i.e proof generation
|
|
32
|
-
const someDistantFuture = 1777746600000; // Timestamp from future
|
|
33
|
-
const attributes = [];
|
|
34
|
-
attributes.push(lib.BBSSignature.encodeMessageForSigning(stringToBytes('John Smith'))); // Name
|
|
35
|
-
attributes.push(lib.BBSSignature.encodeMessageForSigning(stringToBytes('123-456789-0'))); // SSN
|
|
36
|
-
attributes.push(lib.BBSSignature.encodePositiveNumberForSigning(bornAfter + 100000)); // Birth date as no. of milliseconds since epoch
|
|
37
|
-
attributes.push(lib.BBSSignature.encodePositiveNumberForSigning(earliestIssuance + 100000)); // Issuance date as no. of milliseconds since epoch
|
|
38
|
-
attributes.push(lib.BBSSignature.encodePositiveNumberForSigning(now + 2000000)); // Expiration date as no. of milliseconds since epoch
|
|
39
|
-
const messageCount = attributes.length;
|
|
40
|
-
const sigParams = lib.BBSSignatureParams.generate(messageCount);
|
|
41
|
-
const sigKeypair1 = lib.BBSKeypair.generate(sigParams);
|
|
42
|
-
const sigSecretKey = sigKeypair1.secretKey;
|
|
43
|
-
const sigPublicKey = sigKeypair1.publicKey;
|
|
44
|
-
// Signer creates the signature and shares with prover
|
|
45
|
-
const sig = lib.BBSSignature.generate(attributes, sigSecretKey, sigParams, false);
|
|
46
|
-
const proverSetupParams = [];
|
|
47
|
-
proverSetupParams.push(lib.SetupParam.legosnarkProvingKeyUncompressed(snarkProvingKey));
|
|
48
|
-
const revealedIndices = new Set();
|
|
49
|
-
revealedIndices.add(0);
|
|
50
|
-
const [revealedAttrs, unrevealedAttrs] = getRevealedUnrevealed(attributes, revealedIndices);
|
|
51
|
-
const statement1 = lib.Statement.bbsSignature(sigParams, sigPublicKey, revealedAttrs, false);
|
|
52
|
-
const statement2 = lib.Statement.boundCheckProverFromSetupParamRefs(bornAfter, now, 0);
|
|
53
|
-
// For proving issuance date was between `earliestIssuance` and `latestIssuance`
|
|
54
|
-
const statement3 = lib.Statement.boundCheckProverFromSetupParamRefs(earliestIssuance, latestIssuance, 0);
|
|
55
|
-
// For proving expiration date was between `now` and `someDistantFuture`, i.e. its not expired as of now.
|
|
56
|
-
const statement4 = lib.Statement.boundCheckProverFromSetupParamRefs(now, someDistantFuture, 0);
|
|
57
|
-
const proverStatements = new lib.Statements(statement1);
|
|
58
|
-
proverStatements.add(statement2);
|
|
59
|
-
proverStatements.add(statement3);
|
|
60
|
-
proverStatements.add(statement4);
|
|
61
|
-
// For birth date attribute
|
|
62
|
-
const witnessEq1 = new lib.WitnessEqualityMetaStatement();
|
|
63
|
-
witnessEq1.addWitnessRef(0, 2);
|
|
64
|
-
witnessEq1.addWitnessRef(1, 0);
|
|
65
|
-
// For issuance date attribute
|
|
66
|
-
const witnessEq2 = new lib.WitnessEqualityMetaStatement();
|
|
67
|
-
witnessEq2.addWitnessRef(0, 3);
|
|
68
|
-
witnessEq2.addWitnessRef(2, 0);
|
|
69
|
-
// For expiration date attribute
|
|
70
|
-
const witnessEq3 = new lib.WitnessEqualityMetaStatement();
|
|
71
|
-
witnessEq3.addWitnessRef(0, 4);
|
|
72
|
-
witnessEq3.addWitnessRef(3, 0);
|
|
73
|
-
const metaStatements = new lib.MetaStatements();
|
|
74
|
-
metaStatements.add(lib.MetaStatement.witnessEquality(witnessEq1));
|
|
75
|
-
metaStatements.add(lib.MetaStatement.witnessEquality(witnessEq2));
|
|
76
|
-
metaStatements.add(lib.MetaStatement.witnessEquality(witnessEq3));
|
|
77
|
-
const witnesses = new lib.Witnesses();
|
|
78
|
-
witnesses.add(lib.Witness.bbsSignature(sig, unrevealedAttrs, false));
|
|
79
|
-
witnesses.add(lib.Witness.boundCheckLegoGroth16(attributes[2]));
|
|
80
|
-
witnesses.add(lib.Witness.boundCheckLegoGroth16(attributes[3]));
|
|
81
|
-
witnesses.add(lib.Witness.boundCheckLegoGroth16(attributes[4]));
|
|
82
|
-
const proverProofSpec = new lib.QuasiProofSpecG1(proverStatements, metaStatements, proverSetupParams);
|
|
83
|
-
const nonce = stringToBytes('a nonce');
|
|
84
|
-
const proof = lib.CompositeProofG1.generateUsingQuasiProofSpec(proverProofSpec, witnesses, nonce);
|
|
85
|
-
console.log(proof);
|
|
86
|
-
// Verify the proof
|
|
87
|
-
const verifierSetupParams = [];
|
|
88
|
-
verifierSetupParams.push(lib.SetupParam.legosnarkVerifyingKeyUncompressed(snarkVerifyingKey));
|
|
89
|
-
// For verifying birth date was after `bornAfter`
|
|
90
|
-
const statement5 = lib.Statement.boundCheckVerifierFromSetupParamRefs(bornAfter, now, 0);
|
|
91
|
-
// For verifying issuance date was between `earliestIssuance` and `latestIssuance`
|
|
92
|
-
const statement6 = lib.Statement.boundCheckVerifierFromSetupParamRefs(earliestIssuance, latestIssuance, 0);
|
|
93
|
-
// For verifying expiration date was between `now` and `someDistantFuture`, i.e. its not expired as of now.
|
|
94
|
-
const statement7 = lib.Statement.boundCheckVerifierFromSetupParamRefs(now, someDistantFuture, 0);
|
|
95
|
-
const verifierStatements = new lib.Statements();
|
|
96
|
-
verifierStatements.add(statement1);
|
|
97
|
-
verifierStatements.add(statement5);
|
|
98
|
-
verifierStatements.add(statement6);
|
|
99
|
-
verifierStatements.add(statement7);
|
|
100
|
-
const verifierProofSpec = new lib.QuasiProofSpecG1(verifierStatements, metaStatements, verifierSetupParams);
|
|
101
|
-
const result = proof.verifyUsingQuasiProofSpec(verifierProofSpec, nonce);
|
|
102
|
-
console.log(result);
|
|
103
|
-
return true;
|
|
104
|
-
}
|
|
105
|
-
rangeProofExample();
|
|
106
|
-
|
|
107
|
-
exports.rangeProofExample = rangeProofExample;
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { BBSSignature, BBSSignatureParams, BBSKeypair, SetupParam, Statement, Statements, WitnessEqualityMetaStatement, MetaStatements, MetaStatement, Witnesses, Witness, QuasiProofSpecG1, CompositeProofG1 } from '@docknetwork/crypto-wasm-ts/lib';
|
|
2
|
-
import { BoundCheckSnarkSetup } from '@docknetwork/crypto-wasm-ts/lib/bound-check';
|
|
3
|
-
import { initializeWasm } from '@docknetwork/crypto-wasm-ts/lib/index';
|
|
4
|
-
|
|
5
|
-
const stringToBytes = (string) => Uint8Array.from(Buffer.from(string, 'utf-8'));
|
|
6
|
-
function getRevealedUnrevealed(messages, revealedIndices) {
|
|
7
|
-
const revealedMsgs = new Map();
|
|
8
|
-
const unrevealedMsgs = new Map();
|
|
9
|
-
for (let i = 0; i < messages.length; i++) {
|
|
10
|
-
if (revealedIndices.has(i)) {
|
|
11
|
-
revealedMsgs.set(i, messages[i]);
|
|
12
|
-
}
|
|
13
|
-
else {
|
|
14
|
-
unrevealedMsgs.set(i, messages[i]);
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
return [revealedMsgs, unrevealedMsgs];
|
|
18
|
-
}
|
|
19
|
-
async function rangeProofExample() {
|
|
20
|
-
await initializeWasm();
|
|
21
|
-
const pk = BoundCheckSnarkSetup();
|
|
22
|
-
const snarkProvingKey = pk.decompress();
|
|
23
|
-
const snarkVerifyingKey = pk.getVerifyingKeyUncompressed();
|
|
24
|
-
const earliestIssuance = 642709800000; // Timestamp of the earliest acceptable issuance, used as lower bound
|
|
25
|
-
const latestIssuance = 1588271400000; // Timestamp of the latest acceptable issuance, used as upper bound
|
|
26
|
-
const bornAfter = 642709800000; // Timestamp of the latest acceptable birth date, used as lower bound
|
|
27
|
-
const now = 1620585000000; // Timestamp as of now, i.e proof generation
|
|
28
|
-
const someDistantFuture = 1777746600000; // Timestamp from future
|
|
29
|
-
const attributes = [];
|
|
30
|
-
attributes.push(BBSSignature.encodeMessageForSigning(stringToBytes('John Smith'))); // Name
|
|
31
|
-
attributes.push(BBSSignature.encodeMessageForSigning(stringToBytes('123-456789-0'))); // SSN
|
|
32
|
-
attributes.push(BBSSignature.encodePositiveNumberForSigning(bornAfter + 100000)); // Birth date as no. of milliseconds since epoch
|
|
33
|
-
attributes.push(BBSSignature.encodePositiveNumberForSigning(earliestIssuance + 100000)); // Issuance date as no. of milliseconds since epoch
|
|
34
|
-
attributes.push(BBSSignature.encodePositiveNumberForSigning(now + 2000000)); // Expiration date as no. of milliseconds since epoch
|
|
35
|
-
const messageCount = attributes.length;
|
|
36
|
-
const sigParams = BBSSignatureParams.generate(messageCount);
|
|
37
|
-
const sigKeypair1 = BBSKeypair.generate(sigParams);
|
|
38
|
-
const sigSecretKey = sigKeypair1.secretKey;
|
|
39
|
-
const sigPublicKey = sigKeypair1.publicKey;
|
|
40
|
-
// Signer creates the signature and shares with prover
|
|
41
|
-
const sig = BBSSignature.generate(attributes, sigSecretKey, sigParams, false);
|
|
42
|
-
const proverSetupParams = [];
|
|
43
|
-
proverSetupParams.push(SetupParam.legosnarkProvingKeyUncompressed(snarkProvingKey));
|
|
44
|
-
const revealedIndices = new Set();
|
|
45
|
-
revealedIndices.add(0);
|
|
46
|
-
const [revealedAttrs, unrevealedAttrs] = getRevealedUnrevealed(attributes, revealedIndices);
|
|
47
|
-
const statement1 = Statement.bbsSignature(sigParams, sigPublicKey, revealedAttrs, false);
|
|
48
|
-
const statement2 = Statement.boundCheckProverFromSetupParamRefs(bornAfter, now, 0);
|
|
49
|
-
// For proving issuance date was between `earliestIssuance` and `latestIssuance`
|
|
50
|
-
const statement3 = Statement.boundCheckProverFromSetupParamRefs(earliestIssuance, latestIssuance, 0);
|
|
51
|
-
// For proving expiration date was between `now` and `someDistantFuture`, i.e. its not expired as of now.
|
|
52
|
-
const statement4 = Statement.boundCheckProverFromSetupParamRefs(now, someDistantFuture, 0);
|
|
53
|
-
const proverStatements = new Statements(statement1);
|
|
54
|
-
proverStatements.add(statement2);
|
|
55
|
-
proverStatements.add(statement3);
|
|
56
|
-
proverStatements.add(statement4);
|
|
57
|
-
// For birth date attribute
|
|
58
|
-
const witnessEq1 = new WitnessEqualityMetaStatement();
|
|
59
|
-
witnessEq1.addWitnessRef(0, 2);
|
|
60
|
-
witnessEq1.addWitnessRef(1, 0);
|
|
61
|
-
// For issuance date attribute
|
|
62
|
-
const witnessEq2 = new WitnessEqualityMetaStatement();
|
|
63
|
-
witnessEq2.addWitnessRef(0, 3);
|
|
64
|
-
witnessEq2.addWitnessRef(2, 0);
|
|
65
|
-
// For expiration date attribute
|
|
66
|
-
const witnessEq3 = new WitnessEqualityMetaStatement();
|
|
67
|
-
witnessEq3.addWitnessRef(0, 4);
|
|
68
|
-
witnessEq3.addWitnessRef(3, 0);
|
|
69
|
-
const metaStatements = new MetaStatements();
|
|
70
|
-
metaStatements.add(MetaStatement.witnessEquality(witnessEq1));
|
|
71
|
-
metaStatements.add(MetaStatement.witnessEquality(witnessEq2));
|
|
72
|
-
metaStatements.add(MetaStatement.witnessEquality(witnessEq3));
|
|
73
|
-
const witnesses = new Witnesses();
|
|
74
|
-
witnesses.add(Witness.bbsSignature(sig, unrevealedAttrs, false));
|
|
75
|
-
witnesses.add(Witness.boundCheckLegoGroth16(attributes[2]));
|
|
76
|
-
witnesses.add(Witness.boundCheckLegoGroth16(attributes[3]));
|
|
77
|
-
witnesses.add(Witness.boundCheckLegoGroth16(attributes[4]));
|
|
78
|
-
const proverProofSpec = new QuasiProofSpecG1(proverStatements, metaStatements, proverSetupParams);
|
|
79
|
-
const nonce = stringToBytes('a nonce');
|
|
80
|
-
const proof = CompositeProofG1.generateUsingQuasiProofSpec(proverProofSpec, witnesses, nonce);
|
|
81
|
-
console.log(proof);
|
|
82
|
-
// Verify the proof
|
|
83
|
-
const verifierSetupParams = [];
|
|
84
|
-
verifierSetupParams.push(SetupParam.legosnarkVerifyingKeyUncompressed(snarkVerifyingKey));
|
|
85
|
-
// For verifying birth date was after `bornAfter`
|
|
86
|
-
const statement5 = Statement.boundCheckVerifierFromSetupParamRefs(bornAfter, now, 0);
|
|
87
|
-
// For verifying issuance date was between `earliestIssuance` and `latestIssuance`
|
|
88
|
-
const statement6 = Statement.boundCheckVerifierFromSetupParamRefs(earliestIssuance, latestIssuance, 0);
|
|
89
|
-
// For verifying expiration date was between `now` and `someDistantFuture`, i.e. its not expired as of now.
|
|
90
|
-
const statement7 = Statement.boundCheckVerifierFromSetupParamRefs(now, someDistantFuture, 0);
|
|
91
|
-
const verifierStatements = new Statements();
|
|
92
|
-
verifierStatements.add(statement1);
|
|
93
|
-
verifierStatements.add(statement5);
|
|
94
|
-
verifierStatements.add(statement6);
|
|
95
|
-
verifierStatements.add(statement7);
|
|
96
|
-
const verifierProofSpec = new QuasiProofSpecG1(verifierStatements, metaStatements, verifierSetupParams);
|
|
97
|
-
const result = proof.verifyUsingQuasiProofSpec(verifierProofSpec, nonce);
|
|
98
|
-
console.log(result);
|
|
99
|
-
return true;
|
|
100
|
-
}
|
|
101
|
-
rangeProofExample();
|
|
102
|
-
|
|
103
|
-
export { rangeProofExample };
|