diff options
Diffstat (limited to 'libjava/classpath/gnu/javax/crypto/key/srp6/SRP6Host.java')
-rw-r--r-- | libjava/classpath/gnu/javax/crypto/key/srp6/SRP6Host.java | 82 |
1 files changed, 15 insertions, 67 deletions
diff --git a/libjava/classpath/gnu/javax/crypto/key/srp6/SRP6Host.java b/libjava/classpath/gnu/javax/crypto/key/srp6/SRP6Host.java index 192e877b7ed..44f99467319 100644 --- a/libjava/classpath/gnu/javax/crypto/key/srp6/SRP6Host.java +++ b/libjava/classpath/gnu/javax/crypto/key/srp6/SRP6Host.java @@ -56,65 +56,41 @@ import java.util.HashMap; import java.util.Map; /** - * <p>The implementation of the Host in the SRP-6 key agreement protocol.</p> - * - * <p>Reference:</p> + * The implementation of the Host in the SRP-6 key agreement protocol. + * <p> + * Reference: * <ol> - * <li><a href="http://srp.stanford.edu/design.html">SRP Protocol Design</a><br> - * Thomas J. Wu.</li> + * <li><a href="http://srp.stanford.edu/design.html">SRP Protocol Design</a><br> + * Thomas J. Wu.</li> * </ol> */ -public class SRP6Host extends SRP6KeyAgreement +public class SRP6Host + extends SRP6KeyAgreement { - - // Constants and variables - // ------------------------------------------------------------------------- - /** The user's ephemeral key pair. */ private KeyPair hostKeyPair; /** The SRP password database. */ private SRPAuthInfoProvider passwordDB; - // Constructor(s) - // ------------------------------------------------------------------------- - // default 0-arguments constructor - // Class methods - // ------------------------------------------------------------------------- - - // Instance methods - // ------------------------------------------------------------------------- - - // implementation of abstract methods in base class ------------------------ - protected void engineInit(final Map attributes) throws KeyAgreementException { rnd = (SecureRandom) attributes.get(SOURCE_OF_RANDOMNESS); N = (BigInteger) attributes.get(SHARED_MODULUS); if (N == null) - { - throw new KeyAgreementException("missing shared modulus"); - } + throw new KeyAgreementException("missing shared modulus"); g = (BigInteger) attributes.get(GENERATOR); if (g == null) - { - throw new KeyAgreementException("missing generator"); - } - + throw new KeyAgreementException("missing generator"); final String md = (String) attributes.get(HASH_FUNCTION); - if (md == null || "".equals(md.trim())) - { - throw new KeyAgreementException("missing hash function"); - } + if (md == null || md.trim().length() == 0) + throw new KeyAgreementException("missing hash function"); srp = SRP.instance(md); - passwordDB = (SRPAuthInfoProvider) attributes.get(HOST_PASSWORD_DB); if (passwordDB == null) - { - throw new KeyAgreementException("missing SRP password database"); - } + throw new KeyAgreementException("missing SRP password database"); } protected OutgoingMessage engineProcessMessage(final IncomingMessage in) @@ -135,14 +111,11 @@ public class SRP6Host extends SRP6KeyAgreement super.engineReset(); } - // own methods ------------------------------------------------------------- - private OutgoingMessage computeSharedSecret(final IncomingMessage in) throws KeyAgreementException { final String I = in.readString(); final BigInteger A = in.readMPI(); - // get s and v for user identified by I // ---------------------------------------------------------------------- final Map credentials; @@ -157,56 +130,31 @@ public class SRP6Host extends SRP6KeyAgreement { throw new KeyAgreementException("computeSharedSecret()", x); } - final BigInteger s = new BigInteger( - 1, - Util.fromBase64((String) credentials.get(SRPRegistry.SALT_FIELD))); + 1,Util.fromBase64((String) credentials.get(SRPRegistry.SALT_FIELD))); final BigInteger v = new BigInteger( - 1, - Util.fromBase64((String) credentials.get(SRPRegistry.USER_VERIFIER_FIELD))); - - // Map configuration = null; - // try { - // String mode = (String) credentials.get(SRPRegistry.CONFIG_NDX_FIELD); - // configuration = passwordDB.getConfiguration(mode); - // } catch (IOException x) { - // throw new KeyAgreementException("computeSharedSecret()", x); - // } - // - // BigInteger N = new BigInteger(1, Util.fromBase64( - // (String) configuration.get(SRPRegistry.SHARED_MODULUS))); - // BigInteger g = new BigInteger(1, Util.fromBase64( - // (String) configuration.get(SRPRegistry.FIELD_GENERATOR))); - // ---------------------------------------------------------------------- - + 1, Util.fromBase64((String) credentials.get(SRPRegistry.USER_VERIFIER_FIELD))); final SRPKeyPairGenerator kpg = new SRPKeyPairGenerator(); final Map attributes = new HashMap(); if (rnd != null) - { - attributes.put(SRPKeyPairGenerator.SOURCE_OF_RANDOMNESS, rnd); - } + attributes.put(SRPKeyPairGenerator.SOURCE_OF_RANDOMNESS, rnd); attributes.put(SRPKeyPairGenerator.SHARED_MODULUS, N); attributes.put(SRPKeyPairGenerator.GENERATOR, g); attributes.put(SRPKeyPairGenerator.USER_VERIFIER, v); kpg.setup(attributes); hostKeyPair = kpg.generate(); - final BigInteger B = ((SRPPublicKey) hostKeyPair.getPublic()).getY(); final BigInteger u = uValue(A, B); // u = H(A | B) - // compute S = (Av^u) ^ b final BigInteger b = ((SRPPrivateKey) hostKeyPair.getPrivate()).getX(); final BigInteger S = A.multiply(v.modPow(u, N)).modPow(b, N); - final byte[] sBytes = Util.trim(S); final IMessageDigest hash = srp.newDigest(); hash.update(sBytes, 0, sBytes.length); K = new BigInteger(1, hash.digest()); - final OutgoingMessage result = new OutgoingMessage(); result.writeMPI(s); result.writeMPI(B); - complete = true; return result; } |