Skip to content

Latest commit

 

History

History

hls

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

HLS

Hidden Lake Service

hls_logo.png

The Hidden Lake Service is a core of an anonymous network with theoretically provable anonymity. HLS is based on the fifth^ stage of anonymity and is an implementation of an abstract anonymous network based on queues. It is a peer-to-peer network communication with trusted friend-to-friend participants. All transmitted and received messages are in the form of end-to-end encryption.

Features / Anonymity networks Queue-networks (5^stage) Entropy-networks (6stage) DC-networks (1^stage)
Theoretical provability + + +
Ease of software implementation + - -
Polymorphism of information - + +
Static communication delay + - +
Sending parallel messages - + -
Network scales easily - - -

A feature of HLS (compared to many other anonymous networks) is its easy adaptation to a hostile centralized environment. Anonymity can be restored literally from one node in the network, even if it is the only point of failure.

More information about HLS in the habr.com/ru/articles/696504/

Installation

$ go install github.com/number571/hidden-lake/cmd/hls@latest

How it works

Each network participant sets a message generation period for himself (the period can be a network constant for all system participants). When one cycle of the period ends and the next begins, each participant sends his encrypted message to all his connections (those in turn to all of their own, etc.). If there is no true message to send, then a pseudo message is generated (filled with random bytes) that looks like a normal encrypted one. The period property ensures the anonymity of the sender.

hls_queue.jpg

Figure 1. Queue and message generation in HLS.

Since the encrypted message does not disclose the recipient in any way, each network participant tries to decrypt the message with his private key. The true recipient is only the one who can decrypt the message. At the same time, the true recipient acts according to the protocol and further distributes the received packet, even knowing the meaninglessness of the subsequent dispatch. This property makes it impossible to determine the recipient.

Simple example of the client package (encrypt/decrypt functions) in the directory github.com/number571/go-peer/pkg/client/examples;

hls_view.jpg

Figure 2. Two participants are constantly generating messages for their periods on the network. It is impossible to determine their real activity.

Data exchange between network participants is carried out using application services. HLS has a dual role: 1) packages traffic from pure to anonymizing and vice versa; 2) converts external traffic to internal and vice versa. The second property is the redirection of traffic from the network to the local service and back.

hls_service.jpg

Figure 3. Interaction of third-party services with the traffic anonymization service.

As shown in the figure above, HLS acts as an anonymizer and handlers of incoming and outgoing traffic. The remaining parts in the form of applications and services depend on third-party components (as an example, HLM).

More details in the works

  1. Theory of the structure of hidden systems
  2. Monolithic cryptographic protocol
  3. Abstract anonymous networks
  4. Decentralized key exchange protocol

Supported platforms

  • Windows (x86_64, arm64)
  • Linux (x86_64, arm64)
  • MacOS (x86_64, arm64)

Minimum system requirements

  1. Processor: 1x2.2GHz (limit of communication = ~5-10 nodes)
  2. Memory: 0.5GB RAM (~250MB of memory can be consumed)
  3. Storage: 5Gib available space (~3.5GiB the size of hashes per year from one node)

Build and run

Default build and run

$ cd ./cmd/service
$ make build # create hls, hls_[arch=amd64,arm64]_[os=linux,windows,darwin] and copy to ./bin
$ make run # run ./bin/hls

> [INFO] 2023/06/03 14:32:40 HLS is running...
> [INFO] 2023/06/03 14:32:42 service=HLS type=BRDCS hash=43A5E9C5...BA73DF43 addr=211494E4...EEA12BBC proof=0000000002256145 conn=127.0.0.1:
> [INFO] 2023/06/03 14:32:47 service=HLS type=BRDCS hash=EFDDC1D4...C47588AD addr=211494E4...EEA12BBC proof=0000000000090086 conn=127.0.0.1:
> [INFO] 2023/06/03 14:32:52 service=HLS type=BRDCS hash=8549E257...EDEB2748 addr=211494E4...EEA12BBC proof=0000000000634328 conn=127.0.0.1:
> ...

Service was running with random private key. Open ports 9571 (TCP, traffic) and 9572 (HTTP, interface). Creates ./hls.yml and ./hls.db files. The file hls.db stores hashes of sent/received messages.

Default config hls.yml

settings:
  message_size_bytes: 8192
  fetch_timeout_ms: 60000
  queue_period_ms: 5000
logging:
  - info
  - warn
  - erro
address:
  tcp: 127.0.0.1:9571
  http: 127.0.0.1:9572
services:
  hidden-lake-messenger: 127.0.0.1:9592

Running options

$ hls -path=/root -network=xxx -threads=1
# path    = path to config, database, key files
# network = use network configuration from networks.yml
# threads = num of parallel functions for PoW algorithm

Example

There are five nodes in the network send_hls, recv_hls and middle_hlt_1, middle_hlt_2, middle_hlt_3. The send_his and recv_hls nodes connects to middle_hlt_1, middle_hlt_3. As a result, a link of the form send_his <-> middle_hlt_1 <-> middle_hlt_2 <-> middle_hlt_3 <-> recv_hls is created. Due to the specifics of HLS, the centralized middle_hlt nodes does not violate the security and anonymity of the send_hls and recv_hls subjects in any way.

The recv_hls node contains its echo_service, which performs the role of redirecting the request body back to the client as a response. Access to this service is carried out by its alias hidden-echo-service, put forward by the recv_hls node.

...
// handle: "/echo"
// return format: {"echo":string,"return":int}
func echoPage(w http.ResponseWriter, r *http.Request) {
	if r.Method != "POST" {
		response(w, 2, "failed: incorrect method")
		return
	}
	res, err := io.ReadAll(r.Body)
	if err != nil {
		response(w, 3, "failed: read body")
		return
	}
	response(w, 1, string(res))
}
...

Identification between recv_hls and send_hls nodes is performed using public keys. This is the main method of identification and routing in the HLS network. IP addresses are only needed to connect to such a network and no more. Requests and responses structure are HEX encoded.

Structure of request. The body hello, world! is encoded base64.

PUSH_FORMAT='{
    "receiver":"Bob",
    "req_data":{
        "method":"POST",
        "host":"hidden-echo-service",
        "path":"/echo",
        "body":"aGVsbG8sIHdvcmxkIQ=="
    }
}';

Build and run nodes

$ cd examples/anonymity/echo_service/routing
$ make

Logs from one another connected node. When sending requests and receiving responses, another node does not see the action. For him, all actions and moments of inaction are equivalent.

hls_logger.gif

Figure 4. Output of all actions and all received traffic from the another node.

Send request

$ cd examples/anonymity/echo_service
$ make request # go run ./_request/main.go
# OR
$ ./_request/request.sh

Get response

HTTP/1.1 200 OK
Date: Mon, 22 May 2023 18:18:34 GMT
Content-Length: 113
Content-Type: text/plain; charset=utf-8

{"code":200,"head":{"Content-Type":"application/json"},"body":"eyJlY2hvIjoiaGVsbG8sIHdvcmxkISIsInJldHVybiI6MX0K"}
Request took 8 seconds

Return code 200 is HTTP code = StatusOK. Decode base64 response body

echo "eyJlY2hvIjoiaGVsbG8sIHdvcmxkISIsInJldHVybiI6MX0K" | base64 -d
> {"echo":"hello, world!","return":1}

hls_request.gif

Figure 5. Example of running HLS with internal service.

Simple examples of the anonymity package in the directory github.com/number571/go-peer/pkg/network/anonymity/examples;

Cryptographic algorithms and functions

  1. AES-256-CFB (data encryption)
  2. ML-KEM-768 (key encryption)
  3. ML-DSA-65 (hash signing)
  4. SHA-384, HMAC-SHA-384 (data hashing)
  5. PoW-22 (hash proof)

Config structure

"logging"      Enable loggins in/out actions in the network
"address.tcp"  Connection address for anonymity network, may be void
"address.http" Connection address for API functions
"services"     Map with redirects requests from network to services
"network_key"  A network key created to encapsulate connections
"connections"  Connection addresses of the another nodes in network
"friends"      Friend addresses for send or receive messages over network
settings:
  message_size_bytes: 8192
  work_size_bits: 22
  fetch_timeout_ms: 60000
  queue_period_ms: 5000
  network_key: hls-network-key
