Introduction

Tenfingers is a decentralized sharing protocol that lets you share any file or data with anyone, or just a selected few!

Make a blog, a website or share your latest photos, it is all possible with Tenfingers. Share your link, and your friends will have access at all times to your latest whereabouts!

With oversharing, your data can be accessed at all times, even when your computer is turned off!

All it costs is some storage and some bandwidth for sharing, the rest is totally free.

Basically:

You share data from others, because they share yours!

A simple and elegant incentive.

It is all encrypted too so no one knows what you are sharing, and the only way to access your data is by the link file which is yours to distribute as you see fit.

Overshare, and many people will share your data, making it accessible at any time.

Go to the Prerequisite page to see what you need to use Tenfingers, or continue browsing this page for more in depth technical information:

Technically:

You launch a listener that, with the help of a first link, connects to a loosely connected trust-less node swarm.

Basic handshake goes over RSA 4096 and then everything else is over AES 256-CTR.

The sharing is made reciprocally, with a default over sharing of 10 times (so ten nodes will hold and serve your data while you share data from those ten nodes).

Two extra tenfingers files are shared with the link (a translation file, and a substitution file) to prevent link decay. Share them alongside the link file if the longevity of the data shared is important.

It is:

  • FOSS (GPL-3.0-or-later, hit me up if you need another FOSS licence)

  • Decentralized (Once you get a single address to a node in the swarm, it is 100% decentralized).

  • Encrypted (RSA 4096, AES 256)

  • Takedown robust (if the data is shared from many countries it will make it hard to take down)

  • It permits sharing with your computer turned off.

  • Modify shared data or your address without the need to re-distribute links.

  • Strong incentive to share.

  • Accessible to anyone who can spare some disk space and some bandwith.

The more you share, automatically, the more you are shared!

This is all inbuilt in the protocol, there is no central power controlling anything, and everything is free!

By the way, this is the official Tenfingers logo:

tenfingers logo

Next step

Now you can go on to the Prerequisite page to see what you need to use Tenfingers.

Prerequisite

You need to either use Python, or the Frozen executables, and their prerequisites are as follows:

Python: Python3 and CryptodomeX

You need Python 3.6 or better plus the library pycryptodomex.

To install Python, see install recommendations for your specific OS.

If you don't know if python is installed or which version is installed, use:

python3 --version

When you have Python 3.6 or better installed, you need to install CryptodomeX.

Just run:

pip3 install pycryptodomex

Frozen executables: No specific prerequisites.

If you can't or don't want to use Python, then you can use the frozen executables instead.

