throbber
WO 96/42151
`
`PCT/US96/10257
`
`26
`
`Joe’s signed it. The Publisher transmits the signed Distribution Agreementto the
`_ Authority, Ethical Inc.
`
`Ethical Inc. now combines the signed TIAcertificate and the Distribution
`Agreement into a single message, andsigns the entire message using its private key.
`Ethical has now created a Publisher Identification message to g0 into its own stega-
`cipher channelin the content. Ethical Inc. now generates new stega-cipher masks
`and encodesthis messageinto a copy of the content using a stega-cipher encoder.
`The Authority saves the masks as a Receipt in a database, along with information
`on the details ofthe transfer, including thetitle, artist and publisher.
`
`Ethical then transfers this watermarked copy to the Joe’s Online Emporium, the
`Publisher. Well known encryption methods could be usedto protect the transfer
`between the Authority and the Publisher. The Authority may now destroy its copy,
`which the Publisher has received. The Publisher, Joe’s Online Emporium now
`assumesresponsibility for any copies madetoits version ofthe content, which is a
`Publisher Master copy.
`
`Finally, the Consumer, John Q. Public wishes to purchase a copyofthe content
`from Joe’s Online Emporium. Joe’s Emporium sends the John Q. Public a short
`agreementvia an electronic communicationlink, similar to Publisher’s Distribution
`Agreement, only this is a Purchase Agreement, whichlists
`
`10
`
`15
`
`20
`
`the contenttitle
`
`25
`
`consumeridentification
`
`the termsofdistribution
`
`the consideration pas for the content
`a brief statement ofagreement with the terms above
`
`-
`
`30
`
`John Q.Public signs this agreement with his private key andretumsit to the Joe’s
`Online Emporium. The Publisher, Joe’s prepares to encodeits own stega-cipher
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0652
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0652
`
`

`

`WO 96/42151
`
`:
`
`.
`
`PCT/US96/10257
`
`27
`
`watermark onto 4 copy ofthe content by generating a set ofmasks for the
`algorithm. Joe’s Online Emporium then stores these masks (a receipt) in its own
`database, indexed bytitle and consumer. Joe’s Online Emporium signs the
`agreement received from John Q. Public with the Emporium’s own private key, and
`forwardsit to the Authority, Ethical Inc., along with a copy ofthe masks.It is
`important to note that this communication should be done over a secured channel.
`The Authority verifies the Publisher and Consumer information and addsits own
`
`signature to the end ofthe message, approving the transaction, creating a Contract
`ofSale. The Authority adds the Publisher's receipt (maskset) to its database,
`indexed by thetitle, the publisher, and the consumeridentification. The Authority
`signs the Contract of Sale by encryptingit with their private key. So anyone with
`the Authority’s public key (any Publisher) could decrypt the Contract of Sale and
`verify it, once it was extracted from the content. The Publisher then transmits the
`
`‘signed Contract of Sale back to the Publisher, who uses a stega-cipher device to
`imprint this Contract as its own watermark over the content. The Publisher then
`transmits the newly watermarked copy to the Consumer, whois accepting
`responsibility for it. The Publisher destroys their version ofthe consumer’s copy.
`
`Ifthis procedureis followed forall contentdistribution within such an online system
`then it should be possible for the Authority to identify the ownerof a piece of
`content which appears to be unauthorized. The Authority could simplytry its
`database ofstega-cipher keys to decode the watermark inthe content in question.
`Forinstance, if a copy of Seal’s latest single originally distributed with stega-cipher
`watermarks showed up on an Internetftp site the Authority should be able to
`extract a TIA Certificate and Distribution Agreement or a Contract ofSale
`identifying the responsible party. If a Publisher sold this particular copy to a
`Consumer,that particular publisher should be able to extract a Contract ofSale,
`which places responsibility with the Consumer. This is not a timecritical
`application, so evenif it takes days or weeks,it is still worthwhile.
`
`10
`
`15
`
`20
`
`25
`
`30
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0653
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0653
`
`

`

