J'essaie de valider un fichier MS Word * .docx avec signature numérique. Pour faire la validation, je dois calculer le résumé des noeuds référencés et vérifier s'il est identique à celui donné dans la signature (sig1.xml). Je ne peux pas trouver d'informations sur la façon dont ti implémente la transformation de relation afin de calculer ce résumé.Algorithme de transformation de relation XML
la partie XML de signature (sig1.xml) est la suivante:
<Object Id="idPackageObject" xmlns:mdssi="http://schemas.openxmlformats.org/package/2006/digital-signature">
<Manifest><Reference URI="/_rels/.rels?ContentType=application/vnd.openxmlformats-package.relationships+xml">
<Transforms><Transform Algorithm="http://schemas.openxmlformats.org/package/2006/RelationshipTransform">
<mdssi:RelationshipReference SourceId="rId1"/></Transform>
<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/></Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>1vWU/YTF/7t6ZjnE44gAFTbZvvA=</DigestValue>....(next ref node ....)..
<Reference URI="/word/document.xml?ContentType=application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml">
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>s2yQEJrQSfC0YoRe1hvm+IGBpJQ=</DigestValue></Reference>.....More Reference Nodes.....
/_rels/.rels lui-même fichier:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/>
<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml"/>
<Relationship Id="rId4" Type="http://schemas.openxmlformats.org/package/2006/relationships/digital-signature/origin" Target="_xmlsignatures/origin.sigs"/>
</Relationships>
donc je dois calculer SHA1/_rels/.rels, mais avant le calcul je dois appliquer la transformation de relation et C14N.
Quand je suis calcul condensé de noeud sans relation de transformation (de ce nœud, par exemple :)
<Reference URI="/word/document.xml?ContentType=application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml">
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>s2yQEJrQSfC0YoRe1hvm+IGBpJQ=</DigestValue>
</Reference>
tout va bien, faire juste SHA1 URI (/word/document.xml mentionné dans ce cas) me donne le même hachage que celui donné dans le nœud de signature. Mais quand il s'agit de nœud avec transformation de relation - les calculs ne donne jamais la même valeur que celle indiquée dans la signature.
Ma question en général est où trouver des informations sur cette transformation de la relation et comment l'implémenter?
Merci,
Georgi