CNGを使ったプログラムの開発
Windowsでは、暗号化や電子署名をするAPIとして従来のCryptoAPIから Crypto Next Genaration(CNG) APIに移行するようです。
myuTokenでは、このCrypto Next Genaration(CNG)を使って、ICカードにアクセスするプログラムを開発することも可能です。
ICカードから証明書を取り出す
Microsoft Base Smart Card Crypto ProviderのICカードから証明書を取り出すためのC++サンプルソース
HCRYPTPROV hProv;
HCRYPTKEY hKey;
PCERT_CONTEXT pCertContext;
if(!CryptAcquireContext(&hProv,NULL,MS_SCARD_PROV,PROV_RSA_FULL,0)) {
AfxMessageBox("CryptAcquireContext()");
return;
}
BYTE pbData[4096];
DWORD cbData = sizeof(pbData);
DWORD dwKeySpec = AT_KEYEXCHANGE;
if(!CryptGetUserKey(hProv,dwKeySpec,&hKey)) {
dwKeySpec = AT_SIGNATURE;
if(!CryptGetUserKey(hProv,dwKeySpec,&hKey)) {
AfxMessageBox("CryptGetUserKey() FAIL");
return;
}
}
if(!CryptGetKeyParam(hKey,KP_CERTIFICATE,pbData,&cbData,0)) {
AfxMessageBox("CryptGetKeyParam() FAIL");
return;
}
pCertContext = (PCERT_CONTEXT)CertCreateCertificateContext(
X509_ASN_ENCODING,pbData,cbData);
if(pCertContext == NULL) {
AfxMessageBox("CertCreateCertificateContext() FAIL");
return;
}
CryptReleaseContext(hProv,0);
myuTokenでは、ICカード挿入すると自動的に証明書をOSの証明書ストアにコピーするので
通常、アプリケーションがICカードから直接、この方法で証明書を取り出す必要はありません。
取り出した証明書を使って署名などを実行するためには、証明書にCSPのプロバイダ名と
コンテナ名をセットする必要が
あります。
|