From a5a8701cc83bc0430b90fb5d87da1acedd144fb6 Mon Sep 17 00:00:00 2001 From: Cheng Date: Sun, 25 Aug 2024 05:32:55 +0000 Subject: [PATCH 1/5] On reflection, using explicit protocol in .gitmodules, so that other people will be less mystified by behavior --- .gitmodules | 6 +++--- wxWidgets | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.gitmodules b/.gitmodules index a63383b..96a5d30 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,12 +1,12 @@ [submodule "libsodium"] path = libsodium - url = ../libsodium.git + url = git://rho.la/libsodium.git branch = rho-fork [submodule "mpir"] path = mpir - url = ../mpir.git + url = git://rho.la/mpir.git branch = rho-fork [submodule "wxWidgets"] path = wxWidgets - url = ../wxWidgets.git + url = git://rho.la/wxWidgets.git branch = rho-fork diff --git a/wxWidgets b/wxWidgets index 9a465d3..aff2cd0 160000 --- a/wxWidgets +++ b/wxWidgets @@ -1 +1 @@ -Subproject commit 9a465d3d39f183e6fd4635f199e5e455d52b58c5 +Subproject commit aff2cd0190c1b87e98862209a6a5c1b3c918c028 From 87d61098e535998db9f60065ccfd700ac5fc4236 Mon Sep 17 00:00:00 2001 From: "reaction.la" Date: Sun, 25 Aug 2024 06:22:09 +0000 Subject: [PATCH 2/5] notes on playing around with nixos --- .gitattributes | 34 ++--- README.html | 158 ++++++++++++++++++++++++ RELEASE_NOTES.html | 52 ++++++++ docs/pandoc_templates/pandoc.template | 2 +- docs/setup/nixos.md | 41 +++++- docs/setup/set_up_build_environments.md | 10 +- public_key.gpg | 29 ----- wxWidgets | 2 +- 8 files changed, 278 insertions(+), 50 deletions(-) create mode 100644 README.html create mode 100644 RELEASE_NOTES.html delete mode 100644 public_key.gpg diff --git a/.gitattributes b/.gitattributes index 3c93bcf..0833179 100644 --- a/.gitattributes +++ b/.gitattributes @@ -4,23 +4,23 @@ # Force the following filetypes to have unix eols and encoding, so that Windows does not break them. # If a file is going to be used on linux and windows, we want it invariant, # rather than automatically translated, because automatic translation always screw things up. -* text=auto eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 -.gitignore text eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 -.gitattributes text eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 -.gitmodules text eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 -*.sh text eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 diff=bash -*.c text eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 -*.cpp text eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 diff=cpp -*.rs text eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 diff=rust -*.py text eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 diff=python -*.h text eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 -*.txt text eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 -*.html text eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 diff=html -*.htm text eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 diff=html -*.md text eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 diff=markdown -*.pandoc text eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 -*.css text eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 diff=css -*.manifest text eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 +* text=auto eol=lf encoding=utf-8, whitespace=trailing-space,space-before-tab,tabwidth=4 +.gitignore text eol=lf encoding=utf-8, whitespace=trailing-space,space-before-tab,tabwidth=4 +.gitattributes text eol=lf encoding=utf-8, whitespace=trailing-space,space-before-tab,tabwidth=4 +.gitmodules text eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 +*.sh text eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 diff=bash +*.c text eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 +*.cpp text eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 diff=cpp +*.rs text eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 diff=rust +*.py text eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 diff=python +*.h text eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 +*.txt text eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 +*.html text eol=lf encoding=utf-8 whitespace=space-before-tab,tabwidth=4 diff=html +*.htm text eol=lf encoding=utf-8 whitespace=space-before-tab,tabwidth=4 diff=html +*.md text eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 diff=markdown +*.pandoc text eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 +*.css text eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 diff=css +*.manifest text eol=lf encoding=utf-8 whitespace=trailing-space,space-before-tab,tabwidth=4 makefile text eol=lf encoding=utf-8 diff --git a/README.html b/README.html new file mode 100644 index 0000000..acfae94 --- /dev/null +++ b/README.html @@ -0,0 +1,158 @@ + + + + + + + README + + + + + + + + + +
+

README

+

pre alpha documentation (mostly a wish list)

+

copyright © and license

+

pre-requisite, Pandoc to build the html documentation from the markdown files.

+

Windows pre-requisites: Visual Studio and git-bash

+

To obtain the source code from which the project can be built, +including this README.html, from the bash command line (git-bash in windows).

+
git clone --recurse-submodules missing url
+

To build the docs, you need pandoc on the path.

+
cd wallet/docs
+./mkdocs.sh
+

To configure and build the required third party libraries in windows, then +build the program and run unit test for the first time, you need to have +Visual studio build tools at their default location)

+
cd wallet
+./winConfigure.bat
+

Or, if you are in the command shell or power shell,

