@credo-ts/didcomm 0.7.4 → 0.7.5-alpha-20261105152249
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.
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import { SignatureDecorator } from "./SignatureDecorator.mjs";
|
|
2
2
|
import { CredoError, JsonEncoder, Kms, TypedArrayEncoder, utils } from "@credo-ts/core";
|
|
3
3
|
//#region src/decorators/signature/SignatureDecoratorUtils.ts
|
|
4
|
+
const decodeSignatureField = (value, field) => {
|
|
5
|
+
try {
|
|
6
|
+
return TypedArrayEncoder.fromBase64Url(value.replace(/=+$/, ""));
|
|
7
|
+
} catch (base64UrlError) {
|
|
8
|
+
try {
|
|
9
|
+
return TypedArrayEncoder.fromBase64(value);
|
|
10
|
+
} catch {
|
|
11
|
+
throw new CredoError(`Could not decode signature decorator ${field} as base64url or base64 string.`, { cause: base64UrlError });
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
};
|
|
4
15
|
/**
|
|
5
16
|
*
|
|
6
17
|
* Unpack and verify signed data before casting it to the supplied type.
|
|
@@ -15,8 +26,8 @@ async function unpackAndVerifySignatureDecorator(agentContext, decorator) {
|
|
|
15
26
|
crv: "Ed25519",
|
|
16
27
|
publicKey: TypedArrayEncoder.fromBase58(signerVerkey)
|
|
17
28
|
});
|
|
18
|
-
const signedData =
|
|
19
|
-
const signature =
|
|
29
|
+
const signedData = decodeSignatureField(decorator.signatureData, "signatureData");
|
|
30
|
+
const signature = decodeSignatureField(decorator.signature, "signature");
|
|
20
31
|
if (!(await kms.verify({
|
|
21
32
|
algorithm: "EdDSA",
|
|
22
33
|
data: signedData,
|
|
@@ -25,7 +36,7 @@ async function unpackAndVerifySignatureDecorator(agentContext, decorator) {
|
|
|
25
36
|
})).verified) throw new CredoError("Could not verify signature");
|
|
26
37
|
return JsonEncoder.fromUint8Array(signedData.slice(8));
|
|
27
38
|
} catch (error) {
|
|
28
|
-
throw new CredoError("Signature is not valid", error);
|
|
39
|
+
throw new CredoError("Signature is not valid", { cause: error });
|
|
29
40
|
}
|
|
30
41
|
}
|
|
31
42
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignatureDecoratorUtils.mjs","names":[],"sources":["../../../src/decorators/signature/SignatureDecoratorUtils.ts"],"sourcesContent":["import type { AgentContext } from '@credo-ts/core'\nimport { CredoError, JsonEncoder, Kms, TypedArrayEncoder, utils } from '@credo-ts/core'\nimport { SignatureDecorator } from './SignatureDecorator'\n\n/**\n *\n * Unpack and verify signed data before casting it to the supplied type.\n *\n */\nexport async function unpackAndVerifySignatureDecorator(\n agentContext: AgentContext,\n decorator: SignatureDecorator\n): Promise<Record<string, unknown>> {\n try {\n const signerVerkey = decorator.signer\n const kms = agentContext.dependencyManager.resolve(Kms.KeyManagementApi)\n\n const publicJwk = Kms.PublicJwk.fromPublicKey({\n kty: 'OKP',\n crv: 'Ed25519',\n publicKey: TypedArrayEncoder.fromBase58(signerVerkey),\n })\n\n // first 8 bytes are for 64 bit integer from unix epoch\n const signedData =
|
|
1
|
+
{"version":3,"file":"SignatureDecoratorUtils.mjs","names":[],"sources":["../../../src/decorators/signature/SignatureDecoratorUtils.ts"],"sourcesContent":["import type { AgentContext } from '@credo-ts/core'\nimport { CredoError, JsonEncoder, Kms, TypedArrayEncoder, utils } from '@credo-ts/core'\nimport { SignatureDecorator } from './SignatureDecorator'\n\n// Spec'd as base64url, but ACA-Py pads it and older agents emit standard base64, so\n// accept both, as `DidCommAttachment.getDataAsUint8Array` does.\nconst decodeSignatureField = (value: string, field: string): Uint8Array => {\n try {\n return TypedArrayEncoder.fromBase64Url(value.replace(/=+$/, ''))\n } catch (base64UrlError) {\n try {\n return TypedArrayEncoder.fromBase64(value)\n } catch {\n throw new CredoError(`Could not decode signature decorator ${field} as base64url or base64 string.`, {\n cause: base64UrlError,\n })\n }\n }\n}\n\n/**\n *\n * Unpack and verify signed data before casting it to the supplied type.\n *\n */\nexport async function unpackAndVerifySignatureDecorator(\n agentContext: AgentContext,\n decorator: SignatureDecorator\n): Promise<Record<string, unknown>> {\n try {\n const signerVerkey = decorator.signer\n const kms = agentContext.dependencyManager.resolve(Kms.KeyManagementApi)\n\n const publicJwk = Kms.PublicJwk.fromPublicKey({\n kty: 'OKP',\n crv: 'Ed25519',\n publicKey: TypedArrayEncoder.fromBase58(signerVerkey),\n })\n\n // first 8 bytes are for 64 bit integer from unix epoch\n const signedData = decodeSignatureField(decorator.signatureData, 'signatureData')\n const signature = decodeSignatureField(decorator.signature, 'signature')\n\n const result = await kms.verify({\n algorithm: 'EdDSA',\n data: signedData,\n key: {\n publicJwk: publicJwk.toJson(),\n },\n signature,\n })\n\n if (!result.verified) {\n throw new CredoError('Could not verify signature')\n }\n\n return JsonEncoder.fromUint8Array(signedData.slice(8))\n } catch (error) {\n throw new CredoError('Signature is not valid', { cause: error })\n }\n}\n\n/**\n *\n * Sign data supplied and return a signature decorator.\n *\n */\nexport async function signData(\n agentContext: AgentContext,\n data: unknown,\n signerKey: Kms.PublicJwk<Kms.Ed25519PublicJwk>\n): Promise<SignatureDecorator> {\n const kms = agentContext.dependencyManager.resolve(Kms.KeyManagementApi)\n const dataBuffer = TypedArrayEncoder.concat([utils.timestamp(), JsonEncoder.toUint8Array(data)])\n\n const result = await kms.sign({ data: dataBuffer, algorithm: 'EdDSA', keyId: signerKey.keyId })\n\n const signatureDecorator = new SignatureDecorator({\n signatureType: 'https://didcomm.org/signature/1.0/ed25519Sha512_single',\n signature: TypedArrayEncoder.toBase64Url(result.signature),\n signatureData: TypedArrayEncoder.toBase64Url(dataBuffer),\n signer: TypedArrayEncoder.toBase58(signerKey.publicKey.publicKey),\n })\n\n return signatureDecorator\n}\n"],"mappings":";;;AAMA,MAAM,wBAAwB,OAAe,UAA8B;CACzE,IAAI;EACF,OAAO,kBAAkB,cAAc,MAAM,QAAQ,OAAO,EAAE,CAAC;CACjE,SAAS,gBAAgB;EACvB,IAAI;GACF,OAAO,kBAAkB,WAAW,KAAK;EAC3C,QAAQ;GACN,MAAM,IAAI,WAAW,wCAAwC,MAAM,kCAAkC,EACnG,OAAO,eACT,CAAC;EACH;CACF;AACF;;;;;;AAOA,eAAsB,kCACpB,cACA,WACkC;CAClC,IAAI;EACF,MAAM,eAAe,UAAU;EAC/B,MAAM,MAAM,aAAa,kBAAkB,QAAQ,IAAI,gBAAgB;EAEvE,MAAM,YAAY,IAAI,UAAU,cAAc;GAC5C,KAAK;GACL,KAAK;GACL,WAAW,kBAAkB,WAAW,YAAY;EACtD,CAAC;EAGD,MAAM,aAAa,qBAAqB,UAAU,eAAe,eAAe;EAChF,MAAM,YAAY,qBAAqB,UAAU,WAAW,WAAW;EAWvE,IAAI,EAAC,MATgB,IAAI,OAAO;GAC9B,WAAW;GACX,MAAM;GACN,KAAK,EACH,WAAW,UAAU,OAAO,EAC9B;GACA;EACF,CAAC,EAAA,CAEW,UACV,MAAM,IAAI,WAAW,4BAA4B;EAGnD,OAAO,YAAY,eAAe,WAAW,MAAM,CAAC,CAAC;CACvD,SAAS,OAAO;EACd,MAAM,IAAI,WAAW,0BAA0B,EAAE,OAAO,MAAM,CAAC;CACjE;AACF;;;;;;AAOA,eAAsB,SACpB,cACA,MACA,WAC6B;CAC7B,MAAM,MAAM,aAAa,kBAAkB,QAAQ,IAAI,gBAAgB;CACvE,MAAM,aAAa,kBAAkB,OAAO,CAAC,MAAM,UAAU,GAAG,YAAY,aAAa,IAAI,CAAC,CAAC;CAE/F,MAAM,SAAS,MAAM,IAAI,KAAK;EAAE,MAAM;EAAY,WAAW;EAAS,OAAO,UAAU;CAAM,CAAC;CAS9F,OAAO,IAPwB,mBAAmB;EAChD,eAAe;EACf,WAAW,kBAAkB,YAAY,OAAO,SAAS;EACzD,eAAe,kBAAkB,YAAY,UAAU;EACvD,QAAQ,kBAAkB,SAAS,UAAU,UAAU,SAAS;CAClE,CAEwB;AAC1B"}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
".": "./build/index.mjs",
|
|
5
5
|
"./package.json": "./package.json"
|
|
6
6
|
},
|
|
7
|
-
"version": "0.7.
|
|
7
|
+
"version": "0.7.5-alpha-20261105152249",
|
|
8
8
|
"files": [
|
|
9
9
|
"build"
|
|
10
10
|
],
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"luxon": "^3.7.2",
|
|
25
25
|
"query-string": "^9.3.1",
|
|
26
26
|
"rxjs": "^7.8.2",
|
|
27
|
-
"@credo-ts/core": "0.7.
|
|
27
|
+
"@credo-ts/core": "0.7.5-alpha-20261105152249"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@animo-id/pex": "^6.1.1",
|