Hex Artifact Content
Not logged in

Artifact 9f477b0e7513370f1466f79570c74d4fd26f8d54:


0000: 5c 20 74 65 73 74 20 66 6f 72 20 74 68 72 65 65  \ test for three
0010: 66 69 73 68 0a 0a 72 65 71 75 69 72 65 20 2e 2e  fish..require ..
0020: 2f 6e 65 74 32 6f 2e 66 73 0a 0a 74 68 72 65 65  /net2o.fs..three
0030: 66 69 73 68 2d 6f 20 63 72 79 70 74 6f 2d 6f 20  fish-o crypto-o 
0040: 21 0a 0a 3a 20 3e 73 6b 65 69 6e 20 28 20 61 64  !..: >skein ( ad
0050: 64 72 20 75 20 2d 2d 20 29 20 63 3a 30 6b 65 79  dr u -- ) c:0key
0060: 20 63 3a 68 61 73 68 20 3b 0a 3a 20 73 6b 65 69   c:hash ;.: skei
0070: 6e 40 20 28 20 2d 2d 20 61 64 64 72 20 75 20 29  n@ ( -- addr u )
0080: 20 70 61 64 20 63 3a 6b 65 79 3e 20 70 61 64 20   pad c:key> pad 
0090: 24 34 30 20 3b 0a 3a 20 73 6b 65 69 6e 3f 20 28  $40 ;.: skein? (
00a0: 20 61 64 64 72 20 75 20 2d 2d 20 29 20 73 6b 65   addr u -- ) ske
00b0: 69 6e 40 20 73 74 72 3d 20 27 2b 27 20 27 2d 27  in@ str= '+' '-'
00c0: 20 72 6f 74 20 73 65 6c 65 63 74 20 65 6d 69 74   rot select emit
00d0: 20 3b 0a 0a 5c 20 74 65 73 74 73 20 66 72 6f 6d   ;..\ tests from
00e0: 20 53 6b 65 69 6e 20 31 2e 33 20 4e 49 53 54 20   Skein 1.3 NIST 
00f0: 43 44 0a 0a 78 22 20 30 30 30 30 30 30 30 30 30  CD..x" 000000000
0100: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
0110: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
0120: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
0130: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
0140: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
0150: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
0160: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
0170: 30 30 30 30 30 30 30 22 20 3e 73 6b 65 69 6e 20  0000000" >skein 
0180: 78 22 20 42 31 41 32 42 42 43 36 45 46 36 30 32  x" B1A2BBC6EF602
0190: 35 42 43 34 30 45 42 33 38 32 32 31 36 31 46 33  5BC40EB3822161F3
01a0: 36 45 33 37 35 44 31 42 42 30 41 45 45 33 31 38  6E375D1BB0AEE318
01b0: 36 46 42 44 31 39 45 34 37 43 35 44 34 37 39 39  6FBD19E47C5D4799
01c0: 34 37 42 37 42 43 32 46 38 35 38 36 45 33 35 46  47B7BC2F8586E35F
01d0: 30 43 46 46 37 45 37 46 30 33 30 38 34 42 30 42  0CFF7E7F03084B0B
01e0: 37 42 31 46 31 41 42 33 39 36 31 41 35 38 30 41  7B1F1AB3961A580A
01f0: 33 45 39 37 45 42 34 31 45 41 31 34 41 36 44 37  3E97EB41EA14A6D7
0200: 42 42 45 22 20 73 6b 65 69 6e 3f 0a 78 22 20 31  BBE" skein?.x" 1
0210: 30 31 31 31 32 31 33 31 34 31 35 31 36 31 37 31  0111213141516171
0220: 38 31 39 31 41 31 42 31 43 31 44 31 45 31 46 32  8191A1B1C1D1E1F2
0230: 30 32 31 32 32 32 33 32 34 32 35 32 36 32 37 32  0212223242526272
0240: 38 32 39 32 41 32 42 32 43 32 44 32 45 32 46 33  8292A2B2C2D2E2F3
0250: 30 33 31 33 32 33 33 33 34 33 35 33 36 33 37 33  0313233343536373
0260: 38 33 39 33 41 33 42 33 43 33 44 33 45 33 46 34  8393A3B3C3D3E3F4
0270: 30 34 31 34 32 34 33 34 34 34 35 34 36 34 37 34  0414243444546474
0280: 38 34 39 34 41 34 42 34 43 34 44 34 45 34 46 22  8494A4B4C4D4E4F"
0290: 20 3e 74 68 72 65 65 66 69 73 68 0a 30 78 30 37   >threefish.0x07
02a0: 30 36 30 35 30 34 30 33 30 32 30 31 30 30 2e 20  06050403020100. 
02b0: 64 3e 36 34 20 30 78 30 46 30 45 30 44 30 43 30  d>64 0x0F0E0D0C0
02c0: 42 30 41 30 39 30 38 2e 20 64 3e 36 34 20 74 66  B0A0908. d>64 tf
02d0: 2d 74 77 65 61 6b 21 0a 78 22 20 46 46 46 45 46  -tweak!.x" FFFEF
02e0: 44 46 43 46 42 46 41 46 39 46 38 46 37 46 36 46  DFCFBFAF9F8F7F6F
02f0: 35 46 34 46 33 46 32 46 31 46 30 45 46 45 45 45  5F4F3F2F1F0EFEEE
0300: 44 45 43 45 42 45 41 45 39 45 38 45 37 45 36 45  DECEBEAE9E8E7E6E
0310: 35 45 34 45 33 45 32 45 31 45 30 44 46 44 45 44  5E4E3E2E1E0DFDED
0320: 44 44 43 44 42 44 41 44 39 44 38 44 37 44 36 44  DDCDBDAD9D8D7D6D
0330: 35 44 34 44 33 44 32 44 31 44 30 43 46 43 45 43  5D4D3D2D1D0CFCEC
0340: 44 43 43 43 42 43 41 43 39 43 38 43 37 43 36 43  DCCCBCAC9C8C7C6C
0350: 35 43 34 43 33 43 32 43 31 43 30 22 20 63 3a 68  5C4C3C2C1C0" c:h
0360: 61 73 68 0a 78 22 20 31 43 46 41 42 45 36 41 44  ash.x" 1CFABE6AD
0370: 44 32 45 41 33 44 34 34 33 46 37 33 46 32 43 32  D2EA3D443F73F2C2
0380: 35 43 34 44 35 36 41 38 43 44 36 44 45 45 32 35  5C4D56A8CD6DEE25
0390: 42 38 37 41 43 33 35 36 43 44 30 35 43 45 41 37  B87AC356CD05CEA7
03a0: 34 43 37 41 36 39 39 46 38 46 34 44 37 35 31 34  4C7A699F8F4D7514
03b0: 32 39 43 45 43 44 43 41 46 39 32 46 35 33 45 43  29CECDCAF92F53EC
03c0: 42 31 42 37 36 46 35 36 30 44 46 31 32 33 32 36  B1B76F560DF12326
03d0: 41 43 42 41 42 46 43 34 45 45 31 41 32 46 39 39  ACBABFC4EE1A2F99
03e0: 46 44 45 36 45 46 44 22 20 73 6b 65 69 6e 3f 0a  FDE6EFD" skein?.
03f0: 63 72 0a 0a 5c 20 74 65 73 74 20 63 61 73 65 73  cr..\ test cases
0400: 20 66 72 6f 6d 20 4e 49 53 54 20 73 75 62 6d 69   from NIST submi
0410: 73 73 69 6f 6e 20 70 61 63 6b 61 67 65 3b 20 74  ssion package; t
0420: 65 73 74 20 65 6e 63 72 79 70 74 20 26 20 64 65  est encrypt & de
0430: 63 72 79 70 74 0a 74 66 5f 63 74 78 5f 32 35 36  crypt.tf_ctx_256
0440: 20 62 75 66 66 65 72 3a 20 6b 65 79 32 35 36 0a   buffer: key256.
0450: 0a 78 22 20 30 30 30 30 30 30 30 30 30 30 30 30  .x" 000000000000
0460: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
0470: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
0480: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
0490: 30 30 30 30 22 20 64 72 6f 70 0a 6b 65 79 32 35  0000" drop.key25
04a0: 36 20 6f 76 65 72 0a 70 61 64 20 24 43 20 74 66  6 over.pad $C tf
04b0: 5f 65 6e 63 72 79 70 74 5f 32 35 36 0a 6b 65 79  _encrypt_256.key
04c0: 32 35 36 20 70 61 64 20 70 61 64 20 24 32 30 20  256 pad pad $20 
04d0: 2b 20 24 30 20 74 66 5f 64 65 63 72 79 70 74 5f  + $0 tf_decrypt_
04e0: 32 35 36 0a 24 32 30 20 70 61 64 20 24 32 30 20  256.$20 pad $20 
04f0: 2b 20 6f 76 65 72 20 73 74 72 3d 0a 78 22 20 38  + over str=.x" 8
0500: 34 64 61 32 61 31 66 38 62 65 61 65 65 39 34 37  4da2a1f8beaee947
0510: 30 36 36 61 65 33 65 33 31 30 33 66 31 61 64 35  066ae3e3103f1ad5
0520: 33 36 64 62 31 66 34 61 31 31 39 32 34 39 35 31  36db1f4a11924951
0530: 31 36 62 39 66 33 63 65 36 31 33 33 66 64 38 22  16b9f3ce6133fd8"
0540: 0a 70 61 64 20 6f 76 65 72 20 73 74 72 3d 20 61  .pad over str= a
0550: 6e 64 0a 2e 22 20 74 68 72 65 65 66 69 73 68 20  nd.." threefish 
0560: 32 35 36 20 22 20 5b 49 46 5d 20 2e 22 20 70 61  256 " [IF] ." pa
0570: 73 73 65 64 22 20 5b 45 4c 53 45 5d 20 2e 22 20  ssed" [ELSE] ." 
0580: 64 69 64 6e 27 74 20 70 61 73 73 22 20 5b 54 48  didn't pass" [TH
0590: 45 4e 5d 20 63 72 0a 0a 78 22 20 31 30 31 31 31  EN] cr..x" 10111
05a0: 32 31 33 31 34 31 35 31 36 31 37 31 38 31 39 31  2131415161718191
05b0: 61 31 62 31 63 31 64 31 65 31 66 32 30 32 31 32  a1b1c1d1e1f20212
05c0: 32 32 33 32 34 32 35 32 36 32 37 32 38 32 39 32  2232425262728292
05d0: 61 32 62 32 63 32 64 32 65 32 66 22 0a 6b 65 79  a2b2c2d2e2f".key
05e0: 32 35 36 20 74 66 5f 63 74 78 5f 32 35 36 2d 6b  256 tf_ctx_256-k
05f0: 65 79 20 73 77 61 70 20 6d 6f 76 65 0a 78 22 20  ey swap move.x" 
0600: 30 30 30 31 30 32 30 33 30 34 30 35 30 36 30 37  0001020304050607
0610: 30 38 30 39 30 61 30 62 30 63 30 64 30 65 30 66  08090a0b0c0d0e0f
0620: 22 0a 6b 65 79 32 35 36 20 74 66 5f 63 74 78 5f  ".key256 tf_ctx_
0630: 32 35 36 2d 74 77 65 61 6b 20 73 77 61 70 20 6d  256-tweak swap m
0640: 6f 76 65 0a 0a 78 22 20 66 66 66 65 66 64 66 63  ove..x" fffefdfc
0650: 66 62 66 61 66 39 66 38 66 37 66 36 66 35 66 34  fbfaf9f8f7f6f5f4
0660: 66 33 66 32 66 31 66 30 65 66 65 65 65 64 65 63  f3f2f1f0efeeedec
0670: 65 62 65 61 65 39 65 38 65 37 65 36 65 35 65 34  ebeae9e8e7e6e5e4
0680: 65 33 65 32 65 31 65 30 22 20 64 72 6f 70 0a 6b  e3e2e1e0" drop.k
0690: 65 79 32 35 36 20 6f 76 65 72 0a 70 61 64 20 24  ey256 over.pad $
06a0: 43 20 74 66 5f 65 6e 63 72 79 70 74 5f 32 35 36  C tf_encrypt_256
06b0: 0a 6b 65 79 32 35 36 20 70 61 64 20 70 61 64 20  .key256 pad pad 
06c0: 24 32 30 20 2b 20 24 30 20 74 66 5f 64 65 63 72  $20 + $0 tf_decr
06d0: 79 70 74 5f 32 35 36 0a 24 32 30 20 70 61 64 20  ypt_256.$20 pad 
06e0: 24 32 30 20 2b 20 6f 76 65 72 20 73 74 72 3d 0a  $20 + over str=.
06f0: 78 22 20 65 30 64 30 39 31 66 66 30 65 65 61 38  x" e0d091ff0eea8
0700: 66 64 66 63 39 38 31 39 32 65 36 32 65 64 38 30  fdfc98192e62ed80
0710: 61 64 35 39 64 38 36 35 64 30 38 35 38 38 64 66  ad59d865d08588df
0720: 34 37 36 36 35 37 30 35 36 62 35 39 35 35 65 39  476657056b5955e9
0730: 37 64 66 22 0a 70 61 64 20 6f 76 65 72 20 73 74  7df".pad over st
0740: 72 3d 20 61 6e 64 0a 2e 22 20 74 68 72 65 65 66  r= and.." threef
0750: 69 73 68 20 32 35 36 20 22 20 5b 49 46 5d 20 2e  ish 256 " [IF] .
0760: 22 20 70 61 73 73 65 64 22 20 5b 45 4c 53 45 5d  " passed" [ELSE]
0770: 20 2e 22 20 64 69 64 6e 27 74 20 70 61 73 73 22   ." didn't pass"
0780: 20 5b 54 48 45 4e 5d 20 63 72 0a 0a 74 66 5f 63   [THEN] cr..tf_c
0790: 74 78 20 62 75 66 66 65 72 3a 20 6b 65 79 35 31  tx buffer: key51
07a0: 32 0a 0a 78 22 20 30 30 30 30 30 30 30 30 30 30  2..x" 0000000000
07b0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
07c0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
07d0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
07e0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
07f0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
0800: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
0810: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
0820: 30 30 30 30 30 30 22 20 64 72 6f 70 0a 6b 65 79  000000" drop.key
0830: 35 31 32 20 6f 76 65 72 0a 70 61 64 20 24 43 20  512 over.pad $C 
0840: 74 66 5f 65 6e 63 72 79 70 74 0a 6b 65 79 35 31  tf_encrypt.key51
0850: 32 20 70 61 64 20 70 61 64 20 24 34 30 20 2b 20  2 pad pad $40 + 
0860: 24 30 20 74 66 5f 64 65 63 72 79 70 74 0a 24 34  $0 tf_decrypt.$4
0870: 30 20 70 61 64 20 24 34 30 20 2b 20 6f 76 65 72  0 pad $40 + over
0880: 20 73 74 72 3d 0a 78 22 20 62 31 61 32 62 62 63   str=.x" b1a2bbc
0890: 36 65 66 36 30 32 35 62 63 34 30 65 62 33 38 32  6ef6025bc40eb382
08a0: 32 31 36 31 66 33 36 65 33 37 35 64 31 62 62 30  2161f36e375d1bb0
08b0: 61 65 65 33 31 38 36 66 62 64 31 39 65 34 37 63  aee3186fbd19e47c
08c0: 35 64 34 37 39 39 34 37 62 37 62 63 32 66 38 35  5d479947b7bc2f85
08d0: 38 36 65 33 35 66 30 63 66 66 37 65 37 66 30 33  86e35f0cff7e7f03
08e0: 30 38 34 62 30 62 37 62 31 66 31 61 62 33 39 36  084b0b7b1f1ab396
08f0: 31 61 35 38 30 61 33 65 39 37 65 62 34 31 65 61  1a580a3e97eb41ea
0900: 31 34 61 36 64 37 62 62 65 22 0a 70 61 64 20 6f  14a6d7bbe".pad o
0910: 76 65 72 20 73 74 72 3d 20 61 6e 64 0a 2e 22 20  ver str= and.." 
0920: 74 68 72 65 65 66 69 73 68 20 35 31 32 20 22 20  threefish 512 " 
0930: 5b 49 46 5d 20 2e 22 20 70 61 73 73 65 64 22 20  [IF] ." passed" 
0940: 5b 45 4c 53 45 5d 20 2e 22 20 64 69 64 6e 27 74  [ELSE] ." didn't
0950: 20 70 61 73 73 22 20 5b 54 48 45 4e 5d 20 63 72   pass" [THEN] cr
0960: 0a 0a 78 22 20 31 30 31 31 31 32 31 33 31 34 31  ..x" 10111213141
0970: 35 31 36 31 37 31 38 31 39 31 61 31 62 31 63 31  5161718191a1b1c1
0980: 64 31 65 31 66 32 30 32 31 32 32 32 33 32 34 32  d1e1f20212223242
0990: 35 32 36 32 37 32 38 32 39 32 61 32 62 32 63 32  5262728292a2b2c2
09a0: 64 32 65 32 66 33 30 33 31 33 32 33 33 33 34 33  d2e2f30313233343
09b0: 35 33 36 33 37 33 38 33 39 33 61 33 62 33 63 33  5363738393a3b3c3
09c0: 64 33 65 33 66 34 30 34 31 34 32 34 33 34 34 34  d3e3f40414243444
09d0: 35 34 36 34 37 34 38 34 39 34 61 34 62 34 63 34  5464748494a4b4c4
09e0: 64 34 65 34 66 22 0a 6b 65 79 35 31 32 20 74 66  d4e4f".key512 tf
09f0: 5f 63 74 78 2d 6b 65 79 20 73 77 61 70 20 6d 6f  _ctx-key swap mo
0a00: 76 65 0a 78 22 20 30 30 30 31 30 32 30 33 30 34  ve.x" 0001020304
0a10: 30 35 30 36 30 37 30 38 30 39 30 61 30 62 30 63  05060708090a0b0c
0a20: 30 64 30 65 30 66 22 0a 6b 65 79 35 31 32 20 74  0d0e0f".key512 t
0a30: 66 5f 63 74 78 2d 74 77 65 61 6b 20 73 77 61 70  f_ctx-tweak swap
0a40: 20 6d 6f 76 65 0a 0a 78 22 20 66 66 66 65 66 64   move..x" fffefd
0a50: 66 63 66 62 66 61 66 39 66 38 66 37 66 36 66 35  fcfbfaf9f8f7f6f5
0a60: 66 34 66 33 66 32 66 31 66 30 65 66 65 65 65 64  f4f3f2f1f0efeeed
0a70: 65 63 65 62 65 61 65 39 65 38 65 37 65 36 65 35  ecebeae9e8e7e6e5
0a80: 65 34 65 33 65 32 65 31 65 30 64 66 64 65 64 64  e4e3e2e1e0dfdedd
0a90: 64 63 64 62 64 61 64 39 64 38 64 37 64 36 64 35  dcdbdad9d8d7d6d5
0aa0: 64 34 64 33 64 32 64 31 64 30 63 66 63 65 63 64  d4d3d2d1d0cfcecd
0ab0: 63 63 63 62 63 61 63 39 63 38 63 37 63 36 63 35  cccbcac9c8c7c6c5
0ac0: 63 34 63 33 63 32 63 31 63 30 22 20 64 72 6f 70  c4c3c2c1c0" drop
0ad0: 0a 6b 65 79 35 31 32 20 6f 76 65 72 0a 70 61 64  .key512 over.pad
0ae0: 20 24 43 20 74 66 5f 65 6e 63 72 79 70 74 0a 6b   $C tf_encrypt.k
0af0: 65 79 35 31 32 20 70 61 64 20 70 61 64 20 24 34  ey512 pad pad $4
0b00: 30 20 2b 20 24 30 20 74 66 5f 64 65 63 72 79 70  0 + $0 tf_decryp
0b10: 74 0a 24 34 30 20 70 61 64 20 24 34 30 20 2b 20  t.$40 pad $40 + 
0b20: 6f 76 65 72 20 73 74 72 3d 0a 78 22 20 65 33 30  over str=.x" e30
0b30: 34 34 33 39 36 32 36 64 34 35 61 32 63 62 34 30  4439626d45a2cb40
0b40: 31 63 61 64 38 64 36 33 36 32 34 39 61 36 33 33  1cad8d636249a633
0b50: 38 33 33 30 65 62 30 36 64 34 35 64 64 38 62 33  8330eb06d45dd8b3
0b60: 36 62 39 30 65 39 37 32 35 34 37 37 39 32 37 32  6b90e97254779272
0b70: 61 30 61 38 64 39 39 34 36 33 35 30 34 37 38 34  a0a8d99463504784
0b80: 34 32 30 65 61 31 38 63 39 61 37 32 35 61 66 31  420ea18c9a725af1
0b90: 31 64 66 66 65 61 31 30 31 36 32 33 34 38 39 32  1dffea1016234892
0ba0: 37 36 37 33 64 35 63 31 63 61 66 33 64 22 0a 70  7673d5c1caf3d".p
0bb0: 61 64 20 6f 76 65 72 20 73 74 72 3d 20 61 6e 64  ad over str= and
0bc0: 0a 2e 22 20 74 68 72 65 65 66 69 73 68 20 35 31  .." threefish 51
0bd0: 32 20 22 20 5b 49 46 5d 20 2e 22 20 70 61 73 73  2 " [IF] ." pass
0be0: 65 64 22 20 5b 45 4c 53 45 5d 20 2e 22 20 64 69  ed" [ELSE] ." di
0bf0: 64 6e 27 74 20 70 61 73 73 22 20 5b 54 48 45 4e  dn't pass" [THEN
0c00: 5d 20 63 72 0a 0a 5c 20 42 65 6e 63 68 6d 61 72  ] cr..\ Benchmar
0c10: 6b 69 6e 67 0a 31 30 20 30 20 5b 44 4f 5d 20 63  king.10 0 [DO] c
0c20: 3a 30 6b 65 79 20 70 61 64 20 24 31 30 30 30 30  :0key pad $10000
0c30: 30 20 21 74 69 6d 65 20 63 3a 65 6e 63 72 79 70  0 !time c:encryp
0c40: 74 20 2e 74 69 6d 65 20 2e 22 20 20 66 6f 72 20  t .time ."  for 
0c50: 31 4d 42 22 20 63 72 20 5b 4c 4f 4f 50 5d 0a 73  1MB" cr [LOOP].s
0c60: 63 72 69 70 74 3f 20 5b 49 46 5d 20 62 79 65 20  cript? [IF] bye 
0c70: 5b 54 48 45 4e 5d 0a                             [THEN].