+
.\winConfigure.bat
+

After a pull from remote in which the submodules have changed, the pull +fails to automatically update the submodules by default, and when you +switch or checkout branches, the switch fails to automatically switch +and checkout the brances.

+

After a pull that gives you a status of modified submodules.

+
git submodule update --init --recursive --remote
+

After a checkout or branch switch that gives you a status of modified submodules.

+
git submodule update --recursive
+

The documentation is in pandoc flavored markdown, which is +conveniently edited in vscode with the markdown lint and Pandoc +extensions included and, if you have launched code in the docs directory, +with file/preferences/Extensions/Markdown/Styles set to +pandoc_templates\\style.css, that being the style used by the mkdocs.sh documentation build script.

+

On Windows, if Git Bash and Pandoc has been installed, you should be +able to run this shell file in bash by double clicking on it.

+

if you add the recommended repository configuration defaults to your local repository configuration

+
git config --local include.path ../.gitconfig
+

this will substantially mitigate the problem of submodules failing to +update in pushes, pulls, checkouts, and switches.

+

It will, however, also implement signed commits, and insist you have set up a key pair as +explained in the contributor code of conduct because cryptographic software is under attack from NSA +entryists and shills, who seek to introduce backdoors.

+

.gitconfig also adds several git aliases:

+
    +
  1. git lg to display the git log with committer name from .gitsigners that corresponds to the public key
  2. +
  3. git graph to graph the commit tree with the committer name from .gitsigners that corresponds to the public key
  4. +
  5. git alias to display the git aliases.
  6. +
  7. git utcmt to make a commit without revealing your time zone.
  8. +
+

Pre alpha release, which means it does not yet work even well +enough for it to be apparent what it would do if it did work.

+

Creative Commons License reaction.la gpg key 154588427F2709CD9D7146B01C99BB982002C39F
This work is licensed under the Creative Commons Attribution 4.0 International License.

+ + diff --git a/RELEASE_NOTES.html b/RELEASE_NOTES.html new file mode 100644 index 0000000..f6675d5 --- /dev/null +++ b/RELEASE_NOTES.html @@ -0,0 +1,52 @@ + + + + + + + Release Notes + + + + + + + + + +
+

Release Notes

+

To build and run README

+

pre alpha documentation (mostly a wish list) (In order to read these on this local system, you must first execute the document build script mkdocs.sh, with bash, sed and pandoc)

+

This software is pre alpha and should not yet be released. It does +not work well enough to even show what it would do if it was +working

+

Creative Commons License reaction.la gpg key 154588427F2709CD9D7146B01C99BB982002C39F
This work is licensed under the Creative Commons Attribution 4.0 International License.

