@rowsncolumns/toolkit 24.4.1
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/LICENSE.md +100 -0
- package/Readme.md +27 -0
- package/dist/cjs/autofilter-condition.d.ts +43 -0
- package/dist/cjs/autofilter-condition.d.ts.map +1 -0
- package/dist/cjs/autofilter-condition.js +155 -0
- package/dist/cjs/csv-export.d.ts +49 -0
- package/dist/cjs/csv-export.d.ts.map +1 -0
- package/dist/cjs/csv-export.js +142 -0
- package/dist/cjs/csv-import-worker.d.ts +16 -0
- package/dist/cjs/csv-import-worker.d.ts.map +1 -0
- package/dist/cjs/csv-import-worker.js +60 -0
- package/dist/cjs/csv-import.d.ts +38 -0
- package/dist/cjs/csv-import.d.ts.map +1 -0
- package/dist/cjs/csv-import.js +166 -0
- package/dist/cjs/csv-parser/helpers.d.ts +14 -0
- package/dist/cjs/csv-parser/helpers.d.ts.map +1 -0
- package/dist/cjs/csv-parser/helpers.js +145 -0
- package/dist/cjs/csv-parser/types.d.ts +66 -0
- package/dist/cjs/csv-parser/types.d.ts.map +1 -0
- package/dist/cjs/csv-parser/types.js +14 -0
- package/dist/cjs/csv-parser/worker.d.ts +2 -0
- package/dist/cjs/csv-parser/worker.d.ts.map +1 -0
- package/dist/cjs/csv-parser/worker.js +200 -0
- package/dist/cjs/excel-export.d.ts +11 -0
- package/dist/cjs/excel-export.d.ts.map +1 -0
- package/dist/cjs/excel-export.js +22 -0
- package/dist/cjs/excel-import-session.d.ts +51 -0
- package/dist/cjs/excel-import-session.d.ts.map +1 -0
- package/dist/cjs/excel-import-session.js +307 -0
- package/dist/cjs/excel-import-worker.d.ts +7 -0
- package/dist/cjs/excel-import-worker.d.ts.map +1 -0
- package/dist/cjs/excel-import-worker.js +119 -0
- package/dist/cjs/excel-parser/builtin-numfmts.d.ts +24 -0
- package/dist/cjs/excel-parser/builtin-numfmts.d.ts.map +1 -0
- package/dist/cjs/excel-parser/builtin-numfmts.js +63 -0
- package/dist/cjs/excel-parser/cfb-decryptor.d.ts +53 -0
- package/dist/cjs/excel-parser/cfb-decryptor.d.ts.map +1 -0
- package/dist/cjs/excel-parser/cfb-decryptor.js +553 -0
- package/dist/cjs/excel-parser/cfb-encryptor.d.ts +23 -0
- package/dist/cjs/excel-parser/cfb-encryptor.d.ts.map +1 -0
- package/dist/cjs/excel-parser/cfb-encryptor.js +200 -0
- package/dist/cjs/excel-parser/dv-cell-stamp.d.ts +29 -0
- package/dist/cjs/excel-parser/dv-cell-stamp.d.ts.map +1 -0
- package/dist/cjs/excel-parser/dv-cell-stamp.js +239 -0
- package/dist/cjs/excel-parser/helpers.d.ts +28 -0
- package/dist/cjs/excel-parser/helpers.d.ts.map +1 -0
- package/dist/cjs/excel-parser/helpers.js +188 -0
- package/dist/cjs/excel-parser/interface.d.ts +179 -0
- package/dist/cjs/excel-parser/interface.d.ts.map +1 -0
- package/dist/cjs/excel-parser/interface.js +1 -0
- package/dist/cjs/excel-parser/plugins/base/index.d.ts +31 -0
- package/dist/cjs/excel-parser/plugins/base/index.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/base/index.js +101 -0
- package/dist/cjs/excel-parser/plugins/ods/conditional-formatting.d.ts +16 -0
- package/dist/cjs/excel-parser/plugins/ods/conditional-formatting.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/ods/conditional-formatting.js +488 -0
- package/dist/cjs/excel-parser/plugins/ods/data-validations.d.ts +15 -0
- package/dist/cjs/excel-parser/plugins/ods/data-validations.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/ods/data-validations.js +353 -0
- package/dist/cjs/excel-parser/plugins/ods/formula.d.ts +8 -0
- package/dist/cjs/excel-parser/plugins/ods/formula.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/ods/formula.js +82 -0
- package/dist/cjs/excel-parser/plugins/ods/index.d.ts +122 -0
- package/dist/cjs/excel-parser/plugins/ods/index.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/ods/index.js +3642 -0
- package/dist/cjs/excel-parser/plugins/ods/sparklines.d.ts +25 -0
- package/dist/cjs/excel-parser/plugins/ods/sparklines.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/ods/sparklines.js +221 -0
- package/dist/cjs/excel-parser/plugins/ods/styles.d.ts +60 -0
- package/dist/cjs/excel-parser/plugins/ods/styles.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/ods/styles.js +808 -0
- package/dist/cjs/excel-parser/plugins/ods/types.d.ts +7 -0
- package/dist/cjs/excel-parser/plugins/ods/types.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/ods/types.js +1 -0
- package/dist/cjs/excel-parser/plugins/xls/index.d.ts +5 -0
- package/dist/cjs/excel-parser/plugins/xls/index.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xls/index.js +19 -0
- package/dist/cjs/excel-parser/plugins/xlsb/biff-record-reader.d.ts +13 -0
- package/dist/cjs/excel-parser/plugins/xlsb/biff-record-reader.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsb/biff-record-reader.js +49 -0
- package/dist/cjs/excel-parser/plugins/xlsb/index.d.ts +117 -0
- package/dist/cjs/excel-parser/plugins/xlsb/index.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsb/index.js +2972 -0
- package/dist/cjs/excel-parser/plugins/xlsb/rgce-parser.d.ts +18 -0
- package/dist/cjs/excel-parser/plugins/xlsb/rgce-parser.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsb/rgce-parser.js +527 -0
- package/dist/cjs/excel-parser/plugins/xlsm/index.d.ts +5 -0
- package/dist/cjs/excel-parser/plugins/xlsm/index.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsm/index.js +10 -0
- package/dist/cjs/excel-parser/plugins/xlsx/charts.d.ts +60 -0
- package/dist/cjs/excel-parser/plugins/xlsx/charts.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/charts.js +2178 -0
- package/dist/cjs/excel-parser/plugins/xlsx/conditional-formatting.d.ts +18 -0
- package/dist/cjs/excel-parser/plugins/xlsx/conditional-formatting.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/conditional-formatting.js +620 -0
- package/dist/cjs/excel-parser/plugins/xlsx/data-validations.d.ts +4 -0
- package/dist/cjs/excel-parser/plugins/xlsx/data-validations.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/data-validations.js +515 -0
- package/dist/cjs/excel-parser/plugins/xlsx/drawing.d.ts +39 -0
- package/dist/cjs/excel-parser/plugins/xlsx/drawing.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/drawing.js +941 -0
- package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts +320 -0
- package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/index.js +6056 -0
- package/dist/cjs/excel-parser/plugins/xlsx/numfmt.d.ts +2 -0
- package/dist/cjs/excel-parser/plugins/xlsx/numfmt.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/numfmt.js +3 -0
- package/dist/cjs/excel-parser/plugins/xlsx/pivots.d.ts +40 -0
- package/dist/cjs/excel-parser/plugins/xlsx/pivots.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/pivots.js +342 -0
- package/dist/cjs/excel-parser/plugins/xlsx/relationships.d.ts +8 -0
- package/dist/cjs/excel-parser/plugins/xlsx/relationships.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/relationships.js +26 -0
- package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.d.ts +26 -0
- package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.js +59 -0
- package/dist/cjs/excel-parser/plugins/xlsx/styles.d.ts +44 -0
- package/dist/cjs/excel-parser/plugins/xlsx/styles.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/styles.js +1377 -0
- package/dist/cjs/excel-parser/plugins/xlsx/theme.d.ts +50 -0
- package/dist/cjs/excel-parser/plugins/xlsx/theme.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/theme.js +150 -0
- package/dist/cjs/excel-parser/plugins/xlsx/threaded-comments.d.ts +47 -0
- package/dist/cjs/excel-parser/plugins/xlsx/threaded-comments.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/threaded-comments.js +141 -0
- package/dist/cjs/excel-parser/plugins/xlsx/value-type-detection.d.ts +44 -0
- package/dist/cjs/excel-parser/plugins/xlsx/value-type-detection.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/value-type-detection.js +407 -0
- package/dist/cjs/excel-parser/registry.d.ts +5 -0
- package/dist/cjs/excel-parser/registry.d.ts.map +1 -0
- package/dist/cjs/excel-parser/registry.js +21 -0
- package/dist/cjs/excel-parser/style-registry.d.ts +51 -0
- package/dist/cjs/excel-parser/style-registry.d.ts.map +1 -0
- package/dist/cjs/excel-parser/style-registry.js +175 -0
- package/dist/cjs/excel-parser/theme-default.d.ts +3 -0
- package/dist/cjs/excel-parser/theme-default.d.ts.map +1 -0
- package/dist/cjs/excel-parser/theme-default.js +19 -0
- package/dist/cjs/excel-parser/types.d.ts +365 -0
- package/dist/cjs/excel-parser/types.d.ts.map +1 -0
- package/dist/cjs/excel-parser/types.js +59 -0
- package/dist/cjs/excel-parser/utils.d.ts +6 -0
- package/dist/cjs/excel-parser/utils.d.ts.map +1 -0
- package/dist/cjs/excel-parser/utils.js +30 -0
- package/dist/cjs/excel-parser/workbook.d.ts +51 -0
- package/dist/cjs/excel-parser/workbook.d.ts.map +1 -0
- package/dist/cjs/excel-parser/workbook.js +317 -0
- package/dist/cjs/excel-parser/worker.d.ts +2 -0
- package/dist/cjs/excel-parser/worker.d.ts.map +1 -0
- package/dist/cjs/excel-parser/worker.js +1149 -0
- package/dist/cjs/excel-parser/zip-parser-streaming.d.ts +13 -0
- package/dist/cjs/excel-parser/zip-parser-streaming.d.ts.map +1 -0
- package/dist/cjs/excel-parser/zip-parser-streaming.js +200 -0
- package/dist/cjs/excel-parser/zip-parser.d.ts +11 -0
- package/dist/cjs/excel-parser/zip-parser.d.ts.map +1 -0
- package/dist/cjs/excel-parser/zip-parser.js +49 -0
- package/dist/cjs/exporter/invalid-data-validation.d.ts +19 -0
- package/dist/cjs/exporter/invalid-data-validation.d.ts.map +1 -0
- package/dist/cjs/exporter/invalid-data-validation.js +39 -0
- package/dist/cjs/exporter/ods/ods-export.d.ts +26 -0
- package/dist/cjs/exporter/ods/ods-export.d.ts.map +1 -0
- package/dist/cjs/exporter/ods/ods-export.js +3714 -0
- package/dist/cjs/exporter/ods/sparkline-builder.d.ts +33 -0
- package/dist/cjs/exporter/ods/sparkline-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/ods/sparkline-builder.js +221 -0
- package/dist/cjs/exporter/xlsx/chart-builder.d.ts +3 -0
- package/dist/cjs/exporter/xlsx/chart-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/chart-builder.js +1901 -0
- package/dist/cjs/exporter/xlsx/chart-templates.d.ts +1781 -0
- package/dist/cjs/exporter/xlsx/chart-templates.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/chart-templates.js +1798 -0
- package/dist/cjs/exporter/xlsx/future-functions.d.ts +10 -0
- package/dist/cjs/exporter/xlsx/future-functions.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/future-functions.js +264 -0
- package/dist/cjs/exporter/xlsx/pivot-builder.d.ts +58 -0
- package/dist/cjs/exporter/xlsx/pivot-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/pivot-builder.js +277 -0
- package/dist/cjs/exporter/xlsx/power-query-builder.d.ts +26 -0
- package/dist/cjs/exporter/xlsx/power-query-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/power-query-builder.js +306 -0
- package/dist/cjs/exporter/xlsx/slicer-builder.d.ts +11 -0
- package/dist/cjs/exporter/xlsx/slicer-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/slicer-builder.js +87 -0
- package/dist/cjs/exporter/xlsx/sparkline-builder.d.ts +61 -0
- package/dist/cjs/exporter/xlsx/sparkline-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/sparkline-builder.js +489 -0
- package/dist/cjs/exporter/xlsx/style-builder.d.ts +93 -0
- package/dist/cjs/exporter/xlsx/style-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/style-builder.js +813 -0
- package/dist/cjs/exporter/xlsx/threaded-comments-builder.d.ts +58 -0
- package/dist/cjs/exporter/xlsx/threaded-comments-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/threaded-comments-builder.js +189 -0
- package/dist/cjs/exporter/xlsx/xlsx-export.d.ts +121 -0
- package/dist/cjs/exporter/xlsx/xlsx-export.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/xlsx-export.js +4596 -0
- package/dist/cjs/helpers/theme-xml-generator.d.ts +8 -0
- package/dist/cjs/helpers/theme-xml-generator.d.ts.map +1 -0
- package/dist/cjs/helpers/theme-xml-generator.js +33 -0
- package/dist/cjs/helpers.d.ts +34 -0
- package/dist/cjs/helpers.d.ts.map +1 -0
- package/dist/cjs/helpers.js +189 -0
- package/dist/cjs/index.d.ts +16 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +15 -0
- package/dist/cjs/indexed-colors.d.ts +2 -0
- package/dist/cjs/indexed-colors.d.ts.map +1 -0
- package/dist/cjs/indexed-colors.js +75 -0
- package/dist/cjs/ods-export.d.ts +24 -0
- package/dist/cjs/ods-export.d.ts.map +1 -0
- package/dist/cjs/ods-export.js +23 -0
- package/dist/cjs/parse.d.ts +24 -0
- package/dist/cjs/parse.d.ts.map +1 -0
- package/dist/cjs/parse.js +68 -0
- package/dist/cjs/power-query.d.ts +41 -0
- package/dist/cjs/power-query.d.ts.map +1 -0
- package/dist/cjs/power-query.js +22 -0
- package/dist/cjs/server.d.ts +9 -0
- package/dist/cjs/server.d.ts.map +1 -0
- package/dist/cjs/server.js +8 -0
- package/dist/cjs/theme1.d.ts +3 -0
- package/dist/cjs/theme1.d.ts.map +1 -0
- package/dist/cjs/theme1.js +2 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/cjs/types.d.ts +14 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +14 -0
- package/dist/cjs/vitest.config.d.ts +3 -0
- package/dist/cjs/vitest.config.d.ts.map +1 -0
- package/dist/cjs/vitest.config.js +16 -0
- package/dist/esm/autofilter-condition.d.ts +43 -0
- package/dist/esm/autofilter-condition.d.ts.map +1 -0
- package/dist/esm/autofilter-condition.js +145 -0
- package/dist/esm/csv-export.d.ts +49 -0
- package/dist/esm/csv-export.d.ts.map +1 -0
- package/dist/esm/csv-export.js +126 -0
- package/dist/esm/csv-import-worker.d.ts +16 -0
- package/dist/esm/csv-import-worker.d.ts.map +1 -0
- package/dist/esm/csv-import-worker.js +60 -0
- package/dist/esm/csv-import.d.ts +38 -0
- package/dist/esm/csv-import.d.ts.map +1 -0
- package/dist/esm/csv-import.js +132 -0
- package/dist/esm/csv-parser/helpers.d.ts +14 -0
- package/dist/esm/csv-parser/helpers.d.ts.map +1 -0
- package/dist/esm/csv-parser/helpers.js +0 -0
- package/dist/esm/csv-parser/types.d.ts +66 -0
- package/dist/esm/csv-parser/types.d.ts.map +1 -0
- package/dist/esm/csv-parser/types.js +14 -0
- package/dist/esm/csv-parser/worker.d.ts +2 -0
- package/dist/esm/csv-parser/worker.d.ts.map +1 -0
- package/dist/esm/csv-parser/worker.js +154 -0
- package/dist/esm/excel-export.d.ts +11 -0
- package/dist/esm/excel-export.d.ts.map +1 -0
- package/dist/esm/excel-export.js +13 -0
- package/dist/esm/excel-import-session.d.ts +51 -0
- package/dist/esm/excel-import-session.d.ts.map +1 -0
- package/dist/esm/excel-import-session.js +255 -0
- package/dist/esm/excel-import-worker.d.ts +7 -0
- package/dist/esm/excel-import-worker.d.ts.map +1 -0
- package/dist/esm/excel-import-worker.js +116 -0
- package/dist/esm/excel-parser/builtin-numfmts.d.ts +24 -0
- package/dist/esm/excel-parser/builtin-numfmts.d.ts.map +1 -0
- package/dist/esm/excel-parser/builtin-numfmts.js +59 -0
- package/dist/esm/excel-parser/cfb-decryptor.d.ts +53 -0
- package/dist/esm/excel-parser/cfb-decryptor.d.ts.map +1 -0
- package/dist/esm/excel-parser/cfb-decryptor.js +493 -0
- package/dist/esm/excel-parser/cfb-encryptor.d.ts +23 -0
- package/dist/esm/excel-parser/cfb-encryptor.d.ts.map +1 -0
- package/dist/esm/excel-parser/cfb-encryptor.js +181 -0
- package/dist/esm/excel-parser/dv-cell-stamp.d.ts +29 -0
- package/dist/esm/excel-parser/dv-cell-stamp.d.ts.map +1 -0
- package/dist/esm/excel-parser/dv-cell-stamp.js +155 -0
- package/dist/esm/excel-parser/helpers.d.ts +28 -0
- package/dist/esm/excel-parser/helpers.d.ts.map +1 -0
- package/dist/esm/excel-parser/helpers.js +160 -0
- package/dist/esm/excel-parser/interface.d.ts +179 -0
- package/dist/esm/excel-parser/interface.d.ts.map +1 -0
- package/dist/esm/excel-parser/interface.js +1 -0
- package/dist/esm/excel-parser/plugins/base/index.d.ts +31 -0
- package/dist/esm/excel-parser/plugins/base/index.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/base/index.js +64 -0
- package/dist/esm/excel-parser/plugins/ods/conditional-formatting.d.ts +16 -0
- package/dist/esm/excel-parser/plugins/ods/conditional-formatting.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/ods/conditional-formatting.js +405 -0
- package/dist/esm/excel-parser/plugins/ods/data-validations.d.ts +15 -0
- package/dist/esm/excel-parser/plugins/ods/data-validations.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/ods/data-validations.js +331 -0
- package/dist/esm/excel-parser/plugins/ods/formula.d.ts +8 -0
- package/dist/esm/excel-parser/plugins/ods/formula.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/ods/formula.js +82 -0
- package/dist/esm/excel-parser/plugins/ods/index.d.ts +122 -0
- package/dist/esm/excel-parser/plugins/ods/index.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/ods/index.js +2896 -0
- package/dist/esm/excel-parser/plugins/ods/sparklines.d.ts +25 -0
- package/dist/esm/excel-parser/plugins/ods/sparklines.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/ods/sparklines.js +188 -0
- package/dist/esm/excel-parser/plugins/ods/styles.d.ts +60 -0
- package/dist/esm/excel-parser/plugins/ods/styles.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/ods/styles.js +732 -0
- package/dist/esm/excel-parser/plugins/ods/types.d.ts +7 -0
- package/dist/esm/excel-parser/plugins/ods/types.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/ods/types.js +1 -0
- package/dist/esm/excel-parser/plugins/xls/index.d.ts +5 -0
- package/dist/esm/excel-parser/plugins/xls/index.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xls/index.js +7 -0
- package/dist/esm/excel-parser/plugins/xlsb/biff-record-reader.d.ts +13 -0
- package/dist/esm/excel-parser/plugins/xlsb/biff-record-reader.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsb/biff-record-reader.js +48 -0
- package/dist/esm/excel-parser/plugins/xlsb/index.d.ts +117 -0
- package/dist/esm/excel-parser/plugins/xlsb/index.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsb/index.js +2339 -0
- package/dist/esm/excel-parser/plugins/xlsb/rgce-parser.d.ts +18 -0
- package/dist/esm/excel-parser/plugins/xlsb/rgce-parser.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsb/rgce-parser.js +522 -0
- package/dist/esm/excel-parser/plugins/xlsm/index.d.ts +5 -0
- package/dist/esm/excel-parser/plugins/xlsm/index.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsm/index.js +6 -0
- package/dist/esm/excel-parser/plugins/xlsx/charts.d.ts +60 -0
- package/dist/esm/excel-parser/plugins/xlsx/charts.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/charts.js +2036 -0
- package/dist/esm/excel-parser/plugins/xlsx/conditional-formatting.d.ts +18 -0
- package/dist/esm/excel-parser/plugins/xlsx/conditional-formatting.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/conditional-formatting.js +621 -0
- package/dist/esm/excel-parser/plugins/xlsx/data-validations.d.ts +4 -0
- package/dist/esm/excel-parser/plugins/xlsx/data-validations.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/data-validations.js +493 -0
- package/dist/esm/excel-parser/plugins/xlsx/drawing.d.ts +39 -0
- package/dist/esm/excel-parser/plugins/xlsx/drawing.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/drawing.js +905 -0
- package/dist/esm/excel-parser/plugins/xlsx/index.d.ts +320 -0
- package/dist/esm/excel-parser/plugins/xlsx/index.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/index.js +4654 -0
- package/dist/esm/excel-parser/plugins/xlsx/numfmt.d.ts +2 -0
- package/dist/esm/excel-parser/plugins/xlsx/numfmt.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/numfmt.js +3 -0
- package/dist/esm/excel-parser/plugins/xlsx/pivots.d.ts +40 -0
- package/dist/esm/excel-parser/plugins/xlsx/pivots.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/pivots.js +254 -0
- package/dist/esm/excel-parser/plugins/xlsx/relationships.d.ts +8 -0
- package/dist/esm/excel-parser/plugins/xlsx/relationships.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/relationships.js +13 -0
- package/dist/esm/excel-parser/plugins/xlsx/sheet-views.d.ts +26 -0
- package/dist/esm/excel-parser/plugins/xlsx/sheet-views.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/sheet-views.js +64 -0
- package/dist/esm/excel-parser/plugins/xlsx/styles.d.ts +44 -0
- package/dist/esm/excel-parser/plugins/xlsx/styles.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/styles.js +1365 -0
- package/dist/esm/excel-parser/plugins/xlsx/theme.d.ts +50 -0
- package/dist/esm/excel-parser/plugins/xlsx/theme.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/theme.js +127 -0
- package/dist/esm/excel-parser/plugins/xlsx/threaded-comments.d.ts +47 -0
- package/dist/esm/excel-parser/plugins/xlsx/threaded-comments.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/threaded-comments.js +103 -0
- package/dist/esm/excel-parser/plugins/xlsx/value-type-detection.d.ts +44 -0
- package/dist/esm/excel-parser/plugins/xlsx/value-type-detection.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/value-type-detection.js +399 -0
- package/dist/esm/excel-parser/registry.d.ts +5 -0
- package/dist/esm/excel-parser/registry.d.ts.map +1 -0
- package/dist/esm/excel-parser/registry.js +20 -0
- package/dist/esm/excel-parser/style-registry.d.ts +51 -0
- package/dist/esm/excel-parser/style-registry.d.ts.map +1 -0
- package/dist/esm/excel-parser/style-registry.js +163 -0
- package/dist/esm/excel-parser/theme-default.d.ts +3 -0
- package/dist/esm/excel-parser/theme-default.d.ts.map +1 -0
- package/dist/esm/excel-parser/theme-default.js +19 -0
- package/dist/esm/excel-parser/types.d.ts +365 -0
- package/dist/esm/excel-parser/types.d.ts.map +1 -0
- package/dist/esm/excel-parser/types.js +59 -0
- package/dist/esm/excel-parser/utils.d.ts +6 -0
- package/dist/esm/excel-parser/utils.d.ts.map +1 -0
- package/dist/esm/excel-parser/utils.js +25 -0
- package/dist/esm/excel-parser/workbook.d.ts +51 -0
- package/dist/esm/excel-parser/workbook.d.ts.map +1 -0
- package/dist/esm/excel-parser/workbook.js +192 -0
- package/dist/esm/excel-parser/worker.d.ts +2 -0
- package/dist/esm/excel-parser/worker.d.ts.map +1 -0
- package/dist/esm/excel-parser/worker.js +862 -0
- package/dist/esm/excel-parser/zip-parser-streaming.d.ts +13 -0
- package/dist/esm/excel-parser/zip-parser-streaming.d.ts.map +1 -0
- package/dist/esm/excel-parser/zip-parser-streaming.js +119 -0
- package/dist/esm/excel-parser/zip-parser.d.ts +11 -0
- package/dist/esm/excel-parser/zip-parser.d.ts.map +1 -0
- package/dist/esm/excel-parser/zip-parser.js +43 -0
- package/dist/esm/exporter/invalid-data-validation.d.ts +19 -0
- package/dist/esm/exporter/invalid-data-validation.d.ts.map +1 -0
- package/dist/esm/exporter/invalid-data-validation.js +37 -0
- package/dist/esm/exporter/ods/ods-export.d.ts +26 -0
- package/dist/esm/exporter/ods/ods-export.d.ts.map +1 -0
- package/dist/esm/exporter/ods/ods-export.js +3238 -0
- package/dist/esm/exporter/ods/sparkline-builder.d.ts +33 -0
- package/dist/esm/exporter/ods/sparkline-builder.d.ts.map +1 -0
- package/dist/esm/exporter/ods/sparkline-builder.js +165 -0
- package/dist/esm/exporter/xlsx/chart-builder.d.ts +3 -0
- package/dist/esm/exporter/xlsx/chart-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/chart-builder.js +1805 -0
- package/dist/esm/exporter/xlsx/chart-templates.d.ts +1781 -0
- package/dist/esm/exporter/xlsx/chart-templates.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/chart-templates.js +1798 -0
- package/dist/esm/exporter/xlsx/future-functions.d.ts +10 -0
- package/dist/esm/exporter/xlsx/future-functions.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/future-functions.js +264 -0
- package/dist/esm/exporter/xlsx/pivot-builder.d.ts +58 -0
- package/dist/esm/exporter/xlsx/pivot-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/pivot-builder.js +230 -0
- package/dist/esm/exporter/xlsx/power-query-builder.d.ts +26 -0
- package/dist/esm/exporter/xlsx/power-query-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/power-query-builder.js +257 -0
- package/dist/esm/exporter/xlsx/slicer-builder.d.ts +11 -0
- package/dist/esm/exporter/xlsx/slicer-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/slicer-builder.js +84 -0
- package/dist/esm/exporter/xlsx/sparkline-builder.d.ts +61 -0
- package/dist/esm/exporter/xlsx/sparkline-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/sparkline-builder.js +437 -0
- package/dist/esm/exporter/xlsx/style-builder.d.ts +93 -0
- package/dist/esm/exporter/xlsx/style-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/style-builder.js +795 -0
- package/dist/esm/exporter/xlsx/threaded-comments-builder.d.ts +58 -0
- package/dist/esm/exporter/xlsx/threaded-comments-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/threaded-comments-builder.js +175 -0
- package/dist/esm/exporter/xlsx/xlsx-export.d.ts +121 -0
- package/dist/esm/exporter/xlsx/xlsx-export.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/xlsx-export.js +4062 -0
- package/dist/esm/helpers/theme-xml-generator.d.ts +8 -0
- package/dist/esm/helpers/theme-xml-generator.d.ts.map +1 -0
- package/dist/esm/helpers/theme-xml-generator.js +33 -0
- package/dist/esm/helpers.d.ts +34 -0
- package/dist/esm/helpers.d.ts.map +1 -0
- package/dist/esm/helpers.js +182 -0
- package/dist/esm/index.d.ts +16 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +15 -0
- package/dist/esm/indexed-colors.d.ts +2 -0
- package/dist/esm/indexed-colors.d.ts.map +1 -0
- package/dist/esm/indexed-colors.js +75 -0
- package/dist/esm/ods-export.d.ts +24 -0
- package/dist/esm/ods-export.d.ts.map +1 -0
- package/dist/esm/ods-export.js +12 -0
- package/dist/esm/parse.d.ts +24 -0
- package/dist/esm/parse.d.ts.map +1 -0
- package/dist/esm/parse.js +55 -0
- package/dist/esm/power-query.d.ts +41 -0
- package/dist/esm/power-query.d.ts.map +1 -0
- package/dist/esm/power-query.js +19 -0
- package/dist/esm/server.d.ts +9 -0
- package/dist/esm/server.d.ts.map +1 -0
- package/dist/esm/server.js +8 -0
- package/dist/esm/theme1.d.ts +3 -0
- package/dist/esm/theme1.d.ts.map +1 -0
- package/dist/esm/theme1.js +2 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
- package/dist/esm/types.d.ts +14 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +14 -0
- package/dist/esm/vitest.config.d.ts +3 -0
- package/dist/esm/vitest.config.d.ts.map +1 -0
- package/dist/esm/vitest.config.js +16 -0
- package/package.json +62 -0
- package/xlsx.d.ts +52 -0
|
@@ -0,0 +1,553 @@
|
|
|
1
|
+
import { __awaiter, __generator, __values } from "tslib";
|
|
2
|
+
/// <reference path="../xlsx.d.ts" />
|
|
3
|
+
import { CFB } from "xlsx/xlsx.mjs";
|
|
4
|
+
import { sha1 } from "@noble/hashes/sha1";
|
|
5
|
+
import { sha256 } from "@noble/hashes/sha256";
|
|
6
|
+
import { sha384, sha512 } from "@noble/hashes/sha512";
|
|
7
|
+
import { cbc, ecb } from "@noble/ciphers/aes";
|
|
8
|
+
var BLOCK_KEY_VERIFIER_INPUT = new Uint8Array([
|
|
9
|
+
0xfe, 0xa7, 0xd2, 0x76, 0x3b, 0x4b, 0x9e, 0x79,
|
|
10
|
+
]);
|
|
11
|
+
var BLOCK_KEY_VERIFIER_HASH = new Uint8Array([
|
|
12
|
+
0xd7, 0xaa, 0x0f, 0x6d, 0x30, 0x61, 0x34, 0x4e,
|
|
13
|
+
]);
|
|
14
|
+
var BLOCK_KEY_ENCRYPTION_KEY = new Uint8Array([
|
|
15
|
+
0x14, 0x6e, 0x0b, 0xe7, 0xab, 0xac, 0xd0, 0xd6,
|
|
16
|
+
]);
|
|
17
|
+
export var LEGACY_XLS_UNSUPPORTED_MESSAGE = "This file is a legacy Excel 97-2003 (.xls) workbook, which is not supported. Please open it in Excel and save it as .xlsx, then try again.";
|
|
18
|
+
/**
|
|
19
|
+
* Inspects a CFB container's directory to decide whether it is an
|
|
20
|
+
* Office-encrypted OOXML package (`EncryptionInfo` stream present) or an
|
|
21
|
+
* unencrypted legacy BIFF `.xls` workbook (`Workbook`/`Book` stream present
|
|
22
|
+
* without `EncryptionInfo`). Returns "unknown" for anything else, including
|
|
23
|
+
* containers that fail to parse — callers should fall back to their existing
|
|
24
|
+
* behavior in that case.
|
|
25
|
+
*/
|
|
26
|
+
export var detectCfbContainerKind = function (source) { return __awaiter(void 0, void 0, void 0, function () {
|
|
27
|
+
var buffer, _a, cfb, streamNames, _b;
|
|
28
|
+
return __generator(this, function (_c) {
|
|
29
|
+
switch (_c.label) {
|
|
30
|
+
case 0:
|
|
31
|
+
_c.trys.push([0, 4, , 5]);
|
|
32
|
+
if (!(source instanceof File)) return [3 /*break*/, 2];
|
|
33
|
+
return [4 /*yield*/, source.arrayBuffer()];
|
|
34
|
+
case 1:
|
|
35
|
+
_a = _c.sent();
|
|
36
|
+
return [3 /*break*/, 3];
|
|
37
|
+
case 2:
|
|
38
|
+
_a = source;
|
|
39
|
+
_c.label = 3;
|
|
40
|
+
case 3:
|
|
41
|
+
buffer = _a;
|
|
42
|
+
cfb = CFB.read(new Uint8Array(buffer), { type: "array" });
|
|
43
|
+
streamNames = new Set(cfb.FileIndex.map(function (entry) { return entry.name; }));
|
|
44
|
+
if (streamNames.has("EncryptionInfo")) {
|
|
45
|
+
return [2 /*return*/, "encrypted-ooxml"];
|
|
46
|
+
}
|
|
47
|
+
if (streamNames.has("Workbook") || streamNames.has("Book")) {
|
|
48
|
+
return [2 /*return*/, "legacy-xls"];
|
|
49
|
+
}
|
|
50
|
+
return [2 /*return*/, "unknown"];
|
|
51
|
+
case 4:
|
|
52
|
+
_b = _c.sent();
|
|
53
|
+
return [2 /*return*/, "unknown"];
|
|
54
|
+
case 5: return [2 /*return*/];
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}); };
|
|
58
|
+
var CFBDecryptor = /** @class */ (function () {
|
|
59
|
+
function CFBDecryptor() {
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Decrypts a CFB-encrypted XLSX file
|
|
63
|
+
* @param source The encrypted file or array buffer
|
|
64
|
+
* @param password The password to decrypt with
|
|
65
|
+
* @returns The decrypted XLSX data as ArrayBuffer
|
|
66
|
+
*/
|
|
67
|
+
CFBDecryptor.decrypt = function (source, password) {
|
|
68
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
69
|
+
var buffer, _a, uint8Array, cfb, infoContent, view, versionMajor, versionMinor, detail;
|
|
70
|
+
return __generator(this, function (_b) {
|
|
71
|
+
switch (_b.label) {
|
|
72
|
+
case 0:
|
|
73
|
+
if (!(source instanceof File)) return [3 /*break*/, 2];
|
|
74
|
+
return [4 /*yield*/, source.arrayBuffer()];
|
|
75
|
+
case 1:
|
|
76
|
+
_a = _b.sent();
|
|
77
|
+
return [3 /*break*/, 3];
|
|
78
|
+
case 2:
|
|
79
|
+
_a = source;
|
|
80
|
+
_b.label = 3;
|
|
81
|
+
case 3:
|
|
82
|
+
buffer = _a;
|
|
83
|
+
uint8Array = new Uint8Array(buffer);
|
|
84
|
+
cfb = CFB.read(uint8Array, { type: "array" });
|
|
85
|
+
infoContent = this.getEncryptionInfoContent(cfb);
|
|
86
|
+
if (!infoContent) {
|
|
87
|
+
throw new Error("Could not parse encryption information");
|
|
88
|
+
}
|
|
89
|
+
view = new DataView(infoContent.buffer, infoContent.byteOffset, infoContent.byteLength);
|
|
90
|
+
versionMajor = view.getUint16(0, true);
|
|
91
|
+
versionMinor = view.getUint16(2, true);
|
|
92
|
+
if (versionMajor === 4 && versionMinor === 4) {
|
|
93
|
+
return [2 /*return*/, this.decryptAgile(cfb, password)];
|
|
94
|
+
}
|
|
95
|
+
if (versionMinor === 2 && versionMajor >= 2 && versionMajor <= 4) {
|
|
96
|
+
return [2 /*return*/, this.decryptStandardFamily(cfb, infoContent, password)];
|
|
97
|
+
}
|
|
98
|
+
detail = versionMinor === 3 ? " (extensible encryption)" : "";
|
|
99
|
+
throw new Error("Unsupported workbook encryption version ".concat(versionMajor, ".").concat(versionMinor).concat(detail, ". ") +
|
|
100
|
+
"Supported: agile (4.4), standard AES (x.2), RC4 CryptoAPI.");
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
};
|
|
105
|
+
CFBDecryptor.decryptAgile = function (cfb, password) {
|
|
106
|
+
var encryptionInfo = this.parseEncryptionInfo(cfb);
|
|
107
|
+
if (!encryptionInfo) {
|
|
108
|
+
throw new Error("Could not parse encryption information");
|
|
109
|
+
}
|
|
110
|
+
// Derive key from password
|
|
111
|
+
var passwordDerivedKey = this.deriveKey(password, encryptionInfo);
|
|
112
|
+
// Verify password by decrypting verifier
|
|
113
|
+
var isValid = this.verifyPassword(passwordDerivedKey, encryptionInfo);
|
|
114
|
+
if (!isValid) {
|
|
115
|
+
throw new Error("Incorrect password");
|
|
116
|
+
}
|
|
117
|
+
// Decrypt the encrypted key value to get the actual encryption key
|
|
118
|
+
var encryptionKey = this.decryptEncryptedKey(passwordDerivedKey, encryptionInfo);
|
|
119
|
+
// Decrypt the package using the decrypted encryption key
|
|
120
|
+
var encryptedPackage = this.getEncryptedPackage(cfb);
|
|
121
|
+
return this.decryptPackage(encryptedPackage, encryptionKey, encryptionInfo);
|
|
122
|
+
};
|
|
123
|
+
CFBDecryptor.getEncryptionInfoContent = function (cfb) {
|
|
124
|
+
var entry = cfb.FileIndex.find(function (e) { return e.name === "EncryptionInfo"; });
|
|
125
|
+
if (!entry || !entry.content) {
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
var contentArray = entry.content;
|
|
129
|
+
return contentArray instanceof Uint8Array
|
|
130
|
+
? contentArray
|
|
131
|
+
: new Uint8Array(contentArray);
|
|
132
|
+
};
|
|
133
|
+
// ── Standard (MS-OFFCRYPTO §2.3.4.5-9) & RC4 CryptoAPI (§2.3.5) ──────────────────
|
|
134
|
+
CFBDecryptor.decryptStandardFamily = function (cfb, infoContent, password) {
|
|
135
|
+
// `body` begins at the EncryptionHeaderFlags dword (after the 4-byte version).
|
|
136
|
+
var body = infoContent.subarray(4);
|
|
137
|
+
var dv = new DataView(body.buffer, body.byteOffset, body.byteLength);
|
|
138
|
+
var headerSize = dv.getUint32(4, true);
|
|
139
|
+
var header = body.subarray(8, 8 + headerSize);
|
|
140
|
+
var hdv = new DataView(header.buffer, header.byteOffset, header.byteLength);
|
|
141
|
+
var algId = hdv.getUint32(8, true);
|
|
142
|
+
var keySizeBits = hdv.getUint32(16, true);
|
|
143
|
+
var verifier = body.subarray(8 + headerSize);
|
|
144
|
+
var salt = verifier.subarray(4, 20);
|
|
145
|
+
var encryptedVerifier = verifier.subarray(20, 36);
|
|
146
|
+
// AES uses a 32-byte encrypted verifier hash (SHA1 padded to two blocks); RC4 uses 20.
|
|
147
|
+
var isAes = (algId & 0xff00) === 0x6600;
|
|
148
|
+
var isRc4 = algId === 0x6801 || algId === 0;
|
|
149
|
+
if (!isAes && !isRc4) {
|
|
150
|
+
throw new Error("Unsupported workbook encryption cipher (algId 0x".concat(algId.toString(16), ")."));
|
|
151
|
+
}
|
|
152
|
+
var vhashLen = isAes ? 32 : 20;
|
|
153
|
+
var encryptedVerifierHash = verifier.subarray(40, 40 + vhashLen);
|
|
154
|
+
var encryptedPackage = this.getEncryptedPackage(cfb);
|
|
155
|
+
if (isAes) {
|
|
156
|
+
var keyBytes_1 = keySizeBits !== 0
|
|
157
|
+
? keySizeBits / 8
|
|
158
|
+
: algId === 0x660e
|
|
159
|
+
? 16
|
|
160
|
+
: algId === 0x660f
|
|
161
|
+
? 24
|
|
162
|
+
: 32;
|
|
163
|
+
var key = this.standardKey(password, salt, keyBytes_1);
|
|
164
|
+
var verifierPlain_1 = this.aesEcbDecrypt(encryptedVerifier, key);
|
|
165
|
+
var expected = this.hash(verifierPlain_1, "SHA1");
|
|
166
|
+
var stored = this.aesEcbDecrypt(encryptedVerifierHash, key);
|
|
167
|
+
if (!this.bytesEqual(expected, stored.subarray(0, expected.length))) {
|
|
168
|
+
throw new Error("Incorrect password");
|
|
169
|
+
}
|
|
170
|
+
return this.decryptStandardPackage(encryptedPackage, key);
|
|
171
|
+
}
|
|
172
|
+
// RC4 CryptoAPI: 40-bit keys are 5 significant bytes zero-padded to 16.
|
|
173
|
+
var keyBytes = keySizeBits === 40 || keySizeBits === 0 ? 5 : keySizeBits / 8;
|
|
174
|
+
var key0 = this.rc4CryptoApiKey(password, salt, keyBytes, 0);
|
|
175
|
+
var combined = this.rc4(key0, this.concatArrays(encryptedVerifier, encryptedVerifierHash));
|
|
176
|
+
var verifierPlain = combined.subarray(0, encryptedVerifier.length);
|
|
177
|
+
var storedHash = combined.subarray(encryptedVerifier.length);
|
|
178
|
+
if (!this.bytesEqual(this.hash(verifierPlain, "SHA1"), storedHash)) {
|
|
179
|
+
throw new Error("Incorrect password");
|
|
180
|
+
}
|
|
181
|
+
return this.decryptRc4Package(encryptedPackage, password, salt, keyBytes);
|
|
182
|
+
};
|
|
183
|
+
/** Standard key derivation (MS-OFFCRYPTO §2.3.4.7): iterated SHA1 then the X1‖X2 final block. */
|
|
184
|
+
CFBDecryptor.standardKey = function (password, salt, keyBytes) {
|
|
185
|
+
var SPIN_COUNT = 50000;
|
|
186
|
+
var h = this.hash(this.concatArrays(salt, this.stringToUtf16LE(password)), "SHA1");
|
|
187
|
+
for (var i = 0; i < SPIN_COUNT; i++) {
|
|
188
|
+
h = this.hash(this.concatArrays(this.le32(i), h), "SHA1");
|
|
189
|
+
}
|
|
190
|
+
var hfinal = this.hash(this.concatArrays(h, this.le32(0)), "SHA1");
|
|
191
|
+
var buf1 = new Uint8Array(64).fill(0x36);
|
|
192
|
+
var buf2 = new Uint8Array(64).fill(0x5c);
|
|
193
|
+
for (var i = 0; i < 20; i++) {
|
|
194
|
+
buf1[i] ^= hfinal[i];
|
|
195
|
+
buf2[i] ^= hfinal[i];
|
|
196
|
+
}
|
|
197
|
+
var x1 = this.hash(buf1, "SHA1");
|
|
198
|
+
var x2 = this.hash(buf2, "SHA1");
|
|
199
|
+
return this.concatArrays(x1, x2).slice(0, keyBytes);
|
|
200
|
+
};
|
|
201
|
+
CFBDecryptor.decryptStandardPackage = function (encryptedPackage, key) {
|
|
202
|
+
var sizeView = new DataView(encryptedPackage.buffer, encryptedPackage.byteOffset, 8);
|
|
203
|
+
var packageSize = Number(sizeView.getBigUint64(0, true));
|
|
204
|
+
var decrypted = this.aesEcbDecrypt(encryptedPackage.subarray(8), key);
|
|
205
|
+
var trimmed = decrypted.subarray(0, packageSize);
|
|
206
|
+
var result = new ArrayBuffer(trimmed.byteLength);
|
|
207
|
+
new Uint8Array(result).set(trimmed);
|
|
208
|
+
return result;
|
|
209
|
+
};
|
|
210
|
+
/** RC4 CryptoAPI key derivation (MS-OFFCRYPTO §2.3.5.2). */
|
|
211
|
+
CFBDecryptor.rc4CryptoApiKey = function (password, salt, keyBytes, block) {
|
|
212
|
+
var h0 = this.hash(this.concatArrays(salt, this.stringToUtf16LE(password)), "SHA1");
|
|
213
|
+
var hfinal = this.hash(this.concatArrays(h0, this.le32(block)), "SHA1");
|
|
214
|
+
if (keyBytes === 5) {
|
|
215
|
+
var key = new Uint8Array(16);
|
|
216
|
+
key.set(hfinal.subarray(0, 5));
|
|
217
|
+
return key;
|
|
218
|
+
}
|
|
219
|
+
return hfinal.subarray(0, keyBytes);
|
|
220
|
+
};
|
|
221
|
+
CFBDecryptor.decryptRc4Package = function (encryptedPackage, password, salt, keyBytes) {
|
|
222
|
+
var RC4_BLOCK_LENGTH = 512;
|
|
223
|
+
var sizeView = new DataView(encryptedPackage.buffer, encryptedPackage.byteOffset, 8);
|
|
224
|
+
var packageSize = Number(sizeView.getBigUint64(0, true));
|
|
225
|
+
var data = encryptedPackage.subarray(8);
|
|
226
|
+
var out = new Uint8Array(data.length);
|
|
227
|
+
// RC4 re-keys every 512 bytes of the encrypted package, using the block index.
|
|
228
|
+
for (var block = 0; block * RC4_BLOCK_LENGTH < data.length; block++) {
|
|
229
|
+
var start = block * RC4_BLOCK_LENGTH;
|
|
230
|
+
var end = Math.min(start + RC4_BLOCK_LENGTH, data.length);
|
|
231
|
+
var key = this.rc4CryptoApiKey(password, salt, keyBytes, block);
|
|
232
|
+
out.set(this.rc4(key, data.subarray(start, end)), start);
|
|
233
|
+
}
|
|
234
|
+
var trimmed = out.subarray(0, packageSize);
|
|
235
|
+
var result = new ArrayBuffer(trimmed.byteLength);
|
|
236
|
+
new Uint8Array(result).set(trimmed);
|
|
237
|
+
return result;
|
|
238
|
+
};
|
|
239
|
+
/** AES-ECB block decrypt (no padding). Trailing sub-block bytes are ignored. */
|
|
240
|
+
CFBDecryptor.aesEcbDecrypt = function (data, key) {
|
|
241
|
+
var aligned = data.length - (data.length % 16);
|
|
242
|
+
var cipher = ecb(key, { disablePadding: true });
|
|
243
|
+
return cipher.decrypt(data.subarray(0, aligned));
|
|
244
|
+
};
|
|
245
|
+
/** RC4 stream cipher (KSA + PRGA). Symmetric — the same op encrypts and decrypts. */
|
|
246
|
+
CFBDecryptor.rc4 = function (key, data) {
|
|
247
|
+
var s = new Uint8Array(256);
|
|
248
|
+
for (var i = 0; i < 256; i++)
|
|
249
|
+
s[i] = i;
|
|
250
|
+
var j = 0;
|
|
251
|
+
for (var i = 0; i < 256; i++) {
|
|
252
|
+
j = (j + s[i] + key[i % key.length]) & 0xff;
|
|
253
|
+
var t = s[i];
|
|
254
|
+
s[i] = s[j];
|
|
255
|
+
s[j] = t;
|
|
256
|
+
}
|
|
257
|
+
var out = new Uint8Array(data.length);
|
|
258
|
+
var a = 0;
|
|
259
|
+
var b = 0;
|
|
260
|
+
for (var k = 0; k < data.length; k++) {
|
|
261
|
+
a = (a + 1) & 0xff;
|
|
262
|
+
b = (b + s[a]) & 0xff;
|
|
263
|
+
var t = s[a];
|
|
264
|
+
s[a] = s[b];
|
|
265
|
+
s[b] = t;
|
|
266
|
+
out[k] = data[k] ^ s[(s[a] + s[b]) & 0xff];
|
|
267
|
+
}
|
|
268
|
+
return out;
|
|
269
|
+
};
|
|
270
|
+
CFBDecryptor.le32 = function (n) {
|
|
271
|
+
var b = new Uint8Array(4);
|
|
272
|
+
new DataView(b.buffer).setUint32(0, n >>> 0, true);
|
|
273
|
+
return b;
|
|
274
|
+
};
|
|
275
|
+
CFBDecryptor.bytesEqual = function (a, b) {
|
|
276
|
+
if (a.length !== b.length)
|
|
277
|
+
return false;
|
|
278
|
+
for (var i = 0; i < a.length; i++) {
|
|
279
|
+
if (a[i] !== b[i])
|
|
280
|
+
return false;
|
|
281
|
+
}
|
|
282
|
+
return true;
|
|
283
|
+
};
|
|
284
|
+
CFBDecryptor.parseEncryptionInfo = function (cfb) {
|
|
285
|
+
// Find EncryptionInfo stream
|
|
286
|
+
var encInfoEntry = cfb.FileIndex.find(function (entry) { return entry.name === "EncryptionInfo"; });
|
|
287
|
+
if (!encInfoEntry || !encInfoEntry.content) {
|
|
288
|
+
return null;
|
|
289
|
+
}
|
|
290
|
+
// CFB library returns content as array, convert to Uint8Array with proper buffer
|
|
291
|
+
var contentArray = encInfoEntry.content;
|
|
292
|
+
var content = contentArray instanceof Uint8Array
|
|
293
|
+
? contentArray
|
|
294
|
+
: new Uint8Array(contentArray);
|
|
295
|
+
// Create a new buffer to ensure we have a proper ArrayBuffer
|
|
296
|
+
var buffer = new ArrayBuffer(content.length);
|
|
297
|
+
var bufferView = new Uint8Array(buffer);
|
|
298
|
+
bufferView.set(content);
|
|
299
|
+
var view = new DataView(buffer);
|
|
300
|
+
// Read version info
|
|
301
|
+
var versionMajor = view.getUint16(0, true);
|
|
302
|
+
var versionMinor = view.getUint16(2, true);
|
|
303
|
+
// Only support Agile encryption (version 4.4)
|
|
304
|
+
if (versionMajor !== 4 || versionMinor !== 4) {
|
|
305
|
+
throw new Error("Unsupported encryption version: ".concat(versionMajor, ".").concat(versionMinor, ". Only Agile encryption (4.4) is supported."));
|
|
306
|
+
}
|
|
307
|
+
// Parse XML encryption descriptor (starts at byte 8)
|
|
308
|
+
var xmlBytes = content.slice(8);
|
|
309
|
+
var xmlString = new TextDecoder().decode(xmlBytes);
|
|
310
|
+
var encInfo = this.parseAgileEncryptionXml(xmlString);
|
|
311
|
+
return encInfo;
|
|
312
|
+
};
|
|
313
|
+
CFBDecryptor.parseAgileEncryptionXml = function (xml) {
|
|
314
|
+
// Simple XML parsing for encryption parameters
|
|
315
|
+
var getAttr = function (tag, attr) {
|
|
316
|
+
// Match tag with optional namespace prefix (p:, x:, etc.)
|
|
317
|
+
// Use non-greedy match to avoid consuming the target attribute
|
|
318
|
+
var regex = new RegExp("<(?:\\w+:)?".concat(tag, "[^>]*?\\s+").concat(attr, "=\"([^\"]*)\""), "i");
|
|
319
|
+
var match = xml.match(regex);
|
|
320
|
+
if (!match) {
|
|
321
|
+
console.warn("Failed to find attribute ".concat(attr, " on tag ").concat(tag));
|
|
322
|
+
// Try alternative: attribute might be first after tag name
|
|
323
|
+
var altRegex = new RegExp("<(?:\\w+:)?".concat(tag, "\\s+").concat(attr, "=\"([^\"]*)\""), "i");
|
|
324
|
+
var altMatch = xml.match(altRegex);
|
|
325
|
+
return altMatch ? altMatch[1] : "";
|
|
326
|
+
}
|
|
327
|
+
return match ? match[1] : "";
|
|
328
|
+
};
|
|
329
|
+
var getBase64 = function (tag, attr) {
|
|
330
|
+
var base64 = getAttr(tag, attr);
|
|
331
|
+
if (!base64) {
|
|
332
|
+
console.warn("No base64 value found for ".concat(tag, ".").concat(attr));
|
|
333
|
+
return new Uint8Array(0);
|
|
334
|
+
}
|
|
335
|
+
try {
|
|
336
|
+
var binary = atob(base64);
|
|
337
|
+
var bytes = new Uint8Array(binary.length);
|
|
338
|
+
for (var i = 0; i < binary.length; i++) {
|
|
339
|
+
bytes[i] = binary.charCodeAt(i);
|
|
340
|
+
}
|
|
341
|
+
return bytes;
|
|
342
|
+
}
|
|
343
|
+
catch (error) {
|
|
344
|
+
console.error("Failed to decode base64 for ".concat(tag, ".").concat(attr, ":"), error);
|
|
345
|
+
return new Uint8Array(0);
|
|
346
|
+
}
|
|
347
|
+
};
|
|
348
|
+
var algorithm = getAttr("keyData", "cipherAlgorithm") || "AES";
|
|
349
|
+
var keySize = parseInt(getAttr("keyData", "keyBits") || "256") / 8;
|
|
350
|
+
var blockSize = parseInt(getAttr("keyData", "blockSize") || "16");
|
|
351
|
+
var hashAlgorithm = getAttr("keyData", "hashAlgorithm") || "SHA512";
|
|
352
|
+
var hashSize = parseInt(getAttr("keyData", "hashSize") || "64");
|
|
353
|
+
var saltSize = parseInt(getAttr("keyData", "saltSize") || "16");
|
|
354
|
+
// TWO different salts are used:
|
|
355
|
+
// 1. passwordSalt from encryptedKey - for password derivation and verification
|
|
356
|
+
// 2. packageSalt from keyData - for package decryption IVs
|
|
357
|
+
var passwordSalt = getBase64("encryptedKey", "saltValue");
|
|
358
|
+
var packageSalt = getBase64("keyData", "saltValue");
|
|
359
|
+
// Get values from p:encryptedKey element
|
|
360
|
+
var spinCount = parseInt(getAttr("encryptedKey", "spinCount") || "100000");
|
|
361
|
+
var encryptedVerifierHashInput = getBase64("encryptedKey", "encryptedVerifierHashInput");
|
|
362
|
+
var encryptedVerifierHashValue = getBase64("encryptedKey", "encryptedVerifierHashValue");
|
|
363
|
+
var encryptedKeyValue = getBase64("encryptedKey", "encryptedKeyValue");
|
|
364
|
+
// Validate that all required values were parsed
|
|
365
|
+
if (!passwordSalt.length || !packageSalt.length) {
|
|
366
|
+
throw new Error("Failed to parse salt values from encryption info");
|
|
367
|
+
}
|
|
368
|
+
if (!encryptedVerifierHashInput.length ||
|
|
369
|
+
!encryptedVerifierHashValue.length ||
|
|
370
|
+
!encryptedKeyValue.length) {
|
|
371
|
+
throw new Error("Failed to parse encrypted verifier values from encryption info");
|
|
372
|
+
}
|
|
373
|
+
return {
|
|
374
|
+
algorithm: algorithm,
|
|
375
|
+
keySize: keySize,
|
|
376
|
+
blockSize: blockSize,
|
|
377
|
+
hashAlgorithm: hashAlgorithm,
|
|
378
|
+
hashSize: hashSize,
|
|
379
|
+
saltSize: saltSize,
|
|
380
|
+
passwordSalt: passwordSalt,
|
|
381
|
+
packageSalt: packageSalt,
|
|
382
|
+
encryptedVerifierHashInput: encryptedVerifierHashInput,
|
|
383
|
+
encryptedVerifierHashValue: encryptedVerifierHashValue,
|
|
384
|
+
encryptedKeyValue: encryptedKeyValue,
|
|
385
|
+
spinCount: spinCount,
|
|
386
|
+
};
|
|
387
|
+
};
|
|
388
|
+
CFBDecryptor.deriveKey = function (password, info) {
|
|
389
|
+
// Convert password to UTF-16LE
|
|
390
|
+
var passwordBytes = this.stringToUtf16LE(password);
|
|
391
|
+
// Initial hash H0 = H(passwordSalt + password)
|
|
392
|
+
// Use passwordSalt from encryptedKey, NOT packageSalt from keyData
|
|
393
|
+
var hash = this.hash(this.concatArrays(info.passwordSalt, passwordBytes), info.hashAlgorithm);
|
|
394
|
+
// Spin iteration: H(iterator + H(n-1))
|
|
395
|
+
for (var i = 0; i < info.spinCount; i++) {
|
|
396
|
+
var iterator = new Uint8Array(4);
|
|
397
|
+
new DataView(iterator.buffer).setUint32(0, i, true);
|
|
398
|
+
hash = this.hash(this.concatArrays(iterator, hash), info.hashAlgorithm);
|
|
399
|
+
}
|
|
400
|
+
// Return H_final (the result after spin iterations)
|
|
401
|
+
// Individual keys are derived from this using block keys
|
|
402
|
+
return hash;
|
|
403
|
+
};
|
|
404
|
+
CFBDecryptor.decryptEncryptedKey = function (passwordDerivedKey, info) {
|
|
405
|
+
var keyForKeyValue = this.deriveAgileBlockKey(passwordDerivedKey, BLOCK_KEY_ENCRYPTION_KEY, info);
|
|
406
|
+
// Agile encryption uses raw CBC block decryption (no PKCS padding).
|
|
407
|
+
var decryptedKey = this.decryptAESNoPadding(info.encryptedKeyValue, keyForKeyValue, info.passwordSalt.slice(0, 16));
|
|
408
|
+
return decryptedKey.slice(0, info.keySize);
|
|
409
|
+
};
|
|
410
|
+
CFBDecryptor.verifyPassword = function (passwordDerivedKey, info) {
|
|
411
|
+
try {
|
|
412
|
+
var keyForVerifierInput = this.deriveAgileBlockKey(passwordDerivedKey, BLOCK_KEY_VERIFIER_INPUT, info);
|
|
413
|
+
// Decrypt verifier hash input
|
|
414
|
+
var verifierHashInput = this.decryptAESNoPadding(info.encryptedVerifierHashInput, keyForVerifierInput, info.passwordSalt.slice(0, 16));
|
|
415
|
+
// Hash the decrypted verifier
|
|
416
|
+
var verifierHash = this.hash(verifierHashInput.slice(0, 16), info.hashAlgorithm);
|
|
417
|
+
var keyForVerifierValue = this.deriveAgileBlockKey(passwordDerivedKey, BLOCK_KEY_VERIFIER_HASH, info);
|
|
418
|
+
// Decrypt verifier hash value
|
|
419
|
+
var decryptedVerifierHash = this.decryptAESNoPadding(info.encryptedVerifierHashValue, keyForVerifierValue, info.passwordSalt.slice(0, 16));
|
|
420
|
+
// Compare hashes
|
|
421
|
+
var expectedHashLength = Math.min(info.hashSize, verifierHash.length, decryptedVerifierHash.length);
|
|
422
|
+
for (var i = 0; i < expectedHashLength; i++) {
|
|
423
|
+
if (verifierHash[i] !== decryptedVerifierHash[i]) {
|
|
424
|
+
return false;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
return true;
|
|
428
|
+
}
|
|
429
|
+
catch (error) {
|
|
430
|
+
console.error("Password verification error:", error);
|
|
431
|
+
return false;
|
|
432
|
+
}
|
|
433
|
+
};
|
|
434
|
+
CFBDecryptor.getEncryptedPackage = function (cfb) {
|
|
435
|
+
var entry = cfb.FileIndex.find(function (e) { return e.name === "EncryptedPackage" || e.name === "0EncryptedPackage"; });
|
|
436
|
+
if (!entry || !entry.content) {
|
|
437
|
+
throw new Error("EncryptedPackage stream not found");
|
|
438
|
+
}
|
|
439
|
+
// CFB library returns content as array, convert to proper Uint8Array
|
|
440
|
+
var contentArray = entry.content;
|
|
441
|
+
return contentArray instanceof Uint8Array
|
|
442
|
+
? contentArray
|
|
443
|
+
: new Uint8Array(contentArray);
|
|
444
|
+
};
|
|
445
|
+
CFBDecryptor.decryptPackage = function (encrypted, key, info) {
|
|
446
|
+
var e_1, _a;
|
|
447
|
+
// Read the package size from the first 8 bytes
|
|
448
|
+
var sizeView = new DataView(encrypted.buffer, encrypted.byteOffset, 8);
|
|
449
|
+
var packageSize = Number(sizeView.getBigUint64(0, true));
|
|
450
|
+
// Skip the first 8 bytes (package size) to get encrypted data
|
|
451
|
+
var encryptedData = encrypted.slice(8);
|
|
452
|
+
// MS-OFFCRYPTO uses segmented decryption with 4096-byte blocks
|
|
453
|
+
var SEGMENT_LENGTH = 4096;
|
|
454
|
+
var totalSegments = Math.ceil(encryptedData.length / SEGMENT_LENGTH);
|
|
455
|
+
var decryptedSegments = [];
|
|
456
|
+
for (var i = 0; i < totalSegments; i++) {
|
|
457
|
+
var start = i * SEGMENT_LENGTH;
|
|
458
|
+
var end = Math.min(start + SEGMENT_LENGTH, encryptedData.length);
|
|
459
|
+
var segment = encryptedData.slice(start, end);
|
|
460
|
+
// Generate IV for this segment: hash(packageSalt + block number)
|
|
461
|
+
// Use packageSalt from keyData, NOT passwordSalt from encryptedKey
|
|
462
|
+
var blockNumber = new Uint8Array(4);
|
|
463
|
+
new DataView(blockNumber.buffer).setUint32(0, i, true);
|
|
464
|
+
var ivInput = this.concatArrays(info.packageSalt, blockNumber);
|
|
465
|
+
var ivHash = this.hash(ivInput, info.hashAlgorithm);
|
|
466
|
+
var iv = ivHash.slice(0, 16); // Use first 16 bytes as IV
|
|
467
|
+
// Decrypt this segment
|
|
468
|
+
var decryptedSegment = this.decryptAESNoPadding(segment, key, iv);
|
|
469
|
+
decryptedSegments.push(decryptedSegment);
|
|
470
|
+
}
|
|
471
|
+
// Concatenate all decrypted segments
|
|
472
|
+
var totalLength = decryptedSegments.reduce(function (sum, seg) { return sum + seg.length; }, 0);
|
|
473
|
+
var allDecrypted = new Uint8Array(totalLength);
|
|
474
|
+
var offset = 0;
|
|
475
|
+
try {
|
|
476
|
+
for (var decryptedSegments_1 = __values(decryptedSegments), decryptedSegments_1_1 = decryptedSegments_1.next(); !decryptedSegments_1_1.done; decryptedSegments_1_1 = decryptedSegments_1.next()) {
|
|
477
|
+
var seg = decryptedSegments_1_1.value;
|
|
478
|
+
allDecrypted.set(seg, offset);
|
|
479
|
+
offset += seg.length;
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
483
|
+
finally {
|
|
484
|
+
try {
|
|
485
|
+
if (decryptedSegments_1_1 && !decryptedSegments_1_1.done && (_a = decryptedSegments_1.return)) _a.call(decryptedSegments_1);
|
|
486
|
+
}
|
|
487
|
+
finally { if (e_1) throw e_1.error; }
|
|
488
|
+
}
|
|
489
|
+
// Trim to actual package size (remove padding)
|
|
490
|
+
var trimmed = allDecrypted.slice(0, packageSize);
|
|
491
|
+
// Create a proper ArrayBuffer from the decrypted data
|
|
492
|
+
var result = new ArrayBuffer(trimmed.byteLength);
|
|
493
|
+
new Uint8Array(result).set(trimmed);
|
|
494
|
+
return result;
|
|
495
|
+
};
|
|
496
|
+
CFBDecryptor.decryptAESNoPadding = function (data, key, iv) {
|
|
497
|
+
var cipher = cbc(key, iv, { disablePadding: true });
|
|
498
|
+
return cipher.decrypt(data);
|
|
499
|
+
};
|
|
500
|
+
CFBDecryptor.deriveAgileBlockKey = function (passwordDerivedKey, blockKey, info) {
|
|
501
|
+
return this.hash(this.concatArrays(passwordDerivedKey, blockKey), info.hashAlgorithm).slice(0, info.keySize);
|
|
502
|
+
};
|
|
503
|
+
CFBDecryptor.hash = function (data, algorithm) {
|
|
504
|
+
switch (algorithm.toUpperCase()) {
|
|
505
|
+
case "SHA1":
|
|
506
|
+
return sha1(data);
|
|
507
|
+
case "SHA256":
|
|
508
|
+
return sha256(data);
|
|
509
|
+
case "SHA384":
|
|
510
|
+
return sha384(data);
|
|
511
|
+
case "SHA512":
|
|
512
|
+
return sha512(data);
|
|
513
|
+
default:
|
|
514
|
+
throw new Error("Unsupported hash algorithm: ".concat(algorithm));
|
|
515
|
+
}
|
|
516
|
+
};
|
|
517
|
+
CFBDecryptor.stringToUtf16LE = function (str) {
|
|
518
|
+
var bytes = new Uint8Array(str.length * 2);
|
|
519
|
+
for (var i = 0; i < str.length; i++) {
|
|
520
|
+
var code = str.charCodeAt(i);
|
|
521
|
+
bytes[i * 2] = code & 0xff;
|
|
522
|
+
bytes[i * 2 + 1] = (code >> 8) & 0xff;
|
|
523
|
+
}
|
|
524
|
+
return bytes;
|
|
525
|
+
};
|
|
526
|
+
CFBDecryptor.concatArrays = function () {
|
|
527
|
+
var e_2, _a;
|
|
528
|
+
var arrays = [];
|
|
529
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
530
|
+
arrays[_i] = arguments[_i];
|
|
531
|
+
}
|
|
532
|
+
var totalLength = arrays.reduce(function (sum, arr) { return sum + arr.length; }, 0);
|
|
533
|
+
var result = new Uint8Array(totalLength);
|
|
534
|
+
var offset = 0;
|
|
535
|
+
try {
|
|
536
|
+
for (var arrays_1 = __values(arrays), arrays_1_1 = arrays_1.next(); !arrays_1_1.done; arrays_1_1 = arrays_1.next()) {
|
|
537
|
+
var arr = arrays_1_1.value;
|
|
538
|
+
result.set(arr, offset);
|
|
539
|
+
offset += arr.length;
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
543
|
+
finally {
|
|
544
|
+
try {
|
|
545
|
+
if (arrays_1_1 && !arrays_1_1.done && (_a = arrays_1.return)) _a.call(arrays_1);
|
|
546
|
+
}
|
|
547
|
+
finally { if (e_2) throw e_2.error; }
|
|
548
|
+
}
|
|
549
|
+
return result;
|
|
550
|
+
};
|
|
551
|
+
return CFBDecryptor;
|
|
552
|
+
}());
|
|
553
|
+
export { CFBDecryptor };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
type EncryptOptions = {
|
|
2
|
+
spinCount?: number;
|
|
3
|
+
};
|
|
4
|
+
export declare class CFBEncryptor {
|
|
5
|
+
static encrypt(source: ArrayBuffer | Uint8Array, password: string, options?: EncryptOptions): Promise<Uint8Array>;
|
|
6
|
+
private static buildEncryptionInfoStream;
|
|
7
|
+
private static buildEncryptedPackageStream;
|
|
8
|
+
private static encryptPackage;
|
|
9
|
+
private static buildEncryptionXml;
|
|
10
|
+
private static derivePasswordKey;
|
|
11
|
+
private static deriveAgileBlockKey;
|
|
12
|
+
private static encryptDataIntegrityValue;
|
|
13
|
+
private static encryptAESNoPadding;
|
|
14
|
+
private static sha512Hash;
|
|
15
|
+
private static hmacSha512;
|
|
16
|
+
private static toBase64;
|
|
17
|
+
private static padToBlockSize;
|
|
18
|
+
private static stringToUtf16LE;
|
|
19
|
+
private static concatArrays;
|
|
20
|
+
private static randomBytes;
|
|
21
|
+
}
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=cfb-encryptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cfb-encryptor.d.ts","sourceRoot":"","sources":["../../../excel-parser/cfb-encryptor.ts"],"names":[],"mappings":"AAMA,KAAK,cAAc,GAAG;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAwBF,qBAAa,YAAY;WACV,OAAO,CAClB,MAAM,EAAE,WAAW,GAAG,UAAU,EAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,UAAU,CAAC;IA4FtB,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAWxC,OAAO,CAAC,MAAM,CAAC,2BAA2B;IAW1C,OAAO,CAAC,MAAM,CAAC,cAAc;IA0B7B,OAAO,CAAC,MAAM,CAAC,kBAAkB;IA6CjC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAehC,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAUlC,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAiBxC,OAAO,CAAC,MAAM,CAAC,mBAAmB;IASlC,OAAO,CAAC,MAAM,CAAC,UAAU;IAIzB,OAAO,CAAC,MAAM,CAAC,UAAU;IAIzB,OAAO,CAAC,MAAM,CAAC,QAAQ;IAQvB,OAAO,CAAC,MAAM,CAAC,cAAc;IAW7B,OAAO,CAAC,MAAM,CAAC,eAAe;IAU9B,OAAO,CAAC,MAAM,CAAC,YAAY;IAW3B,OAAO,CAAC,MAAM,CAAC,WAAW;CAc3B"}
|