jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/CanonicalizerBase.java
author xuelei
Sat, 12 Oct 2013 20:46:35 -0700
changeset 22325 f22d936a0ff5
parent 18780 f47b920867e7
child 22337 4dc66bdfd4ea
permissions -rw-r--r--
8025026: Enhance canonicalization Summary: Don't use cached null xmlns definition. Also reviewed by Alexander Fomin <alexander.fomin@oracle.com> Reviewed-by: mullan, hawtin
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     1
/*
90ce3da70b43 Initial load
duke
parents:
diff changeset
     2
 * reserved comment block
90ce3da70b43 Initial load
duke
parents:
diff changeset
     3
 * DO NOT REMOVE OR ALTER!
90ce3da70b43 Initial load
duke
parents:
diff changeset
     4
 */
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
     5
/**
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
     6
 * Licensed to the Apache Software Foundation (ASF) under one
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
     7
 * or more contributor license agreements. See the NOTICE file
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
     8
 * distributed with this work for additional information
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
     9
 * regarding copyright ownership. The ASF licenses this file
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    10
 * to you under the Apache License, Version 2.0 (the
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    11
 * "License"); you may not use this file except in compliance
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    12
 * with the License. You may obtain a copy of the License at
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    13
 *
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    14
 * http://www.apache.org/licenses/LICENSE-2.0
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    15
 *
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    16
 * Unless required by applicable law or agreed to in writing,
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    17
 * software distributed under the License is distributed on an
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    18
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    19
 * KIND, either express or implied. See the License for the
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    20
 * specific language governing permissions and limitations
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    21
 * under the License.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    22
 */
90ce3da70b43 Initial load
duke
parents:
diff changeset
    23
package com.sun.org.apache.xml.internal.security.c14n.implementations;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    24
90ce3da70b43 Initial load
duke
parents:
diff changeset
    25
import java.io.ByteArrayOutputStream;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    26
import java.io.IOException;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    27
import java.io.OutputStream;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    28
import java.io.UnsupportedEncodingException;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    29
import java.util.ArrayList;
1337
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
    30
import java.util.HashMap;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    31
import java.util.Iterator;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    32
import java.util.List;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    33
import java.util.ListIterator;
1337
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
    34
import java.util.Map;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    35
import java.util.Set;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    36
90ce3da70b43 Initial load
duke
parents:
diff changeset
    37
import javax.xml.parsers.ParserConfigurationException;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    38
90ce3da70b43 Initial load
duke
parents:
diff changeset
    39
import com.sun.org.apache.xml.internal.security.c14n.CanonicalizationException;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    40
import com.sun.org.apache.xml.internal.security.c14n.CanonicalizerSpi;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    41
import com.sun.org.apache.xml.internal.security.c14n.helper.AttrCompare;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    42
import com.sun.org.apache.xml.internal.security.signature.NodeFilter;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    43
import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    44
import com.sun.org.apache.xml.internal.security.utils.Constants;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    45
import com.sun.org.apache.xml.internal.security.utils.UnsyncByteArrayOutputStream;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    46
import com.sun.org.apache.xml.internal.security.utils.XMLUtils;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    47
import org.w3c.dom.Attr;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    48
import org.w3c.dom.Comment;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    49
import org.w3c.dom.Element;
22325
f22d936a0ff5 8025026: Enhance canonicalization
xuelei
parents: 18780
diff changeset
    50
import org.w3c.dom.Document;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    51
import org.w3c.dom.NamedNodeMap;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    52
import org.w3c.dom.Node;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    53
import org.w3c.dom.ProcessingInstruction;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    54
import org.xml.sax.SAXException;
90ce3da70b43 Initial load
duke
parents:
diff changeset
    55
90ce3da70b43 Initial load
duke
parents:
diff changeset
    56
/**
90ce3da70b43 Initial load
duke
parents:
diff changeset
    57
 * Abstract base class for canonicalization algorithms.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    58
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    59
 * @author Christian Geuer-Pollmann <geuerp@apache.org>
90ce3da70b43 Initial load
duke
parents:
diff changeset
    60
 */
90ce3da70b43 Initial load
duke
parents:
diff changeset
    61
