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

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