2015-11-21 5 views
0

У меня есть следующий XML-файл:Расчет SHA1 Digest или XAdES SignedProperties не работает

<xad:SignedProperties Id="Sig_20151117_172752_SP"> 
       <xad:SignedSignatureProperties> 
        <xad:SigningTime>2015-11-17T16:27:59Z</xad:SigningTime> 
        <xad:SigningCertificate> 
         <xad:Cert> 
          <xad:CertDigest> 
           <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> 
           <ds:DigestValue>vkVMqVMRsiSbo3Zgvk9sTfVtRDs=</ds:DigestValue> 
          </xad:CertDigest> 
          <xad:IssuerSerial> 
           <ds:X509IssuerName>CN=CERTEUROPE ADVANCED CA V4, OU=0002 434202180, O=Certeurope, C=FR</ds:X509IssuerName> 
           <ds:X509SerialNumber>747583</ds:X509SerialNumber> 
          </xad:IssuerSerial> 
         </xad:Cert> 
        </xad:SigningCertificate> 
        <xad:SignaturePolicyIdentifier> 
         <xad:SignaturePolicyId> 
          <xad:SigPolicyId> 
           <xad:Identifier>1234567</xad:Identifier> 
           <xad:Description>Description de la politique de signature numérique</xad:Description> 
          </xad:SigPolicyId> 
          <xad:SigPolicyHash> 
           <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> 
           <ds:DigestValue>ZXphcmxramhxZGY=</ds:DigestValue> 
          </xad:SigPolicyHash> 
          <xad:SigPolicyQualifiers> 
           <xad:SigPolicyQualifier> 
            <xad:SPURI>1234567</xad:SPURI> 
           </xad:SigPolicyQualifier> 
          </xad:SigPolicyQualifiers> 
         </xad:SignaturePolicyId> 
        </xad:SignaturePolicyIdentifier> 
        <xad:SignerRole> 
         <xad:ClaimedRoles/> 
        </xad:SignerRole> 
       </xad:SignedSignatureProperties> 
       <xad:SignedDataObjectProperties> 
        <xad:CommitmentTypeIndication> 
         <xad:CommitmentTypeId> 
          <xad:Identifier>1.2.840.113549.1.9.16.6.1</xad:Identifier> 
          <xad:Description>1.2.840.113549.1.9.16.6.1</xad:Description> 
         </xad:CommitmentTypeId> 
         <xad:ObjectReference>#D0-Reference</xad:ObjectReference> 
        </xad:CommitmentTypeIndication> 
       </xad:SignedDataObjectProperties> 
      </xad:SignedProperties> 

(я отступом это нарочно, при запуске, его линейный XML).

мне нужно получить следующий дайджест:

<ds:Reference Id="Sig_20151117_172752_SP-Reference" Type="http://uri.etsi.org/01903/#SignedProperties" URI="#Sig_20151117_172752_SP"> 
      <ds:Transforms> 
       <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> 
      </ds:Transforms> 
      <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> 
      <ds:DigestValue>euEROs8DacsBe3xqXBY5T+M07AI=</ds:DigestValue> 
     </ds:Reference> 

Я использую Канонизация c14n, чтобы сделать это.

Я пытался добавить эти пространства имен в первый тег:

Xmlns: XAD = "http://uri.etsi.org/01903/v1.3.2#" Xmlns: DS = "HTTP://www.w3.org/2000/09/xmldsig#»

В следующем порядке:

Или

Но ни одна из этих попыток не сработает. Что-то не хватает? (Вот метод C# Я использую для вычисления SHA-1 Digest:

public string CalculateHashSHA1(string input) 
     { 
      using (SHA1Managed sha1 = new SHA1Managed()) 
      { 
       return Convert.ToBase64String(sha1.ComputeHash(System.Text.Encoding.UTF8.GetBytes(input))); 
      } 
     } 

EDIT:

Я пытаюсь получить этот дайджест: euEROs8DacsBe3xqXBY5T + M07AI =

+0

Вы уверены, что ваши данные совпадают с данными в этом объединенном xml? (т. е. xml - это всего лишь дескриптор подписи, а не исходные данные) – zaitsman

+0

Я добавил исходный файл в конце своего сообщения, я все еще не нахожу того же самого дайджеста. – Thordax

+1

Хорошо, что вы имеете в виду здесь XADES, есть несколько доступных библиотек .net, которые позволят вам это сделать. – zaitsman

ответ

1

На самом деле, мне нужно использовать этот метод:

XmlDsigExcC14NTransform innerTransform = new XmlDsigExcC14NTransform(false); 

И результат является правильным.