public abstract class CanonicalizerBase extends CanonicalizerSpi {
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    62
    public static final String XML = "xml";
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    63
    public static final String XMLNS = "xmlns";
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    64
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    65
    protected static final AttrCompare COMPARE = new AttrCompare();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    66
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    67
    private static final byte[] END_PI = {'?','>'};
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    68
    private static final byte[] BEGIN_PI = {'<','?'};
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    69
    private static final byte[] END_COMM = {'-','-','>'};
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    70
    private static final byte[] BEGIN_COMM = {'<','!','-','-'};
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    71
    private static final byte[] XA = {'&','#','x','A',';'};
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    72
    private static final byte[] X9 = {'&','#','x','9',';'};
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    73
    private static final byte[] QUOT = {'&','q','u','o','t',';'};
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    74
    private static final byte[] XD = {'&','#','x','D',';'};
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    75
    private static final byte[] GT = {'&','g','t',';'};
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    76
    private static final byte[] LT = {'&','l','t',';'};
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    77
    private static final byte[] END_TAG = {'<','/'};
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    78
    private static final byte[] AMP = {'&','a','m','p',';'};
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    79
    private static final byte[] equalsStr = {'=','\"'};
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    80
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    81
    protected static final int NODE_BEFORE_DOCUMENT_ELEMENT = -1;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    82
    protected static final int NODE_NOT_BEFORE_OR_AFTER_DOCUMENT_ELEMENT = 0;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    83
    protected static final int NODE_AFTER_DOCUMENT_ELEMENT = 1;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    84
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    85
    private List<NodeFilter> nodeFilter;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    86
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    87
    private boolean includeComments;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    88
    private Set<Node> xpathNodeSet;
22325
f22d936a0ff5 8025026: Enhance canonicalization
xuelei
parents: 18780
diff changeset
    89
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    90
    /**
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    91
     * The node to be skipped/excluded from the DOM tree
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    92
     * in subtree canonicalizations.
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    93
     */
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    94
    private Node excludeNode;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    95
    private OutputStream writer = new ByteArrayOutputStream();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    96
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
    97
    /**
22325
f22d936a0ff5 8025026: Enhance canonicalization
xuelei
parents: 18780
diff changeset
    98
     * The null xmlns definition.
f22d936a0ff5 8025026: Enhance canonicalization
xuelei
parents: 18780
diff changeset
    99
     */
f22d936a0ff5 8025026: Enhance canonicalization
xuelei
parents: 18780
diff changeset
   100
    private Attr nullNode;
f22d936a0ff5 8025026: Enhance canonicalization
xuelei
parents: 18780
diff changeset
   101
f22d936a0ff5 8025026: Enhance canonicalization
xuelei
parents: 18780
diff changeset
   102
    /**
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   103
     * Constructor CanonicalizerBase
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   104
     *
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   105
     * @param includeComments
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   106
     */
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   107
    public CanonicalizerBase(boolean includeComments) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   108
        this.includeComments = includeComments;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   109
    }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   110
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   111
    /**
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   112
     * Method engineCanonicalizeSubTree
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   113
     * @inheritDoc
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   114
     * @param rootNode
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   115
     * @throws CanonicalizationException
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   116
     */
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   117
    public byte[] engineCanonicalizeSubTree(Node rootNode)
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   118
        throws CanonicalizationException {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   119
        return engineCanonicalizeSubTree(rootNode, (Node)null);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   120
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   121
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   122
    /**
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   123
     * Method engineCanonicalizeXPathNodeSet
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   124
     * @inheritDoc
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   125
     * @param xpathNodeSet
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   126
     * @throws CanonicalizationException
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   127
     */
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   128
    public byte[] engineCanonicalizeXPathNodeSet(Set<Node> xpathNodeSet)
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   129
        throws CanonicalizationException {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   130
        this.xpathNodeSet = xpathNodeSet;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   131
        return engineCanonicalizeXPathNodeSetInternal(XMLUtils.getOwnerDocument(this.xpathNodeSet));
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   132
    }
1337
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   133
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   134
    /**
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   135
     * Canonicalizes a Subtree node.
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   136
     * @param input the root of the subtree to canicalize
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   137
     * @return The canonicalize stream.
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   138
     * @throws CanonicalizationException
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   139
     */
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   140
    public byte[] engineCanonicalize(XMLSignatureInput input) throws CanonicalizationException {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   141
        try {
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   142
            if (input.isExcludeComments()) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   143
                includeComments = false;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   144
            }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   145
            if (input.isOctetStream()) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   146
                return engineCanonicalize(input.getBytes());
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   147
            }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   148
            if (input.isElement()) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   149
                return engineCanonicalizeSubTree(input.getSubNode(), input.getExcludeNode());
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   150
            } else if (input.isNodeSet()) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   151
                nodeFilter = input.getNodeFilters();
1337
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   152
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   153
                circumventBugIfNeeded(input);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   154
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   155
                if (input.getSubNode() != null) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   156
                    return engineCanonicalizeXPathNodeSetInternal(input.getSubNode());
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   157
                } else {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   158
                    return engineCanonicalizeXPathNodeSet(input.getNodeSet());
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   159
                }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   160
            }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   161
            return null;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   162
        } catch (CanonicalizationException ex) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   163
            throw new CanonicalizationException("empty", ex);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   164
        } catch (ParserConfigurationException ex) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   165
            throw new CanonicalizationException("empty", ex);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   166
        } catch (IOException ex) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   167
            throw new CanonicalizationException("empty", ex);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   168
        } catch (SAXException ex) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   169
            throw new CanonicalizationException("empty", ex);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   170
        }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   171
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   172
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   173
    /**
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   174
     * @param writer The writer to set.
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   175
     */
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   176
    public void setWriter(OutputStream writer) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   177
        this.writer = writer;
