History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/sun/security/provider/DSAPublicKey.java (1 of 18352 files). Show all

Unified · Split

java/pkg/sun/security/provider/DSAPublicKey.java+152−0
@@ -0,0 +1,152 @@
1+/*
2+ * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
3+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+ *
5+ * This code is free software; you can redistribute it and/or modify it
6+ * under the terms of the GNU General Public License version 2 only, as
7+ * published by the Free Software Foundation. Oracle designates this
8+ * particular file as subject to the "Classpath" exception as provided
9+ * by Oracle in the LICENSE file that accompanied this code.
10+ *
11+ * This code is distributed in the hope that it will be useful, but WITHOUT
12+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+ * version 2 for more details (a copy is included in the LICENSE file that
15+ * accompanied this code).
16+ *
17+ * You should have received a copy of the GNU General Public License version
18+ * 2 along with this work; if not, write to the Free Software Foundation,
19+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+ *
21+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+ * or visit www.oracle.com if you need additional information or have any
23+ * questions.
24+ */
25+
26+package sun.security.provider;
27+
28+import java.util.*;
29+import java.io.*;
30+import java.math.BigInteger;
31+import java.security.InvalidKeyException;
32+import java.security.ProviderException;
33+import java.security.AlgorithmParameters;
34+import java.security.spec.DSAParameterSpec;
35+import java.security.spec.InvalidParameterSpecException;
36+import java.security.interfaces.DSAParams;
37+
38+import sun.security.x509.X509Key;
39+import sun.security.x509.AlgIdDSA;
40+import sun.security.util.Debug;
41+import sun.security.util.DerValue;
42+import sun.security.util.DerInputStream;
43+import sun.security.util.DerOutputStream;
44+
45+/**
46+ * An X.509 public key for the Digital Signature Algorithm.
47+ *
48+ * @author Benjamin Renaud
49+ *
50+ *
51+ * @see DSAPrivateKey
52+ * @see AlgIdDSA
53+ * @see DSA
54+ */
55+
56+public class DSAPublicKey extends X509Key
57+implements java.security.interfaces.DSAPublicKey, Serializable {
58+
59+ /** use serialVersionUID from JDK 1.1. for interoperability */
60+ private static final long serialVersionUID = -2994193307391104133L;
61+
62+ /* the public key */
63+ private BigInteger y;
64+
65+ /*
66+ * Keep this constructor for backwards compatibility with JDK1.1.
67+ */
68+ public DSAPublicKey() {
69+ }
70+
71+ /**
72+ * Make a DSA public key out of a public key and three parameters.
73+ * The p, q, and g parameters may be null, but if so, parameters will need
74+ * to be supplied from some other source before this key can be used in
75+ * cryptographic operations. PKIX RFC2459bis explicitly allows DSA public
76+ * keys without parameters, where the parameters are provided in the
77+ * issuer's DSA public key.
78+ *
79+ * @param y the actual key bits
80+ * @param p DSA parameter p, may be null if all of p, q, and g are null.
81+ * @param q DSA parameter q, may be null if all of p, q, and g are null.
82+ * @param g DSA parameter g, may be null if all of p, q, and g are null.
83+ */
84+ public DSAPublicKey(BigInteger y, BigInteger p, BigInteger q,
85+ BigInteger g)
86+ throws InvalidKeyException {
87+ this.y = y;
88+ algid = new AlgIdDSA(p, q, g);
89+
90+ try {
91+ key = new DerValue(DerValue.tag_Integer,
92+ y.toByteArray()).toByteArray();
93+ encode();
94+ } catch (IOException e) {
95+ throw new InvalidKeyException("could not DER encode y: " +
96+ e.getMessage());
97+ }
98+ }
99+
100+ /**
101+ * Make a DSA public key from its DER encoding (X.509).
102+ */
103+ public DSAPublicKey(byte[] encoded) throws InvalidKeyException {
104+ decode(encoded);
105+ }
106+
107+ /**
108+ * Returns the DSA parameters associated with this key, or null if the
109+ * parameters could not be parsed.
110+ */
111+ public DSAParams getParams() {
112+ try {
113+ if (algid instanceof DSAParams) {
114+ return (DSAParams)algid;
115+ } else {
116+ DSAParameterSpec paramSpec;
117+ AlgorithmParameters algParams = algid.getParameters();
118+ if (algParams == null) {
119+ return null;
120+ }
121+ paramSpec = algParams.getParameterSpec(DSAParameterSpec.class);
122+ return (DSAParams)paramSpec;
123+ }
124+ } catch (InvalidParameterSpecException e) {
125+ return null;
126+ }
127+ }
128+
129+ /**
130+ * Get the raw public value, y, without the parameters.
131+ *
132+ * @see getParameters
133+ */
134+ public BigInteger getY() {
135+ return y;
136+ }
137+
138+ public String toString() {
139+ return "Sun DSA Public Key\n Parameters:" + algid
140+ + "\n y:\n" + Debug.toHexString(y) + "\n";
141+ }
142+
143+ protected void parseKeyBits() throws InvalidKeyException {
144+ try {
145+ DerInputStream in = new DerInputStream(key);
146+ y = in.getBigInteger();
147+ } catch (IOException e) {
148+ throw new InvalidKeyException("Invalid key: y value\n" +
149+ e.getMessage());
150+ }
151+ }
152+}