%PDF- %PDF-
Direktori : /home/graphicd/public_html/vebto/vendor/google/crc32/src/ |
Current File : /home/graphicd/public_html/vebto/vendor/google/crc32/src/CRC32.php |
<?php /** * Copyright 2019 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ namespace Google\CRC32; use Google\CRC32\Builtin; use Google\CRC32\Google; use Google\CRC32\PHP; /** * Various CRC32 implementations. * * ``` * use Google\CRC32\CRC32; * * $crc = CRC32::create(CRC32::CASTAGNOLI); * $crc->update('hello'); * * echo $crc->hash(); * ``` */ class CRC32 { use CRCTrait; /** * IEEE polynomial as used by ethernet (IEEE 802.3), v.42, fddi, gzip, * zip, png, ... */ const IEEE = 0xedb88320; /** * Castagnoli's polynomial, used in iSCSI, SCTP, Google Cloud Storage, * Apache Kafka, and has hardware-accelerated in modern intel CPUs. * https://doi.org/10.1109/26.231911 */ const CASTAGNOLI = 0x82f63b78; /** * Koopman's polynomial. * https://doi.org/10.1109/DSN.2002.1028931 */ const KOOPMAN = 0xeb31d82e; /** * The size of the checksum in bytes. */ const SIZE = 4; private static $mapping = [ self::IEEE => 'IEEE', self::CASTAGNOLI => 'Castagnoli', self::KOOPMAN => 'Koopman', ]; private function __construct() { // Prevent instantiation. } /** * Returns the best CRC implementation available on this machine. * * @param integer $polynomial The CRC polynomial. Use a 32-bit number, * or one of the supplied constants, CRC32::IEEE, * CRC32::CASTAGNOLI, or CRC32::KOOPMAN. * * @return CRC32Interface */ public static function create($polynomial) { if (Google::supports($polynomial) && function_exists('crc32c')) { return new Google(); } if (Builtin::supports($polynomial)) { return new Builtin($polynomial); } // Fallback to the pure PHP version return new PHP($polynomial); } /** * Prints the human friendly name for this polynomial. * * @param integer $polynomial The CRC polynomial. * * @return string */ public static function string($polynomial) { if (isset(self::$mapping[$polynomial])) { return self::$mapping[$polynomial]; } return '0x' . self::int2hex($polynomial); } }