1/*
2 * Copyright 2010-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License").
5 * You may not use this file except in compliance with the License.
6 * A copy of the License is located at
7 *
8 * http://aws.amazon.com/apache2.0
9 *
10 * or in the "license" file accompanying this file. This file is distributed
11 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
12 * express or implied. See the License for the specific language governing
13 * permissions and limitations under the License.
14 */
15#include <aws/checksums/crc.h>
16
17#include <aws/checksums/private/cpuid.h>
18#include <aws/checksums/private/crc_priv.h>
19
20static uint32_t (*s_crc32c_fn_ptr)(const uint8_t *input, int length, uint32_t previousCrc32) = 0;
21
22uint32_t aws_checksums_crc32(const uint8_t *input, int length, uint32_t previousCrc32) {
23 return aws_checksums_crc32_sw(input, length, previousCrc32);
24}
25
26uint32_t aws_checksums_crc32c(const uint8_t *input, int length, uint32_t previousCrc32) {
27 if (!s_crc32c_fn_ptr) {
28 if (aws_checksums_is_sse42_present()) {
29 s_crc32c_fn_ptr = aws_checksums_crc32c_hw;
30 } else {
31 s_crc32c_fn_ptr = aws_checksums_crc32c_sw;
32 }
33 }
34 return s_crc32c_fn_ptr(input, length, previousCrc32);
35}
36