`WO 96/42151
`
`PCT/US96/10257
`
`28
`
`In a modification to the protocol discussed above, each Publisher might act as its
`own Authority. However, in the context of online services, this could open avenues
`offraud committed by the collusion ofcertain Publishers and Consumers. Using an
`Authority, or one of several available Authorities to keep records ofPublisher-
`Consumertransactions and verify their details decreases the likelihood of such
`events.
`
`It should also be obvious that a similar watermarking system could be used by an
`individual entity to watermark its own content for its own purposes, wether online
`or in physical media. Forinstance, a CD manufacturer could incorporate unique
`stega-cipher watermarksinto specific batches ofits compact discs to identify the
`source ofa pirate ring, orto identify unauthorized digital copies madefrom its
`discs. This is possible because the stega-cipher encoding workswith the existing
`formats ofdigital samples and does not add any new structures to the sample data
`that cannot be handled onelectronic or mechanical systerns which predate the
`stega-cipher.
`
`VL
`
`Increasing Confidence in the Stega-Cipher
`
`The addition ofa special pre-encoding process can make stega-ciphercertificates
`even more secure and undeniable. Hash values may be incorporated which match
`exactly the content containing the watermark to the message in the watermark
`itself: This allows us a verification that the watermark decoded was encoded by
`whomeversigned it into this precise location in this specific content.
`
`Suppose one wants to use a 256 bit (32 byte) hash value which iscalculated with a
`secure one-way hash function over each sample in each sample windowthat will
`contain the message. The hashstarts with a seed value, and each sample that would
`be processed by the encoder when encoding the message is incorporated into the
`hashas it is processed. The result is a 256 bit number one can be highly confident is
`
`10
`
`15
`
`20
`
`25
`
`30
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0654
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0654
`
`

`

`WO 96/42151
`
`PCT/US96/10257
`
`29
`
`unique, or sufficiently rare to make intentionally duplicating it with another series of
`samples difficult.
`
`It is important that the hash function beinsensitive to any changesin the samples
`induced by the stega-cipheritself. For instance, one might ignore the least
`significant bit ofeach sample when computing the hashfunction,ifthe stega-cipher
`was implemented usinga least significant bit encode mode.
`
`Based on the size ofthe non-hash message, one knowsthehash-inclusive message
`requires 32 more bytes of space. One can nowcalculatethesize of a signed
`encrypted copyofthis message by signing and encrypting exactly as many random
`bytes as are in the message, and measuring thesize ofthe output in bytes. One now
`knowsthesize ofthe message to be encoded. One can pre-process the sample
`stream as follows.
`
`Proceed through the stega-cipher encode loop as described in the claims, Instead of
`encoding, however, calculate hash values for each windowseries which will contain
`the message, as each sample is processed. At the end ofeach instance of“encoding”
`take the resultant hash value and useit to create a unique copyofthe message
`whichincludes the hash value particular to the series of sample windowsthat will be
`used to encode the message. Sign and encrypt this copy ofthe message, and saveit
`for encoding in the sameplace in the sample stream.
`
`|
`
`A memory efficient version of this scheme could keep on hand the un-hashed
`message, and as it creates each new copy, back up in the sample stream tothefirst
`windowin the series and actually encode each message, disposingofit afterwards.
`
`The importantresult is evident on decoding. The decoding party can calculate the
`same hash used to encode the message for themselves, but on theencoded samples.
`Ifthe value calculated by the decoding party does not match the value contained in
`the signed message, the decoderis.alerted to the fact that this watermark was
`
`10
`
`15
`
`20
`
`25
`
`30
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0655
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0655
`
`

`

`WO 96/42151
`
`PCT/US96/10257
`
`30
`
`transplanted from somewhereelse. This is possible only with a hash function which
`ignores the changes madebythe stega-cipher after the hash in the watermark was
`generated.
`
`5
`
`This scheme makesit impossible to transplant watermarks, even with.the keys to
`the stega-cipher.
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0656
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0656
`
`

`

