Статус: Участник
Группы: Участники
Зарегистрирован: 12.04.2016(UTC) Сообщений: 19  Откуда: Екатеринбург Сказал(а) «Спасибо»: 2 раз Поблагодарили: 1 раз в 1 постах
|
Здравствуйте! Через browser plugin я получаю подпись Код:
var signature = oSignedData.SignCades(oSigner, CADES_BES, true);
с параметром true я ожидаю в signature увидеть detached подпись, но выходит почему-то присоединенная. По каким причинам такое может быть?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.04.2016(UTC) Сообщений: 19  Откуда: Екатеринбург Сказал(а) «Спасибо»: 2 раз Поблагодарили: 1 раз в 1 постах
|
в другой теме нашел сообщение (5-летней давности): Автор: Femi  В cadescom создание отделенной подписи хеша не реализовано, только вместе с данными не уверен является ли это ответом на мой первоначальный вопрос, ведь из документации следует, что в SignCades третий параметр отвечает за создание присоединенной или отсоединенной подписи, верно?
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
А можете приложить две подписи которые вы получили с true и false значением? А так же более полный пример кода подписания. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.04.2016(UTC) Сообщений: 19  Откуда: Екатеринбург Сказал(а) «Спасибо»: 2 раз Поблагодарили: 1 раз в 1 постах
|
Автор: cross  А можете приложить две подписи которые вы получили с true и false значением? А так же более полный пример кода подписания. да, конечно. чтобы не мудрить, беру пример c http://www.cryptopro.ru/sites/d...ge/cades_bes_sample.htmlзапускаю у себя локально в IE. код в скриптах не меняю за исключением булевого параметра в функции SignCades(); (непосредственно в демо-скриптах это в функции MakeCadesBesSign_NPAPI(...);) Код:
//...
if (dataToSign) {
// Данные на подпись ввели
oSignedData.ContentEncoding = 1; //CADESCOM_BASE64_TO_BINARY
if(typeof(setDisplayData) != 'undefined')
{
//Set display data flag flag for devices like Rutoken PinPad
oSignedData.DisplayData = 1;
}
oSignedData.Content = Base64.encode(dataToSign);
oSigner.Options = 1; //CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN
try {
Signature = oSignedData.SignCades(oSigner, CADES_BES, true);
}
catch (err) {
errormes = "Не удалось создать подпись из-за ошибки: " + GetErrorMessage(err);
alert(errormes);
throw errormes;
}
}
//...
к примеру для строки Код:
worldasdfddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddfffffffffffffffffffffffffffffffttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
подпись (c параметром true): Код:
MIIIWgYJKoZIhvcNAQcCoIIISzCCCEcCAQExDDAKBgYqhQMCAgkFADALBgkqhkiG9w0BBwGgggXT
MIICTDCCAfugAwIBAgIQK24zUf1usq1IIAIDy1uhQTAIBgYqhQMCAgMwfzEjMCEGCSqGSIb3DQEJ
ARYUc3VwcG9ydEBjcnlwdG9wcm8ucnUxCzAJBgNVBAYTAlJVMQ8wDQYDVQQHEwZNb3Njb3cxFzAV
BgNVBAoTDkNSWVBUTy1QUk8gTExDMSEwHwYDVQQDExhDUllQVE8tUFJPIFRlc3QgQ2VudGVyIDIw
HhcNMTQwODA1MTM0NDI0WhcNMTkwODA1MTM1NDAzWjB/MSMwIQYJKoZIhvcNAQkBFhRzdXBwb3J0
QGNyeXB0b3Byby5ydTELMAkGA1UEBhMCUlUxDzANBgNVBAcTBk1vc2NvdzEXMBUGA1UEChMOQ1JZ
UFRPLVBSTyBMTEMxITAfBgNVBAMTGENSWVBUTy1QUk8gVGVzdCBDZW50ZXIgMjBjMBwGBiqFAwIC
EzASBgcqhQMCAiMBBgcqhQMCAh4BA0MABEDgUgrcR9wpvdcgXwxIfO/UjR52JdC9UgWOrc3Ky2YM
punm+lAm5JIgbnCASrzW/Q43EMfmhQGy7dZijrm3zceeo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0T
AQH/BAUwAwEB/zAdBgNVHQ4EFgQUFTF8sI0a3mbXFZxJUpcXJLkBeoMwEAYJKwYBBAGCNxUBBAMC
AQAwCAYGKoUDAgIDA0EA2MocS+lhIGVHLNXI6jiI3s3scchFv7+c5d7/VVp3JJnt4Lki0avn90/m
0G97j1oq407pZA2QUDLB8eO0SRJX1TCCA38wggMuoAMCAQICExIAD77rBCC7Ee/jpokAAAAPvusw
CAYGKoUDAgIDMH8xIzAhBgkqhkiG9w0BCQEWFHN1cHBvcnRAY3J5cHRvcHJvLnJ1MQswCQYDVQQG
EwJSVTEPMA0GA1UEBxMGTW9zY293MRcwFQYDVQQKEw5DUllQVE8tUFJPIExMQzEhMB8GA1UEAxMY
Q1JZUFRPLVBSTyBUZXN0IENlbnRlciAyMB4XDTE2MDQxMzA5NDM0MVoXDTE2MDcxMzA5NTM0MVow
gY0xIjAgBgkqhkiG9w0BCQEWE2VkZC5sYXllckBnbWFpbC5jb20xEjAQBgNVBAMMCUVkZCBMYXll
cjEPMA0GA1UECgwGU2FwZmlyMRUwEwYDVQQHDAxFa2F0ZXJpbmJ1cmcxHjAcBgNVBAgMFVN2ZXJk
bG92c2theWEgb2JsYXN0JzELMAkGA1UEBhMCUlUwYzAcBgYqhQMCAhMwEgYHKoUDAgIkAAYHKoUD
AgIeAQNDAARA5gvhxQjeTIT+KI4yCDYcE6kxU8PV/8r+/DzSGbNAncokH520OseVtwtP3jhVBobM
MVVX39Ou5EktH/L3hg0b7aOCAXAwggFsMA4GA1UdDwEB/wQEAwIE8DATBgNVHSUEDDAKBggrBgEF
BQcDAjAdBgNVHQ4EFgQU+hRn5IMtqfFHtSQGmaPm4jUm0J8wHwYDVR0jBBgwFoAUFTF8sI0a3mbX
FZxJUpcXJLkBeoMwWQYDVR0fBFIwUDBOoEygSoZIaHR0cDovL3Rlc3RjYS5jcnlwdG9wcm8ucnUv
Q2VydEVucm9sbC9DUllQVE8tUFJPJTIwVGVzdCUyMENlbnRlciUyMDIuY3JsMIGpBggrBgEFBQcB
AQSBnDCBmTBhBggrBgEFBQcwAoZVaHR0cDovL3Rlc3RjYS5jcnlwdG9wcm8ucnUvQ2VydEVucm9s
bC90ZXN0LWNhLTIwMTRfQ1JZUFRPLVBSTyUyMFRlc3QlMjBDZW50ZXIlMjAyLmNydDA0BggrBgEF
BQcwAYYoaHR0cDovL3Rlc3RjYS5jcnlwdG9wcm8ucnUvb2NzcC9vY3NwLnNyZjAIBgYqhQMCAgMD
QQD2kYQnZt9J1WbSvPtHkz/bCQiLjZHIPnHlgFUXdKu4tsLBuFFvp0XJ3gFtG/UjZVNghoSYTppw
hkquUNYfZL9YMYICTjCCAkoCAQEwgZYwfzEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBjcnlwdG9w
cm8ucnUxCzAJBgNVBAYTAlJVMQ8wDQYDVQQHEwZNb3Njb3cxFzAVBgNVBAoTDkNSWVBUTy1QUk8g
TExDMSEwHwYDVQQDExhDUllQVE8tUFJPIFRlc3QgQ2VudGVyIDICExIAD77rBCC7Ee/jpokAAAAP
vuswCgYGKoUDAgIJBQCgggFQMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkF
MQ8XDTE2MDUxNTEzNDg1MlowLwYJKoZIhvcNAQkEMSIEIOXmmqvKOuJug4BdxpBHlmZlTOGMahNj
i4VyTjbceBsqMIHkBgsqhkiG9w0BCRACLzGB1DCB0TCBzjCByzAIBgYqhQMCAgkEIBFg9+U34cq7
bC6aqPr1uLZtp2NulwA3cXavL0+ELQ6wMIGcMIGEpIGBMH8xIzAhBgkqhkiG9w0BCQEWFHN1cHBv
cnRAY3J5cHRvcHJvLnJ1MQswCQYDVQQGEwJSVTEPMA0GA1UEBxMGTW9zY293MRcwFQYDVQQKEw5D
UllQVE8tUFJPIExMQzEhMB8GA1UEAxMYQ1JZUFRPLVBSTyBUZXN0IENlbnRlciAyAhMSAA++6wQg
uxHv46aJAAAAD77rMAoGBiqFAwICEwUABECK4KHC7ZdcMt5CSWDCDNIFFmRbE0ki/SqIhUG6Hsyn
cdFt1jPwUS/30LmJexNmYipeme0u+JIpIvANkUEPWcM2
далее меняю параметр: Код:
Signature = oSignedData.SignCades(oSigner, CADES_BES, false);
для этой же строки получаю: Код:
MIILdgYJKoZIhvcNAQcCoIILZzCCC2MCAQExDDAKBgYqhQMCAgkFADCCAyUGCSqGSIb3DQEHAaCC
AxYEggMSd29ybGRhc2RmZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRk
ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRk
ZGRkZGRkZGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ0dHR0dHR0dHR0dHR0dHR0dHR0
dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJy
cnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJyZGRkZGRkZGRkZGRkZGRk
ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkc3Nzc3Nz
c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nz
c3Nzc3Nzc3FxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFx
cXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2Nj
Y2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2Nj
Y2NjY2NjdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2
dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2oIIF0zCC
AkwwggH7oAMCAQICECtuM1H9brKtSCACA8tboUEwCAYGKoUDAgIDMH8xIzAhBgkqhkiG9w0BCQEW
FHN1cHBvcnRAY3J5cHRvcHJvLnJ1MQswCQYDVQQGEwJSVTEPMA0GA1UEBxMGTW9zY293MRcwFQYD
VQQKEw5DUllQVE8tUFJPIExMQzEhMB8GA1UEAxMYQ1JZUFRPLVBSTyBUZXN0IENlbnRlciAyMB4X
DTE0MDgwNTEzNDQyNFoXDTE5MDgwNTEzNTQwM1owfzEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBj
cnlwdG9wcm8ucnUxCzAJBgNVBAYTAlJVMQ8wDQYDVQQHEwZNb3Njb3cxFzAVBgNVBAoTDkNSWVBU
Ty1QUk8gTExDMSEwHwYDVQQDExhDUllQVE8tUFJPIFRlc3QgQ2VudGVyIDIwYzAcBgYqhQMCAhMw
EgYHKoUDAgIjAQYHKoUDAgIeAQNDAARA4FIK3EfcKb3XIF8MSHzv1I0ediXQvVIFjq3NystmDKbp
5vpQJuSSIG5wgEq81v0ONxDH5oUBsu3WYo65t83HnqNRME8wCwYDVR0PBAQDAgGGMA8GA1UdEwEB
/wQFMAMBAf8wHQYDVR0OBBYEFBUxfLCNGt5m1xWcSVKXFyS5AXqDMBAGCSsGAQQBgjcVAQQDAgEA
MAgGBiqFAwICAwNBANjKHEvpYSBlRyzVyOo4iN7N7HHIRb+/nOXe/1VadySZ7eC5ItGr5/dP5tBv
e49aKuNO6WQNkFAywfHjtEkSV9UwggN/MIIDLqADAgECAhMSAA++6wQguxHv46aJAAAAD77rMAgG
BiqFAwICAzB/MSMwIQYJKoZIhvcNAQkBFhRzdXBwb3J0QGNyeXB0b3Byby5ydTELMAkGA1UEBhMC
UlUxDzANBgNVBAcTBk1vc2NvdzEXMBUGA1UEChMOQ1JZUFRPLVBSTyBMTEMxITAfBgNVBAMTGENS
WVBUTy1QUk8gVGVzdCBDZW50ZXIgMjAeFw0xNjA0MTMwOTQzNDFaFw0xNjA3MTMwOTUzNDFaMIGN
MSIwIAYJKoZIhvcNAQkBFhNlZGQubGF5ZXJAZ21haWwuY29tMRIwEAYDVQQDDAlFZGQgTGF5ZXIx
DzANBgNVBAoMBlNhcGZpcjEVMBMGA1UEBwwMRWthdGVyaW5idXJnMR4wHAYDVQQIDBVTdmVyZGxv
dnNrYXlhIG9ibGFzdCcxCzAJBgNVBAYTAlJVMGMwHAYGKoUDAgITMBIGByqFAwICJAAGByqFAwIC
HgEDQwAEQOYL4cUI3kyE/iiOMgg2HBOpMVPD1f/K/vw80hmzQJ3KJB+dtDrHlbcLT944VQaGzDFV
V9/TruRJLR/y94YNG+2jggFwMIIBbDAOBgNVHQ8BAf8EBAMCBPAwEwYDVR0lBAwwCgYIKwYBBQUH
AwIwHQYDVR0OBBYEFPoUZ+SDLanxR7UkBpmj5uI1JtCfMB8GA1UdIwQYMBaAFBUxfLCNGt5m1xWc
SVKXFyS5AXqDMFkGA1UdHwRSMFAwTqBMoEqGSGh0dHA6Ly90ZXN0Y2EuY3J5cHRvcHJvLnJ1L0Nl
cnRFbnJvbGwvQ1JZUFRPLVBSTyUyMFRlc3QlMjBDZW50ZXIlMjAyLmNybDCBqQYIKwYBBQUHAQEE
gZwwgZkwYQYIKwYBBQUHMAKGVWh0dHA6Ly90ZXN0Y2EuY3J5cHRvcHJvLnJ1L0NlcnRFbnJvbGwv
dGVzdC1jYS0yMDE0X0NSWVBUTy1QUk8lMjBUZXN0JTIwQ2VudGVyJTIwMi5jcnQwNAYIKwYBBQUH
MAGGKGh0dHA6Ly90ZXN0Y2EuY3J5cHRvcHJvLnJ1L29jc3Avb2NzcC5zcmYwCAYGKoUDAgIDA0EA
9pGEJ2bfSdVm0rz7R5M/2wkIi42RyD5x5YBVF3SruLbCwbhRb6dFyd4BbRv1I2VTYIaEmE6acIZK
rlDWH2S/WDGCAk4wggJKAgEBMIGWMH8xIzAhBgkqhkiG9w0BCQEWFHN1cHBvcnRAY3J5cHRvcHJv
LnJ1MQswCQYDVQQGEwJSVTEPMA0GA1UEBxMGTW9zY293MRcwFQYDVQQKEw5DUllQVE8tUFJPIExM
QzEhMB8GA1UEAxMYQ1JZUFRPLVBSTyBUZXN0IENlbnRlciAyAhMSAA++6wQguxHv46aJAAAAD77r
MAoGBiqFAwICCQUAoIIBUDAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEP
Fw0xNjA1MTUxMzUwMjFaMC8GCSqGSIb3DQEJBDEiBCDl5pqryjriboOAXcaQR5ZmZUzhjGoTY4uF
ck423HgbKjCB5AYLKoZIhvcNAQkQAi8xgdQwgdEwgc4wgcswCAYGKoUDAgIJBCARYPflN+HKu2wu
mqj69bi2badjbpcAN3F2ry9PhC0OsDCBnDCBhKSBgTB/MSMwIQYJKoZIhvcNAQkBFhRzdXBwb3J0
QGNyeXB0b3Byby5ydTELMAkGA1UEBhMCUlUxDzANBgNVBAcTBk1vc2NvdzEXMBUGA1UEChMOQ1JZ
UFRPLVBSTyBMTEMxITAfBgNVBAMTGENSWVBUTy1QUk8gVGVzdCBDZW50ZXIgMgITEgAPvusEILsR
7+OmiQAAAA++6zAKBgYqhQMCAhMFAARA9eDuF+SWS5iCCpzAbNoZ6Mq5+yH/3PSatZXMLCHU0nf9
4iMuKH93QzeREDKkgp+NndfBtODN5wau5rmqCzcoDA==
вторая подпись присоединенная, поскольку видно, что исходные данные в неё включены, она больше по размеру но действительно ли первая подпись считается detached? Отредактировано пользователем 15 мая 2016 г. 17:45:24(UTC)
| Причина: Не указана
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.04.2016(UTC) Сообщений: 19  Откуда: Екатеринбург Сказал(а) «Спасибо»: 2 раз Поблагодарили: 1 раз в 1 постах
|
почему сомневаюсь, detached или нет: у нас решили применить схему: подписание на клиенте, а проверка подписи - на сервере средствами криптопро .NET я отправляю сформированную подпись из браузера на сервер, проверка подписи не проходит (хотя тесты на серверной части есть и выполняются) полез посмотреть как там и что, в тесте на сервере проверяется валидность подписи для строки: "Hello Excellent World" а подпись записана в файле 64 байта: O†Ый±Вд?аHЦHї3Q#„їД1LtєЦҐh)dбY|††КЕ…k€1Ќ`uETk6¦DЁюЌ Fv перекодировать щас нет возможности, но тесты success т.е. по сути с дотнетовской стороны тоже вроде все хорошо Код:
Gost3410CryptoServiceProvider myProvider = (Gost3410CryptoServiceProvider) certificate.PublicKey.Key);
return myProvider.VerifyData(data, "Gost3411", signature); // = true
работает исправно. однако мне не понятно, почему размер подписи небольшой? формат подписи какой-то другой? явно недопонимаю, может на сервер подпись надо передать в другом виде, чтобы верификация прошла успешно, а не в том, в каком, выдает клиент (в предыдущем посте)?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,842   Сказал «Спасибо»: 584 раз Поблагодарили: 2320 раз в 1818 постах
|
Здравствуйте.
Сервер ждет 64 байта? Это значение подписи.
А на клиенте формируется отсоединенная подпись в cms (pkcs#7) |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.04.2016(UTC) Сообщений: 19  Откуда: Екатеринбург Сказал(а) «Спасибо»: 2 раз Поблагодарили: 1 раз в 1 постах
|
Автор: Андрей *  Здравствуйте. Сервер ждет 64 байта? Это значение подписи. А на клиенте формируется отсоединенная подпись в cms (pkcs#7)
выходит, что да, ожидается подпись в 64 байта. а как преобразовать полученную с клиента подпись (cms (pkcs#7)) в то, что ожидает сервер?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,842   Сказал «Спасибо»: 584 раз Поблагодарили: 2320 раз в 1818 постах
|
|
|
 2 пользователей поблагодарили Андрей * за этот пост.
|
Edisson оставлено 15.05.2016(UTC), sniker оставлено 05.06.2020(UTC)
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,842   Сказал «Спасибо»: 584 раз Поблагодарили: 2320 раз в 1818 постах
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.04.2016(UTC) Сообщений: 19  Откуда: Екатеринбург Сказал(а) «Спасибо»: 2 раз Поблагодарили: 1 раз в 1 постах
|
Автор: Андрей *  http://cpdn.cryptopro.ru/content/cades/interface_c_ad_e_s_c_o_m_1_1_i_raw_signature.html спасибо, буду разбираться далее:)
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close