+ + diff --git a/docs/pandoc_templates/pandoc.template b/docs/pandoc_templates/pandoc.template index 24e1368..b4f858d 100644 --- a/docs/pandoc_templates/pandoc.template +++ b/docs/pandoc_templates/pandoc.template @@ -26,7 +26,7 @@ $endfor$ $for(header-includes)$ $endfor$ - $header-includes$ +$header-includes$ $if(math)$ $if(mathjax)$ diff --git a/docs/setup/nixos.md b/docs/setup/nixos.md index c79ab49..7070927 100644 --- a/docs/setup/nixos.md +++ b/docs/setup/nixos.md @@ -257,4 +257,43 @@ Setup is also decribed as ridiculously easy -- compare and contrast with much gr And the huge disadvantage that it only exists for Nix 23.05, while the latest "stable" (not very stable at all) release is 24.05 -It also has only a minimal nginx setup. Not at all sure what will happen when I combine it with a real nginx setup. \ No newline at end of file +It also has only a minimal nginx setup. Not at all sure what will happen when I combine it with a real nginx setup. + +We have to pin to a particular release: The following code is an example of such pinning + +```nix +{ config, pkgs, ... }: { + imports = [ + # builtins.fetchTarbll pins Nixos to a particular release, prevents the lastest release (24.05)from being default installed. + (builtins.fetchTarball { + # Pick a release version you are interested in and set its hash, e.g. + url = "https://gitlab.com/simple-nixos-mailserver/nixos-mailserver/-/archive/nixos-23.05/nixos-mailserver-nixos-23.05.tar.gz"; + # To get the sha256 of the nixos-mailserver tarball, we can use the nix-prefetch-url command: + # release="nixos-23.05"; nix-prefetch-url "https://gitlab.com/simple-nixos-mailserver/nixos-mailserver/-/archive/${release}/nixos-mailserver-${release}.tar.gz" --unpack + sha256 = "0000000000000000000000000000000000000000000000000000"; + }) + ]; + + mailserver = { + enable = true; + fqdn = "mail.example.com"; + domains = [ "example.com" ]; + + # A list of all login accounts. To create the password hashes, use + # nix-shell -p mkpasswd --run 'mkpasswd -sm bcrypt' + loginAccounts = { + "user1@example.com" = { + hashedPasswordFile = "/a/file/containing/a/hashed/password"; + aliases = ["postmaster@example.com"]; + }; + "user2@example.com" = { ... }; + }; + + # Use Let's Encrypt certificates. Note that this needs to set up a stripped + # down nginx and opens port 80. + certificateScheme = "acme-nginx"; + }; + security.acme.acceptTerms = true; + security.acme.defaults.email = "security@example.com"; +} +``` \ No newline at end of file diff --git a/docs/setup/set_up_build_environments.md b/docs/setup/set_up_build_environments.md index 3f7bff0..ade10ef 100644 --- a/docs/setup/set_up_build_environments.md +++ b/docs/setup/set_up_build_environments.md @@ -3073,13 +3073,21 @@ directory url (with no trailing backslash). ### Git Daemon +Now integrated into Git, needs no separate install. + +When correctly set up, the url for repo foo.git is `git://host/foo` + git-daemon will listen on port 9418. By default, it will allow access to any directory that looks like a git directory and contains the magic file git-daemon-export-ok. This is by far the simplest and most direct way of allowing the world to get at your git repository. +[Git documentation for Git daemon](https://git-scm.com/docs/git-daemon) + +[Git Book for Git daemon](https://git-scm.com/book/en/v2/Git-on-the-Server-Git-Daemon) + ### Gitweb -Does much the same thing has git-daemon, makes your repository public with a +Does much the same thing as git-daemon, makes your repository public with a prettier user interface, and somewhat less efficient protocol. Gitweb provides a great deal of UI for viewing and interacting with your diff --git a/public_key.gpg b/public_key.gpg deleted file mode 100644 index 03f2f9d..0000000 --- a/public_key.gpg +++ /dev/null @@ -1,29 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- - -mDMEX1SfJRYJKwYBBAHaRw8BAQdAcXlEHKWZNw9o2Fj5ssAjCmsbthDz0DVzYKxF -pnwiDjm0JENoZW5nIFNoZW5nIDxDaGVuZ1NoZW5nQGZha2VtYWlsLmNoPoiQBBMW -CAA4AhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEECW6uFvuNYuddJDGZvESC -5JZzcRwFAmH4/lYACgkQvESC5JZzcRxRcAEA2uPehywNxbp9DON0CJ578vbmX7qt -OmDjsHovsQ5I1W8BAMbQyOcIRYQlPTijl3I/R4sWLZ9hEYIbP+FS3JtbDYAFiJAE -ExYIADgWIQQJbq4W+41i510kMZm8RILklnNxHAUCX1SfJQIbAwULCQgHAgYVCgkI -CwIEFgIDAQIeAQIXgAAKCRC8RILklnNxHPteAQDFs4dbz7I1a5VoKXMupmSW3MMP -uHChIilz9P2JYX6oOAEAx4+tmu7DIGwBgNQZKuxlVgWYavkuEGYkLYdGgIBpwQi4 -OARfVJ8lEgorBgEEAZdVAQUBAQdATTzhgBNNONqRkUDfj/dtps9n+BvZMcS1t6cD -tjLejT0DAQgHiHgEGBYIACAWIQQJbq4W+41i510kMZm8RILklnNxHAUCX1SfJQIb -DAAKCRC8RILklnNxHPB4AP4kKI590T81yFAEkcfKA3fFRxcDJwUqus2L4GpckyMq -ngEAv9viVp3aHvlXZMpQ4prvzC/Gpzs3TrsDXWEhg5PzDA+4MwRhhoZwFgkrBgEE -AdpHDwEBB0CuAAgmkYQetnz3BJ0ALBuVKn1aeBjMq+1sPKeyUDnjWIjvBBgWCAAg -FiEECW6uFvuNYuddJDGZvESC5JZzcRwFAmGGhnACGyIAgQkQvESC5JZzcRx2IAQZ -FggAHRYhBCuf+rsp/waNpunfl1ccOpw7nm/KBQJhhoZwAAoJEFccOpw7nm/KjykA -/2TcUdtOXUCRJsM+SvoG3xWjk7iCOuSTWsUkap9ha6daAQD2hLRL9/Z6c2mREKXz -7nR416Cs1YUACs98wTD5pBuYAk76AP9vr+uVoKbjf/q230SBNen2Hjhk8g+JD4Cu -ZpFKuVwZhQEAopykWKujX5dGU/1352QrUcoCVYbTMiXGIxL9CPrUzw+4MwRh2A+7 -FgkrBgEEAdpHDwEBB0A9rVFSCmvpkkeSCmB+PDYqnJsz7Fq0b9NkN87xQ854i4j1 -BBgWCAAmFiEECW6uFvuNYuddJDGZvESC5JZzcRwFAmHYD7sCGyIFCQHhM4AAgQkQ -vESC5JZzcRx2IAQZFggAHRYhBIDfnjfH6rZKSICJDtUTAeF2sxgoBQJh2A+7AAoJ -ENUTAeF2sxgogxsBAMAV8d12lHhnL64qbG+llKJKEXI1ZTSHLEcdXN5dOo6zAP9j -Na3cNcEwxreUlgUZhOjagxrMnGpd5l/pHVG/7ijECa/8AQDpNtaC1G/6bIwpekky -KdbZtliClpajSD7zoj2Bxe24nAD/TSwGmXzqr9+VeOctO/m6q+QKwFa3mGyOUWpp -oTNQfA0= -=Kusp ------END PGP PUBLIC KEY BLOCK----- diff --git a/wxWidgets b/wxWidgets index aff2cd0..8037402 160000 --- a/wxWidgets +++ b/wxWidgets @@ -1 +1 @@ -Subproject commit aff2cd0190c1b87e98862209a6a5c1b3c918c028 +Subproject commit 8037402f847136a279e80f3813113aad7fac506f From 05d7935493b8f9e7e0ff3a8186ffa0bc9d4a320d Mon Sep 17 00:00:00 2001 From: "reaction.la" Date: Sun, 25 Aug 2024 06:58:06 +0000 Subject: [PATCH 3/5] for some reason, git wants a separate commit for updating wxWidgets to master --- wxWidgets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wxWidgets b/wxWidgets index 8037402..aff2cd0 160000 --- a/wxWidgets +++ b/wxWidgets @@ -1 +1 @@ -Subproject commit 8037402f847136a279e80f3813113aad7fac506f +Subproject commit aff2cd0190c1b87e98862209a6a5c1b3c918c028 From 9354c66e19f45bce21c244ca65e23aa9c91e4868 Mon Sep 17 00:00:00 2001 From: "reaction.la" Date: Wed, 28 Aug 2024 04:23:56 +0000 Subject: [PATCH 4/5] we need the readme visible in the root directory, for other people to get started --- tobedone.txt | 160 --------------------------------------------------- winConfig.sh | 17 ------ wxWidgets | 2 +- 3 files changed, 1 insertion(+), 178 deletions(-) delete mode 100644 tobedone.txt delete mode 100644 winConfig.sh diff --git a/tobedone.txt b/tobedone.txt deleted file mode 100644 index 8daeb5b..0000000 --- a/tobedone.txt +++ /dev/null @@ -1,160 +0,0 @@ -Need to write up - docs/lightning_layer.html - docs/white_paper.html - docs/white_paper_YarvinAppendix.html - redo paxos from the point of view that peer knows that majority of stake holders know that everyone knows that everyone knows that everyone knows. - - - - -UI design. - -qBittorrent has tabs if there is more than one line, suppresses the tabs if there is only a single tab. - -Steal the thunderbird design for messaging, and base it on the wxWidget aui app, which is similar. - -Have a tree of wallet names, whose branches are messages, with subtrees of inbox, inbox read, inbox unread, sent, trashed, spammed, or dealt with messages, plus any other subnodes the user might create. - -Have only zero or one wallet loaded in a single frame and single gui process, as multiple wallets in the same frame is a confusing exception with confusing UI required, which UI is a permanent tax on the user, albeit zero or one is no harder on the programmer than zero or many, if you are going to have to put up tabs anyway). - -We have two pools of data on disk, the wallet, which contains private information, and the pool, which contains public information. The wallet contains links to the pool. - -A message view should show a message in the context of previous messages two or from that entity, as should a message composition view (steal from wordpress sms) - -For wallet creation, we use a series of pages based on "https://www.monero.how/tutorial-how-to-use-the-monero-gui-wallet" - -When you launch evolution, the debian email client, its frame is occuppied by a wizard, that guides you through initial email setup. If you cancel out, you enter the entirely useless regular main window, from which you can add an email account through the regular interface. - -Evolution and Visual studio allow you to cancel out of the wizard into a mainscreen that comes up, with most of its operations being useless and cheerfully displaying no data to be operated on, the only effective operations being to manually do what the wizard does. This is a tax on the programmer, and I don't think I will allow that because every special case has to be unit tested, and that winds up being twice as many unit tests, albeit trivial unit tests. If you close your wallet file, you get dropped back into the wizard, and if you load a new wallet file, the old wxPanel is displaying the old wallet file destroyed, thereby closing the database connection which is owned by wxPanel, and a new one created. It is trivial to allow multiple wallet panels to be displayed, but more UI is more user confusion. - -And twice as many ways of doing something is twice as many things to be written, debugged, and for the user to learn. - -If you have no wallet open, you have no wallet manipulation UI on the screen, and if you have two wallets open, the UI and database connection for the previous wallet is immediately destroyed as soon as the UI for the new one is successfully constructed. - -We have a permanent frame, but its main wxPanel object can be destroyed and replaced, and one of the wxPanel objects it might contain can itself contain multiple tabbed wxPanel objects. - -Messaging protocol: We don't want to reinvent the wheel - and we want to support video conferencing, which absolutely necessitates integration with someone else's messaging. Basically we want to pillage someone else's messaging, but have email like interface for at least some messages (primarily the ones money related) - -Serverless: BitMessage, Briar, Echo, Jami, Tox - -Echo supports media synchronization, which is handy - -Ricochet is a tor based messaging system, to Tor addresses. - -Jami and qTox support video - -qtox uses qt, and more modern encryption than Jami. - -Jami uses forty character hashes as addresses, which on reflection I probably need to take care of chain-of-signatures identities. - -Secrets, encryption, and append only data structures are only meaningful and useful when different entities have different unshared secrets. - -Hence, we are approaching the point where we cannot write anything useful, except for communicating entities. - -Time for a step that requires communication, peers chatting with peers. - -But before I can do that, have to implement some data for them to chat about. - -So, names identified with a rowid integer, a public key, a set of nameserver rowids, and network address. Initially we will not implement nameservice, nor any mechanism for ensuring that the list represents a global consensus. The data will be stored on a machine local database, and the secret keys in wallet files on user local databases. - -And the first thing we set up is chat about network addresses, in the clear, and not securely identified, and the only thing stored in a user wallet file is a set of master keys, possibly cold, and a set of derivation paths from those master keys, so that given a public key, you can check if you should be able to construct its secret key. - -When we initially set up communication, we fail to make any use of the public key information. Once we have a completely insecure and totally trust based system working, with secrets available, then we start using those secrets to harden it. But we make the secrets available, though not the machinery for using them, before we implement communication. - -So, order of implementation: - -1. Database containing human readable names, public keys, secret keys, network addresses - -2. Network Chat about network addresses, names, and public keys. - -3. Put those secret keys to work on those public keys. - -We then set up serialization and deserialization of a view into this database that maps network addresses to rowids. - -The first step is an entity that on launch, checks its database for who to talk to, and then updates network address database to reflect the append only updates of the entities listed, in the clear, and unauthenticated. - -Then we institute encryption and ids, which requires each entity to know (and have hot) its secret key. Then we introduce indirection on public keys, so that entities can have cold secrets, derived secrets, and use hot, time limited, derived secrets. - -But before we can do work on authority and secrets, have to have communication, for secrets, authority, and authentication have no meaning without communication. And since we have to communicate something, we will start by communicating the map between rowids and network addresses. - -When we finally get around to having the equivalent of bitcoin wallet files, they will be sql3 format files, and will have no serialization format. - -But everything else the could potentially be attested to by the canonical total blockchain, will have a serialization and deserialization format, and will therefore be stored in serial files, which might well have a somewhat human intelligble ascii armor format, among their formats. - -I would like to have software that makes something like a blog with comments and updates available through a bittorrent like mechanism. But that can wait. The first thing required is a nameserver like mechanism that distributes authoritative keys for names. - -We start out with database entries listing public keys of names, and network addresses for names, and serialization and deserialization for these database entries. - -We then add database entries for scalars (private keys) corresponding to the public keys - with different entities owning different names. We make one hard coded name owner of the authoritative list of names, - -And then we add networking, so that entities can get updates of the list, and updates of the network addresses (for which each name is its owning authority.) - -We then make a blockchain for name ownership, with complete power the one hard coded name to revise it as it pleases. - -We then replace the hard coded name with a set of names with ownership shares attested to, anc changeable in, the blockchain. - -We then introduce the the paxos protocol for agreement on new ownership and new share ownership. We then introduce the rule that no agreement will happen unless the updates are rightly derived from signed transfers by the previous owners, which updates are recorded in the blockchain. - -We then have proof of stake crypto currency and namesystem, albeit one that is far from scalable. Call that the alpha release - not yet ready for prime time, but ready for people to look at and play with. - - - - -We need unit test to interface with the gui, so that it pops up the unit test in progress modeless window, which then gets replaced by a modeless window displaying the result of the unit test. This will save endless clicking around to view the results of unit test, and is a necessary platform to make unit test accessible from the gui, and capable of unit testing gui features. - - -Why do the constructors in my unit test that build points from naked data work? - -I want to make the naked bytestream available, but only by explicit invocation, and I want to make it writeable, but only by explicit invocation. - -So I was thinking I would have an explicit templated constructor that forwarded construction arguments, but to my surprise, seems to exist by default or implicitly, which is potentially dangerous. - - -Cannot write unit test for the sqlite code till I have secrets generation. - -cannot finish the secrets code till I have serialize and deserialize - -Redo the hash function to run off serialize. - -Fix serialize integer so that it actually gets compiled and called. - -Then finish the secrets code. - -Introduce a special type deserialize, and have constructors that use it for each particular type. thus point(deserialize(uint8_t*p, unsigned int size)) -Or maybe we just require the class to support the method "deserialize" - -But the method "serialize" has to return a span, or a class derived from span, so I guess "deserial" is a class that supports a method which that given a length, returns a span, or throws an exception - -So, maybe we have a class that supports the methods "serialize" and "deserialize", and also a constructor called "serial", but which has to be invoked explicitly. - -For feeding stuff into a hash, we just want an function "serialize" that returns a span. And for composite objects, we are just going to copy each of these into a bigger span. We are not going to type serialized objects - we type a request and a response, which type tells not only what thing this is, but what is to be done with it. (A request will say "this is request x of type X", and a response will say "this is a response of type Y to request x of type X", and then the entity replied to has to figure out how to parse it from that information. It will parse the data with the schema appropriate for that particular x, X, and Y. A patricia merkle tree, on the other hand, is a tree of blocks, and each block is a pile of changes to the total state, and there will probably be many possible kinds of change to the total state. So for each such change, the change will say "this is a change of type Z", and then you parse the data with the schema appropriate for a change of type Z) So maybe for every possible kind of item in the block, and every possible request, and every possible reply, we have a unique schema identifier. We also have identifiers for groups of schemas, so that every entity announces which groups of schemas it can handle or is willing to handle. - -But suppose we want to use the same function to feed stuff into a big stream for output, OK, we need another type for big streams of output, and yet another type for big streams of input. And you feed blobs into the stream, and copy them out of the stream. Suppose we have an object composed of two scalars and a hash, such as a signature. We would like to be able to serialize it also. But that object serialized is just a blob. - -How about an object derived from span, but with an explicit constructor, so that in order to convert an arbitrary c of type C, into an arbitrary b of type B, you would have to explicitly say B(deserialize(serialize(c)) -And B is going to ask the deserialize object for a certain number of bytes, and if it does not have them (because it is actually merely a span), it is going to throw. -But we can template B's constructor to cheerfully accept any class that has the member deserialize(gsl::spandeserialize(unsigned int) which returns a span - difference being that if you tell it to deserialize a span, it writes into that span, an if you tell it to return a span, that is for you to read. - -We want to be able to freely convert blobs into ristretto objects and back again, and we want the conversion to be automatic in the operator <<, but not automatic elsewhere in the code. We don't want the compiler automaqically converting every distinct kind of ristretto255 object into every other. - -We accomplish this with explicit constructors in class, not templated, which construct from an std::array and an explicit constructor which invoke a templated function std::array& deserialize(T) reinterpret_cast&> works provided that std::is_pod is true. The templated function throws if the data is insufficient, it simply points if the data is the correct size, and later, if we have a deserial class with a method deserialize(int), it advances the the pointer in that class. - -deserialize(T) returns a reference to the array if T is an array of the correct size, and fails at compile time if the array is the wrong size or type, returns a reference to an array of the correct size if T is a gsl::span of the correct size and type, throws at runtime otherwise, and generates a call to the member deserialize(int) if T supports the method gsl::spandeserialize(int) - -serialize(T) returns an array or a reference to an array of specific size, or a gsl::span, depending on the type of T. - -serialize is a noop. - -Explicitly invoking serialize(T) throws away our elaborate constructed type information, while T(deserialize(U)) adds it back in again, which allows us to deal with everything as pointers to typeless streams of bytes. But we normally keep type information around, and we can only discard it explicitly, and only add it back explicitly. - -Serialize and deserialize are intended to be metacode that drops us back to simple pointers to raw bytes. Maybe we will have a special explicit class of pointer to raw bytes and only construct typed things from this class of pointer. class deserial_array:std::array{}; and have a bunch of explicit constructors and type converters. Or perhaps aggregate initialization will suffice. - -The problem of the partial hash being finalized twice can be solved by making the right hand side a pure rvalue: operator <<=(multstage_hash&&) - -Nah, too clever by half use of C++17 features will throw you into template code hell - better just to introduce a flag that throws if the same data structure is finalized twice. - -When we hash a char *, we assume the data is zero delimited, and include the delimiter in the material to be hashed, so that -hash<256> x <<="quick brown "<<"fox"; -hash<256> y <<="the quick" <<"brown fox"; -will produce two different hashes. diff --git a/winConfig.sh b/winConfig.sh deleted file mode 100644 index 381fd8e..0000000 --- a/winConfig.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -set -e -set -x -git submodule foreach --recursive 'git reset --hard' -git submodule foreach --recursive 'git clean -xdf' -git submodule foreach --recursive 'git switch rho-fork' -git submodule foreach --recursive 'git switch --detach' -git submodule update --init --recursive -git config --local include.path ../.gitconfig -set +e -set +x -set -e -src=libsodium/libsodium.vcxproj -dest=libsodium/libsodium.vcxproj -wxwin=wxWidgets -# if [[ "$OSTYPE" == "linux-gnu"* ]]; then -# fi diff --git a/wxWidgets b/wxWidgets index aff2cd0..9a465d3 160000 --- a/wxWidgets +++ b/wxWidgets @@ -1 +1 @@ -Subproject commit aff2cd0190c1b87e98862209a6a5c1b3c918c028 +Subproject commit 9a465d3d39f183e6fd4635f199e5e455d52b58c5 From 5823526630b803ce7b410063e7df5763956f1e65 Mon Sep 17 00:00:00 2001 From: "reaction.la" Date: Wed, 28 Aug 2024 09:57:19 +0000 Subject: [PATCH 5/5] creating a README in accordance with Github and Gitea standards --- README.html | 158 ---------------------- docs/rootDocs/README.md => README.md | 64 ++++++--- docs/setup/contributor_code_of_conduct.md | 38 +----- 3 files changed, 49 insertions(+), 211 deletions(-) delete mode 100644 README.html rename docs/rootDocs/README.md => README.md (54%) diff --git a/README.html b/README.html deleted file mode 100644 index acfae94..0000000 --- a/README.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - README - - - - - - - - - -
-