`“WO 96/42151
`
`PCT/US96/10257
`
`31 -
`
`Appendix - Psuedo-code
`
`const int WINDOW_RESET= 256;
`const int WINDOW_SIZE = 128;
`const int MARKER_BITS = 1024;
`const int CHUNK_BITS = 2048 * 8;
`
`int window_offeet,
`int msg_bit_offset;
`
`int frequency_offset;
`Boolean useCell,
`
`/® & bits per bye, 1 byte per char */
`unsigned char frequency_mask[WINDOW_SIZE/8},
`unsigned char window_mask[WINDOW_RESET/8};
`unsigned char msg_start_marker[MARKER_BITS/3];
`unsigned char msg_end_marker[MARKER_BITS/8},
`Intl6 amplitude_sample_bufferfWINDOW_SIZE},
`float power_frequency_buffer{WINDOW_SIZE];
`unsigned char message_bufferf{CHUNK_BITS/8},
`
`void doFFT(intl6 *amp_sample_buffer, float *power_freq_buffer,intsize);
`void dolnverseFFT(Int)6 *amp_sample_buffer, float *power_freq:buffer,int size);
`void initialize,
`
`Bit getBit(unsigned char *buffer,int bitOffset),
`Boolean map(@Bit window_bit, Bit band_bit, int window,int frequency);
`Boolean getSamples(Int16 *amplitude_sample_buffer,int samples);
`void encode()
`
`void initialize()
`{
`
`/* message to be encoded is generated */
`
`/* messageis prefixed with 1024 bit msg_start_marker */
`/* messageis suffixed with 1024 bit msg_end _marker */
`/* remaining space at end of message buffer padded with random bits */
`window_offset = 0;
`
`msg_bit_offset = 0;
`frequency_offset = 0;
`
`frequency_mask loaded
`window_mask loaded
`zeroAmpSampleBufferQ),
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0657
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0657
`
`

`

`WO 96/42151
`
`‘
`
`PCT/US96/10257
`
`32
`
`Boolean getSamples(Intl6 *buffer,int samples)
`{
`
`/* get samples number ofsamples and shift them contiguously into the sample
`buffer from right to left*/
`if{samples < samples available)
`. Teturn false,
`
`else
`
`return true;
`
`} v
`
`{
`
`oid doFFT(nt16 *sample_buffer, float *spectrum_buffer,int size)
`
`calculate FFT on sample_buffer,forsize samples
`store result in spectrum buffer
`
`void dolnverseFFT(intl6 *sample_buffer,float *spectrum_buffer,int size)
`{
`.
`
`calculate inverse FFT on spectrum_buffer
`store result in sampe_buffer
`
`Bit getBit(unsigned char *buffer,in bitOffset)
`{
`oo
`
`retums value ofspecified bit in specified buffer
`either 0 or 1, could use Boolean (true/false) values forbit set ofbit off
`
`Boolean map(Bit window_bit,Bit band_bit,int window,int frequency_
`{
`
`/* this is the function that makes the information difficult to find */
`/* the inputs window_bit and band_bit depend only on the mask values
`used for encoding the information, they are 1) random,2)secret */
`/* window and frequency values are used add time and frequency band dependent
`complexity to this function */
`/* this function is equivalent to a Boolean truth table with window * frequency * 4
`_ Possible input combinations and 2 possible output */
`/* for any input combination, the outputis either true or false */
`/* window ranges from 0 to WINDOW_RESET-1 */
`/* frequency ranges from 0 to WINDOW_SIZE -1 */
`retum calculated truth value
`
`|
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0658
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0658
`
`

`

`WO 96/42151
`
`33
`
`PCT/US96/10257
`
`void encodeBit(float *spectrum_buffer,int freq_offset,Bit theBit)
`
`/ modifies the valuc ofthe cell in spectrum_buffer, indexed by freq_offset
`in a manner that distinguishes each ofthe 2 possible values oftheBit,
`lord
`
`_
`
`*/
`P ‘suggested method ofsetting the Least Significantbit ofthe cell = theBit */
`/* alternative method ofrounding the value ofthe cell upward or downward to
`certain fractional values proposed
`i.e. <= .5 fractional remaindersignifies 0,> .5 fraction remainder
`signifies 1
`
`*/
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0659
`
`3 v
`
`{
`
`oid encode()
`
`initializeQ,
`
`do {
`
`if(getSamples(amplitude_sample_buffer) == false)
`return
`
`doFFT(amplitude_sample_buffer,power_frequency_buffer,WINDOW_SIZE),
`
`for (frequency_offset = 0; frequency_offset < WINDOW_SIZE;
`frequency_offsett+){
`
`useCell = map(getBit(window_mask,window_offset),
`getBit(frequency_mask,frequenicy_offset),
`window_offset, frequency_offset);
`
`/
`if{CuseCell == true){
`,
`encodeBil(power_frequency_buffer,frequency_offset,
`getBit(message_buffer,msg_bit_offset)),
`messagebit_offset ++,
`iffmsg_bit_offset —= MESSAGEBITS){
`initiahzeQ,;
`
`break; /* exit frequency loop */
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0659
`
`

`

`WO 96/42151
`
`34
`
`PCT/US96/10257
`
`dolnverseFFT(amplitude_sample_buffer,power_frequency_buffer,
`WINDOW_SIZE),
`
`outputSamples(amplitude_sample_buffery,
`
`window_offsett+,
`if(window_offset==WINDOW_RESET){
`window_offset = 0;
`
`}while(true),
`
`The encode) procedure processes an input samplestream using the specified frequency and windowmasks as
`‘well as a pre-formatted message to encode.
`
`encode()processes the samplestream in windaws ofWINDOW|_SIZE samples, contiguously distributed in the
`sample stream,so it advances WINDOW|_SIZE samples at a time.
`
`For each samplewindow, encode() first compute the FFT ofthe window, yielding its Power Spectrum Estimation.
`Foreach ofthese window PSEs, encode() then uses the map() function to determine where iin each PSE to encode
`_ thebits ofthemessage,whichitreads from themessage buffer, on ebit at a time. Each time map0 returmstrue,
`encode() consumes another sample from the message.
`
`Aftereach window is encoded, encode() computes the inverse FFT on the PSE to generate a modified sample
`window, which is then output as the modified signal. It is important the sample windows NOT overlap in the
`sample stream,since this would potentially damagethe preceeding encoding windowsin the stream.
`
`Once the messageis entirelyencoded, includingits special end ofmessage marker bit Stream, encode{) resets it
`internal variables to begin encoding the message Once more in the next window. encode() proceeds in this manner
`until the input sample stream is exhausted.
`
`enum {
`
`Synchronizing,
`Locked
`
`}5 /* decodestates */
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0660
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0660
`
`

