xref: /aosp_15_r20/external/webrtc/net/dcsctp/packet/crc32c.cc (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1*d9f75844SAndroid Build Coastguard Worker /*
2*d9f75844SAndroid Build Coastguard Worker  *  Copyright (c) 2021 The WebRTC project authors. All Rights Reserved.
3*d9f75844SAndroid Build Coastguard Worker  *
4*d9f75844SAndroid Build Coastguard Worker  *  Use of this source code is governed by a BSD-style license
5*d9f75844SAndroid Build Coastguard Worker  *  that can be found in the LICENSE file in the root of the source
6*d9f75844SAndroid Build Coastguard Worker  *  tree. An additional intellectual property rights grant can be found
7*d9f75844SAndroid Build Coastguard Worker  *  in the file PATENTS.  All contributing project authors may
8*d9f75844SAndroid Build Coastguard Worker  *  be found in the AUTHORS file in the root of the source tree.
9*d9f75844SAndroid Build Coastguard Worker  */
10*d9f75844SAndroid Build Coastguard Worker #include "net/dcsctp/packet/crc32c.h"
11*d9f75844SAndroid Build Coastguard Worker 
12*d9f75844SAndroid Build Coastguard Worker #include <cstdint>
13*d9f75844SAndroid Build Coastguard Worker 
14*d9f75844SAndroid Build Coastguard Worker #include "third_party/crc32c/src/include/crc32c/crc32c.h"
15*d9f75844SAndroid Build Coastguard Worker 
16*d9f75844SAndroid Build Coastguard Worker namespace dcsctp {
17*d9f75844SAndroid Build Coastguard Worker 
GenerateCrc32C(rtc::ArrayView<const uint8_t> data)18*d9f75844SAndroid Build Coastguard Worker uint32_t GenerateCrc32C(rtc::ArrayView<const uint8_t> data) {
19*d9f75844SAndroid Build Coastguard Worker   uint32_t crc32c = crc32c_value(data.data(), data.size());
20*d9f75844SAndroid Build Coastguard Worker 
21*d9f75844SAndroid Build Coastguard Worker   // Byte swapping for little endian byte order:
22*d9f75844SAndroid Build Coastguard Worker   uint8_t byte0 = crc32c;
23*d9f75844SAndroid Build Coastguard Worker   uint8_t byte1 = crc32c >> 8;
24*d9f75844SAndroid Build Coastguard Worker   uint8_t byte2 = crc32c >> 16;
25*d9f75844SAndroid Build Coastguard Worker   uint8_t byte3 = crc32c >> 24;
26*d9f75844SAndroid Build Coastguard Worker   crc32c = ((byte0 << 24) | (byte1 << 16) | (byte2 << 8) | byte3);
27*d9f75844SAndroid Build Coastguard Worker   return crc32c;
28*d9f75844SAndroid Build Coastguard Worker }
29*d9f75844SAndroid Build Coastguard Worker }  // namespace dcsctp
30