UNPKG

ssb-keys

Version:

keyfile operations for ssb

59 lines (50 loc) 1.57 kB
"use strict"; var cl = require("chloride"); var SSBURI = require("ssb-uri2"); exports.hash = function (data, enc) { data = "string" === typeof data && enc == null ? Buffer.from(data, "binary") : Buffer.from(data, enc); return cl.crypto_hash_sha256(data).toString("base64") + ".sha256"; }; exports.hasSigil = function hasSigil(s) { return /^(@|%|&)/.test(s); }; function tag(key, tag) { if (!tag) throw new Error("no tag for:" + key.toString("base64")); return key.toString("base64") + "." + tag.replace(/^\./, ""); } exports.keysToJSON = function keysToJSON(keys, curve, feedFormat) { curve = keys.curve || curve; feedFormat = feedFormat || "classic"; var pub = tag(keys.public, curve); let id = "@" + pub; if ( feedFormat === "bendybutt-v1" || feedFormat === "buttwoo-v1" || feedFormat === "indexed-v1" || feedFormat === "gabbygrove-v1" ) { const classicUri = SSBURI.fromFeedSigil(id); const { type, data } = SSBURI.decompose(classicUri); id = SSBURI.compose({ type, format: feedFormat, data }); } return { curve: curve, public: pub, private: keys.private ? tag(keys.private, curve) : undefined, id, }; }; exports.getTag = function getTag(string) { var i = string.indexOf("."); return string.substring(i + 1); }; exports.toBuffer = function (buf) { if (buf == null) return buf; if (Buffer.isBuffer(buf)) return buf; var i = buf.indexOf("."); var start = exports.hasSigil(buf) ? 1 : 0; return Buffer.from(buf.substring(start, ~i ? i : buf.length), "base64"); };