cidermill-airplay 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. cidermill_airplay-0.1.0/CHANGELOG.md +33 -0
  2. cidermill_airplay-0.1.0/Cargo.lock +752 -0
  3. cidermill_airplay-0.1.0/Cargo.toml +161 -0
  4. cidermill_airplay-0.1.0/LICENSE +674 -0
  5. cidermill_airplay-0.1.0/PKG-INFO +64 -0
  6. cidermill_airplay-0.1.0/README.md +170 -0
  7. cidermill_airplay-0.1.0/bindings/cidermill-airplay-py/Cargo.lock +775 -0
  8. cidermill_airplay-0.1.0/bindings/cidermill-airplay-py/Cargo.toml +28 -0
  9. cidermill_airplay-0.1.0/bindings/cidermill-airplay-py/LICENSE +674 -0
  10. cidermill_airplay-0.1.0/bindings/cidermill-airplay-py/README.md +49 -0
  11. cidermill_airplay-0.1.0/bindings/cidermill-airplay-py/src/lib.rs +617 -0
  12. cidermill_airplay-0.1.0/bindings/cidermill-airplay-py/src/pairing.rs +509 -0
  13. cidermill_airplay-0.1.0/bindings/cidermill-airplay-py/tests/test_binding.py +217 -0
  14. cidermill_airplay-0.1.0/cidermill_airplay/__init__.py +4 -0
  15. cidermill_airplay-0.1.0/cidermill_airplay/__init__.pyi +320 -0
  16. cidermill_airplay-0.1.0/cidermill_airplay/py.typed +0 -0
  17. cidermill_airplay-0.1.0/examples/pair.rs +44 -0
  18. cidermill_airplay-0.1.0/examples/play_url.rs +60 -0
  19. cidermill_airplay-0.1.0/examples/raop_rsa_vector.rs +26 -0
  20. cidermill_airplay-0.1.0/examples/receiver.rs +585 -0
  21. cidermill_airplay-0.1.0/examples/send_audio.rs +165 -0
  22. cidermill_airplay-0.1.0/pyproject.toml +29 -0
  23. cidermill_airplay-0.1.0/src/audio/alac.rs +276 -0
  24. cidermill_airplay-0.1.0/src/audio/control.rs +299 -0
  25. cidermill_airplay-0.1.0/src/audio/format.rs +196 -0
  26. cidermill_airplay-0.1.0/src/audio/mod.rs +39 -0
  27. cidermill_airplay-0.1.0/src/audio/ptp.rs +831 -0
  28. cidermill_airplay-0.1.0/src/audio/ptp_serve.rs +450 -0
  29. cidermill_airplay-0.1.0/src/audio/rtp.rs +849 -0
  30. cidermill_airplay-0.1.0/src/audio/script.rs +986 -0
  31. cidermill_airplay-0.1.0/src/audio/stream.rs +160 -0
  32. cidermill_airplay-0.1.0/src/audio/timeline.rs +219 -0
  33. cidermill_airplay-0.1.0/src/cipher.rs +392 -0
  34. cidermill_airplay-0.1.0/src/client.rs +1989 -0
  35. cidermill_airplay-0.1.0/src/command.rs +541 -0
  36. cidermill_airplay-0.1.0/src/datastream.rs +546 -0
  37. cidermill_airplay-0.1.0/src/dmap.rs +524 -0
  38. cidermill_airplay-0.1.0/src/error.rs +83 -0
  39. cidermill_airplay-0.1.0/src/extension.rs +96 -0
  40. cidermill_airplay-0.1.0/src/features.rs +214 -0
  41. cidermill_airplay-0.1.0/src/info.rs +419 -0
  42. cidermill_airplay-0.1.0/src/legacy/mod.rs +519 -0
  43. cidermill_airplay-0.1.0/src/legacy/srp.rs +338 -0
  44. cidermill_airplay-0.1.0/src/lib.rs +237 -0
  45. cidermill_airplay-0.1.0/src/mirror/avc.rs +525 -0
  46. cidermill_airplay-0.1.0/src/mirror/key.rs +198 -0
  47. cidermill_airplay-0.1.0/src/mirror/mod.rs +58 -0
  48. cidermill_airplay-0.1.0/src/mirror/packet.rs +240 -0
  49. cidermill_airplay-0.1.0/src/mirror/reader.rs +316 -0
  50. cidermill_airplay-0.1.0/src/mirror/setup.rs +394 -0
  51. cidermill_airplay-0.1.0/src/mirror/writer.rs +238 -0
  52. cidermill_airplay-0.1.0/src/os_rng.rs +45 -0
  53. cidermill_airplay-0.1.0/src/pairing.rs +1241 -0
  54. cidermill_airplay-0.1.0/src/play.rs +290 -0
  55. cidermill_airplay-0.1.0/src/raop/mod.rs +632 -0
  56. cidermill_airplay-0.1.0/src/raop/rsa.rs +336 -0
  57. cidermill_airplay-0.1.0/src/receiver/advertisement.rs +228 -0
  58. cidermill_airplay-0.1.0/src/receiver/audio.rs +1183 -0
  59. cidermill_airplay-0.1.0/src/receiver/buffered.rs +271 -0
  60. cidermill_airplay-0.1.0/src/receiver/buffered_stream.rs +1183 -0
  61. cidermill_airplay-0.1.0/src/receiver/clock.rs +503 -0
  62. cidermill_airplay-0.1.0/src/receiver/config.rs +428 -0
  63. cidermill_airplay-0.1.0/src/receiver/connection.rs +2078 -0
  64. cidermill_airplay-0.1.0/src/receiver/controllers.rs +118 -0
  65. cidermill_airplay-0.1.0/src/receiver/datastream.rs +74 -0
  66. cidermill_airplay-0.1.0/src/receiver/identity.rs +135 -0
  67. cidermill_airplay-0.1.0/src/receiver/mod.rs +58 -0
  68. cidermill_airplay-0.1.0/src/receiver/pairing.rs +573 -0
  69. cidermill_airplay-0.1.0/src/receiver/pin.rs +727 -0
  70. cidermill_airplay-0.1.0/src/receiver/playout.rs +1139 -0
  71. cidermill_airplay-0.1.0/src/receiver/realtime_stream.rs +1220 -0
  72. cidermill_airplay-0.1.0/src/receiver/stream.rs +167 -0
  73. cidermill_airplay-0.1.0/src/rtsp.rs +628 -0
  74. cidermill_airplay-0.1.0/src/safe_plist.rs +454 -0
  75. cidermill_airplay-0.1.0/src/sequence.rs +364 -0
  76. cidermill_airplay-0.1.0/src/session.rs +1264 -0
  77. cidermill_airplay-0.1.0/src/srp6a.rs +393 -0
  78. cidermill_airplay-0.1.0/src/time.rs +529 -0
  79. cidermill_airplay-0.1.0/src/timing.rs +934 -0
  80. cidermill_airplay-0.1.0/src/tlv8.rs +212 -0
  81. cidermill_airplay-0.1.0/src/util.rs +55 -0
  82. cidermill_airplay-0.1.0/tests/airplay_cipher.rs +215 -0
  83. cidermill_airplay-0.1.0/tests/airplay_hap_pairing.rs +465 -0
  84. cidermill_airplay-0.1.0/tests/airplay_info.rs +220 -0
  85. cidermill_airplay-0.1.0/tests/alac_compressed_vector.rs +92 -0
  86. cidermill_airplay-0.1.0/tests/audio_never_panic.rs +131 -0
  87. cidermill_airplay-0.1.0/tests/audio_ptp_observed.rs +223 -0
  88. cidermill_airplay-0.1.0/tests/audio_pyatv_vectors.rs +298 -0
  89. cidermill_airplay-0.1.0/tests/audio_references.rs +541 -0
  90. cidermill_airplay-0.1.0/tests/audio_session_script.rs +488 -0
  91. cidermill_airplay-0.1.0/tests/dmap_pyatv_vectors.rs +142 -0
  92. cidermill_airplay-0.1.0/tests/examples_loopback.rs +142 -0
  93. cidermill_airplay-0.1.0/tests/fixtures/airplay-hap-session-pyatv.json +9 -0
  94. cidermill_airplay-0.1.0/tests/fixtures/airplay-info.json +74 -0
  95. cidermill_airplay-0.1.0/tests/fixtures/airplay-iphone-sender-observed.json +4391 -0
  96. cidermill_airplay-0.1.0/tests/fixtures/alac-crate-0.5.0/LICENSE-APACHE +201 -0
  97. cidermill_airplay-0.1.0/tests/fixtures/alac-crate-0.5.0/LICENSE-MIT +25 -0
  98. cidermill_airplay-0.1.0/tests/fixtures/alac-crate-0.5.0/NOTICE.md +11 -0
  99. cidermill_airplay-0.1.0/tests/fixtures/alac-crate-0.5.0/magic_cookie.bin +0 -0
  100. cidermill_airplay-0.1.0/tests/fixtures/alac-crate-0.5.0/out_16_bit.bin +0 -0
  101. cidermill_airplay-0.1.0/tests/fixtures/alac-crate-0.5.0/packet_16_bit.bin +0 -0
  102. cidermill_airplay-0.1.0/tests/fixtures/audio-apple-captures.json +70 -0
  103. cidermill_airplay-0.1.0/tests/fixtures/audio-apple-tv-observed.json +30 -0
  104. cidermill_airplay-0.1.0/tests/fixtures/audio-apple-tv-ptp-observed.json +50 -0
  105. cidermill_airplay-0.1.0/tests/fixtures/audio-pyatv-vectors.json +134 -0
  106. cidermill_airplay-0.1.0/tests/fixtures/dmap-vectors.json +103 -0
  107. cidermill_airplay-0.1.0/tests/fixtures/mediaremote-pyatv-vectors.json +101 -0
  108. cidermill_airplay-0.1.0/tests/fixtures/mirror-vectors.json +306 -0
  109. cidermill_airplay-0.1.0/tests/fixtures/ptp-wireshark-sample.json +72 -0
  110. cidermill_airplay-0.1.0/tests/fixtures/raop-rsa-vectors.json +12 -0
  111. cidermill_airplay-0.1.0/tests/fixtures/receiver-srp-vectors.json +39 -0
  112. cidermill_airplay-0.1.0/tests/iphone_sender_observed.rs +1037 -0
  113. cidermill_airplay-0.1.0/tests/legacy_pairing.rs +323 -0
  114. cidermill_airplay-0.1.0/tests/legacy_srp_pyatv_vectors.rs +138 -0
  115. cidermill_airplay-0.1.0/tests/legacy_srp_vectors.rs +75 -0
  116. cidermill_airplay-0.1.0/tests/mediaremote_never_panic.rs +71 -0
  117. cidermill_airplay-0.1.0/tests/mediaremote_pyatv_vectors.rs +153 -0
  118. cidermill_airplay-0.1.0/tests/mirror_never_panic.rs +123 -0
  119. cidermill_airplay-0.1.0/tests/mirror_vectors.rs +840 -0
  120. cidermill_airplay-0.1.0/tests/pairing_state.rs +411 -0
  121. cidermill_airplay-0.1.0/tests/raop.rs +517 -0
  122. cidermill_airplay-0.1.0/tests/raop_rsa_vectors.rs +89 -0
  123. cidermill_airplay-0.1.0/tests/receiver_extension.rs +413 -0
  124. cidermill_airplay-0.1.0/tests/receiver_never_panic.rs +379 -0
  125. cidermill_airplay-0.1.0/tests/receiver_pin_gate.rs +1151 -0
  126. cidermill_airplay-0.1.0/tests/receiver_reorder.rs +866 -0
  127. cidermill_airplay-0.1.0/tests/receiver_session.rs +2654 -0
  128. cidermill_airplay-0.1.0/tests/rtsp_codec.rs +446 -0
  129. cidermill_airplay-0.1.0/tests/tlv8_codec.rs +178 -0
