[xmlsec] Fail to verify symmetric sign

Aleksey Sanin aleksey at aleksey.com
Mon Mar 22 08:47:52 PDT 2010


I suggest to take a look at a good book on cryptography
(e.g. Schneier's "Applied Cryptography"):

https://www.aleksey.com/xmlsec/related.html

Aleksey

On 3/22/2010 7:09 AM, igor wrote:
>
> Aleksey,
>
> By your answer, seem obvious solve the problem. I'm feeling helpless and I
> ask your help in identifying this problem.
>
> The error that appears is: failed to load des key from binary file
> "aeskey.bin"
>
> But the key is not des, it is aes.
>
> Thank you in advance!
>
> BR,
> Igor
>
> On Thu, 18 Mar 2010 19:44:58 -0700, Aleksey Sanin<aleksey at aleksey.com>
> wrote:
>> 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