Пример #1
0
def verificar_assinatura(filho_id, atributo_id, certificadoras=''):
    # certificadoras -> lista de arquivos e/ou diretório separados por ponto e vígula (;)
    xml = filho_id
    while (xml._XML__pai):
        xml = xml._XML__pai
    return PoleXmlSec.verify(serializar(xml), atributo_id, filho_id._XML__nome,
                             certificadoras) == 1
Пример #2
0
def verificar_assinatura(filho_id, atributo_id, certificadoras=''):
    # certificadoras -> lista de arquivos e/ou diretório
    # separados por ponto e vígula (;)
    xml = filho_id
    while (xml._XML__pai):
        xml = xml._XML__pai
    return (PoleXmlSec.verify(serializar(xml),
            atributo_id, filho_id._XML__nome, certificadoras) == 1)
Пример #3
0
def assinar(filho_id, atributo_id, arquivo_chave_pem, arquivo_certificado_pem):
    # Se não existir, criar estrutura para assinatura com o atributo_id informado
    xml = filho_id
    while (xml._XML__pai):
        xml = xml._XML__pai
    no_assinatura = filho_id._XML__pai
    if not no_assinatura('Signature'):
        no_assinatura.Signature['xmlns'] = "http://www.w3.org/2000/09/xmldsig#"
        no_assinatura.Signature.SignedInfo.CanonicalizationMethod[
            'Algorithm'] = "http://www.w3.org/TR/2001/REC-xml-c14n-20010315"
        no_assinatura.Signature.SignedInfo.SignatureMethod[
            'Algorithm'] = "http://www.w3.org/2000/09/xmldsig#rsa-sha1"
        if atributo_id is None or len(atributo_id) == 0:
            no_assinatura.Signature.SignedInfo.Reference['URI'] = ''
        else:
            no_assinatura.Signature.SignedInfo.Reference[
                'URI'] = '#' + filho_id[atributo_id]
        no_assinatura.Signature.SignedInfo.Reference.Transforms.Transform[
            'Algorithm'] = "http://www.w3.org/2000/09/xmldsig#enveloped-signature"
        no_assinatura.Signature.SignedInfo.Reference.Transforms.Transform(
        )['Algorithm'] = "http://www.w3.org/TR/2001/REC-xml-c14n-20010315"
        no_assinatura.Signature.SignedInfo.Reference.DigestMethod[
            'Algorithm'] = "http://www.w3.org/2000/09/xmldsig#sha1"
        no_assinatura.Signature.SignedInfo.Reference.DigestValue
        no_assinatura.Signature.SignatureValue
        no_assinatura.Signature.KeyInfo.X509Data.X509Certificate
    # Otimizar tamanho do XML tirando espaços extras e quebras de linha, salvando em um arquivo
    #open('/tmp/nao_assinado.xml', 'w').write(exportar(xml, -1))
    # Assinar o conteúdo do arquivo salvo acima e salvar o resultado em outro
    #import os
    #os.system('xmlsec1 sign --id-attr:' + atributo_id + ' ' + filho_id._XML__nome + ' --output /tmp/assinado.xml --privkey-pem ' + arquivo_chave_pem + ',' + arquivo_certificado_pem + ' /tmp/nao_assinado.xml')
    #del os
    # Recarregar o xml assinado e retorná-lo
    #return open('/tmp/assinado.xml').read().replace('\r', '').replace('\n', '')
    xml_assinado = PoleXmlSec.sign(serializar(xml), arquivo_chave_pem,
                                   arquivo_certificado_pem, atributo_id,
                                   filho_id._XML__nome)
    xml_assinado = xml_assinado.replace('\r', '').replace('\n', '')
    xml_assinado = importar(xml_assinado)
    caminho = ['Signature']
    pai = no_assinatura
    while pai._XML__nome is not None:
        caminho.append(pai._XML__nome)
        pai = pai._XML__pai
    assinatura = xml_assinado
    for c in caminho[::-1]:
        assinatura = assinatura(c, 1)
    no_assinatura.Signature.SignedInfo.Reference.DigestValue = assinatura.SignedInfo.Reference.DigestValue
    no_assinatura.Signature.SignatureValue = assinatura.SignatureValue
    no_assinatura.Signature.KeyInfo.X509Data.X509Certificate = assinatura.KeyInfo.X509Data.X509Certificate
    return xml
