Re: GSoC 2024: gnunet-gtk gtk4 upgrade

2024-02-28 Thread LRN

On 28.02.2024 3:20, Jacki wrote:


But I assume it's also possible to use Cambalache already. Most
important functionality should work.



It's also possible to write UI files by hand instead of using Glade.



On Tue, 2024-02-27 at 20:58 +0100, Christian Grothoff wrote:

Let me just say this: using a RAD tool like Glade is just the only
logical thing, it is 1000% more productive for UX development then
doing
the building of Gtk objects by hand. So for the sake of sanity,
please
use *some* RAD tool. Besides, AFAIK GtkBuilder isn't deprecated, just
Glade itself is being rewritten/replaced.  We used Glade for quite a
while despite it being WIP/in beta, with GNOME's reluctance to
declare
something stable I'm not sure a WIP RAD tool is inherently a bad
idea.
But I *am* sure that doing gtk_box_add() by hand is the road to
insanity.  So I would very strongly recommend using Cambalance ---
and
to use the opportunity to clean up the GUIs ;-).

On 2/27/24 20:51, Schanzenbach, Martin wrote:

I think our use of glade is historical.
It just made sense to somebody (not me, my guess is Christian).

I personally have no issue with moving away from glade as RAD tool
as I
find it very cumbersome myself.
Note, however, that it will also mean writing a lot of code that is
currently hidden behind those glade XML files.

OTOH moving to a WIP RAD tool is also not such a smart idea, maybe.
But
that depends on the maturity of cambalanche, which I cannot judge
myself
right now as I have never tried it.

BR

On 27.02.24 20:19, Gotam Gorabh wrote:

Hello Martin,

     Note that migration from gtk3 to gtk4 especially for gnunet-
gtk is
not
     trivial: We use libglade, which does not exist for gtk4.
     We will need to decide if we want to migrate to something
like

https://blogs.gnome.org/xjuan/2023/09/28/cambalache-0-16-0-released/
 
<

https://blogs.gnome.org/xjuan/2023/09/28/cambalache-0-16-0-release
d/> or
     something different entirely.


Why can't we use the proper GObject concept like other gnome
application does? E.g. GNOME Settings,  Nautilus, etc. which can
handle the properties, and signals in a structured way.

Thanks. Regards

Gotam Gorabh








--
O< ascii ribbon - stop html email! - www.asciiribbon.org



OpenPGP_signature
Description: OpenPGP digital signature


[GNUnet-developers] The function of GNUNET_SCHEDULER_FdInfo->sock

2019-04-15 Thread LRN
What is it used for? I did grep the code, but some things are unclear.
Specifically, this field is sometimes used with the calls that look like:

GNUNET_NETWORK_fdset_test_native (ws,
  pos->fdi->sock))

Does that imply that the sock field is interpreted as a socket descriptor in
these cases? I.e. GNUnet is not trying to fill fdset with file descriptors for
local files?



signature.asc
Description: OpenPGP digital signature
___
GNUnet-developers mailing list
GNUnet-developers@gnu.org
https://lists.gnu.org/mailman/listinfo/gnunet-developers


[GNUnet-developers] Missing gnunet_reclaim_plugin.h

2019-04-15 Thread LRN
That file is mentioned in src/include/Makefile.am, but it's not in git.



signature.asc
Description: OpenPGP digital signature
___
GNUnet-developers mailing list
GNUnet-developers@gnu.org
https://lists.gnu.org/mailman/listinfo/gnunet-developers


Re: [GNUnet-developers] New README.md and Github

2018-08-02 Thread LRN
On 02.08.2018 14:58, Nils Gillmann wrote:
> GNOME is still a GNU project, right? Because they have a very active mirror 
> account:
> https://github.com/GNOME
> 
> Just as an example for GNU on Github.

Gnome is, in general, lax on the software freedom purity issue. It also
recently set up its own gitlab instance[1], so while that Github mirror will
probably continue to exist (for the reasons already stated earlier), all the
action (issue tracking, git pushes, branches, personal repositories) happens
elsewhere.

I don't think that GNUnet, being more ideologically-focused, can be as lax as
the giant, diverse Gnome project.

[1]: http://gitlab.gnome.org/



signature.asc
Description: OpenPGP digital signature
___
GNUnet-developers mailing list
GNUnet-developers@gnu.org
https://lists.gnu.org/mailman/listinfo/gnunet-developers


Re: [GNUnet-developers] Post-quantum symetric crypto

2016-02-22 Thread LRN
On 22.02.2016 23:14, Jeff Burdges wrote:
> 
> Symmetric crypto might start worrying more about being post-quantum
> soon : http://arxiv.org/abs/1602.05973

There was a presentation about post-quantum crypto at 32c3[1], they even
have a website[2].

[1] https://media.ccc.de/v/32c3-7210-pqchacks
[2] http://pqcrypto.org

-- 
O< ascii ribbon - stop html email! - www.asciiribbon.org



signature.asc
Description: OpenPGP digital signature
___
GNUnet-developers mailing list
GNUnet-developers@gnu.org
https://lists.gnu.org/mailman/listinfo/gnunet-developers


Re: [GNUnet-developers] copyright assignment

