# US 10,481,972 B1 · File verification using cyclic redundancy check

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 10,481,972 B1
- Document ID: US10481972B1
- Status: Granted
- Kind: B1
- Application number: 15/895,718
- Filed: 2018-02-13
- Granted: 2019-11-19
- Earliest claimed: 2015-08-10
- Assignees: Google Inc.
- Applicants: Google LLC
- Inventors: Andre Lebedev; Christian Eric Schrock
- Web page: https://patentgrep.com/patent/US10481972B1

## CPC

- G06F 11/1004: {to protect a block of data words, e.g. CRC or checksum (G06F11/1076 takes precedence; security arrangements for protecting computers or computer systems against unauthorized activity G06F21/00)}
- G06F 11/0727: {in a storage system, e.g. in a DASD or network based storage system (drivers for digital recording or reproducing units G06F3/06; circuits for error detection or correction within digital recording or reproducing units G11B20/18; for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS], H04L67/1097)}
- H03M 13/09: Error detection only, e.g. using cyclic redundancy check [CRC] codes or single parity bit
- H03M 13/096: {Checksums}
- H03M 13/1515: {Reed-Solomon codes}
- H03M 13/29: combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
- H03M 13/373: {with erasure correction and erasure determination, e.g. for packet loss recovery or setting of erasures for the decoding of Reed-Solomon codes}
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)
- H03M: CODING; DECODING; CODE CONVERSION IN GENERAL (using fluidic means F15C4/00; optical analogue/digital converters G02F7/00; coding, decoding or code conversion, specially adapted for particular applications, see the relevant subclasses, e.g. G01D, G01R, G06F, G06T, G09G, G10L, G11B, G11C, H04B, H04L, H04M, H04N; ciphering or deciphering for cryptography or other purposes involving the need for secrecy G09C)

## Abstract

A system and method are provided for verifying and reconstructing a file using cyclic redundancy checks (CRCs). A writer client sends a file, which includes data chunks including one or more data blocks, and code chunks including one or more code blocks. One or more storage devices store the packets underlying the one or more data blocks and their respective packet CRCs. A curator server stores a first CRC for each complete data chunk and each complete code chunk and determines that an incomplete code chunk has one or more missing code blocks. The curator server generates a second CRC for each of the complete data chunks and the complete code chunks using the packet CRCs, and compares the generated second CRCs with the respective stored first CRCs. The curator server generates a missing chunk CRC for the incomplete code chunk using the packet CRCs.

## Claims

### Claim 1

A system, comprising:
a writer client configured to send a file, the file including data chunks and code chunks, each of the data chunks includes one or more data blocks, and each of the code chunks includes one or more code blocks;
one or more storage devices in communication with the writer client, the storage devices configured to store packets underlying the one or more data blocks;
a curator server in communication with the writer client and the storage devices, the curator server configured to:
store a first cyclic redundancy check (CRC) for each complete data chunk and each complete code chunk;
determine, based on the stored first CRCs, that an incomplete code chunk has one or more missing code blocks;
receive, from the storage devices, packet CRCs for the packets underlying the one or more data blocks;
generate, using the packet CRCs, a second CRC for each of the complete data chunks and each of the complete code chunks;
determine whether the generated second CRCs match the respective stored first CRCs for each of the complete data chunks and each of the complete code chunks; and
generate, using the packet CRCs, a missing chunk CRC for the incomplete code chunk when the generated second CRCs match the respective stored first CRCs for each of the complete data chunks and each of the complete code chunks.

### Claim 2 (depends on 1)

The system of claim 1, wherein the curator server is further configured to:
request further information from one of the storage devices or the writer client when one or more of the generated second CRCs do not match the respective stored first CRCs.

### Claim 3 (depends on 1)

The system of claim 1, wherein the curator server is further configured to:
generate the missing chunk CRC for the incomplete code chunk by zero-padding the packet CRCs and applying an exclusive OR operation on the zero-padded packet CRCs.

### Claim 4 (depends on 1)

The system of claim 1, wherein the curator server is further configured to:
generate, using the packet CRCs, a missing block CRC for each of the one or more missing code blocks.

### Claim 5 (depends on 1)

