Commit Graph

245 Commits

Author SHA1 Message Date
jay candel
65df2e4d1f NFC: SmartRider Parser (#203)
* adding smartrider_parser

* adding SmartRider parser

new parser for SmartRider cards, a public transport smart card system used in Western Australia.
extracts and interprets key information from the card, including:
-Current balance
-Card serial number
-Concession type
-Purchase cost
-Details of the last two trips (including tag on/off status, cost, route, transaction number, and journey number)

* optimising

- removed all logging to simplify output.
- used early returns for clearer error handling.
- optimized setups outside loops to improve memory use.
- simplified flows by removing unnecessary loops.
- placed variables closer to their use for better readability.
- cached data blocks to streamline data handling.
- added a helper function for parsing trips, reducing redundancy.
- corrected loop counter types to avoid compile-time errors.

* cleaning displayed data

- removed transaction (txn) and journey (jrn) numbers to declutter the trip details.
- shortened "previous trip" to "prev trip" to optimize screen space usage.

* added and refined displayed data

added auto load field "threshold amount / reload amount"
changed serial to display first two digits as SR0 for consistency with physical card.

* Format

* Improved Verification Process

- Added definitions for STANDARD_KEY_2 and STANDARD_KEY_3
- Enhanced smartrider_verify function to check for all three specific keys:
  - STANDARD_KEY_1 in Sector 0 as Key A
  - STANDARD_KEY_2 in Sector 6 as Key A
  - STANDARD_KEY_3 in Sector 6 as Key B
- Implemented read operations to verify actual key values stored on the card
- Added comparisons between read key data and expected key values
- Improved debug logging for each step of the verification process

* Integrated Verification into Parse Function

- Added key verification for sectors 0 and 6
- Implemented do-while loop structure for early exit on verification failure
- Moved block readability checks inside verification process
- Added parsed flag to indicate successful parsing
- Updated return value to reflect parsing success
- Maintained existing parsing logic and output format

* fixed false positives

recieved some cuid cards today so was able to test for myself can confirm works... finally
changes made: 
-updated key assignment in smartrider_read
-simplified key verification in smartrider_parse
-improved error handling and logging
-streamlined data parsing process
-corrected key checking logic
-added checks for required block readability
-improved flow control with strategic breaks
-adjusted block data access method

* small optimizations

- refactored `smartrider_verify` and `smartrider_read` by abstracting repeated key operations into `authenticate_and_read` function for improved code maintainability.
- optimized `smartrider_read` by introducing a loop for key setup, reducing redundancy and improving efficiency.
- streamlined error handling in `smartrider_read` by replacing do-while loop with conditional checks.
- changed standard key references to use `standard_keys` array indices

* formatting

* Delete duplicate smartrider.c

* updated smartrider.c

* found 'fbt format'

* transaction parsing updates

-removed last trip/prev trip wording and replaced with "Trip History" header
-added date in front of each transaction 
-only shows transaction cost if it's higher than 0
-changed tag on/tag off to +/- to save room
-added 8 more transactions to Trip History
-verified still working and formatted with fbt

* fixed reboot with partially unlocked card

-added bounds checking for all block accesses to prevent out-of-range memory access
-implemented improved error handling with an error_occurred flag
-introduced a maximum iteration count for date calculation to prevent infinite loops
-used snprintf with size limits for all string operations to avoid buffer overflows
-added validation for trip count to ensure it doesn't exceed the maximum allowed
-implemented checks to skip unread or out-of-range blocks during trip parsing
-added safeguards against corrupted or invalid timestamp data

* optimized SmartRider card parsing and verification

- replaced do-while loop with direct error checks in smartrider_parse
- optimized key verification using direct memcmp in smartrider_verify
- introduced inline functions for common operations (e.g., set_key, read_le16)
- replaced bubble sort with insertion sort for trip data
- simplified date calculation using a lookup table for days in month
- used uint_fast8_t for loop counters to allow compiler optimization
- added __attribute__((hot)) to key functions for aggressive optimization
- removed redundant variable declarations and function calls
- optimized memory usage with static const arrays for required blocks
- simplified error handling in smartrider_read and authenticate_and_read
- used __builtin_memcpy and __builtin_memcmp for potential compiler optimizations
- tested and formatted with fbt

* small fixes

-renamed "Trip History" to "Tag On/Off History"
-fixed date calculation to account for leap years
-misc changes

* Update changelog

---------

Co-authored-by: Willy-JL <49810075+Willy-JL@users.noreply.github.com>
2024-09-18 03:00:49 +02:00
Willy-JL
f65d4bb233 Merge remote-tracking branch 'ofw/dev' into mntm-dev 2024-09-05 19:17:18 +02:00
porta
c9791a280a [FL-3884] Proper integer parsing (#3839)
* feat: strint_to_uint32 and tests
* fix: permit explicit bases and prefixes
* feat: strint_to_{int32,uint16,int16}
* feat: strint_to_u?int64
* refactor: replace strtol, strtoul, sscanf with strint_to_*
* fix: api symbols
* docs: document parameter `end` of strint_to_uint_32
* style: apply changes requested by hedger
* refactor: fix pvs-studio diagnostic
* style: apply changes requested by CookiePLMonster
* fix: unused var
* fix: pointer type
* refactor: convert atoi to strint_to_*
* fix: strint_to_uint8 doesn't actually exist ._ .
* fix: memory leak
* style: address review comments
* Toolbox: couple small comments in the code and doxygen comment update. SubGhz, Loader: fix strint usage.
* Loader: fix incorrect cast

Co-authored-by: あく <alleteam@gmail.com>
2024-09-05 18:02:42 +01:00
Kara Zajac
67ffec5cc6 NFC: Saflok parser Date Rollover (#201)
* Date Rollover

Update the saflok parser to properly handle date rollovers.

* Format

---------

Co-authored-by: Willy-JL <49810075+Willy-JL@users.noreply.github.com>
2024-09-03 02:29:07 +02:00
Zinong Li
a807a9e81d NFC: Saflok Parser (#196)
* ready for PR

* improve weekday restriction rendering

* fix weekday index bug

* format

* memcpy optimization

* format

* Update changelog

---------

Co-authored-by: Willy-JL <49810075+Willy-JL@users.noreply.github.com>
2024-08-30 00:12:14 +02:00
Willy-JL
53727022aa Merge remote-tracking branch 'ofw/dev' into mntm-dev 2024-08-02 21:56:35 +02:00
Astra
4f46032d32 [NFC] Change the plantain last number display from "?" to "X" (#3819) 2024-08-02 15:03:12 +09:00
Willy-JL
b4c24e6e4b Merge remote-tracking branch 'ofw/dev' into mntm-dev 2024-07-31 23:06:48 +02:00
Astra
59eb749b2b [FL-3879] Fix plantain balance string (#3813)
* Fix balance string
* nfc app: remove ? in plantain

Co-authored-by: hedger <hedger@users.noreply.github.com>
Co-authored-by: あく <alleteam@gmail.com>
Co-authored-by: gornekich <n.gorbadey@gmail.com>
2024-08-01 05:57:00 +09:00
Willy-JL
2eaf1ffc95 New formatting 2024-07-15 22:32:17 +01:00
Willy-JL
8a02a2c8dd Empty line after TAGs as per new formatting 2024-07-15 22:29:41 +01:00
Willy-JL
02f7207d28 Merge remote-tracking branch 'ofw/dev' into mntm-dev 2024-07-15 22:18:35 +01:00
hedger
ffa3996a5e [FL-3867] Code formatting update (#3765)
* clang-format: AllowShortEnumsOnASingleLine: false
* clang-format: InsertNewlineAtEOF: true
* clang-format: Standard:        c++20
* clang-format: AlignConsecutiveBitFields
* clang-format: AlignConsecutiveMacros
* clang-format: RemoveParentheses: ReturnStatement
* clang-format: RemoveSemicolon: true
* Restored RemoveParentheses: Leave, retained general changes for it
* formatting: fixed logging TAGs
* Formatting update for dev

Co-authored-by: あく <alleteam@gmail.com>
2024-07-15 13:38:49 +09:00
Zinong Li
79d8b12c5e NFC: Add parser for CSC Service Works Reloadable Cash Card (#137)
* csc parser

* Added verification through keys. Recognize new cards.

* Correct typo, add comments

* Updated output word choice

* Added verify key in csc_parse to avoid false positive

* Format

* updated verification process

- Deleted key-based verification
- Added memory based checksum and backup block checks to ensure better verification performance

* Formatting and More Verify Steps

Added card type checks and verify for csc specific memory format
Formatted the code (indentation etc.)

* Update csc.c

* Test cleanup parser a bit

* Update changelog

---------

Co-authored-by: Willy-JL <49810075+Willy-JL@users.noreply.github.com>
2024-07-10 11:43:38 +01:00
Willy-JL
b9c648f7d2 Merge branch 'dev' of https://github.com/DarkFlippers/unleashed-firmware into mntm-dev --nobuild 2024-06-11 23:30:50 +02:00
MX
d4d5b1b55a fix typo 2024-06-11 16:15:18 +03:00
Astra
cf8c82c451 [FL-3746] Mifare Plus detection support (#3607)
* Initial MFPlus draft
* Proper detection (WIP)
* Mifare Plus detection done
* Bump F18 API
* Alloc takes no arguments
* Fixes from code review
* Remove leftover logging
* Remove stray reminder comment
* Review changes and extra logging
* Fix atqa detection
* Fix incorrect comparison
* ATQA byte swap fix
* mf plus: code clean up
* mf plus: remove unused code
* mf plus: fix read fail event handling
* mf plus: fix return error codes
* mf plus: handle load and save errors
* mf plus: assert -> check in public API funxtion
* Bump API Symbols version
* Fix wrong feature mask
* Skylanders plugin separation
* Fix navigation
* Fix info box size

Co-authored-by: gornekich <n.gorbadey@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2024-06-10 20:36:46 +01:00
Willy-JL
aa3db97e9d Merge branch 'dev' of https://github.com/DarkFlippers/unleashed-firmware into mntm-dev 2024-06-06 02:19:54 +01:00
MX
05457b41e4 Merge remote-tracking branch 'OFW/astra/3746-mfp-detect' into nfc_mfplus 2024-06-06 01:12:34 +03:00
MX
17dbb4105d Merge remote-tracking branch 'OFW/dev' into dev 2024-06-06 00:35:40 +03:00
Astra
6db3c0c6bc Merge branch 'dev' into astra/3746-mfp-detect 2024-06-05 18:55:41 +09:00
Astra
4357a1e9d2 Skylanders plugin separation 2024-06-05 18:11:57 +09:00
Willy-JL
23da827361 Merge branch 'dev' of https://github.com/flipperdevices/flipperzero-firmware into mntm-dev 2024-06-04 03:03:23 +01:00
hedger
03196fa110 cleanup of various warnings from clangd (#3682)
* cleanup of various warnings from clangs
* lfrfid_debug: cast fixes
* subghz: binraw: round->roundf
* furi: thread: updated internal stack size variable to size_t
* github: fail faster on unsuccessful build
* unit_tests: double trouble
2024-06-03 14:43:23 +01:00
Willy-JL
54d2763177 Merge branch 'dev' of https://github.com/flipperdevices/flipperzero-firmware into mntm-dev 2024-05-16 21:47:58 +01:00
MX
7c5111e29f Merge remote-tracking branch 'OFW/dev' into dev 2024-05-16 23:37:03 +03:00
あく
7c63bf7574 Revert "TLSF memory allocator. Less free flash, moar free ram. (#3572)" (#3651)
* Revert "TLSF memory allocator. Less free flash, moar free ram. (#3572)"

This reverts commit 1d17206e23.

* Fix PVS warnings

* github: logging for ticket number checks to stdout

* memgr: removed offending todo

---------

Co-authored-by: hedger <hedger@nanode.su>
2024-05-16 18:43:27 +04:00
Willy-JL
c2b7b9c60f Merge branch 'dev' of https://github.com/flipperdevices/flipperzero-firmware into mntm-dev 2024-05-16 04:54:24 +01:00
Eric Betts
6d1a5c71e6 Skylanders plugin (#3315)
* PoC skylanders plugin
* based on db0c7e4fad
* More figures
* Fix util methods

Co-authored-by: あく <alleteam@gmail.com>
Co-authored-by: gornekich <n.gorbadey@gmail.com>
2024-05-16 03:44:40 +03:00
Eric Betts
50bee67748 Skylanders plugin (#3315)
* PoC skylanders plugin
* based on db0c7e4fad
* More figures
* Fix util methods

Co-authored-by: あく <alleteam@gmail.com>
Co-authored-by: gornekich <n.gorbadey@gmail.com>
2024-05-15 19:09:08 +01:00
MX
4965215c8d Merge remote-tracking branch 'OFW/dev' into dev 2024-04-27 14:44:18 +03:00
Willy-JL
41e0b478a3 Merge branch 'dev' of https://github.com/flipperdevices/flipperzero-firmware into mntm-dev --nobuild 2024-04-25 22:20:39 +01:00
Astra
1559ee6293 [Fl-3809] Troika parser visual fixes (#3614)
Co-authored-by: あく <alleteam@gmail.com>
2024-04-24 21:47:40 +09:00
MX
f88a916ccc Merge remote-tracking branch 'OFW/dev' into dev [ci skip] 2024-04-21 11:42:57 +03:00
Willy-JL
e3cc377b56 Merge branch 'dev' of https://github.com/flipperdevices/flipperzero-firmware into mntm-dev 2024-04-19 22:40:41 +01:00
gornekich
c87683596a nfc app: add legacy keys for plantain cards (#3602)
Co-authored-by: あく <alleteam@gmail.com>
2024-04-19 23:22:07 +09:00
Astra
0d73a58123 Mosgortrans parser output fixes (#3554)
* Fix mosgortrans/troika newlines and mark unused variables
* Supress warnings for TODOs that don't need a ticket

Co-authored-by: あく <alleteam@gmail.com>
2024-04-19 21:01:57 +09:00
MX
8eba6e18ff Merge remote-tracking branch 'OFW/dev' into dev 2024-04-18 17:24:48 +03:00
MX
4422a03ae9 Merge remote-tracking branch 'OFW/dev' into dev 2024-04-18 17:22:36 +03:00
gornekich
be43e49869 nfc app: fix false positive verification in bip plugin (#3595)
Co-authored-by: あく <alleteam@gmail.com>
2024-04-18 09:56:39 +09:00
MX
2443a702c9 update nfc parser
by zacharyweiss
2024-04-10 15:38:57 +03:00
Zachary Weiss
c056127e99 Merge branch 'Next-Flip:dev' into dev 2024-04-09 22:07:10 -04:00
Zachary Weiss
66f1558b07 Typo 2024-04-09 21:14:57 -04:00
Zachary Weiss
905c33a08b Only print end validity when present
Same might be worth doing for type & balance, keeping those as is for now; expiry/EV specifically given the switching logic as it has most potential for misinterpretation of null/0 value
2024-04-09 21:12:46 -04:00
Zachary Weiss
2150f18496 Struct&var refactor for clarity 2024-04-09 20:19:27 -04:00
Zachary Weiss
33cfd6340a More cleanup, pass testing 2024-04-08 22:14:46 -04:00
Zachary Weiss
3ea6d46c79 Parsing function readability refactor 2024-04-07 22:10:46 -04:00
Zachary Weiss
3af66c7815 ASCII of known layouts, pass testing 2024-04-07 20:49:06 -04:00
Zachary Weiss
07f63f9512 Misc cleanup/refactor + passes testing 2024-04-07 16:20:08 -04:00
Willy-JL
e607147378 Merge branch 'dev' of https://github.com/DarkFlippers/unleashed-firmware into mntm-dev 2024-04-05 04:52:23 +01:00