2015-12-23 Thread LRN
On 23.12.2015 15:10, Christian Grothoff wrote:
> On 12/23/2015 11:52 AM, LRN wrote:
>> On 23.12.2015 12:09, Christian Grothoff wrote:
>>> I would like to ask all contributors/developers to assign their
>>> copyright on GNUnet code to "GNUnet e.V." (https://gnunet.org/ev)
>>>
>>> The reason is that situations continue to pop up where the ability to
>>> dual-license some code would be helpful for the project (similar to how
>>> we added GPL+eCos to GNU libmicrohttpd in the past).  If we had the
>>> copyright with GNUnet e.V., then at least we had a relatively small
>>> group (the annually elected "Vorstand") representing the developers in a
>>> position of making decisions about dual-licensing.
>>>
>>
>> I will sign away my copyright to anything i've contributed to GNUnet (and,
>> if you want, GNUnet-gtk and Extractor; by the way, what's the status of MHD
>> in this regard? Though my contributions to MHD are very minor, so it
>> shouldn't matter), on the condition that my contributions are dual-licensed
>> under GPLv2+ (or GPLv3+, or v4+, or whatever) and LGPLv2.1+ (and i'll bump
>> v2.1+ to v3+ or even higher as needed). The reason for this is that i've
>> tinkered with the utility code (mostly its W32 side) a lot and i would
>> really like to be able to re-use it elsewhere, as an LGPL library or in a
>> project that is LGPL-licensed (in glib and GTK+, for example).
> 
> Ok, I guess I should clarify: I'm not asking you to exclusively assign
> rights to GNUnet e.V., we merely need that GNUnet e.V. has 'shared'
> ownership and thus the right to add additional licenses if necessary
> (obviously there is no plan to abandon GPLv3+).  So you currently have
> and would preserve the right to dual-license your contributions.
> 

I'm still not sure how this stands legally (IANAL, by the way) - is there
such thing as a "shared right to re-license"? I assume you've had some
legal advice in this regard.
And given that (as far as you've told us) this is not the usual copyright
assignment (as practiced by, say, FSF), how does it relate to other
copyright-assignment-ish things? Such as copyright enforcement (can "GNUnet
e.V." go after copyright infringers? Does it intend to?).

But if what you describing is correct, then i'm OK with that kind of
assignment.

-- 
O< ascii ribbon - stop html email! - www.asciiribbon.org



signature.asc
Description: OpenPGP digital signature
___
GNUnet-developers mailing list
GNUnet-developers@gnu.org
https://lists.gnu.org/mailman/listinfo/gnunet-developers


Re: [GNUnet-developers] copyright assignment

2015-12-23 Thread LRN
On 23.12.2015 12:09, Christian Grothoff wrote:
> I would like to ask all contributors/developers to assign their
> copyright on GNUnet code to "GNUnet e.V." (https://gnunet.org/ev)
> 
> The reason is that situations continue to pop up where the ability to
> dual-license some code would be helpful for the project (similar to how
> we added GPL+eCos to GNU libmicrohttpd in the past).  If we had the
> copyright with GNUnet e.V., then at least we had a relatively small
> group (the annually elected "Vorstand") representing the developers in a
> position of making decisions about dual-licensing.
> 

I will sign away my copyright to anything i've contributed to GNUnet (and,
if you want, GNUnet-gtk and Extractor; by the way, what's the status of MHD
in this regard? Though my contributions to MHD are very minor, so it
shouldn't matter), on the condition that my contributions are dual-licensed
under GPLv2+ (or GPLv3+, or v4+, or whatever) and LGPLv2.1+ (and i'll bump
v2.1+ to v3+ or even higher as needed). The reason for this is that i've
tinkered with the utility code (mostly its W32 side) a lot and i would
really like to be able to re-use it elsewhere, as an LGPL library or in a
project that is LGPL-licensed (in glib and GTK+, for example).

-- 
O< ascii ribbon - stop html email! - www.asciiribbon.org



signature.asc
Description: OpenPGP digital signature
___
GNUnet-developers mailing list
GNUnet-developers@gnu.org
https://lists.gnu.org/mailman/listinfo/gnunet-developers


Re: [GNUnet-developers] social messaging progress

2015-09-08 Thread LRN
On 09.09.2015 0:05, tg (x) wrote:
> * Next steps
> 
> Next steps will be a client application to demonstrate the use of the social
> API

How are you going to call it? How about WhatsGNU? :)

-- 
O< ascii ribbon - stop html email! - www.asciiribbon.org


0x922360B0.asc
Description: application/pgp-keys


signature.asc
Description: OpenPGP digital signature
___
GNUnet-developers mailing list
GNUnet-developers@gnu.org
https://lists.gnu.org/mailman/listinfo/gnunet-developers


[GNUnet-developers] Broken udp plugin? ARM test fails

2015-04-23 Thread LRN
When test_gnunet_service_arm runs, it fails for me.
Debugging shows that it segfaults while loading udp plugin (LoadLibrary()
call). The crash happens deep in W32 libs, so i don't know exactly why this
happens.

The change that introduced this error happened somewhere between 23 Feb and 28
Mar of 2015, W32 buildslave (or buildmaster) didn't work at the time, so we
don't have the precise bot reports for that period.

After git-bisecting i found that
27a9e1b1a7e7c1454eae1337c8c63a4fa2d722f6 is the first bad commit
commit 27a9e1b1a7e7c1454eae1337c8c63a4fa2d722f6
Author: grothoff grothoff@140774ce-b5e7-0310-ab8b-a85725594a96
Date:   Sat Mar 7 20:18:54 2015 +

simplify test, log failure cause

git-svn-id: https://gnunet.org/svn/gnunet@35356
140774ce-b5e7-0310-ab8b-a85725594a96

The commit does not touch udp, but does change test_gnunet_service_arm. It's
full of style fixes (hey, grothoff! Thank you for mixing style fixes and
meaningful code changes!), but does have this noticeable chunk of code removed:

-  char *armconfig;
-
-  if (NULL != cfgfile)
-  {
-if (GNUNET_OK !=
-GNUNET_CONFIGURATION_get_value_filename (c, arm, CONFIG,
- armconfig))
-{
-  GNUNET_CONFIGURATION_set_value_string ((struct
GNUNET_CONFIGURATION_Handle *) c,
- arm, CONFIG,
- cfgfile);
-}
-else
-  GNUNET_free (armconfig);
-  }

No explanation is given other than simplify test, log failure cause (hey,
grothoff! Thank you for almost never leaving descriptive commit messages!).

Note that other ARM tests do have this chunk of code.

Adding this chunk back solves the problem for me - test_gnunet_service_arm does
not crash. Here's a patch.

-- 
O ascii ribbon - stop html email! - www.asciiribbon.org
From fef6e0716a6bbca8096414b4e7cfd923f720da7e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=A0=D1=83=D1=81=D0=BB=D0=B0=D0=BD=20=D0=98=D0=B6=D0=B1?=
 =?UTF-8?q?=D1=83=D0=BB=D0=B0=D1=82=D0=BE=D0=B2?= lrn1...@gmail.com
Date: Fri, 24 Apr 2015 00:35:32 +
Subject: [PATCH] Partially revert r35356

---
 src/arm/test_gnunet_service_arm.c | 15 +++
 1 file changed, 15 insertions(+)

diff --git a/src/arm/test_gnunet_service_arm.c 
b/src/arm/test_gnunet_service_arm.c
index 3e4b9db..465652e 100644
--- a/src/arm/test_gnunet_service_arm.c
+++ b/src/arm/test_gnunet_service_arm.c
@@ -38,6 +38,7 @@
 
 #define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 10)
 
+static const struct GNUNET_CONFIGURATION_Handle *cfg;
 
 static int ret = 1;
 
@@ -172,6 +173,20 @@ run (void *cls,
  const char *cfgfile,
  const struct GNUNET_CONFIGURATION_Handle *c)
 {
+  char *armconfig;
+  cfg = c;
+  if (NULL != cfgfile)
+  {
+if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_filename (cfg, arm,
+CONFIG, armconfig))
+{
+  GNUNET_CONFIGURATION_set_value_string ((struct 
GNUNET_CONFIGURATION_Handle
+  *) cfg, arm, CONFIG,
+ cfgfile);
+}
+else
+  GNUNET_free (armconfig);
+  }
   arm = GNUNET_ARM_connect (c, NULL, NULL);
   GNUNET_ARM_request_service_start (arm, arm,
 GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
-- 
1.8.5.3



0x922360B0.asc
Description: application/pgp-keys


signature.asc
Description: OpenPGP digital signature
___
GNUnet-developers mailing list
GNUnet-developers@gnu.org
https://lists.gnu.org/mailman/listinfo/gnunet-developers


Re: [GNUnet-developers] GNUnet and multi-threading

2014-10-22 Thread LRN
On 22.10.2014 15:50, Andrew Cann wrote:
 Over the last couple of days I've been writing a rust library for GNUnet. Rust
 libraries are supposed to use a mult-threaded-with-blocking-calls api design
 but I couldn't find a way to build this around the C library's
 single-threaded-event-loop-with-callbacks design. So I ended up avoiding
 GNUnet's scheduler entirely which meant re-writing all of the socket-level
 stuff. 

 Would people be interested in me implementing this or should I stick to
 re-writing parts of the api in Rust?

IMO, rewrite.

GNUnet scheduler and event loop with callbacks are a necessary evil: GNUnet
avoids multithreading in C, and this is the only way to do it (that i know of).
Any operations that could take any considerable amount of time are broken up
into multiple procedures chained together by the scheduler. This complicates
debugging and makes the code more difficult to read. Don't drag this into Rust,
use tasks for such things.

You may or may not need some kind of event dispatcher loop (possibly multiple
loops?), but it will just spawn tasks to handle stuff, at most. Hopefully. I
don't grok Rust well enough to just make up a working model for a GNUnet
service written in Rust in my head without running it past the compiler to see
if it relies on something unsafe.

Also, interfacing with GNUnet C libraries basically makes your program unsafe:
you call a C library that has very weak safety guarantees (and could have even
more threading-related issues hidden by the fact that GNUnet avoids
multithreading) instead of using the unsafe keyword to isolate small pieces
of code where you, personally, can enforce safety (as it's too complex for the
compiler to handle).

Do spend a few months (years?) re-writing parts of libgnunetutil in Rust on top
of Rust stdlib. That's better than spending decades catching bugs and arguing
with the GNUnet C implementation devs about the interface they present in the
libraries and how it could be made more Rust-friendly.

You'll probably be able to re-use parts of the util librariy related to
crypto/hashes.

-- 
O ascii ribbon - stop html email! - www.asciiribbon.org


0x922360B0.asc
Description: application/pgp-keys


signature.asc
Description: OpenPGP digital signature
___
GNUnet-developers mailing list
GNUnet-developers@gnu.org
https://lists.gnu.org/mailman/listinfo/gnunet-developers


Re: [GNUnet-developers] W32 console woes

2014-01-08 Thread LRN
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

On 08.01.2014 21:31, Nils Durner wrote:
 
 I have found no way to wait (and thus select) on a console 
 handle.
 
 I haven't actually tried it, but the documentation for 
 WaitForMultipleObjects() explicitely specifies Console input as
 a supported handle type (maybe obtained by GetStdHandle()?).

Tried WaitForSingleObject() on the console input handle, didn't work.

 
 Thus it will have to be done with a thread.
 
 Other idea: reimplement the console (like Turbo Pascal for Windows
 did) and add MsgWaitForMultipleObjectsEx() to plibc's select().

Right...At this rate it'll be easier to just use conemu.

 
 OR we could do our usual trick and fork another helper process
 to interact with the console ;-).
 
 That might work, as it turns console I/O into socket or pipe I/O
 (both of which are supported), from the point of view of the
 application.
 
 (Probably) phrased differently: do the actual work in a background 
 process and have a really lean, telnet(.exe) like, console UI. A
 proper Windows implementation would be easy to do then.

Well, i did implement a console helper as grothoff suggested. Worked
for me (though i had to fudge the inheritance a bit to make sure
children do get access to the console).

 
 Which leads me to the question: do we really need interactive
 console on Windows?
 
 Without knowing anything about the background subject, I'd say:
 no. Either have a real graphical UI or forget about it.

That is what i think as well.

- -- 
O ascii ribbon - stop html email! - www.asciiribbon.org
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.11 (MingW32)

iQEcBAEBAgAGBQJSzY48AAoJEOs4Jb6SI2Cwi/gIAIB8BP3j5qxYhFQzYplB9Ls2
5UqZm3uxl5aDaetcaNUCqXmXfDX6u+yKNeDfF01g23sIxmrqxz6ER3z1owO+OKfU
A1UDut20HThHVMwDfueEj8lKaVQxntavC0oYonw5HVtKXQMXc+3/HwyiXIrjdKu5
urxf4pnFQfUNsCF/HAv4Q1K8h5xtppkaHgIMNxZqcCNmC41YHWDpvC9OSPc9qMqR
hv16pmHVp3cKgh7eJ6xs9TjKAF6PvhdEmH8Pu6xZypaot/elQiTE1XC0KEV8DJTg
F5TQnb8nfpN2W00j4k9bHKY1J2ygGzRieqHDmA1sI84EzxKK/QoZCXsNTGU8KOU=
=6bnN
-END PGP SIGNATURE-

___
GNUnet-developers mailing list
GNUnet-developers@gnu.org
https://lists.gnu.org/mailman/listinfo/gnunet-developers


Re: [GNUnet-developers] NS updates

2013-03-02 Thread LRN
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

On 02.03.2013 16:49, LRN wrote:

 A compromise solution would be to enable hashmap check, but make
 it more sophisticated - take more than just id into account. 
 Also, when a previously-traversed item is encountered, don't just 
 return immediately - add the item, and set it up so that choosing
 it will make the selection jump to its other copy somewhere else
 (which is the only copy that is selectable; through i'm not sure i
 can make GtkComboBox do that...), also marking it as such, and then
 return. So it will be a tree, but with loopends that user can
 traverse.
 
Here's how it looks (hashes last_id, next_id, uri and last_meta).
Didn't even try to do that selection-jumping thing though. But it
looks OK without it too, so maybe that's enough.
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.11 (MingW32)
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQEcBAEBAgAGBQJRMf3TAAoJEOs4Jb6SI2CwEuUIAL2u7h0i1z6AW7hc+iyBjupH
5Nl9HN4q2IrBfFQS6l/+w7agTrHUnhAzc+qBN1A+rOSa64ATahl2tZ/DGGiH53i3
yESPQGErQNftwhqAGMOQujpJ/4/hQ1hG1LcgDN3QUCZ9CH2DdXSK+cEiM0qdm34S
bAN+N5tvvn57pNhnpzaFCfB3Z0l0pfEge7EenWiqGCqALEyeiKEZQBPXO8NWw0tf
0z4BbQboWUL9yWcFm0BDo7muUZoGa0987DCvngJRRBkRrEt8sfhokP+tS1999l4E
JsjE31308VoWYLDdWtyo85MyeoVlbcjlvuXhPfrET2eSiBUHTAfYvUIDJ005Hp8=
=Qvzw
-END PGP SIGNATURE-
attachment: gnunet_publishing_master_dropped_down_complexhashmap_morecycles.png___
GNUnet-developers mailing list
GNUnet-developers@gnu.org
https://lists.gnu.org/mailman/listinfo/gnunet-developers


[GNUnet-developers] NS updates

2013-02-26 Thread LRN
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

I'm looking at gnunet-fs-gtk core at the moment, and i don't get it.

It is my understanding that 'next_id' is simply an identifier, and its
presence in metadata indicates that GNUnet client should do a search
for that identifier, and any results should be considered 'updated'
versions of the original. Fairly straightforward.

add_updateable_to_ts() inserts last_id value it gets from the
iterator as PSEUDONYM_MC_LAST_ID, while setting PSEUDONYM_MC_NEXT_ID
to an empty string.

GNUNET_GTK_master_publish_dialog_execute_button_clicked_cb() gets
PSEUDONYM_MC_LAST_ID and PSEUDONYM_MC_NEXT_ID and uses them as
identifier and update identifier respectively.

When populating the treeview, PSEUDONYM_MC_CURRENT_ID_EDITABLE is set
to FALSE for all updateable items, it seems, and TRUE for all empty
rows (for new publications that do not update anything).
PSEUDONYM_MC_NEXT_ID_EDITABLE is always TRUE, no matter what.

But. GNUNET_FS_namespace_list_updateable () passes nsn-id as a second
callback argument (which becomes last_id), and nsn-update as a last
callback argument (which becomes next_id).

So. fs-gtk pseudonym threeview seems to have four different item types:
1) Blanks - items for new publications, where you can edit both 'id'
and 'next_id'
2) Leaves - items for updates, where 'id' is frozen with the value
of 'next_id' from a previous publication, and 'next_id' is editable.
3) Stems - items that were inserted during the updateable items
graph walking. Their 'id' is frozen with the value of 'next_id' from a
previous publication, and 'next_id' is editable. They differ from the
leaves in that there already were updates to these items. Updating
them again will sprout more leaves (creating ambiguity, as one stem
will now have 1 possible updates instead of 0 or 1 updates).
4) Root - initial publication that started the update graph. Its
'id' is frozen with the value of 'id' (!) from the initial
publication, and 'next_id' is editable. Making updates with this
item will, in fact, produce a new publication with the same identifier
(thus increasing ambiguity, as one identifier will now yield multiple
items), and not update anything.