logging:
  - info
  - warn
  - erro
address:
  tcp: localhost:9571
  http: localhost:9572
services:
  hidden-default-service: localhost:8080
connections:
  - localhost:8571
friends:
  alias-name: >-
    PubKey{02EC397B1B2351A59941115FBB93268D84B807119166A091DFEA3D9CFA4028B1ADD5A98A0E651351539C2139C2A79B2FB54C32E6C874C5DA76EB2368DFDB4C7805BD7F0B3DAD9A944E6172A713144FB91837A71120F78B3016B599FA899EA606B839A7C2B81CCE23068A6A48428699005DB6DC2B570B619DACC2A05783C0E27B2906904220607AB10313934CAF3BB40B78590F482133E917828A904B11E14355E50B404B848524389041BD0B87C02079158F9C4928BB68E4D18D96C68E248C090E3A71AB71C5F10BAB6B25445179999B32723574B25AE8117F9B681DE76004155B5286A05183196838383CEA09AFA2B81D4757C4C3A04EBA7299628BDDE312B0F982C8E917CB5418E7E83D1E05144800C41CA544CF516D5AC2B448573B691240B52409DFBA57B1554C1658423DB67CB2F122D8BA2610293020A75B62497BED3B5F919ACF8B73C6FFA21F4A6B6DF5215E3364A32BAA5DC29212B951BBD77C8ED184AE4339C0626B3B22AB391671148464B0C3717B6DB1CF241A25CE018DD2CA428F634F1A16B091C573D7958649082DF6E0CB02880C4376B470263D2A5842FA4AA823043A62B9C9407B2604A147B543524CB427D7787477168B89AA71A092356DA11C37301176AA907E100BEAF4AAFEC1CC78860DC6BB3ECD1A6170E6A560935B0E1B5CE8A889EB41349D3152135AAFE08B8AD5DBB95692CFCA3A801884758EAB4C54A4BC18500FE167886056C07BE9B69C86009AB11AEDCC1066430E03640D9AB444683C93D61C6B3A862CF2351FB69CC2E1C183DD530892FB6668B67828112F86556C4AD1605CA0A579C62101CA8908C260B4D76349949E7038A21B90383432727694BD4A958242CB1E199B48274CBDB2FCACA729903D4A1160E6B87F0B9AA2A3BCCBB39353135E54E659ADCA16A8822F2E4214A128502C25573EC56D0AC8AEF123A5A159AFB5140C9279A45725A0CAC026FADB6CA8909234E86DADB228C4307B48258B7C885428CC909B88AEF495B2440B3C682870E6D795C6D10BCE11134EA94C4A5419F6056915D0A77A0C78FC09685A6430B5F894EDC050F744047AF382DF6B14B5823C354767EF2C4DAFF1B0F888B97AB48661D527A50703E553847C0BA148ABAF24F371F64BCFB1945F435056D3299C4D240708E1AC16065C11D557D804709BA86DF930445210B3FDB82DBED6A26774CDC442184D049128374388778A71188D79A1491EB32270016E4A243D47576073F64547E665A4166D44EA48FEAABAFBC006FD61065B24822879B536878AA8E9206ED230B8A4B67056BA42983C047282DBCC963108A0E7BB2CA055319965A5CA7B3CBC0176A4245009FC16171426E01ABED46C4FC56C456D7947BA48B0F1A808976954749580D9456A47B2818B362AF5C13A8C65C10DC364AE430740F40C324C8F01F9464B498CB4054EA9404EAD057DD61C8495A99155647D5162760AF3156948AEBA56451D94CC7517CC8EC9CBE107438653333377C267C808E9CC37469A8CF9A4138E4A1B1A6A3C5508A9C2F09CBC196F9A110B43290F4716A9BECB0F3C896648D7C53516C67B198D78B31A6B65BF6E824D5BF75049D998F19C41326A7EBB69B2D27934B999B6A2C1694F76BBBC596410CBBA4409DDA35CA1A8B289FE3FBA643150405F043D29A69F7A809D5242D22013DD33C35A5C3DE74F231DA8482AF824FF003A14E6CAB4FA73E3FB1FA35B232A8C86C4032E182A9E87DB2E34BF5080698F38338457F858C0DD55058F21B74350D26A82BD128114A050157CBEB6EE9CB7CD23E24DE970FE6507D69EA3D49F21199FF2CBEC9598D6444C05730B07389229FCB4FB562207853DDD1F9D0C0E3B12A89294E0E40E69212D7CFAF69DDF5CBB1CC3A8728B473001C1F1D52CF0E1D9D1DBC1914A9F9A21CD99EE6FD1571A3685EDD92392C25BBF5313029C94FB06710CD200223CA8E410134C15FDDEBDFD87D5B1E36697E7A526CC1378DBFD8C1808C49DED8824C88BC381817378792C40E6469ECEF13E433472CD5EEC40FCBA98BB94D375FE5F8BBAED732E90B31EAE8E13B212974791DA521517E264EF497FB564827FC6A4BDAFA60BACE622D59FC9D46A05D3D9643EEEE608A277D15356298969F6CA2E3CB8DE33075032F623A1C3670940D97BB7A1547DBC2FFFF6346CCE9940AC870E05A8032D532AD85EA086E6584F99EACD0C19D03BDFFFC7A58590E1E01DB97B4BB4790B07095C3BD0033A93C79697B6956A6C2633B4DCE9CC6DF98C62E1485CC66A55D694A3785CB4470AA7BA27DD4D5297F6BB2F89870C68480E43A7B0822D75BE35D16C2874A2A2B536A6506672902BA034C1258E083446CAC8236213B8BD25816FB33529559DE6D8F90B1B43E22D7C2F1940FD7D8B9E4C33C22296DB4D15D78AB90DFB36E7C611B209197ED657810B93B65CD4F734D255EB8CE44D6A4BF0BD8BDD190ABF9BB192BAEE692327CB7FB5F9AFC9683F4D8560DDA7F00EF15081A9D220D7F4EDDEE23D5A532ACBA890D1E7F3DE1D09F9BEF0422D806A140F76D06C002D58B833653C19BA3A9AFB083CD34282028EB89A7EB5EDEAF87644C14FBA20C627815D20DEDCB581F2E25BB9D05FC9A22583A7F13E249F7E96F4CA6E4E77B45AE1BFEE8C351B66ABB471817C590144D84F6180AC7C0BD57146CA1C028E9AA4539E61D5E381CD9BC7F4E38DBAFAE79783839D8D2693B94721FA76728AA7772AEC74AC56376C1887B08E50CE3DED1A0C218F52A15274BBFF019EF4454B8904AFEF55E167E511EB837327062F843726AC713133358C4D978A59F8F01D059A731E66260FF1900E38684A239681FFCA91655093EDDA4C48CA19F7551D7685F110AF09FBA61446E29357596DB4E2E98E68BC6600D35360EA547C769D73BA9B172EE7043F07AFBB12244E562F195BCB1DE066A7A39A89AAC5E0517125553194FAFCEB2C62EC1371540CEB1881E75AF275FE514AC082D9ACAD75737E6DEC0A2628DC5E2613BFDE074075BC2859025F5138A234AA9140AFDED02569E89449E73394CA520587BA3961B8DC75E42BCA31C1DA22D72A371F78241E08A7F1FE3153B13B18A88AC461750B79E4A88E641DD2164923866FFE6BA7F0FD2D2E37B5AC6076C5646BF1D7C3DD692B8015400DA29413A9DF48817829E76A8D8362C0C7CDCAF163017D821353099B4D9F071E4604FB822EF3DF7D621B8322230A9D63CEAAAF43C33F5297AE1270A82BEE5DFF8E12A0061A8718763B058DFE2C33BB179233F4A1F5A57352FD09645D42559FF89DBC9EF4713B0B8CD8EA1ADAF74B2589BACF01343FA805C75DF4821BCFCD9D0E9F310C53BDCE340D6F8F243F68EFE693538E28FDF2F4E429AD060D28708526F47C2CDA28B1E5E612A50C3AD5D6BA5C0EF9D74C3EACB5F963F15BCFE2432869C9BDB4465E07B3FD878FEB1EB0CFC5C682E8379FB2FC234E06056878864E349318E40AB8DCFF7AA5185E4AEEED997DCC995E1675346C66E9E60E94BB7FC4BF2876498AE66B4C392AE35C2CFEC39980F2AE9F28601667E20AC1E485938ED734CEFA3CDD9789821BEB8D5ECA979D4B0D75520A89FF5C2C1353300C806917C16FE2FBD30249399445ED9D3125259EF77A106FBC25C4BC68659EE939FA87618227CD635EBB3A4DF446FCF953808A0DFA9FEC5600322D78922A1A28517E3F2A1BBC55E4768E89A5BA3DBA3EDCD5F75924B81977BC2F6EC1F5F24AB239D47E53995EB20DE18C30E0754DCE8D28EC84C3D77A444FE3A49CB0AA7F2E2C2CB79C74B54A5A019C11E73BB19FD307A8B9EE23A6848D6A3400F4958A9FD1376185DB281D23B27C5C57A5F380046E2DC821690E12A422039B668729DB8B7FB8EAD219382AB6CFEF68376D1EF687C9EFA17946804B1465F9343150389405D2368EBBD701FC46124886F02BD2AF628A46A373C7A792DB111C95EBB66942C8E8AB5EC14D3A9EBE4919DEC4928DEF09517A1CCC8598357D02591BFB3A0CEF15EA5FE3C12AA2F655142888D1C4B4B1A3E49E0FCDB94C07D948568CEC367D11139D8CBE9ED24CCEAAE6D4998C9EE9FA8356F5C9E49DDF2F551A1C3F68EEDF794BDE6634B4602514DDB9CC2DE7DE3E12C490DD8ACE422F942C0873A11F37FC83BA1391E7C5DEB7D9F2BE87B56DFCF731D573F28535766BA0FA6F5D0925AB55C31E8077E5744E623581D7E8B3D98BED2B0E44CC40B4519485E320EF2687F596B284461A3BD60560134DE43D40CAAF91887D6C848F5CDF4F57116B139B68429D8CCF0EA0F05A9A3027160727913B1B500BB8EA438957757E93FFD152BF5DF4E64E55CE92EEDE7B36B4F199658EDE6E95037DFEDBDF11D3FF1DC7FDD6C4C577EC9E79E77C080A1D1C701325EBCEF22873D902B8E48F6F049B968CB3D74977C7026C6AC56181D2F841D694D86FCFD1AE8B98D39E68E32EECE3C19DCF0DEA7DA1}

