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

later with @bmatusiak check sea.then for '../gun.js' vs '../' vs ... note: src/index -> core.js TODO: something about WebRTC candidates hitting ack decrement limits?
60 lines
2.6 KiB
JavaScript
60 lines
2.6 KiB
JavaScript
;(function(){
|
|
|
|
var shim = require('./shim');
|
|
// Practical examples about usage found in tests.
|
|
var SEA = require('./root');
|
|
SEA.work = require('./work');
|
|
SEA.sign = require('./sign');
|
|
SEA.verify = require('./verify');
|
|
SEA.encrypt = require('./encrypt');
|
|
SEA.decrypt = require('./decrypt');
|
|
SEA.certify = require('./certify');
|
|
//SEA.opt.aeskey = require('./aeskey'); // not official! // this causes problems in latest WebCrypto.
|
|
|
|
SEA.random = SEA.random || shim.random;
|
|
|
|
// This is Buffer used in SEA and usable from Gun/SEA application also.
|
|
// For documentation see https://nodejs.org/api/buffer.html
|
|
SEA.Buffer = SEA.Buffer || require('./buffer');
|
|
|
|
// These SEA functions support now ony Promises or
|
|
// async/await (compatible) code, use those like Promises.
|
|
//
|
|
// Creates a wrapper library around Web Crypto API
|
|
// for various AES, ECDSA, PBKDF2 functions we called above.
|
|
// Calculate public key KeyID aka PGPv4 (result: 8 bytes as hex string)
|
|
SEA.keyid = SEA.keyid || (async (pub) => {
|
|
try {
|
|
// base64('base64(x):base64(y)') => shim.Buffer(xy)
|
|
const pb = shim.Buffer.concat(
|
|
pub.replace(/-/g, '+').replace(/_/g, '/').split('.')
|
|
.map((t) => shim.Buffer.from(t, 'base64'))
|
|
)
|
|
// id is PGPv4 compliant raw key
|
|
const id = shim.Buffer.concat([
|
|
shim.Buffer.from([0x99, pb.length / 0x100, pb.length % 0x100]), pb
|
|
])
|
|
const sha1 = await sha1hash(id)
|
|
const hash = shim.Buffer.from(sha1, 'binary')
|
|
return hash.toString('hex', hash.length - 8) // 16-bit ID as hex
|
|
} catch (e) {
|
|
console.log(e)
|
|
throw e
|
|
}
|
|
});
|
|
// all done!
|
|
// Obviously it is missing MANY necessary features. This is only an alpha release.
|
|
// Please experiment with it, audit what I've done so far, and complain about what needs to be added.
|
|
// SEA should be a full suite that is easy and seamless to use.
|
|
// Again, scroll naer the top, where I provide an EXAMPLE of how to create a user and sign in.
|
|
// Once logged in, the rest of the code you just read handled automatically signing/validating data.
|
|
// But all other behavior needs to be equally easy, like opinionated ways of
|
|
// Adding friends (trusted public keys), sending private messages, etc.
|
|
// Cheers! Tell me what you think.
|
|
((SEA.window||{}).GUN||{}).SEA = SEA;
|
|
|
|
module.exports = SEA
|
|
// -------------- END SEA MODULES --------------------
|
|
// -- BEGIN SEA+GUN MODULES: BUNDLED BY DEFAULT UNTIL OTHERS USE SEA ON OWN -------
|
|
|
|
}()); |