1337
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   178
    }
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   179
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   180
    /**
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   181
     * Canonicalizes a Subtree node.
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   182
     *
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   183
     * @param rootNode
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   184
     *            the root of the subtree to canonicalize
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   185
     * @param excludeNode
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   186
     *            a node to be excluded from the canonicalize operation
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   187
     * @return The canonicalize stream.
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   188
     * @throws CanonicalizationException
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   189
     */
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   190
    protected byte[] engineCanonicalizeSubTree(Node rootNode, Node excludeNode)
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   191
        throws CanonicalizationException {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   192
        this.excludeNode = excludeNode;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   193
        try {
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   194
            NameSpaceSymbTable ns = new NameSpaceSymbTable();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   195
            int nodeLevel = NODE_BEFORE_DOCUMENT_ELEMENT;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   196
            if (rootNode != null && Node.ELEMENT_NODE == rootNode.getNodeType()) {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   197
                //Fills the nssymbtable with the definitions of the parent of the root subnode
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   198
                getParentNameSpaces((Element)rootNode, ns);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   199
                nodeLevel = NODE_NOT_BEFORE_OR_AFTER_DOCUMENT_ELEMENT;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   200
            }
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   201
            this.canonicalizeSubTree(rootNode, ns, rootNode, nodeLevel);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   202
            this.writer.flush();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   203
            if (this.writer instanceof ByteArrayOutputStream) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   204
                byte[] result = ((ByteArrayOutputStream)this.writer).toByteArray();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   205
                if (reset) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   206
                    ((ByteArrayOutputStream)this.writer).reset();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   207
                } else {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   208
                    this.writer.close();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   209
                }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   210
                return result;
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   211
            } else if (this.writer instanceof UnsyncByteArrayOutputStream) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   212
                byte[] result = ((UnsyncByteArrayOutputStream)this.writer).toByteArray();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   213
                if (reset) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   214
                    ((UnsyncByteArrayOutputStream)this.writer).reset();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   215
                } else {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   216
                    this.writer.close();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   217
                }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   218
                return result;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   219
            } else {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   220
                this.writer.close();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   221
            }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   222
            return null;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   223
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   224
        } catch (UnsupportedEncodingException ex) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   225
            throw new CanonicalizationException("empty", ex);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   226
        } catch (IOException ex) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   227
            throw new CanonicalizationException("empty", ex);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   228
        }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   229
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   230
90ce3da70b43 Initial load
duke
parents:
diff changeset
   231
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   232
    /**
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   233
     * Method canonicalizeSubTree, this function is a recursive one.
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   234
     *
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   235
     * @param currentNode
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   236
     * @param ns
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   237
     * @param endnode
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   238
     * @throws CanonicalizationException
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   239
     * @throws IOException
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   240
     */
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   241
    protected final void canonicalizeSubTree(
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   242
        Node currentNode, NameSpaceSymbTable ns, Node endnode, int documentLevel
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   243
    ) throws CanonicalizationException, IOException {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   244
        if (isVisibleInt(currentNode) == -1) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   245
            return;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   246
        }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   247
        Node sibling = null;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   248
        Node parentNode = null;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   249
        final OutputStream writer = this.writer;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   250
        final Node excludeNode = this.excludeNode;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   251
        final boolean includeComments = this.includeComments;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   252
        Map<String, byte[]> cache = new HashMap<String, byte[]>();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   253
        do {
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   254
            switch (currentNode.getNodeType()) {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   255
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   256
            case Node.ENTITY_NODE :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   257
            case Node.NOTATION_NODE :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   258
            case Node.ATTRIBUTE_NODE :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   259
                // illegal node type during traversal
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   260
                throw new CanonicalizationException("empty");
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   261
90ce3da70b43 Initial load
duke
parents:
diff changeset
   262
            case Node.DOCUMENT_FRAGMENT_NODE :
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   263
            case Node.DOCUMENT_NODE :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   264
                ns.outputNodePush();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   265
                sibling = currentNode.getFirstChild();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   266
                break;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   267
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   268
            case Node.COMMENT_NODE :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   269
                if (includeComments) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   270
                    outputCommentToWriter((Comment) currentNode, writer, documentLevel);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   271
                }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   272
                break;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   273
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   274
            case Node.PROCESSING_INSTRUCTION_NODE :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   275
                outputPItoWriter((ProcessingInstruction) currentNode, writer, documentLevel);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   276
                break;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   277
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   278
            case Node.TEXT_NODE :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   279
            case Node.CDATA_SECTION_NODE :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   280
                outputTextToWriter(currentNode.getNodeValue(), writer);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   281
                break;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   282
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   283
            case Node.ELEMENT_NODE :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   284
                documentLevel = NODE_NOT_BEFORE_OR_AFTER_DOCUMENT_ELEMENT;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   285
                if (currentNode == excludeNode) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   286
                    break;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   287
                }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   288
                Element currentElement = (Element)currentNode;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   289
                //Add a level to the nssymbtable. So latter can be pop-back.
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   290
                ns.outputNodePush();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   291
                writer.write('<');
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   292
                String name = currentElement.getTagName();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   293
                UtfHelpper.writeByte(name, writer, cache);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   294
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   295
                Iterator<Attr> attrs = this.handleAttributesSubtree(currentElement, ns);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   296
                if (attrs != null) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   297
                    //we output all Attrs which are available
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   298
                    while (attrs.hasNext()) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   299
                        Attr attr = attrs.next();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   300
                        outputAttrToWriter(attr.getNodeName(), attr.getNodeValue(), writer, cache);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   301
                    }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   302
                }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   303
                writer.write('>');
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   304
                sibling = currentNode.getFirstChild();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   305
                if (sibling == null) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   306
                    writer.write(END_TAG);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   307
                    UtfHelpper.writeStringToUtf8(name, writer);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   308
                    writer.write('>');
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   309
                    //We finished with this level, pop to the previous definitions.
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   310
                    ns.outputNodePop();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   311
                    if (parentNode != null) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   312
                        sibling = currentNode.getNextSibling();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   313
                    }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   314
                } else {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   315
                    parentNode = currentElement;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   316
                }
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   317
                break;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   318
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   319
            case Node.DOCUMENT_TYPE_NODE :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   320
            default :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   321
                break;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   322
            }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   323
            while (sibling == null && parentNode != null) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   324
                writer.write(END_TAG);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   325
                UtfHelpper.writeByte(((Element)parentNode).getTagName(), writer, cache);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   326
                writer.write('>');
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   327
                //We finished with this level, pop to the previous definitions.
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   328
                ns.outputNodePop();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   329
                if (parentNode == endnode) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   330
                    return;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   331
                }
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   332
                sibling = parentNode.getNextSibling();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   333
                parentNode = parentNode.getParentNode();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   334
                if (parentNode == null || Node.ELEMENT_NODE != parentNode.getNodeType()) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   335
                    documentLevel = NODE_AFTER_DOCUMENT_ELEMENT;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   336
                    parentNode = null;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   337
                }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   338
            }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   339
            if (sibling == null) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   340
                return;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   341
            }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   342
            currentNode = sibling;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   343
            sibling = currentNode.getNextSibling();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   344
        } while(true);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   345
    }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   346
