/****************************************************************************
 * Copyright (C) 2012 ecsec GmbH.
 * All rights reserved.
 * Contact: ecsec GmbH (info@ecsec.de)
 *
 * This file is part of the Open eCard App.
 *
 * GNU General Public License Usage
 * This file may be used under the terms of the GNU General Public
 * License version 3.0 as published by the Free Software Foundation
 * and appearing in the file LICENSE.GPL included in the packaging of
 * this file. Please review the following information to ensure the
 * GNU General Public License version 3.0 requirements will be met:
 * http://www.gnu.org/copyleft/gpl.html.
 *
 * Other Usage
 * Alternatively, this file may be used in accordance with the terms
 * and conditions contained in a signed written agreement between
 * you and ecsec GmbH.
 *
 ***************************************************************************/

package org.openecard.common.tlv.iso7816;

import org.openecard.common.tlv.Parser;
import org.openecard.common.tlv.TLV;
import org.openecard.common.tlv.TLVException;
import org.openecard.common.tlv.Tag;
import org.openecard.common.tlv.TagClass;


/**
 *
 * @author Tobias Wich <tobias.wich@ecsec.de>
 */
public class AuthenticationObjectChoice extends TLVType {

    private GenericAuthenticationObject<PasswordAttributes> pwd; // PasswordAttributes
    private GenericAuthenticationObject<TLV> biometricTemplate; // BiometricAttributes
    private GenericAuthenticationObject<TLV> authKey; // AuthKeyAttributes
    private GenericAuthenticationObject<TLV> external; // ExternalAuthObjectAttributes
    private TLV ext;


    public AuthenticationObjectChoice(TLV tlv) throws TLVException {
	super(tlv);

	Parser p = new Parser(tlv);

	if (p.match(new Tag(TagClass.UNIVERSAL, false, 16))) {
	    pwd = new GenericAuthenticationObject<PasswordAttributes>(p.next(0), PasswordAttributes.class);
	} else if (p.match(new Tag(TagClass.CONTEXT, false, 0))) {
	    biometricTemplate = new GenericAuthenticationObject<TLV>(p.next(0), TLV.class);
	} else if (p.match(new Tag(TagClass.CONTEXT, false, 1))) {
	    authKey = new GenericAuthenticationObject<TLV>(p.next(0), TLV.class);
	} else if (p.match(new Tag(TagClass.CONTEXT, false, 2))) {
	    external = new GenericAuthenticationObject<TLV>(p.next(0), TLV.class);
	} else {
	    ext = p.next(0);
	}
    }

}

@@ -92,16 +92,21 @@
 (C) 2012
+-2013
  ecsec G
@@ -1156,44 +1156,223 @@
 *%0A *
-%0A * @author Tobias Wich %3Ctobias.wich
+ The class implements a data type which represents the ASN.1 notation of the AuthenticationObjectChoice in ISO7816-15.%0A *%0A * @author Tobias Wich %3Ctobias.wich@ecsec.de%3E%0A * @author Hans-Martin Haase %3Chans-martin.haase
 @ecs
@@ -1799,16 +1799,237 @@
 V ext;%0A%0A
+    /**%0A     * The constructor parses the input %7B@link TLV%7D to set the element which is chosen.%0A     *%0A     * @param tlv The %7B@link TLV%7D which represents the AuthenticationObjectChoice.%0A     * @throws TLVException%0A     */
 %0A    pub
@@ -2749,10 +2749,460 @@
 %0A    %7D%0A%0A
+    public GenericAuthenticationObject%3CPasswordAttributes%3E getPasswordObject() %7B%0A%09return pwd;%0A    %7D%0A%0A    public GenericAuthenticationObject%3CTLV%3E getBiometricTemplate() %7B%0A%09return biometricTemplate;%0A    %7D%0A%0A    public GenericAuthenticationObject%3CTLV%3E getAuthenticationKey() %7B%0A%09return authKey;%0A    %7D%0A%0A    public GenericAuthenticationObject%3CTLV%3E getExternalAuthObject() %7B%0A%09return external;%0A    %7D%0A%0A    public TLV getFutureExtension() %7B%0A%09return ext;%0A    %7D%0A%0A
 %7D%0A

Add getter for the global variables