Hex Artifact Content

Artifact 525e0706c0fa997457cb14039fcfd37c955371de503b4934ab1adf8d3c42a05f:


0000: 23 21 2f 75 73 72 2f 62 69 6e 2f 65 6e 76 20 74  #!/usr/bin/env t
0010: 63 6c 73 68 0a 0a 23 20 43 6f 6d 6d 6f 6e 20 43  clsh..# Common C
0020: 6f 6e 73 74 72 61 69 6e 74 73 0a 70 61 63 6b 61  onstraints.packa
0030: 67 65 20 70 72 65 66 65 72 20 6c 61 74 65 73 74  ge prefer latest
0040: 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65  .package require
0050: 20 74 6c 73 0a 0a 23 20 53 75 70 70 6f 72 74 65   tls..# Supporte
0060: 64 20 70 72 6f 74 6f 63 6f 6c 73 0a 73 65 74 20  d protocols.set 
0070: 70 72 6f 74 6f 63 6f 6c 73 20 5b 6c 69 73 74 20  protocols [list 
0080: 73 73 6c 32 20 73 73 6c 33 20 74 6c 73 31 20 74  ssl2 ssl3 tls1 t
0090: 6c 73 31 2e 31 20 74 6c 73 31 2e 32 20 74 6c 73  ls1.1 tls1.2 tls
00a0: 31 2e 33 5d 0a 66 6f 72 65 61 63 68 20 70 72 6f  1.3].foreach pro
00b0: 74 6f 63 6f 6c 20 24 70 72 6f 74 6f 63 6f 6c 73  tocol $protocols
00c0: 20 7b 0a 20 20 20 20 3a 3a 74 63 6c 74 65 73 74   {.    ::tcltest
00d0: 3a 3a 74 65 73 74 43 6f 6e 73 74 72 61 69 6e 74  ::testConstraint
00e0: 20 24 70 72 6f 74 6f 63 6f 6c 20 30 0a 20 20 20   $protocol 0.   
00f0: 20 3a 3a 74 63 6c 74 65 73 74 3a 3a 74 65 73 74   ::tcltest::test
0100: 43 6f 6e 73 74 72 61 69 6e 74 20 21 24 70 72 6f  Constraint !$pro
0110: 74 6f 63 6f 6c 20 31 0a 7d 0a 0a 66 6f 72 65 61  tocol 1.}..forea
0120: 63 68 20 70 72 6f 74 6f 63 6f 6c 20 5b 3a 3a 74  ch protocol [::t
0130: 6c 73 3a 3a 70 72 6f 74 6f 63 6f 6c 73 5d 20 7b  ls::protocols] {
0140: 0a 20 20 20 20 3a 3a 74 63 6c 74 65 73 74 3a 3a  .    ::tcltest::
0150: 74 65 73 74 43 6f 6e 73 74 72 61 69 6e 74 20 24  testConstraint $
0160: 70 72 6f 74 6f 63 6f 6c 20 31 0a 20 20 20 20 3a  protocol 1.    :
0170: 3a 74 63 6c 74 65 73 74 3a 3a 74 65 73 74 43 6f  :tcltest::testCo
0180: 6e 73 74 72 61 69 6e 74 20 21 24 70 72 6f 74 6f  nstraint !$proto
0190: 63 6f 6c 20 30 0a 7d 0a 0a 23 20 49 73 20 4f 70  col 0.}..# Is Op
01a0: 65 6e 53 53 4c 0a 3a 3a 74 63 6c 74 65 73 74 3a  enSSL.::tcltest:
01b0: 3a 74 65 73 74 43 6f 6e 73 74 72 61 69 6e 74 20  :testConstraint 
01c0: 4f 70 65 6e 53 53 4c 20 5b 73 74 72 69 6e 67 20  OpenSSL [string 
01d0: 6d 61 74 63 68 20 22 4f 70 65 6e 53 53 4c 2a 22  match "OpenSSL*"
01e0: 20 5b 3a 3a 74 6c 73 3a 3a 76 65 72 73 69 6f 6e   [::tls::version
01f0: 5d 5d 0a 70 75 74 73 20 5b 66 6f 72 6d 61 74 20  ]].puts [format 
0200: 22 4f 70 65 6e 53 53 4c 20 76 65 72 73 69 6f 6e  "OpenSSL version
0210: 20 3d 20 25 73 22 20 5b 74 6c 73 3a 3a 76 65 72   = %s" [tls::ver
0220: 73 69 6f 6e 5d 5d 09 09 09 09 09 09 09 09 09 0a  sion]]..........
0230: 0a 23 20 4c 65 67 61 63 79 20 4f 70 65 6e 53 53  .# Legacy OpenSS
0240: 4c 20 76 31 2e 31 2e 31 20 76 73 20 6e 65 77 20  L v1.1.1 vs new 
0250: 76 33 2e 78 0a 66 6f 72 65 61 63 68 20 76 65 72  v3.x.foreach ver
0260: 20 5b 6c 69 73 74 20 31 2e 31 2e 31 20 33 2e 30   [list 1.1.1 3.0
0270: 20 33 2e 32 5d 20 7b 0a 20 20 20 20 3a 3a 74 63   3.2] {.    ::tc
0280: 6c 74 65 73 74 3a 3a 74 65 73 74 43 6f 6e 73 74  ltest::testConst
0290: 72 61 69 6e 74 20 5b 66 6f 72 6d 61 74 20 22 4f  raint [format "O
02a0: 70 65 6e 53 53 4c 25 73 22 20 24 76 65 72 5d 20  penSSL%s" $ver] 
02b0: 30 0a 20 20 20 20 3a 3a 74 63 6c 74 65 73 74 3a  0.    ::tcltest:
02c0: 3a 74 65 73 74 43 6f 6e 73 74 72 61 69 6e 74 20  :testConstraint 
02d0: 5b 66 6f 72 6d 61 74 20 22 21 4f 70 65 6e 53 53  [format "!OpenSS
02e0: 4c 25 73 22 20 24 76 65 72 5d 20 31 0a 7d 0a 0a  L%s" $ver] 1.}..
02f0: 73 63 61 6e 20 5b 6c 69 6e 64 65 78 20 5b 73 70  scan [lindex [sp
0300: 6c 69 74 20 5b 3a 3a 74 6c 73 3a 3a 76 65 72 73  lit [::tls::vers
0310: 69 6f 6e 5d 5d 20 31 5d 20 25 66 20 76 65 72 73  ion]] 1] %f vers
0320: 69 6f 6e 0a 69 66 20 7b 24 76 65 72 73 69 6f 6e  ion.if {$version
0330: 20 3e 3d 20 33 2e 32 7d 20 7b 0a 20 20 20 20 3a   >= 3.2} {.    :
0340: 3a 74 63 6c 74 65 73 74 3a 3a 74 65 73 74 43 6f  :tcltest::testCo
0350: 6e 73 74 72 61 69 6e 74 20 4f 70 65 6e 53 53 4c  nstraint OpenSSL
0360: 33 2e 32 20 31 0a 20 20 20 20 3a 3a 74 63 6c 74  3.2 1.    ::tclt
0370: 65 73 74 3a 3a 74 65 73 74 43 6f 6e 73 74 72 61  est::testConstra
0380: 69 6e 74 20 21 4f 70 65 6e 53 53 4c 33 2e 32 20  int !OpenSSL3.2 
0390: 30 0a 7d 20 65 6c 73 65 69 66 20 7b 24 76 65 72  0.} elseif {$ver
03a0: 73 69 6f 6e 20 3e 3d 20 33 2e 30 7d 20 7b 0a 20  sion >= 3.0} {. 
03b0: 20 20 20 3a 3a 74 63 6c 74 65 73 74 3a 3a 74 65     ::tcltest::te
03c0: 73 74 43 6f 6e 73 74 72 61 69 6e 74 20 4f 70 65  stConstraint Ope
03d0: 6e 53 53 4c 33 2e 30 20 31 0a 20 20 20 20 3a 3a  nSSL3.0 1.    ::
03e0: 74 63 6c 74 65 73 74 3a 3a 74 65 73 74 43 6f 6e  tcltest::testCon
03f0: 73 74 72 61 69 6e 74 20 21 4f 70 65 6e 53 53 4c  straint !OpenSSL
0400: 33 2e 30 20 30 0a 7d 20 65 6c 73 65 20 7b 0a 20  3.0 0.} else {. 
0410: 20 20 20 3a 3a 74 63 6c 74 65 73 74 3a 3a 74 65     ::tcltest::te
0420: 73 74 43 6f 6e 73 74 72 61 69 6e 74 20 4f 70 65  stConstraint Ope
0430: 6e 53 53 4c 31 2e 31 2e 31 20 31 0a 20 20 20 20  nSSL1.1.1 1.    
0440: 3a 3a 74 63 6c 74 65 73 74 3a 3a 74 65 73 74 43  ::tcltest::testC
0450: 6f 6e 73 74 72 61 69 6e 74 20 21 4f 70 65 6e 53  onstraint !OpenS
0460: 53 4c 31 2e 31 2e 31 20 30 0a 7d 0a 0a 23 20 4d  SL1.1.1 0.}..# M
0470: 61 63 0a 69 66 20 7b 24 3a 3a 74 63 6c 5f 70 6c  ac.if {$::tcl_pl
0480: 61 74 66 6f 72 6d 28 6f 73 29 20 65 71 20 22 44  atform(os) eq "D
0490: 61 72 77 69 6e 22 7d 20 7b 0a 20 20 20 20 3a 3a  arwin"} {.    ::
04a0: 74 63 6c 74 65 73 74 3a 3a 74 65 73 74 43 6f 6e  tcltest::testCon
04b0: 73 74 72 61 69 6e 74 20 6d 61 63 20 31 0a 20 20  straint mac 1.  
04c0: 20 20 3a 3a 74 63 6c 74 65 73 74 3a 3a 74 65 73    ::tcltest::tes
04d0: 74 43 6f 6e 73 74 72 61 69 6e 74 20 21 6d 61 63  tConstraint !mac
04e0: 20 30 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20   0.} else {.    
04f0: 3a 3a 74 63 6c 74 65 73 74 3a 3a 74 65 73 74 43  ::tcltest::testC
0500: 6f 6e 73 74 72 61 69 6e 74 20 6d 61 63 20 30 0a  onstraint mac 0.
0510: 20 20 20 20 3a 3a 74 63 6c 74 65 73 74 3a 3a 74      ::tcltest::t
0520: 65 73 74 43 6f 6e 73 74 72 61 69 6e 74 20 21 6d  estConstraint !m
0530: 61 63 20 31 0a 7d 0a                             ac 1.}.