@push.rocks/smartlinuxrepo 1.0.0 → 1.1.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/.smartconfig.json +0 -1
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/debian/control.d.ts +0 -2
- package/dist_ts/debian/control.js +1 -3
- package/dist_ts/debian/indexbuilder.d.ts +2 -4
- package/dist_ts/debian/indexbuilder.js +5 -5
- package/dist_ts/debian/rules.d.ts +15 -0
- package/dist_ts/debian/rules.js +21 -0
- package/dist_ts/index.d.ts +4 -0
- package/dist_ts/index.js +3 -1
- package/dist_ts/readers/text.d.ts +2 -0
- package/dist_ts/readers/text.js +10 -1
- package/dist_ts/shared/errors.d.ts +14 -1
- package/dist_ts/shared/errors.js +1 -1
- package/dist_ts/signing/openpgpframing.d.ts +56 -1
- package/dist_ts/signing/openpgpframing.js +273 -2
- package/dist_ts/signing/verifiers.d.ts +77 -0
- package/dist_ts/signing/verifiers.js +263 -0
- package/package.json +1 -1
- package/readme.md +34 -3
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/debian/control.ts +0 -2
- package/ts/debian/indexbuilder.ts +6 -5
- package/ts/debian/rules.ts +23 -0
- package/ts/index.ts +9 -0
- package/ts/readers/text.ts +9 -0
- package/ts/shared/errors.ts +18 -1
- package/ts/signing/openpgpframing.ts +295 -2
- package/ts/signing/verifiers.ts +357 -0
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { decodeLatin1, decodeStrictUtf8 } from '../readers/text.js';
|
|
1
2
|
import { LinuxRepoError } from '../shared/errors.js';
|
|
2
3
|
import { assertAsyncIterable, assertBytes, assertString, assertTimestamp } from '../shared/validation.js';
|
|
3
4
|
import { singleChunk } from './signers.js';
|
|
@@ -5,6 +6,10 @@ import { singleChunk } from './signers.js';
|
|
|
5
6
|
* The OpenPGP framing the codec owns: only the bytes of the signature packet
|
|
6
7
|
* may vary; framing and armor are deterministic.
|
|
7
8
|
* Armor has no headers, 64-column base64 and a CRC-24 line.
|
|
9
|
+
*
|
|
10
|
+
* The readers below are the strict inverses the verifier uses; openpgp.js's
|
|
11
|
+
* own dearmoring is never used (it skips text around the block, ignores the
|
|
12
|
+
* CRC-24 and strips trailing whitespace inside cleartext).
|
|
8
13
|
*/
|
|
9
14
|
const BASE64_LINE = 64;
|
|
10
15
|
/**
|
|
@@ -32,7 +37,7 @@ export async function createDetachedArmoredSignature(inputArg) {
|
|
|
32
37
|
* Cleartext-signs `text` (`InRelease`). The text must be canonical: no CR and
|
|
33
38
|
* no trailing spaces or tabs on any line. The signed text is `text` without
|
|
34
39
|
* its final line break; the output always ends the text with one line break
|
|
35
|
-
* before the signature block, as GnuPG
|
|
40
|
+
* before the signature block, as GnuPG does. Lines starting with `-` are
|
|
36
41
|
* dash-escaped. The header is always `Hash: SHA256`.
|
|
37
42
|
*/
|
|
38
43
|
export async function createCleartextSignedMessage(inputArg) {
|
|
@@ -75,6 +80,272 @@ function assertSignatureBytes(packetArg) {
|
|
|
75
80
|
throw new LinuxRepoError('signing-failed', 'the signer returned no signature bytes', { field: 'signer' });
|
|
76
81
|
}
|
|
77
82
|
}
|
|
83
|
+
/** A well-formed armor header line (`Key: Value`), as openpgp.js 6.3.2 checks it (`verifyHeaders$1`). */
|
|
84
|
+
const ARMOR_HEADER_PATTERN = /^([^\s:]|[^\s:][^:]*[^\s:]): .+$/;
|
|
85
|
+
const BASE64_LINE_PATTERN = /^[A-Za-z0-9+/]+={0,2}$/;
|
|
86
|
+
const BASE64_PATTERN = /^[A-Za-z0-9+/]*={0,2}$/;
|
|
87
|
+
const CRC_LINE_PATTERN = /^=[A-Za-z0-9+/]{4}$/;
|
|
88
|
+
const CLEARTEXT_BEGIN = '-----BEGIN PGP SIGNED MESSAGE-----';
|
|
89
|
+
const SIGNATURE_BEGIN = '-----BEGIN PGP SIGNATURE-----';
|
|
90
|
+
/** RFC 9580 table 23 hash text names (the `Hash:` header) and their algorithm IDs. */
|
|
91
|
+
const HASH_TEXT_NAMES = new Map([
|
|
92
|
+
['MD5', 1],
|
|
93
|
+
['SHA1', 2],
|
|
94
|
+
['RIPEMD160', 3],
|
|
95
|
+
['SHA256', 8],
|
|
96
|
+
['SHA384', 9],
|
|
97
|
+
['SHA512', 10],
|
|
98
|
+
['SHA224', 11],
|
|
99
|
+
['SHA3-256', 12],
|
|
100
|
+
['SHA3-512', 14],
|
|
101
|
+
]);
|
|
102
|
+
function framingError(failureArg, messageArg) {
|
|
103
|
+
return new LinuxRepoError(failureArg.code, messageArg, { field: failureArg.field });
|
|
104
|
+
}
|
|
105
|
+
/** Bytes that must be ASCII armor, as text; any byte above 0x7F is refused. */
|
|
106
|
+
export function decodeArmorBytes(bytesArg, failureArg) {
|
|
107
|
+
for (let i = 0; i < bytesArg.length; i++) {
|
|
108
|
+
if (bytesArg[i] > 0x7f) {
|
|
109
|
+
throw framingError(failureArg, 'ASCII armor must be ASCII');
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return decodeLatin1(bytesArg);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Reads exactly one ASCII armor block labelled `labelArg` (RFC 9580 section
|
|
116
|
+
* 6.2) and returns its bytes; the inverse of `armorSignature`. Lines may end
|
|
117
|
+
* in LF or CRLF and carry trailing spaces or tabs, and blank lines may
|
|
118
|
+
* surround the block. Well-formed `Key: Value` headers are ignored; the
|
|
119
|
+
* CRC-24 line is optional and must match when present. Refused with
|
|
120
|
+
* `failureArg`: non-ASCII text, another label, a second block or any other
|
|
121
|
+
* text outside the block, a malformed header line, no blank line before the
|
|
122
|
+
* data, base64 that is not canonical, no data, and a CRC-24 that does not
|
|
123
|
+
* match.
|
|
124
|
+
*/
|
|
125
|
+
export function dearmor(textArg, labelArg, failureArg) {
|
|
126
|
+
const lines = textArg.split('\n').map(trimLineEnd);
|
|
127
|
+
let first = 0;
|
|
128
|
+
while (first < lines.length && lines[first] === '') {
|
|
129
|
+
first += 1;
|
|
130
|
+
}
|
|
131
|
+
let last = lines.length - 1;
|
|
132
|
+
while (last >= first && lines[last] === '') {
|
|
133
|
+
last -= 1;
|
|
134
|
+
}
|
|
135
|
+
return readArmorBlock(lines.slice(first, last + 1), labelArg, failureArg);
|
|
136
|
+
}
|
|
137
|
+
/** The line without trailing spaces, tabs and CRs; a loop, as a `+$` regex is quadratic on a long run of them. */
|
|
138
|
+
function trimLineEnd(lineArg) {
|
|
139
|
+
let end = lineArg.length;
|
|
140
|
+
while (end > 0 && (lineArg[end - 1] === ' ' || lineArg[end - 1] === '\t' || lineArg[end - 1] === '\r')) {
|
|
141
|
+
end -= 1;
|
|
142
|
+
}
|
|
143
|
+
return lineArg.slice(0, end);
|
|
144
|
+
}
|
|
145
|
+
/** One armor block, from its BEGIN line to its END line, as exactly these lines; ASCII only. */
|
|
146
|
+
function readArmorBlock(linesArg, labelArg, failureArg) {
|
|
147
|
+
if (linesArg.some((line) => !/^[\x00-\x7f]*$/.test(line))) {
|
|
148
|
+
throw framingError(failureArg, 'ASCII armor must be ASCII');
|
|
149
|
+
}
|
|
150
|
+
const begin = `-----BEGIN PGP ${labelArg}-----`;
|
|
151
|
+
const end = `-----END PGP ${labelArg}-----`;
|
|
152
|
+
if (linesArg[0] !== begin) {
|
|
153
|
+
throw framingError(failureArg, `expected exactly one ${begin} block and nothing else`);
|
|
154
|
+
}
|
|
155
|
+
const endIndex = linesArg.indexOf(end);
|
|
156
|
+
if (endIndex < 0 || endIndex !== linesArg.length - 1) {
|
|
157
|
+
throw framingError(failureArg, `expected exactly one ${begin} block ending in ${end} and nothing else`);
|
|
158
|
+
}
|
|
159
|
+
let index = 1;
|
|
160
|
+
for (; index < endIndex && linesArg[index] !== ''; index++) {
|
|
161
|
+
if (!ARMOR_HEADER_PATTERN.test(linesArg[index])) {
|
|
162
|
+
throw framingError(failureArg, 'malformed armor header line');
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
if (index >= endIndex) {
|
|
166
|
+
throw framingError(failureArg, 'the armor has no blank line before its data');
|
|
167
|
+
}
|
|
168
|
+
index += 1;
|
|
169
|
+
const dataLines = [];
|
|
170
|
+
let crcLine = null;
|
|
171
|
+
for (; index < endIndex; index++) {
|
|
172
|
+
const line = linesArg[index];
|
|
173
|
+
if (index === endIndex - 1 && line.startsWith('=')) {
|
|
174
|
+
crcLine = line;
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
if (!BASE64_LINE_PATTERN.test(line)) {
|
|
178
|
+
throw framingError(failureArg, 'the armor data is not base64');
|
|
179
|
+
}
|
|
180
|
+
dataLines.push(line);
|
|
181
|
+
}
|
|
182
|
+
const base64 = dataLines.join('');
|
|
183
|
+
if (base64.length === 0 || base64.length % 4 !== 0 || !BASE64_PATTERN.test(base64)) {
|
|
184
|
+
throw framingError(failureArg, 'the armor data is not one base64 string');
|
|
185
|
+
}
|
|
186
|
+
const decoded = Buffer.from(base64, 'base64');
|
|
187
|
+
if (decoded.toString('base64') !== base64) {
|
|
188
|
+
throw framingError(failureArg, 'the armor data is not canonical base64');
|
|
189
|
+
}
|
|
190
|
+
const bytes = new Uint8Array(decoded.buffer, decoded.byteOffset, decoded.byteLength);
|
|
191
|
+
if (crcLine !== null && (!CRC_LINE_PATTERN.test(crcLine) || crcLine.slice(1) !== crc24Base64(bytes))) {
|
|
192
|
+
throw framingError(failureArg, 'the armor CRC-24 does not match its data');
|
|
193
|
+
}
|
|
194
|
+
return bytes;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* The packet tags of a binary OpenPGP packet sequence, read from the packet
|
|
198
|
+
* headers alone (RFC 9580 section 4.2); no body is parsed. openpgp.js skips
|
|
199
|
+
* marker, trust and padding packets and unknown non-critical packet types
|
|
200
|
+
* without a trace (`PacketList.read`, `dist/node/openpgp.mjs:12320-12385`),
|
|
201
|
+
* so the verifier counts packets here. Refused with `failureArg`: a header
|
|
202
|
+
* without its high bit, a partial body length (no key or signature packet
|
|
203
|
+
* may use one), and input that ends inside a header or a body.
|
|
204
|
+
*/
|
|
205
|
+
export function readPacketTags(bytesArg, failureArg) {
|
|
206
|
+
const tags = [];
|
|
207
|
+
let offset = 0;
|
|
208
|
+
while (offset < bytesArg.length) {
|
|
209
|
+
const ctb = bytesArg[offset];
|
|
210
|
+
if ((ctb & 0x80) === 0) {
|
|
211
|
+
throw framingError(failureArg, `no OpenPGP packet header at byte ${offset}`);
|
|
212
|
+
}
|
|
213
|
+
let tag;
|
|
214
|
+
let headerLength;
|
|
215
|
+
let bodyLength;
|
|
216
|
+
if ((ctb & 0x40) !== 0) {
|
|
217
|
+
tag = ctb & 0x3f;
|
|
218
|
+
const first = bytesArg[offset + 1];
|
|
219
|
+
if (first === undefined) {
|
|
220
|
+
throw framingError(failureArg, 'the input ends inside a packet header');
|
|
221
|
+
}
|
|
222
|
+
if (first < 192) {
|
|
223
|
+
headerLength = 2;
|
|
224
|
+
bodyLength = first;
|
|
225
|
+
}
|
|
226
|
+
else if (first < 224) {
|
|
227
|
+
if (offset + 3 > bytesArg.length) {
|
|
228
|
+
throw framingError(failureArg, 'the input ends inside a packet header');
|
|
229
|
+
}
|
|
230
|
+
headerLength = 3;
|
|
231
|
+
bodyLength = (first - 192) * 256 + bytesArg[offset + 2] + 192;
|
|
232
|
+
}
|
|
233
|
+
else if (first === 255) {
|
|
234
|
+
if (offset + 6 > bytesArg.length) {
|
|
235
|
+
throw framingError(failureArg, 'the input ends inside a packet header');
|
|
236
|
+
}
|
|
237
|
+
headerLength = 6;
|
|
238
|
+
bodyLength = readUint32(bytesArg, offset + 2);
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
throw framingError(failureArg, 'a partial body length is not allowed here');
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
tag = (ctb >> 2) & 0x0f;
|
|
246
|
+
const lengthType = ctb & 0x03;
|
|
247
|
+
if (lengthType === 3) {
|
|
248
|
+
// indeterminate length: the packet runs to the end of the input
|
|
249
|
+
headerLength = 1;
|
|
250
|
+
bodyLength = bytesArg.length - offset - 1;
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
const lengthBytes = 1 << lengthType;
|
|
254
|
+
if (offset + 1 + lengthBytes > bytesArg.length) {
|
|
255
|
+
throw framingError(failureArg, 'the input ends inside a packet header');
|
|
256
|
+
}
|
|
257
|
+
headerLength = 1 + lengthBytes;
|
|
258
|
+
bodyLength = 0;
|
|
259
|
+
for (let i = 0; i < lengthBytes; i++) {
|
|
260
|
+
bodyLength = bodyLength * 256 + bytesArg[offset + 1 + i];
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
const packetEnd = offset + headerLength + bodyLength;
|
|
265
|
+
if (packetEnd > bytesArg.length) {
|
|
266
|
+
throw framingError(failureArg, 'the input ends inside a packet');
|
|
267
|
+
}
|
|
268
|
+
tags.push(tag);
|
|
269
|
+
offset = packetEnd;
|
|
270
|
+
}
|
|
271
|
+
return tags;
|
|
272
|
+
}
|
|
273
|
+
function readUint32(bytesArg, offsetArg) {
|
|
274
|
+
return ((bytesArg[offsetArg] * 256 + bytesArg[offsetArg + 1]) * 256 + bytesArg[offsetArg + 2]) * 256 + bytesArg[offsetArg + 3];
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Splits a cleartext-signed message (`InRelease`, RFC 9580 section 7); the
|
|
278
|
+
* inverse of `createCleartextSignedMessage`, and as strict as apt's own split
|
|
279
|
+
* (apt-pkg `SplitClearSignedFile`). The message is strict UTF-8 with LF line
|
|
280
|
+
* endings: the first line is `-----BEGIN PGP SIGNED MESSAGE-----`, then
|
|
281
|
+
* optional `Hash:` headers (comma-separated RFC 9580 text names), a blank
|
|
282
|
+
* line, the dash-escaped text and exactly one signature armor block, which
|
|
283
|
+
* may be followed by one line break and nothing else. Refused with
|
|
284
|
+
* `failureArg`: invalid UTF-8, a CR, a line ending in a space or tab, text
|
|
285
|
+
* before the message block or after the signature block, any other header, an
|
|
286
|
+
* unknown hash name, a text line starting with `-` but not `- `, and an empty
|
|
287
|
+
* text section. Armor headers inside the signature block are ignored as in
|
|
288
|
+
* `dearmor`.
|
|
289
|
+
*/
|
|
290
|
+
export function splitCleartextSignedMessage(bytesArg, failureArg) {
|
|
291
|
+
const text = decodeStrictUtf8(bytesArg);
|
|
292
|
+
if (text === null) {
|
|
293
|
+
throw framingError(failureArg, 'the cleartext-signed message is not valid UTF-8');
|
|
294
|
+
}
|
|
295
|
+
if (text.includes('\r')) {
|
|
296
|
+
throw framingError(failureArg, 'the cleartext-signed message must use LF line endings');
|
|
297
|
+
}
|
|
298
|
+
const lines = text.split('\n');
|
|
299
|
+
if (lines[lines.length - 1] === '') {
|
|
300
|
+
lines.pop();
|
|
301
|
+
}
|
|
302
|
+
if (lines.some((line) => /[ \t]$/.test(line))) {
|
|
303
|
+
throw framingError(failureArg, 'a line of the cleartext-signed message ends with a space or tab');
|
|
304
|
+
}
|
|
305
|
+
if (lines[0] !== CLEARTEXT_BEGIN) {
|
|
306
|
+
throw framingError(failureArg, `the message does not start with ${CLEARTEXT_BEGIN}`);
|
|
307
|
+
}
|
|
308
|
+
let index = 1;
|
|
309
|
+
const headerHashAlgorithms = [];
|
|
310
|
+
for (; index < lines.length && lines[index] !== ''; index++) {
|
|
311
|
+
const header = /^Hash: (.+)$/.exec(lines[index]);
|
|
312
|
+
if (header === null) {
|
|
313
|
+
throw framingError(failureArg, 'only Hash: headers are allowed in a cleartext-signed message');
|
|
314
|
+
}
|
|
315
|
+
for (const name of header[1].split(',')) {
|
|
316
|
+
const algorithm = HASH_TEXT_NAMES.get(name.trim());
|
|
317
|
+
if (algorithm === undefined) {
|
|
318
|
+
throw framingError(failureArg, `unknown hash name in the Hash: header: ${name.trim()}`);
|
|
319
|
+
}
|
|
320
|
+
headerHashAlgorithms.push(algorithm);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
index += 1;
|
|
324
|
+
const textLines = [];
|
|
325
|
+
for (; index < lines.length && lines[index] !== SIGNATURE_BEGIN; index++) {
|
|
326
|
+
const line = lines[index];
|
|
327
|
+
if (line.startsWith('-')) {
|
|
328
|
+
if (!line.startsWith('- ')) {
|
|
329
|
+
throw framingError(failureArg, 'a text line starts with "-" without the "- " escape');
|
|
330
|
+
}
|
|
331
|
+
textLines.push(line.slice(2));
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
textLines.push(line);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
if (index >= lines.length) {
|
|
338
|
+
throw framingError(failureArg, `the message has no ${SIGNATURE_BEGIN} block`);
|
|
339
|
+
}
|
|
340
|
+
if (textLines.length === 0) {
|
|
341
|
+
throw framingError(failureArg, 'the message has no text section');
|
|
342
|
+
}
|
|
343
|
+
return {
|
|
344
|
+
signedText: textLines.join('\n'),
|
|
345
|
+
headerHashAlgorithms,
|
|
346
|
+
signature: readArmorBlock(lines.slice(index), 'SIGNATURE', failureArg),
|
|
347
|
+
};
|
|
348
|
+
}
|
|
78
349
|
/** RFC 4880 section 6.1 CRC-24, base64-encoded. */
|
|
79
350
|
function crc24Base64(bytesArg) {
|
|
80
351
|
let crc = 0xb704ce;
|
|
@@ -90,4 +361,4 @@ function crc24Base64(bytesArg) {
|
|
|
90
361
|
crc &= 0xffffff;
|
|
91
362
|
return Buffer.from([(crc >> 16) & 0xff, (crc >> 8) & 0xff, crc & 0xff]).toString('base64');
|
|
92
363
|
}
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbnBncGZyYW1pbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9zaWduaW5nL29wZW5wZ3BmcmFtaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRyxPQUFPLEVBQUUsV0FBVyxFQUF1QixNQUFNLGNBQWMsQ0FBQztBQUVoRTs7OztHQUlHO0FBRUgsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBRXZCOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLDZCQUE2QixDQUFDLFFBSW5EO0lBQ0MsbUJBQW1CLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzQyxlQUFlLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkYsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0IsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELGdHQUFnRztBQUNoRyxNQUFNLENBQUMsS0FBSyxVQUFVLDhCQUE4QixDQUFDLFFBSXBEO0lBQ0MsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkMsT0FBTyxjQUFjLENBQ25CLE1BQU0sNkJBQTZCLENBQUM7UUFDbEMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ2hDLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTTtRQUN2QixTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVM7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
|
|
364
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbnBncGZyYW1pbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9zaWduaW5nL29wZW5wZ3BmcmFtaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsY0FBYyxFQUE0QixNQUFNLHFCQUFxQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzFHLE9BQU8sRUFBRSxXQUFXLEVBQXVCLE1BQU0sY0FBYyxDQUFDO0FBRWhFOzs7Ozs7OztHQVFHO0FBRUgsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBRXZCOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLDZCQUE2QixDQUFDLFFBSW5EO0lBQ0MsbUJBQW1CLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzQyxlQUFlLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkYsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0IsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELGdHQUFnRztBQUNoRyxNQUFNLENBQUMsS0FBSyxVQUFVLDhCQUE4QixDQUFDLFFBSXBEO0lBQ0MsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkMsT0FBTyxjQUFjLENBQ25CLE1BQU0sNkJBQTZCLENBQUM7UUFDbEMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FB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
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/** The hash algorithms the verifier accepts. */
|
|
2
|
+
export type TOpenPgpHashAlgorithm = 'sha256' | 'sha384' | 'sha512';
|
|
3
|
+
/** A signature that verified. */
|
|
4
|
+
export interface IOpenPgpSignatureVerification {
|
|
5
|
+
/** The primary key or subkey that verified the signature, 40 uppercase hex digits. */
|
|
6
|
+
readonly signingKeyFingerprint: string;
|
|
7
|
+
/** The signature's creation time (whole seconds). */
|
|
8
|
+
readonly created: Date;
|
|
9
|
+
readonly hashAlgorithm: TOpenPgpHashAlgorithm;
|
|
10
|
+
}
|
|
11
|
+
/** A cleartext-signed message that verified. */
|
|
12
|
+
export interface IOpenPgpCleartextVerification extends IOpenPgpSignatureVerification {
|
|
13
|
+
/**
|
|
14
|
+
* The signed text: dash-escaping removed, lines joined by LF, without the
|
|
15
|
+
* line break before the signature block (RFC 9580 section 7.1). For
|
|
16
|
+
* GnuPG's and the codec's `InRelease` this is `Release` without its final
|
|
17
|
+
* line break; for Gitea 28.2.0's (go-crypto) it is the whole `Release`.
|
|
18
|
+
*/
|
|
19
|
+
readonly signedText: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Verifies OpenPGP signatures against one public key. Every method fails
|
|
23
|
+
* closed with a `LinuxRepoError` and never returns a verdict of failure:
|
|
24
|
+
* `malformed-signature`, `wrong-key`, `unusable-key` or `bad-signature`
|
|
25
|
+
* (bad arguments are `invalid-input`).
|
|
26
|
+
*
|
|
27
|
+
* A signature is valid when it is exactly one OpenPGP v4 signature packet,
|
|
28
|
+
* SHA-256, SHA-384 or SHA-512, issued by the primary key or one of its
|
|
29
|
+
* subkeys, created at or before `date` and not expired at `date`, made by a
|
|
30
|
+
* key or subkey that can sign both at the signature's creation time and at
|
|
31
|
+
* `date` (not expired, not revoked, sign flag set, valid binding and
|
|
32
|
+
* back-signature, openpgp.js's algorithm floor), and when it verifies
|
|
33
|
+
* cryptographically. `date` is required; the codec reads no clock.
|
|
34
|
+
*/
|
|
35
|
+
export interface IOpenPgpVerifier {
|
|
36
|
+
/** The primary key's v4 fingerprint, 40 uppercase hex digits (as `IOpenPgpKeyPair.fingerprint`). */
|
|
37
|
+
readonly fingerprint: string;
|
|
38
|
+
/**
|
|
39
|
+
* A binary detached signature of type 0x00 over `data`: the packet
|
|
40
|
+
* `IOpenPgpSigner.signBinary` returns, an Arch `.sig`.
|
|
41
|
+
*/
|
|
42
|
+
verifyDetachedSignature(inputArg: {
|
|
43
|
+
data: Uint8Array;
|
|
44
|
+
signature: Uint8Array;
|
|
45
|
+
date: Date;
|
|
46
|
+
}): Promise<IOpenPgpSignatureVerification>;
|
|
47
|
+
/**
|
|
48
|
+
* An armored detached signature of type 0x00 over `data`: `Release.gpg`,
|
|
49
|
+
* `repomd.xml.asc`. The armor is ASCII.
|
|
50
|
+
*/
|
|
51
|
+
verifyArmoredDetachedSignature(inputArg: {
|
|
52
|
+
data: Uint8Array;
|
|
53
|
+
signatureArmored: Uint8Array;
|
|
54
|
+
date: Date;
|
|
55
|
+
}): Promise<IOpenPgpSignatureVerification>;
|
|
56
|
+
/**
|
|
57
|
+
* A cleartext-signed message with a signature of type 0x01: `InRelease`.
|
|
58
|
+
* The message is strict UTF-8 with LF line endings; see
|
|
59
|
+
* `splitCleartextSignedMessage` for what its framing may hold.
|
|
60
|
+
*/
|
|
61
|
+
verifyCleartextMessage(inputArg: {
|
|
62
|
+
message: Uint8Array;
|
|
63
|
+
date: Date;
|
|
64
|
+
}): Promise<IOpenPgpCleartextVerification>;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Builds a verifier from one armored OpenPGP public key: exactly one
|
|
68
|
+
* transferable v4 public key (the primary key with its user IDs, subkeys and
|
|
69
|
+
* self-signatures, all v4) in exactly one `PUBLIC KEY BLOCK`. A private key
|
|
70
|
+
* block, several blocks or keys, a v6 key, text around the block, an armor
|
|
71
|
+
* CRC-24 that does not match or any other garbage is `invalid-key`
|
|
72
|
+
* (`detail.field` `publicKeyArmored`). Only the structure is checked here;
|
|
73
|
+
* whether a key can sign depends on time and is checked at verification.
|
|
74
|
+
*/
|
|
75
|
+
export declare function createOpenPgpVerifier(inputArg: {
|
|
76
|
+
publicKeyArmored: string;
|
|
77
|
+
}): Promise<IOpenPgpVerifier>;
|