OverviewFilesCommitsIssuesDocsReleasesPeers

ANProto / an.js

38 lines · javascript ref:
import nacl from "./lib/nacl-fast-es.js";
import { decode, encode } from "./lib/base64.js";

export const an = {};

an.gen = async () => {
  const g = await nacl.sign.keyPair();
  const k = await encode(g.publicKey) + encode(g.secretKey);
  return k;
};

an.hash = async (d) => {
  return encode(
    Array.from(
      new Uint8Array(
        await crypto.subtle.digest("SHA-256", new TextEncoder().encode(d)),
      ),
    ),
  );
};

an.sign = async (h, k) => {
  const ts = Date.now();
  const s = encode(
    nacl.sign(new TextEncoder().encode(ts + h), decode(k.substring(44))),
  );

  return k.substring(0, 44) + s;
};

an.open = async (m) => {
  const o = new TextDecoder().decode(
    nacl.sign.open(decode(m.substring(44)), decode(m.substring(0, 44))),
  );

  return o;
};