IMO (4) should not be in the list at all, why does
add_updateable_to_ts() add it? And the need of (3) is debatable as
well, since they break linearity of the update graph. If (3) is to be
offered, it should at least be indicated appropriately (to think of
it, (4) may remain in the tree as well, it just has to be unusable for
publications).
Do we _strive_ for linear update graphs at all?

It'd prefer to encourage users to maintain linear update graphs.
If someone wants branching graphs, we should offer a special widget
for that (you ever seen git commit trees in tutotirals? that's how
that special widget should look like, roughly).
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.11 (MingW32)
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQEcBAEBAgAGBQJRLKp+AAoJEOs4Jb6SI2CwtWgIANHV0qyepzKytSnpBycP9hbN
gohrabUHSfsq9KH6KOkWuXk8tU/8V2zAVYZ26LdxcAHbck50fmXmTyZSAbtpKNIY
xgjVnSOWOrcLAgC+eKygnRxsu0Q+KVsk6Q2mX3t/JNOi6AUYkVICZhO9Izf9KSU1
j3i0oVdsmG9qnoo74Vx9+FRkvSOf74uLB5Q+U8O9TOZOMSvRkO9EV87XLlFNAvut
tZg/IUkNAQi8HDqvlsrIMqcNGRRdqPIHOgTJsBXJ8Ww22xssSw+nrofHOTsOx0SJ
KPJ5g54uwAK5XfqF+gCOVMCG6RtSPGyt9VH3ljgSahzb66M8Aayh1pkJML1jU/8=
=uKtX
-END PGP SIGNATURE-

