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/java/security/spec (56 of 18352 files). Show all

Unified · Split

56 files
  1. java/pkg/java/security/spec/AlgorithmParameterSpec.class +0 −0
  2. java/pkg/java/security/spec/AlgorithmParameterSpec.java +44 −0
  3. java/pkg/java/security/spec/DSAParameterSpec.class +0 −0
  4. java/pkg/java/security/spec/DSAParameterSpec.java +89 −0
  5. java/pkg/java/security/spec/DSAPrivateKeySpec.class +0 −0
  6. java/pkg/java/security/spec/DSAPrivateKeySpec.java +106 −0
  7. java/pkg/java/security/spec/DSAPublicKeySpec.class +0 −0
  8. java/pkg/java/security/spec/DSAPublicKeySpec.java +106 −0
  9. java/pkg/java/security/spec/ECField.class +0 −0
  10. java/pkg/java/security/spec/ECField.java +49 −0
  11. java/pkg/java/security/spec/ECFieldF2m.class +0 −0
  12. java/pkg/java/security/spec/ECFieldF2m.java +241 −0
  13. java/pkg/java/security/spec/ECFieldFp.class +0 −0
  14. java/pkg/java/security/spec/ECFieldFp.java +98 −0
  15. java/pkg/java/security/spec/ECGenParameterSpec.class +0 −0
  16. java/pkg/java/security/spec/ECGenParameterSpec.java +68 −0
  17. java/pkg/java/security/spec/ECParameterSpec.class +0 −0
  18. java/pkg/java/security/spec/ECParameterSpec.java +113 −0
  19. java/pkg/java/security/spec/ECPoint.class +0 −0
  20. java/pkg/java/security/spec/ECPoint.java +114 −0
  21. java/pkg/java/security/spec/ECPrivateKeySpec.class +0 −0
  22. java/pkg/java/security/spec/ECPrivateKeySpec.java +81 −0
  23. java/pkg/java/security/spec/ECPublicKeySpec.class +0 −0
  24. java/pkg/java/security/spec/ECPublicKeySpec.java +85 −0
  25. java/pkg/java/security/spec/EllipticCurve.class +0 −0
  26. java/pkg/java/security/spec/EllipticCurve.java +196 −0
  27. java/pkg/java/security/spec/EncodedKeySpec.class +0 −0
  28. java/pkg/java/security/spec/EncodedKeySpec.java +85 −0
  29. java/pkg/java/security/spec/InvalidKeySpecException.class +0 −0
  30. java/pkg/java/security/spec/InvalidKeySpecException.java +94 −0
  31. java/pkg/java/security/spec/InvalidParameterSpecException.class +0 −0
  32. java/pkg/java/security/spec/InvalidParameterSpecException.java +66 −0
  33. java/pkg/java/security/spec/KeySpec.class +0 −0
  34. java/pkg/java/security/spec/KeySpec.java +62 −0
  35. java/pkg/java/security/spec/MGF1ParameterSpec.class +0 −0
  36. java/pkg/java/security/spec/MGF1ParameterSpec.java +107 −0
  37. java/pkg/java/security/spec/PKCS8EncodedKeySpec.class +0 −0
  38. java/pkg/java/security/spec/PKCS8EncodedKeySpec.java +96 −0
  39. java/pkg/java/security/spec/PSSParameterSpec.class +0 −0
  40. java/pkg/java/security/spec/PSSParameterSpec.java +211 −0
  41. java/pkg/java/security/spec/RSAKeyGenParameterSpec.class +0 −0
  42. java/pkg/java/security/spec/RSAKeyGenParameterSpec.java +86 −0
  43. java/pkg/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.class +0 −0
  44. java/pkg/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java +212 −0
  45. java/pkg/java/security/spec/RSAOtherPrimeInfo.class +0 −0
  46. java/pkg/java/security/spec/RSAOtherPrimeInfo.java +120 −0
  47. java/pkg/java/security/spec/RSAPrivateCrtKeySpec.class +0 −0
  48. java/pkg/java/security/spec/RSAPrivateCrtKeySpec.java +143 −0
  49. java/pkg/java/security/spec/RSAPrivateKeySpec.class +0 −0
  50. java/pkg/java/security/spec/RSAPrivateKeySpec.java +77 −0
  51. java/pkg/java/security/spec/RSAPublicKeySpec.class +0 −0
  52. java/pkg/java/security/spec/RSAPublicKeySpec.java +77 −0
  53. java/pkg/java/security/spec/X509EncodedKeySpec.class +0 −0
  54. java/pkg/java/security/spec/X509EncodedKeySpec.java +86 −0
  55. java/pkg/java/security/spec/mkfile +34 −0
  56. java/pkg/java/security/spec/package.html +78 −0
java/pkg/java/security/spec/AlgorithmParameterSpec.class+0−0

Binary file not shown.

java/pkg/java/security/spec/AlgorithmParameterSpec.java+44−0
@@ -0,0 +1,44 @@
1+/*
2+ * Copyright (c) 1997, 1999, 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 java.security.spec;
27+
28+/**
29+ * A (transparent) specification of cryptographic parameters.
30+ *
31+ * <P> This interface contains no methods or constants. Its only purpose
32+ * is to group (and provide type safety for) all parameter specifications.
33+ * All parameter specifications must implement this interface.
34+ *
35+ * @author Jan Luehe
36+ *
37+ *
38+ * @see java.security.AlgorithmParameters
39+ * @see DSAParameterSpec
40+ *
41+ * @since 1.2
42+ */
43+
44+public interface AlgorithmParameterSpec { }
java/pkg/java/security/spec/DSAParameterSpec.class+0−0

Binary file not shown.

java/pkg/java/security/spec/DSAParameterSpec.java+89−0
@@ -0,0 +1,89 @@
1+/*
2+ * Copyright (c) 1997, 1999, 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 java.security.spec;
27+
28+import java.math.BigInteger;
29+
30+/**
31+ * This class specifies the set of parameters used with the DSA algorithm.
32+ *
33+ * @author Jan Luehe
34+ *
35+ *
36+ * @see AlgorithmParameterSpec
37+ *
38+ * @since 1.2
39+ */
40+
41+public class DSAParameterSpec implements AlgorithmParameterSpec,
42+java.security.interfaces.DSAParams {
43+
44+ BigInteger p;
45+ BigInteger q;
46+ BigInteger g;
47+
48+ /**
49+ * Creates a new DSAParameterSpec with the specified parameter values.
50+ *
51+ * @param p the prime.
52+ *
53+ * @param q the sub-prime.
54+ *
55+ * @param g the base.
56+ */
57+ public DSAParameterSpec(BigInteger p, BigInteger q, BigInteger g) {
58+ this.p = p;
59+ this.q = q;
60+ this.g = g;
61+ }
62+
63+ /**
64+ * Returns the prime <code>p</code>.
65+ *
66+ * @return the prime <code>p</code>.
67+ */
68+ public BigInteger getP() {
69+ return this.p;
70+ }
71+
72+ /**
73+ * Returns the sub-prime <code>q</code>.
74+ *
75+ * @return the sub-prime <code>q</code>.
76+ */
77+ public BigInteger getQ() {
78+ return this.q;
79+ }
80+
81+ /**
82+ * Returns the base <code>g</code>.
83+ *
84+ * @return the base <code>g</code>.
85+ */
86+ public BigInteger getG() {
87+ return this.g;
88+ }
89+}
java/pkg/java/security/spec/DSAPrivateKeySpec.class+0−0

Binary file not shown.

java/pkg/java/security/spec/DSAPrivateKeySpec.java+106−0
@@ -0,0 +1,106 @@
1+/*
2+ * Copyright (c) 1997, 1999, 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 java.security.spec;
27+
28+import java.math.BigInteger;
29+
30+/**
31+ * This class specifies a DSA private key with its associated parameters.
32+ *
33+ * @author Jan Luehe
34+ *
35+ *
36+ * @see java.security.Key
37+ * @see java.security.KeyFactory
38+ * @see KeySpec
39+ * @see DSAPublicKeySpec
40+ * @see PKCS8EncodedKeySpec
41+ *
42+ * @since 1.2
43+ */
44+
45+public class DSAPrivateKeySpec implements KeySpec {
46+
47+ private BigInteger x;
48+ private BigInteger p;
49+ private BigInteger q;
50+ private BigInteger g;
51+
52+ /**
53+ * Creates a new DSAPrivateKeySpec with the specified parameter values.
54+ *
55+ * @param x the private key.
56+ *
57+ * @param p the prime.
58+ *
59+ * @param q the sub-prime.
60+ *
61+ * @param g the base.
62+ */
63+ public DSAPrivateKeySpec(BigInteger x, BigInteger p, BigInteger q,
64+ BigInteger g) {
65+ this.x = x;
66+ this.p = p;
67+ this.q = q;
68+ this.g = g;
69+ }
70+
71+ /**
72+ * Returns the private key <code>x</code>.
73+ *
74+ * @return the private key <code>x</code>.
75+ */
76+ public BigInteger getX() {
77+ return this.x;
78+ }
79+
80+ /**
81+ * Returns the prime <code>p</code>.
82+ *
83+ * @return the prime <code>p</code>.
84+ */
85+ public BigInteger getP() {
86+ return this.p;
87+ }
88+
89+ /**
90+ * Returns the sub-prime <code>q</code>.
91+ *
92+ * @return the sub-prime <code>q</code>.
93+ */
94+ public BigInteger getQ() {
95+ return this.q;
96+ }
97+
98+ /**
99+ * Returns the base <code>g</code>.
100+ *
101+ * @return the base <code>g</code>.
102+ */
103+ public BigInteger getG() {
104+ return this.g;
105+ }
106+}
java/pkg/java/security/spec/DSAPublicKeySpec.class+0−0

Binary file not shown.

java/pkg/java/security/spec/DSAPublicKeySpec.java+106−0
@@ -0,0 +1,106 @@
1+/*
2+ * Copyright (c) 1997, 1999, 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 java.security.spec;
27+
28+import java.math.BigInteger;
29+
30+/**
31+ * This class specifies a DSA public key with its associated parameters.
32+ *
33+ * @author Jan Luehe
34+ *
35+ *
36+ * @see java.security.Key
37+ * @see java.security.KeyFactory
38+ * @see KeySpec
39+ * @see DSAPrivateKeySpec
40+ * @see X509EncodedKeySpec
41+ *
42+ * @since 1.2
43+ */
44+
45+public class DSAPublicKeySpec implements KeySpec {
46+
47+ private BigInteger y;
48+ private BigInteger p;
49+ private BigInteger q;
50+ private BigInteger g;
51+
52+ /**
53+ * Creates a new DSAPublicKeySpec with the specified parameter values.
54+ *
55+ * @param y the public key.
56+ *
57+ * @param p the prime.
58+ *
59+ * @param q the sub-prime.
60+ *
61+ * @param g the base.
62+ */
63+ public DSAPublicKeySpec(BigInteger y, BigInteger p, BigInteger q,
64+ BigInteger g) {
65+ this.y = y;
66+ this.p = p;
67+ this.q = q;
68+ this.g = g;
69+ }
70+
71+ /**
72+ * Returns the public key <code>y</code>.
73+ *
74+ * @return the public key <code>y</code>.
75+ */
76+ public BigInteger getY() {
77+ return this.y;
78+ }
79+
80+ /**
81+ * Returns the prime <code>p</code>.
82+ *
83+ * @return the prime <code>p</code>.
84+ */
85+ public BigInteger getP() {
86+ return this.p;
87+ }
88+
89+ /**
90+ * Returns the sub-prime <code>q</code>.
91+ *
92+ * @return the sub-prime <code>q</code>.
93+ */
94+ public BigInteger getQ() {
95+ return this.q;
96+ }
97+
98+ /**
99+ * Returns the base <code>g</code>.
100+ *
101+ * @return the base <code>g</code>.
102+ */
103+ public BigInteger getG() {
104+ return this.g;
105+ }
106+}
java/pkg/java/security/spec/ECField.class+0−0