This does not need python (or CryptoDome, it's baked in in the executables), you just run the executables as is.

The Linux executables has been built on a Linux Mint 21 setup, if you have trouble on another Linux OS, use the python version.

Just use the pre-frozen executables for your specific operative system.

Note: On Windows, newly frozen executables sometimes get flagged as dangerous files. Just don't use them.

Next step

Install Tenfingers

Installing/setup Tenfingers

Get the tenfingers files

You may use python or frozen executables:

Linux Python:

You can download the latest version here and extract the python scripts manually, or get the latest version from git:

These commands will create a tenfingers folder in your HOME folder and download the python files into it.

# Go to your users home folder (you can put it anywhere, it's just convenient to have it here)
cd $HOME
# Make a fonder for Tenfingers
mkdir tenfingers
cd tenfingers
# Get the git repositorys content
git clone https://codeberg.org/Valmond/Tenfingers.git
# Get only the python files
mv Tenfingers/tenfingers/*.py ./
mv Tenfingers/tenfingers/*.sh ./
# Remove the rest
rm Tenfingers -rf

Run the setup:

python3 ./setup.py

Windows Python:

Download the latest version here.

Extract it and go to /tenfingers_release/py_source and get the python files.

Put them in any folder you want, or use them where they already are.

Run the setup:

python3 setup.py

Linux or Windows frozen executables:

Download the latest version for your OS from tenfingers.org

Download for Linux

Download for Windows

Extract it and go to /tenfingers_release/bin and get all the executables.

Put them in any folder you want, or use them where they are.

Run the setup:

Linux:

./setup

Windows:

setup.exe

Note for Linux and Windows Frozen executable users:

Further on the examples will be for Python on Linux, so you might need to adjust them a little.

So for example, in an example for Linux with Python:

python3 ./10f.py test ...

it becomes, on Linux (without python):

./10f test ...

and on Windows (without Python):

10f.exe test ...

and on Windows with Python:

python 10f.py test ...

Forwarding internet to your PC and start the node

You now need to forward a port from internet to your PC, for example the default port 46000.

This is usually made in the software of your internet proveders "box", or your router.

This is the complicated part, get this up and running and everything else should be quite simple! Good luck.

You will also need to have your public IP address, say for example your public IP is 173.77.77.77

The setup tries to figure out your public IP address, check if it got it right:

python3 ./10f.py -p

This will show all the configurations, check ip is set to "173.77.77.77"

If you need to change is:

python3 ./10f.py -p ip 173.77.77.77

In the same way, if you don't use the default 46000 port, but say port 8080

python3 ./10f.py -p port 8080

You need to restart the listener after IP or PORT changes.

When the listener is running (see below), but not before, you can check if the configuration is working:

python3 ./10f.py -test

Run the listener

You might want to use another shell to run the listener but anyway you start it like this:

python3 ./listener.py

Bootstrap the node swarm

If you have all set up, and the listener running, you still need to give it access to the tenfingers network.

Download a test link

and then use 10f to download a small smample file from the network:

Linux:

./10f ./testlink.10f

Linux python:

python3 ./10f.py ./testlink.10f

Windows:

10f.exe testlink.10f

Windows python

python3 10f.py testlink.10f

Next step

Now that you are all set (felicitations, you got it all up and running!), see the next step Usage for how to share data: Usage

Usage

Sharing starts with adding some data to the tenfingers system, and then create a link that you can distribute.

Someone else that now has your link, can download the data.

You can then update the data, and the user can download the new data.

The examples are for Linux, for windows it is almost the same, see below.

Sharing a file or a folder

Share the file, for example image.jpg

python3 10f.py -i my_stuff_to_share ./ image.jpg

my_stuff_to_share is the name of the data shared, it is used to extract the link files, update the data and so on. It is just an example and you can share many many different things under different names.

To check out what you have already shared:

python3 10f.py -l

Note: the names ending with _tr and _sub are the translation and substitution files, they are internal files so don't touch them!

Note: The number of 'fingers' is how many times your data is shared by other tenfinger nodes.

To share a folder, say ./images/ just add -f

python3 10f.py -i -f my_stuff_to_share ./ images

If you only want to share .jpg files, you can add a regex:

python3 10f.py -i -f my_stuff_to_share ./ images .\.jpg

Get the link so that you can share it with someone:

python3 -c my_stuff_to_share

Now you should have three files, the link files:

my_stuff_to_share.10f

my_stuff_to_share_tr.10f

my_stuff_to_share_sub.10f

Those together will allow anyone to download the latest shared images (or what ever you share).

Updating data

To update the data you are sharing, you just use the same syntax as creating it, so say you do not longer want to share 'image.jpg' but image2.jpg you can update the my_stuff_to_share link like this:

python3 10f.py -i my_stuff_to_share ./ another_image.jpg

If you changed the image.jpg itself, say it's an art in progress, just reuse the exact same syntax as when you shared it the first time:

python3 10f.py -i my_stuff_to_share ./ image.jpg

You can of course freely decide to share a folder or any other data instead!

Note: Sharing and updates sometimes takes some time.

So you just got my_stuff_to_share.10f from a friend or foe, to check it out just:

python3 10f.py my_stuff_to_share.10f

and it will be downloaded.

Help

There is an inbuilt help that you can use like this:

python3 10f.py -h

And if you want some help with a specific command, like inserting for example ( -i )

python3 10f.py -h -i

will give you some pointers.

More and diverse information

This is mostly work in progress and experimental stuff, checkout and enjoy!

Weekend Projects

Here I have gathered some less quality projects, made quickly to test the network and to see what it can be useful for.

Take the projects as a learning experience, it's a mix of shell commands and python, made with the intent to teach whenever possible. This is not always a success of course.

Note: those are mostly made for Linux with Python, but can surely be tweaked easily.

Sharing your life with Tenfingers Book

Creating your book: (Linux)

Note: this is just an example, feel free to change anyting to your convenience

Note: this is not optimized at all and merely an example for what can be done using the tenfingers sharing protocol.

Create a folder that will contain your lifes story, say /home/loulou/Desktop/TenfingersBook/my_book

In there, create a folder of todays date: 20240930

In there put a file: what i did today.txt and fill it with your thoughts. Maybe you'd like to add a photo?

Go to the base folder (here : /home/loulou/Desktop/TenfingersBook/my_book ) and run this script:

Note: you need to change the TENFINGERS_SRC_DIR variable so it points to where 10f.py lives

#!/usr/bin/bash
# Modify these:
# Where you can find the 10f.py file (and all the other python files)
TENFINGERS_SRC_DIR=${HOME}/tenfingers
# The name of the book you want to create
BOOK_NAME="my_book"
# Where your book is (this folder should contain folders, who themselves contains files)
BOOK_DIR=${HOME}"/Desktop/TenfingersBook"

######################################
# Do not modify these:
cd $TENFINGERS_SRC_DIR
python3 tenfingers_book.py $BOOK_NAME $BOOK_DIR

Run it and you should create three files:

my_book.10f
my_book_tr.10f
my_book_sub.10f

Those are the files you can now send to people who you want to share your wisdom with!

When you have updated your book, just run the script again, and that's it!

Checking ouy your book

So someons just sent you three files:

my_book.10f
my_book_tr.10f
my_book_sub.10f

What should I do with them?

Simple, just make some folder somewhere, put them there and run this script:

Note: you need to change the TENFINGERS_SRC_DIR variable so it points to where 10f.py lives

#!/usr/bin/bash
# Modify these:
# Where you can find the 10f.py file (and all the other python files)
TENFINGERS_SRC_DIR=${HOME}/tenfingers
# The name of the book you want to get (the name of the shortest 10f file)
BOOK_NAME="my_book"

######################################
# Do not modify these:
mkdir -p $BOOK_NAME
cd $BOOK_NAME
rm *.10f  2> /dev/null
cp ../my_book.10f my_book.10f
cp ../my_book_tr.10f my_book_tr.10f
cp ../my_book_sub.10f my_book_sub.10f

TENFINGERS_PY="${TENFINGERS_SRC_DIR}/10f.py"
TENFINGERS_BOOK="${BOOK_NAME}.10f"

python3 $TENFINGERS_PY $TENFINGERS_BOOK

# Clean up
rm "${BOOK_NAME}.10f"
rm "${BOOK_NAME}_tr.10f"
rm "${BOOK_NAME}_tr.atf"
rm "${BOOK_NAME}_sub.10f"
rm "${BOOK_NAME}_sub.atf"

# Get all the chapters:
echo "Get all the chapters"
for file in *.10f; do
    if [ -f "$file" ]; then
        no_extension=${file::-4}
        if [[ $no_extension =~ .(_tr|_sub)$ ]]; then
            #echo "tr/sub file, skipping"
            :
        else
            echo "Get chapter $file"
            python3 $TENFINGERS_PY $file
        fi
    fi
done

# Clean up
rm *.10f  2> /dev/null
rm *.atf  2> /dev/null

Open the index.htm file, and voilĂ  !

A Chat program

Chat with your friends and family!

The chat code needs tkinter, which I foolishly thought was integreated with python.

sudo apt-get install python3-tk

Then you can start the chat_gui.py like this, in the python folder:

python3 chat_gui.py

Diverse stuff

Here I will list lesser needed information, experimental stuff and things I do not yet know what to do with.


There is an inbuilt help function:

python3 ./10f.py -h

If you want help with a specific command, say for example insert ( -i ) just add that:

python3 ./10f.py -h -i

The git repo is here :

https://codeberg.org/Valmond/Tenfingers

You can use the 10f frozen executable alone to download 10f link files.


There is an experimental GUI you can use together with the python installation, it lets you do basic things like upload and download and set parameters.

Just download and run the start_gui.sh in your tenfingers python folder.

You can get it here in the git repositorys script folder


The number of fingers is how many nodes shares your data, it might take some time to find nodes that wants to share your data, especially if the data is big!

Small files are often shared pro bono, the default is that files up to 64KB is stored for free, up to a total of 64MB.


A special thank you to Beej and his extraordinary book: Beej's guide to network programming. Never met him but the book is a must have for any network curius programmer!


If you want to make a chat program, a backup soft or any other kind of tech based on Tenfingers, you might want to check out the python file 'access.py' which contains some simplified functions to do basic things like inserting data or downloading.


Legal

All sources are distributed under the GPL-3.0-or-later licence.

I do not take any kind of responsibility if/when you use these files in whatever way.

Whitepaper

You can find a more thorough explanation about the protocol in the Whitepaper