Compartilhar via


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