@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,683 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
var services_credential_config = require('./config.js');
|
|
6
|
-
var cryptoWasmTs = require('@docknetwork/crypto-wasm-ts');
|
|
7
|
-
var oid4vciClient = require('@sphereon/oid4vci-client');
|
|
8
|
-
var oid4vciCommon = require('@sphereon/oid4vci-common');
|
|
9
|
-
var keypairs = require('@docknetwork/universal-wallet/methods/keypairs');
|
|
10
|
-
var utils = require('@docknetwork/credential-sdk/utils');
|
|
11
|
-
var vc = require('@docknetwork/credential-sdk/vc');
|
|
12
|
-
var pex$1 = require('@sphereon/pex');
|
|
13
|
-
var services_blockchain_service = require('../blockchain/service.js');
|
|
14
|
-
var services_credential_boundCheck = require('./bound-check.js');
|
|
15
|
-
var assert = require('assert');
|
|
16
|
-
var services_credential_bbsRevocation = require('./bbs-revocation.js');
|
|
17
|
-
var services_credential_pexHelpers = require('./pex-helpers.js');
|
|
18
|
-
var services_dids_service = require('../dids/service.js');
|
|
19
|
-
var services_credential_sdJwt = require('./sd-jwt.js');
|
|
20
|
-
require('@cosmjs/proto-signing');
|
|
21
|
-
require('@docknetwork/cheqd-blockchain-api');
|
|
22
|
-
require('@docknetwork/cheqd-blockchain-modules');
|
|
23
|
-
require('@docknetwork/credential-sdk/modules');
|
|
24
|
-
require('@docknetwork/credential-sdk/resolver');
|
|
25
|
-
require('@docknetwork/crypto-wasm-ts/lib/index');
|
|
26
|
-
require('events');
|
|
27
|
-
require('../../core/logger.js');
|
|
28
|
-
require('../../modules/event-manager.js');
|
|
29
|
-
require('../util-crypto/service.js');
|
|
30
|
-
require('@scure/bip39');
|
|
31
|
-
require('@scure/bip39/wordlists/english');
|
|
32
|
-
require('../util-crypto/configs.js');
|
|
33
|
-
require('@docknetwork/credential-sdk/types');
|
|
34
|
-
require('../blockchain/cached-did-resolver.js');
|
|
35
|
-
require('../storage/index.js');
|
|
36
|
-
require('../storage/service.js');
|
|
37
|
-
require('../storage/service-rpc.js');
|
|
38
|
-
require('../rpc-service-client.js');
|
|
39
|
-
require('../../rpc-client.js');
|
|
40
|
-
require('json-rpc-2.0');
|
|
41
|
-
require('../../core/crypto.js');
|
|
42
|
-
require('crypto');
|
|
43
|
-
require('../../logger.js');
|
|
44
|
-
require('../../rpc-util.js');
|
|
45
|
-
require('@docknetwork/crypto-wasm-ts/lib/legosnark');
|
|
46
|
-
require('base64url');
|
|
47
|
-
require('@astronautlabs/jsonpath');
|
|
48
|
-
require('@docknetwork/wallet-sdk-dids/lib');
|
|
49
|
-
require('../dids/config.js');
|
|
50
|
-
require('@docknetwork/credential-sdk/keypairs');
|
|
51
|
-
require('./utils.js');
|
|
52
|
-
require('base58-universal');
|
|
53
|
-
require('@docknetwork/credential-sdk/vc/crypto');
|
|
54
|
-
require('@digitalbazaar/x25519-key-agreement-key-2020');
|
|
55
|
-
require('@digitalbazaar/x25519-key-agreement-key-2019');
|
|
56
|
-
require('@digitalbazaar/ed25519-verification-key-2018');
|
|
57
|
-
require('@digitalbazaar/ed25519-verification-key-2020');
|
|
58
|
-
require('../dids/keypair-utils.js');
|
|
59
|
-
require('@sd-jwt/sd-jwt-vc');
|
|
60
|
-
require('@sd-jwt/crypto-nodejs');
|
|
61
|
-
|
|
62
|
-
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
63
|
-
|
|
64
|
-
var assert__default = /*#__PURE__*/_interopDefaultLegacy(assert);
|
|
65
|
-
|
|
66
|
-
// @ts-nocheck
|
|
67
|
-
/**
|
|
68
|
-
* PEX (Presentation Exchange) instance for credential filtering
|
|
69
|
-
* @private
|
|
70
|
-
*/
|
|
71
|
-
const pex = new pex$1.PEX();
|
|
72
|
-
/**
|
|
73
|
-
* Checks if a credential uses BBS+ signature
|
|
74
|
-
* @param {Object} credential - The credential to check
|
|
75
|
-
* @returns {boolean} True if the credential uses BBS+ signature
|
|
76
|
-
* @example
|
|
77
|
-
* const isBBS = isBBSPlusCredential(credential);
|
|
78
|
-
* if (isBBS) {
|
|
79
|
-
* console.log('This credential uses BBS+ signatures');
|
|
80
|
-
* }
|
|
81
|
-
*/
|
|
82
|
-
function isBBSPlusCredential(credential) {
|
|
83
|
-
return ((typeof credential?.proof?.type === 'string' &&
|
|
84
|
-
credential.proof.type.includes('BBS+SignatureDock')) ||
|
|
85
|
-
(Array.isArray(credential['@context']) &&
|
|
86
|
-
credential['@context'].find(context => typeof context === 'string' && context.indexOf('bbs') > -1)));
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Checks if a credential uses KVAC (BBDT16) signature
|
|
90
|
-
* @param {Object} credential - The credential to check
|
|
91
|
-
* @returns {boolean} True if the credential uses KVAC signature
|
|
92
|
-
* @example
|
|
93
|
-
* const isKVAC = isKvacCredential(credential);
|
|
94
|
-
*/
|
|
95
|
-
function isKvacCredential(credential) {
|
|
96
|
-
return (typeof credential?.proof?.type === 'string' &&
|
|
97
|
-
credential.proof.type.toLowerCase().includes('bbdt16'));
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Checks if a credential is anonymous (BBS+ or KVAC)
|
|
101
|
-
* @param {Object} credential - The credential to check
|
|
102
|
-
* @returns {boolean} True if the credential is anonymous
|
|
103
|
-
* @example
|
|
104
|
-
* if (isAnnonymousCredential(credential)) {
|
|
105
|
-
* console.log('This credential supports selective disclosure');
|
|
106
|
-
* }
|
|
107
|
-
*/
|
|
108
|
-
function isAnnonymousCredential(credential) {
|
|
109
|
-
return isBBSPlusCredential(credential) || isKvacCredential(credential);
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Service class for managing verifiable credentials
|
|
113
|
-
* @class
|
|
114
|
-
* @description Provides methods for creating, signing, verifying, and presenting
|
|
115
|
-
* verifiable credentials with support for various signature types
|
|
116
|
-
*/
|
|
117
|
-
class CredentialService {
|
|
118
|
-
/**
|
|
119
|
-
* Creates a new CredentialService instance
|
|
120
|
-
* @constructor
|
|
121
|
-
*/
|
|
122
|
-
constructor() {
|
|
123
|
-
this.name = services_credential_config.serviceName;
|
|
124
|
-
}
|
|
125
|
-
rpcMethods = [
|
|
126
|
-
CredentialService.prototype.generateCredential,
|
|
127
|
-
CredentialService.prototype.signCredential,
|
|
128
|
-
CredentialService.prototype.createPresentation,
|
|
129
|
-
CredentialService.prototype.verifyCredential,
|
|
130
|
-
CredentialService.prototype.createBBSPresentation,
|
|
131
|
-
CredentialService.prototype.deriveVCFromPresentation,
|
|
132
|
-
CredentialService.prototype.isBBSPlusCredential,
|
|
133
|
-
CredentialService.prototype.isKvacCredential,
|
|
134
|
-
CredentialService.prototype.isSDJWTCredential,
|
|
135
|
-
CredentialService.prototype.credentialToW3C,
|
|
136
|
-
CredentialService.prototype.createSDJWTPresentation,
|
|
137
|
-
CredentialService.prototype.acquireOIDCredential,
|
|
138
|
-
];
|
|
139
|
-
createSDJWTPresentation(params) {
|
|
140
|
-
const { attributesToReveal, credential } = params;
|
|
141
|
-
return services_credential_sdJwt.createSDJWTPresentation({ attributesToReveal, credential });
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Generates a new verifiable credential template
|
|
145
|
-
* @param {Object} [params={}] - Generation parameters
|
|
146
|
-
* @param {Object} [params.subject] - The credential subject
|
|
147
|
-
* @returns {VerifiableCredential} A new verifiable credential instance
|
|
148
|
-
* @example
|
|
149
|
-
* const credential = credentialService.generateCredential({
|
|
150
|
-
* subject: { id: 'did:example:123', name: 'Alice' }
|
|
151
|
-
* });
|
|
152
|
-
*/
|
|
153
|
-
generateCredential(params = {}) {
|
|
154
|
-
services_credential_config.validation.generateCredential(params);
|
|
155
|
-
const { subject } = params;
|
|
156
|
-
const vc$1 = new vc.VerifiableCredential();
|
|
157
|
-
vc$1.addType('DockAuthCredential');
|
|
158
|
-
vc$1.addContext({
|
|
159
|
-
dk: 'https://ld.dock.io/credentials#',
|
|
160
|
-
DockAuthCredential: 'dk:DockAuthCredential',
|
|
161
|
-
});
|
|
162
|
-
if (subject) {
|
|
163
|
-
vc$1.setSubject(subject);
|
|
164
|
-
vc$1.addContext({
|
|
165
|
-
state: 'dk:state',
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
return vc$1;
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Signs a verifiable credential
|
|
172
|
-
* @param {Object} params - Signing parameters
|
|
173
|
-
* @param {Object} params.vcJson - The credential JSON to sign
|
|
174
|
-
* @param {Object} params.keyDoc - The key document for signing
|
|
175
|
-
* @returns {Promise<VerifiableCredential>} The signed verifiable credential
|
|
176
|
-
* @throws {Error} If validation fails or signing fails
|
|
177
|
-
* @example
|
|
178
|
-
* const signedCredential = await credentialService.signCredential({
|
|
179
|
-
* vcJson: credentialData,
|
|
180
|
-
* keyDoc: issuerKeyDocument
|
|
181
|
-
* });
|
|
182
|
-
*/
|
|
183
|
-
async signCredential(params) {
|
|
184
|
-
services_credential_config.validation.signCredential(params);
|
|
185
|
-
const { vcJson, keyDoc } = params;
|
|
186
|
-
const verifiableCredential = new vc.VerifiableCredential();
|
|
187
|
-
verifiableCredential.setFromJSON(vcJson);
|
|
188
|
-
const kp = keypairs.getKeypairFromDoc(keyDoc);
|
|
189
|
-
kp.signer = kp.signer();
|
|
190
|
-
const suite = await vc.getSuiteFromKeyDoc(kp);
|
|
191
|
-
verifiableCredential.setIssuer(keyDoc.controller);
|
|
192
|
-
await verifiableCredential.sign(suite);
|
|
193
|
-
return verifiableCredential;
|
|
194
|
-
}
|
|
195
|
-
/**
|
|
196
|
-
* Creates a verifiable presentation from credentials
|
|
197
|
-
* @param {Object} params - Presentation parameters
|
|
198
|
-
* @param {Array<Object>} params.credentials - Array of verifiable credentials to include
|
|
199
|
-
* @param {Object} params.keyDoc - The key document for signing the presentation
|
|
200
|
-
* @param {string} [params.challenge] - Challenge string for the presentation proof
|
|
201
|
-
* @param {string} [params.id] - Presentation identifier
|
|
202
|
-
* @param {string} [params.domain] - Domain for the presentation proof
|
|
203
|
-
* @returns {Promise<Object>} The signed verifiable presentation
|
|
204
|
-
* @throws {Error} If validation fails
|
|
205
|
-
* @example
|
|
206
|
-
* const presentation = await credentialService.createPresentation({
|
|
207
|
-
* credentials: [credential1, credential2],
|
|
208
|
-
* keyDoc: holderKeyDocument,
|
|
209
|
-
* challenge: 'abc123',
|
|
210
|
-
* domain: 'example.com'
|
|
211
|
-
* });
|
|
212
|
-
*/
|
|
213
|
-
async createPresentation(params) {
|
|
214
|
-
services_credential_config.validation.createPresentation(params);
|
|
215
|
-
const { credentials, keyDoc, challenge, id, domain } = params;
|
|
216
|
-
const vp = new vc.VerifiablePresentation(id);
|
|
217
|
-
let shouldSkipSigning = false;
|
|
218
|
-
let jwtCredentials = [];
|
|
219
|
-
for (const signedVC of credentials) {
|
|
220
|
-
if (typeof signedVC === 'string') {
|
|
221
|
-
jwtCredentials.push(signedVC);
|
|
222
|
-
shouldSkipSigning = true;
|
|
223
|
-
}
|
|
224
|
-
else {
|
|
225
|
-
vp.addCredential(signedVC);
|
|
226
|
-
}
|
|
227
|
-
shouldSkipSigning = shouldSkipSigning || isAnnonymousCredential(signedVC);
|
|
228
|
-
}
|
|
229
|
-
if (!shouldSkipSigning) {
|
|
230
|
-
vp.setHolder(keyDoc.controller);
|
|
231
|
-
}
|
|
232
|
-
const keyPair = keypairs.getKeypairFromDoc(keyDoc);
|
|
233
|
-
keyPair.signer = keyPair.signer();
|
|
234
|
-
const suite = await vc.getSuiteFromKeyDoc(keyPair);
|
|
235
|
-
if (shouldSkipSigning) {
|
|
236
|
-
const result = vp.toJSON();
|
|
237
|
-
result.verifiableCredential.push(...jwtCredentials);
|
|
238
|
-
return result;
|
|
239
|
-
}
|
|
240
|
-
return vp.sign(suite, challenge, domain, services_blockchain_service.blockchainService.resolver);
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Verifies a verifiable presentation
|
|
244
|
-
* @param {Object} params - Verification parameters
|
|
245
|
-
* @param {Object} params.presentation - The presentation to verify
|
|
246
|
-
* @param {Object} [params.options] - Verification options
|
|
247
|
-
* @returns {Promise<Object>} Verification result with verified status and any errors
|
|
248
|
-
* @example
|
|
249
|
-
* const result = await credentialService.verifyPresentation({
|
|
250
|
-
* presentation: presentationData
|
|
251
|
-
* });
|
|
252
|
-
* console.log('Verified:', result.verified);
|
|
253
|
-
*/
|
|
254
|
-
async verifyPresentation({ presentation, options }) {
|
|
255
|
-
return vc.verifyPresentation(presentation, options);
|
|
256
|
-
}
|
|
257
|
-
/**
|
|
258
|
-
* Verifies a verifiable credential including revocation check
|
|
259
|
-
* @param {Object} params - Verification parameters
|
|
260
|
-
* @param {Object} params.credential - The credential to verify
|
|
261
|
-
* @param {Object} [params.membershipWitness] - Membership witness for revocation check
|
|
262
|
-
* @returns {Promise<Object>} Verification result
|
|
263
|
-
* @returns {boolean} returns.verified - Whether the credential is valid
|
|
264
|
-
* @returns {string} [returns.error] - Error message if verification failed
|
|
265
|
-
* @throws {Error} If validation fails
|
|
266
|
-
* @example
|
|
267
|
-
* const result = await credentialService.verifyCredential({
|
|
268
|
-
* credential: credentialData,
|
|
269
|
-
* membershipWitness: witnessData
|
|
270
|
-
* });
|
|
271
|
-
* if (!result.verified) {
|
|
272
|
-
* console.error('Verification failed:', result.error);
|
|
273
|
-
* }
|
|
274
|
-
*/
|
|
275
|
-
async verifyCredential(params) {
|
|
276
|
-
services_credential_config.validation.verifyCredential(params);
|
|
277
|
-
let { credential, membershipWitness } = params;
|
|
278
|
-
if (credential._sd_jwt) {
|
|
279
|
-
credential = credential?._sd_jwt?.encoded;
|
|
280
|
-
}
|
|
281
|
-
if (typeof credential === 'string' && services_credential_sdJwt.isSDJWTCredential(credential)) {
|
|
282
|
-
return services_credential_sdJwt.verifySDJWT(credential);
|
|
283
|
-
}
|
|
284
|
-
const result = await vc.verifyCredential(credential, {
|
|
285
|
-
resolver: services_blockchain_service.blockchainService.resolver,
|
|
286
|
-
revocationApi: { dock: services_blockchain_service.blockchainService.dock },
|
|
287
|
-
});
|
|
288
|
-
const { credentialStatus } = credential;
|
|
289
|
-
if (result.verified && credentialStatus?.id) {
|
|
290
|
-
try {
|
|
291
|
-
const isRevoked = await services_credential_bbsRevocation.getIsRevoked(credential, membershipWitness);
|
|
292
|
-
if (isRevoked) {
|
|
293
|
-
result.verified = false;
|
|
294
|
-
result.error = 'revocation check: the credential is revoked';
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
catch (err) {
|
|
298
|
-
console.log('Unable to get revocation status');
|
|
299
|
-
console.error(err);
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
return result;
|
|
303
|
-
}
|
|
304
|
-
/**
|
|
305
|
-
* Filters credentials based on a presentation definition
|
|
306
|
-
* @param {Object} params - Filter parameters
|
|
307
|
-
* @param {Array<Object>} params.credentials - Array of credentials to filter
|
|
308
|
-
* @param {Object} params.presentationDefinition - PEX presentation definition
|
|
309
|
-
* @param {string} [params.holderDid] - DID of the credential holder
|
|
310
|
-
* @returns {Object} Filtered credentials matching the presentation definition
|
|
311
|
-
* @example
|
|
312
|
-
* const filtered = credentialService.filterCredentials({
|
|
313
|
-
* credentials: allCredentials,
|
|
314
|
-
* presentationDefinition: definition,
|
|
315
|
-
* holderDid: 'did:example:holder'
|
|
316
|
-
* });
|
|
317
|
-
*/
|
|
318
|
-
filterCredentials(params) {
|
|
319
|
-
const { credentials, presentationDefinition, holderDid } = params;
|
|
320
|
-
const result = pex.selectFrom(presentationDefinition, credentials, holderDid);
|
|
321
|
-
return result;
|
|
322
|
-
}
|
|
323
|
-
/**
|
|
324
|
-
* Evaluates a presentation against a presentation definition
|
|
325
|
-
* @param {Object} params - Evaluation parameters
|
|
326
|
-
* @param {Object} params.presentation - The presentation to evaluate
|
|
327
|
-
* @param {Object} params.presentationDefinition - PEX presentation definition
|
|
328
|
-
* @returns {Object} Evaluation result with validation details
|
|
329
|
-
* @example
|
|
330
|
-
* const evaluation = credentialService.evaluatePresentation({
|
|
331
|
-
* presentation: presentationData,
|
|
332
|
-
* presentationDefinition: definition
|
|
333
|
-
* });
|
|
334
|
-
*/
|
|
335
|
-
evaluatePresentation(params) {
|
|
336
|
-
const { presentation, presentationDefinition } = params;
|
|
337
|
-
const result = pex.evaluatePresentation(presentationDefinition, presentation);
|
|
338
|
-
return result;
|
|
339
|
-
}
|
|
340
|
-
/**
|
|
341
|
-
* Checks if a credential uses BBS+ signature
|
|
342
|
-
* @param {Object} params - Check parameters
|
|
343
|
-
* @param {Object} params.credential - The credential to check
|
|
344
|
-
* @returns {boolean} True if the credential uses BBS+ signature
|
|
345
|
-
*/
|
|
346
|
-
isBBSPlusCredential(params) {
|
|
347
|
-
const { credential } = params;
|
|
348
|
-
return isBBSPlusCredential(credential);
|
|
349
|
-
}
|
|
350
|
-
/**
|
|
351
|
-
* Checks if a credential uses KVAC signature
|
|
352
|
-
* @param {Object} params - Check parameters
|
|
353
|
-
* @param {Object} params.credential - The credential to check
|
|
354
|
-
* @returns {boolean} True if the credential uses KVAC signature
|
|
355
|
-
*/
|
|
356
|
-
isKvacCredential(params) {
|
|
357
|
-
const { credential } = params;
|
|
358
|
-
return isKvacCredential(credential);
|
|
359
|
-
}
|
|
360
|
-
/**
|
|
361
|
-
* Checks if a credential is an SD-JWT (Selective Disclosure JWT) credential
|
|
362
|
-
* @param {Object} params - Check parameters
|
|
363
|
-
* @param {string} params.credential - The JWT string to check
|
|
364
|
-
* @returns {boolean} True if the credential is an SD-JWT credential
|
|
365
|
-
* @example
|
|
366
|
-
* const isSDJWT = credentialService.isSDJWTCredential({
|
|
367
|
-
* credential: 'eyJ0eXAiOiJ2YytzZC1qd3Q...'
|
|
368
|
-
* });
|
|
369
|
-
*/
|
|
370
|
-
isSDJWTCredential(params) {
|
|
371
|
-
const { credential } = params;
|
|
372
|
-
return services_credential_sdJwt.isSDJWTCredential(credential);
|
|
373
|
-
}
|
|
374
|
-
/**
|
|
375
|
-
* Converts a credential to W3C Verifiable Credential format
|
|
376
|
-
* @description Handles both SD-JWT credentials (needs decoding) and regular W3C credentials (returns as-is)
|
|
377
|
-
* @param {Object} params - Conversion parameters
|
|
378
|
-
* @param {string|Object} params.credential - Either an SD-JWT string or a credential object
|
|
379
|
-
* @returns {Promise<Object>} W3C Verifiable Credential format
|
|
380
|
-
* @throws {Error} If credential cannot be converted to W3C format
|
|
381
|
-
* @example
|
|
382
|
-
* // Convert SD-JWT to W3C format
|
|
383
|
-
* const w3cCredential = await credentialService.credentialToW3C({
|
|
384
|
-
* credential: 'eyJ0eXAiOiJ2YytzZC1qd3Q...'
|
|
385
|
-
* });
|
|
386
|
-
*
|
|
387
|
-
* // Returns W3C credential as-is
|
|
388
|
-
* const w3cCredential = await credentialService.credentialToW3C({
|
|
389
|
-
* credential: { '@context': [...], type: [...], ... }
|
|
390
|
-
* });
|
|
391
|
-
*/
|
|
392
|
-
async credentialToW3C(params) {
|
|
393
|
-
const { credential } = params;
|
|
394
|
-
return services_credential_sdJwt.credentialToW3C(credential);
|
|
395
|
-
}
|
|
396
|
-
/**
|
|
397
|
-
* Acquires a credential through OpenID for Verifiable Credentials (OID4VC)
|
|
398
|
-
* @param {Object} params - Acquisition parameters
|
|
399
|
-
* @param {string} params.uri - The credential offer URI
|
|
400
|
-
* @param {string} [params.authorizationCode] - Authorization code if required
|
|
401
|
-
* @param {Object} params.holderKeyDocument - Key document for the credential holder
|
|
402
|
-
* @returns {Promise<Object>} Result containing the credential or authorization URL
|
|
403
|
-
* @returns {Object} [returns.credential] - The acquired credential
|
|
404
|
-
* @returns {string} [returns.authorizationURL] - Authorization URL if auth is required
|
|
405
|
-
* @example
|
|
406
|
-
* const result = await credentialService.acquireOIDCredential({
|
|
407
|
-
* uri: 'openid-credential-offer://...',
|
|
408
|
-
* holderKeyDocument: keyDoc
|
|
409
|
-
* });
|
|
410
|
-
*/
|
|
411
|
-
async acquireOIDCredential({ uri, authorizationCode, holderKeyDocument, }) {
|
|
412
|
-
const searchParams = new URL(uri).searchParams;
|
|
413
|
-
new URLSearchParams(searchParams);
|
|
414
|
-
const client = await oid4vciClient.OpenID4VCIClientV1_0_13.fromURI({
|
|
415
|
-
uri: uri,
|
|
416
|
-
clientId: 'dock.wallet',
|
|
417
|
-
authorizationRequest: {
|
|
418
|
-
redirectUri: 'dock-wallet://credentials/callback',
|
|
419
|
-
clientId: 'dock.wallet',
|
|
420
|
-
// Hack: we need the scope property to avoid 'CredentialOffer format is wrong.' error
|
|
421
|
-
scope: []
|
|
422
|
-
},
|
|
423
|
-
});
|
|
424
|
-
const format = 'ldp_vc';
|
|
425
|
-
const { scope } = client.getCredentialsSupported()[0];
|
|
426
|
-
const scopeSplit = scope.split(':');
|
|
427
|
-
const credentialTypes = scopeSplit[scopeSplit.length - 1];
|
|
428
|
-
let code;
|
|
429
|
-
if (client.credentialOffer?.preAuthorizedCode) {
|
|
430
|
-
code = client.credentialOffer?.preAuthorizedCode;
|
|
431
|
-
}
|
|
432
|
-
else {
|
|
433
|
-
if (authorizationCode) {
|
|
434
|
-
code = authorizationCode;
|
|
435
|
-
}
|
|
436
|
-
else {
|
|
437
|
-
return {
|
|
438
|
-
authorizationURL: client.authorizationURL,
|
|
439
|
-
};
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
await client.acquireAccessToken({
|
|
443
|
-
code,
|
|
444
|
-
});
|
|
445
|
-
try {
|
|
446
|
-
const response = await client.acquireCredentials({
|
|
447
|
-
credentialTypes,
|
|
448
|
-
proofCallbacks: {
|
|
449
|
-
signCallback: async (args) => {
|
|
450
|
-
// use service method here
|
|
451
|
-
const jwt = await services_dids_service.didService.createSignedJWT({
|
|
452
|
-
payload: args.payload,
|
|
453
|
-
privateKeyDoc: holderKeyDocument,
|
|
454
|
-
headerInput: args.header,
|
|
455
|
-
});
|
|
456
|
-
return jwt;
|
|
457
|
-
},
|
|
458
|
-
},
|
|
459
|
-
context: 'truverawallet',
|
|
460
|
-
format: format,
|
|
461
|
-
alg: oid4vciCommon.Alg.EdDSA,
|
|
462
|
-
kid: holderKeyDocument.id,
|
|
463
|
-
});
|
|
464
|
-
return {
|
|
465
|
-
credential: response.credential,
|
|
466
|
-
};
|
|
467
|
-
}
|
|
468
|
-
catch (err) {
|
|
469
|
-
console.error(err);
|
|
470
|
-
}
|
|
471
|
-
}
|
|
472
|
-
/**
|
|
473
|
-
* Creates a BBS+ presentation with selective disclosure
|
|
474
|
-
* @param {Object} params - Presentation parameters
|
|
475
|
-
* @param {Array<Object>} params.credentials - Array of credentials with attributes to reveal
|
|
476
|
-
* @param {Object} params.credentials[].credential - The BBS+ credential
|
|
477
|
-
* @param {Array<string>} [params.credentials[].attributesToReveal] - Attributes to reveal
|
|
478
|
-
* @returns {Promise<Object>} The BBS+ presentation
|
|
479
|
-
* @throws {Error} If validation fails
|
|
480
|
-
* @example
|
|
481
|
-
* const presentation = await credentialService.createBBSPresentation({
|
|
482
|
-
* credentials: [{
|
|
483
|
-
* credential: bbsCredential,
|
|
484
|
-
* attributesToReveal: ['name', 'age']
|
|
485
|
-
* }]
|
|
486
|
-
* });
|
|
487
|
-
*/
|
|
488
|
-
async createBBSPresentation(params) {
|
|
489
|
-
services_credential_config.validation.createBBSPresentation(params);
|
|
490
|
-
const { credentials } = params;
|
|
491
|
-
const bbsPlusPresentation = new vc.Presentation();
|
|
492
|
-
for (const { credential, attributesToReveal } of credentials) {
|
|
493
|
-
const idx = await bbsPlusPresentation.addCredentialToPresent(credential, {
|
|
494
|
-
resolver: services_blockchain_service.blockchainService.resolver,
|
|
495
|
-
});
|
|
496
|
-
if (Array.isArray(attributesToReveal) && attributesToReveal.length > 0) {
|
|
497
|
-
await bbsPlusPresentation.addAttributeToReveal(idx, attributesToReveal);
|
|
498
|
-
}
|
|
499
|
-
}
|
|
500
|
-
return bbsPlusPresentation.createPresentation();
|
|
501
|
-
}
|
|
502
|
-
/**
|
|
503
|
-
* Gets the accumulator ID from a credential's status
|
|
504
|
-
* @param {Object} params - Parameters
|
|
505
|
-
* @param {Object} params.credential - The credential to get accumulator ID from
|
|
506
|
-
* @returns {string|null} The accumulator ID or null if not present
|
|
507
|
-
* @throws {Error} If credential is not provided
|
|
508
|
-
*/
|
|
509
|
-
getAccumulatorId({ credential }) {
|
|
510
|
-
assert__default["default"](!!credential, `credential is required`);
|
|
511
|
-
if (!credential?.credentialStatus) {
|
|
512
|
-
return null;
|
|
513
|
-
}
|
|
514
|
-
return credential?.credentialStatus.id;
|
|
515
|
-
}
|
|
516
|
-
/**
|
|
517
|
-
* Gets accumulator data from the blockchain for a credential
|
|
518
|
-
* @param {Object} params - Parameters
|
|
519
|
-
* @param {Object} params.credential - The credential to get accumulator data for
|
|
520
|
-
* @returns {Promise<Object|null>} The accumulator data or null if not found
|
|
521
|
-
* @throws {Error} If credential is not provided
|
|
522
|
-
*/
|
|
523
|
-
async getAccumulatorData({ credential }) {
|
|
524
|
-
assert__default["default"](!!credential, `credential is required`);
|
|
525
|
-
const accumulatorId = await this.getAccumulatorId({ credential });
|
|
526
|
-
if (!accumulatorId) {
|
|
527
|
-
return null;
|
|
528
|
-
}
|
|
529
|
-
return services_blockchain_service.blockchainService.dock.accumulatorModule.getAccumulator(accumulatorId, false);
|
|
530
|
-
}
|
|
531
|
-
/**
|
|
532
|
-
* Updates the membership witness with the latest accumulator state
|
|
533
|
-
* @description The witness is generated by the issuer when the credential is created
|
|
534
|
-
* and is stored in the wallet when the credential is imported. This method updates
|
|
535
|
-
* it with the latest accumulator changes from the blockchain.
|
|
536
|
-
* @param {Object} params - Update parameters
|
|
537
|
-
* @param {Object} params.credential - The credential with revocation status
|
|
538
|
-
* @param {Object} params.membershipWitnessJSON - Current membership witness in JSON format
|
|
539
|
-
* @returns {Promise<Object>} Updated membership witness in JSON format
|
|
540
|
-
* @throws {Error} If updates cannot be fetched or applied
|
|
541
|
-
*/
|
|
542
|
-
async updateMembershipWitness({ credential, membershipWitnessJSON }) {
|
|
543
|
-
const revocationId = credential.credentialStatus.revocationId;
|
|
544
|
-
const member = cryptoWasmTs.Accumulator.encodePositiveNumberAsAccumulatorMember(revocationId);
|
|
545
|
-
let updates = [];
|
|
546
|
-
try {
|
|
547
|
-
updates = await dock.accumulatorModule.getUpdatesFromBlock(accumulatorId, accumulator.lastModified);
|
|
548
|
-
}
|
|
549
|
-
catch (err) {
|
|
550
|
-
if (err.code === -32000) {
|
|
551
|
-
console.error(err);
|
|
552
|
-
// "-32000: Client error: UnknownBlock: State already discarded for BlockId::Hash(<hash>)"
|
|
553
|
-
// This means that the node has discarded old blocks to preserve space. This should not happen with a full node
|
|
554
|
-
updates = [];
|
|
555
|
-
}
|
|
556
|
-
else {
|
|
557
|
-
throw err;
|
|
558
|
-
}
|
|
559
|
-
}
|
|
560
|
-
const additions = [];
|
|
561
|
-
const removals = [];
|
|
562
|
-
if (updates.length && updates[0].additions !== null) {
|
|
563
|
-
for (const a of updates[0].additions) {
|
|
564
|
-
additions.push(utils.hexToU8a(a));
|
|
565
|
-
}
|
|
566
|
-
}
|
|
567
|
-
if (updates.length && updates[0].removals !== null) {
|
|
568
|
-
for (const a of updates[0].removals) {
|
|
569
|
-
removals.push(utils.hexToU8a(a));
|
|
570
|
-
}
|
|
571
|
-
}
|
|
572
|
-
const queriedWitnessInfo = new cryptoWasmTs.WitnessUpdatePublicInfo(utils.hexToU8a(updates[0].witnessUpdateInfo));
|
|
573
|
-
const witness = cryptoWasmTs.MembershipWitness.fromJSON(membershipWitnessJSON);
|
|
574
|
-
witness.updateUsingPublicInfoPostBatchUpdate(member, additions, removals, queriedWitnessInfo);
|
|
575
|
-
return witness.toJSON();
|
|
576
|
-
}
|
|
577
|
-
/**
|
|
578
|
-
* Derives verifiable credentials from a presentation with selective disclosure
|
|
579
|
-
* @param {Object} params - Derivation parameters
|
|
580
|
-
* @param {Array<Object>} params.credentials - Array of credential objects
|
|
581
|
-
* @param {Object} params.credentials[].credential - The credential
|
|
582
|
-
* @param {Array<string>} params.credentials[].attributesToReveal - Attributes to reveal
|
|
583
|
-
* @param {Object} [params.credentials[].witness] - Membership witness for revocation
|
|
584
|
-
* @param {Object} [params.options={}] - Additional options for derivation
|
|
585
|
-
* @param {Object} [params.proofRequest] - Proof request with constraints
|
|
586
|
-
* @returns {Promise<Array>} Array of derived credentials
|
|
587
|
-
* @throws {Error} If validation fails
|
|
588
|
-
* @example
|
|
589
|
-
* const derivedCredentials = await credentialService.deriveVCFromPresentation({
|
|
590
|
-
* credentials: [{
|
|
591
|
-
* credential: bbsCredential,
|
|
592
|
-
* attributesToReveal: ['name', 'dateOfBirth']
|
|
593
|
-
* }]
|
|
594
|
-
* });
|
|
595
|
-
*/
|
|
596
|
-
async deriveVCFromPresentation(params) {
|
|
597
|
-
services_credential_config.validation.deriveVCFromPresentation(params);
|
|
598
|
-
const { credentials, options = {}, proofRequest } = params;
|
|
599
|
-
const presentation = new vc.Presentation();
|
|
600
|
-
const selectedCredentials = credentials.map(({ credential }) => credential);
|
|
601
|
-
let descriptorBounds = [];
|
|
602
|
-
for (const { credential } of credentials) {
|
|
603
|
-
await presentation.addCredentialToPresent(credential, {
|
|
604
|
-
resolver: services_blockchain_service.blockchainService.resolver,
|
|
605
|
-
});
|
|
606
|
-
}
|
|
607
|
-
if (proofRequest && services_credential_boundCheck.hasProvingKey(proofRequest)) {
|
|
608
|
-
const { provingKey, provingKeyId } = await services_credential_boundCheck.fetchProvingKey(proofRequest);
|
|
609
|
-
descriptorBounds = services_credential_boundCheck.applyEnforceBounds({
|
|
610
|
-
builder: presentation.presBuilder,
|
|
611
|
-
proofRequest,
|
|
612
|
-
provingKey,
|
|
613
|
-
provingKeyId,
|
|
614
|
-
selectedCredentials,
|
|
615
|
-
});
|
|
616
|
-
}
|
|
617
|
-
let pexRequiredAttributes = [];
|
|
618
|
-
if (proofRequest?.request) {
|
|
619
|
-
pexRequiredAttributes = services_credential_pexHelpers.getPexRequiredAttributes(proofRequest.request, selectedCredentials);
|
|
620
|
-
}
|
|
621
|
-
let idx = 0;
|
|
622
|
-
for (const { attributesToReveal, witness, credential } of credentials) {
|
|
623
|
-
const attributesToSkip = descriptorBounds[idx]
|
|
624
|
-
? descriptorBounds[idx].map(bound => bound.attributeName)
|
|
625
|
-
: [];
|
|
626
|
-
const filteredAttributes = attributesToReveal.filter(attribute => !attributesToSkip.includes(attribute) && !services_credential_pexHelpers.shouldSkipAttribute(attribute));
|
|
627
|
-
const _pexRequiredAttributes = pexRequiredAttributes[idx] || [];
|
|
628
|
-
_pexRequiredAttributes.forEach(attr => {
|
|
629
|
-
if (!filteredAttributes.includes(attr)) {
|
|
630
|
-
filteredAttributes.push(attr);
|
|
631
|
-
}
|
|
632
|
-
});
|
|
633
|
-
if (Array.isArray(filteredAttributes) && filteredAttributes.length > 0) {
|
|
634
|
-
presentation.addAttributeToReveal(idx, filteredAttributes);
|
|
635
|
-
}
|
|
636
|
-
if (witness) {
|
|
637
|
-
const details = await services_credential_bbsRevocation.getWitnessDetails(credential, witness);
|
|
638
|
-
const chainModule = credential.credentialStatus.id.indexOf('dock:accumulator') === 0
|
|
639
|
-
? services_blockchain_service.blockchainService.modules.accumulator.modules[0]
|
|
640
|
-
: services_blockchain_service.blockchainService.modules.accumulator.modules[services_blockchain_service.blockchainService.modules.accumulator.modules.length - 1];
|
|
641
|
-
const accumulatorModuleClass = chainModule.constructor;
|
|
642
|
-
presentation.presBuilder.addAccumInfoForCredStatus(idx, details.membershipWitness, accumulatorModuleClass.accumulatedFromHex(details.accumulator.accumulated, cryptoWasmTs.VB_ACCUMULATOR_22.VBPos), details.pk, details.params);
|
|
643
|
-
}
|
|
644
|
-
idx++;
|
|
645
|
-
}
|
|
646
|
-
const credentialsFromPresentation = await presentation.deriveCredentials(options);
|
|
647
|
-
return credentialsFromPresentation;
|
|
648
|
-
}
|
|
649
|
-
/**
|
|
650
|
-
* Test method for range proofs
|
|
651
|
-
* @private
|
|
652
|
-
* @returns {Promise<void>}
|
|
653
|
-
*/
|
|
654
|
-
async testRangeProof() {
|
|
655
|
-
console.log('test');
|
|
656
|
-
}
|
|
657
|
-
}
|
|
658
|
-
/**
|
|
659
|
-
* Singleton instance of the credential service
|
|
660
|
-
* @type {CredentialService}
|
|
661
|
-
* @example
|
|
662
|
-
* import { credentialService } from '@docknetwork/wallet-sdk-wasm/services/credential';
|
|
663
|
-
*
|
|
664
|
-
* // Create and sign a credential
|
|
665
|
-
* const credential = credentialService.generateCredential({
|
|
666
|
-
* subject: { id: 'did:example:123' }
|
|
667
|
-
* });
|
|
668
|
-
* const signed = await credentialService.signCredential({
|
|
669
|
-
* vcJson: credential,
|
|
670
|
-
* keyDoc: issuerKey
|
|
671
|
-
* });
|
|
672
|
-
*
|
|
673
|
-
* // Verify a credential
|
|
674
|
-
* const result = await credentialService.verifyCredential({
|
|
675
|
-
* credential: signedCredential
|
|
676
|
-
* });
|
|
677
|
-
*/
|
|
678
|
-
const credentialService = new CredentialService();
|
|
679
|
-
|
|
680
|
-
exports.credentialService = credentialService;
|
|
681
|
-
exports.isAnnonymousCredential = isAnnonymousCredential;
|
|
682
|
-
exports.isBBSPlusCredential = isBBSPlusCredential;
|
|
683
|
-
exports.isKvacCredential = isKvacCredential;
|