Binary file not shown.

java/pkg/java/security/spec/ECField.java+49−0
@@ -0,0 +1,49 @@
1+/*
2+ * Copyright (c) 2003, 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+package java.security.spec;
26+
27+import java.math.BigInteger;
28+import java.util.Arrays;
29+
30+/**
31+ * This interface represents an elliptic curve (EC) finite field.
32+ * All specialized EC fields must implements this interface.
33+ *
34+ * @see ECFieldFp
35+ * @see ECFieldF2m
36+ *
37+ * @author Valerie Peng
38+ *
39+ * @since 1.5
40+ */
41+public interface ECField {
42+ /**
43+ * Returns the field size in bits. Note: For prime finite
44+ * field ECFieldFp, size of prime p in bits is returned.
45+ * For characteristic 2 finite field ECFieldF2m, m is returned.
46+ * @return the field size in bits.
47+ */
48+ int getFieldSize();
49+}
java/pkg/java/security/spec/ECFieldF2m.class+0−0

Binary file not shown.

java/pkg/java/security/spec/ECFieldF2m.java+241−0
@@ -0,0 +1,241 @@
1+/*
2+ * Copyright (c) 2003, 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+package java.security.spec;
26+
27+import java.math.BigInteger;
28+import java.util.Arrays;
29+
30+/**
31+ * This immutable class defines an elliptic curve (EC)
32+ * characteristic 2 finite field.
33+ *
34+ * @see ECField
35+ *
36+ * @author Valerie Peng
37+ *
38+ * @since 1.5
39+ */
40+public class ECFieldF2m implements ECField {
41+
42+ private int m;
43+ private int[] ks;
44+ private BigInteger rp;
45+
46+ /**
47+ * Creates an elliptic curve characteristic 2 finite
48+ * field which has 2^<code>m</code> elements with normal basis.
49+ * @param m with 2^<code>m</code> being the number of elements.
50+ * @exception IllegalArgumentException if <code>m</code>
51+ * is not positive.
52+ */
53+ public ECFieldF2m(int m) {
54+ if (m <= 0) {
55+ throw new IllegalArgumentException("m is not positive");
56+ }
57+ this.m = m;
58+ this.ks = null;
59+ this.rp = null;
60+ }
61+
62+ /**
63+ * Creates an elliptic curve characteristic 2 finite
64+ * field which has 2^<code>m</code> elements with
65+ * polynomial basis.
66+ * The reduction polynomial for this field is based
67+ * on <code>rp</code> whose i-th bit correspondes to
68+ * the i-th coefficient of the reduction polynomial.<p>
69+ * Note: A valid reduction polynomial is either a
70+ * trinomial (X^<code>m</code> + X^<code>k</code> + 1
71+ * with <code>m</code> > <code>k</code> >= 1) or a
72+ * pentanomial (X^<code>m</code> + X^<code>k3</code>
73+ * + X^<code>k2</code> + X^<code>k1</code> + 1 with
74+ * <code>m</code> > <code>k3</code> > <code>k2</code>
75+ * > <code>k1</code> >= 1).
76+ * @param m with 2^<code>m</code> being the number of elements.
77+ * @param rp the BigInteger whose i-th bit corresponds to
78+ * the i-th coefficient of the reduction polynomial.
79+ * @exception NullPointerException if <code>rp</code> is null.
80+ * @exception IllegalArgumentException if <code>m</code>
81+ * is not positive, or <code>rp</code> does not represent
82+ * a valid reduction polynomial.
83+ */
84+ public ECFieldF2m(int m, BigInteger rp) {
85+ // check m and rp
86+ this.m = m;
87+ this.rp = rp;
88+ if (m <= 0) {
89+ throw new IllegalArgumentException("m is not positive");
90+ }
91+ int bitCount = this.rp.bitCount();
92+ if (!this.rp.testBit(0) || !this.rp.testBit(m) ||
93+ ((bitCount != 3) && (bitCount != 5))) {
94+ throw new IllegalArgumentException
95+ ("rp does not represent a valid reduction polynomial");
96+ }
97+ // convert rp into ks
98+ BigInteger temp = this.rp.clearBit(0).clearBit(m);
99+ this.ks = new int[bitCount-2];
100+ for (int i = this.ks.length-1; i >= 0; i--) {
101+ int index = temp.getLowestSetBit();
102+ this.ks[i] = index;
103+ temp = temp.clearBit(index);
104+ }
105+ }
106+
107+ /**
108+ * Creates an elliptic curve characteristic 2 finite
109+ * field which has 2^<code>m</code> elements with
110+ * polynomial basis. The reduction polynomial for this
111+ * field is based on <code>ks</code> whose content
112+ * contains the order of the middle term(s) of the
113+ * reduction polynomial.
114+ * Note: A valid reduction polynomial is either a
115+ * trinomial (X^<code>m</code> + X^<code>k</code> + 1
116+ * with <code>m</code> > <code>k</code> >= 1) or a
117+ * pentanomial (X^<code>m</code> + X^<code>k3</code>
118+ * + X^<code>k2</code> + X^<code>k1</code> + 1 with
119+ * <code>m</code> > <code>k3</code> > <code>k2</code>
120+ * > <code>k1</code> >= 1), so <code>ks</code> should
121+ * have length 1 or 3.
122+ * @param m with 2^<code>m</code> being the number of elements.
123+ * @param ks the order of the middle term(s) of the
124+ * reduction polynomial. Contents of this array are copied
125+ * to protect against subsequent modification.
126+ * @exception NullPointerException if <code>ks</code> is null.
127+ * @exception IllegalArgumentException if<code>m</code>
128+ * is not positive, or the length of <code>ks</code>
129+ * is neither 1 nor 3, or values in <code>ks</code>
130+ * are not between <code>m</code>-1 and 1 (inclusive)
131+ * and in descending order.
132+ */
133+ public ECFieldF2m(int m, int[] ks) {
134+ // check m and ks
135+ this.m = m;
136+ this.ks = ks.clone();
137+ if (m <= 0) {
138+ throw new IllegalArgumentException("m is not positive");
139+ }
140+ if ((this.ks.length != 1) && (this.ks.length != 3)) {
141+ throw new IllegalArgumentException
142+ ("length of ks is neither 1 nor 3");
143+ }
144+ for (int i = 0; i < this.ks.length; i++) {
145+ if ((this.ks[i] < 1) || (this.ks[i] > m-1)) {
146+ throw new IllegalArgumentException
147+ ("ks["+ i + "] is out of range");
148+ }
149+ if ((i != 0) && (this.ks[i] >= this.ks[i-1])) {
150+ throw new IllegalArgumentException
151+ ("values in ks are not in descending order");
152+ }
153+ }
154+ // convert ks into rp
155+ this.rp = BigInteger.ONE;
156+ this.rp = rp.setBit(m);
157+ for (int j = 0; j < this.ks.length; j++) {
158+ rp = rp.setBit(this.ks[j]);
159+ }
160+ }
161+
162+ /**
163+ * Returns the field size in bits which is <code>m</code>
164+ * for this characteristic 2 finite field.
165+ * @return the field size in bits.
166+ */
167+ public int getFieldSize() {
168+ return m;
169+ }
170+
171+ /**
172+ * Returns the value <code>m</code> of this characteristic
173+ * 2 finite field.
174+ * @return <code>m</code> with 2^<code>m</code> being the
175+ * number of elements.
176+ */
177+ public int getM() {
178+ return m;
179+ }
180+
181+ /**
182+ * Returns a BigInteger whose i-th bit corresponds to the
183+ * i-th coefficient of the reduction polynomial for polynomial
184+ * basis or null for normal basis.
185+ * @return a BigInteger whose i-th bit corresponds to the
186+ * i-th coefficient of the reduction polynomial for polynomial
187+ * basis or null for normal basis.
188+ */
189+ public BigInteger getReductionPolynomial() {
190+ return rp;
191+ }
192+
193+ /**
194+ * Returns an integer array which contains the order of the
195+ * middle term(s) of the reduction polynomial for polynomial
196+ * basis or null for normal basis.
197+ * @return an integer array which contains the order of the
198+ * middle term(s) of the reduction polynomial for polynomial
199+ * basis or null for normal basis. A new array is returned
200+ * each time this method is called.
201+ */
202+ public int[] getMidTermsOfReductionPolynomial() {
203+ if (ks == null) {
204+ return null;
205+ } else {
206+ return ks.clone();
207+ }
208+ }
209+
210+ /**
211+ * Compares this finite field for equality with the
212+ * specified object.
213+ * @param obj the object to be compared.
214+ * @return true if <code>obj</code> is an instance
215+ * of ECFieldF2m and both <code>m</code> and the reduction
216+ * polynomial match, false otherwise.
217+ */
218+ public boolean equals(Object obj) {
219+ if (this == obj) return true;
220+ if (obj instanceof ECFieldF2m) {
221+ // no need to compare rp here since ks and rp
222+ // should be equivalent
223+ return ((m == ((ECFieldF2m)obj).m) &&
224+ (Arrays.equals(ks, ((ECFieldF2m) obj).ks)));
225+ }
226+ return false;
227+ }
228+
229+ /**
230+ * Returns a hash code value for this characteristic 2
231+ * finite field.
232+ * @return a hash code value.
233+ */
234+ public int hashCode() {
235+ int value = m << 5;
236+ value += (rp==null? 0:rp.hashCode());
237+ // no need to involve ks here since ks and rp
238+ // should be equivalent.
239+ return value;
240+ }
241+}
java/pkg/java/security/spec/ECFieldFp.class+0−0

Binary file not shown.

