SpecifiedResidenceCardAP

@available(iOS 13.0, *)
public class SpecifiedResidenceCardAP : NSObject

SpecifiedResidenceCardAPは特定在留カード等(特定在留カード・特定特別永住者証明書)APを 操作するクラスです。
特定在留カード等は個人番号カード上の在留APとして実装されるため、起動直後は 在留APがカレントではありません(JeidReader.selectRCS()が在留APを選択します)。
データ構造(EF構成・タグ体系・署名アルゴリズム)は第2世代在留カード等 (ResidenceCard2AP)と共通で、RC2Files系のデータクラスをそのまま使います。 異なるのはSM方式だけで、SET SESSION KEYによるRSA-OAEP鍵配送とcounterベースのIVを 用います(RCSSecureMessaging)。 (Android 版 SpecifiedResidenceCardAP と同じ実装)

  • コンストラクタ

    Declaration

    Swift

    @objc
    public init(_ reader: JeidReader)

    Parameters

    reader

    JeidReaderインスタンス

  • アクセスコントロール(AC)を開始します
    以降の端末とカード間の通信はセキュアメッセージング(SM)により適宜暗号化されます。 在留カード等番号による認証も行われます。
    カードがどの配送鍵で作られているかは事前に判別できないため、 TrustAnchor.RCS_TRANSPORT_KEY_ENVSの順(main→test→dev)にSET SESSION KEYを試します。 配送鍵が違うとカード側のRSA-OAEP復号が失敗してエラーSWになるので、 SET SESSION KEYの成否だけで鍵の当たり外れを判別できます。
    フォールバックの判定にVERIFYは使いません。SET SESSION KEYが通った後の VERIFY失敗は「鍵は合っているが在留カード等番号が違う」なので、 次の鍵は試さずにJeidError.invalidKeyをスローします。

    Throws

    番号が正しくない場合はJeidError.invalidKey(message:)、 その他の失敗時はエラーがスローされます

    Declaration

    Swift

    @objc
    public func startAC(_ rcKey: RCKey) throws

    Parameters

    rcKey

    在留カード等番号から作成したRCKeyオブジェクト

  • 共通データ要素を取得します

    Throws

    読み出しに失敗した場合、エラーがスローされます

    Declaration

    Swift

    @objc
    public func readCommonData() throws -> RC2CommonData

    Return Value

    共通データ要素

  • カード種別を取得します

    Throws

    読み出しに失敗した場合、エラーがスローされます

    Declaration

    Swift

    @objc
    public func readCardType() throws -> RC2CardType

    Return Value

    カード種別

  • 特定在留カード等AP内の全てのデータを読み出します
    startAC(_:)で確立したセッションを維持するため、在留APがカレントであれば 選択し直しません(selectAPIfNeeded()参照)。

    Throws

    読み出しに失敗した場合、エラーがスローされます

    Declaration

    Swift

    @objc
    public func readFiles() throws -> RC2Files

    Return Value

    特定在留カード等AP内の全てのデータ(第2世代と同形のためRC2Files)