From fb687a715f1402eac7fa1a62e400f8f06110c764 Mon Sep 17 00:00:00 2001
From: muXxer <mux3r@web.de>
Date: Wed, 24 Jul 2019 21:12:18 +0200
Subject: [PATCH] Fix: bct_curl state constant too big on 32-bit systems

---
 packages/curl/batch_hasher.go |  2 +-
 packages/curl/bct_curl.go     | 15 +++++++++++----
 2 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/packages/curl/batch_hasher.go b/packages/curl/batch_hasher.go
index 51d63f20..1a4d1468 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 9a8f95fe..8a5e7a5b 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
 	}
 }
 
-- 
GitLab