package com.door43.translationstudio; import android.content.Context; import android.test.InstrumentationTestCase; import com.door43.util.signing.Crypto; import com.door43.util.signing.SigningEntity; import com.door43.util.signing.Status; import java.io.InputStream; import java.security.PublicKey; /** * Created by joel on 2/25/2015. */ public class SigningTest extends InstrumentationTestCase { private PublicKey mCA; private SigningEntity mVerifiedSE; private byte[] mData; private SigningEntity mExpiredSE; private SigningEntity mErrorSE; private SigningEntity mFailedSE; private Context mContext; @Override protected void setUp() throws Exception { super.setUp(); mContext = getInstrumentation().getContext(); if(mCA == null) { InputStream caPubKey = mContext.getAssets().open("certs/ca.pub"); mCA = Crypto.loadPublicECDSAKey(caPubKey); InputStream verifiedStream = mContext.getAssets().open("signing/si/verified.pem"); mVerifiedSE = SigningEntity.generateFromIdentity(mCA, verifiedStream); InputStream failedStream = mContext.getAssets().open("signing/si/failed.pem"); mFailedSE = SigningEntity.generateFromIdentity(mCA, failedStream); InputStream errorStream = mContext.getAssets().open("signing/si/error.pem"); mErrorSE = SigningEntity.generateFromIdentity(mCA, errorStream); InputStream expiredStream = mContext.getAssets().open("signing/si/expired.pem"); mExpiredSE = SigningEntity.generateFromIdentity(mCA, expiredStream); InputStream dataStream = mContext.getAssets().open("signing/data.json"); mData = Crypto.readInputStreamToBytes(dataStream); } } public void testLoadPublicECDSAKey() throws Exception { assertNotNull(mCA); } public void testLoadSigningIdentity() throws Exception { assertNotNull(mVerifiedSE); } public void testVerifySigningEntity() throws Exception { assertEquals(Status.VERIFIED, mVerifiedSE.status()); assertEquals(Status.FAILED, mFailedSE.status()); // assertEquals(Status.EXPIRED, mExpiredSE.status()); // TODO: we need to get an expired SI for testing. assertEquals(Status.ERROR, mErrorSE.status()); } public void testVerifyValidSESignatures() throws Exception { // TODO: this test is broken // Status verified = mVerifiedSE.verifyContent(Util.loadSig("tests/signing/sig/verified.sig"), mData); // assertEquals(Status.VERIFIED, verified); Status failed = mVerifiedSE.verifyContent(Util.loadSig(mContext, "signing/sig/failed.sig"), mData); assertEquals(Status.FAILED, failed); Status error = mVerifiedSE.verifyContent(Util.loadSig(mContext, "signing/sig/error.sig"), mData); assertEquals(Status.ERROR, error); // NOTE: signatures don't expire themselves } // public void testVerifyExpiredSESignatures() throws Exception { // Status verified = mExpiredSE.verifyContent(Util.loadSig("tests/signing/sig/verified.sig"), mData); // assertEquals(Status.EXPIRED, verified); // // Status failed = mExpiredSE.verifyContent(Util.loadSig("tests/signing/sig/failed.sig"), mData); // assertEquals(Status.FAILED, failed); // // Status error = mExpiredSE.verifyContent(Util.loadSig("tests/signing/sig/error.sig"), mData); // assertEquals(Status.ERROR, error); // } public void testVerifyFailedSESignatures() throws Exception { Status verified = mFailedSE.verifyContent(Util.loadSig(mContext, "signing/sig/verified.sig"), mData); assertEquals(Status.FAILED, verified); Status failed = mFailedSE.verifyContent(Util.loadSig(mContext, "signing/sig/failed.sig"), mData); assertEquals(Status.FAILED, failed); Status error = mFailedSE.verifyContent(Util.loadSig(mContext, "signing/sig/error.sig"), mData); assertEquals(Status.FAILED, error); } public void testVerifyErrorSESignatures() throws Exception { // TODO: this test is broken // Status verified = mErrorSE.verifyContent(Util.loadSig("tests/signing/sig/verified.sig"), mData); // assertEquals(Status.ERROR, verified); Status failed = mErrorSE.verifyContent(Util.loadSig(mContext, "signing/sig/failed.sig"), mData); assertEquals(Status.FAILED, failed); Status error = mErrorSE.verifyContent(Util.loadSig(mContext, "signing/sig/error.sig"), mData); assertEquals(Status.ERROR, error); } }