`
`PCT/US96I10257
`
`'26
`
`Joe’s signed it. The Publisher transmits the signed Distribution Agreement to the
`V Authority, Ethical Inc.
`
`Ethical Inc. now combines the signed TIA certificate and the Distribution
`
`Agreement into a single message, and signs the entire message using its private key.
`Ethical has now created 3 Publisher IdentificatiOn message to go into its own stega-
`cipher channel in the content. Ethical Inc. now generates new stega-cipher masks
`and encodes this message into 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 of the transfer, including the title, 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
`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
`
`assumes responsibility for any copies made to 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 communication link, similar to Publisher’s Distribution
`
`Agreement, only this is a Purchase Agreement, which lists
`
`10
`
`15
`
`20
`
`the cement title ‘
`
`25
`
`consumer identification
`
`the terms of distribution
`
`the consideration pas for the content
`
`a brief statement of agreement with the terms above
`
`30
`
`John Q. Public signs this agreement with his private key and. returns it to the Joe’s
`Online Emporium. The Publisher, Joe’s prepares to encode its own stega-cipher
`
`DISH-Blue Spike-842
`
`Exhibit 1004, Page 0652
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0652
`
`
`
`WO 96/42151
`
`‘
`
`.
`
`PCTIUS96/l 0257
`
`27
`
`watermark onto a 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 by title and consumer. Joe’s Online Emporium signs the
`
`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 Consumer information and adds its own
`
`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,
`
`10
`
`indexed by the title, the publisher, and the comumer identification. 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, who is accepting
`
`responsibility for it. The Publisher destroys their version of the consumer’s copy.
`
`Ifthis procedure is followed for all content distribution within such an online system
`
`20
`
`then it should be possible for the Authority to identify the owner of a piece of
`
`content which appears to be unauthorized. The Authority could simply try its
`
`database of stega—cipher keys to decode the watermark in, the content in question.
`
`For instance, if a copy of Seal’s latest single originally distributed with stega-cipher
`
`25
`
`watermarks showed up on an Internet ftp 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 Contract of Sale,
`
`which places responsibility with the Consumer. .This is not a time critical
`
`application, so even if it takes days or weeks, it is still worthwhile.
`
`30
`
`DISH-Blue Spike-842
`
`Exhibit 1004, Page 0653
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0653
`
`
`
`wo 96/41151
`
`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
`
`offiaud committed by the collusion of certain Publishers and Consumers. Using an
`
`Authority, or one of several available Authorities to keep records ofPublisher—
`
`5
`
`Consumer transactions 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 itsown purposes, wether online
`
`10
`
`or in physical media. For instance, a CD manufacturer could incorporate unique
`
`stega-cipher watermarks into specific batches of its compact discs to identify the
`source ofa pirate ring, or to identify unauthorized digital copies made'fi'om its
`
`discs. This is possible because the stega-cipher encoding works with the existing
`formats of digital samples and does not add any new structures to the sample data
`that cannot be handled on electronic or mechanical systems which predate the
`
`15
`
`stega-cipher.
`
`VI.
`
`Increasing Confidence in the Stega-Cipher
`
`20
`
`The addition ofa 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 watermark to the message in the Watermark
`
`itself. This allows us a verification that the watermark decoded was encoded by
`whomever signed it into this precise location in this specific content.
`
`25
`
`Suppose one wants to use a 256 bit (32 byte) hash value which is' calculated with a
`
`secure one-way hash function over each sample in each sample window that will
`
`contain the message. The hash starts with a seed value, and each sample that would
`
`be processed by the encoder when encoding the message is incorporated into the
`hash as it is processed. The result is a 256 bit number one can be highly confident is
`
`30
`
`DISH-Blue Spike-842
`
`Exhibit 1004, Page 0654
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0654
`
`
`
`W0 96/4215]
`
`PCT/U896” 0257
`
`29
`
`unique, or sufiiciently rare to make intentionally duplicating it with another series of
`
`samples diflicult.
`
`It is important that the hash function be insensitive to any changes in the samples
`
`induced by the stega-cipher itself. For instance, one might ignore the least
`
`significant bit ofeach sample when computing the hash function, ifthe stega-cipher
`
`was implemented using a least significant bit encode mode.
`
`Based on the size ofthe non-hash message, one knows the hash-inclusive message
`
`requires 32 more bytes of space. One can now calculate the size of a signed
`
`encrypted copy ofthis message by signing and encrypting exactly as many random
`
`bytes as are in the message, and measuring the size ofthe output in bytes. One now
`
`knows the size 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 window series which will contain 4
`the message, as each sample is processed. At the end ofeach instance of“encoding”
`take the resultant hash value and use it to create a unique copy of the message
`
`which includes the hash value particular to the series of sample windows that will be
`used to encode the message. Sign and encrypt this copy ofthe message, and save it
`for encoding in the same place 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 tolthe first
`
`window in the series and actually encode each message, disposing of it afterwards.
`
`10
`
`15
`
`20
`
`25
`
`The important result is evident on decoding. The decoding party can calculate the
`
`30
`
`same hash used to encode the message for themselves, but on the encoded samples.
`Ifthe value calculated by the decoding party does not match the value contained in
`
`the signed message, the decoder isalerted to the fact that this watermark was
`
`DISH-Blue Spike-842
`
`Exhibit 1004, Page 0655
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0655
`
`
`
`W0 96/4215!
`
`-
`
`PCP/US96l10257
`
`30
`
`transplanted from somewhere else. This is possible only with a hash function which
`
`ignores the changes made by the stega-cipher afier the hash in the watermark was
`
`generated.
`
`5
`
`This scheme makes it 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/4215]
`
`PCT[0896/10257
`
`31-
`
`Appendix - Psuedo-code
`
`oonst int mommy = 256;
`
`cans: int wmnow_szzs = 128;
`coast int MARKER_BITS = 1024;
`eons: int caumgarrs =- 2048 . 8;
`
`int windw_ofl‘eet;
`int msg_bit_ctl'set;
`
`int fiequency_ofl'set;
`Boolean nseCell;
`
`IO 8 bitsperbye, l byteperchar‘l
`
`unsignw chat frequency__mask[WD~IDOW_SlZF/8];
`
`unsigned chat window_mask[WlNDOW_RESl-3Tl8];
`
`unsigned char msg.stalt_matker[MARl(ER_BlTS/8];
`unsigned char mg_end__markethARKER_BrIS/8];
`
`Int16 unplitude_sample_bufl‘el-[WMDS)W_SIZE];
`float pcwer_frequeney_bufl'er[WNDOW_SlZI-I];
`
`unsigned char menoge_buffer[CPflJNK_BHS/8];
`
`void doFFfmttl 6 ‘amp_sample_bufl'er, float ’power_fmq_bufl’er,int size),
`
`void dolnverseH-‘Tantlé ‘amp_sample_bulfer, float ’power_freq'_bufl‘er,int size);
`void initializeo;
`
`Bit getBMunsigned char ‘bufi‘erjnt bitOfl'set),
`
`Boolean map(Bit window__bit, Bit band_bit, int window. int frequency);
`Boolean getSampleeGnth ’amplitude_sample_bufl‘et,int samples);
`Void eneodeO
`
`void initializoo
`{
`
`/‘ message to beencoded is generated ‘I
`
`l’ message is prefixed with 1024 bit msg_start_marker ‘/
`/‘ message is suffixed with 1024 bit msg_end _marker ‘/
`
`/‘ remaining space at end of message buffer padded with random bits ‘/
`windaw_ofi‘set = 0;
`
`msLbiLoft'set = 0;
`frequency_olfset = 0;
`
`frequency_mask loaded
`window_mask loaded
`zeroAmpSampleBulTetO;
`
`DISH-Blue Spike-842
`
`Exhibit 1004, Page 0657
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0657
`
`
`
`WO 96/42151
`
`‘
`
`PCT/[189010257
`
`32
`
`Boolean getSamplesantl6 'bufl‘crjnt samples)
`{
`
`I' get samples number ofsamples and shin them contiguously into the sample
`bufi'er from right to left‘l
`
`itIsamples < samples available)
`. return like;
`
`else
`
`renim "W.
`
`}
`
`void doFFl'antIG ‘sample_bufi‘er, float ‘spectrurn_bufl‘er, int size)
`{
`
`calculate H-‘l‘ on samplc_but'fer, for size samples
`store result in spectrum buffer
`V
`
`void dolnverseFF’l‘antlé ‘sample_bufl'er,float ‘spectrum_bufl‘er,int size)
`{
`_
`»
`
`calculate inverse FFl‘ on spwuum_bufi‘er
`store result in sampe_bulfer
`
`Bit getBiKunsigncd char ‘bufi‘erjn bitOfl‘set)
`{
`‘
`'
`
`returns value ofspecified bit in specified bufi‘er
`
`either 0 or 1, could use Boolean (true/false) values for bit set of bit off
`
`Boolean map(Bit window_bit,Bit band_bit,int window, int frequency_
`{
`
`I‘ this is the function that makes the information diflicult to find ‘/
`
`_/" the inputs window_blt and band__bit depend only on the mask values
`
`uwd for encoding the information, they are 1) random, 2) mtet '/
`l“ window and frequency values are used add time and frequency band dependent
`complexity to this function ‘I
`
`I‘ this function is equivalent to a Boolean truth table with window ‘ frequency ’ 4
`V possible input combinations and 2 possible output "I
`/‘ for any input combination, the output is either true or false ‘I
`
`/‘ window ranges from 0 to WINDOW_RESET -l ‘l
`
`/' frequency ranges from 0 to WINDOW__SIZE - l ‘l
`return calculated truth value
`
`'
`
`DISH-Blue Spike-842
`
`Exhibit 1004, Page 0658
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0658
`
`
`
`W0 96/4215]
`
`33
`
`PCTIUS96/16257
`
`void eneodeBiKfloat ‘spectmm_but‘i‘er,int fieLoflsetBit theBit)
`l
`
`/’ modifies the value ofthe cell in speetrum_bufl‘er, indexed by freq_offset
`in a manner that distinguishes each ofthe 2 possible values of theBit,
`] or0
`
`.
`
`‘/
`
`P Isuggected method ofsetting the least Significant bit ofthe cell = theBit ‘/
`
`/‘ alternative method of rounding the value ofthe cell upward or doanud to
`certain fractional values proposed
`
`Le. <= 5 fractional remainder signifies 0, > ‘5 fraction remainder
`signifies 1
`
`‘l
`
`, }
`
`void eneodeO
`{
`
`initializeo;
`
`‘10 {
`
`illgetSamples(amplimde_sample_bufl‘er) = false)
`Mum
`
`doFFKamplitude_sarnple_buffer,power_frequency_bulTer,WINDOW_SIZE);
`
`for (frequency_offset = 0, frequency_ofl‘set < WlNDOW_SIZE;
`frequency_ofl‘set-H){
`
`useCell = map(getBit(window_mask,window_ofl'sel),
`
`getBit(l‘requeney_msk,frequency_olfset),
`window_oifset, frequency_ofi'set);
`
`_
`iKuseCell == tme){
`i
`cneodeBit(power_frequency_bufl‘cr,l‘requency_oflset,
`getBit(message_bulTergnsg_bit_othet));
`message__bit_ofl'set ++;
`
`iltmsg_bit_offset '= MESSAGEBITSH
`initializeo;
`
`break; 1‘ exit frequency loop */
`
`DISH-Blue Spike-842
`
`Exhibit 1004, Page 0659
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0659
`
`
`
`wo 96/4215]
`
`'
`
`'
`
`34
`
`PCT/US96I10257
`
`doInversem(amplitude_sample_bufi‘er,power_frequency_bufl'er,
`WINDOW_SIZE);
`
`outputSampIedamplimdejamplejufl‘er);
`
`window_ofl"set++;
`
`itlwindow_ofi‘set W]NDOW_RESET){
`window_ofi‘set = o,
`
`}while(true)',
`
`The encodeo procedure processes an input sample stream using the specified frequency and window'masks as
`well as a pre-fannatted memge to encode.
`
`encodeo processes the sample stream'to windows ofWINDOW_SLZE samples, contiguously distributedtn the
`sample stream, so it advances WINDOWSIZE samples at a time.
`
`For each sample window, encodeo first compute the m- ofthe window, yielding its Power Spectrum Estimation.
`For each oftheoe window PSEs, eneodeO then uses the map() function to determine whereIn each PSE to encode
`_ the bits ofthe message which'it reads from the message butTer, on chit at a time Each time mapo returns true,
`encodeo consumes another sample from the message.
`
`Aflcr each window is encoded, encodeo computes the inverse FFI' 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 damage the pmeding encoding windows in the stream.
`
`Once the message is entirely encoded, including its special end of message marker bit stream, encodeo resets it
`internal variables to begin encoding the message once more in the next window. encodeo promds in this manner
`until the input ample stream is exhausted.
`
`enum {
`
`Synchronizing,
`locked
`
`;; I‘ decode states '/
`
`.
`
`,
`
`A
`
`DISH-Blue Spike-842
`
`Exhibit 1004, Page 0660
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0660
`
`
`
`wo 96/4215]
`
`35
`
`PCT/US96l10257
`
`unsigned char message_end_bufi'er[MARKBR_BlTS];
`
`Bit dwodeBiKfloat 'spectrum_butfer,int freq_offset)
`{
`
`/‘ reads the value ofthe cell in speeuum_buffer, indexed by fieq_offset
`in a manner thet distinguishes each ofthe 2 possible values ofan
`encoded bit, 1 or 0
`
`3/ ‘
`
`I‘ suggested method oftesting the Least Significant bit ofthe cell ‘/
`
`/’ altunative method ofehecking the value ofthe cell versus certain fractional
`remainders propomd.
`
`i.e. <- .5 fractional remainder signifies 0, > .5 fraction remainder
`Ignitiesl
`'
`
`‘I
`
`return either I or 0 as appropriate
`
`Boolean decodeo
`{
`
`'
`
`l' Initialization ‘/
`
`state = Synchronizing
`windaw_ofi‘set, = 0,
`
`set frequency mask
`set window mask
`
`clear sample buffer
`
`int neKtSamplee = 1',
`
`int msg_start_omet =' 0',
`clear message_end_bufl‘er
`Bit aBig
`
`Boolean bitsEqual;
`
`do(
`
`iitsmte '=* Synchronizingfl
`nextSamples = l;
`
`window_ofl‘set '= 0;
`
`else
`
`nextSamples = W1NDOW_SIZE;
`
`ifigetSampleqamplitudeJamplgbutfer) == false)
`return false;
`
`DISH-Blue Spike-842
`
`Exhibit 1004, Page 0661
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0661
`
`
`
`wo 96/4215;
`
`PCP/US96l10257
`
`36
`
`doFFT(amplimde__sample__bufl'er,pow¢r_frequency_bufl'et,
`‘ WINDOW_SIZE)‘, /‘ 2 1’l
`
`for (fiequéncyfimet = 0; frequmcy_ofi‘sct <W1NDOW_SIZE;
`Muencyyffsetfix
`
`useCell = map(getBit(Mndow_mask,window_othct),
`getBinrequcnchaskfrcquency_ofl‘set),
`window_offsct, fiequmcy_ofl‘s:t);
`
`museCell == max
`
`aBit =' dwochiKpowchrcqucncLbufi‘er, '
`flequency_ofi‘set);
`
`setBit(mcssagc_bufl‘er,mcssage_bit_ofisct,aBit);
`message_bit_offset H;
`
`} e
`
`lse
`
`continue;
`
`if(stalc == Synchronizing){
`bitsEqua! ==
`
`commeitdmessage_starl_marker,mmage_bufl‘cr,
`message_bit_ofl'set);
`imbilsEquam
`
`mmggbigoffset = 0;
`misaligned = true,
`
`break, /‘ exit frequency loop '/
`
`} e
`
`lse if (Inmage_bit_ofl'sct =. MARKER_BITS)
`state = Locked;
`
`/' lockcd onto encoded stream ‘/
`
`shill aBit into right side ofmcssage_cnd_bufl‘er
`bitsEqual = co:nmeits(messagc_end_butTcr,
`
`msg_end_market,MARKER_BITS);
`'
`iKbitsEqual)
`
`return true;
`
`)whilc (true);
`
`DISH-Blue Spike-842
`
`Exhibit 1004, Page 0662
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0662
`
`
`
`‘ WO 96/42151
`
`‘PCT/US96/10257
`
`37
`
`The decodeo procedure scans an input sample stream using specified window and frequency masks, tmtil it either
`dwodes a valid message block, storing it in a message buffer, or exhausts the sample stream. 1
`
`The decodeo procedure starts in state Synchronizing, in which it does not know where in the sample stream the
`encoding windows are aligned. The procedure advances the sample window through the sample stream one
`
`sample at a time, performing the m calculation on each window, and attempting to decode valid message bits
`from the window. As it enacts each bit using the mapO function, the decodeO procdure compares Mesa bits
`ayinst the start ofmeasage "lurker. As soon as a mismatch is detected, the decodeO procedure knows it is notyet
`properly aligned to an encoding window, and immediately eedses decoding bits from the current window and
`moves to the next window. offset by l ample. The deeodeO procedure continues in this manner until it matches
`
`successfully the complete bitstream of a start ofmessage marker. At this point the decodeO pmdure assumes it is
`aligned to an encoded message and can then decode bits to the memge hufl‘er quickly, advancing the sample
`window fully at each iterations. It is now in Locked mode. lior each bit it stores in the message buffer when in
`Locked mode, the decodeO procedure also shifts the same bit value into the least significant bit ofthe
`
`messagc_end_bufl'er. Atter each bit is decoded in Locked mode, the decodeo procedure checks compares the
`
`muga_end_bufl‘er with the msg_cnd_marker in a bit by bit manner. When a complete match is found, decodeo
`
`is finished and returns true. Ifthc sample stream is exhausted before this occurs, decodeO returns false. Ifdecodeo
`returns true, a valid message is stored in the message bufl‘er, including the start and end ofmeesage markers.
`
`DISH-Blue Spike-842
`
`Exhibit 1004, Page 0663
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0663
`
`
`
`W0 96/421 51
`
`Claims
`
`38
`
`. PCT/US96110257
`
`l.
`
`A steganographic method comprising the steps of :
`
`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 not significantly 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 attempts to erase, scramble, or
`otherwise obliterate the encoded additional information.
`
`10
`
`An apparatus for encoding or decoding a message, represented as
`‘
`2.
`series ofdata bits into or out ofa series of digitized samples, comprising:
`a)
`
`a sample bufi‘er for holding and accessing and transfomiing
`
`digitized samples;
`
`15
`
`transforms;
`
`n b)
`
`C)
`
`a digital signal processor capable of performing fast fourier
`
`a memory to contain information representing
`
`20
`
`25
`
`30
`
`1)
`
`2)
`
`3)
`
`4)
`
`5)
`
`6)
`
`7)
`
`8)
`
`9)
`
`10)
`
`11)
`
`12)
`
`primary mask,
`
`convolutional mask,
`
`start to message delimiter,
`
`a mask calculation buffer,
`
`a message buffer,
`
`an integer representing a message bit index,
`
`a position integer M representing message size,
`
`an integer representing an index into said primary
`mask,
`
`an integer representing an index into said convolution
`
`. maslg
`
`an integer representing the state of a decode process,
`
`a table representing a map firnction;
`
`a flag indicating a complete message has been
`
`decoded or encoded,
`
`Diéi—T-BIue Spike-842
`Exhibit 1004, Page 0664
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0664
`
`
`
`wo 96/42151
`
`PCT/US96/10257
`
`39
`
`13)
`
`a positive integer S representing a number of samples
`
`to read into said sample bufi‘er, and
`
`.
`
`14)
`
`a flag indicating the size of a 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 (c1 1) and
`'
`
`d)
`
`e)
`
`i)
`
`‘
`(cm;
`
`an output to output the message stored in (CS) as the result
`g)
`ofa 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),
`
`(t) to (c), and
`
`(c) to (e); and
`
`5
`
`10
`
`15 '
`
`20
`
`control the operation of the apparatus.
`
`i)
`
`a clock which generates a clock signal to drive (b) and
`
`3.
`
`A method ofencoding information into a sample stream of data, said
`
`method comprising the steps of:
`
`,
`
`A)
`
`generating a mask set 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-random start of message
`
`delimiter, wherein said mask set can be concatenated and manipulated as a single bit
`stream;
`
`30
`
`B)
`
`obtaining a message to be encoded;
`
`DISH-Blue Spike-842
`
`Exhibit 1004, Page 0665
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0665
`
`
`
`wo 95142151
`
`40
`
`'
`
`PCT/0896110257
`
`C)
`stream includes
`
`generating a message bit steam to be encoded such that the
`
`1) a start of message delimiter, and
`
`2) an integer representing the number ofmessage
`
`5
`
`bytes to follow the message;
`
`D)
`
`loading the message bit stream, a map table, the primary
`
`mask, the convolution mask, and the start of message delimiter into a memory;
`
`E)
`
`resetting a primary mask index, a convolution mask and
`
`10 .
`
`message bit index, and setting the message size integer equal to the total number of '
`bits in the message bit stream;
`
`6
`
`F)
`
`G)
`
`clearing a message encoded flag;
`
`reading a window of samples from a sample input device
`
`and storing them sequentially in a sample bufi‘er;
`
`15
`
`'
`
`H)
`
`resetting the primary mask index and looping through the
`
`sample buffer from a first sample to a last sample incrementing the primary mask
`index each time a sample is visited, such that for each sample position, a value of
`
`the mapping function is computed, which is either true or false, by using a bit ofthe
`
`primary mask representing a current sample and a bit ofthe convolution mask
`
`20
`
`indicated by the convolution index to calculate an ofi'set in the map table;
`II)
`V
`obtaining the bit value stored in the map table and encoding
`
`the bit ofthe message indicated by the message bit index into the current sample if
`
`the bit value obtained from the map table is a certain value and incrementing the
`
`message bit index, determining whether the message bit index equals the number of
`
`25
`
`message bits, and if it does re-performing step A), setting the message encoded flag,
`
`and exiting the loop;
`
`J)
`
`outputting the modified samples in the sample buffer, and if
`
`the message encoded flag is set jumping back to said step E);
`
`K)
`
`incrementing the convolution index, wherein ifthe
`
`30
`
`convolution index equals the length of the convolution mask in bits then set the
`
`convolution index to O, and
`
`DISH-Blue Spike-842
`
`Exhibit 1004, Page 0666
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0666
`
`
`
`WO 96/42151
`
`Per/U896/10257
`
`41
`
`L)
`
`_ jumping back to step G).
`
`4.
`
`A method of encoding information into a sample stream of data, comprising
`
`the steps of:
`
`5
`
`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-random start 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 message bit stream to be encoded including
`
`a start of message delimiter, and
`
`an integer representing of number of message bytes to
`
`15
`
`follow the message;
`
`D)
`
`loading the message bit stream, a map table, and the mask set
`
`into a memory;
`
`E)
`
`resetting a primary mask index, a convolution mask and
`
`message bit index, setting the message size index equal to the number of bits in the
`
`20
`
`message bitstream, and clearing a message encoded flag;
`
`F)
`
`reading a window of samples of the inputted message and
`
`storing the samples sequentially in a sample buffer;
`
`G)
`
`computing a spectral transform of the samples in the buffer;
`
`_ H)
`
`obtaining the bit value stored in the map table, wherein ifthe
`
`25
`
`bit value is true, then encoding the bit of the message indicated by the message bit
`
`index into the current sample and incrementing the message bit index, where the
`
`message bit index equals the number of message bits, and then reperfonning step
`
`t
`
`A), setting the message encoded flag, and exiting the loop;
`
`I)
`
`computing the inverse spectral of the spectral values stored
`
`30
`
`in the sample buffer;
`
`DISH-Blue Spike-842
`
`Exhibit 1004, Page 0667
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0667
`
`
`
`W0 96/4215]
`
`'
`
`PCT/U596/10257
`
`42
`
`J)
`
`outputting the values in the sample buffer, and ifthe sample
`
`encoded flag is set, then clear the flag and jump back to 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 back to step F).
`
`5.
`
`The method of claim 3 wherein the encoding of the message bit into the
`
`sample in step I includes encoding a single bit ofthe sample to match the message
`bit.
`
`6.
`
`The method of claim 4 wherein the encoding of the message bit into the
`
`sample in step H includes altering the sample value such that said sample value falls
`
`within a prespecified range ofvalves relative to its original value.
`
`A method ofdecoding information from a sample stream ofdata,
`7.
`comprising the steps of:
`
`A)
`
`obtaining a mask set including:
`
`(1) a random or pseudoorandom primary mask,
`(2) a random or pseudo-random convolution mask, and
`(3) a random or pseudo~random start of message delimiter;
`
`B)
`
`C)
`
`loading a map table, 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;
`
`D)
`
`E)
`F) .
`
`clearing a message decoded flag;
`
`. setting a state ofthe decode process to SYNCHRONIZED;
`checking the state ofthe decode process and ifthe decode
`
`5
`
`10
`
`' 15
`
`20
`
`25
`
`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
`($21);
`
`30
`
`'
`
`DISH-Blue Spike-842
`
`Exhibit 1004, Page 0668
`
`DISH-Blue Spike-842
`Exhibit 1004, Page 0668
`
`
`
`WO 96/42151
`
`PCT/0896" 0257
`
`43
`
`G)
`
`reading the number of samples specified in step F) into a
`
`sample bufl'er,
`resetting the primary mask index, and leaping through the
`. H)
`sample bufi‘er from the first sample to the laSt sample,‘mcrementing the primary
`mask index each time, and for each sample position, computing the value of a
`mapping function to calculate an offsetmm the map table;
`I) obtaining the bit value in the map table, and ifthe value is true,
`decoding the bit ofthe message indicated by the message bit index, storing the bit
`into the message buffer at the message bit index, andincrementing the message bit
`
`index;
`
`comparing the decoded bits in the message bufl'eritothe start
`I)
`ofmessage delimiter, and ifthe number ofbits in the message bufi‘er is less than or
`equal to the number ofbits in 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;
`.
`I K)
`ifthe state ofthe decode process is SYNCHRONIZED and
`the number ofbits in the message buffer 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 message size integer container;
`
`ifthe state ofthe decode process is SYNC-AND-SIZE and
`L)
`the number ofbits 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;
`
`M) incrementing the convolution index, and ifthe convolution index
`equals the number ofbits in the convolution mask resetting the convolution index;
`and
`
`N)
`
`jumping to step F).
`
`8.
`of:
`
`A method ofdecoding 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/U896”0257
`
`A)
`
`Obtaining a mask set including
`
`(1)
`
`(2)
`
`(3)
`
`a random or pseudo-random primary mask,
`
`a random or pseudo-random convolution mask, and
`
`a random or pseudo-random start of message
`
`delimiter,
`
`B)
`
`C)
`
`loading a map table, 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;
`
`D)
`
`E)
`
`F)
`
`clearing a message decoded flag;
`
`setting a state of the decode process to SYNCHRONIZED;
`
`checking' the state ofthe decode process and ifthe decode
`
`state is UNSYNCHRONIZED, setting a number of samples to equal 1 and resetting
`
`the convolution index to 0; otherwise, setting the number ofsamples to equal S V
`(S>1);
`
`G)
`
`reading the number of samples specified in step F) into a
`
`sample buffer;
`
`sample bufi'er;
`
`H)
`
`computing a spectral transform ofthe samples stored in the ‘
`I
`>
`
`resetting the primary mask index and looping through the
`V
`I)
`sample buffer from the iirst sample to the last sample, incrementing the primary
`mask index each time, and for each sample position, computing the value of a
`
`mapping fimction by using the bit ofthe primary mask corresponding to the primary
`mask index and the bit of the convolution masks indicated by the convolution phase
`to calculate an offset into the map table representing the mapping fimction;
`
`J)
`
`obtaining a bit value stored in the map, and ifthe value is
`
`true, decoding the bit ofthe message indicated by the message bit index from the
`
`current sample, storing the bit into the message buffer at the message bit index, and
`incrementing the message bit index;
`'
`I
`
`comparing the decoded bits in the message bufi‘er to the start
`K)
`ofmessage delimiter, and ifthe number of bits in the message buffer is less than or
`
`equal to the number ofbits 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/4215]
`
`.
`
`‘
`
`45
`
`'
`
`PCT/US96/10257
`
`5
`
`10
`
`setting the state ofthe decode process to SYNCHRONIZED; otherwise, setting the
`state ofthe decode process UNSYNCHRONIZED;
`
`L)
`
`ifthe state ofthe decodeprocess is SYNCHRONIZED, and
`
`the number ofbits in the message buffer 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 Earn the
`message buffer to a message size integer container,
`7
`
`M)
`
`ifthe state ofthe decode process is SYNC-AND-SIZE and
`
`the number-ofbits in the message buffer divided by 8 is greatet: 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;
`
`N) '
`
`incrementing the convolution index, wherein ifthe
`
`convolution index equals the number ofbits in the convolution mask, then resetting
`the convolution index; and
`
`~ 15
`
`O)
`
`jumping to step F).
`
`9.
`
`The method of claim 7 wherein the decoding ofthe message bit from the
`
`sample in step I includes reading a single bit of the sample.
`
`20
`
`10.
`
`The method of claim 7 wherein the decoding of the message bit from the
`
`sample in step I includes mapping a range of sample values onto a particular
`
`message bit value.
`
`The method of claim 4 wherein the map table is defined such that any index
`11.
`ofthe map table directs the process to encode information.
`
`25
`
`The method ofclaim 1 wherein the samples are obtained from a sample
`12.
`stream representing d