0000: 2f 2a 0a 20 2a 20 49 6e 66 6f 72 6d 61 74 69 6f /*. * Informatio
0010: 6e 20 43 6f 6d 6d 61 6e 64 73 20 4d 6f 64 75 6c n Commands Modul
0020: 65 0a 20 2a 0a 20 2a 20 50 72 6f 76 69 64 65 73 e. *. * Provides
0030: 20 63 6f 6d 6d 61 6e 64 73 20 74 68 61 74 20 72 commands that r
0040: 65 74 75 72 6e 20 69 6e 66 6f 20 72 65 6c 61 74 eturn info relat
0050: 65 64 20 74 6f 20 74 68 65 20 4f 70 65 6e 53 53 ed to the OpenSS
0060: 4c 20 63 6f 6e 66 69 67 20 61 6e 64 20 64 61 74 L config and dat
0070: 61 2e 0a 20 2a 0a 20 2a 20 43 6f 70 79 72 69 67 a.. *. * Copyrig
0080: 68 74 20 28 43 29 20 32 30 32 33 20 42 72 69 61 ht (C) 2023 Bria
0090: 6e 20 4f 27 48 61 67 61 6e 0a 20 2a 0a 20 2a 2f n O'Hagan. *. */
00a0: 0a 0a 23 69 6e 63 6c 75 64 65 20 22 74 6c 73 49 ..#include "tlsI
00b0: 6e 74 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c nt.h".#include <
00c0: 6f 70 65 6e 73 73 6c 2f 63 72 79 70 74 6f 2e 68 openssl/crypto.h
00d0: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 6f 70 65 6e >.#include <open
00e0: 73 73 6c 2f 73 73 6c 2e 68 3e 0a 23 69 6e 63 6c ssl/ssl.h>.#incl
00f0: 75 64 65 20 3c 6f 70 65 6e 73 73 6c 2f 73 61 66 ude <openssl/saf
0100: 65 73 74 61 63 6b 2e 68 3e 0a 0a 2f 2a 0a 20 2a estack.h>../*. *
0110: 20 56 61 6c 69 64 20 53 53 4c 20 61 6e 64 20 54 Valid SSL and T
0120: 4c 53 20 50 72 6f 74 6f 63 6f 6c 20 56 65 72 73 LS Protocol Vers
0130: 69 6f 6e 73 0a 20 2a 2f 0a 73 74 61 74 69 63 20 ions. */.static
0140: 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 72 6f 74 const char *prot
0150: 6f 63 6f 6c 73 5b 5d 20 3d 20 7b 0a 09 22 73 73 ocols[] = {.."ss
0160: 6c 32 22 2c 20 22 73 73 6c 33 22 2c 20 22 74 6c l2", "ssl3", "tl
0170: 73 31 22 2c 20 22 74 6c 73 31 2e 31 22 2c 20 22 s1", "tls1.1", "
0180: 74 6c 73 31 2e 32 22 2c 20 22 74 6c 73 31 2e 33 tls1.2", "tls1.3
0190: 22 2c 20 4e 55 4c 4c 0a 7d 3b 0a 65 6e 75 6d 20 ", NULL.};.enum
01a0: 70 72 6f 74 6f 63 6f 6c 20 7b 0a 20 20 20 20 54 protocol {. T
01b0: 4c 53 5f 53 53 4c 32 2c 20 54 4c 53 5f 53 53 4c LS_SSL2, TLS_SSL
01c0: 33 2c 20 54 4c 53 5f 54 4c 53 31 2c 20 54 4c 53 3, TLS_TLS1, TLS
01d0: 5f 54 4c 53 31 5f 31 2c 20 54 4c 53 5f 54 4c 53 _TLS1_1, TLS_TLS
01e0: 31 5f 32 2c 20 54 4c 53 5f 54 4c 53 31 5f 33 2c 1_2, TLS_TLS1_3,
01f0: 20 54 4c 53 5f 4e 4f 4e 45 0a 7d 3b 0a 0a 2f 2a TLS_NONE.};../*
0200: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0210: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0220: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0230: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0240: 2a 2a 2f 0a 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d **/../*. *------
0250: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0260: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0270: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0280: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a -------------. *
0290: 0a 20 2a 20 4e 61 6d 65 73 43 61 6c 6c 62 61 63 . * NamesCallbac
02a0: 6b 20 2d 2d 0a 20 2a 0a 20 2a 09 43 61 6c 6c 62 k --. *. *.Callb
02b0: 61 63 6b 20 74 6f 20 61 64 64 20 61 6c 67 6f 72 ack to add algor
02c0: 69 74 68 6d 20 6f 72 20 6d 65 74 68 6f 64 20 6e ithm or method n
02d0: 61 6d 65 73 20 74 6f 20 61 20 54 43 4c 20 6c 69 ames to a TCL li
02e0: 73 74 20 6f 62 6a 65 63 74 2e 0a 20 2a 0a 20 2a st object.. *. *
02f0: 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 41 70 70 Results:. *.App
0300: 65 6e 64 20 6e 61 6d 65 20 74 6f 20 54 43 4c 20 end name to TCL
0310: 6c 69 73 74 20 6f 62 6a 65 63 74 2e 0a 20 2a 0a list object.. *.
0320: 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a * Side effects:
0330: 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 2d . *.None.. *. *-
0340: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0360: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0370: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0380: 2d 2d 0a 20 2a 2f 0a 76 6f 69 64 20 4e 61 6d 65 --. */.void Name
0390: 73 43 61 6c 6c 62 61 63 6b 28 63 6f 6e 73 74 20 sCallback(const
03a0: 4f 42 4a 5f 4e 41 4d 45 20 2a 6f 62 6a 2c 20 76 OBJ_NAME *obj, v
03b0: 6f 69 64 20 2a 61 72 67 29 20 7b 0a 20 20 20 20 oid *arg) {.
03c0: 54 63 6c 5f 4f 62 6a 20 2a 6c 69 73 74 4f 62 6a Tcl_Obj *listObj
03d0: 20 3d 20 28 54 63 6c 5f 4f 62 6a 20 2a 29 20 61 = (Tcl_Obj *) a
03e0: 72 67 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 65 6c rg;.. /* Fiel
03f0: 64 73 3a 20 28 69 6e 74 29 20 74 79 70 65 20 61 ds: (int) type a
0400: 6e 64 20 61 6c 69 61 73 2c 20 28 63 6f 6e 73 74 nd alias, (const
0410: 20 63 68 61 72 2a 29 20 6e 61 6d 65 20 28 61 6c char*) name (al
0420: 69 61 73 20 66 72 6f 6d 29 20 61 6e 64 20 64 61 ias from) and da
0430: 74 61 20 28 61 6c 69 61 73 20 74 6f 29 20 2a 2f ta (alias to) */
0440: 0a 20 20 20 20 69 66 20 28 73 74 72 73 74 72 28 . if (strstr(
0450: 6f 62 6a 2d 3e 6e 61 6d 65 2c 20 22 72 73 61 22 obj->name, "rsa"
0460: 29 20 3d 3d 20 4e 55 4c 4c 20 26 26 20 73 74 72 ) == NULL && str
0470: 73 74 72 28 6f 62 6a 2d 3e 6e 61 6d 65 2c 20 22 str(obj->name, "
0480: 52 53 41 22 29 20 3d 3d 20 4e 55 4c 4c 29 20 7b RSA") == NULL) {
0490: 0a 09 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 ..Tcl_ListObjApp
04a0: 65 6e 64 45 6c 65 6d 65 6e 74 28 4e 55 4c 4c 2c endElement(NULL,
04b0: 20 6c 69 73 74 4f 62 6a 2c 20 54 63 6c 5f 4e 65 listObj, Tcl_Ne
04c0: 77 53 74 72 69 6e 67 4f 62 6a 28 6f 62 6a 2d 3e wStringObj(obj->
04d0: 6e 61 6d 65 2c 20 2d 31 29 29 3b 0a 20 20 20 20 name, -1));.
04e0: 7d 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a }.}../**********
04f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0500: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0510: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0520: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 0a 20 *********/../*.
0530: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *---------------
0540: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0550: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0560: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0570: 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 43 69 70 68 65 ----. *. * Ciphe
0580: 72 49 6e 66 6f 20 2d 2d 0a 20 2a 0a 20 2a 09 52 rInfo --. *. *.R
0590: 65 74 75 72 6e 20 61 20 6c 69 73 74 20 6f 66 20 eturn a list of
05a0: 70 72 6f 70 65 72 74 69 65 73 20 61 6e 64 20 76 properties and v
05b0: 61 6c 75 65 73 20 66 6f 72 20 63 69 70 68 65 72 alues for cipher
05c0: 2e 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a .. *. * Results:
05d0: 0a 20 2a 09 41 20 73 74 61 6e 64 61 72 64 20 54 . *.A standard T
05e0: 63 6c 20 6c 69 73 74 2e 0a 20 2a 0a 20 2a 20 53 cl list.. *. * S
05f0: 69 64 65 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 ide effects:. *.
0600: 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d None.. *. *-----
0610: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0620: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0630: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0640: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 --------------.
0650: 2a 2f 0a 69 6e 74 20 43 69 70 68 65 72 49 6e 66 */.int CipherInf
0660: 6f 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e o(Tcl_Interp *in
0670: 74 65 72 70 2c 20 54 63 6c 5f 4f 62 6a 20 2a 6e terp, Tcl_Obj *n
0680: 61 6d 65 4f 62 6a 29 20 7b 0a 20 20 20 20 63 6f ameObj) {. co
0690: 6e 73 74 20 45 56 50 5f 43 49 50 48 45 52 20 2a nst EVP_CIPHER *
06a0: 63 69 70 68 65 72 3b 0a 20 20 20 20 54 63 6c 5f cipher;. Tcl_
06b0: 4f 62 6a 20 2a 72 65 73 75 6c 74 4f 62 6a 2c 20 Obj *resultObj,
06c0: 2a 6c 69 73 74 4f 62 6a 3b 0a 20 20 20 20 75 6e *listObj;. un
06d0: 73 69 67 6e 65 64 20 6c 6f 6e 67 20 66 6c 61 67 signed long flag
06e0: 73 2c 20 6d 6f 64 65 3b 0a 20 20 20 20 75 6e 73 s, mode;. uns
06f0: 69 67 6e 65 64 20 63 68 61 72 20 2a 6d 6f 64 65 igned char *mode
0700: 4e 61 6d 65 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 Name = NULL;.
0710: 20 63 68 61 72 20 2a 6e 61 6d 65 20 3d 20 54 63 char *name = Tc
0720: 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f l_GetStringFromO
0730: 62 6a 28 6e 61 6d 65 4f 62 6a 2c 20 28 54 63 6c bj(nameObj, (Tcl
0740: 5f 53 69 7a 65 20 2a 29 20 4e 55 4c 4c 29 3b 0a _Size *) NULL);.
0750: 0a 20 20 20 20 2f 2a 20 47 65 74 20 63 69 70 68 . /* Get ciph
0760: 65 72 20 2a 2f 0a 20 20 20 20 63 69 70 68 65 72 er */. cipher
0770: 20 3d 20 45 56 50 5f 67 65 74 5f 63 69 70 68 65 = EVP_get_ciphe
0780: 72 62 79 6e 61 6d 65 28 6e 61 6d 65 29 3b 0a 0a rbyname(name);..
0790: 20 20 20 20 69 66 20 28 63 69 70 68 65 72 20 3d if (cipher =
07a0: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 54 63 6c 5f 41 = NULL) {..Tcl_A
07b0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 ppendResult(inte
07c0: 72 70 2c 20 22 49 6e 76 61 6c 69 64 20 63 69 70 rp, "Invalid cip
07d0: 68 65 72 20 5c 22 22 2c 20 6e 61 6d 65 2c 20 22 her \"", name, "
07e0: 5c 22 22 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 \"", (char *) NU
07f0: 4c 4c 29 3b 0a 09 72 65 74 75 72 6e 20 54 43 4c LL);..return TCL
0800: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 0a 20 _ERROR;. }..
0810: 20 20 20 2f 2a 20 47 65 74 20 70 72 6f 70 65 72 /* Get proper
0820: 74 69 65 73 20 2a 2f 0a 20 20 20 20 72 65 73 75 ties */. resu
0830: 6c 74 4f 62 6a 20 3d 20 54 63 6c 5f 4e 65 77 4c ltObj = Tcl_NewL
0840: 69 73 74 4f 62 6a 28 30 2c 20 4e 55 4c 4c 29 3b istObj(0, NULL);
0850: 0a 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 4f . if (resultO
0860: 62 6a 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 72 bj == NULL) {..r
0870: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b eturn TCL_ERROR;
0880: 0a 20 20 20 20 7d 0a 20 20 20 20 4c 41 50 50 45 . }. LAPPE
0890: 4e 44 5f 53 54 52 28 69 6e 74 65 72 70 2c 20 72 ND_STR(interp, r
08a0: 65 73 75 6c 74 4f 62 6a 2c 20 22 6e 69 64 22 2c esultObj, "nid",
08b0: 20 4f 42 4a 5f 6e 69 64 32 6c 6e 28 45 56 50 5f OBJ_nid2ln(EVP_
08c0: 43 49 50 48 45 52 5f 6e 69 64 28 63 69 70 68 65 CIPHER_nid(ciphe
08d0: 72 29 29 2c 20 2d 31 29 3b 0a 20 20 20 20 4c 41 r)), -1);. LA
08e0: 50 50 45 4e 44 5f 53 54 52 28 69 6e 74 65 72 70 PPEND_STR(interp
08f0: 2c 20 72 65 73 75 6c 74 4f 62 6a 2c 20 22 6e 61 , resultObj, "na
0900: 6d 65 22 2c 20 45 56 50 5f 43 49 50 48 45 52 5f me", EVP_CIPHER_
0910: 6e 61 6d 65 28 63 69 70 68 65 72 29 2c 20 2d 31 name(cipher), -1
0920: 29 3b 0a 20 20 20 20 4c 41 50 50 45 4e 44 5f 53 );. LAPPEND_S
0930: 54 52 28 69 6e 74 65 72 70 2c 20 72 65 73 75 6c TR(interp, resul
0940: 74 4f 62 6a 2c 20 22 64 65 73 63 72 69 70 74 69 tObj, "descripti
0950: 6f 6e 22 2c 20 22 22 2c 20 2d 31 29 3b 0a 20 20 on", "", -1);.
0960: 20 20 4c 41 50 50 45 4e 44 5f 49 4e 54 28 69 6e LAPPEND_INT(in
0970: 74 65 72 70 2c 20 72 65 73 75 6c 74 4f 62 6a 2c terp, resultObj,
0980: 20 22 62 6c 6f 63 6b 5f 73 69 7a 65 22 2c 20 45 "block_size", E
0990: 56 50 5f 43 49 50 48 45 52 5f 62 6c 6f 63 6b 5f VP_CIPHER_block_
09a0: 73 69 7a 65 28 63 69 70 68 65 72 29 29 3b 0a 20 size(cipher));.
09b0: 20 20 20 4c 41 50 50 45 4e 44 5f 49 4e 54 28 69 LAPPEND_INT(i
09c0: 6e 74 65 72 70 2c 20 72 65 73 75 6c 74 4f 62 6a nterp, resultObj
09d0: 2c 20 22 6b 65 79 5f 6c 65 6e 67 74 68 22 2c 20 , "key_length",
09e0: 45 56 50 5f 43 49 50 48 45 52 5f 6b 65 79 5f 6c EVP_CIPHER_key_l
09f0: 65 6e 67 74 68 28 63 69 70 68 65 72 29 29 3b 0a ength(cipher));.
0a00: 20 20 20 20 4c 41 50 50 45 4e 44 5f 49 4e 54 28 LAPPEND_INT(
0a10: 69 6e 74 65 72 70 2c 20 72 65 73 75 6c 74 4f 62 interp, resultOb
0a20: 6a 2c 20 22 69 76 5f 6c 65 6e 67 74 68 22 2c 20 j, "iv_length",
0a30: 45 56 50 5f 43 49 50 48 45 52 5f 69 76 5f 6c 65 EVP_CIPHER_iv_le
0a40: 6e 67 74 68 28 63 69 70 68 65 72 29 29 3b 0a 20 ngth(cipher));.
0a50: 20 20 20 4c 41 50 50 45 4e 44 5f 53 54 52 28 69 LAPPEND_STR(i
0a60: 6e 74 65 72 70 2c 20 72 65 73 75 6c 74 4f 62 6a nterp, resultObj
0a70: 2c 20 22 74 79 70 65 22 2c 20 4f 42 4a 5f 6e 69 , "type", OBJ_ni
0a80: 64 32 6c 6e 28 45 56 50 5f 43 49 50 48 45 52 5f d2ln(EVP_CIPHER_
0a90: 74 79 70 65 28 63 69 70 68 65 72 29 29 2c 20 2d type(cipher)), -
0aa0: 31 29 3b 0a 20 20 20 20 4c 41 50 50 45 4e 44 5f 1);. LAPPEND_
0ab0: 53 54 52 28 69 6e 74 65 72 70 2c 20 72 65 73 75 STR(interp, resu
0ac0: 6c 74 4f 62 6a 2c 20 22 70 72 6f 76 69 64 65 72 ltObj, "provider
0ad0: 22 2c 20 22 22 2c 20 2d 31 29 3b 0a 20 20 20 20 ", "", -1);.
0ae0: 66 6c 61 67 73 20 3d 20 45 56 50 5f 43 49 50 48 flags = EVP_CIPH
0af0: 45 52 5f 66 6c 61 67 73 28 63 69 70 68 65 72 29 ER_flags(cipher)
0b00: 3b 0a 20 20 20 20 6d 6f 64 65 20 20 3d 20 45 56 ;. mode = EV
0b10: 50 5f 43 49 50 48 45 52 5f 6d 6f 64 65 28 63 69 P_CIPHER_mode(ci
0b20: 70 68 65 72 29 3b 0a 0a 20 20 20 20 2f 2a 20 45 pher);.. /* E
0b30: 56 50 5f 43 49 50 48 45 52 5f 67 65 74 5f 6d 6f VP_CIPHER_get_mo
0b40: 64 65 20 2a 2f 0a 20 20 20 20 73 77 69 74 63 68 de */. switch
0b50: 28 6d 6f 64 65 29 20 7b 0a 09 63 61 73 65 20 45 (mode) {..case E
0b60: 56 50 5f 43 49 50 48 5f 53 54 52 45 41 4d 5f 43 VP_CIPH_STREAM_C
0b70: 49 50 48 45 52 3a 0a 09 20 20 20 20 6d 6f 64 65 IPHER:.. mode
0b80: 4e 61 6d 65 20 3d 20 22 53 54 52 45 41 4d 22 3b Name = "STREAM";
0b90: 0a 09 20 20 20 20 62 72 65 61 6b 3b 0a 09 63 61 .. break;..ca
0ba0: 73 65 20 45 56 50 5f 43 49 50 48 5f 45 43 42 5f se EVP_CIPH_ECB_
0bb0: 4d 4f 44 45 3a 0a 09 20 20 20 20 6d 6f 64 65 4e MODE:.. modeN
0bc0: 61 6d 65 20 3d 20 22 45 43 42 22 3b 0a 09 20 20 ame = "ECB";..
0bd0: 20 20 62 72 65 61 6b 3b 0a 09 63 61 73 65 20 45 break;..case E
0be0: 56 50 5f 43 49 50 48 5f 43 42 43 5f 4d 4f 44 45 VP_CIPH_CBC_MODE
0bf0: 3a 0a 09 20 20 20 20 6d 6f 64 65 4e 61 6d 65 20 :.. modeName
0c00: 3d 20 22 43 42 43 22 3b 0a 09 20 20 20 20 62 72 = "CBC";.. br
0c10: 65 61 6b 3b 0a 09 63 61 73 65 20 45 56 50 5f 43 eak;..case EVP_C
0c20: 49 50 48 5f 43 46 42 5f 4d 4f 44 45 3a 0a 09 20 IPH_CFB_MODE:..
0c30: 20 20 20 6d 6f 64 65 4e 61 6d 65 20 3d 20 22 43 modeName = "C
0c40: 46 42 22 3b 0a 09 20 20 20 20 62 72 65 61 6b 3b FB";.. break;
0c50: 0a 09 63 61 73 65 20 45 56 50 5f 43 49 50 48 5f ..case EVP_CIPH_
0c60: 4f 46 42 5f 4d 4f 44 45 3a 0a 09 20 20 20 20 6d OFB_MODE:.. m
0c70: 6f 64 65 4e 61 6d 65 20 3d 20 22 4f 46 42 22 3b odeName = "OFB";
0c80: 0a 09 20 20 20 20 62 72 65 61 6b 3b 0a 09 63 61 .. break;..ca
0c90: 73 65 20 45 56 50 5f 43 49 50 48 5f 43 54 52 5f se EVP_CIPH_CTR_
0ca0: 4d 4f 44 45 3a 0a 09 20 20 20 20 6d 6f 64 65 4e MODE:.. modeN
0cb0: 61 6d 65 20 3d 20 22 43 54 52 22 3b 0a 09 20 20 ame = "CTR";..
0cc0: 20 20 62 72 65 61 6b 3b 0a 09 63 61 73 65 20 45 break;..case E
0cd0: 56 50 5f 43 49 50 48 5f 47 43 4d 5f 4d 4f 44 45 VP_CIPH_GCM_MODE
0ce0: 3a 0a 09 20 20 20 20 6d 6f 64 65 4e 61 6d 65 20 :.. modeName
0cf0: 3d 20 22 47 43 4d 22 3b 0a 09 20 20 20 20 62 72 = "GCM";.. br
0d00: 65 61 6b 3b 0a 09 63 61 73 65 20 45 56 50 5f 43 eak;..case EVP_C
0d10: 49 50 48 5f 58 54 53 5f 4d 4f 44 45 3a 0a 09 20 IPH_XTS_MODE:..
0d20: 20 20 20 6d 6f 64 65 4e 61 6d 65 20 3d 20 22 58 modeName = "X
0d30: 54 53 22 3b 0a 09 20 20 20 20 62 72 65 61 6b 3b TS";.. break;
0d40: 0a 09 63 61 73 65 20 45 56 50 5f 43 49 50 48 5f ..case EVP_CIPH_
0d50: 43 43 4d 5f 4d 4f 44 45 3a 0a 09 20 20 20 20 6d CCM_MODE:.. m
0d60: 6f 64 65 4e 61 6d 65 20 3d 20 22 43 43 4d 22 3b odeName = "CCM";
0d70: 0a 09 20 20 20 20 62 72 65 61 6b 3b 0a 09 63 61 .. break;..ca
0d80: 73 65 20 45 56 50 5f 43 49 50 48 5f 4f 43 42 5f se EVP_CIPH_OCB_
0d90: 4d 4f 44 45 3a 0a 09 20 20 20 20 6d 6f 64 65 4e MODE:.. modeN
0da0: 61 6d 65 20 3d 20 22 4f 43 42 22 3b 0a 09 20 20 ame = "OCB";..
0db0: 20 20 62 72 65 61 6b 3b 0a 09 63 61 73 65 20 45 break;..case E
0dc0: 56 50 5f 43 49 50 48 5f 57 52 41 50 5f 4d 4f 44 VP_CIPH_WRAP_MOD
0dd0: 45 20 3a 0a 09 20 20 20 20 6d 6f 64 65 4e 61 6d E :.. modeNam
0de0: 65 20 3d 20 22 57 52 41 50 22 3b 0a 09 20 20 20 e = "WRAP";..
0df0: 20 62 72 65 61 6b 3b 0a 09 64 65 66 61 75 6c 74 break;..default
0e00: 3a 0a 09 20 20 20 20 6d 6f 64 65 4e 61 6d 65 20 :.. modeName
0e10: 3d 20 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 09 20 20 = "unknown";..
0e20: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 break;. }.
0e30: 20 20 20 4c 41 50 50 45 4e 44 5f 53 54 52 28 69 LAPPEND_STR(i
0e40: 6e 74 65 72 70 2c 20 72 65 73 75 6c 74 4f 62 6a nterp, resultObj
0e50: 2c 20 22 6d 6f 64 65 22 2c 20 6d 6f 64 65 4e 61 , "mode", modeNa
0e60: 6d 65 2c 20 2d 31 29 3b 0a 0a 20 20 20 20 2f 2a me, -1);.. /*
0e70: 20 46 6c 61 67 73 20 2a 2f 0a 20 20 20 20 6c 69 Flags */. li
0e80: 73 74 4f 62 6a 20 3d 20 54 63 6c 5f 4e 65 77 4c stObj = Tcl_NewL
0e90: 69 73 74 4f 62 6a 28 30 2c 20 4e 55 4c 4c 29 3b istObj(0, NULL);
0ea0: 0a 20 20 20 20 4c 41 50 50 45 4e 44 5f 42 4f 4f . LAPPEND_BOO
0eb0: 4c 28 69 6e 74 65 72 70 2c 20 6c 69 73 74 4f 62 L(interp, listOb
0ec0: 6a 2c 20 22 56 61 72 69 61 62 6c 65 20 4c 65 6e j, "Variable Len
0ed0: 67 74 68 22 2c 20 66 6c 61 67 73 20 26 20 45 56 gth", flags & EV
0ee0: 50 5f 43 49 50 48 5f 56 41 52 49 41 42 4c 45 5f P_CIPH_VARIABLE_
0ef0: 4c 45 4e 47 54 48 29 3b 0a 20 20 20 20 4c 41 50 LENGTH);. LAP
0f00: 50 45 4e 44 5f 42 4f 4f 4c 28 69 6e 74 65 72 70 PEND_BOOL(interp
0f10: 2c 20 6c 69 73 74 4f 62 6a 2c 20 22 41 6c 77 61 , listObj, "Alwa
0f20: 79 73 20 43 61 6c 6c 20 49 6e 69 74 22 2c 20 66 ys Call Init", f
0f30: 6c 61 67 73 20 26 20 45 56 50 5f 43 49 50 48 5f lags & EVP_CIPH_
0f40: 41 4c 57 41 59 53 5f 43 41 4c 4c 5f 49 4e 49 54 ALWAYS_CALL_INIT
0f50: 29 3b 0a 20 20 20 20 4c 41 50 50 45 4e 44 5f 42 );. LAPPEND_B
0f60: 4f 4f 4c 28 69 6e 74 65 72 70 2c 20 6c 69 73 74 OOL(interp, list
0f70: 4f 62 6a 2c 20 22 43 75 73 74 6f 6d 20 49 56 22 Obj, "Custom IV"
0f80: 2c 20 66 6c 61 67 73 20 26 20 45 56 50 5f 43 49 , flags & EVP_CI
0f90: 50 48 5f 43 55 53 54 4f 4d 5f 49 56 29 3b 0a 20 PH_CUSTOM_IV);.
0fa0: 20 20 20 4c 41 50 50 45 4e 44 5f 42 4f 4f 4c 28 LAPPEND_BOOL(
0fb0: 69 6e 74 65 72 70 2c 20 6c 69 73 74 4f 62 6a 2c interp, listObj,
0fc0: 20 22 43 6f 6e 74 72 6f 6c 20 49 6e 69 74 22 2c "Control Init",
0fd0: 20 66 6c 61 67 73 20 26 20 45 56 50 5f 43 49 50 flags & EVP_CIP
0fe0: 48 5f 43 54 52 4c 5f 49 4e 49 54 29 3b 0a 20 20 H_CTRL_INIT);.
0ff0: 20 20 4c 41 50 50 45 4e 44 5f 42 4f 4f 4c 28 69 LAPPEND_BOOL(i
1000: 6e 74 65 72 70 2c 20 6c 69 73 74 4f 62 6a 2c 20 nterp, listObj,
1010: 22 43 75 73 74 6f 6d 20 43 69 70 68 65 72 22 2c "Custom Cipher",
1020: 20 66 6c 61 67 73 20 26 20 45 56 50 5f 43 49 50 flags & EVP_CIP
1030: 48 5f 46 4c 41 47 5f 43 55 53 54 4f 4d 5f 43 49 H_FLAG_CUSTOM_CI
1040: 50 48 45 52 29 3b 0a 20 20 20 20 4c 41 50 50 45 PHER);. LAPPE
1050: 4e 44 5f 42 4f 4f 4c 28 69 6e 74 65 72 70 2c 20 ND_BOOL(interp,
1060: 6c 69 73 74 4f 62 6a 2c 20 22 41 45 41 44 20 43 listObj, "AEAD C
1070: 69 70 68 65 72 22 2c 20 66 6c 61 67 73 20 26 20 ipher", flags &
1080: 45 56 50 5f 43 49 50 48 5f 46 4c 41 47 5f 41 45 EVP_CIPH_FLAG_AE
1090: 41 44 5f 43 49 50 48 45 52 29 3b 0a 20 20 20 20 AD_CIPHER);.
10a0: 4c 41 50 50 45 4e 44 5f 42 4f 4f 4c 28 69 6e 74 LAPPEND_BOOL(int
10b0: 65 72 70 2c 20 6c 69 73 74 4f 62 6a 2c 20 22 43 erp, listObj, "C
10c0: 75 73 74 6f 6d 20 43 6f 70 79 22 2c 20 66 6c 61 ustom Copy", fla
10d0: 67 73 20 26 20 45 56 50 5f 43 49 50 48 5f 43 55 gs & EVP_CIPH_CU
10e0: 53 54 4f 4d 5f 43 4f 50 59 29 3b 0a 20 20 20 20 STOM_COPY);.
10f0: 4c 41 50 50 45 4e 44 5f 42 4f 4f 4c 28 69 6e 74 LAPPEND_BOOL(int
1100: 65 72 70 2c 20 6c 69 73 74 4f 62 6a 2c 20 22 4e erp, listObj, "N
1110: 6f 6e 20 46 49 50 53 20 41 6c 6c 6f 77 22 2c 20 on FIPS Allow",
1120: 66 6c 61 67 73 20 26 20 45 56 50 5f 43 49 50 48 flags & EVP_CIPH
1130: 5f 46 4c 41 47 5f 4e 4f 4e 5f 46 49 50 53 5f 41 _FLAG_NON_FIPS_A
1140: 4c 4c 4f 57 29 3b 0a 20 20 20 20 4c 41 50 50 45 LLOW);. LAPPE
1150: 4e 44 5f 4f 42 4a 28 69 6e 74 65 72 70 2c 20 72 ND_OBJ(interp, r
1160: 65 73 75 6c 74 4f 62 6a 2c 20 22 66 6c 61 67 73 esultObj, "flags
1170: 22 2c 20 6c 69 73 74 4f 62 6a 29 3b 0a 0a 20 20 ", listObj);..
1180: 20 20 2f 2a 20 43 54 58 20 6f 6e 6c 79 20 70 72 /* CTX only pr
1190: 6f 70 65 72 74 69 65 73 20 2a 2f 0a 20 20 20 20 operties */.
11a0: 7b 0a 09 45 56 50 5f 43 49 50 48 45 52 5f 43 54 {..EVP_CIPHER_CT
11b0: 58 20 2a 63 74 78 20 3d 20 45 56 50 5f 43 49 50 X *ctx = EVP_CIP
11c0: 48 45 52 5f 43 54 58 5f 6e 65 77 28 29 3b 0a 09 HER_CTX_new();..
11d0: 69 6e 74 20 74 61 67 5f 6c 65 6e 20 3d 20 30 3b int tag_len = 0;
11e0: 0a 0a 09 45 56 50 5f 45 6e 63 72 79 70 74 49 6e ...EVP_EncryptIn
11f0: 69 74 5f 65 78 28 63 74 78 2c 20 63 69 70 68 65 it_ex(ctx, ciphe
1200: 72 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 4e r, NULL, NULL, N
1210: 55 4c 4c 29 3b 0a 09 69 66 20 28 6d 6f 64 65 20 ULL);..if (mode
1220: 3d 3d 20 45 56 50 5f 43 49 50 48 5f 47 43 4d 5f == EVP_CIPH_GCM_
1230: 4d 4f 44 45 20 7c 7c 20 6d 6f 64 65 20 3d 3d 20 MODE || mode ==
1240: 45 56 50 5f 43 49 50 48 5f 4f 43 42 5f 4d 4f 44 EVP_CIPH_OCB_MOD
1250: 45 29 20 7b 0a 09 20 20 20 20 74 61 67 5f 6c 65 E) {.. tag_le
1260: 6e 20 3d 20 45 56 50 5f 47 43 4d 5f 54 4c 53 5f n = EVP_GCM_TLS_
1270: 54 41 47 5f 4c 45 4e 3b 20 2f 2a 20 45 56 50 5f TAG_LEN; /* EVP_
1280: 4d 41 58 5f 41 45 41 44 5f 54 41 47 5f 4c 45 4e MAX_AEAD_TAG_LEN
1290: 47 54 48 20 2a 2f 0a 09 7d 20 65 6c 73 65 20 69 GTH */..} else i
12a0: 66 20 28 6d 6f 64 65 20 3d 3d 20 45 56 50 5f 43 f (mode == EVP_C
12b0: 49 50 48 5f 43 43 4d 5f 4d 4f 44 45 29 20 7b 0a IPH_CCM_MODE) {.
12c0: 09 20 20 20 20 74 61 67 5f 6c 65 6e 20 3d 20 45 . tag_len = E
12d0: 56 50 5f 43 43 4d 5f 54 4c 53 5f 54 41 47 5f 4c VP_CCM_TLS_TAG_L
12e0: 45 4e 3b 0a 09 7d 20 65 6c 73 65 20 69 66 20 28 EN;..} else if (
12f0: 63 69 70 68 65 72 20 3d 3d 20 45 56 50 5f 67 65 cipher == EVP_ge
1300: 74 5f 63 69 70 68 65 72 62 79 6e 61 6d 65 28 22 t_cipherbyname("
1310: 63 68 61 63 68 61 32 30 2d 70 6f 6c 79 31 33 30 chacha20-poly130
1320: 35 22 29 29 20 7b 0a 09 20 20 20 20 74 61 67 5f 5")) {.. tag_
1330: 6c 65 6e 20 3d 20 45 56 50 5f 43 48 41 43 48 41 len = EVP_CHACHA
1340: 50 4f 4c 59 5f 54 4c 53 5f 54 41 47 5f 4c 45 4e POLY_TLS_TAG_LEN
1350: 3b 20 2f 2a 20 50 4f 4c 59 31 33 30 35 5f 42 4c ; /* POLY1305_BL
1360: 4f 43 4b 5f 53 49 5a 45 20 2a 2f 0a 09 7d 0a 09 OCK_SIZE */..}..
1370: 45 56 50 5f 43 49 50 48 45 52 5f 43 54 58 5f 66 EVP_CIPHER_CTX_f
1380: 72 65 65 28 63 74 78 29 3b 0a 09 4c 41 50 50 45 ree(ctx);..LAPPE
1390: 4e 44 5f 49 4e 54 28 69 6e 74 65 72 70 2c 20 72 ND_INT(interp, r
13a0: 65 73 75 6c 74 4f 62 6a 2c 20 22 74 61 67 5f 6c esultObj, "tag_l
13b0: 65 6e 67 74 68 22 2c 20 74 61 67 5f 6c 65 6e 29 ength", tag_len)
13c0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 0a 20 20 20 ;. }. .
13d0: 20 2f 2a 20 41 45 41 44 20 70 72 6f 70 65 72 74 /* AEAD propert
13e0: 69 65 73 20 2a 2f 0a 20 20 20 20 7b 0a 09 69 6e ies */. {..in
13f0: 74 20 61 61 64 5f 6c 65 6e 20 3d 20 30 3b 0a 09 t aad_len = 0;..
1400: 69 66 20 28 66 6c 61 67 73 20 26 20 45 56 50 5f if (flags & EVP_
1410: 43 49 50 48 5f 46 4c 41 47 5f 41 45 41 44 5f 43 CIPH_FLAG_AEAD_C
1420: 49 50 48 45 52 29 20 7b 0a 09 20 20 20 20 61 61 IPHER) {.. aa
1430: 64 5f 6c 65 6e 20 3d 20 45 56 50 5f 41 45 41 44 d_len = EVP_AEAD
1440: 5f 54 4c 53 31 5f 41 41 44 5f 4c 45 4e 3b 0a 09 _TLS1_AAD_LEN;..
1450: 7d 0a 09 4c 41 50 50 45 4e 44 5f 49 4e 54 28 69 }..LAPPEND_INT(i
1460: 6e 74 65 72 70 2c 20 72 65 73 75 6c 74 4f 62 6a nterp, resultObj
1470: 2c 20 22 61 61 64 5f 6c 65 6e 67 74 68 22 2c 20 , "aad_length",
1480: 61 61 64 5f 6c 65 6e 29 3b 0a 20 20 20 20 7d 0a aad_len);. }.
1490: 0a 20 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 . Tcl_SetObjR
14a0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 72 65 esult(interp, re
14b0: 73 75 6c 74 4f 62 6a 29 3b 0a 20 20 20 20 72 65 sultObj);. re
14c0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a turn TCL_OK;.}..
14d0: 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d /*. *-----------
14e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
14f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1500: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1510: 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 43 --------. *. * C
1520: 69 70 68 65 72 4c 69 73 74 20 2d 2d 0a 20 2a 0a ipherList --. *.
1530: 20 2a 09 52 65 74 75 72 6e 20 61 20 6c 69 73 74 *.Return a list
1540: 20 6f 66 20 61 6c 6c 20 63 69 70 68 65 72 20 61 of all cipher a
1550: 6c 67 6f 72 69 74 68 6d 73 0a 20 2a 0a 20 2a 20 lgorithms. *. *
1560: 52 65 73 75 6c 74 73 3a 0a 20 2a 09 41 20 73 74 Results:. *.A st
1570: 61 6e 64 61 72 64 20 54 63 6c 20 6c 69 73 74 2e andard Tcl list.
1580: 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 65 . *. * Side effe
1590: 63 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a cts:. *.None.. *
15a0: 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d . *-------------
15b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
15c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
15d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
15e0: 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 69 6e 74 20 43 ------. */.int C
15f0: 69 70 68 65 72 4c 69 73 74 28 54 63 6c 5f 49 6e ipherList(Tcl_In
1600: 74 65 72 70 20 2a 69 6e 74 65 72 70 29 20 7b 0a terp *interp) {.
1610: 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 72 65 73 Tcl_Obj *res
1620: 75 6c 74 4f 62 6a 20 3d 20 54 63 6c 5f 4e 65 77 ultObj = Tcl_New
1630: 4c 69 73 74 4f 62 6a 28 30 2c 20 4e 55 4c 4c 29 ListObj(0, NULL)
1640: 3b 0a 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 ;. if (result
1650: 4f 62 6a 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 Obj == NULL) {..
1660: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 return TCL_ERROR
1670: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 ;. }.. /*
1680: 53 61 6d 65 20 61 73 20 45 56 50 5f 43 49 50 48 Same as EVP_CIPH
1690: 45 52 5f 64 6f 5f 61 6c 6c 20 2a 2f 0a 20 20 20 ER_do_all */.
16a0: 20 4f 42 4a 5f 4e 41 4d 45 5f 64 6f 5f 61 6c 6c OBJ_NAME_do_all
16b0: 28 4f 42 4a 5f 4e 41 4d 45 5f 54 59 50 45 5f 43 (OBJ_NAME_TYPE_C
16c0: 49 50 48 45 52 5f 4d 45 54 48 2c 20 4e 61 6d 65 IPHER_METH, Name
16d0: 73 43 61 6c 6c 62 61 63 6b 2c 20 28 76 6f 69 64 sCallback, (void
16e0: 20 2a 29 20 72 65 73 75 6c 74 4f 62 6a 29 3b 0a *) resultObj);.
16f0: 20 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 Tcl_SetObjRe
1700: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 72 65 73 sult(interp, res
1710: 75 6c 74 4f 62 6a 29 3b 0a 20 20 20 20 72 65 74 ultObj);. ret
1720: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f urn TCL_OK;.}../
1730: 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *. *------------
1740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1760: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1770: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 43 69 -------. *. * Ci
1780: 70 68 65 72 4f 62 6a 43 6d 64 20 2d 2d 0a 20 2a pherObjCmd --. *
1790: 0a 20 2a 09 52 65 74 75 72 6e 20 61 20 6c 69 73 . *.Return a lis
17a0: 74 20 6f 66 20 70 72 6f 70 65 72 74 69 65 73 20 t of properties
17b0: 61 6e 64 20 76 61 6c 75 65 73 20 66 6f 72 20 63 and values for c
17c0: 69 70 68 65 72 4e 61 6d 65 2e 0a 20 2a 0a 20 2a ipherName.. *. *
17d0: 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 41 20 73 Results:. *.A s
17e0: 74 61 6e 64 61 72 64 20 54 63 6c 20 6c 69 73 74 tandard Tcl list
17f0: 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 .. *. * Side eff
1800: 65 63 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 ects:. *.None..
1810: 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *. *------------
1820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1840: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1850: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 73 74 61 74 -------. */.stat
1860: 69 63 20 69 6e 74 20 43 69 70 68 65 72 4f 62 6a ic int CipherObj
1870: 43 6d 64 28 43 6c 69 65 6e 74 44 61 74 61 20 63 Cmd(ClientData c
1880: 6c 69 65 6e 74 44 61 74 61 2c 20 54 63 6c 5f 49 lientData, Tcl_I
1890: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 nterp *interp, i
18a0: 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a nt objc, Tcl_Obj
18b0: 20 2a 63 6f 6e 73 74 20 6f 62 6a 76 5b 5d 29 20 *const objv[])
18c0: 7b 0a 20 20 20 20 28 76 6f 69 64 29 20 63 6c 69 {. (void) cli
18d0: 65 6e 74 44 61 74 61 3b 0a 0a 20 20 20 20 64 70 entData;.. dp
18e0: 72 69 6e 74 66 28 22 43 61 6c 6c 65 64 22 29 3b rintf("Called");
18f0: 0a 0a 20 20 20 20 2f 2a 20 43 6c 65 61 72 20 65 .. /* Clear e
1900: 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20 54 63 6c rrors */. Tcl
1910: 5f 52 65 73 65 74 52 65 73 75 6c 74 28 69 6e 74 _ResetResult(int
1920: 65 72 70 29 3b 0a 20 20 20 20 45 52 52 5f 63 6c erp);. ERR_cl
1930: 65 61 72 5f 65 72 72 6f 72 28 29 3b 0a 0a 20 20 ear_error();..
1940: 20 20 2f 2a 20 56 61 6c 69 64 61 74 65 20 61 72 /* Validate ar
1950: 67 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 69 g count */. i
1960: 66 20 28 6f 62 6a 63 20 3d 3d 20 31 29 20 7b 0a f (objc == 1) {.
1970: 09 72 65 74 75 72 6e 20 43 69 70 68 65 72 4c 69 .return CipherLi
1980: 73 74 28 69 6e 74 65 72 70 29 3b 0a 0a 20 20 20 st(interp);..
1990: 20 7d 20 65 6c 73 65 20 69 66 20 28 6f 62 6a 63 } else if (objc
19a0: 20 3d 3d 20 32 29 20 7b 0a 09 72 65 74 75 72 6e == 2) {..return
19b0: 20 43 69 70 68 65 72 49 6e 66 6f 28 69 6e 74 65 CipherInfo(inte
19c0: 72 70 2c 20 6f 62 6a 76 5b 31 5d 29 3b 0a 0a 20 rp, objv[1]);..
19d0: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 54 63 6c } else {..Tcl
19e0: 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e _WrongNumArgs(in
19f0: 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 terp, 1, objv, "
1a00: 3f 6e 61 6d 65 3f 22 29 3b 0a 09 72 65 74 75 72 ?name?");..retur
1a10: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 n TCL_ERROR;.
1a20: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 }. return TC
1a30: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 2d 2d L_OK;.}../*. *--
1a40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1a60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1a70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1a80: 2d 0a 20 2a 0a 20 2a 20 43 69 70 68 65 72 73 4f -. *. * CiphersO
1a90: 62 6a 43 6d 64 20 2d 2d 0a 20 2a 0a 20 2a 09 54 bjCmd --. *. *.T
1aa0: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 69 73 his procedure is
1ab0: 20 69 6e 76 6f 6b 65 64 20 74 6f 20 70 72 6f 63 invoked to proc
1ac0: 65 73 73 20 74 68 65 20 22 74 6c 73 3a 3a 63 69 ess the "tls::ci
1ad0: 70 68 65 72 73 22 20 63 6f 6d 6d 61 6e 64 0a 20 phers" command.
1ae0: 2a 09 74 6f 20 6c 69 73 74 20 61 76 61 69 6c 61 *.to list availa
1af0: 62 6c 65 20 63 69 70 68 65 72 73 2c 20 62 61 73 ble ciphers, bas
1b00: 65 64 20 75 70 6f 6e 20 70 72 6f 74 6f 63 6f 6c ed upon protocol
1b10: 20 73 65 6c 65 63 74 65 64 2e 0a 20 2a 0a 20 2a selected.. *. *
1b20: 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 41 20 73 Results:. *.A s
1b30: 74 61 6e 64 61 72 64 20 54 63 6c 20 72 65 73 75 tandard Tcl resu
1b40: 6c 74 20 6c 69 73 74 2e 0a 20 2a 0a 20 2a 20 53 lt list.. *. * S
1b50: 69 64 65 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 ide effects:. *.
1b60: 63 6f 6e 73 74 72 75 63 74 73 20 61 6e 64 20 64 constructs and d
1b70: 65 73 74 72 6f 79 73 20 53 53 4c 20 63 6f 6e 74 estroys SSL cont
1b80: 65 78 74 20 28 43 54 58 29 0a 20 2a 0a 20 2a 2d ext (CTX). *. *-
1b90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1ba0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1bb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1bc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1bd0: 2d 2d 0a 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e --. */.static in
1be0: 74 20 43 69 70 68 65 72 73 4f 62 6a 43 6d 64 28 t CiphersObjCmd(
1bf0: 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e ClientData clien
1c00: 74 44 61 74 61 2c 20 54 63 6c 5f 49 6e 74 65 72 tData, Tcl_Inter
1c10: 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f p *interp, int o
1c20: 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f bjc, Tcl_Obj *co
1c30: 6e 73 74 20 6f 62 6a 76 5b 5d 29 20 7b 0a 20 20 nst objv[]) {.
1c40: 20 20 53 53 4c 5f 43 54 58 20 2a 63 74 78 20 3d SSL_CTX *ctx =
1c50: 20 4e 55 4c 4c 3b 0a 20 20 20 20 53 53 4c 20 2a NULL;. SSL *
1c60: 73 73 6c 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 ssl = NULL;.
1c70: 53 54 41 43 4b 5f 4f 46 28 53 53 4c 5f 43 49 50 STACK_OF(SSL_CIP
1c80: 48 45 52 29 20 2a 73 6b 20 3d 20 4e 55 4c 4c 3b HER) *sk = NULL;
1c90: 0a 20 20 20 20 54 63 6c 5f 53 69 7a 65 20 69 6e . Tcl_Size in
1ca0: 64 65 78 3b 0a 20 20 20 20 69 6e 74 20 76 65 72 dex;. int ver
1cb0: 62 6f 73 65 20 3d 20 30 2c 20 75 73 65 5f 73 75 bose = 0, use_su
1cc0: 70 70 6f 72 74 65 64 20 3d 20 30 2c 20 72 65 73 pported = 0, res
1cd0: 20 3d 20 54 43 4c 5f 4f 4b 3b 0a 20 20 20 20 69 = TCL_OK;. i
1ce0: 6e 74 20 6d 69 6e 5f 76 65 72 73 69 6f 6e 2c 20 nt min_version,
1cf0: 6d 61 78 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 max_version;.
1d00: 20 28 76 6f 69 64 29 20 63 6c 69 65 6e 74 44 61 (void) clientDa
1d10: 74 61 3b 0a 0a 20 20 20 20 64 70 72 69 6e 74 66 ta;.. dprintf
1d20: 28 22 43 61 6c 6c 65 64 22 29 3b 0a 0a 20 20 20 ("Called");..
1d30: 20 2f 2a 20 43 6c 65 61 72 20 65 72 72 6f 72 73 /* Clear errors
1d40: 20 2a 2f 0a 20 20 20 20 54 63 6c 5f 52 65 73 65 */. Tcl_Rese
1d50: 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 3b tResult(interp);
1d60: 0a 20 20 20 20 45 52 52 5f 63 6c 65 61 72 5f 65 . ERR_clear_e
1d70: 72 72 6f 72 28 29 3b 0a 0a 20 20 20 20 2f 2a 20 rror();.. /*
1d80: 56 61 6c 69 64 61 74 65 20 61 72 67 20 63 6f 75 Validate arg cou
1d90: 6e 74 20 2a 2f 0a 20 20 20 20 69 66 20 28 6f 62 nt */. if (ob
1da0: 6a 63 20 3e 20 34 29 20 7b 0a 09 54 63 6c 5f 57 jc > 4) {..Tcl_W
1db0: 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 rongNumArgs(inte
1dc0: 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3f 70 rp, 1, objv, "?p
1dd0: 72 6f 74 6f 63 6f 6c 3f 20 3f 76 65 72 62 6f 73 rotocol? ?verbos
1de0: 65 3f 20 3f 73 75 70 70 6f 72 74 65 64 3f 22 29 e? ?supported?")
1df0: 3b 0a 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 ;..return TCL_ER
1e00: 52 4f 52 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 ROR;. }..
1e10: 2f 2a 20 4c 69 73 74 20 61 6c 6c 20 63 69 70 68 /* List all ciph
1e20: 65 72 73 20 2a 2f 0a 20 20 20 20 69 66 20 28 6f ers */. if (o
1e30: 62 6a 63 20 3d 3d 20 31 29 20 7b 0a 09 72 65 74 bjc == 1) {..ret
1e40: 75 72 6e 20 43 69 70 68 65 72 4c 69 73 74 28 69 urn CipherList(i
1e50: 6e 74 65 72 70 29 3b 0a 20 20 20 20 7d 0a 0a 20 nterp);. }..
1e60: 20 20 20 2f 2a 20 47 65 74 20 6f 70 74 69 6f 6e /* Get option
1e70: 73 20 2a 2f 0a 20 20 20 20 69 66 20 28 54 63 6c s */. if (Tcl
1e80: 5f 47 65 74 49 6e 64 65 78 46 72 6f 6d 4f 62 6a _GetIndexFromObj
1e90: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d (interp, objv[1]
1ea0: 2c 20 70 72 6f 74 6f 63 6f 6c 73 2c 20 22 70 72 , protocols, "pr
1eb0: 6f 74 6f 63 6f 6c 22 2c 20 30 2c 20 26 69 6e 64 otocol", 0, &ind
1ec0: 65 78 29 20 21 3d 20 54 43 4c 5f 4f 4b 20 7c 7c ex) != TCL_OK ||
1ed0: 0a 09 28 6f 62 6a 63 20 3e 20 32 20 26 26 20 54 ..(objc > 2 && T
1ee0: 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f cl_GetBooleanFro
1ef0: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a mObj(interp, obj
1f00: 76 5b 32 5d 2c 20 26 76 65 72 62 6f 73 65 29 20 v[2], &verbose)
1f10: 21 3d 20 54 43 4c 5f 4f 4b 29 20 7c 7c 0a 09 28 != TCL_OK) ||..(
1f20: 6f 62 6a 63 20 3e 20 33 20 26 26 20 54 63 6c 5f objc > 3 && Tcl_
1f30: 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 GetBooleanFromOb
1f40: 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 j(interp, objv[3
1f50: 5d 2c 20 26 75 73 65 5f 73 75 70 70 6f 72 74 65 ], &use_supporte
1f60: 64 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 29 20 7b d) != TCL_OK)) {
1f70: 0a 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 ..return TCL_ERR
1f80: 4f 52 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 OR;. }.. s
1f90: 77 69 74 63 68 20 28 28 65 6e 75 6d 20 70 72 6f witch ((enum pro
1fa0: 74 6f 63 6f 6c 29 69 6e 64 65 78 29 20 7b 0a 09 tocol)index) {..
1fb0: 63 61 73 65 20 54 4c 53 5f 53 53 4c 32 3a 0a 09 case TLS_SSL2:..
1fc0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 Tcl_AppendRe
1fd0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 70 72 6f sult(interp, pro
1fe0: 74 6f 63 6f 6c 73 5b 69 6e 64 65 78 5d 2c 20 22 tocols[index], "
1ff0: 3a 20 70 72 6f 74 6f 63 6f 6c 20 6e 6f 74 20 73 : protocol not s
2000: 75 70 70 6f 72 74 65 64 22 2c 20 28 63 68 61 72 upported", (char
2010: 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09 20 20 20 20 *) NULL);..
2020: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 return TCL_ERROR
2030: 3b 0a 09 63 61 73 65 20 54 4c 53 5f 53 53 4c 33 ;..case TLS_SSL3
2040: 3a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 4e 4f :.#if defined(NO
2050: 5f 53 53 4c 33 29 20 7c 7c 20 64 65 66 69 6e 65 _SSL3) || define
2060: 64 28 4f 50 45 4e 53 53 4c 5f 4e 4f 5f 53 53 4c d(OPENSSL_NO_SSL
2070: 33 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 4f 50 3) || defined(OP
2080: 45 4e 53 53 4c 5f 4e 4f 5f 53 53 4c 33 5f 4d 45 ENSSL_NO_SSL3_ME
2090: 54 48 4f 44 29 0a 09 20 20 20 20 54 63 6c 5f 41 THOD).. Tcl_A
20a0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 ppendResult(inte
20b0: 72 70 2c 20 70 72 6f 74 6f 63 6f 6c 73 5b 69 6e rp, protocols[in
20c0: 64 65 78 5d 2c 20 22 3a 20 70 72 6f 74 6f 63 6f dex], ": protoco
20d0: 6c 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 22 l not supported"
20e0: 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 , (char *) NULL)
20f0: 3b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54 43 ;.. return TC
2100: 4c 5f 45 52 52 4f 52 3b 0a 23 65 6c 73 65 0a 20 L_ERROR;.#else.
2110: 20 20 20 20 20 20 20 20 20 20 20 6d 69 6e 5f 76 min_v
2120: 65 72 73 69 6f 6e 20 3d 20 53 53 4c 33 5f 56 45 ersion = SSL3_VE
2130: 52 53 49 4f 4e 3b 0a 20 20 20 20 20 20 20 20 20 RSION;.
2140: 20 20 20 6d 61 78 5f 76 65 72 73 69 6f 6e 20 3d max_version =
2150: 20 53 53 4c 33 5f 56 45 52 53 49 4f 4e 3b 0a 09 SSL3_VERSION;..
2160: 20 20 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 break;.#endi
2170: 66 0a 09 63 61 73 65 20 54 4c 53 5f 54 4c 53 31 f..case TLS_TLS1
2180: 3a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 4e 4f :.#if defined(NO
2190: 5f 54 4c 53 31 29 20 7c 7c 20 64 65 66 69 6e 65 _TLS1) || define
21a0: 64 28 4f 50 45 4e 53 53 4c 5f 4e 4f 5f 54 4c 53 d(OPENSSL_NO_TLS
21b0: 31 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 4f 50 1) || defined(OP
21c0: 45 4e 53 53 4c 5f 4e 4f 5f 54 4c 53 31 5f 4d 45 ENSSL_NO_TLS1_ME
21d0: 54 48 4f 44 29 0a 09 20 20 20 20 54 63 6c 5f 41 THOD).. Tcl_A
21e0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 ppendResult(inte
21f0: 72 70 2c 20 70 72 6f 74 6f 63 6f 6c 73 5b 69 6e rp, protocols[in
2200: 64 65 78 5d 2c 20 22 3a 20 70 72 6f 74 6f 63 6f dex], ": protoco
2210: 6c 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 22 l not supported"
2220: 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 , (char *) NULL)
2230: 3b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 54 43 ;.. return TC
2240: 4c 5f 45 52 52 4f 52 3b 0a 23 65 6c 73 65 0a 20 L_ERROR;.#else.
2250: 20 20 20 20 20 20 20 20 20 20 20 6d 69 6e 5f 76 min_v
2260: 65 72 73 69 6f 6e 20 3d 20 54 4c 53 31 5f 56 45 ersion = TLS1_VE
2270: 52 53 49 4f 4e 3b 0a 20 20 20 20 20 20 20 20 20 RSION;.
2280: 20 20 20 6d 61 78 5f 76 65 72 73 69 6f 6e 20 3d max_version =
2290: 20 54 4c 53 31 5f 56 45 52 53 49 4f 4e 3b 0a 09 TLS1_VERSION;..
22a0: 20 20 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 break;.#endi
22b0: 66 0a 09 63 61 73 65 20 54 4c 53 5f 54 4c 53 31 f..case TLS_TLS1
22c0: 5f 31 3a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 _1:.#if defined(
22d0: 4e 4f 5f 54 4c 53 31 5f 31 29 20 7c 7c 20 64 65 NO_TLS1_1) || de
22e0: 66 69 6e 65 64 28 4f 50 45 4e 53 53 4c 5f 4e 4f fined(OPENSSL_NO
22f0: 5f 54 4c 53 31 5f 31 29 20 7c 7c 20 64 65 66 69 _TLS1_1) || defi
2300: 6e 65 64 28 4f 50 45 4e 53 53 4c 5f 4e 4f 5f 54 ned(OPENSSL_NO_T
2310: 4c 53 31 5f 31 5f 4d 45 54 48 4f 44 29 0a 09 20 LS1_1_METHOD)..
2320: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 Tcl_AppendRes
2330: 75 6c 74 28 69 6e 74 65 72 70 2c 20 70 72 6f 74 ult(interp, prot
2340: 6f 63 6f 6c 73 5b 69 6e 64 65 78 5d 2c 20 22 3a ocols[index], ":
2350: 20 70 72 6f 74 6f 63 6f 6c 20 6e 6f 74 20 73 75 protocol not su
2360: 70 70 6f 72 74 65 64 22 2c 20 28 63 68 61 72 20 pported", (char
2370: 2a 29 20 4e 55 4c 4c 29 3b 0a 09 20 20 20 20 72 *) NULL);.. r
2380: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b eturn TCL_ERROR;
2390: 0a 23 65 6c 73 65 0a 20 20 20 20 20 20 20 20 20 .#else.
23a0: 20 20 20 6d 69 6e 5f 76 65 72 73 69 6f 6e 20 3d min_version =
23b0: 20 54 4c 53 31 5f 31 5f 56 45 52 53 49 4f 4e 3b TLS1_1_VERSION;
23c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 78 . max
23d0: 5f 76 65 72 73 69 6f 6e 20 3d 20 54 4c 53 31 5f _version = TLS1_
23e0: 31 5f 56 45 52 53 49 4f 4e 3b 0a 09 20 20 20 20 1_VERSION;..
23f0: 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 09 63 break;.#endif..c
2400: 61 73 65 20 54 4c 53 5f 54 4c 53 31 5f 32 3a 0a ase TLS_TLS1_2:.
2410: 23 69 66 20 64 65 66 69 6e 65 64 28 4e 4f 5f 54 #if defined(NO_T
2420: 4c 53 31 5f 32 29 20 7c 7c 20 64 65 66 69 6e 65 LS1_2) || define
2430: 64 28 4f 50 45 4e 53 53 4c 5f 4e 4f 5f 54 4c 53 d(OPENSSL_NO_TLS
2440: 31 5f 32 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 1_2) || defined(
2450: 4f 50 45 4e 53 53 4c 5f 4e 4f 5f 54 4c 53 31 5f OPENSSL_NO_TLS1_
2460: 32 5f 4d 45 54 48 4f 44 29 0a 09 20 20 20 20 54 2_METHOD).. T
2470: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 cl_AppendResult(
2480: 69 6e 74 65 72 70 2c 20 70 72 6f 74 6f 63 6f 6c interp, protocol
2490: 73 5b 69 6e 64 65 78 5d 2c 20 22 3a 20 70 72 6f s[index], ": pro
24a0: 74 6f 63 6f 6c 20 6e 6f 74 20 73 75 70 70 6f 72 tocol not suppor
24b0: 74 65 64 22 2c 20 28 63 68 61 72 20 2a 29 20 4e ted", (char *) N
24c0: 55 4c 4c 29 3b 0a 09 20 20 20 20 72 65 74 75 72 ULL);.. retur
24d0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 23 65 6c n TCL_ERROR;.#el
24e0: 73 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d se. m
24f0: 69 6e 5f 76 65 72 73 69 6f 6e 20 3d 20 54 4c 53 in_version = TLS
2500: 31 5f 32 5f 56 45 52 53 49 4f 4e 3b 0a 20 20 20 1_2_VERSION;.
2510: 20 20 20 20 20 20 20 20 20 6d 61 78 5f 76 65 72 max_ver
2520: 73 69 6f 6e 20 3d 20 54 4c 53 31 5f 32 5f 56 45 sion = TLS1_2_VE
2530: 52 53 49 4f 4e 3b 0a 09 20 20 20 20 62 72 65 61 RSION;.. brea
2540: 6b 3b 0a 23 65 6e 64 69 66 0a 09 63 61 73 65 20 k;.#endif..case
2550: 54 4c 53 5f 54 4c 53 31 5f 33 3a 0a 23 69 66 20 TLS_TLS1_3:.#if
2560: 64 65 66 69 6e 65 64 28 4e 4f 5f 54 4c 53 31 5f defined(NO_TLS1_
2570: 33 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 4f 50 3) || defined(OP
2580: 45 4e 53 53 4c 5f 4e 4f 5f 54 4c 53 31 5f 33 29 ENSSL_NO_TLS1_3)
2590: 0a 09 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 .. Tcl_Append
25a0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 70 Result(interp, p
25b0: 72 6f 74 6f 63 6f 6c 73 5b 69 6e 64 65 78 5d 2c rotocols[index],
25c0: 20 22 3a 20 70 72 6f 74 6f 63 6f 6c 20 6e 6f 74 ": protocol not
25d0: 20 73 75 70 70 6f 72 74 65 64 22 2c 20 28 63 68 supported", (ch
25e0: 61 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09 20 20 ar *) NULL);..
25f0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 return TCL_ERR
2600: 4f 52 3b 0a 23 65 6c 73 65 0a 20 20 20 20 20 20 OR;.#else.
2610: 20 20 20 20 20 20 6d 69 6e 5f 76 65 72 73 69 6f min_versio
2620: 6e 20 3d 20 54 4c 53 31 5f 33 5f 56 45 52 53 49 n = TLS1_3_VERSI
2630: 4f 4e 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 ON;.
2640: 6d 61 78 5f 76 65 72 73 69 6f 6e 20 3d 20 54 4c max_version = TL
2650: 53 31 5f 33 5f 56 45 52 53 49 4f 4e 3b 0a 09 20 S1_3_VERSION;..
2660: 20 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 break;.#endif
2670: 0a 09 64 65 66 61 75 6c 74 3a 0a 20 20 20 20 20 ..default:.
2680: 20 20 20 20 20 20 20 6d 69 6e 5f 76 65 72 73 69 min_versi
2690: 6f 6e 20 3d 20 53 53 4c 33 5f 56 45 52 53 49 4f on = SSL3_VERSIO
26a0: 4e 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d N;. m
26b0: 61 78 5f 76 65 72 73 69 6f 6e 20 3d 20 54 4c 53 ax_version = TLS
26c0: 31 5f 33 5f 56 45 52 53 49 4f 4e 3b 0a 09 20 20 1_3_VERSION;..
26d0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a break;. }..
26e0: 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20 63 6f /* Create co
26f0: 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 66 20 ntext */. if
2700: 28 28 63 74 78 20 3d 20 53 53 4c 5f 43 54 58 5f ((ctx = SSL_CTX_
2710: 6e 65 77 28 54 4c 53 5f 73 65 72 76 65 72 5f 6d new(TLS_server_m
2720: 65 74 68 6f 64 28 29 29 29 20 3d 3d 20 4e 55 4c ethod())) == NUL
2730: 4c 29 20 7b 0a 09 54 63 6c 5f 41 70 70 65 6e 64 L) {..Tcl_Append
2740: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 52 Result(interp, R
2750: 45 41 53 4f 4e 28 29 2c 20 28 63 68 61 72 20 2a EASON(), (char *
2760: 29 20 4e 55 4c 4c 29 3b 0a 09 72 65 74 75 72 6e ) NULL);..return
2770: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 TCL_ERROR;.
2780: 7d 0a 0a 20 20 20 20 2f 2a 20 53 65 74 20 70 72 }.. /* Set pr
2790: 6f 74 6f 63 6f 6c 20 76 65 72 73 69 6f 6e 73 20 otocol versions
27a0: 2a 2f 0a 20 20 20 20 69 66 20 28 53 53 4c 5f 43 */. if (SSL_C
27b0: 54 58 5f 73 65 74 5f 6d 69 6e 5f 70 72 6f 74 6f TX_set_min_proto
27c0: 5f 76 65 72 73 69 6f 6e 28 63 74 78 2c 20 6d 69 _version(ctx, mi
27d0: 6e 5f 76 65 72 73 69 6f 6e 29 20 3d 3d 20 30 20 n_version) == 0
27e0: 7c 7c 0a 09 53 53 4c 5f 43 54 58 5f 73 65 74 5f ||..SSL_CTX_set_
27f0: 6d 61 78 5f 70 72 6f 74 6f 5f 76 65 72 73 69 6f max_proto_versio
2800: 6e 28 63 74 78 2c 20 6d 61 78 5f 76 65 72 73 69 n(ctx, max_versi
2810: 6f 6e 29 20 3d 3d 20 30 29 20 7b 0a 09 53 53 4c on) == 0) {..SSL
2820: 5f 43 54 58 5f 66 72 65 65 28 63 74 78 29 3b 0a _CTX_free(ctx);.
2830: 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f .return TCL_ERRO
2840: 52 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a R;. }.. /*
2850: 20 43 72 65 61 74 65 20 53 53 4c 20 63 6f 6e 74 Create SSL cont
2860: 65 78 74 20 2a 2f 0a 20 20 20 20 69 66 20 28 28 ext */. if ((
2870: 73 73 6c 20 3d 20 53 53 4c 5f 6e 65 77 28 63 74 ssl = SSL_new(ct
2880: 78 29 29 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 x)) == NULL) {..
2890: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 Tcl_AppendResult
28a0: 28 69 6e 74 65 72 70 2c 20 52 45 41 53 4f 4e 28 (interp, REASON(
28b0: 29 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c ), (char *) NULL
28c0: 29 3b 0a 09 53 53 4c 5f 43 54 58 5f 66 72 65 65 );..SSL_CTX_free
28d0: 28 63 74 78 29 3b 0a 09 72 65 74 75 72 6e 20 54 (ctx);..return T
28e0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a CL_ERROR;. }.
28f0: 0a 20 20 20 20 2f 2a 20 55 73 65 20 6c 69 73 74 . /* Use list
2900: 20 61 6e 64 20 6f 72 64 65 72 20 61 73 20 77 6f and order as wo
2910: 75 6c 64 20 62 65 20 73 65 6e 74 20 69 6e 20 61 uld be sent in a
2920: 20 43 6c 69 65 6e 74 48 65 6c 6c 6f 20 6f 72 20 ClientHello or
2930: 61 6c 6c 20 61 76 61 69 6c 61 62 6c 65 20 63 69 all available ci
2940: 70 68 65 72 73 20 2a 2f 0a 20 20 20 20 69 66 20 phers */. if
2950: 28 75 73 65 5f 73 75 70 70 6f 72 74 65 64 29 20 (use_supported)
2960: 7b 0a 09 73 6b 20 3d 20 53 53 4c 5f 67 65 74 31 {..sk = SSL_get1
2970: 5f 73 75 70 70 6f 72 74 65 64 5f 63 69 70 68 65 _supported_ciphe
2980: 72 73 28 73 73 6c 29 3b 0a 20 20 20 20 7d 20 65 rs(ssl);. } e
2990: 6c 73 65 20 7b 0a 09 73 6b 20 3d 20 53 53 4c 5f lse {..sk = SSL_
29a0: 67 65 74 5f 63 69 70 68 65 72 73 28 73 73 6c 29 get_ciphers(ssl)
29b0: 3b 0a 09 2f 2a 73 6b 20 3d 20 53 53 4c 5f 43 54 ;../*sk = SSL_CT
29c0: 58 5f 67 65 74 5f 63 69 70 68 65 72 73 28 63 74 X_get_ciphers(ct
29d0: 78 29 3b 2a 2f 0a 20 20 20 20 7d 0a 0a 20 20 20 x);*/. }..
29e0: 20 69 66 20 28 73 6b 20 21 3d 20 4e 55 4c 4c 29 if (sk != NULL)
29f0: 20 7b 0a 09 54 63 6c 5f 4f 62 6a 20 2a 72 65 73 {..Tcl_Obj *res
2a00: 75 6c 74 4f 62 6a 20 3d 20 4e 55 4c 4c 3b 0a 0a ultObj = NULL;..
2a10: 09 69 66 20 28 21 76 65 72 62 6f 73 65 29 20 7b .if (!verbose) {
2a20: 0a 09 20 20 20 20 63 68 61 72 20 2a 63 70 3b 0a .. char *cp;.
2a30: 09 20 20 20 20 72 65 73 75 6c 74 4f 62 6a 20 3d . resultObj =
2a40: 20 54 63 6c 5f 4e 65 77 4c 69 73 74 4f 62 6a 28 Tcl_NewListObj(
2a50: 30 2c 20 4e 55 4c 4c 29 3b 0a 09 20 20 20 20 69 0, NULL);.. i
2a60: 66 20 28 72 65 73 75 6c 74 4f 62 6a 20 3d 3d 20 f (resultObj ==
2a70: 4e 55 4c 4c 29 20 7b 0a 09 09 72 65 73 20 3d 20 NULL) {...res =
2a80: 54 43 4c 5f 45 52 52 4f 52 3b 0a 09 09 67 6f 74 TCL_ERROR;...got
2a90: 6f 20 64 6f 6e 65 3b 0a 09 20 20 20 20 7d 0a 0a o done;.. }..
2aa0: 09 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 20 . for (int i
2ab0: 3d 20 30 3b 20 69 20 3c 20 73 6b 5f 53 53 4c 5f = 0; i < sk_SSL_
2ac0: 43 49 50 48 45 52 5f 6e 75 6d 28 73 6b 29 3b 20 CIPHER_num(sk);
2ad0: 69 2b 2b 29 20 7b 0a 09 09 63 6f 6e 73 74 20 53 i++) {...const S
2ae0: 53 4c 5f 43 49 50 48 45 52 20 2a 63 20 3d 20 73 SL_CIPHER *c = s
2af0: 6b 5f 53 53 4c 5f 43 49 50 48 45 52 5f 76 61 6c k_SSL_CIPHER_val
2b00: 75 65 28 73 6b 2c 20 69 29 3b 0a 09 09 69 66 20 ue(sk, i);...if
2b10: 28 63 20 3d 3d 20 4e 55 4c 4c 29 20 63 6f 6e 74 (c == NULL) cont
2b20: 69 6e 75 65 3b 0a 0a 09 09 2f 2a 20 63 69 70 68 inue;..../* ciph
2b30: 65 72 20 6e 61 6d 65 20 6f 72 20 28 4e 4f 4e 45 er name or (NONE
2b40: 29 20 2a 2f 0a 09 09 63 70 20 3d 20 53 53 4c 5f ) */...cp = SSL_
2b50: 43 49 50 48 45 52 5f 67 65 74 5f 6e 61 6d 65 28 CIPHER_get_name(
2b60: 63 29 3b 0a 09 09 69 66 20 28 63 70 20 3d 3d 20 c);...if (cp ==
2b70: 4e 55 4c 4c 29 20 62 72 65 61 6b 3b 0a 09 09 54 NULL) break;...T
2b80: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 cl_ListObjAppend
2b90: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 Element(interp,
2ba0: 72 65 73 75 6c 74 4f 62 6a 2c 20 54 63 6c 5f 4e resultObj, Tcl_N
2bb0: 65 77 53 74 72 69 6e 67 4f 62 6a 28 63 70 2c 20 ewStringObj(cp,
2bc0: 2d 31 29 29 3b 0a 09 20 20 20 20 7d 0a 0a 09 7d -1));.. }...}
2bd0: 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 63 68 61 else {.. cha
2be0: 72 20 62 75 66 5b 42 55 46 53 49 5a 5d 3b 0a 09 r buf[BUFSIZ];..
2bf0: 20 20 20 20 72 65 73 75 6c 74 4f 62 6a 20 3d 20 resultObj =
2c00: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a Tcl_NewStringObj
2c10: 28 22 22 2c 20 30 29 3b 0a 09 20 20 20 20 69 66 ("", 0);.. if
2c20: 20 28 72 65 73 75 6c 74 4f 62 6a 20 3d 3d 20 4e (resultObj == N
2c30: 55 4c 4c 29 20 7b 0a 09 09 72 65 73 20 3d 20 54 ULL) {...res = T
2c40: 43 4c 5f 45 52 52 4f 52 3b 0a 09 09 67 6f 74 6f CL_ERROR;...goto
2c50: 20 64 6f 6e 65 3b 0a 09 20 20 20 20 7d 0a 0a 09 done;.. }...
2c60: 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 20 3d for (int i =
2c70: 20 30 3b 20 69 20 3c 20 73 6b 5f 53 53 4c 5f 43 0; i < sk_SSL_C
2c80: 49 50 48 45 52 5f 6e 75 6d 28 73 6b 29 3b 20 69 IPHER_num(sk); i
2c90: 2b 2b 29 20 7b 0a 09 09 63 6f 6e 73 74 20 53 53 ++) {...const SS
2ca0: 4c 5f 43 49 50 48 45 52 20 2a 63 20 3d 20 73 6b L_CIPHER *c = sk
2cb0: 5f 53 53 4c 5f 43 49 50 48 45 52 5f 76 61 6c 75 _SSL_CIPHER_valu
2cc0: 65 28 73 6b 2c 20 69 29 3b 0a 09 09 69 66 20 28 e(sk, i);...if (
2cd0: 63 20 3d 3d 20 4e 55 4c 4c 29 20 63 6f 6e 74 69 c == NULL) conti
2ce0: 6e 75 65 3b 0a 0a 09 09 2f 2a 20 74 65 78 74 75 nue;..../* textu
2cf0: 61 6c 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f al description o
2d00: 66 20 74 68 65 20 63 69 70 68 65 72 20 2a 2f 0a f the cipher */.
2d10: 09 09 69 66 20 28 53 53 4c 5f 43 49 50 48 45 52 ..if (SSL_CIPHER
2d20: 5f 64 65 73 63 72 69 70 74 69 6f 6e 28 63 2c 20 _description(c,
2d30: 62 75 66 2c 20 73 69 7a 65 6f 66 28 62 75 66 29 buf, sizeof(buf)
2d40: 29 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 20 ) != NULL) {...
2d50: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 54 6f 4f Tcl_AppendToO
2d60: 62 6a 28 72 65 73 75 6c 74 4f 62 6a 2c 20 62 75 bj(resultObj, bu
2d70: 66 2c 20 28 54 63 6c 5f 53 69 7a 65 29 20 73 74 f, (Tcl_Size) st
2d80: 72 6c 65 6e 28 62 75 66 29 29 3b 0a 09 09 7d 20 rlen(buf));...}
2d90: 65 6c 73 65 20 7b 0a 09 09 20 20 20 20 54 63 6c else {... Tcl
2da0: 5f 41 70 70 65 6e 64 54 6f 4f 62 6a 28 72 65 73 _AppendToObj(res
2db0: 75 6c 74 4f 62 6a 2c 20 22 55 4e 4b 4e 4f 57 4e ultObj, "UNKNOWN
2dc0: 5c 6e 22 2c 20 38 29 3b 0a 09 09 7d 0a 09 20 20 \n", 8);...}..
2dd0: 20 20 7d 0a 09 7d 0a 0a 09 2f 2a 20 43 6c 65 61 }..}.../* Clea
2de0: 6e 20 75 70 20 2a 2f 0a 09 69 66 20 28 75 73 65 n up */..if (use
2df0: 5f 73 75 70 70 6f 72 74 65 64 29 20 7b 0a 09 20 _supported) {..
2e00: 20 20 20 73 6b 5f 53 53 4c 5f 43 49 50 48 45 52 sk_SSL_CIPHER
2e10: 5f 66 72 65 65 28 73 6b 29 3b 0a 09 7d 0a 09 54 _free(sk);..}..T
2e20: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 cl_SetObjResult(
2e30: 69 6e 74 65 72 70 2c 20 72 65 73 75 6c 74 4f 62 interp, resultOb
2e40: 6a 29 3b 0a 20 20 20 20 7d 0a 0a 64 6f 6e 65 3a j);. }..done:
2e50: 0a 20 20 20 20 53 53 4c 5f 66 72 65 65 28 73 73 . SSL_free(ss
2e60: 6c 29 3b 0a 20 20 20 20 53 53 4c 5f 43 54 58 5f l);. SSL_CTX_
2e70: 66 72 65 65 28 63 74 78 29 3b 0a 20 20 20 20 72 free(ctx);. r
2e80: 65 74 75 72 6e 20 72 65 73 3b 0a 7d 0a 0a 2f 2a eturn res;.}../*
2e90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
2ea0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
2eb0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
2ec0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
2ed0: 2a 2a 2f 0a 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d **/../*. *------
2ee0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2ef0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2f00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2f10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a -------------. *
2f20: 0a 20 2a 20 44 69 67 65 73 74 49 6e 66 6f 20 2d . * DigestInfo -
2f30: 2d 0a 20 2a 0a 20 2a 09 52 65 74 75 72 6e 20 61 -. *. *.Return a
2f40: 20 6c 69 73 74 20 6f 66 20 70 72 6f 70 65 72 74 list of propert
2f50: 69 65 73 20 61 6e 64 20 76 61 6c 75 65 73 20 66 ies and values f
2f60: 6f 72 20 64 69 67 65 73 74 2e 0a 20 2a 0a 20 2a or digest.. *. *
2f70: 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 41 20 73 Results:. *.A s
2f80: 74 61 6e 64 61 72 64 20 54 63 6c 20 6c 69 73 74 tandard Tcl list
2f90: 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 .. *. * Side eff
2fa0: 65 63 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 ects:. *.None..
2fb0: 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *. *------------
2fc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2fd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2fe0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2ff0: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 69 6e 74 20 -------. */.int
3000: 44 69 67 65 73 74 49 6e 66 6f 28 54 63 6c 5f 49 DigestInfo(Tcl_I
3010: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 54 nterp *interp, T
3020: 63 6c 5f 4f 62 6a 20 2a 6e 61 6d 65 4f 62 6a 29 cl_Obj *nameObj)
3030: 20 7b 0a 20 20 20 20 45 56 50 5f 4d 44 20 2a 6d {. EVP_MD *m
3040: 64 3b 0a 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a d;. Tcl_Obj *
3050: 72 65 73 75 6c 74 4f 62 6a 2c 20 2a 6c 69 73 74 resultObj, *list
3060: 4f 62 6a 3b 0a 20 20 20 20 75 6e 73 69 67 6e 65 Obj;. unsigne
3070: 64 20 6c 6f 6e 67 20 66 6c 61 67 73 3b 0a 20 20 d long flags;.
3080: 20 20 69 6e 74 20 72 65 73 20 3d 20 54 43 4c 5f int res = TCL_
3090: 4f 4b 3b 0a 20 20 20 20 63 68 61 72 20 2a 6e 61 OK;. char *na
30a0: 6d 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 me = Tcl_GetStri
30b0: 6e 67 46 72 6f 6d 4f 62 6a 28 6e 61 6d 65 4f 62 ngFromObj(nameOb
30c0: 6a 2c 20 28 54 63 6c 5f 53 69 7a 65 20 2a 29 20 j, (Tcl_Size *)
30d0: 4e 55 4c 4c 29 3b 0a 0a 20 20 20 20 2f 2a 20 47 NULL);.. /* G
30e0: 65 74 20 6d 65 73 73 61 67 65 20 64 69 67 65 73 et message diges
30f0: 74 20 2a 2f 0a 20 20 20 20 6d 64 20 3d 20 45 56 t */. md = EV
3100: 50 5f 67 65 74 5f 64 69 67 65 73 74 62 79 6e 61 P_get_digestbyna
3110: 6d 65 28 6e 61 6d 65 29 3b 0a 0a 20 20 20 20 69 me(name);.. i
3120: 66 20 28 6d 64 20 3d 3d 20 4e 55 4c 4c 29 20 7b f (md == NULL) {
3130: 0a 09 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 ..Tcl_AppendResu
3140: 6c 74 28 69 6e 74 65 72 70 2c 20 22 49 6e 76 61 lt(interp, "Inva
3150: 6c 69 64 20 64 69 67 65 73 74 20 5c 22 22 2c 20 lid digest \"",
3160: 6e 61 6d 65 2c 20 22 5c 22 22 2c 20 28 63 68 61 name, "\"", (cha
3170: 72 20 2a 29 20 4e 55 4c 4c 29 3b 0a 09 72 65 74 r *) NULL);..ret
3180: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 urn TCL_ERROR;.
3190: 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 47 65 74 }.. /* Get
31a0: 20 70 72 6f 70 65 72 74 69 65 73 20 2a 2f 0a 20 properties */.
31b0: 20 20 20 72 65 73 75 6c 74 4f 62 6a 20 3d 20 54 resultObj = T
31c0: 63 6c 5f 4e 65 77 4c 69 73 74 4f 62 6a 28 30 2c cl_NewListObj(0,
31d0: 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 69 66 20 28 NULL);. if (
31e0: 72 65 73 75 6c 74 4f 62 6a 20 3d 3d 20 4e 55 4c resultObj == NUL
31f0: 4c 29 20 7b 0a 09 72 65 74 75 72 6e 20 54 43 4c L) {..return TCL
3200: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 _ERROR;. }.
3210: 20 20 4c 41 50 50 45 4e 44 5f 53 54 52 28 69 6e LAPPEND_STR(in
3220: 74 65 72 70 2c 20 72 65 73 75 6c 74 4f 62 6a 2c terp, resultObj,
3230: 20 22 6e 61 6d 65 22 2c 20 45 56 50 5f 4d 44 5f "name", EVP_MD_
3240: 6e 61 6d 65 28 6d 64 29 2c 20 2d 31 29 3b 0a 20 name(md), -1);.
3250: 20 20 20 4c 41 50 50 45 4e 44 5f 53 54 52 28 69 LAPPEND_STR(i
3260: 6e 74 65 72 70 2c 20 72 65 73 75 6c 74 4f 62 6a nterp, resultObj
3270: 2c 20 22 64 65 73 63 72 69 70 74 69 6f 6e 22 2c , "description",
3280: 20 22 22 2c 20 2d 31 29 3b 0a 20 20 20 20 4c 41 "", -1);. LA
3290: 50 50 45 4e 44 5f 49 4e 54 28 69 6e 74 65 72 70 PPEND_INT(interp
32a0: 2c 20 72 65 73 75 6c 74 4f 62 6a 2c 20 22 73 69 , resultObj, "si
32b0: 7a 65 22 2c 20 45 56 50 5f 4d 44 5f 73 69 7a 65 ze", EVP_MD_size
32c0: 28 6d 64 29 29 3b 0a 20 20 20 20 4c 41 50 50 45 (md));. LAPPE
32d0: 4e 44 5f 49 4e 54 28 69 6e 74 65 72 70 2c 20 72 ND_INT(interp, r
32e0: 65 73 75 6c 74 4f 62 6a 2c 20 22 62 6c 6f 63 6b esultObj, "block
32f0: 5f 73 69 7a 65 22 2c 20 45 56 50 5f 4d 44 5f 62 _size", EVP_MD_b
3300: 6c 6f 63 6b 5f 73 69 7a 65 28 6d 64 29 29 3b 0a lock_size(md));.
3310: 20 20 20 20 4c 41 50 50 45 4e 44 5f 53 54 52 28 LAPPEND_STR(
3320: 69 6e 74 65 72 70 2c 20 72 65 73 75 6c 74 4f 62 interp, resultOb
3330: 6a 2c 20 22 70 72 6f 76 69 64 65 72 22 2c 20 22 j, "provider", "
3340: 22 2c 20 2d 31 29 3b 0a 20 20 20 20 4c 41 50 50 ", -1);. LAPP
3350: 45 4e 44 5f 53 54 52 28 69 6e 74 65 72 70 2c 20 END_STR(interp,
3360: 72 65 73 75 6c 74 4f 62 6a 2c 20 22 74 79 70 65 resultObj, "type
3370: 22 2c 20 4f 42 4a 5f 6e 69 64 32 6c 6e 28 45 56 ", OBJ_nid2ln(EV
3380: 50 5f 4d 44 5f 74 79 70 65 28 6d 64 29 29 2c 20 P_MD_type(md)),
3390: 2d 31 29 3b 0a 20 20 20 20 4c 41 50 50 45 4e 44 -1);. LAPPEND
33a0: 5f 53 54 52 28 69 6e 74 65 72 70 2c 20 72 65 73 _STR(interp, res
33b0: 75 6c 74 4f 62 6a 2c 20 22 70 6b 65 79 5f 74 79 ultObj, "pkey_ty
33c0: 70 65 22 2c 20 4f 42 4a 5f 6e 69 64 32 6c 6e 28 pe", OBJ_nid2ln(
33d0: 45 56 50 5f 4d 44 5f 70 6b 65 79 5f 74 79 70 65 EVP_MD_pkey_type
33e0: 28 6d 64 29 29 2c 20 2d 31 29 3b 0a 20 20 20 20 (md)), -1);.
33f0: 66 6c 61 67 73 20 3d 20 45 56 50 5f 4d 44 5f 66 flags = EVP_MD_f
3400: 6c 61 67 73 28 6d 64 29 3b 0a 0a 20 20 20 20 2f lags(md);.. /
3410: 2a 20 46 6c 61 67 73 20 2a 2f 0a 20 20 20 20 6c * Flags */. l
3420: 69 73 74 4f 62 6a 20 3d 20 54 63 6c 5f 4e 65 77 istObj = Tcl_New
3430: 4c 69 73 74 4f 62 6a 28 30 2c 20 4e 55 4c 4c 29 ListObj(0, NULL)
3440: 3b 0a 20 20 20 20 4c 41 50 50 45 4e 44 5f 42 4f ;. LAPPEND_BO
3450: 4f 4c 28 69 6e 74 65 72 70 2c 20 6c 69 73 74 4f OL(interp, listO
3460: 62 6a 2c 20 22 4f 6e 65 2d 73 68 6f 74 22 2c 20 bj, "One-shot",
3470: 66 6c 61 67 73 20 26 20 45 56 50 5f 4d 44 5f 46 flags & EVP_MD_F
3480: 4c 41 47 5f 4f 4e 45 53 48 4f 54 29 3b 0a 20 20 LAG_ONESHOT);.
3490: 20 20 4c 41 50 50 45 4e 44 5f 42 4f 4f 4c 28 69 LAPPEND_BOOL(i
34a0: 6e 74 65 72 70 2c 20 6c 69 73 74 4f 62 6a 2c 20 nterp, listObj,
34b0: 22 58 4f 46 22 2c 20 66 6c 61 67 73 20 26 20 45 "XOF", flags & E
34c0: 56 50 5f 4d 44 5f 46 4c 41 47 5f 58 4f 46 29 3b VP_MD_FLAG_XOF);
34d0: 0a 20 20 20 20 4c 41 50 50 45 4e 44 5f 42 4f 4f . LAPPEND_BOO
34e0: 4c 28 69 6e 74 65 72 70 2c 20 6c 69 73 74 4f 62 L(interp, listOb
34f0: 6a 2c 20 22 44 69 67 65 73 74 41 6c 67 6f 72 69 j, "DigestAlgori
3500: 74 68 6d 49 64 5f 4e 55 4c 4c 22 2c 20 66 6c 61 thmId_NULL", fla
3510: 67 73 20 26 20 45 56 50 5f 4d 44 5f 46 4c 41 47 gs & EVP_MD_FLAG
3520: 5f 44 49 47 41 4c 47 49 44 5f 4e 55 4c 4c 29 3b _DIGALGID_NULL);
3530: 0a 20 20 20 20 4c 41 50 50 45 4e 44 5f 42 4f 4f . LAPPEND_BOO
3540: 4c 28 69 6e 74 65 72 70 2c 20 6c 69 73 74 4f 62 L(interp, listOb
3550: 6a 2c 20 22 44 69 67 65 73 74 41 6c 67 6f 72 69 j, "DigestAlgori
3560: 74 68 6d 49 64 5f 41 62 73 63 65 6e 74 22 2c 20 thmId_Abscent",
3570: 66 6c 61 67 73 20 26 20 45 56 50 5f 4d 44 5f 46 flags & EVP_MD_F
3580: 4c 41 47 5f 44 49 47 41 4c 47 49 44 5f 41 42 53 LAG_DIGALGID_ABS
3590: 45 4e 54 29 3b 0a 20 20 20 20 4c 41 50 50 45 4e ENT);. LAPPEN
35a0: 44 5f 42 4f 4f 4c 28 69 6e 74 65 72 70 2c 20 6c D_BOOL(interp, l
35b0: 69 73 74 4f 62 6a 2c 20 22 44 69 67 65 73 74 41 istObj, "DigestA
35c0: 6c 67 6f 72 69 74 68 6d 49 64 5f 43 75 73 74 6f lgorithmId_Custo
35d0: 6d 22 2c 20 66 6c 61 67 73 20 26 20 45 56 50 5f m", flags & EVP_
35e0: 4d 44 5f 46 4c 41 47 5f 44 49 47 41 4c 47 49 44 MD_FLAG_DIGALGID
35f0: 5f 43 55 53 54 4f 4d 29 3b 0a 20 20 20 20 4c 41 _CUSTOM);. LA
3600: 50 50 45 4e 44 5f 42 4f 4f 4c 28 69 6e 74 65 72 PPEND_BOOL(inter
3610: 70 2c 20 6c 69 73 74 4f 62 6a 2c 20 22 46 49 50 p, listObj, "FIP
3620: 53 22 2c 20 66 6c 61 67 73 20 26 20 45 56 50 5f S", flags & EVP_
3630: 4d 44 5f 46 4c 41 47 5f 46 49 50 53 29 3b 0a 20 MD_FLAG_FIPS);.
3640: 20 20 20 4c 41 50 50 45 4e 44 5f 4f 42 4a 28 69 LAPPEND_OBJ(i
3650: 6e 74 65 72 70 2c 20 72 65 73 75 6c 74 4f 62 6a nterp, resultObj
3660: 2c 20 22 66 6c 61 67 73 22 2c 20 6c 69 73 74 4f , "flags", listO
3670: 62 6a 29 3b 0a 0a 20 20 20 20 54 63 6c 5f 53 65 bj);.. Tcl_Se
3680: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 tObjResult(inter
3690: 70 2c 20 72 65 73 75 6c 74 4f 62 6a 29 3b 0a 20 p, resultObj);.
36a0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b return TCL_OK
36b0: 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d ;.}../*. *------
36c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
36d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
36e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
36f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a -------------. *
3700: 0a 20 2a 20 44 69 67 65 73 74 4c 69 73 74 20 2d . * DigestList -
3710: 2d 0a 20 2a 0a 20 2a 09 52 65 74 75 72 6e 20 61 -. *. *.Return a
3720: 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 64 69 67 list of all dig
3730: 65 73 74 20 61 6c 67 6f 72 69 74 68 6d 73 0a 20 est algorithms.
3740: 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a *. * Results:. *
3750: 09 41 20 73 74 61 6e 64 61 72 64 20 54 63 6c 20 .A standard Tcl
3760: 6c 69 73 74 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 list.. *. * Side
3770: 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 4e 6f 6e effects:. *.Non
3780: 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d e.. *. *--------
3790: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
37a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
37b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
37c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a -----------. */.
37d0: 69 6e 74 20 44 69 67 65 73 74 4c 69 73 74 28 54 int DigestList(T
37e0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 cl_Interp *inter
37f0: 70 29 20 7b 0a 20 20 20 20 54 63 6c 5f 4f 62 6a p) {. Tcl_Obj
3800: 20 2a 72 65 73 75 6c 74 4f 62 6a 20 3d 20 54 63 *resultObj = Tc
3810: 6c 5f 4e 65 77 4c 69 73 74 4f 62 6a 28 30 2c 20 l_NewListObj(0,
3820: 4e 55 4c 4c 29 3b 0a 20 20 20 20 69 66 20 28 72 NULL);. if (r
3830: 65 73 75 6c 74 4f 62 6a 20 3d 3d 20 4e 55 4c 4c esultObj == NULL
3840: 29 20 7b 0a 09 72 65 74 75 72 6e 20 54 43 4c 5f ) {..return TCL_
3850: 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 0a 20 20 ERROR;. }..
3860: 20 20 2f 2a 20 53 61 6d 65 20 61 73 20 45 56 50 /* Same as EVP
3870: 5f 4d 44 5f 64 6f 5f 61 6c 6c 20 2a 2f 0a 20 20 _MD_do_all */.
3880: 20 20 4f 42 4a 5f 4e 41 4d 45 5f 64 6f 5f 61 6c OBJ_NAME_do_al
3890: 6c 28 4f 42 4a 5f 4e 41 4d 45 5f 54 59 50 45 5f l(OBJ_NAME_TYPE_
38a0: 4d 44 5f 4d 45 54 48 2c 20 4e 61 6d 65 73 43 61 MD_METH, NamesCa
38b0: 6c 6c 62 61 63 6b 2c 20 28 76 6f 69 64 20 2a 29 llback, (void *)
38c0: 20 72 65 73 75 6c 74 4f 62 6a 29 3b 0a 20 20 20 resultObj);.
38d0: 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c Tcl_SetObjResul
38e0: 74 28 69 6e 74 65 72 70 2c 20 72 65 73 75 6c 74 t(interp, result
38f0: 4f 62 6a 29 3b 0a 20 20 20 20 72 65 74 75 72 6e Obj);. return
3900: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 20 TCL_OK;.}../*.
3910: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *---------------
3920: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3930: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3940: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3950: 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 44 69 67 65 73 ----. *. * Diges
3960: 74 73 4f 62 6a 43 6d 64 20 2d 2d 0a 20 2a 0a 20 tsObjCmd --. *.
3970: 2a 09 52 65 74 75 72 6e 20 61 20 6c 69 73 74 20 *.Return a list
3980: 6f 66 20 61 6c 6c 20 76 61 6c 69 64 20 68 61 73 of all valid has
3990: 68 20 61 6c 67 6f 72 69 74 68 6d 73 20 6f 72 20 h algorithms or
39a0: 6d 65 73 73 61 67 65 20 64 69 67 65 73 74 73 2e message digests.
39b0: 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a . *. * Results:.
39c0: 20 2a 09 41 20 73 74 61 6e 64 61 72 64 20 54 63 *.A standard Tc
39d0: 6c 20 6c 69 73 74 2e 0a 20 2a 0a 20 2a 20 53 69 l list.. *. * Si
39e0: 64 65 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 4e de effects:. *.N
39f0: 6f 6e 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d one.. *. *------
3a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3a20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3a30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a -------------. *
3a40: 2f 0a 69 6e 74 20 44 69 67 65 73 74 73 4f 62 6a /.int DigestsObj
3a50: 43 6d 64 28 43 6c 69 65 6e 74 44 61 74 61 20 63 Cmd(ClientData c
3a60: 6c 69 65 6e 74 44 61 74 61 2c 20 54 63 6c 5f 49 lientData, Tcl_I
3a70: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 nterp *interp, i
3a80: 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a nt objc, Tcl_Obj
3a90: 20 2a 63 6f 6e 73 74 20 6f 62 6a 76 5b 5d 29 20 *const objv[])
3aa0: 7b 0a 20 20 20 20 28 76 6f 69 64 29 20 63 6c 69 {. (void) cli
3ab0: 65 6e 74 44 61 74 61 3b 0a 0a 20 20 20 20 64 70 entData;.. dp
3ac0: 72 69 6e 74 66 28 22 43 61 6c 6c 65 64 22 29 3b rintf("Called");
3ad0: 0a 0a 20 20 20 20 2f 2a 20 43 6c 65 61 72 20 65 .. /* Clear e
3ae0: 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20 54 63 6c rrors */. Tcl
3af0: 5f 52 65 73 65 74 52 65 73 75 6c 74 28 69 6e 74 _ResetResult(int
3b00: 65 72 70 29 3b 0a 20 20 20 20 45 52 52 5f 63 6c erp);. ERR_cl
3b10: 65 61 72 5f 65 72 72 6f 72 28 29 3b 0a 0a 0a 20 ear_error();...
3b20: 20 20 20 2f 2a 20 56 61 6c 69 64 61 74 65 20 61 /* Validate a
3b30: 72 67 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 rg count */.
3b40: 69 66 20 28 6f 62 6a 63 20 3d 3d 20 31 29 20 7b if (objc == 1) {
3b50: 0a 09 72 65 74 75 72 6e 20 44 69 67 65 73 74 4c ..return DigestL
3b60: 69 73 74 28 69 6e 74 65 72 70 29 3b 0a 0a 20 20 ist(interp);..
3b70: 20 20 7d 20 65 6c 73 65 20 69 66 20 28 6f 62 6a } else if (obj
3b80: 63 20 3d 3d 20 32 29 20 7b 0a 09 72 65 74 75 72 c == 2) {..retur
3b90: 6e 20 44 69 67 65 73 74 49 6e 66 6f 28 69 6e 74 n DigestInfo(int
3ba0: 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 29 3b 0a 0a erp, objv[1]);..
3bb0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 54 63 } else {..Tc
3bc0: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 l_WrongNumArgs(i
3bd0: 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 nterp, 1, objv,
3be0: 22 3f 6e 61 6d 65 3f 22 29 3b 0a 09 72 65 74 75 "?name?");..retu
3bf0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 rn TCL_ERROR;.
3c00: 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 54 }. return T
3c10: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a CL_OK;.}../*****
3c20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
3c30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
3c40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
3c50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a **************/.
3c60: 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ./*. *----------
3c70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3c80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3c90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3ca0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 ---------. *. *
3cb0: 4b 64 66 4c 69 73 74 20 2d 2d 0a 20 2a 0a 20 2a KdfList --. *. *
3cc0: 09 52 65 74 75 72 6e 20 61 20 6c 69 73 74 20 6f .Return a list o
3cd0: 66 20 61 6c 6c 20 4b 44 46 20 61 6c 67 6f 72 69 f all KDF algori
3ce0: 74 68 6d 73 0a 20 2a 0a 20 2a 20 52 65 73 75 6c thms. *. * Resul
3cf0: 74 73 3a 0a 20 2a 09 41 20 73 74 61 6e 64 61 72 ts:. *.A standar
3d00: 64 20 54 63 6c 20 6c 69 73 74 2e 0a 20 2a 0a 20 d Tcl list.. *.
3d10: 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a * Side effects:.
3d20: 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 2d 2d *.None.. *. *--
3d30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3d40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3d50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3d60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3d70: 2d 0a 20 2a 2f 0a 69 6e 74 20 4b 64 66 4c 69 73 -. */.int KdfLis
3d80: 74 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e t(Tcl_Interp *in
3d90: 74 65 72 70 2c 20 63 68 61 72 20 2a 73 65 6c 65 terp, char *sele
3da0: 63 74 5f 6e 61 6d 65 29 20 7b 0a 20 20 20 20 54 ct_name) {. T
3db0: 63 6c 5f 4f 62 6a 20 2a 72 65 73 75 6c 74 4f 62 cl_Obj *resultOb
3dc0: 6a 20 3d 20 54 63 6c 5f 4e 65 77 4c 69 73 74 4f j = Tcl_NewListO
3dd0: 62 6a 28 30 2c 20 4e 55 4c 4c 29 3b 0a 20 20 20 bj(0, NULL);.
3de0: 20 69 66 20 28 72 65 73 75 6c 74 4f 62 6a 20 3d if (resultObj =
3df0: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 72 65 74 75 72 = NULL) {..retur
3e00: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 n TCL_ERROR;.
3e10: 20 7d 0a 0a 20 20 20 20 54 63 6c 5f 4c 69 73 74 }.. Tcl_List
3e20: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 ObjAppendElement
3e30: 28 69 6e 74 65 72 70 2c 20 72 65 73 75 6c 74 4f (interp, resultO
3e40: 62 6a 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e bj, Tcl_NewStrin
3e50: 67 4f 62 6a 28 22 68 6b 64 66 22 2c 20 2d 31 29 gObj("hkdf", -1)
3e60: 29 3b 0a 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f );. Tcl_ListO
3e70: 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 bjAppendElement(
3e80: 69 6e 74 65 72 70 2c 20 72 65 73 75 6c 74 4f 62 interp, resultOb
3e90: 6a 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 j, Tcl_NewString
3ea0: 4f 62 6a 28 22 70 62 6b 64 66 32 22 2c 20 2d 31 Obj("pbkdf2", -1
3eb0: 29 29 3b 0a 20 20 20 20 54 63 6c 5f 4c 69 73 74 ));. Tcl_List
3ec0: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 ObjAppendElement
3ed0: 28 69 6e 74 65 72 70 2c 20 72 65 73 75 6c 74 4f (interp, resultO
3ee0: 62 6a 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e bj, Tcl_NewStrin
3ef0: 67 4f 62 6a 28 22 73 63 72 79 70 74 22 2c 20 2d gObj("scrypt", -
3f00: 31 29 29 3b 0a 20 20 20 20 54 63 6c 5f 53 65 74 1));. Tcl_Set
3f10: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 ObjResult(interp
3f20: 2c 20 72 65 73 75 6c 74 4f 62 6a 29 3b 0a 20 20 , resultObj);.
3f30: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b return TCL_OK;
3f40: 0a 7d 0a 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d .}../*. *-------
3f50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3f60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3f70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3f80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a ------------. *.
3f90: 20 2a 20 4b 64 66 73 4f 62 6a 43 6d 64 20 2d 2d * KdfsObjCmd --
3fa0: 0a 20 2a 0a 20 2a 09 52 65 74 75 72 6e 20 61 20 . *. *.Return a
3fb0: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 76 61 6c 69 list of all vali
3fc0: 64 20 4b 65 79 20 44 65 72 69 76 61 74 69 6f 6e d Key Derivation
3fd0: 20 46 75 6e 63 74 69 6f 6e 20 28 4b 44 46 29 2e Function (KDF).
3fe0: 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a . *. * Results:.
3ff0: 20 2a 09 41 20 73 74 61 6e 64 61 72 64 20 54 63 *.A standard Tc
4000: 6c 20 6c 69 73 74 2e 0a 20 2a 0a 20 2a 20 53 69 l list.. *. * Si
4010: 64 65 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 4e de effects:. *.N
4020: 6f 6e 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d one.. *. *------
4030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4060: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a -------------. *
4070: 2f 0a 69 6e 74 20 4b 64 66 73 4f 62 6a 43 6d 64 /.int KdfsObjCmd
4080: 28 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 (ClientData clie
4090: 6e 74 44 61 74 61 2c 20 54 63 6c 5f 49 6e 74 65 ntData, Tcl_Inte
40a0: 72 70 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 rp *interp, int
40b0: 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 63 objc, Tcl_Obj *c
40c0: 6f 6e 73 74 20 6f 62 6a 76 5b 5d 29 20 7b 0a 20 onst objv[]) {.
40d0: 20 20 20 28 76 6f 69 64 29 20 63 6c 69 65 6e 74 (void) client
40e0: 44 61 74 61 3b 0a 0a 20 20 20 20 64 70 72 69 6e Data;.. dprin
40f0: 74 66 28 22 43 61 6c 6c 65 64 22 29 3b 0a 0a 20 tf("Called");..
4100: 20 20 20 2f 2a 20 43 6c 65 61 72 20 65 72 72 6f /* Clear erro
4110: 72 73 20 2a 2f 0a 20 20 20 20 54 63 6c 5f 52 65 rs */. Tcl_Re
4120: 73 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 setResult(interp
4130: 29 3b 0a 20 20 20 20 45 52 52 5f 63 6c 65 61 72 );. ERR_clear
4140: 5f 65 72 72 6f 72 28 29 3b 0a 0a 0a 20 20 20 20 _error();...
4150: 2f 2a 20 56 61 6c 69 64 61 74 65 20 61 72 67 20 /* Validate arg
4160: 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 69 66 20 count */. if
4170: 28 6f 62 6a 63 20 3d 3d 20 31 29 20 7b 0a 09 72 (objc == 1) {..r
4180: 65 74 75 72 6e 20 4b 64 66 4c 69 73 74 28 69 6e eturn KdfList(in
4190: 74 65 72 70 2c 20 4e 55 4c 4c 29 3b 0a 0a 20 20 terp, NULL);..
41a0: 20 20 7d 20 65 6c 73 65 20 69 66 20 28 6f 62 6a } else if (obj
41b0: 63 20 3d 3d 20 32 29 20 7b 0a 0a 0a 20 20 20 20 c == 2) {...
41c0: 7d 20 65 6c 73 65 20 7b 0a 09 54 63 6c 5f 57 72 } else {..Tcl_Wr
41d0: 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 ongNumArgs(inter
41e0: 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3f 6e 61 p, 1, objv, "?na
41f0: 6d 65 3f 22 29 3b 0a 09 72 65 74 75 72 6e 20 54 me?");..return T
4200: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a CL_ERROR;. }.
4210: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f return TCL_O
4220: 4b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a K;.}../*********
4230: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
4240: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
4250: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
4260: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 0a **********/../*.
4270: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *--------------
4280: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4290: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
42a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
42b0: 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 4d 61 63 49 -----. *. * MacI
42c0: 6e 66 6f 20 2d 2d 0a 20 2a 0a 20 2a 09 52 65 74 nfo --. *. *.Ret
42d0: 75 72 6e 20 61 20 6c 69 73 74 20 6f 66 20 70 72 urn a list of pr
42e0: 6f 70 65 72 74 69 65 73 20 61 6e 64 20 76 61 6c operties and val
42f0: 75 65 73 20 66 6f 72 20 6d 61 63 4e 61 6d 65 2e ues for macName.
4300: 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a . *. * Results:.
4310: 20 2a 09 41 20 73 74 61 6e 64 61 72 64 20 54 63 *.A standard Tc
4320: 6c 20 6c 69 73 74 2e 0a 20 2a 0a 20 2a 20 53 69 l list.. *. * Si
4330: 64 65 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 4e de effects:. *.N
4340: 6f 6e 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d one.. *. *------
4350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4360: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4370: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4380: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a -------------. *
4390: 2f 0a 69 6e 74 20 4d 61 63 49 6e 66 6f 28 54 63 /.int MacInfo(Tc
43a0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 l_Interp *interp
43b0: 2c 20 54 63 6c 5f 4f 62 6a 20 2a 6e 61 6d 65 4f , Tcl_Obj *nameO
43c0: 62 6a 29 20 7b 0a 20 20 20 20 54 63 6c 5f 4f 62 bj) {. Tcl_Ob
43d0: 6a 20 2a 72 65 73 75 6c 74 4f 62 6a 3b 0a 20 20 j *resultObj;.
43e0: 20 20 69 6e 74 20 72 65 73 20 3d 20 54 43 4c 5f int res = TCL_
43f0: 4f 4b 3b 0a 20 20 20 20 63 68 61 72 20 2a 6e 61 OK;. char *na
4400: 6d 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 me = Tcl_GetStri
4410: 6e 67 46 72 6f 6d 4f 62 6a 28 6e 61 6d 65 4f 62 ngFromObj(nameOb
4420: 6a 2c 20 28 54 63 6c 5f 53 69 7a 65 20 2a 29 20 j, (Tcl_Size *)
4430: 4e 55 4c 4c 29 3b 0a 0a 20 20 20 20 69 66 20 28 NULL);.. if (
4440: 73 74 72 63 6d 70 28 6e 61 6d 65 2c 20 22 63 6d strcmp(name, "cm
4450: 61 63 22 29 20 21 3d 20 30 20 26 26 20 73 74 72 ac") != 0 && str
4460: 63 6d 70 28 6e 61 6d 65 2c 20 22 68 6d 61 63 22 cmp(name, "hmac"
4470: 29 20 21 3d 20 30 29 20 7b 0a 09 54 63 6c 5f 41 ) != 0) {..Tcl_A
4480: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 ppendResult(inte
4490: 72 70 2c 20 22 49 6e 76 61 6c 69 64 20 4d 41 43 rp, "Invalid MAC
44a0: 20 5c 22 22 2c 20 6e 61 6d 65 2c 20 22 5c 22 22 \"", name, "\""
44b0: 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 , (char *) NULL)
44c0: 3b 0a 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 ;..return TCL_ER
44d0: 52 4f 52 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 ROR;. }..
44e0: 2f 2a 20 47 65 74 20 70 72 6f 70 65 72 74 69 65 /* Get propertie
44f0: 73 20 2a 2f 0a 20 20 20 20 72 65 73 75 6c 74 4f s */. resultO
4500: 62 6a 20 3d 20 54 63 6c 5f 4e 65 77 4c 69 73 74 bj = Tcl_NewList
4510: 4f 62 6a 28 30 2c 20 4e 55 4c 4c 29 3b 0a 20 20 Obj(0, NULL);.
4520: 20 20 69 66 20 28 72 65 73 75 6c 74 4f 62 6a 20 if (resultObj
4530: 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 72 65 74 75 == NULL) {..retu
4540: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 rn TCL_ERROR;.
4550: 20 20 7d 0a 20 20 20 20 4c 41 50 50 45 4e 44 5f }. LAPPEND_
4560: 53 54 52 28 69 6e 74 65 72 70 2c 20 72 65 73 75 STR(interp, resu
4570: 6c 74 4f 62 6a 2c 20 22 6e 61 6d 65 22 2c 20 6e ltObj, "name", n
4580: 61 6d 65 2c 20 2d 31 29 3b 0a 20 20 20 20 4c 41 ame, -1);. LA
4590: 50 50 45 4e 44 5f 53 54 52 28 69 6e 74 65 72 70 PPEND_STR(interp
45a0: 2c 20 72 65 73 75 6c 74 4f 62 6a 2c 20 22 64 65 , resultObj, "de
45b0: 73 63 72 69 70 74 69 6f 6e 22 2c 20 22 22 2c 20 scription", "",
45c0: 2d 31 29 3b 0a 20 20 20 20 4c 41 50 50 45 4e 44 -1);. LAPPEND
45d0: 5f 53 54 52 28 69 6e 74 65 72 70 2c 20 72 65 73 _STR(interp, res
45e0: 75 6c 74 4f 62 6a 2c 20 22 70 72 6f 76 69 64 65 ultObj, "provide
45f0: 72 22 2c 20 22 22 2c 20 2d 31 29 3b 0a 0a 20 20 r", "", -1);..
4600: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 Tcl_SetObjResu
4610: 6c 74 28 69 6e 74 65 72 70 2c 20 72 65 73 75 6c lt(interp, resul
4620: 74 4f 62 6a 29 3b 0a 20 20 20 20 72 65 74 75 72 tObj);. retur
4630: 6e 20 72 65 73 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 2d n res;.}../*. *-
4640: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4650: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4660: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4670: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4680: 2d 2d 0a 20 2a 0a 20 2a 20 4d 61 63 4c 69 73 74 --. *. * MacList
4690: 20 2d 2d 0a 20 2a 0a 20 2a 09 52 65 74 75 72 6e --. *. *.Return
46a0: 20 61 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 4d a list of all M
46b0: 41 43 20 61 6c 67 6f 72 69 74 68 6d 73 0a 20 2a AC algorithms. *
46c0: 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 . * Results:. *.
46d0: 41 20 73 74 61 6e 64 61 72 64 20 54 63 6c 20 6c A standard Tcl l
46e0: 69 73 74 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 ist.. *. * Side
46f0: 65 66 66 65 63 74 73 3a 0a 20 2a 09 4e 6f 6e 65 effects:. *.None
4700: 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d .. *. *---------
4710: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4720: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 69 ----------. */.i
4750: 6e 74 20 4d 61 63 4c 69 73 74 28 54 63 6c 5f 49 nt MacList(Tcl_I
4760: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 29 20 7b nterp *interp) {
4770: 0a 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 72 65 . Tcl_Obj *re
4780: 73 75 6c 74 4f 62 6a 20 3d 20 54 63 6c 5f 4e 65 sultObj = Tcl_Ne
4790: 77 4c 69 73 74 4f 62 6a 28 30 2c 20 4e 55 4c 4c wListObj(0, NULL
47a0: 29 3b 0a 20 20 20 20 69 66 20 28 72 65 73 75 6c );. if (resul
47b0: 74 4f 62 6a 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a tObj == NULL) {.
47c0: 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f .return TCL_ERRO
47d0: 52 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 54 63 R;. }.. Tc
47e0: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 l_ListObjAppendE
47f0: 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 72 lement(interp, r
4800: 65 73 75 6c 74 4f 62 6a 2c 20 54 63 6c 5f 4e 65 esultObj, Tcl_Ne
4810: 77 53 74 72 69 6e 67 4f 62 6a 28 22 63 6d 61 63 wStringObj("cmac
4820: 22 2c 20 2d 31 29 29 3b 0a 20 20 20 20 54 63 6c ", -1));. Tcl
4830: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c _ListObjAppendEl
4840: 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 72 65 ement(interp, re
4850: 73 75 6c 74 4f 62 6a 2c 20 54 63 6c 5f 4e 65 77 sultObj, Tcl_New
4860: 53 74 72 69 6e 67 4f 62 6a 28 22 68 6d 61 63 22 StringObj("hmac"
4870: 2c 20 2d 31 29 29 3b 0a 20 20 20 20 54 63 6c 5f , -1));. Tcl_
4880: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 SetObjResult(int
4890: 65 72 70 2c 20 72 65 73 75 6c 74 4f 62 6a 29 3b erp, resultObj);
48a0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f . return TCL_
48b0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 2d 2d 2d 2d OK;.}../*. *----
48c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
48d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
48e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
48f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a ---------------.
4900: 20 2a 0a 20 2a 20 4d 61 63 73 4f 62 6a 43 6d 64 *. * MacsObjCmd
4910: 20 2d 2d 0a 20 2a 0a 20 2a 09 52 65 74 75 72 6e --. *. *.Return
4920: 20 61 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 76 a list of all v
4930: 61 6c 69 64 20 6d 65 73 73 61 67 65 20 61 75 74 alid message aut
4940: 68 65 6e 74 69 63 61 74 69 6f 6e 20 63 6f 64 65 hentication code
4950: 73 20 28 4d 41 43 29 2e 0a 20 2a 0a 20 2a 20 52 s (MAC).. *. * R
4960: 65 73 75 6c 74 73 3a 0a 20 2a 09 41 20 73 74 61 esults:. *.A sta
4970: 6e 64 61 72 64 20 54 63 6c 20 6c 69 73 74 2e 0a ndard Tcl list..
4980: 20 2a 0a 20 2a 20 53 69 64 65 20 65 66 66 65 63 *. * Side effec
4990: 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a ts:. *.None.. *.
49a0: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *--------------
49b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
49c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
49d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
49e0: 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 69 6e 74 20 4d 61 -----. */.int Ma
49f0: 63 73 4f 62 6a 43 6d 64 28 43 6c 69 65 6e 74 44 csObjCmd(ClientD
4a00: 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 ata clientData,
4a10: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 Tcl_Interp *inte
4a20: 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 rp, int objc, Tc
4a30: 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 74 20 6f 62 6a l_Obj *const obj
4a40: 76 5b 5d 29 20 7b 0a 20 20 20 20 28 76 6f 69 64 v[]) {. (void
4a50: 29 20 63 6c 69 65 6e 74 44 61 74 61 3b 0a 0a 20 ) clientData;..
4a60: 20 20 20 64 70 72 69 6e 74 66 28 22 43 61 6c 6c dprintf("Call
4a70: 65 64 22 29 3b 0a 0a 20 20 20 20 2f 2a 20 43 6c ed");.. /* Cl
4a80: 65 61 72 20 65 72 72 6f 72 73 20 2a 2f 0a 20 20 ear errors */.
4a90: 20 20 54 63 6c 5f 52 65 73 65 74 52 65 73 75 6c Tcl_ResetResul
4aa0: 74 28 69 6e 74 65 72 70 29 3b 0a 20 20 20 20 45 t(interp);. E
4ab0: 52 52 5f 63 6c 65 61 72 5f 65 72 72 6f 72 28 29 RR_clear_error()
4ac0: 3b 0a 0a 20 20 20 20 2f 2a 20 56 61 6c 69 64 61 ;.. /* Valida
4ad0: 74 65 20 61 72 67 20 63 6f 75 6e 74 20 2a 2f 0a te arg count */.
4ae0: 20 20 20 20 69 66 20 28 6f 62 6a 63 20 3d 3d 20 if (objc ==
4af0: 31 29 20 7b 0a 09 72 65 74 75 72 6e 20 4d 61 63 1) {..return Mac
4b00: 4c 69 73 74 28 69 6e 74 65 72 70 29 3b 0a 0a 20 List(interp);..
4b10: 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 6f 62 } else if (ob
4b20: 6a 63 20 3d 3d 20 32 29 20 7b 0a 09 72 65 74 75 jc == 2) {..retu
4b30: 72 6e 20 4d 61 63 49 6e 66 6f 28 69 6e 74 65 72 rn MacInfo(inter
4b40: 70 2c 20 6f 62 6a 76 5b 31 5d 29 3b 0a 0a 20 20 p, objv[1]);..
4b50: 20 20 7d 20 65 6c 73 65 20 7b 0a 09 54 63 6c 5f } else {..Tcl_
4b60: 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 WrongNumArgs(int
4b70: 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3f erp, 1, objv, "?
4b80: 6e 61 6d 65 3f 22 29 3b 0a 09 72 65 74 75 72 6e name?");..return
4b90: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 TCL_ERROR;.
4ba0: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c }. return TCL
4bb0: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a _OK;.}../*******
4bc0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
4bd0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
4be0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
4bf0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f ************/../
4c00: 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *. *------------
4c10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4c20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4c30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4c40: 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 50 6b -------. *. * Pk
4c50: 65 79 49 6e 66 6f 20 2d 2d 0a 20 2a 0a 20 2a 09 eyInfo --. *. *.
4c60: 52 65 74 75 72 6e 20 61 20 6c 69 73 74 20 6f 66 Return a list of
4c70: 20 70 72 6f 70 65 72 74 69 65 73 20 61 6e 64 20 properties and
4c80: 76 61 6c 75 65 73 20 66 6f 72 20 70 6b 65 79 2e values for pkey.
4c90: 0a 20 2a 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a . *. * Results:.
4ca0: 20 2a 09 41 20 73 74 61 6e 64 61 72 64 20 54 63 *.A standard Tc
4cb0: 6c 20 6c 69 73 74 2e 0a 20 2a 0a 20 2a 20 53 69 l list.. *. * Si
4cc0: 64 65 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 4e de effects:. *.N
4cd0: 6f 6e 65 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d one.. *. *------
4ce0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4cf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4d00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
4d10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a -------------. *
4d20: 2f 0a 69 6e 74 20 50 6b 65 79 49 6e 66 6f 28 54 /.int PkeyInfo(T
4d30: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 cl_Interp *inter
4d40: 70 2c 20 54 63 6c 5f 4f 62 6a 20 2a 6e 61 6d 65 p, Tcl_Obj *name
4d50: 4f 62 6a 29 20 7b 0a 20 20 20 20 54 63 6c 5f 4f Obj) {. Tcl_O
4d60: 62 6a 20 2a 72 65 73 75 6c 74 4f 62 6a 3b 0a 20 bj *resultObj;.
4d70: 20 20 20 69 6e 74 20 72 65 73 20 3d 20 54 43 4c int res = TCL
4d80: 5f 4f 4b 3b 0a 20 20 20 20 63 68 61 72 20 2a 6e _OK;. char *n
4d90: 61 6d 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 ame = Tcl_GetStr
4da0: 69 6e 67 46 72 6f 6d 4f 62 6a 28 6e 61 6d 65 4f ingFromObj(nameO
4db0: 62 6a 2c 20 28 54 63 6c 5f 53 69 7a 65 20 2a 29 bj, (Tcl_Size *)
4dc0: 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 45 56 50 5f NULL);. EVP_
4dd0: 50 4b 45 59 20 2a 70 6b 65 79 20 3d 20 4e 55 4c PKEY *pkey = NUL
4de0: 4c 3b 0a 0a 20 20 20 20 69 66 20 28 70 6b 65 79 L;.. if (pkey
4df0: 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 54 63 6c == NULL) {..Tcl
4e00: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e _AppendResult(in
4e10: 74 65 72 70 2c 20 22 49 6e 76 61 6c 69 64 20 70 terp, "Invalid p
4e20: 75 62 6c 69 63 20 6b 65 79 20 6d 65 74 68 6f 64 ublic key method
4e30: 20 5c 22 22 2c 20 6e 61 6d 65 2c 20 22 5c 22 22 \"", name, "\""
4e40: 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c 29 , (char *) NULL)
4e50: 3b 0a 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 ;..return TCL_ER
4e60: 52 4f 52 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 ROR;. }..
4e70: 2f 2a 20 47 65 74 20 70 72 6f 70 65 72 74 69 65 /* Get propertie
4e80: 73 20 2a 2f 0a 20 20 20 20 72 65 73 75 6c 74 4f s */. resultO
4e90: 62 6a 20 3d 20 54 63 6c 5f 4e 65 77 4c 69 73 74 bj = Tcl_NewList
4ea0: 4f 62 6a 28 30 2c 20 4e 55 4c 4c 29 3b 0a 20 20 Obj(0, NULL);.
4eb0: 20 20 69 66 20 28 72 65 73 75 6c 74 4f 62 6a 20 if (resultObj
4ec0: 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 72 65 74 75 == NULL) {..retu
4ed0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 rn TCL_ERROR;.
4ee0: 20 20 7d 0a 20 20 20 20 4c 41 50 50 45 4e 44 5f }. LAPPEND_
4ef0: 53 54 52 28 69 6e 74 65 72 70 2c 20 72 65 73 75 STR(interp, resu
4f00: 6c 74 4f 62 6a 2c 20 22 6e 61 6d 65 22 2c 20 4f ltObj, "name", O
4f10: 42 4a 5f 6e 69 64 32 6c 6e 28 45 56 50 5f 50 4b BJ_nid2ln(EVP_PK
4f20: 45 59 5f 69 64 28 70 6b 65 79 29 29 2c 20 2d 31 EY_id(pkey)), -1
4f30: 29 3b 0a 20 20 20 20 4c 41 50 50 45 4e 44 5f 53 );. LAPPEND_S
4f40: 54 52 28 69 6e 74 65 72 70 2c 20 72 65 73 75 6c TR(interp, resul
4f50: 74 4f 62 6a 2c 20 22 64 65 73 63 72 69 70 74 69 tObj, "descripti
4f60: 6f 6e 22 2c 20 22 22 2c 20 2d 31 29 3b 0a 20 20 on", "", -1);.
4f70: 20 20 4c 41 50 50 45 4e 44 5f 49 4e 54 28 69 6e LAPPEND_INT(in
4f80: 74 65 72 70 2c 20 72 65 73 75 6c 74 4f 62 6a 2c terp, resultObj,
4f90: 20 22 73 69 7a 65 22 2c 20 45 56 50 5f 50 4b 45 "size", EVP_PKE
4fa0: 59 5f 73 69 7a 65 28 70 6b 65 79 29 29 3b 0a 20 Y_size(pkey));.
4fb0: 20 20 20 4c 41 50 50 45 4e 44 5f 49 4e 54 28 69 LAPPEND_INT(i
4fc0: 6e 74 65 72 70 2c 20 72 65 73 75 6c 74 4f 62 6a nterp, resultObj
4fd0: 2c 20 22 62 69 74 73 22 2c 20 45 56 50 5f 50 4b , "bits", EVP_PK
4fe0: 45 59 5f 62 69 74 73 28 70 6b 65 79 29 29 3b 0a EY_bits(pkey));.
4ff0: 20 20 20 20 4c 41 50 50 45 4e 44 5f 49 4e 54 28 LAPPEND_INT(
5000: 69 6e 74 65 72 70 2c 20 72 65 73 75 6c 74 4f 62 interp, resultOb
5010: 6a 2c 20 22 73 65 63 75 72 69 74 79 5f 62 69 74 j, "security_bit
5020: 73 22 2c 20 45 56 50 5f 50 4b 45 59 5f 73 65 63 s", EVP_PKEY_sec
5030: 75 72 69 74 79 5f 62 69 74 73 28 70 6b 65 79 29 urity_bits(pkey)
5040: 29 3b 0a 20 20 20 20 4c 41 50 50 45 4e 44 5f 53 );. LAPPEND_S
5050: 54 52 28 69 6e 74 65 72 70 2c 20 72 65 73 75 6c TR(interp, resul
5060: 74 4f 62 6a 2c 20 22 62 61 73 65 49 64 22 2c 20 tObj, "baseId",
5070: 4f 42 4a 5f 6e 69 64 32 6c 6e 28 45 56 50 5f 50 OBJ_nid2ln(EVP_P
5080: 4b 45 59 5f 62 61 73 65 5f 69 64 28 70 6b 65 79 KEY_base_id(pkey
5090: 29 29 2c 20 2d 31 29 3b 0a 20 20 20 20 4c 41 50 )), -1);. LAP
50a0: 50 45 4e 44 5f 53 54 52 28 69 6e 74 65 72 70 2c PEND_STR(interp,
50b0: 20 72 65 73 75 6c 74 4f 62 6a 2c 20 22 70 72 6f resultObj, "pro
50c0: 76 69 64 65 72 22 2c 20 22 22 2c 20 2d 31 29 3b vider", "", -1);
50d0: 0a 20 20 20 20 4c 41 50 50 45 4e 44 5f 53 54 52 . LAPPEND_STR
50e0: 28 69 6e 74 65 72 70 2c 20 72 65 73 75 6c 74 4f (interp, resultO
50f0: 62 6a 2c 20 22 74 79 70 65 22 2c 20 4f 42 4a 5f bj, "type", OBJ_
5100: 6e 69 64 32 6c 6e 28 45 56 50 5f 50 4b 45 59 5f nid2ln(EVP_PKEY_
5110: 74 79 70 65 28 45 56 50 5f 50 4b 45 59 5f 69 64 type(EVP_PKEY_id
5120: 28 70 6b 65 79 29 29 29 2c 20 2d 31 29 3b 0a 0a (pkey))), -1);..
5130: 20 20 20 20 7b 0a 09 69 6e 74 20 70 6e 69 64 3b {..int pnid;
5140: 0a 09 69 66 20 28 45 56 50 5f 50 4b 45 59 5f 67 ..if (EVP_PKEY_g
5150: 65 74 5f 64 65 66 61 75 6c 74 5f 64 69 67 65 73 et_default_diges
5160: 74 5f 6e 69 64 28 70 6b 65 79 2c 20 26 70 6e 69 t_nid(pkey, &pni
5170: 64 29 20 3e 20 30 29 20 7b 0a 09 20 20 20 20 4c d) > 0) {.. L
5180: 41 50 50 45 4e 44 5f 53 54 52 28 69 6e 74 65 72 APPEND_STR(inter
5190: 70 2c 20 72 65 73 75 6c 74 4f 62 6a 2c 20 22 64 p, resultObj, "d
51a0: 65 66 61 75 6c 74 5f 64 69 67 65 73 74 22 2c 20 efault_digest",
51b0: 4f 42 4a 5f 6e 69 64 32 6c 6e 28 70 6e 69 64 29 OBJ_nid2ln(pnid)
51c0: 2c 20 2d 32 29 3b 0a 09 7d 0a 20 20 20 20 7d 0a , -2);..}. }.
51d0: 0a 20 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 . Tcl_SetObjR
51e0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 72 65 esult(interp, re
51f0: 73 75 6c 74 4f 62 6a 29 3b 0a 20 20 20 20 72 65 sultObj);. re
5200: 74 75 72 6e 20 72 65 73 3b 0a 7d 0a 0a 2f 2a 0a turn res;.}../*.
5210: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *--------------
5220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5230: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5240: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5250: 2d 2d 2d 2d 2d 0a 20 2a 0a 20 2a 20 50 6b 65 79 -----. *. * Pkey
5260: 4c 69 73 74 20 2d 2d 0a 20 2a 0a 20 2a 09 52 65 List --. *. *.Re
5270: 74 75 72 6e 20 61 20 6c 69 73 74 20 6f 66 20 61 turn a list of a
5280: 6c 6c 20 70 75 62 6c 69 63 20 6b 65 79 20 6d 65 ll public key me
5290: 74 68 6f 64 73 0a 20 2a 0a 20 2a 20 52 65 73 75 thods. *. * Resu
52a0: 6c 74 73 3a 0a 20 2a 09 41 20 73 74 61 6e 64 61 lts:. *.A standa
52b0: 72 64 20 54 63 6c 20 6c 69 73 74 2e 0a 20 2a 0a rd Tcl list.. *.
52c0: 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a * Side effects:
52d0: 0a 20 2a 09 4e 6f 6e 65 2e 0a 20 2a 0a 20 2a 2d . *.None.. *. *-
52e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
52f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5310: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5320: 2d 2d 0a 20 2a 2f 0a 69 6e 74 20 50 6b 65 79 4c --. */.int PkeyL
5330: 69 73 74 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a ist(Tcl_Interp *
5340: 69 6e 74 65 72 70 29 20 7b 0a 20 20 20 20 54 63 interp) {. Tc
5350: 6c 5f 4f 62 6a 20 2a 72 65 73 75 6c 74 4f 62 6a l_Obj *resultObj
5360: 20 3d 20 54 63 6c 5f 4e 65 77 4c 69 73 74 4f 62 = Tcl_NewListOb
5370: 6a 28 30 2c 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 j(0, NULL);.
5380: 69 66 20 28 72 65 73 75 6c 74 4f 62 6a 20 3d 3d if (resultObj ==
5390: 20 4e 55 4c 4c 29 20 7b 0a 09 72 65 74 75 72 6e NULL) {..return
53a0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 TCL_ERROR;.
53b0: 7d 0a 0a 20 20 20 20 66 6f 72 20 28 73 69 7a 65 }.. for (size
53c0: 5f 74 20 69 20 3d 20 30 3b 20 69 20 3c 20 45 56 _t i = 0; i < EV
53d0: 50 5f 50 4b 45 59 5f 6d 65 74 68 5f 67 65 74 5f P_PKEY_meth_get_
53e0: 63 6f 75 6e 74 28 29 3b 20 69 2b 2b 29 20 7b 0a count(); i++) {.
53f0: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 45 56 const EV
5400: 50 5f 50 4b 45 59 5f 4d 45 54 48 4f 44 20 2a 70 P_PKEY_METHOD *p
5410: 6d 65 74 68 20 3d 20 45 56 50 5f 50 4b 45 59 5f meth = EVP_PKEY_
5420: 6d 65 74 68 5f 67 65 74 30 28 69 29 3b 0a 20 20 meth_get0(i);.
5430: 20 20 20 20 20 20 69 6e 74 20 70 6b 65 79 5f 69 int pkey_i
5440: 64 2c 20 70 6b 65 79 5f 66 6c 61 67 73 3b 0a 0a d, pkey_flags;..
5450: 20 20 20 20 20 20 20 20 45 56 50 5f 50 4b 45 59 EVP_PKEY
5460: 5f 6d 65 74 68 5f 67 65 74 30 5f 69 6e 66 6f 28 _meth_get0_info(
5470: 26 70 6b 65 79 5f 69 64 2c 20 26 70 6b 65 79 5f &pkey_id, &pkey_
5480: 66 6c 61 67 73 2c 20 70 6d 65 74 68 29 3b 0a 09 flags, pmeth);..
5490: 2f 2a 4c 41 50 50 45 4e 44 5f 53 54 52 28 69 6e /*LAPPEND_STR(in
54a0: 74 65 72 70 2c 20 72 65 73 75 6c 74 4f 62 6a 2c terp, resultObj,
54b0: 20 22 6e 61 6d 65 22 2c 20 4f 42 4a 5f 6e 69 64 "name", OBJ_nid
54c0: 32 6c 6e 28 70 6b 65 79 5f 69 64 29 2c 20 2d 31 2ln(pkey_id), -1
54d0: 29 3b 0a 09 4c 41 50 50 45 4e 44 5f 53 54 52 28 );..LAPPEND_STR(
54e0: 69 6e 74 65 72 70 2c 20 72 65 73 75 6c 74 4f 62 interp, resultOb
54f0: 6a 2c 20 22 74 79 70 65 22 2c 20 70 6b 65 79 5f j, "type", pkey_
5500: 66 6c 61 67 73 20 26 20 41 53 4e 31 5f 50 4b 45 flags & ASN1_PKE
5510: 59 5f 44 59 4e 41 4d 49 43 20 3f 20 22 45 78 74 Y_DYNAMIC ? "Ext
5520: 65 72 6e 61 6c 22 20 3a 20 22 42 75 69 6c 74 2d ernal" : "Built-
5530: 69 6e 22 2c 20 2d 31 29 3b 2a 2f 0a 0a 09 54 63 in", -1);*/...Tc
5540: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 l_ListObjAppendE
5550: 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 72 lement(interp, r
5560: 65 73 75 6c 74 4f 62 6a 2c 20 54 63 6c 5f 4e 65 esultObj, Tcl_Ne
5570: 77 53 74 72 69 6e 67 4f 62 6a 28 4f 42 4a 5f 6e wStringObj(OBJ_n
5580: 69 64 32 6c 6e 28 70 6b 65 79 5f 69 64 29 2c 20 id2ln(pkey_id),
5590: 2d 31 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 -1));. }.
55a0: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 Tcl_SetObjResult
55b0: 28 69 6e 74 65 72 70 2c 20 72 65 73 75 6c 74 4f (interp, resultO
55c0: 62 6a 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 bj);. return
55d0: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 20 2a TCL_OK;.}../*. *
55e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
55f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5600: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5610: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5620: 2d 2d 2d 0a 20 2a 0a 20 2a 20 50 6b 65 79 73 4f ---. *. * PkeysO
5630: 62 6a 43 6d 64 20 2d 2d 0a 20 2a 0a 20 2a 09 52 bjCmd --. *. *.R
5640: 65 74 75 72 6e 20 61 20 6c 69 73 74 20 6f 66 20 eturn a list of
5650: 61 6c 6c 20 76 61 6c 69 64 20 68 61 73 68 20 61 all valid hash a
5660: 6c 67 6f 72 69 74 68 6d 73 20 6f 72 20 6d 65 73 lgorithms or mes
5670: 73 61 67 65 20 64 69 67 65 73 74 73 2e 0a 20 2a sage digests.. *
5680: 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 . * Results:. *.
5690: 41 20 73 74 61 6e 64 61 72 64 20 54 63 6c 20 6c A standard Tcl l
56a0: 69 73 74 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 ist.. *. * Side
56b0: 65 66 66 65 63 74 73 3a 0a 20 2a 09 4e 6f 6e 65 effects:. *.None
56c0: 2e 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d .. *. *---------
56d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
56e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
56f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5700: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 69 ----------. */.i
5710: 6e 74 20 50 6b 65 79 73 4f 62 6a 43 6d 64 28 43 nt PkeysObjCmd(C
5720: 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 lientData client
5730: 44 61 74 61 2c 20 54 63 6c 5f 49 6e 74 65 72 70 Data, Tcl_Interp
5740: 20 2a 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 *interp, int ob
5750: 6a 63 2c 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6e jc, Tcl_Obj *con
5760: 73 74 20 6f 62 6a 76 5b 5d 29 20 7b 0a 20 20 20 st objv[]) {.
5770: 20 28 76 6f 69 64 29 20 63 6c 69 65 6e 74 44 61 (void) clientDa
5780: 74 61 3b 0a 0a 20 20 20 20 64 70 72 69 6e 74 66 ta;.. dprintf
5790: 28 22 43 61 6c 6c 65 64 22 29 3b 0a 0a 20 20 20 ("Called");..
57a0: 20 2f 2a 20 43 6c 65 61 72 20 65 72 72 6f 72 73 /* Clear errors
57b0: 20 2a 2f 0a 20 20 20 20 54 63 6c 5f 52 65 73 65 */. Tcl_Rese
57c0: 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 3b tResult(interp);
57d0: 0a 20 20 20 20 45 52 52 5f 63 6c 65 61 72 5f 65 . ERR_clear_e
57e0: 72 72 6f 72 28 29 3b 0a 0a 20 20 20 20 2f 2a 20 rror();.. /*
57f0: 56 61 6c 69 64 61 74 65 20 61 72 67 20 63 6f 75 Validate arg cou
5800: 6e 74 20 2a 2f 0a 20 20 20 20 69 66 20 28 6f 62 nt */. if (ob
5810: 6a 63 20 3d 3d 20 31 29 20 7b 0a 09 72 65 74 75 jc == 1) {..retu
5820: 72 6e 20 50 6b 65 79 4c 69 73 74 28 69 6e 74 65 rn PkeyList(inte
5830: 72 70 29 3b 0a 0a 20 20 20 20 7d 20 65 6c 73 65 rp);.. } else
5840: 20 69 66 20 28 6f 62 6a 63 20 3d 3d 20 32 29 20 if (objc == 2)
5850: 7b 0a 09 72 65 74 75 72 6e 20 50 6b 65 79 49 6e {..return PkeyIn
5860: 66 6f 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b fo(interp, objv[
5870: 31 5d 29 3b 0a 0a 20 20 20 20 7d 20 65 6c 73 65 1]);.. } else
5880: 20 7b 0a 09 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d {..Tcl_WrongNum
5890: 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 Args(interp, 1,
58a0: 6f 62 6a 76 2c 20 22 3f 6e 61 6d 65 3f 22 29 3b objv, "?name?");
58b0: 0a 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 ..return TCL_ERR
58c0: 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 OR;. }. re
58d0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a turn TCL_OK;.}..
58e0: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a /***************
58f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
5900: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
5910: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
5920: 2a 2a 2a 2a 2f 0a 0a 2f 2a 0a 20 2a 2d 2d 2d 2d ****/../*. *----
5930: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5940: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5950: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5960: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a ---------------.
5970: 20 2a 0a 20 2a 20 50 72 6f 74 6f 63 6f 6c 73 4f *. * ProtocolsO
5980: 62 6a 43 6d 64 20 2d 2d 0a 20 2a 0a 20 2a 09 52 bjCmd --. *. *.R
5990: 65 74 75 72 6e 20 61 20 6c 69 73 74 20 6f 66 20 eturn a list of
59a0: 74 68 65 20 61 76 61 69 6c 61 62 6c 65 20 6f 72 the available or
59b0: 20 73 75 70 70 6f 72 74 65 64 20 53 53 4c 2f 54 supported SSL/T
59c0: 4c 53 20 70 72 6f 74 6f 63 6f 6c 73 2e 0a 20 2a LS protocols.. *
59d0: 0a 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 2a 09 . * Results:. *.
59e0: 41 20 73 74 61 6e 64 61 72 64 20 54 63 6c 20 6c A standard Tcl l
59f0: 69 73 74 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 ist.. *. * Side
5a00: 65 66 66 65 63 74 73 3a 0a 20 2a 09 6e 6f 6e 65 effects:. *.none
5a10: 0a 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d . *. *----------
5a20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5a30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5a40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 73 74 ---------. */.st
5a60: 61 74 69 63 20 69 6e 74 0a 50 72 6f 74 6f 63 6f atic int.Protoco
5a70: 6c 73 4f 62 6a 43 6d 64 28 43 6c 69 65 6e 74 44 lsObjCmd(ClientD
5a80: 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 ata clientData,
5a90: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 Tcl_Interp *inte
5aa0: 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 rp, int objc, Tc
5ab0: 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 74 20 6f 62 6a l_Obj *const obj
5ac0: 76 5b 5d 29 20 7b 0a 20 20 20 20 54 63 6c 5f 4f v[]) {. Tcl_O
5ad0: 62 6a 20 2a 72 65 73 75 6c 74 4f 62 6a 3b 0a 20 bj *resultObj;.
5ae0: 20 20 20 28 76 6f 69 64 29 20 63 6c 69 65 6e 74 (void) client
5af0: 44 61 74 61 3b 0a 0a 20 20 20 20 64 70 72 69 6e Data;.. dprin
5b00: 74 66 28 22 43 61 6c 6c 65 64 22 29 3b 0a 0a 20 tf("Called");..
5b10: 20 20 20 2f 2a 20 43 6c 65 61 72 20 65 72 72 6f /* Clear erro
5b20: 72 73 20 2a 2f 0a 20 20 20 20 54 63 6c 5f 52 65 rs */. Tcl_Re
5b30: 73 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 setResult(interp
5b40: 29 3b 0a 20 20 20 20 45 52 52 5f 63 6c 65 61 72 );. ERR_clear
5b50: 5f 65 72 72 6f 72 28 29 3b 0a 0a 20 20 20 20 2f _error();.. /
5b60: 2a 20 56 61 6c 69 64 61 74 65 20 61 72 67 20 63 * Validate arg c
5b70: 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 69 66 20 28 ount */. if (
5b80: 6f 62 6a 63 20 21 3d 20 31 29 20 7b 0a 09 54 63 objc != 1) {..Tc
5b90: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 l_WrongNumArgs(i
5ba0: 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 nterp, 1, objv,
5bb0: 4e 55 4c 4c 29 3b 0a 09 72 65 74 75 72 6e 20 54 NULL);..return T
5bc0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a CL_ERROR;. }.
5bd0: 0a 20 20 20 20 2f 2a 20 4c 69 73 74 20 61 6c 6c . /* List all
5be0: 20 70 72 6f 74 6f 63 6f 6c 73 20 2a 2f 0a 20 20 protocols */.
5bf0: 20 20 72 65 73 75 6c 74 4f 62 6a 20 3d 20 54 63 resultObj = Tc
5c00: 6c 5f 4e 65 77 4c 69 73 74 4f 62 6a 28 30 2c 20 l_NewListObj(0,
5c10: 4e 55 4c 4c 29 3b 0a 20 20 20 20 69 66 20 28 72 NULL);. if (r
5c20: 65 73 75 6c 74 4f 62 6a 20 3d 3d 20 4e 55 4c 4c esultObj == NULL
5c30: 29 20 7b 0a 09 72 65 74 75 72 6e 20 54 43 4c 5f ) {..return TCL_
5c40: 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 23 69 66 ERROR;. }.#if
5c50: 20 4f 50 45 4e 53 53 4c 5f 56 45 52 53 49 4f 4e OPENSSL_VERSION
5c60: 5f 4e 55 4d 42 45 52 20 3c 20 30 78 31 30 31 30 _NUMBER < 0x1010
5c70: 30 30 30 30 4c 20 26 26 20 21 64 65 66 69 6e 65 0000L && !define
5c80: 64 28 4e 4f 5f 53 53 4c 32 29 20 26 26 20 21 64 d(NO_SSL2) && !d
5c90: 65 66 69 6e 65 64 28 4f 50 45 4e 53 53 4c 5f 4e efined(OPENSSL_N
5ca0: 4f 5f 53 53 4c 32 29 0a 20 20 20 20 54 63 6c 5f O_SSL2). Tcl_
5cb0: 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 ListObjAppendEle
5cc0: 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 72 65 73 ment(interp, res
5cd0: 75 6c 74 4f 62 6a 2c 20 54 63 6c 5f 4e 65 77 53 ultObj, Tcl_NewS
5ce0: 74 72 69 6e 67 4f 62 6a 28 70 72 6f 74 6f 63 6f tringObj(protoco
5cf0: 6c 73 5b 54 4c 53 5f 53 53 4c 32 5d 2c 20 2d 31 ls[TLS_SSL2], -1
5d00: 29 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 ));.#endif.#if !
5d10: 64 65 66 69 6e 65 64 28 4e 4f 5f 53 53 4c 33 29 defined(NO_SSL3)
5d20: 20 26 26 20 21 64 65 66 69 6e 65 64 28 4f 50 45 && !defined(OPE
5d30: 4e 53 53 4c 5f 4e 4f 5f 53 53 4c 33 29 20 26 26 NSSL_NO_SSL3) &&
5d40: 20 21 64 65 66 69 6e 65 64 28 4f 50 45 4e 53 53 !defined(OPENSS
5d50: 4c 5f 4e 4f 5f 53 53 4c 33 5f 4d 45 54 48 4f 44 L_NO_SSL3_METHOD
5d60: 29 0a 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62 ). Tcl_ListOb
5d70: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 jAppendElement(i
5d80: 6e 74 65 72 70 2c 20 72 65 73 75 6c 74 4f 62 6a nterp, resultObj
5d90: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f , Tcl_NewStringO
5da0: 62 6a 28 70 72 6f 74 6f 63 6f 6c 73 5b 54 4c 53 bj(protocols[TLS
5db0: 5f 53 53 4c 33 5d 2c 20 2d 31 29 29 3b 0a 23 65 _SSL3], -1));.#e
5dc0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 ndif.#if !define
5dd0: 64 28 4e 4f 5f 54 4c 53 31 29 20 26 26 20 21 64 d(NO_TLS1) && !d
5de0: 65 66 69 6e 65 64 28 4f 50 45 4e 53 53 4c 5f 4e efined(OPENSSL_N
5df0: 4f 5f 54 4c 53 31 29 20 26 26 20 21 64 65 66 69 O_TLS1) && !defi
5e00: 6e 65 64 28 4f 50 45 4e 53 53 4c 5f 4e 4f 5f 54 ned(OPENSSL_NO_T
5e10: 4c 53 31 5f 4d 45 54 48 4f 44 29 0a 20 20 20 20 LS1_METHOD).
5e20: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e Tcl_ListObjAppen
5e30: 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c dElement(interp,
5e40: 20 72 65 73 75 6c 74 4f 62 6a 2c 20 54 63 6c 5f resultObj, Tcl_
5e50: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 70 72 6f NewStringObj(pro
5e60: 74 6f 63 6f 6c 73 5b 54 4c 53 5f 54 4c 53 31 5d tocols[TLS_TLS1]
5e70: 2c 20 2d 31 29 29 3b 0a 23 65 6e 64 69 66 0a 23 , -1));.#endif.#
5e80: 69 66 20 21 64 65 66 69 6e 65 64 28 4e 4f 5f 54 if !defined(NO_T
5e90: 4c 53 31 5f 31 29 20 26 26 20 21 64 65 66 69 6e LS1_1) && !defin
5ea0: 65 64 28 4f 50 45 4e 53 53 4c 5f 4e 4f 5f 54 4c ed(OPENSSL_NO_TL
5eb0: 53 31 5f 31 29 20 26 26 20 21 64 65 66 69 6e 65 S1_1) && !define
5ec0: 64 28 4f 50 45 4e 53 53 4c 5f 4e 4f 5f 54 4c 53 d(OPENSSL_NO_TLS
5ed0: 31 5f 31 5f 4d 45 54 48 4f 44 29 0a 20 20 20 20 1_1_METHOD).
5ee0: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e Tcl_ListObjAppen
5ef0: 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c dElement(interp,
5f00: 20 72 65 73 75 6c 74 4f 62 6a 2c 20 54 63 6c 5f resultObj, Tcl_
5f10: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 70 72 6f NewStringObj(pro
5f20: 74 6f 63 6f 6c 73 5b 54 4c 53 5f 54 4c 53 31 5f tocols[TLS_TLS1_
5f30: 31 5d 2c 20 2d 31 29 29 3b 0a 23 65 6e 64 69 66 1], -1));.#endif
5f40: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 4f .#if !defined(NO
5f50: 5f 54 4c 53 31 5f 32 29 20 26 26 20 21 64 65 66 _TLS1_2) && !def
5f60: 69 6e 65 64 28 4f 50 45 4e 53 53 4c 5f 4e 4f 5f ined(OPENSSL_NO_
5f70: 54 4c 53 31 5f 32 29 20 26 26 20 21 64 65 66 69 TLS1_2) && !defi
5f80: 6e 65 64 28 4f 50 45 4e 53 53 4c 5f 4e 4f 5f 54 ned(OPENSSL_NO_T
5f90: 4c 53 31 5f 32 5f 4d 45 54 48 4f 44 29 0a 20 20 LS1_2_METHOD).
5fa0: 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 Tcl_ListObjApp
5fb0: 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 endElement(inter
5fc0: 70 2c 20 72 65 73 75 6c 74 4f 62 6a 2c 20 54 63 p, resultObj, Tc
5fd0: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 70 l_NewStringObj(p
5fe0: 72 6f 74 6f 63 6f 6c 73 5b 54 4c 53 5f 54 4c 53 rotocols[TLS_TLS
5ff0: 31 5f 32 5d 2c 20 2d 31 29 29 3b 0a 23 65 6e 64 1_2], -1));.#end
6000: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 if.#if !defined(
6010: 4e 4f 5f 54 4c 53 31 5f 33 29 20 26 26 20 21 64 NO_TLS1_3) && !d
6020: 65 66 69 6e 65 64 28 4f 50 45 4e 53 53 4c 5f 4e efined(OPENSSL_N
6030: 4f 5f 54 4c 53 31 5f 33 29 0a 20 20 20 20 54 63 O_TLS1_3). Tc
6040: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 l_ListObjAppendE
6050: 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 72 lement(interp, r
6060: 65 73 75 6c 74 4f 62 6a 2c 20 54 63 6c 5f 4e 65 esultObj, Tcl_Ne
6070: 77 53 74 72 69 6e 67 4f 62 6a 28 70 72 6f 74 6f wStringObj(proto
6080: 63 6f 6c 73 5b 54 4c 53 5f 54 4c 53 31 5f 33 5d cols[TLS_TLS1_3]
6090: 2c 20 2d 31 29 29 3b 0a 23 65 6e 64 69 66 0a 20 , -1));.#endif.
60a0: 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 Tcl_SetObjRes
60b0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 72 65 73 75 ult(interp, resu
60c0: 6c 74 4f 62 6a 29 3b 0a 20 20 20 20 72 65 74 75 ltObj);. retu
60d0: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a rn TCL_OK;.}../*
60e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
60f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
6100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
6110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
6120: 2a 2a 2f 0a 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d **/../*. *------
6130: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6140: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6160: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a -------------. *
6170: 0a 20 2a 20 56 65 72 73 69 6f 6e 4f 62 6a 43 6d . * VersionObjCm
6180: 64 20 2d 2d 0a 20 2a 0a 20 2a 09 52 65 74 75 72 d --. *. *.Retur
6190: 6e 20 61 20 73 74 72 69 6e 67 20 77 69 74 68 20 n a string with
61a0: 74 68 65 20 4f 70 65 6e 53 53 4c 20 76 65 72 73 the OpenSSL vers
61b0: 69 6f 6e 20 69 6e 66 6f 2e 0a 20 2a 0a 20 2a 20 ion info.. *. *
61c0: 52 65 73 75 6c 74 73 3a 0a 20 2a 09 41 20 73 74 Results:. *.A st
61d0: 61 6e 64 61 72 64 20 54 63 6c 20 72 65 73 75 6c andard Tcl resul
61e0: 74 2e 0a 20 2a 0a 20 2a 20 53 69 64 65 20 65 66 t.. *. * Side ef
61f0: 66 65 63 74 73 3a 0a 20 2a 09 4e 6f 6e 65 2e 0a fects:. *.None..
6200: 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *. *-----------
6210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6230: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6240: 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 73 74 61 --------. */.sta
6250: 74 69 63 20 69 6e 74 0a 56 65 72 73 69 6f 6e 4f tic int.VersionO
6260: 62 6a 43 6d 64 28 43 6c 69 65 6e 74 44 61 74 61 bjCmd(ClientData
6270: 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 54 63 6c clientData, Tcl
6280: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c _Interp *interp,
6290: 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f int objc, Tcl_O
62a0: 62 6a 20 2a 63 6f 6e 73 74 20 6f 62 6a 76 5b 5d bj *const objv[]
62b0: 29 20 7b 0a 20 20 20 20 54 63 6c 5f 4f 62 6a 20 ) {. Tcl_Obj
62c0: 2a 72 65 73 75 6c 74 4f 62 6a 3b 0a 20 20 20 20 *resultObj;.
62d0: 28 76 6f 69 64 29 20 63 6c 69 65 6e 74 44 61 74 (void) clientDat
62e0: 61 3b 0a 0a 20 20 20 20 64 70 72 69 6e 74 66 28 a;.. dprintf(
62f0: 22 43 61 6c 6c 65 64 22 29 3b 0a 0a 20 20 20 20 "Called");..
6300: 2f 2a 20 56 61 6c 69 64 61 74 65 20 61 72 67 20 /* Validate arg
6310: 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 69 66 20 count */. if
6320: 28 6f 62 6a 63 20 21 3d 20 31 29 20 7b 0a 09 54 (objc != 1) {..T
6330: 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 cl_WrongNumArgs(
6340: 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c interp, 1, objv,
6350: 20 4e 55 4c 4c 29 3b 0a 09 72 65 74 75 72 6e 20 NULL);..return
6360: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d TCL_ERROR;. }
6370: 0a 0a 20 20 20 20 72 65 73 75 6c 74 4f 62 6a 20 .. resultObj
6380: 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f = Tcl_NewStringO
6390: 62 6a 28 4f 50 45 4e 53 53 4c 5f 56 45 52 53 49 bj(OPENSSL_VERSI
63a0: 4f 4e 5f 54 45 58 54 2c 20 2d 31 29 3b 0a 20 20 ON_TEXT, -1);.
63b0: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 Tcl_SetObjResu
63c0: 6c 74 28 69 6e 74 65 72 70 2c 20 72 65 73 75 6c lt(interp, resul
63d0: 74 4f 62 6a 29 3b 0a 20 20 20 20 72 65 74 75 72 tObj);. retur
63e0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 2a n TCL_OK;.}../**
63f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
6400: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
6410: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
6420: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
6430: 2a 2f 0a 0a 2f 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d */../*. *-------
6440: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6450: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6460: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6470: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 0a ------------. *.
6480: 20 2a 20 54 6c 73 5f 49 6e 66 6f 43 6f 6d 6d 61 * Tls_InfoComma
6490: 6e 64 73 20 2d 2d 0a 20 2a 0a 20 2a 09 43 72 65 nds --. *. *.Cre
64a0: 61 74 65 20 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 ate info command
64b0: 73 0a 20 2a 0a 20 2a 20 52 65 74 75 72 6e 73 3a s. *. * Returns:
64c0: 0a 20 2a 09 54 43 4c 5f 4f 4b 20 6f 72 20 54 43 . *.TCL_OK or TC
64d0: 4c 5f 45 52 52 4f 52 0a 20 2a 0a 20 2a 20 53 69 L_ERROR. *. * Si
64e0: 64 65 20 65 66 66 65 63 74 73 3a 0a 20 2a 09 43 de effects:. *.C
64f0: 72 65 61 74 65 73 20 63 6f 6d 6d 61 6e 64 73 0a reates commands.
6500: 20 2a 0a 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *. *-----------
6510: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6520: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6530: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6540: 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 2a 2f 0a 69 6e 74 --------. */.int
6550: 20 54 6c 73 5f 49 6e 66 6f 43 6f 6d 6d 61 6e 64 Tls_InfoCommand
6560: 73 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e s(Tcl_Interp *in
6570: 74 65 72 70 29 20 7b 0a 0a 23 69 66 20 4f 50 45 terp) {..#if OPE
6580: 4e 53 53 4c 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d NSSL_VERSION_NUM
6590: 42 45 52 20 3c 20 30 78 31 30 31 30 30 30 30 30 BER < 0x10100000
65a0: 4c 0a 20 20 20 20 4f 70 65 6e 53 53 4c 5f 61 64 L. OpenSSL_ad
65b0: 64 5f 61 6c 6c 5f 63 69 70 68 65 72 73 28 29 3b d_all_ciphers();
65c0: 0a 20 20 20 20 4f 70 65 6e 53 53 4c 5f 61 64 64 . OpenSSL_add
65d0: 5f 61 6c 6c 5f 64 69 67 65 73 74 73 28 29 3b 0a _all_digests();.
65e0: 20 20 20 20 4f 70 65 6e 53 53 4c 5f 61 64 64 5f OpenSSL_add_
65f0: 61 6c 6c 5f 61 6c 67 6f 72 69 74 68 6d 73 28 29 all_algorithms()
6600: 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 54 63 ;.#endif.. Tc
6610: 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 l_CreateObjComma
6620: 6e 64 28 69 6e 74 65 72 70 2c 20 22 74 6c 73 3a nd(interp, "tls:
6630: 3a 63 69 70 68 65 72 22 2c 20 43 69 70 68 65 72 :cipher", Cipher
6640: 4f 62 6a 43 6d 64 2c 20 28 43 6c 69 65 6e 74 44 ObjCmd, (ClientD
6650: 61 74 61 29 20 4e 55 4c 4c 2c 20 28 54 63 6c 5f ata) NULL, (Tcl_
6660: 43 6d 64 44 65 6c 65 74 65 50 72 6f 63 20 2a 29 CmdDeleteProc *)
6670: 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 54 63 6c 5f NULL);. Tcl_
6680: 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 CreateObjCommand
6690: 28 69 6e 74 65 72 70 2c 20 22 74 6c 73 3a 3a 63 (interp, "tls::c
66a0: 69 70 68 65 72 73 22 2c 20 43 69 70 68 65 72 73 iphers", Ciphers
66b0: 4f 62 6a 43 6d 64 2c 20 28 43 6c 69 65 6e 74 44 ObjCmd, (ClientD
66c0: 61 74 61 29 20 4e 55 4c 4c 2c 20 28 54 63 6c 5f ata) NULL, (Tcl_
66d0: 43 6d 64 44 65 6c 65 74 65 50 72 6f 63 20 2a 29 CmdDeleteProc *)
66e0: 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 54 63 6c 5f NULL);. Tcl_
66f0: 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 CreateObjCommand
6700: 28 69 6e 74 65 72 70 2c 20 22 74 6c 73 3a 3a 64 (interp, "tls::d
6710: 69 67 65 73 74 73 22 2c 20 44 69 67 65 73 74 73 igests", Digests
6720: 4f 62 6a 43 6d 64 2c 20 28 43 6c 69 65 6e 74 44 ObjCmd, (ClientD
6730: 61 74 61 29 20 4e 55 4c 4c 2c 20 28 54 63 6c 5f ata) NULL, (Tcl_
6740: 43 6d 64 44 65 6c 65 74 65 50 72 6f 63 20 2a 29 CmdDeleteProc *)
6750: 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 54 63 6c 5f NULL);. Tcl_
6760: 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 CreateObjCommand
6770: 28 69 6e 74 65 72 70 2c 20 22 74 6c 73 3a 3a 6b (interp, "tls::k
6780: 64 66 73 22 2c 20 4b 64 66 73 4f 62 6a 43 6d 64 dfs", KdfsObjCmd
6790: 2c 20 28 43 6c 69 65 6e 74 44 61 74 61 29 20 4e , (ClientData) N
67a0: 55 4c 4c 2c 20 28 54 63 6c 5f 43 6d 64 44 65 6c ULL, (Tcl_CmdDel
67b0: 65 74 65 50 72 6f 63 20 2a 29 20 4e 55 4c 4c 29 eteProc *) NULL)
67c0: 3b 0a 20 20 20 20 54 63 6c 5f 43 72 65 61 74 65 ;. Tcl_Create
67d0: 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 ObjCommand(inter
67e0: 70 2c 20 22 74 6c 73 3a 3a 6d 61 63 73 22 2c 20 p, "tls::macs",
67f0: 4d 61 63 73 4f 62 6a 43 6d 64 2c 20 28 43 6c 69 MacsObjCmd, (Cli
6800: 65 6e 74 44 61 74 61 29 20 4e 55 4c 4c 2c 20 28 entData) NULL, (
6810: 54 63 6c 5f 43 6d 64 44 65 6c 65 74 65 50 72 6f Tcl_CmdDeletePro
6820: 63 20 2a 29 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 c *) NULL);.
6830: 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d Tcl_CreateObjCom
6840: 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 74 6c mand(interp, "tl
6850: 73 3a 3a 70 6b 65 79 73 22 2c 20 50 6b 65 79 73 s::pkeys", Pkeys
6860: 4f 62 6a 43 6d 64 2c 20 28 43 6c 69 65 6e 74 44 ObjCmd, (ClientD
6870: 61 74 61 29 20 4e 55 4c 4c 2c 20 28 54 63 6c 5f ata) NULL, (Tcl_
6880: 43 6d 64 44 65 6c 65 74 65 50 72 6f 63 20 2a 29 CmdDeleteProc *)
6890: 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 54 63 6c 5f NULL);. Tcl_
68a0: 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 CreateObjCommand
68b0: 28 69 6e 74 65 72 70 2c 20 22 74 6c 73 3a 3a 70 (interp, "tls::p
68c0: 72 6f 74 6f 63 6f 6c 73 22 2c 20 50 72 6f 74 6f rotocols", Proto
68d0: 63 6f 6c 73 4f 62 6a 43 6d 64 2c 20 28 43 6c 69 colsObjCmd, (Cli
68e0: 65 6e 74 44 61 74 61 29 20 4e 55 4c 4c 2c 20 28 entData) NULL, (
68f0: 54 63 6c 5f 43 6d 64 44 65 6c 65 74 65 50 72 6f Tcl_CmdDeletePro
6900: 63 20 2a 29 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 c *) NULL);.
6910: 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d Tcl_CreateObjCom
6920: 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 74 6c mand(interp, "tl
6930: 73 3a 3a 76 65 72 73 69 6f 6e 22 2c 20 56 65 72 s::version", Ver
6940: 73 69 6f 6e 4f 62 6a 43 6d 64 2c 20 28 43 6c 69 sionObjCmd, (Cli
6950: 65 6e 74 44 61 74 61 29 20 4e 55 4c 4c 2c 20 28 entData) NULL, (
6960: 54 63 6c 5f 43 6d 64 44 65 6c 65 74 65 50 72 6f Tcl_CmdDeletePro
6970: 63 20 2a 29 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 c *) NULL);.
6980: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d return TCL_OK;.}
6990: 0a 0a ..