com.docomostar.security
クラス PKCS7Signer

Object
  上位を拡張 com.docomostar.security.PKCS7Signer

public class PKCS7Signer
extends Object

PKCS#7 SignedData フォーマットに準拠したデジタル署名付きデータの生成を行うための機能を提供します。

署名を行うためには、 このクラスのオブジェクトに対して、 署名の対象となるデータ(署名対象データ)を update メソッドを用いて設定する必要があります。 update メソッドは複数回呼び出すことが可能であり、 その場合は既に設定されている署名対象データの末尾に追加されます。

また、署名を行う際の属性(メッセージダイジェストのアルゴリズムや、 署名の対象となるデータのコンテントタイプ)を設定することができます。 設定できる属性値については、対応するメソッドの説明文を参照してください。

オブジェクトに署名対象データが設定されている状態で sign() メソッドを呼び出すことにより、 デジタル署名付きデータオブジェクトを取得することができます。

ダイジェスト情報の暗号化に使用する秘密鍵(RSA)は、 以下の表のいずれかを使用します。 ユーザ証明書は秘密鍵に対応するものを使用します。 組み合わせは、以下の表の通りです。

暗号化に使用する秘密鍵ユーザ証明書
UIM 内の秘密鍵UIM 内のユーザ証明書
端末メモリ内の秘密鍵端末メモリ内のユーザ証明書
ミニマムスペック:
ミニマムスペックでは、 update メソッドにて設定できるデータの合計サイズは 150 キロバイトです。

導入されたバージョン:
Star-1.0
関連項目:
PKCS7SignedData

フィールドの概要
static int DATA
          コンテントタイプの一つで、 データ(data)を表します(=0)。
static int SIGNED_DATA
          コンテントタイプの一つで、 デジタル署名付きデータ(signedData)を表します(=1)。
 
コンストラクタの概要
PKCS7Signer()
          PKCS7Signer オブジェクトを生成します。
 
