com.nttdocomo.security
クラス PKCS7Signer

Object
  拡張com.nttdocomo.security.PKCS7Signer

public class PKCS7Signer
extends Object

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

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

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

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

ダイジェスト情報の暗号化には UIM 内の秘密鍵(RSA)を使用します。 また、証明書は UIM 内のユーザ証明書を使用します。

[DoJa-5.0 (903i) 以降]
ダイジェスト情報の暗号化には、端末メモリ内の秘密鍵も使用可能です。 また、証明書は、端末メモリ内のユーザ証明書も使用します。

ミニマムスペック:
ミニマムスペックでは、 update メソッドにて設定できるデータの合計サイズは 150 キロバイトです。

導入されたバージョン:
DoJa-4.1(902i)
関連項目:
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)
          任意に指定した秘密鍵を使用して、デジタル署名付きデータ (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 SignatureException,
                            InterruptedOperationException
デジタル署名付きデータ(PKCS#7 SignedData 形式)を生成します。

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

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

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

sign

public PKCS7SignedData sign(int certificateId)
                     throws SignatureException,
                            InterruptedOperationException,
                            StoreException
任意に指定した秘密鍵を使用して、デジタル署名付きデータ (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() の「例外」欄の記述を参照してください。

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

パラメータ:
certificateId - CertificateStore.selectEntryId() で取得したエントリ ID を指定します。
戻り値:
デジタル署名付きデータオブジェクトを返します。
例外:
UnsupportedOperationException - 端末が i アプリから端末メモリ内の証明書を利用する機能をサポートしていない場合に発生します。
IllegalStateException - 待ち受け実行時の非活性化状態で呼び出された場合に発生します。
IllegalStateException - このオブジェクトに署名対象データが設定されていない状態で呼び出された場合に発生します。
IllegalStateException - 既に、このオブジェクトまたは別オブジェクトの sign() または sign(int) メソッドを実行中の別スレッドが存在する場合に発生します。
InterruptedOperationException - 端末暗証番号(または指紋認証)の入力画面表示中に非活性化状態に遷移した場合に発生します。
StoreException - 引数 certificateId に対応したユーザ証明書が存在しない場合や、 無効な ID (区間 [-256, -1] に属する整数) が指定された場合に発生します(NOT_FOUND)。
SignatureException - 署名対象データのコンテントタイプが SIGNED_DATA である場合に、 署名対象データのフォーマットが不正の場合に発生します(ILLEGAL_CONTENT)。
SignatureException - 端末暗証番号入力(または指紋認証)をキャンセルした場合や、 端末暗証番号入力(または指紋認証)に3回失敗した場合に発生します(SECURITY_CODE_REJECTED)。
SignatureException - デジタル署名値(PKCS#7SignedData の signerInfos の encryptedDigest プロパティ)の生成に失敗したことを示します(ENCRYPTED_DIGEST_ERROR)。
SignatureException -
ユーザの入力操作以外でデジタル署名の生成に失敗した場合に発生します(SIGN_ERROR)。 以下の場合も含みます。
  • ユーザ証明書が有効期限切れである場合
  • ユーザ証明書が無効化設定されている場合
SignatureException - デジタル署名生成以外のエラーが発生した場合に発生します (UNDEFINED)。
導入されたバージョン:
DoJa-5.0 (903i)


NTT DOCOMO,INC.

本製品または文書は著作権法により保護されており、その使用、複製、再頒布および逆コンパイルを制限するライセンスのもとにおいて頒布されます。NTTドコモ(その他に許諾者がある場合は当該許諾者も含めて)の書面による事前の許可なく、本製品および関連する文書のいかなる部分も、いかなる方法によっても複製することが禁じられます。フォントを含む第三者のソフトウェアは、著作権法により保護されており、その提供者からライセンスを受けているものです。

Sun、Sun Microsystems、Java、J2MEおよびJ2SEは、米国およびその他の国における米国 Sun Microsystems,Inc.の商標または登録商標です。サンのロゴマークは、米国 Sun Microsystems, Inc.の登録商標です。

FeliCaは、ソニー株式会社が開発した非接触ICカードの技術方式です。FeliCaは、ソニー株式会社の登録商標です。

「iモード」、「iアプリ/アイアプリ」、「i-αppli」ロゴ、「DoJa」はNTTドコモの商標または登録商標です。

その他記載された会社名、製品名などは該当する各社の商標または登録商標です。