Code Monkey home page Code Monkey logo

cossacklabs / hermes-core Goto Github PK

View Code? Open in Web Editor NEW
83.0 12.0 13.0 814 KB

Security framework for building multi-user end-to-end encrypted data storage and sharing/processing with zero leakage risks from storage and transport infrastructure.

Home Page: https://www.cossacklabs.com/hermes/

License: GNU Affero General Public License v3.0

Makefile 5.61% C 77.69% Python 2.10% Go 13.57% CMake 0.78% Shell 0.25%
cryptography cryptography-library crypto-library security end-to-end-encryption encryption hermes access-control

hermes-core's People

Contributors

gene-eu avatar karenswry avatar lagovas avatar mnaza avatar vixentael avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hermes-core's Issues

hermes tutorial

  • discuss a use-case w/ @Lagovas where we can easily show integration of high-level API (important), some simple script
  • make simple integration w/ @Lagovas together, make sure it works
  • write tutorial
  • verify against theory team:
    • tutorials
    • docs

Correct closing files

if check is failed then file will not close
Two examples:
https://github.com/cossacklabs/hermes-core/blob/master/src/db/file_db/hermes_access_key_store.c#L33
https://github.com/cossacklabs/hermes-core/blob/master/src/db/file_db/hermes_access_key_store.c#L51

but imho it's bad way to use this macros. such macros good for cases when you will execute only one command. but it's limit you because you couldn't write some more complicated logic than just logging and you will switch from macros to ifs and back. that bad way too imho. better use macros just for logging without logic of application.

this macros with one if and two commands within will looks terrible
HERMES_CHECK(false, if(one_more_condition){do_something(); do_something();}

tests fails on i386

I ran tests on ubuntu precise i386 and had next errors:

$ make test
compile build/obj/common/buffer.o      [ERRORS]
cc -Iinclude -fPIC -Werror -Wno-switch -c src/common/buffer.c -o build/obj/common/buffer.o
src/common/buffer.c: In function 'buffer_create_with_':
src/common/buffer.c:98:36: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
src/common/buffer.c: In function 'buffer_extract':
src/common/buffer.c:141:13: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
cc1: all warnings being treated as errors
make: *** [build/obj/common/buffer.o] Error 1

on ubuntu precise x86_64 tests pass successfully

/wrappers/

  • wontfix Move wrappers to /wrappers/ properly
  • Python wrapper
  • Go wrapper
  • Examples for both

Fix warnings in C-example

This is not crucial, but I believe that it's better to fix warnings during compiling of C example.

Just follow C-tutorial step-by-step.

My current configuration:

  • MacOS 10.12.6,
  • clang Apple LLVM version 9.0.0 (clang-900.0.37)

docs/examples/c/mid_hermes/credential_store_service

main.c:69:39: warning: passing 'const uint8_t [17]' to parameter of type 'const char *' converts between pointers to integer types with different sign
      [-Wpointer-sign]
          credential_store_id, strlen(credential_store_id),
                                      ^~~~~~~~~~~~~~~~~~~
/usr/include/string.h:82:28: note: passing argument to parameter '__s' here
size_t   strlen(const char *__s);

docs/examples/c/mid_hermes/data_store_service

main.c:61:35: warning: passing 'const uint8_t [18]' to parameter of type 'const char *' converts between pointers to integer types with different sign
      [-Wpointer-sign]
            data_store_id, strlen(data_store_id), data_store_private_key, sizeof(data_store_private_key),
                                  ^~~~~~~~~~~~~
/usr/include/string.h:82:28: note: passing argument to parameter '__s' here
size_t   strlen(const char *__s);
                            ^
main.c:63:41: warning: passing 'const uint8_t [17]' to parameter of type 'const char *' converts between pointers to integer types with different sign
      [-Wpointer-sign]
            credential_store_id, strlen(credential_store_id), raw_credential_store_transport, false);
                                        ^~~~~~~~~~~~~~~~~~~
/usr/include/string.h:82:28: note: passing argument to parameter '__s' here
size_t   strlen(const char *__s);
                            ^