90ce3da70b43 Initial load
duke
parents:
diff changeset
   347
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   348
    private byte[] engineCanonicalizeXPathNodeSetInternal(Node doc)
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   349
        throws CanonicalizationException {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   350
        try {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   351
            this.canonicalizeXPathNodeSet(doc, doc);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   352
            this.writer.flush();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   353
            if (this.writer instanceof ByteArrayOutputStream) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   354
                byte[] sol = ((ByteArrayOutputStream)this.writer).toByteArray();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   355
                if (reset) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   356
                    ((ByteArrayOutputStream)this.writer).reset();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   357
                } else {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   358
                    this.writer.close();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   359
                }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   360
                return sol;
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   361
            } else if (this.writer instanceof UnsyncByteArrayOutputStream) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   362
                byte[] result = ((UnsyncByteArrayOutputStream)this.writer).toByteArray();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   363
                if (reset) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   364
                    ((UnsyncByteArrayOutputStream)this.writer).reset();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   365
                } else {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   366
                    this.writer.close();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   367
                }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   368
                return result;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   369
            } else {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   370
                this.writer.close();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   371
            }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   372
            return null;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   373
        } catch (UnsupportedEncodingException ex) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   374
            throw new CanonicalizationException("empty", ex);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   375
        } catch (IOException ex) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   376
            throw new CanonicalizationException("empty", ex);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   377
        }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   378
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   379
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   380
    /**
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   381
     * Canonicalizes all the nodes included in the currentNode and contained in the
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   382
     * xpathNodeSet field.
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   383
     *
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   384
     * @param currentNode
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   385
     * @param endnode
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   386
     * @throws CanonicalizationException
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   387
     * @throws IOException
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   388
     */
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   389
    protected final void canonicalizeXPathNodeSet(Node currentNode, Node endnode)
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   390
        throws CanonicalizationException, IOException {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   391
        if (isVisibleInt(currentNode) == -1) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   392
            return;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   393
        }
