mirror of
https://github.com/amark/gun.git
synced 2025-03-30 15:08:33 +00:00
56 lines
2.3 KiB
JavaScript
56 lines
2.3 KiB
JavaScript
|
|
var shim = require('./shim');
|
|
// Practical examples about usage found from ./test/common.js
|
|
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.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)') => Buffer(xy)
|
|
const pb = Buffer.concat(
|
|
pub.replace(/-/g, '+').replace(/_/g, '/').split('.')
|
|
.map((t) => Buffer.from(t, 'base64'))
|
|
)
|
|
// id is PGPv4 compliant raw key
|
|
const id = Buffer.concat([
|
|
Buffer.from([0x99, pb.length / 0x100, pb.length % 0x100]), pb
|
|
])
|
|
const sha1 = await sha1hash(id)
|
|
const hash = 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.
|
|
var Gun = (SEA.window||{}).Gun || require('./gun', 1);
|
|
Gun.SEA = SEA;
|
|
SEA.GUN = SEA.Gun = Gun;
|
|
|
|
module.exports = SEA
|
|
|