`

`WO 96/42151
`
`wt
`
`35
`
`PCT/US96/10257
`
`unsigned char messageend_buffer{MARKER,BITS},
`
`Bit decodeBit(float *spectrum_buffer,int freq_offset)
`{
`
`/* teads the value ofthe cell in spectrum_buffer, indexed by freq_ofiset
`in a manner thetdistinguishes each ofthe 2 possible values ofan
`encoded bit, 1 or 0
`
`a /
`
`* suggested method oftesting the Least Significant bit ofthe cell */
`/* alternative method ofchecking the value ofthe cell versus certain fractional
`remainders proposed.
`
`i.e. <= 5 fractional remaindersignifies 0, > .5 fraction remainder
`signifies 1
`
`*/
`
`retum either | or 0 as appropriate
`
`Boolean decode()
`{
`
`.
`
`/* Initialization */
`
`state = Synchronizing
`window_offset= 0,
`
`set frequency mask
`set window mask
`
`clear sample buffer
`
`int nextSamples = 1;
`int msg_start_offset = 0,
`clear messageend_buffer
`Bit aBit,
`
`Boolean bitsEqual,
`
`do {
`
`if(state == Synchronizing){
`nextSamples = 1;
`
`window_offset = 0;
`
`else
`
`nextSamples = WINDOW_SIZE;
`
`if(getSamples(amplitude_sample_buffer) == false)
`teturn false,
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0661
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0661
`
`

`

`WO 96/42151
`
`PCT/0S96/10257
`
`36
`
`doFFT(amplitude_sample_buffer,power_frequency_buffer,
`’ WINDOWSIZE), /*2*/
`
`for(frequencyoffset =0; frequency_offset <WINDOW_SIZE;
`frequency_offset++){
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0662
`
`useCell = map(getBit(window_mask,window_offset),
`getBit(frequency_mask,frequency_offset),
`‘window_offset, frequency_offset),
`
`iffuseCell == true){
`aBit = decodeBit(power_frequency_buffer,
`frequency_offset),
`setBit(message_buffer,message_bit_offset,aBit);
`message_bit_offset ++,
`
`} e
`
`lse
`
`continue;
`
`if{state == Synchronizing){
`bitsEqual =
`
`comparcBits(message_start_marker,message_buffer,
`messagebit_offset);
`iK!bitsEqual){
`
`message_bit_offset = 0;
`misaligned = true,
`
`break; /* exit frequency loop */
`
`} e
`
`else {
`
`lse if(message_bit_offset -- MARKERBITS)
`state = Locked;
`
`/* locked onto encoded stream */
`
`shift aBitinto right side ofmessage_end_buffer
`bitsEqual = compareBits(message_end_buffer,
`misg_end_marker,MARKER_BITS),
`if{bitsEqual)
`
`retum true;
`
`}while (true);
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0662
`
`

`

`~ WO 96/42151
`
`.PCT/US96/10257
`
`37
`
`The decode() procedure scans an input sample stream using specified window and frequency masks, until it either
`decodes a valid message biock, storingit in a message buffer, or exhausts the sample stream. ‘
`
`The decode() procedure starts in state Synchronizing, in which it does not know where in the sample stream the
`eneading windows are aligned. The procedure advances the sample window through the sample stream one
`sampleat a time, performing the FFT calculation on each window,and attempting to decode valid messagebits
`from the window.As it extracts each bit using the map() function,the decode() procdure compares these bits
`against the start ofmessage marker. As soon as a mismatchis detected, the decode() procedure knows it is notyet
`properly aligned toan encoding window, and immediately ceases decoding bits from the current window and
`moves to the next window,offset by 1 sample. The decode() procedure continues in this manner until it matches
`successfully the complete bitstream ofa start ofmessage marker, At this point the decode() procedure assumes it is
`alignedto an encoded message and can then decodebits to the message buffer quickly, advancingthe sample
`window fully at cachiterations. It is now in Locked mode.For each bitit stores in the message buffer when in
`Locked mode, the decode() procedure also shifts the samebit value into the least significantbit ofthe
`message_end_buffer. After eachbit is decoded in Locked mode, the decode() procedure checks compares the
`message_end_bufferwith the msg_end_marker in a bit by bit manner. When a complete match is found, decode()
`is finished and returnstrue. Ifthe sample stream is exhausted before this occurs, decade() returnsfalse. Ifdecode()
`retums true, a valid message is stored in the message buffer,including the start and end ofmessage markers,
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0663
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0663
`
`

`

`WO 96/42151
`
`Claims
`
`*
`
`- PCT/US96/10257
`
`38
`
`1,
`
`A steganographic method comprising thestepsof:
`- using randomkeys in combination with steganography to encode additional
`information into digitized samples such that a signal generated from the modified
`sample stream is not significantly degraded and such that the additional information
`cannot be extracted without the keys and suchthat the signal generated from the
`modified sample stream will be degraded by attemptstoerase, scramble, or
`otherwise obliterate the encoded additional information.
`
`,
`
`10
`2. __An apparatus for encoding or decoding a message, represented as
`
`series ofdata bits into or out ofa series ofdigitized samples, comprising:
`|
`a)
`a sample buffer for holding and accessing and transforming
`digitized samples;
`.b)
`
`a digital signal processor capable of performing fast fourier
`
`15
`
`transforms;
`
`c)
`
`9)
`
`20
`
`25
`
`a memory to contain information representing
`1)
`primary mask,
`2)
`convolutional mask,
`3)
`start to messagedelimiter,
`4)
`a maskcalculation buffer,
`5)
`a message buffer,
`6)
`an integer representing a messagebit index,
`1
`a position integer M representing message size,
`8)
`an integer representing an index into said primary
`mask,
`an integer representing an index into said convolution
`_ Mask,
`—_an integerrepresenting thestate ofa decode process,
`10)
`a table representing a mapfunction;
`11)
`30
`12)aflag indicating a complete message has been
`decoded or encoded,
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0664
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0664
`
`

`

