Compare commits

...

5 Commits

Author SHA1 Message Date
Andrew Gunnerson 4e18f2b478 CHANGELOG.md: Add entry for PR #620
Signed-off-by: Andrew Gunnerson <accounts+github@chiller3.com>
2026-07-02 21:54:50 -04:00
Andrew Gunnerson 710c57ec77 Update dependencies
Signed-off-by: Andrew Gunnerson <accounts+github@chiller3.com>
2026-07-02 21:14:10 -04:00
Ivan 9ca679b64a README.ru.md: Update translation
* https://github.com/chenxiaolong/avbroot/commit/1b4789a3371a09a7a6bb7c4aa5ca7fccd493bd04
* https://github.com/chenxiaolong/avbroot/commit/22a0196cae45a5d6f2a7274d9edafa483cea515e

Signed-off-by: Ivan <reddxae@proton.me>
2026-07-03 02:12:41 +03:00
Andrew Gunnerson 2700d8212c CHANGELOG.md: Add entry for PR #616
Signed-off-by: Andrew Gunnerson <accounts+github@chiller3.com>
2026-06-27 18:57:29 -04:00
Andrew Gunnerson 8a71c1d8be format/avb: Increase memory limits to support 16GiB images
Samsung ships an 8.2GiB system.img in the SM-S948U1 stock firmware. This
allows avbroot to verify the signature of that.

