1 /*
2  * reserved comment block
3  * DO NOT REMOVE OR ALTER!
4  */
5 /**
6  * Licensed to the Apache Software Foundation (ASF) under one
7  * or more contributor license agreements. See the NOTICE file
8  * distributed with this work for additional information
9  * regarding copyright ownership. The ASF licenses this file
10  * to you under the Apache License, Version 2.0 (the
11  * "License"); you may not use this file except in compliance
12  * with the License. You may obtain a copy of the License at
13  *
14  * http://www.apache.org/licenses/LICENSE-2.0
15  *
16  * Unless required by applicable law or agreed to in writing,
17  * software distributed under the License is distributed on an
18  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
19  * KIND, either express or implied. See the License for the
20  * specific language governing permissions and limitations
21  * under the License.
22  */
23 package com.sun.org.apache.xml.internal.security.keys.content.x509;
24 
25 import java.math.BigInteger;
26 import java.security.cert.X509Certificate;
27 
28 import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException;
29 import com.sun.org.apache.xml.internal.security.utils.Constants;
30 import com.sun.org.apache.xml.internal.security.utils.RFC2253Parser;
31 import com.sun.org.apache.xml.internal.security.utils.SignatureElementProxy;
32 import org.w3c.dom.Document;
33 import org.w3c.dom.Element;
34 
35 public class XMLX509IssuerSerial extends SignatureElementProxy implements XMLX509DataContent {
36 
37     private static final com.sun.org.slf4j.internal.Logger LOG =
38         com.sun.org.slf4j.internal.LoggerFactory.getLogger(XMLX509IssuerSerial.class);
39 
40     /**
41      * Constructor XMLX509IssuerSerial
42      *
43      * @param element
44      * @param baseURI
45      * @throws XMLSecurityException
46      */
XMLX509IssuerSerial(Element element, String baseURI)47     public XMLX509IssuerSerial(Element element, String baseURI) throws XMLSecurityException {
48         super(element, baseURI);
49     }
50 
51     /**
52      * Constructor XMLX509IssuerSerial
53      *
54      * @param doc
55      * @param x509IssuerName
56      * @param x509SerialNumber
57      */
XMLX509IssuerSerial(Document doc, String x509IssuerName, BigInteger x509SerialNumber)58     public XMLX509IssuerSerial(Document doc, String x509IssuerName, BigInteger x509SerialNumber) {
59         super(doc);
60         addReturnToSelf();
61         addTextElement(x509IssuerName, Constants._TAG_X509ISSUERNAME);
62         addTextElement(x509SerialNumber.toString(), Constants._TAG_X509SERIALNUMBER);
63     }
64 
65     /**
66      * Constructor XMLX509IssuerSerial
67      *
68      * @param doc
69      * @param x509IssuerName
70      * @param x509SerialNumber
71      */
XMLX509IssuerSerial(Document doc, String x509IssuerName, String x509SerialNumber)72     public XMLX509IssuerSerial(Document doc, String x509IssuerName, String x509SerialNumber) {
73         this(doc, x509IssuerName, new BigInteger(x509SerialNumber));
74     }
75 
76     /**
77      * Constructor XMLX509IssuerSerial
78      *
79      * @param doc
80      * @param x509IssuerName
81      * @param x509SerialNumber
82      */
XMLX509IssuerSerial(Document doc, String x509IssuerName, int x509SerialNumber)83     public XMLX509IssuerSerial(Document doc, String x509IssuerName, int x509SerialNumber) {
84         this(doc, x509IssuerName, new BigInteger(Integer.toString(x509SerialNumber)));
85     }
86 
87     /**
88      * Constructor XMLX509IssuerSerial
89      *
90      * @param doc
91      * @param x509certificate
92      */
XMLX509IssuerSerial(Document doc, X509Certificate x509certificate)93     public XMLX509IssuerSerial(Document doc, X509Certificate x509certificate) {
94         this(
95             doc,
96             x509certificate.getIssuerX500Principal().getName(),
97             x509certificate.getSerialNumber()
98         );
99     }
100 
101     /**
102      * Method getSerialNumber
103      *
104      * @return the serial number
105      */
getSerialNumber()106     public BigInteger getSerialNumber() {
107         String text =
108             this.getTextFromChildElement(Constants._TAG_X509SERIALNUMBER, Constants.SignatureSpecNS);
109         LOG.debug("X509SerialNumber text: {}", text);
110 
111         return new BigInteger(text);
112     }
113 
114     /**
115      * Method getSerialNumberInteger
116      *
117      * @return the serial number as plain int
118      */
getSerialNumberInteger()119     public int getSerialNumberInteger() {
120         return this.getSerialNumber().intValue();
121     }
122 
123     /**
124      * Method getIssuerName
125      *
126      * @return the issuer name
127      */
getIssuerName()128     public String getIssuerName()  {
129         return RFC2253Parser.normalize(
130             this.getTextFromChildElement(Constants._TAG_X509ISSUERNAME, Constants.SignatureSpecNS)
131         );
132     }
133 
134     /** {@inheritDoc} */
equals(Object obj)135     public boolean equals(Object obj) {
136         if (!(obj instanceof XMLX509IssuerSerial)) {
137             return false;
138         }
139 
140         XMLX509IssuerSerial other = (XMLX509IssuerSerial) obj;
141 
142         return this.getSerialNumber().equals(other.getSerialNumber())
143             && this.getIssuerName().equals(other.getIssuerName());
144     }
145 
hashCode()146     public int hashCode() {
147         int result = 17;
148         result = 31 * result + getSerialNumber().hashCode();
149         result = 31 * result + getIssuerName().hashCode();
150         return result;
151     }
152 
153     /** {@inheritDoc} */
getBaseLocalName()154     public String getBaseLocalName() {
155         return Constants._TAG_X509ISSUERSERIAL;
156     }
157 }
158