de.tsenger.animamea.asn1.SecurityInfos.java Source code

Java tutorial

Introduction

Here is the source code for de.tsenger.animamea.asn1.SecurityInfos.java

Source

/**
 *  Copyright 2011, Tobias Senger
 *  
 *  This file is part of animamea.
 *
 *  Animamea is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  Animamea 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 General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License   
 *  along with animamea.  If not, see <http://www.gnu.org/licenses/>.
 */

package de.tsenger.animamea.asn1;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.ASN1Object;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.ASN1Set;

/**
 * 
 * @author Tobias Senger (tobias@t-senger.de)
 */

public class SecurityInfos extends ASN1Object {

    List<TerminalAuthenticationInfo> terminalAuthenticationInfoList = new ArrayList<TerminalAuthenticationInfo>(3);
    List<ChipAuthenticationInfo> chipAuthenticationInfoList = new ArrayList<ChipAuthenticationInfo>(3);
    List<PaceInfo> paceInfoList = new ArrayList<PaceInfo>(3);
    List<PaceDomainParameterInfo> paceDomainParameterInfoList = new ArrayList<PaceDomainParameterInfo>(3);
    List<ChipAuthenticationDomainParameterInfo> chipAuthenticationDomainParameterInfoList = new ArrayList<ChipAuthenticationDomainParameterInfo>(
            3);
    List<CardInfoLocator> cardInfoLocatorList = new ArrayList<CardInfoLocator>(1);
    List<PrivilegedTerminalInfo> privilegedTerminalInfoList = new ArrayList<PrivilegedTerminalInfo>(1);
    List<ChipAuthenticationPublicKeyInfo> chipAuthenticationPublicKeyInfoList = new ArrayList<ChipAuthenticationPublicKeyInfo>(
            3);

    private byte[] encodedData = null;

    public SecurityInfos() {
    }

    /**
     * Decodes the byte array passed as argument. The decoded values are stored
     * in the member variables of this class that represent the components of
     * the corresponding ASN.1 type.
     * 
     * @param encodedData DOCUMENT ME!
     * 
     * @throws IOException DOCUMENT ME!
     */
    public void decode(byte[] encodedData) throws IOException {
        this.encodedData = encodedData;
        ASN1Set securityInfos = (ASN1Set) ASN1Primitive.fromByteArray(encodedData);
        int anzahlObjekte = securityInfos.size();
        ASN1Sequence securityInfo[] = new ASN1Sequence[anzahlObjekte];

        for (int i = 0; i < anzahlObjekte; i++) {
            securityInfo[i] = (ASN1Sequence) securityInfos.getObjectAt(i);
            ASN1ObjectIdentifier oid = (ASN1ObjectIdentifier) securityInfo[i].getObjectAt(0);

            switch (oid.toString().charAt(18)) {
            case '1':
                chipAuthenticationPublicKeyInfoList.add(new ChipAuthenticationPublicKeyInfo(securityInfo[i]));
                break;
            case '2':
                terminalAuthenticationInfoList.add(new TerminalAuthenticationInfo(securityInfo[i]));
                break;
            case '3':
                if (oid.toString().length() == 23)
                    chipAuthenticationInfoList.add(new ChipAuthenticationInfo(securityInfo[i]));
                else
                    chipAuthenticationDomainParameterInfoList
                            .add(new ChipAuthenticationDomainParameterInfo(securityInfo[i]));
                break;
            case '4':
                if (oid.toString().length() == 23)
                    paceInfoList.add(new PaceInfo(securityInfo[i]));
                else
                    paceDomainParameterInfoList.add(new PaceDomainParameterInfo(securityInfo[i]));
                break;
            case '6':
                cardInfoLocatorList.add(new CardInfoLocator(securityInfo[i]));
                break;
            case '8':
                privilegedTerminalInfoList.add(new PrivilegedTerminalInfo(securityInfo[i]));
                break;
            } // SWITCH

        } // IF

    }

