Skip to content

Commit ee7c770

Browse files
committed
feat: add KeyGenerators class to enable users generate IV key and secret
1 parent 9a63e01 commit ee7c770

1 file changed

Lines changed: 55 additions & 0 deletions

File tree

src/Helpers/KeyGenerators.cs

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Security.Cryptography;
4+
using System.Text;
5+
6+
namespace SafeCrypt.src.Helpers
7+
{
8+
public class KeyGenerators
9+
{
10+
11+
/// <summary>
12+
/// Generates an array of random bytes using a cryptographically secure random number generator.
13+
/// </summary>
14+
/// <param name="length">The length of the byte array to generate.</param>
15+
/// <returns>An array of random bytes or the IV key</returns>
16+
/// <remarks>
17+
/// The method uses a cryptographically secure random number generator (RNGCryptoServiceProvider) to generate
18+
/// a byte array with the specified length, providing a high level of randomness suitable for cryptographic use.
19+
/// </remarks>
20+
/// <param name="length">The desired length of the generated byte array.</param>
21+
/// <returns>An array of random bytes with the specified length.</returns>
22+
/// <exception cref="ArgumentException">
23+
/// Thrown if the specified length is less than or equal to zero.
24+
/// </exception>
25+
public static byte[] GenerateRandomIVKeyAsBytes(int length)
26+
{
27+
byte[] randomBytes = new byte[length];
28+
using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
29+
{
30+
rng.GetBytes(randomBytes);
31+
}
32+
return randomBytes;
33+
}
34+
35+
/// <summary>
36+
/// Generates a valid AES secret key with the specified key size.
37+
/// </summary>
38+
/// <param name="keySize">The desired key size (128, 192, or 256 bits).</param>
39+
/// <returns>A valid AES secret key as a byte array.</returns>
40+
public static string GenerateAesSecretKey(int keySize)
41+
{
42+
if (keySize != 128 && keySize != 192 && keySize != 256)
43+
{
44+
throw new ArgumentException("Invalid key size. Supported sizes are 128, 192, or 256 bits.", nameof(keySize));
45+
}
46+
47+
using (Aes aesAlg = Aes.Create())
48+
{
49+
aesAlg.KeySize = keySize;
50+
aesAlg.GenerateKey();
51+
return Convert.ToBase64String(aesAlg.Key);
52+
}
53+
}
54+
}
55+
}

0 commit comments

Comments
 (0)