Signed-off-by: Andrew Gunnerson <accounts+github@chiller3.com>
2026-06-27 18:39:39 -04:00
7 changed files with 61 additions and 25 deletions
+1 -1
View File
@@ -47,7 +47,7 @@ jobs:
android_api: '31'
steps:
- name: Check out repository
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
# For git describe
fetch-depth: 0
+1 -1
View File
@@ -10,7 +10,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Run cargo-deny
uses: EmbarkStudios/cargo-deny-action@bb137d7af7e4fb67e5f82a49c4fce4fad40782fe # v2.0.20
+2 -2
View File
@@ -24,10 +24,10 @@ jobs:
echo "version=${version}" >> "${GITHUB_OUTPUT}"
- name: Check out repository
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Create release
uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3.0.0
uses: softprops/action-gh-release@718ea10b132b3b2eba29c1007bb80653f286566b # v3.0.1
with:
tag_name: v${{ steps.get_version.outputs.version }}
name: Version ${{ steps.get_version.outputs.version }}
+7
View File
@@ -7,6 +7,11 @@
to update the actual links at the bottom of the file.
-->
### Unreleased
* Increase memory limits in AVB parser to allow verifying images larger than 8 GIB (limit is now 16 GiB) ([PR #616])
* Update dependencies ([PR #620])
### Version 3.31.0
* Update OTA metadata and payload manifest protobufs from AOSP `android-17.0.0_r1` release ([PR #613])
@@ -751,3 +756,5 @@ Behind-the-scenes changes:
[PR #608]: https://github.com/chenxiaolong/avbroot/pull/608
[PR #611]: https://github.com/chenxiaolong/avbroot/pull/611
[PR #613]: https://github.com/chenxiaolong/avbroot/pull/613
[PR #616]: https://github.com/chenxiaolong/avbroot/pull/616
[PR #620]: https://github.com/chenxiaolong/avbroot/pull/620
Generated
+15 -15
View File
@@ -80,9 +80,9 @@ dependencies = [
[[package]]
name = "anyhow"
version = "1.0.102"
version = "1.0.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3"
[[package]]
name = "arbitrary"
@@ -242,13 +242,13 @@ dependencies = [
[[package]]
name = "bstr"
version = "1.12.1"
version = "1.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab"
checksum = "5cee35f73844aa3014bb606320a6c1f010249dbdf43342fe54b5a4f6a8ed4b79"
dependencies = [
"memchr",
"regex-automata",
"serde",
"serde_core",
]
[[package]]
@@ -351,9 +351,9 @@ dependencies = [
[[package]]
name = "clap_complete"
version = "4.6.5"
version = "4.6.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e0a7a9bfdb35811f9e59832f0f05975114d2251b415fb534108e6f34060fd772"
checksum = "db8b397918185f0161ff3d6fcaa9e4bfc09b8367caf6e1d4a2848e5477ed027b"
dependencies = [
"clap",
]
@@ -800,9 +800,9 @@ dependencies = [
[[package]]
name = "honggfuzz"
version = "0.5.60"
version = "0.5.61"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4d6510a410acedd7a7683b3a45dafdc5ccf3c72d6addaa373497005964fc4e23"
checksum = "678348f51c57c07f02a7a69e7a0ac6455c50cd4d8f0136670b34eab8e0a69be8"
dependencies = [
"arbitrary",
"lazy_static",
@@ -813,9 +813,9 @@ dependencies = [
[[package]]
name = "hybrid-array"
version = "0.4.12"
version = "0.4.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da"
checksum = "818356c5132c1fede50f837ca96afbe78ff42413047f4abb886217845e1b6c8c"
dependencies = [
"typenum",
]
@@ -1550,9 +1550,9 @@ dependencies = [
[[package]]
name = "rustc-hash"
version = "2.1.2"
version = "2.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe"
checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d"
[[package]]
name = "rustc_version"
@@ -2193,6 +2193,6 @@ dependencies = [
[[package]]
name = "zlib-rs"
version = "0.6.4"
version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "977347db8caa080403f6b6b7c1cda9479a8e869316f7e13a59b19076a40f94e3"
checksum = "5431d5661c32445236631278f27946e444ddafe4684cac70b185272d4f9c52d5"
+27
View File
@@ -132,6 +132,23 @@ avbroot совместим с любым стандартным 4096-битны
Если вы потеряете ключ(-и) подписи AVB или OTA, вы больше не сможете подписывать новые OTA-архивы. Придется генерировать новые ключи подписи и разблокировать загрузчик (что приведет к стиранию всех данных). В таком случае возвращайтесь к инструкции в разделе [использования.](#использование)
### Ключи AOSP
Если вы собираете Android из исходного кода, вот как ключи avbroot соотносятся с ключами AOSP:
| avbroot | AOSP |
|----------------|-----------------------|
| `avb.key` | `avb.pem` |
| `avb_pkmd.bin` | `avb_pkmd.bin` |
| `ota.key` | `releasekey.pk8` |
| `ota.crt` | `releasekey.x509.pem` |
Для использования ключа AOSP `releasekey.pk8` в avbroot, его необходимо предварительно преобразовать из формата DER в PEM:
```bash
openssl pkcs8 -topk8 -scrypt -in releasekey.pk8 -out ota.key -outform PEM
```
## Первоначальная настройка
1. Убедитесь, что вы используете утилиту fastboot версии 35 или новее. Предыдущие версии содержат баги, что не позволяют команде `fastboot flashall` (которая понадобится по ходу инструкции) работать правильно.
@@ -501,6 +518,16 @@ avbroot ota extract \
Эта команда также поддерживает извлечение встроенного сертификата OTA и публичного ключа AVB с помощью опций `--cert-ota` и `--public-key-avb`. Чтобы извлечь только эти компоненты, укажите аргумент `--none`, чтобы пропустить извлечение образов разделов.
### Вывод списка разделов из OTA
Чтобы вывести список всех разделов, содержащихся в OTA, используйте команду:
```bash
avbroot ota list --input ota.zip
```
Формат вывода: один раздел на строку без дополнительного форматирования.
### Режим записи ZIP
По умолчанию, avbroot использует потоковую запись для вывода OTA во время патчинга. Это означает, что он вычисляет дайджест sha256 для цифровой подписи одновременно с записью файла. Такой режим приводит к тому, что в ZIP-файле появляются описатели данных, что является частью стандарта ZIP и работает на подавляющем большинстве устройств. Однако некоторые устройства могут иметь некорректно работающие парсеры ZIP-файлов и не смогут правильно прочитать ZIP-файлы OTA, содержащие описатели данных. Если это так, используйте опцию `--zip-mode seekable` при патчинге.
+8 -6
View File
@@ -51,29 +51,31 @@ pub const FOOTER_MAGIC: [u8; 4] = *b"AVBf";
pub const HEADER_MAX_SIZE: u64 = 64 * 1024;
/// Maximum hash tree size. The current limit equals the hash tree size for an
/// 8GiB image using SHA256 digests and a block size of 4096. This is equal to:
/// 16GiB image using SHA256 digests and a block size of 4096. This is equal to:
///
/// ```rust
/// use avbroot::format::hashtree::HashTree;
/// let size = HashTree::new(4096, &ring::digest::SHA256, b"")
/// .compute_level_offsets(8 * 1024 * 1024 * 1024)
/// .compute_level_offsets(16 * 1024 * 1024 * 1024)
/// .unwrap()
/// .first()
/// .map(|r| r.end)
/// .unwrap_or(0);
/// assert_eq!(size, 135_278_592);
/// ```
pub const HASH_TREE_MAX_SIZE: u64 = 67_637_248;
pub const HASH_TREE_MAX_SIZE: u64 = 135_278_592;
/// Maximum FEC data size. The current limit equals the FEC data size for an
/// 8GiB image using 2 parity bytes per codeword. This is equal to:
/// 16GiB image using 2 parity bytes per codeword. This is equal to:
///
/// ```rust
/// use avbroot::format::fec::Fec;
/// let size = Fec::new(8 * 1024 * 1024 * 1024, 4096, 2)
/// let size = Fec::new(16 * 1024 * 1024 * 1024, 4096, 2)
/// .unwrap()
/// .fec_size();
/// assert_eq!(size, 135_815_168);
/// ```
pub const FEC_DATA_MAX_SIZE: u64 = 67_911_680;
pub const FEC_DATA_MAX_SIZE: u64 = 135_815_168;
#[derive(Debug, Error)]
pub enum Error {