1337
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   394
        boolean currentNodeIsVisible = false;
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   395
        NameSpaceSymbTable ns = new NameSpaceSymbTable();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   396
        if (currentNode != null && Node.ELEMENT_NODE == currentNode.getNodeType()) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   397
            getParentNameSpaces((Element)currentNode, ns);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   398
        }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   399
        if (currentNode == null) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   400
            return;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   401
        }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   402
        Node sibling = null;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   403
        Node parentNode = null;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   404
        OutputStream writer = this.writer;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   405
        int documentLevel = NODE_BEFORE_DOCUMENT_ELEMENT;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   406
        Map<String, byte[]> cache = new HashMap<String, byte[]>();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   407
        do {
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   408
            switch (currentNode.getNodeType()) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   409
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   410
            case Node.ENTITY_NODE :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   411
            case Node.NOTATION_NODE :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   412
            case Node.ATTRIBUTE_NODE :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   413
                // illegal node type during traversal
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   414
                throw new CanonicalizationException("empty");
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   415
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   416
            case Node.DOCUMENT_FRAGMENT_NODE :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   417
            case Node.DOCUMENT_NODE :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   418
                ns.outputNodePush();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   419
                sibling = currentNode.getFirstChild();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   420
                break;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   421
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   422
            case Node.COMMENT_NODE :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   423
                if (this.includeComments && (isVisibleDO(currentNode, ns.getLevel()) == 1)) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   424
                    outputCommentToWriter((Comment) currentNode, writer, documentLevel);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   425
                }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   426
                break;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   427
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   428
            case Node.PROCESSING_INSTRUCTION_NODE :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   429
                if (isVisible(currentNode)) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   430
                    outputPItoWriter((ProcessingInstruction) currentNode, writer, documentLevel);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   431
                }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   432
                break;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   433
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   434
            case Node.TEXT_NODE :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   435
            case Node.CDATA_SECTION_NODE :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   436
                if (isVisible(currentNode)) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   437
                    outputTextToWriter(currentNode.getNodeValue(), writer);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   438
                    for (Node nextSibling = currentNode.getNextSibling();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   439
                        (nextSibling != null) && ((nextSibling.getNodeType() == Node.TEXT_NODE)
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   440
                            || (nextSibling.getNodeType() == Node.CDATA_SECTION_NODE));
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   441
                        nextSibling = nextSibling.getNextSibling()) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   442
                        outputTextToWriter(nextSibling.getNodeValue(), writer);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   443
                        currentNode = nextSibling;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   444
                        sibling = currentNode.getNextSibling();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   445
                    }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   446
                }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   447
                break;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   448
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   449
            case Node.ELEMENT_NODE :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   450
                documentLevel = NODE_NOT_BEFORE_OR_AFTER_DOCUMENT_ELEMENT;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   451
                Element currentElement = (Element) currentNode;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   452
                //Add a level to the nssymbtable. So latter can be pop-back.
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   453
                String name = null;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   454
                int i = isVisibleDO(currentNode, ns.getLevel());
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   455
                if (i == -1) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   456
                    sibling = currentNode.getNextSibling();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   457
                    break;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   458
                }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   459
                currentNodeIsVisible = (i == 1);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   460
                if (currentNodeIsVisible) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   461
                    ns.outputNodePush();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   462
                    writer.write('<');
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   463
                    name = currentElement.getTagName();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   464
                    UtfHelpper.writeByte(name, writer, cache);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   465
                } else {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   466
                    ns.push();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   467
                }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   468
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   469
                Iterator<Attr> attrs = handleAttributes(currentElement,ns);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   470
                if (attrs != null) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   471
                    //we output all Attrs which are available
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   472
                    while (attrs.hasNext()) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   473
                        Attr attr = attrs.next();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   474
                        outputAttrToWriter(attr.getNodeName(), attr.getNodeValue(), writer, cache);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   475
                    }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   476
                }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   477
                if (currentNodeIsVisible) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   478
                    writer.write('>');
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   479
                }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   480
                sibling = currentNode.getFirstChild();
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   481
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   482
                if (sibling == null) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   483
                    if (currentNodeIsVisible) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   484
                        writer.write(END_TAG);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   485
                        UtfHelpper.writeByte(name, writer, cache);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   486
                        writer.write('>');
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   487
                        //We finished with this level, pop to the previous definitions.
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   488
                        ns.outputNodePop();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   489
                    } else {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   490
                        ns.pop();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   491
                    }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   492
                    if (parentNode != null) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   493
                        sibling = currentNode.getNextSibling();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   494
                    }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   495
                } else {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   496
                    parentNode = currentElement;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   497
                }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   498
                break;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   499
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   500
            case Node.DOCUMENT_TYPE_NODE :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   501
            default :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   502
                break;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   503
            }
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   504
            while (sibling == null && parentNode != null) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   505
                if (isVisible(parentNode)) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   506
                    writer.write(END_TAG);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   507
                    UtfHelpper.writeByte(((Element)parentNode).getTagName(), writer, cache);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   508
                    writer.write('>');
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   509
                    //We finished with this level, pop to the previous definitions.
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   510
                    ns.outputNodePop();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   511
                } else {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   512
                    ns.pop();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   513
                }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   514
                if (parentNode == endnode) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   515
                    return;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   516
                }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   517
                sibling = parentNode.getNextSibling();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   518
                parentNode = parentNode.getParentNode();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   519
                if (parentNode == null || Node.ELEMENT_NODE != parentNode.getNodeType()) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   520
                    parentNode = null;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   521
                    documentLevel = NODE_AFTER_DOCUMENT_ELEMENT;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   522
                }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   523
            }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   524
            if (sibling == null) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   525
                return;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   526
            }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   527
            currentNode = sibling;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   528
            sibling = currentNode.getNextSibling();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   529
        } while(true);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   530
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   531
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   532
    protected int isVisibleDO(Node currentNode, int level) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   533
        if (nodeFilter != null) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   534
            Iterator<NodeFilter> it = nodeFilter.iterator();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   535
            while (it.hasNext()) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   536
                int i = (it.next()).isNodeIncludeDO(currentNode, level);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   537
                if (i != 1) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   538
                    return i;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   539
                }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   540
            }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   541
        }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   542
        if ((this.xpathNodeSet != null) && !this.xpathNodeSet.contains(currentNode)) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   543
            return 0;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   544
        }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   545
        return 1;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   546
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   547
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   548
    protected int isVisibleInt(Node currentNode) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   549
        if (nodeFilter != null) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   550
            Iterator<NodeFilter> it = nodeFilter.iterator();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   551
            while (it.hasNext()) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   552
                int i = (it.next()).isNodeInclude(currentNode);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   553
                if (i != 1) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   554
                    return i;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   555
                }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   556
            }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   557
        }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   558
        if ((this.xpathNodeSet != null) && !this.xpathNodeSet.contains(currentNode)) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   559
            return 0;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   560
        }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   561
        return 1;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   562
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   563
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   564
    protected boolean isVisible(Node currentNode) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   565
        if (nodeFilter != null) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   566
            Iterator<NodeFilter> it = nodeFilter.iterator();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   567
            while (it.hasNext()) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   568
                if (it.next().isNodeInclude(currentNode) != 1) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   569
                    return false;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   570
                }
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   571
            }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   572
        }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   573
        if ((this.xpathNodeSet != null) && !this.xpathNodeSet.contains(currentNode)) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   574
            return false;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   575
        }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   576
        return true;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   577
    }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   578
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   579
    protected void handleParent(Element e, NameSpaceSymbTable ns) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   580
        if (!e.hasAttributes() && e.getNamespaceURI() == null) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   581
            return;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   582
        }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   583
        NamedNodeMap attrs = e.getAttributes();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   584
        int attrsLength = attrs.getLength();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   585
        for (int i = 0; i < attrsLength; i++) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   586
            Attr attribute = (Attr) attrs.item(i);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   587
            String NName = attribute.getLocalName();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   588
            String NValue = attribute.getNodeValue();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   589
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   590
            if (Constants.NamespaceSpecNS.equals(attribute.getNamespaceURI())
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   591
                && (!XML.equals(NName) || !Constants.XML_LANG_SPACE_SpecNS.equals(NValue))) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   592
                ns.addMapping(NName, NValue, attribute);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   593
            }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   594
        }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   595
        if (e.getNamespaceURI() != null) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   596
            String NName = e.getPrefix();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   597
            String NValue = e.getNamespaceURI();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   598
            String Name;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   599
            if (NName == null || NName.equals("")) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   600
                NName = XMLNS;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   601
                Name = XMLNS;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   602
            } else {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   603
                Name = XMLNS + ":" + NName;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   604
            }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   605
            Attr n = e.getOwnerDocument().createAttributeNS("http://www.w3.org/2000/xmlns/", Name);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   606
            n.setValue(NValue);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   607
            ns.addMapping(NName, NValue, n);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   608
        }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   609
    }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   610
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   611
    /**
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   612
     * Adds to ns the definitions from the parent elements of el
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   613
     * @param el
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   614
     * @param ns
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   615
     */
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   616
    protected final void getParentNameSpaces(Element el, NameSpaceSymbTable ns)  {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   617
        Node n1 = el.getParentNode();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   618
        if (n1 == null || Node.ELEMENT_NODE != n1.getNodeType()) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   619
            return;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   620
        }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   621
        //Obtain all the parents of the element
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   622
        List<Element> parents = new ArrayList<Element>();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   623
        Node parent = n1;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   624
        while (parent != null && Node.ELEMENT_NODE == parent.getNodeType()) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   625
            parents.add((Element)parent);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   626
            parent = parent.getParentNode();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   627
        }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   628
        //Visit them in reverse order.
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   629
        ListIterator<Element> it = parents.listIterator(parents.size());
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   630
        while (it.hasPrevious()) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   631
            Element ele = it.previous();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   632
            handleParent(ele, ns);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   633
        }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   634
        parents.clear();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   635
        Attr nsprefix;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   636
        if (((nsprefix = ns.getMappingWithoutRendered(XMLNS)) != null)
22325
f22d936a0ff5 8025026: Enhance canonicalization
xuelei
parents: 18780
diff changeset
   637
                && "".equals(nsprefix.getValue())) {
f22d936a0ff5 8025026: Enhance canonicalization
xuelei
parents: 18780
diff changeset
   638
            ns.addMappingAndRender(
f22d936a0ff5 8025026: Enhance canonicalization
xuelei
parents: 18780
diff changeset
   639
                    XMLNS, "", getNullNode(nsprefix.getOwnerDocument()));
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   640
        }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   641
    }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   642
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   643
    /**
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   644
     * Obtain the attributes to output for this node in XPathNodeSet c14n.
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   645
     *
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   646
     * @param element
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   647
     * @param ns
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   648
     * @return the attributes nodes to output.
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   649
     * @throws CanonicalizationException
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   650
     */
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   651
    abstract Iterator<Attr> handleAttributes(Element element, NameSpaceSymbTable ns)
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   652
        throws CanonicalizationException;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   653
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   654
    /**
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   655
     * Obtain the attributes to output for this node in a Subtree c14n.
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   656
     *
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   657
     * @param element
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   658
     * @param ns
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   659
     * @return the attributes nodes to output.
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   660
     * @throws CanonicalizationException
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   661
     */
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   662
    abstract Iterator<Attr> handleAttributesSubtree(Element element, NameSpaceSymbTable ns)
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   663
        throws CanonicalizationException;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   664
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   665
    abstract void circumventBugIfNeeded(XMLSignatureInput input)
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   666
        throws CanonicalizationException, ParserConfigurationException, IOException, SAXException;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   667
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   668
    /**
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   669
     * Outputs an Attribute to the internal Writer.
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   670
     *
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   671
     * The string value of the node is modified by replacing
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   672
     * <UL>
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   673
     * <LI>all ampersands (&) with <CODE>&amp;amp;</CODE></LI>
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   674
     * <LI>all open angle brackets (<) with <CODE>&amp;lt;</CODE></LI>
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   675
     * <LI>all quotation mark characters with <CODE>&amp;quot;</CODE></LI>
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   676
     * <LI>and the whitespace characters <CODE>#x9</CODE>, #xA, and #xD, with character
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   677
     * references. The character references are written in uppercase
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   678
     * hexadecimal with no leading zeroes (for example, <CODE>#xD</CODE> is represented
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   679
     * by the character reference <CODE>&amp;#xD;</CODE>)</LI>
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   680
     * </UL>
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   681
     *
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   682
     * @param name
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   683
     * @param value
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   684
     * @param writer
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   685
     * @throws IOException
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   686
     */
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   687
    protected static final void outputAttrToWriter(
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   688
        final String name, final String value,
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   689
        final OutputStream writer, final Map<String, byte[]> cache
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   690
    ) throws IOException {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   691
        writer.write(' ');
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   692
        UtfHelpper.writeByte(name, writer, cache);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   693
        writer.write(equalsStr);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   694
        byte[] toWrite;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   695
        final int length = value.length();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   696
        int i = 0;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   697
        while (i < length) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   698
            char c = value.charAt(i++);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   699
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   700
            switch (c) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   701
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   702
            case '&' :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   703
                toWrite = AMP;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   704
                break;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   705
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   706
            case '<' :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   707
                toWrite = LT;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   708
                break;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   709
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   710
            case '"' :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   711
                toWrite = QUOT;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   712
                break;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   713
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   714
            case 0x09 :    // '\t'
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   715
                toWrite = X9;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   716
                break;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   717
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   718
            case 0x0A :    // '\n'
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   719
                toWrite = XA;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   720
                break;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   721
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   722
            case 0x0D :    // '\r'
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   723
                toWrite = XD;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   724
                break;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   725
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   726
            default :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   727
                if (c < 0x80) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   728
                    writer.write(c);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   729
                } else {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   730
                    UtfHelpper.writeCharToUtf8(c, writer);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   731
                }
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   732
                continue;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   733
            }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   734
            writer.write(toWrite);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   735
        }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   736
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   737
        writer.write('\"');
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   738
    }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   739
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   740
    /**
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   741
     * Outputs a PI to the internal Writer.
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   742
     *
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   743
     * @param currentPI
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   744
     * @param writer where to write the things
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   745
     * @throws IOException
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   746
     */
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   747
    protected void outputPItoWriter(
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   748
        ProcessingInstruction currentPI, OutputStream writer, int position
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   749
    ) throws IOException {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   750
        if (position == NODE_AFTER_DOCUMENT_ELEMENT) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   751
            writer.write('\n');
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   752
        }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   753
        writer.write(BEGIN_PI);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   754
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   755
        final String target = currentPI.getTarget();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   756
        int length = target.length();
