test.unit.be.fedict.eid.applet.DerTest.java Source code

Java tutorial

Introduction

Here is the source code for test.unit.be.fedict.eid.applet.DerTest.java

Source

/*
 * eID Applet Project.
 * Copyright (C) 2008-2009 FedICT.
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License version
 * 3.0 as published by the Free Software Foundation.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, see 
 * http://www.gnu.org/licenses/.
 */

package test.unit.be.fedict.eid.applet;

import java.security.MessageDigest;

import org.apache.commons.codec.binary.Hex;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.bouncycastle.asn1.DERInteger;
import org.bouncycastle.asn1.DERNull;
import org.bouncycastle.asn1.DERObjectIdentifier;
import org.bouncycastle.asn1.DERSequence;
import org.bouncycastle.asn1.nist.NISTObjectIdentifiers;
import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers;
import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers;
import org.bouncycastle.asn1.util.ASN1Dump;
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
import org.bouncycastle.asn1.x509.DigestInfo;
import org.bouncycastle.asn1.x509.X509ObjectIdentifiers;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.junit.Test;

public class DerTest {

    private static final Log LOG = LogFactory.getLog(DerTest.class);

    @Test
    public void derSequence() throws Exception {
        DERSequence derSequence = new DERSequence();
        byte[] encodedDerSequence = derSequence.getEncoded();
        LOG.debug("DER sequence size: " + encodedDerSequence.length);
        LOG.debug("DER sequence: " + new String(Hex.encodeHex(encodedDerSequence)));
        LOG.debug("ASN.1 DER sequence: " + ASN1Dump.dumpAsString(derSequence));

        DERInteger derInteger = new DERInteger(1234);
        byte[] encodedDerInteger = derInteger.getDEREncoded();
        LOG.debug("DER integer: " + new String(Hex.encodeHex(encodedDerInteger)));
    }

    @Test
    public void digestInfo() throws Exception {
        byte[] message = "hello world".getBytes();
        MessageDigest messageDigest = MessageDigest.getInstance("SHA1");
        byte[] digest = messageDigest.digest(message);
        LOG.debug("Digest: " + new String(Hex.encodeHex(digest)));
        DERObjectIdentifier hashAlgoId = OIWObjectIdentifiers.idSHA1;
        DigestInfo digestInfo = new DigestInfo(new AlgorithmIdentifier(hashAlgoId), digest);
        byte[] encodedDigestInfo = digestInfo.getEncoded();
        String strValue = new String(Hex.encodeHex(encodedDigestInfo));
        LOG.debug("Digest Info: " + strValue.substring(0, strValue.length() - 20 * 2));

        DigestInfo nullParamDigestInfo = new DigestInfo(new AlgorithmIdentifier(hashAlgoId, DERNull.INSTANCE),
                digest);
        String nullStrValue = new String(Hex.encodeHex(nullParamDigestInfo.getEncoded()));
        LOG.debug("Digest Info: " + nullStrValue.substring(0, nullStrValue.length() - 20 * 2));
    }

    @Test
    public void digestInfoPlainText() throws Exception {
        {
            byte[] message = "hello world".getBytes();
            LOG.debug("message: " + new String(Hex.encodeHex(message)));
            DERObjectIdentifier hashAlgoId = new DERObjectIdentifier("2.16.56.1.2.1.3.1");
            DigestInfo digestInfo = new DigestInfo(new AlgorithmIdentifier(hashAlgoId), message);
            byte[] encodedDigestInfo = digestInfo.getEncoded();
            LOG.debug("Digest Info: " + new String(Hex.encodeHex(encodedDigestInfo)));
        }
        {
            byte[] message = "Hello world 2".getBytes();
            LOG.debug("message: " + new String(Hex.encodeHex(message)));
            DERObjectIdentifier hashAlgoId = new DERObjectIdentifier("2.16.56.1.2.1.3.1");
            DigestInfo digestInfo = new DigestInfo(new AlgorithmIdentifier(hashAlgoId), message);
            byte[] encodedDigestInfo = digestInfo.getEncoded();
            LOG.debug("Digest Info: " + new String(Hex.encodeHex(encodedDigestInfo)));
        }

    }

    @Test
    public void digestInfoSha256() throws Exception {
        byte[] message = "hello world".getBytes();
        MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
        byte[] digest = messageDigest.digest(message);
        LOG.debug("Digest: " + new String(Hex.encodeHex(digest)));
        DERObjectIdentifier hashAlgoId = NISTObjectIdentifiers.id_sha256;
        DigestInfo digestInfo = new DigestInfo(new AlgorithmIdentifier(hashAlgoId, DERNull.INSTANCE), digest);
        byte[] encodedDigestInfo = digestInfo.getEncoded();
        LOG.debug("Digest Info: " + new String(Hex.encodeHex(encodedDigestInfo)));
    }

    @Test
    public void digestInfoSha384() throws Exception {
        byte[] message = "hello world".getBytes();
        MessageDigest messageDigest = MessageDigest.getInstance("SHA-384");
        byte[] digest = messageDigest.digest(message);
        LOG.debug("Digest: " + new String(Hex.encodeHex(digest)));
        DERObjectIdentifier hashAlgoId = NISTObjectIdentifiers.id_sha384;
        DigestInfo digestInfo = new DigestInfo(new AlgorithmIdentifier(hashAlgoId, DERNull.INSTANCE), digest);
        byte[] encodedDigestInfo = digestInfo.getEncoded();
        LOG.debug("Digest Info: " + new String(Hex.encodeHex(encodedDigestInfo)));
    }