java/pkg/java/security/spec/ECFieldFp.java+98−0
@@ -0,0 +1,98 @@
1+/*
2+ * Copyright (c) 2003, 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+package java.security.spec;
26+
27+import java.math.BigInteger;
28+import java.util.Arrays;
29+
30+/**
31+ * This immutable class defines an elliptic curve (EC) prime
32+ * finite field.
33+ *
34+ * @see ECField
35+ *
36+ * @author Valerie Peng
37+ *
38+ * @since 1.5
39+ */
40+public class ECFieldFp implements ECField {
41+
42+ private BigInteger p;
43+
44+ /**
45+ * Creates an elliptic curve prime finite field
46+ * with the specified prime <code>p</code>.
47+ * @param p the prime.
48+ * @exception NullPointerException if <code>p</code> is null.
49+ * @exception IllegalArgumentException if <code>p</code>
50+ * is not positive.
51+ */
52+ public ECFieldFp(BigInteger p) {
53+ if (p.signum() != 1) {
54+ throw new IllegalArgumentException("p is not positive");
55+ }
56+ this.p = p;
57+ }
58+
59+ /**
60+ * Returns the field size in bits which is size of prime p
61+ * for this prime finite field.
62+ * @return the field size in bits.
63+ */
64+ public int getFieldSize() {
65+ return p.bitLength();
66+ };
67+
68+ /**
69+ * Returns the prime <code>p</code> of this prime finite field.
70+ * @return the prime.
71+ */
72+ public BigInteger getP() {
73+ return p;
74+ }
75+
76+ /**
77+ * Compares this prime finite field for equality with the
78+ * specified object.
79+ * @param obj the object to be compared.
80+ * @return true if <code>obj</code> is an instance
81+ * of ECFieldFp and the prime value match, false otherwise.
82+ */
83+ public boolean equals(Object obj) {
84+ if (this == obj) return true;
85+ if (obj instanceof ECFieldFp) {
86+ return (p.equals(((ECFieldFp)obj).p));
87+ }
88+ return false;
89+ }
90+
91+ /**
92+ * Returns a hash code value for this prime finite field.
93+ * @return a hash code value.
94+ */
95+ public int hashCode() {
96+ return p.hashCode();
97+ }
98+}
java/pkg/java/security/spec/ECGenParameterSpec.class+0−0

Binary file not shown.

java/pkg/java/security/spec/ECGenParameterSpec.java+68−0
@@ -0,0 +1,68 @@
1+/*
2+ * Copyright (c) 2003, 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+package java.security.spec;
26+
27+/**
28+ * This immutable class specifies the set of parameters used for
29+ * generating elliptic curve (EC) domain parameters.
30+ *
31+ * @see AlgorithmParameterSpec
32+ *
33+ * @author Valerie Peng
34+ *
35+ * @since 1.5
36+ */
37+public class ECGenParameterSpec implements AlgorithmParameterSpec {
38+
39+ private String name;
40+
41+ /**
42+ * Creates a parameter specification for EC parameter
43+ * generation using a standard (or predefined) name
44+ * <code>stdName</code> in order to generate the corresponding
45+ * (precomputed) elliptic curve domain parameters. For the
46+ * list of supported names, please consult the documentation
47+ * of provider whose implementation will be used.
48+ * @param stdName the standard name of the to-be-generated EC
49+ * domain parameters.
50+ * @exception NullPointerException if <code>stdName</code>
51+ * is null.
52+ */
53+ public ECGenParameterSpec(String stdName) {
54+ if (stdName == null) {
55+ throw new NullPointerException("stdName is null");
56+ }
57+ this.name = stdName;
58+ }
59+
60+ /**
61+ * Returns the standard or predefined name of the
62+ * to-be-generated EC domain parameters.
63+ * @return the standard or predefined name.
64+ */
65+ public String getName() {
66+ return name;
67+ }
68+}
java/pkg/java/security/spec/ECParameterSpec.class+0−0

Binary file not shown.

java/pkg/java/security/spec/ECParameterSpec.java+113−0
@@ -0,0 +1,113 @@
1+/*
2+ * Copyright (c) 2003, 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+package java.security.spec;
26+
27+import java.math.BigInteger;
28+
29+/**
30+ * This immutable class specifies the set of domain parameters
31+ * used with elliptic curve cryptography (ECC).
32+ *
33+ * @see AlgorithmParameterSpec
34+ *
35+ * @author Valerie Peng
36+ *
37+ * @since 1.5
38+ */
39+public class ECParameterSpec implements AlgorithmParameterSpec {
40+
41+ private final EllipticCurve curve;
42+ private final ECPoint g;
43+ private final BigInteger n;
44+ private final int h;
45+
46+ /**
47+ * Creates elliptic curve domain parameters based on the
48+ * specified values.
49+ * @param curve the elliptic curve which this parameter
50+ * defines.
51+ * @param g the generator which is also known as the base point.
52+ * @param n the order of the generator <code>g</code>.
53+ * @param h the cofactor.
54+ * @exception NullPointerException if <code>curve</code>,
55+ * <code>g</code>, or <code>n</code> is null.
56+ * @exception IllegalArgumentException if <code>n</code>
57+ * or <code>h</code> is not positive.
58+ */
59+ public ECParameterSpec(EllipticCurve curve, ECPoint g,
60+ BigInteger n, int h) {
61+ if (curve == null) {
62+ throw new NullPointerException("curve is null");
63+ }
64+ if (g == null) {
65+ throw new NullPointerException("g is null");
66+ }
67+ if (n == null) {
68+ throw new NullPointerException("n is null");
69+ }
70+ if (n.signum() != 1) {
71+ throw new IllegalArgumentException("n is not positive");
72+ }
73+ if (h <= 0) {
74+ throw new IllegalArgumentException("h is not positive");
75+ }
76+ this.curve = curve;
77+ this.g = g;
78+ this.n = n;
79+ this.h = h;
80+ }
81+
82+ /**
83+ * Returns the elliptic curve that this parameter defines.
84+ * @return the elliptic curve that this parameter defines.
85+ */
86+ public EllipticCurve getCurve() {
87+ return curve;
88+ }
89+
90+ /**
91+ * Returns the generator which is also known as the base point.
92+ * @return the generator which is also known as the base point.
93+ */
94+ public ECPoint getGenerator() {
95+ return g;
96+ }
97+
98+ /**
99+ * Returns the order of the generator.
100+ * @return the order of the generator.
101+ */
102+ public BigInteger getOrder() {
103+ return n;
104+ }
105+
106+ /**
107+ * Returns the cofactor.
108+ * @return the cofactor.
109+ */
110+ public int getCofactor() {
111+ return h;
112+ }
113+}
java/pkg/java/security/spec/ECPoint.class+0−0

Binary file not shown.

java/pkg/java/security/spec/ECPoint.java+114−0
@@ -0,0 +1,114 @@
1+/*
2+ * Copyright (c) 2003, 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+package java.security.spec;
26+
27+import java.math.BigInteger;
28+
29+/**
30+ * This immutable class represents a point on an elliptic curve (EC)
31+ * in affine coordinates. Other coordinate systems can
32+ * extend this class to represent this point in other
33+ * coordinates.
34+ *
35+ * @author Valerie Peng
36+ *
37+ * @since 1.5
38+ */
39+public class ECPoint {
40+
41+ private final BigInteger x;
42+ private final BigInteger y;
43+
44+ /**
45+ * This defines the point at infinity.
46+ */
47+ public static final ECPoint POINT_INFINITY = new ECPoint();
48+
49+ // private constructor for constructing point at infinity
50+ private ECPoint() {
51+ this.x = null;
52+ this.y = null;
53+ }
54+
55+ /**
56+ * Creates an ECPoint from the specified affine x-coordinate
57+ * <code>x</code> and affine y-coordinate <code>y</code>.
58+ * @param x the affine x-coordinate.
59+ * @param y the affine y-coordinate.
60+ * @exception NullPointerException if <code>x</code> or
61+ * <code>y</code> is null.
62+ */
63+ public ECPoint(BigInteger x, BigInteger y) {
64+ if ((x==null) || (y==null)) {
65+ throw new NullPointerException("affine coordinate x or y is null");
66+ }
67+ this.x = x;
68+ this.y = y;
69+ }
70+
71+ /**
72+ * Returns the affine x-coordinate <code>x</code>.
73+ * Note: POINT_INFINITY has a null affine x-coordinate.
74+ * @return the affine x-coordinate.
75+ */
76+ public BigInteger getAffineX() {
77+ return x;
78+ }
79+
80+ /**
81+ * Returns the affine y-coordinate <code>y</code>.
82+ * Note: POINT_INFINITY has a null affine y-coordinate.
83+ * @return the affine y-coordinate.
84+ */
85+ public BigInteger getAffineY() {
86+ return y;
87+ }
88+
89+ /**
90+ * Compares this elliptic curve point for equality with
91+ * the specified object.
92+ * @param obj the object to be compared.
93+ * @return true if <code>obj</code> is an instance of
94+ * ECPoint and the affine coordinates match, false otherwise.
95+ */
96+ public boolean equals(Object obj) {
97+ if (this == obj) return true;
98+ if (this == POINT_INFINITY) return false;
99+ if (obj instanceof ECPoint) {
100+ return ((x.equals(((ECPoint)obj).x)) &&
101+ (y.equals(((ECPoint)obj).y)));
102+ }
103+ return false;
104+ }
105+
106+ /**
107+ * Returns a hash code value for this elliptic curve point.
108+ * @return a hash code value.
109+ */
110+ public int hashCode() {
111+ if (this == POINT_INFINITY) return 0;
112+ return x.hashCode() << 5 + y.hashCode();
113+ }
114+}
java/pkg/java/security/spec/ECPrivateKeySpec.class+0−0

Binary file not shown.

java/pkg/java/security/spec/ECPrivateKeySpec.java+81−0
@@ -0,0 +1,81 @@
1+/*
2+ * Copyright (c) 2003, 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+package java.security.spec;
26+
27+import java.math.BigInteger;
28+
29+/**
30+ * This immutable class specifies an elliptic curve private key with
31+ * its associated parameters.
32+ *
33+ * @see KeySpec
34+ * @see ECParameterSpec
35+ *
36+ * @author Valerie Peng
37+ *
38+ * @since 1.5
39+ */
40+public class ECPrivateKeySpec implements KeySpec {
41+
42+ private BigInteger s;
43+ private ECParameterSpec params;
44+
45+ /**
46+ * Creates a new ECPrivateKeySpec with the specified
47+ * parameter values.
48+ * @param s the private value.
49+ * @param params the associated elliptic curve domain
50+ * parameters.
51+ * @exception NullPointerException if <code>s</code>
52+ * or <code>params</code> is null.
53+ */
54+ public ECPrivateKeySpec(BigInteger s, ECParameterSpec params) {
55+ if (s == null) {
56+ throw new NullPointerException("s is null");
57+ }
58+ if (params == null) {
59+ throw new NullPointerException("params is null");
60+ }
61+ this.s = s;
62+ this.params = params;
63+ }
64+
65+ /**
66+ * Returns the private value S.
67+ * @return the private value S.
68+ */
69+ public BigInteger getS() {
70+ return s;
71+ }
72+
73+ /**
74+ * Returns the associated elliptic curve domain
75+ * parameters.
76+ * @return the EC domain parameters.
77+ */
78+ public ECParameterSpec getParams() {
79+ return params;
80+ }
81+}
java/pkg/java/security/spec/ECPublicKeySpec.class+0−0

