Skip to content

Commit f7e8812

Browse files
committed
fix: anoncreds revocation and presentations working
Signed-off-by: ryankoch13 <[email protected]>
1 parent 4107aee commit f7e8812

File tree

12 files changed

+69
-29
lines changed

12 files changed

+69
-29
lines changed

packages/anoncreds/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"name": "@credo-ts/anoncreds",
3-
"main": "src/index",
4-
"types": "src/index",
5-
"version": "0.5.6",
3+
"main": "build/index",
4+
"types": "build/index",
5+
"version": "0.5.6-revocation",
66
"files": [
77
"build"
88
],
@@ -27,7 +27,7 @@
2727
},
2828
"dependencies": {
2929
"@astronautlabs/jsonpath": "^1.1.2",
30-
"@credo-ts/core": "file:./../core",
30+
"@credo-ts/core": "0.5.6-revocation",
3131
"@sphereon/pex-models": "^2.2.4",
3232
"big-integer": "^1.6.51",
3333
"bn.js": "^5.2.1",

packages/anoncreds/src/utils/w3cAnonCredsUtils.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,14 @@ export function getStoreCredentialOptions(
186186
return storeCredentialOptions
187187
}
188188

189+
// The issuer of the schema does not always match the issuer of the credential definition thus the unqualified schema id needs to be derived from both values
190+
function getUnqualifiedSchemaId(schemaIssuerId: string, schemaId: string) {
191+
const schemaDid = schemaIssuerId.split(':')[3]
192+
const split = getUnQualifiedDidIndyDid(schemaId).split(':')
193+
split[0] = schemaDid
194+
return split.join(':')
195+
}
196+
189197
export function getW3cRecordAnonCredsTags(options: {
190198
credentialSubject: W3cCredentialSubject
191199
issuerId: string
@@ -222,7 +230,7 @@ export function getW3cRecordAnonCredsTags(options: {
222230
...((isIndyDid(issuerId) || isUnqualifiedIndyDid(issuerId)) && {
223231
anonCredsUnqualifiedIssuerId: getUnQualifiedDidIndyDid(issuerId),
224232
anonCredsUnqualifiedCredentialDefinitionId: getUnQualifiedDidIndyDid(credentialDefinitionId),
225-
anonCredsUnqualifiedSchemaId: getUnQualifiedDidIndyDid(issuerId),
233+
anonCredsUnqualifiedSchemaId: getUnqualifiedSchemaId(schema.issuerId, schemaId),
226234
anonCredsUnqualifiedSchemaIssuerId: getUnQualifiedDidIndyDid(schema.issuerId),
227235
anonCredsUnqualifiedRevocationRegistryId: revocationRegistryId
228236
? getUnQualifiedDidIndyDid(revocationRegistryId)

packages/core/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"name": "@credo-ts/core",
3-
"main": "src/index",
4-
"types": "src/index",
5-
"version": "0.5.6",
3+
"main": "build/index",
4+
"types": "build/index",
5+
"version": "0.5.6-revocation",
66
"files": [
77
"build"
88
],

packages/core/src/modules/dids/domain/DidDocument.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ export class DidDocument {
114114
// TODO: once we use JSON-LD we should use that to resolve references in did documents.
115115
// for now we check whether the key id ends with the keyId.
116116
// so if looking for #123 and key.id is did:key:123#123, it is valid. But #123 as key.id is also valid
117-
const verificationMethod = this.verificationMethod?.find((key) => key.id.endsWith(keyId))
117+
const verificationMethod = this.verificationMethod?.find((key) => key.id.endsWith(keyId) || key.controller === keyId)
118118

119119
if (!verificationMethod) {
120120
throw new CredoError(`Unable to locate verification method with id '${keyId}'`)

packages/core/src/modules/dids/domain/verificationMethod/Bls12381G1Key2020.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,13 @@ export function getKeyFromBls12381G1Key2020(verificationMethod: Bls12381G1Key202
3535
if (verificationMethod.publicKeyBase58) {
3636
return Key.fromPublicKeyBase58(verificationMethod.publicKeyBase58, KeyType.Bls12381g1)
3737
}
38-
39-
throw new CredoError('verification method is missing publicKeyBase58')
38+
if (verificationMethod.publicKeyMultibase) {
39+
const key = Key.fromFingerprint(verificationMethod.publicKeyMultibase)
40+
if (key.keyType === KeyType.Bls12381g1) return key
41+
else
42+
throw new CredoError(
43+
`Unexpected key type from resolving multibase encoding, key type was ${key.keyType} but expected ${KeyType.Bls12381g1}}`
44+
)
45+
}
46+
throw new CredoError('verification method is missing publicKeyBase58 or publicKeyMultibase')
4047
}

packages/core/src/modules/dids/domain/verificationMethod/Bls12381G2Key2020.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,13 @@ export function getKeyFromBls12381G2Key2020(verificationMethod: Bls12381G2Key202
3535
if (verificationMethod.publicKeyBase58) {
3636
return Key.fromPublicKeyBase58(verificationMethod.publicKeyBase58, KeyType.Bls12381g2)
3737
}
38-
39-
throw new CredoError('verification method is missing publicKeyBase58')
38+
if (verificationMethod.publicKeyMultibase) {
39+
const key = Key.fromFingerprint(verificationMethod.publicKeyMultibase)
40+
if (key.keyType === KeyType.Bls12381g2) return key
41+
else
42+
throw new CredoError(
43+
`Unexpected key type from resolving multibase encoding, key type was ${key.keyType} but expected ${KeyType.Bls12381g2}}`
44+
)
45+
}
46+
throw new CredoError('verification method is missing publicKeyBase58 or publicKeyMultibase')
4047
}

packages/core/src/modules/dids/domain/verificationMethod/EcdsaSecp256k1VerificationKey2019.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,13 @@ export function getKeyFromEcdsaSecp256k1VerificationKey2019(verificationMethod:
4646
if (verificationMethod.publicKeyBase58) {
4747
return Key.fromPublicKeyBase58(verificationMethod.publicKeyBase58, KeyType.K256)
4848
}
49-
50-
throw new CredoError('verification method is missing publicKeyBase58')
49+
if (verificationMethod.publicKeyMultibase) {
50+
const key = Key.fromFingerprint(verificationMethod.publicKeyMultibase)
51+
if (key.keyType === KeyType.K256) return key
52+
else
53+
throw new CredoError(
54+
`Unexpected key type from resolving multibase encoding, key type was ${key.keyType} but expected ${KeyType.K256}}`
55+
)
56+
}
57+
throw new CredoError('verification method is missing publicKeyBase58 or publicKeyMultibase')
5158
}

packages/core/src/modules/dids/domain/verificationMethod/Ed25519VerificationKey2018.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,13 @@ export function getKeyFromEd25519VerificationKey2018(verificationMethod: Ed25519
3737
if (verificationMethod.publicKeyBase58) {
3838
return Key.fromPublicKeyBase58(verificationMethod.publicKeyBase58, KeyType.Ed25519)
3939
}
40-
41-
throw new CredoError('verification method is missing publicKeyBase58')
40+
if (verificationMethod.publicKeyMultibase) {
41+
const key = Key.fromFingerprint(verificationMethod.publicKeyMultibase)
42+
if (key.keyType === KeyType.Ed25519) return key
43+
else
44+
throw new CredoError(
45+
`Unexpected key type from resolving multibase encoding, key type was ${key.keyType} but expected ${KeyType.Ed25519}`
46+
)
47+
}
48+
throw new CredoError('verification method is missing publicKeyBase58 or publicKeyMultibase')
4249
}

packages/core/src/modules/dids/domain/verificationMethod/X25519KeyAgreementKey2019.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ export function getKeyFromX25519KeyAgreementKey2019(verificationMethod: X25519Ke
4444
throw new CredoError(
4545
`Unexpected key type from resolving multibase encoding, key type was ${key.keyType} but expected ${KeyType.X25519}`
4646
)
47-
}
48-
49-
throw new CredoError('verification method is missing publicKeyBase58 or publicKeyMultibase')
47+
}
48+
throw new CredoError('verification method is missing publicKeyBase58 or publicKeyMultibase')
5049
}

packages/core/src/modules/dids/methods/peer/peerDidNumAlgo2.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,12 @@ export function didToNumAlgo2DidDocument(did: string) {
7272

7373
service.id = `${did}#${service.type.toLowerCase()}-${serviceIndex++}`
7474

75-
didDocument.addService(JsonTransformer.fromJSON(service, DidDocumentService))
75+
try {
76+
didDocument.addService(JsonTransformer.fromJSON(service, DidDocumentService))
77+
} catch (e) {
78+
//If it is didCommv2 the json transform will throw
79+
serviceIndex--
80+
}
7681
}
7782
}
7883
// Otherwise we can be sure it is a key

packages/indy-vdr/package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"name": "@credo-ts/indy-vdr",
3-
"main": "src/index",
4-
"types": "src/index",
5-
"version": "0.5.6",
3+
"main": "build/index",
4+
"types": "build/index",
5+
"version": "0.5.6-revocation",
66
"files": [
77
"build"
88
],
@@ -26,8 +26,8 @@
2626
"test": "jest"
2727
},
2828
"dependencies": {
29-
"@credo-ts/anoncreds": "file:./../anoncreds",
30-
"@credo-ts/core": "file:./../core"
29+
"@credo-ts/anoncreds": "0.5.6-revocation",
30+
"@credo-ts/core": "0.5.6-revocation"
3131
},
3232
"devDependencies": {
3333
"@hyperledger/indy-vdr-nodejs": "^0.2.2",

packages/indy-vdr/src/anoncreds/IndyVdrAnonCredsRegistry.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import type {
3131
RegisterRevocationStatusListOptions,
3232
} from '@credo-ts/anoncreds'
3333
import type { AgentContext } from '@credo-ts/core'
34-
import type { SchemaResponse } from '@hyperledger/indy-vdr-shared'
34+
import type { GetCredentialDefinitionResponse, SchemaResponse } from '@hyperledger/indy-vdr-shared'
3535

3636
import {
3737
getUnqualifiedCredentialDefinitionId,
@@ -268,7 +268,7 @@ export class IndyVdrAnonCredsRegistry implements AnonCredsRegistry {
268268
agentContext.config.logger.trace(
269269
`Submitting get credential definition request for credential definition '${credentialDefinitionId}' to ledger '${pool.indyNamespace}'`
270270
)
271-
const response = await pool.submitRequest(request)
271+
const response: GetCredentialDefinitionResponse = await pool.submitRequest(request)
272272

273273
// We need to fetch the schema to determine the schemaId (we only have the seqNo)
274274
const schema = await this.fetchIndySchemaWithSeqNo(agentContext, response.result.ref, namespaceIdentifier)
@@ -979,7 +979,7 @@ export class IndyVdrAnonCredsRegistry implements AnonCredsRegistry {
979979
}
980980

981981
const schema = response.result.data?.txn.data as SchemaType
982-
const schemaDid = response.result.data?.txn.metadata.from as string
982+
const schemaDid = response.result.data?.txn.metadata['from'] as string
983983
const schemaId = getUnqualifiedSchemaId(schemaDid, schema.data.name, schema.data.version)
984984

985985
return {

0 commit comments

Comments
 (0)