README

-

pre alpha documentation (mostly a wish list)

-

copyright © and license

-

pre-requisite, Pandoc to build the html documentation from the markdown files.

-

Windows pre-requisites: Visual Studio and git-bash

-

To obtain the source code from which the project can be built, -including this README.html, from the bash command line (git-bash in windows).

-
git clone --recurse-submodules missing url
-

To build the docs, you need pandoc on the path.

-
cd wallet/docs
-./mkdocs.sh
-

To configure and build the required third party libraries in windows, then -build the program and run unit test for the first time, you need to have -Visual studio build tools at their default location)

-
cd wallet
-./winConfigure.bat
-

Or, if you are in the command shell or power shell,

-
.\winConfigure.bat
-

After a pull from remote in which the submodules have changed, the pull -fails to automatically update the submodules by default, and when you -switch or checkout branches, the switch fails to automatically switch -and checkout the brances.

-

After a pull that gives you a status of modified submodules.

-
git submodule update --init --recursive --remote
-

After a checkout or branch switch that gives you a status of modified submodules.

-
git submodule update --recursive
-

The documentation is in pandoc flavored markdown, which is -conveniently edited in vscode with the markdown lint and Pandoc -extensions included and, if you have launched code in the docs directory, -with file/preferences/Extensions/Markdown/Styles set to -pandoc_templates\\style.css, that being the style used by the mkdocs.sh documentation build script.

