Artifact 3fe7fc9d238cc11384c3a5bcb0bebb4cd675362b:
- File tests/ed25519.fs — part of check-in [214f0a8a31] at 2018-03-28 21:55:48 on branch trunk — Add simple en/decryption for single receiver (user: bernd size: 3711)
0000: 5c 20 74 65 73 74 20 66 6f 72 20 65 64 32 35 35 \ test for ed255 0010: 31 39 20 2d 20 66 69 72 73 74 20 66 75 7a 7a 65 19 - first fuzze 0020: 64 2c 20 74 68 65 6e 20 64 65 74 65 72 6d 69 6e d, then determin 0030: 69 73 74 69 63 20 74 65 73 74 0a 0a 72 65 71 75 istic test..requ 0040: 69 72 65 20 2e 2e 2f 6e 65 74 32 6f 2e 66 73 0a ire ../net2o.fs. 0050: 0a 56 61 72 69 61 62 6c 65 20 74 65 73 74 24 0a .Variable test$. 0060: 0a 3a 20 3e 73 6b 73 69 67 20 28 20 2d 2d 20 29 .: >sksig ( -- ) 0070: 0a 20 20 20 20 70 6b 63 20 6b 65 79 73 69 7a 65 . pkc keysize 0080: 20 73 6b 63 20 6b 65 79 73 69 7a 65 0a 20 20 20 skc keysize. 0090: 20 63 3a 30 6b 65 79 20 3e 6b 65 79 65 64 2d 68 c:0key >keyed-h 00a0: 61 73 68 20 73 6b 73 69 67 20 24 32 30 20 6b 65 ash sksig $20 ke 00b0: 63 63 61 6b 3e 20 3b 0a 3a 20 67 65 6e 2d 70 61 ccak> ;.: gen-pa 00c0: 69 72 73 20 28 20 2d 2d 20 29 0a 20 20 20 20 73 irs ( -- ). s 00d0: 6b 63 20 70 6b 63 20 65 64 2d 6b 65 79 70 61 69 kc pkc ed-keypai 00e0: 72 0a 20 20 20 20 73 74 73 6b 63 20 73 74 70 6b r. stskc stpk 00f0: 63 20 65 64 2d 6b 65 79 70 61 69 72 20 20 3e 73 c ed-keypair >s 0100: 6b 73 69 67 20 3b 0a 3a 20 67 65 6e 2d 73 69 67 ksig ;.: gen-sig 0110: 20 28 20 2d 2d 20 61 64 64 72 20 29 0a 20 20 20 ( -- addr ). 0120: 20 63 3a 30 6b 65 79 20 74 65 73 74 24 20 24 40 c:0key test$ $@ 0130: 20 63 3a 68 61 73 68 20 73 6b 73 69 67 20 73 6b c:hash sksig sk 0140: 63 20 70 6b 63 20 65 64 2d 73 69 67 6e 20 64 72 c pkc ed-sign dr 0150: 6f 70 20 3b 0a 3a 20 63 68 65 63 6b 2d 73 69 67 op ;.: check-sig 0160: 20 28 20 61 64 64 72 20 2d 2d 20 66 6c 61 67 20 ( addr -- flag 0170: 29 0a 20 20 20 20 63 3a 30 6b 65 79 20 74 65 73 ). c:0key tes 0180: 74 24 20 24 40 20 63 3a 68 61 73 68 20 70 6b 63 t$ $@ c:hash pkc 0190: 20 65 64 2d 76 65 72 69 66 79 20 3b 0a 3a 20 63 ed-verify ;.: c 01a0: 68 65 63 6b 2d 73 69 67 30 20 28 20 61 64 64 72 heck-sig0 ( addr 01b0: 20 2d 2d 20 66 6c 61 67 20 29 0a 20 20 20 20 63 -- flag ). c 01c0: 3a 30 6b 65 79 20 74 65 73 74 24 20 24 40 20 31 :0key test$ $@ 1 01d0: 2d 20 63 3a 68 61 73 68 20 70 6b 63 20 65 64 2d - c:hash pkc ed- 01e0: 76 65 72 69 66 79 20 3b 0a 3a 20 63 68 65 63 6b verify ;.: check 01f0: 2d 64 68 20 28 20 2d 2d 20 66 6c 61 67 20 29 0a -dh ( -- flag ). 0200: 20 20 20 20 73 6b 63 20 73 74 70 6b 63 20 70 61 skc stpkc pa 0210: 64 20 65 64 2d 64 68 20 73 74 73 6b 63 20 70 6b d ed-dh stskc pk 0220: 63 20 70 61 64 20 24 32 30 20 2b 20 65 64 2d 64 c pad $20 + ed-d 0230: 68 20 73 74 72 3d 20 3b 0a 0a 3a 20 64 6f 2d 66 h str= ;..: do-f 0240: 75 7a 7a 20 28 20 2d 2d 20 29 20 20 73 22 20 41 uzz ( -- ) s" A 0250: 22 20 74 65 73 74 24 20 24 2b 21 20 67 65 6e 2d " test$ $+! gen- 0260: 70 61 69 72 73 0a 20 20 20 20 67 65 6e 2d 73 69 pairs. gen-si 0270: 67 20 64 75 70 20 63 68 65 63 6b 2d 73 69 67 20 g dup check-sig 0280: 73 77 61 70 20 63 68 65 63 6b 2d 73 69 67 30 20 swap check-sig0 0290: 30 3d 20 61 6e 64 20 63 68 65 63 6b 2d 64 68 20 0= and check-dh 02a0: 61 6e 64 0a 20 20 20 20 49 46 20 2e 22 20 2b 22 and. IF ." +" 02b0: 20 45 4c 53 45 20 2e 22 20 2d 22 20 54 48 45 4e ELSE ." -" THEN 02c0: 20 3b 0a 3a 20 66 75 7a 7a 65 73 20 28 20 6e 20 ;.: fuzzes ( n 02d0: 2d 2d 20 29 20 30 20 3f 44 4f 20 20 64 6f 2d 66 -- ) 0 ?DO do-f 02e0: 75 7a 7a 20 20 4c 4f 4f 50 20 3b 0a 3a 20 66 75 uzz LOOP ;.: fu 02f0: 7a 7a 6c 20 28 20 6e 20 2d 2d 20 29 20 20 30 20 zzl ( n -- ) 0 0300: 3f 44 4f 20 20 63 6f 6c 73 20 49 27 20 49 20 2d ?DO cols I' I - 0310: 20 75 6d 69 6e 20 66 75 7a 7a 65 73 20 63 6f 6c umin fuzzes col 0320: 73 20 2b 4c 4f 4f 50 20 3b 0a 3a 20 73 69 67 73 s +LOOP ;.: sigs 0330: 20 28 20 6e 20 2d 2d 20 29 20 20 20 30 20 3f 44 ( n -- ) 0 ?D 0340: 4f 20 20 67 65 6e 2d 73 69 67 20 64 72 6f 70 20 O gen-sig drop 0350: 20 4c 4f 4f 50 20 3b 0a 3a 20 63 68 65 63 6b 73 LOOP ;.: checks 0360: 69 67 73 20 28 20 6e 20 2d 2d 20 29 20 20 67 65 igs ( n -- ) ge 0370: 6e 2d 73 69 67 20 73 77 61 70 20 20 30 20 3f 44 n-sig swap 0 ?D 0380: 4f 20 20 64 75 70 20 63 68 65 63 6b 2d 73 69 67 O dup check-sig 0390: 20 64 72 6f 70 20 20 4c 4f 4f 50 20 20 64 72 6f drop LOOP dro 03a0: 70 20 3b 0a 21 74 69 6d 65 20 31 30 30 30 20 66 p ;.!time 1000 f 03b0: 75 7a 7a 6c 20 63 72 20 2e 74 69 6d 65 20 2e 22 uzzl cr .time ." 03c0: 20 20 66 6f 72 20 31 30 30 30 20 63 68 65 63 6b for 1000 check 03d0: 73 22 20 63 72 0a 21 74 69 6d 65 20 31 30 30 30 s" cr.!time 1000 03e0: 20 73 69 67 73 20 20 2e 74 69 6d 65 20 2e 22 20 sigs .time ." 03f0: 20 66 6f 72 20 31 30 30 30 20 73 69 67 73 22 20 for 1000 sigs" 0400: 63 72 0a 21 74 69 6d 65 20 31 30 30 30 20 63 68 cr.!time 1000 ch 0410: 65 63 6b 73 69 67 73 20 20 2e 74 69 6d 65 20 2e ecksigs .time . 0420: 22 20 20 66 6f 72 20 31 30 30 30 20 73 69 67 73 " for 1000 sigs 0430: 22 20 63 72 0a 0a 5c 20 64 65 74 65 72 6d 69 6e " cr..\ determin 0440: 69 73 74 69 63 20 74 65 73 74 73 0a 0a 24 34 30 istic tests..$40 0450: 20 62 75 66 66 65 72 3a 20 74 65 73 74 70 6b 0a buffer: testpk. 0460: 3a 20 3e 74 65 73 74 20 28 20 61 64 64 72 20 69 : >test ( addr i 0470: 20 2d 2d 20 61 64 64 72 27 20 29 20 74 65 73 74 -- addr' ) test 0480: 70 6b 20 2b 20 74 75 63 6b 20 24 32 30 20 6d 6f pk + tuck $20 mo 0490: 76 65 20 3b 0a 0a 78 22 20 45 30 39 36 35 37 44 ve ;..x" E09657D 04a0: 38 43 30 36 36 46 42 41 41 44 30 30 39 41 31 31 8C066FBAAD009A11 04b0: 38 39 42 33 41 37 45 34 31 38 43 45 32 30 30 32 89B3A7E418CE2002 04c0: 45 37 33 45 36 43 37 39 39 44 41 37 41 36 46 35 E73E6C799DA7A6F5 04d0: 44 38 36 43 41 35 42 37 36 22 20 73 6b 63 20 73 D86CA5B76" skc s 04e0: 77 61 70 20 6d 6f 76 65 0a 78 22 20 43 38 42 30 wap move.x" C8B0 04f0: 35 31 34 38 35 37 45 35 30 35 32 34 44 45 43 39 514857E50524DEC9 0500: 34 46 42 31 31 35 37 45 46 30 42 42 30 42 38 39 4FB1157EF0BB0B89 0510: 46 46 41 44 41 33 41 32 38 31 46 46 32 41 45 30 FFADA3A281FF2AE0 0520: 36 46 34 42 42 44 37 45 45 36 37 31 22 20 73 74 6F4BBD7EE671" st 0530: 73 6b 63 20 73 77 61 70 20 6d 6f 76 65 0a 73 6b skc swap move.sk 0540: 63 20 70 6b 63 20 73 6b 3e 70 6b 20 70 6b 63 20 c pkc sk>pk pkc 0550: 24 32 30 20 78 22 20 31 34 38 37 37 37 41 41 39 $20 x" 148777AA9 0560: 31 33 43 41 39 37 30 41 44 32 33 45 31 43 37 31 13CA970AD23E1C71 0570: 42 36 42 35 43 36 35 30 42 30 34 34 38 42 41 36 B6B5C650B0448BA6 0580: 44 41 43 45 41 35 35 38 37 41 44 46 45 31 33 42 DACEA5587ADFE13B 0590: 41 39 32 36 32 42 42 22 20 73 74 72 3d 20 30 3d A9262BB" str= 0= 05a0: 20 5b 49 46 5d 20 2e 22 20 69 6e 63 6f 72 72 65 [IF] ." incorre 05b0: 63 74 20 70 75 62 6b 65 79 20 22 20 70 6b 63 20 ct pubkey " pkc 05c0: 24 32 30 20 78 74 79 70 65 20 63 72 20 5b 54 48 $20 xtype cr [TH 05d0: 45 4e 5d 0a 73 74 73 6b 63 20 73 74 70 6b 63 20 EN].stskc stpkc 05e0: 73 6b 3e 70 6b 20 73 74 70 6b 63 20 24 32 30 20 sk>pk stpkc $20 05f0: 78 22 20 33 30 31 43 33 33 34 35 45 39 37 35 36 x" 301C3345E9756 0600: 33 34 38 44 44 34 34 32 42 30 33 41 41 45 31 38 348DD442B03AAE18 0610: 36 41 37 33 32 37 32 45 43 46 31 34 35 44 36 33 6A73272ECF145D63 0620: 43 33 41 30 31 44 44 37 42 42 46 37 41 33 46 32 C3A01DD7BBF7A3F2 0630: 34 44 37 22 20 73 74 72 3d 20 30 3d 20 5b 49 46 4D7" str= 0= [IF 0640: 5d 20 2e 22 20 69 6e 63 6f 72 72 65 63 74 20 70 ] ." incorrect p 0650: 75 62 6b 65 79 20 22 20 73 74 70 6b 63 20 24 32 ubkey " stpkc $2 0660: 30 20 78 74 79 70 65 20 63 72 20 5b 54 48 45 4e 0 xtype cr [THEN 0670: 5d 0a 3e 73 6b 73 69 67 0a 0a 31 30 30 20 30 20 ].>sksig..100 0 0680: 5b 64 6f 5d 20 73 6b 63 20 73 74 70 6b 63 20 70 [do] skc stpkc p 0690: 61 64 20 65 64 2d 64 68 20 32 64 72 6f 70 20 5b ad ed-dh 2drop [ 06a0: 6c 6f 6f 70 5d 20 5c 20 77 61 72 6d 75 70 20 66 loop] \ warmup f 06b0: 6f 72 20 74 68 65 20 43 50 55 0a 0a 2e 22 20 54 or the CPU..." T 06c0: 65 73 74 20 6b 65 79 70 61 69 72 20 22 0a 73 6b est keypair ".sk 06d0: 63 20 70 6b 63 20 32 64 75 70 20 73 6b 3e 70 6b c pkc 2dup sk>pk 06e0: 20 21 74 69 6d 65 20 73 6b 3e 70 6b 20 2e 74 69 !time sk>pk .ti 06f0: 6d 65 20 63 72 0a 2e 22 20 54 65 73 74 20 73 69 me cr.." Test si 0700: 67 6e 69 6e 67 20 22 0a 63 3a 30 6b 65 79 20 22 gning ".c:0key " 0710: 54 65 73 74 20 31 32 33 22 20 63 3a 68 61 73 68 Test 123" c:hash 0720: 20 73 6b 73 69 67 20 73 6b 63 20 70 6b 63 20 65 sksig skc pkc e 0730: 64 2d 73 69 67 6e 0a 78 22 20 34 32 32 44 33 39 d-sign.x" 422D39 0740: 33 44 37 39 45 32 34 43 46 43 31 43 42 45 34 32 3D79E24CFC1CBE42 0750: 44 38 30 34 33 46 39 37 30 35 37 36 33 30 44 31 D8043F97057630D1 0760: 45 35 36 44 44 37 45 38 42 35 37 43 45 35 46 42 E56DD7E8B57CE5FB 0770: 38 44 34 38 33 41 45 32 41 31 44 38 36 45 45 31 8D483AE2A1D86EE1 0780: 32 35 30 30 46 35 38 35 36 42 35 35 39 42 46 44 2500F5856B559BFD 0790: 37 38 31 46 45 39 44 34 34 32 43 44 35 30 32 36 781FE9D442CD5026 07a0: 31 38 46 41 39 34 41 36 39 43 39 41 34 31 31 30 18FA94A69C9A4110 07b0: 39 41 45 42 33 45 34 42 30 43 22 20 73 74 72 3d 9AEB3E4B0C" str= 07c0: 20 30 3d 20 5b 49 46 5d 20 2e 22 20 69 6e 22 20 0= [IF] ." in" 07d0: 5b 54 48 45 4e 5d 20 2e 22 20 63 6f 72 72 65 63 [THEN] ." correc 07e0: 74 20 73 69 67 20 22 0a 63 3a 30 6b 65 79 20 22 t sig ".c:0key " 07f0: 54 65 73 74 20 31 32 33 22 20 63 3a 68 61 73 68 Test 123" c:hash 0800: 0a 73 6b 73 69 67 20 73 6b 63 20 70 6b 63 20 21 .sksig skc pkc ! 0810: 74 69 6d 65 20 65 64 2d 73 69 67 6e 20 64 72 6f time ed-sign dro 0820: 70 20 2e 74 69 6d 65 20 63 72 0a 63 3a 30 6b 65 p .time cr.c:0ke 0830: 79 20 22 54 65 73 74 20 31 32 33 22 20 63 3a 68 y "Test 123" c:h 0840: 61 73 68 20 64 75 70 20 70 6b 63 20 65 64 2d 76 ash dup pkc ed-v 0850: 65 72 69 66 79 20 64 72 6f 70 0a 63 3a 30 6b 65 erify drop.c:0ke 0860: 79 20 22 54 65 73 74 20 31 32 33 22 20 63 3a 68 y "Test 123" c:h 0870: 61 73 68 0a 2e 22 20 54 65 73 74 20 76 65 72 69 ash.." Test veri 0880: 66 79 20 22 0a 64 75 70 20 70 6b 63 20 65 64 2d fy ".dup pkc ed- 0890: 76 65 72 69 66 79 0a 3e 72 20 64 75 70 20 70 6b verify.>r dup pk 08a0: 63 20 21 74 69 6d 65 20 65 64 2d 76 65 72 69 66 c !time ed-verif 08b0: 79 20 2e 74 69 6d 65 20 64 72 6f 70 20 72 3e 0a y .time drop r>. 08c0: 5b 49 46 5d 20 2e 22 20 20 70 61 73 73 65 64 22 [IF] ." passed" 08d0: 20 5b 45 4c 53 45 5d 20 2e 22 20 20 66 61 69 6c [ELSE] ." fail 08e0: 65 64 22 20 5b 54 48 45 4e 5d 20 63 72 0a 2e 22 ed" [THEN] cr.." 08f0: 20 54 65 73 74 20 66 6f 72 67 65 20 22 0a 63 3a Test forge ".c: 0900: 30 6b 65 79 20 22 54 65 73 74 20 31 32 34 22 20 0key "Test 124" 0910: 63 3a 68 61 73 68 20 64 75 70 20 70 6b 63 20 65 c:hash dup pkc e 0920: 64 2d 76 65 72 69 66 79 20 64 72 6f 70 0a 63 3a d-verify drop.c: 0930: 30 6b 65 79 20 22 54 65 73 74 20 31 32 34 22 20 0key "Test 124" 0940: 63 3a 68 61 73 68 0a 64 75 70 20 70 6b 63 20 21 c:hash.dup pkc ! 0950: 74 69 6d 65 20 65 64 2d 76 65 72 69 66 79 20 2e time ed-verify . 0960: 74 69 6d 65 0a 30 3d 20 5b 49 46 5d 20 2e 22 20 time.0= [IF] ." 0970: 20 70 61 73 73 65 64 22 20 5b 45 4c 53 45 5d 20 passed" [ELSE] 0980: 2e 22 20 20 66 61 69 6c 65 64 22 20 5b 54 48 45 ." failed" [THE 0990: 4e 5d 20 63 72 0a 24 34 30 20 78 74 79 70 65 20 N] cr.$40 xtype 09a0: 63 72 0a 0a 3a 20 74 65 73 74 2d 65 64 64 68 20 cr..: test-eddh 09b0: 28 20 2d 2d 20 29 0a 20 20 20 20 2e 22 20 54 65 ( -- ). ." Te 09c0: 73 74 20 45 64 44 48 20 22 0a 20 20 20 20 24 32 st EdDH ". $2 09d0: 30 20 30 20 44 4f 0a 09 73 74 73 6b 63 20 73 74 0 0 DO..stskc st 09e0: 70 6b 63 20 73 6b 3e 70 6b 0a 09 73 6b 63 20 73 pkc sk>pk..skc s 09f0: 74 70 6b 63 20 49 20 3e 74 65 73 74 20 32 64 75 tpkc I >test 2du 0a00: 70 20 70 61 64 20 65 64 2d 64 68 20 32 64 72 6f p pad ed-dh 2dro 0a10: 70 20 70 61 64 20 65 64 2d 64 68 20 70 61 64 20 p pad ed-dh pad 0a20: 24 32 30 20 2b 20 73 77 61 70 20 6d 6f 76 65 0a $20 + swap move. 0a30: 09 73 6b 63 20 73 74 70 6b 63 20 49 20 3e 74 65 .skc stpkc I >te 0a40: 73 74 20 32 64 75 70 20 70 61 64 20 65 64 2d 64 st 2dup pad ed-d 0a50: 68 20 32 64 72 6f 70 20 70 61 64 20 65 64 2d 64 h 2drop pad ed-d 0a60: 68 20 32 64 72 6f 70 0a 09 73 74 73 6b 63 20 70 h 2drop..stskc p 0a70: 6b 63 20 49 20 3e 74 65 73 74 20 32 64 75 70 20 kc I >test 2dup 0a80: 70 61 64 20 65 64 2d 64 68 20 32 64 72 6f 70 20 pad ed-dh 2drop 0a90: 70 61 64 20 65 64 2d 64 68 0a 09 73 74 73 6b 63 pad ed-dh..stskc 0aa0: 20 70 6b 63 20 49 20 3e 74 65 73 74 20 32 64 75 pkc I >test 2du 0ab0: 70 20 70 61 64 20 65 64 2d 64 68 20 32 64 72 6f p pad ed-dh 2dro 0ac0: 70 20 70 61 64 0a 09 49 20 30 3d 20 49 46 20 20 p pad..I 0= IF 0ad0: 21 74 69 6d 65 20 65 64 2d 64 68 20 2e 74 69 6d !time ed-dh .tim 0ae0: 65 20 20 45 4c 53 45 20 20 65 64 2d 64 68 20 20 e ELSE ed-dh 0af0: 54 48 45 4e 20 20 32 64 72 6f 70 0a 09 32 64 75 THEN 2drop..2du 0b00: 70 20 78 22 20 42 35 42 42 33 42 36 36 36 33 41 p x" B5BB3B6663A 0b10: 39 39 32 41 32 39 41 37 35 38 35 32 41 44 34 39 992A29A75852AD49 0b20: 32 35 30 38 35 31 30 39 45 39 36 34 38 35 41 37 25085109E96485A7 0b30: 37 30 45 44 46 37 41 38 41 39 34 35 31 32 38 46 70EDF7A8A945128F 0b40: 34 32 42 44 32 22 0a 09 73 74 72 3d 20 49 20 30 42BD2"..str= I 0 0b50: 3d 20 49 46 20 20 49 46 20 2e 22 20 20 63 6f 72 = IF IF ." cor 0b60: 72 65 63 74 22 20 45 4c 53 45 20 2e 22 20 20 69 rect" ELSE ." i 0b70: 6e 63 6f 72 72 65 63 74 22 20 54 48 45 4e 0a 09 ncorrect" THEN.. 0b80: 45 4c 53 45 20 20 27 2b 27 20 27 2d 27 20 72 6f ELSE '+' '-' ro 0b90: 74 20 73 65 6c 65 63 74 20 65 6d 69 74 20 20 54 t select emit T 0ba0: 48 45 4e 0a 09 32 64 75 70 20 70 61 64 20 24 32 HEN..2dup pad $2 0bb0: 30 20 2b 20 6f 76 65 72 20 73 74 72 3d 20 49 46 0 + over str= IF 0bc0: 20 49 20 30 3d 20 49 46 20 20 2e 22 20 20 70 61 I 0= IF ." pa 0bd0: 73 73 65 64 22 20 20 45 4c 53 45 20 20 27 2b 27 ssed" ELSE '+' 0be0: 20 65 6d 69 74 20 20 54 48 45 4e 0a 09 45 4c 53 emit THEN..ELS 0bf0: 45 20 2e 22 20 20 66 61 69 6c 65 64 22 20 70 61 E ." failed" pa 0c00: 64 20 6f 76 65 72 20 63 72 20 78 74 79 70 65 20 d over cr xtype 0c10: 54 48 45 4e 0a 09 49 20 30 3d 20 49 46 20 20 63 THEN..I 0= IF c 0c20: 72 20 78 74 79 70 65 20 63 72 20 20 45 4c 53 45 r xtype cr ELSE 0c30: 20 20 32 64 72 6f 70 20 20 54 48 45 4e 0a 20 20 2drop THEN. 0c40: 20 20 4c 4f 4f 50 20 63 72 20 3b 0a 74 65 73 74 LOOP cr ;.test 0c50: 2d 65 64 64 68 0a 0a 5b 49 46 44 45 46 5d 20 65 -eddh..[IFDEF] e 0c60: 64 2d 64 68 76 0a 20 20 20 20 2e 22 20 54 65 73 d-dhv. ." Tes 0c70: 74 20 45 64 44 48 20 76 61 72 69 61 62 6c 65 20 t EdDH variable 0c80: 73 70 65 65 64 20 22 0a 20 20 20 20 73 6b 63 20 speed ". skc 0c90: 73 74 70 6b 63 20 32 64 75 70 20 70 61 64 20 65 stpkc 2dup pad e 0ca0: 64 2d 64 68 76 20 32 64 72 6f 70 20 70 61 64 20 d-dhv 2drop pad 0cb0: 65 64 2d 64 68 76 20 70 61 64 20 24 32 30 20 2b ed-dhv pad $20 + 0cc0: 20 73 77 61 70 20 6d 6f 76 65 0a 20 20 20 20 73 swap move. s 0cd0: 6b 63 20 73 74 70 6b 63 20 32 64 75 70 20 70 61 kc stpkc 2dup pa 0ce0: 64 20 65 64 2d 64 68 76 20 32 64 72 6f 70 20 70 d ed-dhv 2drop p 0cf0: 61 64 20 65 64 2d 64 68 76 20 32 64 72 6f 70 0a ad ed-dhv 2drop. 0d00: 20 20 20 20 73 74 73 6b 63 20 70 6b 63 20 32 64 stskc pkc 2d 0d10: 75 70 20 70 61 64 20 65 64 2d 64 68 76 20 32 64 up pad ed-dhv 2d 0d20: 72 6f 70 20 70 61 64 20 65 64 2d 64 68 76 0a 20 rop pad ed-dhv. 0d30: 20 20 20 73 74 73 6b 63 20 70 6b 63 20 32 64 75 stskc pkc 2du 0d40: 70 20 70 61 64 20 65 64 2d 64 68 76 20 32 64 72 p pad ed-dhv 2dr 0d50: 6f 70 20 21 74 69 6d 65 20 70 61 64 20 65 64 2d op !time pad ed- 0d60: 64 68 76 20 2e 74 69 6d 65 20 32 64 72 6f 70 0a dhv .time 2drop. 0d70: 20 20 20 20 32 64 75 70 20 78 22 20 42 35 42 42 2dup x" B5BB 0d80: 33 42 36 36 36 33 41 39 39 32 41 32 39 41 37 35 3B6663A992A29A75 0d90: 38 35 32 41 44 34 39 32 35 30 38 35 31 30 39 45 852AD4925085109E 0da0: 39 36 34 38 35 41 37 37 30 45 44 46 37 41 38 41 96485A770EDF7A8A 0db0: 39 34 35 31 32 38 46 34 32 42 44 32 22 20 73 74 945128F42BD2" st 0dc0: 72 3d 20 5b 49 46 5d 20 2e 22 20 20 63 6f 72 72 r= [IF] ." corr 0dd0: 65 63 74 22 20 5b 45 4c 53 45 5d 20 2e 22 20 20 ect" [ELSE] ." 0de0: 69 6e 63 6f 72 72 65 63 74 22 20 5b 54 48 45 4e incorrect" [THEN 0df0: 5d 0a 20 20 20 20 32 64 75 70 20 70 61 64 20 24 ]. 2dup pad $ 0e00: 32 30 20 2b 20 6f 76 65 72 20 73 74 72 3d 20 5b 20 + over str= [ 0e10: 49 46 5d 20 2e 22 20 20 70 61 73 73 65 64 22 0a IF] ." passed". 0e20: 20 20 20 20 5b 45 4c 53 45 5d 20 2e 22 20 20 66 [ELSE] ." f 0e30: 61 69 6c 65 64 22 20 70 61 64 20 6f 76 65 72 20 ailed" pad over 0e40: 63 72 20 78 74 79 70 65 20 5b 54 48 45 4e 5d 20 cr xtype [THEN] 0e50: 63 72 0a 20 20 20 20 78 74 79 70 65 20 63 72 0a cr. xtype cr. 0e60: 5b 54 48 45 4e 5d 0a 73 63 72 69 70 74 3f 20 5b [THEN].script? [ 0e70: 49 46 5d 20 62 79 65 20 5b 54 48 45 4e 5d 0a IF] bye [THEN].