main.c:80:35: warning: passing 'const uint8_t [18]' to parameter of type 'const char *' converts between pointers to integer types with different sign
      [-Wpointer-sign]
            data_store_id, strlen(data_store_id),data_store_private_key, sizeof(data_store_private_key),
                                  ^~~~~~~~~~~~~
/usr/include/string.h:82:28: note: passing argument to parameter '__s' here
size_t   strlen(const char *__s);

docs/examples/c/mid_hermes/key_store_service

main.c:60:32: warning: passing 'const uint8_t [17]' to parameter of type 'const char *' converts between pointers to integer types with different sign
      [-Wpointer-sign]
          key_store_id, strlen(key_store_id), key_store_private_key, sizeof(key_store_private_key),
                               ^~~~~~~~~~~~
/usr/include/string.h:82:28: note: passing argument to parameter '__s' here
size_t   strlen(const char *__s);
                            ^
main.c:62:39: warning: passing 'const uint8_t [17]' to parameter of type 'const char *' converts between pointers to integer types with different sign
      [-Wpointer-sign]
          credential_store_id, strlen(credential_store_id), raw_credential_store_transport, false);
                                      ^~~~~~~~~~~~~~~~~~~
/usr/include/string.h:82:28: note: passing argument to parameter '__s' here
size_t   strlen(const char *__s);
                            ^
main.c:78:32: warning: passing 'const uint8_t [17]' to parameter of type 'const char *' converts between pointers to integer types with different sign
      [-Wpointer-sign]
          key_store_id, strlen(key_store_id),key_store_private_key, sizeof(key_store_private_key),
                               ^~~~~~~~~~~~
/usr/include/string.h:82:28: note: passing argument to parameter '__s' here
size_t   strlen(const char *__s);

docs/examples/c/mid_hermes/client

hermes_client.c:44:12: warning: duplicate 'const' declaration specifier [-Wduplicate-decl-specifier]
const char const* HELP = "usage: client <command> <user id> <base64 encoded user private key>  <name of file for proceed> <meta> <for user>.\n"
           ^
hermes_client.c:100:25: warning: format string is not a string literal (potentially insecure) [-Wformat-security]
        fprintf(stdout, HELP);
                        ^~~~
hermes_client.c:100:25: note: treat the string as an argument to avoid this
        fprintf(stdout, HELP);
                        ^
                        "%s", 
hermes_client.c:124:41: warning: passing 'const uint8_t [17]' to parameter of type 'const char *' converts between pointers to integer types with different
      sign [-Wpointer-sign]
            credential_store_id, strlen(credential_store_id), container.raw_credential_store_transport, false);
                                        ^~~~~~~~~~~~~~~~~~~
/usr/include/string.h:82:28: note: passing argument to parameter '__s' here
size_t   strlen(const char *__s);
                            ^
hermes_client.c:123:13: warning: passing 'char *' to parameter of type 'const uint8_t *' (aka 'const unsigned char *') converts between pointers to integer
      types with different sign [-Wpointer-sign]
            argv[2], strlen(argv[2]), sk, sk_length, credential_store_pk, sizeof(credential_store_pk),
            ^~~~~~~
../../../../../include/hermes/secure_transport/transport.h:32:24: note: passing argument to parameter 'user_id' here
        const uint8_t *user_id, size_t user_id_length,
                       ^
hermes_client.c:139:34: warning: passing 'const uint8_t [17]' to parameter of type 'const char *' converts between pointers to integer types with different
      sign [-Wpointer-sign]
            key_store_id, strlen(key_store_id), container.raw_key_store_transport, false);
                                 ^~~~~~~~~~~~
/usr/include/string.h:82:28: note: passing argument to parameter '__s' here
size_t   strlen(const char *__s);
                            ^
hermes_client.c:138:13: warning: passing 'char *' to parameter of type 'const uint8_t *' (aka 'const unsigned char *') converts between pointers to integer
      types with different sign [-Wpointer-sign]
            argv[2], strlen(argv[2]), sk, sk_length, key_store_pk, sizeof(key_store_pk),
            ^~~~~~~
../../../../../include/hermes/secure_transport/transport.h:32:24: note: passing argument to parameter 'user_id' here
        const uint8_t *user_id, size_t user_id_length,
                       ^
