#tar-archive #storage #secure #nuts #encryption

nuts-archive

基于nuts-container的tar类似归档

21个版本 (4个重大更新)

0.6.8 2024年7月31日
0.6.7 2024年6月26日
0.6.2 2024年5月23日
0.5.0 2024年3月5日
0.1.1 2023年10月27日

#445 in 加密

Download history 119/week @ 2024-05-13 350/week @ 2024-05-20 155/week @ 2024-06-03 325/week @ 2024-06-10 194/week @ 2024-06-17 138/week @ 2024-06-24 9/week @ 2024-07-01 142/week @ 2024-07-29

每月142次下载
用于 nuts-tool

MIT许可证

495KB
8K SLoC

nuts-archive: nuts-container上的一个类似tar的归档。

简介

nuts-archive是一个基于nuts容器的应用。受tar工具的启发,你可以将文件、目录和符号链接存储在nuts容器中。

  • 条目可以附加到归档的末尾。
  • 它们不能从归档中删除。
  • 您可以遍历归档,从第一个到归档中的最后一个条目。

示例

// Append an entry at the end of the archive

use nuts_archive::Archive;
use nuts_container::container::{Cipher, Container, CreateOptionsBuilder, OpenOptionsBuilder};
use nuts_directory::{CreateOptions, DirectoryBackend, OpenOptions};
use tempdir::TempDir;

// This will create an empty archive in a temporary directory.
let tmp_dir = {
    let dir = TempDir::new("nuts-archive").unwrap();

    let backend_options = CreateOptions::for_path(&dir);
    let contaner_options = CreateOptionsBuilder::new(Cipher::Aes128Gcm)
        .with_password_callback(|| Ok(b"123".to_vec()))
        .build::<DirectoryBackend<&TempDir>>()
        .unwrap();

    let container =
        Container::<DirectoryBackend<&TempDir>>::create(backend_options, contaner_options)
            .unwrap();
    Archive::create(container, false).unwrap();

    dir
};

// Open the container (with a directory backend) from the temporary directory.
let backend_options = OpenOptions::for_path(tmp_dir);
let container_options = OpenOptionsBuilder::new()
    .with_password_callback(|| Ok(b"123".to_vec()))
    .build::<DirectoryBackend<TempDir>>()
    .unwrap();
let container =
    Container::<DirectoryBackend<TempDir>>::open(backend_options, container_options).unwrap();

// Open the archive
let mut archive = Archive::open(container).unwrap();

// Append a new entry
let mut entry = archive.append("sample").build().unwrap();
entry.write_all("some sample data".as_bytes()).unwrap();
// Scans the archive for entries

use nuts_archive::Archive;
use nuts_container::container::{Cipher, Container, CreateOptionsBuilder, OpenOptionsBuilder};
use nuts_directory::{CreateOptions, DirectoryBackend, OpenOptions};
use tempdir::TempDir;

// This will create an empty archive in a temporary directory.
let tmp_dir = {
    let dir = TempDir::new("nuts-archive").unwrap();

    let backend_options = CreateOptions::for_path(&dir);
    let contaner_options = CreateOptionsBuilder::new(Cipher::Aes128Gcm)
        .with_password_callback(|| Ok(b"123".to_vec()))
        .build::<DirectoryBackend<&TempDir>>()
        .unwrap();

    let container =
        Container::<DirectoryBackend<&TempDir>>::create(backend_options, contaner_options)
            .unwrap();
    Archive::create(container, false).unwrap();

    dir
};

// Open the container (with a directory backend) from the temporary directory.
let backend_options = OpenOptions::for_path(tmp_dir);
let container_options = OpenOptionsBuilder::new()
    .with_password_callback(|| Ok(b"123".to_vec()))
    .build::<DirectoryBackend<TempDir>>()
    .unwrap();
let container =
    Container::<DirectoryBackend<TempDir>>::open(backend_options, container_options).unwrap();

// Open the archive and append two entries
let mut archive = Archive::open(container).unwrap();

archive.append("f1").build().unwrap();
archive.append("f2").build().unwrap();

// Go through the archive
let entry = archive.first().unwrap().unwrap();
assert_eq!(entry.name(), "f1");

let entry = entry.next().unwrap().unwrap();
assert_eq!(entry.name(), "f2");

assert!(entry.next().is_none());

许可证

您可以在此处查看完整的许可证。

本项目受MIT许可证的条款约束。

依赖项

~2.8–7MB
~153K SLoC