Автор: Chrome2000 Передаю nil вместо списка - Count of signers = 1 )))
Не знаю, в качестве чего вы nil передаете )
SAPRETURN WINAPI SsfSign(
const SsfCharstring strFormat,
SsfCharlen strFormatL,
const SsfCharstring strHashalg,
SsfCharlen strHashalgL,
SAP_BOOL bIncCerts,
SAP_BOOL bDetached,
const SsfOctetstring ostrInputData,
SsfOctetlen ostrInputDataL,
SigRcpSsfInformationList signerList,
SsfOctetstring * ostrSignedData,
SsfOctetlen * ostrSignedDataL)
{
.......................................
.......................................
//empty signer list?
if (signerList == NULL) {
CPSAPTRACE2(CPTraceGeneral, 2, "#error#: Empty signer's list\n", "");
SSF_API_ERROR
return SSF_API_SIGNER_ERRORS;
}
.......................................
SigRcpSsfInformationList ptrHelp = NULL; /* run for list */
.......................................
//подсчитываем число подписантов
for (count = 0, ptrHelp = signerList; (ptrHelp != NULL);
ptrHelp = ptrHelp->ptrNextSigRcp )
{
count++;
} /* endfor */
CPTRACE2(CPTraceGeneral, 4, "#trace# Count of signers=%d.\n", count, "");
передаваемый в SsfSign параметр signerList (SigRcpSsfInformationList) уже является первым элементом списка (указатель на первую структуру списка).
Пример на языке C правильного формирования списка (для 2-х подписантов):
SigRcpSsfInformationList signerList = NULL;
PtrSigRcpSsfInformation ptrSigRcpSsfInfo1;
PtrSigRcpSsfInformation ptrSigRcpSsfInfo2;
SsfNEWSigRcpSsfInfo((SsfOctetstring)"CN=User1", 8, NULL, 0,(SsfOctetstring)"uMy",3,(SsfOctetstring)"12345678",8,0,&ptrSigRcpSsfInfo1);
SsfNEWSigRcpSsfInfo((SsfOctetstring)"CN=User2", 8, NULL, 0,(SsfOctetstring)"uMy",3,(SsfOctetstring)"12345678",8,0,&ptrSigRcpSsfInfo2);
SsfINSSigRcpSsfInfo(ptrSigRcpSsfInfo1,&signerList); //в первый раз signerList = NULL, после вызова уже указывает на первый элемент списка
SsfINSSigRcpSsfInfo(ptrSigRcpSsfInfo2,&signerList); //если нужен второй подписант в списке
.....................................
res = SsfSign(
strFormat, strlen(strFormat),
strHashalg,strlen(strHashalg),
bIncCerts, bDetached,
ostrEncodedData, ostrEncodedDataL,
signerList,
&ostrSignedData,
&ostrSignedDataL);