hermes_client.c:154:35: warning: passing 'const uint8_t [18]' to parameter of type 'const char *' converts between pointers to integer types with different
      sign [-Wpointer-sign]
            data_store_id, strlen(data_store_id), container.raw_data_store_transport, false);
                                  ^~~~~~~~~~~~~
/usr/include/string.h:82:28: note: passing argument to parameter '__s' here
size_t   strlen(const char *__s);
                            ^
hermes_client.c:153:13: warning: passing 'char *' to parameter of type 'const uint8_t *' (aka 'const unsigned char *') converts between pointers to integer
      types with different sign [-Wpointer-sign]
            argv[2], strlen(argv[2]), sk, sk_length, data_store_pk, sizeof(data_store_pk),
            ^~~~~~~
../../../../../include/hermes/secure_transport/transport.h:32:24: note: passing argument to parameter 'user_id' here
        const uint8_t *user_id, size_t user_id_length,
                       ^
hermes_client.c:161:13: warning: passing 'char *' to parameter of type 'const uint8_t *' (aka 'const unsigned char *') converts between pointers to integer
      types with different sign [-Wpointer-sign]
            argv[2], strlen(argv[2]), sk, sk_length, container.key_store_transport, container.data_store_transport,
            ^~~~~~~
../../../../../include/hermes/mid_hermes/mid_hermes.h:35:24: note: passing argument to parameter 'user_id' here
        const uint8_t *user_id, const size_t user_id_length,
                       ^
hermes_client.c:175:93: warning: passing 'char *' to parameter of type 'const uint8_t *' (aka 'const unsigned char *') converts between pointers to integer
      types with different sign [-Wpointer-sign]
            || (0 != mid_hermes_create_block(mh, &idBuffer, &idLength, block, block_length, argv[5], strlen(argv[5])))) {
                                                                                            ^~~~~~~
../../../../../include/hermes/mid_hermes/mid_hermes.h:47:24: note: passing argument to parameter 'meta' here
        const uint8_t *meta, const size_t meta_length);
                       ^
hermes_client.c:191:44: warning: passing 'char *' to parameter of type 'const uint8_t *' (aka 'const unsigned char *') converts between pointers to integer
      types with different sign [-Wpointer-sign]
            0 != mid_hermes_read_block(mh, argv[4], strlen(argv[4]), &data, &data_length, &meta, &meta_length)) {
                                           ^~~~~~~
../../../../../include/hermes/mid_hermes/mid_hermes.h:51:24: note: passing argument to parameter 'block_id' here
        const uint8_t *block_id, const size_t block_id_length,
                       ^
hermes_client.c:205:49: warning: passing 'char *' to parameter of type 'const uint8_t *' (aka 'const unsigned char *') converts between pointers to integer
      types with different sign [-Wpointer-sign]
            || 0 != mid_hermes_delete_block(mh, argv[4], strlen(argv[4]))) {
                                                ^~~~~~~
../../../../../include/hermes/mid_hermes/mid_hermes.h:62:50: note: passing argument to parameter 'block_id' here
        mid_hermes_t *mid_hermes, const uint8_t *block_id, const size_t block_id_length);
                                                 ^
hermes_client.c:215:50: warning: passing 'char *' to parameter of type 'const uint8_t *' (aka 'const unsigned char *') converts between pointers to integer
      types with different sign [-Wpointer-sign]
            || (0 != mid_hermes_update_block(mh, argv[4], strlen(argv[4]), block, block_length, argv[5], strlen(argv[5])))) {
                                                 ^~~~~~~
../../../../../include/hermes/mid_hermes/mid_hermes.h:57:24: note: passing argument to parameter 'block_id' here
        const uint8_t *block_id, const size_t block_id_length,
                       ^
hermes_client.c:215:97: warning: passing 'char *' to parameter of type 'const uint8_t *' (aka 'const unsigned char *') converts between pointers to integer
      types with different sign [-Wpointer-sign]
            || (0 != mid_hermes_update_block(mh, argv[4], strlen(argv[4]), block, block_length, argv[5], strlen(argv[5])))) {
                                                                                                ^~~~~~~
../../../../../include/hermes/mid_hermes/mid_hermes.h:59:24: note: passing argument to parameter 'meta' here
        const uint8_t *meta, const size_t meta_length);
                       ^
