Skip to content

Add HekaDrop — cross-platform Quick Share Rust implementation#15514

Closed
YatogamiRaito wants to merge 3 commits into
google:masterfrom
YatogamiRaito:add-hekadrop
Closed

Add HekaDrop — cross-platform Quick Share Rust implementation#15514
YatogamiRaito wants to merge 3 commits into
google:masterfrom
YatogamiRaito:add-hekadrop

Conversation

@YatogamiRaito
Copy link
Copy Markdown

Project description

HekaDrop is a cross-platform Rust implementation of Google Quick Share (Nearby Share). It allows Android devices to send files to macOS/Linux/Windows over LAN without installing any app on the phone — the Android side uses the stock Quick Share that ships on all Android devices.

Language: Rust
Repo: https://github.com/YatogamiRaito/HekaDrop
License: MIT

Security relevance

The project implements a non-trivial cryptographic protocol:

  • UKEY2 handshake — P-256 ECDH + HKDF-SHA256 key derivation
  • Secure channel — AES-256-CBC + HMAC-SHA256 (Encrypt-then-MAC)
  • Chunk-HMAC (RFC-0003) — per-chunk HMAC-SHA256 tags for storage integrity
  • Protobuf parsing — both Google's Nearby protocol and our extensions

All of these operate on attacker-controlled input from the network. A bug in any of these paths is a pre-auth DoS or worse.

Fuzz targets (10)

Target What it tests
fuzz_ukey2_client_init process_client_init — raw bytes → UKEY2 parse
fuzz_ukey2_client_finish process_client_finish — ECDH commitment verify
fuzz_frame_decode Magic-prefix dispatch + OfflineFrame + HekaDropFrame decode
fuzz_secure_decrypt SecureCtx::decrypt — AES-256-CBC + HMAC-SHA256
fuzz_payload_header PayloadHeader/Chunk/TransferFrame protobuf decode
fuzz_payload_assembler PayloadAssembler::ingest state machine
fuzz_chunk_hmac compute_tag + verify_tag + mutated-body rejection
fuzz_resume_meta Resume session_id + meta_filename computation
fuzz_protobuf_frames All hekadrop_ext types (ChunkIntegrity, ResumeHint, FolderManifest)
fuzz_endpoint_info mDNS endpoint_info bitmap + device name parse

CI status

All 10 targets compile and run crash-free (verified locally with libFuzzer, 764k+ runs/10s).

Contact

Primary contact: destek@sourvice.com

@google-cla
Copy link
Copy Markdown

google-cla Bot commented May 15, 2026

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

@github-actions
Copy link
Copy Markdown

YatogamiRaito is integrating a new project:
- Main repo: https://github.com/YatogamiRaito/HekaDrop
- Criticality score: 0.17266

@YatogamiRaito
Copy link
Copy Markdown
Author

I have signed the CLA. Please re-check.

1 similar comment
@YatogamiRaito
Copy link
Copy Markdown
Author

I have signed the CLA. Please re-check.

HekaDrop is a cross-platform Rust implementation of Google Quick Share
(Nearby Share). It receives files from Android devices (no app install
needed) over LAN using UKEY2 + AES-256-CBC + HMAC-SHA256.

10 fuzz harnesses covering:
- UKEY2 handshake (client_init, client_finish)
- Frame dispatch (magic prefix + OfflineFrame + HekaDropFrame decode)
- SecureCtx decrypt (AES-256-CBC + HMAC-SHA256)
- PayloadHeader/Chunk/TransferFrame protobuf decode
- PayloadAssembler ingest state machine
- Chunk-HMAC compute+verify pipeline (RFC-0003)
- Resume meta filename/session_id computation (RFC-0004)
- All hekadrop_ext protobuf types (ChunkIntegrity, ResumeHint, FolderManifest)
- mDNS endpoint_info bitmap+name parse
YatogamiRaito and others added 2 commits May 15, 2026 18:02
Use find instead of hardcoded x86_64-unknown-linux-gnu path.
Fixes i386/aarch64 build failures.
Copy link
Copy Markdown
Collaborator

@DavidKorczynski DavidKorczynski left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! The project looks too immature for OSS-Fuzz. I would advice using ClusterFuzzLite: https://google.github.io/clusterfuzzlite/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants