All Downloads are FREE. Search and download functionalities are using the official Maven repository.

es.gob.jmulticard.apdu.iso7816four.pace.MseSetPaceAlgorithmApduCommand Maven / Gradle / Ivy

There is a newer version: 1.8
Show newest version
package es.gob.jmulticard.apdu.iso7816four.pace;

import es.gob.jmulticard.HexUtils;
import es.gob.jmulticard.apdu.iso7816four.MseSetAuthenticationTemplateApduCommand;

/** APDU de establecmiiento de algoritmo para PACE.
 * @author Tomás García-Merás. */
public class MseSetPaceAlgorithmApduCommand extends MseSetAuthenticationTemplateApduCommand {

	/** Parámetro para el algoritmo de establecimiento de canal PACE. */
	public enum PaceAlgorithmParam {

		/** Curva brainpool256r1. */
		BRAINPOOL_256_R1(
			new byte[] {
				/* T */ (byte) 0x84,
				/* L */ (byte) 0x01,
				/* V */ (byte) 0x0d
			}
		);

		private final byte[] paramBytes;

		private PaceAlgorithmParam(final byte[] paramId) {
			this.paramBytes = paramId.clone();
		}

		/** Obtiene la representación binaria del OID.
		 * @return Representación binaria del OID. */
		public byte[] getBytes() {
			return this.paramBytes.clone();
		}
	}

	/** Tipo de contraseña que se va a usar para establecer el canal PACE. */
	public enum PacePasswordType {

		/** MRZ Machine-Readable Zone. */
		MRZ(
			new byte[] {
				/* T */ (byte) 0x83,
				/* L */ (byte) 0x01,
				/* V */ (byte) 0x01
			}
		),
		/** CAN Card Access Number. */
		CAN(
			new byte[] {
				/* T */ (byte) 0x83,
				/* L */ (byte) 0x01,
				/* V */ (byte) 0x02
			}
		);

		private final byte[] pwdTypeBytes;

		private PacePasswordType(final byte[] tpy) {
			this.pwdTypeBytes = tpy.clone();
		}

		/** Obtiene la representación binaria del OID.
		 * @return Representación binaria del OID. */
		public byte[] getBytes() {
			return this.pwdTypeBytes.clone();
		}
	}

	/** Algoritmo de establecimiento de canal PACE.
	 * 

Los OID son una combinación de:

*
    *
  • 0.4.0.127.0.7 (bsi-de)
  • *
  • *
      *
    • 2.2.4 (id_PACE)
    • *
    • *
        *
      • 1 (id_PACE_DH_GM)
      • *
      • 2 (id_PACE_ECDH_GM)
      • *
      • 3 (id_PACE_DH_IM)
      • *
      • 4 (id_PACE_ECDH_IM)
      • *
      *
    • *
    *
  • *
*/ public enum PaceAlgorithmOid { /** id_PACE_ECDH_GM_AES_CBC_CMAC_128 (OID 0.4.0.127.0.7.2.2.4.2.2). */ PACE_ECDH_GM_AES_CBC_CMAC_128( new byte[] { /* T */ /* L */ (byte) 0x0A, /* V */ (byte) 0x04, (byte) 0x00, (byte) 0x7f, (byte) 0x00, (byte) 0x07, (byte) 0x02, (byte) 0x02, (byte) 0x04, (byte) 0x02, (byte) 0x02 } ), /** id_PACE_DH_GM_AES_CBC_CMAC_128 (OID 0.4.0.127.0.7.2.2.4.1.2). */ PACE_DH_GM_AES_CBC_CMAC_128( new byte[] { /* T */ /* L */ (byte) 0x0A, /* V */ (byte) 0x04, (byte) 0x00, (byte) 0x7f, (byte) 0x00, (byte) 0x07, (byte) 0x02, (byte) 0x02, (byte) 0x04, (byte) 0x01, (byte) 0x02 } ); private final byte[] oidBytes; private PaceAlgorithmOid(final byte[] oid) { this.oidBytes = oid.clone(); } /** Obtiene la representación binaria del OID. * @return Representación binaria del OID. */ public byte[] getBytes() { return this.oidBytes.clone(); } } /** Crea una APDU de establecmiento de algoritmo para PACE. * @param cla Clase (CLA) de la APDU. * @param algorithm Algoritmo a utilizar. * @param pwdType Tipo de contraseña que se va a usar para establecer el canal PACE. * @param algorithmParam Parámetro para el algoritmo de establecimiento de canal PACE. */ public MseSetPaceAlgorithmApduCommand(final byte cla, final PaceAlgorithmOid algorithm, final PacePasswordType pwdType, final PaceAlgorithmParam algorithmParam) { super( cla, HexUtils.concatenateByteArrays( new byte[]{(byte)0x80}, algorithm.getBytes(), pwdType.getBytes(), algorithmParam.getBytes() ) ); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy