[英]MS OPM (Output Protection Manager) Initializing X509 chain
我試圖使用OPMAPI與Visual C ++(本機)進行OPM(輸出保護管理器)。 我的目標是在HDMI設備驅動程序和顯示器之間啟用HDCP會話,以通過HDMI電纜保護內容。
我從MSDN得到了一個例子
在示例代碼中,有一些未記錄的關於認證的功能。 (ValidateX509Certificate,GetPublicKeyFromCertificate)
下面是示例代碼。
OPM_RANDOM_NUMBER random; // Random number from driver.
ZeroMemory(&random, sizeof(random));
BYTE *pbCertificate = NULL; // Pointer to a buffer to hold the certificate.
ULONG cbCertificate = 0; // Size of the certificate in bytes.
PUBLIC_KEY_VALUES *pKey = NULL; // The driver's public key.
// Get the driver's certificate chain + random number
HRESULT hr = pVideoOutput->StartInitialization(
&random,
&pbCertificate,
&cbCertificate );
// Validate the X.509 certificate. (Not shown.)
hr = ValidateX509Certificate(pbCertificate, cbCertificate);
if (FAILED(hr))
{
goto done;
}
// Get the public key from the certificate. (Not shown.)
hr = GetPublicKeyFromCertificate(
pbCertificate,
cbCertificate,
&pKey );
根據MSDN , IOPMVideoOutput::StartInitialization()
檢索隨機數和X509證書鏈(pbCertificate)。
沒有顯示ValidateX509Certificate()
和GetPublicKeyFromCertificate()
函數。
有人可以向我解釋上面兩個函數的編寫方式嗎?
或者我想知道如何將X.509證書鏈數據(DER)解碼為CERT_CHAIN_CONTEXT。
StartInitialization函數將驅動程序的完整證書鏈作為帶DER編碼的簽名PKCS7數據返回。 這不是我們通常處理的帶有DER編碼的普通X509證書。 不幸的是,這在MSDN頁面中沒有提到。
可以使用任何加密庫/框架從已簽名的PKCS7 DER中提取證書/證書鏈。 我們可以按照以下步驟使用Microsoft加密框架來驗證並獲取公鑰。
使用OpenSSL更容易(至少在我看來是這樣),它被解釋為“如何從PKCS7.p7b證書文件usind openssl中讀取證書文件” 。 它顯示了如何檢索證書,並且您可以使用X509_get_pubkey函數輕松地檢索公鑰。
這是一個示例代碼,用於實現提到的MSDN中缺少的功能,並展示如何基於標准窗口API https://github.com/wangf1978/D3DTest,CryptoUtil.cpp / OPMSession.cpp使用OPM和相關的加密實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.