メソッドの概要
 int getContentType()
          このオブジェクトに設定されているコンテントタイプを取得します。
 String getDigestAlgorithm()
          このオブジェクトに設定されているメッセージダイジェストのアルゴリズムを取得します。
 void reset()
          このオブジェクトに設定されている署名対象データを破棄します。
 void setContentType(int contentType)
          署名対象データのコンテントタイプを設定します。
 void setDigestAlgorithm(String hashAlgorithm)
          メッセージダイジェストのアルゴリズムを設定します。
 PKCS7SignedData sign()
          デジタル署名付きデータ(PKCS#7 SignedData 形式)を生成します。
 PKCS7SignedData sign(int certificateId) [iアプリオプションAPI]
          任意に指定した秘密鍵を使用して、デジタル署名付きデータ (PKCS#7 SignedData 形式) を生成します。
 void update(byte input)
          指定されたバイトを入力値として、署名対象データに追加します。
 void update(byte[] buf)
          指定されたバイト配列を入力値として、署名対象データに追加します。
 void update(byte[] buf, int off, int len)
          指定されたバイト配列の一部を入力値として、署名対象データに追加します。
 
クラス Object から継承されたメソッド
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

DATA

public static final int DATA
コンテントタイプの一つで、 データ(data)を表します(=0)。

関連項目:
定数フィールド値

SIGNED_DATA

public static final int SIGNED_DATA
コンテントタイプの一つで、 デジタル署名付きデータ(signedData)を表します(=1)。

関連項目:
定数フィールド値
コンストラクタの詳細

PKCS7Signer

public PKCS7Signer()
PKCS7Signer オブジェクトを生成します。

例外:
IllegalStateException -
UIM の情報を取得できなかった場合に発生します。
UnsupportedOperationException -
端末に挿入されている UIM のバージョンが Version2 以降ではない場合に発生します。
メソッドの詳細

update

public void update(byte input)
指定されたバイトを入力値として、署名対象データに追加します。

パラメータ:
input - 追加する署名対象データのバイトを指定します。

update

public void update(byte[] buf)
指定されたバイト配列を入力値として、署名対象データに追加します。

パラメータ:
buf - 追加する署名対象データのバイト配列を指定します。
例外:
NullPointerException -
引数 buf が null の場合に発生します。

update

public void update(byte[] buf,
                   int off,
                   int len)
指定されたバイト配列の一部を入力値として、署名対象データに追加します。

パラメータ:
buf - 追加する署名対象データのバイト配列を指定します。
off - バイト配列における開始位置を指定します。
len - バイト配列における長さを指定します。
例外:
NullPointerException -
引数 buf が null の場合に発生します。
ArrayIndexOutOfBoundsException -
引数 off が 0 未満の場合、 引数 len が 0 未満の場合、 off + len が配列 buf の長さを超える場合に発生します。

setContentType

public void setContentType(int contentType)
署名対象データのコンテントタイプを設定します。

コンテントタイプのデフォルト値は DATA です。

署名対象データがデジタル署名付きデータの場合は SIGNED_DATA を、 それ以外の場合は DATA を指定してください。 これら以外の値を指定した場合、 不正な値が指定されたとして例外が発生します。

パラメータ:
contentType - コンテントタイプを指定します。
例外:
IllegalArgumentException -
引数 contentType に不正な値が指定された場合に発生します。

getContentType

public int getContentType()
このオブジェクトに設定されているコンテントタイプを取得します。

戻り値:
コンテントタイプを返します。

setDigestAlgorithm

public void setDigestAlgorithm(String hashAlgorithm)
メッセージダイジェストのアルゴリズムを設定します。

アルゴリズムのデフォルト値は "SHA-1" です。

端末がサポートしていないアルゴリズムを指定した場合、 不正な値が指定されたとして例外が発生します。

ミニマムスペック:
ミニマムスペックでは、メッセージダイジェストのアルゴリズムとして MD5(RFC 1321)、 SHA-1(NIST FIPS 180-1) をサポートしています。 それぞれ、このメソッドに対してアルゴリズム名 "MD5" または "SHA-1" を指定してください。

パラメータ:
hashAlgorithm - メッセージダイジェストのアルゴリズム名を指定します。
例外:
NullPointerException -
引数 hashAlgorithm が null の場合に発生します。
IllegalArgumentException -
引数 hashAlgorithm に不正な値が指定された場合に発生します。

getDigestAlgorithm

public String getDigestAlgorithm()
このオブジェクトに設定されているメッセージダイジェストのアルゴリズムを取得します。

戻り値:
メッセージダイジェストのアルゴリズム名を返します。

reset

public void reset()
このオブジェクトに設定されている署名対象データを破棄します。 署名対象データが設定されていない状態で呼び出された場合、 このメソッドは何もしません。

このメソッドを呼び出したとしても、 このオブジェクトに設定されている属性はリセットされません。


sign

public PKCS7SignedData sign()
                     throws PKCS7SignatureException
デジタル署名付きデータ(PKCS#7 SignedData 形式)を生成します。

このオブジェクトに設定されている署名対象データ全体に対して署名を生成します。

このメソッドの振る舞いは、 sign(int)の引数に CertificateStore.CERTIFICATE_UIM_ID が指定された場合と同じです。

戻り値:
デジタル署名付きデータオブジェクトを返します。
例外:
IllegalStateException -
このオブジェクトに署名対象データが設定されていない状態で呼び出された場合に発生します。
IllegalStateException -
既に、このオブジェクトまたは別オブジェクトの sign() または sign(int) メソッドを実行中の別スレッドが存在する場合に発生します。
IllegalStateException -
UIM 読み込み中の場合に発生します。
PKCS7SignatureException -
(ILLEGAL_CONTENT)
署名対象データのコンテントタイプが SIGNED_DATA である場合に、 署名対象データのフォーマットが不正の場合に発生します。
PKCS7SignatureException -
(PIN2_BLOCKED)
PIN2がブロックした場合に発生します。
PKCS7SignatureException -
(PIN2_ALREADY_BLOCKED)
PIN2が既にブロックしている場合に発生します。
PKCS7SignatureException -
(PUK2_BLOCKED)
PUK2がブロックした場合に発生します。
PKCS7SignatureException -
(PUK2_ALREADY_BLOCKED)
PUK2が既にブロックしている場合に発生します。
PKCS7SignatureException -
(PIN2_CANCELED)
ユーザがPIN2入力をキャンセルした場合に発生します。
PKCS7SignatureException -
(PUK2_CANCELED)
ユーザがPUK2入力をキャンセルした場合に発生します。
PKCS7SignatureException -
(SIGN_ERROR)
PIN2/PUK2ブロック、 入力キャンセル以外でデジタル署名の生成に失敗した場合に発生します。 以下の場合も含みます。
  • ユーザ証明書が有効期限切れである場合
  • ユーザ証明書が無効化設定されている場合
PKCS7SignatureException -
(UNDEFINED)
デジタル署名生成以外のエラーが発生した場合に発生します。

sign

public PKCS7SignedData sign(int certificateId)
                     throws PKCS7SignatureException,
                            StoreException [iアプリオプションAPI]
任意に指定した秘密鍵を使用して、デジタル署名付きデータ (PKCS#7 SignedData 形式) を生成します。

CertificateStore.selectEntryId() で取得されたユーザ証明書データのエントリ ID を 引数 certificateId に指定します。

指定したエントリ ID が CertificateStore.CERTIFICATE_UIM_ID である場合は、 UIM 内のユーザ証明書データにより、デジタル署名付きデータを生成し、 その際に PIN2 入力が行われます。
指定したエントリ ID がその他のエントリ ID である場合は、 端末メモリ内のユーザ証明書データにより、デジタル署名付きデータを生成し、 その際に端末暗証番号入力(または指紋認証)が行われます。

このオブジェクトに設定されている署名対象データ全体に対して署名を生成します。

ただし、このオブジェクトに設定されているコンテントタイプが SIGNED_DATA である場合、署名対象データにはデジタル署名付きデータ (PKCS#7 SignedData フォーマット準拠の ASN.1 DER エンコード形式) が設定されていなければなりません。 それ以外のデータが設定されている場合、 署名対象データのフォーマットが不正として例外が発生します。

デジタル署名付きデータの生成時に、 ユーザ証明書にチェーンされた証明書(中間証明書、Root 証明書)を、 デジタル署名付きデータに設定します。 なお、チェーンされた証明書が端末内にない場合は、 チェーンされた証明書を設定せずに、デジタル署名付きデータを生成します。

本メソッドの呼び出しが正常に終了すると、 このオブジェクトは reset() メソッドを呼び出した場合と同様の状態となります。

引数 certificateId に CertificateStore.CERTIFICATE_UIM_ID が指定された場合に発生する例外については、このメソッドの「例外」欄には記載していません。 sign() の「例外」欄の記述を参照してください。

Star アプリから端末メモリ内の証明書を利用する機能をサポートしていない端末の場合、 引数 certificateId に CertificateStore.CERTIFICATE_UIM_ID 以外のエントリ ID が指定されると、例外 UnsupportedOperationException が発生します。

パラメータ:
certificateId - CertificateStore.selectEntryId() で取得したエントリ ID を指定します。
戻り値:
デジタル署名付きデータオブジェクトを返します。
例外:
UnsupportedOperationException -
端末が Star アプリから端末メモリ内の証明書を利用する機能をサポートしていない場合に発生します。