MACの計算があわんあわんと騒いでいたが、ようやくできた。
いや、FeliCa Liteのユーザーズマニュアルを読んでいるときから、少し違和感があったのだ。
ドキュメントとしては基本的にビッグエンディアンで書かれているのだが、ブロックの説明では「Byte15-8」「Byte7-0」のように、リトルエンディアンで格納されているような記述になっていたのだ。
しかしこちらからすると、メモリ上のデータは1byteずつしか扱わないので、エンディアンもなにもあったもんじゃない。
なので、気にしていなかった。
MACの計算でも「CK1[7:0]」みたいになっていたので、このドキュメントはそういう表し方をしているんだ、と納得させていた。
しかしMACの計算があまりにもうまくいかないので、FeliCa Liteのドキュメントを全部読み直した。
PDF4つくらいで、それほど量は多くない。
読み進めるとテクニカルノートに「DES演算の入出力データの並び(エンディアン)について」という項目がある。
なんでも、FeliCa StandardとFeliCa LiteではDES演算に入れ込むデータの順が異なるという。
これか!!
入れ替えしてみると、計算があった。
そうか、あの記述はそういう意味があったのか、と張り巡らされた伏線に気付いた私であった。
お陰様で自分も出来ました、同じ所で引っかかってました、
返信削除自分はVCで OpenSSLのDES_ecb3_encrypt()を使用しました。
私はAndroidのJavaで実装したのですが、Javaも暗号化もよく使ったことがないので、ずっとAPIの使い方がまずいのだろうと思っていました。
返信削除これ、気付きにくいですよねぇ。