fuzz_token_raw_bytes.rs 875 B

123456789101112131415161718192021222324252627
  1. #![no_main]
  2. use libfuzzer_sys::fuzz_target;
  3. use cashu::nuts::nut00::token::{Token, TokenV4};
  4. fuzz_target!(|data: &[u8]| {
  5. let bytes = data.to_vec();
  6. // Fuzz Token::try_from(&Vec<u8>)
  7. // This tests:
  8. // - "crawB" prefix validation
  9. // - CBOR deserialization via ciborium
  10. // - Minimum length check (5 bytes)
  11. let _: Result<Token, _> = Token::try_from(&bytes);
  12. // Fuzz TokenV4::try_from(&Vec<u8>) directly
  13. // Same parsing but returns TokenV4 directly
  14. let _: Result<TokenV4, _> = TokenV4::try_from(&bytes);
  15. // Also try with the "crawB" prefix prepended to exercise CBOR parsing
  16. // with arbitrary data after the valid prefix
  17. let mut prefixed = b"crawB".to_vec();
  18. prefixed.extend_from_slice(data);
  19. let _: Result<Token, _> = Token::try_from(&prefixed);
  20. let _: Result<TokenV4, _> = TokenV4::try_from(&prefixed);
  21. });