Binary file not shown.

java/pkg/java/security/spec/ECPublicKeySpec.java+85−0
@@ -0,0 +1,85 @@
1+/*
2+ * Copyright (c) 2003, 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+package java.security.spec;
26+
27+/**
28+ * This immutable class specifies an elliptic curve public key with
29+ * its associated parameters.
30+ *
31+ * @see KeySpec
32+ * @see ECPoint
33+ * @see ECParameterSpec
34+ *
35+ * @author Valerie Peng
36+ *
37+ * @since 1.5
38+ */
39+public class ECPublicKeySpec implements KeySpec {
40+
41+ private ECPoint w;
42+ private ECParameterSpec params;
43+
44+ /**
45+ * Creates a new ECPublicKeySpec with the specified
46+ * parameter values.
47+ * @param w the public point.
48+ * @param params the associated elliptic curve domain
49+ * parameters.
50+ * @exception NullPointerException if <code>w</code>
51+ * or <code>params</code> is null.
52+ * @exception IllegalArgumentException if <code>w</code>
53+ * is point at infinity, i.e. ECPoint.POINT_INFINITY
54+ */
55+ public ECPublicKeySpec(ECPoint w, ECParameterSpec params) {
56+ if (w == null) {
57+ throw new NullPointerException("w is null");
58+ }
59+ if (params == null) {
60+ throw new NullPointerException("params is null");
61+ }
62+ if (w == ECPoint.POINT_INFINITY) {
63+ throw new IllegalArgumentException("w is ECPoint.POINT_INFINITY");
64+ }
65+ this.w = w;
66+ this.params = params;
67+ }
68+
69+ /**
70+ * Returns the public point W.
71+ * @return the public point W.
72+ */
73+ public ECPoint getW() {
74+ return w;
75+ }
76+
77+ /**
78+ * Returns the associated elliptic curve domain
79+ * parameters.
80+ * @return the EC domain parameters.
81+ */
82+ public ECParameterSpec getParams() {
83+ return params;
84+ }
85+}
java/pkg/java/security/spec/EllipticCurve.class+0−0

Binary file not shown.

java/pkg/java/security/spec/EllipticCurve.java+196−0
@@ -0,0 +1,196 @@
1+/*
2+ * Copyright (c) 2003, 2011, 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 java.security.spec;
27+
28+import java.math.BigInteger;
29+import java.util.Arrays;
30+
31+/**
32+ * This immutable class holds the necessary values needed to represent
33+ * an elliptic curve.
34+ *
35+ * @see ECField
36+ * @see ECFieldFp
37+ * @see ECFieldF2m
38+ *
39+ * @author Valerie Peng
40+ *
41+ * @since 1.5
42+ */
43+public class EllipticCurve {
44+
45+ private final ECField field;
46+ private final BigInteger a;
47+ private final BigInteger b;
48+ private final byte[] seed;
49+
50+ // Check coefficient c is a valid element in ECField field.
51+ private static void checkValidity(ECField field, BigInteger c,
52+ String cName) {
53+ // can only perform check if field is ECFieldFp or ECFieldF2m.
54+ if (field instanceof ECFieldFp) {
55+ BigInteger p = ((ECFieldFp)field).getP();
56+ if (p.compareTo(c) != 1) {
57+ throw new IllegalArgumentException(cName + " is too large");
58+ } else if (c.signum() < 0) {
59+ throw new IllegalArgumentException(cName + " is negative");
60+ }
61+ } else if (field instanceof ECFieldF2m) {
62+ int m = ((ECFieldF2m)field).getM();
63+ if (c.bitLength() > m) {
64+ throw new IllegalArgumentException(cName + " is too large");
65+ }
66+ }
67+ }
68+
69+ /**
70+ * Creates an elliptic curve with the specified elliptic field
71+ * <code>field</code> and the coefficients <code>a</code> and
72+ * <code>b</code>.
73+ * @param field the finite field that this elliptic curve is over.
74+ * @param a the first coefficient of this elliptic curve.
75+ * @param b the second coefficient of this elliptic curve.
76+ * @exception NullPointerException if <code>field</code>,
77+ * <code>a</code>, or <code>b</code> is null.
78+ * @exception IllegalArgumentException if <code>a</code>
79+ * or <code>b</code> is not null and not in <code>field</code>.
80+ */
81+ public EllipticCurve(ECField field, BigInteger a,
82+ BigInteger b) {
83+ this(field, a, b, null);
84+ }
85+
86+ /**
87+ * Creates an elliptic curve with the specified elliptic field
88+ * <code>field</code>, the coefficients <code>a</code> and
89+ * <code>b</code>, and the <code>seed</code> used for curve generation.
90+ * @param field the finite field that this elliptic curve is over.
91+ * @param a the first coefficient of this elliptic curve.
92+ * @param b the second coefficient of this elliptic curve.
93+ * @param seed the bytes used during curve generation for later
94+ * validation. Contents of this array are copied to protect against
95+ * subsequent modification.
96+ * @exception NullPointerException if <code>field</code>,
97+ * <code>a</code>, or <code>b</code> is null.
98+ * @exception IllegalArgumentException if <code>a</code>
99+ * or <code>b</code> is not null and not in <code>field</code>.
100+ */
101+ public EllipticCurve(ECField field, BigInteger a,
102+ BigInteger b, byte[] seed) {
103+ if (field == null) {
104+ throw new NullPointerException("field is null");
105+ }
106+ if (a == null) {
107+ throw new NullPointerException("first coefficient is null");
108+ }
109+ if (b == null) {
110+ throw new NullPointerException("second coefficient is null");
111+ }
112+ checkValidity(field, a, "first coefficient");
113+ checkValidity(field, b, "second coefficient");
114+ this.field = field;
115+ this.a = a;
116+ this.b = b;
117+ if (seed != null) {
118+ this.seed = seed.clone();
119+ } else {
120+ this.seed = null;
121+ }
122+ }
123+
124+ /**
125+ * Returns the finite field <code>field</code> that this
126+ * elliptic curve is over.
127+ * @return the field <code>field</code> that this curve
128+ * is over.
129+ */
130+ public ECField getField() {
131+ return field;
132+ }
133+
134+ /**
135+ * Returns the first coefficient <code>a</code> of the
136+ * elliptic curve.
137+ * @return the first coefficient <code>a</code>.
138+ */
139+ public BigInteger getA() {
140+ return a;
141+ }
142+
143+ /**
144+ * Returns the second coefficient <code>b</code> of the
145+ * elliptic curve.
146+ * @return the second coefficient <code>b</code>.
147+ */
148+ public BigInteger getB() {
149+ return b;
150+ }
151+
152+ /**
153+ * Returns the seeding bytes <code>seed</code> used
154+ * during curve generation. May be null if not specified.
155+ * @return the seeding bytes <code>seed</code>. A new
156+ * array is returned each time this method is called.
157+ */
158+ public byte[] getSeed() {
159+ if (seed == null) return null;
160+ else return seed.clone();
161+ }
162+
163+ /**
164+ * Compares this elliptic curve for equality with the
165+ * specified object.
166+ * @param obj the object to be compared.
167+ * @return true if <code>obj</code> is an instance of
168+ * EllipticCurve and the field, A, and B match, false otherwise.
169+ */
170+ public boolean equals(Object obj) {
171+ if (this == obj) return true;
172+ if (obj instanceof EllipticCurve) {
173+ EllipticCurve curve = (EllipticCurve) obj;
174+ if ((field.equals(curve.field)) &&
175+ (a.equals(curve.a)) &&
176+ (b.equals(curve.b))) {
177+ return true;
178+ }
179+ }
180+ return false;
181+ }
182+
183+ /**
184+ * Returns a hash code value for this elliptic curve.
185+ * @return a hash code value computed from the hash codes of the field, A,
186+ * and B, as follows:
187+ * <code>
188+ * (field.hashCode() << 6) + (a.hashCode() << 4) + (b.hashCode() << 2)
189+ * </code>
190+ */
191+ public int hashCode() {
192+ return (field.hashCode() << 6 +
193+ (a.hashCode() << 4) +
194+ (b.hashCode() << 2));
195+ }
196+}
java/pkg/java/security/spec/EncodedKeySpec.class+0−0

Binary file not shown.

java/pkg/java/security/spec/EncodedKeySpec.java+85−0
@@ -0,0 +1,85 @@
1+/*
2+ * Copyright (c) 1997, 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 java.security.spec;
27+
28+/**
29+ * This class represents a public or private key in encoded format.
30+ *
31+ * @author Jan Luehe
32+ *
33+ *
34+ * @see java.security.Key
35+ * @see java.security.KeyFactory
36+ * @see KeySpec
37+ * @see X509EncodedKeySpec
38+ * @see PKCS8EncodedKeySpec
39+ *
40+ * @since 1.2
41+ */
42+
43+public abstract class EncodedKeySpec implements KeySpec {
44+
45+ private byte[] encodedKey;
46+
47+ /**
48+ * Creates a new EncodedKeySpec with the given encoded key.
49+ *
50+ * @param encodedKey the encoded key. The contents of the
51+ * array are copied to protect against subsequent modification.
52+ * @exception NullPointerException if <code>encodedKey</code>
53+ * is null.
54+ */
55+ public EncodedKeySpec(byte[] encodedKey) {
56+ this.encodedKey = encodedKey.clone();
57+ }
58+
59+ /**
60+ * Returns the encoded key.
61+ *
62+ * @return the encoded key. Returns a new array each time
63+ * this method is called.
64+ */
65+ public byte[] getEncoded() {
66+ return this.encodedKey.clone();
67+ }
68+
69+ /**
70+ * Returns the name of the encoding format associated with this
71+ * key specification.
72+ *
73+ * <p>If the opaque representation of a key
74+ * (see {@link java.security.Key Key}) can be transformed
75+ * (see {@link java.security.KeyFactory KeyFactory})
76+ * into this key specification (or a subclass of it),
77+ * <code>getFormat</code> called
78+ * on the opaque key returns the same value as the
79+ * <code>getFormat</code> method
80+ * of this key specification.
81+ *
82+ * @return a string representation of the encoding format.
83+ */
84+ public abstract String getFormat();
85+}
java/pkg/java/security/spec/InvalidKeySpecException.class+0−0

Binary file not shown.