Request structure in HLS for internal services

Need encode this json to hex format
and put result to "hex_data" HLS API

"body" is base64 string
{
	"method":"GET",
	"host":"hidden-default-service",
	"path":"/",
	"head":{
		"Accept":"application/json"
	},
	"body":"aGVsbG8sIHdvcmxkIQ=="
}

Response structure from HLS API

"result" is string
"return" is int; 1 = success
{
	"result":"hidden-lake-service",
	"return":1
}

HLS API

1. GET/POST/DELETE /api/config/connects
2. GET/POST/DELETE /api/config/friends
3. GET             /api/config/settings
4. GET/DELETE      /api/network/online
5. POST/PUT        /api/network/request
6. GET             /api/service/pubkey

1. /api/config/connects

1.1. GET Request

curl -i -X GET -H 'Accept: application/json' http://localhost:9572/api/config/connects

1.1. GET Response

HTTP/1.1 200 OK
Content-Type: application/json
Date: Mon, 07 Aug 2023 00:21:25 GMT
Content-Length: 35
["localhost:9581","localhost:8888"]

1.2. POST Request

curl -i -X POST -H 'Accept: application/json' http://localhost:9572/api/config/connects --data 'localhost:8888'

1.2. POST Response

HTTP/1.1 200 OK
Content-Type: text/plain
Date: Mon, 07 Aug 2023 00:21:17 GMT
Content-Length: 27

success: update connections

1.3. DELETE Request

curl -i -X DELETE -H 'Accept: application/json' http://localhost:9572/api/config/connects --data 'localhost:8888'

1.3. DELETE Response

HTTP/1.1 200 OK
Content-Type: text/plain
Date: Mon, 07 Aug 2023 00:21:46 GMT
Content-Length: 26

success: delete connection

2. /api/config/friends

2.1. GET Request

curl -i -X GET -H 'Accept: application/json' http://localhost:9572/api/config/friends

2.1. GET Response