hermes_client.c:224:54: warning: passing 'char *' to parameter of type 'const uint8_t *' (aka 'const unsigned char *') converts between pointers to integer
      types with different sign [-Wpointer-sign]
            || 0 != mid_hermes_grant_read_access(mh, argv[4], strlen(argv[4]), argv[5], strlen(argv[5]))) {
                                                     ^~~~~~~
../../../../../include/hermes/mid_hermes/mid_hermes.h:69:24: note: passing argument to parameter 'block_id' here
        const uint8_t *block_id, const size_t bloc_id_length,
                       ^
hermes_client.c:224:80: warning: passing 'char *' to parameter of type 'const uint8_t *' (aka 'const unsigned char *') converts between pointers to integer
      types with different sign [-Wpointer-sign]
            || 0 != mid_hermes_grant_read_access(mh, argv[4], strlen(argv[4]), argv[5], strlen(argv[5]))) {
                                                                               ^~~~~~~
../../../../../include/hermes/mid_hermes/mid_hermes.h:70:24: note: passing argument to parameter 'user_id' here
        const uint8_t *user_id, const size_t user_id_length);
                       ^
hermes_client.c:231:56: warning: passing 'char *' to parameter of type 'const uint8_t *' (aka 'const unsigned char *') converts between pointers to integer
      types with different sign [-Wpointer-sign]
            || 0 != mid_hermes_grant_update_access(mh, argv[4], strlen(argv[4]), argv[5], strlen(argv[5]))) {
                                                       ^~~~~~~
../../../../../include/hermes/mid_hermes/mid_hermes.h:74:24: note: passing argument to parameter 'block_id' here
        const uint8_t *block_id, const size_t bloc_id_length,
                       ^
hermes_client.c:231:82: warning: passing 'char *' to parameter of type 'const uint8_t *' (aka 'const unsigned char *') converts between pointers to integer
      types with different sign [-Wpointer-sign]
            || 0 != mid_hermes_grant_update_access(mh, argv[4], strlen(argv[4]), argv[5], strlen(argv[5]))) {
                                                                                 ^~~~~~~
../../../../../include/hermes/mid_hermes/mid_hermes.h:75:24: note: passing argument to parameter 'user_id' here
        const uint8_t *user_id, const size_t user_id_length);
                       ^
hermes_client.c:238:53: warning: passing 'char *' to parameter of type 'const uint8_t *' (aka 'const unsigned char *') converts between pointers to integer
      types with different sign [-Wpointer-sign]
            || 0 != mid_hermes_deny_read_access(mh, argv[4], strlen(argv[4]), argv[5], strlen(argv[5]))) {
                                                    ^~~~~~~
../../../../../include/hermes/mid_hermes/mid_hermes.h:79:24: note: passing argument to parameter 'block_id' here
        const uint8_t *block_id, const size_t bloc_id_length,
                       ^
hermes_client.c:238:79: warning: passing 'char *' to parameter of type 'const uint8_t *' (aka 'const unsigned char *') converts between pointers to integer
      types with different sign [-Wpointer-sign]
            || 0 != mid_hermes_deny_read_access(mh, argv[4], strlen(argv[4]), argv[5], strlen(argv[5]))) {
                                                                              ^~~~~~~
../../../../../include/hermes/mid_hermes/mid_hermes.h:80:24: note: passing argument to parameter 'user_id' here
        const uint8_t *user_id, const size_t user_id_length);
                       ^
hermes_client.c:245:55: warning: passing 'char *' to parameter of type 'const uint8_t *' (aka 'const unsigned char *') converts between pointers to integer
      types with different sign [-Wpointer-sign]
            || 0 != mid_hermes_deny_update_access(mh, argv[4], strlen(argv[4]), argv[5], strlen(argv[5]))) {
                                                      ^~~~~~~
../../../../../include/hermes/mid_hermes/mid_hermes.h:84:24: note: passing argument to parameter 'block_id' here
        const uint8_t *block_id, const size_t bloc_id_length,
                       ^
hermes_client.c:245:81: warning: passing 'char *' to parameter of type 'const uint8_t *' (aka 'const unsigned char *') converts between pointers to integer
      types with different sign [-Wpointer-sign]
            || 0 != mid_hermes_deny_update_access(mh, argv[4], strlen(argv[4]), argv[5], strlen(argv[5]))) {
                                                                                ^~~~~~~
../../../../../include/hermes/mid_hermes/mid_hermes.h:85:24: note: passing argument to parameter 'user_id' here
        const uint8_t *user_id, const size_t user_id_length);
                       ^
