diff --git a/Makefile b/Makefile index 5bf44e43cc..8585c955ba 100755 --- a/Makefile +++ b/Makefile @@ -1,9 +1,9 @@ ############################################################################# # Makefile for building: zcoin-qt -# Generated by qmake (2.01a) (Qt 4.8.7) on: Tue Sep 27 16:44:53 2016 +# Generated by qmake (2.01a) (Qt 4.8.7) on: Wed Sep 28 03:35:43 2016 # Project: zcoin.pro # Template: app -# Command: /usr/lib/x86_64-linux-gnu/qt4/bin/qmake -o Makefile zcoin.pro +# Command: /usr/lib/x86_64-linux-gnu/qt4/bin/qmake -spec /usr/share/qt4/mkspecs/linux-g++-64 -o Makefile zcoin.pro ############################################################################# ####### Compiler, tools and options @@ -65,8 +65,6 @@ SOURCES = src/qt/bitcoin.cpp \ src/netbase.cpp \ src/key.cpp \ src/script.cpp \ - src/Lyra2.c \ - src/Sponge.c \ src/main.cpp \ src/init.cpp \ src/net.cpp \ @@ -112,6 +110,8 @@ SOURCES = src/qt/bitcoin.cpp \ src/qt/paymentserver.cpp \ src/qt/rpcconsole.cpp \ src/scrypt.cpp \ + src/Lyra2.c \ + src/Sponge.c \ src/noui.cpp \ src/leveldb.cpp \ src/txdb.cpp \ @@ -184,8 +184,6 @@ OBJECTS = build/bitcoin.o \ build/netbase.o \ build/key.o \ build/script.o \ - build/Lyra2.o \ - build/Sponge.o \ build/main.o \ build/init.o \ build/net.o \ @@ -231,6 +229,8 @@ OBJECTS = build/bitcoin.o \ build/paymentserver.o \ build/rpcconsole.o \ build/scrypt.o \ + build/Lyra2.o \ + build/Sponge.o \ build/noui.o \ build/leveldb.o \ build/txdb.o \ @@ -363,7 +363,7 @@ Makefile: zcoin.pro /usr/share/qt4/mkspecs/linux-g++-64/qmake.conf /usr/share/q /usr/lib/x86_64-linux-gnu/libQtGui.prl \ /usr/lib/x86_64-linux-gnu/libQtNetwork.prl \ /usr/lib/x86_64-linux-gnu/libQtCore.prl - $(QMAKE) -o Makefile zcoin.pro + $(QMAKE) -spec /usr/share/qt4/mkspecs/linux-g++-64 -o Makefile zcoin.pro /usr/share/qt4/mkspecs/common/unix.conf: /usr/share/qt4/mkspecs/common/linux.conf: /usr/share/qt4/mkspecs/common/gcc-base.conf: @@ -391,11 +391,11 @@ Makefile: zcoin.pro /usr/share/qt4/mkspecs/linux-g++-64/qmake.conf /usr/share/q /usr/lib/x86_64-linux-gnu/libQtNetwork.prl: /usr/lib/x86_64-linux-gnu/libQtCore.prl: qmake: FORCE - @$(QMAKE) -o Makefile zcoin.pro + @$(QMAKE) -spec /usr/share/qt4/mkspecs/linux-g++-64 -o Makefile zcoin.pro dist: @$(CHK_DIR_EXISTS) build/zcoin-qt0.8.7.1 || $(MKDIR) build/zcoin-qt0.8.7.1 - $(COPY_FILE) --parents $(SOURCES) $(DIST) build/zcoin-qt0.8.7.1/ && $(COPY_FILE) --parents src/qt/locale/bitcoin_af_ZA.ts src/qt/locale/bitcoin_ar.ts src/qt/locale/bitcoin_bg.ts src/qt/locale/bitcoin_bs.ts src/qt/locale/bitcoin_ca.ts src/qt/locale/bitcoin_ca_ES.ts src/qt/locale/bitcoin_cs.ts src/qt/locale/bitcoin_cy.ts src/qt/locale/bitcoin_da.ts src/qt/locale/bitcoin_de.ts src/qt/locale/bitcoin_el_GR.ts src/qt/locale/bitcoin_en.ts src/qt/locale/bitcoin_eo.ts src/qt/locale/bitcoin_es.ts src/qt/locale/bitcoin_es_CL.ts src/qt/locale/bitcoin_et.ts src/qt/locale/bitcoin_eu_ES.ts src/qt/locale/bitcoin_fa.ts src/qt/locale/bitcoin_fa_IR.ts src/qt/locale/bitcoin_fi.ts src/qt/locale/bitcoin_fr.ts src/qt/locale/bitcoin_fr_CA.ts src/qt/locale/bitcoin_gu_IN.ts src/qt/locale/bitcoin_he.ts src/qt/locale/bitcoin_hi_IN.ts src/qt/locale/bitcoin_hr.ts src/qt/locale/bitcoin_hu.ts src/qt/locale/bitcoin_it.ts src/qt/locale/bitcoin_ja.ts src/qt/locale/bitcoin_la.ts src/qt/locale/bitcoin_lt.ts src/qt/locale/bitcoin_lv_LV.ts src/qt/locale/bitcoin_nb.ts src/qt/locale/bitcoin_nl.ts src/qt/locale/bitcoin_pl.ts src/qt/locale/bitcoin_pt_BR.ts src/qt/locale/bitcoin_pt_PT.ts src/qt/locale/bitcoin_ro_RO.ts src/qt/locale/bitcoin_ru.ts src/qt/locale/bitcoin_sk.ts src/qt/locale/bitcoin_sr.ts src/qt/locale/bitcoin_sv.ts src/qt/locale/bitcoin_th_TH.ts src/qt/locale/bitcoin_tr.ts src/qt/locale/bitcoin_uk.ts src/qt/locale/bitcoin_zh_CN.ts src/qt/locale/bitcoin_zh_TW.ts build/zcoin-qt0.8.7.1/ && $(COPY_FILE) --parents src/qt/bitcoingui.h src/qt/transactiontablemodel.h src/qt/addresstablemodel.h src/qt/optionsdialog.h src/qt/sendcoinsdialog.h src/qt/coincontroldialog.h src/qt/coincontroltreewidget.h src/qt/addressbookpage.h src/qt/signverifymessagedialog.h src/qt/aboutdialog.h src/qt/editaddressdialog.h src/qt/bitcoinaddressvalidator.h src/auxpow.h src/alert.h src/addrman.h src/base58.h src/bignum.h src/checkpoints.h src/coincontrol.h src/compat.h src/sync.h src/util.h src/hash.h src/uint256.h src/serialize.h src/main.h src/net.h src/key.h src/db.h src/walletdb.h src/script.h src/init.h src/bloom.h src/mruset.h src/checkqueue.h src/json/json_spirit_writer_template.h src/json/json_spirit_writer.h src/json/json_spirit_value.h src/json/json_spirit_utils.h src/json/json_spirit_stream_reader.h src/json/json_spirit_reader_template.h src/json/json_spirit_reader.h src/json/json_spirit_error_position.h src/json/json_spirit.h src/qt/clientmodel.h src/qt/guiutil.h src/qt/transactionrecord.h src/qt/guiconstants.h src/qt/optionsmodel.h src/qt/monitoreddatamapper.h src/qt/transactiondesc.h src/qt/transactiondescdialog.h src/qt/bitcoinamountfield.h src/wallet.h src/keystore.h src/qt/transactionfilterproxy.h src/qt/transactionview.h src/qt/walletmodel.h src/qt/walletview.h src/qt/walletstack.h src/qt/walletframe.h src/bitcoinrpc.h src/qt/overviewpage.h src/qt/csvmodelwriter.h src/crypter.h src/qt/sendcoinsentry.h src/qt/qvalidatedlineedit.h src/qt/bitcoinunits.h src/qt/qvaluecombobox.h src/qt/askpassphrasedialog.h src/protocol.h src/qt/notificator.h src/qt/paymentserver.h src/allocators.h src/ui_interface.h src/qt/rpcconsole.h src/scrypt.h src/version.h src/netbase.h src/clientversion.h src/txdb.h src/leveldb.h src/threadsafety.h src/limitedmap.h src/qt/macnotificationhandler.h src/qt/splashscreen.h src/libzerocoin/Accumulator.h src/libzerocoin/AccumulatorProofOfKnowledge.h src/libzerocoin/Coin.h src/libzerocoin/CoinSpend.h src/libzerocoin/Commitment.h src/libzerocoin/ParamGeneration.h src/libzerocoin/Params.h src/libzerocoin/SerialNumberSignatureOfKnowledge.h src/libzerocoin/SpendMetaData.h src/libzerocoin/Zerocoin.h src/Lyra2.h src/Sponge.h build/zcoin-qt0.8.7.1/ && $(COPY_FILE) --parents src/qt/bitcoin.qrc build/zcoin-qt0.8.7.1/ && $(COPY_FILE) --parents src/qt/bitcoin.cpp src/qt/bitcoingui.cpp src/qt/transactiontablemodel.cpp src/qt/addresstablemodel.cpp src/qt/optionsdialog.cpp src/qt/sendcoinsdialog.cpp src/qt/coincontroldialog.cpp src/qt/coincontroltreewidget.cpp src/qt/addressbookpage.cpp src/qt/signverifymessagedialog.cpp src/qt/aboutdialog.cpp src/qt/editaddressdialog.cpp src/qt/bitcoinaddressvalidator.cpp src/auxpow.cpp src/alert.cpp src/version.cpp src/sync.cpp src/util.cpp src/hash.cpp src/netbase.cpp src/key.cpp src/script.cpp src/Lyra2.c src/Sponge.c src/main.cpp src/init.cpp src/net.cpp src/bloom.cpp src/checkpoints.cpp src/addrman.cpp src/db.cpp src/walletdb.cpp src/qt/clientmodel.cpp src/qt/guiutil.cpp src/qt/transactionrecord.cpp src/qt/optionsmodel.cpp src/qt/monitoreddatamapper.cpp src/qt/transactiondesc.cpp src/qt/transactiondescdialog.cpp src/qt/bitcoinstrings.cpp src/qt/bitcoinamountfield.cpp src/wallet.cpp src/keystore.cpp src/qt/transactionfilterproxy.cpp src/qt/transactionview.cpp src/qt/walletmodel.cpp src/qt/walletview.cpp src/qt/walletstack.cpp src/qt/walletframe.cpp src/bitcoinrpc.cpp src/rpcdump.cpp src/rpcnet.cpp src/rpcmining.cpp src/rpcwallet.cpp src/rpcblockchain.cpp src/rpcrawtransaction.cpp src/qt/overviewpage.cpp src/qt/csvmodelwriter.cpp src/crypter.cpp src/qt/sendcoinsentry.cpp src/qt/qvalidatedlineedit.cpp src/qt/bitcoinunits.cpp src/qt/qvaluecombobox.cpp src/qt/askpassphrasedialog.cpp src/protocol.cpp src/qt/notificator.cpp src/qt/paymentserver.cpp src/qt/rpcconsole.cpp src/scrypt.cpp src/noui.cpp src/leveldb.cpp src/txdb.cpp src/qt/splashscreen.cpp src/libzerocoin/Accumulator.cpp src/libzerocoin/AccumulatorProofOfKnowledge.cpp src/libzerocoin/Coin.cpp src/libzerocoin/CoinSpend.cpp src/libzerocoin/Commitment.cpp src/libzerocoin/ParamGeneration.cpp src/libzerocoin/Params.cpp src/libzerocoin/SerialNumberSignatureOfKnowledge.cpp src/libzerocoin/SpendMetaData.cpp build/zcoin-qt0.8.7.1/ && $(COPY_FILE) --parents src/qt/forms/sendcoinsdialog.ui src/qt/forms/coincontroldialog.ui src/qt/forms/addressbookpage.ui src/qt/forms/signverifymessagedialog.ui src/qt/forms/aboutdialog.ui src/qt/forms/editaddressdialog.ui src/qt/forms/transactiondescdialog.ui src/qt/forms/overviewpage.ui src/qt/forms/sendcoinsentry.ui src/qt/forms/askpassphrasedialog.ui src/qt/forms/rpcconsole.ui src/qt/forms/optionsdialog.ui build/zcoin-qt0.8.7.1/ && $(COPY_FILE) --parents src/qt/locale/bitcoin_af_ZA.ts src/qt/locale/bitcoin_ar.ts src/qt/locale/bitcoin_bg.ts src/qt/locale/bitcoin_bs.ts src/qt/locale/bitcoin_ca.ts src/qt/locale/bitcoin_ca_ES.ts src/qt/locale/bitcoin_cs.ts src/qt/locale/bitcoin_cy.ts src/qt/locale/bitcoin_da.ts src/qt/locale/bitcoin_de.ts src/qt/locale/bitcoin_el_GR.ts src/qt/locale/bitcoin_en.ts src/qt/locale/bitcoin_eo.ts src/qt/locale/bitcoin_es.ts src/qt/locale/bitcoin_es_CL.ts src/qt/locale/bitcoin_et.ts src/qt/locale/bitcoin_eu_ES.ts src/qt/locale/bitcoin_fa.ts src/qt/locale/bitcoin_fa_IR.ts src/qt/locale/bitcoin_fi.ts src/qt/locale/bitcoin_fr.ts src/qt/locale/bitcoin_fr_CA.ts src/qt/locale/bitcoin_gu_IN.ts src/qt/locale/bitcoin_he.ts src/qt/locale/bitcoin_hi_IN.ts src/qt/locale/bitcoin_hr.ts src/qt/locale/bitcoin_hu.ts src/qt/locale/bitcoin_it.ts src/qt/locale/bitcoin_ja.ts src/qt/locale/bitcoin_la.ts src/qt/locale/bitcoin_lt.ts src/qt/locale/bitcoin_lv_LV.ts src/qt/locale/bitcoin_nb.ts src/qt/locale/bitcoin_nl.ts src/qt/locale/bitcoin_pl.ts src/qt/locale/bitcoin_pt_BR.ts src/qt/locale/bitcoin_pt_PT.ts src/qt/locale/bitcoin_ro_RO.ts src/qt/locale/bitcoin_ru.ts src/qt/locale/bitcoin_sk.ts src/qt/locale/bitcoin_sr.ts src/qt/locale/bitcoin_sv.ts src/qt/locale/bitcoin_th_TH.ts src/qt/locale/bitcoin_tr.ts src/qt/locale/bitcoin_uk.ts src/qt/locale/bitcoin_zh_CN.ts src/qt/locale/bitcoin_zh_TW.ts build/zcoin-qt0.8.7.1/ && (cd `dirname build/zcoin-qt0.8.7.1` && $(TAR) zcoin-qt0.8.7.1.tar zcoin-qt0.8.7.1 && $(COMPRESS) zcoin-qt0.8.7.1.tar) && $(MOVE) `dirname build/zcoin-qt0.8.7.1`/zcoin-qt0.8.7.1.tar.gz . && $(DEL_FILE) -r build/zcoin-qt0.8.7.1 + $(COPY_FILE) --parents $(SOURCES) $(DIST) build/zcoin-qt0.8.7.1/ && $(COPY_FILE) --parents src/qt/locale/bitcoin_af_ZA.ts src/qt/locale/bitcoin_ar.ts src/qt/locale/bitcoin_bg.ts src/qt/locale/bitcoin_bs.ts src/qt/locale/bitcoin_ca.ts src/qt/locale/bitcoin_ca_ES.ts src/qt/locale/bitcoin_cs.ts src/qt/locale/bitcoin_cy.ts src/qt/locale/bitcoin_da.ts src/qt/locale/bitcoin_de.ts src/qt/locale/bitcoin_el_GR.ts src/qt/locale/bitcoin_en.ts src/qt/locale/bitcoin_eo.ts src/qt/locale/bitcoin_es.ts src/qt/locale/bitcoin_es_CL.ts src/qt/locale/bitcoin_et.ts src/qt/locale/bitcoin_eu_ES.ts src/qt/locale/bitcoin_fa.ts src/qt/locale/bitcoin_fa_IR.ts src/qt/locale/bitcoin_fi.ts src/qt/locale/bitcoin_fr.ts src/qt/locale/bitcoin_fr_CA.ts src/qt/locale/bitcoin_gu_IN.ts src/qt/locale/bitcoin_he.ts src/qt/locale/bitcoin_hi_IN.ts src/qt/locale/bitcoin_hr.ts src/qt/locale/bitcoin_hu.ts src/qt/locale/bitcoin_it.ts src/qt/locale/bitcoin_ja.ts src/qt/locale/bitcoin_la.ts src/qt/locale/bitcoin_lt.ts src/qt/locale/bitcoin_lv_LV.ts src/qt/locale/bitcoin_nb.ts src/qt/locale/bitcoin_nl.ts src/qt/locale/bitcoin_pl.ts src/qt/locale/bitcoin_pt_BR.ts src/qt/locale/bitcoin_pt_PT.ts src/qt/locale/bitcoin_ro_RO.ts src/qt/locale/bitcoin_ru.ts src/qt/locale/bitcoin_sk.ts src/qt/locale/bitcoin_sr.ts src/qt/locale/bitcoin_sv.ts src/qt/locale/bitcoin_th_TH.ts src/qt/locale/bitcoin_tr.ts src/qt/locale/bitcoin_uk.ts src/qt/locale/bitcoin_zh_CN.ts src/qt/locale/bitcoin_zh_TW.ts build/zcoin-qt0.8.7.1/ && $(COPY_FILE) --parents src/qt/bitcoingui.h src/qt/transactiontablemodel.h src/qt/addresstablemodel.h src/qt/optionsdialog.h src/qt/sendcoinsdialog.h src/qt/coincontroldialog.h src/qt/coincontroltreewidget.h src/qt/addressbookpage.h src/qt/signverifymessagedialog.h src/qt/aboutdialog.h src/qt/editaddressdialog.h src/qt/bitcoinaddressvalidator.h src/auxpow.h src/alert.h src/addrman.h src/base58.h src/bignum.h src/checkpoints.h src/coincontrol.h src/compat.h src/sync.h src/util.h src/hash.h src/uint256.h src/serialize.h src/main.h src/net.h src/key.h src/db.h src/walletdb.h src/script.h src/init.h src/bloom.h src/mruset.h src/checkqueue.h src/json/json_spirit_writer_template.h src/json/json_spirit_writer.h src/json/json_spirit_value.h src/json/json_spirit_utils.h src/json/json_spirit_stream_reader.h src/json/json_spirit_reader_template.h src/json/json_spirit_reader.h src/json/json_spirit_error_position.h src/json/json_spirit.h src/qt/clientmodel.h src/qt/guiutil.h src/qt/transactionrecord.h src/qt/guiconstants.h src/qt/optionsmodel.h src/qt/monitoreddatamapper.h src/qt/transactiondesc.h src/qt/transactiondescdialog.h src/qt/bitcoinamountfield.h src/wallet.h src/keystore.h src/qt/transactionfilterproxy.h src/qt/transactionview.h src/qt/walletmodel.h src/qt/walletview.h src/qt/walletstack.h src/qt/walletframe.h src/bitcoinrpc.h src/qt/overviewpage.h src/qt/csvmodelwriter.h src/crypter.h src/qt/sendcoinsentry.h src/qt/qvalidatedlineedit.h src/qt/bitcoinunits.h src/qt/qvaluecombobox.h src/qt/askpassphrasedialog.h src/protocol.h src/qt/notificator.h src/qt/paymentserver.h src/allocators.h src/ui_interface.h src/qt/rpcconsole.h src/scrypt.h src/Lyra2.h src/Sponge.h src/version.h src/netbase.h src/clientversion.h src/txdb.h src/leveldb.h src/threadsafety.h src/limitedmap.h src/qt/macnotificationhandler.h src/qt/splashscreen.h src/libzerocoin/Accumulator.h src/libzerocoin/AccumulatorProofOfKnowledge.h src/libzerocoin/Coin.h src/libzerocoin/CoinSpend.h src/libzerocoin/Commitment.h src/libzerocoin/ParamGeneration.h src/libzerocoin/Params.h src/libzerocoin/SerialNumberSignatureOfKnowledge.h src/libzerocoin/SpendMetaData.h src/libzerocoin/Zerocoin.h build/zcoin-qt0.8.7.1/ && $(COPY_FILE) --parents src/qt/bitcoin.qrc build/zcoin-qt0.8.7.1/ && $(COPY_FILE) --parents src/qt/bitcoin.cpp src/qt/bitcoingui.cpp src/qt/transactiontablemodel.cpp src/qt/addresstablemodel.cpp src/qt/optionsdialog.cpp src/qt/sendcoinsdialog.cpp src/qt/coincontroldialog.cpp src/qt/coincontroltreewidget.cpp src/qt/addressbookpage.cpp src/qt/signverifymessagedialog.cpp src/qt/aboutdialog.cpp src/qt/editaddressdialog.cpp src/qt/bitcoinaddressvalidator.cpp src/auxpow.cpp src/alert.cpp src/version.cpp src/sync.cpp src/util.cpp src/hash.cpp src/netbase.cpp src/key.cpp src/script.cpp src/main.cpp src/init.cpp src/net.cpp src/bloom.cpp src/checkpoints.cpp src/addrman.cpp src/db.cpp src/walletdb.cpp src/qt/clientmodel.cpp src/qt/guiutil.cpp src/qt/transactionrecord.cpp src/qt/optionsmodel.cpp src/qt/monitoreddatamapper.cpp src/qt/transactiondesc.cpp src/qt/transactiondescdialog.cpp src/qt/bitcoinstrings.cpp src/qt/bitcoinamountfield.cpp src/wallet.cpp src/keystore.cpp src/qt/transactionfilterproxy.cpp src/qt/transactionview.cpp src/qt/walletmodel.cpp src/qt/walletview.cpp src/qt/walletstack.cpp src/qt/walletframe.cpp src/bitcoinrpc.cpp src/rpcdump.cpp src/rpcnet.cpp src/rpcmining.cpp src/rpcwallet.cpp src/rpcblockchain.cpp src/rpcrawtransaction.cpp src/qt/overviewpage.cpp src/qt/csvmodelwriter.cpp src/crypter.cpp src/qt/sendcoinsentry.cpp src/qt/qvalidatedlineedit.cpp src/qt/bitcoinunits.cpp src/qt/qvaluecombobox.cpp src/qt/askpassphrasedialog.cpp src/protocol.cpp src/qt/notificator.cpp src/qt/paymentserver.cpp src/qt/rpcconsole.cpp src/scrypt.cpp src/Lyra2.c src/Sponge.c src/noui.cpp src/leveldb.cpp src/txdb.cpp src/qt/splashscreen.cpp src/libzerocoin/Accumulator.cpp src/libzerocoin/AccumulatorProofOfKnowledge.cpp src/libzerocoin/Coin.cpp src/libzerocoin/CoinSpend.cpp src/libzerocoin/Commitment.cpp src/libzerocoin/ParamGeneration.cpp src/libzerocoin/Params.cpp src/libzerocoin/SerialNumberSignatureOfKnowledge.cpp src/libzerocoin/SpendMetaData.cpp build/zcoin-qt0.8.7.1/ && $(COPY_FILE) --parents src/qt/forms/sendcoinsdialog.ui src/qt/forms/coincontroldialog.ui src/qt/forms/addressbookpage.ui src/qt/forms/signverifymessagedialog.ui src/qt/forms/aboutdialog.ui src/qt/forms/editaddressdialog.ui src/qt/forms/transactiondescdialog.ui src/qt/forms/overviewpage.ui src/qt/forms/sendcoinsentry.ui src/qt/forms/askpassphrasedialog.ui src/qt/forms/rpcconsole.ui src/qt/forms/optionsdialog.ui build/zcoin-qt0.8.7.1/ && $(COPY_FILE) --parents src/qt/locale/bitcoin_af_ZA.ts src/qt/locale/bitcoin_ar.ts src/qt/locale/bitcoin_bg.ts src/qt/locale/bitcoin_bs.ts src/qt/locale/bitcoin_ca.ts src/qt/locale/bitcoin_ca_ES.ts src/qt/locale/bitcoin_cs.ts src/qt/locale/bitcoin_cy.ts src/qt/locale/bitcoin_da.ts src/qt/locale/bitcoin_de.ts src/qt/locale/bitcoin_el_GR.ts src/qt/locale/bitcoin_en.ts src/qt/locale/bitcoin_eo.ts src/qt/locale/bitcoin_es.ts src/qt/locale/bitcoin_es_CL.ts src/qt/locale/bitcoin_et.ts src/qt/locale/bitcoin_eu_ES.ts src/qt/locale/bitcoin_fa.ts src/qt/locale/bitcoin_fa_IR.ts src/qt/locale/bitcoin_fi.ts src/qt/locale/bitcoin_fr.ts src/qt/locale/bitcoin_fr_CA.ts src/qt/locale/bitcoin_gu_IN.ts src/qt/locale/bitcoin_he.ts src/qt/locale/bitcoin_hi_IN.ts src/qt/locale/bitcoin_hr.ts src/qt/locale/bitcoin_hu.ts src/qt/locale/bitcoin_it.ts src/qt/locale/bitcoin_ja.ts src/qt/locale/bitcoin_la.ts src/qt/locale/bitcoin_lt.ts src/qt/locale/bitcoin_lv_LV.ts src/qt/locale/bitcoin_nb.ts src/qt/locale/bitcoin_nl.ts src/qt/locale/bitcoin_pl.ts src/qt/locale/bitcoin_pt_BR.ts src/qt/locale/bitcoin_pt_PT.ts src/qt/locale/bitcoin_ro_RO.ts src/qt/locale/bitcoin_ru.ts src/qt/locale/bitcoin_sk.ts src/qt/locale/bitcoin_sr.ts src/qt/locale/bitcoin_sv.ts src/qt/locale/bitcoin_th_TH.ts src/qt/locale/bitcoin_tr.ts src/qt/locale/bitcoin_uk.ts src/qt/locale/bitcoin_zh_CN.ts src/qt/locale/bitcoin_zh_TW.ts build/zcoin-qt0.8.7.1/ && (cd `dirname build/zcoin-qt0.8.7.1` && $(TAR) zcoin-qt0.8.7.1.tar zcoin-qt0.8.7.1 && $(COMPRESS) zcoin-qt0.8.7.1.tar) && $(MOVE) `dirname build/zcoin-qt0.8.7.1`/zcoin-qt0.8.7.1.tar.gz . && $(DEL_FILE) -r build/zcoin-qt0.8.7.1 clean:compiler_clean @@ -1039,6 +1039,9 @@ build/addresstablemodel.o: src/qt/addresstablemodel.cpp src/qt/addresstablemodel build/optionsdialog.o: src/qt/optionsdialog.cpp src/qt/optionsdialog.h \ build/ui_optionsdialog.h \ + src/qt/bitcoinamountfield.h \ + src/qt/qvalidatedlineedit.h \ + src/qt/qvaluecombobox.h \ src/qt/bitcoinunits.h \ src/qt/monitoreddatamapper.h \ src/netbase.h \ @@ -1107,6 +1110,7 @@ build/sendcoinsdialog.o: src/qt/sendcoinsdialog.cpp src/qt/sendcoinsdialog.h \ build/coincontroldialog.o: src/qt/coincontroldialog.cpp src/qt/coincontroldialog.h \ build/ui_coincontroldialog.h \ + src/qt/coincontroltreewidget.h \ src/init.h \ src/wallet.h \ src/main.h \ @@ -1173,6 +1177,7 @@ build/addressbookpage.o: src/qt/addressbookpage.cpp src/qt/addressbookpage.h \ build/signverifymessagedialog.o: src/qt/signverifymessagedialog.cpp src/qt/signverifymessagedialog.h \ build/ui_signverifymessagedialog.h \ + src/qt/qvalidatedlineedit.h \ src/qt/addressbookpage.h \ src/base58.h \ src/bignum.h \ @@ -1399,14 +1404,6 @@ build/script.o: src/script.cpp src/script.h \ src/db.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/script.o src/script.cpp -build/Lyra2.o: src/Lyra2.c src/Lyra2.h \ - src/Sponge.h - $(CC) -c $(CFLAGS) $(INCPATH) -o build/Lyra2.o src/Lyra2.c - -build/Sponge.o: src/Sponge.c src/Sponge.h \ - src/Lyra2.h - $(CC) -c $(CFLAGS) $(INCPATH) -o build/Sponge.o src/Sponge.c - build/main.o: src/main.cpp src/alert.h \ src/uint256.h \ src/util.h \ @@ -2474,6 +2471,8 @@ build/crypter.o: src/crypter.cpp src/crypter.h \ build/sendcoinsentry.o: src/qt/sendcoinsentry.cpp src/qt/sendcoinsentry.h \ build/ui_sendcoinsentry.h \ + src/qt/bitcoinamountfield.h \ + src/qt/qvalidatedlineedit.h \ src/qt/guiutil.h \ src/qt/bitcoinunits.h \ src/qt/addressbookpage.h \ @@ -2587,6 +2586,14 @@ build/scrypt.o: src/scrypt.cpp src/scrypt.h \ src/compat.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/scrypt.o src/scrypt.cpp +build/Lyra2.o: src/Lyra2.c src/Lyra2.h \ + src/Sponge.h + $(CC) -c $(CFLAGS) $(INCPATH) -o build/Lyra2.o src/Lyra2.c + +build/Sponge.o: src/Sponge.c src/Sponge.h \ + src/Lyra2.h + $(CC) -c $(CFLAGS) $(INCPATH) -o build/Sponge.o src/Sponge.c + build/noui.o: src/noui.cpp src/ui_interface.h \ src/util.h \ src/uint256.h \ diff --git a/src/Lyra2.c b/src/Lyra2.c index 740d4bd8b7..ac8a13d0d4 100755 --- a/src/Lyra2.c +++ b/src/Lyra2.c @@ -24,9 +24,6 @@ #include "Lyra2.h" #include "Sponge.h" - - - /** * Executes Lyra2 based on the G function from Blake2b. This version supports salts and passwords * whose combined length is smaller than the size of the memory matrix, (i.e., (nRows x nCols x b) bits, @@ -71,7 +68,7 @@ int LYRA2(void *K, uint64_t kLen, const void *pwd, uint64_t pwdlen, const void * if (wholeMatrix == NULL) { return -1; } - memset(wholeMatrix, 0, i); + memset(wholeMatrix, 0, i); //Allocates pointers to each row of the matrix uint64_t **memMatrix = malloc(nRows * sizeof (uint64_t*)); @@ -138,7 +135,7 @@ int LYRA2(void *K, uint64_t kLen, const void *pwd, uint64_t pwdlen, const void * ptrWord = wholeMatrix; for (i = 0; i < nBlocksInput; i++) { absorbBlockBlake2Safe(state, ptrWord); //absorbs each block of pad(pwd || salt || basil) - ptrWord += BLOCK_LEN_BLAKE2_SAFE_BYTES; //goes to next block of pad(pwd || salt || basil) + ptrWord += BLOCK_LEN_BLAKE2_SAFE_INT64; //goes to next block of pad(pwd || salt || basil) } //Initializes M[0] and M[1] @@ -170,26 +167,26 @@ int LYRA2(void *K, uint64_t kLen, const void *pwd, uint64_t pwdlen, const void * //============================ Wandering Phase =============================// row = 0; //Resets the visitation to the first row of the memory matrix for (tau = 1; tau <= timeCost; tau++) { - //Step is approximately half the number of all rows of the memory matrix for an odd tau; otherwise, it is -1 - step = (tau % 2 == 0) ? -1 : nRows / 2 - 1; - do { - //Selects a pseudorandom index row* - //------------------------------------------------------------------------------------------ - //rowa = ((unsigned int)state[0]) & (nRows-1); //(USE THIS IF nRows IS A POWER OF 2) - rowa = ((uint64_t) (state[0])) % nRows; //(USE THIS FOR THE "GENERIC" CASE) - //------------------------------------------------------------------------------------------ - - //Performs a reduced-round duplexing operation over M[row*] XOR M[prev], updating both M[row*] and M[row] - reducedDuplexRow(state, memMatrix[prev], memMatrix[rowa], memMatrix[row], nCols); - - //update prev: it now points to the last row ever computed - prev = row; - - //updates row: goes to the next row to be computed - //------------------------------------------------------------------------------------------ - //row = (row + step) & (nRows-1); //(USE THIS IF nRows IS A POWER OF 2) - row = (row + step) % nRows; //(USE THIS FOR THE "GENERIC" CASE) - //------------------------------------------------------------------------------------------ + //Step is approximately half the number of all rows of the memory matrix for an odd tau; otherwise, it is -1 + step = (tau % 2 == 0) ? -1 : nRows / 2 - 1; + do { + //Selects a pseudorandom index row* + //------------------------------------------------------------------------------------------ + //rowa = ((unsigned int)state[0]) & (nRows-1); //(USE THIS IF nRows IS A POWER OF 2) + rowa = ((uint64_t) (state[0])) % nRows; //(USE THIS FOR THE "GENERIC" CASE) + //------------------------------------------------------------------------------------------ + + //Performs a reduced-round duplexing operation over M[row*] XOR M[prev], updating both M[row*] and M[row] + reducedDuplexRow(state, memMatrix[prev], memMatrix[rowa], memMatrix[row], nCols); + + //update prev: it now points to the last row ever computed + prev = row; + + //updates row: goes to the next row to be computed + //------------------------------------------------------------------------------------------ + //row = (row + step) & (nRows-1); //(USE THIS IF nRows IS A POWER OF 2) + row = (row + step) % nRows; //(USE THIS FOR THE "GENERIC" CASE) + //------------------------------------------------------------------------------------------ } while (row != 0); } @@ -215,9 +212,171 @@ int LYRA2(void *K, uint64_t kLen, const void *pwd, uint64_t pwdlen, const void * return 0; } -void lyra2_hash(const char* input, char* output) -{ - uint32_t hashA[8]; - LYRA2(hashA, 32, input, 80, input, 80, 1, 4, 4); - memcpy(output, hashA, 32); +int LYRA2_old(void *K, uint64_t kLen, const void *pwd, uint64_t pwdlen, const void *salt, uint64_t saltlen, uint64_t timeCost, uint64_t nRows, uint64_t nCols) { + + //============================= Basic variables ============================// + int64_t row = 2; //index of row to be processed + int64_t prev = 1; //index of prev (last row ever computed/modified) + int64_t rowa = 0; //index of row* (a previous row, deterministically picked during Setup and randomly picked while Wandering) + int64_t tau; //Time Loop iterator + int64_t step = 1; //Visitation step (used during Setup and Wandering phases) + int64_t window = 2; //Visitation window (used to define which rows can be revisited during Setup) + int64_t gap = 1; //Modifier to the step, assuming the values 1 or -1 + int64_t i; //auxiliary iteration counter + //==========================================================================/ + + //========== Initializing the Memory Matrix and pointers to it =============// + //Tries to allocate enough space for the whole memory matrix + + + const int64_t ROW_LEN_INT64 = BLOCK_LEN_INT64 * nCols; + const int64_t ROW_LEN_BYTES = ROW_LEN_INT64 * 8; + + i = (int64_t) ((int64_t) nRows * (int64_t) ROW_LEN_BYTES); + uint64_t *wholeMatrix = malloc(i); + if (wholeMatrix == NULL) { + return -1; + } + memset(wholeMatrix, 0, i); + + //Allocates pointers to each row of the matrix + uint64_t **memMatrix = malloc(nRows * sizeof (uint64_t*)); + if (memMatrix == NULL) { + return -1; + } + //Places the pointers in the correct positions + uint64_t *ptrWord = wholeMatrix; + for (i = 0; i < nRows; i++) { + memMatrix[i] = ptrWord; + ptrWord += ROW_LEN_INT64; + } + //==========================================================================/ + + //============= Getting the password + salt + basil padded with 10*1 ===============// + //OBS.:The memory matrix will temporarily hold the password: not for saving memory, + //but this ensures that the password copied locally will be overwritten as soon as possible + + //First, we clean enough blocks for the password, salt, basil and padding + uint64_t nBlocksInput = ((saltlen + pwdlen + 6 * sizeof (uint64_t)) / BLOCK_LEN_BLAKE2_SAFE_BYTES) + 1; + byte *ptrByte = (byte*) wholeMatrix; + memset(ptrByte, 0, nBlocksInput * BLOCK_LEN_BLAKE2_SAFE_BYTES); + + //Prepends the password + memcpy(ptrByte, pwd, pwdlen); + ptrByte += pwdlen; + + //Concatenates the salt + memcpy(ptrByte, salt, saltlen); + ptrByte += saltlen; + + //Concatenates the basil: every integer passed as parameter, in the order they are provided by the interface + memcpy(ptrByte, &kLen, sizeof (uint64_t)); + ptrByte += sizeof (uint64_t); + memcpy(ptrByte, &pwdlen, sizeof (uint64_t)); + ptrByte += sizeof (uint64_t); + memcpy(ptrByte, &saltlen, sizeof (uint64_t)); + ptrByte += sizeof (uint64_t); + memcpy(ptrByte, &timeCost, sizeof (uint64_t)); + ptrByte += sizeof (uint64_t); + memcpy(ptrByte, &nRows, sizeof (uint64_t)); + ptrByte += sizeof (uint64_t); + memcpy(ptrByte, &nCols, sizeof (uint64_t)); + ptrByte += sizeof (uint64_t); + + //Now comes the padding + *ptrByte = 0x80; //first byte of padding: right after the password + ptrByte = (byte*) wholeMatrix; //resets the pointer to the start of the memory matrix + ptrByte += nBlocksInput * BLOCK_LEN_BLAKE2_SAFE_BYTES - 1; //sets the pointer to the correct position: end of incomplete block + *ptrByte ^= 0x01; //last byte of padding: at the end of the last incomplete block + //==========================================================================/ + + //======================= Initializing the Sponge State ====================// + //Sponge state: 16 uint64_t, BLOCK_LEN_INT64 words of them for the bitrate (b) and the remainder for the capacity (c) + uint64_t *state = malloc(16 * sizeof (uint64_t)); + if (state == NULL) { + return -1; + } + initState(state); + //==========================================================================/ + + //================================ Setup Phase =============================// + //Absorbing salt, password and basil: this is the only place in which the block length is hard-coded to 512 bits + ptrWord = wholeMatrix; + for (i = 0; i < nBlocksInput; i++) { + absorbBlockBlake2Safe(state, ptrWord); //absorbs each block of pad(pwd || salt || basil) + ptrWord += BLOCK_LEN_BLAKE2_SAFE_BYTES; //goes to next block of pad(pwd || salt || basil) + } + + //Initializes M[0] and M[1] + reducedSqueezeRow0(state, memMatrix[0], nCols); //The locally copied password is most likely overwritten here + reducedDuplexRow1(state, memMatrix[0], memMatrix[1], nCols); + + do { + //M[row] = rand; //M[row*] = M[row*] XOR rotW(rand) + reducedDuplexRowSetup(state, memMatrix[prev], memMatrix[rowa], memMatrix[row], nCols); + + + //updates the value of row* (deterministically picked during Setup)) + rowa = (rowa + step) & (window - 1); + //update prev: it now points to the last row ever computed + prev = row; + //updates row: goes to the next row to be computed + row++; + + //Checks if all rows in the window where visited. + if (rowa == 0) { + step = window + gap; //changes the step: approximately doubles its value + window *= 2; //doubles the size of the re-visitation window + gap = -gap; //inverts the modifier to the step + } + + } while (row < nRows); + //==========================================================================/ + + //============================ Wandering Phase =============================// + row = 0; //Resets the visitation to the first row of the memory matrix + for (tau = 1; tau <= timeCost; tau++) { + //Step is approximately half the number of all rows of the memory matrix for an odd tau; otherwise, it is -1 + step = (tau % 2 == 0) ? -1 : nRows / 2 - 1; + do { + //Selects a pseudorandom index row* + //------------------------------------------------------------------------------------------ + //rowa = ((unsigned int)state[0]) & (nRows-1); //(USE THIS IF nRows IS A POWER OF 2) + rowa = ((uint64_t) (state[0])) % nRows; //(USE THIS FOR THE "GENERIC" CASE) + //------------------------------------------------------------------------------------------ + + //Performs a reduced-round duplexing operation over M[row*] XOR M[prev], updating both M[row*] and M[row] + reducedDuplexRow(state, memMatrix[prev], memMatrix[rowa], memMatrix[row], nCols); + + //update prev: it now points to the last row ever computed + prev = row; + + //updates row: goes to the next row to be computed + //------------------------------------------------------------------------------------------ + //row = (row + step) & (nRows-1); //(USE THIS IF nRows IS A POWER OF 2) + row = (row + step) % nRows; //(USE THIS FOR THE "GENERIC" CASE) + //------------------------------------------------------------------------------------------ + + } while (row != 0); + } + //==========================================================================/ + + //============================ Wrap-up Phase ===============================// + //Absorbs the last block of the memory matrix + absorbBlock(state, memMatrix[rowa]); + + //Squeezes the key + squeeze(state, K, kLen); + //==========================================================================/ + + //========================= Freeing the memory =============================// + free(memMatrix); + free(wholeMatrix); + + //Wiping out the sponge's internal state before freeing it + memset(state, 0, 16 * sizeof (uint64_t)); + free(state); + //==========================================================================/ + + return 0; } diff --git a/src/Lyra2.h b/src/Lyra2.h index 33dbdddfe7..581196327e 100755 --- a/src/Lyra2.h +++ b/src/Lyra2.h @@ -22,16 +22,6 @@ #include -#ifdef __cplusplus -extern "C" { -#endif - -void lyra2_hash(const char* input, char* output); - -#ifdef __cplusplus -} -#endif - typedef unsigned char byte; //Block length required so Blake2's Initialization Vector (IV) is not overwritten (THIS SHOULD NOT BE MODIFIED) @@ -47,6 +37,17 @@ typedef unsigned char byte; #define BLOCK_LEN_BYTES (BLOCK_LEN_INT64 * 8) //Block length, in bytes #endif -int LYRA2(void *K, uint64_t kLen, const void *pwd, uint64_t pwdlen, const void *salt, uint64_t saltlen, uint64_t timeCost, uint64_t nRows, uint64_t nCols); +#ifdef __cplusplus +extern "C" { +#endif + + int LYRA2(void *K, uint64_t kLen, const void *pwd, uint64_t pwdlen, const void *salt, uint64_t saltlen, uint64_t timeCost, uint64_t nRows, uint64_t nCols); + +#ifdef __cplusplus +} + +int LYRA2_old(void *K, uint64_t kLen, const void *pwd, uint64_t pwdlen, const void *salt, uint64_t saltlen, uint64_t timeCost, uint64_t nRows, uint64_t nCols); + +#endif #endif /* LYRA2_H_ */ diff --git a/src/Sponge.c b/src/Sponge.c index 8ece6f99d1..5efd5b1bbf 100755 --- a/src/Sponge.c +++ b/src/Sponge.c @@ -93,9 +93,9 @@ inline void squeeze(uint64_t *state, byte *out, unsigned int len) { int i; //Squeezes full blocks for (i = 0; i < fullBlocks; i++) { - memcpy(ptr, state, BLOCK_LEN_BYTES); - blake2bLyra(state); - ptr += BLOCK_LEN_BYTES; + memcpy(ptr, state, BLOCK_LEN_BYTES); + blake2bLyra(state); + ptr += BLOCK_LEN_BYTES; } //Squeezes remaining bytes @@ -138,7 +138,7 @@ inline void absorbBlock(uint64_t *state, const uint64_t *in) { inline void absorbBlockBlake2Safe(uint64_t *state, const uint64_t *in) { //XORs the first BLOCK_LEN_BLAKE2_SAFE_INT64 words of "in" with the current state - state[0] ^= in[0]; + state[0] ^= in[0]; state[1] ^= in[1]; state[2] ^= in[2]; state[3] ^= in[3]; @@ -166,24 +166,24 @@ inline void reducedSqueezeRow0(uint64_t* state, uint64_t* rowOut, uint64_t nCols int i; //M[row][C-1-col] = H.reduced_squeeze() for (i = 0; i < nCols; i++) { - ptrWord[0] = state[0]; - ptrWord[1] = state[1]; - ptrWord[2] = state[2]; - ptrWord[3] = state[3]; - ptrWord[4] = state[4]; - ptrWord[5] = state[5]; - ptrWord[6] = state[6]; - ptrWord[7] = state[7]; - ptrWord[8] = state[8]; - ptrWord[9] = state[9]; - ptrWord[10] = state[10]; - ptrWord[11] = state[11]; - - //Goes to next block (column) that will receive the squeezed data - ptrWord -= BLOCK_LEN_INT64; - - //Applies the reduced-round transformation f to the sponge's state - reducedBlake2bLyra(state); + ptrWord[0] = state[0]; + ptrWord[1] = state[1]; + ptrWord[2] = state[2]; + ptrWord[3] = state[3]; + ptrWord[4] = state[4]; + ptrWord[5] = state[5]; + ptrWord[6] = state[6]; + ptrWord[7] = state[7]; + ptrWord[8] = state[8]; + ptrWord[9] = state[9]; + ptrWord[10] = state[10]; + ptrWord[11] = state[11]; + + //Goes to next block (column) that will receive the squeezed data + ptrWord -= BLOCK_LEN_INT64; + + //Applies the reduced-round transformation f to the sponge's state + reducedBlake2bLyra(state); } } @@ -203,42 +203,42 @@ inline void reducedDuplexRow1(uint64_t *state, uint64_t *rowIn, uint64_t *rowOut for (i = 0; i < nCols; i++) { - //Absorbing "M[prev][col]" - state[0] ^= (ptrWordIn[0]); - state[1] ^= (ptrWordIn[1]); - state[2] ^= (ptrWordIn[2]); - state[3] ^= (ptrWordIn[3]); - state[4] ^= (ptrWordIn[4]); - state[5] ^= (ptrWordIn[5]); - state[6] ^= (ptrWordIn[6]); - state[7] ^= (ptrWordIn[7]); - state[8] ^= (ptrWordIn[8]); - state[9] ^= (ptrWordIn[9]); - state[10] ^= (ptrWordIn[10]); - state[11] ^= (ptrWordIn[11]); - - //Applies the reduced-round transformation f to the sponge's state - reducedBlake2bLyra(state); - - //M[row][C-1-col] = M[prev][col] XOR rand - ptrWordOut[0] = ptrWordIn[0] ^ state[0]; - ptrWordOut[1] = ptrWordIn[1] ^ state[1]; - ptrWordOut[2] = ptrWordIn[2] ^ state[2]; - ptrWordOut[3] = ptrWordIn[3] ^ state[3]; - ptrWordOut[4] = ptrWordIn[4] ^ state[4]; - ptrWordOut[5] = ptrWordIn[5] ^ state[5]; - ptrWordOut[6] = ptrWordIn[6] ^ state[6]; - ptrWordOut[7] = ptrWordIn[7] ^ state[7]; - ptrWordOut[8] = ptrWordIn[8] ^ state[8]; - ptrWordOut[9] = ptrWordIn[9] ^ state[9]; - ptrWordOut[10] = ptrWordIn[10] ^ state[10]; - ptrWordOut[11] = ptrWordIn[11] ^ state[11]; - - - //Input: next column (i.e., next block in sequence) - ptrWordIn += BLOCK_LEN_INT64; - //Output: goes to previous column - ptrWordOut -= BLOCK_LEN_INT64; + //Absorbing "M[prev][col]" + state[0] ^= (ptrWordIn[0]); + state[1] ^= (ptrWordIn[1]); + state[2] ^= (ptrWordIn[2]); + state[3] ^= (ptrWordIn[3]); + state[4] ^= (ptrWordIn[4]); + state[5] ^= (ptrWordIn[5]); + state[6] ^= (ptrWordIn[6]); + state[7] ^= (ptrWordIn[7]); + state[8] ^= (ptrWordIn[8]); + state[9] ^= (ptrWordIn[9]); + state[10] ^= (ptrWordIn[10]); + state[11] ^= (ptrWordIn[11]); + + //Applies the reduced-round transformation f to the sponge's state + reducedBlake2bLyra(state); + + //M[row][C-1-col] = M[prev][col] XOR rand + ptrWordOut[0] = ptrWordIn[0] ^ state[0]; + ptrWordOut[1] = ptrWordIn[1] ^ state[1]; + ptrWordOut[2] = ptrWordIn[2] ^ state[2]; + ptrWordOut[3] = ptrWordIn[3] ^ state[3]; + ptrWordOut[4] = ptrWordIn[4] ^ state[4]; + ptrWordOut[5] = ptrWordIn[5] ^ state[5]; + ptrWordOut[6] = ptrWordIn[6] ^ state[6]; + ptrWordOut[7] = ptrWordIn[7] ^ state[7]; + ptrWordOut[8] = ptrWordIn[8] ^ state[8]; + ptrWordOut[9] = ptrWordIn[9] ^ state[9]; + ptrWordOut[10] = ptrWordIn[10] ^ state[10]; + ptrWordOut[11] = ptrWordIn[11] ^ state[11]; + + + //Input: next column (i.e., next block in sequence) + ptrWordIn += BLOCK_LEN_INT64; + //Output: goes to previous column + ptrWordOut -= BLOCK_LEN_INT64; } } @@ -263,56 +263,56 @@ inline void reducedDuplexRowSetup(uint64_t *state, uint64_t *rowIn, uint64_t *ro int i; for (i = 0; i < nCols; i++) { - //Absorbing "M[prev] [+] M[row*]" - state[0] ^= (ptrWordIn[0] + ptrWordInOut[0]); - state[1] ^= (ptrWordIn[1] + ptrWordInOut[1]); - state[2] ^= (ptrWordIn[2] + ptrWordInOut[2]); - state[3] ^= (ptrWordIn[3] + ptrWordInOut[3]); - state[4] ^= (ptrWordIn[4] + ptrWordInOut[4]); - state[5] ^= (ptrWordIn[5] + ptrWordInOut[5]); - state[6] ^= (ptrWordIn[6] + ptrWordInOut[6]); - state[7] ^= (ptrWordIn[7] + ptrWordInOut[7]); - state[8] ^= (ptrWordIn[8] + ptrWordInOut[8]); - state[9] ^= (ptrWordIn[9] + ptrWordInOut[9]); - state[10] ^= (ptrWordIn[10] + ptrWordInOut[10]); - state[11] ^= (ptrWordIn[11] + ptrWordInOut[11]); - - //Applies the reduced-round transformation f to the sponge's state - reducedBlake2bLyra(state); - - //M[row][col] = M[prev][col] XOR rand - ptrWordOut[0] = ptrWordIn[0] ^ state[0]; - ptrWordOut[1] = ptrWordIn[1] ^ state[1]; - ptrWordOut[2] = ptrWordIn[2] ^ state[2]; - ptrWordOut[3] = ptrWordIn[3] ^ state[3]; - ptrWordOut[4] = ptrWordIn[4] ^ state[4]; - ptrWordOut[5] = ptrWordIn[5] ^ state[5]; - ptrWordOut[6] = ptrWordIn[6] ^ state[6]; - ptrWordOut[7] = ptrWordIn[7] ^ state[7]; - ptrWordOut[8] = ptrWordIn[8] ^ state[8]; - ptrWordOut[9] = ptrWordIn[9] ^ state[9]; - ptrWordOut[10] = ptrWordIn[10] ^ state[10]; - ptrWordOut[11] = ptrWordIn[11] ^ state[11]; - - //M[row*][col] = M[row*][col] XOR rotW(rand) - ptrWordInOut[0] ^= state[11]; - ptrWordInOut[1] ^= state[0]; - ptrWordInOut[2] ^= state[1]; - ptrWordInOut[3] ^= state[2]; - ptrWordInOut[4] ^= state[3]; - ptrWordInOut[5] ^= state[4]; - ptrWordInOut[6] ^= state[5]; - ptrWordInOut[7] ^= state[6]; - ptrWordInOut[8] ^= state[7]; - ptrWordInOut[9] ^= state[8]; - ptrWordInOut[10] ^= state[9]; - ptrWordInOut[11] ^= state[10]; - - //Inputs: next column (i.e., next block in sequence) - ptrWordInOut += BLOCK_LEN_INT64; - ptrWordIn += BLOCK_LEN_INT64; - //Output: goes to previous column - ptrWordOut -= BLOCK_LEN_INT64; + //Absorbing "M[prev] [+] M[row*]" + state[0] ^= (ptrWordIn[0] + ptrWordInOut[0]); + state[1] ^= (ptrWordIn[1] + ptrWordInOut[1]); + state[2] ^= (ptrWordIn[2] + ptrWordInOut[2]); + state[3] ^= (ptrWordIn[3] + ptrWordInOut[3]); + state[4] ^= (ptrWordIn[4] + ptrWordInOut[4]); + state[5] ^= (ptrWordIn[5] + ptrWordInOut[5]); + state[6] ^= (ptrWordIn[6] + ptrWordInOut[6]); + state[7] ^= (ptrWordIn[7] + ptrWordInOut[7]); + state[8] ^= (ptrWordIn[8] + ptrWordInOut[8]); + state[9] ^= (ptrWordIn[9] + ptrWordInOut[9]); + state[10] ^= (ptrWordIn[10] + ptrWordInOut[10]); + state[11] ^= (ptrWordIn[11] + ptrWordInOut[11]); + + //Applies the reduced-round transformation f to the sponge's state + reducedBlake2bLyra(state); + + //M[row][col] = M[prev][col] XOR rand + ptrWordOut[0] = ptrWordIn[0] ^ state[0]; + ptrWordOut[1] = ptrWordIn[1] ^ state[1]; + ptrWordOut[2] = ptrWordIn[2] ^ state[2]; + ptrWordOut[3] = ptrWordIn[3] ^ state[3]; + ptrWordOut[4] = ptrWordIn[4] ^ state[4]; + ptrWordOut[5] = ptrWordIn[5] ^ state[5]; + ptrWordOut[6] = ptrWordIn[6] ^ state[6]; + ptrWordOut[7] = ptrWordIn[7] ^ state[7]; + ptrWordOut[8] = ptrWordIn[8] ^ state[8]; + ptrWordOut[9] = ptrWordIn[9] ^ state[9]; + ptrWordOut[10] = ptrWordIn[10] ^ state[10]; + ptrWordOut[11] = ptrWordIn[11] ^ state[11]; + + //M[row*][col] = M[row*][col] XOR rotW(rand) + ptrWordInOut[0] ^= state[11]; + ptrWordInOut[1] ^= state[0]; + ptrWordInOut[2] ^= state[1]; + ptrWordInOut[3] ^= state[2]; + ptrWordInOut[4] ^= state[3]; + ptrWordInOut[5] ^= state[4]; + ptrWordInOut[6] ^= state[5]; + ptrWordInOut[7] ^= state[6]; + ptrWordInOut[8] ^= state[7]; + ptrWordInOut[9] ^= state[8]; + ptrWordInOut[10] ^= state[9]; + ptrWordInOut[11] ^= state[10]; + + //Inputs: next column (i.e., next block in sequence) + ptrWordInOut += BLOCK_LEN_INT64; + ptrWordIn += BLOCK_LEN_INT64; + //Output: goes to previous column + ptrWordOut -= BLOCK_LEN_INT64; } } @@ -338,55 +338,55 @@ inline void reducedDuplexRow(uint64_t *state, uint64_t *rowIn, uint64_t *rowInOu for (i = 0; i < nCols; i++) { - //Absorbing "M[prev] [+] M[row*]" - state[0] ^= (ptrWordIn[0] + ptrWordInOut[0]); - state[1] ^= (ptrWordIn[1] + ptrWordInOut[1]); - state[2] ^= (ptrWordIn[2] + ptrWordInOut[2]); - state[3] ^= (ptrWordIn[3] + ptrWordInOut[3]); - state[4] ^= (ptrWordIn[4] + ptrWordInOut[4]); - state[5] ^= (ptrWordIn[5] + ptrWordInOut[5]); - state[6] ^= (ptrWordIn[6] + ptrWordInOut[6]); - state[7] ^= (ptrWordIn[7] + ptrWordInOut[7]); - state[8] ^= (ptrWordIn[8] + ptrWordInOut[8]); - state[9] ^= (ptrWordIn[9] + ptrWordInOut[9]); - state[10] ^= (ptrWordIn[10] + ptrWordInOut[10]); - state[11] ^= (ptrWordIn[11] + ptrWordInOut[11]); - - //Applies the reduced-round transformation f to the sponge's state - reducedBlake2bLyra(state); - - //M[rowOut][col] = M[rowOut][col] XOR rand - ptrWordOut[0] ^= state[0]; - ptrWordOut[1] ^= state[1]; - ptrWordOut[2] ^= state[2]; - ptrWordOut[3] ^= state[3]; - ptrWordOut[4] ^= state[4]; - ptrWordOut[5] ^= state[5]; - ptrWordOut[6] ^= state[6]; - ptrWordOut[7] ^= state[7]; - ptrWordOut[8] ^= state[8]; - ptrWordOut[9] ^= state[9]; - ptrWordOut[10] ^= state[10]; - ptrWordOut[11] ^= state[11]; - - //M[rowInOut][col] = M[rowInOut][col] XOR rotW(rand) - ptrWordInOut[0] ^= state[11]; - ptrWordInOut[1] ^= state[0]; - ptrWordInOut[2] ^= state[1]; - ptrWordInOut[3] ^= state[2]; - ptrWordInOut[4] ^= state[3]; - ptrWordInOut[5] ^= state[4]; - ptrWordInOut[6] ^= state[5]; - ptrWordInOut[7] ^= state[6]; - ptrWordInOut[8] ^= state[7]; - ptrWordInOut[9] ^= state[8]; - ptrWordInOut[10] ^= state[9]; - ptrWordInOut[11] ^= state[10]; - - //Goes to next block - ptrWordOut += BLOCK_LEN_INT64; - ptrWordInOut += BLOCK_LEN_INT64; - ptrWordIn += BLOCK_LEN_INT64; + //Absorbing "M[prev] [+] M[row*]" + state[0] ^= (ptrWordIn[0] + ptrWordInOut[0]); + state[1] ^= (ptrWordIn[1] + ptrWordInOut[1]); + state[2] ^= (ptrWordIn[2] + ptrWordInOut[2]); + state[3] ^= (ptrWordIn[3] + ptrWordInOut[3]); + state[4] ^= (ptrWordIn[4] + ptrWordInOut[4]); + state[5] ^= (ptrWordIn[5] + ptrWordInOut[5]); + state[6] ^= (ptrWordIn[6] + ptrWordInOut[6]); + state[7] ^= (ptrWordIn[7] + ptrWordInOut[7]); + state[8] ^= (ptrWordIn[8] + ptrWordInOut[8]); + state[9] ^= (ptrWordIn[9] + ptrWordInOut[9]); + state[10] ^= (ptrWordIn[10] + ptrWordInOut[10]); + state[11] ^= (ptrWordIn[11] + ptrWordInOut[11]); + + //Applies the reduced-round transformation f to the sponge's state + reducedBlake2bLyra(state); + + //M[rowOut][col] = M[rowOut][col] XOR rand + ptrWordOut[0] ^= state[0]; + ptrWordOut[1] ^= state[1]; + ptrWordOut[2] ^= state[2]; + ptrWordOut[3] ^= state[3]; + ptrWordOut[4] ^= state[4]; + ptrWordOut[5] ^= state[5]; + ptrWordOut[6] ^= state[6]; + ptrWordOut[7] ^= state[7]; + ptrWordOut[8] ^= state[8]; + ptrWordOut[9] ^= state[9]; + ptrWordOut[10] ^= state[10]; + ptrWordOut[11] ^= state[11]; + + //M[rowInOut][col] = M[rowInOut][col] XOR rotW(rand) + ptrWordInOut[0] ^= state[11]; + ptrWordInOut[1] ^= state[0]; + ptrWordInOut[2] ^= state[1]; + ptrWordInOut[3] ^= state[2]; + ptrWordInOut[4] ^= state[3]; + ptrWordInOut[5] ^= state[4]; + ptrWordInOut[6] ^= state[5]; + ptrWordInOut[7] ^= state[6]; + ptrWordInOut[8] ^= state[7]; + ptrWordInOut[9] ^= state[8]; + ptrWordInOut[10] ^= state[9]; + ptrWordInOut[11] ^= state[10]; + + //Goes to next block + ptrWordOut += BLOCK_LEN_INT64; + ptrWordInOut += BLOCK_LEN_INT64; + ptrWordIn += BLOCK_LEN_INT64; } } @@ -412,56 +412,56 @@ inline void reducedDuplexRowSetupOLD(uint64_t *state, uint64_t *rowIn, uint64_t int i; for (i = 0; i < N_COLS; i++) { - //Absorbing "M[rowInOut] XOR M[rowIn]" - state[0] ^= ptrWordInOut[0] ^ ptrWordIn[0]; - state[1] ^= ptrWordInOut[1] ^ ptrWordIn[1]; - state[2] ^= ptrWordInOut[2] ^ ptrWordIn[2]; - state[3] ^= ptrWordInOut[3] ^ ptrWordIn[3]; - state[4] ^= ptrWordInOut[4] ^ ptrWordIn[4]; - state[5] ^= ptrWordInOut[5] ^ ptrWordIn[5]; - state[6] ^= ptrWordInOut[6] ^ ptrWordIn[6]; - state[7] ^= ptrWordInOut[7] ^ ptrWordIn[7]; - state[8] ^= ptrWordInOut[8] ^ ptrWordIn[8]; - state[9] ^= ptrWordInOut[9] ^ ptrWordIn[9]; - state[10] ^= ptrWordInOut[10] ^ ptrWordIn[10]; - state[11] ^= ptrWordInOut[11] ^ ptrWordIn[11]; - - //Applies the reduced-round transformation f to the sponge's state - reducedBlake2bLyra(state); - - //M[row][col] = rand - ptrWordOut[0] = state[0]; - ptrWordOut[1] = state[1]; - ptrWordOut[2] = state[2]; - ptrWordOut[3] = state[3]; - ptrWordOut[4] = state[4]; - ptrWordOut[5] = state[5]; - ptrWordOut[6] = state[6]; - ptrWordOut[7] = state[7]; - ptrWordOut[8] = state[8]; - ptrWordOut[9] = state[9]; - ptrWordOut[10] = state[10]; - ptrWordOut[11] = state[11]; - - - //M[row*][col] = M[row*][col] XOR rotW(rand) - ptrWordInOut[0] ^= state[10]; - ptrWordInOut[1] ^= state[11]; - ptrWordInOut[2] ^= state[0]; - ptrWordInOut[3] ^= state[1]; - ptrWordInOut[4] ^= state[2]; - ptrWordInOut[5] ^= state[3]; - ptrWordInOut[6] ^= state[4]; - ptrWordInOut[7] ^= state[5]; - ptrWordInOut[8] ^= state[6]; - ptrWordInOut[9] ^= state[7]; - ptrWordInOut[10] ^= state[8]; - ptrWordInOut[11] ^= state[9]; - - //Goes to next column (i.e., next block in sequence) - ptrWordInOut += BLOCK_LEN_INT64; - ptrWordIn += BLOCK_LEN_INT64; - ptrWordOut += BLOCK_LEN_INT64; + //Absorbing "M[rowInOut] XOR M[rowIn]" + state[0] ^= ptrWordInOut[0] ^ ptrWordIn[0]; + state[1] ^= ptrWordInOut[1] ^ ptrWordIn[1]; + state[2] ^= ptrWordInOut[2] ^ ptrWordIn[2]; + state[3] ^= ptrWordInOut[3] ^ ptrWordIn[3]; + state[4] ^= ptrWordInOut[4] ^ ptrWordIn[4]; + state[5] ^= ptrWordInOut[5] ^ ptrWordIn[5]; + state[6] ^= ptrWordInOut[6] ^ ptrWordIn[6]; + state[7] ^= ptrWordInOut[7] ^ ptrWordIn[7]; + state[8] ^= ptrWordInOut[8] ^ ptrWordIn[8]; + state[9] ^= ptrWordInOut[9] ^ ptrWordIn[9]; + state[10] ^= ptrWordInOut[10] ^ ptrWordIn[10]; + state[11] ^= ptrWordInOut[11] ^ ptrWordIn[11]; + + //Applies the reduced-round transformation f to the sponge's state + reducedBlake2bLyra(state); + + //M[row][col] = rand + ptrWordOut[0] = state[0]; + ptrWordOut[1] = state[1]; + ptrWordOut[2] = state[2]; + ptrWordOut[3] = state[3]; + ptrWordOut[4] = state[4]; + ptrWordOut[5] = state[5]; + ptrWordOut[6] = state[6]; + ptrWordOut[7] = state[7]; + ptrWordOut[8] = state[8]; + ptrWordOut[9] = state[9]; + ptrWordOut[10] = state[10]; + ptrWordOut[11] = state[11]; + + + //M[row*][col] = M[row*][col] XOR rotW(rand) + ptrWordInOut[0] ^= state[10]; + ptrWordInOut[1] ^= state[11]; + ptrWordInOut[2] ^= state[0]; + ptrWordInOut[3] ^= state[1]; + ptrWordInOut[4] ^= state[2]; + ptrWordInOut[5] ^= state[3]; + ptrWordInOut[6] ^= state[4]; + ptrWordInOut[7] ^= state[5]; + ptrWordInOut[8] ^= state[6]; + ptrWordInOut[9] ^= state[7]; + ptrWordInOut[10] ^= state[8]; + ptrWordInOut[11] ^= state[9]; + + //Goes to next column (i.e., next block in sequence) + ptrWordInOut += BLOCK_LEN_INT64; + ptrWordIn += BLOCK_LEN_INT64; + ptrWordOut += BLOCK_LEN_INT64; } } */ @@ -485,57 +485,57 @@ inline void reducedDuplexRowSetupv5(uint64_t *state, uint64_t *rowIn, uint64_t * int i; for (i = 0; i < N_COLS; i++) { - //Absorbing "M[rowInOut] XOR M[rowIn]" - state[0] ^= ptrWordInOut[0] + ptrWordIn[0]; - state[1] ^= ptrWordInOut[1] + ptrWordIn[1]; - state[2] ^= ptrWordInOut[2] + ptrWordIn[2]; - state[3] ^= ptrWordInOut[3] + ptrWordIn[3]; - state[4] ^= ptrWordInOut[4] + ptrWordIn[4]; - state[5] ^= ptrWordInOut[5] + ptrWordIn[5]; - state[6] ^= ptrWordInOut[6] + ptrWordIn[6]; - state[7] ^= ptrWordInOut[7] + ptrWordIn[7]; - state[8] ^= ptrWordInOut[8] + ptrWordIn[8]; - state[9] ^= ptrWordInOut[9] + ptrWordIn[9]; - state[10] ^= ptrWordInOut[10] + ptrWordIn[10]; - state[11] ^= ptrWordInOut[11] + ptrWordIn[11]; - - //Applies the reduced-round transformation f to the sponge's state - reducedBlake2bLyra(state); - - - //M[row*][col] = M[row*][col] XOR rotW(rand) - ptrWordInOut[0] ^= state[10]; - ptrWordInOut[1] ^= state[11]; - ptrWordInOut[2] ^= state[0]; - ptrWordInOut[3] ^= state[1]; - ptrWordInOut[4] ^= state[2]; - ptrWordInOut[5] ^= state[3]; - ptrWordInOut[6] ^= state[4]; - ptrWordInOut[7] ^= state[5]; - ptrWordInOut[8] ^= state[6]; - ptrWordInOut[9] ^= state[7]; - ptrWordInOut[10] ^= state[8]; - ptrWordInOut[11] ^= state[9]; - - - //M[row][col] = rand - ptrWordOut[0] = state[0] ^ ptrWordIn[0]; - ptrWordOut[1] = state[1] ^ ptrWordIn[1]; - ptrWordOut[2] = state[2] ^ ptrWordIn[2]; - ptrWordOut[3] = state[3] ^ ptrWordIn[3]; - ptrWordOut[4] = state[4] ^ ptrWordIn[4]; - ptrWordOut[5] = state[5] ^ ptrWordIn[5]; - ptrWordOut[6] = state[6] ^ ptrWordIn[6]; - ptrWordOut[7] = state[7] ^ ptrWordIn[7]; - ptrWordOut[8] = state[8] ^ ptrWordIn[8]; - ptrWordOut[9] = state[9] ^ ptrWordIn[9]; - ptrWordOut[10] = state[10] ^ ptrWordIn[10]; - ptrWordOut[11] = state[11] ^ ptrWordIn[11]; - - //Goes to next column (i.e., next block in sequence) - ptrWordInOut += BLOCK_LEN_INT64; - ptrWordIn += BLOCK_LEN_INT64; - ptrWordOut += BLOCK_LEN_INT64; + //Absorbing "M[rowInOut] XOR M[rowIn]" + state[0] ^= ptrWordInOut[0] + ptrWordIn[0]; + state[1] ^= ptrWordInOut[1] + ptrWordIn[1]; + state[2] ^= ptrWordInOut[2] + ptrWordIn[2]; + state[3] ^= ptrWordInOut[3] + ptrWordIn[3]; + state[4] ^= ptrWordInOut[4] + ptrWordIn[4]; + state[5] ^= ptrWordInOut[5] + ptrWordIn[5]; + state[6] ^= ptrWordInOut[6] + ptrWordIn[6]; + state[7] ^= ptrWordInOut[7] + ptrWordIn[7]; + state[8] ^= ptrWordInOut[8] + ptrWordIn[8]; + state[9] ^= ptrWordInOut[9] + ptrWordIn[9]; + state[10] ^= ptrWordInOut[10] + ptrWordIn[10]; + state[11] ^= ptrWordInOut[11] + ptrWordIn[11]; + + //Applies the reduced-round transformation f to the sponge's state + reducedBlake2bLyra(state); + + + //M[row*][col] = M[row*][col] XOR rotW(rand) + ptrWordInOut[0] ^= state[10]; + ptrWordInOut[1] ^= state[11]; + ptrWordInOut[2] ^= state[0]; + ptrWordInOut[3] ^= state[1]; + ptrWordInOut[4] ^= state[2]; + ptrWordInOut[5] ^= state[3]; + ptrWordInOut[6] ^= state[4]; + ptrWordInOut[7] ^= state[5]; + ptrWordInOut[8] ^= state[6]; + ptrWordInOut[9] ^= state[7]; + ptrWordInOut[10] ^= state[8]; + ptrWordInOut[11] ^= state[9]; + + + //M[row][col] = rand + ptrWordOut[0] = state[0] ^ ptrWordIn[0]; + ptrWordOut[1] = state[1] ^ ptrWordIn[1]; + ptrWordOut[2] = state[2] ^ ptrWordIn[2]; + ptrWordOut[3] = state[3] ^ ptrWordIn[3]; + ptrWordOut[4] = state[4] ^ ptrWordIn[4]; + ptrWordOut[5] = state[5] ^ ptrWordIn[5]; + ptrWordOut[6] = state[6] ^ ptrWordIn[6]; + ptrWordOut[7] = state[7] ^ ptrWordIn[7]; + ptrWordOut[8] = state[8] ^ ptrWordIn[8]; + ptrWordOut[9] = state[9] ^ ptrWordIn[9]; + ptrWordOut[10] = state[10] ^ ptrWordIn[10]; + ptrWordOut[11] = state[11] ^ ptrWordIn[11]; + + //Goes to next column (i.e., next block in sequence) + ptrWordInOut += BLOCK_LEN_INT64; + ptrWordIn += BLOCK_LEN_INT64; + ptrWordOut += BLOCK_LEN_INT64; } } */ @@ -559,112 +559,112 @@ inline void reducedDuplexRowSetupv5c(uint64_t *state, uint64_t *rowIn, uint64_t int i; for (i = 0; i < N_COLS / 2; i++) { - //Absorbing "M[rowInOut] XOR M[rowIn]" - state[0] ^= ptrWordInOut[0] + ptrWordIn[0]; - state[1] ^= ptrWordInOut[1] + ptrWordIn[1]; - state[2] ^= ptrWordInOut[2] + ptrWordIn[2]; - state[3] ^= ptrWordInOut[3] + ptrWordIn[3]; - state[4] ^= ptrWordInOut[4] + ptrWordIn[4]; - state[5] ^= ptrWordInOut[5] + ptrWordIn[5]; - state[6] ^= ptrWordInOut[6] + ptrWordIn[6]; - state[7] ^= ptrWordInOut[7] + ptrWordIn[7]; - state[8] ^= ptrWordInOut[8] + ptrWordIn[8]; - state[9] ^= ptrWordInOut[9] + ptrWordIn[9]; - state[10] ^= ptrWordInOut[10] + ptrWordIn[10]; - state[11] ^= ptrWordInOut[11] + ptrWordIn[11]; - - //Applies the reduced-round transformation f to the sponge's state - reducedBlake2bLyra(state); - - - //M[row*][col] = M[row*][col] XOR rotW(rand) - ptrWordInOut[0] ^= state[10]; - ptrWordInOut[1] ^= state[11]; - ptrWordInOut[2] ^= state[0]; - ptrWordInOut[3] ^= state[1]; - ptrWordInOut[4] ^= state[2]; - ptrWordInOut[5] ^= state[3]; - ptrWordInOut[6] ^= state[4]; - ptrWordInOut[7] ^= state[5]; - ptrWordInOut[8] ^= state[6]; - ptrWordInOut[9] ^= state[7]; - ptrWordInOut[10] ^= state[8]; - ptrWordInOut[11] ^= state[9]; - - - //M[row][col] = rand - ptrWordOut[0] = state[0] ^ ptrWordIn[0]; - ptrWordOut[1] = state[1] ^ ptrWordIn[1]; - ptrWordOut[2] = state[2] ^ ptrWordIn[2]; - ptrWordOut[3] = state[3] ^ ptrWordIn[3]; - ptrWordOut[4] = state[4] ^ ptrWordIn[4]; - ptrWordOut[5] = state[5] ^ ptrWordIn[5]; - ptrWordOut[6] = state[6] ^ ptrWordIn[6]; - ptrWordOut[7] = state[7] ^ ptrWordIn[7]; - ptrWordOut[8] = state[8] ^ ptrWordIn[8]; - ptrWordOut[9] = state[9] ^ ptrWordIn[9]; - ptrWordOut[10] = state[10] ^ ptrWordIn[10]; - ptrWordOut[11] = state[11] ^ ptrWordIn[11]; - - //Goes to next column (i.e., next block in sequence) - ptrWordInOut += BLOCK_LEN_INT64; - ptrWordIn += BLOCK_LEN_INT64; - ptrWordOut += 2 * BLOCK_LEN_INT64; + //Absorbing "M[rowInOut] XOR M[rowIn]" + state[0] ^= ptrWordInOut[0] + ptrWordIn[0]; + state[1] ^= ptrWordInOut[1] + ptrWordIn[1]; + state[2] ^= ptrWordInOut[2] + ptrWordIn[2]; + state[3] ^= ptrWordInOut[3] + ptrWordIn[3]; + state[4] ^= ptrWordInOut[4] + ptrWordIn[4]; + state[5] ^= ptrWordInOut[5] + ptrWordIn[5]; + state[6] ^= ptrWordInOut[6] + ptrWordIn[6]; + state[7] ^= ptrWordInOut[7] + ptrWordIn[7]; + state[8] ^= ptrWordInOut[8] + ptrWordIn[8]; + state[9] ^= ptrWordInOut[9] + ptrWordIn[9]; + state[10] ^= ptrWordInOut[10] + ptrWordIn[10]; + state[11] ^= ptrWordInOut[11] + ptrWordIn[11]; + + //Applies the reduced-round transformation f to the sponge's state + reducedBlake2bLyra(state); + + + //M[row*][col] = M[row*][col] XOR rotW(rand) + ptrWordInOut[0] ^= state[10]; + ptrWordInOut[1] ^= state[11]; + ptrWordInOut[2] ^= state[0]; + ptrWordInOut[3] ^= state[1]; + ptrWordInOut[4] ^= state[2]; + ptrWordInOut[5] ^= state[3]; + ptrWordInOut[6] ^= state[4]; + ptrWordInOut[7] ^= state[5]; + ptrWordInOut[8] ^= state[6]; + ptrWordInOut[9] ^= state[7]; + ptrWordInOut[10] ^= state[8]; + ptrWordInOut[11] ^= state[9]; + + + //M[row][col] = rand + ptrWordOut[0] = state[0] ^ ptrWordIn[0]; + ptrWordOut[1] = state[1] ^ ptrWordIn[1]; + ptrWordOut[2] = state[2] ^ ptrWordIn[2]; + ptrWordOut[3] = state[3] ^ ptrWordIn[3]; + ptrWordOut[4] = state[4] ^ ptrWordIn[4]; + ptrWordOut[5] = state[5] ^ ptrWordIn[5]; + ptrWordOut[6] = state[6] ^ ptrWordIn[6]; + ptrWordOut[7] = state[7] ^ ptrWordIn[7]; + ptrWordOut[8] = state[8] ^ ptrWordIn[8]; + ptrWordOut[9] = state[9] ^ ptrWordIn[9]; + ptrWordOut[10] = state[10] ^ ptrWordIn[10]; + ptrWordOut[11] = state[11] ^ ptrWordIn[11]; + + //Goes to next column (i.e., next block in sequence) + ptrWordInOut += BLOCK_LEN_INT64; + ptrWordIn += BLOCK_LEN_INT64; + ptrWordOut += 2 * BLOCK_LEN_INT64; } ptrWordOut = rowOut + BLOCK_LEN_INT64; for (i = 0; i < N_COLS / 2; i++) { - //Absorbing "M[rowInOut] XOR M[rowIn]" - state[0] ^= ptrWordInOut[0] + ptrWordIn[0]; - state[1] ^= ptrWordInOut[1] + ptrWordIn[1]; - state[2] ^= ptrWordInOut[2] + ptrWordIn[2]; - state[3] ^= ptrWordInOut[3] + ptrWordIn[3]; - state[4] ^= ptrWordInOut[4] + ptrWordIn[4]; - state[5] ^= ptrWordInOut[5] + ptrWordIn[5]; - state[6] ^= ptrWordInOut[6] + ptrWordIn[6]; - state[7] ^= ptrWordInOut[7] + ptrWordIn[7]; - state[8] ^= ptrWordInOut[8] + ptrWordIn[8]; - state[9] ^= ptrWordInOut[9] + ptrWordIn[9]; - state[10] ^= ptrWordInOut[10] + ptrWordIn[10]; - state[11] ^= ptrWordInOut[11] + ptrWordIn[11]; - - //Applies the reduced-round transformation f to the sponge's state - reducedBlake2bLyra(state); - - - //M[row*][col] = M[row*][col] XOR rotW(rand) - ptrWordInOut[0] ^= state[10]; - ptrWordInOut[1] ^= state[11]; - ptrWordInOut[2] ^= state[0]; - ptrWordInOut[3] ^= state[1]; - ptrWordInOut[4] ^= state[2]; - ptrWordInOut[5] ^= state[3]; - ptrWordInOut[6] ^= state[4]; - ptrWordInOut[7] ^= state[5]; - ptrWordInOut[8] ^= state[6]; - ptrWordInOut[9] ^= state[7]; - ptrWordInOut[10] ^= state[8]; - ptrWordInOut[11] ^= state[9]; - - - //M[row][col] = rand - ptrWordOut[0] = state[0] ^ ptrWordIn[0]; - ptrWordOut[1] = state[1] ^ ptrWordIn[1]; - ptrWordOut[2] = state[2] ^ ptrWordIn[2]; - ptrWordOut[3] = state[3] ^ ptrWordIn[3]; - ptrWordOut[4] = state[4] ^ ptrWordIn[4]; - ptrWordOut[5] = state[5] ^ ptrWordIn[5]; - ptrWordOut[6] = state[6] ^ ptrWordIn[6]; - ptrWordOut[7] = state[7] ^ ptrWordIn[7]; - ptrWordOut[8] = state[8] ^ ptrWordIn[8]; - ptrWordOut[9] = state[9] ^ ptrWordIn[9]; - ptrWordOut[10] = state[10] ^ ptrWordIn[10]; - ptrWordOut[11] = state[11] ^ ptrWordIn[11]; - - //Goes to next column (i.e., next block in sequence) - ptrWordInOut += BLOCK_LEN_INT64; - ptrWordIn += BLOCK_LEN_INT64; - ptrWordOut += 2 * BLOCK_LEN_INT64; + //Absorbing "M[rowInOut] XOR M[rowIn]" + state[0] ^= ptrWordInOut[0] + ptrWordIn[0]; + state[1] ^= ptrWordInOut[1] + ptrWordIn[1]; + state[2] ^= ptrWordInOut[2] + ptrWordIn[2]; + state[3] ^= ptrWordInOut[3] + ptrWordIn[3]; + state[4] ^= ptrWordInOut[4] + ptrWordIn[4]; + state[5] ^= ptrWordInOut[5] + ptrWordIn[5]; + state[6] ^= ptrWordInOut[6] + ptrWordIn[6]; + state[7] ^= ptrWordInOut[7] + ptrWordIn[7]; + state[8] ^= ptrWordInOut[8] + ptrWordIn[8]; + state[9] ^= ptrWordInOut[9] + ptrWordIn[9]; + state[10] ^= ptrWordInOut[10] + ptrWordIn[10]; + state[11] ^= ptrWordInOut[11] + ptrWordIn[11]; + + //Applies the reduced-round transformation f to the sponge's state + reducedBlake2bLyra(state); + + + //M[row*][col] = M[row*][col] XOR rotW(rand) + ptrWordInOut[0] ^= state[10]; + ptrWordInOut[1] ^= state[11]; + ptrWordInOut[2] ^= state[0]; + ptrWordInOut[3] ^= state[1]; + ptrWordInOut[4] ^= state[2]; + ptrWordInOut[5] ^= state[3]; + ptrWordInOut[6] ^= state[4]; + ptrWordInOut[7] ^= state[5]; + ptrWordInOut[8] ^= state[6]; + ptrWordInOut[9] ^= state[7]; + ptrWordInOut[10] ^= state[8]; + ptrWordInOut[11] ^= state[9]; + + + //M[row][col] = rand + ptrWordOut[0] = state[0] ^ ptrWordIn[0]; + ptrWordOut[1] = state[1] ^ ptrWordIn[1]; + ptrWordOut[2] = state[2] ^ ptrWordIn[2]; + ptrWordOut[3] = state[3] ^ ptrWordIn[3]; + ptrWordOut[4] = state[4] ^ ptrWordIn[4]; + ptrWordOut[5] = state[5] ^ ptrWordIn[5]; + ptrWordOut[6] = state[6] ^ ptrWordIn[6]; + ptrWordOut[7] = state[7] ^ ptrWordIn[7]; + ptrWordOut[8] = state[8] ^ ptrWordIn[8]; + ptrWordOut[9] = state[9] ^ ptrWordIn[9]; + ptrWordOut[10] = state[10] ^ ptrWordIn[10]; + ptrWordOut[11] = state[11] ^ ptrWordIn[11]; + + //Goes to next column (i.e., next block in sequence) + ptrWordInOut += BLOCK_LEN_INT64; + ptrWordIn += BLOCK_LEN_INT64; + ptrWordOut += 2 * BLOCK_LEN_INT64; } } */ @@ -688,44 +688,44 @@ inline void reducedDuplexRowd(uint64_t *state, uint64_t *rowIn, uint64_t *rowInO int i; for (i = 0; i < N_COLS; i++) { - //Absorbing "M[rowInOut] XOR M[rowIn]" - state[0] ^= ptrWordInOut[0] + ptrWordIn[0]; - state[1] ^= ptrWordInOut[1] + ptrWordIn[1]; - state[2] ^= ptrWordInOut[2] + ptrWordIn[2]; - state[3] ^= ptrWordInOut[3] + ptrWordIn[3]; - state[4] ^= ptrWordInOut[4] + ptrWordIn[4]; - state[5] ^= ptrWordInOut[5] + ptrWordIn[5]; - state[6] ^= ptrWordInOut[6] + ptrWordIn[6]; - state[7] ^= ptrWordInOut[7] + ptrWordIn[7]; - state[8] ^= ptrWordInOut[8] + ptrWordIn[8]; - state[9] ^= ptrWordInOut[9] + ptrWordIn[9]; - state[10] ^= ptrWordInOut[10] + ptrWordIn[10]; - state[11] ^= ptrWordInOut[11] + ptrWordIn[11]; - - //Applies the reduced-round transformation f to the sponge's state - reducedBlake2bLyra(state); - - //M[rowOut][col] = M[rowOut][col] XOR rand - ptrWordOut[0] ^= state[0]; - ptrWordOut[1] ^= state[1]; - ptrWordOut[2] ^= state[2]; - ptrWordOut[3] ^= state[3]; - ptrWordOut[4] ^= state[4]; - ptrWordOut[5] ^= state[5]; - ptrWordOut[6] ^= state[6]; - ptrWordOut[7] ^= state[7]; - ptrWordOut[8] ^= state[8]; - ptrWordOut[9] ^= state[9]; - ptrWordOut[10] ^= state[10]; - ptrWordOut[11] ^= state[11]; - - //M[rowInOut][col] = M[rowInOut][col] XOR rotW(rand) - - - //Goes to next block - ptrWordOut += BLOCK_LEN_INT64; - ptrWordInOut += BLOCK_LEN_INT64; - ptrWordIn += BLOCK_LEN_INT64; + //Absorbing "M[rowInOut] XOR M[rowIn]" + state[0] ^= ptrWordInOut[0] + ptrWordIn[0]; + state[1] ^= ptrWordInOut[1] + ptrWordIn[1]; + state[2] ^= ptrWordInOut[2] + ptrWordIn[2]; + state[3] ^= ptrWordInOut[3] + ptrWordIn[3]; + state[4] ^= ptrWordInOut[4] + ptrWordIn[4]; + state[5] ^= ptrWordInOut[5] + ptrWordIn[5]; + state[6] ^= ptrWordInOut[6] + ptrWordIn[6]; + state[7] ^= ptrWordInOut[7] + ptrWordIn[7]; + state[8] ^= ptrWordInOut[8] + ptrWordIn[8]; + state[9] ^= ptrWordInOut[9] + ptrWordIn[9]; + state[10] ^= ptrWordInOut[10] + ptrWordIn[10]; + state[11] ^= ptrWordInOut[11] + ptrWordIn[11]; + + //Applies the reduced-round transformation f to the sponge's state + reducedBlake2bLyra(state); + + //M[rowOut][col] = M[rowOut][col] XOR rand + ptrWordOut[0] ^= state[0]; + ptrWordOut[1] ^= state[1]; + ptrWordOut[2] ^= state[2]; + ptrWordOut[3] ^= state[3]; + ptrWordOut[4] ^= state[4]; + ptrWordOut[5] ^= state[5]; + ptrWordOut[6] ^= state[6]; + ptrWordOut[7] ^= state[7]; + ptrWordOut[8] ^= state[8]; + ptrWordOut[9] ^= state[9]; + ptrWordOut[10] ^= state[10]; + ptrWordOut[11] ^= state[11]; + + //M[rowInOut][col] = M[rowInOut][col] XOR rotW(rand) + + + //Goes to next block + ptrWordOut += BLOCK_LEN_INT64; + ptrWordInOut += BLOCK_LEN_INT64; + ptrWordIn += BLOCK_LEN_INT64; } } */ @@ -737,7 +737,7 @@ void printArray(unsigned char *array, unsigned int size, char *name) { int i; printf("%s: ", name); for (i = 0; i < size; i++) { - printf("%2x|", array[i]); + printf("%2x|", array[i]); } printf("\n"); } diff --git a/src/auxpow.h b/src/auxpow.h index aec5cd4de8..8b7b598da2 100755 --- a/src/auxpow.h +++ b/src/auxpow.h @@ -38,9 +38,9 @@ class CAuxPow : public CMerkleTx bool Check(uint256 hashAuxBlock, int nChainID); - uint256 GetParentBlockHash() + uint256 GetParentBlockHash(int height) { - return parentBlockHeader.GetPoWHash(); + return parentBlockHeader.GetPoWHash(height); } }; diff --git a/src/main.cpp b/src/main.cpp index 0630640389..8331e76962 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -18,7 +18,6 @@ #include "fixed.h" #include - using namespace std; using namespace boost; using namespace numeric; @@ -91,6 +90,7 @@ int64 nMinimumInputValue = DUST_HARD_LIMIT; + ////////////////////////////////////////////////////////////////////////////// // // dispatching functions @@ -2304,6 +2304,21 @@ unsigned int static GetNextWorkRequired(const CBlockIndex* pindexLast, const CBl return bnProofOfWorkLimit.GetCompact(); } }*/ + + // 9/29/2016 - Reset to Lyra2(2,32768,256) due to ASIC KnC Miner Scrypt + // 36 block look back, reset to mininmun diff + if(!fTestNet && pindexLast->nHeight + 1 >= 500 && pindexLast->nHeight + 1 <= 535){ + + return bnProofOfWorkLimit.GetCompact(); + + } + + if(fTestNet && pindexLast->nHeight + 1 >= 138 && pindexLast->nHeight + 1 <= 173){ + + return bnProofOfWorkLimit.GetCompact(); + + } + if ((pindexLast->nHeight+1) % nInterval != 0) // Retarget every nInterval blocks { @@ -2743,7 +2758,7 @@ void ThreadScriptCheck() { bool CBlock::ConnectBlock(CValidationState &state, CBlockIndex* pindex, CCoinsViewCache &view, bool fJustCheck) { - LastHeight = pindex->nHeight - 1; + LastHeight = pindex->nHeight; // Check it again in case a previous version let a bad block in if (!CheckBlock(state, pindex->nHeight, !fJustCheck, !fJustCheck, false)) @@ -3312,15 +3327,15 @@ bool CBlock::AddToBlockIndex(CValidationState &state, const CDiskBlockPos &pos) int GetAuxPowStartBlock() { if (fTestNet) - return 1; + return 138; else - return 1; + return 500; } int GetOurChainID() { - return 0x0001; // 98 + return 0x0001; // We are the first :) } @@ -3340,13 +3355,14 @@ bool CBlockHeader::CheckProofOfWork(int nHeight) const if (!auxpow->Check(GetHash(), GetChainID())) return error("CheckProofOfWork() : AUX POW is not valid"); // Check proof of work matches claimed amount - if (!::CheckProofOfWork(auxpow->GetParentBlockHash(), nBits)) + if (!::CheckProofOfWork(auxpow->GetParentBlockHash(nHeight), nBits)) return error("CheckProofOfWork() : AUX proof of work failed"); } else { + // Check proof of work matches claimed amount - if (!::CheckProofOfWork(GetPoWHash(), nBits)) + if (!::CheckProofOfWork(GetPoWHash(nHeight), nBits)) return error("CheckProofOfWork() : proof of work failed - 1"); } } @@ -3358,7 +3374,7 @@ bool CBlockHeader::CheckProofOfWork(int nHeight) const } // Check if proof of work marches claimed amount - if (!::CheckProofOfWork(GetPoWHash(), nBits)) + if (!::CheckProofOfWork(GetPoWHash(nHeight), nBits)) return error("CheckProofOfWork() : proof of work failed - 2"); } return true; @@ -3486,9 +3502,24 @@ bool CBlock::CheckBlock(CValidationState &state, int nHeight, bool fCheckPOW, bo return error("CheckBlock() : 15 August maxlocks violation"); } - // Check proof of work matches claimed amount - if (fCheckPOW && !CheckProofOfWork(nHeight)) - return state.DoS(50, error("CheckBlock() : proof of work failed")); + CBlockIndex* pindexPrev = NULL; + if (GetHash() != hashGenesisBlock) + { + int nHeightCheckPoW = 0; + map::iterator mi = mapBlockIndex.find(hashPrevBlock); + pindexPrev = (*mi).second; + if (mi != mapBlockIndex.end()) + { + if (pindexPrev != NULL) + { + nHeightCheckPoW = pindexPrev->nHeight+1; + // Check proof of work matches claimed amount + if (fCheckPOW && !CheckProofOfWork(nHeightCheckPoW)) + return state.DoS(50, error("CheckBlock() : proof of work failed")); + } + } + } + // Check timestamp if (GetBlockTime() > GetAdjustedTime() + 2 * 60 * 60) @@ -6068,7 +6099,7 @@ bool CheckWork(CBlock* pblock, CWallet& wallet, CReserveKey& reservekey) nHeight = pindexPrev->nHeight+1; } - uint256 hash = pblock->GetPoWHash(); + uint256 hash = pblock->GetPoWHash(nHeight); uint256 hashTarget = CBigNum().SetCompact(pblock->nBits).getuint256(); CAuxPow *auxpow = pblock->auxpow.get(); @@ -6077,14 +6108,14 @@ bool CheckWork(CBlock* pblock, CWallet& wallet, CReserveKey& reservekey) if (!auxpow->Check(pblock->GetHash(), pblock->GetChainID())) return error("AUX POW is not valid"); - if (auxpow->GetParentBlockHash() > hashTarget) - return error("AUX POW parent hash %s is not under target %s", auxpow->GetParentBlockHash().GetHex().c_str(), hashTarget.GetHex().c_str()); + if (auxpow->GetParentBlockHash(nHeight) > hashTarget) + return error("AUX POW parent hash %s is not under target %s", auxpow->GetParentBlockHash(nHeight).GetHex().c_str(), hashTarget.GetHex().c_str()); //// debug print printf("ZCoinMiner:\n"); printf("AUX proof-of-work found \n our hash: %s \n parent hash: %s \n target: %s\n", hash.GetHex().c_str(), - auxpow->GetParentBlockHash().GetHex().c_str(), + auxpow->GetParentBlockHash(nHeight).GetHex().c_str(), hashTarget.GetHex().c_str()); } @@ -6141,7 +6172,7 @@ std::string CDiskBlockIndex::ToString() const str += strprintf("\n hashBlock=%s, hashPrev=%s, hashParentBlock=%s)", GetBlockHash().ToString().c_str(), hashPrev.ToString().c_str(), - (auxpow.get() != NULL) ? auxpow->GetParentBlockHash().ToString().substr(0,20).c_str() : "-"); + (auxpow.get() != NULL) ? auxpow->GetParentBlockHash(nHeight).ToString().substr(0,20).c_str() : "-"); return str; } @@ -6225,8 +6256,17 @@ void static ScryptMiner(CWallet *pwallet) char scratchpad[scrypt_scratpad_size_current_block]; loop { - scrypt_N_1_1_256_sp_generic(BEGIN(pblock->nVersion), BEGIN(thash), scratchpad, GetNfactor(pblock->nTime)); - + if( !fTestNet && pindexPrev->nHeight + 1 >= 500){ + LYRA2(BEGIN(thash), 32, BEGIN(pblock->nVersion), 80, BEGIN(pblock->nVersion), 80, 2, 32768, 256); + printf("thash: %s\n", thash.ToString().c_str()); + printf("hashTarget: %s\n", hashTarget.ToString().c_str()); + }else if(fTestNet && pindexPrev->nHeight + 1 >= 138){ + LYRA2(BEGIN(thash), 32, BEGIN(pblock->nVersion), 80, BEGIN(pblock->nVersion), 80, 2, 32768, 256); + printf("thash: %s\n", thash.ToString().c_str()); + printf("hashTarget: %s\n", hashTarget.ToString().c_str()); + }else{ + scrypt_N_1_1_256_sp_generic(BEGIN(pblock->nVersion), BEGIN(thash), scratchpad, GetNfactor(pblock->nTime)); + } if (thash <= hashTarget) @@ -6266,7 +6306,7 @@ void static ScryptMiner(CWallet *pwallet) if (GetTime() - nLogTime > 30 * 60) { nLogTime = GetTime(); - printf("hashmeter %6.0f khash/s\n", dHashesPerSec/1000.0); + printf("hashmeter %f hash/s\n", dHashesPerSec); } } } @@ -6324,6 +6364,8 @@ void GenerateBitcoins(bool fGenerate, CWallet* pwallet) minerThreads->create_thread(boost::bind(&ScryptMiner, pwallet)); } + + // Amount compression: // * If the amount is 0, output 0 // * first, divide the amount (in base units) by the largest power of 10 possible; call the exponent e (e is max 9) diff --git a/src/main.h b/src/main.h index 6257023b84..c15232fb4d 100755 --- a/src/main.h +++ b/src/main.h @@ -9,8 +9,8 @@ #include "sync.h" #include "net.h" #include "script.h" -#include "Lyra2.h" #include "scrypt.h" +#include "Lyra2.h" #include "libzerocoin/Zerocoin.h" #include "db.h" @@ -61,7 +61,7 @@ static const int64 DUST_HARD_LIMIT = 1000; // 0.00001 XZC mininput static const int64 MAX_MONEY = 21000000 * COIN; inline bool MoneyRange(int64 nValue) { return (nValue >= 0 && nValue <= MAX_MONEY); } /** Coinbase transaction outputs can only be spent after this number of new blocks (network rule) */ -static const int COINBASE_MATURITY = 100; +static const int COINBASE_MATURITY = 1; /** Threshold for nLockTime: below this value it is interpreted as block number, otherwise as UNIX timestamp. */ static const unsigned int LOCKTIME_THRESHOLD = 500000000; // Tue Nov 5 00:53:20 1985 UTC /** Maximum number of script-checking threads allowed */ @@ -198,8 +198,6 @@ bool AbortNode(const std::string &msg); /** Get block reward */ int64 static GetBlockValue(int nHeight, int64 nFees, unsigned int nTime); - - bool GetWalletFile(CWallet* pwallet, std::string &strWalletFileOut); struct CDiskBlockPos @@ -1355,12 +1353,17 @@ class CBlockHeader return nVersion / BLOCK_VERSION_CHAIN_START; } - uint256 GetPoWHash() const + uint256 GetPoWHash(int height) const { uint256 thash; - scrypt_N_1_1_256(BEGIN(nVersion), BEGIN(thash), GetNfactor(nTime)); - + if( !fTestNet && height >= 500){ + LYRA2(BEGIN(thash), 32, BEGIN(nVersion), 80, BEGIN(nVersion), 80, 2, 32768, 256); + }else if(fTestNet && height >= 138){ + LYRA2(BEGIN(thash), 32, BEGIN(nVersion), 80, BEGIN(nVersion), 80, 2, 32768, 256); + }else{ + scrypt_N_1_1_256(BEGIN(nVersion), BEGIN(thash), GetNfactor(nTime)); + } return thash; } @@ -1542,7 +1545,7 @@ class CBlock : public CBlockHeader } // Check the header - if (!::CheckProofOfWork(GetPoWHash(), nBits)) + if (!::CheckProofOfWork(GetPoWHash(LastHeight + 1), nBits)) return error("CBlock::ReadFromDisk() : errors in block header"); return true; @@ -1555,7 +1558,7 @@ class CBlock : public CBlockHeader printf("CBlock(hash=%s, input=%s, PoW=%s, ver=%d, hashPrevBlock=%s, hashMerkleRoot=%s, nTime=%u, nBits=%08x, nNonce=%u, vtx=%"PRIszu")\n", GetHash().ToString().c_str(), HexStr(BEGIN(nVersion),BEGIN(nVersion)+80,false).c_str(), - GetPoWHash().ToString().c_str(), + GetPoWHash(LastHeight + 1).ToString().c_str(), nVersion, hashPrevBlock.ToString().c_str(), hashMerkleRoot.ToString().c_str(), diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index 923909f555..54b27d2597 100755 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -53,7 +53,7 @@ Object blockToJSON(const CBlock& block, const CBlockIndex* blockindex) { Object result; result.push_back(Pair("hash", block.GetHash().GetHex())); - result.push_back(Pair("pow_hash", block.GetPoWHash().GetHex())); + result.push_back(Pair("pow_hash", block.GetPoWHash(blockindex->nHeight).GetHex())); CMerkleTx txGen(block.vtx[0]); txGen.SetMerkleBranch(&block); result.push_back(Pair("confirmations", (int)txGen.GetDepthInMainChain())); @@ -84,7 +84,7 @@ Object blockToJSON(const CBlock& block, const CBlockIndex* blockindex) Object parent_block; parent_block.push_back(Pair("hash", block.auxpow->parentBlockHeader.GetHash().GetHex())); - parent_block.push_back(Pair("pow_hash", block.auxpow->parentBlockHeader.GetPoWHash().GetHex())); + parent_block.push_back(Pair("pow_hash", block.auxpow->parentBlockHeader.GetPoWHash(blockindex->nHeight).GetHex())); parent_block.push_back(Pair("version", (boost::uint64_t)block.auxpow->parentBlockHeader.nVersion)); parent_block.push_back(Pair("previousblockhash", block.auxpow->parentBlockHeader.hashPrevBlock.GetHex())); parent_block.push_back(Pair("merkleroot", block.auxpow->parentBlockHeader.hashMerkleRoot.GetHex())); diff --git a/src/version.h b/src/version.h index fa52c1828b..92593886bc 100755 --- a/src/version.h +++ b/src/version.h @@ -25,13 +25,13 @@ extern const std::string CLIENT_DATE; // network protocol versioning // -static const int PROTOCOL_VERSION = 90013; +static const int PROTOCOL_VERSION = 90014; // intial proto version, to be increased after version/verack negotiation static const int INIT_PROTO_VERSION = 90013; // disconnect from peers older than this proto version -static const int MIN_PEER_PROTO_VERSION = 90013; +static const int MIN_PEER_PROTO_VERSION = 90014; // nTime field added to CAddress, starting with this version; // if possible, avoid requesting addresses nodes older than this diff --git a/zcoin-qt b/zcoin-qt new file mode 100755 index 0000000000..a543f6cac6 Binary files /dev/null and b/zcoin-qt differ diff --git a/zcoin.pro b/zcoin.pro index 19203c5d6e..aaab235d6a 100755 --- a/zcoin.pro +++ b/zcoin.pro @@ -212,6 +212,8 @@ HEADERS += src/qt/bitcoingui.h \ src/ui_interface.h \ src/qt/rpcconsole.h \ src/scrypt.h \ + src/Lyra2.h \ + src/Sponge.h \ src/version.h \ src/netbase.h \ src/clientversion.h \ @@ -230,9 +232,7 @@ HEADERS += src/qt/bitcoingui.h \ src/libzerocoin/Params.h \ src/libzerocoin/SerialNumberSignatureOfKnowledge.h \ src/libzerocoin/SpendMetaData.h \ - src/libzerocoin/Zerocoin.h \ - src/Lyra2.h \ - src/Sponge.h + src/libzerocoin/Zerocoin.h @@ -258,8 +258,6 @@ SOURCES += src/qt/bitcoin.cpp \ src/netbase.cpp \ src/key.cpp \ src/script.cpp \ - src/Lyra2.c \ - src/Sponge.c \ src/main.cpp \ src/init.cpp \ src/net.cpp \ @@ -305,6 +303,8 @@ SOURCES += src/qt/bitcoin.cpp \ src/qt/paymentserver.cpp \ src/qt/rpcconsole.cpp \ src/scrypt.cpp \ + src/Lyra2.c \ + src/Sponge.c \ src/noui.cpp \ src/leveldb.cpp \ src/txdb.cpp \ diff --git a/zcoin.pro.user b/zcoin.pro.user index 2fb1ec9998..002b88a3e2 100644 --- a/zcoin.pro.user +++ b/zcoin.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId