Hex Artifact Content

Artifact e9cb54f9396fa6e9464871ca094ba223109d4cf3e1a0ecbcf38fb1038aa732d1:


0000: 23 20 41 75 74 6f 20 67 65 6e 65 72 61 74 65 64  # Auto generated
0010: 20 74 65 73 74 20 63 61 73 65 73 20 66 6f 72 20   test cases for 
0020: 6b 64 66 2e 63 73 76 0a 0a 23 20 4c 6f 61 64 20  kdf.csv..# Load 
0030: 54 63 6c 20 54 65 73 74 20 70 61 63 6b 61 67 65  Tcl Test package
0040: 0a 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 5b 6e  .if {[lsearch [n
0050: 61 6d 65 73 70 61 63 65 20 63 68 69 6c 64 72 65  amespace childre
0060: 6e 5d 20 3a 3a 74 63 6c 74 65 73 74 5d 20 3d 3d  n] ::tcltest] ==
0070: 20 2d 31 7d 20 7b 0a 09 70 61 63 6b 61 67 65 20   -1} {..package 
0080: 72 65 71 75 69 72 65 20 74 63 6c 74 65 73 74 0a  require tcltest.
0090: 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72  .namespace impor
00a0: 74 20 3a 3a 74 63 6c 74 65 73 74 3a 3a 2a 0a 7d  t ::tcltest::*.}
00b0: 0a 0a 73 65 74 20 61 75 74 6f 5f 70 61 74 68 20  ..set auto_path 
00c0: 5b 63 6f 6e 63 61 74 20 5b 6c 69 73 74 20 5b 66  [concat [list [f
00d0: 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 66 69 6c  ile dirname [fil
00e0: 65 20 64 69 72 6e 61 6d 65 20 5b 69 6e 66 6f 20  e dirname [info 
00f0: 73 63 72 69 70 74 5d 5d 5d 5d 20 24 61 75 74 6f  script]]]] $auto
0100: 5f 70 61 74 68 5d 0a 0a 70 61 63 6b 61 67 65 20  _path]..package 
0110: 72 65 71 75 69 72 65 20 74 6c 73 0a 0a 23 20 50  require tls..# P
0120: 42 4b 44 46 32 20 45 72 72 6f 72 20 43 61 73 65  BKDF2 Error Case
0130: 73 0a 0a 0a 74 65 73 74 20 50 42 4b 44 46 32 5f  s...test PBKDF2_
0140: 45 72 72 6f 72 73 2d 31 2e 31 20 7b 54 6f 6f 20  Errors-1.1 {Too 
0150: 66 65 77 20 61 72 67 73 7d 20 2d 62 6f 64 79 20  few args} -body 
0160: 7b 0a 09 3a 3a 74 6c 73 3a 3a 70 62 6b 64 66 32  {..::tls::pbkdf2
0170: 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 7b  .    } -result {
0180: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
0190: 6f 75 6c 64 20 62 65 20 22 3a 3a 74 6c 73 3a 3a  ould be "::tls::
01a0: 70 62 6b 64 66 32 20 5b 2d 63 69 70 68 65 72 20  pbkdf2 [-cipher 
01b0: 63 69 70 68 65 72 20 7c 20 2d 73 69 7a 65 20 6c  cipher | -size l
01c0: 65 6e 67 74 68 5d 20 2d 64 69 67 65 73 74 20 64  ength] -digest d
01d0: 69 67 65 73 74 20 3f 2d 69 74 65 72 61 74 69 6f  igest ?-iteratio
01e0: 6e 73 20 63 6f 75 6e 74 3f 20 3f 2d 70 61 73 73  ns count? ?-pass
01f0: 77 6f 72 64 20 73 74 72 69 6e 67 3f 20 3f 2d 73  word string? ?-s
0200: 61 6c 74 20 73 74 72 69 6e 67 3f 22 7d 20 2d 72  alt string?"} -r
0210: 65 74 75 72 6e 43 6f 64 65 73 20 7b 31 7d 0a 0a  eturnCodes {1}..
0220: 74 65 73 74 20 50 42 4b 44 46 32 5f 45 72 72 6f  test PBKDF2_Erro
0230: 72 73 2d 31 2e 32 20 7b 54 6f 6f 20 6d 61 6e 79  rs-1.2 {Too many
0240: 20 61 72 67 73 7d 20 2d 62 6f 64 79 20 7b 0a 09   args} -body {..
0250: 3a 3a 74 6c 73 3a 3a 70 62 6b 64 66 32 20 74 6f  ::tls::pbkdf2 to
0260: 6f 20 6d 61 6e 79 20 63 6f 6d 6d 61 6e 64 20 6c  o many command l
0270: 69 6e 65 20 61 72 67 73 20 74 6f 20 70 61 73 73  ine args to pass
0280: 20 74 68 65 20 74 65 73 74 20 77 69 74 68 6f 75   the test withou
0290: 74 20 61 6e 20 65 72 72 6f 72 20 6f 72 20 66 61  t an error or fa
02a0: 69 6c 69 6e 67 0a 20 20 20 20 7d 20 2d 72 65 73  iling.    } -res
02b0: 75 6c 74 20 7b 77 72 6f 6e 67 20 23 20 61 72 67  ult {wrong # arg
02c0: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 3a 3a  s: should be "::
02d0: 74 6c 73 3a 3a 70 62 6b 64 66 32 20 5b 2d 63 69  tls::pbkdf2 [-ci
02e0: 70 68 65 72 20 63 69 70 68 65 72 20 7c 20 2d 73  pher cipher | -s
02f0: 69 7a 65 20 6c 65 6e 67 74 68 5d 20 2d 64 69 67  ize length] -dig
0300: 65 73 74 20 64 69 67 65 73 74 20 3f 2d 69 74 65  est digest ?-ite
0310: 72 61 74 69 6f 6e 73 20 63 6f 75 6e 74 3f 20 3f  rations count? ?
0320: 2d 70 61 73 73 77 6f 72 64 20 73 74 72 69 6e 67  -password string
0330: 3f 20 3f 2d 73 61 6c 74 20 73 74 72 69 6e 67 3f  ? ?-salt string?
0340: 22 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20  "} -returnCodes 
0350: 7b 31 7d 0a 0a 74 65 73 74 20 50 42 4b 44 46 32  {1}..test PBKDF2
0360: 5f 45 72 72 6f 72 73 2d 31 2e 33 20 7b 49 6e 76  _Errors-1.3 {Inv
0370: 61 6c 69 64 20 63 69 70 68 65 72 7d 20 2d 62 6f  alid cipher} -bo
0380: 64 79 20 7b 0a 09 3a 3a 74 6c 73 3a 3a 70 62 6b  dy {..::tls::pbk
0390: 64 66 32 20 2d 64 69 67 65 73 74 20 73 68 61 32  df2 -digest sha2
03a0: 35 36 20 2d 70 61 73 73 77 6f 72 64 20 6b 65 79  56 -password key
03b0: 20 2d 63 69 70 68 65 72 20 62 6f 67 75 73 0a 20   -cipher bogus. 
03c0: 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 7b 69 6e     } -result {in
03d0: 76 61 6c 69 64 20 63 69 70 68 65 72 20 22 62 6f  valid cipher "bo
03e0: 67 75 73 22 7d 20 2d 72 65 74 75 72 6e 43 6f 64  gus"} -returnCod
03f0: 65 73 20 7b 31 7d 0a 0a 74 65 73 74 20 50 42 4b  es {1}..test PBK
0400: 44 46 32 5f 45 72 72 6f 72 73 2d 31 2e 34 20 7b  DF2_Errors-1.4 {
0410: 49 6e 76 61 6c 69 64 20 64 69 67 65 73 74 7d 20  Invalid digest} 
0420: 2d 62 6f 64 79 20 7b 0a 09 3a 3a 74 6c 73 3a 3a  -body {..::tls::
0430: 70 62 6b 64 66 32 20 2d 64 69 67 65 73 74 20 62  pbkdf2 -digest b
0440: 6f 67 75 73 20 2d 70 61 73 73 77 6f 72 64 20 6b  ogus -password k
0450: 65 79 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c 74  ey.    } -result
0460: 20 7b 69 6e 76 61 6c 69 64 20 64 69 67 65 73 74   {invalid digest
0470: 20 22 62 6f 67 75 73 22 7d 20 2d 72 65 74 75 72   "bogus"} -retur
0480: 6e 43 6f 64 65 73 20 7b 31 7d 0a 0a 74 65 73 74  nCodes {1}..test
0490: 20 50 42 4b 44 46 32 5f 45 72 72 6f 72 73 2d 31   PBKDF2_Errors-1
04a0: 2e 35 20 7b 49 6e 76 61 6c 69 64 20 69 74 65 72  .5 {Invalid iter
04b0: 61 74 69 6f 6e 73 7d 20 2d 62 6f 64 79 20 7b 0a  ations} -body {.
04c0: 09 3a 3a 74 6c 73 3a 3a 70 62 6b 64 66 32 20 2d  .::tls::pbkdf2 -
04d0: 64 69 67 65 73 74 20 73 68 61 32 35 36 20 2d 70  digest sha256 -p
04e0: 61 73 73 77 6f 72 64 20 6b 65 79 20 2d 69 74 65  assword key -ite
04f0: 72 61 74 69 6f 6e 73 20 2d 31 0a 20 20 20 20 7d  rations -1.    }
0500: 20 2d 72 65 73 75 6c 74 20 7b 69 6e 76 61 6c 69   -result {invali
0510: 64 20 76 61 6c 75 65 20 22 2d 31 22 20 66 6f 72  d value "-1" for
0520: 20 6f 70 74 69 6f 6e 20 22 69 74 65 72 61 74 69   option "iterati
0530: 6f 6e 73 22 3a 20 6d 75 73 74 20 62 65 20 3e 3d  ons": must be >=
0540: 20 31 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73   1} -returnCodes
0550: 20 7b 31 7d 0a 0a 74 65 73 74 20 50 42 4b 44 46   {1}..test PBKDF
0560: 32 5f 45 72 72 6f 72 73 2d 31 2e 36 20 7b 4e 6f  2_Errors-1.6 {No
0570: 20 70 61 73 73 77 6f 72 64 20 76 61 6c 75 65 7d   password value}
0580: 20 2d 62 6f 64 79 20 7b 0a 09 3a 3a 74 6c 73 3a   -body {..::tls:
0590: 3a 70 62 6b 64 66 32 20 2d 64 69 67 65 73 74 20  :pbkdf2 -digest 
05a0: 73 68 61 32 35 36 20 2d 70 61 73 73 77 6f 72 64  sha256 -password
05b0: 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 7b  .    } -result {
05c0: 4e 6f 20 76 61 6c 75 65 20 66 6f 72 20 6f 70 74  No value for opt
05d0: 69 6f 6e 20 22 2d 70 61 73 73 77 6f 72 64 22 7d  ion "-password"}
05e0: 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 7b 31   -returnCodes {1
05f0: 7d 0a 0a 74 65 73 74 20 50 42 4b 44 46 32 5f 45  }..test PBKDF2_E
0600: 72 72 6f 72 73 2d 31 2e 37 20 7b 4e 6f 20 73 61  rrors-1.7 {No sa
0610: 6c 74 20 76 61 6c 75 65 7d 20 2d 62 6f 64 79 20  lt value} -body 
0620: 7b 0a 09 3a 3a 74 6c 73 3a 3a 70 62 6b 64 66 32  {..::tls::pbkdf2
0630: 20 2d 64 69 67 65 73 74 20 73 68 61 32 35 36 20   -digest sha256 
0640: 2d 70 61 73 73 77 6f 72 64 20 6b 65 79 20 2d 73  -password key -s
0650: 61 6c 74 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c  alt.    } -resul
0660: 74 20 7b 4e 6f 20 76 61 6c 75 65 20 66 6f 72 20  t {No value for 
0670: 6f 70 74 69 6f 6e 20 22 2d 73 61 6c 74 22 7d 20  option "-salt"} 
0680: 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 7b 31 7d  -returnCodes {1}
0690: 0a 0a 74 65 73 74 20 50 42 4b 44 46 32 5f 45 72  ..test PBKDF2_Er
06a0: 72 6f 72 73 2d 31 2e 38 20 7b 49 6e 76 61 6c 69  rors-1.8 {Invali
06b0: 64 20 73 69 7a 65 7d 20 2d 62 6f 64 79 20 7b 0a  d size} -body {.
06c0: 09 3a 3a 74 6c 73 3a 3a 70 62 6b 64 66 32 20 2d  .::tls::pbkdf2 -
06d0: 64 69 67 65 73 74 20 73 68 61 32 35 36 20 2d 70  digest sha256 -p
06e0: 61 73 73 77 6f 72 64 20 6b 65 79 20 2d 73 69 7a  assword key -siz
06f0: 65 20 30 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c  e 0.    } -resul
0700: 74 20 7b 69 6e 76 61 6c 69 64 20 76 61 6c 75 65  t {invalid value
0710: 20 22 30 22 20 66 6f 72 20 6f 70 74 69 6f 6e 20   "0" for option 
0720: 22 2d 73 69 7a 65 22 3a 20 6d 75 73 74 20 62 65  "-size": must be
0730: 20 3e 3d 20 31 7d 20 2d 72 65 74 75 72 6e 43 6f   >= 1} -returnCo
0740: 64 65 73 20 7b 31 7d 0a 0a 74 65 73 74 20 50 42  des {1}..test PB
0750: 4b 44 46 32 5f 45 72 72 6f 72 73 2d 31 2e 39 20  KDF2_Errors-1.9 
0760: 7b 54 6f 6f 20 62 69 67 20 73 69 7a 65 7d 20 2d  {Too big size} -
0770: 62 6f 64 79 20 7b 0a 09 3a 3a 74 6c 73 3a 3a 70  body {..::tls::p
0780: 62 6b 64 66 32 20 2d 64 69 67 65 73 74 20 73 68  bkdf2 -digest sh
0790: 61 32 35 36 20 2d 70 61 73 73 77 6f 72 64 20 6b  a256 -password k
07a0: 65 79 20 2d 73 69 7a 65 20 34 30 30 0a 20 20 20  ey -size 400.   
07b0: 20 7d 20 2d 72 65 73 75 6c 74 20 7b 69 6e 76 61   } -result {inva
07c0: 6c 69 64 20 76 61 6c 75 65 20 22 34 30 30 22 20  lid value "400" 
07d0: 66 6f 72 20 6f 70 74 69 6f 6e 20 22 2d 73 69 7a  for option "-siz
07e0: 65 22 3a 20 6d 75 73 74 20 62 65 20 3c 3d 20 33  e": must be <= 3
07f0: 32 30 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73  20} -returnCodes
0800: 20 7b 31 7d 0a 0a 23 20 48 4b 44 46 20 45 72 72   {1}..# HKDF Err
0810: 6f 72 20 43 61 73 65 73 0a 0a 0a 74 65 73 74 20  or Cases...test 
0820: 48 4b 44 46 5f 45 72 72 6f 72 73 2d 32 2e 31 20  HKDF_Errors-2.1 
0830: 7b 54 6f 6f 20 66 65 77 20 61 72 67 73 7d 20 2d  {Too few args} -
0840: 62 6f 64 79 20 7b 0a 09 3a 3a 74 6c 73 3a 3a 68  body {..::tls::h
0850: 6b 64 66 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c  kdf.    } -resul
0860: 74 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  t {wrong # args:
0870: 20 73 68 6f 75 6c 64 20 62 65 20 22 3a 3a 74 6c   should be "::tl
0880: 73 3a 3a 68 6b 64 66 20 2d 64 69 67 65 73 74 20  s::hkdf -digest 
0890: 64 69 67 65 73 74 20 2d 6b 65 79 20 73 74 72 69  digest -key stri
08a0: 6e 67 20 3f 2d 69 6e 66 6f 20 73 74 72 69 6e 67  ng ?-info string
08b0: 3f 20 3f 2d 73 61 6c 74 20 73 74 72 69 6e 67 3f  ? ?-salt string?
08c0: 20 3f 2d 73 69 7a 65 20 64 65 72 69 76 65 64 5f   ?-size derived_
08d0: 6c 65 6e 67 74 68 3f 22 7d 20 2d 72 65 74 75 72  length?"} -retur
08e0: 6e 43 6f 64 65 73 20 7b 31 7d 0a 0a 74 65 73 74  nCodes {1}..test
08f0: 20 48 4b 44 46 5f 45 72 72 6f 72 73 2d 32 2e 32   HKDF_Errors-2.2
0900: 20 7b 54 6f 6f 20 6d 61 6e 79 20 61 72 67 73 7d   {Too many args}
0910: 20 2d 62 6f 64 79 20 7b 0a 09 3a 3a 74 6c 73 3a   -body {..::tls:
0920: 3a 68 6b 64 66 20 74 6f 6f 20 6d 61 6e 79 20 63  :hkdf too many c
0930: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 61 72 67 73  ommand line args
0940: 20 74 6f 20 70 61 73 73 20 74 68 65 20 74 65 73   to pass the tes
0950: 74 20 77 69 74 68 6f 75 74 20 61 6e 20 65 72 72  t without an err
0960: 6f 72 20 6f 72 20 66 61 69 6c 69 6e 67 0a 20 20  or or failing.  
0970: 20 20 7d 20 2d 72 65 73 75 6c 74 20 7b 77 72 6f    } -result {wro
0980: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
0990: 64 20 62 65 20 22 3a 3a 74 6c 73 3a 3a 68 6b 64  d be "::tls::hkd
09a0: 66 20 2d 64 69 67 65 73 74 20 64 69 67 65 73 74  f -digest digest
09b0: 20 2d 6b 65 79 20 73 74 72 69 6e 67 20 3f 2d 69   -key string ?-i
09c0: 6e 66 6f 20 73 74 72 69 6e 67 3f 20 3f 2d 73 61  nfo string? ?-sa
09d0: 6c 74 20 73 74 72 69 6e 67 3f 20 3f 2d 73 69 7a  lt string? ?-siz
09e0: 65 20 64 65 72 69 76 65 64 5f 6c 65 6e 67 74 68  e derived_length
09f0: 3f 22 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73  ?"} -returnCodes
0a00: 20 7b 31 7d 0a 0a 74 65 73 74 20 48 4b 44 46 5f   {1}..test HKDF_
0a10: 45 72 72 6f 72 73 2d 32 2e 33 20 7b 4e 6f 20 64  Errors-2.3 {No d
0a20: 69 67 65 73 74 7d 20 2d 62 6f 64 79 20 7b 0a 09  igest} -body {..
0a30: 3a 3a 74 6c 73 3a 3a 68 6b 64 66 20 2d 6b 65 79  ::tls::hkdf -key
0a40: 20 6b 65 79 20 2d 6b 65 79 20 6b 65 79 0a 20 20   key -key key.  
0a50: 20 20 7d 20 2d 72 65 73 75 6c 74 20 7b 6e 6f 20    } -result {no 
0a60: 64 69 67 65 73 74 7d 20 2d 72 65 74 75 72 6e 43  digest} -returnC
0a70: 6f 64 65 73 20 7b 31 7d 0a 0a 74 65 73 74 20 48  odes {1}..test H
0a80: 4b 44 46 5f 45 72 72 6f 72 73 2d 32 2e 34 20 7b  KDF_Errors-2.4 {
0a90: 4e 6f 20 6b 65 79 7d 20 2d 62 6f 64 79 20 7b 0a  No key} -body {.
0aa0: 09 3a 3a 74 6c 73 3a 3a 68 6b 64 66 20 2d 64 69  .::tls::hkdf -di
0ab0: 67 65 73 74 20 73 68 61 32 35 36 20 2d 64 69 67  gest sha256 -dig
0ac0: 65 73 74 20 73 68 61 32 35 36 0a 20 20 20 20 7d  est sha256.    }
0ad0: 20 2d 72 65 73 75 6c 74 20 7b 6e 6f 20 6b 65 79   -result {no key
0ae0: 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 7b  } -returnCodes {
0af0: 31 7d 0a 0a 74 65 73 74 20 48 4b 44 46 5f 45 72  1}..test HKDF_Er
0b00: 72 6f 72 73 2d 32 2e 35 20 7b 4e 6f 20 69 6e 66  rors-2.5 {No inf
0b10: 6f 20 76 61 6c 75 65 7d 20 2d 62 6f 64 79 20 7b  o value} -body {
0b20: 0a 09 3a 3a 74 6c 73 3a 3a 68 6b 64 66 20 2d 64  ..::tls::hkdf -d
0b30: 69 67 65 73 74 20 73 68 61 32 35 36 20 2d 6b 65  igest sha256 -ke
0b40: 79 20 6b 65 79 20 2d 69 6e 66 6f 0a 20 20 20 20  y key -info.    
0b50: 7d 20 2d 72 65 73 75 6c 74 20 7b 4e 6f 20 76 61  } -result {No va
0b60: 6c 75 65 20 66 6f 72 20 6f 70 74 69 6f 6e 20 22  lue for option "
0b70: 2d 69 6e 66 6f 22 7d 20 2d 72 65 74 75 72 6e 43  -info"} -returnC
0b80: 6f 64 65 73 20 7b 31 7d 0a 0a 74 65 73 74 20 48  odes {1}..test H
0b90: 4b 44 46 5f 45 72 72 6f 72 73 2d 32 2e 36 20 7b  KDF_Errors-2.6 {
0ba0: 4e 6f 20 73 61 6c 74 20 76 61 6c 75 65 7d 20 2d  No salt value} -
0bb0: 62 6f 64 79 20 7b 0a 09 3a 3a 74 6c 73 3a 3a 68  body {..::tls::h
0bc0: 6b 64 66 20 2d 64 69 67 65 73 74 20 73 68 61 32  kdf -digest sha2
0bd0: 35 36 20 2d 70 61 73 73 77 6f 72 64 20 6b 65 79  56 -password key
0be0: 20 2d 73 61 6c 74 0a 20 20 20 20 7d 20 2d 72 65   -salt.    } -re
0bf0: 73 75 6c 74 20 7b 4e 6f 20 76 61 6c 75 65 20 66  sult {No value f
0c00: 6f 72 20 6f 70 74 69 6f 6e 20 22 2d 73 61 6c 74  or option "-salt
0c10: 22 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20  "} -returnCodes 
0c20: 7b 31 7d 0a 0a 74 65 73 74 20 48 4b 44 46 5f 45  {1}..test HKDF_E
0c30: 72 72 6f 72 73 2d 32 2e 37 20 7b 49 6e 76 61 6c  rrors-2.7 {Inval
0c40: 69 64 20 73 69 7a 65 7d 20 2d 62 6f 64 79 20 7b  id size} -body {
0c50: 0a 09 3a 3a 74 6c 73 3a 3a 68 6b 64 66 20 2d 64  ..::tls::hkdf -d
0c60: 69 67 65 73 74 20 73 68 61 32 35 36 20 2d 70 61  igest sha256 -pa
0c70: 73 73 77 6f 72 64 20 6b 65 79 20 2d 73 69 7a 65  ssword key -size
0c80: 20 30 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c 74   0.    } -result
0c90: 20 7b 69 6e 76 61 6c 69 64 20 76 61 6c 75 65 20   {invalid value 
0ca0: 22 30 22 20 66 6f 72 20 6f 70 74 69 6f 6e 20 22  "0" for option "
0cb0: 2d 73 69 7a 65 22 3a 20 6d 75 73 74 20 62 65 20  -size": must be 
0cc0: 3e 3d 20 31 7d 20 2d 72 65 74 75 72 6e 43 6f 64  >= 1} -returnCod
0cd0: 65 73 20 7b 31 7d 0a 0a 74 65 73 74 20 48 4b 44  es {1}..test HKD
0ce0: 46 5f 45 72 72 6f 72 73 2d 32 2e 38 20 7b 54 6f  F_Errors-2.8 {To
0cf0: 6f 20 62 69 67 20 73 69 7a 65 7d 20 2d 62 6f 64  o big size} -bod
0d00: 79 20 7b 0a 09 3a 3a 74 6c 73 3a 3a 68 6b 64 66  y {..::tls::hkdf
0d10: 20 2d 64 69 67 65 73 74 20 73 68 61 32 35 36 20   -digest sha256 
0d20: 2d 70 61 73 73 77 6f 72 64 20 6b 65 79 20 2d 73  -password key -s
0d30: 69 7a 65 20 38 31 36 31 0a 20 20 20 20 7d 20 2d  ize 8161.    } -
0d40: 72 65 73 75 6c 74 20 22 4b 65 79 20 64 65 72 69  result "Key deri
0d50: 76 61 74 69 6f 6e 20 66 61 69 6c 65 64 3a 20 22  vation failed: "
0d60: 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 7b 31   -returnCodes {1
0d70: 7d 0a 0a 23 20 53 63 72 79 70 74 20 45 72 72 6f  }..# Scrypt Erro
0d80: 72 20 43 61 73 65 73 0a 0a 0a 74 65 73 74 20 53  r Cases...test S
0d90: 63 72 79 70 74 5f 45 72 72 6f 72 73 2d 33 2e 31  crypt_Errors-3.1
0da0: 20 7b 54 6f 6f 20 66 65 77 20 61 72 67 73 7d 20   {Too few args} 
0db0: 2d 62 6f 64 79 20 7b 0a 09 3a 3a 74 6c 73 3a 3a  -body {..::tls::
0dc0: 73 63 72 79 70 74 0a 20 20 20 20 7d 20 2d 72 65  scrypt.    } -re
0dd0: 73 75 6c 74 20 7b 77 72 6f 6e 67 20 23 20 61 72  sult {wrong # ar
0de0: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 3a  gs: should be ":
0df0: 3a 74 6c 73 3a 3a 73 63 72 79 70 74 20 2d 70 61  :tls::scrypt -pa
0e00: 73 73 77 6f 72 64 20 73 74 72 69 6e 67 20 2d 73  ssword string -s
0e10: 61 6c 74 20 73 74 72 69 6e 67 20 3f 2d 4e 20 63  alt string ?-N c
0e20: 6f 73 74 50 61 72 61 6d 65 74 65 72 3f 20 3f 2d  ostParameter? ?-
0e30: 72 20 62 6c 6f 63 6b 53 69 7a 65 3f 20 3f 2d 70  r blockSize? ?-p
0e40: 20 70 61 72 61 6c 6c 65 6c 69 7a 61 74 69 6f 6e   parallelization
0e50: 3f 20 3f 2d 73 69 7a 65 20 64 65 72 69 76 65 64  ? ?-size derived
0e60: 5f 6c 65 6e 67 74 68 3f 22 7d 20 2d 72 65 74 75  _length?"} -retu
0e70: 72 6e 43 6f 64 65 73 20 7b 31 7d 0a 0a 74 65 73  rnCodes {1}..tes
0e80: 74 20 53 63 72 79 70 74 5f 45 72 72 6f 72 73 2d  t Scrypt_Errors-
0e90: 33 2e 32 20 7b 54 6f 6f 20 6d 61 6e 79 20 61 72  3.2 {Too many ar
0ea0: 67 73 7d 20 2d 62 6f 64 79 20 7b 0a 09 3a 3a 74  gs} -body {..::t
0eb0: 6c 73 3a 3a 73 63 72 79 70 74 20 74 6f 6f 20 6d  ls::scrypt too m
0ec0: 61 6e 79 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  any command line
0ed0: 20 61 72 67 73 20 74 6f 20 70 61 73 73 20 74 68   args to pass th
0ee0: 65 20 74 65 73 74 20 77 69 74 68 6f 75 74 20 61  e test without a
0ef0: 6e 20 65 72 72 6f 72 20 6f 72 20 66 61 69 6c 69  n error or faili
0f00: 6e 67 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c 74  ng.    } -result
0f10: 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   {wrong # args: 
0f20: 73 68 6f 75 6c 64 20 62 65 20 22 3a 3a 74 6c 73  should be "::tls
0f30: 3a 3a 73 63 72 79 70 74 20 2d 70 61 73 73 77 6f  ::scrypt -passwo
0f40: 72 64 20 73 74 72 69 6e 67 20 2d 73 61 6c 74 20  rd string -salt 
0f50: 73 74 72 69 6e 67 20 3f 2d 4e 20 63 6f 73 74 50  string ?-N costP
0f60: 61 72 61 6d 65 74 65 72 3f 20 3f 2d 72 20 62 6c  arameter? ?-r bl
0f70: 6f 63 6b 53 69 7a 65 3f 20 3f 2d 70 20 70 61 72  ockSize? ?-p par
0f80: 61 6c 6c 65 6c 69 7a 61 74 69 6f 6e 3f 20 3f 2d  allelization? ?-
0f90: 73 69 7a 65 20 64 65 72 69 76 65 64 5f 6c 65 6e  size derived_len
0fa0: 67 74 68 3f 22 7d 20 2d 72 65 74 75 72 6e 43 6f  gth?"} -returnCo
0fb0: 64 65 73 20 7b 31 7d 0a 0a 74 65 73 74 20 53 63  des {1}..test Sc
0fc0: 72 79 70 74 5f 45 72 72 6f 72 73 2d 33 2e 33 20  rypt_Errors-3.3 
0fd0: 7b 4e 6f 20 70 61 73 73 77 6f 72 64 20 76 61 6c  {No password val
0fe0: 75 65 7d 20 2d 62 6f 64 79 20 7b 0a 09 3a 3a 74  ue} -body {..::t
0ff0: 6c 73 3a 3a 73 63 72 79 70 74 20 2d 73 61 6c 74  ls::scrypt -salt
1000: 20 73 61 6c 74 20 2d 73 61 6c 74 20 73 61 6c 74   salt -salt salt
1010: 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 7b  .    } -result {
1020: 6e 6f 20 70 61 73 73 77 6f 72 64 7d 20 2d 72 65  no password} -re
1030: 74 75 72 6e 43 6f 64 65 73 20 7b 31 7d 0a 0a 74  turnCodes {1}..t
1040: 65 73 74 20 53 63 72 79 70 74 5f 45 72 72 6f 72  est Scrypt_Error
1050: 73 2d 33 2e 34 20 7b 4e 6f 20 73 61 6c 74 20 76  s-3.4 {No salt v
1060: 61 6c 75 65 7d 20 2d 62 6f 64 79 20 7b 0a 09 3a  alue} -body {..:
1070: 3a 74 6c 73 3a 3a 73 63 72 79 70 74 20 2d 70 61  :tls::scrypt -pa
1080: 73 73 77 6f 72 64 20 6b 65 79 20 2d 70 61 73 73  ssword key -pass
1090: 77 6f 72 64 20 6b 65 79 0a 20 20 20 20 7d 20 2d  word key.    } -
10a0: 72 65 73 75 6c 74 20 7b 6e 6f 20 73 61 6c 74 7d  result {no salt}
10b0: 20 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 7b 31   -returnCodes {1
10c0: 7d 0a 0a 74 65 73 74 20 53 63 72 79 70 74 5f 45  }..test Scrypt_E
10d0: 72 72 6f 72 73 2d 33 2e 35 20 7b 49 6e 76 61 6c  rrors-3.5 {Inval
10e0: 69 64 20 73 69 7a 65 7d 20 2d 62 6f 64 79 20 7b  id size} -body {
10f0: 0a 09 3a 3a 74 6c 73 3a 3a 73 63 72 79 70 74 20  ..::tls::scrypt 
1100: 2d 70 61 73 73 77 6f 72 64 20 6b 65 79 20 2d 73  -password key -s
1110: 61 6c 74 20 73 61 6c 74 20 2d 73 69 7a 65 20 30  alt salt -size 0
1120: 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 7b  .    } -result {
1130: 69 6e 76 61 6c 69 64 20 76 61 6c 75 65 20 22 30  invalid value "0
1140: 22 20 66 6f 72 20 6f 70 74 69 6f 6e 20 22 2d 73  " for option "-s
1150: 69 7a 65 22 3a 20 6d 75 73 74 20 62 65 20 3e 3d  ize": must be >=
1160: 20 31 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73   1} -returnCodes
1170: 20 7b 31 7d 0a 0a 74 65 73 74 20 53 63 72 79 70   {1}..test Scryp
1180: 74 5f 45 72 72 6f 72 73 2d 33 2e 36 20 7b 49 6e  t_Errors-3.6 {In
1190: 76 61 6c 69 64 20 4e 20 63 6f 73 74 50 61 72 61  valid N costPara
11a0: 6d 65 74 65 72 7d 20 2d 63 6f 6e 73 74 72 61 69  meter} -constrai
11b0: 6e 74 73 20 7b 6b 6e 6f 77 6e 49 67 6e 6f 72 65  nts {knownIgnore
11c0: 64 7d 20 2d 62 6f 64 79 20 7b 0a 09 3a 3a 74 6c  d} -body {..::tl
11d0: 73 3a 3a 73 63 72 79 70 74 20 2d 70 61 73 73 77  s::scrypt -passw
11e0: 6f 72 64 20 6b 65 79 20 2d 73 61 6c 74 20 73 61  ord key -salt sa
11f0: 6c 74 20 2d 4e 20 30 0a 20 20 20 20 7d 20 2d 72  lt -N 0.    } -r
1200: 65 74 75 72 6e 43 6f 64 65 73 20 7b 31 7d 0a 0a  eturnCodes {1}..
1210: 74 65 73 74 20 53 63 72 79 70 74 5f 45 72 72 6f  test Scrypt_Erro
1220: 72 73 2d 33 2e 37 20 7b 49 6e 76 61 6c 69 64 20  rs-3.7 {Invalid 
1230: 72 20 62 6c 6f 63 6b 53 69 7a 65 7d 20 2d 63 6f  r blockSize} -co
1240: 6e 73 74 72 61 69 6e 74 73 20 7b 6b 6e 6f 77 6e  nstraints {known
1250: 49 67 6e 6f 72 65 64 7d 20 2d 62 6f 64 79 20 7b  Ignored} -body {
1260: 0a 09 3a 3a 74 6c 73 3a 3a 73 63 72 79 70 74 20  ..::tls::scrypt 
1270: 2d 70 61 73 73 77 6f 72 64 20 6b 65 79 20 2d 73  -password key -s
1280: 61 6c 74 20 73 61 6c 74 20 2d 72 20 30 0a 20 20  alt salt -r 0.  
1290: 20 20 7d 20 2d 72 65 74 75 72 6e 43 6f 64 65 73    } -returnCodes
12a0: 20 7b 31 7d 0a 0a 74 65 73 74 20 53 63 72 79 70   {1}..test Scryp
12b0: 74 5f 45 72 72 6f 72 73 2d 33 2e 38 20 7b 49 6e  t_Errors-3.8 {In
12c0: 76 61 6c 69 64 20 70 20 70 61 72 61 6c 6c 65 6c  valid p parallel
12d0: 69 7a 61 74 69 6f 6e 7d 20 2d 63 6f 6e 73 74 72  ization} -constr
12e0: 61 69 6e 74 73 20 7b 6b 6e 6f 77 6e 49 67 6e 6f  aints {knownIgno
12f0: 72 65 64 7d 20 2d 62 6f 64 79 20 7b 0a 09 3a 3a  red} -body {..::
1300: 74 6c 73 3a 3a 73 63 72 79 70 74 20 2d 70 61 73  tls::scrypt -pas
1310: 73 77 6f 72 64 20 6b 65 79 20 2d 73 61 6c 74 20  sword key -salt 
1320: 73 61 6c 74 20 2d 70 20 30 0a 20 20 20 20 7d 20  salt -p 0.    } 
1330: 2d 72 65 74 75 72 6e 43 6f 64 65 73 20 7b 31 7d  -returnCodes {1}
1340: 0a 0a 73 65 74 20 64 69 67 65 73 74 20 73 68 61  ..set digest sha
1350: 31 0a 73 65 74 20 50 20 22 70 61 73 73 77 6f 72  1.set P "passwor
1360: 64 22 0a 73 65 74 20 53 20 22 73 61 6c 74 22 0a  d".set S "salt".
1370: 73 65 74 20 64 6b 4c 65 6e 20 32 30 0a 0a 23 20  set dkLen 20..# 
1380: 50 42 4b 44 46 32 20 52 46 43 20 36 30 37 30 0a  PBKDF2 RFC 6070.
1390: 0a 0a 74 65 73 74 20 50 42 4b 44 46 32 5f 52 46  ..test PBKDF2_RF
13a0: 43 5f 36 30 37 30 2d 34 2e 31 20 7b 54 65 73 74  C_6070-4.1 {Test
13b0: 20 43 61 73 65 20 31 7d 20 2d 62 6f 64 79 20 7b   Case 1} -body {
13c0: 0a 09 62 69 6e 61 72 79 20 65 6e 63 6f 64 65 20  ..binary encode 
13d0: 68 65 78 20 5b 3a 3a 74 6c 73 3a 3a 70 62 6b 64  hex [::tls::pbkd
13e0: 66 32 20 2d 64 69 67 65 73 74 20 24 64 69 67 65  f2 -digest $dige
13f0: 73 74 20 2d 70 61 73 73 77 6f 72 64 20 24 50 20  st -password $P 
1400: 2d 73 61 6c 74 20 24 53 20 2d 69 74 65 72 61 74  -salt $S -iterat
1410: 69 6f 6e 73 20 31 20 2d 73 69 7a 65 20 24 64 6b  ions 1 -size $dk
1420: 4c 65 6e 5d 0a 20 20 20 20 7d 20 2d 72 65 73 75  Len].    } -resu
1430: 6c 74 20 7b 30 63 36 30 63 38 30 66 39 36 31 66  lt {0c60c80f961f
1440: 30 65 37 31 66 33 61 39 62 35 32 34 61 66 36 30  0e71f3a9b524af60
1450: 31 32 30 36 32 66 65 30 33 37 61 36 7d 0a 0a 74  12062fe037a6}..t
1460: 65 73 74 20 50 42 4b 44 46 32 5f 52 46 43 5f 36  est PBKDF2_RFC_6
1470: 30 37 30 2d 34 2e 32 20 7b 54 65 73 74 20 43 61  070-4.2 {Test Ca
1480: 73 65 20 32 7d 20 2d 62 6f 64 79 20 7b 0a 09 62  se 2} -body {..b
1490: 69 6e 61 72 79 20 65 6e 63 6f 64 65 20 68 65 78  inary encode hex
14a0: 20 5b 3a 3a 74 6c 73 3a 3a 70 62 6b 64 66 32 20   [::tls::pbkdf2 
14b0: 2d 64 69 67 65 73 74 20 24 64 69 67 65 73 74 20  -digest $digest 
14c0: 2d 70 61 73 73 77 6f 72 64 20 24 50 20 2d 73 61  -password $P -sa
14d0: 6c 74 20 24 53 20 2d 69 74 65 72 61 74 69 6f 6e  lt $S -iteration
14e0: 73 20 32 20 2d 73 69 7a 65 20 24 64 6b 4c 65 6e  s 2 -size $dkLen
14f0: 5d 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20  ].    } -result 
1500: 7b 65 61 36 63 30 31 34 64 63 37 32 64 36 66 38  {ea6c014dc72d6f8
1510: 63 63 64 31 65 64 39 32 61 63 65 31 64 34 31 66  ccd1ed92ace1d41f
1520: 30 64 38 64 65 38 39 35 37 7d 0a 0a 74 65 73 74  0d8de8957}..test
1530: 20 50 42 4b 44 46 32 5f 52 46 43 5f 36 30 37 30   PBKDF2_RFC_6070
1540: 2d 34 2e 33 20 7b 54 65 73 74 20 43 61 73 65 20  -4.3 {Test Case 
1550: 33 7d 20 2d 62 6f 64 79 20 7b 0a 09 62 69 6e 61  3} -body {..bina
1560: 72 79 20 65 6e 63 6f 64 65 20 68 65 78 20 5b 3a  ry encode hex [:
1570: 3a 74 6c 73 3a 3a 70 62 6b 64 66 32 20 2d 64 69  :tls::pbkdf2 -di
1580: 67 65 73 74 20 24 64 69 67 65 73 74 20 2d 70 61  gest $digest -pa
1590: 73 73 77 6f 72 64 20 24 50 20 2d 73 61 6c 74 20  ssword $P -salt 
15a0: 24 53 20 2d 69 74 65 72 61 74 69 6f 6e 73 20 34  $S -iterations 4
15b0: 30 39 36 20 2d 73 69 7a 65 20 24 64 6b 4c 65 6e  096 -size $dkLen
15c0: 5d 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c 74 20  ].    } -result 
15d0: 7b 34 62 30 30 37 39 30 31 62 37 36 35 34 38 39  {4b007901b765489
15e0: 61 62 65 61 64 34 39 64 39 32 36 66 37 32 31 64  abead49d926f721d
15f0: 30 36 35 61 34 32 39 63 31 7d 0a 0a 74 65 73 74  065a429c1}..test
1600: 20 50 42 4b 44 46 32 5f 52 46 43 5f 36 30 37 30   PBKDF2_RFC_6070
1610: 2d 34 2e 34 20 7b 54 65 73 74 20 43 61 73 65 20  -4.4 {Test Case 
1620: 34 7d 20 2d 62 6f 64 79 20 7b 0a 09 62 69 6e 61  4} -body {..bina
1630: 72 79 20 65 6e 63 6f 64 65 20 68 65 78 20 5b 3a  ry encode hex [:
1640: 3a 74 6c 73 3a 3a 70 62 6b 64 66 32 20 2d 64 69  :tls::pbkdf2 -di
1650: 67 65 73 74 20 24 64 69 67 65 73 74 20 2d 70 61  gest $digest -pa
1660: 73 73 77 6f 72 64 20 24 50 20 2d 73 61 6c 74 20  ssword $P -salt 
1670: 24 53 20 2d 69 74 65 72 61 74 69 6f 6e 73 20 31  $S -iterations 1
1680: 36 37 37 37 32 31 36 20 2d 73 69 7a 65 20 24 64  6777216 -size $d
1690: 6b 4c 65 6e 5d 0a 20 20 20 20 7d 20 2d 72 65 73  kLen].    } -res
16a0: 75 6c 74 20 7b 65 65 66 65 33 64 36 31 63 64 34  ult {eefe3d61cd4
16b0: 64 61 34 65 34 65 39 39 34 35 62 33 64 36 62 61  da4e4e9945b3d6ba
16c0: 32 31 35 38 63 32 36 33 34 65 39 38 34 7d 0a 0a  2158c2634e984}..
16d0: 73 65 74 20 64 69 67 65 73 74 20 73 68 61 31 0a  set digest sha1.
16e0: 73 65 74 20 6b 65 79 20 5b 62 69 6e 61 72 79 20  set key [binary 
16f0: 64 65 63 6f 64 65 20 68 65 78 20 30 62 30 62 30  decode hex 0b0b0
1700: 62 30 62 30 62 30 62 30 62 30 62 30 62 30 62 30  b0b0b0b0b0b0b0b0
1710: 62 5d 0a 73 65 74 20 73 61 6c 74 20 5b 62 69 6e  b].set salt [bin
1720: 61 72 79 20 64 65 63 6f 64 65 20 68 65 78 20 30  ary decode hex 0
1730: 30 30 31 30 32 30 33 30 34 30 35 30 36 30 37 30  0010203040506070
1740: 38 30 39 30 61 30 62 30 63 5d 0a 73 65 74 20 69  8090a0b0c].set i
1750: 6e 66 6f 20 5b 62 69 6e 61 72 79 20 64 65 63 6f  nfo [binary deco
1760: 64 65 20 68 65 78 20 66 30 66 31 66 32 66 33 66  de hex f0f1f2f3f
1770: 34 66 35 66 36 66 37 66 38 66 39 5d 0a 73 65 74  4f5f6f7f8f9].set
1780: 20 73 69 7a 65 20 34 32 0a 0a 23 20 48 4b 44 46   size 42..# HKDF
1790: 20 52 46 43 20 36 32 33 34 0a 0a 0a 74 65 73 74   RFC 6234...test
17a0: 20 48 4b 44 46 5f 52 46 43 5f 36 32 33 34 2d 35   HKDF_RFC_6234-5
17b0: 2e 31 20 7b 41 2e 34 2e 20 20 54 65 73 74 20 43  .1 {A.4.  Test C
17c0: 61 73 65 20 34 2c 20 42 61 73 69 63 20 74 65 73  ase 4, Basic tes
17d0: 74 20 63 61 73 65 20 77 69 74 68 20 53 48 41 2d  t case with SHA-
17e0: 31 7d 20 2d 62 6f 64 79 20 7b 0a 09 62 69 6e 61  1} -body {..bina
17f0: 72 79 20 65 6e 63 6f 64 65 20 68 65 78 20 5b 3a  ry encode hex [:
1800: 3a 74 6c 73 3a 3a 68 6b 64 66 20 2d 64 69 67 65  :tls::hkdf -dige
1810: 73 74 20 24 64 69 67 65 73 74 20 2d 70 61 73 73  st $digest -pass
1820: 77 6f 72 64 20 24 6b 65 79 20 2d 73 61 6c 74 20  word $key -salt 
1830: 24 73 61 6c 74 20 2d 69 6e 66 6f 20 24 69 6e 66  $salt -info $inf
1840: 6f 20 2d 73 69 7a 65 20 24 73 69 7a 65 5d 0a 20  o -size $size]. 
1850: 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 7b 30 38     } -result {08
1860: 35 61 30 31 65 61 31 62 31 30 66 33 36 39 33 33  5a01ea1b10f36933
1870: 30 36 38 62 35 36 65 66 61 35 61 64 38 31 61 34  068b56efa5ad81a4
1880: 66 31 34 62 38 32 32 66 35 62 30 39 31 35 36 38  f14b822f5b091568
1890: 61 39 63 64 64 34 66 31 35 35 66 64 61 32 63 32  a9cdd4f155fda2c2
18a0: 32 65 34 32 32 34 37 38 64 33 30 35 66 33 66 38  2e422478d305f3f8
18b0: 39 36 7d 0a 0a 73 65 74 20 6b 65 79 20 5b 62 69  96}..set key [bi
18c0: 6e 61 72 79 20 64 65 63 6f 64 65 20 68 65 78 20  nary decode hex 
18d0: 30 30 30 31 30 32 30 33 30 34 30 35 30 36 30 37  0001020304050607
18e0: 30 38 30 39 30 61 30 62 30 63 30 64 30 65 30 66  08090a0b0c0d0e0f
18f0: 31 30 31 31 31 32 31 33 31 34 31 35 31 36 31 37  1011121314151617
1900: 31 38 31 39 31 61 31 62 31 63 31 64 31 65 31 66  18191a1b1c1d1e1f
1910: 32 30 32 31 32 32 32 33 32 34 32 35 32 36 32 37  2021222324252627
1920: 32 38 32 39 32 61 32 62 32 63 32 64 32 65 32 66  28292a2b2c2d2e2f
1930: 33 30 33 31 33 32 33 33 33 34 33 35 33 36 33 37  3031323334353637
1940: 33 38 33 39 33 61 33 62 33 63 33 64 33 65 33 66  38393a3b3c3d3e3f
1950: 34 30 34 31 34 32 34 33 34 34 34 35 34 36 34 37  4041424344454647
1960: 34 38 34 39 34 61 34 62 34 63 34 64 34 65 34 66  48494a4b4c4d4e4f
1970: 5d 0a 73 65 74 20 73 61 6c 74 20 5b 62 69 6e 61  ].set salt [bina
1980: 72 79 20 64 65 63 6f 64 65 20 68 65 78 20 36 30  ry decode hex 60
1990: 36 31 36 32 36 33 36 34 36 35 36 36 36 37 36 38  6162636465666768
19a0: 36 39 36 61 36 62 36 63 36 64 36 65 36 66 37 30  696a6b6c6d6e6f70
19b0: 37 31 37 32 37 33 37 34 37 35 37 36 37 37 37 38  7172737475767778
19c0: 37 39 37 61 37 62 37 63 37 64 37 65 37 66 38 30  797a7b7c7d7e7f80
19d0: 38 31 38 32 38 33 38 34 38 35 38 36 38 37 38 38  8182838485868788
19e0: 38 39 38 61 38 62 38 63 38 64 38 65 38 66 39 30  898a8b8c8d8e8f90
19f0: 39 31 39 32 39 33 39 34 39 35 39 36 39 37 39 38  9192939495969798
1a00: 39 39 39 61 39 62 39 63 39 64 39 65 39 66 61 30  999a9b9c9d9e9fa0
1a10: 61 31 61 32 61 33 61 34 61 35 61 36 61 37 61 38  a1a2a3a4a5a6a7a8
1a20: 61 39 61 61 61 62 61 63 61 64 61 65 61 66 5d 0a  a9aaabacadaeaf].
1a30: 73 65 74 20 69 6e 66 6f 20 5b 62 69 6e 61 72 79  set info [binary
1a40: 20 64 65 63 6f 64 65 20 68 65 78 20 62 30 62 31   decode hex b0b1
1a50: 62 32 62 33 62 34 62 35 62 36 62 37 62 38 62 39  b2b3b4b5b6b7b8b9
1a60: 62 61 62 62 62 63 62 64 62 65 62 66 63 30 63 31  babbbcbdbebfc0c1
1a70: 63 32 63 33 63 34 63 35 63 36 63 37 63 38 63 39  c2c3c4c5c6c7c8c9
1a80: 63 61 63 62 63 63 63 64 63 65 63 66 64 30 64 31  cacbcccdcecfd0d1
1a90: 64 32 64 33 64 34 64 35 64 36 64 37 64 38 64 39  d2d3d4d5d6d7d8d9
1aa0: 64 61 64 62 64 63 64 64 64 65 64 66 65 30 65 31  dadbdcdddedfe0e1
1ab0: 65 32 65 33 65 34 65 35 65 36 65 37 65 38 65 39  e2e3e4e5e6e7e8e9
1ac0: 65 61 65 62 65 63 65 64 65 65 65 66 66 30 66 31  eaebecedeeeff0f1
1ad0: 66 32 66 33 66 34 66 35 66 36 66 37 66 38 66 39  f2f3f4f5f6f7f8f9
1ae0: 66 61 66 62 66 63 66 64 66 65 66 66 5d 0a 73 65  fafbfcfdfeff].se
1af0: 74 20 73 69 7a 65 20 38 32 0a 0a 0a 74 65 73 74  t size 82...test
1b00: 20 48 4b 44 46 5f 52 46 43 5f 36 32 33 34 2d 35   HKDF_RFC_6234-5
1b10: 2e 32 20 7b 41 2e 35 2e 20 20 54 65 73 74 20 43  .2 {A.5.  Test C
1b20: 61 73 65 20 35 2c 20 54 65 73 74 20 77 69 74 68  ase 5, Test with
1b30: 20 53 48 41 2d 31 20 61 6e 64 20 6c 6f 6e 67 65   SHA-1 and longe
1b40: 72 20 69 6e 70 75 74 73 2f 6f 75 74 70 75 74 73  r inputs/outputs
1b50: 7d 20 2d 62 6f 64 79 20 7b 0a 09 62 69 6e 61 72  } -body {..binar
1b60: 79 20 65 6e 63 6f 64 65 20 68 65 78 20 5b 3a 3a  y encode hex [::
1b70: 74 6c 73 3a 3a 68 6b 64 66 20 2d 64 69 67 65 73  tls::hkdf -diges
1b80: 74 20 24 64 69 67 65 73 74 20 2d 70 61 73 73 77  t $digest -passw
1b90: 6f 72 64 20 24 6b 65 79 20 2d 73 61 6c 74 20 24  ord $key -salt $
1ba0: 73 61 6c 74 20 2d 69 6e 66 6f 20 24 69 6e 66 6f  salt -info $info
1bb0: 20 2d 73 69 7a 65 20 24 73 69 7a 65 5d 0a 20 20   -size $size].  
1bc0: 20 20 7d 20 2d 72 65 73 75 6c 74 20 7b 30 62 64    } -result {0bd
1bd0: 37 37 30 61 37 34 64 31 31 36 30 66 37 63 39 66  770a74d1160f7c9f
1be0: 31 32 63 64 35 39 31 32 61 30 36 65 62 66 66 36  12cd5912a06ebff6
1bf0: 61 64 63 61 65 38 39 39 64 39 32 31 39 31 66 65  adcae899d92191fe
1c00: 34 33 30 35 36 37 33 62 61 32 66 66 65 38 66 61  4305673ba2ffe8fa
1c10: 33 66 31 61 34 65 35 61 64 37 39 66 33 66 33 33  3f1a4e5ad79f3f33
1c20: 34 62 33 62 32 30 32 62 32 31 37 33 63 34 38 36  4b3b202b2173c486
1c30: 65 61 33 37 63 65 33 64 33 39 37 65 64 30 33 34  ea37ce3d397ed034
1c40: 63 37 66 39 64 66 65 62 31 35 63 35 65 39 32 37  c7f9dfeb15c5e927
1c50: 33 33 36 64 30 34 34 31 66 34 63 34 33 30 30 65  336d0441f4c4300e
1c60: 32 63 66 66 30 64 30 39 30 30 62 35 32 64 33 62  2cff0d0900b52d3b
1c70: 34 7d 0a 0a 73 65 74 20 6b 65 79 20 5b 62 69 6e  4}..set key [bin
1c80: 61 72 79 20 64 65 63 6f 64 65 20 68 65 78 20 30  ary decode hex 0
1c90: 62 30 62 30 62 30 62 30 62 30 62 30 62 30 62 30  b0b0b0b0b0b0b0b0
1ca0: 62 30 62 30 62 30 62 30 62 30 62 30 62 30 62 30  b0b0b0b0b0b0b0b0
1cb0: 62 30 62 30 62 30 62 30 62 30 62 5d 0a 73 65 74  b0b0b0b0b0b].set
1cc0: 20 73 61 6c 74 20 22 22 0a 73 65 74 20 69 6e 66   salt "".set inf
1cd0: 6f 20 22 22 0a 73 65 74 20 73 69 7a 65 20 34 32  o "".set size 42
1ce0: 0a 0a 0a 74 65 73 74 20 48 4b 44 46 5f 52 46 43  ...test HKDF_RFC
1cf0: 5f 36 32 33 34 2d 35 2e 33 20 7b 41 2e 36 2e 20  _6234-5.3 {A.6. 
1d00: 20 54 65 73 74 20 43 61 73 65 20 36 2c 20 54 65   Test Case 6, Te
1d10: 73 74 20 77 69 74 68 20 53 48 41 2d 31 20 61 6e  st with SHA-1 an
1d20: 64 20 7a 65 72 6f 2d 6c 65 6e 67 74 68 20 73 61  d zero-length sa
1d30: 6c 74 2f 69 6e 66 6f 7d 20 2d 62 6f 64 79 20 7b  lt/info} -body {
1d40: 0a 09 62 69 6e 61 72 79 20 65 6e 63 6f 64 65 20  ..binary encode 
1d50: 68 65 78 20 5b 3a 3a 74 6c 73 3a 3a 68 6b 64 66  hex [::tls::hkdf
1d60: 20 2d 64 69 67 65 73 74 20 24 64 69 67 65 73 74   -digest $digest
1d70: 20 2d 70 61 73 73 77 6f 72 64 20 24 6b 65 79 20   -password $key 
1d80: 2d 73 61 6c 74 20 24 73 61 6c 74 20 2d 69 6e 66  -salt $salt -inf
1d90: 6f 20 24 69 6e 66 6f 20 2d 73 69 7a 65 20 24 73  o $info -size $s
1da0: 69 7a 65 5d 0a 20 20 20 20 7d 20 2d 72 65 73 75  ize].    } -resu
1db0: 6c 74 20 7b 30 61 63 31 61 66 37 30 30 32 62 33  lt {0ac1af7002b3
1dc0: 64 37 36 31 64 31 65 35 35 32 39 38 64 61 39 64  d761d1e55298da9d
1dd0: 30 35 30 36 62 39 61 65 35 32 30 35 37 32 32 30  0506b9ae52057220
1de0: 61 33 30 36 65 30 37 62 36 62 38 37 65 38 64 66  a306e07b6b87e8df
1df0: 32 31 64 30 65 61 30 30 30 33 33 64 65 30 33 39  21d0ea00033de039
1e00: 38 34 64 33 34 39 31 38 7d 0a 0a 73 65 74 20 6b  84d34918}..set k
1e10: 65 79 20 5b 62 69 6e 61 72 79 20 64 65 63 6f 64  ey [binary decod
1e20: 65 20 68 65 78 20 30 63 30 63 30 63 30 63 30 63  e hex 0c0c0c0c0c
1e30: 30 63 30 63 30 63 30 63 30 63 30 63 30 63 30 63  0c0c0c0c0c0c0c0c
1e40: 30 63 30 63 30 63 30 63 30 63 30 63 30 63 30 63  0c0c0c0c0c0c0c0c
1e50: 30 63 5d 0a 73 65 74 20 73 61 6c 74 20 22 22 0a  0c].set salt "".
1e60: 73 65 74 20 69 6e 66 6f 20 22 22 0a 73 65 74 20  set info "".set 
1e70: 73 69 7a 65 20 34 32 0a 0a 0a 74 65 73 74 20 48  size 42...test H
1e80: 4b 44 46 5f 52 46 43 5f 36 32 33 34 2d 35 2e 34  KDF_RFC_6234-5.4
1e90: 20 7b 41 2e 37 2e 20 20 54 65 73 74 20 43 61 73   {A.7.  Test Cas
1ea0: 65 20 37 2c 20 54 65 73 74 20 77 69 74 68 20 53  e 7, Test with S
1eb0: 48 41 2d 31 2c 20 73 61 6c 74 20 6e 6f 74 20 70  HA-1, salt not p
1ec0: 72 6f 76 69 64 65 64 20 28 64 65 66 61 75 6c 74  rovided (default
1ed0: 73 20 74 6f 20 48 61 73 68 4c 65 6e 20 7a 65 72  s to HashLen zer
1ee0: 6f 20 6f 63 74 65 74 73 29 2c 20 7a 65 72 6f 2d  o octets), zero-
1ef0: 6c 65 6e 67 74 68 20 69 6e 66 6f 7d 20 2d 62 6f  length info} -bo
1f00: 64 79 20 7b 0a 09 62 69 6e 61 72 79 20 65 6e 63  dy {..binary enc
1f10: 6f 64 65 20 68 65 78 20 5b 3a 3a 74 6c 73 3a 3a  ode hex [::tls::
1f20: 68 6b 64 66 20 2d 64 69 67 65 73 74 20 24 64 69  hkdf -digest $di
1f30: 67 65 73 74 20 2d 70 61 73 73 77 6f 72 64 20 24  gest -password $
1f40: 6b 65 79 20 2d 73 61 6c 74 20 24 73 61 6c 74 20  key -salt $salt 
1f50: 2d 69 6e 66 6f 20 24 69 6e 66 6f 20 2d 73 69 7a  -info $info -siz
1f60: 65 20 24 73 69 7a 65 5d 0a 20 20 20 20 7d 20 2d  e $size].    } -
1f70: 72 65 73 75 6c 74 20 7b 32 63 39 31 31 31 37 32  result {2c911172
1f80: 30 34 64 37 34 35 66 33 35 30 30 64 36 33 36 61  04d745f3500d636a
1f90: 36 32 66 36 34 66 30 61 62 33 62 61 65 35 34 38  62f64f0ab3bae548
1fa0: 61 61 35 33 64 34 32 33 62 30 64 31 66 32 37 65  aa53d423b0d1f27e
1fb0: 62 62 61 36 66 35 65 35 36 37 33 61 30 38 31 64  bba6f5e5673a081d
1fc0: 37 30 63 63 65 37 61 63 66 63 34 38 7d 0a 0a 23  70cce7acfc48}..#
1fd0: 20 53 63 72 79 70 74 20 52 46 43 20 37 39 31 34   Scrypt RFC 7914
1fe0: 0a 0a 0a 74 65 73 74 20 53 63 72 79 70 74 5f 52  ...test Scrypt_R
1ff0: 46 43 5f 37 39 31 34 2d 36 2e 31 20 7b 54 65 73  FC_7914-6.1 {Tes
2000: 74 20 43 61 73 65 20 31 7d 20 2d 62 6f 64 79 20  t Case 1} -body 
2010: 7b 0a 09 62 69 6e 61 72 79 20 65 6e 63 6f 64 65  {..binary encode
2020: 20 68 65 78 20 5b 3a 3a 74 6c 73 3a 3a 73 63 72   hex [::tls::scr
2030: 79 70 74 20 2d 70 61 73 73 77 6f 72 64 20 22 22  ypt -password ""
2040: 20 2d 73 61 6c 74 20 22 22 20 2d 4e 20 31 36 20   -salt "" -N 16 
2050: 2d 72 20 31 20 2d 70 20 31 20 2d 73 69 7a 65 20  -r 1 -p 1 -size 
2060: 36 34 5d 0a 20 20 20 20 7d 20 2d 72 65 73 75 6c  64].    } -resul
2070: 74 20 7b 37 37 64 36 35 37 36 32 33 38 36 35 37  t {77d6576238657
2080: 62 32 30 33 62 31 39 63 61 34 32 63 31 38 61 30  b203b19ca42c18a0
2090: 34 39 37 66 31 36 62 34 38 34 34 65 33 30 37 34  497f16b4844e3074
20a0: 61 65 38 64 66 64 66 66 61 33 66 65 64 65 32 31  ae8dfdffa3fede21
20b0: 34 34 32 66 63 64 30 30 36 39 64 65 64 30 39 34  442fcd0069ded094
20c0: 38 66 38 33 32 36 61 37 35 33 61 30 66 63 38 31  8f8326a753a0fc81
20d0: 66 31 37 65 38 64 33 65 30 66 62 32 65 30 64 33  f17e8d3e0fb2e0d3
20e0: 36 32 38 63 66 33 35 65 32 30 63 33 38 64 31 38  628cf35e20c38d18
20f0: 39 30 36 7d 0a 0a 74 65 73 74 20 53 63 72 79 70  906}..test Scryp
2100: 74 5f 52 46 43 5f 37 39 31 34 2d 36 2e 32 20 7b  t_RFC_7914-6.2 {
2110: 54 65 73 74 20 43 61 73 65 20 32 7d 20 2d 62 6f  Test Case 2} -bo
2120: 64 79 20 7b 0a 09 62 69 6e 61 72 79 20 65 6e 63  dy {..binary enc
2130: 6f 64 65 20 68 65 78 20 5b 3a 3a 74 6c 73 3a 3a  ode hex [::tls::
2140: 73 63 72 79 70 74 20 2d 70 61 73 73 77 6f 72 64  scrypt -password
2150: 20 22 70 61 73 73 77 6f 72 64 22 20 2d 73 61 6c   "password" -sal
2160: 74 20 22 4e 61 43 6c 22 20 2d 4e 20 31 30 32 34  t "NaCl" -N 1024
2170: 20 2d 72 20 38 20 2d 70 20 31 36 20 2d 73 69 7a   -r 8 -p 16 -siz
2180: 65 20 36 34 5d 0a 20 20 20 20 7d 20 2d 72 65 73  e 64].    } -res
2190: 75 6c 74 20 7b 66 64 62 61 62 65 31 63 39 64 33  ult {fdbabe1c9d3
21a0: 34 37 32 30 30 37 38 35 36 65 37 31 39 30 64 30  472007856e7190d0
21b0: 31 65 39 66 65 37 63 36 61 64 37 63 62 63 38 32  1e9fe7c6ad7cbc82
21c0: 33 37 38 33 30 65 37 37 33 37 36 36 33 34 62 33  37830e77376634b3
21d0: 37 33 31 36 32 32 65 61 66 33 30 64 39 32 65 32  731622eaf30d92e2
21e0: 32 61 33 38 38 36 66 66 31 30 39 32 37 39 64 39  2a3886ff109279d9
21f0: 38 33 30 64 61 63 37 32 37 61 66 62 39 34 61 38  830dac727afb94a8
2200: 33 65 65 36 64 38 33 36 30 63 62 64 66 61 32 63  3ee6d8360cbdfa2c
2210: 63 30 36 34 30 7d 0a 0a 74 65 73 74 20 53 63 72  c0640}..test Scr
2220: 79 70 74 5f 52 46 43 5f 37 39 31 34 2d 36 2e 33  ypt_RFC_7914-6.3
2230: 20 7b 54 65 73 74 20 43 61 73 65 20 33 7d 20 2d   {Test Case 3} -
2240: 62 6f 64 79 20 7b 0a 09 62 69 6e 61 72 79 20 65  body {..binary e
2250: 6e 63 6f 64 65 20 68 65 78 20 5b 3a 3a 74 6c 73  ncode hex [::tls
2260: 3a 3a 73 63 72 79 70 74 20 2d 70 61 73 73 77 6f  ::scrypt -passwo
2270: 72 64 20 22 70 6c 65 61 73 65 6c 65 74 6d 65 69  rd "pleaseletmei
2280: 6e 22 20 2d 73 61 6c 74 20 22 53 6f 64 69 75 6d  n" -salt "Sodium
2290: 43 68 6c 6f 72 69 64 65 22 20 2d 4e 20 31 36 33  Chloride" -N 163
22a0: 38 34 20 2d 72 20 38 20 2d 70 20 31 20 2d 73 69  84 -r 8 -p 1 -si
22b0: 7a 65 20 36 34 5d 0a 20 20 20 20 7d 20 2d 72 65  ze 64].    } -re
22c0: 73 75 6c 74 20 7b 37 30 32 33 62 64 63 62 33 61  sult {7023bdcb3a
22d0: 66 64 37 33 34 38 34 36 31 63 30 36 63 64 38 31  fd7348461c06cd81
22e0: 66 64 33 38 65 62 66 64 61 38 66 62 62 61 39 30  fd38ebfda8fbba90
22f0: 34 66 38 65 33 65 61 39 62 35 34 33 66 36 35 34  4f8e3ea9b543f654
2300: 35 64 61 31 66 32 64 35 34 33 32 39 35 35 36 31  5da1f2d543295561
2310: 33 66 30 66 63 66 36 32 64 34 39 37 30 35 32 34  3f0fcf62d4970524
2320: 32 61 39 61 66 39 65 36 31 65 38 35 64 63 30 64  2a9af9e61e85dc0d
2330: 36 35 31 65 34 30 64 66 63 66 30 31 37 62 34 35  651e40dfcf017b45
2340: 35 37 35 38 38 37 7d 0a 0a 74 65 73 74 20 53 63  575887}..test Sc
2350: 72 79 70 74 5f 52 46 43 5f 37 39 31 34 2d 36 2e  rypt_RFC_7914-6.
2360: 34 20 7b 54 65 73 74 20 43 61 73 65 20 34 7d 20  4 {Test Case 4} 
2370: 2d 62 6f 64 79 20 7b 0a 09 62 69 6e 61 72 79 20  -body {..binary 
2380: 65 6e 63 6f 64 65 20 68 65 78 20 5b 3a 3a 74 6c  encode hex [::tl
2390: 73 3a 3a 73 63 72 79 70 74 20 2d 70 61 73 73 77  s::scrypt -passw
23a0: 6f 72 64 20 22 70 6c 65 61 73 65 6c 65 74 6d 65  ord "pleaseletme
23b0: 69 6e 22 20 2d 73 61 6c 74 20 22 53 6f 64 69 75  in" -salt "Sodiu
23c0: 6d 43 68 6c 6f 72 69 64 65 22 20 2d 4e 20 31 30  mChloride" -N 10
23d0: 34 38 35 37 36 20 2d 72 20 38 20 2d 70 20 31 20  48576 -r 8 -p 1 
23e0: 2d 73 69 7a 65 20 36 34 5d 0a 20 20 20 20 7d 20  -size 64].    } 
23f0: 2d 72 65 73 75 6c 74 20 7b 32 31 30 31 63 62 39  -result {2101cb9
2400: 62 36 61 35 31 31 61 61 65 61 64 64 62 62 65 30  b6a511aaeaddbbe0
2410: 39 63 66 37 30 66 38 38 31 65 63 35 36 38 64 35  9cf70f881ec568d5
2420: 37 34 61 32 66 66 64 34 64 61 62 65 35 65 65 39  74a2ffd4dabe5ee9
2430: 38 32 30 61 64 61 61 34 37 38 65 35 36 66 64 38  820adaa478e56fd8
2440: 66 34 62 61 35 64 30 39 66 66 61 31 63 36 64 39  f4ba5d09ffa1c6d9
2450: 32 37 63 34 30 66 34 63 33 33 37 33 30 34 30 34  27c40f4c33730404
2460: 39 65 38 61 39 35 32 66 62 63 62 66 34 35 63 36  9e8a952fbcbf45c6
2470: 66 61 37 37 61 34 31 61 34 7d 0a 0a 23 20 43 6c  fa77a41a4}..# Cl
2480: 65 61 6e 75 70 0a 3a 3a 74 63 6c 74 65 73 74 3a  eanup.::tcltest:
2490: 3a 63 6c 65 61 6e 75 70 54 65 73 74 73 0a 72 65  :cleanupTests.re
24a0: 74 75 72 6e 0a                                   turn.