[//000000001]: # (cksum \- Cyclic Redundancy Checks)
[//000000002]: # (Generated from file 'cksum\.man' by tcllib/doctools with format 'markdown')
[//000000003]: # (Copyright © 2002, Pat Thoyts)
[//000000004]: # (cksum\(n\) 1\.1\.4 tcllib "Cyclic Redundancy Checks")
[ Main Table Of Contents | Table Of Contents | Keyword Index | Categories | Modules | Applications ]
# NAME
cksum \- Calculate a cksum\(1\) compatible checksum
# Table Of Contents
- [Table Of Contents](#toc)
- [Synopsis](#synopsis)
- [Description](#section1)
- [COMMANDS](#section2)
- [OPTIONS](#section3)
- [PROGRAMMING INTERFACE](#section4)
- [EXAMPLES](#section5)
- [AUTHORS](#section6)
- [Bugs, Ideas, Feedback](#section7)
- [See Also](#seealso)
- [Keywords](#keywords)
- [Category](#category)
- [Copyright](#copyright)
# SYNOPSIS
package require Tcl 8\.2
package require cksum ?1\.1\.4?
[__::crc::cksum__ ?*\-format format*? ?*\-chunksize size*? \[ *\-channel chan* | *\-filename file* | *string* \]](#1)
[__::crc::CksumInit__](#2)
[__::crc::CksumUpdate__ *token* *data*](#3)
[__::crc::CksumFinal__ *token*](#4)
# DESCRIPTION
This package provides a Tcl implementation of the cksum\(1\) algorithm based upon
information provided at in the GNU implementation of this program as part of the
GNU Textutils 2\.0 package\.
# COMMANDS
- __::crc::cksum__ ?*\-format format*? ?*\-chunksize size*? \[ *\-channel chan* | *\-filename file* | *string* \]
The command takes string data or a channel or file name and returns a
checksum value calculated using the __cksum\(1\)__ algorithm\. The result
is formatted using the *format*\(n\) specifier provided or as an unsigned
integer \(%u\) by default\.
# OPTIONS
- \-channel *name*
Return a checksum for the data read from a channel\. The command will read
data from the channel until the __eof__ is true\. If you need to be able
to process events during this calculation see the [PROGRAMMING
INTERFACE](#section4) section
- \-filename *name*
This is a convenience option that opens the specified file, sets the
encoding to binary and then acts as if the *\-channel* option had been
used\. The file is closed on completion\.
- \-format *string*
Return the checksum using an alternative format template\.
# PROGRAMMING INTERFACE
The cksum package implements the checksum using a context variable to which
additional data can be added at any time\. This is expecially useful in an event
based environment such as a Tk application or a web server package\. Data to be
checksummed may be handled incrementally during a __fileevent__ handler in
discrete chunks\. This can improve the interactive nature of a GUI application
and can help to avoid excessive memory consumption\.
- __::crc::CksumInit__
Begins a new cksum context\. Returns a token ID that must be used for the
remaining functions\. An optional seed may be specified if required\.
- __::crc::CksumUpdate__ *token* *data*
Add data to the checksum identified by token\. Calling *CksumUpdate $token
"abcd"* is equivalent to calling *CksumUpdate $token "ab"* followed by
*CksumUpdate $token "cb"*\. See [EXAMPLES](#section5)\.
- __::crc::CksumFinal__ *token*
Returns the checksum value and releases any resources held by this token\.
Once this command completes the token will be invalid\. The result is a 32
bit integer value\.
# EXAMPLES
% crc::cksum "Hello, World!"
2609532967
% crc::cksum -format 0x%X "Hello, World!"
0x9B8A5027
% crc::cksum -file cksum.tcl
1828321145
% set tok [crc::CksumInit]
% crc::CksumUpdate $tok "Hello, "
% crc::CksumUpdate $tok "World!"
% crc::CksumFinal $tok
2609532967
# AUTHORS
Pat Thoyts
# Bugs, Ideas, Feedback
This document, and the package it describes, will undoubtedly contain bugs and
other problems\. Please report such in the category *crc* of the [Tcllib
Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report any ideas
for enhancements you may have for either package and/or documentation\.
When proposing code changes, please provide *unified diffs*, i\.e the output of
__diff \-u__\.
Note further that *attachments* are strongly preferred over inlined patches\.
Attachments can be made by going to the __Edit__ form of the ticket
immediately after its creation, and then using the left\-most button in the
secondary navigation bar\.
# SEE ALSO
[crc32\(n\)](crc32\.md), [sum\(n\)](sum\.md)
# KEYWORDS
[checksum](\.\./\.\./\.\./\.\./index\.md\#checksum),
[cksum](\.\./\.\./\.\./\.\./index\.md\#cksum), [crc](\.\./\.\./\.\./\.\./index\.md\#crc),
[crc32](\.\./\.\./\.\./\.\./index\.md\#crc32), [cyclic redundancy
check](\.\./\.\./\.\./\.\./index\.md\#cyclic\_redundancy\_check), [data
integrity](\.\./\.\./\.\./\.\./index\.md\#data\_integrity),
[security](\.\./\.\./\.\./\.\./index\.md\#security)
# CATEGORY
Hashes, checksums, and encryption
# COPYRIGHT
Copyright © 2002, Pat Thoyts