[xmlsec] Fail to verify symmetric sign

Aleksey Sanin aleksey at aleksey.com
Thu Mar 18 19:44:58 PDT 2010


Please read the error carefully.

Aleksey

On 3/18/2010 6:15 PM, igor at das.ufsc.br wrote:
> Hello guys,
>
> I'm using xmlsec1 for encryption and signing, but I'm having trouble
> verifying the signature. I am signing only the Header of the SOAP message
> using HMAC with the same AES key to encrypt the message.
>
> Using the console, I can verify the signature with the following command:
> xmlsec1 verify --hmackey aeskey.bin Server-Recv-XMLCifrado.data
>
> My function in C that would verify the signature shows the following error:
>
> func=xmlSecKeyDataHmacGetKlass:file=app.c:line=211:obj=unknown:subj=keyDataHmacId:error=9:feature
> is not implemented:
> func=xmlSecKeyReadBinaryFile:file=keys.c:line=1219:obj=unknown:subj=dataId
> != xmlSecKeyDataIdUnknown:error=100:assertion:
> Error: failed to load des key from binary file "aeskey.bin"
> func=xmlSecTransformCtxBinaryExecute:file=transforms.c:line=1091:obj=unknown:subj=dataSize
>> 0:error=100:assertion:
> func=xmlSecEncCtxBinaryEncrypt:file=xmlenc.c:line=333:obj=unknown:subj=xmlSecTransformCtxBinaryExecute:error=1:xmlsec
> library function failed:dataSize=0
> Error: encryption failed
>
>
> I am using a function of the examples with a slight modification:
>
> int
> verify_file(const char* xml_file, const char* key_file) {
>      xmlDocPtr doc = NULL;
>      xmlNodePtr node = NULL;
>      xmlSecDSigCtxPtr dsigCtx = NULL;
>      int res = -1;
>
>      assert(xml_file);
>      assert(key_file);
>
>      /* load file */
>      doc = xmlParseFile(xml_file);
>      if ((doc == NULL) || (xmlDocGetRootElement(doc) == NULL)){
> 	fprintf(stderr, "Error: unable to parse file \"%s\"\n", xml_file);
> 	goto done;
>      }
>
>      /* find start node */
>      node = xmlSecFindNode(xmlDocGetRootElement(doc), xmlSecNodeSignature,
> xmlSecDSigNs);
>      if(node == NULL) {
> 	fprintf(stderr, "Error: start node not found in \"%s\"\n", xml_file);
> 	goto done;
>      }
>
>      /* create signature context, we don't need keys manager in this
> example */
>      dsigCtx = xmlSecDSigCtxCreate(NULL);
>      if(dsigCtx == NULL) {
>          fprintf(stderr,"Error: failed to create signature context\n");
> 	goto done;
>      }
>
>      /* load AES key, assuming that there is not password */
>      dsigCtx->signKey = xmlSecKeyReadBinaryFile(xmlSecKeyDataHmacId,
> key_file);
>      if(dsigCtx->signKey == NULL) {
>          fprintf(stderr,"Error: failed to load des key from binary file
> \"%s\"\n", key_file);
> 	goto done;
>      }
>
>      /* set key name to the file name, this is just an example! */
>      if(xmlSecKeySetName(dsigCtx->signKey, key_file)<  0) {
>      	fprintf(stderr,"Error: failed to set key name for key from \"%s\"\n",
> key_file);
> 	goto done;
>      }
>
>      /* Verify signature */
>      if(xmlSecDSigCtxVerify(dsigCtx, node)<  0) {
>          fprintf(stderr,"Error: signature verify\n");
> 	goto done;
>      }
>
>      /* print verification result to stdout */
>      if(dsigCtx->status == xmlSecDSigStatusSucceeded) {
> 	fprintf(stdout, "Signature is OK\n");
>      } else {
> 	fprintf(stdout, "Signature is INVALID\n");
>      }
>
>      /* success */
>      res = 0;
>
> done:
>      /* cleanup */
>      if(dsigCtx != NULL) {
> 	xmlSecDSigCtxDestroy(dsigCtx);
>      }
>
>      if(doc != NULL) {
> 	xmlFreeDoc(doc);
>      }
>      return(res);
> }
>
> Any help?
>
> BR,
> Igor
>
> _______________________________________________
> xmlsec mailing list
> xmlsec at aleksey.com
> http://www.aleksey.com/mailman/listinfo/xmlsec


More information about the xmlsec mailing list