solid-ui 3.0.1-e8256eb → 3.0.1-eac9a32
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/README.md +1 -1
- package/dist/chat/keys.js +4 -4
- package/dist/chat/keys.js.map +1 -1
- package/dist/chat/signature.js +5 -5
- package/dist/chat/signature.js.map +1 -1
- package/dist/solid-ui.esm.js +11769 -12239
- package/dist/solid-ui.esm.js.map +1 -1
- package/dist/solid-ui.esm.min.js +14 -14
- package/dist/solid-ui.esm.min.js.map +1 -1
- package/dist/solid-ui.js +691 -1107
- package/dist/solid-ui.js.map +1 -1
- package/dist/solid-ui.min.js +11 -13
- package/dist/solid-ui.min.js.map +1 -1
- package/dist/versionInfo.js +5 -5
- package/package.json +22 -20
package/dist/solid-ui.js
CHANGED
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
return /******/ (() => { // webpackBootstrap
|
|
12
12
|
/******/ var __webpack_modules__ = ({
|
|
13
13
|
|
|
14
|
-
/***/ 49
|
|
15
|
-
|
|
14
|
+
/***/ 49
|
|
15
|
+
(__unused_webpack_module, exports, __webpack_require__) {
|
|
16
16
|
|
|
17
17
|
"use strict";
|
|
18
18
|
/*!
|
|
@@ -228,28 +228,28 @@ function _preferredTypeLegacy (ext, type0, type1) {
|
|
|
228
228
|
}
|
|
229
229
|
|
|
230
230
|
|
|
231
|
-
/***/ }
|
|
231
|
+
/***/ },
|
|
232
232
|
|
|
233
|
-
/***/ 172
|
|
234
|
-
|
|
233
|
+
/***/ 172
|
|
234
|
+
(module) {
|
|
235
235
|
|
|
236
236
|
function _OverloadYield(e, d) {
|
|
237
237
|
this.v = e, this.k = d;
|
|
238
238
|
}
|
|
239
239
|
module.exports = _OverloadYield, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
240
240
|
|
|
241
|
-
/***/ }
|
|
241
|
+
/***/ },
|
|
242
242
|
|
|
243
|
-
/***/ 264
|
|
244
|
-
|
|
243
|
+
/***/ 264
|
|
244
|
+
(module) {
|
|
245
245
|
|
|
246
246
|
"use strict";
|
|
247
247
|
module.exports = __WEBPACK_EXTERNAL_MODULE__264__;
|
|
248
248
|
|
|
249
|
-
/***/ }
|
|
249
|
+
/***/ },
|
|
250
250
|
|
|
251
|
-
/***/ 373
|
|
252
|
-
|
|
251
|
+
/***/ 373
|
|
252
|
+
(module) {
|
|
253
253
|
|
|
254
254
|
function _regeneratorKeys(e) {
|
|
255
255
|
var n = Object(e),
|
|
@@ -262,10 +262,10 @@ function _regeneratorKeys(e) {
|
|
|
262
262
|
}
|
|
263
263
|
module.exports = _regeneratorKeys, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
264
264
|
|
|
265
|
-
/***/ }
|
|
265
|
+
/***/ },
|
|
266
266
|
|
|
267
|
-
/***/ 378
|
|
268
|
-
|
|
267
|
+
/***/ 378
|
|
268
|
+
(module, __webpack_exports__, __webpack_require__) {
|
|
269
269
|
|
|
270
270
|
"use strict";
|
|
271
271
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
@@ -313,10 +313,10 @@ var icons = module.scriptURI // Firefox extension
|
|
|
313
313
|
var iconBase = icons.iconBase;
|
|
314
314
|
var originalIconBase = icons.originalIconBase;
|
|
315
315
|
|
|
316
|
-
/***/ }
|
|
316
|
+
/***/ },
|
|
317
317
|
|
|
318
|
-
/***/ 386
|
|
319
|
-
|
|
318
|
+
/***/ 386
|
|
319
|
+
(module) {
|
|
320
320
|
|
|
321
321
|
/**
|
|
322
322
|
* Provides a way to access commonly used namespaces
|
|
@@ -402,10 +402,10 @@ function vocab (rdf = { namedNode: u => u }) {
|
|
|
402
402
|
module.exports = vocab
|
|
403
403
|
|
|
404
404
|
|
|
405
|
-
/***/ }
|
|
405
|
+
/***/ },
|
|
406
406
|
|
|
407
|
-
/***/ 423
|
|
408
|
-
|
|
407
|
+
/***/ 423
|
|
408
|
+
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
409
409
|
|
|
410
410
|
"use strict";
|
|
411
411
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
@@ -431,17 +431,17 @@ function trace() {
|
|
|
431
431
|
(_console4 = console).trace.apply(_console4, arguments);
|
|
432
432
|
}
|
|
433
433
|
|
|
434
|
-
/***/ }
|
|
434
|
+
/***/ },
|
|
435
435
|
|
|
436
|
-
/***/ 466
|
|
437
|
-
|
|
436
|
+
/***/ 466
|
|
437
|
+
() {
|
|
438
438
|
|
|
439
439
|
/* (ignored) */
|
|
440
440
|
|
|
441
|
-
/***/ }
|
|
441
|
+
/***/ },
|
|
442
442
|
|
|
443
|
-
/***/ 546
|
|
444
|
-
|
|
443
|
+
/***/ 546
|
|
444
|
+
(module) {
|
|
445
445
|
|
|
446
446
|
function _regeneratorDefine(e, r, n, t) {
|
|
447
447
|
var i = Object.defineProperty;
|
|
@@ -466,10 +466,10 @@ function _regeneratorDefine(e, r, n, t) {
|
|
|
466
466
|
}
|
|
467
467
|
module.exports = _regeneratorDefine, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
468
468
|
|
|
469
|
-
/***/ }
|
|
469
|
+
/***/ },
|
|
470
470
|
|
|
471
|
-
/***/ 579
|
|
472
|
-
|
|
471
|
+
/***/ 579
|
|
472
|
+
(module, __unused_webpack_exports, __webpack_require__) {
|
|
473
473
|
|
|
474
474
|
var _typeof = (__webpack_require__(738)["default"]);
|
|
475
475
|
function _regeneratorValues(e) {
|
|
@@ -491,10 +491,10 @@ function _regeneratorValues(e) {
|
|
|
491
491
|
}
|
|
492
492
|
module.exports = _regeneratorValues, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
493
493
|
|
|
494
|
-
/***/ }
|
|
494
|
+
/***/ },
|
|
495
495
|
|
|
496
|
-
/***/ 580
|
|
497
|
-
|
|
496
|
+
/***/ 580
|
|
497
|
+
(module) {
|
|
498
498
|
|
|
499
499
|
"use strict";
|
|
500
500
|
/*!
|
|
@@ -577,10 +577,10 @@ function escapeHtml(string) {
|
|
|
577
577
|
}
|
|
578
578
|
|
|
579
579
|
|
|
580
|
-
/***/ }
|
|
580
|
+
/***/ },
|
|
581
581
|
|
|
582
|
-
/***/ 598
|
|
583
|
-
|
|
582
|
+
/***/ 598
|
|
583
|
+
(module, __unused_webpack_exports, __webpack_require__) {
|
|
584
584
|
|
|
585
585
|
/*!
|
|
586
586
|
* mime-db
|
|
@@ -596,10 +596,10 @@ function escapeHtml(string) {
|
|
|
596
596
|
module.exports = __webpack_require__(813)
|
|
597
597
|
|
|
598
598
|
|
|
599
|
-
/***/ }
|
|
599
|
+
/***/ },
|
|
600
600
|
|
|
601
|
-
/***/ 633
|
|
602
|
-
|
|
601
|
+
/***/ 633
|
|
602
|
+
(module, __unused_webpack_exports, __webpack_require__) {
|
|
603
603
|
|
|
604
604
|
var OverloadYield = __webpack_require__(172);
|
|
605
605
|
var regenerator = __webpack_require__(993);
|
|
@@ -679,18 +679,18 @@ function _regeneratorRuntime() {
|
|
|
679
679
|
}
|
|
680
680
|
module.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
681
681
|
|
|
682
|
-
/***/ }
|
|
682
|
+
/***/ },
|
|
683
683
|
|
|
684
|
-
/***/ 663
|
|
685
|
-
|
|
684
|
+
/***/ 663
|
|
685
|
+
(module) {
|
|
686
686
|
|
|
687
687
|
"use strict";
|
|
688
688
|
module.exports = __WEBPACK_EXTERNAL_MODULE__663__;
|
|
689
689
|
|
|
690
|
-
/***/ }
|
|
690
|
+
/***/ },
|
|
691
691
|
|
|
692
|
-
/***/ 738
|
|
693
|
-
|
|
692
|
+
/***/ 738
|
|
693
|
+
(module) {
|
|
694
694
|
|
|
695
695
|
function _typeof(o) {
|
|
696
696
|
"@babel/helpers - typeof";
|
|
@@ -703,10 +703,10 @@ function _typeof(o) {
|
|
|
703
703
|
}
|
|
704
704
|
module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
705
705
|
|
|
706
|
-
/***/ }
|
|
706
|
+
/***/ },
|
|
707
707
|
|
|
708
|
-
/***/ 756
|
|
709
|
-
|
|
708
|
+
/***/ 756
|
|
709
|
+
(module, __unused_webpack_exports, __webpack_require__) {
|
|
710
710
|
|
|
711
711
|
// TODO(Babel 8): Remove this file.
|
|
712
712
|
|
|
@@ -725,10 +725,10 @@ try {
|
|
|
725
725
|
}
|
|
726
726
|
|
|
727
727
|
|
|
728
|
-
/***/ }
|
|
728
|
+
/***/ },
|
|
729
729
|
|
|
730
|
-
/***/ 791
|
|
731
|
-
|
|
730
|
+
/***/ 791
|
|
731
|
+
(module, __unused_webpack_exports, __webpack_require__) {
|
|
732
732
|
|
|
733
733
|
var OverloadYield = __webpack_require__(172);
|
|
734
734
|
var regeneratorDefine = __webpack_require__(546);
|
|
@@ -764,18 +764,18 @@ function AsyncIterator(t, e) {
|
|
|
764
764
|
}
|
|
765
765
|
module.exports = AsyncIterator, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
766
766
|
|
|
767
|
-
/***/ }
|
|
767
|
+
/***/ },
|
|
768
768
|
|
|
769
|
-
/***/ 813
|
|
770
|
-
|
|
769
|
+
/***/ 813
|
|
770
|
+
(module) {
|
|
771
771
|
|
|
772
772
|
"use strict";
|
|
773
773
|
module.exports = /*#__PURE__*/JSON.parse('{"application/1d-interleaved-parityfec":{"source":"iana"},"application/3gpdash-qoe-report+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/3gpp-ims+xml":{"source":"iana","compressible":true},"application/3gpphal+json":{"source":"iana","compressible":true},"application/3gpphalforms+json":{"source":"iana","compressible":true},"application/a2l":{"source":"iana"},"application/ace+cbor":{"source":"iana"},"application/ace+json":{"source":"iana","compressible":true},"application/ace-groupcomm+cbor":{"source":"iana"},"application/ace-trl+cbor":{"source":"iana"},"application/activemessage":{"source":"iana"},"application/activity+json":{"source":"iana","compressible":true},"application/aif+cbor":{"source":"iana"},"application/aif+json":{"source":"iana","compressible":true},"application/alto-cdni+json":{"source":"iana","compressible":true},"application/alto-cdnifilter+json":{"source":"iana","compressible":true},"application/alto-costmap+json":{"source":"iana","compressible":true},"application/alto-costmapfilter+json":{"source":"iana","compressible":true},"application/alto-directory+json":{"source":"iana","compressible":true},"application/alto-endpointcost+json":{"source":"iana","compressible":true},"application/alto-endpointcostparams+json":{"source":"iana","compressible":true},"application/alto-endpointprop+json":{"source":"iana","compressible":true},"application/alto-endpointpropparams+json":{"source":"iana","compressible":true},"application/alto-error+json":{"source":"iana","compressible":true},"application/alto-networkmap+json":{"source":"iana","compressible":true},"application/alto-networkmapfilter+json":{"source":"iana","compressible":true},"application/alto-propmap+json":{"source":"iana","compressible":true},"application/alto-propmapparams+json":{"source":"iana","compressible":true},"application/alto-tips+json":{"source":"iana","compressible":true},"application/alto-tipsparams+json":{"source":"iana","compressible":true},"application/alto-updatestreamcontrol+json":{"source":"iana","compressible":true},"application/alto-updatestreamparams+json":{"source":"iana","compressible":true},"application/aml":{"source":"iana"},"application/andrew-inset":{"source":"iana","extensions":["ez"]},"application/appinstaller":{"compressible":false,"extensions":["appinstaller"]},"application/applefile":{"source":"iana"},"application/applixware":{"source":"apache","extensions":["aw"]},"application/appx":{"compressible":false,"extensions":["appx"]},"application/appxbundle":{"compressible":false,"extensions":["appxbundle"]},"application/at+jwt":{"source":"iana"},"application/atf":{"source":"iana"},"application/atfx":{"source":"iana"},"application/atom+xml":{"source":"iana","compressible":true,"extensions":["atom"]},"application/atomcat+xml":{"source":"iana","compressible":true,"extensions":["atomcat"]},"application/atomdeleted+xml":{"source":"iana","compressible":true,"extensions":["atomdeleted"]},"application/atomicmail":{"source":"iana"},"application/atomsvc+xml":{"source":"iana","compressible":true,"extensions":["atomsvc"]},"application/atsc-dwd+xml":{"source":"iana","compressible":true,"extensions":["dwd"]},"application/atsc-dynamic-event-message":{"source":"iana"},"application/atsc-held+xml":{"source":"iana","compressible":true,"extensions":["held"]},"application/atsc-rdt+json":{"source":"iana","compressible":true},"application/atsc-rsat+xml":{"source":"iana","compressible":true,"extensions":["rsat"]},"application/atxml":{"source":"iana"},"application/auth-policy+xml":{"source":"iana","compressible":true},"application/automationml-aml+xml":{"source":"iana","compressible":true,"extensions":["aml"]},"application/automationml-amlx+zip":{"source":"iana","compressible":false,"extensions":["amlx"]},"application/bacnet-xdd+zip":{"source":"iana","compressible":false},"application/batch-smtp":{"source":"iana"},"application/bdoc":{"compressible":false,"extensions":["bdoc"]},"application/beep+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/bufr":{"source":"iana"},"application/c2pa":{"source":"iana"},"application/calendar+json":{"source":"iana","compressible":true},"application/calendar+xml":{"source":"iana","compressible":true,"extensions":["xcs"]},"application/call-completion":{"source":"iana"},"application/cals-1840":{"source":"iana"},"application/captive+json":{"source":"iana","compressible":true},"application/cbor":{"source":"iana"},"application/cbor-seq":{"source":"iana"},"application/cccex":{"source":"iana"},"application/ccmp+xml":{"source":"iana","compressible":true},"application/ccxml+xml":{"source":"iana","compressible":true,"extensions":["ccxml"]},"application/cda+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/cdfx+xml":{"source":"iana","compressible":true,"extensions":["cdfx"]},"application/cdmi-capability":{"source":"iana","extensions":["cdmia"]},"application/cdmi-container":{"source":"iana","extensions":["cdmic"]},"application/cdmi-domain":{"source":"iana","extensions":["cdmid"]},"application/cdmi-object":{"source":"iana","extensions":["cdmio"]},"application/cdmi-queue":{"source":"iana","extensions":["cdmiq"]},"application/cdni":{"source":"iana"},"application/ce+cbor":{"source":"iana"},"application/cea":{"source":"iana"},"application/cea-2018+xml":{"source":"iana","compressible":true},"application/cellml+xml":{"source":"iana","compressible":true},"application/cfw":{"source":"iana"},"application/cid-edhoc+cbor-seq":{"source":"iana"},"application/city+json":{"source":"iana","compressible":true},"application/city+json-seq":{"source":"iana"},"application/clr":{"source":"iana"},"application/clue+xml":{"source":"iana","compressible":true},"application/clue_info+xml":{"source":"iana","compressible":true},"application/cms":{"source":"iana"},"application/cnrp+xml":{"source":"iana","compressible":true},"application/coap-eap":{"source":"iana"},"application/coap-group+json":{"source":"iana","compressible":true},"application/coap-payload":{"source":"iana"},"application/commonground":{"source":"iana"},"application/concise-problem-details+cbor":{"source":"iana"},"application/conference-info+xml":{"source":"iana","compressible":true},"application/cose":{"source":"iana"},"application/cose-key":{"source":"iana"},"application/cose-key-set":{"source":"iana"},"application/cose-x509":{"source":"iana"},"application/cpl+xml":{"source":"iana","compressible":true,"extensions":["cpl"]},"application/csrattrs":{"source":"iana"},"application/csta+xml":{"source":"iana","compressible":true},"application/cstadata+xml":{"source":"iana","compressible":true},"application/csvm+json":{"source":"iana","compressible":true},"application/cu-seeme":{"source":"apache","extensions":["cu"]},"application/cwl":{"source":"iana","extensions":["cwl"]},"application/cwl+json":{"source":"iana","compressible":true},"application/cwl+yaml":{"source":"iana"},"application/cwt":{"source":"iana"},"application/cybercash":{"source":"iana"},"application/dart":{"compressible":true},"application/dash+xml":{"source":"iana","compressible":true,"extensions":["mpd"]},"application/dash-patch+xml":{"source":"iana","compressible":true,"extensions":["mpp"]},"application/dashdelta":{"source":"iana"},"application/davmount+xml":{"source":"iana","compressible":true,"extensions":["davmount"]},"application/dca-rft":{"source":"iana"},"application/dcd":{"source":"iana"},"application/dec-dx":{"source":"iana"},"application/dialog-info+xml":{"source":"iana","compressible":true},"application/dicom":{"source":"iana","extensions":["dcm"]},"application/dicom+json":{"source":"iana","compressible":true},"application/dicom+xml":{"source":"iana","compressible":true},"application/dii":{"source":"iana"},"application/dit":{"source":"iana"},"application/dns":{"source":"iana"},"application/dns+json":{"source":"iana","compressible":true},"application/dns-message":{"source":"iana"},"application/docbook+xml":{"source":"apache","compressible":true,"extensions":["dbk"]},"application/dots+cbor":{"source":"iana"},"application/dpop+jwt":{"source":"iana"},"application/dskpp+xml":{"source":"iana","compressible":true},"application/dssc+der":{"source":"iana","extensions":["dssc"]},"application/dssc+xml":{"source":"iana","compressible":true,"extensions":["xdssc"]},"application/dvcs":{"source":"iana"},"application/eat+cwt":{"source":"iana"},"application/eat+jwt":{"source":"iana"},"application/eat-bun+cbor":{"source":"iana"},"application/eat-bun+json":{"source":"iana","compressible":true},"application/eat-ucs+cbor":{"source":"iana"},"application/eat-ucs+json":{"source":"iana","compressible":true},"application/ecmascript":{"source":"apache","compressible":true,"extensions":["ecma"]},"application/edhoc+cbor-seq":{"source":"iana"},"application/edi-consent":{"source":"iana"},"application/edi-x12":{"source":"iana","compressible":false},"application/edifact":{"source":"iana","compressible":false},"application/efi":{"source":"iana"},"application/elm+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/elm+xml":{"source":"iana","compressible":true},"application/emergencycalldata.cap+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/emergencycalldata.comment+xml":{"source":"iana","compressible":true},"application/emergencycalldata.control+xml":{"source":"iana","compressible":true},"application/emergencycalldata.deviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.ecall.msd":{"source":"iana"},"application/emergencycalldata.legacyesn+json":{"source":"iana","compressible":true},"application/emergencycalldata.providerinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.serviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.subscriberinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.veds+xml":{"source":"iana","compressible":true},"application/emma+xml":{"source":"iana","compressible":true,"extensions":["emma"]},"application/emotionml+xml":{"source":"iana","compressible":true,"extensions":["emotionml"]},"application/encaprtp":{"source":"iana"},"application/entity-statement+jwt":{"source":"iana"},"application/epp+xml":{"source":"iana","compressible":true},"application/epub+zip":{"source":"iana","compressible":false,"extensions":["epub"]},"application/eshop":{"source":"iana"},"application/exi":{"source":"iana","extensions":["exi"]},"application/expect-ct-report+json":{"source":"iana","compressible":true},"application/express":{"source":"iana","extensions":["exp"]},"application/fastinfoset":{"source":"iana"},"application/fastsoap":{"source":"iana"},"application/fdf":{"source":"iana","extensions":["fdf"]},"application/fdt+xml":{"source":"iana","compressible":true,"extensions":["fdt"]},"application/fhir+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/fhir+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/fido.trusted-apps+json":{"compressible":true},"application/fits":{"source":"iana"},"application/flexfec":{"source":"iana"},"application/font-sfnt":{"source":"iana"},"application/font-tdpfr":{"source":"iana","extensions":["pfr"]},"application/font-woff":{"source":"iana","compressible":false},"application/framework-attributes+xml":{"source":"iana","compressible":true},"application/geo+json":{"source":"iana","compressible":true,"extensions":["geojson"]},"application/geo+json-seq":{"source":"iana"},"application/geopackage+sqlite3":{"source":"iana"},"application/geopose+json":{"source":"iana","compressible":true},"application/geoxacml+json":{"source":"iana","compressible":true},"application/geoxacml+xml":{"source":"iana","compressible":true},"application/gltf-buffer":{"source":"iana"},"application/gml+xml":{"source":"iana","compressible":true,"extensions":["gml"]},"application/gnap-binding-jws":{"source":"iana"},"application/gnap-binding-jwsd":{"source":"iana"},"application/gnap-binding-rotation-jws":{"source":"iana"},"application/gnap-binding-rotation-jwsd":{"source":"iana"},"application/gpx+xml":{"source":"apache","compressible":true,"extensions":["gpx"]},"application/grib":{"source":"iana"},"application/gxf":{"source":"apache","extensions":["gxf"]},"application/gzip":{"source":"iana","compressible":false,"extensions":["gz"]},"application/h224":{"source":"iana"},"application/held+xml":{"source":"iana","compressible":true},"application/hjson":{"extensions":["hjson"]},"application/hl7v2+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/http":{"source":"iana"},"application/hyperstudio":{"source":"iana","extensions":["stk"]},"application/ibe-key-request+xml":{"source":"iana","compressible":true},"application/ibe-pkg-reply+xml":{"source":"iana","compressible":true},"application/ibe-pp-data":{"source":"iana"},"application/iges":{"source":"iana"},"application/im-iscomposing+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/index":{"source":"iana"},"application/index.cmd":{"source":"iana"},"application/index.obj":{"source":"iana"},"application/index.response":{"source":"iana"},"application/index.vnd":{"source":"iana"},"application/inkml+xml":{"source":"iana","compressible":true,"extensions":["ink","inkml"]},"application/iotp":{"source":"iana"},"application/ipfix":{"source":"iana","extensions":["ipfix"]},"application/ipp":{"source":"iana"},"application/isup":{"source":"iana"},"application/its+xml":{"source":"iana","compressible":true,"extensions":["its"]},"application/java-archive":{"source":"iana","compressible":false,"extensions":["jar","war","ear"]},"application/java-serialized-object":{"source":"apache","compressible":false,"extensions":["ser"]},"application/java-vm":{"source":"apache","compressible":false,"extensions":["class"]},"application/javascript":{"source":"apache","charset":"UTF-8","compressible":true,"extensions":["js"]},"application/jf2feed+json":{"source":"iana","compressible":true},"application/jose":{"source":"iana"},"application/jose+json":{"source":"iana","compressible":true},"application/jrd+json":{"source":"iana","compressible":true},"application/jscalendar+json":{"source":"iana","compressible":true},"application/jscontact+json":{"source":"iana","compressible":true},"application/json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["json","map"]},"application/json-patch+json":{"source":"iana","compressible":true},"application/json-seq":{"source":"iana"},"application/json5":{"extensions":["json5"]},"application/jsonml+json":{"source":"apache","compressible":true,"extensions":["jsonml"]},"application/jsonpath":{"source":"iana"},"application/jwk+json":{"source":"iana","compressible":true},"application/jwk-set+json":{"source":"iana","compressible":true},"application/jwk-set+jwt":{"source":"iana"},"application/jwt":{"source":"iana"},"application/kpml-request+xml":{"source":"iana","compressible":true},"application/kpml-response+xml":{"source":"iana","compressible":true},"application/ld+json":{"source":"iana","compressible":true,"extensions":["jsonld"]},"application/lgr+xml":{"source":"iana","compressible":true,"extensions":["lgr"]},"application/link-format":{"source":"iana"},"application/linkset":{"source":"iana"},"application/linkset+json":{"source":"iana","compressible":true},"application/load-control+xml":{"source":"iana","compressible":true},"application/logout+jwt":{"source":"iana"},"application/lost+xml":{"source":"iana","compressible":true,"extensions":["lostxml"]},"application/lostsync+xml":{"source":"iana","compressible":true},"application/lpf+zip":{"source":"iana","compressible":false},"application/lxf":{"source":"iana"},"application/mac-binhex40":{"source":"iana","extensions":["hqx"]},"application/mac-compactpro":{"source":"apache","extensions":["cpt"]},"application/macwriteii":{"source":"iana"},"application/mads+xml":{"source":"iana","compressible":true,"extensions":["mads"]},"application/manifest+json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["webmanifest"]},"application/marc":{"source":"iana","extensions":["mrc"]},"application/marcxml+xml":{"source":"iana","compressible":true,"extensions":["mrcx"]},"application/mathematica":{"source":"iana","extensions":["ma","nb","mb"]},"application/mathml+xml":{"source":"iana","compressible":true,"extensions":["mathml"]},"application/mathml-content+xml":{"source":"iana","compressible":true},"application/mathml-presentation+xml":{"source":"iana","compressible":true},"application/mbms-associated-procedure-description+xml":{"source":"iana","compressible":true},"application/mbms-deregister+xml":{"source":"iana","compressible":true},"application/mbms-envelope+xml":{"source":"iana","compressible":true},"application/mbms-msk+xml":{"source":"iana","compressible":true},"application/mbms-msk-response+xml":{"source":"iana","compressible":true},"application/mbms-protection-description+xml":{"source":"iana","compressible":true},"application/mbms-reception-report+xml":{"source":"iana","compressible":true},"application/mbms-register+xml":{"source":"iana","compressible":true},"application/mbms-register-response+xml":{"source":"iana","compressible":true},"application/mbms-schedule+xml":{"source":"iana","compressible":true},"application/mbms-user-service-description+xml":{"source":"iana","compressible":true},"application/mbox":{"source":"iana","extensions":["mbox"]},"application/media-policy-dataset+xml":{"source":"iana","compressible":true,"extensions":["mpf"]},"application/media_control+xml":{"source":"iana","compressible":true},"application/mediaservercontrol+xml":{"source":"iana","compressible":true,"extensions":["mscml"]},"application/merge-patch+json":{"source":"iana","compressible":true},"application/metalink+xml":{"source":"apache","compressible":true,"extensions":["metalink"]},"application/metalink4+xml":{"source":"iana","compressible":true,"extensions":["meta4"]},"application/mets+xml":{"source":"iana","compressible":true,"extensions":["mets"]},"application/mf4":{"source":"iana"},"application/mikey":{"source":"iana"},"application/mipc":{"source":"iana"},"application/missing-blocks+cbor-seq":{"source":"iana"},"application/mmt-aei+xml":{"source":"iana","compressible":true,"extensions":["maei"]},"application/mmt-usd+xml":{"source":"iana","compressible":true,"extensions":["musd"]},"application/mods+xml":{"source":"iana","compressible":true,"extensions":["mods"]},"application/moss-keys":{"source":"iana"},"application/moss-signature":{"source":"iana"},"application/mosskey-data":{"source":"iana"},"application/mosskey-request":{"source":"iana"},"application/mp21":{"source":"iana","extensions":["m21","mp21"]},"application/mp4":{"source":"iana","extensions":["mp4","mpg4","mp4s","m4p"]},"application/mpeg4-generic":{"source":"iana"},"application/mpeg4-iod":{"source":"iana"},"application/mpeg4-iod-xmt":{"source":"iana"},"application/mrb-consumer+xml":{"source":"iana","compressible":true},"application/mrb-publish+xml":{"source":"iana","compressible":true},"application/msc-ivr+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msc-mixer+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msix":{"compressible":false,"extensions":["msix"]},"application/msixbundle":{"compressible":false,"extensions":["msixbundle"]},"application/msword":{"source":"iana","compressible":false,"extensions":["doc","dot"]},"application/mud+json":{"source":"iana","compressible":true},"application/multipart-core":{"source":"iana"},"application/mxf":{"source":"iana","extensions":["mxf"]},"application/n-quads":{"source":"iana","extensions":["nq"]},"application/n-triples":{"source":"iana","extensions":["nt"]},"application/nasdata":{"source":"iana"},"application/news-checkgroups":{"source":"iana","charset":"US-ASCII"},"application/news-groupinfo":{"source":"iana","charset":"US-ASCII"},"application/news-transmission":{"source":"iana"},"application/nlsml+xml":{"source":"iana","compressible":true},"application/node":{"source":"iana","extensions":["cjs"]},"application/nss":{"source":"iana"},"application/oauth-authz-req+jwt":{"source":"iana"},"application/oblivious-dns-message":{"source":"iana"},"application/ocsp-request":{"source":"iana"},"application/ocsp-response":{"source":"iana"},"application/octet-stream":{"source":"iana","compressible":true,"extensions":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{"source":"iana","extensions":["oda"]},"application/odm+xml":{"source":"iana","compressible":true},"application/odx":{"source":"iana"},"application/oebps-package+xml":{"source":"iana","compressible":true,"extensions":["opf"]},"application/ogg":{"source":"iana","compressible":false,"extensions":["ogx"]},"application/ohttp-keys":{"source":"iana"},"application/omdoc+xml":{"source":"apache","compressible":true,"extensions":["omdoc"]},"application/onenote":{"source":"apache","extensions":["onetoc","onetoc2","onetmp","onepkg","one","onea"]},"application/opc-nodeset+xml":{"source":"iana","compressible":true},"application/oscore":{"source":"iana"},"application/oxps":{"source":"iana","extensions":["oxps"]},"application/p21":{"source":"iana"},"application/p21+zip":{"source":"iana","compressible":false},"application/p2p-overlay+xml":{"source":"iana","compressible":true,"extensions":["relo"]},"application/parityfec":{"source":"iana"},"application/passport":{"source":"iana"},"application/patch-ops-error+xml":{"source":"iana","compressible":true,"extensions":["xer"]},"application/pdf":{"source":"iana","compressible":false,"extensions":["pdf"]},"application/pdx":{"source":"iana"},"application/pem-certificate-chain":{"source":"iana"},"application/pgp-encrypted":{"source":"iana","compressible":false,"extensions":["pgp"]},"application/pgp-keys":{"source":"iana","extensions":["asc"]},"application/pgp-signature":{"source":"iana","extensions":["sig","asc"]},"application/pics-rules":{"source":"apache","extensions":["prf"]},"application/pidf+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pidf-diff+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pkcs10":{"source":"iana","extensions":["p10"]},"application/pkcs12":{"source":"iana"},"application/pkcs7-mime":{"source":"iana","extensions":["p7m","p7c"]},"application/pkcs7-signature":{"source":"iana","extensions":["p7s"]},"application/pkcs8":{"source":"iana","extensions":["p8"]},"application/pkcs8-encrypted":{"source":"iana"},"application/pkix-attr-cert":{"source":"iana","extensions":["ac"]},"application/pkix-cert":{"source":"iana","extensions":["cer"]},"application/pkix-crl":{"source":"iana","extensions":["crl"]},"application/pkix-pkipath":{"source":"iana","extensions":["pkipath"]},"application/pkixcmp":{"source":"iana","extensions":["pki"]},"application/pls+xml":{"source":"iana","compressible":true,"extensions":["pls"]},"application/poc-settings+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/postscript":{"source":"iana","compressible":true,"extensions":["ai","eps","ps"]},"application/ppsp-tracker+json":{"source":"iana","compressible":true},"application/private-token-issuer-directory":{"source":"iana"},"application/private-token-request":{"source":"iana"},"application/private-token-response":{"source":"iana"},"application/problem+json":{"source":"iana","compressible":true},"application/problem+xml":{"source":"iana","compressible":true},"application/provenance+xml":{"source":"iana","compressible":true,"extensions":["provx"]},"application/provided-claims+jwt":{"source":"iana"},"application/prs.alvestrand.titrax-sheet":{"source":"iana"},"application/prs.cww":{"source":"iana","extensions":["cww"]},"application/prs.cyn":{"source":"iana","charset":"7-BIT"},"application/prs.hpub+zip":{"source":"iana","compressible":false},"application/prs.implied-document+xml":{"source":"iana","compressible":true},"application/prs.implied-executable":{"source":"iana"},"application/prs.implied-object+json":{"source":"iana","compressible":true},"application/prs.implied-object+json-seq":{"source":"iana"},"application/prs.implied-object+yaml":{"source":"iana"},"application/prs.implied-structure":{"source":"iana"},"application/prs.mayfile":{"source":"iana"},"application/prs.nprend":{"source":"iana"},"application/prs.plucker":{"source":"iana"},"application/prs.rdf-xml-crypt":{"source":"iana"},"application/prs.vcfbzip2":{"source":"iana"},"application/prs.xsf+xml":{"source":"iana","compressible":true,"extensions":["xsf"]},"application/pskc+xml":{"source":"iana","compressible":true,"extensions":["pskcxml"]},"application/pvd+json":{"source":"iana","compressible":true},"application/qsig":{"source":"iana"},"application/raml+yaml":{"compressible":true,"extensions":["raml"]},"application/raptorfec":{"source":"iana"},"application/rdap+json":{"source":"iana","compressible":true},"application/rdf+xml":{"source":"iana","compressible":true,"extensions":["rdf","owl"]},"application/reginfo+xml":{"source":"iana","compressible":true,"extensions":["rif"]},"application/relax-ng-compact-syntax":{"source":"iana","extensions":["rnc"]},"application/remote-printing":{"source":"apache"},"application/reputon+json":{"source":"iana","compressible":true},"application/resolve-response+jwt":{"source":"iana"},"application/resource-lists+xml":{"source":"iana","compressible":true,"extensions":["rl"]},"application/resource-lists-diff+xml":{"source":"iana","compressible":true,"extensions":["rld"]},"application/rfc+xml":{"source":"iana","compressible":true},"application/riscos":{"source":"iana"},"application/rlmi+xml":{"source":"iana","compressible":true},"application/rls-services+xml":{"source":"iana","compressible":true,"extensions":["rs"]},"application/route-apd+xml":{"source":"iana","compressible":true,"extensions":["rapd"]},"application/route-s-tsid+xml":{"source":"iana","compressible":true,"extensions":["sls"]},"application/route-usd+xml":{"source":"iana","compressible":true,"extensions":["rusd"]},"application/rpki-checklist":{"source":"iana"},"application/rpki-ghostbusters":{"source":"iana","extensions":["gbr"]},"application/rpki-manifest":{"source":"iana","extensions":["mft"]},"application/rpki-publication":{"source":"iana"},"application/rpki-roa":{"source":"iana","extensions":["roa"]},"application/rpki-signed-tal":{"source":"iana"},"application/rpki-updown":{"source":"iana"},"application/rsd+xml":{"source":"apache","compressible":true,"extensions":["rsd"]},"application/rss+xml":{"source":"apache","compressible":true,"extensions":["rss"]},"application/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"application/rtploopback":{"source":"iana"},"application/rtx":{"source":"iana"},"application/samlassertion+xml":{"source":"iana","compressible":true},"application/samlmetadata+xml":{"source":"iana","compressible":true},"application/sarif+json":{"source":"iana","compressible":true},"application/sarif-external-properties+json":{"source":"iana","compressible":true},"application/sbe":{"source":"iana"},"application/sbml+xml":{"source":"iana","compressible":true,"extensions":["sbml"]},"application/scaip+xml":{"source":"iana","compressible":true},"application/scim+json":{"source":"iana","compressible":true},"application/scvp-cv-request":{"source":"iana","extensions":["scq"]},"application/scvp-cv-response":{"source":"iana","extensions":["scs"]},"application/scvp-vp-request":{"source":"iana","extensions":["spq"]},"application/scvp-vp-response":{"source":"iana","extensions":["spp"]},"application/sdp":{"source":"iana","extensions":["sdp"]},"application/secevent+jwt":{"source":"iana"},"application/senml+cbor":{"source":"iana"},"application/senml+json":{"source":"iana","compressible":true},"application/senml+xml":{"source":"iana","compressible":true,"extensions":["senmlx"]},"application/senml-etch+cbor":{"source":"iana"},"application/senml-etch+json":{"source":"iana","compressible":true},"application/senml-exi":{"source":"iana"},"application/sensml+cbor":{"source":"iana"},"application/sensml+json":{"source":"iana","compressible":true},"application/sensml+xml":{"source":"iana","compressible":true,"extensions":["sensmlx"]},"application/sensml-exi":{"source":"iana"},"application/sep+xml":{"source":"iana","compressible":true},"application/sep-exi":{"source":"iana"},"application/session-info":{"source":"iana"},"application/set-payment":{"source":"iana"},"application/set-payment-initiation":{"source":"iana","extensions":["setpay"]},"application/set-registration":{"source":"iana"},"application/set-registration-initiation":{"source":"iana","extensions":["setreg"]},"application/sgml":{"source":"iana"},"application/sgml-open-catalog":{"source":"iana"},"application/shf+xml":{"source":"iana","compressible":true,"extensions":["shf"]},"application/sieve":{"source":"iana","extensions":["siv","sieve"]},"application/simple-filter+xml":{"source":"iana","compressible":true},"application/simple-message-summary":{"source":"iana"},"application/simplesymbolcontainer":{"source":"iana"},"application/sipc":{"source":"iana"},"application/slate":{"source":"iana"},"application/smil":{"source":"apache"},"application/smil+xml":{"source":"iana","compressible":true,"extensions":["smi","smil"]},"application/smpte336m":{"source":"iana"},"application/soap+fastinfoset":{"source":"iana"},"application/soap+xml":{"source":"iana","compressible":true},"application/sparql-query":{"source":"iana","extensions":["rq"]},"application/sparql-results+xml":{"source":"iana","compressible":true,"extensions":["srx"]},"application/spdx+json":{"source":"iana","compressible":true},"application/spirits-event+xml":{"source":"iana","compressible":true},"application/sql":{"source":"iana","extensions":["sql"]},"application/srgs":{"source":"iana","extensions":["gram"]},"application/srgs+xml":{"source":"iana","compressible":true,"extensions":["grxml"]},"application/sru+xml":{"source":"iana","compressible":true,"extensions":["sru"]},"application/ssdl+xml":{"source":"apache","compressible":true,"extensions":["ssdl"]},"application/sslkeylogfile":{"source":"iana"},"application/ssml+xml":{"source":"iana","compressible":true,"extensions":["ssml"]},"application/st2110-41":{"source":"iana"},"application/stix+json":{"source":"iana","compressible":true},"application/stratum":{"source":"iana"},"application/swid+cbor":{"source":"iana"},"application/swid+xml":{"source":"iana","compressible":true,"extensions":["swidtag"]},"application/tamp-apex-update":{"source":"iana"},"application/tamp-apex-update-confirm":{"source":"iana"},"application/tamp-community-update":{"source":"iana"},"application/tamp-community-update-confirm":{"source":"iana"},"application/tamp-error":{"source":"iana"},"application/tamp-sequence-adjust":{"source":"iana"},"application/tamp-sequence-adjust-confirm":{"source":"iana"},"application/tamp-status-query":{"source":"iana"},"application/tamp-status-response":{"source":"iana"},"application/tamp-update":{"source":"iana"},"application/tamp-update-confirm":{"source":"iana"},"application/tar":{"compressible":true},"application/taxii+json":{"source":"iana","compressible":true},"application/td+json":{"source":"iana","compressible":true},"application/tei+xml":{"source":"iana","compressible":true,"extensions":["tei","teicorpus"]},"application/tetra_isi":{"source":"iana"},"application/thraud+xml":{"source":"iana","compressible":true,"extensions":["tfi"]},"application/timestamp-query":{"source":"iana"},"application/timestamp-reply":{"source":"iana"},"application/timestamped-data":{"source":"iana","extensions":["tsd"]},"application/tlsrpt+gzip":{"source":"iana"},"application/tlsrpt+json":{"source":"iana","compressible":true},"application/tm+json":{"source":"iana","compressible":true},"application/tnauthlist":{"source":"iana"},"application/toc+cbor":{"source":"iana"},"application/token-introspection+jwt":{"source":"iana"},"application/toml":{"source":"iana","compressible":true,"extensions":["toml"]},"application/trickle-ice-sdpfrag":{"source":"iana"},"application/trig":{"source":"iana","extensions":["trig"]},"application/trust-chain+json":{"source":"iana","compressible":true},"application/trust-mark+jwt":{"source":"iana"},"application/trust-mark-delegation+jwt":{"source":"iana"},"application/ttml+xml":{"source":"iana","compressible":true,"extensions":["ttml"]},"application/tve-trigger":{"source":"iana"},"application/tzif":{"source":"iana"},"application/tzif-leap":{"source":"iana"},"application/ubjson":{"compressible":false,"extensions":["ubj"]},"application/uccs+cbor":{"source":"iana"},"application/ujcs+json":{"source":"iana","compressible":true},"application/ulpfec":{"source":"iana"},"application/urc-grpsheet+xml":{"source":"iana","compressible":true},"application/urc-ressheet+xml":{"source":"iana","compressible":true,"extensions":["rsheet"]},"application/urc-targetdesc+xml":{"source":"iana","compressible":true,"extensions":["td"]},"application/urc-uisocketdesc+xml":{"source":"iana","compressible":true},"application/vc":{"source":"iana"},"application/vc+cose":{"source":"iana"},"application/vc+jwt":{"source":"iana"},"application/vcard+json":{"source":"iana","compressible":true},"application/vcard+xml":{"source":"iana","compressible":true},"application/vemmi":{"source":"iana"},"application/vividence.scriptfile":{"source":"apache"},"application/vnd.1000minds.decision-model+xml":{"source":"iana","compressible":true,"extensions":["1km"]},"application/vnd.1ob":{"source":"iana"},"application/vnd.3gpp-prose+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-prose-pc3a+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-prose-pc3ach+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-prose-pc3ch+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-prose-pc8+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-v2x-local-service-information":{"source":"iana"},"application/vnd.3gpp.5gnas":{"source":"iana"},"application/vnd.3gpp.5gsa2x":{"source":"iana"},"application/vnd.3gpp.5gsa2x-local-service-information":{"source":"iana"},"application/vnd.3gpp.5gsv2x":{"source":"iana"},"application/vnd.3gpp.5gsv2x-local-service-information":{"source":"iana"},"application/vnd.3gpp.access-transfer-events+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.bsf+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.crs+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.current-location-discovery+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gmop+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gtpc":{"source":"iana"},"application/vnd.3gpp.interworking-data":{"source":"iana"},"application/vnd.3gpp.lpp":{"source":"iana"},"application/vnd.3gpp.mc-signalling-ear":{"source":"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-msgstore-ctrl-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-payload":{"source":"iana"},"application/vnd.3gpp.mcdata-regroup+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-signalling":{"source":"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-floor-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-regroup+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-signed+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-init-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-regroup+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-transmission-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mid-call+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ngap":{"source":"iana"},"application/vnd.3gpp.pfcp":{"source":"iana"},"application/vnd.3gpp.pic-bw-large":{"source":"iana","extensions":["plb"]},"application/vnd.3gpp.pic-bw-small":{"source":"iana","extensions":["psb"]},"application/vnd.3gpp.pic-bw-var":{"source":"iana","extensions":["pvb"]},"application/vnd.3gpp.pinapp-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.s1ap":{"source":"iana"},"application/vnd.3gpp.seal-group-doc+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.seal-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.seal-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.seal-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.seal-network-qos-management-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.seal-ue-config-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.seal-unicast-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.seal-user-profile-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.sms":{"source":"iana"},"application/vnd.3gpp.sms+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-ext+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.state-and-event-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ussd+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.v2x":{"source":"iana"},"application/vnd.3gpp.vae-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.bcmcsinfo+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.sms":{"source":"iana"},"application/vnd.3gpp2.tcap":{"source":"iana","extensions":["tcap"]},"application/vnd.3lightssoftware.imagescal":{"source":"iana"},"application/vnd.3m.post-it-notes":{"source":"iana","extensions":["pwn"]},"application/vnd.accpac.simply.aso":{"source":"iana","extensions":["aso"]},"application/vnd.accpac.simply.imp":{"source":"iana","extensions":["imp"]},"application/vnd.acm.addressxfer+json":{"source":"iana","compressible":true},"application/vnd.acm.chatbot+json":{"source":"iana","compressible":true},"application/vnd.acucobol":{"source":"iana","extensions":["acu"]},"application/vnd.acucorp":{"source":"iana","extensions":["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{"source":"apache","compressible":false,"extensions":["air"]},"application/vnd.adobe.flash.movie":{"source":"iana"},"application/vnd.adobe.formscentral.fcdt":{"source":"iana","extensions":["fcdt"]},"application/vnd.adobe.fxp":{"source":"iana","extensions":["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{"source":"iana"},"application/vnd.adobe.xdp+xml":{"source":"iana","compressible":true,"extensions":["xdp"]},"application/vnd.adobe.xfdf":{"source":"apache","extensions":["xfdf"]},"application/vnd.aether.imp":{"source":"iana"},"application/vnd.afpc.afplinedata":{"source":"iana"},"application/vnd.afpc.afplinedata-pagedef":{"source":"iana"},"application/vnd.afpc.cmoca-cmresource":{"source":"iana"},"application/vnd.afpc.foca-charset":{"source":"iana"},"application/vnd.afpc.foca-codedfont":{"source":"iana"},"application/vnd.afpc.foca-codepage":{"source":"iana"},"application/vnd.afpc.modca":{"source":"iana"},"application/vnd.afpc.modca-cmtable":{"source":"iana"},"application/vnd.afpc.modca-formdef":{"source":"iana"},"application/vnd.afpc.modca-mediummap":{"source":"iana"},"application/vnd.afpc.modca-objectcontainer":{"source":"iana"},"application/vnd.afpc.modca-overlay":{"source":"iana"},"application/vnd.afpc.modca-pagesegment":{"source":"iana"},"application/vnd.age":{"source":"iana","extensions":["age"]},"application/vnd.ah-barcode":{"source":"apache"},"application/vnd.ahead.space":{"source":"iana","extensions":["ahead"]},"application/vnd.airzip.filesecure.azf":{"source":"iana","extensions":["azf"]},"application/vnd.airzip.filesecure.azs":{"source":"iana","extensions":["azs"]},"application/vnd.amadeus+json":{"source":"iana","compressible":true},"application/vnd.amazon.ebook":{"source":"apache","extensions":["azw"]},"application/vnd.amazon.mobi8-ebook":{"source":"iana"},"application/vnd.americandynamics.acc":{"source":"iana","extensions":["acc"]},"application/vnd.amiga.ami":{"source":"iana","extensions":["ami"]},"application/vnd.amundsen.maze+xml":{"source":"iana","compressible":true},"application/vnd.android.ota":{"source":"iana"},"application/vnd.android.package-archive":{"source":"apache","compressible":false,"extensions":["apk"]},"application/vnd.anki":{"source":"iana"},"application/vnd.anser-web-certificate-issue-initiation":{"source":"iana","extensions":["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{"source":"apache","extensions":["fti"]},"application/vnd.antix.game-component":{"source":"iana","extensions":["atx"]},"application/vnd.apache.arrow.file":{"source":"iana"},"application/vnd.apache.arrow.stream":{"source":"iana"},"application/vnd.apache.parquet":{"source":"iana"},"application/vnd.apache.thrift.binary":{"source":"iana"},"application/vnd.apache.thrift.compact":{"source":"iana"},"application/vnd.apache.thrift.json":{"source":"iana"},"application/vnd.apexlang":{"source":"iana"},"application/vnd.api+json":{"source":"iana","compressible":true},"application/vnd.aplextor.warrp+json":{"source":"iana","compressible":true},"application/vnd.apothekende.reservation+json":{"source":"iana","compressible":true},"application/vnd.apple.installer+xml":{"source":"iana","compressible":true,"extensions":["mpkg"]},"application/vnd.apple.keynote":{"source":"iana","extensions":["key"]},"application/vnd.apple.mpegurl":{"source":"iana","extensions":["m3u8"]},"application/vnd.apple.numbers":{"source":"iana","extensions":["numbers"]},"application/vnd.apple.pages":{"source":"iana","extensions":["pages"]},"application/vnd.apple.pkpass":{"compressible":false,"extensions":["pkpass"]},"application/vnd.arastra.swi":{"source":"apache"},"application/vnd.aristanetworks.swi":{"source":"iana","extensions":["swi"]},"application/vnd.artisan+json":{"source":"iana","compressible":true},"application/vnd.artsquare":{"source":"iana"},"application/vnd.astraea-software.iota":{"source":"iana","extensions":["iota"]},"application/vnd.audiograph":{"source":"iana","extensions":["aep"]},"application/vnd.autodesk.fbx":{"extensions":["fbx"]},"application/vnd.autopackage":{"source":"iana"},"application/vnd.avalon+json":{"source":"iana","compressible":true},"application/vnd.avistar+xml":{"source":"iana","compressible":true},"application/vnd.balsamiq.bmml+xml":{"source":"iana","compressible":true,"extensions":["bmml"]},"application/vnd.balsamiq.bmpr":{"source":"iana"},"application/vnd.banana-accounting":{"source":"iana"},"application/vnd.bbf.usp.error":{"source":"iana"},"application/vnd.bbf.usp.msg":{"source":"iana"},"application/vnd.bbf.usp.msg+json":{"source":"iana","compressible":true},"application/vnd.bekitzur-stech+json":{"source":"iana","compressible":true},"application/vnd.belightsoft.lhzd+zip":{"source":"iana","compressible":false},"application/vnd.belightsoft.lhzl+zip":{"source":"iana","compressible":false},"application/vnd.bint.med-content":{"source":"iana"},"application/vnd.biopax.rdf+xml":{"source":"iana","compressible":true},"application/vnd.blink-idb-value-wrapper":{"source":"iana"},"application/vnd.blueice.multipass":{"source":"iana","extensions":["mpm"]},"application/vnd.bluetooth.ep.oob":{"source":"iana"},"application/vnd.bluetooth.le.oob":{"source":"iana"},"application/vnd.bmi":{"source":"iana","extensions":["bmi"]},"application/vnd.bpf":{"source":"iana"},"application/vnd.bpf3":{"source":"iana"},"application/vnd.businessobjects":{"source":"iana","extensions":["rep"]},"application/vnd.byu.uapi+json":{"source":"iana","compressible":true},"application/vnd.bzip3":{"source":"iana"},"application/vnd.c3voc.schedule+xml":{"source":"iana","compressible":true},"application/vnd.cab-jscript":{"source":"iana"},"application/vnd.canon-cpdl":{"source":"iana"},"application/vnd.canon-lips":{"source":"iana"},"application/vnd.capasystems-pg+json":{"source":"iana","compressible":true},"application/vnd.cendio.thinlinc.clientconf":{"source":"iana"},"application/vnd.century-systems.tcp_stream":{"source":"iana"},"application/vnd.chemdraw+xml":{"source":"iana","compressible":true,"extensions":["cdxml"]},"application/vnd.chess-pgn":{"source":"iana"},"application/vnd.chipnuts.karaoke-mmd":{"source":"iana","extensions":["mmd"]},"application/vnd.ciedi":{"source":"iana"},"application/vnd.cinderella":{"source":"iana","extensions":["cdy"]},"application/vnd.cirpack.isdn-ext":{"source":"iana"},"application/vnd.citationstyles.style+xml":{"source":"iana","compressible":true,"extensions":["csl"]},"application/vnd.claymore":{"source":"iana","extensions":["cla"]},"application/vnd.cloanto.rp9":{"source":"iana","extensions":["rp9"]},"application/vnd.clonk.c4group":{"source":"iana","extensions":["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{"source":"iana","extensions":["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{"source":"iana","extensions":["c11amz"]},"application/vnd.cncf.helm.chart.content.v1.tar+gzip":{"source":"iana"},"application/vnd.cncf.helm.chart.provenance.v1.prov":{"source":"iana"},"application/vnd.cncf.helm.config.v1+json":{"source":"iana","compressible":true},"application/vnd.coffeescript":{"source":"iana"},"application/vnd.collabio.xodocuments.document":{"source":"iana"},"application/vnd.collabio.xodocuments.document-template":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation-template":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{"source":"iana"},"application/vnd.collection+json":{"source":"iana","compressible":true},"application/vnd.collection.doc+json":{"source":"iana","compressible":true},"application/vnd.collection.next+json":{"source":"iana","compressible":true},"application/vnd.comicbook+zip":{"source":"iana","compressible":false},"application/vnd.comicbook-rar":{"source":"iana"},"application/vnd.commerce-battelle":{"source":"iana"},"application/vnd.commonspace":{"source":"iana","extensions":["csp"]},"application/vnd.contact.cmsg":{"source":"iana","extensions":["cdbcmsg"]},"application/vnd.coreos.ignition+json":{"source":"iana","compressible":true},"application/vnd.cosmocaller":{"source":"iana","extensions":["cmc"]},"application/vnd.crick.clicker":{"source":"iana","extensions":["clkx"]},"application/vnd.crick.clicker.keyboard":{"source":"iana","extensions":["clkk"]},"application/vnd.crick.clicker.palette":{"source":"iana","extensions":["clkp"]},"application/vnd.crick.clicker.template":{"source":"iana","extensions":["clkt"]},"application/vnd.crick.clicker.wordbank":{"source":"iana","extensions":["clkw"]},"application/vnd.criticaltools.wbs+xml":{"source":"iana","compressible":true,"extensions":["wbs"]},"application/vnd.cryptii.pipe+json":{"source":"iana","compressible":true},"application/vnd.crypto-shade-file":{"source":"iana"},"application/vnd.cryptomator.encrypted":{"source":"iana"},"application/vnd.cryptomator.vault":{"source":"iana"},"application/vnd.ctc-posml":{"source":"iana","extensions":["pml"]},"application/vnd.ctct.ws+xml":{"source":"iana","compressible":true},"application/vnd.cups-pdf":{"source":"iana"},"application/vnd.cups-postscript":{"source":"iana"},"application/vnd.cups-ppd":{"source":"iana","extensions":["ppd"]},"application/vnd.cups-raster":{"source":"iana"},"application/vnd.cups-raw":{"source":"iana"},"application/vnd.curl":{"source":"iana"},"application/vnd.curl.car":{"source":"apache","extensions":["car"]},"application/vnd.curl.pcurl":{"source":"apache","extensions":["pcurl"]},"application/vnd.cyan.dean.root+xml":{"source":"iana","compressible":true},"application/vnd.cybank":{"source":"iana"},"application/vnd.cyclonedx+json":{"source":"iana","compressible":true},"application/vnd.cyclonedx+xml":{"source":"iana","compressible":true},"application/vnd.d2l.coursepackage1p0+zip":{"source":"iana","compressible":false},"application/vnd.d3m-dataset":{"source":"iana"},"application/vnd.d3m-problem":{"source":"iana"},"application/vnd.dart":{"source":"iana","compressible":true,"extensions":["dart"]},"application/vnd.data-vision.rdz":{"source":"iana","extensions":["rdz"]},"application/vnd.datalog":{"source":"iana"},"application/vnd.datapackage+json":{"source":"iana","compressible":true},"application/vnd.dataresource+json":{"source":"iana","compressible":true},"application/vnd.dbf":{"source":"iana","extensions":["dbf"]},"application/vnd.dcmp+xml":{"source":"iana","compressible":true,"extensions":["dcmp"]},"application/vnd.debian.binary-package":{"source":"iana"},"application/vnd.dece.data":{"source":"iana","extensions":["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{"source":"iana","compressible":true,"extensions":["uvt","uvvt"]},"application/vnd.dece.unspecified":{"source":"iana","extensions":["uvx","uvvx"]},"application/vnd.dece.zip":{"source":"iana","extensions":["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{"source":"iana","extensions":["fe_launch"]},"application/vnd.desmume.movie":{"source":"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{"source":"iana"},"application/vnd.dm.delegation+xml":{"source":"iana","compressible":true},"application/vnd.dna":{"source":"iana","extensions":["dna"]},"application/vnd.document+json":{"source":"iana","compressible":true},"application/vnd.dolby.mlp":{"source":"apache","extensions":["mlp"]},"application/vnd.dolby.mobile.1":{"source":"iana"},"application/vnd.dolby.mobile.2":{"source":"iana"},"application/vnd.doremir.scorecloud-binary-document":{"source":"iana"},"application/vnd.dpgraph":{"source":"iana","extensions":["dpg"]},"application/vnd.dreamfactory":{"source":"iana","extensions":["dfac"]},"application/vnd.drive+json":{"source":"iana","compressible":true},"application/vnd.ds-keypoint":{"source":"apache","extensions":["kpxx"]},"application/vnd.dtg.local":{"source":"iana"},"application/vnd.dtg.local.flash":{"source":"iana"},"application/vnd.dtg.local.html":{"source":"iana"},"application/vnd.dvb.ait":{"source":"iana","extensions":["ait"]},"application/vnd.dvb.dvbisl+xml":{"source":"iana","compressible":true},"application/vnd.dvb.dvbj":{"source":"iana"},"application/vnd.dvb.esgcontainer":{"source":"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess2":{"source":"iana"},"application/vnd.dvb.ipdcesgpdd":{"source":"iana"},"application/vnd.dvb.ipdcroaming":{"source":"iana"},"application/vnd.dvb.iptv.alfec-base":{"source":"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{"source":"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-container+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-generic+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-msglist+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-request+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-response+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-init+xml":{"source":"iana","compressible":true},"application/vnd.dvb.pfr":{"source":"iana"},"application/vnd.dvb.service":{"source":"iana","extensions":["svc"]},"application/vnd.dxr":{"source":"iana"},"application/vnd.dynageo":{"source":"iana","extensions":["geo"]},"application/vnd.dzr":{"source":"iana"},"application/vnd.easykaraoke.cdgdownload":{"source":"iana"},"application/vnd.ecdis-update":{"source":"iana"},"application/vnd.ecip.rlp":{"source":"iana"},"application/vnd.eclipse.ditto+json":{"source":"iana","compressible":true},"application/vnd.ecowin.chart":{"source":"iana","extensions":["mag"]},"application/vnd.ecowin.filerequest":{"source":"iana"},"application/vnd.ecowin.fileupdate":{"source":"iana"},"application/vnd.ecowin.series":{"source":"iana"},"application/vnd.ecowin.seriesrequest":{"source":"iana"},"application/vnd.ecowin.seriesupdate":{"source":"iana"},"application/vnd.efi.img":{"source":"iana"},"application/vnd.efi.iso":{"source":"iana"},"application/vnd.eln+zip":{"source":"iana","compressible":false},"application/vnd.emclient.accessrequest+xml":{"source":"iana","compressible":true},"application/vnd.enliven":{"source":"iana","extensions":["nml"]},"application/vnd.enphase.envoy":{"source":"iana"},"application/vnd.eprints.data+xml":{"source":"iana","compressible":true},"application/vnd.epson.esf":{"source":"iana","extensions":["esf"]},"application/vnd.epson.msf":{"source":"iana","extensions":["msf"]},"application/vnd.epson.quickanime":{"source":"iana","extensions":["qam"]},"application/vnd.epson.salt":{"source":"iana","extensions":["slt"]},"application/vnd.epson.ssf":{"source":"iana","extensions":["ssf"]},"application/vnd.ericsson.quickcall":{"source":"iana"},"application/vnd.erofs":{"source":"iana"},"application/vnd.espass-espass+zip":{"source":"iana","compressible":false},"application/vnd.eszigno3+xml":{"source":"iana","compressible":true,"extensions":["es3","et3"]},"application/vnd.etsi.aoc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.asic-e+zip":{"source":"iana","compressible":false},"application/vnd.etsi.asic-s+zip":{"source":"iana","compressible":false},"application/vnd.etsi.cug+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvcommand+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-bc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-cod+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-npvr+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvservice+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsync+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvueprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mcid+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mheg5":{"source":"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{"source":"iana","compressible":true},"application/vnd.etsi.pstn+xml":{"source":"iana","compressible":true},"application/vnd.etsi.sci+xml":{"source":"iana","compressible":true},"application/vnd.etsi.simservs+xml":{"source":"iana","compressible":true},"application/vnd.etsi.timestamp-token":{"source":"iana"},"application/vnd.etsi.tsl+xml":{"source":"iana","compressible":true},"application/vnd.etsi.tsl.der":{"source":"iana"},"application/vnd.eu.kasparian.car+json":{"source":"iana","compressible":true},"application/vnd.eudora.data":{"source":"iana"},"application/vnd.evolv.ecig.profile":{"source":"iana"},"application/vnd.evolv.ecig.settings":{"source":"iana"},"application/vnd.evolv.ecig.theme":{"source":"iana"},"application/vnd.exstream-empower+zip":{"source":"iana","compressible":false},"application/vnd.exstream-package":{"source":"iana"},"application/vnd.ezpix-album":{"source":"iana","extensions":["ez2"]},"application/vnd.ezpix-package":{"source":"iana","extensions":["ez3"]},"application/vnd.f-secure.mobile":{"source":"iana"},"application/vnd.familysearch.gedcom+zip":{"source":"iana","compressible":false},"application/vnd.fastcopy-disk-image":{"source":"iana"},"application/vnd.fdf":{"source":"apache","extensions":["fdf"]},"application/vnd.fdsn.mseed":{"source":"iana","extensions":["mseed"]},"application/vnd.fdsn.seed":{"source":"iana","extensions":["seed","dataless"]},"application/vnd.fdsn.stationxml+xml":{"source":"iana","charset":"XML-BASED","compressible":true},"application/vnd.ffsns":{"source":"iana"},"application/vnd.ficlab.flb+zip":{"source":"iana","compressible":false},"application/vnd.filmit.zfc":{"source":"iana"},"application/vnd.fints":{"source":"iana"},"application/vnd.firemonkeys.cloudcell":{"source":"iana"},"application/vnd.flographit":{"source":"iana","extensions":["gph"]},"application/vnd.fluxtime.clip":{"source":"iana","extensions":["ftc"]},"application/vnd.font-fontforge-sfd":{"source":"iana"},"application/vnd.framemaker":{"source":"iana","extensions":["fm","frame","maker","book"]},"application/vnd.freelog.comic":{"source":"iana"},"application/vnd.frogans.fnc":{"source":"apache","extensions":["fnc"]},"application/vnd.frogans.ltf":{"source":"apache","extensions":["ltf"]},"application/vnd.fsc.weblaunch":{"source":"iana","extensions":["fsc"]},"application/vnd.fujifilm.fb.docuworks":{"source":"iana"},"application/vnd.fujifilm.fb.docuworks.binder":{"source":"iana"},"application/vnd.fujifilm.fb.docuworks.container":{"source":"iana"},"application/vnd.fujifilm.fb.jfi+xml":{"source":"iana","compressible":true},"application/vnd.fujitsu.oasys":{"source":"iana","extensions":["oas"]},"application/vnd.fujitsu.oasys2":{"source":"iana","extensions":["oa2"]},"application/vnd.fujitsu.oasys3":{"source":"iana","extensions":["oa3"]},"application/vnd.fujitsu.oasysgp":{"source":"iana","extensions":["fg5"]},"application/vnd.fujitsu.oasysprs":{"source":"iana","extensions":["bh2"]},"application/vnd.fujixerox.art-ex":{"source":"iana"},"application/vnd.fujixerox.art4":{"source":"iana"},"application/vnd.fujixerox.ddd":{"source":"iana","extensions":["ddd"]},"application/vnd.fujixerox.docuworks":{"source":"iana","extensions":["xdw"]},"application/vnd.fujixerox.docuworks.binder":{"source":"iana","extensions":["xbd"]},"application/vnd.fujixerox.docuworks.container":{"source":"iana"},"application/vnd.fujixerox.hbpl":{"source":"iana"},"application/vnd.fut-misnet":{"source":"iana"},"application/vnd.futoin+cbor":{"source":"iana"},"application/vnd.futoin+json":{"source":"iana","compressible":true},"application/vnd.fuzzysheet":{"source":"iana","extensions":["fzs"]},"application/vnd.ga4gh.passport+jwt":{"source":"iana"},"application/vnd.genomatix.tuxedo":{"source":"iana","extensions":["txd"]},"application/vnd.genozip":{"source":"iana"},"application/vnd.gentics.grd+json":{"source":"iana","compressible":true},"application/vnd.gentoo.catmetadata+xml":{"source":"iana","compressible":true},"application/vnd.gentoo.ebuild":{"source":"iana"},"application/vnd.gentoo.eclass":{"source":"iana"},"application/vnd.gentoo.gpkg":{"source":"iana"},"application/vnd.gentoo.manifest":{"source":"iana"},"application/vnd.gentoo.pkgmetadata+xml":{"source":"iana","compressible":true},"application/vnd.gentoo.xpak":{"source":"iana"},"application/vnd.geo+json":{"source":"apache","compressible":true},"application/vnd.geocube+xml":{"source":"apache","compressible":true},"application/vnd.geogebra.file":{"source":"iana","extensions":["ggb"]},"application/vnd.geogebra.pinboard":{"source":"iana"},"application/vnd.geogebra.slides":{"source":"iana","extensions":["ggs"]},"application/vnd.geogebra.tool":{"source":"iana","extensions":["ggt"]},"application/vnd.geometry-explorer":{"source":"iana","extensions":["gex","gre"]},"application/vnd.geonext":{"source":"iana","extensions":["gxt"]},"application/vnd.geoplan":{"source":"iana","extensions":["g2w"]},"application/vnd.geospace":{"source":"iana","extensions":["g3w"]},"application/vnd.gerber":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt-response":{"source":"iana"},"application/vnd.gmx":{"source":"iana","extensions":["gmx"]},"application/vnd.gnu.taler.exchange+json":{"source":"iana","compressible":true},"application/vnd.gnu.taler.merchant+json":{"source":"iana","compressible":true},"application/vnd.google-apps.audio":{},"application/vnd.google-apps.document":{"compressible":false,"extensions":["gdoc"]},"application/vnd.google-apps.drawing":{"compressible":false,"extensions":["gdraw"]},"application/vnd.google-apps.drive-sdk":{"compressible":false},"application/vnd.google-apps.file":{},"application/vnd.google-apps.folder":{"compressible":false},"application/vnd.google-apps.form":{"compressible":false,"extensions":["gform"]},"application/vnd.google-apps.fusiontable":{},"application/vnd.google-apps.jam":{"compressible":false,"extensions":["gjam"]},"application/vnd.google-apps.mail-layout":{},"application/vnd.google-apps.map":{"compressible":false,"extensions":["gmap"]},"application/vnd.google-apps.photo":{},"application/vnd.google-apps.presentation":{"compressible":false,"extensions":["gslides"]},"application/vnd.google-apps.script":{"compressible":false,"extensions":["gscript"]},"application/vnd.google-apps.shortcut":{},"application/vnd.google-apps.site":{"compressible":false,"extensions":["gsite"]},"application/vnd.google-apps.spreadsheet":{"compressible":false,"extensions":["gsheet"]},"application/vnd.google-apps.unknown":{},"application/vnd.google-apps.video":{},"application/vnd.google-earth.kml+xml":{"source":"iana","compressible":true,"extensions":["kml"]},"application/vnd.google-earth.kmz":{"source":"iana","compressible":false,"extensions":["kmz"]},"application/vnd.gov.sk.e-form+xml":{"source":"apache","compressible":true},"application/vnd.gov.sk.e-form+zip":{"source":"iana","compressible":false},"application/vnd.gov.sk.xmldatacontainer+xml":{"source":"iana","compressible":true,"extensions":["xdcf"]},"application/vnd.gpxsee.map+xml":{"source":"iana","compressible":true},"application/vnd.grafeq":{"source":"iana","extensions":["gqf","gqs"]},"application/vnd.gridmp":{"source":"iana"},"application/vnd.groove-account":{"source":"iana","extensions":["gac"]},"application/vnd.groove-help":{"source":"iana","extensions":["ghf"]},"application/vnd.groove-identity-message":{"source":"iana","extensions":["gim"]},"application/vnd.groove-injector":{"source":"iana","extensions":["grv"]},"application/vnd.groove-tool-message":{"source":"iana","extensions":["gtm"]},"application/vnd.groove-tool-template":{"source":"iana","extensions":["tpl"]},"application/vnd.groove-vcard":{"source":"iana","extensions":["vcg"]},"application/vnd.hal+json":{"source":"iana","compressible":true},"application/vnd.hal+xml":{"source":"iana","compressible":true,"extensions":["hal"]},"application/vnd.handheld-entertainment+xml":{"source":"iana","compressible":true,"extensions":["zmm"]},"application/vnd.hbci":{"source":"iana","extensions":["hbci"]},"application/vnd.hc+json":{"source":"iana","compressible":true},"application/vnd.hcl-bireports":{"source":"iana"},"application/vnd.hdt":{"source":"iana"},"application/vnd.heroku+json":{"source":"iana","compressible":true},"application/vnd.hhe.lesson-player":{"source":"iana","extensions":["les"]},"application/vnd.hp-hpgl":{"source":"iana","extensions":["hpgl"]},"application/vnd.hp-hpid":{"source":"iana","extensions":["hpid"]},"application/vnd.hp-hps":{"source":"iana","extensions":["hps"]},"application/vnd.hp-jlyt":{"source":"iana","extensions":["jlt"]},"application/vnd.hp-pcl":{"source":"iana","extensions":["pcl"]},"application/vnd.hp-pclxl":{"source":"iana","extensions":["pclxl"]},"application/vnd.hsl":{"source":"iana"},"application/vnd.httphone":{"source":"iana"},"application/vnd.hydrostatix.sof-data":{"source":"iana","extensions":["sfd-hdstx"]},"application/vnd.hyper+json":{"source":"iana","compressible":true},"application/vnd.hyper-item+json":{"source":"iana","compressible":true},"application/vnd.hyperdrive+json":{"source":"iana","compressible":true},"application/vnd.hzn-3d-crossword":{"source":"iana"},"application/vnd.ibm.afplinedata":{"source":"apache"},"application/vnd.ibm.electronic-media":{"source":"iana"},"application/vnd.ibm.minipay":{"source":"iana","extensions":["mpy"]},"application/vnd.ibm.modcap":{"source":"apache","extensions":["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{"source":"iana","extensions":["irm"]},"application/vnd.ibm.secure-container":{"source":"iana","extensions":["sc"]},"application/vnd.iccprofile":{"source":"iana","extensions":["icc","icm"]},"application/vnd.ieee.1905":{"source":"iana"},"application/vnd.igloader":{"source":"iana","extensions":["igl"]},"application/vnd.imagemeter.folder+zip":{"source":"iana","compressible":false},"application/vnd.imagemeter.image+zip":{"source":"iana","compressible":false},"application/vnd.immervision-ivp":{"source":"iana","extensions":["ivp"]},"application/vnd.immervision-ivu":{"source":"iana","extensions":["ivu"]},"application/vnd.ims.imsccv1p1":{"source":"iana"},"application/vnd.ims.imsccv1p2":{"source":"iana"},"application/vnd.ims.imsccv1p3":{"source":"iana"},"application/vnd.ims.lis.v2.result+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy.id+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings.simple+json":{"source":"iana","compressible":true},"application/vnd.informedcontrol.rms+xml":{"source":"iana","compressible":true},"application/vnd.informix-visionary":{"source":"apache"},"application/vnd.infotech.project":{"source":"iana"},"application/vnd.infotech.project+xml":{"source":"iana","compressible":true},"application/vnd.innopath.wamp.notification":{"source":"iana"},"application/vnd.insors.igm":{"source":"iana","extensions":["igm"]},"application/vnd.intercon.formnet":{"source":"iana","extensions":["xpw","xpx"]},"application/vnd.intergeo":{"source":"iana","extensions":["i2g"]},"application/vnd.intertrust.digibox":{"source":"iana"},"application/vnd.intertrust.nncp":{"source":"iana"},"application/vnd.intu.qbo":{"source":"iana","extensions":["qbo"]},"application/vnd.intu.qfx":{"source":"iana","extensions":["qfx"]},"application/vnd.ipfs.ipns-record":{"source":"iana"},"application/vnd.ipld.car":{"source":"iana"},"application/vnd.ipld.dag-cbor":{"source":"iana"},"application/vnd.ipld.dag-json":{"source":"iana"},"application/vnd.ipld.raw":{"source":"iana"},"application/vnd.iptc.g2.catalogitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.conceptitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.knowledgeitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsmessage+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.packageitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.planningitem+xml":{"source":"iana","compressible":true},"application/vnd.ipunplugged.rcprofile":{"source":"iana","extensions":["rcprofile"]},"application/vnd.irepository.package+xml":{"source":"iana","compressible":true,"extensions":["irp"]},"application/vnd.is-xpr":{"source":"iana","extensions":["xpr"]},"application/vnd.isac.fcs":{"source":"iana","extensions":["fcs"]},"application/vnd.iso11783-10+zip":{"source":"iana","compressible":false},"application/vnd.jam":{"source":"iana","extensions":["jam"]},"application/vnd.japannet-directory-service":{"source":"iana"},"application/vnd.japannet-jpnstore-wakeup":{"source":"iana"},"application/vnd.japannet-payment-wakeup":{"source":"iana"},"application/vnd.japannet-registration":{"source":"iana"},"application/vnd.japannet-registration-wakeup":{"source":"iana"},"application/vnd.japannet-setstore-wakeup":{"source":"iana"},"application/vnd.japannet-verification":{"source":"iana"},"application/vnd.japannet-verification-wakeup":{"source":"iana"},"application/vnd.jcp.javame.midlet-rms":{"source":"iana","extensions":["rms"]},"application/vnd.jisp":{"source":"iana","extensions":["jisp"]},"application/vnd.joost.joda-archive":{"source":"iana","extensions":["joda"]},"application/vnd.jsk.isdn-ngn":{"source":"iana"},"application/vnd.kahootz":{"source":"iana","extensions":["ktz","ktr"]},"application/vnd.kde.karbon":{"source":"iana","extensions":["karbon"]},"application/vnd.kde.kchart":{"source":"iana","extensions":["chrt"]},"application/vnd.kde.kformula":{"source":"iana","extensions":["kfo"]},"application/vnd.kde.kivio":{"source":"iana","extensions":["flw"]},"application/vnd.kde.kontour":{"source":"iana","extensions":["kon"]},"application/vnd.kde.kpresenter":{"source":"iana","extensions":["kpr","kpt"]},"application/vnd.kde.kspread":{"source":"iana","extensions":["ksp"]},"application/vnd.kde.kword":{"source":"iana","extensions":["kwd","kwt"]},"application/vnd.kdl":{"source":"iana"},"application/vnd.kenameaapp":{"source":"iana","extensions":["htke"]},"application/vnd.keyman.kmp+zip":{"source":"iana","compressible":false},"application/vnd.keyman.kmx":{"source":"iana"},"application/vnd.kidspiration":{"source":"iana","extensions":["kia"]},"application/vnd.kinar":{"source":"iana","extensions":["kne","knp"]},"application/vnd.koan":{"source":"iana","extensions":["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{"source":"iana","extensions":["sse"]},"application/vnd.las":{"source":"iana"},"application/vnd.las.las+json":{"source":"iana","compressible":true},"application/vnd.las.las+xml":{"source":"iana","compressible":true,"extensions":["lasxml"]},"application/vnd.laszip":{"source":"iana"},"application/vnd.ldev.productlicensing":{"source":"iana"},"application/vnd.leap+json":{"source":"iana","compressible":true},"application/vnd.liberty-request+xml":{"source":"iana","compressible":true},"application/vnd.llamagraphics.life-balance.desktop":{"source":"iana","extensions":["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{"source":"iana","compressible":true,"extensions":["lbe"]},"application/vnd.logipipe.circuit+zip":{"source":"iana","compressible":false},"application/vnd.loom":{"source":"iana"},"application/vnd.lotus-1-2-3":{"source":"iana","extensions":["123"]},"application/vnd.lotus-approach":{"source":"iana","extensions":["apr"]},"application/vnd.lotus-freelance":{"source":"iana","extensions":["pre"]},"application/vnd.lotus-notes":{"source":"iana","extensions":["nsf"]},"application/vnd.lotus-organizer":{"source":"iana","extensions":["org"]},"application/vnd.lotus-screencam":{"source":"iana","extensions":["scm"]},"application/vnd.lotus-wordpro":{"source":"iana","extensions":["lwp"]},"application/vnd.macports.portpkg":{"source":"iana","extensions":["portpkg"]},"application/vnd.mapbox-vector-tile":{"source":"iana","extensions":["mvt"]},"application/vnd.marlin.drm.actiontoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.conftoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.license+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.mdcf":{"source":"iana"},"application/vnd.mason+json":{"source":"iana","compressible":true},"application/vnd.maxar.archive.3tz+zip":{"source":"iana","compressible":false},"application/vnd.maxmind.maxmind-db":{"source":"iana"},"application/vnd.mcd":{"source":"iana","extensions":["mcd"]},"application/vnd.mdl":{"source":"iana"},"application/vnd.mdl-mbsdf":{"source":"iana"},"application/vnd.medcalcdata":{"source":"iana","extensions":["mc1"]},"application/vnd.mediastation.cdkey":{"source":"iana","extensions":["cdkey"]},"application/vnd.medicalholodeck.recordxr":{"source":"iana"},"application/vnd.meridian-slingshot":{"source":"iana"},"application/vnd.mermaid":{"source":"iana"},"application/vnd.mfer":{"source":"iana","extensions":["mwf"]},"application/vnd.mfmp":{"source":"iana","extensions":["mfm"]},"application/vnd.micro+json":{"source":"iana","compressible":true},"application/vnd.micrografx.flo":{"source":"iana","extensions":["flo"]},"application/vnd.micrografx.igx":{"source":"iana","extensions":["igx"]},"application/vnd.microsoft.portable-executable":{"source":"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{"source":"iana"},"application/vnd.miele+json":{"source":"iana","compressible":true},"application/vnd.mif":{"source":"iana","extensions":["mif"]},"application/vnd.minisoft-hp3000-save":{"source":"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{"source":"iana"},"application/vnd.mobius.daf":{"source":"iana","extensions":["daf"]},"application/vnd.mobius.dis":{"source":"iana","extensions":["dis"]},"application/vnd.mobius.mbk":{"source":"iana","extensions":["mbk"]},"application/vnd.mobius.mqy":{"source":"iana","extensions":["mqy"]},"application/vnd.mobius.msl":{"source":"iana","extensions":["msl"]},"application/vnd.mobius.plc":{"source":"iana","extensions":["plc"]},"application/vnd.mobius.txf":{"source":"iana","extensions":["txf"]},"application/vnd.modl":{"source":"iana"},"application/vnd.mophun.application":{"source":"iana","extensions":["mpn"]},"application/vnd.mophun.certificate":{"source":"iana","extensions":["mpc"]},"application/vnd.motorola.flexsuite":{"source":"iana"},"application/vnd.motorola.flexsuite.adsi":{"source":"iana"},"application/vnd.motorola.flexsuite.fis":{"source":"iana"},"application/vnd.motorola.flexsuite.gotap":{"source":"iana"},"application/vnd.motorola.flexsuite.kmr":{"source":"iana"},"application/vnd.motorola.flexsuite.ttc":{"source":"iana"},"application/vnd.motorola.flexsuite.wem":{"source":"iana"},"application/vnd.motorola.iprm":{"source":"iana"},"application/vnd.mozilla.xul+xml":{"source":"iana","compressible":true,"extensions":["xul"]},"application/vnd.ms-3mfdocument":{"source":"iana"},"application/vnd.ms-artgalry":{"source":"iana","extensions":["cil"]},"application/vnd.ms-asf":{"source":"iana"},"application/vnd.ms-cab-compressed":{"source":"iana","extensions":["cab"]},"application/vnd.ms-color.iccprofile":{"source":"apache"},"application/vnd.ms-excel":{"source":"iana","compressible":false,"extensions":["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{"source":"iana","extensions":["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{"source":"iana","extensions":["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{"source":"iana","extensions":["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{"source":"iana","extensions":["xltm"]},"application/vnd.ms-fontobject":{"source":"iana","compressible":true,"extensions":["eot"]},"application/vnd.ms-htmlhelp":{"source":"iana","extensions":["chm"]},"application/vnd.ms-ims":{"source":"iana","extensions":["ims"]},"application/vnd.ms-lrm":{"source":"iana","extensions":["lrm"]},"application/vnd.ms-office.activex+xml":{"source":"iana","compressible":true},"application/vnd.ms-officetheme":{"source":"iana","extensions":["thmx"]},"application/vnd.ms-opentype":{"source":"apache","compressible":true},"application/vnd.ms-outlook":{"compressible":false,"extensions":["msg"]},"application/vnd.ms-package.obfuscated-opentype":{"source":"apache"},"application/vnd.ms-pki.seccat":{"source":"apache","extensions":["cat"]},"application/vnd.ms-pki.stl":{"source":"apache","extensions":["stl"]},"application/vnd.ms-playready.initiator+xml":{"source":"iana","compressible":true},"application/vnd.ms-powerpoint":{"source":"iana","compressible":false,"extensions":["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{"source":"iana","extensions":["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{"source":"iana","extensions":["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{"source":"iana","extensions":["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{"source":"iana","extensions":["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{"source":"iana","extensions":["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{"source":"iana","compressible":true},"application/vnd.ms-printing.printticket+xml":{"source":"apache","compressible":true},"application/vnd.ms-printschematicket+xml":{"source":"iana","compressible":true},"application/vnd.ms-project":{"source":"iana","extensions":["mpp","mpt"]},"application/vnd.ms-tnef":{"source":"iana"},"application/vnd.ms-visio.viewer":{"extensions":["vdx"]},"application/vnd.ms-windows.devicepairing":{"source":"iana"},"application/vnd.ms-windows.nwprinting.oob":{"source":"iana"},"application/vnd.ms-windows.printerpairing":{"source":"iana"},"application/vnd.ms-windows.wsd.oob":{"source":"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.lic-resp":{"source":"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.meter-resp":{"source":"iana"},"application/vnd.ms-word.document.macroenabled.12":{"source":"iana","extensions":["docm"]},"application/vnd.ms-word.template.macroenabled.12":{"source":"iana","extensions":["dotm"]},"application/vnd.ms-works":{"source":"iana","extensions":["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{"source":"iana","extensions":["wpl"]},"application/vnd.ms-xpsdocument":{"source":"iana","compressible":false,"extensions":["xps"]},"application/vnd.msa-disk-image":{"source":"iana"},"application/vnd.mseq":{"source":"iana","extensions":["mseq"]},"application/vnd.msgpack":{"source":"iana"},"application/vnd.msign":{"source":"iana"},"application/vnd.multiad.creator":{"source":"iana"},"application/vnd.multiad.creator.cif":{"source":"iana"},"application/vnd.music-niff":{"source":"iana"},"application/vnd.musician":{"source":"iana","extensions":["mus"]},"application/vnd.muvee.style":{"source":"iana","extensions":["msty"]},"application/vnd.mynfc":{"source":"iana","extensions":["taglet"]},"application/vnd.nacamar.ybrid+json":{"source":"iana","compressible":true},"application/vnd.nato.bindingdataobject+cbor":{"source":"iana"},"application/vnd.nato.bindingdataobject+json":{"source":"iana","compressible":true},"application/vnd.nato.bindingdataobject+xml":{"source":"iana","compressible":true,"extensions":["bdo"]},"application/vnd.nato.openxmlformats-package.iepd+zip":{"source":"iana","compressible":false},"application/vnd.ncd.control":{"source":"iana"},"application/vnd.ncd.reference":{"source":"iana"},"application/vnd.nearst.inv+json":{"source":"iana","compressible":true},"application/vnd.nebumind.line":{"source":"iana"},"application/vnd.nervana":{"source":"iana"},"application/vnd.netfpx":{"source":"iana"},"application/vnd.neurolanguage.nlu":{"source":"iana","extensions":["nlu"]},"application/vnd.nimn":{"source":"iana"},"application/vnd.nintendo.nitro.rom":{"source":"iana"},"application/vnd.nintendo.snes.rom":{"source":"iana"},"application/vnd.nitf":{"source":"iana","extensions":["ntf","nitf"]},"application/vnd.noblenet-directory":{"source":"iana","extensions":["nnd"]},"application/vnd.noblenet-sealer":{"source":"iana","extensions":["nns"]},"application/vnd.noblenet-web":{"source":"iana","extensions":["nnw"]},"application/vnd.nokia.catalogs":{"source":"iana"},"application/vnd.nokia.conml+wbxml":{"source":"iana"},"application/vnd.nokia.conml+xml":{"source":"iana","compressible":true},"application/vnd.nokia.iptv.config+xml":{"source":"iana","compressible":true},"application/vnd.nokia.isds-radio-presets":{"source":"iana"},"application/vnd.nokia.landmark+wbxml":{"source":"iana"},"application/vnd.nokia.landmark+xml":{"source":"iana","compressible":true},"application/vnd.nokia.landmarkcollection+xml":{"source":"iana","compressible":true},"application/vnd.nokia.n-gage.ac+xml":{"source":"iana","compressible":true,"extensions":["ac"]},"application/vnd.nokia.n-gage.data":{"source":"iana","extensions":["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{"source":"apache","extensions":["n-gage"]},"application/vnd.nokia.ncd":{"source":"iana"},"application/vnd.nokia.pcd+wbxml":{"source":"iana"},"application/vnd.nokia.pcd+xml":{"source":"iana","compressible":true},"application/vnd.nokia.radio-preset":{"source":"iana","extensions":["rpst"]},"application/vnd.nokia.radio-presets":{"source":"iana","extensions":["rpss"]},"application/vnd.novadigm.edm":{"source":"iana","extensions":["edm"]},"application/vnd.novadigm.edx":{"source":"iana","extensions":["edx"]},"application/vnd.novadigm.ext":{"source":"iana","extensions":["ext"]},"application/vnd.ntt-local.content-share":{"source":"iana"},"application/vnd.ntt-local.file-transfer":{"source":"iana"},"application/vnd.ntt-local.ogw_remote-access":{"source":"iana"},"application/vnd.ntt-local.sip-ta_remote":{"source":"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{"source":"iana"},"application/vnd.oai.workflows":{"source":"iana"},"application/vnd.oai.workflows+json":{"source":"iana","compressible":true},"application/vnd.oai.workflows+yaml":{"source":"iana"},"application/vnd.oasis.opendocument.base":{"source":"iana"},"application/vnd.oasis.opendocument.chart":{"source":"iana","extensions":["odc"]},"application/vnd.oasis.opendocument.chart-template":{"source":"iana","extensions":["otc"]},"application/vnd.oasis.opendocument.database":{"source":"apache","extensions":["odb"]},"application/vnd.oasis.opendocument.formula":{"source":"iana","extensions":["odf"]},"application/vnd.oasis.opendocument.formula-template":{"source":"iana","extensions":["odft"]},"application/vnd.oasis.opendocument.graphics":{"source":"iana","compressible":false,"extensions":["odg"]},"application/vnd.oasis.opendocument.graphics-template":{"source":"iana","extensions":["otg"]},"application/vnd.oasis.opendocument.image":{"source":"iana","extensions":["odi"]},"application/vnd.oasis.opendocument.image-template":{"source":"iana","extensions":["oti"]},"application/vnd.oasis.opendocument.presentation":{"source":"iana","compressible":false,"extensions":["odp"]},"application/vnd.oasis.opendocument.presentation-template":{"source":"iana","extensions":["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{"source":"iana","compressible":false,"extensions":["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{"source":"iana","extensions":["ots"]},"application/vnd.oasis.opendocument.text":{"source":"iana","compressible":false,"extensions":["odt"]},"application/vnd.oasis.opendocument.text-master":{"source":"iana","extensions":["odm"]},"application/vnd.oasis.opendocument.text-master-template":{"source":"iana"},"application/vnd.oasis.opendocument.text-template":{"source":"iana","extensions":["ott"]},"application/vnd.oasis.opendocument.text-web":{"source":"iana","extensions":["oth"]},"application/vnd.obn":{"source":"iana"},"application/vnd.ocf+cbor":{"source":"iana"},"application/vnd.oci.image.manifest.v1+json":{"source":"iana","compressible":true},"application/vnd.oftn.l10n+json":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessdownload+xml":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessstreaming+xml":{"source":"iana","compressible":true},"application/vnd.oipf.cspg-hexbinary":{"source":"iana"},"application/vnd.oipf.dae.svg+xml":{"source":"iana","compressible":true},"application/vnd.oipf.dae.xhtml+xml":{"source":"iana","compressible":true},"application/vnd.oipf.mippvcontrolmessage+xml":{"source":"iana","compressible":true},"application/vnd.oipf.pae.gem":{"source":"iana"},"application/vnd.oipf.spdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.oipf.spdlist+xml":{"source":"iana","compressible":true},"application/vnd.oipf.ueprofile+xml":{"source":"iana","compressible":true},"application/vnd.oipf.userprofile+xml":{"source":"iana","compressible":true},"application/vnd.olpc-sugar":{"source":"iana","extensions":["xo"]},"application/vnd.oma-scws-config":{"source":"iana"},"application/vnd.oma-scws-http-request":{"source":"iana"},"application/vnd.oma-scws-http-response":{"source":"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.drm-trigger+xml":{"source":"apache","compressible":true},"application/vnd.oma.bcast.imd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.ltkm":{"source":"iana"},"application/vnd.oma.bcast.notification+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.provisioningtrigger":{"source":"iana"},"application/vnd.oma.bcast.sgboot":{"source":"iana"},"application/vnd.oma.bcast.sgdd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sgdu":{"source":"iana"},"application/vnd.oma.bcast.simple-symbol-container":{"source":"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{"source":"apache","compressible":true},"application/vnd.oma.bcast.sprov+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.stkm":{"source":"iana"},"application/vnd.oma.cab-address-book+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-feature-handler+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-pcc+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-subs-invite+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-user-prefs+xml":{"source":"iana","compressible":true},"application/vnd.oma.dcd":{"source":"iana"},"application/vnd.oma.dcdc":{"source":"iana"},"application/vnd.oma.dd2+xml":{"source":"iana","compressible":true,"extensions":["dd2"]},"application/vnd.oma.drm.risd+xml":{"source":"iana","compressible":true},"application/vnd.oma.group-usage-list+xml":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+cbor":{"source":"iana"},"application/vnd.oma.lwm2m+json":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+tlv":{"source":"iana"},"application/vnd.oma.pal+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.detailed-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.final-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.groups+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.invocation-descriptor+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.optimized-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.push":{"source":"iana"},"application/vnd.oma.scidm.messages+xml":{"source":"iana","compressible":true},"application/vnd.oma.xcap-directory+xml":{"source":"iana","compressible":true},"application/vnd.omads-email+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-file+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-folder+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omaloc-supl-init":{"source":"iana"},"application/vnd.onepager":{"source":"iana"},"application/vnd.onepagertamp":{"source":"iana"},"application/vnd.onepagertamx":{"source":"iana"},"application/vnd.onepagertat":{"source":"iana"},"application/vnd.onepagertatp":{"source":"iana"},"application/vnd.onepagertatx":{"source":"iana"},"application/vnd.onvif.metadata":{"source":"iana"},"application/vnd.openblox.game+xml":{"source":"iana","compressible":true,"extensions":["obgx"]},"application/vnd.openblox.game-binary":{"source":"iana"},"application/vnd.openeye.oeb":{"source":"iana"},"application/vnd.openofficeorg.extension":{"source":"apache","extensions":["oxt"]},"application/vnd.openstreetmap.data+xml":{"source":"iana","compressible":true,"extensions":["osm"]},"application/vnd.opentimestamps.ots":{"source":"iana"},"application/vnd.openvpi.dspx+json":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawing+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{"source":"iana","compressible":false,"extensions":["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slide":{"source":"iana","extensions":["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{"source":"iana","extensions":["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.template":{"source":"iana","extensions":["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"source":"iana","compressible":false,"extensions":["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{"source":"iana","extensions":["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.theme+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.vmldrawing":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{"source":"iana","compressible":false,"extensions":["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{"source":"iana","extensions":["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.core-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.relationships+xml":{"source":"iana","compressible":true},"application/vnd.oracle.resource+json":{"source":"iana","compressible":true},"application/vnd.orange.indata":{"source":"iana"},"application/vnd.osa.netdeploy":{"source":"iana"},"application/vnd.osgeo.mapguide.package":{"source":"iana","extensions":["mgp"]},"application/vnd.osgi.bundle":{"source":"iana"},"application/vnd.osgi.dp":{"source":"iana","extensions":["dp"]},"application/vnd.osgi.subsystem":{"source":"iana","extensions":["esa"]},"application/vnd.otps.ct-kip+xml":{"source":"iana","compressible":true},"application/vnd.oxli.countgraph":{"source":"iana"},"application/vnd.pagerduty+json":{"source":"iana","compressible":true},"application/vnd.palm":{"source":"iana","extensions":["pdb","pqa","oprc"]},"application/vnd.panoply":{"source":"iana"},"application/vnd.paos.xml":{"source":"iana"},"application/vnd.patentdive":{"source":"iana"},"application/vnd.patientecommsdoc":{"source":"iana"},"application/vnd.pawaafile":{"source":"iana","extensions":["paw"]},"application/vnd.pcos":{"source":"iana"},"application/vnd.pg.format":{"source":"iana","extensions":["str"]},"application/vnd.pg.osasli":{"source":"iana","extensions":["ei6"]},"application/vnd.piaccess.application-licence":{"source":"iana"},"application/vnd.picsel":{"source":"iana","extensions":["efif"]},"application/vnd.pmi.widget":{"source":"iana","extensions":["wg"]},"application/vnd.poc.group-advertisement+xml":{"source":"iana","compressible":true},"application/vnd.pocketlearn":{"source":"iana","extensions":["plf"]},"application/vnd.powerbuilder6":{"source":"iana","extensions":["pbd"]},"application/vnd.powerbuilder6-s":{"source":"iana"},"application/vnd.powerbuilder7":{"source":"iana"},"application/vnd.powerbuilder7-s":{"source":"iana"},"application/vnd.powerbuilder75":{"source":"iana"},"application/vnd.powerbuilder75-s":{"source":"iana"},"application/vnd.preminet":{"source":"iana"},"application/vnd.previewsystems.box":{"source":"iana","extensions":["box"]},"application/vnd.procrate.brushset":{"extensions":["brushset"]},"application/vnd.procreate.brush":{"extensions":["brush"]},"application/vnd.procreate.dream":{"extensions":["drm"]},"application/vnd.proteus.magazine":{"source":"iana","extensions":["mgz"]},"application/vnd.psfs":{"source":"iana"},"application/vnd.pt.mundusmundi":{"source":"iana"},"application/vnd.publishare-delta-tree":{"source":"iana","extensions":["qps"]},"application/vnd.pvi.ptid1":{"source":"iana","extensions":["ptid"]},"application/vnd.pwg-multiplexed":{"source":"iana"},"application/vnd.pwg-xhtml-print+xml":{"source":"iana","compressible":true,"extensions":["xhtm"]},"application/vnd.qualcomm.brew-app-res":{"source":"iana"},"application/vnd.quarantainenet":{"source":"iana"},"application/vnd.quark.quarkxpress":{"source":"iana","extensions":["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{"source":"iana"},"application/vnd.radisys.moml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conn+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-stream+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-base+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-detect+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-group+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-speech+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-transform+xml":{"source":"iana","compressible":true},"application/vnd.rainstor.data":{"source":"iana"},"application/vnd.rapid":{"source":"iana"},"application/vnd.rar":{"source":"iana","extensions":["rar"]},"application/vnd.realvnc.bed":{"source":"iana","extensions":["bed"]},"application/vnd.recordare.musicxml":{"source":"iana","extensions":["mxl"]},"application/vnd.recordare.musicxml+xml":{"source":"iana","compressible":true,"extensions":["musicxml"]},"application/vnd.relpipe":{"source":"iana"},"application/vnd.renlearn.rlprint":{"source":"iana"},"application/vnd.resilient.logic":{"source":"iana"},"application/vnd.restful+json":{"source":"iana","compressible":true},"application/vnd.rig.cryptonote":{"source":"iana","extensions":["cryptonote"]},"application/vnd.rim.cod":{"source":"apache","extensions":["cod"]},"application/vnd.rn-realmedia":{"source":"apache","extensions":["rm"]},"application/vnd.rn-realmedia-vbr":{"source":"apache","extensions":["rmvb"]},"application/vnd.route66.link66+xml":{"source":"iana","compressible":true,"extensions":["link66"]},"application/vnd.rs-274x":{"source":"iana"},"application/vnd.ruckus.download":{"source":"iana"},"application/vnd.s3sms":{"source":"iana"},"application/vnd.sailingtracker.track":{"source":"iana","extensions":["st"]},"application/vnd.sar":{"source":"iana"},"application/vnd.sbm.cid":{"source":"iana"},"application/vnd.sbm.mid2":{"source":"iana"},"application/vnd.scribus":{"source":"iana"},"application/vnd.sealed.3df":{"source":"iana"},"application/vnd.sealed.csf":{"source":"iana"},"application/vnd.sealed.doc":{"source":"iana"},"application/vnd.sealed.eml":{"source":"iana"},"application/vnd.sealed.mht":{"source":"iana"},"application/vnd.sealed.net":{"source":"iana"},"application/vnd.sealed.ppt":{"source":"iana"},"application/vnd.sealed.tiff":{"source":"iana"},"application/vnd.sealed.xls":{"source":"iana"},"application/vnd.sealedmedia.softseal.html":{"source":"iana"},"application/vnd.sealedmedia.softseal.pdf":{"source":"iana"},"application/vnd.seemail":{"source":"iana","extensions":["see"]},"application/vnd.seis+json":{"source":"iana","compressible":true},"application/vnd.sema":{"source":"iana","extensions":["sema"]},"application/vnd.semd":{"source":"iana","extensions":["semd"]},"application/vnd.semf":{"source":"iana","extensions":["semf"]},"application/vnd.shade-save-file":{"source":"iana"},"application/vnd.shana.informed.formdata":{"source":"iana","extensions":["ifm"]},"application/vnd.shana.informed.formtemplate":{"source":"iana","extensions":["itp"]},"application/vnd.shana.informed.interchange":{"source":"iana","extensions":["iif"]},"application/vnd.shana.informed.package":{"source":"iana","extensions":["ipk"]},"application/vnd.shootproof+json":{"source":"iana","compressible":true},"application/vnd.shopkick+json":{"source":"iana","compressible":true},"application/vnd.shp":{"source":"iana"},"application/vnd.shx":{"source":"iana"},"application/vnd.sigrok.session":{"source":"iana"},"application/vnd.simtech-mindmapper":{"source":"iana","extensions":["twd","twds"]},"application/vnd.siren+json":{"source":"iana","compressible":true},"application/vnd.sketchometry":{"source":"iana"},"application/vnd.smaf":{"source":"iana","extensions":["mmf"]},"application/vnd.smart.notebook":{"source":"iana"},"application/vnd.smart.teacher":{"source":"iana","extensions":["teacher"]},"application/vnd.smintio.portals.archive":{"source":"iana"},"application/vnd.snesdev-page-table":{"source":"iana"},"application/vnd.software602.filler.form+xml":{"source":"iana","compressible":true,"extensions":["fo"]},"application/vnd.software602.filler.form-xml-zip":{"source":"iana"},"application/vnd.solent.sdkm+xml":{"source":"iana","compressible":true,"extensions":["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{"source":"iana","extensions":["dxp"]},"application/vnd.spotfire.sfs":{"source":"iana","extensions":["sfs"]},"application/vnd.sqlite3":{"source":"iana"},"application/vnd.sss-cod":{"source":"iana"},"application/vnd.sss-dtf":{"source":"iana"},"application/vnd.sss-ntf":{"source":"iana"},"application/vnd.stardivision.calc":{"source":"apache","extensions":["sdc"]},"application/vnd.stardivision.draw":{"source":"apache","extensions":["sda"]},"application/vnd.stardivision.impress":{"source":"apache","extensions":["sdd"]},"application/vnd.stardivision.math":{"source":"apache","extensions":["smf"]},"application/vnd.stardivision.writer":{"source":"apache","extensions":["sdw","vor"]},"application/vnd.stardivision.writer-global":{"source":"apache","extensions":["sgl"]},"application/vnd.stepmania.package":{"source":"iana","extensions":["smzip"]},"application/vnd.stepmania.stepchart":{"source":"iana","extensions":["sm"]},"application/vnd.street-stream":{"source":"iana"},"application/vnd.sun.wadl+xml":{"source":"iana","compressible":true,"extensions":["wadl"]},"application/vnd.sun.xml.calc":{"source":"apache","extensions":["sxc"]},"application/vnd.sun.xml.calc.template":{"source":"apache","extensions":["stc"]},"application/vnd.sun.xml.draw":{"source":"apache","extensions":["sxd"]},"application/vnd.sun.xml.draw.template":{"source":"apache","extensions":["std"]},"application/vnd.sun.xml.impress":{"source":"apache","extensions":["sxi"]},"application/vnd.sun.xml.impress.template":{"source":"apache","extensions":["sti"]},"application/vnd.sun.xml.math":{"source":"apache","extensions":["sxm"]},"application/vnd.sun.xml.writer":{"source":"apache","extensions":["sxw"]},"application/vnd.sun.xml.writer.global":{"source":"apache","extensions":["sxg"]},"application/vnd.sun.xml.writer.template":{"source":"apache","extensions":["stw"]},"application/vnd.sus-calendar":{"source":"iana","extensions":["sus","susp"]},"application/vnd.svd":{"source":"iana","extensions":["svd"]},"application/vnd.swiftview-ics":{"source":"iana"},"application/vnd.sybyl.mol2":{"source":"iana"},"application/vnd.sycle+xml":{"source":"iana","compressible":true},"application/vnd.syft+json":{"source":"iana","compressible":true},"application/vnd.symbian.install":{"source":"apache","extensions":["sis","sisx"]},"application/vnd.syncml+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xsm"]},"application/vnd.syncml.dm+wbxml":{"source":"iana","charset":"UTF-8","extensions":["bdm"]},"application/vnd.syncml.dm+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xdm"]},"application/vnd.syncml.dm.notification":{"source":"iana"},"application/vnd.syncml.dmddf+wbxml":{"source":"iana"},"application/vnd.syncml.dmddf+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{"source":"iana"},"application/vnd.syncml.dmtnds+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.syncml.ds.notification":{"source":"iana"},"application/vnd.tableschema+json":{"source":"iana","compressible":true},"application/vnd.tao.intent-module-archive":{"source":"iana","extensions":["tao"]},"application/vnd.tcpdump.pcap":{"source":"iana","extensions":["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{"source":"iana","compressible":true},"application/vnd.tmd.mediaflex.api+xml":{"source":"iana","compressible":true},"application/vnd.tml":{"source":"iana"},"application/vnd.tmobile-livetv":{"source":"iana","extensions":["tmo"]},"application/vnd.tri.onesource":{"source":"iana"},"application/vnd.trid.tpt":{"source":"iana","extensions":["tpt"]},"application/vnd.triscape.mxs":{"source":"iana","extensions":["mxs"]},"application/vnd.trueapp":{"source":"iana","extensions":["tra"]},"application/vnd.truedoc":{"source":"iana"},"application/vnd.ubisoft.webplayer":{"source":"iana"},"application/vnd.ufdl":{"source":"iana","extensions":["ufd","ufdl"]},"application/vnd.uic.osdm+json":{"source":"iana","compressible":true},"application/vnd.uiq.theme":{"source":"iana","extensions":["utz"]},"application/vnd.umajin":{"source":"iana","extensions":["umj"]},"application/vnd.unity":{"source":"iana","extensions":["unityweb"]},"application/vnd.uoml+xml":{"source":"iana","compressible":true,"extensions":["uoml","uo"]},"application/vnd.uplanet.alert":{"source":"iana"},"application/vnd.uplanet.alert-wbxml":{"source":"iana"},"application/vnd.uplanet.bearer-choice":{"source":"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{"source":"iana"},"application/vnd.uplanet.cacheop":{"source":"iana"},"application/vnd.uplanet.cacheop-wbxml":{"source":"iana"},"application/vnd.uplanet.channel":{"source":"iana"},"application/vnd.uplanet.channel-wbxml":{"source":"iana"},"application/vnd.uplanet.list":{"source":"iana"},"application/vnd.uplanet.list-wbxml":{"source":"iana"},"application/vnd.uplanet.listcmd":{"source":"iana"},"application/vnd.uplanet.listcmd-wbxml":{"source":"iana"},"application/vnd.uplanet.signal":{"source":"iana"},"application/vnd.uri-map":{"source":"iana"},"application/vnd.valve.source.material":{"source":"iana"},"application/vnd.vcx":{"source":"iana","extensions":["vcx"]},"application/vnd.vd-study":{"source":"iana"},"application/vnd.vectorworks":{"source":"iana"},"application/vnd.vel+json":{"source":"iana","compressible":true},"application/vnd.veraison.tsm-report+cbor":{"source":"iana"},"application/vnd.veraison.tsm-report+json":{"source":"iana","compressible":true},"application/vnd.verimatrix.vcas":{"source":"iana"},"application/vnd.veritone.aion+json":{"source":"iana","compressible":true},"application/vnd.veryant.thin":{"source":"iana"},"application/vnd.ves.encrypted":{"source":"iana"},"application/vnd.vidsoft.vidconference":{"source":"iana"},"application/vnd.visio":{"source":"iana","extensions":["vsd","vst","vss","vsw","vsdx","vtx"]},"application/vnd.visionary":{"source":"iana","extensions":["vis"]},"application/vnd.vividence.scriptfile":{"source":"iana"},"application/vnd.vocalshaper.vsp4":{"source":"iana"},"application/vnd.vsf":{"source":"iana","extensions":["vsf"]},"application/vnd.wap.sic":{"source":"iana"},"application/vnd.wap.slc":{"source":"iana"},"application/vnd.wap.wbxml":{"source":"iana","charset":"UTF-8","extensions":["wbxml"]},"application/vnd.wap.wmlc":{"source":"iana","extensions":["wmlc"]},"application/vnd.wap.wmlscriptc":{"source":"iana","extensions":["wmlsc"]},"application/vnd.wasmflow.wafl":{"source":"iana"},"application/vnd.webturbo":{"source":"iana","extensions":["wtb"]},"application/vnd.wfa.dpp":{"source":"iana"},"application/vnd.wfa.p2p":{"source":"iana"},"application/vnd.wfa.wsc":{"source":"iana"},"application/vnd.windows.devicepairing":{"source":"iana"},"application/vnd.wmc":{"source":"iana"},"application/vnd.wmf.bootstrap":{"source":"iana"},"application/vnd.wolfram.mathematica":{"source":"iana"},"application/vnd.wolfram.mathematica.package":{"source":"iana"},"application/vnd.wolfram.player":{"source":"iana","extensions":["nbp"]},"application/vnd.wordlift":{"source":"iana"},"application/vnd.wordperfect":{"source":"iana","extensions":["wpd"]},"application/vnd.wqd":{"source":"iana","extensions":["wqd"]},"application/vnd.wrq-hp3000-labelled":{"source":"iana"},"application/vnd.wt.stf":{"source":"iana","extensions":["stf"]},"application/vnd.wv.csp+wbxml":{"source":"iana"},"application/vnd.wv.csp+xml":{"source":"iana","compressible":true},"application/vnd.wv.ssp+xml":{"source":"iana","compressible":true},"application/vnd.xacml+json":{"source":"iana","compressible":true},"application/vnd.xara":{"source":"iana","extensions":["xar"]},"application/vnd.xarin.cpj":{"source":"iana"},"application/vnd.xecrets-encrypted":{"source":"iana"},"application/vnd.xfdl":{"source":"iana","extensions":["xfdl"]},"application/vnd.xfdl.webform":{"source":"iana"},"application/vnd.xmi+xml":{"source":"iana","compressible":true},"application/vnd.xmpie.cpkg":{"source":"iana"},"application/vnd.xmpie.dpkg":{"source":"iana"},"application/vnd.xmpie.plan":{"source":"iana"},"application/vnd.xmpie.ppkg":{"source":"iana"},"application/vnd.xmpie.xlim":{"source":"iana"},"application/vnd.yamaha.hv-dic":{"source":"iana","extensions":["hvd"]},"application/vnd.yamaha.hv-script":{"source":"iana","extensions":["hvs"]},"application/vnd.yamaha.hv-voice":{"source":"iana","extensions":["hvp"]},"application/vnd.yamaha.openscoreformat":{"source":"iana","extensions":["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{"source":"iana","compressible":true,"extensions":["osfpvg"]},"application/vnd.yamaha.remote-setup":{"source":"iana"},"application/vnd.yamaha.smaf-audio":{"source":"iana","extensions":["saf"]},"application/vnd.yamaha.smaf-phrase":{"source":"iana","extensions":["spf"]},"application/vnd.yamaha.through-ngn":{"source":"iana"},"application/vnd.yamaha.tunnel-udpencap":{"source":"iana"},"application/vnd.yaoweme":{"source":"iana"},"application/vnd.yellowriver-custom-menu":{"source":"iana","extensions":["cmp"]},"application/vnd.zul":{"source":"iana","extensions":["zir","zirz"]},"application/vnd.zzazz.deck+xml":{"source":"iana","compressible":true,"extensions":["zaz"]},"application/voicexml+xml":{"source":"iana","compressible":true,"extensions":["vxml"]},"application/voucher-cms+json":{"source":"iana","compressible":true},"application/voucher-jws+json":{"source":"iana","compressible":true},"application/vp":{"source":"iana"},"application/vp+cose":{"source":"iana"},"application/vp+jwt":{"source":"iana"},"application/vq-rtcpxr":{"source":"iana"},"application/wasm":{"source":"iana","compressible":true,"extensions":["wasm"]},"application/watcherinfo+xml":{"source":"iana","compressible":true,"extensions":["wif"]},"application/webpush-options+json":{"source":"iana","compressible":true},"application/whoispp-query":{"source":"iana"},"application/whoispp-response":{"source":"iana"},"application/widget":{"source":"iana","extensions":["wgt"]},"application/winhlp":{"source":"apache","extensions":["hlp"]},"application/wita":{"source":"iana"},"application/wordperfect5.1":{"source":"iana"},"application/wsdl+xml":{"source":"iana","compressible":true,"extensions":["wsdl"]},"application/wspolicy+xml":{"source":"iana","compressible":true,"extensions":["wspolicy"]},"application/x-7z-compressed":{"source":"apache","compressible":false,"extensions":["7z"]},"application/x-abiword":{"source":"apache","extensions":["abw"]},"application/x-ace-compressed":{"source":"apache","extensions":["ace"]},"application/x-amf":{"source":"apache"},"application/x-apple-diskimage":{"source":"apache","extensions":["dmg"]},"application/x-arj":{"compressible":false,"extensions":["arj"]},"application/x-authorware-bin":{"source":"apache","extensions":["aab","x32","u32","vox"]},"application/x-authorware-map":{"source":"apache","extensions":["aam"]},"application/x-authorware-seg":{"source":"apache","extensions":["aas"]},"application/x-bcpio":{"source":"apache","extensions":["bcpio"]},"application/x-bdoc":{"compressible":false,"extensions":["bdoc"]},"application/x-bittorrent":{"source":"apache","extensions":["torrent"]},"application/x-blender":{"extensions":["blend"]},"application/x-blorb":{"source":"apache","extensions":["blb","blorb"]},"application/x-bzip":{"source":"apache","compressible":false,"extensions":["bz"]},"application/x-bzip2":{"source":"apache","compressible":false,"extensions":["bz2","boz"]},"application/x-cbr":{"source":"apache","extensions":["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{"source":"apache","extensions":["vcd"]},"application/x-cfs-compressed":{"source":"apache","extensions":["cfs"]},"application/x-chat":{"source":"apache","extensions":["chat"]},"application/x-chess-pgn":{"source":"apache","extensions":["pgn"]},"application/x-chrome-extension":{"extensions":["crx"]},"application/x-cocoa":{"source":"nginx","extensions":["cco"]},"application/x-compress":{"source":"apache"},"application/x-compressed":{"extensions":["rar"]},"application/x-conference":{"source":"apache","extensions":["nsc"]},"application/x-cpio":{"source":"apache","extensions":["cpio"]},"application/x-csh":{"source":"apache","extensions":["csh"]},"application/x-deb":{"compressible":false},"application/x-debian-package":{"source":"apache","extensions":["deb","udeb"]},"application/x-dgc-compressed":{"source":"apache","extensions":["dgc"]},"application/x-director":{"source":"apache","extensions":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{"source":"apache","extensions":["wad"]},"application/x-dtbncx+xml":{"source":"apache","compressible":true,"extensions":["ncx"]},"application/x-dtbook+xml":{"source":"apache","compressible":true,"extensions":["dtb"]},"application/x-dtbresource+xml":{"source":"apache","compressible":true,"extensions":["res"]},"application/x-dvi":{"source":"apache","compressible":false,"extensions":["dvi"]},"application/x-envoy":{"source":"apache","extensions":["evy"]},"application/x-eva":{"source":"apache","extensions":["eva"]},"application/x-font-bdf":{"source":"apache","extensions":["bdf"]},"application/x-font-dos":{"source":"apache"},"application/x-font-framemaker":{"source":"apache"},"application/x-font-ghostscript":{"source":"apache","extensions":["gsf"]},"application/x-font-libgrx":{"source":"apache"},"application/x-font-linux-psf":{"source":"apache","extensions":["psf"]},"application/x-font-pcf":{"source":"apache","extensions":["pcf"]},"application/x-font-snf":{"source":"apache","extensions":["snf"]},"application/x-font-speedo":{"source":"apache"},"application/x-font-sunos-news":{"source":"apache"},"application/x-font-type1":{"source":"apache","extensions":["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{"source":"apache"},"application/x-freearc":{"source":"apache","extensions":["arc"]},"application/x-futuresplash":{"source":"apache","extensions":["spl"]},"application/x-gca-compressed":{"source":"apache","extensions":["gca"]},"application/x-glulx":{"source":"apache","extensions":["ulx"]},"application/x-gnumeric":{"source":"apache","extensions":["gnumeric"]},"application/x-gramps-xml":{"source":"apache","extensions":["gramps"]},"application/x-gtar":{"source":"apache","extensions":["gtar"]},"application/x-gzip":{"source":"apache"},"application/x-hdf":{"source":"apache","extensions":["hdf"]},"application/x-httpd-php":{"compressible":true,"extensions":["php"]},"application/x-install-instructions":{"source":"apache","extensions":["install"]},"application/x-ipynb+json":{"compressible":true,"extensions":["ipynb"]},"application/x-iso9660-image":{"source":"apache","extensions":["iso"]},"application/x-iwork-keynote-sffkey":{"extensions":["key"]},"application/x-iwork-numbers-sffnumbers":{"extensions":["numbers"]},"application/x-iwork-pages-sffpages":{"extensions":["pages"]},"application/x-java-archive-diff":{"source":"nginx","extensions":["jardiff"]},"application/x-java-jnlp-file":{"source":"apache","compressible":false,"extensions":["jnlp"]},"application/x-javascript":{"compressible":true},"application/x-keepass2":{"extensions":["kdbx"]},"application/x-latex":{"source":"apache","compressible":false,"extensions":["latex"]},"application/x-lua-bytecode":{"extensions":["luac"]},"application/x-lzh-compressed":{"source":"apache","extensions":["lzh","lha"]},"application/x-makeself":{"source":"nginx","extensions":["run"]},"application/x-mie":{"source":"apache","extensions":["mie"]},"application/x-mobipocket-ebook":{"source":"apache","extensions":["prc","mobi"]},"application/x-mpegurl":{"compressible":false},"application/x-ms-application":{"source":"apache","extensions":["application"]},"application/x-ms-shortcut":{"source":"apache","extensions":["lnk"]},"application/x-ms-wmd":{"source":"apache","extensions":["wmd"]},"application/x-ms-wmz":{"source":"apache","extensions":["wmz"]},"application/x-ms-xbap":{"source":"apache","extensions":["xbap"]},"application/x-msaccess":{"source":"apache","extensions":["mdb"]},"application/x-msbinder":{"source":"apache","extensions":["obd"]},"application/x-mscardfile":{"source":"apache","extensions":["crd"]},"application/x-msclip":{"source":"apache","extensions":["clp"]},"application/x-msdos-program":{"extensions":["exe"]},"application/x-msdownload":{"source":"apache","extensions":["exe","dll","com","bat","msi"]},"application/x-msmediaview":{"source":"apache","extensions":["mvb","m13","m14"]},"application/x-msmetafile":{"source":"apache","extensions":["wmf","wmz","emf","emz"]},"application/x-msmoney":{"source":"apache","extensions":["mny"]},"application/x-mspublisher":{"source":"apache","extensions":["pub"]},"application/x-msschedule":{"source":"apache","extensions":["scd"]},"application/x-msterminal":{"source":"apache","extensions":["trm"]},"application/x-mswrite":{"source":"apache","extensions":["wri"]},"application/x-netcdf":{"source":"apache","extensions":["nc","cdf"]},"application/x-ns-proxy-autoconfig":{"compressible":true,"extensions":["pac"]},"application/x-nzb":{"source":"apache","extensions":["nzb"]},"application/x-perl":{"source":"nginx","extensions":["pl","pm"]},"application/x-pilot":{"source":"nginx","extensions":["prc","pdb"]},"application/x-pkcs12":{"source":"apache","compressible":false,"extensions":["p12","pfx"]},"application/x-pkcs7-certificates":{"source":"apache","extensions":["p7b","spc"]},"application/x-pkcs7-certreqresp":{"source":"apache","extensions":["p7r"]},"application/x-pki-message":{"source":"iana"},"application/x-rar-compressed":{"source":"apache","compressible":false,"extensions":["rar"]},"application/x-redhat-package-manager":{"source":"nginx","extensions":["rpm"]},"application/x-research-info-systems":{"source":"apache","extensions":["ris"]},"application/x-sea":{"source":"nginx","extensions":["sea"]},"application/x-sh":{"source":"apache","compressible":true,"extensions":["sh"]},"application/x-shar":{"source":"apache","extensions":["shar"]},"application/x-shockwave-flash":{"source":"apache","compressible":false,"extensions":["swf"]},"application/x-silverlight-app":{"source":"apache","extensions":["xap"]},"application/x-sql":{"source":"apache","extensions":["sql"]},"application/x-stuffit":{"source":"apache","compressible":false,"extensions":["sit"]},"application/x-stuffitx":{"source":"apache","extensions":["sitx"]},"application/x-subrip":{"source":"apache","extensions":["srt"]},"application/x-sv4cpio":{"source":"apache","extensions":["sv4cpio"]},"application/x-sv4crc":{"source":"apache","extensions":["sv4crc"]},"application/x-t3vm-image":{"source":"apache","extensions":["t3"]},"application/x-tads":{"source":"apache","extensions":["gam"]},"application/x-tar":{"source":"apache","compressible":true,"extensions":["tar"]},"application/x-tcl":{"source":"apache","extensions":["tcl","tk"]},"application/x-tex":{"source":"apache","extensions":["tex"]},"application/x-tex-tfm":{"source":"apache","extensions":["tfm"]},"application/x-texinfo":{"source":"apache","extensions":["texinfo","texi"]},"application/x-tgif":{"source":"apache","extensions":["obj"]},"application/x-ustar":{"source":"apache","extensions":["ustar"]},"application/x-virtualbox-hdd":{"compressible":true,"extensions":["hdd"]},"application/x-virtualbox-ova":{"compressible":true,"extensions":["ova"]},"application/x-virtualbox-ovf":{"compressible":true,"extensions":["ovf"]},"application/x-virtualbox-vbox":{"compressible":true,"extensions":["vbox"]},"application/x-virtualbox-vbox-extpack":{"compressible":false,"extensions":["vbox-extpack"]},"application/x-virtualbox-vdi":{"compressible":true,"extensions":["vdi"]},"application/x-virtualbox-vhd":{"compressible":true,"extensions":["vhd"]},"application/x-virtualbox-vmdk":{"compressible":true,"extensions":["vmdk"]},"application/x-wais-source":{"source":"apache","extensions":["src"]},"application/x-web-app-manifest+json":{"compressible":true,"extensions":["webapp"]},"application/x-www-form-urlencoded":{"source":"iana","compressible":true},"application/x-x509-ca-cert":{"source":"iana","extensions":["der","crt","pem"]},"application/x-x509-ca-ra-cert":{"source":"iana"},"application/x-x509-next-ca-cert":{"source":"iana"},"application/x-xfig":{"source":"apache","extensions":["fig"]},"application/x-xliff+xml":{"source":"apache","compressible":true,"extensions":["xlf"]},"application/x-xpinstall":{"source":"apache","compressible":false,"extensions":["xpi"]},"application/x-xz":{"source":"apache","extensions":["xz"]},"application/x-zip-compressed":{"extensions":["zip"]},"application/x-zmachine":{"source":"apache","extensions":["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{"source":"iana"},"application/xacml+xml":{"source":"iana","compressible":true},"application/xaml+xml":{"source":"apache","compressible":true,"extensions":["xaml"]},"application/xcap-att+xml":{"source":"iana","compressible":true,"extensions":["xav"]},"application/xcap-caps+xml":{"source":"iana","compressible":true,"extensions":["xca"]},"application/xcap-diff+xml":{"source":"iana","compressible":true,"extensions":["xdf"]},"application/xcap-el+xml":{"source":"iana","compressible":true,"extensions":["xel"]},"application/xcap-error+xml":{"source":"iana","compressible":true},"application/xcap-ns+xml":{"source":"iana","compressible":true,"extensions":["xns"]},"application/xcon-conference-info+xml":{"source":"iana","compressible":true},"application/xcon-conference-info-diff+xml":{"source":"iana","compressible":true},"application/xenc+xml":{"source":"iana","compressible":true,"extensions":["xenc"]},"application/xfdf":{"source":"iana","extensions":["xfdf"]},"application/xhtml+xml":{"source":"iana","compressible":true,"extensions":["xhtml","xht"]},"application/xhtml-voice+xml":{"source":"apache","compressible":true},"application/xliff+xml":{"source":"iana","compressible":true,"extensions":["xlf"]},"application/xml":{"source":"iana","compressible":true,"extensions":["xml","xsl","xsd","rng"]},"application/xml-dtd":{"source":"iana","compressible":true,"extensions":["dtd"]},"application/xml-external-parsed-entity":{"source":"iana"},"application/xml-patch+xml":{"source":"iana","compressible":true},"application/xmpp+xml":{"source":"iana","compressible":true},"application/xop+xml":{"source":"iana","compressible":true,"extensions":["xop"]},"application/xproc+xml":{"source":"apache","compressible":true,"extensions":["xpl"]},"application/xslt+xml":{"source":"iana","compressible":true,"extensions":["xsl","xslt"]},"application/xspf+xml":{"source":"apache","compressible":true,"extensions":["xspf"]},"application/xv+xml":{"source":"iana","compressible":true,"extensions":["mxml","xhvml","xvml","xvm"]},"application/yaml":{"source":"iana"},"application/yang":{"source":"iana","extensions":["yang"]},"application/yang-data+cbor":{"source":"iana"},"application/yang-data+json":{"source":"iana","compressible":true},"application/yang-data+xml":{"source":"iana","compressible":true},"application/yang-patch+json":{"source":"iana","compressible":true},"application/yang-patch+xml":{"source":"iana","compressible":true},"application/yang-sid+json":{"source":"iana","compressible":true},"application/yin+xml":{"source":"iana","compressible":true,"extensions":["yin"]},"application/zip":{"source":"iana","compressible":false,"extensions":["zip"]},"application/zip+dotlottie":{"extensions":["lottie"]},"application/zlib":{"source":"iana"},"application/zstd":{"source":"iana"},"audio/1d-interleaved-parityfec":{"source":"iana"},"audio/32kadpcm":{"source":"iana"},"audio/3gpp":{"source":"iana","compressible":false,"extensions":["3gpp"]},"audio/3gpp2":{"source":"iana"},"audio/aac":{"source":"iana","extensions":["adts","aac"]},"audio/ac3":{"source":"iana"},"audio/adpcm":{"source":"apache","extensions":["adp"]},"audio/amr":{"source":"iana","extensions":["amr"]},"audio/amr-wb":{"source":"iana"},"audio/amr-wb+":{"source":"iana"},"audio/aptx":{"source":"iana"},"audio/asc":{"source":"iana"},"audio/atrac-advanced-lossless":{"source":"iana"},"audio/atrac-x":{"source":"iana"},"audio/atrac3":{"source":"iana"},"audio/basic":{"source":"iana","compressible":false,"extensions":["au","snd"]},"audio/bv16":{"source":"iana"},"audio/bv32":{"source":"iana"},"audio/clearmode":{"source":"iana"},"audio/cn":{"source":"iana"},"audio/dat12":{"source":"iana"},"audio/dls":{"source":"iana"},"audio/dsr-es201108":{"source":"iana"},"audio/dsr-es202050":{"source":"iana"},"audio/dsr-es202211":{"source":"iana"},"audio/dsr-es202212":{"source":"iana"},"audio/dv":{"source":"iana"},"audio/dvi4":{"source":"iana"},"audio/eac3":{"source":"iana"},"audio/encaprtp":{"source":"iana"},"audio/evrc":{"source":"iana"},"audio/evrc-qcp":{"source":"iana"},"audio/evrc0":{"source":"iana"},"audio/evrc1":{"source":"iana"},"audio/evrcb":{"source":"iana"},"audio/evrcb0":{"source":"iana"},"audio/evrcb1":{"source":"iana"},"audio/evrcnw":{"source":"iana"},"audio/evrcnw0":{"source":"iana"},"audio/evrcnw1":{"source":"iana"},"audio/evrcwb":{"source":"iana"},"audio/evrcwb0":{"source":"iana"},"audio/evrcwb1":{"source":"iana"},"audio/evs":{"source":"iana"},"audio/flac":{"source":"iana"},"audio/flexfec":{"source":"iana"},"audio/fwdred":{"source":"iana"},"audio/g711-0":{"source":"iana"},"audio/g719":{"source":"iana"},"audio/g722":{"source":"iana"},"audio/g7221":{"source":"iana"},"audio/g723":{"source":"iana"},"audio/g726-16":{"source":"iana"},"audio/g726-24":{"source":"iana"},"audio/g726-32":{"source":"iana"},"audio/g726-40":{"source":"iana"},"audio/g728":{"source":"iana"},"audio/g729":{"source":"iana"},"audio/g7291":{"source":"iana"},"audio/g729d":{"source":"iana"},"audio/g729e":{"source":"iana"},"audio/gsm":{"source":"iana"},"audio/gsm-efr":{"source":"iana"},"audio/gsm-hr-08":{"source":"iana"},"audio/ilbc":{"source":"iana"},"audio/ip-mr_v2.5":{"source":"iana"},"audio/isac":{"source":"apache"},"audio/l16":{"source":"iana"},"audio/l20":{"source":"iana"},"audio/l24":{"source":"iana","compressible":false},"audio/l8":{"source":"iana"},"audio/lpc":{"source":"iana"},"audio/matroska":{"source":"iana"},"audio/melp":{"source":"iana"},"audio/melp1200":{"source":"iana"},"audio/melp2400":{"source":"iana"},"audio/melp600":{"source":"iana"},"audio/mhas":{"source":"iana"},"audio/midi":{"source":"apache","extensions":["mid","midi","kar","rmi"]},"audio/midi-clip":{"source":"iana"},"audio/mobile-xmf":{"source":"iana","extensions":["mxmf"]},"audio/mp3":{"compressible":false,"extensions":["mp3"]},"audio/mp4":{"source":"iana","compressible":false,"extensions":["m4a","mp4a","m4b"]},"audio/mp4a-latm":{"source":"iana"},"audio/mpa":{"source":"iana"},"audio/mpa-robust":{"source":"iana"},"audio/mpeg":{"source":"iana","compressible":false,"extensions":["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{"source":"iana"},"audio/musepack":{"source":"apache"},"audio/ogg":{"source":"iana","compressible":false,"extensions":["oga","ogg","spx","opus"]},"audio/opus":{"source":"iana"},"audio/parityfec":{"source":"iana"},"audio/pcma":{"source":"iana"},"audio/pcma-wb":{"source":"iana"},"audio/pcmu":{"source":"iana"},"audio/pcmu-wb":{"source":"iana"},"audio/prs.sid":{"source":"iana"},"audio/qcelp":{"source":"iana"},"audio/raptorfec":{"source":"iana"},"audio/red":{"source":"iana"},"audio/rtp-enc-aescm128":{"source":"iana"},"audio/rtp-midi":{"source":"iana"},"audio/rtploopback":{"source":"iana"},"audio/rtx":{"source":"iana"},"audio/s3m":{"source":"apache","extensions":["s3m"]},"audio/scip":{"source":"iana"},"audio/silk":{"source":"apache","extensions":["sil"]},"audio/smv":{"source":"iana"},"audio/smv-qcp":{"source":"iana"},"audio/smv0":{"source":"iana"},"audio/sofa":{"source":"iana"},"audio/sp-midi":{"source":"iana"},"audio/speex":{"source":"iana"},"audio/t140c":{"source":"iana"},"audio/t38":{"source":"iana"},"audio/telephone-event":{"source":"iana"},"audio/tetra_acelp":{"source":"iana"},"audio/tetra_acelp_bb":{"source":"iana"},"audio/tone":{"source":"iana"},"audio/tsvcis":{"source":"iana"},"audio/uemclip":{"source":"iana"},"audio/ulpfec":{"source":"iana"},"audio/usac":{"source":"iana"},"audio/vdvi":{"source":"iana"},"audio/vmr-wb":{"source":"iana"},"audio/vnd.3gpp.iufp":{"source":"iana"},"audio/vnd.4sb":{"source":"iana"},"audio/vnd.audiokoz":{"source":"iana"},"audio/vnd.celp":{"source":"iana"},"audio/vnd.cisco.nse":{"source":"iana"},"audio/vnd.cmles.radio-events":{"source":"iana"},"audio/vnd.cns.anp1":{"source":"iana"},"audio/vnd.cns.inf1":{"source":"iana"},"audio/vnd.dece.audio":{"source":"iana","extensions":["uva","uvva"]},"audio/vnd.digital-winds":{"source":"iana","extensions":["eol"]},"audio/vnd.dlna.adts":{"source":"iana"},"audio/vnd.dolby.heaac.1":{"source":"iana"},"audio/vnd.dolby.heaac.2":{"source":"iana"},"audio/vnd.dolby.mlp":{"source":"iana"},"audio/vnd.dolby.mps":{"source":"iana"},"audio/vnd.dolby.pl2":{"source":"iana"},"audio/vnd.dolby.pl2x":{"source":"iana"},"audio/vnd.dolby.pl2z":{"source":"iana"},"audio/vnd.dolby.pulse.1":{"source":"iana"},"audio/vnd.dra":{"source":"iana","extensions":["dra"]},"audio/vnd.dts":{"source":"iana","extensions":["dts"]},"audio/vnd.dts.hd":{"source":"iana","extensions":["dtshd"]},"audio/vnd.dts.uhd":{"source":"iana"},"audio/vnd.dvb.file":{"source":"iana"},"audio/vnd.everad.plj":{"source":"iana"},"audio/vnd.hns.audio":{"source":"iana"},"audio/vnd.lucent.voice":{"source":"iana","extensions":["lvp"]},"audio/vnd.ms-playready.media.pya":{"source":"iana","extensions":["pya"]},"audio/vnd.nokia.mobile-xmf":{"source":"iana"},"audio/vnd.nortel.vbk":{"source":"iana"},"audio/vnd.nuera.ecelp4800":{"source":"iana","extensions":["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{"source":"iana","extensions":["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{"source":"iana","extensions":["ecelp9600"]},"audio/vnd.octel.sbc":{"source":"iana"},"audio/vnd.presonus.multitrack":{"source":"iana"},"audio/vnd.qcelp":{"source":"apache"},"audio/vnd.rhetorex.32kadpcm":{"source":"iana"},"audio/vnd.rip":{"source":"iana","extensions":["rip"]},"audio/vnd.rn-realaudio":{"compressible":false},"audio/vnd.sealedmedia.softseal.mpeg":{"source":"iana"},"audio/vnd.vmx.cvsd":{"source":"iana"},"audio/vnd.wave":{"compressible":false},"audio/vorbis":{"source":"iana","compressible":false},"audio/vorbis-config":{"source":"iana"},"audio/wav":{"compressible":false,"extensions":["wav"]},"audio/wave":{"compressible":false,"extensions":["wav"]},"audio/webm":{"source":"apache","compressible":false,"extensions":["weba"]},"audio/x-aac":{"source":"apache","compressible":false,"extensions":["aac"]},"audio/x-aiff":{"source":"apache","extensions":["aif","aiff","aifc"]},"audio/x-caf":{"source":"apache","compressible":false,"extensions":["caf"]},"audio/x-flac":{"source":"apache","extensions":["flac"]},"audio/x-m4a":{"source":"nginx","extensions":["m4a"]},"audio/x-matroska":{"source":"apache","extensions":["mka"]},"audio/x-mpegurl":{"source":"apache","extensions":["m3u"]},"audio/x-ms-wax":{"source":"apache","extensions":["wax"]},"audio/x-ms-wma":{"source":"apache","extensions":["wma"]},"audio/x-pn-realaudio":{"source":"apache","extensions":["ram","ra"]},"audio/x-pn-realaudio-plugin":{"source":"apache","extensions":["rmp"]},"audio/x-realaudio":{"source":"nginx","extensions":["ra"]},"audio/x-tta":{"source":"apache"},"audio/x-wav":{"source":"apache","extensions":["wav"]},"audio/xm":{"source":"apache","extensions":["xm"]},"chemical/x-cdx":{"source":"apache","extensions":["cdx"]},"chemical/x-cif":{"source":"apache","extensions":["cif"]},"chemical/x-cmdf":{"source":"apache","extensions":["cmdf"]},"chemical/x-cml":{"source":"apache","extensions":["cml"]},"chemical/x-csml":{"source":"apache","extensions":["csml"]},"chemical/x-pdb":{"source":"apache"},"chemical/x-xyz":{"source":"apache","extensions":["xyz"]},"font/collection":{"source":"iana","extensions":["ttc"]},"font/otf":{"source":"iana","compressible":true,"extensions":["otf"]},"font/sfnt":{"source":"iana"},"font/ttf":{"source":"iana","compressible":true,"extensions":["ttf"]},"font/woff":{"source":"iana","extensions":["woff"]},"font/woff2":{"source":"iana","extensions":["woff2"]},"image/aces":{"source":"iana","extensions":["exr"]},"image/apng":{"source":"iana","compressible":false,"extensions":["apng"]},"image/avci":{"source":"iana","extensions":["avci"]},"image/avcs":{"source":"iana","extensions":["avcs"]},"image/avif":{"source":"iana","compressible":false,"extensions":["avif"]},"image/bmp":{"source":"iana","compressible":true,"extensions":["bmp","dib"]},"image/cgm":{"source":"iana","extensions":["cgm"]},"image/dicom-rle":{"source":"iana","extensions":["drle"]},"image/dpx":{"source":"iana","extensions":["dpx"]},"image/emf":{"source":"iana","extensions":["emf"]},"image/fits":{"source":"iana","extensions":["fits"]},"image/g3fax":{"source":"iana","extensions":["g3"]},"image/gif":{"source":"iana","compressible":false,"extensions":["gif"]},"image/heic":{"source":"iana","extensions":["heic"]},"image/heic-sequence":{"source":"iana","extensions":["heics"]},"image/heif":{"source":"iana","extensions":["heif"]},"image/heif-sequence":{"source":"iana","extensions":["heifs"]},"image/hej2k":{"source":"iana","extensions":["hej2"]},"image/ief":{"source":"iana","extensions":["ief"]},"image/j2c":{"source":"iana"},"image/jaii":{"source":"iana","extensions":["jaii"]},"image/jais":{"source":"iana","extensions":["jais"]},"image/jls":{"source":"iana","extensions":["jls"]},"image/jp2":{"source":"iana","compressible":false,"extensions":["jp2","jpg2"]},"image/jpeg":{"source":"iana","compressible":false,"extensions":["jpg","jpeg","jpe"]},"image/jph":{"source":"iana","extensions":["jph"]},"image/jphc":{"source":"iana","extensions":["jhc"]},"image/jpm":{"source":"iana","compressible":false,"extensions":["jpm","jpgm"]},"image/jpx":{"source":"iana","compressible":false,"extensions":["jpx","jpf"]},"image/jxl":{"source":"iana","extensions":["jxl"]},"image/jxr":{"source":"iana","extensions":["jxr"]},"image/jxra":{"source":"iana","extensions":["jxra"]},"image/jxrs":{"source":"iana","extensions":["jxrs"]},"image/jxs":{"source":"iana","extensions":["jxs"]},"image/jxsc":{"source":"iana","extensions":["jxsc"]},"image/jxsi":{"source":"iana","extensions":["jxsi"]},"image/jxss":{"source":"iana","extensions":["jxss"]},"image/ktx":{"source":"iana","extensions":["ktx"]},"image/ktx2":{"source":"iana","extensions":["ktx2"]},"image/naplps":{"source":"iana"},"image/pjpeg":{"compressible":false,"extensions":["jfif"]},"image/png":{"source":"iana","compressible":false,"extensions":["png"]},"image/prs.btif":{"source":"iana","extensions":["btif","btf"]},"image/prs.pti":{"source":"iana","extensions":["pti"]},"image/pwg-raster":{"source":"iana"},"image/sgi":{"source":"apache","extensions":["sgi"]},"image/svg+xml":{"source":"iana","compressible":true,"extensions":["svg","svgz"]},"image/t38":{"source":"iana","extensions":["t38"]},"image/tiff":{"source":"iana","compressible":false,"extensions":["tif","tiff"]},"image/tiff-fx":{"source":"iana","extensions":["tfx"]},"image/vnd.adobe.photoshop":{"source":"iana","compressible":true,"extensions":["psd"]},"image/vnd.airzip.accelerator.azv":{"source":"iana","extensions":["azv"]},"image/vnd.clip":{"source":"iana"},"image/vnd.cns.inf2":{"source":"iana"},"image/vnd.dece.graphic":{"source":"iana","extensions":["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{"source":"iana","extensions":["djvu","djv"]},"image/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"image/vnd.dwg":{"source":"iana","extensions":["dwg"]},"image/vnd.dxf":{"source":"iana","extensions":["dxf"]},"image/vnd.fastbidsheet":{"source":"iana","extensions":["fbs"]},"image/vnd.fpx":{"source":"iana","extensions":["fpx"]},"image/vnd.fst":{"source":"iana","extensions":["fst"]},"image/vnd.fujixerox.edmics-mmr":{"source":"iana","extensions":["mmr"]},"image/vnd.fujixerox.edmics-rlc":{"source":"iana","extensions":["rlc"]},"image/vnd.globalgraphics.pgb":{"source":"iana"},"image/vnd.microsoft.icon":{"source":"iana","compressible":true,"extensions":["ico"]},"image/vnd.mix":{"source":"iana"},"image/vnd.mozilla.apng":{"source":"iana"},"image/vnd.ms-dds":{"compressible":true,"extensions":["dds"]},"image/vnd.ms-modi":{"source":"iana","extensions":["mdi"]},"image/vnd.ms-photo":{"source":"apache","extensions":["wdp"]},"image/vnd.net-fpx":{"source":"iana","extensions":["npx"]},"image/vnd.pco.b16":{"source":"iana","extensions":["b16"]},"image/vnd.radiance":{"source":"iana"},"image/vnd.sealed.png":{"source":"iana"},"image/vnd.sealedmedia.softseal.gif":{"source":"iana"},"image/vnd.sealedmedia.softseal.jpg":{"source":"iana"},"image/vnd.svf":{"source":"iana"},"image/vnd.tencent.tap":{"source":"iana","extensions":["tap"]},"image/vnd.valve.source.texture":{"source":"iana","extensions":["vtf"]},"image/vnd.wap.wbmp":{"source":"iana","extensions":["wbmp"]},"image/vnd.xiff":{"source":"iana","extensions":["xif"]},"image/vnd.zbrush.pcx":{"source":"iana","extensions":["pcx"]},"image/webp":{"source":"iana","extensions":["webp"]},"image/wmf":{"source":"iana","extensions":["wmf"]},"image/x-3ds":{"source":"apache","extensions":["3ds"]},"image/x-adobe-dng":{"extensions":["dng"]},"image/x-cmu-raster":{"source":"apache","extensions":["ras"]},"image/x-cmx":{"source":"apache","extensions":["cmx"]},"image/x-emf":{"source":"iana"},"image/x-freehand":{"source":"apache","extensions":["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{"source":"apache","compressible":true,"extensions":["ico"]},"image/x-jng":{"source":"nginx","extensions":["jng"]},"image/x-mrsid-image":{"source":"apache","extensions":["sid"]},"image/x-ms-bmp":{"source":"nginx","compressible":true,"extensions":["bmp"]},"image/x-pcx":{"source":"apache","extensions":["pcx"]},"image/x-pict":{"source":"apache","extensions":["pic","pct"]},"image/x-portable-anymap":{"source":"apache","extensions":["pnm"]},"image/x-portable-bitmap":{"source":"apache","extensions":["pbm"]},"image/x-portable-graymap":{"source":"apache","extensions":["pgm"]},"image/x-portable-pixmap":{"source":"apache","extensions":["ppm"]},"image/x-rgb":{"source":"apache","extensions":["rgb"]},"image/x-tga":{"source":"apache","extensions":["tga"]},"image/x-wmf":{"source":"iana"},"image/x-xbitmap":{"source":"apache","extensions":["xbm"]},"image/x-xcf":{"compressible":false},"image/x-xpixmap":{"source":"apache","extensions":["xpm"]},"image/x-xwindowdump":{"source":"apache","extensions":["xwd"]},"message/bhttp":{"source":"iana"},"message/cpim":{"source":"iana"},"message/delivery-status":{"source":"iana"},"message/disposition-notification":{"source":"iana","extensions":["disposition-notification"]},"message/external-body":{"source":"iana"},"message/feedback-report":{"source":"iana"},"message/global":{"source":"iana","extensions":["u8msg"]},"message/global-delivery-status":{"source":"iana","extensions":["u8dsn"]},"message/global-disposition-notification":{"source":"iana","extensions":["u8mdn"]},"message/global-headers":{"source":"iana","extensions":["u8hdr"]},"message/http":{"source":"iana","compressible":false},"message/imdn+xml":{"source":"iana","compressible":true},"message/mls":{"source":"iana"},"message/news":{"source":"apache"},"message/ohttp-req":{"source":"iana"},"message/ohttp-res":{"source":"iana"},"message/partial":{"source":"iana","compressible":false},"message/rfc822":{"source":"iana","compressible":true,"extensions":["eml","mime","mht","mhtml"]},"message/s-http":{"source":"apache"},"message/sip":{"source":"iana"},"message/sipfrag":{"source":"iana"},"message/tracking-status":{"source":"iana"},"message/vnd.si.simp":{"source":"apache"},"message/vnd.wfa.wsc":{"source":"iana","extensions":["wsc"]},"model/3mf":{"source":"iana","extensions":["3mf"]},"model/e57":{"source":"iana"},"model/gltf+json":{"source":"iana","compressible":true,"extensions":["gltf"]},"model/gltf-binary":{"source":"iana","compressible":true,"extensions":["glb"]},"model/iges":{"source":"iana","compressible":false,"extensions":["igs","iges"]},"model/jt":{"source":"iana","extensions":["jt"]},"model/mesh":{"source":"iana","compressible":false,"extensions":["msh","mesh","silo"]},"model/mtl":{"source":"iana","extensions":["mtl"]},"model/obj":{"source":"iana","extensions":["obj"]},"model/prc":{"source":"iana","extensions":["prc"]},"model/step":{"source":"iana","extensions":["step","stp","stpnc","p21","210"]},"model/step+xml":{"source":"iana","compressible":true,"extensions":["stpx"]},"model/step+zip":{"source":"iana","compressible":false,"extensions":["stpz"]},"model/step-xml+zip":{"source":"iana","compressible":false,"extensions":["stpxz"]},"model/stl":{"source":"iana","extensions":["stl"]},"model/u3d":{"source":"iana","extensions":["u3d"]},"model/vnd.bary":{"source":"iana","extensions":["bary"]},"model/vnd.cld":{"source":"iana","extensions":["cld"]},"model/vnd.collada+xml":{"source":"iana","compressible":true,"extensions":["dae"]},"model/vnd.dwf":{"source":"iana","extensions":["dwf"]},"model/vnd.flatland.3dml":{"source":"iana"},"model/vnd.gdl":{"source":"iana","extensions":["gdl"]},"model/vnd.gs-gdl":{"source":"apache"},"model/vnd.gs.gdl":{"source":"iana"},"model/vnd.gtw":{"source":"iana","extensions":["gtw"]},"model/vnd.moml+xml":{"source":"iana","compressible":true},"model/vnd.mts":{"source":"iana","extensions":["mts"]},"model/vnd.opengex":{"source":"iana","extensions":["ogex"]},"model/vnd.parasolid.transmit.binary":{"source":"iana","extensions":["x_b"]},"model/vnd.parasolid.transmit.text":{"source":"iana","extensions":["x_t"]},"model/vnd.pytha.pyox":{"source":"iana","extensions":["pyo","pyox"]},"model/vnd.rosette.annotated-data-model":{"source":"iana"},"model/vnd.sap.vds":{"source":"iana","extensions":["vds"]},"model/vnd.usda":{"source":"iana","extensions":["usda"]},"model/vnd.usdz+zip":{"source":"iana","compressible":false,"extensions":["usdz"]},"model/vnd.valve.source.compiled-map":{"source":"iana","extensions":["bsp"]},"model/vnd.vtu":{"source":"iana","extensions":["vtu"]},"model/vrml":{"source":"iana","compressible":false,"extensions":["wrl","vrml"]},"model/x3d+binary":{"source":"apache","compressible":false,"extensions":["x3db","x3dbz"]},"model/x3d+fastinfoset":{"source":"iana","extensions":["x3db"]},"model/x3d+vrml":{"source":"apache","compressible":false,"extensions":["x3dv","x3dvz"]},"model/x3d+xml":{"source":"iana","compressible":true,"extensions":["x3d","x3dz"]},"model/x3d-vrml":{"source":"iana","extensions":["x3dv"]},"multipart/alternative":{"source":"iana","compressible":false},"multipart/appledouble":{"source":"iana"},"multipart/byteranges":{"source":"iana"},"multipart/digest":{"source":"iana"},"multipart/encrypted":{"source":"iana","compressible":false},"multipart/form-data":{"source":"iana","compressible":false},"multipart/header-set":{"source":"iana"},"multipart/mixed":{"source":"iana"},"multipart/multilingual":{"source":"iana"},"multipart/parallel":{"source":"iana"},"multipart/related":{"source":"iana","compressible":false},"multipart/report":{"source":"iana"},"multipart/signed":{"source":"iana","compressible":false},"multipart/vnd.bint.med-plus":{"source":"iana"},"multipart/voice-message":{"source":"iana"},"multipart/x-mixed-replace":{"source":"iana"},"text/1d-interleaved-parityfec":{"source":"iana"},"text/cache-manifest":{"source":"iana","compressible":true,"extensions":["appcache","manifest"]},"text/calendar":{"source":"iana","extensions":["ics","ifb"]},"text/calender":{"compressible":true},"text/cmd":{"compressible":true},"text/coffeescript":{"extensions":["coffee","litcoffee"]},"text/cql":{"source":"iana"},"text/cql-expression":{"source":"iana"},"text/cql-identifier":{"source":"iana"},"text/css":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["css"]},"text/csv":{"source":"iana","compressible":true,"extensions":["csv"]},"text/csv-schema":{"source":"iana"},"text/directory":{"source":"iana"},"text/dns":{"source":"iana"},"text/ecmascript":{"source":"apache"},"text/encaprtp":{"source":"iana"},"text/enriched":{"source":"iana"},"text/fhirpath":{"source":"iana"},"text/flexfec":{"source":"iana"},"text/fwdred":{"source":"iana"},"text/gff3":{"source":"iana"},"text/grammar-ref-list":{"source":"iana"},"text/hl7v2":{"source":"iana"},"text/html":{"source":"iana","compressible":true,"extensions":["html","htm","shtml"]},"text/jade":{"extensions":["jade"]},"text/javascript":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["js","mjs"]},"text/jcr-cnd":{"source":"iana"},"text/jsx":{"compressible":true,"extensions":["jsx"]},"text/less":{"compressible":true,"extensions":["less"]},"text/markdown":{"source":"iana","compressible":true,"extensions":["md","markdown"]},"text/mathml":{"source":"nginx","extensions":["mml"]},"text/mdx":{"compressible":true,"extensions":["mdx"]},"text/mizar":{"source":"iana"},"text/n3":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["n3"]},"text/parameters":{"source":"iana","charset":"UTF-8"},"text/parityfec":{"source":"iana"},"text/plain":{"source":"iana","compressible":true,"extensions":["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{"source":"iana","charset":"UTF-8"},"text/prs.fallenstein.rst":{"source":"iana"},"text/prs.lines.tag":{"source":"iana","extensions":["dsc"]},"text/prs.prop.logic":{"source":"iana"},"text/prs.texi":{"source":"iana"},"text/raptorfec":{"source":"iana"},"text/red":{"source":"iana"},"text/rfc822-headers":{"source":"iana"},"text/richtext":{"source":"iana","compressible":true,"extensions":["rtx"]},"text/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"text/rtp-enc-aescm128":{"source":"iana"},"text/rtploopback":{"source":"iana"},"text/rtx":{"source":"iana"},"text/sgml":{"source":"iana","extensions":["sgml","sgm"]},"text/shaclc":{"source":"iana"},"text/shex":{"source":"iana","extensions":["shex"]},"text/slim":{"extensions":["slim","slm"]},"text/spdx":{"source":"iana","extensions":["spdx"]},"text/strings":{"source":"iana"},"text/stylus":{"extensions":["stylus","styl"]},"text/t140":{"source":"iana"},"text/tab-separated-values":{"source":"iana","compressible":true,"extensions":["tsv"]},"text/troff":{"source":"iana","extensions":["t","tr","roff","man","me","ms"]},"text/turtle":{"source":"iana","charset":"UTF-8","extensions":["ttl"]},"text/ulpfec":{"source":"iana"},"text/uri-list":{"source":"iana","compressible":true,"extensions":["uri","uris","urls"]},"text/vcard":{"source":"iana","compressible":true,"extensions":["vcard"]},"text/vnd.a":{"source":"iana"},"text/vnd.abc":{"source":"iana"},"text/vnd.ascii-art":{"source":"iana"},"text/vnd.curl":{"source":"iana","extensions":["curl"]},"text/vnd.curl.dcurl":{"source":"apache","extensions":["dcurl"]},"text/vnd.curl.mcurl":{"source":"apache","extensions":["mcurl"]},"text/vnd.curl.scurl":{"source":"apache","extensions":["scurl"]},"text/vnd.debian.copyright":{"source":"iana","charset":"UTF-8"},"text/vnd.dmclientscript":{"source":"iana"},"text/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"text/vnd.esmertec.theme-descriptor":{"source":"iana","charset":"UTF-8"},"text/vnd.exchangeable":{"source":"iana"},"text/vnd.familysearch.gedcom":{"source":"iana","extensions":["ged"]},"text/vnd.ficlab.flt":{"source":"iana"},"text/vnd.fly":{"source":"iana","extensions":["fly"]},"text/vnd.fmi.flexstor":{"source":"iana","extensions":["flx"]},"text/vnd.gml":{"source":"iana"},"text/vnd.graphviz":{"source":"iana","extensions":["gv"]},"text/vnd.hans":{"source":"iana"},"text/vnd.hgl":{"source":"iana"},"text/vnd.in3d.3dml":{"source":"iana","extensions":["3dml"]},"text/vnd.in3d.spot":{"source":"iana","extensions":["spot"]},"text/vnd.iptc.newsml":{"source":"iana"},"text/vnd.iptc.nitf":{"source":"iana"},"text/vnd.latex-z":{"source":"iana"},"text/vnd.motorola.reflex":{"source":"iana"},"text/vnd.ms-mediapackage":{"source":"iana"},"text/vnd.net2phone.commcenter.command":{"source":"iana"},"text/vnd.radisys.msml-basic-layout":{"source":"iana"},"text/vnd.senx.warpscript":{"source":"iana"},"text/vnd.si.uricatalogue":{"source":"apache"},"text/vnd.sosi":{"source":"iana"},"text/vnd.sun.j2me.app-descriptor":{"source":"iana","charset":"UTF-8","extensions":["jad"]},"text/vnd.trolltech.linguist":{"source":"iana","charset":"UTF-8"},"text/vnd.vcf":{"source":"iana"},"text/vnd.wap.si":{"source":"iana"},"text/vnd.wap.sl":{"source":"iana"},"text/vnd.wap.wml":{"source":"iana","extensions":["wml"]},"text/vnd.wap.wmlscript":{"source":"iana","extensions":["wmls"]},"text/vnd.zoo.kcl":{"source":"iana"},"text/vtt":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["vtt"]},"text/wgsl":{"source":"iana","extensions":["wgsl"]},"text/x-asm":{"source":"apache","extensions":["s","asm"]},"text/x-c":{"source":"apache","extensions":["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{"source":"nginx","extensions":["htc"]},"text/x-fortran":{"source":"apache","extensions":["f","for","f77","f90"]},"text/x-gwt-rpc":{"compressible":true},"text/x-handlebars-template":{"extensions":["hbs"]},"text/x-java-source":{"source":"apache","extensions":["java"]},"text/x-jquery-tmpl":{"compressible":true},"text/x-lua":{"extensions":["lua"]},"text/x-markdown":{"compressible":true,"extensions":["mkd"]},"text/x-nfo":{"source":"apache","extensions":["nfo"]},"text/x-opml":{"source":"apache","extensions":["opml"]},"text/x-org":{"compressible":true,"extensions":["org"]},"text/x-pascal":{"source":"apache","extensions":["p","pas"]},"text/x-processing":{"compressible":true,"extensions":["pde"]},"text/x-sass":{"extensions":["sass"]},"text/x-scss":{"extensions":["scss"]},"text/x-setext":{"source":"apache","extensions":["etx"]},"text/x-sfv":{"source":"apache","extensions":["sfv"]},"text/x-suse-ymp":{"compressible":true,"extensions":["ymp"]},"text/x-uuencode":{"source":"apache","extensions":["uu"]},"text/x-vcalendar":{"source":"apache","extensions":["vcs"]},"text/x-vcard":{"source":"apache","extensions":["vcf"]},"text/xml":{"source":"iana","compressible":true,"extensions":["xml"]},"text/xml-external-parsed-entity":{"source":"iana"},"text/yaml":{"compressible":true,"extensions":["yaml","yml"]},"video/1d-interleaved-parityfec":{"source":"iana"},"video/3gpp":{"source":"iana","extensions":["3gp","3gpp"]},"video/3gpp-tt":{"source":"iana"},"video/3gpp2":{"source":"iana","extensions":["3g2"]},"video/av1":{"source":"iana"},"video/bmpeg":{"source":"iana"},"video/bt656":{"source":"iana"},"video/celb":{"source":"iana"},"video/dv":{"source":"iana"},"video/encaprtp":{"source":"iana"},"video/evc":{"source":"iana"},"video/ffv1":{"source":"iana"},"video/flexfec":{"source":"iana"},"video/h261":{"source":"iana","extensions":["h261"]},"video/h263":{"source":"iana","extensions":["h263"]},"video/h263-1998":{"source":"iana"},"video/h263-2000":{"source":"iana"},"video/h264":{"source":"iana","extensions":["h264"]},"video/h264-rcdo":{"source":"iana"},"video/h264-svc":{"source":"iana"},"video/h265":{"source":"iana"},"video/h266":{"source":"iana"},"video/iso.segment":{"source":"iana","extensions":["m4s"]},"video/jpeg":{"source":"iana","extensions":["jpgv"]},"video/jpeg2000":{"source":"iana"},"video/jpm":{"source":"apache","extensions":["jpm","jpgm"]},"video/jxsv":{"source":"iana"},"video/lottie+json":{"source":"iana","compressible":true},"video/matroska":{"source":"iana"},"video/matroska-3d":{"source":"iana"},"video/mj2":{"source":"iana","extensions":["mj2","mjp2"]},"video/mp1s":{"source":"iana"},"video/mp2p":{"source":"iana"},"video/mp2t":{"source":"iana","extensions":["ts","m2t","m2ts","mts"]},"video/mp4":{"source":"iana","compressible":false,"extensions":["mp4","mp4v","mpg4"]},"video/mp4v-es":{"source":"iana"},"video/mpeg":{"source":"iana","compressible":false,"extensions":["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{"source":"iana"},"video/mpv":{"source":"iana"},"video/nv":{"source":"iana"},"video/ogg":{"source":"iana","compressible":false,"extensions":["ogv"]},"video/parityfec":{"source":"iana"},"video/pointer":{"source":"iana"},"video/quicktime":{"source":"iana","compressible":false,"extensions":["qt","mov"]},"video/raptorfec":{"source":"iana"},"video/raw":{"source":"iana"},"video/rtp-enc-aescm128":{"source":"iana"},"video/rtploopback":{"source":"iana"},"video/rtx":{"source":"iana"},"video/scip":{"source":"iana"},"video/smpte291":{"source":"iana"},"video/smpte292m":{"source":"iana"},"video/ulpfec":{"source":"iana"},"video/vc1":{"source":"iana"},"video/vc2":{"source":"iana"},"video/vnd.cctv":{"source":"iana"},"video/vnd.dece.hd":{"source":"iana","extensions":["uvh","uvvh"]},"video/vnd.dece.mobile":{"source":"iana","extensions":["uvm","uvvm"]},"video/vnd.dece.mp4":{"source":"iana"},"video/vnd.dece.pd":{"source":"iana","extensions":["uvp","uvvp"]},"video/vnd.dece.sd":{"source":"iana","extensions":["uvs","uvvs"]},"video/vnd.dece.video":{"source":"iana","extensions":["uvv","uvvv"]},"video/vnd.directv.mpeg":{"source":"iana"},"video/vnd.directv.mpeg-tts":{"source":"iana"},"video/vnd.dlna.mpeg-tts":{"source":"iana"},"video/vnd.dvb.file":{"source":"iana","extensions":["dvb"]},"video/vnd.fvt":{"source":"iana","extensions":["fvt"]},"video/vnd.hns.video":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.ttsavc":{"source":"iana"},"video/vnd.iptvforum.ttsmpeg2":{"source":"iana"},"video/vnd.motorola.video":{"source":"iana"},"video/vnd.motorola.videop":{"source":"iana"},"video/vnd.mpegurl":{"source":"iana","extensions":["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{"source":"iana","extensions":["pyv"]},"video/vnd.nokia.interleaved-multimedia":{"source":"iana"},"video/vnd.nokia.mp4vr":{"source":"iana"},"video/vnd.nokia.videovoip":{"source":"iana"},"video/vnd.objectvideo":{"source":"iana"},"video/vnd.planar":{"source":"iana"},"video/vnd.radgamettools.bink":{"source":"iana"},"video/vnd.radgamettools.smacker":{"source":"apache"},"video/vnd.sealed.mpeg1":{"source":"iana"},"video/vnd.sealed.mpeg4":{"source":"iana"},"video/vnd.sealed.swf":{"source":"iana"},"video/vnd.sealedmedia.softseal.mov":{"source":"iana"},"video/vnd.uvvu.mp4":{"source":"iana","extensions":["uvu","uvvu"]},"video/vnd.vivo":{"source":"iana","extensions":["viv"]},"video/vnd.youtube.yt":{"source":"iana"},"video/vp8":{"source":"iana"},"video/vp9":{"source":"iana"},"video/webm":{"source":"apache","compressible":false,"extensions":["webm"]},"video/x-f4v":{"source":"apache","extensions":["f4v"]},"video/x-fli":{"source":"apache","extensions":["fli"]},"video/x-flv":{"source":"apache","compressible":false,"extensions":["flv"]},"video/x-m4v":{"source":"apache","extensions":["m4v"]},"video/x-matroska":{"source":"apache","compressible":false,"extensions":["mkv","mk3d","mks"]},"video/x-mng":{"source":"apache","extensions":["mng"]},"video/x-ms-asf":{"source":"apache","extensions":["asf","asx"]},"video/x-ms-vob":{"source":"apache","extensions":["vob"]},"video/x-ms-wm":{"source":"apache","extensions":["wm"]},"video/x-ms-wmv":{"source":"apache","compressible":false,"extensions":["wmv"]},"video/x-ms-wmx":{"source":"apache","extensions":["wmx"]},"video/x-ms-wvx":{"source":"apache","extensions":["wvx"]},"video/x-msvideo":{"source":"apache","extensions":["avi"]},"video/x-sgi-movie":{"source":"apache","extensions":["movie"]},"video/x-smv":{"source":"apache","extensions":["smv"]},"x-conference/x-cooltalk":{"source":"apache","extensions":["ice"]},"x-shader/x-fragment":{"compressible":true},"x-shader/x-vertex":{"compressible":true}}');
|
|
774
774
|
|
|
775
|
-
/***/ }
|
|
775
|
+
/***/ },
|
|
776
776
|
|
|
777
|
-
/***/ 869
|
|
778
|
-
|
|
777
|
+
/***/ 869
|
|
778
|
+
(module, __unused_webpack_exports, __webpack_require__) {
|
|
779
779
|
|
|
780
780
|
var regeneratorAsyncGen = __webpack_require__(887);
|
|
781
781
|
function _regeneratorAsync(n, e, r, t, o) {
|
|
@@ -786,10 +786,10 @@ function _regeneratorAsync(n, e, r, t, o) {
|
|
|
786
786
|
}
|
|
787
787
|
module.exports = _regeneratorAsync, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
788
788
|
|
|
789
|
-
/***/ }
|
|
789
|
+
/***/ },
|
|
790
790
|
|
|
791
|
-
/***/ 887
|
|
792
|
-
|
|
791
|
+
/***/ 887
|
|
792
|
+
(module, __unused_webpack_exports, __webpack_require__) {
|
|
793
793
|
|
|
794
794
|
var regenerator = __webpack_require__(993);
|
|
795
795
|
var regeneratorAsyncIterator = __webpack_require__(791);
|
|
@@ -798,10 +798,10 @@ function _regeneratorAsyncGen(r, e, t, o, n) {
|
|
|
798
798
|
}
|
|
799
799
|
module.exports = _regeneratorAsyncGen, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
800
800
|
|
|
801
|
-
/***/ }
|
|
801
|
+
/***/ },
|
|
802
802
|
|
|
803
|
-
/***/ 983
|
|
804
|
-
|
|
803
|
+
/***/ 983
|
|
804
|
+
(module) {
|
|
805
805
|
|
|
806
806
|
// 'mime-score' back-ported to CommonJS
|
|
807
807
|
|
|
@@ -862,10 +862,10 @@ module.exports = function mimeScore (mimeType, source = 'default') {
|
|
|
862
862
|
}
|
|
863
863
|
|
|
864
864
|
|
|
865
|
-
/***/ }
|
|
865
|
+
/***/ },
|
|
866
866
|
|
|
867
|
-
/***/ 993
|
|
868
|
-
|
|
867
|
+
/***/ 993
|
|
868
|
+
(module, __unused_webpack_exports, __webpack_require__) {
|
|
869
869
|
|
|
870
870
|
var regeneratorDefine = __webpack_require__(546);
|
|
871
871
|
function _regenerator() {
|
|
@@ -957,7 +957,7 @@ function _regenerator() {
|
|
|
957
957
|
}
|
|
958
958
|
module.exports = _regenerator, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
959
959
|
|
|
960
|
-
/***/ }
|
|
960
|
+
/***/ }
|
|
961
961
|
|
|
962
962
|
/******/ });
|
|
963
963
|
/************************************************************************/
|
|
@@ -12904,11 +12904,11 @@ function _taggedTemplateLiteral(e, t) {
|
|
|
12904
12904
|
// EXTERNAL MODULE: ./node_modules/escape-html/index.js
|
|
12905
12905
|
var escape_html = __webpack_require__(580);
|
|
12906
12906
|
var escape_html_default = /*#__PURE__*/__webpack_require__.n(escape_html);
|
|
12907
|
-
;// ./node_modules/uuid/dist/
|
|
12907
|
+
;// ./node_modules/uuid/dist/native.js
|
|
12908
12908
|
const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);
|
|
12909
|
-
/* harmony default export */ const
|
|
12909
|
+
/* harmony default export */ const dist_native = ({ randomUUID });
|
|
12910
12910
|
|
|
12911
|
-
;// ./node_modules/uuid/dist/
|
|
12911
|
+
;// ./node_modules/uuid/dist/rng.js
|
|
12912
12912
|
let getRandomValues;
|
|
12913
12913
|
const rnds8 = new Uint8Array(16);
|
|
12914
12914
|
function rng() {
|
|
@@ -12921,7 +12921,7 @@ function rng() {
|
|
|
12921
12921
|
return getRandomValues(rnds8);
|
|
12922
12922
|
}
|
|
12923
12923
|
|
|
12924
|
-
;// ./node_modules/uuid/dist/
|
|
12924
|
+
;// ./node_modules/uuid/dist/stringify.js
|
|
12925
12925
|
|
|
12926
12926
|
const byteToHex = [];
|
|
12927
12927
|
for (let i = 0; i < 256; ++i) {
|
|
@@ -12956,16 +12956,13 @@ function stringify(arr, offset = 0) {
|
|
|
12956
12956
|
}
|
|
12957
12957
|
return uuid;
|
|
12958
12958
|
}
|
|
12959
|
-
/* harmony default export */ const
|
|
12959
|
+
/* harmony default export */ const dist_stringify = ((/* unused pure expression or super */ null && (stringify)));
|
|
12960
12960
|
|
|
12961
|
-
;// ./node_modules/uuid/dist/
|
|
12961
|
+
;// ./node_modules/uuid/dist/v4.js
|
|
12962
12962
|
|
|
12963
12963
|
|
|
12964
12964
|
|
|
12965
|
-
function
|
|
12966
|
-
if (esm_browser_native.randomUUID && !buf && !options) {
|
|
12967
|
-
return esm_browser_native.randomUUID();
|
|
12968
|
-
}
|
|
12965
|
+
function _v4(options, buf, offset) {
|
|
12969
12966
|
options = options || {};
|
|
12970
12967
|
const rnds = options.random ?? options.rng?.() ?? rng();
|
|
12971
12968
|
if (rnds.length < 16) {
|
|
@@ -12985,7 +12982,13 @@ function v4(options, buf, offset) {
|
|
|
12985
12982
|
}
|
|
12986
12983
|
return unsafeStringify(rnds);
|
|
12987
12984
|
}
|
|
12988
|
-
|
|
12985
|
+
function v4(options, buf, offset) {
|
|
12986
|
+
if (dist_native.randomUUID && !buf && !options) {
|
|
12987
|
+
return dist_native.randomUUID();
|
|
12988
|
+
}
|
|
12989
|
+
return _v4(options, buf, offset);
|
|
12990
|
+
}
|
|
12991
|
+
/* harmony default export */ const dist_v4 = (v4);
|
|
12989
12992
|
|
|
12990
12993
|
;// ./src/widgets/peoplePicker.js
|
|
12991
12994
|
|
|
@@ -13109,7 +13112,7 @@ var PeoplePicker = /*#__PURE__*/function () {
|
|
|
13109
13112
|
var _indexes = indexes(book),
|
|
13110
13113
|
groupIndex = _indexes.groupIndex,
|
|
13111
13114
|
groupContainer = _indexes.groupContainer;
|
|
13112
|
-
var group = external_$rdf_.sym("".concat(groupContainer.uri).concat(
|
|
13115
|
+
var group = external_$rdf_.sym("".concat(groupContainer.uri).concat(dist_v4().slice(0, 8), ".ttl#this"));
|
|
13113
13116
|
var name = defaultNewGroupName || 'Untitled Group';
|
|
13114
13117
|
|
|
13115
13118
|
// NOTE that order matters here. Unfortunately this type of update is
|
|
@@ -14123,44 +14126,42 @@ var DateFolder = /*#__PURE__*/function () {
|
|
|
14123
14126
|
}() // firstleafObject
|
|
14124
14127
|
}]);
|
|
14125
14128
|
}(); // class
|
|
14126
|
-
;// ./node_modules/@noble/hashes/
|
|
14127
|
-
const crypto_crypto = typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;
|
|
14128
|
-
//# sourceMappingURL=crypto.js.map
|
|
14129
|
-
;// ./node_modules/@noble/hashes/esm/utils.js
|
|
14129
|
+
;// ./node_modules/@noble/hashes/utils.js
|
|
14130
14130
|
/**
|
|
14131
14131
|
* Utilities for hex, bytes, CSPRNG.
|
|
14132
14132
|
* @module
|
|
14133
14133
|
*/
|
|
14134
14134
|
/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
14135
|
-
// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.
|
|
14136
|
-
// node.js versions earlier than v19 don't declare it in global scope.
|
|
14137
|
-
// For node.js, package.json#exports field mapping rewrites import
|
|
14138
|
-
// from `crypto` to `cryptoNode`, which imports native module.
|
|
14139
|
-
// Makes the utils un-importable in browsers without a bundler.
|
|
14140
|
-
// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.
|
|
14141
|
-
|
|
14142
14135
|
/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */
|
|
14143
|
-
function
|
|
14136
|
+
function utils_isBytes(a) {
|
|
14144
14137
|
return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');
|
|
14145
14138
|
}
|
|
14146
14139
|
/** Asserts something is positive integer. */
|
|
14147
|
-
function
|
|
14148
|
-
if (!Number.isSafeInteger(n) || n < 0)
|
|
14149
|
-
|
|
14140
|
+
function utils_anumber(n, title = '') {
|
|
14141
|
+
if (!Number.isSafeInteger(n) || n < 0) {
|
|
14142
|
+
const prefix = title && `"${title}" `;
|
|
14143
|
+
throw new Error(`${prefix}expected integer >= 0, got ${n}`);
|
|
14144
|
+
}
|
|
14150
14145
|
}
|
|
14151
14146
|
/** Asserts something is Uint8Array. */
|
|
14152
|
-
function
|
|
14153
|
-
|
|
14154
|
-
|
|
14155
|
-
|
|
14156
|
-
|
|
14147
|
+
function utils_abytes(value, length, title = '') {
|
|
14148
|
+
const bytes = utils_isBytes(value);
|
|
14149
|
+
const len = value?.length;
|
|
14150
|
+
const needsLen = length !== undefined;
|
|
14151
|
+
if (!bytes || (needsLen && len !== length)) {
|
|
14152
|
+
const prefix = title && `"${title}" `;
|
|
14153
|
+
const ofLen = needsLen ? ` of length ${length}` : '';
|
|
14154
|
+
const got = bytes ? `length=${len}` : `type=${typeof value}`;
|
|
14155
|
+
throw new Error(prefix + 'expected Uint8Array' + ofLen + ', got ' + got);
|
|
14156
|
+
}
|
|
14157
|
+
return value;
|
|
14157
14158
|
}
|
|
14158
14159
|
/** Asserts something is hash */
|
|
14159
|
-
function
|
|
14160
|
+
function utils_ahash(h) {
|
|
14160
14161
|
if (typeof h !== 'function' || typeof h.create !== 'function')
|
|
14161
|
-
throw new Error('Hash
|
|
14162
|
-
|
|
14163
|
-
|
|
14162
|
+
throw new Error('Hash must wrapped by utils.createHasher');
|
|
14163
|
+
utils_anumber(h.outputLen);
|
|
14164
|
+
utils_anumber(h.blockLen);
|
|
14164
14165
|
}
|
|
14165
14166
|
/** Asserts a hash instance has not been destroyed / finished */
|
|
14166
14167
|
function aexists(instance, checkFinished = true) {
|
|
@@ -14171,10 +14172,10 @@ function aexists(instance, checkFinished = true) {
|
|
|
14171
14172
|
}
|
|
14172
14173
|
/** Asserts output is properly-sized byte array */
|
|
14173
14174
|
function aoutput(out, instance) {
|
|
14174
|
-
|
|
14175
|
+
utils_abytes(out, undefined, 'digestInto() output');
|
|
14175
14176
|
const min = instance.outputLen;
|
|
14176
14177
|
if (out.length < min) {
|
|
14177
|
-
throw new Error('digestInto()
|
|
14178
|
+
throw new Error('"digestInto() output" expected to be of length >=' + min);
|
|
14178
14179
|
}
|
|
14179
14180
|
}
|
|
14180
14181
|
/** Cast u8 / u16 / u32 to u8. */
|
|
@@ -14216,8 +14217,6 @@ function byteSwap(word) {
|
|
|
14216
14217
|
const swap8IfBE = (/* unused pure expression or super */ null && (isLE
|
|
14217
14218
|
? (n) => n
|
|
14218
14219
|
: (n) => byteSwap(n)));
|
|
14219
|
-
/** @deprecated */
|
|
14220
|
-
const byteSwapIfBE = (/* unused pure expression or super */ null && (swap8IfBE));
|
|
14221
14220
|
/** In place byte swap for Uint32Array */
|
|
14222
14221
|
function byteSwap32(arr) {
|
|
14223
14222
|
for (let i = 0; i < arr.length; i++) {
|
|
@@ -14238,8 +14237,8 @@ const hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(1
|
|
|
14238
14237
|
* Convert byte array to hex string. Uses built-in function, when available.
|
|
14239
14238
|
* @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'
|
|
14240
14239
|
*/
|
|
14241
|
-
function
|
|
14242
|
-
|
|
14240
|
+
function utils_bytesToHex(bytes) {
|
|
14241
|
+
utils_abytes(bytes);
|
|
14243
14242
|
// @ts-ignore
|
|
14244
14243
|
if (hasHexBuiltin)
|
|
14245
14244
|
return bytes.toHex();
|
|
@@ -14265,7 +14264,7 @@ function asciiToBase16(ch) {
|
|
|
14265
14264
|
* Convert hex string to byte array. Uses built-in function, when available.
|
|
14266
14265
|
* @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])
|
|
14267
14266
|
*/
|
|
14268
|
-
function
|
|
14267
|
+
function utils_hexToBytes(hex) {
|
|
14269
14268
|
if (typeof hex !== 'string')
|
|
14270
14269
|
throw new Error('hex string expected, got ' + typeof hex);
|
|
14271
14270
|
// @ts-ignore
|
|
@@ -14308,6 +14307,7 @@ async function asyncLoop(iters, tick, cb) {
|
|
|
14308
14307
|
}
|
|
14309
14308
|
/**
|
|
14310
14309
|
* Converts string to bytes using UTF8 encoding.
|
|
14310
|
+
* Built-in doesn't validate input to be string: we do the check.
|
|
14311
14311
|
* @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])
|
|
14312
14312
|
*/
|
|
14313
14313
|
function utf8ToBytes(str) {
|
|
@@ -14315,40 +14315,21 @@ function utf8ToBytes(str) {
|
|
|
14315
14315
|
throw new Error('string expected');
|
|
14316
14316
|
return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809
|
|
14317
14317
|
}
|
|
14318
|
-
/**
|
|
14319
|
-
* Converts bytes to string using UTF8 encoding.
|
|
14320
|
-
* @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'
|
|
14321
|
-
*/
|
|
14322
|
-
function bytesToUtf8(bytes) {
|
|
14323
|
-
return new TextDecoder().decode(bytes);
|
|
14324
|
-
}
|
|
14325
|
-
/**
|
|
14326
|
-
* Normalizes (non-hex) string or Uint8Array to Uint8Array.
|
|
14327
|
-
* Warning: when Uint8Array is passed, it would NOT get copied.
|
|
14328
|
-
* Keep in mind for future mutable operations.
|
|
14329
|
-
*/
|
|
14330
|
-
function toBytes(data) {
|
|
14331
|
-
if (typeof data === 'string')
|
|
14332
|
-
data = utf8ToBytes(data);
|
|
14333
|
-
abytes(data);
|
|
14334
|
-
return data;
|
|
14335
|
-
}
|
|
14336
14318
|
/**
|
|
14337
14319
|
* Helper for KDFs: consumes uint8array or string.
|
|
14338
14320
|
* When string is passed, does utf8 decoding, using TextDecoder.
|
|
14339
14321
|
*/
|
|
14340
|
-
function kdfInputToBytes(data) {
|
|
14322
|
+
function kdfInputToBytes(data, errorTitle = '') {
|
|
14341
14323
|
if (typeof data === 'string')
|
|
14342
|
-
|
|
14343
|
-
|
|
14344
|
-
return data;
|
|
14324
|
+
return utf8ToBytes(data);
|
|
14325
|
+
return utils_abytes(data, undefined, errorTitle);
|
|
14345
14326
|
}
|
|
14346
14327
|
/** Copies several Uint8Arrays into one. */
|
|
14347
|
-
function
|
|
14328
|
+
function utils_concatBytes(...arrays) {
|
|
14348
14329
|
let sum = 0;
|
|
14349
14330
|
for (let i = 0; i < arrays.length; i++) {
|
|
14350
14331
|
const a = arrays[i];
|
|
14351
|
-
|
|
14332
|
+
utils_abytes(a);
|
|
14352
14333
|
sum += a.length;
|
|
14353
14334
|
}
|
|
14354
14335
|
const res = new Uint8Array(sum);
|
|
@@ -14359,74 +14340,41 @@ function concatBytes(...arrays) {
|
|
|
14359
14340
|
}
|
|
14360
14341
|
return res;
|
|
14361
14342
|
}
|
|
14343
|
+
/** Merges default options and passed options. */
|
|
14362
14344
|
function checkOpts(defaults, opts) {
|
|
14363
14345
|
if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')
|
|
14364
|
-
throw new Error('options
|
|
14346
|
+
throw new Error('options must be object or undefined');
|
|
14365
14347
|
const merged = Object.assign(defaults, opts);
|
|
14366
14348
|
return merged;
|
|
14367
14349
|
}
|
|
14368
|
-
/**
|
|
14369
|
-
|
|
14370
|
-
|
|
14371
|
-
|
|
14372
|
-
function utils_createHasher(hashCons) {
|
|
14373
|
-
const hashC = (msg) => hashCons().update(toBytes(msg)).digest();
|
|
14374
|
-
const tmp = hashCons();
|
|
14375
|
-
hashC.outputLen = tmp.outputLen;
|
|
14376
|
-
hashC.blockLen = tmp.blockLen;
|
|
14377
|
-
hashC.create = () => hashCons();
|
|
14378
|
-
return hashC;
|
|
14379
|
-
}
|
|
14380
|
-
function createOptHasher(hashCons) {
|
|
14381
|
-
const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();
|
|
14382
|
-
const tmp = hashCons({});
|
|
14383
|
-
hashC.outputLen = tmp.outputLen;
|
|
14384
|
-
hashC.blockLen = tmp.blockLen;
|
|
14385
|
-
hashC.create = (opts) => hashCons(opts);
|
|
14386
|
-
return hashC;
|
|
14387
|
-
}
|
|
14388
|
-
function createXOFer(hashCons) {
|
|
14389
|
-
const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();
|
|
14390
|
-
const tmp = hashCons({});
|
|
14350
|
+
/** Creates function with outputLen, blockLen, create properties from a class constructor. */
|
|
14351
|
+
function utils_createHasher(hashCons, info = {}) {
|
|
14352
|
+
const hashC = (msg, opts) => hashCons(opts).update(msg).digest();
|
|
14353
|
+
const tmp = hashCons(undefined);
|
|
14391
14354
|
hashC.outputLen = tmp.outputLen;
|
|
14392
14355
|
hashC.blockLen = tmp.blockLen;
|
|
14393
14356
|
hashC.create = (opts) => hashCons(opts);
|
|
14394
|
-
|
|
14357
|
+
Object.assign(hashC, info);
|
|
14358
|
+
return Object.freeze(hashC);
|
|
14395
14359
|
}
|
|
14396
|
-
const wrapConstructor = (/* unused pure expression or super */ null && (utils_createHasher));
|
|
14397
|
-
const wrapConstructorWithOpts = (/* unused pure expression or super */ null && (createOptHasher));
|
|
14398
|
-
const wrapXOFConstructorWithOpts = (/* unused pure expression or super */ null && (createXOFer));
|
|
14399
14360
|
/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */
|
|
14400
|
-
function
|
|
14401
|
-
|
|
14402
|
-
|
|
14403
|
-
|
|
14404
|
-
|
|
14405
|
-
|
|
14406
|
-
|
|
14407
|
-
|
|
14408
|
-
|
|
14409
|
-
}
|
|
14361
|
+
function randomBytes(bytesLength = 32) {
|
|
14362
|
+
const cr = typeof globalThis === 'object' ? globalThis.crypto : null;
|
|
14363
|
+
if (typeof cr?.getRandomValues !== 'function')
|
|
14364
|
+
throw new Error('crypto.getRandomValues must be defined');
|
|
14365
|
+
return cr.getRandomValues(new Uint8Array(bytesLength));
|
|
14366
|
+
}
|
|
14367
|
+
/** Creates OID opts for NIST hashes, with prefix 06 09 60 86 48 01 65 03 04 02. */
|
|
14368
|
+
const utils_oidNist = (suffix) => ({
|
|
14369
|
+
oid: Uint8Array.from([0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, suffix]),
|
|
14370
|
+
});
|
|
14410
14371
|
//# sourceMappingURL=utils.js.map
|
|
14411
|
-
;// ./node_modules/@noble/hashes/
|
|
14372
|
+
;// ./node_modules/@noble/hashes/_md.js
|
|
14412
14373
|
/**
|
|
14413
14374
|
* Internal Merkle-Damgard hash utils.
|
|
14414
14375
|
* @module
|
|
14415
14376
|
*/
|
|
14416
14377
|
|
|
14417
|
-
/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */
|
|
14418
|
-
function setBigUint64(view, byteOffset, value, isLE) {
|
|
14419
|
-
if (typeof view.setBigUint64 === 'function')
|
|
14420
|
-
return view.setBigUint64(byteOffset, value, isLE);
|
|
14421
|
-
const _32n = BigInt(32);
|
|
14422
|
-
const _u32_max = BigInt(0xffffffff);
|
|
14423
|
-
const wh = Number((value >> _32n) & _u32_max);
|
|
14424
|
-
const wl = Number(value & _u32_max);
|
|
14425
|
-
const h = isLE ? 4 : 0;
|
|
14426
|
-
const l = isLE ? 0 : 4;
|
|
14427
|
-
view.setUint32(byteOffset + h, wh, isLE);
|
|
14428
|
-
view.setUint32(byteOffset + l, wl, isLE);
|
|
14429
|
-
}
|
|
14430
14378
|
/** Choice: a ? b : c */
|
|
14431
14379
|
function Chi(a, b, c) {
|
|
14432
14380
|
return (a & b) ^ (~a & c);
|
|
@@ -14439,13 +14387,19 @@ function Maj(a, b, c) {
|
|
|
14439
14387
|
* Merkle-Damgard hash construction base class.
|
|
14440
14388
|
* Could be used to create MD5, RIPEMD, SHA1, SHA2.
|
|
14441
14389
|
*/
|
|
14442
|
-
class HashMD
|
|
14390
|
+
class HashMD {
|
|
14391
|
+
blockLen;
|
|
14392
|
+
outputLen;
|
|
14393
|
+
padOffset;
|
|
14394
|
+
isLE;
|
|
14395
|
+
// For partial updates less than block size
|
|
14396
|
+
buffer;
|
|
14397
|
+
view;
|
|
14398
|
+
finished = false;
|
|
14399
|
+
length = 0;
|
|
14400
|
+
pos = 0;
|
|
14401
|
+
destroyed = false;
|
|
14443
14402
|
constructor(blockLen, outputLen, padOffset, isLE) {
|
|
14444
|
-
super();
|
|
14445
|
-
this.finished = false;
|
|
14446
|
-
this.length = 0;
|
|
14447
|
-
this.pos = 0;
|
|
14448
|
-
this.destroyed = false;
|
|
14449
14403
|
this.blockLen = blockLen;
|
|
14450
14404
|
this.outputLen = outputLen;
|
|
14451
14405
|
this.padOffset = padOffset;
|
|
@@ -14455,8 +14409,7 @@ class HashMD extends Hash {
|
|
|
14455
14409
|
}
|
|
14456
14410
|
update(data) {
|
|
14457
14411
|
aexists(this);
|
|
14458
|
-
|
|
14459
|
-
abytes(data);
|
|
14412
|
+
utils_abytes(data);
|
|
14460
14413
|
const { view, buffer, blockLen } = this;
|
|
14461
14414
|
const len = data.length;
|
|
14462
14415
|
for (let pos = 0; pos < len;) {
|
|
@@ -14504,13 +14457,13 @@ class HashMD extends Hash {
|
|
|
14504
14457
|
// Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that
|
|
14505
14458
|
// You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.
|
|
14506
14459
|
// So we just write lowest 64 bits of that value.
|
|
14507
|
-
setBigUint64(
|
|
14460
|
+
view.setBigUint64(blockLen - 8, BigInt(this.length * 8), isLE);
|
|
14508
14461
|
this.process(view, 0);
|
|
14509
14462
|
const oview = createView(out);
|
|
14510
14463
|
const len = this.outputLen;
|
|
14511
|
-
// NOTE: we do division by 4 later, which
|
|
14464
|
+
// NOTE: we do division by 4 later, which must be fused in single op with modulo by JIT
|
|
14512
14465
|
if (len % 4)
|
|
14513
|
-
throw new Error('_sha2: outputLen
|
|
14466
|
+
throw new Error('_sha2: outputLen must be aligned to 32bit');
|
|
14514
14467
|
const outLen = len / 4;
|
|
14515
14468
|
const state = this.get();
|
|
14516
14469
|
if (outLen > state.length)
|
|
@@ -14526,7 +14479,7 @@ class HashMD extends Hash {
|
|
|
14526
14479
|
return res;
|
|
14527
14480
|
}
|
|
14528
14481
|
_cloneInto(to) {
|
|
14529
|
-
to
|
|
14482
|
+
to ||= new this.constructor();
|
|
14530
14483
|
to.set(...this.get());
|
|
14531
14484
|
const { blockLen, buffer, length, finished, destroyed, pos } = this;
|
|
14532
14485
|
to.destroyed = destroyed;
|
|
@@ -14564,7 +14517,7 @@ const SHA512_IV = /* @__PURE__ */ Uint32Array.from([
|
|
|
14564
14517
|
0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,
|
|
14565
14518
|
]);
|
|
14566
14519
|
//# sourceMappingURL=_md.js.map
|
|
14567
|
-
;// ./node_modules/@noble/hashes/
|
|
14520
|
+
;// ./node_modules/@noble/hashes/_u64.js
|
|
14568
14521
|
/**
|
|
14569
14522
|
* Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.
|
|
14570
14523
|
* @todo re-check https://issues.chromium.org/issues/42212588
|
|
@@ -14632,11 +14585,11 @@ const u64 = {
|
|
|
14632
14585
|
};
|
|
14633
14586
|
/* harmony default export */ const _u64 = ((/* unused pure expression or super */ null && (u64)));
|
|
14634
14587
|
//# sourceMappingURL=_u64.js.map
|
|
14635
|
-
;// ./node_modules/@noble/hashes/
|
|
14588
|
+
;// ./node_modules/@noble/hashes/sha2.js
|
|
14636
14589
|
/**
|
|
14637
14590
|
* SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.
|
|
14638
14591
|
* SHA256 is the fastest hash implementable in JS, even faster than Blake3.
|
|
14639
|
-
* Check out [RFC 4634](https://
|
|
14592
|
+
* Check out [RFC 4634](https://www.rfc-editor.org/rfc/rfc4634) and
|
|
14640
14593
|
* [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).
|
|
14641
14594
|
* @module
|
|
14642
14595
|
*/
|
|
@@ -14660,19 +14613,10 @@ const SHA256_K = /* @__PURE__ */ Uint32Array.from([
|
|
|
14660
14613
|
]);
|
|
14661
14614
|
/** Reusable temporary buffer. "W" comes straight from spec. */
|
|
14662
14615
|
const SHA256_W = /* @__PURE__ */ new Uint32Array(64);
|
|
14663
|
-
|
|
14664
|
-
|
|
14616
|
+
/** Internal 32-byte base SHA2 hash class. */
|
|
14617
|
+
class SHA2_32B extends HashMD {
|
|
14618
|
+
constructor(outputLen) {
|
|
14665
14619
|
super(64, outputLen, 8, false);
|
|
14666
|
-
// We cannot use array here since array allows indexing by variable
|
|
14667
|
-
// which means optimizer/compiler cannot use registers.
|
|
14668
|
-
this.A = SHA256_IV[0] | 0;
|
|
14669
|
-
this.B = SHA256_IV[1] | 0;
|
|
14670
|
-
this.C = SHA256_IV[2] | 0;
|
|
14671
|
-
this.D = SHA256_IV[3] | 0;
|
|
14672
|
-
this.E = SHA256_IV[4] | 0;
|
|
14673
|
-
this.F = SHA256_IV[5] | 0;
|
|
14674
|
-
this.G = SHA256_IV[6] | 0;
|
|
14675
|
-
this.H = SHA256_IV[7] | 0;
|
|
14676
14620
|
}
|
|
14677
14621
|
get() {
|
|
14678
14622
|
const { A, B, C, D, E, F, G, H } = this;
|
|
@@ -14735,17 +14679,34 @@ class SHA256 extends HashMD {
|
|
|
14735
14679
|
clean(this.buffer);
|
|
14736
14680
|
}
|
|
14737
14681
|
}
|
|
14738
|
-
|
|
14682
|
+
/** Internal SHA2-256 hash class. */
|
|
14683
|
+
class _SHA256 extends SHA2_32B {
|
|
14684
|
+
// We cannot use array here since array allows indexing by variable
|
|
14685
|
+
// which means optimizer/compiler cannot use registers.
|
|
14686
|
+
A = SHA256_IV[0] | 0;
|
|
14687
|
+
B = SHA256_IV[1] | 0;
|
|
14688
|
+
C = SHA256_IV[2] | 0;
|
|
14689
|
+
D = SHA256_IV[3] | 0;
|
|
14690
|
+
E = SHA256_IV[4] | 0;
|
|
14691
|
+
F = SHA256_IV[5] | 0;
|
|
14692
|
+
G = SHA256_IV[6] | 0;
|
|
14693
|
+
H = SHA256_IV[7] | 0;
|
|
14694
|
+
constructor() {
|
|
14695
|
+
super(32);
|
|
14696
|
+
}
|
|
14697
|
+
}
|
|
14698
|
+
/** Internal SHA2-224 hash class. */
|
|
14699
|
+
class _SHA224 extends SHA2_32B {
|
|
14700
|
+
A = SHA224_IV[0] | 0;
|
|
14701
|
+
B = SHA224_IV[1] | 0;
|
|
14702
|
+
C = SHA224_IV[2] | 0;
|
|
14703
|
+
D = SHA224_IV[3] | 0;
|
|
14704
|
+
E = SHA224_IV[4] | 0;
|
|
14705
|
+
F = SHA224_IV[5] | 0;
|
|
14706
|
+
G = SHA224_IV[6] | 0;
|
|
14707
|
+
H = SHA224_IV[7] | 0;
|
|
14739
14708
|
constructor() {
|
|
14740
14709
|
super(28);
|
|
14741
|
-
this.A = SHA224_IV[0] | 0;
|
|
14742
|
-
this.B = SHA224_IV[1] | 0;
|
|
14743
|
-
this.C = SHA224_IV[2] | 0;
|
|
14744
|
-
this.D = SHA224_IV[3] | 0;
|
|
14745
|
-
this.E = SHA224_IV[4] | 0;
|
|
14746
|
-
this.F = SHA224_IV[5] | 0;
|
|
14747
|
-
this.G = SHA224_IV[6] | 0;
|
|
14748
|
-
this.H = SHA224_IV[7] | 0;
|
|
14749
14710
|
}
|
|
14750
14711
|
}
|
|
14751
14712
|
// SHA2-512 is slower than sha256 in js because u64 operations are slow.
|
|
@@ -14779,28 +14740,10 @@ const SHA512_Kl = /* @__PURE__ */ (() => K512[1])();
|
|
|
14779
14740
|
// Reusable temporary buffers
|
|
14780
14741
|
const SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);
|
|
14781
14742
|
const SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);
|
|
14782
|
-
|
|
14783
|
-
|
|
14743
|
+
/** Internal 64-byte base SHA2 hash class. */
|
|
14744
|
+
class SHA2_64B extends HashMD {
|
|
14745
|
+
constructor(outputLen) {
|
|
14784
14746
|
super(128, outputLen, 16, false);
|
|
14785
|
-
// We cannot use array here since array allows indexing by variable
|
|
14786
|
-
// which means optimizer/compiler cannot use registers.
|
|
14787
|
-
// h -- high 32 bits, l -- low 32 bits
|
|
14788
|
-
this.Ah = SHA512_IV[0] | 0;
|
|
14789
|
-
this.Al = SHA512_IV[1] | 0;
|
|
14790
|
-
this.Bh = SHA512_IV[2] | 0;
|
|
14791
|
-
this.Bl = SHA512_IV[3] | 0;
|
|
14792
|
-
this.Ch = SHA512_IV[4] | 0;
|
|
14793
|
-
this.Cl = SHA512_IV[5] | 0;
|
|
14794
|
-
this.Dh = SHA512_IV[6] | 0;
|
|
14795
|
-
this.Dl = SHA512_IV[7] | 0;
|
|
14796
|
-
this.Eh = SHA512_IV[8] | 0;
|
|
14797
|
-
this.El = SHA512_IV[9] | 0;
|
|
14798
|
-
this.Fh = SHA512_IV[10] | 0;
|
|
14799
|
-
this.Fl = SHA512_IV[11] | 0;
|
|
14800
|
-
this.Gh = SHA512_IV[12] | 0;
|
|
14801
|
-
this.Gl = SHA512_IV[13] | 0;
|
|
14802
|
-
this.Hh = SHA512_IV[14] | 0;
|
|
14803
|
-
this.Hl = SHA512_IV[15] | 0;
|
|
14804
14747
|
}
|
|
14805
14748
|
// prettier-ignore
|
|
14806
14749
|
get() {
|
|
@@ -14904,25 +14847,48 @@ class SHA512 extends HashMD {
|
|
|
14904
14847
|
this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
|
|
14905
14848
|
}
|
|
14906
14849
|
}
|
|
14907
|
-
|
|
14850
|
+
/** Internal SHA2-512 hash class. */
|
|
14851
|
+
class _SHA512 extends SHA2_64B {
|
|
14852
|
+
Ah = SHA512_IV[0] | 0;
|
|
14853
|
+
Al = SHA512_IV[1] | 0;
|
|
14854
|
+
Bh = SHA512_IV[2] | 0;
|
|
14855
|
+
Bl = SHA512_IV[3] | 0;
|
|
14856
|
+
Ch = SHA512_IV[4] | 0;
|
|
14857
|
+
Cl = SHA512_IV[5] | 0;
|
|
14858
|
+
Dh = SHA512_IV[6] | 0;
|
|
14859
|
+
Dl = SHA512_IV[7] | 0;
|
|
14860
|
+
Eh = SHA512_IV[8] | 0;
|
|
14861
|
+
El = SHA512_IV[9] | 0;
|
|
14862
|
+
Fh = SHA512_IV[10] | 0;
|
|
14863
|
+
Fl = SHA512_IV[11] | 0;
|
|
14864
|
+
Gh = SHA512_IV[12] | 0;
|
|
14865
|
+
Gl = SHA512_IV[13] | 0;
|
|
14866
|
+
Hh = SHA512_IV[14] | 0;
|
|
14867
|
+
Hl = SHA512_IV[15] | 0;
|
|
14868
|
+
constructor() {
|
|
14869
|
+
super(64);
|
|
14870
|
+
}
|
|
14871
|
+
}
|
|
14872
|
+
/** Internal SHA2-384 hash class. */
|
|
14873
|
+
class _SHA384 extends SHA2_64B {
|
|
14874
|
+
Ah = SHA384_IV[0] | 0;
|
|
14875
|
+
Al = SHA384_IV[1] | 0;
|
|
14876
|
+
Bh = SHA384_IV[2] | 0;
|
|
14877
|
+
Bl = SHA384_IV[3] | 0;
|
|
14878
|
+
Ch = SHA384_IV[4] | 0;
|
|
14879
|
+
Cl = SHA384_IV[5] | 0;
|
|
14880
|
+
Dh = SHA384_IV[6] | 0;
|
|
14881
|
+
Dl = SHA384_IV[7] | 0;
|
|
14882
|
+
Eh = SHA384_IV[8] | 0;
|
|
14883
|
+
El = SHA384_IV[9] | 0;
|
|
14884
|
+
Fh = SHA384_IV[10] | 0;
|
|
14885
|
+
Fl = SHA384_IV[11] | 0;
|
|
14886
|
+
Gh = SHA384_IV[12] | 0;
|
|
14887
|
+
Gl = SHA384_IV[13] | 0;
|
|
14888
|
+
Hh = SHA384_IV[14] | 0;
|
|
14889
|
+
Hl = SHA384_IV[15] | 0;
|
|
14908
14890
|
constructor() {
|
|
14909
14891
|
super(48);
|
|
14910
|
-
this.Ah = SHA384_IV[0] | 0;
|
|
14911
|
-
this.Al = SHA384_IV[1] | 0;
|
|
14912
|
-
this.Bh = SHA384_IV[2] | 0;
|
|
14913
|
-
this.Bl = SHA384_IV[3] | 0;
|
|
14914
|
-
this.Ch = SHA384_IV[4] | 0;
|
|
14915
|
-
this.Cl = SHA384_IV[5] | 0;
|
|
14916
|
-
this.Dh = SHA384_IV[6] | 0;
|
|
14917
|
-
this.Dl = SHA384_IV[7] | 0;
|
|
14918
|
-
this.Eh = SHA384_IV[8] | 0;
|
|
14919
|
-
this.El = SHA384_IV[9] | 0;
|
|
14920
|
-
this.Fh = SHA384_IV[10] | 0;
|
|
14921
|
-
this.Fl = SHA384_IV[11] | 0;
|
|
14922
|
-
this.Gh = SHA384_IV[12] | 0;
|
|
14923
|
-
this.Gl = SHA384_IV[13] | 0;
|
|
14924
|
-
this.Hh = SHA384_IV[14] | 0;
|
|
14925
|
-
this.Hl = SHA384_IV[15] | 0;
|
|
14926
14892
|
}
|
|
14927
14893
|
}
|
|
14928
14894
|
/**
|
|
@@ -14941,161 +14907,83 @@ const T256_IV = /* @__PURE__ */ Uint32Array.from([
|
|
|
14941
14907
|
0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,
|
|
14942
14908
|
0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,
|
|
14943
14909
|
]);
|
|
14944
|
-
|
|
14910
|
+
/** Internal SHA2-512/224 hash class. */
|
|
14911
|
+
class _SHA512_224 extends SHA2_64B {
|
|
14912
|
+
Ah = T224_IV[0] | 0;
|
|
14913
|
+
Al = T224_IV[1] | 0;
|
|
14914
|
+
Bh = T224_IV[2] | 0;
|
|
14915
|
+
Bl = T224_IV[3] | 0;
|
|
14916
|
+
Ch = T224_IV[4] | 0;
|
|
14917
|
+
Cl = T224_IV[5] | 0;
|
|
14918
|
+
Dh = T224_IV[6] | 0;
|
|
14919
|
+
Dl = T224_IV[7] | 0;
|
|
14920
|
+
Eh = T224_IV[8] | 0;
|
|
14921
|
+
El = T224_IV[9] | 0;
|
|
14922
|
+
Fh = T224_IV[10] | 0;
|
|
14923
|
+
Fl = T224_IV[11] | 0;
|
|
14924
|
+
Gh = T224_IV[12] | 0;
|
|
14925
|
+
Gl = T224_IV[13] | 0;
|
|
14926
|
+
Hh = T224_IV[14] | 0;
|
|
14927
|
+
Hl = T224_IV[15] | 0;
|
|
14945
14928
|
constructor() {
|
|
14946
14929
|
super(28);
|
|
14947
|
-
|
|
14948
|
-
|
|
14949
|
-
|
|
14950
|
-
|
|
14951
|
-
|
|
14952
|
-
|
|
14953
|
-
|
|
14954
|
-
|
|
14955
|
-
|
|
14956
|
-
|
|
14957
|
-
|
|
14958
|
-
|
|
14959
|
-
|
|
14960
|
-
|
|
14961
|
-
|
|
14962
|
-
|
|
14963
|
-
|
|
14964
|
-
|
|
14965
|
-
|
|
14930
|
+
}
|
|
14931
|
+
}
|
|
14932
|
+
/** Internal SHA2-512/256 hash class. */
|
|
14933
|
+
class _SHA512_256 extends SHA2_64B {
|
|
14934
|
+
Ah = T256_IV[0] | 0;
|
|
14935
|
+
Al = T256_IV[1] | 0;
|
|
14936
|
+
Bh = T256_IV[2] | 0;
|
|
14937
|
+
Bl = T256_IV[3] | 0;
|
|
14938
|
+
Ch = T256_IV[4] | 0;
|
|
14939
|
+
Cl = T256_IV[5] | 0;
|
|
14940
|
+
Dh = T256_IV[6] | 0;
|
|
14941
|
+
Dl = T256_IV[7] | 0;
|
|
14942
|
+
Eh = T256_IV[8] | 0;
|
|
14943
|
+
El = T256_IV[9] | 0;
|
|
14944
|
+
Fh = T256_IV[10] | 0;
|
|
14945
|
+
Fl = T256_IV[11] | 0;
|
|
14946
|
+
Gh = T256_IV[12] | 0;
|
|
14947
|
+
Gl = T256_IV[13] | 0;
|
|
14948
|
+
Hh = T256_IV[14] | 0;
|
|
14949
|
+
Hl = T256_IV[15] | 0;
|
|
14966
14950
|
constructor() {
|
|
14967
14951
|
super(32);
|
|
14968
|
-
this.Ah = T256_IV[0] | 0;
|
|
14969
|
-
this.Al = T256_IV[1] | 0;
|
|
14970
|
-
this.Bh = T256_IV[2] | 0;
|
|
14971
|
-
this.Bl = T256_IV[3] | 0;
|
|
14972
|
-
this.Ch = T256_IV[4] | 0;
|
|
14973
|
-
this.Cl = T256_IV[5] | 0;
|
|
14974
|
-
this.Dh = T256_IV[6] | 0;
|
|
14975
|
-
this.Dl = T256_IV[7] | 0;
|
|
14976
|
-
this.Eh = T256_IV[8] | 0;
|
|
14977
|
-
this.El = T256_IV[9] | 0;
|
|
14978
|
-
this.Fh = T256_IV[10] | 0;
|
|
14979
|
-
this.Fl = T256_IV[11] | 0;
|
|
14980
|
-
this.Gh = T256_IV[12] | 0;
|
|
14981
|
-
this.Gl = T256_IV[13] | 0;
|
|
14982
|
-
this.Hh = T256_IV[14] | 0;
|
|
14983
|
-
this.Hl = T256_IV[15] | 0;
|
|
14984
14952
|
}
|
|
14985
14953
|
}
|
|
14986
14954
|
/**
|
|
14987
|
-
* SHA2-256 hash function from RFC 4634.
|
|
14955
|
+
* SHA2-256 hash function from RFC 4634. In JS it's the fastest: even faster than Blake3. Some info:
|
|
14988
14956
|
*
|
|
14989
|
-
*
|
|
14990
|
-
*
|
|
14991
|
-
*
|
|
14957
|
+
* - Trying 2^128 hashes would get 50% chance of collision, using birthday attack.
|
|
14958
|
+
* - BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.
|
|
14959
|
+
* - Each sha256 hash is executing 2^18 bit operations.
|
|
14960
|
+
* - Good 2024 ASICs can do 200Th/sec with 3500 watts of power, corresponding to 2^36 hashes/joule.
|
|
14992
14961
|
*/
|
|
14993
|
-
const sha2_sha256 = /* @__PURE__ */ utils_createHasher(() => new
|
|
14962
|
+
const sha2_sha256 = /* @__PURE__ */ utils_createHasher(() => new _SHA256(),
|
|
14963
|
+
/* @__PURE__ */ utils_oidNist(0x01));
|
|
14994
14964
|
/** SHA2-224 hash function from RFC 4634 */
|
|
14995
|
-
const sha224 = /* @__PURE__ */ (/* unused pure expression or super */ null && (createHasher(() => new
|
|
14965
|
+
const sha224 = /* @__PURE__ */ (/* unused pure expression or super */ null && (createHasher(() => new _SHA224(),
|
|
14966
|
+
/* @__PURE__ */ oidNist(0x04))));
|
|
14996
14967
|
/** SHA2-512 hash function from RFC 4634. */
|
|
14997
|
-
const sha512 = /* @__PURE__ */ (/* unused pure expression or super */ null && (createHasher(() => new
|
|
14968
|
+
const sha512 = /* @__PURE__ */ (/* unused pure expression or super */ null && (createHasher(() => new _SHA512(),
|
|
14969
|
+
/* @__PURE__ */ oidNist(0x03))));
|
|
14998
14970
|
/** SHA2-384 hash function from RFC 4634. */
|
|
14999
|
-
const sha384 = /* @__PURE__ */ (/* unused pure expression or super */ null && (createHasher(() => new
|
|
14971
|
+
const sha384 = /* @__PURE__ */ (/* unused pure expression or super */ null && (createHasher(() => new _SHA384(),
|
|
14972
|
+
/* @__PURE__ */ oidNist(0x02))));
|
|
15000
14973
|
/**
|
|
15001
14974
|
* SHA2-512/256 "truncated" hash function, with improved resistance to length extension attacks.
|
|
15002
14975
|
* See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).
|
|
15003
14976
|
*/
|
|
15004
|
-
const sha512_256 = /* @__PURE__ */ (/* unused pure expression or super */ null && (createHasher(() => new
|
|
14977
|
+
const sha512_256 = /* @__PURE__ */ (/* unused pure expression or super */ null && (createHasher(() => new _SHA512_256(),
|
|
14978
|
+
/* @__PURE__ */ oidNist(0x06))));
|
|
15005
14979
|
/**
|
|
15006
14980
|
* SHA2-512/224 "truncated" hash function, with improved resistance to length extension attacks.
|
|
15007
14981
|
* See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).
|
|
15008
14982
|
*/
|
|
15009
|
-
const sha512_224 = /* @__PURE__ */ (/* unused pure expression or super */ null && (createHasher(() => new
|
|
14983
|
+
const sha512_224 = /* @__PURE__ */ (/* unused pure expression or super */ null && (createHasher(() => new _SHA512_224(),
|
|
14984
|
+
/* @__PURE__ */ oidNist(0x05))));
|
|
15010
14985
|
//# sourceMappingURL=sha2.js.map
|
|
15011
|
-
;// ./node_modules/@noble/
|
|
15012
|
-
/**
|
|
15013
|
-
* HMAC: RFC2104 message authentication code.
|
|
15014
|
-
* @module
|
|
15015
|
-
*/
|
|
15016
|
-
|
|
15017
|
-
class HMAC extends Hash {
|
|
15018
|
-
constructor(hash, _key) {
|
|
15019
|
-
super();
|
|
15020
|
-
this.finished = false;
|
|
15021
|
-
this.destroyed = false;
|
|
15022
|
-
ahash(hash);
|
|
15023
|
-
const key = toBytes(_key);
|
|
15024
|
-
this.iHash = hash.create();
|
|
15025
|
-
if (typeof this.iHash.update !== 'function')
|
|
15026
|
-
throw new Error('Expected instance of class which extends utils.Hash');
|
|
15027
|
-
this.blockLen = this.iHash.blockLen;
|
|
15028
|
-
this.outputLen = this.iHash.outputLen;
|
|
15029
|
-
const blockLen = this.blockLen;
|
|
15030
|
-
const pad = new Uint8Array(blockLen);
|
|
15031
|
-
// blockLen can be bigger than outputLen
|
|
15032
|
-
pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);
|
|
15033
|
-
for (let i = 0; i < pad.length; i++)
|
|
15034
|
-
pad[i] ^= 0x36;
|
|
15035
|
-
this.iHash.update(pad);
|
|
15036
|
-
// By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone
|
|
15037
|
-
this.oHash = hash.create();
|
|
15038
|
-
// Undo internal XOR && apply outer XOR
|
|
15039
|
-
for (let i = 0; i < pad.length; i++)
|
|
15040
|
-
pad[i] ^= 0x36 ^ 0x5c;
|
|
15041
|
-
this.oHash.update(pad);
|
|
15042
|
-
clean(pad);
|
|
15043
|
-
}
|
|
15044
|
-
update(buf) {
|
|
15045
|
-
aexists(this);
|
|
15046
|
-
this.iHash.update(buf);
|
|
15047
|
-
return this;
|
|
15048
|
-
}
|
|
15049
|
-
digestInto(out) {
|
|
15050
|
-
aexists(this);
|
|
15051
|
-
abytes(out, this.outputLen);
|
|
15052
|
-
this.finished = true;
|
|
15053
|
-
this.iHash.digestInto(out);
|
|
15054
|
-
this.oHash.update(out);
|
|
15055
|
-
this.oHash.digestInto(out);
|
|
15056
|
-
this.destroy();
|
|
15057
|
-
}
|
|
15058
|
-
digest() {
|
|
15059
|
-
const out = new Uint8Array(this.oHash.outputLen);
|
|
15060
|
-
this.digestInto(out);
|
|
15061
|
-
return out;
|
|
15062
|
-
}
|
|
15063
|
-
_cloneInto(to) {
|
|
15064
|
-
// Create new instance without calling constructor since key already in state and we don't know it.
|
|
15065
|
-
to || (to = Object.create(Object.getPrototypeOf(this), {}));
|
|
15066
|
-
const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;
|
|
15067
|
-
to = to;
|
|
15068
|
-
to.finished = finished;
|
|
15069
|
-
to.destroyed = destroyed;
|
|
15070
|
-
to.blockLen = blockLen;
|
|
15071
|
-
to.outputLen = outputLen;
|
|
15072
|
-
to.oHash = oHash._cloneInto(to.oHash);
|
|
15073
|
-
to.iHash = iHash._cloneInto(to.iHash);
|
|
15074
|
-
return to;
|
|
15075
|
-
}
|
|
15076
|
-
clone() {
|
|
15077
|
-
return this._cloneInto();
|
|
15078
|
-
}
|
|
15079
|
-
destroy() {
|
|
15080
|
-
this.destroyed = true;
|
|
15081
|
-
this.oHash.destroy();
|
|
15082
|
-
this.iHash.destroy();
|
|
15083
|
-
}
|
|
15084
|
-
}
|
|
15085
|
-
/**
|
|
15086
|
-
* HMAC: RFC2104 message authentication code.
|
|
15087
|
-
* @param hash - function that would be used e.g. sha256
|
|
15088
|
-
* @param key - message key
|
|
15089
|
-
* @param message - message data
|
|
15090
|
-
* @example
|
|
15091
|
-
* import { hmac } from '@noble/hashes/hmac';
|
|
15092
|
-
* import { sha256 } from '@noble/hashes/sha2';
|
|
15093
|
-
* const mac1 = hmac(sha256, 'key', 'message');
|
|
15094
|
-
*/
|
|
15095
|
-
const hmac_hmac = (hash, key, message) => new HMAC(hash, key).update(message).digest();
|
|
15096
|
-
hmac_hmac.create = (hash, key) => new HMAC(hash, key);
|
|
15097
|
-
//# sourceMappingURL=hmac.js.map
|
|
15098
|
-
;// ./node_modules/@noble/curves/esm/utils.js
|
|
14986
|
+
;// ./node_modules/@noble/curves/utils.js
|
|
15099
14987
|
/**
|
|
15100
14988
|
* Hex, bytes and number utilities.
|
|
15101
14989
|
* @module
|
|
@@ -15105,35 +14993,31 @@ hmac_hmac.create = (hash, key) => new HMAC(hash, key);
|
|
|
15105
14993
|
|
|
15106
14994
|
const _0n = /* @__PURE__ */ BigInt(0);
|
|
15107
14995
|
const _1n = /* @__PURE__ */ BigInt(1);
|
|
15108
|
-
function
|
|
15109
|
-
if (typeof value !== 'boolean')
|
|
15110
|
-
throw new Error(title + ' boolean expected, got ' + value);
|
|
15111
|
-
}
|
|
15112
|
-
// tmp name until v2
|
|
15113
|
-
function _abool2(value, title = '') {
|
|
14996
|
+
function utils_abool(value, title = '') {
|
|
15114
14997
|
if (typeof value !== 'boolean') {
|
|
15115
|
-
const prefix = title && `"${title}"`;
|
|
14998
|
+
const prefix = title && `"${title}" `;
|
|
15116
14999
|
throw new Error(prefix + 'expected boolean, got type=' + typeof value);
|
|
15117
15000
|
}
|
|
15118
15001
|
return value;
|
|
15119
15002
|
}
|
|
15120
|
-
//
|
|
15121
|
-
|
|
15122
|
-
|
|
15123
|
-
|
|
15124
|
-
|
|
15125
|
-
|
|
15126
|
-
|
|
15003
|
+
// Used in weierstrass, der
|
|
15004
|
+
function abignumber(n) {
|
|
15005
|
+
if (typeof n === 'bigint') {
|
|
15006
|
+
if (!isPosBig(n))
|
|
15007
|
+
throw new Error('positive bigint expected, got ' + n);
|
|
15008
|
+
}
|
|
15009
|
+
else
|
|
15010
|
+
utils_anumber(n);
|
|
15011
|
+
return n;
|
|
15012
|
+
}
|
|
15013
|
+
function asafenumber(value, title = '') {
|
|
15014
|
+
if (!Number.isSafeInteger(value)) {
|
|
15127
15015
|
const prefix = title && `"${title}" `;
|
|
15128
|
-
|
|
15129
|
-
const got = bytes ? `length=${len}` : `type=${typeof value}`;
|
|
15130
|
-
throw new Error(prefix + 'expected Uint8Array' + ofLen + ', got ' + got);
|
|
15016
|
+
throw new Error(prefix + 'expected safe integer, got type=' + typeof value);
|
|
15131
15017
|
}
|
|
15132
|
-
return value;
|
|
15133
15018
|
}
|
|
15134
|
-
// Used in weierstrass, der
|
|
15135
15019
|
function numberToHexUnpadded(num) {
|
|
15136
|
-
const hex = num.toString(16);
|
|
15020
|
+
const hex = abignumber(num).toString(16);
|
|
15137
15021
|
return hex.length & 1 ? '0' + hex : hex;
|
|
15138
15022
|
}
|
|
15139
15023
|
function hexToNumber(hex) {
|
|
@@ -15143,53 +15027,25 @@ function hexToNumber(hex) {
|
|
|
15143
15027
|
}
|
|
15144
15028
|
// BE: Big Endian, LE: Little Endian
|
|
15145
15029
|
function utils_bytesToNumberBE(bytes) {
|
|
15146
|
-
return hexToNumber(
|
|
15030
|
+
return hexToNumber(utils_bytesToHex(bytes));
|
|
15147
15031
|
}
|
|
15148
|
-
function
|
|
15149
|
-
|
|
15150
|
-
return hexToNumber(bytesToHex(Uint8Array.from(bytes).reverse()));
|
|
15032
|
+
function bytesToNumberLE(bytes) {
|
|
15033
|
+
return hexToNumber(utils_bytesToHex(copyBytes(utils_abytes(bytes)).reverse()));
|
|
15151
15034
|
}
|
|
15152
15035
|
function numberToBytesBE(n, len) {
|
|
15153
|
-
|
|
15036
|
+
utils_anumber(len);
|
|
15037
|
+
n = abignumber(n);
|
|
15038
|
+
const res = utils_hexToBytes(n.toString(16).padStart(len * 2, '0'));
|
|
15039
|
+
if (res.length !== len)
|
|
15040
|
+
throw new Error('number too large');
|
|
15041
|
+
return res;
|
|
15154
15042
|
}
|
|
15155
15043
|
function numberToBytesLE(n, len) {
|
|
15156
15044
|
return numberToBytesBE(n, len).reverse();
|
|
15157
15045
|
}
|
|
15158
15046
|
// Unpadded, rarely used
|
|
15159
15047
|
function numberToVarBytesBE(n) {
|
|
15160
|
-
return hexToBytes_(numberToHexUnpadded(n));
|
|
15161
|
-
}
|
|
15162
|
-
/**
|
|
15163
|
-
* Takes hex string or Uint8Array, converts to Uint8Array.
|
|
15164
|
-
* Validates output length.
|
|
15165
|
-
* Will throw error for other types.
|
|
15166
|
-
* @param title descriptive title for an error e.g. 'secret key'
|
|
15167
|
-
* @param hex hex string or Uint8Array
|
|
15168
|
-
* @param expectedLength optional, will compare to result array's length
|
|
15169
|
-
* @returns
|
|
15170
|
-
*/
|
|
15171
|
-
function utils_ensureBytes(title, hex, expectedLength) {
|
|
15172
|
-
let res;
|
|
15173
|
-
if (typeof hex === 'string') {
|
|
15174
|
-
try {
|
|
15175
|
-
res = hexToBytes(hex);
|
|
15176
|
-
}
|
|
15177
|
-
catch (e) {
|
|
15178
|
-
throw new Error(title + ' must be hex string or Uint8Array, cause: ' + e);
|
|
15179
|
-
}
|
|
15180
|
-
}
|
|
15181
|
-
else if (isBytes(hex)) {
|
|
15182
|
-
// Uint8Array.from() instead of hash.slice() because node.js Buffer
|
|
15183
|
-
// is instance of Uint8Array, and its slice() creates **mutable** copy
|
|
15184
|
-
res = Uint8Array.from(hex);
|
|
15185
|
-
}
|
|
15186
|
-
else {
|
|
15187
|
-
throw new Error(title + ' must be hex string or Uint8Array');
|
|
15188
|
-
}
|
|
15189
|
-
const len = res.length;
|
|
15190
|
-
if (typeof expectedLength === 'number' && len !== expectedLength)
|
|
15191
|
-
throw new Error(title + ' of length ' + expectedLength + ' expected, got ' + len);
|
|
15192
|
-
return res;
|
|
15048
|
+
return hexToBytes_(numberToHexUnpadded(abignumber(n)));
|
|
15193
15049
|
}
|
|
15194
15050
|
// Compares 2 u8a-s in kinda constant time
|
|
15195
15051
|
function equalBytes(a, b) {
|
|
@@ -15210,7 +15066,7 @@ function copyBytes(bytes) {
|
|
|
15210
15066
|
/**
|
|
15211
15067
|
* Decodes 7-bit ASCII string to Uint8Array, throws on non-ascii symbols
|
|
15212
15068
|
* Should be safe to use for things expected to be ASCII.
|
|
15213
|
-
* Returns exact same result as
|
|
15069
|
+
* Returns exact same result as `TextEncoder` for ASCII or throws.
|
|
15214
15070
|
*/
|
|
15215
15071
|
function asciiToBytes(ascii) {
|
|
15216
15072
|
return Uint8Array.from(ascii, (c, i) => {
|
|
@@ -15221,18 +15077,9 @@ function asciiToBytes(ascii) {
|
|
|
15221
15077
|
return charCode;
|
|
15222
15078
|
});
|
|
15223
15079
|
}
|
|
15224
|
-
/**
|
|
15225
|
-
* @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])
|
|
15226
|
-
*/
|
|
15227
|
-
// export const utf8ToBytes: typeof utf8ToBytes_ = utf8ToBytes_;
|
|
15228
|
-
/**
|
|
15229
|
-
* Converts bytes to string using UTF8 encoding.
|
|
15230
|
-
* @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'
|
|
15231
|
-
*/
|
|
15232
|
-
// export const bytesToUtf8: typeof bytesToUtf8_ = bytesToUtf8_;
|
|
15233
15080
|
// Is positive bigint
|
|
15234
15081
|
const isPosBig = (n) => typeof n === 'bigint' && _0n <= n;
|
|
15235
|
-
function
|
|
15082
|
+
function inRange(n, min, max) {
|
|
15236
15083
|
return isPosBig(n) && isPosBig(min) && isPosBig(max) && min <= n && n < max;
|
|
15237
15084
|
}
|
|
15238
15085
|
/**
|
|
@@ -15240,13 +15087,13 @@ function utils_inRange(n, min, max) {
|
|
|
15240
15087
|
* @example
|
|
15241
15088
|
* aInRange('x', x, 1n, 256n); // would assume x is in (1n..255n)
|
|
15242
15089
|
*/
|
|
15243
|
-
function
|
|
15090
|
+
function utils_aInRange(title, n, min, max) {
|
|
15244
15091
|
// Why min <= n < max and not a (min < n < max) OR b (min <= n <= max)?
|
|
15245
15092
|
// consider P=256n, min=0n, max=P
|
|
15246
15093
|
// - a for min=0 would require -1: `inRange('x', x, -1n, P)`
|
|
15247
15094
|
// - b would commonly require subtraction: `inRange('x', x, 0n, P - 1n)`
|
|
15248
15095
|
// - our way is the cleanest: `inRange('x', x, 0n, P)
|
|
15249
|
-
if (!
|
|
15096
|
+
if (!inRange(n, min, max))
|
|
15250
15097
|
throw new Error('expected valid ' + title + ': ' + min + ' <= n < ' + max + ', got ' + n);
|
|
15251
15098
|
}
|
|
15252
15099
|
// Bit operations
|
|
@@ -15255,7 +15102,7 @@ function aInRange(title, n, min, max) {
|
|
|
15255
15102
|
* Same as `n.toString(2).length`
|
|
15256
15103
|
* TODO: merge with nLength in modular
|
|
15257
15104
|
*/
|
|
15258
|
-
function
|
|
15105
|
+
function utils_bitLen(n) {
|
|
15259
15106
|
let len;
|
|
15260
15107
|
for (len = 0; n > _0n; n >>= _1n, len += 1)
|
|
15261
15108
|
;
|
|
@@ -15287,16 +15134,17 @@ const utils_bitMask = (n) => (_1n << BigInt(n)) - _1n;
|
|
|
15287
15134
|
* const drbg = createHmacDRBG<Key>(32, 32, hmac);
|
|
15288
15135
|
* drbg(seed, bytesToKey); // bytesToKey must return Key or undefined
|
|
15289
15136
|
*/
|
|
15290
|
-
function
|
|
15291
|
-
|
|
15292
|
-
|
|
15293
|
-
if (typeof qByteLen !== 'number' || qByteLen < 2)
|
|
15294
|
-
throw new Error('qByteLen must be a number');
|
|
15137
|
+
function utils_createHmacDrbg(hashLen, qByteLen, hmacFn) {
|
|
15138
|
+
anumber(hashLen, 'hashLen');
|
|
15139
|
+
anumber(qByteLen, 'qByteLen');
|
|
15295
15140
|
if (typeof hmacFn !== 'function')
|
|
15296
15141
|
throw new Error('hmacFn must be a function');
|
|
15297
|
-
// Step B, Step C: set hashLen to 8*ceil(hlen/8)
|
|
15298
15142
|
const u8n = (len) => new Uint8Array(len); // creates Uint8Array
|
|
15299
|
-
const
|
|
15143
|
+
const NULL = Uint8Array.of();
|
|
15144
|
+
const byte0 = Uint8Array.of(0x00);
|
|
15145
|
+
const byte1 = Uint8Array.of(0x01);
|
|
15146
|
+
const _maxDrbgIters = 1000;
|
|
15147
|
+
// Step B, Step C: set hashLen to 8*ceil(hlen/8)
|
|
15300
15148
|
let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.
|
|
15301
15149
|
let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same
|
|
15302
15150
|
let i = 0; // Iterations counter, will throw when over 1000
|
|
@@ -15305,20 +15153,20 @@ function createHmacDrbg(hashLen, qByteLen, hmacFn) {
|
|
|
15305
15153
|
k.fill(0);
|
|
15306
15154
|
i = 0;
|
|
15307
15155
|
};
|
|
15308
|
-
const h = (...
|
|
15309
|
-
const reseed = (seed =
|
|
15156
|
+
const h = (...msgs) => hmacFn(k, concatBytes_(v, ...msgs)); // hmac(k)(v, ...values)
|
|
15157
|
+
const reseed = (seed = NULL) => {
|
|
15310
15158
|
// HMAC-DRBG reseed() function. Steps D-G
|
|
15311
|
-
k = h(
|
|
15159
|
+
k = h(byte0, seed); // k = hmac(k || v || 0x00 || seed)
|
|
15312
15160
|
v = h(); // v = hmac(k || v)
|
|
15313
15161
|
if (seed.length === 0)
|
|
15314
15162
|
return;
|
|
15315
|
-
k = h(
|
|
15163
|
+
k = h(byte1, seed); // k = hmac(k || v || 0x01 || seed)
|
|
15316
15164
|
v = h(); // v = hmac(k || v)
|
|
15317
15165
|
};
|
|
15318
15166
|
const gen = () => {
|
|
15319
15167
|
// HMAC-DRBG generate() function
|
|
15320
|
-
if (i++ >=
|
|
15321
|
-
throw new Error('drbg: tried
|
|
15168
|
+
if (i++ >= _maxDrbgIters)
|
|
15169
|
+
throw new Error('drbg: tried max amount of iterations');
|
|
15322
15170
|
let len = 0;
|
|
15323
15171
|
const out = [];
|
|
15324
15172
|
while (len < qByteLen) {
|
|
@@ -15327,7 +15175,7 @@ function createHmacDrbg(hashLen, qByteLen, hmacFn) {
|
|
|
15327
15175
|
out.push(sl);
|
|
15328
15176
|
len += v.length;
|
|
15329
15177
|
}
|
|
15330
|
-
return
|
|
15178
|
+
return concatBytes_(...out);
|
|
15331
15179
|
};
|
|
15332
15180
|
const genUntil = (seed, pred) => {
|
|
15333
15181
|
reset();
|
|
@@ -15340,49 +15188,7 @@ function createHmacDrbg(hashLen, qByteLen, hmacFn) {
|
|
|
15340
15188
|
};
|
|
15341
15189
|
return genUntil;
|
|
15342
15190
|
}
|
|
15343
|
-
|
|
15344
|
-
const validatorFns = {
|
|
15345
|
-
bigint: (val) => typeof val === 'bigint',
|
|
15346
|
-
function: (val) => typeof val === 'function',
|
|
15347
|
-
boolean: (val) => typeof val === 'boolean',
|
|
15348
|
-
string: (val) => typeof val === 'string',
|
|
15349
|
-
stringOrUint8Array: (val) => typeof val === 'string' || isBytes(val),
|
|
15350
|
-
isSafeInteger: (val) => Number.isSafeInteger(val),
|
|
15351
|
-
array: (val) => Array.isArray(val),
|
|
15352
|
-
field: (val, object) => object.Fp.isValid(val),
|
|
15353
|
-
hash: (val) => typeof val === 'function' && Number.isSafeInteger(val.outputLen),
|
|
15354
|
-
};
|
|
15355
|
-
// type Record<K extends string | number | symbol, T> = { [P in K]: T; }
|
|
15356
|
-
function utils_validateObject(object, validators, optValidators = {}) {
|
|
15357
|
-
const checkField = (fieldName, type, isOptional) => {
|
|
15358
|
-
const checkVal = validatorFns[type];
|
|
15359
|
-
if (typeof checkVal !== 'function')
|
|
15360
|
-
throw new Error('invalid validator function');
|
|
15361
|
-
const val = object[fieldName];
|
|
15362
|
-
if (isOptional && val === undefined)
|
|
15363
|
-
return;
|
|
15364
|
-
if (!checkVal(val, object)) {
|
|
15365
|
-
throw new Error('param ' + String(fieldName) + ' is invalid. Expected ' + type + ', got ' + val);
|
|
15366
|
-
}
|
|
15367
|
-
};
|
|
15368
|
-
for (const [fieldName, type] of Object.entries(validators))
|
|
15369
|
-
checkField(fieldName, type, false);
|
|
15370
|
-
for (const [fieldName, type] of Object.entries(optValidators))
|
|
15371
|
-
checkField(fieldName, type, true);
|
|
15372
|
-
return object;
|
|
15373
|
-
}
|
|
15374
|
-
// validate type tests
|
|
15375
|
-
// const o: { a: number; b: number; c: number } = { a: 1, b: 5, c: 6 };
|
|
15376
|
-
// const z0 = validateObject(o, { a: 'isSafeInteger' }, { c: 'bigint' }); // Ok!
|
|
15377
|
-
// // Should fail type-check
|
|
15378
|
-
// const z1 = validateObject(o, { a: 'tmp' }, { c: 'zz' });
|
|
15379
|
-
// const z2 = validateObject(o, { a: 'isSafeInteger' }, { c: 'zz' });
|
|
15380
|
-
// const z3 = validateObject(o, { test: 'boolean', z: 'bug' });
|
|
15381
|
-
// const z4 = validateObject(o, { a: 'boolean', z: 'bug' });
|
|
15382
|
-
function isHash(val) {
|
|
15383
|
-
return typeof val === 'function' && Number.isSafeInteger(val.outputLen);
|
|
15384
|
-
}
|
|
15385
|
-
function _validateObject(object, fields, optFields = {}) {
|
|
15191
|
+
function utils_validateObject(object, fields = {}, optFields = {}) {
|
|
15386
15192
|
if (!object || typeof object !== 'object')
|
|
15387
15193
|
throw new Error('expected valid options object');
|
|
15388
15194
|
function checkField(fieldName, expectedType, isOpt) {
|
|
@@ -15393,8 +15199,9 @@ function _validateObject(object, fields, optFields = {}) {
|
|
|
15393
15199
|
if (current !== expectedType || val === null)
|
|
15394
15200
|
throw new Error(`param "${fieldName}" is invalid: expected ${expectedType}, got ${current}`);
|
|
15395
15201
|
}
|
|
15396
|
-
Object.entries(
|
|
15397
|
-
|
|
15202
|
+
const iter = (f, isOpt) => Object.entries(f).forEach(([k, v]) => checkField(k, v, isOpt));
|
|
15203
|
+
iter(fields, false);
|
|
15204
|
+
iter(optFields, true);
|
|
15398
15205
|
}
|
|
15399
15206
|
/**
|
|
15400
15207
|
* throws not implemented error
|
|
@@ -15418,7 +15225,7 @@ function memoized(fn) {
|
|
|
15418
15225
|
};
|
|
15419
15226
|
}
|
|
15420
15227
|
//# sourceMappingURL=utils.js.map
|
|
15421
|
-
;// ./node_modules/@noble/curves/
|
|
15228
|
+
;// ./node_modules/@noble/curves/abstract/modular.js
|
|
15422
15229
|
/**
|
|
15423
15230
|
* Utils for modular division and fields.
|
|
15424
15231
|
* Field over 11 is a finite (Galois) field is integer number operations `mod 11`.
|
|
@@ -15427,12 +15234,14 @@ function memoized(fn) {
|
|
|
15427
15234
|
*/
|
|
15428
15235
|
/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
15429
15236
|
|
|
15237
|
+
// Numbers aren't used in x25519 / x448 builds
|
|
15430
15238
|
// prettier-ignore
|
|
15431
|
-
const modular_0n =
|
|
15239
|
+
const modular_0n = /* @__PURE__ */ BigInt(0), modular_1n = /* @__PURE__ */ BigInt(1), _2n = /* @__PURE__ */ BigInt(2);
|
|
15432
15240
|
// prettier-ignore
|
|
15433
|
-
const
|
|
15241
|
+
const _3n = /* @__PURE__ */ BigInt(3), _4n = /* @__PURE__ */ BigInt(4), _5n = /* @__PURE__ */ BigInt(5);
|
|
15434
15242
|
// prettier-ignore
|
|
15435
|
-
const
|
|
15243
|
+
const _7n = /* @__PURE__ */ BigInt(7), _8n = /* @__PURE__ */ BigInt(8), _9n = /* @__PURE__ */ BigInt(9);
|
|
15244
|
+
const _16n = /* @__PURE__ */ BigInt(16);
|
|
15436
15245
|
// Calculates a modulo b
|
|
15437
15246
|
function mod(a, b) {
|
|
15438
15247
|
const result = a % b;
|
|
@@ -15639,7 +15448,6 @@ const FIELD_FIELDS = [
|
|
|
15639
15448
|
function modular_validateField(field) {
|
|
15640
15449
|
const initial = {
|
|
15641
15450
|
ORDER: 'bigint',
|
|
15642
|
-
MASK: 'bigint',
|
|
15643
15451
|
BYTES: 'number',
|
|
15644
15452
|
BITS: 'number',
|
|
15645
15453
|
};
|
|
@@ -15647,7 +15455,7 @@ function modular_validateField(field) {
|
|
|
15647
15455
|
map[val] = 'function';
|
|
15648
15456
|
return map;
|
|
15649
15457
|
}, initial);
|
|
15650
|
-
|
|
15458
|
+
utils_validateObject(field, opts);
|
|
15651
15459
|
// const max = 16384;
|
|
15652
15460
|
// if (field.BYTES < 1 || field.BYTES > max) throw new Error('invalid field');
|
|
15653
15461
|
// if (field.BITS < 1 || field.BITS > 8 * max) throw new Error('invalid field');
|
|
@@ -15731,14 +15539,151 @@ function FpIsSquare(Fp, n) {
|
|
|
15731
15539
|
return l === 1;
|
|
15732
15540
|
}
|
|
15733
15541
|
// CURVE.n lengths
|
|
15734
|
-
function
|
|
15542
|
+
function nLength(n, nBitLength) {
|
|
15735
15543
|
// Bit size, byte size of CURVE.n
|
|
15736
15544
|
if (nBitLength !== undefined)
|
|
15737
|
-
|
|
15545
|
+
utils_anumber(nBitLength);
|
|
15738
15546
|
const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length;
|
|
15739
15547
|
const nByteLength = Math.ceil(_nBitLength / 8);
|
|
15740
15548
|
return { nBitLength: _nBitLength, nByteLength };
|
|
15741
15549
|
}
|
|
15550
|
+
class _Field {
|
|
15551
|
+
ORDER;
|
|
15552
|
+
BITS;
|
|
15553
|
+
BYTES;
|
|
15554
|
+
isLE;
|
|
15555
|
+
ZERO = modular_0n;
|
|
15556
|
+
ONE = modular_1n;
|
|
15557
|
+
_lengths;
|
|
15558
|
+
_sqrt; // cached sqrt
|
|
15559
|
+
_mod;
|
|
15560
|
+
constructor(ORDER, opts = {}) {
|
|
15561
|
+
if (ORDER <= modular_0n)
|
|
15562
|
+
throw new Error('invalid field: expected ORDER > 0, got ' + ORDER);
|
|
15563
|
+
let _nbitLength = undefined;
|
|
15564
|
+
this.isLE = false;
|
|
15565
|
+
if (opts != null && typeof opts === 'object') {
|
|
15566
|
+
if (typeof opts.BITS === 'number')
|
|
15567
|
+
_nbitLength = opts.BITS;
|
|
15568
|
+
if (typeof opts.sqrt === 'function')
|
|
15569
|
+
this.sqrt = opts.sqrt;
|
|
15570
|
+
if (typeof opts.isLE === 'boolean')
|
|
15571
|
+
this.isLE = opts.isLE;
|
|
15572
|
+
if (opts.allowedLengths)
|
|
15573
|
+
this._lengths = opts.allowedLengths?.slice();
|
|
15574
|
+
if (typeof opts.modFromBytes === 'boolean')
|
|
15575
|
+
this._mod = opts.modFromBytes;
|
|
15576
|
+
}
|
|
15577
|
+
const { nBitLength, nByteLength } = nLength(ORDER, _nbitLength);
|
|
15578
|
+
if (nByteLength > 2048)
|
|
15579
|
+
throw new Error('invalid field: expected ORDER of <= 2048 bytes');
|
|
15580
|
+
this.ORDER = ORDER;
|
|
15581
|
+
this.BITS = nBitLength;
|
|
15582
|
+
this.BYTES = nByteLength;
|
|
15583
|
+
this._sqrt = undefined;
|
|
15584
|
+
Object.preventExtensions(this);
|
|
15585
|
+
}
|
|
15586
|
+
create(num) {
|
|
15587
|
+
return mod(num, this.ORDER);
|
|
15588
|
+
}
|
|
15589
|
+
isValid(num) {
|
|
15590
|
+
if (typeof num !== 'bigint')
|
|
15591
|
+
throw new Error('invalid field element: expected bigint, got ' + typeof num);
|
|
15592
|
+
return modular_0n <= num && num < this.ORDER; // 0 is valid element, but it's not invertible
|
|
15593
|
+
}
|
|
15594
|
+
is0(num) {
|
|
15595
|
+
return num === modular_0n;
|
|
15596
|
+
}
|
|
15597
|
+
// is valid and invertible
|
|
15598
|
+
isValidNot0(num) {
|
|
15599
|
+
return !this.is0(num) && this.isValid(num);
|
|
15600
|
+
}
|
|
15601
|
+
isOdd(num) {
|
|
15602
|
+
return (num & modular_1n) === modular_1n;
|
|
15603
|
+
}
|
|
15604
|
+
neg(num) {
|
|
15605
|
+
return mod(-num, this.ORDER);
|
|
15606
|
+
}
|
|
15607
|
+
eql(lhs, rhs) {
|
|
15608
|
+
return lhs === rhs;
|
|
15609
|
+
}
|
|
15610
|
+
sqr(num) {
|
|
15611
|
+
return mod(num * num, this.ORDER);
|
|
15612
|
+
}
|
|
15613
|
+
add(lhs, rhs) {
|
|
15614
|
+
return mod(lhs + rhs, this.ORDER);
|
|
15615
|
+
}
|
|
15616
|
+
sub(lhs, rhs) {
|
|
15617
|
+
return mod(lhs - rhs, this.ORDER);
|
|
15618
|
+
}
|
|
15619
|
+
mul(lhs, rhs) {
|
|
15620
|
+
return mod(lhs * rhs, this.ORDER);
|
|
15621
|
+
}
|
|
15622
|
+
pow(num, power) {
|
|
15623
|
+
return FpPow(this, num, power);
|
|
15624
|
+
}
|
|
15625
|
+
div(lhs, rhs) {
|
|
15626
|
+
return mod(lhs * invert(rhs, this.ORDER), this.ORDER);
|
|
15627
|
+
}
|
|
15628
|
+
// Same as above, but doesn't normalize
|
|
15629
|
+
sqrN(num) {
|
|
15630
|
+
return num * num;
|
|
15631
|
+
}
|
|
15632
|
+
addN(lhs, rhs) {
|
|
15633
|
+
return lhs + rhs;
|
|
15634
|
+
}
|
|
15635
|
+
subN(lhs, rhs) {
|
|
15636
|
+
return lhs - rhs;
|
|
15637
|
+
}
|
|
15638
|
+
mulN(lhs, rhs) {
|
|
15639
|
+
return lhs * rhs;
|
|
15640
|
+
}
|
|
15641
|
+
inv(num) {
|
|
15642
|
+
return invert(num, this.ORDER);
|
|
15643
|
+
}
|
|
15644
|
+
sqrt(num) {
|
|
15645
|
+
// Caching _sqrt speeds up sqrt9mod16 by 5x and tonneli-shanks by 10%
|
|
15646
|
+
if (!this._sqrt)
|
|
15647
|
+
this._sqrt = FpSqrt(this.ORDER);
|
|
15648
|
+
return this._sqrt(this, num);
|
|
15649
|
+
}
|
|
15650
|
+
toBytes(num) {
|
|
15651
|
+
return this.isLE ? numberToBytesLE(num, this.BYTES) : numberToBytesBE(num, this.BYTES);
|
|
15652
|
+
}
|
|
15653
|
+
fromBytes(bytes, skipValidation = false) {
|
|
15654
|
+
utils_abytes(bytes);
|
|
15655
|
+
const { _lengths: allowedLengths, BYTES, isLE, ORDER, _mod: modFromBytes } = this;
|
|
15656
|
+
if (allowedLengths) {
|
|
15657
|
+
if (!allowedLengths.includes(bytes.length) || bytes.length > BYTES) {
|
|
15658
|
+
throw new Error('Field.fromBytes: expected ' + allowedLengths + ' bytes, got ' + bytes.length);
|
|
15659
|
+
}
|
|
15660
|
+
const padded = new Uint8Array(BYTES);
|
|
15661
|
+
// isLE add 0 to right, !isLE to the left.
|
|
15662
|
+
padded.set(bytes, isLE ? 0 : padded.length - bytes.length);
|
|
15663
|
+
bytes = padded;
|
|
15664
|
+
}
|
|
15665
|
+
if (bytes.length !== BYTES)
|
|
15666
|
+
throw new Error('Field.fromBytes: expected ' + BYTES + ' bytes, got ' + bytes.length);
|
|
15667
|
+
let scalar = isLE ? bytesToNumberLE(bytes) : utils_bytesToNumberBE(bytes);
|
|
15668
|
+
if (modFromBytes)
|
|
15669
|
+
scalar = mod(scalar, ORDER);
|
|
15670
|
+
if (!skipValidation)
|
|
15671
|
+
if (!this.isValid(scalar))
|
|
15672
|
+
throw new Error('invalid field element: outside of range 0..ORDER');
|
|
15673
|
+
// NOTE: we don't validate scalar here, please use isValid. This done such way because some
|
|
15674
|
+
// protocol may allow non-reduced scalar that reduced later or changed some other way.
|
|
15675
|
+
return scalar;
|
|
15676
|
+
}
|
|
15677
|
+
// TODO: we don't need it here, move out to separate fn
|
|
15678
|
+
invertBatch(lst) {
|
|
15679
|
+
return modular_FpInvertBatch(this, lst);
|
|
15680
|
+
}
|
|
15681
|
+
// We can't move this out because Fp6, Fp12 implement it
|
|
15682
|
+
// and it's unclear what to return in there.
|
|
15683
|
+
cmov(a, b, condition) {
|
|
15684
|
+
return condition ? b : a;
|
|
15685
|
+
}
|
|
15686
|
+
}
|
|
15742
15687
|
/**
|
|
15743
15688
|
* Creates a finite field. Major performance optimizations:
|
|
15744
15689
|
* * 1. Denormalized operations like mulN instead of mul.
|
|
@@ -15758,107 +15703,8 @@ function modular_nLength(n, nBitLength) {
|
|
|
15758
15703
|
* @param isLE (default: false) if encoding / decoding should be in little-endian
|
|
15759
15704
|
* @param redef optional faster redefinitions of sqrt and other methods
|
|
15760
15705
|
*/
|
|
15761
|
-
function Field(ORDER,
|
|
15762
|
-
|
|
15763
|
-
if (ORDER <= modular_0n)
|
|
15764
|
-
throw new Error('invalid field: expected ORDER > 0, got ' + ORDER);
|
|
15765
|
-
let _nbitLength = undefined;
|
|
15766
|
-
let _sqrt = undefined;
|
|
15767
|
-
let modFromBytes = false;
|
|
15768
|
-
let allowedLengths = undefined;
|
|
15769
|
-
if (typeof bitLenOrOpts === 'object' && bitLenOrOpts != null) {
|
|
15770
|
-
if (opts.sqrt || isLE)
|
|
15771
|
-
throw new Error('cannot specify opts in two arguments');
|
|
15772
|
-
const _opts = bitLenOrOpts;
|
|
15773
|
-
if (_opts.BITS)
|
|
15774
|
-
_nbitLength = _opts.BITS;
|
|
15775
|
-
if (_opts.sqrt)
|
|
15776
|
-
_sqrt = _opts.sqrt;
|
|
15777
|
-
if (typeof _opts.isLE === 'boolean')
|
|
15778
|
-
isLE = _opts.isLE;
|
|
15779
|
-
if (typeof _opts.modFromBytes === 'boolean')
|
|
15780
|
-
modFromBytes = _opts.modFromBytes;
|
|
15781
|
-
allowedLengths = _opts.allowedLengths;
|
|
15782
|
-
}
|
|
15783
|
-
else {
|
|
15784
|
-
if (typeof bitLenOrOpts === 'number')
|
|
15785
|
-
_nbitLength = bitLenOrOpts;
|
|
15786
|
-
if (opts.sqrt)
|
|
15787
|
-
_sqrt = opts.sqrt;
|
|
15788
|
-
}
|
|
15789
|
-
const { nBitLength: BITS, nByteLength: BYTES } = modular_nLength(ORDER, _nbitLength);
|
|
15790
|
-
if (BYTES > 2048)
|
|
15791
|
-
throw new Error('invalid field: expected ORDER of <= 2048 bytes');
|
|
15792
|
-
let sqrtP; // cached sqrtP
|
|
15793
|
-
const f = Object.freeze({
|
|
15794
|
-
ORDER,
|
|
15795
|
-
isLE,
|
|
15796
|
-
BITS,
|
|
15797
|
-
BYTES,
|
|
15798
|
-
MASK: utils_bitMask(BITS),
|
|
15799
|
-
ZERO: modular_0n,
|
|
15800
|
-
ONE: modular_1n,
|
|
15801
|
-
allowedLengths: allowedLengths,
|
|
15802
|
-
create: (num) => mod(num, ORDER),
|
|
15803
|
-
isValid: (num) => {
|
|
15804
|
-
if (typeof num !== 'bigint')
|
|
15805
|
-
throw new Error('invalid field element: expected bigint, got ' + typeof num);
|
|
15806
|
-
return modular_0n <= num && num < ORDER; // 0 is valid element, but it's not invertible
|
|
15807
|
-
},
|
|
15808
|
-
is0: (num) => num === modular_0n,
|
|
15809
|
-
// is valid and invertible
|
|
15810
|
-
isValidNot0: (num) => !f.is0(num) && f.isValid(num),
|
|
15811
|
-
isOdd: (num) => (num & modular_1n) === modular_1n,
|
|
15812
|
-
neg: (num) => mod(-num, ORDER),
|
|
15813
|
-
eql: (lhs, rhs) => lhs === rhs,
|
|
15814
|
-
sqr: (num) => mod(num * num, ORDER),
|
|
15815
|
-
add: (lhs, rhs) => mod(lhs + rhs, ORDER),
|
|
15816
|
-
sub: (lhs, rhs) => mod(lhs - rhs, ORDER),
|
|
15817
|
-
mul: (lhs, rhs) => mod(lhs * rhs, ORDER),
|
|
15818
|
-
pow: (num, power) => FpPow(f, num, power),
|
|
15819
|
-
div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER),
|
|
15820
|
-
// Same as above, but doesn't normalize
|
|
15821
|
-
sqrN: (num) => num * num,
|
|
15822
|
-
addN: (lhs, rhs) => lhs + rhs,
|
|
15823
|
-
subN: (lhs, rhs) => lhs - rhs,
|
|
15824
|
-
mulN: (lhs, rhs) => lhs * rhs,
|
|
15825
|
-
inv: (num) => invert(num, ORDER),
|
|
15826
|
-
sqrt: _sqrt ||
|
|
15827
|
-
((n) => {
|
|
15828
|
-
if (!sqrtP)
|
|
15829
|
-
sqrtP = FpSqrt(ORDER);
|
|
15830
|
-
return sqrtP(f, n);
|
|
15831
|
-
}),
|
|
15832
|
-
toBytes: (num) => (isLE ? numberToBytesLE(num, BYTES) : numberToBytesBE(num, BYTES)),
|
|
15833
|
-
fromBytes: (bytes, skipValidation = true) => {
|
|
15834
|
-
if (allowedLengths) {
|
|
15835
|
-
if (!allowedLengths.includes(bytes.length) || bytes.length > BYTES) {
|
|
15836
|
-
throw new Error('Field.fromBytes: expected ' + allowedLengths + ' bytes, got ' + bytes.length);
|
|
15837
|
-
}
|
|
15838
|
-
const padded = new Uint8Array(BYTES);
|
|
15839
|
-
// isLE add 0 to right, !isLE to the left.
|
|
15840
|
-
padded.set(bytes, isLE ? 0 : padded.length - bytes.length);
|
|
15841
|
-
bytes = padded;
|
|
15842
|
-
}
|
|
15843
|
-
if (bytes.length !== BYTES)
|
|
15844
|
-
throw new Error('Field.fromBytes: expected ' + BYTES + ' bytes, got ' + bytes.length);
|
|
15845
|
-
let scalar = isLE ? utils_bytesToNumberLE(bytes) : utils_bytesToNumberBE(bytes);
|
|
15846
|
-
if (modFromBytes)
|
|
15847
|
-
scalar = mod(scalar, ORDER);
|
|
15848
|
-
if (!skipValidation)
|
|
15849
|
-
if (!f.isValid(scalar))
|
|
15850
|
-
throw new Error('invalid field element: outside of range 0..ORDER');
|
|
15851
|
-
// NOTE: we don't validate scalar here, please use isValid. This done such way because some
|
|
15852
|
-
// protocol may allow non-reduced scalar that reduced later or changed some other way.
|
|
15853
|
-
return scalar;
|
|
15854
|
-
},
|
|
15855
|
-
// TODO: we don't need it here, move out to separate fn
|
|
15856
|
-
invertBatch: (lst) => modular_FpInvertBatch(f, lst),
|
|
15857
|
-
// We can't move this out because Fp6, Fp12 implement it
|
|
15858
|
-
// and it's unclear what to return in there.
|
|
15859
|
-
cmov: (a, b, c) => (c ? b : a),
|
|
15860
|
-
});
|
|
15861
|
-
return Object.freeze(f);
|
|
15706
|
+
function Field(ORDER, opts = {}) {
|
|
15707
|
+
return new _Field(ORDER, opts);
|
|
15862
15708
|
}
|
|
15863
15709
|
// Generic random scalar, we can do same for other fields if via Fp2.mul(Fp2.ONE, Fp2.random)?
|
|
15864
15710
|
// This allows unsafe methods like ignore bias or zero. These unsafe, but often used in different protocols (if deterministic RNG).
|
|
@@ -15885,21 +15731,6 @@ function FpSqrtEven(Fp, elm) {
|
|
|
15885
15731
|
const root = Fp.sqrt(elm);
|
|
15886
15732
|
return Fp.isOdd(root) ? Fp.neg(root) : root;
|
|
15887
15733
|
}
|
|
15888
|
-
/**
|
|
15889
|
-
* "Constant-time" private key generation utility.
|
|
15890
|
-
* Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field).
|
|
15891
|
-
* Which makes it slightly more biased, less secure.
|
|
15892
|
-
* @deprecated use `mapKeyToField` instead
|
|
15893
|
-
*/
|
|
15894
|
-
function hashToPrivateScalar(hash, groupOrder, isLE = false) {
|
|
15895
|
-
hash = ensureBytes('privateHash', hash);
|
|
15896
|
-
const hashLen = hash.length;
|
|
15897
|
-
const minLen = modular_nLength(groupOrder).nByteLength + 8;
|
|
15898
|
-
if (minLen < 24 || hashLen < minLen || hashLen > 1024)
|
|
15899
|
-
throw new Error('hashToPrivateScalar: expected ' + minLen + '-1024 bytes of input, got ' + hashLen);
|
|
15900
|
-
const num = isLE ? bytesToNumberLE(hash) : bytesToNumberBE(hash);
|
|
15901
|
-
return mod(num, groupOrder - modular_1n) + modular_1n;
|
|
15902
|
-
}
|
|
15903
15734
|
/**
|
|
15904
15735
|
* Returns total number of bytes consumed by the field element.
|
|
15905
15736
|
* For example, 32 bytes for usual 256-bit weierstrass curve.
|
|
@@ -15919,7 +15750,7 @@ function getFieldBytesLength(fieldOrder) {
|
|
|
15919
15750
|
* @param fieldOrder number of field elements, usually CURVE.n
|
|
15920
15751
|
* @returns byte length of target hash
|
|
15921
15752
|
*/
|
|
15922
|
-
function
|
|
15753
|
+
function modular_getMinHashLength(fieldOrder) {
|
|
15923
15754
|
const length = getFieldBytesLength(fieldOrder);
|
|
15924
15755
|
return length + Math.ceil(length / 2);
|
|
15925
15756
|
}
|
|
@@ -15932,24 +15763,25 @@ function getMinHashLength(fieldOrder) {
|
|
|
15932
15763
|
* FIPS 186-5, A.2 https://csrc.nist.gov/publications/detail/fips/186/5/final
|
|
15933
15764
|
* RFC 9380, https://www.rfc-editor.org/rfc/rfc9380#section-5
|
|
15934
15765
|
* @param hash hash output from SHA3 or a similar function
|
|
15935
|
-
* @param groupOrder size of subgroup - (e.g. secp256k1.
|
|
15766
|
+
* @param groupOrder size of subgroup - (e.g. secp256k1.Point.Fn.ORDER)
|
|
15936
15767
|
* @param isLE interpret hash bytes as LE num
|
|
15937
15768
|
* @returns valid private scalar
|
|
15938
15769
|
*/
|
|
15939
|
-
function
|
|
15770
|
+
function modular_mapHashToField(key, fieldOrder, isLE = false) {
|
|
15771
|
+
utils_abytes(key);
|
|
15940
15772
|
const len = key.length;
|
|
15941
15773
|
const fieldLen = getFieldBytesLength(fieldOrder);
|
|
15942
|
-
const minLen =
|
|
15774
|
+
const minLen = modular_getMinHashLength(fieldOrder);
|
|
15943
15775
|
// No small numbers: need to understand bias story. No huge numbers: easier to detect JS timings.
|
|
15944
15776
|
if (len < 16 || len < minLen || len > 1024)
|
|
15945
15777
|
throw new Error('expected ' + minLen + '-1024 bytes of input, got ' + len);
|
|
15946
|
-
const num = isLE ?
|
|
15778
|
+
const num = isLE ? bytesToNumberLE(key) : utils_bytesToNumberBE(key);
|
|
15947
15779
|
// `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0
|
|
15948
15780
|
const reduced = mod(num, fieldOrder - modular_1n) + modular_1n;
|
|
15949
15781
|
return isLE ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen);
|
|
15950
15782
|
}
|
|
15951
15783
|
//# sourceMappingURL=modular.js.map
|
|
15952
|
-
;// ./node_modules/@noble/curves/
|
|
15784
|
+
;// ./node_modules/@noble/curves/abstract/curve.js
|
|
15953
15785
|
/**
|
|
15954
15786
|
* Methods for elliptic curve multiplication by scalars.
|
|
15955
15787
|
* Contains wNAF, pippenger.
|
|
@@ -15958,8 +15790,8 @@ function mapHashToField(key, fieldOrder, isLE = false) {
|
|
|
15958
15790
|
/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
15959
15791
|
|
|
15960
15792
|
|
|
15961
|
-
const curve_0n = BigInt(0);
|
|
15962
|
-
const curve_1n = BigInt(1);
|
|
15793
|
+
const curve_0n = /* @__PURE__ */ BigInt(0);
|
|
15794
|
+
const curve_1n = /* @__PURE__ */ BigInt(1);
|
|
15963
15795
|
function negateCt(condition, item) {
|
|
15964
15796
|
const neg = item.negate();
|
|
15965
15797
|
return condition ? neg : item;
|
|
@@ -16058,6 +15890,10 @@ function assert0(n) {
|
|
|
16058
15890
|
* This would allow windows to be in different memory locations
|
|
16059
15891
|
*/
|
|
16060
15892
|
class wNAF {
|
|
15893
|
+
BASE;
|
|
15894
|
+
ZERO;
|
|
15895
|
+
Fn;
|
|
15896
|
+
bits;
|
|
16061
15897
|
// Parametrized with a given Point class (not individual point)
|
|
16062
15898
|
constructor(Point, bits) {
|
|
16063
15899
|
this.BASE = Point.BASE;
|
|
@@ -16234,13 +16070,14 @@ function mulEndoUnsafe(Point, point, k1, k2) {
|
|
|
16234
16070
|
* @param points array of L curve points
|
|
16235
16071
|
* @param scalars array of L scalars (aka secret keys / bigints)
|
|
16236
16072
|
*/
|
|
16237
|
-
function pippenger(c,
|
|
16073
|
+
function pippenger(c, points, scalars) {
|
|
16238
16074
|
// If we split scalars by some window (let's say 8 bits), every chunk will only
|
|
16239
16075
|
// take 256 buckets even if there are 4096 scalars, also re-uses double.
|
|
16240
16076
|
// TODO:
|
|
16241
16077
|
// - https://eprint.iacr.org/2024/750.pdf
|
|
16242
16078
|
// - https://tches.iacr.org/index.php/TCHES/article/view/10287
|
|
16243
16079
|
// 0 is accepted in scalars
|
|
16080
|
+
const fieldN = c.Fn;
|
|
16244
16081
|
validateMSMPoints(points, c);
|
|
16245
16082
|
validateMSMScalars(scalars, fieldN);
|
|
16246
16083
|
const plength = points.length;
|
|
@@ -16257,7 +16094,7 @@ function pippenger(c, fieldN, points, scalars) {
|
|
|
16257
16094
|
windowSize = wbits - 2;
|
|
16258
16095
|
else if (wbits > 0)
|
|
16259
16096
|
windowSize = 2;
|
|
16260
|
-
const MASK =
|
|
16097
|
+
const MASK = bitMask(windowSize);
|
|
16261
16098
|
const buckets = new Array(Number(MASK) + 1).fill(zero); // +1 for zero array
|
|
16262
16099
|
const lastBits = Math.floor((fieldN.BITS - 1) / windowSize) * windowSize;
|
|
16263
16100
|
let sum = zero;
|
|
@@ -16288,7 +16125,7 @@ function pippenger(c, fieldN, points, scalars) {
|
|
|
16288
16125
|
* @param points array of L curve points
|
|
16289
16126
|
* @returns function which multiplies points with scaars
|
|
16290
16127
|
*/
|
|
16291
|
-
function precomputeMSMUnsafe(c,
|
|
16128
|
+
function precomputeMSMUnsafe(c, points, windowSize) {
|
|
16292
16129
|
/**
|
|
16293
16130
|
* Performance Analysis of Window-based Precomputation
|
|
16294
16131
|
*
|
|
@@ -16324,6 +16161,7 @@ function precomputeMSMUnsafe(c, fieldN, points, windowSize) {
|
|
|
16324
16161
|
* - Optimal for ~256 scalars
|
|
16325
16162
|
* - Less efficient for 4096+ scalars (Pippenger preferred)
|
|
16326
16163
|
*/
|
|
16164
|
+
const fieldN = c.Fn;
|
|
16327
16165
|
validateW(windowSize, fieldN.BITS);
|
|
16328
16166
|
validateMSMPoints(points, c);
|
|
16329
16167
|
const zero = c.ZERO;
|
|
@@ -16360,26 +16198,6 @@ function precomputeMSMUnsafe(c, fieldN, points, windowSize) {
|
|
|
16360
16198
|
return res;
|
|
16361
16199
|
};
|
|
16362
16200
|
}
|
|
16363
|
-
// TODO: remove
|
|
16364
|
-
/** @deprecated */
|
|
16365
|
-
function validateBasic(curve) {
|
|
16366
|
-
validateField(curve.Fp);
|
|
16367
|
-
validateObject(curve, {
|
|
16368
|
-
n: 'bigint',
|
|
16369
|
-
h: 'bigint',
|
|
16370
|
-
Gx: 'field',
|
|
16371
|
-
Gy: 'field',
|
|
16372
|
-
}, {
|
|
16373
|
-
nBitLength: 'isSafeInteger',
|
|
16374
|
-
nByteLength: 'isSafeInteger',
|
|
16375
|
-
});
|
|
16376
|
-
// Set defaults
|
|
16377
|
-
return Object.freeze({
|
|
16378
|
-
...nLength(curve.n, curve.nBitLength),
|
|
16379
|
-
...curve,
|
|
16380
|
-
...{ p: curve.Fp.ORDER },
|
|
16381
|
-
});
|
|
16382
|
-
}
|
|
16383
16201
|
function createField(order, field, isLE) {
|
|
16384
16202
|
if (field) {
|
|
16385
16203
|
if (field.ORDER !== order)
|
|
@@ -16392,7 +16210,7 @@ function createField(order, field, isLE) {
|
|
|
16392
16210
|
}
|
|
16393
16211
|
}
|
|
16394
16212
|
/** Validates CURVE opts and creates fields */
|
|
16395
|
-
function
|
|
16213
|
+
function createCurveFields(type, CURVE, curveOpts = {}, FpFnLE) {
|
|
16396
16214
|
if (FpFnLE === undefined)
|
|
16397
16215
|
FpFnLE = type === 'edwards';
|
|
16398
16216
|
if (!CURVE || typeof CURVE !== 'object')
|
|
@@ -16414,8 +16232,14 @@ function _createCurveFields(type, CURVE, curveOpts = {}, FpFnLE) {
|
|
|
16414
16232
|
CURVE = Object.freeze(Object.assign({}, CURVE));
|
|
16415
16233
|
return { CURVE, Fp, Fn };
|
|
16416
16234
|
}
|
|
16235
|
+
function curve_createKeygen(randomSecretKey, getPublicKey) {
|
|
16236
|
+
return function keygen(seed) {
|
|
16237
|
+
const secretKey = randomSecretKey(seed);
|
|
16238
|
+
return { secretKey, publicKey: getPublicKey(secretKey) };
|
|
16239
|
+
};
|
|
16240
|
+
}
|
|
16417
16241
|
//# sourceMappingURL=curve.js.map
|
|
16418
|
-
;// ./node_modules/@noble/curves/
|
|
16242
|
+
;// ./node_modules/@noble/curves/abstract/weierstrass.js
|
|
16419
16243
|
/**
|
|
16420
16244
|
* Short Weierstrass curve methods. The formula is: y² = x³ + ax + b.
|
|
16421
16245
|
*
|
|
@@ -16472,7 +16296,7 @@ function _splitEndoScalar(k, basis, n) {
|
|
|
16472
16296
|
k2 = -k2;
|
|
16473
16297
|
// Double check that resulting scalar less than half bits of N: otherwise wNAF will fail.
|
|
16474
16298
|
// This should only happen on wrong basises. Also, math inside is too complex and I don't trust it.
|
|
16475
|
-
const MAX_NUM = utils_bitMask(Math.ceil(
|
|
16299
|
+
const MAX_NUM = utils_bitMask(Math.ceil(utils_bitLen(n) / 2)) + weierstrass_1n; // Half bits of N
|
|
16476
16300
|
if (k1 < weierstrass_0n || k1 >= MAX_NUM || k2 < weierstrass_0n || k2 >= MAX_NUM) {
|
|
16477
16301
|
throw new Error('splitScalar (endomorphism): failed, k=' + k);
|
|
16478
16302
|
}
|
|
@@ -16489,8 +16313,8 @@ function validateSigOpts(opts, def) {
|
|
|
16489
16313
|
// @ts-ignore
|
|
16490
16314
|
optsn[optName] = opts[optName] === undefined ? def[optName] : opts[optName];
|
|
16491
16315
|
}
|
|
16492
|
-
|
|
16493
|
-
|
|
16316
|
+
abool(optsn.lowS, 'lowS');
|
|
16317
|
+
abool(optsn.prehash, 'prehash');
|
|
16494
16318
|
if (optsn.format !== undefined)
|
|
16495
16319
|
validateSigFormat(optsn.format);
|
|
16496
16320
|
return optsn;
|
|
@@ -16520,10 +16344,10 @@ const DER = {
|
|
|
16520
16344
|
throw new E('tlv.encode: unpadded data');
|
|
16521
16345
|
const dataLen = data.length / 2;
|
|
16522
16346
|
const len = numberToHexUnpadded(dataLen);
|
|
16523
|
-
if ((len.length / 2) &
|
|
16347
|
+
if ((len.length / 2) & 0b1000_0000)
|
|
16524
16348
|
throw new E('tlv.encode: long form length too big');
|
|
16525
16349
|
// length of length with long form flag
|
|
16526
|
-
const lenLen = dataLen > 127 ? numberToHexUnpadded((len.length / 2) |
|
|
16350
|
+
const lenLen = dataLen > 127 ? numberToHexUnpadded((len.length / 2) | 0b1000_0000) : '';
|
|
16527
16351
|
const t = numberToHexUnpadded(tag);
|
|
16528
16352
|
return t + lenLen + len + data;
|
|
16529
16353
|
},
|
|
@@ -16536,13 +16360,13 @@ const DER = {
|
|
|
16536
16360
|
if (data.length < 2 || data[pos++] !== tag)
|
|
16537
16361
|
throw new E('tlv.decode: wrong tlv');
|
|
16538
16362
|
const first = data[pos++];
|
|
16539
|
-
const isLong = !!(first &
|
|
16363
|
+
const isLong = !!(first & 0b1000_0000); // First bit of first length byte is flag for short/long form
|
|
16540
16364
|
let length = 0;
|
|
16541
16365
|
if (!isLong)
|
|
16542
16366
|
length = first;
|
|
16543
16367
|
else {
|
|
16544
16368
|
// Long form: [longFlag(1bit), lengthLength(7bit), length (BE)]
|
|
16545
|
-
const lenLen = first &
|
|
16369
|
+
const lenLen = first & 0b0111_1111;
|
|
16546
16370
|
if (!lenLen)
|
|
16547
16371
|
throw new E('tlv.decode(long): indefinite length not supported');
|
|
16548
16372
|
if (lenLen > 4)
|
|
@@ -16583,17 +16407,17 @@ const DER = {
|
|
|
16583
16407
|
},
|
|
16584
16408
|
decode(data) {
|
|
16585
16409
|
const { Err: E } = DER;
|
|
16586
|
-
if (data[0] &
|
|
16410
|
+
if (data[0] & 0b1000_0000)
|
|
16587
16411
|
throw new E('invalid signature integer: negative');
|
|
16588
|
-
if (data[0] === 0x00 && !(data[1] &
|
|
16412
|
+
if (data[0] === 0x00 && !(data[1] & 0b1000_0000))
|
|
16589
16413
|
throw new E('invalid signature integer: unnecessary leading zero');
|
|
16590
16414
|
return utils_bytesToNumberBE(data);
|
|
16591
16415
|
},
|
|
16592
16416
|
},
|
|
16593
|
-
toSig(
|
|
16417
|
+
toSig(bytes) {
|
|
16594
16418
|
// parse DER signature
|
|
16595
16419
|
const { Err: E, _int: int, _tlv: tlv } = DER;
|
|
16596
|
-
const data =
|
|
16420
|
+
const data = utils_abytes(bytes, undefined, 'signature');
|
|
16597
16421
|
const { v: seqBytes, l: seqLeftBytes } = tlv.decode(0x30, data);
|
|
16598
16422
|
if (seqLeftBytes.length)
|
|
16599
16423
|
throw new E('invalid signature: left bytes after parsing');
|
|
@@ -16614,55 +16438,37 @@ const DER = {
|
|
|
16614
16438
|
// Be friendly to bad ECMAScript parsers by not using bigint literals
|
|
16615
16439
|
// prettier-ignore
|
|
16616
16440
|
const weierstrass_0n = BigInt(0), weierstrass_1n = BigInt(1), weierstrass_2n = BigInt(2), weierstrass_3n = BigInt(3), weierstrass_4n = BigInt(4);
|
|
16617
|
-
function _normFnElement(Fn, key) {
|
|
16618
|
-
const { BYTES: expected } = Fn;
|
|
16619
|
-
let num;
|
|
16620
|
-
if (typeof key === 'bigint') {
|
|
16621
|
-
num = key;
|
|
16622
|
-
}
|
|
16623
|
-
else {
|
|
16624
|
-
let bytes = utils_ensureBytes('private key', key);
|
|
16625
|
-
try {
|
|
16626
|
-
num = Fn.fromBytes(bytes);
|
|
16627
|
-
}
|
|
16628
|
-
catch (error) {
|
|
16629
|
-
throw new Error(`invalid private key: expected ui8a of size ${expected}, got ${typeof key}`);
|
|
16630
|
-
}
|
|
16631
|
-
}
|
|
16632
|
-
if (!Fn.isValidNot0(num))
|
|
16633
|
-
throw new Error('invalid private key: out of range [1..N-1]');
|
|
16634
|
-
return num;
|
|
16635
|
-
}
|
|
16636
16441
|
/**
|
|
16637
16442
|
* Creates weierstrass Point constructor, based on specified curve options.
|
|
16638
16443
|
*
|
|
16444
|
+
* See {@link WeierstrassOpts}.
|
|
16445
|
+
*
|
|
16639
16446
|
* @example
|
|
16640
16447
|
```js
|
|
16641
16448
|
const opts = {
|
|
16642
|
-
p:
|
|
16643
|
-
n:
|
|
16644
|
-
h:
|
|
16645
|
-
a:
|
|
16646
|
-
b:
|
|
16647
|
-
Gx:
|
|
16648
|
-
Gy:
|
|
16449
|
+
p: 0xfffffffffffffffffffffffffffffffeffffac73n,
|
|
16450
|
+
n: 0x100000000000000000001b8fa16dfab9aca16b6b3n,
|
|
16451
|
+
h: 1n,
|
|
16452
|
+
a: 0n,
|
|
16453
|
+
b: 7n,
|
|
16454
|
+
Gx: 0x3b4c382ce37aa192a4019e763036f4f5dd4d7ebbn,
|
|
16455
|
+
Gy: 0x938cf935318fdced6bc28286531733c3f03c4feen,
|
|
16649
16456
|
};
|
|
16650
|
-
const
|
|
16457
|
+
const secp160k1_Point = weierstrass(opts);
|
|
16651
16458
|
```
|
|
16652
16459
|
*/
|
|
16653
|
-
function
|
|
16654
|
-
const validated =
|
|
16460
|
+
function weierstrass(params, extraOpts = {}) {
|
|
16461
|
+
const validated = createCurveFields('weierstrass', params, extraOpts);
|
|
16655
16462
|
const { Fp, Fn } = validated;
|
|
16656
16463
|
let CURVE = validated.CURVE;
|
|
16657
16464
|
const { h: cofactor, n: CURVE_ORDER } = CURVE;
|
|
16658
|
-
|
|
16465
|
+
utils_validateObject(extraOpts, {}, {
|
|
16659
16466
|
allowInfinityPoint: 'boolean',
|
|
16660
16467
|
clearCofactor: 'function',
|
|
16661
16468
|
isTorsionFree: 'function',
|
|
16662
16469
|
fromBytes: 'function',
|
|
16663
16470
|
toBytes: 'function',
|
|
16664
16471
|
endo: 'object',
|
|
16665
|
-
wrapPrivateKey: 'boolean',
|
|
16666
16472
|
});
|
|
16667
16473
|
const { endo } = extraOpts;
|
|
16668
16474
|
if (endo) {
|
|
@@ -16680,18 +16486,18 @@ function weierstrassN(params, extraOpts = {}) {
|
|
|
16680
16486
|
function pointToBytes(_c, point, isCompressed) {
|
|
16681
16487
|
const { x, y } = point.toAffine();
|
|
16682
16488
|
const bx = Fp.toBytes(x);
|
|
16683
|
-
|
|
16489
|
+
utils_abool(isCompressed, 'isCompressed');
|
|
16684
16490
|
if (isCompressed) {
|
|
16685
16491
|
assertCompressionIsSupported();
|
|
16686
16492
|
const hasEvenY = !Fp.isOdd(y);
|
|
16687
|
-
return
|
|
16493
|
+
return utils_concatBytes(pprefix(hasEvenY), bx);
|
|
16688
16494
|
}
|
|
16689
16495
|
else {
|
|
16690
|
-
return
|
|
16496
|
+
return utils_concatBytes(Uint8Array.of(0x04), bx, Fp.toBytes(y));
|
|
16691
16497
|
}
|
|
16692
16498
|
}
|
|
16693
16499
|
function pointFromBytes(bytes) {
|
|
16694
|
-
|
|
16500
|
+
utils_abytes(bytes, undefined, 'Point');
|
|
16695
16501
|
const { publicKey: comp, publicKeyUncompressed: uncomp } = lengths; // e.g. for 32-byte: 33, 65
|
|
16696
16502
|
const length = bytes.length;
|
|
16697
16503
|
const head = bytes[0];
|
|
@@ -16711,9 +16517,9 @@ function weierstrassN(params, extraOpts = {}) {
|
|
|
16711
16517
|
throw new Error('bad point: is not on curve, sqrt error' + err);
|
|
16712
16518
|
}
|
|
16713
16519
|
assertCompressionIsSupported();
|
|
16714
|
-
const
|
|
16715
|
-
const
|
|
16716
|
-
if (
|
|
16520
|
+
const evenY = Fp.isOdd(y);
|
|
16521
|
+
const evenH = (head & 1) === 1; // ECDSA-specific
|
|
16522
|
+
if (evenH !== evenY)
|
|
16717
16523
|
y = Fp.neg(y);
|
|
16718
16524
|
return { x, y };
|
|
16719
16525
|
}
|
|
@@ -16762,7 +16568,7 @@ function weierstrassN(params, extraOpts = {}) {
|
|
|
16762
16568
|
}
|
|
16763
16569
|
function aprjpoint(other) {
|
|
16764
16570
|
if (!(other instanceof Point))
|
|
16765
|
-
throw new Error('
|
|
16571
|
+
throw new Error('Weierstrass Point expected');
|
|
16766
16572
|
}
|
|
16767
16573
|
function splitEndoScalarN(k) {
|
|
16768
16574
|
if (!endo || !endo.basises)
|
|
@@ -16825,6 +16631,17 @@ function weierstrassN(params, extraOpts = {}) {
|
|
|
16825
16631
|
* We're doing calculations in projective, because its operations don't require costly inversion.
|
|
16826
16632
|
*/
|
|
16827
16633
|
class Point {
|
|
16634
|
+
// base / generator point
|
|
16635
|
+
static BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);
|
|
16636
|
+
// zero / infinity / identity point
|
|
16637
|
+
static ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO); // 0, 1, 0
|
|
16638
|
+
// math field
|
|
16639
|
+
static Fp = Fp;
|
|
16640
|
+
// scalar field
|
|
16641
|
+
static Fn = Fn;
|
|
16642
|
+
X;
|
|
16643
|
+
Y;
|
|
16644
|
+
Z;
|
|
16828
16645
|
/** Does NOT validate if the point is valid. Use `.assertValidity()`. */
|
|
16829
16646
|
constructor(X, Y, Z) {
|
|
16830
16647
|
this.X = acoord('x', X);
|
|
@@ -16848,12 +16665,12 @@ function weierstrassN(params, extraOpts = {}) {
|
|
|
16848
16665
|
return new Point(x, y, Fp.ONE);
|
|
16849
16666
|
}
|
|
16850
16667
|
static fromBytes(bytes) {
|
|
16851
|
-
const P = Point.fromAffine(decodePoint(
|
|
16668
|
+
const P = Point.fromAffine(decodePoint(utils_abytes(bytes, undefined, 'point')));
|
|
16852
16669
|
P.assertValidity();
|
|
16853
16670
|
return P;
|
|
16854
16671
|
}
|
|
16855
16672
|
static fromHex(hex) {
|
|
16856
|
-
return Point.fromBytes(
|
|
16673
|
+
return Point.fromBytes(utils_hexToBytes(hex));
|
|
16857
16674
|
}
|
|
16858
16675
|
get x() {
|
|
16859
16676
|
return this.toAffine().x;
|
|
@@ -17040,11 +16857,13 @@ function weierstrassN(params, extraOpts = {}) {
|
|
|
17040
16857
|
if (!Fn.isValid(sc))
|
|
17041
16858
|
throw new Error('invalid scalar: out of range'); // 0 is valid
|
|
17042
16859
|
if (sc === weierstrass_0n || p.is0())
|
|
17043
|
-
return Point.ZERO;
|
|
16860
|
+
return Point.ZERO; // 0
|
|
17044
16861
|
if (sc === weierstrass_1n)
|
|
17045
|
-
return p; //
|
|
16862
|
+
return p; // 1
|
|
17046
16863
|
if (wnaf.hasCache(this))
|
|
17047
|
-
return this.multiply(sc);
|
|
16864
|
+
return this.multiply(sc); // precomputes
|
|
16865
|
+
// We don't have method for double scalar multiplication (aP + bQ):
|
|
16866
|
+
// Even with using Strauss-Shamir trick, it's 35% slower than naïve mul+add.
|
|
17048
16867
|
if (endo) {
|
|
17049
16868
|
const { k1neg, k1, k2neg, k2 } = splitEndoScalarN(sc);
|
|
17050
16869
|
const { p1, p2 } = mulEndoUnsafe(Point, p, k1, k2); // 30% faster vs wnaf.unsafe
|
|
@@ -17054,10 +16873,6 @@ function weierstrassN(params, extraOpts = {}) {
|
|
|
17054
16873
|
return wnaf.unsafe(p, sc);
|
|
17055
16874
|
}
|
|
17056
16875
|
}
|
|
17057
|
-
multiplyAndAddUnsafe(Q, a, b) {
|
|
17058
|
-
const sum = this.multiplyUnsafe(a).add(Q.multiplyUnsafe(b));
|
|
17059
|
-
return sum.is0() ? undefined : sum;
|
|
17060
|
-
}
|
|
17061
16876
|
/**
|
|
17062
16877
|
* Converts Projective point to affine (x, y) coordinates.
|
|
17063
16878
|
* @param invertedZ Z^-1 (inverted zero) - optional, precomputation is useful for invertBatch
|
|
@@ -17090,50 +16905,17 @@ function weierstrassN(params, extraOpts = {}) {
|
|
|
17090
16905
|
return this.multiplyUnsafe(cofactor).is0();
|
|
17091
16906
|
}
|
|
17092
16907
|
toBytes(isCompressed = true) {
|
|
17093
|
-
|
|
16908
|
+
utils_abool(isCompressed, 'isCompressed');
|
|
17094
16909
|
this.assertValidity();
|
|
17095
16910
|
return encodePoint(Point, this, isCompressed);
|
|
17096
16911
|
}
|
|
17097
16912
|
toHex(isCompressed = true) {
|
|
17098
|
-
return
|
|
16913
|
+
return utils_bytesToHex(this.toBytes(isCompressed));
|
|
17099
16914
|
}
|
|
17100
16915
|
toString() {
|
|
17101
16916
|
return `<Point ${this.is0() ? 'ZERO' : this.toHex()}>`;
|
|
17102
16917
|
}
|
|
17103
|
-
// TODO: remove
|
|
17104
|
-
get px() {
|
|
17105
|
-
return this.X;
|
|
17106
|
-
}
|
|
17107
|
-
get py() {
|
|
17108
|
-
return this.X;
|
|
17109
|
-
}
|
|
17110
|
-
get pz() {
|
|
17111
|
-
return this.Z;
|
|
17112
|
-
}
|
|
17113
|
-
toRawBytes(isCompressed = true) {
|
|
17114
|
-
return this.toBytes(isCompressed);
|
|
17115
|
-
}
|
|
17116
|
-
_setWindowSize(windowSize) {
|
|
17117
|
-
this.precompute(windowSize);
|
|
17118
|
-
}
|
|
17119
|
-
static normalizeZ(points) {
|
|
17120
|
-
return normalizeZ(Point, points);
|
|
17121
|
-
}
|
|
17122
|
-
static msm(points, scalars) {
|
|
17123
|
-
return pippenger(Point, Fn, points, scalars);
|
|
17124
|
-
}
|
|
17125
|
-
static fromPrivateKey(privateKey) {
|
|
17126
|
-
return Point.BASE.multiply(_normFnElement(Fn, privateKey));
|
|
17127
|
-
}
|
|
17128
16918
|
}
|
|
17129
|
-
// base / generator point
|
|
17130
|
-
Point.BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);
|
|
17131
|
-
// zero / infinity / identity point
|
|
17132
|
-
Point.ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO); // 0, 1, 0
|
|
17133
|
-
// math field
|
|
17134
|
-
Point.Fp = Fp;
|
|
17135
|
-
// scalar field
|
|
17136
|
-
Point.Fn = Fn;
|
|
17137
16919
|
const bits = Fn.BITS;
|
|
17138
16920
|
const wnaf = new wNAF(Point, extraOpts.endo ? Math.ceil(bits / 2) : bits);
|
|
17139
16921
|
Point.BASE.precompute(8); // Enable precomputes. Slows down first publicKey computation by 20ms.
|
|
@@ -17282,11 +17064,12 @@ function getWLengths(Fp, Fn) {
|
|
|
17282
17064
|
*/
|
|
17283
17065
|
function ecdh(Point, ecdhOpts = {}) {
|
|
17284
17066
|
const { Fn } = Point;
|
|
17285
|
-
const randomBytes_ = ecdhOpts.randomBytes ||
|
|
17067
|
+
const randomBytes_ = ecdhOpts.randomBytes || wcRandomBytes;
|
|
17286
17068
|
const lengths = Object.assign(getWLengths(Point.Fp, Fn), { seed: getMinHashLength(Fn.ORDER) });
|
|
17287
17069
|
function isValidSecretKey(secretKey) {
|
|
17288
17070
|
try {
|
|
17289
|
-
|
|
17071
|
+
const num = Fn.fromBytes(secretKey);
|
|
17072
|
+
return Fn.isValidNot0(num);
|
|
17290
17073
|
}
|
|
17291
17074
|
catch (error) {
|
|
17292
17075
|
return false;
|
|
@@ -17311,7 +17094,7 @@ function ecdh(Point, ecdhOpts = {}) {
|
|
|
17311
17094
|
* (groupLen + ceil(groupLen / 2)) with modulo bias being negligible.
|
|
17312
17095
|
*/
|
|
17313
17096
|
function randomSecretKey(seed = randomBytes_(lengths.seed)) {
|
|
17314
|
-
return mapHashToField(
|
|
17097
|
+
return mapHashToField(abytes(seed, lengths.seed, 'seed'), Fn.ORDER);
|
|
17315
17098
|
}
|
|
17316
17099
|
/**
|
|
17317
17100
|
* Computes public key for a secret key. Checks for validity of the secret key.
|
|
@@ -17319,24 +17102,18 @@ function ecdh(Point, ecdhOpts = {}) {
|
|
|
17319
17102
|
* @returns Public key, full when isCompressed=false; short when isCompressed=true
|
|
17320
17103
|
*/
|
|
17321
17104
|
function getPublicKey(secretKey, isCompressed = true) {
|
|
17322
|
-
return Point.BASE.multiply(
|
|
17323
|
-
}
|
|
17324
|
-
function keygen(seed) {
|
|
17325
|
-
const secretKey = randomSecretKey(seed);
|
|
17326
|
-
return { secretKey, publicKey: getPublicKey(secretKey) };
|
|
17105
|
+
return Point.BASE.multiply(Fn.fromBytes(secretKey)).toBytes(isCompressed);
|
|
17327
17106
|
}
|
|
17328
17107
|
/**
|
|
17329
17108
|
* Quick and dirty check for item being public key. Does not validate hex, or being on-curve.
|
|
17330
17109
|
*/
|
|
17331
17110
|
function isProbPub(item) {
|
|
17332
|
-
if (typeof item === 'bigint')
|
|
17333
|
-
return false;
|
|
17334
|
-
if (item instanceof Point)
|
|
17335
|
-
return true;
|
|
17336
17111
|
const { secretKey, publicKey, publicKeyUncompressed } = lengths;
|
|
17337
|
-
if (
|
|
17112
|
+
if (!isBytes(item))
|
|
17338
17113
|
return undefined;
|
|
17339
|
-
|
|
17114
|
+
if (('_lengths' in Fn && Fn._lengths) || secretKey === publicKey)
|
|
17115
|
+
return undefined;
|
|
17116
|
+
const l = abytes(item, undefined, 'key').length;
|
|
17340
17117
|
return l === publicKey || l === publicKeyUncompressed;
|
|
17341
17118
|
}
|
|
17342
17119
|
/**
|
|
@@ -17352,31 +17129,24 @@ function ecdh(Point, ecdhOpts = {}) {
|
|
|
17352
17129
|
throw new Error('first arg must be private key');
|
|
17353
17130
|
if (isProbPub(publicKeyB) === false)
|
|
17354
17131
|
throw new Error('second arg must be public key');
|
|
17355
|
-
const s =
|
|
17356
|
-
const b = Point.
|
|
17132
|
+
const s = Fn.fromBytes(secretKeyA);
|
|
17133
|
+
const b = Point.fromBytes(publicKeyB); // checks for being on-curve
|
|
17357
17134
|
return b.multiply(s).toBytes(isCompressed);
|
|
17358
17135
|
}
|
|
17359
17136
|
const utils = {
|
|
17360
17137
|
isValidSecretKey,
|
|
17361
17138
|
isValidPublicKey,
|
|
17362
17139
|
randomSecretKey,
|
|
17363
|
-
// TODO: remove
|
|
17364
|
-
isValidPrivateKey: isValidSecretKey,
|
|
17365
|
-
randomPrivateKey: randomSecretKey,
|
|
17366
|
-
normPrivateKeyToScalar: (key) => _normFnElement(Fn, key),
|
|
17367
|
-
precompute(windowSize = 8, point = Point.BASE) {
|
|
17368
|
-
return point.precompute(windowSize, false);
|
|
17369
|
-
},
|
|
17370
17140
|
};
|
|
17141
|
+
const keygen = createKeygen(randomSecretKey, getPublicKey);
|
|
17371
17142
|
return Object.freeze({ getPublicKey, getSharedSecret, keygen, Point, utils, lengths });
|
|
17372
17143
|
}
|
|
17373
17144
|
/**
|
|
17374
17145
|
* Creates ECDSA signing interface for given elliptic curve `Point` and `hash` function.
|
|
17375
|
-
* We need `hash` for 2 features:
|
|
17376
|
-
* 1. Message prehash-ing. NOT used if `sign` / `verify` are called with `prehash: false`
|
|
17377
|
-
* 2. k generation in `sign`, using HMAC-drbg(hash)
|
|
17378
17146
|
*
|
|
17379
|
-
*
|
|
17147
|
+
* @param Point created using {@link weierstrass} function
|
|
17148
|
+
* @param hash used for 1) message prehash-ing 2) k generation in `sign`, using hmac_drbg(hash)
|
|
17149
|
+
* @param ecdsaOpts rarely needed, see {@link ECDSAOpts}
|
|
17380
17150
|
*
|
|
17381
17151
|
* @example
|
|
17382
17152
|
* ```js
|
|
@@ -17386,28 +17156,28 @@ function ecdh(Point, ecdhOpts = {}) {
|
|
|
17386
17156
|
* const p256_sha224_r = ecdsa(p256_Point, sha224, { randomBytes: (length) => { ... } });
|
|
17387
17157
|
* ```
|
|
17388
17158
|
*/
|
|
17389
|
-
function
|
|
17159
|
+
function weierstrass_ecdsa(Point, hash, ecdsaOpts = {}) {
|
|
17390
17160
|
ahash(hash);
|
|
17391
|
-
|
|
17161
|
+
validateObject(ecdsaOpts, {}, {
|
|
17392
17162
|
hmac: 'function',
|
|
17393
17163
|
lowS: 'boolean',
|
|
17394
17164
|
randomBytes: 'function',
|
|
17395
17165
|
bits2int: 'function',
|
|
17396
17166
|
bits2int_modN: 'function',
|
|
17397
17167
|
});
|
|
17398
|
-
|
|
17399
|
-
const
|
|
17400
|
-
|
|
17168
|
+
ecdsaOpts = Object.assign({}, ecdsaOpts);
|
|
17169
|
+
const randomBytes = ecdsaOpts.randomBytes || wcRandomBytes;
|
|
17170
|
+
const hmac = ecdsaOpts.hmac || ((key, msg) => nobleHmac(hash, key, msg));
|
|
17401
17171
|
const { Fp, Fn } = Point;
|
|
17402
17172
|
const { ORDER: CURVE_ORDER, BITS: fnBits } = Fn;
|
|
17403
17173
|
const { keygen, getPublicKey, getSharedSecret, utils, lengths } = ecdh(Point, ecdsaOpts);
|
|
17404
17174
|
const defaultSigOpts = {
|
|
17405
|
-
prehash:
|
|
17406
|
-
lowS: typeof ecdsaOpts.lowS === 'boolean' ? ecdsaOpts.lowS :
|
|
17407
|
-
format:
|
|
17175
|
+
prehash: true,
|
|
17176
|
+
lowS: typeof ecdsaOpts.lowS === 'boolean' ? ecdsaOpts.lowS : true,
|
|
17177
|
+
format: 'compact',
|
|
17408
17178
|
extraEntropy: false,
|
|
17409
17179
|
};
|
|
17410
|
-
const
|
|
17180
|
+
const hasLargeCofactor = CURVE_ORDER * weierstrass_2n < Fp.ORDER; // Won't CURVE().h > 2n be more effective?
|
|
17411
17181
|
function isBiggerThanHalfOrder(number) {
|
|
17412
17182
|
const HALF = CURVE_ORDER >> weierstrass_1n;
|
|
17413
17183
|
return number > HALF;
|
|
@@ -17417,28 +17187,47 @@ function ecdsa(Point, hash, ecdsaOpts = {}) {
|
|
|
17417
17187
|
throw new Error(`invalid signature ${title}: out of range 1..Point.Fn.ORDER`);
|
|
17418
17188
|
return num;
|
|
17419
17189
|
}
|
|
17190
|
+
function assertSmallCofactor() {
|
|
17191
|
+
// ECDSA recovery is hard for cofactor > 1 curves.
|
|
17192
|
+
// In sign, `r = q.x mod n`, and here we recover q.x from r.
|
|
17193
|
+
// While recovering q.x >= n, we need to add r+n for cofactor=1 curves.
|
|
17194
|
+
// However, for cofactor>1, r+n may not get q.x:
|
|
17195
|
+
// r+n*i would need to be done instead where i is unknown.
|
|
17196
|
+
// To easily get i, we either need to:
|
|
17197
|
+
// a. increase amount of valid recid values (4, 5...); OR
|
|
17198
|
+
// b. prohibit non-prime-order signatures (recid > 1).
|
|
17199
|
+
if (hasLargeCofactor)
|
|
17200
|
+
throw new Error('"recovered" sig type is not supported for cofactor >2 curves');
|
|
17201
|
+
}
|
|
17420
17202
|
function validateSigLength(bytes, format) {
|
|
17421
17203
|
validateSigFormat(format);
|
|
17422
17204
|
const size = lengths.signature;
|
|
17423
17205
|
const sizer = format === 'compact' ? size : format === 'recovered' ? size + 1 : undefined;
|
|
17424
|
-
return
|
|
17206
|
+
return abytes(bytes, sizer);
|
|
17425
17207
|
}
|
|
17426
17208
|
/**
|
|
17427
17209
|
* ECDSA signature with its (r, s) properties. Supports compact, recovered & DER representations.
|
|
17428
17210
|
*/
|
|
17429
17211
|
class Signature {
|
|
17212
|
+
r;
|
|
17213
|
+
s;
|
|
17214
|
+
recovery;
|
|
17430
17215
|
constructor(r, s, recovery) {
|
|
17431
17216
|
this.r = validateRS('r', r); // r in [1..N-1];
|
|
17432
17217
|
this.s = validateRS('s', s); // s in [1..N-1];
|
|
17433
|
-
if (recovery != null)
|
|
17218
|
+
if (recovery != null) {
|
|
17219
|
+
assertSmallCofactor();
|
|
17220
|
+
if (![0, 1, 2, 3].includes(recovery))
|
|
17221
|
+
throw new Error('invalid recovery id');
|
|
17434
17222
|
this.recovery = recovery;
|
|
17223
|
+
}
|
|
17435
17224
|
Object.freeze(this);
|
|
17436
17225
|
}
|
|
17437
|
-
static fromBytes(bytes, format =
|
|
17226
|
+
static fromBytes(bytes, format = defaultSigOpts.format) {
|
|
17438
17227
|
validateSigLength(bytes, format);
|
|
17439
17228
|
let recid;
|
|
17440
17229
|
if (format === 'der') {
|
|
17441
|
-
const { r, s } = DER.toSig(
|
|
17230
|
+
const { r, s } = DER.toSig(abytes(bytes));
|
|
17442
17231
|
return new Signature(r, s);
|
|
17443
17232
|
}
|
|
17444
17233
|
if (format === 'recovered') {
|
|
@@ -17446,7 +17235,7 @@ function ecdsa(Point, hash, ecdsaOpts = {}) {
|
|
|
17446
17235
|
format = 'compact';
|
|
17447
17236
|
bytes = bytes.subarray(1);
|
|
17448
17237
|
}
|
|
17449
|
-
const L =
|
|
17238
|
+
const L = lengths.signature / 2;
|
|
17450
17239
|
const r = bytes.subarray(0, L);
|
|
17451
17240
|
const s = bytes.subarray(L, L * 2);
|
|
17452
17241
|
return new Signature(Fn.fromBytes(r), Fn.fromBytes(s), recid);
|
|
@@ -17454,38 +17243,31 @@ function ecdsa(Point, hash, ecdsaOpts = {}) {
|
|
|
17454
17243
|
static fromHex(hex, format) {
|
|
17455
17244
|
return this.fromBytes(hexToBytes(hex), format);
|
|
17456
17245
|
}
|
|
17246
|
+
assertRecovery() {
|
|
17247
|
+
const { recovery } = this;
|
|
17248
|
+
if (recovery == null)
|
|
17249
|
+
throw new Error('invalid recovery id: must be present');
|
|
17250
|
+
return recovery;
|
|
17251
|
+
}
|
|
17457
17252
|
addRecoveryBit(recovery) {
|
|
17458
17253
|
return new Signature(this.r, this.s, recovery);
|
|
17459
17254
|
}
|
|
17460
17255
|
recoverPublicKey(messageHash) {
|
|
17461
|
-
const
|
|
17462
|
-
const
|
|
17463
|
-
|
|
17464
|
-
throw new Error('recovery id invalid');
|
|
17465
|
-
// ECDSA recovery is hard for cofactor > 1 curves.
|
|
17466
|
-
// In sign, `r = q.x mod n`, and here we recover q.x from r.
|
|
17467
|
-
// While recovering q.x >= n, we need to add r+n for cofactor=1 curves.
|
|
17468
|
-
// However, for cofactor>1, r+n may not get q.x:
|
|
17469
|
-
// r+n*i would need to be done instead where i is unknown.
|
|
17470
|
-
// To easily get i, we either need to:
|
|
17471
|
-
// a. increase amount of valid recid values (4, 5...); OR
|
|
17472
|
-
// b. prohibit non-prime-order signatures (recid > 1).
|
|
17473
|
-
const hasCofactor = CURVE_ORDER * weierstrass_2n < FIELD_ORDER;
|
|
17474
|
-
if (hasCofactor && rec > 1)
|
|
17475
|
-
throw new Error('recovery id is ambiguous for h>1 curve');
|
|
17476
|
-
const radj = rec === 2 || rec === 3 ? r + CURVE_ORDER : r;
|
|
17256
|
+
const { r, s } = this;
|
|
17257
|
+
const recovery = this.assertRecovery();
|
|
17258
|
+
const radj = recovery === 2 || recovery === 3 ? r + CURVE_ORDER : r;
|
|
17477
17259
|
if (!Fp.isValid(radj))
|
|
17478
|
-
throw new Error('recovery id
|
|
17260
|
+
throw new Error('invalid recovery id: sig.r+curve.n != R.x');
|
|
17479
17261
|
const x = Fp.toBytes(radj);
|
|
17480
|
-
const R = Point.fromBytes(concatBytes(pprefix((
|
|
17262
|
+
const R = Point.fromBytes(concatBytes(pprefix((recovery & 1) === 0), x));
|
|
17481
17263
|
const ir = Fn.inv(radj); // r^-1
|
|
17482
|
-
const h = bits2int_modN(
|
|
17264
|
+
const h = bits2int_modN(abytes(messageHash, undefined, 'msgHash')); // Truncate hash
|
|
17483
17265
|
const u1 = Fn.create(-h * ir); // -hr^-1
|
|
17484
17266
|
const u2 = Fn.create(s * ir); // sr^-1
|
|
17485
17267
|
// (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1). unsafe is fine: there is no private data.
|
|
17486
17268
|
const Q = Point.BASE.multiplyUnsafe(u1).add(R.multiplyUnsafe(u2));
|
|
17487
17269
|
if (Q.is0())
|
|
17488
|
-
throw new Error('point at infinify');
|
|
17270
|
+
throw new Error('invalid recovery: point at infinify');
|
|
17489
17271
|
Q.assertValidity();
|
|
17490
17272
|
return Q;
|
|
17491
17273
|
}
|
|
@@ -17493,45 +17275,22 @@ function ecdsa(Point, hash, ecdsaOpts = {}) {
|
|
|
17493
17275
|
hasHighS() {
|
|
17494
17276
|
return isBiggerThanHalfOrder(this.s);
|
|
17495
17277
|
}
|
|
17496
|
-
toBytes(format =
|
|
17278
|
+
toBytes(format = defaultSigOpts.format) {
|
|
17497
17279
|
validateSigFormat(format);
|
|
17498
17280
|
if (format === 'der')
|
|
17499
17281
|
return hexToBytes(DER.hexFromSig(this));
|
|
17500
|
-
const r =
|
|
17501
|
-
const
|
|
17282
|
+
const { r, s } = this;
|
|
17283
|
+
const rb = Fn.toBytes(r);
|
|
17284
|
+
const sb = Fn.toBytes(s);
|
|
17502
17285
|
if (format === 'recovered') {
|
|
17503
|
-
|
|
17504
|
-
|
|
17505
|
-
return concatBytes(Uint8Array.of(this.recovery), r, s);
|
|
17286
|
+
assertSmallCofactor();
|
|
17287
|
+
return concatBytes(Uint8Array.of(this.assertRecovery()), rb, sb);
|
|
17506
17288
|
}
|
|
17507
|
-
return concatBytes(
|
|
17289
|
+
return concatBytes(rb, sb);
|
|
17508
17290
|
}
|
|
17509
17291
|
toHex(format) {
|
|
17510
17292
|
return bytesToHex(this.toBytes(format));
|
|
17511
17293
|
}
|
|
17512
|
-
// TODO: remove
|
|
17513
|
-
assertValidity() { }
|
|
17514
|
-
static fromCompact(hex) {
|
|
17515
|
-
return Signature.fromBytes(utils_ensureBytes('sig', hex), 'compact');
|
|
17516
|
-
}
|
|
17517
|
-
static fromDER(hex) {
|
|
17518
|
-
return Signature.fromBytes(utils_ensureBytes('sig', hex), 'der');
|
|
17519
|
-
}
|
|
17520
|
-
normalizeS() {
|
|
17521
|
-
return this.hasHighS() ? new Signature(this.r, Fn.neg(this.s), this.recovery) : this;
|
|
17522
|
-
}
|
|
17523
|
-
toDERRawBytes() {
|
|
17524
|
-
return this.toBytes('der');
|
|
17525
|
-
}
|
|
17526
|
-
toDERHex() {
|
|
17527
|
-
return bytesToHex(this.toBytes('der'));
|
|
17528
|
-
}
|
|
17529
|
-
toCompactRawBytes() {
|
|
17530
|
-
return this.toBytes('compact');
|
|
17531
|
-
}
|
|
17532
|
-
toCompactHex() {
|
|
17533
|
-
return bytesToHex(this.toBytes('compact'));
|
|
17534
|
-
}
|
|
17535
17294
|
}
|
|
17536
17295
|
// RFC6979: ensure ECDSA msg is X bytes and < N. RFC suggests optional truncating via bits2octets.
|
|
17537
17296
|
// FIPS 186-4 4.6 suggests the leftmost min(nBitLen, outLen) bits, which matches bits2int.
|
|
@@ -17544,7 +17303,7 @@ function ecdsa(Point, hash, ecdsaOpts = {}) {
|
|
|
17544
17303
|
throw new Error('input is too large');
|
|
17545
17304
|
// For curves with nBitLength % 8 !== 0: bits2octets(bits2octets(m)) !== bits2octets(m)
|
|
17546
17305
|
// for some cases, since bytes.length * 8 is not actual bitLength.
|
|
17547
|
-
const num =
|
|
17306
|
+
const num = bytesToNumberBE(bytes); // check for == u8 done here
|
|
17548
17307
|
const delta = bytes.length * 8 - fnBits; // truncate to nBitLength leftmost bits
|
|
17549
17308
|
return delta > 0 ? num >> BigInt(delta) : num;
|
|
17550
17309
|
};
|
|
@@ -17553,7 +17312,7 @@ function ecdsa(Point, hash, ecdsaOpts = {}) {
|
|
|
17553
17312
|
return Fn.create(bits2int(bytes)); // can't use bytesToNumberBE here
|
|
17554
17313
|
};
|
|
17555
17314
|
// Pads output with zero as per spec
|
|
17556
|
-
const ORDER_MASK =
|
|
17315
|
+
const ORDER_MASK = bitMask(fnBits);
|
|
17557
17316
|
/** Converts to bytes. Checks if num in `[0..ORDER_MASK-1]` e.g.: `[0..2^256-1]`. */
|
|
17558
17317
|
function int2octets(num) {
|
|
17559
17318
|
// IMPORTANT: the check ensures working for case `Fn.BYTES != Fn.BITS * 8`
|
|
@@ -17561,8 +17320,8 @@ function ecdsa(Point, hash, ecdsaOpts = {}) {
|
|
|
17561
17320
|
return Fn.toBytes(num);
|
|
17562
17321
|
}
|
|
17563
17322
|
function validateMsgAndHash(message, prehash) {
|
|
17564
|
-
|
|
17565
|
-
return prehash ?
|
|
17323
|
+
abytes(message, undefined, 'message');
|
|
17324
|
+
return prehash ? abytes(hash(message), undefined, 'prehashed message') : message;
|
|
17566
17325
|
}
|
|
17567
17326
|
/**
|
|
17568
17327
|
* Steps A, D of RFC6979 3.2.
|
|
@@ -17572,26 +17331,26 @@ function ecdsa(Point, hash, ecdsaOpts = {}) {
|
|
|
17572
17331
|
* Warning: we cannot assume here that message has same amount of bytes as curve order,
|
|
17573
17332
|
* this will be invalid at least for P521. Also it can be bigger for P224 + SHA256.
|
|
17574
17333
|
*/
|
|
17575
|
-
function prepSig(message,
|
|
17576
|
-
if (['recovered', 'canonical'].some((k) => k in opts))
|
|
17577
|
-
throw new Error('sign() legacy options not supported');
|
|
17334
|
+
function prepSig(message, secretKey, opts) {
|
|
17578
17335
|
const { lowS, prehash, extraEntropy } = validateSigOpts(opts, defaultSigOpts);
|
|
17579
17336
|
message = validateMsgAndHash(message, prehash); // RFC6979 3.2 A: h1 = H(m)
|
|
17580
17337
|
// We can't later call bits2octets, since nested bits2int is broken for curves
|
|
17581
17338
|
// with fnBits % 8 !== 0. Because of that, we unwrap it here as int2octets call.
|
|
17582
17339
|
// const bits2octets = (bits) => int2octets(bits2int_modN(bits))
|
|
17583
17340
|
const h1int = bits2int_modN(message);
|
|
17584
|
-
const d =
|
|
17341
|
+
const d = Fn.fromBytes(secretKey); // validate secret key, convert to bigint
|
|
17342
|
+
if (!Fn.isValidNot0(d))
|
|
17343
|
+
throw new Error('invalid private key');
|
|
17585
17344
|
const seedArgs = [int2octets(d), int2octets(h1int)];
|
|
17586
17345
|
// extraEntropy. RFC6979 3.6: additional k' (optional).
|
|
17587
17346
|
if (extraEntropy != null && extraEntropy !== false) {
|
|
17588
17347
|
// K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')
|
|
17589
17348
|
// gen random bytes OR pass as-is
|
|
17590
17349
|
const e = extraEntropy === true ? randomBytes(lengths.secretKey) : extraEntropy;
|
|
17591
|
-
seedArgs.push(
|
|
17350
|
+
seedArgs.push(abytes(e, undefined, 'extraEntropy')); // check for being bytes
|
|
17592
17351
|
}
|
|
17593
17352
|
const seed = concatBytes(...seedArgs); // Step D of RFC6979 3.2
|
|
17594
|
-
const m = h1int; //
|
|
17353
|
+
const m = h1int; // no need to call bits2int second time here, it is inside truncateHash!
|
|
17595
17354
|
// Converts signature params into point w r/s, checks result for validity.
|
|
17596
17355
|
// To transform k => Signature:
|
|
17597
17356
|
// q = k⋅G
|
|
@@ -17603,7 +17362,7 @@ function ecdsa(Point, hash, ecdsaOpts = {}) {
|
|
|
17603
17362
|
function k2sig(kBytes) {
|
|
17604
17363
|
// RFC 6979 Section 3.2, step 3: k = bits2int(T)
|
|
17605
17364
|
// Important: all mod() calls here must be done over N
|
|
17606
|
-
const k = bits2int(kBytes); //
|
|
17365
|
+
const k = bits2int(kBytes); // Cannot use fields methods, since it is group element
|
|
17607
17366
|
if (!Fn.isValidNot0(k))
|
|
17608
17367
|
return; // Valid scalars (including k) must be in 1..N-1
|
|
17609
17368
|
const ik = Fn.inv(k); // k^-1 mod n
|
|
@@ -17611,16 +17370,16 @@ function ecdsa(Point, hash, ecdsaOpts = {}) {
|
|
|
17611
17370
|
const r = Fn.create(q.x); // r = q.x mod n
|
|
17612
17371
|
if (r === weierstrass_0n)
|
|
17613
17372
|
return;
|
|
17614
|
-
const s = Fn.create(ik * Fn.create(m + r * d)); //
|
|
17373
|
+
const s = Fn.create(ik * Fn.create(m + r * d)); // s = k^-1(m + rd) mod n
|
|
17615
17374
|
if (s === weierstrass_0n)
|
|
17616
17375
|
return;
|
|
17617
|
-
let recovery = (q.x === r ? 0 : 2) | Number(q.y & weierstrass_1n); // recovery bit (2 or 3
|
|
17376
|
+
let recovery = (q.x === r ? 0 : 2) | Number(q.y & weierstrass_1n); // recovery bit (2 or 3 when q.x>n)
|
|
17618
17377
|
let normS = s;
|
|
17619
17378
|
if (lowS && isBiggerThanHalfOrder(s)) {
|
|
17620
|
-
normS = Fn.neg(s); // if lowS was passed, ensure s is always
|
|
17621
|
-
recovery ^= 1;
|
|
17379
|
+
normS = Fn.neg(s); // if lowS was passed, ensure s is always in the bottom half of N
|
|
17380
|
+
recovery ^= 1;
|
|
17622
17381
|
}
|
|
17623
|
-
return new Signature(r, normS,
|
|
17382
|
+
return new Signature(r, normS, hasLargeCofactor ? undefined : recovery);
|
|
17624
17383
|
}
|
|
17625
17384
|
return { seed, k2sig };
|
|
17626
17385
|
}
|
|
@@ -17636,46 +17395,10 @@ function ecdsa(Point, hash, ecdsaOpts = {}) {
|
|
|
17636
17395
|
* ```
|
|
17637
17396
|
*/
|
|
17638
17397
|
function sign(message, secretKey, opts = {}) {
|
|
17639
|
-
message = utils_ensureBytes('message', message);
|
|
17640
17398
|
const { seed, k2sig } = prepSig(message, secretKey, opts); // Steps A, D of RFC6979 3.2.
|
|
17641
17399
|
const drbg = createHmacDrbg(hash.outputLen, Fn.BYTES, hmac);
|
|
17642
17400
|
const sig = drbg(seed, k2sig); // Steps B, C, D, E, F, G
|
|
17643
|
-
return sig;
|
|
17644
|
-
}
|
|
17645
|
-
function tryParsingSig(sg) {
|
|
17646
|
-
// Try to deduce format
|
|
17647
|
-
let sig = undefined;
|
|
17648
|
-
const isHex = typeof sg === 'string' || isBytes(sg);
|
|
17649
|
-
const isObj = !isHex &&
|
|
17650
|
-
sg !== null &&
|
|
17651
|
-
typeof sg === 'object' &&
|
|
17652
|
-
typeof sg.r === 'bigint' &&
|
|
17653
|
-
typeof sg.s === 'bigint';
|
|
17654
|
-
if (!isHex && !isObj)
|
|
17655
|
-
throw new Error('invalid signature, expected Uint8Array, hex string or Signature instance');
|
|
17656
|
-
if (isObj) {
|
|
17657
|
-
sig = new Signature(sg.r, sg.s);
|
|
17658
|
-
}
|
|
17659
|
-
else if (isHex) {
|
|
17660
|
-
try {
|
|
17661
|
-
sig = Signature.fromBytes(utils_ensureBytes('sig', sg), 'der');
|
|
17662
|
-
}
|
|
17663
|
-
catch (derError) {
|
|
17664
|
-
if (!(derError instanceof DER.Err))
|
|
17665
|
-
throw derError;
|
|
17666
|
-
}
|
|
17667
|
-
if (!sig) {
|
|
17668
|
-
try {
|
|
17669
|
-
sig = Signature.fromBytes(utils_ensureBytes('sig', sg), 'compact');
|
|
17670
|
-
}
|
|
17671
|
-
catch (error) {
|
|
17672
|
-
return false;
|
|
17673
|
-
}
|
|
17674
|
-
}
|
|
17675
|
-
}
|
|
17676
|
-
if (!sig)
|
|
17677
|
-
return false;
|
|
17678
|
-
return sig;
|
|
17401
|
+
return sig.toBytes(opts.format);
|
|
17679
17402
|
}
|
|
17680
17403
|
/**
|
|
17681
17404
|
* Verifies a signature against message and public key.
|
|
@@ -17692,16 +17415,15 @@ function ecdsa(Point, hash, ecdsaOpts = {}) {
|
|
|
17692
17415
|
*/
|
|
17693
17416
|
function verify(signature, message, publicKey, opts = {}) {
|
|
17694
17417
|
const { lowS, prehash, format } = validateSigOpts(opts, defaultSigOpts);
|
|
17695
|
-
publicKey =
|
|
17696
|
-
message = validateMsgAndHash(
|
|
17697
|
-
if (
|
|
17698
|
-
|
|
17699
|
-
|
|
17700
|
-
|
|
17701
|
-
|
|
17702
|
-
if (sig === false)
|
|
17703
|
-
return false;
|
|
17418
|
+
publicKey = abytes(publicKey, undefined, 'publicKey');
|
|
17419
|
+
message = validateMsgAndHash(message, prehash);
|
|
17420
|
+
if (!isBytes(signature)) {
|
|
17421
|
+
const end = signature instanceof Signature ? ', use sig.toBytes()' : '';
|
|
17422
|
+
throw new Error('verify expects Uint8Array signature' + end);
|
|
17423
|
+
}
|
|
17424
|
+
validateSigLength(signature, format); // execute this twice because we want loud error
|
|
17704
17425
|
try {
|
|
17426
|
+
const sig = Signature.fromBytes(signature, format);
|
|
17705
17427
|
const P = Point.fromBytes(publicKey);
|
|
17706
17428
|
if (lowS && sig.hasHighS())
|
|
17707
17429
|
return false;
|
|
@@ -17739,114 +17461,8 @@ function ecdsa(Point, hash, ecdsaOpts = {}) {
|
|
|
17739
17461
|
hash,
|
|
17740
17462
|
});
|
|
17741
17463
|
}
|
|
17742
|
-
/** @deprecated use `weierstrass` in newer releases */
|
|
17743
|
-
function weierstrassPoints(c) {
|
|
17744
|
-
const { CURVE, curveOpts } = _weierstrass_legacy_opts_to_new(c);
|
|
17745
|
-
const Point = weierstrassN(CURVE, curveOpts);
|
|
17746
|
-
return _weierstrass_new_output_to_legacy(c, Point);
|
|
17747
|
-
}
|
|
17748
|
-
function _weierstrass_legacy_opts_to_new(c) {
|
|
17749
|
-
const CURVE = {
|
|
17750
|
-
a: c.a,
|
|
17751
|
-
b: c.b,
|
|
17752
|
-
p: c.Fp.ORDER,
|
|
17753
|
-
n: c.n,
|
|
17754
|
-
h: c.h,
|
|
17755
|
-
Gx: c.Gx,
|
|
17756
|
-
Gy: c.Gy,
|
|
17757
|
-
};
|
|
17758
|
-
const Fp = c.Fp;
|
|
17759
|
-
let allowedLengths = c.allowedPrivateKeyLengths
|
|
17760
|
-
? Array.from(new Set(c.allowedPrivateKeyLengths.map((l) => Math.ceil(l / 2))))
|
|
17761
|
-
: undefined;
|
|
17762
|
-
const Fn = Field(CURVE.n, {
|
|
17763
|
-
BITS: c.nBitLength,
|
|
17764
|
-
allowedLengths: allowedLengths,
|
|
17765
|
-
modFromBytes: c.wrapPrivateKey,
|
|
17766
|
-
});
|
|
17767
|
-
const curveOpts = {
|
|
17768
|
-
Fp,
|
|
17769
|
-
Fn,
|
|
17770
|
-
allowInfinityPoint: c.allowInfinityPoint,
|
|
17771
|
-
endo: c.endo,
|
|
17772
|
-
isTorsionFree: c.isTorsionFree,
|
|
17773
|
-
clearCofactor: c.clearCofactor,
|
|
17774
|
-
fromBytes: c.fromBytes,
|
|
17775
|
-
toBytes: c.toBytes,
|
|
17776
|
-
};
|
|
17777
|
-
return { CURVE, curveOpts };
|
|
17778
|
-
}
|
|
17779
|
-
function _ecdsa_legacy_opts_to_new(c) {
|
|
17780
|
-
const { CURVE, curveOpts } = _weierstrass_legacy_opts_to_new(c);
|
|
17781
|
-
const ecdsaOpts = {
|
|
17782
|
-
hmac: c.hmac,
|
|
17783
|
-
randomBytes: c.randomBytes,
|
|
17784
|
-
lowS: c.lowS,
|
|
17785
|
-
bits2int: c.bits2int,
|
|
17786
|
-
bits2int_modN: c.bits2int_modN,
|
|
17787
|
-
};
|
|
17788
|
-
return { CURVE, curveOpts, hash: c.hash, ecdsaOpts };
|
|
17789
|
-
}
|
|
17790
|
-
function _legacyHelperEquat(Fp, a, b) {
|
|
17791
|
-
/**
|
|
17792
|
-
* y² = x³ + ax + b: Short weierstrass curve formula. Takes x, returns y².
|
|
17793
|
-
* @returns y²
|
|
17794
|
-
*/
|
|
17795
|
-
function weierstrassEquation(x) {
|
|
17796
|
-
const x2 = Fp.sqr(x); // x * x
|
|
17797
|
-
const x3 = Fp.mul(x2, x); // x² * x
|
|
17798
|
-
return Fp.add(Fp.add(x3, Fp.mul(x, a)), b); // x³ + a * x + b
|
|
17799
|
-
}
|
|
17800
|
-
return weierstrassEquation;
|
|
17801
|
-
}
|
|
17802
|
-
function _weierstrass_new_output_to_legacy(c, Point) {
|
|
17803
|
-
const { Fp, Fn } = Point;
|
|
17804
|
-
function isWithinCurveOrder(num) {
|
|
17805
|
-
return inRange(num, weierstrass_1n, Fn.ORDER);
|
|
17806
|
-
}
|
|
17807
|
-
const weierstrassEquation = _legacyHelperEquat(Fp, c.a, c.b);
|
|
17808
|
-
return Object.assign({}, {
|
|
17809
|
-
CURVE: c,
|
|
17810
|
-
Point: Point,
|
|
17811
|
-
ProjectivePoint: Point,
|
|
17812
|
-
normPrivateKeyToScalar: (key) => _normFnElement(Fn, key),
|
|
17813
|
-
weierstrassEquation,
|
|
17814
|
-
isWithinCurveOrder,
|
|
17815
|
-
});
|
|
17816
|
-
}
|
|
17817
|
-
function _ecdsa_new_output_to_legacy(c, _ecdsa) {
|
|
17818
|
-
const Point = _ecdsa.Point;
|
|
17819
|
-
return Object.assign({}, _ecdsa, {
|
|
17820
|
-
ProjectivePoint: Point,
|
|
17821
|
-
CURVE: Object.assign({}, c, modular_nLength(Point.Fn.ORDER, Point.Fn.BITS)),
|
|
17822
|
-
});
|
|
17823
|
-
}
|
|
17824
|
-
// _ecdsa_legacy
|
|
17825
|
-
function weierstrass(c) {
|
|
17826
|
-
const { CURVE, curveOpts, hash, ecdsaOpts } = _ecdsa_legacy_opts_to_new(c);
|
|
17827
|
-
const Point = weierstrassN(CURVE, curveOpts);
|
|
17828
|
-
const signs = ecdsa(Point, hash, ecdsaOpts);
|
|
17829
|
-
return _ecdsa_new_output_to_legacy(c, signs);
|
|
17830
|
-
}
|
|
17831
17464
|
//# sourceMappingURL=weierstrass.js.map
|
|
17832
|
-
;// ./node_modules/@noble/curves/
|
|
17833
|
-
/**
|
|
17834
|
-
* Utilities for short weierstrass curves, combined with noble-hashes.
|
|
17835
|
-
* @module
|
|
17836
|
-
*/
|
|
17837
|
-
/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
17838
|
-
|
|
17839
|
-
/** connects noble-curves to noble-hashes */
|
|
17840
|
-
function getHash(hash) {
|
|
17841
|
-
return { hash };
|
|
17842
|
-
}
|
|
17843
|
-
/** @deprecated use new `weierstrass()` and `ecdsa()` methods */
|
|
17844
|
-
function createCurve(curveDef, defHash) {
|
|
17845
|
-
const create = (hash) => weierstrass({ ...curveDef, hash: hash });
|
|
17846
|
-
return { ...create(defHash), create };
|
|
17847
|
-
}
|
|
17848
|
-
//# sourceMappingURL=_shortw_utils.js.map
|
|
17849
|
-
;// ./node_modules/@noble/curves/esm/secp256k1.js
|
|
17465
|
+
;// ./node_modules/@noble/curves/secp256k1.js
|
|
17850
17466
|
/**
|
|
17851
17467
|
* SECG secp256k1. See [pdf](https://www.secg.org/sec2-v2.pdf).
|
|
17852
17468
|
*
|
|
@@ -17863,7 +17479,7 @@ function createCurve(curveDef, defHash) {
|
|
|
17863
17479
|
|
|
17864
17480
|
|
|
17865
17481
|
// Seems like generator was produced from some seed:
|
|
17866
|
-
// `
|
|
17482
|
+
// `Pointk1.BASE.multiply(Pointk1.Fn.inv(2n, N)).toAffine().x`
|
|
17867
17483
|
// // gives short x 0x3b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63n
|
|
17868
17484
|
const secp256k1_CURVE = {
|
|
17869
17485
|
p: BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f'),
|
|
@@ -17882,7 +17498,6 @@ const secp256k1_ENDO = {
|
|
|
17882
17498
|
],
|
|
17883
17499
|
};
|
|
17884
17500
|
const secp256k1_0n = /* @__PURE__ */ BigInt(0);
|
|
17885
|
-
const secp256k1_1n = /* @__PURE__ */ BigInt(1);
|
|
17886
17501
|
const secp256k1_2n = /* @__PURE__ */ BigInt(2);
|
|
17887
17502
|
/**
|
|
17888
17503
|
* √n = n^((p+1)/4) for fields p = 3 mod 4. We unwrap the loop and multiply bit-by-bit.
|
|
@@ -17913,21 +17528,28 @@ function sqrtMod(y) {
|
|
|
17913
17528
|
return root;
|
|
17914
17529
|
}
|
|
17915
17530
|
const Fpk1 = Field(secp256k1_CURVE.p, { sqrt: sqrtMod });
|
|
17531
|
+
const Pointk1 = /* @__PURE__ */ weierstrass(secp256k1_CURVE, {
|
|
17532
|
+
Fp: Fpk1,
|
|
17533
|
+
endo: secp256k1_ENDO,
|
|
17534
|
+
});
|
|
17916
17535
|
/**
|
|
17917
|
-
* secp256k1 curve
|
|
17536
|
+
* secp256k1 curve: ECDSA and ECDH methods.
|
|
17918
17537
|
*
|
|
17919
|
-
*
|
|
17538
|
+
* Uses sha256 to hash messages. To use a different hash,
|
|
17539
|
+
* pass `{ prehash: false }` to sign / verify.
|
|
17920
17540
|
*
|
|
17921
17541
|
* @example
|
|
17922
17542
|
* ```js
|
|
17923
|
-
* import { secp256k1 } from '@noble/curves/secp256k1';
|
|
17543
|
+
* import { secp256k1 } from '@noble/curves/secp256k1.js';
|
|
17924
17544
|
* const { secretKey, publicKey } = secp256k1.keygen();
|
|
17925
|
-
* const
|
|
17545
|
+
* // const publicKey = secp256k1.getPublicKey(secretKey);
|
|
17546
|
+
* const msg = new TextEncoder().encode('hello noble');
|
|
17926
17547
|
* const sig = secp256k1.sign(msg, secretKey);
|
|
17927
|
-
* const isValid = secp256k1.verify(sig, msg, publicKey)
|
|
17548
|
+
* const isValid = secp256k1.verify(sig, msg, publicKey);
|
|
17549
|
+
* // const sigKeccak = secp256k1.sign(keccak256(msg), secretKey, { prehash: false });
|
|
17928
17550
|
* ```
|
|
17929
17551
|
*/
|
|
17930
|
-
const secp256k1 =
|
|
17552
|
+
const secp256k1 = /* @__PURE__ */ (/* unused pure expression or super */ null && (ecdsa(Pointk1, sha256)));
|
|
17931
17553
|
// Schnorr signatures are superior to ECDSA from above. Below is Schnorr-specific BIP0340 code.
|
|
17932
17554
|
// https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki
|
|
17933
17555
|
/** An object mapping tags to their tagged hash prefix of [SHA256(tag) | SHA256(tag)] */
|
|
@@ -17935,20 +17557,19 @@ const TAGGED_HASH_PREFIXES = {};
|
|
|
17935
17557
|
function taggedHash(tag, ...messages) {
|
|
17936
17558
|
let tagP = TAGGED_HASH_PREFIXES[tag];
|
|
17937
17559
|
if (tagP === undefined) {
|
|
17938
|
-
const tagH = sha2_sha256(
|
|
17939
|
-
tagP =
|
|
17560
|
+
const tagH = sha2_sha256(asciiToBytes(tag));
|
|
17561
|
+
tagP = utils_concatBytes(tagH, tagH);
|
|
17940
17562
|
TAGGED_HASH_PREFIXES[tag] = tagP;
|
|
17941
17563
|
}
|
|
17942
|
-
return sha2_sha256(
|
|
17564
|
+
return sha2_sha256(utils_concatBytes(tagP, ...messages));
|
|
17943
17565
|
}
|
|
17944
17566
|
// ECDSA compact points are 33-byte. Schnorr is 32: we strip first byte 0x02 or 0x03
|
|
17945
17567
|
const pointToBytes = (point) => point.toBytes(true).slice(1);
|
|
17946
|
-
const Pointk1 = /* @__PURE__ */ (() => secp256k1.Point)();
|
|
17947
17568
|
const hasEven = (y) => y % secp256k1_2n === secp256k1_0n;
|
|
17948
17569
|
// Calculate point, scalar and bytes
|
|
17949
17570
|
function schnorrGetExtPubKey(priv) {
|
|
17950
17571
|
const { Fn, BASE } = Pointk1;
|
|
17951
|
-
const d_ =
|
|
17572
|
+
const d_ = Fn.fromBytes(priv);
|
|
17952
17573
|
const p = BASE.multiply(d_); // P = d'⋅G; 0 < d' < n check is done inside
|
|
17953
17574
|
const scalar = hasEven(p.y) ? d_ : Fn.neg(d_);
|
|
17954
17575
|
return { scalar, bytes: pointToBytes(p) };
|
|
@@ -17989,11 +17610,11 @@ function schnorrGetPublicKey(secretKey) {
|
|
|
17989
17610
|
* Creates Schnorr signature as per BIP340. Verifies itself before returning anything.
|
|
17990
17611
|
* auxRand is optional and is not the sole source of k generation: bad CSPRNG won't be dangerous.
|
|
17991
17612
|
*/
|
|
17992
|
-
function schnorrSign(message, secretKey, auxRand =
|
|
17613
|
+
function schnorrSign(message, secretKey, auxRand = randomBytes(32)) {
|
|
17993
17614
|
const { Fn } = Pointk1;
|
|
17994
|
-
const m =
|
|
17615
|
+
const m = utils_abytes(message, undefined, 'message');
|
|
17995
17616
|
const { bytes: px, scalar: d } = schnorrGetExtPubKey(secretKey); // checks for isWithinCurveOrder
|
|
17996
|
-
const a =
|
|
17617
|
+
const a = utils_abytes(auxRand, 32, 'auxRand'); // Auxiliary random data a: a 32-byte array
|
|
17997
17618
|
const t = Fn.toBytes(d ^ num(taggedHash('BIP0340/aux', a))); // Let t be the byte-wise xor of bytes(d) and hash/aux(a)
|
|
17998
17619
|
const rand = taggedHash('BIP0340/nonce', t, px, m); // Let rand = hash/nonce(t || bytes(P) || m)
|
|
17999
17620
|
// Let k' = int(rand) mod n. Fail if k' = 0. Let R = k'⋅G
|
|
@@ -18012,20 +17633,19 @@ function schnorrSign(message, secretKey, auxRand = utils_randomBytes(32)) {
|
|
|
18012
17633
|
* Will swallow errors & return false except for initial type validation of arguments.
|
|
18013
17634
|
*/
|
|
18014
17635
|
function schnorrVerify(signature, message, publicKey) {
|
|
18015
|
-
const { Fn, BASE } = Pointk1;
|
|
18016
|
-
const sig =
|
|
18017
|
-
const m =
|
|
18018
|
-
const pub =
|
|
17636
|
+
const { Fp, Fn, BASE } = Pointk1;
|
|
17637
|
+
const sig = utils_abytes(signature, 64, 'signature');
|
|
17638
|
+
const m = utils_abytes(message, undefined, 'message');
|
|
17639
|
+
const pub = utils_abytes(publicKey, 32, 'publicKey');
|
|
18019
17640
|
try {
|
|
18020
17641
|
const P = lift_x(num(pub)); // P = lift_x(int(pk)); fail if that fails
|
|
18021
17642
|
const r = num(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r ≥ p.
|
|
18022
|
-
if (!
|
|
17643
|
+
if (!Fp.isValidNot0(r))
|
|
18023
17644
|
return false;
|
|
18024
17645
|
const s = num(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s ≥ n.
|
|
18025
|
-
if (!
|
|
17646
|
+
if (!Fn.isValidNot0(s))
|
|
18026
17647
|
return false;
|
|
18027
|
-
// int(challenge(bytes(r)||bytes(P)||m))%n
|
|
18028
|
-
const e = challenge(Fn.toBytes(r), pointToBytes(P), m);
|
|
17648
|
+
const e = challenge(Fn.toBytes(r), pointToBytes(P), m); // int(challenge(bytes(r)||bytes(P)||m))%n
|
|
18029
17649
|
// R = s⋅G - e⋅P, where -eP == (n-e)P
|
|
18030
17650
|
const R = BASE.multiplyUnsafe(s).add(P.multiplyUnsafe(Fn.neg(e)));
|
|
18031
17651
|
const { x, y } = R.toAffine();
|
|
@@ -18043,7 +17663,7 @@ function schnorrVerify(signature, message, publicKey) {
|
|
|
18043
17663
|
* https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki
|
|
18044
17664
|
* @example
|
|
18045
17665
|
* ```js
|
|
18046
|
-
* import { schnorr } from '@noble/curves/secp256k1';
|
|
17666
|
+
* import { schnorr } from '@noble/curves/secp256k1.js';
|
|
18047
17667
|
* const { secretKey, publicKey } = schnorr.keygen();
|
|
18048
17668
|
* // const publicKey = schnorr.getPublicKey(secretKey);
|
|
18049
17669
|
* const msg = new TextEncoder().encode('hello');
|
|
@@ -18054,31 +17674,20 @@ function schnorrVerify(signature, message, publicKey) {
|
|
|
18054
17674
|
const schnorr = /* @__PURE__ */ (() => {
|
|
18055
17675
|
const size = 32;
|
|
18056
17676
|
const seedLength = 48;
|
|
18057
|
-
const randomSecretKey = (seed =
|
|
18058
|
-
return
|
|
17677
|
+
const randomSecretKey = (seed = randomBytes(seedLength)) => {
|
|
17678
|
+
return modular_mapHashToField(seed, secp256k1_CURVE.n);
|
|
18059
17679
|
};
|
|
18060
|
-
// TODO: remove
|
|
18061
|
-
secp256k1.utils.randomSecretKey;
|
|
18062
|
-
function keygen(seed) {
|
|
18063
|
-
const secretKey = randomSecretKey(seed);
|
|
18064
|
-
return { secretKey, publicKey: schnorrGetPublicKey(secretKey) };
|
|
18065
|
-
}
|
|
18066
17680
|
return {
|
|
18067
|
-
keygen,
|
|
17681
|
+
keygen: curve_createKeygen(randomSecretKey, schnorrGetPublicKey),
|
|
18068
17682
|
getPublicKey: schnorrGetPublicKey,
|
|
18069
17683
|
sign: schnorrSign,
|
|
18070
17684
|
verify: schnorrVerify,
|
|
18071
17685
|
Point: Pointk1,
|
|
18072
17686
|
utils: {
|
|
18073
|
-
randomSecretKey
|
|
18074
|
-
randomPrivateKey: randomSecretKey,
|
|
17687
|
+
randomSecretKey,
|
|
18075
17688
|
taggedHash,
|
|
18076
|
-
// TODO: remove
|
|
18077
17689
|
lift_x,
|
|
18078
17690
|
pointToBytes,
|
|
18079
|
-
numberToBytesBE: numberToBytesBE,
|
|
18080
|
-
bytesToNumberBE: utils_bytesToNumberBE,
|
|
18081
|
-
mod: mod,
|
|
18082
17691
|
},
|
|
18083
17692
|
lengths: {
|
|
18084
17693
|
secretKey: size,
|
|
@@ -18124,7 +17733,7 @@ const mapSWU = /* @__PURE__ */ (/* unused pure expression or super */ null && ((
|
|
|
18124
17733
|
Z: Fpk1.create(BigInt('-11')),
|
|
18125
17734
|
}))()));
|
|
18126
17735
|
/** Hashing / encoding to secp256k1 points / field. RFC 9380 methods. */
|
|
18127
|
-
const secp256k1_hasher = /* @__PURE__ */ (/* unused pure expression or super */ null && ((() => createHasher(
|
|
17736
|
+
const secp256k1_hasher = /* @__PURE__ */ (/* unused pure expression or super */ null && ((() => createHasher(Pointk1, (scalars) => {
|
|
18128
17737
|
const { x, y } = mapSWU(Fpk1.create(scalars[0]));
|
|
18129
17738
|
return isoMap(x, y);
|
|
18130
17739
|
}, {
|
|
@@ -18136,32 +17745,7 @@ const secp256k1_hasher = /* @__PURE__ */ (/* unused pure expression or super */
|
|
|
18136
17745
|
expand: 'xmd',
|
|
18137
17746
|
hash: sha256,
|
|
18138
17747
|
}))()));
|
|
18139
|
-
/** @deprecated use `import { secp256k1_hasher } from '@noble/curves/secp256k1.js';` */
|
|
18140
|
-
const hashToCurve = /* @__PURE__ */ (/* unused pure expression or super */ null && ((() => secp256k1_hasher.hashToCurve)()));
|
|
18141
|
-
/** @deprecated use `import { secp256k1_hasher } from '@noble/curves/secp256k1.js';` */
|
|
18142
|
-
const encodeToCurve = /* @__PURE__ */ (/* unused pure expression or super */ null && ((() => secp256k1_hasher.encodeToCurve)()));
|
|
18143
17748
|
//# sourceMappingURL=secp256k1.js.map
|
|
18144
|
-
;// ./node_modules/@noble/hashes/esm/sha256.js
|
|
18145
|
-
/**
|
|
18146
|
-
* SHA2-256 a.k.a. sha256. In JS, it is the fastest hash, even faster than Blake3.
|
|
18147
|
-
*
|
|
18148
|
-
* To break sha256 using birthday attack, attackers need to try 2^128 hashes.
|
|
18149
|
-
* BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.
|
|
18150
|
-
*
|
|
18151
|
-
* Check out [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).
|
|
18152
|
-
* @module
|
|
18153
|
-
* @deprecated
|
|
18154
|
-
*/
|
|
18155
|
-
|
|
18156
|
-
/** @deprecated Use import from `noble/hashes/sha2` module */
|
|
18157
|
-
const sha256_SHA256 = (/* unused pure expression or super */ null && (SHA256n));
|
|
18158
|
-
/** @deprecated Use import from `noble/hashes/sha2` module */
|
|
18159
|
-
const sha256_sha256 = sha2_sha256;
|
|
18160
|
-
/** @deprecated Use import from `noble/hashes/sha2` module */
|
|
18161
|
-
const sha256_SHA224 = (/* unused pure expression or super */ null && (SHA224n));
|
|
18162
|
-
/** @deprecated Use import from `noble/hashes/sha2` module */
|
|
18163
|
-
const sha256_sha224 = (/* unused pure expression or super */ null && (sha224n));
|
|
18164
|
-
//# sourceMappingURL=sha256.js.map
|
|
18165
17749
|
;// ./src/chat/signature.ts
|
|
18166
17750
|
|
|
18167
17751
|
|
|
@@ -18228,8 +17812,8 @@ function serializeMsg(msg) {
|
|
|
18228
17812
|
return JSON.stringify(msg);
|
|
18229
17813
|
}
|
|
18230
17814
|
function getMsgHash(message) {
|
|
18231
|
-
var msgHash =
|
|
18232
|
-
return
|
|
17815
|
+
var msgHash = sha2_sha256(utf8Encoder.encode(serializeMsg(message)));
|
|
17816
|
+
return utils_bytesToHex(msgHash);
|
|
18233
17817
|
}
|
|
18234
17818
|
|
|
18235
17819
|
// const isRecord = (obj: unknown): obj is Record<string, unknown> => obj instanceof Object
|
|
@@ -18255,10 +17839,10 @@ function getMsgHash(message) {
|
|
|
18255
17839
|
} */
|
|
18256
17840
|
|
|
18257
17841
|
function verifySignature(sig, message, pubKey) {
|
|
18258
|
-
return schnorr.verify(sig, getMsgHash(message), pubKey);
|
|
17842
|
+
return schnorr.verify(utils_hexToBytes(sig), utils_hexToBytes(getMsgHash(message)), utils_hexToBytes(pubKey));
|
|
18259
17843
|
}
|
|
18260
17844
|
function signMsg(message, key) {
|
|
18261
|
-
return
|
|
17845
|
+
return utils_bytesToHex(schnorr.sign(utils_hexToBytes(getMsgHash(message)), utils_hexToBytes(key)));
|
|
18262
17846
|
}
|
|
18263
17847
|
;// ./src/utils/keyHelpers/otherHelpers.ts
|
|
18264
17848
|
|
|
@@ -18486,10 +18070,10 @@ var keyAclBody = function keyAclBody(keyDoc, me) {
|
|
|
18486
18070
|
|
|
18487
18071
|
|
|
18488
18072
|
function generatePrivateKey() {
|
|
18489
|
-
return
|
|
18073
|
+
return utils_bytesToHex(schnorr.utils.randomSecretKey());
|
|
18490
18074
|
}
|
|
18491
18075
|
function generatePublicKey(privateKey) {
|
|
18492
|
-
return
|
|
18076
|
+
return utils_bytesToHex(schnorr.getPublicKey(utils_hexToBytes(privateKey)));
|
|
18493
18077
|
}
|
|
18494
18078
|
|
|
18495
18079
|
/**
|