diff --git a/pw_checksum/BUILD b/pw_checksum/BUILD
index 8f1ce29..1384325 100644
--- a/pw_checksum/BUILD
+++ b/pw_checksum/BUILD
@@ -26,9 +26,11 @@
     name = "pw_checksum",
     srcs = [
         "ccitt_crc16.cc",
+        "crc32.cc"
     ],
     hdrs = [
         "public/pw_checksum/ccitt_crc16.h",
+        "public/pw_checksum/crc32.h"
     ],
     includes = ["public"],
     deps = ["//pw_span"],
@@ -45,3 +47,15 @@
         "//pw_unit_test",
     ],
 )
+
+pw_cc_test(
+    name = "crc32_test",
+    srcs = [
+        "crc32_test_c.c",
+        "crc32_test.cc",
+    ],
+    deps = [
+        ":pw_checksum",
+        "//pw_unit_test",
+    ],
+)
diff --git a/pw_checksum/BUILD.gn b/pw_checksum/BUILD.gn
index 0dec534..43da086 100644
--- a/pw_checksum/BUILD.gn
+++ b/pw_checksum/BUILD.gn
@@ -24,13 +24,22 @@
 
 pw_source_set("pw_checksum") {
   public_configs = [ ":default_config" ]
-  public = [ "public/pw_checksum/ccitt_crc16.h" ]
-  sources = [ "ccitt_crc16.cc" ] + public
+  public = [
+    "public/pw_checksum/ccitt_crc16.h",
+    "public/pw_checksum/crc32.h",
+  ]
+  sources = [
+    "ccitt_crc16.cc",
+    "crc32.cc",
+  ]
   public_deps = [ dir_pw_span ]
 }
 
 pw_test_group("tests") {
-  tests = [ ":ccitt_crc16_test" ]
+  tests = [
+    ":ccitt_crc16_test",
+    ":crc32_test",
+  ]
 }
 
 pw_test("ccitt_crc16_test") {
@@ -41,6 +50,14 @@
   ]
 }
 
+pw_test("crc32_test") {
+  deps = [ ":pw_checksum" ]
+  sources = [
+    "crc32_test.cc",
+    "crc32_test_c.c",
+  ]
+}
+
 pw_doc_group("docs") {
   sources = [ "docs.rst" ]
 }
