我试图使用Visual C++(本机)进行OPM(输出保护管理器)
OPMAPI。我的目标是在HDMI设备驱动程序和显示器之间启用HDCP session ,以通过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加密框架来验证并获取公钥。
使用ozt_a解释的OpenSSL更加容易(至少在我看来是这样)。它显示了如何检索证书,您可以使用X509_get_pubkey函数轻松地检索公钥。
关于c++ - MS OPM(输出保护管理器)初始化X509链,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21012866/