`WO 96/42151
`
`39
`
`PCT/US96/10257
`
`13)
`
`a positive integer S representing a number of samples
`to read into said sample buffer, and
`/
`14)aflag indicating the size ofa message which has been
`decoded;
`an input to acquire digital samples;
`an output to output modified digital samples;
`an input for inputting the values of(cl)- (c5) and (c11) and
`|
`|
`an output to output the messagestored in (c5) as the result
`g)
`ofa decode process and the value of(c10) to an attached digital circuit;
`h)
`_at least one data busto transfer information from
`
`qd)
`e)
`f)
`
`(c13);
`
`5
`
`10
`
`15
`
`(d)to (a),
`
`(a) to (b),
`
`(b)to (a),
`(a) to (e),
`(f) to (c), and
`
`(c) to (e); and
`
`a clock which generates a clock signal to drive (b) and
`i)
`control the operation of the apparatus.
`
`20
`
`A method ofencodinginformation into a sample stream of data, said
`3.
`method comprising thestepsof:
`
`A)
`
`generating a mask set to be used for encoding, said set
`
`25.
`
`—_—siincluding:
`
`a random or pseudo-random primary mask,
`a random or pseudo-random convolution mask,
`a random or pseudo-randomstart ofmessage
`delimiter, wherein said mask set can be concatenated and manipulated asasinglebit
`30
`stream;
`
`B)
`
`obtaining a message to be encoded;
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0665
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0665
`
`

