FileDocCategorySizeDatePackage
jotp.javaAPI DocExample3782Sat Nov 25 11:54:30 GMT 2000None

jotp

public class jotp extends Applet

Fields Summary
TextField
otptf
TextField
chaltf
TextField
pwtf
final String
md4label
final String
md5label
final String
version
Constructors Summary
Methods Summary
public booleanaction(java.awt.Event evt, java.lang.Object arg)

	String tmpstr, tmpstr2, seed, passphrase;
	int seq, hashalg;
	otp otpwd;

	if (evt.target instanceof Button) {
	    if (arg.equals(md5label)) {
		hashalg = otp.MD5;
	    } else {
		hashalg = otp.MD4;
	    }

	    /* Split up challenge */
	    tmpstr = chaltf.getText();
	    StringTokenizer st = new StringTokenizer(tmpstr);
	    if (st.countTokens() != 2) {
		otptf.setText("bogus challenge");
		return true;
	    }
	    tmpstr2 = st.nextToken();
	    try {
		seq = (Integer.parseInt(tmpstr2));
	    } catch (NumberFormatException e) {
		otptf.setText("bogus sequence number '" + tmpstr2 + "'");
		return true;
	    }
	    seed = st.nextToken();
	    passphrase = pwtf.getText();
/*	    passphrase = "eat me";*/
            System.out.println("passphrase = " + passphrase);
	    otptf.setText("Okay, thinking...");
	    otpwd = new otp(seq, seed, passphrase, hashalg);
	    otpwd.calc();
	    otptf.setText(otpwd.toString());
	}
	return true;
    
public voidinit()


	setBackground(Color.white);
	setLayout(new GridLayout(6,1));

	Panel panel1 = new Panel();
	add (panel1);
	Font titlefont = new Font("TimesRoman", Font.BOLD, 14);
	panel1.setFont(titlefont);
	panel1.add(new Label(String.valueOf(version) + 
			     ": The Java OTP (aka S/Key) calculator!"));
	Panel panel2 = new Panel();
	panel2.setLayout(new FlowLayout());
	add (panel2);
	panel2.add(new Label("Challenge (e.g. \"55 latour1\"):"));
        chaltf = new TextField(24);
	panel2.add(chaltf);

	Panel panel3 = new Panel();
	panel3.setLayout(new FlowLayout());
	add(panel3);
	panel3.add(new Label("Secret Password:"));
	pwtf = new TextField(24);
	pwtf.setEchoCharacter('*");
	panel3.add(pwtf);

	Panel panel4 = new Panel();
	panel4.setLayout(new FlowLayout());
	add(panel4);

	panel4.add (new Button(String.valueOf(md4label)));
	panel4.add (new Button(String.valueOf(md5label)));

	Panel panel6 = new Panel();
	panel6.setLayout(new FlowLayout());
	add(panel6);
	panel6.add(new Label("One-Time Password:", Label.LEFT));
	otptf = new TextField(40);
	panel6.add(otptf);

	Panel panel7 = new Panel();
	add(panel7);
	panel7.add(new Label("jotp by Harry Mantakos, " + 
			     "http://www.cs.umd.edu/~harry/jotp"));
    
public static voidmain(java.lang.String[] argv)


    /* Just takes challenge info and passphrase info on the 
     * command line (ick) and spits out the resulting otp "words".
     *
     * Mainly for testing.
     */
         
	String seed, passphrase;
	int seq;
	otp otpwd;
	int hashalg;
	String hashtype;

	if ((argv.length < 3) || (argv.length > 4)) {
	    System.err.println("usage: jotp sequence seed passphrase" + 
			       "[md4|md5]");
	    return;
	}
	seq = new Integer(argv[0]).intValue();
	seed = new String(argv[1]);
	passphrase = new String(argv[2]);
	if ((argv.length == 3) || argv[3].equals("4") ||
	    argv[3].equals("md4") || argv[3].equals("MD4")) {
	    hashtype = "md4";
	    hashalg = otp.MD4;
	} else if (argv[3].equals("5") || argv[3].equals("md5") ||
		   argv[3].equals("MD5")) {
	    hashtype = "md5";
	    hashalg = otp.MD5;
	} else {
	    System.err.println("usage: jotp sequence seed passphrase " +
			       "[4|md4|5|md5]");
	    return;
	}

	otpwd = new otp(seq, seed, passphrase, hashalg);
	System.out.println("Using " + hashtype + ". Thinking...");
	otpwd.calc();
	System.out.println(otpwd);