package examples.consumer;
import org.verisign.joid.AssociationRequest;
import org.verisign.joid.AssociationResponse;
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.FileOutputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.util.Properties;
/**
* Example on how to associate.
*/
public class Associate
{
public static void main(String[] argv) throws Exception
{
String dest = "http://localhost:8080/joid_examples/server";
new Associate(dest, argv[0]);
}
public Associate(String destination, String fileName)
throws IOException, OpenIdException
{
DiffieHellman dh = DiffieHellman.getDefault();
Crypto crypto = new Crypto();
crypto.setDiffieHellman(dh);
AssociationRequest ar = AssociationRequest.create(crypto);
Response response = Util.send(ar, destination);
System.out.println("Response="+response+"\n");
AssociationResponse asr = (AssociationResponse) response;
Properties props = new Properties();
props.setProperty("handle", asr.getAssociationHandle());
props.setProperty("publicKey",
Crypto.convertToString(asr.getDhServerPublic()));
props.setProperty("encryptedKey",
Crypto.convertToString(asr.getEncryptedMacKey()));
BigInteger privateKey = dh.getPrivateKey();
props.setProperty("privateKey", Crypto.convertToString(privateKey));
props.setProperty("modulus",
Crypto.convertToString(DiffieHellman.DEFAULT_MODULUS));
props.setProperty("_dest", destination);
File f = new File(fileName);
props.store(new FileOutputStream(f), "Association result");
System.out.println("Results written into "+f.getCanonicalPath());
/*
Crypto crypto = new Crypto();
dh = DiffieHellman.recreate(privateKey, p);
crypto.setDiffieHellman(dh);
byte[] clearKey = crypto.decryptSecret(asr.getDhServerPublic(),
asr.getEncryptedMacKey());
System.out.println("Clear key: "+Crypto.convertToString(clearKey));
*/
}
}