← All projects

Open source

Experimental Android JCA Backend for webcrypto.dart

A native Android backend for Dart’s official Web Crypto package, built for Google Summer of Code 2026: bridging Dart to Android’s Java Cryptography Architecture with jnigen removes the 300–500 KB per-ABI cost of bundling BoringSSL, and early benchmarks on seven devices show up to 29× faster hashing for large payloads.

Period
May 2026 – present
Role
GSoC contributor
Kind
Open source
Status
Active
  • Dart
  • Java (JCA)
  • jnigen
  • Android

Key results

  • 29 of 31 pull requests merged
  • Covers all major primitives
  • Up to 29× faster hashing on large payloads

During Google Summer of Code 2026 I built an experimental Android backend for Dart’s package:webcrypto, mentored by Jonas Finnemann Jensen and Hamdaan Ali Quatil. Instead of shipping BoringSSL as a native library, the backend calls Android’s built-in Java Cryptography Architecture (JCA) through bindings generated with package:jnigen.

What landed

I opened 31 pull requests against google/webcrypto.dart; 29 are merged.

Primitive Pull requests
SecureRandom · HMAC #298
SHA-1 / 256 / 384 / 512 #296
AES-GCM · AES-CBC · AES-CTR #300 · #304 · #316
RSASSA-PKCS1-v1_5 · RSA-OAEP · RSA-PSS #323 · #340 · #341, #375
ECDSA (P-256/384/521) · ECDH #351 · #360
HKDF #356

Along the way I sent fixes to master: AES-GCM tag-length test vectors (#312), JWK base64url validation (#329), the canonical RSA-OAEP JWK alg (#337) and a documentation fix (#339).

Validation

On an Android 16 (API 36) emulator the suite ran 1,397 passing tests; all 46 failures are in PBKDF2, which remains experimental (#357). AES-GCM passed 81 of 81 vectors on API 24 and API 36, and RSA-PSS 366 of 366 on API 36. The work lives on the android-jca-branch integration branch.

Contents

  1. 1 Introduction
  2. 2 News 15
  3. 3 Experience 9
  4. 4 Research 8
  5. 5 Selected Systems 29
  6. 6 Education 2
  7. 7 Honors & Awards 10
  8. 8 Talks 2
  9. 9 Leadership & Service 9
  10. 10 Certifications 9
  11. 11 Toolchain 8
  12. 12 Correspondence