1337
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   757
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   758
        for (int i = 0; i < length; i++) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   759
            char c = target.charAt(i);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   760
            if (c == 0x0D) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   761
                writer.write(XD);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   762
            } else {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   763
                if (c < 0x80) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   764
                    writer.write(c);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   765
                } else {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   766
                    UtfHelpper.writeCharToUtf8(c, writer);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   767
                }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   768
            }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   769
        }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   770
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   771
        final String data = currentPI.getData();
1337
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   772
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   773
        length = data.length();
1337
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   774
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   775
        if (length > 0) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   776
            writer.write(' ');
1337
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   777
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   778
            for (int i = 0; i < length; i++) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   779
                char c = data.charAt(i);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   780
                if (c == 0x0D) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   781
                    writer.write(XD);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   782
                } else {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   783
                    UtfHelpper.writeCharToUtf8(c, writer);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   784
                }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   785
            }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   786
        }
1337
e8d6cef36199 6469266: Integrate Apache XMLSec 1.4.2 into JDK 7
mullan
parents: 2
diff changeset
   787
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   788
        writer.write(END_PI);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   789
        if (position == NODE_BEFORE_DOCUMENT_ELEMENT) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   790
            writer.write('\n');
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   791
        }
10694
cf59e2badd14 7088502: Security libraries don't build with javac -Werror
mullan
parents: 1337
diff changeset
   792
    }