java/pkg/java/security/spec/InvalidKeySpecException.java+94−0
@@ -0,0 +1,94 @@
1+/*
2+ * Copyright (c) 1997, 2003, 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 java.security.spec;
27+
28+import java.security.GeneralSecurityException;
29+
30+/**
31+ * This is the exception for invalid key specifications.
32+ *
33+ * @author Jan Luehe
34+ *
35+ *
36+ * @see KeySpec
37+ *
38+ * @since 1.2
39+ */
40+
41+public class InvalidKeySpecException extends GeneralSecurityException {
42+
43+ private static final long serialVersionUID = 3546139293998810778L;
44+
45+ /**
46+ * Constructs an InvalidKeySpecException with no detail message. A
47+ * detail message is a String that describes this particular
48+ * exception.
49+ */
50+ public InvalidKeySpecException() {
51+ super();
52+ }
53+
54+ /**
55+ * Constructs an InvalidKeySpecException with the specified detail
56+ * message. A detail message is a String that describes this
57+ * particular exception.
58+ *
59+ * @param msg the detail message.
60+ */
61+ public InvalidKeySpecException(String msg) {
62+ super(msg);
63+ }
64+
65+ /**
66+ * Creates a <code>InvalidKeySpecException</code> with the specified
67+ * detail message and cause.
68+ *
69+ * @param message the detail message (which is saved for later retrieval
70+ * by the {@link #getMessage()} method).
71+ * @param cause the cause (which is saved for later retrieval by the
72+ * {@link #getCause()} method). (A <tt>null</tt> value is permitted,
73+ * and indicates that the cause is nonexistent or unknown.)
74+ * @since 1.5
75+ */
76+ public InvalidKeySpecException(String message, Throwable cause) {
77+ super(message, cause);
78+ }
79+
80+ /**
81+ * Creates a <code>InvalidKeySpecException</code> with the specified cause
82+ * and a detail message of <tt>(cause==null ? null : cause.toString())</tt>
83+ * (which typically contains the class and detail message of
84+ * <tt>cause</tt>).
85+ *
86+ * @param cause the cause (which is saved for later retrieval by the
87+ * {@link #getCause()} method). (A <tt>null</tt> value is permitted,
88+ * and indicates that the cause is nonexistent or unknown.)
89+ * @since 1.5
90+ */
91+ public InvalidKeySpecException(Throwable cause) {
92+ super(cause);
93+ }
94+}
java/pkg/java/security/spec/InvalidParameterSpecException.class+0−0

Binary file not shown.

java/pkg/java/security/spec/InvalidParameterSpecException.java+66−0
@@ -0,0 +1,66 @@
1+/*
2+ * Copyright (c) 1997, 2003, 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 java.security.spec;
27+
28+import java.security.GeneralSecurityException;
29+
30+/**
31+ * This is the exception for invalid parameter specifications.
32+ *
33+ * @author Jan Luehe
34+ *
35+ *
36+ * @see java.security.AlgorithmParameters
37+ * @see AlgorithmParameterSpec
38+ * @see DSAParameterSpec
39+ *
40+ * @since 1.2
41+ */
42+
43+public class InvalidParameterSpecException extends GeneralSecurityException {
44+
45+ private static final long serialVersionUID = -970468769593399342L;
46+
47+ /**
48+ * Constructs an InvalidParameterSpecException with no detail message. A
49+ * detail message is a String that describes this particular
50+ * exception.
51+ */
52+ public InvalidParameterSpecException() {
53+ super();
54+ }
55+
56+ /**
57+ * Constructs an InvalidParameterSpecException with the specified detail
58+ * message. A detail message is a String that describes this
59+ * particular exception.
60+ *
61+ * @param msg the detail message.
62+ */
63+ public InvalidParameterSpecException(String msg) {
64+ super(msg);
65+ }
66+}
java/pkg/java/security/spec/KeySpec.class+0−0

Binary file not shown.

java/pkg/java/security/spec/KeySpec.java+62−0
@@ -0,0 +1,62 @@
1+/*
2+ * Copyright (c) 1997, 1999, 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 java.security.spec;
27+
28+/**
29+ * A (transparent) specification of the key material
30+ * that constitutes a cryptographic key.
31+ *
32+ * <p>If the key is stored on a hardware device, its
33+ * specification may contain information that helps identify the key on the
34+ * device.
35+ *
36+ * <P> A key may be specified in an algorithm-specific way, or in an
37+ * algorithm-independent encoding format (such as ASN.1).
38+ * For example, a DSA private key may be specified by its components
39+ * <code>x</code>, <code>p</code>, <code>q</code>, and <code>g</code>
40+ * (see {@link DSAPrivateKeySpec}), or it may be
41+ * specified using its DER encoding
42+ * (see {@link PKCS8EncodedKeySpec}).
43+ *
44+ * <P> This interface contains no methods or constants. Its only purpose
45+ * is to group (and provide type safety for) all key specifications.
46+ * All key specifications must implement this interface.
47+ *
48+ * @author Jan Luehe
49+ *
50+ *
51+ * @see java.security.Key
52+ * @see java.security.KeyFactory
53+ * @see EncodedKeySpec
54+ * @see X509EncodedKeySpec
55+ * @see PKCS8EncodedKeySpec
56+ * @see DSAPrivateKeySpec
57+ * @see DSAPublicKeySpec
58+ *
59+ * @since 1.2
60+ */
61+
62+public interface KeySpec { }
java/pkg/java/security/spec/MGF1ParameterSpec.class+0−0

Binary file not shown.

java/pkg/java/security/spec/MGF1ParameterSpec.java+107−0
@@ -0,0 +1,107 @@
1+/*
2+ * Copyright (c) 2003, 2006, 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 java.security.spec;
27+
28+import java.security.spec.AlgorithmParameterSpec;
29+
30+/**
31+ * This class specifies the set of parameters used with mask generation
32+ * function MGF1 in OAEP Padding and RSA-PSS signature scheme, as
33+ * defined in the
34+ * <a href="http://www.ietf.org/rfc/rfc3447.txt">PKCS #1 v2.1</a>
35+ * standard.
36+ *
37+ * <p>Its ASN.1 definition in PKCS#1 standard is described below:
38+ * <pre>
39+ * MGF1Parameters ::= OAEP-PSSDigestAlgorthms
40+ * </pre>
41+ * where
42+ * <pre>
43+ * OAEP-PSSDigestAlgorithms ALGORITHM-IDENTIFIER ::= {
44+ * { OID id-sha1 PARAMETERS NULL }|
45+ * { OID id-sha256 PARAMETERS NULL }|
46+ * { OID id-sha384 PARAMETERS NULL }|
47+ * { OID id-sha512 PARAMETERS NULL },
48+ * ... -- Allows for future expansion --
49+ * }
50+ * </pre>
51+ * @see PSSParameterSpec
52+ * @see javax.crypto.spec.OAEPParameterSpec
53+ *
54+ * @author Valerie Peng
55+ *
56+ * @since 1.5
57+ */
58+public class MGF1ParameterSpec implements AlgorithmParameterSpec {
59+
60+ /**
61+ * The MGF1ParameterSpec which uses "SHA-1" message digest.
62+ */
63+ public static final MGF1ParameterSpec SHA1 =
64+ new MGF1ParameterSpec("SHA-1");
65+ /**
66+ * The MGF1ParameterSpec which uses "SHA-256" message digest.
67+ */
68+ public static final MGF1ParameterSpec SHA256 =
69+ new MGF1ParameterSpec("SHA-256");
70+ /**
71+ * The MGF1ParameterSpec which uses "SHA-384" message digest.
72+ */
73+ public static final MGF1ParameterSpec SHA384 =
74+ new MGF1ParameterSpec("SHA-384");
75+ /**
76+ * The MGF1ParameterSpec which uses SHA-512 message digest.
77+ */
78+ public static final MGF1ParameterSpec SHA512 =
79+ new MGF1ParameterSpec("SHA-512");
80+
81+ private String mdName;
82+
83+ /**
84+ * Constructs a parameter set for mask generation function MGF1
85+ * as defined in the PKCS #1 standard.
86+ *
87+ * @param mdName the algorithm name for the message digest
88+ * used in this mask generation function MGF1.
89+ * @exception NullPointerException if <code>mdName</code> is null.
90+ */
91+ public MGF1ParameterSpec(String mdName) {
92+ if (mdName == null) {
93+ throw new NullPointerException("digest algorithm is null");
94+ }
95+ this.mdName = mdName;
96+ }
97+
98+ /**
99+ * Returns the algorithm name of the message digest used by the mask
100+ * generation function.
101+ *
102+ * @return the algorithm name of the message digest.
103+ */
104+ public String getDigestAlgorithm() {
105+ return mdName;
106+ }
107+}
java/pkg/java/security/spec/PKCS8EncodedKeySpec.class+0−0

Binary file not shown.

java/pkg/java/security/spec/PKCS8EncodedKeySpec.java+96−0
@@ -0,0 +1,96 @@
1+/*
2+ * Copyright (c) 1997, 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 java.security.spec;
27+
28+/**
29+ * This class represents the ASN.1 encoding of a private key,
30+ * encoded according to the ASN.1 type <code>PrivateKeyInfo</code>.
31+ * The <code>PrivateKeyInfo</code> syntax is defined in the PKCS#8 standard
32+ * as follows:
33+ *
34+ * <pre>
35+ * PrivateKeyInfo ::= SEQUENCE {
36+ * version Version,
37+ * privateKeyAlgorithm PrivateKeyAlgorithmIdentifier,
38+ * privateKey PrivateKey,
39+ * attributes [0] IMPLICIT Attributes OPTIONAL }
40+ *
41+ * Version ::= INTEGER
42+ *
43+ * PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier
44+ *
45+ * PrivateKey ::= OCTET STRING
46+ *
47+ * Attributes ::= SET OF Attribute
48+ * </pre>
49+ *
50+ * @author Jan Luehe
51+ *
52+ *
53+ * @see java.security.Key
54+ * @see java.security.KeyFactory
55+ * @see KeySpec
56+ * @see EncodedKeySpec
57+ * @see X509EncodedKeySpec
58+ *
59+ * @since 1.2
60+ */
61+
62+public class PKCS8EncodedKeySpec extends EncodedKeySpec {
63+
64+ /**
65+ * Creates a new PKCS8EncodedKeySpec with the given encoded key.
66+ *
67+ * @param encodedKey the key, which is assumed to be
68+ * encoded according to the PKCS #8 standard. The contents of
69+ * the array are copied to protect against subsequent modification.
70+ * @exception NullPointerException if <code>encodedKey</code>
71+ * is null.
72+ */
73+ public PKCS8EncodedKeySpec(byte[] encodedKey) {
74+ super(encodedKey);
75+ }
76+
77+ /**
78+ * Returns the key bytes, encoded according to the PKCS #8 standard.
79+ *
80+ * @return the PKCS #8 encoding of the key. Returns a new array
81+ * each time this method is called.
82+ */
83+ public byte[] getEncoded() {
84+ return super.getEncoded();
85+ }
86+
87+ /**
88+ * Returns the name of the encoding format associated with this
89+ * key specification.
90+ *
91+ * @return the string <code>"PKCS#8"</code>.
92+ */
93+ public final String getFormat() {
94+ return "PKCS#8";
95+ }
96+}
java/pkg/java/security/spec/PSSParameterSpec.class+0−0

Binary file not shown.