    @Test
    public void digestInfoSha512() throws Exception {
        byte[] message = "hello world".getBytes();
        MessageDigest messageDigest = MessageDigest.getInstance("SHA-512");
        byte[] digest = messageDigest.digest(message);
        LOG.debug("Digest: " + new String(Hex.encodeHex(digest)));
        DERObjectIdentifier hashAlgoId = NISTObjectIdentifiers.id_sha512;
        DigestInfo digestInfo = new DigestInfo(new AlgorithmIdentifier(hashAlgoId, DERNull.INSTANCE), digest);
        byte[] encodedDigestInfo = digestInfo.getEncoded();
        LOG.debug("Digest Info: " + new String(Hex.encodeHex(encodedDigestInfo)));
    }

    @Test
    public void digestInfoSha224() throws Exception {
        byte[] message = "hello world".getBytes();
        MessageDigest messageDigest = MessageDigest.getInstance("SHA-224", new BouncyCastleProvider());
        byte[] digest = messageDigest.digest(message);
        LOG.debug("Digest: " + new String(Hex.encodeHex(digest)));
        DERObjectIdentifier hashAlgoId = NISTObjectIdentifiers.id_sha224;
        DigestInfo digestInfo = new DigestInfo(new AlgorithmIdentifier(hashAlgoId, DERNull.INSTANCE), digest);
        byte[] encodedDigestInfo = digestInfo.getEncoded();
        LOG.debug("Digest Info: " + new String(Hex.encodeHex(encodedDigestInfo)));
    }

    @Test
    public void digestInfoRipemd160() throws Exception {
        byte[] message = "hello world".getBytes();
        MessageDigest messageDigest = MessageDigest.getInstance("RIPEMD160", new BouncyCastleProvider());
        byte[] digest = messageDigest.digest(message);
        LOG.debug("Digest: " + new String(Hex.encodeHex(digest)));
        DERObjectIdentifier hashAlgoId = X509ObjectIdentifiers.ripemd160;
        DigestInfo digestInfo = new DigestInfo(new AlgorithmIdentifier(hashAlgoId, DERNull.INSTANCE), digest);
        byte[] encodedDigestInfo = digestInfo.getEncoded();
        LOG.debug("Digest Info: " + new String(Hex.encodeHex(encodedDigestInfo)));
    }

    @Test
    public void digestInfoRipemd128() throws Exception {
        byte[] message = "hello world".getBytes();
        MessageDigest messageDigest = MessageDigest.getInstance("RIPEMD128", new BouncyCastleProvider());
        byte[] digest = messageDigest.digest(message);
        LOG.debug("Digest: " + new String(Hex.encodeHex(digest)));
        DERObjectIdentifier hashAlgoId = TeleTrusTObjectIdentifiers.ripemd128;
        DigestInfo digestInfo = new DigestInfo(new AlgorithmIdentifier(hashAlgoId, DERNull.INSTANCE), digest);
        byte[] encodedDigestInfo = digestInfo.getEncoded();
        LOG.debug("Digest Info: " + new String(Hex.encodeHex(encodedDigestInfo)));
    }

    @Test
    public void digestInfoRipemd256() throws Exception {
        byte[] message = "hello world".getBytes();
        MessageDigest messageDigest = MessageDigest.getInstance("RIPEMD256", new BouncyCastleProvider());
        byte[] digest = messageDigest.digest(message);
        LOG.debug("Digest: " + new String(Hex.encodeHex(digest)));
        DERObjectIdentifier hashAlgoId = new DERObjectIdentifier("1.3.36.3.2.3");
        DigestInfo digestInfo = new DigestInfo(new AlgorithmIdentifier(hashAlgoId, DERNull.INSTANCE), digest);
        byte[] encodedDigestInfo = digestInfo.getEncoded();
        LOG.debug("Digest Info: " + new String(Hex.encodeHex(encodedDigestInfo)));
    }

    @Test
    public void bouncycastleHashAlgos() throws Exception {
        byte[] message = "hello world".getBytes();
        MessageDigest messageDigest = MessageDigest.getInstance("RIPEMD160", new BouncyCastleProvider());
        byte[] digest = messageDigest.digest(message);
        LOG.debug("RIPEMD160 size: " + digest.length);

        messageDigest = MessageDigest.getInstance("RIPEMD128", new BouncyCastleProvider());
        digest = messageDigest.digest(message);
        LOG.debug("RIPEMD128 size: " + digest.length);

        messageDigest = MessageDigest.getInstance("RIPEMD256", new BouncyCastleProvider());
        digest = messageDigest.digest(message);
        LOG.debug("RIPEMD256 size: " + digest.length);

        messageDigest = MessageDigest.getInstance("RIPEMD320", new BouncyCastleProvider());
        digest = messageDigest.digest(message);
        LOG.debug("RIPEMD320 size: " + digest.length);

        messageDigest = MessageDigest.getInstance("SHA-224", new BouncyCastleProvider());
        digest = messageDigest.digest(message);
        LOG.debug("SHA-224 size: " + digest.length);
    }

    @Test
    public void testOids() throws Exception {
        LOG.debug("SHA1: " + new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, DERNull.INSTANCE).getObjectId());
    }
}