___
GNUnet-developers mailing list
GNUnet-developers@gnu.org
https://lists.gnu.org/mailman/listinfo/gnunet-developers


Re: [GNUnet-developers] Idea for file storage in GNUnet

2012-12-06 Thread LRN
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

Answer: Because it disturbs the logical flow of communication.
Question: Why so many people think that top-posting is bad?

On 07.12.2012 7:28, hypothesys wrote:
 I understand (or at least believe I do) your point about the
 available storage not being a priority as it is not limitative,
 however could this increased storage not make up for a potencially
 lower latency for the network? After all, if the there is more
 storage the same data could be made available from a greater number
 of nodes. As such the number of network hops a single data block
 has to travel between the asking node and the data provider
 node diminishes, and so does latency at least when in darknet 
 mode.
 
 I do not know if this would be impossible due to the way GNUnet
 routes data, or a misconception on my reasoning, but I assume
 GNUnet must use some implementation of Key-based routing and DHT.
 Perhaps this lower latency could pose problems from the anonymity
 POV, and I cannot predict the security implications, still it would
 not mean that the smallest route had to be taken, only diminishing
 the minimum number of hops necessary to transfer data. Probably it
 would mean small-world networks world would become smaller
 proportionately to the total amount of available storage at each
 node.
You'd have to wait for Grothoff's reply to get his opinion on this. My
highly uneducated guess is that data variety is greater than the
available space. Thus, no matter how large datastores of GNUnet nodes
are, the probability of just finding a block of data in a random node
that is not sharing it on purpose is relatively small, as compared to
sharing files on purpose (which likely means using indexing -
datastore size is not relevant) OR sharing blocks that are also being
downloaded by the node (i.e. seeding what you're downloading; unless
you're stingy, your datastore would be large enough to fit all of them
anyway) OR sharing hot, often-requested blocks (that's the best case
for increased datastore size).



