iotaledger / entangled

enTangle'd is an amalgamation of all things Tangle
Apache License 2.0
113 stars 66 forks source link

mam_parse crashing on esp32 at sig digest #1451

Open thingswizard opened 4 years ago

thingswizard commented 4 years ago

I'm reproducing the fetch function of the mam.js on an esp32 using the mam v1 features.

After getting the transaction object and passing it to the mam_parse, the last one crashes when getting to theiss_curl_sig_digest(hash, hash, 0, payload + offset, *security * ISS_KEY_LENGTH, enc_curl) function.

Here's the part of the code that may be related to the issue.

size_t size_trytes = 2187 * count;
size_t transaction_bundle_trits_len = size_trytes * 3;
flex_trit_t *transaction_bundle_trits = (flex_trit_t *)malloc(sizeof(flex_trit_t) * FLEX_TRIT_SIZE_8019 * count);

if (iota_client_get_transaction_objects(&g_cclient, (get_trytes_req_t *)transactions_res, out_tx_objs) == RC_OK) {
      TX_OBJS_FOREACH(out_tx_objs, tx_obj) {
        memcpy(transaction_bundle_trits + (tx_obj->essence.current_index) * trits_len,
               tx_obj->data.signature_or_message, trits_len);
      }
      char *const side_key = "";
      size_t side_key_len = strlen(side_key) * 3;
      flex_len = NUM_FLEX_TRITS_FOR_TRITS(side_key_len);
      flex_trit_t side_key_trits[flex_len];
      flex_trits_from_trytes(side_key_trits, side_key_len, (const tryte_t *)side_key, side_key_len, side_key_len);

      size_t index = -1;
      size_t security = 2;
      size_t message_trits_length = -1;
      trit_t *const message_trits = malloc(trits_len);
      trit_t next_root_trits[HASH_LENGTH_TRIT];
      Curl enc_curl;
      enc_curl.type = CURL_P_27;
      curl_init(&enc_curl);
      mam_parse(transaction_bundle_trits, transaction_bundle_trits_len, message_trits, &message_trits_length,
                side_key_trits, strlen(side_key) * 3, root_trits, &index, next_root_trits, &security, &enc_curl);

Don't hesitate to ask for more details that may help or which I forgot