From 0d59561bee4cf7db10d53a8aa58952ae65e856b5 Mon Sep 17 00:00:00 2001 From: Wither OrNot Date: Thu, 13 Feb 2025 09:49:35 -0500 Subject: Initial commit Co-authored-by: neko <109633131+nekoppai@users.noreply.github.com> Co-authored-by: Lyssa <75037904+thecatontheceiling@users.noreply.github.com> Co-authored-by: abbodi1406 <33669284+abbodi1406@users.noreply.github.com> --- LibTSforge/Crypto/CryptoUtils.cs | 121 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 LibTSforge/Crypto/CryptoUtils.cs (limited to 'LibTSforge/Crypto/CryptoUtils.cs') diff --git a/LibTSforge/Crypto/CryptoUtils.cs b/LibTSforge/Crypto/CryptoUtils.cs new file mode 100644 index 0000000..4851570 --- /dev/null +++ b/LibTSforge/Crypto/CryptoUtils.cs @@ -0,0 +1,121 @@ +namespace LibTSforge.Crypto +{ + using System; + using System.Linq; + using System.Security.Cryptography; + + public static class CryptoUtils + { + public static byte[] GenerateRandomKey(int len) + { + byte[] rand = new byte[len]; + Random r = new Random(); + r.NextBytes(rand); + + return rand; + } + + public static byte[] AESEncrypt(byte[] data, byte[] key) + { + using (Aes aes = Aes.Create()) + { + aes.Key = key; + aes.Mode = CipherMode.CBC; + aes.Padding = PaddingMode.PKCS7; + + ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, Enumerable.Repeat((byte)0, 16).ToArray()); + byte[] encryptedData = encryptor.TransformFinalBlock(data, 0, data.Length); + return encryptedData; + } + } + + public static byte[] AESDecrypt(byte[] data, byte[] key) + { + using (Aes aes = Aes.Create()) + { + aes.Key = key; + aes.Mode = CipherMode.CBC; + aes.Padding = PaddingMode.PKCS7; + + ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, Enumerable.Repeat((byte)0, 16).ToArray()); + byte[] decryptedData = decryptor.TransformFinalBlock(data, 0, data.Length); + return decryptedData; + } + } + + public static byte[] RSADecrypt(byte[] rsaKey, byte[] data) + { + + using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) + { + rsa.ImportCspBlob(rsaKey); + return rsa.Decrypt(data, false); + } + } + + public static byte[] RSAEncrypt(byte[] rsaKey, byte[] data) + { + using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) + { + rsa.ImportCspBlob(rsaKey); + return rsa.Encrypt(data, false); + } + } + + public static byte[] RSASign(byte[] rsaKey, byte[] data) + { + using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) + { + rsa.ImportCspBlob(rsaKey); + RSAPKCS1SignatureFormatter formatter = new RSAPKCS1SignatureFormatter(rsa); + formatter.SetHashAlgorithm("SHA1"); + + byte[] hash; + using (SHA1 sha1 = SHA1.Create()) + { + hash = sha1.ComputeHash(data); + } + + return formatter.CreateSignature(hash); + } + } + + public static bool RSAVerifySignature(byte[] rsaKey, byte[] data, byte[] signature) + { + using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) + { + rsa.ImportCspBlob(rsaKey); + RSAPKCS1SignatureDeformatter deformatter = new RSAPKCS1SignatureDeformatter(rsa); + deformatter.SetHashAlgorithm("SHA1"); + + byte[] hash; + using (SHA1 sha1 = SHA1.Create()) + { + hash = sha1.ComputeHash(data); + } + + return deformatter.VerifySignature(hash, signature); + } + } + + public static byte[] HMACSign(byte[] key, byte[] data) + { + HMACSHA1 hmac = new HMACSHA1(key); + return hmac.ComputeHash(data); + } + + public static bool HMACVerify(byte[] key, byte[] data, byte[] signature) + { + HMACSHA1 hmac = new HMACSHA1(key); + return Enumerable.SequenceEqual(signature, HMACSign(key, data)); + } + + public static byte[] SHA256Hash(byte[] data) + { + using (SHA256 sha256 = SHA256.Create()) + { + return sha256.ComputeHash(data); + } + } + } +} -- cgit v1.2.3