hbsig 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/cjs/commit.js ADDED
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.commit = void 0;
8
+ var _id = require("./id.js");
9
+ var _utils = require("./utils.js");
10
+ var _signerUtils = require("./signer-utils.js");
11
+ function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
12
+ function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
13
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
16
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
17
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
18
+ function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
19
+ function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
20
+ var commit = exports.commit = /*#__PURE__*/function () {
21
+ var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(obj, opts) {
22
+ var msg, hmacId, rsaId, pub, committer, meta, meta2, sigs;
23
+ return _regenerator().w(function (_context) {
24
+ while (1) switch (_context.n) {
25
+ case 0:
26
+ _context.n = 1;
27
+ return opts.signer(obj, opts);
28
+ case 1:
29
+ msg = _context.v;
30
+ hmacId = (0, _id.hmacid)(msg.headers);
31
+ rsaId = (0, _id.rsaid)(msg.headers);
32
+ pub = (0, _signerUtils.extractPubKey)(msg.headers);
33
+ committer = (0, _utils.toAddr)(pub.toString("base64"));
34
+ meta = {
35
+ alg: "rsa-pss-sha512",
36
+ "commitment-device": "httpsig@1.0"
37
+ };
38
+ meta2 = {
39
+ alg: "hmac-sha256",
40
+ "commitment-device": "httpsig@1.0"
41
+ };
42
+ sigs = {
43
+ signature: msg.headers.signature,
44
+ "signature-input": msg.headers["signature-input"]
45
+ };
46
+ return _context.a(2, _objectSpread({
47
+ commitments: _defineProperty(_defineProperty({}, rsaId, _objectSpread(_objectSpread({}, meta), {}, {
48
+ committer: committer
49
+ }, sigs)), hmacId, _objectSpread(_objectSpread({}, meta2), sigs))
50
+ }, obj));
51
+ }
52
+ }, _callee);
53
+ }));
54
+ return function commit(_x, _x2) {
55
+ return _ref.apply(this, arguments);
56
+ };
57
+ }();
package/cjs/index.js CHANGED
@@ -9,6 +9,24 @@ Object.defineProperty(exports, "base", {
9
9
  return _id.base;
10
10
  }
11
11
  });