HTTP/1.1 200 OK
Content-Type: application/json
Date: Mon, 07 Aug 2023 00:22:38 GMT
Transfer-Encoding: chunked
[{"alias_name":"Bob","public_key":"PubKey{02EC397B1B2351A59941115FBB93268D84B807119166A091DFEA3D9CFA4028B1ADD5A98A0E651351539C2139C2A79B2FB54C32E6C874C5DA76EB2368DFDB4C7805BD7F0B3DAD9A944E6172A713144FB91837A71120F78B3016B599FA899EA606B839A7C2B81CCE23068A6A48428699005DB6DC2B570B619DACC2A05783C0E27B2906904220607AB10313934CAF3BB40B78590F482133E917828A904B11E14355E50B404B848524389041BD0B87C02079158F9C4928BB68E4D18D96C68E248C090E3A71AB71C5F10BAB6B25445179999B32723574B25AE8117F9B681DE76004155B5286A05183196838383CEA09AFA2B81D4757C4C3A04EBA7299628BDDE312B0F982C8E917CB5418E7E83D1E05144800C41CA544CF516D5AC2B448573B691240B52409DFBA57B1554C1658423DB67CB2F122D8BA2610293020A75B62497BED3B5F919ACF8B73C6FFA21F4A6B6DF5215E3364A32BAA5DC29212B951BBD77C8ED184AE4339C0626B3B22AB391671148464B0C3717B6DB1CF241A25CE018DD2CA428F634F1A16B091C573D7958649082DF6E0CB02880C4376B470263D2A5842FA4AA823043A62B9C9407B2604A147B543524CB427D7787477168B89AA71A092356DA11C37301176AA907E100BEAF4AAFEC1CC78860DC6BB3ECD1A6170E6A560935B0E1B5CE8A889EB41349D3152135AAFE08B8AD5DBB95692CFCA3A801884758EAB4C54A4BC18500FE167886056C07BE9B69C86009AB11AEDCC1066430E03640D9AB444683C93D61C6B3A862CF2351FB69CC2E1C183DD530892FB6668B67828112F86556C4AD1605CA0A579C62101CA8908C260B4D76349949E7038A21B90383432727694BD4A958242CB1E199B48274CBDB2FCACA729903D4A1160E6B87F0B9AA2A3BCCBB39353135E54E659ADCA16A8822F2E4214A128502C25573EC56D0AC8AEF123A5A159AFB5140C9279A45725A0CAC026FADB6CA8909234E86DADB228C4307B48258B7C885428CC909B88AEF495B2440B3C682870E6D795C6D10BCE11134EA94C4A5419F6056915D0A77A0C78FC09685A6430B5F894EDC050F744047AF382DF6B14B5823C354767EF2C4DAFF1B0F888B97AB48661D527A50703E553847C0BA148ABAF24F371F64BCFB1945F435056D3299C4D240708E1AC16065C11D557D804709BA86DF930445210B3FDB82DBED6A26774CDC442184D049128374388778A71188D79A1491EB32270016E4A243D47576073F64547E665A4166D44EA48FEAABAFBC006FD61065B24822879B536878AA8E9206ED230B8A4B67056BA42983C047282DBCC963108A0E7BB2CA055319965A5CA7B3CBC0176A4245009FC16171426E01ABED46C4FC56C456D7947BA48B0F1A808976954749580D9456A47B2818B362AF5C13A8C65C10DC364AE430740F40C324C8F01F9464B498CB4054EA9404EAD057DD61C8495A99155647D5162760AF3156948AEBA56451D94CC7517CC8EC9CBE107438653333377C267C808E9CC37469A8CF9A4138E4A1B1A6A3C5508A9C2F09CBC196F9A110B43290F4716A9BECB0F3C896648D7C53516C67B198D78B31A6B65BF6E824D5BF75049D998F19C41326A7EBB69B2D27934B999B6A2C1694F76BBBC596410CBBA4409DDA35CA1A8B289FE3FBA643150405F043D29A69F7A809D5242D22013DD33C35A5C3DE74F231DA8482AF824FF003A14E6CAB4FA73E3FB1FA35B232A8C86C4032E182A9E87DB2E34BF5080698F38338457F858C0DD55058F21B74350D26A82BD128114A050157CBEB6EE9CB7CD23E24DE970FE6507D69EA3D49F21199FF2CBEC9598D6444C05730B07389229FCB4FB562207853DDD1F9D0C0E3B12A89294E0E40E69212D7CFAF69DDF5CBB1CC3A8728B473001C1F1D52CF0E1D9D1DBC1914A9F9A21CD99EE6FD1571A3685EDD92392C25BBF5313029C94FB06710CD200223CA8E410134C15FDDEBDFD87D5B1E36697E7A526CC1378DBFD8C1808C49DED8824C88BC381817378792C40E6469ECEF13E433472CD5EEC40FCBA98BB94D375FE5F8BBAED732E90B31EAE8E13B212974791DA521517E264EF497FB564827FC6A4BDAFA60BACE622D59FC9D46A05D3D9643EEEE608A277D15356298969F6CA2E3CB8DE33075032F623A1C3670940D97BB7A1547DBC2FFFF6346CCE9940AC870E05A8032D532AD85EA086E6584F99EACD0C19D03BDFFFC7A58590E1E01DB97B4BB4790B07095C3BD0033A93C79697B6956A6C2633B4DCE9CC6DF98C62E1485CC66A55D694A3785CB4470AA7BA27DD4D5297F6BB2F89870C68480E43A7B0822D75BE35D16C2874A2A2B536A6506672902BA034C1258E083446CAC8236213B8BD25816FB33529559DE6D8F90B1B43E22D7C2F1940FD7D8B9E4C33C22296DB4D15D78AB90DFB36E7C611B209197ED657810B93B65CD4F734D255EB8CE44D6A4BF0BD8BDD190ABF9BB192BAEE692327CB7FB5F9AFC9683F4D8560DDA7F00EF15081A9D220D7F4EDDEE23D5A532ACBA890D1E7F3DE1D09F9BEF0422D806A140F76D06C002D58B833653C19BA3A9AFB083CD34282028EB89A7EB5EDEAF87644C14FBA20C627815D20DEDCB581F2E25BB9D05FC9A22583A7F13E249F7E96F4CA6E4E77B45AE1BFEE8C351B66ABB471817C590144D84F6180AC7C0BD57146CA1C028E9AA4539E61D5E381CD9BC7F4E38DBAFAE79783839D8D2693B94721FA76728AA7772AEC74AC56376C1887B08E50CE3DED1A0C218F52A15274BBFF019EF4454B8904AFEF55E167E511EB837327062F843726AC713133358C4D978A59F8F01D059A731E66260FF1900E38684A239681FFCA91655093EDDA4C48CA19F7551D7685F110AF09FBA61446E29357596DB4E2E98E68BC6600D35360EA547C769D73BA9B172EE7043F07AFBB12244E562F195BCB1DE066A7A39A89AAC5E0517125553194FAFCEB2C62EC1371540CEB1881E75AF275FE514AC082D9ACAD75737E6DEC0A2628DC5E2613BFDE074075BC2859025F5138A234AA9140AFDED02569E89449E73394CA520587BA3961B8DC75E42BCA31C1DA22D72A371F78241E08A7F1FE3153B13B18A88AC461750B79E4A88E641DD2164923866FFE6BA7F0FD2D2E37B5AC6076C5646BF1D7C3DD692B8015400DA29413A9DF48817829E76A8D8362C0C7CDCAF163017D821353099B4D9F071E4604FB822EF3DF7D621B8322230A9D63CEAAAF43C33F5297AE1270A82BEE5DFF8E12A0061A8718763B058DFE2C33BB179233F4A1F5A57352FD09645D42559FF89DBC9EF4713B0B8CD8EA1ADAF74B2589BACF01343FA805C75DF4821BCFCD9D0E9F310C53BDCE340D6F8F243F68EFE693538E28FDF2F4E429AD060D28708526F47C2CDA28B1E5E612A50C3AD5D6BA5C0EF9D74C3EACB5F963F15BCFE2432869C9BDB4465E07B3FD878FEB1EB0CFC5C682E8379FB2FC234E06056878864E349318E40AB8DCFF7AA5185E4AEEED997DCC995E1675346C66E9E60E94BB7FC4BF2876498AE66B4C392AE35C2CFEC39980F2AE9F28601667E20AC1E485938ED734CEFA3CDD9789821BEB8D5ECA979D4B0D75520A89FF5C2C1353300C806917C16FE2FBD30249399445ED9D3125259EF77A106FBC25C4BC68659EE939FA87618227CD635EBB3A4DF446FCF953808A0DFA9FEC5600322D78922A1A28517E3F2A1BBC55E4768E89A5BA3DBA3EDCD5F75924B81977BC2F6EC1F5F24AB239D47E53995EB20DE18C30E0754DCE8D28EC84C3D77A444FE3A49CB0AA7F2E2C2CB79C74B54A5A019C11E73BB19FD307A8B9EE23A6848D6A3400F4958A9FD1376185DB281D23B27C5C57A5F380046E2DC821690E12A422039B668729DB8B7FB8EAD219382AB6CFEF68376D1EF687C9EFA17946804B1465F9343150389405D2368EBBD701FC46124886F02BD2AF628A46A373C7A792DB111C95EBB66942C8E8AB5EC14D3A9EBE4919DEC4928DEF09517A1CCC8598357D02591BFB3A0CEF15EA5FE3C12AA2F655142888D1C4B4B1A3E49E0FCDB94C07D948568CEC367D11139D8CBE9ED24CCEAAE6D4998C9EE9FA8356F5C9E49DDF2F551A1C3F68EEDF794BDE6634B4602514DDB9CC2DE7DE3E12C490DD8ACE422F942C0873A11F37FC83BA1391E7C5DEB7D9F2BE87B56DFCF731D573F28535766BA0FA6F5D0925AB55C31E8077E5744E623581D7E8B3D98BED2B0E44CC40B4519485E320EF2687F596B284461A3BD60560134DE43D40CAAF91887D6C848F5CDF4F57116B139B68429D8CCF0EA0F05A9A3027160727913B1B500BB8EA438957757E93FFD152BF5DF4E64E55CE92EEDE7B36B4F199658EDE6E95037DFEDBDF11D3FF1DC7FDD6C4C577EC9E79E77C080A1D1C701325EBCEF22873D902B8E48F6F049B968CB3D74977C7026C6AC56181D2F841D694D86FCFD1AE8B98D39E68E32EECE3C19DCF0DEA7DA1}"},{"alias_name":"Eve","public_key":"PubKey{FCC08C0E8AADDF6AA09DA81DC1FCB2556310F97B791092ADEE645150D91F7E66506A078F38B7BA78A37038D26B04E9B3A926C024875E17D50FA1D7A15C2A0B080789116B4DFCF279455197CECB40ED745384294EA2C583415A4FA11463A357C767158A50C66F770C2565D3819F6B298E77B1BBB45D91EA64E33ACECE81BC0B5B5261C78F17A2CE613471C06A1CE9D9C5B026A30D72197EE95759114B8F172C9CDA2C7F81A06545CBB0406725A8798C5AA1F7C94596B4AAB9E9280111A6DC8083E5B61F6857796B7357AECCB1518552232548CF93BE111C741EA6B64D5A4BD5EC11D46C8888457DD926C86F757159A19EC0874A74D02A1F39C6AEEC6DF2E8515A62838FA23FC5C204D584B78C9075477783DA1BA808F910A5671CE2334DF974705197ADB78C7B3740B51D849F4B38037D84B6BF620554FC3C7E6C37C856791A882AD0D194306BA44BE5ABB689108F5C46DC07B5F1945FDBE6B346B57FE9C901DC425DB822643ABCA737817D62F236127184CFA526183B3AB0B2B4D8CC95FEBA78E8EC401BBAA9E4E14F20C17D62A42A72A91154281B81DB8480B1033B1846BA41B0475550EBEC960E80512F158F078B50B30581DDE7CC5E0B44DAF8B52806088C403C2DD1ADB7FA28D9D83D1538C244B64DB3814B48B387CFB77C01A188C60614D323566F83C25657BA0247663CF1134BC28B39A3CF861B327846159AB15BDC043B4116269757823E060945D949051489E7A4A1FAF419D5CA245571CBB1569A91854F75F6AAFFE05282303B8A866780C0218740BACCA45A1C9544239A68BF224A067286DB35B1BFCB26021B65F466623F1022E799054939333F9CC07C0C216C209EF8571522AB7935401BD0791EE150088E8A3D83D2AB8490193C11233955AC3BB06E9D09703BC609596071AD77A6B79235E6004D6EC02B82460C96D62CC996863515A33B22B2E6300A1F121F7348B54E2574AF960B45A27D4BC193435A7625787E56CBC4CC1449DE756B2A39AD4D5500DD2163E75005CBDCB55CF2888EF9016460A842141BAA6AB99F96904EF5869DB44BE4090CF8DA4DE85706FDA2848EA1851CA7383AD1328CB4A9C89413936B910910CD33E36537171B0AF0A12F964642C86A4D7CC48315BBAFF2589F8BBE113CBA2FCAC6741C48D0E5A99F4AC65FB3C9E1B06D6DBC7FDA4778C74CACE4F94E819A5D369153AEA4322ABB444B8A053916739B45C35C2A057D3B48F0C96618DA6BBB168B448B378CEBB4C2A8357D8701D3A574122CAAFBA06039B6253E37891773127490C2FEDCADC22A7DBC51AA19B9C7EFF42AC17CAA81D6B3A87A8A36D88F7F61920C9A41207A1A6C739594365656D482A725396DB41F6B2B6FD4FAA7B62544D8803F4CA384E2EC43CD520C7C31C727989B5A5BCB2B1B60BC5C67BC9701AE6311562577517089AA1359798753550CB12F211E2D0A569847BBA76779FFCA3AE74C6719506962158D0C06C918D45AD13A7B2742676C745457822BA957245B1106ADDBB4AA88A69D00CA1397701F757B45876915667D14FA4124BB2A78114F6299C52C9A8ED9B70CF41201F674CE88090FFF86BB49EC1249D868B13BBD81A4C339B8959270041EA19843DBC8F029C85DC5B56DA0C4E833B39AB5B265FB2114EA00E6690C53B143AC16C4DE8856D090D670D606E2166CCE66830CFCE4527EAC98CA3592970C95429ED60A619A1A8E468D76DA6492E4D63747F7827F8EAACB6E300D1C9719F814303BB938CE6C70B27D58B760B64176B2AA12118F17F6BF67661E7FB4499040C7825441E30B58345CFC587C4F52F6690F50301D8508E854527A88CDF1D5684401F262345E8E34FF3502C4AD4C301EC903419757675C2D992AF6F8ADA1166BA854368B8F17622CC67EEB70EA7389E854896E0CFAA829CBB878AF74CA45CBA82A783D46D11A8FC49082E8FD88DA0260CB74E036AFE7C367E40E0F5A08F988BCCB50CA88280F68004BC6D4E60BC2911F22466167914D2F0783CA21904F8BAEB824BFB7A041AA9C483DE6B721762E4A50EB292FF490DD9E3298D389DB70B460745BECB2B32CF3814CE0E406DED43177CBCF4241432FB6CFE5F2F70EDED5D485887EA4B4DA8EDC4C725B44F6EF9D8048805048329FC08F60601F5A2D543F11BDE1BDEE1F77E3AB2F3B2576BE94A6C136D59125098A64BF377F3E2E9EE7B33B25AF3528329C581D1E8F40137FD1398ADC49FCAAFB0DCBF60E1D95DE1506B59B7F34FAE5581E6DB8118E1F3F37E774DB31142595C1151F32CC6CB2B7D50D309ED5CEA0B139115F4D62C8C73123CA28887558CB634D59CE69597E644CC99A8BF5527F077E56AC8A7B681B6CAC683E9E30CA0F67D0E6CE662CF1C852DF761E8E6E95191FE3A41C265E107933F2FA3672506EA4C527991D01C53341FDAA6D77BCD4EB4B5D3D7766ED7B4CDAA350FAC4EA58F27DD5D1A5A080691172BB6A3262A100695506EA6F739499A230AE240FCE5BB2998CE11BF4EAE53734293025A0C65BB4356A598A08DA99EBFE8257BF5F10253FD898D0E6B6B213895F93E8744B33C2840E7E37B4860248D9E9CADB0AF2548DECBA5C9E13FAE6A4BE75591E005E2333C5045748AB7EC0238160F31EAFBBD09E67718AAB1DFDB658EA38BF04035E4DD465BD9D2B5FB52F4245DCB5C5E43F7408B4078E0F47144260C279D135DA4D634394676DF003950DD27DB1992AFF255B59B9193A4AF485180A351DC0D0073B2EC2A68BE5DB4F72EE48A16E77946E4060583BC34DFCA73C1C0C29A45DC888A5B634DE2FBD6F48956867F329FC6EC2E09F52AF3F5A21E5692147B288F0EC65C94319B998F2710B9EB7F90427454BE691326DE531D29FDBE85B77D1A71B400FE35F92AF67EED007A45C5D9D939F557D02BDA00002D89F991B3DB5F2E2D4286868D44741347F71DA38824AD253D92A2042771225791A9061280892CA57165B1CC0BB304F7C1F33B3388AC3046B7DA62283FD9C03A18D1FFAD53DE5051D07469CD417A35C6FC8F094B021FEE48C810EE2B7E9CA8F84691E4FFF1AB517793F64BEFD60A975BD67FC3B59D2EE96BD1F2CE449F1F8BDC704AFC1853357667CC540E281EF456EAE8A616443B74375D56189521D01AFDD08153CB61DCE53782C545ECEAD52E1B91C0DD22299CB5DCB22ADE6B50428F9932CB2DB243051E55CCF2D2BD66C21E0C44780CBF891B0EBF3604FBF697CB67468200FAD9CC422266080592EDD6BC1D8A57F6F36D34D4EC4AD4F0A3BA7FD55B33CF2027CAC5DB360D152F9BD3E88AFEE1BFC640756AC37AD4A3631B3247CC5FF498C9DEC3E2047F3774F9710E54F4A522F2EA1B94910ACAC6F1242589F51F4DAF23265DFF4EE1572172D1C25F55E8314A2E5215421F71339956E6E066557514FC79C5646C15549DD4374766CB2736781C48356DA02CE783AB3BF847D7BB1EDDB8706DDDB9212BB9DFE4E920E599FF3EC9FC83E7F0340ACC0678CEF7DBB7A532FDA80EA870162D3081BFD583FD9A7A1B7B3D6308B46CB43235D12227BE307DE8AC55AC61B70C33C66739F7973A5C070F99140B08E8AD19E3181F9B89DD2982B7804B2484D7715071DD126D4F1AEB4A3501716E25BDA6467234D65943EFE1C74D9E38C0439D9125B0603D0151E49983156EAD417EC37D0DAEC4DA69185A586473D3AFFF9188307B0A17EB31638FE20A733437A0BEB759C2760C35772E82287E45622ADEDC33A098381765687969395270B5BD3220C197D6D73711B3E4D31FFCA3674B63C010945D0F66049034605A033CFAE6C1ED7254BC2AACF65DF6E85C3A8E5272763AD74826D7361B00B26176CDD7CF29F01FF1046A06456DE7F920238E13839485BFBEE25DAD910ED6BB47D5A3F927AA79B8786DB34BE88C383DCC8FF1ACEC115A48A4F6B6628BFDD68115CAE2D41316516858FF319AD4AB48F32000567480FFC2F5C493241A5BAD509C3BD4C2372F3CCC0449DFB5F78A4D813273C79393581D55FC5B947413DFC8A149453695E571636E5B584BF92C51CF082B3C652D2FA4382B590662C93332D06AAA8AE51DDE91412E5BFBDE4DD84575123C9ED8B0278956149758AED8E0FB5A8179E3EF7AF841FB7627C7C066B923B5C3009875AEB14C430EEE7410FB3177C4E694E0A2BFFC1665F0796582FCF5BEED5D997F5E5AA74550E89452A2693628D12E1240BBA5233A67C76B5BFAA9FC6FFC071749A0ED47CD49A55AAE3D581B3AFD6361D171330B6A53CB933FEE2EF3F1478ED38B57977CAA10C0CB5659D0A20E65C89685A153AC2F58F0D404ED8ADD36D594C4D719CF04CCCCB3E0A8D97A68E2E02DA598E372E01C916B765B1EA32510E917F4BC5E9BACA6E809CE848609CE6A8F97341F20C033218D8CF6CBB4261C479131CDFB76F4714867619419BEC1345BEB909B1AC658182C8875BE3D32FCCEC9A5CD8F53FB56A5885}"}]