@@ -0,0 +1,33 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file. The format follows
4
+ [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project uses semantic versioning
5
+ within the usual pre-1.0 compatibility rules.
6
+
7
+ ## [0.1.0] - 2026-10-16
8
+
9
+ ### Added
10
+
11
+ - AirPlay 2 sender and receiver as sans-io state machines: the RTSP/HTTP codec, TLV8, binary
12
+ plists, `/info` and `Features`; HAP pair-setup (PIN and transient) and pair-verify on both
13
+ sides; the encrypted control and event channels.
14
+ - URL playback and photos, realtime and buffered audio (ALAC, LPCM) with NTP and PTP timing, a
15
+ shared multi-room timeline, now-playing metadata, `/command` and the MediaRemote data channel.
16
+ - AirPlay 1 audio in the clear (`et` 0), both ways.
17
+ - Optional features: `mirror` (screen mirroring), `legacy` (pre-HAP PIN pairing) and `raop-rsa`
18
+ (AirPlay 1 `et` 1 for a sender).
19
+ - Thin blocking wrappers over `std::net` (`ControlChannel`, `EventChannel`, `TimingServer`), and
20
+ four examples that run against each other on loopback.
21
+ - A Python binding for the codec, pairing and cipher building blocks.
22
+ - Golden vectors from pyatv, srptools, Python's `cryptography`, the `alac` crate and a Wireshark
23
+ sample capture; scrubbed captures of real devices; never-panic tests and a libFuzzer target for
24
+ every parser of peer bytes.
25
+
26
+ ### Security
27
+
28
+ - Every parser of peer bytes refuses rather than panics, and every peer plist is parsed under
29
+ nesting and size bounds.
30
+ - ALAC packets known to panic the `alac` decoder are refused first, and a panic is caught and
31
+ returned as an error (with `panic = "unwind"`).
32
+ - PIN pair-setup is rate-limited per source address and receiver-wide; pairing secrets are wiped
33
+ on drop.