@multiplatform.one/gpg 7.17.0 → 7.19.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.
- package/dist/cjs/GpgIcon.cjs +55 -0
- package/dist/cjs/GpgIcon.native.js +72 -0
- package/dist/cjs/GpgIcon.native.js.map +1 -0
- package/dist/cjs/GpgProvider.cjs +7 -4
- package/dist/cjs/GpgProvider.native.js +7 -4
- package/dist/cjs/GpgProvider.native.js.map +1 -1
- package/dist/cjs/index.cjs +7 -1
- package/dist/cjs/index.native.js +7 -1
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/screens.cjs +9 -2
- package/dist/cjs/screens.native.js +15 -2
- package/dist/cjs/screens.native.js.map +1 -1
- package/dist/cjs/signature.cjs +113 -0
- package/dist/cjs/signature.native.js +124 -0
- package/dist/cjs/signature.native.js.map +1 -0
- package/dist/cjs/signer.cjs +119 -0
- package/dist/cjs/signer.native.js +150 -0
- package/dist/cjs/signer.native.js.map +1 -0
- package/dist/esm/GpgIcon.mjs +30 -0
- package/dist/esm/GpgIcon.mjs.map +1 -0
- package/dist/esm/GpgIcon.native.js +33 -0
- package/dist/esm/GpgIcon.native.js.map +1 -0
- package/dist/esm/GpgProvider.mjs +7 -4
- package/dist/esm/GpgProvider.mjs.map +1 -1
- package/dist/esm/GpgProvider.native.js +7 -4
- package/dist/esm/GpgProvider.native.js.map +1 -1
- package/dist/esm/index.mjs +2 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +2 -1
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/screens.mjs +9 -2
- package/dist/esm/screens.mjs.map +1 -1
- package/dist/esm/screens.native.js +15 -2
- package/dist/esm/screens.native.js.map +1 -1
- package/dist/esm/signature.mjs +88 -0
- package/dist/esm/signature.mjs.map +1 -0
- package/dist/esm/signature.native.js +96 -0
- package/dist/esm/signature.native.js.map +1 -0
- package/dist/esm/signer.mjs +88 -0
- package/dist/esm/signer.mjs.map +1 -0
- package/dist/esm/signer.native.js +116 -0
- package/dist/esm/signer.native.js.map +1 -0
- package/package.json +16 -3
- package/src/GpgIcon.tsx +20 -0
- package/src/GpgProvider.tsx +7 -19
- package/src/index.ts +10 -1
- package/src/screens.tsx +11 -1
- package/src/signature.ts +120 -0
- package/src/signer.ts +142 -0
- package/types/GpgIcon.d.ts +3 -0
- package/types/GpgIcon.d.ts.map +1 -0
- package/types/GpgProvider.d.ts.map +1 -1
- package/types/index.d.ts +1 -0
- package/types/index.d.ts.map +1 -1
- package/types/screens.d.ts.map +1 -1
- package/types/signature.d.ts +6 -0
- package/types/signature.d.ts.map +1 -0
- package/types/signer.d.ts +47 -0
- package/types/signer.d.ts.map +1 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all) __defProp(target, name, {
|
|
7
|
+
get: all[name],
|
|
8
|
+
enumerable: true
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
14
|
+
get: () => from[key],
|
|
15
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
21
|
+
value: true
|
|
22
|
+
}), mod);
|
|
23
|
+
var GpgIcon_exports = {};
|
|
24
|
+
__export(GpgIcon_exports, {
|
|
25
|
+
GpgIcon: () => GpgIcon
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(GpgIcon_exports);
|
|
28
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
29
|
+
const GpgIcon = () => /* @__PURE__ */(0, import_jsx_runtime.jsxs)("svg", {
|
|
30
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
31
|
+
width: "100%",
|
|
32
|
+
height: "100%",
|
|
33
|
+
viewBox: "0 0 32 32",
|
|
34
|
+
"aria-hidden": "true",
|
|
35
|
+
children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)("rect", {
|
|
36
|
+
width: "32",
|
|
37
|
+
height: "32",
|
|
38
|
+
fill: "#0093DD"
|
|
39
|
+
}), /* @__PURE__ */(0, import_jsx_runtime.jsxs)("g", {
|
|
40
|
+
fill: "none",
|
|
41
|
+
stroke: "#FFFFFF",
|
|
42
|
+
strokeWidth: "2.2",
|
|
43
|
+
strokeLinecap: "round",
|
|
44
|
+
strokeLinejoin: "round",
|
|
45
|
+
children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)("circle", {
|
|
46
|
+
cx: "11.5",
|
|
47
|
+
cy: "19.5",
|
|
48
|
+
r: "4.5"
|
|
49
|
+
}), /* @__PURE__ */(0, import_jsx_runtime.jsx)("path", {
|
|
50
|
+
d: "m14.7 16.3 9.3-9.3"
|
|
51
|
+
}), /* @__PURE__ */(0, import_jsx_runtime.jsx)("path", {
|
|
52
|
+
d: "m20 11 3 3 2.5-2.5-3-3"
|
|
53
|
+
})]
|
|
54
|
+
})]
|
|
55
|
+
});
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var __create = Object.create;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
8
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __export = (target, all) => {
|
|
10
|
+
for (var name in all) __defProp(target, name, {
|
|
11
|
+
get: all[name],
|
|
12
|
+
enumerable: true
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
var __copyProps = (to, from, except, desc) => {
|
|
16
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
17
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
18
|
+
get: () => from[key],
|
|
19
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
return to;
|
|
23
|
+
};
|
|
24
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
25
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
26
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
27
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
28
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
29
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
30
|
+
value: mod,
|
|
31
|
+
enumerable: true
|
|
32
|
+
}) : target, mod));
|
|
33
|
+
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
34
|
+
value: true
|
|
35
|
+
}), mod);
|
|
36
|
+
var GpgIcon_exports = {};
|
|
37
|
+
__export(GpgIcon_exports, {
|
|
38
|
+
GpgIcon: () => GpgIcon
|
|
39
|
+
});
|
|
40
|
+
module.exports = __toCommonJS(GpgIcon_exports);
|
|
41
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
42
|
+
var import_react = __toESM(require("react"));
|
|
43
|
+
var GpgIcon = function GpgIcon2() {
|
|
44
|
+
return /* @__PURE__ */(0, import_jsx_runtime.jsxs)("svg", {
|
|
45
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
46
|
+
width: "100%",
|
|
47
|
+
height: "100%",
|
|
48
|
+
viewBox: "0 0 32 32",
|
|
49
|
+
"aria-hidden": "true",
|
|
50
|
+
children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)("rect", {
|
|
51
|
+
width: "32",
|
|
52
|
+
height: "32",
|
|
53
|
+
fill: "#0093DD"
|
|
54
|
+
}), /* @__PURE__ */(0, import_jsx_runtime.jsxs)("g", {
|
|
55
|
+
fill: "none",
|
|
56
|
+
stroke: "#FFFFFF",
|
|
57
|
+
strokeWidth: "2.2",
|
|
58
|
+
strokeLinecap: "round",
|
|
59
|
+
strokeLinejoin: "round",
|
|
60
|
+
children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)("circle", {
|
|
61
|
+
cx: "11.5",
|
|
62
|
+
cy: "19.5",
|
|
63
|
+
r: "4.5"
|
|
64
|
+
}), /* @__PURE__ */(0, import_jsx_runtime.jsx)("path", {
|
|
65
|
+
d: "m14.7 16.3 9.3-9.3"
|
|
66
|
+
}), /* @__PURE__ */(0, import_jsx_runtime.jsx)("path", {
|
|
67
|
+
d: "m20 11 3 3 2.5-2.5-3-3"
|
|
68
|
+
})]
|
|
69
|
+
})]
|
|
70
|
+
});
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=GpgIcon.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["to","__toESM","mod","isNodeMode","target","__create","__getProtoOf","__copyProps","__esModule","__defProp","value","enumerable","__toCommonJS","GpgIcon_exports","__export","GpgIcon","module","exports","import_jsx_runtime","require","import_react","GpgIcon2","jsxs","xmlns","width","height","viewBox"],"sources":["../../src/GpgIcon.tsx"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;EAAA,OAAAA,EAAA;AAAA;AAAA,IAAAC,OAAA,GAAAA,CAAAC,GAAA,EAAAC,UAAA,EAAAC,MAAA,MAAAA,MAAA,GAAAF,GAAA,WAAAG,QAAA,CAAAC,YAAA,CAAAJ,GAAA,SAAAK,WAAA;AAAA;AAAA;AAYI;AARG;AACJJ,UAAA,KAAAD,GAAA,KAAAA,GAAA,CAAAM,UAAA,GAAAC,SAAA,CAAAL,MAAA;EAAAM,KAAA,EAAAR,GAAA;EAAAS,UAAA;AAAA,KAAAP,MAAA,EAAAF,GAAA;AACO,IACNU,YAAM,GAAAV,GAAA,IAAAK,WAAA,CAAAE,SAAA;EAAAC,KAAA;AAAA,IAAAR,GAAA;AAAA,IACNW,eAAO;AAAAC,QACP,CAAAD,eAAQ;EAAAE,OACR,EAAAA,CAAA,KAAAA;AAAY;AAEZC,MAAA,CAAAC,OAAA,GAAAL,YAAA,CAAAC,eAAA;AAA4C,IAAAK,kBAC5C,GAAAC,OAAA,oBAAC;AACC,IAAAC,YAAA,GAAAnB,OAAA,CAAAkB,OAAA;AAAoC,IAAAJ,OACpC,YAAAM,SAAA;EAA6B,OAC7B,mBAAAH,kBAAA,CAAAI,IAAC;IAAgCC,KACnC;IAAAC,KAAA;IAAAC,MAAA;IACFC,OAAA","ignoreList":[]}
|
package/dist/cjs/GpgProvider.cjs
CHANGED
|
@@ -30,6 +30,7 @@ var import_react = require("react");
|
|
|
30
30
|
var import_react_query = require("@tanstack/react-query");
|
|
31
31
|
var import_connectkit = require("@multiplatform.one/connectkit");
|
|
32
32
|
var import_GpgContext = require("./GpgContext.cjs");
|
|
33
|
+
var import_signer = require("./signer.cjs");
|
|
33
34
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
34
35
|
const GPG_NONCE_QUERY_KEY = "ckGpgNonce";
|
|
35
36
|
const b64 = s => window.btoa(unescape(encodeURIComponent(s)));
|
|
@@ -75,12 +76,14 @@ const GpgProvider = ({
|
|
|
75
76
|
const message = (0, import_react.useMemo)(() => nonce.data ? (buildMessageRef.current ?? defaultBuildMessage)({
|
|
76
77
|
nonce: nonce.data
|
|
77
78
|
}) : null, [nonce.data]);
|
|
78
|
-
const command = (0, import_react.useMemo)(() => message ?
|
|
79
|
+
const command = (0, import_react.useMemo)(() => message ? (0, import_signer.gpgSignCommand)(message) : null, [message]);
|
|
79
80
|
const signIn = async pastedBlob => {
|
|
80
|
-
|
|
81
|
-
|
|
81
|
+
let blob;
|
|
82
|
+
try {
|
|
83
|
+
blob = (0, import_signer.assertGpgSignature)(pastedBlob);
|
|
84
|
+
} catch (error) {
|
|
82
85
|
setStatus(import_GpgContext.GpgStatusState.ERROR);
|
|
83
|
-
throw
|
|
86
|
+
throw error;
|
|
84
87
|
}
|
|
85
88
|
if (!message) {
|
|
86
89
|
setStatus(import_GpgContext.GpgStatusState.ERROR);
|
|
@@ -33,6 +33,7 @@ var import_react = require("react");
|
|
|
33
33
|
var import_react_query = require("@tanstack/react-query");
|
|
34
34
|
var import_connectkit = require("@multiplatform.one/connectkit");
|
|
35
35
|
var import_GpgContext = require("./GpgContext.native.js");
|
|
36
|
+
var import_signer = require("./signer.native.js");
|
|
36
37
|
var GPG_NONCE_QUERY_KEY = "ckGpgNonce";
|
|
37
38
|
var b64 = function b642(s) {
|
|
38
39
|
return window.btoa(unescape(encodeURIComponent(s)));
|
|
@@ -89,13 +90,15 @@ var GpgProvider = function GpgProvider2(param) {
|
|
|
89
90
|
}) : null;
|
|
90
91
|
}, [nonce.data]);
|
|
91
92
|
var command = (0, import_react.useMemo)(function () {
|
|
92
|
-
return message ?
|
|
93
|
+
return message ? (0, import_signer.gpgSignCommand)(message) : null;
|
|
93
94
|
}, [message]);
|
|
94
95
|
var signIn = async function signIn2(pastedBlob) {
|
|
95
|
-
var blob
|
|
96
|
-
|
|
96
|
+
var blob;
|
|
97
|
+
try {
|
|
98
|
+
blob = (0, import_signer.assertGpgSignature)(pastedBlob);
|
|
99
|
+
} catch (error) {
|
|
97
100
|
setStatus(import_GpgContext.GpgStatusState.ERROR);
|
|
98
|
-
throw
|
|
101
|
+
throw error;
|
|
99
102
|
}
|
|
100
103
|
if (!message) {
|
|
101
104
|
setStatus(import_GpgContext.GpgStatusState.ERROR);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","GpgProvider_exports","__export","GPG_NONCE_QUERY_KEY","GpgProvider","module","exports","import_jsx_runtime","require","import_react","import_react_query","import_connectkit","import_GpgContext","b64","b642","s","window","btoa","unescape","encodeURIComponent","defaultBuildMessage","param","nonce","location","host","origin","Date","toISOString","GpgProvider2","children","enabled","nonceRefetchInterval","buildMessage","onSignIn","gpgConfig","status","setStatus","useState","GpgStatusState","READY","resetStatus","resetStatus2","useContext","GpgContext","Error","Context","useQuery","queryKey","queryFn","getNonce","refetchInterval","refetchOnWindowFocus","refetchOnReconnect","staleTime","Infinity","buildMessageRef","useRef","current","message","useMemo","_buildMessageRef_current","data","command","
|
|
1
|
+
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","GpgProvider_exports","__export","GPG_NONCE_QUERY_KEY","GpgProvider","module","exports","import_jsx_runtime","require","import_react","import_react_query","import_connectkit","import_GpgContext","import_signer","b64","b642","s","window","btoa","unescape","encodeURIComponent","defaultBuildMessage","param","nonce","location","host","origin","Date","toISOString","GpgProvider2","children","enabled","nonceRefetchInterval","buildMessage","onSignIn","gpgConfig","status","setStatus","useState","GpgStatusState","READY","resetStatus","resetStatus2","useContext","GpgContext","Error","Context","useQuery","queryKey","queryFn","getNonce","refetchInterval","refetchOnWindowFocus","refetchOnReconnect","staleTime","Infinity","buildMessageRef","useRef","current","message","useMemo","_buildMessageRef_current","data","command","gpgSignCommand","signIn","signIn2","pastedBlob","blob","assertGpgSignature","error","ERROR","LOADING","result","onSign","username","password","SUCCESS","jsx","Provider"],"sources":["../../src/GpgProvider.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -42,11 +42,17 @@ __export(index_exports, {
|
|
|
42
42
|
GpgStatusState: () => import_GpgContext.GpgStatusState,
|
|
43
43
|
SignInWithGpg: () => import_SignInWithGpg.default,
|
|
44
44
|
SignInWithGpgButton: () => import_GpgButton.default,
|
|
45
|
+
assertGpgSignature: () => import_signer.assertGpgSignature,
|
|
46
|
+
createGpgSigner: () => import_signer.createGpgSigner,
|
|
45
47
|
gpgScreen: () => import_screens.gpgScreen,
|
|
46
|
-
|
|
48
|
+
gpgSignCommand: () => import_signer.gpgSignCommand,
|
|
49
|
+
gpgSignatureCovers: () => import_signer.gpgSignatureCovers,
|
|
50
|
+
useGpg: () => import_useGpg.useGpg,
|
|
51
|
+
useGpgSigner: () => import_signer.useGpgSigner
|
|
47
52
|
});
|
|
48
53
|
module.exports = __toCommonJS(index_exports);
|
|
49
54
|
var import_useGpg = require("./useGpg.cjs");
|
|
55
|
+
var import_signer = require("./signer.cjs");
|
|
50
56
|
var import_GpgProvider = require("./GpgProvider.cjs");
|
|
51
57
|
var import_GpgContext = require("./GpgContext.cjs");
|
|
52
58
|
var import_SignInWithGpg = __toESM(require("./SignInWithGpg.cjs"));
|
package/dist/cjs/index.native.js
CHANGED
|
@@ -44,11 +44,17 @@ __export(index_exports, {
|
|
|
44
44
|
GpgStatusState: () => import_GpgContext.GpgStatusState,
|
|
45
45
|
SignInWithGpg: () => import_SignInWithGpg.default,
|
|
46
46
|
SignInWithGpgButton: () => import_GpgButton.default,
|
|
47
|
+
assertGpgSignature: () => import_signer.assertGpgSignature,
|
|
48
|
+
createGpgSigner: () => import_signer.createGpgSigner,
|
|
47
49
|
gpgScreen: () => import_screens.gpgScreen,
|
|
48
|
-
|
|
50
|
+
gpgSignCommand: () => import_signer.gpgSignCommand,
|
|
51
|
+
gpgSignatureCovers: () => import_signer.gpgSignatureCovers,
|
|
52
|
+
useGpg: () => import_useGpg.useGpg,
|
|
53
|
+
useGpgSigner: () => import_signer.useGpgSigner
|
|
49
54
|
});
|
|
50
55
|
module.exports = __toCommonJS(index_exports);
|
|
51
56
|
var import_useGpg = require("./useGpg.native.js");
|
|
57
|
+
var import_signer = require("./signer.native.js");
|
|
52
58
|
var import_GpgProvider = require("./GpgProvider.native.js");
|
|
53
59
|
var import_GpgContext = require("./GpgContext.native.js");
|
|
54
60
|
var import_SignInWithGpg = __toESM(require("./SignInWithGpg.native.js"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","index_exports","__export","GPGButton","import_GpgButton","GPG_NONCE_QUERY_KEY","import_GpgProvider","GpgBridge","import_screens","GpgContext","import_GpgContext","GpgProvider","GpgScreenRegistrar","GpgStatusState","SignInWithGpg","import_SignInWithGpg","default","SignInWithGpgButton","gpgScreen","useGpg","import_useGpg","module","exports","require","__toESM"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,aAAA;AAAAC,QAAA,CAAAD,aAAA;EAAAE,SAAA,EAAAA,CAAA,KAAAC,gBAAA,CAAAD,SAAA;EAAAE,mBAAA,EAAAA,CAAA,KAAAC,kBAAA,CAAAD,mBAAA;EAAAE,SAAA,EAAAA,CAAA,KAAAC,cAAA,CAAAD,SAAA;EAAAE,UAAA,EAAAA,CAAA,KAAAC,iBAAA,CAAAD,UAAA;EAAAE,WAAA,EAAAA,CAAA,KAAAL,kBAAA,CAAAK,WAAA;EAAAC,kBAAA,EAAAA,CAAA,KAAAJ,cAAA,CAAAI,kBAAA;EAAAC,cAAA,EAAAA,CAAA,KAAAH,iBAAA,CAAAG,cAAA;EAAAC,aAAA,EAAAA,CAAA,KAAAC,oBAAA,CAAAC,OAAA;EAAAC,mBAAA,EAAAA,CAAA,KAAAb,gBAAA,CAAAY,OAAA;EAAAE,SAAA,EAAAA,CAAA,
|
|
1
|
+
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","index_exports","__export","GPGButton","import_GpgButton","GPG_NONCE_QUERY_KEY","import_GpgProvider","GpgBridge","import_screens","GpgContext","import_GpgContext","GpgProvider","GpgScreenRegistrar","GpgStatusState","SignInWithGpg","import_SignInWithGpg","default","SignInWithGpgButton","assertGpgSignature","import_signer","createGpgSigner","gpgScreen","gpgSignCommand","gpgSignatureCovers","useGpg","import_useGpg","useGpgSigner","module","exports","require","__toESM"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,aAAA;AAAAC,QAAA,CAAAD,aAAA;EAAAE,SAAA,EAAAA,CAAA,KAAAC,gBAAA,CAAAD,SAAA;EAAAE,mBAAA,EAAAA,CAAA,KAAAC,kBAAA,CAAAD,mBAAA;EAAAE,SAAA,EAAAA,CAAA,KAAAC,cAAA,CAAAD,SAAA;EAAAE,UAAA,EAAAA,CAAA,KAAAC,iBAAA,CAAAD,UAAA;EAAAE,WAAA,EAAAA,CAAA,KAAAL,kBAAA,CAAAK,WAAA;EAAAC,kBAAA,EAAAA,CAAA,KAAAJ,cAAA,CAAAI,kBAAA;EAAAC,cAAA,EAAAA,CAAA,KAAAH,iBAAA,CAAAG,cAAA;EAAAC,aAAA,EAAAA,CAAA,KAAAC,oBAAA,CAAAC,OAAA;EAAAC,mBAAA,EAAAA,CAAA,KAAAb,gBAAA,CAAAY,OAAA;EAAAE,kBAAA,EAAAA,CAAA,KAAAC,aAAA,CAAAD,kBAAA;EAAAE,eAAA,EAAAA,CAAA,KAAAD,aAAA,CAAAC,eAAA;EAAAC,SAAA,EAAAA,CAAA,KAAAb,cAAA,CAAAa,SAAA;EAAAC,cAAA,EAAAA,CAAA,KAAAH,aAAA,CAAAG,cAAA;EAAAC,kBAAA,EAAAA,CAAA,KAAAJ,aAAA,CAAAI,kBAAA;EAAAC,MAAA,EAAAA,CAAA,KAAAC,aAAA,CAAAD,MAAA;EAAAE,YAAA,EAAAA,CAAA,KAAAP,aAAA,CAAAO;AAAA;AAKAC,MAAA,CAAAC,OAAA,GAAAhC,YAAuB,CAAAK,aAAA;AACvB,IAAAwB,aAAA,GAQOI,OAAA;AACP,IAAAV,aAAA,GAAAU,OAAiD;AACjD,IAAAvB,kBAAA,GAA2CuB,OAAA;AAG3C,IAAAnB,iBAAA,GAAAmB,OAAyC;AACzC,IAAAd,oBAA0D,GAAAe,OAAA,CAAAD,OAAA;AAE1D,IAAAzB,gBAAA,GAAyD0B,OAAA,CAAAD,OAAA","ignoreList":[]}
|
package/dist/cjs/screens.cjs
CHANGED
|
@@ -42,14 +42,21 @@ var import_connectkit = require("@multiplatform.one/connectkit");
|
|
|
42
42
|
var import_react = require("react");
|
|
43
43
|
var import_SignInWithGpg = __toESM(require("./SignInWithGpg.cjs"));
|
|
44
44
|
var import_GpgContext = require("./GpgContext.cjs");
|
|
45
|
+
var import_GpgIcon = require("./GpgIcon.cjs");
|
|
45
46
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
46
47
|
const gpgScreen = {
|
|
47
48
|
id: import_connectkit.routes.SIGNINWITHGPG,
|
|
48
49
|
component: import_SignInWithGpg.default,
|
|
49
50
|
heading: "Sign in with GPG",
|
|
50
51
|
availableWhen: () => true,
|
|
51
|
-
showBack: false,
|
|
52
|
-
|
|
52
|
+
showBack: state => state.connected === false,
|
|
53
|
+
onBack: api => api.setRoute(import_connectkit.routes.CONNECTORS),
|
|
54
|
+
showInfo: false,
|
|
55
|
+
listEntry: {
|
|
56
|
+
name: "GPG",
|
|
57
|
+
icon: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_GpgIcon.GpgIcon, {}),
|
|
58
|
+
visibleWhen: state => !!state.signInWithGpg
|
|
59
|
+
}
|
|
53
60
|
};
|
|
54
61
|
const GpgScreenRegistrar = () => {
|
|
55
62
|
(0, import_connectkit.useRegisterScreens)([gpgScreen]);
|
|
@@ -46,6 +46,7 @@ var import_connectkit = require("@multiplatform.one/connectkit");
|
|
|
46
46
|
var import_react2 = require("react");
|
|
47
47
|
var import_SignInWithGpg = __toESM(require("./SignInWithGpg.native.js"));
|
|
48
48
|
var import_GpgContext = require("./GpgContext.native.js");
|
|
49
|
+
var import_GpgIcon = require("./GpgIcon.native.js");
|
|
49
50
|
var gpgScreen = {
|
|
50
51
|
id: import_connectkit.routes.SIGNINWITHGPG,
|
|
51
52
|
component: import_SignInWithGpg.default,
|
|
@@ -53,8 +54,20 @@ var gpgScreen = {
|
|
|
53
54
|
availableWhen: function availableWhen() {
|
|
54
55
|
return true;
|
|
55
56
|
},
|
|
56
|
-
showBack:
|
|
57
|
-
|
|
57
|
+
showBack: function showBack(state) {
|
|
58
|
+
return state.connected === false;
|
|
59
|
+
},
|
|
60
|
+
onBack: function onBack(api) {
|
|
61
|
+
return api.setRoute(import_connectkit.routes.CONNECTORS);
|
|
62
|
+
},
|
|
63
|
+
showInfo: false,
|
|
64
|
+
listEntry: {
|
|
65
|
+
name: "GPG",
|
|
66
|
+
icon: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_GpgIcon.GpgIcon, {}),
|
|
67
|
+
visibleWhen: function visibleWhen(state) {
|
|
68
|
+
return !!state.signInWithGpg;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
58
71
|
};
|
|
59
72
|
var GpgScreenRegistrar = function GpgScreenRegistrar2() {
|
|
60
73
|
(0, import_connectkit.useRegisterScreens)([gpgScreen]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","screens_exports","__export","GpgBridge","GpgScreenRegistrar","gpgScreen","module","exports","import_jsx_runtime","require","import_react","__toESM","import_connectkit","import_react2","import_SignInWithGpg","import_GpgContext","id","routes","SIGNINWITHGPG","component","default","heading","availableWhen","showBack","showInfo","
|
|
1
|
+
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","screens_exports","__export","GpgBridge","GpgScreenRegistrar","gpgScreen","module","exports","import_jsx_runtime","require","import_react","__toESM","import_connectkit","import_react2","import_SignInWithGpg","import_GpgContext","import_GpgIcon","id","routes","SIGNINWITHGPG","component","default","heading","availableWhen","showBack","state","connected","onBack","api","setRoute","CONNECTORS","showInfo","listEntry","name","icon","jsx","GpgIcon","visibleWhen","signInWithGpg","GpgScreenRegistrar2","useRegisterScreens"],"sources":["../../src/screens.tsx"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,eAAA;AAAAC,QAAA,CAAAD,eAAA;EAAAE,SAAA,EAAAA,CAAA,KAAAA,SAAA;EAAAC,kBAAA,EAAAA,CAAA,KAAAA,kBAAA;EAAAC,SAAA,EAAAA,CAAA,KAAAA;AAAA;AACAC,MAAA,CAAAC,OAAA,GAAAX,YAMO,CAAAK,eAAA;AACP,IAAAO,kBAA8C,GAAAC,OAAA;AAC9C,IAAAC,YAAA,GAAAC,OAAA,CAA0BF,OAAA;AAC1B,IAAAG,iBAAA,GAA2BH,OAAA;AAC3B,IAAAI,aAAA,GAAAJ,OAAwB;AAiBd,IAAAK,oBAAA,GAAAH,OAAA,CAAAF,OAAA;AAVH,IAAAM,iBAA6B,GAAAN,OAAA;AAAA,IAClCO,cAAI,GAAAP,OAAA,sBAAO;AAAA,IACXJ,SAAW;EACXY,EAAA,EAAAL,iBAAS,CAAAM,MAAA,CAAAC,aAAA;EACTC,SAAA,EAAAN,oBAAqB,CAAAO,OAAA;EACrBC,OAAA,oBAA2B;EAC3BC,aAAS,WAAYA,aAASA,CAAA;IAC9B,WAAU;EACV;EAAWC,QACH,WAAAA,SAAAC,KAAA;IACN,OAAMA,KAAA,CAAAC,SAAA;EAAS;EAEjBC,MAAA,WAAAA,OAAAC,GAAA;IACF,OAAAA,GAAA,CAAAC,QAAA,CAAAjB,iBAAA,CAAAM,MAAA,CAAAY,UAAA;EAOO;EACLC,QAAA;EACAC,SAAO;IACTC,IAAA;IAQOC,IAAM,iBAA8E,IAAA1B,kBAAA,CAAA2B,GAAA,EAAAnB,cAAA,CAAAoB,OAAA;IACzFC,WAAA,WAAAA,YAAAZ,KAAA;MACI,SAAAA,KAAA,CAAAa,aAAA;IACJ;EACA;AAEI;AAAoB,IACpBlC,kBAAA,YAAAmC,mBAACA,CAAA;EAAuD,IAC1D3B,iBAAA,CAAA4B,kBAAA,GAEJnC,SAAA,C","ignoreList":[]}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all) __defProp(target, name, {
|
|
7
|
+
get: all[name],
|
|
8
|
+
enumerable: true
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
14
|
+
get: () => from[key],
|
|
15
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
21
|
+
value: true
|
|
22
|
+
}), mod);
|
|
23
|
+
var signature_exports = {};
|
|
24
|
+
__export(signature_exports, {
|
|
25
|
+
gpgSignatureCovers: () => gpgSignatureCovers
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(signature_exports);
|
|
28
|
+
var import_legacy = require("@noble/hashes/legacy.js");
|
|
29
|
+
var import_sha2 = require("@noble/hashes/sha2.js");
|
|
30
|
+
const BEGIN = "-----BEGIN PGP SIGNATURE-----";
|
|
31
|
+
const END = "-----END PGP SIGNATURE-----";
|
|
32
|
+
const hashes = {
|
|
33
|
+
2: import_legacy.sha1,
|
|
34
|
+
3: import_legacy.ripemd160,
|
|
35
|
+
8: import_sha2.sha256,
|
|
36
|
+
9: import_sha2.sha384,
|
|
37
|
+
10: import_sha2.sha512,
|
|
38
|
+
11: import_sha2.sha224
|
|
39
|
+
};
|
|
40
|
+
function dearmor(text) {
|
|
41
|
+
const start = text.indexOf(BEGIN);
|
|
42
|
+
const end = text.indexOf(END, start);
|
|
43
|
+
if (start < 0 || end < 0) throw new Error("No PGP SIGNATURE block in the paste");
|
|
44
|
+
const lines = text.slice(start + BEGIN.length, end).split(/\r?\n/).map(line => line.trim());
|
|
45
|
+
const blank = lines.indexOf("", 1);
|
|
46
|
+
const hasHeaders = lines.slice(1, blank < 0 ? 0 : blank).some(line => line.includes(": "));
|
|
47
|
+
const body = (hasHeaders ? lines.slice(blank) : lines).filter(line => line && !/^=[A-Za-z0-9+/]{4}$/.test(line));
|
|
48
|
+
const binary = atob(body.join(""));
|
|
49
|
+
return Uint8Array.from(binary, c => c.charCodeAt(0));
|
|
50
|
+
}
|
|
51
|
+
function signaturePackets(bytes) {
|
|
52
|
+
const packets = [];
|
|
53
|
+
let at = 0;
|
|
54
|
+
while (at < bytes.length) {
|
|
55
|
+
const ctb = bytes[at++];
|
|
56
|
+
if (!(ctb & 128)) throw new Error("The PGP SIGNATURE block is not OpenPGP data");
|
|
57
|
+
let tag;
|
|
58
|
+
let length;
|
|
59
|
+
if (ctb & 64) {
|
|
60
|
+
tag = ctb & 63;
|
|
61
|
+
const first = bytes[at++];
|
|
62
|
+
if (first < 192) length = first;else if (first < 224) length = (first - 192 << 8) + bytes[at++] + 192;else if (first === 255) {
|
|
63
|
+
length = new DataView(bytes.buffer, bytes.byteOffset + at, 4).getUint32(0);
|
|
64
|
+
at += 4;
|
|
65
|
+
} else throw new Error("Partial-length PGP packets are not a detached signature");
|
|
66
|
+
} else {
|
|
67
|
+
tag = ctb >> 2 & 15;
|
|
68
|
+
const size = [1, 2, 4][ctb & 3];
|
|
69
|
+
if (size === void 0) throw new Error("Indeterminate-length PGP packets are not supported");
|
|
70
|
+
length = 0;
|
|
71
|
+
for (let i = 0; i < size; i++) length = length * 256 + bytes[at++];
|
|
72
|
+
}
|
|
73
|
+
if (at + length > bytes.length) throw new Error("The PGP SIGNATURE block is truncated");
|
|
74
|
+
if (tag === 2) packets.push(bytes.subarray(at, at + length));
|
|
75
|
+
at += length;
|
|
76
|
+
}
|
|
77
|
+
return packets;
|
|
78
|
+
}
|
|
79
|
+
function quickCheck(packet, message) {
|
|
80
|
+
if (packet[0] !== 4) {
|
|
81
|
+
throw new Error(`A version ${packet[0]} PGP signature cannot be checked here; sign with a v4 key`);
|
|
82
|
+
}
|
|
83
|
+
const sigType = packet[1];
|
|
84
|
+
if (sigType !== 0 && sigType !== 1) {
|
|
85
|
+
throw new Error(`PGP signature type 0x${sigType.toString(16)} is not a document signature`);
|
|
86
|
+
}
|
|
87
|
+
const hash = hashes[packet[3]];
|
|
88
|
+
if (!hash) throw new Error(`PGP hash algorithm ${packet[3]} is not supported`);
|
|
89
|
+
const hashedEnd = 6 + (packet[4] << 8 | packet[5]);
|
|
90
|
+
const unhashedLength = packet[hashedEnd] << 8 | packet[hashedEnd + 1];
|
|
91
|
+
const left16 = hashedEnd + 2 + unhashedLength;
|
|
92
|
+
if (left16 + 2 > packet.length) throw new Error("The PGP signature packet is truncated");
|
|
93
|
+
const data = sigType === 1 ? new TextEncoder().encode(new TextDecoder().decode(message).replace(/\r?\n/g, "\n").replace(/\n/g, "\r\n")) : message;
|
|
94
|
+
const trailer = new Uint8Array(6);
|
|
95
|
+
trailer[0] = 4;
|
|
96
|
+
trailer[1] = 255;
|
|
97
|
+
new DataView(trailer.buffer).setUint32(2, hashedEnd);
|
|
98
|
+
const input = new Uint8Array(data.length + hashedEnd + trailer.length);
|
|
99
|
+
input.set(data, 0);
|
|
100
|
+
input.set(packet.subarray(0, hashedEnd), data.length);
|
|
101
|
+
input.set(trailer, data.length + hashedEnd);
|
|
102
|
+
const digest = hash(input);
|
|
103
|
+
return [packet[left16] << 8 | packet[left16 + 1], digest[0] << 8 | digest[1]];
|
|
104
|
+
}
|
|
105
|
+
function gpgSignatureCovers(blob, message) {
|
|
106
|
+
const packets = signaturePackets(dearmor(blob));
|
|
107
|
+
if (!packets.length) throw new Error("The PGP SIGNATURE block holds no signature");
|
|
108
|
+
const bytes = new TextEncoder().encode(message);
|
|
109
|
+
return packets.every(packet => {
|
|
110
|
+
const [expected, actual] = quickCheck(packet, bytes);
|
|
111
|
+
return expected === actual;
|
|
112
|
+
});
|
|
113
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
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 signature_exports = {};
|
|
26
|
+
__export(signature_exports, {
|
|
27
|
+
gpgSignatureCovers: () => gpgSignatureCovers
|
|
28
|
+
});
|
|
29
|
+
module.exports = __toCommonJS(signature_exports);
|
|
30
|
+
var import_legacy = require("@noble/hashes/legacy.js");
|
|
31
|
+
var import_sha2 = require("@noble/hashes/sha2.js");
|
|
32
|
+
var BEGIN = "-----BEGIN PGP SIGNATURE-----";
|
|
33
|
+
var END = "-----END PGP SIGNATURE-----";
|
|
34
|
+
var hashes = {
|
|
35
|
+
2: import_legacy.sha1,
|
|
36
|
+
3: import_legacy.ripemd160,
|
|
37
|
+
8: import_sha2.sha256,
|
|
38
|
+
9: import_sha2.sha384,
|
|
39
|
+
10: import_sha2.sha512,
|
|
40
|
+
11: import_sha2.sha224
|
|
41
|
+
};
|
|
42
|
+
function dearmor(text) {
|
|
43
|
+
var start = text.indexOf(BEGIN);
|
|
44
|
+
var end = text.indexOf(END, start);
|
|
45
|
+
if (start < 0 || end < 0) throw new Error("No PGP SIGNATURE block in the paste");
|
|
46
|
+
var lines = text.slice(start + BEGIN.length, end).split(/\r?\n/).map(function (line) {
|
|
47
|
+
return line.trim();
|
|
48
|
+
});
|
|
49
|
+
var blank = lines.indexOf("", 1);
|
|
50
|
+
var hasHeaders = lines.slice(1, blank < 0 ? 0 : blank).some(function (line) {
|
|
51
|
+
return line.includes(": ");
|
|
52
|
+
});
|
|
53
|
+
var body = (hasHeaders ? lines.slice(blank) : lines).filter(function (line) {
|
|
54
|
+
return line && !/^=[A-Za-z0-9+/]{4}$/.test(line);
|
|
55
|
+
});
|
|
56
|
+
var binary = atob(body.join(""));
|
|
57
|
+
return Uint8Array.from(binary, function (c) {
|
|
58
|
+
return c.charCodeAt(0);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
function signaturePackets(bytes) {
|
|
62
|
+
var packets = [];
|
|
63
|
+
var at = 0;
|
|
64
|
+
while (at < bytes.length) {
|
|
65
|
+
var ctb = bytes[at++];
|
|
66
|
+
if (!(ctb & 128)) throw new Error("The PGP SIGNATURE block is not OpenPGP data");
|
|
67
|
+
var tag = void 0;
|
|
68
|
+
var length = void 0;
|
|
69
|
+
if (ctb & 64) {
|
|
70
|
+
tag = ctb & 63;
|
|
71
|
+
var first = bytes[at++];
|
|
72
|
+
if (first < 192) length = first;else if (first < 224) length = (first - 192 << 8) + bytes[at++] + 192;else if (first === 255) {
|
|
73
|
+
length = new DataView(bytes.buffer, bytes.byteOffset + at, 4).getUint32(0);
|
|
74
|
+
at += 4;
|
|
75
|
+
} else throw new Error("Partial-length PGP packets are not a detached signature");
|
|
76
|
+
} else {
|
|
77
|
+
tag = ctb >> 2 & 15;
|
|
78
|
+
var size = [1, 2, 4][ctb & 3];
|
|
79
|
+
if (size === void 0) throw new Error("Indeterminate-length PGP packets are not supported");
|
|
80
|
+
length = 0;
|
|
81
|
+
for (var i = 0; i < size; i++) length = length * 256 + bytes[at++];
|
|
82
|
+
}
|
|
83
|
+
if (at + length > bytes.length) throw new Error("The PGP SIGNATURE block is truncated");
|
|
84
|
+
if (tag === 2) packets.push(bytes.subarray(at, at + length));
|
|
85
|
+
at += length;
|
|
86
|
+
}
|
|
87
|
+
return packets;
|
|
88
|
+
}
|
|
89
|
+
function quickCheck(packet, message) {
|
|
90
|
+
if (packet[0] !== 4) {
|
|
91
|
+
throw new Error(`A version ${packet[0]} PGP signature cannot be checked here; sign with a v4 key`);
|
|
92
|
+
}
|
|
93
|
+
var sigType = packet[1];
|
|
94
|
+
if (sigType !== 0 && sigType !== 1) {
|
|
95
|
+
throw new Error(`PGP signature type 0x${sigType.toString(16)} is not a document signature`);
|
|
96
|
+
}
|
|
97
|
+
var hash = hashes[packet[3]];
|
|
98
|
+
if (!hash) throw new Error(`PGP hash algorithm ${packet[3]} is not supported`);
|
|
99
|
+
var hashedEnd = 6 + (packet[4] << 8 | packet[5]);
|
|
100
|
+
var unhashedLength = packet[hashedEnd] << 8 | packet[hashedEnd + 1];
|
|
101
|
+
var left16 = hashedEnd + 2 + unhashedLength;
|
|
102
|
+
if (left16 + 2 > packet.length) throw new Error("The PGP signature packet is truncated");
|
|
103
|
+
var data = sigType === 1 ? new TextEncoder().encode(new TextDecoder().decode(message).replace(/\r?\n/g, "\n").replace(/\n/g, "\r\n")) : message;
|
|
104
|
+
var trailer = new Uint8Array(6);
|
|
105
|
+
trailer[0] = 4;
|
|
106
|
+
trailer[1] = 255;
|
|
107
|
+
new DataView(trailer.buffer).setUint32(2, hashedEnd);
|
|
108
|
+
var input = new Uint8Array(data.length + hashedEnd + trailer.length);
|
|
109
|
+
input.set(data, 0);
|
|
110
|
+
input.set(packet.subarray(0, hashedEnd), data.length);
|
|
111
|
+
input.set(trailer, data.length + hashedEnd);
|
|
112
|
+
var digest = hash(input);
|
|
113
|
+
return [packet[left16] << 8 | packet[left16 + 1], digest[0] << 8 | digest[1]];
|
|
114
|
+
}
|
|
115
|
+
function gpgSignatureCovers(blob, message) {
|
|
116
|
+
var packets = signaturePackets(dearmor(blob));
|
|
117
|
+
if (!packets.length) throw new Error("The PGP SIGNATURE block holds no signature");
|
|
118
|
+
var bytes = new TextEncoder().encode(message);
|
|
119
|
+
return packets.every(function (packet) {
|
|
120
|
+
var [expected, actual] = quickCheck(packet, bytes);
|
|
121
|
+
return expected === actual;
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=signature.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","signature_exports","__export","gpgSignatureCovers","module","exports","import_legacy","require","import_sha2","BEGIN","END","hashes","sha1","ripemd160","sha256","sha384","sha512","sha224","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"],"sources":["../../src/signature.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|