Добрый день, не валидируется результат подписания в с++ подписываю ключем первого руководителя (Файл прикреплен) мои шаги:
1) Подписываю строку "<root>test</root>" в Java, получаю следующий результат:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><root>test<ds:Signature xmlns:ds="
www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="
www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<ds:SignatureMethod Algorithm="
www.w3.org/2001/04/xmldsig-more#gost34310-gost34311"/>
<ds:Reference URI="">
<ds:Transforms>
<ds:Transform Algorithm="
www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<ds:Transform Algorithm="
www.w3.org/TR/2001/REC-xml-c14n-20010315...hComments"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="
www.w3.org/2001/04/xmldsig-more#gost34311"/>
<ds:DigestValue>MCQqoB1LMsOOXTaTdN1LpRGXSVa01ixcZFfHpoi9Uaw=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>
lkVSyQ1lyJ5IcozeEkngA2luPbOw7/Vl27/7tXG7iMDoMYr9Rn3S3ovaBNmqM9pUBcPLKpYP23mL
rujRrLRSKA==
</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>
MIIEMDCCA9qgAwIBAgIUIPG1ftMYUFa98/cATOOIEVer+EQwDQYJKoMOAwoBAQECBQAwUzELMAkG
A1UEBhMCS1oxRDBCBgNVBAMMO9Kw0JvQotCi0KvSmiDQmtCj05jQm9CQ0J3QlNCr0KDQo9Co0Ksg
0J7QoNCi0JDQm9Cr0pogKEdPU1QpMB4XDTE4MDgyMzA0MTEyNVoXDTE5MDgyMzA0MTEyNVowgdsx
HjAcBgNVBAMMFdCi0JXQodCi0J7QkiDQotCV0KHQojEVMBMGA1UEBAwM0KLQldCh0KLQntCSMRgw
FgYDVQQFEw9JSU4xMjM0NTY3ODkwMTExCzAJBgNVBAYTAktaMRUwEwYDVQQHDAzQkNCb0JzQkNCi
0KsxFTATBgNVBAgMDNCQ0JvQnNCQ0KLQqzEYMBYGA1UECgwP0JDQniAi0KLQldCh0KIiMRgwFgYD
VQQLDA9CSU4xMjM0NTY3ODkwMjExGTAXBgNVBCoMENCi0JXQodCi0J7QktCY0KcwbDAlBgkqgw4D
CgEBAQEwGAYKKoMOAwoBAQEBAQYKKoMOAwoBAwEBAANDAARA01B7RhwfNOTWV/RewpPjuEwRyAG/
hmQLgxOCqAS48SmMpOXJ/0sg2WBW1cvhIl9Wk3flv+ZyrdOqlmA86/h0EaOCAeswggHnMA4GA1Ud
DwEB/wQEAwIGwDAoBgNVHSUEITAfBggrBgEFBQcDBAYIKoMOAwMEAQIGCSqDDgMDBAECATAPBgNV
HSMECDAGgARbanPpMB0GA1UdDgQWBBT4pCIjggm251MRZDG2mwkXjxTp1zBeBgNVHSAEVzBVMFMG
ByqDDgMDAgEwSDAhBggrBgEFBQcCARYVaHR0cDovL3BraS5nb3Yua3ovY3BzMCMGCCsGAQUFBwIC
MBcMFWh0dHA6Ly9wa2kuZ292Lmt6L2NwczBYBgNVHR8EUTBPME2gS6BJhiJodHRwOi8vY3JsLnBr
aS5nb3Yua3ovbmNhX2dvc3QuY3JshiNodHRwOi8vY3JsMS5wa2kuZ292Lmt6L25jYV9nb3N0LmNy
bDBcBgNVHS4EVTBTMFGgT6BNhiRodHRwOi8vY3JsLnBraS5nb3Yua3ovbmNhX2RfZ29zdC5jcmyG
JWh0dHA6Ly9jcmwxLnBraS5nb3Yua3ovbmNhX2RfZ29zdC5jcmwwYwYIKwYBBQUHAQEEVzBVMC8G
CCsGAQUFBzAChiNodHRwOi8vcGtpLmdvdi5rei9jZXJ0L25jYV9nb3N0LmNlcjAiBggrBgEFBQcw
AYYWaHR0cDovL29jc3AucGtpLmdvdi5rejANBgkqgw4DCgEBAQIFAANBAHogeaStou18/GXPBmf+
YhazmKrTdsu+Uxp2x3FSQURvraDDaSjOBia/pubfyQ5grUh61AML0/t03jrqfmaqEns=
</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature></root>
ds:DigestValue = MCQqoB1LMsOOXTaTdN1LpRGXSVa01ixcZFfHpoi9Uaw=
ds:SignatureValue = lkVSyQ1lyJ5IcozeEkngA2luPbOw7/Vl27/7tXG7iMDoMYr9Rn3S3ovaBNmqM9pUBcPLKpYP23mLrujRrLRSKA==
В Java результат валидируется успешно.
2) Подписываю эту же строку с помощью примера NCALayer:
Результат - ds:DigestValue совпадает как и должен, подпись отличается как и должна, попытка свалидировать подпись в Java - успешна.
ds:DigestValue = MCQqoB1LMsOOXTaTdN1LpRGXSVa01ixcZFfHpoi9Uaw=
ds:SignatureValue = XIFm8jYxCbnLbkQUti7IiCByCbV31iGTtBL4xIoZ7LzhUdrh90wkKpcCaGwA6d9PywcPU+vvL37u1JGZRYMDJA==
3) Подписываю строку в Visual Studio и тут появляются вопросы:
- Как получить DigestValue?
- Результат подписания перевожу в base64 получается "uunBuJx+Y1pTMUFzpEiSg3F1/q34Psdtr4zm5VKAmWrWKI3+CsNirWPsKWEKLM8xk0ZwtywcfqNGFAtz5DtuCg==" Пытаюсь свалидивать в java - результат неудачный.
Цель - сформировать в с++ xml файл такого-же образца как получается в java и ncalayer, для этого все есть кроме DigestValue и самой подписи, подскажите пожалуйста как их получить в с++?