Код: Выделить всё
Method C_EncryptInit returned CKR_MECHANISM_PARAM_INVALID
ivBits
tagBits
aadBytes
12UL
128UL
null / со значением
96UL
128UL
null / со значением
0UL
128UL
null / со значением
16UL
0UL
null / со значением
0UL
0UL
null / со значением
Я проверил это:
- поддерживается HSM
Код: Выделить всё
CKM_AES_GCM - Флаги шифрования/дешифрования включены
- Размер ключа AES действителен
- Платформа соответствует x64
- AES-CBC успешно работает с тем же ключом/сессией
Код: Выделить всё
using Net.Pkcs11Interop.Common;
using Net.Pkcs11Interop.HighLevelAPI;
using System;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
class Program
{
private const string Pkcs11Library =
@"C:\Program Files\Microsoft Azure Cloud HSM Client SDK\libs\pkcs11\azcloudhsm_pkcs11.dll";
static void Main()
{
using (var pkcs11 = new Pkcs11(Pkcs11Library, AppType.MultiThreaded))
{
var slot = pkcs11.GetSlotList(SlotsType.WithTokenPresent).First();
using (var session = slot.OpenSession(SessionType.ReadWrite))
{
session.Login(CKU.CKU_USER, "password");
// AES key already exists on HSM
var key = session.FindAllObjects(new List
{
new ObjectAttribute(CKA.CKA_LABEL, "TestAESKey")
}).First();
byte[] plaintext = Encoding.UTF8.GetBytes("test");
byte[] iv = new byte[12];
using (var rng = RandomNumberGenerator.Create())
{
rng.GetBytes(iv);
}
var gcmParams =
session.Factories.MechanismParamsFactory.CreateCkGcmParams(
iv,
96UL,
null,
128UL);
var mechanism =
session.Factories.MechanismFactory.Create(
CKM.CKM_AES_GCM,
gcmParams);
byte[] encrypted =
session.Encrypt(
mechanism,
key,
plaintext);
Console.WriteLine(Convert.ToBase64String(encrypted));
}
}
}
}
Код: Выделить всё
using Net.Pkcs11Interop.Common;
using Net.Pkcs11Interop.HighLevelAPI;
using System;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
class Program
{
private const string Pkcs11Library =
@"C:\Program Files\Microsoft Azure Cloud HSM Client SDK\libs\pkcs11\azcloudhsm_pkcs11.dll";
static void Main()
{
using (var pkcs11 = new Pkcs11(Pkcs11Library, AppType.MultiThreaded))
{
var slot = pkcs11.GetSlotList(SlotsType.WithTokenPresent).First();
using (var session = slot.OpenSession(SessionType.ReadWrite))
{
session.Login(CKU.CKU_USER, "password");
// AES key already exists on HSM
var key = session.FindAllObjects(new List
{
new ObjectAttribute(CKA.CKA_LABEL, "TestAESKey")
}).First();
byte[] plaintext = Encoding.UTF8.GetBytes("test");
var iv = new byte[16];
using (var rng = RandomNumberGenerator.Create())
{
rng.GetBytes(iv);
}
var mechanism =
session.Factories.MechanismFactory.Create(
CKM.CKM_AES_CBC_PAD,
iv);
byte[] encrypted =
session.Encrypt(
mechanism,
key,
plaintext);
Console.WriteLine(Convert.ToBase64String(encrypted));
}
}
}
}
ps. Благодаря искусственному интеллекту я все еще получаю эту ошибку