From ae748eaf3f7fc584b825c130c2dfd080b6b9aa9c Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 29 Jul 2018 22:19:18 -1100 Subject: [PATCH] Endian fix --- src/cc/dice.cpp | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/cc/dice.cpp b/src/cc/dice.cpp index b54caaa24..d3be492d4 100644 --- a/src/cc/dice.cpp +++ b/src/cc/dice.cpp @@ -26,10 +26,24 @@ 2. and 3. can be done in mempool */ -uint256 DiceHashEntropy(uint256 &entropy,uint256 txidpriv) // assumes little endian CPU and max 1 vout per txid used +#include "../endian.h" + +void endiancpy(uint8_t *dest,uint8_t *src,int32_t len) { - int32_t i; bits256 tmp256,txidpub,mypriv,mypub,ssecret,ssecret2; uint256 hentropy; + int32_t i,j=0; +#if defined(WORDS_BIGENDIAN) + for (i=31; i>=0; i--) + dest[j++] = src[i]; +#else + memcpy(dest,src,len); +#endif +} + +uint256 DiceHashEntropy(uint256 &entropy,uint256 _txidpriv) // assumes little endian and max 1 vout per txid used +{ + int32_t i; uint8_t _entropy[32],_hentropy[32]; bits256 tmp256,txidpub,txidpriv,mypriv,mypub,ssecret,ssecret2; uint256 hentropy; memset(&hentropy,0,32); + endiancpy(txidpriv.bytes,&txidpriv,32); txidpriv.bytes[0] &= 0xf8, txidpriv.bytes[31] &= 0x7f, txidpriv.bytes[31] |= 0x40; txidpub = curve25519(txidpriv,curve25519_basepoint9()); @@ -42,8 +56,10 @@ uint256 DiceHashEntropy(uint256 &entropy,uint256 txidpriv) // assumes little end ssecret2 = curve25519_shared(mypub,txidpriv); if ( memcmp(ssecret.bytes,ssecret2.bytes,32) == 0 ) { - vcalc_sha256(0,(uint8_t *)&entropy,ssecret.bytes,32); - vcalc_sha256(0,(uint8_t *)&hentropy,(uint8_t *)&entropy,32); + vcalc_sha256(0,(uint8_t *)&_entropy,ssecret.bytes,32); + vcalc_sha256(0,(uint8_t *)&_hentropy,_entropy,32); + endiancpy(&entropy,_entropy,32); + endiancpy(&hentropy,_hentropy,32); } else fprintf(stderr,"shared secrets dont match\n"); return(hentropy); }