From f9e60660f0ddadc9df7c2902e3ee242b8aa5cabd Mon Sep 17 00:00:00 2001 From: Artem Pikulin Date: Mon, 5 Nov 2018 15:12:11 +0700 Subject: [PATCH 01/42] #213 Cache address tx history for listtransactions RPC call. --- iguana/exchanges/LP_coins.c | 1 + iguana/exchanges/LP_include.h | 15 ++- iguana/exchanges/LP_rpc.c | 7 +- iguana/exchanges/LP_socket.c | 168 ++++++++++++++++++++++++++++++++++ 4 files changed, 188 insertions(+), 3 deletions(-) diff --git a/iguana/exchanges/LP_coins.c b/iguana/exchanges/LP_coins.c index dac5db200..823d3982e 100644 --- a/iguana/exchanges/LP_coins.c +++ b/iguana/exchanges/LP_coins.c @@ -368,6 +368,7 @@ struct iguana_info *LP_coinadd(struct iguana_info *cdata) portable_mutex_init(&coin->txmutex); portable_mutex_init(&coin->addrmutex); portable_mutex_init(&coin->addressutxo_mutex); + portable_mutex_init(&coin->tx_history_mutex); portable_mutex_lock(&LP_coinmutex); HASH_ADD_KEYPTR(hh,LP_coins,coin->symbol,strlen(coin->symbol),coin); portable_mutex_unlock(&LP_coinmutex); diff --git a/iguana/exchanges/LP_include.h b/iguana/exchanges/LP_include.h index f7271af19..158d55217 100644 --- a/iguana/exchanges/LP_include.h +++ b/iguana/exchanges/LP_include.h @@ -319,10 +319,20 @@ struct LP_transaction struct LP_outpoint outpoints[]; }; +struct LP_tx_history_item +{ + struct LP_tx_history_item *next,*prev; + char address[50],category[10],blockhash[70],txid[70]; + double_t amount; + uint32_t vout,blockindex,blocktime,time; +}; + struct iguana_info { UT_hash_handle hh; - portable_mutex_t txmutex,addrmutex,addressutxo_mutex; struct LP_transaction *transactions; struct LP_address *addresses; + portable_mutex_t txmutex,addrmutex,addressutxo_mutex,tx_history_mutex; + struct LP_transaction *transactions; + struct LP_address *addresses; uint64_t txfee,do_autofill_merge; int32_t numutxos,notarized,longestchain,firstrefht,firstscanht,lastscanht,height; uint16_t busport,did_addrutxo_reset; uint32_t txversion,dPoWtime,lastautosplit,lastresetutxo,loadedcache,electrumlist,lastunspent,importedprivkey,lastpushtime,lastutxosync,addr_listunspent_requested,lastutxos,updaterate,counter,inactive,lastmempool,lastgetinfo,ratetime,heighttime,lastmonitor,obooktime; @@ -337,6 +347,7 @@ struct iguana_info void *curl_handle; portable_mutex_t curl_mutex; bits256 cachedtxid,notarizationtxid; uint8_t *cachedtxiddata; int32_t cachedtxidlen; bits256 cachedmerkle,notarizedhash; int32_t cachedmerkleheight; + struct LP_tx_history_item *tx_history; }; struct _LP_utxoinfo { bits256 txid; uint64_t value; int32_t height; uint32_t vout:30,suppress:1,pad:1; }; @@ -612,5 +623,5 @@ int bech32_decode(char *hrp,uint8_t *data,int32_t *data_len,const char *input); int bech32_encode(char *output,const char *hrp,const uint8_t *data,int32_t data_len); void HashGroestl(void * buf, const void * pbegin, int len); bits256 LP_privkey(char *symbol,char *coinaddr,uint8_t taddr); - +cJSON *electrum_address_history_cached(struct iguana_info *coin); #endif diff --git a/iguana/exchanges/LP_rpc.c b/iguana/exchanges/LP_rpc.c index 8979239fd..21b64fe52 100644 --- a/iguana/exchanges/LP_rpc.c +++ b/iguana/exchanges/LP_rpc.c @@ -535,6 +535,9 @@ cJSON *LP_listtransactions(char *symbol,char *coinaddr,int32_t count,int32_t ski if ( coin == 0 || (IAMLP == 0 && coin->inactive != 0) ) return(cJSON_Parse("{\"error\":\"no coin\"}")); memset(zero.bytes,0,sizeof(zero)); + if (coinaddr == NULL) { + coinaddr = coin->smartaddr; + } if ( coin->electrum == 0 ) { if ( count == 0 ) @@ -555,7 +558,9 @@ cJSON *LP_listtransactions(char *symbol,char *coinaddr,int32_t count,int32_t ski free_json(array); } return(retjson); - } else return(electrum_address_gethistory(symbol,coin->electrum,&retjson,coinaddr,zero)); + } else { + return(electrum_address_history_cached(coin)); + } } int64_t LP_listunspent_parseitem(struct iguana_info *coin,bits256 *txidp,int32_t *voutp,int32_t *heightp,cJSON *item) diff --git a/iguana/exchanges/LP_socket.c b/iguana/exchanges/LP_socket.c index 789b114ea..0c838808a 100644 --- a/iguana/exchanges/LP_socket.c +++ b/iguana/exchanges/LP_socket.c @@ -562,6 +562,17 @@ cJSON *electrum_strarg(char *symbol,struct electrum_info *ep,cJSON **retjsonp,ch } else return(0); } +cJSON *electrum_jsonarg(char *symbol,struct electrum_info *ep,cJSON **retjsonp,char *method,cJSON *arg,int32_t timeout) +{ + cJSON *retjson; + if ( arg != NULL ) + { + if ( retjsonp == 0 ) + retjsonp = &retjson; + return(electrum_submit(symbol,ep,retjsonp,method,jprint(arg,0),timeout)); + } else return(0); +} + cJSON *electrum_intarg(char *symbol,struct electrum_info *ep,cJSON **retjsonp,char *method,int32_t arg,int32_t timeout) { char params[64]; cJSON *retjson; @@ -1197,6 +1208,145 @@ void LP_dedicatedloop(void *arg) //free(ep); } +cJSON *tx_history_to_json(struct LP_tx_history_item *item, struct iguana_info *coin) { + cJSON *json = cJSON_CreateObject(); + jaddstr(json, "txid", item->txid); + jaddstr(json, "category", item->category); + jaddnum(json, "amount", item->amount); + jaddstr(json, "blockhash", item->blockhash); + jaddnum(json, "blockindex", item->blockindex); + jaddnum(json, "blocktime", item->blocktime); + jaddnum(json, "time", item->time); + if (item->blockindex > 0) { + jaddnum(json, "confirmations", coin->height - item->blockindex + 1); + } else { + jaddnum(json, "confirmations", 0); + } + return json; +} + +int it_cmp(struct LP_tx_history_item *item1, struct LP_tx_history_item *item2) { + return(item1->time < item2->time); +} + +void LP_electrum_txhistory_loop(void *_coin) +{ + struct iguana_info *coin = _coin; + while (coin != NULL && coin->electrum != NULL && coin->inactive == 0) { + cJSON *history = cJSON_CreateObject(); + if (strcmp(coin->symbol, "BCH") == 0) { + electrum_scripthash_cmd(coin->symbol, coin->taddr, coin->electrum, &history, "get_history", + coin->smartaddr); + } else { + electrum_strarg(coin->symbol, coin->electrum, &history, "blockchain.address.get_history", coin->smartaddr, + ELECTRUM_TIMEOUT); + } + if (jobj(history, "error") != NULL) { + printf("Error getting electrum history %s\n", jprint(history, 1)); + sleep(10); + continue; + } + int history_size = cJSON_GetArraySize(history); + for (int i = history_size - 1; i >= 0; i--) { + cJSON *history_item = jitem(history, i); + cJSON *tx_item = cJSON_CreateObject(); + char *tx_hash = jstr(history_item, "tx_hash"); + struct LP_tx_history_item *iter; + int found = 0; + int confirmed = 0; + DL_FOREACH(coin->tx_history, iter) { + if (strcmp(iter->txid, tx_hash) == 0) { + found = 1; + if (iter->blockindex > 0) { + confirmed = 1; + } + break; + } + } + struct LP_tx_history_item *item; + if (!found) { + // allocate new if not found + item = malloc(sizeof(struct LP_tx_history_item)); + memset(item, 0, sizeof(struct LP_tx_history_item)); + } else if (confirmed == 0) { + // update existing if found and not confirmed + item = iter; + } else { + continue; + } + + cJSON *params = cJSON_CreateArray(); + jaddistr(params, tx_hash); + jaddi(params, cJSON_CreateBool(cJSON_True)); + while(1) { + electrum_jsonarg(coin->symbol, coin->electrum, &tx_item, "blockchain.transaction.get", params, + ELECTRUM_TIMEOUT); + if (jobj(tx_item, "error") != NULL) { + printf("Error getting electrum tx %s %s\n", jstri(params, 0), jprint(tx_item, 1)); + tx_item = cJSON_CreateObject(); + sleep(5); + continue; + } else { + break; + } + } + free_json(params); + if (!found) { + strcpy(item->txid, jstr(tx_item, "txid")); + // receive by default, but if at least 1 vin contains our address the category is send + strcpy(item->category, "receive"); + cJSON *vin = jobj(tx_item, "vin"); + for (int j = 0; j < cJSON_GetArraySize(vin); j++) { + cJSON *vin_item = jitem(vin, j); + if (strcmp(coin->smartaddr, jstr(vin_item, "address")) == 0) { + strcpy(item->category, "send"); + break; + } + } + int size = 0; + cJSON *vout = jarray(&size, tx_item, "vout"); + for (int k = 0; k < size; k++) { + cJSON *vout_item = jitem(vout, k); + int addresses_size = 0; + cJSON *addresses = jarray(&addresses_size, jobj(vout_item, "scriptPubKey"), "addresses"); + for (int z = 0; z < addresses_size; z++) { + if (strcmp(coin->smartaddr, jstri(addresses, z)) == 0) { + if (strcmp(item->category, "receive") == 0) { + item->amount += jdouble(vout_item, "value"); + } + } else { + if (strcmp(item->category, "send") == 0) { + item->amount -= jdouble(vout_item, "value"); + } + } + } + } + } + if (juint(history_item, "height") > 0) { + item->time = juint(tx_item, "time"); + strcpy(item->blockhash, jstr(tx_item, "blockhash")); + item->blockindex = juint(tx_item, "height"); + item->blocktime = juint(tx_item, "blocktime"); + } else { + // set current time temporary until confirmed + item->time = (uint32_t)time(NULL); + printf("Pending tx item %s\n", jprint(tx_item, 0)); + } + if (!found) { + DL_APPEND(coin->tx_history, item); + } + free_json(tx_item); + } + int (*ptr)(struct LP_tx_history_item*, struct LP_tx_history_item*) = &it_cmp; + // we don't want the history to be accessed while sorting + portable_mutex_lock(&coin->tx_history_mutex); + DL_SORT(coin->tx_history, ptr); + portable_mutex_unlock(&coin->tx_history_mutex); + free_json(history); + sleep(10); + } +} + cJSON *LP_electrumserver(struct iguana_info *coin,char *ipaddr,uint16_t port) { struct electrum_info *ep,*prev,*cur; int32_t kickval,already; cJSON *retjson,*array,*item; @@ -1291,6 +1441,24 @@ cJSON *LP_electrumserver(struct iguana_info *coin,char *ipaddr,uint16_t port) cJSON_Delete(balance); } #endif + if (coin->electrum != 0 && cur == 0) { + if ( OS_thread_create(malloc(sizeof(pthread_t)),NULL,(void *)LP_electrum_txhistory_loop,(void *)coin) != 0 ) + { + printf("error launching LP_electrum_tx_history_loop %s.(%s:%u)\n",coin->symbol,ep->ipaddr,ep->port); + jaddstr(retjson,"error","couldnt launch electrum tx history thread"); + } + } //printf("(%s)\n",jprint(retjson,0)); return(retjson); } + +cJSON *electrum_address_history_cached(struct iguana_info *coin) { + cJSON *retjson = cJSON_CreateArray(); + struct LP_tx_history_item *item; + portable_mutex_lock(&coin->tx_history_mutex); + DL_FOREACH(coin->tx_history, item) { + jaddi(retjson, tx_history_to_json(item, coin)); + } + portable_mutex_unlock(&coin->tx_history_mutex); + return retjson; +} From 7b601e016cc9852b9db404ff1ed5652534e93010 Mon Sep 17 00:00:00 2001 From: Artem Pikulin Date: Mon, 5 Nov 2018 15:17:50 +0700 Subject: [PATCH 02/42] Remove debug printf. --- iguana/exchanges/LP_socket.c | 1 - 1 file changed, 1 deletion(-) diff --git a/iguana/exchanges/LP_socket.c b/iguana/exchanges/LP_socket.c index 0c838808a..e0c2ea225 100644 --- a/iguana/exchanges/LP_socket.c +++ b/iguana/exchanges/LP_socket.c @@ -1330,7 +1330,6 @@ void LP_electrum_txhistory_loop(void *_coin) } else { // set current time temporary until confirmed item->time = (uint32_t)time(NULL); - printf("Pending tx item %s\n", jprint(tx_item, 0)); } if (!found) { DL_APPEND(coin->tx_history, item); From a4ff8b4d900664b3e7dafe3ab20419df05e30280 Mon Sep 17 00:00:00 2001 From: Artem Pikulin Date: Mon, 5 Nov 2018 18:44:24 +0700 Subject: [PATCH 03/42] Allocate buffer for Sapling outputs dynamically. Thx Decker. --- iguana/exchanges/LP_bitcoin.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/iguana/exchanges/LP_bitcoin.c b/iguana/exchanges/LP_bitcoin.c index 80f6a3813..4a3830093 100644 --- a/iguana/exchanges/LP_bitcoin.c +++ b/iguana/exchanges/LP_bitcoin.c @@ -3494,8 +3494,13 @@ bits256 bitcoin_sigtxid(char *symbol,uint8_t taddr,uint8_t pubtype,uint8_t p2sht memcpy(&for_sig_hash[len], sequence_hash, 32); len += 32; - uint8_t outputs[1000], hash_outputs[32]; + uint8_t *outputs, hash_outputs[32]; int32_t outputs_len = 0; + for (i = 0; i < dest.tx_out; i++) { // calc size for outputs buffer + outputs_len += sizeof(dest.vouts[i].value); outputs_len++; outputs_len += dest.vouts[i].pk_scriptlen; + } + outputs = malloc(outputs_len); + outputs_len = 0; for (i = 0; i < dest.tx_out; i++) { outputs_len += iguana_rwnum(1, &outputs[outputs_len], sizeof(dest.vouts[i].value), &dest.vouts[i].value); outputs[outputs_len++] = (uint8_t) dest.vouts[i].pk_scriptlen; @@ -3516,6 +3521,8 @@ bits256 bitcoin_sigtxid(char *symbol,uint8_t taddr,uint8_t pubtype,uint8_t p2sht memcpy(&for_sig_hash[len], hash_outputs, 32); len += 32; + free(outputs); + // no join splits, fill the hashJoinSplits with 32 zeros memset(&for_sig_hash[len], 0, 32); len += 32; From d2057887771e4a6f9a96f6fae12318872d9e3bed Mon Sep 17 00:00:00 2001 From: Artem Pikulin Date: Tue, 6 Nov 2018 19:19:44 +0700 Subject: [PATCH 04/42] #213 Add tx history cache for ETH/ERC20 (getting from Etherscan). --- iguana/exchanges/LP_commands.c | 10 +++ iguana/exchanges/LP_etomic.c | 103 +++++++++++++++++++++- iguana/exchanges/LP_etomic.h | 2 + iguana/exchanges/LP_include.h | 3 +- iguana/exchanges/LP_rpc.c | 4 +- iguana/exchanges/LP_socket.c | 10 ++- iguana/exchanges/etomicswap/etomiccurl.c | 66 ++++++++++++-- iguana/exchanges/etomicswap/etomiccurl.h | 15 ++-- iguana/exchanges/etomicswap/etomiclib.cpp | 9 +- iguana/exchanges/etomicswap/etomiclib.h | 2 +- 10 files changed, 200 insertions(+), 24 deletions(-) diff --git a/iguana/exchanges/LP_commands.c b/iguana/exchanges/LP_commands.c index 1c77bc4f7..2369ef698 100644 --- a/iguana/exchanges/LP_commands.c +++ b/iguana/exchanges/LP_commands.c @@ -634,6 +634,8 @@ version\n\ if (ptr->decimals == 0) { return(clonestr("{\"error\":\"Could not get token decimals or token has zero decimals which is not supported!\"}")); } + } else if (strcmp(coin, "ETH") == 0) { + ptr->decimals = 18; } } #endif @@ -641,6 +643,14 @@ version\n\ { cJSON *array; ptr->inactive = 0; +#ifndef NOTETOMIC + if (ptr->etomic[0] != 0 && OS_thread_create(malloc(sizeof(pthread_t)),NULL,(void *)LP_etomic_txhistory_loop,(void *)ptr) != 0 ) + { + printf("error launching LP_etomic_txhistory_loop %s\n",ptr->symbol); + ptr->inactive = (uint32_t)time(NULL); + return(clonestr("{\"error\":\"couldnt launch tx history thread\"}")); + } +#endif LP_unspents_load(coin,ptr->smartaddr); if ( strcmp(ptr->symbol,"KMD") == 0 ) LP_importaddress("KMD",BOTS_BONDADDRESS); diff --git a/iguana/exchanges/LP_etomic.c b/iguana/exchanges/LP_etomic.c index 2964ea03d..6fb8de386 100644 --- a/iguana/exchanges/LP_etomic.c +++ b/iguana/exchanges/LP_etomic.c @@ -73,7 +73,7 @@ uint8_t LP_etomic_verify_alice_fee(struct basilisk_swap *swap) printf("Alice fee %s was sent to wrong address %s\n", swap->otherfee.I.ethTxid, data.to); return(0); } - uint64_t txValue = weiToSatoshi(data.valueHex); + uint64_t txValue = weiToSatoshi(data.valueHex, 18); if (txValue != LP_DEXFEE(swap->I.alicerealsat)) { printf("Alice fee %s amount %" PRIu64 " is not equal to expected %" PRId64 "\n", swap->otherfee.I.ethTxid, txValue, LP_DEXFEE(swap->I.alicerealsat)); return(0); @@ -170,7 +170,7 @@ uint8_t LP_etomic_verify_alice_payment(struct basilisk_swap *swap, char *txId) } AliceSendsEthPaymentInput input; AliceSendsErc20PaymentInput input20; if ( strcmp(swap->I.alicestr,"ETH") == 0 ) { - uint64_t paymentAmount = weiToSatoshi(data.valueHex); + uint64_t paymentAmount = weiToSatoshi(data.valueHex, 18); if (paymentAmount != swap->I.alicerealsat) { printf("Alice payment amount %" PRIu64 " does not match expected %" PRIu64 "\n", paymentAmount, swap->I.alicerealsat); return(0); @@ -380,7 +380,7 @@ uint8_t LP_etomic_verify_bob_deposit(struct basilisk_swap *swap, char *txId) memset(&input,0,sizeof(input)); memset(&input20,0,sizeof(input20)); if ( strcmp(swap->I.bobstr,"ETH") == 0 ) { - uint64_t depositAmount = weiToSatoshi(data.valueHex); + uint64_t depositAmount = weiToSatoshi(data.valueHex, 18); if (depositAmount != LP_DEPOSITSATOSHIS(swap->I.bobrealsat)) { printf("Bob deposit %s amount %" PRIu64 " != expected %" PRIu64 "\n", txId, depositAmount, LP_DEPOSITSATOSHIS(swap->I.bobrealsat)); return(0); @@ -534,7 +534,7 @@ uint8_t LP_etomic_verify_bob_payment(struct basilisk_swap *swap, char *txId) memset(&input,0,sizeof(input)); memset(&input20,0,sizeof(input20)); if ( strcmp(swap->I.bobstr,"ETH") == 0 ) { - uint64_t paymentAmount = weiToSatoshi(data.valueHex); + uint64_t paymentAmount = weiToSatoshi(data.valueHex, 18); if (paymentAmount != swap->I.bobrealsat) { printf("Bob payment %s amount %" PRIu64 " != expected %" PRIu64 "\n", txId, paymentAmount, swap->I.bobrealsat); return(0); @@ -785,3 +785,98 @@ uint64_t LP_etomic_get_balance(struct iguana_info *coin, char *coinaddr, int *er return getErc20BalanceSatoshi(coinaddr, coin->etomic, coin->decimals, error); } } + +void LP_etomic_process_tx_history_json(struct iguana_info *coin, cJSON *transactions) { + int history_size = cJSON_GetArraySize(transactions); + struct LP_tx_history_item *iter; + for (int i = history_size - 1; i >= 0; i--) { + cJSON *transaction = jitem(transactions, i); + char *tx_hash = jstr(transaction, "hash"); + int found = 0; + portable_mutex_lock(&coin->tx_history_mutex); + DL_FOREACH(coin->tx_history, iter) { + if (strcmp(iter->txid, tx_hash) == 0) { + found = 1; + break; + } + } + portable_mutex_unlock(&coin->tx_history_mutex); + if (found || juint(transaction, "confirmations") == 0) { + continue; + } + struct LP_tx_history_item *item = malloc(sizeof(struct LP_tx_history_item)); + memset(item, 0, sizeof(struct LP_tx_history_item));; + + strcpy(item->txid, jstr(transaction, "hash")); + strcpy(item->category, "receive"); + if (compareAddresses(coin->smartaddr, jstr(transaction, "from"))) { + strcpy(item->category, "send"); + } + if (strcmp(item->category, "receive") == 0) { + item->amount = dstr(weiToSatoshi(jstr(transaction, "value"), coin->decimals)); + } else { + item->amount = 0. - dstr(weiToSatoshi(jstr(transaction, "value"), coin->decimals)); + } + item->time = juint(transaction, "timestamp"); + strcpy(item->blockhash, jstr(transaction, "blockHash")); + item->blockindex = juint(transaction, "blockNumber"); + item->blocktime = juint(transaction, "timestamp"); + portable_mutex_lock(&coin->tx_history_mutex); + DL_APPEND(coin->tx_history, item); + portable_mutex_unlock(&coin->tx_history_mutex); + } +} + +void LP_etomic_txhistory_loop(void *_coin) +{ + struct iguana_info *coin = _coin; + if (coin->etomic[0] == 0) { + printf("Calling ETOMIC tx history loop for non-ETOMIC coin %s\n", coin->symbol); + return; + } + + while (coin != NULL && coin->inactive == 0) { + coin->height = (int32_t) getEthBlockNumber(); + char *result; + cJSON *json; + if (strcmp(coin->symbol, "ETH") == 0) { + // process standard transfers + result = eth_tx_history_etherscan(coin->smartaddr); + if (result) { + json = cJSON_Parse(result); + if (json && is_cJSON_Array(jobj(json, "result"))) { + LP_etomic_process_tx_history_json(coin, jobj(json, "result")); + free_json(json); + } + free(result); + } + + // process "internal" transactions - transactions received during smart contract executions + // these are not added to standard list to extra processing is required + result = internal_eth_tx_history_etherscan(coin->smartaddr); + if (result) { + json = cJSON_Parse(result); + if (json && is_cJSON_Array(jobj(json, "result"))) { + LP_etomic_process_tx_history_json(coin, jobj(json, "result")); + free_json(json); + } + free(result); + } + } else { + result = erc20_tx_history_etherscan(coin->smartaddr, coin->etomic); + if (result) { + json = cJSON_Parse(result); + if (json && is_cJSON_Array(jobj(json, "result"))) { + LP_etomic_process_tx_history_json(coin, jobj(json, "result")); + free_json(json); + } + free(result); + } + } + int (*ptr)(struct LP_tx_history_item*, struct LP_tx_history_item*) = &history_item_cmp; + portable_mutex_lock(&coin->tx_history_mutex); + DL_SORT(coin->tx_history, ptr); + portable_mutex_unlock(&coin->tx_history_mutex); + sleep(30); + } +} diff --git a/iguana/exchanges/LP_etomic.h b/iguana/exchanges/LP_etomic.h index 8a744cb3d..e44ca82c0 100644 --- a/iguana/exchanges/LP_etomic.h +++ b/iguana/exchanges/LP_etomic.h @@ -53,4 +53,6 @@ uint64_t LP_etomic_get_balance(struct iguana_info *coin, char *coinaddr, int *er void LP_etomic_pubkeystr_to_addr(char *pubkey, char *output); +void LP_etomic_txhistory_loop(void *_coin); + #endif //SUPERNET_LP_ETOMIC_H diff --git a/iguana/exchanges/LP_include.h b/iguana/exchanges/LP_include.h index 158d55217..acbbe022d 100644 --- a/iguana/exchanges/LP_include.h +++ b/iguana/exchanges/LP_include.h @@ -623,5 +623,6 @@ int bech32_decode(char *hrp,uint8_t *data,int32_t *data_len,const char *input); int bech32_encode(char *output,const char *hrp,const uint8_t *data,int32_t data_len); void HashGroestl(void * buf, const void * pbegin, int len); bits256 LP_privkey(char *symbol,char *coinaddr,uint8_t taddr); -cJSON *electrum_address_history_cached(struct iguana_info *coin); +cJSON *address_history_cached(struct iguana_info *coin); +int history_item_cmp(struct LP_tx_history_item *item1, struct LP_tx_history_item *item2); #endif diff --git a/iguana/exchanges/LP_rpc.c b/iguana/exchanges/LP_rpc.c index 21b64fe52..ddc3bf7dd 100644 --- a/iguana/exchanges/LP_rpc.c +++ b/iguana/exchanges/LP_rpc.c @@ -538,7 +538,7 @@ cJSON *LP_listtransactions(char *symbol,char *coinaddr,int32_t count,int32_t ski if (coinaddr == NULL) { coinaddr = coin->smartaddr; } - if ( coin->electrum == 0 ) + if ( coin->electrum == 0 && (coin->etomic == 0 || coin->etomic[0] == 0)) { if ( count == 0 ) count = 10; @@ -559,7 +559,7 @@ cJSON *LP_listtransactions(char *symbol,char *coinaddr,int32_t count,int32_t ski } return(retjson); } else { - return(electrum_address_history_cached(coin)); + return(address_history_cached(coin)); } } diff --git a/iguana/exchanges/LP_socket.c b/iguana/exchanges/LP_socket.c index e0c2ea225..4a3f06b97 100644 --- a/iguana/exchanges/LP_socket.c +++ b/iguana/exchanges/LP_socket.c @@ -1225,7 +1225,7 @@ cJSON *tx_history_to_json(struct LP_tx_history_item *item, struct iguana_info *c return json; } -int it_cmp(struct LP_tx_history_item *item1, struct LP_tx_history_item *item2) { +int history_item_cmp(struct LP_tx_history_item *item1, struct LP_tx_history_item *item2) { return(item1->time < item2->time); } @@ -1254,6 +1254,7 @@ void LP_electrum_txhistory_loop(void *_coin) struct LP_tx_history_item *iter; int found = 0; int confirmed = 0; + portable_mutex_lock(&coin->tx_history_mutex); DL_FOREACH(coin->tx_history, iter) { if (strcmp(iter->txid, tx_hash) == 0) { found = 1; @@ -1263,6 +1264,7 @@ void LP_electrum_txhistory_loop(void *_coin) break; } } + portable_mutex_unlock(&coin->tx_history_mutex); struct LP_tx_history_item *item; if (!found) { // allocate new if not found @@ -1332,11 +1334,13 @@ void LP_electrum_txhistory_loop(void *_coin) item->time = (uint32_t)time(NULL); } if (!found) { + portable_mutex_lock(&coin->tx_history_mutex); DL_APPEND(coin->tx_history, item); + portable_mutex_unlock(&coin->tx_history_mutex); } free_json(tx_item); } - int (*ptr)(struct LP_tx_history_item*, struct LP_tx_history_item*) = &it_cmp; + int (*ptr)(struct LP_tx_history_item*, struct LP_tx_history_item*) = &history_item_cmp; // we don't want the history to be accessed while sorting portable_mutex_lock(&coin->tx_history_mutex); DL_SORT(coin->tx_history, ptr); @@ -1451,7 +1455,7 @@ cJSON *LP_electrumserver(struct iguana_info *coin,char *ipaddr,uint16_t port) return(retjson); } -cJSON *electrum_address_history_cached(struct iguana_info *coin) { +cJSON *address_history_cached(struct iguana_info *coin) { cJSON *retjson = cJSON_CreateArray(); struct LP_tx_history_item *item; portable_mutex_lock(&coin->tx_history_mutex); diff --git a/iguana/exchanges/etomicswap/etomiccurl.c b/iguana/exchanges/etomicswap/etomiccurl.c index a547111e0..62393c4cc 100644 --- a/iguana/exchanges/etomicswap/etomiccurl.c +++ b/iguana/exchanges/etomicswap/etomiccurl.c @@ -54,7 +54,7 @@ cJSON *parseEthRpcResponse(char *requestResult) return result; } -char* sendRequest(char *request, char *url) +char *send_post_json_request(char *request, char *url) { CURL *curl; CURLcode res; @@ -89,16 +89,51 @@ char* sendRequest(char *request, char *url) } } +char *send_get_json_request(char *url) +{ + CURL *curl; + CURLcode res; + struct curl_slist *headers = NULL; + curl = curl_easy_init(); + if (curl) { + struct string s; + init_eth_string(&s); + + headers = curl_slist_append(headers, "Accept: application/json"); + curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writefunc); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &s); + curl_easy_setopt(curl, CURLOPT_URL, url); + /* Perform the request, res will get the return code */ + res = curl_easy_perform(curl); + /* Check for errors */ + if (res != CURLE_OK) { + printf("curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); + curl_easy_cleanup(curl); + return NULL; + } + + /* always cleanup */ + curl_easy_cleanup(curl); + return s.ptr; + } else { + printf("Couldn't init the curl\n"); + return NULL; + } +} + cJSON *sendRpcRequest(char *method, cJSON *params) { char* string; cJSON *request = cJSON_CreateObject(); cJSON_AddStringToObject(request, "jsonrpc", "2.0"); cJSON_AddStringToObject(request, "method", method); - cJSON_AddItemToObject(request, "params", cJSON_Duplicate(params, 1)); + if (params) { + cJSON_AddItemToObject(request, "params", cJSON_Duplicate(params, 1)); + } cJSON_AddNumberToObject(request, "id", 1); string = cJSON_PrintUnformatted(request); - char* requestResult = sendRequest(string, ETOMIC_URL); + char* requestResult = send_post_json_request(string, ETOMIC_URL); free(string); cJSON_Delete(request); cJSON *result = parseEthRpcResponse(requestResult); @@ -350,7 +385,7 @@ int32_t waitForConfirmation(char *txId) if (txData.exists == 0) { retries++; if (retries >= 30) { - printf("Have not found ETH tx %s after 10 checks, aborting\n", txId); + printf("Have not found ETH tx %s after 30 checks, aborting\n", txId); return (-1); } } @@ -380,7 +415,7 @@ uint8_t get_etomic_from_faucet(char *etomic_addr) cJSON *request = cJSON_CreateObject(); cJSON_AddStringToObject(request, "etomicAddress", etomic_addr); string = cJSON_PrintUnformatted(request); - char* requestResult = sendRequest(string, FAUCET_URL); + char* requestResult = send_post_json_request(string, FAUCET_URL); free(string); cJSON_Delete(request); @@ -405,3 +440,24 @@ uint8_t get_etomic_from_faucet(char *etomic_addr) cJSON_Delete(json); return result; } + +char *eth_tx_history_etherscan(char *addr) +{ + char resulting_url[4097]; + sprintf(resulting_url, "%s?module=account&action=txlist&address=%s&startblock=0&endblock=99999999&sort=asc", ETHERSCAN_API, addr); + return send_get_json_request(resulting_url); +} + +char *internal_eth_tx_history_etherscan(char *addr) +{ + char resulting_url[4097]; + sprintf(resulting_url, "%s?module=account&action=txlistinternal&address=%s&startblock=0&endblock=99999999&sort=asc", ETHERSCAN_API, addr); + return send_get_json_request(resulting_url); +} + +char *erc20_tx_history_etherscan(char *addr, char *token_address) +{ + char resulting_url[4097]; + sprintf(resulting_url, "%s?module=account&action=tokentx&address=%s&contractaddress=%s&startblock=0&endblock=99999999&sort=asc", ETHERSCAN_API, addr, token_address); + return send_get_json_request(resulting_url); +} diff --git a/iguana/exchanges/etomicswap/etomiccurl.h b/iguana/exchanges/etomicswap/etomiccurl.h index 2b765b150..53bd174b7 100644 --- a/iguana/exchanges/etomicswap/etomiccurl.h +++ b/iguana/exchanges/etomicswap/etomiccurl.h @@ -14,9 +14,11 @@ extern "C"{ #ifdef ETOMIC_TESTNET #define ETOMIC_URL "http://195.201.0.6:8545" #define DEFAULT_GAS_PRICE 100 +#define ETHERSCAN_API "https://ropsten.etherscan.io/api" #else #define ETOMIC_URL "http://195.201.0.6:8555" #define DEFAULT_GAS_PRICE 10 +#define ETHERSCAN_API "https://api.etherscan.io/api" #endif #define FAUCET_URL "http://195.201.116.176:8000/getEtomic" @@ -38,12 +40,12 @@ typedef struct uint8_t exists; } EthTxData; -char* sendRawTx(char* rawTx); -char* sendRawTxWaitConfirm(char* rawTx); -char* ethCall(char* to, const char* data); +char *sendRawTx(char *rawTx); +char *sendRawTxWaitConfirm(char *rawTx); +char *ethCall(char *to, const char *data); uint64_t estimateGas(char *from, char *to, const char *data); -int64_t getNonce(char* address); -char* getEthBalanceRequest(char* address); +int64_t getNonce(char *address); +char *getEthBalanceRequest(char *address); EthTxReceipt getEthTxReceipt(char *txId); EthTxData getEthTxData(char *txId); uint64_t getEthBlockNumber(); @@ -51,6 +53,9 @@ uint64_t getGasPriceFromStation(uint8_t defaultOnErr); int32_t waitForConfirmation(char *txId); void unlock_send_tx_mutex(); uint8_t get_etomic_from_faucet(char *etomic_addr); +char *eth_tx_history_etherscan(char *addr); +char *internal_eth_tx_history_etherscan(char *addr); +char *erc20_tx_history_etherscan(char *addr, char *token_address); #ifdef __cplusplus } diff --git a/iguana/exchanges/etomicswap/etomiclib.cpp b/iguana/exchanges/etomicswap/etomiclib.cpp index f80ba22f4..82e16487e 100644 --- a/iguana/exchanges/etomicswap/etomiclib.cpp +++ b/iguana/exchanges/etomicswap/etomiclib.cpp @@ -666,10 +666,13 @@ void satoshisToWei(char *dest, uint64_t input) strcat(dest, "0000000000"); } -uint64_t weiToSatoshi(char *wei) +uint64_t weiToSatoshi(char *wei, uint8_t decimals) { - u256 satoshi = jsToU256(wei) / boost::multiprecision::pow(u256(10), 10); - return static_cast(satoshi); + u256 satoshi = jsToU256(wei); + if (decimals < 18) { + satoshi = satoshi * boost::multiprecision::pow(u256(10), 18 - decimals); + } + return static_cast(satoshi / boost::multiprecision::pow(u256(10), 10)); } char *sendEth(char *to, char *amount, char *privKey, uint8_t waitConfirm, int64_t gas, int64_t gasPrice, uint8_t defaultGasOnErr) diff --git a/iguana/exchanges/etomicswap/etomiclib.h b/iguana/exchanges/etomicswap/etomiclib.h index 6075124a5..b4ec3756e 100644 --- a/iguana/exchanges/etomicswap/etomiclib.h +++ b/iguana/exchanges/etomicswap/etomiclib.h @@ -184,7 +184,7 @@ uint64_t getErc20Allowance(char *owner, char *spender, char *tokenAddress, uint8 void uint8arrayToHex(char *dest, uint8_t *input, int len); void satoshisToWei(char *dest, uint64_t input); -uint64_t weiToSatoshi(char *wei); +uint64_t weiToSatoshi(char *wei, uint8_t decimals); char *sendEth(char *to, char *amount, char *privKey, uint8_t waitConfirm, int64_t gas, int64_t gasPrice, uint8_t defaultGasOnErr); char *sendErc20( From a3e045b47328039162b3cb7f34a8022f566b300b Mon Sep 17 00:00:00 2001 From: Artem Pikulin Date: Wed, 7 Nov 2018 13:56:09 +0700 Subject: [PATCH 05/42] Fix windows build. Use precompiled libsodium. --- CMakeLists.txt | 7 +- .../Release/v140/dynamic/libsodium.dll | Bin 0 -> 281088 bytes .../Release/v140/dynamic/libsodium.exp | Bin 0 -> 97950 bytes .../Release/v140/dynamic/libsodium.lib | Bin 0 -> 163052 bytes .../Release/v140/dynamic/libsodium.pdb | Bin 0 -> 1478656 bytes OSlibs/win/libsodium/include/sodium.h | 70 +++++++ OSlibs/win/libsodium/include/sodium/core.h | 28 +++ .../include/sodium/crypto_aead_aes256gcm.h | 171 +++++++++++++++++ .../sodium/crypto_aead_chacha20poly1305.h | 174 ++++++++++++++++++ .../sodium/crypto_aead_xchacha20poly1305.h | 97 ++++++++++ .../libsodium/include/sodium/crypto_auth.h | 44 +++++ .../include/sodium/crypto_auth_hmacsha256.h | 68 +++++++ .../include/sodium/crypto_auth_hmacsha512.h | 67 +++++++ .../sodium/crypto_auth_hmacsha512256.h | 62 +++++++ .../win/libsodium/include/sodium/crypto_box.h | 173 +++++++++++++++++ .../crypto_box_curve25519xchacha20poly1305.h | 159 ++++++++++++++++ .../crypto_box_curve25519xsalsa20poly1305.h | 109 +++++++++++ .../include/sodium/crypto_core_ed25519.h | 37 ++++ .../include/sodium/crypto_core_hchacha20.h | 35 ++++ .../include/sodium/crypto_core_hsalsa20.h | 35 ++++ .../include/sodium/crypto_core_salsa20.h | 35 ++++ .../include/sodium/crypto_core_salsa2012.h | 35 ++++ .../include/sodium/crypto_core_salsa208.h | 39 ++++ .../include/sodium/crypto_generichash.h | 75 ++++++++ .../sodium/crypto_generichash_blake2b.h | 117 ++++++++++++ .../libsodium/include/sodium/crypto_hash.h | 40 ++++ .../include/sodium/crypto_hash_sha256.h | 57 ++++++ .../include/sodium/crypto_hash_sha512.h | 57 ++++++ .../win/libsodium/include/sodium/crypto_kdf.h | 51 +++++ .../include/sodium/crypto_kdf_blake2b.h | 42 +++++ .../win/libsodium/include/sodium/crypto_kx.h | 64 +++++++ .../include/sodium/crypto_onetimeauth.h | 62 +++++++ .../sodium/crypto_onetimeauth_poly1305.h | 67 +++++++ .../libsodium/include/sodium/crypto_pwhash.h | 147 +++++++++++++++ .../include/sodium/crypto_pwhash_argon2i.h | 122 ++++++++++++ .../include/sodium/crypto_pwhash_argon2id.h | 122 ++++++++++++ .../crypto_pwhash_scryptsalsa208sha256.h | 120 ++++++++++++ .../include/sodium/crypto_scalarmult.h | 45 +++++ .../sodium/crypto_scalarmult_curve25519.h | 40 ++++ .../sodium/crypto_scalarmult_ed25519.h | 41 +++++ .../include/sodium/crypto_secretbox.h | 91 +++++++++ .../crypto_secretbox_xchacha20poly1305.h | 68 +++++++ .../crypto_secretbox_xsalsa20poly1305.h | 67 +++++++ .../crypto_secretstream_xchacha20poly1305.h | 102 ++++++++++ .../include/sodium/crypto_shorthash.h | 39 ++++ .../sodium/crypto_shorthash_siphash24.h | 48 +++++ .../libsodium/include/sodium/crypto_sign.h | 103 +++++++++++ .../include/sodium/crypto_sign_ed25519.h | 114 ++++++++++++ .../crypto_sign_edwards25519sha512batch.h | 55 ++++++ .../libsodium/include/sodium/crypto_stream.h | 56 ++++++ .../include/sodium/crypto_stream_chacha20.h | 98 ++++++++++ .../include/sodium/crypto_stream_salsa20.h | 57 ++++++ .../include/sodium/crypto_stream_salsa2012.h | 50 +++++ .../include/sodium/crypto_stream_salsa208.h | 56 ++++++ .../include/sodium/crypto_stream_xchacha20.h | 57 ++++++ .../include/sodium/crypto_stream_xsalsa20.h | 57 ++++++ .../include/sodium/crypto_verify_16.h | 23 +++ .../include/sodium/crypto_verify_32.h | 23 +++ .../include/sodium/crypto_verify_64.h | 23 +++ OSlibs/win/libsodium/include/sodium/export.h | 53 ++++++ .../libsodium/include/sodium/randombytes.h | 68 +++++++ .../sodium/randombytes_salsa20_random.h | 19 ++ .../include/sodium/randombytes_sysrandom.h | 19 ++ OSlibs/win/libsodium/include/sodium/runtime.h | 52 ++++++ OSlibs/win/libsodium/include/sodium/utils.h | 170 +++++++++++++++++ OSlibs/win/libsodium/include/sodium/version.h | 33 ++++ appveyor.yml | 1 + iguana/exchanges/CMakeLists.txt | 7 +- iguana/exchanges/LP_bitcoin.c | 5 + iguana/exchanges/LP_etomic.c | 1 + iguana/exchanges/LP_socket.c | 1 + 71 files changed, 4327 insertions(+), 3 deletions(-) create mode 100644 OSlibs/win/libsodium/Release/v140/dynamic/libsodium.dll create mode 100644 OSlibs/win/libsodium/Release/v140/dynamic/libsodium.exp create mode 100644 OSlibs/win/libsodium/Release/v140/dynamic/libsodium.lib create mode 100644 OSlibs/win/libsodium/Release/v140/dynamic/libsodium.pdb create mode 100644 OSlibs/win/libsodium/include/sodium.h create mode 100644 OSlibs/win/libsodium/include/sodium/core.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_aead_aes256gcm.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_aead_chacha20poly1305.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_aead_xchacha20poly1305.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_auth.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_auth_hmacsha256.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_auth_hmacsha512.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_auth_hmacsha512256.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_box.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_box_curve25519xchacha20poly1305.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_box_curve25519xsalsa20poly1305.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_core_ed25519.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_core_hchacha20.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_core_hsalsa20.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_core_salsa20.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_core_salsa2012.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_core_salsa208.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_generichash.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_generichash_blake2b.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_hash.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_hash_sha256.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_hash_sha512.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_kdf.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_kdf_blake2b.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_kx.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_onetimeauth.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_onetimeauth_poly1305.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_pwhash.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_pwhash_argon2i.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_pwhash_argon2id.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_pwhash_scryptsalsa208sha256.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_scalarmult.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_scalarmult_curve25519.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_scalarmult_ed25519.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_secretbox.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_secretbox_xchacha20poly1305.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_secretbox_xsalsa20poly1305.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_secretstream_xchacha20poly1305.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_shorthash.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_shorthash_siphash24.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_sign.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_sign_ed25519.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_sign_edwards25519sha512batch.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_stream.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_stream_chacha20.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_stream_salsa20.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_stream_salsa2012.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_stream_salsa208.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_stream_xchacha20.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_stream_xsalsa20.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_verify_16.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_verify_32.h create mode 100644 OSlibs/win/libsodium/include/sodium/crypto_verify_64.h create mode 100644 OSlibs/win/libsodium/include/sodium/export.h create mode 100644 OSlibs/win/libsodium/include/sodium/randombytes.h create mode 100644 OSlibs/win/libsodium/include/sodium/randombytes_salsa20_random.h create mode 100644 OSlibs/win/libsodium/include/sodium/randombytes_sysrandom.h create mode 100644 OSlibs/win/libsodium/include/sodium/runtime.h create mode 100644 OSlibs/win/libsodium/include/sodium/utils.h create mode 100644 OSlibs/win/libsodium/include/sodium/version.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 8e159018f..24c877921 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,8 +13,10 @@ set(CMAKE_CXX_EXTENSIONS Off) include(cmake/DownloadProject.cmake) +if(NOT WIN32) hunter_add_package(libsodium) find_package(libsodium CONFIG REQUIRED) +endif() # Download and install nanomsg at CMake configure time download_project(PROJ nanomsg @@ -27,7 +29,10 @@ download_project(PROJ nanomsg ) find_library(NANOMSG_LIBRARY NAMES nanomsg PATHS ${DEPS_INSTALL_PREFIX}/lib NO_DEFAULT_PATH) -include_directories("${CMAKE_SOURCE_DIR}" ${LIBSODIUM_ROOT}) +if(NOT WIN32) +include_directories(${LIBSODIUM_ROOT}) +endif() +include_directories(${CMAKE_SOURCE_DIR}) add_subdirectory(cpp-ethereum) add_subdirectory(iguana/exchanges) add_subdirectory(iguana/exchanges/etomicswap) diff --git a/OSlibs/win/libsodium/Release/v140/dynamic/libsodium.dll b/OSlibs/win/libsodium/Release/v140/dynamic/libsodium.dll new file mode 100644 index 0000000000000000000000000000000000000000..4be264a898e1bfdb59a8551ccb63fd5e98bb1ecd GIT binary patch literal 281088 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

p8Xe4WzgWPb0nCw|@?z!i)y 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≶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 pjZTcL2b1V-gOA20W;BQ3*l1&q#wW_Y z5Xbj6^eV9r#j(AOJQjN{GR|!a{rq7THWFsh?Q1U5uWSvNhr5_=aK$4c?P@zfJie44z?p89_>f;Z6k@U#kojNxC7uWws7?iZyDt?D>$IEeaM)%H=rJ4 zq86tWxl8gD`MwXCdF>C@92;*Fu?5Sp6L`2V$7<-HlSC~#Reg%vt)Gmsl z7@M@Ow;49Xk0nH3)QYpHl3Jtog`JGrlO0K*cHo#^Fn@*A67pO_?A2ZxY6H><8nqQ- z3(_}>x2uMOZ9#5-;@dbedmV|k#uqTr{z1lhu~)erZV`UN8t)?_dPajS@=vFuy+cIL zSg-t*SC2BZ_#AbcTuQALgT57ZpM8FcFc#Jl3;R1ijNjqzCL+?V?o`waDyDJXbo)gNk%T(XmVIW_b^RixfK=pL)`K zwg=zSEk$Ee`(odVVE!-4dya{XJ#vmOFVcR*PQmwCnC6+#M%#(Llb?&=iqYm=6SsmD zIVzIg@1j+*>PBIHz{T`Uo+_=)589Z-wAQHGka-f(FP>-PqEpvsRAhxg>_qvHi&}|? zsaieX#Kb0{(X~oF-~VudIWXF3=0~rKGb#;#n!f_-v=?ciqGz}OLG`)Vup$H(xyu&& zNI!z$4t7RIYU-3u12F#Hx)&L3#ZKA_5qvn2W?6l>)u@e)!gtI}SI1jG)%Qmc3%V2i z7OdfhN&5XF1T}NHuiE3IoR~d+%)%d1$C0eUGGB~g*5KRU-Rz65hLhuKnwnvK9K~aisW0WduY#)t6st<7W>ttbmJ-a_Sw0Pa>Fj zz{QrBLjM$oj)q$_I^u!Xl!CsxeUX`LoK@Asda$QSor=>i!CvAH-5Pv z(RuMG7L)4FK8s=E;T`Q|3jYce9}Vz$e4;=79Ey*Gcsx2X3m5PBU5TROK^|NCRDb$; zKYrh;>`$*kF!6wkEiu)fegQ*A!z~(}=ufZ4(2-z^#wPmHFJjnusKv)R(bBH*j@z}^LUA*D>Wds|q_SmSS-XgfJK!^7~nw=KhBfyst z4Tx7TLr0#|?*!%jiWjlgKU`nh?6Ggh;yq2YuPiV3)1 zqfQ08iM9pl{-P~FMqKe_g>Qse;As|BT5)rz6;8v5wSu~Pzopa)_Z7WZeCkxgTWNe1 zkCm)jQFeTjwu5RM(c=ZxSKd}`M>W1cb}xvt_rFzQL-AcjBNEI$BcPX{;_`OdhDzSe zor|m=i>I~UM(|gTH@jv*U%^a;m=)eZ;Cecw=-8v4ntq4GcDkWxY|7tv`mrk+m#J0y z@A`2o7>}vl9e4RrD;oQ#d)@ER$es{0+IUE-CT2l*m!UgB7L86k3;RBbKKU_@YFGF8 zajV-IfXsEoYV8mF*wvk_K=}J!KXxU3H+90@4+~t+jb&^^Q77EpXCirT=c4hD_9OOY z{m8<@LMR#&8IiuX8KKeZY^q%EzFe_;ITkgNUBtK|kvM zq-Xf4AG?yCfm(Tb$i=PT3^!_C^D{5vs*mM|{kW?DNU_rg^~8io0|7jyCvM%@$s z*2JtbvWRCCPnf6`M-;WI;ddr-Rgr|m@N|gbCmqDe-+@t4^m`Kzn>NSyQ^fr04;to* z+Q4wD*&eTT;XRJlXj^=m-d;wE?WL&ul0O>Q0OmPXCK?YZt2m|WDFY94Z!{vYKKCaR zk=pPcU8~f5?r8(J+BXiV6Nvw8;i6l!<4a4_>oX3jZ}B;{Ua8Zy|6(C_;P|{MTMe~W z`dJG*ZK_rEhQuBAUklvPc5}Qn(yY4&^T*dK(R!ZqBCh(olE3+JSNUDZ^M2ea?n;nR zPR!K)?nkXCqNqrI0Y#qtI7_W-|HF@4(U~ID^P(4NWN&Ck_gloSy?>VA`$9Y#pV(*e zQVG5%)T4V8>bd2=O7M}OkG6rjH+#9<1~>epEug;f_3si3&;^NTD=0twr^E{H(nO^e z{I|q{YR<%^Rwx*s!Uj4k$Hqr%+L&6yrl#?wM`lgpnG5%0qm>`s4-n5>5L(nTV)Yd9fSK!TQ9o{Q_NVnW;A))^u^Drzh!WYH!+F7-qFKO{{KCMJ-70ygbWo zu|B7E2fVrr-C1~xMW;??S{p?lX^srHMq1-FcxSWOsSk|9VyhJf@iC9wABnd|*D1H8 zf<3d;7`|?R1x{r|`(Pe2iius4>jhXa3aga$al0y_V*+_YKz#Lh{c3=*vGCqiR-#4f5eN`WiPR!P}pwP!U&B2!aVohuWP|pOm#L(>nMWV}0 zoglmwimFeN-J6owl2bj-ble7PnjGx|3V-WT{K@xt)G6uP;P?Sk<=C2_?wGa>u*98? zRB6F>Ar?5*5p4m|2Z=fA_8}Jdrz6o(IS=WL#J9kA2(Sa2kVN|fS(DiV?AQ^vBVe)| zZ3!|q_kblc0xVgz(YaHI1*b$>)XBGWVimL3K@FH3MthrT>+^66++nv; zAwAljFkd<_$b#zLyP<43D9V<}M zh9`TL4D~hKgTrhHnD)fREcK1mLn5tmhovg5Sr}`L6E@M-AZtV7o0Eq|T7wNBu{Kdr zbXb^80TY>6tEebCJkqLF8%0ONTC+-{=*UQGs){1&jIE=>Y(l3d(XoT9dx|eCzA4U@ zN!JxMW-SV{1)EGn&)BH_xkm@uGWm5V>MNy-gRQ7?O^S-$W5O+}WPOTywsmZl zQIY%RU`r}mw?f_}nGP-bIM)^@NMm~tYWL+^e0bsk?<99L^disE#IyY4y_i+*WT5Wm z-s(m7hI@3ML_Nhn!H4S$?RZpV9wxrr_BJ1?H;kjBiiqM93)JpFeYoBksbCK=vf8{o zl(Oc-tM%8r_Ljv;eS4B0)pK-QtZ#df{XpV8;kp-fU;^Ht?3p`v)_kksMwgg+rqy49 z?Q?l_*^zs6v0rzf6yM|gXb({5M>fhVknvtgyQbd!YkKWyHhduvT?0hlJxJmDsz2KM z)DFNUG`gqqW6Mshgbb1Bc*V!sK)svN^4fsC?i7uT>=PGnJDu!BuCCN`k+uG<0DGy1 zoqqhcf7IS^7awOtS%*D%HNeC^AQtUs-nRQoY!y z4-tDa98MmZ9jLrd%oVavw4_FhwI%D+w!n$Sc$b>C~YF znEPW}IJNU=Wtb(Ns))7%Y42iR=BZ&;RMgK>HFH{+B^C97)LPu>ftFO;D^hE5Zx6Gm zvVO7;xu@I*BIb-RTSU)^HKX_zjojynXR+^yu*cJwqHUq>dEe=^C3`NdIv4AvJGM3V zAwBvVz!&cd!KWst(cYlmk32KT8l-E9w*qKJOOo8zf@INO)ebHIdS}VU4!F7kUSXAnbqEGrz zD_c#ZkU!-^?zYB6RQ1fUns|H-Bcs&r&?A4EM6M>nsCWD?qwy<>HR?&hX9x>cIL?ob zH)LEE&qyw(k-g53#i!0y{cH(7;{53NqrRtgg=Rx*iT#=0*wRwx)_=}Ks>Hk0cLA=n z@Tz(eLw#-G^A=`Bdoze9$5;6gEAcM1Bk2nWZdG2UdW@?PY-lePd<%hUv0p@xtG>gc z_A*|B*igwT7BU;14ZY=;5Ztk)H8_a3!o6t7J+Igcb}eQ@rQe94-dX!HVnMZEi=f^D zz7DmZy6;9%Uvc;ffnUW+8P)!-$FQr8LF67lX~WpkNzWFM)qb&y`UVoa3+KX3 z7M+?aehopF`>3&pgt2o7s`cIIw_t2Yt_{=%U`^RMvNU?WL|O3l5(}!?Q%>Eh+=N(W`X$pR28!zq!$uTVZRw@Nfk2^Y9@4>WkMjS z*;EqC)cpSbavR)-AkqG(_D}t|#Dc2FMCzUT2TE+IZWkBz2G~zZtXMHR*|XTGh6710>rk)x->O*ydJQ|aFd+3)AW=U{I zqf_(aUpeS#P{-pUPhZ6;1;2K1tGWZCX627LsM)T5s{@aYWTK?M!7yj_OcIq^t$Q3t zt!^fTtP+W}>fh4%6|^bpo&6^W^r~AIHGB9SVMlfCjGE6sNm$?xAJK7->}?Szbo?Ge z?z6%^x?iDYOMgI7v9OOVGc{ZKBZ=+?eJnOLTY3t|E(!TqE2!DhpKvSCfRDx}W=l`w z_-?qzM;_7R{TV~X0xuq&crN)2h3*DkG&Xgg_!ktrB=DlGphmoBQ7h2Ei^nJS;`|lG zcLOgv;)$Anj>2^(>Ct7Tc8dPZ!Oq|4u{!za5+fsv*fse)j#^z?BU<|3Y5Xc$8-gyL zzr8@9SKi);-8las?5MECA#YCY44!zAu%LoAhtz?X-TsqCuA}cFS+QGUIU}< z#sB5v`EQ$|`xa^@_cDr#HS*{_hFJUfH;L{x@mOqXCifp4yQG1~T0za^{)=0IHt%SB zVkXCuDJ(q@ezd0E7R{or<~Hv5$Rp~WlgMu4jx9Cyls_r3v&UMqdaa=}x~x>&Ud@B& z-98+Tiqx%m+CIfWooz3M#N#0|25~RCx(9F7mvRjUwRh5QlTdZ}Di2;YrKH{=SQAh? z^>$-)#P@hEx@{mc>@A@d*D{f6{S%XY9!cHHPj%76CdX!H1a{tZ$DM~h(Iq8D_*Yxl z1H+@v!KSfz)L6T=h1VJx8*Yv?+pvM4HQKJV>m&BDsh~3dfYht8UZ%leWIQ2%? zYc-_d;n9J5r&FKo+v^nGMg^WY=DBxHPyeL9Za}?#`#Kx1)@%>JC$}24;pVD*Q*L7o zx7CJ?#iFc}jTq!UehY}0O-#I@=A_SAokO5)TA&S#j*Qhi_P`R|2T*g9%?h-^PSb{p zZg)hvHZPFCgPzcgE*Eu|utkB^YQt*}VyL!4BpQ$M7O-SWsV+e!Gp@i84dO8taUXHwVUR?a}(c0GwZBRbF(9pm2Bc;KGY!jnVe7J)Mch zrREnqBe=^uE$1b+=$1i5>+3b#iFOsWO3g=iDbU91lb??w<=PQqb=Lx^GtnMzjWla; zfJd#~?6zBzjvu6rh_$8N5Zq;xo<~tn-gZY(?S-`1*rDDanTevpD{%H=Omu6Z$~()C z+-{Ceb}mk}(H=kQ*uXG+-o^^5Xg?z>UE+%Xv;DZ8hPZ>BBrfIUIey%3w>jCUqEP3e zsIwvS8yQnZTWg;dYyLaiejmSnexuyUlT!=Zd)lbdl}GaMNChiH&9I tUS+<9J6<1HTFLwf>5s*nWsd@HqFu$9L%hYeXMv?=@bIjv)waK-_J0nPBb)#L literal 0 HcmV?d00001 diff --git a/OSlibs/win/libsodium/Release/v140/dynamic/libsodium.pdb b/OSlibs/win/libsodium/Release/v140/dynamic/libsodium.pdb new file mode 100644 index 0000000000000000000000000000000000000000..9ad770f6aea1924b6cb882fb83f18b1fb51ed56d GIT binary patch literal 1478656 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

xiY))RQCUzK4jbf^L5yg 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℘; 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 TsztpFubAEoy;*C`s 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 literal 0 HcmV?d00001 diff --git a/OSlibs/win/libsodium/include/sodium.h b/OSlibs/win/libsodium/include/sodium.h new file mode 100644 index 000000000..e7b1af46f --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium.h @@ -0,0 +1,70 @@ + +#ifndef sodium_H +#define sodium_H + +#include "sodium/version.h" + +#include "sodium/core.h" +#include "sodium/crypto_aead_aes256gcm.h" +#include "sodium/crypto_aead_chacha20poly1305.h" +#include "sodium/crypto_aead_xchacha20poly1305.h" +#include "sodium/crypto_auth.h" +#include "sodium/crypto_auth_hmacsha256.h" +#include "sodium/crypto_auth_hmacsha512.h" +#include "sodium/crypto_auth_hmacsha512256.h" +#include "sodium/crypto_box.h" +#include "sodium/crypto_box_curve25519xsalsa20poly1305.h" +#include "sodium/crypto_core_hsalsa20.h" +#include "sodium/crypto_core_hchacha20.h" +#include "sodium/crypto_core_salsa20.h" +#include "sodium/crypto_core_salsa2012.h" +#include "sodium/crypto_core_salsa208.h" +#include "sodium/crypto_generichash.h" +#include "sodium/crypto_generichash_blake2b.h" +#include "sodium/crypto_hash.h" +#include "sodium/crypto_hash_sha256.h" +#include "sodium/crypto_hash_sha512.h" +#include "sodium/crypto_kdf.h" +#include "sodium/crypto_kdf_blake2b.h" +#include "sodium/crypto_kx.h" +#include "sodium/crypto_onetimeauth.h" +#include "sodium/crypto_onetimeauth_poly1305.h" +#include "sodium/crypto_pwhash.h" +#include "sodium/crypto_pwhash_argon2i.h" +#include "sodium/crypto_scalarmult.h" +#include "sodium/crypto_scalarmult_curve25519.h" +#include "sodium/crypto_secretbox.h" +#include "sodium/crypto_secretbox_xsalsa20poly1305.h" +#include "sodium/crypto_secretstream_xchacha20poly1305.h" +#include "sodium/crypto_shorthash.h" +#include "sodium/crypto_shorthash_siphash24.h" +#include "sodium/crypto_sign.h" +#include "sodium/crypto_sign_ed25519.h" +#include "sodium/crypto_stream.h" +#include "sodium/crypto_stream_chacha20.h" +#include "sodium/crypto_stream_salsa20.h" +#include "sodium/crypto_stream_xsalsa20.h" +#include "sodium/crypto_verify_16.h" +#include "sodium/crypto_verify_32.h" +#include "sodium/crypto_verify_64.h" +#include "sodium/randombytes.h" +#ifdef __native_client__ +# include "sodium/randombytes_nativeclient.h" +#endif +#include "sodium/randombytes_salsa20_random.h" +#include "sodium/randombytes_sysrandom.h" +#include "sodium/runtime.h" +#include "sodium/utils.h" + +#ifndef SODIUM_LIBRARY_MINIMAL +# include "sodium/crypto_box_curve25519xchacha20poly1305.h" +# include "sodium/crypto_core_ed25519.h" +# include "sodium/crypto_scalarmult_ed25519.h" +# include "sodium/crypto_secretbox_xchacha20poly1305.h" +# include "sodium/crypto_pwhash_scryptsalsa208sha256.h" +# include "sodium/crypto_stream_salsa2012.h" +# include "sodium/crypto_stream_salsa208.h" +# include "sodium/crypto_stream_xchacha20.h" +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/core.h b/OSlibs/win/libsodium/include/sodium/core.h new file mode 100644 index 000000000..dd088d2ca --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/core.h @@ -0,0 +1,28 @@ + +#ifndef sodium_core_H +#define sodium_core_H + +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +SODIUM_EXPORT +int sodium_init(void) + __attribute__ ((warn_unused_result)); + +/* ---- */ + +SODIUM_EXPORT +int sodium_set_misuse_handler(void (*handler)(void)); + +SODIUM_EXPORT +void sodium_misuse(void) + __attribute__ ((noreturn)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_aead_aes256gcm.h b/OSlibs/win/libsodium/include/sodium/crypto_aead_aes256gcm.h new file mode 100644 index 000000000..46a3800f3 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_aead_aes256gcm.h @@ -0,0 +1,171 @@ +#ifndef crypto_aead_aes256gcm_H +#define crypto_aead_aes256gcm_H + +/* + * WARNING: Despite being the most popular AEAD construction due to its + * use in TLS, safely using AES-GCM in a different context is tricky. + * + * No more than ~ 350 GB of input data should be encrypted with a given key. + * This is for ~ 16 KB messages -- Actual figures vary according to + * message sizes. + * + * In addition, nonces are short and repeated nonces would totally destroy + * the security of this scheme. + * + * Nonces should thus come from atomic counters, which can be difficult to + * set up in a distributed environment. + * + * Unless you absolutely need AES-GCM, use crypto_aead_xchacha20poly1305_ietf_*() + * instead. It doesn't have any of these limitations. + * Or, if you don't need to authenticate additional data, just stick to + * crypto_secretbox(). + */ + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +SODIUM_EXPORT +int crypto_aead_aes256gcm_is_available(void); + +#define crypto_aead_aes256gcm_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_keybytes(void); + +#define crypto_aead_aes256gcm_NSECBYTES 0U +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_nsecbytes(void); + +#define crypto_aead_aes256gcm_NPUBBYTES 12U +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_npubbytes(void); + +#define crypto_aead_aes256gcm_ABYTES 16U +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_abytes(void); + +#define crypto_aead_aes256gcm_MESSAGEBYTES_MAX \ + SODIUM_MIN(SODIUM_SIZE_MAX - crypto_aead_aes256gcm_ABYTES, \ + (16ULL * ((1ULL << 32) - 2ULL)) - crypto_aead_aes256gcm_ABYTES) +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_messagebytes_max(void); + +typedef CRYPTO_ALIGN(16) unsigned char crypto_aead_aes256gcm_state[512]; + +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_statebytes(void); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_encrypt(unsigned char *c, + unsigned long long *clen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_decrypt(unsigned char *m, + unsigned long long *mlen_p, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_encrypt_detached(unsigned char *c, + unsigned char *mac, + unsigned long long *maclen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_decrypt_detached(unsigned char *m, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *mac, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)); + +/* -- Precomputation interface -- */ + +SODIUM_EXPORT +int crypto_aead_aes256gcm_beforenm(crypto_aead_aes256gcm_state *ctx_, + const unsigned char *k); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_encrypt_afternm(unsigned char *c, + unsigned long long *clen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const crypto_aead_aes256gcm_state *ctx_); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_decrypt_afternm(unsigned char *m, + unsigned long long *mlen_p, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const crypto_aead_aes256gcm_state *ctx_) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_encrypt_detached_afternm(unsigned char *c, + unsigned char *mac, + unsigned long long *maclen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const crypto_aead_aes256gcm_state *ctx_); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_decrypt_detached_afternm(unsigned char *m, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *mac, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const crypto_aead_aes256gcm_state *ctx_) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +void crypto_aead_aes256gcm_keygen(unsigned char k[crypto_aead_aes256gcm_KEYBYTES]); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_aead_chacha20poly1305.h b/OSlibs/win/libsodium/include/sodium/crypto_aead_chacha20poly1305.h new file mode 100644 index 000000000..a575ec717 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_aead_chacha20poly1305.h @@ -0,0 +1,174 @@ +#ifndef crypto_aead_chacha20poly1305_H +#define crypto_aead_chacha20poly1305_H + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +/* -- IETF ChaCha20-Poly1305 construction with a 96-bit nonce and a 32-bit internal counter -- */ + +#define crypto_aead_chacha20poly1305_ietf_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_ietf_keybytes(void); + +#define crypto_aead_chacha20poly1305_ietf_NSECBYTES 0U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_ietf_nsecbytes(void); + +#define crypto_aead_chacha20poly1305_ietf_NPUBBYTES 12U + +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_ietf_npubbytes(void); + +#define crypto_aead_chacha20poly1305_ietf_ABYTES 16U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_ietf_abytes(void); + +#define crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX \ + SODIUM_MIN(SODIUM_SIZE_MAX - crypto_aead_chacha20poly1305_ietf_ABYTES, \ + (64ULL * (1ULL << 32) - 64ULL) - crypto_aead_chacha20poly1305_ietf_ABYTES) +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_ietf_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_ietf_encrypt(unsigned char *c, + unsigned long long *clen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_ietf_decrypt(unsigned char *m, + unsigned long long *mlen_p, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_ietf_encrypt_detached(unsigned char *c, + unsigned char *mac, + unsigned long long *maclen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_ietf_decrypt_detached(unsigned char *m, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *mac, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +void crypto_aead_chacha20poly1305_ietf_keygen(unsigned char k[crypto_aead_chacha20poly1305_ietf_KEYBYTES]); + +/* -- Original ChaCha20-Poly1305 construction with a 64-bit nonce and a 64-bit internal counter -- */ + +#define crypto_aead_chacha20poly1305_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_keybytes(void); + +#define crypto_aead_chacha20poly1305_NSECBYTES 0U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_nsecbytes(void); + +#define crypto_aead_chacha20poly1305_NPUBBYTES 8U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_npubbytes(void); + +#define crypto_aead_chacha20poly1305_ABYTES 16U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_abytes(void); + +#define crypto_aead_chacha20poly1305_MESSAGEBYTES_MAX \ + (SODIUM_SIZE_MAX - crypto_aead_chacha20poly1305_ABYTES) +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_encrypt(unsigned char *c, + unsigned long long *clen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_decrypt(unsigned char *m, + unsigned long long *mlen_p, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_encrypt_detached(unsigned char *c, + unsigned char *mac, + unsigned long long *maclen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_decrypt_detached(unsigned char *m, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *mac, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +void crypto_aead_chacha20poly1305_keygen(unsigned char k[crypto_aead_chacha20poly1305_KEYBYTES]); + +/* Aliases */ + +#define crypto_aead_chacha20poly1305_IETF_KEYBYTES crypto_aead_chacha20poly1305_ietf_KEYBYTES +#define crypto_aead_chacha20poly1305_IETF_NSECBYTES crypto_aead_chacha20poly1305_ietf_NSECBYTES +#define crypto_aead_chacha20poly1305_IETF_NPUBBYTES crypto_aead_chacha20poly1305_ietf_NPUBBYTES +#define crypto_aead_chacha20poly1305_IETF_ABYTES crypto_aead_chacha20poly1305_ietf_ABYTES +#define crypto_aead_chacha20poly1305_IETF_MESSAGEBYTES_MAX crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_aead_xchacha20poly1305.h b/OSlibs/win/libsodium/include/sodium/crypto_aead_xchacha20poly1305.h new file mode 100644 index 000000000..99692aae9 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_aead_xchacha20poly1305.h @@ -0,0 +1,97 @@ +#ifndef crypto_aead_xchacha20poly1305_H +#define crypto_aead_xchacha20poly1305_H + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_aead_xchacha20poly1305_ietf_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_aead_xchacha20poly1305_ietf_keybytes(void); + +#define crypto_aead_xchacha20poly1305_ietf_NSECBYTES 0U +SODIUM_EXPORT +size_t crypto_aead_xchacha20poly1305_ietf_nsecbytes(void); + +#define crypto_aead_xchacha20poly1305_ietf_NPUBBYTES 24U +SODIUM_EXPORT +size_t crypto_aead_xchacha20poly1305_ietf_npubbytes(void); + +#define crypto_aead_xchacha20poly1305_ietf_ABYTES 16U +SODIUM_EXPORT +size_t crypto_aead_xchacha20poly1305_ietf_abytes(void); + +#define crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX \ + (SODIUM_SIZE_MAX - crypto_aead_xchacha20poly1305_ietf_ABYTES) +SODIUM_EXPORT +size_t crypto_aead_xchacha20poly1305_ietf_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_aead_xchacha20poly1305_ietf_encrypt(unsigned char *c, + unsigned long long *clen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k); + +SODIUM_EXPORT +int crypto_aead_xchacha20poly1305_ietf_decrypt(unsigned char *m, + unsigned long long *mlen_p, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_aead_xchacha20poly1305_ietf_encrypt_detached(unsigned char *c, + unsigned char *mac, + unsigned long long *maclen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k); + +SODIUM_EXPORT +int crypto_aead_xchacha20poly1305_ietf_decrypt_detached(unsigned char *m, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *mac, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +void crypto_aead_xchacha20poly1305_ietf_keygen(unsigned char k[crypto_aead_xchacha20poly1305_ietf_KEYBYTES]); + +/* Aliases */ + +#define crypto_aead_xchacha20poly1305_IETF_KEYBYTES crypto_aead_xchacha20poly1305_ietf_KEYBYTES +#define crypto_aead_xchacha20poly1305_IETF_NSECBYTES crypto_aead_xchacha20poly1305_ietf_NSECBYTES +#define crypto_aead_xchacha20poly1305_IETF_NPUBBYTES crypto_aead_xchacha20poly1305_ietf_NPUBBYTES +#define crypto_aead_xchacha20poly1305_IETF_ABYTES crypto_aead_xchacha20poly1305_ietf_ABYTES +#define crypto_aead_xchacha20poly1305_IETF_MESSAGEBYTES_MAX crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_auth.h b/OSlibs/win/libsodium/include/sodium/crypto_auth.h new file mode 100644 index 000000000..7174e7bce --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_auth.h @@ -0,0 +1,44 @@ +#ifndef crypto_auth_H +#define crypto_auth_H + +#include + +#include "crypto_auth_hmacsha512256.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_auth_BYTES crypto_auth_hmacsha512256_BYTES +SODIUM_EXPORT +size_t crypto_auth_bytes(void); + +#define crypto_auth_KEYBYTES crypto_auth_hmacsha512256_KEYBYTES +SODIUM_EXPORT +size_t crypto_auth_keybytes(void); + +#define crypto_auth_PRIMITIVE "hmacsha512256" +SODIUM_EXPORT +const char *crypto_auth_primitive(void); + +SODIUM_EXPORT +int crypto_auth(unsigned char *out, const unsigned char *in, + unsigned long long inlen, const unsigned char *k); + +SODIUM_EXPORT +int crypto_auth_verify(const unsigned char *h, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +void crypto_auth_keygen(unsigned char k[crypto_auth_KEYBYTES]); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_auth_hmacsha256.h b/OSlibs/win/libsodium/include/sodium/crypto_auth_hmacsha256.h new file mode 100644 index 000000000..deec5266e --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_auth_hmacsha256.h @@ -0,0 +1,68 @@ +#ifndef crypto_auth_hmacsha256_H +#define crypto_auth_hmacsha256_H + +#include +#include "crypto_hash_sha256.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_auth_hmacsha256_BYTES 32U +SODIUM_EXPORT +size_t crypto_auth_hmacsha256_bytes(void); + +#define crypto_auth_hmacsha256_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_auth_hmacsha256_keybytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha256(unsigned char *out, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k); + +SODIUM_EXPORT +int crypto_auth_hmacsha256_verify(const unsigned char *h, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) + __attribute__ ((warn_unused_result)); + +/* ------------------------------------------------------------------------- */ + +typedef struct crypto_auth_hmacsha256_state { + crypto_hash_sha256_state ictx; + crypto_hash_sha256_state octx; +} crypto_auth_hmacsha256_state; + +SODIUM_EXPORT +size_t crypto_auth_hmacsha256_statebytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha256_init(crypto_auth_hmacsha256_state *state, + const unsigned char *key, + size_t keylen); + +SODIUM_EXPORT +int crypto_auth_hmacsha256_update(crypto_auth_hmacsha256_state *state, + const unsigned char *in, + unsigned long long inlen); + +SODIUM_EXPORT +int crypto_auth_hmacsha256_final(crypto_auth_hmacsha256_state *state, + unsigned char *out); + + +SODIUM_EXPORT +void crypto_auth_hmacsha256_keygen(unsigned char k[crypto_auth_hmacsha256_KEYBYTES]); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_auth_hmacsha512.h b/OSlibs/win/libsodium/include/sodium/crypto_auth_hmacsha512.h new file mode 100644 index 000000000..77a55fbc0 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_auth_hmacsha512.h @@ -0,0 +1,67 @@ +#ifndef crypto_auth_hmacsha512_H +#define crypto_auth_hmacsha512_H + +#include +#include "crypto_hash_sha512.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_auth_hmacsha512_BYTES 64U +SODIUM_EXPORT +size_t crypto_auth_hmacsha512_bytes(void); + +#define crypto_auth_hmacsha512_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_auth_hmacsha512_keybytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha512(unsigned char *out, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k); + +SODIUM_EXPORT +int crypto_auth_hmacsha512_verify(const unsigned char *h, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) + __attribute__ ((warn_unused_result)); + +/* ------------------------------------------------------------------------- */ + +typedef struct crypto_auth_hmacsha512_state { + crypto_hash_sha512_state ictx; + crypto_hash_sha512_state octx; +} crypto_auth_hmacsha512_state; + +SODIUM_EXPORT +size_t crypto_auth_hmacsha512_statebytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha512_init(crypto_auth_hmacsha512_state *state, + const unsigned char *key, + size_t keylen); + +SODIUM_EXPORT +int crypto_auth_hmacsha512_update(crypto_auth_hmacsha512_state *state, + const unsigned char *in, + unsigned long long inlen); + +SODIUM_EXPORT +int crypto_auth_hmacsha512_final(crypto_auth_hmacsha512_state *state, + unsigned char *out); + +SODIUM_EXPORT +void crypto_auth_hmacsha512_keygen(unsigned char k[crypto_auth_hmacsha512_KEYBYTES]); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_auth_hmacsha512256.h b/OSlibs/win/libsodium/include/sodium/crypto_auth_hmacsha512256.h new file mode 100644 index 000000000..4842f3deb --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_auth_hmacsha512256.h @@ -0,0 +1,62 @@ +#ifndef crypto_auth_hmacsha512256_H +#define crypto_auth_hmacsha512256_H + +#include +#include "crypto_auth_hmacsha512.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_auth_hmacsha512256_BYTES 32U +SODIUM_EXPORT +size_t crypto_auth_hmacsha512256_bytes(void); + +#define crypto_auth_hmacsha512256_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_auth_hmacsha512256_keybytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha512256(unsigned char *out, const unsigned char *in, + unsigned long long inlen,const unsigned char *k); + +SODIUM_EXPORT +int crypto_auth_hmacsha512256_verify(const unsigned char *h, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) + __attribute__ ((warn_unused_result)); + +/* ------------------------------------------------------------------------- */ + +typedef crypto_auth_hmacsha512_state crypto_auth_hmacsha512256_state; + +SODIUM_EXPORT +size_t crypto_auth_hmacsha512256_statebytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha512256_init(crypto_auth_hmacsha512256_state *state, + const unsigned char *key, + size_t keylen); + +SODIUM_EXPORT +int crypto_auth_hmacsha512256_update(crypto_auth_hmacsha512256_state *state, + const unsigned char *in, + unsigned long long inlen); + +SODIUM_EXPORT +int crypto_auth_hmacsha512256_final(crypto_auth_hmacsha512256_state *state, + unsigned char *out); + +SODIUM_EXPORT +void crypto_auth_hmacsha512256_keygen(unsigned char k[crypto_auth_hmacsha512256_KEYBYTES]); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_box.h b/OSlibs/win/libsodium/include/sodium/crypto_box.h new file mode 100644 index 000000000..99ee19a8f --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_box.h @@ -0,0 +1,173 @@ +#ifndef crypto_box_H +#define crypto_box_H + +/* + * THREAD SAFETY: crypto_box_keypair() is thread-safe, + * provided that sodium_init() was called before. + * + * Other functions are always thread-safe. + */ + +#include + +#include "crypto_box_curve25519xsalsa20poly1305.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_box_SEEDBYTES crypto_box_curve25519xsalsa20poly1305_SEEDBYTES +SODIUM_EXPORT +size_t crypto_box_seedbytes(void); + +#define crypto_box_PUBLICKEYBYTES crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES +SODIUM_EXPORT +size_t crypto_box_publickeybytes(void); + +#define crypto_box_SECRETKEYBYTES crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES +SODIUM_EXPORT +size_t crypto_box_secretkeybytes(void); + +#define crypto_box_NONCEBYTES crypto_box_curve25519xsalsa20poly1305_NONCEBYTES +SODIUM_EXPORT +size_t crypto_box_noncebytes(void); + +#define crypto_box_MACBYTES crypto_box_curve25519xsalsa20poly1305_MACBYTES +SODIUM_EXPORT +size_t crypto_box_macbytes(void); + +#define crypto_box_MESSAGEBYTES_MAX crypto_box_curve25519xsalsa20poly1305_MESSAGEBYTES_MAX +SODIUM_EXPORT +size_t crypto_box_messagebytes_max(void); + +#define crypto_box_PRIMITIVE "curve25519xsalsa20poly1305" +SODIUM_EXPORT +const char *crypto_box_primitive(void); + +SODIUM_EXPORT +int crypto_box_seed_keypair(unsigned char *pk, unsigned char *sk, + const unsigned char *seed); + +SODIUM_EXPORT +int crypto_box_keypair(unsigned char *pk, unsigned char *sk); + +SODIUM_EXPORT +int crypto_box_easy(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *pk, const unsigned char *sk) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_box_open_easy(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *pk, const unsigned char *sk) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_box_detached(unsigned char *c, unsigned char *mac, + const unsigned char *m, unsigned long long mlen, + const unsigned char *n, const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_box_open_detached(unsigned char *m, const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)); + +/* -- Precomputation interface -- */ + +#define crypto_box_BEFORENMBYTES crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES +SODIUM_EXPORT +size_t crypto_box_beforenmbytes(void); + +SODIUM_EXPORT +int crypto_box_beforenm(unsigned char *k, const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_box_easy_afternm(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k); + +SODIUM_EXPORT +int crypto_box_open_easy_afternm(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_box_detached_afternm(unsigned char *c, unsigned char *mac, + const unsigned char *m, unsigned long long mlen, + const unsigned char *n, const unsigned char *k); + +SODIUM_EXPORT +int crypto_box_open_detached_afternm(unsigned char *m, const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)); + +/* -- Ephemeral SK interface -- */ + +#define crypto_box_SEALBYTES (crypto_box_PUBLICKEYBYTES + crypto_box_MACBYTES) +SODIUM_EXPORT +size_t crypto_box_sealbytes(void); + +SODIUM_EXPORT +int crypto_box_seal(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *pk); + +SODIUM_EXPORT +int crypto_box_seal_open(unsigned char *m, const unsigned char *c, + unsigned long long clen, + const unsigned char *pk, const unsigned char *sk) + __attribute__ ((warn_unused_result)); + +/* -- NaCl compatibility interface ; Requires padding -- */ + +#define crypto_box_ZEROBYTES crypto_box_curve25519xsalsa20poly1305_ZEROBYTES +SODIUM_EXPORT +size_t crypto_box_zerobytes(void); + +#define crypto_box_BOXZEROBYTES crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES +SODIUM_EXPORT +size_t crypto_box_boxzerobytes(void); + +SODIUM_EXPORT +int crypto_box(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *pk, const unsigned char *sk) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_box_open(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *pk, const unsigned char *sk) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_box_afternm(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k); + +SODIUM_EXPORT +int crypto_box_open_afternm(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_box_curve25519xchacha20poly1305.h b/OSlibs/win/libsodium/include/sodium/crypto_box_curve25519xchacha20poly1305.h new file mode 100644 index 000000000..c1cf75668 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_box_curve25519xchacha20poly1305.h @@ -0,0 +1,159 @@ + +#ifndef crypto_box_curve25519xchacha20poly1305_H +#define crypto_box_curve25519xchacha20poly1305_H + +#include +#include "crypto_stream_xchacha20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_box_curve25519xchacha20poly1305_SEEDBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_seedbytes(void); + +#define crypto_box_curve25519xchacha20poly1305_PUBLICKEYBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_publickeybytes(void); + +#define crypto_box_curve25519xchacha20poly1305_SECRETKEYBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_secretkeybytes(void); + +#define crypto_box_curve25519xchacha20poly1305_BEFORENMBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_beforenmbytes(void); + +#define crypto_box_curve25519xchacha20poly1305_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_noncebytes(void); + +#define crypto_box_curve25519xchacha20poly1305_MACBYTES 16U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_macbytes(void); + +#define crypto_box_curve25519xchacha20poly1305_MESSAGEBYTES_MAX \ + (crypto_stream_xchacha20_MESSAGEBYTES_MAX - crypto_box_curve25519xchacha20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_seed_keypair(unsigned char *pk, + unsigned char *sk, + const unsigned char *seed); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_keypair(unsigned char *pk, + unsigned char *sk); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_easy(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_open_easy(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_detached(unsigned char *c, + unsigned char *mac, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_open_detached(unsigned char *m, + const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)); + +/* -- Precomputation interface -- */ + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_beforenm(unsigned char *k, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_easy_afternm(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_open_easy_afternm(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_detached_afternm(unsigned char *c, + unsigned char *mac, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_open_detached_afternm(unsigned char *m, + const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)); + +/* -- Ephemeral SK interface -- */ + +#define crypto_box_curve25519xchacha20poly1305_SEALBYTES \ + (crypto_box_curve25519xchacha20poly1305_PUBLICKEYBYTES + \ + crypto_box_curve25519xchacha20poly1305_MACBYTES) + +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_sealbytes(void); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_seal(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *pk); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_seal_open(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_box_curve25519xsalsa20poly1305.h b/OSlibs/win/libsodium/include/sodium/crypto_box_curve25519xsalsa20poly1305.h new file mode 100644 index 000000000..c5b15f42e --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_box_curve25519xsalsa20poly1305.h @@ -0,0 +1,109 @@ +#ifndef crypto_box_curve25519xsalsa20poly1305_H +#define crypto_box_curve25519xsalsa20poly1305_H + +#include +#include "crypto_stream_xsalsa20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_box_curve25519xsalsa20poly1305_SEEDBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_seedbytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_publickeybytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_secretkeybytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_beforenmbytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_noncebytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_MACBYTES 16U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_macbytes(void); + +/* Only for the libsodium API - The NaCl compatibility API would require BOXZEROBYTES extra bytes */ +#define crypto_box_curve25519xsalsa20poly1305_MESSAGEBYTES_MAX \ + (crypto_stream_xsalsa20_MESSAGEBYTES_MAX - crypto_box_curve25519xsalsa20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_seed_keypair(unsigned char *pk, + unsigned char *sk, + const unsigned char *seed); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_keypair(unsigned char *pk, + unsigned char *sk); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_beforenm(unsigned char *k, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)); + +/* -- NaCl compatibility interface ; Requires padding -- */ + +#define crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES 16U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_boxzerobytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_ZEROBYTES \ + (crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES + \ + crypto_box_curve25519xsalsa20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_zerobytes(void); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_open(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_afternm(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_open_afternm(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_core_ed25519.h b/OSlibs/win/libsodium/include/sodium/crypto_core_ed25519.h new file mode 100644 index 000000000..1536294b2 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_core_ed25519.h @@ -0,0 +1,37 @@ +#ifndef crypto_core_ed25519_H +#define crypto_core_ed25519_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_ed25519_BYTES 32 +SODIUM_EXPORT +size_t crypto_core_ed25519_bytes(void); + +#define crypto_core_ed25519_UNIFORMBYTES 32 +SODIUM_EXPORT +size_t crypto_core_ed25519_uniformbytes(void); + +SODIUM_EXPORT +int crypto_core_ed25519_is_valid_point(const unsigned char *p); + +SODIUM_EXPORT +int crypto_core_ed25519_add(unsigned char *r, + const unsigned char *p, const unsigned char *q); + +SODIUM_EXPORT +int crypto_core_ed25519_sub(unsigned char *r, + const unsigned char *p, const unsigned char *q); + +SODIUM_EXPORT +int crypto_core_ed25519_from_uniform(unsigned char *p, const unsigned char *r); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_core_hchacha20.h b/OSlibs/win/libsodium/include/sodium/crypto_core_hchacha20.h new file mode 100644 index 000000000..05e5670c1 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_core_hchacha20.h @@ -0,0 +1,35 @@ +#ifndef crypto_core_hchacha20_H +#define crypto_core_hchacha20_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_hchacha20_OUTPUTBYTES 32U +SODIUM_EXPORT +size_t crypto_core_hchacha20_outputbytes(void); + +#define crypto_core_hchacha20_INPUTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_hchacha20_inputbytes(void); + +#define crypto_core_hchacha20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_core_hchacha20_keybytes(void); + +#define crypto_core_hchacha20_CONSTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_hchacha20_constbytes(void); + +SODIUM_EXPORT +int crypto_core_hchacha20(unsigned char *out, const unsigned char *in, + const unsigned char *k, const unsigned char *c); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_core_hsalsa20.h b/OSlibs/win/libsodium/include/sodium/crypto_core_hsalsa20.h new file mode 100644 index 000000000..82e475b8f --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_core_hsalsa20.h @@ -0,0 +1,35 @@ +#ifndef crypto_core_hsalsa20_H +#define crypto_core_hsalsa20_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_hsalsa20_OUTPUTBYTES 32U +SODIUM_EXPORT +size_t crypto_core_hsalsa20_outputbytes(void); + +#define crypto_core_hsalsa20_INPUTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_hsalsa20_inputbytes(void); + +#define crypto_core_hsalsa20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_core_hsalsa20_keybytes(void); + +#define crypto_core_hsalsa20_CONSTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_hsalsa20_constbytes(void); + +SODIUM_EXPORT +int crypto_core_hsalsa20(unsigned char *out, const unsigned char *in, + const unsigned char *k, const unsigned char *c); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_core_salsa20.h b/OSlibs/win/libsodium/include/sodium/crypto_core_salsa20.h new file mode 100644 index 000000000..160cc56d2 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_core_salsa20.h @@ -0,0 +1,35 @@ +#ifndef crypto_core_salsa20_H +#define crypto_core_salsa20_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_salsa20_OUTPUTBYTES 64U +SODIUM_EXPORT +size_t crypto_core_salsa20_outputbytes(void); + +#define crypto_core_salsa20_INPUTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa20_inputbytes(void); + +#define crypto_core_salsa20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_core_salsa20_keybytes(void); + +#define crypto_core_salsa20_CONSTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa20_constbytes(void); + +SODIUM_EXPORT +int crypto_core_salsa20(unsigned char *out, const unsigned char *in, + const unsigned char *k, const unsigned char *c); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_core_salsa2012.h b/OSlibs/win/libsodium/include/sodium/crypto_core_salsa2012.h new file mode 100644 index 000000000..bdd5f9fdb --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_core_salsa2012.h @@ -0,0 +1,35 @@ +#ifndef crypto_core_salsa2012_H +#define crypto_core_salsa2012_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_salsa2012_OUTPUTBYTES 64U +SODIUM_EXPORT +size_t crypto_core_salsa2012_outputbytes(void); + +#define crypto_core_salsa2012_INPUTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa2012_inputbytes(void); + +#define crypto_core_salsa2012_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_core_salsa2012_keybytes(void); + +#define crypto_core_salsa2012_CONSTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa2012_constbytes(void); + +SODIUM_EXPORT +int crypto_core_salsa2012(unsigned char *out, const unsigned char *in, + const unsigned char *k, const unsigned char *c); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_core_salsa208.h b/OSlibs/win/libsodium/include/sodium/crypto_core_salsa208.h new file mode 100644 index 000000000..876bda893 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_core_salsa208.h @@ -0,0 +1,39 @@ +#ifndef crypto_core_salsa208_H +#define crypto_core_salsa208_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_salsa208_OUTPUTBYTES 64U +SODIUM_EXPORT +size_t crypto_core_salsa208_outputbytes(void) + __attribute__ ((deprecated)); + +#define crypto_core_salsa208_INPUTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa208_inputbytes(void) + __attribute__ ((deprecated)); + +#define crypto_core_salsa208_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_core_salsa208_keybytes(void) + __attribute__ ((deprecated)); + +#define crypto_core_salsa208_CONSTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa208_constbytes(void) + __attribute__ ((deprecated)); + +SODIUM_EXPORT +int crypto_core_salsa208(unsigned char *out, const unsigned char *in, + const unsigned char *k, const unsigned char *c); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_generichash.h b/OSlibs/win/libsodium/include/sodium/crypto_generichash.h new file mode 100644 index 000000000..2398fb9db --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_generichash.h @@ -0,0 +1,75 @@ +#ifndef crypto_generichash_H +#define crypto_generichash_H + +#include + +#include "crypto_generichash_blake2b.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_generichash_BYTES_MIN crypto_generichash_blake2b_BYTES_MIN +SODIUM_EXPORT +size_t crypto_generichash_bytes_min(void); + +#define crypto_generichash_BYTES_MAX crypto_generichash_blake2b_BYTES_MAX +SODIUM_EXPORT +size_t crypto_generichash_bytes_max(void); + +#define crypto_generichash_BYTES crypto_generichash_blake2b_BYTES +SODIUM_EXPORT +size_t crypto_generichash_bytes(void); + +#define crypto_generichash_KEYBYTES_MIN crypto_generichash_blake2b_KEYBYTES_MIN +SODIUM_EXPORT +size_t crypto_generichash_keybytes_min(void); + +#define crypto_generichash_KEYBYTES_MAX crypto_generichash_blake2b_KEYBYTES_MAX +SODIUM_EXPORT +size_t crypto_generichash_keybytes_max(void); + +#define crypto_generichash_KEYBYTES crypto_generichash_blake2b_KEYBYTES +SODIUM_EXPORT +size_t crypto_generichash_keybytes(void); + +#define crypto_generichash_PRIMITIVE "blake2b" +SODIUM_EXPORT +const char *crypto_generichash_primitive(void); + +typedef crypto_generichash_blake2b_state crypto_generichash_state; + +SODIUM_EXPORT +size_t crypto_generichash_statebytes(void); + +SODIUM_EXPORT +int crypto_generichash(unsigned char *out, size_t outlen, + const unsigned char *in, unsigned long long inlen, + const unsigned char *key, size_t keylen); + +SODIUM_EXPORT +int crypto_generichash_init(crypto_generichash_state *state, + const unsigned char *key, + const size_t keylen, const size_t outlen); + +SODIUM_EXPORT +int crypto_generichash_update(crypto_generichash_state *state, + const unsigned char *in, + unsigned long long inlen); + +SODIUM_EXPORT +int crypto_generichash_final(crypto_generichash_state *state, + unsigned char *out, const size_t outlen); + +SODIUM_EXPORT +void crypto_generichash_keygen(unsigned char k[crypto_generichash_KEYBYTES]); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_generichash_blake2b.h b/OSlibs/win/libsodium/include/sodium/crypto_generichash_blake2b.h new file mode 100644 index 000000000..9326a04ad --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_generichash_blake2b.h @@ -0,0 +1,117 @@ +#ifndef crypto_generichash_blake2b_H +#define crypto_generichash_blake2b_H + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#if defined(__IBMC__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) +# pragma pack(1) +#else +# pragma pack(push, 1) +#endif + +typedef struct CRYPTO_ALIGN(64) crypto_generichash_blake2b_state { + uint64_t h[8]; + uint64_t t[2]; + uint64_t f[2]; + uint8_t buf[2 * 128]; + size_t buflen; + uint8_t last_node; +} crypto_generichash_blake2b_state; + +#if defined(__IBMC__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) +# pragma pack() +#else +# pragma pack(pop) +#endif + +#define crypto_generichash_blake2b_BYTES_MIN 16U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_bytes_min(void); + +#define crypto_generichash_blake2b_BYTES_MAX 64U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_bytes_max(void); + +#define crypto_generichash_blake2b_BYTES 32U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_bytes(void); + +#define crypto_generichash_blake2b_KEYBYTES_MIN 16U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_keybytes_min(void); + +#define crypto_generichash_blake2b_KEYBYTES_MAX 64U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_keybytes_max(void); + +#define crypto_generichash_blake2b_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_keybytes(void); + +#define crypto_generichash_blake2b_SALTBYTES 16U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_saltbytes(void); + +#define crypto_generichash_blake2b_PERSONALBYTES 16U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_personalbytes(void); + +SODIUM_EXPORT +size_t crypto_generichash_blake2b_statebytes(void); + +SODIUM_EXPORT +int crypto_generichash_blake2b(unsigned char *out, size_t outlen, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *key, size_t keylen); + +SODIUM_EXPORT +int crypto_generichash_blake2b_salt_personal(unsigned char *out, size_t outlen, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *key, + size_t keylen, + const unsigned char *salt, + const unsigned char *personal); + +SODIUM_EXPORT +int crypto_generichash_blake2b_init(crypto_generichash_blake2b_state *state, + const unsigned char *key, + const size_t keylen, const size_t outlen); + +SODIUM_EXPORT +int crypto_generichash_blake2b_init_salt_personal(crypto_generichash_blake2b_state *state, + const unsigned char *key, + const size_t keylen, const size_t outlen, + const unsigned char *salt, + const unsigned char *personal); + +SODIUM_EXPORT +int crypto_generichash_blake2b_update(crypto_generichash_blake2b_state *state, + const unsigned char *in, + unsigned long long inlen); + +SODIUM_EXPORT +int crypto_generichash_blake2b_final(crypto_generichash_blake2b_state *state, + unsigned char *out, + const size_t outlen); + +SODIUM_EXPORT +void crypto_generichash_blake2b_keygen(unsigned char k[crypto_generichash_blake2b_KEYBYTES]); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_hash.h b/OSlibs/win/libsodium/include/sodium/crypto_hash.h new file mode 100644 index 000000000..302ed5c5e --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_hash.h @@ -0,0 +1,40 @@ +#ifndef crypto_hash_H +#define crypto_hash_H + +/* + * WARNING: Unless you absolutely need to use SHA512 for interoperatibility, + * purposes, you might want to consider crypto_generichash() instead. + * Unlike SHA512, crypto_generichash() is not vulnerable to length + * extension attacks. + */ + +#include + +#include "crypto_hash_sha512.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_hash_BYTES crypto_hash_sha512_BYTES +SODIUM_EXPORT +size_t crypto_hash_bytes(void); + +SODIUM_EXPORT +int crypto_hash(unsigned char *out, const unsigned char *in, + unsigned long long inlen); + +#define crypto_hash_PRIMITIVE "sha512" +SODIUM_EXPORT +const char *crypto_hash_primitive(void) + __attribute__ ((warn_unused_result)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_hash_sha256.h b/OSlibs/win/libsodium/include/sodium/crypto_hash_sha256.h new file mode 100644 index 000000000..f64d16e0e --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_hash_sha256.h @@ -0,0 +1,57 @@ +#ifndef crypto_hash_sha256_H +#define crypto_hash_sha256_H + +/* + * WARNING: Unless you absolutely need to use SHA256 for interoperatibility, + * purposes, you might want to consider crypto_generichash() instead. + * Unlike SHA256, crypto_generichash() is not vulnerable to length + * extension attacks. + */ + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef struct crypto_hash_sha256_state { + uint32_t state[8]; + uint64_t count; + uint8_t buf[64]; +} crypto_hash_sha256_state; + +SODIUM_EXPORT +size_t crypto_hash_sha256_statebytes(void); + +#define crypto_hash_sha256_BYTES 32U +SODIUM_EXPORT +size_t crypto_hash_sha256_bytes(void); + +SODIUM_EXPORT +int crypto_hash_sha256(unsigned char *out, const unsigned char *in, + unsigned long long inlen); + +SODIUM_EXPORT +int crypto_hash_sha256_init(crypto_hash_sha256_state *state); + +SODIUM_EXPORT +int crypto_hash_sha256_update(crypto_hash_sha256_state *state, + const unsigned char *in, + unsigned long long inlen); + +SODIUM_EXPORT +int crypto_hash_sha256_final(crypto_hash_sha256_state *state, + unsigned char *out); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_hash_sha512.h b/OSlibs/win/libsodium/include/sodium/crypto_hash_sha512.h new file mode 100644 index 000000000..6b0330f14 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_hash_sha512.h @@ -0,0 +1,57 @@ +#ifndef crypto_hash_sha512_H +#define crypto_hash_sha512_H + +/* + * WARNING: Unless you absolutely need to use SHA512 for interoperatibility, + * purposes, you might want to consider crypto_generichash() instead. + * Unlike SHA512, crypto_generichash() is not vulnerable to length + * extension attacks. + */ + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef struct crypto_hash_sha512_state { + uint64_t state[8]; + uint64_t count[2]; + uint8_t buf[128]; +} crypto_hash_sha512_state; + +SODIUM_EXPORT +size_t crypto_hash_sha512_statebytes(void); + +#define crypto_hash_sha512_BYTES 64U +SODIUM_EXPORT +size_t crypto_hash_sha512_bytes(void); + +SODIUM_EXPORT +int crypto_hash_sha512(unsigned char *out, const unsigned char *in, + unsigned long long inlen); + +SODIUM_EXPORT +int crypto_hash_sha512_init(crypto_hash_sha512_state *state); + +SODIUM_EXPORT +int crypto_hash_sha512_update(crypto_hash_sha512_state *state, + const unsigned char *in, + unsigned long long inlen); + +SODIUM_EXPORT +int crypto_hash_sha512_final(crypto_hash_sha512_state *state, + unsigned char *out); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_kdf.h b/OSlibs/win/libsodium/include/sodium/crypto_kdf.h new file mode 100644 index 000000000..52e496a74 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_kdf.h @@ -0,0 +1,51 @@ +#ifndef crypto_kdf_H +#define crypto_kdf_H + +#include +#include + +#include "crypto_kdf_blake2b.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_kdf_BYTES_MIN crypto_kdf_blake2b_BYTES_MIN +SODIUM_EXPORT +size_t crypto_kdf_bytes_min(void); + +#define crypto_kdf_BYTES_MAX crypto_kdf_blake2b_BYTES_MAX +SODIUM_EXPORT +size_t crypto_kdf_bytes_max(void); + +#define crypto_kdf_CONTEXTBYTES crypto_kdf_blake2b_CONTEXTBYTES +SODIUM_EXPORT +size_t crypto_kdf_contextbytes(void); + +#define crypto_kdf_KEYBYTES crypto_kdf_blake2b_KEYBYTES +SODIUM_EXPORT +size_t crypto_kdf_keybytes(void); + +#define crypto_kdf_PRIMITIVE "blake2b" +SODIUM_EXPORT +const char *crypto_kdf_primitive(void) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_kdf_derive_from_key(unsigned char *subkey, size_t subkey_len, + uint64_t subkey_id, + const char ctx[crypto_kdf_CONTEXTBYTES], + const unsigned char key[crypto_kdf_KEYBYTES]); + +SODIUM_EXPORT +void crypto_kdf_keygen(unsigned char k[crypto_kdf_KEYBYTES]); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_kdf_blake2b.h b/OSlibs/win/libsodium/include/sodium/crypto_kdf_blake2b.h new file mode 100644 index 000000000..5480ebe82 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_kdf_blake2b.h @@ -0,0 +1,42 @@ +#ifndef crypto_kdf_blake2b_H +#define crypto_kdf_blake2b_H + +#include +#include + +#include "crypto_kdf_blake2b.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_kdf_blake2b_BYTES_MIN 16 +SODIUM_EXPORT +size_t crypto_kdf_blake2b_bytes_min(void); + +#define crypto_kdf_blake2b_BYTES_MAX 64 +SODIUM_EXPORT +size_t crypto_kdf_blake2b_bytes_max(void); + +#define crypto_kdf_blake2b_CONTEXTBYTES 8 +SODIUM_EXPORT +size_t crypto_kdf_blake2b_contextbytes(void); + +#define crypto_kdf_blake2b_KEYBYTES 32 +SODIUM_EXPORT +size_t crypto_kdf_blake2b_keybytes(void); + +SODIUM_EXPORT +int crypto_kdf_blake2b_derive_from_key(unsigned char *subkey, size_t subkey_len, + uint64_t subkey_id, + const char ctx[crypto_kdf_blake2b_CONTEXTBYTES], + const unsigned char key[crypto_kdf_blake2b_KEYBYTES]); +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_kx.h b/OSlibs/win/libsodium/include/sodium/crypto_kx.h new file mode 100644 index 000000000..d1fce90da --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_kx.h @@ -0,0 +1,64 @@ +#ifndef crypto_kx_H +#define crypto_kx_H + +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_kx_PUBLICKEYBYTES 32 +SODIUM_EXPORT +size_t crypto_kx_publickeybytes(void); + +#define crypto_kx_SECRETKEYBYTES 32 +SODIUM_EXPORT +size_t crypto_kx_secretkeybytes(void); + +#define crypto_kx_SEEDBYTES 32 +SODIUM_EXPORT +size_t crypto_kx_seedbytes(void); + +#define crypto_kx_SESSIONKEYBYTES 32 +SODIUM_EXPORT +size_t crypto_kx_sessionkeybytes(void); + +#define crypto_kx_PRIMITIVE "x25519blake2b" +SODIUM_EXPORT +const char *crypto_kx_primitive(void); + +SODIUM_EXPORT +int crypto_kx_seed_keypair(unsigned char pk[crypto_kx_PUBLICKEYBYTES], + unsigned char sk[crypto_kx_SECRETKEYBYTES], + const unsigned char seed[crypto_kx_SEEDBYTES]); + +SODIUM_EXPORT +int crypto_kx_keypair(unsigned char pk[crypto_kx_PUBLICKEYBYTES], + unsigned char sk[crypto_kx_SECRETKEYBYTES]); + +SODIUM_EXPORT +int crypto_kx_client_session_keys(unsigned char rx[crypto_kx_SESSIONKEYBYTES], + unsigned char tx[crypto_kx_SESSIONKEYBYTES], + const unsigned char client_pk[crypto_kx_PUBLICKEYBYTES], + const unsigned char client_sk[crypto_kx_SECRETKEYBYTES], + const unsigned char server_pk[crypto_kx_PUBLICKEYBYTES]) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_kx_server_session_keys(unsigned char rx[crypto_kx_SESSIONKEYBYTES], + unsigned char tx[crypto_kx_SESSIONKEYBYTES], + const unsigned char server_pk[crypto_kx_PUBLICKEYBYTES], + const unsigned char server_sk[crypto_kx_SECRETKEYBYTES], + const unsigned char client_pk[crypto_kx_PUBLICKEYBYTES]) + __attribute__ ((warn_unused_result)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_onetimeauth.h b/OSlibs/win/libsodium/include/sodium/crypto_onetimeauth.h new file mode 100644 index 000000000..5951c5b82 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_onetimeauth.h @@ -0,0 +1,62 @@ +#ifndef crypto_onetimeauth_H +#define crypto_onetimeauth_H + +#include + +#include "crypto_onetimeauth_poly1305.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef crypto_onetimeauth_poly1305_state crypto_onetimeauth_state; + +SODIUM_EXPORT +size_t crypto_onetimeauth_statebytes(void); + +#define crypto_onetimeauth_BYTES crypto_onetimeauth_poly1305_BYTES +SODIUM_EXPORT +size_t crypto_onetimeauth_bytes(void); + +#define crypto_onetimeauth_KEYBYTES crypto_onetimeauth_poly1305_KEYBYTES +SODIUM_EXPORT +size_t crypto_onetimeauth_keybytes(void); + +#define crypto_onetimeauth_PRIMITIVE "poly1305" +SODIUM_EXPORT +const char *crypto_onetimeauth_primitive(void); + +SODIUM_EXPORT +int crypto_onetimeauth(unsigned char *out, const unsigned char *in, + unsigned long long inlen, const unsigned char *k); + +SODIUM_EXPORT +int crypto_onetimeauth_verify(const unsigned char *h, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_onetimeauth_init(crypto_onetimeauth_state *state, + const unsigned char *key); + +SODIUM_EXPORT +int crypto_onetimeauth_update(crypto_onetimeauth_state *state, + const unsigned char *in, + unsigned long long inlen); + +SODIUM_EXPORT +int crypto_onetimeauth_final(crypto_onetimeauth_state *state, + unsigned char *out); + +SODIUM_EXPORT +void crypto_onetimeauth_keygen(unsigned char k[crypto_onetimeauth_KEYBYTES]); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_onetimeauth_poly1305.h b/OSlibs/win/libsodium/include/sodium/crypto_onetimeauth_poly1305.h new file mode 100644 index 000000000..4b89c4f01 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_onetimeauth_poly1305.h @@ -0,0 +1,67 @@ +#ifndef crypto_onetimeauth_poly1305_H +#define crypto_onetimeauth_poly1305_H + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#include +#include +#include + +#include + +#include "export.h" + +typedef struct CRYPTO_ALIGN(16) crypto_onetimeauth_poly1305_state { + unsigned char opaque[256]; +} crypto_onetimeauth_poly1305_state; + +SODIUM_EXPORT +size_t crypto_onetimeauth_poly1305_statebytes(void); + +#define crypto_onetimeauth_poly1305_BYTES 16U +SODIUM_EXPORT +size_t crypto_onetimeauth_poly1305_bytes(void); + +#define crypto_onetimeauth_poly1305_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_onetimeauth_poly1305_keybytes(void); + +SODIUM_EXPORT +int crypto_onetimeauth_poly1305(unsigned char *out, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k); + +SODIUM_EXPORT +int crypto_onetimeauth_poly1305_verify(const unsigned char *h, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_onetimeauth_poly1305_init(crypto_onetimeauth_poly1305_state *state, + const unsigned char *key); + +SODIUM_EXPORT +int crypto_onetimeauth_poly1305_update(crypto_onetimeauth_poly1305_state *state, + const unsigned char *in, + unsigned long long inlen); + +SODIUM_EXPORT +int crypto_onetimeauth_poly1305_final(crypto_onetimeauth_poly1305_state *state, + unsigned char *out); + +SODIUM_EXPORT +void crypto_onetimeauth_poly1305_keygen(unsigned char k[crypto_onetimeauth_poly1305_KEYBYTES]); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_pwhash.h b/OSlibs/win/libsodium/include/sodium/crypto_pwhash.h new file mode 100644 index 000000000..2c76461f4 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_pwhash.h @@ -0,0 +1,147 @@ +#ifndef crypto_pwhash_H +#define crypto_pwhash_H + +#include + +#include "crypto_pwhash_argon2i.h" +#include "crypto_pwhash_argon2id.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_pwhash_ALG_ARGON2I13 crypto_pwhash_argon2i_ALG_ARGON2I13 +SODIUM_EXPORT +int crypto_pwhash_alg_argon2i13(void); + +#define crypto_pwhash_ALG_ARGON2ID13 crypto_pwhash_argon2id_ALG_ARGON2ID13 +SODIUM_EXPORT +int crypto_pwhash_alg_argon2id13(void); + +#define crypto_pwhash_ALG_DEFAULT crypto_pwhash_ALG_ARGON2ID13 +SODIUM_EXPORT +int crypto_pwhash_alg_default(void); + +#define crypto_pwhash_BYTES_MIN crypto_pwhash_argon2id_BYTES_MIN +SODIUM_EXPORT +size_t crypto_pwhash_bytes_min(void); + +#define crypto_pwhash_BYTES_MAX crypto_pwhash_argon2id_BYTES_MAX +SODIUM_EXPORT +size_t crypto_pwhash_bytes_max(void); + +#define crypto_pwhash_PASSWD_MIN crypto_pwhash_argon2id_PASSWD_MIN +SODIUM_EXPORT +size_t crypto_pwhash_passwd_min(void); + +#define crypto_pwhash_PASSWD_MAX crypto_pwhash_argon2id_PASSWD_MAX +SODIUM_EXPORT +size_t crypto_pwhash_passwd_max(void); + +#define crypto_pwhash_SALTBYTES crypto_pwhash_argon2id_SALTBYTES +SODIUM_EXPORT +size_t crypto_pwhash_saltbytes(void); + +#define crypto_pwhash_STRBYTES crypto_pwhash_argon2id_STRBYTES +SODIUM_EXPORT +size_t crypto_pwhash_strbytes(void); + +#define crypto_pwhash_STRPREFIX crypto_pwhash_argon2id_STRPREFIX +SODIUM_EXPORT +const char *crypto_pwhash_strprefix(void); + +#define crypto_pwhash_OPSLIMIT_MIN crypto_pwhash_argon2id_OPSLIMIT_MIN +SODIUM_EXPORT +size_t crypto_pwhash_opslimit_min(void); + +#define crypto_pwhash_OPSLIMIT_MAX crypto_pwhash_argon2id_OPSLIMIT_MAX +SODIUM_EXPORT +size_t crypto_pwhash_opslimit_max(void); + +#define crypto_pwhash_MEMLIMIT_MIN crypto_pwhash_argon2id_MEMLIMIT_MIN +SODIUM_EXPORT +size_t crypto_pwhash_memlimit_min(void); + +#define crypto_pwhash_MEMLIMIT_MAX crypto_pwhash_argon2id_MEMLIMIT_MAX +SODIUM_EXPORT +size_t crypto_pwhash_memlimit_max(void); + +#define crypto_pwhash_OPSLIMIT_INTERACTIVE crypto_pwhash_argon2id_OPSLIMIT_INTERACTIVE +SODIUM_EXPORT +size_t crypto_pwhash_opslimit_interactive(void); + +#define crypto_pwhash_MEMLIMIT_INTERACTIVE crypto_pwhash_argon2id_MEMLIMIT_INTERACTIVE +SODIUM_EXPORT +size_t crypto_pwhash_memlimit_interactive(void); + +#define crypto_pwhash_OPSLIMIT_MODERATE crypto_pwhash_argon2id_OPSLIMIT_MODERATE +SODIUM_EXPORT +size_t crypto_pwhash_opslimit_moderate(void); + +#define crypto_pwhash_MEMLIMIT_MODERATE crypto_pwhash_argon2id_MEMLIMIT_MODERATE +SODIUM_EXPORT +size_t crypto_pwhash_memlimit_moderate(void); + +#define crypto_pwhash_OPSLIMIT_SENSITIVE crypto_pwhash_argon2id_OPSLIMIT_SENSITIVE +SODIUM_EXPORT +size_t crypto_pwhash_opslimit_sensitive(void); + +#define crypto_pwhash_MEMLIMIT_SENSITIVE crypto_pwhash_argon2id_MEMLIMIT_SENSITIVE +SODIUM_EXPORT +size_t crypto_pwhash_memlimit_sensitive(void); + +/* + * With this function, do not forget to store all parameters, including the + * algorithm identifier in order to produce deterministic output. + * The crypto_pwhash_* definitions, including crypto_pwhash_ALG_DEFAULT, + * may change. + */ +SODIUM_EXPORT +int crypto_pwhash(unsigned char * const out, unsigned long long outlen, + const char * const passwd, unsigned long long passwdlen, + const unsigned char * const salt, + unsigned long long opslimit, size_t memlimit, int alg) + __attribute__ ((warn_unused_result)); + +/* + * The output string already includes all the required parameters, including + * the algorithm identifier. The string is all that has to be stored in + * order to verify a password. + */ +SODIUM_EXPORT +int crypto_pwhash_str(char out[crypto_pwhash_STRBYTES], + const char * const passwd, unsigned long long passwdlen, + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_pwhash_str_alg(char out[crypto_pwhash_STRBYTES], + const char * const passwd, unsigned long long passwdlen, + unsigned long long opslimit, size_t memlimit, int alg) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_pwhash_str_verify(const char str[crypto_pwhash_STRBYTES], + const char * const passwd, + unsigned long long passwdlen) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_pwhash_str_needs_rehash(const char str[crypto_pwhash_STRBYTES], + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)); + +#define crypto_pwhash_PRIMITIVE "argon2i" +SODIUM_EXPORT +const char *crypto_pwhash_primitive(void) + __attribute__ ((warn_unused_result)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_pwhash_argon2i.h b/OSlibs/win/libsodium/include/sodium/crypto_pwhash_argon2i.h new file mode 100644 index 000000000..8e4c1c353 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_pwhash_argon2i.h @@ -0,0 +1,122 @@ +#ifndef crypto_pwhash_argon2i_H +#define crypto_pwhash_argon2i_H + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_pwhash_argon2i_ALG_ARGON2I13 1 +SODIUM_EXPORT +int crypto_pwhash_argon2i_alg_argon2i13(void); + +#define crypto_pwhash_argon2i_BYTES_MIN 16U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_bytes_min(void); + +#define crypto_pwhash_argon2i_BYTES_MAX SODIUM_MIN(SODIUM_SIZE_MAX, 4294967295U) +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_bytes_max(void); + +#define crypto_pwhash_argon2i_PASSWD_MIN 0U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_passwd_min(void); + +#define crypto_pwhash_argon2i_PASSWD_MAX 4294967295U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_passwd_max(void); + +#define crypto_pwhash_argon2i_SALTBYTES 16U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_saltbytes(void); + +#define crypto_pwhash_argon2i_STRBYTES 128U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_strbytes(void); + +#define crypto_pwhash_argon2i_STRPREFIX "$argon2i$" +SODIUM_EXPORT +const char *crypto_pwhash_argon2i_strprefix(void); + +#define crypto_pwhash_argon2i_OPSLIMIT_MIN 3U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_opslimit_min(void); + +#define crypto_pwhash_argon2i_OPSLIMIT_MAX 4294967295U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_opslimit_max(void); + +#define crypto_pwhash_argon2i_MEMLIMIT_MIN 8192U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_memlimit_min(void); + +#define crypto_pwhash_argon2i_MEMLIMIT_MAX \ + ((SIZE_MAX >= 4398046510080U) ? 4398046510080U : (SIZE_MAX >= 2147483648U) ? 2147483648U : 32768U) +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_memlimit_max(void); + +#define crypto_pwhash_argon2i_OPSLIMIT_INTERACTIVE 4U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_opslimit_interactive(void); + +#define crypto_pwhash_argon2i_MEMLIMIT_INTERACTIVE 33554432U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_memlimit_interactive(void); + +#define crypto_pwhash_argon2i_OPSLIMIT_MODERATE 6U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_opslimit_moderate(void); + +#define crypto_pwhash_argon2i_MEMLIMIT_MODERATE 134217728U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_memlimit_moderate(void); + +#define crypto_pwhash_argon2i_OPSLIMIT_SENSITIVE 8U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_opslimit_sensitive(void); + +#define crypto_pwhash_argon2i_MEMLIMIT_SENSITIVE 536870912U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_memlimit_sensitive(void); + +SODIUM_EXPORT +int crypto_pwhash_argon2i(unsigned char * const out, + unsigned long long outlen, + const char * const passwd, + unsigned long long passwdlen, + const unsigned char * const salt, + unsigned long long opslimit, size_t memlimit, + int alg) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_pwhash_argon2i_str(char out[crypto_pwhash_argon2i_STRBYTES], + const char * const passwd, + unsigned long long passwdlen, + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_pwhash_argon2i_str_verify(const char str[crypto_pwhash_argon2i_STRBYTES], + const char * const passwd, + unsigned long long passwdlen) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_pwhash_argon2i_str_needs_rehash(const char str[crypto_pwhash_argon2i_STRBYTES], + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_pwhash_argon2id.h b/OSlibs/win/libsodium/include/sodium/crypto_pwhash_argon2id.h new file mode 100644 index 000000000..51b17aa8e --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_pwhash_argon2id.h @@ -0,0 +1,122 @@ +#ifndef crypto_pwhash_argon2id_H +#define crypto_pwhash_argon2id_H + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_pwhash_argon2id_ALG_ARGON2ID13 2 +SODIUM_EXPORT +int crypto_pwhash_argon2id_alg_argon2id13(void); + +#define crypto_pwhash_argon2id_BYTES_MIN 16U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_bytes_min(void); + +#define crypto_pwhash_argon2id_BYTES_MAX SODIUM_MIN(SODIUM_SIZE_MAX, 4294967295U) +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_bytes_max(void); + +#define crypto_pwhash_argon2id_PASSWD_MIN 0U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_passwd_min(void); + +#define crypto_pwhash_argon2id_PASSWD_MAX 4294967295U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_passwd_max(void); + +#define crypto_pwhash_argon2id_SALTBYTES 16U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_saltbytes(void); + +#define crypto_pwhash_argon2id_STRBYTES 128U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_strbytes(void); + +#define crypto_pwhash_argon2id_STRPREFIX "$argon2id$" +SODIUM_EXPORT +const char *crypto_pwhash_argon2id_strprefix(void); + +#define crypto_pwhash_argon2id_OPSLIMIT_MIN 1U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_opslimit_min(void); + +#define crypto_pwhash_argon2id_OPSLIMIT_MAX 4294967295U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_opslimit_max(void); + +#define crypto_pwhash_argon2id_MEMLIMIT_MIN 8192U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_memlimit_min(void); + +#define crypto_pwhash_argon2id_MEMLIMIT_MAX \ + ((SIZE_MAX >= 4398046510080U) ? 4398046510080U : (SIZE_MAX >= 2147483648U) ? 2147483648U : 32768U) +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_memlimit_max(void); + +#define crypto_pwhash_argon2id_OPSLIMIT_INTERACTIVE 2U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_opslimit_interactive(void); + +#define crypto_pwhash_argon2id_MEMLIMIT_INTERACTIVE 67108864U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_memlimit_interactive(void); + +#define crypto_pwhash_argon2id_OPSLIMIT_MODERATE 3U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_opslimit_moderate(void); + +#define crypto_pwhash_argon2id_MEMLIMIT_MODERATE 268435456U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_memlimit_moderate(void); + +#define crypto_pwhash_argon2id_OPSLIMIT_SENSITIVE 4U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_opslimit_sensitive(void); + +#define crypto_pwhash_argon2id_MEMLIMIT_SENSITIVE 1073741824U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_memlimit_sensitive(void); + +SODIUM_EXPORT +int crypto_pwhash_argon2id(unsigned char * const out, + unsigned long long outlen, + const char * const passwd, + unsigned long long passwdlen, + const unsigned char * const salt, + unsigned long long opslimit, size_t memlimit, + int alg) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_pwhash_argon2id_str(char out[crypto_pwhash_argon2id_STRBYTES], + const char * const passwd, + unsigned long long passwdlen, + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_pwhash_argon2id_str_verify(const char str[crypto_pwhash_argon2id_STRBYTES], + const char * const passwd, + unsigned long long passwdlen) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_pwhash_argon2id_str_needs_rehash(const char str[crypto_pwhash_argon2id_STRBYTES], + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_pwhash_scryptsalsa208sha256.h b/OSlibs/win/libsodium/include/sodium/crypto_pwhash_scryptsalsa208sha256.h new file mode 100644 index 000000000..951b87b96 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_pwhash_scryptsalsa208sha256.h @@ -0,0 +1,120 @@ +#ifndef crypto_pwhash_scryptsalsa208sha256_H +#define crypto_pwhash_scryptsalsa208sha256_H + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_pwhash_scryptsalsa208sha256_BYTES_MIN 16U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_bytes_min(void); + +#define crypto_pwhash_scryptsalsa208sha256_BYTES_MAX \ + SODIUM_MIN(SODIUM_SIZE_MAX, 0x1fffffffe0ULL) +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_bytes_max(void); + +#define crypto_pwhash_scryptsalsa208sha256_PASSWD_MIN 0U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_passwd_min(void); + +#define crypto_pwhash_scryptsalsa208sha256_PASSWD_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_passwd_max(void); + +#define crypto_pwhash_scryptsalsa208sha256_SALTBYTES 32U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_saltbytes(void); + +#define crypto_pwhash_scryptsalsa208sha256_STRBYTES 102U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_strbytes(void); + +#define crypto_pwhash_scryptsalsa208sha256_STRPREFIX "$7$" +SODIUM_EXPORT +const char *crypto_pwhash_scryptsalsa208sha256_strprefix(void); + +#define crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MIN 32768U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_opslimit_min(void); + +#define crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MAX 4294967295U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_opslimit_max(void); + +#define crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MIN 16777216U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_memlimit_min(void); + +#define crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MAX \ + SODIUM_MIN(SIZE_MAX, 68719476736ULL) +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_memlimit_max(void); + +#define crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_INTERACTIVE 524288U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_opslimit_interactive(void); + +#define crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_INTERACTIVE 16777216U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_memlimit_interactive(void); + +#define crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_SENSITIVE 33554432U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_opslimit_sensitive(void); + +#define crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_SENSITIVE 1073741824U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_memlimit_sensitive(void); + +SODIUM_EXPORT +int crypto_pwhash_scryptsalsa208sha256(unsigned char * const out, + unsigned long long outlen, + const char * const passwd, + unsigned long long passwdlen, + const unsigned char * const salt, + unsigned long long opslimit, + size_t memlimit) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_pwhash_scryptsalsa208sha256_str(char out[crypto_pwhash_scryptsalsa208sha256_STRBYTES], + const char * const passwd, + unsigned long long passwdlen, + unsigned long long opslimit, + size_t memlimit) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_pwhash_scryptsalsa208sha256_str_verify(const char str[crypto_pwhash_scryptsalsa208sha256_STRBYTES], + const char * const passwd, + unsigned long long passwdlen) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_pwhash_scryptsalsa208sha256_ll(const uint8_t * passwd, size_t passwdlen, + const uint8_t * salt, size_t saltlen, + uint64_t N, uint32_t r, uint32_t p, + uint8_t * buf, size_t buflen) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_pwhash_scryptsalsa208sha256_str_needs_rehash(const char str[crypto_pwhash_scryptsalsa208sha256_STRBYTES], + unsigned long long opslimit, + size_t memlimit) + __attribute__ ((warn_unused_result)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_scalarmult.h b/OSlibs/win/libsodium/include/sodium/crypto_scalarmult.h new file mode 100644 index 000000000..f7fa6f8f3 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_scalarmult.h @@ -0,0 +1,45 @@ +#ifndef crypto_scalarmult_H +#define crypto_scalarmult_H + +#include + +#include "crypto_scalarmult_curve25519.h" +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_scalarmult_BYTES crypto_scalarmult_curve25519_BYTES +SODIUM_EXPORT +size_t crypto_scalarmult_bytes(void); + +#define crypto_scalarmult_SCALARBYTES crypto_scalarmult_curve25519_SCALARBYTES +SODIUM_EXPORT +size_t crypto_scalarmult_scalarbytes(void); + +#define crypto_scalarmult_PRIMITIVE "curve25519" +SODIUM_EXPORT +const char *crypto_scalarmult_primitive(void); + +SODIUM_EXPORT +int crypto_scalarmult_base(unsigned char *q, const unsigned char *n); + +/* + * NOTE: Do not use the result of this function directly. + * + * Hash the result with the public keys in order to compute a shared + * secret key: H(q || client_pk || server_pk) + * + * Or unless this is not an option, use the crypto_kx() API instead. + */ +SODIUM_EXPORT +int crypto_scalarmult(unsigned char *q, const unsigned char *n, + const unsigned char *p) + __attribute__ ((warn_unused_result)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_scalarmult_curve25519.h b/OSlibs/win/libsodium/include/sodium/crypto_scalarmult_curve25519.h new file mode 100644 index 000000000..ae85eadc2 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_scalarmult_curve25519.h @@ -0,0 +1,40 @@ +#ifndef crypto_scalarmult_curve25519_H +#define crypto_scalarmult_curve25519_H + +#include + +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_scalarmult_curve25519_BYTES 32U +SODIUM_EXPORT +size_t crypto_scalarmult_curve25519_bytes(void); + +#define crypto_scalarmult_curve25519_SCALARBYTES 32U +SODIUM_EXPORT +size_t crypto_scalarmult_curve25519_scalarbytes(void); + +/* + * NOTE: Do not use the result of this function directly. + * + * Hash the result with the public keys in order to compute a shared + * secret key: H(q || client_pk || server_pk) + * + * Or unless this is not an option, use the crypto_kx() API instead. + */ +SODIUM_EXPORT +int crypto_scalarmult_curve25519(unsigned char *q, const unsigned char *n, + const unsigned char *p) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_scalarmult_curve25519_base(unsigned char *q, const unsigned char *n); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_scalarmult_ed25519.h b/OSlibs/win/libsodium/include/sodium/crypto_scalarmult_ed25519.h new file mode 100644 index 000000000..3d5123511 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_scalarmult_ed25519.h @@ -0,0 +1,41 @@ + +#ifndef crypto_scalarmult_ed25519_H +#define crypto_scalarmult_ed25519_H + +#include + +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_scalarmult_ed25519_BYTES 32U +SODIUM_EXPORT +size_t crypto_scalarmult_ed25519_bytes(void); + +#define crypto_scalarmult_ed25519_SCALARBYTES 32U +SODIUM_EXPORT +size_t crypto_scalarmult_ed25519_scalarbytes(void); + +/* + * NOTE: Do not use the result of this function directly. + * + * Hash the result with the public keys in order to compute a shared + * secret key: H(q || client_pk || server_pk) + * + * Or unless this is not an option, use the crypto_kx() API instead. + */ +SODIUM_EXPORT +int crypto_scalarmult_ed25519(unsigned char *q, const unsigned char *n, + const unsigned char *p) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_scalarmult_ed25519_base(unsigned char *q, const unsigned char *n); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_secretbox.h b/OSlibs/win/libsodium/include/sodium/crypto_secretbox.h new file mode 100644 index 000000000..55e94a029 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_secretbox.h @@ -0,0 +1,91 @@ +#ifndef crypto_secretbox_H +#define crypto_secretbox_H + +#include + +#include "crypto_secretbox_xsalsa20poly1305.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_secretbox_KEYBYTES crypto_secretbox_xsalsa20poly1305_KEYBYTES +SODIUM_EXPORT +size_t crypto_secretbox_keybytes(void); + +#define crypto_secretbox_NONCEBYTES crypto_secretbox_xsalsa20poly1305_NONCEBYTES +SODIUM_EXPORT +size_t crypto_secretbox_noncebytes(void); + +#define crypto_secretbox_MACBYTES crypto_secretbox_xsalsa20poly1305_MACBYTES +SODIUM_EXPORT +size_t crypto_secretbox_macbytes(void); + +#define crypto_secretbox_PRIMITIVE "xsalsa20poly1305" +SODIUM_EXPORT +const char *crypto_secretbox_primitive(void); + +#define crypto_secretbox_MESSAGEBYTES_MAX crypto_secretbox_xsalsa20poly1305_MESSAGEBYTES_MAX +SODIUM_EXPORT +size_t crypto_secretbox_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_secretbox_easy(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k); + +SODIUM_EXPORT +int crypto_secretbox_open_easy(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_secretbox_detached(unsigned char *c, unsigned char *mac, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k); + +SODIUM_EXPORT +int crypto_secretbox_open_detached(unsigned char *m, + const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +void crypto_secretbox_keygen(unsigned char k[crypto_secretbox_KEYBYTES]); + +/* -- NaCl compatibility interface ; Requires padding -- */ + +#define crypto_secretbox_ZEROBYTES crypto_secretbox_xsalsa20poly1305_ZEROBYTES +SODIUM_EXPORT +size_t crypto_secretbox_zerobytes(void); + +#define crypto_secretbox_BOXZEROBYTES crypto_secretbox_xsalsa20poly1305_BOXZEROBYTES +SODIUM_EXPORT +size_t crypto_secretbox_boxzerobytes(void); + +SODIUM_EXPORT +int crypto_secretbox(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k); + +SODIUM_EXPORT +int crypto_secretbox_open(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_secretbox_xchacha20poly1305.h b/OSlibs/win/libsodium/include/sodium/crypto_secretbox_xchacha20poly1305.h new file mode 100644 index 000000000..2919da161 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_secretbox_xchacha20poly1305.h @@ -0,0 +1,68 @@ +#ifndef crypto_secretbox_xchacha20poly1305_H +#define crypto_secretbox_xchacha20poly1305_H + +#include +#include "crypto_stream_xchacha20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_secretbox_xchacha20poly1305_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_secretbox_xchacha20poly1305_keybytes(void); + +#define crypto_secretbox_xchacha20poly1305_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_secretbox_xchacha20poly1305_noncebytes(void); + +#define crypto_secretbox_xchacha20poly1305_MACBYTES 16U +SODIUM_EXPORT +size_t crypto_secretbox_xchacha20poly1305_macbytes(void); + +#define crypto_secretbox_xchacha20poly1305_MESSAGEBYTES_MAX \ + (crypto_stream_xchacha20_MESSAGEBYTES_MAX - crypto_secretbox_xchacha20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_secretbox_xchacha20poly1305_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_secretbox_xchacha20poly1305_easy(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k); + +SODIUM_EXPORT +int crypto_secretbox_xchacha20poly1305_open_easy(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_secretbox_xchacha20poly1305_detached(unsigned char *c, + unsigned char *mac, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k); + +SODIUM_EXPORT +int crypto_secretbox_xchacha20poly1305_open_detached(unsigned char *m, + const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_secretbox_xsalsa20poly1305.h b/OSlibs/win/libsodium/include/sodium/crypto_secretbox_xsalsa20poly1305.h new file mode 100644 index 000000000..4b8c7c8ea --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_secretbox_xsalsa20poly1305.h @@ -0,0 +1,67 @@ +#ifndef crypto_secretbox_xsalsa20poly1305_H +#define crypto_secretbox_xsalsa20poly1305_H + +#include +#include "crypto_stream_xsalsa20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_secretbox_xsalsa20poly1305_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_keybytes(void); + +#define crypto_secretbox_xsalsa20poly1305_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_noncebytes(void); + +#define crypto_secretbox_xsalsa20poly1305_MACBYTES 16U +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_macbytes(void); + +/* Only for the libsodium API - The NaCl compatibility API would require BOXZEROBYTES extra bytes */ +#define crypto_secretbox_xsalsa20poly1305_MESSAGEBYTES_MAX \ + (crypto_stream_xsalsa20_MESSAGEBYTES_MAX - crypto_secretbox_xsalsa20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_secretbox_xsalsa20poly1305(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k); + +SODIUM_EXPORT +int crypto_secretbox_xsalsa20poly1305_open(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +void crypto_secretbox_xsalsa20poly1305_keygen(unsigned char k[crypto_secretbox_xsalsa20poly1305_KEYBYTES]); + +/* -- NaCl compatibility interface ; Requires padding -- */ + +#define crypto_secretbox_xsalsa20poly1305_BOXZEROBYTES 16U +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_boxzerobytes(void); + +#define crypto_secretbox_xsalsa20poly1305_ZEROBYTES \ + (crypto_secretbox_xsalsa20poly1305_BOXZEROBYTES + \ + crypto_secretbox_xsalsa20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_zerobytes(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_secretstream_xchacha20poly1305.h b/OSlibs/win/libsodium/include/sodium/crypto_secretstream_xchacha20poly1305.h new file mode 100644 index 000000000..7d3fa2a9e --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_secretstream_xchacha20poly1305.h @@ -0,0 +1,102 @@ +#ifndef crypto_secretstream_xchacha20poly1305_H +#define crypto_secretstream_xchacha20poly1305_H + +#include + +#include "crypto_aead_xchacha20poly1305.h" +#include "crypto_stream_chacha20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_secretstream_xchacha20poly1305_ABYTES \ + (1U + crypto_aead_xchacha20poly1305_ietf_ABYTES) +SODIUM_EXPORT +size_t crypto_secretstream_xchacha20poly1305_abytes(void); + +#define crypto_secretstream_xchacha20poly1305_HEADERBYTES \ + crypto_aead_xchacha20poly1305_ietf_NPUBBYTES +SODIUM_EXPORT +size_t crypto_secretstream_xchacha20poly1305_headerbytes(void); + +#define crypto_secretstream_xchacha20poly1305_KEYBYTES \ + crypto_aead_xchacha20poly1305_ietf_KEYBYTES +SODIUM_EXPORT +size_t crypto_secretstream_xchacha20poly1305_keybytes(void); + +#define crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX \ + SODIUM_MIN(SODIUM_SIZE_MAX, ((1ULL << 32) - 2ULL) * 64ULL) +SODIUM_EXPORT +size_t crypto_secretstream_xchacha20poly1305_messagebytes_max(void); + +#define crypto_secretstream_xchacha20poly1305_TAG_MESSAGE 0x00 +SODIUM_EXPORT +unsigned char crypto_secretstream_xchacha20poly1305_tag_message(void); + +#define crypto_secretstream_xchacha20poly1305_TAG_PUSH 0x01 +SODIUM_EXPORT +unsigned char crypto_secretstream_xchacha20poly1305_tag_push(void); + +#define crypto_secretstream_xchacha20poly1305_TAG_REKEY 0x02 +SODIUM_EXPORT +unsigned char crypto_secretstream_xchacha20poly1305_tag_rekey(void); + +#define crypto_secretstream_xchacha20poly1305_TAG_FINAL \ + (crypto_secretstream_xchacha20poly1305_TAG_PUSH | \ + crypto_secretstream_xchacha20poly1305_TAG_REKEY) +SODIUM_EXPORT +unsigned char crypto_secretstream_xchacha20poly1305_tag_final(void); + +typedef struct crypto_secretstream_xchacha20poly1305_state { + unsigned char k[crypto_stream_chacha20_ietf_KEYBYTES]; + unsigned char nonce[crypto_stream_chacha20_ietf_NONCEBYTES]; + unsigned char _pad[8]; +} crypto_secretstream_xchacha20poly1305_state; + +SODIUM_EXPORT +size_t crypto_secretstream_xchacha20poly1305_statebytes(void); + +SODIUM_EXPORT +void crypto_secretstream_xchacha20poly1305_keygen + (unsigned char k[crypto_secretstream_xchacha20poly1305_KEYBYTES]); + +SODIUM_EXPORT +int crypto_secretstream_xchacha20poly1305_init_push + (crypto_secretstream_xchacha20poly1305_state *state, + unsigned char header[crypto_secretstream_xchacha20poly1305_HEADERBYTES], + const unsigned char k[crypto_secretstream_xchacha20poly1305_KEYBYTES]); + +SODIUM_EXPORT +int crypto_secretstream_xchacha20poly1305_push + (crypto_secretstream_xchacha20poly1305_state *state, + unsigned char *c, unsigned long long *clen_p, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, unsigned char tag); + +SODIUM_EXPORT +int crypto_secretstream_xchacha20poly1305_init_pull + (crypto_secretstream_xchacha20poly1305_state *state, + const unsigned char header[crypto_secretstream_xchacha20poly1305_HEADERBYTES], + const unsigned char k[crypto_secretstream_xchacha20poly1305_KEYBYTES]); + +SODIUM_EXPORT +int crypto_secretstream_xchacha20poly1305_pull + (crypto_secretstream_xchacha20poly1305_state *state, + unsigned char *m, unsigned long long *mlen_p, unsigned char *tag_p, + const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen); + +SODIUM_EXPORT +void crypto_secretstream_xchacha20poly1305_rekey + (crypto_secretstream_xchacha20poly1305_state *state); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_shorthash.h b/OSlibs/win/libsodium/include/sodium/crypto_shorthash.h new file mode 100644 index 000000000..a49880824 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_shorthash.h @@ -0,0 +1,39 @@ +#ifndef crypto_shorthash_H +#define crypto_shorthash_H + +#include + +#include "crypto_shorthash_siphash24.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_shorthash_BYTES crypto_shorthash_siphash24_BYTES +SODIUM_EXPORT +size_t crypto_shorthash_bytes(void); + +#define crypto_shorthash_KEYBYTES crypto_shorthash_siphash24_KEYBYTES +SODIUM_EXPORT +size_t crypto_shorthash_keybytes(void); + +#define crypto_shorthash_PRIMITIVE "siphash24" +SODIUM_EXPORT +const char *crypto_shorthash_primitive(void); + +SODIUM_EXPORT +int crypto_shorthash(unsigned char *out, const unsigned char *in, + unsigned long long inlen, const unsigned char *k); + +SODIUM_EXPORT +void crypto_shorthash_keygen(unsigned char k[crypto_shorthash_KEYBYTES]); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_shorthash_siphash24.h b/OSlibs/win/libsodium/include/sodium/crypto_shorthash_siphash24.h new file mode 100644 index 000000000..745ed48fa --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_shorthash_siphash24.h @@ -0,0 +1,48 @@ +#ifndef crypto_shorthash_siphash24_H +#define crypto_shorthash_siphash24_H + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +/* -- 64-bit output -- */ + +#define crypto_shorthash_siphash24_BYTES 8U +SODIUM_EXPORT +size_t crypto_shorthash_siphash24_bytes(void); + +#define crypto_shorthash_siphash24_KEYBYTES 16U +SODIUM_EXPORT +size_t crypto_shorthash_siphash24_keybytes(void); + +SODIUM_EXPORT +int crypto_shorthash_siphash24(unsigned char *out, const unsigned char *in, + unsigned long long inlen, const unsigned char *k); + +#ifndef SODIUM_LIBRARY_MINIMAL +/* -- 128-bit output -- */ + +#define crypto_shorthash_siphashx24_BYTES 16U +SODIUM_EXPORT +size_t crypto_shorthash_siphashx24_bytes(void); + +#define crypto_shorthash_siphashx24_KEYBYTES 16U +SODIUM_EXPORT +size_t crypto_shorthash_siphashx24_keybytes(void); + +SODIUM_EXPORT +int crypto_shorthash_siphashx24(unsigned char *out, const unsigned char *in, + unsigned long long inlen, const unsigned char *k); +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_sign.h b/OSlibs/win/libsodium/include/sodium/crypto_sign.h new file mode 100644 index 000000000..85aff0c9d --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_sign.h @@ -0,0 +1,103 @@ +#ifndef crypto_sign_H +#define crypto_sign_H + +/* + * THREAD SAFETY: crypto_sign_keypair() is thread-safe, + * provided that sodium_init() was called before. + * + * Other functions, including crypto_sign_seed_keypair() are always thread-safe. + */ + +#include + +#include "crypto_sign_ed25519.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef crypto_sign_ed25519ph_state crypto_sign_state; + +SODIUM_EXPORT +size_t crypto_sign_statebytes(void); + +#define crypto_sign_BYTES crypto_sign_ed25519_BYTES +SODIUM_EXPORT +size_t crypto_sign_bytes(void); + +#define crypto_sign_SEEDBYTES crypto_sign_ed25519_SEEDBYTES +SODIUM_EXPORT +size_t crypto_sign_seedbytes(void); + +#define crypto_sign_PUBLICKEYBYTES crypto_sign_ed25519_PUBLICKEYBYTES +SODIUM_EXPORT +size_t crypto_sign_publickeybytes(void); + +#define crypto_sign_SECRETKEYBYTES crypto_sign_ed25519_SECRETKEYBYTES +SODIUM_EXPORT +size_t crypto_sign_secretkeybytes(void); + +#define crypto_sign_MESSAGEBYTES_MAX crypto_sign_ed25519_MESSAGEBYTES_MAX +SODIUM_EXPORT +size_t crypto_sign_messagebytes_max(void); + +#define crypto_sign_PRIMITIVE "ed25519" +SODIUM_EXPORT +const char *crypto_sign_primitive(void); + +SODIUM_EXPORT +int crypto_sign_seed_keypair(unsigned char *pk, unsigned char *sk, + const unsigned char *seed); + +SODIUM_EXPORT +int crypto_sign_keypair(unsigned char *pk, unsigned char *sk); + +SODIUM_EXPORT +int crypto_sign(unsigned char *sm, unsigned long long *smlen_p, + const unsigned char *m, unsigned long long mlen, + const unsigned char *sk); + +SODIUM_EXPORT +int crypto_sign_open(unsigned char *m, unsigned long long *mlen_p, + const unsigned char *sm, unsigned long long smlen, + const unsigned char *pk) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_sign_detached(unsigned char *sig, unsigned long long *siglen_p, + const unsigned char *m, unsigned long long mlen, + const unsigned char *sk); + +SODIUM_EXPORT +int crypto_sign_verify_detached(const unsigned char *sig, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *pk) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_sign_init(crypto_sign_state *state); + +SODIUM_EXPORT +int crypto_sign_update(crypto_sign_state *state, + const unsigned char *m, unsigned long long mlen); + +SODIUM_EXPORT +int crypto_sign_final_create(crypto_sign_state *state, unsigned char *sig, + unsigned long long *siglen_p, + const unsigned char *sk); + +SODIUM_EXPORT +int crypto_sign_final_verify(crypto_sign_state *state, unsigned char *sig, + const unsigned char *pk) + __attribute__ ((warn_unused_result)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_sign_ed25519.h b/OSlibs/win/libsodium/include/sodium/crypto_sign_ed25519.h new file mode 100644 index 000000000..38d2b9dd6 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_sign_ed25519.h @@ -0,0 +1,114 @@ +#ifndef crypto_sign_ed25519_H +#define crypto_sign_ed25519_H + +#include +#include "crypto_hash_sha512.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef struct crypto_sign_ed25519ph_state { + crypto_hash_sha512_state hs; +} crypto_sign_ed25519ph_state; + +SODIUM_EXPORT +size_t crypto_sign_ed25519ph_statebytes(void); + +#define crypto_sign_ed25519_BYTES 64U +SODIUM_EXPORT +size_t crypto_sign_ed25519_bytes(void); + +#define crypto_sign_ed25519_SEEDBYTES 32U +SODIUM_EXPORT +size_t crypto_sign_ed25519_seedbytes(void); + +#define crypto_sign_ed25519_PUBLICKEYBYTES 32U +SODIUM_EXPORT +size_t crypto_sign_ed25519_publickeybytes(void); + +#define crypto_sign_ed25519_SECRETKEYBYTES (32U + 32U) +SODIUM_EXPORT +size_t crypto_sign_ed25519_secretkeybytes(void); + +#define crypto_sign_ed25519_MESSAGEBYTES_MAX (SODIUM_SIZE_MAX - crypto_sign_ed25519_BYTES) +SODIUM_EXPORT +size_t crypto_sign_ed25519_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_sign_ed25519(unsigned char *sm, unsigned long long *smlen_p, + const unsigned char *m, unsigned long long mlen, + const unsigned char *sk); + +SODIUM_EXPORT +int crypto_sign_ed25519_open(unsigned char *m, unsigned long long *mlen_p, + const unsigned char *sm, unsigned long long smlen, + const unsigned char *pk) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_sign_ed25519_detached(unsigned char *sig, + unsigned long long *siglen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *sk); + +SODIUM_EXPORT +int crypto_sign_ed25519_verify_detached(const unsigned char *sig, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *pk) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_sign_ed25519_keypair(unsigned char *pk, unsigned char *sk); + +SODIUM_EXPORT +int crypto_sign_ed25519_seed_keypair(unsigned char *pk, unsigned char *sk, + const unsigned char *seed); + +SODIUM_EXPORT +int crypto_sign_ed25519_pk_to_curve25519(unsigned char *curve25519_pk, + const unsigned char *ed25519_pk) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_sign_ed25519_sk_to_curve25519(unsigned char *curve25519_sk, + const unsigned char *ed25519_sk); + +SODIUM_EXPORT +int crypto_sign_ed25519_sk_to_seed(unsigned char *seed, + const unsigned char *sk); + +SODIUM_EXPORT +int crypto_sign_ed25519_sk_to_pk(unsigned char *pk, const unsigned char *sk); + +SODIUM_EXPORT +int crypto_sign_ed25519ph_init(crypto_sign_ed25519ph_state *state); + +SODIUM_EXPORT +int crypto_sign_ed25519ph_update(crypto_sign_ed25519ph_state *state, + const unsigned char *m, + unsigned long long mlen); + +SODIUM_EXPORT +int crypto_sign_ed25519ph_final_create(crypto_sign_ed25519ph_state *state, + unsigned char *sig, + unsigned long long *siglen_p, + const unsigned char *sk); + +SODIUM_EXPORT +int crypto_sign_ed25519ph_final_verify(crypto_sign_ed25519ph_state *state, + unsigned char *sig, + const unsigned char *pk) + __attribute__ ((warn_unused_result)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_sign_edwards25519sha512batch.h b/OSlibs/win/libsodium/include/sodium/crypto_sign_edwards25519sha512batch.h new file mode 100644 index 000000000..4bb919247 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_sign_edwards25519sha512batch.h @@ -0,0 +1,55 @@ +#ifndef crypto_sign_edwards25519sha512batch_H +#define crypto_sign_edwards25519sha512batch_H + +/* + * WARNING: This construction was a prototype, which should not be used + * any more in new projects. + * + * crypto_sign_edwards25519sha512batch is provided for applications + * initially built with NaCl, but as recommended by the author of this + * construction, new applications should use ed25519 instead. + * + * In Sodium, you should use the high-level crypto_sign_*() functions instead. + */ + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_sign_edwards25519sha512batch_BYTES 64U +#define crypto_sign_edwards25519sha512batch_PUBLICKEYBYTES 32U +#define crypto_sign_edwards25519sha512batch_SECRETKEYBYTES (32U + 32U) +#define crypto_sign_edwards25519sha512batch_MESSAGEBYTES_MAX (SODIUM_SIZE_MAX - crypto_sign_edwards25519sha512batch_BYTES) + +SODIUM_EXPORT +int crypto_sign_edwards25519sha512batch(unsigned char *sm, + unsigned long long *smlen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *sk) + __attribute__ ((deprecated)); + +SODIUM_EXPORT +int crypto_sign_edwards25519sha512batch_open(unsigned char *m, + unsigned long long *mlen_p, + const unsigned char *sm, + unsigned long long smlen, + const unsigned char *pk) + __attribute__ ((deprecated)); + +SODIUM_EXPORT +int crypto_sign_edwards25519sha512batch_keypair(unsigned char *pk, + unsigned char *sk) + __attribute__ ((deprecated)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_stream.h b/OSlibs/win/libsodium/include/sodium/crypto_stream.h new file mode 100644 index 000000000..d288f0b6d --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_stream.h @@ -0,0 +1,56 @@ +#ifndef crypto_stream_H +#define crypto_stream_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include + +#include "crypto_stream_xsalsa20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_KEYBYTES crypto_stream_xsalsa20_KEYBYTES +SODIUM_EXPORT +size_t crypto_stream_keybytes(void); + +#define crypto_stream_NONCEBYTES crypto_stream_xsalsa20_NONCEBYTES +SODIUM_EXPORT +size_t crypto_stream_noncebytes(void); + +#define crypto_stream_MESSAGEBYTES_MAX crypto_stream_xsalsa20_MESSAGEBYTES_MAX +SODIUM_EXPORT +size_t crypto_stream_messagebytes_max(void); + +#define crypto_stream_PRIMITIVE "xsalsa20" +SODIUM_EXPORT +const char *crypto_stream_primitive(void); + +SODIUM_EXPORT +int crypto_stream(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k); + +SODIUM_EXPORT +int crypto_stream_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k); + +SODIUM_EXPORT +void crypto_stream_keygen(unsigned char k[crypto_stream_KEYBYTES]); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_stream_chacha20.h b/OSlibs/win/libsodium/include/sodium/crypto_stream_chacha20.h new file mode 100644 index 000000000..d3e2b234e --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_stream_chacha20.h @@ -0,0 +1,98 @@ +#ifndef crypto_stream_chacha20_H +#define crypto_stream_chacha20_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_chacha20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_chacha20_keybytes(void); + +#define crypto_stream_chacha20_NONCEBYTES 8U +SODIUM_EXPORT +size_t crypto_stream_chacha20_noncebytes(void); + +#define crypto_stream_chacha20_MESSAGEBYTES_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_stream_chacha20_messagebytes_max(void); + +/* ChaCha20 with a 64-bit nonce and a 64-bit counter, as originally designed */ + +SODIUM_EXPORT +int crypto_stream_chacha20(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k); + +SODIUM_EXPORT +int crypto_stream_chacha20_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k); + +SODIUM_EXPORT +int crypto_stream_chacha20_xor_ic(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint64_t ic, + const unsigned char *k); + +SODIUM_EXPORT +void crypto_stream_chacha20_keygen(unsigned char k[crypto_stream_chacha20_KEYBYTES]); + +/* ChaCha20 with a 96-bit nonce and a 32-bit counter (IETF) */ + +#define crypto_stream_chacha20_ietf_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_chacha20_ietf_keybytes(void); + +#define crypto_stream_chacha20_ietf_NONCEBYTES 12U +SODIUM_EXPORT +size_t crypto_stream_chacha20_ietf_noncebytes(void); + +#define crypto_stream_chacha20_ietf_MESSAGEBYTES_MAX \ + SODIUM_MIN(SODIUM_SIZE_MAX, 64ULL * (1ULL << 32)) +SODIUM_EXPORT +size_t crypto_stream_chacha20_ietf_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_stream_chacha20_ietf(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k); + +SODIUM_EXPORT +int crypto_stream_chacha20_ietf_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k); + +SODIUM_EXPORT +int crypto_stream_chacha20_ietf_xor_ic(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint32_t ic, + const unsigned char *k); + +SODIUM_EXPORT +void crypto_stream_chacha20_ietf_keygen(unsigned char k[crypto_stream_chacha20_ietf_KEYBYTES]); + +/* Aliases */ + +#define crypto_stream_chacha20_IETF_KEYBYTES crypto_stream_chacha20_ietf_KEYBYTES +#define crypto_stream_chacha20_IETF_NONCEBYTES crypto_stream_chacha20_ietf_NONCEBYTES +#define crypto_stream_chacha20_IETF_MESSAGEBYTES_MAX crypto_stream_chacha20_ietf_MESSAGEBYTES_MAX + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_stream_salsa20.h b/OSlibs/win/libsodium/include/sodium/crypto_stream_salsa20.h new file mode 100644 index 000000000..0c7688c73 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_stream_salsa20.h @@ -0,0 +1,57 @@ +#ifndef crypto_stream_salsa20_H +#define crypto_stream_salsa20_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_salsa20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_salsa20_keybytes(void); + +#define crypto_stream_salsa20_NONCEBYTES 8U +SODIUM_EXPORT +size_t crypto_stream_salsa20_noncebytes(void); + +#define crypto_stream_salsa20_MESSAGEBYTES_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_stream_salsa20_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_stream_salsa20(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k); + +SODIUM_EXPORT +int crypto_stream_salsa20_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k); + +SODIUM_EXPORT +int crypto_stream_salsa20_xor_ic(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint64_t ic, + const unsigned char *k); + +SODIUM_EXPORT +void crypto_stream_salsa20_keygen(unsigned char k[crypto_stream_salsa20_KEYBYTES]); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_stream_salsa2012.h b/OSlibs/win/libsodium/include/sodium/crypto_stream_salsa2012.h new file mode 100644 index 000000000..c93d1c81f --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_stream_salsa2012.h @@ -0,0 +1,50 @@ +#ifndef crypto_stream_salsa2012_H +#define crypto_stream_salsa2012_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_salsa2012_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_salsa2012_keybytes(void); + +#define crypto_stream_salsa2012_NONCEBYTES 8U +SODIUM_EXPORT +size_t crypto_stream_salsa2012_noncebytes(void); + +#define crypto_stream_salsa2012_MESSAGEBYTES_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_stream_salsa2012_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_stream_salsa2012(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k); + +SODIUM_EXPORT +int crypto_stream_salsa2012_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k); + +SODIUM_EXPORT +void crypto_stream_salsa2012_keygen(unsigned char k[crypto_stream_salsa2012_KEYBYTES]); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_stream_salsa208.h b/OSlibs/win/libsodium/include/sodium/crypto_stream_salsa208.h new file mode 100644 index 000000000..653f6504b --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_stream_salsa208.h @@ -0,0 +1,56 @@ +#ifndef crypto_stream_salsa208_H +#define crypto_stream_salsa208_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_salsa208_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_salsa208_keybytes(void) + __attribute__ ((deprecated)); + +#define crypto_stream_salsa208_NONCEBYTES 8U +SODIUM_EXPORT +size_t crypto_stream_salsa208_noncebytes(void) + __attribute__ ((deprecated)); + +#define crypto_stream_salsa208_MESSAGEBYTES_MAX SODIUM_SIZE_MAX + SODIUM_EXPORT +size_t crypto_stream_salsa208_messagebytes_max(void) + __attribute__ ((deprecated)); + +SODIUM_EXPORT +int crypto_stream_salsa208(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((deprecated)); + +SODIUM_EXPORT +int crypto_stream_salsa208_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((deprecated)); + +SODIUM_EXPORT +void crypto_stream_salsa208_keygen(unsigned char k[crypto_stream_salsa208_KEYBYTES]) + __attribute__ ((deprecated)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_stream_xchacha20.h b/OSlibs/win/libsodium/include/sodium/crypto_stream_xchacha20.h new file mode 100644 index 000000000..cf0407ffa --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_stream_xchacha20.h @@ -0,0 +1,57 @@ +#ifndef crypto_stream_xchacha20_H +#define crypto_stream_xchacha20_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_xchacha20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_xchacha20_keybytes(void); + +#define crypto_stream_xchacha20_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_stream_xchacha20_noncebytes(void); + +#define crypto_stream_xchacha20_MESSAGEBYTES_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_stream_xchacha20_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_stream_xchacha20(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k); + +SODIUM_EXPORT +int crypto_stream_xchacha20_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k); + +SODIUM_EXPORT +int crypto_stream_xchacha20_xor_ic(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint64_t ic, + const unsigned char *k); + +SODIUM_EXPORT +void crypto_stream_xchacha20_keygen(unsigned char k[crypto_stream_xchacha20_KEYBYTES]); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_stream_xsalsa20.h b/OSlibs/win/libsodium/include/sodium/crypto_stream_xsalsa20.h new file mode 100644 index 000000000..cb4c44a8b --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_stream_xsalsa20.h @@ -0,0 +1,57 @@ +#ifndef crypto_stream_xsalsa20_H +#define crypto_stream_xsalsa20_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_xsalsa20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_xsalsa20_keybytes(void); + +#define crypto_stream_xsalsa20_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_stream_xsalsa20_noncebytes(void); + +#define crypto_stream_xsalsa20_MESSAGEBYTES_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_stream_xsalsa20_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_stream_xsalsa20(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k); + +SODIUM_EXPORT +int crypto_stream_xsalsa20_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k); + +SODIUM_EXPORT +int crypto_stream_xsalsa20_xor_ic(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint64_t ic, + const unsigned char *k); + +SODIUM_EXPORT +void crypto_stream_xsalsa20_keygen(unsigned char k[crypto_stream_xsalsa20_KEYBYTES]); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_verify_16.h b/OSlibs/win/libsodium/include/sodium/crypto_verify_16.h new file mode 100644 index 000000000..5e9eeabee --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_verify_16.h @@ -0,0 +1,23 @@ +#ifndef crypto_verify_16_H +#define crypto_verify_16_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_verify_16_BYTES 16U +SODIUM_EXPORT +size_t crypto_verify_16_bytes(void); + +SODIUM_EXPORT +int crypto_verify_16(const unsigned char *x, const unsigned char *y) + __attribute__ ((warn_unused_result)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_verify_32.h b/OSlibs/win/libsodium/include/sodium/crypto_verify_32.h new file mode 100644 index 000000000..281b5a1bb --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_verify_32.h @@ -0,0 +1,23 @@ +#ifndef crypto_verify_32_H +#define crypto_verify_32_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_verify_32_BYTES 32U +SODIUM_EXPORT +size_t crypto_verify_32_bytes(void); + +SODIUM_EXPORT +int crypto_verify_32(const unsigned char *x, const unsigned char *y) + __attribute__ ((warn_unused_result)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/crypto_verify_64.h b/OSlibs/win/libsodium/include/sodium/crypto_verify_64.h new file mode 100644 index 000000000..0dc7c304a --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/crypto_verify_64.h @@ -0,0 +1,23 @@ +#ifndef crypto_verify_64_H +#define crypto_verify_64_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_verify_64_BYTES 64U +SODIUM_EXPORT +size_t crypto_verify_64_bytes(void); + +SODIUM_EXPORT +int crypto_verify_64(const unsigned char *x, const unsigned char *y) + __attribute__ ((warn_unused_result)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/export.h b/OSlibs/win/libsodium/include/sodium/export.h new file mode 100644 index 000000000..0f624ae3c --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/export.h @@ -0,0 +1,53 @@ + +#ifndef sodium_export_H +#define sodium_export_H + +#ifndef __GNUC__ +# ifdef __attribute__ +# undef __attribute__ +# endif +# define __attribute__(a) +#endif + +#ifdef SODIUM_STATIC +# define SODIUM_EXPORT +# define SODIUM_EXPORT_WEAK +#else +# if defined(_MSC_VER) +# ifdef SODIUM_DLL_EXPORT +# define SODIUM_EXPORT __declspec(dllexport) +# else +# define SODIUM_EXPORT __declspec(dllimport) +# endif +# else +# if defined(__SUNPRO_C) +# ifndef __GNU_C__ +# define SODIUM_EXPORT __attribute__ (visibility(__global)) +# else +# define SODIUM_EXPORT __attribute__ __global +# endif +# elif defined(_MSG_VER) +# define SODIUM_EXPORT extern __declspec(dllexport) +# else +# define SODIUM_EXPORT __attribute__ ((visibility ("default"))) +# endif +# endif +# if defined(__ELF__) && !defined(SODIUM_DISABLE_WEAK_FUNCTIONS) +# define SODIUM_EXPORT_WEAK SODIUM_EXPORT __attribute__((weak)) +# else +# define SODIUM_EXPORT_WEAK SODIUM_EXPORT +# endif +#endif + +#ifndef CRYPTO_ALIGN +# if defined(__INTEL_COMPILER) || defined(_MSC_VER) +# define CRYPTO_ALIGN(x) __declspec(align(x)) +# else +# define CRYPTO_ALIGN(x) __attribute__ ((aligned(x))) +# endif +#endif + +#define SODIUM_MIN(A, B) ((A) < (B) ? (A) : (B)) +#define SODIUM_SIZE_MAX SODIUM_MIN(UINT64_MAX, SIZE_MAX) + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/randombytes.h b/OSlibs/win/libsodium/include/sodium/randombytes.h new file mode 100644 index 000000000..d19f684ed --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/randombytes.h @@ -0,0 +1,68 @@ + +#ifndef randombytes_H +#define randombytes_H + +#include +#include + +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef struct randombytes_implementation { + const char *(*implementation_name)(void); /* required */ + uint32_t (*random)(void); /* required */ + void (*stir)(void); /* optional */ + uint32_t (*uniform)(const uint32_t upper_bound); /* optional, a default implementation will be used if NULL */ + void (*buf)(void * const buf, const size_t size); /* required */ + int (*close)(void); /* optional */ +} randombytes_implementation; + +#define randombytes_BYTES_MAX SODIUM_MIN(SODIUM_SIZE_MAX, 0xffffffffUL) + +#define randombytes_SEEDBYTES 32U +SODIUM_EXPORT +size_t randombytes_seedbytes(void); + +SODIUM_EXPORT +void randombytes_buf(void * const buf, const size_t size); + +SODIUM_EXPORT +void randombytes_buf_deterministic(void * const buf, const size_t size, + const unsigned char seed[randombytes_SEEDBYTES]); + +SODIUM_EXPORT +uint32_t randombytes_random(void); + +SODIUM_EXPORT +uint32_t randombytes_uniform(const uint32_t upper_bound); + +SODIUM_EXPORT +void randombytes_stir(void); + +SODIUM_EXPORT +int randombytes_close(void); + +SODIUM_EXPORT +int randombytes_set_implementation(randombytes_implementation *impl); + +SODIUM_EXPORT +const char *randombytes_implementation_name(void); + +/* -- NaCl compatibility interface -- */ + +SODIUM_EXPORT +void randombytes(unsigned char * const buf, const unsigned long long buf_len); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/randombytes_salsa20_random.h b/OSlibs/win/libsodium/include/sodium/randombytes_salsa20_random.h new file mode 100644 index 000000000..4deae15b6 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/randombytes_salsa20_random.h @@ -0,0 +1,19 @@ + +#ifndef randombytes_salsa20_random_H +#define randombytes_salsa20_random_H + +#include "export.h" +#include "randombytes.h" + +#ifdef __cplusplus +extern "C" { +#endif + +SODIUM_EXPORT +extern struct randombytes_implementation randombytes_salsa20_implementation; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/randombytes_sysrandom.h b/OSlibs/win/libsodium/include/sodium/randombytes_sysrandom.h new file mode 100644 index 000000000..9e27b674c --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/randombytes_sysrandom.h @@ -0,0 +1,19 @@ + +#ifndef randombytes_sysrandom_H +#define randombytes_sysrandom_H + +#include "export.h" +#include "randombytes.h" + +#ifdef __cplusplus +extern "C" { +#endif + +SODIUM_EXPORT +extern struct randombytes_implementation randombytes_sysrandom_implementation; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/runtime.h b/OSlibs/win/libsodium/include/sodium/runtime.h new file mode 100644 index 000000000..7f15d58e7 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/runtime.h @@ -0,0 +1,52 @@ + +#ifndef sodium_runtime_H +#define sodium_runtime_H + +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_neon(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_sse2(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_sse3(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_ssse3(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_sse41(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_avx(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_avx2(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_avx512f(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_pclmul(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_aesni(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_rdrand(void); + +/* ------------------------------------------------------------------------- */ + +int _sodium_runtime_get_cpu_features(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/utils.h b/OSlibs/win/libsodium/include/sodium/utils.h new file mode 100644 index 000000000..46eb331cf --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/utils.h @@ -0,0 +1,170 @@ + +#ifndef sodium_utils_H +#define sodium_utils_H + +#include + +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef SODIUM_C99 +# if defined(__cplusplus) || !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L +# define SODIUM_C99(X) +# else +# define SODIUM_C99(X) X +# endif +#endif + +SODIUM_EXPORT +void sodium_memzero(void * const pnt, const size_t len); + +SODIUM_EXPORT +void sodium_stackzero(const size_t len); + +/* + * WARNING: sodium_memcmp() must be used to verify if two secret keys + * are equal, in constant time. + * It returns 0 if the keys are equal, and -1 if they differ. + * This function is not designed for lexicographical comparisons. + */ +SODIUM_EXPORT +int sodium_memcmp(const void * const b1_, const void * const b2_, size_t len) + __attribute__ ((warn_unused_result)); + +/* + * sodium_compare() returns -1 if b1_ < b2_, 1 if b1_ > b2_ and 0 if b1_ == b2_ + * It is suitable for lexicographical comparisons, or to compare nonces + * and counters stored in little-endian format. + * However, it is slower than sodium_memcmp(). + */ +SODIUM_EXPORT +int sodium_compare(const unsigned char *b1_, const unsigned char *b2_, + size_t len) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int sodium_is_zero(const unsigned char *n, const size_t nlen); + +SODIUM_EXPORT +void sodium_increment(unsigned char *n, const size_t nlen); + +SODIUM_EXPORT +void sodium_add(unsigned char *a, const unsigned char *b, const size_t len); + +SODIUM_EXPORT +char *sodium_bin2hex(char * const hex, const size_t hex_maxlen, + const unsigned char * const bin, const size_t bin_len); + +SODIUM_EXPORT +int sodium_hex2bin(unsigned char * const bin, const size_t bin_maxlen, + const char * const hex, const size_t hex_len, + const char * const ignore, size_t * const bin_len, + const char ** const hex_end); + +#define sodium_base64_VARIANT_ORIGINAL 1 +#define sodium_base64_VARIANT_ORIGINAL_NO_PADDING 3 +#define sodium_base64_VARIANT_URLSAFE 5 +#define sodium_base64_VARIANT_URLSAFE_NO_PADDING 7 + +/* + * Computes the required length to encode BIN_LEN bytes as a base64 string + * using the given variant. The computed length includes a trailing \0. + */ +#define sodium_base64_ENCODED_LEN(BIN_LEN, VARIANT) \ + (((BIN_LEN) / 3U) * 4U + \ + ((((BIN_LEN) - ((BIN_LEN) / 3U) * 3U) | (((BIN_LEN) - ((BIN_LEN) / 3U) * 3U) >> 1)) & 1U) * \ + (4U - (~((((VARIANT) & 2U) >> 1) - 1U) & (3U - ((BIN_LEN) - ((BIN_LEN) / 3U) * 3U)))) + 1U) + +SODIUM_EXPORT +size_t sodium_base64_encoded_len(const size_t bin_len, const int variant); + +SODIUM_EXPORT +char *sodium_bin2base64(char * const b64, const size_t b64_maxlen, + const unsigned char * const bin, const size_t bin_len, + const int variant); + +SODIUM_EXPORT +int sodium_base642bin(unsigned char * const bin, const size_t bin_maxlen, + const char * const b64, const size_t b64_len, + const char * const ignore, size_t * const bin_len, + const char ** const b64_end, const int variant); + +SODIUM_EXPORT +int sodium_mlock(void * const addr, const size_t len); + +SODIUM_EXPORT +int sodium_munlock(void * const addr, const size_t len); + +/* WARNING: sodium_malloc() and sodium_allocarray() are not general-purpose + * allocation functions. + * + * They return a pointer to a region filled with 0xd0 bytes, immediately + * followed by a guard page. + * As a result, accessing a single byte after the requested allocation size + * will intentionally trigger a segmentation fault. + * + * A canary and an additional guard page placed before the beginning of the + * region may also kill the process if a buffer underflow is detected. + * + * The memory layout is: + * [unprotected region size (read only)][guard page (no access)][unprotected pages (read/write)][guard page (no access)] + * With the layout of the unprotected pages being: + * [optional padding][16-bytes canary][user region] + * + * However: + * - These functions are significantly slower than standard functions + * - Each allocation requires 3 or 4 additional pages + * - The returned address will not be aligned if the allocation size is not + * a multiple of the required alignment. For this reason, these functions + * are designed to store data, such as secret keys and messages. + * + * sodium_malloc() can be used to allocate any libsodium data structure. + * + * The crypto_generichash_state structure is packed and its length is + * either 357 or 361 bytes. For this reason, when using sodium_malloc() to + * allocate a crypto_generichash_state structure, padding must be added in + * order to ensure proper alignment. crypto_generichash_statebytes() + * returns the rounded up structure size, and should be prefered to sizeof(): + * state = sodium_malloc(crypto_generichash_statebytes()); + */ + +SODIUM_EXPORT +void *sodium_malloc(const size_t size) + __attribute__ ((malloc)); + +SODIUM_EXPORT +void *sodium_allocarray(size_t count, size_t size) + __attribute__ ((malloc)); + +SODIUM_EXPORT +void sodium_free(void *ptr); + +SODIUM_EXPORT +int sodium_mprotect_noaccess(void *ptr); + +SODIUM_EXPORT +int sodium_mprotect_readonly(void *ptr); + +SODIUM_EXPORT +int sodium_mprotect_readwrite(void *ptr); + +SODIUM_EXPORT +int sodium_pad(size_t *padded_buflen_p, unsigned char *buf, + size_t unpadded_buflen, size_t blocksize, size_t max_buflen); + +SODIUM_EXPORT +int sodium_unpad(size_t *unpadded_buflen_p, const unsigned char *buf, + size_t padded_buflen, size_t blocksize); + +/* -------- */ + +int _sodium_alloc_init(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/OSlibs/win/libsodium/include/sodium/version.h b/OSlibs/win/libsodium/include/sodium/version.h new file mode 100644 index 000000000..e6af10b67 --- /dev/null +++ b/OSlibs/win/libsodium/include/sodium/version.h @@ -0,0 +1,33 @@ + +#ifndef sodium_version_H +#define sodium_version_H + +#include "export.h" + +#define SODIUM_VERSION_STRING "1.0.16" + +#define SODIUM_LIBRARY_VERSION_MAJOR 10 +#define SODIUM_LIBRARY_VERSION_MINOR 1 + + +#ifdef __cplusplus +extern "C" { +#endif + +SODIUM_EXPORT +const char *sodium_version_string(void); + +SODIUM_EXPORT +int sodium_library_version_major(void); + +SODIUM_EXPORT +int sodium_library_version_minor(void); + +SODIUM_EXPORT +int sodium_library_minimal(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/appveyor.yml b/appveyor.yml index 3c82ea80a..1a1772169 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -10,6 +10,7 @@ after_build: .\build_win64_release\iguana\exchanges\Release\marketmaker-mainnet.exe .\marketmaker_depends\curl\build_msvc_2015_win64\lib\Release\libcurl.dll .\marketmaker_depends\nanomsg\build_msvc_2015_win64\Release\nanomsg.dll + .\OSlibs\win\libsodium\Release\v140\dynamic\libsodium.dll "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\redist\\x64\\Microsoft.VC140.CRT\\msvcp140.dll" "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\redist\\x64\\Microsoft.VC140.CRT\\vcruntime140.dll"' diff --git a/iguana/exchanges/CMakeLists.txt b/iguana/exchanges/CMakeLists.txt index 72cc2ac4c..70a38fd59 100644 --- a/iguana/exchanges/CMakeLists.txt +++ b/iguana/exchanges/CMakeLists.txt @@ -1,9 +1,12 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}) set(MM_SOURCES mm.c ../mini-gmp.c ../groestl.c ../segwit_addr.c ../keccak.c LP_etomic.c) -set(MM_LIBS curl pthread libcrypto777 libjpeg libsecp256k1 libsodium::libsodium) +set(MM_LIBS curl pthread libcrypto777 libjpeg libsecp256k1) if(WIN32) link_directories(${CMAKE_SOURCE_DIR}/marketmaker_depends/curl/build_msvc_2015_win64/lib/Release ${CMAKE_SOURCE_DIR}/marketmaker_depends/pthread-win32/bin/x64_MSVC2015.Release ${CMAKE_SOURCE_DIR}/marketmaker_depends/nanomsg/build_msvc_2015_win64/Release) -set(MM_LIBS ${MM_LIBS} nanomsg) +link_directories(${CMAKE_SOURCE_DIR}/OSlibs/win/libsodium/Release/v140/dynamic) +set(MM_LIBS ${MM_LIBS} nanomsg libsodium) +else() +set(MM_LIBS ${MM_LIBS} libsodium::libsodium) endif() add_executable(marketmaker-testnet ${MM_SOURCES}) add_executable(marketmaker-mainnet ${MM_SOURCES}) diff --git a/iguana/exchanges/LP_bitcoin.c b/iguana/exchanges/LP_bitcoin.c index 4a3830093..a1de64564 100644 --- a/iguana/exchanges/LP_bitcoin.c +++ b/iguana/exchanges/LP_bitcoin.c @@ -17,7 +17,12 @@ // LP_bitcoin.c // marketmaker // +#ifdef _WIN32 +#include "../../OSlibs/win/libsodium/include/sodium/crypto_generichash_blake2b.h" +#else #include +#endif + const unsigned char ZCASH_PREVOUTS_HASH_PERSONALIZATION[16] = {'Z','c','a','s','h','P','r','e','v','o','u','t','H','a','s','h'}; const unsigned char ZCASH_SEQUENCE_HASH_PERSONALIZATION[16] = diff --git a/iguana/exchanges/LP_etomic.c b/iguana/exchanges/LP_etomic.c index 6fb8de386..d7b9710f3 100644 --- a/iguana/exchanges/LP_etomic.c +++ b/iguana/exchanges/LP_etomic.c @@ -874,6 +874,7 @@ void LP_etomic_txhistory_loop(void *_coin) } } int (*ptr)(struct LP_tx_history_item*, struct LP_tx_history_item*) = &history_item_cmp; + struct LP_tx_history_item *_tmp; portable_mutex_lock(&coin->tx_history_mutex); DL_SORT(coin->tx_history, ptr); portable_mutex_unlock(&coin->tx_history_mutex); diff --git a/iguana/exchanges/LP_socket.c b/iguana/exchanges/LP_socket.c index 4a3f06b97..59fe58497 100644 --- a/iguana/exchanges/LP_socket.c +++ b/iguana/exchanges/LP_socket.c @@ -1342,6 +1342,7 @@ void LP_electrum_txhistory_loop(void *_coin) } int (*ptr)(struct LP_tx_history_item*, struct LP_tx_history_item*) = &history_item_cmp; // we don't want the history to be accessed while sorting + struct LP_tx_history_item *_tmp; portable_mutex_lock(&coin->tx_history_mutex); DL_SORT(coin->tx_history, ptr); portable_mutex_unlock(&coin->tx_history_mutex); From abc79a5acb624b56c3176d931ea1418d5cd832d5 Mon Sep 17 00:00:00 2001 From: Artem Pikulin Date: Fri, 9 Nov 2018 19:33:29 +0700 Subject: [PATCH 06/42] Fix tx history crash for BTC/LTC. Disable support for QTUM, BTX, CRW. --- iguana/exchanges/LP_socket.c | 104 ++++++++++++++++++++++++++--------- 1 file changed, 79 insertions(+), 25 deletions(-) diff --git a/iguana/exchanges/LP_socket.c b/iguana/exchanges/LP_socket.c index 59fe58497..42e3c3ba2 100644 --- a/iguana/exchanges/LP_socket.c +++ b/iguana/exchanges/LP_socket.c @@ -1229,9 +1229,57 @@ int history_item_cmp(struct LP_tx_history_item *item1, struct LP_tx_history_item return(item1->time < item2->time); } +void LP_electrum_get_tx_until_success(struct iguana_info *coin, char *tx_hash, cJSON **res) { + cJSON *params = cJSON_CreateArray(); + jaddistr(params, tx_hash); + jaddi(params, cJSON_CreateBool(cJSON_True)); + while(1) { + electrum_jsonarg(coin->symbol, coin->electrum, res, "blockchain.transaction.get", params, + ELECTRUM_TIMEOUT); + if (jobj(*res, "error") != NULL) { + printf("Error getting electrum tx %s %s %s\n", coin->symbol, jstri(params, 0), jprint(*res, 1)); + *res = cJSON_CreateObject(); + sleep(5); + continue; + } else { + break; + } + } + free_json(params); +} + +char *LP_get_address_from_tx_out(cJSON *tx_out) { + cJSON *script_pub_key = jobj(tx_out, "scriptPubKey"); + if (script_pub_key == 0) { + printf("No scriptPubKey on tx_out: %s\n", jprint(tx_out, 0)); + return 0; + } + + struct cJSON *addresses = jobj(script_pub_key, "addresses"); + if (addresses == 0) { + printf("No addresses on tx_out: %s\n", jprint(tx_out, 0)); + return NULL; + } + + if (!is_cJSON_Array(addresses)) { + printf("Addresses are not array on tx out: %s\n", jprint(tx_out, 0)); + return NULL; + } + + if (cJSON_GetArraySize(addresses) > 1) { + printf("Addresses array size is > 1 on tx out: %s\n", jprint(tx_out, 0)); + return NULL; + } + return jstri(addresses, 0); +} + void LP_electrum_txhistory_loop(void *_coin) { struct iguana_info *coin = _coin; + if (strcmp(coin->symbol, "QTUM") == 0 || strcmp(coin->symbol, "CRW") == 0 || strcmp(coin->symbol, "BTX") == 0) { + printf("Tx history loop doesn't support QTUM, CRW and BTX! yet\n"); + return; + } while (coin != NULL && coin->electrum != NULL && coin->inactive == 0) { cJSON *history = cJSON_CreateObject(); if (strcmp(coin->symbol, "BCH") == 0) { @@ -1242,7 +1290,7 @@ void LP_electrum_txhistory_loop(void *_coin) ELECTRUM_TIMEOUT); } if (jobj(history, "error") != NULL) { - printf("Error getting electrum history %s\n", jprint(history, 1)); + printf("Error getting electrum history of coin %s %s\n", coin->symbol, jprint(history, 1)); sleep(10); continue; } @@ -1251,6 +1299,7 @@ void LP_electrum_txhistory_loop(void *_coin) cJSON *history_item = jitem(history, i); cJSON *tx_item = cJSON_CreateObject(); char *tx_hash = jstr(history_item, "tx_hash"); + LP_electrum_get_tx_until_success(coin, tx_hash, &tx_item); struct LP_tx_history_item *iter; int found = 0; int confirmed = 0; @@ -1277,42 +1326,47 @@ void LP_electrum_txhistory_loop(void *_coin) continue; } - cJSON *params = cJSON_CreateArray(); - jaddistr(params, tx_hash); - jaddi(params, cJSON_CreateBool(cJSON_True)); - while(1) { - electrum_jsonarg(coin->symbol, coin->electrum, &tx_item, "blockchain.transaction.get", params, - ELECTRUM_TIMEOUT); - if (jobj(tx_item, "error") != NULL) { - printf("Error getting electrum tx %s %s\n", jstri(params, 0), jprint(tx_item, 1)); - tx_item = cJSON_CreateObject(); - sleep(5); - continue; - } else { - break; - } - } - free_json(params); if (!found) { strcpy(item->txid, jstr(tx_item, "txid")); // receive by default, but if at least 1 vin contains our address the category is send strcpy(item->category, "receive"); cJSON *vin = jobj(tx_item, "vin"); + cJSON *prev_tx_item = NULL; for (int j = 0; j < cJSON_GetArraySize(vin); j++) { cJSON *vin_item = jitem(vin, j); - if (strcmp(coin->smartaddr, jstr(vin_item, "address")) == 0) { - strcpy(item->category, "send"); - break; + char *address = jstr(vin_item, "address"); + if (address != NULL) { + if (strcmp(coin->smartaddr, jstr(vin_item, "address")) == 0) { + strcpy(item->category, "send"); + break; + } + } else { + // At least BTC and LTC doesn't have an address field for Vins. + // Need to get previous tx and check the output + cJSON *params = cJSON_CreateArray(); + // some transactions use few vouts of one prev tx so we can reuse it + if (prev_tx_item == 0 || strcmp(jstr(prev_tx_item, "txid"), jstr(vin_item, "txid")) != 0) { + if (prev_tx_item != 0) { + free_json(prev_tx_item); + prev_tx_item = NULL; + } + LP_electrum_get_tx_until_success(coin, jstr(vin_item, "txid"), &prev_tx_item); + } + char *vout_address = LP_get_address_from_tx_out(jitem(jobj(prev_tx_item, "vout"), jint(vin_item, "vout"))); + if (strcmp(coin->smartaddr, vout_address) == 0) { + strcpy(item->category, "send"); + break; + } + free_json(params); } } int size = 0; cJSON *vout = jarray(&size, tx_item, "vout"); for (int k = 0; k < size; k++) { cJSON *vout_item = jitem(vout, k); - int addresses_size = 0; - cJSON *addresses = jarray(&addresses_size, jobj(vout_item, "scriptPubKey"), "addresses"); - for (int z = 0; z < addresses_size; z++) { - if (strcmp(coin->smartaddr, jstri(addresses, z)) == 0) { + char *vout_address = LP_get_address_from_tx_out(vout_item); + if (vout_address != 0) { + if (strcmp(coin->smartaddr, vout_address) == 0) { if (strcmp(item->category, "receive") == 0) { item->amount += jdouble(vout_item, "value"); } @@ -1327,7 +1381,7 @@ void LP_electrum_txhistory_loop(void *_coin) if (juint(history_item, "height") > 0) { item->time = juint(tx_item, "time"); strcpy(item->blockhash, jstr(tx_item, "blockhash")); - item->blockindex = juint(tx_item, "height"); + item->blockindex = juint(history_item, "height"); item->blocktime = juint(tx_item, "blocktime"); } else { // set current time temporary until confirmed From 17b555ccf3043133f48fca3a127d3f8566ed3e22 Mon Sep 17 00:00:00 2001 From: Artem Pikulin Date: Fri, 9 Nov 2018 20:54:35 +0700 Subject: [PATCH 07/42] Update cpp-ethereum submodule to speed up initial build. --- cpp-ethereum | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp-ethereum b/cpp-ethereum index e804e95d9..e4e76865e 160000 --- a/cpp-ethereum +++ b/cpp-ethereum @@ -1 +1 @@ -Subproject commit e804e95d9a71e87fc5e3e69a2888448f23bc724f +Subproject commit e4e76865e2726bbe9315ab4b26dbda3a7ae536f1 From 5b3e6d49680cdbba3ef29f7ebd63c2cc09ce8694 Mon Sep 17 00:00:00 2001 From: Artem Pikulin Date: Fri, 9 Nov 2018 20:59:49 +0700 Subject: [PATCH 08/42] Set clone_depth: 5 for appveyor, we don't need all history. --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 1a1772169..766256560 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -4,7 +4,7 @@ build_script: cache: - C:\.hunter - marketmaker_depends - +clone_depth: 5 after_build: - '7z a mm-win.zip .\build_win64_release\iguana\exchanges\Release\marketmaker-mainnet.exe From 14097b0bccdac8bedfc0cae24d821e75f060bad8 Mon Sep 17 00:00:00 2001 From: Artem Pikulin Date: Sat, 17 Nov 2018 16:18:55 +0700 Subject: [PATCH 09/42] Fix mem leak caused by electrum_txhistory_loop. --- iguana/exchanges/LP_etomic.c | 18 ++++++++++++------ iguana/exchanges/LP_socket.c | 13 ++++++++----- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/iguana/exchanges/LP_etomic.c b/iguana/exchanges/LP_etomic.c index d7b9710f3..0ec33c3c3 100644 --- a/iguana/exchanges/LP_etomic.c +++ b/iguana/exchanges/LP_etomic.c @@ -844,8 +844,10 @@ void LP_etomic_txhistory_loop(void *_coin) result = eth_tx_history_etherscan(coin->smartaddr); if (result) { json = cJSON_Parse(result); - if (json && is_cJSON_Array(jobj(json, "result"))) { - LP_etomic_process_tx_history_json(coin, jobj(json, "result")); + if (json) { + if (is_cJSON_Array(jobj(json, "result"))) { + LP_etomic_process_tx_history_json(coin, jobj(json, "result")); + } free_json(json); } free(result); @@ -856,8 +858,10 @@ void LP_etomic_txhistory_loop(void *_coin) result = internal_eth_tx_history_etherscan(coin->smartaddr); if (result) { json = cJSON_Parse(result); - if (json && is_cJSON_Array(jobj(json, "result"))) { - LP_etomic_process_tx_history_json(coin, jobj(json, "result")); + if (json) { + if (is_cJSON_Array(jobj(json, "result"))) { + LP_etomic_process_tx_history_json(coin, jobj(json, "result")); + } free_json(json); } free(result); @@ -866,8 +870,10 @@ void LP_etomic_txhistory_loop(void *_coin) result = erc20_tx_history_etherscan(coin->smartaddr, coin->etomic); if (result) { json = cJSON_Parse(result); - if (json && is_cJSON_Array(jobj(json, "result"))) { - LP_etomic_process_tx_history_json(coin, jobj(json, "result")); + if (json) { + if (is_cJSON_Array(jobj(json, "result"))) { + LP_etomic_process_tx_history_json(coin, jobj(json, "result")); + } free_json(json); } free(result); diff --git a/iguana/exchanges/LP_socket.c b/iguana/exchanges/LP_socket.c index 42e3c3ba2..e7ddb802b 100644 --- a/iguana/exchanges/LP_socket.c +++ b/iguana/exchanges/LP_socket.c @@ -1237,8 +1237,10 @@ void LP_electrum_get_tx_until_success(struct iguana_info *coin, char *tx_hash, c electrum_jsonarg(coin->symbol, coin->electrum, res, "blockchain.transaction.get", params, ELECTRUM_TIMEOUT); if (jobj(*res, "error") != NULL) { - printf("Error getting electrum tx %s %s %s\n", coin->symbol, jstri(params, 0), jprint(*res, 1)); + char *msg = jprint(*res, 1); + printf("Error getting electrum tx %s %s %s\n", coin->symbol, jstri(params, 0), msg); *res = cJSON_CreateObject(); + free(msg); sleep(5); continue; } else { @@ -1290,16 +1292,16 @@ void LP_electrum_txhistory_loop(void *_coin) ELECTRUM_TIMEOUT); } if (jobj(history, "error") != NULL) { - printf("Error getting electrum history of coin %s %s\n", coin->symbol, jprint(history, 1)); + char *msg = jprint(history, 1); + printf("Error getting electrum history of coin %s %s\n", coin->symbol, msg); + free(msg); sleep(10); continue; } int history_size = cJSON_GetArraySize(history); for (int i = history_size - 1; i >= 0; i--) { cJSON *history_item = jitem(history, i); - cJSON *tx_item = cJSON_CreateObject(); char *tx_hash = jstr(history_item, "tx_hash"); - LP_electrum_get_tx_until_success(coin, tx_hash, &tx_item); struct LP_tx_history_item *iter; int found = 0; int confirmed = 0; @@ -1325,7 +1327,8 @@ void LP_electrum_txhistory_loop(void *_coin) } else { continue; } - + cJSON *tx_item = cJSON_CreateObject(); + LP_electrum_get_tx_until_success(coin, tx_hash, &tx_item); if (!found) { strcpy(item->txid, jstr(tx_item, "txid")); // receive by default, but if at least 1 vin contains our address the category is send From 9194555173aa15d1d90c6640080682dd243f037b Mon Sep 17 00:00:00 2001 From: Artem Pikulin Date: Tue, 20 Nov 2018 17:33:31 +0700 Subject: [PATCH 10/42] Add debug build for linux platform with additional output. --- .travis.yml | 21 +- iguana/exchanges/CMakeLists.txt | 5 + iguana/exchanges/LP_mmjson.c | 3 + iguana/exchanges/LP_nativeDEX.c | 7 + iguana/exchanges/etomicswap/backward.hpp | 3800 +++++++++++++++++++++ iguana/exchanges/etomicswap/etomiclib.cpp | 13 + iguana/exchanges/etomicswap/etomiclib.h | 4 + 7 files changed, 3846 insertions(+), 7 deletions(-) create mode 100644 iguana/exchanges/etomicswap/backward.hpp diff --git a/.travis.yml b/.travis.yml index 581c49ba1..3e6fbc1f0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,7 @@ matrix: osx_image: xcode9.2 before_install: - - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y && sudo apt-get update && sudo apt-get install -y g++-7; fi + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y && sudo apt-get update && sudo apt-get install -y g++-7 libdw-dev; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then chmod +x travis_cmake_linux.sh && ./travis_cmake_linux.sh; fi - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then chmod +x travis_cmake_mac.sh && ./travis_cmake_mac.sh; fi - git submodule update --init --recursive @@ -21,11 +21,15 @@ script: - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then export THREAD_COUNT=`echo "$(nproc --all)"`; fi - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export THREAD_COUNT=`echo "$(sysctl -n hw.physicalcpu)"`; fi - mkdir build && cd build - - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then cmake -DMM_VERSION="$VERSION" -DCMAKE_C_COMPILER=/usr/bin/gcc-7 -DCMAKE_CXX_COMPILER=/usr/bin/g++-7 ..; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then cmake -DMM_VERSION="$VERSION" ..; fi + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then cmake -DCMAKE_BUILD_TYPE=Release -DMM_VERSION="$VERSION" -DCMAKE_C_COMPILER=/usr/bin/gcc-7 -DCMAKE_CXX_COMPILER=/usr/bin/g++-7 ..; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then cmake -DCMAKE_BUILD_TYPE=Release -DMM_VERSION="$VERSION" ..; fi - echo "cmake --build . --target marketmaker-mainnet -j $THREAD_COUNT" - cmake --build . --target marketmaker-mainnet -j $THREAD_COUNT - cmake --build . --target marketmaker-testnet -j $THREAD_COUNT +# Debug build on Linux, might help to troubleshoot some issues that are hard to reproduce + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; cd ../ && mkdir build-debug && cd build-debug; fi + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then cmake -DCMAKE_BUILD_TYPE=Debug -DMM_VERSION="$VERSION-Debug" -DCMAKE_C_COMPILER=/usr/bin/gcc-7 -DCMAKE_CXX_COMPILER=/usr/bin/g++-7 ..; fi + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then cmake --build . --target marketmaker-mainnet -j $THREAD_COUNT; fi cache: apt: true @@ -33,11 +37,14 @@ cache: - $HOME/.hunter before_deploy: + - cd ../ && mkdir deploy - export TAG=`echo "$(git rev-parse --short HEAD)"` - - mkdir deploy - - strip iguana/exchanges/marketmaker-mainnet - - strip iguana/exchanges/marketmaker-testnet - - tar -cvzf deploy/marketmaker-"$TRAVIS_OS_NAME"-"$TAG".tar.gz -C iguana/exchanges marketmaker-mainnet marketmaker-testnet + - strip build/iguana/exchanges/marketmaker-mainnet + - strip build/iguana/exchanges/marketmaker-testnet + - tar -cvf deploy/marketmaker-"$TRAVIS_OS_NAME"-"$TAG".tar -C build/iguana/exchanges marketmaker-mainnet marketmaker-testnet + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then tar --append --file=deploy/marketmaker-"$TRAVIS_OS_NAME"-"$TAG".tar --transform='flags=r;s|net|net-debug|' -C build-debug/iguana/exchanges marketmaker-mainnet; fi + - gzip deploy/marketmaker-"$TRAVIS_OS_NAME"-"$TAG".tar + deploy: provider: releases api_key: diff --git a/iguana/exchanges/CMakeLists.txt b/iguana/exchanges/CMakeLists.txt index 70a38fd59..30a5560ef 100644 --- a/iguana/exchanges/CMakeLists.txt +++ b/iguana/exchanges/CMakeLists.txt @@ -35,6 +35,11 @@ target_link_libraries(marketmaker-mainnet ${MM_LIBS} etomiclib-mainnet) if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") target_link_libraries(marketmaker-mainnet -static-libgcc -static-libstdc++) target_link_libraries(marketmaker-testnet -static-libgcc -static-libstdc++) +if (CMAKE_BUILD_TYPE MATCHES Debug) +target_link_libraries(marketmaker-mainnet dw) +target_link_libraries(marketmaker-testnet dw) +endif() + endif() if(NOT DEFINED MM_VERSION) SET(MM_VERSION UNKNOWN) diff --git a/iguana/exchanges/LP_mmjson.c b/iguana/exchanges/LP_mmjson.c index 591f46025..9e83980a8 100644 --- a/iguana/exchanges/LP_mmjson.c +++ b/iguana/exchanges/LP_mmjson.c @@ -652,6 +652,9 @@ int32_t MMJSON_encode(uint8_t *linebuf,char *line) for (i=0; i (%s)\n",k,line,decodestr==0?"":decodestr); +#if !defined(NDEBUG) && !defined(NOTETOMIC) && defined(__linux__) + print_stack_trace(); +#endif if ( decodestr != 0 ) free(decodestr); return(-1); diff --git a/iguana/exchanges/LP_nativeDEX.c b/iguana/exchanges/LP_nativeDEX.c index ec978a063..4b8327c1b 100644 --- a/iguana/exchanges/LP_nativeDEX.c +++ b/iguana/exchanges/LP_nativeDEX.c @@ -415,6 +415,9 @@ int32_t LP_sock_check(char *typestr,void *ctx,char *myipaddr,int32_t pubsock,int }*/ if ( validreq != 0 ) { +#if !defined(NDEBUG) && !defined(NOTETOMIC) && defined(__linux__) + printf("Msg from %s\n", remoteaddr); +#endif if ( (retstr= LP_process_message(ctx,typestr,myipaddr,pubsock,msg,msglen,sock)) != 0 ) free(retstr); @@ -1429,6 +1432,10 @@ int32_t LP_reserved_msg(int32_t priority,char *base,char *rel,bits256 pubkey,cha } } } +#if !defined(NDEBUG) && !defined(NOTETOMIC) && defined(__linux__) + printf("Message %s\n", msg); + print_stack_trace(); +#endif portable_mutex_lock(&LP_reservedmutex); if ( num_Reserved_msgs[priority] < sizeof(Reserved_msgs[priority])/sizeof(*Reserved_msgs[priority]) ) { diff --git a/iguana/exchanges/etomicswap/backward.hpp b/iguana/exchanges/etomicswap/backward.hpp new file mode 100644 index 000000000..69d5dbab7 --- /dev/null +++ b/iguana/exchanges/etomicswap/backward.hpp @@ -0,0 +1,3800 @@ +/* + * backward.hpp + * Copyright 2013 Google Inc. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef H_6B9572DA_A64B_49E6_B234_051480991C89 +#define H_6B9572DA_A64B_49E6_B234_051480991C89 + +#ifndef __cplusplus +# error "It's not going to compile without a C++ compiler..." +#endif + +#if defined(BACKWARD_CXX11) +#elif defined(BACKWARD_CXX98) +#else +# if __cplusplus >= 201103L +# define BACKWARD_CXX11 +# define BACKWARD_ATLEAST_CXX11 +# define BACKWARD_ATLEAST_CXX98 +# else +# define BACKWARD_CXX98 +# define BACKWARD_ATLEAST_CXX98 +# endif +#endif + +// You can define one of the following (or leave it to the auto-detection): +// +// #define BACKWARD_SYSTEM_LINUX +// - specialization for linux +// +// #define BACKWARD_SYSTEM_DARWIN +// - specialization for Mac OS X 10.5 and later. +// +// #define BACKWARD_SYSTEM_UNKNOWN +// - placebo implementation, does nothing. +// +#if defined(BACKWARD_SYSTEM_LINUX) +#elif defined(BACKWARD_SYSTEM_DARWIN) +#elif defined(BACKWARD_SYSTEM_UNKNOWN) +#else +# if defined(__linux) || defined(__linux__) +# define BACKWARD_SYSTEM_LINUX +# elif defined(__APPLE__) +# define BACKWARD_SYSTEM_DARWIN +# else +# define BACKWARD_SYSTEM_UNKNOWN +# endif +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(BACKWARD_SYSTEM_LINUX) + +// On linux, backtrace can back-trace or "walk" the stack using the following +// libraries: +// +// #define BACKWARD_HAS_UNWIND 1 +// - unwind comes from libgcc, but I saw an equivalent inside clang itself. +// - with unwind, the stacktrace is as accurate as it can possibly be, since +// this is used by the C++ runtine in gcc/clang for stack unwinding on +// exception. +// - normally libgcc is already linked to your program by default. +// +// #define BACKWARD_HAS_BACKTRACE == 1 +// - backtrace seems to be a little bit more portable than libunwind, but on +// linux, it uses unwind anyway, but abstract away a tiny information that is +// sadly really important in order to get perfectly accurate stack traces. +// - backtrace is part of the (e)glib library. +// +// The default is: +// #define BACKWARD_HAS_UNWIND == 1 +// +// Note that only one of the define should be set to 1 at a time. +// +# if BACKWARD_HAS_UNWIND == 1 +# elif BACKWARD_HAS_BACKTRACE == 1 +# else +# undef BACKWARD_HAS_UNWIND +# define BACKWARD_HAS_UNWIND 1 +# undef BACKWARD_HAS_BACKTRACE +# define BACKWARD_HAS_BACKTRACE 0 +# endif + +// On linux, backward can extract detailed information about a stack trace +// using one of the following libraries: +// +// #define BACKWARD_HAS_DW 1 +// - libdw gives you the most juicy details out of your stack traces: +// - object filename +// - function name +// - source filename +// - line and column numbers +// - source code snippet (assuming the file is accessible) +// - variables name and values (if not optimized out) +// - You need to link with the lib "dw": +// - apt-get install libdw-dev +// - g++/clang++ -ldw ... +// +// #define BACKWARD_HAS_BFD 1 +// - With libbfd, you get a fair amount of details: +// - object filename +// - function name +// - source filename +// - line numbers +// - source code snippet (assuming the file is accessible) +// - You need to link with the lib "bfd": +// - apt-get install binutils-dev +// - g++/clang++ -lbfd ... +// +// #define BACKWARD_HAS_DWARF 1 +// - libdwarf gives you the most juicy details out of your stack traces: +// - object filename +// - function name +// - source filename +// - line and column numbers +// - source code snippet (assuming the file is accessible) +// - variables name and values (if not optimized out) +// - You need to link with the lib "dwarf": +// - apt-get install libdwarf-dev +// - g++/clang++ -ldwarf ... +// +// #define BACKWARD_HAS_BACKTRACE_SYMBOL 1 +// - backtrace provides minimal details for a stack trace: +// - object filename +// - function name +// - backtrace is part of the (e)glib library. +// +// The default is: +// #define BACKWARD_HAS_BACKTRACE_SYMBOL == 1 +// +// Note that only one of the define should be set to 1 at a time. +// +# if BACKWARD_HAS_DW == 1 +# elif BACKWARD_HAS_BFD == 1 +# elif BACKWARD_HAS_DWARF == 1 +# elif BACKWARD_HAS_BACKTRACE_SYMBOL == 1 +# else +# undef BACKWARD_HAS_DW +# define BACKWARD_HAS_DW 0 +# undef BACKWARD_HAS_BFD +# define BACKWARD_HAS_BFD 0 +# undef BACKWARD_HAS_DWARF +# define BACKWARD_HAS_DWARF 0 +# undef BACKWARD_HAS_BACKTRACE_SYMBOL +# define BACKWARD_HAS_BACKTRACE_SYMBOL 1 +# endif + +# include +# include +# ifdef __ANDROID__ +// Old Android API levels define _Unwind_Ptr in both link.h and unwind.h +// Rename the one in link.h as we are not going to be using it +# define _Unwind_Ptr _Unwind_Ptr_Custom +# include +# undef _Unwind_Ptr +# else +# include +# endif +# include +# include +# include +# include + +# if BACKWARD_HAS_BFD == 1 +// NOTE: defining PACKAGE{,_VERSION} is required before including +// bfd.h on some platforms, see also: +// https://sourceware.org/bugzilla/show_bug.cgi?id=14243 +# ifndef PACKAGE +# define PACKAGE +# endif +# ifndef PACKAGE_VERSION +# define PACKAGE_VERSION +# endif +# include +# ifndef _GNU_SOURCE +# define _GNU_SOURCE +# include +# undef _GNU_SOURCE +# else +# include +# endif +# endif + +# if BACKWARD_HAS_DW == 1 +# include +# include +# include +# endif + +# if BACKWARD_HAS_DWARF == 1 +# include +# include +# include +# include +# include +# ifndef _GNU_SOURCE +# define _GNU_SOURCE +# include +# undef _GNU_SOURCE +# else +# include +# endif +# endif + +# if (BACKWARD_HAS_BACKTRACE == 1) || (BACKWARD_HAS_BACKTRACE_SYMBOL == 1) + // then we shall rely on backtrace +# include +# endif + +#endif // defined(BACKWARD_SYSTEM_LINUX) + +#if defined(BACKWARD_SYSTEM_DARWIN) +// On Darwin, backtrace can back-trace or "walk" the stack using the following +// libraries: +// +// #define BACKWARD_HAS_UNWIND 1 +// - unwind comes from libgcc, but I saw an equivalent inside clang itself. +// - with unwind, the stacktrace is as accurate as it can possibly be, since +// this is used by the C++ runtine in gcc/clang for stack unwinding on +// exception. +// - normally libgcc is already linked to your program by default. +// +// #define BACKWARD_HAS_BACKTRACE == 1 +// - backtrace is available by default, though it does not produce as much information +// as another library might. +// +// The default is: +// #define BACKWARD_HAS_UNWIND == 1 +// +// Note that only one of the define should be set to 1 at a time. +// +# if BACKWARD_HAS_UNWIND == 1 +# elif BACKWARD_HAS_BACKTRACE == 1 +# else +# undef BACKWARD_HAS_UNWIND +# define BACKWARD_HAS_UNWIND 1 +# undef BACKWARD_HAS_BACKTRACE +# define BACKWARD_HAS_BACKTRACE 0 +# endif + +// On Darwin, backward can extract detailed information about a stack trace +// using one of the following libraries: +// +// #define BACKWARD_HAS_BACKTRACE_SYMBOL 1 +// - backtrace provides minimal details for a stack trace: +// - object filename +// - function name +// +// The default is: +// #define BACKWARD_HAS_BACKTRACE_SYMBOL == 1 +// +# if BACKWARD_HAS_BACKTRACE_SYMBOL == 1 +# else +# undef BACKWARD_HAS_BACKTRACE_SYMBOL +# define BACKWARD_HAS_BACKTRACE_SYMBOL 1 +# endif + +# include +# include +# include +# include +# include +# include + +# if (BACKWARD_HAS_BACKTRACE == 1) || (BACKWARD_HAS_BACKTRACE_SYMBOL == 1) +# include +# endif +#endif // defined(BACKWARD_SYSTEM_DARWIN) + +#if BACKWARD_HAS_UNWIND == 1 + +# include +// while gcc's unwind.h defines something like that: +// extern _Unwind_Ptr _Unwind_GetIP (struct _Unwind_Context *); +// extern _Unwind_Ptr _Unwind_GetIPInfo (struct _Unwind_Context *, int *); +// +// clang's unwind.h defines something like this: +// uintptr_t _Unwind_GetIP(struct _Unwind_Context* __context); +// +// Even if the _Unwind_GetIPInfo can be linked to, it is not declared, worse we +// cannot just redeclare it because clang's unwind.h doesn't define _Unwind_Ptr +// anyway. +// +// Luckily we can play on the fact that the guard macros have a different name: +#ifdef __CLANG_UNWIND_H +// In fact, this function still comes from libgcc (on my different linux boxes, +// clang links against libgcc). +# include +extern "C" uintptr_t _Unwind_GetIPInfo(_Unwind_Context*, int*); +#endif + +#endif // BACKWARD_HAS_UNWIND == 1 + +#ifdef BACKWARD_ATLEAST_CXX11 +# include +# include // for std::swap + namespace backward { + namespace details { + template + struct hashtable { + typedef std::unordered_map type; + }; + using std::move; + } // namespace details + } // namespace backward +#else // NOT BACKWARD_ATLEAST_CXX11 +# define nullptr NULL +# define override +# include + namespace backward { + namespace details { + template + struct hashtable { + typedef std::map type; + }; + template + const T& move(const T& v) { return v; } + template + T& move(T& v) { return v; } + } // namespace details + } // namespace backward +#endif // BACKWARD_ATLEAST_CXX11 + +namespace backward { + +namespace system_tag { + struct linux_tag; // seems that I cannot call that "linux" because the name + // is already defined... so I am adding _tag everywhere. + struct darwin_tag; + struct unknown_tag; + +#if defined(BACKWARD_SYSTEM_LINUX) + typedef linux_tag current_tag; +#elif defined(BACKWARD_SYSTEM_DARWIN) + typedef darwin_tag current_tag; +#elif defined(BACKWARD_SYSTEM_UNKNOWN) + typedef unknown_tag current_tag; +#else +# error "May I please get my system defines?" +#endif +} // namespace system_tag + + +namespace trace_resolver_tag { +#if defined(BACKWARD_SYSTEM_LINUX) + struct libdw; + struct libbfd; + struct libdwarf; + struct backtrace_symbol; + +# if BACKWARD_HAS_DW == 1 + typedef libdw current; +# elif BACKWARD_HAS_BFD == 1 + typedef libbfd current; +# elif BACKWARD_HAS_DWARF == 1 + typedef libdwarf current; +# elif BACKWARD_HAS_BACKTRACE_SYMBOL == 1 + typedef backtrace_symbol current; +# else +# error "You shall not pass, until you know what you want." +# endif +#elif defined(BACKWARD_SYSTEM_DARWIN) + struct backtrace_symbol; + +# if BACKWARD_HAS_BACKTRACE_SYMBOL == 1 + typedef backtrace_symbol current; +# else +# error "You shall not pass, until you know what you want." +# endif +#endif +} // namespace trace_resolver_tag + + +namespace details { + +template + struct rm_ptr { typedef T type; }; + +template + struct rm_ptr { typedef T type; }; + +template + struct rm_ptr { typedef const T type; }; + +template +struct deleter { + template + void operator()(U& ptr) const { + (*F)(ptr); + } +}; + +template +struct default_delete { + void operator()(T& ptr) const { + delete ptr; + } +}; + +template > +class handle { + struct dummy; + T _val; + bool _empty; + +#ifdef BACKWARD_ATLEAST_CXX11 + handle(const handle&) = delete; + handle& operator=(const handle&) = delete; +#endif + +public: + ~handle() { + if (!_empty) { + Deleter()(_val); + } + } + + explicit handle(): _val(), _empty(true) {} + explicit handle(T val): _val(val), _empty(false) { if(!_val) _empty = true; } + +#ifdef BACKWARD_ATLEAST_CXX11 + handle(handle&& from): _empty(true) { + swap(from); + } + handle& operator=(handle&& from) { + swap(from); return *this; + } +#else + explicit handle(const handle& from): _empty(true) { + // some sort of poor man's move semantic. + swap(const_cast(from)); + } + handle& operator=(const handle& from) { + // some sort of poor man's move semantic. + swap(const_cast(from)); return *this; + } +#endif + + void reset(T new_val) { + handle tmp(new_val); + swap(tmp); + } + operator const dummy*() const { + if (_empty) { + return nullptr; + } + return reinterpret_cast(_val); + } + T get() { + return _val; + } + T release() { + _empty = true; + return _val; + } + void swap(handle& b) { + using std::swap; + swap(b._val, _val); // can throw, we are safe here. + swap(b._empty, _empty); // should not throw: if you cannot swap two + // bools without throwing... It's a lost cause anyway! + } + + T operator->() { return _val; } + const T operator->() const { return _val; } + + typedef typename rm_ptr::type& ref_t; + typedef const typename rm_ptr::type& const_ref_t; + ref_t operator*() { return *_val; } + const_ref_t operator*() const { return *_val; } + ref_t operator[](size_t idx) { return _val[idx]; } + + // Watch out, we've got a badass over here + T* operator&() { + _empty = false; + return &_val; + } +}; + +// Default demangler implementation (do nothing). +template +struct demangler_impl { + static std::string demangle(const char* funcname) { + return funcname; + } +}; + +#if defined(BACKWARD_SYSTEM_LINUX) || defined(BACKWARD_SYSTEM_DARWIN) + +template <> +struct demangler_impl { + demangler_impl(): _demangle_buffer_length(0) {} + + std::string demangle(const char* funcname) { + using namespace details; + char* result = abi::__cxa_demangle(funcname, + _demangle_buffer.release(), &_demangle_buffer_length, nullptr); + if(result) { + _demangle_buffer.reset(result); + return result; + } + return funcname; + } + +private: + details::handle _demangle_buffer; + size_t _demangle_buffer_length; +}; + +#endif // BACKWARD_SYSTEM_LINUX || BACKWARD_SYSTEM_DARWIN + +struct demangler: + public demangler_impl {}; + +} // namespace details + +/*************** A TRACE ***************/ + +struct Trace { + void* addr; + size_t idx; + + Trace(): + addr(nullptr), idx(0) {} + + explicit Trace(void* _addr, size_t _idx): + addr(_addr), idx(_idx) {} +}; + +struct ResolvedTrace: public Trace { + + struct SourceLoc { + std::string function; + std::string filename; + unsigned line; + unsigned col; + + SourceLoc(): line(0), col(0) {} + + bool operator==(const SourceLoc& b) const { + return function == b.function + && filename == b.filename + && line == b.line + && col == b.col; + } + + bool operator!=(const SourceLoc& b) const { + return !(*this == b); + } + }; + + // In which binary object this trace is located. + std::string object_filename; + + // The function in the object that contain the trace. This is not the same + // as source.function which can be an function inlined in object_function. + std::string object_function; + + // The source location of this trace. It is possible for filename to be + // empty and for line/col to be invalid (value 0) if this information + // couldn't be deduced, for example if there is no debug information in the + // binary object. + SourceLoc source; + + // An optionals list of "inliners". All the successive sources location + // from where the source location of the trace (the attribute right above) + // is inlined. It is especially useful when you compiled with optimization. + typedef std::vector source_locs_t; + source_locs_t inliners; + + ResolvedTrace(): + Trace() {} + ResolvedTrace(const Trace& mini_trace): + Trace(mini_trace) {} +}; + +/*************** STACK TRACE ***************/ + +// default implemention. +template +class StackTraceImpl { +public: + size_t size() const { return 0; } + Trace operator[](size_t) { return Trace(); } + size_t load_here(size_t=0) { return 0; } + size_t load_from(void*, size_t=0) { return 0; } + size_t thread_id() const { return 0; } + void skip_n_firsts(size_t) { } +}; + +class StackTraceImplBase { +public: + StackTraceImplBase(): _thread_id(0), _skip(0) {} + + size_t thread_id() const { + return _thread_id; + } + + void skip_n_firsts(size_t n) { _skip = n; } + +protected: + void load_thread_info() { +#ifdef BACKWARD_SYSTEM_LINUX +#ifndef __ANDROID__ + _thread_id = static_cast(syscall(SYS_gettid)); +#else + _thread_id = static_cast(gettid()); +#endif + if (_thread_id == static_cast(getpid())) { + // If the thread is the main one, let's hide that. + // I like to keep little secret sometimes. + _thread_id = 0; + } +#elif defined(BACKWARD_SYSTEM_DARWIN) + _thread_id = reinterpret_cast(pthread_self()); + if (pthread_main_np() == 1) { + // If the thread is the main one, let's hide that. + _thread_id = 0; + } +#endif + } + + size_t skip_n_firsts() const { return _skip; } + +private: + size_t _thread_id; + size_t _skip; +}; + +class StackTraceImplHolder: public StackTraceImplBase { +public: + size_t size() const { + return _stacktrace.size() ? _stacktrace.size() - skip_n_firsts() : 0; + } + Trace operator[](size_t idx) const { + if (idx >= size()) { + return Trace(); + } + return Trace(_stacktrace[idx + skip_n_firsts()], idx); + } + void* const* begin() const { + if (size()) { + return &_stacktrace[skip_n_firsts()]; + } + return nullptr; + } + +protected: + std::vector _stacktrace; +}; + + +#if BACKWARD_HAS_UNWIND == 1 + +namespace details { + +template +class Unwinder { +public: + size_t operator()(F& f, size_t depth) { + _f = &f; + _index = -1; + _depth = depth; + _Unwind_Backtrace(&this->backtrace_trampoline, this); + return static_cast(_index); + } + +private: + F* _f; + ssize_t _index; + size_t _depth; + + static _Unwind_Reason_Code backtrace_trampoline( + _Unwind_Context* ctx, void *self) { + return (static_cast(self))->backtrace(ctx); + } + + _Unwind_Reason_Code backtrace(_Unwind_Context* ctx) { + if (_index >= 0 && static_cast(_index) >= _depth) + return _URC_END_OF_STACK; + + int ip_before_instruction = 0; + uintptr_t ip = _Unwind_GetIPInfo(ctx, &ip_before_instruction); + + if (!ip_before_instruction) { + // calculating 0-1 for unsigned, looks like a possible bug to sanitiziers, so let's do it explicitly: + if (ip==0) { + ip = std::numeric_limits::max(); // set it to 0xffff... (as from casting 0-1) + } else { + ip -= 1; // else just normally decrement it (no overflow/underflow will happen) + } + } + + if (_index >= 0) { // ignore first frame. + (*_f)(static_cast(_index), reinterpret_cast(ip)); + } + _index += 1; + return _URC_NO_REASON; + } +}; + +template +size_t unwind(F f, size_t depth) { + Unwinder unwinder; + return unwinder(f, depth); +} + +} // namespace details + + +template <> +class StackTraceImpl: public StackTraceImplHolder { +public: + __attribute__ ((noinline)) // TODO use some macro + size_t load_here(size_t depth=32) { + load_thread_info(); + if (depth == 0) { + return 0; + } + _stacktrace.resize(depth); + size_t trace_cnt = details::unwind(callback(*this), depth); + _stacktrace.resize(trace_cnt); + skip_n_firsts(0); + return size(); + } + size_t load_from(void* addr, size_t depth=32) { + load_here(depth + 8); + + for (size_t i = 0; i < _stacktrace.size(); ++i) { + if (_stacktrace[i] == addr) { + skip_n_firsts(i); + break; + } + } + + _stacktrace.resize(std::min(_stacktrace.size(), + skip_n_firsts() + depth)); + return size(); + } + +private: + struct callback { + StackTraceImpl& self; + callback(StackTraceImpl& _self): self(_self) {} + + void operator()(size_t idx, void* addr) { + self._stacktrace[idx] = addr; + } + }; +}; + + +#else // BACKWARD_HAS_UNWIND == 0 + +template <> +class StackTraceImpl: public StackTraceImplHolder { +public: + __attribute__ ((noinline)) // TODO use some macro + size_t load_here(size_t depth=32) { + load_thread_info(); + if (depth == 0) { + return 0; + } + _stacktrace.resize(depth + 1); + size_t trace_cnt = backtrace(&_stacktrace[0], _stacktrace.size()); + _stacktrace.resize(trace_cnt); + skip_n_firsts(1); + return size(); + } + + size_t load_from(void* addr, size_t depth=32) { + load_here(depth + 8); + + for (size_t i = 0; i < _stacktrace.size(); ++i) { + if (_stacktrace[i] == addr) { + skip_n_firsts(i); + _stacktrace[i] = (void*)( (uintptr_t)_stacktrace[i] + 1); + break; + } + } + + _stacktrace.resize(std::min(_stacktrace.size(), + skip_n_firsts() + depth)); + return size(); + } +}; + +#endif // BACKWARD_HAS_UNWIND + +class StackTrace: + public StackTraceImpl {}; + +/*************** TRACE RESOLVER ***************/ + +template +class TraceResolverImpl; + +#ifdef BACKWARD_SYSTEM_UNKNOWN + +template <> +class TraceResolverImpl { +public: + template + void load_stacktrace(ST&) {} + ResolvedTrace resolve(ResolvedTrace t) { + return t; + } +}; + +#endif + +class TraceResolverImplBase { +protected: + std::string demangle(const char* funcname) { + return _demangler.demangle(funcname); + } + +private: + details::demangler _demangler; +}; + +#ifdef BACKWARD_SYSTEM_LINUX + +template +class TraceResolverLinuxImpl; + +#if BACKWARD_HAS_BACKTRACE_SYMBOL == 1 + +template <> +class TraceResolverLinuxImpl: + public TraceResolverImplBase { +public: + template + void load_stacktrace(ST& st) { + using namespace details; + if (st.size() == 0) { + return; + } + _symbols.reset( + backtrace_symbols(st.begin(), (int)st.size()) + ); + } + + ResolvedTrace resolve(ResolvedTrace trace) { + char* filename = _symbols[trace.idx]; + char* funcname = filename; + while (*funcname && *funcname != '(') { + funcname += 1; + } + trace.object_filename.assign(filename, funcname); // ok even if funcname is the ending \0 (then we assign entire string) + + if (*funcname) { // if it's not end of string (e.g. from last frame ip==0) + funcname += 1; + char* funcname_end = funcname; + while (*funcname_end && *funcname_end != ')' && *funcname_end != '+') { + funcname_end += 1; + } + *funcname_end = '\0'; + trace.object_function = this->demangle(funcname); + trace.source.function = trace.object_function; // we cannot do better. + } + return trace; + } + +private: + details::handle _symbols; +}; + +#endif // BACKWARD_HAS_BACKTRACE_SYMBOL == 1 + +#if BACKWARD_HAS_BFD == 1 + +template <> +class TraceResolverLinuxImpl: + public TraceResolverImplBase { + static std::string read_symlink(std::string const & symlink_path) { + std::string path; + path.resize(100); + + while(true) { + ssize_t len = ::readlink(symlink_path.c_str(), &*path.begin(), path.size()); + if(len < 0) { + return ""; + } + if (static_cast(len) == path.size()) { + path.resize(path.size() * 2); + } + else { + path.resize(static_cast(len)); + break; + } + } + + return path; + } +public: + TraceResolverLinuxImpl(): _bfd_loaded(false) {} + + template + void load_stacktrace(ST&) {} + + ResolvedTrace resolve(ResolvedTrace trace) { + Dl_info symbol_info; + + // trace.addr is a virtual address in memory pointing to some code. + // Let's try to find from which loaded object it comes from. + // The loaded object can be yourself btw. + if (!dladdr(trace.addr, &symbol_info)) { + return trace; // dat broken trace... + } + + std::string argv0; + { + std::ifstream ifs("/proc/self/cmdline"); + std::getline(ifs, argv0, '\0'); + } + std::string tmp; + if(symbol_info.dli_fname == argv0) { + tmp = read_symlink("/proc/self/exe"); + symbol_info.dli_fname = tmp.c_str(); + } + + // Now we get in symbol_info: + // .dli_fname: + // pathname of the shared object that contains the address. + // .dli_fbase: + // where the object is loaded in memory. + // .dli_sname: + // the name of the nearest symbol to trace.addr, we expect a + // function name. + // .dli_saddr: + // the exact address corresponding to .dli_sname. + + if (symbol_info.dli_sname) { + trace.object_function = demangle(symbol_info.dli_sname); + } + + if (!symbol_info.dli_fname) { + return trace; + } + + trace.object_filename = symbol_info.dli_fname; + bfd_fileobject& fobj = load_object_with_bfd(symbol_info.dli_fname); + if (!fobj.handle) { + return trace; // sad, we couldn't load the object :( + } + + + find_sym_result* details_selected; // to be filled. + + // trace.addr is the next instruction to be executed after returning + // from the nested stack frame. In C++ this usually relate to the next + // statement right after the function call that leaded to a new stack + // frame. This is not usually what you want to see when printing out a + // stacktrace... + find_sym_result details_call_site = find_symbol_details(fobj, + trace.addr, symbol_info.dli_fbase); + details_selected = &details_call_site; + +#if BACKWARD_HAS_UNWIND == 0 + // ...this is why we also try to resolve the symbol that is right + // before the return address. If we are lucky enough, we will get the + // line of the function that was called. But if the code is optimized, + // we might get something absolutely not related since the compiler + // can reschedule the return address with inline functions and + // tail-call optimisation (among other things that I don't even know + // or cannot even dream about with my tiny limited brain). + find_sym_result details_adjusted_call_site = find_symbol_details(fobj, + (void*) (uintptr_t(trace.addr) - 1), + symbol_info.dli_fbase); + + // In debug mode, we should always get the right thing(TM). + if (details_call_site.found && details_adjusted_call_site.found) { + // Ok, we assume that details_adjusted_call_site is a better estimation. + details_selected = &details_adjusted_call_site; + trace.addr = (void*) (uintptr_t(trace.addr) - 1); + } + + if (details_selected == &details_call_site && details_call_site.found) { + // we have to re-resolve the symbol in order to reset some + // internal state in BFD... so we can call backtrace_inliners + // thereafter... + details_call_site = find_symbol_details(fobj, trace.addr, + symbol_info.dli_fbase); + } +#endif // BACKWARD_HAS_UNWIND + + if (details_selected->found) { + if (details_selected->filename) { + trace.source.filename = details_selected->filename; + } + trace.source.line = details_selected->line; + + if (details_selected->funcname) { + // this time we get the name of the function where the code is + // located, instead of the function were the address is + // located. In short, if the code was inlined, we get the + // function correspoding to the code. Else we already got in + // trace.function. + trace.source.function = demangle(details_selected->funcname); + + if (!symbol_info.dli_sname) { + // for the case dladdr failed to find the symbol name of + // the function, we might as well try to put something + // here. + trace.object_function = trace.source.function; + } + } + + // Maybe the source of the trace got inlined inside the function + // (trace.source.function). Let's see if we can get all the inlined + // calls along the way up to the initial call site. + trace.inliners = backtrace_inliners(fobj, *details_selected); + +#if 0 + if (trace.inliners.size() == 0) { + // Maybe the trace was not inlined... or maybe it was and we + // are lacking the debug information. Let's try to make the + // world better and see if we can get the line number of the + // function (trace.source.function) now. + // + // We will get the location of where the function start (to be + // exact: the first instruction that really start the + // function), not where the name of the function is defined. + // This can be quite far away from the name of the function + // btw. + // + // If the source of the function is the same as the source of + // the trace, we cannot say if the trace was really inlined or + // not. However, if the filename of the source is different + // between the function and the trace... we can declare it as + // an inliner. This is not 100% accurate, but better than + // nothing. + + if (symbol_info.dli_saddr) { + find_sym_result details = find_symbol_details(fobj, + symbol_info.dli_saddr, + symbol_info.dli_fbase); + + if (details.found) { + ResolvedTrace::SourceLoc diy_inliner; + diy_inliner.line = details.line; + if (details.filename) { + diy_inliner.filename = details.filename; + } + if (details.funcname) { + diy_inliner.function = demangle(details.funcname); + } else { + diy_inliner.function = trace.source.function; + } + if (diy_inliner != trace.source) { + trace.inliners.push_back(diy_inliner); + } + } + } + } +#endif + } + + return trace; + } + +private: + bool _bfd_loaded; + + typedef details::handle + > bfd_handle_t; + + typedef details::handle bfd_symtab_t; + + + struct bfd_fileobject { + bfd_handle_t handle; + bfd_vma base_addr; + bfd_symtab_t symtab; + bfd_symtab_t dynamic_symtab; + }; + + typedef details::hashtable::type + fobj_bfd_map_t; + fobj_bfd_map_t _fobj_bfd_map; + + bfd_fileobject& load_object_with_bfd(const std::string& filename_object) { + using namespace details; + + if (!_bfd_loaded) { + using namespace details; + bfd_init(); + _bfd_loaded = true; + } + + fobj_bfd_map_t::iterator it = + _fobj_bfd_map.find(filename_object); + if (it != _fobj_bfd_map.end()) { + return it->second; + } + + // this new object is empty for now. + bfd_fileobject& r = _fobj_bfd_map[filename_object]; + + // we do the work temporary in this one; + bfd_handle_t bfd_handle; + + int fd = open(filename_object.c_str(), O_RDONLY); + bfd_handle.reset( + bfd_fdopenr(filename_object.c_str(), "default", fd) + ); + if (!bfd_handle) { + close(fd); + return r; + } + + if (!bfd_check_format(bfd_handle.get(), bfd_object)) { + return r; // not an object? You lose. + } + + if ((bfd_get_file_flags(bfd_handle.get()) & HAS_SYMS) == 0) { + return r; // that's what happen when you forget to compile in debug. + } + + ssize_t symtab_storage_size = + bfd_get_symtab_upper_bound(bfd_handle.get()); + + ssize_t dyn_symtab_storage_size = + bfd_get_dynamic_symtab_upper_bound(bfd_handle.get()); + + if (symtab_storage_size <= 0 && dyn_symtab_storage_size <= 0) { + return r; // weird, is the file is corrupted? + } + + bfd_symtab_t symtab, dynamic_symtab; + ssize_t symcount = 0, dyn_symcount = 0; + + if (symtab_storage_size > 0) { + symtab.reset( + static_cast(malloc(static_cast(symtab_storage_size))) + ); + symcount = bfd_canonicalize_symtab( + bfd_handle.get(), symtab.get() + ); + } + + if (dyn_symtab_storage_size > 0) { + dynamic_symtab.reset( + static_cast(malloc(static_cast(dyn_symtab_storage_size))) + ); + dyn_symcount = bfd_canonicalize_dynamic_symtab( + bfd_handle.get(), dynamic_symtab.get() + ); + } + + + if (symcount <= 0 && dyn_symcount <= 0) { + return r; // damned, that's a stripped file that you got there! + } + + r.handle = move(bfd_handle); + r.symtab = move(symtab); + r.dynamic_symtab = move(dynamic_symtab); + return r; + } + + struct find_sym_result { + bool found; + const char* filename; + const char* funcname; + unsigned int line; + }; + + struct find_sym_context { + TraceResolverLinuxImpl* self; + bfd_fileobject* fobj; + void* addr; + void* base_addr; + find_sym_result result; + }; + + find_sym_result find_symbol_details(bfd_fileobject& fobj, void* addr, + void* base_addr) { + find_sym_context context; + context.self = this; + context.fobj = &fobj; + context.addr = addr; + context.base_addr = base_addr; + context.result.found = false; + bfd_map_over_sections(fobj.handle.get(), &find_in_section_trampoline, + static_cast(&context)); + return context.result; + } + + static void find_in_section_trampoline(bfd*, asection* section, + void* data) { + find_sym_context* context = static_cast(data); + context->self->find_in_section( + reinterpret_cast(context->addr), + reinterpret_cast(context->base_addr), + *context->fobj, + section, context->result + ); + } + + void find_in_section(bfd_vma addr, bfd_vma base_addr, + bfd_fileobject& fobj, asection* section, find_sym_result& result) + { + if (result.found) return; + + if ((bfd_get_section_flags(fobj.handle.get(), section) + & SEC_ALLOC) == 0) + return; // a debug section is never loaded automatically. + + bfd_vma sec_addr = bfd_get_section_vma(fobj.handle.get(), section); + bfd_size_type size = bfd_get_section_size(section); + + // are we in the boundaries of the section? + if (addr < sec_addr || addr >= sec_addr + size) { + addr -= base_addr; // oups, a relocated object, lets try again... + if (addr < sec_addr || addr >= sec_addr + size) { + return; + } + } + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" + if (!result.found && fobj.symtab) { + result.found = bfd_find_nearest_line(fobj.handle.get(), section, + fobj.symtab.get(), addr - sec_addr, &result.filename, + &result.funcname, &result.line); + } + + if (!result.found && fobj.dynamic_symtab) { + result.found = bfd_find_nearest_line(fobj.handle.get(), section, + fobj.dynamic_symtab.get(), addr - sec_addr, + &result.filename, &result.funcname, &result.line); + } +#pragma clang diagnostic pop + + } + + ResolvedTrace::source_locs_t backtrace_inliners(bfd_fileobject& fobj, + find_sym_result previous_result) { + // This function can be called ONLY after a SUCCESSFUL call to + // find_symbol_details. The state is global to the bfd_handle. + ResolvedTrace::source_locs_t results; + while (previous_result.found) { + find_sym_result result; + result.found = bfd_find_inliner_info(fobj.handle.get(), + &result.filename, &result.funcname, &result.line); + + if (result.found) /* and not ( + cstrings_eq(previous_result.filename, result.filename) + and cstrings_eq(previous_result.funcname, result.funcname) + and result.line == previous_result.line + )) */ { + ResolvedTrace::SourceLoc src_loc; + src_loc.line = result.line; + if (result.filename) { + src_loc.filename = result.filename; + } + if (result.funcname) { + src_loc.function = demangle(result.funcname); + } + results.push_back(src_loc); + } + previous_result = result; + } + return results; + } + + bool cstrings_eq(const char* a, const char* b) { + if (!a || !b) { + return false; + } + return strcmp(a, b) == 0; + } + +}; +#endif // BACKWARD_HAS_BFD == 1 + +#if BACKWARD_HAS_DW == 1 + +template <> +class TraceResolverLinuxImpl: + public TraceResolverImplBase { +public: + TraceResolverLinuxImpl(): _dwfl_handle_initialized(false) {} + + template + void load_stacktrace(ST&) {} + + ResolvedTrace resolve(ResolvedTrace trace) { + using namespace details; + + Dwarf_Addr trace_addr = (Dwarf_Addr) trace.addr; + + if (!_dwfl_handle_initialized) { + // initialize dwfl... + _dwfl_cb.reset(new Dwfl_Callbacks); + _dwfl_cb->find_elf = &dwfl_linux_proc_find_elf; + _dwfl_cb->find_debuginfo = &dwfl_standard_find_debuginfo; + _dwfl_cb->debuginfo_path = 0; + + _dwfl_handle.reset(dwfl_begin(_dwfl_cb.get())); + _dwfl_handle_initialized = true; + + if (!_dwfl_handle) { + return trace; + } + + // ...from the current process. + dwfl_report_begin(_dwfl_handle.get()); + int r = dwfl_linux_proc_report (_dwfl_handle.get(), getpid()); + dwfl_report_end(_dwfl_handle.get(), NULL, NULL); + if (r < 0) { + return trace; + } + } + + if (!_dwfl_handle) { + return trace; + } + + // find the module (binary object) that contains the trace's address. + // This is not using any debug information, but the addresses ranges of + // all the currently loaded binary object. + Dwfl_Module* mod = dwfl_addrmodule(_dwfl_handle.get(), trace_addr); + if (mod) { + // now that we found it, lets get the name of it, this will be the + // full path to the running binary or one of the loaded library. + const char* module_name = dwfl_module_info (mod, + 0, 0, 0, 0, 0, 0, 0); + if (module_name) { + trace.object_filename = module_name; + } + // We also look after the name of the symbol, equal or before this + // address. This is found by walking the symtab. We should get the + // symbol corresponding to the function (mangled) containing the + // address. If the code corresponding to the address was inlined, + // this is the name of the out-most inliner function. + const char* sym_name = dwfl_module_addrname(mod, trace_addr); + if (sym_name) { + trace.object_function = demangle(sym_name); + } + } + + // now let's get serious, and find out the source location (file and + // line number) of the address. + + // This function will look in .debug_aranges for the address and map it + // to the location of the compilation unit DIE in .debug_info and + // return it. + Dwarf_Addr mod_bias = 0; + Dwarf_Die* cudie = dwfl_module_addrdie(mod, trace_addr, &mod_bias); + +#if 1 + if (!cudie) { + // Sadly clang does not generate the section .debug_aranges, thus + // dwfl_module_addrdie will fail early. Clang doesn't either set + // the lowpc/highpc/range info for every compilation unit. + // + // So in order to save the world: + // for every compilation unit, we will iterate over every single + // DIEs. Normally functions should have a lowpc/highpc/range, which + // we will use to infer the compilation unit. + + // note that this is probably badly inefficient. + while ((cudie = dwfl_module_nextcu(mod, cudie, &mod_bias))) { + Dwarf_Die die_mem; + Dwarf_Die* fundie = find_fundie_by_pc(cudie, + trace_addr - mod_bias, &die_mem); + if (fundie) { + break; + } + } + } +#endif + +//#define BACKWARD_I_DO_NOT_RECOMMEND_TO_ENABLE_THIS_HORRIBLE_PIECE_OF_CODE +#ifdef BACKWARD_I_DO_NOT_RECOMMEND_TO_ENABLE_THIS_HORRIBLE_PIECE_OF_CODE + if (!cudie) { + // If it's still not enough, lets dive deeper in the shit, and try + // to save the world again: for every compilation unit, we will + // load the corresponding .debug_line section, and see if we can + // find our address in it. + + Dwarf_Addr cfi_bias; + Dwarf_CFI* cfi_cache = dwfl_module_eh_cfi(mod, &cfi_bias); + + Dwarf_Addr bias; + while ((cudie = dwfl_module_nextcu(mod, cudie, &bias))) { + if (dwarf_getsrc_die(cudie, trace_addr - bias)) { + + // ...but if we get a match, it might be a false positive + // because our (address - bias) might as well be valid in a + // different compilation unit. So we throw our last card on + // the table and lookup for the address into the .eh_frame + // section. + + handle frame; + dwarf_cfi_addrframe(cfi_cache, trace_addr - cfi_bias, &frame); + if (frame) { + break; + } + } + } + } +#endif + + if (!cudie) { + return trace; // this time we lost the game :/ + } + + // Now that we have a compilation unit DIE, this function will be able + // to load the corresponding section in .debug_line (if not already + // loaded) and hopefully find the source location mapped to our + // address. + Dwarf_Line* srcloc = dwarf_getsrc_die(cudie, trace_addr - mod_bias); + + if (srcloc) { + const char* srcfile = dwarf_linesrc(srcloc, 0, 0); + if (srcfile) { + trace.source.filename = srcfile; + } + int line = 0, col = 0; + dwarf_lineno(srcloc, &line); + dwarf_linecol(srcloc, &col); + trace.source.line = line; + trace.source.col = col; + } + + deep_first_search_by_pc(cudie, trace_addr - mod_bias, + inliners_search_cb(trace)); + if (trace.source.function.size() == 0) { + // fallback. + trace.source.function = trace.object_function; + } + + return trace; + } + +private: + typedef details::handle > + dwfl_handle_t; + details::handle > + _dwfl_cb; + dwfl_handle_t _dwfl_handle; + bool _dwfl_handle_initialized; + + // defined here because in C++98, template function cannot take locally + // defined types... grrr. + struct inliners_search_cb { + void operator()(Dwarf_Die* die) { + switch (dwarf_tag(die)) { + const char* name; + case DW_TAG_subprogram: + if ((name = dwarf_diename(die))) { + trace.source.function = name; + } + break; + + case DW_TAG_inlined_subroutine: + ResolvedTrace::SourceLoc sloc; + Dwarf_Attribute attr_mem; + + if ((name = dwarf_diename(die))) { + sloc.function = name; + } + if ((name = die_call_file(die))) { + sloc.filename = name; + } + + Dwarf_Word line = 0, col = 0; + dwarf_formudata(dwarf_attr(die, DW_AT_call_line, + &attr_mem), &line); + dwarf_formudata(dwarf_attr(die, DW_AT_call_column, + &attr_mem), &col); + sloc.line = (unsigned)line; + sloc.col = (unsigned)col; + + trace.inliners.push_back(sloc); + break; + }; + } + ResolvedTrace& trace; + inliners_search_cb(ResolvedTrace& t): trace(t) {} + }; + + + static bool die_has_pc(Dwarf_Die* die, Dwarf_Addr pc) { + Dwarf_Addr low, high; + + // continuous range + if (dwarf_hasattr(die, DW_AT_low_pc) && + dwarf_hasattr(die, DW_AT_high_pc)) { + if (dwarf_lowpc(die, &low) != 0) { + return false; + } + if (dwarf_highpc(die, &high) != 0) { + Dwarf_Attribute attr_mem; + Dwarf_Attribute* attr = dwarf_attr(die, DW_AT_high_pc, &attr_mem); + Dwarf_Word value; + if (dwarf_formudata(attr, &value) != 0) { + return false; + } + high = low + value; + } + return pc >= low && pc < high; + } + + // non-continuous range. + Dwarf_Addr base; + ptrdiff_t offset = 0; + while ((offset = dwarf_ranges(die, offset, &base, &low, &high)) > 0) { + if (pc >= low && pc < high) { + return true; + } + } + return false; + } + + static Dwarf_Die* find_fundie_by_pc(Dwarf_Die* parent_die, Dwarf_Addr pc, + Dwarf_Die* result) { + if (dwarf_child(parent_die, result) != 0) { + return 0; + } + + Dwarf_Die* die = result; + do { + switch (dwarf_tag(die)) { + case DW_TAG_subprogram: + case DW_TAG_inlined_subroutine: + if (die_has_pc(die, pc)) { + return result; + } + }; + bool declaration = false; + Dwarf_Attribute attr_mem; + dwarf_formflag(dwarf_attr(die, DW_AT_declaration, + &attr_mem), &declaration); + if (!declaration) { + // let's be curious and look deeper in the tree, + // function are not necessarily at the first level, but + // might be nested inside a namespace, structure etc. + Dwarf_Die die_mem; + Dwarf_Die* indie = find_fundie_by_pc(die, pc, &die_mem); + if (indie) { + *result = die_mem; + return result; + } + } + } while (dwarf_siblingof(die, result) == 0); + return 0; + } + + template + static bool deep_first_search_by_pc(Dwarf_Die* parent_die, + Dwarf_Addr pc, CB cb) { + Dwarf_Die die_mem; + if (dwarf_child(parent_die, &die_mem) != 0) { + return false; + } + + bool branch_has_pc = false; + Dwarf_Die* die = &die_mem; + do { + bool declaration = false; + Dwarf_Attribute attr_mem; + dwarf_formflag(dwarf_attr(die, DW_AT_declaration, &attr_mem), &declaration); + if (!declaration) { + // let's be curious and look deeper in the tree, function are + // not necessarily at the first level, but might be nested + // inside a namespace, structure, a function, an inlined + // function etc. + branch_has_pc = deep_first_search_by_pc(die, pc, cb); + } + if (!branch_has_pc) { + branch_has_pc = die_has_pc(die, pc); + } + if (branch_has_pc) { + cb(die); + } + } while (dwarf_siblingof(die, &die_mem) == 0); + return branch_has_pc; + } + + static const char* die_call_file(Dwarf_Die *die) { + Dwarf_Attribute attr_mem; + Dwarf_Sword file_idx = 0; + + dwarf_formsdata(dwarf_attr(die, DW_AT_call_file, &attr_mem), + &file_idx); + + if (file_idx == 0) { + return 0; + } + + Dwarf_Die die_mem; + Dwarf_Die* cudie = dwarf_diecu(die, &die_mem, 0, 0); + if (!cudie) { + return 0; + } + + Dwarf_Files* files = 0; + size_t nfiles; + dwarf_getsrcfiles(cudie, &files, &nfiles); + if (!files) { + return 0; + } + + return dwarf_filesrc(files, file_idx, 0, 0); + } + +}; +#endif // BACKWARD_HAS_DW == 1 + +#if BACKWARD_HAS_DWARF == 1 + +template <> +class TraceResolverLinuxImpl: + public TraceResolverImplBase { + static std::string read_symlink(std::string const & symlink_path) { + std::string path; + path.resize(100); + + while(true) { + ssize_t len = ::readlink(symlink_path.c_str(), + &*path.begin(), path.size()); + if(len < 0) { + return ""; + } + if ((size_t)len == path.size()) { + path.resize(path.size() * 2); + } + else { + path.resize(len); + break; + } + } + + return path; + } +public: + TraceResolverLinuxImpl(): _dwarf_loaded(false) {} + + template + void load_stacktrace(ST&) {} + + ResolvedTrace resolve(ResolvedTrace trace) { + // trace.addr is a virtual address in memory pointing to some code. + // Let's try to find from which loaded object it comes from. + // The loaded object can be yourself btw. + + Dl_info symbol_info; + int dladdr_result = 0; +#ifndef __ANDROID__ + link_map *link_map; + // We request the link map so we can get information about offsets + dladdr_result = dladdr1(trace.addr, &symbol_info, + reinterpret_cast(&link_map), RTLD_DL_LINKMAP); +#else + // Android doesn't have dladdr1. Don't use the linker map. + dladdr_result = dladdr(trace.addr, &symbol_info); +#endif + if (!dladdr_result) { + return trace; // dat broken trace... + } + + std::string argv0; + { + std::ifstream ifs("/proc/self/cmdline"); + std::getline(ifs, argv0, '\0'); + } + std::string tmp; + if(symbol_info.dli_fname == argv0) { + tmp = read_symlink("/proc/self/exe"); + symbol_info.dli_fname = tmp.c_str(); + } + + // Now we get in symbol_info: + // .dli_fname: + // pathname of the shared object that contains the address. + // .dli_fbase: + // where the object is loaded in memory. + // .dli_sname: + // the name of the nearest symbol to trace.addr, we expect a + // function name. + // .dli_saddr: + // the exact address corresponding to .dli_sname. + // + // And in link_map: + // .l_addr: + // difference between the address in the ELF file and the address + // in memory + // l_name: + // absolute pathname where the object was found + + if (symbol_info.dli_sname) { + trace.object_function = demangle(symbol_info.dli_sname); + } + + if (!symbol_info.dli_fname) { + return trace; + } + + trace.object_filename = symbol_info.dli_fname; + dwarf_fileobject& fobj = load_object_with_dwarf(symbol_info.dli_fname); + if (!fobj.dwarf_handle) { + return trace; // sad, we couldn't load the object :( + } + +#ifndef __ANDROID__ + // Convert the address to a module relative one by looking at + // the module's loading address in the link map + Dwarf_Addr address = reinterpret_cast(trace.addr) - + reinterpret_cast(link_map->l_addr); +#else + Dwarf_Addr address = reinterpret_cast(trace.addr); +#endif + + if (trace.object_function.empty()) { + symbol_cache_t::iterator it = + fobj.symbol_cache.lower_bound(address); + + if (it != fobj.symbol_cache.end()) { + if (it->first != address) { + if (it != fobj.symbol_cache.begin()) { + --it; + } + } + trace.object_function = demangle(it->second.c_str()); + } + } + + // Get the Compilation Unit DIE for the address + Dwarf_Die die = find_die(fobj, address); + + if (!die) { + return trace; // this time we lost the game :/ + } + + // libdwarf doesn't give us direct access to its objects, it always + // allocates a copy for the caller. We keep that copy alive in a cache + // and we deallocate it later when it's no longer required. + die_cache_entry& die_object = get_die_cache(fobj, die); + if (die_object.isEmpty()) + return trace; // We have no line section for this DIE + + die_linemap_t::iterator it = + die_object.line_section.lower_bound(address); + + if (it != die_object.line_section.end()) { + if (it->first != address) { + if (it == die_object.line_section.begin()) { + // If we are on the first item of the line section + // but the address does not match it means that + // the address is below the range of the DIE. Give up. + return trace; + } else { + --it; + } + } + } else { + return trace; // We didn't find the address. + } + + // Get the Dwarf_Line that the address points to and call libdwarf + // to get source file, line and column info. + Dwarf_Line line = die_object.line_buffer[it->second]; + Dwarf_Error error = DW_DLE_NE; + + char* filename; + if (dwarf_linesrc(line, &filename, &error) + == DW_DLV_OK) { + trace.source.filename = std::string(filename); + dwarf_dealloc(fobj.dwarf_handle.get(), filename, DW_DLA_STRING); + } + + Dwarf_Unsigned number = 0; + if (dwarf_lineno(line, &number, &error) == DW_DLV_OK) { + trace.source.line = number; + } else { + trace.source.line = 0; + } + + if (dwarf_lineoff_b(line, &number, &error) == DW_DLV_OK) { + trace.source.col = number; + } else { + trace.source.col = 0; + } + + std::vector namespace_stack; + deep_first_search_by_pc(fobj, die, address, namespace_stack, + inliners_search_cb(trace, fobj, die)); + + dwarf_dealloc(fobj.dwarf_handle.get(), die, DW_DLA_DIE); + + return trace; + } + +public: + static int close_dwarf(Dwarf_Debug dwarf) { + return dwarf_finish(dwarf, NULL); + } + +private: + bool _dwarf_loaded; + + typedef details::handle + > dwarf_file_t; + + typedef details::handle + > dwarf_elf_t; + + typedef details::handle + > dwarf_handle_t; + + typedef std::map die_linemap_t; + + typedef std::map die_specmap_t; + + struct die_cache_entry { + die_specmap_t spec_section; + die_linemap_t line_section; + Dwarf_Line* line_buffer; + Dwarf_Signed line_count; + Dwarf_Line_Context line_context; + + inline bool isEmpty() { + return line_buffer == NULL || + line_count == 0 || + line_context == NULL || + line_section.empty(); + } + + die_cache_entry() : + line_buffer(0), line_count(0), line_context(0) {} + + ~die_cache_entry() + { + if (line_context) { + dwarf_srclines_dealloc_b(line_context); + } + } + }; + + typedef std::map die_cache_t; + + typedef std::map symbol_cache_t; + + struct dwarf_fileobject { + dwarf_file_t file_handle; + dwarf_elf_t elf_handle; + dwarf_handle_t dwarf_handle; + symbol_cache_t symbol_cache; + + // Die cache + die_cache_t die_cache; + die_cache_entry* current_cu; + }; + + typedef details::hashtable::type + fobj_dwarf_map_t; + fobj_dwarf_map_t _fobj_dwarf_map; + + static bool cstrings_eq(const char* a, const char* b) { + if (!a || !b) { + return false; + } + return strcmp(a, b) == 0; + } + + dwarf_fileobject& load_object_with_dwarf( + const std::string& filename_object) { + + if (!_dwarf_loaded) { + // Set the ELF library operating version + // If that fails there's nothing we can do + _dwarf_loaded = elf_version(EV_CURRENT) != EV_NONE; + } + + fobj_dwarf_map_t::iterator it = + _fobj_dwarf_map.find(filename_object); + if (it != _fobj_dwarf_map.end()) { + return it->second; + } + + // this new object is empty for now + dwarf_fileobject& r = _fobj_dwarf_map[filename_object]; + + dwarf_file_t file_handle; + file_handle.reset(open(filename_object.c_str(), O_RDONLY)); + if (file_handle < 0) { + return r; + } + + // Try to get an ELF handle. We need to read the ELF sections + // because we want to see if there is a .gnu_debuglink section + // that points to a split debug file + dwarf_elf_t elf_handle; + elf_handle.reset(elf_begin(file_handle.get(), ELF_C_READ, NULL)); + if (!elf_handle) { + return r; + } + + const char* e_ident = elf_getident(elf_handle.get(), 0); + if (!e_ident) { + return r; + } + + // Get the number of sections + // We use the new APIs as elf_getshnum is deprecated + size_t shdrnum = 0; + if (elf_getshdrnum(elf_handle.get(), &shdrnum) == -1) { + return r; + } + + // Get the index to the string section + size_t shdrstrndx = 0; + if (elf_getshdrstrndx (elf_handle.get(), &shdrstrndx) == -1) { + return r; + } + + std::string debuglink; + // Iterate through the ELF sections to try to get a gnu_debuglink + // note and also to cache the symbol table. + // We go the preprocessor way to avoid having to create templated + // classes or using gelf (which might throw a compiler error if 64 bit + // is not supported +#define ELF_GET_DATA(ARCH) \ + Elf_Scn *elf_section = 0; \ + Elf_Data *elf_data = 0; \ + Elf##ARCH##_Shdr* section_header = 0; \ + Elf_Scn *symbol_section = 0; \ + size_t symbol_count = 0; \ + size_t symbol_strings = 0; \ + Elf##ARCH##_Sym *symbol = 0; \ + const char* section_name = 0; \ + \ + while ((elf_section = elf_nextscn(elf_handle.get(), elf_section)) \ + != NULL) { \ + section_header = elf##ARCH##_getshdr(elf_section); \ + if (section_header == NULL) { \ + return r; \ + } \ + \ + if ((section_name = elf_strptr( \ + elf_handle.get(), shdrstrndx, \ + section_header->sh_name)) == NULL) { \ + return r; \ + } \ + \ + if (cstrings_eq(section_name, ".gnu_debuglink")) { \ + elf_data = elf_getdata(elf_section, NULL); \ + if (elf_data && elf_data->d_size > 0) { \ + debuglink = std::string( \ + reinterpret_cast(elf_data->d_buf)); \ + } \ + } \ + \ + switch(section_header->sh_type) { \ + case SHT_SYMTAB: \ + symbol_section = elf_section; \ + symbol_count = section_header->sh_size / \ + section_header->sh_entsize; \ + symbol_strings = section_header->sh_link; \ + break; \ + \ + /* We use .dynsyms as a last resort, we prefer .symtab */ \ + case SHT_DYNSYM: \ + if (!symbol_section) { \ + symbol_section = elf_section; \ + symbol_count = section_header->sh_size / \ + section_header->sh_entsize; \ + symbol_strings = section_header->sh_link; \ + } \ + break; \ + } \ + } \ + \ + if (symbol_section && symbol_count && symbol_strings) { \ + elf_data = elf_getdata(symbol_section, NULL); \ + symbol = reinterpret_cast(elf_data->d_buf); \ + for (size_t i = 0; i < symbol_count; ++i) { \ + int type = ELF##ARCH##_ST_TYPE(symbol->st_info); \ + if (type == STT_FUNC && symbol->st_value > 0) { \ + r.symbol_cache[symbol->st_value] = std::string( \ + elf_strptr(elf_handle.get(), \ + symbol_strings, symbol->st_name)); \ + } \ + ++symbol; \ + } \ + } \ + + + if (e_ident[EI_CLASS] == ELFCLASS32) { + ELF_GET_DATA(32) + } else if (e_ident[EI_CLASS] == ELFCLASS64) { + // libelf might have been built without 64 bit support +#if __LIBELF64 + ELF_GET_DATA(64) +#endif + } + + if (!debuglink.empty()) { + // We have a debuglink section! Open an elf instance on that + // file instead. If we can't open the file, then return + // the elf handle we had already opened. + dwarf_file_t debuglink_file; + debuglink_file.reset(open(debuglink.c_str(), O_RDONLY)); + if (debuglink_file.get() > 0) { + dwarf_elf_t debuglink_elf; + debuglink_elf.reset( + elf_begin(debuglink_file.get(),ELF_C_READ, NULL) + ); + + // If we have a valid elf handle, return the new elf handle + // and file handle and discard the original ones + if (debuglink_elf) { + elf_handle = move(debuglink_elf); + file_handle = move(debuglink_file); + } + } + } + + // Ok, we have a valid ELF handle, let's try to get debug symbols + Dwarf_Debug dwarf_debug; + Dwarf_Error error = DW_DLE_NE; + dwarf_handle_t dwarf_handle; + + int dwarf_result = dwarf_elf_init(elf_handle.get(), + DW_DLC_READ, NULL, NULL, &dwarf_debug, &error); + + // We don't do any special handling for DW_DLV_NO_ENTRY specially. + // If we get an error, or the file doesn't have debug information + // we just return. + if (dwarf_result != DW_DLV_OK) { + return r; + } + + dwarf_handle.reset(dwarf_debug); + + r.file_handle = move(file_handle); + r.elf_handle = move(elf_handle); + r.dwarf_handle = move(dwarf_handle); + + return r; + } + + die_cache_entry& get_die_cache(dwarf_fileobject& fobj, Dwarf_Die die) + { + Dwarf_Error error = DW_DLE_NE; + + // Get the die offset, we use it as the cache key + Dwarf_Off die_offset; + if (dwarf_dieoffset(die, &die_offset, &error) != DW_DLV_OK) { + die_offset = 0; + } + + die_cache_t::iterator it = fobj.die_cache.find(die_offset); + + if (it != fobj.die_cache.end()) { + fobj.current_cu = &it->second; + return it->second; + } + + die_cache_entry& de = fobj.die_cache[die_offset]; + fobj.current_cu = &de; + + Dwarf_Addr line_addr; + Dwarf_Small table_count; + + // The addresses in the line section are not fully sorted (they might + // be sorted by block of code belonging to the same file), which makes + // it necessary to do so before searching is possible. + // + // As libdwarf allocates a copy of everything, let's get the contents + // of the line section and keep it around. We also create a map of + // program counter to line table indices so we can search by address + // and get the line buffer index. + // + // To make things more difficult, the same address can span more than + // one line, so we need to keep the index pointing to the first line + // by using insert instead of the map's [ operator. + + // Get the line context for the DIE + if (dwarf_srclines_b(die, 0, &table_count, &de.line_context, &error) + == DW_DLV_OK) { + // Get the source lines for this line context, to be deallocated + // later + if (dwarf_srclines_from_linecontext( + de.line_context, &de.line_buffer, &de.line_count, &error) + == DW_DLV_OK) { + + // Add all the addresses to our map + for (int i = 0; i < de.line_count; i++) { + if (dwarf_lineaddr(de.line_buffer[i], &line_addr, &error) + != DW_DLV_OK) { + line_addr = 0; + } + de.line_section.insert( + std::pair(line_addr, i)); + } + } + } + + // For each CU, cache the function DIEs that contain the + // DW_AT_specification attribute. When building with -g3 the function + // DIEs are separated in declaration and specification, with the + // declaration containing only the name and parameters and the + // specification the low/high pc and other compiler attributes. + // + // We cache those specifications so we don't skip over the declarations, + // because they have no pc, and we can do namespace resolution for + // DWARF function names. + Dwarf_Debug dwarf = fobj.dwarf_handle.get(); + Dwarf_Die current_die = 0; + if (dwarf_child(die, ¤t_die, &error) == DW_DLV_OK) { + for(;;) { + Dwarf_Die sibling_die = 0; + + Dwarf_Half tag_value; + dwarf_tag(current_die, &tag_value, &error); + + if (tag_value == DW_TAG_subprogram || + tag_value == DW_TAG_inlined_subroutine) { + + Dwarf_Bool has_attr = 0; + if (dwarf_hasattr(current_die, DW_AT_specification, + &has_attr, &error) == DW_DLV_OK) { + if (has_attr) { + Dwarf_Attribute attr_mem; + if (dwarf_attr(current_die, DW_AT_specification, + &attr_mem, &error) == DW_DLV_OK) { + Dwarf_Off spec_offset = 0; + if (dwarf_formref(attr_mem, + &spec_offset, &error) == DW_DLV_OK) { + Dwarf_Off spec_die_offset; + if (dwarf_dieoffset(current_die, + &spec_die_offset, &error) + == DW_DLV_OK) { + de.spec_section[spec_offset] = + spec_die_offset; + } + } + } + dwarf_dealloc(dwarf, attr_mem, DW_DLA_ATTR); + } + } + } + + int result = dwarf_siblingof( + dwarf, current_die, &sibling_die, &error); + if (result == DW_DLV_ERROR) { + break; + } else if (result == DW_DLV_NO_ENTRY) { + break; + } + + if (current_die != die) { + dwarf_dealloc(dwarf, current_die, DW_DLA_DIE); + current_die = 0; + } + + current_die = sibling_die; + } + } + return de; + } + + static Dwarf_Die get_referenced_die( + Dwarf_Debug dwarf, Dwarf_Die die, Dwarf_Half attr, bool global) { + Dwarf_Error error = DW_DLE_NE; + Dwarf_Attribute attr_mem; + + Dwarf_Die found_die = NULL; + if (dwarf_attr(die, attr, &attr_mem, &error) == DW_DLV_OK) { + Dwarf_Off offset; + int result = 0; + if (global) { + result = dwarf_global_formref(attr_mem, &offset, &error); + } else { + result = dwarf_formref(attr_mem, &offset, &error); + } + + if (result == DW_DLV_OK) { + if (dwarf_offdie(dwarf, offset, &found_die, &error) + != DW_DLV_OK) { + found_die = NULL; + } + } + dwarf_dealloc(dwarf, attr_mem, DW_DLA_ATTR); + } + return found_die; + } + + static std::string get_referenced_die_name( + Dwarf_Debug dwarf, Dwarf_Die die, Dwarf_Half attr, bool global) { + Dwarf_Error error = DW_DLE_NE; + std::string value; + + Dwarf_Die found_die = get_referenced_die(dwarf, die, attr, global); + + if (found_die) { + char *name; + if (dwarf_diename(found_die, &name, &error) == DW_DLV_OK) { + if (name) { + value = std::string(name); + } + dwarf_dealloc(dwarf, name, DW_DLA_STRING); + } + dwarf_dealloc(dwarf, found_die, DW_DLA_DIE); + } + + return value; + } + + // Returns a spec DIE linked to the passed one. The caller should + // deallocate the DIE + static Dwarf_Die get_spec_die(dwarf_fileobject& fobj, Dwarf_Die die) { + Dwarf_Debug dwarf = fobj.dwarf_handle.get(); + Dwarf_Error error = DW_DLE_NE; + Dwarf_Off die_offset; + if (fobj.current_cu && dwarf_die_CU_offset(die, &die_offset, &error) + == DW_DLV_OK) { + die_specmap_t::iterator it = + fobj.current_cu->spec_section.find(die_offset); + + // If we have a DIE that completes the current one, check if + // that one has the pc we are looking for + if (it != fobj.current_cu->spec_section.end()) { + Dwarf_Die spec_die = 0; + if (dwarf_offdie(dwarf, it->second, &spec_die, &error) + == DW_DLV_OK) { + return spec_die; + } + } + } + + // Maybe we have an abstract origin DIE with the function information? + return get_referenced_die( + fobj.dwarf_handle.get(), die, DW_AT_abstract_origin, true); + + } + + static bool die_has_pc(dwarf_fileobject& fobj, Dwarf_Die die, Dwarf_Addr pc) + { + Dwarf_Addr low_pc = 0, high_pc = 0; + Dwarf_Half high_pc_form = 0; + Dwarf_Form_Class return_class; + Dwarf_Error error = DW_DLE_NE; + Dwarf_Debug dwarf = fobj.dwarf_handle.get(); + bool has_lowpc = false; + bool has_highpc = false; + bool has_ranges = false; + + if (dwarf_lowpc(die, &low_pc, &error) == DW_DLV_OK) { + // If we have a low_pc check if there is a high pc. + // If we don't have a high pc this might mean we have a base + // address for the ranges list or just an address. + has_lowpc = true; + + if (dwarf_highpc_b( + die, &high_pc, &high_pc_form, &return_class, &error) + == DW_DLV_OK) { + // We do have a high pc. In DWARF 4+ this is an offset from the + // low pc, but in earlier versions it's an absolute address. + + has_highpc = true; + // In DWARF 2/3 this would be a DW_FORM_CLASS_ADDRESS + if (return_class == DW_FORM_CLASS_CONSTANT) { + high_pc = low_pc + high_pc; + } + + // We have low and high pc, check if our address + // is in that range + return pc >= low_pc && pc < high_pc; + } + } else { + // Reset the low_pc, in case dwarf_lowpc failing set it to some + // undefined value. + low_pc = 0; + } + + // Check if DW_AT_ranges is present and search for the PC in the + // returned ranges list. We always add the low_pc, as it not set it will + // be 0, in case we had a DW_AT_low_pc and DW_AT_ranges pair + bool result = false; + + Dwarf_Attribute attr; + if (dwarf_attr(die, DW_AT_ranges, &attr, &error) == DW_DLV_OK) { + + Dwarf_Off offset; + if (dwarf_global_formref(attr, &offset, &error) == DW_DLV_OK) { + Dwarf_Ranges *ranges; + Dwarf_Signed ranges_count = 0; + Dwarf_Unsigned byte_count = 0; + + if (dwarf_get_ranges_a(dwarf, offset, die, &ranges, + &ranges_count, &byte_count, &error) == DW_DLV_OK) { + has_ranges = ranges_count != 0; + for (int i = 0; i < ranges_count; i++) { + if (ranges[i].dwr_addr1 != 0 && + pc >= ranges[i].dwr_addr1 + low_pc && + pc < ranges[i].dwr_addr2 + low_pc) { + result = true; + break; + } + } + dwarf_ranges_dealloc(dwarf, ranges, ranges_count); + } + } + } + + // Last attempt. We might have a single address set as low_pc. + if (!result && low_pc != 0 && pc == low_pc) { + result = true; + } + + // If we don't have lowpc, highpc and ranges maybe this DIE is a + // declaration that relies on a DW_AT_specification DIE that happens + // later. Use the specification cache we filled when we loaded this CU. + if (!result && (!has_lowpc && !has_highpc && !has_ranges)) { + Dwarf_Die spec_die = get_spec_die(fobj, die); + if (spec_die) { + result = die_has_pc(fobj, spec_die, pc); + dwarf_dealloc(dwarf, spec_die, DW_DLA_DIE); + } + } + + return result; + } + + static void get_type(Dwarf_Debug dwarf, Dwarf_Die die, std::string& type) { + Dwarf_Error error = DW_DLE_NE; + + Dwarf_Die child = 0; + if (dwarf_child(die, &child, &error) == DW_DLV_OK) { + get_type(dwarf, child, type); + } + + if (child) { + type.insert(0, "::"); + dwarf_dealloc(dwarf, child, DW_DLA_DIE); + } + + char *name; + if (dwarf_diename(die, &name, &error) == DW_DLV_OK) { + type.insert(0, std::string(name)); + dwarf_dealloc(dwarf, name, DW_DLA_STRING); + } else { + type.insert(0,""); + } + } + + static std::string get_type_by_signature(Dwarf_Debug dwarf, Dwarf_Die die) { + Dwarf_Error error = DW_DLE_NE; + + Dwarf_Sig8 signature; + Dwarf_Bool has_attr = 0; + if (dwarf_hasattr(die, DW_AT_signature, + &has_attr, &error) == DW_DLV_OK) { + if (has_attr) { + Dwarf_Attribute attr_mem; + if (dwarf_attr(die, DW_AT_signature, + &attr_mem, &error) == DW_DLV_OK) { + if (dwarf_formsig8(attr_mem, &signature, &error) + != DW_DLV_OK) { + return std::string(""); + } + } + dwarf_dealloc(dwarf, attr_mem, DW_DLA_ATTR); + } + } + + Dwarf_Unsigned next_cu_header; + Dwarf_Sig8 tu_signature; + std::string result; + bool found = false; + + while (dwarf_next_cu_header_d(dwarf, 0, 0, 0, 0, 0, 0, 0, &tu_signature, + 0, &next_cu_header, 0, &error) == DW_DLV_OK) { + + if (strncmp(signature.signature, tu_signature.signature, 8) == 0) { + Dwarf_Die type_cu_die = 0; + if (dwarf_siblingof_b(dwarf, 0, 0, &type_cu_die, &error) + == DW_DLV_OK) { + Dwarf_Die child_die = 0; + if (dwarf_child(type_cu_die, &child_die, &error) + == DW_DLV_OK) { + get_type(dwarf, child_die, result); + found = !result.empty(); + dwarf_dealloc(dwarf, child_die, DW_DLA_DIE); + } + dwarf_dealloc(dwarf, type_cu_die, DW_DLA_DIE); + } + } + } + + if (found) { + while (dwarf_next_cu_header_d(dwarf, 0, 0, 0, 0, 0, 0, 0, 0, 0, + &next_cu_header, 0, &error) == DW_DLV_OK) { + // Reset the cu header state. Unfortunately, libdwarf's + // next_cu_header API keeps its own iterator per Dwarf_Debug + // that can't be reset. We need to keep fetching elements until + // the end. + } + } else { + // If we couldn't resolve the type just print out the signature + std::ostringstream string_stream; + string_stream << "<0x" << + std::hex << std::setfill('0'); + for (int i = 0; i < 8; ++i) { + string_stream << std::setw(2) << std::hex + << (int)(unsigned char)(signature.signature[i]); + } + string_stream << ">"; + result = string_stream.str(); + } + return result; + } + + struct type_context_t { + bool is_const; + bool is_typedef; + bool has_type; + bool has_name; + std::string text; + + type_context_t() : + is_const(false), is_typedef(false), + has_type(false), has_name(false) {} + }; + + // Types are resolved from right to left: we get the variable name first + // and then all specifiers (like const or pointer) in a chain of DW_AT_type + // DIEs. Call this function recursively until we get a complete type + // string. + static void set_parameter_string( + dwarf_fileobject& fobj, Dwarf_Die die, type_context_t &context) { + char *name; + Dwarf_Error error = DW_DLE_NE; + + // typedefs contain also the base type, so we skip it and only + // print the typedef name + if (!context.is_typedef) { + if (dwarf_diename(die, &name, &error) == DW_DLV_OK) { + if (!context.text.empty()) { + context.text.insert(0, " "); + } + context.text.insert(0, std::string(name)); + dwarf_dealloc(fobj.dwarf_handle.get(), name, DW_DLA_STRING); + } + } else { + context.is_typedef = false; + context.has_type = true; + if (context.is_const) { + context.text.insert(0, "const "); + context.is_const = false; + } + } + + bool next_type_is_const = false; + bool is_keyword = true; + + Dwarf_Half tag = 0; + Dwarf_Bool has_attr = 0; + if (dwarf_tag(die, &tag, &error) == DW_DLV_OK) { + switch(tag) { + case DW_TAG_structure_type: + case DW_TAG_union_type: + case DW_TAG_class_type: + case DW_TAG_enumeration_type: + context.has_type = true; + if (dwarf_hasattr(die, DW_AT_signature, + &has_attr, &error) == DW_DLV_OK) { + // If we have a signature it means the type is defined + // in .debug_types, so we need to load the DIE pointed + // at by the signature and resolve it + if (has_attr) { + std::string type = + get_type_by_signature(fobj.dwarf_handle.get(), die); + if (context.is_const) + type.insert(0, "const "); + + if (!context.text.empty()) + context.text.insert(0, " "); + context.text.insert(0, type); + } + + // Treat enums like typedefs, and skip printing its + // base type + context.is_typedef = (tag == DW_TAG_enumeration_type); + } + break; + case DW_TAG_const_type: + next_type_is_const = true; + break; + case DW_TAG_pointer_type: + context.text.insert(0, "*"); + break; + case DW_TAG_reference_type: + context.text.insert(0, "&"); + break; + case DW_TAG_restrict_type: + context.text.insert(0, "restrict "); + break; + case DW_TAG_rvalue_reference_type: + context.text.insert(0, "&&"); + break; + case DW_TAG_volatile_type: + context.text.insert(0, "volatile "); + break; + case DW_TAG_typedef: + // Propagate the const-ness to the next type + // as typedefs are linked to its base type + next_type_is_const = context.is_const; + context.is_typedef = true; + context.has_type = true; + break; + case DW_TAG_base_type: + context.has_type = true; + break; + case DW_TAG_formal_parameter: + context.has_name = true; + break; + default: + is_keyword = false; + break; + } + } + + if (!is_keyword && context.is_const) { + context.text.insert(0, "const "); + } + + context.is_const = next_type_is_const; + + Dwarf_Die ref = get_referenced_die( + fobj.dwarf_handle.get(), die, DW_AT_type, true); + if (ref) { + set_parameter_string(fobj, ref, context); + dwarf_dealloc(fobj.dwarf_handle.get(), ref, DW_DLA_DIE); + } + + if (!context.has_type && context.has_name) { + context.text.insert(0, "void "); + context.has_type = true; + } + } + + // Resolve the function return type and parameters + static void set_function_parameters(std::string& function_name, + std::vector& ns, + dwarf_fileobject& fobj, Dwarf_Die die) { + Dwarf_Debug dwarf = fobj.dwarf_handle.get(); + Dwarf_Error error = DW_DLE_NE; + Dwarf_Die current_die = 0; + std::string parameters; + bool has_spec = true; + // Check if we have a spec DIE. If we do we use it as it contains + // more information, like parameter names. + Dwarf_Die spec_die = get_spec_die(fobj, die); + if (!spec_die) { + has_spec = false; + spec_die = die; + } + + std::vector::const_iterator it = ns.begin(); + std::string ns_name; + for (it = ns.begin(); it < ns.end(); ++it) { + ns_name.append(*it).append("::"); + } + + if (!ns_name.empty()) { + function_name.insert(0, ns_name); + } + + // See if we have a function return type. It can be either on the + // current die or in its spec one (usually true for inlined functions) + std::string return_type = + get_referenced_die_name(dwarf, die, DW_AT_type, true); + if (return_type.empty()) { + return_type = + get_referenced_die_name(dwarf, spec_die, DW_AT_type, true); + } + if (!return_type.empty()) { + return_type.append(" "); + function_name.insert(0, return_type); + } + + if (dwarf_child(spec_die, ¤t_die, &error) == DW_DLV_OK) { + for(;;) { + Dwarf_Die sibling_die = 0; + + Dwarf_Half tag_value; + dwarf_tag(current_die, &tag_value, &error); + + if (tag_value == DW_TAG_formal_parameter) { + // Ignore artificial (ie, compiler generated) parameters + bool is_artificial = false; + Dwarf_Attribute attr_mem; + if (dwarf_attr( + current_die, DW_AT_artificial, &attr_mem, &error) + == DW_DLV_OK) { + Dwarf_Bool flag = 0; + if (dwarf_formflag(attr_mem, &flag, &error) + == DW_DLV_OK) { + is_artificial = flag != 0; + } + dwarf_dealloc(dwarf, attr_mem, DW_DLA_ATTR); + } + + if (!is_artificial) { + type_context_t context; + set_parameter_string(fobj, current_die, context); + + if (parameters.empty()) { + parameters.append("("); + } else { + parameters.append(", "); + } + parameters.append(context.text); + } + } + + int result = dwarf_siblingof( + dwarf, current_die, &sibling_die, &error); + if (result == DW_DLV_ERROR) { + break; + } else if (result == DW_DLV_NO_ENTRY) { + break; + } + + if (current_die != die) { + dwarf_dealloc(dwarf, current_die, DW_DLA_DIE); + current_die = 0; + } + + current_die = sibling_die; + } + } + if (parameters.empty()) + parameters = "("; + parameters.append(")"); + + // If we got a spec DIE we need to deallocate it + if (has_spec) + dwarf_dealloc(dwarf, spec_die, DW_DLA_DIE); + + function_name.append(parameters); + } + + // defined here because in C++98, template function cannot take locally + // defined types... grrr. + struct inliners_search_cb { + void operator()(Dwarf_Die die, std::vector& ns) { + Dwarf_Error error = DW_DLE_NE; + Dwarf_Half tag_value; + Dwarf_Attribute attr_mem; + Dwarf_Debug dwarf = fobj.dwarf_handle.get(); + + dwarf_tag(die, &tag_value, &error); + + switch (tag_value) { + char* name; + case DW_TAG_subprogram: + if (!trace.source.function.empty()) + break; + if (dwarf_diename(die, &name, &error) == DW_DLV_OK) { + trace.source.function = std::string(name); + dwarf_dealloc(dwarf, name, DW_DLA_STRING); + } else { + // We don't have a function name in this DIE. + // Check if there is a referenced non-defining + // declaration. + trace.source.function = get_referenced_die_name( + dwarf, die, DW_AT_abstract_origin, true); + if (trace.source.function.empty()) { + trace.source.function = get_referenced_die_name( + dwarf, die, DW_AT_specification, true); + } + } + + // Append the function parameters, if available + set_function_parameters( + trace.source.function, ns, fobj, die); + + // If the object function name is empty, it's possible that + // there is no dynamic symbol table (maybe the executable + // was stripped or not built with -rdynamic). See if we have + // a DWARF linkage name to use instead. We try both + // linkage_name and MIPS_linkage_name because the MIPS tag + // was the unofficial one until it was adopted in DWARF4. + // Old gcc versions generate MIPS_linkage_name + if (trace.object_function.empty()) { + details::demangler demangler; + + if (dwarf_attr(die, DW_AT_linkage_name, + &attr_mem, &error) != DW_DLV_OK) { + if (dwarf_attr(die, DW_AT_MIPS_linkage_name, + &attr_mem, &error) != DW_DLV_OK) { + break; + } + } + + char* linkage; + if (dwarf_formstring(attr_mem, &linkage, &error) + == DW_DLV_OK) { + trace.object_function = demangler.demangle(linkage); + dwarf_dealloc(dwarf, linkage, DW_DLA_STRING); + } + dwarf_dealloc(dwarf, name, DW_DLA_ATTR); + } + break; + + case DW_TAG_inlined_subroutine: + ResolvedTrace::SourceLoc sloc; + + if (dwarf_diename(die, &name, &error) == DW_DLV_OK) { + sloc.function = std::string(name); + dwarf_dealloc(dwarf, name, DW_DLA_STRING); + } else { + // We don't have a name for this inlined DIE, it could + // be that there is an abstract origin instead. + // Get the DW_AT_abstract_origin value, which is a + // reference to the source DIE and try to get its name + sloc.function = get_referenced_die_name( + dwarf, die, DW_AT_abstract_origin, true); + } + + set_function_parameters(sloc.function, ns, fobj, die); + + std::string file = die_call_file(dwarf, die, cu_die); + if (!file.empty()) + sloc.filename = file; + + Dwarf_Unsigned number = 0; + if (dwarf_attr(die, DW_AT_call_line, &attr_mem, &error) + == DW_DLV_OK) { + if (dwarf_formudata(attr_mem, &number, &error) + == DW_DLV_OK) { + sloc.line = number; + } + dwarf_dealloc(dwarf, attr_mem, DW_DLA_ATTR); + } + + if (dwarf_attr(die, DW_AT_call_column, &attr_mem, &error) + == DW_DLV_OK) { + if (dwarf_formudata(attr_mem, &number, &error) + == DW_DLV_OK) { + sloc.col = number; + } + dwarf_dealloc(dwarf, attr_mem, DW_DLA_ATTR); + } + + trace.inliners.push_back(sloc); + break; + }; + } + ResolvedTrace& trace; + dwarf_fileobject& fobj; + Dwarf_Die cu_die; + inliners_search_cb(ResolvedTrace& t, dwarf_fileobject& f, Dwarf_Die c) + : trace(t), fobj(f), cu_die(c) {} + }; + + static Dwarf_Die find_fundie_by_pc(dwarf_fileobject& fobj, + Dwarf_Die parent_die, Dwarf_Addr pc, Dwarf_Die result) { + Dwarf_Die current_die = 0; + Dwarf_Error error = DW_DLE_NE; + Dwarf_Debug dwarf = fobj.dwarf_handle.get(); + + if (dwarf_child(parent_die, ¤t_die, &error) != DW_DLV_OK) { + return NULL; + } + + for(;;) { + Dwarf_Die sibling_die = 0; + Dwarf_Half tag_value; + dwarf_tag(current_die, &tag_value, &error); + + switch (tag_value) { + case DW_TAG_subprogram: + case DW_TAG_inlined_subroutine: + if (die_has_pc(fobj, current_die, pc)) { + return current_die; + } + }; + bool declaration = false; + Dwarf_Attribute attr_mem; + if (dwarf_attr(current_die, DW_AT_declaration, &attr_mem, &error) + == DW_DLV_OK) { + Dwarf_Bool flag = 0; + if (dwarf_formflag(attr_mem, &flag, &error) == DW_DLV_OK) { + declaration = flag != 0; + } + dwarf_dealloc(dwarf, attr_mem, DW_DLA_ATTR); + } + + if (!declaration) { + // let's be curious and look deeper in the tree, functions are + // not necessarily at the first level, but might be nested + // inside a namespace, structure, a function, an inlined + // function etc. + Dwarf_Die die_mem = 0; + Dwarf_Die indie = find_fundie_by_pc( + fobj, current_die, pc, die_mem); + if (indie) { + result = die_mem; + return result; + } + } + + int res = dwarf_siblingof( + dwarf, current_die, &sibling_die, &error); + if (res == DW_DLV_ERROR) { + return NULL; + } else if (res == DW_DLV_NO_ENTRY) { + break; + } + + if (current_die != parent_die) { + dwarf_dealloc(dwarf, current_die, DW_DLA_DIE); + current_die = 0; + } + + current_die = sibling_die; + } + return NULL; + } + + template + static bool deep_first_search_by_pc(dwarf_fileobject& fobj, + Dwarf_Die parent_die, Dwarf_Addr pc, + std::vector& ns, CB cb) { + Dwarf_Die current_die = 0; + Dwarf_Debug dwarf = fobj.dwarf_handle.get(); + Dwarf_Error error = DW_DLE_NE; + + if (dwarf_child(parent_die, ¤t_die, &error) != DW_DLV_OK) { + return false; + } + + bool branch_has_pc = false; + bool has_namespace = false; + for(;;) { + Dwarf_Die sibling_die = 0; + + Dwarf_Half tag; + if (dwarf_tag(current_die, &tag, &error) == DW_DLV_OK) { + if (tag == DW_TAG_namespace || tag == DW_TAG_class_type) { + char* ns_name = NULL; + if (dwarf_diename(current_die, &ns_name, &error) + == DW_DLV_OK) { + if (ns_name) { + ns.push_back(std::string(ns_name)); + } else { + ns.push_back(""); + } + dwarf_dealloc(dwarf, ns_name, DW_DLA_STRING); + } else { + ns.push_back(""); + } + has_namespace = true; + } + } + + bool declaration = false; + Dwarf_Attribute attr_mem; + if (tag != DW_TAG_class_type && + dwarf_attr(current_die, DW_AT_declaration, &attr_mem, &error) + == DW_DLV_OK) { + Dwarf_Bool flag = 0; + if (dwarf_formflag(attr_mem, &flag, &error) == DW_DLV_OK) { + declaration = flag != 0; + } + dwarf_dealloc(dwarf, attr_mem, DW_DLA_ATTR); + } + + if (!declaration) { + // let's be curious and look deeper in the tree, function are + // not necessarily at the first level, but might be nested + // inside a namespace, structure, a function, an inlined + // function etc. + branch_has_pc = deep_first_search_by_pc( + fobj, current_die, pc, ns, cb); + } + + if (!branch_has_pc) { + branch_has_pc = die_has_pc(fobj, current_die, pc); + } + + if (branch_has_pc) { + cb(current_die, ns); + } + + int result = dwarf_siblingof( + dwarf, current_die, &sibling_die, &error); + if (result == DW_DLV_ERROR) { + return false; + } else if (result == DW_DLV_NO_ENTRY) { + break; + } + + if (current_die != parent_die) { + dwarf_dealloc(dwarf, current_die, DW_DLA_DIE); + current_die = 0; + } + + if (has_namespace) { + has_namespace = false; + ns.pop_back(); + } + current_die = sibling_die; + } + + if (has_namespace) { + ns.pop_back(); + } + return branch_has_pc; + } + + static std::string die_call_file( + Dwarf_Debug dwarf, Dwarf_Die die, Dwarf_Die cu_die) { + Dwarf_Attribute attr_mem; + Dwarf_Error error = DW_DLE_NE; + Dwarf_Signed file_index; + + std::string file; + + if (dwarf_attr(die, DW_AT_call_file, &attr_mem, &error) == DW_DLV_OK) { + if (dwarf_formsdata(attr_mem, &file_index, &error) != DW_DLV_OK) { + file_index = 0; + } + dwarf_dealloc(dwarf, attr_mem, DW_DLA_ATTR); + + if (file_index == 0) { + return file; + } + + char **srcfiles = 0; + Dwarf_Signed file_count = 0; + if (dwarf_srcfiles(cu_die, &srcfiles, &file_count, &error) + == DW_DLV_OK) { + if (file_index <= file_count) + file = std::string(srcfiles[file_index - 1]); + + // Deallocate all strings! + for (int i = 0; i < file_count; ++i) { + dwarf_dealloc(dwarf, srcfiles[i], DW_DLA_STRING); + } + dwarf_dealloc(dwarf, srcfiles, DW_DLA_LIST); + } + } + return file; + } + + + Dwarf_Die find_die(dwarf_fileobject& fobj, Dwarf_Addr addr) + { + // Let's get to work! First see if we have a debug_aranges section so + // we can speed up the search + + Dwarf_Debug dwarf = fobj.dwarf_handle.get(); + Dwarf_Error error = DW_DLE_NE; + Dwarf_Arange *aranges; + Dwarf_Signed arange_count; + + Dwarf_Die returnDie; + bool found = false; + if (dwarf_get_aranges( + dwarf, &aranges, &arange_count, &error) != DW_DLV_OK) { + aranges = NULL; + } + + if (aranges) { + // We have aranges. Get the one where our address is. + Dwarf_Arange arange; + if (dwarf_get_arange( + aranges, arange_count, addr, &arange, &error) + == DW_DLV_OK) { + + // We found our address. Get the compilation-unit DIE offset + // represented by the given address range. + Dwarf_Off cu_die_offset; + if (dwarf_get_cu_die_offset(arange, &cu_die_offset, &error) + == DW_DLV_OK) { + // Get the DIE at the offset returned by the aranges search. + // We set is_info to 1 to specify that the offset is from + // the .debug_info section (and not .debug_types) + int dwarf_result = dwarf_offdie_b( + dwarf, cu_die_offset, 1, &returnDie, &error); + + found = dwarf_result == DW_DLV_OK; + } + dwarf_dealloc(dwarf, arange, DW_DLA_ARANGE); + } + } + + if (found) + return returnDie; // The caller is responsible for freeing the die + + // The search for aranges failed. Try to find our address by scanning + // all compilation units. + Dwarf_Unsigned next_cu_header; + Dwarf_Half tag = 0; + returnDie = 0; + + while (!found && dwarf_next_cu_header_d(dwarf, 1, 0, 0, 0, 0, 0, 0, 0, 0, + &next_cu_header, 0, &error) == DW_DLV_OK) { + + if (returnDie) + dwarf_dealloc(dwarf, returnDie, DW_DLA_DIE); + + if (dwarf_siblingof(dwarf, 0, &returnDie, &error) == DW_DLV_OK) { + if ((dwarf_tag(returnDie, &tag, &error) == DW_DLV_OK) + && tag == DW_TAG_compile_unit) { + if (die_has_pc(fobj, returnDie, addr)) { + found = true; + } + } + } + } + + if (found) { + while (dwarf_next_cu_header_d(dwarf, 1, 0, 0, 0, 0, 0, 0, 0, 0, + &next_cu_header, 0, &error) == DW_DLV_OK) { + // Reset the cu header state. Libdwarf's next_cu_header API + // keeps its own iterator per Dwarf_Debug that can't be reset. + // We need to keep fetching elements until the end. + } + } + + if (found) + return returnDie; + + // We couldn't find any compilation units with ranges or a high/low pc. + // Try again by looking at all DIEs in all compilation units. + Dwarf_Die cudie; + while (dwarf_next_cu_header_d(dwarf, 1, 0, 0, 0, 0, 0, 0, 0, 0, + &next_cu_header, 0, &error) == DW_DLV_OK) { + if (dwarf_siblingof(dwarf, 0, &cudie, &error) == DW_DLV_OK) { + Dwarf_Die die_mem = 0; + Dwarf_Die resultDie = find_fundie_by_pc( + fobj, cudie, addr, die_mem); + + if (resultDie) { + found = true; + break; + } + } + } + + if (found) { + while (dwarf_next_cu_header_d(dwarf, 1, 0, 0, 0, 0, 0, 0, 0, 0, + &next_cu_header, 0, &error) == DW_DLV_OK) { + // Reset the cu header state. Libdwarf's next_cu_header API + // keeps its own iterator per Dwarf_Debug that can't be reset. + // We need to keep fetching elements until the end. + } + } + + if (found) + return cudie; + + // We failed. + return NULL; + } +}; +#endif // BACKWARD_HAS_DWARF == 1 + +template<> +class TraceResolverImpl: + public TraceResolverLinuxImpl {}; + +#endif // BACKWARD_SYSTEM_LINUX + +#ifdef BACKWARD_SYSTEM_DARWIN + +template +class TraceResolverDarwinImpl; + +template <> +class TraceResolverDarwinImpl: + public TraceResolverImplBase { +public: + template + void load_stacktrace(ST& st) { + using namespace details; + if (st.size() == 0) { + return; + } + _symbols.reset( + backtrace_symbols(st.begin(), st.size()) + ); + } + + ResolvedTrace resolve(ResolvedTrace trace) { + // parse: + // + + char* filename = _symbols[trace.idx]; + + // skip " " + while(*filename && *filename != ' ') filename++; + while(*filename == ' ') filename++; + + // find start of from end ( may contain a space) + char* p = filename + strlen(filename) - 1; + // skip to start of " + " + while(p > filename && *p != ' ') p--; + while(p > filename && *p == ' ') p--; + while(p > filename && *p != ' ') p--; + while(p > filename && *p == ' ') p--; + char *funcname_end = p + 1; + + // skip to start of "" + while(p > filename && *p != ' ') p--; + char *funcname = p + 1; + + // skip to start of " " + while(p > filename && *p == ' ') p--; + while(p > filename && *p != ' ') p--; + while(p > filename && *p == ' ') p--; + + // skip "", handling the case where it contains a + char* filename_end = p + 1; + if (p == filename) { + // something went wrong, give up + filename_end = filename + strlen(filename); + funcname = filename_end; + } + trace.object_filename.assign(filename, filename_end); // ok even if filename_end is the ending \0 (then we assign entire string) + + if (*funcname) { // if it's not end of string + *funcname_end = '\0'; + + trace.object_function = this->demangle(funcname); + trace.object_function += " "; + trace.object_function += (funcname_end + 1); + trace.source.function = trace.object_function; // we cannot do better. + } + return trace; + } + +private: + details::handle _symbols; +}; + +template<> +class TraceResolverImpl: + public TraceResolverDarwinImpl {}; + +#endif // BACKWARD_SYSTEM_DARWIN + +class TraceResolver: + public TraceResolverImpl {}; + +/*************** CODE SNIPPET ***************/ + +class SourceFile { +public: + typedef std::vector > lines_t; + + SourceFile() {} + SourceFile(const std::string& path): _file(new std::ifstream(path.c_str())) {} + bool is_open() const { return _file->is_open(); } + + lines_t& get_lines(unsigned line_start, unsigned line_count, lines_t& lines) { + using namespace std; + // This function make uses of the dumbest algo ever: + // 1) seek(0) + // 2) read lines one by one and discard until line_start + // 3) read line one by one until line_start + line_count + // + // If you are getting snippets many time from the same file, it is + // somewhat a waste of CPU, feel free to benchmark and propose a + // better solution ;) + + _file->clear(); + _file->seekg(0); + string line; + unsigned line_idx; + + for (line_idx = 1; line_idx < line_start; ++line_idx) { + std::getline(*_file, line); + if (!*_file) { + return lines; + } + } + + // think of it like a lambda in C++98 ;) + // but look, I will reuse it two times! + // What a good boy am I. + struct isspace { + bool operator()(char c) { + return std::isspace(c); + } + }; + + bool started = false; + for (; line_idx < line_start + line_count; ++line_idx) { + getline(*_file, line); + if (!*_file) { + return lines; + } + if (!started) { + if (std::find_if(line.begin(), line.end(), + not_isspace()) == line.end()) + continue; + started = true; + } + lines.push_back(make_pair(line_idx, line)); + } + + lines.erase( + std::find_if(lines.rbegin(), lines.rend(), + not_isempty()).base(), lines.end() + ); + return lines; + } + + lines_t get_lines(unsigned line_start, unsigned line_count) { + lines_t lines; + return get_lines(line_start, line_count, lines); + } + + // there is no find_if_not in C++98, lets do something crappy to + // workaround. + struct not_isspace { + bool operator()(char c) { + return !std::isspace(c); + } + }; + // and define this one here because C++98 is not happy with local defined + // struct passed to template functions, fuuuu. + struct not_isempty { + bool operator()(const lines_t::value_type& p) { + return !(std::find_if(p.second.begin(), p.second.end(), + not_isspace()) == p.second.end()); + } + }; + + void swap(SourceFile& b) { + _file.swap(b._file); + } + +#ifdef BACKWARD_ATLEAST_CXX11 + SourceFile(SourceFile&& from): _file(nullptr) { + swap(from); + } + SourceFile& operator=(SourceFile&& from) { + swap(from); return *this; + } +#else + explicit SourceFile(const SourceFile& from) { + // some sort of poor man's move semantic. + swap(const_cast(from)); + } + SourceFile& operator=(const SourceFile& from) { + // some sort of poor man's move semantic. + swap(const_cast(from)); return *this; + } +#endif + +private: + details::handle + > _file; + +#ifdef BACKWARD_ATLEAST_CXX11 + SourceFile(const SourceFile&) = delete; + SourceFile& operator=(const SourceFile&) = delete; +#endif +}; + +class SnippetFactory { +public: + typedef SourceFile::lines_t lines_t; + + lines_t get_snippet(const std::string& filename, + unsigned line_start, unsigned context_size) { + + SourceFile& src_file = get_src_file(filename); + unsigned start = line_start - context_size / 2; + return src_file.get_lines(start, context_size); + } + + lines_t get_combined_snippet( + const std::string& filename_a, unsigned line_a, + const std::string& filename_b, unsigned line_b, + unsigned context_size) { + SourceFile& src_file_a = get_src_file(filename_a); + SourceFile& src_file_b = get_src_file(filename_b); + + lines_t lines = src_file_a.get_lines(line_a - context_size / 4, + context_size / 2); + src_file_b.get_lines(line_b - context_size / 4, context_size / 2, + lines); + return lines; + } + + lines_t get_coalesced_snippet(const std::string& filename, + unsigned line_a, unsigned line_b, unsigned context_size) { + SourceFile& src_file = get_src_file(filename); + + using std::min; using std::max; + unsigned a = min(line_a, line_b); + unsigned b = max(line_a, line_b); + + if ((b - a) < (context_size / 3)) { + return src_file.get_lines((a + b - context_size + 1) / 2, + context_size); + } + + lines_t lines = src_file.get_lines(a - context_size / 4, + context_size / 2); + src_file.get_lines(b - context_size / 4, context_size / 2, lines); + return lines; + } + + +private: + typedef details::hashtable::type src_files_t; + src_files_t _src_files; + + SourceFile& get_src_file(const std::string& filename) { + src_files_t::iterator it = _src_files.find(filename); + if (it != _src_files.end()) { + return it->second; + } + SourceFile& new_src_file = _src_files[filename]; + new_src_file = SourceFile(filename); + return new_src_file; + } +}; + +/*************** PRINTER ***************/ + +namespace ColorMode { + enum type { + automatic, + never, + always + }; +} + +class cfile_streambuf: public std::streambuf { +public: + cfile_streambuf(FILE *_sink): sink(_sink) {} + int_type underflow() override { return traits_type::eof(); } + int_type overflow(int_type ch) override { + if (traits_type::not_eof(ch) && fwrite(&ch, sizeof ch, 1, sink) == 1) { + return ch; + } + return traits_type::eof(); + } + + std::streamsize xsputn(const char_type* s, std::streamsize count) override { + return static_cast(fwrite(s, sizeof *s, static_cast(count), sink)); + } + +#ifdef BACKWARD_ATLEAST_CXX11 +public: + cfile_streambuf(const cfile_streambuf&) = delete; + cfile_streambuf& operator=(const cfile_streambuf&) = delete; +#else +private: + cfile_streambuf(const cfile_streambuf &); + cfile_streambuf &operator= (const cfile_streambuf &); +#endif + +private: + FILE *sink; + std::vector buffer; +}; + +#ifdef BACKWARD_SYSTEM_LINUX + +namespace Color { + enum type { + yellow = 33, + purple = 35, + reset = 39 + }; +} // namespace Color + +class Colorize { +public: + Colorize(std::ostream& os): + _os(os), _reset(false), _enabled(false) {} + + void activate(ColorMode::type mode) { + _enabled = mode == ColorMode::always; + } + + void activate(ColorMode::type mode, FILE* fp) { + activate(mode, fileno(fp)); + } + + void set_color(Color::type ccode) { + if (!_enabled) return; + + // I assume that the terminal can handle basic colors. Seriously I + // don't want to deal with all the termcap shit. + _os << "\033[" << static_cast(ccode) << "m"; + _reset = (ccode != Color::reset); + } + + ~Colorize() { + if (_reset) { + set_color(Color::reset); + } + } + +private: + void activate(ColorMode::type mode, int fd) { + activate(mode == ColorMode::automatic && isatty(fd) ? ColorMode::always : mode); + } + + std::ostream& _os; + bool _reset; + bool _enabled; +}; + +#else // ndef BACKWARD_SYSTEM_LINUX + +namespace Color { + enum type { + yellow = 0, + purple = 0, + reset = 0 + }; +} // namespace Color + +class Colorize { +public: + Colorize(std::ostream&) {} + void activate(ColorMode::type) {} + void activate(ColorMode::type, FILE*) {} + void set_color(Color::type) {} +}; + +#endif // BACKWARD_SYSTEM_LINUX + +class Printer { +public: + + bool snippet; + ColorMode::type color_mode; + bool address; + bool object; + int inliner_context_size; + int trace_context_size; + + Printer(): + snippet(true), + color_mode(ColorMode::automatic), + address(false), + object(false), + inliner_context_size(5), + trace_context_size(7) + {} + + template + FILE* print(ST& st, FILE* fp = stderr) { + cfile_streambuf obuf(fp); + std::ostream os(&obuf); + Colorize colorize(os); + colorize.activate(color_mode, fp); + print_stacktrace(st, os, colorize); + return fp; + } + + template + std::ostream& print(ST& st, std::ostream& os) { + Colorize colorize(os); + colorize.activate(color_mode); + print_stacktrace(st, os, colorize); + return os; + } + + template + FILE* print(IT begin, IT end, FILE* fp = stderr, size_t thread_id = 0) { + cfile_streambuf obuf(fp); + std::ostream os(&obuf); + Colorize colorize(os); + colorize.activate(color_mode, fp); + print_stacktrace(begin, end, os, thread_id, colorize); + return fp; + } + + template + std::ostream& print(IT begin, IT end, std::ostream& os, size_t thread_id = 0) { + Colorize colorize(os); + colorize.activate(color_mode); + print_stacktrace(begin, end, os, thread_id, colorize); + return os; + } + +private: + TraceResolver _resolver; + SnippetFactory _snippets; + + template + void print_stacktrace(ST& st, std::ostream& os, Colorize& colorize) { + print_header(os, st.thread_id()); + _resolver.load_stacktrace(st); + for (size_t trace_idx = st.size(); trace_idx > 0; --trace_idx) { + print_trace(os, _resolver.resolve(st[trace_idx-1]), colorize); + } + } + + template + void print_stacktrace(IT begin, IT end, std::ostream& os, size_t thread_id, Colorize& colorize) { + print_header(os, thread_id); + for (; begin != end; ++begin) { + print_trace(os, *begin, colorize); + } + } + + void print_header(std::ostream& os, size_t thread_id) { + os << "Stack trace (most recent call last)"; + if (thread_id) { + os << " in thread " << thread_id; + } + os << ":\n"; + } + + void print_trace(std::ostream& os, const ResolvedTrace& trace, + Colorize& colorize) { + os << "#" + << std::left << std::setw(2) << trace.idx + << std::right; + bool already_indented = true; + + if (!trace.source.filename.size() || object) { + os << " Object \"" + << trace.object_filename + << "\", at " + << trace.addr + << ", in " + << trace.object_function + << "\n"; + already_indented = false; + } + + for (size_t inliner_idx = trace.inliners.size(); + inliner_idx > 0; --inliner_idx) { + if (!already_indented) { + os << " "; + } + const ResolvedTrace::SourceLoc& inliner_loc + = trace.inliners[inliner_idx-1]; + print_source_loc(os, " | ", inliner_loc); + if (snippet) { + print_snippet(os, " | ", inliner_loc, + colorize, Color::purple, inliner_context_size); + } + already_indented = false; + } + + if (trace.source.filename.size()) { + if (!already_indented) { + os << " "; + } + print_source_loc(os, " ", trace.source, trace.addr); + if (snippet) { + print_snippet(os, " ", trace.source, + colorize, Color::yellow, trace_context_size); + } + } + } + + void print_snippet(std::ostream& os, const char* indent, + const ResolvedTrace::SourceLoc& source_loc, + Colorize& colorize, Color::type color_code, + int context_size) + { + using namespace std; + typedef SnippetFactory::lines_t lines_t; + + lines_t lines = _snippets.get_snippet(source_loc.filename, + source_loc.line, static_cast(context_size)); + + for (lines_t::const_iterator it = lines.begin(); + it != lines.end(); ++it) { + if (it-> first == source_loc.line) { + colorize.set_color(color_code); + os << indent << ">"; + } else { + os << indent << " "; + } + os << std::setw(4) << it->first + << ": " + << it->second + << "\n"; + if (it-> first == source_loc.line) { + colorize.set_color(Color::reset); + } + } + } + + void print_source_loc(std::ostream& os, const char* indent, + const ResolvedTrace::SourceLoc& source_loc, + void* addr=nullptr) { + os << indent + << "Source \"" + << source_loc.filename + << "\", line " + << source_loc.line + << ", in " + << source_loc.function; + + if (address && addr != nullptr) { + os << " [" << addr << "]"; + } + os << "\n"; + } +}; + +/*************** SIGNALS HANDLING ***************/ + +#if defined(BACKWARD_SYSTEM_LINUX) || defined(BACKWARD_SYSTEM_DARWIN) + + +class SignalHandling { +public: + static std::vector make_default_signals() { + const int posix_signals[] = { + // Signals for which the default action is "Core". + SIGABRT, // Abort signal from abort(3) + SIGBUS, // Bus error (bad memory access) + SIGFPE, // Floating point exception + SIGILL, // Illegal Instruction + SIGIOT, // IOT trap. A synonym for SIGABRT + SIGQUIT, // Quit from keyboard + SIGSEGV, // Invalid memory reference + SIGSYS, // Bad argument to routine (SVr4) + SIGTRAP, // Trace/breakpoint trap + SIGXCPU, // CPU time limit exceeded (4.2BSD) + SIGXFSZ, // File size limit exceeded (4.2BSD) +#if defined(BACKWARD_SYSTEM_DARWIN) + SIGEMT, // emulation instruction executed +#endif + }; + return std::vector(posix_signals, posix_signals + sizeof posix_signals / sizeof posix_signals[0] ); + } + + SignalHandling(const std::vector& posix_signals = make_default_signals()): + _loaded(false) { + bool success = true; + + const size_t stack_size = 1024 * 1024 * 8; + _stack_content.reset(static_cast(malloc(stack_size))); + if (_stack_content) { + stack_t ss; + ss.ss_sp = _stack_content.get(); + ss.ss_size = stack_size; + ss.ss_flags = 0; + if (sigaltstack(&ss, nullptr) < 0) { + success = false; + } + } else { + success = false; + } + + for (size_t i = 0; i < posix_signals.size(); ++i) { + struct sigaction action; + memset(&action, 0, sizeof action); + action.sa_flags = static_cast(SA_SIGINFO | SA_ONSTACK | SA_NODEFER | + SA_RESETHAND); + sigfillset(&action.sa_mask); + sigdelset(&action.sa_mask, posix_signals[i]); +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdisabled-macro-expansion" +#endif + action.sa_sigaction = &sig_handler; +#if defined(__clang__) +#pragma clang diagnostic pop +#endif + + int r = sigaction(posix_signals[i], &action, nullptr); + if (r < 0) success = false; + } + + _loaded = success; + } + + bool loaded() const { return _loaded; } + + static void handleSignal(int, siginfo_t* info, void* _ctx) { + ucontext_t *uctx = static_cast(_ctx); + + StackTrace st; + void* error_addr = nullptr; +#ifdef REG_RIP // x86_64 + error_addr = reinterpret_cast(uctx->uc_mcontext.gregs[REG_RIP]); +#elif defined(REG_EIP) // x86_32 + error_addr = reinterpret_cast(uctx->uc_mcontext.gregs[REG_EIP]); +#elif defined(__arm__) + error_addr = reinterpret_cast(uctx->uc_mcontext.arm_pc); +#elif defined(__aarch64__) + error_addr = reinterpret_cast(uctx->uc_mcontext.pc); +#elif defined(__ppc__) || defined(__powerpc) || defined(__powerpc__) || defined(__POWERPC__) + error_addr = reinterpret_cast(uctx->uc_mcontext.regs->nip); +#elif defined(__s390x__) + error_addr = reinterpret_cast(uctx->uc_mcontext.psw.addr); +#elif defined(__APPLE__) && defined(__x86_64__) + error_addr = reinterpret_cast(uctx->uc_mcontext->__ss.__rip); +#elif defined(__APPLE__) + error_addr = reinterpret_cast(uctx->uc_mcontext->__ss.__eip); +#else +# warning ":/ sorry, ain't know no nothing none not of your architecture!" +#endif + if (error_addr) { + st.load_from(error_addr, 32); + } else { + st.load_here(32); + } + + Printer printer; + printer.address = true; + printer.print(st, stderr); + +#if _XOPEN_SOURCE >= 700 || _POSIX_C_SOURCE >= 200809L + psiginfo(info, nullptr); +#else + (void)info; +#endif + } + +private: + details::handle _stack_content; + bool _loaded; + +#ifdef __GNUC__ + __attribute__((noreturn)) +#endif + static void sig_handler(int signo, siginfo_t* info, void* _ctx) { + handleSignal(signo, info, _ctx); + + // try to forward the signal. + raise(info->si_signo); + + // terminate the process immediately. + puts("watf? exit"); + _exit(EXIT_FAILURE); + } +}; + +#endif // BACKWARD_SYSTEM_LINUX || BACKWARD_SYSTEM_DARWIN + +#ifdef BACKWARD_SYSTEM_UNKNOWN + +class SignalHandling { +public: + SignalHandling(const std::vector& = std::vector()) {} + bool init() { return false; } + bool loaded() { return false; } +}; + +#endif // BACKWARD_SYSTEM_UNKNOWN + +} // namespace backward + +#endif /* H_GUARD */ diff --git a/iguana/exchanges/etomicswap/etomiclib.cpp b/iguana/exchanges/etomicswap/etomiclib.cpp index 82e16487e..2b7b13245 100644 --- a/iguana/exchanges/etomicswap/etomiclib.cpp +++ b/iguana/exchanges/etomicswap/etomiclib.cpp @@ -10,6 +10,12 @@ #include #include +#ifndef NDEBUG +#define BACKWARD_HAS_DW 1 +#include "backward.hpp" +using namespace backward; +#endif + using namespace dev; using namespace dev::eth; @@ -859,3 +865,10 @@ uint8_t isValidAddress(char *address) std::regex r("^(0x|0X)?[a-fA-F0-9]{40}$"); return static_cast(std::regex_match(address, r)); } + +#if !defined(NDEBUG) && defined(__linux__) +void print_stack_trace() { + StackTrace st; st.load_here(32); + Printer p; p.print(st); +} +#endif diff --git a/iguana/exchanges/etomicswap/etomiclib.h b/iguana/exchanges/etomicswap/etomiclib.h index b4ec3756e..832bb1b1d 100644 --- a/iguana/exchanges/etomicswap/etomiclib.h +++ b/iguana/exchanges/etomicswap/etomiclib.h @@ -217,6 +217,10 @@ uint8_t compareAddresses(char *address1, char *address2); uint8_t isValidAddress(char *address); uint8_t getErc20DecimalsZeroOnError(char *tokenAddress); +#if !defined(NDEBUG) && defined(__linux__) +void print_stack_trace(); +#endif + #ifdef __cplusplus } #endif From 808a52b4620854612b2feaca30497dd95bfc9b51 Mon Sep 17 00:00:00 2001 From: Artem Pikulin Date: Tue, 20 Nov 2018 17:41:06 +0700 Subject: [PATCH 11/42] Fix travis.yml. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 3e6fbc1f0..2d167b51d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,7 +27,7 @@ script: - cmake --build . --target marketmaker-mainnet -j $THREAD_COUNT - cmake --build . --target marketmaker-testnet -j $THREAD_COUNT # Debug build on Linux, might help to troubleshoot some issues that are hard to reproduce - - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; cd ../ && mkdir build-debug && cd build-debug; fi + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then cd ../ && mkdir build-debug && cd build-debug; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then cmake -DCMAKE_BUILD_TYPE=Debug -DMM_VERSION="$VERSION-Debug" -DCMAKE_C_COMPILER=/usr/bin/gcc-7 -DCMAKE_CXX_COMPILER=/usr/bin/g++-7 ..; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then cmake --build . --target marketmaker-mainnet -j $THREAD_COUNT; fi From b3bbcd202677e16efc1512d28460758ee1dd8a37 Mon Sep 17 00:00:00 2001 From: Artem Pikulin Date: Mon, 31 Dec 2018 20:14:08 +0700 Subject: [PATCH 12/42] Fix txversion for assetchains, BEER and PIZZA. Fix ETH dexfee addr. --- .dockerignore | 3 ++- iguana/exchanges/LP_coins.c | 16 ++++++++++------ iguana/exchanges/LP_etomic.c | 20 +++++--------------- iguana/exchanges/LP_include.h | 1 + 4 files changed, 18 insertions(+), 22 deletions(-) diff --git a/.dockerignore b/.dockerignore index 128c6ac20..bdf39229f 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,3 +1,4 @@ .git .vscode -cmake-build-debug \ No newline at end of file +cmake-build-debug +target \ No newline at end of file diff --git a/iguana/exchanges/LP_coins.c b/iguana/exchanges/LP_coins.c index da8b4855b..73b052f07 100644 --- a/iguana/exchanges/LP_coins.c +++ b/iguana/exchanges/LP_coins.c @@ -385,9 +385,6 @@ uint16_t LP_coininit(struct iguana_info *coin,char *symbol,char *name,char *asse char *name2; uint16_t origport = port; memset(coin,0,sizeof(*coin)); safecopy(coin->symbol,symbol,sizeof(coin->symbol)); - if ( strcmp(symbol,"PART") == 0 ) - coin->txversion = 160; - else coin->txversion = txversion; coin->updaterate = (uint32_t)time(NULL); coin->isPoS = isPoS; coin->taddr = taddr; @@ -423,7 +420,7 @@ uint16_t LP_coininit(struct iguana_info *coin,char *symbol,char *name,char *asse sprintf(coin->serverport,"127.0.0.1:%u",port); if ( port != origport ) printf("set curl path for %s to %s\n",symbol,coin->serverport); - if ( strcmp(symbol,"KMD") == 0 || coin->isassetchain != 0 || taddr != 0 ) + if ( strcmp(symbol,"KMD") == 0 || strcmp(symbol,"BEER") == 0 || strcmp(symbol,"PIZZA") == 0 || coin->isassetchain != 0 || taddr != 0 ) coin->zcash = LP_IS_ZCASHPROTOCOL; else if ( strcmp(symbol,"BCH") == 0 ) { @@ -443,6 +440,15 @@ uint16_t LP_coininit(struct iguana_info *coin,char *symbol,char *name,char *asse coin->curl_handle = curl_easy_init(); portable_mutex_init(&coin->curl_mutex); coin->decimals = decimals; + if ( strcmp(symbol,"PART") == 0 ) { + coin->txversion = 160; + } else if ( coin->isassetchain != 0 && strcmp(symbol,"OOT") != 0 && strcmp(symbol,"ZILLA") != 0 ) { + coin->txversion = 4; + } else if ( strcmp(name,"BEER") == 0 || strcmp("PIZZA",name) == 0 || strcmp("KMD",name) == 0 ) { + coin->txversion = 4; + } else { + coin->txversion = txversion; + } return(port); } @@ -541,8 +547,6 @@ struct iguana_info *LP_coincreate(cJSON *item) { coin = LP_coinadd(&cdata); coin->inactive = (uint32_t)time(NULL); - if ( coin->isassetchain != 0 && strcmp(symbol,"OOT") != 0 && strcmp(symbol,"ZILLA") != 0 ) - coin->txversion = 4; } else coin = LP_coinadd(&cdata); } else if ( symbol != 0 && jobj(item,"rpcport") == 0 ) printf("SKIP %s, missing rpcport field in coins array\n",symbol); diff --git a/iguana/exchanges/LP_etomic.c b/iguana/exchanges/LP_etomic.c index 0ec33c3c3..5e8eb7787 100644 --- a/iguana/exchanges/LP_etomic.c +++ b/iguana/exchanges/LP_etomic.c @@ -31,26 +31,18 @@ int32_t LP_etomic_wait_for_confirmation(char *txId) return(waitForConfirmation(txId)); } -void LP_etomic_pubkeystr_to_addr(char *pubkey, char *output) -{ - char *address = pubKey2Addr(pubkey); - strcpy(output, address); - free(address); -} - char *LP_etomicalice_send_fee(struct basilisk_swap *swap) { - char amount[100], secretKey[70], dexaddr[50]; + char amount[100], secretKey[70]; satoshisToWei(amount, LP_DEXFEE(swap->I.alicerealsat)); swap->myfee.I.eth_amount = LP_DEXFEE(swap->I.alicerealsat); uint8arrayToHex(secretKey, swap->persistent_privkey.bytes, 32); - LP_etomic_pubkeystr_to_addr(INSTANTDEX_PUBKEY, dexaddr); if (strcmp(swap->I.alicestr,"ETH") == 0 ) { - return(sendEth(dexaddr, amount, secretKey, 1, 0, 0, 1)); + return(sendEth(INSTANTDEX_ETHADDR, amount, secretKey, 1, 0, 0, 1)); } else { struct iguana_info *alicecoin = LP_coinfind(swap->I.alicestr); - return(sendErc20(swap->I.alicetomic, dexaddr, amount, secretKey, 1, 0, 0, 1, alicecoin->decimals)); + return(sendErc20(swap->I.alicetomic, INSTANTDEX_ETHADDR, amount, secretKey, 1, 0, 0, 1, alicecoin->decimals)); } } @@ -66,10 +58,8 @@ uint8_t LP_etomic_verify_alice_fee(struct basilisk_swap *swap) return(0); } - char dexaddr[50]; - LP_etomic_pubkeystr_to_addr(INSTANTDEX_PUBKEY, dexaddr); if ( strcmp(swap->I.alicestr,"ETH") == 0 ) { - if (compareAddresses(data.to, dexaddr) == 0) { + if (compareAddresses(data.to, INSTANTDEX_ETHADDR) == 0) { printf("Alice fee %s was sent to wrong address %s\n", swap->otherfee.I.ethTxid, data.to); return(0); } @@ -88,7 +78,7 @@ uint8_t LP_etomic_verify_alice_fee(struct basilisk_swap *swap) } char weiAmount[70]; satoshisToWei(weiAmount, LP_DEXFEE(swap->I.alicerealsat)); - return(verifyAliceErc20FeeData(swap->I.alicetomic, dexaddr, weiAmount, data.input, alicecoin->decimals)); + return(verifyAliceErc20FeeData(swap->I.alicetomic, INSTANTDEX_ETHADDR, weiAmount, data.input, alicecoin->decimals)); } } diff --git a/iguana/exchanges/LP_include.h b/iguana/exchanges/LP_include.h index acbbe022d..66da591ce 100644 --- a/iguana/exchanges/LP_include.h +++ b/iguana/exchanges/LP_include.h @@ -112,6 +112,7 @@ void emscripten_usleep(int32_t x); // returns immediate, no sense for sleeping #define INSTANTDEX_LOCKTIME (3600*2 + 300*2) #define INSTANTDEX_INSURANCEDIV 777 #define INSTANTDEX_PUBKEY "03bc2c7ba671bae4a6fc835244c9762b41647b9827d4780a89a949b984a8ddcc06" +#define INSTANTDEX_ETHADDR "0xd8997941dd1346e9231118d5685d866294f59e5b" #define INSTANTDEX_RMD160 "ca1e04745e8ca0c60d8c5881531d51bec470743f" #define JUMBLR_RMD160 "5177f8b427e5f47342a4b8ab5dac770815d4389e" #define TIERNOLAN_RMD160 "daedddd8dbe7a2439841ced40ba9c3d375f98146" From 444f1cd5003b8c10c594e97f144ca05ab81f579d Mon Sep 17 00:00:00 2001 From: Artem Pikulin Date: Tue, 1 Jan 2019 14:16:01 +0700 Subject: [PATCH 13/42] Cache electrum tx history only when it's enabled explicitly in argjson. This feature is used by AtomicDEX GUI only so I disable it by default. --- iguana/exchanges/LP_commands.c | 1 + iguana/exchanges/LP_include.h | 4 ++-- iguana/exchanges/LP_socket.c | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/iguana/exchanges/LP_commands.c b/iguana/exchanges/LP_commands.c index 2369ef698..d9e58cff7 100644 --- a/iguana/exchanges/LP_commands.c +++ b/iguana/exchanges/LP_commands.c @@ -717,6 +717,7 @@ version\n\ if ( (ptr= LP_coinsearch(coin)) != 0 ) { ptr->inactive = 0; + ptr->cache_history = juint(argjson, "cache_history"); return(jprint(LP_electrumserver(ptr,jstr(argjson,"ipaddr"),juint(argjson,"port")),1)); } else return(clonestr("{\"error\":\"cant find coind\"}")); } diff --git a/iguana/exchanges/LP_include.h b/iguana/exchanges/LP_include.h index 66da591ce..1a30675ec 100644 --- a/iguana/exchanges/LP_include.h +++ b/iguana/exchanges/LP_include.h @@ -337,8 +337,9 @@ struct iguana_info uint64_t txfee,do_autofill_merge; int32_t numutxos,notarized,longestchain,firstrefht,firstscanht,lastscanht,height; uint16_t busport,did_addrutxo_reset; uint32_t txversion,dPoWtime,lastautosplit,lastresetutxo,loadedcache,electrumlist,lastunspent,importedprivkey,lastpushtime,lastutxosync,addr_listunspent_requested,lastutxos,updaterate,counter,inactive,lastmempool,lastgetinfo,ratetime,heighttime,lastmonitor,obooktime; - uint8_t pubtype,p2shtype,isPoS,wiftype,wiftaddr,taddr,noimportprivkey_flag,userconfirms,isassetchain,maxconfirms; + uint8_t pubtype,p2shtype,isPoS,wiftype,wiftaddr,taddr,noimportprivkey_flag,userconfirms,isassetchain,maxconfirms,cache_history; char symbol[128],smartaddr[64],userpass[1024],serverport[128],instantdex_address[64],estimatefeestr[32],getinfostr[32],etomic[64],validateaddress[64]; + struct LP_tx_history_item *tx_history; // portfolio double price_kmd,force,perc,goal,goalperc,relvolume,rate; void *electrum; void *ctx; @@ -348,7 +349,6 @@ struct iguana_info void *curl_handle; portable_mutex_t curl_mutex; bits256 cachedtxid,notarizationtxid; uint8_t *cachedtxiddata; int32_t cachedtxidlen; bits256 cachedmerkle,notarizedhash; int32_t cachedmerkleheight; - struct LP_tx_history_item *tx_history; }; struct _LP_utxoinfo { bits256 txid; uint64_t value; int32_t height; uint32_t vout:30,suppress:1,pad:1; }; diff --git a/iguana/exchanges/LP_socket.c b/iguana/exchanges/LP_socket.c index e7ddb802b..03917354c 100644 --- a/iguana/exchanges/LP_socket.c +++ b/iguana/exchanges/LP_socket.c @@ -1502,7 +1502,7 @@ cJSON *LP_electrumserver(struct iguana_info *coin,char *ipaddr,uint16_t port) cJSON_Delete(balance); } #endif - if (coin->electrum != 0 && cur == 0) { + if (coin->cache_history > 0 && coin->electrum != 0 && cur == 0) { if ( OS_thread_create(malloc(sizeof(pthread_t)),NULL,(void *)LP_electrum_txhistory_loop,(void *)coin) != 0 ) { printf("error launching LP_electrum_tx_history_loop %s.(%s:%u)\n",coin->symbol,ep->ipaddr,ep->port); From dd8b6f9342b014f6df787e26ea505d74afd0b3c6 Mon Sep 17 00:00:00 2001 From: Artem Pikulin Date: Tue, 1 Jan 2019 14:37:14 +0700 Subject: [PATCH 14/42] Allow sending dexfee to old address for a while. --- iguana/exchanges/LP_etomic.c | 6 ++++-- iguana/exchanges/LP_include.h | 5 +++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/iguana/exchanges/LP_etomic.c b/iguana/exchanges/LP_etomic.c index 5e8eb7787..ed37f939f 100644 --- a/iguana/exchanges/LP_etomic.c +++ b/iguana/exchanges/LP_etomic.c @@ -59,7 +59,7 @@ uint8_t LP_etomic_verify_alice_fee(struct basilisk_swap *swap) } if ( strcmp(swap->I.alicestr,"ETH") == 0 ) { - if (compareAddresses(data.to, INSTANTDEX_ETHADDR) == 0) { + if (compareAddresses(data.to, INSTANTDEX_ETHADDR) == 0 && compareAddresses(data.to, INSTANTDEX_OLD_ETHADDR) == 0) { printf("Alice fee %s was sent to wrong address %s\n", swap->otherfee.I.ethTxid, data.to); return(0); } @@ -78,7 +78,9 @@ uint8_t LP_etomic_verify_alice_fee(struct basilisk_swap *swap) } char weiAmount[70]; satoshisToWei(weiAmount, LP_DEXFEE(swap->I.alicerealsat)); - return(verifyAliceErc20FeeData(swap->I.alicetomic, INSTANTDEX_ETHADDR, weiAmount, data.input, alicecoin->decimals)); + uint8_t verify_new = verifyAliceErc20FeeData(swap->I.alicetomic, INSTANTDEX_ETHADDR, weiAmount, data.input, alicecoin->decimals); + uint8_t verify_old = verifyAliceErc20FeeData(swap->I.alicetomic, INSTANTDEX_OLD_ETHADDR, weiAmount, data.input, alicecoin->decimals); + return((uint8_t)(verify_new || verify_old)); } } diff --git a/iguana/exchanges/LP_include.h b/iguana/exchanges/LP_include.h index 1a30675ec..b30be5b34 100644 --- a/iguana/exchanges/LP_include.h +++ b/iguana/exchanges/LP_include.h @@ -113,6 +113,11 @@ void emscripten_usleep(int32_t x); // returns immediate, no sense for sleeping #define INSTANTDEX_INSURANCEDIV 777 #define INSTANTDEX_PUBKEY "03bc2c7ba671bae4a6fc835244c9762b41647b9827d4780a89a949b984a8ddcc06" #define INSTANTDEX_ETHADDR "0xd8997941dd1346e9231118d5685d866294f59e5b" +// Artem Pikulin: +// This is invalid address got from zero pubkey because of error in pubKey2Addr(char* pubKey) +// Going to keep it for a while because some nodes might be not updated and still send fee to old address. +// I think it's better to allow swap to continue even if fee sent to wrong address. +#define INSTANTDEX_OLD_ETHADDR "0x3f17f1962B36e491b30A40b2405849e597Ba5FB5" #define INSTANTDEX_RMD160 "ca1e04745e8ca0c60d8c5881531d51bec470743f" #define JUMBLR_RMD160 "5177f8b427e5f47342a4b8ab5dac770815d4389e" #define TIERNOLAN_RMD160 "daedddd8dbe7a2439841ced40ba9c3d375f98146" From e8c58967ecf04e3250db0d9f2d645f875a3f73e9 Mon Sep 17 00:00:00 2001 From: Artem Pikulin Date: Tue, 1 Jan 2019 14:45:25 +0700 Subject: [PATCH 15/42] Always do docker-compose down after Jenkins build. Show logs. --- Jenkinsfile | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index ef2e76a87..5d55f56a6 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -24,8 +24,14 @@ docker-compose build''' sh '''docker-compose up -d ./start_BEER_OTHER_trade.sh ETH timeout 600 grep -q "SWAP completed" <(COMPOSE_HTTP_TIMEOUT=600 docker-compose logs -f clientnode) -timeout 600 grep -q "SWAP completed" <(COMPOSE_HTTP_TIMEOUT=600 docker-compose logs -f seednode) +timeout 600 grep -q "SWAP completed" <(COMPOSE_HTTP_TIMEOUT=600 docker-compose logs -f seednode)''' + } + post { + always { + sh '''docker-compose logs --timestamps --tail=999 +docker ps docker-compose down''' + } } } stage('Trade ETH/BEER') { @@ -33,8 +39,14 @@ docker-compose down''' sh '''docker-compose up -d ./start_BEER_OTHER_trade_inverted.sh ETH timeout 600 grep -q "SWAP completed" <(COMPOSE_HTTP_TIMEOUT=600 docker-compose logs -f clientnode) -timeout 600 grep -q "SWAP completed" <(COMPOSE_HTTP_TIMEOUT=600 docker-compose logs -f seednode) +timeout 600 grep -q "SWAP completed" <(COMPOSE_HTTP_TIMEOUT=600 docker-compose logs -f seednode)''' + } + post { + always { + sh '''docker-compose logs --timestamps --tail=999 +docker ps docker-compose down''' + } } } } From d3ebcc378e91eb16a4432c84d7bcc9f2923e7dba Mon Sep 17 00:00:00 2001 From: Artem Pikulin Date: Wed, 9 Jan 2019 14:47:10 +0700 Subject: [PATCH 16/42] Fix support of coins with txversion > 4 and standard sighash method. E.G. ECA (Electra) uses txversion:7. --- iguana/exchanges/LP_bitcoin.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iguana/exchanges/LP_bitcoin.c b/iguana/exchanges/LP_bitcoin.c index a1de64564..87760d5ae 100644 --- a/iguana/exchanges/LP_bitcoin.c +++ b/iguana/exchanges/LP_bitcoin.c @@ -2866,7 +2866,7 @@ cJSON *bitcoin_txcreate(char *symbol,int32_t isPoS,int64_t locktime,uint32_t txv { cJSON *json = cJSON_CreateObject(); jaddnum(json,"version",txversion); - if (txversion >= 3) { + if (txversion == 3 || txversion == 4) { cJSON_AddBoolToObject(json,"overwintered",1); jaddnum(json,"expiryheight",0); if (txversion == 3) { From dbff3506f2e65aed41c2f768d2e7e4d0acd34ff5 Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Sat, 16 Feb 2019 10:46:04 +0300 Subject: [PATCH 17/42] fix txversion for assetchains earlier it was txversion=1 for all assetchains, even sapling active, during small bug in code. LP_coininit returns a positive (!) value of port number (unsigned value) and we somehow was compared it with < 0 . as a result part of code to assign txversion never executed. --- iguana/exchanges/LP_coins.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/iguana/exchanges/LP_coins.c b/iguana/exchanges/LP_coins.c index 7115d8680..9bbc64f1f 100644 --- a/iguana/exchanges/LP_coins.c +++ b/iguana/exchanges/LP_coins.c @@ -536,13 +536,20 @@ struct iguana_info *LP_coincreate(cJSON *item) if (txversion == 0) { txversion = 1; } - if ( LP_coininit(&cdata,symbol,name,assetname==0?"":assetname,isPoS,port,pubtype,p2shtype,wiftype,txfee,estimatedrate,longestchain,juint(item,"wiftaddr"),juint(item,"taddr"),LP_busport(port),jstr(item,"confpath"),decimals,txversion) < 0 ) - { - coin = LP_coinadd(&cdata); - coin->inactive = (uint32_t)time(NULL); - if ( coin->isassetchain != 0 && strcmp(symbol,"OOT") != 0 && strcmp(symbol,"ZILLA") != 0 ) - coin->txversion = 4; - } else coin = LP_coinadd(&cdata); + + uint16_t port = LP_coininit(&cdata,symbol,name,assetname==0?"":assetname,isPoS,port,pubtype,p2shtype,wiftype,txfee,estimatedrate,longestchain,juint(item,"wiftaddr"),juint(item,"taddr"),LP_busport(port),jstr(item,"confpath"),decimals,txversion); + + coin = LP_coinadd(&cdata); + coin->inactive = (uint32_t)time(NULL); + + // here we assume that any assetchain except OOT and ZILLA are sapling active with txversion=4, + // TODO: get "blocks" and "sapling" from daemon's "getinfo" rpc to make proper check + + if ( coin->isassetchain != 0 && strcmp(symbol,"OOT") != 0 && strcmp(symbol,"ZILLA") != 0 ) + coin->txversion = 4; + + if (coin !=0) printf("[ Debug ] LP_coincreate: symbol.%s name.%s assetname.%s port.%d isassetchain.%d txversion.%d\n", symbol, name, assetname, port, coin->isassetchain, coin->txversion); + } else if ( symbol != 0 && jobj(item,"rpcport") == 0 ) printf("SKIP %s, missing rpcport field in coins array\n",symbol); if ( coin != 0 && item != 0 ) From fdf468ba122a2789dd0a969454e2e8015f009342 Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Sat, 16 Feb 2019 11:18:33 +0300 Subject: [PATCH 18/42] fix crash when signing sapling tx with many outputs --- iguana/exchanges/LP_bitcoin.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/iguana/exchanges/LP_bitcoin.c b/iguana/exchanges/LP_bitcoin.c index 80f6a3813..57a7f7212 100644 --- a/iguana/exchanges/LP_bitcoin.c +++ b/iguana/exchanges/LP_bitcoin.c @@ -3494,8 +3494,13 @@ bits256 bitcoin_sigtxid(char *symbol,uint8_t taddr,uint8_t pubtype,uint8_t p2sht memcpy(&for_sig_hash[len], sequence_hash, 32); len += 32; - uint8_t outputs[1000], hash_outputs[32]; + uint8_t *outputs, hash_outputs[32]; int32_t outputs_len = 0; + + for (i = 0; i < dest.tx_out; i++) { outputs_len += sizeof(dest.vouts[i].value); outputs_len++; outputs_len += dest.vouts[i].pk_scriptlen; } // calc size for outputs buffer + outputs = malloc(outputs_len); + + outputs_len = 0; for (i = 0; i < dest.tx_out; i++) { outputs_len += iguana_rwnum(1, &outputs[outputs_len], sizeof(dest.vouts[i].value), &dest.vouts[i].value); outputs[outputs_len++] = (uint8_t) dest.vouts[i].pk_scriptlen; @@ -3516,6 +3521,8 @@ bits256 bitcoin_sigtxid(char *symbol,uint8_t taddr,uint8_t pubtype,uint8_t p2sht memcpy(&for_sig_hash[len], hash_outputs, 32); len += 32; + free(outputs); + // no join splits, fill the hashJoinSplits with 32 zeros memset(&for_sig_hash[len], 0, 32); len += 32; From d787aee492aed22c987881af4bea9a585f1a3f69 Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Sun, 17 Feb 2019 15:01:16 +0300 Subject: [PATCH 19/42] PIZZA and BEER is Komodo assetchains don't know why, but in this commit https://github.com/jl777/SuperNET/commit/ecd0f69d2fbf9ea7442380daf1eb0b0a16e8bff0 we start count PIZZA and BEER as 3rd party coins. bcz this code adds coin->isassetchain = 1 for all coins except PIZZA and BEER. now we start count PIZZA and BEER as assetchains again. if this will broke something we can always revert this commit and investigate why https://github.com/jl777/SuperNET/commit/ecd0f69d2fbf9ea7442380daf1eb0b0a16e8bff0 was added. --- iguana/exchanges/LP_coins.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iguana/exchanges/LP_coins.c b/iguana/exchanges/LP_coins.c index 9bbc64f1f..1c5a67893 100644 --- a/iguana/exchanges/LP_coins.c +++ b/iguana/exchanges/LP_coins.c @@ -405,7 +405,7 @@ uint16_t LP_coininit(struct iguana_info *coin,char *symbol,char *name,char *asse if ( assetname != 0 && strcmp(name,assetname) == 0 ) { //printf("%s is assetchain\n",symbol); - if ( strcmp(name,"BEER") != 0 && strcmp("PIZZA",name) != 0 ) + // if ( strcmp(name,"BEER") != 0 && strcmp("PIZZA",name) != 0 ) coin->isassetchain = 1; } if ( strcmp(symbol,"KMD") == 0 || (assetname != 0 && assetname[0] != 0) ) From 4b373cc21995b700b5ec62f1503dccb915b39b2d Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Sun, 17 Feb 2019 15:19:00 +0300 Subject: [PATCH 20/42] fix m_mm_StaticNanoMsg build use: make -f m_mm_StaticNanoMsg all to build --- iguana/m_mm_StaticNanoMsg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iguana/m_mm_StaticNanoMsg b/iguana/m_mm_StaticNanoMsg index c5068eeb8..c72785b60 100755 --- a/iguana/m_mm_StaticNanoMsg +++ b/iguana/m_mm_StaticNanoMsg @@ -19,7 +19,7 @@ all: +$(MAKE) -C secp256k1 -f m_unix_Makefile all +$(MAKE) -C ../crypto777 -f m_LP_StaticNanoMsg all +$(MAKE) -C ../crypto777 -f m_LP_StaticNanoMsg clean - $(CC) -DNOTETOMIC -o ../agents/marketmaker -I../crypto777 exchanges/mm.c ../crypto777/cJSON.c mini-gmp.c keccak.c groestl.c segwit_addr.c secp256k1.o ../agents/libcrypto777.a ../OSlibs/linux/$(shell uname -m)/libnanomsg-static.a -lcurl -lpthread -lm -lanl + $(CC) -DNOTETOMIC -o ../agents/marketmaker -I../crypto777 exchanges/mm.c ../crypto777/cJSON.c mini-gmp.c keccak.c groestl.c segwit_addr.c secp256k1.o ../agents/libcrypto777.a ../OSlibs/linux/$(shell uname -m)/libnanomsg-static.a -lcurl -lpthread -lm -lanl -lsodium @echo "===========================" @echo " marketmaker -> `pwd`/../agents/marketmaker" @echo "===========================" From 83dfadb5e602a9eace6c7bb285a11b149bdf1b3a Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Mon, 18 Feb 2019 11:07:08 +0300 Subject: [PATCH 21/42] fix nonetomic Windows build + MM_WIN_BUILD in solution + libsodium dependency build + add libsodium in solution for Win32 / Win64 builds --- marketmaker.vcxproj | 10 +++++----- marketmaker_build_32_64.cmd | 3 +++ marketmaker_build_depends.cmd | 15 ++++++++++++++- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/marketmaker.vcxproj b/marketmaker.vcxproj index b3d9f07fa..c60472ca7 100644 --- a/marketmaker.vcxproj +++ b/marketmaker.vcxproj @@ -121,7 +121,7 @@ MaxSpeed true true - _CRT_SECURE_NO_WARNINGS;NATIVE_WINDOWS;WIN32;_CONSOLE;NDEBUG;IGUANA_LOG2PACKETSIZE=20;IGUANA_MAXPACKETSIZE=1572864;NOTETOMIC;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;NATIVE_WINDOWS;WIN32;_CONSOLE;NDEBUG;IGUANA_LOG2PACKETSIZE=20;IGUANA_MAXPACKETSIZE=1572864;NOTETOMIC;MM_WIN_BUILD;%(PreprocessorDefinitions) 8Bytes @@ -130,7 +130,7 @@ Console true true - Ws2_32.lib;Advapi32.lib;$(SolutionDir)OSlibs\win\release\pthreadVC2.lib;libcurl.lib;nanomsg.lib;%(AdditionalDependencies) + Ws2_32.lib;Advapi32.lib;$(SolutionDir)OSlibs\win\release\pthreadVC2.lib;libcurl.lib;nanomsg.lib;libsodium.lib;%(AdditionalDependencies) @@ -141,7 +141,7 @@ MaxSpeed true true - WIN64;_WIN64;_CRT_SECURE_NO_WARNINGS;NATIVE_WINDOWS;WIN32;WIN32_LEAN_AND_MEAN;_CONSOLE;NDEBUG;IGUANA_LOG2PACKETSIZE=20;IGUANA_MAXPACKETSIZE=1572864;NOTETOMIC;%(PreprocessorDefinitions) + WIN64;_WIN64;_CRT_SECURE_NO_WARNINGS;NATIVE_WINDOWS;WIN32;WIN32_LEAN_AND_MEAN;_CONSOLE;NDEBUG;IGUANA_LOG2PACKETSIZE=20;IGUANA_MAXPACKETSIZE=1572864;NOTETOMIC;MM_WIN_BUILD;%(PreprocessorDefinitions) 8Bytes MultiThreaded @@ -150,7 +150,7 @@ true true true - Ws2_32.lib;Advapi32.lib;$(SolutionDir)OSlibs\win\x64\pthread_lib.lib;libcurl.lib;nanomsg.lib;%(AdditionalDependencies) + Ws2_32.lib;Advapi32.lib;$(SolutionDir)OSlibs\win\x64\pthread_lib.lib;libcurl.lib;nanomsg.lib;libsodium.lib;%(AdditionalDependencies) .\OSlibs\win\x64\release;%(AdditionalLibraryDirectories) @@ -258,4 +258,4 @@ - + \ No newline at end of file diff --git a/marketmaker_build_32_64.cmd b/marketmaker_build_32_64.cmd index faf016457..3a96e0593 100644 --- a/marketmaker_build_32_64.cmd +++ b/marketmaker_build_32_64.cmd @@ -74,12 +74,15 @@ IF "%host%"=="VM-81" ( copy /y x64\Release\marketmaker.exe package_content\win64 copy /y x64\Release\libcurl.dll package_content\win64 copy /y x64\Release\nanomsg.dll package_content\win64 + copy /y x64\Release\libsodium.dll package_content\win64 + echo Marketmaker_%LP_MAJOR_VERSION%.%LP_MINOR_VERSION%_%LP_BUILD_NUMBER%%GIT_COMMIT% > package_content\version.txt cd package_content "C:\Program Files\7-Zip\7z.exe" a C:\komodo\marketmaker_release\marketmaker_release.7z win32\marketmaker.exe "C:\Program Files\7-Zip\7z.exe" a C:\komodo\marketmaker_release\marketmaker_release.7z win64\marketmaker.exe "C:\Program Files\7-Zip\7z.exe" a C:\komodo\marketmaker_release\marketmaker_release.7z win64\libcurl.dll "C:\Program Files\7-Zip\7z.exe" a C:\komodo\marketmaker_release\marketmaker_release.7z win64\nanomsg.dll + "C:\Program Files\7-Zip\7z.exe" a C:\komodo\marketmaker_release\marketmaker_release.7z win64\libsodium.dll "C:\Program Files\7-Zip\7z.exe" a C:\komodo\marketmaker_release\marketmaker_release.7z version.txt cd .. rd package_content /s /q diff --git a/marketmaker_build_depends.cmd b/marketmaker_build_depends.cmd index 499ab6649..ab1fa9af4 100644 --- a/marketmaker_build_depends.cmd +++ b/marketmaker_build_depends.cmd @@ -98,4 +98,17 @@ if not exist marketmaker_depends\curl\build_msvc_2015_win64\lib\Release\libcurl_ ) copy marketmaker_depends\curl\build_msvc_2015_win64\lib\Release\libcurl_imp.lib marketmaker_depends\curl\build_msvc_2015_win64\lib\Release\curl.lib copy marketmaker_depends\curl\build_msvc_2015_win64\lib\Release\libcurl_imp.exp marketmaker_depends\curl\build_msvc_2015_win64\lib\Release\curl.exp -copy marketmaker_depends\curl\build_msvc_2015_win64\lib\Release\libcurl.dll x64\Release\libcurl.dll \ No newline at end of file +copy marketmaker_depends\curl\build_msvc_2015_win64\lib\Release\libcurl.dll x64\Release\libcurl.dll + +rem --- libsodium --- +:compile_libsodium +cd marketmaker_depends +git clone https://github.com/jedisct1/libsodium +cd libsodium\builds\msvc\vs2015 +MSBuild libsodium.sln /t:Rebuild /p:Configuration=DynRelease /p:Platform=Win32 +MSBuild libsodium.sln /t:Rebuild /p:Configuration=DynRelease /p:Platform=x64 +cd ..\..\..\..\.. +xcopy marketmaker_depends\libsodium\src\libsodium\include includes /O /X /E /H /K /Y +xcopy marketmaker_depends\libsodium\bin\x64\Release\v140\dynamic OSlibs\win\x64\release /O /X /E /H /K /Y +xcopy marketmaker_depends\libsodium\bin\Win32\Release\v140\dynamic OSlibs\win /O /X /E /H /K /Y +copy marketmaker_depends\libsodium\bin\x64\Release\v140\dynamic\libsodium.dll x64\Release \ No newline at end of file From f917fc7ff2d4f4b79877aae3b84f86dd7ec98711 Mon Sep 17 00:00:00 2001 From: Artem Pikulin Date: Mon, 18 Feb 2019 22:49:41 +0700 Subject: [PATCH 22/42] Move Sodium win build to separate script. Etomic uses precompiled lib. --- marketmaker_build_depends.cmd | 13 ------------- marketmaker_build_sodium.cmd | 12 ++++++++++++ 2 files changed, 12 insertions(+), 13 deletions(-) create mode 100644 marketmaker_build_sodium.cmd diff --git a/marketmaker_build_depends.cmd b/marketmaker_build_depends.cmd index ab1fa9af4..a88d1051a 100644 --- a/marketmaker_build_depends.cmd +++ b/marketmaker_build_depends.cmd @@ -99,16 +99,3 @@ if not exist marketmaker_depends\curl\build_msvc_2015_win64\lib\Release\libcurl_ copy marketmaker_depends\curl\build_msvc_2015_win64\lib\Release\libcurl_imp.lib marketmaker_depends\curl\build_msvc_2015_win64\lib\Release\curl.lib copy marketmaker_depends\curl\build_msvc_2015_win64\lib\Release\libcurl_imp.exp marketmaker_depends\curl\build_msvc_2015_win64\lib\Release\curl.exp copy marketmaker_depends\curl\build_msvc_2015_win64\lib\Release\libcurl.dll x64\Release\libcurl.dll - -rem --- libsodium --- -:compile_libsodium -cd marketmaker_depends -git clone https://github.com/jedisct1/libsodium -cd libsodium\builds\msvc\vs2015 -MSBuild libsodium.sln /t:Rebuild /p:Configuration=DynRelease /p:Platform=Win32 -MSBuild libsodium.sln /t:Rebuild /p:Configuration=DynRelease /p:Platform=x64 -cd ..\..\..\..\.. -xcopy marketmaker_depends\libsodium\src\libsodium\include includes /O /X /E /H /K /Y -xcopy marketmaker_depends\libsodium\bin\x64\Release\v140\dynamic OSlibs\win\x64\release /O /X /E /H /K /Y -xcopy marketmaker_depends\libsodium\bin\Win32\Release\v140\dynamic OSlibs\win /O /X /E /H /K /Y -copy marketmaker_depends\libsodium\bin\x64\Release\v140\dynamic\libsodium.dll x64\Release \ No newline at end of file diff --git a/marketmaker_build_sodium.cmd b/marketmaker_build_sodium.cmd new file mode 100644 index 000000000..1ce8d313a --- /dev/null +++ b/marketmaker_build_sodium.cmd @@ -0,0 +1,12 @@ +rem --- libsodium --- +:compile_libsodium +cd marketmaker_depends +git clone https://github.com/jedisct1/libsodium +cd libsodium\builds\msvc\vs2015 +MSBuild libsodium.sln /t:Rebuild /p:Configuration=DynRelease /p:Platform=Win32 +MSBuild libsodium.sln /t:Rebuild /p:Configuration=DynRelease /p:Platform=x64 +cd ..\..\..\..\.. +xcopy marketmaker_depends\libsodium\src\libsodium\include includes /O /X /E /H /K /Y +xcopy marketmaker_depends\libsodium\bin\x64\Release\v140\dynamic OSlibs\win\x64\release /O /X /E /H /K /Y +xcopy marketmaker_depends\libsodium\bin\Win32\Release\v140\dynamic OSlibs\win /O /X /E /H /K /Y +copy marketmaker_depends\libsodium\bin\x64\Release\v140\dynamic\libsodium.dll x64\Release From b3acd14ed0e50a062d5ef1fd7514d1fc4630ab5a Mon Sep 17 00:00:00 2001 From: Artem Pikulin Date: Wed, 20 Feb 2019 16:30:45 +0700 Subject: [PATCH 23/42] Remove uint16_t port = according to Decker guide. --- iguana/exchanges/LP_coins.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iguana/exchanges/LP_coins.c b/iguana/exchanges/LP_coins.c index 4cb7d1e85..902ad821e 100644 --- a/iguana/exchanges/LP_coins.c +++ b/iguana/exchanges/LP_coins.c @@ -544,7 +544,7 @@ struct iguana_info *LP_coincreate(cJSON *item) txversion = 1; } - uint16_t port = LP_coininit(&cdata,symbol,name,assetname==0?"":assetname,isPoS,port,pubtype,p2shtype,wiftype,txfee,estimatedrate,longestchain,juint(item,"wiftaddr"),juint(item,"taddr"),LP_busport(port),jstr(item,"confpath"),decimals,txversion); + LP_coininit(&cdata,symbol,name,assetname==0?"":assetname,isPoS,port,pubtype,p2shtype,wiftype,txfee,estimatedrate,longestchain,juint(item,"wiftaddr"),juint(item,"taddr"),LP_busport(port),jstr(item,"confpath"),decimals,txversion); coin = LP_coinadd(&cdata); coin->inactive = (uint32_t)time(NULL); From dfaf431c6689c8b6ad9dc5120928e1297c676964 Mon Sep 17 00:00:00 2001 From: Mihail Fedorov Date: Tue, 26 Feb 2019 05:03:04 +0300 Subject: [PATCH 24/42] ILN --- iguana/dpowassets | 4 ++-- iguana/iguana_notary.c | 2 +- iguana/m_notary_run | 3 ++- iguana/m_splitfund | 2 ++ 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/iguana/dpowassets b/iguana/dpowassets index 82668b11e..7966399e3 100755 --- a/iguana/dpowassets +++ b/iguana/dpowassets @@ -42,7 +42,7 @@ curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dp curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"CCL\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"HUSH\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"PIRATE\",\"pubkey\":\"$pubkey\"}" -curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"MGNX\",\"pubkey\":\"$pubkey\"}" +#curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"MGNX\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"EMC2\",\"freq\":5,\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"PGT\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"KMDICE\",\"freq\":2,\"pubkey\":\"$pubkey\"}" @@ -51,4 +51,4 @@ curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dp curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"KSB\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"OUR\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"GIN\",\"pubkey\":\"$pubkey\"}" - +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"ILN\",\"pubkey\":\"$pubkey\"}" diff --git a/iguana/iguana_notary.c b/iguana/iguana_notary.c index 0e5d87b52..58a76930d 100755 --- a/iguana/iguana_notary.c +++ b/iguana/iguana_notary.c @@ -540,7 +540,7 @@ STRING_ARG(iguana,addnotary,ipaddr) } char NOTARY_CURRENCIES[][65] = { - "REVS", "SUPERNET", "DEX", "PANGEA", "JUMBLR", "BET", "CRYPTO", "HODL", "BOTS", "MGW", "COQUI", "WLC", "KV", "CEAL", "MESH", "MNZ", "CHIPS", "MSHARK", "AXO", "ETOMIC", "BTCH", "NINJA", "OOT", "CHAIN", "BNTN", "PRLPAY", "DSEC", "GLXT", "EQL", "ZILLA", "RFOX", "SEC", "CCL", "PIRATE", "MGNX", "PGT", "KMDICE", "DION", "ZEX", "KSB", "OUR" + "REVS", "SUPERNET", "DEX", "PANGEA", "JUMBLR", "BET", "CRYPTO", "HODL", "BOTS", "MGW", "COQUI", "WLC", "KV", "CEAL", "MESH", "MNZ", "CHIPS", "MSHARK", "AXO", "ETOMIC", "BTCH", "NINJA", "OOT", "CHAIN", "BNTN", "PRLPAY", "DSEC", "GLXT", "EQL", "ZILLA", "RFOX", "SEC", "CCL", "PIRATE", "MGNX", "PGT", "KMDICE", "DION", "ZEX", "KSB", "OUR", "ILN" }; // "LTC", "USD", "EUR", "JPY", "GBP", "AUD", "CAD", "CHF", "NZD", "CNY", "RUB", "MXN", "BRL", "INR", "HKD", "TRY", "ZAR", "PLN", "NOK", "SEK", "DKK", "CZK", "HUF", "ILS", "KRW", "MYR", "PHP", "RON", "SGD", "THB", "BGN", "IDR", "HRK", diff --git a/iguana/m_notary_run b/iguana/m_notary_run index 6b207073d..c7bfbb1c7 100755 --- a/iguana/m_notary_run +++ b/iguana/m_notary_run @@ -99,7 +99,7 @@ coins/sec_7776 coins/ccl_7776 coins/hush_7776 coins/pirate_7776 -coins/mgnx_7776 +#coins/mgnx_7776 coins/pgt_7776 coins/kmdice_7776 coins/dion_7776 @@ -107,6 +107,7 @@ coins/zex_7776 coins/ksb_7776 coins/our_7776 coins/gin_7776 +coins/iln_7776 #curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"passthru\",\"method\":\"paxfiats\",\"timeout\":900000}" diff --git a/iguana/m_splitfund b/iguana/m_splitfund index 16581b329..cb4495283 100755 --- a/iguana/m_splitfund +++ b/iguana/m_splitfund @@ -51,3 +51,5 @@ curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"DION\",\"agent\":\"iguana curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"ZEX\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"KSB\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"OUR\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" +curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"OUR\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" + From 3bea5190490bbd456484a754d01baaecfb6c488b Mon Sep 17 00:00:00 2001 From: Mihail Fedorov Date: Tue, 26 Feb 2019 05:04:12 +0300 Subject: [PATCH 25/42] ILN --- iguana/m_splitfund | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iguana/m_splitfund b/iguana/m_splitfund index cb4495283..275abbbd2 100755 --- a/iguana/m_splitfund +++ b/iguana/m_splitfund @@ -51,5 +51,5 @@ curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"DION\",\"agent\":\"iguana curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"ZEX\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"KSB\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"OUR\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" -curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"OUR\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" +curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"ILN\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" From 9bb4b4bdad8aeb35ab42af8d54a1ccf78cd40cdb Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Tue, 26 Feb 2019 11:24:55 +0300 Subject: [PATCH 26/42] + iln_7776 --- iguana/coins/iln_7776 | 1 + 1 file changed, 1 insertion(+) create mode 100755 iguana/coins/iln_7776 diff --git a/iguana/coins/iln_7776 b/iguana/coins/iln_7776 new file mode 100755 index 000000000..14a9017b4 --- /dev/null +++ b/iguana/coins/iln_7776 @@ -0,0 +1 @@ +curl --url "http://127.0.0.1:7776" --data "{\"conf\":\"ILN.conf\",\"path\":\"${HOME#"/"}/.komodo/ILN\",\"unitval\":\"20\",\"zcash\":1,\"RELAY\":-1,\"VALIDATE\":0,\"prefetchlag\":-1,\"poll\":100,\"active\":1,\"sapling\":1,\"agent\":\"iguana\",\"method\":\"addcoin\",\"startpend\":4,\"endpend\":4,\"services\":129,\"maxpeers\":8,\"newcoin\":\"ILN\",\"name\":\"ILN\",\"hasheaders\":1,\"useaddmultisig\":0,\"netmagic\":\"feb4cb23\",\"p2p\":12985,\"rpc\":12986,\"pubval\":60,\"p2shval\":85,\"wifval\":188,\"txfee_satoshis\":\"10000\",\"isPoS\":0,\"minoutput\":10000,\"minconfirms\":2,\"genesishash\":\"027e3758c3a65b12aa1046462b486d0a63bfa1beae327897f56c5cfb7daaae71\",\"protover\":170002,\"genesisblock\":\"0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a000000000000000000000000000000000000000000000000000000000000000029ab5f490f0f0f200b00000000000000000000000000000000000000000000000000000000000000fd4005000d5ba7cda5d473947263bf194285317179d2b0d307119c2e7cc4bd8ac456f0774bd52b0cd9249be9d40718b6397a4c7bbd8f2b3272fed2823cd2af4bd1632200ba4bf796727d6347b225f670f292343274cc35099466f5fb5f0cd1c105121b28213d15db2ed7bdba490b4cedc69742a57b7c25af24485e523aadbb77a0144fc76f79ef73bd8530d42b9f3b9bed1c135ad1fe152923fafe98f95f76f1615e64c4abb1137f4c31b218ba2782bc15534788dda2cc08a0ee2987c8b27ff41bd4e31cd5fb5643dfe862c9a02ca9f90c8c51a6671d681d04ad47e4b53b1518d4befafefe8cadfb912f3d03051b1efbf1dfe37b56e93a741d8dfd80d576ca250bee55fab1311fc7b3255977558cdda6f7d6f875306e43a14413facdaed2f46093e0ef1e8f8a963e1632dcbeebd8e49fd16b57d49b08f9762de89157c65233f60c8e38a1f503a48c555f8ec45dedecd574a37601323c27be597b956343107f8bd80f3a925afaf30811df83c402116bb9c1e5231c70fff899a7c82f73c902ba54da53cc459b7bf1113db65cc8f6914d3618560ea69abd13658fa7b6af92d374d6eca9529f8bd565166e4fcbf2a8dfb3c9b69539d4d2ee2e9321b85b331925df195915f2757637c2805e1d4131e1ad9ef9bc1bb1c732d8dba4738716d351ab30c996c8657bab39567ee3b29c6d054b711495c0d52e1cd5d8e55b4f0f0325b97369280755b46a02afd54be4ddd9f77c22272b8bbb17ff5118fedbae2564524e797bd28b5f74f7079d532ccc059807989f94d267f47e724b3f1ecfe00ec9e6541c961080d8891251b84b4480bc292f6a180bea089fef5bbda56e1e41390d7c0e85ba0ef530f7177413481a226465a36ef6afe1e2bca69d2078712b3912bba1a99b1fbff0d355d6ffe726d2bb6fbc103c4ac5756e5bee6e47e17424ebcbf1b63d8cb90ce2e40198b4f4198689daea254307e52a25562f4c1455340f0ffeb10f9d8e914775e37d0edca019fb1b9c6ef81255ed86bc51c5391e0591480f66e2d88c5f4fd7277697968656a9b113ab97f874fdd5f2465e5559533e01ba13ef4a8f7a21d02c30c8ded68e8c54603ab9c8084ef6d9eb4e92c75b078539e2ae786ebab6dab73a09e0aa9ac575bcefb29e930ae656e58bcb513f7e3c17e079dce4f05b5dbc18c2a872b22509740ebe6a3903e00ad1abc55076441862643f93606e3dc35e8d9f2caef3ee6be14d513b2e062b21d0061de3bd56881713a1a5c17f5ace05e1ec09da53f99442df175a49bd154aa96e4949decd52fed79ccf7ccbce32941419c314e374e4a396ac553e17b5340336a1a25c22f9e42a243ba5404450b650acfc826a6e432971ace776e15719515e1634ceb9a4a35061b668c74998d3dfb5827f6238ec015377e6f9c94f38108768cf6e5c8b132e0303fb5a200368f845ad9d46343035a6ff94031df8d8309415bb3f6cd5ede9c135fdabcc030599858d803c0f85be7661c88984d88faa3d26fb0e9aac0056a53f1b5d0baed713c853c4a2726869a0a124a8a5bbc0fc0ef80c8ae4cb53636aa02503b86a1eb9836fcc259823e2692d921d88e1ffc1e6cb2bde43939ceb3f32a611686f539f8f7c9f0bf00381f743607d40960f06d347d1cd8ac8a51969c25e37150efdf7aa4c2037a2fd0516fb444525ab157a0ed0a7412b2fa69b217fe397263153782c0f64351fbdf2678fa0dc8569912dcd8e3ccad38f34f23bbbce14c6a26ac24911b308b82c7e43062d180baeac4ba7153858365c72c63dcf5f6a5b08070b730adb017aeae925b7d0439979e2679f45ed2f25a7edcfd2fb77a8794630285ccb0a071f5cce410b46dbf9750b0354aae8b65574501cc69efb5b6a43444074fee116641bb29da56c2b4a7f456991fc92b2\",\"debug\":0,\"seedipaddr\":\"78.47.196.146\"}" \ No newline at end of file From 7432f080184f1b63e368eb4fdaf5659738a482fb Mon Sep 17 00:00:00 2001 From: pbca26 Date: Wed, 27 Feb 2019 12:29:41 +0300 Subject: [PATCH 27/42] add pbca26_NA new IP address --- iguana/m_notary_run | 1 + 1 file changed, 1 insertion(+) diff --git a/iguana/m_notary_run b/iguana/m_notary_run index c7bfbb1c7..5f7d284fd 100755 --- a/iguana/m_notary_run +++ b/iguana/m_notary_run @@ -53,6 +53,7 @@ curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"ad curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"139.99.122.47\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"145.239.232.32\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"209.58.169.118\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"54.39.53.170\"}" #tests/addnotarys_7776 coins/btc_7776 From 0c23c198fc724963fc2490f6b5b06cc94056b043 Mon Sep 17 00:00:00 2001 From: ns408 Date: Sun, 3 Mar 2019 00:59:45 +1100 Subject: [PATCH 28/42] add meshbits node --- iguana/m_notary_run | 1 + 1 file changed, 1 insertion(+) diff --git a/iguana/m_notary_run b/iguana/m_notary_run index 5f7d284fd..d817dd884 100755 --- a/iguana/m_notary_run +++ b/iguana/m_notary_run @@ -25,6 +25,7 @@ curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"ad curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"82.202.193.98\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"82.202.193.100\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"54.95.68.31\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"139.99.149.173\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"142.54.164.114\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"103.6.12.111\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"155.254.17.21\"}" From ce60d847ab173302f289d01cdee763fd9983cd80 Mon Sep 17 00:00:00 2001 From: titomane <37506961+titomane@users.noreply.github.com> Date: Mon, 4 Mar 2019 23:31:08 +0100 Subject: [PATCH 29/42] Update m_notary_run Change Notary Node IP 163.172.30.96 for 139.99.144.91 --- iguana/m_notary_run | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iguana/m_notary_run b/iguana/m_notary_run index d817dd884..4faec9eea 100755 --- a/iguana/m_notary_run +++ b/iguana/m_notary_run @@ -50,7 +50,7 @@ curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"ad curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"37.9.62.186\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"145.239.204.33\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"195.154.79.11\"}" -curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"163.172.30.96\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"139.99.144.91\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"139.99.122.47\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"145.239.232.32\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"209.58.169.118\"}" From 25c4cd66e88003534967c0c30f1207b66f857159 Mon Sep 17 00:00:00 2001 From: Mihail Fedorov Date: Fri, 8 Mar 2019 02:24:35 +0300 Subject: [PATCH 30/42] So long and thanks for fish --- iguana/dpowassets | 1 - iguana/m_notary_run | 2 -- iguana/m_splitfund | 3 --- 3 files changed, 6 deletions(-) diff --git a/iguana/dpowassets b/iguana/dpowassets index 7966399e3..235b5f354 100755 --- a/iguana/dpowassets +++ b/iguana/dpowassets @@ -21,7 +21,6 @@ curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dp curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"KV\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"CEAL\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"MESH\",\"pubkey\":\"$pubkey\"}" -curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"MNZ\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"AXO\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"ETOMIC\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"BTCH\",\"pubkey\":\"$pubkey\"}" diff --git a/iguana/m_notary_run b/iguana/m_notary_run index 4faec9eea..f6a9d8aa7 100755 --- a/iguana/m_notary_run +++ b/iguana/m_notary_run @@ -81,11 +81,9 @@ coins/wlc_7776 coins/kv_7776 coins/ceal_7776 coins/mesh_7776 -coins/mnz_7776 coins/axo_7776 coins/etomic_7776 coins/btch_7776 -#coins/vote2018_7776 coins/ninja_7776 coins/oot_7776 coins/bntn_7776 diff --git a/iguana/m_splitfund b/iguana/m_splitfund index 275abbbd2..1bfb8cff5 100755 --- a/iguana/m_splitfund +++ b/iguana/m_splitfund @@ -22,11 +22,9 @@ curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"KV\",\"agent\":\"iguana\" curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"CEAL\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"MESH\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"CHIPS\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" -curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"MNZ\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"AXO\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"BTCH\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"ETOMIC\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" -curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"VOTE2018\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"CHIPS\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"NINJA\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"OOT\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" @@ -52,4 +50,3 @@ curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"ZEX\",\"agent\":\"iguana\ curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"KSB\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"OUR\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"ILN\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" - From 7760227ff51add8951a64e1d51e415358c6feddb Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 8 Mar 2019 22:47:13 -1100 Subject: [PATCH 31/42] Fix warning --- cpp-ethereum | 2 +- iguana/exchanges/LP_rpc.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp-ethereum b/cpp-ethereum index e4e76865e..e804e95d9 160000 --- a/cpp-ethereum +++ b/cpp-ethereum @@ -1 +1 @@ -Subproject commit e4e76865e2726bbe9315ab4b26dbda3a7ae536f1 +Subproject commit e804e95d9a71e87fc5e3e69a2888448f23bc724f diff --git a/iguana/exchanges/LP_rpc.c b/iguana/exchanges/LP_rpc.c index ddc3bf7dd..f04640455 100644 --- a/iguana/exchanges/LP_rpc.c +++ b/iguana/exchanges/LP_rpc.c @@ -538,7 +538,7 @@ cJSON *LP_listtransactions(char *symbol,char *coinaddr,int32_t count,int32_t ski if (coinaddr == NULL) { coinaddr = coin->smartaddr; } - if ( coin->electrum == 0 && (coin->etomic == 0 || coin->etomic[0] == 0)) + if ( coin->electrum == 0 && coin->etomic[0] == 0 ) { if ( count == 0 ) count = 10; From 796793b461e50226da44b3f2eebac45f732dd893 Mon Sep 17 00:00:00 2001 From: titomane <37506961+titomane@users.noreply.github.com> Date: Tue, 12 Mar 2019 15:02:01 +0100 Subject: [PATCH 32/42] Update m_notary_run Change IP NN 139.99.121.200 to 139.99.125.27 --- iguana/m_notary_run | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iguana/m_notary_run b/iguana/m_notary_run index f6a9d8aa7..7e2a51a6a 100755 --- a/iguana/m_notary_run +++ b/iguana/m_notary_run @@ -37,7 +37,7 @@ curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"ad curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"66.70.180.46\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"88.99.251.101\"}" -curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"139.99.121.200\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"139.99.125.27\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"52.65.58.103\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"159.65.134.48\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"178.128.25.203\"}" From 9a82a0bb72e1fb077ac7ae7e48e9fb7ae3230000 Mon Sep 17 00:00:00 2001 From: nn-fullmoon <37964938+nn-fullmoon@users.noreply.github.com> Date: Fri, 15 Mar 2019 13:38:20 -0500 Subject: [PATCH 33/42] Update m_notary_run --- iguana/m_notary_run | 1 + 1 file changed, 1 insertion(+) diff --git a/iguana/m_notary_run b/iguana/m_notary_run index 7e2a51a6a..95280c4ab 100755 --- a/iguana/m_notary_run +++ b/iguana/m_notary_run @@ -55,6 +55,7 @@ curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"ad curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"145.239.232.32\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"209.58.169.118\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"54.39.53.170\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"103.254.155.182\"}" #tests/addnotarys_7776 coins/btc_7776 From 80efb44dacad3f20d4819711a30778f491b57b1b Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Sat, 16 Mar 2019 14:31:47 +0300 Subject: [PATCH 34/42] bitcoind_getinfo: free(retjson) -> free_json(retjson) thx @blackjok3rtt for finding. --- iguana/dpow/dpow_rpc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iguana/dpow/dpow_rpc.c b/iguana/dpow/dpow_rpc.c index 8b51ac2d2..c19264855 100755 --- a/iguana/dpow/dpow_rpc.c +++ b/iguana/dpow/dpow_rpc.c @@ -52,7 +52,7 @@ char *bitcoind_getinfo(char *symbol,char *serverport,char *userpass,char *getinf retstr = bitcoind_passthru(symbol,serverport,userpass,getinfostr,buf); printf("switch to getblockchaininfo -> (%s)\n",retstr); } - free(retjson); + free_json(retjson); } return(retstr); } From f30a4186876882ded89ab43a2a950c04ed540101 Mon Sep 17 00:00:00 2001 From: nn-fullmoon <37964938+nn-fullmoon@users.noreply.github.com> Date: Wed, 20 Mar 2019 07:24:22 -0500 Subject: [PATCH 35/42] Update m_notary_run --- iguana/m_notary_run | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iguana/m_notary_run b/iguana/m_notary_run index 95280c4ab..92521770e 100755 --- a/iguana/m_notary_run +++ b/iguana/m_notary_run @@ -55,7 +55,7 @@ curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"ad curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"145.239.232.32\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"209.58.169.118\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"54.39.53.170\"}" -curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"103.254.155.182\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"91.218.114.195\"}" #tests/addnotarys_7776 coins/btc_7776 From 609903af05fe3f63718c04a9cdefc16e534f3aa5 Mon Sep 17 00:00:00 2001 From: Mihail Fedorov Date: Thu, 21 Mar 2019 03:22:52 +0300 Subject: [PATCH 36/42] RICK & MORTY --- iguana/coins/morty_7776 | 1 + iguana/coins/rick_7776 | 1 + iguana/dpowassets | 2 ++ iguana/iguana_notary.c | 2 +- iguana/m_notary_run | 2 ++ iguana/m_splitfund | 2 ++ 6 files changed, 9 insertions(+), 1 deletion(-) create mode 100755 iguana/coins/morty_7776 create mode 100755 iguana/coins/rick_7776 diff --git a/iguana/coins/morty_7776 b/iguana/coins/morty_7776 new file mode 100755 index 000000000..a17cfee30 --- /dev/null +++ b/iguana/coins/morty_7776 @@ -0,0 +1 @@ +curl --url "http://127.0.0.1:7776" --data "{\"conf\":\"MORTY.conf\",\"path\":\"${HOME#"/"}/.komodo/MORTY\",\"unitval\":\"20\",\"zcash\":1,\"RELAY\":-1,\"VALIDATE\":0,\"prefetchlag\":-1,\"poll\":100,\"active\":1,\"sapling\":1,\"agent\":\"iguana\",\"method\":\"addcoin\",\"startpend\":4,\"endpend\":4,\"services\":129,\"maxpeers\":8,\"newcoin\":\"MORTY\",\"name\":\"MORTY\",\"hasheaders\":1,\"useaddmultisig\":0,\"netmagic\":\"1fc78599\",\"p2p\":63811,\"rpc\":63812,\"pubval\":60,\"p2shval\":85,\"wifval\":188,\"txfee_satoshis\":\"10000\",\"isPoS\":0,\"minoutput\":10000,\"minconfirms\":2,\"genesishash\":\"027e3758c3a65b12aa1046462b486d0a63bfa1beae327897f56c5cfb7daaae71\",\"protover\":170002,\"genesisblock\":\"0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a000000000000000000000000000000000000000000000000000000000000000029ab5f490f0f0f200b00000000000000000000000000000000000000000000000000000000000000fd4005000d5ba7cda5d473947263bf194285317179d2b0d307119c2e7cc4bd8ac456f0774bd52b0cd9249be9d40718b6397a4c7bbd8f2b3272fed2823cd2af4bd1632200ba4bf796727d6347b225f670f292343274cc35099466f5fb5f0cd1c105121b28213d15db2ed7bdba490b4cedc69742a57b7c25af24485e523aadbb77a0144fc76f79ef73bd8530d42b9f3b9bed1c135ad1fe152923fafe98f95f76f1615e64c4abb1137f4c31b218ba2782bc15534788dda2cc08a0ee2987c8b27ff41bd4e31cd5fb5643dfe862c9a02ca9f90c8c51a6671d681d04ad47e4b53b1518d4befafefe8cadfb912f3d03051b1efbf1dfe37b56e93a741d8dfd80d576ca250bee55fab1311fc7b3255977558cdda6f7d6f875306e43a14413facdaed2f46093e0ef1e8f8a963e1632dcbeebd8e49fd16b57d49b08f9762de89157c65233f60c8e38a1f503a48c555f8ec45dedecd574a37601323c27be597b956343107f8bd80f3a925afaf30811df83c402116bb9c1e5231c70fff899a7c82f73c902ba54da53cc459b7bf1113db65cc8f6914d3618560ea69abd13658fa7b6af92d374d6eca9529f8bd565166e4fcbf2a8dfb3c9b69539d4d2ee2e9321b85b331925df195915f2757637c2805e1d4131e1ad9ef9bc1bb1c732d8dba4738716d351ab30c996c8657bab39567ee3b29c6d054b711495c0d52e1cd5d8e55b4f0f0325b97369280755b46a02afd54be4ddd9f77c22272b8bbb17ff5118fedbae2564524e797bd28b5f74f7079d532ccc059807989f94d267f47e724b3f1ecfe00ec9e6541c961080d8891251b84b4480bc292f6a180bea089fef5bbda56e1e41390d7c0e85ba0ef530f7177413481a226465a36ef6afe1e2bca69d2078712b3912bba1a99b1fbff0d355d6ffe726d2bb6fbc103c4ac5756e5bee6e47e17424ebcbf1b63d8cb90ce2e40198b4f4198689daea254307e52a25562f4c1455340f0ffeb10f9d8e914775e37d0edca019fb1b9c6ef81255ed86bc51c5391e0591480f66e2d88c5f4fd7277697968656a9b113ab97f874fdd5f2465e5559533e01ba13ef4a8f7a21d02c30c8ded68e8c54603ab9c8084ef6d9eb4e92c75b078539e2ae786ebab6dab73a09e0aa9ac575bcefb29e930ae656e58bcb513f7e3c17e079dce4f05b5dbc18c2a872b22509740ebe6a3903e00ad1abc55076441862643f93606e3dc35e8d9f2caef3ee6be14d513b2e062b21d0061de3bd56881713a1a5c17f5ace05e1ec09da53f99442df175a49bd154aa96e4949decd52fed79ccf7ccbce32941419c314e374e4a396ac553e17b5340336a1a25c22f9e42a243ba5404450b650acfc826a6e432971ace776e15719515e1634ceb9a4a35061b668c74998d3dfb5827f6238ec015377e6f9c94f38108768cf6e5c8b132e0303fb5a200368f845ad9d46343035a6ff94031df8d8309415bb3f6cd5ede9c135fdabcc030599858d803c0f85be7661c88984d88faa3d26fb0e9aac0056a53f1b5d0baed713c853c4a2726869a0a124a8a5bbc0fc0ef80c8ae4cb53636aa02503b86a1eb9836fcc259823e2692d921d88e1ffc1e6cb2bde43939ceb3f32a611686f539f8f7c9f0bf00381f743607d40960f06d347d1cd8ac8a51969c25e37150efdf7aa4c2037a2fd0516fb444525ab157a0ed0a7412b2fa69b217fe397263153782c0f64351fbdf2678fa0dc8569912dcd8e3ccad38f34f23bbbce14c6a26ac24911b308b82c7e43062d180baeac4ba7153858365c72c63dcf5f6a5b08070b730adb017aeae925b7d0439979e2679f45ed2f25a7edcfd2fb77a8794630285ccb0a071f5cce410b46dbf9750b0354aae8b65574501cc69efb5b6a43444074fee116641bb29da56c2b4a7f456991fc92b2\",\"debug\":0,\"seedipaddr\":\"78.47.196.146\"}" diff --git a/iguana/coins/rick_7776 b/iguana/coins/rick_7776 new file mode 100755 index 000000000..65cc515ff --- /dev/null +++ b/iguana/coins/rick_7776 @@ -0,0 +1 @@ +curl --url "http://127.0.0.1:7776" --data "{\"conf\":\"RICK.conf\",\"path\":\"${HOME#"/"}/.komodo/RICK\",\"unitval\":\"20\",\"zcash\":1,\"RELAY\":-1,\"VALIDATE\":0,\"prefetchlag\":-1,\"poll\":100,\"active\":1,\"sapling\":1,\"agent\":\"iguana\",\"method\":\"addcoin\",\"startpend\":4,\"endpend\":4,\"services\":129,\"maxpeers\":8,\"newcoin\":\"RICK\",\"name\":\"RICK\",\"hasheaders\":1,\"useaddmultisig\":0,\"netmagic\":\"e2c0da51\",\"p2p\":28222,\"rpc\":28223,\"pubval\":60,\"p2shval\":85,\"wifval\":188,\"txfee_satoshis\":\"10000\",\"isPoS\":0,\"minoutput\":10000,\"minconfirms\":2,\"genesishash\":\"027e3758c3a65b12aa1046462b486d0a63bfa1beae327897f56c5cfb7daaae71\",\"protover\":170002,\"genesisblock\":\"0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a000000000000000000000000000000000000000000000000000000000000000029ab5f490f0f0f200b00000000000000000000000000000000000000000000000000000000000000fd4005000d5ba7cda5d473947263bf194285317179d2b0d307119c2e7cc4bd8ac456f0774bd52b0cd9249be9d40718b6397a4c7bbd8f2b3272fed2823cd2af4bd1632200ba4bf796727d6347b225f670f292343274cc35099466f5fb5f0cd1c105121b28213d15db2ed7bdba490b4cedc69742a57b7c25af24485e523aadbb77a0144fc76f79ef73bd8530d42b9f3b9bed1c135ad1fe152923fafe98f95f76f1615e64c4abb1137f4c31b218ba2782bc15534788dda2cc08a0ee2987c8b27ff41bd4e31cd5fb5643dfe862c9a02ca9f90c8c51a6671d681d04ad47e4b53b1518d4befafefe8cadfb912f3d03051b1efbf1dfe37b56e93a741d8dfd80d576ca250bee55fab1311fc7b3255977558cdda6f7d6f875306e43a14413facdaed2f46093e0ef1e8f8a963e1632dcbeebd8e49fd16b57d49b08f9762de89157c65233f60c8e38a1f503a48c555f8ec45dedecd574a37601323c27be597b956343107f8bd80f3a925afaf30811df83c402116bb9c1e5231c70fff899a7c82f73c902ba54da53cc459b7bf1113db65cc8f6914d3618560ea69abd13658fa7b6af92d374d6eca9529f8bd565166e4fcbf2a8dfb3c9b69539d4d2ee2e9321b85b331925df195915f2757637c2805e1d4131e1ad9ef9bc1bb1c732d8dba4738716d351ab30c996c8657bab39567ee3b29c6d054b711495c0d52e1cd5d8e55b4f0f0325b97369280755b46a02afd54be4ddd9f77c22272b8bbb17ff5118fedbae2564524e797bd28b5f74f7079d532ccc059807989f94d267f47e724b3f1ecfe00ec9e6541c961080d8891251b84b4480bc292f6a180bea089fef5bbda56e1e41390d7c0e85ba0ef530f7177413481a226465a36ef6afe1e2bca69d2078712b3912bba1a99b1fbff0d355d6ffe726d2bb6fbc103c4ac5756e5bee6e47e17424ebcbf1b63d8cb90ce2e40198b4f4198689daea254307e52a25562f4c1455340f0ffeb10f9d8e914775e37d0edca019fb1b9c6ef81255ed86bc51c5391e0591480f66e2d88c5f4fd7277697968656a9b113ab97f874fdd5f2465e5559533e01ba13ef4a8f7a21d02c30c8ded68e8c54603ab9c8084ef6d9eb4e92c75b078539e2ae786ebab6dab73a09e0aa9ac575bcefb29e930ae656e58bcb513f7e3c17e079dce4f05b5dbc18c2a872b22509740ebe6a3903e00ad1abc55076441862643f93606e3dc35e8d9f2caef3ee6be14d513b2e062b21d0061de3bd56881713a1a5c17f5ace05e1ec09da53f99442df175a49bd154aa96e4949decd52fed79ccf7ccbce32941419c314e374e4a396ac553e17b5340336a1a25c22f9e42a243ba5404450b650acfc826a6e432971ace776e15719515e1634ceb9a4a35061b668c74998d3dfb5827f6238ec015377e6f9c94f38108768cf6e5c8b132e0303fb5a200368f845ad9d46343035a6ff94031df8d8309415bb3f6cd5ede9c135fdabcc030599858d803c0f85be7661c88984d88faa3d26fb0e9aac0056a53f1b5d0baed713c853c4a2726869a0a124a8a5bbc0fc0ef80c8ae4cb53636aa02503b86a1eb9836fcc259823e2692d921d88e1ffc1e6cb2bde43939ceb3f32a611686f539f8f7c9f0bf00381f743607d40960f06d347d1cd8ac8a51969c25e37150efdf7aa4c2037a2fd0516fb444525ab157a0ed0a7412b2fa69b217fe397263153782c0f64351fbdf2678fa0dc8569912dcd8e3ccad38f34f23bbbce14c6a26ac24911b308b82c7e43062d180baeac4ba7153858365c72c63dcf5f6a5b08070b730adb017aeae925b7d0439979e2679f45ed2f25a7edcfd2fb77a8794630285ccb0a071f5cce410b46dbf9750b0354aae8b65574501cc69efb5b6a43444074fee116641bb29da56c2b4a7f456991fc92b2\",\"debug\":0,\"seedipaddr\":\"78.47.196.146\"}" diff --git a/iguana/dpowassets b/iguana/dpowassets index 235b5f354..4bea5536c 100755 --- a/iguana/dpowassets +++ b/iguana/dpowassets @@ -51,3 +51,5 @@ curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dp curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"OUR\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"GIN\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"ILN\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"RICK\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"MORTY\",\"pubkey\":\"$pubkey\"}" diff --git a/iguana/iguana_notary.c b/iguana/iguana_notary.c index 58a76930d..b9f24e447 100755 --- a/iguana/iguana_notary.c +++ b/iguana/iguana_notary.c @@ -540,7 +540,7 @@ STRING_ARG(iguana,addnotary,ipaddr) } char NOTARY_CURRENCIES[][65] = { - "REVS", "SUPERNET", "DEX", "PANGEA", "JUMBLR", "BET", "CRYPTO", "HODL", "BOTS", "MGW", "COQUI", "WLC", "KV", "CEAL", "MESH", "MNZ", "CHIPS", "MSHARK", "AXO", "ETOMIC", "BTCH", "NINJA", "OOT", "CHAIN", "BNTN", "PRLPAY", "DSEC", "GLXT", "EQL", "ZILLA", "RFOX", "SEC", "CCL", "PIRATE", "MGNX", "PGT", "KMDICE", "DION", "ZEX", "KSB", "OUR", "ILN" + "REVS", "SUPERNET", "DEX", "PANGEA", "JUMBLR", "BET", "CRYPTO", "HODL", "BOTS", "MGW", "COQUI", "WLC", "KV", "CEAL", "MESH", "MNZ", "CHIPS", "MSHARK", "AXO", "ETOMIC", "BTCH", "NINJA", "OOT", "CHAIN", "BNTN", "PRLPAY", "DSEC", "GLXT", "EQL", "ZILLA", "RFOX", "SEC", "CCL", "PIRATE", "MGNX", "PGT", "KMDICE", "DION", "ZEX", "KSB", "OUR", "ILN", "RICK", "MORTY" }; // "LTC", "USD", "EUR", "JPY", "GBP", "AUD", "CAD", "CHF", "NZD", "CNY", "RUB", "MXN", "BRL", "INR", "HKD", "TRY", "ZAR", "PLN", "NOK", "SEK", "DKK", "CZK", "HUF", "ILS", "KRW", "MYR", "PHP", "RON", "SGD", "THB", "BGN", "IDR", "HRK", diff --git a/iguana/m_notary_run b/iguana/m_notary_run index 92521770e..b186a96b2 100755 --- a/iguana/m_notary_run +++ b/iguana/m_notary_run @@ -109,6 +109,8 @@ coins/ksb_7776 coins/our_7776 coins/gin_7776 coins/iln_7776 +coins/rick_7776 +coins/morty_7776 #curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"passthru\",\"method\":\"paxfiats\",\"timeout\":900000}" diff --git a/iguana/m_splitfund b/iguana/m_splitfund index 1bfb8cff5..17363b7a1 100755 --- a/iguana/m_splitfund +++ b/iguana/m_splitfund @@ -50,3 +50,5 @@ curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"ZEX\",\"agent\":\"iguana\ curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"KSB\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"OUR\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"ILN\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" +curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"RICK\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" +curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"MORTY\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" From a77e5e48b5f549823a50ff7908027c28286e468d Mon Sep 17 00:00:00 2001 From: titomane <37506961+titomane@users.noreply.github.com> Date: Wed, 27 Mar 2019 10:43:56 +0100 Subject: [PATCH 37/42] Change NN ip Change NN ip 139.99.122.47 to 145.239.149.162 --- iguana/m_notary_run | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iguana/m_notary_run b/iguana/m_notary_run index b186a96b2..4b2746967 100755 --- a/iguana/m_notary_run +++ b/iguana/m_notary_run @@ -51,7 +51,7 @@ curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"ad curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"145.239.204.33\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"195.154.79.11\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"139.99.144.91\"}" -curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"139.99.122.47\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"145.239.149.162\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"145.239.232.32\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"209.58.169.118\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"54.39.53.170\"}" From 62cc77a0d7f5f32b013af3613b3c665bb60809a3 Mon Sep 17 00:00:00 2001 From: SHossain Date: Sat, 6 Apr 2019 23:57:07 +0100 Subject: [PATCH 38/42] new ip for @dwy new ip for @dwy --- iguana/m_notary_run | 1 + 1 file changed, 1 insertion(+) diff --git a/iguana/m_notary_run b/iguana/m_notary_run index 4b2746967..5467877dd 100755 --- a/iguana/m_notary_run +++ b/iguana/m_notary_run @@ -56,6 +56,7 @@ curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"ad curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"209.58.169.118\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"54.39.53.170\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"91.218.114.195\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"addnotary\",\"ipaddr\":\"54.36.127.151\"}" #tests/addnotarys_7776 coins/btc_7776 From 44031d90d261308c3b479fea8337b22c79064dd8 Mon Sep 17 00:00:00 2001 From: Mihail Fedorov Date: Sun, 14 Apr 2019 19:16:56 +0300 Subject: [PATCH 39/42] rrrrr --- iguana/coins/vote2019_7776 | 1 + iguana/dpowassets | 1 + iguana/iguana_notary.c | 2 +- iguana/m_notary_run | 1 + iguana/m_splitfund | 1 + 5 files changed, 5 insertions(+), 1 deletion(-) create mode 100755 iguana/coins/vote2019_7776 diff --git a/iguana/coins/vote2019_7776 b/iguana/coins/vote2019_7776 new file mode 100755 index 000000000..e462754e0 --- /dev/null +++ b/iguana/coins/vote2019_7776 @@ -0,0 +1 @@ +curl --url "http://127.0.0.1:7776" --data "{\"conf\":\"VOTE2019.conf\",\"path\":\"${HOME#"/"}/.komodo/VOTE2019\",\"unitval\":\"20\",\"zcash\":1,\"RELAY\":-1,\"VALIDATE\":0,\"prefetchlag\":-1,\"poll\":100,\"active\":1,\"sapling\":1,\"agent\":\"iguana\",\"method\":\"addcoin\",\"startpend\":4,\"endpend\":4,\"services\":129,\"maxpeers\":8,\"newcoin\":\"VOTE2019\",\"name\":\"VOTE2019\",\"hasheaders\":1,\"useaddmultisig\":0,\"netmagic\":\"63f69eef\",\"p2p\":45887,\"rpc\":45888,\"pubval\":60,\"p2shval\":85,\"wifval\":188,\"txfee_satoshis\":\"10000\",\"isPoS\":0,\"minoutput\":10000,\"minconfirms\":2,\"genesishash\":\"027e3758c3a65b12aa1046462b486d0a63bfa1beae327897f56c5cfb7daaae71\",\"protover\":170002,\"genesisblock\":\"0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a000000000000000000000000000000000000000000000000000000000000000029ab5f490f0f0f200b00000000000000000000000000000000000000000000000000000000000000fd4005000d5ba7cda5d473947263bf194285317179d2b0d307119c2e7cc4bd8ac456f0774bd52b0cd9249be9d40718b6397a4c7bbd8f2b3272fed2823cd2af4bd1632200ba4bf796727d6347b225f670f292343274cc35099466f5fb5f0cd1c105121b28213d15db2ed7bdba490b4cedc69742a57b7c25af24485e523aadbb77a0144fc76f79ef73bd8530d42b9f3b9bed1c135ad1fe152923fafe98f95f76f1615e64c4abb1137f4c31b218ba2782bc15534788dda2cc08a0ee2987c8b27ff41bd4e31cd5fb5643dfe862c9a02ca9f90c8c51a6671d681d04ad47e4b53b1518d4befafefe8cadfb912f3d03051b1efbf1dfe37b56e93a741d8dfd80d576ca250bee55fab1311fc7b3255977558cdda6f7d6f875306e43a14413facdaed2f46093e0ef1e8f8a963e1632dcbeebd8e49fd16b57d49b08f9762de89157c65233f60c8e38a1f503a48c555f8ec45dedecd574a37601323c27be597b956343107f8bd80f3a925afaf30811df83c402116bb9c1e5231c70fff899a7c82f73c902ba54da53cc459b7bf1113db65cc8f6914d3618560ea69abd13658fa7b6af92d374d6eca9529f8bd565166e4fcbf2a8dfb3c9b69539d4d2ee2e9321b85b331925df195915f2757637c2805e1d4131e1ad9ef9bc1bb1c732d8dba4738716d351ab30c996c8657bab39567ee3b29c6d054b711495c0d52e1cd5d8e55b4f0f0325b97369280755b46a02afd54be4ddd9f77c22272b8bbb17ff5118fedbae2564524e797bd28b5f74f7079d532ccc059807989f94d267f47e724b3f1ecfe00ec9e6541c961080d8891251b84b4480bc292f6a180bea089fef5bbda56e1e41390d7c0e85ba0ef530f7177413481a226465a36ef6afe1e2bca69d2078712b3912bba1a99b1fbff0d355d6ffe726d2bb6fbc103c4ac5756e5bee6e47e17424ebcbf1b63d8cb90ce2e40198b4f4198689daea254307e52a25562f4c1455340f0ffeb10f9d8e914775e37d0edca019fb1b9c6ef81255ed86bc51c5391e0591480f66e2d88c5f4fd7277697968656a9b113ab97f874fdd5f2465e5559533e01ba13ef4a8f7a21d02c30c8ded68e8c54603ab9c8084ef6d9eb4e92c75b078539e2ae786ebab6dab73a09e0aa9ac575bcefb29e930ae656e58bcb513f7e3c17e079dce4f05b5dbc18c2a872b22509740ebe6a3903e00ad1abc55076441862643f93606e3dc35e8d9f2caef3ee6be14d513b2e062b21d0061de3bd56881713a1a5c17f5ace05e1ec09da53f99442df175a49bd154aa96e4949decd52fed79ccf7ccbce32941419c314e374e4a396ac553e17b5340336a1a25c22f9e42a243ba5404450b650acfc826a6e432971ace776e15719515e1634ceb9a4a35061b668c74998d3dfb5827f6238ec015377e6f9c94f38108768cf6e5c8b132e0303fb5a200368f845ad9d46343035a6ff94031df8d8309415bb3f6cd5ede9c135fdabcc030599858d803c0f85be7661c88984d88faa3d26fb0e9aac0056a53f1b5d0baed713c853c4a2726869a0a124a8a5bbc0fc0ef80c8ae4cb53636aa02503b86a1eb9836fcc259823e2692d921d88e1ffc1e6cb2bde43939ceb3f32a611686f539f8f7c9f0bf00381f743607d40960f06d347d1cd8ac8a51969c25e37150efdf7aa4c2037a2fd0516fb444525ab157a0ed0a7412b2fa69b217fe397263153782c0f64351fbdf2678fa0dc8569912dcd8e3ccad38f34f23bbbce14c6a26ac24911b308b82c7e43062d180baeac4ba7153858365c72c63dcf5f6a5b08070b730adb017aeae925b7d0439979e2679f45ed2f25a7edcfd2fb77a8794630285ccb0a071f5cce410b46dbf9750b0354aae8b65574501cc69efb5b6a43444074fee116641bb29da56c2b4a7f456991fc92b2\",\"debug\":0,\"seedipaddr\":\"78.47.196.146\"}" diff --git a/iguana/dpowassets b/iguana/dpowassets index 4bea5536c..05cd7220a 100755 --- a/iguana/dpowassets +++ b/iguana/dpowassets @@ -53,3 +53,4 @@ curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dp curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"ILN\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"RICK\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"MORTY\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"VOTE2019\",\"pubkey\":\"$pubkey\"}" diff --git a/iguana/iguana_notary.c b/iguana/iguana_notary.c index b9f24e447..efce18d9e 100755 --- a/iguana/iguana_notary.c +++ b/iguana/iguana_notary.c @@ -540,7 +540,7 @@ STRING_ARG(iguana,addnotary,ipaddr) } char NOTARY_CURRENCIES[][65] = { - "REVS", "SUPERNET", "DEX", "PANGEA", "JUMBLR", "BET", "CRYPTO", "HODL", "BOTS", "MGW", "COQUI", "WLC", "KV", "CEAL", "MESH", "MNZ", "CHIPS", "MSHARK", "AXO", "ETOMIC", "BTCH", "NINJA", "OOT", "CHAIN", "BNTN", "PRLPAY", "DSEC", "GLXT", "EQL", "ZILLA", "RFOX", "SEC", "CCL", "PIRATE", "MGNX", "PGT", "KMDICE", "DION", "ZEX", "KSB", "OUR", "ILN", "RICK", "MORTY" + "REVS", "SUPERNET", "DEX", "PANGEA", "JUMBLR", "BET", "CRYPTO", "HODL", "BOTS", "MGW", "COQUI", "WLC", "KV", "CEAL", "MESH", "MNZ", "CHIPS", "MSHARK", "AXO", "ETOMIC", "BTCH", "NINJA", "OOT", "CHAIN", "BNTN", "PRLPAY", "DSEC", "GLXT", "EQL", "ZILLA", "RFOX", "SEC", "CCL", "PIRATE", "MGNX", "PGT", "KMDICE", "DION", "ZEX", "KSB", "OUR", "ILN", "RICK", "MORTY", "VOTE2019" }; // "LTC", "USD", "EUR", "JPY", "GBP", "AUD", "CAD", "CHF", "NZD", "CNY", "RUB", "MXN", "BRL", "INR", "HKD", "TRY", "ZAR", "PLN", "NOK", "SEK", "DKK", "CZK", "HUF", "ILS", "KRW", "MYR", "PHP", "RON", "SGD", "THB", "BGN", "IDR", "HRK", diff --git a/iguana/m_notary_run b/iguana/m_notary_run index 5467877dd..580986b82 100755 --- a/iguana/m_notary_run +++ b/iguana/m_notary_run @@ -112,6 +112,7 @@ coins/gin_7776 coins/iln_7776 coins/rick_7776 coins/morty_7776 +coins/vote2019_7776 #curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"passthru\",\"method\":\"paxfiats\",\"timeout\":900000}" diff --git a/iguana/m_splitfund b/iguana/m_splitfund index 17363b7a1..47a93bd55 100755 --- a/iguana/m_splitfund +++ b/iguana/m_splitfund @@ -52,3 +52,4 @@ curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"OUR\",\"agent\":\"iguana\ curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"ILN\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"RICK\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"MORTY\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" +curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"VOTE2019\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" From 2f466ce313e2ce6693a26937b164fba23c9e221f Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Sun, 14 Apr 2019 23:42:43 +0300 Subject: [PATCH 40/42] + HUSH3 --- iguana/coins/hush3_7776 | 1 + iguana/dpowassets | 3 ++- iguana/iguana_notary.c | 2 +- iguana/m_notary_run | 3 ++- iguana/m_splitfund | 3 ++- 5 files changed, 8 insertions(+), 4 deletions(-) create mode 100755 iguana/coins/hush3_7776 diff --git a/iguana/coins/hush3_7776 b/iguana/coins/hush3_7776 new file mode 100755 index 000000000..f42ef12a3 --- /dev/null +++ b/iguana/coins/hush3_7776 @@ -0,0 +1 @@ +curl --url "http://127.0.0.1:7776" --data "{\"conf\":\"HUSH3.conf\",\"path\":\"${HOME#"/"}/.komodo/HUSH3\",\"unitval\":\"20\",\"zcash\":1,\"RELAY\":-1,\"VALIDATE\":0,\"prefetchlag\":-1,\"poll\":100,\"active\":1,\"agent\":\"iguana\",\"method\":\"addcoin\",\"startpend\":4,\"endpend\":4,\"services\":129,\"maxpeers\":8,\"newcoin\":\"HUSH3\",\"name\":\"HUSH3\",\"hasheaders\":1,\"useaddmultisig\":0,\"netmagic\":\"6ed394d3\",\"p2p\":18030,\"rpc\":21486,\"pubval\":60,\"p2shval\":85,\"wifval\":188,\"txfee_satoshis\":\"10000\",\"isPoS\":0,\"minoutput\":10000,\"minconfirms\":2,\"genesishash\":\"027e3758c3a65b12aa1046462b486d0a63bfa1beae327897f56c5cfb7daaae71\",\"protover\":170002,\"genesisblock\":\"0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a000000000000000000000000000000000000000000000000000000000000000029ab5f490f0f0f200b00000000000000000000000000000000000000000000000000000000000000fd4005000d5ba7cda5d473947263bf194285317179d2b0d307119c2e7cc4bd8ac456f0774bd52b0cd9249be9d40718b6397a4c7bbd8f2b3272fed2823cd2af4bd1632200ba4bf796727d6347b225f670f292343274cc35099466f5fb5f0cd1c105121b28213d15db2ed7bdba490b4cedc69742a57b7c25af24485e523aadbb77a0144fc76f79ef73bd8530d42b9f3b9bed1c135ad1fe152923fafe98f95f76f1615e64c4abb1137f4c31b218ba2782bc15534788dda2cc08a0ee2987c8b27ff41bd4e31cd5fb5643dfe862c9a02ca9f90c8c51a6671d681d04ad47e4b53b1518d4befafefe8cadfb912f3d03051b1efbf1dfe37b56e93a741d8dfd80d576ca250bee55fab1311fc7b3255977558cdda6f7d6f875306e43a14413facdaed2f46093e0ef1e8f8a963e1632dcbeebd8e49fd16b57d49b08f9762de89157c65233f60c8e38a1f503a48c555f8ec45dedecd574a37601323c27be597b956343107f8bd80f3a925afaf30811df83c402116bb9c1e5231c70fff899a7c82f73c902ba54da53cc459b7bf1113db65cc8f6914d3618560ea69abd13658fa7b6af92d374d6eca9529f8bd565166e4fcbf2a8dfb3c9b69539d4d2ee2e9321b85b331925df195915f2757637c2805e1d4131e1ad9ef9bc1bb1c732d8dba4738716d351ab30c996c8657bab39567ee3b29c6d054b711495c0d52e1cd5d8e55b4f0f0325b97369280755b46a02afd54be4ddd9f77c22272b8bbb17ff5118fedbae2564524e797bd28b5f74f7079d532ccc059807989f94d267f47e724b3f1ecfe00ec9e6541c961080d8891251b84b4480bc292f6a180bea089fef5bbda56e1e41390d7c0e85ba0ef530f7177413481a226465a36ef6afe1e2bca69d2078712b3912bba1a99b1fbff0d355d6ffe726d2bb6fbc103c4ac5756e5bee6e47e17424ebcbf1b63d8cb90ce2e40198b4f4198689daea254307e52a25562f4c1455340f0ffeb10f9d8e914775e37d0edca019fb1b9c6ef81255ed86bc51c5391e0591480f66e2d88c5f4fd7277697968656a9b113ab97f874fdd5f2465e5559533e01ba13ef4a8f7a21d02c30c8ded68e8c54603ab9c8084ef6d9eb4e92c75b078539e2ae786ebab6dab73a09e0aa9ac575bcefb29e930ae656e58bcb513f7e3c17e079dce4f05b5dbc18c2a872b22509740ebe6a3903e00ad1abc55076441862643f93606e3dc35e8d9f2caef3ee6be14d513b2e062b21d0061de3bd56881713a1a5c17f5ace05e1ec09da53f99442df175a49bd154aa96e4949decd52fed79ccf7ccbce32941419c314e374e4a396ac553e17b5340336a1a25c22f9e42a243ba5404450b650acfc826a6e432971ace776e15719515e1634ceb9a4a35061b668c74998d3dfb5827f6238ec015377e6f9c94f38108768cf6e5c8b132e0303fb5a200368f845ad9d46343035a6ff94031df8d8309415bb3f6cd5ede9c135fdabcc030599858d803c0f85be7661c88984d88faa3d26fb0e9aac0056a53f1b5d0baed713c853c4a2726869a0a124a8a5bbc0fc0ef80c8ae4cb53636aa02503b86a1eb9836fcc259823e2692d921d88e1ffc1e6cb2bde43939ceb3f32a611686f539f8f7c9f0bf00381f743607d40960f06d347d1cd8ac8a51969c25e37150efdf7aa4c2037a2fd0516fb444525ab157a0ed0a7412b2fa69b217fe397263153782c0f64351fbdf2678fa0dc8569912dcd8e3ccad38f34f23bbbce14c6a26ac24911b308b82c7e43062d180baeac4ba7153858365c72c63dcf5f6a5b08070b730adb017aeae925b7d0439979e2679f45ed2f25a7edcfd2fb77a8794630285ccb0a071f5cce410b46dbf9750b0354aae8b65574501cc69efb5b6a43444074fee116641bb29da56c2b4a7f456991fc92b2\",\"debug\":0,\"seedipaddr\":\"78.47.196.146\",\"sapling\":1}" \ No newline at end of file diff --git a/iguana/dpowassets b/iguana/dpowassets index 05cd7220a..1e5187c8d 100755 --- a/iguana/dpowassets +++ b/iguana/dpowassets @@ -39,7 +39,7 @@ curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dp curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"VRSC\",\"freq\":10,\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"SEC\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"CCL\",\"pubkey\":\"$pubkey\"}" -curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"HUSH\",\"pubkey\":\"$pubkey\"}" +#curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"HUSH\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"PIRATE\",\"pubkey\":\"$pubkey\"}" #curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"MGNX\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"EMC2\",\"freq\":5,\"pubkey\":\"$pubkey\"}" @@ -54,3 +54,4 @@ curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dp curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"RICK\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"MORTY\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"VOTE2019\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"HUSH3\",\"pubkey\":\"$pubkey\"}" diff --git a/iguana/iguana_notary.c b/iguana/iguana_notary.c index efce18d9e..ce8586aca 100755 --- a/iguana/iguana_notary.c +++ b/iguana/iguana_notary.c @@ -540,7 +540,7 @@ STRING_ARG(iguana,addnotary,ipaddr) } char NOTARY_CURRENCIES[][65] = { - "REVS", "SUPERNET", "DEX", "PANGEA", "JUMBLR", "BET", "CRYPTO", "HODL", "BOTS", "MGW", "COQUI", "WLC", "KV", "CEAL", "MESH", "MNZ", "CHIPS", "MSHARK", "AXO", "ETOMIC", "BTCH", "NINJA", "OOT", "CHAIN", "BNTN", "PRLPAY", "DSEC", "GLXT", "EQL", "ZILLA", "RFOX", "SEC", "CCL", "PIRATE", "MGNX", "PGT", "KMDICE", "DION", "ZEX", "KSB", "OUR", "ILN", "RICK", "MORTY", "VOTE2019" + "REVS", "SUPERNET", "DEX", "PANGEA", "JUMBLR", "BET", "CRYPTO", "HODL", "BOTS", "MGW", "COQUI", "WLC", "KV", "CEAL", "MESH", "MNZ", "CHIPS", "MSHARK", "AXO", "ETOMIC", "BTCH", "NINJA", "OOT", "CHAIN", "BNTN", "PRLPAY", "DSEC", "GLXT", "EQL", "ZILLA", "RFOX", "SEC", "CCL", "PIRATE", "MGNX", "PGT", "KMDICE", "DION", "ZEX", "KSB", "OUR", "ILN", "RICK", "MORTY", "VOTE2019", "HUSH3" }; // "LTC", "USD", "EUR", "JPY", "GBP", "AUD", "CAD", "CHF", "NZD", "CNY", "RUB", "MXN", "BRL", "INR", "HKD", "TRY", "ZAR", "PLN", "NOK", "SEK", "DKK", "CZK", "HUF", "ILS", "KRW", "MYR", "PHP", "RON", "SGD", "THB", "BGN", "IDR", "HRK", diff --git a/iguana/m_notary_run b/iguana/m_notary_run index 580986b82..322d4c31e 100755 --- a/iguana/m_notary_run +++ b/iguana/m_notary_run @@ -99,7 +99,7 @@ coins/vrsc_7776 coins/rfox_7776 coins/sec_7776 coins/ccl_7776 -coins/hush_7776 +#coins/hush_7776 coins/pirate_7776 #coins/mgnx_7776 coins/pgt_7776 @@ -113,6 +113,7 @@ coins/iln_7776 coins/rick_7776 coins/morty_7776 coins/vote2019_7776 +coins/hush3_7776 #curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"passthru\",\"method\":\"paxfiats\",\"timeout\":900000}" diff --git a/iguana/m_splitfund b/iguana/m_splitfund index 47a93bd55..60a5726e7 100755 --- a/iguana/m_splitfund +++ b/iguana/m_splitfund @@ -38,7 +38,7 @@ curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"ZILLA\",\"agent\":\"iguan curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"RFOX\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"SEC\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"CCL\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" -curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"HUSH\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" +#curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"HUSH\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"PIRATE\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"MGNX\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"PGT\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" @@ -53,3 +53,4 @@ curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"ILN\",\"agent\":\"iguana\ curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"RICK\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"MORTY\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"VOTE2019\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" +curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"HUSH3\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" From 4cc6c25942883bac52e2efeb83dba899448ce74e Mon Sep 17 00:00:00 2001 From: ca333 Date: Thu, 18 Apr 2019 23:35:12 +0200 Subject: [PATCH 41/42] [add] KOIN --- iguana/coins/koin_7776 | 1 + iguana/dpowassets | 1 + iguana/iguana_notary.c | 2 +- iguana/m_notary_run | 1 + iguana/m_splitfund | 1 + 5 files changed, 5 insertions(+), 1 deletion(-) create mode 100755 iguana/coins/koin_7776 diff --git a/iguana/coins/koin_7776 b/iguana/coins/koin_7776 new file mode 100755 index 000000000..2fa3705ef --- /dev/null +++ b/iguana/coins/koin_7776 @@ -0,0 +1 @@ +curl --url "http://127.0.0.1:7776" --data "{\"conf\":\"KOIN.conf\",\"path\":\"${HOME#"/"}/.komodo/KOIN\",\"unitval\":\"20\",\"zcash\":1,\"RELAY\":-1,\"VALIDATE\":0,\"prefetchlag\":-1,\"poll\":100,\"active\":1,\"sapling\":1,\"agent\":\"iguana\",\"method\":\"addcoin\",\"startpend\":4,\"endpend\":4,\"services\":129,\"maxpeers\":8,\"newcoin\":\"KOIN\",\"name\":\"KOIN\",\"hasheaders\":1,\"useaddmultisig\":0,\"netmagic\":\"764c56b6\",\"p2p\":10701,\"rpc\":10702,\"pubval\":60,\"p2shval\":85,\"wifval\":188,\"txfee_satoshis\":\"10000\",\"isPoS\":0,\"minoutput\":10000,\"minconfirms\":2,\"genesishash\":\"027e3758c3a65b12aa1046462b486d0a63bfa1beae327897f56c5cfb7daaae71\",\"protover\":170002,\"genesisblock\":\"0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a000000000000000000000000000000000000000000000000000000000000000029ab5f490f0f0f200b00000000000000000000000000000000000000000000000000000000000000fd4005000d5ba7cda5d473947263bf194285317179d2b0d307119c2e7cc4bd8ac456f0774bd52b0cd9249be9d40718b6397a4c7bbd8f2b3272fed2823cd2af4bd1632200ba4bf796727d6347b225f670f292343274cc35099466f5fb5f0cd1c105121b28213d15db2ed7bdba490b4cedc69742a57b7c25af24485e523aadbb77a0144fc76f79ef73bd8530d42b9f3b9bed1c135ad1fe152923fafe98f95f76f1615e64c4abb1137f4c31b218ba2782bc15534788dda2cc08a0ee2987c8b27ff41bd4e31cd5fb5643dfe862c9a02ca9f90c8c51a6671d681d04ad47e4b53b1518d4befafefe8cadfb912f3d03051b1efbf1dfe37b56e93a741d8dfd80d576ca250bee55fab1311fc7b3255977558cdda6f7d6f875306e43a14413facdaed2f46093e0ef1e8f8a963e1632dcbeebd8e49fd16b57d49b08f9762de89157c65233f60c8e38a1f503a48c555f8ec45dedecd574a37601323c27be597b956343107f8bd80f3a925afaf30811df83c402116bb9c1e5231c70fff899a7c82f73c902ba54da53cc459b7bf1113db65cc8f6914d3618560ea69abd13658fa7b6af92d374d6eca9529f8bd565166e4fcbf2a8dfb3c9b69539d4d2ee2e9321b85b331925df195915f2757637c2805e1d4131e1ad9ef9bc1bb1c732d8dba4738716d351ab30c996c8657bab39567ee3b29c6d054b711495c0d52e1cd5d8e55b4f0f0325b97369280755b46a02afd54be4ddd9f77c22272b8bbb17ff5118fedbae2564524e797bd28b5f74f7079d532ccc059807989f94d267f47e724b3f1ecfe00ec9e6541c961080d8891251b84b4480bc292f6a180bea089fef5bbda56e1e41390d7c0e85ba0ef530f7177413481a226465a36ef6afe1e2bca69d2078712b3912bba1a99b1fbff0d355d6ffe726d2bb6fbc103c4ac5756e5bee6e47e17424ebcbf1b63d8cb90ce2e40198b4f4198689daea254307e52a25562f4c1455340f0ffeb10f9d8e914775e37d0edca019fb1b9c6ef81255ed86bc51c5391e0591480f66e2d88c5f4fd7277697968656a9b113ab97f874fdd5f2465e5559533e01ba13ef4a8f7a21d02c30c8ded68e8c54603ab9c8084ef6d9eb4e92c75b078539e2ae786ebab6dab73a09e0aa9ac575bcefb29e930ae656e58bcb513f7e3c17e079dce4f05b5dbc18c2a872b22509740ebe6a3903e00ad1abc55076441862643f93606e3dc35e8d9f2caef3ee6be14d513b2e062b21d0061de3bd56881713a1a5c17f5ace05e1ec09da53f99442df175a49bd154aa96e4949decd52fed79ccf7ccbce32941419c314e374e4a396ac553e17b5340336a1a25c22f9e42a243ba5404450b650acfc826a6e432971ace776e15719515e1634ceb9a4a35061b668c74998d3dfb5827f6238ec015377e6f9c94f38108768cf6e5c8b132e0303fb5a200368f845ad9d46343035a6ff94031df8d8309415bb3f6cd5ede9c135fdabcc030599858d803c0f85be7661c88984d88faa3d26fb0e9aac0056a53f1b5d0baed713c853c4a2726869a0a124a8a5bbc0fc0ef80c8ae4cb53636aa02503b86a1eb9836fcc259823e2692d921d88e1ffc1e6cb2bde43939ceb3f32a611686f539f8f7c9f0bf00381f743607d40960f06d347d1cd8ac8a51969c25e37150efdf7aa4c2037a2fd0516fb444525ab157a0ed0a7412b2fa69b217fe397263153782c0f64351fbdf2678fa0dc8569912dcd8e3ccad38f34f23bbbce14c6a26ac24911b308b82c7e43062d180baeac4ba7153858365c72c63dcf5f6a5b08070b730adb017aeae925b7d0439979e2679f45ed2f25a7edcfd2fb77a8794630285ccb0a071f5cce410b46dbf9750b0354aae8b65574501cc69efb5b6a43444074fee116641bb29da56c2b4a7f456991fc92b2\",\"debug\":0,\"seedipaddr\":\"3.0.32.10\"}" diff --git a/iguana/dpowassets b/iguana/dpowassets index 1e5187c8d..154a9cef5 100755 --- a/iguana/dpowassets +++ b/iguana/dpowassets @@ -55,3 +55,4 @@ curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dp curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"MORTY\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"VOTE2019\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"HUSH3\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"KOIN\",\"pubkey\":\"$pubkey\"}" diff --git a/iguana/iguana_notary.c b/iguana/iguana_notary.c index ce8586aca..db111b0ea 100755 --- a/iguana/iguana_notary.c +++ b/iguana/iguana_notary.c @@ -540,7 +540,7 @@ STRING_ARG(iguana,addnotary,ipaddr) } char NOTARY_CURRENCIES[][65] = { - "REVS", "SUPERNET", "DEX", "PANGEA", "JUMBLR", "BET", "CRYPTO", "HODL", "BOTS", "MGW", "COQUI", "WLC", "KV", "CEAL", "MESH", "MNZ", "CHIPS", "MSHARK", "AXO", "ETOMIC", "BTCH", "NINJA", "OOT", "CHAIN", "BNTN", "PRLPAY", "DSEC", "GLXT", "EQL", "ZILLA", "RFOX", "SEC", "CCL", "PIRATE", "MGNX", "PGT", "KMDICE", "DION", "ZEX", "KSB", "OUR", "ILN", "RICK", "MORTY", "VOTE2019", "HUSH3" + "REVS", "SUPERNET", "DEX", "PANGEA", "JUMBLR", "BET", "CRYPTO", "HODL", "BOTS", "MGW", "COQUI", "WLC", "KV", "CEAL", "MESH", "MNZ", "CHIPS", "MSHARK", "AXO", "ETOMIC", "BTCH", "NINJA", "OOT", "CHAIN", "BNTN", "PRLPAY", "DSEC", "GLXT", "EQL", "ZILLA", "RFOX", "SEC", "CCL", "PIRATE", "MGNX", "PGT", "KMDICE", "DION", "ZEX", "KSB", "OUR", "ILN", "RICK", "MORTY", "VOTE2019", "HUSH3", "KOIN" }; // "LTC", "USD", "EUR", "JPY", "GBP", "AUD", "CAD", "CHF", "NZD", "CNY", "RUB", "MXN", "BRL", "INR", "HKD", "TRY", "ZAR", "PLN", "NOK", "SEK", "DKK", "CZK", "HUF", "ILS", "KRW", "MYR", "PHP", "RON", "SGD", "THB", "BGN", "IDR", "HRK", diff --git a/iguana/m_notary_run b/iguana/m_notary_run index 322d4c31e..653aa7556 100755 --- a/iguana/m_notary_run +++ b/iguana/m_notary_run @@ -114,6 +114,7 @@ coins/rick_7776 coins/morty_7776 coins/vote2019_7776 coins/hush3_7776 +coins/koin_7776 #curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"passthru\",\"method\":\"paxfiats\",\"timeout\":900000}" diff --git a/iguana/m_splitfund b/iguana/m_splitfund index 60a5726e7..52dffb314 100755 --- a/iguana/m_splitfund +++ b/iguana/m_splitfund @@ -54,3 +54,4 @@ curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"RICK\",\"agent\":\"iguana curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"MORTY\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"VOTE2019\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"HUSH3\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" +curl --url "http://127.0.0.1:7776" --data "{\"coin\":\"KOIN\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"10000\",\"sendflag\":1,\"duplicates\":50}" From 53a8c7942e885ea14dcff9880a9a568b9e1d037f Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 18 Apr 2019 21:19:46 -1100 Subject: [PATCH 42/42] Update funds --- iguana/exchanges/prices/autoprice | 2 +- iguana/exchanges/supernet | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/iguana/exchanges/prices/autoprice b/iguana/exchanges/prices/autoprice index 9511e7bad..9188cc127 100755 --- a/iguana/exchanges/prices/autoprice +++ b/iguana/exchanges/prices/autoprice @@ -39,7 +39,7 @@ sharkholdings="{\"coin\":\"iota\",\"balance\":0}, {\"coin\":\"bitcoin-cash\",\"b curl --url "http://127.0.0.1:7783" --data "{\"base\":\"MSHARK\",\"rel\":\"KMD\",\"fundvalue_bid\":\"NAV_KMD\",\"fundvalue_ask\":\"assetNAV_KMD\",\"userpass\":\"$userpass\",\"method\":\"autoprice\",\"margin\":$margin,\"address\":\"RTu3JZZKLJTcfNwBa19dWRagEfQq49STqC\",\"holdings\":[$sharkholdings],\"divisor\":1400000}" -curl --url "http://127.0.0.1:7783" --data "{\"margin\":$margin,\"base\":\"SUPERNET\",\"rel\":\"KMD\",\"fundvalue_bid\":\"NAV_KMD\",\"fundvalue_ask\":\"NAV_KMD\",\"userpass\":\"$userpass\",\"method\":\"autoprice\",\"address\":\"RRyyejME7LRTuvdziWsXkAbSW1fdiohGwK\",\"holdings\":[{\"coin\":\"iota\",\"balance\":10000000}, {\"coin\":\"stratis\",\"balance\":1300000}, {\"coin\":\"zcash\",\"balance\":0.10000}, {\"coin\":\"syscoin\",\"balance\":0.20000000}, {\"coin\":\"waves\",\"balance\":400000}, {\"coin\":\"bitcoin\",\"balance\":486}, {\"coin\":\"bitcoin-cash\",\"balance\":1500}, {\"coin\":\"heat-ledger\",\"balance\":2323851 }, {\"coin\":\"decred\",\"balance\":0.20000}, {\"coin\":\"vericoin\",\"balance\":2199368 }, {\"coin\":\"byteball\",\"balance\":4238}, {\"coin\":\"iocoin\",\"balance\":0.150000}, {\"coin\":\"quantum-resistant-ledger\",\"balance\":0.375000}, {\"coin\":\"chips\",\"balance\":2577006 }, {\"coin\":\"hush\",\"balance\":100000 }, {\"coin\":\"mobilego\",\"balance\":100000 }, {\"coin\":\"utrum\",\"balance\":2100000}, {\"coin\":\"verus\",\"balance\":2650000}],\"divisor\":777777}" +curl --url "http://127.0.0.1:7783" --data "{\"margin\":$margin,\"base\":\"SUPERNET\",\"rel\":\"KMD\",\"fundvalue_bid\":\"NAV_KMD\",\"fundvalue_ask\":\"NAV_KMD\",\"userpass\":\"$userpass\",\"method\":\"autoprice\",\"address\":\"RRyyejME7LRTuvdziWsXkAbSW1fdiohGwK\",\"holdings\":[{\"coin\":\"iota\",\"balance\":10000000}, {\"coin\":\"stratis\",\"balance\":1228212}, {\"coin\":\"zcash\",\"balance\":0.10000}, {\"coin\":\"syscoin\",\"balance\":20000000}, {\"coin\":\"waves\",\"balance\":368200}, {\"coin\":\"bitcoin\",\"balance\":450}, {\"coin\":\"bitcoin-cash\",\"balance\":1500}, {\"coin\":\"heat-ledger\",\"balance\":2323851 }, {\"coin\":\"vericoin\",\"balance\":2199368 }, {\"coin\":\"byteball\",\"balance\":4238}, {\"coin\":\"chips\",\"balance\":2577006 }, {\"coin\":\"hush\",\"balance\":100000 }, {\"coin\":\"mobilego\",\"balance\":100000 }, {\"coin\":\"utrum\",\"balance\":2100000}, {\"coin\":\"verus\",\"balance\":2650000}],\"divisor\":777777}" curl --url "http://127.0.0.1:7783" --data "{\"margin\":$margin,\"base\":\"HODL\",\"rel\":\"KMD\",\"fundvalue_bid\":\"assetNAV_KMD\",\"fundvalue_ask\":\"assetNAV_KMD\",\"userpass\":\"$userpass\",\"method\":\"autoprice\",\"address\":\"RNcUaMUEFLxVwtTo7rgruhwYanGk1jTkeU\",\"holdings\":[{\"coin\":\"siacoin\",\"balance\":185000000,\"comment\":\"using siafunds equal to million siacoin\"}],\"divisor\":10000000}" diff --git a/iguana/exchanges/supernet b/iguana/exchanges/supernet index 7209cce88..a96d04180 100755 --- a/iguana/exchanges/supernet +++ b/iguana/exchanges/supernet @@ -15,5 +15,5 @@ echo supernet curl --url "http://127.0.0.1:7783" --data "{\"userpass\":\"$userpass\",\"method\":\"balances\",\"address\":\"RRyyejME7LRTuvdziWsXkAbSW1fdiohGwK\"}" echo supernet -curl --url "http://127.0.0.1:7783" --data "{\"userpass\":\"$userpass\",\"method\":\"fundvalue\",\"address\":\"RRyyejME7LRTuvdziWsXkAbSW1fdiohGwK\",\"holdings\":[{\"coin\":\"iota\",\"balance\":10000000}, {\"coin\":\"stratis\",\"balance\":1300000}, {\"coin\":\"zcash\",\"balance\":0.10000}, {\"coin\":\"syscoin\",\"balance\":0.20000000}, {\"coin\":\"waves\",\"balance\":400000}, {\"coin\":\"bitcoin\",\"balance\":486}, {\"coin\":\"bitcoin-cash\",\"balance\":1500}, {\"coin\":\"heat-ledger\",\"balance\":2323851 }, {\"coin\":\"decred\",\"balance\":0.20000}, {\"coin\":\"vericoin\",\"balance\":2199368 }, {\"coin\":\"byteball\",\"balance\":4238}, {\"coin\":\"iocoin\",\"balance\":0.150000}, {\"coin\":\"quantum-resistant-ledger\",\"balance\":0.375000}, {\"coin\":\"hush\",\"balance\":100000 }, {\"coin\":\"mobilego\",\"balance\":100000 }, {\"coin\":\"utrum\",\"balance\":2350000}, {\"coin\":\"verus\",\"balance\":1650000}],\"divisor\":777777}" +curl --url "http://127.0.0.1:7783" --data "{\"userpass\":\"$userpass\",\"method\":\"fundvalue\",\"address\":\"RRyyejME7LRTuvdziWsXkAbSW1fdiohGwK\",\"holdings\":[{\"coin\":\"iota\",\"balance\":10000000}, {\"coin\":\"stratis\",\"balance\":1227800}, {\"coin\":\"zcash\",\"balance\":0.10000}, {\"coin\":\"syscoin\",\"balance\":20000000}, {\"coin\":\"waves\",\"balance\":368200}, {\"coin\":\"bitcoin\",\"balance\":450}, {\"coin\":\"bitcoin-cash\",\"balance\":1500}, {\"coin\":\"heat-ledger\",\"balance\":2323851 }, {\"coin\":\"vericoin\",\"balance\":2199368 }, {\"coin\":\"byteball\",\"balance\":4238}, {\"coin\":\"hush\",\"balance\":100000 }, {\"coin\":\"mobilego\",\"balance\":100000 }, {\"coin\":\"utrum\",\"balance\":2350000}, {\"coin\":\"verus\",\"balance\":1650000}],\"divisor\":777777}"