cf59e2badd14 7088502: Security libraries don't build with javac -Werror
mullan
parents: 1337
diff changeset
   793
18780
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   794
    /**
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   795
     * Method outputCommentToWriter
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   796
     *
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   797
     * @param currentComment
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   798
     * @param writer writer where to write the things
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   799
     * @throws IOException
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   800
     */
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   801
    protected void outputCommentToWriter(
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   802
        Comment currentComment, OutputStream writer, int position
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   803
    ) throws IOException {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   804
        if (position == NODE_AFTER_DOCUMENT_ELEMENT) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   805
            writer.write('\n');
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   806
        }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   807
        writer.write(BEGIN_COMM);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   808
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   809
        final String data = currentComment.getData();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   810
        final int length = data.length();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   811
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   812
        for (int i = 0; i < length; i++) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   813
            char c = data.charAt(i);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   814
            if (c == 0x0D) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   815
                writer.write(XD);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   816
            } else {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   817
                if (c < 0x80) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   818
                    writer.write(c);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   819
                } else {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   820
                    UtfHelpper.writeCharToUtf8(c, writer);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   821
                }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   822
            }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   823
        }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   824
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   825
        writer.write(END_COMM);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   826
        if (position == NODE_BEFORE_DOCUMENT_ELEMENT) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   827
            writer.write('\n');
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   828
        }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   829
    }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   830
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   831
    /**
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   832
     * Outputs a Text of CDATA section to the internal Writer.
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   833
     *
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   834
     * @param text
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   835
     * @param writer writer where to write the things
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   836
     * @throws IOException
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   837
     */
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   838
    protected static final void outputTextToWriter(
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   839
        final String text, final OutputStream writer
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   840
    ) throws IOException {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   841
        final int length = text.length();
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   842
        byte[] toWrite;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   843
        for (int i = 0; i < length; i++) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   844
            char c = text.charAt(i);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   845
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   846
            switch (c) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   847
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   848
            case '&' :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   849
                toWrite = AMP;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   850
                break;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   851
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   852
            case '<' :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   853
                toWrite = LT;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   854
                break;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   855
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   856
            case '>' :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   857
                toWrite = GT;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   858
                break;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   859
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   860
            case 0xD :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   861
                toWrite = XD;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   862
                break;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   863
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   864
            default :
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   865
                if (c < 0x80) {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   866
                    writer.write(c);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   867
                } else {
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   868
                    UtfHelpper.writeCharToUtf8(c, writer);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   869
                }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   870
                continue;
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   871
            }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   872
            writer.write(toWrite);
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   873
        }
