`
`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 TIA certificate and the Distribution
`Agreementinto a single message, and signsthe entire message usingits private key.
`Ethical has now created a Publisher Identification messageto gointo its own stega-
`cipher channelin the content. Ethical Inc. now generates new stega-cipher masks
`and encodesthis messageinto a copy ofthe content using a stega-cipher encoder.
`The Authority saves the masks as a Receipt in a database, along with information
`on the details of the 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 used to protect the transfer
`betweenthe Authority and the Publisher. The Authority may now destroy its copy,
`which the Publisher has received. The Publisher, Joe’s Online Emporium now
`assumes responsibility for any copies madeto its version of the content, which is a
`Publisher Master copy.
`
`Finally, the Consumer, John Q. Public wishes to purchase a copy ofthe content
`from Joe’s Online Emporium. Joe’s Emporium sends the John Q. Public a short
`agreement via 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 of agreement with the terms above
`
`30
`
`John Q.Public signs this agreementwith his private key and returnsit to the Joe’s
`Online Emporium. The Publisher, Joe’s prepares to encode its own stega-cipher
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1462
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1462
`
`
`
`WO 96/42151
`
`PCT/US96/10257
`
`27
`
`watermark onto a copy of the content by generating a set of masks for the
`algorithm. Joe’s Online Emporium then stores these masks(a receipt) in its own
`database, indexed by title and consumer. Joe’s Online Emporiumsignsthe
`agreement received from John Q. Public with the Emporium’s own private key, and
`forwards it 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 Consumerinformation and addsits own
`
`10
`
`signature to the end of the message, approving the transaction, creating a Contract
`of Sale. The Authority adds the Publisher’s receipt (mask set) to its database,
`indexedby thetitle, the publisher, and the consumeridentification. The Authority
`signs the Contract of Sale by encrypting it 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
`
`15
`
`transmits the newly watermarked copy to the Consumer, whois accepting
`responsibility for it. The Publisher destroys their version of the consumer’s copy.
`
`Ifthis procedure is followed forall content distribution 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 of stega-cipher keys to decode the watermark in the content in question.
`Forinstance, if a copy of Seal’s latest single originally distributed with stega-cipher
`watermarks showed up on anInternetftp site the Authority should be able to
`
`extract a TIA Certificate and Distribution Agreement or a Contract of Sale
`
`identifying the responsible party. If a Publisher sold this particular copy to a
`Consumer, that particular publisher should be able to extract a Contractof Sale,
`whichplaces responsibility with the Consumer. This is nota timecritical
`
`application, so evenif it takes days or weeks,it is still worthwhile.
`
`20
`
`25
`
`30
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1463
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1463
`
`
`
`WO 96/42151
`
`PCT/US96/10257
`
`28
`
`In a modification to the protocol discussed above, each Publisher mightact asits
`own Authority. However, in the context of online services, this could open avenues
`offraud committed by the collusion of certain Publishers and Consumers. Using an
`Authority, or one of several available Authorities to keep records ofPublisher-
`Consumertransactionsand verify their details decreases thelikelihood of such
`events.
`
`It should also be obviousthat a similar watermarking system could be used by an
`individual entity to watermark its own content for its own purposes, wetheronline
`or in physical media. For instance, a CD manufacturer could incorporate unique
`stega-cipher watermarks into specific batches ofits compact discs to identify the
`sourceofa pirate ring, or to identify unauthorized digital copies made from its
`discs. This is possible because the stega-cipher encoding works with the existing
`formats ofdigital samples and does not add any newstructures to the sample data
`that cannot be handled on electronic or mechanical systerns which predate the
`stega-cipher.
`
`VI.
`
`‘Increasing Confidence in the Stega-Cipher
`
`Theaddition of a special pre-encoding process can make stega-cipher certificates
`even more secure and undeniable. Hash values may be incorporated which match
`exactly the content containing the watermarkto the message in the watermark
`itself. This allows us a verification that the watermark decoded was encoded by
`whomever signedit into this precise location in this specific content.
`
`Suppose one wants to use a 256 bit (32 byte) hash value whichis calculated 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 incorporatedinto the
`hashasit is processed. Theresult is a 256 bit number one can be highly confidentis
`
`10
`
`15
`
`20
`
`25
`
`30
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1464
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1464
`
`
`
`WO 96/42151
`
`PCT/US96/10257
`
`29
`
`unique, orsufficiently 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 of each sample when computing the hash function,ifthe stega-cipher
`was implemented using a least significant bit encode mode.
`
`Based onthe size ofthe non-hash message, one knowsthe hash-inclusive message
`requires 32 more bytes of space. One can now calculatethesize of a signed
`encrypted copy ofthis message bysigning and encrypting exactly as many random
`bytes as are in the message, and measuringthesize of the outputin bytes. One now
`knowsthe size of the 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 of each instance of “encoding”
`take the resultant hash value and useit to create a unique copy ofthe message
`which includes the hash value particular to the series of sample windowsthatwill be
`used to encode the message. Sign and encrypt this copy of the 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 asit creates each new copy, back up in the sample stream to thefirst
`window in the series and actually encode each message,disposing ofit afterwards.
`
`The importantresult is evident on decoding. The decoding party can calculate the
`same hash used to encode the messagefor themselves, but on the encoded samples.
`If the 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-602
`Exhibit 1006, Page 1465
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1465
`
`
`
`WO 96/42151
`
`PCT/US96/10257
`
`30
`
`transplanted from somewhereelse. This is possible only with a hash function which
`ignores the changes madebythe stega-cipherafter 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-602
`Exhibit 1006, Page 1466
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1466
`
`
`
`“WO 96/42151
`
`PCT/US96/10257
`
`31
`
`Appendix - Psuedo-code
`
`const int WINDOW_RESET = 256;
`const int WINDOW_SIZE = 128,
`const int MARKERBITS = 1024;
`
`const int CHUNK_BITS = 2048 * 8,
`
`int window_ofiset,
`int msg_bit_offset;
`int frequency_offset;
`Boolean useCell;
`
`/® 8 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/8];
`unsigned char msg_end_marker[MARKER_BITS/8},
`Int16 amplitude_sample_buffer[WINDOW_SIZE],
`float power_frequency_buffer[WINDOW_SIZE};
`unsigned char message_buffer[CHUNK_BITS/8},
`
`void doFFT(Int16 *amp_sample_buffer, float *power_freq_buffer,int size);
`void doInverseFFT(int16 *amp_sample_buffer, float *power_freq:buffer,intsize),
`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 initializeQ)
`{
`
`/* message to be encoded is generated */
`
`/* messageis prefixed with 1024 bit msg_start_marker */
`/* messageis suffixed with 1024 bitmsg_end_marker*/
`/* remaining space at end of messagebuffer padded with random bits */
`window_offset = 0;
`msg_bit_offset = 0;
`
`frequency_offset = 0;
`frequency_mask loaded
`window_mask loaded
`zeroAmpSampleBuffer();
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1467
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1467
`
`
`
`WO 96/42151
`
`PCT/US96/10257
`
`32
`
`Boolean getSamples(Int16 *buffer,int samples)
`{
`
`/* get samples numberof samplesandshift them contiguously into the sample
`buffer from rightto left*/
`if(samples < samples available)
`return false;
`
`else
`
`return true;
`
`} v
`
`{
`
`oid doFFT(nt16 *sample_buffer,float *spectrum_buffer,int size)
`
`calculate FFT on sample_buffer,for size samples
`store result in spectrum buffer
`
`void doInverseFFT(Int16 *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)
`{
`.
`
`returns value of specified bit in specified buffer
`either 0 or 1, could use Boolean (true/false) valuesforbit set ofbit off
`
`Boolean map(Bit window_bit,Bit band_bit,int window,int frequency_
`{
`
`/* this is the function that makesthe 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 functionis equivalent to a Booleantruth table with window * frequency * 4
`possible input combinations and 2 possible output */
`/* for any input combination, the outputis cither true or false */
`/* windowranges from 0 to WINDOW_RESET-1 */
`/* frequency ranges from 0 to WINDOW_SIZE - 1 */
`tetum calculated truth value
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1468
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1468
`
`
`
`WO 96/42151
`
`33
`
`PCT/US96/10257
`
`void encodeBit(float *spectrum_buffer,int freq_offsct,Bit theBit)
`{
`
`/* modifies the value ofthecell in spectrum_buffer, indexed by freq_offset
`in a mannerthat distinguishes each ofthe 2 possible values oftheBit,
`lor0
`
`*]
`
`/* suggested method ofsetting the Least Significantbit of the cell == theBit */
`/* alternative method ofroundingthe value ofthe cell upward or downward to
`certain fractional values proposed
`i.e, <= .5 fractional remainder signifies 0, > .5 fraction remainder
`signifies 1
`
`*/
`
`}
`
`void encode()
`{
`
`initializeQ,
`
`do {
`
`if(getSamples(amplitude_sample_buffer) == false)
`Teturn
`
`doFFT(amplitude_sample_buffer,power_frequency_buffer,WINDOW_SIZE):
`
`for (frequency_offset = 0; frequency_offset < WINDOW_SIZE;
`frequency_offset++){
`
`useCell ~ map(getBit(window_mask,window_offset),
`getBit(frequency_mask,frequency_offset),
`window_offset, frequency_offset);
`
`if(useCell == true) {
`
`encodeBit(power_frequency_buffer,frequency_offset,
`getBit(message_buffer,msg_bit_offset));
`messagebit_ofiset ++,
`
`if(msg_bit_offset -- MESSAGEBITS){
`initializeQ;
`
`break; /* exit frequency loop */
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1469
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1469
`
`
`
`WO 96/42151
`
`34
`
`PCT/US96/10257
`
`dolnverseFFT(amplitude_sample_buffer,power_frequency_bufter,
`WINDOW_SIZE),
`
`outputSamples(amplitude_sample_buffer);
`
`window_offset++,;
`
`if(window_offset == WINDOW_RESET){
`window_offset = 0;
`
`}while(true),
`
`The encode() procedure processes an input sample stream using the specified frequency and window masks as
`well as a pre-formatted message to encode.
`
`encode() processes the sample stream in windows ofWINDOW_SIZE samples, contiguously distributed in the
`sample stream,so it advances WINDOW_SIZE samplesat a time.
`
`For each sample window, encode() first compute the FFT ofthe window, yielding its Power Spectrum Estimation.
`Foreachofthese window PSEs, encode() then uses the map() function to determine where in each PSE to encode
`the bits ofthe message, whichit reads from the message buffer, on ebit at a time. Each time mapQ)returnstrue,
`encode() consumes another sample from the message.
`
`After each window is encoded, encode() computesthe inverse FFT on the PSE to generate a modified sample
`window,whichis then output as the modified signal. It is important the sample windows NOT overlap in the
`sample stream, since this would potentially damage the receeding encoding windowsin the stream.
`8
`Pi
`8
`
`Once the messageis entirely encoded,includingits special end ofmessage markerbit stream, encode() resets it
`internal variables to begin encoding the message once morein the next window. encode() proceedsin this manner
`until the input sample stream is exhausted.
`
`enum {
`
`Synchronizing,
`Locked
`
`}; /* decode states */
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1470
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1470
`
`
`
`WO 96/42151
`
`35
`
`PCT/US96/10257
`
`unsigned char message_end_buffer[MARKER_BITS},
`
`Bit decodeBit(float *spectrum_buffer,int freq_offset)
`{
`
`/* reads the value ofthecell in spectrum_bufter, indexed by freq_offset
`in a mannerthatdistinguishes each ofthe 2 possible values ofan
`encoded bit, 1 or 0
`
`*/
`
`/* suggested method oftesting the Least Significantbit ofthe cell */
`/* alternative method ofchecking the value ofthe cell versus certain fractional
`remainders proposed.
`
`ic, <= .5 fractional remaindersignifies 0, > .5 fraction remainder
`signifies 1
`
`*/
`
`return either 1 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 message_end_buffer
`Bit aBit,
`
`Boolean bitsEqual;
`
`do {
`
`if(state == Synchronizing) {
`nextSamples = 1;
`
`window_offset = 0;
`
`else
`
`nextSamples = WINDOW_SIZE,
`
`if(getSamples(amplitude_sample_buffer) == false)
`return false;
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1471
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1471
`
`
`
`WO 96/42151
`
`PCT/US96/10257
`
`36
`
`doFFT(amplitude_sample_buffer,power_frequency_buffer,
`WINDOWSIZE),
`/* 2 */
`
`for (frequencyoffset = 0; frequency_offset < WINDOWSIZE,
`frequency_offset++){
`
`useCell = map(getBit(window_mask,window_offset),
`getBit(frequency_mask,frequency_offset),
`window_offset, frequency_offset),
`
`if(useCell == 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 =
`
`compareBits(message_start_marker,message_bufter,
`message_bit_offset);
`if(!bitsEqual){
`
`message_bit_offset = 0;
`
`misaligned = true;
`
`break, /* exit frequency loop */
`
`} e
`
`} e
`
`lse {
`
`lse if (message_bit_ofiset == MARKER_BITS)
`state == Locked,
`
`/* locked onto encoded stream */
`
`shift aBit into right side of message_end_buffer
`bitsEqual = compareBits(message_end_buffer,
`msg_end_marker,.MARKER_BITS),
`if(bitsEqual)
`return true;
`
`}
`
`}
`
`} while (true);
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1472
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1472
`
`
`
`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 block,storingit in a message buffer, or exhausts the sample stream.
`
`The decode() procedurestarts in state Synchronizing, in which it does not know wherein the sample stream the
`encoding windowsare aligned. The procedure advances the sample window through the sample stream one
`sample at a time, performing the FFT calculation on each window,and attempting to decodevalid messagebits
`from the window.Asit extracts cach bit using the map() function,the decode() procdure comparesthese bits
`against the start ofmessage marker. As soon as a mismatchis detected, the decode() procedure knowsit is not yet
`properly aligned to an encoding window,and immediately ceases decoding bits from the current window and
`moves to the next window,offset by 1 sample. The decode() procedure continuesin this manneruntil it matches
`successfully the complete bitstream of a start of message marker. At this point the decode() procedure assumesit is
`aligned to an encoded message and can then decodebits to the message buffer quickly, advancing the sample
`windowfully at each iterations. It is now in Locked mode.Foreachbitit stores in the message buffer whenin
`Locked mode, the decode() procedurealso shifts the samebit value into the least significant bit ofthe
`message_end_buffer. After eachbit is decoded in Locked mode, the decode() procedure checks comparesthe
`message_end_buffer with the msg_end_markerin a bit by bit manner. When a complete matchis found, decode()
`is finished and retumstrue.If the sample stream is exhausted before this occurs, decode() returnsfalse. Ifdecode()
`retumstrue, a valid messageis stored in the message buffer, includingthe start and end of message markers.
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1473
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1473
`
`
`
`WO 96/42151
`
`Claims
`
`38
`
`PCT/US96/10257
`
`1,
`
`A steganographic method comprising thestepsof :
`using random keys in combination with steganography to encode additional
`information into digitized samples such that a signal generated from the modified
`sample stream is notsignificantly degraded and such that the additional information
`cannot be extracted without the keys and such that the signal generated from the
`modified sample stream will be degraded by attemptsto erase, scramble, or
`otherwise obliterate the encoded additional information.
`
`10
`
`An apparatus for encoding or decoding a message, represented as
`2.
`series of databits into or out ofa series ofdigitized samples, comprising:
`a)
`a sample buffer for holding and accessing and transforming
`
`digitized samples;
`
`15
`
`transforms;
`
`b)
`
`c)
`
`20
`
`25
`
`a digital signal processor capable of performingfast fourier
`
`a memory to contain information representing
`1)
`primary mask,
`
`2)
`3)
`4)
`5)
`6)
`7)
`8)
`
`convolutional mask,
`start to message delimiter,
`a mask calculation buffer,
`a message buffer,
`an integer representing a messagebit index,
`a position integer M representing messagesize,
`an integer representing an indexinto said primary
`mask,
`
`9)
`
`an integer representing an index into said convolution
`mask,
`an integer representing the state of a decode process,
`10)
`a table representing a mapfunction;
`11)
`30
`12)aflag indicating a complete messagehas been
`decoded or encoded,
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1474
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1474
`
`
`
`WO 96/42151
`
`39
`
`PCT/US96/10257
`
`a positive integer S representing a numberof samples
`to read into said sample buffer, and
`14)aflag indicating the size of a message which has been
`decoded;
`
`13)
`
`d)
`e)
`f)
`
`an input to acquiredigital samples;
`an output to output modified digital samples;
`an input for inputting the values of (cl) - (c5) and (cl1) and
`
`(c13),
`
`an output to output the message stored in (c5) as the result
`g)
`of a decode process and the value of (c10) to an attached digital circuit;
`h)
`at least one data bus to transfer information from
`
`(d) to (a),
`
`(a) to (b),
`
`(b) to (a),
`
`(a) to (e),
`
`(f to (c), and
`
`(c) to (e); and
`
`a clock which generatesa clock signal to drive (b) and
`i)
`control the operation of the apparatus.
`
`15
`
`20
`
`A methodofencoding information into a sample stream of data, said
`3.
`method comprising the steps of:
`
`A)
`
`generating a maskset to be used for encoding, said set
`
`25
`
`including:
`
`a random or pseudo-random primary mask,
`a random or pseudo-random convolution mask,
`a random or pseudo-randomstart of message
`delimiter, wherein said mask set can be concatenated and manipulated asa single bit
`stream;
`
`30
`
`B)
`
`obtaining a message to be encoded;
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1475
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1475
`
`
`
`WO 96/42151
`
`40
`
`PCT/US96/10257
`
`C)
`
`generating a messagebit steam to be encoded such that the
`
`stream includes
`
`1) a start of message delimiter, and
`2) an integer representing the number of message
`bytes to follow the message;
`
`loading the messagebit stream, a maptable, the primary
`D)
`mask, the convolution mask, and the start of message delimiter into a memory;
`E)
`resetting a primary mask index, a convalution mask and
`message bit index, and setting the message size integer equalto the total number of
`bits in the message bit stream;
`
`10
`
`15
`
`20
`
`clearing a message encoded flag;
`F)
`reading a window of samples from a sample input device
`G)
`and storing them sequentially in a sample buffer,
`H)
`resetting the primary mask index and looping through the
`sample buffer fromafirst sample to 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 sample anda bit of the convolution mask
`indicated by the convolution index to calculate an offset in the maptable;
`1D
`obtaining the bit value stored in the map table and encoding
`the bit ofthe message indicated by the messagebit index into the current sample if
`the bit value obtained from the maptableis a certain value and incrementing the
`message bit index, determining whether the messagebit index equals the number of
`messagebits, and if it does re-performing step A), setting the message encodedflag,
`and exiting the loop;
`
`25
`
`outputting the modified samples in the sample buffer, and if
`yd)
`the message encodedflag is set jumping back to said step E);
`K)
`incrementing the convolution index, wherein ifthe
`convolution index equals the length of the convolution mask in bits then set the
`
`30
`
`convolution index to 0; and
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1476
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1476
`
`
`
`WO 96/42151
`
`PCT/US96/10257
`
`41
`
`L)
`
`jumping backto step G).
`
`A method of encoding information into a sample stream of data, comprising
`4.
`the stepsof:
`
`A)
`
`generating a mask set to be used for encoding,including:
`a random or pseudo-random primary mask,
`
`a random or pseudo-random convolution mask, and
`a random or pseudo-randomstart of message
`delimiter, wherein said mask set can be concatenated and manipulated as a single bit
`stream;
`
`B)
`
`C)
`
`inputting a message to be encoded;
`
`generating a messagebit stream to be encodedincluding
`a start of message delimiter, and
`
`an integer representing of number of messagebytes to
`
`follow the message;
`
`D)
`
`loading the messagebit stream, a map table, and the mask set
`
`into a memory;
`
`E)
`
`resetting a primary mask index, a convolution mask and
`
`messagebit index, setting the message size index equal to the numberofbits in the
`
`messagebitstream, and clearing a message encodedflag;
`
`reading a window of samplesofthe inputted message and
`F)
`storing the samples sequentially in a sample buffer;
`
`G)
`
`computing a spectral transform of the samplesin the buffer;
`
`obtaining the bit value stored in the map table, wherein if the
`H)
`bit value is true, then encodingthe bit of the message indicated by the messagebit
`index into the current sample and incrementing the messagebit index, where the
`message bit index equals the numberof message bits, and then reperforming step
`A), setting the message encodedflag, and exiting the loop;
`
`QD
`
`computing the inverse spectral of the spectral values stored
`
`10
`
`15
`
`20
`
`25
`
`30
`
`in the sample buffer;
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1477
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1477
`
`
`
`WO 96/42151
`
`42
`
`PCT/US96/10257
`
`dD
`outputting the values in the samplebuffer, and ifthe sample
`encodedflagis set, then clear the flag and jump backto step E);
`K)
`incrementing the convolution index and when the
`convolution index equals the length ofthe convolution mask in bits resetting the
`convolution index; and
`
`L)
`
`jumping backto step F).
`
`3.
`
`The method of claim 3 wherein the encoding of the message bit into the
`sample in step I includes encodinga single bit ofthe sample to match the message
`bit.
`
`6.
`
`The methodof claim 4 wherein the encodingof the messagebit into the
`sample in step H includes altering the sample value such that said sample value falls
`within a prespecified range ofvalvesrelativeto its original value.
`
`7.
`
`A method of decoding information from a sample stream of data,
`comprising the stepsof:
`
`A)
`
`B)
`
`C)
`
`obtaining a mask set including:
`(1) a random or pseudo-random primary mask,
`(2) a random or pseudo-random convolution mask, and
`(3) arandom or pseudo-randomstart of message delimiter;
`loading a maptable, and the mask set into a memory;
`resetting a primary mask index and convolution mask index
`and setting a message size integer equal to 0;
`clearing a message decodedflag;
`setting a state ofthe decode process to SYNCHRONIZED;
`checking the state of the decode process and ifthe decode
`F) .
`state is UNSYNCHRONIZED,,setting a number of samples to equal 1 andresetting
`the convolution index to 0; otherwise, setting the numberof samples to equal S
`(S21);
`
`D)
`
`E)
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1478
`
`10
`
`15
`
`20
`
`25
`
`30
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1478
`
`
`
`WO 96/42151
`
`43
`
`PCT/US96/10257
`
`G)
`
`reading the numberof samples specified in step F) into a
`
`sample buffer;
`
`Tesetting the primary mask index, and looping through the
`H)
`sample buffer from thefirst sample to thelast sample, incrementing the primary
`mask index each time, and for each sample position, computing the value ofa
`mapping function to calculate an offset into the maptable;
`I) obtaining the bit value in the maptable, andifthe value is true,
`decoding the bit ofthe message indicated by the messagebit index, storing the bit
`into the message bufferat the messagebit index, and incrementing the messagebit
`index;
`
`comparing the decoded bits in the message buffer to the start
`J)
`ofmessage delimiter, and ifthe numberofbits in the message bufferis less than or
`equal to the numberofbits in the start ofmessage delimiter and the bits match, then
`setting the state ofthe decode process to SYNCHRONIZED;otherwise setting the
`state of the decode process to UNSYNCHRONIZED;
`K)
`ifthe state ofthe decodeprocessis SYNCHRONIZEDand
`the numberofbits in the message buffer is greater than or equal to the sum ofthe
`numberofbits 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;
`L)
`ifthe state ofthe decode process is SYNC-AND-SIZEand
`the numberofbits in the messagebuffer divided by 8 is greater than or equal to the
`messagesize, then setting the message decoded flag, outputting the message and
`the message decoded flag and ending the method;
`M) incrementing the convolution index, and ifthe convolution index
`equals the numberofbits in the convolution mask resetting the convolution index;
`
`and
`
`N)
`
`jumpingto step F).
`
`8.
`
`of:
`
`A methodofdecoding information from sampled data, comprising the steps
`
`10
`
`20
`
`25
`
`30
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1479
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1479
`
`
`
`WO 96/42151
`
`PCT/US96/10257
`
`44
`
`A)
`
`Obtaining a mask set including
`(1)
`arandom or pseudo-random primary mask,
`(2)
`arandom or pseudo-random convolution mask, and
`(3)
`arandom or pseudo-randomstart of message
`
`delimiter;
`
`B)
`C)
`
`loading a map table, and the maskset into a memory;
`resetting a primary mask index and convolution mask index
`
`and setting a message size integer equal to 0;
`
`clearing a message decodedflag;
`D)
`setting a state of the decode process to SYNCHRONIZED;
`E)
`checking the state of the decode process andif the decode
`F)
`state is UNSYNCHRONIZED,setting a number of samples to equal 1 and resetting
`the convolution index to 0; otherwise, setting the number of samples to equal S
`(S>1);
`
`G)
`
`reading the numberof samples specified in step F) into a
`
`sample buffer;
`
`sample buffer;
`
`H)
`
`computing a spectral transform of the samples stored in the
`
`resetting the primary mask index and looping through the
`I)
`sample buffer from the first sample to the last sample, incrementing the primary
`maskindex eachtime, and for each sample position, computing the value of a
`mapping function by using the bit ofthe primary mask corresponding to the primary
`maskindex and thebit of the convolution masks indicated by the convolution phase
`to calculate an offset into the maptable representing the mapping function;
`dD
`obtaining a bit value stored in the map,andif the value is
`true, decoding the bit of the message indicated by the messagebit index from the
`current sample, storing the bit into the message buffer at the message bit index, and
`incrementing the message bit index;
`
`comparing the decodedbits in the message buffer to the start
`K)
`ofmessagedelimiter, and ifthe numberofbitsin the message buffer is 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-602
`Exhibit 1006, Page 1480
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1480
`
`
`
`WO 96/42151
`
`PCT/US96/10257
`
`45
`
`setting the state ofthe decode process to SYNCHRONIZED; otherwise, setting the
`state ofthe decode process UNSYNCHRONIZED;
`L)
`if the state ofthe decode process is SYNCHRONIZED,and
`the numberofbits in the messagebuffer is greater than or equal to the sum ofthe
`numberofbits of the start of delimiter and the message size, then setting the state
`ofthe decode process to SYNC-AND-SIZEand copying certain bits from the
`message buffer to a message size integer container;
`M)_ifthe state of the decode process is SYNC-AND-SIZE and
`the numberofbits in the message buffer divided by 8 is greater than or equal to the
`message size, then setting the message decoded flag, outputting the message and
`the message decoded flag and ending the method;
`
`15
`
`20
`
`25
`
`incrementing the convolution index, wherein if the
`N)
`convolution index equals the numberofbits in the convolution mask, then resetting
`the convolution index; and
`O)
`jumpingto step F).
`
`The method of claim 7 wherein the decoding of the message bit from the
`9.
`sample in step I includes reading a single bit of the sample.
`
`The method of claim 7 wherein the decoding of the message bit from the
`10.
`sample in step I includes mapping a range of sample values onto a particular
`messagebit value.
`
`The method of claim 4 wherein the map table is defined such that any index
`11.
`of the maptable directs the process to encode information.
`
`The method of claim 1 wherein the samples are obtained from a sample
`12.
`stream representing digitized sound or music.
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1481
`
`DISH-Blue Spike-602
`Exhibit 1006, Page 1481
`
`
`
`WO 96/42151
`
`PCT/US96/10257
`
`46
`
`The methodof claim 12 wherein the identical encode processis performed
`13.
`on two sample streamsrepresenting 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 areinterleaved before being input as a
`single sample stream and are separated into two channels upon output.
`
`The method of claim 1 wherein the samples are obtained from a sample
`15.
`stream rep