Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

3 Страницы123>
Опции
К последнему сообщению К первому непрочитанному
Offline Василий Анисимов  
#1 Оставлено : 1 июня 2012 г. 16:47:20(UTC)
Василий Анисимов

Статус: Активный участник

Группы: Участники
Зарегистрирован: 27.04.2012(UTC)
Сообщений: 119
Мужчина
Российская Федерация
Откуда: Digital Design

Сказал «Спасибо»: 19 раз
Поблагодарили: 1 раз в 1 постах
Помогите, пожалуйста.
Пытаюсь добавить в подписанное сообщение отвязанной УЭЦП ещё одну УЭЦП. Делаю всё по примеру (http://cpdn.cryptopro.ru/content/cades/samplelowlevelapiaddsign.html), но функция постоянно завершается с ошибкой, не понимаю в чём может быть проблема.
Код:

- (DWORD) cosignMessage:(CRYPT_DATA_BLOB*) pSignedMessageBlob to:(CRYPT_DATA_BLOB*)pCosignedMessageBlob toFile:(const char*)outFilename{
    printf("\nRunning function: cosignMessage\n");
    DWORD cbCosignedMessageBlob=0;
    BYTE  *pbCosignedMessageBlob = NULL;
    HCRYPTMSG hMsg = CryptMsgOpenToDecode(
                                        TYPE_DER,      // Encoding type.
                                        CMSG_DETACHED_FLAG,                     // Flags.
                                        0,                     // Use the default message type.
                                        hCryptProv,            // Cryptographic provider.
                                        0,                  // Recipient information.
                                        0);                 // Stream information.
    
    if (hMsg) 
		printf("The message to decode is open. \n");
    else{
    	return [self handleError:"OpenToDecode failed"];
	}

    if(!CryptMsgUpdate(
                       hMsg,		// Handle to the message
                       pSignedMessageBlob->pbData,//signature_mem,		// Pointer to the content
                       pSignedMessageBlob->cbData,//signature_len,	// Size of the content
                       TRUE)){
        return [self handleError:"CryptMsgUpdate() 1 failed"];
    }
    
    if (!CryptMsgUpdate(
                        hMsg,                 // Handle to the message
                        pCosignedMessageBlob->pbData,        // Pointer to the encoded blob
                        pCosignedMessageBlob->cbData,        // Size of the encoded blob
                        TRUE)){               // Last call) 
		return [self handleError:"CryptMsgUpdate() 2 failed"];
    }
    
    printf("The encoded blob has been added to the message. \n");
    CMSG_SIGNER_ENCODE_INFO SignerEncodeInfo = {sizeof(CMSG_SIGNER_ENCODE_INFO)};
//    memset(&SignerEncodeInfo, 0, sizeof(CMSG_SIGNER_ENCODE_INFO));
    
    SignerEncodeInfo.cbSize = sizeof(CMSG_SIGNER_ENCODE_INFO);
    SignerEncodeInfo.pCertInfo = pUserCert->pCertInfo;
    SignerEncodeInfo.hCryptProv = hCryptProv;
    SignerEncodeInfo.dwKeySpec = keytype;
    SignerEncodeInfo.HashAlgorithm = HashAlgorithm;
    SignerEncodeInfo.pvHashAuxInfo = NULL;
    
    CADES_SERVICE_CONNECTION_PARA tsp;
    memset(&tsp, 0, sizeof(CADES_SERVICE_CONNECTION_PARA));
    tsp.dwSize = sizeof(CADES_SERVICE_CONNECTION_PARA);
    tsp.wszUri = tspUrl.c_str();
    
    CADES_SIGN_PARA enParams = {sizeof(enParams)};
//    memset(&enParams, 0, sizeof(CADES_SIGN_PARA));
//    enParams.dwSize = sizeof(CADES_SIGN_PARA);
//    enParams.pTspConnectionPara = &tsp;
    enParams.dwCadesType = CADES_X_LONG_TYPE_1;
    
    CADES_COSIGN_PARA cosignPara = {sizeof(cosignPara)};
//    memset(&cosignPara, 0, sizeof(CADES_COSIGN_PARA));
    cosignPara.pSigner = &SignerEncodeInfo;
    cosignPara.pCadesSignPara = &enParams;
    
    if (!CadesMsgAddEnhancedSignature(hMsg, &cosignPara)) {
        return [self handleError:"CadesMsgAddEnhancedSignature() failed"];
    }
    if (!CryptMsgGetParam(
						   hMsg,                  // Handle to the message
						   CMSG_ENCODED_MESSAGE,    // Parameter type
						   0,                     // Index
						   0,                  // Address for returned info
                          &cbCosignedMessageBlob)){           // Size of the returned info
        return [self handleError:"Decode CMSG_ENCODED_MESSAGE failed"];
    }
    printf("The message parameter (CMSG_ENCODED_MESSAGE) has been acquired. Message size: %d\n", cbCosignedMessageBlob);
    
    pbCosignedMessageBlob = (BYTE *) malloc(cbCosignedMessageBlob);
    if (!pbCosignedMessageBlob){
		return [self handleError:"Decode memory allocation failed"];
	}
    //--------------------------------------------------------------------
    // Get a pointer to the content.
    
    if (!CryptMsgGetParam(
						   hMsg,                 // Handle to the message
						   CMSG_ENCODED_MESSAGE,   // Parameter type
						   0,                    // Index
						   pbCosignedMessageBlob,            // Address for returned 
                          &cbCosignedMessageBlob)){          // Size of the returned        
        return [self handleError:"Decode CMSG_ENCODED_MESSAGE #2 failed"];
    }
    printf("The message param (CMSG_ENCODED_MESSAGE) updated. Length is %lu.\n",(unsigned long)cbCosignedMessageBlob);
    
    cout << "Signature was added successfully." << endl;
    cout << "УЭЦП:" << endl;
    for(DWORD i=0; i < cbCosignedMessageBlob; i++)
    {
        printf("%2.2x", pbCosignedMessageBlob[i]);
        if ((i+1)%32 == 0) printf("\n");
    }
    if (outFilename) {
		FILE *out = NULL;
		out = fopen (outFilename, "wb");
		if (out) {
			fwrite (pbCosignedMessageBlob, cbCosignedMessageBlob, 1, out);
			fclose (out);
			printf ("Output file (%s) has been saved\n", outFilename);
		}
		else
			fprintf(stderr, "Cannot open out file\n");
	}
    return 0;
}

Отредактировано пользователем 1 июня 2012 г. 17:09:50(UTC)  | Причина: Не указана

ВАСИЛИЙ АНИСИМОВ
Ведущий iOS разработчик в «Digital Design»
www.digdes.ru
Offline Василий Анисимов  
#2 Оставлено : 1 июня 2012 г. 17:10:36(UTC)
Василий Анисимов

Статус: Активный участник

Группы: Участники
Зарегистрирован: 27.04.2012(UTC)
Сообщений: 119
Мужчина
Российская Федерация
Откуда: Digital Design

Сказал «Спасибо»: 19 раз
Поблагодарили: 1 раз в 1 постах
UPD: если CadesMsgAddEnhancedSignature() заменить на CadesMsgCountersign() и раскомменитить добавление TCP сервера в параметры сообщения, то всё отлично работает.
ВАСИЛИЙ АНИСИМОВ
Ведущий iOS разработчик в «Digital Design»
www.digdes.ru
Offline Новожилова Елена  
#3 Оставлено : 1 июня 2012 г. 17:26:10(UTC)
Новожилова Елена

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 10.12.2008(UTC)
Сообщений: 924
Женщина
Откуда: Крипто-Про

Поблагодарили: 99 раз в 95 постах
Здравствуйте!

Цитата:
... раскомменитить добавление TCP сервера в параметры сообщения ...


Для создания УЭЦП необходимо задавать адрес службы штампов времени.

С какой ошибкой завершается создание подписи при помощи функции CadesMsgAddEnhancedSignature?
Offline Василий Анисимов  
#4 Оставлено : 1 июня 2012 г. 17:32:53(UTC)
Василий Анисимов

Статус: Активный участник

Группы: Участники
Зарегистрирован: 27.04.2012(UTC)
Сообщений: 119
Мужчина
Российская Федерация
Откуда: Digital Design

Сказал «Спасибо»: 19 раз
Поблагодарили: 1 раз в 1 постах
Номер ошибки - 80070057
Я в курсе, у меня и было задано, но функция все равно не срабатывала. В примере адрес не задаётся и я подумал, что из-за этого, решил сделать 1 в 1 с примером, но без адреса всё та же ошибка.
ВАСИЛИЙ АНИСИМОВ
Ведущий iOS разработчик в «Digital Design»
www.digdes.ru
Offline Василий Анисимов  
#5 Оставлено : 3 июня 2012 г. 1:57:39(UTC)
Василий Анисимов

Статус: Активный участник

Группы: Участники
Зарегистрирован: 27.04.2012(UTC)
Сообщений: 119
Мужчина
Российская Федерация
Откуда: Digital Design

Сказал «Спасибо»: 19 раз
Поблагодарили: 1 раз в 1 постах
Вопрос всё ещё актуален — функция не работает. Помогите, пожалуйста.
ВАСИЛИЙ АНИСИМОВ
Ведущий iOS разработчик в «Digital Design»
www.digdes.ru
Offline Василий Анисимов  
#6 Оставлено : 4 июня 2012 г. 15:37:49(UTC)
Василий Анисимов

Статус: Активный участник

Группы: Участники
Зарегистрирован: 27.04.2012(UTC)
Сообщений: 119
Мужчина
Российская Федерация
Откуда: Digital Design

Сказал «Спасибо»: 19 раз
Поблагодарили: 1 раз в 1 постах
Снимаю вопрос - всё заработало после того, как я заново скачал и переустановил фреймворк.
ВАСИЛИЙ АНИСИМОВ
Ведущий iOS разработчик в «Digital Design»
www.digdes.ru
Offline Василий Анисимов  
#7 Оставлено : 4 июня 2012 г. 15:38:49(UTC)
Василий Анисимов

Статус: Активный участник

Группы: Участники
Зарегистрирован: 27.04.2012(UTC)
Сообщений: 119
Мужчина
Российская Федерация
Откуда: Digital Design

Сказал «Спасибо»: 19 раз
Поблагодарили: 1 раз в 1 постах
Снимаю вопрос - всё заработало после того, как я заново скачал и переустановил фреймворк.
ВАСИЛИЙ АНИСИМОВ
Ведущий iOS разработчик в «Digital Design»
www.digdes.ru
Offline Василий Анисимов  
#8 Оставлено : 4 июня 2012 г. 19:12:06(UTC)
Василий Анисимов

Статус: Активный участник

Группы: Участники
Зарегистрирован: 27.04.2012(UTC)
Сообщений: 119
Мужчина
Российская Федерация
Откуда: Digital Design

Сказал «Спасибо»: 19 раз
Поблагодарили: 1 раз в 1 постах
БЛИН! Нет, не снимаю, это она работала когда одним и тем же пользователем 2 раза подписывалась, а если разные - снова ошибка 80070057 :(
ВАСИЛИЙ АНИСИМОВ
Ведущий iOS разработчик в «Digital Design»
www.digdes.ru
Offline Новожилова Елена  
#9 Оставлено : 4 июня 2012 г. 19:54:05(UTC)
Новожилова Елена

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 10.12.2008(UTC)
Сообщений: 924
Женщина
Откуда: Крипто-Про

Поблагодарили: 99 раз в 95 постах
Разные пользователи с одинаковыми алгоритмами хэширования?
Offline Василий Анисимов  
#10 Оставлено : 4 июня 2012 г. 19:57:07(UTC)
Василий Анисимов

Статус: Активный участник

Группы: Участники
Зарегистрирован: 27.04.2012(UTC)
Сообщений: 119
Мужчина
Российская Федерация
Откуда: Digital Design

Сказал «Спасибо»: 19 раз
Поблагодарили: 1 раз в 1 постах
Да, всё 1 в 1, просто запускаю 2 копии приложения с двумя разными сертификатами пользователей.
ВАСИЛИЙ АНИСИМОВ
Ведущий iOS разработчик в «Digital Design»
www.digdes.ru
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
3 Страницы123>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.