diff --git a/sea.js b/sea.js index 3030cd68..2d06f480 100644 --- a/sea.js +++ b/sea.js @@ -170,7 +170,7 @@ var o = {}; if(SEA.window){ - api.crypto = window.crypto || window.msCrypto || require('isomorphic-webcrypto'); + api.crypto = navigator && navigator.product === 'ReactNative' ? require('isomorphic-webcrypto') : window.crypto || window.msCrypto || require('isomorphic-webcrypto'); api.subtle = (api.crypto||o).subtle || (api.crypto||o).webkitSubtle; api.TextEncoder = window.TextEncoder; api.TextDecoder = window.TextDecoder; diff --git a/sea/pair.js b/sea/pair.js index 75e7f098..b01aad31 100644 --- a/sea/pair.js +++ b/sea/pair.js @@ -39,7 +39,7 @@ // Next: ECDH keys for encryption/decryption... try{ - var dh = await ecdhSubtle.generateKey({name: 'ECDH', namedCurve: 'P-256'};, true, ['deriveKey']) + var dh = await ecdhSubtle.generateKey({name: 'ECDH', namedCurve: 'P-256'}, true, ['deriveKey']) .then(async (keys) => { // privateKey scope doesn't leak out from here! var key = {}; diff --git a/sea/secret.js b/sea/secret.js index 5108707d..1e3e3272 100644 --- a/sea/secret.js +++ b/sea/secret.js @@ -13,7 +13,7 @@ var epriv = pair.epriv; var ecdhSubtle = shim.ossl || shim.subtle; var pubKeyData = keysToEcdhJwk(pub); - var props = Object.assign({ public: await ecdhSubtle.importKey(...pubKeyData, true, []) },{name: 'ECDH', namedCurve: 'P-256'};); // Thanks to @sirpy ! + var props = Object.assign({ public: await ecdhSubtle.importKey(...pubKeyData, true, []) },{name: 'ECDH', namedCurve: 'P-256'}); // Thanks to @sirpy ! var privKeyData = keysToEcdhJwk(epub, epriv); var derived = await ecdhSubtle.importKey(...privKeyData, false, ['deriveBits']).then(async (privKey) => { // privateKey scope doesn't leak out from here! @@ -44,7 +44,7 @@ jwk, { x: x, y: y, kty: 'EC', crv: 'P-256', ext: true } ), // ??? refactor - {name: 'ECDH', namedCurve: 'P-256'}; + {name: 'ECDH', namedCurve: 'P-256'} ] } diff --git a/sea/shim.js b/sea/shim.js index 42716477..66a69fbe 100644 --- a/sea/shim.js +++ b/sea/shim.js @@ -5,7 +5,7 @@ var o = {}; if(SEA.window){ - api.crypto = window.crypto || window.msCrypto || require('isomorphic-webcrypto'); + api.crypto = navigator && navigator.product === 'ReactNative' ? require('isomorphic-webcrypto') : window.crypto || window.msCrypto || require('isomorphic-webcrypto'); api.subtle = (api.crypto||o).subtle || (api.crypto||o).webkitSubtle; api.TextEncoder = window.TextEncoder; api.TextDecoder = window.TextDecoder;