2.2. POST Request

curl -i -X POST -H 'Accept: application/json' http://localhost:9572/api/config/friends --data '{"alias_name": "Eve", "public_key":"PubKey{02EC397B1B2351A59941115FBB93268D84B807119166A091DFEA3D9CFA4028B1ADD5A98A0E651351539C2139C2A79B2FB54C32E6C874C5DA76EB2368DFDB4C7805BD7F0B3DAD9A944E6172A713144FB91837A71120F78B3016B599FA899EA606B839A7C2B81CCE23068A6A48428699005DB6DC2B570B619DACC2A05783C0E27B2906904220607AB10313934CAF3BB40B78590F482133E917828A904B11E14355E50B404B848524389041BD0B87C02079158F9C4928BB68E4D18D96C68E248C090E3A71AB71C5F10BAB6B25445179999B32723574B25AE8117F9B681DE76004155B5286A05183196838383CEA09AFA2B81D4757C4C3A04EBA7299628BDDE312B0F982C8E917CB5418E7E83D1E05144800C41CA544CF516D5AC2B448573B691240B52409DFBA57B1554C1658423DB67CB2F122D8BA2610293020A75B62497BED3B5F919ACF8B73C6FFA21F4A6B6DF5215E3364A32BAA5DC29212B951BBD77C8ED184AE4339C0626B3B22AB391671148464B0C3717B6DB1CF241A25CE018DD2CA428F634F1A16B091C573D7958649082DF6E0CB02880C4376B470263D2A5842FA4AA823043A62B9C9407B2604A147B543524CB427D7787477168B89AA71A092356DA11C37301176AA907E100BEAF4AAFEC1CC78860DC6BB3ECD1A6170E6A560935B0E1B5CE8A889EB41349D3152135AAFE08B8AD5DBB95692CFCA3A801884758EAB4C54A4BC18500FE167886056C07BE9B69C86009AB11AEDCC1066430E03640D9AB444683C93D61C6B3A862CF2351FB69CC2E1C183DD530892FB6668B67828112F86556C4AD1605CA0A579C62101CA8908C260B4D76349949E7038A21B90383432727694BD4A958242CB1E199B48274CBDB2FCACA729903D4A1160E6B87F0B9AA2A3BCCBB39353135E54E659ADCA16A8822F2E4214A128502C25573EC56D0AC8AEF123A5A159AFB5140C9279A45725A0CAC026FADB6CA8909234E86DADB228C4307B48258B7C885428CC909B88AEF495B2440B3C682870E6D795C6D10BCE11134EA94C4A5419F6056915D0A77A0C78FC09685A6430B5F894EDC050F744047AF382DF6B14B5823C354767EF2C4DAFF1B0F888B97AB48661D527A50703E553847C0BA148ABAF24F371F64BCFB1945F435056D3299C4D240708E1AC16065C11D557D804709BA86DF930445210B3FDB82DBED6A26774CDC442184D049128374388778A71188D79A1491EB32270016E4A243D47576073F64547E665A4166D44EA48FEAABAFBC006FD61065B24822879B536878AA8E9206ED230B8A4B67056BA42983C047282DBCC963108A0E7BB2CA055319965A5CA7B3CBC0176A4245009FC16171426E01ABED46C4FC56C456D7947BA48B0F1A808976954749580D9456A47B2818B362AF5C13A8C65C10DC364AE430740F40C324C8F01F9464B498CB4054EA9404EAD057DD61C8495A99155647D5162760AF3156948AEBA56451D94CC7517CC8EC9CBE107438653333377C267C808E9CC37469A8CF9A4138E4A1B1A6A3C5508A9C2F09CBC196F9A110B43290F4716A9BECB0F3C896648D7C53516C67B198D78B31A6B65BF6E824D5BF75049D998F19C41326A7EBB69B2D27934B999B6A2C1694F76BBBC596410CBBA4409DDA35CA1A8B289FE3FBA643150405F043D29A69F7A809D5242D22013DD33C35A5C3DE74F231DA8482AF824FF003A14E6CAB4FA73E3FB1FA35B232A8C86C4032E182A9E87DB2E34BF5080698F38338457F858C0DD55058F21B74350D26A82BD128114A050157CBEB6EE9CB7CD23E24DE970FE6507D69EA3D49F21199FF2CBEC9598D6444C05730B07389229FCB4FB562207853DDD1F9D0C0E3B12A89294E0E40E69212D7CFAF69DDF5CBB1CC3A8728B473001C1F1D52CF0E1D9D1DBC1914A9F9A21CD99EE6FD1571A3685EDD92392C25BBF5313029C94FB06710CD200223CA8E410134C15FDDEBDFD87D5B1E36697E7A526CC1378DBFD8C1808C49DED8824C88BC381817378792C40E6469ECEF13E433472CD5EEC40FCBA98BB94D375FE5F8BBAED732E90B31EAE8E13B212974791DA521517E264EF497FB564827FC6A4BDAFA60BACE622D59FC9D46A05D3D9643EEEE608A277D15356298969F6CA2E3CB8DE33075032F623A1C3670940D97BB7A1547DBC2FFFF6346CCE9940AC870E05A8032D532AD85EA086E6584F99EACD0C19D03BDFFFC7A58590E1E01DB97B4BB4790B07095C3BD0033A93C79697B6956A6C2633B4DCE9CC6DF98C62E1485CC66A55D694A3785CB4470AA7BA27DD4D5297F6BB2F89870C68480E43A7B0822D75BE35D16C2874A2A2B536A6506672902BA034C1258E083446CAC8236213B8BD25816FB33529559DE6D8F90B1B43E22D7C2F1940FD7D8B9E4C33C22296DB4D15D78AB90DFB36E7C611B209197ED657810B93B65CD4F734D255EB8CE44D6A4BF0BD8BDD190ABF9BB192BAEE692327CB7FB5F9AFC9683F4D8560DDA7F00EF15081A9D220D7F4EDDEE23D5A532ACBA890D1E7F3DE1D09F9BEF0422D806A140F76D06C002D58B833653C19BA3A9AFB083CD34282028EB89A7EB5EDEAF87644C14FBA20C627815D20DEDCB581F2E25BB9D05FC9A22583A7F13E249F7E96F4CA6E4E77B45AE1BFEE8C351B66ABB471817C590144D84F6180AC7C0BD57146CA1C028E9AA4539E61D5E381CD9BC7F4E38DBAFAE79783839D8D2693B94721FA76728AA7772AEC74AC56376C1887B08E50CE3DED1A0C218F52A15274BBFF019EF4454B8904AFEF55E167E511EB837327062F843726AC713133358C4D978A59F8F01D059A731E66260FF1900E38684A239681FFCA91655093EDDA4C48CA19F7551D7685F110AF09FBA61446E29357596DB4E2E98E68BC6600D35360EA547C769D73BA9B172EE7043F07AFBB12244E562F195BCB1DE066A7A39A89AAC5E0517125553194FAFCEB2C62EC1371540CEB1881E75AF275FE514AC082D9ACAD75737E6DEC0A2628DC5E2613BFDE074075BC2859025F5138A234AA9140AFDED02569E89449E73394CA520587BA3961B8DC75E42BCA31C1DA22D72A371F78241E08A7F1FE3153B13B18A88AC461750B79E4A88E641DD2164923866FFE6BA7F0FD2D2E37B5AC6076C5646BF1D7C3DD692B8015400DA29413A9DF48817829E76A8D8362C0C7CDCAF163017D821353099B4D9F071E4604FB822EF3DF7D621B8322230A9D63CEAAAF43C33F5297AE1270A82BEE5DFF8E12A0061A8718763B058DFE2C33BB179233F4A1F5A57352FD09645D42559FF89DBC9EF4713B0B8CD8EA1ADAF74B2589BACF01343FA805C75DF4821BCFCD9D0E9F310C53BDCE340D6F8F243F68EFE693538E28FDF2F4E429AD060D28708526F47C2CDA28B1E5E612A50C3AD5D6BA5C0EF9D74C3EACB5F963F15BCFE2432869C9BDB4465E07B3FD878FEB1EB0CFC5C682E8379FB2FC234E06056878864E349318E40AB8DCFF7AA5185E4AEEED997DCC995E1675346C66E9E60E94BB7FC4BF2876498AE66B4C392AE35C2CFEC39980F2AE9F28601667E20AC1E485938ED734CEFA3CDD9789821BEB8D5ECA979D4B0D75520A89FF5C2C1353300C806917C16FE2FBD30249399445ED9D3125259EF77A106FBC25C4BC68659EE939FA87618227CD635EBB3A4DF446FCF953808A0DFA9FEC5600322D78922A1A28517E3F2A1BBC55E4768E89A5BA3DBA3EDCD5F75924B81977BC2F6EC1F5F24AB239D47E53995EB20DE18C30E0754DCE8D28EC84C3D77A444FE3A49CB0AA7F2E2C2CB79C74B54A5A019C11E73BB19FD307A8B9EE23A6848D6A3400F4958A9FD1376185DB281D23B27C5C57A5F380046E2DC821690E12A422039B668729DB8B7FB8EAD219382AB6CFEF68376D1EF687C9EFA17946804B1465F9343150389405D2368EBBD701FC46124886F02BD2AF628A46A373C7A792DB111C95EBB66942C8E8AB5EC14D3A9EBE4919DEC4928DEF09517A1CCC8598357D02591BFB3A0CEF15EA5FE3C12AA2F655142888D1C4B4B1A3E49E0FCDB94C07D948568CEC367D11139D8CBE9ED24CCEAAE6D4998C9EE9FA8356F5C9E49DDF2F551A1C3F68EEDF794BDE6634B4602514DDB9CC2DE7DE3E12C490DD8ACE422F942C0873A11F37FC83BA1391E7C5DEB7D9F2BE87B56DFCF731D573F28535766BA0FA6F5D0925AB55C31E8077E5744E623581D7E8B3D98BED2B0E44CC40B4519485E320EF2687F596B284461A3BD60560134DE43D40CAAF91887D6C848F5CDF4F57116B139B68429D8CCF0EA0F05A9A3027160727913B1B500BB8EA438957757E93FFD152BF5DF4E64E55CE92EEDE7B36B4F199658EDE6E95037DFEDBDF11D3FF1DC7FDD6C4C577EC9E79E77C080A1D1C701325EBCEF22873D902B8E48F6F049B968CB3D74977C7026C6AC56181D2F841D694D86FCFD1AE8B98D39E68E32EECE3C19DCF0DEA7DA1}"}'