The system of claim 1, wherein the curator server is further configured to:
generate, using the packet CRCs, a missing file CRC for the file.

### Claim 6 (depends on 1)

The system of claim 1, wherein the curator server is further configured to:
reconstruct, using the packet CRCs, the one or more missing code blocks.

### Claim 7 (depends on 1)

The system of claim 1, wherein the curator server is further configured to:
reconstruct, using the packet CRCs, the incomplete code chunk.

### Claim 8 (depends on 1)

The system of claim 1, wherein the curator server is further configured to:
reconstruct, using the packet CRCs, the file.

### Claim 9

A curator server, comprising:
one or more memories;
one or more processors in communication with the one or more memories, the one or more processors configured to:
receive a file from a writer client, the file including data chunks and code chunks, each of the data chunks includes one or more data blocks, and each of the code chunks includes one or more code blocks;
store a first cyclic redundancy check (CRC) for each complete data chunk and each complete code chunk;
determine, based on the stored first CRCs, that an incomplete code chunk has one or more missing code blocks;
receive, from one or more storage devices, packet CRCs for packets underlying the one or more data blocks;
generate, using the packet CRCs, a second CRC for each of the complete data chunks and each of the complete code chunks;
determine whether the generated second CRCs match the respective stored first CRCs for each of the complete data chunks and each of the complete code chunks; and
generate, using the packet CRCs, a missing chunk CRC for the incomplete code chunk when the generated second CRCs match the respective stored first CRCs for each of the complete data chunks and each of the complete code chunks.

### Claim 10 (depends on 9)

The curator server of claim 9, wherein the one or more processors is further configured to:
request further information from one of the storage devices or the writer client when one or more of the generated second CRCs do not match the respective stored first CRCs.

### Claim 11 (depends on 9)

The curator server of claim 9, wherein the one or more processors is further configured to:
generate the missing chunk CRC for the incomplete code chunk by zero-padding the packet CRCs and applying an exclusive OR operation on the zero-padded packet CRCs.

### Claim 12 (depends on 9)

The curator server of claim 9, wherein the one or more processors is further configured to:
generate, using the packet CRCs, a missing file CRC for the file.

### Claim 13 (depends on 9)

The curator server of claim 9, wherein the one or more processors is further configured to:
reconstruct, using the packet CRCs, the incomplete code chunk.

### Claim 14 (depends on 9)

The curator server of claim 9, wherein the one or more processors is further configured to:
reconstruct, using the packet CRCs, the file.

### Claim 15

A method, comprising:
receiving a file from a writer client, the file including data chunks and code chunks, each of the data chunks includes one or more data blocks, and each of the code chunks includes one or more code blocks;
storing a first cyclic redundancy check (CRC) for each complete data chunk and each complete code chunk;
determining, based on the stored first CRCs, that an incomplete code chunk has one or more missing code blocks;
receiving, from one or more storage devices, packet CRCs for packets underlying the one or more data blocks;
generating, using the packet CRCs, a second CRC for each of the complete data chunks and each of the complete code chunks;
determining whether the generated second CRCs match the respective stored first CRCs for each of the complete data chunks and each of the complete code chunks; and
generating, using the packet CRCs, a missing chunk CRC for the incomplete code chunk when the generated second CRCs match the respective stored first CRCs for each of the complete data chunks and each of the complete code chunks.

### Claim 16 (depends on 15)

The method of claim 15, further comprising:
requesting further information from one of the storage devices or the writer client when one or more of the generated second CRCs do not match the respective stored first CRCs.

### Claim 17 (depends on 15)

The method of claim 15, wherein the generating the missing chunk CRC for the incomplete code chunk further comprising:
zero-padding the packet CRCs; and
applying an exclusive OR operation on the zero-padded packet CRCs.

### Claim 18 (depends on 15)

The method of claim 15, further comprising:
generating, using the packet CRCs, a missing file CRC for the file.

### Claim 19 (depends on 15)

The method of claim 15, further comprising:
reconstructing, using the packet CRCs, the incomplete code chunk.

### Claim 20 (depends on 15)

The method of claim 15, further comprising:
reconstructing, using the packet CRCs, the file.
