Demonstration venue · read-only. Every page can be browsed; the buttons that would change it are switched off. Create an account to run TaxoReview on your own data. A simulation from public publication records: the people listed were not invited and did not agree to review.
? Tutorial for this page

Juan Chen 0002

dblp:54/2717-2 · DBLP profile ↗
← Back
8ranked-venue papers
1as first author
0since 2021 · last 2014
—ORCID · conflict

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 8 · 1 first-author

Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.

Software engineering, system software, and programming languages
5 papers
Programming languages and type systems · 41% Program verification · 28% Compilers and program optimization · 26%
Network and information security
3 papers
Systems and software security · 41% Web and mobile security · 36% Authentication and access control · 24%

Topics — the 14 heaviest of 16, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Programming languages and type systems › type systems
gradual typing
0.212014
Gradual typing embedded securely in JavaScript · POPL 2014
Compilers and program optimization
compiler correctness
0.212013
Fully abstract compilation to JavaScript · POPL 2013
Programming languages and type systems › program equivalence
full abstraction
0.212013
Fully abstract compilation to JavaScript · POPL 2013
Compilers and program optimization › secure compilation
fully abstract compilation
0.212013
Fully abstract compilation to JavaScript · POPL 2013
Compilers and program optimization
secure compilation
0.212013
Fully abstract compilation to JavaScript · POPL 2013
Programming languages and type systems › type theory
dependent types
0.112012
Self-certification: bootstrapping certified typecheckers in F* with Coq · POPL 2012
Program verification
proof assistants
0.112012
Self-certification: bootstrapping certified typecheckers in F* with Coq · POPL 2012
Program verification › system verification
end-to-end verification
0.112010
Type-preserving compilation of end-to-end verification of security enforcement · PLDI 2010
Program verification
proof-carrying code
0.112010
Type-preserving compilation of end-to-end verification of security enforcement · PLDI 2010
Operating systems › system security › operating system security
security policy enforcement
0.112010
Type-preserving compilation of end-to-end verification of security enforcement · PLDI 2010
Programming languages and type systems › language implementation
type-preserving compilation
0.112010
Type-preserving compilation of end-to-end verification of security enforcement · PLDI 2010
Systems and software security
language-based security
0.112014
Gradual typing embedded securely in JavaScript · POPL 2014
Web and mobile security
javascript security
0.012013
Fully abstract compilation to JavaScript · POPL 2013
Authentication and access control › authorization
proof-carrying authorization
0.012010
Type-preserving compilation of end-to-end verification of security enforcement · PLDI 2010

Methods — techniques the papers use, named apart from their topics