`

`WO 96/42151
`
`PCT/US96/10257
`
`40
`
`C)
`stream includes
`
`generating a messagebit steam to be encoded such that the
`
`1) a start ofmessage delimiter, and
`2) an integer representing the number ofmessage
`bytes to follow the message;
`
`10 .
`
`_loading the messagebit stream, a map table, the primary
`D)
`mask, the convolution mask, and the start ofmessage delimiter into a memory;
`E)
`resetting a primary mask index, a convalution mask and
`message bit index, and setting the message size integer equal to the total number of .
`bits in the message bit stream;
`F)
`clearing a message encoded flag;
`G)
`reading a window ofsamples from a sample inputdevice
`and storing them sequentially in a sample buffer;
`
`15
`
`20
`
`resetting the primary mask index and looping through the
`H)
`sample buffer fromafirst sampleto a last sample incrementing the primary mask
`index each time a sampleis visited, such that for each sample position, a value of
`the mapping function is computed, whichis either true orfalse, by using a bit ofthe
`primary mask representing a current sampleanda bit ofthe convolution mask
`indicated by the convolution index to calculate an offset in the maptable;
`D obtaining thebit value stored in the maptable and encoding
`the bit ofthe messageindicated by the messagebit index into the current sampleif
`the bit value obtained from the maptable is a certain value and incrementing the
`message bit index, determining whether the messagebit index equals the number of
`messagebits, andif it does re-performing step A), setting the message encoded flag,
`and exiting the loop;
`
`25
`
`outputting the modified samples in the sample buffer, and if
`J)
`the message encodedflag is set jumping backto said step E);
`K)
`incrementing the convolution index, whereinifthe
`convolution index equals the length ofthe convolution mask in bits then set the
`convolution index to 0; and
`
`30
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0666
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0666
`
`

`

`WO 96/42151
`
`PCT/US96/10257
`
`41
`
`L)
`
`jumpingbackto step G).
`
`5
`
`A methodofencoding information into a sample stream ofdata, comprising
`4.
`the stepsof:
`
`A)
`
`generating a mask set to be used for encoding, including:
`a random or pseudo-random primarymask,
`a random or pseudo-random convolution mask, and
`a random or pseudo-randomstart ofmessage
`delimiter, wherein said mask set can be concatenated and manipulated as a single bit
`
`10
`
`Stream,
`
`B)
`
`C)
`
`inputting a message to be encoded;
`
`generating a messagebit stream to be encoded including
`
`a start of message delimiter, and
`an integer representing of number ofmessage bytes to
`follow the message;
`
`D)
`
`loading the messagebit stream, a map table, and the mask set
`
`15
`
`into a memory;
`
`E)__resetting a primary mask index, a convolution mask and
`
`message bit index, setting the messagesize index equal to the number ofbits in the
`messagebitstream, and clearing a message encodedflag;
`F)
`reading a window of samples ofthe inputted message and
`storing the samples sequentially in a sample buffer,
`
`G)
`
`computing a spectral transform of the samples in the buffer;
`
`obtaining the bit value stored in the map table, wherein if the
`HK
`bit value is true, then encoding the bit of the messageindicated by the message bit
`index into the current sample and incrementing the messagebit index, where the
`
`message bit index equals the number of messagebits, and then reperforming step
`A), setting the message encodedflag, andexiting the loop;
`I)
`computing the inverse spectral ofthe spectral values stored
`in the samplebuffer;
`
`\
`
`20
`
`25
`
`30
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0667
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0667
`
`

`

