Linux, macOS, Windows:
Rostbindungen an die PC/SC -API für die Smart Card -Kommunikation.
Weitere Informationen finden Sie in der Dokumentation.
Weitere gängige Aufgaben finden Sie im Verzeichnis pcsc/examples
.
Die pcsc-sys
Kiste enthält direkte Bindungen mit niedriger Ebene an die C-API.
Die pcsc
Kiste enthält hochrangige Rostverpackungen.
In Ihrer Cargo.toml
:
[ dependencies ]
pcsc = " 2 "
Stellen Sie die Karte im ersten verfügbaren Leser an, senden Sie der Karte einen APDU -Befehl und drucken Sie die APDU -Antwort aus.
use pcsc :: * ;
fn main ( ) {
// Establish a PC/SC context.
let ctx = match Context :: establish ( Scope :: User ) {
Ok ( ctx ) => ctx ,
Err ( err ) => {
eprintln ! ( "Failed to establish context: {}" , err ) ;
std :: process :: exit ( 1 ) ;
}
} ;
// List available readers.
let mut readers_buf = [ 0 ; 2048 ] ;
let mut readers = match ctx . list_readers ( & mut readers_buf ) {
Ok ( readers ) => readers ,
Err ( err ) => {
eprintln ! ( "Failed to list readers: {}" , err ) ;
std :: process :: exit ( 1 ) ;
}
} ;
// Use the first reader.
let reader = match readers . next ( ) {
Some ( reader ) => reader ,
None => {
println ! ( "No readers are connected." ) ;
return ;
}
} ;
println ! ( "Using reader: {:?}" , reader ) ;
// Connect to the card.
let card = match ctx . connect ( reader , ShareMode :: Shared , Protocols :: ANY ) {
Ok ( card ) => card ,
Err ( Error :: NoSmartcard ) => {
println ! ( "A smartcard is not present in the reader." ) ;
return ;
}
Err ( err ) => {
eprintln ! ( "Failed to connect to card: {}" , err ) ;
std :: process :: exit ( 1 ) ;
}
} ;
// Send an APDU command.
let apdu = b" x00 xa4 x04 x00 x0A xA0 x00 x00 x00 x62 x03 x01 x0C x06 x01 " ;
println ! ( "Sending APDU: {:?}" , apdu ) ;
let mut rapdu_buf = [ 0 ; MAX_BUFFER_SIZE ] ;
let rapdu = match card . transmit ( apdu , & mut rapdu_buf ) {
Ok ( rapdu ) => rapdu ,
Err ( err ) => {
eprintln ! ( "Failed to transmit APDU command to card: {}" , err ) ;
std :: process :: exit ( 1 ) ;
}
} ;
println ! ( "APDU response: {:?}" , rapdu ) ;
}
Beispielausgabe:
$ ./target/debug/examples/readme
Using reader: "SCM Microsystems Inc. SCR 355 [CCID Interface] 00 00"
Sending APDU: [0, 164, 4, 0, 10, 160, 0, 0, 0, 98, 3, 1, 12, 6, 1]
APDU response: [106, 130]
Die MIT -Lizenz.