ruby_nacl 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Changelog +0 -0
- data/README.md +49 -0
- data/ext/ruby_nacl/NaCl/MACROS +56 -0
- data/ext/ruby_nacl/NaCl/OPERATIONS +11 -0
- data/ext/ruby_nacl/NaCl/PROTOTYPES.c +26 -0
- data/ext/ruby_nacl/NaCl/PROTOTYPES.cpp +17 -0
- data/ext/ruby_nacl/NaCl/README +1 -0
- data/ext/ruby_nacl/NaCl/commandline/nacl-sha256.c +64 -0
- data/ext/ruby_nacl/NaCl/commandline/nacl-sha512.c +64 -0
- data/ext/ruby_nacl/NaCl/cpucycles/alpha.c +80 -0
- data/ext/ruby_nacl/NaCl/cpucycles/alpha.h +27 -0
- data/ext/ruby_nacl/NaCl/cpucycles/amd64cpuinfo.c +16 -0
- data/ext/ruby_nacl/NaCl/cpucycles/amd64cpuinfo.h +27 -0
- data/ext/ruby_nacl/NaCl/cpucycles/amd64cpuspeed.c +25 -0
- data/ext/ruby_nacl/NaCl/cpucycles/amd64cpuspeed.h +27 -0
- data/ext/ruby_nacl/NaCl/cpucycles/amd64tscfreq.c +18 -0
- data/ext/ruby_nacl/NaCl/cpucycles/amd64tscfreq.h +27 -0
- data/ext/ruby_nacl/NaCl/cpucycles/celllinux.c +83 -0
- data/ext/ruby_nacl/NaCl/cpucycles/celllinux.h +27 -0
- data/ext/ruby_nacl/NaCl/cpucycles/cortex.c +73 -0
- data/ext/ruby_nacl/NaCl/cpucycles/cortex.h +27 -0
- data/ext/ruby_nacl/NaCl/cpucycles/dev4ns.c +62 -0
- data/ext/ruby_nacl/NaCl/cpucycles/dev4ns.h +27 -0
- data/ext/ruby_nacl/NaCl/cpucycles/do +105 -0
- data/ext/ruby_nacl/NaCl/cpucycles/gettimeofday.c +32 -0
- data/ext/ruby_nacl/NaCl/cpucycles/gettimeofday.h +27 -0
- data/ext/ruby_nacl/NaCl/cpucycles/hppapstat.c +26 -0
- data/ext/ruby_nacl/NaCl/cpucycles/hppapstat.h +27 -0
- data/ext/ruby_nacl/NaCl/cpucycles/ia64cpuinfo.c +15 -0
- data/ext/ruby_nacl/NaCl/cpucycles/ia64cpuinfo.h +27 -0
- data/ext/ruby_nacl/NaCl/cpucycles/mips.c +65 -0
- data/ext/ruby_nacl/NaCl/cpucycles/mips.h +27 -0
- data/ext/ruby_nacl/NaCl/cpucycles/monotonic.c +34 -0
- data/ext/ruby_nacl/NaCl/cpucycles/monotonic.h +27 -0
- data/ext/ruby_nacl/NaCl/cpucycles/monotoniccpuinfo.c +33 -0
- data/ext/ruby_nacl/NaCl/cpucycles/monotoniccpuinfo.h +27 -0
- data/ext/ruby_nacl/NaCl/cpucycles/osfreq.c +65 -0
- data/ext/ruby_nacl/NaCl/cpucycles/powerpccpuinfo.c +95 -0
- data/ext/ruby_nacl/NaCl/cpucycles/powerpccpuinfo.h +27 -0
- data/ext/ruby_nacl/NaCl/cpucycles/powerpcmacos.c +42 -0
- data/ext/ruby_nacl/NaCl/cpucycles/powerpcmacos.h +27 -0
- data/ext/ruby_nacl/NaCl/cpucycles/sgi.c +38 -0
- data/ext/ruby_nacl/NaCl/cpucycles/sgi.h +27 -0
- data/ext/ruby_nacl/NaCl/cpucycles/sparc32cpuinfo.c +16 -0
- data/ext/ruby_nacl/NaCl/cpucycles/sparc32cpuinfo.h +27 -0
- data/ext/ruby_nacl/NaCl/cpucycles/sparccpuinfo.c +15 -0
- data/ext/ruby_nacl/NaCl/cpucycles/sparccpuinfo.h +27 -0
- data/ext/ruby_nacl/NaCl/cpucycles/test.c +77 -0
- data/ext/ruby_nacl/NaCl/cpucycles/x86cpuinfo.c +15 -0
- data/ext/ruby_nacl/NaCl/cpucycles/x86cpuinfo.h +27 -0
- data/ext/ruby_nacl/NaCl/cpucycles/x86cpuspeed.c +24 -0
- data/ext/ruby_nacl/NaCl/cpucycles/x86cpuspeed.h +27 -0
- data/ext/ruby_nacl/NaCl/cpucycles/x86estimate.c +59 -0
- data/ext/ruby_nacl/NaCl/cpucycles/x86estimate.h +27 -0
- data/ext/ruby_nacl/NaCl/cpucycles/x86tscfreq.c +17 -0
- data/ext/ruby_nacl/NaCl/cpucycles/x86tscfreq.h +27 -0
- data/ext/ruby_nacl/NaCl/cpuid/cbytes.c +16 -0
- data/ext/ruby_nacl/NaCl/cpuid/cpuid.c +41 -0
- data/ext/ruby_nacl/NaCl/cpuid/do +37 -0
- data/ext/ruby_nacl/NaCl/cpuid/unknown.c +7 -0
- data/ext/ruby_nacl/NaCl/cpuid/x86.c +41 -0
- data/ext/ruby_nacl/NaCl/crypto_auth/hmacsha256/checksum +1 -0
- data/ext/ruby_nacl/NaCl/crypto_auth/hmacsha256/ref/api.h +2 -0
- data/ext/ruby_nacl/NaCl/crypto_auth/hmacsha256/ref/hmac.c +83 -0
- data/ext/ruby_nacl/NaCl/crypto_auth/hmacsha256/ref/verify.c +9 -0
- data/ext/ruby_nacl/NaCl/crypto_auth/hmacsha256/used +0 -0
- data/ext/ruby_nacl/NaCl/crypto_auth/hmacsha512256/checksum +1 -0
- data/ext/ruby_nacl/NaCl/crypto_auth/hmacsha512256/ref/api.h +2 -0
- data/ext/ruby_nacl/NaCl/crypto_auth/hmacsha512256/ref/hmac.c +86 -0
- data/ext/ruby_nacl/NaCl/crypto_auth/hmacsha512256/ref/verify.c +9 -0
- data/ext/ruby_nacl/NaCl/crypto_auth/hmacsha512256/selected +0 -0
- data/ext/ruby_nacl/NaCl/crypto_auth/hmacsha512256/used +0 -0
- data/ext/ruby_nacl/NaCl/crypto_auth/measure.c +69 -0
- data/ext/ruby_nacl/NaCl/crypto_auth/try.c +119 -0
- data/ext/ruby_nacl/NaCl/crypto_auth/wrapper-auth.cpp +11 -0
- data/ext/ruby_nacl/NaCl/crypto_auth/wrapper-verify.cpp +14 -0
- data/ext/ruby_nacl/NaCl/crypto_box/curve25519xsalsa20poly1305/checksum +1 -0
- data/ext/ruby_nacl/NaCl/crypto_box/curve25519xsalsa20poly1305/ref/after.c +22 -0
- data/ext/ruby_nacl/NaCl/crypto_box/curve25519xsalsa20poly1305/ref/api.h +6 -0
- data/ext/ruby_nacl/NaCl/crypto_box/curve25519xsalsa20poly1305/ref/before.c +17 -0
- data/ext/ruby_nacl/NaCl/crypto_box/curve25519xsalsa20poly1305/ref/box.c +27 -0
- data/ext/ruby_nacl/NaCl/crypto_box/curve25519xsalsa20poly1305/ref/keypair.c +12 -0
- data/ext/ruby_nacl/NaCl/crypto_box/curve25519xsalsa20poly1305/selected +0 -0
- data/ext/ruby_nacl/NaCl/crypto_box/curve25519xsalsa20poly1305/used +0 -0
- data/ext/ruby_nacl/NaCl/crypto_box/measure.c +137 -0
- data/ext/ruby_nacl/NaCl/crypto_box/try.c +195 -0
- data/ext/ruby_nacl/NaCl/crypto_box/wrapper-box.cpp +24 -0
- data/ext/ruby_nacl/NaCl/crypto_box/wrapper-keypair.cpp +12 -0
- data/ext/ruby_nacl/NaCl/crypto_box/wrapper-open.cpp +27 -0
- data/ext/ruby_nacl/NaCl/crypto_core/hsalsa20/checksum +1 -0
- data/ext/ruby_nacl/NaCl/crypto_core/hsalsa20/ref/api.h +4 -0
- data/ext/ruby_nacl/NaCl/crypto_core/hsalsa20/ref/core.c +135 -0
- data/ext/ruby_nacl/NaCl/crypto_core/hsalsa20/ref/implementors +1 -0
- data/ext/ruby_nacl/NaCl/crypto_core/hsalsa20/ref2/api.h +4 -0
- data/ext/ruby_nacl/NaCl/crypto_core/hsalsa20/ref2/core.c +108 -0
- data/ext/ruby_nacl/NaCl/crypto_core/hsalsa20/ref2/implementors +1 -0
- data/ext/ruby_nacl/NaCl/crypto_core/hsalsa20/used +0 -0
- data/ext/ruby_nacl/NaCl/crypto_core/measure.c +18 -0
- data/ext/ruby_nacl/NaCl/crypto_core/salsa20/checksum +1 -0
- data/ext/ruby_nacl/NaCl/crypto_core/salsa20/ref/api.h +4 -0
- data/ext/ruby_nacl/NaCl/crypto_core/salsa20/ref/core.c +134 -0
- data/ext/ruby_nacl/NaCl/crypto_core/salsa20/ref/implementors +1 -0
- data/ext/ruby_nacl/NaCl/crypto_core/salsa20/used +0 -0
- data/ext/ruby_nacl/NaCl/crypto_core/salsa2012/checksum +1 -0
- data/ext/ruby_nacl/NaCl/crypto_core/salsa2012/ref/api.h +4 -0
- data/ext/ruby_nacl/NaCl/crypto_core/salsa2012/ref/core.c +134 -0
- data/ext/ruby_nacl/NaCl/crypto_core/salsa2012/ref/implementors +1 -0
- data/ext/ruby_nacl/NaCl/crypto_core/salsa2012/used +0 -0
- data/ext/ruby_nacl/NaCl/crypto_core/salsa208/checksum +1 -0
- data/ext/ruby_nacl/NaCl/crypto_core/salsa208/ref/api.h +4 -0
- data/ext/ruby_nacl/NaCl/crypto_core/salsa208/ref/core.c +134 -0
- data/ext/ruby_nacl/NaCl/crypto_core/salsa208/ref/implementors +1 -0
- data/ext/ruby_nacl/NaCl/crypto_core/salsa208/used +0 -0
- data/ext/ruby_nacl/NaCl/crypto_core/try.c +116 -0
- data/ext/ruby_nacl/NaCl/crypto_core/wrapper-empty.cpp +0 -0
- data/ext/ruby_nacl/NaCl/crypto_hash/measure.c +66 -0
- data/ext/ruby_nacl/NaCl/crypto_hash/sha256/checksum +1 -0
- data/ext/ruby_nacl/NaCl/crypto_hash/sha256/ref/api.h +1 -0
- data/ext/ruby_nacl/NaCl/crypto_hash/sha256/ref/hash.c +69 -0
- data/ext/ruby_nacl/NaCl/crypto_hash/sha256/ref/implementors +1 -0
- data/ext/ruby_nacl/NaCl/crypto_hash/sha256/used +0 -0
- data/ext/ruby_nacl/NaCl/crypto_hash/sha512/checksum +1 -0
- data/ext/ruby_nacl/NaCl/crypto_hash/sha512/ref/api.h +1 -0
- data/ext/ruby_nacl/NaCl/crypto_hash/sha512/ref/hash.c +71 -0
- data/ext/ruby_nacl/NaCl/crypto_hash/sha512/ref/implementors +1 -0
- data/ext/ruby_nacl/NaCl/crypto_hash/sha512/selected +0 -0
- data/ext/ruby_nacl/NaCl/crypto_hash/sha512/used +0 -0
- data/ext/ruby_nacl/NaCl/crypto_hash/try.c +77 -0
- data/ext/ruby_nacl/NaCl/crypto_hash/wrapper-hash.cpp +10 -0
- data/ext/ruby_nacl/NaCl/crypto_hashblocks/measure.c +18 -0
- data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha256/checksum +1 -0
- data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha256/inplace/api.h +2 -0
- data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha256/inplace/blocks.c +228 -0
- data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha256/inplace/implementors +1 -0
- data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha256/ref/api.h +2 -0
- data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha256/ref/blocks.c +212 -0
- data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha256/ref/implementors +1 -0
- data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha256/used +0 -0
- data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha512/checksum +1 -0
- data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha512/inplace/api.h +2 -0
- data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha512/inplace/blocks.c +256 -0
- data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha512/inplace/implementors +1 -0
- data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha512/ref/api.h +2 -0
- data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha512/ref/blocks.c +239 -0
- data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha512/ref/implementors +1 -0
- data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha512/selected +0 -0
- data/ext/ruby_nacl/NaCl/crypto_hashblocks/sha512/used +0 -0
- data/ext/ruby_nacl/NaCl/crypto_hashblocks/try.c +79 -0
- data/ext/ruby_nacl/NaCl/crypto_hashblocks/wrapper-empty.cpp +0 -0
- data/ext/ruby_nacl/NaCl/crypto_onetimeauth/measure.c +69 -0
- data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/53/api.h +2 -0
- data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/53/auth.c +1616 -0
- data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/53/verify.c +9 -0
- data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/amd64/api.h +2 -0
- data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/amd64/auth.s +2787 -0
- data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/amd64/constants.s +85 -0
- data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/amd64/verify.c +9 -0
- data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/checksum +1 -0
- data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/ref/api.h +2 -0
- data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/ref/auth.c +104 -0
- data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/ref/verify.c +9 -0
- data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/selected +0 -0
- data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/used +0 -0
- data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/x86/api.h +2 -0
- data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/x86/auth.s +2779 -0
- data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/x86/constants.s +85 -0
- data/ext/ruby_nacl/NaCl/crypto_onetimeauth/poly1305/x86/verify.c +9 -0
- data/ext/ruby_nacl/NaCl/crypto_onetimeauth/try.c +119 -0
- data/ext/ruby_nacl/NaCl/crypto_onetimeauth/wrapper-auth.cpp +11 -0
- data/ext/ruby_nacl/NaCl/crypto_onetimeauth/wrapper-verify.cpp +14 -0
- data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/athlon/api.h +2 -0
- data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/athlon/base.c +8 -0
- data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/athlon/const.s +114 -0
- data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/athlon/fromdouble.s +195 -0
- data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/athlon/implementors +1 -0
- data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/athlon/init.s +13 -0
- data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/athlon/mainloop.s +3990 -0
- data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/athlon/mult.s +410 -0
- data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/athlon/smult.c +91 -0
- data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/athlon/square.s +298 -0
- data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/athlon/todouble.s +144 -0
- data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/checksum +1 -0
- data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/donna_c64/api.h +2 -0
- data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/donna_c64/base.c +8 -0
- data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/donna_c64/implementors +1 -0
- data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/donna_c64/smult.c +477 -0
- data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/ref/api.h +2 -0
- data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/ref/base.c +16 -0
- data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/ref/implementors +1 -0
- data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/ref/smult.c +265 -0
- data/ext/ruby_nacl/NaCl/crypto_scalarmult/curve25519/used +0 -0
- data/ext/ruby_nacl/NaCl/crypto_scalarmult/measure.c +61 -0
- data/ext/ruby_nacl/NaCl/crypto_scalarmult/try.c +126 -0
- data/ext/ruby_nacl/NaCl/crypto_scalarmult/wrapper-base.cpp +11 -0
- data/ext/ruby_nacl/NaCl/crypto_scalarmult/wrapper-mult.cpp +12 -0
- data/ext/ruby_nacl/NaCl/crypto_secretbox/measure.c +75 -0
- data/ext/ruby_nacl/NaCl/crypto_secretbox/try.c +129 -0
- data/ext/ruby_nacl/NaCl/crypto_secretbox/wrapper-box.cpp +19 -0
- data/ext/ruby_nacl/NaCl/crypto_secretbox/wrapper-open.cpp +22 -0
- data/ext/ruby_nacl/NaCl/crypto_secretbox/xsalsa20poly1305/checksum +1 -0
- data/ext/ruby_nacl/NaCl/crypto_secretbox/xsalsa20poly1305/ref/api.h +4 -0
- data/ext/ruby_nacl/NaCl/crypto_secretbox/xsalsa20poly1305/ref/box.c +35 -0
- data/ext/ruby_nacl/NaCl/crypto_secretbox/xsalsa20poly1305/selected +0 -0
- data/ext/ruby_nacl/NaCl/crypto_secretbox/xsalsa20poly1305/used +0 -0
- data/ext/ruby_nacl/NaCl/crypto_sign/edwards25519sha512batch/ref/api.h +3 -0
- data/ext/ruby_nacl/NaCl/crypto_sign/edwards25519sha512batch/ref/fe25519.c +345 -0
- data/ext/ruby_nacl/NaCl/crypto_sign/edwards25519sha512batch/ref/fe25519.h +54 -0
- data/ext/ruby_nacl/NaCl/crypto_sign/edwards25519sha512batch/ref/ge25519.c +227 -0
- data/ext/ruby_nacl/NaCl/crypto_sign/edwards25519sha512batch/ref/ge25519.h +34 -0
- data/ext/ruby_nacl/NaCl/crypto_sign/edwards25519sha512batch/ref/sc25519.c +146 -0
- data/ext/ruby_nacl/NaCl/crypto_sign/edwards25519sha512batch/ref/sc25519.h +51 -0
- data/ext/ruby_nacl/NaCl/crypto_sign/edwards25519sha512batch/ref/sign.c +103 -0
- data/ext/ruby_nacl/NaCl/crypto_sign/edwards25519sha512batch/selected +0 -0
- data/ext/ruby_nacl/NaCl/crypto_sign/edwards25519sha512batch/used +0 -0
- data/ext/ruby_nacl/NaCl/crypto_sign/measure.c +83 -0
- data/ext/ruby_nacl/NaCl/crypto_sign/try.c +86 -0
- data/ext/ruby_nacl/NaCl/crypto_sign/wrapper-keypair.cpp +12 -0
- data/ext/ruby_nacl/NaCl/crypto_sign/wrapper-sign-open.cpp +24 -0
- data/ext/ruby_nacl/NaCl/crypto_sign/wrapper-sign.cpp +23 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/checksum +1 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/core2/afternm.s +12308 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/core2/api.h +3 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/core2/beforenm.s +13694 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/core2/stream.c +14 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/core2/xor.c +15 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/core2/xor_afternm.s +12407 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/portable/afternm.c +158 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/portable/api.h +3 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/portable/beforenm.c +59 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/portable/common.c +64 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/portable/common.h +788 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/portable/consts.c +14 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/portable/consts.h +28 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/portable/int128.c +128 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/portable/int128.h +47 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/portable/stream.c +28 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/portable/types.h +10 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/portable/xor_afternm.c +180 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/aes128ctr/used +0 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/measure.c +73 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa20/amd64_xmm6/api.h +2 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa20/amd64_xmm6/implementors +1 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa20/amd64_xmm6/stream.s +4823 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa20/checksum +1 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa20/ref/api.h +2 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa20/ref/implementors +1 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa20/ref/stream.c +49 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa20/ref/xor.c +52 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa20/used +0 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa20/x86_xmm5/api.h +2 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa20/x86_xmm5/implementors +1 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa20/x86_xmm5/stream.s +5078 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa2012/amd64_xmm6/api.h +2 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa2012/amd64_xmm6/implementors +1 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa2012/amd64_xmm6/stream.s +4823 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa2012/checksum +1 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa2012/ref/api.h +2 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa2012/ref/implementors +1 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa2012/ref/stream.c +49 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa2012/ref/xor.c +52 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa2012/used +0 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa2012/x86_xmm5/api.h +2 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa2012/x86_xmm5/implementors +1 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa2012/x86_xmm5/stream.s +5078 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa208/amd64_xmm6/api.h +2 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa208/amd64_xmm6/implementors +1 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa208/amd64_xmm6/stream.s +4823 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa208/checksum +1 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa208/ref/api.h +2 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa208/ref/implementors +1 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa208/ref/stream.c +49 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa208/ref/xor.c +52 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa208/used +0 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa208/x86_xmm5/api.h +2 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa208/x86_xmm5/implementors +1 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/salsa208/x86_xmm5/stream.s +5078 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/try.c +124 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/wrapper-stream.cpp +12 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/wrapper-xor.cpp +17 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/xsalsa20/checksum +1 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/xsalsa20/ref/api.h +2 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/xsalsa20/ref/implementors +1 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/xsalsa20/ref/stream.c +22 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/xsalsa20/ref/xor.c +23 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/xsalsa20/selected +0 -0
- data/ext/ruby_nacl/NaCl/crypto_stream/xsalsa20/used +0 -0
- data/ext/ruby_nacl/NaCl/crypto_stream.h +18 -0
- data/ext/ruby_nacl/NaCl/crypto_stream_aes128ctr.h +33 -0
- data/ext/ruby_nacl/NaCl/crypto_verify/16/checksum +1 -0
- data/ext/ruby_nacl/NaCl/crypto_verify/16/ref/api.h +1 -0
- data/ext/ruby_nacl/NaCl/crypto_verify/16/ref/verify.c +24 -0
- data/ext/ruby_nacl/NaCl/crypto_verify/16/used +0 -0
- data/ext/ruby_nacl/NaCl/crypto_verify/32/checksum +1 -0
- data/ext/ruby_nacl/NaCl/crypto_verify/32/ref/api.h +1 -0
- data/ext/ruby_nacl/NaCl/crypto_verify/32/ref/verify.c +40 -0
- data/ext/ruby_nacl/NaCl/crypto_verify/32/used +0 -0
- data/ext/ruby_nacl/NaCl/crypto_verify/measure.c +18 -0
- data/ext/ruby_nacl/NaCl/crypto_verify/try.c +75 -0
- data/ext/ruby_nacl/NaCl/crypto_verify/wrapper-empty.cpp +0 -0
- data/ext/ruby_nacl/NaCl/curvecp/LIBS +31 -0
- data/ext/ruby_nacl/NaCl/curvecp/README +10 -0
- data/ext/ruby_nacl/NaCl/curvecp/SOURCES +36 -0
- data/ext/ruby_nacl/NaCl/curvecp/TARGETS +5 -0
- data/ext/ruby_nacl/NaCl/curvecp/blocking.c +12 -0
- data/ext/ruby_nacl/NaCl/curvecp/blocking.h +7 -0
- data/ext/ruby_nacl/NaCl/curvecp/byte.h +8 -0
- data/ext/ruby_nacl/NaCl/curvecp/byte_copy.c +8 -0
- data/ext/ruby_nacl/NaCl/curvecp/byte_isequal.c +10 -0
- data/ext/ruby_nacl/NaCl/curvecp/byte_zero.c +7 -0
- data/ext/ruby_nacl/NaCl/curvecp/crypto_block.c +35 -0
- data/ext/ruby_nacl/NaCl/curvecp/crypto_block.h +4 -0
- data/ext/ruby_nacl/NaCl/curvecp/curvecpclient.c +476 -0
- data/ext/ruby_nacl/NaCl/curvecp/curvecpmakekey.c +57 -0
- data/ext/ruby_nacl/NaCl/curvecp/curvecpmessage.c +654 -0
- data/ext/ruby_nacl/NaCl/curvecp/curvecpprintkey.c +46 -0
- data/ext/ruby_nacl/NaCl/curvecp/curvecpserver.c +497 -0
- data/ext/ruby_nacl/NaCl/curvecp/die.c +42 -0
- data/ext/ruby_nacl/NaCl/curvecp/die.h +16 -0
- data/ext/ruby_nacl/NaCl/curvecp/e.c +106 -0
- data/ext/ruby_nacl/NaCl/curvecp/e.h +438 -0
- data/ext/ruby_nacl/NaCl/curvecp/hexparse.c +25 -0
- data/ext/ruby_nacl/NaCl/curvecp/hexparse.h +6 -0
- data/ext/ruby_nacl/NaCl/curvecp/load.c +33 -0
- data/ext/ruby_nacl/NaCl/curvecp/load.h +6 -0
- data/ext/ruby_nacl/NaCl/curvecp/nameparse.c +19 -0
- data/ext/ruby_nacl/NaCl/curvecp/nameparse.h +6 -0
- data/ext/ruby_nacl/NaCl/curvecp/nanoseconds.c +27 -0
- data/ext/ruby_nacl/NaCl/curvecp/nanoseconds.h +6 -0
- data/ext/ruby_nacl/NaCl/curvecp/open.h +10 -0
- data/ext/ruby_nacl/NaCl/curvecp/open_cwd.c +6 -0
- data/ext/ruby_nacl/NaCl/curvecp/open_lock.c +19 -0
- data/ext/ruby_nacl/NaCl/curvecp/open_pipe.c +15 -0
- data/ext/ruby_nacl/NaCl/curvecp/open_read.c +17 -0
- data/ext/ruby_nacl/NaCl/curvecp/open_write.c +17 -0
- data/ext/ruby_nacl/NaCl/curvecp/portparse.c +14 -0
- data/ext/ruby_nacl/NaCl/curvecp/portparse.h +6 -0
- data/ext/ruby_nacl/NaCl/curvecp/randommod.c +14 -0
- data/ext/ruby_nacl/NaCl/curvecp/randommod.h +6 -0
- data/ext/ruby_nacl/NaCl/curvecp/safenonce.c +74 -0
- data/ext/ruby_nacl/NaCl/curvecp/safenonce.h +6 -0
- data/ext/ruby_nacl/NaCl/curvecp/savesync.c +24 -0
- data/ext/ruby_nacl/NaCl/curvecp/savesync.h +6 -0
- data/ext/ruby_nacl/NaCl/curvecp/socket.h +9 -0
- data/ext/ruby_nacl/NaCl/curvecp/socket_bind.c +15 -0
- data/ext/ruby_nacl/NaCl/curvecp/socket_recv.c +23 -0
- data/ext/ruby_nacl/NaCl/curvecp/socket_send.c +19 -0
- data/ext/ruby_nacl/NaCl/curvecp/socket_udp.c +36 -0
- data/ext/ruby_nacl/NaCl/curvecp/uint16_pack.c +7 -0
- data/ext/ruby_nacl/NaCl/curvecp/uint16_pack.h +8 -0
- data/ext/ruby_nacl/NaCl/curvecp/uint16_unpack.c +9 -0
- data/ext/ruby_nacl/NaCl/curvecp/uint16_unpack.h +8 -0
- data/ext/ruby_nacl/NaCl/curvecp/uint32_pack.c +9 -0
- data/ext/ruby_nacl/NaCl/curvecp/uint32_pack.h +8 -0
- data/ext/ruby_nacl/NaCl/curvecp/uint32_unpack.c +11 -0
- data/ext/ruby_nacl/NaCl/curvecp/uint32_unpack.h +8 -0
- data/ext/ruby_nacl/NaCl/curvecp/uint64_pack.c +13 -0
- data/ext/ruby_nacl/NaCl/curvecp/uint64_pack.h +8 -0
- data/ext/ruby_nacl/NaCl/curvecp/uint64_unpack.c +15 -0
- data/ext/ruby_nacl/NaCl/curvecp/uint64_unpack.h +8 -0
- data/ext/ruby_nacl/NaCl/curvecp/writeall.c +27 -0
- data/ext/ruby_nacl/NaCl/curvecp/writeall.h +6 -0
- data/ext/ruby_nacl/NaCl/do +468 -0
- data/ext/ruby_nacl/NaCl/inttypes/crypto_int16.c +3 -0
- data/ext/ruby_nacl/NaCl/inttypes/crypto_int32.c +3 -0
- data/ext/ruby_nacl/NaCl/inttypes/crypto_int64.c +3 -0
- data/ext/ruby_nacl/NaCl/inttypes/crypto_int8.c +3 -0
- data/ext/ruby_nacl/NaCl/inttypes/crypto_uint16.c +3 -0
- data/ext/ruby_nacl/NaCl/inttypes/crypto_uint32.c +3 -0
- data/ext/ruby_nacl/NaCl/inttypes/crypto_uint64.c +3 -0
- data/ext/ruby_nacl/NaCl/inttypes/crypto_uint8.c +3 -0
- data/ext/ruby_nacl/NaCl/inttypes/do +47 -0
- data/ext/ruby_nacl/NaCl/inttypes/signed.h +17 -0
- data/ext/ruby_nacl/NaCl/inttypes/unsigned.h +17 -0
- data/ext/ruby_nacl/NaCl/measure-anything.c +225 -0
- data/ext/ruby_nacl/NaCl/okcompilers/abiname.c +45 -0
- data/ext/ruby_nacl/NaCl/okcompilers/archivers +2 -0
- data/ext/ruby_nacl/NaCl/okcompilers/c +8 -0
- data/ext/ruby_nacl/NaCl/okcompilers/cpp +8 -0
- data/ext/ruby_nacl/NaCl/okcompilers/do +196 -0
- data/ext/ruby_nacl/NaCl/okcompilers/lib.c +29 -0
- data/ext/ruby_nacl/NaCl/okcompilers/lib.cpp +19 -0
- data/ext/ruby_nacl/NaCl/okcompilers/main.c +25 -0
- data/ext/ruby_nacl/NaCl/okcompilers/main.cpp +22 -0
- data/ext/ruby_nacl/NaCl/randombytes/devurandom.c +34 -0
- data/ext/ruby_nacl/NaCl/randombytes/devurandom.h +24 -0
- data/ext/ruby_nacl/NaCl/randombytes/do +43 -0
- data/ext/ruby_nacl/NaCl/randombytes/test.c +15 -0
- data/ext/ruby_nacl/NaCl/tests/auth.c +19 -0
- data/ext/ruby_nacl/NaCl/tests/auth.out +4 -0
- data/ext/ruby_nacl/NaCl/tests/auth2.c +34 -0
- data/ext/ruby_nacl/NaCl/tests/auth2.out +4 -0
- data/ext/ruby_nacl/NaCl/tests/auth3.c +34 -0
- data/ext/ruby_nacl/NaCl/tests/auth3.out +1 -0
- data/ext/ruby_nacl/NaCl/tests/auth4.cpp +44 -0
- data/ext/ruby_nacl/NaCl/tests/auth4.out +1 -0
- data/ext/ruby_nacl/NaCl/tests/auth5.c +36 -0
- data/ext/ruby_nacl/NaCl/tests/auth5.out +0 -0
- data/ext/ruby_nacl/NaCl/tests/auth6.cpp +46 -0
- data/ext/ruby_nacl/NaCl/tests/auth6.out +0 -0
- data/ext/ruby_nacl/NaCl/tests/box.c +63 -0
- data/ext/ruby_nacl/NaCl/tests/box.out +19 -0
- data/ext/ruby_nacl/NaCl/tests/box2.c +64 -0
- data/ext/ruby_nacl/NaCl/tests/box2.out +17 -0
- data/ext/ruby_nacl/NaCl/tests/box3.cpp +60 -0
- data/ext/ruby_nacl/NaCl/tests/box3.out +19 -0
- data/ext/ruby_nacl/NaCl/tests/box4.cpp +66 -0
- data/ext/ruby_nacl/NaCl/tests/box4.out +17 -0
- data/ext/ruby_nacl/NaCl/tests/box5.cpp +30 -0
- data/ext/ruby_nacl/NaCl/tests/box5.out +0 -0
- data/ext/ruby_nacl/NaCl/tests/box6.cpp +43 -0
- data/ext/ruby_nacl/NaCl/tests/box6.out +0 -0
- data/ext/ruby_nacl/NaCl/tests/box7.c +36 -0
- data/ext/ruby_nacl/NaCl/tests/box7.out +0 -0
- data/ext/ruby_nacl/NaCl/tests/box8.c +41 -0
- data/ext/ruby_nacl/NaCl/tests/box8.out +0 -0
- data/ext/ruby_nacl/NaCl/tests/core1.c +30 -0
- data/ext/ruby_nacl/NaCl/tests/core1.out +4 -0
- data/ext/ruby_nacl/NaCl/tests/core2.c +33 -0
- data/ext/ruby_nacl/NaCl/tests/core2.out +4 -0
- data/ext/ruby_nacl/NaCl/tests/core3.c +41 -0
- data/ext/ruby_nacl/NaCl/tests/core3.out +1 -0
- data/ext/ruby_nacl/NaCl/tests/core4.c +33 -0
- data/ext/ruby_nacl/NaCl/tests/core4.out +8 -0
- data/ext/ruby_nacl/NaCl/tests/core5.c +32 -0
- data/ext/ruby_nacl/NaCl/tests/core5.out +4 -0
- data/ext/ruby_nacl/NaCl/tests/core6.c +47 -0
- data/ext/ruby_nacl/NaCl/tests/core6.out +4 -0
- data/ext/ruby_nacl/NaCl/tests/hash.c +14 -0
- data/ext/ruby_nacl/NaCl/tests/hash.out +1 -0
- data/ext/ruby_nacl/NaCl/tests/hash2.cpp +18 -0
- data/ext/ruby_nacl/NaCl/tests/hash2.out +1 -0
- data/ext/ruby_nacl/NaCl/tests/hash3.c +14 -0
- data/ext/ruby_nacl/NaCl/tests/hash3.out +1 -0
- data/ext/ruby_nacl/NaCl/tests/hash4.cpp +18 -0
- data/ext/ruby_nacl/NaCl/tests/hash4.out +1 -0
- data/ext/ruby_nacl/NaCl/tests/onetimeauth.c +42 -0
- data/ext/ruby_nacl/NaCl/tests/onetimeauth.out +2 -0
- data/ext/ruby_nacl/NaCl/tests/onetimeauth2.c +40 -0
- data/ext/ruby_nacl/NaCl/tests/onetimeauth2.out +1 -0
- data/ext/ruby_nacl/NaCl/tests/onetimeauth5.cpp +46 -0
- data/ext/ruby_nacl/NaCl/tests/onetimeauth5.out +2 -0
- data/ext/ruby_nacl/NaCl/tests/onetimeauth6.cpp +50 -0
- data/ext/ruby_nacl/NaCl/tests/onetimeauth6.out +1 -0
- data/ext/ruby_nacl/NaCl/tests/onetimeauth7.c +36 -0
- data/ext/ruby_nacl/NaCl/tests/onetimeauth7.out +0 -0
- data/ext/ruby_nacl/NaCl/tests/onetimeauth8.cpp +46 -0
- data/ext/ruby_nacl/NaCl/tests/onetimeauth8.out +0 -0
- data/ext/ruby_nacl/NaCl/tests/scalarmult.c +23 -0
- data/ext/ruby_nacl/NaCl/tests/scalarmult.out +4 -0
- data/ext/ruby_nacl/NaCl/tests/scalarmult2.c +23 -0
- data/ext/ruby_nacl/NaCl/tests/scalarmult2.out +4 -0
- data/ext/ruby_nacl/NaCl/tests/scalarmult3.cpp +31 -0
- data/ext/ruby_nacl/NaCl/tests/scalarmult3.out +4 -0
- data/ext/ruby_nacl/NaCl/tests/scalarmult4.cpp +31 -0
- data/ext/ruby_nacl/NaCl/tests/scalarmult4.out +4 -0
- data/ext/ruby_nacl/NaCl/tests/scalarmult5.c +30 -0
- data/ext/ruby_nacl/NaCl/tests/scalarmult5.out +4 -0
- data/ext/ruby_nacl/NaCl/tests/scalarmult6.c +30 -0
- data/ext/ruby_nacl/NaCl/tests/scalarmult6.out +4 -0
- data/ext/ruby_nacl/NaCl/tests/scalarmult7.cpp +32 -0
- data/ext/ruby_nacl/NaCl/tests/scalarmult7.out +4 -0
- data/ext/ruby_nacl/NaCl/tests/secretbox.c +56 -0
- data/ext/ruby_nacl/NaCl/tests/secretbox.out +19 -0
- data/ext/ruby_nacl/NaCl/tests/secretbox2.c +57 -0
- data/ext/ruby_nacl/NaCl/tests/secretbox2.out +17 -0
- data/ext/ruby_nacl/NaCl/tests/secretbox3.cpp +52 -0
- data/ext/ruby_nacl/NaCl/tests/secretbox3.out +19 -0
- data/ext/ruby_nacl/NaCl/tests/secretbox4.cpp +54 -0
- data/ext/ruby_nacl/NaCl/tests/secretbox4.out +17 -0
- data/ext/ruby_nacl/NaCl/tests/secretbox5.cpp +29 -0
- data/ext/ruby_nacl/NaCl/tests/secretbox5.out +0 -0
- data/ext/ruby_nacl/NaCl/tests/secretbox6.cpp +42 -0
- data/ext/ruby_nacl/NaCl/tests/secretbox6.out +0 -0
- data/ext/ruby_nacl/NaCl/tests/secretbox7.c +32 -0
- data/ext/ruby_nacl/NaCl/tests/secretbox7.out +0 -0
- data/ext/ruby_nacl/NaCl/tests/secretbox8.c +37 -0
- data/ext/ruby_nacl/NaCl/tests/secretbox8.out +0 -0
- data/ext/ruby_nacl/NaCl/tests/stream.c +29 -0
- data/ext/ruby_nacl/NaCl/tests/stream.out +1 -0
- data/ext/ruby_nacl/NaCl/tests/stream2.c +27 -0
- data/ext/ruby_nacl/NaCl/tests/stream2.out +1 -0
- data/ext/ruby_nacl/NaCl/tests/stream3.c +28 -0
- data/ext/ruby_nacl/NaCl/tests/stream3.out +4 -0
- data/ext/ruby_nacl/NaCl/tests/stream4.c +53 -0
- data/ext/ruby_nacl/NaCl/tests/stream4.out +17 -0
- data/ext/ruby_nacl/NaCl/tests/stream5.cpp +29 -0
- data/ext/ruby_nacl/NaCl/tests/stream5.out +1 -0
- data/ext/ruby_nacl/NaCl/tests/stream6.cpp +27 -0
- data/ext/ruby_nacl/NaCl/tests/stream6.out +1 -0
- data/ext/ruby_nacl/NaCl/tests/stream7.cpp +30 -0
- data/ext/ruby_nacl/NaCl/tests/stream7.out +4 -0
- data/ext/ruby_nacl/NaCl/tests/stream8.cpp +56 -0
- data/ext/ruby_nacl/NaCl/tests/stream8.out +17 -0
- data/ext/ruby_nacl/NaCl/try-anything.c +173 -0
- data/ext/ruby_nacl/NaCl/version +1 -0
- data/ext/ruby_nacl/extconf.rb +18 -0
- data/ext/ruby_nacl/ruby_nacl.cpp +147 -0
- data/ext/ruby_nacl/ruby_nacl.h +49 -0
- metadata +554 -0
@@ -0,0 +1,654 @@
|
|
1
|
+
#include <sys/types.h>
|
2
|
+
#include <sys/wait.h>
|
3
|
+
#include <unistd.h>
|
4
|
+
#include <signal.h>
|
5
|
+
#include <poll.h>
|
6
|
+
#include "open.h"
|
7
|
+
#include "blocking.h"
|
8
|
+
#include "e.h"
|
9
|
+
#include "die.h"
|
10
|
+
#include "randommod.h"
|
11
|
+
#include "byte.h"
|
12
|
+
#include "crypto_uint32.h"
|
13
|
+
#include "uint16_pack.h"
|
14
|
+
#include "uint32_pack.h"
|
15
|
+
#include "uint64_pack.h"
|
16
|
+
#include "uint16_unpack.h"
|
17
|
+
#include "uint32_unpack.h"
|
18
|
+
#include "uint64_unpack.h"
|
19
|
+
#include "nanoseconds.h"
|
20
|
+
#include "writeall.h"
|
21
|
+
|
22
|
+
int flagverbose = 1;
|
23
|
+
int flagserver = 1;
|
24
|
+
int wantping = 0; /* 1: ping after a second; 2: ping immediately */
|
25
|
+
|
26
|
+
#define USAGE "\
|
27
|
+
curvecpmessage: how to use:\n\
|
28
|
+
curvecpmessage: -q (optional): no error messages\n\
|
29
|
+
curvecpmessage: -Q (optional): print error messages (default)\n\
|
30
|
+
curvecpmessage: -v (optional): print extra information\n\
|
31
|
+
curvecpmessage: -c (optional): program is a client; server starts first\n\
|
32
|
+
curvecpmessage: -C (optional): program is a client that starts first\n\
|
33
|
+
curvecpmessage: -s (optional): program is a server (default)\n\
|
34
|
+
curvecpmessage: prog: run this program\n\
|
35
|
+
"
|
36
|
+
|
37
|
+
void die_usage(const char *s)
|
38
|
+
{
|
39
|
+
if (s) die_4(100,USAGE,"curvecpmessage: fatal: ",s,"\n");
|
40
|
+
die_1(100,USAGE);
|
41
|
+
}
|
42
|
+
|
43
|
+
void die_fatal(const char *trouble,const char *d,const char *fn)
|
44
|
+
{
|
45
|
+
if (!flagverbose) die_0(111);
|
46
|
+
if (d) {
|
47
|
+
if (fn) die_9(111,"curvecpmessage: fatal: ",trouble," ",d,"/",fn,": ",e_str(errno),"\n");
|
48
|
+
die_7(111,"curvecpmessage: fatal: ",trouble," ",d,": ",e_str(errno),"\n");
|
49
|
+
}
|
50
|
+
if (errno) die_5(111,"curvecpmessage: fatal: ",trouble,": ",e_str(errno),"\n");
|
51
|
+
die_3(111,"curvecpmessage: fatal: ",trouble,"\n");
|
52
|
+
}
|
53
|
+
|
54
|
+
void die_badmessage(void)
|
55
|
+
{
|
56
|
+
errno = EPROTO;
|
57
|
+
die_fatal("unable to read from file descriptor 8",0,0);
|
58
|
+
}
|
59
|
+
|
60
|
+
void die_internalerror(void)
|
61
|
+
{
|
62
|
+
errno = EPROTO;
|
63
|
+
die_fatal("internal error",0,0);
|
64
|
+
}
|
65
|
+
|
66
|
+
|
67
|
+
int tochild[2] = {-1,-1};
|
68
|
+
int fromchild[2] = {-1,-1};
|
69
|
+
pid_t child = -1;
|
70
|
+
int childstatus;
|
71
|
+
|
72
|
+
struct pollfd p[3];
|
73
|
+
|
74
|
+
long long sendacked = 0; /* number of initial bytes sent and fully acknowledged */
|
75
|
+
long long sendbytes = 0; /* number of additional bytes to send */
|
76
|
+
unsigned char sendbuf[131072]; /* circular queue with the additional bytes; size must be power of 2 */
|
77
|
+
long long sendprocessed = 0; /* within sendbytes, number of bytes absorbed into blocks */
|
78
|
+
|
79
|
+
crypto_uint16 sendeof = 0; /* 2048 for normal eof after sendbytes, 4096 for error after sendbytes */
|
80
|
+
int sendeofprocessed = 0;
|
81
|
+
int sendeofacked = 0;
|
82
|
+
|
83
|
+
long long totalblocktransmissions = 0;
|
84
|
+
long long totalblocks = 0;
|
85
|
+
|
86
|
+
#define OUTGOING 128 /* must be power of 2 */
|
87
|
+
long long blocknum = 0; /* number of outgoing blocks being tracked */
|
88
|
+
long long blockfirst = 0; /* circular queue */
|
89
|
+
long long blockpos[OUTGOING]; /* position of block's first byte within stream */
|
90
|
+
long long blocklen[OUTGOING]; /* number of bytes in this block */
|
91
|
+
crypto_uint16 blockeof[OUTGOING]; /* 0, 2048, 4096 */
|
92
|
+
long long blocktransmissions[OUTGOING];
|
93
|
+
long long blocktime[OUTGOING]; /* time of last message sending this block; 0 means acked */
|
94
|
+
long long earliestblocktime = 0; /* if nonzero, minimum of active blocktime values */
|
95
|
+
crypto_uint32 blockid[OUTGOING]; /* ID of last message sending this block */
|
96
|
+
|
97
|
+
#define INCOMING 64 /* must be power of 2 */
|
98
|
+
long long messagenum = 0; /* number of messages in incoming queue */
|
99
|
+
long long messagefirst = 0; /* position of first message; circular queue */
|
100
|
+
unsigned char messagelen[INCOMING]; /* times 16 */
|
101
|
+
unsigned char message[INCOMING][1088];
|
102
|
+
unsigned char messagetodo[2048];
|
103
|
+
long long messagetodolen = 0;
|
104
|
+
|
105
|
+
long long receivebytes = 0; /* number of initial bytes fully received */
|
106
|
+
long long receivewritten = 0; /* within receivebytes, number of bytes given to child */
|
107
|
+
crypto_uint16 receiveeof = 0; /* 0, 2048, 4096 */
|
108
|
+
long long receivetotalbytes = 0; /* total number of bytes in stream, if receiveeof */
|
109
|
+
unsigned char receivebuf[131072]; /* circular queue beyond receivewritten; size must be power of 2 */
|
110
|
+
unsigned char receivevalid[131072]; /* 1 for byte successfully received; XXX: use buddy structure to speed this up */
|
111
|
+
|
112
|
+
long long maxblocklen = 512;
|
113
|
+
crypto_uint32 nextmessageid = 1;
|
114
|
+
|
115
|
+
unsigned char buf[4096];
|
116
|
+
|
117
|
+
long long lastblocktime = 0;
|
118
|
+
long long nsecperblock = 1000000000;
|
119
|
+
long long lastspeedadjustment = 0;
|
120
|
+
long long lastedge = 0;
|
121
|
+
long long lastdoubling = 0;
|
122
|
+
|
123
|
+
long long rtt;
|
124
|
+
long long rtt_delta;
|
125
|
+
long long rtt_average = 0;
|
126
|
+
long long rtt_deviation = 0;
|
127
|
+
long long rtt_lowwater = 0;
|
128
|
+
long long rtt_highwater = 0;
|
129
|
+
long long rtt_timeout = 1000000000;
|
130
|
+
long long rtt_seenrecenthigh = 0;
|
131
|
+
long long rtt_seenrecentlow = 0;
|
132
|
+
long long rtt_seenolderhigh = 0;
|
133
|
+
long long rtt_seenolderlow = 0;
|
134
|
+
long long rtt_phase = 0;
|
135
|
+
|
136
|
+
long long lastpanic = 0;
|
137
|
+
|
138
|
+
void earliestblocktime_compute(void) /* XXX: use priority queue */
|
139
|
+
{
|
140
|
+
long long i;
|
141
|
+
long long pos;
|
142
|
+
earliestblocktime = 0;
|
143
|
+
for (i = 0;i < blocknum;++i) {
|
144
|
+
pos = (blockfirst + i) & (OUTGOING - 1);
|
145
|
+
if (blocktime[pos]) {
|
146
|
+
if (!earliestblocktime)
|
147
|
+
earliestblocktime = blocktime[pos];
|
148
|
+
else
|
149
|
+
if (blocktime[pos] < earliestblocktime)
|
150
|
+
earliestblocktime = blocktime[pos];
|
151
|
+
}
|
152
|
+
}
|
153
|
+
}
|
154
|
+
|
155
|
+
void acknowledged(unsigned long long start,unsigned long long stop)
|
156
|
+
{
|
157
|
+
long long i;
|
158
|
+
long long pos;
|
159
|
+
if (stop == start) return;
|
160
|
+
for (i = 0;i < blocknum;++i) {
|
161
|
+
pos = (blockfirst + i) & (OUTGOING - 1);
|
162
|
+
if (blockpos[pos] >= start && blockpos[pos] + blocklen[pos] <= stop) {
|
163
|
+
blocktime[pos] = 0;
|
164
|
+
totalblocktransmissions += blocktransmissions[pos];
|
165
|
+
totalblocks += 1;
|
166
|
+
}
|
167
|
+
}
|
168
|
+
while (blocknum) {
|
169
|
+
pos = blockfirst & (OUTGOING - 1);
|
170
|
+
if (blocktime[pos]) break;
|
171
|
+
sendacked += blocklen[pos];
|
172
|
+
sendbytes -= blocklen[pos];
|
173
|
+
sendprocessed -= blocklen[pos];
|
174
|
+
++blockfirst;
|
175
|
+
--blocknum;
|
176
|
+
}
|
177
|
+
if (sendeof)
|
178
|
+
if (start == 0)
|
179
|
+
if (stop > sendacked + sendbytes)
|
180
|
+
if (!sendeofacked) {
|
181
|
+
sendeofacked = 1;
|
182
|
+
}
|
183
|
+
earliestblocktime_compute();
|
184
|
+
}
|
185
|
+
|
186
|
+
int main(int argc,char **argv)
|
187
|
+
{
|
188
|
+
long long pos;
|
189
|
+
long long len;
|
190
|
+
long long u;
|
191
|
+
long long r;
|
192
|
+
long long i;
|
193
|
+
long long k;
|
194
|
+
long long recent;
|
195
|
+
long long nextaction;
|
196
|
+
long long timeout;
|
197
|
+
struct pollfd *q;
|
198
|
+
struct pollfd *watch8;
|
199
|
+
struct pollfd *watchtochild;
|
200
|
+
struct pollfd *watchfromchild;
|
201
|
+
|
202
|
+
signal(SIGPIPE,SIG_IGN);
|
203
|
+
|
204
|
+
if (!argv[0]) die_usage(0);
|
205
|
+
for (;;) {
|
206
|
+
char *x;
|
207
|
+
if (!argv[1]) break;
|
208
|
+
if (argv[1][0] != '-') break;
|
209
|
+
x = *++argv;
|
210
|
+
if (x[0] == '-' && x[1] == 0) break;
|
211
|
+
if (x[0] == '-' && x[1] == '-' && x[2] == 0) break;
|
212
|
+
while (*++x) {
|
213
|
+
if (*x == 'q') { flagverbose = 0; continue; }
|
214
|
+
if (*x == 'Q') { flagverbose = 1; continue; }
|
215
|
+
if (*x == 'v') { if (flagverbose == 2) flagverbose = 3; else flagverbose = 2; continue; }
|
216
|
+
if (*x == 'c') { flagserver = 0; wantping = 2; continue; }
|
217
|
+
if (*x == 'C') { flagserver = 0; wantping = 1; continue; }
|
218
|
+
if (*x == 's') { flagserver = 1; wantping = 0; continue; }
|
219
|
+
die_usage(0);
|
220
|
+
}
|
221
|
+
}
|
222
|
+
if (!*++argv) die_usage("missing prog");
|
223
|
+
|
224
|
+
for (;;) {
|
225
|
+
r = open_read("/dev/null");
|
226
|
+
if (r == -1) die_fatal("unable to open /dev/null",0,0);
|
227
|
+
if (r > 9) { close(r); break; }
|
228
|
+
}
|
229
|
+
|
230
|
+
if (open_pipe(tochild) == -1) die_fatal("unable to create pipe",0,0);
|
231
|
+
if (open_pipe(fromchild) == -1) die_fatal("unable to create pipe",0,0);
|
232
|
+
|
233
|
+
blocking_enable(tochild[0]);
|
234
|
+
blocking_enable(fromchild[1]);
|
235
|
+
|
236
|
+
child = fork();
|
237
|
+
if (child == -1) die_fatal("unable to fork",0,0);
|
238
|
+
if (child == 0) {
|
239
|
+
close(8);
|
240
|
+
close(9);
|
241
|
+
if (flagserver) {
|
242
|
+
close(0);
|
243
|
+
if (dup(tochild[0]) != 0) die_fatal("unable to dup",0,0);
|
244
|
+
close(1);
|
245
|
+
if (dup(fromchild[1]) != 1) die_fatal("unable to dup",0,0);
|
246
|
+
} else {
|
247
|
+
close(6);
|
248
|
+
if (dup(tochild[0]) != 6) die_fatal("unable to dup",0,0);
|
249
|
+
close(7);
|
250
|
+
if (dup(fromchild[1]) != 7) die_fatal("unable to dup",0,0);
|
251
|
+
}
|
252
|
+
signal(SIGPIPE,SIG_DFL);
|
253
|
+
execvp(*argv,argv);
|
254
|
+
die_fatal("unable to run",*argv,0);
|
255
|
+
}
|
256
|
+
|
257
|
+
close(tochild[0]);
|
258
|
+
close(fromchild[1]);
|
259
|
+
|
260
|
+
recent = nanoseconds();
|
261
|
+
lastspeedadjustment = recent;
|
262
|
+
if (flagserver) maxblocklen = 1024;
|
263
|
+
|
264
|
+
for (;;) {
|
265
|
+
if (sendeofacked)
|
266
|
+
if (receivewritten == receivetotalbytes)
|
267
|
+
if (receiveeof)
|
268
|
+
if (tochild[1] < 0)
|
269
|
+
break; /* XXX: to re-ack should enter a TIME-WAIT state here */
|
270
|
+
|
271
|
+
q = p;
|
272
|
+
|
273
|
+
watch8 = q;
|
274
|
+
if (watch8) { q->fd = 8; q->events = POLLIN; ++q; }
|
275
|
+
|
276
|
+
watchtochild = q;
|
277
|
+
if (tochild[1] < 0) watchtochild = 0;
|
278
|
+
if (receivewritten >= receivebytes) watchtochild = 0;
|
279
|
+
if (watchtochild) { q->fd = tochild[1]; q->events = POLLOUT; ++q; }
|
280
|
+
|
281
|
+
watchfromchild = q;
|
282
|
+
if (sendeof) watchfromchild = 0;
|
283
|
+
if (sendbytes + 4096 > sizeof sendbuf) watchfromchild = 0;
|
284
|
+
if (watchfromchild) { q->fd = fromchild[0]; q->events = POLLIN; ++q; }
|
285
|
+
|
286
|
+
nextaction = recent + 60000000000LL;
|
287
|
+
if (wantping == 1) nextaction = recent + 1000000000;
|
288
|
+
if (wantping == 2)
|
289
|
+
if (nextaction > lastblocktime + nsecperblock) nextaction = lastblocktime + nsecperblock;
|
290
|
+
if (blocknum < OUTGOING)
|
291
|
+
if (!(sendeof ? sendeofprocessed : sendprocessed >= sendbytes))
|
292
|
+
if (nextaction > lastblocktime + nsecperblock) nextaction = lastblocktime + nsecperblock;
|
293
|
+
if (earliestblocktime)
|
294
|
+
if (earliestblocktime + rtt_timeout > lastblocktime + nsecperblock)
|
295
|
+
if (earliestblocktime + rtt_timeout < nextaction)
|
296
|
+
nextaction = earliestblocktime + rtt_timeout;
|
297
|
+
|
298
|
+
if (messagenum)
|
299
|
+
if (!watchtochild)
|
300
|
+
nextaction = 0;
|
301
|
+
|
302
|
+
if (nextaction <= recent)
|
303
|
+
timeout = 0;
|
304
|
+
else
|
305
|
+
timeout = (nextaction - recent) / 1000000 + 1;
|
306
|
+
|
307
|
+
if (poll(p,q - p,timeout) < 0) {
|
308
|
+
watch8 = 0;
|
309
|
+
watchtochild = 0;
|
310
|
+
watchfromchild = 0;
|
311
|
+
} else {
|
312
|
+
if (watch8) if (!watch8->revents) watch8 = 0;
|
313
|
+
if (watchtochild) if (!watchtochild->revents) watchtochild = 0;
|
314
|
+
if (watchfromchild) if (!watchfromchild->revents) watchfromchild = 0;
|
315
|
+
}
|
316
|
+
|
317
|
+
/* XXX: keepalives */
|
318
|
+
|
319
|
+
do { /* try receiving data from child: */
|
320
|
+
if (!watchfromchild) break;
|
321
|
+
if (sendeof) break;
|
322
|
+
if (sendbytes + 4096 > sizeof sendbuf) break;
|
323
|
+
|
324
|
+
pos = (sendacked & (sizeof sendbuf - 1)) + sendbytes;
|
325
|
+
if (pos < sizeof sendbuf) {
|
326
|
+
r = read(fromchild[0],sendbuf + pos,sizeof sendbuf - pos);
|
327
|
+
} else {
|
328
|
+
r = read(fromchild[0],sendbuf + pos - sizeof sendbuf,sizeof sendbuf - sendbytes);
|
329
|
+
}
|
330
|
+
if (r == -1) if (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN) break;
|
331
|
+
if (r < 0) { sendeof = 4096; break; }
|
332
|
+
if (r == 0) { sendeof = 2048; break; }
|
333
|
+
sendbytes += r;
|
334
|
+
if (sendbytes >= 1152921504606846976LL) die_internalerror();
|
335
|
+
} while(0);
|
336
|
+
|
337
|
+
recent = nanoseconds();
|
338
|
+
|
339
|
+
do { /* try re-sending an old block: */
|
340
|
+
if (recent < lastblocktime + nsecperblock) break;
|
341
|
+
if (earliestblocktime == 0) break;
|
342
|
+
if (recent < earliestblocktime + rtt_timeout) break;
|
343
|
+
|
344
|
+
for (i = 0;i < blocknum;++i) {
|
345
|
+
pos = (blockfirst + i) & (OUTGOING - 1);
|
346
|
+
if (blocktime[pos] == earliestblocktime) {
|
347
|
+
if (recent > lastpanic + 4 * rtt_timeout) {
|
348
|
+
nsecperblock *= 2;
|
349
|
+
lastpanic = recent;
|
350
|
+
lastedge = recent;
|
351
|
+
}
|
352
|
+
goto sendblock;
|
353
|
+
}
|
354
|
+
}
|
355
|
+
} while(0);
|
356
|
+
|
357
|
+
do { /* try sending a new block: */
|
358
|
+
if (recent < lastblocktime + nsecperblock) break;
|
359
|
+
if (blocknum >= OUTGOING) break;
|
360
|
+
if (!wantping)
|
361
|
+
if (sendeof ? sendeofprocessed : sendprocessed >= sendbytes) break;
|
362
|
+
/* XXX: if any Nagle-type processing is desired, do it here */
|
363
|
+
|
364
|
+
pos = (blockfirst + blocknum) & (OUTGOING - 1);
|
365
|
+
++blocknum;
|
366
|
+
blockpos[pos] = sendacked + sendprocessed;
|
367
|
+
blocklen[pos] = sendbytes - sendprocessed;
|
368
|
+
if (blocklen[pos] > maxblocklen) blocklen[pos] = maxblocklen;
|
369
|
+
if ((blockpos[pos] & (sizeof sendbuf - 1)) + blocklen[pos] > sizeof sendbuf)
|
370
|
+
blocklen[pos] = sizeof sendbuf - (blockpos[pos] & (sizeof sendbuf - 1));
|
371
|
+
/* XXX: or could have the full block in post-buffer space */
|
372
|
+
sendprocessed += blocklen[pos];
|
373
|
+
blockeof[pos] = 0;
|
374
|
+
if (sendprocessed == sendbytes) {
|
375
|
+
blockeof[pos] = sendeof;
|
376
|
+
if (sendeof) sendeofprocessed = 1;
|
377
|
+
}
|
378
|
+
blocktransmissions[pos] = 0;
|
379
|
+
|
380
|
+
sendblock:
|
381
|
+
|
382
|
+
blocktransmissions[pos] += 1;
|
383
|
+
blocktime[pos] = recent;
|
384
|
+
blockid[pos] = nextmessageid;
|
385
|
+
if (!++nextmessageid) ++nextmessageid;
|
386
|
+
|
387
|
+
/* constraints: u multiple of 16; u >= 16; u <= 1088; u >= 48 + blocklen[pos] */
|
388
|
+
u = 64 + blocklen[pos];
|
389
|
+
if (u <= 192) u = 192;
|
390
|
+
else if (u <= 320) u = 320;
|
391
|
+
else if (u <= 576) u = 576;
|
392
|
+
else if (u <= 1088) u = 1088;
|
393
|
+
else die_internalerror();
|
394
|
+
if (blocklen[pos] < 0 || blocklen[pos] > 1024) die_internalerror();
|
395
|
+
|
396
|
+
byte_zero(buf + 8,u);
|
397
|
+
buf[7] = u / 16;
|
398
|
+
uint32_pack(buf + 8,blockid[pos]);
|
399
|
+
/* XXX: include any acknowledgments that have piled up */
|
400
|
+
uint16_pack(buf + 46,blockeof[pos] | (crypto_uint16) blocklen[pos]);
|
401
|
+
uint64_pack(buf + 48,blockpos[pos]);
|
402
|
+
byte_copy(buf + 8 + u - blocklen[pos],blocklen[pos],sendbuf + (blockpos[pos] & (sizeof sendbuf - 1)));
|
403
|
+
|
404
|
+
if (writeall(9,buf + 7,u + 1) == -1) die_fatal("unable to write descriptor 9",0,0);
|
405
|
+
lastblocktime = recent;
|
406
|
+
wantping = 0;
|
407
|
+
|
408
|
+
earliestblocktime_compute();
|
409
|
+
} while(0);
|
410
|
+
|
411
|
+
do { /* try receiving messages: */
|
412
|
+
if (!watch8) break;
|
413
|
+
r = read(8,buf,sizeof buf);
|
414
|
+
if (r == -1) if (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN) break;
|
415
|
+
if (r == 0) die_badmessage();
|
416
|
+
if (r < 0) die_fatal("unable to read from file descriptor 8",0,0);
|
417
|
+
for (k = 0;k < r;++k) {
|
418
|
+
messagetodo[messagetodolen++] = buf[k];
|
419
|
+
u = 16 * (unsigned long long) messagetodo[0];
|
420
|
+
if (u < 16) die_badmessage();
|
421
|
+
if (u > 1088) die_badmessage();
|
422
|
+
if (messagetodolen == 1 + u) {
|
423
|
+
if (messagenum < INCOMING) {
|
424
|
+
pos = (messagefirst + messagenum) & (INCOMING - 1);
|
425
|
+
messagelen[pos] = messagetodo[0];
|
426
|
+
byte_copy(message[pos],u,messagetodo + 1);
|
427
|
+
++messagenum;
|
428
|
+
} else {
|
429
|
+
; /* drop tail */
|
430
|
+
}
|
431
|
+
messagetodolen = 0;
|
432
|
+
}
|
433
|
+
}
|
434
|
+
} while(0);
|
435
|
+
|
436
|
+
do { /* try processing a message: */
|
437
|
+
if (!messagenum) break;
|
438
|
+
if (tochild[1] >= 0 && receivewritten < receivebytes) break;
|
439
|
+
|
440
|
+
maxblocklen = 1024;
|
441
|
+
|
442
|
+
pos = messagefirst & (INCOMING - 1);
|
443
|
+
len = 16 * (unsigned long long) messagelen[pos];
|
444
|
+
do { /* handle this message if it's comprehensible: */
|
445
|
+
unsigned long long D;
|
446
|
+
unsigned long long SF;
|
447
|
+
unsigned long long startbyte;
|
448
|
+
unsigned long long stopbyte;
|
449
|
+
crypto_uint32 id;
|
450
|
+
long long i;
|
451
|
+
|
452
|
+
if (len < 48) break;
|
453
|
+
if (len > 1088) break;
|
454
|
+
|
455
|
+
id = uint32_unpack(message[pos] + 4);
|
456
|
+
for (i = 0;i < blocknum;++i) {
|
457
|
+
k = (blockfirst + i) & (OUTGOING - 1);
|
458
|
+
if (blockid[k] == id) {
|
459
|
+
rtt = recent - blocktime[k];
|
460
|
+
if (!rtt_average) {
|
461
|
+
nsecperblock = rtt;
|
462
|
+
rtt_average = rtt;
|
463
|
+
rtt_deviation = rtt / 2;
|
464
|
+
rtt_highwater = rtt;
|
465
|
+
rtt_lowwater = rtt;
|
466
|
+
}
|
467
|
+
|
468
|
+
/* Jacobson's retransmission timeout calculation: */
|
469
|
+
rtt_delta = rtt - rtt_average;
|
470
|
+
rtt_average += rtt_delta / 8;
|
471
|
+
if (rtt_delta < 0) rtt_delta = -rtt_delta;
|
472
|
+
rtt_delta -= rtt_deviation;
|
473
|
+
rtt_deviation += rtt_delta / 4;
|
474
|
+
rtt_timeout = rtt_average + 4 * rtt_deviation;
|
475
|
+
/* adjust for delayed acks with anti-spiking: */
|
476
|
+
rtt_timeout += 8 * nsecperblock;
|
477
|
+
|
478
|
+
/* recognizing top and bottom of congestion cycle: */
|
479
|
+
rtt_delta = rtt - rtt_highwater;
|
480
|
+
rtt_highwater += rtt_delta / 1024;
|
481
|
+
rtt_delta = rtt - rtt_lowwater;
|
482
|
+
if (rtt_delta > 0) rtt_lowwater += rtt_delta / 8192;
|
483
|
+
else rtt_lowwater += rtt_delta / 256;
|
484
|
+
|
485
|
+
if (rtt_average > rtt_highwater + 5000000) rtt_seenrecenthigh = 1;
|
486
|
+
else if (rtt_average < rtt_lowwater) rtt_seenrecentlow = 1;
|
487
|
+
|
488
|
+
if (recent >= lastspeedadjustment + 16 * nsecperblock) {
|
489
|
+
if (recent - lastspeedadjustment > 10000000000LL) {
|
490
|
+
nsecperblock = 1000000000; /* slow restart */
|
491
|
+
nsecperblock += randommod(nsecperblock / 8);
|
492
|
+
}
|
493
|
+
|
494
|
+
lastspeedadjustment = recent;
|
495
|
+
|
496
|
+
if (nsecperblock >= 131072) {
|
497
|
+
/* additive increase: adjust 1/N by a constant c */
|
498
|
+
/* rtt-fair additive increase: adjust 1/N by a constant c every nanosecond */
|
499
|
+
/* approximation: adjust 1/N by cN every N nanoseconds */
|
500
|
+
/* i.e., N <- 1/(1/N + cN) = N/(1 + cN^2) every N nanoseconds */
|
501
|
+
if (nsecperblock < 16777216) {
|
502
|
+
/* N/(1+cN^2) approx N - cN^3 */
|
503
|
+
u = nsecperblock / 131072;
|
504
|
+
nsecperblock -= u * u * u;
|
505
|
+
} else {
|
506
|
+
double d = nsecperblock;
|
507
|
+
nsecperblock = d/(1 + d*d / 2251799813685248.0);
|
508
|
+
}
|
509
|
+
}
|
510
|
+
|
511
|
+
if (rtt_phase == 0) {
|
512
|
+
if (rtt_seenolderhigh) {
|
513
|
+
rtt_phase = 1;
|
514
|
+
lastedge = recent;
|
515
|
+
nsecperblock += randommod(nsecperblock / 4);
|
516
|
+
}
|
517
|
+
} else {
|
518
|
+
if (rtt_seenolderlow) {
|
519
|
+
rtt_phase = 0;
|
520
|
+
}
|
521
|
+
}
|
522
|
+
|
523
|
+
rtt_seenolderhigh = rtt_seenrecenthigh;
|
524
|
+
rtt_seenolderlow = rtt_seenrecentlow;
|
525
|
+
rtt_seenrecenthigh = 0;
|
526
|
+
rtt_seenrecentlow = 0;
|
527
|
+
}
|
528
|
+
|
529
|
+
do {
|
530
|
+
if (recent - lastedge < 60000000000LL) {
|
531
|
+
if (recent < lastdoubling + 4 * nsecperblock + 64 * rtt_timeout + 5000000000LL) break;
|
532
|
+
} else {
|
533
|
+
if (recent < lastdoubling + 4 * nsecperblock + 2 * rtt_timeout) break;
|
534
|
+
}
|
535
|
+
if (nsecperblock <= 65535) break;
|
536
|
+
|
537
|
+
nsecperblock /= 2;
|
538
|
+
lastdoubling = recent;
|
539
|
+
if (lastedge) lastedge = recent;
|
540
|
+
} while(0);
|
541
|
+
}
|
542
|
+
}
|
543
|
+
|
544
|
+
stopbyte = uint64_unpack(message[pos] + 8);
|
545
|
+
acknowledged(0,stopbyte);
|
546
|
+
startbyte = stopbyte + (unsigned long long) uint32_unpack(message[pos] + 16);
|
547
|
+
stopbyte = startbyte + (unsigned long long) uint16_unpack(message[pos] + 20);
|
548
|
+
acknowledged(startbyte,stopbyte);
|
549
|
+
startbyte = stopbyte + (unsigned long long) uint16_unpack(message[pos] + 22);
|
550
|
+
stopbyte = startbyte + (unsigned long long) uint16_unpack(message[pos] + 24);
|
551
|
+
acknowledged(startbyte,stopbyte);
|
552
|
+
startbyte = stopbyte + (unsigned long long) uint16_unpack(message[pos] + 26);
|
553
|
+
stopbyte = startbyte + (unsigned long long) uint16_unpack(message[pos] + 28);
|
554
|
+
acknowledged(startbyte,stopbyte);
|
555
|
+
startbyte = stopbyte + (unsigned long long) uint16_unpack(message[pos] + 30);
|
556
|
+
stopbyte = startbyte + (unsigned long long) uint16_unpack(message[pos] + 32);
|
557
|
+
acknowledged(startbyte,stopbyte);
|
558
|
+
startbyte = stopbyte + (unsigned long long) uint16_unpack(message[pos] + 34);
|
559
|
+
stopbyte = startbyte + (unsigned long long) uint16_unpack(message[pos] + 36);
|
560
|
+
acknowledged(startbyte,stopbyte);
|
561
|
+
|
562
|
+
D = uint16_unpack(message[pos] + 38);
|
563
|
+
SF = D & (2048 + 4096);
|
564
|
+
D -= SF;
|
565
|
+
if (D > 1024) break;
|
566
|
+
if (48 + D > len) break;
|
567
|
+
|
568
|
+
startbyte = uint64_unpack(message[pos] + 40);
|
569
|
+
stopbyte = startbyte + D;
|
570
|
+
|
571
|
+
if (stopbyte > receivewritten + sizeof receivebuf) {
|
572
|
+
break;
|
573
|
+
/* of course, flow control would avoid this case */
|
574
|
+
}
|
575
|
+
|
576
|
+
if (SF) {
|
577
|
+
receiveeof = SF;
|
578
|
+
receivetotalbytes = stopbyte;
|
579
|
+
}
|
580
|
+
|
581
|
+
for (k = 0;k < D;++k) {
|
582
|
+
unsigned char ch = message[pos][len - D + k];
|
583
|
+
unsigned long long where = startbyte + k;
|
584
|
+
if (where >= receivewritten && where < receivewritten + sizeof receivebuf) {
|
585
|
+
receivevalid[where & (sizeof receivebuf - 1)] = 1;
|
586
|
+
receivebuf[where & (sizeof receivebuf - 1)] = ch;
|
587
|
+
}
|
588
|
+
}
|
589
|
+
for (;;) {
|
590
|
+
if (receivebytes >= receivewritten + sizeof receivebuf) break;
|
591
|
+
if (!receivevalid[receivebytes & (sizeof receivebuf - 1)]) break;
|
592
|
+
++receivebytes;
|
593
|
+
}
|
594
|
+
|
595
|
+
if (!uint32_unpack(message[pos])) break; /* never acknowledge a pure acknowledgment */
|
596
|
+
|
597
|
+
/* XXX: delay acknowledgments */
|
598
|
+
u = 192;
|
599
|
+
byte_zero(buf + 8,u);
|
600
|
+
buf[7] = u / 16;
|
601
|
+
byte_copy(buf + 12,4,message[pos]);
|
602
|
+
if (receiveeof && receivebytes == receivetotalbytes) {
|
603
|
+
uint64_pack(buf + 16,receivebytes + 1);
|
604
|
+
} else
|
605
|
+
uint64_pack(buf + 16,receivebytes);
|
606
|
+
/* XXX: incorporate selective acknowledgments */
|
607
|
+
|
608
|
+
if (writeall(9,buf + 7,u + 1) == -1) die_fatal("unable to write descriptor 9",0,0);
|
609
|
+
} while(0);
|
610
|
+
|
611
|
+
++messagefirst;
|
612
|
+
--messagenum;
|
613
|
+
} while(0);
|
614
|
+
|
615
|
+
do { /* try sending data to child: */
|
616
|
+
if (!watchtochild) break;
|
617
|
+
if (tochild[1] < 0) { receivewritten = receivebytes; break; }
|
618
|
+
if (receivewritten >= receivebytes) break;
|
619
|
+
|
620
|
+
pos = receivewritten & (sizeof receivebuf - 1);
|
621
|
+
len = receivebytes - receivewritten;
|
622
|
+
if (pos + len > sizeof receivebuf) len = sizeof receivebuf - pos;
|
623
|
+
r = write(tochild[1],receivebuf + pos,len);
|
624
|
+
if (r == -1) if (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN) break;
|
625
|
+
if (r <= 0) {
|
626
|
+
close(tochild[1]);
|
627
|
+
tochild[1] = -1;
|
628
|
+
break;
|
629
|
+
}
|
630
|
+
byte_zero(receivevalid + pos,r);
|
631
|
+
receivewritten += r;
|
632
|
+
} while(0);
|
633
|
+
|
634
|
+
do { /* try closing pipe to child: */
|
635
|
+
if (!receiveeof) break;
|
636
|
+
if (receivewritten < receivetotalbytes) break;
|
637
|
+
if (tochild[1] < 0) break;
|
638
|
+
|
639
|
+
if (receiveeof == 4096)
|
640
|
+
; /* XXX: UNIX doesn't provide a way to signal an error through a pipe */
|
641
|
+
close(tochild[1]);
|
642
|
+
tochild[1] = -1;
|
643
|
+
} while(0);
|
644
|
+
|
645
|
+
}
|
646
|
+
|
647
|
+
|
648
|
+
do {
|
649
|
+
r = waitpid(child,&childstatus,0);
|
650
|
+
} while (r == -1 && errno == EINTR);
|
651
|
+
|
652
|
+
if (!WIFEXITED(childstatus)) { errno = 0; die_fatal("process killed by signal",0,0); }
|
653
|
+
return WEXITSTATUS(childstatus);
|
654
|
+
}
|
@@ -0,0 +1,46 @@
|
|
1
|
+
#include <unistd.h>
|
2
|
+
#include "die.h"
|
3
|
+
#include "e.h"
|
4
|
+
#include "load.h"
|
5
|
+
#include "writeall.h"
|
6
|
+
#include "crypto_box.h"
|
7
|
+
|
8
|
+
unsigned char pk[crypto_box_PUBLICKEYBYTES];
|
9
|
+
unsigned char out[crypto_box_PUBLICKEYBYTES * 2 + 1];
|
10
|
+
|
11
|
+
void die_usage(void)
|
12
|
+
{
|
13
|
+
die_1(111,"curvecpprintkey: usage: curvecpprintkey keydir\n");
|
14
|
+
}
|
15
|
+
|
16
|
+
void die_fatal(const char *trouble,const char *d,const char *fn)
|
17
|
+
{
|
18
|
+
if (d) {
|
19
|
+
if (fn) die_9(111,"curvecpmakekey: fatal: ",trouble," ",d,"/",fn,": ",e_str(errno),"\n");
|
20
|
+
die_7(111,"curvecpmakekey: fatal: ",trouble," ",d,": ",e_str(errno),"\n");
|
21
|
+
}
|
22
|
+
die_5(111,"curvecpmakekey: fatal: ",trouble,": ",e_str(errno),"\n");
|
23
|
+
}
|
24
|
+
|
25
|
+
int main(int argc,char **argv)
|
26
|
+
{
|
27
|
+
char *d;
|
28
|
+
long long j;
|
29
|
+
|
30
|
+
if (!argv[0]) die_usage();
|
31
|
+
if (!argv[1]) die_usage();
|
32
|
+
d = argv[1];
|
33
|
+
|
34
|
+
if (chdir(d) == -1) die_fatal("unable to chdir to directory",d,0);
|
35
|
+
if (load("publickey",pk,sizeof pk) == -1) die_fatal("unable to read",d,"publickey");
|
36
|
+
|
37
|
+
for (j = 0;j < crypto_box_PUBLICKEYBYTES;++j) {
|
38
|
+
out[2 * j + 0] = "0123456789abcdef"[15 & (int) (pk[j] >> 4)];
|
39
|
+
out[2 * j + 1] = "0123456789abcdef"[15 & (int) (pk[j] >> 0)];
|
40
|
+
}
|
41
|
+
out[2 * j] = '\n';
|
42
|
+
|
43
|
+
if (writeall(1,out,sizeof out) == -1) die_fatal("unable to write output",0,0);
|
44
|
+
|
45
|
+
return 0;
|
46
|
+
}
|