`WO 96/42151
`
`.
`
`PCTIU;$96/10257
`
`42
`
`outputting the values in the sample buffer, andifthe sample
`J)
`encoded flag is set, then clear the flag and jumpbackto step E);
`K)
`incrementing the convolution index and when the
`convolution index equals the length ofthe convolution maskin bits resetting the
`convolution index; and
`
`L)
`
`jumpingbacktostep F).
`
`The method ofclaim 3 wherein the encoding ofthe messagebitinto the
`5.
`samplein step I includes encodingasingle bit ofthe sample to match the message
`10
`bit.
`
`The method ofclaim 4 wherein the encoding ofthe messagebit into the
`6.
`sample in step H includesaltering the sample value such that said sample valuefalls
`within a prespecified range ofvalvesrelative to its original value.
`
`i)
`
`A method ofdecoding information from a sample stream ofdata,
`7,
`comprising the stepsof:
`
`20
`
`A)_obtaining a maskset including:
`(1) a random or pseudo-random primary mask,
`(2) a random or pseudo-random convolution mask, and
`(3) a random or pseudo-randomstart ofmessagedelimiter;
`loading a maptable, and the mask set into a memory;
`B)
`resetting a primary mask index and convolution mask index
`C)
`and setting a messagesize integer equalto 0;
`D)
`clearing a message decodedflag;
`E)__setting a state ofthe decode process to SYNCHRONIZED,
`F) __
`checking the state ofthe decode process andifthe decode
`state is UNSYNCHRONIZED,setting a numberofsamples to equal 1 and resetting
`the convolution index to 0; otherwise, setting the number of samples to equal S
`(S21);
`
`25
`
`30
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0668
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0668
`
`

`

`WO 96/42151
`
`PCT/US96/10257
`
`43
`
`G)
`
`reading the number ofsamples specified in step F)into a
`
`sample buffer;
`
`resetting the primary mask index, and looping through the
`H)
`sample bufferfrom thefirst sampletothelast sample, incrementingthe primary
`maskindex each time, and for each sample position, computing the value ofa
`mapping function to calculate an offset into the maptable;
`T) obtaining thebit value in the maptable, andifthe value is true,
`decoding thebit ofthe messageindicated by the messagebit index, storing the bit
`into the messagebuffer at the messagebit index, and incrementing the messagebit
`
`index;
`
`comparing the decodedbits in the message bufferto the start
`Jd
`ofmessagedelimiter, and ifthe numberofbits in the message bufferis less than or
`equal to the numberofbitsin the start ofmessage delimiter and the bits match, then
`setting the state ofthe decode process to SYNCHRONIZED;otherwise setting the
`state ofthe decode process to UNSYNCHRONIZED;:
`XK)
`___sifthe state ofthe decode process is SYNCHRONIZED and
`the numberofbits in the message buffer is greater than or equal to the sum ofthe
`numberofbits ofthe start ofdelimiter and the messagesize, then setting thestate
`ofthe decode process to SYNC-AND-SIZE and copying certain bits from the
`messagebuffer to a messagesize integer container,
`L)
`ifthe state ofthe decode process is SYNC-AND-SIZE and
`the numberofbits in the message buffer divided by 8 is greater than or equal to the
`messagesize, then setting the message decoded flag, outputting the message and
`the message decodedflag and ending the method;
`M) incrementing the convolution index, andifthe convolution index
`equals the numberofbits in the convolution mask resetting the convolution index;
`
`and
`
`N)
`
`jumping to step F).
`
`8.
`
`of:
`
`A methodofdecoding information from sampled data, comprising the steps
`
`10
`
`15
`
`20
`
`25
`
`30
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0669
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0669
`
`

`

`WO 96/42151
`
`.
`44
`
`PCT/US96/10257
`
`A)
`
`Obtaining a maskset including
`(1)
`arandom or pseudo-random primary mask,
`(2)
`arandom or pseudo-random convolution mask, and
`(3)
`arandomor pseudo-random start of message
`
`:
`
`delimiter,
`
`loading a maptable, and the mask set into a memory;
`B)
`resetting a primary mask index and convolution mask index
`CQ)
`and setting a message size integer equal to 0;
`D)
`clearing a message decodedflag;
`E)
`setting a state of the decode process to SYNCHRONIZED;
`F)
`checking the state ofthe decode process andifthe decode
`state is UNSYNCHRONIZED,setting a numberofsamples to equal 1 and resetting
`the convolution index to 0; otherwise, setting the number ofsamples to equal S_
`(S>1);
`
`G)
`
`FH)
`
`sample buffer;
`
`sample buffer;
`
`reading the numberof samples specified in step F) into a
`
`computing a spectral transform ofthe samples stored in the .
`.
`
`resetting the primary mask index and looping through the
`_
`I)
`sample buffer from the first sampleto thelast sample, incrementing the primary
`mask index each time, and for each sample position,computing the value ofa
`mapping function by using the bit ofthe primary mask corresponding to the primary
`maskindex andthe bit ofthe convolution masks indicated by the convolution phase
`to calculate an offset into the maptable representing the mapping function;
`Jd)
`obtaining a bit value stored in the map, andifthe valueis
`true, decoding thebit ofthe message indicated by the messagebit index from the
`current sample, storing thebit into the message buffer at the messagebit index, and
`incrementing the messagebit index;
`—
`K)
`comparing the decodedbits in the message bufferto the start
`ofmessage delimiter, and ifthe number ofbits in the messagebufferis less than or
`equal to the numberofbits in the start of message delimiter and the bits match, then
`
`10
`
`15
`
`20
`
`25
`
`30
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0670
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0670
`
`

`