diff --git a/pw_checksum/crc32.cc b/pw_checksum/crc32.cc
new file mode 100644
index 0000000..76a18d0
--- /dev/null
+++ b/pw_checksum/crc32.cc
@@ -0,0 +1,84 @@
+// Copyright 2020 The Pigweed Authors
+//
+// 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
+//
+//     https://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.
+
+#include "pw_checksum/crc32.h"
+
+namespace pw::checksum {
+namespace {
+
+constexpr uint32_t kCrc32Table[] = {
+    0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
+    0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
+    0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
+    0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
+    0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
+    0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
+    0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,
+    0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
+    0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
+    0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
+    0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,
+    0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
+    0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
+    0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
+    0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
+    0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
+    0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
+    0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
+    0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
+    0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+    0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
+    0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
+    0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
+    0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
+    0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
+    0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
+    0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
+    0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
+    0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
+    0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+    0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
+    0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
+    0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
+    0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
+    0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
+    0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
+    0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
+    0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
+    0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
+    0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+    0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
+    0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
+    0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d};
+
+}  // namespace
+
+extern "C" {
+
+uint32_t pw_ChecksumCrc32Append(const void* data,
+                                size_t size_bytes,
+                                uint32_t previous_result) {
+  const uint8_t* const array = static_cast<const uint8_t*>(data);
+
+  previous_result = ~previous_result;
+
+  for (size_t i = 0; i < size_bytes; ++i) {
+    previous_result = kCrc32Table[(previous_result ^ array[i]) & 0xffu] ^
+                      (previous_result >> 8);
+  }
+
+  return ~previous_result;
+}
+}
+}  // namespace pw::checksum
diff --git a/pw_checksum/crc32_test.cc b/pw_checksum/crc32_test.cc
new file mode 100644
index 0000000..87b8430
--- /dev/null
+++ b/pw_checksum/crc32_test.cc
@@ -0,0 +1,88 @@
+// Copyright 2020 The Pigweed Authors
+//
+// 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
+//
+//     https://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.
+#include "pw_checksum/crc32.h"
+
+#include <span>
+#include <string_view>
+
+#include "gtest/gtest.h"
+
+namespace pw::checksum {
+namespace {
+
+// The expected CRC32 values were calculated using
+//
+//   http://www.sunshine2k.de/coding/javascript/crc/crc_js.html
+//
+// with polynomial 0x4C11DB7, initial value 0xFFFFFFFF.
+
+constexpr uint8_t kBytes[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
+constexpr uint8_t kBytesPart0[] = {1, 2, 3, 4, 5};
+constexpr uint8_t kBytesPart1[] = {6, 7, 8, 9};
+constexpr uint32_t kBufferCrc = 0x40EFAB9E;
+
+constexpr std::string_view kString =
+    "In the beginning the Universe was created. This has made a lot of "
+    "people very angry and been widely regarded as a bad move.";
+constexpr uint32_t kStringCrc = 0x9EC87F88;
+
+TEST(Crc32, Empty) {
+  EXPECT_EQ(Crc32(std::span<std::byte>()), ~kCrc32InitialValue);
+}
+
+TEST(Crc32, ByteByByte) {
+  uint32_t crc;
+  crc = Crc32(std::byte{kBytes[0]});
+  for (size_t i = 1; i < sizeof(kBytes); i++) {
+    crc = Crc32(std::byte{kBytes[i]}, crc);
+  }
+  EXPECT_EQ(crc, kBufferCrc);
+}
+
+TEST(Crc32, Buffer) {
+  EXPECT_EQ(Crc32(as_bytes(std::span(kBytes))), kBufferCrc);
+}
+
+TEST(Crc32, BufferAppend) {
+  uint32_t crc = Crc32(as_bytes(std::span(kBytesPart0)));
+  EXPECT_EQ(Crc32(as_bytes(std::span(kBytesPart1)), crc), kBufferCrc);
+}
+
+TEST(Crc32, String) {
+  EXPECT_EQ(Crc32(as_bytes(std::span(kString))), kStringCrc);
+}
+
+extern "C" uint32_t CallChecksumCrc32(const void* data, size_t size_bytes);
+extern "C" uint32_t CallChecksumCrc32Append(const void* data,
+                                            size_t size_bytes);
+
+TEST(Crc32FromC, Buffer) {
+  EXPECT_EQ(CallChecksumCrc32(kBytes, sizeof(kBytes)), kBufferCrc);
+}
+
+TEST(Crc32FromC, String) {
+  EXPECT_EQ(CallChecksumCrc32(kString.data(), kString.size()), kStringCrc);
+}
+
+TEST(Crc32AppendFromC, Buffer) {
+  EXPECT_EQ(CallChecksumCrc32(kBytes, sizeof(kBytes)), kBufferCrc);
+}
+
+TEST(Crc32AppendFromC, String) {
+  EXPECT_EQ(CallChecksumCrc32Append(kString.data(), kString.size()),
+            kStringCrc);
+}
+
+}  // namespace
+}  // namespace pw::checksum
diff --git a/pw_checksum/crc32_test_c.c b/pw_checksum/crc32_test_c.c
new file mode 100644
index 0000000..107f077
--- /dev/null
+++ b/pw_checksum/crc32_test_c.c
@@ -0,0 +1,23 @@
+// Copyright 2020 The Pigweed Authors
+//
+// 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
+//
+//     https://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.
+
+#include "pw_checksum/crc32.h"
+
+uint32_t CallChecksumCrc32(const void* data, size_t size_bytes) {
+  return pw_ChecksumCrc32(data, size_bytes);
+}
+
+uint32_t CallChecksumCrc32Append(const void* data, size_t size_bytes) {
+  return pw_ChecksumCrc32Append(data, size_bytes, ~0xFFFFFFFFu);
+}
\ No newline at end of file
diff --git a/pw_checksum/docs.rst b/pw_checksum/docs.rst
index 793dcdc..ed835c1 100644
--- a/pw_checksum/docs.rst
+++ b/pw_checksum/docs.rst
@@ -30,6 +30,32 @@
 
     crc  = CcittCrc16(more_data, crc);
 
+pw_checksum/crc32.h
+===================
+
+.. cpp:var:: constexpr uint32_t kCrc32InitialValue = 0xFFFFFFFF
+
+  The initial value for the CRC32.
+
+.. cpp:function:: uint32_t Crc32(span<const std::byte> data)
+
+  Calculates the initial / one-time CRC32 of the provided data using polynomial
+  0x4C11DB7, with an initial value of :cpp:expr:`0xFFFFFFFF`.
+
+  .. code-block:: cpp
+
+    uint32_t crc = Crc32(my_data);
+
+.. cpp:function:: uint32_t Crc32(span<const std::byte> data, uint32_t previous_result)
+
+  Incrementally append calculation of a CRC32, need to pass in the previous
+  result.
+
+  .. code-block:: cpp
+
+    uint32_t crc = Crc32(my_data);
+    crc = Crc32(more_data, crc);
+
 Compatibility
 =============
 * C
diff --git a/pw_checksum/public/pw_checksum/crc32.h b/pw_checksum/public/pw_checksum/crc32.h
new file mode 100644
index 0000000..340d8f7
--- /dev/null
+++ b/pw_checksum/public/pw_checksum/crc32.h
@@ -0,0 +1,70 @@
+// Copyright 2020 The Pigweed Authors
+//
+// 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
+//
+//     https://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.
+#pragma once
+
+#include <stddef.h>
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif  // __cplusplus
+
+#define PW_CHECKSUM_CRC32_INITIAL_VALUE 0xFFFFFFFFu
+
+// C API for calculating the ANSI CRC32 of an array of data.
+
+uint32_t pw_ChecksumCrc32Append(const void* data,
+                                size_t size_bytes,
+                                uint32_t previous_result);
+
+inline uint32_t pw_ChecksumCrc32(const void* data, size_t size_bytes) {
+  return pw_ChecksumCrc32Append(
+      data, size_bytes, ~PW_CHECKSUM_CRC32_INITIAL_VALUE);
+};
+
+#ifdef __cplusplus
+}  // extern "C"
+
+#include <span>
+
+namespace pw::checksum {
+
+inline constexpr uint32_t kCrc32InitialValue = PW_CHECKSUM_CRC32_INITIAL_VALUE;
+
+// Calculates initial / one-time ANSI CRC32 for the provided data with standard
+// initial value.
+inline uint32_t Crc32(std::span<const std::byte> data) {
+  return pw_ChecksumCrc32(data.data(), data.size_bytes());
+}
+
+// Update an existing CRC, pass the previous value as the value argument.
+inline uint32_t Crc32(std::span<const std::byte> data,
+                      uint32_t previous_result) {
+  return pw_ChecksumCrc32Append(
+      data.data(), data.size_bytes(), previous_result);
+}
+
+// Calculates initial / one-time ANSI CRC32 for a single byte with standard
+// initial value. This is useful for updating a CRC byte-by-byte.
+inline uint32_t Crc32(std::byte value) {
+  return pw_ChecksumCrc32(&value, sizeof(value));
+}
+
+// Update an existing CRC, pass the previous value as the value argument.
+inline uint32_t Crc32(std::byte value, uint32_t previous_result) {
+  return pw_ChecksumCrc32Append(&value, sizeof(value), previous_result);
+}
+
+}  // namespace pw::checksum
+#endif  // __cplusplus
