annotate src/zlib-1.2.7/doc/rfc1950.txt @ 23:619f715526df sv_v2.1

Update Vamp plugin SDK to 2.5
author Chris Cannam
date Thu, 09 May 2013 10:52:46 +0100
parents e13257ea84a4
children
rev   line source
Chris@4 1
Chris@4 2
Chris@4 3
Chris@4 4
Chris@4 5
Chris@4 6
Chris@4 7 Network Working Group P. Deutsch
Chris@4 8 Request for Comments: 1950 Aladdin Enterprises
Chris@4 9 Category: Informational J-L. Gailly
Chris@4 10 Info-ZIP
Chris@4 11 May 1996
Chris@4 12
Chris@4 13
Chris@4 14 ZLIB Compressed Data Format Specification version 3.3
Chris@4 15
Chris@4 16 Status of This Memo
Chris@4 17
Chris@4 18 This memo provides information for the Internet community. This memo
Chris@4 19 does not specify an Internet standard of any kind. Distribution of
Chris@4 20 this memo is unlimited.
Chris@4 21
Chris@4 22 IESG Note:
Chris@4 23
Chris@4 24 The IESG takes no position on the validity of any Intellectual
Chris@4 25 Property Rights statements contained in this document.
Chris@4 26
Chris@4 27 Notices
Chris@4 28
Chris@4 29 Copyright (c) 1996 L. Peter Deutsch and Jean-Loup Gailly
Chris@4 30
Chris@4 31 Permission is granted to copy and distribute this document for any
Chris@4 32 purpose and without charge, including translations into other
Chris@4 33 languages and incorporation into compilations, provided that the
Chris@4 34 copyright notice and this notice are preserved, and that any
Chris@4 35 substantive changes or deletions from the original are clearly
Chris@4 36 marked.
Chris@4 37
Chris@4 38 A pointer to the latest version of this and related documentation in
Chris@4 39 HTML format can be found at the URL
Chris@4 40 <ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html>.
Chris@4 41
Chris@4 42 Abstract
Chris@4 43
Chris@4 44 This specification defines a lossless compressed data format. The
Chris@4 45 data can be produced or consumed, even for an arbitrarily long
Chris@4 46 sequentially presented input data stream, using only an a priori
Chris@4 47 bounded amount of intermediate storage. The format presently uses
Chris@4 48 the DEFLATE compression method but can be easily extended to use
Chris@4 49 other compression methods. It can be implemented readily in a manner
Chris@4 50 not covered by patents. This specification also defines the ADLER-32
Chris@4 51 checksum (an extension and improvement of the Fletcher checksum),
Chris@4 52 used for detection of data corruption, and provides an algorithm for
Chris@4 53 computing it.
Chris@4 54
Chris@4 55
Chris@4 56
Chris@4 57
Chris@4 58 Deutsch & Gailly Informational [Page 1]
Chris@4 59
Chris@4 60 RFC 1950 ZLIB Compressed Data Format Specification May 1996
Chris@4 61
Chris@4 62
Chris@4 63 Table of Contents
Chris@4 64
Chris@4 65 1. Introduction ................................................... 2
Chris@4 66 1.1. Purpose ................................................... 2
Chris@4 67 1.2. Intended audience ......................................... 3
Chris@4 68 1.3. Scope ..................................................... 3
Chris@4 69 1.4. Compliance ................................................ 3
Chris@4 70 1.5. Definitions of terms and conventions used ................ 3
Chris@4 71 1.6. Changes from previous versions ............................ 3
Chris@4 72 2. Detailed specification ......................................... 3
Chris@4 73 2.1. Overall conventions ....................................... 3
Chris@4 74 2.2. Data format ............................................... 4
Chris@4 75 2.3. Compliance ................................................ 7
Chris@4 76 3. References ..................................................... 7
Chris@4 77 4. Source code .................................................... 8
Chris@4 78 5. Security Considerations ........................................ 8
Chris@4 79 6. Acknowledgements ............................................... 8
Chris@4 80 7. Authors' Addresses ............................................. 8
Chris@4 81 8. Appendix: Rationale ............................................ 9
Chris@4 82 9. Appendix: Sample code ..........................................10
Chris@4 83
Chris@4 84 1. Introduction
Chris@4 85
Chris@4 86 1.1. Purpose
Chris@4 87
Chris@4 88 The purpose of this specification is to define a lossless
Chris@4 89 compressed data format that:
Chris@4 90
Chris@4 91 * Is independent of CPU type, operating system, file system,
Chris@4 92 and character set, and hence can be used for interchange;
Chris@4 93
Chris@4 94 * Can be produced or consumed, even for an arbitrarily long
Chris@4 95 sequentially presented input data stream, using only an a
Chris@4 96 priori bounded amount of intermediate storage, and hence can
Chris@4 97 be used in data communications or similar structures such as
Chris@4 98 Unix filters;
Chris@4 99
Chris@4 100 * Can use a number of different compression methods;
Chris@4 101
Chris@4 102 * Can be implemented readily in a manner not covered by
Chris@4 103 patents, and hence can be practiced freely.
Chris@4 104
Chris@4 105 The data format defined by this specification does not attempt to
Chris@4 106 allow random access to compressed data.
Chris@4 107
Chris@4 108
Chris@4 109
Chris@4 110
Chris@4 111
Chris@4 112
Chris@4 113
Chris@4 114 Deutsch & Gailly Informational [Page 2]
Chris@4 115
Chris@4 116 RFC 1950 ZLIB Compressed Data Format Specification May 1996
Chris@4 117
Chris@4 118
Chris@4 119 1.2. Intended audience
Chris@4 120
Chris@4 121 This specification is intended for use by implementors of software
Chris@4 122 to compress data into zlib format and/or decompress data from zlib
Chris@4 123 format.
Chris@4 124
Chris@4 125 The text of the specification assumes a basic background in
Chris@4 126 programming at the level of bits and other primitive data
Chris@4 127 representations.
Chris@4 128
Chris@4 129 1.3. Scope
Chris@4 130
Chris@4 131 The specification specifies a compressed data format that can be
Chris@4 132 used for in-memory compression of a sequence of arbitrary bytes.
Chris@4 133
Chris@4 134 1.4. Compliance
Chris@4 135
Chris@4 136 Unless otherwise indicated below, a compliant decompressor must be
Chris@4 137 able to accept and decompress any data set that conforms to all
Chris@4 138 the specifications presented here; a compliant compressor must
Chris@4 139 produce data sets that conform to all the specifications presented
Chris@4 140 here.
Chris@4 141
Chris@4 142 1.5. Definitions of terms and conventions used
Chris@4 143
Chris@4 144 byte: 8 bits stored or transmitted as a unit (same as an octet).
Chris@4 145 (For this specification, a byte is exactly 8 bits, even on
Chris@4 146 machines which store a character on a number of bits different
Chris@4 147 from 8.) See below, for the numbering of bits within a byte.
Chris@4 148
Chris@4 149 1.6. Changes from previous versions
Chris@4 150
Chris@4 151 Version 3.1 was the first public release of this specification.
Chris@4 152 In version 3.2, some terminology was changed and the Adler-32
Chris@4 153 sample code was rewritten for clarity. In version 3.3, the
Chris@4 154 support for a preset dictionary was introduced, and the
Chris@4 155 specification was converted to RFC style.
Chris@4 156
Chris@4 157 2. Detailed specification
Chris@4 158
Chris@4 159 2.1. Overall conventions
Chris@4 160
Chris@4 161 In the diagrams below, a box like this:
Chris@4 162
Chris@4 163 +---+
Chris@4 164 | | <-- the vertical bars might be missing
Chris@4 165 +---+
Chris@4 166
Chris@4 167
Chris@4 168
Chris@4 169
Chris@4 170 Deutsch & Gailly Informational [Page 3]
Chris@4 171
Chris@4 172 RFC 1950 ZLIB Compressed Data Format Specification May 1996
Chris@4 173
Chris@4 174
Chris@4 175 represents one byte; a box like this:
Chris@4 176
Chris@4 177 +==============+
Chris@4 178 | |
Chris@4 179 +==============+
Chris@4 180
Chris@4 181 represents a variable number of bytes.
Chris@4 182
Chris@4 183 Bytes stored within a computer do not have a "bit order", since
Chris@4 184 they are always treated as a unit. However, a byte considered as
Chris@4 185 an integer between 0 and 255 does have a most- and least-
Chris@4 186 significant bit, and since we write numbers with the most-
Chris@4 187 significant digit on the left, we also write bytes with the most-
Chris@4 188 significant bit on the left. In the diagrams below, we number the
Chris@4 189 bits of a byte so that bit 0 is the least-significant bit, i.e.,
Chris@4 190 the bits are numbered:
Chris@4 191
Chris@4 192 +--------+
Chris@4 193 |76543210|
Chris@4 194 +--------+
Chris@4 195
Chris@4 196 Within a computer, a number may occupy multiple bytes. All
Chris@4 197 multi-byte numbers in the format described here are stored with
Chris@4 198 the MOST-significant byte first (at the lower memory address).
Chris@4 199 For example, the decimal number 520 is stored as:
Chris@4 200
Chris@4 201 0 1
Chris@4 202 +--------+--------+
Chris@4 203 |00000010|00001000|
Chris@4 204 +--------+--------+
Chris@4 205 ^ ^
Chris@4 206 | |
Chris@4 207 | + less significant byte = 8
Chris@4 208 + more significant byte = 2 x 256
Chris@4 209
Chris@4 210 2.2. Data format
Chris@4 211
Chris@4 212 A zlib stream has the following structure:
Chris@4 213
Chris@4 214 0 1
Chris@4 215 +---+---+
Chris@4 216 |CMF|FLG| (more-->)
Chris@4 217 +---+---+
Chris@4 218
Chris@4 219
Chris@4 220
Chris@4 221
Chris@4 222
Chris@4 223
Chris@4 224
Chris@4 225
Chris@4 226 Deutsch & Gailly Informational [Page 4]
Chris@4 227
Chris@4 228 RFC 1950 ZLIB Compressed Data Format Specification May 1996
Chris@4 229
Chris@4 230
Chris@4 231 (if FLG.FDICT set)
Chris@4 232
Chris@4 233 0 1 2 3
Chris@4 234 +---+---+---+---+
Chris@4 235 | DICTID | (more-->)
Chris@4 236 +---+---+---+---+
Chris@4 237
Chris@4 238 +=====================+---+---+---+---+
Chris@4 239 |...compressed data...| ADLER32 |
Chris@4 240 +=====================+---+---+---+---+
Chris@4 241
Chris@4 242 Any data which may appear after ADLER32 are not part of the zlib
Chris@4 243 stream.
Chris@4 244
Chris@4 245 CMF (Compression Method and flags)
Chris@4 246 This byte is divided into a 4-bit compression method and a 4-
Chris@4 247 bit information field depending on the compression method.
Chris@4 248
Chris@4 249 bits 0 to 3 CM Compression method
Chris@4 250 bits 4 to 7 CINFO Compression info
Chris@4 251
Chris@4 252 CM (Compression method)
Chris@4 253 This identifies the compression method used in the file. CM = 8
Chris@4 254 denotes the "deflate" compression method with a window size up
Chris@4 255 to 32K. This is the method used by gzip and PNG (see
Chris@4 256 references [1] and [2] in Chapter 3, below, for the reference
Chris@4 257 documents). CM = 15 is reserved. It might be used in a future
Chris@4 258 version of this specification to indicate the presence of an
Chris@4 259 extra field before the compressed data.
Chris@4 260
Chris@4 261 CINFO (Compression info)
Chris@4 262 For CM = 8, CINFO is the base-2 logarithm of the LZ77 window
Chris@4 263 size, minus eight (CINFO=7 indicates a 32K window size). Values
Chris@4 264 of CINFO above 7 are not allowed in this version of the
Chris@4 265 specification. CINFO is not defined in this specification for
Chris@4 266 CM not equal to 8.
Chris@4 267
Chris@4 268 FLG (FLaGs)
Chris@4 269 This flag byte is divided as follows:
Chris@4 270
Chris@4 271 bits 0 to 4 FCHECK (check bits for CMF and FLG)
Chris@4 272 bit 5 FDICT (preset dictionary)
Chris@4 273 bits 6 to 7 FLEVEL (compression level)
Chris@4 274
Chris@4 275 The FCHECK value must be such that CMF and FLG, when viewed as
Chris@4 276 a 16-bit unsigned integer stored in MSB order (CMF*256 + FLG),
Chris@4 277 is a multiple of 31.
Chris@4 278
Chris@4 279
Chris@4 280
Chris@4 281
Chris@4 282 Deutsch & Gailly Informational [Page 5]
Chris@4 283
Chris@4 284 RFC 1950 ZLIB Compressed Data Format Specification May 1996
Chris@4 285
Chris@4 286
Chris@4 287 FDICT (Preset dictionary)
Chris@4 288 If FDICT is set, a DICT dictionary identifier is present
Chris@4 289 immediately after the FLG byte. The dictionary is a sequence of
Chris@4 290 bytes which are initially fed to the compressor without
Chris@4 291 producing any compressed output. DICT is the Adler-32 checksum
Chris@4 292 of this sequence of bytes (see the definition of ADLER32
Chris@4 293 below). The decompressor can use this identifier to determine
Chris@4 294 which dictionary has been used by the compressor.
Chris@4 295
Chris@4 296 FLEVEL (Compression level)
Chris@4 297 These flags are available for use by specific compression
Chris@4 298 methods. The "deflate" method (CM = 8) sets these flags as
Chris@4 299 follows:
Chris@4 300
Chris@4 301 0 - compressor used fastest algorithm
Chris@4 302 1 - compressor used fast algorithm
Chris@4 303 2 - compressor used default algorithm
Chris@4 304 3 - compressor used maximum compression, slowest algorithm
Chris@4 305
Chris@4 306 The information in FLEVEL is not needed for decompression; it
Chris@4 307 is there to indicate if recompression might be worthwhile.
Chris@4 308
Chris@4 309 compressed data
Chris@4 310 For compression method 8, the compressed data is stored in the
Chris@4 311 deflate compressed data format as described in the document
Chris@4 312 "DEFLATE Compressed Data Format Specification" by L. Peter
Chris@4 313 Deutsch. (See reference [3] in Chapter 3, below)
Chris@4 314
Chris@4 315 Other compressed data formats are not specified in this version
Chris@4 316 of the zlib specification.
Chris@4 317
Chris@4 318 ADLER32 (Adler-32 checksum)
Chris@4 319 This contains a checksum value of the uncompressed data
Chris@4 320 (excluding any dictionary data) computed according to Adler-32
Chris@4 321 algorithm. This algorithm is a 32-bit extension and improvement
Chris@4 322 of the Fletcher algorithm, used in the ITU-T X.224 / ISO 8073
Chris@4 323 standard. See references [4] and [5] in Chapter 3, below)
Chris@4 324
Chris@4 325 Adler-32 is composed of two sums accumulated per byte: s1 is
Chris@4 326 the sum of all bytes, s2 is the sum of all s1 values. Both sums
Chris@4 327 are done modulo 65521. s1 is initialized to 1, s2 to zero. The
Chris@4 328 Adler-32 checksum is stored as s2*65536 + s1 in most-
Chris@4 329 significant-byte first (network) order.
Chris@4 330
Chris@4 331
Chris@4 332
Chris@4 333
Chris@4 334
Chris@4 335
Chris@4 336
Chris@4 337
Chris@4 338 Deutsch & Gailly Informational [Page 6]
Chris@4 339
Chris@4 340 RFC 1950 ZLIB Compressed Data Format Specification May 1996
Chris@4 341
Chris@4 342
Chris@4 343 2.3. Compliance
Chris@4 344
Chris@4 345 A compliant compressor must produce streams with correct CMF, FLG
Chris@4 346 and ADLER32, but need not support preset dictionaries. When the
Chris@4 347 zlib data format is used as part of another standard data format,
Chris@4 348 the compressor may use only preset dictionaries that are specified
Chris@4 349 by this other data format. If this other format does not use the
Chris@4 350 preset dictionary feature, the compressor must not set the FDICT
Chris@4 351 flag.
Chris@4 352
Chris@4 353 A compliant decompressor must check CMF, FLG, and ADLER32, and
Chris@4 354 provide an error indication if any of these have incorrect values.
Chris@4 355 A compliant decompressor must give an error indication if CM is
Chris@4 356 not one of the values defined in this specification (only the
Chris@4 357 value 8 is permitted in this version), since another value could
Chris@4 358 indicate the presence of new features that would cause subsequent
Chris@4 359 data to be interpreted incorrectly. A compliant decompressor must
Chris@4 360 give an error indication if FDICT is set and DICTID is not the
Chris@4 361 identifier of a known preset dictionary. A decompressor may
Chris@4 362 ignore FLEVEL and still be compliant. When the zlib data format
Chris@4 363 is being used as a part of another standard format, a compliant
Chris@4 364 decompressor must support all the preset dictionaries specified by
Chris@4 365 the other format. When the other format does not use the preset
Chris@4 366 dictionary feature, a compliant decompressor must reject any
Chris@4 367 stream in which the FDICT flag is set.
Chris@4 368
Chris@4 369 3. References
Chris@4 370
Chris@4 371 [1] Deutsch, L.P.,"GZIP Compressed Data Format Specification",
Chris@4 372 available in ftp://ftp.uu.net/pub/archiving/zip/doc/
Chris@4 373
Chris@4 374 [2] Thomas Boutell, "PNG (Portable Network Graphics) specification",
Chris@4 375 available in ftp://ftp.uu.net/graphics/png/documents/
Chris@4 376
Chris@4 377 [3] Deutsch, L.P.,"DEFLATE Compressed Data Format Specification",
Chris@4 378 available in ftp://ftp.uu.net/pub/archiving/zip/doc/
Chris@4 379
Chris@4 380 [4] Fletcher, J. G., "An Arithmetic Checksum for Serial
Chris@4 381 Transmissions," IEEE Transactions on Communications, Vol. COM-30,
Chris@4 382 No. 1, January 1982, pp. 247-252.
Chris@4 383
Chris@4 384 [5] ITU-T Recommendation X.224, Annex D, "Checksum Algorithms,"
Chris@4 385 November, 1993, pp. 144, 145. (Available from
Chris@4 386 gopher://info.itu.ch). ITU-T X.244 is also the same as ISO 8073.
Chris@4 387
Chris@4 388
Chris@4 389
Chris@4 390
Chris@4 391
Chris@4 392
Chris@4 393
Chris@4 394 Deutsch & Gailly Informational [Page 7]
Chris@4 395
Chris@4 396 RFC 1950 ZLIB Compressed Data Format Specification May 1996
Chris@4 397
Chris@4 398
Chris@4 399 4. Source code
Chris@4 400
Chris@4 401 Source code for a C language implementation of a "zlib" compliant
Chris@4 402 library is available at ftp://ftp.uu.net/pub/archiving/zip/zlib/.
Chris@4 403
Chris@4 404 5. Security Considerations
Chris@4 405
Chris@4 406 A decoder that fails to check the ADLER32 checksum value may be
Chris@4 407 subject to undetected data corruption.
Chris@4 408
Chris@4 409 6. Acknowledgements
Chris@4 410
Chris@4 411 Trademarks cited in this document are the property of their
Chris@4 412 respective owners.
Chris@4 413
Chris@4 414 Jean-Loup Gailly and Mark Adler designed the zlib format and wrote
Chris@4 415 the related software described in this specification. Glenn
Chris@4 416 Randers-Pehrson converted this document to RFC and HTML format.
Chris@4 417
Chris@4 418 7. Authors' Addresses
Chris@4 419
Chris@4 420 L. Peter Deutsch
Chris@4 421 Aladdin Enterprises
Chris@4 422 203 Santa Margarita Ave.
Chris@4 423 Menlo Park, CA 94025
Chris@4 424
Chris@4 425 Phone: (415) 322-0103 (AM only)
Chris@4 426 FAX: (415) 322-1734
Chris@4 427 EMail: <ghost@aladdin.com>
Chris@4 428
Chris@4 429
Chris@4 430 Jean-Loup Gailly
Chris@4 431
Chris@4 432 EMail: <gzip@prep.ai.mit.edu>
Chris@4 433
Chris@4 434 Questions about the technical content of this specification can be
Chris@4 435 sent by email to
Chris@4 436
Chris@4 437 Jean-Loup Gailly <gzip@prep.ai.mit.edu> and
Chris@4 438 Mark Adler <madler@alumni.caltech.edu>
Chris@4 439
Chris@4 440 Editorial comments on this specification can be sent by email to
Chris@4 441
Chris@4 442 L. Peter Deutsch <ghost@aladdin.com> and
Chris@4 443 Glenn Randers-Pehrson <randeg@alumni.rpi.edu>
Chris@4 444
Chris@4 445
Chris@4 446
Chris@4 447
Chris@4 448
Chris@4 449
Chris@4 450 Deutsch & Gailly Informational [Page 8]
Chris@4 451
Chris@4 452 RFC 1950 ZLIB Compressed Data Format Specification May 1996
Chris@4 453
Chris@4 454
Chris@4 455 8. Appendix: Rationale
Chris@4 456
Chris@4 457 8.1. Preset dictionaries
Chris@4 458
Chris@4 459 A preset dictionary is specially useful to compress short input
Chris@4 460 sequences. The compressor can take advantage of the dictionary
Chris@4 461 context to encode the input in a more compact manner. The
Chris@4 462 decompressor can be initialized with the appropriate context by
Chris@4 463 virtually decompressing a compressed version of the dictionary
Chris@4 464 without producing any output. However for certain compression
Chris@4 465 algorithms such as the deflate algorithm this operation can be
Chris@4 466 achieved without actually performing any decompression.
Chris@4 467
Chris@4 468 The compressor and the decompressor must use exactly the same
Chris@4 469 dictionary. The dictionary may be fixed or may be chosen among a
Chris@4 470 certain number of predefined dictionaries, according to the kind
Chris@4 471 of input data. The decompressor can determine which dictionary has
Chris@4 472 been chosen by the compressor by checking the dictionary
Chris@4 473 identifier. This document does not specify the contents of
Chris@4 474 predefined dictionaries, since the optimal dictionaries are
Chris@4 475 application specific. Standard data formats using this feature of
Chris@4 476 the zlib specification must precisely define the allowed
Chris@4 477 dictionaries.
Chris@4 478
Chris@4 479 8.2. The Adler-32 algorithm
Chris@4 480
Chris@4 481 The Adler-32 algorithm is much faster than the CRC32 algorithm yet
Chris@4 482 still provides an extremely low probability of undetected errors.
Chris@4 483
Chris@4 484 The modulo on unsigned long accumulators can be delayed for 5552
Chris@4 485 bytes, so the modulo operation time is negligible. If the bytes
Chris@4 486 are a, b, c, the second sum is 3a + 2b + c + 3, and so is position
Chris@4 487 and order sensitive, unlike the first sum, which is just a
Chris@4 488 checksum. That 65521 is prime is important to avoid a possible
Chris@4 489 large class of two-byte errors that leave the check unchanged.
Chris@4 490 (The Fletcher checksum uses 255, which is not prime and which also
Chris@4 491 makes the Fletcher check insensitive to single byte changes 0 <->
Chris@4 492 255.)
Chris@4 493
Chris@4 494 The sum s1 is initialized to 1 instead of zero to make the length
Chris@4 495 of the sequence part of s2, so that the length does not have to be
Chris@4 496 checked separately. (Any sequence of zeroes has a Fletcher
Chris@4 497 checksum of zero.)
Chris@4 498
Chris@4 499
Chris@4 500
Chris@4 501
Chris@4 502
Chris@4 503
Chris@4 504
Chris@4 505
Chris@4 506 Deutsch & Gailly Informational [Page 9]
Chris@4 507
Chris@4 508 RFC 1950 ZLIB Compressed Data Format Specification May 1996
Chris@4 509
Chris@4 510
Chris@4 511 9. Appendix: Sample code
Chris@4 512
Chris@4 513 The following C code computes the Adler-32 checksum of a data buffer.
Chris@4 514 It is written for clarity, not for speed. The sample code is in the
Chris@4 515 ANSI C programming language. Non C users may find it easier to read
Chris@4 516 with these hints:
Chris@4 517
Chris@4 518 & Bitwise AND operator.
Chris@4 519 >> Bitwise right shift operator. When applied to an
Chris@4 520 unsigned quantity, as here, right shift inserts zero bit(s)
Chris@4 521 at the left.
Chris@4 522 << Bitwise left shift operator. Left shift inserts zero
Chris@4 523 bit(s) at the right.
Chris@4 524 ++ "n++" increments the variable n.
Chris@4 525 % modulo operator: a % b is the remainder of a divided by b.
Chris@4 526
Chris@4 527 #define BASE 65521 /* largest prime smaller than 65536 */
Chris@4 528
Chris@4 529 /*
Chris@4 530 Update a running Adler-32 checksum with the bytes buf[0..len-1]
Chris@4 531 and return the updated checksum. The Adler-32 checksum should be
Chris@4 532 initialized to 1.
Chris@4 533
Chris@4 534 Usage example:
Chris@4 535
Chris@4 536 unsigned long adler = 1L;
Chris@4 537
Chris@4 538 while (read_buffer(buffer, length) != EOF) {
Chris@4 539 adler = update_adler32(adler, buffer, length);
Chris@4 540 }
Chris@4 541 if (adler != original_adler) error();
Chris@4 542 */
Chris@4 543 unsigned long update_adler32(unsigned long adler,
Chris@4 544 unsigned char *buf, int len)
Chris@4 545 {
Chris@4 546 unsigned long s1 = adler & 0xffff;
Chris@4 547 unsigned long s2 = (adler >> 16) & 0xffff;
Chris@4 548 int n;
Chris@4 549
Chris@4 550 for (n = 0; n < len; n++) {
Chris@4 551 s1 = (s1 + buf[n]) % BASE;
Chris@4 552 s2 = (s2 + s1) % BASE;
Chris@4 553 }
Chris@4 554 return (s2 << 16) + s1;
Chris@4 555 }
Chris@4 556
Chris@4 557 /* Return the adler32 of the bytes buf[0..len-1] */
Chris@4 558
Chris@4 559
Chris@4 560
Chris@4 561
Chris@4 562 Deutsch & Gailly Informational [Page 10]
Chris@4 563
Chris@4 564 RFC 1950 ZLIB Compressed Data Format Specification May 1996
Chris@4 565
Chris@4 566
Chris@4 567 unsigned long adler32(unsigned char *buf, int len)
Chris@4 568 {
Chris@4 569 return update_adler32(1L, buf, len);
Chris@4 570 }
Chris@4 571
Chris@4 572
Chris@4 573
Chris@4 574
Chris@4 575
Chris@4 576
Chris@4 577
Chris@4 578
Chris@4 579
Chris@4 580
Chris@4 581
Chris@4 582
Chris@4 583
Chris@4 584
Chris@4 585
Chris@4 586
Chris@4 587
Chris@4 588
Chris@4 589
Chris@4 590
Chris@4 591
Chris@4 592
Chris@4 593
Chris@4 594
Chris@4 595
Chris@4 596
Chris@4 597
Chris@4 598
Chris@4 599
Chris@4 600
Chris@4 601
Chris@4 602
Chris@4 603
Chris@4 604
Chris@4 605
Chris@4 606
Chris@4 607
Chris@4 608
Chris@4 609
Chris@4 610
Chris@4 611
Chris@4 612
Chris@4 613
Chris@4 614
Chris@4 615
Chris@4 616
Chris@4 617
Chris@4 618 Deutsch & Gailly Informational [Page 11]
Chris@4 619