`WO 96/42151
`
`,
`
`45
`
`,
`
`PCT/US96/10257
`
`setting the state ofthe decode process to SYNCHRONIZED;otherwise, setting the
`state ofthe decode process UNSYNCHRONIZED;
`L)
`ifthe state ofthe decode process is SYNCHRONIZED, and
`the numberofbits in the messagebuffer is greater than or equal to the sum ofthe
`number ofbits ofthe start ofdelimiter and the message size, then setting the state
`ofthe decode process to SYNC-AND-SIZE and copying certain bits from the
`message buffer to a messagesize integer container,
`_
`M)_ifthe state ofthe decode process is SYNC-AND-SIZE and
`the numberofbits in the message buffer divided by 8 is greater than or equal to the
`messagesize, thensetting the message decoded flag, outputting the message and
`the message decoded flag and ending the method;
`N) _
`incrementing the convolution index, wherein ifthe
`convolution index equals the numberofbits in the convolution mask, thenresetting
`the convolution index; and
`©)
`jumpingtostep F).
`
`-15
`
`10
`
`The methodofclaim 7 wherein the decoding ofthe messagebit from the
`9.
`sample in step I includes readingasingle bit ofthe sample.
`
`20
`
`25
`
`The method ofclaim 7 wherein the decoding ofthe messagebit from the
`10.
`samplein step I includes mapping a range of sample values onto a particular
`messagebit value.
`
`The methodofclaim 4 wherein the map tableis defined such that any index
`11.
`ofthe map table directs the process to encode information.
`
`12.|The method ofclaim 1 wherein the samples are obtained from a sample
`
`stream representing digitized sound or music.
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0671
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0671
`
`

`

`WO 96/42151
`
`‘
`
`46
`
`PCT/US96/10257
`
`13.|The method ofclaim 12 wherein the identical encode processis performed
`on two sample streams representing channel A and channel B ofdigitized stereo
`sound,
`
`The method ofclaim 12 wherein the sample streams represent channel A
`14.
`and channel B ofdigitized stereo sound and are interleaved before beinginput as a
`single sample stream andare separated into two channels upon output.
`
`The methodofclaim 1 wherein the samples are obtained from a sample
`15.
`stream representing di

This document is available on Docket Alarm but you must sign up to view it.


Or .

Accessing this document will incur an additional charge of $.

After purchase, you can access this document again without charge.

Accept $ Charge
throbber

Still Working On It

This document is taking longer than usual to download. This can happen if we need to contact the court directly to obtain the document and their servers are running slowly.

Give it another minute or two to complete, and then try the refresh button.

throbber

A few More Minutes ... Still Working

It can take up to 5 minutes for us to download a document if the court servers are running slowly.

Thank you for your continued patience.

This document could not be displayed.

We could not find this document within its docket. Please go back to the docket page and check the link. If that does not work, go back to the docket and refresh it to pull the newest information.

Your account does not support viewing this document.

You need a Paid Account to view this document. Click here to change your account type.

Your account does not support viewing this document.

Set your membership status to view this document.

With a Docket Alarm membership, you'll get a whole lot more, including:

  • Up-to-date information for this case.
  • Email alerts whenever there is an update.
  • Full text search for other cases.
  • Get email alerts whenever a new case matches your search.

Become a Member

One Moment Please

The filing “” is large (MB) and is being downloaded.

Please refresh this page in a few minutes to see if the filing has been downloaded. The filing will also be emailed to you when the download completes.

Your document is on its way!

If you do not receive the document in five minutes, contact support at support@docketalarm.com.

Sealed Document

We are unable to display this document, it may be under a court ordered seal.

If you have proper credentials to access the file, you may proceed directly to the court's system using your government issued username and password.


Access Government Site

We are redirecting you
to a mobile optimized page.





Document Unreadable or Corrupt

Refresh this Document
Go to the Docket

We are unable to display this document.

Refresh this Document
Go to the Docket