Files
monero_c/patches/monero
Czarek Nakamoto 22f6fb4b63 fix regarding the issues raised during security audit
In the polyseed-examples repository, the `utf8_nfc` and `utf8_nfkd` functions will never return a value exceeding `POLYSEED_STR_SIZE - 1`
In your code, the utf8_norm function has variable return behavior that seems odd
In case of a normalization error, the underlying normalizer will return a negative value, at which point your function just returns POLYSEED_STR_SIZE (this is unclear)
In case the buffer isn't large enough, the normalizer will return the required buffer size but have undefined internal behavior, at which point your function returns a value exceeding POLYSEED_STR_SIZE
Otherwise, it uses the normalizer's return value (indicating the written size) to continue with re-encoding

tobtoht: Czarek Nakamoto: polyseed asserts that the return value < POLYSEED_STR_SIZE, so if normalization fails the program crashes..
> I think my idea was to have have polyseed check the return value and return an error code instead of asserting, which would in turn throw the "Unicode normalization failed" error
> I'll upstream that. In the meantime you can replace the injected function with
```cpp
    inline size_t utf8_norm(const char* str, polyseed_str norm, utf8proc_option_t options) {
      utf8proc_int32_t buffer[POLYSEED_STR_SIZE];
      utf8proc_ssize_t result;

      result = utf8proc_decompose(reinterpret_cast<const uint8_t*>(str), 0, buffer, POLYSEED_STR_SIZE, options);
      if (result < 0 || result > (POLYSEED_STR_SIZE - 1)) {
        throw std::runtime_error("Unicode normalization failed");
      }

      result = utf8proc_reencode(buffer, result, options);
      if (result < 0 || result > POLYSEED_STR_SIZE) {
        throw std::runtime_error("Unicode normalization failed");
      }

      strcpy(norm, reinterpret_cast<const char*>(buffer));
      sodium_memzero(buffer, sizeof(buffer));
      return result;
    }
```
2024-04-19 16:37:42 +02:00
..
2024-04-12 11:50:32 +02:00
2024-04-12 11:50:32 +02:00
2024-04-12 11:13:43 +02:00
2024-04-12 11:13:43 +02:00
2024-04-12 11:13:43 +02:00

0001 to 0004 were created most likely by feather dev, anonero monero repository got nuked and now says that I made the changes, so I am unable to credit the original authors, http://git.anonero5wmhraxqsvzq2ncgptq6gq45qoto6fnkfwughfl4gbt44swad.onion/ANONERO/monero/commits/branch/v0.18.3.3-anonero

0001-polyseed

Polyseed support for wallets [planned in long distant future as a part of walet3 - not getting upstream, no PR available].

Note, only English support is available due to issues with normalization libraries.

tobtoht: You may also want to reconsider supporting languages other than English: https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki#wordlists (this is about BIP39, but because unicode normalization is such a PITA it will become true for Polyseed wallets as well)

Considering the fact that even Feather Wallet doesn't support non-english seeds, it makes sense to go that way.

At least until (if ever) feather wallet supports multi-language polyseed seeds I don't think it is a good idea to support them, especially because of possible issues when targetting different platforms.

0002-background-sync

Sourced from: https://github.com/monero-project/monero/pull/8617, no changes except for merge conflicts.

0003-airgap

Cool functions for offline transactions

0004-coin-control

Coin control patch, I was able to trace it's orgins back to wownero/monerujo.

0005-fix-build

Fix cross compilation for linux

0006-macos-build-fix

Fixes cross compilation for MacOS targets

0007-fix-make-debug-test-target

I had some debugging to do, I don't remember actually why I decided to run the tests, but since it is a fix I've decided to leave it in here just in case.

0008-fix-missing-___clear_cache-when-targetting-iOS

https://github.com/tevador/RandomX/pull/294