Open Fasjeit opened 2 years ago
Чиним явным копированием для ГОСТа
if (padding == RSAEncryptionPadding.Pkcs1)
{
// begin: gost
switch (recipient.Certificate.GetKeyAlgorithm())
{
case Oids.Gost3410:
case Oids.Gost3410_2012_256:
case Oids.Gost3410_2012_512:
{
// copy from cert info explicitly
pEncodeInfo->KeyEncryptionAlgorithm.pszObjId = hb.AllocAsciiString(recipient.Certificate.GetKeyAlgorithm());
// uint, копируем
pEncodeInfo->KeyEncryptionAlgorithm.Parameters.cbData = pCertInfo->SubjectPublicKeyInfo.Algorithm.Parameters.cbData;
// копируем из памяти и записываем
var pbDataBytes = new byte[pCertInfo->SubjectPublicKeyInfo.Algorithm.Parameters.cbData];
Marshal.Copy(pCertInfo->SubjectPublicKeyInfo.Algorithm.Parameters.pbData, pbDataBytes, 0, pbDataBytes.Length);
pEncodeInfo->KeyEncryptionAlgorithm.Parameters.pbData = hb.AllocBytes(pbDataBytes);
break;
}
default:
{
// end: gost
pEncodeInfo->KeyEncryptionAlgorithm.pszObjId = hb.AllocAsciiString(Oids.Rsa);
pEncodeInfo->KeyEncryptionAlgorithm.Parameters.cbData = (uint)s_rsaPkcsParameters.Length;
pEncodeInfo->KeyEncryptionAlgorithm.Parameters.pbData = hb.AllocBytes(s_rsaPkcsParameters);
break;
}
}
и добавляем тест из шарпея.
... почему то не заработал csp-non persist сертификат при проверке Cms, не смог выкусить keyspec. В целом минор, но нужно будет выяснить в чём дело и можно ли исправить.
На unix видимо и не работал.
CryptMsgGetParam(CMSG_ENVELOPE_ALGORITHM_PARAM)
возвращает -2146889724
- Invalid cryptographic message type
.
Судя по jira (https://jira.cp.ru/browse/CPCSP-11233) поведение методов исправлено только 15 октября 20 года, используемая версия csp для тестов - не позднее 27 августа.
Раньше точно не работало - https://www.cryptopro.ru/forum2/default.aspx?g=posts&m=61697#post61697
Актуализировать версию csp, проверить ещё раз.
Обновился до CSP 5.0.12417-6
, помогло с CMSG_ENVELOPE_ALGORITHM_PARAM
, теперь падаем с CMSG_CERT_COUNT_PARAM
.
Поддержка CMSG_CERT_COUNT_PARAM в capilight https://jira.cp.ru/browse/CPCSP-12931
Нет еще прогнозов когда примерно сможете поправить?)
Windows должен работать, на Linux ждём доработку в csp.
Починили CMSG_CERT_COUNT_PARAM
. Можем шифровать в ночной csp. Csp в сборке пока не обновлял.
Теперь чиним CMSG_UNPROTECTED_ATTR_PARAM
, ибо не можем расшифровывать.
https://jira.cp.ru/browse/CPCSP-12965
Починили CMSG_UNPROTECTED_ATTR_PARAM
. Версия с исправлениями - 5.0.12515
Сломались в corefx при поиске сертификата получателя по cn (строка из cms обрезалась до первого символа, и как результат не находил получателя) - тоже починили.
Расшифрование чувствительно к сроку действия закрытого ключа (пишет access denied). Если будут падать тесты на этом - отключить временно тест.
Тест ожидаемо ломается в ожидаемом месте. С отключение срока действия ключа пока вопрос.
Убираю пока тест с unix. На винде остаётся.
Проблема теста с контейнером на два ключа - на никсах ведёт себя иначе. Судя по всему шифрует и пытается расшифровать на ключе подписи.
Надо будет перегенерить нормально ключевые контейнеры.
В текущем релизе csp правок ещё нет, ждём следующего. После чего релизим corefx.
Также надо будет обновить инструкцию по сборке в DotnetSampleProject, указав новые версии csp.
В мастере всё должно работать с ночным csp (5.0.12515) на unix. Windows работает и на более старых версиях.
Ночную сборку мастера corefx можно взять тут win - https://ci.appveyor.com/project/CryptoPro/corefx/build/job/poqe4onpj1brqyvp/artifacts unix - https://ci.appveyor.com/project/CryptoPro/corefx/build/job/akb1y6ks72sqaucg/artifacts
Поломался
EnvelopedCms
, скорее всего после очередного вливания из upstream. Тестов не было....При вызове
envelopedCms.Encrypt(recip1);
вываливается
ASN1 bad tag value met
Проблема в том, что после одного из вливаний появился код в
PkcsPalWindows.Encrypt.cs
когда раньше было явное копирование