Public Function LikeIsMyEkey() As Boolean
On Error GoTo DeErr
Dim i As Long
Dim PubCertInKey As New Certificate
Dim strPubCertInKey As String
Dim Rtn As Long
Dim iPort As Long
Dim dwContainerNo As Long
Dim dwKeySpec As Long
Dim CertLen As Long
Dim CertDataTemp() As Byte
Dim CertData() As Byte
LikeIsMyEkey = False
iPort = 0
Rtn = XC_ConnectEkey(iPort, hEkey)
Select Case Rtn
Case 0
' MsgBox "连接Ekey成功!", vbInformation, "连接Ekey"
Case Else
' MsgBox "连接Ekey失败!", vbCritical, "连接Ekey"
MsgBox funGetEkeyErrMsg(Rtn) & Rtn, vbInformation, "读Ekey内签名公钥时,连接EKey失败"
Exit Function
End Select
dwContainerNo = 0
Rtn = XC_SetCurContainer(hEkey, dwContainerNo, hContainer)
Select Case Rtn
Case 0
' MsgBox "设置当前容器成功!", vbInformation, "设置当前容器"
Case Else
MsgBox funGetEkeyErrMsg(Rtn) & Rtn, vbCritical, "读Ekey内签名公钥时,设置当前容器失败"
Exit Function
End Select
dwKeySpec = 2
CertLen = 4096
ReDim CertDataTemp(1 To CertLen)
Rtn = XC_ReadCert(hContainer, CertDataTemp(1), CertLen, dwKeySpec)
Select Case Rtn
Case 0
ReDim CertData(1 To CertLen)
For i = 1 To CertLen
CertData(i) = CertDataTemp(i)
Next
PubCertInKey.Import CertData
strPubCertInKey = PubCertInKey.Export(CAPICOM_ENCODE_BASE64)
Case Else
MsgBox funGetEkeyErrMsg(Rtn) & Rtn, vbCritical, "读Ekey内签名公钥时,证书提取失败!"
Exit Function
End Select
Rtn = XC_DisconnectEkey(hEkey)
Select Case Rtn
Case 0
' MsgBox "断开Ekey成功!", vbInformation, "断开Ekey"
Case Else
' MsgBox "断开Ekey失败!", vbCritical, "断开Ekey"
MsgBox funGetEkeyErrMsg(Rtn) & Rtn, vbInformation, "读Ekey内签名公钥时,断开EKey失败"
Exit Function
End Select
If strPubCertInKey = B64PubSignCert Then
LikeIsMyEkey = True
End If
DoEvents
Exit Function
DeErr:
MsgBox Err.Description, vbCritical, "Ekey归属检测"
End Function
Private Sub mnutest_Click()
On Error GoTo DeErr
If LikeIsMyEkey = True Then
MsgBox "Ekey ok"
MsgBox LikeIsMyEkey
Else
MsgBox "Ekey bad"
End If
Exit Sub
DeErr:
MsgBox Err.Description, vbCritical, "测试"
End Sub