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

* feat: create pair with seed, content addressing with shorter hash * feat: create pair using priv/epriv * optimize SEA.pair * feat: globalThis along with window * white labeling * feat: add WebAuthn example and enhance SEA.sign, SEA.verify, SEA check.pub, for WebAuthn support * feat: enhance WebAuthn integration with new put options and improved signature handling * polish SEA.sign and SEA.verify * feat: localize options in SEA.check.pub to enhance security and prevent attacks * fix: correct destructuring of user object to enhance security in SEA * rebuild SEA * feat: support ArrayBuffer as seed for key pair generation in SEA * test: add unit test for hashing ArrayBuffer in SEA * fix: create deterministic key pair from seed * fix: add missing B parameter for ECC curve and implement point validation * feat: add ArrayBuffer support for hashing in SEA and implement corresponding unit test * fix: convert numeric salt to string in PBKDF2 implementation * fix: convert numeric salt option to string in PBKDF2 implementation * improve hashing tests * improve sea.work * rebuild SEA * improve SEA.work and rebuild SEA * enhance SEA encryption handling and improve test coverage for SEA functions --------- Co-authored-by: noname <x@null.com> Co-authored-by: x <x@mimiza.com> Co-authored-by: x <null> Co-authored-by: noname <no@name.com>
46 lines
1.5 KiB
JavaScript
46 lines
1.5 KiB
JavaScript
;(function(){
|
|
|
|
var SEA = require('./root');
|
|
var shim = require('./shim');
|
|
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 = async function p(t){ try {
|
|
var yes = (typeof t == 'string');
|
|
if(yes && 'SEA{' === t.slice(0,4)){ t = t.slice(3) }
|
|
return yes ? await shim.parse(t) : t;
|
|
} catch (e) {}
|
|
return t;
|
|
}
|
|
|
|
SEA.opt = s;
|
|
module.exports = s
|
|
|
|
}()); |