# US 7,412,057 B2 · Fast-software-implemented pseudo-random code generator

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

- Number: US 7,412,057 B2
- Document ID: US7412057B2
- Status: Granted
- Kind: B2
- Application number: 10/158,002
- Filed: 2002-05-31
- Published: 2003-12-04
- Granted: 2008-08-12
- Earliest claimed: 2002-05-31
- Assignees: Intel Corporation
- Inventors: Amit Dagan; Orly Abramovich
- Web page: https://patentgrep.com/patent/US7412057B2

## CPC

- G06F 7/582: {Pseudo-random number generators}
- H04N 7/1675: {Providing digital key or authorisation information for generation or regeneration of the scrambling sequence (pseudo-random number generators in general G06F7/58)}
- H04N 21/2347: involving video stream encryption
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)
- H04N: PICTORIAL COMMUNICATION, e.g. TELEVISION

## Abstract

Embodiments of the present invention provide a fast, software-implemented data scrambling system for data communications. For pseudo-random codes that are periodic within a predetermined number of bits, a memory array may be populated with segments of the code, one entry in the array starting at a unique bit position within the code. During data scrambling, a seed code may be used to identify a first entry from the array that should be used for scrambling. Thereafter, subsequent segments may be retrieved by traversing the array in a regular fashion. By calculating the code before use and by populating the array prior to processing of any source data, the system is very fast.

## Claims

### Claim 1

A method for generating scrambled data using a periodic pseudo-random code, comprising:
in response to a seed code, generating a pointer into a memory array, the array storing previously calculated segments of the pseudo-random code, wherein the content of each stored segment of the pseudo-random code is partially redundant to content of at least one other segment stored in the array; and
iteratively:
retrieving a multi-bit code segment from the memory array addressed by the pointer,
scrambling a corresponding amount of source data using the retrieved code segment, and
if the method is to continue through another iteration, advancing the pointer by a regular amount.

### Claim 2 (depends on 1)

The method of claim 1, wherein each entry of the memory array stores a segment beginning at a unique position of the pseudo-random code.

### Claim 3 (depends on 1)

The method of claim 1, wherein the advancing increments the pointer by a stride length equal to a width of the retrieved code segment.

### Claim 4 (depends on 1)

The method of claim 1, wherein the advancing increments the pointer by one.

### Claim 5 (depends on 1)

The method of claim 1, wherein the advancing is performed by a mod K arithmetic operation, where K represents a period of the pseudo-random code.

### Claim 6 (depends on 1)

The method of claim 1, wherein the pointer is stored in a second array, the second array being indexed by the seed code.

### Claim 7 (depends on 1)

The method of claim 1, wherein for a pseudo-random code that is periodic within K bits, the memory array has K entries.

### Claim 8 (depends on 1)

The method of claim 1, wherein the pseudo-random code is defined by the IEEE 802.11a information exchange standard.

### Claim 9 (depends on 1)

The method of claim 1, wherein the pseudo-random code is the pilot code defined by the IEEE 802.11a information exchange standard.

### Claim 10 (depends on 1)

The method of claim 1, wherein the pseudo-random code is the whitening code defined by the Bluetooth wireless communication specification.

### Claim 11

A data scrambling method, comprising:
indexing a first array using a scrambling seed code to retrieve a pointer,
iteratively:
indexing a second array using the pointer to retrieve a multi-bit segment of a periodic pseudo-random code from a memory array storing multiple segments of the pseudo-random code, wherein the content of each stored segment of the pseudo-random code is partially redundant to content of at least one other segment stored in the array,
scrambling a corresponding amount of source data using the pseudo-random code segment, and
when there is more source data to scramble, advancing the pointer by a regular amount.

### Claim 12 (depends on 11)

The method of claim 11, wherein the advancing increments the pointer by a stride length equal to a width of the retrieved code segment.

### Claim 13 (depends on 11)

The method of claim 11, wherein the advancing increments the pointer by one.

### Claim 14 (depends on 11)

The method of claim 11, wherein each entry i of the second array includes a segment of the code starting at position i and ending at position (i+M) mod K, where M represents a width of the entry and K represents a period of the pseudo-random code.

### Claim 15 (depends on 11)

The method of claim 11, wherein each entry of the second array includes a segment of the code that is continuous with the segments of adjacent entry positions.

### Claim 16 (depends on 11)

The method of claim 11, wherein each entry i of the second array includes a segment of the code starting at a position Beg=((i*M)+1)) mod K and ending at a position End=(M*(i+1)) mod K.

### Claim 17

In a communication system, a scrambling device, comprising:
a memory system, including an array having K multi-bit entries each to store a segment of a pseudo-random code that is periodic within K bits, the entries having a common width of M bits, and
an exclusive-or processing system having inputs for a multi-bit segment of source data and a code segment from the array, each input having a width of M,
wherein the memory system comprises a second array storing pointers into the first array, the second array being indexed by a seed code.

### Claim 18 (depends on 17)

The system of claim 17, wherein each entry of the array stores a segment beginning at a unique position of the code.

### Claim 19 (depends on 17)

The system of claim 17, wherein the pseudo-random code is defined by the IEEE 802.11a information exchange standard.

### Claim 20 (depends on 17)

The system of claim 17, wherein the pseudo-random code is the pilot code defined by the IEEE 802.11a information exchange standard.

