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
26package sun.security.provider;
27
28import java.util.*;
29import java.io.*;
30import java.math.BigInteger;
31import java.security.InvalidKeyException;
32import java.security.ProviderException;
33import java.security.AlgorithmParameters;
34import java.security.spec.DSAParameterSpec;
35import java.security.spec.InvalidParameterSpecException;
36import java.security.interfaces.DSAParams;
37
38import sun.security.x509.X509Key;
39import sun.security.x509.AlgIdDSA;
40import sun.security.util.Debug;
41import sun.security.util.DerValue;
42import sun.security.util.DerInputStream;
43import 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
56public class DSAPublicKey extends X509Key
57implements 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}