@multiplatform.one/gpg 7.18.0 → 7.20.0

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.
Files changed (46) hide show
  1. package/dist/cjs/GpgProvider.cjs +7 -4
  2. package/dist/cjs/GpgProvider.native.js +7 -4
  3. package/dist/cjs/GpgProvider.native.js.map +1 -1
  4. package/dist/cjs/index.cjs +7 -1
  5. package/dist/cjs/index.native.js +7 -1
  6. package/dist/cjs/index.native.js.map +1 -1
  7. package/dist/cjs/signature.cjs +113 -0
  8. package/dist/cjs/signature.native.js +124 -0
  9. package/dist/cjs/signature.native.js.map +1 -0
  10. package/dist/cjs/signer.cjs +119 -0
  11. package/dist/cjs/signer.native.js +150 -0
  12. package/dist/cjs/signer.native.js.map +1 -0
  13. package/dist/esm/GpgButton.native.js.map +1 -1
  14. package/dist/esm/GpgContext.native.js.map +1 -1
  15. package/dist/esm/GpgIcon.native.js.map +1 -1
  16. package/dist/esm/GpgProvider.mjs +7 -4
  17. package/dist/esm/GpgProvider.mjs.map +1 -1
  18. package/dist/esm/GpgProvider.native.js +7 -4
  19. package/dist/esm/GpgProvider.native.js.map +1 -1
  20. package/dist/esm/SignInWithGpg.native.js.map +1 -1
  21. package/dist/esm/index.mjs +2 -1
  22. package/dist/esm/index.mjs.map +1 -1
  23. package/dist/esm/index.native.js +2 -1
  24. package/dist/esm/index.native.js.map +1 -1
  25. package/dist/esm/screens.native.js.map +1 -1
  26. package/dist/esm/signature.mjs +88 -0
  27. package/dist/esm/signature.mjs.map +1 -0
  28. package/dist/esm/signature.native.js +96 -0
  29. package/dist/esm/signature.native.js.map +1 -0
  30. package/dist/esm/signer.mjs +88 -0
  31. package/dist/esm/signer.mjs.map +1 -0
  32. package/dist/esm/signer.native.js +116 -0
  33. package/dist/esm/signer.native.js.map +1 -0
  34. package/dist/esm/useGpg.native.js.map +1 -1
  35. package/package.json +16 -3
  36. package/src/GpgProvider.tsx +7 -19
  37. package/src/index.ts +10 -1
  38. package/src/signature.ts +120 -0
  39. package/src/signer.ts +142 -0
  40. package/types/GpgProvider.d.ts.map +1 -1
  41. package/types/index.d.ts +1 -0
  42. package/types/index.d.ts.map +1 -1
  43. package/types/signature.d.ts +6 -0
  44. package/types/signature.d.ts.map +1 -0
  45. package/types/signer.d.ts +47 -0
  46. package/types/signer.d.ts.map +1 -0
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all) __defProp(target, name, {
9
+ get: all[name],
10
+ enumerable: true
11
+ });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
16
+ get: () => from[key],
17
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
18
+ });
19
+ }
20
+ return to;
21
+ };
22
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
23
+ value: true
24
+ }), mod);
25
+ var signer_exports = {};
26
+ __export(signer_exports, {
27
+ GPG_PUBLIC_KEY_BEGIN: () => GPG_PUBLIC_KEY_BEGIN,
28
+ GPG_SIGNATURE_BEGIN: () => GPG_SIGNATURE_BEGIN,
29
+ assertGpgSignature: () => assertGpgSignature,
30
+ createGpgSigner: () => createGpgSigner,
31
+ gpgSignCommand: () => gpgSignCommand,
32
+ gpgSignatureCovers: () => import_signature2.gpgSignatureCovers,
33
+ useGpgSigner: () => useGpgSigner
34
+ });
35
+ module.exports = __toCommonJS(signer_exports);
36
+ var import_react = require("react");
37
+ var import_signature = require("./signature.native.js");
38
+ var import_signature2 = require("./signature.native.js");
39
+ var GPG_SIGNATURE_BEGIN = "-----BEGIN PGP SIGNATURE-----";
40
+ var GPG_PUBLIC_KEY_BEGIN = "-----BEGIN PGP PUBLIC KEY BLOCK-----";
41
+ function gpgSignCommand(message) {
42
+ return `{ printf %s '${message.replace(/'/g, "'\\''")}' | gpg --detach-sign --armor; gpg --armor --export; }`;
43
+ }
44
+ function assertGpgSignature(blob) {
45
+ var trimmed = blob.trim();
46
+ if (!trimmed.includes(GPG_SIGNATURE_BEGIN) || !trimmed.includes(GPG_PUBLIC_KEY_BEGIN)) {
47
+ throw new Error("Paste the FULL output \u2014 it must contain both a PGP SIGNATURE and a PUBLIC KEY block.");
48
+ }
49
+ return trimmed;
50
+ }
51
+ function createGpgSigner() {
52
+ var pending = null;
53
+ var settle = null;
54
+ var listeners = /* @__PURE__ */new Set();
55
+ var emit = function emit2() {
56
+ var _iteratorNormalCompletion = true,
57
+ _didIteratorError = false,
58
+ _iteratorError = void 0;
59
+ try {
60
+ for (var _iterator = listeners[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
61
+ var listener = _step.value;
62
+ listener();
63
+ }
64
+ } catch (err) {
65
+ _didIteratorError = true;
66
+ _iteratorError = err;
67
+ } finally {
68
+ try {
69
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
70
+ _iterator.return();
71
+ }
72
+ } finally {
73
+ if (_didIteratorError) {
74
+ throw _iteratorError;
75
+ }
76
+ }
77
+ }
78
+ };
79
+ var signer = {
80
+ family: "gpg",
81
+ address: null,
82
+ capabilities: ["signMessage"],
83
+ get pending() {
84
+ return pending;
85
+ },
86
+ signMessage(message) {
87
+ settle === null || settle === void 0 ? void 0 : settle.reject(new Error("GPG signing was superseded by a newer request"));
88
+ return new Promise(function (resolve, reject) {
89
+ settle = {
90
+ resolve,
91
+ reject
92
+ };
93
+ pending = {
94
+ message,
95
+ command: gpgSignCommand(message)
96
+ };
97
+ emit();
98
+ });
99
+ },
100
+ submit(blob, request) {
101
+ if (!settle || !pending) throw new Error("No GPG signature was requested");
102
+ if (request !== pending) {
103
+ throw new Error("That GPG request was superseded; run the current command and paste its output");
104
+ }
105
+ var signature = assertGpgSignature(blob);
106
+ if (!(0, import_signature.gpgSignatureCovers)(signature, pending.message)) {
107
+ throw new Error("That signature is over a different message; run the current command and paste its output");
108
+ }
109
+ var {
110
+ resolve
111
+ } = settle;
112
+ settle = null;
113
+ pending = null;
114
+ emit();
115
+ resolve(signature);
116
+ },
117
+ cancel(reason) {
118
+ if (!settle) return;
119
+ var {
120
+ reject
121
+ } = settle;
122
+ settle = null;
123
+ pending = null;
124
+ emit();
125
+ reject(reason !== null && reason !== void 0 ? reason : new Error("GPG signing was cancelled"));
126
+ },
127
+ subscribe(listener) {
128
+ listeners.add(listener);
129
+ return function () {
130
+ return listeners.delete(listener);
131
+ };
132
+ }
133
+ };
134
+ return signer;
135
+ }
136
+ function useGpgSigner() {
137
+ var signer = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : defaultSigner();
138
+ (0, import_react.useSyncExternalStore)(signer.subscribe, function () {
139
+ return signer.pending;
140
+ }, function () {
141
+ return signer.pending;
142
+ });
143
+ return signer;
144
+ }
145
+ var sharedSigner = null;
146
+ function defaultSigner() {
147
+ sharedSigner !== null && sharedSigner !== void 0 ? sharedSigner : sharedSigner = createGpgSigner();
148
+ return sharedSigner;
149
+ }
150
+ //# sourceMappingURL=signer.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","signer_exports","GPG_PUBLIC_KEY_BEGIN","GPG_SIGNATURE_BEGIN","assertGpgSignature","createGpgSigner","gpgSignCommand","gpgSignatureCovers","import_signature2","useGpgSigner","module","exports","import_react","require","import_signature","message","replace","blob","trimmed","trim","includes","Error","pending","settle","listeners","Set","emit","emit2","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","listener","err","return","signer","family","address","capabilities","signMessage","reject","Promise","resolve","command","submit","request","signature","cancel","reason","subscribe","add","delete","arguments","length","defaultSigner","useSyncExternalStore","sharedSigner"],"sources":["signer.native.js"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar signer_exports = {};\n__export(signer_exports, {\n GPG_PUBLIC_KEY_BEGIN: () => GPG_PUBLIC_KEY_BEGIN,\n GPG_SIGNATURE_BEGIN: () => GPG_SIGNATURE_BEGIN,\n assertGpgSignature: () => assertGpgSignature,\n createGpgSigner: () => createGpgSigner,\n gpgSignCommand: () => gpgSignCommand,\n gpgSignatureCovers: () => import_signature2.gpgSignatureCovers,\n useGpgSigner: () => useGpgSigner\n});\nmodule.exports = __toCommonJS(signer_exports);\nvar import_react = require(\"react\");\nvar import_signature = require(\"./signature\");\nvar import_signature2 = require(\"./signature\");\nvar GPG_SIGNATURE_BEGIN = \"-----BEGIN PGP SIGNATURE-----\";\nvar GPG_PUBLIC_KEY_BEGIN = \"-----BEGIN PGP PUBLIC KEY BLOCK-----\";\nfunction gpgSignCommand(message) {\n return `{ printf %s '${message.replace(/'/g, \"'\\\\''\")}' | gpg --detach-sign --armor; gpg --armor --export; }`;\n}\nfunction assertGpgSignature(blob) {\n var trimmed = blob.trim();\n if (!trimmed.includes(GPG_SIGNATURE_BEGIN) || !trimmed.includes(GPG_PUBLIC_KEY_BEGIN)) {\n throw new Error(\"Paste the FULL output \\u2014 it must contain both a PGP SIGNATURE and a PUBLIC KEY block.\");\n }\n return trimmed;\n}\nfunction createGpgSigner() {\n var pending = null;\n var settle = null;\n var listeners = /* @__PURE__ */ new Set();\n var emit = function emit2() {\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = listeners[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var listener = _step.value;\n listener();\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n };\n var signer = {\n family: \"gpg\",\n address: null,\n capabilities: [\n \"signMessage\"\n ],\n get pending() {\n return pending;\n },\n signMessage(message) {\n settle === null || settle === void 0 ? void 0 : settle.reject(new Error(\"GPG signing was superseded by a newer request\"));\n return new Promise(function(resolve, reject) {\n settle = {\n resolve,\n reject\n };\n pending = {\n message,\n command: gpgSignCommand(message)\n };\n emit();\n });\n },\n submit(blob, request) {\n if (!settle || !pending) throw new Error(\"No GPG signature was requested\");\n if (request !== pending) {\n throw new Error(\"That GPG request was superseded; run the current command and paste its output\");\n }\n var signature = assertGpgSignature(blob);\n if (!(0, import_signature.gpgSignatureCovers)(signature, pending.message)) {\n throw new Error(\"That signature is over a different message; run the current command and paste its output\");\n }\n var { resolve } = settle;\n settle = null;\n pending = null;\n emit();\n resolve(signature);\n },\n cancel(reason) {\n if (!settle) return;\n var { reject } = settle;\n settle = null;\n pending = null;\n emit();\n reject(reason !== null && reason !== void 0 ? reason : new Error(\"GPG signing was cancelled\"));\n },\n subscribe(listener) {\n listeners.add(listener);\n return function() {\n return listeners.delete(listener);\n };\n }\n };\n return signer;\n}\nfunction useGpgSigner() {\n var signer = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : defaultSigner();\n (0, import_react.useSyncExternalStore)(signer.subscribe, function() {\n return signer.pending;\n }, function() {\n return signer.pending;\n });\n return signer;\n}\nvar sharedSigner = null;\nfunction defaultSigner() {\n sharedSigner !== null && sharedSigner !== void 0 ? sharedSigner : sharedSigner = createGpgSigner();\n return sharedSigner;\n}\n//# sourceMappingURL=signer.js.map\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["jsx","_jsx","React","Button","ResetContainer","useModal","GPGButton","GPGButton2","param","children","openScreen","style","margin","arrow","onClick","e","_e_preventDefault","preventDefault","call"],"sources":["../../src/GpgButton.tsx"],"sourcesContent":[null],"mappings":"AACA,SAASA,GAAA,IAAAC,IAAQ,2BAAgB;AAc7B,OAAAC,KAAA;AALG,SAAMC,MAAA,EAAAC,cAA+C,EAAAC,QAAM;AAGhE,IAAAC,SAAQ,YAAeC,UAASA,CAAAC,KAAA;EAChC;IAAAC;EACE,IAAAD,KAAA;EAAA,IAAC;IAAAE;EAAA,IAAAL,QAAA;EAAA,sBAAAJ,IAAA,CAAAE,MAAA;IAAAQ,KAEC;MACAC,MAAA,EAAK;IAAA;IAIHC,KAAA,EAAG;IACH;IAA0B;IAC5BC,OAEC,WAAAA,OAAYA,CAAAC,CAAA;MAAA,IAAAC,iBAAA;MAVTD,CAAA,aAAAA,CAAA,wBAAAC,iBAAA,GAAAD,CAAA,CAAAE,cAAA,cAAAD,iBAAA,uBAAAA,iBAAA,CAAAE,IAAA,CAAAH,CAAA;MAWNL,UAAA;IAEJ;IAEAD,QAAM,EAAAA,QAAA,KAA4C,IAAG,IAAGA,QAAM,KAC5D,SAAAA,QAAC;EAIH,GAAO","ignoreList":[]}
1
+ {"version":3,"names":["jsx","_jsx","React","Button","ResetContainer","useModal","GPGButton","GPGButton2","param","children","openScreen","style","margin","arrow","onClick","e","_e_preventDefault","preventDefault","call","GPGButtonComponent","GPGButtonComponent2","props","GpgButton_default","default"],"sources":["GpgButton.native.js"],"sourcesContent":["import { jsx as _jsx } from \"react/jsx-runtime\";\nimport React from \"react\";\nimport { Button, ResetContainer, useModal } from \"@multiplatform.one/connectkit\";\nvar GPGButton = function GPGButton2(param) {\n var { children } = param;\n var { openScreen } = useModal();\n return /* @__PURE__ */ _jsx(Button, {\n style: {\n margin: 0\n },\n arrow: true,\n // preventDefault so we never submit a surrounding host <form> (e.g. keycloak's\n // login form) — the underlying styled button can render as type=submit.\n onClick: function onClick(e) {\n var _e_preventDefault;\n e === null || e === void 0 ? void 0 : (_e_preventDefault = e.preventDefault) === null || _e_preventDefault === void 0 ? void 0 : _e_preventDefault.call(e);\n openScreen(\"signInWithGpg\");\n },\n children: children !== null && children !== void 0 ? children : \"Sign in with GPG\"\n }, \"button\");\n};\nvar GPGButtonComponent = function GPGButtonComponent2(param) {\n var { ...props } = param;\n return /* @__PURE__ */ _jsx(ResetContainer, {\n children: /* @__PURE__ */ _jsx(GPGButton, {\n ...props\n })\n });\n};\nvar GpgButton_default = GPGButtonComponent;\nexport {\n GPGButton,\n GpgButton_default as default\n};\n//# sourceMappingURL=GpgButton.js.map\n"],"mappings":"AAAA,SAASA,GAAG,IAAIC,IAAI,QAAQ,mBAAmB;AAC/C,OAAOC,KAAK,MAAM,OAAO;AACzB,SAASC,MAAM,EAAEC,cAAc,EAAEC,QAAQ,QAAQ,+BAA+B;AAChF,IAAIC,SAAS,GAAG,SAASC,UAAUA,CAACC,KAAK,EAAE;EACzC,IAAI;IAAEC;EAAS,CAAC,GAAGD,KAAK;EACxB,IAAI;IAAEE;EAAW,CAAC,GAAGL,QAAQ,CAAC,CAAC;EAC/B,OAAO,eAAgBJ,IAAI,CAACE,MAAM,EAAE;IAClCQ,KAAK,EAAE;MACLC,MAAM,EAAE;IACV,CAAC;IACDC,KAAK,EAAE,IAAI;IACX;IACA;IACAC,OAAO,EAAE,SAASA,OAAOA,CAACC,CAAC,EAAE;MAC3B,IAAIC,iBAAiB;MACrBD,CAAC,KAAK,IAAI,IAAIA,CAAC,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAACC,iBAAiB,GAAGD,CAAC,CAACE,cAAc,MAAM,IAAI,IAAID,iBAAiB,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAGA,iBAAiB,CAACE,IAAI,CAACH,CAAC,CAAC;MAC1JL,UAAU,CAAC,eAAe,CAAC;IAC7B,CAAC;IACDD,QAAQ,EAAEA,QAAQ,KAAK,IAAI,IAAIA,QAAQ,KAAK,KAAK,CAAC,GAAGA,QAAQ,GAAG;EAClE,CAAC,EAAE,QAAQ,CAAC;AACd,CAAC;AACD,IAAIU,kBAAkB,GAAG,SAASC,mBAAmBA,CAACZ,KAAK,EAAE;EAC3D,IAAI;IAAE,GAAGa;EAAM,CAAC,GAAGb,KAAK;EACxB,OAAO,eAAgBP,IAAI,CAACG,cAAc,EAAE;IAC1CK,QAAQ,EAAE,eAAgBR,IAAI,CAACK,SAAS,EAAE;MACxC,GAAGe;IACL,CAAC;EACH,CAAC,CAAC;AACJ,CAAC;AACD,IAAIC,iBAAiB,GAAGH,kBAAkB;AAC1C,SACEb,SAAS,EACTgB,iBAAiB,IAAIC,OAAO","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["createContext","GpgStatusState","GpgStatusState2","GpgContext"],"sources":["../../src/GpgContext.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,aAAA,QAAqB;AAQvB,IAAKC,cAAA,GAAL,yBAAKC,eAAL;EACLD,eAAA,YAAQ;EACRA,eAAA,cAAU;EACVA,eAAA,cAAU;EACVA,eAAA,YAAQ;EAJE,OAAAC,eAAA;AAAA;AA0CL,IAAAC,UAAM,kBAAmDH,aAAI","ignoreList":[]}
1
+ {"version":3,"names":["createContext","GpgStatusState","GpgStatusState2","GpgContext"],"sources":["GpgContext.native.js"],"sourcesContent":["import { createContext } from \"react\";\nvar GpgStatusState = /* @__PURE__ */ (function(GpgStatusState2) {\n GpgStatusState2[\"READY\"] = \"ready\";\n GpgStatusState2[\"LOADING\"] = \"loading\";\n GpgStatusState2[\"SUCCESS\"] = \"success\";\n GpgStatusState2[\"ERROR\"] = \"error\";\n return GpgStatusState2;\n})({});\nvar GpgContext = /* @__PURE__ */ createContext(null);\nexport {\n GpgContext,\n GpgStatusState\n};\n//# sourceMappingURL=GpgContext.js.map\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,OAAO;AACrC,IAAIC,cAAc,GAAG,eAAiB,UAASC,eAAe,EAAE;EAC9DA,eAAe,CAAC,OAAO,CAAC,GAAG,OAAO;EAClCA,eAAe,CAAC,SAAS,CAAC,GAAG,SAAS;EACtCA,eAAe,CAAC,SAAS,CAAC,GAAG,SAAS;EACtCA,eAAe,CAAC,OAAO,CAAC,GAAG,OAAO;EAClC,OAAOA,eAAe;AACxB,CAAC,CAAE,CAAC,CAAC,CAAC;AACN,IAAIC,UAAU,GAAG,eAAgBH,aAAa,CAAC,IAAI,CAAC;AACpD,SACEG,UAAU,EACVF,cAAc","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["jsx","_jsx","jsxs","_jsxs","React","GpgIcon","GpgIcon2","xmlns","width","height","viewBox","children","fill","stroke","strokeWidth"],"sources":["../../src/GpgIcon.tsx"],"sourcesContent":[null],"mappings":"AAYI,SAAAA,GAAA,IACAC,IAAA,EAAAC,IADA,IAAAC,KAAA;AARG,OAAMC,KAAA,MAAoB,OAC/B;AAAA,IAACC,OAAA,YAAAC,SAAA;EAAA,sBAAAH,KAAA;IACCI,KAAA,EAAM;IACNC,KAAA,EAAM;IACNC,MAAA,EAAO;IACPC,OAAA,EAAQ;IACR,eAAY;IAEZC,QAAA,kBAAAV,IAAC;MACDO,KAAA;MACEC,MAAA;MACAG,IAAA;IAA6B,EAC7B,EAAiC,eACnCT,KAAA;MAAAS,IAAA;MAAAC,MAAA;MACFC,WAAA","ignoreList":[]}
1
+ {"version":3,"names":["jsx","_jsx","jsxs","_jsxs","React","GpgIcon","GpgIcon2","xmlns","width","height","viewBox","children","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","cx","cy","r","d"],"sources":["GpgIcon.native.js"],"sourcesContent":["import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React from \"react\";\nvar GpgIcon = function GpgIcon2() {\n return /* @__PURE__ */ _jsxs(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"100%\",\n height: \"100%\",\n viewBox: \"0 0 32 32\",\n \"aria-hidden\": \"true\",\n children: [\n /* @__PURE__ */ _jsx(\"rect\", {\n width: \"32\",\n height: \"32\",\n fill: \"#0093DD\"\n }),\n /* @__PURE__ */ _jsxs(\"g\", {\n fill: \"none\",\n stroke: \"#FFFFFF\",\n strokeWidth: \"2.2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: [\n /* @__PURE__ */ _jsx(\"circle\", {\n cx: \"11.5\",\n cy: \"19.5\",\n r: \"4.5\"\n }),\n /* @__PURE__ */ _jsx(\"path\", {\n d: \"m14.7 16.3 9.3-9.3\"\n }),\n /* @__PURE__ */ _jsx(\"path\", {\n d: \"m20 11 3 3 2.5-2.5-3-3\"\n })\n ]\n })\n ]\n });\n};\nexport {\n GpgIcon\n};\n//# sourceMappingURL=GpgIcon.js.map\n"],"mappings":"AAAA,SAASA,GAAG,IAAIC,IAAI,EAAEC,IAAI,IAAIC,KAAK,QAAQ,mBAAmB;AAC9D,OAAOC,KAAK,MAAM,OAAO;AACzB,IAAIC,OAAO,GAAG,SAASC,QAAQA,CAAA,EAAG;EAChC,OAAO,eAAgBH,KAAK,CAAC,KAAK,EAAE;IAClCI,KAAK,EAAE,4BAA4B;IACnCC,KAAK,EAAE,MAAM;IACbC,MAAM,EAAE,MAAM;IACdC,OAAO,EAAE,WAAW;IACpB,aAAa,EAAE,MAAM;IACrBC,QAAQ,EAAE,CACR,eAAgBV,IAAI,CAAC,MAAM,EAAE;MAC3BO,KAAK,EAAE,IAAI;MACXC,MAAM,EAAE,IAAI;MACZG,IAAI,EAAE;IACR,CAAC,CAAC,EACF,eAAgBT,KAAK,CAAC,GAAG,EAAE;MACzBS,IAAI,EAAE,MAAM;MACZC,MAAM,EAAE,SAAS;MACjBC,WAAW,EAAE,KAAK;MAClBC,aAAa,EAAE,OAAO;MACtBC,cAAc,EAAE,OAAO;MACvBL,QAAQ,EAAE,CACR,eAAgBV,IAAI,CAAC,QAAQ,EAAE;QAC7BgB,EAAE,EAAE,MAAM;QACVC,EAAE,EAAE,MAAM;QACVC,CAAC,EAAE;MACL,CAAC,CAAC,EACF,eAAgBlB,IAAI,CAAC,MAAM,EAAE;QAC3BmB,CAAC,EAAE;MACL,CAAC,CAAC,EACF,eAAgBnB,IAAI,CAAC,MAAM,EAAE;QAC3BmB,CAAC,EAAE;MACL,CAAC,CAAC;IAEN,CAAC,CAAC;EAEN,CAAC,CAAC;AACJ,CAAC;AACD,SACEf,OAAO","ignoreList":[]}
@@ -2,6 +2,7 @@ import { useContext, useMemo, useRef, useState } from "react";
2
2
  import { useQuery } from "@tanstack/react-query";
3
3
  import { Context as ConnectKitContext } from "@multiplatform.one/connectkit";
4
4
  import { GpgContext, GpgStatusState } from "./GpgContext.mjs";
5
+ import { assertGpgSignature, gpgSignCommand } from "./signer.mjs";
5
6
  import { jsx } from "react/jsx-runtime";
6
7
  const GPG_NONCE_QUERY_KEY = "ckGpgNonce";
7
8
  const b64 = s => window.btoa(unescape(encodeURIComponent(s)));
@@ -47,12 +48,14 @@ const GpgProvider = ({
47
48
  const message = useMemo(() => nonce.data ? (buildMessageRef.current ?? defaultBuildMessage)({
48
49
  nonce: nonce.data
49
50
  }) : null, [nonce.data]);
50
- const command = useMemo(() => message ? `{ printf %s '${message.replace(/'/g, "'\\''")}' | gpg --detach-sign --armor; gpg --armor --export; }` : null, [message]);
51
+ const command = useMemo(() => message ? gpgSignCommand(message) : null, [message]);
51
52
  const signIn = async pastedBlob => {
52
- const blob = pastedBlob.trim();
53
- if (!blob.includes("-----BEGIN PGP SIGNATURE-----") || !blob.includes("-----BEGIN PGP PUBLIC KEY BLOCK-----")) {
53
+ let blob;
54
+ try {
55
+ blob = assertGpgSignature(pastedBlob);
56
+ } catch (error) {
54
57
  setStatus(GpgStatusState.ERROR);
55
- throw new Error("Paste the FULL output \u2014 it must contain both a PGP SIGNATURE and a PUBLIC KEY block.");
58
+ throw error;
56
59
  }
57
60
  if (!message) {
58
61
  setStatus(GpgStatusState.ERROR);
@@ -1 +1 @@
1
- {"version":3,"names":["useContext","useMemo","useRef","useState","useQuery","Context","ConnectKitContext","GpgContext","GpgStatusState","jsx","GPG_NONCE_QUERY_KEY","b64","s","window","btoa","unescape","encodeURIComponent","defaultBuildMessage","nonce","location","host","origin","Date","toISOString","GpgProvider","children","enabled","nonceRefetchInterval","buildMessage","onSignIn","gpgConfig","status","setStatus","READY","resetStatus","Error","queryKey","queryFn","getNonce","refetchInterval","refetchOnWindowFocus","refetchOnReconnect","staleTime","Infinity","buildMessageRef","current","message","data","command","replace","signIn","pastedBlob","blob","trim","includes","ERROR","LOADING","result","onSign","username","password","SUCCESS","error","Provider","value"],"sources":["../../src/GpgProvider.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useContext","useMemo","useRef","useState","useQuery","Context","ConnectKitContext","GpgContext","GpgStatusState","assertGpgSignature","gpgSignCommand","jsx","GPG_NONCE_QUERY_KEY","b64","s","window","btoa","unescape","encodeURIComponent","defaultBuildMessage","nonce","location","host","origin","Date","toISOString","GpgProvider","children","enabled","nonceRefetchInterval","buildMessage","onSignIn","gpgConfig","status","setStatus","READY","resetStatus","Error","queryKey","queryFn","getNonce","refetchInterval","refetchOnWindowFocus","refetchOnReconnect","staleTime","Infinity","buildMessageRef","current","message","data","command","signIn","pastedBlob","blob","error","ERROR","LOADING","result","onSign","username","password","SUCCESS","Provider","value"],"sources":["../../src/GpgProvider.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -3,6 +3,7 @@ import { useContext, useMemo, useRef, useState } from "react";
3
3
  import { useQuery } from "@tanstack/react-query";
4
4
  import { Context as ConnectKitContext } from "@multiplatform.one/connectkit";
5
5
  import { GpgContext, GpgStatusState } from "./GpgContext.native.js";
6
+ import { assertGpgSignature, gpgSignCommand } from "./signer.native.js";
6
7
  var GPG_NONCE_QUERY_KEY = "ckGpgNonce";
7
8
  var b64 = function b642(s) {
8
9
  return window.btoa(unescape(encodeURIComponent(s)));
@@ -59,13 +60,15 @@ var GpgProvider = function GpgProvider2(param) {
59
60
  }) : null;
60
61
  }, [nonce.data]);
61
62
  var command = useMemo(function () {
62
- return message ? `{ printf %s '${message.replace(/'/g, "'\\''")}' | gpg --detach-sign --armor; gpg --armor --export; }` : null;
63
+ return message ? gpgSignCommand(message) : null;
63
64
  }, [message]);
64
65
  var signIn = async function signIn2(pastedBlob) {
65
- var blob = pastedBlob.trim();
66
- if (!blob.includes("-----BEGIN PGP SIGNATURE-----") || !blob.includes("-----BEGIN PGP PUBLIC KEY BLOCK-----")) {
66
+ var blob;
67
+ try {
68
+ blob = assertGpgSignature(pastedBlob);
69
+ } catch (error) {
67
70
  setStatus(GpgStatusState.ERROR);
68
- throw new Error("Paste the FULL output \u2014 it must contain both a PGP SIGNATURE and a PUBLIC KEY block.");
71
+ throw error;
69
72
  }
70
73
  if (!message) {
71
74
  setStatus(GpgStatusState.ERROR);
@@ -1 +1 @@
1
- {"version":3,"names":["jsx","_jsx","useContext","useMemo","useRef","useState","useQuery","Context","ConnectKitContext","GpgContext","GpgStatusState","GPG_NONCE_QUERY_KEY","b64","b642","s","window","btoa","unescape","encodeURIComponent","defaultBuildMessage","param","nonce","location","host","origin","Date","toISOString","GpgProvider","GpgProvider2","children","enabled","nonceRefetchInterval","buildMessage","onSignIn","gpgConfig","status","setStatus","READY","resetStatus","resetStatus2","Error","queryKey","queryFn","getNonce","refetchInterval","refetchOnWindowFocus","refetchOnReconnect","staleTime","Infinity","buildMessageRef","current","message","_buildMessageRef_current","data","command","replace","signIn","signIn2","pastedBlob","blob","trim","includes","ERROR","LOADING","result","onSign","username","password","SUCCESS","error","Provider","value"],"sources":["../../src/GpgProvider.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["jsx","_jsx","useContext","useMemo","useRef","useState","useQuery","Context","ConnectKitContext","GpgContext","GpgStatusState","assertGpgSignature","gpgSignCommand","GPG_NONCE_QUERY_KEY","b64","b642","s","window","btoa","unescape","encodeURIComponent","defaultBuildMessage","param","nonce","location","host","origin","Date","toISOString","GpgProvider","GpgProvider2","children","enabled","nonceRefetchInterval","buildMessage","onSignIn","gpgConfig","status","setStatus","READY","resetStatus","resetStatus2","Error","queryKey","queryFn","getNonce","refetchInterval","refetchOnWindowFocus","refetchOnReconnect","staleTime","Infinity","buildMessageRef","current","message","_buildMessageRef_current","data","command","signIn","signIn2","pastedBlob","blob","error","ERROR","LOADING","result","onSign","username","password","SUCCESS","Provider","value"],"sources":["GpgProvider.native.js"],"sourcesContent":["import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useContext, useMemo, useRef, useState } from \"react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { Context as ConnectKitContext } from \"@multiplatform.one/connectkit\";\nimport { GpgContext, GpgStatusState } from \"./GpgContext\";\nimport { assertGpgSignature, gpgSignCommand } from \"./signer\";\nvar GPG_NONCE_QUERY_KEY = \"ckGpgNonce\";\nvar b64 = function b642(s) {\n return window.btoa(unescape(encodeURIComponent(s)));\n};\nfunction defaultBuildMessage(param) {\n var { nonce } = param;\n return `${window.location.host} wants you to sign in with your GPG key.\n\nURI: ${window.location.origin}\nVersion: 1\nNonce: ${nonce}\nIssued At: ${(/* @__PURE__ */ new Date()).toISOString()}`;\n}\nvar GpgProvider = function GpgProvider2(param) {\n var { children, enabled = true, nonceRefetchInterval = false, buildMessage, onSignIn, ...gpgConfig } = param;\n var [status, setStatus] = useState(GpgStatusState.READY);\n var resetStatus = function resetStatus2() {\n return setStatus(GpgStatusState.READY);\n };\n if (useContext(GpgContext)) {\n throw new Error(\"Multiple, nested usages of GpgProvider detected. Please use only one.\");\n }\n if (useContext(ConnectKitContext)) {\n throw new Error(\"ConnectKitProvider must be mounted inside GpgProvider.\");\n }\n var nonce = useQuery({\n queryKey: [\n GPG_NONCE_QUERY_KEY\n ],\n queryFn: function queryFn() {\n return gpgConfig.getNonce();\n },\n refetchInterval: nonceRefetchInterval,\n // The challenge the user signs MUST equal the one we submit. Never refetch the nonce\n // out from under an in-flight signature — especially on window-focus, which fires every\n // time the user tabs to their terminal to run gpg and back.\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n staleTime: Infinity\n });\n var buildMessageRef = useRef(buildMessage);\n buildMessageRef.current = buildMessage;\n var message = useMemo(function() {\n var _buildMessageRef_current;\n return nonce.data ? ((_buildMessageRef_current = buildMessageRef.current) !== null && _buildMessageRef_current !== void 0 ? _buildMessageRef_current : defaultBuildMessage)({\n nonce: nonce.data\n }) : null;\n }, [\n nonce.data\n ]);\n var command = useMemo(function() {\n return message ? gpgSignCommand(message) : null;\n }, [\n message\n ]);\n var signIn = async function signIn2(pastedBlob) {\n var blob;\n try {\n blob = assertGpgSignature(pastedBlob);\n } catch (error) {\n setStatus(GpgStatusState.ERROR);\n throw error;\n }\n if (!message) {\n setStatus(GpgStatusState.ERROR);\n throw new Error(\"Could not fetch nonce\");\n }\n try {\n setStatus(GpgStatusState.LOADING);\n var result = await gpgConfig.onSign({\n username: b64(blob),\n password: b64(message),\n message\n });\n if (result === false) throw new Error(\"GPG sign-in was rejected\");\n setStatus(GpgStatusState.SUCCESS);\n onSignIn === null || onSignIn === void 0 ? void 0 : onSignIn();\n return true;\n } catch (error) {\n setStatus(GpgStatusState.ERROR);\n throw error;\n }\n };\n return /* @__PURE__ */ _jsx(GpgContext.Provider, {\n value: {\n enabled,\n nonceRefetchInterval,\n buildMessage,\n ...gpgConfig,\n nonce,\n message,\n command,\n status,\n signIn,\n resetStatus\n },\n children\n });\n};\nexport {\n GPG_NONCE_QUERY_KEY,\n GpgProvider\n};\n//# sourceMappingURL=GpgProvider.js.map\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["jsx","_jsx","jsxs","_jsxs","React","useState","useContext","PageContent","ModalBody","ModalContent","Button","CopyToClipboard","useGpg","_instanceof","left","right","Symbol","hasInstance","textarea","width","boxSizing","fontFamily","fontSize","lineHeight","padding","borderRadius","border","background","color","resize","label","textAlign","fontWeight","margin","SignInWithGpg","SignInWithGpg2","context","message","command","signIn","isLoading","isReady","pasted","setPasted","error","setError","busy","setBusy","onSubmit","onSubmit2","setTimeout","setOpen","e","Error","style","children","paddingBottom","gap","display","flexDirection","variant","string","readOnly","rows","value"],"sources":["../../src/SignInWithGpg.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAA+BA,GAAA,IAAAC,IAAA,EAAAC,IAAgB,IAAAC,KAAA;AAE/C,OAAAC,KAAA,IAAAC,QAAA;AAAA,SACEC,UAAA,EAAAC,WAAA,EAAAC,SAAA,EAAAC,YAAA,EAAAC,MAAA,EAAAC,eAAA;AAAA,SACAC,MAAA;AAAA,SACAC,YAAAC,IAAA,EAAAC,KAAA;EACA;;EACA,IAAAA,KAAA,mBAAAC,MAAA,oBAAAD,KAAA,CAAAC,MAAA,CAAAC,WAAA;IACA,SAAAF,KAAA,CAAAC,MAAA,CAAAC,WAAA,EAAAH,IAAA;EAAA,OACK;IACP,OAASA,IAAA,YAAcC,KAAA;EAgDf;AA3CR;AAAgC,IAC9BG,QAAO;EACPC,KAAA,QAAW;EACXC,SAAA,cAAY;EACZC,UAAU;EACVC,QAAA,IAAY;EACZC,UAAS;EACTC,OAAA;EACAC,YAAQ;EACRC,MAAA,6CAAY;EACZC,UAAO;EACPC,KAAA,iCAAQ;EACVC,MAAA;AACA;AAA6B,IAC3BC,KAAA;EACAC,SAAA,EAAU;EACVT,QAAA,IAAY;EACZU,UAAQ;EACVC,MAAA;AAEA;AACE,IAAAC,aAAM,GAAU,SAAWC,eAAA;EAC3B,IAAAC,OAAQ,GAAA9B,UAAS,EAAS;EAC1B;IAAM+B,OAAC;IAAQC,OAAA;IAASC,MAAI;IAAAC,SAAW;IAAAC;EAAA,IAAA7B,MAAA;EACvC,KAAA8B,MAAO,EAAAC,SAAe,IAAItC,QAAA,CAAwB;EAClD,KAAAuC,KAAO,EAAAC,QAAa,IAAIxC,QAAA,CAAS,KAAK;EAEtC,KAAAyC,IAAM,EAAAC,OAAW,IAAA1C,QAAY;EAC3B,IAAA2C,QAAS,GAAI,eAAAC,UAAA;IACbJ,QAAQ,KAAI;IACZE,OAAI;IACF;MAEA,MAAAR,MAAW,CAAAG,MAAM;MACnBQ,UAAY;QACV,OAASd,OAAA,CAAAe,OAAa,MAAQ;MAC9B;IACF,SAAAC,CAAA;MACFP,QAAA,CAAAhC,WAAA,CAAAuC,CAAA,EAAAC,KAAA,IAAAD,CAAA,CAAAf,OAAA;MAEAU,OACE;IAEI;EAAgE;EAE9D,sBAAA9C,IAAC,CAAAM,WAAA;IAED+C,KACA;MAEAnC,KACF;IACA;IAAAoC,QAAC,iBAAApD,KAAA,CAAAM,YAAA;MAAA6C,KAAA;QACCE,aAAQ;QACRC,GAAA;MAAM;MACgDF,QACtD,EAAO,gBAAAtD,IAAA,CAAAO,SAAA;QACT8C,KAAA,EAAAxB,KAAA;QACAyB,QAAA;MACA,IAAC,eAAApD,KAAA;QAAAmD,KAAA;UACCI,OAAM;UACNC,aAAO;UACPF,GAAA;QACA;QACAF,QAAO,kBAAAtD,IAAA,CAAAU,eAAA;UACTiD,OAAA;UACAC,MAAA,EAAAvB,OAAC,KAAO,QAAAA,OAAS,KAAU,SAAUA,OAAC,KAAW;UAI/CiB,QAAA;QAAC,mBAAAtD,IAAA,CAAAU,eAAA;UACCiD,OAAO;UACLC,MAAO,EAAAxB,OAAA,aAAAA,OAAA,cAAAA,OAAA;UACPkB,QAAU;QACV;MAGD,mBAAAtD,IAAA;QACH6D,QAAA;QAGNC,IAAA;QAEJC,KAAA,EAAA3B,OAAA,aAAAA,OAAA,cAAAA,OAAA,GAAAG,SAAA;QAEOc,KAAA,EAAApC","ignoreList":[]}
1
+ {"version":3,"names":["jsx","_jsx","jsxs","_jsxs","React","useState","useContext","PageContent","ModalBody","ModalContent","Button","CopyToClipboard","useGpg","_instanceof","left","right","Symbol","hasInstance","textarea","width","boxSizing","fontFamily","fontSize","lineHeight","padding","borderRadius","border","background","color","resize","label","textAlign","fontWeight","margin","SignInWithGpg","SignInWithGpg2","context","message","command","signIn","isLoading","isReady","pasted","setPasted","error","setError","busy","setBusy","onSubmit","onSubmit2","setTimeout","setOpen","e","Error","style","children","paddingBottom","gap","display","flexDirection","variant","string","readOnly","rows","value","onChange","target","placeholder","onClick","disabled","waiting","arrow","SignInWithGpg_default","default"],"sources":["SignInWithGpg.native.js"],"sourcesContent":["import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React, { useState } from \"react\";\nimport { useContext, PageContent, ModalBody, ModalContent, Button, CopyToClipboard } from \"@multiplatform.one/connectkit\";\nimport { useGpg } from \"./useGpg\";\nfunction _instanceof(left, right) {\n \"@swc/helpers - instanceof\";\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else {\n return left instanceof right;\n }\n}\nvar textarea = {\n width: \"100%\",\n boxSizing: \"border-box\",\n fontFamily: \"var(--ck-font-family, monospace)\",\n fontSize: 11,\n lineHeight: 1.4,\n padding: 8,\n borderRadius: \"var(--ck-primary-button-border-radius, 12px)\",\n border: \"1px solid var(--ck-body-divider, #d3d3d3)\",\n background: \"var(--ck-body-background-secondary, #f6f7f9)\",\n color: \"var(--ck-body-color, inherit)\",\n resize: \"vertical\"\n};\nvar label = {\n textAlign: \"start\",\n fontSize: 14,\n fontWeight: 500,\n margin: \"4px 0\"\n};\nvar SignInWithGpg = function SignInWithGpg2() {\n var context = useContext();\n var { message, command, signIn, isLoading, isReady } = useGpg();\n var [pasted, setPasted] = useState(\"\");\n var [error, setError] = useState(null);\n var [busy, setBusy] = useState(false);\n var onSubmit = async function onSubmit2() {\n setError(null);\n setBusy(true);\n try {\n await signIn(pasted);\n setTimeout(function() {\n return context.setOpen(false);\n }, 1e3);\n } catch (e) {\n setError(_instanceof(e, Error) ? e.message : \"GPG sign-in failed\");\n setBusy(false);\n }\n };\n return /* @__PURE__ */ _jsx(PageContent, {\n style: {\n width: 320\n },\n children: /* @__PURE__ */ _jsxs(ModalContent, {\n style: {\n paddingBottom: 8,\n gap: 6\n },\n children: [\n /* @__PURE__ */ _jsx(ModalBody, {\n style: label,\n children: \"1. Sign the challenge in your terminal:\"\n }),\n /* @__PURE__ */ _jsxs(\"div\", {\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: 6\n },\n children: [\n /* @__PURE__ */ _jsx(CopyToClipboard, {\n variant: \"button\",\n string: command !== null && command !== void 0 ? command : \"\",\n children: \"Copy gpg command\"\n }),\n /* @__PURE__ */ _jsx(CopyToClipboard, {\n variant: \"button\",\n string: message !== null && message !== void 0 ? message : \"\",\n children: \"Copy message only\"\n })\n ]\n }),\n /* @__PURE__ */ _jsx(\"textarea\", {\n readOnly: true,\n rows: 4,\n value: message !== null && message !== void 0 ? message : isLoading ? \"Loading challenge\\u2026\" : \"\",\n style: textarea\n }),\n /* @__PURE__ */ _jsx(ModalBody, {\n style: label,\n children: \"2. Paste the full output below:\"\n }),\n /* @__PURE__ */ _jsx(\"textarea\", {\n rows: 6,\n value: pasted,\n onChange: function onChange(e) {\n return setPasted(e.target.value);\n },\n placeholder: \"-----BEGIN PGP SIGNATURE----- \\u2026 and your -----BEGIN PGP PUBLIC KEY BLOCK-----\",\n style: textarea\n }),\n /* @__PURE__ */ _jsx(Button, {\n onClick: onSubmit,\n disabled: !isReady || !pasted || busy,\n waiting: busy,\n arrow: true,\n children: \"Sign in\"\n }),\n error && /* @__PURE__ */ _jsx(ModalBody, {\n style: {\n color: \"var(--ck-body-color-danger, #c9190b)\",\n fontSize: 13,\n textAlign: \"start\"\n },\n children: error\n })\n ]\n })\n });\n};\nvar SignInWithGpg_default = SignInWithGpg;\nexport {\n SignInWithGpg_default as default\n};\n//# sourceMappingURL=SignInWithGpg.js.map\n"],"mappings":"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","ignoreList":[]}
@@ -1,8 +1,9 @@
1
1
  import { useGpg } from "./useGpg.mjs";
2
+ import { createGpgSigner, useGpgSigner, gpgSignCommand, assertGpgSignature, gpgSignatureCovers } from "./signer.mjs";
2
3
  import { GpgProvider, GPG_NONCE_QUERY_KEY } from "./GpgProvider.mjs";
3
4
  import { GpgContext, GpgStatusState } from "./GpgContext.mjs";
4
5
  import { default as default2 } from "./SignInWithGpg.mjs";
5
6
  import { default as default3, GPGButton } from "./GpgButton.mjs";
6
7
  import { gpgScreen, GpgScreenRegistrar, GpgBridge } from "./screens.mjs";
7
- export { GPGButton, GPG_NONCE_QUERY_KEY, GpgBridge, GpgContext, GpgProvider, GpgScreenRegistrar, GpgStatusState, default2 as SignInWithGpg, default3 as SignInWithGpgButton, gpgScreen, useGpg };
8
+ export { GPGButton, GPG_NONCE_QUERY_KEY, GpgBridge, GpgContext, GpgProvider, GpgScreenRegistrar, GpgStatusState, default2 as SignInWithGpg, default3 as SignInWithGpgButton, assertGpgSignature, createGpgSigner, gpgScreen, gpgSignCommand, gpgSignatureCovers, useGpg, useGpgSigner };
8
9
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"names":["useGpg","GpgProvider","GPG_NONCE_QUERY_KEY","GpgContext","GpgStatusState","default","default2","default3","GPGButton","gpgScreen","GpgScreenRegistrar","GpgBridge"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAKA,SAASA,MAAA,QAAc;AACvB,SAASC,WAAA,EAAaC,mBAAA,QAA2B;AACjD,SAASC,UAAA,EAAYC,cAAA,QAAsB;AAG3C,SAAoBC,OAAA,IAAXC,QAAA,QAAgC;AACzC,SAAoBD,OAAA,IAAXE,QAAA,EAAgCC,SAAA,QAAiB;AAE1D,SAASC,SAAA,EAAWC,kBAAA,EAAoBC,SAAA,QAAiB","ignoreList":[]}
1
+ {"version":3,"names":["useGpg","createGpgSigner","useGpgSigner","gpgSignCommand","assertGpgSignature","gpgSignatureCovers","GpgProvider","GPG_NONCE_QUERY_KEY","GpgContext","GpgStatusState","default","default2","default3","GPGButton","gpgScreen","GpgScreenRegistrar","GpgBridge"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAKA,SAASA,MAAA,QAAc;AACvB,SACEC,eAAA,EACAC,YAAA,EACAC,cAAA,EACAC,kBAAA,EACAC,kBAAA,QAGK;AACP,SAASC,WAAA,EAAaC,mBAAA,QAA2B;AACjD,SAASC,UAAA,EAAYC,cAAA,QAAsB;AAG3C,SAAoBC,OAAA,IAAXC,QAAA,QAAgC;AACzC,SAAoBD,OAAA,IAAXE,QAAA,EAAgCC,SAAA,QAAiB;AAE1D,SAASC,SAAA,EAAWC,kBAAA,EAAoBC,SAAA,QAAiB","ignoreList":[]}
@@ -1,8 +1,9 @@
1
1
  import { useGpg } from "./useGpg.native.js";
2
+ import { createGpgSigner, useGpgSigner, gpgSignCommand, assertGpgSignature, gpgSignatureCovers } from "./signer.native.js";
2
3
  import { GpgProvider, GPG_NONCE_QUERY_KEY } from "./GpgProvider.native.js";
3
4
  import { GpgContext, GpgStatusState } from "./GpgContext.native.js";
4
5
  import { default as default2 } from "./SignInWithGpg.native.js";
5
6
  import { default as default3, GPGButton } from "./GpgButton.native.js";
6
7
  import { gpgScreen, GpgScreenRegistrar, GpgBridge } from "./screens.native.js";
7
- export { GPGButton, GPG_NONCE_QUERY_KEY, GpgBridge, GpgContext, GpgProvider, GpgScreenRegistrar, GpgStatusState, default2 as SignInWithGpg, default3 as SignInWithGpgButton, gpgScreen, useGpg };
8
+ export { GPGButton, GPG_NONCE_QUERY_KEY, GpgBridge, GpgContext, GpgProvider, GpgScreenRegistrar, GpgStatusState, default2 as SignInWithGpg, default3 as SignInWithGpgButton, assertGpgSignature, createGpgSigner, gpgScreen, gpgSignCommand, gpgSignatureCovers, useGpg, useGpgSigner };
8
9
  //# sourceMappingURL=index.native.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useGpg","GpgProvider","GPG_NONCE_QUERY_KEY","GpgContext","GpgStatusState","default","default2","default3","GPGButton","gpgScreen","GpgScreenRegistrar","GpgBridge"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAKA,SAASA,MAAA,QAAc;AACvB,SAASC,WAAA,EAAaC,mBAAA,QAA2B;AACjD,SAASC,UAAA,EAAYC,cAAA,QAAsB;AAG3C,SAAoBC,OAAA,IAAXC,QAAA,QAAgC;AACzC,SAAoBD,OAAA,IAAXE,QAAA,EAAgCC,SAAA,QAAiB;AAE1D,SAASC,SAAA,EAAWC,kBAAA,EAAoBC,SAAA,QAAiB","ignoreList":[]}
1
+ {"version":3,"names":["useGpg","createGpgSigner","useGpgSigner","gpgSignCommand","assertGpgSignature","gpgSignatureCovers","GpgProvider","GPG_NONCE_QUERY_KEY","GpgContext","GpgStatusState","default","default2","default3","GPGButton","gpgScreen","GpgScreenRegistrar","GpgBridge","SignInWithGpg","SignInWithGpgButton"],"sources":["index.native.js"],"sourcesContent":["import { useGpg } from \"./useGpg\";\nimport { createGpgSigner, useGpgSigner, gpgSignCommand, assertGpgSignature, gpgSignatureCovers } from \"./signer\";\nimport { GpgProvider, GPG_NONCE_QUERY_KEY } from \"./GpgProvider\";\nimport { GpgContext, GpgStatusState } from \"./GpgContext\";\nimport { default as default2 } from \"./SignInWithGpg\";\nimport { default as default3, GPGButton } from \"./GpgButton\";\nimport { gpgScreen, GpgScreenRegistrar, GpgBridge } from \"./screens\";\nexport {\n GPGButton,\n GPG_NONCE_QUERY_KEY,\n GpgBridge,\n GpgContext,\n GpgProvider,\n GpgScreenRegistrar,\n GpgStatusState,\n default2 as SignInWithGpg,\n default3 as SignInWithGpgButton,\n assertGpgSignature,\n createGpgSigner,\n gpgScreen,\n gpgSignCommand,\n gpgSignatureCovers,\n useGpg,\n useGpgSigner\n};\n//# sourceMappingURL=index.js.map\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,oBAAU;AACjC,SAASC,eAAe,EAAEC,YAAY,EAAEC,cAAc,EAAEC,kBAAkB,EAAEC,kBAAkB,QAAQ,oBAAU;AAChH,SAASC,WAAW,EAAEC,mBAAmB,QAAQ,yBAAe;AAChE,SAASC,UAAU,EAAEC,cAAc,QAAQ,wBAAc;AACzD,SAASC,OAAO,IAAIC,QAAQ,QAAQ,2BAAiB;AACrD,SAASD,OAAO,IAAIE,QAAQ,EAAEC,SAAS,QAAQ,uBAAa;AAC5D,SAASC,SAAS,EAAEC,kBAAkB,EAAEC,SAAS,QAAQ,qBAAW;AACpE,SACEH,SAAS,EACTN,mBAAmB,EACnBS,SAAS,EACTR,UAAU,EACVF,WAAW,EACXS,kBAAkB,EAClBN,cAAc,EACdE,QAAQ,IAAIM,aAAa,EACzBL,QAAQ,IAAIM,mBAAmB,EAC/Bd,kBAAkB,EAClBH,eAAe,EACfa,SAAS,EACTX,cAAc,EACdE,kBAAkB,EAClBL,MAAM,EACNE,YAAY","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","React","ModalStateProvider","routes","useRegisterScreens","useContext","useReactContext","SignInWithGpg","GpgContext","GpgIcon","gpgScreen","id","SIGNINWITHGPG","component","heading","availableWhen","showBack","state","connected","onBack","api","setRoute","CONNECTORS","showInfo","listEntry","name","icon","visibleWhen","signInWithGpg","GpgScreenRegistrar","GpgScreenRegistrar2","GpgBridge","GpgBridge2","param","children"],"sources":["../../src/screens.tsx"],"sourcesContent":[null],"mappings":"AACA,SAAAA,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AAAA,OACEC,KAAA;AAAA,SACAC,kBAAA,EAAAC,MAAA,EAAAC,kBAAA;AAAA,SACAC,UAAA,IAAAC,eAAA;AAAA,OAGKC,aAAA;AACP,SAASC,UAAA,QAAc;AACvB,SAAOC,OAAA,6BAAmB;AAC1B,IAAAC,SAAS;EACTC,EAAA,EAAAR,MAAS,CAAAS,aAAe;EAiBdC,SA0BN,EAAAN,aAAA;EApCGO,OAAM,oBAAuB;EAClCC,aAAW,WAAAA,cAAA;IACX,WAAW;EACX;EACAC,QAAA,WAAeA,QAAMA,CAAAC,KAAA;IACrB,OAAAA,KAAW,CAAAC,SAAU,KAAM;EAC3B;EACAC,MAAA,WAAUA,OAAAC,GAAA;IACV,OAAAA,GAAW,CAAAC,QAAA,CAAAlB,MAAA,CAAAmB,UAAA;EAAA;EACHC,QACA;EAASC,SACf;IACFC,IAAA;IACFC,IAAA,iBAAA9B,IAAA,CAAAa,OAAA;IAOOkB,WAAM,WAAAA,WAAqCA,CAAAV,KAAA;MAChD,SAAAA,KAAA,CAAmBW,aAAW;IAC9B;EACF;AAQO;AAAoF,IACzFC,kBAAA,YAAAC,oBAAA;EACF1B,kBAAM,EACJM,SAAM,CACN;EAEI;AAAoB;AACoC,IAAAqB,SAC1D,YAAAC,WAAAC,KAAA;EAEJ;IAAAC;EAAA,IAAAD,KAAA","ignoreList":[]}
1
+ {"version":3,"names":["jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","React","ModalStateProvider","routes","useRegisterScreens","useContext","useReactContext","SignInWithGpg","GpgContext","GpgIcon","gpgScreen","id","SIGNINWITHGPG","component","heading","availableWhen","showBack","state","connected","onBack","api","setRoute","CONNECTORS","showInfo","listEntry","name","icon","visibleWhen","signInWithGpg","GpgScreenRegistrar","GpgScreenRegistrar2","GpgBridge","GpgBridge2","param","children","_ref","_useReactContext","enabled","value"],"sources":["screens.native.js"],"sourcesContent":["import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport React from \"react\";\nimport { ModalStateProvider, routes, useRegisterScreens } from \"@multiplatform.one/connectkit\";\nimport { useContext as useReactContext } from \"react\";\nimport SignInWithGpg from \"./SignInWithGpg\";\nimport { GpgContext } from \"./GpgContext\";\nimport { GpgIcon } from \"./GpgIcon\";\nvar gpgScreen = {\n id: routes.SIGNINWITHGPG,\n component: SignInWithGpg,\n heading: \"Sign in with GPG\",\n availableWhen: function availableWhen() {\n return true;\n },\n showBack: function showBack(state) {\n return state.connected === false;\n },\n onBack: function onBack(api) {\n return api.setRoute(routes.CONNECTORS);\n },\n showInfo: false,\n listEntry: {\n name: \"GPG\",\n icon: /* @__PURE__ */ _jsx(GpgIcon, {}),\n visibleWhen: function visibleWhen(state) {\n return !!state.signInWithGpg;\n }\n }\n};\nvar GpgScreenRegistrar = function GpgScreenRegistrar2() {\n useRegisterScreens([\n gpgScreen\n ]);\n return null;\n};\nvar GpgBridge = function GpgBridge2(param) {\n var { children } = param;\n var _ref;\n var _useReactContext;\n var signInWithGpg = (_ref = (_useReactContext = useReactContext(GpgContext)) === null || _useReactContext === void 0 ? void 0 : _useReactContext.enabled) !== null && _ref !== void 0 ? _ref : true;\n return /* @__PURE__ */ _jsxs(_Fragment, {\n children: [\n /* @__PURE__ */ _jsx(GpgScreenRegistrar, {}),\n /* @__PURE__ */ _jsx(ModalStateProvider, {\n value: {\n signInWithGpg\n },\n children\n })\n ]\n });\n};\nexport {\n GpgBridge,\n GpgScreenRegistrar,\n gpgScreen\n};\n//# sourceMappingURL=screens.js.map\n"],"mappings":"AAAA,SAASA,GAAG,IAAIC,IAAI,EAAEC,IAAI,IAAIC,KAAK,EAAEC,QAAQ,IAAIC,SAAS,QAAQ,mBAAmB;AACrF,OAAOC,KAAK,MAAM,OAAO;AACzB,SAASC,kBAAkB,EAAEC,MAAM,EAAEC,kBAAkB,QAAQ,+BAA+B;AAC9F,SAASC,UAAU,IAAIC,eAAe,QAAQ,OAAO;AACrD,OAAOC,aAAa,MAAM,2BAAiB;AAC3C,SAASC,UAAU,QAAQ,wBAAc;AACzC,SAASC,OAAO,QAAQ,qBAAW;AACnC,IAAIC,SAAS,GAAG;EACdC,EAAE,EAAER,MAAM,CAACS,aAAa;EACxBC,SAAS,EAAEN,aAAa;EACxBO,OAAO,EAAE,kBAAkB;EAC3BC,aAAa,EAAE,SAASA,aAAaA,CAAA,EAAG;IACtC,OAAO,IAAI;EACb,CAAC;EACDC,QAAQ,EAAE,SAASA,QAAQA,CAACC,KAAK,EAAE;IACjC,OAAOA,KAAK,CAACC,SAAS,KAAK,KAAK;EAClC,CAAC;EACDC,MAAM,EAAE,SAASA,MAAMA,CAACC,GAAG,EAAE;IAC3B,OAAOA,GAAG,CAACC,QAAQ,CAAClB,MAAM,CAACmB,UAAU,CAAC;EACxC,CAAC;EACDC,QAAQ,EAAE,KAAK;EACfC,SAAS,EAAE;IACTC,IAAI,EAAE,KAAK;IACXC,IAAI,EAAE,eAAgB9B,IAAI,CAACa,OAAO,EAAE,CAAC,CAAC,CAAC;IACvCkB,WAAW,EAAE,SAASA,WAAWA,CAACV,KAAK,EAAE;MACvC,OAAO,CAAC,CAACA,KAAK,CAACW,aAAa;IAC9B;EACF;AACF,CAAC;AACD,IAAIC,kBAAkB,GAAG,SAASC,mBAAmBA,CAAA,EAAG;EACtD1B,kBAAkB,CAAC,CACjBM,SAAS,CACV,CAAC;EACF,OAAO,IAAI;AACb,CAAC;AACD,IAAIqB,SAAS,GAAG,SAASC,UAAUA,CAACC,KAAK,EAAE;EACzC,IAAI;IAAEC;EAAS,CAAC,GAAGD,KAAK;EACxB,IAAIE,IAAI;EACR,IAAIC,gBAAgB;EACpB,IAAIR,aAAa,GAAG,CAACO,IAAI,GAAG,CAACC,gBAAgB,GAAG9B,eAAe,CAACE,UAAU,CAAC,MAAM,IAAI,IAAI4B,gBAAgB,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAGA,gBAAgB,CAACC,OAAO,MAAM,IAAI,IAAIF,IAAI,KAAK,KAAK,CAAC,GAAGA,IAAI,GAAG,IAAI;EACnM,OAAO,eAAgBrC,KAAK,CAACE,SAAS,EAAE;IACtCkC,QAAQ,EAAE,CACR,eAAgBtC,IAAI,CAACiC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAC5C,eAAgBjC,IAAI,CAACM,kBAAkB,EAAE;MACvCoC,KAAK,EAAE;QACLV;MACF,CAAC;MACDM;IACF,CAAC,CAAC;EAEN,CAAC,CAAC;AACJ,CAAC;AACD,SACEH,SAAS,EACTF,kBAAkB,EAClBnB,SAAS","ignoreList":[]}
@@ -0,0 +1,88 @@
1
+ import { ripemd160, sha1 } from "@noble/hashes/legacy.js";
2
+ import { sha224, sha256, sha384, sha512 } from "@noble/hashes/sha2.js";
3
+ const BEGIN = "-----BEGIN PGP SIGNATURE-----";
4
+ const END = "-----END PGP SIGNATURE-----";
5
+ const hashes = {
6
+ 2: sha1,
7
+ 3: ripemd160,
8
+ 8: sha256,
9
+ 9: sha384,
10
+ 10: sha512,
11
+ 11: sha224
12
+ };
13
+ function dearmor(text) {
14
+ const start = text.indexOf(BEGIN);
15
+ const end = text.indexOf(END, start);
16
+ if (start < 0 || end < 0) throw new Error("No PGP SIGNATURE block in the paste");
17
+ const lines = text.slice(start + BEGIN.length, end).split(/\r?\n/).map(line => line.trim());
18
+ const blank = lines.indexOf("", 1);
19
+ const hasHeaders = lines.slice(1, blank < 0 ? 0 : blank).some(line => line.includes(": "));
20
+ const body = (hasHeaders ? lines.slice(blank) : lines).filter(line => line && !/^=[A-Za-z0-9+/]{4}$/.test(line));
21
+ const binary = atob(body.join(""));
22
+ return Uint8Array.from(binary, c => c.charCodeAt(0));
23
+ }
24
+ function signaturePackets(bytes) {
25
+ const packets = [];
26
+ let at = 0;
27
+ while (at < bytes.length) {
28
+ const ctb = bytes[at++];
29
+ if (!(ctb & 128)) throw new Error("The PGP SIGNATURE block is not OpenPGP data");
30
+ let tag;
31
+ let length;
32
+ if (ctb & 64) {
33
+ tag = ctb & 63;
34
+ const first = bytes[at++];
35
+ if (first < 192) length = first;else if (first < 224) length = (first - 192 << 8) + bytes[at++] + 192;else if (first === 255) {
36
+ length = new DataView(bytes.buffer, bytes.byteOffset + at, 4).getUint32(0);
37
+ at += 4;
38
+ } else throw new Error("Partial-length PGP packets are not a detached signature");
39
+ } else {
40
+ tag = ctb >> 2 & 15;
41
+ const size = [1, 2, 4][ctb & 3];
42
+ if (size === void 0) throw new Error("Indeterminate-length PGP packets are not supported");
43
+ length = 0;
44
+ for (let i = 0; i < size; i++) length = length * 256 + bytes[at++];
45
+ }
46
+ if (at + length > bytes.length) throw new Error("The PGP SIGNATURE block is truncated");
47
+ if (tag === 2) packets.push(bytes.subarray(at, at + length));
48
+ at += length;
49
+ }
50
+ return packets;
51
+ }
52
+ function quickCheck(packet, message) {
53
+ if (packet[0] !== 4) {
54
+ throw new Error(`A version ${packet[0]} PGP signature cannot be checked here; sign with a v4 key`);
55
+ }
56
+ const sigType = packet[1];
57
+ if (sigType !== 0 && sigType !== 1) {
58
+ throw new Error(`PGP signature type 0x${sigType.toString(16)} is not a document signature`);
59
+ }
60
+ const hash = hashes[packet[3]];
61
+ if (!hash) throw new Error(`PGP hash algorithm ${packet[3]} is not supported`);
62
+ const hashedEnd = 6 + (packet[4] << 8 | packet[5]);
63
+ const unhashedLength = packet[hashedEnd] << 8 | packet[hashedEnd + 1];
64
+ const left16 = hashedEnd + 2 + unhashedLength;
65
+ if (left16 + 2 > packet.length) throw new Error("The PGP signature packet is truncated");
66
+ const data = sigType === 1 ? new TextEncoder().encode(new TextDecoder().decode(message).replace(/\r?\n/g, "\n").replace(/\n/g, "\r\n")) : message;
67
+ const trailer = new Uint8Array(6);
68
+ trailer[0] = 4;
69
+ trailer[1] = 255;
70
+ new DataView(trailer.buffer).setUint32(2, hashedEnd);
71
+ const input = new Uint8Array(data.length + hashedEnd + trailer.length);
72
+ input.set(data, 0);
73
+ input.set(packet.subarray(0, hashedEnd), data.length);
74
+ input.set(trailer, data.length + hashedEnd);
75
+ const digest = hash(input);
76
+ return [packet[left16] << 8 | packet[left16 + 1], digest[0] << 8 | digest[1]];
77
+ }
78
+ function gpgSignatureCovers(blob, message) {
79
+ const packets = signaturePackets(dearmor(blob));
80
+ if (!packets.length) throw new Error("The PGP SIGNATURE block holds no signature");
81
+ const bytes = new TextEncoder().encode(message);
82
+ return packets.every(packet => {
83
+ const [expected, actual] = quickCheck(packet, bytes);
84
+ return expected === actual;
85
+ });
86
+ }
87
+ export { gpgSignatureCovers };
88
+ //# sourceMappingURL=signature.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ripemd160","sha1","sha224","sha256","sha384","sha512","BEGIN","END","hashes","dearmor","text","start","indexOf","end","Error","lines","slice","length","split","map","line","trim","blank","hasHeaders","some","includes","body","filter","test","binary","atob","join","Uint8Array","from","c","charCodeAt","signaturePackets","bytes","packets","at","ctb","tag","first","DataView","buffer","byteOffset","getUint32","size","i","push","subarray","quickCheck","packet","message","sigType","toString","hash","hashedEnd","unhashedLength","left16","data","TextEncoder","encode","TextDecoder","decode","replace","trailer","setUint32","input","set","digest","gpgSignatureCovers","blob","every","expected","actual"],"sources":["../../src/signature.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}