Cotribuindo um documento
[CAPICOM é um componente somente de 32 bits que está disponível para uso nos seguintes sistemas operacionais: Windows Server 2008, Windows Vista e Windows XP. Em vez disso, use o .NET Framework para implementar recursos de segurança. Para obter mais informações, consulte Alternativas ao uso de CAPICOM.]
Um documento pode ser assinado por mais de um signatário. Isso acontece quando, por exemplo, duas ou mais partes assinam um contrato ou um relatório de despesas. No exemplo a seguir, um documento já assinado é recebido por um segundo signatário. Esse signatário usa o método CoSign para anexar uma assinatura adicional ao documento.
Se ocorrer algum erro CAPICOM, um valor negativo será retornado na propriedade Err.Number . Para obter mais informações sobre códigos de erro CAPICOM, consulte CAPICOM_ERROR_CODE. Se o código de erro na propriedade Err.Number for um valor positivo, o erro será um erro do Windows. Para obter informações sobre códigos de erro do Windows, consulte Winerror.h.
Observação
A co-atribuição de um documento também exige que o cosigner tenha um certificado disponível com uma chave privada para criar a assinatura. Se um signatário não for especificado na chamada do método Sign e não houver nenhum certificado no CAPICOM_MY_STORE com uma chave privada associada, o método falhará. Se houver um e apenas um certificado em CAPICOM_MY_STORE com uma chave privada associada, essa chave e o certificado serão usados. Se houver mais de um certificado utilizável, um prompt será exibido para permitir que o usuário escolha o certificado desejado.
Se o método CoSign for usado em um aplicativo baseado na Web, um prompt será sempre exibido para obter a permissão do usuário antes que uma assinatura seja criada usando a chave privada desse signatário.
No exemplo a seguir, os arquivos que contêm o documento a ser assinado e as assinaturas atuais nesse documento são lidos, a assinatura é cosignada e a nova assinatura é gravada em um arquivo. O exemplo usa uma assinatura desanexada com os dados assinados e a assinatura em arquivos separados.
Sub CoSignContent(ByVal InputFile1Name As String, ByVal _
InputFile2Name As String, ByVal OutputFileName As String)
On Error GoTo ErrorHandler
Dim c As String
Dim s As String
Dim CS As String
Dim Signobj As New SignedData
Open InputFile1Name for Input as #1
Input #1, s
Close #1
Open InputFileName2 for input as #2
Input #2, c
Close #2
Signobj.Content = c
Signobj.Verify(s)
CS = Signobj.CoSign
Open OutputFileName for output as #3
Write #3, CS
Close # 3
Signobj = Nothing
MsgBox("Cosign finished. Cosignature saved to a file.")
Exit Sub
ErrorHandler:
If err.number > 0 Then
MsgBox("Visual Basic error found:" & err.description)
Else
MsgBox("CAPICOM error found : " & err.number)
End If
End Sub