署名値の作成/証明書の読み出し
このページでは、PocketSign Verify SDK を使用してマイナンバーカードに搭載された署名用電子証明書を使用した署名値の作成と署名に使用された証明書の読み出しを行います。
あらかじめSDK のセットアップを完了しておいてください。
シーケンス
実装例
署名用電子証明書を使用した電子署名は、サービスを契約するための契約書や、申し込みを行う際の書面、同意文書等に行います。
ここでは、例として、
利用規約に同意します。
という文字列を署名対象として、署名値を作成します。
注意
署名用電子証明書は契約書等への電子署名を目的としており、単純に個人情報を取得するという目的のためには利用できません。 個人情報を取得するだけの目的で証明書を取得することや、意味のない情報に署名させることはおやめください。
- iOS
- Android
- Web(PaSoRi)
- Flutter
func run(pin: String) async throws -> String {
// JPKI APへの接続準備を行います。
let session = ReaderSession(dispatchQueue: DispatchQueue.main)
// JPKI APを初期化します。
let ap = JPKIAP(session: session)
// ここでは、これが署名対象です。
let documentToBeSigned = "利用規約に同意します。"
// JPKI APに対して署名を要求します。
let result = try await ap.signDataWithDigitalSignatureSecretKey(
password: pin, data: documentToBeSigned.data(using: .utf8)!, hashAlgorithm: .sha256)
session.close()
return "文書のハッシュ値: \(result.digest?.base64EncodedString() ?? "")\n"
+ "署名値: \(result.signature?.base64EncodedString() ?? "")\n"
+ "証明書: \(result.certificate?.base64EncodedString() ?? "")\n"
}
suspend fun run(pin: String): String {
// JPKI APへの接続準備を行います。
val session = ReaderSession(this, this)
// JPKI APを初期化します。
val ap = JPKIAP(session)
// ここでは、これが署名対象です。
val documentToBeSigned = "利用規約に同意します。"
// JPKI APに対して署名を要求します。
val result = ap.signDataWithDigitalSignatureSecretKey(pin, documentToBeSigned.toByteArray(), HashAlgorithm.SHA256)
session.close()
return "文書のハッシュ値: ${Base64.encodeToString(result.digest, Base64.NO_WRAP)}\n" +
"署名値: ${Base64.encodeToString(result.signature, Base64.NO_WRAP)}\n" +
"証明書: ${Base64.encodeToString(result.certificate, Base64.NO_WRAP)}\n"
}
注意
Verify SDK for Web PaSoRi は、現在ベータ版での提供となります。
const run = async (pin: string) => {
// JPKI APへの接続準備を行います。
const session = new ReaderSession(nfcPortLib);
// JPKI APを初期化します。
const ap = new JPKIAP(session);
// ここでは、これが署名対象です。
const documentToBeSigned = '利用規約に同意します。';
// JPKI APに対して署名を要求します。
const result = await ap.signDataWithDigitalSignatureSecretKey(
pin,
new TextEncoder().encode(documentToBeSigned),
HashAlgorithm.SHA256
);
await session.close();
return (
`文書のハッシュ値: ${btoa(String.fromCharCode(...result.digest))}\n` +
`署名値: ${btoa(String.fromCharCode(...result.signature))}\n` +
`証明書: ${btoa(String.fromCharCode(...result.certificate))}\n`
);
};
注意
Verify SDK for Flutter は、現在ベータ版での提供となります。
Future<String> run(String pin) async {
// JPKI APへの接続準備を行います。
final session = ReaderSession();
// JPKI APを初期化します。
final ap = JPKIAP(session);
// ここでは、これが署名対象です。
final documentToBeSigned = "利用規約に同意します。";
// JPKI APに対して署名を要求します。
final result = await ap.signDigestWithDigitalSignatureSecretKey(
pin,
Uint8List.fromList(utf8.encode(documentToBeSigned)),
HashAlgorithm.sha256,
);
await session.close();
return ("文書のハッシュ値: ${base64Encode(result.digest)}\n"
"署名値: ${base64Encode(result.signature)}\n"
"証明書: ${base64Encode(result.certificate)}\n");
}
ヒント
モック環境では、FeliCa カード(交通系 IC カード、Edy、WAON など)や、ISO/IEC 14443-4 Type-A カード(クレジットカードなど)をタッチすると、マイナンバーカードの挙動がシミュレートされます。 詳しくはSDK リファレンスをご覧ください。
実行結果
署名に成功すると、以下のように Base64 エンコードされた文書のハッシュ値、署名値、署名に使用された証明書が表示されます。 署名検証時には、このデータを PocketSign Verify API に送信します。

次のステップ
SDK を使って取得したデータを、Verify API に送信して署名検証を行いましょう。
その他、SDK の詳しい使い方やエラーの詳細等については、SDK リファレンスをご覧ください。