package de.persosim.simulator.protocols.ca; /* * AUTOMATICALLY GENERATED CODE - DO NOT EDIT! * * (C) 2013 HJP-Consulting GmbH */ @SuppressWarnings("all")//generated code /* Command line options: -verbose -p EA -o DefaultCaProtocol -l java -t CA:caclass C:\develop\wd\protocol_ca.xml */ /* This file is generated from protocol_ca.xml - do not edit manually */ /* Generated on: Wed Nov 25 11:47:22 CET 2015 / version 3.52beta2 */ public class DefaultCaProtocol extends AbstractCaProtocol { public static final int CA_GENERAL_AUTHENTICATE_RECEIVED = 0; public static final int CA_GENERAL_AUTHENTICATE_PROCESSED = 1; public static final int CA_IN_PROGRESS = 2; public static final int REGISTER_APDU_MAP_NONCE = 3; public static final int RESET = 4; public static final int CA_SET_AT_PROCESSED = 5; public static final int DUMMY_INITIAL = 6; public static final int CA_INIT = 7; public static final int CA_COMPLETED = 8; public static final int PROCESSING_ERROR = 9; public static final int REGISTER_APDU_SET_AT = 10; public static final int CA_SET_AT_RECEIVED = 11; public static final int REGISTER_APDUS = 12; public static final int __UNKNOWN_STATE__ = 13; public static final int DEFAULTCAPROTOCOL_NO_MSG = 0; // flag if initialized protected boolean m_initialized=false; int stateVar; int stateVarREGISTER_APDUS; int stateVarCA_IN_PROGRESS; // State handler class default ctor public DefaultCaProtocol() { } /* Helper(s) to reset history */ public void resetHistoryREGISTER_APDUS(){stateVarREGISTER_APDUS= REGISTER_APDU_SET_AT;} public void resetHistoryCA_IN_PROGRESS(){stateVarCA_IN_PROGRESS= CA_INIT;} /* Helper to get innermost active state id */ public int getInnermostActiveState() { if(isInCA_SET_AT_RECEIVED()){ return CA_SET_AT_RECEIVED; }else if(isInREGISTER_APDU_SET_AT()){ return REGISTER_APDU_SET_AT; }else if(isInCA_INIT()){ return CA_INIT; }else if(isInCA_SET_AT_PROCESSED()){ return CA_SET_AT_PROCESSED; }else if(isInREGISTER_APDU_MAP_NONCE()){ return REGISTER_APDU_MAP_NONCE; }else if(isInCA_GENERAL_AUTHENTICATE_PROCESSED()){ return CA_GENERAL_AUTHENTICATE_PROCESSED; }else if(isInCA_GENERAL_AUTHENTICATE_RECEIVED()){ return CA_GENERAL_AUTHENTICATE_RECEIVED; }else if(isInPROCESSING_ERROR()){ return PROCESSING_ERROR; }else if(isInCA_COMPLETED()){ return CA_COMPLETED; }else if(isInDUMMY_INITIAL()){ return DUMMY_INITIAL; }else if(isInRESET()){ return RESET; }else{ return __UNKNOWN_STATE__; } } // Helper(s) to find out if the machine is in a certain state public boolean isInCA_GENERAL_AUTHENTICATE_RECEIVED(){return (((stateVarCA_IN_PROGRESS== CA_GENERAL_AUTHENTICATE_RECEIVED)&&(stateVar== CA_IN_PROGRESS)) ? (true) : (false));} public boolean isInCA_GENERAL_AUTHENTICATE_PROCESSED(){return (((stateVarCA_IN_PROGRESS== CA_GENERAL_AUTHENTICATE_PROCESSED)&&(stateVar== CA_IN_PROGRESS)) ? (true) : (false));} public boolean isInCA_IN_PROGRESS(){return (((stateVar== CA_IN_PROGRESS)) ? (true) : (false));} public boolean isInREGISTER_APDU_MAP_NONCE(){return (((stateVarREGISTER_APDUS== REGISTER_APDU_MAP_NONCE)&&(stateVar== REGISTER_APDUS)) ? (true) : (false));} public boolean isInRESET(){return (((stateVar== RESET)) ? (true) : (false));} public boolean isInCA_SET_AT_PROCESSED(){return (((stateVarCA_IN_PROGRESS== CA_SET_AT_PROCESSED)&&(stateVar== CA_IN_PROGRESS)) ? (true) : (false));} public boolean isInDUMMY_INITIAL(){return (((stateVar== DUMMY_INITIAL)) ? (true) : (false));} public boolean isInCA_INIT(){return (((stateVarCA_IN_PROGRESS== CA_INIT)&&(stateVar== CA_IN_PROGRESS)) ? (true) : (false));} public boolean isInCA_COMPLETED(){return (((stateVar== CA_COMPLETED)) ? (true) : (false));} public boolean isInPROCESSING_ERROR(){return (((stateVar== PROCESSING_ERROR)) ? (true) : (false));} public boolean isInREGISTER_APDU_SET_AT(){return (((stateVarREGISTER_APDUS== REGISTER_APDU_SET_AT)&&(stateVar== REGISTER_APDUS)) ? (true) : (false));} public boolean isInCA_SET_AT_RECEIVED(){return (((stateVarCA_IN_PROGRESS== CA_SET_AT_RECEIVED)&&(stateVar== CA_IN_PROGRESS)) ? (true) : (false));} public boolean isInREGISTER_APDUS(){return (((stateVar== REGISTER_APDUS)) ? (true) : (false));} // Reinitialize the state machine public void reInitialize(){ m_initialized=false; initialize(); } public void initialize(){ if(m_initialized==false){ m_initialized=true; //call on entry code of default states // Set state vars to default states stateVar = DUMMY_INITIAL; /* set init state of top state */ stateVarREGISTER_APDUS = REGISTER_APDU_SET_AT; /* set init state of REGISTER_APDUS */ stateVarCA_IN_PROGRESS = CA_INIT; /* set init state of CA_IN_PROGRESS */ } } protected void defaultcaprotocolChangeToState(int state){ stateVar=state; } protected void defaultcaprotocolChangeToStateREGISTER_APDUS(int state){ stateVarREGISTER_APDUS = state; } protected void defaultcaprotocolChangeToStateCA_IN_PROGRESS(int state){ stateVarCA_IN_PROGRESS = state; } public int processEvent(int msg){ int evConsumed = 0; if(m_initialized==false) return 0; /* action code */ this.continueProcessing = true; do{ evConsumed = 0; switch (stateVar) { case CA_COMPLETED: if(true){ /* Transition from CA_COMPLETED to CA_INIT */ evConsumed=16; /* OnEntry code of state CA_IN_PROGRESS */ logs("CA_ANNOUNCED"); /* OnEntry code of state CA_INIT */ logs("INIT"); returnResult(); /* adjust state variables */ stateVar = CA_IN_PROGRESS; stateVarCA_IN_PROGRESS = CA_INIT; }else{ /* Intentionally left blank */ } /*end of event selection */ break; /* end of case CA_COMPLETED */ case DUMMY_INITIAL: if(true){ if(isInitialized()){ /* Transition from DUMMY_INITIAL to CA_IN_PROGRESS */ evConsumed=16; /* OnEntry code of state CA_IN_PROGRESS */ logs("CA_ANNOUNCED"); stateVar = CA_IN_PROGRESS;/* entry chain */ if(stateVarCA_IN_PROGRESS== CA_GENERAL_AUTHENTICATE_PROCESSED){ logs("GENERAL_AUTHENTICATE_PROCESSED"); }else if(stateVarCA_IN_PROGRESS== CA_GENERAL_AUTHENTICATE_RECEIVED){ logs("GENERAL_AUTHENTICATE_RECEIVED"); processCommandGeneralAuthenticate(); }else if(stateVarCA_IN_PROGRESS== CA_INIT){ logs("INIT"); returnResult(); }else if(stateVarCA_IN_PROGRESS== CA_SET_AT_PROCESSED){ logs("SET_AT_PROCESSED"); returnResult(); }else if(stateVarCA_IN_PROGRESS== CA_SET_AT_RECEIVED){ logs("SET_AT_RECEIVED"); processCommandSetAT(); } }else{ /* Transition from DUMMY_INITIAL to REGISTER_APDUS */ evConsumed=16; stateVar = REGISTER_APDUS;/* Default in entry chain */ stateVarREGISTER_APDUS = REGISTER_APDU_SET_AT;/* Default in entry chain */ } /*end of event selection */ }else{ /* Intentionally left blank */ } /*end of event selection */ break; /* end of case DUMMY_INITIAL */ case PROCESSING_ERROR: if(true){ /* Transition from PROCESSING_ERROR to RESET */ evConsumed=16; /* adjust state variables */ stateVar = RESET; }else{ /* Intentionally left blank */ } /*end of event selection */ break; /* end of case PROCESSING_ERROR */ case REGISTER_APDUS: switch (stateVarREGISTER_APDUS) { case REGISTER_APDU_MAP_NONCE: /* action code */ createNewApduSpecification("General Authenticate"); apduSpecification.setIsoFormat(ISO_FORMAT_FIRSTINTERINDUSTRY); apduSpecification.setIsoCase(ISO_CASE_4); apduSpecification.setChaining(false); apduSpecification.setIns(INS_86_GENERAL_AUTHENTICATE); apduSpecification.setP1((byte) 0x00); apduSpecification.setP2((byte) 0x00); createNewTagSpecification(TAG_7C); apduSpecification.addTag(tagSpecification); createNewPath(); path.add(TAG_7C); createNewTagSpecification(TAG_80); apduSpecification.addTag(path, tagSpecification); registerApduSpecification(apduSpecification); if(true){ /* Transition from REGISTER_APDU_MAP_NONCE to CA_IN_PROGRESS */ evConsumed=16; /* OnEntry code of state CA_IN_PROGRESS */ logs("CA_ANNOUNCED"); stateVar = CA_IN_PROGRESS;/* entry chain */ if(stateVarCA_IN_PROGRESS== CA_GENERAL_AUTHENTICATE_PROCESSED){ logs("GENERAL_AUTHENTICATE_PROCESSED"); }else if(stateVarCA_IN_PROGRESS== CA_GENERAL_AUTHENTICATE_RECEIVED){ logs("GENERAL_AUTHENTICATE_RECEIVED"); processCommandGeneralAuthenticate(); }else if(stateVarCA_IN_PROGRESS== CA_INIT){ logs("INIT"); returnResult(); }else if(stateVarCA_IN_PROGRESS== CA_SET_AT_PROCESSED){ logs("SET_AT_PROCESSED"); returnResult(); }else if(stateVarCA_IN_PROGRESS== CA_SET_AT_RECEIVED){ logs("SET_AT_RECEIVED"); processCommandSetAT(); } /* adjust state variables */ stateVarREGISTER_APDUS = REGISTER_APDU_SET_AT; }else{ /* Intentionally left blank */ } /*end of event selection */ break; /* end of case REGISTER_APDU_MAP_NONCE */ case REGISTER_APDU_SET_AT: /* action code */ createNewApduSpecification("Set AT"); apduSpecification.setIsoFormat(ISO_FORMAT_FIRSTINTERINDUSTRY); apduSpecification.setIsoCase(ISO_CASE_3); apduSpecification.setChaining(false); apduSpecification.setIns(INS_22_MANAGE_SECURITY_ENVIRONMENT); apduSpecification.setP1((byte) 0x41); apduSpecification.setP2((byte) 0xA4); createNewTagSpecification(TAG_80); apduSpecification.addTag(tagSpecification); createNewTagSpecification(TAG_84); tagSpecification.setRequired(REQ_OPTIONAL); apduSpecification.addTag(tagSpecification); createNewTagSpecification(TAG_E0); tagSpecification.setRequired(REQ_OPTIONAL); apduSpecification.addTag(tagSpecification); createNewPath(); path.add(TAG_E0); createNewTagSpecification(TAG_81); apduSpecification.addTag(path, tagSpecification); apduSpecification.setInitialApdu(); registerApduSpecification(apduSpecification); if(true){ /* Transition from REGISTER_APDU_SET_AT to REGISTER_APDU_MAP_NONCE */ evConsumed=16; /* adjust state variables */ stateVarREGISTER_APDUS = REGISTER_APDU_MAP_NONCE; }else{ /* Intentionally left blank */ } /*end of event selection */ break; /* end of case REGISTER_APDU_SET_AT */ default: /* Intentionally left blank */ break; } /* end switch REGISTER_APDUS */ break; /* end of case REGISTER_APDUS */ case RESET: /* action code */ logs("RESET"); if(true){ /* Transition from RESET to CA_INIT */ evConsumed=16; /* OnEntry code of state CA_IN_PROGRESS */ logs("CA_ANNOUNCED"); /* OnEntry code of state CA_INIT */ logs("INIT"); returnResult(); /* adjust state variables */ stateVar = CA_IN_PROGRESS; stateVarCA_IN_PROGRESS = CA_INIT; }else{ /* Intentionally left blank */ } /*end of event selection */ break; /* end of case RESET */ case CA_IN_PROGRESS: switch (stateVarCA_IN_PROGRESS) { case CA_GENERAL_AUTHENTICATE_PROCESSED: if(true){ /* Transition from CA_GENERAL_AUTHENTICATE_PROCESSED to CA_COMPLETED */ evConsumed=16; /* OnEntry code of state CA_COMPLETED */ logs("COMPLETED"); returnResult(); /* adjust state variables */ stateVar = CA_COMPLETED; }else{ /* Intentionally left blank */ } /*end of event selection */ break; /* end of case CA_GENERAL_AUTHENTICATE_PROCESSED */ case CA_GENERAL_AUTHENTICATE_RECEIVED: if(isStatusWord(SW_9000_NO_ERROR)){ /* Transition from CA_GENERAL_AUTHENTICATE_RECEIVED to CA_GENERAL_AUTHENTICATE_PROCESSED */ evConsumed=16; /* OnEntry code of state CA_GENERAL_AUTHENTICATE_PROCESSED */ logs("GENERAL_AUTHENTICATE_PROCESSED"); /* adjust state variables */ stateVarCA_IN_PROGRESS = CA_GENERAL_AUTHENTICATE_PROCESSED; }else{ /* Intentionally left blank */ } /*end of event selection */ break; /* end of case CA_GENERAL_AUTHENTICATE_RECEIVED */ case CA_INIT: if(isAPDU("Set AT")){ /* Transition from CA_INIT to CA_SET_AT_RECEIVED */ evConsumed=16; /* OnEntry code of state CA_SET_AT_RECEIVED */ logs("SET_AT_RECEIVED"); processCommandSetAT(); /* adjust state variables */ stateVarCA_IN_PROGRESS = CA_SET_AT_RECEIVED; }else{ /* Intentionally left blank */ } /*end of event selection */ break; /* end of case CA_INIT */ case CA_SET_AT_PROCESSED: if(isAPDU("General Authenticate")){ /* Transition from CA_SET_AT_PROCESSED to CA_GENERAL_AUTHENTICATE_RECEIVED */ evConsumed=16; /* OnEntry code of state CA_GENERAL_AUTHENTICATE_RECEIVED */ logs("GENERAL_AUTHENTICATE_RECEIVED"); processCommandGeneralAuthenticate(); /* adjust state variables */ stateVarCA_IN_PROGRESS = CA_GENERAL_AUTHENTICATE_RECEIVED; }else{ /* Intentionally left blank */ } /*end of event selection */ break; /* end of case CA_SET_AT_PROCESSED */ case CA_SET_AT_RECEIVED: if(isStatusWord(SW_9000_NO_ERROR)){ /* Transition from CA_SET_AT_RECEIVED to CA_SET_AT_PROCESSED */ evConsumed=16; /* OnEntry code of state CA_SET_AT_PROCESSED */ logs("SET_AT_PROCESSED"); returnResult(); /* adjust state variables */ stateVarCA_IN_PROGRESS = CA_SET_AT_PROCESSED; }else{ /* Intentionally left blank */ } /*end of event selection */ break; /* end of case CA_SET_AT_RECEIVED */ default: /* Intentionally left blank */ break; } /* end switch CA_IN_PROGRESS */ /* Check if event was already processed */ if(evConsumed==0){ if(true){ if(warningOrErrorOccurredDuringProcessing()){ /* Transition from CA_IN_PROGRESS to PROCESSING_ERROR */ evConsumed=16; /* Action code for transition */ logs("error occurred during processing"); /* adjust state variables */ stateVar = PROCESSING_ERROR; }else{ /* Transition from CA_IN_PROGRESS to CA_IN_PROGRESS */ evConsumed=16; /* Action code for transition */ logs("unable to process APDU - returning to previous state"); /* OnEntry code of state CA_IN_PROGRESS */ logs("CA_ANNOUNCED"); stateVar = CA_IN_PROGRESS;/* entry chain */ if(stateVarCA_IN_PROGRESS== CA_GENERAL_AUTHENTICATE_PROCESSED){ logs("GENERAL_AUTHENTICATE_PROCESSED"); }else if(stateVarCA_IN_PROGRESS== CA_GENERAL_AUTHENTICATE_RECEIVED){ logs("GENERAL_AUTHENTICATE_RECEIVED"); processCommandGeneralAuthenticate(); }else if(stateVarCA_IN_PROGRESS== CA_INIT){ logs("INIT"); returnResult(); }else if(stateVarCA_IN_PROGRESS== CA_SET_AT_PROCESSED){ logs("SET_AT_PROCESSED"); returnResult(); }else if(stateVarCA_IN_PROGRESS== CA_SET_AT_RECEIVED){ logs("SET_AT_RECEIVED"); processCommandSetAT(); } } /*end of event selection */ }else{ /* Intentionally left blank */ } /*end of event selection */ } break; /* end of case CA_IN_PROGRESS */ default: /* Intentionally left blank */ break; } /* end switch stateVar_root */ /* Post Action Code */ }while (this.continueProcessing); return evConsumed; } }