2.2. POST Response

HTTP/1.1 200 OK
Content-Type: text/plain
Date: Mon, 07 Aug 2023 00:22:19 GMT
Content-Length: 23

success: update friends

2.3. DELETE Request

curl -i -X DELETE -H 'Accept: application/json' http://localhost:9572/api/config/friends --data '{"alias_name": "Eve"}'

2.3. DELETE Response

HTTP/1.1 200 OK
Content-Type: text/plain
Date: Mon, 07 Aug 2023 00:23:12 GMT
Content-Length: 22

success: delete friend

3. /api/config/settings

3.1. GET Request

curl -i -X GET -H 'Accept: application/json' http://localhost:9572/api/config/settings

3.1. GET Response

HTTP/1.1 200 OK
Content-Type: application/json
Date: Sun, 12 Nov 2023 19:01:38 GMT
Content-Length: 120
{"message_size_bytes":8192,"queue_period_ms":5000,"work_size_bits":22}

4. /api/network/online

4.1. GET Request

curl -i -X GET -H 'Accept: application/json' http://localhost:9572/api/network/online

4.1. GET Response

HTTP/1.1 200 OK
Content-Type: application/json
Date: Mon, 07 Aug 2023 00:23:25 GMT
Content-Length: 18
["localhost:9581"]

