add encryption executable code
This commit is contained in:
		
							parent
							
								
									2d9d010b76
								
							
						
					
					
						commit
						eaee625404
					
				
					 1 changed files with 45 additions and 0 deletions
				
			
		
							
								
								
									
										45
									
								
								src/encrypt.zig
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								src/encrypt.zig
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,45 @@ | |||
| const std = @import("std"); | ||||
| const crypt = @import("crypt.zig"); | ||||
| 
 | ||||
| pub fn main() !u8 { | ||||
|     var gpa = std.heap.GeneralPurposeAllocator(.{}){}; | ||||
|     defer _ = gpa.deinit(); | ||||
|     const allocator = gpa.allocator(); | ||||
|     var args = std.process.args(); | ||||
|     defer args.deinit(); | ||||
|     var first = true; | ||||
|     while (args.next(allocator)) |arg_or_err| { | ||||
|         const arg = try arg_or_err; | ||||
|         defer allocator.free(arg); | ||||
|         if (first) { | ||||
|             // skip argv[0] | ||||
|             first = false; | ||||
|             continue; | ||||
|         } | ||||
|         const key = try getKey(allocator); | ||||
|         defer allocator.free(key); | ||||
|         const encrypted = try crypt.encryptWithKey(allocator, key.*, arg); | ||||
|         defer allocator.free(encrypted); | ||||
|         try std.io.getStdOut().writeAll(encrypted); | ||||
|         break; | ||||
|     } | ||||
| 
 | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| fn getKey(allocator: std.mem.Allocator) !*[crypt.key_size]u8 { | ||||
|     const passfile = std.fs.cwd().openFile(".clippy", .{}) catch |e| { | ||||
|         if (e == error.FileNotFound) { | ||||
|             const cwd = std.fs.realpathAlloc(allocator, ".") catch "could not determine"; | ||||
|             defer allocator.free(cwd); | ||||
|             std.log.err("Could not find '.clippy' file in directory {s}. Please add a password to this file", .{cwd}); | ||||
|         } | ||||
|         return e; | ||||
|     }; | ||||
|     defer passfile.close(); | ||||
|     const pass = try passfile.readToEndAlloc(allocator, std.math.maxInt(usize)); | ||||
|     defer allocator.free(pass); | ||||
| 
 | ||||
|     const tmp_key = try crypt.keyFromPassword(allocator, pass, ""); // reuse key - this is slow | ||||
|     return tmp_key; | ||||
| } | ||||
		Loading…
	
	Add table
		
		Reference in a new issue