package examples.consumer; import org.verisign.joid.AuthenticationRequest; import org.verisign.joid.AuthenticationResponse; import org.verisign.joid.Crypto; import org.verisign.joid.DiffieHellman; import org.verisign.joid.OpenIdException; import org.verisign.joid.Response; import org.verisign.joid.consumer.Util; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.math.BigInteger; import java.security.NoSuchAlgorithmException; import java.util.Map; import java.util.Properties; /** * Example on how to authenticate */ public class Authenticate { private Map map; private Map responseMap; public static void main(String[] argv) throws Exception { String id = "http://alice.example.com"; String returnTo = "http://localhost:8080/joid_examples/echo"; String trustRoot = "http://localhost:8080"; String fileName = argv[0]; new Authenticate(id, returnTo, trustRoot, fileName); } public Authenticate(String identity, String returnTo, String trustRoot, String fileName) throws IOException, OpenIdException, NoSuchAlgorithmException { Properties p = new Properties(); File f = new File(fileName); p.load(new FileInputStream(f)); String handle = p.getProperty("handle"); String dest = p.getProperty("_dest"); AuthenticationRequest ar = AuthenticationRequest.create(identity, returnTo, trustRoot, handle); Response response = Util.send(ar, dest); System.out.println("Response="+response+"\n"); AuthenticationResponse authr = (AuthenticationResponse) response; BigInteger privKey = Crypto.convertToBigIntegerFromString(p.getProperty("privateKey")); BigInteger modulus = Crypto.convertToBigIntegerFromString(p.getProperty("modulus")); BigInteger serverPublic = Crypto.convertToBigIntegerFromString(p.getProperty("publicKey")); byte[] encryptedKey = Crypto.convertToBytes(p.getProperty("encryptedKey")); DiffieHellman dh = DiffieHellman.recreate(privKey, modulus); Crypto crypto = new Crypto(); crypto.setDiffieHellman(dh); byte[] clearKey = crypto.decryptSecret(serverPublic, encryptedKey); String signature = authr.getSignature(); System.out.println("Server's signature: "+signature); String sigList = authr.getSignedList(); String reSigned = authr.sign("HMAC-SHA1", clearKey, sigList); System.out.println("Our signature: "+reSigned); } }