Code cleanup

This commit is contained in:
Stone_Red
2026-06-12 15:18:02 +02:00
parent 9f2aae3ba8
commit c70fd501bc
11 changed files with 735 additions and 707 deletions
+43 -44
View File
@@ -5,66 +5,65 @@ using Org.BouncyCastle.Crypto.Parameters;
using System.Security.Cryptography; using System.Security.Cryptography;
using System.Text; using System.Text;
namespace RemSox.Cryptography namespace RemSox.Cryptography;
public static class AesGcmCrypto
{ {
public static class AesGcmCrypto private const int NonceSize = 12;
private const int TagSize = 128;
public static byte[] Encrypt(byte[] plainData, byte[] key)
{ {
private const int NonceSize = 12; byte[] nonce = new byte[NonceSize];
private const int TagSize = 128; RandomNumberGenerator.Fill(nonce);
public static byte[] Encrypt(byte[] plainData, byte[] key) GcmBlockCipher cipher = new GcmBlockCipher(new AesEngine());
{ cipher.Init(true, new AeadParameters(new KeyParameter(key), TagSize, nonce));
byte[] nonce = new byte[NonceSize];
RandomNumberGenerator.Fill(nonce);
GcmBlockCipher cipher = new GcmBlockCipher(new AesEngine()); byte[] output = new byte[cipher.GetOutputSize(plainData.Length)];
cipher.Init(true, new AeadParameters(new KeyParameter(key), TagSize, nonce));
byte[] output = new byte[cipher.GetOutputSize(plainData.Length)]; int len = cipher.ProcessBytes(plainData, 0, plainData.Length, output, 0);
_ = cipher.DoFinal(output, len);
int len = cipher.ProcessBytes(plainData, 0, plainData.Length, output, 0); byte[] result = new byte[nonce.Length + output.Length];
_ = cipher.DoFinal(output, len);
byte[] result = new byte[nonce.Length + output.Length]; Buffer.BlockCopy(nonce, 0, result, 0, nonce.Length);
Buffer.BlockCopy(output, 0, result, nonce.Length, output.Length);
Buffer.BlockCopy(nonce, 0, result, 0, nonce.Length); return result;
Buffer.BlockCopy(output, 0, result, nonce.Length, output.Length); }
return result; public static string Encrypt(string text, byte[] key)
} {
byte[] data = Encoding.UTF8.GetBytes(text);
return Convert.ToBase64String(Encrypt(data, key));
}
public static string Encrypt(string text, byte[] key) public static byte[] Decrypt(byte[] encryptedData, byte[] key)
{ {
byte[] data = Encoding.UTF8.GetBytes(text); byte[] nonce = new byte[NonceSize];
return Convert.ToBase64String(Encrypt(data, key)); Buffer.BlockCopy(encryptedData, 0, nonce, 0, NonceSize);
}
public static byte[] Decrypt(byte[] encryptedData, byte[] key) int cipherLength = encryptedData.Length - NonceSize;
{ byte[] cipherBytes = new byte[cipherLength];
byte[] nonce = new byte[NonceSize];
Buffer.BlockCopy(encryptedData, 0, nonce, 0, NonceSize);
int cipherLength = encryptedData.Length - NonceSize; Buffer.BlockCopy(encryptedData, NonceSize, cipherBytes, 0, cipherLength);
byte[] cipherBytes = new byte[cipherLength];
Buffer.BlockCopy(encryptedData, NonceSize, cipherBytes, 0, cipherLength); GcmBlockCipher cipher = new GcmBlockCipher(new AesEngine());
cipher.Init(false, new AeadParameters(new KeyParameter(key), TagSize, nonce));
GcmBlockCipher cipher = new GcmBlockCipher(new AesEngine()); byte[] plain = new byte[cipher.GetOutputSize(cipherBytes.Length)];
cipher.Init(false, new AeadParameters(new KeyParameter(key), TagSize, nonce));
byte[] plain = new byte[cipher.GetOutputSize(cipherBytes.Length)]; int len = cipher.ProcessBytes(cipherBytes, 0, cipherBytes.Length, plain, 0);
_ = cipher.DoFinal(plain, len);
int len = cipher.ProcessBytes(cipherBytes, 0, cipherBytes.Length, plain, 0); return plain;
_ = cipher.DoFinal(plain, len); }
return plain; public static string Decrypt(string cipherText, byte[] key)
} {
byte[] data = Convert.FromBase64String(cipherText);
public static string Decrypt(string cipherText, byte[] key) byte[] plain = Decrypt(data, key);
{ return Encoding.UTF8.GetString(plain);
byte[] data = Convert.FromBase64String(cipherText);
byte[] plain = Decrypt(data, key);
return Encoding.UTF8.GetString(plain);
}
} }
} }
+7 -7
View File
@@ -1,13 +1,10 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Numerics;
using System.Threading.Tasks;
using Cosmos.Kernel.System.Keyboard; using Cosmos.Kernel.System.Keyboard;
using Cosmos.Kernel.System.Mouse; using Cosmos.Kernel.System.Mouse;
using RemSox.Plugs; using RemSox.Plugs;
using System.Drawing;
namespace RemSox.Cryptography; namespace RemSox.Cryptography;
public static class CryptoManager public static class CryptoManager
@@ -26,7 +23,10 @@ public static class CryptoManager
RandomNumberGeneratorImplementationImpl.AddMouseEntropy(dx, dy, dz, x, y); RandomNumberGeneratorImplementationImpl.AddMouseEntropy(dx, dy, dz, x, y);
if (!KeyboardManager.KeyAvailable) return; if (!KeyboardManager.KeyAvailable)
{
return;
}
KeyEvent keyEvent = KeyboardManager.Peek(); KeyEvent keyEvent = KeyboardManager.Peek();
+15 -16
View File
@@ -3,25 +3,24 @@ using Org.BouncyCastle.Crypto.Digests;
using Org.BouncyCastle.Crypto.Generators; using Org.BouncyCastle.Crypto.Generators;
using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Crypto.Parameters;
namespace RemSox.Cryptography namespace RemSox.Cryptography;
public static class Pkcs5S2PasswordKeyDeriver
{ {
public static class Pkcs5S2PasswordKeyDeriver private const int KeySize = 32; // 256-bit key
private const int Iterations = 150_000; // PBKDF2 cost factor
public static byte[] DeriveKey(string password, byte[] salt)
{ {
private const int KeySize = 32; // 256-bit key Pkcs5S2ParametersGenerator generator = new Pkcs5S2ParametersGenerator(new Sha256Digest());
private const int Iterations = 150_000; // PBKDF2 cost factor
public static byte[] DeriveKey(string password, byte[] salt) generator.Init(
{ PbeParametersGenerator.Pkcs5PasswordToBytes(password.ToCharArray()),
Pkcs5S2ParametersGenerator generator = new Pkcs5S2ParametersGenerator(new Sha256Digest()); salt,
Iterations
);
generator.Init( return ((KeyParameter)generator.GenerateDerivedMacParameters(KeySize * 8))
PbeParametersGenerator.Pkcs5PasswordToBytes(password.ToCharArray()), .GetKey();
salt,
Iterations
);
return ((KeyParameter)generator.GenerateDerivedMacParameters(KeySize * 8))
.GetKey();
}
} }
} }
+3 -2
View File
@@ -1,9 +1,11 @@
global using Sys = Cosmos.Kernel.System; global using Sys = Cosmos.Kernel.System;
using RemSox.Cryptography; using RemSox.Cryptography;
using RemSox.Processes; using RemSox.Processes;
using RemSox.Processing; using RemSox.Processing;
using RemSox.UI.CLI; using RemSox.UI.CLI;
using RemSox.UI.CLI.Commands; using RemSox.UI.CLI.Commands;
using System.Runtime; using System.Runtime;
namespace RemSox; namespace RemSox;
@@ -34,8 +36,7 @@ public class Kernel : Sys.Kernel
Sys.Mouse.MouseManager.Initialize(); Sys.Mouse.MouseManager.Initialize();
Sys.Mouse.MouseManager.SetScreenSize((int)canvas.Mode.Width, (int)canvas.Mode.Height); Sys.Mouse.MouseManager.SetScreenSize((int)canvas.Mode.Width, (int)canvas.Mode.Height);
Sys.Keyboard.KeyboardManager.Initialize(); Sys.Keyboard.KeyboardManager.Initialize();
_ = ProcessManager.SpawnProcess<CliProcess>();
ProcessManager.SpawnProcess<CliProcess>();
} }
protected override void Run() protected override void Run()
+33 -35
View File
@@ -1,48 +1,46 @@
using System;
using RemSox.Processing; using RemSox.Processing;
using RemSox.Utils; using RemSox.Utils;
using YesNt.Interpreter.Runtime; using YesNt.Interpreter.Runtime;
using YesNt.Interpreter.Utilities;
namespace RemSox.Processes namespace RemSox.Processes;
public class YesNtInterpreterProcess() : Process("YesNtInterpreter")
{ {
public class YesNtInterpreterProcess() : Process("YesNtInterpreter") private YesNtInterpreter interpreter = null!;
internal override void Start(string[] args)
{ {
YesNtInterpreter interpreter = null!; // TODO: eventually we want to load these from a file instead of hardcoding them here
args = [
"win_create \"Test\" 320 240",
"global winId = %win_last_id",
"win_flush ${winId}",
"print ${winId}",
"label test:",
"goto test"
];
interpreter = new();
internal override void Start(string[] args) YesNtWindowStatements.Register(interpreter, this);
interpreter.Prepare([.. args]);
}
internal override void Tick()
{
if (interpreter.IsRunning)
{ {
// TODO: eventually we want to load these from a file instead of hardcoding them here _ = interpreter.Step();
args = [
"win_create \"Test\" 320 240",
"global winId = %win_last_id",
"win_flush ${winId}",
"print ${winId}",
"label test:",
"goto test"
];
interpreter = new();
YesNtWindowStatements.Register(interpreter, this);
interpreter.Prepare([.. args]);
} }
else
internal override void Tick()
{ {
if (interpreter.IsRunning) RequestStop();
{
interpreter.Step();
}
else
{
RequestStop();
}
}
internal override void Stop()
{
interpreter.Stop();
} }
} }
internal override void Stop()
{
interpreter.Stop();
}
} }
+2 -1
View File
@@ -1,8 +1,9 @@
using System.Drawing;
using RemSox.Logging; using RemSox.Logging;
using RemSox.Processing.IPC; using RemSox.Processing.IPC;
using RemSox.UI.GUI.Windows; using RemSox.UI.GUI.Windows;
using System.Drawing;
namespace RemSox.Processing; namespace RemSox.Processing;
public abstract class Process(string name) public abstract class Process(string name)
+1 -1
View File
@@ -216,7 +216,7 @@ public static class ProcessManager
{ {
process.Stop(); process.Stop();
if (processes.TryRemove(process.Id, out var processEntry)) if (processes.TryRemove(process.Id, out (Process Process, ProcessMetrics Metrics, TaskCompletionSource ExitSource) processEntry))
{ {
_ = processEntry.ExitSource.TrySetResult(); _ = processEntry.ExitSource.TrySetResult();
} }
+1 -1
View File
@@ -60,7 +60,7 @@ public static class CommandManager
arguments = trimmedInput[commandName.Length..].TrimStart(); arguments = trimmedInput[commandName.Length..].TrimStart();
} }
cancellationToken.Register(async () => await entry.Value.StopAsync()); CancellationTokenRegistration unused = cancellationToken.Register(async () => await entry.Value.StopAsync());
await entry.Value.ExecuteAsync(arguments, printLine); await entry.Value.ExecuteAsync(arguments, printLine);
return true; return true;
+17 -22
View File
@@ -1,29 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using RemSox.Processing; using RemSox.Processing;
namespace RemSox.UI.CLI.Commands namespace RemSox.UI.CLI.Commands;
public class YesNtCommand : ICommand
{ {
public class YesNtCommand : ICommand public string Name => "yesnt";
public string Description => "Start the YesNt interpreter";
private int processId;
public async Task ExecuteAsync(string? arguments, Action<string> printLine)
{ {
public string Name => "yesnt"; processId = ProcessManager.SpawnProcess<Processes.YesNtInterpreterProcess>(arguments?.Split(',') ?? []);
await ProcessManager.WaitForProcessExitAsync(processId);
}
public string Description => "Start the YesNt interpreter"; public Task StopAsync()
{
private int processId; ProcessManager.StopProcess(processId);
return Task.CompletedTask;
public async Task ExecuteAsync(string? arguments, Action<string> printLine)
{
processId = ProcessManager.SpawnProcess<Processes.YesNtInterpreterProcess>(arguments?.Split(',') ?? []);
await ProcessManager.WaitForProcessExitAsync(processId);
}
public Task StopAsync()
{
ProcessManager.StopProcess(processId);
return Task.CompletedTask;
}
} }
} }
+4 -1
View File
@@ -24,5 +24,8 @@ public interface ICommand
/// <summary> /// <summary>
/// Interrupts the command if it's currently running. This is called when the user presses Ctrl+C in the CLI. /// Interrupts the command if it's currently running. This is called when the user presses Ctrl+C in the CLI.
/// </summary> /// </summary>
Task StopAsync() => Task.CompletedTask; Task StopAsync()
{
return Task.CompletedTask;
}
} }
File diff suppressed because it is too large Load Diff