パッケージ jp.co.osstech.libjeid

クラス SpecifiedResidenceCardAP

java.lang.Object
jp.co.osstech.libjeid.SpecifiedResidenceCardAP

public class SpecifiedResidenceCardAP extends Object
特定在留カード等(特定在留カード・特定特別永住者証明書)APを操作するオブジェクトです。

特定在留カード等は個人番号カード上の在留APとして実装されるため、 起動直後は在留APがカレントではありません(JeidReader.selectSpecifiedResidenceCardAP()が 在留APを選択します)。

データ構造(EF構成・タグ体系・署名アルゴリズム)は第2世代在留カード等 (ResidenceCard2AP)と共通で、RC2Files系のデータクラスをそのまま使います。 異なるのはSM方式だけで、SET SESSION KEYによるRSA-OAEP鍵配送とcounterベースのIVを 用います(RCSSecureMessaging)。

  • コンストラクタの詳細

    • SpecifiedResidenceCardAP

      public SpecifiedResidenceCardAP(JeidReader reader)
      コンストラクタ
      パラメータ:
      reader - JeidReader
  • メソッドの詳細

    • startAC

      public void startAC(RCKey rckey) throws InvalidACKeyException, IOException
      アクセスコントロール(AC)を開始します。
      以降の端末とカード間の通信はセキュアメッセージング(SM)により適宜暗号化されます。 在留カード等番号による認証も行われます。

      カードがどの配送鍵で作られているかは事前に判別できないため、 RCSTransportKey.ENVIRONMENTSの順(main→test→dev)にSET SESSION KEYを試します。 配送鍵が違うとカード側のRSA-OAEP復号が失敗してエラーSWになるので、 SET SESSION KEYの成否だけで鍵の当たり外れを判別できます。

      フォールバックの判定にVERIFYは使いません。SET SESSION KEYが通った後の VERIFY失敗は「鍵は合っているが在留カード等番号が違う」なので、 次の鍵は試さずにInvalidACKeyExceptionを投げます。

      パラメータ:
      rckey - 在留カード等番号から作成したRCKeyオブジェクト
      例外:
      IOException - IOエラー
      InvalidACKeyException - 番号が正しくありません
    • readCommonData

      public RC2CommonData readCommonData() throws IOException
      共通データ要素を取得します。
      戻り値:
      共通データ要素
      例外:
      IOException - IOエラー
    • readCardType

      public RC2CardType readCardType() throws IOException
      カード種別を取得します。
      戻り値:
      カード種別
      例外:
      IOException - IOエラー
    • readFiles

      public RC2Files readFiles() throws IOException
      特定在留カード等AP内のすべてのデータを読み出します。

      startAC(jp.co.osstech.libjeid.RCKey)で確立したセッションを維持するため、在留APがカレントであれば 選択し直しません(selectAPIfNeeded()参照)。

      戻り値:
      特定在留カード等AP内のすべてのデータ(第2世代と同形のためRC2Files)
      例外:
      IOException - IOエラー