package com.iwebpp.crypto.tests;
import java.util.ArrayList;
import com.iwebpp.crypto.NaclCert;
import com.iwebpp.crypto.TweetNaclFast;
import android.util.Log;
import junit.framework.TestCase;
public final class NaclCertTest extends TestCase {
private static final String TAG = "NaclCertTest";
public void testSelfCert() throws Exception {
NaclCert.CAInfo info = new NaclCert.CAInfo();
info.ca = "iwebpp.com";
info.tte = System.currentTimeMillis() + 3600000L*24*365000;
NaclCert.CAInfo ca = NaclCert.generateCA(info);
Log.d(TAG, "\n\ttestSelfCert/ca:"+ca.toString());
// verify self-cert
if (!NaclCert.validate(info.cert)) {
Log.e(TAG, "\n\ttestSelfCert/ca verify failed\n");
} else
Log.d(TAG, "\n\ttestSelfCert/cert verify success\n");
assertTrue (NaclCert.validate(info.cert));
}
public void testCaCert() throws Exception {
NaclCert.CAInfo info = new NaclCert.CAInfo();
info.ca = "iwebpp.com";
info.tte = System.currentTimeMillis() + 3600000L*24*365000;
NaclCert.CAInfo ca = NaclCert.generateCA(info);
if (info.tte != (info.tte&0xffffffffffffL)) {
Log.w(TAG, "tte overflow: "+info.tte);
}
// Generate Nacl Box keypair
TweetNaclFast.Box.KeyPair bkp = TweetNaclFast.Box.keyPair();
// prepare reqdesc
NaclCert.ReqDescSignByCa desc = new NaclCert.ReqDescSignByCa();
desc.version = "1.0";
desc.type = "ca";
desc.tte = System.currentTimeMillis() + 3600000L*24*365;
desc.publickey = bkp.getPublicKey();
// domains
desc.names = new ArrayList<String>();
desc.names.add("51dese.com");
desc.names.add("ruyier.com");
// ips
desc.ips = new ArrayList<String>();
desc.ips.add("127.0.0.1");
desc.ips.add("10.1.1.1");
NaclCert.Cert cert = NaclCert.generate(desc, ca.secretkey, ca.cert);
if (cert!=null)
Log.d(TAG, "\n\ttestCaCert/cert:"+cert.stringify());
else {
Log.d(TAG, "\n\ttestCaCert/cert generate failed");
}
assert cert != null;
// validate cert
if (!NaclCert.validate(cert, ca.cert)) {
Log.e(TAG, "\n\ttestCaCert/cert verify failed\n");
} else
Log.d(TAG, "\n\ttestCaCert/cert verify success\n");
assertTrue (NaclCert.validate(cert, ca.cert));
// expect fail
NaclCert.CAInfo info2 = new NaclCert.CAInfo();
info2.ca = "iwebpp.com";
info2.tte = System.currentTimeMillis() + 3600000L*24*365000;
NaclCert.CAInfo ca2 = NaclCert.generateCA(info2);
Log.d(TAG, "\nCA1.cert:"+ca.cert.toJSON().toString());
Log.d(TAG, "\nCA2.cert:"+ca2.cert.toJSON().toString());
// validate cert
if (NaclCert.validate(cert, ca2.cert)) {
Log.e(TAG, "\n\ttestCaCert/cert verify faked\n");
} else
Log.d(TAG, "\n\ttestCaCert/cert verify success\n");
assertFalse (NaclCert.validate(cert, ca2.cert));
}
}