java/pkg/java/security/spec/PSSParameterSpec.java+211−0
@@ -0,0 +1,211 @@
1+/*
2+ * Copyright (c) 2001, 2006, 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 java.security.spec;
27+
28+import java.math.BigInteger;
29+import java.security.spec.MGF1ParameterSpec;
30+
31+/**
32+ * This class specifies a parameter spec for RSA-PSS signature scheme,
33+ * as defined in the
34+ * <a href="http://www.ietf.org/rfc/rfc3447.txt">PKCS#1 v2.1</a>
35+ * standard.
36+ *
37+ * <p>Its ASN.1 definition in PKCS#1 standard is described below:
38+ * <pre>
39+ * RSASSA-PSS-params ::= SEQUENCE {
40+ * hashAlgorithm [0] OAEP-PSSDigestAlgorithms DEFAULT sha1,
41+ * maskGenAlgorithm [1] PKCS1MGFAlgorithms DEFAULT mgf1SHA1,
42+ * saltLength [2] INTEGER DEFAULT 20,
43+ * trailerField [3] INTEGER DEFAULT 1
44+ * }
45+ * </pre>
46+ * where
47+ * <pre>
48+ * OAEP-PSSDigestAlgorithms ALGORITHM-IDENTIFIER ::= {
49+ * { OID id-sha1 PARAMETERS NULL }|
50+ * { OID id-sha256 PARAMETERS NULL }|
51+ * { OID id-sha384 PARAMETERS NULL }|
52+ * { OID id-sha512 PARAMETERS NULL },
53+ * ... -- Allows for future expansion --
54+ * }
55+ *
56+ * PKCS1MGFAlgorithms ALGORITHM-IDENTIFIER ::= {
57+ * { OID id-mgf1 PARAMETERS OAEP-PSSDigestAlgorithms },
58+ * ... -- Allows for future expansion --
59+ * }
60+ * </pre>
61+ * <p>Note: the PSSParameterSpec.DEFAULT uses the following:
62+ * message digest -- "SHA-1"
63+ * mask generation function (mgf) -- "MGF1"
64+ * parameters for mgf -- MGF1ParameterSpec.SHA1
65+ * SaltLength -- 20
66+ * TrailerField -- 1
67+ *
68+ * @see MGF1ParameterSpec
69+ * @see AlgorithmParameterSpec
70+ * @see java.security.Signature
71+ *
72+ * @author Valerie Peng
73+ *
74+ *
75+ * @since 1.4
76+ */
77+
78+public class PSSParameterSpec implements AlgorithmParameterSpec {
79+
80+ private String mdName = "SHA-1";
81+ private String mgfName = "MGF1";
82+ private AlgorithmParameterSpec mgfSpec = MGF1ParameterSpec.SHA1;
83+ private int saltLen = 20;
84+ private int trailerField = 1;
85+
86+ /**
87+ * The PSS parameter set with all default values.
88+ * @since 1.5
89+ */
90+ public static final PSSParameterSpec DEFAULT = new PSSParameterSpec();
91+
92+ /**
93+ * Constructs a new <code>PSSParameterSpec</code> as defined in
94+ * the PKCS #1 standard using the default values.
95+ */
96+ private PSSParameterSpec() {
97+ }
98+
99+ /**
100+ * Creates a new <code>PSSParameterSpec</code> as defined in
101+ * the PKCS #1 standard using the specified message digest,
102+ * mask generation function, parameters for mask generation
103+ * function, salt length, and trailer field values.
104+ *
105+ * @param mdName the algorithm name of the hash function.
106+ * @param mgfName the algorithm name of the mask generation
107+ * function.
108+ * @param mgfSpec the parameters for the mask generation
109+ * function. If null is specified, null will be returned by
110+ * getMGFParameters().
111+ * @param saltLen the length of salt.
112+ * @param trailerField the value of the trailer field.
113+ * @exception NullPointerException if <code>mdName</code>,
114+ * or <code>mgfName</code> is null.
115+ * @exception IllegalArgumentException if <code>saltLen</code>
116+ * or <code>trailerField</code> is less than 0.
117+ * @since 1.5
118+ */
119+ public PSSParameterSpec(String mdName, String mgfName,
120+ AlgorithmParameterSpec mgfSpec,
121+ int saltLen, int trailerField) {
122+ if (mdName == null) {
123+ throw new NullPointerException("digest algorithm is null");
124+ }
125+ if (mgfName == null) {
126+ throw new NullPointerException("mask generation function " +
127+ "algorithm is null");
128+ }
129+ if (saltLen < 0) {
130+ throw new IllegalArgumentException("negative saltLen value: " +
131+ saltLen);
132+ }
133+ if (trailerField < 0) {
134+ throw new IllegalArgumentException("negative trailerField: " +
135+ trailerField);
136+ }
137+ this.mdName = mdName;
138+ this.mgfName = mgfName;
139+ this.mgfSpec = mgfSpec;
140+ this.saltLen = saltLen;
141+ this.trailerField = trailerField;
142+ }
143+
144+ /**
145+ * Creates a new <code>PSSParameterSpec</code>
146+ * using the specified salt length and other default values as
147+ * defined in PKCS#1.
148+ *
149+ * @param saltLen the length of salt in bits to be used in PKCS#1
150+ * PSS encoding.
151+ * @exception IllegalArgumentException if <code>saltLen</code> is
152+ * less than 0.
153+ */
154+ public PSSParameterSpec(int saltLen) {
155+ if (saltLen < 0) {
156+ throw new IllegalArgumentException("negative saltLen value: " +
157+ saltLen);
158+ }
159+ this.saltLen = saltLen;
160+ }
161+
162+ /**
163+ * Returns the message digest algorithm name.
164+ *
165+ * @return the message digest algorithm name.
166+ * @since 1.5
167+ */
168+ public String getDigestAlgorithm() {
169+ return mdName;
170+ }
171+
172+ /**
173+ * Returns the mask generation function algorithm name.
174+ *
175+ * @return the mask generation function algorithm name.
176+ *
177+ * @since 1.5
178+ */
179+ public String getMGFAlgorithm() {
180+ return mgfName;
181+ }
182+
183+ /**
184+ * Returns the parameters for the mask generation function.
185+ *
186+ * @return the parameters for the mask generation function.
187+ * @since 1.5
188+ */
189+ public AlgorithmParameterSpec getMGFParameters() {
190+ return mgfSpec;
191+ }
192+
193+ /**
194+ * Returns the salt length in bits.
195+ *
196+ * @return the salt length.
197+ */
198+ public int getSaltLength() {
199+ return saltLen;
200+ }
201+
202+ /**
203+ * Returns the value for the trailer field, i.e. bc in PKCS#1 v2.1.
204+ *
205+ * @return the value for the trailer field, i.e. bc in PKCS#1 v2.1.
206+ * @since 1.5
207+ */
208+ public int getTrailerField() {
209+ return trailerField;
210+ }
211+}
java/pkg/java/security/spec/RSAKeyGenParameterSpec.class+0−0

Binary file not shown.

java/pkg/java/security/spec/RSAKeyGenParameterSpec.java+86−0
@@ -0,0 +1,86 @@
1+/*
2+ * Copyright (c) 1999, 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 java.security.spec;
27+
28+import java.math.BigInteger;
29+import java.security.spec.AlgorithmParameterSpec;
30+
31+/**
32+ * This class specifies the set of parameters used to generate an RSA
33+ * key pair.
34+ *
35+ * @author Jan Luehe
36+ *
37+ * @see java.security.KeyPairGenerator#initialize(java.security.spec.AlgorithmParameterSpec)
38+ *
39+ * @since 1.3
40+ */
41+
42+public class RSAKeyGenParameterSpec implements AlgorithmParameterSpec {
43+
44+ private int keysize;
45+ private BigInteger publicExponent;
46+
47+ /**
48+ * The public-exponent value F0 = 3.
49+ */
50+ public static final BigInteger F0 = BigInteger.valueOf(3);
51+
52+ /**
53+ * The public exponent-value F4 = 65537.
54+ */
55+ public static final BigInteger F4 = BigInteger.valueOf(65537);
56+
57+ /**
58+ * Constructs a new <code>RSAParameterSpec</code> object from the
59+ * given keysize and public-exponent value.
60+ *
61+ * @param keysize the modulus size (specified in number of bits)
62+ * @param publicExponent the public exponent
63+ */
64+ public RSAKeyGenParameterSpec(int keysize, BigInteger publicExponent) {
65+ this.keysize = keysize;
66+ this.publicExponent = publicExponent;
67+ }
68+
69+ /**
70+ * Returns the keysize.
71+ *
72+ * @return the keysize.
73+ */
74+ public int getKeysize() {
75+ return keysize;
76+ }
77+
78+ /**
79+ * Returns the public-exponent value.
80+ *
81+ * @return the public-exponent value.
82+ */
83+ public BigInteger getPublicExponent() {
84+ return publicExponent;
85+ }
86+}
java/pkg/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.class+0−0

Binary file not shown.

