Статус: Участник
Группы: Участники
Зарегистрирован: 06.09.2013(UTC) Сообщений: 14
|
Необходимо на устройство экспортировать ключ, чтобы производить подписи файлов. На винде ключ экспортируется в виде папки с 6 файлами. Как их правильно перенести в хранилище на iPad?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.02.2008(UTC) Сообщений: 1,491 Откуда: Крипто-Про
Поблагодарили: 40 раз в 37 постах
|
Если ключи были созданы разрешенными для экспорта (их можно скопировать кнопкой «Скопировать контейнер»), то перенести их на ios можно. Для этого нужно на машине с windows/unix экспортировать ключ в блоб, передать блоб на ios и там импортировать из блоба в контейнер. У нас в SDK есть похожие примеры: http://cpdn.cryptopro.ru...gCertificateExample.htmlhttp://cpdn.cryptopro.ru...ngSessionKeyExample.htmlЕсли ключи были созданы запрещенными для экспорта, то средствами API их нельзя никуда скопировать. Чтобы это проверить, можно попытаться скопировать ключи, например, при помощи «Сервис – Скопировать контейнер» и, если вы получите ошибку «Ключ не может быть использован в указанном состоянии», это означает, что ключ запрещен для экспорта. |
Татьяна ООО Крипто-Про |
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 06.09.2013(UTC) Сообщений: 14
|
пытаюсь на основе ваших прпимеров экспортировать ключ на iPad в файл. Не получаеться. Зависает на строке: Код:
if (CryptExportKey(
hSenderPrivateKey,
0,
PRIVATEKEYBLOB,
0,
NULL,
&dwBlobLenPrivateKey)) {
printf("Size of the BLOB for the responder public key determined. \n");
}
Весь код: Код:
HCERTSTORE hCertStore = CertOpenSystemStore(0, "MY");
PCCERT_CONTEXT pUserCert = CertEnumCertificatesInStore(hCertStore, NULL);
DWORD dwBlobLenPrivateKey;
BYTE *pbBlobPrivateKey = NULL;
HCRYPTPROV hProvSender = 0; // Дескриптор CSP отправителя
DWORD dwKeySpecSender;
HCRYPTKEY hSenderPrivateKey = 0; // Дескриптор открытого ключа отправителя
if (CryptAcquireCertificatePrivateKey(
pUserCert,
0,
NULL,
&hProvSender,
&dwKeySpecSender,
NULL)) {
printf("The CSP handle has been acquired. \n");
}
else {
printf("Error during CryptAcquireCertificatePrivateKey.");
}
if (CryptGetUserKey(
hProvSender,
dwKeySpecSender,
&hSenderPrivateKey)) {
printf("The sender private key has been acquired. \n");
}
else {
printf("Error during CryptGetUserKey private key.");
}
if (CryptExportKey(
hSenderPrivateKey,
0,
PRIVATEKEYBLOB,
0,
NULL,
&dwBlobLenPrivateKey)) {
printf("Size of the BLOB for the responder public key determined. \n");
}
else {
printf("Error computing BLOB length.");
}
pbBlobPrivateKey = (BYTE *) malloc(dwBlobLenPrivateKey);
if (pbBlobPrivateKey) {
printf("Memory has been allocated for the BLOB. \n");
}
else {
printf("Out of memory. \n");
}
if (CryptExportKey(
hSenderPrivateKey,
0,
PRIVATEKEYBLOB,
0,
pbBlobPrivateKey,
&dwBlobLenPrivateKey)) {
printf("Contents have been written to the BLOB. \n");
}
else {
printf("Error during CryptExportKey.");
}
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.02.2008(UTC) Сообщений: 1,491 Откуда: Крипто-Про
Поблагодарили: 40 раз в 37 постах
|
У вас второй параметр CryptExportKey равен 0, а там должен быть ключ, на котором осуществляется экспорт. Поэтому ничего не работает. Ключ, на котором будет осуществлен экспорт, можно например получить при помощи CryptDeriveKey из пароля. Последовательность действий такая:
DWORD cAlg = CALG_PRO_EXPORT; CryptCreateHash(hProvSender, CALG_GR3411, 0, 0, &hHash) CryptHashData(hHash, pbPassword, passwordLength, 0) CryptDeriveKey(hProvSender, CALG_G28147, hHash, CRYPT_EXPORTABLE, &hKey) CryptSetKeyParam(hKey, KP_ALGID, (BYTE*)&cAlg, 0) |
Татьяна ООО Крипто-Про |
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 06.09.2013(UTC) Сообщений: 14
|
Нашел в ваших примерах KeyCopy. Его пытаюсь запустить на iPad. Та же самая ситуация, хотя все необходимые аргументы передаються. Зависает на строке: Код:
if(CryptExportKey(
hSenderKey,
hSenderAgreeKey,
PRIVATEKEYBLOB,
0,
NULL,
&dwBlobLen ))
{
printf("Size of the BLOB for the sender key determined. \n");
}
else
{
HandleError("Error computing BLOB length.");
}
Отредактировано пользователем 10 сентября 2013 г. 4:24:21(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.02.2008(UTC) Сообщений: 1,491 Откуда: Крипто-Про
Поблагодарили: 40 раз в 37 постах
|
контейнер, из которого экспортируете ключ, с паролем? |
Татьяна ООО Крипто-Про |
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 06.09.2013(UTC) Сообщений: 14
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.02.2008(UTC) Сообщений: 1,491 Откуда: Крипто-Про
Поблагодарили: 40 раз в 37 постах
|
После открытия контейнера установите пин с помощью SetProvParam PP_SIGNATUREPIN или PP_EXCHANGEPIN в зависимости от типа ключа |
Татьяна ООО Крипто-Про |
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close