basic setup of card internal
This commit is contained in:
140
bin/card.ml
Normal file
140
bin/card.ml
Normal file
@ -0,0 +1,140 @@
|
||||
open SmartCard
|
||||
|
||||
(** This file contains the default card data *)
|
||||
|
||||
(* EF.CardAccess *)
|
||||
let ef_cardacces =
|
||||
Filesystem.ElementaryFile {
|
||||
fid = Bytes.of_string "\x01\x1C";
|
||||
sid = Bytes.of_string "\x1C";
|
||||
data = Hex.to_bytes (Hex.of_string "3134300d060804007f0007020202020101300f060a04007f000702020302020201013012060a04007f0007020204020202010202010d");
|
||||
}
|
||||
|
||||
(* EF.CardSecurity *)
|
||||
let ef_cardsecurity =
|
||||
Filesystem.ElementaryFile {
|
||||
fid = Bytes.of_string "";
|
||||
sid = Bytes.of_string "\x1D";
|
||||
data = Hex.to_bytes (Hex.of_string "");
|
||||
}
|
||||
|
||||
(* EF.DIR *)
|
||||
let ef_dir =
|
||||
Filesystem.ElementaryFile {
|
||||
fid = Bytes.of_string "\x01\x1E";
|
||||
sid = Bytes.of_string "\x1E";
|
||||
data = Hex.to_bytes (Hex.of_string "");
|
||||
}
|
||||
|
||||
(* EF.ATR
|
||||
|
||||
The EF.ATR/INFO may be called EF.ATR in contact card
|
||||
standards or specifications, and may be called EF.INFO
|
||||
in contactless card standards or specifications
|
||||
|
||||
The contents of the EF.ATR/INFO can be freely retrieved by using a GET DATA command with
|
||||
P1-P2 = '2F 01' and a command data field of '5C 00' ('00 CB 2F 01 02 5C 00'). The response data field for
|
||||
the GET DATA command is the concatenation of all Data Objects (DO) which are present in EF.ATR/INFO.
|
||||
It contains the BER-TLV content of the EF.ATR/INFO
|
||||
|
||||
*)
|
||||
let ef_atr =
|
||||
Filesystem.ElementaryFile {
|
||||
fid = Bytes.of_string "";
|
||||
sid = Bytes.of_string "\x01";
|
||||
data = Hex.to_bytes (Hex.of_string "");
|
||||
}
|
||||
|
||||
|
||||
(* EF.COM *)
|
||||
let ef_com =
|
||||
Filesystem.ElementaryFile {
|
||||
fid = Bytes.of_string "";
|
||||
sid = Bytes.of_string "\x1E";
|
||||
data = Bytes.of_string (Base64.decode_exn "");
|
||||
}
|
||||
|
||||
(* EF.DG1 *)
|
||||
let ef_dg1 =
|
||||
Filesystem.ElementaryFile {
|
||||
fid = Bytes.of_string "";
|
||||
sid = Bytes.of_string "\x01";
|
||||
data = Bytes.of_string (Base64.decode_exn "");
|
||||
}
|
||||
|
||||
(* EF.DG2 *)
|
||||
let ef_dg2 =
|
||||
Filesystem.ElementaryFile {
|
||||
fid = Bytes.of_string "";
|
||||
sid = Bytes.of_string "\x02";
|
||||
data = Bytes.of_string (Base64.decode_exn "");
|
||||
}
|
||||
|
||||
(* EF.DG13 *)
|
||||
let ef_dg13 =
|
||||
Filesystem.ElementaryFile {
|
||||
fid = Bytes.of_string "";
|
||||
sid = Bytes.of_string "\x0D";
|
||||
data = Bytes.of_string (Base64.decode_exn "");
|
||||
}
|
||||
|
||||
(* EF.DG14 *)
|
||||
let ef_dg14 =
|
||||
Filesystem.ElementaryFile {
|
||||
fid = Bytes.of_string "";
|
||||
sid = Bytes.of_string "\x0E";
|
||||
data = Bytes.of_string (Base64.decode_exn "");
|
||||
}
|
||||
|
||||
(* EF.DG15 *)
|
||||
let ef_dg15 =
|
||||
Filesystem.ElementaryFile {
|
||||
fid = Bytes.of_string "";
|
||||
sid = Bytes.of_string "\x0F";
|
||||
data = Bytes.of_string (Base64.decode_exn "");
|
||||
}
|
||||
|
||||
(* EF.SOD *)
|
||||
let ef_sod =
|
||||
Filesystem.ElementaryFile {
|
||||
fid = Bytes.of_string "";
|
||||
sid = Bytes.of_string "\x1D";
|
||||
data = Bytes.of_string (Base64.decode_exn "");
|
||||
}
|
||||
|
||||
(* LDS1 eMRTD Application *)
|
||||
let emrtd_application =
|
||||
Filesystem.DelicatedFile {
|
||||
fid = Bytes.of_string "";
|
||||
aid = Some (Bytes.of_string "\xA0\x00\x00\x02\x47\x10\x01");
|
||||
files = [
|
||||
ef_com;
|
||||
ef_dg1;
|
||||
ef_dg2;
|
||||
ef_dg13;
|
||||
ef_dg14;
|
||||
ef_dg15;
|
||||
ef_sod
|
||||
];
|
||||
}
|
||||
|
||||
(** The masterfile MF for the card *)
|
||||
let masterfile = Filesystem.DelicatedFile {
|
||||
fid = Bytes.of_string "\x3F\x00";
|
||||
aid = None;
|
||||
files = [
|
||||
ef_cardacces;
|
||||
emrtd_application
|
||||
];
|
||||
}
|
||||
|
||||
(** The card can have multiple files, MF included *)
|
||||
let allfiles = [masterfile]
|
||||
|
||||
let custom : CardState.t = {
|
||||
masterfile = Some masterfile;
|
||||
allfiles = allfiles;
|
||||
sm = None;
|
||||
current_file = None;
|
||||
}
|
||||
|
3
bin/dune
3
bin/dune
@ -1,4 +1,5 @@
|
||||
(env (dev (flags :standard -warn-error -27-32)))
|
||||
(executable
|
||||
(public_name apdu)
|
||||
(name main)
|
||||
(libraries apdu))
|
||||
(libraries SmartCard hex base64))
|
||||
|
11
bin/main.ml
11
bin/main.ml
@ -1 +1,10 @@
|
||||
let () = print_endline "Hello, World!"
|
||||
let main =
|
||||
let f = SmartCard.Filesystem.find_by_fid (Bytes.of_string "\x01\x1C") Card.custom.allfiles
|
||||
in
|
||||
match f with
|
||||
| Some _ -> print_endline "File found"
|
||||
| None -> print_endline "File not found"
|
||||
|
||||
let hmmge =
|
||||
let command = Bytes.of_string "\x00\x86\x00\x00" in
|
||||
SmartCard.CardState.process command Card.custom
|
||||
|
Reference in New Issue
Block a user