hermes_client.c:253:49: warning: passing 'char *' to parameter of type 'const uint8_t *' (aka 'const unsigned char *') converts between pointers to integer
      types with different sign [-Wpointer-sign]
            || 0 != mid_hermes_rotate_block(mh, argv[4], strlen(argv[4]))) {
                                                ^~~~~~~
../../../../../include/hermes/mid_hermes/mid_hermes.h:65:50: note: passing argument to parameter 'block_id' here
        mid_hermes_t *mid_hermes, const uint8_t *block_id, const size_t block_id_length);

python hermes client errors on C side

  • fix deleting blocks
  • fix grant update access + updating blocks
  • change type for MidHermes_getBlock from string to bytes (change format from s# to y/y#)

make WITH_FILE_DB

Error while make WITH_FILE_DB

root@artem-HP-ProBook-430-G1:/opt/CossackLabs/storojs72/hermes-core# make WITH_FILE_DB
make: *** No rule to make target 'WITH_FILE_DB'. Stop.

error on delete in C example

to reproduce

#!/bin/sh
cd docs/examples/c/mid_hermes/client
echo "some content" > "../../../../../somefile"
make

echo "add"
./client ba user1 `cat  ../../../../../user1.priv|base64` "../../../../../somefile" "meta"
echo "grant r u2"
./client rgr user1 `cat  ../../../../../user1.priv|base64` "../../../../../somefile" user2
echo "grant u u2"
./client rgu user1 `cat  ../../../../../user1.priv|base64` "../../../../../somefile" user2
echo "deny u u1"
./client rdu user2 `cat  ../../../../../user2.priv|base64` "../../../../../somefile" user1
echo "deny r u1"
./client rdr user2 `cat  ../../../../../user2.priv|base64` "../../../../../somefile" user1
echo "delete"
./client bd user2 `cat  ../../../../../user2.priv|base64` "../../../../../somefile"

and I take error in output: error: block deleting error
But data is deleted in db

but simple scenario works is correct

#!/bin/sh
echo "add"
./client ba user1 `cat  ../../../../../user1.priv|base64` "../../../../../somefile" "meta"
echo "delete"
./client bd user1 `cat  ../../../../../user1.priv|base64` "../../../../../somefile"

working on hermes-core docs

Preliminary list & structure:

  • Paper
  • Readme
  • Wiki home
    • Understanding Hermes
    • Hermes-core
    • Getting started
      • What's inside?
      • Installing and building
      • Trying out examples
    • Project overview
    • Example 1: local utility; code explained
    • Example 2: client-server utility; code explained
    • Tutorial 1
    • Tutorial 2
    • Tutorial 3
    • Hermes client - what's that within new context, is it relevant?
    • Hermes client_storages_interface - what's that within new context, is it relevant?

TODO:

  • read what we've got
  • organize brainstorm w/ everyone in slack channel - what else do we want in terms of wiki-contained materials to kick off learning
  • verify against "independent observers" (e.g. people who didn't have their finger into this repo yet): @mobrio @vixentael
  • plan changes here

hermes examples

  • verify C example
  • proofread Python example
  • port Go example

update license in source files

replace with:

/*
* Copyright (c) 2017 Cossack Labs Limited
*
* This file is a part of Hermes-core.
*
* Hermes-core is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Hermes-core is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Hermes-core.  If not, see <http://www.gnu.org/licenses/>.
*
*/

make install command

From our Readme.md

To build and install Hermes:

make
make install

Doesn't work

[lagovas@localhost hermes-core]$ make install
make: *** No rule to make target 'install'.  Stop.

errors in low level hermes client

have errors on grant_read command

# ./docs/examples/c/mid_hermes_low_level/hermes_client_ll grant_read user `cat user.priv|base64` somefile user2
read file ./db/credential_store/dXNlcgA=
read file ./db/key_store/c29tZWZpbGUA/dXNlcgA=/r/token
read file ./db/key_store/c29tZWZpbGUA/dXNlcgA=/r/owner
read file ./db/credential_store/dXNlcgA=
read file ./db/key_store/c29tZWZpbGUA/dXNlcgA=/w/token
read file ./db/key_store/c29tZWZpbGUA/dXNlcgA=/w/owner
read file ./db/credential_store/dXNlcgA=
read file ./db/data_store/c29tZWZpbGUA/data
read file ./db/data_store/c29tZWZpbGUA/meta
*** Error in `./docs/examples/c/mid_hermes_low_level/hermes_client_ll': double free or corruption (fasttop): 0x00000000008733d0 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x70bcb)[0x7f5d3f8e1bcb]
/lib/x86_64-linux-gnu/libc.so.6(+0x76f96)[0x7f5d3f8e7f96]
/lib/x86_64-linux-gnu/libc.so.6(+0x777de)[0x7f5d3f8e87de]
/lib/libhermes_mid_hermes_ll.so(mid_hermes_ll_buffer_destroy+0x5b)[0x7f5d3fe24e3b]
/lib/libhermes_mid_hermes_ll.so(mid_hermes_ll_token_get_data+0xbe)[0x7f5d3fe259ce]
/lib/libhermes_mid_hermes_ll.so(mid_hermes_ll_block_init+0xd3)[0x7f5d3fe22ab3]
/lib/libhermes_mid_hermes_ll.so(mid_hermes_ll_block_load+0x1ab)[0x7f5d3fe23c7b]
./docs/examples/c/mid_hermes_low_level/hermes_client_ll[0x404b4e]
./docs/examples/c/mid_hermes_low_level/hermes_client_ll[0x401c1b]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf1)[0x7f5d3f8912b1]
./docs/examples/c/mid_hermes_low_level/hermes_client_ll[0x40171a]
======= Memory map: ========
00400000-00408000 r-xp 00000000 fe:02 2194345                            /hermes-core/docs/examples/c/mid_hermes_low_level/hermes_client_ll
00607000-00608000 r--p 00007000 fe:02 2194345                            /hermes-core/docs/examples/c/mid_hermes_low_level/hermes_client_ll
00608000-00609000 rw-p 00008000 fe:02 2194345                            /hermes-core/docs/examples/c/mid_hermes_low_level/hermes_client_ll
00870000-00891000 rw-p 00000000 00:00 0                                  [heap]
7f5d38000000-7f5d38021000 rw-p 00000000 00:00 0 
7f5d38021000-7f5d3c000000 ---p 00000000 00:00 0 
7f5d3eff2000-7f5d3f008000 r-xp 00000000 fe:02 20971719                   /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7f5d3f008000-7f5d3f207000 ---p 00016000 fe:02 20971719                   /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7f5d3f207000-7f5d3f208000 r--p 00015000 fe:02 20971719                   /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7f5d3f208000-7f5d3f209000 rw-p 00016000 fe:02 20971719                   /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7f5d3f209000-7f5d3f20c000 r-xp 00000000 fe:02 20971707                   /usr/lib/x86_64-linux-gnu/libdl-2.24.so
7f5d3f20c000-7f5d3f40b000 ---p 00003000 fe:02 20971707                   /usr/lib/x86_64-linux-gnu/libdl-2.24.so
7f5d3f40b000-7f5d3f40c000 r--p 00002000 fe:02 20971707                   /usr/lib/x86_64-linux-gnu/libdl-2.24.so
7f5d3f40c000-7f5d3f40d000 rw-p 00003000 fe:02 20971707                   /usr/lib/x86_64-linux-gnu/libdl-2.24.so
7f5d3f40d000-7f5d3f642000 r-xp 00000000 fe:02 21021312                   /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.2
7f5d3f642000-7f5d3f842000 ---p 00235000 fe:02 21021312                   /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.2
7f5d3f842000-7f5d3f85e000 r--p 00235000 fe:02 21021312                   /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.2
7f5d3f85e000-7f5d3f86d000 rw-p 00251000 fe:02 21021312                   /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.2
7f5d3f86d000-7f5d3f871000 rw-p 00000000 00:00 0 
7f5d3f871000-7f5d3fa06000 r-xp 00000000 fe:02 20971694                   /usr/lib/x86_64-linux-gnu/libc-2.24.so
7f5d3fa06000-7f5d3fc06000 ---p 00195000 fe:02 20971694                   /usr/lib/x86_64-linux-gnu/libc-2.24.so
7f5d3fc06000-7f5d3fc0a000 r--p 00195000 fe:02 20971694                   /usr/lib/x86_64-linux-gnu/libc-2.24.so
7f5d3fc0a000-7f5d3fc0c000 rw-p 00199000 fe:02 20971694                   /usr/lib/x86_64-linux-gnu/libc-2.24.so
7f5d3fc0c000-7f5d3fc10000 rw-p 00000000 00:00 0 
7f5d3fc10000-7f5d3fc1e000 r-xp 00000000 fe:02 29388702                   /usr/lib/libthemis.so
7f5d3fc1e000-7f5d3fe1d000 ---p 0000e000 fe:02 29388702                   /usr/lib/libthemis.so
7f5d3fe1d000-7f5d3fe1e000 r--p 0000d000 fe:02 29388702                   /usr/lib/libthemis.so
7f5d3fe1e000-7f5d3fe1f000 rw-p 0000e000 fe:02 29388702                   /usr/lib/libthemis.so
7f5d3fe1f000-7f5d3fe28000 r-xp 00000000 fe:02 29400624                   /usr/lib/libhermes_mid_hermes_ll.so
7f5d3fe28000-7f5d40027000 ---p 00009000 fe:02 29400624                   /usr/lib/libhermes_mid_hermes_ll.so
7f5d40027000-7f5d40028000 r--p 00008000 fe:02 29400624                   /usr/lib/libhermes_mid_hermes_ll.so
7f5d40028000-7f5d40029000 rw-p 00009000 fe:02 29400624                   /usr/lib/libhermes_mid_hermes_ll.so
7f5d40029000-7f5d40041000 r-xp 00000000 fe:02 29388701                   /usr/lib/libsoter.so
7f5d40041000-7f5d40241000 ---p 00018000 fe:02 29388701                   /usr/lib/libsoter.so
7f5d40241000-7f5d40242000 r--p 00018000 fe:02 29388701                   /usr/lib/libsoter.so
7f5d40242000-7f5d4024b000 rw-p 00019000 fe:02 29388701                   /usr/lib/libsoter.so
7f5d4024b000-7f5d4026e000 r-xp 00000000 fe:02 20971672                   /usr/lib/x86_64-linux-gnu/ld-2.24.so
7f5d40462000-7f5d40466000 rw-p 00000000 00:00 0 
7f5d4046a000-7f5d4046e000 rw-p 00000000 00:00 0 
7f5d4046e000-7f5d4046f000 r--p 00023000 fe:02 20971672                   /usr/lib/x86_64-linux-gnu/ld-2.24.so
7f5d4046f000-7f5d40470000 rw-p 00024000 fe:02 20971672                   /usr/lib/x86_64-linux-gnu/ld-2.24.so
7f5d40470000-7f5d40471000 rw-p 00000000 00:00 0 
7fffcd2ac000-7fffcd2cd000 rw-p 00000000 00:00 0                          [stack]
7fffcd35e000-7fffcd360000 r--p 00000000 00:00 0                          [vvar]
7fffcd360000-7fffcd362000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
Aborted (core dumped)

+ now client try to find public keys differently than high-level example.
for example how they find key for userId="user1":
high-level client try to find key with filename echo -n "user1 | base64"
low-level client try to find key with filename echo -e -n "user1\x00 | base64" (with \0 at end)

with such behavior to the second client, we should pass userId in grant/revoke commands in the same format (that looks ugly)

Documentation

We need to better adjust the documentation around explaining ownership, grant rights and things which come out of paper with great obviousness but never surface in wiki documentation

update tutorials after merging #64

in #64 added secure session usage and we need to add explanation to tutorials how to add public keys of key/data stores to credential store (copy keys from docs/examples/c/service_keys to db/credential_store)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.