Skip to content
This repository was archived by the owner on Jul 3, 2020. It is now read-only.

Commit f820e26

Browse files
committed
Add libsodium
1 parent 5d1c348 commit f820e26

4 files changed

Lines changed: 214 additions & 0 deletions

File tree

SConstruct

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ config = {
7676
'-c',
7777
'-std=c99',
7878
'-D_XOPEN_SOURCE=700',
79+
'-DSODIUM_STATIC',
7980
]),
8081
"release": set([
8182
]),
@@ -116,6 +117,7 @@ config = {
116117
'deps/concurrentqueue',
117118
'deps/acpica/source/include',
118119
'deps/printf',
120+
'deps/libsodium/src/libsodium/include',
119121
'src',
120122
'test',
121123
],
@@ -124,6 +126,7 @@ config = {
124126
'cxx',
125127
'acpica',
126128
'printf',
129+
'sodium',
127130
'musl',
128131
'gcc',
129132
],

deps/SConscript

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -958,6 +958,156 @@ libs_config = {
958958
'printf/printf.cc',
959959
],
960960
},
961+
"libsodium": {
962+
"include": [
963+
'musl/src/internal',
964+
'musl/include',
965+
'musl/arch/x86_64',
966+
'musl/arch/x86_64/bits',
967+
'libsodium/src/libsodium/include/sodium',
968+
],
969+
"source": [
970+
'libsodium/src/libsodium/crypto_aead/chacha20poly1305/sodium/aead_chacha20poly1305.c',
971+
'libsodium/src/libsodium/crypto_auth/crypto_auth.c',
972+
'libsodium/src/libsodium/crypto_auth/hmacsha256/auth_hmacsha256_api.c',
973+
'libsodium/src/libsodium/crypto_auth/hmacsha256/cp/hmac_hmacsha256.c',
974+
'libsodium/src/libsodium/crypto_auth/hmacsha256/cp/verify_hmacsha256.c',
975+
'libsodium/src/libsodium/crypto_auth/hmacsha512/auth_hmacsha512_api.c',
976+
'libsodium/src/libsodium/crypto_auth/hmacsha512/cp/hmac_hmacsha512.c',
977+
'libsodium/src/libsodium/crypto_auth/hmacsha512/cp/verify_hmacsha512.c',
978+
'libsodium/src/libsodium/crypto_auth/hmacsha512256/auth_hmacsha512256_api.c',
979+
'libsodium/src/libsodium/crypto_auth/hmacsha512256/cp/hmac_hmacsha512256.c',
980+
'libsodium/src/libsodium/crypto_auth/hmacsha512256/cp/verify_hmacsha512256.c',
981+
'libsodium/src/libsodium/crypto_box/crypto_box.c',
982+
'libsodium/src/libsodium/crypto_box/crypto_box_easy.c',
983+
'libsodium/src/libsodium/crypto_box/crypto_box_seal.c',
984+
'libsodium/src/libsodium/crypto_box/curve25519xsalsa20poly1305/box_curve25519xsalsa20poly1305_api.c',
985+
'libsodium/src/libsodium/crypto_box/curve25519xsalsa20poly1305/ref/after_curve25519xsalsa20poly1305.c',
986+
'libsodium/src/libsodium/crypto_box/curve25519xsalsa20poly1305/ref/before_curve25519xsalsa20poly1305.c',
987+
'libsodium/src/libsodium/crypto_box/curve25519xsalsa20poly1305/ref/box_curve25519xsalsa20poly1305.c',
988+
'libsodium/src/libsodium/crypto_box/curve25519xsalsa20poly1305/ref/keypair_curve25519xsalsa20poly1305.c',
989+
'libsodium/src/libsodium/crypto_core/hsalsa20/core_hsalsa20_api.c',
990+
'libsodium/src/libsodium/crypto_core/hsalsa20/ref2/core_hsalsa20.c',
991+
'libsodium/src/libsodium/crypto_core/salsa20/core_salsa20_api.c',
992+
'libsodium/src/libsodium/crypto_core/salsa20/ref/core_salsa20.c',
993+
'libsodium/src/libsodium/crypto_core/salsa2012/core_salsa2012_api.c',
994+
'libsodium/src/libsodium/crypto_core/salsa2012/ref/core_salsa2012.c',
995+
'libsodium/src/libsodium/crypto_core/salsa208/core_salsa208_api.c',
996+
'libsodium/src/libsodium/crypto_core/salsa208/ref/core_salsa208.c',
997+
'libsodium/src/libsodium/crypto_generichash/blake2/generichash_blake2_api.c',
998+
'libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2b-ref.c',
999+
'libsodium/src/libsodium/crypto_generichash/blake2/ref/generichash_blake2b.c',
1000+
'libsodium/src/libsodium/crypto_generichash/crypto_generichash.c',
1001+
'libsodium/src/libsodium/crypto_hash/crypto_hash.c',
1002+
'libsodium/src/libsodium/crypto_hash/sha256/cp/hash_sha256.c',
1003+
'libsodium/src/libsodium/crypto_hash/sha256/hash_sha256_api.c',
1004+
'libsodium/src/libsodium/crypto_hash/sha512/cp/hash_sha512.c',
1005+
'libsodium/src/libsodium/crypto_hash/sha512/hash_sha512_api.c',
1006+
'libsodium/src/libsodium/crypto_onetimeauth/crypto_onetimeauth.c',
1007+
'libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/auth_poly1305_donna.c',
1008+
'libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/verify_poly1305_donna.c',
1009+
'libsodium/src/libsodium/crypto_onetimeauth/poly1305/onetimeauth_poly1305.c',
1010+
'libsodium/src/libsodium/crypto_onetimeauth/poly1305/onetimeauth_poly1305_api.c',
1011+
'libsodium/src/libsodium/crypto_onetimeauth/poly1305/onetimeauth_poly1305_try.c',
1012+
'libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/crypto_scrypt-common.c',
1013+
'libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/nosse/pwhash_scryptsalsa208sha256_nosse.c',
1014+
'libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.c',
1015+
'libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/pwhash_scryptsalsa208sha256.c',
1016+
'libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/scrypt_platform.c',
1017+
'libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/sse/pwhash_scryptsalsa208sha256_sse.c',
1018+
'libsodium/src/libsodium/crypto_scalarmult/crypto_scalarmult.c',
1019+
'libsodium/src/libsodium/crypto_scalarmult/curve25519/donna_c64/base_curve25519_donna_c64.c',
1020+
'libsodium/src/libsodium/crypto_scalarmult/curve25519/donna_c64/smult_curve25519_donna_c64.c',
1021+
'libsodium/src/libsodium/crypto_scalarmult/curve25519/scalarmult_curve25519_api.c',
1022+
'libsodium/src/libsodium/crypto_secretbox/crypto_secretbox.c',
1023+
'libsodium/src/libsodium/crypto_secretbox/crypto_secretbox_easy.c',
1024+
'libsodium/src/libsodium/crypto_secretbox/xsalsa20poly1305/ref/box_xsalsa20poly1305.c',
1025+
'libsodium/src/libsodium/crypto_secretbox/xsalsa20poly1305/secretbox_xsalsa20poly1305_api.c',
1026+
'libsodium/src/libsodium/crypto_shorthash/crypto_shorthash.c',
1027+
'libsodium/src/libsodium/crypto_shorthash/siphash24/ref/shorthash_siphash24.c',
1028+
'libsodium/src/libsodium/crypto_shorthash/siphash24/shorthash_siphash24_api.c',
1029+
'libsodium/src/libsodium/crypto_sign/crypto_sign.c',
1030+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_0.c',
1031+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_1.c',
1032+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_add.c',
1033+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_cmov.c',
1034+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_copy.c',
1035+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_frombytes.c',
1036+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_invert.c',
1037+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_isnegative.c',
1038+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_isnonzero.c',
1039+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_mul.c',
1040+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_neg.c',
1041+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_pow22523.c',
1042+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_sq.c',
1043+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_sq2.c',
1044+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_sub.c',
1045+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_tobytes.c',
1046+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_add.c',
1047+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_double_scalarmult.c',
1048+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_frombytes.c',
1049+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_madd.c',
1050+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_msub.c',
1051+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_p1p1_to_p2.c',
1052+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_p1p1_to_p3.c',
1053+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_p2_0.c',
1054+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_p2_dbl.c',
1055+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_p3_0.c',
1056+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_p3_dbl.c',
1057+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_p3_to_cached.c',
1058+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_p3_to_p2.c',
1059+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_p3_tobytes.c',
1060+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_precomp_0.c',
1061+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_scalarmult_base.c',
1062+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_sub.c',
1063+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_tobytes.c',
1064+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/keypair.c',
1065+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/open.c',
1066+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/sc_muladd.c',
1067+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/sc_reduce.c',
1068+
'libsodium/src/libsodium/crypto_sign/ed25519/ref10/sign.c',
1069+
'libsodium/src/libsodium/crypto_sign/ed25519/sign_ed25519_api.c',
1070+
'libsodium/src/libsodium/crypto_sign/edwards25519sha512batch/ref/fe25519_edwards25519sha512batch.c',
1071+
'libsodium/src/libsodium/crypto_sign/edwards25519sha512batch/ref/ge25519_edwards25519sha512batch.c',
1072+
'libsodium/src/libsodium/crypto_sign/edwards25519sha512batch/ref/sc25519_edwards25519sha512batch.c',
1073+
'libsodium/src/libsodium/crypto_sign/edwards25519sha512batch/ref/sign_edwards25519sha512batch.c',
1074+
'libsodium/src/libsodium/crypto_sign/edwards25519sha512batch/sign_edwards25519sha512batch_api.c',
1075+
'libsodium/src/libsodium/crypto_stream/aes128ctr/portable/afternm_aes128ctr.c',
1076+
'libsodium/src/libsodium/crypto_stream/aes128ctr/portable/beforenm_aes128ctr.c',
1077+
'libsodium/src/libsodium/crypto_stream/aes128ctr/portable/common_aes128ctr.c',
1078+
'libsodium/src/libsodium/crypto_stream/aes128ctr/portable/consts_aes128ctr.c',
1079+
'libsodium/src/libsodium/crypto_stream/aes128ctr/portable/int128_aes128ctr.c',
1080+
'libsodium/src/libsodium/crypto_stream/aes128ctr/portable/stream_aes128ctr.c',
1081+
'libsodium/src/libsodium/crypto_stream/aes128ctr/portable/xor_afternm_aes128ctr.c',
1082+
'libsodium/src/libsodium/crypto_stream/aes128ctr/stream_aes128ctr_api.c',
1083+
'libsodium/src/libsodium/crypto_stream/chacha20/ref/stream_chacha20_ref.c',
1084+
'libsodium/src/libsodium/crypto_stream/chacha20/stream_chacha20_api.c',
1085+
'libsodium/src/libsodium/crypto_stream/crypto_stream.c',
1086+
'libsodium/src/libsodium/crypto_stream/salsa20/amd64_xmm6/stream_salsa20_amd64_xmm6.S',
1087+
'libsodium/src/libsodium/crypto_stream/salsa20/stream_salsa20_api.c',
1088+
'libsodium/src/libsodium/crypto_stream/salsa2012/ref/stream_salsa2012.c',
1089+
'libsodium/src/libsodium/crypto_stream/salsa2012/ref/xor_salsa2012.c',
1090+
'libsodium/src/libsodium/crypto_stream/salsa2012/stream_salsa2012_api.c',
1091+
'libsodium/src/libsodium/crypto_stream/salsa208/ref/stream_salsa208.c',
1092+
'libsodium/src/libsodium/crypto_stream/salsa208/ref/xor_salsa208.c',
1093+
'libsodium/src/libsodium/crypto_stream/salsa208/stream_salsa208_api.c',
1094+
'libsodium/src/libsodium/crypto_stream/xsalsa20/ref/stream_xsalsa20.c',
1095+
'libsodium/src/libsodium/crypto_stream/xsalsa20/ref/xor_xsalsa20.c',
1096+
'libsodium/src/libsodium/crypto_stream/xsalsa20/stream_xsalsa20_api.c',
1097+
'libsodium/src/libsodium/crypto_verify/16/ref/verify_16.c',
1098+
'libsodium/src/libsodium/crypto_verify/16/verify_16_api.c',
1099+
'libsodium/src/libsodium/crypto_verify/32/ref/verify_32.c',
1100+
'libsodium/src/libsodium/crypto_verify/32/verify_32_api.c',
1101+
'libsodium/src/libsodium/crypto_verify/64/ref/verify_64.c',
1102+
'libsodium/src/libsodium/crypto_verify/64/verify_64_api.c',
1103+
'libsodium/src/libsodium/randombytes/randombytes.c',
1104+
'libsodium/src/libsodium/randombytes/salsa20/randombytes_salsa20_random.c',
1105+
'libsodium/src/libsodium/sodium/core.c',
1106+
'libsodium/src/libsodium/sodium/runtime.c',
1107+
'libsodium/src/libsodium/sodium/utils.c',
1108+
'libsodium/src/libsodium/sodium/version.c',
1109+
],
1110+
},
9611111
}
9621112