f47b920867e7 8011547: Update XML Signature implementation to Apache Santuario 1.5.4
mullan
parents: 13791
diff changeset
   874
    }
10694
cf59e2badd14 7088502: Security libraries don't build with javac -Werror
mullan
parents: 1337
diff changeset
   875
22325
f22d936a0ff5 8025026: Enhance canonicalization
xuelei
parents: 18780
diff changeset
   876
    // The null xmlns definition.
f22d936a0ff5 8025026: Enhance canonicalization
xuelei
parents: 18780
diff changeset
   877
    protected Attr getNullNode(Document ownerDocument) {
f22d936a0ff5 8025026: Enhance canonicalization
xuelei
parents: 18780
diff changeset
   878
        if (nullNode == null) {
f22d936a0ff5 8025026: Enhance canonicalization
xuelei
parents: 18780
diff changeset
   879
            try {
f22d936a0ff5 8025026: Enhance canonicalization
xuelei
parents: 18780
diff changeset
   880
                nullNode = ownerDocument.createAttributeNS(
f22d936a0ff5 8025026: Enhance canonicalization
xuelei
parents: 18780
diff changeset
   881
                                    Constants.NamespaceSpecNS, XMLNS);
f22d936a0ff5 8025026: Enhance canonicalization
xuelei
parents: 18780
diff changeset
   882
                nullNode.setValue("");
f22d936a0ff5 8025026: Enhance canonicalization
xuelei
parents: 18780
diff changeset
   883
            } catch (Exception e) {
f22d936a0ff5 8025026: Enhance canonicalization
xuelei
parents: 18780
diff changeset
   884
                throw new RuntimeException("Unable to create nullNode: " + e);
f22d936a0ff5 8025026: Enhance canonicalization
xuelei
parents: 18780
diff changeset
   885
            }
f22d936a0ff5 8025026: Enhance canonicalization
xuelei
parents: 18780
diff changeset
   886
        }
f22d936a0ff5 8025026: Enhance canonicalization
xuelei
parents: 18780
diff changeset
   887
        return nullNode;
f22d936a0ff5 8025026: Enhance canonicalization
xuelei
parents: 18780
diff changeset
   888
    }
f22d936a0ff5 8025026: Enhance canonicalization
xuelei
parents: 18780
diff changeset
   889
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   890
}