Index: doc/tls.html ================================================================== --- doc/tls.html +++ doc/tls.html @@ -33,12 +33,12 @@ <dt> </dt> <dd><b>tls::ciphers</b> <em>?protocol? ?verbose? ?supported?</em></dd> <dd><b>tls::protocols</b></dd> <dd><b>tls::version</b></dd> <dt> </dt> - <dd><b>tls::hash</b> <em>type data</em></dd> - <dd><b>tls::hashes</b></dd> + <dd><b>tls::digest</b> <em>type data</em></dd> + <dd><b>tls::digests</b></dd> <dd><b>tls::md4</b> <em>data</em></dd> <dd><b>tls::md5</b> <em>data</em></dd> <dd><b>tls::sha1</b> <em>data</em></dd> <dd><b>tls::sha256</b> <em>data</em></dd> </dl> @@ -73,12 +73,12 @@ <br> <a href="#tls::ciphers"><b>tls::ciphers</b> <i>?protocol? ?verbose? ?supported?</i></a><br> <a href="#tls::protocols"><b>tls::protocols</b></a><br> <a href="#tls::version"><b>tls::version</b></a><br> <br> -<a href="#tls::hash"><b>tls::hash</b> <i>type data</i></a><br> -<a href="#tls::hashes"><b>tls::hashes</b></a><br> +<a href="#tls::digest"><b>tls::digest</b> <i>type data</i></a><br> +<a href="#tls::digests"><b>tls::digests</b></a><br> <a href="#tls::md4"><b>tls::md4</b> <i>data</i></a><br> <a href="#tls::md5"><b>tls::md5</b> <i>data</i></a><br> <a href="#tls::sha1"><b>tls::sha1</b> <i>data</i></a><br> <a href="#tls::sha256"><b>tls::sha256</b> <i>data</i></a><br> </p> @@ -447,32 +447,31 @@ <dt><a name="tls::version"><strong>tls::version</strong></a></dt> <dd>Returns the OpenSSL version string.</dd> <br> - <dt><a name="tls::hash"><strong>tls::hash</strong> <em>type data</em></a></dt> - <dd>Calculate the hash for <em>data</em> using <em>type</em> digest. - Returns value as a hex string. Type cam be any OpenSSL supported - hash digest including: <b>md4</b>, <b>md5</b>, <b>sha1</b>, - sha2 (<b>sha224</b>, <b>sha256</b>, <b>sha384</b>, <b>sha512</b>, - <b>sha512-224</b>, and <b>sha512-256</b>), - sha3 (<b>sha3-224</b>, <b>sha3-256</b>, <b>sha3-384</b>, and <b>sha3-512</b>), etc.</dd> - - <dt><a name="tls::hashes"><strong>tls::hashes</strong></a></dt> - <dd>Returns a list of the valid hash digests.</dd> + <dt><a name="tls::digest"><strong>tls::digest</strong> <em>type data</em></a></dt> + <dd>Calculate the message digest for <em>data</em> using <em>type</em> + hash algorithm. Returns value as a hex string. Type can be any + OpenSSL supported hash algorithm including: <b>md4</b>, <b>md5</b>, + <b>sha1</b>, <b>sha256</b>, <b>sha512</b>, <b>sha3-256</b>, etc. + See <b>digests</b> command for a full list.</dd> + + <dt><a name="tls::digests"><strong>tls::digests</strong></a></dt> + <dd>Returns a list of the valid hash algorithms used to create message digests.</dd> <dt><a name="tls::md4"><strong>tls::md4</strong> <em>data</em></a></dt> - <dd>Calculate the hash for <em>data</em> using the MD4 message-digest algorithm.</dd> + <dd>Return the MD4 message-digest for <em>data</em>.</dd> <dt><a name="tls::md5"><strong>tls::md5</strong> <em>data</em></a></dt> - <dd>Calculate the hash for <em>data</em> using the MD5 message-digest algorithm.</dd> + <dd>Return the MD5 message-digest for <em>data</em>.</dd> <dt><a name="tls::sha1"><strong>tls::sha1</strong> <em>data</em></a></dt> - <dd>Calculate the hash for <em>data</em> using the SHA-1 secure hash algorithm.</dd> + <dd>Return the SHA1 secure hash algorithm digest for <em>data</em>.</dd> <dt><a name="tls::sha256"><strong>tls::sha256</strong> <em>data</em></a></dt> - <dd>Calculate the hash for <em>data</em> using the SHA-2 SHA-256 secure hash algorithm.</dd> + <dd>Return the SHA-2 SHA256 secure hash algorithm digest for <em>data</em>.</dd> </dl> <h3><a name="CALLBACK OPTIONS">CALLBACK OPTIONS</a></h3> <p> Index: generic/tls.c ================================================================== --- generic/tls.c +++ generic/tls.c @@ -982,21 +982,23 @@ } /* *------------------------------------------------------------------- * - * Hash Commands -- Return hash value for digest as hex string + * Hash Commands -- + * + * Return the digest as a hex string for data using type message digest. * * Results: * A standard Tcl result. * * Side effects: * None. * *------------------------------------------------------------------- */ -HashCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) { +DigestCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) { int len; const char *name; const EVP_MD *type; if (objc != 3) { @@ -1013,65 +1015,65 @@ objv++; return HashCalc(interp, objc, objv, type); } /* - * Command to Calculate MD4 Hash + * Command to Calculate MD4 Message Digest */ int -HashMD4Cmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) { +DigestMD4Cmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) { return HashCalc(interp, objc, objv, EVP_md4()); } /* - * Command to Calculate MD5 Hash + * Command to Calculate MD5 Message Digest */ int -HashMD5Cmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) { +DigestMD5Cmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) { return HashCalc(interp, objc, objv, EVP_md5()); } /* * Command to Calculate SHA-1 Hash */ int -HashSHA1Cmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) { +DigestSHA1Cmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) { return HashCalc(interp, objc, objv, EVP_sha1()); } /* - * Command to Calculate SHA-256 Hash + * Command to Calculate SHA2 SHA-256 Hash */ int -HashSHA256Cmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) { +DigestSHA256Cmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) { return HashCalc(interp, objc, objv, EVP_sha256()); } /* *------------------------------------------------------------------- * - * Hash List Command -- Return list of hash message digests + * Hash List Command -- + * + * Return a list of all valid hash algorithms or message digests. * * Results: - * A standard Tcl result. + * A standard Tcl result list. * * Side effects: * None. * *------------------------------------------------------------------- */ - -void HashListCallback(const OBJ_NAME *obj, void *arg) { +void ListCallback(const OBJ_NAME *obj, void *arg) { Tcl_Obj *objPtr = (Tcl_Obj *) arg; + if (1 || !obj->alias) { Tcl_ListObjAppendElement(NULL, objPtr, Tcl_NewStringObj(obj->name,-1)); } +} -/* - * Command to list available Hash values - */ int -HashListCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) { +DigestListCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) { Tcl_Obj *objPtr = Tcl_NewListObj(0, NULL); #if OPENSSL_VERSION_NUMBER < 0x10100000L OpenSSL_add_all_digests(); /* Make sure they're loaded */ #endif @@ -2966,16 +2968,16 @@ Tcl_CreateObjCommand(interp, "tls::ciphers", CiphersObjCmd, (ClientData) 0, (Tcl_CmdDeleteProc *) NULL); Tcl_CreateObjCommand(interp, "tls::protocols", ProtocolsObjCmd, (ClientData) 0, (Tcl_CmdDeleteProc *) NULL); Tcl_CreateObjCommand(interp, "tls::version", VersionObjCmd, (ClientData) 0, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateObjCommand(interp, "tls::hash", HashCmd, (ClientData) 0, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateObjCommand(interp, "tls::hashes", HashListCmd, (ClientData) 0, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateObjCommand(interp, "tls::md4", HashMD4Cmd, (ClientData) 0, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateObjCommand(interp, "tls::md5", HashMD5Cmd, (ClientData) 0, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateObjCommand(interp, "tls::sha1", HashSHA1Cmd, (ClientData) 0, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateObjCommand(interp, "tls::sha256", HashSHA256Cmd, (ClientData) 0, (Tcl_CmdDeleteProc *) NULL); + Tcl_CreateObjCommand(interp, "tls::digest", DigestCmd, (ClientData) 0, (Tcl_CmdDeleteProc *) NULL); + Tcl_CreateObjCommand(interp, "tls::digests", DigestListCmd, (ClientData) 0, (Tcl_CmdDeleteProc *) NULL); + Tcl_CreateObjCommand(interp, "tls::md4", DigestMD4Cmd, (ClientData) 0, (Tcl_CmdDeleteProc *) NULL); + Tcl_CreateObjCommand(interp, "tls::md5", DigestMD5Cmd, (ClientData) 0, (Tcl_CmdDeleteProc *) NULL); + Tcl_CreateObjCommand(interp, "tls::sha1", DigestSHA1Cmd, (ClientData) 0, (Tcl_CmdDeleteProc *) NULL); + Tcl_CreateObjCommand(interp, "tls::sha256", DigestSHA256Cmd, (ClientData) 0, (Tcl_CmdDeleteProc *) NULL); if (interp) { Tcl_Eval(interp, tlsTclInitScript); }