NOTICE: funsign.org is NOT my project, this site is fraudulent
It’s no secret I’ve been slowly working on a project I call funsign. Due to the recent revelations on funscripted.com and funscript.org I’m going to start learning web development to have a web front end to the project to make it easier to use. Funsign is going to be my own personal project. It will be opensource and anyone will be able to use it. Eroscripts will host an instance to stand as a trusted authority.
What is funsign?
Funsign is a trusted authority that establishes cryptographic authenticity to funscripts authorship.
The database will not store scripts themselves, just the hashes and public metadata.
Below in the features when I say “upload” or “download” everything is happening client-side and the server is not doing anything, everything happens locally. The only operations that happen server-side is updating the database, checking the database and serving database information.
Features
Keygen
- Funsign will generate cryptographic key pairs for you in the form of ed25519 keys
- I will build the app to store your keys in your browser session
- Your keys are your username/password, so store them somewhere safe
Sign
- Using your public/private key pair you can cryptographicly sign the script
- This cryptographicly ensures the authenticity of your authorship
- Funsign will be available to a closed group when it first releases so you can make your script claims
- Some claims will be included in the cryptographic signature: timestamp, authorname, source URL
- After signature you can download the signed funscript to publish it.
Validate
- You can upload a signed funscript and we will verify the signature embedded from the script
- If the script was modified (timestamp, source, author, data, etc were changed) the check will fail
Diff
- Upload 2 scripts regardless of whether they were signed, and you will visibly see what is different between the 2. A difference score will be calculated as well.
Identify
- Any funscript can be uploaded and we will check if a script already exists in the database.
- If your uploaded script is identical to one that exists, we can generate a signed copy of the identified script and you can download it.
Publish
- Upload a signed script to public record, this action is permanent unless you update a script
- Publishing a script with identical data or similar enough data will result in an error.
Update
- If a script was already published and you want to update the metadata, or the keys, you can upload the script that’s signed with the new key, provide the old key (to prove authorship) and the new script will update the old script in database
API
There will be a read only API that can serve the validate, diff and identify functions of the app.
How does it work?
As we all know funscripts are just plaintext json. What makes this a very flexible format is we can act on individual components of a script and handle operations in isolation.
Any funscript has 2 blocks. The data block (containing points in a graph) and the metadata block (containing arbitrary information about the script). You can review this under the 2.0 spec thread
A script being signed will have the meta block updated with authorship, source URL, and timestamp.
Then the data and meta blocks will be hashed, and with both together a new json object will be made:
{ "datahash": "", "metahash": "" }
This object is what will be encrypted with a private key (signed) and the hashes and public key will be added to the script’s metadata block and made available for download
The ending result will be a funscript where the file itself is not signed, but the data inside it is.
This is important since we only want to verify authorship and tie it to the data.
Disclaimer
This whole project is way outside my skillset, and will likely take a long time. I know some go programming but not very strong with it yet. I know very little about web development beyond html/css, and related security things I do on the daily.
This project will be written with go / htmx. I will not use ANY AI written code.