Now, what i find compelling in this idea is the space management.
When i think of what i would tell people about setting up a GNUnet
node, and specifically - about choosing the datastore size, the answer
i come up with is this:

Think of the largest number of files you'd be downloading
simultaneously, then add their sizes together - that's the minimum
space you should allocate for datastore.

However, if that wost-case scenario actually happens, your node will
not run optimally - all your datastore will be filled with the blocks
you're downloading right now, while all migrated blocks will be
removed, and (depending on your priority choices earlier on) inserted
blocks might go away as well. I wouldn't want this to happen too
often. So the right answer is the above recommendation _PLUS_ any
gigabytes of storage that you can spare.

And spare is the problem. I can easily spare 20 or 40 gigabytes, but
100 or 200 is somewhat trickier. I might have that kind of space now,
and be willing to give it to GNUnet, but i might want that space back
at some point. Not sure what GNUnet will do right now, if i shut down
my node, reduce the datastore size, then start the node up again.
Probably discard lowest-priority blocks until datastore shrinks to the
new limit?

Now, having a minimum space allocated to the datastore, and then just
using N% of the remaining free disk space for for datastore too, while
it's available - that really makes the decision easier. If GNUnet is
then taught to use pre-allocated datastore for important blocks (files
being downloaded or published; what are privacy issues here?), that
would mean that your node will serve _your_ interests first, and will
use the free space available to serve the network as best as it can.

