@cardano-sdk/key-management 0.24.13 → 0.25.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/dist/cjs/cip8/cip30signData.d.ts +2 -2
- package/dist/cjs/cip8/cip30signData.d.ts.map +1 -1
- package/dist/cjs/cip8/cip30signData.js +35 -8
- package/dist/cjs/cip8/cip30signData.js.map +1 -1
- package/dist/cjs/cip8/types.d.ts +1 -1
- package/dist/cjs/cip8/types.d.ts.map +1 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/cip8/cip30signData.d.ts +2 -2
- package/dist/esm/cip8/cip30signData.d.ts.map +1 -1
- package/dist/esm/cip8/cip30signData.js +12 -8
- package/dist/esm/cip8/cip30signData.js.map +1 -1
- package/dist/esm/cip8/types.d.ts +1 -1
- package/dist/esm/cip8/types.d.ts.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
|
@@ -7,7 +7,7 @@ import { Cip8SignDataContext } from './types';
|
|
|
7
7
|
import { ComposableError, HexBlob } from '@cardano-sdk/util';
|
|
8
8
|
export interface Cip30SignDataRequest {
|
|
9
9
|
knownAddresses: GroupedAddress[];
|
|
10
|
-
signWith: Cardano.PaymentAddress | Cardano.RewardAccount
|
|
10
|
+
signWith: Cardano.PaymentAddress | Cardano.RewardAccount;
|
|
11
11
|
payload: HexBlob;
|
|
12
12
|
sender?: MessageSender;
|
|
13
13
|
}
|
|
@@ -21,7 +21,7 @@ export declare class Cip30DataSignError<InnerError = unknown> extends Composable
|
|
|
21
21
|
readonly info: string;
|
|
22
22
|
constructor(code: Cip30DataSignErrorCode, info: string, innerError?: InnerError);
|
|
23
23
|
}
|
|
24
|
-
export declare const getAddressBytes: (signWith: Cardano.PaymentAddress | Cardano.RewardAccount
|
|
24
|
+
export declare const getAddressBytes: (signWith: Cardano.PaymentAddress | Cardano.RewardAccount) => Buffer;
|
|
25
25
|
export declare const createCoseKey: (addressBytes: Uint8Array, publicKey: Crypto.Ed25519PublicKeyHex) => COSEKey;
|
|
26
26
|
export declare const cip30signData: (keyAgent: KeyAgent, { knownAddresses, signWith, payload }: Cip8SignDataContext) => Promise<Cip30DataSignature>;
|
|
27
27
|
//# sourceMappingURL=cip30signData.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cip30signData.d.ts","sourceRoot":"","sources":["../../../src/cip8/cip30signData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAA4B,cAAc,EAAE,QAAQ,EAAW,aAAa,EAAE,MAAM,UAAU,CAAC;AACtG,OAAO,EAGL,OAAO,EASR,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,OAAO,EAAQ,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAI7D,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,cAAc,EAAE,CAAC;IACjC,QAAQ,EAAE,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,
|
|
1
|
+
{"version":3,"file":"cip30signData.d.ts","sourceRoot":"","sources":["../../../src/cip8/cip30signData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAA4B,cAAc,EAAE,QAAQ,EAAW,aAAa,EAAE,MAAM,UAAU,CAAC;AACtG,OAAO,EAGL,OAAO,EASR,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,OAAO,EAAQ,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAI7D,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,cAAc,EAAE,CAAC;IACjC,QAAQ,EAAE,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IACzD,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,oBAAY,sBAAsB;IAChC,eAAe,IAAI;IACnB,YAAY,IAAI;IAChB,YAAY,IAAI;CACjB;AAED,qBAAa,kBAAkB,CAAC,UAAU,GAAG,OAAO,CAAE,SAAQ,eAAe,CAAC,UAAU,CAAC;aAC3D,IAAI,EAAE,sBAAsB;aAAkB,IAAI,EAAE,MAAM;gBAA1D,IAAI,EAAE,sBAAsB,EAAkB,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU;CAGhH;AAED,eAAO,MAAM,eAAe,aAAc,QAAQ,cAAc,GAAG,QAAQ,aAAa,WAQvF,CAAC;AA8DF,eAAO,MAAM,aAAa,iBAAkB,UAAU,aAAa,OAAO,mBAAmB,YAO5F,CAAC;AAQF,eAAO,MAAM,aAAa,aACd,QAAQ,yCACqB,mBAAmB,KACzD,QAAQ,kBAAkB,CAwB5B,CAAC"}
|
|
@@ -1,6 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
26
|
exports.cip30signData = exports.createCoseKey = exports.getAddressBytes = exports.Cip30DataSignError = exports.Cip30DataSignErrorCode = void 0;
|
|
27
|
+
const Crypto = __importStar(require("@cardano-sdk/crypto"));
|
|
4
28
|
const cardano_message_signing_nodejs_1 = require("@emurgo/cardano-message-signing-nodejs");
|
|
5
29
|
const core_1 = require("@cardano-sdk/core");
|
|
6
30
|
const util_1 = require("@cardano-sdk/util");
|
|
@@ -28,10 +52,8 @@ const getAddressBytes = (signWith) => {
|
|
|
28
52
|
return Buffer.from(address.toBytes(), 'hex');
|
|
29
53
|
};
|
|
30
54
|
exports.getAddressBytes = getAddressBytes;
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
return util_3.DREP_KEY_DERIVATION_PATH;
|
|
34
|
-
}
|
|
55
|
+
const isPaymentAddress = (signWith) => signWith.startsWith('addr');
|
|
56
|
+
const getDerivationPath = async (signWith, knownAddresses, dRepKeyHash) => {
|
|
35
57
|
const isRewardAccount = signWith.startsWith('stake');
|
|
36
58
|
if (isRewardAccount) {
|
|
37
59
|
const knownRewardAddress = knownAddresses.find(({ rewardAccount }) => rewardAccount === signWith);
|
|
@@ -39,6 +61,13 @@ const getDerivationPath = async (signWith, knownAddresses) => {
|
|
|
39
61
|
throw new Cip30DataSignError(Cip30DataSignErrorCode.ProofGeneration, 'Unknown reward address');
|
|
40
62
|
return knownRewardAddress.stakeKeyDerivationPath || util_3.STAKE_KEY_DERIVATION_PATH;
|
|
41
63
|
}
|
|
64
|
+
if (isPaymentAddress(signWith)) {
|
|
65
|
+
const drepAddr = core_1.Cardano.Address.fromString(signWith);
|
|
66
|
+
if (drepAddr?.getType() === core_1.Cardano.AddressType.EnterpriseKey &&
|
|
67
|
+
drepAddr?.getProps().paymentPart?.hash === Crypto.Hash28ByteBase16.fromEd25519KeyHashHex(dRepKeyHash)) {
|
|
68
|
+
return util_3.DREP_KEY_DERIVATION_PATH;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
42
71
|
const knownAddress = knownAddresses.find(({ address }) => address === signWith);
|
|
43
72
|
if (!knownAddress) {
|
|
44
73
|
throw new Cip30DataSignError(Cip30DataSignErrorCode.ProofGeneration, 'Unknown address');
|
|
@@ -70,11 +99,9 @@ const createCoseKey = (addressBytes, publicKey) => {
|
|
|
70
99
|
};
|
|
71
100
|
exports.createCoseKey = createCoseKey;
|
|
72
101
|
const cip30signData = async (keyAgent, { knownAddresses, signWith, payload }) => {
|
|
73
|
-
|
|
74
|
-
throw new Cip30DataSignError(Cip30DataSignErrorCode.AddressNotPK, 'Invalid address');
|
|
75
|
-
}
|
|
102
|
+
const dRepKeyHash = (await Crypto.Ed25519PublicKey.fromHex(await keyAgent.derivePublicKey(util_3.DREP_KEY_DERIVATION_PATH)).hash()).hex();
|
|
76
103
|
const addressBytes = (0, exports.getAddressBytes)(signWith);
|
|
77
|
-
const derivationPath = await getDerivationPath(signWith, knownAddresses);
|
|
104
|
+
const derivationPath = await getDerivationPath(signWith, knownAddresses, dRepKeyHash);
|
|
78
105
|
const builder = cardano_message_signing_nodejs_1.COSESign1Builder.new(cardano_message_signing_nodejs_1.Headers.new(cardano_message_signing_nodejs_1.ProtectedHeaderMap.new(createSigStructureHeaders(addressBytes)), cardano_message_signing_nodejs_1.HeaderMap.new()), Buffer.from(payload, 'hex'), false);
|
|
79
106
|
const sigStructure = builder.make_data_to_sign();
|
|
80
107
|
const { signature, publicKey } = await signSigStructure(keyAgent, derivationPath, sigStructure);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cip30signData.js","sourceRoot":"","sources":["../../../src/cip8/cip30signData.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cip30signData.js","sourceRoot":"","sources":["../../../src/cip8/cip30signData.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/cip8/types.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export declare type CoseSign1CborHex = HexBlob;
|
|
|
6
6
|
export declare type CoseKeyCborHex = HexBlob;
|
|
7
7
|
export interface Cip8SignDataContext {
|
|
8
8
|
knownAddresses: GroupedAddress[];
|
|
9
|
-
signWith: Cardano.PaymentAddress | Cardano.RewardAccount
|
|
9
|
+
signWith: Cardano.PaymentAddress | Cardano.RewardAccount;
|
|
10
10
|
payload: HexBlob;
|
|
11
11
|
}
|
|
12
12
|
export interface Cip8SignResult {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cip8/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,oBAAY,gBAAgB,GAAG,OAAO,CAAC;AACvC,oBAAY,cAAc,GAAG,OAAO,CAAC;AAErC,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,cAAc,EAAE,CAAC;IACjC,QAAQ,EAAE,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cip8/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,oBAAY,gBAAgB,GAAG,OAAO,CAAC;AACvC,oBAAY,cAAc,GAAG,OAAO,CAAC;AAErC,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,cAAc,EAAE,CAAC;IACjC,QAAQ,EAAE,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IACzD,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC,mBAAmB,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC,mBAAmB,CAAC;CACvC"}
|