4.2. DELETE Request

curl -i -X DELETE -H 'Accept: application/json' http://localhost:9572/api/network/online --data 'localhost:9581'

4.2. DELETE Response

HTTP/1.1 200 OK
Content-Type: text/plain
Date: Mon, 07 Aug 2023 00:24:14 GMT
Content-Length: 33

success: delete online connection

5. /api/network/request

Prefix script

#!/bin/bash

# base64(hello, world!) = aGVsbG8sIHdvcmxkIQ==
PUSH_FORMAT='{
    "receiver":"Bob",
    "req_data":{
        "method":"POST",
        "host":"hidden-echo-service",
        "path":"/echo",
        "body":"aGVsbG8sIHdvcmxkIQ=="
    }
}';

5.1. POST Request

curl -i -X POST -H 'Accept: application/json' http://localhost:9572/api/network/request --data "${PUSH_FORMAT}"

5.1. POST Response

HTTP/1.1 200 OK
Content-Type: application/json
Date: Mon, 07 Aug 2023 00:31:27 GMT
Content-Length: 113
{"code":200,"head":{"Content-Type":"application/json"},"body":"eyJlY2hvIjoiaGVsbG8sIHdvcmxkISIsInJldHVybiI6MX0K"}

5.2. PUT Request

curl -i -X PUT -H 'Accept: application/json' http://localhost:9572/api/network/request --data "${PUSH_FORMAT}"

5.2. PUT Response

HTTP/1.1 200 OK
Date: Sun, 06 Aug 2023 23:21:20 GMT
Content-Length: 18
Content-Type: text/plain; charset=utf-8

success: broadcast

6. /api/service/pubkey

6.1. GET Request

curl -i -X GET -H 'Accept: application/json' 'http://localhost:9572/api/service/pubkey'

6.1. GET Response