Пример #4
0
def assinar(filho_id, atributo_id, arquivo_chave_pem, arquivo_certificado_pem):
    # Se não existir, criar estrutura para assinatura com o atributo_id informado
    xml = filho_id
    while (xml._XML__pai):
        xml = xml._XML__pai
    no_assinatura = filho_id._XML__pai
    if not no_assinatura('Signature'):
        no_assinatura.Signature['xmlns'] = "http://www.w3.org/2000/09/xmldsig#"
        no_assinatura.Signature.SignedInfo.CanonicalizationMethod['Algorithm'] = "http://www.w3.org/TR/2001/REC-xml-c14n-20010315"
        no_assinatura.Signature.SignedInfo.SignatureMethod['Algorithm'] = "http://www.w3.org/2000/09/xmldsig#rsa-sha1"
        if atributo_id is None or len(atributo_id) == 0:
            no_assinatura.Signature.SignedInfo.Reference['URI'] = ''
        else:
            no_assinatura.Signature.SignedInfo.Reference['URI'] = '#' + filho_id[atributo_id]
        no_assinatura.Signature.SignedInfo.Reference.Transforms.Transform['Algorithm'] = "http://www.w3.org/2000/09/xmldsig#enveloped-signature"
        no_assinatura.Signature.SignedInfo.Reference.Transforms.Transform()['Algorithm'] = "http://www.w3.org/TR/2001/REC-xml-c14n-20010315"
        no_assinatura.Signature.SignedInfo.Reference.DigestMethod['Algorithm'] = "http://www.w3.org/2000/09/xmldsig#sha1"
        no_assinatura.Signature.SignedInfo.Reference.DigestValue
        no_assinatura.Signature.SignatureValue
        no_assinatura.Signature.KeyInfo.X509Data.X509Certificate
    # Otimizar tamanho do XML tirando espaços extras e quebras de linha, salvando em um arquivo
    #open('/tmp/nao_assinado.xml', 'w').write(exportar(xml, -1))
    # Assinar o conteúdo do arquivo salvo acima e salvar o resultado em outro
    #import os
    #os.system('xmlsec1 sign --id-attr:' + atributo_id + ' ' + filho_id._XML__nome + ' --output /tmp/assinado.xml --privkey-pem ' + arquivo_chave_pem + ',' + arquivo_certificado_pem + ' /tmp/nao_assinado.xml')
    #del os
    # Recarregar o xml assinado e retorná-lo
    #return open('/tmp/assinado.xml').read().replace('\r', '').replace('\n', '')
    xml_assinado = PoleXmlSec.sign(serializar(xml), arquivo_chave_pem, arquivo_certificado_pem, atributo_id, filho_id._XML__nome)
    xml_assinado = xml_assinado.replace('\r', '').replace('\n', '')
    xml_assinado = importar(xml_assinado)
    caminho = ['Signature']
    pai = no_assinatura
    while pai._XML__nome is not None:
        caminho.append(pai._XML__nome)
        pai = pai._XML__pai
    assinatura = xml_assinado
    for c in caminho[::-1]:
        assinatura = assinatura(c, 1)
    no_assinatura.Signature.SignedInfo.Reference.DigestValue = assinatura.SignedInfo.Reference.DigestValue
    no_assinatura.Signature.SignatureValue = assinatura.SignatureValue
    no_assinatura.Signature.KeyInfo.X509Data.X509Certificate = assinatura.KeyInfo.X509Data.X509Certificate
    return xml