https://air.imag.fr/api.php?action=feedcontributions&user=Diorcety&feedformat=atom
air - User contributions [en]
2024-03-29T12:50:00Z
User contributions
MediaWiki 1.35.13
https://air.imag.fr/index.php?title=JavaCard&diff=4701
JavaCard
2012-03-07T23:37:13Z
<p>Diorcety: </p>
<hr />
<div>JavaCard est un canevas d’exécution d'application pour carte à puce développé en Java.<br />
<br />
==Les APIs==<br />
* Python http://pyscard.sourceforge.net/<br />
* Java [[Javax.smartcardio]]<br />
* Ada http://www.nongnu.org/pcscada/<br />
* C#<br />
* C/C++<br />
<br />
==Les outils==<br />
*[http://sourceforge.net/projects/globalplatform/ GPShell]<br />
*[http://www.linuxnet.com/musclecard/index.html OpenSC]<br />
*[http://www.opensc-project.org/opensc MUSCLE]<br />
<br />
==Global Platform==<br />
Global Platform est un standard permettant l'installation de cardapplets.<br />
<br />
==Carte étudiante (ancienne génération)==<br />
[https://2009.jres.org/soumission/papers/render/pdf/135.pdf Présentation de la carte]<br />
===Script GPShell pour lister les card applets===<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
get_status -element 20<br />
card_disconnect<br />
release_context<br />
</pre><br />
<br />
===Script GPShell pour lister les card applets sélectionnables===<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
get_status -element 40<br />
card_disconnect<br />
release_context<br />
</pre><br />
<br />
===Code LUA pour CardPeek ===<br />
<pre><br />
require('lib.tlv')<br />
<br />
AID_UJF = "#556E69762E554A46"<br />
function ui_parse_cstring(node,data)<br />
ui.tree_set_value(node,data)<br />
if #data>1 then<br />
ui.tree_set_alt_value(node,bytes.format("%P",bytes.sub(data,0,#data)))<br />
end<br />
end<br />
function raw_get_data(id) <br />
return card.send(bytes.new(8,card.CLA,0xCA,id,00,01,01,00))<br />
end<br />
<br />
if card.connect() then<br />
CARD = card.tree_startup("UJF")<br />
<br />
sw,resp = card.select(AID_UJF)<br />
if sw==0x9000 then<br />
APP = ui.tree_add_node(CARD,"application","Univ.UJF", AID_UJF)<br />
<br />
sw,resp = raw_get_data(0x01)<br />
if sw==0x9000 then<br />
ID = ui.tree_add_node(APP,"id","ID", "01", #resp)<br />
ui_parse_cstring(ID,resp)<br />
end<br />
<br />
sw,resp = raw_get_data(0x02)<br />
if sw==0x9000 then<br />
VERSION = ui.tree_add_node(APP,"version","VERSION", "02", #resp)<br />
ui_parse_cstring(VERSION,resp)<br />
end<br />
<br />
sw,resp = raw_get_data(0x03)<br />
if sw==0x9000 then<br />
HOLDER = ui.tree_add_node(APP,"holder","HOLDER", "03", #resp)<br />
if resp[0] == 0x30 then<br />
ui.tree_set_alt_value(HOLDER, "Student") <br />
elseif resp[0] == 0x31 then<br />
ui.tree_set_alt_value(HOLDER, "Employee")<br />
else<br />
ui.tree_set_alt_value(HOLDER, "Unknown") <br />
end<br />
ui.tree_set_value(HOLDER, resp)<br />
end<br />
<br />
sw,resp = raw_get_data(0x04)<br />
if sw==0x9000 then<br />
INE = ui.tree_add_node(APP,"ine","INE", "04", #resp)<br />
ui_parse_cstring(INE,resp)<br />
end<br />
<br />
sw,resp = raw_get_data(0x05)<br />
if sw==0x9000 then<br />
VS = ui.tree_add_node(APP,"validity start","VALIDITY_START", "05", #resp)<br />
ui_parse_cstring(VS,resp)<br />
end<br />
<br />
sw,resp = raw_get_data(0x06)<br />
if sw==0x9000 then<br />
VE = ui.tree_add_node(APP,"validity end","VALIDITY_END", "06", #resp)<br />
ui_parse_cstring(VE,resp)<br />
end<br />
--sw,resp = raw_get_data(0x21)<br />
--if sw==0x9000 then<br />
-- TEST = ui.tree_add_node(APP,"test","TEST", "21", #resp)<br />
-- ui_parse_cstring(TEST,resp)<br />
--end<br />
end<br />
<br />
card.disconnect()<br />
<br />
else<br />
ui.question("No card detected",{"OK"})<br />
end<br />
</pre><br />
===Application Java pour lister quelques informations de la carte===<br />
<pre><br />
package fr.imag.javacard;<br />
<br />
import javax.smartcardio.*;<br />
import java.util.*;<br />
<br />
public class Main {<br />
static class Util {<br />
static final String HEXES = "0123456789ABCDEF";<br />
<br />
public static String getHex(byte[] raw) {<br />
if (raw == null) {<br />
return null;<br />
}<br />
final StringBuilder hex = new StringBuilder(2 * raw.length);<br />
for (final byte b : raw) {<br />
hex.append(HEXES.charAt((b & 0xF0) >> 4))<br />
.append(HEXES.charAt((b & 0x0F)));<br />
}<br />
return hex.toString();<br />
}<br />
}<br />
<br />
private static byte[] appletAID = {0x55, 0x6E, 0x69, 0x76, 0x2E, 0x55, 0x4A, 0x46};<br />
private final static byte INS_SELECT = (byte) 0xA4;<br />
private final static byte INS_GETDATA = (byte) 0xCA;<br />
<br />
static class Command {<br />
String description;<br />
<br />
Command(String description) {<br />
this.description = description;<br />
}<br />
}<br />
<br />
private static final Map<Integer, Command> COMMAND_MAP =<br />
Collections.unmodifiableMap(new HashMap<Integer, Command>() {{<br />
put(1, new Command("ID(?)"));<br />
put(2, new Command("Version(?)"));<br />
put(3, new Command("(?)"));<br />
put(4, new Command("INE"));<br />
put(5, new Command("Creation(?)"));<br />
put(6, new Command("Update(?)"));<br />
}});<br />
<br />
public static CardTerminal selectCardTerminal() throws Exception {<br />
Scanner in = new Scanner(System.in);<br />
TerminalFactory tf = TerminalFactory.getDefault();<br />
List<CardTerminal> ctlist = null;<br />
ctlist = tf.terminals().list();<br />
if (ctlist.size() == 0) {<br />
throw new Exception("No reader present");<br />
}<br />
if (ctlist.size() == 1) {<br />
return ctlist.get(0);<br />
}<br />
<br />
int index = 0;<br />
do {<br />
<br />
System.out.println("Readers:");<br />
System.out.println("============================================");<br />
for (CardTerminal ct : ctlist) {<br />
System.out.println(index++ + ": " + ct.getName());<br />
}<br />
System.out.print("Select a reader:");<br />
index = in.nextInt();<br />
} while (index < 0 || index >= ctlist.size());<br />
<br />
return ctlist.get(index);<br />
}<br />
<br />
public static void selectApplication(CardChannel cc) throws Exception {<br />
System.out.println("Selecting \"Univ.UJF\" application");<br />
<br />
CommandAPDU apdu = new CommandAPDU(<br />
0x00, INS_SELECT,<br />
0x4, 0x0,<br />
appletAID);<br />
<br />
ResponseAPDU rapdu = cc.transmit(apdu);<br />
if (rapdu.getSW() != 0x9000) {<br />
throw new Exception("Can't select \"Univ.UJF\" application: "<br />
+ Integer.toHexString(rapdu.getSW()));<br />
}<br />
<br />
}<br />
<br />
public static void main(String[] args) {<br />
try {<br />
CardTerminal ct = selectCardTerminal();<br />
Card c = ct.connect("T=0");<br />
ATR atr = c.getATR();<br />
System.out.println("ATR : " + Util.getHex(atr.getBytes()));<br />
CardChannel cc = c.getBasicChannel();<br />
<br />
selectApplication(cc);<br />
<br />
for (int id : COMMAND_MAP.keySet()) {<br />
Command cmd = COMMAND_MAP.get(id);<br />
CommandAPDU apdu = new CommandAPDU(<br />
0x00, INS_GETDATA,<br />
(byte) id, 0x00, new byte[]{0x01});<br />
<br />
ResponseAPDU rapdu = cc.transmit(apdu);<br />
if (rapdu.getSW() != 0x9000) {<br />
throw new Exception("Can't get data (" + id + "): "<br />
+ Integer.toHexString(rapdu.getSW()));<br />
}<br />
System.out.println(cmd.description + ":"<br />
+ new String(rapdu.getData()));<br />
}<br />
} catch (Exception e) {<br />
<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
</pre><br />
===MuscleCard pour la carte étudiante===<br />
<br />
''MuscleCard is an open source project hosted at the M.U.S.C.L.E website. It aims to develop a JavaCard applet and supporting middleware to perform cryptographic operations like signing and encryption in a smart card.'' http://www.openscdp.org/scripts/musclecard/index.html<br />
<br />
<br />
====Compilation====<br />
(De préference sous Linux)<br />
* Télécharger les sources de Muscle<br />
<pre><br />
svn co svn://svn.debian.org/muscleplugins/trunk/MCardApplet<br />
</pre><br />
* Télécharger Java Card 2.1.2 Development Kit: [http://www.oracle.com/technetwork/java/javacard/downloads/index-jsp-138488.html#devkit lien]<br />
* Changer common.xml en modifiant:<br />
<pre><br />
Index: common.xml<br />
===================================================================<br />
--- common.xml (revision 297)<br />
+++ common.xml (working copy)<br />
@@ -62,8 +62,8 @@<br />
executable="${JAVA_BUILD_HOME}/bin/javac"<br />
srcdir="${APPLET_SRC}"<br />
destdir="${OUTPUT_DIR}"<br />
- target="${VM_TARGET_VERSION}"<br />
- source="${VM_SOURCE_VERSION}"><br />
+ target="1.1"<br />
+ source="1.2"><br />
<bootclasspath><br />
<pathelement location="${BOOTCLASSPATH}"/><br />
</bootclasspath><br />
</pre><br />
* Modifier le fichier JCOP.properties<br />
<pre><br />
CARD_NAME=JCOP<br />
JAVA_BUILD_HOME=PATH_VERS_JDK<br />
JC_HOME=PATH_VERS JC212<br />
API_JAR=${JC_HOME}/lib/api21.jar<br />
API_EXPORT_FILES=${JC_HOME}/api21_export_files<br />
</pre><br />
<br />
====Installation====<br />
Deplacer le fichier '''CardEdge.cap''' dans le dossier de GPShell et lancer le script suivant<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
install -file CardEdge.cap -sdAID A000000018434D00 -nvCodeLimit 4000<br />
card_disconnect<br />
release_context<br />
</pre><br />
====Initialisation de l'applet====<br />
Comme spécifié [http://www.opensc-project.org/opensc/wiki/MuscleApplet ici], l'applet à besoin d'être initialisé (par exemple avec opensc):<br />
<br />
'''Attention : les version > 0.11.3 de opensc ne fonctionne pas avec cette carte'''<br />
<br />
<pre><br />
opensc-tool -s 00:A4:04:00:06:A0:00:00:00:01:01 \<br />
-s B0:2A:00:00:38:08:4D:75:73:63:6C:65:30:30:04:01:08:30:30:30:30:30:30:30:30:08:30:30:30:30:30:30:30:30:05:02:08:30:30:30:30:30:30:30:30:08:30:30:30:30:30:30:30:30:00:00:17:70:00:02:01<br />
</pre><br />
<br />
====Initialisation de PKCS15====<br />
<pre><br />
pkcs15-init -C --so-pin 00000000 --so-puk 00000000 --pin 00000000 --puk 00000000<br />
</pre><br />
====Changer le code PIN====<br />
<pre><br />
pkcs15-tool --change-pin<br />
</pre><br />
====Générer clés RSA/2048bits====<br />
<pre><br />
pkcs15-init --generate-key rsa/2048 --auth-id ff<br />
</pre><br />
====Générer certificat auto-signé====<br />
Récupérer le slot du lecteur<br />
<pre><br />
pkcs11-tool --list-slots<br />
</pre><br />
Générer avec openssl:<br />
<pre><br />
openssl<br />
engine -t dynamic -pre SO_PATH:/usr/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:opensc-pkcs11.so<br />
req -engine pkcs11 -new -key slot_8-id_45 -keyform engine -x509 -out cert.pem -text<br />
</pre><br />
Ajouter le certificat dans la carte<br />
<pre><br />
pkcs15-init --store-certificate cert.pem --auth-id ff --id 45 --format pem<br />
</pre></div>
Diorcety
https://air.imag.fr/index.php?title=JavaCard&diff=3232
JavaCard
2011-10-20T20:40:58Z
<p>Diorcety: /* Générer certificat auto-signé */</p>
<hr />
<div>JavaCard est un canevas d’exécution d'application pour carte à puce développé en Java.<br />
<br />
==Les APIs==<br />
* Python http://pyscard.sourceforge.net/<br />
* Java [[Javax.smartcardio]]<br />
* Ada http://www.nongnu.org/pcscada/<br />
* C#<br />
* C/C++<br />
<br />
==Les outils==<br />
*[http://sourceforge.net/projects/globalplatform/ GPShell]<br />
*[http://www.linuxnet.com/musclecard/index.html OpenSC]<br />
*[http://www.opensc-project.org/opensc MUSCLE]<br />
<br />
==Global Platform==<br />
Global Platform est un standard permettant l'installation de cardapplets.<br />
<br />
==Carte étudiante (ancienne génération)==<br />
[https://2009.jres.org/soumission/papers/render/pdf/135.pdf Présentation de la carte]<br />
===Script GPShell pour lister les card applets===<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
get_status -element 20<br />
card_disconnect<br />
release_context<br />
</pre><br />
<br />
===Script GPShell pour lister les card applets sélectionnables===<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
get_status -element 40<br />
card_disconnect<br />
release_context<br />
</pre><br />
<br />
===Application Java pour lister quelques informations de la carte===<br />
<pre><br />
package fr.imag.javacard;<br />
<br />
import javax.smartcardio.*;<br />
import java.util.*;<br />
<br />
public class Main {<br />
static class Util {<br />
static final String HEXES = "0123456789ABCDEF";<br />
<br />
public static String getHex(byte[] raw) {<br />
if (raw == null) {<br />
return null;<br />
}<br />
final StringBuilder hex = new StringBuilder(2 * raw.length);<br />
for (final byte b : raw) {<br />
hex.append(HEXES.charAt((b & 0xF0) >> 4))<br />
.append(HEXES.charAt((b & 0x0F)));<br />
}<br />
return hex.toString();<br />
}<br />
}<br />
<br />
private static byte[] appletAID = {0x55, 0x6E, 0x69, 0x76, 0x2E, 0x55, 0x4A, 0x46};<br />
private final static byte INS_SELECT = (byte) 0xA4;<br />
private final static byte INS_GETDATA = (byte) 0xCA;<br />
<br />
static class Command {<br />
String description;<br />
<br />
Command(String description) {<br />
this.description = description;<br />
}<br />
}<br />
<br />
private static final Map<Integer, Command> COMMAND_MAP =<br />
Collections.unmodifiableMap(new HashMap<Integer, Command>() {{<br />
put(1, new Command("ID(?)"));<br />
put(2, new Command("Version(?)"));<br />
put(3, new Command("(?)"));<br />
put(4, new Command("INE"));<br />
put(5, new Command("Creation(?)"));<br />
put(6, new Command("Update(?)"));<br />
}});<br />
<br />
public static CardTerminal selectCardTerminal() throws Exception {<br />
Scanner in = new Scanner(System.in);<br />
TerminalFactory tf = TerminalFactory.getDefault();<br />
List<CardTerminal> ctlist = null;<br />
ctlist = tf.terminals().list();<br />
if (ctlist.size() == 0) {<br />
throw new Exception("No reader present");<br />
}<br />
if (ctlist.size() == 1) {<br />
return ctlist.get(0);<br />
}<br />
<br />
int index = 0;<br />
do {<br />
<br />
System.out.println("Readers:");<br />
System.out.println("============================================");<br />
for (CardTerminal ct : ctlist) {<br />
System.out.println(index++ + ": " + ct.getName());<br />
}<br />
System.out.print("Select a reader:");<br />
index = in.nextInt();<br />
} while (index < 0 || index >= ctlist.size());<br />
<br />
return ctlist.get(index);<br />
}<br />
<br />
public static void selectApplication(CardChannel cc) throws Exception {<br />
System.out.println("Selecting \"Univ.UJF\" application");<br />
<br />
CommandAPDU apdu = new CommandAPDU(<br />
0x00, INS_SELECT,<br />
0x4, 0x0,<br />
appletAID);<br />
<br />
ResponseAPDU rapdu = cc.transmit(apdu);<br />
if (rapdu.getSW() != 0x9000) {<br />
throw new Exception("Can't select \"Univ.UJF\" application: "<br />
+ Integer.toHexString(rapdu.getSW()));<br />
}<br />
<br />
}<br />
<br />
public static void main(String[] args) {<br />
try {<br />
CardTerminal ct = selectCardTerminal();<br />
Card c = ct.connect("T=0");<br />
ATR atr = c.getATR();<br />
System.out.println("ATR : " + Util.getHex(atr.getBytes()));<br />
CardChannel cc = c.getBasicChannel();<br />
<br />
selectApplication(cc);<br />
<br />
for (int id : COMMAND_MAP.keySet()) {<br />
Command cmd = COMMAND_MAP.get(id);<br />
CommandAPDU apdu = new CommandAPDU(<br />
0x00, INS_GETDATA,<br />
(byte) id, 0x00, new byte[]{0x01});<br />
<br />
ResponseAPDU rapdu = cc.transmit(apdu);<br />
if (rapdu.getSW() != 0x9000) {<br />
throw new Exception("Can't get data (" + id + "): "<br />
+ Integer.toHexString(rapdu.getSW()));<br />
}<br />
System.out.println(cmd.description + ":"<br />
+ new String(rapdu.getData()));<br />
}<br />
} catch (Exception e) {<br />
<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
</pre><br />
===MuscleCard pour la carte étudiante===<br />
<br />
''MuscleCard is an open source project hosted at the M.U.S.C.L.E website. It aims to develop a JavaCard applet and supporting middleware to perform cryptographic operations like signing and encryption in a smart card.'' http://www.openscdp.org/scripts/musclecard/index.html<br />
<br />
<br />
====Compilation====<br />
(De préference sous Linux)<br />
* Télécharger les sources de Muscle<br />
<pre><br />
svn co svn://svn.debian.org/muscleplugins/trunk/MCardApplet<br />
</pre><br />
* Télécharger Java Card 2.1.2 Development Kit: [http://www.oracle.com/technetwork/java/javacard/downloads/index-jsp-138488.html#devkit lien]<br />
* Changer common.xml en modifiant:<br />
<pre><br />
Index: common.xml<br />
===================================================================<br />
--- common.xml (revision 297)<br />
+++ common.xml (working copy)<br />
@@ -62,8 +62,8 @@<br />
executable="${JAVA_BUILD_HOME}/bin/javac"<br />
srcdir="${APPLET_SRC}"<br />
destdir="${OUTPUT_DIR}"<br />
- target="${VM_TARGET_VERSION}"<br />
- source="${VM_SOURCE_VERSION}"><br />
+ target="1.1"<br />
+ source="1.2"><br />
<bootclasspath><br />
<pathelement location="${BOOTCLASSPATH}"/><br />
</bootclasspath><br />
</pre><br />
* Modifier le fichier JCOP.properties<br />
<pre><br />
CARD_NAME=JCOP<br />
JAVA_BUILD_HOME=PATH_VERS_JDK<br />
JC_HOME=PATH_VERS JC212<br />
API_JAR=${JC_HOME}/lib/api21.jar<br />
API_EXPORT_FILES=${JC_HOME}/api21_export_files<br />
</pre><br />
<br />
====Installation====<br />
Deplacer le fichier '''CardEdge.cap''' dans le dossier de GPShell et lancer le script suivant<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
install -file CardEdge.cap -sdAID A000000018434D00 -nvCodeLimit 4000<br />
card_disconnect<br />
release_context<br />
</pre><br />
====Initialisation de l'applet====<br />
Comme spécifié [http://www.opensc-project.org/opensc/wiki/MuscleApplet ici], l'applet à besoin d'être initialisé (par exemple avec opensc):<br />
<br />
'''Attention : les version > 0.11.3 de opensc ne fonctionne pas avec cette carte'''<br />
<br />
<pre><br />
opensc-tool -s 00:A4:04:00:06:A0:00:00:00:01:01 \<br />
-s B0:2A:00:00:38:08:4D:75:73:63:6C:65:30:30:04:01:08:30:30:30:30:30:30:30:30:08:30:30:30:30:30:30:30:30:05:02:08:30:30:30:30:30:30:30:30:08:30:30:30:30:30:30:30:30:00:00:17:70:00:02:01<br />
</pre><br />
<br />
====Initialisation de PKCS15====<br />
<pre><br />
pkcs15-init -C --so-pin 00000000 --so-puk 00000000 --pin 00000000 --puk 00000000<br />
</pre><br />
====Changer le code PIN====<br />
<pre><br />
pkcs15-tool --change-pin<br />
</pre><br />
====Générer clés RSA/2048bits====<br />
<pre><br />
pkcs15-init --generate-key rsa/2048 --auth-id ff<br />
</pre><br />
====Générer certificat auto-signé====<br />
Récupérer le slot du lecteur<br />
<pre><br />
pkcs11-tool --list-slots<br />
</pre><br />
Générer avec openssl:<br />
<pre><br />
openssl<br />
engine -t dynamic -pre SO_PATH:/usr/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:opensc-pkcs11.so<br />
req -engine pkcs11 -new -key slot_8-id_45 -keyform engine -x509 -out cert.pem -text<br />
</pre><br />
Ajouter le certificat dans la carte<br />
<pre><br />
pkcs15-init --store-certificate cert.pem --auth-id ff --id 45 --format pem<br />
</pre></div>
Diorcety
https://air.imag.fr/index.php?title=JavaCard&diff=3231
JavaCard
2011-10-20T19:02:38Z
<p>Diorcety: /* Initialisation de l'applet */</p>
<hr />
<div>JavaCard est un canevas d’exécution d'application pour carte à puce développé en Java.<br />
<br />
==Les APIs==<br />
* Python http://pyscard.sourceforge.net/<br />
* Java [[Javax.smartcardio]]<br />
* Ada http://www.nongnu.org/pcscada/<br />
* C#<br />
* C/C++<br />
<br />
==Les outils==<br />
*[http://sourceforge.net/projects/globalplatform/ GPShell]<br />
*[http://www.linuxnet.com/musclecard/index.html OpenSC]<br />
*[http://www.opensc-project.org/opensc MUSCLE]<br />
<br />
==Global Platform==<br />
Global Platform est un standard permettant l'installation de cardapplets.<br />
<br />
==Carte étudiante (ancienne génération)==<br />
[https://2009.jres.org/soumission/papers/render/pdf/135.pdf Présentation de la carte]<br />
===Script GPShell pour lister les card applets===<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
get_status -element 20<br />
card_disconnect<br />
release_context<br />
</pre><br />
<br />
===Script GPShell pour lister les card applets sélectionnables===<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
get_status -element 40<br />
card_disconnect<br />
release_context<br />
</pre><br />
<br />
===Application Java pour lister quelques informations de la carte===<br />
<pre><br />
package fr.imag.javacard;<br />
<br />
import javax.smartcardio.*;<br />
import java.util.*;<br />
<br />
public class Main {<br />
static class Util {<br />
static final String HEXES = "0123456789ABCDEF";<br />
<br />
public static String getHex(byte[] raw) {<br />
if (raw == null) {<br />
return null;<br />
}<br />
final StringBuilder hex = new StringBuilder(2 * raw.length);<br />
for (final byte b : raw) {<br />
hex.append(HEXES.charAt((b & 0xF0) >> 4))<br />
.append(HEXES.charAt((b & 0x0F)));<br />
}<br />
return hex.toString();<br />
}<br />
}<br />
<br />
private static byte[] appletAID = {0x55, 0x6E, 0x69, 0x76, 0x2E, 0x55, 0x4A, 0x46};<br />
private final static byte INS_SELECT = (byte) 0xA4;<br />
private final static byte INS_GETDATA = (byte) 0xCA;<br />
<br />
static class Command {<br />
String description;<br />
<br />
Command(String description) {<br />
this.description = description;<br />
}<br />
}<br />
<br />
private static final Map<Integer, Command> COMMAND_MAP =<br />
Collections.unmodifiableMap(new HashMap<Integer, Command>() {{<br />
put(1, new Command("ID(?)"));<br />
put(2, new Command("Version(?)"));<br />
put(3, new Command("(?)"));<br />
put(4, new Command("INE"));<br />
put(5, new Command("Creation(?)"));<br />
put(6, new Command("Update(?)"));<br />
}});<br />
<br />
public static CardTerminal selectCardTerminal() throws Exception {<br />
Scanner in = new Scanner(System.in);<br />
TerminalFactory tf = TerminalFactory.getDefault();<br />
List<CardTerminal> ctlist = null;<br />
ctlist = tf.terminals().list();<br />
if (ctlist.size() == 0) {<br />
throw new Exception("No reader present");<br />
}<br />
if (ctlist.size() == 1) {<br />
return ctlist.get(0);<br />
}<br />
<br />
int index = 0;<br />
do {<br />
<br />
System.out.println("Readers:");<br />
System.out.println("============================================");<br />
for (CardTerminal ct : ctlist) {<br />
System.out.println(index++ + ": " + ct.getName());<br />
}<br />
System.out.print("Select a reader:");<br />
index = in.nextInt();<br />
} while (index < 0 || index >= ctlist.size());<br />
<br />
return ctlist.get(index);<br />
}<br />
<br />
public static void selectApplication(CardChannel cc) throws Exception {<br />
System.out.println("Selecting \"Univ.UJF\" application");<br />
<br />
CommandAPDU apdu = new CommandAPDU(<br />
0x00, INS_SELECT,<br />
0x4, 0x0,<br />
appletAID);<br />
<br />
ResponseAPDU rapdu = cc.transmit(apdu);<br />
if (rapdu.getSW() != 0x9000) {<br />
throw new Exception("Can't select \"Univ.UJF\" application: "<br />
+ Integer.toHexString(rapdu.getSW()));<br />
}<br />
<br />
}<br />
<br />
public static void main(String[] args) {<br />
try {<br />
CardTerminal ct = selectCardTerminal();<br />
Card c = ct.connect("T=0");<br />
ATR atr = c.getATR();<br />
System.out.println("ATR : " + Util.getHex(atr.getBytes()));<br />
CardChannel cc = c.getBasicChannel();<br />
<br />
selectApplication(cc);<br />
<br />
for (int id : COMMAND_MAP.keySet()) {<br />
Command cmd = COMMAND_MAP.get(id);<br />
CommandAPDU apdu = new CommandAPDU(<br />
0x00, INS_GETDATA,<br />
(byte) id, 0x00, new byte[]{0x01});<br />
<br />
ResponseAPDU rapdu = cc.transmit(apdu);<br />
if (rapdu.getSW() != 0x9000) {<br />
throw new Exception("Can't get data (" + id + "): "<br />
+ Integer.toHexString(rapdu.getSW()));<br />
}<br />
System.out.println(cmd.description + ":"<br />
+ new String(rapdu.getData()));<br />
}<br />
} catch (Exception e) {<br />
<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
</pre><br />
===MuscleCard pour la carte étudiante===<br />
<br />
''MuscleCard is an open source project hosted at the M.U.S.C.L.E website. It aims to develop a JavaCard applet and supporting middleware to perform cryptographic operations like signing and encryption in a smart card.'' http://www.openscdp.org/scripts/musclecard/index.html<br />
<br />
<br />
====Compilation====<br />
(De préference sous Linux)<br />
* Télécharger les sources de Muscle<br />
<pre><br />
svn co svn://svn.debian.org/muscleplugins/trunk/MCardApplet<br />
</pre><br />
* Télécharger Java Card 2.1.2 Development Kit: [http://www.oracle.com/technetwork/java/javacard/downloads/index-jsp-138488.html#devkit lien]<br />
* Changer common.xml en modifiant:<br />
<pre><br />
Index: common.xml<br />
===================================================================<br />
--- common.xml (revision 297)<br />
+++ common.xml (working copy)<br />
@@ -62,8 +62,8 @@<br />
executable="${JAVA_BUILD_HOME}/bin/javac"<br />
srcdir="${APPLET_SRC}"<br />
destdir="${OUTPUT_DIR}"<br />
- target="${VM_TARGET_VERSION}"<br />
- source="${VM_SOURCE_VERSION}"><br />
+ target="1.1"<br />
+ source="1.2"><br />
<bootclasspath><br />
<pathelement location="${BOOTCLASSPATH}"/><br />
</bootclasspath><br />
</pre><br />
* Modifier le fichier JCOP.properties<br />
<pre><br />
CARD_NAME=JCOP<br />
JAVA_BUILD_HOME=PATH_VERS_JDK<br />
JC_HOME=PATH_VERS JC212<br />
API_JAR=${JC_HOME}/lib/api21.jar<br />
API_EXPORT_FILES=${JC_HOME}/api21_export_files<br />
</pre><br />
<br />
====Installation====<br />
Deplacer le fichier '''CardEdge.cap''' dans le dossier de GPShell et lancer le script suivant<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
install -file CardEdge.cap -sdAID A000000018434D00 -nvCodeLimit 4000<br />
card_disconnect<br />
release_context<br />
</pre><br />
====Initialisation de l'applet====<br />
Comme spécifié [http://www.opensc-project.org/opensc/wiki/MuscleApplet ici], l'applet à besoin d'être initialisé (par exemple avec opensc):<br />
<br />
'''Attention : les version > 0.11.3 de opensc ne fonctionne pas avec cette carte'''<br />
<br />
<pre><br />
opensc-tool -s 00:A4:04:00:06:A0:00:00:00:01:01 \<br />
-s B0:2A:00:00:38:08:4D:75:73:63:6C:65:30:30:04:01:08:30:30:30:30:30:30:30:30:08:30:30:30:30:30:30:30:30:05:02:08:30:30:30:30:30:30:30:30:08:30:30:30:30:30:30:30:30:00:00:17:70:00:02:01<br />
</pre><br />
<br />
====Initialisation de PKCS15====<br />
<pre><br />
pkcs15-init -C --so-pin 00000000 --so-puk 00000000 --pin 00000000 --puk 00000000<br />
</pre><br />
====Changer le code PIN====<br />
<pre><br />
pkcs15-tool --change-pin<br />
</pre><br />
====Générer clés RSA/2048bits====<br />
<pre><br />
pkcs15-init --generate-key rsa/2048 --auth-id ff<br />
</pre><br />
====Générer certificat auto-signé====<br />
Récupérer le slot du lecteur<br />
<pre><br />
pkcs11-tool --list-slots<br />
</pre><br />
Générer avec openssl:<br />
<pre><br />
openssl<br />
engine dynamic -pre SO_PATH:/usr/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:opensc-pkcs11.so<br />
req -engine pkcs11 -new -key slot_8-id_45 -keyform engine -x509 -out cert.pem -text<br />
</pre><br />
Ajouter le certificat dans la carte<br />
<pre><br />
pkcs15-init --store-certificate cert.pem --auth-id ff --id 45 --format pem<br />
</pre></div>
Diorcety
https://air.imag.fr/index.php?title=JavaCard&diff=3230
JavaCard
2011-10-20T19:02:24Z
<p>Diorcety: /* Initialisation de l'applet */</p>
<hr />
<div>JavaCard est un canevas d’exécution d'application pour carte à puce développé en Java.<br />
<br />
==Les APIs==<br />
* Python http://pyscard.sourceforge.net/<br />
* Java [[Javax.smartcardio]]<br />
* Ada http://www.nongnu.org/pcscada/<br />
* C#<br />
* C/C++<br />
<br />
==Les outils==<br />
*[http://sourceforge.net/projects/globalplatform/ GPShell]<br />
*[http://www.linuxnet.com/musclecard/index.html OpenSC]<br />
*[http://www.opensc-project.org/opensc MUSCLE]<br />
<br />
==Global Platform==<br />
Global Platform est un standard permettant l'installation de cardapplets.<br />
<br />
==Carte étudiante (ancienne génération)==<br />
[https://2009.jres.org/soumission/papers/render/pdf/135.pdf Présentation de la carte]<br />
===Script GPShell pour lister les card applets===<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
get_status -element 20<br />
card_disconnect<br />
release_context<br />
</pre><br />
<br />
===Script GPShell pour lister les card applets sélectionnables===<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
get_status -element 40<br />
card_disconnect<br />
release_context<br />
</pre><br />
<br />
===Application Java pour lister quelques informations de la carte===<br />
<pre><br />
package fr.imag.javacard;<br />
<br />
import javax.smartcardio.*;<br />
import java.util.*;<br />
<br />
public class Main {<br />
static class Util {<br />
static final String HEXES = "0123456789ABCDEF";<br />
<br />
public static String getHex(byte[] raw) {<br />
if (raw == null) {<br />
return null;<br />
}<br />
final StringBuilder hex = new StringBuilder(2 * raw.length);<br />
for (final byte b : raw) {<br />
hex.append(HEXES.charAt((b & 0xF0) >> 4))<br />
.append(HEXES.charAt((b & 0x0F)));<br />
}<br />
return hex.toString();<br />
}<br />
}<br />
<br />
private static byte[] appletAID = {0x55, 0x6E, 0x69, 0x76, 0x2E, 0x55, 0x4A, 0x46};<br />
private final static byte INS_SELECT = (byte) 0xA4;<br />
private final static byte INS_GETDATA = (byte) 0xCA;<br />
<br />
static class Command {<br />
String description;<br />
<br />
Command(String description) {<br />
this.description = description;<br />
}<br />
}<br />
<br />
private static final Map<Integer, Command> COMMAND_MAP =<br />
Collections.unmodifiableMap(new HashMap<Integer, Command>() {{<br />
put(1, new Command("ID(?)"));<br />
put(2, new Command("Version(?)"));<br />
put(3, new Command("(?)"));<br />
put(4, new Command("INE"));<br />
put(5, new Command("Creation(?)"));<br />
put(6, new Command("Update(?)"));<br />
}});<br />
<br />
public static CardTerminal selectCardTerminal() throws Exception {<br />
Scanner in = new Scanner(System.in);<br />
TerminalFactory tf = TerminalFactory.getDefault();<br />
List<CardTerminal> ctlist = null;<br />
ctlist = tf.terminals().list();<br />
if (ctlist.size() == 0) {<br />
throw new Exception("No reader present");<br />
}<br />
if (ctlist.size() == 1) {<br />
return ctlist.get(0);<br />
}<br />
<br />
int index = 0;<br />
do {<br />
<br />
System.out.println("Readers:");<br />
System.out.println("============================================");<br />
for (CardTerminal ct : ctlist) {<br />
System.out.println(index++ + ": " + ct.getName());<br />
}<br />
System.out.print("Select a reader:");<br />
index = in.nextInt();<br />
} while (index < 0 || index >= ctlist.size());<br />
<br />
return ctlist.get(index);<br />
}<br />
<br />
public static void selectApplication(CardChannel cc) throws Exception {<br />
System.out.println("Selecting \"Univ.UJF\" application");<br />
<br />
CommandAPDU apdu = new CommandAPDU(<br />
0x00, INS_SELECT,<br />
0x4, 0x0,<br />
appletAID);<br />
<br />
ResponseAPDU rapdu = cc.transmit(apdu);<br />
if (rapdu.getSW() != 0x9000) {<br />
throw new Exception("Can't select \"Univ.UJF\" application: "<br />
+ Integer.toHexString(rapdu.getSW()));<br />
}<br />
<br />
}<br />
<br />
public static void main(String[] args) {<br />
try {<br />
CardTerminal ct = selectCardTerminal();<br />
Card c = ct.connect("T=0");<br />
ATR atr = c.getATR();<br />
System.out.println("ATR : " + Util.getHex(atr.getBytes()));<br />
CardChannel cc = c.getBasicChannel();<br />
<br />
selectApplication(cc);<br />
<br />
for (int id : COMMAND_MAP.keySet()) {<br />
Command cmd = COMMAND_MAP.get(id);<br />
CommandAPDU apdu = new CommandAPDU(<br />
0x00, INS_GETDATA,<br />
(byte) id, 0x00, new byte[]{0x01});<br />
<br />
ResponseAPDU rapdu = cc.transmit(apdu);<br />
if (rapdu.getSW() != 0x9000) {<br />
throw new Exception("Can't get data (" + id + "): "<br />
+ Integer.toHexString(rapdu.getSW()));<br />
}<br />
System.out.println(cmd.description + ":"<br />
+ new String(rapdu.getData()));<br />
}<br />
} catch (Exception e) {<br />
<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
</pre><br />
===MuscleCard pour la carte étudiante===<br />
<br />
''MuscleCard is an open source project hosted at the M.U.S.C.L.E website. It aims to develop a JavaCard applet and supporting middleware to perform cryptographic operations like signing and encryption in a smart card.'' http://www.openscdp.org/scripts/musclecard/index.html<br />
<br />
<br />
====Compilation====<br />
(De préference sous Linux)<br />
* Télécharger les sources de Muscle<br />
<pre><br />
svn co svn://svn.debian.org/muscleplugins/trunk/MCardApplet<br />
</pre><br />
* Télécharger Java Card 2.1.2 Development Kit: [http://www.oracle.com/technetwork/java/javacard/downloads/index-jsp-138488.html#devkit lien]<br />
* Changer common.xml en modifiant:<br />
<pre><br />
Index: common.xml<br />
===================================================================<br />
--- common.xml (revision 297)<br />
+++ common.xml (working copy)<br />
@@ -62,8 +62,8 @@<br />
executable="${JAVA_BUILD_HOME}/bin/javac"<br />
srcdir="${APPLET_SRC}"<br />
destdir="${OUTPUT_DIR}"<br />
- target="${VM_TARGET_VERSION}"<br />
- source="${VM_SOURCE_VERSION}"><br />
+ target="1.1"<br />
+ source="1.2"><br />
<bootclasspath><br />
<pathelement location="${BOOTCLASSPATH}"/><br />
</bootclasspath><br />
</pre><br />
* Modifier le fichier JCOP.properties<br />
<pre><br />
CARD_NAME=JCOP<br />
JAVA_BUILD_HOME=PATH_VERS_JDK<br />
JC_HOME=PATH_VERS JC212<br />
API_JAR=${JC_HOME}/lib/api21.jar<br />
API_EXPORT_FILES=${JC_HOME}/api21_export_files<br />
</pre><br />
<br />
====Installation====<br />
Deplacer le fichier '''CardEdge.cap''' dans le dossier de GPShell et lancer le script suivant<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
install -file CardEdge.cap -sdAID A000000018434D00 -nvCodeLimit 4000<br />
card_disconnect<br />
release_context<br />
</pre><br />
====Initialisation de l'applet====<br />
Comme spécifié [http://www.opensc-project.org/opensc/wiki/MuscleApplet ici], l'applet à besoin d'être initialisé (par exemple avec opensc):<br />
<br />
'''Attention : la version > 0.11.3 de opensc ne fonctionne pas avec cette carte'''<br />
<br />
<pre><br />
opensc-tool -s 00:A4:04:00:06:A0:00:00:00:01:01 \<br />
-s B0:2A:00:00:38:08:4D:75:73:63:6C:65:30:30:04:01:08:30:30:30:30:30:30:30:30:08:30:30:30:30:30:30:30:30:05:02:08:30:30:30:30:30:30:30:30:08:30:30:30:30:30:30:30:30:00:00:17:70:00:02:01<br />
</pre><br />
<br />
====Initialisation de PKCS15====<br />
<pre><br />
pkcs15-init -C --so-pin 00000000 --so-puk 00000000 --pin 00000000 --puk 00000000<br />
</pre><br />
====Changer le code PIN====<br />
<pre><br />
pkcs15-tool --change-pin<br />
</pre><br />
====Générer clés RSA/2048bits====<br />
<pre><br />
pkcs15-init --generate-key rsa/2048 --auth-id ff<br />
</pre><br />
====Générer certificat auto-signé====<br />
Récupérer le slot du lecteur<br />
<pre><br />
pkcs11-tool --list-slots<br />
</pre><br />
Générer avec openssl:<br />
<pre><br />
openssl<br />
engine dynamic -pre SO_PATH:/usr/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:opensc-pkcs11.so<br />
req -engine pkcs11 -new -key slot_8-id_45 -keyform engine -x509 -out cert.pem -text<br />
</pre><br />
Ajouter le certificat dans la carte<br />
<pre><br />
pkcs15-init --store-certificate cert.pem --auth-id ff --id 45 --format pem<br />
</pre></div>
Diorcety
https://air.imag.fr/index.php?title=JavaCard&diff=3229
JavaCard
2011-10-20T19:02:05Z
<p>Diorcety: /* Initialisation de l'applet */</p>
<hr />
<div>JavaCard est un canevas d’exécution d'application pour carte à puce développé en Java.<br />
<br />
==Les APIs==<br />
* Python http://pyscard.sourceforge.net/<br />
* Java [[Javax.smartcardio]]<br />
* Ada http://www.nongnu.org/pcscada/<br />
* C#<br />
* C/C++<br />
<br />
==Les outils==<br />
*[http://sourceforge.net/projects/globalplatform/ GPShell]<br />
*[http://www.linuxnet.com/musclecard/index.html OpenSC]<br />
*[http://www.opensc-project.org/opensc MUSCLE]<br />
<br />
==Global Platform==<br />
Global Platform est un standard permettant l'installation de cardapplets.<br />
<br />
==Carte étudiante (ancienne génération)==<br />
[https://2009.jres.org/soumission/papers/render/pdf/135.pdf Présentation de la carte]<br />
===Script GPShell pour lister les card applets===<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
get_status -element 20<br />
card_disconnect<br />
release_context<br />
</pre><br />
<br />
===Script GPShell pour lister les card applets sélectionnables===<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
get_status -element 40<br />
card_disconnect<br />
release_context<br />
</pre><br />
<br />
===Application Java pour lister quelques informations de la carte===<br />
<pre><br />
package fr.imag.javacard;<br />
<br />
import javax.smartcardio.*;<br />
import java.util.*;<br />
<br />
public class Main {<br />
static class Util {<br />
static final String HEXES = "0123456789ABCDEF";<br />
<br />
public static String getHex(byte[] raw) {<br />
if (raw == null) {<br />
return null;<br />
}<br />
final StringBuilder hex = new StringBuilder(2 * raw.length);<br />
for (final byte b : raw) {<br />
hex.append(HEXES.charAt((b & 0xF0) >> 4))<br />
.append(HEXES.charAt((b & 0x0F)));<br />
}<br />
return hex.toString();<br />
}<br />
}<br />
<br />
private static byte[] appletAID = {0x55, 0x6E, 0x69, 0x76, 0x2E, 0x55, 0x4A, 0x46};<br />
private final static byte INS_SELECT = (byte) 0xA4;<br />
private final static byte INS_GETDATA = (byte) 0xCA;<br />
<br />
static class Command {<br />
String description;<br />
<br />
Command(String description) {<br />
this.description = description;<br />
}<br />
}<br />
<br />
private static final Map<Integer, Command> COMMAND_MAP =<br />
Collections.unmodifiableMap(new HashMap<Integer, Command>() {{<br />
put(1, new Command("ID(?)"));<br />
put(2, new Command("Version(?)"));<br />
put(3, new Command("(?)"));<br />
put(4, new Command("INE"));<br />
put(5, new Command("Creation(?)"));<br />
put(6, new Command("Update(?)"));<br />
}});<br />
<br />
public static CardTerminal selectCardTerminal() throws Exception {<br />
Scanner in = new Scanner(System.in);<br />
TerminalFactory tf = TerminalFactory.getDefault();<br />
List<CardTerminal> ctlist = null;<br />
ctlist = tf.terminals().list();<br />
if (ctlist.size() == 0) {<br />
throw new Exception("No reader present");<br />
}<br />
if (ctlist.size() == 1) {<br />
return ctlist.get(0);<br />
}<br />
<br />
int index = 0;<br />
do {<br />
<br />
System.out.println("Readers:");<br />
System.out.println("============================================");<br />
for (CardTerminal ct : ctlist) {<br />
System.out.println(index++ + ": " + ct.getName());<br />
}<br />
System.out.print("Select a reader:");<br />
index = in.nextInt();<br />
} while (index < 0 || index >= ctlist.size());<br />
<br />
return ctlist.get(index);<br />
}<br />
<br />
public static void selectApplication(CardChannel cc) throws Exception {<br />
System.out.println("Selecting \"Univ.UJF\" application");<br />
<br />
CommandAPDU apdu = new CommandAPDU(<br />
0x00, INS_SELECT,<br />
0x4, 0x0,<br />
appletAID);<br />
<br />
ResponseAPDU rapdu = cc.transmit(apdu);<br />
if (rapdu.getSW() != 0x9000) {<br />
throw new Exception("Can't select \"Univ.UJF\" application: "<br />
+ Integer.toHexString(rapdu.getSW()));<br />
}<br />
<br />
}<br />
<br />
public static void main(String[] args) {<br />
try {<br />
CardTerminal ct = selectCardTerminal();<br />
Card c = ct.connect("T=0");<br />
ATR atr = c.getATR();<br />
System.out.println("ATR : " + Util.getHex(atr.getBytes()));<br />
CardChannel cc = c.getBasicChannel();<br />
<br />
selectApplication(cc);<br />
<br />
for (int id : COMMAND_MAP.keySet()) {<br />
Command cmd = COMMAND_MAP.get(id);<br />
CommandAPDU apdu = new CommandAPDU(<br />
0x00, INS_GETDATA,<br />
(byte) id, 0x00, new byte[]{0x01});<br />
<br />
ResponseAPDU rapdu = cc.transmit(apdu);<br />
if (rapdu.getSW() != 0x9000) {<br />
throw new Exception("Can't get data (" + id + "): "<br />
+ Integer.toHexString(rapdu.getSW()));<br />
}<br />
System.out.println(cmd.description + ":"<br />
+ new String(rapdu.getData()));<br />
}<br />
} catch (Exception e) {<br />
<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
</pre><br />
===MuscleCard pour la carte étudiante===<br />
<br />
''MuscleCard is an open source project hosted at the M.U.S.C.L.E website. It aims to develop a JavaCard applet and supporting middleware to perform cryptographic operations like signing and encryption in a smart card.'' http://www.openscdp.org/scripts/musclecard/index.html<br />
<br />
<br />
====Compilation====<br />
(De préference sous Linux)<br />
* Télécharger les sources de Muscle<br />
<pre><br />
svn co svn://svn.debian.org/muscleplugins/trunk/MCardApplet<br />
</pre><br />
* Télécharger Java Card 2.1.2 Development Kit: [http://www.oracle.com/technetwork/java/javacard/downloads/index-jsp-138488.html#devkit lien]<br />
* Changer common.xml en modifiant:<br />
<pre><br />
Index: common.xml<br />
===================================================================<br />
--- common.xml (revision 297)<br />
+++ common.xml (working copy)<br />
@@ -62,8 +62,8 @@<br />
executable="${JAVA_BUILD_HOME}/bin/javac"<br />
srcdir="${APPLET_SRC}"<br />
destdir="${OUTPUT_DIR}"<br />
- target="${VM_TARGET_VERSION}"<br />
- source="${VM_SOURCE_VERSION}"><br />
+ target="1.1"<br />
+ source="1.2"><br />
<bootclasspath><br />
<pathelement location="${BOOTCLASSPATH}"/><br />
</bootclasspath><br />
</pre><br />
* Modifier le fichier JCOP.properties<br />
<pre><br />
CARD_NAME=JCOP<br />
JAVA_BUILD_HOME=PATH_VERS_JDK<br />
JC_HOME=PATH_VERS JC212<br />
API_JAR=${JC_HOME}/lib/api21.jar<br />
API_EXPORT_FILES=${JC_HOME}/api21_export_files<br />
</pre><br />
<br />
====Installation====<br />
Deplacer le fichier '''CardEdge.cap''' dans le dossier de GPShell et lancer le script suivant<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
install -file CardEdge.cap -sdAID A000000018434D00 -nvCodeLimit 4000<br />
card_disconnect<br />
release_context<br />
</pre><br />
====Initialisation de l'applet====<br />
Comme spécifié [http://www.opensc-project.org/opensc/wiki/MuscleApplet ici], l'applet à besoin d'être initialisé (par exemple avec opensc):<br />
'''la version > 0.11.3 de opensc ne fonctionne pas avec cette carte'''<br />
<pre><br />
opensc-tool -s 00:A4:04:00:06:A0:00:00:00:01:01 \<br />
-s B0:2A:00:00:38:08:4D:75:73:63:6C:65:30:30:04:01:08:30:30:30:30:30:30:30:30:08:30:30:30:30:30:30:30:30:05:02:08:30:30:30:30:30:30:30:30:08:30:30:30:30:30:30:30:30:00:00:17:70:00:02:01<br />
</pre><br />
<br />
====Initialisation de PKCS15====<br />
<pre><br />
pkcs15-init -C --so-pin 00000000 --so-puk 00000000 --pin 00000000 --puk 00000000<br />
</pre><br />
====Changer le code PIN====<br />
<pre><br />
pkcs15-tool --change-pin<br />
</pre><br />
====Générer clés RSA/2048bits====<br />
<pre><br />
pkcs15-init --generate-key rsa/2048 --auth-id ff<br />
</pre><br />
====Générer certificat auto-signé====<br />
Récupérer le slot du lecteur<br />
<pre><br />
pkcs11-tool --list-slots<br />
</pre><br />
Générer avec openssl:<br />
<pre><br />
openssl<br />
engine dynamic -pre SO_PATH:/usr/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:opensc-pkcs11.so<br />
req -engine pkcs11 -new -key slot_8-id_45 -keyform engine -x509 -out cert.pem -text<br />
</pre><br />
Ajouter le certificat dans la carte<br />
<pre><br />
pkcs15-init --store-certificate cert.pem --auth-id ff --id 45 --format pem<br />
</pre></div>
Diorcety
https://air.imag.fr/index.php?title=R%C3%A9seaux_Sociaux_Physiques&diff=2042
Réseaux Sociaux Physiques
2011-04-12T22:12:31Z
<p>Diorcety: /* Interface Web */</p>
<hr />
<div>* UE/Module: Projet M2M M2PGI<br />
* Enseignants: Didier Donsez<br />
* Etudiants M2PGI: Yann Diorcet (chef de projet), Amina Ben-Yelles<br />
<br />
==Description==<br />
Le domaine d'application est la compréhension des maladies nosocomiales : il s'agit d'établir une cartographie des rencontres physiques entre patients hospitalisés et professionnels de santé.<br />
<br />
La cartographie est constituée incrémentalement par les noeuds lors qui sont en contact avec un puit (capteur relié à un hôte fixe). Les mesures sont remontées par un médiateur construit sur [[Cilia]]<br />
<br />
Mots-clé : wireless sensor networks, delay tolerant networks, opportunistic networks, opportunistic computing<br />
<br />
'''Autres applications:'''<br />
* [http://processors.wiki.ti.com/index.php/Avalanche_Victim_Seeker Avalanche Victim Seeker]<br />
* Géolocalisation Zigbee<br />
<br />
<br />
'''Lire'''<br />
* workshop on Data driven dynamical networks (Oct 2010) http://www.cpt.univ-mrs.fr/~barrat/leshouches.html<br />
* MOSAR (Mastering hOSpital Antimicrobial Resistance in Europe) https://www.mosar-sic.org/mosar/en-gb/index<br />
==Composition==<br />
[[File:DiagrammeRS.png]]<br />
* Collecteur<br />
* SunSpot<br />
* Mediateur<br />
* PC<br />
<br />
==Communication entre Sunspot==<br />
Chaque Sunspot ayant un adresse unique, on utilise celle-ci pour enregistrer les informations sur le temps qu'ils ont été en contact. Pour ce faire, chaque Sunspot émet un paquet de type broadcast sur un canal toutes les secondes. Si ce paquet est reçu (avec une intensité de réception supérieur à une limite fixée) par un autre Sunspot, celui-ci le traite.<br />
Ce traitement implique que si la condition suivante est remplie, il incrémente de 1 le compteur de "contact" qu'il possèdent pour le Sunspot émetteur.<br />
===Répartition===<br />
Les conditions sont:<br />
*Si la somme de l'adresse de l’émetteur et celle du récepteur est impair, le récepteur l'enregistre si il possèdent l'adresse la plus petite.<br />
*Sinon le récepteur enregistre l'information de contact si son adresse est la plus grande.<br />
[[File:NetworkRS.png]]<br />
<br />
===Volume de données===<br />
Ces conditions permet une répartition des informations entre tout les Sunspots. En effet si notre réseau de Sunspots est composé de N Sunspot on aura:<br />
*Un maximum de N(N-1)/2 informations sur les temps de contact à sauvegarder.<br />
*Un Sunspot aura au maximum a sauvegarder (N-1)/2 temps de contact.<br />
<br />
==Communication avec le Collecteur==<br />
Les collecteurs communique avec le serveur grâce a une chaîne de caractères en format XML qui est construite de la façon suivante:<br />
<pre><br />
<Contact><peerA>1111</peerA><peerB>2222</peerB><time>6</time></Contact><br />
</pre><br />
<br />
==Médiation(Cilia)==<br />
La chaîne de médiation mis en place grâce à Cilia est composé des éléments suivant:<br />
* Serveur: Récupère les données en XML venant des Collecteurs et les transmet au UnMarshaller XML.<br />
* XML UnMarshaller: Transforme la chaîne de caractères en format XML, en Objet directement utilisable.<br />
* Core: Contient le code traitant les différentes informations: Par exemple, effectuer l'horodatage des informations.<br />
* Console: Fournit une interface permettant d'avoir des logs sur les informations transitant pas le Core.<br />
* BDD: Suivant le type de donnée de l'objet transitant, cet objet est rendu persistant dans une base de donnée. <br />
* JSON Marshaller: Ce compostant convertit l'objet en chaîne de caractères en format JSON(directement utilisable par JavaScript).<br />
* Feed Servlet: Servlet fournissant les informations en temps réel.<br />
<br />
==Interface Web==<br />
Une interface Web permet de visualiser les données collectées par le(s) collecteur(s). Les technologies utilisées sont:<br />
* HTML + JS/AJAX + SVG<br />
* Pages JSP & Servlets<br />
[[File:Feeds.png|thumb|center]]<br />
[[File:Contagion.png|thumb|center]]<br />
[[File:Node.png|thumb|center]]<br />
<br />
==Equipement==<br />
* 5 kits [[SunSPOT]]<br />
<br />
[[Image:sunspots1.jpg|400px]] [[Image:sunspots2.jpg|400px]]<br />
<br />
==Logiciels==<br />
* [[Cilia]]<br />
* [[Protovis]]</div>
Diorcety
https://air.imag.fr/index.php?title=R%C3%A9seaux_Sociaux_Physiques&diff=2041
Réseaux Sociaux Physiques
2011-04-12T22:12:15Z
<p>Diorcety: /* Interface Web */</p>
<hr />
<div>* UE/Module: Projet M2M M2PGI<br />
* Enseignants: Didier Donsez<br />
* Etudiants M2PGI: Yann Diorcet (chef de projet), Amina Ben-Yelles<br />
<br />
==Description==<br />
Le domaine d'application est la compréhension des maladies nosocomiales : il s'agit d'établir une cartographie des rencontres physiques entre patients hospitalisés et professionnels de santé.<br />
<br />
La cartographie est constituée incrémentalement par les noeuds lors qui sont en contact avec un puit (capteur relié à un hôte fixe). Les mesures sont remontées par un médiateur construit sur [[Cilia]]<br />
<br />
Mots-clé : wireless sensor networks, delay tolerant networks, opportunistic networks, opportunistic computing<br />
<br />
'''Autres applications:'''<br />
* [http://processors.wiki.ti.com/index.php/Avalanche_Victim_Seeker Avalanche Victim Seeker]<br />
* Géolocalisation Zigbee<br />
<br />
<br />
'''Lire'''<br />
* workshop on Data driven dynamical networks (Oct 2010) http://www.cpt.univ-mrs.fr/~barrat/leshouches.html<br />
* MOSAR (Mastering hOSpital Antimicrobial Resistance in Europe) https://www.mosar-sic.org/mosar/en-gb/index<br />
==Composition==<br />
[[File:DiagrammeRS.png]]<br />
* Collecteur<br />
* SunSpot<br />
* Mediateur<br />
* PC<br />
<br />
==Communication entre Sunspot==<br />
Chaque Sunspot ayant un adresse unique, on utilise celle-ci pour enregistrer les informations sur le temps qu'ils ont été en contact. Pour ce faire, chaque Sunspot émet un paquet de type broadcast sur un canal toutes les secondes. Si ce paquet est reçu (avec une intensité de réception supérieur à une limite fixée) par un autre Sunspot, celui-ci le traite.<br />
Ce traitement implique que si la condition suivante est remplie, il incrémente de 1 le compteur de "contact" qu'il possèdent pour le Sunspot émetteur.<br />
===Répartition===<br />
Les conditions sont:<br />
*Si la somme de l'adresse de l’émetteur et celle du récepteur est impair, le récepteur l'enregistre si il possèdent l'adresse la plus petite.<br />
*Sinon le récepteur enregistre l'information de contact si son adresse est la plus grande.<br />
[[File:NetworkRS.png]]<br />
<br />
===Volume de données===<br />
Ces conditions permet une répartition des informations entre tout les Sunspots. En effet si notre réseau de Sunspots est composé de N Sunspot on aura:<br />
*Un maximum de N(N-1)/2 informations sur les temps de contact à sauvegarder.<br />
*Un Sunspot aura au maximum a sauvegarder (N-1)/2 temps de contact.<br />
<br />
==Communication avec le Collecteur==<br />
Les collecteurs communique avec le serveur grâce a une chaîne de caractères en format XML qui est construite de la façon suivante:<br />
<pre><br />
<Contact><peerA>1111</peerA><peerB>2222</peerB><time>6</time></Contact><br />
</pre><br />
<br />
==Médiation(Cilia)==<br />
La chaîne de médiation mis en place grâce à Cilia est composé des éléments suivant:<br />
* Serveur: Récupère les données en XML venant des Collecteurs et les transmet au UnMarshaller XML.<br />
* XML UnMarshaller: Transforme la chaîne de caractères en format XML, en Objet directement utilisable.<br />
* Core: Contient le code traitant les différentes informations: Par exemple, effectuer l'horodatage des informations.<br />
* Console: Fournit une interface permettant d'avoir des logs sur les informations transitant pas le Core.<br />
* BDD: Suivant le type de donnée de l'objet transitant, cet objet est rendu persistant dans une base de donnée. <br />
* JSON Marshaller: Ce compostant convertit l'objet en chaîne de caractères en format JSON(directement utilisable par JavaScript).<br />
* Feed Servlet: Servlet fournissant les informations en temps réel.<br />
<br />
==Interface Web==<br />
Une interface Web permet de visualiser les données collectées par le(s) collecteur(s). Les technologies utilisées sont:<br />
* HTML + JS/AJAX + SVG<br />
* Pages JSP & Servlets<br />
[[File:Feeds.png|thumb|left]]<br />
[[File:Contagion.png|thumb|left]]<br />
[[File:Node.png|thumb|left]]<br />
<br />
==Equipement==<br />
* 5 kits [[SunSPOT]]<br />
<br />
[[Image:sunspots1.jpg|400px]] [[Image:sunspots2.jpg|400px]]<br />
<br />
==Logiciels==<br />
* [[Cilia]]<br />
* [[Protovis]]</div>
Diorcety
https://air.imag.fr/index.php?title=R%C3%A9seaux_Sociaux_Physiques&diff=2040
Réseaux Sociaux Physiques
2011-04-12T22:11:13Z
<p>Diorcety: /* Interface Web */</p>
<hr />
<div>* UE/Module: Projet M2M M2PGI<br />
* Enseignants: Didier Donsez<br />
* Etudiants M2PGI: Yann Diorcet (chef de projet), Amina Ben-Yelles<br />
<br />
==Description==<br />
Le domaine d'application est la compréhension des maladies nosocomiales : il s'agit d'établir une cartographie des rencontres physiques entre patients hospitalisés et professionnels de santé.<br />
<br />
La cartographie est constituée incrémentalement par les noeuds lors qui sont en contact avec un puit (capteur relié à un hôte fixe). Les mesures sont remontées par un médiateur construit sur [[Cilia]]<br />
<br />
Mots-clé : wireless sensor networks, delay tolerant networks, opportunistic networks, opportunistic computing<br />
<br />
'''Autres applications:'''<br />
* [http://processors.wiki.ti.com/index.php/Avalanche_Victim_Seeker Avalanche Victim Seeker]<br />
* Géolocalisation Zigbee<br />
<br />
<br />
'''Lire'''<br />
* workshop on Data driven dynamical networks (Oct 2010) http://www.cpt.univ-mrs.fr/~barrat/leshouches.html<br />
* MOSAR (Mastering hOSpital Antimicrobial Resistance in Europe) https://www.mosar-sic.org/mosar/en-gb/index<br />
==Composition==<br />
[[File:DiagrammeRS.png]]<br />
* Collecteur<br />
* SunSpot<br />
* Mediateur<br />
* PC<br />
<br />
==Communication entre Sunspot==<br />
Chaque Sunspot ayant un adresse unique, on utilise celle-ci pour enregistrer les informations sur le temps qu'ils ont été en contact. Pour ce faire, chaque Sunspot émet un paquet de type broadcast sur un canal toutes les secondes. Si ce paquet est reçu (avec une intensité de réception supérieur à une limite fixée) par un autre Sunspot, celui-ci le traite.<br />
Ce traitement implique que si la condition suivante est remplie, il incrémente de 1 le compteur de "contact" qu'il possèdent pour le Sunspot émetteur.<br />
===Répartition===<br />
Les conditions sont:<br />
*Si la somme de l'adresse de l’émetteur et celle du récepteur est impair, le récepteur l'enregistre si il possèdent l'adresse la plus petite.<br />
*Sinon le récepteur enregistre l'information de contact si son adresse est la plus grande.<br />
[[File:NetworkRS.png]]<br />
<br />
===Volume de données===<br />
Ces conditions permet une répartition des informations entre tout les Sunspots. En effet si notre réseau de Sunspots est composé de N Sunspot on aura:<br />
*Un maximum de N(N-1)/2 informations sur les temps de contact à sauvegarder.<br />
*Un Sunspot aura au maximum a sauvegarder (N-1)/2 temps de contact.<br />
<br />
==Communication avec le Collecteur==<br />
Les collecteurs communique avec le serveur grâce a une chaîne de caractères en format XML qui est construite de la façon suivante:<br />
<pre><br />
<Contact><peerA>1111</peerA><peerB>2222</peerB><time>6</time></Contact><br />
</pre><br />
<br />
==Médiation(Cilia)==<br />
La chaîne de médiation mis en place grâce à Cilia est composé des éléments suivant:<br />
* Serveur: Récupère les données en XML venant des Collecteurs et les transmet au UnMarshaller XML.<br />
* XML UnMarshaller: Transforme la chaîne de caractères en format XML, en Objet directement utilisable.<br />
* Core: Contient le code traitant les différentes informations: Par exemple, effectuer l'horodatage des informations.<br />
* Console: Fournit une interface permettant d'avoir des logs sur les informations transitant pas le Core.<br />
* BDD: Suivant le type de donnée de l'objet transitant, cet objet est rendu persistant dans une base de donnée. <br />
* JSON Marshaller: Ce compostant convertit l'objet en chaîne de caractères en format JSON(directement utilisable par JavaScript).<br />
* Feed Servlet: Servlet fournissant les informations en temps réel.<br />
<br />
==Interface Web==<br />
Une interface Web permet de visualiser les données collectées par le(s) collecteur(s). Les technologies utilisées sont:<br />
* HTML + JS/AJAX + SVG<br />
* Pages JSP & Servlets<br />
[[File:Feeds.png|thumb]]<br />
[[File:Contagion.png|thumb]]<br />
[[File:Node.png|thumb]]<br />
<br />
==Equipement==<br />
* 5 kits [[SunSPOT]]<br />
<br />
[[Image:sunspots1.jpg|400px]] [[Image:sunspots2.jpg|400px]]<br />
<br />
==Logiciels==<br />
* [[Cilia]]<br />
* [[Protovis]]</div>
Diorcety
https://air.imag.fr/index.php?title=File:Node.png&diff=2039
File:Node.png
2011-04-12T22:09:41Z
<p>Diorcety: Node SocialPhy</p>
<hr />
<div>Node SocialPhy</div>
Diorcety
https://air.imag.fr/index.php?title=File:Contagion.png&diff=2038
File:Contagion.png
2011-04-12T22:09:09Z
<p>Diorcety: Contagion SocialPhy</p>
<hr />
<div>Contagion SocialPhy</div>
Diorcety
https://air.imag.fr/index.php?title=R%C3%A9seaux_Sociaux_Physiques&diff=2037
Réseaux Sociaux Physiques
2011-04-12T22:07:47Z
<p>Diorcety: /* Interface Web */</p>
<hr />
<div>* UE/Module: Projet M2M M2PGI<br />
* Enseignants: Didier Donsez<br />
* Etudiants M2PGI: Yann Diorcet (chef de projet), Amina Ben-Yelles<br />
<br />
==Description==<br />
Le domaine d'application est la compréhension des maladies nosocomiales : il s'agit d'établir une cartographie des rencontres physiques entre patients hospitalisés et professionnels de santé.<br />
<br />
La cartographie est constituée incrémentalement par les noeuds lors qui sont en contact avec un puit (capteur relié à un hôte fixe). Les mesures sont remontées par un médiateur construit sur [[Cilia]]<br />
<br />
Mots-clé : wireless sensor networks, delay tolerant networks, opportunistic networks, opportunistic computing<br />
<br />
'''Autres applications:'''<br />
* [http://processors.wiki.ti.com/index.php/Avalanche_Victim_Seeker Avalanche Victim Seeker]<br />
* Géolocalisation Zigbee<br />
<br />
<br />
'''Lire'''<br />
* workshop on Data driven dynamical networks (Oct 2010) http://www.cpt.univ-mrs.fr/~barrat/leshouches.html<br />
* MOSAR (Mastering hOSpital Antimicrobial Resistance in Europe) https://www.mosar-sic.org/mosar/en-gb/index<br />
==Composition==<br />
[[File:DiagrammeRS.png]]<br />
* Collecteur<br />
* SunSpot<br />
* Mediateur<br />
* PC<br />
<br />
==Communication entre Sunspot==<br />
Chaque Sunspot ayant un adresse unique, on utilise celle-ci pour enregistrer les informations sur le temps qu'ils ont été en contact. Pour ce faire, chaque Sunspot émet un paquet de type broadcast sur un canal toutes les secondes. Si ce paquet est reçu (avec une intensité de réception supérieur à une limite fixée) par un autre Sunspot, celui-ci le traite.<br />
Ce traitement implique que si la condition suivante est remplie, il incrémente de 1 le compteur de "contact" qu'il possèdent pour le Sunspot émetteur.<br />
===Répartition===<br />
Les conditions sont:<br />
*Si la somme de l'adresse de l’émetteur et celle du récepteur est impair, le récepteur l'enregistre si il possèdent l'adresse la plus petite.<br />
*Sinon le récepteur enregistre l'information de contact si son adresse est la plus grande.<br />
[[File:NetworkRS.png]]<br />
<br />
===Volume de données===<br />
Ces conditions permet une répartition des informations entre tout les Sunspots. En effet si notre réseau de Sunspots est composé de N Sunspot on aura:<br />
*Un maximum de N(N-1)/2 informations sur les temps de contact à sauvegarder.<br />
*Un Sunspot aura au maximum a sauvegarder (N-1)/2 temps de contact.<br />
<br />
==Communication avec le Collecteur==<br />
Les collecteurs communique avec le serveur grâce a une chaîne de caractères en format XML qui est construite de la façon suivante:<br />
<pre><br />
<Contact><peerA>1111</peerA><peerB>2222</peerB><time>6</time></Contact><br />
</pre><br />
<br />
==Médiation(Cilia)==<br />
La chaîne de médiation mis en place grâce à Cilia est composé des éléments suivant:<br />
* Serveur: Récupère les données en XML venant des Collecteurs et les transmet au UnMarshaller XML.<br />
* XML UnMarshaller: Transforme la chaîne de caractères en format XML, en Objet directement utilisable.<br />
* Core: Contient le code traitant les différentes informations: Par exemple, effectuer l'horodatage des informations.<br />
* Console: Fournit une interface permettant d'avoir des logs sur les informations transitant pas le Core.<br />
* BDD: Suivant le type de donnée de l'objet transitant, cet objet est rendu persistant dans une base de donnée. <br />
* JSON Marshaller: Ce compostant convertit l'objet en chaîne de caractères en format JSON(directement utilisable par JavaScript).<br />
* Feed Servlet: Servlet fournissant les informations en temps réel.<br />
<br />
==Interface Web==<br />
Une interface Web permet de visualiser les données collectées par le(s) collecteur(s). Les technologies utilisées sont:<br />
* HTML + JS/AJAX + SVG<br />
* Pages JSP & Servlets<br />
[[File:Feeds.png]]<br />
<br />
==Equipement==<br />
* 5 kits [[SunSPOT]]<br />
<br />
[[Image:sunspots1.jpg|400px]] [[Image:sunspots2.jpg|400px]]<br />
<br />
==Logiciels==<br />
* [[Cilia]]<br />
* [[Protovis]]</div>
Diorcety
https://air.imag.fr/index.php?title=File:Feeds.png&diff=2036
File:Feeds.png
2011-04-12T22:07:04Z
<p>Diorcety: Feeds SocialPhy</p>
<hr />
<div>Feeds SocialPhy</div>
Diorcety
https://air.imag.fr/index.php?title=R%C3%A9seaux_Sociaux_Physiques&diff=2024
Réseaux Sociaux Physiques
2011-04-12T13:21:58Z
<p>Diorcety: /* Médiation(Cilia) */</p>
<hr />
<div>* UE/Module: Projet M2M M2PGI<br />
* Enseignants: Didier Donsez<br />
* Etudiants M2PGI: Yann Diorcet (chef de projet), Amina Ben-Yelles<br />
<br />
==Description==<br />
Le domaine d'application est la compréhension des maladies nosocomiales : il s'agit d'établir une cartographie des rencontres physiques entre patients hospitalisés et professionnels de santé.<br />
<br />
La cartographie est constituée incrémentalement par les noeuds lors qui sont en contact avec un puit (capteur relié à un hôte fixe). Les mesures sont remontées par un médiateur construit sur [[Cilia]]<br />
<br />
Mots-clé : wireless sensor networks, delay tolerant networks, opportunistic networks, opportunistic computing<br />
<br />
'''Autres applications:'''<br />
* [http://processors.wiki.ti.com/index.php/Avalanche_Victim_Seeker Avalanche Victim Seeker]<br />
* Géolocalisation Zigbee<br />
<br />
<br />
'''Lire'''<br />
* workshop on Data driven dynamical networks (Oct 2010) http://www.cpt.univ-mrs.fr/~barrat/leshouches.html<br />
* MOSAR (Mastering hOSpital Antimicrobial Resistance in Europe) https://www.mosar-sic.org/mosar/en-gb/index<br />
==Composition==<br />
[[File:DiagrammeRS.png]]<br />
* Collecteur<br />
* SunSpot<br />
* Mediateur<br />
* PC<br />
<br />
==Communication entre Sunspot==<br />
Chaque Sunspot ayant un adresse unique, on utilise celle-ci pour enregistrer les informations sur le temps qu'ils ont été en contact. Pour ce faire, chaque Sunspot émet un paquet de type broadcast sur un canal toutes les secondes. Si ce paquet est reçu (avec une intensité de réception supérieur à une limite fixée) par un autre Sunspot, celui-ci le traite.<br />
Ce traitement implique que si la condition suivante est remplie, il incrémente de 1 le compteur de "contact" qu'il possèdent pour le Sunspot émetteur.<br />
===Répartition===<br />
Les conditions sont:<br />
*Si la somme de l'adresse de l’émetteur et celle du récepteur est impair, le récepteur l'enregistre si il possèdent l'adresse la plus petite.<br />
*Sinon le récepteur enregistre l'information de contact si son adresse est la plus grande.<br />
[[File:NetworkRS.png]]<br />
<br />
===Volume de données===<br />
Ces conditions permet une répartition des informations entre tout les Sunspots. En effet si notre réseau de Sunspots est composé de N Sunspot on aura:<br />
*Un maximum de N(N-1)/2 informations sur les temps de contact à sauvegarder.<br />
*Un Sunspot aura au maximum a sauvegarder (N-1)/2 temps de contact.<br />
<br />
==Communication avec le Collecteur==<br />
Les collecteurs communique avec le serveur grâce a une chaîne de caractères en format XML qui est construite de la façon suivante:<br />
<pre><br />
<Contact><peerA>1111</peerA><peerB>2222</peerB><time>6</time></Contact><br />
</pre><br />
<br />
==Médiation(Cilia)==<br />
La chaîne de médiation mis en place grâce à Cilia est composé des éléments suivant:<br />
* Serveur: Récupère les données en XML venant des Collecteurs et les transmet au UnMarshaller XML.<br />
* XML UnMarshaller: Transforme la chaîne de caractères en format XML, en Objet directement utilisable.<br />
* Core: Contient le code traitant les différentes informations: Par exemple, effectuer l'horodatage des informations.<br />
* Console: Fournit une interface permettant d'avoir des logs sur les informations transitant pas le Core.<br />
* BDD: Suivant le type de donnée de l'objet transitant, cet objet est rendu persistant dans une base de donnée. <br />
* JSON Marshaller: Ce compostant convertit l'objet en chaîne de caractères en format JSON(directement utilisable par JavaScript).<br />
* Feed Servlet: Servlet fournissant les informations en temps réel.<br />
<br />
==Interface Web==<br />
Une interface Web permet de visualiser les données collectées par le(s) collecteur(s). Les technologies utilisées sont:<br />
* HTML + JS/AJAX + SVG<br />
* Pages JSP & Servlets<br />
<br />
==Equipement==<br />
* 2 kits [[SunSPOT]]<br />
* Kit [[ez430-RF2480]]<br />
* Kit [[TI' ez430 Chronos]]<br />
* [[STM32VL-Discovery]] + Tracker<br />
* Kit [[ez430-RF2500]]<br />
<br />
==Logiciels==<br />
* [[Cilia]]<br />
* [[JFreeChart]]<br />
* [[GoogleEarthPlugin]]<br />
* [[Protovis]]</div>
Diorcety
https://air.imag.fr/index.php?title=R%C3%A9seaux_Sociaux_Physiques&diff=2023
Réseaux Sociaux Physiques
2011-04-12T13:21:23Z
<p>Diorcety: /* Communication avec le Collecteur */</p>
<hr />
<div>* UE/Module: Projet M2M M2PGI<br />
* Enseignants: Didier Donsez<br />
* Etudiants M2PGI: Yann Diorcet (chef de projet), Amina Ben-Yelles<br />
<br />
==Description==<br />
Le domaine d'application est la compréhension des maladies nosocomiales : il s'agit d'établir une cartographie des rencontres physiques entre patients hospitalisés et professionnels de santé.<br />
<br />
La cartographie est constituée incrémentalement par les noeuds lors qui sont en contact avec un puit (capteur relié à un hôte fixe). Les mesures sont remontées par un médiateur construit sur [[Cilia]]<br />
<br />
Mots-clé : wireless sensor networks, delay tolerant networks, opportunistic networks, opportunistic computing<br />
<br />
'''Autres applications:'''<br />
* [http://processors.wiki.ti.com/index.php/Avalanche_Victim_Seeker Avalanche Victim Seeker]<br />
* Géolocalisation Zigbee<br />
<br />
<br />
'''Lire'''<br />
* workshop on Data driven dynamical networks (Oct 2010) http://www.cpt.univ-mrs.fr/~barrat/leshouches.html<br />
* MOSAR (Mastering hOSpital Antimicrobial Resistance in Europe) https://www.mosar-sic.org/mosar/en-gb/index<br />
==Composition==<br />
[[File:DiagrammeRS.png]]<br />
* Collecteur<br />
* SunSpot<br />
* Mediateur<br />
* PC<br />
<br />
==Communication entre Sunspot==<br />
Chaque Sunspot ayant un adresse unique, on utilise celle-ci pour enregistrer les informations sur le temps qu'ils ont été en contact. Pour ce faire, chaque Sunspot émet un paquet de type broadcast sur un canal toutes les secondes. Si ce paquet est reçu (avec une intensité de réception supérieur à une limite fixée) par un autre Sunspot, celui-ci le traite.<br />
Ce traitement implique que si la condition suivante est remplie, il incrémente de 1 le compteur de "contact" qu'il possèdent pour le Sunspot émetteur.<br />
===Répartition===<br />
Les conditions sont:<br />
*Si la somme de l'adresse de l’émetteur et celle du récepteur est impair, le récepteur l'enregistre si il possèdent l'adresse la plus petite.<br />
*Sinon le récepteur enregistre l'information de contact si son adresse est la plus grande.<br />
[[File:NetworkRS.png]]<br />
<br />
===Volume de données===<br />
Ces conditions permet une répartition des informations entre tout les Sunspots. En effet si notre réseau de Sunspots est composé de N Sunspot on aura:<br />
*Un maximum de N(N-1)/2 informations sur les temps de contact à sauvegarder.<br />
*Un Sunspot aura au maximum a sauvegarder (N-1)/2 temps de contact.<br />
<br />
==Communication avec le Collecteur==<br />
Les collecteurs communique avec le serveur grâce a une chaîne de caractères en format XML qui est construite de la façon suivante:<br />
<pre><br />
<Contact><peerA>1111</peerA><peerB>2222</peerB><time>6</time></Contact><br />
</pre><br />
<br />
==Médiation(Cilia)==<br />
La chaîne de médiation mis en place grâce à Cilia est composé des éléments suivant:<br />
* Serveur: Récupère les données en XML venant des Collecteurs et les transmet au UnMarshaller XML.<br />
* XML UnMarshaller: Transforme la chaîne texte en format XML, en Objet directement utilisable.<br />
* Core: Contient le code traitant les différentes informations: Par exemple, effectuer l'horodatage des informations.<br />
* Console: Fournit une interface permettant d'avoir des logs sur les informations transitant pas le Core.<br />
* BDD: Suivant le type de donnée de l'objet transitant, cet objet est rendu persistant dans une base de donnée. <br />
* JSON Marshaller: Ce compostant convertit l'objet en chaîne texte en format JSON(directement utilisable par JavaScript).<br />
* Feed Servlet: Servlet fournissant les informations en temps réel.<br />
<br />
==Interface Web==<br />
Une interface Web permet de visualiser les données collectées par le(s) collecteur(s). Les technologies utilisées sont:<br />
* HTML + JS/AJAX + SVG<br />
* Pages JSP & Servlets<br />
<br />
==Equipement==<br />
* 2 kits [[SunSPOT]]<br />
* Kit [[ez430-RF2480]]<br />
* Kit [[TI' ez430 Chronos]]<br />
* [[STM32VL-Discovery]] + Tracker<br />
* Kit [[ez430-RF2500]]<br />
<br />
==Logiciels==<br />
* [[Cilia]]<br />
* [[JFreeChart]]<br />
* [[GoogleEarthPlugin]]<br />
* [[Protovis]]</div>
Diorcety
https://air.imag.fr/index.php?title=R%C3%A9seaux_Sociaux_Physiques&diff=2022
Réseaux Sociaux Physiques
2011-04-12T13:19:16Z
<p>Diorcety: /* Médiation(Cilia) */</p>
<hr />
<div>* UE/Module: Projet M2M M2PGI<br />
* Enseignants: Didier Donsez<br />
* Etudiants M2PGI: Yann Diorcet (chef de projet), Amina Ben-Yelles<br />
<br />
==Description==<br />
Le domaine d'application est la compréhension des maladies nosocomiales : il s'agit d'établir une cartographie des rencontres physiques entre patients hospitalisés et professionnels de santé.<br />
<br />
La cartographie est constituée incrémentalement par les noeuds lors qui sont en contact avec un puit (capteur relié à un hôte fixe). Les mesures sont remontées par un médiateur construit sur [[Cilia]]<br />
<br />
Mots-clé : wireless sensor networks, delay tolerant networks, opportunistic networks, opportunistic computing<br />
<br />
'''Autres applications:'''<br />
* [http://processors.wiki.ti.com/index.php/Avalanche_Victim_Seeker Avalanche Victim Seeker]<br />
* Géolocalisation Zigbee<br />
<br />
<br />
'''Lire'''<br />
* workshop on Data driven dynamical networks (Oct 2010) http://www.cpt.univ-mrs.fr/~barrat/leshouches.html<br />
* MOSAR (Mastering hOSpital Antimicrobial Resistance in Europe) https://www.mosar-sic.org/mosar/en-gb/index<br />
==Composition==<br />
[[File:DiagrammeRS.png]]<br />
* Collecteur<br />
* SunSpot<br />
* Mediateur<br />
* PC<br />
<br />
==Communication entre Sunspot==<br />
Chaque Sunspot ayant un adresse unique, on utilise celle-ci pour enregistrer les informations sur le temps qu'ils ont été en contact. Pour ce faire, chaque Sunspot émet un paquet de type broadcast sur un canal toutes les secondes. Si ce paquet est reçu (avec une intensité de réception supérieur à une limite fixée) par un autre Sunspot, celui-ci le traite.<br />
Ce traitement implique que si la condition suivante est remplie, il incrémente de 1 le compteur de "contact" qu'il possèdent pour le Sunspot émetteur.<br />
===Répartition===<br />
Les conditions sont:<br />
*Si la somme de l'adresse de l’émetteur et celle du récepteur est impair, le récepteur l'enregistre si il possèdent l'adresse la plus petite.<br />
*Sinon le récepteur enregistre l'information de contact si son adresse est la plus grande.<br />
[[File:NetworkRS.png]]<br />
<br />
===Volume de données===<br />
Ces conditions permet une répartition des informations entre tout les Sunspots. En effet si notre réseau de Sunspots est composé de N Sunspot on aura:<br />
*Un maximum de N(N-1)/2 informations sur les temps de contact à sauvegarder.<br />
*Un Sunspot aura au maximum a sauvegarder (N-1)/2 temps de contact.<br />
<br />
==Communication avec le Collecteur==<br />
<pre><br />
<Contact><peerA>1111</peerA><peerB>2222</peerB><time>6</time></Contact><br />
</pre><br />
<br />
==Médiation(Cilia)==<br />
La chaîne de médiation mis en place grâce à Cilia est composé des éléments suivant:<br />
* Serveur: Récupère les données en XML venant des Collecteurs et les transmet au UnMarshaller XML.<br />
* XML UnMarshaller: Transforme la chaîne texte en format XML, en Objet directement utilisable.<br />
* Core: Contient le code traitant les différentes informations: Par exemple, effectuer l'horodatage des informations.<br />
* Console: Fournit une interface permettant d'avoir des logs sur les informations transitant pas le Core.<br />
* BDD: Suivant le type de donnée de l'objet transitant, cet objet est rendu persistant dans une base de donnée. <br />
* JSON Marshaller: Ce compostant convertit l'objet en chaîne texte en format JSON(directement utilisable par JavaScript).<br />
* Feed Servlet: Servlet fournissant les informations en temps réel.<br />
<br />
==Interface Web==<br />
Une interface Web permet de visualiser les données collectées par le(s) collecteur(s). Les technologies utilisées sont:<br />
* HTML + JS/AJAX + SVG<br />
* Pages JSP & Servlets<br />
<br />
==Equipement==<br />
* 2 kits [[SunSPOT]]<br />
* Kit [[ez430-RF2480]]<br />
* Kit [[TI' ez430 Chronos]]<br />
* [[STM32VL-Discovery]] + Tracker<br />
* Kit [[ez430-RF2500]]<br />
<br />
==Logiciels==<br />
* [[Cilia]]<br />
* [[JFreeChart]]<br />
* [[GoogleEarthPlugin]]<br />
* [[Protovis]]</div>
Diorcety
https://air.imag.fr/index.php?title=R%C3%A9seaux_Sociaux_Physiques&diff=2021
Réseaux Sociaux Physiques
2011-04-12T13:18:58Z
<p>Diorcety: </p>
<hr />
<div>* UE/Module: Projet M2M M2PGI<br />
* Enseignants: Didier Donsez<br />
* Etudiants M2PGI: Yann Diorcet (chef de projet), Amina Ben-Yelles<br />
<br />
==Description==<br />
Le domaine d'application est la compréhension des maladies nosocomiales : il s'agit d'établir une cartographie des rencontres physiques entre patients hospitalisés et professionnels de santé.<br />
<br />
La cartographie est constituée incrémentalement par les noeuds lors qui sont en contact avec un puit (capteur relié à un hôte fixe). Les mesures sont remontées par un médiateur construit sur [[Cilia]]<br />
<br />
Mots-clé : wireless sensor networks, delay tolerant networks, opportunistic networks, opportunistic computing<br />
<br />
'''Autres applications:'''<br />
* [http://processors.wiki.ti.com/index.php/Avalanche_Victim_Seeker Avalanche Victim Seeker]<br />
* Géolocalisation Zigbee<br />
<br />
<br />
'''Lire'''<br />
* workshop on Data driven dynamical networks (Oct 2010) http://www.cpt.univ-mrs.fr/~barrat/leshouches.html<br />
* MOSAR (Mastering hOSpital Antimicrobial Resistance in Europe) https://www.mosar-sic.org/mosar/en-gb/index<br />
==Composition==<br />
[[File:DiagrammeRS.png]]<br />
* Collecteur<br />
* SunSpot<br />
* Mediateur<br />
* PC<br />
<br />
==Communication entre Sunspot==<br />
Chaque Sunspot ayant un adresse unique, on utilise celle-ci pour enregistrer les informations sur le temps qu'ils ont été en contact. Pour ce faire, chaque Sunspot émet un paquet de type broadcast sur un canal toutes les secondes. Si ce paquet est reçu (avec une intensité de réception supérieur à une limite fixée) par un autre Sunspot, celui-ci le traite.<br />
Ce traitement implique que si la condition suivante est remplie, il incrémente de 1 le compteur de "contact" qu'il possèdent pour le Sunspot émetteur.<br />
===Répartition===<br />
Les conditions sont:<br />
*Si la somme de l'adresse de l’émetteur et celle du récepteur est impair, le récepteur l'enregistre si il possèdent l'adresse la plus petite.<br />
*Sinon le récepteur enregistre l'information de contact si son adresse est la plus grande.<br />
[[File:NetworkRS.png]]<br />
<br />
===Volume de données===<br />
Ces conditions permet une répartition des informations entre tout les Sunspots. En effet si notre réseau de Sunspots est composé de N Sunspot on aura:<br />
*Un maximum de N(N-1)/2 informations sur les temps de contact à sauvegarder.<br />
*Un Sunspot aura au maximum a sauvegarder (N-1)/2 temps de contact.<br />
<br />
==Communication avec le Collecteur==<br />
<pre><br />
<Contact><peerA>1111</peerA><peerB>2222</peerB><time>6</time></Contact><br />
</pre><br />
<br />
==Médiation(Cilia)==<br />
La chaîne de médiation mis en place grâce à Cilia est composé des éléments suivant:<br />
* Serveur: Récupère les données en XML venant des Collecteurs et les transmet au UnMarshaller XML.<br />
* XML UnMarshaller: Transforme la chaîne texte en format XML, en Objet directement utilisable.<br />
* Core: Contient le code traitant les différentes informations: Par exemple, effectuer l'horodatage des informations.<br />
* Console: Fournit une interface permettant d'avoir des logs sur les informations transitant pas le Core.<br />
* BDD: Suivant le type de donnée de l'objet transitant, cet objet est rendu persistant dans une base de donnée. <br />
* JSON Marshaller: Ce compostant convertit l'objet en chaîne texte en format JSON(directement utilisable par JavaScript).<br />
* Feed Servlet: Servlet fournissant les informations en temps réel.<br />
* Pages JSP: Fournit les pages JSP permettant la visualisation aisée des informations.<br />
<br />
==Interface Web==<br />
Une interface Web permet de visualiser les données collectées par le(s) collecteur(s). Les technologies utilisées sont:<br />
* HTML + JS/AJAX + SVG<br />
* Pages JSP & Servlets<br />
<br />
==Equipement==<br />
* 2 kits [[SunSPOT]]<br />
* Kit [[ez430-RF2480]]<br />
* Kit [[TI' ez430 Chronos]]<br />
* [[STM32VL-Discovery]] + Tracker<br />
* Kit [[ez430-RF2500]]<br />
<br />
==Logiciels==<br />
* [[Cilia]]<br />
* [[JFreeChart]]<br />
* [[GoogleEarthPlugin]]<br />
* [[Protovis]]</div>
Diorcety
https://air.imag.fr/index.php?title=R%C3%A9seaux_Sociaux_Physiques&diff=2020
Réseaux Sociaux Physiques
2011-04-12T13:06:33Z
<p>Diorcety: /* Interface web */</p>
<hr />
<div>* UE/Module: Projet M2M M2PGI<br />
* Enseignants: Didier Donsez<br />
* Etudiants M2PGI: Yann Diorcet (chef de projet), Amina Ben-Yelles<br />
<br />
==Description==<br />
Le domaine d'application est la compréhension des maladies nosocomiales : il s'agit d'établir une cartographie des rencontres physiques entre patients hospitalisés et professionnels de santé.<br />
<br />
La cartographie est constituée incrémentalement par les noeuds lors qui sont en contact avec un puit (capteur relié à un hôte fixe). Les mesures sont remontées par un médiateur construit sur [[Cilia]]<br />
<br />
Mots-clé : wireless sensor networks, delay tolerant networks, opportunistic networks, opportunistic computing<br />
<br />
'''Autres applications:'''<br />
* [http://processors.wiki.ti.com/index.php/Avalanche_Victim_Seeker Avalanche Victim Seeker]<br />
* Géolocalisation Zigbee<br />
<br />
<br />
'''Lire'''<br />
* workshop on Data driven dynamical networks (Oct 2010) http://www.cpt.univ-mrs.fr/~barrat/leshouches.html<br />
* MOSAR (Mastering hOSpital Antimicrobial Resistance in Europe) https://www.mosar-sic.org/mosar/en-gb/index<br />
==Composition==<br />
[[File:DiagrammeRS.png]]<br />
* Collecteur<br />
* SunSpot<br />
* Mediateur<br />
* PC<br />
<br />
==Communication entre Sunspot==<br />
Chaque Sunspot ayant un adresse unique, on utilise celle-ci pour enregistrer les informations sur le temps qu'ils ont été en contact. Pour ce faire, chaque Sunspot émet un paquet de type broadcast sur un canal toutes les secondes. Si ce paquet est reçu (avec une intensité de réception supérieur à une limite fixée) par un autre Sunspot, celui-ci le traite.<br />
Ce traitement implique que si la condition suivante est remplie, il incrémente de 1 le compteur de "contact" qu'il possèdent pour le Sunspot émetteur.<br />
===Répartition===<br />
Les conditions sont:<br />
*Si la somme de l'adresse de l’émetteur et celle du récepteur est impair, le récepteur l'enregistre si il possèdent l'adresse la plus petite.<br />
*Sinon le récepteur enregistre l'information de contact si son adresse est la plus grande.<br />
[[File:NetworkRS.png]]<br />
<br />
===Volume de données===<br />
Ces conditions permet une répartition des informations entre tout les Sunspots. En effet si notre réseau de Sunspots est composé de N Sunspot on aura:<br />
*Un maximum de N(N-1)/2 informations sur les temps de contact à sauvegarder.<br />
*Un Sunspot aura au maximum a sauvegarder (N-1)/2 temps de contact.<br />
<br />
==Communication avec le Collecteur==<br />
<pre><br />
<Contact><peerA>1111</peerA><peerB>2222</peerB><time>6</time></Contact><br />
</pre><br />
<br />
==Médiation(Cilia)==<br />
==Interface Web==<br />
Une interface Web permet de visualiser les données collectées par le(s) collecteur(s). Les technologies utilisées sont:<br />
* HTML + JS/AJAX + SVG<br />
* Pages JSP & Servlets<br />
<br />
==Equipement==<br />
* 2 kits [[SunSPOT]]<br />
* Kit [[ez430-RF2480]]<br />
* Kit [[TI' ez430 Chronos]]<br />
* [[STM32VL-Discovery]] + Tracker<br />
* Kit [[ez430-RF2500]]<br />
<br />
==Logiciels==<br />
* [[Cilia]]<br />
* [[JFreeChart]]<br />
* [[GoogleEarthPlugin]]<br />
* [[Protovis]]</div>
Diorcety
https://air.imag.fr/index.php?title=R%C3%A9seaux_Sociaux_Physiques&diff=1834
Réseaux Sociaux Physiques
2011-04-05T08:10:54Z
<p>Diorcety: /* Communication avec le Collecteur */</p>
<hr />
<div>* UE/Module: Projet M2M M2PGI<br />
* Enseignants: Didier Donsez<br />
* Etudiants M2PGI: Yann Diorcet (chef de projet), Amina Ben-Yelles<br />
<br />
==Description==<br />
Le domaine d'application est la compréhension des maladies nosocomiales : il s'agit d'établir une cartographie des rencontres physiques entre patients hospitalisés et professionnels de santé.<br />
<br />
La cartographie est constituée incrémentalement par les noeuds lors qui sont en contact avec un puit (capteur relié à un hôte fixe). Les mesures sont remontées par un médiateur construit sur [[Cilia]]<br />
<br />
Mots-clé : wireless sensor networks, delay tolerant networks, opportunistic networks, opportunistic computing<br />
<br />
'''Autres applications:'''<br />
* [http://processors.wiki.ti.com/index.php/Avalanche_Victim_Seeker Avalanche Victim Seeker]<br />
* Géolocalisation Zigbee<br />
<br />
<br />
'''Lire'''<br />
* workshop on Data driven dynamical networks (Oct 2010) http://www.cpt.univ-mrs.fr/~barrat/leshouches.html<br />
* MOSAR (Mastering hOSpital Antimicrobial Resistance in Europe) https://www.mosar-sic.org/mosar/en-gb/index<br />
==Composition==<br />
[[File:DiagrammeRS.png]]<br />
* Collecteur<br />
* SunSpot<br />
* Mediateur<br />
* PC<br />
<br />
==Communication entre Sunspot==<br />
Chaque Sunspot ayant un adresse unique, on utilise celle-ci pour enregistrer les informations sur le temps qu'ils ont été en contact. Pour ce faire, chaque Sunspot émet un paquet de type broadcast sur un canal toutes les secondes. Si ce paquet est reçu (avec une intensité de réception supérieur à une limite fixée) par un autre Sunspot, celui-ci le traite.<br />
Ce traitement implique que si la condition suivante est remplie, il incrémente de 1 le compteur de "contact" qu'il possèdent pour le Sunspot émetteur.<br />
===Répartition===<br />
Les conditions sont:<br />
*Si la somme de l'adresse de l’émetteur et celle du récepteur est impair, le récepteur l'enregistre si il possèdent l'adresse la plus petite.<br />
*Sinon le récepteur enregistre l'information de contact si son adresse est la plus grande.<br />
[[File:NetworkRS.png]]<br />
<br />
===Volume de données===<br />
Ces conditions permet une répartition des informations entre tout les Sunspots. En effet si notre réseau de Sunspots est composé de N Sunspot on aura:<br />
*Un maximum de N(N-1)/2 informations sur les temps de contact à sauvegarder.<br />
*Un Sunspot aura au maximum a sauvegarder (N-1)/2 temps de contact.<br />
<br />
==Communication avec le Collecteur==<br />
<pre><br />
<Contact><peerA>1111</peerA><peerB>2222</peerB><time>6</time></Contact><br />
</pre><br />
<br />
==Médiation(Cilia)==<br />
==Interface web==<br />
==Equipement==<br />
* 2 kits [[SunSPOT]]<br />
* Kit [[ez430-RF2480]]<br />
* Kit [[TI' ez430 Chronos]]<br />
* [[STM32VL-Discovery]] + Tracker<br />
* Kit [[ez430-RF2500]]<br />
<br />
==Logiciels==<br />
* [[Cilia]]<br />
* [[JFreeChart]]<br />
* [[GoogleEarthPlugin]]<br />
* [[Protovis]]</div>
Diorcety
https://air.imag.fr/index.php?title=R%C3%A9seaux_Sociaux_Physiques&diff=1802
Réseaux Sociaux Physiques
2011-04-01T07:36:54Z
<p>Diorcety: /* Répartition */</p>
<hr />
<div>* UE/Module: Projet M2M M2PGI<br />
* Enseignants: Didier Donsez<br />
* Etudiants M2PGI: Yann Diorcet (chef de projet), Amina Ben-Yelles<br />
<br />
==Description==<br />
Le domaine d'application est la compréhension des maladies nosocomiales : il s'agit d'établir une cartographie des rencontres physiques entre patients hospitalisés et professionnels de santé.<br />
<br />
La cartographie est constituée incrémentalement par les noeuds lors qui sont en contact avec un puit (capteur relié à un hôte fixe). Les mesures sont remontées par un médiateur construit sur [[Cilia]]<br />
<br />
Mots-clé : wireless sensor networks, delay tolerant networks, opportunistic networks, opportunistic computing<br />
<br />
'''Autres applications:'''<br />
* [http://processors.wiki.ti.com/index.php/Avalanche_Victim_Seeker Avalanche Victim Seeker]<br />
* Géolocalisation Zigbee<br />
<br />
<br />
'''Lire'''<br />
* workshop on Data driven dynamical networks (Oct 2010) http://www.cpt.univ-mrs.fr/~barrat/leshouches.html<br />
* MOSAR (Mastering hOSpital Antimicrobial Resistance in Europe) https://www.mosar-sic.org/mosar/en-gb/index<br />
==Composition==<br />
[[File:DiagrammeRS.png]]<br />
* Collecteur<br />
* SunSpot<br />
* Mediateur<br />
* PC<br />
<br />
==Communication entre Sunspot==<br />
Chaque Sunspot ayant un adresse unique, on utilise celle-ci pour enregistrer les informations sur le temps qu'ils ont été en contact. Pour ce faire, chaque Sunspot émet un paquet de type broadcast sur un canal toutes les secondes. Si ce paquet est reçu (avec une intensité de réception supérieur à une limite fixée) par un autre Sunspot, celui-ci le traite.<br />
Ce traitement implique que si la condition suivante est remplie, il incrémente de 1 le compteur de "contact" qu'il possèdent pour le Sunspot émetteur.<br />
===Répartition===<br />
Les conditions sont:<br />
*Si la somme de l'adresse de l’émetteur et celle du récepteur est impair, le récepteur l'enregistre si il possèdent l'adresse la plus petite.<br />
*Sinon le récepteur enregistre l'information de contact si son adresse est la plus grande.<br />
[[File:NetworkRS.png]]<br />
<br />
===Volume de données===<br />
Ces conditions permet une répartition des informations entre tout les Sunspots. En effet si notre réseau de Sunspots est composé de N Sunspot on aura:<br />
*Un maximum de N(N-1)/2 informations sur les temps de contact à sauvegarder.<br />
*Un Sunspot aura au maximum a sauvegarder (N-1)/2 temps de contact.<br />
<br />
==Communication avec le Collecteur==<br />
<pre><br />
<Contact><peerA>1111</peerA><peerB>2222</peerB><id><time>6</time></Contact><br />
</pre><br />
<br />
==Médiation(Cilia)==<br />
==Interface web==<br />
==Equipement==<br />
* 2 kits [[SunSPOT]]<br />
* Kit [[ez430-RF2480]]<br />
* Kit [[TI' ez430 Chronos]]<br />
* [[STM32VL-Discovery]] + Tracker<br />
* Kit [[ez430-RF2500]]<br />
<br />
==Logiciels==<br />
* [[Cilia]]<br />
* [[JFreeChart]]<br />
* [[GoogleEarthPlugin]]<br />
* [[Protovis]]</div>
Diorcety
https://air.imag.fr/index.php?title=R%C3%A9seaux_Sociaux_Physiques&diff=1801
Réseaux Sociaux Physiques
2011-04-01T07:36:31Z
<p>Diorcety: /* Communication entre Sunspot */</p>
<hr />
<div>* UE/Module: Projet M2M M2PGI<br />
* Enseignants: Didier Donsez<br />
* Etudiants M2PGI: Yann Diorcet (chef de projet), Amina Ben-Yelles<br />
<br />
==Description==<br />
Le domaine d'application est la compréhension des maladies nosocomiales : il s'agit d'établir une cartographie des rencontres physiques entre patients hospitalisés et professionnels de santé.<br />
<br />
La cartographie est constituée incrémentalement par les noeuds lors qui sont en contact avec un puit (capteur relié à un hôte fixe). Les mesures sont remontées par un médiateur construit sur [[Cilia]]<br />
<br />
Mots-clé : wireless sensor networks, delay tolerant networks, opportunistic networks, opportunistic computing<br />
<br />
'''Autres applications:'''<br />
* [http://processors.wiki.ti.com/index.php/Avalanche_Victim_Seeker Avalanche Victim Seeker]<br />
* Géolocalisation Zigbee<br />
<br />
<br />
'''Lire'''<br />
* workshop on Data driven dynamical networks (Oct 2010) http://www.cpt.univ-mrs.fr/~barrat/leshouches.html<br />
* MOSAR (Mastering hOSpital Antimicrobial Resistance in Europe) https://www.mosar-sic.org/mosar/en-gb/index<br />
==Composition==<br />
[[File:DiagrammeRS.png]]<br />
* Collecteur<br />
* SunSpot<br />
* Mediateur<br />
* PC<br />
<br />
==Communication entre Sunspot==<br />
Chaque Sunspot ayant un adresse unique, on utilise celle-ci pour enregistrer les informations sur le temps qu'ils ont été en contact. Pour ce faire, chaque Sunspot émet un paquet de type broadcast sur un canal toutes les secondes. Si ce paquet est reçu (avec une intensité de réception supérieur à une limite fixée) par un autre Sunspot, celui-ci le traite.<br />
Ce traitement implique que si la condition suivante est remplie, il incrémente de 1 le compteur de "contact" qu'il possèdent pour le Sunspot émetteur.<br />
===Répartition===<br />
Les conditions sont:<br />
*Si la somme de l'adresse de l’émetteur et celle du récepteur est impair, le récepteur l'enregistre si il possèdent l'adresse la plus petite.<br />
*Sinon le récepteur enregistre l'information de contact si son adresse est la plus grande.<br />
[File:NetworkRS.png]<br />
<br />
===Volume de données===<br />
Ces conditions permet une répartition des informations entre tout les Sunspots. En effet si notre réseau de Sunspots est composé de N Sunspot on aura:<br />
*Un maximum de N(N-1)/2 informations sur les temps de contact à sauvegarder.<br />
*Un Sunspot aura au maximum a sauvegarder (N-1)/2 temps de contact.<br />
<br />
==Communication avec le Collecteur==<br />
<pre><br />
<Contact><peerA>1111</peerA><peerB>2222</peerB><id><time>6</time></Contact><br />
</pre><br />
<br />
==Médiation(Cilia)==<br />
==Interface web==<br />
==Equipement==<br />
* 2 kits [[SunSPOT]]<br />
* Kit [[ez430-RF2480]]<br />
* Kit [[TI' ez430 Chronos]]<br />
* [[STM32VL-Discovery]] + Tracker<br />
* Kit [[ez430-RF2500]]<br />
<br />
==Logiciels==<br />
* [[Cilia]]<br />
* [[JFreeChart]]<br />
* [[GoogleEarthPlugin]]<br />
* [[Protovis]]</div>
Diorcety
https://air.imag.fr/index.php?title=File:NetworkRS.png&diff=1800
File:NetworkRS.png
2011-04-01T07:35:30Z
<p>Diorcety: Network Reseaux sociaux</p>
<hr />
<div>Network Reseaux sociaux</div>
Diorcety
https://air.imag.fr/index.php?title=R%C3%A9seaux_Sociaux_Physiques&diff=1799
Réseaux Sociaux Physiques
2011-04-01T07:21:58Z
<p>Diorcety: /* Composition */</p>
<hr />
<div>* UE/Module: Projet M2M M2PGI<br />
* Enseignants: Didier Donsez<br />
* Etudiants M2PGI: Yann Diorcet (chef de projet), Amina Ben-Yelles<br />
<br />
==Description==<br />
Le domaine d'application est la compréhension des maladies nosocomiales : il s'agit d'établir une cartographie des rencontres physiques entre patients hospitalisés et professionnels de santé.<br />
<br />
La cartographie est constituée incrémentalement par les noeuds lors qui sont en contact avec un puit (capteur relié à un hôte fixe). Les mesures sont remontées par un médiateur construit sur [[Cilia]]<br />
<br />
Mots-clé : wireless sensor networks, delay tolerant networks, opportunistic networks, opportunistic computing<br />
<br />
'''Autres applications:'''<br />
* [http://processors.wiki.ti.com/index.php/Avalanche_Victim_Seeker Avalanche Victim Seeker]<br />
* Géolocalisation Zigbee<br />
<br />
<br />
'''Lire'''<br />
* workshop on Data driven dynamical networks (Oct 2010) http://www.cpt.univ-mrs.fr/~barrat/leshouches.html<br />
* MOSAR (Mastering hOSpital Antimicrobial Resistance in Europe) https://www.mosar-sic.org/mosar/en-gb/index<br />
==Composition==<br />
[[File:DiagrammeRS.png]]<br />
* Collecteur<br />
* SunSpot<br />
* Mediateur<br />
* PC<br />
<br />
==Communication entre Sunspot==<br />
Chaque Sunspot ayant un adresse unique, on utilise celle-ci pour enregistrer les informations sur le temps qu'ils ont été en contact. Pour ce faire, chaque Sunspot émet un paquet de type broadcast sur un canal toutes les secondes. Si ce paquet est reçu (avec une intensité de réception supérieur à une limite fixée) par un autre Sunspot, celui-ci le traite.<br />
Ce traitement implique que si la condition suivante est remplie, il incrémente de 1 le compteur de "contact" qu'il possèdent pour le Sunspot émetteur.<br />
<br />
Les conditions sont:<br />
*Si la somme de l'adresse de l’émetteur et celle du récepteur est impair, le récepteur l'enregistre si il possèdent l'adresse la plus petite.<br />
*Sinon le récepteur enregistre l'information de contact si son adresse est la plus grande.<br />
<br />
===Volume de données===<br />
Ces conditions permet une répartition des informations entre tout les Sunspots. En effet si notre réseau de Sunspots est composé de N Sunspot on aura:<br />
*Un maximum de N(N-1)/2 informations sur les temps de contact à sauvegarder.<br />
*Un Sunspot aura au maximum a sauvegarder (N-1)/2 temps de contact.<br />
==Communication avec le Collecteur==<br />
<pre><br />
<Contact><peerA>1111</peerA><peerB>2222</peerB><id><time>6</time></Contact><br />
</pre><br />
<br />
==Médiation(Cilia)==<br />
==Interface web==<br />
==Equipement==<br />
* 2 kits [[SunSPOT]]<br />
* Kit [[ez430-RF2480]]<br />
* Kit [[TI' ez430 Chronos]]<br />
* [[STM32VL-Discovery]] + Tracker<br />
* Kit [[ez430-RF2500]]<br />
<br />
==Logiciels==<br />
* [[Cilia]]<br />
* [[JFreeChart]]<br />
* [[GoogleEarthPlugin]]<br />
* [[Protovis]]</div>
Diorcety
https://air.imag.fr/index.php?title=R%C3%A9seaux_Sociaux_Physiques&diff=1798
Réseaux Sociaux Physiques
2011-04-01T07:21:49Z
<p>Diorcety: /* Communication entre Sunspot */</p>
<hr />
<div>* UE/Module: Projet M2M M2PGI<br />
* Enseignants: Didier Donsez<br />
* Etudiants M2PGI: Yann Diorcet (chef de projet), Amina Ben-Yelles<br />
<br />
==Description==<br />
Le domaine d'application est la compréhension des maladies nosocomiales : il s'agit d'établir une cartographie des rencontres physiques entre patients hospitalisés et professionnels de santé.<br />
<br />
La cartographie est constituée incrémentalement par les noeuds lors qui sont en contact avec un puit (capteur relié à un hôte fixe). Les mesures sont remontées par un médiateur construit sur [[Cilia]]<br />
<br />
Mots-clé : wireless sensor networks, delay tolerant networks, opportunistic networks, opportunistic computing<br />
<br />
'''Autres applications:'''<br />
* [http://processors.wiki.ti.com/index.php/Avalanche_Victim_Seeker Avalanche Victim Seeker]<br />
* Géolocalisation Zigbee<br />
<br />
<br />
'''Lire'''<br />
* workshop on Data driven dynamical networks (Oct 2010) http://www.cpt.univ-mrs.fr/~barrat/leshouches.html<br />
* MOSAR (Mastering hOSpital Antimicrobial Resistance in Europe) https://www.mosar-sic.org/mosar/en-gb/index<br />
==Composition==<br />
[[File:File:DiagrammeRS.png]]<br />
* Collecteur<br />
* SunSpot<br />
* Mediateur<br />
* PC<br />
==Communication entre Sunspot==<br />
Chaque Sunspot ayant un adresse unique, on utilise celle-ci pour enregistrer les informations sur le temps qu'ils ont été en contact. Pour ce faire, chaque Sunspot émet un paquet de type broadcast sur un canal toutes les secondes. Si ce paquet est reçu (avec une intensité de réception supérieur à une limite fixée) par un autre Sunspot, celui-ci le traite.<br />
Ce traitement implique que si la condition suivante est remplie, il incrémente de 1 le compteur de "contact" qu'il possèdent pour le Sunspot émetteur.<br />
<br />
Les conditions sont:<br />
*Si la somme de l'adresse de l’émetteur et celle du récepteur est impair, le récepteur l'enregistre si il possèdent l'adresse la plus petite.<br />
*Sinon le récepteur enregistre l'information de contact si son adresse est la plus grande.<br />
<br />
===Volume de données===<br />
Ces conditions permet une répartition des informations entre tout les Sunspots. En effet si notre réseau de Sunspots est composé de N Sunspot on aura:<br />
*Un maximum de N(N-1)/2 informations sur les temps de contact à sauvegarder.<br />
*Un Sunspot aura au maximum a sauvegarder (N-1)/2 temps de contact.<br />
==Communication avec le Collecteur==<br />
<pre><br />
<Contact><peerA>1111</peerA><peerB>2222</peerB><id><time>6</time></Contact><br />
</pre><br />
<br />
==Médiation(Cilia)==<br />
==Interface web==<br />
==Equipement==<br />
* 2 kits [[SunSPOT]]<br />
* Kit [[ez430-RF2480]]<br />
* Kit [[TI' ez430 Chronos]]<br />
* [[STM32VL-Discovery]] + Tracker<br />
* Kit [[ez430-RF2500]]<br />
<br />
==Logiciels==<br />
* [[Cilia]]<br />
* [[JFreeChart]]<br />
* [[GoogleEarthPlugin]]<br />
* [[Protovis]]</div>
Diorcety
https://air.imag.fr/index.php?title=File:DiagrammeRS.png&diff=1797
File:DiagrammeRS.png
2011-04-01T07:21:11Z
<p>Diorcety: Diagramme Réseau sociaux</p>
<hr />
<div>Diagramme Réseau sociaux</div>
Diorcety
https://air.imag.fr/index.php?title=R%C3%A9seaux_Sociaux_Physiques&diff=1796
Réseaux Sociaux Physiques
2011-04-01T06:56:12Z
<p>Diorcety: /* Communication entre Sunspot */</p>
<hr />
<div>* UE/Module: Projet M2M M2PGI<br />
* Enseignants: Didier Donsez<br />
* Etudiants M2PGI: Yann Diorcet (chef de projet), Amina Ben-Yelles<br />
<br />
==Description==<br />
Le domaine d'application est la compréhension des maladies nosocomiales : il s'agit d'établir une cartographie des rencontres physiques entre patients hospitalisés et professionnels de santé.<br />
<br />
La cartographie est constituée incrémentalement par les noeuds lors qui sont en contact avec un puit (capteur relié à un hôte fixe). Les mesures sont remontées par un médiateur construit sur [[Cilia]]<br />
<br />
Mots-clé : wireless sensor networks, delay tolerant networks, opportunistic networks, opportunistic computing<br />
<br />
'''Autres applications:'''<br />
* [http://processors.wiki.ti.com/index.php/Avalanche_Victim_Seeker Avalanche Victim Seeker]<br />
* Géolocalisation Zigbee<br />
<br />
<br />
'''Lire'''<br />
* workshop on Data driven dynamical networks (Oct 2010) http://www.cpt.univ-mrs.fr/~barrat/leshouches.html<br />
* MOSAR (Mastering hOSpital Antimicrobial Resistance in Europe) https://www.mosar-sic.org/mosar/en-gb/index<br />
==Communication entre Sunspot==<br />
Chaque Sunspot ayant un adresse unique, on utilise celle-ci pour enregistrer les informations sur le temps qu'ils ont été en contact. Pour ce faire, chaque Sunspot émet un paquet de type broadcast sur un canal toutes les secondes. Si ce paquet est reçu (avec une intensité de réception supérieur à une limite fixée) par un autre Sunspot, celui-ci le traite.<br />
Ce traitement implique que si la condition suivante est remplie, il incrémente de 1 le compteur de "contact" qu'il possèdent pour le Sunspot émetteur.<br />
<br />
Les conditions sont:<br />
*Si la somme de l'adresse de l’émetteur et celle du récepteur est impair, le récepteur l'enregistre si il possèdent l'adresse la plus petite.<br />
*Sinon le récepteur enregistre l'information de contact si son adresse est la plus grande.<br />
<br />
===Volume de données===<br />
Ces conditions permet une répartition des informations entre tout les Sunspots. En effet si notre réseau de Sunspots est composé de N Sunspot on aura:<br />
*Un maximum de N(N-1)/2 informations sur les temps de contact à sauvegarder.<br />
*Un Sunspot aura au maximum a sauvegarder (N-1)/2 temps de contact.<br />
<br />
==Médiation(Cilia)==<br />
==Interface web==<br />
==Equipement==<br />
* 2 kits [[SunSPOT]]<br />
* Kit [[ez430-RF2480]]<br />
* Kit [[TI' ez430 Chronos]]<br />
* [[STM32VL-Discovery]] + Tracker<br />
* Kit [[ez430-RF2500]]<br />
<br />
==Logiciels==<br />
* [[Cilia]]<br />
* [[JFreeChart]]<br />
* [[GoogleEarthPlugin]]<br />
* [[Protovis]]</div>
Diorcety
https://air.imag.fr/index.php?title=JavaCard&diff=1715
JavaCard
2011-03-21T14:36:52Z
<p>Diorcety: </p>
<hr />
<div>JavaCard est un canevas d’exécution d'application pour carte à puce développé en Java.<br />
<br />
==Les APIs==<br />
* Python http://pyscard.sourceforge.net/<br />
* Java [[Javax.smartcardio]]<br />
* Ada http://www.nongnu.org/pcscada/<br />
* C#<br />
* C/C++<br />
<br />
==Les outils==<br />
*[http://sourceforge.net/projects/globalplatform/ GPShell]<br />
*[http://www.linuxnet.com/musclecard/index.html OpenSC]<br />
*[http://www.opensc-project.org/opensc MUSCLE]<br />
<br />
==Global Platform==<br />
Global Platform est un standard permettant l'installation de cardapplets.<br />
<br />
==Carte étudiante (ancienne génération)==<br />
[https://2009.jres.org/soumission/papers/render/pdf/135.pdf Présentation de la carte]<br />
===Script GPShell pour lister les card applets===<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
get_status -element 20<br />
card_disconnect<br />
release_context<br />
</pre><br />
<br />
===Script GPShell pour lister les card applets sélectionnables===<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
get_status -element 40<br />
card_disconnect<br />
release_context<br />
</pre><br />
<br />
===Application Java pour lister quelques informations de la carte===<br />
<pre><br />
package fr.imag.javacard;<br />
<br />
import javax.smartcardio.*;<br />
import java.util.*;<br />
<br />
public class Main {<br />
static class Util {<br />
static final String HEXES = "0123456789ABCDEF";<br />
<br />
public static String getHex(byte[] raw) {<br />
if (raw == null) {<br />
return null;<br />
}<br />
final StringBuilder hex = new StringBuilder(2 * raw.length);<br />
for (final byte b : raw) {<br />
hex.append(HEXES.charAt((b & 0xF0) >> 4))<br />
.append(HEXES.charAt((b & 0x0F)));<br />
}<br />
return hex.toString();<br />
}<br />
}<br />
<br />
private static byte[] appletAID = {0x55, 0x6E, 0x69, 0x76, 0x2E, 0x55, 0x4A, 0x46};<br />
private final static byte INS_SELECT = (byte) 0xA4;<br />
private final static byte INS_GETDATA = (byte) 0xCA;<br />
<br />
static class Command {<br />
String description;<br />
<br />
Command(String description) {<br />
this.description = description;<br />
}<br />
}<br />
<br />
private static final Map<Integer, Command> COMMAND_MAP =<br />
Collections.unmodifiableMap(new HashMap<Integer, Command>() {{<br />
put(1, new Command("ID(?)"));<br />
put(2, new Command("Version(?)"));<br />
put(3, new Command("(?)"));<br />
put(4, new Command("INE"));<br />
put(5, new Command("Creation(?)"));<br />
put(6, new Command("Update(?)"));<br />
}});<br />
<br />
public static CardTerminal selectCardTerminal() throws Exception {<br />
Scanner in = new Scanner(System.in);<br />
TerminalFactory tf = TerminalFactory.getDefault();<br />
List<CardTerminal> ctlist = null;<br />
ctlist = tf.terminals().list();<br />
if (ctlist.size() == 0) {<br />
throw new Exception("No reader present");<br />
}<br />
if (ctlist.size() == 1) {<br />
return ctlist.get(0);<br />
}<br />
<br />
int index = 0;<br />
do {<br />
<br />
System.out.println("Readers:");<br />
System.out.println("============================================");<br />
for (CardTerminal ct : ctlist) {<br />
System.out.println(index++ + ": " + ct.getName());<br />
}<br />
System.out.print("Select a reader:");<br />
index = in.nextInt();<br />
} while (index < 0 || index >= ctlist.size());<br />
<br />
return ctlist.get(index);<br />
}<br />
<br />
public static void selectApplication(CardChannel cc) throws Exception {<br />
System.out.println("Selecting \"Univ.UJF\" application");<br />
<br />
CommandAPDU apdu = new CommandAPDU(<br />
0x00, INS_SELECT,<br />
0x4, 0x0,<br />
appletAID);<br />
<br />
ResponseAPDU rapdu = cc.transmit(apdu);<br />
if (rapdu.getSW() != 0x9000) {<br />
throw new Exception("Can't select \"Univ.UJF\" application: "<br />
+ Integer.toHexString(rapdu.getSW()));<br />
}<br />
<br />
}<br />
<br />
public static void main(String[] args) {<br />
try {<br />
CardTerminal ct = selectCardTerminal();<br />
Card c = ct.connect("T=0");<br />
ATR atr = c.getATR();<br />
System.out.println("ATR : " + Util.getHex(atr.getBytes()));<br />
CardChannel cc = c.getBasicChannel();<br />
<br />
selectApplication(cc);<br />
<br />
for (int id : COMMAND_MAP.keySet()) {<br />
Command cmd = COMMAND_MAP.get(id);<br />
CommandAPDU apdu = new CommandAPDU(<br />
0x00, INS_GETDATA,<br />
(byte) id, 0x00, new byte[]{0x01});<br />
<br />
ResponseAPDU rapdu = cc.transmit(apdu);<br />
if (rapdu.getSW() != 0x9000) {<br />
throw new Exception("Can't get data (" + id + "): "<br />
+ Integer.toHexString(rapdu.getSW()));<br />
}<br />
System.out.println(cmd.description + ":"<br />
+ new String(rapdu.getData()));<br />
}<br />
} catch (Exception e) {<br />
<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
</pre><br />
===MuscleCard pour la carte étudiante===<br />
<br />
''MuscleCard is an open source project hosted at the M.U.S.C.L.E website. It aims to develop a JavaCard applet and supporting middleware to perform cryptographic operations like signing and encryption in a smart card.'' http://www.openscdp.org/scripts/musclecard/index.html<br />
<br />
<br />
====Compilation====<br />
(De préference sous Linux)<br />
* Télécharger les sources de Muscle<br />
<pre><br />
svn co svn://svn.debian.org/muscleplugins/trunk/MCardApplet<br />
</pre><br />
* Télécharger Java Card 2.1.2 Development Kit: [http://www.oracle.com/technetwork/java/javacard/downloads/index-jsp-138488.html#devkit lien]<br />
* Changer common.xml en modifiant:<br />
<pre><br />
Index: common.xml<br />
===================================================================<br />
--- common.xml (revision 297)<br />
+++ common.xml (working copy)<br />
@@ -62,8 +62,8 @@<br />
executable="${JAVA_BUILD_HOME}/bin/javac"<br />
srcdir="${APPLET_SRC}"<br />
destdir="${OUTPUT_DIR}"<br />
- target="${VM_TARGET_VERSION}"<br />
- source="${VM_SOURCE_VERSION}"><br />
+ target="1.1"<br />
+ source="1.2"><br />
<bootclasspath><br />
<pathelement location="${BOOTCLASSPATH}"/><br />
</bootclasspath><br />
</pre><br />
* Modifier le fichier JCOP.properties<br />
<pre><br />
CARD_NAME=JCOP<br />
JAVA_BUILD_HOME=PATH_VERS_JDK<br />
JC_HOME=PATH_VERS JC212<br />
API_JAR=${JC_HOME}/lib/api21.jar<br />
API_EXPORT_FILES=${JC_HOME}/api21_export_files<br />
</pre><br />
<br />
====Installation====<br />
Deplacer le fichier '''CardEdge.cap''' dans le dossier de GPShell et lancer le script suivant<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
install -file CardEdge.cap -sdAID A000000018434D00 -nvCodeLimit 4000<br />
card_disconnect<br />
release_context<br />
</pre><br />
====Initialisation de l'applet====<br />
Comme spécifié [http://www.opensc-project.org/opensc/wiki/MuscleApplet ici], l'applet à besoin d'être initialisé (par exemple avec opensc):<br />
<pre><br />
opensc-tool -s 00:A4:04:00:06:A0:00:00:00:01:01 \<br />
-s B0:2A:00:00:38:08:4D:75:73:63:6C:65:30:30:04:01:08:30:30:30:30:30:30:30:30:08:30:30:30:30:30:30:30:30:05:02:08:30:30:30:30:30:30:30:30:08:30:30:30:30:30:30:30:30:00:00:17:70:00:02:01<br />
</pre><br />
<br />
====Initialisation de PKCS15====<br />
<pre><br />
pkcs15-init -C --so-pin 00000000 --so-puk 00000000 --pin 00000000 --puk 00000000<br />
</pre><br />
====Changer le code PIN====<br />
<pre><br />
pkcs15-tool --change-pin<br />
</pre><br />
====Générer clés RSA/2048bits====<br />
<pre><br />
pkcs15-init --generate-key rsa/2048 --auth-id ff<br />
</pre><br />
====Générer certificat auto-signé====<br />
Récupérer le slot du lecteur<br />
<pre><br />
pkcs11-tool --list-slots<br />
</pre><br />
Générer avec openssl:<br />
<pre><br />
openssl<br />
engine dynamic -pre SO_PATH:/usr/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:opensc-pkcs11.so<br />
req -engine pkcs11 -new -key slot_8-id_45 -keyform engine -x509 -out cert.pem -text<br />
</pre><br />
Ajouter le certificat dans la carte<br />
<pre><br />
pkcs15-init --store-certificate cert.pem --auth-id ff --id 45 --format pem<br />
</pre></div>
Diorcety
https://air.imag.fr/index.php?title=JavaCard&diff=1695
JavaCard
2011-03-21T00:09:08Z
<p>Diorcety: /* Initialisation */</p>
<hr />
<div>JavaCard est un canevas d’exécution d'application pour carte à puce développé en Java.<br />
<br />
==Les outils==<br />
*[http://sourceforge.net/projects/globalplatform/ GPShell]<br />
*[http://www.linuxnet.com/musclecard/index.html OpenSC]<br />
*[http://www.opensc-project.org/opensc MUSCLE]<br />
<br />
==Global Platform==<br />
Global Platform est un standard permettant l'installation de cardapplets.<br />
<br />
==Carte étudiante (ancienne génération)==<br />
[https://2009.jres.org/soumission/papers/render/pdf/135.pdf Présentation de la carte]<br />
===Script pour lister les card applets===<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
get_status -element 20<br />
card_disconnect<br />
release_context<br />
</pre><br />
===Script pour lister les card applets sélectionnables===<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
get_status -element 40<br />
card_disconnect<br />
release_context<br />
</pre><br />
===Application Java pour lister quelques informations de la carte===<br />
<pre><br />
package fr.imag.javacard;<br />
<br />
import javax.smartcardio.*;<br />
import java.util.*;<br />
<br />
public class Main {<br />
static class Util {<br />
static final String HEXES = "0123456789ABCDEF";<br />
<br />
public static String getHex(byte[] raw) {<br />
if (raw == null) {<br />
return null;<br />
}<br />
final StringBuilder hex = new StringBuilder(2 * raw.length);<br />
for (final byte b : raw) {<br />
hex.append(HEXES.charAt((b & 0xF0) >> 4))<br />
.append(HEXES.charAt((b & 0x0F)));<br />
}<br />
return hex.toString();<br />
}<br />
}<br />
<br />
private static byte[] appletAID = {0x55, 0x6E, 0x69, 0x76, 0x2E, 0x55, 0x4A, 0x46};<br />
private final static byte INS_SELECT = (byte) 0xA4;<br />
private final static byte INS_GETDATA = (byte) 0xCA;<br />
<br />
static class Command {<br />
String description;<br />
<br />
Command(String description) {<br />
this.description = description;<br />
}<br />
}<br />
<br />
private static final Map<Integer, Command> COMMAND_MAP =<br />
Collections.unmodifiableMap(new HashMap<Integer, Command>() {{<br />
put(1, new Command("ID(?)"));<br />
put(2, new Command("Version(?)"));<br />
put(3, new Command("(?)"));<br />
put(4, new Command("INE"));<br />
put(5, new Command("Creation(?)"));<br />
put(6, new Command("Update(?)"));<br />
}});<br />
<br />
public static CardTerminal selectCardTerminal() throws Exception {<br />
Scanner in = new Scanner(System.in);<br />
TerminalFactory tf = TerminalFactory.getDefault();<br />
List<CardTerminal> ctlist = null;<br />
ctlist = tf.terminals().list();<br />
if (ctlist.size() == 0) {<br />
throw new Exception("No reader present");<br />
}<br />
if (ctlist.size() == 1) {<br />
return ctlist.get(0);<br />
}<br />
<br />
int index = 0;<br />
do {<br />
<br />
System.out.println("Readers:");<br />
System.out.println("============================================");<br />
for (CardTerminal ct : ctlist) {<br />
System.out.println(index++ + ": " + ct.getName());<br />
}<br />
System.out.print("Select a reader:");<br />
index = in.nextInt();<br />
} while (index < 0 || index >= ctlist.size());<br />
<br />
return ctlist.get(index);<br />
}<br />
<br />
public static void selectApplication(CardChannel cc) throws Exception {<br />
System.out.println("Selecting \"Univ.UJF\" application");<br />
<br />
CommandAPDU apdu = new CommandAPDU(<br />
0x00, INS_SELECT,<br />
0x4, 0x0,<br />
appletAID);<br />
<br />
ResponseAPDU rapdu = cc.transmit(apdu);<br />
if (rapdu.getSW() != 0x9000) {<br />
throw new Exception("Can't select \"Univ.UJF\" application: "<br />
+ Integer.toHexString(rapdu.getSW()));<br />
}<br />
<br />
}<br />
<br />
public static void main(String[] args) {<br />
try {<br />
CardTerminal ct = selectCardTerminal();<br />
Card c = ct.connect("T=0");<br />
ATR atr = c.getATR();<br />
System.out.println("ATR : " + Util.getHex(atr.getBytes()));<br />
CardChannel cc = c.getBasicChannel();<br />
<br />
selectApplication(cc);<br />
<br />
for (int id : COMMAND_MAP.keySet()) {<br />
Command cmd = COMMAND_MAP.get(id);<br />
CommandAPDU apdu = new CommandAPDU(<br />
0x00, INS_GETDATA,<br />
(byte) id, 0x00, new byte[]{0x01});<br />
<br />
ResponseAPDU rapdu = cc.transmit(apdu);<br />
if (rapdu.getSW() != 0x9000) {<br />
throw new Exception("Can't get data (" + id + "): "<br />
+ Integer.toHexString(rapdu.getSW()));<br />
}<br />
System.out.println(cmd.description + ":"<br />
+ new String(rapdu.getData()));<br />
}<br />
} catch (Exception e) {<br />
<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
</pre><br />
===Muscle pour la carte étudiante===<br />
====Compilation====<br />
(De préference sous Linux)<br />
* Télécharger les sources de Muscle<br />
<pre><br />
svn co svn://svn.debian.org/muscleplugins/trunk/MCardApplet<br />
</pre><br />
* Télécharger Java Card 2.1.2 Development Kit: [http://www.oracle.com/technetwork/java/javacard/downloads/index-jsp-138488.html#devkit lien]<br />
* Changer common.xml en modifiant:<br />
<pre><br />
Index: common.xml<br />
===================================================================<br />
--- common.xml (revision 297)<br />
+++ common.xml (working copy)<br />
@@ -62,8 +62,8 @@<br />
executable="${JAVA_BUILD_HOME}/bin/javac"<br />
srcdir="${APPLET_SRC}"<br />
destdir="${OUTPUT_DIR}"<br />
- target="${VM_TARGET_VERSION}"<br />
- source="${VM_SOURCE_VERSION}"><br />
+ target="1.1"<br />
+ source="1.2"><br />
<bootclasspath><br />
<pathelement location="${BOOTCLASSPATH}"/><br />
</bootclasspath><br />
</pre><br />
* Modifier le fichier JCOP.properties<br />
<pre><br />
CARD_NAME=JCOP<br />
JAVA_BUILD_HOME=PATH_VERS_JDK<br />
JC_HOME=PATH_VERS JC212<br />
API_JAR=${JC_HOME}/lib/api21.jar<br />
API_EXPORT_FILES=${JC_HOME}/api21_export_files<br />
</pre><br />
<br />
====Installation====<br />
Deplacer le fichier '''CardEdge.cap''' dans le dossier de GPShell et lancer le script suivant<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
install -file CardEdge.cap -sdAID A000000018434D00 -nvCodeLimit 4000<br />
card_disconnect<br />
release_context<br />
</pre><br />
====Initialisation====<br />
Comme spécifié [http://www.opensc-project.org/opensc/wiki/MuscleApplet ici], l'applet à besoin d'être initialisé (par exemple avec opensc):<br />
<pre><br />
opensc-tool -s 00:A4:04:00:06:A0:00:00:00:01:01 \<br />
-s B0:2A:00:00:38:08:4D:75:73:63:6C:65:30:30:04:01:08:30:30:30:30:30:30:30:30:08:30:30:30:30:30:30:30:30:05:02:08:30:30:30:30:30:30:30:30:08:30:30:30:30:30:30:30:30:00:00:17:70:00:02:01<br />
</pre></div>
Diorcety
https://air.imag.fr/index.php?title=JavaCard&diff=1694
JavaCard
2011-03-20T23:34:15Z
<p>Diorcety: </p>
<hr />
<div>JavaCard est un canevas d’exécution d'application pour carte à puce développé en Java.<br />
<br />
==Les outils==<br />
*[http://sourceforge.net/projects/globalplatform/ GPShell]<br />
*[http://www.linuxnet.com/musclecard/index.html OpenSC]<br />
*[http://www.opensc-project.org/opensc MUSCLE]<br />
<br />
==Global Platform==<br />
Global Platform est un standard permettant l'installation de cardapplets.<br />
<br />
==Carte étudiante (ancienne génération)==<br />
[https://2009.jres.org/soumission/papers/render/pdf/135.pdf Présentation de la carte]<br />
===Script pour lister les card applets===<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
get_status -element 20<br />
card_disconnect<br />
release_context<br />
</pre><br />
===Script pour lister les card applets sélectionnables===<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
get_status -element 40<br />
card_disconnect<br />
release_context<br />
</pre><br />
===Application Java pour lister quelques informations de la carte===<br />
<pre><br />
package fr.imag.javacard;<br />
<br />
import javax.smartcardio.*;<br />
import java.util.*;<br />
<br />
public class Main {<br />
static class Util {<br />
static final String HEXES = "0123456789ABCDEF";<br />
<br />
public static String getHex(byte[] raw) {<br />
if (raw == null) {<br />
return null;<br />
}<br />
final StringBuilder hex = new StringBuilder(2 * raw.length);<br />
for (final byte b : raw) {<br />
hex.append(HEXES.charAt((b & 0xF0) >> 4))<br />
.append(HEXES.charAt((b & 0x0F)));<br />
}<br />
return hex.toString();<br />
}<br />
}<br />
<br />
private static byte[] appletAID = {0x55, 0x6E, 0x69, 0x76, 0x2E, 0x55, 0x4A, 0x46};<br />
private final static byte INS_SELECT = (byte) 0xA4;<br />
private final static byte INS_GETDATA = (byte) 0xCA;<br />
<br />
static class Command {<br />
String description;<br />
<br />
Command(String description) {<br />
this.description = description;<br />
}<br />
}<br />
<br />
private static final Map<Integer, Command> COMMAND_MAP =<br />
Collections.unmodifiableMap(new HashMap<Integer, Command>() {{<br />
put(1, new Command("ID(?)"));<br />
put(2, new Command("Version(?)"));<br />
put(3, new Command("(?)"));<br />
put(4, new Command("INE"));<br />
put(5, new Command("Creation(?)"));<br />
put(6, new Command("Update(?)"));<br />
}});<br />
<br />
public static CardTerminal selectCardTerminal() throws Exception {<br />
Scanner in = new Scanner(System.in);<br />
TerminalFactory tf = TerminalFactory.getDefault();<br />
List<CardTerminal> ctlist = null;<br />
ctlist = tf.terminals().list();<br />
if (ctlist.size() == 0) {<br />
throw new Exception("No reader present");<br />
}<br />
if (ctlist.size() == 1) {<br />
return ctlist.get(0);<br />
}<br />
<br />
int index = 0;<br />
do {<br />
<br />
System.out.println("Readers:");<br />
System.out.println("============================================");<br />
for (CardTerminal ct : ctlist) {<br />
System.out.println(index++ + ": " + ct.getName());<br />
}<br />
System.out.print("Select a reader:");<br />
index = in.nextInt();<br />
} while (index < 0 || index >= ctlist.size());<br />
<br />
return ctlist.get(index);<br />
}<br />
<br />
public static void selectApplication(CardChannel cc) throws Exception {<br />
System.out.println("Selecting \"Univ.UJF\" application");<br />
<br />
CommandAPDU apdu = new CommandAPDU(<br />
0x00, INS_SELECT,<br />
0x4, 0x0,<br />
appletAID);<br />
<br />
ResponseAPDU rapdu = cc.transmit(apdu);<br />
if (rapdu.getSW() != 0x9000) {<br />
throw new Exception("Can't select \"Univ.UJF\" application: "<br />
+ Integer.toHexString(rapdu.getSW()));<br />
}<br />
<br />
}<br />
<br />
public static void main(String[] args) {<br />
try {<br />
CardTerminal ct = selectCardTerminal();<br />
Card c = ct.connect("T=0");<br />
ATR atr = c.getATR();<br />
System.out.println("ATR : " + Util.getHex(atr.getBytes()));<br />
CardChannel cc = c.getBasicChannel();<br />
<br />
selectApplication(cc);<br />
<br />
for (int id : COMMAND_MAP.keySet()) {<br />
Command cmd = COMMAND_MAP.get(id);<br />
CommandAPDU apdu = new CommandAPDU(<br />
0x00, INS_GETDATA,<br />
(byte) id, 0x00, new byte[]{0x01});<br />
<br />
ResponseAPDU rapdu = cc.transmit(apdu);<br />
if (rapdu.getSW() != 0x9000) {<br />
throw new Exception("Can't get data (" + id + "): "<br />
+ Integer.toHexString(rapdu.getSW()));<br />
}<br />
System.out.println(cmd.description + ":"<br />
+ new String(rapdu.getData()));<br />
}<br />
} catch (Exception e) {<br />
<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
</pre><br />
===Muscle pour la carte étudiante===<br />
====Compilation====<br />
(De préference sous Linux)<br />
* Télécharger les sources de Muscle<br />
<pre><br />
svn co svn://svn.debian.org/muscleplugins/trunk/MCardApplet<br />
</pre><br />
* Télécharger Java Card 2.1.2 Development Kit: [http://www.oracle.com/technetwork/java/javacard/downloads/index-jsp-138488.html#devkit lien]<br />
* Changer common.xml en modifiant:<br />
<pre><br />
Index: common.xml<br />
===================================================================<br />
--- common.xml (revision 297)<br />
+++ common.xml (working copy)<br />
@@ -62,8 +62,8 @@<br />
executable="${JAVA_BUILD_HOME}/bin/javac"<br />
srcdir="${APPLET_SRC}"<br />
destdir="${OUTPUT_DIR}"<br />
- target="${VM_TARGET_VERSION}"<br />
- source="${VM_SOURCE_VERSION}"><br />
+ target="1.1"<br />
+ source="1.2"><br />
<bootclasspath><br />
<pathelement location="${BOOTCLASSPATH}"/><br />
</bootclasspath><br />
</pre><br />
* Modifier le fichier JCOP.properties<br />
<pre><br />
CARD_NAME=JCOP<br />
JAVA_BUILD_HOME=PATH_VERS_JDK<br />
JC_HOME=PATH_VERS JC212<br />
API_JAR=${JC_HOME}/lib/api21.jar<br />
API_EXPORT_FILES=${JC_HOME}/api21_export_files<br />
</pre><br />
<br />
====Installation====<br />
Deplacer le fichier '''CardEdge.cap''' dans le dossier de GPShell et lancer le script suivant<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
install -file CardEdge.cap -sdAID A000000018434D00 -nvCodeLimit 4000<br />
card_disconnect<br />
release_context<br />
</pre><br />
====Initialisation====<br />
Comme spécifier [http://www.opensc-project.org/opensc/wiki/MuscleApplet ici], l'applet à besoin d'être initialisé (par exemple avec opensc):<br />
<pre><br />
opensc-tool -s 00:A4:04:00:06:A0:00:00:00:01:01 \<br />
-s B0:2A:00:00:38:08:4D:75:73:63:6C:65:30:30:04:01:08:30:30:30:30:30:30:30:30:08:30:30:30:30:30:30:30:30:05:02:08:30:30:30:30:30:30:30:30:08:30:30:30:30:30:30:30:30:00:00:17:70:00:02:01<br />
</pre></div>
Diorcety
https://air.imag.fr/index.php?title=JavaCard&diff=1693
JavaCard
2011-03-20T21:34:31Z
<p>Diorcety: </p>
<hr />
<div>JavaCard est un canevas d’exécution d'application pour carte à puce développé en Java.<br />
<br />
==Les outils==<br />
*[http://sourceforge.net/projects/globalplatform/ GPShell]<br />
*[http://www.linuxnet.com/musclecard/index.html OpenSC]<br />
*[http://www.opensc-project.org/opensc MUSCLE]<br />
<br />
==Global Platform==<br />
Global Platform est un standard permettant l'installation de cardapplets.<br />
<br />
==Carte étudiante (ancienne génération)==<br />
[https://2009.jres.org/soumission/papers/render/pdf/135.pdf Présentation de la carte]<br />
===Script pour lister les card applets===<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
get_status -element 20<br />
card_disconnect<br />
release_context<br />
</pre><br />
===Script pour lister les card applets sélectionnables===<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
get_status -element 40<br />
card_disconnect<br />
release_context<br />
</pre><br />
===Application Java pour lister quelques informations de la carte===<br />
<pre><br />
package fr.imag.javacard;<br />
<br />
import javax.smartcardio.*;<br />
import java.util.*;<br />
<br />
public class Main {<br />
static class Util {<br />
static final String HEXES = "0123456789ABCDEF";<br />
<br />
public static String getHex(byte[] raw) {<br />
if (raw == null) {<br />
return null;<br />
}<br />
final StringBuilder hex = new StringBuilder(2 * raw.length);<br />
for (final byte b : raw) {<br />
hex.append(HEXES.charAt((b & 0xF0) >> 4))<br />
.append(HEXES.charAt((b & 0x0F)));<br />
}<br />
return hex.toString();<br />
}<br />
}<br />
<br />
private static byte[] appletAID = {0x55, 0x6E, 0x69, 0x76, 0x2E, 0x55, 0x4A, 0x46};<br />
private final static byte INS_SELECT = (byte) 0xA4;<br />
private final static byte INS_GETDATA = (byte) 0xCA;<br />
<br />
static class Command {<br />
String description;<br />
<br />
Command(String description) {<br />
this.description = description;<br />
}<br />
}<br />
<br />
private static final Map<Integer, Command> COMMAND_MAP =<br />
Collections.unmodifiableMap(new HashMap<Integer, Command>() {{<br />
put(1, new Command("ID(?)"));<br />
put(2, new Command("Version(?)"));<br />
put(3, new Command("(?)"));<br />
put(4, new Command("INE"));<br />
put(5, new Command("Creation(?)"));<br />
put(6, new Command("Update(?)"));<br />
}});<br />
<br />
public static CardTerminal selectCardTerminal() throws Exception {<br />
Scanner in = new Scanner(System.in);<br />
TerminalFactory tf = TerminalFactory.getDefault();<br />
List<CardTerminal> ctlist = null;<br />
ctlist = tf.terminals().list();<br />
if (ctlist.size() == 0) {<br />
throw new Exception("No reader present");<br />
}<br />
if (ctlist.size() == 1) {<br />
return ctlist.get(0);<br />
}<br />
<br />
int index = 0;<br />
do {<br />
<br />
System.out.println("Readers:");<br />
System.out.println("============================================");<br />
for (CardTerminal ct : ctlist) {<br />
System.out.println(index++ + ": " + ct.getName());<br />
}<br />
System.out.print("Select a reader:");<br />
index = in.nextInt();<br />
} while (index < 0 || index >= ctlist.size());<br />
<br />
return ctlist.get(index);<br />
}<br />
<br />
public static void selectApplication(CardChannel cc) throws Exception {<br />
System.out.println("Selecting \"Univ.UJF\" application");<br />
<br />
CommandAPDU apdu = new CommandAPDU(<br />
0x00, INS_SELECT,<br />
0x4, 0x0,<br />
appletAID);<br />
<br />
ResponseAPDU rapdu = cc.transmit(apdu);<br />
if (rapdu.getSW() != 0x9000) {<br />
throw new Exception("Can't select \"Univ.UJF\" application: "<br />
+ Integer.toHexString(rapdu.getSW()));<br />
}<br />
<br />
}<br />
<br />
public static void main(String[] args) {<br />
try {<br />
CardTerminal ct = selectCardTerminal();<br />
Card c = ct.connect("T=0");<br />
ATR atr = c.getATR();<br />
System.out.println("ATR : " + Util.getHex(atr.getBytes()));<br />
CardChannel cc = c.getBasicChannel();<br />
<br />
selectApplication(cc);<br />
<br />
for (int id : COMMAND_MAP.keySet()) {<br />
Command cmd = COMMAND_MAP.get(id);<br />
CommandAPDU apdu = new CommandAPDU(<br />
0x00, INS_GETDATA,<br />
(byte) id, 0x00, new byte[]{0x01});<br />
<br />
ResponseAPDU rapdu = cc.transmit(apdu);<br />
if (rapdu.getSW() != 0x9000) {<br />
throw new Exception("Can't get data (" + id + "): "<br />
+ Integer.toHexString(rapdu.getSW()));<br />
}<br />
System.out.println(cmd.description + ":"<br />
+ new String(rapdu.getData()));<br />
}<br />
} catch (Exception e) {<br />
<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
</pre></div>
Diorcety
https://air.imag.fr/index.php?title=JavaCard&diff=1692
JavaCard
2011-03-20T21:30:41Z
<p>Diorcety: </p>
<hr />
<div>JavaCard est un canevas d’exécution d'application pour carte à puce développé en Java.<br />
<br />
==Les outils==<br />
*[http://sourceforge.net/projects/globalplatform/ GPShell]<br />
*[http://www.linuxnet.com/musclecard/index.html OpenSC]<br />
*[http://www.opensc-project.org/opensc MUSCLE]<br />
<br />
==Global Platform==<br />
Global Platform est un standard permettant l'installation de cardapplets.<br />
<br />
==Carte étudiante (ancienne génération)==<br />
[https://2009.jres.org/soumission/papers/render/pdf/135.pdf Présentation de la carte]<br />
===Script pour lister les card applets===<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
get_status -element 20<br />
card_disconnect<br />
release_context<br />
</pre><br />
===Script pour lister les card applets sélectionnable===<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
get_status -element 40<br />
card_disconnect<br />
release_context<br />
</pre><br />
===Application Java pour lister quelques informations sur la carte===<br />
<pre><br />
package fr.imag.javacard;<br />
<br />
import javax.smartcardio.*;<br />
import java.util.*;<br />
<br />
public class Main {<br />
static class Util {<br />
static final String HEXES = "0123456789ABCDEF";<br />
<br />
public static String getHex(byte[] raw) {<br />
if (raw == null) {<br />
return null;<br />
}<br />
final StringBuilder hex = new StringBuilder(2 * raw.length);<br />
for (final byte b : raw) {<br />
hex.append(HEXES.charAt((b & 0xF0) >> 4))<br />
.append(HEXES.charAt((b & 0x0F)));<br />
}<br />
return hex.toString();<br />
}<br />
}<br />
<br />
private static byte[] appletAID = {0x55, 0x6E, 0x69, 0x76, 0x2E, 0x55, 0x4A, 0x46};<br />
private final static byte INS_SELECT = (byte) 0xA4;<br />
private final static byte INS_GETDATA = (byte) 0xCA;<br />
<br />
static class Command {<br />
String description;<br />
<br />
Command(String description) {<br />
this.description = description;<br />
}<br />
}<br />
<br />
private static final Map<Integer, Command> COMMAND_MAP =<br />
Collections.unmodifiableMap(new HashMap<Integer, Command>() {{<br />
put(1, new Command("ID(?)"));<br />
put(2, new Command("Version(?)"));<br />
put(3, new Command("(?)"));<br />
put(4, new Command("INE"));<br />
put(5, new Command("Creation(?)"));<br />
put(6, new Command("Update(?)"));<br />
}});<br />
<br />
public static CardTerminal selectCardTerminal() throws Exception {<br />
Scanner in = new Scanner(System.in);<br />
TerminalFactory tf = TerminalFactory.getDefault();<br />
List<CardTerminal> ctlist = null;<br />
ctlist = tf.terminals().list();<br />
if (ctlist.size() == 0) {<br />
throw new Exception("No reader present");<br />
}<br />
if (ctlist.size() == 1) {<br />
return ctlist.get(0);<br />
}<br />
<br />
int index = 0;<br />
do {<br />
<br />
System.out.println("Readers:");<br />
System.out.println("============================================");<br />
for (CardTerminal ct : ctlist) {<br />
System.out.println(index++ + ": " + ct.getName());<br />
}<br />
System.out.print("Select a reader:");<br />
index = in.nextInt();<br />
} while (index < 0 || index >= ctlist.size());<br />
<br />
return ctlist.get(index);<br />
}<br />
<br />
public static void selectApplication(CardChannel cc) throws Exception {<br />
System.out.println("Selecting \"Univ.UJF\" application");<br />
<br />
CommandAPDU apdu = new CommandAPDU(<br />
0x00, INS_SELECT,<br />
0x4, 0x0,<br />
appletAID);<br />
<br />
ResponseAPDU rapdu = cc.transmit(apdu);<br />
if (rapdu.getSW() != 0x9000) {<br />
throw new Exception("Can't select \"Univ.UJF\" application: "<br />
+ Integer.toHexString(rapdu.getSW()));<br />
}<br />
<br />
}<br />
<br />
public static void main(String[] args) {<br />
try {<br />
CardTerminal ct = selectCardTerminal();<br />
Card c = ct.connect("T=0");<br />
ATR atr = c.getATR();<br />
System.out.println("ATR : " + Util.getHex(atr.getBytes()));<br />
CardChannel cc = c.getBasicChannel();<br />
<br />
selectApplication(cc);<br />
<br />
for (int id : COMMAND_MAP.keySet()) {<br />
Command cmd = COMMAND_MAP.get(id);<br />
CommandAPDU apdu = new CommandAPDU(<br />
0x00, INS_GETDATA,<br />
(byte) id, 0x00, new byte[]{0x01});<br />
<br />
ResponseAPDU rapdu = cc.transmit(apdu);<br />
if (rapdu.getSW() != 0x9000) {<br />
throw new Exception("Can't get data (" + id + "): "<br />
+ Integer.toHexString(rapdu.getSW()));<br />
}<br />
System.out.println(cmd.description + ":"<br />
+ new String(rapdu.getData()));<br />
}<br />
} catch (Exception e) {<br />
<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
</pre></div>
Diorcety
https://air.imag.fr/index.php?title=JavaCard&diff=1691
JavaCard
2011-03-20T21:28:54Z
<p>Diorcety: </p>
<hr />
<div>JavaCard est un canevas d’exécution d'application pour carte à puce développé en Java.<br />
<br />
==Les outils==<br />
*[http://sourceforge.net/projects/globalplatform/ GPShell]<br />
*[http://www.linuxnet.com/musclecard/index.html OpenSC]<br />
*[http://www.opensc-project.org/opensc MUSCLE]<br />
<br />
==Global Platform==<br />
Global Platform est un standard permettant l'installation de cardapplets.<br />
<br />
==Carte étudiante (ancienne génération)==<br />
[https://2009.jres.org/soumission/papers/render/pdf/135.pdf Présentation de la carte]<br />
===Script pour lister les card applets===<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
get_status -element 20<br />
card_disconnect<br />
release_context<br />
</pre><br />
<br />
===Application Java pour lister quelques informations sur la carte===<br />
<pre><br />
package fr.imag.javacard;<br />
<br />
import javax.smartcardio.*;<br />
import java.util.*;<br />
<br />
public class Main {<br />
static class Util {<br />
static final String HEXES = "0123456789ABCDEF";<br />
<br />
public static String getHex(byte[] raw) {<br />
if (raw == null) {<br />
return null;<br />
}<br />
final StringBuilder hex = new StringBuilder(2 * raw.length);<br />
for (final byte b : raw) {<br />
hex.append(HEXES.charAt((b & 0xF0) >> 4))<br />
.append(HEXES.charAt((b & 0x0F)));<br />
}<br />
return hex.toString();<br />
}<br />
}<br />
<br />
private static byte[] appletAID = {0x55, 0x6E, 0x69, 0x76, 0x2E, 0x55, 0x4A, 0x46};<br />
private final static byte INS_SELECT = (byte) 0xA4;<br />
private final static byte INS_GETDATA = (byte) 0xCA;<br />
<br />
static class Command {<br />
String description;<br />
<br />
Command(String description) {<br />
this.description = description;<br />
}<br />
}<br />
<br />
private static final Map<Integer, Command> COMMAND_MAP =<br />
Collections.unmodifiableMap(new HashMap<Integer, Command>() {{<br />
put(1, new Command("ID(?)"));<br />
put(2, new Command("Version(?)"));<br />
put(3, new Command("(?)"));<br />
put(4, new Command("INE"));<br />
put(5, new Command("Creation(?)"));<br />
put(6, new Command("Update(?)"));<br />
}});<br />
<br />
public static CardTerminal selectCardTerminal() throws Exception {<br />
Scanner in = new Scanner(System.in);<br />
TerminalFactory tf = TerminalFactory.getDefault();<br />
List<CardTerminal> ctlist = null;<br />
ctlist = tf.terminals().list();<br />
if (ctlist.size() == 0) {<br />
throw new Exception("No reader present");<br />
}<br />
if (ctlist.size() == 1) {<br />
return ctlist.get(0);<br />
}<br />
<br />
int index = 0;<br />
do {<br />
<br />
System.out.println("Readers:");<br />
System.out.println("============================================");<br />
for (CardTerminal ct : ctlist) {<br />
System.out.println(index++ + ": " + ct.getName());<br />
}<br />
System.out.print("Select a reader:");<br />
index = in.nextInt();<br />
} while (index < 0 || index >= ctlist.size());<br />
<br />
return ctlist.get(index);<br />
}<br />
<br />
public static void selectApplication(CardChannel cc) throws Exception {<br />
System.out.println("Selecting \"Univ.UJF\" application");<br />
<br />
CommandAPDU apdu = new CommandAPDU(<br />
0x00, INS_SELECT,<br />
0x4, 0x0,<br />
appletAID);<br />
<br />
ResponseAPDU rapdu = cc.transmit(apdu);<br />
if (rapdu.getSW() != 0x9000) {<br />
throw new Exception("Can't select \"Univ.UJF\" application: "<br />
+ Integer.toHexString(rapdu.getSW()));<br />
}<br />
<br />
}<br />
<br />
public static void main(String[] args) {<br />
try {<br />
CardTerminal ct = selectCardTerminal();<br />
Card c = ct.connect("T=0");<br />
ATR atr = c.getATR();<br />
System.out.println("ATR : " + Util.getHex(atr.getBytes()));<br />
CardChannel cc = c.getBasicChannel();<br />
<br />
selectApplication(cc);<br />
<br />
for (int id : COMMAND_MAP.keySet()) {<br />
Command cmd = COMMAND_MAP.get(id);<br />
CommandAPDU apdu = new CommandAPDU(<br />
0x00, INS_GETDATA,<br />
(byte) id, 0x00, new byte[]{0x01});<br />
<br />
ResponseAPDU rapdu = cc.transmit(apdu);<br />
if (rapdu.getSW() != 0x9000) {<br />
throw new Exception("Can't get data (" + id + "): "<br />
+ Integer.toHexString(rapdu.getSW()));<br />
}<br />
System.out.println(cmd.description + ":"<br />
+ new String(rapdu.getData()));<br />
}<br />
} catch (Exception e) {<br />
<br />
e.printStackTrace();<br />
}<br />
}<br />
}<br />
</pre></div>
Diorcety
https://air.imag.fr/index.php?title=R%C3%A9seaux_Sociaux_Physiques&diff=1626
Réseaux Sociaux Physiques
2011-03-14T08:11:29Z
<p>Diorcety: </p>
<hr />
<div>* UE/Module: Projet M2M M2PGI<br />
* Enseignants: Didier Donsez<br />
* Etudiants M2PGI: Yann Diorcet (chef de projet), Amina Ben-Yelles<br />
<br />
==Description==<br />
Le domaine d'application est la compréhension des maladies nosocomiales : il s'agit d'établir une cartographie des rencontres physiques entre patients hospitalisés et professionnels de santé.<br />
<br />
La cartographie est constituée incrémentalement par les noeuds lors qui sont en contact avec un puit (capteur relié à un hôte fixe). Les mesures sont remontées par un médiateur construit sur [[Cilia]]<br />
<br />
Mots-clé : wireless sensor networks, delay tolerant networks, opportunistic networks, opportunistic computing<br />
<br />
'''Autres applications:'''<br />
* [http://processors.wiki.ti.com/index.php/Avalanche_Victim_Seeker Avalanche Victim Seeker]<br />
* Géolocalisation Zigbee<br />
<br />
<br />
'''Lire'''<br />
* workshop on Data driven dynamical networks (Oct 2010) http://www.cpt.univ-mrs.fr/~barrat/leshouches.html<br />
* MOSAR (Mastering hOSpital Antimicrobial Resistance in Europe) https://www.mosar-sic.org/mosar/en-gb/index<br />
==Communication entre Sunspot==<br />
==Médiation(Cilia)==<br />
==Interface web==<br />
==Equipement==<br />
* 2 kits [[SunSPOT]]<br />
* Kit [[ez430-RF2480]]<br />
* Kit [[TI' ez430 Chronos]]<br />
* [[STM32VL-Discovery]] + Tracker<br />
* Kit [[ez430-RF2500]]<br />
<br />
==Logiciels==<br />
* [[Cilia]]<br />
* [[JFreeChart]]<br />
* [[GoogleEarthPlugin]]<br />
* [[Protovis]]</div>
Diorcety
https://air.imag.fr/index.php?title=R%C3%A9seaux_Sociaux_Physiques&diff=1625
Réseaux Sociaux Physiques
2011-03-14T08:10:52Z
<p>Diorcety: </p>
<hr />
<div>* UE/Module: Projet M2M M2PGI<br />
* Enseignants: Didier Donsez<br />
* Etudiants M2PGI: Yann Diorcet (chef de projet), Amina Ben-Yelles<br />
<br />
==Description==<br />
Le domaine d'application est la compréhension des maladies nosocomiales : il s'agit d'établir une cartographie des rencontres physiques entre patients hospitalisés et professionnels de santé.<br />
<br />
La cartographie est constituée incrémentalement par les noeuds lors qui sont en contact avec un puit (capteur relié à un hôte fixe). Les mesures sont remontées par un médiateur construit sur [[Cilia]]<br />
<br />
Mots-clé : wireless sensor networks, delay tolerant networks, opportunistic networks, opportunistic computing<br />
<br />
==Communication entre Sunspot==<br />
==Médiation(Cilia)==<br />
<br />
==Interface web==<br />
<br />
'''Autres applications:'''<br />
* [http://processors.wiki.ti.com/index.php/Avalanche_Victim_Seeker Avalanche Victim Seeker]<br />
* Géolocalisation Zigbee<br />
<br />
<br />
'''Lire'''<br />
* workshop on Data driven dynamical networks (Oct 2010) http://www.cpt.univ-mrs.fr/~barrat/leshouches.html<br />
* MOSAR (Mastering hOSpital Antimicrobial Resistance in Europe) https://www.mosar-sic.org/mosar/en-gb/index<br />
<br />
==Equipement==<br />
* 2 kits [[SunSPOT]]<br />
* Kit [[ez430-RF2480]]<br />
* Kit [[TI' ez430 Chronos]]<br />
* [[STM32VL-Discovery]] + Tracker<br />
* Kit [[ez430-RF2500]]<br />
<br />
==Logiciels==<br />
* [[Cilia]]<br />
* [[JFreeChart]]<br />
* [[GoogleEarthPlugin]]<br />
* [[Protovis]]</div>
Diorcety
https://air.imag.fr/index.php?title=JavaCard&diff=1559
JavaCard
2011-03-11T10:47:34Z
<p>Diorcety: /* Les outils */</p>
<hr />
<div>JavaCard est un canevas d’exécution d'application pour carte à puce développé en Java.<br />
<br />
==Les outils==<br />
*[http://sourceforge.net/projects/globalplatform/ GPShell]<br />
*[http://www.linuxnet.com/musclecard/index.html OpenSC]<br />
*[http://www.opensc-project.org/opensc MUSCLE]<br />
<br />
==Global Platform==<br />
Global Platform est un standard permettant l'installation de cardapplets.<br />
<br />
==Carte étudiante (ancienne génération)==<br />
[https://2009.jres.org/soumission/papers/render/pdf/135.pdf Présentation de la carte]<br />
===Script pour lister les card applets===<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
get_status -element 20<br />
card_disconnect<br />
release_context<br />
</pre></div>
Diorcety
https://air.imag.fr/index.php?title=JavaCard&diff=1558
JavaCard
2011-03-11T10:46:23Z
<p>Diorcety: /* Carte étudiante (ancienne génération) */</p>
<hr />
<div>JavaCard est un canevas d’exécution d'application pour carte à puce développé en Java.<br />
<br />
==Les outils==<br />
*[http://sourceforge.net/projects/globalplatform/ GPShell]<br />
*OpenSC<br />
*MUSCLE<br />
<br />
==Global Platform==<br />
Global Platform est un standard permettant l'installation de cardapplets.<br />
<br />
==Carte étudiante (ancienne génération)==<br />
[https://2009.jres.org/soumission/papers/render/pdf/135.pdf Présentation de la carte]<br />
===Script pour lister les card applets===<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
get_status -element 20<br />
card_disconnect<br />
release_context<br />
</pre></div>
Diorcety
https://air.imag.fr/index.php?title=JavaCard&diff=1557
JavaCard
2011-03-11T10:41:07Z
<p>Diorcety: /* Les outils */</p>
<hr />
<div>JavaCard est un canevas d’exécution d'application pour carte à puce développé en Java.<br />
<br />
==Les outils==<br />
*[http://sourceforge.net/projects/globalplatform/ GPShell]<br />
*OpenSC<br />
*MUSCLE<br />
<br />
==Global Platform==<br />
Global Platform est un standard permettant l'installation de cardapplets.<br />
<br />
==Carte étudiante (ancienne génération)==<br />
===Script pour lister les card applets===<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
get_status -element 20<br />
card_disconnect<br />
release_context<br />
</pre></div>
Diorcety
https://air.imag.fr/index.php?title=JavaCard&diff=1556
JavaCard
2011-03-11T10:40:51Z
<p>Diorcety: Created page with "JavaCard est un canevas d’exécution d'application pour carte à puce développé en Java. ==Les outils== *[http://sourceforge.net/projects/globalplatform/ GPShell GPShell] *O…"</p>
<hr />
<div>JavaCard est un canevas d’exécution d'application pour carte à puce développé en Java.<br />
<br />
==Les outils==<br />
*[http://sourceforge.net/projects/globalplatform/ GPShell GPShell]<br />
*OpenSC<br />
*MUSCLE<br />
==Global Platform==<br />
Global Platform est un standard permettant l'installation de cardapplets.<br />
<br />
==Carte étudiante (ancienne génération)==<br />
===Script pour lister les card applets===<br />
<pre><br />
mode_211<br />
gemXpressoPro<br />
enable_trace<br />
establish_context<br />
card_connect<br />
select -AID a000000018434d<br />
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 // Open secure channel<br />
get_status -element 20<br />
card_disconnect<br />
release_context<br />
</pre></div>
Diorcety
https://air.imag.fr/index.php?title=Liste_des_%C3%A9quipements_disponibles&diff=1555
Liste des équipements disponibles
2011-03-11T10:26:41Z
<p>Diorcety: /* Smartcards */</p>
<hr />
<div>This section lists the equipments and the components available to students for prototyping Ambient Intelligence applications.<br />
<br />
<br />
<br />
---------------------<br />
= Retaillers=<br />
* [http://www.lextronic.fr Lextronic] (F): distribue Sparkfun, Cool component, ... en France et pour les grands comptes.<br />
* [http://www.sparkfun.com Sparkfun]<br />
* [http://seeedstudio.com/depot/ Seeed Studio]<br />
* Cool Component<br />
* [http://fr.farnell.com Farnell]<br />
* [http://radiospares-fr.rs-online.com Radio Spare]<br />
* [https://estore.ti.com/ Texas Instrument eStore] (achats et échantillons gratuits)<br />
* [http://www.maxim-ic.com Maxim IC]<br />
<br />
---------------------<br />
<br />
= Basics =<br />
* [[Bus Pirate]] (4 items)<br />
<br />
= Home Sweet Home =<br />
* IKEA' Sofa Klippan<br />
* Wheelchair<br />
<br />
= Multimedia and Gaming =<br />
* LCD TV Set Philips 42''<br />
* Projector Optoma EW610ST (Short-Throw)<br />
* Monitor IIYAMA Pro Lite T2250MTS-1 (Multitouch and Linux/Windows compatible)<br />
* XBox 360 250GB + Kinect (UPnP/DLNA Media Server)<br />
* Controllers<br />
** Wiimote, Wiimotion, Nunchuk<br />
** XBox IR DVD Controller<br />
** PS3 Bluetooth Bluray Controller<br />
<br />
= Mobile terminals =<br />
* HTC Hero<br />
* Archos Internet Tablet 101<br />
<br />
<br />
= Embedded PC =<br />
* [http://wikiadele.imag.fr/index.php/Devices/Norhtec MiniPC Norhtec]<br />
<br />
= Robots and Drones =<br />
* [[ARDrone]]<br />
* [[Lego Mindstorm NXT]]<br />
* [http://www.seeedstudio.com/depot/4wd-arduino-robot-platform-global-free-shipping-p-658.html 4WD Arduino robot platform]<br />
<br />
= Networking =<br />
== Wifi ==<br />
* [http://www.neufbox4.org/wiki/index.php?title=Accueil NeufBox]<br />
<br />
== Bluetooth ==<br />
* Bluetooth dongles<br />
* [http://www.seeedstudio.com/depot/bluetooth-bee-p-598.html?cPath=139_142 XBee Bluetooth] (2 items)<br />
* [http://www.seeedstudio.com/depot/bees-shield-p-672.html?cPath=109 Xbee module sockets board] (4 items)<br />
<br />
== Wireless Sensors Network ==<br />
A [http://www.iis.se/docs/Available-Equipment-for-Wireless-Sensor-Network-Nodes.pdf WSN list]<br />
===[[XBee]]===<br />
<br />
===2.4 GHz===<br />
* [[Atmel AVR RZRaven]] (ZigBee, 6LoWPAN)<br />
* [http://focus.ti.com/docs/toolsw/folders/print/ez430-rf2480.html ez430-RF-2480] (ZigBee)<br />
* [https://estore.ti.com/EZ430-RF2500-MSP430-Wireless-Development-Tool-P1148.aspx EZ430-RF2500 - MSP430 Wireless Development Tool] [https://estore.ti.com/EZ430-RF2500T-MSP430-24-GHz-Wireless-Target-Board-P1295.aspx extra node]<br />
<br />
* [[XBee]] Pro modules (+ shields for Arduino and Lilypad + USB explorer)<br />
* SunLabs' [[SunSPOT]]<br />
<br />
===915 MHz===<br />
<br />
===862 MHz===<br />
<br />
===433 MHz===<br />
* [[TI' ez430 Chronos]] 433 (including a 433 MHz receiver/transceiver dongle based C1111)<br />
* [http://www.seeedstudio.com/depot/433mhz-rf-link-kit-p-127.html 433Mhz RF link kit] (described in "Making Things talk" project 9).<br />
<br />
= Embedded Boards =<br />
== JTAG programmers ==<br />
* [http://www.sparkfun.com/products/15 MSP-JTAG Parallel Port Programmer (for MSP430)]<br />
* [http://www.sparkfun.com/products/8702 STK500 USB Programmer (for AVR)]<br />
<br />
== AVR8 ==<br />
=== [[Arduino]] ===<br />
* [http://arduino.cc/en/Main/ArduinoBoardUno Arduino Uno]<br />
* Arduino Duemilanove<br />
* [http://arduino.cc/en/Main/ArduinoBoardMega2560 Arduino Mega2560]<br />
* [http://www.seeedstudio.com/depot/seeeduino-mega-p-717.html?cPath=80 Seeeduino Mega]<br />
* [[Arduino Lilypad]]<br />
* [[Arduino FIO]] (included XBee socket)<br />
* [http://www.seeedstudio.com/depot/seeeduino-stalker-p-600.html Seeeduino Stalker] (included ZigBee + SD Card)<br />
* ''[[Breaduino]]'' (Arduino bootable ATMega328 standalone)<br />
* ''[[Paperduino]]''<br />
====Arduino shields====<br />
* [http://www.sparkfun.com/products/8462 Lilypad accelerometer ADXL335] (2 items)<br />
* Arduino [http://www.wayneandlayne.com/projects/video-game-shield/ Video Game Shield] (1 item)<br />
* [http://www.sparkfun.com/products/9281 Nunchuk Adapter] (1 item)<br />
* [http://www.sparkfun.com/products/9976 XBee shield] (1 item)<br />
* [http://www.seeedstudio.com/depot/bees-shield-p-672.html?cPath=109 Double XBees shield] (4 items)<br />
* [http://www.sparkfun.com/products/9170 Nintendo DS Touch Screen connector breadout] (4 items)<br />
* [http://www.lextronic.fr/P1640-module-uvga-620-g2.html Module VGA pour µC uVGA-620-G2]<br />
<br />
=== Others ===<br />
* [http://www.sparkfun.com/products/9147 AVR Stick]<br />
* [http://www.sparkfun.com/products/9848 AVR with Geiger counter]<br />
* [[Atmel AVR RZRaven]] (with ZigBee, ZWave, 6LoWPAN)<br />
* [[Libelium Waspmote]]<br />
<br />
== ARM ==<br />
=== ARM Cortex-M3 ===<br />
* [[STM32VL-Discovery]]<br />
* [[Stellaris Luminary Lm3s6965]]<br />
* [[STM32 Primer2]]<br />
<br />
=== C developement ===<br />
* [http://mindstorms.lego.com/ Lego Mindstorm NXT] (also Java)<br />
<br />
=== C# developement ===<br />
* [[Netduino]]<br />
* [[FEZ]] Panda<br />
<br />
== [[MSP430]] ==<br />
* [[TI' MSP430 Launchpad]]<br />
* [[TI' ez430 Chronos]]<br />
* [[TI' Ez430-RF2480]]<br />
* [http://www.sparkfun.com/products/8171 Olimex Evaluation Board for MSP430F417]<br />
<br />
==MAX2000==<br />
* [http://www.sparkfun.com/products/343 MAX2000-RAX]<br />
<br />
<br />
= Identification =<br />
== Smartcards ==<br />
=== Readers ===<br />
* [http://support.gemalto.com/fileadmin/user_upload/user_guide/GemPC410/GCR410-410p_ApplicationNote_v1.0.pdf Gemplus GCR410] (serial + PS2 for power)<br />
* [http://www.ask-rfid.com/Portals/0/Flyers/Hardware/RDR400_flyer.pdf ASK RDR 437]<br />
* [http://support.gemalto.com/fileadmin/user_upload/user_guide/PCTwin/PC_Twin_User_guide.pdf Gemalto PC USB-TR] P/N HWP117685A (2 items)<br />
<br />
=== Smartcards ===<br />
* [[JavaCard]] 2 (Dual)<br />
* [[BasicCard]] (Dual)<br />
* FunCard 7 (AVR)<br />
<br />
== RFID Readers ==<br />
* [[ACS ACR 122]]<br />
* [http://www.ask-rfid.com/Portals/0/Flyers/Hardware/RDR400_flyer.pdf ASK RDR 437]<br />
* [http://www.ask-rfid.com/Portals/0/Flyers/Hardware/LoGO_flyer.pdf ASK LoGO]<br />
* Tags RFID ISO 14443 A/B and Mifare<br />
<br />
== Dallas iButton ==<br />
[[Dallas iButton]]<br />
<br />
[http://www.maxim-ic.com/products/ibutton/ site<br />
* [http://www.maxim-ic.com/products/ibutton/ibuttons/memoryoverview.cfm ID]<br />
* [http://www.maxim-ic.com/products/ibutton/products/1wire_adapters.cfm#USB?part=DS9490R&aP=Overview&aV=%3Cimg%20src%3D%22http%3A%2F%2Fwww.maxim-ic.com%2Fproducts%2Fibutton%2Fproducts%2Fimages%2F9490R_sm.jpg%22%20alt%3D%229490R_sm%22%20border%3D%220%22%3E%3Cbr%3EUSB%20to%201-Wire%20RJ11&fam=ibuttonr_a USB Adapters]<br />
<br />
= Sensors and Actuators =<br />
<br />
== Accelerometer ==<br />
* [http://www.sparkfun.com/products/9267 ADXL335] [http://www.analog.com/static/imported-files/data_sheets/ADXL335.pdf spec]<br />
* Nintendo Nunchuk (I2C)<br />
<br />
== Energy ==<br />
* Current clamps<br />
** http://www.seeedstudio.com/depot/noninvasive-ac-current-sensor-100a-max-p-547.html?cPath=144_154<br />
** http://www.seeedstudio.com/depot/noninvasive-ac-current-sensor-30a-max-p-519.html?cPath=144_154<br />
<br />
* Wattmeter<br />
* USB Multimeter Velleman DVM1200<br />
<br />
== Security ==<br />
* [http://www.seeedstudio.com/depot/magnetic-door-switch-p-666.html?cPath=156_160 Magnetic Door Switch]<br />
* [http://www.sparkfun.com/products/9312 Hall effect sensor]<br />
* Low-cost USB Webcam<br />
* Wide lens<br />
* Infrared LED Illuminator Board Plate for Security Camera<br />
* [http://www.seeedstudio.com/depot/scream-out-loud-110dba-fixed-tone-siren-p-301.html?cPath=156_159 scream out loud - 110dBA fixed tone Siren]<br />
<br />
== Gas ==<br />
* Smoke detector<br />
* LPG sensor<br />
* Alcohol sensor<br />
* Methane sensor<br />
* CO Sensor<br />
<br />
== Radiation ==<br />
* [http://www.sparkfun.com/products/9848 Geiger counter]<br />
<br />
== Misc ==<br />
* Light<br />
* Weight<br />
* DS Touch screen<br />
* Vibration (Piezo)<br />
<br />
== Geolocation ==<br />
[[NMEA-0186]] GPS receivers<br />
* GPS Inforad K0<br />
* GPS Inforad K1<br />
<br />
== Weather ==<br />
* [http://www.maxim-ic.com/datasheet/index.mvp/id/3021 DS1820]<br />
* [http://www.sparkfun.com/products/9438 Temperature Sensor - LM335A]<br />
<br />
== Wearable ==<br />
* Conductive textiles<br />
* Conductive threads <br />
* Lilypad LED, buttons, attachs, ..<br />
<br />
== Buttons ==<br />
* Rocket launcher<br />
* Big bumper (TV Games)<br />
<br />
== Display ==<br />
* [http://www.sparkfun.com/products/10168 Graphic LCD 84x48 - Nokia 5110]<br />
<br />
= Power =<br />
* [http://www.sparkfun.com/products/8251 Solar Module DC Power Source (for MSP)]<br />
* [http://www.humdingerwind.com/#/wi_overview Windbelt]<br />
* Wind turbine<br />
* Arduino LiPo rider http://www.seeedstudio.com/depot/lipo-rider-p-710.html<br />
<br />
<br />
= Misc=<br />
* [http://www.seeedstudio.com/depot/scream-out-loud-110dba-fixed-tone-siren-p-301.html?cPath=156_159 scream out loud - 110dBA fixed tone Siren]<br />
<br />
<br />
= En commande =<br />
* Cables antivol<br />
* [http://www.sparkfun.com/products/465 20 Channel EM-406A SiRF III Receiver with Antenna]<br />
* [http://www.seeedstudio.com/depot/atmel-avrisp-stk500-usb-isp-programmer-p-207.html?cPath=132_135 Atmel AVRISP STK500 USB ISP Programmer]<br />
* [http://www.sparkfun.com/products/8251 Solar Module DC Power Source (for MSP)]<br />
* [http://www.humdingerwind.com/#/wi_overview Windbelt]<br />
* Wind turbine<br />
* [http://arduino.cc/en/Main/ArduinoBoardMega2560 Arduino Mega2560]<br />
* [http://www.seeedstudio.com/depot/usb-infrared-toy-p-607.html?cPath=174 USB Infrared Toy]<br />
* [[Libelium Waspmote]]<br />
* '''[http://www.wacom.eu/index2.asp?pid=294&lang=fr&spid=30 Tablette graphique Wacom Bamboo]'''<br />
<br />
<br />
=Future =<br />
en vrac<br />
* [http://www.sparkfun.com/products/9810 LSM303 Breakout Board - Tilt Compensated Compass]<br />
* [http://www.sparkfun.com/products/10121 IMU Digital Combo Board - 6 Degrees of Freedom ITG3200/ADXL345]<br />
* Looxcie, the first wearable camcorder<br />
* [[Phidgets]]<br />
* Kit BasicCard http://www.basiccard.com/contact_dev.htm et http://www.basiccard.com/combi_dev.html<br />
* Terminaux mobiles : iPhone, Android, J2ME+NFC <br />
* Touchscreen ou Home Tablet (Archos Home Tablet 7 8GB a 170 Euro TTC sur Amazon), <br />
* Contrôleurs et modules X10 <br />
* Lecteur d’empreinte digital<br />
* NASs NSLU ou Routeurs WRT54 ou Sheeva Plug (ARM9)<br />
* MiniPC headless Atom,VIA,ARM11 <br />
* home cinéma (fonction UPnP media renderer) <br />
* Media Renderer et Media Server UPnP DLNA<br />
* Volet électrique (Somfy)<br />
* Capteurs (fumée, CO2, lumière, présence (radar)) <br />
* Cameras de securité IP AXIS ou Linksys : 400 euro HT unité<br />
* 2 telephones IP SIP (CISCO) <br />
* USB Phidgets http://www.phidgets.com/index.php <br />
* Robots mindstorm 300 euro * 2 <br />
* Chumby http://www.chumby.com 120 euros<br />
* train électrique lego (permet le maquettage d'applications logistiques) 100 euros <br />
* station météo Oregon Scientific WMR200n 300 euro (USB) <br />
* station LaCrosse Technologies WS2350 100 euros (RS232)<br />
* panneaux solaires<br />
* drones domestriques <br />
* consomètres USB ou RF (Velleman DVM1200)<br />
* dongle communication RF 433 (CC1111 USB RF)<br />
* Capteur CPL Watteco<br />
* Détecteur de fumée sans fil en réseau en 868MHz ou 433 MHz<br />
* 2 écrans déroulants électriques <br />
* Gaches électriques + montage bois (2) deja achéré par le département RICM pour le concours NFC Forum 2010<br />
* interupteur ToqToq (35 euros/piece) http://www.cobenelec.com/?q=produit_interrupteur_toq_toq<br />
* panneaux de verres intelligents (opacifiant, teintant)<br />
* Energy harvesting (voir ECO100, Peppermill, batterie solaire, … <br />
* DIY sensors (humidity, …)<br />
* Gas Sensors <br />
* Hager Systems (telecommandes multi fonctions (commande, panique, chute), capteurs incendie, … Centrale (ouverte) .<br />
* Nike + iPOD<br />
* Cadre photo Kodak Wifi/UPnP/DLNA 60 euros<br />
* Sony PS Move (camera 3D : double CCD, manette boule) Starter kit 30 euros<br />
* Tablette Moby Marvell 99 USD<br />
* Logitech Revue pour Google TV<br />
* Imprimante 3D (700 euros)<br />
* Projection 3D <br />
* Sonde hygrometrie plante (433 MHz) Inovalley 40122090 (12,50 € HT les 2) <br />
* CAN Shield http://www.sparkfun.com/commerce/product_info.php?products_id=10039<br />
* Weather https://www.sparkfun.com/commerce/product_info.php?products_id=8942 http://www.sparkfun.com/datasheets/Sensors/Weather/Weather%20Sensor%20Assembly..pdf<br />
* pèse-personne Wifi http://www.withings.com/en/index?taranim=4<br />
<br />
==Robotics==<br />
* [http://aeroquad.com/ AeroQuad Open Source Project]<br />
<br />
== Embedded Systems ==<br />
* Mini module de développement "AT90USBPLUG" http://elmicro.com/de/at90usbplug.html http://www.lextronic.fr/produit.php?id=19760 25 euro HT<br />
* PHOTO SEN. OPB702 http://fr.rs-online.com/web/search/searchBrowseAction.html?method=getProduct&R=4550931#header<br />
* http://www.seeedstudio.com/depot/noninvasive-ac-current-sensor-100a-max-p-547.html?cPath=144_154<br />
* http://www.seeedstudio.com/depot/lipo-rider-p-710.html<br />
* http://www.seeedstudio.com/depot/noninvasive-ac-current-sensor-30a-max-p-519.html?cPath=144_154</div>
Diorcety
https://air.imag.fr/index.php?title=R%C3%A9seaux_Sociaux_Physiques&diff=1224
Réseaux Sociaux Physiques
2011-02-23T12:46:11Z
<p>Diorcety: </p>
<hr />
<div>* UE/Module: Projet M2M M2PGI<br />
* Enseignants: Didier Donsez<br />
* Etudiants M2PGI: Yann Diorcet (chef de projet), Amina Ben-Yelles<br />
<br />
==Description==<br />
* Géolocalisation Zigbee<br />
<br />
Le domaine d'application sont les maladies nosocomiales : il s'agit d'établir une cartographie des rencontres physiques entre patients hospitalisés et professionnels de santé.<br />
<br />
La cartographie est constituée incrémentalement par les noeuds lors qui sont en contact avec un puit (capteur relié à un hôte fixe). Les mesures sont remontées par un médiateur construit sur [[Cilia]]<br />
<br />
'''Autres applications:'''<br />
* [http://processors.wiki.ti.com/index.php/Avalanche_Victim_Seeker Avalanche Victim Seeker]<br />
<br />
==Equipement==<br />
* 2 kits [[SunSPOT]]<br />
* Kit [[ez430-RF2480]]<br />
* Kit [[TI' ez430 Chronos]]<br />
* [[STM32VL-Discovery]] + Tracker<br />
* Kit [[ez430-RF2500]]<br />
<br />
==Logiciels==<br />
* [[Cilia]]<br />
* [[JFreeChart]]<br />
* [[GoogleEarthPlugin]]<br />
* [[Protovis]]</div>
Diorcety