-

On Windows, if Git Bash and Pandoc has been installed, you should be -able to run this shell file in bash by double clicking on it.

-

if you add the recommended repository configuration defaults to your local repository configuration

-
git config --local include.path ../.gitconfig
-

this will substantially mitigate the problem of submodules failing to -update in pushes, pulls, checkouts, and switches.

-

It will, however, also implement signed commits, and insist you have set up a key pair as -explained in the contributor code of conduct because cryptographic software is under attack from NSA -entryists and shills, who seek to introduce backdoors.

-

.gitconfig also adds several git aliases:

-
    -
  1. git lg to display the git log with committer name from .gitsigners that corresponds to the public key
  2. -
  3. git graph to graph the commit tree with the committer name from .gitsigners that corresponds to the public key
  4. -
  5. git alias to display the git aliases.
  6. -
  7. git utcmt to make a commit without revealing your time zone.
  8. -
-

Pre alpha release, which means it does not yet work even well -enough for it to be apparent what it would do if it did work.

-

Creative Commons License reaction.la gpg key 154588427F2709CD9D7146B01C99BB982002C39F
This work is licensed under the Creative Commons Attribution 4.0 International License.

- - diff --git a/docs/rootDocs/README.md b/README.md similarity index 54% rename from docs/rootDocs/README.md rename to README.md index c860dcc..d81f3ca 100644 --- a/docs/rootDocs/README.md +++ b/README.md @@ -1,51 +1,77 @@ ---- -title: >- - README ---- +About +----- + +Wallet is open source software intended to become the manager of hierarchical + deterministic keys for a social network that a superset of the Bitmessage social net, + for securely pseudonymous uncensorable public communication, + and securely private communication. (Telegraph looks like +it will not be private for much longer). + +You cannot have truly end to end encryption, except you control your own keys directly. + +To make an actually useful social net requires a lot of engineers doing a lot of work, which requires funding, which requires a a profit model. The current business plan being to [eat SWIFT's lunch](./docs/manifesto/SWIFT.html), by creating an environment in which one can create and operate the necessary Daos. + +The rest of the documentation is in Pandoc markdown, rather than Gitea or Github markdown, so you will have to build it before any of these links work. [pre alpha documentation (mostly a wish list)](docs/index.htm) [copyright © and license](./license.txt) + +Prerequisites +--------- + pre-requisite, Pandoc to build the html documentation from the markdown files. -Windows pre-requisites: Visual Studio and git-bash +Windows pre-requisites: Visual Studio and git-bash. This software is supposed to be cross platform, and is unlikely to get traction with highly motivate early adopters unless it is cross platform, but currently only builds on Windows. + +Download +--------- To obtain the source code from which the project can be built, including this README.html, from the bash command line (git-bash in windows). ```bash -git clone --recurse-submodules missing url +# assuming Pandoc is installed, and git-bash if you are on +# windows +git clone --recurse-submodules https://gitea.rho.la/cheng/wallet.git +wallet/docs/mkdocs.sh ``` -To build the docs, you need pandoc on the path. +The above download relies on `https` for security, but `https` is vulnerable to enemy action by any adversary sufficiently powerful to have a certificate authority in his pocket, so our identity model relies on ssh keys, not domain names, so if you intend to make contributions, it would be preferable to create an account on `gitea.rho.la` with a fake email, +upload your ssh public key to that account, and clone using `ssh` instead of `https` -```bash2 -cd wallet/docs -./mkdocs.sh +```bash +git clone --recurse-submodules gitea@gitea.rho.la:cheng/wallet.git +wallet/docs/mkdocs.sh ``` +To build the docs, including the license file, you need Pandoc on the path. + +```bash +cd wallet +docs/mkdocs.sh +``` + +Setup +------ + To configure and build the required third party libraries in windows, then build the program and run unit test for the first time, you need to have Visual studio build tools at their default location) -```bash2 +```bash cd wallet -./winConfigure.bat +msvc/winConfig.bat ``` Or, if you are in the command shell or power shell, ```bat -.\winConfigure.bat +msvc\winConfigure.bat ``` -After a pull from remote in which the submodules have changed, the pull -fails to automatically update the submodules by default, and when you -switch or checkout branches, the switch fails to automatically switch -and checkout the brances. - -After a pull that gives you a status of modified submodules. +After a pull that gives you a status of modified submodules, a to fix the submodules ```bash git submodule update --init --recursive --remote diff --git a/docs/setup/contributor_code_of_conduct.md b/docs/setup/contributor_code_of_conduct.md index c7016a2..d710bc3 100644 --- a/docs/setup/contributor_code_of_conduct.md +++ b/docs/setup/contributor_code_of_conduct.md @@ -131,7 +131,7 @@ identified cryptographically, rather than through the domain name system. then at the root of your repository ```bash -ssh-keygen -t ed25519 -f .git/gandalf #to create your key pair +ssh-keygen -t ed25519 - C gandalf -f .git/gandalf #to create your key pair git config user.signingkey .git/gandalf.pub #tell git to use this key pair git config user.name gandalf #will be ignored git config user.email gandalf@ #fake email will be ignored @@ -146,7 +146,7 @@ git config include.path ../.gitconfig #sets various defaults, ssh signing among displayed by the git aliases of `.gitconfig` The nym in `.gitsigners` is the one that matters, though `user.email` - and `user.name` should be the same or sufficiently similar to + and `user.name` should be the same or sufficiently related to show you are not up to anything funny. # No race, sex, religion, nationality, or sexual preference @@ -242,47 +242,17 @@ attempts to develop software is going to survive. Linux is a dead man walking. # Style -Contributions should be gpg signed. - -Never use any email address on a gpg key related to this project -unless it is only used for project purposes, or a fake email, or the -email of an enemy. We don't want Gpg used to link different email -addresses as owned by the same entity, and we don't want email -addresses used to link people to the project, because those -identities would then come under state and quasi state pressure. - -if you add the recommended repository configuration defaults to your local repository configuration - -```bash -git config --local include.path ../.gitconfig -``` - -This will implement signed commits and will insist that you have `gpg` on your path, -and that you have configured a signing key in your local config. - -This may be inconvenient if you do not have `gpg` installed and set up. - `.gitconfig` adds several git aliases: 1. `git utcmt` to do a commit without recording your timezone in the git history -1. `git lg` to display the gpg trust information for the last few commits. - For this to be useful you need to import the repository public key - `public_key.gpg` into gpg, and `‑‑lsign` that key. +1. `git lg` to display the .gitsigner trust information for the last few commits. 1. `git graph` to graph the commit tree with signing status 1. `git alias` to display the git aliases. -To only pull signed commits from people you have listed: - -```bash -git config merge.verifySignatures true -gpg --import public_key.gpg -gpg --lsign 096EAE16FB8D62E75D243199BC4482E49673711C -``` - We ignore the Gpg Web of Trust model, and instead use the Zooko identity model. -We use Gpg signatures to verify that remote repository code +We use ssh signatures to verify that remote repository code is coming from an unchanging entity, not for Gpg Web of Trust. Web of Trust is too complicated and too user hostile to be workable or safe. No one ever used it in the intended manner.