mirror of
https://github.com/amark/gun.git
synced 2025-03-30 15:08:33 +00:00

* WIP: use isomorphic-webcrypto for RN * WIP: expo friendly exports * WIP: buffer for RN * WIP: textencoder for RN * WIP: aeskey from jwk instead of raw for RN * fix: missing taglength for msrcrypto * add: update isomorphic-webcrypto * add: match isocrypto api * add: failing test for 4e2 as 400 * fix: remove extra atob btoa * add: sea unbuild * refactor: according to mhelander review * refactor: shorter require * fix: make bug test pass, capitlize bug test. * fix: npm ci + sea test * add: restore old browser export and add react-native friendly exports * fix: import buffer into correct global/window * fix: bad comparison * fix: only include buffer if no btoa/atob
44 lines
1.5 KiB
JavaScript
44 lines
1.5 KiB
JavaScript
|
|
var SEA = require('./root');
|
|
var Buffer = require('./buffer');
|
|
var s = {};
|
|
s.pbkdf2 = {hash: {name : 'SHA-256'}, iter: 100000, ks: 64};
|
|
s.ecdsa = {
|
|
pair: {name: 'ECDSA', namedCurve: 'P-256'},
|
|
sign: {name: 'ECDSA', hash: {name: 'SHA-256'}}
|
|
};
|
|
s.ecdh = {name: 'ECDH', namedCurve: 'P-256'};
|
|
|
|
// This creates Web Cryptography API compliant JWK for sign/verify purposes
|
|
s.jwk = function(pub, d){ // d === priv
|
|
pub = pub.split('.');
|
|
var x = pub[0], y = pub[1];
|
|
var jwk = {kty: "EC", crv: "P-256", x: x, y: y, ext: true};
|
|
jwk.key_ops = d ? ['sign'] : ['verify'];
|
|
if(d){ jwk.d = d }
|
|
return jwk;
|
|
};
|
|
|
|
s.keyToJwk = function(keyBytes) {
|
|
const keyB64 = keyBytes.toString('base64');
|
|
const k = keyB64.replace(/\+/g, '-').replace(/\//g, '_').replace(/\=/g, '');
|
|
return { kty: 'oct', k: k, ext: false, alg: 'A256GCM' };
|
|
}
|
|
|
|
s.recall = {
|
|
validity: 12 * 60 * 60, // internally in seconds : 12 hours
|
|
hook: function(props){ return props } // { iat, exp, alias, remember } // or return new Promise((resolve, reject) => resolve(props)
|
|
};
|
|
|
|
s.check = function(t){ return (typeof t == 'string') && ('SEA{' === t.slice(0,4)) }
|
|
s.parse = function p(t){ try {
|
|
var yes = (typeof t == 'string');
|
|
if(yes && 'SEA{' === t.slice(0,4)){ t = t.slice(3) }
|
|
return yes ? JSON.parse(t) : t;
|
|
} catch (e) {}
|
|
return t;
|
|
}
|
|
|
|
SEA.opt = s;
|
|
module.exports = s
|
|
|