It should maintain either F% of space free, or G gigabytes (whichever
is larger). Obviously, F and G are configurable (i.d say - default F
to 20, and G to 20; unless GNUnet daemon that would reclaim free space
would be a slowpoke, 20 gigabytes should give it enough time to react).
It should also be completely disabled for SSDs, IMO. Because they are
small to begin with, _and_ because their performance degrades greatly
as they are filled with data.



Thus the idea is the same as with CPU resources - you set up low and
high thresholds for CPU load that GNUnet can cause. It will go as high
as the high threshold when uncontested, and will go down to the low
threshold when other processes compete for CPU resources with GNUnet.
Same for storage - use large portion of available free space for
datastore (primarily - for migrated and cached blocks), but be ready
to discard all that, and go as low as the size of the pre-allocated
datastore.

-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.11 (MingW32)
Comment: Using GnuPG with undefined - http://www.enigmail.net/

iQEcBAEBAgAGBQJQwZwTAAoJEOs4Jb6SI2CwdnAIAKd8G+z2v0jcD68PpF0jGvaD

[GNUnet-developers] Camouflage

2012-11-24 Thread LRN
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

This is the idea that i've been thinking on.
It should be possible for GNUnet node operator to hide the fact that
his machine runs a GNUnet node.

Ways to achieve this:

1) Fake HELLO messages.
AFAIU, right now anyone can collect HELLO messages (by running a node,
or by querying a hostlist server), and then claim (with certain degree
of sureness) that GNUnet nodes run on all addresses listed in these
messages. Companies that track torrent users do this for BitTorrent.
They may then proceed to actually connect to listed addresses to
verify them, but that is quite another story.
The solution is to spread fake HELLOs with fake public keys and fake
addresses.
A node should use its private key (key K) as a seed to generate a set
fake of addresses (set A). Then use K and A themselves to generate
fake public key (key F) for each A, thus getting a complete HELLO
message. The use of K as a seed ensures that the node will keep lying
about the same set of addresses (how large that set should be is an
open question) with the same keys, making the fakes more believable
(observer might think that these are real nodes, maintaining their
real HELLOs over time; failure to validate any of them might be blamed
on firewalls, etc).
Address sets will intersect (A1 and A2 generated from K1 and K2 may
share some elements), obviously, although that might not be true for
IPv6 addresses...
I expect that address generator will apply some rules to generate
believable addresses (i.e. don't generate invalid IP addresses, like
10.1.0.255).
As an extra, a node could validate generated addresses and do
non-agressive portscanning (or something similar - we're not speaking
only of tcp) on them, to be able to add ports (or other parts of the
address) that look believable to observers.

AFAIU, right now nodes won't gossip about fake HELLOs (i.e. a node
will never tell another node about a HELLO it got, unless it validated
that HELLO). That might need to be changed to allow nodes to choose a
random subset of invalid HELLOs and gossip about them as well.
Otherwise only the node that generated them will be able to spread them.
Not sure about hostlists.

Extra yummy feature - add user-configurable fake templates, which
could have addresses only, or addresses and private keys. GNUnet node
will use templates from time to time (configurable) instead of
generated addresses, and will generate missing template elements.
It would be neat to be able to tell the world that 65.55.58.201 [1]
runs a GNUnet http_server transport on port 80...

2) Transport disguise.
Modify the protocol to allow clients to ignore initial data sent by
the server, and require clients to be the first ones to speak GNUnet
protocol after connecting (i'm not sure how the protocol works right
now; what a GNUnet node sends to the connected party immediately after
accepting an incoming connection? Does it send anything at all?).
A node should send fake data that looks like, say, FTP greeting,
faking a real-life FTP server.
This will prevent casual observers from identifying the node as GNUnet
node.
Non-casual observer should not follow the fake protocol, but proceed
to send a normal GNUnet handshake.
If the node doesn't get a GNUnet handshake as a reply to its fake
greeting, it might either drop the connection, or use some kind of
bogus access control error as an excuse to drop it (i.e. ask for ftp
login/password combo, and then reject all such combos and drop
clients that failed to authenticate this way).

Or a node should simply remain silent until it gets incoming handshake
message.

3) Handshake-first protocol
Besides (2), which may or may not be implemented, don't identify
yourself as GNUnet node until incoming peer sends a handshake, then
drop it, if it doesn't match one of your friends, if you're running in
F2F-only mode. You will be able to hide the fact that you're a GNUnet
node, since only friends will get _anything_ out of you. Other
non-friend (normal or malicious) GNUnet clients will have their
connections dropped after their handshake message.

