@oxyhq/services 5.15.3 → 5.15.4
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/lib/commonjs/crypto/keyManager.js +9 -1
- package/lib/commonjs/crypto/keyManager.js.map +1 -1
- package/lib/commonjs/crypto/recoveryPhrase.js +17 -2
- package/lib/commonjs/crypto/recoveryPhrase.js.map +1 -1
- package/lib/module/crypto/keyManager.js +9 -1
- package/lib/module/crypto/keyManager.js.map +1 -1
- package/lib/module/crypto/recoveryPhrase.js +18 -2
- package/lib/module/crypto/recoveryPhrase.js.map +1 -1
- package/lib/typescript/crypto/keyManager.d.ts.map +1 -1
- package/lib/typescript/crypto/recoveryPhrase.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/crypto/keyManager.ts +11 -1
- package/src/crypto/recoveryPhrase.ts +20 -2
|
@@ -51,6 +51,14 @@ async function initExpoRandom() {
|
|
|
51
51
|
return ExpoRandom;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
+
/**
|
|
55
|
+
* Convert Uint8Array to hexadecimal string
|
|
56
|
+
* Works in both Node.js and React Native
|
|
57
|
+
*/
|
|
58
|
+
function uint8ArrayToHex(bytes) {
|
|
59
|
+
return Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join('');
|
|
60
|
+
}
|
|
61
|
+
|
|
54
62
|
/**
|
|
55
63
|
* Generate cryptographically secure random bytes
|
|
56
64
|
*/
|
|
@@ -93,7 +101,7 @@ class KeyManager {
|
|
|
93
101
|
*/
|
|
94
102
|
static async generateKeyPair() {
|
|
95
103
|
const randomBytes = await getSecureRandomBytes(32);
|
|
96
|
-
const privateKeyHex =
|
|
104
|
+
const privateKeyHex = uint8ArrayToHex(randomBytes);
|
|
97
105
|
const keyPair = ec.keyFromPrivate(privateKeyHex);
|
|
98
106
|
return {
|
|
99
107
|
privateKey: keyPair.getPrivate('hex'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_elliptic","require","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","SecureStore","ExpoRandom","ec","EC","STORAGE_KEYS","PRIVATE_KEY","PUBLIC_KEY","initSecureStore","Promise","resolve","then","isReactNative","navigator","product","isNodeJS","process","versions","node","initExpoRandom","getSecureRandomBytes","length","Random","getRandomBytes","getCrypto","Function","crypto","Uint8Array","randomBytes","error","KeyManager","generateKeyPairSync","keyPair","genKeyPair","privateKey","getPrivate","publicKey","getPublic","generateKeyPair","privateKeyHex","
|
|
1
|
+
{"version":3,"names":["_elliptic","require","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","SecureStore","ExpoRandom","ec","EC","STORAGE_KEYS","PRIVATE_KEY","PUBLIC_KEY","initSecureStore","Promise","resolve","then","isReactNative","navigator","product","isNodeJS","process","versions","node","initExpoRandom","uint8ArrayToHex","bytes","Array","from","map","b","toString","padStart","join","getSecureRandomBytes","length","Random","getRandomBytes","getCrypto","Function","crypto","Uint8Array","randomBytes","error","KeyManager","generateKeyPairSync","keyPair","genKeyPair","privateKey","getPrivate","publicKey","getPublic","generateKeyPair","privateKeyHex","keyFromPrivate","createIdentity","store","setItemAsync","keychainAccessible","WHEN_UNLOCKED_THIS_DEVICE_ONLY","importKeyPair","getPrivateKey","getItemAsync","getPublicKey","hasIdentity","deleteIdentity","deleteItemAsync","getKeyPairObject","derivePublicKey","isValidPublicKey","keyFromPublic","isValidPrivateKey","shortenPublicKey","slice","exports","_default"],"sourceRoot":"../../../src","sources":["crypto/keyManager.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -14,6 +14,19 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
|
|
|
14
14
|
* for backing up and restoring user identities.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Convert Buffer or Uint8Array to hexadecimal string
|
|
19
|
+
* Works in both Node.js and React Native
|
|
20
|
+
*/
|
|
21
|
+
function toHex(data) {
|
|
22
|
+
if (typeof data.toString === 'function' && data.toString.length === 1) {
|
|
23
|
+
// It's a Buffer with toString('hex') method (Node.js)
|
|
24
|
+
return data.toString('hex');
|
|
25
|
+
}
|
|
26
|
+
// It's a Uint8Array or array-like (React Native/browser)
|
|
27
|
+
const bytes = data instanceof Uint8Array ? data : new Uint8Array(data);
|
|
28
|
+
return Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join('');
|
|
29
|
+
}
|
|
17
30
|
class RecoveryPhraseService {
|
|
18
31
|
/**
|
|
19
32
|
* Generate a new identity with a recovery phrase
|
|
@@ -28,7 +41,8 @@ class RecoveryPhraseService {
|
|
|
28
41
|
const seed = await bip39.mnemonicToSeed(mnemonic);
|
|
29
42
|
|
|
30
43
|
// Use first 32 bytes of seed as private key
|
|
31
|
-
const
|
|
44
|
+
const seedSlice = seed.subarray ? seed.subarray(0, 32) : seed.slice(0, 32);
|
|
45
|
+
const privateKeyHex = toHex(seedSlice);
|
|
32
46
|
|
|
33
47
|
// Import the derived key pair
|
|
34
48
|
const publicKey = await _keyManager.KeyManager.importKeyPair(privateKeyHex);
|
|
@@ -46,7 +60,8 @@ class RecoveryPhraseService {
|
|
|
46
60
|
// Generate 256-bit entropy for 24-word mnemonic
|
|
47
61
|
const mnemonic = bip39.generateMnemonic(256);
|
|
48
62
|
const seed = await bip39.mnemonicToSeed(mnemonic);
|
|
49
|
-
const
|
|
63
|
+
const seedSlice = seed.subarray ? seed.subarray(0, 32) : seed.slice(0, 32);
|
|
64
|
+
const privateKeyHex = toHex(seedSlice);
|
|
50
65
|
const publicKey = await _keyManager.KeyManager.importKeyPair(privateKeyHex);
|
|
51
66
|
return {
|
|
52
67
|
phrase: mnemonic,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["bip39","_interopRequireWildcard","require","_keyManager","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","RecoveryPhraseService","generateIdentityWithRecovery","mnemonic","generateMnemonic","seed","mnemonicToSeed","
|
|
1
|
+
{"version":3,"names":["bip39","_interopRequireWildcard","require","_keyManager","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","toHex","data","toString","length","bytes","Uint8Array","Array","from","map","b","padStart","join","RecoveryPhraseService","generateIdentityWithRecovery","mnemonic","generateMnemonic","seed","mnemonicToSeed","seedSlice","subarray","slice","privateKeyHex","publicKey","KeyManager","importKeyPair","phrase","words","split","generateIdentityWithRecovery24","restoreFromPhrase","normalizedPhrase","trim","toLowerCase","validateMnemonic","Error","validatePhrase","getWordList","wordlists","english","isValidWord","word","includes","getSuggestions","partial","limit","lowerPartial","filter","startsWith","derivePublicKeyFromPhrase","derivePublicKey","phraseToWords","wordsToPhrase","w","exports","_default"],"sourceRoot":"../../../src","sources":["crypto/recoveryPhrase.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -48,6 +48,14 @@ async function initExpoRandom() {
|
|
|
48
48
|
return ExpoRandom;
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
+
/**
|
|
52
|
+
* Convert Uint8Array to hexadecimal string
|
|
53
|
+
* Works in both Node.js and React Native
|
|
54
|
+
*/
|
|
55
|
+
function uint8ArrayToHex(bytes) {
|
|
56
|
+
return Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join('');
|
|
57
|
+
}
|
|
58
|
+
|
|
51
59
|
/**
|
|
52
60
|
* Generate cryptographically secure random bytes
|
|
53
61
|
*/
|
|
@@ -90,7 +98,7 @@ export class KeyManager {
|
|
|
90
98
|
*/
|
|
91
99
|
static async generateKeyPair() {
|
|
92
100
|
const randomBytes = await getSecureRandomBytes(32);
|
|
93
|
-
const privateKeyHex =
|
|
101
|
+
const privateKeyHex = uint8ArrayToHex(randomBytes);
|
|
94
102
|
const keyPair = ec.keyFromPrivate(privateKeyHex);
|
|
95
103
|
return {
|
|
96
104
|
privateKey: keyPair.getPrivate('hex'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ec","EC","SecureStore","ExpoRandom","STORAGE_KEYS","PRIVATE_KEY","PUBLIC_KEY","initSecureStore","isReactNative","navigator","product","isNodeJS","process","versions","node","initExpoRandom","getSecureRandomBytes","length","Random","getRandomBytes","getCrypto","Function","crypto","Uint8Array","randomBytes","error","KeyManager","generateKeyPairSync","keyPair","genKeyPair","privateKey","getPrivate","publicKey","getPublic","generateKeyPair","privateKeyHex","
|
|
1
|
+
{"version":3,"names":["ec","EC","SecureStore","ExpoRandom","STORAGE_KEYS","PRIVATE_KEY","PUBLIC_KEY","initSecureStore","isReactNative","navigator","product","isNodeJS","process","versions","node","initExpoRandom","uint8ArrayToHex","bytes","Array","from","map","b","toString","padStart","join","getSecureRandomBytes","length","Random","getRandomBytes","getCrypto","Function","crypto","Uint8Array","randomBytes","error","KeyManager","generateKeyPairSync","keyPair","genKeyPair","privateKey","getPrivate","publicKey","getPublic","generateKeyPair","privateKeyHex","keyFromPrivate","createIdentity","store","setItemAsync","keychainAccessible","WHEN_UNLOCKED_THIS_DEVICE_ONLY","importKeyPair","getPrivateKey","getItemAsync","getPublicKey","hasIdentity","deleteIdentity","deleteItemAsync","getKeyPairObject","derivePublicKey","isValidPublicKey","keyFromPublic","isValidPrivateKey","shortenPublicKey","slice"],"sourceRoot":"../../../src","sources":["crypto/keyManager.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,EAAE,IAAIC,EAAE,QAAQ,UAAU;AAGnC;AACA,IAAIC,WAAsD,GAAG,IAAI;AACjE,IAAIC,UAA+C,GAAG,IAAI;AAE1D,MAAMH,EAAE,GAAG,IAAIC,EAAE,CAAC,WAAW,CAAC;AAE9B,MAAMG,YAAY,GAAG;EACnBC,WAAW,EAAE,0BAA0B;EACvCC,UAAU,EAAE;AACd,CAAU;;AAEV;AACA;AACA;AACA;AACA,eAAeC,eAAeA,CAAA,EAAgD;EAC5E,IAAI,CAACL,WAAW,EAAE;IAChBA,WAAW,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC;EACjD;EACA,OAAOA,WAAW;AACpB;;AAEA;AACA;AACA;AACA,SAASM,aAAaA,CAAA,EAAY;EAChC,OAAO,OAAOC,SAAS,KAAK,WAAW,IAAIA,SAAS,CAACC,OAAO,KAAK,aAAa;AAChF;;AAEA;AACA;AACA;AACA,SAASC,QAAQA,CAAA,EAAY;EAC3B,OAAO,OAAOC,OAAO,KAAK,WAAW,IAAIA,OAAO,CAACC,QAAQ,IAAI,IAAI,IAAID,OAAO,CAACC,QAAQ,CAACC,IAAI,IAAI,IAAI;AACpG;AAEA,eAAeC,cAAcA,CAAA,EAA0C;EACrE,IAAI,CAACZ,UAAU,EAAE;IACfA,UAAU,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC;EAC1C;EACA,OAAOA,UAAU;AACnB;;AAEA;AACA;AACA;AACA;AACA,SAASa,eAAeA,CAACC,KAAiB,EAAU;EAClD,OAAOC,KAAK,CAACC,IAAI,CAACF,KAAK,CAAC,CACrBG,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACC,QAAQ,CAAC,EAAE,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CACzCC,IAAI,CAAC,EAAE,CAAC;AACb;;AAEA;AACA;AACA;AACA,eAAeC,oBAAoBA,CAACC,MAAc,EAAuB;EACvE;EACA,IAAIlB,aAAa,CAAC,CAAC,IAAI,CAACG,QAAQ,CAAC,CAAC,EAAE;IAClC,MAAMgB,MAAM,GAAG,MAAMZ,cAAc,CAAC,CAAC;IACrC,OAAOY,MAAM,CAACC,cAAc,CAACF,MAAM,CAAC;EACtC;;EAEA;EACA;EACA;EACA,IAAI;IACF;IACA,MAAMG,SAAS,GAAG,IAAIC,QAAQ,CAAC,0BAA0B,CAAC;IAC1D,MAAMC,MAAM,GAAGF,SAAS,CAAC,CAAC;IAC1B,OAAO,IAAIG,UAAU,CAACD,MAAM,CAACE,WAAW,CAACP,MAAM,CAAC,CAAC;EACnD,CAAC,CAAC,OAAOQ,KAAK,EAAE;IACd;IACA,MAAMP,MAAM,GAAG,MAAMZ,cAAc,CAAC,CAAC;IACrC,OAAOY,MAAM,CAACC,cAAc,CAACF,MAAM,CAAC;EACtC;AACF;AAOA,OAAO,MAAMS,UAAU,CAAC;EACtB;AACF;AACA;AACA;EACE,OAAOC,mBAAmBA,CAAA,EAAY;IACpC,MAAMC,OAAO,GAAGrC,EAAE,CAACsC,UAAU,CAAC,CAAC;IAC/B,OAAO;MACLC,UAAU,EAAEF,OAAO,CAACG,UAAU,CAAC,KAAK,CAAC;MACrCC,SAAS,EAAEJ,OAAO,CAACK,SAAS,CAAC,KAAK;IACpC,CAAC;EACH;;EAEA;AACF;AACA;EACE,aAAaC,eAAeA,CAAA,EAAqB;IAC/C,MAAMV,WAAW,GAAG,MAAMR,oBAAoB,CAAC,EAAE,CAAC;IAClD,MAAMmB,aAAa,GAAG5B,eAAe,CAACiB,WAAW,CAAC;IAClD,MAAMI,OAAO,GAAGrC,EAAE,CAAC6C,cAAc,CAACD,aAAa,CAAC;IAEhD,OAAO;MACLL,UAAU,EAAEF,OAAO,CAACG,UAAU,CAAC,KAAK,CAAC;MACrCC,SAAS,EAAEJ,OAAO,CAACK,SAAS,CAAC,KAAK;IACpC,CAAC;EACH;;EAEA;AACF;AACA;AACA;EACE,aAAaI,cAAcA,CAAA,EAAoB;IAC7C,MAAMC,KAAK,GAAG,MAAMxC,eAAe,CAAC,CAAC;IACrC,MAAM;MAAEgC,UAAU;MAAEE;IAAU,CAAC,GAAG,MAAMN,UAAU,CAACQ,eAAe,CAAC,CAAC;;IAEpE;IACA,MAAMI,KAAK,CAACC,YAAY,CAAC5C,YAAY,CAACC,WAAW,EAAEkC,UAAU,EAAE;MAC7DU,kBAAkB,EAAEF,KAAK,CAACG;IAC5B,CAAC,CAAC;;IAEF;IACA,MAAMH,KAAK,CAACC,YAAY,CAAC5C,YAAY,CAACE,UAAU,EAAEmC,SAAS,CAAC;IAE5D,OAAOA,SAAS;EAClB;;EAEA;AACF;AACA;EACE,aAAaU,aAAaA,CAACZ,UAAkB,EAAmB;IAC9D,MAAMQ,KAAK,GAAG,MAAMxC,eAAe,CAAC,CAAC;;IAErC;IACA,MAAM8B,OAAO,GAAGrC,EAAE,CAAC6C,cAAc,CAACN,UAAU,CAAC;IAC7C,MAAME,SAAS,GAAGJ,OAAO,CAACK,SAAS,CAAC,KAAK,CAAC;;IAE1C;IACA,MAAMK,KAAK,CAACC,YAAY,CAAC5C,YAAY,CAACC,WAAW,EAAEkC,UAAU,EAAE;MAC7DU,kBAAkB,EAAEF,KAAK,CAACG;IAC5B,CAAC,CAAC;IACF,MAAMH,KAAK,CAACC,YAAY,CAAC5C,YAAY,CAACE,UAAU,EAAEmC,SAAS,CAAC;IAE5D,OAAOA,SAAS;EAClB;;EAEA;AACF;AACA;AACA;EACE,aAAaW,aAAaA,CAAA,EAA2B;IACnD,MAAML,KAAK,GAAG,MAAMxC,eAAe,CAAC,CAAC;IACrC,OAAOwC,KAAK,CAACM,YAAY,CAACjD,YAAY,CAACC,WAAW,CAAC;EACrD;;EAEA;AACF;AACA;EACE,aAAaiD,YAAYA,CAAA,EAA2B;IAClD,MAAMP,KAAK,GAAG,MAAMxC,eAAe,CAAC,CAAC;IACrC,OAAOwC,KAAK,CAACM,YAAY,CAACjD,YAAY,CAACE,UAAU,CAAC;EACpD;;EAEA;AACF;AACA;EACE,aAAaiD,WAAWA,CAAA,EAAqB;IAC3C,MAAMhB,UAAU,GAAG,MAAMJ,UAAU,CAACiB,aAAa,CAAC,CAAC;IACnD,OAAOb,UAAU,KAAK,IAAI;EAC5B;;EAEA;AACF;AACA;AACA;EACE,aAAaiB,cAAcA,CAAA,EAAkB;IAC3C,MAAMT,KAAK,GAAG,MAAMxC,eAAe,CAAC,CAAC;IACrC,MAAMwC,KAAK,CAACU,eAAe,CAACrD,YAAY,CAACC,WAAW,CAAC;IACrD,MAAM0C,KAAK,CAACU,eAAe,CAACrD,YAAY,CAACE,UAAU,CAAC;EACtD;;EAEA;AACF;AACA;AACA;EACE,aAAaoD,gBAAgBA,CAAA,EAA8B;IACzD,MAAMnB,UAAU,GAAG,MAAMJ,UAAU,CAACiB,aAAa,CAAC,CAAC;IACnD,IAAI,CAACb,UAAU,EAAE,OAAO,IAAI;IAC5B,OAAOvC,EAAE,CAAC6C,cAAc,CAACN,UAAU,CAAC;EACtC;;EAEA;AACF;AACA;EACE,OAAOoB,eAAeA,CAACpB,UAAkB,EAAU;IACjD,MAAMF,OAAO,GAAGrC,EAAE,CAAC6C,cAAc,CAACN,UAAU,CAAC;IAC7C,OAAOF,OAAO,CAACK,SAAS,CAAC,KAAK,CAAC;EACjC;;EAEA;AACF;AACA;EACE,OAAOkB,gBAAgBA,CAACnB,SAAiB,EAAW;IAClD,IAAI;MACFzC,EAAE,CAAC6D,aAAa,CAACpB,SAAS,EAAE,KAAK,CAAC;MAClC,OAAO,IAAI;IACb,CAAC,CAAC,MAAM;MACN,OAAO,KAAK;IACd;EACF;;EAEA;AACF;AACA;EACE,OAAOqB,iBAAiBA,CAACvB,UAAkB,EAAW;IACpD,IAAI;MACF,MAAMF,OAAO,GAAGrC,EAAE,CAAC6C,cAAc,CAACN,UAAU,CAAC;MAC7C;MACAF,OAAO,CAACK,SAAS,CAAC,KAAK,CAAC;MACxB,OAAO,IAAI;IACb,CAAC,CAAC,MAAM;MACN,OAAO,KAAK;IACd;EACF;;EAEA;AACF;AACA;AACA;EACE,OAAOqB,gBAAgBA,CAACtB,SAAiB,EAAU;IACjD,IAAIA,SAAS,CAACf,MAAM,IAAI,EAAE,EAAE,OAAOe,SAAS;IAC5C,OAAO,GAAGA,SAAS,CAACuB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAMvB,SAAS,CAACuB,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;EAC5D;AACF;AAEA,eAAe7B,UAAU","ignoreList":[]}
|
|
@@ -9,6 +9,20 @@
|
|
|
9
9
|
|
|
10
10
|
import * as bip39 from 'bip39';
|
|
11
11
|
import { KeyManager } from './keyManager';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Convert Buffer or Uint8Array to hexadecimal string
|
|
15
|
+
* Works in both Node.js and React Native
|
|
16
|
+
*/
|
|
17
|
+
function toHex(data) {
|
|
18
|
+
if (typeof data.toString === 'function' && data.toString.length === 1) {
|
|
19
|
+
// It's a Buffer with toString('hex') method (Node.js)
|
|
20
|
+
return data.toString('hex');
|
|
21
|
+
}
|
|
22
|
+
// It's a Uint8Array or array-like (React Native/browser)
|
|
23
|
+
const bytes = data instanceof Uint8Array ? data : new Uint8Array(data);
|
|
24
|
+
return Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join('');
|
|
25
|
+
}
|
|
12
26
|
export class RecoveryPhraseService {
|
|
13
27
|
/**
|
|
14
28
|
* Generate a new identity with a recovery phrase
|
|
@@ -23,7 +37,8 @@ export class RecoveryPhraseService {
|
|
|
23
37
|
const seed = await bip39.mnemonicToSeed(mnemonic);
|
|
24
38
|
|
|
25
39
|
// Use first 32 bytes of seed as private key
|
|
26
|
-
const
|
|
40
|
+
const seedSlice = seed.subarray ? seed.subarray(0, 32) : seed.slice(0, 32);
|
|
41
|
+
const privateKeyHex = toHex(seedSlice);
|
|
27
42
|
|
|
28
43
|
// Import the derived key pair
|
|
29
44
|
const publicKey = await KeyManager.importKeyPair(privateKeyHex);
|
|
@@ -41,7 +56,8 @@ export class RecoveryPhraseService {
|
|
|
41
56
|
// Generate 256-bit entropy for 24-word mnemonic
|
|
42
57
|
const mnemonic = bip39.generateMnemonic(256);
|
|
43
58
|
const seed = await bip39.mnemonicToSeed(mnemonic);
|
|
44
|
-
const
|
|
59
|
+
const seedSlice = seed.subarray ? seed.subarray(0, 32) : seed.slice(0, 32);
|
|
60
|
+
const privateKeyHex = toHex(seedSlice);
|
|
45
61
|
const publicKey = await KeyManager.importKeyPair(privateKeyHex);
|
|
46
62
|
return {
|
|
47
63
|
phrase: mnemonic,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["bip39","KeyManager","RecoveryPhraseService","generateIdentityWithRecovery","mnemonic","generateMnemonic","seed","mnemonicToSeed","
|
|
1
|
+
{"version":3,"names":["bip39","KeyManager","toHex","data","toString","length","bytes","Uint8Array","Array","from","map","b","padStart","join","RecoveryPhraseService","generateIdentityWithRecovery","mnemonic","generateMnemonic","seed","mnemonicToSeed","seedSlice","subarray","slice","privateKeyHex","publicKey","importKeyPair","phrase","words","split","generateIdentityWithRecovery24","restoreFromPhrase","normalizedPhrase","trim","toLowerCase","validateMnemonic","Error","validatePhrase","getWordList","wordlists","english","isValidWord","word","includes","getSuggestions","partial","limit","lowerPartial","filter","startsWith","derivePublicKeyFromPhrase","derivePublicKey","phraseToWords","wordsToPhrase","w"],"sourceRoot":"../../../src","sources":["crypto/recoveryPhrase.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyManager.d.ts","sourceRoot":"","sources":["../../../src/crypto/keyManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"keyManager.d.ts","sourceRoot":"","sources":["../../../src/crypto/keyManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAgF1C,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,UAAU;IACrB;;;OAGG;IACH,MAAM,CAAC,mBAAmB,IAAI,OAAO;IAQrC;;OAEG;WACU,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAWhD;;;OAGG;WACU,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAe9C;;OAEG;WACU,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgB/D;;;OAGG;WACU,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKpD;;OAEG;WACU,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKnD;;OAEG;WACU,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAK5C;;;OAGG;WACU,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5C;;;OAGG;WACU,gBAAgB,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAM1D;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAKlD;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IASnD;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAWrD;;;OAGG;IACH,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;CAInD;AAED,eAAe,UAAU,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recoveryPhrase.d.ts","sourceRoot":"","sources":["../../../src/crypto/recoveryPhrase.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"recoveryPhrase.d.ts","sourceRoot":"","sources":["../../../src/crypto/recoveryPhrase.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqBH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,qBAAqB;IAChC;;;OAGG;WACU,4BAA4B,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAsB1E;;OAEG;WACU,8BAA8B,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAgB5E;;OAEG;WACU,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkB/D;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAK9C;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,MAAM,EAAE;IAI9B;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIzC;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,MAAM,EAAE;IAOnE;;;OAGG;WACU,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAavE;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAI9C;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;CAG9C;AAED,eAAe,qBAAqB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oxyhq/services",
|
|
3
|
-
"version": "5.15.
|
|
3
|
+
"version": "5.15.4",
|
|
4
4
|
"description": "Reusable OxyHQ module to handle authentication, user management, karma system, device-based session management and more 🚀",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|
package/src/crypto/keyManager.ts
CHANGED
|
@@ -51,6 +51,16 @@ async function initExpoRandom(): Promise<typeof import('expo-random')> {
|
|
|
51
51
|
return ExpoRandom;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
+
/**
|
|
55
|
+
* Convert Uint8Array to hexadecimal string
|
|
56
|
+
* Works in both Node.js and React Native
|
|
57
|
+
*/
|
|
58
|
+
function uint8ArrayToHex(bytes: Uint8Array): string {
|
|
59
|
+
return Array.from(bytes)
|
|
60
|
+
.map(b => b.toString(16).padStart(2, '0'))
|
|
61
|
+
.join('');
|
|
62
|
+
}
|
|
63
|
+
|
|
54
64
|
/**
|
|
55
65
|
* Generate cryptographically secure random bytes
|
|
56
66
|
*/
|
|
@@ -99,7 +109,7 @@ export class KeyManager {
|
|
|
99
109
|
*/
|
|
100
110
|
static async generateKeyPair(): Promise<KeyPair> {
|
|
101
111
|
const randomBytes = await getSecureRandomBytes(32);
|
|
102
|
-
const privateKeyHex =
|
|
112
|
+
const privateKeyHex = uint8ArrayToHex(randomBytes);
|
|
103
113
|
const keyPair = ec.keyFromPrivate(privateKeyHex);
|
|
104
114
|
|
|
105
115
|
return {
|
|
@@ -8,6 +8,22 @@
|
|
|
8
8
|
import * as bip39 from 'bip39';
|
|
9
9
|
import { KeyManager } from './keyManager';
|
|
10
10
|
|
|
11
|
+
/**
|
|
12
|
+
* Convert Buffer or Uint8Array to hexadecimal string
|
|
13
|
+
* Works in both Node.js and React Native
|
|
14
|
+
*/
|
|
15
|
+
function toHex(data: Uint8Array | Buffer | ArrayLike<number>): string {
|
|
16
|
+
if (typeof (data as Buffer).toString === 'function' && (data as Buffer).toString.length === 1) {
|
|
17
|
+
// It's a Buffer with toString('hex') method (Node.js)
|
|
18
|
+
return (data as Buffer).toString('hex');
|
|
19
|
+
}
|
|
20
|
+
// It's a Uint8Array or array-like (React Native/browser)
|
|
21
|
+
const bytes = data instanceof Uint8Array ? data : new Uint8Array(data as ArrayLike<number>);
|
|
22
|
+
return Array.from(bytes)
|
|
23
|
+
.map(b => b.toString(16).padStart(2, '0'))
|
|
24
|
+
.join('');
|
|
25
|
+
}
|
|
26
|
+
|
|
11
27
|
export interface RecoveryPhraseResult {
|
|
12
28
|
phrase: string;
|
|
13
29
|
words: string[];
|
|
@@ -28,7 +44,8 @@ export class RecoveryPhraseService {
|
|
|
28
44
|
const seed = await bip39.mnemonicToSeed(mnemonic);
|
|
29
45
|
|
|
30
46
|
// Use first 32 bytes of seed as private key
|
|
31
|
-
const
|
|
47
|
+
const seedSlice = seed.subarray ? seed.subarray(0, 32) : seed.slice(0, 32);
|
|
48
|
+
const privateKeyHex = toHex(seedSlice);
|
|
32
49
|
|
|
33
50
|
// Import the derived key pair
|
|
34
51
|
const publicKey = await KeyManager.importKeyPair(privateKeyHex);
|
|
@@ -48,7 +65,8 @@ export class RecoveryPhraseService {
|
|
|
48
65
|
const mnemonic = bip39.generateMnemonic(256);
|
|
49
66
|
|
|
50
67
|
const seed = await bip39.mnemonicToSeed(mnemonic);
|
|
51
|
-
const
|
|
68
|
+
const seedSlice = seed.subarray ? seed.subarray(0, 32) : seed.slice(0, 32);
|
|
69
|
+
const privateKeyHex = toHex(seedSlice);
|
|
52
70
|
const publicKey = await KeyManager.importKeyPair(privateKeyHex);
|
|
53
71
|
|
|
54
72
|
return {
|