The simple use of this library is really simple, you only need to write a Scheme script and run it with
load.scm
contained in the library. Let me introduce a simple script.
(import (rnrs) (pcsc operations control) ;; for apdu-pretty-print (pcsc shell commands) (pcsc dictionary gp) (srfi :39)) (establish-context) (card-connect) ;; transmit a select command without any parameter (select) (define key #xFFFFFFFFFFFFFFFFFFFFFF) ;; your key must be here (channel :security *security-level-mac* :option #x55 :enc-key key :mac-key key :dek-key key) (parameterize ((*tag-dictionary* *gp-dictionary*)) (print "applications") (apdu-pretty-print (strip-return-code (invoke-command get-status applications)))) (card-disconnect) (release-context)Looks really a Scheme code right? The commands are influenced by GPShell, so if you know it, it would be familiar for you. The result would be like this;
$ sash.exe -Lsrc -Lcontrib load.scm -f status.scm applications [Tag] E3: GlobalPlatform Registry related data [Tag] 4F: AID [Data] �0��: A0 00 00 00 30 80 00 00 00 04 A6 00 01 [Tag] 9F70: Life Cycle State [Data] 07 01 [Tag] C5: Privileges [Data] 00 00 00 [Tag] EA: TS 102 226 specific template [Tag] 80 [Data] [Tag] C4: Application's Executable Load File AID [Data] A0 00 00 00 30 80 00 00 00 04 A6 00 [Tag] CC: Associated Security Domain AID [Data] A0 00 00 01 51 00 00 00 ... so on if you've got any resultThe Sagittarius version must be 0.4.2 (current HEAD version) otherwise
apdu-pretty-print
raises an error. The document is not really done yet. There are 2 ways to refer which command does what, 1 is looking up the code, the other one is starting the REPL and type (help 'command)
like this;$ sash.exe -Lsrc -Lcontrib start.scm pcsc> (help 'select) select :key aid Sends select command. ;; If you evaluate (help), the it will show all defined commands. pcsc> (help) help [command] Show help message. When [command] option is given, show the help of given command. Following commands are defined: card-connect card-disconnect card-readers card-status channel close-channel establish-context exit get-status help load-script release-context select send-apdu set-keys! trace-off trace-onNote: even though it shows the help string, it is better to look up the code when you really want to understand for now. I will write the document later.
There are a lot of missing features such as DELETE commands or LOAD, INSTALL etc. I will add those eventually.
Again, it's still under development state, so your feedback and contribution are always welcome :-)