### Claim 21 (depends on 17)

The system of claim 17, wherein the pseudo-random code is the whitening code defined by the Bluetooth wireless communication specification.

### Claim 22

A secure communication method, comprising:
exchanging a seed code between a transmitter and a receiver,
by the transmitter, scrambling source data using a first pseudo-random code derived from the seed code and transmitting it to the receiver,
by the receiver, receiving the scrambled data and recovering source data therefrom using a second pseudo-random code derived from the seed code,
wherein the first and second pseudo-random codes are the same, and
wherein at least one of the transmitter and the receiver generate the pseudo-random code by a method comprising:
from the seed code, generating a pointer into a memory array, the array storing previously calculated segments of the pseudo-random code, each stored segment being partially redundant to content of at least one other stored segment; and
iteratively, retrieving a multi-bit code segment from the memory array addressed by the pointer, scrambling a corresponding amount of source data using the retrieval code segment and, unless the iterative process is to conclude, advancing the pointer.

### Claim 23 (depends on 22)

The method of claim 22, wherein the advancing increments the pointer by a stride length equal to a width of the retrieved code segment.

### Claim 24 (depends on 22)

The method of claim 22, wherein the advancing increments the pointer by one.

### Claim 25 (depends on 22)

The method of claim 22, wherein each entry i of the second array includes a segment of the pseudo-random code starting at position i and ending at position (i+M) mod K, where M represents a width of the entry and K represents a period of the pseudo-random code.

### Claim 26 (depends on 22)

The method of claim 22, wherein each entry of the second array includes a segment of the pseudo-random code that is continuous with the segments of adjacent entry positions.

### Claim 27

A computer readable medium, storing program instructions that when executed, cause a processing circuit to:
generate a pointer into an array in response to a seed code, the array storing previously calculated segments of a pseudo-random code, each stored segment being partially redundant to content of at least one other stored segment; and
iteratively:
retrieve a multi-bit code segment from the memory array addressed by the pointer,
scramble a corresponding amount of source data, and if another iteration is to occur, advance the pointer by a regular amount.

### Claim 28 (depends on 27)

The computer readable medium of claim 27, wherein the memory further stores the array.

### Claim 29 (depends on 27)

The computer readable medium of claim 27, wherein each entry of the array stores a segment beginning at a unique position of the pseudo-random code.

### Claim 30 (depends on 27)

The computer readable medium of claim 27, wherein the pointer is advanced by a stride length equal to a width of the retrieved code segment.

### Claim 31 (depends on 27)

The computer readable medium of claim 27, wherein the pointer is advanced by one.

### Claim 32 (depends on 27)

The computer readable medium of claim 27, wherein the pointer is stored in a second array, the second array being indexed by the seed code.

### Claim 33 (depends on 32)

The computer readable medium of claim 32, wherein the second array is stored on the medium.

### Claim 34 (depends on 27)

The computer readable medium of claim 27, wherein, for a pseudo-random code that is periodic within K bits, the array has K entries.

### Claim 35 (depends on 27)

The computer readable medium of claim 27, wherein the pseudo-random code is defined by the IEEE 802.11a information exchange standard.

### Claim 36 (depends on 27)

The computer readable medium of claim 27, wherein the pseudo-random code is the pilot code defined by the IEEE 802.11a information exchange standard.

### Claim 37 (depends on 27)

The computer readable medium of claim 27, wherein the pseudo-random code is the whitening code defined by the Bluetooth wireless communication specification.

### Claim 38

A method of generating a periodic code, comprising:
given a seed code, generating a pointer into an array, the array having K entries, each entry storing a previously-generated multi-bit segment of the code having a width M, the segment of each entry starting at a unique position within the periodic code and being partially redundant to content of at least one other stored segment; and
iteratively, until a final iteration is reached:
retrieving the segment identified by the pointer, and
advancing the pointer;
wherein K represents the period of the code.

### Claim 39 (depends on 38)

The method of claim 38, wherein the advancing increments the pointer by 1.

### Claim 40 (depends on 38)

The method of claim 38, wherein the advancing increments the pointer by M.

### Claim 41 (depends on 38)

The method of claim 38, wherein the advancing is a mod K arithmetic operation.

### Claim 42 (depends on 38)

The method of claim 38, wherein the segment in each entry i starts at a position i of the code.

### Claim 43 (depends on 38)

The method of claim 38, wherein the segment in each entry i starts at a position ((i*M)+1) mod K.

### Claim 44 (depends on 38)

The method of claim 38, wherein the generating comprises using a seed code as an index to a second array, the array populated by a plurality of pointers into the array of code segments.

### Claim 45

A method for generating scrambled data using a periodic pseudo-random code, comprising:
determining a location in a static memory array of previously calculated segments of the pseudo-random code, each segment being partially redundant to content of at least one other segment; and
iteratively:
retrieving a multi-bit code segment from the location in the static memory array, scrambling a corresponding amount of source data using the retrieved code segment, and if the method is to continue through another iteration, modifying the location by a regular amount.

### Claim 46 (depends on 1)

The method of claim 1, wherein, for a pseudo-random code that is periodic in K bits, the memory array has K entries, each entry to store a segment of the pseudo-random code beginning at a unique position of the pseudo-random code.
