@cardano-sdk/key-management 0.2.0-nightly.1
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/LICENSE +201 -0
- package/NOTICE +5 -0
- package/README.md +1 -0
- package/dist/cjs/InMemoryKeyAgent.d.ts +23 -0
- package/dist/cjs/InMemoryKeyAgent.d.ts.map +1 -0
- package/dist/cjs/InMemoryKeyAgent.js +136 -0
- package/dist/cjs/InMemoryKeyAgent.js.map +1 -0
- package/dist/cjs/KeyAgentBase.d.ts +20 -0
- package/dist/cjs/KeyAgentBase.d.ts.map +1 -0
- package/dist/cjs/KeyAgentBase.js +77 -0
- package/dist/cjs/KeyAgentBase.js.map +1 -0
- package/dist/cjs/LedgerKeyAgent.d.ts +42 -0
- package/dist/cjs/LedgerKeyAgent.d.ts.map +1 -0
- package/dist/cjs/LedgerKeyAgent.js +208 -0
- package/dist/cjs/LedgerKeyAgent.js.map +1 -0
- package/dist/cjs/TrezorKeyAgent.d.ts +29 -0
- package/dist/cjs/TrezorKeyAgent.d.ts.map +1 -0
- package/dist/cjs/TrezorKeyAgent.js +134 -0
- package/dist/cjs/TrezorKeyAgent.js.map +1 -0
- package/dist/cjs/cip8/cip30signData.d.ts +22 -0
- package/dist/cjs/cip8/cip30signData.d.ts.map +1 -0
- package/dist/cjs/cip8/cip30signData.js +81 -0
- package/dist/cjs/cip8/cip30signData.js.map +1 -0
- package/dist/cjs/cip8/index.d.ts +2 -0
- package/dist/cjs/cip8/index.d.ts.map +1 -0
- package/dist/cjs/cip8/index.js +18 -0
- package/dist/cjs/cip8/index.js.map +1 -0
- package/dist/cjs/cip8/types.d.ts +4 -0
- package/dist/cjs/cip8/types.d.ts.map +1 -0
- package/dist/cjs/cip8/types.js +3 -0
- package/dist/cjs/cip8/types.js.map +1 -0
- package/dist/cjs/cip8/util.d.ts +7 -0
- package/dist/cjs/cip8/util.d.ts.map +1 -0
- package/dist/cjs/cip8/util.js +10 -0
- package/dist/cjs/cip8/util.js.map +1 -0
- package/dist/cjs/emip3.d.ts +4 -0
- package/dist/cjs/emip3.d.ts.map +1 -0
- package/dist/cjs/emip3.js +48 -0
- package/dist/cjs/emip3.js.map +1 -0
- package/dist/cjs/errors/AuthenticationError.d.ts +6 -0
- package/dist/cjs/errors/AuthenticationError.d.ts.map +1 -0
- package/dist/cjs/errors/AuthenticationError.js +16 -0
- package/dist/cjs/errors/AuthenticationError.js.map +1 -0
- package/dist/cjs/errors/HwMappingError.d.ts +6 -0
- package/dist/cjs/errors/HwMappingError.d.ts.map +1 -0
- package/dist/cjs/errors/HwMappingError.js +16 -0
- package/dist/cjs/errors/HwMappingError.js.map +1 -0
- package/dist/cjs/errors/InvalidMnemonicError.d.ts +5 -0
- package/dist/cjs/errors/InvalidMnemonicError.d.ts.map +1 -0
- package/dist/cjs/errors/InvalidMnemonicError.js +13 -0
- package/dist/cjs/errors/InvalidMnemonicError.js.map +1 -0
- package/dist/cjs/errors/InvalidSerializableDataError.d.ts +5 -0
- package/dist/cjs/errors/InvalidSerializableDataError.d.ts.map +1 -0
- package/dist/cjs/errors/InvalidSerializableDataError.js +15 -0
- package/dist/cjs/errors/InvalidSerializableDataError.js.map +1 -0
- package/dist/cjs/errors/ProofGenerationError.d.ts +6 -0
- package/dist/cjs/errors/ProofGenerationError.d.ts.map +1 -0
- package/dist/cjs/errors/ProofGenerationError.js +16 -0
- package/dist/cjs/errors/ProofGenerationError.js.map +1 -0
- package/dist/cjs/errors/TransportError.d.ts +6 -0
- package/dist/cjs/errors/TransportError.d.ts.map +1 -0
- package/dist/cjs/errors/TransportError.js +16 -0
- package/dist/cjs/errors/TransportError.js.map +1 -0
- package/dist/cjs/errors/index.d.ts +7 -0
- package/dist/cjs/errors/index.d.ts.map +1 -0
- package/dist/cjs/errors/index.js +23 -0
- package/dist/cjs/errors/index.js.map +1 -0
- package/dist/cjs/index.d.ts +12 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +42 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/restoreKeyAgent.d.ts +9 -0
- package/dist/cjs/restoreKeyAgent.d.ts.map +1 -0
- package/dist/cjs/restoreKeyAgent.js +31 -0
- package/dist/cjs/restoreKeyAgent.js.map +1 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/cjs/types.d.ts +127 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +43 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/util/KeyAgentTransactionSigner.d.ts +8 -0
- package/dist/cjs/util/KeyAgentTransactionSigner.d.ts.map +1 -0
- package/dist/cjs/util/KeyAgentTransactionSigner.js +38 -0
- package/dist/cjs/util/KeyAgentTransactionSigner.js.map +1 -0
- package/dist/cjs/util/bip39.d.ts +8 -0
- package/dist/cjs/util/bip39.d.ts.map +1 -0
- package/dist/cjs/util/bip39.js +39 -0
- package/dist/cjs/util/bip39.js.map +1 -0
- package/dist/cjs/util/createAsyncKeyAgent.d.ts +3 -0
- package/dist/cjs/util/createAsyncKeyAgent.d.ts.map +1 -0
- package/dist/cjs/util/createAsyncKeyAgent.js +26 -0
- package/dist/cjs/util/createAsyncKeyAgent.js.map +1 -0
- package/dist/cjs/util/index.d.ts +8 -0
- package/dist/cjs/util/index.d.ts.map +1 -0
- package/dist/cjs/util/index.js +24 -0
- package/dist/cjs/util/index.js.map +1 -0
- package/dist/cjs/util/key.d.ts +11 -0
- package/dist/cjs/util/key.d.ts.map +1 -0
- package/dist/cjs/util/key.js +30 -0
- package/dist/cjs/util/key.js.map +1 -0
- package/dist/cjs/util/mapHardwareSigningData.d.ts +38 -0
- package/dist/cjs/util/mapHardwareSigningData.d.ts.map +1 -0
- package/dist/cjs/util/mapHardwareSigningData.js +864 -0
- package/dist/cjs/util/mapHardwareSigningData.js.map +1 -0
- package/dist/cjs/util/ownSignatureKeyPaths.d.ts +4 -0
- package/dist/cjs/util/ownSignatureKeyPaths.d.ts.map +1 -0
- package/dist/cjs/util/ownSignatureKeyPaths.js +24 -0
- package/dist/cjs/util/ownSignatureKeyPaths.js.map +1 -0
- package/dist/cjs/util/stubSignTransaction.d.ts +4 -0
- package/dist/cjs/util/stubSignTransaction.d.ts.map +1 -0
- package/dist/cjs/util/stubSignTransaction.js +23 -0
- package/dist/cjs/util/stubSignTransaction.js.map +1 -0
- package/dist/esm/InMemoryKeyAgent.d.ts +23 -0
- package/dist/esm/InMemoryKeyAgent.d.ts.map +1 -0
- package/dist/esm/InMemoryKeyAgent.js +106 -0
- package/dist/esm/InMemoryKeyAgent.js.map +1 -0
- package/dist/esm/KeyAgentBase.d.ts +20 -0
- package/dist/esm/KeyAgentBase.d.ts.map +1 -0
- package/dist/esm/KeyAgentBase.js +73 -0
- package/dist/esm/KeyAgentBase.js.map +1 -0
- package/dist/esm/LedgerKeyAgent.d.ts +42 -0
- package/dist/esm/LedgerKeyAgent.d.ts.map +1 -0
- package/dist/esm/LedgerKeyAgent.js +178 -0
- package/dist/esm/LedgerKeyAgent.js.map +1 -0
- package/dist/esm/TrezorKeyAgent.d.ts +29 -0
- package/dist/esm/TrezorKeyAgent.d.ts.map +1 -0
- package/dist/esm/TrezorKeyAgent.js +127 -0
- package/dist/esm/TrezorKeyAgent.js.map +1 -0
- package/dist/esm/cip8/cip30signData.d.ts +22 -0
- package/dist/esm/cip8/cip30signData.d.ts.map +1 -0
- package/dist/esm/cip8/cip30signData.js +76 -0
- package/dist/esm/cip8/cip30signData.js.map +1 -0
- package/dist/esm/cip8/index.d.ts +2 -0
- package/dist/esm/cip8/index.d.ts.map +1 -0
- package/dist/esm/cip8/index.js +2 -0
- package/dist/esm/cip8/index.js.map +1 -0
- package/dist/esm/cip8/types.d.ts +4 -0
- package/dist/esm/cip8/types.d.ts.map +1 -0
- package/dist/esm/cip8/types.js +2 -0
- package/dist/esm/cip8/types.js.map +1 -0
- package/dist/esm/cip8/util.d.ts +7 -0
- package/dist/esm/cip8/util.d.ts.map +1 -0
- package/dist/esm/cip8/util.js +7 -0
- package/dist/esm/cip8/util.js.map +1 -0
- package/dist/esm/emip3.d.ts +4 -0
- package/dist/esm/emip3.d.ts.map +1 -0
- package/dist/esm/emip3.js +39 -0
- package/dist/esm/emip3.js.map +1 -0
- package/dist/esm/errors/AuthenticationError.d.ts +6 -0
- package/dist/esm/errors/AuthenticationError.d.ts.map +1 -0
- package/dist/esm/errors/AuthenticationError.js +12 -0
- package/dist/esm/errors/AuthenticationError.js.map +1 -0
- package/dist/esm/errors/HwMappingError.d.ts +6 -0
- package/dist/esm/errors/HwMappingError.d.ts.map +1 -0
- package/dist/esm/errors/HwMappingError.js +12 -0
- package/dist/esm/errors/HwMappingError.js.map +1 -0
- package/dist/esm/errors/InvalidMnemonicError.d.ts +5 -0
- package/dist/esm/errors/InvalidMnemonicError.d.ts.map +1 -0
- package/dist/esm/errors/InvalidMnemonicError.js +9 -0
- package/dist/esm/errors/InvalidMnemonicError.js.map +1 -0
- package/dist/esm/errors/InvalidSerializableDataError.d.ts +5 -0
- package/dist/esm/errors/InvalidSerializableDataError.d.ts.map +1 -0
- package/dist/esm/errors/InvalidSerializableDataError.js +11 -0
- package/dist/esm/errors/InvalidSerializableDataError.js.map +1 -0
- package/dist/esm/errors/ProofGenerationError.d.ts +6 -0
- package/dist/esm/errors/ProofGenerationError.d.ts.map +1 -0
- package/dist/esm/errors/ProofGenerationError.js +12 -0
- package/dist/esm/errors/ProofGenerationError.js.map +1 -0
- package/dist/esm/errors/TransportError.d.ts +6 -0
- package/dist/esm/errors/TransportError.d.ts.map +1 -0
- package/dist/esm/errors/TransportError.js +12 -0
- package/dist/esm/errors/TransportError.js.map +1 -0
- package/dist/esm/errors/index.d.ts +7 -0
- package/dist/esm/errors/index.d.ts.map +1 -0
- package/dist/esm/errors/index.js +7 -0
- package/dist/esm/errors/index.js.map +1 -0
- package/dist/esm/index.d.ts +12 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +12 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/restoreKeyAgent.d.ts +9 -0
- package/dist/esm/restoreKeyAgent.d.ts.map +1 -0
- package/dist/esm/restoreKeyAgent.js +27 -0
- package/dist/esm/restoreKeyAgent.js.map +1 -0
- package/dist/esm/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/types.d.ts +127 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +40 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/util/KeyAgentTransactionSigner.d.ts +8 -0
- package/dist/esm/util/KeyAgentTransactionSigner.d.ts.map +1 -0
- package/dist/esm/util/KeyAgentTransactionSigner.js +34 -0
- package/dist/esm/util/KeyAgentTransactionSigner.js.map +1 -0
- package/dist/esm/util/bip39.d.ts +8 -0
- package/dist/esm/util/bip39.d.ts.map +1 -0
- package/dist/esm/util/bip39.js +8 -0
- package/dist/esm/util/bip39.js.map +1 -0
- package/dist/esm/util/createAsyncKeyAgent.d.ts +3 -0
- package/dist/esm/util/createAsyncKeyAgent.d.ts.map +1 -0
- package/dist/esm/util/createAsyncKeyAgent.js +22 -0
- package/dist/esm/util/createAsyncKeyAgent.js.map +1 -0
- package/dist/esm/util/index.d.ts +8 -0
- package/dist/esm/util/index.d.ts.map +1 -0
- package/dist/esm/util/index.js +8 -0
- package/dist/esm/util/index.js.map +1 -0
- package/dist/esm/util/key.d.ts +11 -0
- package/dist/esm/util/key.d.ts.map +1 -0
- package/dist/esm/util/key.js +24 -0
- package/dist/esm/util/key.js.map +1 -0
- package/dist/esm/util/mapHardwareSigningData.d.ts +38 -0
- package/dist/esm/util/mapHardwareSigningData.d.ts.map +1 -0
- package/dist/esm/util/mapHardwareSigningData.js +833 -0
- package/dist/esm/util/mapHardwareSigningData.js.map +1 -0
- package/dist/esm/util/ownSignatureKeyPaths.d.ts +4 -0
- package/dist/esm/util/ownSignatureKeyPaths.d.ts.map +1 -0
- package/dist/esm/util/ownSignatureKeyPaths.js +17 -0
- package/dist/esm/util/ownSignatureKeyPaths.js.map +1 -0
- package/dist/esm/util/stubSignTransaction.d.ts +4 -0
- package/dist/esm/util/stubSignTransaction.d.ts.map +1 -0
- package/dist/esm/util/stubSignTransaction.js +16 -0
- package/dist/esm/util/stubSignTransaction.js.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
5
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
+
};
|
|
7
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
9
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
+
};
|
|
12
|
+
var _LedgerKeyAgent_communicationType, _LedgerKeyAgent_protocolMagic;
|
|
13
|
+
import { AuthenticationError, TransportError } from './errors';
|
|
14
|
+
import { Cardano, NotImplementedError, coreToCsl } from '@cardano-sdk/core';
|
|
15
|
+
import { CardanoKeyConst, Cip1852PathLevelIndexes, CommunicationType, KeyAgentType } from './types';
|
|
16
|
+
import { KeyAgentBase } from './KeyAgentBase';
|
|
17
|
+
import { txToLedger } from './util';
|
|
18
|
+
import LedgerConnection, { utils } from '@cardano-foundation/ledgerjs-hw-app-cardano';
|
|
19
|
+
import TransportNodeHid from '@ledgerhq/hw-transport-node-hid-noevents';
|
|
20
|
+
import TransportWebHID from '@ledgerhq/hw-transport-webhid';
|
|
21
|
+
const transportTypedError = (error) => new AuthenticationError('Ledger transport failed', new TransportError('Ledger transport failed', error));
|
|
22
|
+
export class LedgerKeyAgent extends KeyAgentBase {
|
|
23
|
+
constructor({ deviceConnection, ...serializableData }, dependencies) {
|
|
24
|
+
super({ ...serializableData, __typename: KeyAgentType.Ledger }, dependencies);
|
|
25
|
+
_LedgerKeyAgent_communicationType.set(this, void 0);
|
|
26
|
+
_LedgerKeyAgent_protocolMagic.set(this, void 0);
|
|
27
|
+
this.deviceConnection = deviceConnection;
|
|
28
|
+
__classPrivateFieldSet(this, _LedgerKeyAgent_communicationType, serializableData.communicationType, "f");
|
|
29
|
+
__classPrivateFieldSet(this, _LedgerKeyAgent_protocolMagic, serializableData.protocolMagic, "f");
|
|
30
|
+
}
|
|
31
|
+
static async getHidDeviceList(communicationType) {
|
|
32
|
+
try {
|
|
33
|
+
return communicationType === CommunicationType.Node ? TransportNodeHid.list() : TransportWebHID.list();
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
throw new TransportError('Cannot fetch device list', error);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
static async createTransport({ communicationType, activeTransport, devicePath = '' }) {
|
|
40
|
+
try {
|
|
41
|
+
if (communicationType === CommunicationType.Node) {
|
|
42
|
+
return await TransportNodeHid.open(devicePath);
|
|
43
|
+
}
|
|
44
|
+
return await (activeTransport && activeTransport instanceof TransportWebHID
|
|
45
|
+
? TransportWebHID.open(activeTransport.device)
|
|
46
|
+
: TransportWebHID.request());
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
throw new TransportError('Creating transport failed', error);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
static async createDeviceConnection(activeTransport) {
|
|
53
|
+
try {
|
|
54
|
+
const deviceConnection = new LedgerConnection(activeTransport);
|
|
55
|
+
await deviceConnection.getVersion();
|
|
56
|
+
return deviceConnection;
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
throw new TransportError('Cannot communicate with Ledger Cardano App', error);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
static async establishDeviceConnection(communicationType, devicePath) {
|
|
63
|
+
let transport;
|
|
64
|
+
try {
|
|
65
|
+
transport = await LedgerKeyAgent.createTransport({ communicationType, devicePath });
|
|
66
|
+
if (!transport || !transport.deviceModel) {
|
|
67
|
+
throw new TransportError('Missing transport');
|
|
68
|
+
}
|
|
69
|
+
const isSupportedLedgerModel = transport.deviceModel.id === 'nanoS' ||
|
|
70
|
+
transport.deviceModel.id === 'nanoX' ||
|
|
71
|
+
transport.deviceModel.id === 'nanoSP';
|
|
72
|
+
if (!isSupportedLedgerModel) {
|
|
73
|
+
throw new TransportError(`Ledger device model: "${transport.deviceModel.id}" is not supported`);
|
|
74
|
+
}
|
|
75
|
+
return await LedgerKeyAgent.createDeviceConnection(transport);
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
if (error.innerError.message.includes('cannot open device with path')) {
|
|
79
|
+
throw new TransportError('Connection already established', error);
|
|
80
|
+
}
|
|
81
|
+
if (transport) {
|
|
82
|
+
transport.close();
|
|
83
|
+
}
|
|
84
|
+
throw new TransportError('Establishing device connection failed', error);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
static async checkDeviceConnection(communicationType, deviceConnection) {
|
|
88
|
+
try {
|
|
89
|
+
if (!deviceConnection) {
|
|
90
|
+
return await LedgerKeyAgent.establishDeviceConnection(communicationType);
|
|
91
|
+
}
|
|
92
|
+
return await LedgerKeyAgent.createDeviceConnection(deviceConnection.transport);
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
if (error.name === 'DisconnectedDeviceDuringOperation') {
|
|
96
|
+
return await LedgerKeyAgent.establishDeviceConnection(communicationType);
|
|
97
|
+
}
|
|
98
|
+
throw error;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
static async getXpub({ deviceConnection, communicationType, accountIndex }) {
|
|
102
|
+
try {
|
|
103
|
+
const recoveredDeviceConnection = await LedgerKeyAgent.checkDeviceConnection(communicationType, deviceConnection);
|
|
104
|
+
const derivationPath = `${CardanoKeyConst.PURPOSE}'/${CardanoKeyConst.COIN_TYPE}'/${accountIndex}'`;
|
|
105
|
+
const extendedPublicKey = await recoveredDeviceConnection.getExtendedPublicKey({
|
|
106
|
+
path: utils.str_to_path(derivationPath)
|
|
107
|
+
});
|
|
108
|
+
const xPubHex = `${extendedPublicKey.publicKeyHex}${extendedPublicKey.chainCodeHex}`;
|
|
109
|
+
return Cardano.Bip32PublicKey(xPubHex);
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
if (error.code === 28169) {
|
|
113
|
+
throw new AuthenticationError('Failed to export extended account public key', error);
|
|
114
|
+
}
|
|
115
|
+
throw transportTypedError(error);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
static async getAppVersion(communicationType, deviceConnection) {
|
|
119
|
+
const recoveredDeviceConnection = await LedgerKeyAgent.checkDeviceConnection(communicationType, deviceConnection);
|
|
120
|
+
return await recoveredDeviceConnection.getVersion();
|
|
121
|
+
}
|
|
122
|
+
static async createWithDevice({ networkId, protocolMagic, accountIndex = 0, communicationType, deviceConnection }, dependencies) {
|
|
123
|
+
const deviceListPaths = await LedgerKeyAgent.getHidDeviceList(communicationType);
|
|
124
|
+
const activeDeviceConnection = await (deviceConnection
|
|
125
|
+
? LedgerKeyAgent.checkDeviceConnection(communicationType, deviceConnection)
|
|
126
|
+
: LedgerKeyAgent.establishDeviceConnection(communicationType, deviceListPaths[0]));
|
|
127
|
+
const extendedAccountPublicKey = await LedgerKeyAgent.getXpub({
|
|
128
|
+
accountIndex,
|
|
129
|
+
communicationType,
|
|
130
|
+
deviceConnection: activeDeviceConnection
|
|
131
|
+
});
|
|
132
|
+
return new LedgerKeyAgent({
|
|
133
|
+
accountIndex,
|
|
134
|
+
communicationType,
|
|
135
|
+
deviceConnection: activeDeviceConnection,
|
|
136
|
+
extendedAccountPublicKey,
|
|
137
|
+
knownAddresses: [],
|
|
138
|
+
networkId,
|
|
139
|
+
protocolMagic
|
|
140
|
+
}, dependencies);
|
|
141
|
+
}
|
|
142
|
+
async signTransaction({ body }) {
|
|
143
|
+
try {
|
|
144
|
+
const cslTxBody = coreToCsl.txBody(body);
|
|
145
|
+
const ledgerTxData = await txToLedger({
|
|
146
|
+
cslTxBody,
|
|
147
|
+
inputResolver: this.inputResolver,
|
|
148
|
+
knownAddresses: this.knownAddresses,
|
|
149
|
+
networkId: this.networkId,
|
|
150
|
+
protocolMagic: __classPrivateFieldGet(this, _LedgerKeyAgent_protocolMagic, "f")
|
|
151
|
+
});
|
|
152
|
+
const deviceConnection = await LedgerKeyAgent.checkDeviceConnection(__classPrivateFieldGet(this, _LedgerKeyAgent_communicationType, "f"), this.deviceConnection);
|
|
153
|
+
const result = await deviceConnection.signTransaction(ledgerTxData);
|
|
154
|
+
return new Map(await Promise.all(result.witnesses.map(async (witness) => {
|
|
155
|
+
const publicKey = await this.derivePublicKey({
|
|
156
|
+
index: witness.path[Cip1852PathLevelIndexes.INDEX],
|
|
157
|
+
role: witness.path[Cip1852PathLevelIndexes.ROLE]
|
|
158
|
+
});
|
|
159
|
+
const signature = Cardano.Ed25519Signature(witness.witnessSignatureHex);
|
|
160
|
+
return [publicKey, signature];
|
|
161
|
+
})));
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
if (error.code === 28169) {
|
|
165
|
+
throw new AuthenticationError('Transaction signing aborted', error);
|
|
166
|
+
}
|
|
167
|
+
throw transportTypedError(error);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
async signBlob() {
|
|
171
|
+
throw new NotImplementedError('signBlob');
|
|
172
|
+
}
|
|
173
|
+
async exportRootPrivateKey() {
|
|
174
|
+
throw new NotImplementedError('Operation not supported!');
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
_LedgerKeyAgent_communicationType = new WeakMap(), _LedgerKeyAgent_protocolMagic = new WeakMap();
|
|
178
|
+
//# sourceMappingURL=LedgerKeyAgent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LedgerKeyAgent.js","sourceRoot":"","sources":["../../src/LedgerKeyAgent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Cardano } from '@cardano-sdk/core';
|
|
2
|
+
import { KeyAgentDependencies, SerializableTrezorKeyAgentData, SignBlobResult, TrezorConfig } from './types';
|
|
3
|
+
import { KeyAgentBase } from './KeyAgentBase';
|
|
4
|
+
import { Features } from 'trezor-connect';
|
|
5
|
+
export interface TrezorKeyAgentProps extends Omit<SerializableTrezorKeyAgentData, '__typename'> {
|
|
6
|
+
isTrezorInitialized?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface GetTrezorXpubProps {
|
|
9
|
+
accountIndex: number;
|
|
10
|
+
}
|
|
11
|
+
export interface CreateTrezorKeyAgentProps {
|
|
12
|
+
networkId: Cardano.NetworkId;
|
|
13
|
+
accountIndex?: number;
|
|
14
|
+
protocolMagic: Cardano.NetworkMagic;
|
|
15
|
+
trezorConfig: TrezorConfig;
|
|
16
|
+
}
|
|
17
|
+
export declare class TrezorKeyAgent extends KeyAgentBase {
|
|
18
|
+
#private;
|
|
19
|
+
readonly isTrezorInitialized: Promise<boolean>;
|
|
20
|
+
constructor({ isTrezorInitialized, ...serializableData }: TrezorKeyAgentProps, dependencies: KeyAgentDependencies);
|
|
21
|
+
static initializeTrezorTransport({ manifest, communicationType, silentMode, lazyLoad }: TrezorConfig): Promise<boolean>;
|
|
22
|
+
static checkDeviceConnection(): Promise<Features>;
|
|
23
|
+
static getXpub({ accountIndex }: GetTrezorXpubProps): Promise<Cardano.Bip32PublicKey>;
|
|
24
|
+
static createWithDevice({ networkId, accountIndex, protocolMagic, trezorConfig }: CreateTrezorKeyAgentProps, dependencies: KeyAgentDependencies): Promise<TrezorKeyAgent>;
|
|
25
|
+
signTransaction({ body }: Cardano.TxBodyWithHash): Promise<Cardano.Signatures>;
|
|
26
|
+
signBlob(): Promise<SignBlobResult>;
|
|
27
|
+
exportRootPrivateKey(): Promise<Cardano.Bip32PrivateKey>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=TrezorKeyAgent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TrezorKeyAgent.d.ts","sourceRoot":"","sources":["../../src/TrezorKeyAgent.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAkC,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAGL,oBAAoB,EAEpB,8BAA8B,EAC9B,cAAc,EACd,YAAY,EACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAsB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEzD,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,8BAA8B,EAAE,YAAY,CAAC;IAC7F,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC,YAAY,CAAC;IACpC,YAAY,EAAE,YAAY,CAAC;CAC5B;AAKD,qBAAa,cAAe,SAAQ,YAAY;;IAC9C,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;gBAGnC,EAAE,mBAAmB,EAAE,GAAG,gBAAgB,EAAE,EAAE,mBAAmB,EAAE,YAAY,EAAE,oBAAoB;WAWpG,yBAAyB,CAAC,EACrC,QAAQ,EACR,iBAAiB,EACjB,UAAkB,EAClB,QAAgB,EACjB,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;WAwBrB,qBAAqB,IAAI,OAAO,CAAC,QAAQ,CAAC;WAkB1C,OAAO,CAAC,EAAE,YAAY,EAAE,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC;WAoB9E,gBAAgB,CAC3B,EAAE,SAAS,EAAE,YAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,yBAAyB,EACvF,YAAY,EAAE,oBAAoB;IAkB9B,eAAe,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;IAoC9E,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC;IAInC,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC;CAG/D"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
5
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
+
};
|
|
7
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
9
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
+
};
|
|
12
|
+
var _TrezorKeyAgent_protocolMagic;
|
|
13
|
+
import { AuthenticationError, TransportError } from './errors';
|
|
14
|
+
import { Cardano, NotImplementedError, coreToCsl } from '@cardano-sdk/core';
|
|
15
|
+
import { CardanoKeyConst, CommunicationType, KeyAgentType } from './types';
|
|
16
|
+
import { KeyAgentBase } from './KeyAgentBase';
|
|
17
|
+
import { txToTrezor } from './util';
|
|
18
|
+
import TrezorConnect from 'trezor-connect';
|
|
19
|
+
const transportTypedError = (error) => new AuthenticationError('Trezor transport failed', new TransportError('Trezor transport failed', error));
|
|
20
|
+
export class TrezorKeyAgent extends KeyAgentBase {
|
|
21
|
+
constructor({ isTrezorInitialized, ...serializableData }, dependencies) {
|
|
22
|
+
super({ ...serializableData, __typename: KeyAgentType.Trezor }, dependencies);
|
|
23
|
+
_TrezorKeyAgent_protocolMagic.set(this, void 0);
|
|
24
|
+
__classPrivateFieldSet(this, _TrezorKeyAgent_protocolMagic, serializableData.protocolMagic, "f");
|
|
25
|
+
if (!isTrezorInitialized) {
|
|
26
|
+
this.isTrezorInitialized = TrezorKeyAgent.initializeTrezorTransport(serializableData.trezorConfig);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
static async initializeTrezorTransport({ manifest, communicationType, silentMode = false, lazyLoad = false }) {
|
|
30
|
+
try {
|
|
31
|
+
await TrezorConnect.init({
|
|
32
|
+
lazyLoad: communicationType !== CommunicationType.Node && lazyLoad,
|
|
33
|
+
manifest,
|
|
34
|
+
popup: communicationType !== CommunicationType.Node && !silentMode
|
|
35
|
+
});
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
if (error.code === 'Init_AlreadyInitialized')
|
|
40
|
+
return true;
|
|
41
|
+
throw transportTypedError(error);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
static async checkDeviceConnection() {
|
|
45
|
+
try {
|
|
46
|
+
const deviceFeatures = await TrezorConnect.getFeatures();
|
|
47
|
+
if (!deviceFeatures.success) {
|
|
48
|
+
throw new TransportError('Failed to get device', deviceFeatures.payload);
|
|
49
|
+
}
|
|
50
|
+
if (deviceFeatures.payload.model !== 'T') {
|
|
51
|
+
throw new TransportError(`Trezor device model "${deviceFeatures.payload.model}" is not supported.`);
|
|
52
|
+
}
|
|
53
|
+
return deviceFeatures.payload;
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
throw transportTypedError(error);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
static async getXpub({ accountIndex }) {
|
|
60
|
+
try {
|
|
61
|
+
await TrezorKeyAgent.checkDeviceConnection();
|
|
62
|
+
const derivationPath = `m/${CardanoKeyConst.PURPOSE}'/${CardanoKeyConst.COIN_TYPE}'/${accountIndex}'`;
|
|
63
|
+
const extendedPublicKey = await TrezorConnect.cardanoGetPublicKey({
|
|
64
|
+
path: derivationPath,
|
|
65
|
+
showOnTrezor: true
|
|
66
|
+
});
|
|
67
|
+
if (!extendedPublicKey.success) {
|
|
68
|
+
throw new TransportError('Failed to export extended account public key', extendedPublicKey.payload);
|
|
69
|
+
}
|
|
70
|
+
return Cardano.Bip32PublicKey(extendedPublicKey.payload.publicKey);
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
throw transportTypedError(error);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
static async createWithDevice({ networkId, accountIndex = 0, protocolMagic, trezorConfig }, dependencies) {
|
|
77
|
+
const isTrezorInitialized = await TrezorKeyAgent.initializeTrezorTransport(trezorConfig);
|
|
78
|
+
const extendedAccountPublicKey = await TrezorKeyAgent.getXpub({ accountIndex });
|
|
79
|
+
return new TrezorKeyAgent({
|
|
80
|
+
accountIndex,
|
|
81
|
+
extendedAccountPublicKey,
|
|
82
|
+
isTrezorInitialized,
|
|
83
|
+
knownAddresses: [],
|
|
84
|
+
networkId,
|
|
85
|
+
protocolMagic,
|
|
86
|
+
trezorConfig
|
|
87
|
+
}, dependencies);
|
|
88
|
+
}
|
|
89
|
+
async signTransaction({ body }) {
|
|
90
|
+
try {
|
|
91
|
+
await this.isTrezorInitialized;
|
|
92
|
+
const cslTxBody = coreToCsl.txBody(body);
|
|
93
|
+
const trezorTxData = await txToTrezor({
|
|
94
|
+
accountIndex: this.accountIndex,
|
|
95
|
+
cslTxBody,
|
|
96
|
+
inputResolver: this.inputResolver,
|
|
97
|
+
knownAddresses: this.knownAddresses,
|
|
98
|
+
networkId: this.networkId,
|
|
99
|
+
protocolMagic: __classPrivateFieldGet(this, _TrezorKeyAgent_protocolMagic, "f")
|
|
100
|
+
});
|
|
101
|
+
const result = await TrezorConnect.cardanoSignTransaction(trezorTxData);
|
|
102
|
+
if (!result.success) {
|
|
103
|
+
throw new TransportError('Failed to export extended account public key', result.payload);
|
|
104
|
+
}
|
|
105
|
+
const signedData = result.payload;
|
|
106
|
+
return new Map(await Promise.all(signedData.witnesses.map(async (witness) => {
|
|
107
|
+
const publicKey = Cardano.Ed25519PublicKey(witness.pubKey);
|
|
108
|
+
const signature = Cardano.Ed25519Signature(witness.signature);
|
|
109
|
+
return [publicKey, signature];
|
|
110
|
+
})));
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
if (error.innerError.code === 'Failure_ActionCancelled') {
|
|
114
|
+
throw new AuthenticationError('Transaction signing aborted', error);
|
|
115
|
+
}
|
|
116
|
+
throw transportTypedError(error);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
async signBlob() {
|
|
120
|
+
throw new NotImplementedError('signBlob');
|
|
121
|
+
}
|
|
122
|
+
async exportRootPrivateKey() {
|
|
123
|
+
throw new NotImplementedError('Operation not supported!');
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
_TrezorKeyAgent_protocolMagic = new WeakMap();
|
|
127
|
+
//# sourceMappingURL=TrezorKeyAgent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TrezorKeyAgent.js","sourceRoot":"","sources":["../../src/TrezorKeyAgent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { AsyncKeyAgent } from '../types';
|
|
2
|
+
import { Cardano } from '@cardano-sdk/core';
|
|
3
|
+
import { Cip30DataSignature } from '@cardano-sdk/cip30';
|
|
4
|
+
import { CustomError } from 'ts-custom-error';
|
|
5
|
+
export interface Cip30SignDataRequest {
|
|
6
|
+
keyAgent: AsyncKeyAgent;
|
|
7
|
+
signWith: Cardano.Address | Cardano.RewardAccount;
|
|
8
|
+
payload: Cardano.util.HexBlob;
|
|
9
|
+
}
|
|
10
|
+
export declare enum Cip30DataSignErrorCode {
|
|
11
|
+
ProofGeneration = 1,
|
|
12
|
+
AddressNotPK = 2,
|
|
13
|
+
UserDeclined = 3
|
|
14
|
+
}
|
|
15
|
+
export declare class Cip30DataSignError extends CustomError {
|
|
16
|
+
readonly code: Cip30DataSignErrorCode;
|
|
17
|
+
readonly info: string;
|
|
18
|
+
readonly innerError: unknown;
|
|
19
|
+
constructor(code: Cip30DataSignErrorCode, info: string, innerError?: unknown);
|
|
20
|
+
}
|
|
21
|
+
export declare const cip30signData: ({ keyAgent, signWith, payload }: Cip30SignDataRequest) => Promise<Cip30DataSignature>;
|
|
22
|
+
//# sourceMappingURL=cip30signData.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cip30signData.d.ts","sourceRoot":"","sources":["../../../src/cip8/cip30signData.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,aAAa,EAAW,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,OAAO,EAAyB,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAI9C,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,aAAa,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IAClD,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;CAC/B;AAED,oBAAY,sBAAsB;IAChC,eAAe,IAAI;IACnB,YAAY,IAAI;IAChB,YAAY,IAAI;CACjB;AAED,qBAAa,kBAAmB,SAAQ,WAAW;aAE/B,IAAI,EAAE,sBAAsB;aAC5B,IAAI,EAAE,MAAM;aACZ,UAAU,EAAE,OAAO;gBAFnB,IAAI,EAAE,sBAAsB,EAC5B,IAAI,EAAE,MAAM,EACZ,UAAU,GAAE,OAAc;CAI7C;AA0DD,eAAO,MAAM,aAAa,oCAIvB,oBAAoB,KAAG,QAAQ,kBAAkB,CAmBnD,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { AlgorithmId, CBORValue, COSEKey, KeyType as COSEKeyType, COSESign1Builder, CurveType, HeaderMap, Headers, Label, ProtectedHeaderMap } from '@emurgo/cardano-message-signing-nodejs';
|
|
2
|
+
import { parseCslAddress, util } from '@cardano-sdk/core';
|
|
3
|
+
import { CoseLabel } from './util';
|
|
4
|
+
import { CustomError } from 'ts-custom-error';
|
|
5
|
+
import { STAKE_KEY_DERIVATION_PATH } from '../util';
|
|
6
|
+
import { firstValueFrom } from 'rxjs';
|
|
7
|
+
export var Cip30DataSignErrorCode;
|
|
8
|
+
(function (Cip30DataSignErrorCode) {
|
|
9
|
+
Cip30DataSignErrorCode[Cip30DataSignErrorCode["ProofGeneration"] = 1] = "ProofGeneration";
|
|
10
|
+
Cip30DataSignErrorCode[Cip30DataSignErrorCode["AddressNotPK"] = 2] = "AddressNotPK";
|
|
11
|
+
Cip30DataSignErrorCode[Cip30DataSignErrorCode["UserDeclined"] = 3] = "UserDeclined";
|
|
12
|
+
})(Cip30DataSignErrorCode || (Cip30DataSignErrorCode = {}));
|
|
13
|
+
export class Cip30DataSignError extends CustomError {
|
|
14
|
+
constructor(code, info, innerError = null) {
|
|
15
|
+
super(`DataSignError code: ${code}`);
|
|
16
|
+
this.code = code;
|
|
17
|
+
this.info = info;
|
|
18
|
+
this.innerError = innerError;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const getAddressBytes = (signWith) => {
|
|
22
|
+
const cslAddress = parseCslAddress(signWith.toString());
|
|
23
|
+
if (!cslAddress) {
|
|
24
|
+
throw new Cip30DataSignError(Cip30DataSignErrorCode.AddressNotPK, 'Invalid address');
|
|
25
|
+
}
|
|
26
|
+
return cslAddress.to_bytes();
|
|
27
|
+
};
|
|
28
|
+
const getDerivationPath = async (signWith, keyAgent) => {
|
|
29
|
+
const isRewardAccount = signWith.startsWith('stake');
|
|
30
|
+
if (isRewardAccount) {
|
|
31
|
+
return STAKE_KEY_DERIVATION_PATH;
|
|
32
|
+
}
|
|
33
|
+
const knownAddresses = await firstValueFrom(keyAgent.knownAddresses$);
|
|
34
|
+
const knownAddress = knownAddresses.find(({ address }) => address === signWith);
|
|
35
|
+
if (!knownAddress) {
|
|
36
|
+
throw new Cip30DataSignError(Cip30DataSignErrorCode.ProofGeneration, 'Unknown address');
|
|
37
|
+
}
|
|
38
|
+
return { index: knownAddress.index, role: knownAddress.type };
|
|
39
|
+
};
|
|
40
|
+
const createSigStructureHeaders = (addressBytes) => {
|
|
41
|
+
const protectedHeaders = HeaderMap.new();
|
|
42
|
+
protectedHeaders.set_key_id(addressBytes);
|
|
43
|
+
protectedHeaders.set_header(CoseLabel.address, CBORValue.new_bytes(addressBytes));
|
|
44
|
+
protectedHeaders.set_algorithm_id(Label.from_algorithm_id(AlgorithmId.EdDSA));
|
|
45
|
+
return protectedHeaders;
|
|
46
|
+
};
|
|
47
|
+
const signSigStructure = (keyAgent, derivationPath, sigStructure) => {
|
|
48
|
+
try {
|
|
49
|
+
return keyAgent.signBlob(derivationPath, util.bytesToHex(sigStructure.to_bytes()));
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
throw new Cip30DataSignError(Cip30DataSignErrorCode.UserDeclined, 'Failed to sign', error);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
const createCoseKey = (addressBytes, publicKey) => {
|
|
56
|
+
const coseKey = COSEKey.new(Label.from_key_type(COSEKeyType.OKP));
|
|
57
|
+
coseKey.set_key_id(addressBytes);
|
|
58
|
+
coseKey.set_algorithm_id(Label.from_algorithm_id(AlgorithmId.EdDSA));
|
|
59
|
+
coseKey.set_header(CoseLabel.crv, CBORValue.from_label(Label.from_curve_type(CurveType.Ed25519)));
|
|
60
|
+
coseKey.set_header(CoseLabel.x, CBORValue.new_bytes(Buffer.from(publicKey, 'hex')));
|
|
61
|
+
return coseKey;
|
|
62
|
+
};
|
|
63
|
+
export const cip30signData = async ({ keyAgent, signWith, payload }) => {
|
|
64
|
+
const addressBytes = getAddressBytes(signWith);
|
|
65
|
+
const derivationPath = await getDerivationPath(signWith, keyAgent);
|
|
66
|
+
const builder = COSESign1Builder.new(Headers.new(ProtectedHeaderMap.new(createSigStructureHeaders(addressBytes)), HeaderMap.new()), Buffer.from(payload, 'hex'), false);
|
|
67
|
+
const sigStructure = builder.make_data_to_sign();
|
|
68
|
+
const { signature, publicKey } = await signSigStructure(keyAgent, derivationPath, sigStructure);
|
|
69
|
+
const coseSign1 = builder.build(Buffer.from(signature, 'hex'));
|
|
70
|
+
const coseKey = createCoseKey(addressBytes, publicKey);
|
|
71
|
+
return {
|
|
72
|
+
key: util.bytesToHex(coseKey.to_bytes()),
|
|
73
|
+
signature: util.bytesToHex(coseSign1.to_bytes())
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=cip30signData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cip30signData.js","sourceRoot":"","sources":["../../../src/cip8/cip30signData.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cip8/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cip8/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cip8/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,oBAAY,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;AACpD,oBAAY,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/cip8/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/cip8/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAEpE,eAAO,MAAM,SAAS;;;;CAIrB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/cip8/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAEpE,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;IAClC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;CAClC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const createPbkdf2Key: (password: Uint8Array, salt: Uint8Array | Uint16Array) => Promise<Buffer>;
|
|
2
|
+
export declare const emip3encrypt: (data: Uint8Array, password: Uint8Array) => Promise<Uint8Array>;
|
|
3
|
+
export declare const emip3decrypt: (encrypted: Uint8Array, password: Uint8Array) => Promise<Uint8Array>;
|
|
4
|
+
//# sourceMappingURL=emip3.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emip3.d.ts","sourceRoot":"","sources":["../../src/emip3.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,eAAe,aAAoB,UAAU,QAAQ,UAAU,GAAG,WAAW,oBAMvF,CAAC;AAKJ,eAAO,MAAM,YAAY,SAAgB,UAAU,YAAY,UAAU,KAAG,QAAQ,UAAU,CAY7F,CAAC;AAKF,eAAO,MAAM,YAAY,cAAqB,UAAU,YAAY,UAAU,KAAG,QAAQ,UAAU,CAUlG,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { pbkdf2 } from 'pbkdf2';
|
|
2
|
+
import chacha from 'chacha';
|
|
3
|
+
import getRandomValues from 'get-random-values';
|
|
4
|
+
const KEY_LENGTH = 32;
|
|
5
|
+
const NONCE_LENGTH = 12;
|
|
6
|
+
const PBKDF2_ITERATIONS = 19162;
|
|
7
|
+
const SALT_LENGTH = 32;
|
|
8
|
+
const TAG_LENGTH = 16;
|
|
9
|
+
const AAD = Buffer.from('', 'hex');
|
|
10
|
+
export const createPbkdf2Key = async (password, salt) => await new Promise((resolve, reject) => pbkdf2(password, salt, PBKDF2_ITERATIONS, KEY_LENGTH, 'sha512', (err, derivedKey) => {
|
|
11
|
+
if (err)
|
|
12
|
+
return reject(err);
|
|
13
|
+
resolve(derivedKey);
|
|
14
|
+
}));
|
|
15
|
+
export const emip3encrypt = async (data, password) => {
|
|
16
|
+
const salt = new Uint8Array(SALT_LENGTH);
|
|
17
|
+
getRandomValues(salt);
|
|
18
|
+
const key = await createPbkdf2Key(password, salt);
|
|
19
|
+
const nonce = new Uint8Array(NONCE_LENGTH);
|
|
20
|
+
getRandomValues(nonce);
|
|
21
|
+
const cipher = chacha.createCipher(key, Buffer.from(nonce));
|
|
22
|
+
cipher.setAAD(AAD, { plaintextLength: data.length });
|
|
23
|
+
const head = cipher.update(data);
|
|
24
|
+
const final = cipher.final();
|
|
25
|
+
const tag = cipher.getAuthTag();
|
|
26
|
+
return Buffer.concat([salt, nonce, tag, head, final]);
|
|
27
|
+
};
|
|
28
|
+
export const emip3decrypt = async (encrypted, password) => {
|
|
29
|
+
const salt = encrypted.slice(0, SALT_LENGTH);
|
|
30
|
+
const nonce = encrypted.slice(SALT_LENGTH, SALT_LENGTH + NONCE_LENGTH);
|
|
31
|
+
const tag = encrypted.slice(SALT_LENGTH + NONCE_LENGTH, SALT_LENGTH + NONCE_LENGTH + TAG_LENGTH);
|
|
32
|
+
const data = encrypted.slice(SALT_LENGTH + NONCE_LENGTH + TAG_LENGTH);
|
|
33
|
+
const key = await createPbkdf2Key(password, salt);
|
|
34
|
+
const decipher = chacha.createDecipher(key, Buffer.from(nonce));
|
|
35
|
+
decipher.setAuthTag(Buffer.from(tag));
|
|
36
|
+
decipher.setAAD(AAD);
|
|
37
|
+
return Buffer.concat([decipher.update(Buffer.from(data)), decipher.final()]);
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=emip3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emip3.js","sourceRoot":"","sources":["../../src/emip3.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthenticationError.d.ts","sourceRoot":"","sources":["../../../src/errors/AuthenticationError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAO9C,qBAAa,mBAAoB,SAAQ,WAAW;IACd,UAAU,CAAC;gBAAnC,MAAM,CAAC,EAAE,MAAM,EAAS,UAAU,CAAC,SAAS;CAGzD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CustomError } from 'ts-custom-error';
|
|
2
|
+
const formatMessage = (detail) => {
|
|
3
|
+
const messageDetail = detail ? `: ${detail}` : '';
|
|
4
|
+
return `Authentication failure${messageDetail}`;
|
|
5
|
+
};
|
|
6
|
+
export class AuthenticationError extends CustomError {
|
|
7
|
+
constructor(detail, innerError) {
|
|
8
|
+
super(formatMessage(detail));
|
|
9
|
+
this.innerError = innerError;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=AuthenticationError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthenticationError.js","sourceRoot":"","sources":["../../../src/errors/AuthenticationError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,aAAa,GAAG,CAAC,MAAe,EAAE,EAAE;IACxC,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAClD,OAAO,yBAAyB,aAAa,EAAE,CAAC;AAClD,CAAC,CAAC;AAEF,MAAM,OAAO,mBAAoB,SAAQ,WAAW;IAClD,YAAY,MAAe,EAAS,UAAoB;QACtD,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;QADK,eAAU,GAAV,UAAU,CAAU;IAExD,CAAC;CACF"}
|