Can now encrypt / decrypt all files in a specific path

This commit is contained in:
Zam
2024-05-02 20:08:22 +02:00
parent dc7bdd3bfd
commit b4335bed89
7 changed files with 63 additions and 40 deletions

View File

@@ -5,30 +5,59 @@ pub fn main() !void {
const allocator = std.heap.page_allocator;
const pwd = "Test123!";
var key: [32]u8 = std.mem.zeroes([32]u8);
var nonce: [24]u8 = undefined;
const dir = try std.fs.cwd().openDir("./test", .{ .iterate = true });
if (dir.openDir("private", .{ .iterate = true })) |priv| {
var walker = try priv.walk(allocator);
defer walker.deinit();
crypto.random.bytes(&nonce);
while (try walker.next()) |f| {
if (f.kind == std.fs.Dir.Entry.Kind.file) {
decrypt(allocator, priv, f.path, pwd) catch |err| std.debug.print("{?}\n", .{err});
}
}
try crypto.pwhash.argon2.kdf(allocator, &key, pwd, &nonce, crypto.pwhash.argon2.Params.interactive_2id, crypto.pwhash.argon2.Mode.argon2id);
try encrypt("test.txt", key, nonce);
try decrypt(allocator, "test.txt.cha", pwd[0..]);
try dir.deleteDir("private");
} else |err| switch (err) {
std.fs.Dir.OpenError.FileNotFound => {
var key: [32]u8 = std.mem.zeroes([32]u8);
var nonce: [24]u8 = undefined;
crypto.random.bytes(&nonce);
try crypto.pwhash.argon2.kdf(allocator, &key, pwd, &nonce, crypto.pwhash.argon2.Params.interactive_2id, crypto.pwhash.argon2.Mode.argon2id);
try dir.makeDir("private");
var walker = try dir.walk(allocator);
defer walker.deinit();
while (try walker.next()) |f| {
if (f.kind == std.fs.Dir.Entry.Kind.file) {
std.debug.print("Encrypting {s}\n", .{f.path});
encrypt(dir, f.path, key, nonce) catch |e| std.debug.print("{?}\n", .{e});
}
}
},
else => {
std.debug.print("Err: {?}\n", .{err});
return;
},
}
}
pub fn decrypt(allocator: std.mem.Allocator, path: []const u8, pwd: []const u8) !void {
pub fn decrypt(allocator: std.mem.Allocator, priv: std.fs.Dir, path: []const u8, pwd: []const u8) !void {
{
var out_buf: [512]u8 = undefined;
var in_buf: [512]u8 = undefined;
var nonce: [24]u8 = undefined;
var key: [32]u8 = undefined;
var file = try std.fs.cwd().openFile(path, .{});
var file = try priv.openFile(path, .{});
defer file.close();
_ = try file.read(&nonce);
var dir = try priv.openDir("..", .{});
try crypto.pwhash.argon2.kdf(allocator, &key, pwd, &nonce, crypto.pwhash.argon2.Params.interactive_2id, crypto.pwhash.argon2.Mode.argon2id);
var out_file = try std.fs.cwd().createFile(path[0 .. path.len - 4], .{
var out_file = try dir.createFile(path[0 .. path.len - 4], .{
.read = true,
.truncate = true,
});
@@ -47,19 +76,20 @@ pub fn decrypt(allocator: std.mem.Allocator, path: []const u8, pwd: []const u8)
_ = try out_file.write(out_buf[0..read]);
}
}
try std.fs.cwd().deleteFile(path);
try priv.deleteFile(path);
}
pub fn encrypt(path: []const u8, key: [32]u8, nonce: [24]u8) !void {
pub fn encrypt(dir: std.fs.Dir, path: []const u8, key: [32]u8, nonce: [24]u8) !void {
{
var file = try std.fs.cwd().openFile(path, .{});
var file = try dir.openFile(path, .{});
defer file.close();
var out_buf: [512]u8 = undefined;
var in_buf: [512]u8 = undefined;
var priv = try dir.openDir("private", .{});
// missuse out_buf as buffer for format string
_ = try std.fmt.bufPrint(out_buf[0 .. path.len + 4], "{s}.cha", .{path});
var out_file = try std.fs.cwd().createFile(out_buf[0 .. path.len + 4], .{
var out_file = try priv.createFile(out_buf[0 .. path.len + 4], .{
.read = true,
});
defer out_file.close();
@@ -79,5 +109,5 @@ pub fn encrypt(path: []const u8, key: [32]u8, nonce: [24]u8) !void {
_ = try out_file.write(out_buf[0..read]);
}
}
try std.fs.cwd().deleteFile(path);
try dir.deleteFile(path);
}

BIN
test.cha

Binary file not shown.

View File

@@ -1,10 +0,0 @@
Poggers askdasdjkjasd
dasjdhasdkjhasdjkhasldjkhasldjhasdas
das
da
sdas
dasdasdasdwadsdsadasdawdasdasdasd
sadasdasdawsdasfsdfadsadawdsadasdawdasd
asdasdasdawdasdsadasdasdwdasdawd
sasdasdsawdsadsdsddasdasdasdbahsdgasgdiwuhadilasjbdlhsad
fkjdafhsajfbladfgiduasfiuadgfpahusdfhasdfuh

3
test/troete.md Normal file
View File

@@ -0,0 +1,3 @@
# Aloah
Pog Pog poggie poggers

View File

@@ -1,5 +1,5 @@
0
1273 15769496 1714521220301303367 9fba4eb7249461115e73b1dd1ed85836 0 src/main.zig
3595 15769496 1714598939065370824 3df2544dd956828a05add5e966619db1 0 src/main.zig
7737 15870144 1714505175859852808 7b4fdc315806ebffede643f9f98b8a50 1 std/std.zig
22535 15870244 1714505175882554825 e6ad8dc95efc97b95f3e7a7a376609ed 1 std/start.zig
114688 15870010 1714505175826822033 74fed2adb072da5aa83db559d086ae03 1 std/debug.zig
@@ -15,30 +15,30 @@
176517 15870146 1714505175860411702 fd9bed600bb45bc220c548e689e7ebf9 1 std/mem.zig
13626 15870467 1714505175933797837 98c52b2fa05c32ad77f1743a5f3383ee 1 std/mem/Allocator.zig
3726 15870265 1714505175887198850 d141686f91270c1ac884745688b966f5 1 std/heap/PageAllocator.zig
12352 15870222 1714505175877828054 85ba4034d104ed83a45a1bb6ea2f588a 1 std/crypto.zig
6209 15869946 1714505175812941583 89d4ae344badeeee363daef10bc5ad3f 1 std/crypto/tlcsprng.zig
17590 15870464 1714505175933173404 5ddd4d07802b9f332a306c207663eea0 1 std/Random.zig
28591 15869910 1714505175804694993 59b5bb504f414dd36ddf2daee0c6cece 1 std/crypto/argon2.zig
1582 15869906 1714505175803841526 86ddca3a893af0c503c7ad0bbdd2df47 1 std/crypto/errors.zig
54025 15870283 1714505175891503429 8c07809522884083ee986e616b3dbe11 1 std/Thread.zig
35896 15869879 1714505175797861055 fe6ca890c29b51018c25e7269898a5f5 1 std/fs.zig
111536 15870421 1714505175923906771 04f568f3193c7bb5986efc4ec52bfd91 1 std/fs/Dir.zig
292924 15870401 1714505175917824137 1db97817ddf9d5b1d7ab471e15a95db8 1 std/posix.zig
63987 15870286 1714505175892186569 92bca8ee6f4f51d8a0205a3b0896031a 1 std/c.zig
97387 15870446 1714505175929131564 f8f53a7e0fba6a225e63285feb76b585 1 std/c/darwin.zig
87217 15870289 1714505175892870125 d82200bd8e9f05406e233eef46e48149 1 std/array_list.zig
63631 15870420 1714505175923667405 8ad62418ac37873a457da68a3e6d1cbd 1 std/fs/File.zig
105663 15870242 1714505175882103052 8d4becc343bcd3adac05a9906326c6df 1 std/fmt.zig
77139 15870419 1714505175923441831 6ed68741d6922f90c45c6c388b6cdd8c 1 std/fs/path.zig
12352 15870222 1714505175877828054 85ba4034d104ed83a45a1bb6ea2f588a 1 std/crypto.zig
28591 15869910 1714505175804694993 59b5bb504f414dd36ddf2daee0c6cece 1 std/crypto/argon2.zig
1582 15869906 1714505175803841526 86ddca3a893af0c503c7ad0bbdd2df47 1 std/crypto/errors.zig
54025 15870283 1714505175891503429 8c07809522884083ee986e616b3dbe11 1 std/Thread.zig
52267 15869881 1714505175798348452 250bf69f713193c74da886706bb53369 1 std/crypto/chacha20.zig
6209 15869946 1714505175812941583 89d4ae344badeeee363daef10bc5ad3f 1 std/crypto/tlcsprng.zig
17590 15870464 1714505175933173404 5ddd4d07802b9f332a306c207663eea0 1 std/Random.zig
8365 15870282 1714505175891281480 1e96c9d448e9ae1d3162881bf730b07e 1 std/log.zig
13319 15870361 1714505175908844076 0ecb167cdc15eca0651fa6c248c99804 1 std/os/wasi.zig
29312 15869902 1714505175802977436 68a2396dfb48c7853d16411929f23ad8 1 std/crypto/blake2.zig
87217 15870289 1714505175892870125 d82200bd8e9f05406e233eef46e48149 1 std/array_list.zig
105663 15870242 1714505175882103052 8d4becc343bcd3adac05a9906326c6df 1 std/fmt.zig
70858 15870151 1714505175861630863 d15f9cf0c0650e6e2f0fd196c75c07ce 1 std/macho.zig
29312 15869902 1714505175802977436 68a2396dfb48c7853d16411929f23ad8 1 std/crypto/blake2.zig
10030 15870432 1714505175926284552 6ec4900de2fa66c512d3a1a8b197182b 1 std/Thread/Mutex.zig
19056 15869872 1714505175796319158 fbe5a337296572a6d62cbde681c465ea 1 std/atomic.zig
25504 15870053 1714505175837739559 0d380feec771d277d38493250815b334 1 std/io.zig
6449 15870126 1714505175855209283 3bcfe7862cea857ee79939a098991ad5 1 std/io/fixed_buffer_stream.zig
2259 15870132 1714505175856878717 d0332ba9399d02f163b9033b979acb28 1 std/io/Writer.zig
80096 15870118 1714505175853485143 dcae88764146b76769ce525b262e7a9a 1 std/unicode.zig
23315 15870241 1714505175881869519 ffbdbe729df38f396c8bfb00dd14e4d7 1 std/simd.zig
90072 15870461 1714505175932444349 bffdf0affa202d9bafbc94cdc1368f10 1 std/hash_map.zig
5237 15870142 1714505175859329037 1ffe030ee2cb56e3f4f0730c76a43a35 1 std/io/tty.zig
112733 15870149 1714505175861142507 6a3c4b87759cf30d9e7a65625e6143a3 1 std/dwarf.zig
@@ -48,9 +48,6 @@
1399 15870234 1714505175880352413 40a7d4ac60d12c6e9ca294acaed35474 1 std/dwarf/FORM.zig
3900 15870230 1714505175879488030 b5711d1b73e43c5aaea25647f88f9369 1 std/dwarf/TAG.zig
7395 15870231 1714505175879720938 0736a520f4793791a2cfc257bfcfd3b6 1 std/dwarf/AT.zig
77139 15870419 1714505175923441831 6ed68741d6922f90c45c6c388b6cdd8c 1 std/fs/path.zig
19056 15869872 1714505175796319158 fbe5a337296572a6d62cbde681c465ea 1 std/atomic.zig
10030 15870432 1714505175926284552 6ec4900de2fa66c512d3a1a8b197182b 1 std/Thread/Mutex.zig
12747 15870266 1714505175887461215 0c84990d94912da71f88ccdd844ff032 1 std/heap/arena_allocator.zig
14239 15870051 1714505175837218288 a69e9fd3810cdd1601c26dd47210af71 1 std/linked_list.zig
65714 15870259 1714505175885737991 ce544a97419b31ef988f4ec4c99eb39a 1 std/process.zig
@@ -58,11 +55,14 @@
29773 15870377 1714505175912439642 6e96f5117f2db4b1f67515385b4cbc04 1 std/sort.zig
51714 15870058 1714505175838953719 eb8790d984ce4a6ddd6376d877c85ff1 1 std/sort/block.zig
17851 15870272 1714505175889148856 62510503fe6b45659189d32c19c9dc45 1 std/leb128.zig
23315 15870241 1714505175881869519 ffbdbe729df38f396c8bfb00dd14e4d7 1 std/simd.zig
1429 15870454 1714505175930932534 c9f4dbaddebc77443c737541df8d3a09 1 std/c/darwin/aarch64.zig
19546 15870237 1714505175881009970 eeb537ce254d8635c5876f3cb23ba2ab 1 std/dwarf/abi.zig
26403 15870233 1714505175880144712 17cfec6893f0195cf3f2128e131aebbd 1 std/dwarf/call_frame.zig
71838 15870238 1714505175881232795 472566d679006f02ce08a8e6d3ca5840 1 std/dwarf/expressions.zig
43084 15870435 1714505175926937317 a67e9f409c649ae15d47dcc9582247f0 1 std/Thread/Futex.zig
6449 15870126 1714505175855209283 3bcfe7862cea857ee79939a098991ad5 1 std/io/fixed_buffer_stream.zig
80096 15870118 1714505175853485143 dcae88764146b76769ce525b262e7a9a 1 std/unicode.zig
1299 15870134 1714505175857398697 9ea5eaf4f2d36e2273f3ecec7f813b61 1 std/io/buffered_writer.zig
2803 15870205 1714505175874054329 66938abfeaf01425e2a886a3b2036936 1 std/math/sqrt.zig
13678 15870090 1714505175846756618 acfd077e4b0672dfb9bc1907ad8440ef 1 std/time.zig

Binary file not shown.