summaryrefslogtreecommitdiff
path: root/gnu/java/security/key/dss/DSSKeyPairGenerator.java
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/java/security/key/dss/DSSKeyPairGenerator.java')
-rw-r--r--gnu/java/security/key/dss/DSSKeyPairGenerator.java23
1 files changed, 21 insertions, 2 deletions
diff --git a/gnu/java/security/key/dss/DSSKeyPairGenerator.java b/gnu/java/security/key/dss/DSSKeyPairGenerator.java
index 16af5e048..23dd12796 100644
--- a/gnu/java/security/key/dss/DSSKeyPairGenerator.java
+++ b/gnu/java/security/key/dss/DSSKeyPairGenerator.java
@@ -151,9 +151,19 @@ public class DSSKeyPairGenerator implements IKeyPairGenerator
*/
public static final String DSS_PARAMETERS = "gnu.crypto.dss.params";
+ /**
+ * Property name of the preferred encoding format to use when externalizing
+ * generated instance of key-pairs from this generator. The property is taken
+ * to be an {@link Integer} that encapsulates an encoding format identifier.
+ */
+ public static final String PREFERRED_ENCODING_FORMAT = "gnu.crypto.dss.encoding";
+
/** Default value for the modulus length. */
private static final int DEFAULT_MODULUS_LENGTH = 1024;
+ /** Default encoding format to use when none was specified. */
+ private static final int DEFAULT_ENCODING_FORMAT = Registry.RAW_ENCODING_ID;
+
/** Initial SHS context. */
private static final int[] T_SHS = new int[] { 0x67452301, 0xEFCDAB89,
0x98BADCFE, 0x10325476,
@@ -230,6 +240,9 @@ public class DSSKeyPairGenerator implements IKeyPairGenerator
/** Our default source of randomness. */
private PRNG prng = null;
+ /** Preferred encoding format of generated keys. */
+ private int preferredFormat;
+
// Constructor(s)
// -------------------------------------------------------------------------
@@ -325,6 +338,12 @@ public class DSSKeyPairGenerator implements IKeyPairGenerator
// do we have a SecureRandom, or should we use our own?
rnd = (SecureRandom) attributes.get(SOURCE_OF_RANDOMNESS);
+ // what is the preferred encoding format
+ Integer formatID = (Integer) attributes.get(PREFERRED_ENCODING_FORMAT);
+ preferredFormat = formatID == null
+ ? DEFAULT_ENCODING_FORMAT
+ : formatID.intValue();
+
// set the seed-key
byte[] kb = new byte[20]; // we need 160 bits of randomness
nextRandomBytes(kb);
@@ -356,8 +375,8 @@ public class DSSKeyPairGenerator implements IKeyPairGenerator
BigInteger x = nextX();
BigInteger y = g.modPow(x, p);
- PublicKey pubK = new DSSPublicKey(p, q, g, y);
- PrivateKey secK = new DSSPrivateKey(p, q, g, x);
+ PublicKey pubK = new DSSPublicKey(preferredFormat, p, q, g, y);
+ PrivateKey secK = new DSSPrivateKey(preferredFormat, p, q, g, x);
return new KeyPair(pubK, secK);
}