9631113

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
2+
#ifndef __SODIUM_VERSION_H__
3+
#define __SODIUM_VERSION_H__
4+
5+
#include "export.h"
6+
7+
#define SODIUM_VERSION_STRING "1.0.3"
8+
9+
#define SODIUM_LIBRARY_VERSION_MAJOR 7
10+
#define SODIUM_LIBRARY_VERSION_MINOR 5
11+
12+
#ifdef __cplusplus
13+
extern "C" {
14+
#endif
15+
16+
SODIUM_EXPORT
17+
const char *sodium_version_string(void);
18+
19+
SODIUM_EXPORT
20+
int sodium_library_version_major(void);
21+
22+
SODIUM_EXPORT
23+
int sodium_library_version_minor(void);
24+
25+
#ifdef __cplusplus
26+
}
27+
#endif
28+
29+
#endif

src/kernel/kernel-main.cc

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include <kernel/logger.h>
2929
#include <kernel/platform.h>
3030
#include <kernel/irqs.h>
31+
#include <sodium.h>
3132

3233
#define DEFINE_GLOBAL_OBJECT(name, type) \
3334
static uint8_t placement_##name[sizeof(type)] alignas(16); \
@@ -58,6 +59,8 @@ extern function_pointer end_ctors[];
5859

5960
int mksnapshot_main(int argc, char** argv);
6061

