@oxyhq/services 5.15.0 → 5.15.2
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 +21 -5
- package/lib/commonjs/crypto/keyManager.js.map +1 -1
- package/lib/commonjs/crypto/signatureService.js +26 -5
- package/lib/commonjs/crypto/signatureService.js.map +1 -1
- package/lib/module/crypto/keyManager.js +21 -5
- package/lib/module/crypto/keyManager.js.map +1 -1
- package/lib/module/crypto/signatureService.js +26 -5
- package/lib/module/crypto/signatureService.js.map +1 -1
- package/lib/typescript/crypto/keyManager.d.ts.map +1 -1
- package/lib/typescript/crypto/signatureService.d.ts +1 -0
- package/lib/typescript/crypto/signatureService.d.ts.map +1 -1
- package/lib/typescript/types/bip39.d.ts +1 -0
- package/lib/typescript/types/color.d.ts +1 -0
- package/lib/typescript/types/elliptic.d.ts +1 -0
- package/lib/typescript/types/expo-crypto.d.ts +1 -0
- package/lib/typescript/types/expo-random.d.ts +1 -0
- package/lib/typescript/types/expo-secure-store.d.ts +1 -0
- package/package.json +1 -1
- package/src/crypto/index.ts +1 -0
- package/src/crypto/keyManager.ts +22 -5
- package/src/crypto/recoveryPhrase.ts +1 -0
- package/src/crypto/signatureService.ts +27 -5
- package/src/types/bip39.d.ts +1 -0
- package/src/types/color.d.ts +1 -0
- package/src/types/elliptic.d.ts +1 -0
- package/src/types/expo-crypto.d.ts +1 -0
- package/src/types/expo-random.d.ts +1 -0
- package/src/types/expo-secure-store.d.ts +1 -0
- package/src/ui/screens/OxyAuthScreen.tsx +1 -0
|
@@ -30,6 +30,20 @@ async function initSecureStore() {
|
|
|
30
30
|
}
|
|
31
31
|
return SecureStore;
|
|
32
32
|
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Check if we're in a React Native environment
|
|
36
|
+
*/
|
|
37
|
+
function isReactNative() {
|
|
38
|
+
return typeof navigator !== 'undefined' && navigator.product === 'ReactNative';
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Check if we're in a Node.js environment
|
|
43
|
+
*/
|
|
44
|
+
function isNodeJS() {
|
|
45
|
+
return typeof process !== 'undefined' && process.versions != null && process.versions.node != null;
|
|
46
|
+
}
|
|
33
47
|
async function initExpoRandom() {
|
|
34
48
|
if (!ExpoRandom) {
|
|
35
49
|
ExpoRandom = await Promise.resolve().then(() => _interopRequireWildcard(require('expo-random')));
|
|
@@ -41,14 +55,16 @@ async function initExpoRandom() {
|
|
|
41
55
|
* Generate cryptographically secure random bytes
|
|
42
56
|
*/
|
|
43
57
|
async function getSecureRandomBytes(length) {
|
|
44
|
-
|
|
58
|
+
// In React Native, always use expo-random
|
|
59
|
+
if (isReactNative() || !isNodeJS()) {
|
|
45
60
|
const Random = await initExpoRandom();
|
|
46
61
|
return Random.getRandomBytes(length);
|
|
47
|
-
} catch {
|
|
48
|
-
// Fallback for Node.js environment
|
|
49
|
-
const crypto = await Promise.resolve().then(() => _interopRequireWildcard(require('crypto')));
|
|
50
|
-
return new Uint8Array(crypto.randomBytes(length));
|
|
51
62
|
}
|
|
63
|
+
|
|
64
|
+
// In Node.js, use Node's crypto module
|
|
65
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
66
|
+
const crypto = require('crypto');
|
|
67
|
+
return new Uint8Array(crypto.randomBytes(length));
|
|
52
68
|
}
|
|
53
69
|
class KeyManager {
|
|
54
70
|
/**
|
|
@@ -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","initExpoRandom","getSecureRandomBytes","length","Random","getRandomBytes","crypto","Uint8Array","randomBytes","KeyManager","generateKeyPairSync","keyPair","genKeyPair","privateKey","getPrivate","publicKey","getPublic","generateKeyPair","privateKeyHex","Buffer","from","toString","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":";;;;;;AAOA,IAAAA,SAAA,GAAAC,OAAA;AAAoC,SAAAC,wBAAAC,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAH,uBAAA,YAAAA,CAAAC,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA,KAPpC;AACA;AACA;AACA;AACA;AACA;AAKA;AACA,IAAIkB,WAAsD,GAAG,IAAI;AACjE,IAAIC,UAA+C,GAAG,IAAI;AAE1D,MAAMC,EAAE,GAAG,IAAIC,YAAE,CAAC,WAAW,CAAC;AAE9B,MAAMC,YAAY,GAAG;EACnBC,WAAW,EAAE,0BAA0B;EACvCC,UAAU,EAAE;AACd,CAAU;;AAEV;AACA;AACA;AACA;AACA,eAAeC,eAAeA,CAAA,EAAgD;EAC5E,IAAI,CAACP,WAAW,EAAE;IAChBA,WAAW,GAAG,MAAAQ,OAAA,CAAAC,OAAA,GAAAC,IAAA,OAAA9B,uBAAA,CAAAD,OAAA,CAAa,mBAAmB,GAAC;EACjD;EACA,OAAOqB,WAAW;AACpB;AAEA,
|
|
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","crypto","Uint8Array","randomBytes","KeyManager","generateKeyPairSync","keyPair","genKeyPair","privateKey","getPrivate","publicKey","getPublic","generateKeyPair","privateKeyHex","Buffer","from","toString","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":[]}
|
|
@@ -16,6 +16,20 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
|
|
|
16
16
|
let ExpoCrypto = null;
|
|
17
17
|
const ec = new _elliptic.ec('secp256k1');
|
|
18
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Check if we're in a React Native environment
|
|
21
|
+
*/
|
|
22
|
+
function isReactNative() {
|
|
23
|
+
return typeof navigator !== 'undefined' && navigator.product === 'ReactNative';
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Check if we're in a Node.js environment
|
|
28
|
+
*/
|
|
29
|
+
function isNodeJS() {
|
|
30
|
+
return typeof process !== 'undefined' && process.versions != null && process.versions.node != null;
|
|
31
|
+
}
|
|
32
|
+
|
|
19
33
|
/**
|
|
20
34
|
* Initialize expo-crypto module
|
|
21
35
|
*/
|
|
@@ -30,14 +44,16 @@ async function initExpoCrypto() {
|
|
|
30
44
|
* Compute SHA-256 hash of a string
|
|
31
45
|
*/
|
|
32
46
|
async function sha256(message) {
|
|
33
|
-
|
|
47
|
+
// In React Native, always use expo-crypto
|
|
48
|
+
if (isReactNative() || !isNodeJS()) {
|
|
34
49
|
const Crypto = await initExpoCrypto();
|
|
35
50
|
return Crypto.digestStringAsync(Crypto.CryptoDigestAlgorithm.SHA256, message);
|
|
36
|
-
} catch {
|
|
37
|
-
// Fallback for Node.js environment
|
|
38
|
-
const crypto = await Promise.resolve().then(() => _interopRequireWildcard(require('crypto')));
|
|
39
|
-
return crypto.createHash('sha256').update(message).digest('hex');
|
|
40
51
|
}
|
|
52
|
+
|
|
53
|
+
// In Node.js, use Node's crypto module
|
|
54
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
55
|
+
const crypto = require('crypto');
|
|
56
|
+
return crypto.createHash('sha256').update(message).digest('hex');
|
|
41
57
|
}
|
|
42
58
|
class SignatureService {
|
|
43
59
|
/**
|
|
@@ -88,9 +104,14 @@ class SignatureService {
|
|
|
88
104
|
/**
|
|
89
105
|
* Synchronous verification (for Node.js backend)
|
|
90
106
|
* Uses crypto module directly for hashing
|
|
107
|
+
* Note: This method should only be used in Node.js environments
|
|
91
108
|
*/
|
|
92
109
|
static verifySync(message, signature, publicKey) {
|
|
93
110
|
try {
|
|
111
|
+
if (!isNodeJS()) {
|
|
112
|
+
// In React Native, use async verify instead
|
|
113
|
+
throw new Error('verifySync should only be used in Node.js. Use verify() in React Native.');
|
|
114
|
+
}
|
|
94
115
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
95
116
|
const crypto = require('crypto');
|
|
96
117
|
const key = ec.keyFromPublic(publicKey, 'hex');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_elliptic","require","_keyManager","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ExpoCrypto","ec","EC","initExpoCrypto","Promise","resolve","then","sha256","message","Crypto","digestStringAsync","CryptoDigestAlgorithm","SHA256","crypto","createHash","update","digest","SignatureService","hashMessage","sign","keyPair","KeyManager","getKeyPairObject","Error","messageHash","signature","toDER","signWithKey","privateKey","keyFromPrivate","verify","publicKey","key","keyFromPublic","verifySync","createSignedMessage","getPublicKey","timestamp","Date","now","messageWithTimestamp","verifySignedMessage","signedMessage","maxAgeMs","signChallenge","challenge","verifyChallengeResponse","originalChallenge","response","createRegistrationSignature","username","email","signRequestData","data","sortedKeys","keys","sort","canonicalParts","map","JSON","stringify","canonicalString","join","exports","_default"],"sourceRoot":"../../../src","sources":["crypto/signatureService.ts"],"mappings":";;;;;;AAOA,IAAAA,SAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AAA0C,SAAAE,wBAAAC,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAH,uBAAA,YAAAA,CAAAC,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA,KAR1C;AACA;AACA;AACA;AACA;AACA;AAKA;AACA,IAAIkB,UAA+C,GAAG,IAAI;AAE1D,MAAMC,EAAE,GAAG,IAAIC,YAAE,CAAC,WAAW,CAAC;;AAE9B;AACA;AACA;AACA,eAAeC,cAAcA,CAAA,EAA0C;EACrE,IAAI,
|
|
1
|
+
{"version":3,"names":["_elliptic","require","_keyManager","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ExpoCrypto","ec","EC","isReactNative","navigator","product","isNodeJS","process","versions","node","initExpoCrypto","Promise","resolve","then","sha256","message","Crypto","digestStringAsync","CryptoDigestAlgorithm","SHA256","crypto","createHash","update","digest","SignatureService","hashMessage","sign","keyPair","KeyManager","getKeyPairObject","Error","messageHash","signature","toDER","signWithKey","privateKey","keyFromPrivate","verify","publicKey","key","keyFromPublic","verifySync","createSignedMessage","getPublicKey","timestamp","Date","now","messageWithTimestamp","verifySignedMessage","signedMessage","maxAgeMs","signChallenge","challenge","verifyChallengeResponse","originalChallenge","response","createRegistrationSignature","username","email","signRequestData","data","sortedKeys","keys","sort","canonicalParts","map","JSON","stringify","canonicalString","join","exports","_default"],"sourceRoot":"../../../src","sources":["crypto/signatureService.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -27,6 +27,20 @@ async function initSecureStore() {
|
|
|
27
27
|
}
|
|
28
28
|
return SecureStore;
|
|
29
29
|
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Check if we're in a React Native environment
|
|
33
|
+
*/
|
|
34
|
+
function isReactNative() {
|
|
35
|
+
return typeof navigator !== 'undefined' && navigator.product === 'ReactNative';
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Check if we're in a Node.js environment
|
|
40
|
+
*/
|
|
41
|
+
function isNodeJS() {
|
|
42
|
+
return typeof process !== 'undefined' && process.versions != null && process.versions.node != null;
|
|
43
|
+
}
|
|
30
44
|
async function initExpoRandom() {
|
|
31
45
|
if (!ExpoRandom) {
|
|
32
46
|
ExpoRandom = await import('expo-random');
|
|
@@ -38,14 +52,16 @@ async function initExpoRandom() {
|
|
|
38
52
|
* Generate cryptographically secure random bytes
|
|
39
53
|
*/
|
|
40
54
|
async function getSecureRandomBytes(length) {
|
|
41
|
-
|
|
55
|
+
// In React Native, always use expo-random
|
|
56
|
+
if (isReactNative() || !isNodeJS()) {
|
|
42
57
|
const Random = await initExpoRandom();
|
|
43
58
|
return Random.getRandomBytes(length);
|
|
44
|
-
} catch {
|
|
45
|
-
// Fallback for Node.js environment
|
|
46
|
-
const crypto = await import('crypto');
|
|
47
|
-
return new Uint8Array(crypto.randomBytes(length));
|
|
48
59
|
}
|
|
60
|
+
|
|
61
|
+
// In Node.js, use Node's crypto module
|
|
62
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
63
|
+
const crypto = require('crypto');
|
|
64
|
+
return new Uint8Array(crypto.randomBytes(length));
|
|
49
65
|
}
|
|
50
66
|
export class KeyManager {
|
|
51
67
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ec","EC","SecureStore","ExpoRandom","STORAGE_KEYS","PRIVATE_KEY","PUBLIC_KEY","initSecureStore","initExpoRandom","getSecureRandomBytes","length","Random","getRandomBytes","crypto","Uint8Array","randomBytes","KeyManager","generateKeyPairSync","keyPair","genKeyPair","privateKey","getPrivate","publicKey","getPublic","generateKeyPair","privateKeyHex","Buffer","from","toString","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,
|
|
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","crypto","require","Uint8Array","randomBytes","KeyManager","generateKeyPairSync","keyPair","genKeyPair","privateKey","getPrivate","publicKey","getPublic","generateKeyPair","privateKeyHex","Buffer","from","toString","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":"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","ignoreList":[]}
|
|
@@ -14,6 +14,20 @@ import { KeyManager } from './keyManager';
|
|
|
14
14
|
let ExpoCrypto = null;
|
|
15
15
|
const ec = new EC('secp256k1');
|
|
16
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Check if we're in a React Native environment
|
|
19
|
+
*/
|
|
20
|
+
function isReactNative() {
|
|
21
|
+
return typeof navigator !== 'undefined' && navigator.product === 'ReactNative';
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Check if we're in a Node.js environment
|
|
26
|
+
*/
|
|
27
|
+
function isNodeJS() {
|
|
28
|
+
return typeof process !== 'undefined' && process.versions != null && process.versions.node != null;
|
|
29
|
+
}
|
|
30
|
+
|
|
17
31
|
/**
|
|
18
32
|
* Initialize expo-crypto module
|
|
19
33
|
*/
|
|
@@ -28,14 +42,16 @@ async function initExpoCrypto() {
|
|
|
28
42
|
* Compute SHA-256 hash of a string
|
|
29
43
|
*/
|
|
30
44
|
async function sha256(message) {
|
|
31
|
-
|
|
45
|
+
// In React Native, always use expo-crypto
|
|
46
|
+
if (isReactNative() || !isNodeJS()) {
|
|
32
47
|
const Crypto = await initExpoCrypto();
|
|
33
48
|
return Crypto.digestStringAsync(Crypto.CryptoDigestAlgorithm.SHA256, message);
|
|
34
|
-
} catch {
|
|
35
|
-
// Fallback for Node.js environment
|
|
36
|
-
const crypto = await import('crypto');
|
|
37
|
-
return crypto.createHash('sha256').update(message).digest('hex');
|
|
38
49
|
}
|
|
50
|
+
|
|
51
|
+
// In Node.js, use Node's crypto module
|
|
52
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
53
|
+
const crypto = require('crypto');
|
|
54
|
+
return crypto.createHash('sha256').update(message).digest('hex');
|
|
39
55
|
}
|
|
40
56
|
export class SignatureService {
|
|
41
57
|
/**
|
|
@@ -86,9 +102,14 @@ export class SignatureService {
|
|
|
86
102
|
/**
|
|
87
103
|
* Synchronous verification (for Node.js backend)
|
|
88
104
|
* Uses crypto module directly for hashing
|
|
105
|
+
* Note: This method should only be used in Node.js environments
|
|
89
106
|
*/
|
|
90
107
|
static verifySync(message, signature, publicKey) {
|
|
91
108
|
try {
|
|
109
|
+
if (!isNodeJS()) {
|
|
110
|
+
// In React Native, use async verify instead
|
|
111
|
+
throw new Error('verifySync should only be used in Node.js. Use verify() in React Native.');
|
|
112
|
+
}
|
|
92
113
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
93
114
|
const crypto = require('crypto');
|
|
94
115
|
const key = ec.keyFromPublic(publicKey, 'hex');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ec","EC","KeyManager","ExpoCrypto","initExpoCrypto","sha256","message","Crypto","digestStringAsync","CryptoDigestAlgorithm","SHA256","crypto","createHash","update","digest","SignatureService","hashMessage","sign","keyPair","getKeyPairObject","Error","messageHash","signature","toDER","signWithKey","privateKey","keyFromPrivate","verify","publicKey","key","keyFromPublic","verifySync","
|
|
1
|
+
{"version":3,"names":["ec","EC","KeyManager","ExpoCrypto","isReactNative","navigator","product","isNodeJS","process","versions","node","initExpoCrypto","sha256","message","Crypto","digestStringAsync","CryptoDigestAlgorithm","SHA256","crypto","require","createHash","update","digest","SignatureService","hashMessage","sign","keyPair","getKeyPairObject","Error","messageHash","signature","toDER","signWithKey","privateKey","keyFromPrivate","verify","publicKey","key","keyFromPublic","verifySync","createSignedMessage","getPublicKey","timestamp","Date","now","messageWithTimestamp","verifySignedMessage","signedMessage","maxAgeMs","signChallenge","challenge","verifyChallengeResponse","originalChallenge","response","createRegistrationSignature","username","email","signRequestData","data","sortedKeys","Object","keys","sort","canonicalParts","map","JSON","stringify","canonicalString","join"],"sourceRoot":"../../../src","sources":["crypto/signatureService.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,EAAE,IAAIC,EAAE,QAAQ,UAAU;AACnC,SAASC,UAAU,QAAQ,cAAc;;AAEzC;AACA,IAAIC,UAA+C,GAAG,IAAI;AAE1D,MAAMH,EAAE,GAAG,IAAIC,EAAE,CAAC,WAAW,CAAC;;AAE9B;AACA;AACA;AACA,SAASG,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;AACA;AACA;AACA,eAAeC,cAAcA,CAAA,EAA0C;EACrE,IAAI,CAACR,UAAU,EAAE;IACfA,UAAU,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC;EAC1C;EACA,OAAOA,UAAU;AACnB;;AAEA;AACA;AACA;AACA,eAAeS,MAAMA,CAACC,OAAe,EAAmB;EACtD;EACA,IAAIT,aAAa,CAAC,CAAC,IAAI,CAACG,QAAQ,CAAC,CAAC,EAAE;IAClC,MAAMO,MAAM,GAAG,MAAMH,cAAc,CAAC,CAAC;IACrC,OAAOG,MAAM,CAACC,iBAAiB,CAC7BD,MAAM,CAACE,qBAAqB,CAACC,MAAM,EACnCJ,OACF,CAAC;EACH;;EAEA;EACA;EACA,MAAMK,MAAM,GAAGC,OAAO,CAAC,QAAQ,CAAC;EAChC,OAAOD,MAAM,CAACE,UAAU,CAAC,QAAQ,CAAC,CAACC,MAAM,CAACR,OAAO,CAAC,CAACS,MAAM,CAAC,KAAK,CAAC;AAClE;AAeA,OAAO,MAAMC,gBAAgB,CAAC;EAC5B;AACF;AACA;EACE,aAAaC,WAAWA,CAACX,OAAe,EAAmB;IACzD,OAAOD,MAAM,CAACC,OAAO,CAAC;EACxB;;EAEA;AACF;AACA;AACA;EACE,aAAaY,IAAIA,CAACZ,OAAe,EAAmB;IAClD,MAAMa,OAAO,GAAG,MAAMxB,UAAU,CAACyB,gBAAgB,CAAC,CAAC;IACnD,IAAI,CAACD,OAAO,EAAE;MACZ,MAAM,IAAIE,KAAK,CAAC,+DAA+D,CAAC;IAClF;IAEA,MAAMC,WAAW,GAAG,MAAMjB,MAAM,CAACC,OAAO,CAAC;IACzC,MAAMiB,SAAS,GAAGJ,OAAO,CAACD,IAAI,CAACI,WAAW,CAAC;IAC3C,OAAOC,SAAS,CAACC,KAAK,CAAC,KAAK,CAAC;EAC/B;;EAEA;AACF;AACA;AACA;EACE,aAAaC,WAAWA,CAACnB,OAAe,EAAEoB,UAAkB,EAAmB;IAC7E,MAAMP,OAAO,GAAG1B,EAAE,CAACkC,cAAc,CAACD,UAAU,CAAC;IAC7C,MAAMJ,WAAW,GAAG,MAAMjB,MAAM,CAACC,OAAO,CAAC;IACzC,MAAMiB,SAAS,GAAGJ,OAAO,CAACD,IAAI,CAACI,WAAW,CAAC;IAC3C,OAAOC,SAAS,CAACC,KAAK,CAAC,KAAK,CAAC;EAC/B;;EAEA;AACF;AACA;EACE,aAAaI,MAAMA,CAACtB,OAAe,EAAEiB,SAAiB,EAAEM,SAAiB,EAAoB;IAC3F,IAAI;MACF,MAAMC,GAAG,GAAGrC,EAAE,CAACsC,aAAa,CAACF,SAAS,EAAE,KAAK,CAAC;MAC9C,MAAMP,WAAW,GAAG,MAAMjB,MAAM,CAACC,OAAO,CAAC;MACzC,OAAOwB,GAAG,CAACF,MAAM,CAACN,WAAW,EAAEC,SAAS,CAAC;IAC3C,CAAC,CAAC,MAAM;MACN,OAAO,KAAK;IACd;EACF;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOS,UAAUA,CAAC1B,OAAe,EAAEiB,SAAiB,EAAEM,SAAiB,EAAW;IAChF,IAAI;MACF,IAAI,CAAC7B,QAAQ,CAAC,CAAC,EAAE;QACf;QACA,MAAM,IAAIqB,KAAK,CAAC,0EAA0E,CAAC;MAC7F;MACA;MACA,MAAMV,MAAM,GAAGC,OAAO,CAAC,QAAQ,CAAC;MAChC,MAAMkB,GAAG,GAAGrC,EAAE,CAACsC,aAAa,CAACF,SAAS,EAAE,KAAK,CAAC;MAC9C,MAAMP,WAAW,GAAGX,MAAM,CAACE,UAAU,CAAC,QAAQ,CAAC,CAACC,MAAM,CAACR,OAAO,CAAC,CAACS,MAAM,CAAC,KAAK,CAAC;MAC7E,OAAOe,GAAG,CAACF,MAAM,CAACN,WAAW,EAAEC,SAAS,CAAC;IAC3C,CAAC,CAAC,MAAM;MACN,OAAO,KAAK;IACd;EACF;;EAEA;AACF;AACA;EACE,aAAaU,mBAAmBA,CAAC3B,OAAe,EAA0B;IACxE,MAAMuB,SAAS,GAAG,MAAMlC,UAAU,CAACuC,YAAY,CAAC,CAAC;IACjD,IAAI,CAACL,SAAS,EAAE;MACd,MAAM,IAAIR,KAAK,CAAC,+DAA+D,CAAC;IAClF;IAEA,MAAMc,SAAS,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;IAC5B,MAAMC,oBAAoB,GAAG,GAAGhC,OAAO,IAAI6B,SAAS,EAAE;IACtD,MAAMZ,SAAS,GAAG,MAAMP,gBAAgB,CAACE,IAAI,CAACoB,oBAAoB,CAAC;IAEnE,OAAO;MACLhC,OAAO;MACPiB,SAAS;MACTM,SAAS;MACTM;IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;EACE,aAAaI,mBAAmBA,CAC9BC,aAA4B,EAC5BC,QAAgB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;EAAA,EACf;IAClB,MAAM;MAAEnC,OAAO;MAAEiB,SAAS;MAAEM,SAAS;MAAEM;IAAU,CAAC,GAAGK,aAAa;;IAElE;IACA,MAAMH,GAAG,GAAGD,IAAI,CAACC,GAAG,CAAC,CAAC;IACtB,IAAIA,GAAG,GAAGF,SAAS,GAAGM,QAAQ,EAAE;MAC9B,OAAO,KAAK;IACd;;IAEA;IACA,MAAMH,oBAAoB,GAAG,GAAGhC,OAAO,IAAI6B,SAAS,EAAE;IACtD,OAAOnB,gBAAgB,CAACY,MAAM,CAACU,oBAAoB,EAAEf,SAAS,EAAEM,SAAS,CAAC;EAC5E;;EAEA;AACF;AACA;AACA;EACE,aAAaa,aAAaA,CAACC,SAAiB,EAA0B;IACpE,MAAMd,SAAS,GAAG,MAAMlC,UAAU,CAACuC,YAAY,CAAC,CAAC;IACjD,IAAI,CAACL,SAAS,EAAE;MACd,MAAM,IAAIR,KAAK,CAAC,+DAA+D,CAAC;IAClF;IAEA,MAAMc,SAAS,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;IAC5B,MAAM/B,OAAO,GAAG,QAAQuB,SAAS,IAAIc,SAAS,IAAIR,SAAS,EAAE;IAC7D,MAAMZ,SAAS,GAAG,MAAMP,gBAAgB,CAACE,IAAI,CAACZ,OAAO,CAAC;IAEtD,OAAO;MACLqC,SAAS,EAAEpB,SAAS;MACpBM,SAAS;MACTM;IACF,CAAC;EACH;;EAEA;AACF;AACA;EACE,aAAaS,uBAAuBA,CAClCC,iBAAyB,EACzBC,QAAuB,EACvBL,QAAgB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,EACd;IAClB,MAAM;MAAEE,SAAS,EAAEpB,SAAS;MAAEM,SAAS;MAAEM;IAAU,CAAC,GAAGW,QAAQ;;IAE/D;IACA,MAAMT,GAAG,GAAGD,IAAI,CAACC,GAAG,CAAC,CAAC;IACtB,IAAIA,GAAG,GAAGF,SAAS,GAAGM,QAAQ,EAAE;MAC9B,OAAO,KAAK;IACd;IAEA,MAAMnC,OAAO,GAAG,QAAQuB,SAAS,IAAIgB,iBAAiB,IAAIV,SAAS,EAAE;IACrE,OAAOnB,gBAAgB,CAACY,MAAM,CAACtB,OAAO,EAAEiB,SAAS,EAAEM,SAAS,CAAC;EAC/D;;EAEA;AACF;AACA;AACA;EACE,aAAakB,2BAA2BA,CACtCC,QAAgB,EAChBC,KAAc,EACwD;IACtE,MAAMpB,SAAS,GAAG,MAAMlC,UAAU,CAACuC,YAAY,CAAC,CAAC;IACjD,IAAI,CAACL,SAAS,EAAE;MACd,MAAM,IAAIR,KAAK,CAAC,+DAA+D,CAAC;IAClF;IAEA,MAAMc,SAAS,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;IAC5B,MAAM/B,OAAO,GAAG,YAAYuB,SAAS,IAAImB,QAAQ,IAAIC,KAAK,IAAI,EAAE,IAAId,SAAS,EAAE;IAC/E,MAAMZ,SAAS,GAAG,MAAMP,gBAAgB,CAACE,IAAI,CAACZ,OAAO,CAAC;IAEtD,OAAO;MACLiB,SAAS;MACTM,SAAS;MACTM;IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;EACE,aAAae,eAAeA,CAACC,IAA6B,EAIvD;IACD,MAAMtB,SAAS,GAAG,MAAMlC,UAAU,CAACuC,YAAY,CAAC,CAAC;IACjD,IAAI,CAACL,SAAS,EAAE;MACd,MAAM,IAAIR,KAAK,CAAC,+DAA+D,CAAC;IAClF;IAEA,MAAMc,SAAS,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;;IAE5B;IACA,MAAMe,UAAU,GAAGC,MAAM,CAACC,IAAI,CAACH,IAAI,CAAC,CAACI,IAAI,CAAC,CAAC;IAC3C,MAAMC,cAAc,GAAGJ,UAAU,CAACK,GAAG,CAAC3B,GAAG,IAAI,GAAGA,GAAG,IAAI4B,IAAI,CAACC,SAAS,CAACR,IAAI,CAACrB,GAAG,CAAC,CAAC,EAAE,CAAC;IACnF,MAAM8B,eAAe,GAAGJ,cAAc,CAACK,IAAI,CAAC,GAAG,CAAC;IAEhD,MAAMvD,OAAO,GAAG,WAAWuB,SAAS,IAAIM,SAAS,IAAIyB,eAAe,EAAE;IACtE,MAAMrC,SAAS,GAAG,MAAMP,gBAAgB,CAACE,IAAI,CAACZ,OAAO,CAAC;IAEtD,OAAO;MACLiB,SAAS;MACTM,SAAS;MACTM;IACF,CAAC;EACH;AACF;AAEA,eAAenB,gBAAgB","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;AA6D1C,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"}
|
|
@@ -37,6 +37,7 @@ export declare class SignatureService {
|
|
|
37
37
|
/**
|
|
38
38
|
* Synchronous verification (for Node.js backend)
|
|
39
39
|
* Uses crypto module directly for hashing
|
|
40
|
+
* Note: This method should only be used in Node.js environments
|
|
40
41
|
*/
|
|
41
42
|
static verifySync(message: string, signature: string, publicKey: string): boolean;
|
|
42
43
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signatureService.d.ts","sourceRoot":"","sources":["../../../src/crypto/signatureService.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"signatureService.d.ts","sourceRoot":"","sources":["../../../src/crypto/signatureService.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqDH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,gBAAgB;IAC3B;;OAEG;WACU,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI1D;;;OAGG;WACU,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAWnD;;;OAGG;WACU,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAO9E;;OAEG;WACU,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU5F;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAgBjF;;OAEG;WACU,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAkBzE;;;OAGG;WACU,mBAAmB,CAC9B,aAAa,EAAE,aAAa,EAC5B,QAAQ,GAAE,MAAsB,GAC/B,OAAO,CAAC,OAAO,CAAC;IAcnB;;;OAGG;WACU,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAiBrE;;OAEG;WACU,uBAAuB,CAClC,iBAAiB,EAAE,MAAM,EACzB,QAAQ,EAAE,aAAa,EACvB,QAAQ,GAAE,MAAsB,GAC/B,OAAO,CAAC,OAAO,CAAC;IAanB;;;OAGG;WACU,2BAA2B,CACtC,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAiBvE;;;OAGG;WACU,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;QACnE,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CAsBH;AAED,eAAe,gBAAgB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oxyhq/services",
|
|
3
|
-
"version": "5.15.
|
|
3
|
+
"version": "5.15.2",
|
|
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/index.ts
CHANGED
package/src/crypto/keyManager.ts
CHANGED
|
@@ -30,6 +30,20 @@ async function initSecureStore(): Promise<typeof import('expo-secure-store')> {
|
|
|
30
30
|
return SecureStore;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
/**
|
|
34
|
+
* Check if we're in a React Native environment
|
|
35
|
+
*/
|
|
36
|
+
function isReactNative(): boolean {
|
|
37
|
+
return typeof navigator !== 'undefined' && navigator.product === 'ReactNative';
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Check if we're in a Node.js environment
|
|
42
|
+
*/
|
|
43
|
+
function isNodeJS(): boolean {
|
|
44
|
+
return typeof process !== 'undefined' && process.versions != null && process.versions.node != null;
|
|
45
|
+
}
|
|
46
|
+
|
|
33
47
|
async function initExpoRandom(): Promise<typeof import('expo-random')> {
|
|
34
48
|
if (!ExpoRandom) {
|
|
35
49
|
ExpoRandom = await import('expo-random');
|
|
@@ -41,14 +55,16 @@ async function initExpoRandom(): Promise<typeof import('expo-random')> {
|
|
|
41
55
|
* Generate cryptographically secure random bytes
|
|
42
56
|
*/
|
|
43
57
|
async function getSecureRandomBytes(length: number): Promise<Uint8Array> {
|
|
44
|
-
|
|
58
|
+
// In React Native, always use expo-random
|
|
59
|
+
if (isReactNative() || !isNodeJS()) {
|
|
45
60
|
const Random = await initExpoRandom();
|
|
46
61
|
return Random.getRandomBytes(length);
|
|
47
|
-
} catch {
|
|
48
|
-
// Fallback for Node.js environment
|
|
49
|
-
const crypto = await import('crypto');
|
|
50
|
-
return new Uint8Array(crypto.randomBytes(length));
|
|
51
62
|
}
|
|
63
|
+
|
|
64
|
+
// In Node.js, use Node's crypto module
|
|
65
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
66
|
+
const crypto = require('crypto');
|
|
67
|
+
return new Uint8Array(crypto.randomBytes(length));
|
|
52
68
|
}
|
|
53
69
|
|
|
54
70
|
export interface KeyPair {
|
|
@@ -211,3 +227,4 @@ export class KeyManager {
|
|
|
211
227
|
}
|
|
212
228
|
|
|
213
229
|
export default KeyManager;
|
|
230
|
+
|
|
@@ -13,6 +13,20 @@ let ExpoCrypto: typeof import('expo-crypto') | null = null;
|
|
|
13
13
|
|
|
14
14
|
const ec = new EC('secp256k1');
|
|
15
15
|
|
|
16
|
+
/**
|
|
17
|
+
* Check if we're in a React Native environment
|
|
18
|
+
*/
|
|
19
|
+
function isReactNative(): boolean {
|
|
20
|
+
return typeof navigator !== 'undefined' && navigator.product === 'ReactNative';
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Check if we're in a Node.js environment
|
|
25
|
+
*/
|
|
26
|
+
function isNodeJS(): boolean {
|
|
27
|
+
return typeof process !== 'undefined' && process.versions != null && process.versions.node != null;
|
|
28
|
+
}
|
|
29
|
+
|
|
16
30
|
/**
|
|
17
31
|
* Initialize expo-crypto module
|
|
18
32
|
*/
|
|
@@ -27,17 +41,19 @@ async function initExpoCrypto(): Promise<typeof import('expo-crypto')> {
|
|
|
27
41
|
* Compute SHA-256 hash of a string
|
|
28
42
|
*/
|
|
29
43
|
async function sha256(message: string): Promise<string> {
|
|
30
|
-
|
|
44
|
+
// In React Native, always use expo-crypto
|
|
45
|
+
if (isReactNative() || !isNodeJS()) {
|
|
31
46
|
const Crypto = await initExpoCrypto();
|
|
32
47
|
return Crypto.digestStringAsync(
|
|
33
48
|
Crypto.CryptoDigestAlgorithm.SHA256,
|
|
34
49
|
message
|
|
35
50
|
);
|
|
36
|
-
} catch {
|
|
37
|
-
// Fallback for Node.js environment
|
|
38
|
-
const crypto = await import('crypto');
|
|
39
|
-
return crypto.createHash('sha256').update(message).digest('hex');
|
|
40
51
|
}
|
|
52
|
+
|
|
53
|
+
// In Node.js, use Node's crypto module
|
|
54
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
55
|
+
const crypto = require('crypto');
|
|
56
|
+
return crypto.createHash('sha256').update(message).digest('hex');
|
|
41
57
|
}
|
|
42
58
|
|
|
43
59
|
export interface SignedMessage {
|
|
@@ -103,9 +119,14 @@ export class SignatureService {
|
|
|
103
119
|
/**
|
|
104
120
|
* Synchronous verification (for Node.js backend)
|
|
105
121
|
* Uses crypto module directly for hashing
|
|
122
|
+
* Note: This method should only be used in Node.js environments
|
|
106
123
|
*/
|
|
107
124
|
static verifySync(message: string, signature: string, publicKey: string): boolean {
|
|
108
125
|
try {
|
|
126
|
+
if (!isNodeJS()) {
|
|
127
|
+
// In React Native, use async verify instead
|
|
128
|
+
throw new Error('verifySync should only be used in Node.js. Use verify() in React Native.');
|
|
129
|
+
}
|
|
109
130
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
110
131
|
const crypto = require('crypto');
|
|
111
132
|
const key = ec.keyFromPublic(publicKey, 'hex');
|
|
@@ -256,3 +277,4 @@ export class SignatureService {
|
|
|
256
277
|
}
|
|
257
278
|
|
|
258
279
|
export default SignatureService;
|
|
280
|
+
|
package/src/types/bip39.d.ts
CHANGED
package/src/types/color.d.ts
CHANGED
package/src/types/elliptic.d.ts
CHANGED