https://issues.apache.org/bugzilla/show_bug.cgi?id=44335


Dominique LAURENT <[EMAIL PROTECTED]> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |[EMAIL PROTECTED]




--- Comment #4 from Dominique LAURENT <[EMAIL PROTECTED]>  2008-12-01 19:38:55 
PST ---
Hey,

I just got this bug.

I think there may be a quicker fix:

just move the two lines:

         //retrieve the byte[] from the stored signature
         byte sigBytes[] = this.getSignatureValue();

before the try/catch block:

      try {
         SignedInfo si=this.getSignedInfo();


This way, if the Base64 decoding fails, the SignatureAlgorithm hasn't yet been
updated and does not need to be reset.

This avoids having to call #verify() just to reset the SignatureAlgorithm.



The checkSignatureValue method would look like this:

    public boolean checkSignatureValue(Key pk) throws XMLSignatureException {

        if (pk == null) {
            Object exArgs[] = { "Didn't get a key" };

            throw new XMLSignatureException("empty", exArgs);
        }

        //retrieve the byte[] from the stored signature
        // Do this before calling the SignatureAlgorithm
        // that way if something goes bad, the sa isn't corrupted
        byte sigBytes[] = this.getSignatureValue();

        try {
            SignedInfo si=this.getSignedInfo();
            //create a SignatureAlgorithms from the SignatureMethod inside
            //SignedInfo. This is used to validate the signature.
            SignatureAlgorithm sa =si.getSignatureAlgorithm();
            if (log.isDebugEnabled()) {
                log.debug("SignatureMethodURI = " + sa.getAlgorithmURI());
                log.debug("jceSigAlgorithm    = " +
sa.getJCEAlgorithmString());
                log.debug("jceSigProvider     = " + sa.getJCEProviderName());
                log.debug("PublicKey = " + pk);
            }
            sa.initVerify(pk);

            // Get the canonicalized (normalized) SignedInfo
            SignerOutputStream so=new SignerOutputStream(sa);
            OutputStream bos=new UnsyncBufferedOutputStream(so);
            si.signInOctectStream(bos);
            try {
                bos.close();
            } catch (IOException e) {
                //Imposible
            }

            if (!sa.verify(sigBytes)) {
                log.warn("Signature verification failed.");
                return false;
            }

            return si.verify(this._followManifestsDuringValidation);
        } catch (XMLSecurityException ex) {
            throw new XMLSignatureException("empty", ex);
        }
    }


-- 
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.

Reply via email to