Wtf, jik?

Howdy! Welcome to my homepage (is that too old-fashioned?). Here, you can learn more about me, my work, and some projects I'm involved in.

About me

I'm a security engineer with experience across most of the OSI stack. Recently I began dipping my toes into the world of Rust development. I'm passionate about computing and have a hobby of exploring esoteric and fringe systems and programs.

So you wanna use your domain name as your bluesky handle?

If successful, you will immediately give up control of your current *.bsky.social handle, which may then be available for registration by other people.

Required

  • Bluesky account
  • A domain name you purchased through a registrar
  • TODO (In the future, alternatively): XRPC server

Before You Proceed

This is an unsupported, bleeding-edge feature.

Please only proceed if you feel comfortable with bugs, account access issues, lost data, temporal shifts, and potential space invasion. I do not work for Bluesky PBLLC and this is not legal advice. Actions often have consequences.

Seriously. You'll be able to do this through the app in like a week.

You Must Determine Your True Name, Eragon

Since the @-protocol allows you to change your handle, your account is identified by a DID document, and in turn by its hash To find out what that is, you can send an HTTP request to the handle update() method.

Here's a few ways to do that:

Using Postman:

GET: https://bsky.social/xrpc/com.atproto.handle.resolve
- Params:
	- Key: handle
	- Value: your.current.handle
- Authorization: None
- Body: None

Using cURL

curl https://bsky.social/xrpc/com.atproto.handle.resolve?handle=your.current.handle

Using httpie

http get https://bsky.social/xrpc/com.atproto.handle.resolve \
handle==your.current.handle

If you get a response of "did:fake:donotuse", then something went wrong. If it looks like gibberish, you're in business.

Domain Name Server Settings

You need to add a TXT record to your domain.

  • Subdomain: _atproto
  • Value: did=did:plc:<your-did-hash-here>
  • TTL: Default or 3600

Mine looks like this:

dns configuration screenshot

Authenticate

Using Postman:

GET: https://bsky.social/xrpc/com.atproto.session.create
- Params:
	- Key: handle
	- Value: your.current.handle
- Authorization: None
- Body:

{
    "identifier": "your.current.handle",
    "password": "password"
}

We need the accessJwt token from the reponse. Be careful to not copy any quotes or whitespace.

Paste the token into Authorization > Type: Bearer Token.

Using cURL


Using httpie

http post https://bsky.social/xrpc/com.atproto.session.create identifier=your.current.handle password=<your-password>

Request Handle Rotation

POST: https://bsky.social/xrpc/com.atproto.handle.update

- Authorization: Bearer Token = <accessJwt>
- Params: None
- Body:
	- Encoding: application/json (click the dropdown menu)

{
    "handle": "your.domain.handle",
}

Using cURL:


Using httpie:

http post https://bsky.social/xrpc/com.atproto.handle.update Authorization:"Bearer <accessJwt>" handle=your.domain.name

If you don't get an error, then it probably worked.

You can confirm that your request was successful if your new handle shows up in the DID:PLC server operation logs (https://plc.directory/export?after=2023-03-XXT00:00).

You can relog into Bluesky now. If you are using the beta iOS app, you will have to log in using your email address for the time being.


Other Projects

Skysail

Rust Implementation of the Authenticated Transport Protocol, as well as experiments with Distributed Identities.

Celestial Motion Physics Simulator

Created a mathematical model for motion of celestial bodies in the Solar System and developed an numerical solution (Runge-Kutta) using MATLAB. Designed extendable simulator for their movement with video output.

Cloudlab

Updated write-up coming soon.