    @Override
    public String toString() {
        String summary = null;
        summary = "------------------\nSecurityInfos object contains\n" + terminalAuthenticationInfoList.size()
                + " TerminalAuthenticationInfo objects \n" + chipAuthenticationInfoList.size()
                + " ChipAuthenticationInfo objects \n" + chipAuthenticationDomainParameterInfoList.size()
                + " ChipAuthenticationDomainParameterInfo objects \n" + chipAuthenticationPublicKeyInfoList.size()
                + " ChipAuthenticationPublicKeyInfo objects \n" + paceInfoList.size() + " PaceInfo objects \n"
                + paceDomainParameterInfoList.size() + " PaceDomainParameterInfo objects \n"
                + cardInfoLocatorList.size() + " CardInfoLocator objects \n" + privilegedTerminalInfoList.size()
                + " PrivilegedTerminalInfo objects\n------------------\n";

        for (TerminalAuthenticationInfo item : terminalAuthenticationInfoList) {
            summary = summary + item.toString();
        }
        for (ChipAuthenticationInfo item : chipAuthenticationInfoList) {
            summary = summary + item.toString();
        }
        for (ChipAuthenticationDomainParameterInfo item : chipAuthenticationDomainParameterInfoList) {
            summary = summary + item.toString();
        }
        for (ChipAuthenticationPublicKeyInfo item : chipAuthenticationPublicKeyInfoList) {
            summary = summary + item.toString();
        }
        for (PaceInfo item : paceInfoList) {
            summary = summary + item.toString();
        }
        for (PaceDomainParameterInfo item : paceDomainParameterInfoList) {
            summary = summary + item.toString();
        }
        for (CardInfoLocator item : cardInfoLocatorList) {
            summary = summary + item.toString();
        }
        for (PrivilegedTerminalInfo item : privilegedTerminalInfoList) {
            summary = summary + item.toString();
        }

        return summary;
    }

    public byte[] getBytes() {
        return encodedData;
    }

    public List<PaceInfo> getPaceInfoList() {
        return paceInfoList;
    }

    public List<TerminalAuthenticationInfo> getTerminalAuthenticationInfoList() {
        return terminalAuthenticationInfoList;
    }

    public List<ChipAuthenticationInfo> getChipAuthenticationInfoList() {
        return chipAuthenticationInfoList;
    }

    public List<CardInfoLocator> getCardInfoLocatorList() {
        return cardInfoLocatorList;
    }

    public List<ChipAuthenticationDomainParameterInfo> getChipAuthenticationDomainParameterInfoList() {
        return chipAuthenticationDomainParameterInfoList;
    }

    public List<PaceDomainParameterInfo> getPaceDomainParameterInfoList() {
        return paceDomainParameterInfoList;
    }

    public List<ChipAuthenticationPublicKeyInfo> getChipAuthenticationPublicKeyInfoList() {
        return chipAuthenticationPublicKeyInfoList;
    }

    /**
     * The definition of SecurityInfos is
      * <pre>
      * SecurityInfos ::= SET OF SecurityInfo
      * 
      * SecurityInfo ::= SEQUENCE {
      *       protocol      OBJECT IDENTIFIER,
      *       requiredData   ANY DEFINED BY protocol,
      *       optionalData   ANY DEFINED BY protocol OPTIONAL
      * }
      * </pre>
     */
    @Override
    public ASN1Primitive toASN1Primitive() {
        ASN1EncodableVector v = new ASN1EncodableVector();

        for (TerminalAuthenticationInfo item : terminalAuthenticationInfoList) {
            v.add(item);
        }
        for (ChipAuthenticationInfo item : chipAuthenticationInfoList) {
            v.add(item);
        }
        for (ChipAuthenticationDomainParameterInfo item : chipAuthenticationDomainParameterInfoList) {
            v.add(item);
        }
        for (ChipAuthenticationPublicKeyInfo item : chipAuthenticationPublicKeyInfoList) {
            v.add(item);
        }
        for (PaceInfo item : paceInfoList) {
            v.add(item);
        }
        for (PaceDomainParameterInfo item : paceDomainParameterInfoList) {
            v.add(item);
        }
        for (CardInfoLocator item : cardInfoLocatorList) {
            v.add(item);
        }
        for (PrivilegedTerminalInfo item : privilegedTerminalInfoList) {
            v.add(item);
        }

        return ASN1Set.getInstance(v);
    }

}