mirror of
https://github.com/storytold/craft-libs.git
synced 2026-11-12 10:03:51 +00:00
The container every OpenDocument file shares, moved from WordCraft (crates/formats/src/odt/crypt.rs, odt/flat.rs, the package reading and writing in odt/import.rs and odt/package.rs, crates/doc/src/zip_guard.rs at 06c2ae6f) so that the ODT and ODS readers build on one copy. - Package and PackageWriter: the ZIP with its mimetype and manifest, within Limits (entries, bytes per file, bytes per package). - Manifest: read by namespace whatever the prefix, as GridCraft's ODS reader did; written as LibreOffice lays it out. - crypt: AES-256-CBC with PBKDF2, read and written, with the per-file and per-package key-derivation budgets. - flat: a flat document to a package and back, for any media type (the WordCraft code wrote the text one only). - zip_guard: the entry-count check before zip parses a directory. No document content is read here.
33 lines
1.2 KiB
TOML
33 lines
1.2 KiB
TOML
[package]
|
|
name = "craft-odf"
|
|
description = "OpenDocument packages: the ZIP container with its mimetype and manifest, password protection (AES-256-CBC, PBKDF2) and flat single-file documents, read and written."
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
rust-version.workspace = true
|
|
repository.workspace = true
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[dependencies]
|
|
craft-xml = { workspace = true }
|
|
thiserror = { workspace = true }
|
|
# `deflate-flate2` with flate2's default miniz_oxide backend, as craft-update pins it (zip's own
|
|
# `deflate` feature would switch a whole app's flate2 to zlib-rs).
|
|
zip = { version = "9", default-features = false, features = ["deflate-flate2"] }
|
|
flate2 = { version = "1", default-features = false, features = ["rust_backend"] }
|
|
base64 = "0.23"
|
|
# Password-protected packages (ODF 1.3 Part 2 section 3.4): AES-256-CBC, SHA-1/SHA-256, PBKDF2
|
|
# (HMAC-SHA-1).
|
|
aes = "0.9"
|
|
sha1 = "0.11"
|
|
sha2 = "0.11"
|
|
hmac = "0.13"
|
|
getrandom = "0.3"
|
|
zeroize = "1"
|
|
|
|
[target.'cfg(all(target_arch = "wasm32", target_os = "unknown"))'.dependencies]
|
|
# The browser's `crypto.getRandomValues` for the salts and vectors of encrypted saves.
|
|
getrandom = { version = "0.3", features = ["wasm_js"] }
|