java/pkg/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java+212−0
@@ -0,0 +1,212 @@
1+/*
2+ * Copyright (c) 2001, 2003, 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 java.security.spec;
27+
28+import java.math.BigInteger;
29+
30+/**
31+ * This class specifies an RSA multi-prime private key, as defined in the
32+ * PKCS#1 v2.1, using the Chinese Remainder Theorem (CRT) information
33+ * values for efficiency.
34+ *
35+ * @author Valerie Peng
36+ *
37+ *
38+ * @see java.security.Key
39+ * @see java.security.KeyFactory
40+ * @see KeySpec
41+ * @see PKCS8EncodedKeySpec
42+ * @see RSAPrivateKeySpec
43+ * @see RSAPublicKeySpec
44+ * @see RSAOtherPrimeInfo
45+ *
46+ * @since 1.4
47+ */
48+
49+public class RSAMultiPrimePrivateCrtKeySpec extends RSAPrivateKeySpec {
50+
51+ private final BigInteger publicExponent;
52+ private final BigInteger primeP;
53+ private final BigInteger primeQ;
54+ private final BigInteger primeExponentP;
55+ private final BigInteger primeExponentQ;
56+ private final BigInteger crtCoefficient;
57+ private final RSAOtherPrimeInfo otherPrimeInfo[];
58+
59+ /**
60+ * Creates a new <code>RSAMultiPrimePrivateCrtKeySpec</code>
61+ * given the modulus, publicExponent, privateExponent,
62+ * primeP, primeQ, primeExponentP, primeExponentQ,
63+ * crtCoefficient, and otherPrimeInfo as defined in PKCS#1 v2.1.
64+ *
65+ * <p>Note that the contents of <code>otherPrimeInfo</code>
66+ * are copied to protect against subsequent modification when
67+ * constructing this object.
68+ *
69+ * @param modulus the modulus n.
70+ * @param publicExponent the public exponent e.
71+ * @param privateExponent the private exponent d.
72+ * @param primeP the prime factor p of n.
73+ * @param primeQ the prime factor q of n.
74+ * @param primeExponentP this is d mod (p-1).
75+ * @param primeExponentQ this is d mod (q-1).
76+ * @param crtCoefficient the Chinese Remainder Theorem
77+ * coefficient q-1 mod p.
78+ * @param otherPrimeInfo triplets of the rest of primes, null can be
79+ * specified if there are only two prime factors (p and q).
80+ * @exception NullPointerException if any of the parameters, i.e.
81+ * <code>modulus</code>,
82+ * <code>publicExponent</code>, <code>privateExponent</code>,
83+ * <code>primeP</code>, <code>primeQ</code>,
84+ * <code>primeExponentP</code>, <code>primeExponentQ</code>,
85+ * <code>crtCoefficient</code>, is null.
86+ * @exception IllegalArgumentException if an empty, i.e. 0-length,
87+ * <code>otherPrimeInfo</code> is specified.
88+ */
89+ public RSAMultiPrimePrivateCrtKeySpec(BigInteger modulus,
90+ BigInteger publicExponent,
91+ BigInteger privateExponent,
92+ BigInteger primeP,
93+ BigInteger primeQ,
94+ BigInteger primeExponentP,
95+ BigInteger primeExponentQ,
96+ BigInteger crtCoefficient,
97+ RSAOtherPrimeInfo[] otherPrimeInfo) {
98+ super(modulus, privateExponent);
99+ if (modulus == null) {
100+ throw new NullPointerException("the modulus parameter must be " +
101+ "non-null");
102+ }
103+ if (publicExponent == null) {
104+ throw new NullPointerException("the publicExponent parameter " +
105+ "must be non-null");
106+ }
107+ if (privateExponent == null) {
108+ throw new NullPointerException("the privateExponent parameter " +
109+ "must be non-null");
110+ }
111+ if (primeP == null) {
112+ throw new NullPointerException("the primeP parameter " +
113+ "must be non-null");
114+ }
115+ if (primeQ == null) {
116+ throw new NullPointerException("the primeQ parameter " +
117+ "must be non-null");
118+ }
119+ if (primeExponentP == null) {
120+ throw new NullPointerException("the primeExponentP parameter " +
121+ "must be non-null");
122+ }
123+ if (primeExponentQ == null) {
124+ throw new NullPointerException("the primeExponentQ parameter " +
125+ "must be non-null");
126+ }
127+ if (crtCoefficient == null) {
128+ throw new NullPointerException("the crtCoefficient parameter " +
129+ "must be non-null");
130+ }
131+ this.publicExponent = publicExponent;
132+ this.primeP = primeP;
133+ this.primeQ = primeQ;
134+ this.primeExponentP = primeExponentP;
135+ this.primeExponentQ = primeExponentQ;
136+ this.crtCoefficient = crtCoefficient;
137+ if (otherPrimeInfo == null) {
138+ this.otherPrimeInfo = null;
139+ } else if (otherPrimeInfo.length == 0) {
140+ throw new IllegalArgumentException("the otherPrimeInfo " +
141+ "parameter must not be empty");
142+ } else {
143+ this.otherPrimeInfo = otherPrimeInfo.clone();
144+ }
145+ }
146+
147+ /**
148+ * Returns the public exponent.
149+ *
150+ * @return the public exponent.
151+ */
152+ public BigInteger getPublicExponent() {
153+ return this.publicExponent;
154+ }
155+
156+ /**
157+ * Returns the primeP.
158+ *
159+ * @return the primeP.
160+ */
161+ public BigInteger getPrimeP() {
162+ return this.primeP;
163+ }
164+
165+ /**
166+ * Returns the primeQ.
167+ *
168+ * @return the primeQ.
169+ */
170+ public BigInteger getPrimeQ() {
171+ return this.primeQ;
172+ }
173+
174+ /**
175+ * Returns the primeExponentP.
176+ *
177+ * @return the primeExponentP.
178+ */
179+ public BigInteger getPrimeExponentP() {
180+ return this.primeExponentP;
181+ }
182+
183+ /**
184+ * Returns the primeExponentQ.
185+ *
186+ * @return the primeExponentQ.
187+ */
188+ public BigInteger getPrimeExponentQ() {
189+ return this.primeExponentQ;
190+ }
191+
192+ /**
193+ * Returns the crtCoefficient.
194+ *
195+ * @return the crtCoefficient.
196+ */
197+ public BigInteger getCrtCoefficient() {
198+ return this.crtCoefficient;
199+ }
200+
201+ /**
202+ * Returns a copy of the otherPrimeInfo or null if there are
203+ * only two prime factors (p and q).
204+ *
205+ * @return the otherPrimeInfo. Returns a new array each
206+ * time this method is called.
207+ */
208+ public RSAOtherPrimeInfo[] getOtherPrimeInfo() {
209+ if (otherPrimeInfo == null) return null;
210+ return otherPrimeInfo.clone();
211+ }
212+}
java/pkg/java/security/spec/RSAOtherPrimeInfo.class+0−0

Binary file not shown.

java/pkg/java/security/spec/RSAOtherPrimeInfo.java+120−0
@@ -0,0 +1,120 @@
1+/*
2+ * Copyright (c) 2001, 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 java.security.spec;
27+
28+import java.math.BigInteger;
29+
30+/**
31+ * This class represents the triplet (prime, exponent, and coefficient)
32+ * inside RSA's OtherPrimeInfo structure, as defined in the PKCS#1 v2.1.
33+ * The ASN.1 syntax of RSA's OtherPrimeInfo is as follows:
34+ *
35+ * <pre>
36+ * OtherPrimeInfo ::= SEQUENCE {
37+ * prime INTEGER,
38+ * exponent INTEGER,
39+ * coefficient INTEGER
40+ * }
41+ *
42+ * </pre>
43+ *
44+ * @author Valerie Peng
45+ *
46+ *
47+ * @see RSAPrivateCrtKeySpec
48+ * @see java.security.interfaces.RSAMultiPrimePrivateCrtKey
49+ *
50+ * @since 1.4
51+ */
52+
53+public class RSAOtherPrimeInfo {
54+
55+ private BigInteger prime;
56+ private BigInteger primeExponent;
57+ private BigInteger crtCoefficient;
58+
59+
60+ /**
61+ * Creates a new <code>RSAOtherPrimeInfo</code>
62+ * given the prime, primeExponent, and
63+ * crtCoefficient as defined in PKCS#1.
64+ *
65+ * @param prime the prime factor of n.
66+ * @param primeExponent the exponent.
67+ * @param crtCoefficient the Chinese Remainder Theorem
68+ * coefficient.
69+ * @exception NullPointerException if any of the parameters, i.e.
70+ * <code>prime</code>, <code>primeExponent</code>,
71+ * <code>crtCoefficient</code>, is null.
72+ *
73+ */
74+ public RSAOtherPrimeInfo(BigInteger prime,
75+ BigInteger primeExponent,
76+ BigInteger crtCoefficient) {
77+ if (prime == null) {
78+ throw new NullPointerException("the prime parameter must be " +
79+ "non-null");
80+ }
81+ if (primeExponent == null) {
82+ throw new NullPointerException("the primeExponent parameter " +
83+ "must be non-null");
84+ }
85+ if (crtCoefficient == null) {
86+ throw new NullPointerException("the crtCoefficient parameter " +
87+ "must be non-null");
88+ }
89+ this.prime = prime;
90+ this.primeExponent = primeExponent;
91+ this.crtCoefficient = crtCoefficient;
92+ }
93+
94+ /**
95+ * Returns the prime.
96+ *
97+ * @return the prime.
98+ */
99+ public final BigInteger getPrime() {
100+ return this.prime;
101+ }
102+
103+ /**
104+ * Returns the prime's exponent.
105+ *
106+ * @return the primeExponent.
107+ */
108+ public final BigInteger getExponent() {
109+ return this.primeExponent;
110+ }
111+
112+ /**
113+ * Returns the prime's crtCoefficient.
114+ *
115+ * @return the crtCoefficient.
116+ */
117+ public final BigInteger getCrtCoefficient() {
118+ return this.crtCoefficient;
119+ }
120+}
java/pkg/java/security/spec/RSAPrivateCrtKeySpec.class+0−0

Binary file not shown.

java/pkg/java/security/spec/RSAPrivateCrtKeySpec.java+143−0
@@ -0,0 +1,143 @@
1+/*
2+ * Copyright (c) 1998, 2003, 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 java.security.spec;
27+
28+import java.math.BigInteger;
29+
30+/**
31+ * This class specifies an RSA private key, as defined in the PKCS#1
32+ * standard, using the Chinese Remainder Theorem (CRT) information values for
33+ * efficiency.
34+ *
35+ * @author Jan Luehe
36+ *
37+ *
38+ * @see java.security.Key
39+ * @see java.security.KeyFactory
40+ * @see KeySpec
41+ * @see PKCS8EncodedKeySpec
42+ * @see RSAPrivateKeySpec
43+ * @see RSAPublicKeySpec
44+ */
45+
46+public class RSAPrivateCrtKeySpec extends RSAPrivateKeySpec {
47+
48+ private final BigInteger publicExponent;
49+ private final BigInteger primeP;
50+ private final BigInteger primeQ;
51+ private final BigInteger primeExponentP;
52+ private final BigInteger primeExponentQ;
53+ private final BigInteger crtCoefficient;
54+
55+
56+
57+ /**
58+ * Creates a new <code>RSAPrivateCrtKeySpec</code>
59+ * given the modulus, publicExponent, privateExponent,
60+ * primeP, primeQ, primeExponentP, primeExponentQ, and
61+ * crtCoefficient as defined in PKCS#1.
62+ *
63+ * @param modulus the modulus n
64+ * @param publicExponent the public exponent e
65+ * @param privateExponent the private exponent d
66+ * @param primeP the prime factor p of n
67+ * @param primeQ the prime factor q of n
68+ * @param primeExponentP this is d mod (p-1)
69+ * @param primeExponentQ this is d mod (q-1)
70+ * @param crtCoefficient the Chinese Remainder Theorem
71+ * coefficient q-1 mod p
72+ */
73+ public RSAPrivateCrtKeySpec(BigInteger modulus,
74+ BigInteger publicExponent,
75+ BigInteger privateExponent,
76+ BigInteger primeP,
77+ BigInteger primeQ,
78+ BigInteger primeExponentP,
79+ BigInteger primeExponentQ,
80+ BigInteger crtCoefficient) {
81+ super(modulus, privateExponent);
82+ this.publicExponent = publicExponent;
83+ this.primeP = primeP;
84+ this.primeQ = primeQ;
85+ this.primeExponentP = primeExponentP;
86+ this.primeExponentQ = primeExponentQ;
87+ this.crtCoefficient = crtCoefficient;
88+ }
89+
90+ /**
91+ * Returns the public exponent.
92+ *
93+ * @return the public exponent
94+ */
95+ public BigInteger getPublicExponent() {
96+ return this.publicExponent;
97+ }
98+
99+ /**
100+ * Returns the primeP.
101+
102+ * @return the primeP
103+ */
104+ public BigInteger getPrimeP() {
105+ return this.primeP;
106+ }
107+
108+ /**
109+ * Returns the primeQ.
110+ *
111+ * @return the primeQ
112+ */
113+ public BigInteger getPrimeQ() {
114+ return this.primeQ;
115+ }
116+
117+ /**
118+ * Returns the primeExponentP.
119+ *
120+ * @return the primeExponentP
121+ */
122+ public BigInteger getPrimeExponentP() {
123+ return this.primeExponentP;
124+ }
125+
126+ /**
127+ * Returns the primeExponentQ.
128+ *
129+ * @return the primeExponentQ
130+ */
131+ public BigInteger getPrimeExponentQ() {
132+ return this.primeExponentQ;
133+ }
134+
135+ /**
136+ * Returns the crtCoefficient.
137+ *
138+ * @return the crtCoefficient
139+ */
140+ public BigInteger getCrtCoefficient() {
141+ return this.crtCoefficient;
142+ }
143+}
java/pkg/java/security/spec/RSAPrivateKeySpec.class+0−0

