1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
Remove the runtime dependency on the `openssl` CLI.
Rho Git filters are invoked by normal Git clients, including GUI clients with
minimal `PATH` values. Shelling out to OpenSSL makes encryption dependent on
which OpenSSL or LibreSSL binary the caller happens to find. Rho should instead
ship as a self-contained Rust binary for its encryption operations.
This pass replaces OpenSSL usage for:
- ---
This does not replace SSH signing. `rho crypto sign/verify` still delegates to
`ssh-keygen -Y` because signatures currently use existing SSH identity keys.
Use raw X25519 key material:
- --
The public key `algorithm` remains `x25519`.
Use `ChaCha20Poly1305` with a random 96-bit nonce.
For repo-local transparent encryption:
- --
For recipient envelopes:
- ---
Transparent file envelope:
```yaml
version: 1
kind: rho_transparent_file
crypto:
algorithm: chacha20poly1305-hkdf-sha256
iterations: 0
key_source: repo-local-key-file
created_at: "..."
payload:
nonce_base64: "..."
ciphertext_base64: "..."
```
Recipient envelope:
```yaml
version: 1
kind: rho_recipient_envelope
crypto:
algorithm: x25519-hkdf-sha256
content_encryption: chacha20poly1305
created_at: "..."
recipients:
-
The live Pi/Gondolin test can then be run separately:
```bash
RHO_LOCAL_GIT_PI_LIVE=1 bash tests/e2e/local-git-pi-sandbox-encrypted.sh
```