`
`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