# dvalv

A tool for decrypting file format version 2 [Valv](https://github.com/Arctosoft/Valv-Android)-encrypted files.

[![Build status](https://builds.sr.ht/~ser/dvalv/.build.yml.svg)](https://builds.sr.ht/~ser/dvalv/.build.yml?) ★ [Releases](https://downloads.ser1.net/software/dvalv/) ★ [Changelog](https://hg.sr.ht/~ser/dvalv/browse/CHANGELOG.md?rev=tip) ★ [![Go Report Card](https://goreportcard.com/badge/ser1.net/dvalv)](https://goreportcard.com/report/ser1.net/dvalv)

## About

dvalv takes one or more file arguments, prompts for a password, and then
attempts to decrypt those files. The output file names are read from the
encrypted file metadata.

```
dvalv EmOz8t9xAdHbMvoJdN0L26AC3VOQcFOr-i.valv
```

## Features

- handle multiple files and directories at a time
- recursively process a directory
- process files concurrently; this can be disabled with `--limit`
- mirror the source directory structure
- fetch the encryption password from a secret service
- decrypt both v1 and v2 format Valv files

## Performance

dvalv can decrypt ca. 5GB in ca. 3.5k files in 41s. It can encrypt ca. 4GB in ca. 1600 files in
around 47s

## Installing

dvalv can be installed directly with `go install`:

```
go install ser1.net/dvalv@latest
```

Binaries for Linux, Windows, and Darwin are provided by the CI process. See the
[Releases](https://downloads.ser1.net/software/dvalv/) link above.

## Use

Run `dvalv --help` for usage information, or see the man page included in the distribution archive(s).

### Examples

Recursively decrypt a directory into a directory called `family_photos`:
```
dvalv --dest family_photos ~/SyncedDir/Family/
```

Encrypt a single file:
```
dvalv -e my_essay.txt
```

Decrypt a file, getting the password from [rook](https://hg.sr.ht/~ser/rook):
```
dvalv --passcmd "rook show -np EncryptedVault" xAFwZcOPzC1S2G11unHXb7VCkcXbcZBY-x.valv
```

Encrypt some files and a directory into `/tmp`:
```
dvalv --dest /tmp -e one.txt two.md three.png 
```
