Tcl Library Source Code

Hex Artifact Content
Login

Artifact 6b921a56008cdc7e033dbc907456f2b976fad742:


0000: 23 20 2d 2a 2d 20 74 63 6c 20 2d 2a 2d 0a 23 20  # -*- tcl -*-.# 
0010: 54 63 6c 20 42 65 6e 63 68 6d 61 72 6b 20 46 69  Tcl Benchmark Fi
0020: 6c 65 0a 23 0a 23 20 54 68 69 73 20 66 69 6c 65  le.#.# This file
0030: 20 63 6f 6e 74 61 69 6e 73 20 61 20 6e 75 6d 62   contains a numb
0040: 65 72 20 6f 66 20 62 65 6e 63 68 6d 61 72 6b 73  er of benchmarks
0050: 20 66 6f 72 20 74 68 65 20 27 62 6c 6f 77 66 69   for the 'blowfi
0060: 73 68 27 20 6d 6f 64 75 6c 65 2e 0a 23 20 54 68  sh' module..# Th
0070: 69 73 20 61 6c 6c 6f 77 20 64 65 76 65 6c 6f 70  is allow develop
0080: 65 72 73 20 74 6f 20 6d 6f 6e 69 74 6f 72 2f 67  ers to monitor/g
0090: 61 75 67 65 2f 74 72 61 63 6b 20 70 61 63 6b 61  auge/track packa
00a0: 67 65 20 70 65 72 66 6f 72 6d 61 6e 63 65 2e 0a  ge performance..
00b0: 23 0a 23 20 28 63 29 20 32 30 30 35 20 41 6e 64  #.# (c) 2005 And
00c0: 72 65 61 73 20 4b 75 70 72 69 65 73 20 3c 61 6e  reas Kupries <an
00d0: 64 72 65 61 73 5f 6b 75 70 72 69 65 73 40 75 73  dreas_kupries@us
00e0: 65 72 73 2e 73 6f 75 72 63 65 66 6f 72 67 65 2e  ers.sourceforge.
00f0: 6e 65 74 3e 0a 0a 23 20 57 65 20 6e 65 65 64 20  net>..# We need 
0100: 61 74 20 6c 65 61 73 74 20 76 65 72 73 69 6f 6e  at least version
0110: 20 38 2e 32 20 66 6f 72 20 74 68 65 20 70 61 63   8.2 for the pac
0120: 6b 61 67 65 20 61 6e 64 20 74 68 75 73 20 74 68  kage and thus th
0130: 65 0a 23 20 62 65 6e 63 68 6d 61 72 6b 73 2e 0a  e.# benchmarks..
0140: 0a 69 66 20 7b 21 5b 70 61 63 6b 61 67 65 20 76  .if {![package v
0150: 73 61 74 69 73 66 69 65 73 20 5b 70 61 63 6b 61  satisfies [packa
0160: 67 65 20 70 72 6f 76 69 64 65 20 54 63 6c 5d 20  ge provide Tcl] 
0170: 38 2e 32 5d 7d 20 7b 0a 20 20 20 20 72 65 74 75  8.2]} {.    retu
0180: 72 6e 0a 7d 0a 0a 23 20 23 23 23 20 23 23 23 20  rn.}..# ### ### 
0190: 23 23 23 20 23 23 23 23 23 23 23 23 23 20 23 23  ### ######### ##
01a0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
01b0: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23  # ##############
01c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23  #############.##
01d0: 20 53 65 74 74 69 6e 67 20 75 70 20 74 68 65 20   Setting up the 
01e0: 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 2e 2e 2e 0a  environment ....
01f0: 0a 70 61 63 6b 61 67 65 20 66 6f 72 67 65 74 20  .package forget 
0200: 62 6c 6f 77 66 69 73 68 0a 63 61 74 63 68 20 7b  blowfish.catch {
0210: 6e 61 6d 65 73 70 61 63 65 20 64 65 6c 65 74 65  namespace delete
0220: 20 3a 3a 62 6c 6f 77 66 69 73 68 7d 0a 73 6f 75   ::blowfish}.sou
0230: 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b  rce [file join [
0240: 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 69 6e  file dirname [in
0250: 66 6f 20 73 63 72 69 70 74 5d 5d 20 62 6c 6f 77  fo script]] blow
0260: 66 69 73 68 2e 74 63 6c 5d 0a 0a 73 65 74 20 69  fish.tcl]..set i
0270: 20 5b 62 69 6e 61 72 79 20 66 6f 72 6d 61 74 20   [binary format 
0280: 48 2a 20 30 30 30 30 30 30 30 30 30 30 30 30 30  H* 0000000000000
0290: 30 30 5d 0a 73 65 74 20 70 20 5b 62 69 6e 61 72  00].set p [binar
02a0: 79 20 66 6f 72 6d 61 74 20 48 2a 20 30 30 31 31  y format H* 0011
02b0: 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 39  2233445566778899
02c0: 61 61 62 62 63 63 64 64 65 65 66 66 5d 0a 0a 73  aabbccddeeff]..s
02d0: 65 74 20 6b 20 5b 62 69 6e 61 72 79 20 66 6f 72  et k [binary for
02e0: 6d 61 74 20 48 2a 20 30 30 30 31 30 32 30 33 30  mat H* 000102030
02f0: 34 30 35 30 36 30 5d 0a 73 65 74 20 63 20 5b 62  405060].set c [b
0300: 69 6e 61 72 79 20 66 6f 72 6d 61 74 20 48 2a 20  inary format H* 
0310: 36 39 63 34 65 30 64 38 36 61 37 62 30 34 33 30  69c4e0d86a7b0430
0320: 64 38 63 64 62 37 38 30 37 30 62 34 63 35 35 61  d8cdb78070b4c55a
0330: 5d 0a 0a 23 20 23 23 23 20 23 23 23 20 23 23 23  ]..# ### ### ###
0340: 20 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23   ######### #####
0350: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 20 23  #### ######### #
0360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0370: 23 23 23 23 23 23 23 23 23 23 0a 23 23 20 42 65  ##########.## Be
0380: 6e 63 68 6d 61 72 6b 73 2e 0a 0a 62 65 6e 63 68  nchmarks...bench
0390: 20 2d 64 65 73 63 20 22 42 4c 4f 57 46 49 53 48   -desc "BLOWFISH
03a0: 20 45 43 42 20 65 6e 63 72 79 70 74 69 6f 6e 22   ECB encryption"
03b0: 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 6c 6f   -body {.    blo
03c0: 77 66 69 73 68 3a 3a 62 6c 6f 77 66 69 73 68 20  wfish::blowfish 
03d0: 2d 6d 6f 64 65 20 65 63 62 20 2d 64 69 72 20 65  -mode ecb -dir e
03e0: 6e 63 20 2d 6b 65 79 20 24 6b 20 2d 69 76 20 24  nc -key $k -iv $
03f0: 69 20 24 70 0a 7d 0a 0a 62 65 6e 63 68 20 2d 64  i $p.}..bench -d
0400: 65 73 63 20 22 42 4c 4f 57 46 49 53 48 20 45 43  esc "BLOWFISH EC
0410: 42 20 64 65 63 72 79 70 74 69 6f 6e 22 20 2d 62  B decryption" -b
0420: 6f 64 79 20 7b 0a 20 20 20 20 62 6c 6f 77 66 69  ody {.    blowfi
0430: 73 68 3a 3a 62 6c 6f 77 66 69 73 68 20 2d 6d 6f  sh::blowfish -mo
0440: 64 65 20 65 63 62 20 2d 64 69 72 20 64 65 63 20  de ecb -dir dec 
0450: 2d 6b 65 79 20 24 6b 20 2d 69 76 20 24 69 20 24  -key $k -iv $i $
0460: 63 0a 7d 0a 0a 62 65 6e 63 68 20 2d 64 65 73 63  c.}..bench -desc
0470: 20 22 42 4c 4f 57 46 49 53 48 20 45 43 42 20 65   "BLOWFISH ECB e
0480: 6e 63 72 79 70 74 69 6f 6e 20 63 6f 72 65 22 20  ncryption core" 
0490: 2d 70 72 65 20 7b 0a 20 20 20 20 73 65 74 20 6b  -pre {.    set k
04a0: 65 79 20 5b 62 6c 6f 77 66 69 73 68 3a 3a 49 6e  ey [blowfish::In
04b0: 69 74 20 65 63 62 20 24 6b 20 24 69 5d 0a 7d 20  it ecb $k $i].} 
04c0: 2d 62 6f 64 79 20 7b 0a 20 20 20 20 62 6c 6f 77  -body {.    blow
04d0: 66 69 73 68 3a 3a 45 6e 63 72 79 70 74 20 24 6b  fish::Encrypt $k
04e0: 65 79 20 24 70 0a 7d 20 2d 70 6f 73 74 20 7b 0a  ey $p.} -post {.
04f0: 20 20 20 20 62 6c 6f 77 66 69 73 68 3a 3a 46 69      blowfish::Fi
0500: 6e 61 6c 20 24 6b 65 79 0a 7d 0a 0a 62 65 6e 63  nal $key.}..benc
0510: 68 20 2d 64 65 73 63 20 22 42 4c 4f 57 46 49 53  h -desc "BLOWFIS
0520: 48 20 45 43 42 20 64 65 63 72 79 70 74 69 6f 6e  H ECB decryption
0530: 20 63 6f 72 65 22 20 2d 70 72 65 20 7b 0a 20 20   core" -pre {.  
0540: 20 20 73 65 74 20 6b 65 79 20 5b 62 6c 6f 77 66    set key [blowf
0550: 69 73 68 3a 3a 49 6e 69 74 20 65 63 62 20 24 6b  ish::Init ecb $k
0560: 20 24 69 5d 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20   $i].} -body {. 
0570: 20 20 20 62 6c 6f 77 66 69 73 68 3a 3a 44 65 63     blowfish::Dec
0580: 72 79 70 74 20 24 6b 65 79 20 24 63 0a 7d 20 2d  rypt $key $c.} -
0590: 70 6f 73 74 20 7b 0a 20 20 20 20 62 6c 6f 77 66  post {.    blowf
05a0: 69 73 68 3a 3a 46 69 6e 61 6c 20 24 6b 65 79 0a  ish::Final $key.
05b0: 7d 0a 0a 62 65 6e 63 68 20 2d 64 65 73 63 20 22  }..bench -desc "
05c0: 42 4c 4f 57 46 49 53 48 20 45 43 42 20 6b 65 79  BLOWFISH ECB key
05d0: 73 63 68 65 64 75 6c 65 22 20 2d 62 6f 64 79 20  schedule" -body 
05e0: 7b 0a 20 20 20 20 62 6c 6f 77 66 69 73 68 3a 3a  {.    blowfish::
05f0: 46 69 6e 61 6c 20 5b 62 6c 6f 77 66 69 73 68 3a  Final [blowfish:
0600: 3a 49 6e 69 74 20 65 63 62 20 24 6b 20 24 69 5d  :Init ecb $k $i]
0610: 0a 7d 0a 0a 62 65 6e 63 68 20 2d 64 65 73 63 20  .}..bench -desc 
0620: 22 42 4c 4f 57 46 49 53 48 20 43 42 43 20 6b 65  "BLOWFISH CBC ke
0630: 79 73 63 68 65 64 75 6c 65 22 20 2d 62 6f 64 79  yschedule" -body
0640: 20 7b 0a 20 20 20 20 62 6c 6f 77 66 69 73 68 3a   {.    blowfish:
0650: 3a 46 69 6e 61 6c 20 5b 62 6c 6f 77 66 69 73 68  :Final [blowfish
0660: 3a 3a 49 6e 69 74 20 63 62 63 20 24 6b 20 24 69  ::Init cbc $k $i
0670: 5d 0a 7d 0a 0a 0a 23 20 23 23 23 20 23 23 23 20  ].}...# ### ### 
0680: 23 23 23 20 23 23 23 23 23 23 23 23 23 20 23 23  ### ######### ##
0690: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
06a0: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23  # ##############
06b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23  #############.##
06c0: 20 43 6f 6d 70 6c 65 74 65 0a                     Complete.