2015/12/23

[nfc]PC/SCを試す (4)

めんどくさくなったので、githubにプロジェクトを置いた。
https://github.com/hirokuma/PcscSample01

うちは、PaSoRi RC-S380/Sをインストールした環境だが、他のR/Wでもドライバを入れたりすれば同じように動くのでは無かろうか。
ACRさんのR/Wも気になるのだけど、PaSoRi以外って高いのよね。
ぷらっとオンラインさんが安そうだけど、まあ、物を増やすのはやめておこう。


今回は「Get Data」というコマンドを使ってみた。
初のカードへの送信だ(たぶん)。

https://github.com/hirokuma/PcscSample01/blob/master/PcscSample01/PcscSample01.cs#L150

どこからこの値が出てきたかというと、PC/SC仕様書のPart 3[pdf]からだ。
”3.2.2.1.3 Get Data Command”
HTML版もあるのだけど、そっちにはコマンドが載ってないみたいだし、”3.2.2.1.3”の目次がGet UID Commandになってるな。
最初なので、PDFから抜粋しておこう。

image

ときどき仕様書PDFの画像を載せてるけど、たぶんよくないよね。。。
取得先を載せてるし、承認がいるPDFの場合は載せてないつもりだから、許してほしい。

 

理屈はすっ飛ばして、このコマンドを流してみると、UIDが返ってきた。
これは、IC運転免許証も、nimocaもだ。
ただ、IC運転免許証はType-Bなので、PUPI、すなわち一時的なIDが返ってくる。
どのくらい一時的かというと、カードをコネクトしている間だけ同じになっているようだ。

FeliCaの場合にはIDmが取って来れたけど、これはデフォルトシステムのIDmみたいだ。
システムコードを指定して取ってきたいときは、たぶん生のコマンドをR/Wに流さないといかんのじゃなかろうかね。

ちなみにPaSoRiというかNFCポートというかでは、独自定義もあり、P1に0x00と0x01以外も指定できる。
この辺は、SonyのICS-D010/20Jにあるドキュメントを読まんといかんのじゃないかな。
まあ、私の今回の目標はType-Bを読むことだから、そこら辺には深入りしない。

 

これで、ようやくスタートラインくらいには立てたのかな?
まだAPIの使い方は甘いと思う。
pcsc-sharpのサンプルでは、CommandApduクラスやResponseApduクラスを使っていて、私のソースみたいにSW1やSW2を自分で分解しなくてもよくなっている。
https://github.com/danm-de/pcsc-sharp/blob/master/Examples/Transmit/Program.cs#L36
とはいえ、バイナリは自分で処理した方が面白いと思うから、これはこれでいいや。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。