src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMX509IssuerSerial.java
changeset 47216 71c04702a3d5
parent 25859 3317bb8137f4
child 50614 3810c9a2efa1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMX509IssuerSerial.java	Tue Sep 12 19:03:39 2017 +0200
@@ -0,0 +1,139 @@
+/*
+ * reserved comment block
+ * DO NOT REMOVE OR ALTER!
+ */
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
+ */
+/*
+ * $Id: DOMX509IssuerSerial.java 1333415 2012-05-03 12:03:51Z coheigea $
+ */
+package org.jcp.xml.dsig.internal.dom;
+
+import javax.xml.crypto.*;
+import javax.xml.crypto.dom.DOMCryptoContext;
+import javax.xml.crypto.dsig.*;
+import javax.xml.crypto.dsig.keyinfo.X509IssuerSerial;
+
+import java.math.BigInteger;
+import javax.security.auth.x500.X500Principal;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+/**
+ * DOM-based implementation of X509IssuerSerial.
+ *
+ * @author Sean Mullan
+ */
+public final class DOMX509IssuerSerial extends DOMStructure
+    implements X509IssuerSerial {
+
+    private final String issuerName;
+    private final BigInteger serialNumber;
+
+    /**
+     * Creates a <code>DOMX509IssuerSerial</code> containing the specified
+     * issuer distinguished name/serial number pair.
+     *
+     * @param issuerName the X.509 issuer distinguished name in RFC 2253
+     *    String format
+     * @param serialNumber the serial number
+     * @throws IllegalArgumentException if the format of <code>issuerName</code>
+     *    is not RFC 2253 compliant
+     * @throws NullPointerException if <code>issuerName</code> or
+     *    <code>serialNumber</code> is <code>null</code>
+     */
+    public DOMX509IssuerSerial(String issuerName, BigInteger serialNumber) {
+        if (issuerName == null) {
+            throw new NullPointerException("issuerName cannot be null");
+        }
+        if (serialNumber == null) {
+            throw new NullPointerException("serialNumber cannot be null");
+        }
+        // check that issuer distinguished name conforms to RFC 2253
+        new X500Principal(issuerName);
+        this.issuerName = issuerName;
+        this.serialNumber = serialNumber;
+    }
+
+    /**
+     * Creates a <code>DOMX509IssuerSerial</code> from an element.
+     *
+     * @param isElem an X509IssuerSerial element
+     */
+    public DOMX509IssuerSerial(Element isElem) throws MarshalException {
+        Element iNElem = DOMUtils.getFirstChildElement(isElem,
+                                                       "X509IssuerName");
+        Element sNElem = DOMUtils.getNextSiblingElement(iNElem,
+                                                        "X509SerialNumber");
+        issuerName = iNElem.getFirstChild().getNodeValue();
+        serialNumber = new BigInteger(sNElem.getFirstChild().getNodeValue());
+    }
+
+    public String getIssuerName() {
+        return issuerName;
+    }
+
+    public BigInteger getSerialNumber() {
+        return serialNumber;
+    }
+
+    public void marshal(Node parent, String dsPrefix, DOMCryptoContext context)
+        throws MarshalException
+    {
+        Document ownerDoc = DOMUtils.getOwnerDocument(parent);
+
+        Element isElem = DOMUtils.createElement(ownerDoc, "X509IssuerSerial",
+                                                XMLSignature.XMLNS, dsPrefix);
+        Element inElem = DOMUtils.createElement(ownerDoc, "X509IssuerName",
+                                                XMLSignature.XMLNS, dsPrefix);
+        Element snElem = DOMUtils.createElement(ownerDoc, "X509SerialNumber",
+                                                XMLSignature.XMLNS, dsPrefix);
+        inElem.appendChild(ownerDoc.createTextNode(issuerName));
+        snElem.appendChild(ownerDoc.createTextNode(serialNumber.toString()));
+        isElem.appendChild(inElem);
+        isElem.appendChild(snElem);
+        parent.appendChild(isElem);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (!(obj instanceof X509IssuerSerial)) {
+            return false;
+        }
+        X509IssuerSerial ois = (X509IssuerSerial)obj;
+        return (issuerName.equals(ois.getIssuerName()) &&
+                serialNumber.equals(ois.getSerialNumber()));
+    }
+
+    @Override
+    public int hashCode() {
+        int result = 17;
+        result = 31 * result + issuerName.hashCode();
+        result = 31 * result + serialNumber.hashCode();
+
+        return result;
+    }
+}