From 25f7582a5e7847da18a371fe7c43770a85e879c8 Mon Sep 17 00:00:00 2001 From: mhelander Date: Fri, 19 Jan 2018 08:00:54 +0200 Subject: [PATCH 1/3] Added Uint8Array conversion to subtle calls to beat the darn stupid API's --- sea.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sea.js b/sea.js index 13035810..0af26a13 100644 --- a/sea.js +++ b/sea.js @@ -21,7 +21,9 @@ if(typeof window !== 'undefined'){ var wc = window.crypto || window.msCrypto; // STD or M$ subtle = wc.subtle || wc.webkitSubtle; // STD or iSafari - getRandomBytes = function(len){ return wc.getRandomValues(Buffer.alloc(len)) }; + getRandomBytes = function(len){ + return wc.getRandomValues(new UInt8Array(Buffer.alloc(len))); + }; TextEncoder = window.TextEncoder; TextDecoder = window.TextDecoder; sessionStorage = window.sessionStorage; @@ -1192,7 +1194,7 @@ subtle.importKey('jwk', keystoecdsajwk(p), ecdsakeyprops, false, ['verify']) .then(function(key){ sha256hash(m).then(function(mm){ - subtle.verify(ecdsasignprops, key, Buffer.from(s, 'base64'), mm) + subtle.verify(ecdsasignprops, key, new Uint8Array(Buffer.from(s, 'base64')), mm) .then(function(v){ resolve(v) }) .catch(function(e){ Gun.log(e); reject(e) }); }); From 5b655ffbfbfd9f7dfaec4008f6cb5eb4d21b9800 Mon Sep 17 00:00:00 2001 From: mhelander Date: Fri, 19 Jan 2018 21:47:13 +0200 Subject: [PATCH 2/3] More Uint8Array conversions to subtle calls & fix one UInt8Array typo --- sea.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sea.js b/sea.js index 0af26a13..3c8e25a5 100644 --- a/sea.js +++ b/sea.js @@ -22,7 +22,7 @@ var wc = window.crypto || window.msCrypto; // STD or M$ subtle = wc.subtle || wc.webkitSubtle; // STD or iSafari getRandomBytes = function(len){ - return wc.getRandomValues(new UInt8Array(Buffer.alloc(len))); + return wc.getRandomValues(new Uint8Array(Buffer.alloc(len))); }; TextEncoder = window.TextEncoder; TextDecoder = window.TextDecoder; @@ -541,7 +541,7 @@ .then(function(hashedKey){ return subtle.importKey( 'raw', - hashedKey, + new Uint8Array(hashedKey), 'AES-CBC', false, o @@ -1194,7 +1194,7 @@ subtle.importKey('jwk', keystoecdsajwk(p), ecdsakeyprops, false, ['verify']) .then(function(key){ sha256hash(m).then(function(mm){ - subtle.verify(ecdsasignprops, key, new Uint8Array(Buffer.from(s, 'base64')), mm) + subtle.verify(ecdsasignprops, key, new Uint8Array(Buffer.from(s, 'base64')), new Uint8Array(mm)) .then(function(v){ resolve(v) }) .catch(function(e){ Gun.log(e); reject(e) }); }); From a4cdf4ab532715e3efb9cd289b8144e5932833a1 Mon Sep 17 00:00:00 2001 From: mhelander Date: Fri, 19 Jan 2018 23:00:47 +0200 Subject: [PATCH 3/3] Fixed some more Buffer/Uint8Array issues --- sea.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sea.js b/sea.js index 3c8e25a5..a7c4b976 100644 --- a/sea.js +++ b/sea.js @@ -22,7 +22,7 @@ var wc = window.crypto || window.msCrypto; // STD or M$ subtle = wc.subtle || wc.webkitSubtle; // STD or iSafari getRandomBytes = function(len){ - return wc.getRandomValues(new Uint8Array(Buffer.alloc(len))); + return Buffer.from(wc.getRandomValues(new Uint8Array(Buffer.alloc(len)))); }; TextEncoder = window.TextEncoder; TextDecoder = window.TextDecoder; @@ -36,7 +36,7 @@ var webcrypto = new WebCrypto({directory: 'key_storage'}); subtleossl = webcrypto.subtle; subtle = require('@trust/webcrypto').subtle; // All but ECDH - getRandomBytes = function(len){ return crypto.randomBytes(len) }; + getRandomBytes = function(len){ return Buffer.from(crypto.randomBytes(len)) }; TextEncoder = require('text-encoding').TextEncoder; TextDecoder = require('text-encoding').TextDecoder; // Let's have Storage for NodeJS / testing @@ -1210,7 +1210,7 @@ m = (m.slice && m) || JSON.stringify(m); recallCryptoKey(p, s).then(function(aesKey){ subtle.encrypt({ - name: 'AES-CBC', iv: iv + name: 'AES-CBC', iv: new Uint8Array(iv) }, aesKey, new TextEncoder().encode(m)).then(function(ct){ aesKey = getRandomBytes(32); r.ct = Buffer.from(ct, 'binary').toString('base64');