An unofficial tool, not built by or connected to ComfortDelGro Driving Centre. What it does with your password

Your CDC bookings, in the calendar you already use.

Subscribe once. Bookings show up on your phone as you make them, and clear themselves when you cancel.

It needs your CDC learner ID and password, which is a lot to ask of a site you have never heard of. Everything below the form explains what happens to them, and shows the working, in as much detail as you care to read.

Create your link

The same learner ID and password you use in the CDC app. They are encrypted in this browser first, and then the link is tried once, so you can see that it works before you subscribe. If you would rather know exactly what that means before typing anything, it is all set out below.

Your password, as it leaves this page

Encrypting a sample in this browser now, with the same function the form above uses.

What happens to your password

This page, in your browser

Reads your ID and password and encrypts them. This is the only place they are typed, and it happens before anything is sent.

the encrypted blob, in the link your calendar app re-sends hourly

This site's server

Decrypts the blob, signs in to CDC as you, builds the calendar, and forgets both. It holds one thing permanently: the private key.

your ID and password, as CDC expects them

ComfortDelGro Driving Centre

Answers with your bookings — the same list you see when you check them yourself.

Where your credentials are readable, and where they are not.

The encryption, step by step

  1. This page asks the server for its public key — a P-256 elliptic-curve key. A public key can only encrypt; the matching private key, which never leaves the server, is the only thing that can decrypt.

  2. Your browser generates a second key pair of its own, used for this one message and then discarded, and combines its private half with the server's public key (ECDH). The server can compute the same shared secret from the other two halves. Nobody watching the link go past can compute it from either public key alone.

  3. The shared secret is stretched into a 256-bit key (HKDF-SHA256), and your ID and password are encrypted under it with AES-256-GCM. GCM also signs the result, so an altered link fails to open rather than opening into something else.

  4. The throwaway public key is folded into both the key derivation and that signature. So a blob cannot be lifted out of one link and re-attached to a different key — it only opens as the whole piece it was encrypted as.

In one line: ECIES over P-256, HKDF-SHA256, AES-256-GCM. The browser half is about a hundred lines of it, in /app.js.

What that buys you, and what it doesn't

What it buys you

What it doesn't

Don't take the page's word for it

Everything above is a claim, and a page that wanted your password would make the same claims. These are the parts you can check for yourself.

Read the code that runs here
Open /app.js. That is not a copy or a description: it is the exact file your browser downloaded and ran, unminified, about a hundred lines of it. The four steps above are the function encryptCreds, and you can read it before you type anything.
Check the key your details were encrypted to

This is a SHA-256 fingerprint of the 65-byte public key your browser fetched a moment ago. It is the same on every visit and for every visitor, so a friend's browser, or your phone, should show these exact characters. A page serving you a key of its own would not match.

reading the key…
Watch what the page sends
Open your browser's network tab before you submit. The only requests this page makes are to this site, plus Google's font servers for the two typefaces. There are no analytics, no trackers and no cookies, and the request carrying your credentials carries them encrypted.

Read enough? Back to the form.