Skip to content

Traceback and "silent" crash when running example with TypeEncContent #265

Open
@radovanhorvat

Description

@radovanhorvat

Hello,

When trying out the "Encrypt" example found in:

https://xmlsec.readthedocs.io/en/stable/examples.html,

I get two errors, both using xmlsec.constants.TypeEncContent, eg with:

from lxml import etree

import xmlsec

manager = xmlsec.KeysManager()
key = xmlsec.Key.from_file('rsacert.pem', xmlsec.constants.KeyDataFormatCertPem, None)
manager.add_key(key)
template = etree.parse('enc1-doc.xml').getroot()
enc_data = xmlsec.template.encrypted_data_create(
    template,
    xmlsec.constants.TransformAes128Cbc,
    type=xmlsec.constants.TypeEncContent,
    ns="xenc",
)

xmlsec.template.encrypted_data_ensure_cipher_value(enc_data)
key_info = xmlsec.template.encrypted_data_ensure_key_info(enc_data, ns="dsig")
enc_key = xmlsec.template.add_encrypted_key(key_info, xmlsec.constants.TransformRsaOaep)
xmlsec.template.encrypted_data_ensure_cipher_value(enc_key)
data = template.find('./Data')

# Encryption
enc_ctx = xmlsec.EncryptionContext(manager)
enc_ctx.key = xmlsec.Key.generate(
    xmlsec.constants.KeyDataAes, 128, xmlsec.constants.KeyDataTypeSession
)
enc_data = enc_ctx.encrypt_xml(enc_data, data)
enc_method = xmlsec.tree.find_child(
    enc_data, xmlsec.constants.NodeEncryptionMethod, xmlsec.constants.EncNs
)
key_info = xmlsec.tree.find_child(
    enc_data, xmlsec.constants.NodeKeyInfo, xmlsec.constants.DSigNs
)
enc_method = xmlsec.tree.find_node(
    key_info, xmlsec.constants.NodeEncryptionMethod, xmlsec.constants.EncNs
)
cipher_value = xmlsec.tree.find_node(
    key_info, xmlsec.constants.NodeCipherValue, xmlsec.constants.EncNs
)
print(etree.tostring(cipher_value))
  1. For the first case, the contents of enc1-doc.xml are as found in https://github.com/xmlsec/python-xmlsec/tree/master/doc/source/examples:
<?xml version="1.0" encoding="UTF-8"?>
<!--
XML Security Library example: Original XML doc file for enc example.
-->
<Envelope>
<Data>Hello, World!</Data>
</Envelope>

When running the snippet above, I get:

Traceback (most recent call last):
  File "encrypt.py", line 30, in <module>
    enc_data = enc_ctx.encrypt_xml(enc_data, data)
  File "src\lxml\public-api.pxi", line 29, in lxml.etree.elementFactory
  File "src\lxml\etree.pyx", line 1629, in lxml.etree._elementFactory
  File "src\lxml\classlookup.pxi", line 405, in lxml.etree._parser_class_lookup
  File "src\lxml\classlookup.pxi", line 257, in lxml.etree._callLookupFallback
  File "src\lxml\classlookup.pxi", line 336, in lxml.etree._lookupDefaultElementClass
AssertionError: Unknown node type: 3
  1. For the second case, when modifying the xml content to:
<?xml version="1.0" encoding="UTF-8"?>
<!--
XML Security Library example: Original XML doc file for enc example.
-->
<Envelope>
<Data>
<Data2>Hello, World!</Data2>
</Data>
</Envelope>

I get a crash with no Traceback, eg the print statement at the end of the snippet is never even executed.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions