@owlmeans/did 0.1.18-rc.44 → 0.1.18-rc.45
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/README.md +2 -2
- package/agent-meta/manifest.json +2 -2
- package/agent-meta/skills/did/SKILL.md +1 -1
- package/build/consts.local.d.ts +2 -0
- package/build/consts.local.d.ts.map +1 -0
- package/build/consts.local.js +2 -0
- package/build/consts.local.js.map +1 -0
- package/build/plugins/ed25519owl.js +5 -5
- package/build/plugins/ed25519owl.js.map +1 -1
- package/build/utils/mnemonic.d.ts +17 -4
- package/build/utils/mnemonic.d.ts.map +1 -1
- package/build/utils/mnemonic.js +7 -5
- package/build/utils/mnemonic.js.map +1 -1
- package/build/utils/types.d.ts +3 -0
- package/build/utils/types.d.ts.map +1 -0
- package/build/utils/types.js +2 -0
- package/build/utils/types.js.map +1 -0
- package/build/utils.d.ts.map +1 -1
- package/build/utils.js +1 -1
- package/build/utils.js.map +1 -1
- package/build/wallet.js +5 -5
- package/build/wallet.js.map +1 -1
- package/package.json +11 -10
- package/src/consts.local.ts +1 -0
- package/src/plugins/ed25519owl.ts +5 -5
- package/src/utils/mnemonic.ts +9 -5
- package/src/utils/types.ts +3 -0
- package/src/utils.ts +1 -2
- package/src/wallet.ts +5 -5
- package/tests/mnemonic.spec.d.ts +2 -0
- package/tests/mnemonic.spec.d.ts.map +1 -0
- package/tests/mnemonic.spec.js +27 -0
- package/tests/mnemonic.spec.js.map +1 -0
- package/tests/mnemonic.spec.ts +31 -0
- package/tsconfig.json +1 -1
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ Hierarchical deterministic (HD) wallet and DID document management for OwlMeans
|
|
|
12
12
|
## Installation
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
|
-
bun add @owlmeans/did@^0.1.18-rc.
|
|
15
|
+
bun add @owlmeans/did@^0.1.18-rc.45
|
|
16
16
|
```
|
|
17
17
|
|
|
18
18
|
## Usage
|
|
@@ -65,7 +65,7 @@ This package ships embedded agent skills under `agent-meta/`. After installing y
|
|
|
65
65
|
your project's skill store (`.agents/skills/`):
|
|
66
66
|
|
|
67
67
|
```sh
|
|
68
|
-
npx @owlmeans/agent-skills@^0.1.18-rc.
|
|
68
|
+
npx @owlmeans/agent-skills@^0.1.18-rc.48
|
|
69
69
|
```
|
|
70
70
|
|
|
71
71
|
The embedded files are version-matched to this package release. Do not edit them
|
package/agent-meta/manifest.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 2,
|
|
3
3
|
"package": "@owlmeans/did",
|
|
4
|
-
"version": "0.1.18-rc.
|
|
5
|
-
"generatedAt": "2026-10-
|
|
4
|
+
"version": "0.1.18-rc.45",
|
|
5
|
+
"generatedAt": "2026-10-05T08:32:19.139Z",
|
|
6
6
|
"canonicalRepo": "https://github.com/owlmeans/common",
|
|
7
7
|
"entries": [
|
|
8
8
|
{
|
|
@@ -8,7 +8,7 @@ user-invocable: false
|
|
|
8
8
|
# @owlmeans/did
|
|
9
9
|
|
|
10
10
|
**Layer:** Core
|
|
11
|
-
**Install:** `"@owlmeans/did": "^0.1.18-rc.
|
|
11
|
+
**Install:** `"@owlmeans/did": "^0.1.18-rc.45"` in `dependencies`
|
|
12
12
|
|
|
13
13
|
This package adds a **derivable** key type on top of `@owlmeans/basic-keys` and a wallet that stores
|
|
14
14
|
keys derived from one mnemonic seed. Importing it registers the `owlmk` key type into the shared
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consts.local.d.ts","sourceRoot":"","sources":["../src/consts.local.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,UAAW,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consts.local.js","sourceRoot":"","sources":["../src/consts.local.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,CAAA"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { ed25519 } from '@noble/curves/ed25519';
|
|
1
|
+
import { ed25519 } from '@noble/curves/ed25519.js';
|
|
2
2
|
import { KEY_OWL } from '../consts.js';
|
|
3
3
|
import { base58, utf8 } from '@scure/base';
|
|
4
|
-
import { concatBytes, randomBytes } from '@noble/hashes/utils';
|
|
5
|
-
import { hmac } from '@noble/hashes/hmac';
|
|
6
|
-
import { sha512 } from '@noble/hashes/
|
|
7
|
-
import { keccak_256 } from '@noble/hashes/sha3';
|
|
4
|
+
import { concatBytes, randomBytes } from '@noble/hashes/utils.js';
|
|
5
|
+
import { hmac } from '@noble/hashes/hmac.js';
|
|
6
|
+
import { sha512 } from '@noble/hashes/sha2.js';
|
|
7
|
+
import { keccak_256 } from '@noble/hashes/sha3.js';
|
|
8
8
|
export const ed25519owlPluginBuilder = (type = KEY_OWL) => {
|
|
9
9
|
const key = {
|
|
10
10
|
type: type,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ed25519owl.js","sourceRoot":"","sources":["../../src/plugins/ed25519owl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"ed25519owl.js","sourceRoot":"","sources":["../../src/plugins/ed25519owl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAElD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAElD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,IAAI,GAAW,OAAO,EAAa,EAAE;IAC3E,MAAM,GAAG,GAAc;QACrB,IAAI,EAAE,IAAI;QAEV,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,QAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAE5C,MAAM,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CACnB,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAE7E,QAAQ,EAAE,CAAC,IAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;QAErE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAEvD,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC;QAEtE,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAErD,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAEnE,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,qBAAqB,CAAC,CAAA,CAAC,CAAC;QAEpE,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,qBAAqB,CAAC,CAAA,CAAC,CAAC;KACrE,CAAA;IAED,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA"}
|
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
import type { MnemonicOptions } from '../types.js';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
declare const generateMnemonic: (opts?: MnemonicOptions) => string;
|
|
3
|
+
declare const toSeed: (mnemonic: string) => string;
|
|
4
|
+
declare const toEntropy: (mnemonic: string) => string;
|
|
5
|
+
declare const toMnemonic: (seed: string) => string;
|
|
6
|
+
export declare const createMnemonicHelper: () => {
|
|
7
|
+
generateMnemonic: typeof generateMnemonic;
|
|
8
|
+
toSeed: typeof toSeed;
|
|
9
|
+
toEntropy: typeof toEntropy;
|
|
10
|
+
toMnemonic: typeof toMnemonic;
|
|
11
|
+
};
|
|
12
|
+
export declare const mnemonicHelper: {
|
|
13
|
+
generateMnemonic: typeof generateMnemonic;
|
|
14
|
+
toSeed: typeof toSeed;
|
|
15
|
+
toEntropy: typeof toEntropy;
|
|
16
|
+
toMnemonic: typeof toMnemonic;
|
|
17
|
+
};
|
|
18
|
+
export {};
|
|
6
19
|
//# sourceMappingURL=mnemonic.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mnemonic.d.ts","sourceRoot":"","sources":["../../src/utils/mnemonic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAKlD,
|
|
1
|
+
{"version":3,"file":"mnemonic.d.ts","sourceRoot":"","sources":["../../src/utils/mnemonic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAKlD,QAAA,MAAM,gBAAgB,UAAW,eAAe,KAAG,MASlD,CAAA;AAED,QAAA,MAAM,MAAM,aAAc,MAAM,KAAG,MACU,CAAA;AAE7C,QAAA,MAAM,SAAS,aAAc,MAAM,KAAG,MACI,CAAA;AAE1C,QAAA,MAAM,UAAU,SAAU,MAAM,KAAG,MACmB,CAAA;AAEtD,eAAO,MAAM,oBAAoB;;;;;CAA8D,CAAA;AAE/F,eAAO,MAAM,cAAc;;;;;CAAyB,CAAA"}
|
package/build/utils/mnemonic.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { generateMnemonic as generate, mnemonicToSeedSync, entropyToMnemonic } from '@scure/bip39';
|
|
2
2
|
import { hex, base64 } from '@scure/base';
|
|
3
|
-
import { wordlist } from '@scure/bip39/wordlists/english';
|
|
4
|
-
|
|
3
|
+
import { wordlist } from '@scure/bip39/wordlists/english.js';
|
|
4
|
+
const generateMnemonic = (opts) => {
|
|
5
5
|
const size = opts?.size ?? 18;
|
|
6
6
|
if (size < 12 || size > 24) {
|
|
7
7
|
throw new SyntaxError('Mnemonic size should be between 12 and 24');
|
|
@@ -9,7 +9,9 @@ export const generateMnemonic = (opts) => {
|
|
|
9
9
|
const strength = Math.round(256 * size / 24);
|
|
10
10
|
return generate(wordlist, strength + (32 - strength % 32));
|
|
11
11
|
};
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
const toSeed = (mnemonic) => base64.encode(mnemonicToSeedSync(mnemonic));
|
|
13
|
+
const toEntropy = (mnemonic) => hex.encode(mnemonicToSeedSync(mnemonic));
|
|
14
|
+
const toMnemonic = (seed) => entropyToMnemonic(hex.decode(seed), wordlist);
|
|
15
|
+
export const createMnemonicHelper = () => ({ generateMnemonic, toSeed, toEntropy, toMnemonic });
|
|
16
|
+
export const mnemonicHelper = createMnemonicHelper();
|
|
15
17
|
//# sourceMappingURL=mnemonic.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mnemonic.js","sourceRoot":"","sources":["../../src/utils/mnemonic.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,IAAI,QAAQ,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAClG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"mnemonic.js","sourceRoot":"","sources":["../../src/utils/mnemonic.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,IAAI,QAAQ,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAClG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAA;AAE5D,MAAM,gBAAgB,GAAG,CAAC,IAAsB,EAAU,EAAE;IAC1D,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,EAAE,CAAA;IAE7B,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,EAAE,CAAC;QAC3B,MAAM,IAAI,WAAW,CAAC,2CAA2C,CAAC,CAAA;IACpE,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC,CAAA;IAC5C,OAAO,QAAQ,CAAC,QAAe,EAAE,QAAQ,GAAG,CAAC,EAAE,GAAG,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAA;AACnE,CAAC,CAAA;AAED,MAAM,MAAM,GAAG,CAAC,QAAgB,EAAU,EAAE,CAC1C,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAA;AAE7C,MAAM,SAAS,GAAG,CAAC,QAAgB,EAAU,EAAE,CAC7C,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAA;AAE1C,MAAM,UAAU,GAAG,CAAC,IAAY,EAAU,EAAE,CAC1C,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAe,CAAC,CAAA;AAEtD,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAA;AAE/F,MAAM,CAAC,MAAM,cAAc,GAAG,oBAAoB,EAAE,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAEzD,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":""}
|
package/build/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAGzC,eAAO,MAAM,MAAM,YAAa,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,WAEvC,CAAA;AAEd,eAAO,MAAM,UAAU,SAAU,OAAO,CAAC,OAAO,CAAC,KAAG,MAcnD,CAAA;AAED,eAAO,MAAM,SAAS,aAAc,OAAO,UAAU,OAAO,CAAC,OAAO,CAAC,KAAG,OAQlE,CAAA"}
|
package/build/utils.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ENTITY_PREFIX, KP_SEP, PREFIX_SEP, PROFILE_PREFIX, SERVICE_PREFIX } from './consts.js';
|
|
2
|
+
import { skipFields } from './consts.local.js';
|
|
2
3
|
export const toPath = (...args) => args.map(arg => Array.isArray(arg) ? arg.join(PREFIX_SEP) : arg).join(KP_SEP);
|
|
3
4
|
export const mataToPath = (meta) => {
|
|
4
5
|
const { scopes, id, entityId } = meta;
|
|
@@ -14,7 +15,6 @@ export const mataToPath = (meta) => {
|
|
|
14
15
|
}
|
|
15
16
|
return toPath(...items);
|
|
16
17
|
};
|
|
17
|
-
const skipFields = ['name'];
|
|
18
18
|
export const matchMeta = (haystack, needle) => Object.entries(needle).every(([key, value]) => skipFields.includes(key)
|
|
19
19
|
|| (haystack[key] != null
|
|
20
20
|
&& (Array.isArray(value)
|
package/build/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE/F,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAG,IAA2B,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAChE,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CACvD,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAEd,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAsB,EAAU,EAAE;IAC3D,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;IACrC,MAAM,KAAK,GAA0B,EAAE,CAAA;IACvC,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACzC,CAAC;IACD,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAA;IACvC,CAAC;IACD,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAA;IAClC,CAAC;IAED,OAAO,MAAM,CAAC,GAAG,KAAK,CAAC,CAAA;AACzB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,QAAiB,EAAE,MAAwB,EAAW,EAAE,CAChF,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAC5C,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;OACrB,CAAC,QAAQ,CAAC,GAA4B,CAAC,IAAI,IAAI;WAC7C,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACtB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAA4B,CAAC,CAAC;mBACpD,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAE,QAAQ,CAAC,GAA4B,CAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC9F,CAAC,CAAC,QAAQ,CAAC,GAA4B,CAAC,KAAK,KAAK,CAAC,CACtD,CAAC,CAAA"}
|
package/build/wallet.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { DIDInitializationError, DIDKeyError, DIDWalletError } from './errors.js';
|
|
2
|
-
import { generateMnemonic, toEntropy, toMnemonic, toSeed } from './utils/mnemonic.js';
|
|
3
2
|
import { KEY_OWL, MASTER } from './consts.js';
|
|
4
3
|
import { plugins } from './plugins/index.js';
|
|
5
4
|
import { ed25519owlPluginBuilder } from './plugins/ed25519owl.js';
|
|
6
5
|
import { produceKey } from './utils/key.js';
|
|
7
6
|
import { makeDidKeyModel } from './model.js';
|
|
8
7
|
import { mataToPath, matchMeta } from './utils.js';
|
|
8
|
+
import { mnemonicHelper } from './utils/mnemonic.js';
|
|
9
9
|
export const makeWallet = async (store, opts) => {
|
|
10
10
|
if (await store.master.load(MASTER) == null) {
|
|
11
11
|
if (!opts?.force && !opts?.allowEmpty) {
|
|
@@ -21,10 +21,10 @@ export const makeWallet = async (store, opts) => {
|
|
|
21
21
|
const wallet = {
|
|
22
22
|
store,
|
|
23
23
|
generate: async (opts) => {
|
|
24
|
-
const mnemonic = generateMnemonic(opts);
|
|
24
|
+
const mnemonic = mnemonicHelper.generateMnemonic(opts);
|
|
25
25
|
const seed = {
|
|
26
|
-
entropy: toEntropy(mnemonic),
|
|
27
|
-
seed: toSeed(mnemonic)
|
|
26
|
+
entropy: mnemonicHelper.toEntropy(mnemonic),
|
|
27
|
+
seed: mnemonicHelper.toSeed(mnemonic)
|
|
28
28
|
};
|
|
29
29
|
const master = produceKey(seed.seed, type);
|
|
30
30
|
await store.master.save({ id: MASTER, ...master, ...seed });
|
|
@@ -37,7 +37,7 @@ export const makeWallet = async (store, opts) => {
|
|
|
37
37
|
}
|
|
38
38
|
return false;
|
|
39
39
|
}
|
|
40
|
-
return toMnemonic(master.seed);
|
|
40
|
+
return mnemonicHelper.toMnemonic(master.seed);
|
|
41
41
|
},
|
|
42
42
|
master: async () => makeDidKeyModel(await store.master.get(MASTER)),
|
|
43
43
|
add: async (key, meta) => {
|
package/build/wallet.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAGjF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@owlmeans/did",
|
|
3
|
-
"version": "0.1.18-rc.
|
|
3
|
+
"version": "0.1.18-rc.45",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"build": "tsc -b",
|
|
8
|
+
"test": "bun test ./tests",
|
|
8
9
|
"dev": "sleep 153 && nodemon -e ts,tsx,json --watch src --exec \"tsc -p ./tsconfig.json\"",
|
|
9
10
|
"watch": "tsc -b -w --preserveWatchOutput --pretty"
|
|
10
11
|
},
|
|
@@ -21,15 +22,15 @@
|
|
|
21
22
|
}
|
|
22
23
|
},
|
|
23
24
|
"dependencies": {
|
|
24
|
-
"@noble/curves": "^
|
|
25
|
-
"@noble/hashes": "^
|
|
26
|
-
"@owlmeans/auth": "^0.1.18-rc.
|
|
27
|
-
"@owlmeans/basic-keys": "^0.1.18-rc.
|
|
28
|
-
"@owlmeans/error": "^0.1.18-rc.
|
|
29
|
-
"@owlmeans/i18n": "^0.1.18-rc.
|
|
30
|
-
"@owlmeans/resource": "^0.1.18-rc.
|
|
31
|
-
"@scure/base": "^2.
|
|
32
|
-
"@scure/bip39": "^
|
|
25
|
+
"@noble/curves": "^2.4.0",
|
|
26
|
+
"@noble/hashes": "^2.4.0",
|
|
27
|
+
"@owlmeans/auth": "^0.1.18-rc.39",
|
|
28
|
+
"@owlmeans/basic-keys": "^0.1.18-rc.47",
|
|
29
|
+
"@owlmeans/error": "^0.1.18-rc.37",
|
|
30
|
+
"@owlmeans/i18n": "^0.1.18-rc.38",
|
|
31
|
+
"@owlmeans/resource": "^0.1.18-rc.39",
|
|
32
|
+
"@scure/base": "^2.4.0",
|
|
33
|
+
"@scure/bip39": "^2.4.0"
|
|
33
34
|
},
|
|
34
35
|
"devDependencies": {
|
|
35
36
|
"@owlmeans/dep-config": "workspace:*",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const skipFields = ['name']
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { ed25519 } from '@noble/curves/ed25519'
|
|
1
|
+
import { ed25519 } from '@noble/curves/ed25519.js'
|
|
2
2
|
import type { KeyPlugin } from '@owlmeans/basic-keys/plugins'
|
|
3
3
|
import { KEY_OWL } from '../consts.js'
|
|
4
4
|
import { base58, utf8 } from '@scure/base'
|
|
5
|
-
import { concatBytes, randomBytes } from '@noble/hashes/utils'
|
|
6
|
-
import { hmac } from '@noble/hashes/hmac'
|
|
7
|
-
import { sha512 } from '@noble/hashes/
|
|
8
|
-
import { keccak_256 } from '@noble/hashes/sha3'
|
|
5
|
+
import { concatBytes, randomBytes } from '@noble/hashes/utils.js'
|
|
6
|
+
import { hmac } from '@noble/hashes/hmac.js'
|
|
7
|
+
import { sha512 } from '@noble/hashes/sha2.js'
|
|
8
|
+
import { keccak_256 } from '@noble/hashes/sha3.js'
|
|
9
9
|
|
|
10
10
|
export const ed25519owlPluginBuilder = (type: string = KEY_OWL): KeyPlugin => {
|
|
11
11
|
const key: KeyPlugin = {
|
package/src/utils/mnemonic.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { MnemonicOptions } from '../types.js'
|
|
2
2
|
import { generateMnemonic as generate, mnemonicToSeedSync, entropyToMnemonic } from '@scure/bip39'
|
|
3
3
|
import { hex, base64 } from '@scure/base'
|
|
4
|
-
import { wordlist } from '@scure/bip39/wordlists/english'
|
|
4
|
+
import { wordlist } from '@scure/bip39/wordlists/english.js'
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
const generateMnemonic = (opts?: MnemonicOptions): string => {
|
|
7
7
|
const size = opts?.size ?? 18
|
|
8
8
|
|
|
9
9
|
if (size < 12 || size > 24) {
|
|
@@ -14,11 +14,15 @@ export const generateMnemonic = (opts?: MnemonicOptions): string => {
|
|
|
14
14
|
return generate(wordlist as any, strength + (32 - strength % 32))
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
const toSeed = (mnemonic: string): string =>
|
|
18
18
|
base64.encode(mnemonicToSeedSync(mnemonic))
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
const toEntropy = (mnemonic: string): string =>
|
|
21
21
|
hex.encode(mnemonicToSeedSync(mnemonic))
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
const toMnemonic = (seed: string): string =>
|
|
24
24
|
entropyToMnemonic(hex.decode(seed), wordlist as any)
|
|
25
|
+
|
|
26
|
+
export const createMnemonicHelper = () => ({ generateMnemonic, toSeed, toEntropy, toMnemonic })
|
|
27
|
+
|
|
28
|
+
export const mnemonicHelper = createMnemonicHelper()
|
package/src/utils.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ENTITY_PREFIX, KP_SEP, PREFIX_SEP, PROFILE_PREFIX, SERVICE_PREFIX } from './consts.js'
|
|
2
2
|
import type { KeyMeta } from './types.js'
|
|
3
|
+
import { skipFields } from './consts.local.js'
|
|
3
4
|
|
|
4
5
|
export const toPath = (...args: (string | string[])[]) => args.map(
|
|
5
6
|
arg => Array.isArray(arg) ? arg.join(PREFIX_SEP) : arg
|
|
@@ -21,8 +22,6 @@ export const mataToPath = (meta: Partial<KeyMeta>): string => {
|
|
|
21
22
|
return toPath(...items)
|
|
22
23
|
}
|
|
23
24
|
|
|
24
|
-
const skipFields = ['name']
|
|
25
|
-
|
|
26
25
|
export const matchMeta = (haystack: KeyMeta, needle: Partial<KeyMeta>): boolean =>
|
|
27
26
|
Object.entries(needle).every(([key, value]) =>
|
|
28
27
|
skipFields.includes(key)
|
package/src/wallet.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { DIDInitializationError, DIDKeyError, DIDWalletError } from './errors.js'
|
|
2
2
|
import type { Criteria } from '@owlmeans/resource'
|
|
3
3
|
import type { DIDKeyModel, DIDStore, DIDWallet, KeyMeta, KeyMetaRecord, KeyPairRecord, MakeDIDWalletOptions } from './types.js'
|
|
4
|
-
import { generateMnemonic, toEntropy, toMnemonic, toSeed } from './utils/mnemonic.js'
|
|
5
4
|
import { KEY_OWL, MASTER } from './consts.js'
|
|
6
5
|
import { plugins } from './plugins/index.js'
|
|
7
6
|
import { ed25519owlPluginBuilder } from './plugins/ed25519owl.js'
|
|
8
7
|
import { produceKey } from './utils/key.js'
|
|
9
8
|
import { makeDidKeyModel } from './model.js'
|
|
10
9
|
import { mataToPath, matchMeta } from './utils.js'
|
|
10
|
+
import { mnemonicHelper } from './utils/mnemonic.js'
|
|
11
11
|
|
|
12
12
|
export const makeWallet = async (store: DIDStore, opts?: MakeDIDWalletOptions) => {
|
|
13
13
|
if (await store.master.load(MASTER) == null) {
|
|
@@ -27,11 +27,11 @@ export const makeWallet = async (store: DIDStore, opts?: MakeDIDWalletOptions) =
|
|
|
27
27
|
store,
|
|
28
28
|
|
|
29
29
|
generate: async opts => {
|
|
30
|
-
const mnemonic = generateMnemonic(opts)
|
|
30
|
+
const mnemonic = mnemonicHelper.generateMnemonic(opts)
|
|
31
31
|
|
|
32
32
|
const seed = {
|
|
33
|
-
entropy: toEntropy(mnemonic),
|
|
34
|
-
seed: toSeed(mnemonic)
|
|
33
|
+
entropy: mnemonicHelper.toEntropy(mnemonic),
|
|
34
|
+
seed: mnemonicHelper.toSeed(mnemonic)
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
const master = produceKey(seed.seed, type)
|
|
@@ -47,7 +47,7 @@ export const makeWallet = async (store: DIDStore, opts?: MakeDIDWalletOptions) =
|
|
|
47
47
|
return false
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
return toMnemonic(master.seed)
|
|
50
|
+
return mnemonicHelper.toMnemonic(master.seed)
|
|
51
51
|
},
|
|
52
52
|
|
|
53
53
|
master: async () => makeDidKeyModel(await store.master.get(MASTER)),
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mnemonic.spec.d.ts","sourceRoot":"","sources":["mnemonic.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { describe, expect, test } from 'bun:test';
|
|
2
|
+
import { wordlist } from '@scure/bip39/wordlists/english.js';
|
|
3
|
+
import { mnemonicHelper } from '../src/utils/mnemonic.js';
|
|
4
|
+
/**
|
|
5
|
+
* Answers computed with @scure/bip39 1.6 before the v2 line: the seed of the all-`abandon` test mnemonic is
|
|
6
|
+
* the published BIP-39 vector, so a changed derivation fails here rather than as a different DID.
|
|
7
|
+
*/
|
|
8
|
+
const MNEMONIC = 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about';
|
|
9
|
+
const SEED_HEX = '5eb00bbddcf069084889a8ab9155568165f5c453ccb85e70811aaed6f6da5fc19a5ac40b389cd370d086206dec8aa6c43daea6690f20ad3d8d48b2d2ce9e38e4';
|
|
10
|
+
describe('@owlmeans/did — mnemonic derivation', () => {
|
|
11
|
+
test('the seed of the BIP-39 test mnemonic is the published vector', () => {
|
|
12
|
+
expect(mnemonicHelper.toEntropy(MNEMONIC)).toBe(SEED_HEX);
|
|
13
|
+
expect(Buffer.from(mnemonicHelper.toSeed(MNEMONIC), 'base64').toString('hex')).toBe(SEED_HEX);
|
|
14
|
+
});
|
|
15
|
+
test('entropy turns back into the mnemonic it came from', () => {
|
|
16
|
+
expect(mnemonicHelper.toMnemonic('00000000000000000000000000000000')).toBe(MNEMONIC);
|
|
17
|
+
});
|
|
18
|
+
test('a generated mnemonic is a valid BIP-39 length and made of words of the list', () => {
|
|
19
|
+
const words = mnemonicHelper.generateMnemonic({ size: 12 }).split(' ');
|
|
20
|
+
expect([12, 15, 18, 21, 24]).toContain(words.length);
|
|
21
|
+
expect(words.every(word => wordlist.includes(word))).toBe(true);
|
|
22
|
+
});
|
|
23
|
+
test('sizes outside 12–24 are refused', () => {
|
|
24
|
+
expect(() => mnemonicHelper.generateMnemonic({ size: 8 })).toThrow();
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=mnemonic.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mnemonic.spec.js","sourceRoot":"","sources":["mnemonic.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAEzD;;;GAGG;AACH,MAAM,QAAQ,GAAG,+FAA+F,CAAA;AAChH,MAAM,QAAQ,GAAG,kIAAkI,CAAA;AAEnJ,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;IACnD,IAAI,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACxE,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACzD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC/F,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACtF,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,6EAA6E,EAAE,GAAG,EAAE;QACvF,MAAM,KAAK,GAAG,cAAc,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACtE,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACpD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACjE,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;IACtE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { describe, expect, test } from 'bun:test'
|
|
2
|
+
import { wordlist } from '@scure/bip39/wordlists/english.js'
|
|
3
|
+
import { mnemonicHelper } from '../src/utils/mnemonic.js'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Answers computed with @scure/bip39 1.6 before the v2 line: the seed of the all-`abandon` test mnemonic is
|
|
7
|
+
* the published BIP-39 vector, so a changed derivation fails here rather than as a different DID.
|
|
8
|
+
*/
|
|
9
|
+
const MNEMONIC = 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about'
|
|
10
|
+
const SEED_HEX = '5eb00bbddcf069084889a8ab9155568165f5c453ccb85e70811aaed6f6da5fc19a5ac40b389cd370d086206dec8aa6c43daea6690f20ad3d8d48b2d2ce9e38e4'
|
|
11
|
+
|
|
12
|
+
describe('@owlmeans/did — mnemonic derivation', () => {
|
|
13
|
+
test('the seed of the BIP-39 test mnemonic is the published vector', () => {
|
|
14
|
+
expect(mnemonicHelper.toEntropy(MNEMONIC)).toBe(SEED_HEX)
|
|
15
|
+
expect(Buffer.from(mnemonicHelper.toSeed(MNEMONIC), 'base64').toString('hex')).toBe(SEED_HEX)
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
test('entropy turns back into the mnemonic it came from', () => {
|
|
19
|
+
expect(mnemonicHelper.toMnemonic('00000000000000000000000000000000')).toBe(MNEMONIC)
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
test('a generated mnemonic is a valid BIP-39 length and made of words of the list', () => {
|
|
23
|
+
const words = mnemonicHelper.generateMnemonic({ size: 12 }).split(' ')
|
|
24
|
+
expect([12, 15, 18, 21, 24]).toContain(words.length)
|
|
25
|
+
expect(words.every(word => wordlist.includes(word))).toBe(true)
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
test('sizes outside 12–24 are refused', () => {
|
|
29
|
+
expect(() => mnemonicHelper.generateMnemonic({ size: 8 })).toThrow()
|
|
30
|
+
})
|
|
31
|
+
})
|
package/tsconfig.json
CHANGED