Files
stepanalyser/.venv/lib/python3.12/site-packages/ezdxf/tools/crypt.py
Christian Anetzberger a197de9456 initial
2026-01-22 20:23:51 +01:00

59 lines
1.7 KiB
Python

# Purpose: decode/encode DXF proprietary data
# Created: 01.05.2014
# Copyright (c) 2014-2018, Manfred Moitzi
# License: MIT License
from typing import Iterable
_decode_table = {
0x20: ' ',
0x40: '_',
0x5F: '@',
}
for c in range(0x41, 0x5F):
_decode_table[c] = chr(0x41 + (0x5E - c)) # 0x5E -> 'A', 0x5D->'B', ...
def decode(text_lines: Iterable[str]) -> Iterable[str]:
""" Decode the Standard :term:`ACIS` Text (SAT) format "encrypted" by AutoCAD. """
def _decode(text):
dectab = _decode_table # fast local var
s = []
text = bytes(text, 'ascii')
skip = False
for c in text:
if skip:
skip = False
continue
if c in dectab:
s += dectab[c]
skip = (c == 0x5E) # skip space after 'A'
else:
s += chr(c ^ 0x5F)
return ''.join(s)
return (_decode(line) for line in text_lines)
_encode_table = {
' ': ' ', # 0x20
'_': '@', # 0x40
'@': '_', # 0x5F
}
for c in range(0x41, 0x5F):
_encode_table[chr(c)] = chr(0x5E - (c - 0x41)) # 0x5E->'A', 'B'->0x5D, ...
def encode(text_lines: Iterable[str]) -> Iterable[str]:
""" Encode the Standard :term:`ACIS` Text (SAT) format by AutoCAD "encryption" algorithm. """
def _encode(text):
s = []
enctab = _encode_table # fast local var
for c in text:
if c in enctab:
s += enctab[c]
if c == 'A':
s += ' ' # append a space for an 'A' -> cryptography
else:
s += chr(ord(c) ^ 0x5F)
return ''.join(s)
return (_encode(line) for line in text_lines)