Binary file not shown.

java/pkg/java/security/spec/RSAPrivateKeySpec.java+77−0
@@ -0,0 +1,77 @@
1+/*
2+ * Copyright (c) 1998, 2001, 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 java.security.spec;
27+
28+import java.math.BigInteger;
29+
30+/**
31+ * This class specifies an RSA private key.
32+ *
33+ * @author Jan Luehe
34+ *
35+ *
36+ * @see java.security.Key
37+ * @see java.security.KeyFactory
38+ * @see KeySpec
39+ * @see PKCS8EncodedKeySpec
40+ * @see RSAPublicKeySpec
41+ * @see RSAPrivateCrtKeySpec
42+ */
43+
44+public class RSAPrivateKeySpec implements KeySpec {
45+
46+ private BigInteger modulus;
47+ private BigInteger privateExponent;
48+
49+ /**
50+ * Creates a new RSAPrivateKeySpec.
51+ *
52+ * @param modulus the modulus
53+ * @param privateExponent the private exponent
54+ */
55+ public RSAPrivateKeySpec(BigInteger modulus, BigInteger privateExponent) {
56+ this.modulus = modulus;
57+ this.privateExponent = privateExponent;
58+ }
59+
60+ /**
61+ * Returns the modulus.
62+ *
63+ * @return the modulus
64+ */
65+ public BigInteger getModulus() {
66+ return this.modulus;
67+ }
68+
69+ /**
70+ * Returns the private exponent.
71+ *
72+ * @return the private exponent
73+ */
74+ public BigInteger getPrivateExponent() {
75+ return this.privateExponent;
76+ }
77+}
java/pkg/java/security/spec/RSAPublicKeySpec.class+0−0

Binary file not shown.

java/pkg/java/security/spec/RSAPublicKeySpec.java+77−0
@@ -0,0 +1,77 @@
1+/*
2+ * Copyright (c) 1998, 2001, 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 java.security.spec;
27+
28+import java.math.BigInteger;
29+
30+/**
31+ * This class specifies an RSA public key.
32+ *
33+ * @author Jan Luehe
34+ *
35+ *
36+ * @see java.security.Key
37+ * @see java.security.KeyFactory
38+ * @see KeySpec
39+ * @see X509EncodedKeySpec
40+ * @see RSAPrivateKeySpec
41+ * @see RSAPrivateCrtKeySpec
42+ */
43+
44+public class RSAPublicKeySpec implements KeySpec {
45+
46+ private BigInteger modulus;
47+ private BigInteger publicExponent;
48+
49+ /**
50+ * Creates a new RSAPublicKeySpec.
51+ *
52+ * @param modulus the modulus
53+ * @param publicExponent the public exponent
54+ */
55+ public RSAPublicKeySpec(BigInteger modulus, BigInteger publicExponent) {
56+ this.modulus = modulus;
57+ this.publicExponent = publicExponent;
58+ }
59+
60+ /**
61+ * Returns the modulus.
62+ *
63+ * @return the modulus
64+ */
65+ public BigInteger getModulus() {
66+ return this.modulus;
67+ }
68+
69+ /**
70+ * Returns the public exponent.
71+ *
72+ * @return the public exponent
73+ */
74+ public BigInteger getPublicExponent() {
75+ return this.publicExponent;
76+ }
77+}
java/pkg/java/security/spec/X509EncodedKeySpec.class+0−0

Binary file not shown.

java/pkg/java/security/spec/X509EncodedKeySpec.java+86−0
@@ -0,0 +1,86 @@
1+/*
2+ * Copyright (c) 1997, 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 java.security.spec;
27+
28+/**
29+ * This class represents the ASN.1 encoding of a public key,
30+ * encoded according to the ASN.1 type <code>SubjectPublicKeyInfo</code>.
31+ * The <code>SubjectPublicKeyInfo</code> syntax is defined in the X.509
32+ * standard as follows:
33+ *
34+ * <pre>
35+ * SubjectPublicKeyInfo ::= SEQUENCE {
36+ * algorithm AlgorithmIdentifier,
37+ * subjectPublicKey BIT STRING }
38+ * </pre>
39+ *
40+ * @author Jan Luehe
41+ *
42+ *
43+ * @see java.security.Key
44+ * @see java.security.KeyFactory
45+ * @see KeySpec
46+ * @see EncodedKeySpec
47+ * @see PKCS8EncodedKeySpec
48+ *
49+ * @since 1.2
50+ */
51+
52+public class X509EncodedKeySpec extends EncodedKeySpec {
53+
54+ /**
55+ * Creates a new X509EncodedKeySpec with the given encoded key.
56+ *
57+ * @param encodedKey the key, which is assumed to be
58+ * encoded according to the X.509 standard. The contents of the
59+ * array are copied to protect against subsequent modification.
60+ * @exception NullPointerException if <code>encodedKey</code>
61+ * is null.
62+ */
63+ public X509EncodedKeySpec(byte[] encodedKey) {
64+ super(encodedKey);
65+ }
66+
67+ /**
68+ * Returns the key bytes, encoded according to the X.509 standard.
69+ *
70+ * @return the X.509 encoding of the key. Returns a new array
71+ * each time this method is called.
72+ */
73+ public byte[] getEncoded() {
74+ return super.getEncoded();
75+ }
76+
77+ /**
78+ * Returns the name of the encoding format associated with this
79+ * key specification.
80+ *
81+ * @return the string <code>"X.509"</code>.
82+ */
83+ public final String getFormat() {
84+ return "X.509";
85+ }
86+}
java/pkg/java/security/spec/mkfile+34−0
@@ -0,0 +1,34 @@
1+<../../../../../mkconfig
2+
3+TARG=\
4+ AlgorithmParameterSpec.dis\
5+ DSAParameterSpec.dis\
6+ DSAPrivateKeySpec.dis\
7+ DSAPublicKeySpec.dis\
8+ ECField.dis\
9+ ECFieldF2m.dis\
10+ ECFieldFp.dis\
11+ ECGenParameterSpec.dis\
12+ ECParameterSpec.dis\
13+ ECPoint.dis\
14+ ECPrivateKeySpec.dis\
15+ ECPublicKeySpec.dis\
16+ EllipticCurve.dis\
17+ EncodedKeySpec.dis\
18+ InvalidKeySpecException.dis\
19+ InvalidParameterSpecException.dis\
20+ KeySpec.dis\
21+ MGF1ParameterSpec.dis\
22+ PKCS8EncodedKeySpec.dis\
23+ PSSParameterSpec.dis\
24+ RSAKeyGenParameterSpec.dis\
25+ RSAMultiPrimePrivateCrtKeySpec.dis\
26+ RSAOtherPrimeInfo.dis\
27+ RSAPrivateCrtKeySpec.dis\
28+ RSAPrivateKeySpec.dis\
29+ RSAPublicKeySpec.dis\
30+ X509EncodedKeySpec.dis\
31+
32+DISBIN=$ROOT/java/dis/java/java/java/security/spec
33+
34+<$ROOT/mkfiles/mkjava
java/pkg/java/security/spec/package.html+78−0
@@ -0,0 +1,78 @@
1+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
2+<html>
3+<head>
4+<!--
5+Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved.
6+DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
7+
8+This code is free software; you can redistribute it and/or modify it
9+under the terms of the GNU General Public License version 2 only, as
10+published by the Free Software Foundation. Oracle designates this
11+particular file as subject to the "Classpath" exception as provided
12+by Oracle in the LICENSE file that accompanied this code.
13+
14+This code is distributed in the hope that it will be useful, but WITHOUT
15+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
16+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17+version 2 for more details (a copy is included in the LICENSE file that
18+accompanied this code).
19+
20+You should have received a copy of the GNU General Public License version
21+2 along with this work; if not, write to the Free Software Foundation,
22+Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
23+
24+Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
25+or visit www.oracle.com if you need additional information or have any
26+questions.
27+-->
28+
29+</head>
30+<body bgcolor="white">
31+
32+Provides classes and interfaces for key specifications and algorithm
33+parameter specifications.
34+
35+<p>A key specification is a transparent representation of the key material
36+that constitutes a key. A key may be specified in an algorithm-specific
37+way, or in an algorithm-independent encoding format (such as ASN.1).
38+This package contains key specifications for DSA public and private keys,
39+RSA public and private keys, PKCS #8 private keys in DER-encoded format,
40+and X.509 public and private keys in DER-encoded format.
41+
42+<p>An algorithm parameter specification is a transparent representation
43+of the sets of parameters used with an algorithm. This package contains
44+an algorithm parameter specification for parameters used with the
45+DSA algorithm.
46+
47+<h2>Package Specification</h2>
48+
49+<ul>
50+ <li>PKCS #1: RSA Encryption Standard, Version 1.5, November 1993</li>
51+ <li>PKCS #8: Private-Key Information Syntax Standard,
52+ Version 1.2, November 1993</li>
53+ <li>Federal Information Processing Standards Publication (FIPS PUB) 186:
54+ Digital Signature Standard (DSS)</li>
55+</ul>
56+
57+<h2>Related Documentation</h2>
58+
59+For documentation that includes information about algorithm parameter
60+and key specifications, please see:
61+<ul>
62+ <li>
63+ <a href=
64+ "{@docRoot}/../technotes/guides/security/crypto/CryptoSpec.html">
65+ <b>Java<FONT SIZE=-2><SUP>TM</SUP></FONT>
66+ Cryptography Architecture API Specification and Reference
67+ </b></a></li>
68+ <li>
69+ <a href=
70+ "{@docRoot}/../technotes/guides/security/crypto/HowToImplAProvider.html">
71+ <b>How to Implement a Provider for the
72+ Java<FONT SIZE=-2><SUP>TM</SUP></FONT> Cryptography Architecture
73+ </b></a></li>
74+</ul>
75+
76+@since 1.2
77+</body>
78+</html>