To make it work both ways, GNUnet should establish a generic session
with TLS encryption first. Again, it's not uncommon for services to
have ports on which clients are expected to connect with an SSL/TLS
session (instead of connecting normally and then issuing StartTLS).
The point here is to use common TLS certificates and TLS connections
for initial authentication (friend nodes will know TLS certificates of
each other in advance). Otherwise your node will not be able to
connect to any of your friends without revealing that it's a GNUnet
node (friend won't identify itself as a GNUnet node initially, until
you send a handshake, thus preventing you from verifying that you've
connected to your friend, not to some man in the middle; and if you
send a GNUnet handshake, you will reveal yourself as GNUnet node to
the other end of the connection, not knowing who might be there). TLS
allows 

Re: [GNUnet-developers] Propose new feature - Search Indexer WebService for GNUnet

2012-11-09 Thread LRN
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

On 09.11.2012 21:32, SMoratinos wrote:

 I think the second part of my previous mail was misunderstood
 (probably because of my english). I propose a third idea.
 
 The first idea was central server = bad The second was 3 entity,
 a downloader, a uploader, and a database maintainer = too many
 problems (cf LRN previous mail). The third is database link
 indexer is a new service in gnunet. There is only one entity, a
 gnunet user, each gnunet user have a database.
 
 The new service could be built on top of file-sharing, or not (i
 don't know). This is not a fs replacement but an extension or an
 alternative. Possible features : - gnunet-search-db : search in the
 local database. - gnunet-notifier-db : notify user that new
 content, only uri with metadata (like CHK) not the document, is
 arrived from the network. - gnunet-indexer-db : a process which
 accept new entry from network and put them in his database. A
 process wich send new entry to the network.
 
 
 Wwhat is this information which are store in the database.
 
 It's like KBlock but with a all know K (i call it PBlock). For
 example K=gnunet_public by convention. All uploader who want that
 a publication became indexes by this new service must publish the
 content with keyword gnunet_public. When an uploader publish
 content under the K=gnunet_public, then gnunet-indexer-db send a
 PBlock to the network. The PBlock will be propagated over the
 network. If the Key is know by all, so intermediaries could view
 metadata and uri, and that's what we want. Am I right ? Is it a
 problem ?
That would be easily censorable _and_ nodes will not have plausible
deniability (i don't know what i was routing) - anyone will be able
to see contents of these P-blocks, and thus it will be possible for
some parties to demand of nodes to do some kind of content-based
filtering (i.e. drop all P-blocks that have a word X in filename or as
one the other metadata items).

I doubt that Grothoff will like this suggestion.

 
 
 About the size of the database. I have no idea of that size. In the
 documentation, i have understood that KBlock are appromatively 1%
 of the content. If I have in my database 1 PBlock who
 reference 1 files with an average size of 1Go. The content of
 my database will be 100Go, it's too huge. But this is not a problem
 if we keep PBlock only for a few period. For example only which are
 10days old. Because I actually want the fresh result not the old. 
 And I want notification not actually store all gnunet network ! If
 I want old content I can search via normal gnunet-fs-search. And
 guys who want store more historic can, if they want.
K-blocks can have any size up to 64k, their size does not depends on
size of the files they link to. If you keep them small, their database
impact will be less. The problem with them is usually that you have
more than one (much more than one). With your proposal there will be
[mostly] only one P-block per file, so that's totally not a problem.

-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.11 (MingW32)
Comment: Using GnuPG with Mozilla - http://www.enigmail.net/

iQEcBAEBAgAGBQJQnZABAAoJEOs4Jb6SI2CwPI8IAJbCOFqj3m7LeflQslBz/oMJ
9o+3M7XU80e3QtilttuYcj9yfoNJDe0PpCO2CNkuy3ubOFzgnMVLyTUMBEi7eL4N
7BZqs6zl8rRZ5LzS2wa0ZTFG377swgDfSvid/+7fwWAjGzFEcrPLL5mCl24sLMmi
JedQHVnmufIRmv3aCzo44w58hPKfu0kIjUomxxYf0V3c4qoILVZMCXxuCIeq+2l3
yYMoK4+fqAzQh6op4bVb7EoUnKYXqU9DVvK/wQigBrGhV2gj8y13klAHviC11wHw
89pjwnDPJwLAGchVPzbThtgA+Me1QIB8et4md0nSZ1r2isJXlGjwEwUVLFfCDeA=
=9cVa
-END PGP SIGNATURE-

___
GNUnet-developers mailing list
GNUnet-developers@gnu.org
https://lists.gnu.org/mailman/listinfo/gnunet-developers


Re: [GNUnet-developers] Propose new feature - Search Indexer WebService for GNUnet

2012-11-08 Thread LRN
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

On 08.11.2012 17:37, SMoratinos wrote:
 So what about that ?

Well, i really can't continue to discuss it, until i have clear
understanding of how namespace publications work, and how namespace
searches do, and how they will once namespace search unification is
implemented.
Specifically, what a node (or a user) must know in order to search in
a namespace.
Also, how reverse publications (encrypted with other namepaces' public
key) will work.

/me gives Grothoff a meaningful look.


-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.11 (MingW32)
Comment: Using GnuPG with Mozilla - http://www.enigmail.net/

iQEcBAEBAgAGBQJQm9PnAAoJEOs4Jb6SI2CwxSoH/0fq4VNWZgEgdth4KBZ1k51j
4AIuq4Ga+L904xQaJXZfbcR1sToV76x/eDG37V7GwNe1dpBz1JY8bhLAkTbzT9Gv
XUlPEqp2w2hcyYympXc5/IQNextuIcwyssu1IWe3ymtvYBYZ7z1W+crcFWFoPhq+
AyedxKetLVn8HH5ThGV0RN53wN01J/ViaWfq4LqSNV2Uvf/5CWpQCe0u/QrCMc24
jXYQhMwQ+mI8GrVzO2OZ2iE9Lycq1v1yU91N9Kr8R3bXYKOE6AiyfZ6KoSeXBPGn
n9/rDccRKph1tJy2F43wXgAUviUPgcVVFGWfHiInxAYNt2cfwDtppIaaOvmN/9I=
=Y9gz
-END PGP SIGNATURE-

___
GNUnet-developers mailing list
GNUnet-developers@gnu.org
https://lists.gnu.org/mailman/listinfo/gnunet-developers


Re: [GNUnet-developers] Propose new feature - Search Indexer WebService for GNUnet

2012-11-08 Thread LRN
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

On 08.11.2012 17:37, SMoratinos wrote:
 
 3 / The Uploader publish things encrypted by namespace a1 public
 key, it publish thinks to goodfiles namespace.
We'd have to avoid that, see below.

 
 4 / The namespace owner a1 will continuously search for
 publications for namespace a1. This suppose to be the default
 functionning of gnunet, a namespace search content for his own
 namespace. He find the new content and index only it's link to him
 database.
Your wording is quite unfortunate. I know what you mean publications
intended for inclusion in a1, not publications made in a1, because
only a1's owner can publish in a1. Searching your own namespace makes
no sense - only you can publish things in it anyway. And if you do
share its private key, then it is just the same as the global namespace.

 But how the downloader discover the a1 namespace ? The problem is
 the same as the beginning.
Off-band. How do you know about TPB? You learn eventually, somehow.
Maybe google for it. Sadly, unless database contents are published on
a public web-site, they won't be googleable (and you won't be able to
discover database's existence initially by finding its contents), and
publishing them like that will attract attention, censorship, and may
threaten publisher's anonymity (OTOH, publisher may not be the same
entity as the database maintainer; still, who'd want to put himself in
danger like that? On a regular basis?)

 
 If there is no central server, the link index database must be in
 all the network.
Yes, each user who regularly uses the database will maintain his own
copy (a closed community of users may opt to share one copy, but that
is their business).

 
 All peers are a Database Owner, all the peer on the network have a
 copy of the Link Index Database.
No, only one node (or group of collaborating nodes) is the owner, able
to publish updated database in a1 namespace.

 When a database is updated, this update is propagated over the
 network.
Yes, since everyone will [eventually] get a copy. For the purpose of
efficiency database won't be monolithic, so you'd only need to
downloads a couple of megabytes to update existing copy.

 
 Search became local ! This is no longer the search result which is 
 propagated but this is the Link Index Database.
Yes, although your local database will always be somewhat older than
the one database maintainer has (depending on how often you're able to
update it).

 Finally, I'm notified by all the network from updates. New
 contents are indexes by all the network continuously.
Yes, but GNUnet kind of does that already. Database is only different
in that it's moderated and allows discovering new stuff without
foreknowledge.

 
 The drawback is that all peers must persit this database, and have 
 enough disk space but few Gbits is not a problem ?
Yes (also, see above about database sharing).

 And yes Gnunet doesn't work like this now.
Yes. Some things are pending features (DSA, always-namespace
searches), others are yet-to-be designed (basically what this
discussion is).

 
 So what about that ?
 
OK, i took some time to actually read [1] instead of just glancing
over the points.

Normal (global) search is like this (based on GHM 2010 talk):
K-block for keyword K contains payload R (payload is CHK and metadata).
H(K) is the hash of the keyword.
R is encrypted with a symmetric key derived from H(K), i.e. encrypted
payload is E_{H(K)} (R).
K is used to generate an RSA private/public key pair {PRIV_K, PUB_K}.
Publisher then appends PUB_K to E_{H(K)} (R), and signs all that with
PRIV_K to produce B, which is the K-block.
B can be produced by anyone, you only need to know the keyword.

Query initiator goes through the same thing - computes {PRIV_K,
PUB_K}, then produces hash of the public key H(PUB_K) and sends it as
a query.

Also anyone, who somehow gets a K-block, can check its signature
(verify that E_{H(K)} (R) + PUB_K was signed with PRIV_K, you only
need PUB_K itself for that).

Anyone, who has the K-block, can take the PUB_K part of it and hash
that, producing the same H(PUB_K), and remember that hash, then match
incoming queries against it. If it matches, then query initiator asked
for the corresponding K-block.

Since that stuff only depends on K, attackers can pre-compute PUB_K
and H(PUB_K) for any K's that they want to censor/monitor, but the
worst thing they can do is to refuse to re-transmit a query for K they
know. Or send valid K-blocks with garbage payload (yeah, that's
actually worse than dropping queries). But that is where namespaces
come in.




Now, what [1] proposes:
All K-blocks are published under _some_ namespace. The corner case is
the global namespace, private key for which is not a secret, so anyone
can share in that namespace.

PUB_N is the public key of a namespace, PRIV_N is the private key of a
namespace.
H(K+PUB_N) is the hash of the combination of keyword K and public key
of the namespace (as opposed to