62+
randombytes_implementation randombytes_sysrandom_implementation;
63+
6164
namespace rt {
6265

6366
void KernelMain::Initialize(void* mbt) {
@@ -135,6 +138,21 @@ void KernelMain::MakeV8Snapshot() {
135138
mksnapshot_main(2, argv);
136139
}
137140

141+
const char* runtime_rng_name() {
142+
return "runtimejs";
143+
}
144+
145+
uint32_t runtime_rng_random() {
146+
return 42;
147+
}
148+
149+
void runtime_rng_buf(void* const buf, const size_t size) {
150+
uint8_t* b = reinterpret_cast<uint8_t*>(buf);
151+
for (size_t i = 0; i < size; ++i) {
152+
b[i] = 42;
153+
}
154+
}
155+
138156
void KernelMain::InitSystemBSP(void* mbt) {
139157
// some musl libc init
140158
libc.threads_minus_1 = 0;
@@ -160,6 +178,20 @@ void KernelMain::InitSystemBSP(void* mbt) {
160178
Cpu::HangSystem();
161179
}
162180

181+
randombytes_implementation* impl = new randombytes_implementation();
182+
impl->implementation_name = runtime_rng_name;
183+
impl->random = runtime_rng_random;
184+
impl->stir = nullptr;
185+
impl->uniform = nullptr;
186+
impl->buf = runtime_rng_buf;
187+
impl->close = nullptr;
188+
randombytes_set_implementation(impl);
189+
190+
if (sodium_init() == -1) {
191+
printf("Could not initialize libsodium.\n");
192+
Cpu::HangSystem();
193+
}
194+
163195
GLOBAL_boot_services()->logger()->EnableConsole();
164196
CONSTRUCT_GLOBAL_OBJECT(GLOBAL_engines, Engines, 1 /*cpus_found*/ );
165197
Cpu::EnableInterrupts();

0 commit comments

Comments
 (0)