add tools
This commit is contained in:
джерело
d60d62307b
коміт
e4e305c83e
38
bssl_perf/Makefile
Normal file
38
bssl_perf/Makefile
Normal file
@ -0,0 +1,38 @@
|
||||
BORINGSSL_DIR=/home/hdc/repos/cloudflare/boringssl
|
||||
BORINGSSL_LIB=$(BORINGSSL_DIR)/build.64bitRel/
|
||||
|
||||
CC = clang
|
||||
SRCDIR = src
|
||||
OBJDIR = obj
|
||||
DBG ?= 1
|
||||
|
||||
ifeq ($(DBG),1)
|
||||
DEBUG = -DDEBUG -g -O0
|
||||
else
|
||||
DEBUG = -O3
|
||||
endif
|
||||
|
||||
CFLAGS = -std=c99
|
||||
CFLAGS+= $(DEBUG)
|
||||
CFLAGS+= -I$(BORINGSSL_DIR)/ -I$(BORINGSSL_DIR)/include
|
||||
|
||||
LDFLAGS = -L$(BORINGSSL_LIB)/crypto -L$(BORINGSSL_LIB)/ssl
|
||||
LDFLAGS+= -lssl -lcrypto -lpthread
|
||||
|
||||
all: server client
|
||||
|
||||
clean:
|
||||
rm -rf $(OBJDIR)
|
||||
rm -rf client server
|
||||
|
||||
client: common
|
||||
$(CC) -c $(SRCDIR)/client.c -o $(OBJDIR)/client.o $(CFLAGS)
|
||||
$(CC) -o client $(OBJDIR)/client.o $(OBJDIR)/common.o $(LDFLAGS)
|
||||
|
||||
server: common
|
||||
$(CC) -c $(SRCDIR)/server.c -o $(OBJDIR)/server.o $(CFLAGS)
|
||||
$(CC) -o server $(OBJDIR)/server.o $(OBJDIR)/common.o $(LDFLAGS)
|
||||
|
||||
common:
|
||||
mkdir -p $(OBJDIR)
|
||||
$(CC) -c $(SRCDIR)/common.c -o $(OBJDIR)/common.o $(CFLAGS)
|
24
bssl_perf/etc/ca/ca.cert.pem
Normal file
24
bssl_perf/etc/ca/ca.cert.pem
Normal file
@ -0,0 +1,24 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIID8jCCAtqgAwIBAgIJALuIdyUDX1d+MA0GCSqGSIb3DQEBCwUAMIGFMQswCQYD
|
||||
VQQGEwJGUjENMAsGA1UECAwEUEFDQTEXMBUGA1UEBwwOQ2FnbmVzIHN1ciBNZXIx
|
||||
JjAkBgNVBAsMHURvbWFpbiBDb250cm9sIFZhbGlkYXRlZCBTQVJMMSYwJAYDVQQD
|
||||
DB1Eb21haW4gQ29udHJvbCBWYWxpZGF0ZWQgU0FSTDAeFw0xODA0MDkxNjMxMDVa
|
||||
Fw00NTA4MjUxNjMxMDVaMIGFMQswCQYDVQQGEwJGUjENMAsGA1UECAwEUEFDQTEX
|
||||
MBUGA1UEBwwOQ2FnbmVzIHN1ciBNZXIxJjAkBgNVBAsMHURvbWFpbiBDb250cm9s
|
||||
IFZhbGlkYXRlZCBTQVJMMSYwJAYDVQQDDB1Eb21haW4gQ29udHJvbCBWYWxpZGF0
|
||||
ZWQgU0FSTDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALBjh23Spt4I
|
||||
AvaFLNL9LXDngLy6OyJbqPYNOEfn9vdvzcCJZbBDhD1HNoIuJux340wcio5TZajX
|
||||
sJCIUl/n+e+8BGwxzZvp3qM2e/Rs94roZjlUWHMaX/a8Q7MvrR9XWM1SaEp2fHa9
|
||||
nBgdfSo+BvvILq8lZU7vO+xw7Yjtx0YNk1v3IAMoQyrfaeZcb9uE1tuAj0oPwmEp
|
||||
CWqGVkQEIJ6MJBbA+6SW6yi/5h3s0mbc7hdcmLr+vSv5Bkg8qOaPwh0ffuTCMuGq
|
||||
8q9en4WSW/mnbDZpPdGZwp4Ub7po4Zp9dVQoD7Skf9chz26+pivmIfUB1Xwr48b2
|
||||
gFfbZcwDsFsCAwEAAaNjMGEwHQYDVR0OBBYEFPSjEiJgM3NjauAc0lzUrgExAgvg
|
||||
MB8GA1UdIwQYMBaAFPSjEiJgM3NjauAc0lzUrgExAgvgMA8GA1UdEwEB/wQFMAMB
|
||||
Af8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4IBAQAQALRSOq1IwOMG
|
||||
qZeXvNmd+jGomDH4IDV+s+agGWWneVzRJzP1qSxvrG5BgyP+STzvxEJBgGfCZKHw
|
||||
qW2HH2bt3vU0KhF90zthmLlZSphuF3XTBUyWfhmUgxuSWxgScBLHrk2vwQv55Mxn
|
||||
N88DPwYfRLjJUfEIDhzgNRsrVP1mbP0tmXjfmuQzE9Ht8L3fqJ+Tfk/eHdJIOkeM
|
||||
YRYSOT6oa7g49Vi6ONE7m+BqCDS7D+2p6t6Zb/1lEI82TvmbUq7gd9xHCROFmhis
|
||||
gBKsJxp0aVI5pB9mLqnluB21c4sVqt6si8sWcJjtTCmojp192aSxB3A6hVI0P8qY
|
||||
7iJBFwa1
|
||||
-----END CERTIFICATE-----
|
8
bssl_perf/etc/ecdsa_256.key
Normal file
8
bssl_perf/etc/ecdsa_256.key
Normal file
@ -0,0 +1,8 @@
|
||||
-----BEGIN EC PARAMETERS-----
|
||||
BggqhkjOPQMBBw==
|
||||
-----END EC PARAMETERS-----
|
||||
-----BEGIN EC PRIVATE KEY-----
|
||||
MHcCAQEEIF8KXjVrcF0u+J3dDxrOPHr3/xQlxwpZowwdDxiM72iUoAoGCCqGSM49
|
||||
AwEHoUQDQgAE7HJPLOV22gIiLMIR1btCTDQMbtwwWqhuErrk2r4+p3Oino2fSDBm
|
||||
9T76CNfnLjmUue1qoLj144aK86GB0rGy4A==
|
||||
-----END EC PRIVATE KEY-----
|
15
bssl_perf/etc/ecdsa_256.pem
Normal file
15
bssl_perf/etc/ecdsa_256.pem
Normal file
@ -0,0 +1,15 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICTTCCATUCCQD7FNAespFtBDANBgkqhkiG9w0BAQsFADCBhTELMAkGA1UEBhMC
|
||||
RlIxDTALBgNVBAgMBFBBQ0ExFzAVBgNVBAcMDkNhZ25lcyBzdXIgTWVyMSYwJAYD
|
||||
VQQLDB1Eb21haW4gQ29udHJvbCBWYWxpZGF0ZWQgU0FSTDEmMCQGA1UEAwwdRG9t
|
||||
YWluIENvbnRyb2wgVmFsaWRhdGVkIFNBUkwwHhcNMTgwNDA5MjAxMTEwWhcNNDUw
|
||||
ODI0MjAxMTEwWjAWMRQwEgYDVQQDDAt3d3cuZG12LmNvbTBZMBMGByqGSM49AgEG
|
||||
CCqGSM49AwEHA0IABOxyTyzldtoCIizCEdW7Qkw0DG7cMFqobhK65Nq+Pqdzop6N
|
||||
n0gwZvU++gjX5y45lLntaqC49eOGivOhgdKxsuAwDQYJKoZIhvcNAQELBQADggEB
|
||||
ADEx+x0XXiTyBjEi5wVFEx/36tD4TMck5GLzyWFBPMgY5rVk0/scyYslqikF7j/M
|
||||
OY/Z+3WG/Wx0OqH+inA+aYb2xg6qLd4JR9eIRU7luSKyFDRCK3BYcpPYa9DQKVim
|
||||
Q4jA17rLRKqLLSDWUr0VO+YaXk9EqpkjjEeo3Dn1xIKtwwqvEocFUWlc1MPUrfgX
|
||||
OpPP4fSyqPcE0I75vWsznGyrYax9k7fAFV/UdC2p/jQPs+lVVesml2DJA9IjEdpJ
|
||||
1HOKpzjPXrPkCixoXqjM0HZRLuCNUb1sl8bWvpCQ6xTtDH0mkt8yHO6HeqKLpgpZ
|
||||
2O99VHKVMmEzsFOyE+4khVM=
|
||||
-----END CERTIFICATE-----
|
BIN
bssl_perf/etc/random_data
Normal file
BIN
bssl_perf/etc/random_data
Normal file
Бінарний файл не відображається.
30
bssl_perf/etc/rsa_2048.key
Normal file
30
bssl_perf/etc/rsa_2048.key
Normal file
@ -0,0 +1,30 @@
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
Proc-Type: 4,ENCRYPTED
|
||||
DEK-Info: AES-256-CBC,298AA9B5B7606E863BB9183F689D9346
|
||||
|
||||
VvURRUrBBi/AlUA4AlFUKm+aVzvnG4TQrhHKTV3nFGOHeqB+Sua+3R+e6svyiY+p
|
||||
d0VaZtlpS2mE7lxPqy0+VOarCYYkJOF2juGVMwFzEG8lkoEUyC8qyOobaRj4OCcb
|
||||
PgIk9b3i5Lv2PBLTpC4lxo6FrUykKXqLKeg0Lp4EEfFRGOKQB5CQBDeGOA1oBeqt
|
||||
cwRxXP8k3KPiIs+P+Lswk5qLD4gTtlf8ycQmJuCDFUQ3ARgRvngqFvu/44fm5Ztv
|
||||
6fBvAQvoHXJ9I+HuJAJcT1wGn9itZYFRMXyA2pf1Q2WHpxm1ZS7AiZrn5nyqPpnV
|
||||
aoBlwR7D0OxyoRumSHA3Y4YheN+uId27Gg12AWUalDcFes3DD2DZOkSQrzsIT0X3
|
||||
EifJSSnuOTLe8w+SSvUVIMxkW5CRE0uOi/wuZHTpRN0ZxsvmeL+EHQmqtAOcjS5g
|
||||
RPMidMdSGfCnqC0N2EAalUU2BsIGRgG5yvmG5ZIqu0Bm6WIIX1T34HS8HUhDqgRX
|
||||
jOi8Ch7J/6xMZcxSeqRvdss96s6SzehqpG3kW7EsualJqWwmAGF0oJOxX6LupIRd
|
||||
0GacwZv+NcWPYKL9oDNINPrU8hvobhaSeLvK8Gum8DK4TTd0evng6LYvkgejIcRF
|
||||
pzfC+ONTiHZO4ayxleJVFAdph2LY3itO/TKD6KBLq0vnd+HvOKPWq0s0zDtQ/mSF
|
||||
PMEwZ0DvYq5mtko5MOIqlIJKXS+p+jmzAhIZzqPt57HoyZjuRKTKkvlTeOoY7cax
|
||||
UDGJffDrnagbP3R12i+bm7Bmz7aQQktuwhV7/SrEnJDM2PLDOYuWnGV5v/Cb+L/7
|
||||
gGMFs9PTro8p4OkCLcpyGS/FoA7J5B1JixhUJ4tSEzEkTBSYz5WCi7NqrRZ9nnDf
|
||||
drYBNpMHlK4DNRe9qhusdRPrbd9srDH8g74QQgzWorYx0TqBUS45NLyyUZPydFxJ
|
||||
vAT1lmdWo7DhhnqSkPAcrwKdakDIravzvw0Ex+iEzAPSaflDvVybu6Gf8r6FrFIR
|
||||
SrR2pT4EztvPViaS9KZHZ0PQYKporwsWM1ZLyGX2qi3d5+YFijE3IT67rSLuEBMO
|
||||
/RFY0OCHbmKNrOiCaXk51+04hXg8ptjAxD8YCFpOzaDlSW2LX9D2QAfghoArZVTb
|
||||
OHThemZ4zIvamGkZLQB44nuvduIRGBA2LiQ0YiH4FhuJCP7zTCtCqQu4Wnn6J4tb
|
||||
YCEtm9ntFSGGCipErqqENPTBhxz6exO8emd2/y0INY4d9xJYjfhqCrKShpeF+/Lf
|
||||
6pJ3Pj9qA3D8wWcizER5N4R1fzmhTOSCxinC6OVJOzdk76M6gi+bD5RV8HD60TyG
|
||||
VEmTusA8lrLlKSYiE+4VFYBJjBSCopybJAaNsKXaYM3hwaPTPJwsgPWxwQ5m/vPT
|
||||
7dvkPOnhqwQ7DEvr2y3AgEUJxXxtsNwQEiKgMuRxNIQNE5mp68dJ5hMFnbJUPvvo
|
||||
80IsUH11LLDQJV60aLLF8M37BFvNPUayaS+oP78UwRMbnpC92nuHNgvGfdXFKhV3
|
||||
/8z6lNYPlMGgBwdCD6NBXpXHkp7rxOAGvHx5eUocjgXfF2b8zSXyN/9egK9sfMZZ
|
||||
-----END RSA PRIVATE KEY-----
|
19
bssl_perf/etc/rsa_2048.pem
Normal file
19
bssl_perf/etc/rsa_2048.pem
Normal file
@ -0,0 +1,19 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDGDCCAgACCQD7FNAespFtAjANBgkqhkiG9w0BAQsFADCBhTELMAkGA1UEBhMC
|
||||
RlIxDTALBgNVBAgMBFBBQ0ExFzAVBgNVBAcMDkNhZ25lcyBzdXIgTWVyMSYwJAYD
|
||||
VQQLDB1Eb21haW4gQ29udHJvbCBWYWxpZGF0ZWQgU0FSTDEmMCQGA1UEAwwdRG9t
|
||||
YWluIENvbnRyb2wgVmFsaWRhdGVkIFNBUkwwHhcNMTgwNDA5MTYzMjEwWhcNNDUw
|
||||
ODI0MTYzMjEwWjAWMRQwEgYDVQQDDAt3d3cuZG12LmNvbTCCASIwDQYJKoZIhvcN
|
||||
AQEBBQADggEPADCCAQoCggEBANDw1tIr4IHqfivyIBMn4MPRaPQFxOZPIRaIOo85
|
||||
4gaeHD11tLbxIh++lzfxk//ubC5a5K/PUDsVhLupTQVNKklcg4eRymZROkXoqgRg
|
||||
+ibEH5IYRu64aVlhQe4lGiK/Z8njUtq31zeyn2RaYWW/4uq/wmOKB/qVinARISKf
|
||||
lvTjtSN5cBg55tyDV5Cb7GgpSBXVGc8J4WKU6BAn43FTqgj8XkVvGYR3C/X5ZR/+
|
||||
3xXVqe/VwLHyYNe61ySYRmymdoXJnJE7l0+MJhcpvepzEZ1pCULomNbHcxGfSZnc
|
||||
XsajvNKp/Y+cjC/IYmzkpTHgHhUEVs1rAdotNr0j5vRS/iECAwEAATANBgkqhkiG
|
||||
9w0BAQsFAAOCAQEAXjyhGLvT1waoYofYhkN3xmrkDxtM8HmG/xGad1vhkx6Qi2M/
|
||||
kdX/UlEMwlkh1Of20iJVcMmTPleiOcIO2cE8F0BQ4wIGN3PGw8guxa11ToyyMarg
|
||||
cWNUWdA4gwYvMQv6tceUtsJUjNp0O6JW563jejVaiqBHhG50riJ2wfzqgMItjZY0
|
||||
/TLVRQbEJ+NGeYZJ9/jL5xmHxoL8ROQ3RXtZjxU6Jr0pe3Y7XKT27QE3007EkCYb
|
||||
XG7K1U/rbixqfphXys677gjJ8xXChunjNqCijNk2xjHmu2MakspSqIB86oB50oLj
|
||||
Pu+AVI/SGD1qlJBC9qlgDoUkm9VI9mTIKJzALg==
|
||||
-----END CERTIFICATE-----
|
40
bssl_perf/etc/rsa_3072.key
Normal file
40
bssl_perf/etc/rsa_3072.key
Normal file
@ -0,0 +1,40 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
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
|
||||
u5evFUiLOWw7CJ9Sy1/Jaws=
|
||||
-----END PRIVATE KEY-----
|
18
bssl_perf/etc/rsa_3072.pem
Normal file
18
bssl_perf/etc/rsa_3072.pem
Normal file
@ -0,0 +1,18 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIC1DCCAnsCCQCY04gkucQIkzAKBggqhkjOPQQDAjB9MQswCQYDVQQGEwJGUjEN
|
||||
MAsGA1UECAwEUEFDQTEXMBUGA1UEBwwOQ2FnbmVzIHN1ciBNZXIxIjAgBgNVBAsM
|
||||
GUNlcnQgVGVzdGluZyBPcmdhbml6YXRpb24xIjAgBgNVBAMMGUNlcnQgVGVzdGlu
|
||||
ZyBPcmdhbml6YXRpb24wHhcNMTgwNDE3MTMyNzA4WhcNMTgwNTE3MTMyNzA4WjAf
|
||||
MR0wGwYDVQQDDBR3d3cuY2VydF90ZXN0aW5nLmNvbTCCAaAwDQYJKoZIhvcNAQEB
|
||||
BQADggGNADCCAYgCggGBAMKGhSzLDBIZ5y5ocYY0xjw+u8zuc+NekVcPQwrU4bRh
|
||||
/d5X9CpELdqFLtIgJS+FFOIPMKV7Pjk04rFikfULS78z8O+iMWCsYmUpW87S91yT
|
||||
GVYLIroNUqLAE/vJKRePL5O5G4hniTEfNYIASV1uA8eUgY/G+FTh0Adcdx0cZ0CA
|
||||
cv7sCFmHfZpwgOremSVrc9ABrApyX/vaXu89eO7n3iNZmTOuo+NcqknYZFfyrlcW
|
||||
gw1R7eENHUWThqKPtjaTlpaaQPdZUYe2L0pl2O5rYJginX4FRnbTnDE6JYeWyGlf
|
||||
OzvcTGPa6/04z99xWWLLlP65Hztroqgir7u+tTrjbJYJY7HenOG9+AEA0KclFZcK
|
||||
rgI8DIiY1RpqmCesz1MhZHIGa0Pv+qx9DRsMoki1/6nhnPHVBq0soUbyppqg/7qW
|
||||
JBBpgVE/+/5xcztz0tpTt6UojfLIKUtJShWuDq+n/FSwhxpiNQ/aP7dUy/ngPLXx
|
||||
5a3YWSZEHWialKn6DpegjwIBAzAKBggqhkjOPQQDAgNHADBEAiBiXGvdsqXGxDtR
|
||||
09lV6d2w2rYVteso/RVCQVxUWo5BuQIgRXF5XrvhRbpTOaRgLgnOpyLZv7nEwWNG
|
||||
cRb2Q37V4VM=
|
||||
-----END CERTIFICATE-----
|
212
bssl_perf/src/client.c
Normal file
212
bssl_perf/src/client.c
Normal file
@ -0,0 +1,212 @@
|
||||
#include <unistd.h>
|
||||
#include "common.h"
|
||||
|
||||
// include/ path is here for a reason - to make sure we compile against boringssl (temporary solution)
|
||||
#include <include/openssl/ssl.h>
|
||||
#include <pthread.h>
|
||||
|
||||
// Buffer used for read/write tests
|
||||
unsigned char rw_buf[BUFFER_SIZE];
|
||||
static const int Curves[1] = {NID_X25519};
|
||||
static const uint16_t TLS_PROT_VERSION = TLS1_3_VERSION;
|
||||
|
||||
SSL_CTX *setup_client_ctx(void)
|
||||
{
|
||||
SSL_CTX* ctx = NULL;
|
||||
|
||||
ctx = SSL_CTX_new(TLS_method());
|
||||
assert(ctx != NULL);
|
||||
SSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, NULL);
|
||||
if( SSL_CTX_load_verify_locations(ctx, CACERT, NULL) != 1) {
|
||||
ERR("Error loading CA DIR");
|
||||
}
|
||||
|
||||
if (SSL_CTX_set1_curves(ctx, Curves, 1) != 1) {
|
||||
ERR("Can't set SIDH group");
|
||||
}
|
||||
|
||||
if (SSL_CTX_set_min_proto_version(ctx, TLS_PROT_VERSION) != 1 ||
|
||||
SSL_CTX_set_max_proto_version(ctx, TLS_PROT_VERSION) != 1) {
|
||||
ERR("Enforcing protocol to TLSv1.2");
|
||||
}
|
||||
|
||||
return ctx;
|
||||
}
|
||||
|
||||
int do_client_loop(SSL* ssl)
|
||||
{
|
||||
int err, nwritten;
|
||||
char buf[80];
|
||||
|
||||
for(;;)
|
||||
{
|
||||
if( !fgets(buf, sizeof(buf), stdin) )
|
||||
break;
|
||||
for(nwritten = 0; nwritten < strlen(buf); nwritten += err)
|
||||
{
|
||||
err = SSL_write(ssl, buf + nwritten, strlen(buf) - nwritten);
|
||||
if(err<=0)
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
void test_Handshake(size_t handshake_nb) {
|
||||
|
||||
SSL* ssl;
|
||||
SSL_CTX* ctx;
|
||||
int err;
|
||||
|
||||
init();
|
||||
ctx = setup_client_ctx();
|
||||
|
||||
DBG("Trying to connect");
|
||||
for (size_t i=0; i<handshake_nb; i++) {
|
||||
int fd = connect_once();
|
||||
|
||||
DBG("SSL ctx setup");
|
||||
if (!(ssl = SSL_new(ctx))) {
|
||||
ERR("Error creating an SSL context");
|
||||
}
|
||||
SSL_set_fd(ssl, fd);
|
||||
|
||||
DBG("SSL handshake");
|
||||
|
||||
// OZAPTF: do handshake thing
|
||||
err = SSL_connect(ssl);
|
||||
if (err<=0) {
|
||||
ERR("Error connecting SSL err=%d", err);
|
||||
}
|
||||
assert(!SSL_session_reused(ssl));
|
||||
|
||||
SSL_free(ssl);
|
||||
close(fd);
|
||||
}
|
||||
SSL_CTX_free(ctx);
|
||||
|
||||
}
|
||||
|
||||
void test_Read() {
|
||||
int err, nread=0;
|
||||
SSL* ssl;
|
||||
SSL_CTX* ctx;
|
||||
|
||||
init();
|
||||
ctx = setup_client_ctx();
|
||||
|
||||
DBG("Trying to connect");
|
||||
int fd = connect_once();
|
||||
|
||||
DBG("SSL ctx setup");
|
||||
if (!(ssl = SSL_new(ctx))) {
|
||||
ERR("Error creating an SSL context");
|
||||
}
|
||||
SSL_set_fd(ssl, fd);
|
||||
|
||||
DBG("SSL handshake");
|
||||
err = SSL_connect(ssl);
|
||||
if (err<=0) {
|
||||
ERR("Error connecting SSL err=%d", err);
|
||||
}
|
||||
|
||||
DBG("SSL writing");
|
||||
if (SSL_write(ssl, (unsigned char*)READ_REQUEST, sizeof(READ_REQUEST) ) <= 0) {
|
||||
ERR("SSL_write");
|
||||
}
|
||||
|
||||
DBG("Continue reading");
|
||||
do {
|
||||
#ifdef DEBUG
|
||||
fwrite(rw_buf,1, nread, stdout);
|
||||
#endif
|
||||
for(nread=0; nread<sizeof(rw_buf); nread+=err) {
|
||||
err = SSL_read(ssl, rw_buf+nread, sizeof(rw_buf) - nread);
|
||||
if(err <= 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
} while(err>0);
|
||||
|
||||
if (0==(SSL_get_shutdown(ssl) & SSL_RECEIVED_SHUTDOWN)) {
|
||||
ERR("SSL_Read");
|
||||
}
|
||||
|
||||
DBG("Shutdown");
|
||||
assert(SSL_shutdown(ssl) == 1);
|
||||
|
||||
SSL_free(ssl);
|
||||
SSL_CTX_free(ctx);
|
||||
close(fd);
|
||||
}
|
||||
|
||||
void test_Write() {
|
||||
SSL* ssl;
|
||||
SSL_CTX* ctx;
|
||||
int err,nread=0;
|
||||
|
||||
init();
|
||||
ctx = setup_client_ctx();
|
||||
|
||||
DBG("Trying to connect");
|
||||
int fd = connect_once();
|
||||
|
||||
DBG("SSL ctx setup");
|
||||
if (!(ssl = SSL_new(ctx))) {
|
||||
ERR("Error creating an SSL context");
|
||||
}
|
||||
SSL_set_fd(ssl, fd);
|
||||
|
||||
DBG("SSL handshake");
|
||||
err = SSL_connect(ssl);
|
||||
if (err<=0) {
|
||||
ERR("Error connecting SSL err=%d", err);
|
||||
}
|
||||
|
||||
DBG("Writing");
|
||||
|
||||
fill_buffer_from_file(rw_buf, sizeof(rw_buf));
|
||||
for (size_t i=0; i<RW_ITERATIONS; i++) {
|
||||
for(nread=0; nread<sizeof(rw_buf); nread+=err) {
|
||||
err = SSL_write(ssl, rw_buf+nread, sizeof(rw_buf) - nread);
|
||||
if(err <= 0) {
|
||||
ERR("SSL_write");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DBG("Shutdown");
|
||||
assert(SSL_shutdown(ssl) == 0);
|
||||
assert(SSL_shutdown(ssl) == 1);
|
||||
|
||||
SSL_free(ssl);
|
||||
SSL_CTX_free(ctx);
|
||||
close(fd);
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
|
||||
if (argc < 2) {
|
||||
goto usage;
|
||||
}
|
||||
|
||||
if (!strncmp("test_Handshake", argv[1], strlen("test_Handshake"))) {
|
||||
test_Handshake(HANDHAKE_REPS);
|
||||
} else if (!strncmp("test_Read", argv[1], strlen("test_Read"))) {
|
||||
test_Read();
|
||||
} else if (!strncmp("test_Write", argv[1], strlen("test_Write"))) {
|
||||
test_Write();
|
||||
} else {
|
||||
printf("Unknown test");
|
||||
goto usage;
|
||||
}
|
||||
|
||||
exit:
|
||||
cleanup();
|
||||
return 0;
|
||||
|
||||
usage:
|
||||
ERR("\n\nUsage: %s <host>:<port> test_name\nOptions for 'test_name':\n\t"
|
||||
"test_Handshake\n\ttest_Write\n\ttest_Read\n", argv[0]);
|
||||
goto exit;
|
||||
}
|
84
bssl_perf/src/common.c
Normal file
84
bssl_perf/src/common.c
Normal file
@ -0,0 +1,84 @@
|
||||
#include "common.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#include <netinet/tcp.h>
|
||||
#include <sys/socket.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <include/openssl/ssl.h>
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* @brief Performs TCP 3-way handshake with IP:PORT
|
||||
* -------------------------------------------------------------------------------- */
|
||||
int connect_once(void) {
|
||||
|
||||
struct sockaddr_in a;
|
||||
|
||||
int fd = socket(AF_INET, SOCK_STREAM, 0);
|
||||
memset(&a, 0, sizeof(a));
|
||||
a.sin_family = AF_INET;
|
||||
a.sin_addr.s_addr = inet_addr(IP);
|
||||
a.sin_port = htons(PORT);
|
||||
|
||||
// Set socket to blocking, in order to make things simpler
|
||||
if (fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) & ~O_NONBLOCK )<0) {
|
||||
ERR("fcntl");
|
||||
}
|
||||
|
||||
if (connect(fd, (struct sockaddr *) &a, sizeof(a))<0) {
|
||||
ERR("Econnect");
|
||||
}
|
||||
DBG("Connected");
|
||||
return fd;
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* @brief Fills the buffer with random data.
|
||||
*------------------------------------------------------------------------------ */
|
||||
void fill_buffer_from_file(unsigned char *b, size_t sz) {
|
||||
FILE * fd = fopen(RANDOM_DATA_FILE, "r");
|
||||
if (!fd) {
|
||||
ERR("fopen");
|
||||
}
|
||||
|
||||
if (fread(b, 1, sz, fd) < sz) {
|
||||
// Random data file smaller than a buffer
|
||||
ERR("fread");
|
||||
}
|
||||
|
||||
if (fclose(fd)) {
|
||||
ERR("fclose");
|
||||
}
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* @brief Initializes BoringSSL structures
|
||||
*------------------------------------------------------------------------------ */
|
||||
void init(void) {
|
||||
OpenSSL_add_all_algorithms();
|
||||
SSL_load_error_strings();
|
||||
SSL_library_init();
|
||||
CRYPTO_library_init();
|
||||
|
||||
if(!SSL_library_init())
|
||||
{
|
||||
fprintf(stderr, "** OpenSSL initialization failed!\n");
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* @brief Tears down what was initialized in init() above
|
||||
*------------------------------------------------------------------------------ */
|
||||
void cleanup(void) {
|
||||
|
||||
ERR_free_strings();
|
||||
ERR_clear_error();
|
||||
CRYPTO_set_locking_callback(NULL);
|
||||
CRYPTO_set_id_callback(NULL);
|
||||
EVP_cleanup();
|
||||
CRYPTO_cleanup_all_ex_data();
|
||||
}
|
64
bssl_perf/src/common.h
Normal file
64
bssl_perf/src/common.h
Normal file
@ -0,0 +1,64 @@
|
||||
#ifndef __COMMON_H__
|
||||
#define __COMMON_H__
|
||||
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <assert.h>
|
||||
|
||||
#ifdef DEBUG
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
|
||||
#define PORT 1443
|
||||
#define IP "127.0.0.1"
|
||||
#define SERVER "localhost"
|
||||
#define CLIENT "localhost"
|
||||
#define CACERT "etc/ca/ca.cert.pem"
|
||||
//#define CERT_HOSTNAME "www.cert_testing.com"
|
||||
#define CERT_HOSTNAME "www.dmv.com"
|
||||
#define KEYFILE_PASS "test123"
|
||||
#define READ_REQUEST "ReadRequest"
|
||||
#define HANDHAKE_REPS 200
|
||||
// Keep random data file must at least same size as a buffer size
|
||||
#define RANDOM_DATA_FILE "etc/random_data"
|
||||
#define BUFFER_SIZE 1024
|
||||
// Amount bytes of plaintext data exchanged in read-write stets is BUFFER_SIZE*RW_ITERATOIONS
|
||||
#ifdef DEBUG
|
||||
#define RW_ITERATIONS (1024*10) // 10 MB
|
||||
#else
|
||||
#define RW_ITERATIONS (1024*200) // 1GB
|
||||
#endif
|
||||
// Utils
|
||||
#define LOG_I(...) \
|
||||
do { \
|
||||
(void) fprintf(stdout, "[%s() %s:%d] ", __func__, __FILE__, __LINE__); \
|
||||
(void) fprintf(stdout, __VA_ARGS__); \
|
||||
(void) fprintf(stdout, "\n"); \
|
||||
} while (0)
|
||||
#define ERR(...) \
|
||||
do { \
|
||||
LOG_I(__VA_ARGS__); \
|
||||
exit(-1); \
|
||||
} while (0)
|
||||
|
||||
#define LOG(...) LOG_I(__VA_ARGS__)
|
||||
|
||||
#ifdef DEBUG
|
||||
#define DBG(...) LOG_I(__VA_ARGS__)
|
||||
#else
|
||||
#define DBG(...)
|
||||
#endif
|
||||
|
||||
#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
|
||||
|
||||
int connect_once(void);
|
||||
void init(void);
|
||||
void cleanup(void);
|
||||
void fill_buffer_from_file(unsigned char *b, size_t sz);
|
||||
|
||||
// Available tests
|
||||
void test_Write(void);
|
||||
void test_Read(void);
|
||||
void test_Handshake(size_t);
|
||||
|
||||
#endif // __COMMON_H__
|
260
bssl_perf/src/server.c
Normal file
260
bssl_perf/src/server.c
Normal file
@ -0,0 +1,260 @@
|
||||
#include <netinet/tcp.h>
|
||||
#include <sys/socket.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
// include/ path is here for a reason - to make sure we compile against boringssl (temporary solution)
|
||||
#include <include/openssl/rand.h>
|
||||
#include <include/openssl/ssl.h>
|
||||
#include <include/openssl/x509v3.h>
|
||||
#include <pthread.h>
|
||||
|
||||
#include "common.h"
|
||||
|
||||
// Enforce this protocol version
|
||||
#define TLS_PROT_VERSION TLS1_3_VERSION
|
||||
static const int Curves[3] = {NID_CECPQ2, NID_CECPQ2b, NID_X25519};
|
||||
|
||||
static const struct CertDesc_t {
|
||||
const char* arg;
|
||||
const char* cert;
|
||||
const char* key;
|
||||
const char* cipher;
|
||||
const int* curves;
|
||||
} Certs[] = {
|
||||
{
|
||||
.arg = "RSA_2048",
|
||||
.key = "etc/rsa_2048.key",
|
||||
.cert = "etc/rsa_2048.pem",
|
||||
.cipher = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
|
||||
.curves = Curves,
|
||||
},
|
||||
{
|
||||
.arg = "RSA_3072",
|
||||
.key = "etc/rsa_3072.key",
|
||||
.cert = "etc/rsa_3072.pem",
|
||||
.cipher = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
|
||||
.curves = Curves,
|
||||
},
|
||||
{
|
||||
.arg = "ECDSA_256",
|
||||
.key = "etc/ecdsa_256.key",
|
||||
.cert = "etc/ecdsa_256.pem",
|
||||
.cipher = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
|
||||
.curves = Curves,
|
||||
}
|
||||
};
|
||||
|
||||
const struct CertDesc_t* get_cert_desc(const char* c) {
|
||||
for(size_t i=0; i<ARRAY_SIZE(Certs); i++) {
|
||||
if (!memcmp(Certs[i].arg, c, strlen(Certs[i].arg))) {
|
||||
return &Certs[i];
|
||||
}
|
||||
}
|
||||
ERR("Critical error");
|
||||
}
|
||||
|
||||
// Buffer used for read/write tests
|
||||
unsigned char rw_buf[BUFFER_SIZE];
|
||||
|
||||
int pass_cb(char *buf, int size, int rwflag, void *u) {
|
||||
DBG("Using password " KEYFILE_PASS);
|
||||
// password for all keys is "test123"
|
||||
memcpy(buf, KEYFILE_PASS, strlen(KEYFILE_PASS));
|
||||
return strlen(KEYFILE_PASS);
|
||||
}
|
||||
|
||||
static int accept_once(void) {
|
||||
|
||||
int fd, client;
|
||||
int reuseval = 1;
|
||||
struct sockaddr_in a;
|
||||
size_t a_len = sizeof(a);
|
||||
|
||||
// configure
|
||||
memset(&a, 0, a_len);
|
||||
a.sin_family = AF_INET;
|
||||
a.sin_port = htons(PORT);
|
||||
a.sin_addr.s_addr = INADDR_ANY;
|
||||
|
||||
fd = socket(PF_INET, SOCK_STREAM, 0);
|
||||
|
||||
if (setsockopt(fd,SOL_SOCKET, SO_REUSEADDR, &reuseval, sizeof(reuseval))) {
|
||||
ERR("setsockopt");
|
||||
}
|
||||
|
||||
if (bind(fd, (struct sockaddr *)&a, sizeof(a))) {
|
||||
ERR("bind");
|
||||
}
|
||||
|
||||
if (listen(fd, 1)) {
|
||||
ERR("listen");
|
||||
}
|
||||
|
||||
|
||||
client = accept(fd, (struct sockaddr *)&a, (socklen_t *)&a_len);
|
||||
if (client<0) {
|
||||
ERR("accept");
|
||||
}
|
||||
return client;
|
||||
}
|
||||
|
||||
static SSL_CTX* setup_server_ctx(const char* cert_name) {
|
||||
SSL_CTX* ctx = SSL_CTX_new(TLS_method());
|
||||
assert(ctx);
|
||||
|
||||
const struct CertDesc_t *c = get_cert_desc(cert_name);
|
||||
SSL_CTX_set_default_passwd_cb(ctx, &pass_cb);
|
||||
|
||||
if(SSL_CTX_use_certificate_file(ctx, c->cert, SSL_FILETYPE_PEM) != 1)
|
||||
ERR("Error loading certificate from file");
|
||||
if(SSL_CTX_use_PrivateKey_file(ctx, c->key, SSL_FILETYPE_PEM) != 1)
|
||||
ERR("Error loading private key from file");
|
||||
|
||||
if (SSL_CTX_set_strict_cipher_list(ctx, c->cipher) != 1) {
|
||||
ERR("Error setting cipher list");
|
||||
}
|
||||
|
||||
if (!SSL_CTX_set1_curves(ctx, c->curves, 1)) {
|
||||
ERR("Enforcing curve");
|
||||
}
|
||||
|
||||
if (SSL_CTX_set_min_proto_version(ctx, TLS_PROT_VERSION) != 1 ||
|
||||
SSL_CTX_set_max_proto_version(ctx, TLS_PROT_VERSION) != 1) {
|
||||
ERR("Enforcing protocol to TLSv1.2");
|
||||
|
||||
}
|
||||
return ctx;
|
||||
}
|
||||
|
||||
static void start_writing(SSL *ssl) {
|
||||
int nread,err;
|
||||
|
||||
DBG("Start writing");
|
||||
|
||||
fill_buffer_from_file(rw_buf, sizeof(rw_buf));
|
||||
for (size_t i=0; i<RW_ITERATIONS; i++) {
|
||||
for(nread=0; nread<sizeof(rw_buf); nread+=err) {
|
||||
err = SSL_write(ssl, rw_buf+nread, sizeof(rw_buf) - nread);
|
||||
if(err <= 0) {
|
||||
ERR("SSL_write");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int do_server_loop(SSL* ssl) {
|
||||
int nread,err;
|
||||
|
||||
DBG("Check if first packet is ReadRequest");
|
||||
for(nread=0; nread<strlen(READ_REQUEST); nread+=err) {
|
||||
err = SSL_read(ssl, rw_buf+nread, sizeof(rw_buf) - nread);
|
||||
if (err <=0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
DBG("Check if server loop should be finished");
|
||||
// Stop here if shutdown requested
|
||||
if (SSL_get_shutdown(ssl) & SSL_RECEIVED_SHUTDOWN) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Check if client wants to read
|
||||
if (nread && !memcmp(READ_REQUEST, rw_buf, nread)) {
|
||||
start_writing(ssl);
|
||||
return 2; // server initiated closure
|
||||
}
|
||||
|
||||
// Keep reading till connection closed
|
||||
DBG("Continue reading");
|
||||
do {
|
||||
for(nread=0; nread<sizeof(rw_buf); nread+=err) {
|
||||
err = SSL_read(ssl, rw_buf+nread, sizeof(rw_buf) - nread);
|
||||
if(err <= 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
} while(err>0);
|
||||
return (SSL_get_shutdown(ssl) & SSL_RECEIVED_SHUTDOWN) ? 1 : 0;
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
static const char* DBG_get_curve(SSL* ssl) {
|
||||
const int id = SSL_get_curve_id(ssl);
|
||||
if (!id) return "N/A";
|
||||
return SSL_get_curve_name(id);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Interface for accepting
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
SSL *ssl;
|
||||
SSL_CTX *ctx;
|
||||
int fd, ret;
|
||||
|
||||
if (argc < 2) {
|
||||
goto usage;
|
||||
}
|
||||
|
||||
// Start server
|
||||
init();
|
||||
|
||||
ctx = setup_server_ctx(argv[1]);
|
||||
fd = accept_once();
|
||||
|
||||
for(;;) {
|
||||
|
||||
DBG("SSL Accepting");
|
||||
if(!(ssl = SSL_new(ctx))) {
|
||||
DBG("Error creating SSL context");
|
||||
}
|
||||
|
||||
|
||||
SSL_set_fd(ssl, fd);
|
||||
ret = SSL_accept(ssl);
|
||||
//printf("%s\n", SSL_get_curve_name(SSL_get_curve_id(ssl)));
|
||||
if (ret<=0) {
|
||||
ret = SSL_get_error(ssl, ret);
|
||||
|
||||
if (ret == SSL_ERROR_SYSCALL) {
|
||||
DBG("Connection closed");
|
||||
goto end;
|
||||
} else {
|
||||
ERR("Critical error occured %d", ret);
|
||||
}
|
||||
}
|
||||
|
||||
DBG("Protocol: %s Cipher %s Curve %s", SSL_get_version(ssl), SSL_get_cipher_name(ssl), DBG_get_curve(ssl));
|
||||
|
||||
DBG("server loop");
|
||||
ret = do_server_loop(ssl);
|
||||
if(ret) {
|
||||
|
||||
DBG("Shutdown");
|
||||
SSL_set_read_ahead(ssl, 0);
|
||||
if (ret==2) {
|
||||
// Server is closing
|
||||
SSL_shutdown(ssl);
|
||||
}
|
||||
assert(SSL_shutdown(ssl)==1);
|
||||
}
|
||||
else {
|
||||
DBG("Shutdown - error case");
|
||||
goto end;
|
||||
}
|
||||
SSL_clear(ssl);
|
||||
}
|
||||
SSL_CTX_free(ctx);
|
||||
|
||||
end:
|
||||
cleanup();
|
||||
return 0;
|
||||
usage:
|
||||
ERR("\n\nUsage: %s server certificate \nOptions for 'server certificate':\n\t"
|
||||
"RSA_2048\n\t"
|
||||
"RSA_3072\n\t"
|
||||
"ECDSA_256\n\t",
|
||||
argv[0]);
|
||||
goto end;
|
||||
}
|
92
rawhammer/Cargo.lock
згенерований
Normal file
92
rawhammer/Cargo.lock
згенерований
Normal file
@ -0,0 +1,92 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.0.38"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "0.1.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "ctrlc"
|
||||
version = "3.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.60"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "nix"
|
||||
version = "0.14.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cc 1.0.38 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rawhammer"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"ctrlc 3.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"thread-control 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thread-control"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "void"
|
||||
version = "1.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "winapi"
|
||||
version = "0.3.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winapi-i686-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "winapi-x86_64-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[metadata]
|
||||
"checksum bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3d155346769a6855b86399e9bc3814ab343cd3d62c7e985113d46a0ec3c281fd"
|
||||
"checksum cc 1.0.38 (registry+https://github.com/rust-lang/crates.io-index)" = "ce400c638d48ee0e9ab75aef7997609ec57367ccfe1463f21bf53c3eca67bf46"
|
||||
"checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33"
|
||||
"checksum ctrlc 3.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c7dfd2d8b4c82121dfdff120f818e09fc4380b0b7e17a742081a89b94853e87f"
|
||||
"checksum libc 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)" = "d44e80633f007889c7eff624b709ab43c92d708caad982295768a7b13ca3b5eb"
|
||||
"checksum nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6c722bee1037d430d0f8e687bbdbf222f27cc6e4e68d5caf630857bb2b6dbdce"
|
||||
"checksum thread-control 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "22e002431352cce4e76fd6fe77d5bf1b75ff790ea790602f0579ce58641c2eea"
|
||||
"checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
|
||||
"checksum winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "f10e386af2b13e47c89e7236a7a14a086791a2b88ebad6df9bf42040195cf770"
|
||||
"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
||||
"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
11
rawhammer/Cargo.toml
Normal file
11
rawhammer/Cargo.toml
Normal file
@ -0,0 +1,11 @@
|
||||
[package]
|
||||
name = "rawhammer"
|
||||
version = "0.1.0"
|
||||
authors = ["Kris Kwiatkowski <kris@cloudflare.com>"]
|
||||
edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
ctrlc = "3.1.3"
|
||||
thread-control = "0.1.2"
|
0
rawhammer/README.md
Normal file
0
rawhammer/README.md
Normal file
284
rawhammer/src/main.rs
Normal file
284
rawhammer/src/main.rs
Normal file
@ -0,0 +1,284 @@
|
||||
use std::io::Write;
|
||||
use std::net::*;
|
||||
use std::env;
|
||||
use std::time::Duration;
|
||||
use std::sync::mpsc::sync_channel;
|
||||
use std::thread;
|
||||
use std::time;
|
||||
use ctrlc;
|
||||
use thread_control::*;
|
||||
|
||||
static CH_X25519: &'static [u8] = b"\
|
||||
\x16\x03\x01\x00\xfc\x01\x00\x00\xf8\x03\x03\x84\x14\x34\x1d\x32\
|
||||
\x62\x53\x6c\x37\xb5\xdd\xe6\xd9\x58\x34\xd7\x3b\x36\xf0\xb8\x05\
|
||||
\xd1\xba\x5c\xa6\x47\x15\xae\xd6\x35\x54\x62\x20\x1f\x31\x5c\xc0\
|
||||
\x2a\xb3\x05\xb3\x7f\x36\x5d\xe5\xe1\x22\x36\xd3\xd7\x29\xf2\x87\
|
||||
\xe3\x3a\xbf\xac\x9f\x3b\xd6\x57\xd9\x54\xb5\x48\x00\x24\x13\x01\
|
||||
\x13\x02\x13\x03\xc0\x2b\xc0\x2f\xc0\x2c\xc0\x30\xcc\xa9\xcc\xa8\
|
||||
\xc0\x09\xc0\x13\xc0\x0a\xc0\x14\x00\x9c\x00\x9d\x00\x2f\x00\x35\
|
||||
\x00\x0a\x01\x00\x00\x8b\x00\x00\x00\x17\x00\x15\x00\x00\x12\x77\
|
||||
\x77\x77\x2e\x63\x6c\x6f\x75\x64\x66\x6c\x61\x72\x65\x2e\x63\x6f\
|
||||
\x6d\x00\x17\x00\x00\xff\x01\x00\x01\x00\x00\x0a\x00\x04\x00\x02\
|
||||
\x00\x1d\x00\x0b\x00\x02\x01\x00\x00\x23\x00\x00\x00\x0d\x00\x14\
|
||||
\x00\x12\x04\x03\x08\x04\x04\x01\x05\x03\x08\x05\x05\x01\x08\x06\
|
||||
\x06\x01\x02\x01\x00\x33\x00\x26\x00\x24\x00\x1d\x00\x20\x05\x4b\
|
||||
\x0a\x0a\xb2\xe6\x39\xb1\x25\x40\x88\x8a\x18\x5b\x02\x88\x7e\x0c\
|
||||
\x49\x5c\xfc\xc8\xd4\xcd\x9d\xab\x2c\x1d\x91\x23\xce\x42\x00\x2d\
|
||||
\x00\x02\x01\x01\x00\x2b\x00\x09\x08\x03\x04\x03\x03\x03\x02\x03\x01";
|
||||
|
||||
static CH_P521: &'static [u8] = b"\
|
||||
\x16\x03\x01\x02\x00\x01\x00\x01\xfc\x03\x03\x1c\x35\x05\x88\x16\
|
||||
\x84\x48\xae\xc7\xaf\x40\xed\x64\xa4\x25\x73\xbb\xb9\xc0\x2c\x46\
|
||||
\x02\x2d\xc8\xa7\x18\x27\xca\x6e\x7a\xe9\x52\x20\x8f\x88\x3d\x7f\
|
||||
\xd0\xe5\x75\x4e\xa1\x94\x0b\x60\x26\xdf\xdd\xe1\x61\xff\x04\x67\
|
||||
\xd5\x47\x88\x83\x1f\x49\x2b\xdc\x08\xc2\x10\x82\x00\x24\x13\x01\
|
||||
\x13\x02\x13\x03\xc0\x2b\xc0\x2f\xc0\x2c\xc0\x30\xcc\xa9\xcc\xa8\
|
||||
\xc0\x09\xc0\x13\xc0\x0a\xc0\x14\x00\x9c\x00\x9d\x00\x2f\x00\x35\
|
||||
\x00\x0a\x01\x00\x01\x8f\x00\x00\x00\x17\x00\x15\x00\x00\x12\x77\
|
||||
\x77\x77\x2e\x63\x6c\x6f\x75\x64\x66\x6c\x61\x72\x65\x2e\x63\x6f\
|
||||
\x6d\x00\x17\x00\x00\xff\x01\x00\x01\x00\x00\x0a\x00\x04\x00\x02\
|
||||
\x00\x19\x00\x0b\x00\x02\x01\x00\x00\x23\x00\x00\x00\x0d\x00\x14\
|
||||
\x00\x12\x04\x03\x08\x04\x04\x01\x05\x03\x08\x05\x05\x01\x08\x06\
|
||||
\x06\x01\x02\x01\x00\x33\x00\x8b\x00\x89\x00\x19\x00\x85\x04\x01\
|
||||
\xf0\xe8\x81\xa5\x0b\x6d\x59\x6a\xaf\xfc\xe3\xf0\xfc\x09\x09\x12\
|
||||
\x2b\x00\x73\xd0\x06\xc5\x4f\x7e\xa1\xb2\x1c\x95\xe4\x2f\x7e\x96\
|
||||
\x45\x33\xf0\x1e\x40\x31\x9c\xe9\xbe\xc1\x21\x10\xd0\x90\xc8\xa5\
|
||||
\x0c\x08\xd1\x82\x05\xd9\x03\xcf\xfe\x57\xdc\x5e\xac\x80\x73\x09\
|
||||
\xf7\x01\xaf\xde\xff\xee\xd4\x49\x05\x5f\xa4\xae\xbb\x16\x40\x36\
|
||||
\x43\x24\xa6\x2a\x79\xd6\x1e\xa4\xe5\xd1\xf9\x89\xf8\x04\x1a\xf1\
|
||||
\x42\x7a\xc9\x21\x27\xbc\x04\x7f\x3c\x90\x88\xab\x0c\x2d\xf8\xc8\
|
||||
\xb4\x3b\x93\x63\x44\xe8\x49\xc0\xec\x46\xa3\x17\x4c\xa0\x8f\x82\
|
||||
\x9d\x24\x94\x00\x2d\x00\x02\x01\x01\x00\x2b\x00\x09\x08\x03\x04\
|
||||
\x03\x03\x03\x02\x03\x01\x00\x15\x00\x9b\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x00\x00\x00";
|
||||
|
||||
static CH_SIKE: &'static [u8] = b"\
|
||||
\x16\x03\x01\x02\x46\x01\x00\x02\x42\x03\x03\xf6\x5d\xac\x6f\x1d\
|
||||
\x7c\x4e\x8d\x33\x29\xc2\xc9\xf7\xde\x80\xe1\xd6\x75\xda\x34\x1f\
|
||||
\x48\xbe\xec\x81\xed\x61\x99\x0b\x14\x0b\x7a\x20\xa6\xe1\x5c\xde\
|
||||
\x61\xb5\x70\x01\x9a\x8c\x2e\xab\xb2\x52\x66\x53\xa7\x6b\xad\x5c\
|
||||
\x6e\xc0\x0d\x1b\xba\x37\x4b\x3e\x2c\xbd\x83\x26\x00\x24\x13\x01\
|
||||
\x13\x02\x13\x03\xc0\x2b\xc0\x2f\xc0\x2c\xc0\x30\xcc\xa9\xcc\xa8\
|
||||
\xc0\x09\xc0\x13\xc0\x0a\xc0\x14\x00\x9c\x00\x9d\x00\x2f\x00\x35\
|
||||
\x00\x0a\x01\x00\x01\xd5\x00\x00\x00\x17\x00\x15\x00\x00\x12\x77\
|
||||
\x77\x77\x2e\x63\x6c\x6f\x75\x64\x66\x6c\x61\x72\x65\x2e\x63\x6f\
|
||||
\x6d\x00\x17\x00\x00\xff\x01\x00\x01\x00\x00\x0a\x00\x04\x00\x02\
|
||||
\xfe\x32\x00\x0b\x00\x02\x01\x00\x00\x23\x00\x00\x00\x0d\x00\x14\
|
||||
\x00\x12\x04\x03\x08\x04\x04\x01\x05\x03\x08\x05\x05\x01\x08\x06\
|
||||
\x06\x01\x02\x01\x00\x33\x01\x70\x01\x6e\xfe\x32\x01\x6a\x3d\x8e\
|
||||
\x3e\x33\x88\xb4\x2e\xf9\x24\x6d\x42\x4a\xa1\x20\xc9\x8a\x94\xec\
|
||||
\x68\xa0\x91\x83\xa9\x9b\xb3\x1f\x80\x17\x7f\xb2\xf0\x31\xc8\x04\
|
||||
\x32\x67\x42\xc8\xda\x9a\x4d\x33\xbf\xb7\xa8\xb5\x1a\xea\x81\x7d\
|
||||
\xfc\xc6\xad\x71\x10\x3e\xef\x8f\x70\xcd\x07\x30\x57\x1c\xe4\x2c\
|
||||
\xec\xca\xbb\xbb\x57\x85\xcf\x83\x93\x1b\x57\x73\xdd\xc8\x84\x77\
|
||||
\x42\xc3\x8b\x87\x00\xd9\x64\xeb\xa5\xfa\xcb\xbd\xa9\x94\x2e\xd8\
|
||||
\x17\xf5\x77\x28\x8c\x77\xe5\x11\xbd\x51\x76\x52\x89\x50\x56\x7a\
|
||||
\x3d\xbf\xfd\xa1\x22\xb0\xc7\xc4\xad\x89\x31\x27\x20\x7a\x45\x43\
|
||||
\x6a\xf6\x3c\xff\x71\x11\xbd\x28\xf7\x78\x2f\x01\x36\x0e\x18\x72\
|
||||
\xf3\x8a\x5f\x0e\x34\x6f\xa1\x8e\x33\xeb\x02\x25\x1e\xb8\x61\xb0\
|
||||
\x10\xb0\xca\x03\x6b\x03\x3e\x71\x9a\xf9\x93\x83\x36\x29\x11\xdc\
|
||||
\x89\xbd\xa3\xb1\x9b\xac\x3b\x39\x1c\xdc\xf3\x4e\xff\x9d\x86\xb6\
|
||||
\xc8\x66\x00\x1b\x5e\x0f\x2b\xa2\x08\xde\x4c\xa6\x18\x03\x83\x89\
|
||||
\x50\x7f\x60\x29\xfa\xac\xf1\x64\xfd\xbc\x0c\x6c\x3c\x48\x73\xd4\
|
||||
\xc8\x24\xe4\x25\x9d\xb1\xd5\x14\xfa\x54\xc8\xea\xdc\xa1\xb0\x03\
|
||||
\x4e\xad\x29\x29\xb7\xb6\x8d\xd2\xef\x00\x82\xb0\x3c\x2e\x01\x0b\
|
||||
\xc3\x4e\x61\x04\xad\xd1\xbd\x4e\xac\x4a\xb5\x40\x46\x36\xfc\xf3\
|
||||
\x48\xb1\x10\xfb\xcc\xd7\x3b\xa1\xc1\xca\x9e\xf2\xdd\x80\x7d\x8c\
|
||||
\x12\xfc\x22\x05\x2d\xd8\x15\x8a\x33\x73\xc8\x92\xbd\xf0\x92\x51\
|
||||
\x00\x5c\xa1\x7b\x4d\x95\x92\xd9\x52\x17\x7b\xbb\xaa\xa1\x02\xc7\
|
||||
\x2c\x82\x51\x9a\xf0\xb3\xb0\xb7\x28\x78\x85\xf4\x0d\xee\xa4\x1b\
|
||||
\x67\x72\x25\xf3\x77\xcf\x55\x11\x10\x3b\xa7\xad\xed\x32\x10\x41\
|
||||
\xdd\x43\x85\xfd\x00\x68\x10\x01\x00\x2d\x00\x02\x01\x01\x00\x2b\
|
||||
\x00\x09\x08\x03\x04\x03\x03\x03\x02\x03\x01";
|
||||
|
||||
static CH_NTRU: &'static [u8] = b"\
|
||||
\x16\x03\x01\x05\x6e\x01\x00\x05\x6a\x03\x03\xea\xc2\x1e\xc1\x29\
|
||||
\x8a\xee\x5b\x02\xf1\x7d\x1c\xf3\x54\x02\x8c\x87\x40\x56\x16\xad\
|
||||
\xa9\x11\xf2\x48\x8a\xde\x33\x82\x42\x02\x04\x20\xd3\x7f\x7a\x35\
|
||||
\xd3\x8f\xa1\x55\xe2\x49\x78\xca\xc0\xff\x48\xfc\x34\x72\x06\x85\
|
||||
\xd9\x71\xaf\xb8\xfc\xdf\xef\x2f\x24\xf2\xf2\x51\x00\x24\x13\x01\
|
||||
\x13\x02\x13\x03\xc0\x2b\xc0\x2f\xc0\x2c\xc0\x30\xcc\xa9\xcc\xa8\
|
||||
\xc0\x09\xc0\x13\xc0\x0a\xc0\x14\x00\x9c\x00\x9d\x00\x2f\x00\x35\
|
||||
\x00\x0a\x01\x00\x04\xfd\x00\x00\x00\x17\x00\x15\x00\x00\x12\x77\
|
||||
\x77\x77\x2e\x63\x6c\x6f\x75\x64\x66\x6c\x61\x72\x65\x2e\x63\x6f\
|
||||
\x6d\x00\x17\x00\x00\xff\x01\x00\x01\x00\x00\x0a\x00\x04\x00\x02\
|
||||
\x41\x38\x00\x0b\x00\x02\x01\x00\x00\x23\x00\x00\x00\x0d\x00\x14\
|
||||
\x00\x12\x04\x03\x08\x04\x04\x01\x05\x03\x08\x05\x05\x01\x08\x06\
|
||||
\x06\x01\x02\x01\x00\x33\x04\x98\x04\x96\x41\x38\x04\x92\xef\x1c\
|
||||
\x6b\x86\x5c\x41\xd0\x92\x5c\xcd\x8e\x44\xea\xbb\x5e\xb8\x7d\xd1\
|
||||
\x96\x41\xeb\xd8\x59\xa1\xf0\xd0\x09\x6d\x50\xca\x69\x7c\xa0\x29\
|
||||
\x5a\xb6\x07\xd6\xb9\x89\x0d\x4c\x29\xc5\x5e\xb8\xf9\x08\x34\xce\
|
||||
\xde\xa3\xe0\x04\xee\xfc\x92\x06\x97\xc8\x5f\x48\x27\xd6\xe5\x36\
|
||||
\xed\x48\x2d\x35\x84\xc2\x87\xc7\x5a\xc6\xbe\xdd\xc2\x52\x12\x23\
|
||||
\xee\xa5\x0d\x95\xed\xaa\xee\xa6\x83\x4d\x61\xe9\xae\x6a\xb1\x49\
|
||||
\x95\x5e\x0c\x55\xa1\x53\x48\xe5\x63\x3f\x7c\x85\xb6\xad\xd7\xc6\
|
||||
\x23\xba\x67\xea\xf4\x0d\x5d\x08\x41\xf9\x46\xab\x86\x6d\x9c\xa3\
|
||||
\x34\x1d\x77\x80\x3a\xe3\xab\x62\x24\xcb\x9a\xd9\xca\x2e\xb6\xa6\
|
||||
\x24\x7d\xb5\x6b\x8c\xd5\x46\x03\x52\x36\xa0\x35\xdd\xc4\x52\xa1\
|
||||
\x74\x1e\x82\xb1\xe0\xc4\x41\xf1\x0b\xa6\xd5\x51\xd1\xd0\x11\xe4\
|
||||
\x76\x2c\x32\x49\xc6\xc7\x1c\xca\xb2\x4a\xd5\x76\x33\xbf\x52\x8f\
|
||||
\xd1\x04\x07\xba\x4b\x91\x30\xd8\x35\x01\x62\xdb\x8f\x9f\x48\xd0\
|
||||
\xf3\x2c\x86\x05\x0e\xaf\x32\xe8\x91\x7b\xa8\x8d\xd2\xf3\x1e\x61\
|
||||
\x6d\xa3\x3a\x44\x23\x64\xf2\x6e\x53\x90\x33\xd7\x75\x71\x34\x27\
|
||||
\xfd\x77\x7c\x11\xcc\x21\x19\x96\x2d\x65\xa5\xff\xdc\x9b\x3b\x05\
|
||||
\xec\xc2\xe2\x3c\xf0\xad\xa7\xd7\x69\xcf\x83\xa7\xb9\xd9\x61\x99\
|
||||
\xcc\x50\xee\x8d\x76\xac\xf6\x3d\x60\x39\xda\xbc\x96\x1a\xb5\x77\
|
||||
\xe6\x59\xa4\x72\x54\xee\xc8\x93\x69\x40\x24\xc5\xc2\xdb\x49\x23\
|
||||
\xf8\xce\xdf\x7e\x59\x80\x4d\x1d\xf9\x06\xf9\x8f\xf1\xd8\xf7\xd3\
|
||||
\x56\xc2\xfd\x0c\x1c\xe0\x33\x63\xed\x47\xa7\xce\xb6\x2a\x85\x1b\
|
||||
\x86\x69\xb9\x46\x37\x36\xac\xa5\x10\xe3\x0c\x77\xac\x0b\x17\x39\
|
||||
\x88\xc3\x71\xac\xdb\x88\x04\x77\x7a\x49\xaf\x9a\xd2\xe6\x27\x51\
|
||||
\x99\x41\xd9\xea\x9b\x23\x38\xd8\x96\x83\xaa\x0e\x3a\x7c\xe8\x3d\
|
||||
\x50\x0d\xce\x40\xf2\x77\x1c\x2c\x1f\x20\x4f\x83\x7f\xfa\xc9\xf9\
|
||||
\xf3\x17\x8d\xba\x92\xee\x18\xa6\xc1\x9f\x1a\x7b\x5d\xd2\xe3\x4f\
|
||||
\xab\x49\xb3\xf1\x91\xc4\xd6\x7f\x32\xda\xad\x24\x41\x58\xef\xc5\
|
||||
\xc6\xcc\x58\x6a\x69\x21\x0b\x6f\xa2\x02\xcc\x91\xe2\x2f\x68\x41\
|
||||
\x43\x9b\x38\x1b\xfa\x03\x1b\x40\x5a\xdc\xfa\x25\xda\x21\x11\x4b\
|
||||
\x40\x9f\x79\x13\xce\x77\x8d\xbb\x37\x04\xc3\x49\x0f\xf7\xd8\x70\
|
||||
\xf4\x4e\xa3\xe1\x1b\x00\x09\x3a\x09\xb9\xed\x02\xbc\x06\xb7\x54\
|
||||
\x75\x2a\x67\x97\xaf\x13\x0d\xd9\x3c\xa9\xff\x48\x66\x3a\xa8\x5b\
|
||||
\x20\x23\xc7\xf9\x45\x16\x5f\x6c\xa1\x19\xc2\x54\xff\xd9\x5e\xbe\
|
||||
\xcd\x73\xc1\x41\x09\xf7\xef\xc9\x26\x4b\x9d\xeb\x0c\x16\x06\x92\
|
||||
\x66\x9d\x8e\xa0\x54\xe8\xe5\x9f\x6c\xfd\x79\x3a\xdd\xc8\x4c\xb8\
|
||||
\xab\xfa\x42\xfd\x44\x50\xa1\x38\x9f\x6d\xef\x80\xf4\xd3\xe4\x06\
|
||||
\x5c\xf7\x2e\x01\x75\xd8\x0c\xb9\x01\x7a\xf0\x71\x91\x5d\x1e\x6d\
|
||||
\x03\x19\x2d\x59\x4d\x8a\x48\x3d\x9c\x4d\x93\xc4\xa3\x9a\xd1\xf5\
|
||||
\x98\xf6\xf7\x2b\xf1\x9b\xbc\x06\x05\x04\xb6\x4b\x97\x55\x7d\x09\
|
||||
\x4a\xf6\x69\xf6\x46\x76\xdf\x68\xd6\xd1\x82\xa5\xa6\xc1\x8b\xb9\
|
||||
\x80\x55\xca\x7b\x6a\x58\x67\x73\x26\xbb\x77\x2c\xa5\xe1\xe2\xc6\
|
||||
\x5f\x99\x39\x53\xbc\x66\x4f\x2e\xcf\xa8\xe5\x49\xea\xa1\x5b\xaf\
|
||||
\xf4\x63\x8f\x7e\x72\xa8\x9c\x5b\x45\xba\xd5\x54\x62\xc8\xf6\xb5\
|
||||
\xe2\x28\x8b\xd7\x96\xf6\xf7\xcd\xfb\x3b\x75\xd6\x73\x7d\x40\xf5\
|
||||
\xfd\x3a\x5e\x82\xb5\x3f\xcc\x2f\xd6\x04\xf2\xce\x33\x6c\xe4\xb3\
|
||||
\x56\x0c\x94\x5a\x59\x0a\xf8\xb8\x92\xd1\xaa\x92\x59\xa6\x91\xd5\
|
||||
\xf5\x5b\x9f\x6b\x25\x02\x18\xa0\x03\x96\x90\x82\x73\x54\x2e\x83\
|
||||
\xd7\x69\xb4\x73\x81\x69\x82\xca\x40\x50\x16\x46\x7e\x48\x18\xd1\
|
||||
\x94\x66\xd8\xd1\x44\x4b\x48\x7d\xd7\x1b\xc2\x75\x9e\x29\x03\xa5\
|
||||
\xef\x79\x5f\xd7\x05\x76\x28\xc8\x02\x3b\x36\x9d\xcb\x5e\x8b\x73\
|
||||
\x69\x86\xa3\x70\x71\x2b\x3e\xe6\xba\x8e\x50\x64\x85\xb1\x3d\x34\
|
||||
\xfd\x5f\x33\x95\xe0\xf0\xd5\xfd\x4a\xab\x96\xb4\xbe\xda\x9d\xc3\
|
||||
\xf4\xf1\xd8\x57\xdc\x12\xe4\x2e\xa6\x64\x20\xa1\x78\xfd\xf5\x10\
|
||||
\xba\x78\x18\x44\xa4\x8d\x47\x29\xdd\x12\x8e\x7d\x27\x3c\x3d\xc8\
|
||||
\xe5\x7f\xa7\xaf\xa1\xdc\xa5\x1c\x1d\x84\x4d\x8f\x17\xdd\x15\x84\
|
||||
\x52\xd9\x9a\x72\x5e\x1a\x68\xfd\xbc\xff\xe2\xd2\xbb\xdc\xc0\x19\
|
||||
\x33\x96\xf7\x4e\x3b\xad\x3b\xde\xf2\x44\x9e\xf7\x77\x2a\x5b\x0e\
|
||||
\xb9\xcd\x87\x6e\xc5\x63\x70\xc4\x3d\x0a\x12\x0d\x2a\x63\xca\x6f\
|
||||
\xbb\x90\x04\x2f\x9c\xf8\x3a\xfd\x04\x20\x78\x58\x1b\x69\x72\x40\
|
||||
\xfe\x75\xc2\x36\x30\x4f\x36\x6f\x07\x4d\xbb\xca\x8c\xf4\x8c\xd5\
|
||||
\x1f\x4a\x03\x23\xc3\xcc\x32\xa6\xd8\xb0\xe9\x67\x0f\xda\x47\xa0\
|
||||
\xa1\x03\xe3\x7a\xc1\xac\x5c\xc7\x3d\x8f\xff\x67\x30\x05\x97\xfb\
|
||||
\x81\x7a\xc2\xd8\x52\x60\xd0\xdc\x3f\xa8\x97\x73\x55\x70\x81\x58\
|
||||
\x5d\x17\x57\x13\xeb\xa4\x3d\x94\x93\x1e\x20\x06\x98\x7a\xbe\xd2\
|
||||
\x79\xb4\x1a\xe8\x80\x73\x01\xa7\xee\xc7\x4f\xfd\x2c\xe5\xef\xc9\
|
||||
\x76\x13\x3c\xe4\x0a\x9a\x1a\x54\xbb\xf2\xba\xf8\x37\xa5\x28\x0d\
|
||||
\x73\x30\x4c\x66\x1c\xff\x36\x67\xa8\xd3\x04\x4f\x6e\x2a\x17\x22\
|
||||
\xed\x77\x75\x3e\xb3\xf3\x63\x1b\x89\xd7\xfe\xd6\x97\x5b\x68\x59\
|
||||
\x92\x79\x2d\xa0\x17\x9d\x37\x48\xb8\xad\xbf\x47\x2c\xa3\x6b\x00\
|
||||
\x27\x09\xb4\x53\xe2\xeb\x54\x9e\xe6\x10\xd2\x2c\x6b\xd8\xf1\x61\
|
||||
\x35\xb0\x26\xbe\xfb\xff\x55\xa9\xaf\xf2\xb6\xe1\xf6\x6a\x4f\xb7\
|
||||
\x9f\xa7\xb7\xee\xea\x54\xd4\xcd\xdc\xb5\xfb\xc6\x67\xe2\xcf\x44\
|
||||
\xe0\x25\x7a\xa2\x1c\xf4\x33\xed\x01\x8b\x96\x6b\xad\x41\xd8\x01\
|
||||
\x00\x2d\x00\x02\x01\x01\x00\x2b\x00\x09\x08\x03\x04\x03\x03\x03\
|
||||
\x02\x03\x01";
|
||||
|
||||
fn sleep(millis: u64, cmt: &'static str) {
|
||||
println!("[START] {}", cmt);
|
||||
sleep_no_comment(millis);
|
||||
println!("[DONE] {}", cmt);
|
||||
}
|
||||
|
||||
fn sleep_no_comment(millis: u64) {
|
||||
let ten_millis = time::Duration::from_millis(millis);
|
||||
let _now = time::Instant::now();
|
||||
thread::sleep(ten_millis);
|
||||
}
|
||||
|
||||
fn main() -> std::io::Result<()> {
|
||||
// Condition variables to control threads
|
||||
let (flag_t1, control_t1) = make_pair();
|
||||
let (flag_t2, control_t2) = make_pair();
|
||||
|
||||
ctrlc::set_handler(move || {
|
||||
println!("Stopping...");
|
||||
control_t1.stop();
|
||||
control_t2.stop();
|
||||
}).expect("Error setting Ctrl-C handler");
|
||||
|
||||
// Parse arguments
|
||||
let _args: Vec<String> = env::args().collect();
|
||||
// Argument 1 - <host>:<port>
|
||||
let addr_iter = _args[1].to_socket_addrs().unwrap();
|
||||
// Argument 2 - timeout tcp TO. Fallback to 1 sec
|
||||
let dur_sec: u64 = _args[2].parse().unwrap_or(1);
|
||||
let dur = Duration::new(dur_sec, 0);
|
||||
// Argument 3 - which client hello to send
|
||||
let ch_case: usize = _args[3].parse().unwrap();
|
||||
// Argument 4 - Sends per second
|
||||
let msg_per_sec: usize = _args[4].parse().unwrap();
|
||||
// Argument 5 - Number of connections to keep open
|
||||
let con_num: usize = _args[5].parse().unwrap();
|
||||
|
||||
// create FIFO
|
||||
println!("We will keep {} connections open", con_num);
|
||||
let (tx, rx) = sync_channel(con_num);
|
||||
|
||||
// Start a thread which sends CH
|
||||
let _t1 = thread::spawn(move || {
|
||||
let mut sent = 0;
|
||||
while flag_t1.is_alive() {
|
||||
// wait until connections are produced
|
||||
while rx.try_iter().next().is_none() {
|
||||
sleep(100, "Waiting for connections");
|
||||
}
|
||||
// receive next connection and send CH
|
||||
let mut s: TcpStream = rx.recv().unwrap();
|
||||
match ch_case {
|
||||
1 => s.write(&CH_NTRU).unwrap(),
|
||||
2 => s.write(&CH_SIKE).unwrap(),
|
||||
3 => s.write(&CH_X25519).unwrap(),
|
||||
4 => s.write(&CH_P521).unwrap(),
|
||||
_ => panic!("Unknown case"),
|
||||
};
|
||||
s.shutdown(Shutdown::Both).expect("shutdown call failed");
|
||||
sleep_no_comment(1000/msg_per_sec as u64);
|
||||
sent += 1;
|
||||
if sent % 100 == 0 {
|
||||
println!("nb of queries sent: {}", sent);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Start a thread which produces connections
|
||||
let _t2 = thread::spawn(move || {
|
||||
// First thread owns tx
|
||||
while flag_t2.is_alive() {
|
||||
let addr_ref = &addr_iter.as_slice()[0];
|
||||
let sock = TcpStream::connect_timeout(addr_ref, dur);
|
||||
if sock.is_err() {
|
||||
sleep(1000, "Can't connect, waiting...");
|
||||
continue;
|
||||
}
|
||||
let s = sock.unwrap();
|
||||
s.set_nonblocking(true).expect("set_nonblocking call failed");
|
||||
|
||||
match tx.try_send(s) {
|
||||
Err(_) => sleep(1000, "Can't put in the queue"),
|
||||
Ok(_) => continue,
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// wait for TX thread to finish
|
||||
_t1.join().unwrap();
|
||||
_t2.join().unwrap();
|
||||
Ok(())
|
||||
}
|
Завантаження…
Посилання в новій задачі
Block a user