我自己为iOS构建了xmlsec1,当我测试它时,我的构建似乎不太成功:)
我有通过Macport获得的在Mac OS和Xmlsec上运行良好的代码.
但由于CocoaPods没有iOS版本,我决定自己构建它--使用OpenSSL进行加密.现在我正在使用有效的证书对其进行测试,该证书与MacOS版本兼容
xmlSecTransformCtx transformCtx;
xmlSecTransformPtr signMethod;
xmlSecByte *dataPtr = (xmlSecByte *)inStr;
xmlSecDSigCtxPtr dsigCtx = NULL;
...
memset (&transformCtx, 0, sizeof(xmlSecTransformCtx)); // was FillChar (transformCtx, SizeOf(transformCtx), #0);
xmlSecTransformCtxInitialize (&transformCtx);
dsigCtx = xmlSecDSigCtxCreate (NULL);
if (!dsigCtx) {
// I'm checking all the errors and there are none in the code below until the last line
...
}
dsigCtx->signKey = xmlSecCryptoAppKeyLoad (cert_file, xmlSecKeyDataFormatPkcs12, password, NULL, NULL); // No errors
signMethod = xmlSecTransformCtxCreateAndAppend (&transformCtx, xmlSecTransformRsaSha1Id); // signMethod ok
signMethod->operation = xmlSecTransformOperationSign;
errCode = xmlSecTransformSetKey (signMethod, dsigCtx->signKey); // no errCode
errCode = xmlSecTransformCtxPrepare (&transformCtx, xmlSecTransformDataTypeBin);
if (errCode < 0) {
// AGAIN no error code
}
if (( transformCtx.first ) == NULL) fprintf (stderr, "NULL!");
// It is NULL, xmlSecTransformDefaultPushBin() fails
errCode = xmlSecTransformDefaultPushBin (transformCtx.first, dataPtr, (xmlSecSize)dataSize, 1, &transformCtx);
因为转换Ctx.first为空,所以xmlSecTransformDefaultPushBin()失败.
是否知道我的构建中可能出了什么问题,以及我应该如何开始解决这个问题.
EDIT -似乎是 struct 对齐的问题.
尽管xmlSecTransformCtx在我的应用程序中和库中都是128字节,但字段是错误的.在我自己的代码中,TransCtx.first为空,但在xmlSecTransformCtxPrepare()中不为空.真奇怪.