[Cryptography Team] Re: interleaving indexing has me scrambled

Robert Withers robert.w.withers at gmail.com
Thu Dec 17 04:59:36 UTC 2015


I had to bail on this. I really don't understand what it is doing. sorry 
it didn't deliver, hopefully I'll be able to get your back

regards,

robert

On 12/16/2015 10:23 PM, Robert Withers wrote:
> In particular the tempIndex of the second scan goes out of range and I
> scratching my head. If anyone actually wants to look at how this method
> works and can help, awesome! :)
>
> best,
> robert
>
>
>
> ---
>
> interleave: symbols blockCount: blockCount
>
>      | symbolsPerChunk table interleaved interleavedBlock fourChunk
> symbolsPerBlock |
>      ((symbols size \\ 4) > 0) ifTrue: [self error: 'interleaving bytes
> size not a multiple of 4'].
>      symbolsPerChunk := symbols size // blockCount.
>      symbolsPerBlock := symbols size // (blockCount // 4).
>      table := OrderedCollection new: 4 withAll: 0.
>      table at: 1 put: (ByteArray new: symbolsPerChunk withAll: 0).
>      table at: 2 put: (ByteArray new: symbolsPerChunk withAll: 0).
>      table at: 3 put: (ByteArray new: symbolsPerChunk withAll: 0).
>      table at: 4 put: (ByteArray new: symbolsPerChunk withAll: 0).
>      interleavedBlock := ByteArray new: (symbols size / blockCount)
> withAll: 0.
>      interleaved := ByteArray new: (symbols size + 1) withAll: 0.
>      interleaved at: 1 put: blockCount.
>
>      0 to: blockCount - 1 do: [ :blockIndex |
>          | end start |
>          start := blockIndex * symbolsPerBlock + 1.
>          end := (blockIndex + 1) * symbolsPerBlock.
>          fourChunk := symbols copyFrom: start to: end.
>          "first scan: bytes to populate the table"
>          0 to: 3 do: [ :chunkIndex |
>              | chunk slice symbol |
>              chunk := fourChunk copyFrom: (chunkIndex * symbolsPerChunk
> + 1) to: ((chunkIndex + 1) * symbolsPerChunk).
>               1 to: symbolsPerChunk do: [ :index |
>                  slice := table at: (chunkIndex + 1).
>                  symbol := chunk at: index.
>                  slice at: index put: symbol]].
>          "second scan: table to populate the interleaved bytes"
>          1 to: symbolsPerChunk do: [ :index |
>              0 to: 3 do: [ :chunkIndex |
>                  | localIndex offset tempIndex symbol |
>                  offset := symbolsPerBlock * blockIndex.
>                  tempIndex := index * 4 + chunkIndex - 3.
>                  localIndex := offset + tempIndex.
>                  symbol := (table at: (chunkIndex + 1)) at: index.
>                  interleavedBlock at: localIndex put: symbol]].
>          start := symbols size / blockCount * blockIndex + 1.
>          end := symbols size / blockCount * blockIndex +
> interleavedBlock size.
>          interleaved replaceFrom: (start + 1) to: (end + 1) with:
> interleavedBlock startingAt: 1].
>      ^ interleaved

-- 
. .. .. ^,^ best, robert


More information about the Cryptography mailing list