type-based invariants · 0.3applicative bisimilarity · 0.3rich type systems · 0.2predicate transformers · 0.2dijkstra monad · 0.2mechanized metatheory · 0.1f* · 0.1coq · 0.1
YearPublicationVenuePosition
2014 Gradual typing embedded securely in JavaScript
abstract
JavaScript's flexible semantics makes writing correct code hard and writing secure code extremely difficult. To address the former problem, various forms of gradual typing have been proposed, such as Closure and TypeScript. However, supporting all common programming idioms is not easy; for example, TypeScript deliberately gives up type soundness for programming convenience. In this paper, we propose a gradual type system and implementation techniques that provide important safety and security guarantees.
Nikhil Swamy, Cédric Fournet, Aseem Rastogi, Karthikeyan Bhargavan, Juan Chen 0002, Pierre-Yves Strub, Gavin M. Bierman
POPL5
2013 Verifying higher-order programs with the dijkstra monad
abstract
Modern programming languages, ranging from Haskell and ML, to JavaScript, C# and Java, all make extensive use of higher-order state. This paper advocates a new verification methodology for higher-order stateful programs, based on a new monad of predicate transformers called the Dijkstra monad.
Nikhil Swamy, Joel Weinberger, Cole Schlesinger, Juan Chen 0002, Benjamin Livshits
PLDI4
2013 Fully abstract compilation to JavaScript
abstract
Many tools allow programmers to develop applications in high-level languages and deploy them in web browsers via compilation to JavaScript. While practical and widely used, these compilers are ad hoc: no guarantee is provided on their correctness for whole programs, nor their security for programs executed within arbitrary JavaScript contexts. This paper presents a compiler with such guarantees. We compile an ML-like language with higher-order functions and references to JavaScript, while preserving all source program properties. Relying on type-based invariants and applicative bisimilarity, we show full abstraction: two programs are equivalent in all source contexts if and only if their wrapped translations are equivalent in all JavaScript contexts. We evaluate our compiler on sample programs, including a series of secure libraries.
Cédric Fournet, Nikhil Swamy, Juan Chen 0002, Pierre-Évariste Dagand, Pierre-Yves Strub, Benjamin Livshits
POPL3
2013 Secure distributed programming with value-dependent types
abstract
Abstract Distributed applications are difficult to program reliably and securely. Dependently typed functional languages promise to prevent broad classes of errors and vulnerabilities, and to enable program verification to proceed side-by-side with development. However, as recursion, effects, and rich libraries are added, using types to reason about programs, specifications, and proofs becomes challenging. We present F*, a full-fledged design and implementation of a new dependently typed language for secure distributed programming. Our language provides arbitrary recursion while maintaining a logically consistent core; it enables modular reasoning about state and other effects using affine types; and it supports proofs of refinement properties using a mixture of cryptographic evidence and logical proof terms. The key mechanism is a new kind system that tracks several sub-languages within F* and controls their interaction. F* subsumes two previous languages, F7 and Fine. We prove type soundness (with proofs mechanized in Coq) and logical consistency for F*. We have implemented a compiler that translates F* to .NET bytecode, based on a prototype for Fine. F* provides access to libraries for concurrency, networking, cryptography, and interoperability with C#, F#, and the other .NET languages. The compiler produces verifiable binaries with 60% code size overhead for proofs and types, as much as a 45x improvement over the Fine compiler, while still enabling efficient bytecode verification. We have programmed and verified nearly 50,000 lines of F* including new schemes for multi-party sessions; a zero-knowledge privacy-preserving payment protocol; a provenance-aware curated database; a suite of web-browser extensions verified for authorization properties; a cloud-hosted multi-tier web application with a verified reference monitor; the core F* typechecker itself; and programs translated to F* from other languages such as F7 and JavaScript.
Nikhil Swamy, Juan Chen 0002, Cédric Fournet, Pierre-Yves Strub, Karthikeyan Bhargavan, Jean Yang 0001
J. Funct. Program.2
2012 Self-certification: bootstrapping certified typecheckers in F* with Coq
abstract
Well-established dependently-typed languages like Agda and Coq provide reliable ways to build and check formal proofs. Several other dependently-typed languages such as Aura, ATS, Cayenne, Epigram, F*, F7, Fine, Guru, PCML5, and Ur also explore reliable ways to develop and verify programs. All these languages shine in their own regard, but their implementations do not themselves enjoy the degree of safety provided by machine-checked verification. We propose a general technique called self-certification that allows a typechecker for a suitably expressive language to be certified for correctness. We have implemented this technique for F*, a dependently typed language on the .NET platform. Self-certification involves implementing a typechecker for F* in F*, while using all the conveniences F* provides for the compiler-writer (e.g., partiality, effects, implicit conversions, proof automation, libraries). This typechecker is given a specification (in~F*) strong enough to ensure that it computes valid typing derivations. We obtain a typing derivation for the core typechecker by running it on itself, and we export it to Coq as a type-derivation certificate. By typechecking this derivation (in Coq) and applying the F* metatheory (also mechanized in Coq), we conclude that our type checker is correct. Once certified in this manner, the F* typechecker is emancipated from Coq.
Pierre-Yves Strub, Nikhil Swamy, Cédric Fournet, Juan Chen 0002
POPL4
2011 Secure distributed programming with value-dependent types
abstract
Distributed applications are difficult to program reliably and securely. Dependently typed functional languages promise to prevent broad classes of errors and vulnerabilities, and to enable program verification to proceed side-by-side with development. However, as recursion, effects, and rich libraries are added, using types to reason about programs, specifications, and proofs becomes challenging.
Nikhil Swamy, Juan Chen 0002, Cédric Fournet, Pierre-Yves Strub, Karthikeyan Bhargavan, Jean Yang 0001
ICFP2
2010 Enforcing Stateful Authorization and Information Flow Policies in Fine
Nikhil Swamy, Juan Chen 0002, Ravi Chugh
ESOP2
2010 Type-preserving compilation of end-to-end verification of security enforcement
abstract
A number of programming languages use rich type systems to verify security properties of code. Some of these languages are meant for source programming, but programs written in these languages are compiled without explicit security proofs, limiting their utility in settings where proofs are necessary, e.g., proof-carrying authorization. Others languages do include explicit proofs, but these are generally lambda calculi not intended for source programming, that must be further compiled to an executable form. A language suitable for source programming backed by a compiler that enables end-to-end verification is missing.
Juan Chen 0002, Ravi Chugh, Nikhil Swamy
PLDI1