12
+ Object.defineProperty(exports, "createSigner", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _signer.createSigner;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "decodeSigInput", {
19
+ enumerable: true,
20
+ get: function get() {
21
+ return _signerUtils.decodeSigInput;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "extractPublicKeyFromHeaders", {
25
+ enumerable: true,
26
+ get: function get() {
27
+ return _signerUtils.extractPublicKeyFromHeaders;
28
+ }
29
+ });
12
30
  Object.defineProperty(exports, "hashpath", {
13
31
  enumerable: true,
14
32
  get: function get() {
@@ -60,4 +78,5 @@ Object.defineProperty(exports, "toAddr", {
60
78
  var _id = require("./id.js");
61
79
  var _utils = require("./utils.js");
62
80
  var _signer = require("./signer.js");
63
- var _send = require("./send.js");
81
+ var _send = require("./send.js");
82
+ var _signerUtils = require("./signer-utils.js");
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.decodeSigInput = decodeSigInput;
8
- exports.extractPublicKeyFromHeaders = extractPublicKeyFromHeaders;
8
+ exports.extractPubKey = extractPubKey;
9
9
  exports.send = send;
10
10
  exports.toHttpSigner = void 0;
11
11
  exports.verify = verify;
@@ -270,7 +270,7 @@ function _verify() {
270
270
  case 1:
271
271
  // Extract public key from keyid
272
272
  _signatureName = extractSignatureName(headers);
273
- extractedKey = extractPublicKeyFromHeaders(headers, _signatureName);
273
+ extractedKey = extractPubKey(headers, _signatureName);
274
274
  if (extractedKey) {
275
275
  _context6.n = 2;
276
276
  break;
@@ -337,7 +337,7 @@ function _verify() {
337
337
  headers: _objectSpread({}, headers)
338
338
  }; // Extract additional info from headers
339
339
  signatureName = extractSignatureName(headers);
340
- extractedPublicKey = extractPublicKeyFromHeaders(headers, signatureName); // Extract algorithm from signature-input
340
+ extractedPublicKey = extractPubKey(headers, signatureName); // Extract algorithm from signature-input
341
341
  signatureInputHeader = headers["signature-input"] || headers["Signature-Input"];
342
342
  decodedSigInput = decodeSigInput(signatureInputHeader, signatureName);
343
343
  algorithm = decodedSigInput === null || decodedSigInput === void 0 || (_decodedSigInput$para = decodedSigInput.params) === null || _decodedSigInput$para === void 0 ? void 0 : _decodedSigInput$para.alg; // Verify using the library
@@ -387,7 +387,7 @@ function _verify() {
387
387
  }));
388
388
  return _verify.apply(this, arguments);
389
389
  }
390
- function extractPublicKeyFromHeaders(headers, signatureName) {
390
+ function extractPubKey(headers, signatureName) {
391
391
  var _Object$values$;
392
392
  var signatureInput = headers["signature-input"] || headers["Signature-Input"];
393
393
  if (!signatureInput) return null;
@@ -414,7 +414,7 @@ function extractPublicKeyFromHeaders(headers, signatureName) {
414
414
  */
415
415
  function extractPublicKeyFromMessage(signedMessage) {
416
416
  var signatureName = extractSignatureName(signedMessage.headers);
417
- return extractPublicKeyFromHeaders(signedMessage.headers, signatureName);
417
+ return extractPubKey(signedMessage.headers, signatureName);
418
418
  }
419
419
  function send(_x3) {
420
420
  return _send.apply(this, arguments);
package/cjs/signer.js CHANGED
@@ -3,6 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.createSigner = void 0;
6
7
  exports.sign = sign;
7
8
  exports.signInternal = void 0;
8
9
  exports.signer = signer;
@@ -602,5 +603,10 @@ function signer(config) {
602
603
  };
603
604
  }();
604
605
  }
605
-
606
- // Export the internal sign function for backward compatibility
606
+ var createSigner = exports.createSigner = function createSigner(jwk, url) {
607
+ var _signer = (0, _aoconnect.createSigner)(jwk, url);
608
+ return signer({
609
+ signer: _signer,
610
+ url: url
611
+ });
612
+ };
package/cjs/utils.js CHANGED
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.toAddr = toAddr;
7
7
  var _fastSha = _interopRequireDefault(require("fast-sha256"));
8
8
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
9
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
9
10
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
10
11
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
11
12
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
@@ -36,6 +37,7 @@ function base64urlEncode(bytes) {
36
37
  return b64.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/g, "");
37
38
  }
38
39
  function toAddr(n) {
40
+ if (_typeof(n) === "object" && typeof n.n === "string") n = n.n;
39
41
  var pubBytes = base64urlDecode(n);
40
42
  var hash = (0, _fastSha["default"])(pubBytes);
41
43
  return base64urlEncode(hash);
package/esm/commit.js ADDED
@@ -0,0 +1,24 @@
1
+ import { id, base, hashpath, rsaid, hmacid } from "./id.js"
2
+ import { toAddr } from "./utils.js"
3
+ import { extractPubKey } from "./signer-utils.js"
4
+
5
+ export const commit = async (obj, opts) => {
6
+ const msg = await opts.signer(obj, opts)
7
+ const hmacId = hmacid(msg.headers)
8
+ const rsaId = rsaid(msg.headers)
9
+ const pub = extractPubKey(msg.headers)
10
+ const committer = toAddr(pub.toString("base64"))
11
+ const meta = { alg: "rsa-pss-sha512", "commitment-device": "httpsig@1.0" }
12
+ const meta2 = { alg: "hmac-sha256", "commitment-device": "httpsig@1.0" }
13
+ const sigs = {
14
+ signature: msg.headers.signature,
15
+ "signature-input": msg.headers["signature-input"],
16
+ }
17
+ return {
18
+ commitments: {
19
+ [rsaId]: { ...meta, committer, ...sigs },
20
+ [hmacId]: { ...meta2, ...sigs },
21
+ },
22
+ ...obj,
23
+ }
24
+ }
package/esm/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export { id, base, hashpath, rsaid, hmacid } from "./id.js"
2
2
  export { toAddr } from "./utils.js"
3
- export { sign, signer } from "./signer.js"
3
+ export { sign, signer, createSigner } from "./signer.js"
4
4
  export { send } from "./send.js"
5
+ export { extractPublicKeyFromHeaders, decodeSigInput } from "./signer-utils.js"
@@ -190,7 +190,7 @@ export async function verify(signedMessage, publicKey) {
190
190
  } else {
191
191
  // Extract public key from keyid
192
192
  const signatureName = extractSignatureName(headers)
193
- const extractedKey = extractPublicKeyFromHeaders(headers, signatureName)
193
+ const extractedKey = extractPubKey(headers, signatureName)
194
194
  if (!extractedKey) {
195
195
  return {
196
196
  valid: false,
@@ -245,10 +245,7 @@ export async function verify(signedMessage, publicKey) {
245
245
 
246
246
  // Extract additional info from headers
247
247
  const signatureName = extractSignatureName(headers)
248
- const extractedPublicKey = extractPublicKeyFromHeaders(
249
- headers,
250
- signatureName
251
- )
248
+ const extractedPublicKey = extractPubKey(headers, signatureName)
252
249
 
253
250
  // Extract algorithm from signature-input
254
251
  const signatureInputHeader =
@@ -302,7 +299,7 @@ export async function verify(signedMessage, publicKey) {
302
299
  * @param {string} [signatureName] - Optional signature name to look for
303
300
  * @returns {Buffer|null} Public key buffer or null
304
301
  */
305
- export function extractPublicKeyFromHeaders(headers, signatureName) {
302
+ export function extractPubKey(headers, signatureName) {
306
303
  const signatureInput =
307
304
  headers["signature-input"] || headers["Signature-Input"]
308
305
  if (!signatureInput) return null
@@ -335,7 +332,7 @@ export function extractPublicKeyFromHeaders(headers, signatureName) {
335
332
  */
336
333
  function extractPublicKeyFromMessage(signedMessage) {
337
334
  const signatureName = extractSignatureName(signedMessage.headers)
338
- return extractPublicKeyFromHeaders(signedMessage.headers, signatureName)
335
+ return extractPubKey(signedMessage.headers, signatureName)
339
336
  }
340
337
 
341
338
  export async function send(signedMsg, fetchImpl = fetch) {
package/esm/signer.js CHANGED
@@ -3,7 +3,7 @@ import { structured_from, structured_to } from "./structured.js"
3
3
  import { erl_json_from, erl_json_to, normalize } from "./erl_json.js"
4
4
  import { enc } from "./encode.js"
5
5
  import { isBytes } from "./encode-utils.js"
6
- import { createSigner } from "@permaweb/aoconnect"
6
+ import { createSigner as _createSigner } from "@permaweb/aoconnect"
7
7
  import { toHttpSigner } from "./send.js"
8
8
 
9
9
  // Export verify from signer-utils.js for compatibility
@@ -204,7 +204,7 @@ const smartSign = async (obj, path) => {
204
204
  message[key] = encodeAsStructuredFieldList(value)
205
205
  } else if (typeof value === "number") {
206
206
  types.push(
207
- `${key}="${Number.isInteger(value) ? "integer" : "float"}"`
207
+ `${key}="${Number.isInteger(value) ? "integer" : "float"}"`,
208
208
  )
209
209
  message[key] = String(value)
210
210
  } else if (typeof value === "boolean") {
@@ -276,9 +276,9 @@ const _sign = async (obj, path) => {
276
276
  const encoded = httpsig_to(
277
277
  normalize(
278
278
  structured_from(
279
- normalize({ ...filtered, path: path || "/~wao@1.0/httpsig" })
280
- )
281
- )
279
+ normalize({ ...filtered, path: path || "/~wao@1.0/httpsig" }),
280
+ ),
281
+ ),
282
282
  )
283
283
 
284
284
  // Check if the encoded result is valid for HTTP headers
@@ -300,7 +300,7 @@ const joinUrl = ({ url, path }) => {
300
300
 
301
301
  // Main sign function that matches signer.js API
302
302
  export async function sign({ url, path, msg: encoded, jwk, signPath = true }) {
303
- const signer = createSigner(jwk, url)
303
+ const signer = _createSigner(jwk, url)
304
304
  const { body = null, ...headers } = encoded
305
305
  let _enc = { headers }
306
306
  if (body) _enc.body = new Blob([body])
@@ -385,7 +385,7 @@ export function signer(config) {
385
385
 
386
386
  return async (
387
387
  fields,
388
- { encoded: _encoded = false, path: _path = true } = {}
388
+ { encoded: _encoded = false, path: _path = true } = {},
389
389
  ) => {
390
390
  const { path = "/relay/process", method = "POST", ...aoFields } = fields
391
391
 
@@ -448,5 +448,9 @@ export function signer(config) {
448
448
  }
449
449
  }
450
450
 
451
- // Export the internal sign function for backward compatibility
451
+ export const createSigner = (jwk, url) => {
452
+ const _signer = _createSigner(jwk, url)
453
+ return signer({ signer: _signer, url })
454
+ }
455
+
452
456
  export { _sign as signInternal }
package/esm/utils.js CHANGED
@@ -20,6 +20,7 @@ function base64urlEncode(bytes) {
20
20
  }
21
21
 
22
22
  function toAddr(n) {
23
+ if (typeof n === "object" && typeof n.n === "string") n = n.n
23
24
  const pubBytes = base64urlDecode(n)
24
25
  const hash = sha256(pubBytes)
25
26
  return base64urlEncode(hash)
package/package.json CHANGED
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "hbsig",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "main": "cjs/index.js",
5
5
  "license": "MIT",
6
6
  "devDependencies": {
7
- "@babel/plugin-transform-modules-commonjs": "^7.24.8",
8
7
  "@babel/cli": "^7.24.8",
9
8
  "@babel/core": "^7.25.2",
10
- "@babel/preset-env": "^7.25.3"
9
+ "@babel/plugin-transform-modules-commonjs": "^7.24.8",
10
+ "@babel/preset-env": "^7.25.3",
11
+ "wao": "^0.33.0"
11
12
  },
12
13
  "dependencies": {
13
- "wao": "^0.32.2",
14
14
  "@permaweb/aoconnect": "^0.0.85",
15
15
  "base64url": "^3.0.1",
16
16
  "fast-sha256": "^1.3.0",