1# Created: 01.05.2014, 2018 rewritten for pytest
2# Copyright (C) 2014-2019, Manfred Moitzi
3# License: MIT License
4from ezdxf.tools.crypt import decode, encode
5
6
7def test_decode():
8    for enc, dec in zip(decode(ENCODED_LINES), DECODED_LINES):
9        assert dec == enc
10
11
12def test_encode():
13    for enc, dec in zip(ENCODED_LINES, encode(DECODED_LINES)):
14        assert enc == dec
15
16
17DECODED_LINES = r"""21200 115 2 26
1816 Autodesk AutoCAD 19 ASM 217.0.0.4503 NT 0
191 9.9999999999999995e-007 1e-010
20asmheader $-1 -1 @12 217.0.0.4503 #
21body $2 -1 $-1 $3 $-1 $-1 #
22ref_vt-eye-attrib $-1 -1 $-1 $-1 $1 $4 $5 #
23lump $6 -1 $-1 $-1 $7 $1 #
24eye_refinement $-1 -1 @5 grid  1 @3 tri 1 @4 surf 0 @3 adj 0 @4 grad 0 @9 postcheck 0 @4 stol 0.020115179941058159 @4 ntol 30 @4 dsil 0 @8 flatness 0 @7 pixarea 0 @4 hmax 0 @6 gridar 0 @5 mgrid 3000 @5 ugrid 0 @5 vgrid 0 @10 end_fields #
25vertex_template $-1 -1 3 0 1 8 #
26ref_vt-eye-attrib $-1 -1 $-1 $-1 $3 $4 $5 #
27shell $8 -1 $-1 $-1 $-1 $9 $-1 $3 #
28ref_vt-eye-attrib $-1 -1 $-1 $-1 $7 $4 $5 #
29face $10 -1 $-1 $11 $12 $7 $-1 $13 forward single #
30fmesh-eye-attrib $-1 -1 $14 $-1 $9 #
31face $15 -1 $-1 $16 $17 $7 $-1 $18 reversed single #
32loop $-1 -1 $-1 $-1 $19 $9 #
33plane-surface $-1 -1 $-1 5 5 10 0 0 1 1 0 0 forward_v I I I I #
34ref_vt-eye-attrib $-1 -1 $-1 $10 $9 $4 $5 #
35fmesh-eye-attrib $-1 -1 $20 $-1 $11 #
36face $21 -1 $-1 $22 $23 $7 $-1 $24 reversed single #
37loop $-1 -1 $-1 $-1 $25 $11 #
38plane-surface $-1 -1 $-1 5 5 0 0 0 1 1 0 0 forward_v I I I I #
39coedge $-1 -1 $-1 $26 $27 $28 $29 forward $12 $-1 #
40ref_vt-eye-attrib $-1 -1 $-1 $15 $11 $4 $5 #
41fmesh-eye-attrib $-1 -1 $30 $-1 $16 #
42face $31 -1 $-1 $32 $33 $7 $-1 $34 reversed single #
43loop $-1 -1 $-1 $-1 $35 $16 #
44plane-surface $-1 -1 $-1 5 0 5 0 1 0 0 0 1 forward_v I I I I #
45coedge $-1 -1 $-1 $36 $37 $38 $39 forward $17 $-1 #
46coedge $-1 -1 $-1 $40 $19 $41 $42 forward $12 $-1 #
47coedge $-1 -1 $-1 $19 $40 $43 $44 forward $12 $-1 #
48coedge $-1 -1 $-1 $45 $46 $19 $29 reversed $47 $-1 #
49edge $48 -1 $-1 $49 -5 $50 5 $28 $51 forward @7 unknown #
50ref_vt-eye-attrib $-1 -1 $-1 $21 $16 $4 $5 #
51fmesh-eye-attrib $-1 -1 $52 $-1 $22 #
52face $53 -1 $-1 $54 $55 $7 $-1 $56 reversed single #
53loop $-1 -1 $-1 $-1 $57 $22 #
54plane-surface $-1 -1 $-1 0 5 5 1 0 0 0 0 -1 forward_v I I I I #
55coedge $-1 -1 $-1 $58 $43 $59 $60 forward $23 $-1 #
56coedge $-1 -1 $-1 $61 $25 $58 $62 forward $17 $-1 #
57coedge $-1 -1 $-1 $25 $61 $63 $64 forward $17 $-1 #
58coedge $-1 -1 $-1 $46 $45 $25 $39 reversed $47 $-1 #
59edge $65 -1 $-1 $66 -5 $67 5 $38 $68 forward @7 unknown #
60coedge $-1 -1 $-1 $27 $26 $69 $70 forward $12 $-1 #
61coedge $-1 -1 $-1 $71 $72 $26 $42 reversed $55 $-1 #
62edge $73 -1 $-1 $50 -5 $74 5 $41 $75 forward @7 unknown #
63coedge $-1 -1 $-1 $35 $76 $27 $44 reversed $23 $-1 #
64edge $77 -1 $-1 $78 -5 $49 5 $43 $79 forward @7 unknown #
65coedge $-1 -1 $-1 $38 $28 $76 $80 forward $47 $-1 #
66coedge $-1 -1 $-1 $28 $38 $71 $81 reversed $47 $-1 #
67loop $-1 -1 $-1 $-1 $45 $54 #
68ptlist-eye-attrib $-1 -1 $-1 $-1 $29 #
69vertex $-1 -1 $-1 $29 0 $82 #
70vertex $-1 -1 $-1 $29 1 $83 #
71straight-curve $-1 -1 $-1 10 5 10 0 1 0 I I #
72ref_vt-eye-attrib $-1 -1 $-1 $31 $22 $4 $5 #
73fmesh-eye-attrib $-1 -1 $84 $-1 $32 #
74face $85 -1 $-1 $-1 $47 $7 $-1 $86 reversed single #
75loop $-1 -1 $-1 $-1 $71 $32 #
76plane-surface $-1 -1 $-1 5 10 5 0 -1 0 0 0 -1 forward_v I I I I #
77coedge $-1 -1 $-1 $87 $69 $72 $88 forward $33 $-1 #
78coedge $-1 -1 $-1 $76 $35 $36 $62 reversed $23 $-1 #
79coedge $-1 -1 $-1 $69 $87 $35 $60 reversed $33 $-1 #
80edge $89 -1 $-1 $78 -5 $90 5 $59 $91 forward @7 unknown #
81coedge $-1 -1 $-1 $37 $36 $87 $92 forward $17 $-1 #
82edge $93 -1 $-1 $67 -5 $90 5 $58 $94 forward @7 unknown #
83coedge $-1 -1 $-1 $72 $71 $37 $64 reversed $55 $-1 #
84edge $95 -1 $-1 $96 -5 $66 5 $63 $97 forward @7 unknown #
85ptlist-eye-attrib $-1 -1 $-1 $-1 $39 #
86vertex $-1 -1 $-1 $39 0 $98 #
87vertex $-1 -1 $-1 $80 1 $99 #
88straight-curve $-1 -1 $-1 10 5 0 0 -1 0 I I #
89coedge $-1 -1 $-1 $57 $59 $40 $70 reversed $33 $-1 #
90edge $100 -1 $-1 $74 -5 $78 5 $69 $101 forward @7 unknown #
91coedge $-1 -1 $-1 $63 $41 $46 $81 forward $55 $-1 #
92coedge $-1 -1 $-1 $41 $63 $57 $88 reversed $55 $-1 #
93ptlist-eye-attrib $-1 -1 $-1 $-1 $42 #
94vertex $-1 -1 $-1 $42 1 $102 #
95straight-curve $-1 -1 $-1 5 10 10 -1 0 0 I I #
96coedge $-1 -1 $-1 $43 $58 $45 $80 reversed $23 $-1 #
97ptlist-eye-attrib $-1 -1 $-1 $-1 $44 #
98vertex $-1 -1 $-1 $70 1 $103 #
99straight-curve $-1 -1 $-1 5 0 10 1 0 0 I I #
100edge $104 -1 $-1 $49 -5 $67 5 $45 $105 forward @7 unknown #
101edge $106 -1 $-1 $50 -5 $66 5 $46 $107 forward @7 unknown #
102point $-1 -1 $-1 10 0 10 #
103point $-1 -1 $-1 10 10 10 #
104ref_vt-eye-attrib $-1 -1 $-1 $53 $32 $4 $5 #
105fmesh-eye-attrib $-1 -1 $108 $-1 $54 #
106plane-surface $-1 -1 $-1 10 5 5 -1 0 0 0 0 1 forward_v I I I I #
107coedge $-1 -1 $-1 $59 $57 $61 $92 reversed $33 $-1 #
108edge $109 -1 $-1 $74 -5 $96 5 $72 $110 forward @7 unknown #
109ptlist-eye-attrib $-1 -1 $-1 $-1 $60 #
110vertex $-1 -1 $-1 $92 0 $111 #
111straight-curve $-1 -1 $-1 0 0 5 0 0 -1 I I #
112edge $112 -1 $-1 $90 -5 $96 5 $87 $113 forward @7 unknown #
113ptlist-eye-attrib $-1 -1 $-1 $-1 $62 #
114straight-curve $-1 -1 $-1 5 0 0 -1 0 0 I I #
115ptlist-eye-attrib $-1 -1 $-1 $-1 $64 #
116vertex $-1 -1 $-1 $64 0 $114 #
117straight-curve $-1 -1 $-1 5 10 0 1 0 0 I I #
118point $-1 -1 $-1 10 10 0 #
119point $-1 -1 $-1 10 0 0 #
120ptlist-eye-attrib $-1 -1 $-1 $-1 $70 #
121straight-curve $-1 -1 $-1 0 5 10 0 -1 0 I I #
122point $-1 -1 $-1 0 10 10 #
123point $-1 -1 $-1 0 0 10 #
124ptlist-eye-attrib $-1 -1 $-1 $-1 $80 #
125straight-curve $-1 -1 $-1 10 0 5 0 0 -1 I I #
126ptlist-eye-attrib $-1 -1 $-1 $-1 $81 #
127straight-curve $-1 -1 $-1 10 10 5 0 0 -1 I I #
128ref_vt-eye-attrib $-1 -1 $-1 $85 $54 $4 $5 #
129ptlist-eye-attrib $-1 -1 $-1 $-1 $88 #
130straight-curve $-1 -1 $-1 0 10 5 0 0 -1 I I #
131point $-1 -1 $-1 0 0 0 #
132ptlist-eye-attrib $-1 -1 $-1 $-1 $92 #
133straight-curve $-1 -1 $-1 0 5 0 0 1 0 I I #
134point $-1 -1 $-1 0 10 0 #
135""".splitlines()
136
137ENCODED_LINES = r"""mnmoo nnj m mi
138ni ^ *+0;:,4 ^ *+0\^ [ nf ^ LR mnhqoqoqkjol QK o
139n fqfffffffffffffffj:rooh n:rono
140>,27:>;:- {rn rn _nm mnhqoqoqkjol |
141=0;& {m rn {rn {l {rn {rn |
142-:9@)+r:&:r>++-6= {rn rn {rn {rn {n {k {j |
1433*2/ {i rn {rn {rn {h {n |
144:&:@-:961:2:1+ {rn rn _j 8-6;  n _l +-6 n _k ,*-9 o _l >;5 o _k 8->; o _f /0,+<7:<4 o _k ,+03 oqomonnjnhffknojgnjf _k 1+03 lo _k ;,63 o _g 93>+1:,, o _h /6'>-:> o _k 72>' o _i 8-6;>- o _j 28-6; looo _j *8-6; o _j )8-6; o _no :1;@96:3;, |
145):-+:'@+:2/3>+: {rn rn l o n g |
146-:9@)+r:&:r>++-6= {rn rn {rn {rn {l {k {j |
147,7:33 {g rn {rn {rn {rn {f {rn {l |
148-:9@)+r:&:r>++-6= {rn rn {rn {rn {h {k {j |
1499><: {no rn {rn {nn {nm {h {rn {nl 90-(>-; ,6183: |
15092:,7r:&:r>++-6= {rn rn {nk {rn {f |
1519><: {nj rn {rn {ni {nh {h {rn {ng -:):-,:; ,6183: |
152300/ {rn rn {rn {rn {nf {f |
153/3>1:r,*-9><: {rn rn {rn j j no o o n n o o 90-(>-;@) V V V V |
154-:9@)+r:&:r>++-6= {rn rn {rn {no {f {k {j |
15592:,7r:&:r>++-6= {rn rn {mo {rn {nn |
1569><: {mn rn {rn {mm {ml {h {rn {mk -:):-,:; ,6183: |
157300/ {rn rn {rn {rn {mj {nn |
158/3>1:r,*-9><: {rn rn {rn j j o o o n n o o 90-(>-;@) V V V V |
159<0:;8: {rn rn {rn {mi {mh {mg {mf 90-(>-; {nm {rn |
160-:9@)+r:&:r>++-6= {rn rn {rn {nj {nn {k {j |
16192:,7r:&:r>++-6= {rn rn {lo {rn {ni |
1629><: {ln rn {rn {lm {ll {h {rn {lk -:):-,:; ,6183: |
163300/ {rn rn {rn {rn {lj {ni |
164/3>1:r,*-9><: {rn rn {rn j o j o n o o o n 90-(>-;@) V V V V |
165<0:;8: {rn rn {rn {li {lh {lg {lf 90-(>-; {nh {rn |
166<0:;8: {rn rn {rn {ko {nf {kn {km 90-(>-; {nm {rn |
167<0:;8: {rn rn {rn {nf {ko {kl {kk 90-(>-; {nm {rn |
168<0:;8: {rn rn {rn {kj {ki {nf {mf -:):-,:; {kh {rn |
169:;8: {kg rn {rn {kf rj {jo j {mg {jn 90-(>-; _h *1410(1 |
170-:9@)+r:&:r>++-6= {rn rn {rn {mn {ni {k {j |
17192:,7r:&:r>++-6= {rn rn {jm {rn {mm |
1729><: {jl rn {rn {jk {jj {h {rn {ji -:):-,:; ,6183: |
173300/ {rn rn {rn {rn {jh {mm |
174/3>1:r,*-9><: {rn rn {rn o j j n o o o o rn 90-(>-;@) V V V V |
175<0:;8: {rn rn {rn {jg {kl {jf {io 90-(>-; {ml {rn |
176<0:;8: {rn rn {rn {in {mj {jg {im 90-(>-; {nh {rn |
177<0:;8: {rn rn {rn {mj {in {il {ik 90-(>-; {nh {rn |
178<0:;8: {rn rn {rn {ki {kj {mj {lf -:):-,:; {kh {rn |
179:;8: {ij rn {rn {ii rj {ih j {lg {ig 90-(>-; _h *1410(1 |
180<0:;8: {rn rn {rn {mh {mi {if {ho 90-(>-; {nm {rn |
181<0:;8: {rn rn {rn {hn {hm {mi {km -:):-,:; {jj {rn |
182:;8: {hl rn {rn {jo rj {hk j {kn {hj 90-(>-; _h *1410(1 |
183<0:;8: {rn rn {rn {lj {hi {mh {kk -:):-,:; {ml {rn |
184:;8: {hh rn {rn {hg rj {kf j {kl {hf 90-(>-; _h *1410(1 |
185<0:;8: {rn rn {rn {lg {mg {hi {go 90-(>-; {kh {rn |
186<0:;8: {rn rn {rn {mg {lg {hn {gn -:):-,:; {kh {rn |
187300/ {rn rn {rn {rn {kj {jk |
188/+36,+r:&:r>++-6= {rn rn {rn {rn {mf |
189):-+:' {rn rn {rn {mf o {gm |
190):-+:' {rn rn {rn {mf n {gl |
191,+->687+r<*-): {rn rn {rn no j no o n o V V |
192-:9@)+r:&:r>++-6= {rn rn {rn {ln {mm {k {j |
19392:,7r:&:r>++-6= {rn rn {gk {rn {lm |
1949><: {gj rn {rn {rn {kh {h {rn {gi -:):-,:; ,6183: |
195300/ {rn rn {rn {rn {hn {lm |
196/3>1:r,*-9><: {rn rn {rn j no j o rn o o o rn 90-(>-;@) V V V V |
197<0:;8: {rn rn {rn {gh {if {hm {gg 90-(>-; {ll {rn |
198<0:;8: {rn rn {rn {hi {lj {li {im -:):-,:; {ml {rn |
199<0:;8: {rn rn {rn {if {gh {lj {io -:):-,:; {ll {rn |
200:;8: {gf rn {rn {hg rj {fo j {jf {fn 90-(>-; _h *1410(1 |
201<0:;8: {rn rn {rn {lh {li {gh {fm 90-(>-; {nh {rn |
202:;8: {fl rn {rn {ih rj {fo j {jg {fk 90-(>-; _h *1410(1 |
203<0:;8: {rn rn {rn {hm {hn {lh {ik -:):-,:; {jj {rn |
204:;8: {fj rn {rn {fi rj {ii j {il {fh 90-(>-; _h *1410(1 |
205/+36,+r:&:r>++-6= {rn rn {rn {rn {lf |
206):-+:' {rn rn {rn {lf o {fg |
207):-+:' {rn rn {rn {go n {ff |
208,+->687+r<*-): {rn rn {rn no j o o rn o V V |
209<0:;8: {rn rn {rn {jh {jf {ko {ho -:):-,:; {ll {rn |
210:;8: {noo rn {rn {hk rj {hg j {if {non 90-(>-; _h *1410(1 |
211<0:;8: {rn rn {rn {il {kn {ki {gn 90-(>-; {jj {rn |
212<0:;8: {rn rn {rn {kn {il {jh {gg -:):-,:; {jj {rn |
213/+36,+r:&:r>++-6= {rn rn {rn {rn {km |
214):-+:' {rn rn {rn {km n {nom |
215,+->687+r<*-): {rn rn {rn j no no rn o o V V |
216<0:;8: {rn rn {rn {kl {jg {kj {go -:):-,:; {ml {rn |
217/+36,+r:&:r>++-6= {rn rn {rn {rn {kk |
218):-+:' {rn rn {rn {ho n {nol |
219,+->687+r<*-): {rn rn {rn j o no n o o V V |
220:;8: {nok rn {rn {kf rj {ih j {kj {noj 90-(>-; _h *1410(1 |
221:;8: {noi rn {rn {jo rj {ii j {ki {noh 90-(>-; _h *1410(1 |
222/061+ {rn rn {rn no o no |
223/061+ {rn rn {rn no no no |
224-:9@)+r:&:r>++-6= {rn rn {rn {jl {lm {k {j |
22592:,7r:&:r>++-6= {rn rn {nog {rn {jk |
226/3>1:r,*-9><: {rn rn {rn no j j rn o o o o n 90-(>-;@) V V V V |
227<0:;8: {rn rn {rn {jf {jh {in {fm -:):-,:; {ll {rn |
228:;8: {nof rn {rn {hk rj {fi j {hm {nno 90-(>-; _h *1410(1 |
229/+36,+r:&:r>++-6= {rn rn {rn {rn {io |
230):-+:' {rn rn {rn {fm o {nnn |
231,+->687+r<*-): {rn rn {rn o o j o o rn V V |
232:;8: {nnm rn {rn {fo rj {fi j {gh {nnl 90-(>-; _h *1410(1 |
233/+36,+r:&:r>++-6= {rn rn {rn {rn {im |
234,+->687+r<*-): {rn rn {rn j o o rn o o V V |
235/+36,+r:&:r>++-6= {rn rn {rn {rn {ik |
236):-+:' {rn rn {rn {ik o {nnk |
237,+->687+r<*-): {rn rn {rn j no o n o o V V |
238/061+ {rn rn {rn no no o |
239/061+ {rn rn {rn no o o |
240/+36,+r:&:r>++-6= {rn rn {rn {rn {ho |
241,+->687+r<*-): {rn rn {rn o j no o rn o V V |
242/061+ {rn rn {rn o no no |
243/061+ {rn rn {rn o o no |
244/+36,+r:&:r>++-6= {rn rn {rn {rn {go |
245,+->687+r<*-): {rn rn {rn no o j o o rn V V |
246/+36,+r:&:r>++-6= {rn rn {rn {rn {gn |
247,+->687+r<*-): {rn rn {rn no no j o o rn V V |
248-:9@)+r:&:r>++-6= {rn rn {rn {gj {jk {k {j |
249/+36,+r:&:r>++-6= {rn rn {rn {rn {gg |
250,+->687+r<*-): {rn rn {rn o no j o o rn V V |
251/061+ {rn rn {rn o o o |
252/+36,+r:&:r>++-6= {rn rn {rn {rn {fm |
253,+->687+r<*-): {rn rn {rn o j o o n o V V |
254/061+ {rn rn {rn o no o |
255""".splitlines()
256