pySim-shell: Adds support for DEACTIVATE FILE + ACTIVATE FILE

Change-Id: I22207dde20f991b0a22dea8f5dd695a0ec99da33
diff --git a/docs/shell.rst b/docs/shell.rst
index 1072ee8..f2ddba1 100644
--- a/docs/shell.rst
+++ b/docs/shell.rst
@@ -120,6 +120,14 @@
    :module: pySim-shell
    :func: Iso7816Commands.verify_chv_parser
 
+deactivate_file
+~~~~~~~~~~~~~~~
+Deactivate the currently selected file.  This used to be called INVALIDATE in TS 11.11.
+
+
+activate_file
+~~~~~~~~~~~~~
+Activate the currently selected file.  This used to be called REHABILITATE in TS 11.11.
 
 
 pySim commands
diff --git a/pySim-shell.py b/pySim-shell.py
index cfba73f..b2ccb9a 100755
--- a/pySim-shell.py
+++ b/pySim-shell.py
@@ -403,6 +403,15 @@
 		(data, sw) = self._cmd.card._scc.enable_chv(opts.pin_nr, h2b(pin))
 		self._cmd.poutput("CHV enable successful")
 
+	def do_deactivate_file(self, opts):
+		"""Deactivate the current EF"""
+		fid = self._cmd.rs.selected_file.fid
+		(data, sw) = self._cmd.card._scc.deactivate_file(fid)
+
+	def do_activate_file(self, opts):
+		"""Activate the current EF"""
+		fid = self._cmd.rs.selected_file.fid
+		(data, sw) = self._cmd.card._scc.activate_file(fid)
 
 def parse_options():
 
diff --git a/pySim/commands.py b/pySim/commands.py
index 791b995..2894d31 100644
--- a/pySim/commands.py
+++ b/pySim/commands.py
@@ -296,6 +296,14 @@
 			ret = {'successful_3g_authentication': data}
 		return (ret, sw)
 
+	def deactivate_file(self):
+		"""Execute DECATIVATE FILE command as per TS 102 221 Section 11.1.14."""
+		return self._tp.send_apdu_constr_checksw(self.cla_byte, '04', '00', '00', None, None, None)
+
+	def activate_file(self):
+		"""Execute ACTIVATE FILE command as per TS 102 221 Section 11.1.15."""
+		return self._tp.send_apdu_constr_checksw(self.cla_byte, '44', '00', '00', None, None, None)
+
 	def reset_card(self):
 		"""Physically reset the card"""
 		return self._tp.reset_card()