summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThorsten Behrens <Thorsten.Behrens@CIB.de>2017-05-23 23:08:02 +0200
committerThorsten Behrens <Thorsten.Behrens@CIB.de>2017-06-21 19:09:49 +0200
commit61942d38fc4331ea3d31eab98361ff995178830c (patch)
treeb37b4a07c1bb26dcb41aa0a8852ba22215917495
parentgpg4libre: share static xmlsec lib between nss and gpg (diff)
downloadcore-61942d38fc4331ea3d31eab98361ff995178830c.tar.gz
core-61942d38fc4331ea3d31eab98361ff995178830c.zip
gpg4libre: fix gpg signature generation
Change-Id: I6eb95c948b6c8c9b8dee21215b430921bf454bb9
-rw-r--r--xmlsecurity/source/gpg/xmlsignature_gpgimpl.cxx18
1 files changed, 15 insertions, 3 deletions
diff --git a/xmlsecurity/source/gpg/xmlsignature_gpgimpl.cxx b/xmlsecurity/source/gpg/xmlsignature_gpgimpl.cxx
index 6c91d81f9ec4..673e50b9fa7d 100644
--- a/xmlsecurity/source/gpg/xmlsignature_gpgimpl.cxx
+++ b/xmlsecurity/source/gpg/xmlsignature_gpgimpl.cxx
@@ -113,6 +113,10 @@ SAL_CALL XMLSignature_GpgImpl::generate(
return aTemplate;
}
+ // set intended operation to sign - several asserts inside libxmlsec
+ // wanting that for digest / transforms
+ pDsigCtx->operation = xmlSecTransformOperationSign;
+
// Calculate digest for all references
xmlNodePtr cur = xmlSecGetNextElementNode(pNode->children);
if( cur != nullptr )
@@ -154,9 +158,12 @@ SAL_CALL XMLSignature_GpgImpl::generate(
// get me a digestible buffer from the signature template!
// -------------------------------------------------------
- // run the transformations
+ // run the transformations over SignedInfo element (first child of
+ // pNode)
xmlSecNodeSetPtr nodeset = nullptr;
- nodeset = xmlSecNodeSetGetChildren(pNode->doc, pNode, 1, 0);
+ cur = xmlSecGetNextElementNode(pNode->children);
+ // TODO assert that...
+ nodeset = xmlSecNodeSetGetChildren(pNode->doc, cur, 1, 0);
if(nodeset == nullptr)
throw RuntimeException("The GpgME library failed to initialize for the OpenPGP protocol.");
@@ -183,8 +190,10 @@ SAL_CALL XMLSignature_GpgImpl::generate(
xmlSecBufferGetSize(pDsigCtx->transformCtx.result), false);
GpgME::Data data_out;
+ SAL_INFO("xmlsecurity.xmlsec.gpg", "Generating signature for: " << xmlSecBufferGetData(pDsigCtx->transformCtx.result));
+
GpgME::SigningResult sign_res=ctx->sign(data_in, data_out,
- GpgME::Clearsigned);
+ GpgME::Detached);
// TODO: needs some error handling
data_out.seek(0,SEEK_SET);
int len=0, curr=0; char buf;
@@ -202,8 +211,11 @@ SAL_CALL XMLSignature_GpgImpl::generate(
cur = xmlSecGetNextElementNode(pNode->children);
cur = xmlSecGetNextElementNode(cur->next);
+ // TODO some assert would be good...
xmlNodeSetContentLen(cur, &buf2[0], len);
+ aTemplate->setStatus(css::xml::crypto::SecurityOperationStatus_OPERATION_SUCCEEDED);
+
// done
xmlSecDSigCtxDestroy( pDsigCtx ) ;