public AccessConditions() { DataAreas = new DataAreaAccessCondition[3]; DataAreas[0] = new DataAreaAccessCondition(); DataAreas[1] = new DataAreaAccessCondition(); DataAreas[2] = new DataAreaAccessCondition(); Trailer = new TrailerAccessCondition(); MADVersion = MADVersionEnum.NoMAD; MultiApplicationCard = false; }
private InternalKeyType GetDatablockWriteKey(int datablock) { //Gets the access conditions of the datablock DataAreaAccessCondition condition = originalAccessConditions.DataAreas[Math.Min(datablock, Access.DataAreas.Length - 1)]; //gets the original access bits to check if the card is in "transport configuration" BitArray conditionBits = condition.GetBits(); bool cardIsInTransportState = isInTransportState(conditionBits); if (cardIsInTransportState) { return(InternalKeyType.KeyA); } else { return((condition.Write == DataAreaAccessCondition.ConditionEnum.KeyA) ? InternalKeyType.KeyA : InternalKeyType.KeyB); } }