HTTP/1.1 200 OK
Content-Type: application/json
Date: Mon, 07 Aug 2023 00:35:45 GMT
Transfer-Encoding: chunked
PubKey{02EC397B1B2351A59941115FBB93268D84B807119166A091DFEA3D9CFA4028B1ADD5A98A0E651351539C2139C2A79B2FB54C32E6C874C5DA76EB2368DFDB4C7805BD7F0B3DAD9A944E6172A713144FB91837A71120F78B3016B599FA899EA606B839A7C2B81CCE23068A6A48428699005DB6DC2B570B619DACC2A05783C0E27B2906904220607AB10313934CAF3BB40B78590F482133E917828A904B11E14355E50B404B848524389041BD0B87C02079158F9C4928BB68E4D18D96C68E248C090E3A71AB71C5F10BAB6B25445179999B32723574B25AE8117F9B681DE76004155B5286A05183196838383CEA09AFA2B81D4757C4C3A04EBA7299628BDDE312B0F982C8E917CB5418E7E83D1E05144800C41CA544CF516D5AC2B448573B691240B52409DFBA57B1554C1658423DB67CB2F122D8BA2610293020A75B62497BED3B5F919ACF8B73C6FFA21F4A6B6DF5215E3364A32BAA5DC29212B951BBD77C8ED184AE4339C0626B3B22AB391671148464B0C3717B6DB1CF241A25CE018DD2CA428F634F1A16B091C573D7958649082DF6E0CB02880C4376B470263D2A5842FA4AA823043A62B9C9407B2604A147B543524CB427D7787477168B89AA71A092356DA11C37301176AA907E100BEAF4AAFEC1CC78860DC6BB3ECD1A6170E6A560935B0E1B5CE8A889EB41349D3152135AAFE08B8AD5DBB95692CFCA3A801884758EAB4C54A4BC18500FE167886056C07BE9B69C86009AB11AEDCC1066430E03640D9AB444683C93D61C6B3A862CF2351FB69CC2E1C183DD530892FB6668B67828112F86556C4AD1605CA0A579C62101CA8908C260B4D76349949E7038A21B90383432727694BD4A958242CB1E199B48274CBDB2FCACA729903D4A1160E6B87F0B9AA2A3BCCBB39353135E54E659ADCA16A8822F2E4214A128502C25573EC56D0AC8AEF123A5A159AFB5140C9279A45725A0CAC026FADB6CA8909234E86DADB228C4307B48258B7C885428CC909B88AEF495B2440B3C682870E6D795C6D10BCE11134EA94C4A5419F6056915D0A77A0C78FC09685A6430B5F894EDC050F744047AF382DF6B14B5823C354767EF2C4DAFF1B0F888B97AB48661D527A50703E553847C0BA148ABAF24F371F64BCFB1945F435056D3299C4D240708E1AC16065C11D557D804709BA86DF930445210B3FDB82DBED6A26774CDC442184D049128374388778A71188D79A1491EB32270016E4A243D47576073F64547E665A4166D44EA48FEAABAFBC006FD61065B24822879B536878AA8E9206ED230B8A4B67056BA42983C047282DBCC963108A0E7BB2CA055319965A5CA7B3CBC0176A4245009FC16171426E01ABED46C4FC56C456D7947BA48B0F1A808976954749580D9456A47B2818B362AF5C13A8C65C10DC364AE430740F40C324C8F01F9464B498CB4054EA9404EAD057DD61C8495A99155647D5162760AF3156948AEBA56451D94CC7517CC8EC9CBE107438653333377C267C808E9CC37469A8CF9A4138E4A1B1A6A3C5508A9C2F09CBC196F9A110B43290F4716A9BECB0F3C896648D7C53516C67B198D78B31A6B65BF6E824D5BF75049D998F19C41326A7EBB69B2D27934B999B6A2C1694F76BBBC596410CBBA4409DDA35CA1A8B289FE3FBA643150405F043D29A69F7A809D5242D22013DD33C35A5C3DE74F231DA8482AF824FF003A14E6CAB4FA73E3FB1FA35B232A8C86C4032E182A9E87DB2E34BF5080698F38338457F858C0DD55058F21B74350D26A82BD128114A050157CBEB6EE9CB7CD23E24DE970FE6507D69EA3D49F21199FF2CBEC9598D6444C05730B07389229FCB4FB562207853DDD1F9D0C0E3B12A89294E0E40E69212D7CFAF69DDF5CBB1CC3A8728B473001C1F1D52CF0E1D9D1DBC1914A9F9A21CD99EE6FD1571A3685EDD92392C25BBF5313029C94FB06710CD200223CA8E410134C15FDDEBDFD87D5B1E36697E7A526CC1378DBFD8C1808C49DED8824C88BC381817378792C40E6469ECEF13E433472CD5EEC40FCBA98BB94D375FE5F8BBAED732E90B31EAE8E13B212974791DA521517E264EF497FB564827FC6A4BDAFA60BACE622D59FC9D46A05D3D9643EEEE608A277D15356298969F6CA2E3CB8DE33075032F623A1C3670940D97BB7A1547DBC2FFFF6346CCE9940AC870E05A8032D532AD85EA086E6584F99EACD0C19D03BDFFFC7A58590E1E01DB97B4BB4790B07095C3BD0033A93C79697B6956A6C2633B4DCE9CC6DF98C62E1485CC66A55D694A3785CB4470AA7BA27DD4D5297F6BB2F89870C68480E43A7B0822D75BE35D16C2874A2A2B536A6506672902BA034C1258E083446CAC8236213B8BD25816FB33529559DE6D8F90B1B43E22D7C2F1940FD7D8B9E4C33C22296DB4D15D78AB90DFB36E7C611B209197ED657810B93B65CD4F734D255EB8CE44D6A4BF0BD8BDD190ABF9BB192BAEE692327CB7FB5F9AFC9683F4D8560DDA7F00EF15081A9D220D7F4EDDEE23D5A532ACBA890D1E7F3DE1D09F9BEF0422D806A140F76D06C002D58B833653C19BA3A9AFB083CD34282028EB89A7EB5EDEAF87644C14FBA20C627815D20DEDCB581F2E25BB9D05FC9A22583A7F13E249F7E96F4CA6E4E77B45AE1BFEE8C351B66ABB471817C590144D84F6180AC7C0BD57146CA1C028E9AA4539E61D5E381CD9BC7F4E38DBAFAE79783839D8D2693B94721FA76728AA7772AEC74AC56376C1887B08E50CE3DED1A0C218F52A15274BBFF019EF4454B8904AFEF55E167E511EB837327062F843726AC713133358C4D978A59F8F01D059A731E66260FF1900E38684A239681FFCA91655093EDDA4C48CA19F7551D7685F110AF09FBA61446E29357596DB4E2E98E68BC6600D35360EA547C769D73BA9B172EE7043F07AFBB12244E562F195BCB1DE066A7A39A89AAC5E0517125553194FAFCEB2C62EC1371540CEB1881E75AF275FE514AC082D9ACAD75737E6DEC0A2628DC5E2613BFDE074075BC2859025F5138A234AA9140AFDED02569E89449E73394CA520587BA3961B8DC75E42BCA31C1DA22D72A371F78241E08A7F1FE3153B13B18A88AC461750B79E4A88E641DD2164923866FFE6BA7F0FD2D2E37B5AC6076C5646BF1D7C3DD692B8015400DA29413A9DF48817829E76A8D8362C0C7CDCAF163017D821353099B4D9F071E4604FB822EF3DF7D621B8322230A9D63CEAAAF43C33F5297AE1270A82BEE5DFF8E12A0061A8718763B058DFE2C33BB179233F4A1F5A57352FD09645D42559FF89DBC9EF4713B0B8CD8EA1ADAF74B2589BACF01343FA805C75DF4821BCFCD9D0E9F310C53BDCE340D6F8F243F68EFE693538E28FDF2F4E429AD060D28708526F47C2CDA28B1E5E612A50C3AD5D6BA5C0EF9D74C3EACB5F963F15BCFE2432869C9BDB4465E07B3FD878FEB1EB0CFC5C682E8379FB2FC234E06056878864E349318E40AB8DCFF7AA5185E4AEEED997DCC995E1675346C66E9E60E94BB7FC4BF2876498AE66B4C392AE35C2CFEC39980F2AE9F28601667E20AC1E485938ED734CEFA3CDD9789821BEB8D5ECA979D4B0D75520A89FF5C2C1353300C806917C16FE2FBD30249399445ED9D3125259EF77A106FBC25C4BC68659EE939FA87618227CD635EBB3A4DF446FCF953808A0DFA9FEC5600322D78922A1A28517E3F2A1BBC55E4768E89A5BA3DBA3EDCD5F75924B81977BC2F6EC1F5F24AB239D47E53995EB20DE18C30E0754DCE8D28EC84C3D77A444FE3A49CB0AA7F2E2C2CB79C74B54A5A019C11E73BB19FD307A8B9EE23A6848D6A3400F4958A9FD1376185DB281D23B27C5C57A5F380046E2DC821690E12A422039B668729DB8B7FB8EAD219382AB6CFEF68376D1EF687C9EFA17946804B1465F9343150389405D2368EBBD701FC46124886F02BD2AF628A46A373C7A792DB111C95EBB66942C8E8AB5EC14D3A9EBE4919DEC4928DEF09517A1CCC8598357D02591BFB3A0CEF15EA5FE3C12AA2F655142888D1C4B4B1A3E49E0FCDB94C07D948568CEC367D11139D8CBE9ED24CCEAAE6D4998C9EE9FA8356F5C9E49DDF2F551A1C3F68EEDF794BDE6634B4602514DDB9CC2DE7DE3E12C490DD8ACE422F942C0873A11F37FC83BA1391E7C5DEB7D9F2BE87B56DFCF731D573F28535766BA0FA6F5D0925AB55C31E8077E5744E623581D7E8B3D98BED2B0E44CC40B4519485E320EF2687F596B284461A3BD60560134DE43D40CAAF91887D6C848F5CDF4F57116B139B68429D8CCF0EA0F05A9A3027160727913B1B500BB8EA438957757E93FFD152BF5DF4E64E55CE92EEDE7B36B4F199658EDE6E95037DFEDBDF11D3FF1DC7FDD6C4C577EC9E79E77C080A1D1C701325EBCEF22873D902B8E48F6F049B968CB3D74977C7026C6AC56181D2F841D694D86FCFD1AE8B98D39E68E32EECE3C19DCF0DEA7DA1}