diff --git a/packages/curl/batch_hasher.go b/packages/curl/batch_hasher.go index 51d63f20e7856c82726f0a7e061e750ffb62c419..1a4d14681b950cbb7db0ddfe8ac91fd66b34b47c 100644 --- a/packages/curl/batch_hasher.go +++ b/packages/curl/batch_hasher.go @@ -43,7 +43,7 @@ func (this *BatchHasher) processHashes(tasks []batchworkerpool.Task) { } // calculate the hash - bctCurl := NewBCTCurl(this.hashLength, this.rounds) + bctCurl := NewBCTCurl(this.hashLength, this.rounds, strconv.IntSize) bctCurl.Reset() bctCurl.Absorb(bcTrits) diff --git a/packages/curl/bct_curl.go b/packages/curl/bct_curl.go index 9a8f95fe306ef8ff5138c1f9a4963ce13c0fb179..8a5e7a5be26b582279f66b414492ae0e481d3ed8 100644 --- a/packages/curl/bct_curl.go +++ b/packages/curl/bct_curl.go @@ -3,22 +3,29 @@ package curl import "github.com/iotaledger/goshimmer/packages/ternary" const ( - HIGH_LONG_BITS = 0xFFFFFFFFFFFFFFFF NUMBER_OF_TRITS_IN_A_TRYTE = 3 ) type BCTCurl struct { hashLength int numberOfRounds int + highLongBits uint stateLength int state ternary.BCTrits cTransform func() } -func NewBCTCurl(hashLength int, numberOfRounds int) *BCTCurl { +func NewBCTCurl(hashLength int, numberOfRounds int, batchSize int) *BCTCurl { + + var highLongBits uint + for i := 0; i < batchSize; i++ { + highLongBits += 1 << uint(i) + } + this := &BCTCurl{ hashLength: hashLength, numberOfRounds: numberOfRounds, + highLongBits: highLongBits, stateLength: NUMBER_OF_TRITS_IN_A_TRYTE * hashLength, state: ternary.BCTrits{ Lo: make([]uint, NUMBER_OF_TRITS_IN_A_TRYTE*hashLength), @@ -34,8 +41,8 @@ func NewBCTCurl(hashLength int, numberOfRounds int) *BCTCurl { func (this *BCTCurl) Reset() { for i := 0; i < this.stateLength; i++ { - this.state.Lo[i] = HIGH_LONG_BITS - this.state.Hi[i] = HIGH_LONG_BITS + this.state.Lo[i] = this.highLongBits + this.state.Hi[i] = this.highLongBits } }