001    /**
002     *  Licensed to the Apache Software Foundation (ASF) under one or more
003     *  contributor license agreements.  See the NOTICE file distributed with
004     *  this work for additional information regarding copyright ownership.
005     *  The ASF licenses this file to You under the Apache License, Version 2.0
006     *  (the "License"); you may not use this file except in compliance with
007     *  the License.  You may obtain a copy of the License at
008     *
009     *     http://www.apache.org/licenses/LICENSE-2.0
010     *
011     *  Unless required by applicable law or agreed to in writing, software
012     *  distributed under the License is distributed on an "AS IS" BASIS,
013     *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     *  See the License for the specific language governing permissions and
015     *  limitations under the License.
016     */
017    
018    package org.apache.geronimo.util.crypto.params;
019    
020    import java.math.BigInteger;
021    
022    import org.apache.geronimo.util.crypto.CipherParameters;
023    
024    public class DHParameters
025        implements CipherParameters
026    {
027        private BigInteger              g;
028        private BigInteger              p;
029        private BigInteger              q;
030        private int                     j;
031        private DHValidationParameters  validation;
032    
033        public DHParameters(
034            BigInteger  p,
035            BigInteger  g)
036        {
037            this.g = g;
038            this.p = p;
039        }
040    
041        public DHParameters(
042            BigInteger  p,
043            BigInteger  g,
044            BigInteger  q,
045            int         j)
046        {
047            this.g = g;
048            this.p = p;
049            this.q = q;
050            this.j = j;
051        }
052    
053        public DHParameters(
054            BigInteger              p,
055            BigInteger              g,
056            BigInteger              q,
057            int                     j,
058            DHValidationParameters  validation)
059        {
060            this.g = g;
061            this.p = p;
062            this.q = q;
063            this.j = j;
064        }
065    
066        public BigInteger getP()
067        {
068            return p;
069        }
070    
071        public BigInteger getG()
072        {
073            return g;
074        }
075    
076        public BigInteger getQ()
077        {
078            return q;
079        }
080    
081        /**
082         * Return the private value length in bits - if set, zero otherwise (use bitLength(P) - 1).
083         *
084         * @return the private value length in bits, zero otherwise.
085         */
086        public int getJ()
087        {
088            return j;
089        }
090    
091        public DHValidationParameters getValidationParameters()
092        {
093            return validation;
094        }
095    
096        public boolean equals(
097            Object  obj)
098        {
099            if (!(obj instanceof DHParameters))
100            {
101                return false;
102            }
103    
104            DHParameters    pm = (DHParameters)obj;
105    
106            if (this.getValidationParameters() != null)
107            {
108                if (!this.getValidationParameters().equals(pm.getValidationParameters()))
109                {
110                    return false;
111                }
112            }
113            else
114            {
115                if (pm.getValidationParameters() != null)
116                {
117                    return false;
118                }
119            }
120    
121            if (this.getQ() != null)
122            {
123                if (!this.getQ().equals(pm.getQ()))
124                {
125                    return false;
126                }
127            }
128            else
129            {
130                if (pm.getQ() != null)
131                {
132                    return false;
133                }
134            }
135    
136            return (j == pm.getJ()) && pm.getP().equals(p) && pm.getG().equals(g);
137        }
138    }