rbnacl-libsodium 1.0.11 → 1.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGES.md +4 -0
- data/lib/rbnacl/libsodium/version.rb +1 -1
- data/vendor/libsodium/AUTHORS +45 -33
- data/vendor/libsodium/ChangeLog +63 -2
- data/vendor/libsodium/LICENSE +1 -1
- data/vendor/libsodium/Makefile.am +1 -0
- data/vendor/libsodium/Makefile.in +17 -14
- data/vendor/libsodium/README.markdown +1 -0
- data/vendor/libsodium/THANKS +38 -4
- data/vendor/libsodium/aclocal.m4 +25 -24
- data/vendor/libsodium/autogen.sh +12 -7
- data/vendor/libsodium/autom4te.cache/output.0 +5066 -2281
- data/vendor/libsodium/autom4te.cache/output.1 +1013 -600
- data/vendor/libsodium/autom4te.cache/output.2 +5066 -2281
- data/vendor/libsodium/autom4te.cache/requests +426 -1584
- data/vendor/libsodium/autom4te.cache/traces.0 +2044 -876
- data/vendor/libsodium/autom4te.cache/traces.1 +996 -523
- data/vendor/libsodium/autom4te.cache/traces.2 +1996 -828
- data/vendor/libsodium/build-aux/compile +5 -4
- data/vendor/libsodium/build-aux/config.guess +120 -68
- data/vendor/libsodium/build-aux/config.sub +51 -22
- data/vendor/libsodium/build-aux/depcomp +3 -3
- data/vendor/libsodium/build-aux/install-sh +2 -2
- data/vendor/libsodium/build-aux/missing +3 -3
- data/vendor/libsodium/build-aux/test-driver +3 -3
- data/vendor/libsodium/builds/msvc/properties/Win32.props +4 -1
- data/vendor/libsodium/builds/msvc/properties/x64.props +4 -1
- data/vendor/libsodium/builds/msvc/resource.h +14 -0
- data/vendor/libsodium/builds/msvc/resource.rc +63 -0
- data/vendor/libsodium/builds/msvc/version.h +7 -4
- data/vendor/libsodium/builds/msvc/vs2010/libsodium.import.props +1 -1
- data/vendor/libsodium/builds/msvc/vs2010/libsodium/libsodium.props +10 -5
- data/vendor/libsodium/builds/msvc/vs2010/libsodium/libsodium.vcxproj +182 -139
- data/vendor/libsodium/builds/msvc/vs2010/libsodium/libsodium.vcxproj.filters +632 -470
- data/vendor/libsodium/builds/msvc/vs2012/libsodium.import.props +1 -1
- data/vendor/libsodium/builds/msvc/vs2012/libsodium/libsodium.props +10 -5
- data/vendor/libsodium/builds/msvc/vs2012/libsodium/libsodium.vcxproj +182 -129
- data/vendor/libsodium/builds/msvc/vs2012/libsodium/libsodium.vcxproj.filters +632 -470
- data/vendor/libsodium/builds/msvc/vs2013/libsodium.import.props +1 -1
- data/vendor/libsodium/builds/msvc/vs2013/libsodium/libsodium.props +10 -5
- data/vendor/libsodium/builds/msvc/vs2013/libsodium/libsodium.vcxproj +182 -129
- data/vendor/libsodium/builds/msvc/vs2013/libsodium/libsodium.vcxproj.filters +632 -470
- data/vendor/libsodium/builds/msvc/vs2015/libsodium.import.props +1 -1
- data/vendor/libsodium/builds/msvc/vs2015/libsodium/libsodium.props +10 -5
- data/vendor/libsodium/builds/msvc/vs2015/libsodium/libsodium.vcxproj +181 -118
- data/vendor/libsodium/builds/msvc/vs2015/libsodium/libsodium.vcxproj.filters +632 -470
- data/vendor/libsodium/builds/msvc/vs2017/libsodium.import.props +52 -0
- data/vendor/libsodium/builds/msvc/vs2017/libsodium.import.xml +17 -0
- data/vendor/libsodium/builds/msvc/vs2017/libsodium.sln +52 -0
- data/vendor/libsodium/builds/msvc/vs2017/libsodium/libsodium.props +48 -0
- data/vendor/libsodium/builds/msvc/vs2017/libsodium/libsodium.vcxproj +320 -0
- data/vendor/libsodium/builds/msvc/vs2017/libsodium/libsodium.vcxproj.filters +962 -0
- data/vendor/libsodium/builds/msvc/vs2017/libsodium/libsodium.xml +15 -0
- data/vendor/libsodium/configure +1002 -589
- data/vendor/libsodium/configure.ac +48 -21
- data/vendor/libsodium/contrib/Findsodium.cmake +267 -0
- data/vendor/libsodium/contrib/Makefile.am +3 -0
- data/vendor/libsodium/contrib/Makefile.in +483 -0
- data/vendor/libsodium/dist-build/Makefile.in +11 -7
- data/vendor/libsodium/dist-build/android-armv8-a.sh +1 -1
- data/vendor/libsodium/dist-build/android-build.sh +25 -17
- data/vendor/libsodium/dist-build/android-mips32.sh +1 -1
- data/vendor/libsodium/dist-build/android-mips64.sh +1 -1
- data/vendor/libsodium/dist-build/android-x86_64.sh +1 -1
- data/vendor/libsodium/dist-build/emscripten-symbols.def +150 -2
- data/vendor/libsodium/dist-build/emscripten-wasm.sh +132 -0
- data/vendor/libsodium/dist-build/emscripten.sh +8 -6
- data/vendor/libsodium/dist-build/ios.sh +29 -5
- data/vendor/libsodium/libsodium.vcxproj +139 -77
- data/vendor/libsodium/libsodium.vcxproj.filters +315 -144
- data/vendor/libsodium/m4/ax_check_catchable_segv.m4 +42 -0
- data/vendor/libsodium/m4/ax_check_compile_flag.m4 +6 -4
- data/vendor/libsodium/m4/ax_check_define.m4 +3 -3
- data/vendor/libsodium/m4/ax_check_gnu_make.m4 +31 -25
- data/vendor/libsodium/m4/ax_check_link_flag.m4 +8 -6
- data/vendor/libsodium/m4/ax_pthread.m4 +275 -275
- data/vendor/libsodium/m4/ax_valgrind_check.m4 +92 -41
- data/vendor/libsodium/m4/pkg.m4 +1 -1
- data/vendor/libsodium/msvc-scripts/Makefile.in +11 -7
- data/vendor/libsodium/msvc-scripts/process.bat +4 -3
- data/vendor/libsodium/packaging/dotnet-core/README.md +59 -0
- data/vendor/libsodium/packaging/dotnet-core/desktop.targets +16 -0
- data/vendor/libsodium/packaging/dotnet-core/libsodium.props +33 -0
- data/vendor/libsodium/packaging/dotnet-core/prepare.py +262 -0
- data/vendor/libsodium/packaging/dotnet-core/recipes/alpine-x64 +3 -0
- data/vendor/libsodium/packaging/dotnet-core/recipes/build +9 -0
- data/vendor/libsodium/packaging/dotnet-core/recipes/centos-x64 +3 -0
- data/vendor/libsodium/packaging/dotnet-core/recipes/debian-x64 +4 -0
- data/vendor/libsodium/packaging/dotnet-core/recipes/fedora-x64 +3 -0
- data/vendor/libsodium/packaging/dotnet-core/recipes/opensuse-x64 +3 -0
- data/vendor/libsodium/packaging/dotnet-core/recipes/pack +5 -0
- data/vendor/libsodium/packaging/dotnet-core/recipes/test +27 -0
- data/vendor/libsodium/packaging/dotnet-core/recipes/ubuntu-x64 +4 -0
- data/vendor/libsodium/packaging/nuget/package.config +1 -1
- data/vendor/libsodium/packaging/nuget/package.gsl +3 -3
- data/vendor/libsodium/src/Makefile.in +11 -7
- data/vendor/libsodium/src/libsodium/Makefile.am +113 -98
- data/vendor/libsodium/src/libsodium/Makefile.in +1034 -1236
- data/vendor/libsodium/src/libsodium/crypto_aead/aes256gcm/aesni/aead_aes256gcm_aesni.c +31 -12
- data/vendor/libsodium/src/libsodium/crypto_aead/chacha20poly1305/sodium/aead_chacha20poly1305.c +31 -10
- data/vendor/libsodium/src/libsodium/crypto_aead/xchacha20poly1305/sodium/aead_xchacha20poly1305.c +153 -0
- data/vendor/libsodium/src/libsodium/crypto_auth/crypto_auth.c +7 -0
- data/vendor/libsodium/src/libsodium/crypto_auth/hmacsha256/{cp/hmac_hmacsha256.c → auth_hmacsha256.c} +43 -35
- data/vendor/libsodium/src/libsodium/crypto_auth/hmacsha512/{cp/hmac_hmacsha512.c → auth_hmacsha512.c} +43 -35
- data/vendor/libsodium/src/libsodium/crypto_auth/hmacsha512256/{cp/hmac_hmacsha512256.c → auth_hmacsha512256.c} +48 -9
- data/vendor/libsodium/src/libsodium/crypto_box/crypto_box_easy.c +4 -3
- data/vendor/libsodium/src/libsodium/crypto_box/crypto_box_seal.c +2 -1
- data/vendor/libsodium/src/libsodium/crypto_box/curve25519xchacha20poly1305/box_curve25519xchacha20poly1305.c +197 -0
- data/vendor/libsodium/src/libsodium/crypto_box/curve25519xchacha20poly1305/box_seal_curve25519xchacha20poly1305.c +79 -0
- data/vendor/libsodium/src/libsodium/crypto_box/curve25519xsalsa20poly1305/box_curve25519xsalsa20poly1305.c +150 -0
- data/vendor/libsodium/src/libsodium/crypto_core/curve25519/ref10/curve25519_ref10.c +1156 -662
- data/vendor/libsodium/src/libsodium/crypto_core/hchacha20/core_hchacha20.c +12 -5
- data/vendor/libsodium/src/libsodium/crypto_core/hsalsa20/{core_hsalsa20_api.c → core_hsalsa20.c} +0 -0
- data/vendor/libsodium/src/libsodium/crypto_core/hsalsa20/ref2/core_hsalsa20_ref2.c +95 -0
- data/vendor/libsodium/src/libsodium/crypto_core/salsa/ref/core_salsa_ref.c +195 -0
- data/vendor/libsodium/src/libsodium/crypto_generichash/{blake2/generichash_blake2_api.c → blake2b/generichash_blake2.c} +7 -0
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2.h +109 -0
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-avx2.c +49 -0
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-avx2.h +140 -0
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-ref.c +92 -0
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-sse41.c +87 -0
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-sse41.h +103 -0
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-ssse3.c +90 -0
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-ssse3.h +103 -0
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-load-avx2.h +340 -0
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-load-sse2.h +164 -0
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-load-sse41.h +307 -0
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-ref.c +494 -0
- data/vendor/libsodium/src/libsodium/crypto_generichash/{blake2 → blake2b}/ref/generichash_blake2b.c +22 -26
- data/vendor/libsodium/src/libsodium/crypto_generichash/crypto_generichash.c +7 -0
- data/vendor/libsodium/src/libsodium/crypto_hash/sha256/cp/hash_sha256_cp.c +254 -0
- data/vendor/libsodium/src/libsodium/crypto_hash/sha256/{hash_sha256_api.c → hash_sha256.c} +4 -2
- data/vendor/libsodium/src/libsodium/crypto_hash/sha512/cp/hash_sha512_cp.c +280 -0
- data/vendor/libsodium/src/libsodium/crypto_hash/sha512/{hash_sha512_api.c → hash_sha512.c} +4 -2
- data/vendor/libsodium/src/libsodium/crypto_kdf/blake2b/kdf_blake2b.c +52 -0
- data/vendor/libsodium/src/libsodium/crypto_kdf/crypto_kdf.c +49 -0
- data/vendor/libsodium/src/libsodium/crypto_kx/crypto_kx.c +136 -0
- data/vendor/libsodium/src/libsodium/crypto_onetimeauth/crypto_onetimeauth.c +6 -0
- data/vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna.c +34 -27
- data/vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna.h +1 -1
- data/vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna32.h +203 -156
- data/vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna64.h +178 -134
- data/vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/onetimeauth_poly1305.c +22 -4
- data/vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/onetimeauth_poly1305.h +10 -12
- data/vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/sse2/poly1305_sse2.c +564 -315
- data/vendor/libsodium/src/libsodium/crypto_onetimeauth/poly1305/sse2/poly1305_sse2.h +1 -1
- data/vendor/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-core.c +131 -84
- data/vendor/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-core.h +23 -18
- data/vendor/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-encoding.c +163 -145
- data/vendor/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-encoding.h +2 -1
- data/vendor/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-avx2.c +247 -0
- data/vendor/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-ref.c +42 -29
- data/vendor/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-ssse3.c +71 -47
- data/vendor/libsodium/src/libsodium/crypto_pwhash/argon2/argon2.c +100 -65
- data/vendor/libsodium/src/libsodium/crypto_pwhash/argon2/argon2.h +77 -23
- data/vendor/libsodium/src/libsodium/crypto_pwhash/argon2/blake2b-long.c +30 -31
- data/vendor/libsodium/src/libsodium/crypto_pwhash/argon2/blamka-round-avx2.h +150 -0
- data/vendor/libsodium/src/libsodium/crypto_pwhash/argon2/blamka-round-ref.h +28 -26
- data/vendor/libsodium/src/libsodium/crypto_pwhash/argon2/blamka-round-ssse3.h +102 -99
- data/vendor/libsodium/src/libsodium/crypto_pwhash/argon2/pwhash_argon2i.c +90 -41
- data/vendor/libsodium/src/libsodium/crypto_pwhash/argon2/pwhash_argon2id.c +213 -0
- data/vendor/libsodium/src/libsodium/crypto_pwhash/crypto_pwhash.c +72 -4
- data/vendor/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/crypto_scrypt-common.c +34 -37
- data/vendor/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/crypto_scrypt.h +27 -32
- data/vendor/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/nosse/pwhash_scryptsalsa208sha256_nosse.c +120 -86
- data/vendor/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.c +16 -13
- data/vendor/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.h +4 -4
- data/vendor/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/pwhash_scryptsalsa208sha256.c +98 -50
- data/vendor/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/scrypt_platform.c +23 -18
- data/vendor/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/sse/pwhash_scryptsalsa208sha256_sse.c +105 -105
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/donna_c64/curve25519_donna_c64.c +395 -330
- data/vendor/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/x25519_ref10.c +225 -198
- data/vendor/libsodium/src/libsodium/crypto_secretbox/crypto_secretbox.c +7 -0
- data/vendor/libsodium/src/libsodium/crypto_secretbox/crypto_secretbox_easy.c +6 -5
- data/vendor/libsodium/src/libsodium/crypto_secretbox/xchacha20poly1305/secretbox_xchacha20poly1305.c +170 -0
- data/vendor/libsodium/src/libsodium/crypto_secretbox/xsalsa20poly1305/secretbox_xsalsa20poly1305.c +83 -0
- data/vendor/libsodium/src/libsodium/crypto_shorthash/crypto_shorthash.c +7 -0
- data/vendor/libsodium/src/libsodium/crypto_shorthash/siphash24/ref/shorthash_siphash24_ref.c +65 -0
- data/vendor/libsodium/src/libsodium/crypto_shorthash/siphash24/ref/shorthash_siphash_ref.h +24 -0
- data/vendor/libsodium/src/libsodium/crypto_shorthash/siphash24/ref/shorthash_siphashx24_ref.c +71 -0
- data/vendor/libsodium/src/libsodium/crypto_shorthash/siphash24/{shorthash_siphash24_api.c → shorthash_siphash24.c} +0 -0
- data/vendor/libsodium/src/libsodium/crypto_shorthash/siphash24/shorthash_siphashx24.c +11 -0
- data/vendor/libsodium/src/libsodium/crypto_sign/crypto_sign.c +33 -0
- data/vendor/libsodium/src/libsodium/crypto_sign/ed25519/ref10/ed25519_ref10.h +18 -0
- data/vendor/libsodium/src/libsodium/crypto_sign/ed25519/ref10/keypair.c +18 -13
- data/vendor/libsodium/src/libsodium/crypto_sign/ed25519/ref10/obsolete.c +29 -26
- data/vendor/libsodium/src/libsodium/crypto_sign/ed25519/ref10/open.c +75 -36
- data/vendor/libsodium/src/libsodium/crypto_sign/ed25519/ref10/sign.c +39 -15
- data/vendor/libsodium/src/libsodium/crypto_sign/ed25519/sign_ed25519.c +91 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/aes128ctr/nacl/afternm_aes128ctr.c +174 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/aes128ctr/nacl/beforenm_aes128ctr.c +66 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/aes128ctr/nacl/common.h +766 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/aes128ctr/nacl/consts.h +28 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/aes128ctr/nacl/consts_aes128ctr.c +28 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/aes128ctr/nacl/int128.h +50 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/aes128ctr/nacl/int128_aes128ctr.c +149 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/aes128ctr/nacl/stream_aes128ctr_nacl.c +31 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/aes128ctr/nacl/xor_afternm_aes128ctr.c +195 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/aes128ctr/{stream_aes128ctr_api.c → stream_aes128ctr.c} +6 -3
- data/vendor/libsodium/src/libsodium/crypto_stream/chacha20/dolbeau/chacha20_dolbeau-avx2.c +179 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/chacha20/dolbeau/chacha20_dolbeau-avx2.h +8 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/chacha20/dolbeau/chacha20_dolbeau-ssse3.c +173 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/chacha20/dolbeau/chacha20_dolbeau-ssse3.h +8 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/chacha20/dolbeau/u0.h +86 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/chacha20/dolbeau/u1.h +98 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/chacha20/dolbeau/u4.h +175 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/chacha20/dolbeau/u8.h +357 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/chacha20/ref/{stream_chacha20_ref.c → chacha20_ref.c} +93 -94
- data/vendor/libsodium/src/libsodium/crypto_stream/chacha20/ref/chacha20_ref.h +8 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/chacha20/stream_chacha20.c +39 -7
- data/vendor/libsodium/src/libsodium/crypto_stream/crypto_stream.c +7 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa20/ref/salsa20_ref.c +120 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa20/ref/salsa20_ref.h +8 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa20/stream_salsa20.c +93 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa20/stream_salsa20.h +16 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa20/{amd64_xmm6/stream_salsa20_amd64_xmm6.S → xmm6/salsa20_xmm6-asm.S} +20 -12
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6.c +31 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6.h +8 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa20/xmm6int/salsa20_xmm6int-avx2.c +131 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa20/xmm6int/salsa20_xmm6int-avx2.h +8 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa20/xmm6int/salsa20_xmm6int-sse2.c +122 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa20/xmm6int/salsa20_xmm6int-sse2.h +8 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa20/xmm6int/u0.h +195 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa20/xmm6int/u1.h +207 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa20/xmm6int/u4.h +547 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa20/xmm6int/u8.h +476 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa2012/ref/stream_salsa2012_ref.c +106 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa2012/stream_salsa2012.c +20 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa208/ref/stream_salsa208_ref.c +106 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa208/stream_salsa208.c +20 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/xchacha20/stream_xchacha20.c +63 -0
- data/vendor/libsodium/src/libsodium/crypto_stream/xsalsa20/stream_xsalsa20.c +60 -0
- data/vendor/libsodium/src/libsodium/crypto_verify/sodium/verify.c +61 -0
- data/vendor/libsodium/src/libsodium/include/Makefile.am +8 -6
- data/vendor/libsodium/src/libsodium/include/Makefile.in +29 -21
- data/vendor/libsodium/src/libsodium/include/sodium.h +15 -4
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_aead_aes256gcm.h +4 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_aead_chacha20poly1305.h +6 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_aead_xchacha20poly1305.h +91 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_auth.h +3 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_auth_hmacsha256.h +5 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_auth_hmacsha512.h +4 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_auth_hmacsha512256.h +4 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_box_curve25519xchacha20poly1305.h +153 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_generichash.h +4 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_generichash_blake2b.h +3 -4
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_hash_sha256.h +4 -3
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_hash_sha512.h +4 -3
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_kdf.h +51 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_kdf_blake2b.h +42 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_kx.h +64 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_onetimeauth.h +4 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_onetimeauth_poly1305.h +11 -9
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_pwhash.h +37 -1
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_pwhash_argon2i.h +40 -10
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_pwhash_argon2id.h +116 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_pwhash_scryptsalsa208sha256.h +37 -4
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_scalarmult_curve25519.h +0 -4
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_secretbox.h +3 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_secretbox_xchacha20poly1305.h +62 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_secretbox_xsalsa20poly1305.h +5 -1
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_shorthash.h +3 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_shorthash_siphash24.h +18 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_sign.h +22 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_sign_ed25519.h +28 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_stream.h +3 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_stream_aes128ctr.h +10 -5
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_stream_chacha20.h +14 -3
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_stream_salsa20.h +4 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_stream_salsa2012.h +3 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_stream_salsa208.h +3 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_stream_xchacha20.h +53 -0
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_stream_xsalsa20.h +4 -0
- data/vendor/libsodium/src/libsodium/include/sodium/private/common.h +84 -17
- data/vendor/libsodium/src/libsodium/include/sodium/private/implementations.h +11 -0
- data/vendor/libsodium/src/libsodium/include/sodium/private/sse2_64_32.h +50 -0
- data/vendor/libsodium/src/libsodium/include/sodium/randombytes.h +10 -2
- data/vendor/libsodium/src/libsodium/include/sodium/utils.h +4 -5
- data/vendor/libsodium/src/libsodium/include/sodium/version.h.in +4 -0
- data/vendor/libsodium/src/libsodium/randombytes/randombytes.c +47 -19
- data/vendor/libsodium/src/libsodium/randombytes/salsa20/randombytes_salsa20_random.c +30 -50
- data/vendor/libsodium/src/libsodium/randombytes/sysrandom/randombytes_sysrandom.c +25 -15
- data/vendor/libsodium/src/libsodium/sodium/core.c +25 -23
- data/vendor/libsodium/src/libsodium/sodium/runtime.c +66 -57
- data/vendor/libsodium/src/libsodium/sodium/utils.c +120 -106
- data/vendor/libsodium/src/libsodium/sodium/version.c +10 -0
- data/vendor/libsodium/test/Makefile.in +11 -7
- data/vendor/libsodium/test/default/Makefile.am +65 -5
- data/vendor/libsodium/test/default/Makefile.in +243 -78
- data/vendor/libsodium/test/default/aead_aes256gcm.c +2 -2
- data/vendor/libsodium/test/default/aead_xchacha20poly1305.c +188 -0
- data/vendor/libsodium/test/default/aead_xchacha20poly1305.exp +51 -0
- data/vendor/libsodium/test/default/auth.c +11 -7
- data/vendor/libsodium/test/default/auth2.c +15 -12
- data/vendor/libsodium/test/default/auth3.c +18 -15
- data/vendor/libsodium/test/default/auth5.c +3 -2
- data/vendor/libsodium/test/default/auth6.c +4 -3
- data/vendor/libsodium/test/default/auth7.c +3 -2
- data/vendor/libsodium/test/default/box.c +57 -52
- data/vendor/libsodium/test/default/box2.c +41 -36
- data/vendor/libsodium/test/default/box7.c +4 -3
- data/vendor/libsodium/test/default/box8.c +4 -3
- data/vendor/libsodium/test/default/box_easy.c +36 -32
- data/vendor/libsodium/test/default/box_easy2.c +41 -34
- data/vendor/libsodium/test/default/box_seal.c +7 -6
- data/vendor/libsodium/test/default/box_seed.c +10 -8
- data/vendor/libsodium/test/default/chacha20.c +18 -3
- data/vendor/libsodium/test/default/chacha20.exp +45 -0
- data/vendor/libsodium/test/default/cmptest.h +1 -0
- data/vendor/libsodium/test/default/core1.c +10 -9
- data/vendor/libsodium/test/default/core2.c +13 -12
- data/vendor/libsodium/test/default/core3.c +13 -12
- data/vendor/libsodium/test/default/core4.c +11 -12
- data/vendor/libsodium/test/default/core5.c +13 -12
- data/vendor/libsodium/test/default/core6.c +15 -13
- data/vendor/libsodium/test/default/ed25519_convert.c +12 -9
- data/vendor/libsodium/test/default/hash.c +10 -6
- data/vendor/libsodium/test/default/hash3.c +3 -2
- data/vendor/libsodium/test/default/index-wasm.html.tpl +118 -0
- data/vendor/libsodium/test/default/kdf.c +61 -0
- data/vendor/libsodium/test/default/kdf.exp +77 -0
- data/vendor/libsodium/test/default/keygen.c +64 -0
- data/vendor/libsodium/test/default/keygen.exp +1 -0
- data/vendor/libsodium/test/default/kx.c +119 -0
- data/vendor/libsodium/test/default/kx.exp +7 -0
- data/vendor/libsodium/test/default/nacl-test-wrapper.sh +9 -2
- data/vendor/libsodium/test/default/onetimeauth.c +26 -23
- data/vendor/libsodium/test/default/onetimeauth2.c +22 -20
- data/vendor/libsodium/test/default/onetimeauth7.c +3 -2
- data/vendor/libsodium/test/default/pwhash.c +209 -157
- data/vendor/libsodium/test/default/pwhash_argon2id.c +388 -0
- data/vendor/libsodium/test/default/pwhash_argon2id.exp +15 -0
- data/vendor/libsodium/test/default/pwhash_scrypt.c +232 -224
- data/vendor/libsodium/test/default/pwhash_scrypt.exp +2 -1
- data/vendor/libsodium/test/default/pwhash_scrypt_ll.c +39 -41
- data/vendor/libsodium/test/default/randombytes.c +34 -13
- data/vendor/libsodium/test/default/randombytes.exp +1 -0
- data/vendor/libsodium/test/default/scalarmult.c +21 -18
- data/vendor/libsodium/test/default/scalarmult2.c +8 -6
- data/vendor/libsodium/test/default/scalarmult5.c +13 -10
- data/vendor/libsodium/test/default/scalarmult6.c +17 -14
- data/vendor/libsodium/test/default/scalarmult7.c +9 -10
- data/vendor/libsodium/test/default/secretbox.c +39 -36
- data/vendor/libsodium/test/default/secretbox2.c +28 -25
- data/vendor/libsodium/test/default/secretbox7.c +3 -2
- data/vendor/libsodium/test/default/secretbox8.c +4 -3
- data/vendor/libsodium/test/default/secretbox_easy.c +40 -37
- data/vendor/libsodium/test/default/secretbox_easy2.c +19 -18
- data/vendor/libsodium/test/default/shorthash.c +4 -4
- data/vendor/libsodium/test/default/sign.c +70 -13
- data/vendor/libsodium/test/default/sign.exp +2 -0
- data/vendor/libsodium/test/default/siphashx24.c +33 -0
- data/vendor/libsodium/test/default/siphashx24.exp +64 -0
- data/vendor/libsodium/test/default/sodium_core.c +9 -8
- data/vendor/libsodium/test/default/sodium_utils.c +52 -46
- data/vendor/libsodium/test/default/sodium_utils2.c +17 -8
- data/vendor/libsodium/test/default/sodium_utils3.c +15 -6
- data/vendor/libsodium/test/default/sodium_version.c +7 -1
- data/vendor/libsodium/test/default/stream.c +31 -18
- data/vendor/libsodium/test/default/stream.exp +65 -0
- data/vendor/libsodium/test/default/stream2.c +13 -9
- data/vendor/libsodium/test/default/stream3.c +12 -10
- data/vendor/libsodium/test/default/stream4.c +30 -27
- data/vendor/libsodium/test/default/verify1.c +5 -4
- data/vendor/libsodium/test/default/xchacha20.c +376 -0
- data/vendor/libsodium/test/default/xchacha20.exp +5 -0
- data/vendor/libsodium/test/quirks/quirks.h +4 -3
- metadata +140 -111
- data/vendor/libsodium/autom4te.cache/output.3 +0 -17240
- data/vendor/libsodium/autom4te.cache/output.4 +0 -17517
- data/vendor/libsodium/autom4te.cache/output.5 +0 -18535
- data/vendor/libsodium/autom4te.cache/output.6 +0 -19077
- data/vendor/libsodium/autom4te.cache/output.7 +0 -19837
- data/vendor/libsodium/autom4te.cache/traces.3 +0 -2833
- data/vendor/libsodium/autom4te.cache/traces.4 +0 -2951
- data/vendor/libsodium/autom4te.cache/traces.5 +0 -3042
- data/vendor/libsodium/autom4te.cache/traces.6 +0 -3194
- data/vendor/libsodium/autom4te.cache/traces.7 +0 -3614
- data/vendor/libsodium/builds/msvc/properties/ARM.props +0 -20
- data/vendor/libsodium/compile +0 -347
- data/vendor/libsodium/config.guess +0 -1568
- data/vendor/libsodium/config.sub +0 -1793
- data/vendor/libsodium/depcomp +0 -791
- data/vendor/libsodium/install-sh +0 -527
- data/vendor/libsodium/ltmain.sh +0 -9655
- data/vendor/libsodium/missing +0 -215
- data/vendor/libsodium/src/libsodium/crypto_auth/hmacsha256/auth_hmacsha256_api.c +0 -16
- data/vendor/libsodium/src/libsodium/crypto_auth/hmacsha256/cp/verify_hmacsha256.c +0 -11
- data/vendor/libsodium/src/libsodium/crypto_auth/hmacsha512/auth_hmacsha512_api.c +0 -16
- data/vendor/libsodium/src/libsodium/crypto_auth/hmacsha512/cp/verify_hmacsha512.c +0 -12
- data/vendor/libsodium/src/libsodium/crypto_auth/hmacsha512256/auth_hmacsha512256_api.c +0 -16
- data/vendor/libsodium/src/libsodium/crypto_auth/hmacsha512256/cp/verify_hmacsha512256.c +0 -14
- data/vendor/libsodium/src/libsodium/crypto_box/curve25519xsalsa20poly1305/box_curve25519xsalsa20poly1305_api.c +0 -41
- data/vendor/libsodium/src/libsodium/crypto_box/curve25519xsalsa20poly1305/ref/after_curve25519xsalsa20poly1305.c +0 -22
- data/vendor/libsodium/src/libsodium/crypto_box/curve25519xsalsa20poly1305/ref/before_curve25519xsalsa20poly1305.c +0 -18
- data/vendor/libsodium/src/libsodium/crypto_box/curve25519xsalsa20poly1305/ref/box_curve25519xsalsa20poly1305.c +0 -42
- data/vendor/libsodium/src/libsodium/crypto_box/curve25519xsalsa20poly1305/ref/keypair_curve25519xsalsa20poly1305.c +0 -29
- data/vendor/libsodium/src/libsodium/crypto_core/hchacha20/core_hchacha20.h +0 -28
- data/vendor/libsodium/src/libsodium/crypto_core/hsalsa20/ref2/core_hsalsa20.c +0 -100
- data/vendor/libsodium/src/libsodium/crypto_core/salsa20/core_salsa20_api.c +0 -21
- data/vendor/libsodium/src/libsodium/crypto_core/salsa20/ref/core_salsa20.c +0 -126
- data/vendor/libsodium/src/libsodium/crypto_core/salsa2012/core_salsa2012_api.c +0 -21
- data/vendor/libsodium/src/libsodium/crypto_core/salsa2012/ref/core_salsa2012.c +0 -126
- data/vendor/libsodium/src/libsodium/crypto_core/salsa208/core_salsa208_api.c +0 -21
- data/vendor/libsodium/src/libsodium/crypto_core/salsa208/ref/core_salsa208.c +0 -126
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2-impl.h +0 -48
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2.h +0 -97
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2b-compress-avx2.c +0 -45
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2b-compress-avx2.h +0 -123
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2b-compress-ref.c +0 -94
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2b-compress-sse41.c +0 -80
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2b-compress-sse41.h +0 -97
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2b-compress-ssse3.c +0 -87
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2b-compress-ssse3.h +0 -97
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2b-load-avx2.h +0 -339
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2b-load-sse2.h +0 -66
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2b-load-sse41.h +0 -400
- data/vendor/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2b-ref.c +0 -456
- data/vendor/libsodium/src/libsodium/crypto_hash/sha256/cp/hash_sha256.c +0 -269
- data/vendor/libsodium/src/libsodium/crypto_hash/sha512/cp/hash_sha512.c +0 -298
- data/vendor/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-impl.h +0 -40
- data/vendor/libsodium/src/libsodium/crypto_secretbox/xsalsa20poly1305/ref/box_xsalsa20poly1305.c +0 -35
- data/vendor/libsodium/src/libsodium/crypto_secretbox/xsalsa20poly1305/secretbox_xsalsa20poly1305_api.c +0 -26
- data/vendor/libsodium/src/libsodium/crypto_shorthash/siphash24/ref/shorthash_siphash24.c +0 -72
- data/vendor/libsodium/src/libsodium/crypto_sign/ed25519/description +0 -1
- data/vendor/libsodium/src/libsodium/crypto_sign/ed25519/sign_ed25519_api.c +0 -39
- data/vendor/libsodium/src/libsodium/crypto_stream/aes128ctr/portable/afternm_aes128ctr.c +0 -159
- data/vendor/libsodium/src/libsodium/crypto_stream/aes128ctr/portable/beforenm_aes128ctr.c +0 -59
- data/vendor/libsodium/src/libsodium/crypto_stream/aes128ctr/portable/common.h +0 -771
- data/vendor/libsodium/src/libsodium/crypto_stream/aes128ctr/portable/consts.h +0 -28
- data/vendor/libsodium/src/libsodium/crypto_stream/aes128ctr/portable/consts_aes128ctr.c +0 -14
- data/vendor/libsodium/src/libsodium/crypto_stream/aes128ctr/portable/int128.h +0 -56
- data/vendor/libsodium/src/libsodium/crypto_stream/aes128ctr/portable/int128_aes128ctr.c +0 -131
- data/vendor/libsodium/src/libsodium/crypto_stream/aes128ctr/portable/stream_aes128ctr.c +0 -29
- data/vendor/libsodium/src/libsodium/crypto_stream/aes128ctr/portable/types.h +0 -10
- data/vendor/libsodium/src/libsodium/crypto_stream/aes128ctr/portable/xor_afternm_aes128ctr.c +0 -180
- data/vendor/libsodium/src/libsodium/crypto_stream/chacha20/ref/stream_chacha20_ref.h +0 -28
- data/vendor/libsodium/src/libsodium/crypto_stream/chacha20/vec/stream_chacha20_vec.c +0 -336
- data/vendor/libsodium/src/libsodium/crypto_stream/chacha20/vec/stream_chacha20_vec.h +0 -28
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa20/ref/stream_salsa20_ref.c +0 -55
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa20/ref/xor_salsa20_ref.c +0 -63
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa20/stream_salsa20_api.c +0 -19
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa2012/ref/stream_salsa2012.c +0 -51
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa2012/ref/xor_salsa2012.c +0 -54
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa2012/stream_salsa2012_api.c +0 -11
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa208/ref/stream_salsa208.c +0 -51
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa208/ref/xor_salsa208.c +0 -54
- data/vendor/libsodium/src/libsodium/crypto_stream/salsa208/stream_salsa208_api.c +0 -11
- data/vendor/libsodium/src/libsodium/crypto_stream/xsalsa20/ref/stream_xsalsa20.c +0 -24
- data/vendor/libsodium/src/libsodium/crypto_stream/xsalsa20/ref/xor_xsalsa20.c +0 -35
- data/vendor/libsodium/src/libsodium/crypto_stream/xsalsa20/stream_xsalsa20_api.c +0 -11
- data/vendor/libsodium/src/libsodium/crypto_verify/16/ref/verify_16.c +0 -17
- data/vendor/libsodium/src/libsodium/crypto_verify/16/verify_16_api.c +0 -6
- data/vendor/libsodium/src/libsodium/crypto_verify/32/ref/verify_32.c +0 -17
- data/vendor/libsodium/src/libsodium/crypto_verify/32/verify_32_api.c +0 -6
- data/vendor/libsodium/src/libsodium/crypto_verify/64/ref/verify_64.c +0 -17
- data/vendor/libsodium/src/libsodium/crypto_verify/64/verify_64_api.c +0 -6
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_int32.h +0 -8
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_int64.h +0 -8
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_uint16.h +0 -8
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_uint32.h +0 -8
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_uint64.h +0 -8
- data/vendor/libsodium/src/libsodium/include/sodium/crypto_uint8.h +0 -8
- data/vendor/libsodium/test-driver +0 -139
@@ -0,0 +1,150 @@
|
|
1
|
+
#include <string.h>
|
2
|
+
|
3
|
+
#include "crypto_box_curve25519xsalsa20poly1305.h"
|
4
|
+
#include "crypto_core_hsalsa20.h"
|
5
|
+
#include "crypto_hash_sha512.h"
|
6
|
+
#include "crypto_scalarmult_curve25519.h"
|
7
|
+
#include "crypto_secretbox_xsalsa20poly1305.h"
|
8
|
+
#include "randombytes.h"
|
9
|
+
#include "utils.h"
|
10
|
+
|
11
|
+
int
|
12
|
+
crypto_box_curve25519xsalsa20poly1305_seed_keypair(unsigned char *pk,
|
13
|
+
unsigned char *sk,
|
14
|
+
const unsigned char *seed)
|
15
|
+
{
|
16
|
+
unsigned char hash[64];
|
17
|
+
|
18
|
+
crypto_hash_sha512(hash, seed, 32);
|
19
|
+
memcpy(sk, hash, 32);
|
20
|
+
sodium_memzero(hash, sizeof hash);
|
21
|
+
|
22
|
+
return crypto_scalarmult_curve25519_base(pk, sk);
|
23
|
+
}
|
24
|
+
|
25
|
+
int
|
26
|
+
crypto_box_curve25519xsalsa20poly1305_keypair(unsigned char *pk,
|
27
|
+
unsigned char *sk)
|
28
|
+
{
|
29
|
+
randombytes_buf(sk, 32);
|
30
|
+
|
31
|
+
return crypto_scalarmult_curve25519_base(pk, sk);
|
32
|
+
}
|
33
|
+
|
34
|
+
int
|
35
|
+
crypto_box_curve25519xsalsa20poly1305_beforenm(unsigned char *k,
|
36
|
+
const unsigned char *pk,
|
37
|
+
const unsigned char *sk)
|
38
|
+
{
|
39
|
+
static const unsigned char zero[16] = { 0 };
|
40
|
+
unsigned char s[32];
|
41
|
+
|
42
|
+
if (crypto_scalarmult_curve25519(s, sk, pk) != 0) {
|
43
|
+
return -1;
|
44
|
+
}
|
45
|
+
return crypto_core_hsalsa20(k, zero, s, NULL);
|
46
|
+
}
|
47
|
+
|
48
|
+
int
|
49
|
+
crypto_box_curve25519xsalsa20poly1305_afternm(unsigned char *c,
|
50
|
+
const unsigned char *m,
|
51
|
+
unsigned long long mlen,
|
52
|
+
const unsigned char *n,
|
53
|
+
const unsigned char *k)
|
54
|
+
{
|
55
|
+
return crypto_secretbox_xsalsa20poly1305(c, m, mlen, n, k);
|
56
|
+
}
|
57
|
+
|
58
|
+
int
|
59
|
+
crypto_box_curve25519xsalsa20poly1305_open_afternm(unsigned char *m,
|
60
|
+
const unsigned char *c,
|
61
|
+
unsigned long long clen,
|
62
|
+
const unsigned char *n,
|
63
|
+
const unsigned char *k)
|
64
|
+
{
|
65
|
+
return crypto_secretbox_xsalsa20poly1305_open(m, c, clen, n, k);
|
66
|
+
}
|
67
|
+
|
68
|
+
int
|
69
|
+
crypto_box_curve25519xsalsa20poly1305(unsigned char *c, const unsigned char *m,
|
70
|
+
unsigned long long mlen,
|
71
|
+
const unsigned char *n,
|
72
|
+
const unsigned char *pk,
|
73
|
+
const unsigned char *sk)
|
74
|
+
{
|
75
|
+
unsigned char k[crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES];
|
76
|
+
int ret;
|
77
|
+
|
78
|
+
if (crypto_box_curve25519xsalsa20poly1305_beforenm(k, pk, sk) != 0) {
|
79
|
+
return -1;
|
80
|
+
}
|
81
|
+
ret = crypto_box_curve25519xsalsa20poly1305_afternm(c, m, mlen, n, k);
|
82
|
+
sodium_memzero(k, sizeof k);
|
83
|
+
|
84
|
+
return ret;
|
85
|
+
}
|
86
|
+
|
87
|
+
int
|
88
|
+
crypto_box_curve25519xsalsa20poly1305_open(
|
89
|
+
unsigned char *m, const unsigned char *c, unsigned long long clen,
|
90
|
+
const unsigned char *n, const unsigned char *pk, const unsigned char *sk)
|
91
|
+
{
|
92
|
+
unsigned char k[crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES];
|
93
|
+
int ret;
|
94
|
+
|
95
|
+
if (crypto_box_curve25519xsalsa20poly1305_beforenm(k, pk, sk) != 0) {
|
96
|
+
return -1;
|
97
|
+
}
|
98
|
+
ret = crypto_box_curve25519xsalsa20poly1305_open_afternm(m, c, clen, n, k);
|
99
|
+
sodium_memzero(k, sizeof k);
|
100
|
+
|
101
|
+
return ret;
|
102
|
+
}
|
103
|
+
|
104
|
+
size_t
|
105
|
+
crypto_box_curve25519xsalsa20poly1305_seedbytes(void)
|
106
|
+
{
|
107
|
+
return crypto_box_curve25519xsalsa20poly1305_SEEDBYTES;
|
108
|
+
}
|
109
|
+
|
110
|
+
size_t
|
111
|
+
crypto_box_curve25519xsalsa20poly1305_publickeybytes(void)
|
112
|
+
{
|
113
|
+
return crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES;
|
114
|
+
}
|
115
|
+
|
116
|
+
size_t
|
117
|
+
crypto_box_curve25519xsalsa20poly1305_secretkeybytes(void)
|
118
|
+
{
|
119
|
+
return crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES;
|
120
|
+
}
|
121
|
+
|
122
|
+
size_t
|
123
|
+
crypto_box_curve25519xsalsa20poly1305_beforenmbytes(void)
|
124
|
+
{
|
125
|
+
return crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES;
|
126
|
+
}
|
127
|
+
|
128
|
+
size_t
|
129
|
+
crypto_box_curve25519xsalsa20poly1305_noncebytes(void)
|
130
|
+
{
|
131
|
+
return crypto_box_curve25519xsalsa20poly1305_NONCEBYTES;
|
132
|
+
}
|
133
|
+
|
134
|
+
size_t
|
135
|
+
crypto_box_curve25519xsalsa20poly1305_zerobytes(void)
|
136
|
+
{
|
137
|
+
return crypto_box_curve25519xsalsa20poly1305_ZEROBYTES;
|
138
|
+
}
|
139
|
+
|
140
|
+
size_t
|
141
|
+
crypto_box_curve25519xsalsa20poly1305_boxzerobytes(void)
|
142
|
+
{
|
143
|
+
return crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES;
|
144
|
+
}
|
145
|
+
|
146
|
+
size_t
|
147
|
+
crypto_box_curve25519xsalsa20poly1305_macbytes(void)
|
148
|
+
{
|
149
|
+
return crypto_box_curve25519xsalsa20poly1305_MACBYTES;
|
150
|
+
}
|
@@ -1,12 +1,15 @@
|
|
1
1
|
#include <stddef.h>
|
2
2
|
#include <stdint.h>
|
3
3
|
#include <string.h>
|
4
|
+
|
4
5
|
#include "crypto_verify_32.h"
|
5
6
|
#include "private/curve25519_ref10.h"
|
6
7
|
|
7
|
-
static uint64_t
|
8
|
+
static inline uint64_t
|
9
|
+
load_3(const unsigned char *in)
|
8
10
|
{
|
9
11
|
uint64_t result;
|
12
|
+
|
10
13
|
result = (uint64_t) in[0];
|
11
14
|
result |= ((uint64_t) in[1]) << 8;
|
12
15
|
result |= ((uint64_t) in[2]) << 16;
|
@@ -14,9 +17,11 @@ static uint64_t load_3(const unsigned char *in)
|
|
14
17
|
return result;
|
15
18
|
}
|
16
19
|
|
17
|
-
static uint64_t
|
20
|
+
static inline uint64_t
|
21
|
+
load_4(const unsigned char *in)
|
18
22
|
{
|
19
23
|
uint64_t result;
|
24
|
+
|
20
25
|
result = (uint64_t) in[0];
|
21
26
|
result |= ((uint64_t) in[1]) << 8;
|
22
27
|
result |= ((uint64_t) in[2]) << 16;
|
@@ -29,7 +34,8 @@ static uint64_t load_4(const unsigned char *in)
|
|
29
34
|
h = 0
|
30
35
|
*/
|
31
36
|
|
32
|
-
void
|
37
|
+
void
|
38
|
+
fe_0(fe h)
|
33
39
|
{
|
34
40
|
memset(&h[0], 0, 10 * sizeof h[0]);
|
35
41
|
}
|
@@ -38,7 +44,8 @@ void fe_0(fe h)
|
|
38
44
|
h = 1
|
39
45
|
*/
|
40
46
|
|
41
|
-
void
|
47
|
+
void
|
48
|
+
fe_1(fe h)
|
42
49
|
{
|
43
50
|
h[0] = 1;
|
44
51
|
h[1] = 0;
|
@@ -57,7 +64,8 @@ void fe_1(fe h)
|
|
57
64
|
|h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
|
58
65
|
*/
|
59
66
|
|
60
|
-
void
|
67
|
+
void
|
68
|
+
fe_add(fe h, const fe f, const fe g)
|
61
69
|
{
|
62
70
|
int32_t f0 = f[0];
|
63
71
|
int32_t f1 = f[1];
|
@@ -69,6 +77,7 @@ void fe_add(fe h,const fe f,const fe g)
|
|
69
77
|
int32_t f7 = f[7];
|
70
78
|
int32_t f8 = f[8];
|
71
79
|
int32_t f9 = f[9];
|
80
|
+
|
72
81
|
int32_t g0 = g[0];
|
73
82
|
int32_t g1 = g[1];
|
74
83
|
int32_t g2 = g[2];
|
@@ -79,6 +88,7 @@ void fe_add(fe h,const fe f,const fe g)
|
|
79
88
|
int32_t g7 = g[7];
|
80
89
|
int32_t g8 = g[8];
|
81
90
|
int32_t g9 = g[9];
|
91
|
+
|
82
92
|
int32_t h0 = f0 + g0;
|
83
93
|
int32_t h1 = f1 + g1;
|
84
94
|
int32_t h2 = f2 + g2;
|
@@ -89,6 +99,7 @@ void fe_add(fe h,const fe f,const fe g)
|
|
89
99
|
int32_t h7 = f7 + g7;
|
90
100
|
int32_t h8 = f8 + g8;
|
91
101
|
int32_t h9 = f9 + g9;
|
102
|
+
|
92
103
|
h[0] = h0;
|
93
104
|
h[1] = h1;
|
94
105
|
h[2] = h2;
|
@@ -108,7 +119,8 @@ void fe_add(fe h,const fe f,const fe g)
|
|
108
119
|
Preconditions: b in {0,1}.
|
109
120
|
*/
|
110
121
|
|
111
|
-
void
|
122
|
+
void
|
123
|
+
fe_cmov(fe f, const fe g, unsigned int b)
|
112
124
|
{
|
113
125
|
int32_t f0 = f[0];
|
114
126
|
int32_t f1 = f[1];
|
@@ -120,6 +132,7 @@ void fe_cmov(fe f,const fe g,unsigned int b)
|
|
120
132
|
int32_t f7 = f[7];
|
121
133
|
int32_t f8 = f[8];
|
122
134
|
int32_t f9 = f[9];
|
135
|
+
|
123
136
|
int32_t g0 = g[0];
|
124
137
|
int32_t g1 = g[1];
|
125
138
|
int32_t g2 = g[2];
|
@@ -130,6 +143,7 @@ void fe_cmov(fe f,const fe g,unsigned int b)
|
|
130
143
|
int32_t g7 = g[7];
|
131
144
|
int32_t g8 = g[8];
|
132
145
|
int32_t g9 = g[9];
|
146
|
+
|
133
147
|
int32_t x0 = f0 ^ g0;
|
134
148
|
int32_t x1 = f1 ^ g1;
|
135
149
|
int32_t x2 = f2 ^ g2;
|
@@ -140,7 +154,8 @@ void fe_cmov(fe f,const fe g,unsigned int b)
|
|
140
154
|
int32_t x7 = f7 ^ g7;
|
141
155
|
int32_t x8 = f8 ^ g8;
|
142
156
|
int32_t x9 = f9 ^ g9;
|
143
|
-
|
157
|
+
|
158
|
+
b = (unsigned int) (-(int) b);
|
144
159
|
x0 &= b;
|
145
160
|
x1 &= b;
|
146
161
|
x2 &= b;
|
@@ -167,7 +182,8 @@ void fe_cmov(fe f,const fe g,unsigned int b)
|
|
167
182
|
h = f
|
168
183
|
*/
|
169
184
|
|
170
|
-
void
|
185
|
+
void
|
186
|
+
fe_copy(fe h, const fe f)
|
171
187
|
{
|
172
188
|
int32_t f0 = f[0];
|
173
189
|
int32_t f1 = f[1];
|
@@ -179,6 +195,7 @@ void fe_copy(fe h,const fe f)
|
|
179
195
|
int32_t f7 = f[7];
|
180
196
|
int32_t f8 = f[8];
|
181
197
|
int32_t f9 = f[9];
|
198
|
+
|
182
199
|
h[0] = f0;
|
183
200
|
h[1] = f1;
|
184
201
|
h[2] = f2;
|
@@ -195,7 +212,8 @@ void fe_copy(fe h,const fe f)
|
|
195
212
|
Ignores top bit of h.
|
196
213
|
*/
|
197
214
|
|
198
|
-
void
|
215
|
+
void
|
216
|
+
fe_frombytes(fe h, const unsigned char *s)
|
199
217
|
{
|
200
218
|
int64_t h0 = load_4(s);
|
201
219
|
int64_t h1 = load_3(s + 4) << 6;
|
@@ -207,6 +225,7 @@ void fe_frombytes(fe h,const unsigned char *s)
|
|
207
225
|
int64_t h7 = load_3(s + 23) << 5;
|
208
226
|
int64_t h8 = load_3(s + 26) << 4;
|
209
227
|
int64_t h9 = (load_3(s + 29) & 8388607) << 2;
|
228
|
+
|
210
229
|
int64_t carry0;
|
211
230
|
int64_t carry1;
|
212
231
|
int64_t carry2;
|
@@ -218,17 +237,37 @@ void fe_frombytes(fe h,const unsigned char *s)
|
|
218
237
|
int64_t carry8;
|
219
238
|
int64_t carry9;
|
220
239
|
|
221
|
-
carry9 = (h9 + (int64_t)
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
240
|
+
carry9 = (h9 + (int64_t)(1L << 24)) >> 25;
|
241
|
+
h0 += carry9 * 19;
|
242
|
+
h9 -= carry9 * ((uint64_t) 1L << 25);
|
243
|
+
carry1 = (h1 + (int64_t)(1L << 24)) >> 25;
|
244
|
+
h2 += carry1;
|
245
|
+
h1 -= carry1 * ((uint64_t) 1L << 25);
|
246
|
+
carry3 = (h3 + (int64_t)(1L << 24)) >> 25;
|
247
|
+
h4 += carry3;
|
248
|
+
h3 -= carry3 * ((uint64_t) 1L << 25);
|
249
|
+
carry5 = (h5 + (int64_t)(1L << 24)) >> 25;
|
250
|
+
h6 += carry5;
|
251
|
+
h5 -= carry5 * ((uint64_t) 1L << 25);
|
252
|
+
carry7 = (h7 + (int64_t)(1L << 24)) >> 25;
|
253
|
+
h8 += carry7;
|
254
|
+
h7 -= carry7 * ((uint64_t) 1L << 25);
|
255
|
+
|
256
|
+
carry0 = (h0 + (int64_t)(1L << 25)) >> 26;
|
257
|
+
h1 += carry0;
|
258
|
+
h0 -= carry0 * ((uint64_t) 1L << 26);
|
259
|
+
carry2 = (h2 + (int64_t)(1L << 25)) >> 26;
|
260
|
+
h3 += carry2;
|
261
|
+
h2 -= carry2 * ((uint64_t) 1L << 26);
|
262
|
+
carry4 = (h4 + (int64_t)(1L << 25)) >> 26;
|
263
|
+
h5 += carry4;
|
264
|
+
h4 -= carry4 * ((uint64_t) 1L << 26);
|
265
|
+
carry6 = (h6 + (int64_t)(1L << 25)) >> 26;
|
266
|
+
h7 += carry6;
|
267
|
+
h6 -= carry6 * ((uint64_t) 1L << 26);
|
268
|
+
carry8 = (h8 + (int64_t)(1L << 25)) >> 26;
|
269
|
+
h9 += carry8;
|
270
|
+
h8 -= carry8 * ((uint64_t) 1L << 26);
|
232
271
|
|
233
272
|
h[0] = (int32_t) h0;
|
234
273
|
h[1] = (int32_t) h1;
|
@@ -267,7 +306,8 @@ void fe_frombytes(fe h,const unsigned char *s)
|
|
267
306
|
so floor(2^(-255)(h + 19 2^(-25) h9 + 2^(-1))) = q.
|
268
307
|
*/
|
269
308
|
|
270
|
-
void
|
309
|
+
void
|
310
|
+
fe_tobytes(unsigned char *s, const fe h)
|
271
311
|
{
|
272
312
|
int32_t h0 = h[0];
|
273
313
|
int32_t h1 = h[1];
|
@@ -279,6 +319,7 @@ void fe_tobytes(unsigned char *s,const fe h)
|
|
279
319
|
int32_t h7 = h[7];
|
280
320
|
int32_t h8 = h[8];
|
281
321
|
int32_t h9 = h[9];
|
322
|
+
|
282
323
|
int32_t q;
|
283
324
|
int32_t carry0;
|
284
325
|
int32_t carry1;
|
@@ -307,16 +348,35 @@ void fe_tobytes(unsigned char *s,const fe h)
|
|
307
348
|
h0 += 19 * q;
|
308
349
|
/* Goal: Output h-2^255 q, which is between 0 and 2^255-20. */
|
309
350
|
|
310
|
-
carry0 = h0 >> 26;
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
351
|
+
carry0 = h0 >> 26;
|
352
|
+
h1 += carry0;
|
353
|
+
h0 -= carry0 * ((uint32_t) 1L << 26);
|
354
|
+
carry1 = h1 >> 25;
|
355
|
+
h2 += carry1;
|
356
|
+
h1 -= carry1 * ((uint32_t) 1L << 25);
|
357
|
+
carry2 = h2 >> 26;
|
358
|
+
h3 += carry2;
|
359
|
+
h2 -= carry2 * ((uint32_t) 1L << 26);
|
360
|
+
carry3 = h3 >> 25;
|
361
|
+
h4 += carry3;
|
362
|
+
h3 -= carry3 * ((uint32_t) 1L << 25);
|
363
|
+
carry4 = h4 >> 26;
|
364
|
+
h5 += carry4;
|
365
|
+
h4 -= carry4 * ((uint32_t) 1L << 26);
|
366
|
+
carry5 = h5 >> 25;
|
367
|
+
h6 += carry5;
|
368
|
+
h5 -= carry5 * ((uint32_t) 1L << 25);
|
369
|
+
carry6 = h6 >> 26;
|
370
|
+
h7 += carry6;
|
371
|
+
h6 -= carry6 * ((uint32_t) 1L << 26);
|
372
|
+
carry7 = h7 >> 25;
|
373
|
+
h8 += carry7;
|
374
|
+
h7 -= carry7 * ((uint32_t) 1L << 25);
|
375
|
+
carry8 = h8 >> 26;
|
376
|
+
h9 += carry8;
|
377
|
+
h8 -= carry8 * ((uint32_t) 1L << 26);
|
378
|
+
carry9 = h9 >> 25;
|
379
|
+
h9 -= carry9 * ((uint32_t) 1L << 25);
|
320
380
|
/* h10 = carry9 */
|
321
381
|
|
322
382
|
/*
|
@@ -326,16 +386,16 @@ void fe_tobytes(unsigned char *s,const fe h)
|
|
326
386
|
Goal: Output h0+...+2^230 h9.
|
327
387
|
*/
|
328
388
|
|
329
|
-
s[0]
|
330
|
-
s[1]
|
331
|
-
s[2]
|
332
|
-
s[3]
|
333
|
-
s[4]
|
334
|
-
s[5]
|
335
|
-
s[6]
|
336
|
-
s[7]
|
337
|
-
s[8]
|
338
|
-
s[9]
|
389
|
+
s[0] = h0 >> 0;
|
390
|
+
s[1] = h0 >> 8;
|
391
|
+
s[2] = h0 >> 16;
|
392
|
+
s[3] = (h0 >> 24) | (h1 * ((uint32_t) 1 << 2));
|
393
|
+
s[4] = h1 >> 6;
|
394
|
+
s[5] = h1 >> 14;
|
395
|
+
s[6] = (h1 >> 22) | (h2 * ((uint32_t) 1 << 3));
|
396
|
+
s[7] = h2 >> 5;
|
397
|
+
s[8] = h2 >> 13;
|
398
|
+
s[9] = (h2 >> 21) | (h3 * ((uint32_t) 1 << 5));
|
339
399
|
s[10] = h3 >> 3;
|
340
400
|
s[11] = h3 >> 11;
|
341
401
|
s[12] = (h3 >> 19) | (h4 * ((uint32_t) 1 << 6));
|
@@ -368,10 +428,12 @@ void fe_tobytes(unsigned char *s,const fe h)
|
|
368
428
|
|f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
|
369
429
|
*/
|
370
430
|
|
371
|
-
int
|
431
|
+
int
|
432
|
+
fe_isnegative(const fe f)
|
372
433
|
{
|
373
434
|
unsigned char s[32];
|
374
|
-
|
435
|
+
|
436
|
+
fe_tobytes(s, f);
|
375
437
|
|
376
438
|
return s[0] & 1;
|
377
439
|
}
|
@@ -386,12 +448,14 @@ int fe_isnegative(const fe f)
|
|
386
448
|
|
387
449
|
static unsigned char zero[32];
|
388
450
|
|
389
|
-
int
|
451
|
+
int
|
452
|
+
fe_isnonzero(const fe f)
|
390
453
|
{
|
391
454
|
unsigned char s[32];
|
392
|
-
fe_tobytes(s,f);
|
393
455
|
|
394
|
-
|
456
|
+
fe_tobytes(s, f);
|
457
|
+
|
458
|
+
return crypto_verify_32(s, zero);
|
395
459
|
}
|
396
460
|
|
397
461
|
/*
|
@@ -426,7 +490,8 @@ int fe_isnonzero(const fe f)
|
|
426
490
|
With tighter constraints on inputs can squeeze carries into int32.
|
427
491
|
*/
|
428
492
|
|
429
|
-
void
|
493
|
+
void
|
494
|
+
fe_mul(fe h, const fe f, const fe g)
|
430
495
|
{
|
431
496
|
int32_t f0 = f[0];
|
432
497
|
int32_t f1 = f[1];
|
@@ -438,6 +503,7 @@ void fe_mul(fe h,const fe f,const fe g)
|
|
438
503
|
int32_t f7 = f[7];
|
439
504
|
int32_t f8 = f[8];
|
440
505
|
int32_t f9 = f[9];
|
506
|
+
|
441
507
|
int32_t g0 = g[0];
|
442
508
|
int32_t g1 = g[1];
|
443
509
|
int32_t g2 = g[2];
|
@@ -448,6 +514,7 @@ void fe_mul(fe h,const fe f,const fe g)
|
|
448
514
|
int32_t g7 = g[7];
|
449
515
|
int32_t g8 = g[8];
|
450
516
|
int32_t g9 = g[9];
|
517
|
+
|
451
518
|
int32_t g1_19 = 19 * g1; /* 1.959375*2^29 */
|
452
519
|
int32_t g2_19 = 19 * g2; /* 1.959375*2^30; still ok */
|
453
520
|
int32_t g3_19 = 19 * g3;
|
@@ -457,121 +524,134 @@ void fe_mul(fe h,const fe f,const fe g)
|
|
457
524
|
int32_t g7_19 = 19 * g7;
|
458
525
|
int32_t g8_19 = 19 * g8;
|
459
526
|
int32_t g9_19 = 19 * g9;
|
460
|
-
int32_t f1_2
|
461
|
-
int32_t f3_2
|
462
|
-
int32_t f5_2
|
463
|
-
int32_t f7_2
|
464
|
-
int32_t f9_2
|
465
|
-
|
466
|
-
int64_t
|
467
|
-
int64_t
|
468
|
-
int64_t
|
469
|
-
int64_t
|
470
|
-
int64_t
|
471
|
-
int64_t
|
472
|
-
int64_t
|
473
|
-
int64_t
|
474
|
-
int64_t
|
475
|
-
int64_t
|
527
|
+
int32_t f1_2 = 2 * f1;
|
528
|
+
int32_t f3_2 = 2 * f3;
|
529
|
+
int32_t f5_2 = 2 * f5;
|
530
|
+
int32_t f7_2 = 2 * f7;
|
531
|
+
int32_t f9_2 = 2 * f9;
|
532
|
+
|
533
|
+
int64_t f0g0 = f0 * (int64_t) g0;
|
534
|
+
int64_t f0g1 = f0 * (int64_t) g1;
|
535
|
+
int64_t f0g2 = f0 * (int64_t) g2;
|
536
|
+
int64_t f0g3 = f0 * (int64_t) g3;
|
537
|
+
int64_t f0g4 = f0 * (int64_t) g4;
|
538
|
+
int64_t f0g5 = f0 * (int64_t) g5;
|
539
|
+
int64_t f0g6 = f0 * (int64_t) g6;
|
540
|
+
int64_t f0g7 = f0 * (int64_t) g7;
|
541
|
+
int64_t f0g8 = f0 * (int64_t) g8;
|
542
|
+
int64_t f0g9 = f0 * (int64_t) g9;
|
543
|
+
int64_t f1g0 = f1 * (int64_t) g0;
|
476
544
|
int64_t f1g1_2 = f1_2 * (int64_t) g1;
|
477
|
-
int64_t f1g2 = f1
|
545
|
+
int64_t f1g2 = f1 * (int64_t) g2;
|
478
546
|
int64_t f1g3_2 = f1_2 * (int64_t) g3;
|
479
|
-
int64_t f1g4 = f1
|
547
|
+
int64_t f1g4 = f1 * (int64_t) g4;
|
480
548
|
int64_t f1g5_2 = f1_2 * (int64_t) g5;
|
481
|
-
int64_t f1g6 = f1
|
549
|
+
int64_t f1g6 = f1 * (int64_t) g6;
|
482
550
|
int64_t f1g7_2 = f1_2 * (int64_t) g7;
|
483
|
-
int64_t f1g8 = f1
|
551
|
+
int64_t f1g8 = f1 * (int64_t) g8;
|
484
552
|
int64_t f1g9_38 = f1_2 * (int64_t) g9_19;
|
485
|
-
int64_t f2g0 = f2
|
486
|
-
int64_t f2g1 = f2
|
487
|
-
int64_t f2g2 = f2
|
488
|
-
int64_t f2g3 = f2
|
489
|
-
int64_t f2g4 = f2
|
490
|
-
int64_t f2g5 = f2
|
491
|
-
int64_t f2g6 = f2
|
492
|
-
int64_t f2g7 = f2
|
493
|
-
int64_t f2g8_19 = f2
|
494
|
-
int64_t f2g9_19 = f2
|
495
|
-
int64_t f3g0 = f3
|
553
|
+
int64_t f2g0 = f2 * (int64_t) g0;
|
554
|
+
int64_t f2g1 = f2 * (int64_t) g1;
|
555
|
+
int64_t f2g2 = f2 * (int64_t) g2;
|
556
|
+
int64_t f2g3 = f2 * (int64_t) g3;
|
557
|
+
int64_t f2g4 = f2 * (int64_t) g4;
|
558
|
+
int64_t f2g5 = f2 * (int64_t) g5;
|
559
|
+
int64_t f2g6 = f2 * (int64_t) g6;
|
560
|
+
int64_t f2g7 = f2 * (int64_t) g7;
|
561
|
+
int64_t f2g8_19 = f2 * (int64_t) g8_19;
|
562
|
+
int64_t f2g9_19 = f2 * (int64_t) g9_19;
|
563
|
+
int64_t f3g0 = f3 * (int64_t) g0;
|
496
564
|
int64_t f3g1_2 = f3_2 * (int64_t) g1;
|
497
|
-
int64_t f3g2 = f3
|
565
|
+
int64_t f3g2 = f3 * (int64_t) g2;
|
498
566
|
int64_t f3g3_2 = f3_2 * (int64_t) g3;
|
499
|
-
int64_t f3g4 = f3
|
567
|
+
int64_t f3g4 = f3 * (int64_t) g4;
|
500
568
|
int64_t f3g5_2 = f3_2 * (int64_t) g5;
|
501
|
-
int64_t f3g6 = f3
|
569
|
+
int64_t f3g6 = f3 * (int64_t) g6;
|
502
570
|
int64_t f3g7_38 = f3_2 * (int64_t) g7_19;
|
503
|
-
int64_t f3g8_19 = f3
|
571
|
+
int64_t f3g8_19 = f3 * (int64_t) g8_19;
|
504
572
|
int64_t f3g9_38 = f3_2 * (int64_t) g9_19;
|
505
|
-
int64_t f4g0 = f4
|
506
|
-
int64_t f4g1 = f4
|
507
|
-
int64_t f4g2 = f4
|
508
|
-
int64_t f4g3 = f4
|
509
|
-
int64_t f4g4 = f4
|
510
|
-
int64_t f4g5 = f4
|
511
|
-
int64_t f4g6_19 = f4
|
512
|
-
int64_t f4g7_19 = f4
|
513
|
-
int64_t f4g8_19 = f4
|
514
|
-
int64_t f4g9_19 = f4
|
515
|
-
int64_t f5g0 = f5
|
573
|
+
int64_t f4g0 = f4 * (int64_t) g0;
|
574
|
+
int64_t f4g1 = f4 * (int64_t) g1;
|
575
|
+
int64_t f4g2 = f4 * (int64_t) g2;
|
576
|
+
int64_t f4g3 = f4 * (int64_t) g3;
|
577
|
+
int64_t f4g4 = f4 * (int64_t) g4;
|
578
|
+
int64_t f4g5 = f4 * (int64_t) g5;
|
579
|
+
int64_t f4g6_19 = f4 * (int64_t) g6_19;
|
580
|
+
int64_t f4g7_19 = f4 * (int64_t) g7_19;
|
581
|
+
int64_t f4g8_19 = f4 * (int64_t) g8_19;
|
582
|
+
int64_t f4g9_19 = f4 * (int64_t) g9_19;
|
583
|
+
int64_t f5g0 = f5 * (int64_t) g0;
|
516
584
|
int64_t f5g1_2 = f5_2 * (int64_t) g1;
|
517
|
-
int64_t f5g2 = f5
|
585
|
+
int64_t f5g2 = f5 * (int64_t) g2;
|
518
586
|
int64_t f5g3_2 = f5_2 * (int64_t) g3;
|
519
|
-
int64_t f5g4 = f5
|
587
|
+
int64_t f5g4 = f5 * (int64_t) g4;
|
520
588
|
int64_t f5g5_38 = f5_2 * (int64_t) g5_19;
|
521
|
-
int64_t f5g6_19 = f5
|
589
|
+
int64_t f5g6_19 = f5 * (int64_t) g6_19;
|
522
590
|
int64_t f5g7_38 = f5_2 * (int64_t) g7_19;
|
523
|
-
int64_t f5g8_19 = f5
|
591
|
+
int64_t f5g8_19 = f5 * (int64_t) g8_19;
|
524
592
|
int64_t f5g9_38 = f5_2 * (int64_t) g9_19;
|
525
|
-
int64_t f6g0 = f6
|
526
|
-
int64_t f6g1 = f6
|
527
|
-
int64_t f6g2 = f6
|
528
|
-
int64_t f6g3 = f6
|
529
|
-
int64_t f6g4_19 = f6
|
530
|
-
int64_t f6g5_19 = f6
|
531
|
-
int64_t f6g6_19 = f6
|
532
|
-
int64_t f6g7_19 = f6
|
533
|
-
int64_t f6g8_19 = f6
|
534
|
-
int64_t f6g9_19 = f6
|
535
|
-
int64_t f7g0 = f7
|
593
|
+
int64_t f6g0 = f6 * (int64_t) g0;
|
594
|
+
int64_t f6g1 = f6 * (int64_t) g1;
|
595
|
+
int64_t f6g2 = f6 * (int64_t) g2;
|
596
|
+
int64_t f6g3 = f6 * (int64_t) g3;
|
597
|
+
int64_t f6g4_19 = f6 * (int64_t) g4_19;
|
598
|
+
int64_t f6g5_19 = f6 * (int64_t) g5_19;
|
599
|
+
int64_t f6g6_19 = f6 * (int64_t) g6_19;
|
600
|
+
int64_t f6g7_19 = f6 * (int64_t) g7_19;
|
601
|
+
int64_t f6g8_19 = f6 * (int64_t) g8_19;
|
602
|
+
int64_t f6g9_19 = f6 * (int64_t) g9_19;
|
603
|
+
int64_t f7g0 = f7 * (int64_t) g0;
|
536
604
|
int64_t f7g1_2 = f7_2 * (int64_t) g1;
|
537
|
-
int64_t f7g2 = f7
|
605
|
+
int64_t f7g2 = f7 * (int64_t) g2;
|
538
606
|
int64_t f7g3_38 = f7_2 * (int64_t) g3_19;
|
539
|
-
int64_t f7g4_19 = f7
|
607
|
+
int64_t f7g4_19 = f7 * (int64_t) g4_19;
|
540
608
|
int64_t f7g5_38 = f7_2 * (int64_t) g5_19;
|
541
|
-
int64_t f7g6_19 = f7
|
609
|
+
int64_t f7g6_19 = f7 * (int64_t) g6_19;
|
542
610
|
int64_t f7g7_38 = f7_2 * (int64_t) g7_19;
|
543
|
-
int64_t f7g8_19 = f7
|
611
|
+
int64_t f7g8_19 = f7 * (int64_t) g8_19;
|
544
612
|
int64_t f7g9_38 = f7_2 * (int64_t) g9_19;
|
545
|
-
int64_t f8g0 = f8
|
546
|
-
int64_t f8g1 = f8
|
547
|
-
int64_t f8g2_19 = f8
|
548
|
-
int64_t f8g3_19 = f8
|
549
|
-
int64_t f8g4_19 = f8
|
550
|
-
int64_t f8g5_19 = f8
|
551
|
-
int64_t f8g6_19 = f8
|
552
|
-
int64_t f8g7_19 = f8
|
553
|
-
int64_t f8g8_19 = f8
|
554
|
-
int64_t f8g9_19 = f8
|
555
|
-
int64_t f9g0 = f9
|
613
|
+
int64_t f8g0 = f8 * (int64_t) g0;
|
614
|
+
int64_t f8g1 = f8 * (int64_t) g1;
|
615
|
+
int64_t f8g2_19 = f8 * (int64_t) g2_19;
|
616
|
+
int64_t f8g3_19 = f8 * (int64_t) g3_19;
|
617
|
+
int64_t f8g4_19 = f8 * (int64_t) g4_19;
|
618
|
+
int64_t f8g5_19 = f8 * (int64_t) g5_19;
|
619
|
+
int64_t f8g6_19 = f8 * (int64_t) g6_19;
|
620
|
+
int64_t f8g7_19 = f8 * (int64_t) g7_19;
|
621
|
+
int64_t f8g8_19 = f8 * (int64_t) g8_19;
|
622
|
+
int64_t f8g9_19 = f8 * (int64_t) g9_19;
|
623
|
+
int64_t f9g0 = f9 * (int64_t) g0;
|
556
624
|
int64_t f9g1_38 = f9_2 * (int64_t) g1_19;
|
557
|
-
int64_t f9g2_19 = f9
|
625
|
+
int64_t f9g2_19 = f9 * (int64_t) g2_19;
|
558
626
|
int64_t f9g3_38 = f9_2 * (int64_t) g3_19;
|
559
|
-
int64_t f9g4_19 = f9
|
627
|
+
int64_t f9g4_19 = f9 * (int64_t) g4_19;
|
560
628
|
int64_t f9g5_38 = f9_2 * (int64_t) g5_19;
|
561
|
-
int64_t f9g6_19 = f9
|
629
|
+
int64_t f9g6_19 = f9 * (int64_t) g6_19;
|
562
630
|
int64_t f9g7_38 = f9_2 * (int64_t) g7_19;
|
563
|
-
int64_t f9g8_19 = f9
|
631
|
+
int64_t f9g8_19 = f9 * (int64_t) g8_19;
|
564
632
|
int64_t f9g9_38 = f9_2 * (int64_t) g9_19;
|
565
|
-
|
566
|
-
int64_t
|
567
|
-
|
568
|
-
int64_t
|
569
|
-
|
570
|
-
int64_t
|
571
|
-
|
572
|
-
int64_t
|
573
|
-
|
574
|
-
int64_t
|
633
|
+
|
634
|
+
int64_t h0 = f0g0 + f1g9_38 + f2g8_19 + f3g7_38 + f4g6_19 + f5g5_38 +
|
635
|
+
f6g4_19 + f7g3_38 + f8g2_19 + f9g1_38;
|
636
|
+
int64_t h1 = f0g1 + f1g0 + f2g9_19 + f3g8_19 + f4g7_19 + f5g6_19 + f6g5_19 +
|
637
|
+
f7g4_19 + f8g3_19 + f9g2_19;
|
638
|
+
int64_t h2 = f0g2 + f1g1_2 + f2g0 + f3g9_38 + f4g8_19 + f5g7_38 + f6g6_19 +
|
639
|
+
f7g5_38 + f8g4_19 + f9g3_38;
|
640
|
+
int64_t h3 = f0g3 + f1g2 + f2g1 + f3g0 + f4g9_19 + f5g8_19 + f6g7_19 +
|
641
|
+
f7g6_19 + f8g5_19 + f9g4_19;
|
642
|
+
int64_t h4 = f0g4 + f1g3_2 + f2g2 + f3g1_2 + f4g0 + f5g9_38 + f6g8_19 +
|
643
|
+
f7g7_38 + f8g6_19 + f9g5_38;
|
644
|
+
int64_t h5 = f0g5 + f1g4 + f2g3 + f3g2 + f4g1 + f5g0 + f6g9_19 + f7g8_19 +
|
645
|
+
f8g7_19 + f9g6_19;
|
646
|
+
int64_t h6 = f0g6 + f1g5_2 + f2g4 + f3g3_2 + f4g2 + f5g1_2 + f6g0 +
|
647
|
+
f7g9_38 + f8g8_19 + f9g7_38;
|
648
|
+
int64_t h7 = f0g7 + f1g6 + f2g5 + f3g4 + f4g3 + f5g2 + f6g1 + f7g0 +
|
649
|
+
f8g9_19 + f9g8_19;
|
650
|
+
int64_t h8 = f0g8 + f1g7_2 + f2g6 + f3g5_2 + f4g4 + f5g3_2 + f6g2 + f7g1_2 +
|
651
|
+
f8g0 + f9g9_38;
|
652
|
+
int64_t h9 =
|
653
|
+
f0g9 + f1g8 + f2g7 + f3g6 + f4g5 + f5g4 + f6g3 + f7g2 + f8g1 + f9g0;
|
654
|
+
|
575
655
|
int64_t carry0;
|
576
656
|
int64_t carry1;
|
577
657
|
int64_t carry2;
|
@@ -590,46 +670,70 @@ void fe_mul(fe h,const fe f,const fe g)
|
|
590
670
|
i.e. |h1| <= 1.7*2^59; narrower ranges for h3, h5, h7, h9
|
591
671
|
*/
|
592
672
|
|
593
|
-
carry0 = (h0 + (int64_t)
|
594
|
-
|
673
|
+
carry0 = (h0 + (int64_t)(1L << 25)) >> 26;
|
674
|
+
h1 += carry0;
|
675
|
+
h0 -= carry0 * ((uint64_t) 1L << 26);
|
676
|
+
carry4 = (h4 + (int64_t)(1L << 25)) >> 26;
|
677
|
+
h5 += carry4;
|
678
|
+
h4 -= carry4 * ((uint64_t) 1L << 26);
|
595
679
|
/* |h0| <= 2^25 */
|
596
680
|
/* |h4| <= 2^25 */
|
597
681
|
/* |h1| <= 1.71*2^59 */
|
598
682
|
/* |h5| <= 1.71*2^59 */
|
599
683
|
|
600
|
-
carry1 = (h1 + (int64_t)
|
601
|
-
|
684
|
+
carry1 = (h1 + (int64_t)(1L << 24)) >> 25;
|
685
|
+
h2 += carry1;
|
686
|
+
h1 -= carry1 * ((uint64_t) 1L << 25);
|
687
|
+
carry5 = (h5 + (int64_t)(1L << 24)) >> 25;
|
688
|
+
h6 += carry5;
|
689
|
+
h5 -= carry5 * ((uint64_t) 1L << 25);
|
602
690
|
/* |h1| <= 2^24; from now on fits into int32 */
|
603
691
|
/* |h5| <= 2^24; from now on fits into int32 */
|
604
692
|
/* |h2| <= 1.41*2^60 */
|
605
693
|
/* |h6| <= 1.41*2^60 */
|
606
694
|
|
607
|
-
carry2 = (h2 + (int64_t)
|
608
|
-
|
695
|
+
carry2 = (h2 + (int64_t)(1L << 25)) >> 26;
|
696
|
+
h3 += carry2;
|
697
|
+
h2 -= carry2 * ((uint64_t) 1L << 26);
|
698
|
+
carry6 = (h6 + (int64_t)(1L << 25)) >> 26;
|
699
|
+
h7 += carry6;
|
700
|
+
h6 -= carry6 * ((uint64_t) 1L << 26);
|
609
701
|
/* |h2| <= 2^25; from now on fits into int32 unchanged */
|
610
702
|
/* |h6| <= 2^25; from now on fits into int32 unchanged */
|
611
703
|
/* |h3| <= 1.71*2^59 */
|
612
704
|
/* |h7| <= 1.71*2^59 */
|
613
705
|
|
614
|
-
carry3 = (h3 + (int64_t)
|
615
|
-
|
706
|
+
carry3 = (h3 + (int64_t)(1L << 24)) >> 25;
|
707
|
+
h4 += carry3;
|
708
|
+
h3 -= carry3 * ((uint64_t) 1L << 25);
|
709
|
+
carry7 = (h7 + (int64_t)(1L << 24)) >> 25;
|
710
|
+
h8 += carry7;
|
711
|
+
h7 -= carry7 * ((uint64_t) 1L << 25);
|
616
712
|
/* |h3| <= 2^24; from now on fits into int32 unchanged */
|
617
713
|
/* |h7| <= 2^24; from now on fits into int32 unchanged */
|
618
714
|
/* |h4| <= 1.72*2^34 */
|
619
715
|
/* |h8| <= 1.41*2^60 */
|
620
716
|
|
621
|
-
carry4 = (h4 + (int64_t)
|
622
|
-
|
717
|
+
carry4 = (h4 + (int64_t)(1L << 25)) >> 26;
|
718
|
+
h5 += carry4;
|
719
|
+
h4 -= carry4 * ((uint64_t) 1L << 26);
|
720
|
+
carry8 = (h8 + (int64_t)(1L << 25)) >> 26;
|
721
|
+
h9 += carry8;
|
722
|
+
h8 -= carry8 * ((uint64_t) 1L << 26);
|
623
723
|
/* |h4| <= 2^25; from now on fits into int32 unchanged */
|
624
724
|
/* |h8| <= 2^25; from now on fits into int32 unchanged */
|
625
725
|
/* |h5| <= 1.01*2^24 */
|
626
726
|
/* |h9| <= 1.71*2^59 */
|
627
727
|
|
628
|
-
carry9 = (h9 + (int64_t)
|
728
|
+
carry9 = (h9 + (int64_t)(1L << 24)) >> 25;
|
729
|
+
h0 += carry9 * 19;
|
730
|
+
h9 -= carry9 * ((uint64_t) 1L << 25);
|
629
731
|
/* |h9| <= 2^24; from now on fits into int32 unchanged */
|
630
732
|
/* |h0| <= 1.1*2^39 */
|
631
733
|
|
632
|
-
carry0 = (h0 + (int64_t)
|
734
|
+
carry0 = (h0 + (int64_t)(1L << 25)) >> 26;
|
735
|
+
h1 += carry0;
|
736
|
+
h0 -= carry0 * ((uint64_t) 1L << 26);
|
633
737
|
/* |h0| <= 2^25; from now on fits into int32 unchanged */
|
634
738
|
/* |h1| <= 1.01*2^24 */
|
635
739
|
|
@@ -655,7 +759,8 @@ void fe_mul(fe h,const fe f,const fe g)
|
|
655
759
|
|h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
|
656
760
|
*/
|
657
761
|
|
658
|
-
void
|
762
|
+
void
|
763
|
+
fe_neg(fe h, const fe f)
|
659
764
|
{
|
660
765
|
int32_t f0 = f[0];
|
661
766
|
int32_t f1 = f[1];
|
@@ -667,6 +772,7 @@ void fe_neg(fe h,const fe f)
|
|
667
772
|
int32_t f7 = f[7];
|
668
773
|
int32_t f8 = f[8];
|
669
774
|
int32_t f9 = f[9];
|
775
|
+
|
670
776
|
int32_t h0 = -f0;
|
671
777
|
int32_t h1 = -f1;
|
672
778
|
int32_t h2 = -f2;
|
@@ -677,6 +783,7 @@ void fe_neg(fe h,const fe f)
|
|
677
783
|
int32_t h7 = -f7;
|
678
784
|
int32_t h8 = -f8;
|
679
785
|
int32_t h9 = -f9;
|
786
|
+
|
680
787
|
h[0] = h0;
|
681
788
|
h[1] = h1;
|
682
789
|
h[2] = h2;
|
@@ -704,7 +811,8 @@ void fe_neg(fe h,const fe f)
|
|
704
811
|
See fe_mul.c for discussion of implementation strategy.
|
705
812
|
*/
|
706
813
|
|
707
|
-
void
|
814
|
+
void
|
815
|
+
fe_sq(fe h, const fe f)
|
708
816
|
{
|
709
817
|
int32_t f0 = f[0];
|
710
818
|
int32_t f1 = f[1];
|
@@ -716,20 +824,22 @@ void fe_sq(fe h,const fe f)
|
|
716
824
|
int32_t f7 = f[7];
|
717
825
|
int32_t f8 = f[8];
|
718
826
|
int32_t f9 = f[9];
|
719
|
-
|
720
|
-
int32_t
|
721
|
-
int32_t
|
722
|
-
int32_t
|
723
|
-
int32_t
|
724
|
-
int32_t
|
725
|
-
int32_t
|
726
|
-
int32_t
|
827
|
+
|
828
|
+
int32_t f0_2 = 2 * f0;
|
829
|
+
int32_t f1_2 = 2 * f1;
|
830
|
+
int32_t f2_2 = 2 * f2;
|
831
|
+
int32_t f3_2 = 2 * f3;
|
832
|
+
int32_t f4_2 = 2 * f4;
|
833
|
+
int32_t f5_2 = 2 * f5;
|
834
|
+
int32_t f6_2 = 2 * f6;
|
835
|
+
int32_t f7_2 = 2 * f7;
|
727
836
|
int32_t f5_38 = 38 * f5; /* 1.959375*2^30 */
|
728
837
|
int32_t f6_19 = 19 * f6; /* 1.959375*2^30 */
|
729
838
|
int32_t f7_38 = 38 * f7; /* 1.959375*2^30 */
|
730
839
|
int32_t f8_19 = 19 * f8; /* 1.959375*2^30 */
|
731
840
|
int32_t f9_38 = 38 * f9; /* 1.959375*2^30 */
|
732
|
-
|
841
|
+
|
842
|
+
int64_t f0f0 = f0 * (int64_t) f0;
|
733
843
|
int64_t f0f1_2 = f0_2 * (int64_t) f1;
|
734
844
|
int64_t f0f2_2 = f0_2 * (int64_t) f2;
|
735
845
|
int64_t f0f3_2 = f0_2 * (int64_t) f3;
|
@@ -748,14 +858,14 @@ void fe_sq(fe h,const fe f)
|
|
748
858
|
int64_t f1f7_4 = f1_2 * (int64_t) f7_2;
|
749
859
|
int64_t f1f8_2 = f1_2 * (int64_t) f8;
|
750
860
|
int64_t f1f9_76 = f1_2 * (int64_t) f9_38;
|
751
|
-
int64_t f2f2 = f2
|
861
|
+
int64_t f2f2 = f2 * (int64_t) f2;
|
752
862
|
int64_t f2f3_2 = f2_2 * (int64_t) f3;
|
753
863
|
int64_t f2f4_2 = f2_2 * (int64_t) f4;
|
754
864
|
int64_t f2f5_2 = f2_2 * (int64_t) f5;
|
755
865
|
int64_t f2f6_2 = f2_2 * (int64_t) f6;
|
756
866
|
int64_t f2f7_2 = f2_2 * (int64_t) f7;
|
757
867
|
int64_t f2f8_38 = f2_2 * (int64_t) f8_19;
|
758
|
-
int64_t f2f9_38 = f2
|
868
|
+
int64_t f2f9_38 = f2 * (int64_t) f9_38;
|
759
869
|
int64_t f3f3_2 = f3_2 * (int64_t) f3;
|
760
870
|
int64_t f3f4_2 = f3_2 * (int64_t) f4;
|
761
871
|
int64_t f3f5_4 = f3_2 * (int64_t) f5_2;
|
@@ -763,37 +873,39 @@ void fe_sq(fe h,const fe f)
|
|
763
873
|
int64_t f3f7_76 = f3_2 * (int64_t) f7_38;
|
764
874
|
int64_t f3f8_38 = f3_2 * (int64_t) f8_19;
|
765
875
|
int64_t f3f9_76 = f3_2 * (int64_t) f9_38;
|
766
|
-
int64_t f4f4 = f4
|
876
|
+
int64_t f4f4 = f4 * (int64_t) f4;
|
767
877
|
int64_t f4f5_2 = f4_2 * (int64_t) f5;
|
768
878
|
int64_t f4f6_38 = f4_2 * (int64_t) f6_19;
|
769
|
-
int64_t f4f7_38 = f4
|
879
|
+
int64_t f4f7_38 = f4 * (int64_t) f7_38;
|
770
880
|
int64_t f4f8_38 = f4_2 * (int64_t) f8_19;
|
771
|
-
int64_t f4f9_38 = f4
|
772
|
-
int64_t f5f5_38 = f5
|
881
|
+
int64_t f4f9_38 = f4 * (int64_t) f9_38;
|
882
|
+
int64_t f5f5_38 = f5 * (int64_t) f5_38;
|
773
883
|
int64_t f5f6_38 = f5_2 * (int64_t) f6_19;
|
774
884
|
int64_t f5f7_76 = f5_2 * (int64_t) f7_38;
|
775
885
|
int64_t f5f8_38 = f5_2 * (int64_t) f8_19;
|
776
886
|
int64_t f5f9_76 = f5_2 * (int64_t) f9_38;
|
777
|
-
int64_t f6f6_19 = f6
|
778
|
-
int64_t f6f7_38 = f6
|
887
|
+
int64_t f6f6_19 = f6 * (int64_t) f6_19;
|
888
|
+
int64_t f6f7_38 = f6 * (int64_t) f7_38;
|
779
889
|
int64_t f6f8_38 = f6_2 * (int64_t) f8_19;
|
780
|
-
int64_t f6f9_38 = f6
|
781
|
-
int64_t f7f7_38 = f7
|
890
|
+
int64_t f6f9_38 = f6 * (int64_t) f9_38;
|
891
|
+
int64_t f7f7_38 = f7 * (int64_t) f7_38;
|
782
892
|
int64_t f7f8_38 = f7_2 * (int64_t) f8_19;
|
783
893
|
int64_t f7f9_76 = f7_2 * (int64_t) f9_38;
|
784
|
-
int64_t f8f8_19 = f8
|
785
|
-
int64_t f8f9_38 = f8
|
786
|
-
int64_t f9f9_38 = f9
|
787
|
-
|
788
|
-
int64_t
|
789
|
-
int64_t
|
790
|
-
int64_t
|
791
|
-
int64_t
|
792
|
-
int64_t
|
793
|
-
int64_t
|
794
|
-
int64_t
|
795
|
-
int64_t
|
796
|
-
int64_t
|
894
|
+
int64_t f8f8_19 = f8 * (int64_t) f8_19;
|
895
|
+
int64_t f8f9_38 = f8 * (int64_t) f9_38;
|
896
|
+
int64_t f9f9_38 = f9 * (int64_t) f9_38;
|
897
|
+
|
898
|
+
int64_t h0 = f0f0 + f1f9_76 + f2f8_38 + f3f7_76 + f4f6_38 + f5f5_38;
|
899
|
+
int64_t h1 = f0f1_2 + f2f9_38 + f3f8_38 + f4f7_38 + f5f6_38;
|
900
|
+
int64_t h2 = f0f2_2 + f1f1_2 + f3f9_76 + f4f8_38 + f5f7_76 + f6f6_19;
|
901
|
+
int64_t h3 = f0f3_2 + f1f2_2 + f4f9_38 + f5f8_38 + f6f7_38;
|
902
|
+
int64_t h4 = f0f4_2 + f1f3_4 + f2f2 + f5f9_76 + f6f8_38 + f7f7_38;
|
903
|
+
int64_t h5 = f0f5_2 + f1f4_2 + f2f3_2 + f6f9_38 + f7f8_38;
|
904
|
+
int64_t h6 = f0f6_2 + f1f5_4 + f2f4_2 + f3f3_2 + f7f9_76 + f8f8_19;
|
905
|
+
int64_t h7 = f0f7_2 + f1f6_2 + f2f5_2 + f3f4_2 + f8f9_38;
|
906
|
+
int64_t h8 = f0f8_2 + f1f7_4 + f2f6_2 + f3f5_4 + f4f4 + f9f9_38;
|
907
|
+
int64_t h9 = f0f9_2 + f1f8_2 + f2f7_2 + f3f6_2 + f4f5_2;
|
908
|
+
|
797
909
|
int64_t carry0;
|
798
910
|
int64_t carry1;
|
799
911
|
int64_t carry2;
|
@@ -805,24 +917,48 @@ void fe_sq(fe h,const fe f)
|
|
805
917
|
int64_t carry8;
|
806
918
|
int64_t carry9;
|
807
919
|
|
808
|
-
carry0 = (h0 + (int64_t)
|
809
|
-
|
810
|
-
|
811
|
-
|
812
|
-
|
813
|
-
|
814
|
-
|
815
|
-
|
816
|
-
|
817
|
-
|
818
|
-
|
819
|
-
|
820
|
-
|
821
|
-
|
822
|
-
|
823
|
-
|
824
|
-
|
825
|
-
|
920
|
+
carry0 = (h0 + (int64_t)(1L << 25)) >> 26;
|
921
|
+
h1 += carry0;
|
922
|
+
h0 -= carry0 * ((uint64_t) 1L << 26);
|
923
|
+
carry4 = (h4 + (int64_t)(1L << 25)) >> 26;
|
924
|
+
h5 += carry4;
|
925
|
+
h4 -= carry4 * ((uint64_t) 1L << 26);
|
926
|
+
|
927
|
+
carry1 = (h1 + (int64_t)(1L << 24)) >> 25;
|
928
|
+
h2 += carry1;
|
929
|
+
h1 -= carry1 * ((uint64_t) 1L << 25);
|
930
|
+
carry5 = (h5 + (int64_t)(1L << 24)) >> 25;
|
931
|
+
h6 += carry5;
|
932
|
+
h5 -= carry5 * ((uint64_t) 1L << 25);
|
933
|
+
|
934
|
+
carry2 = (h2 + (int64_t)(1L << 25)) >> 26;
|
935
|
+
h3 += carry2;
|
936
|
+
h2 -= carry2 * ((uint64_t) 1L << 26);
|
937
|
+
carry6 = (h6 + (int64_t)(1L << 25)) >> 26;
|
938
|
+
h7 += carry6;
|
939
|
+
h6 -= carry6 * ((uint64_t) 1L << 26);
|
940
|
+
|
941
|
+
carry3 = (h3 + (int64_t)(1L << 24)) >> 25;
|
942
|
+
h4 += carry3;
|
943
|
+
h3 -= carry3 * ((uint64_t) 1L << 25);
|
944
|
+
carry7 = (h7 + (int64_t)(1L << 24)) >> 25;
|
945
|
+
h8 += carry7;
|
946
|
+
h7 -= carry7 * ((uint64_t) 1L << 25);
|
947
|
+
|
948
|
+
carry4 = (h4 + (int64_t)(1L << 25)) >> 26;
|
949
|
+
h5 += carry4;
|
950
|
+
h4 -= carry4 * ((uint64_t) 1L << 26);
|
951
|
+
carry8 = (h8 + (int64_t)(1L << 25)) >> 26;
|
952
|
+
h9 += carry8;
|
953
|
+
h8 -= carry8 * ((uint64_t) 1L << 26);
|
954
|
+
|
955
|
+
carry9 = (h9 + (int64_t)(1L << 24)) >> 25;
|
956
|
+
h0 += carry9 * 19;
|
957
|
+
h9 -= carry9 * ((uint64_t) 1L << 25);
|
958
|
+
|
959
|
+
carry0 = (h0 + (int64_t)(1L << 25)) >> 26;
|
960
|
+
h1 += carry0;
|
961
|
+
h0 -= carry0 * ((uint64_t) 1L << 26);
|
826
962
|
|
827
963
|
h[0] = (int32_t) h0;
|
828
964
|
h[1] = (int32_t) h1;
|
@@ -851,7 +987,8 @@ void fe_sq(fe h,const fe f)
|
|
851
987
|
See fe_mul.c for discussion of implementation strategy.
|
852
988
|
*/
|
853
989
|
|
854
|
-
void
|
990
|
+
void
|
991
|
+
fe_sq2(fe h, const fe f)
|
855
992
|
{
|
856
993
|
int32_t f0 = f[0];
|
857
994
|
int32_t f1 = f[1];
|
@@ -863,20 +1000,22 @@ void fe_sq2(fe h,const fe f)
|
|
863
1000
|
int32_t f7 = f[7];
|
864
1001
|
int32_t f8 = f[8];
|
865
1002
|
int32_t f9 = f[9];
|
866
|
-
|
867
|
-
int32_t
|
868
|
-
int32_t
|
869
|
-
int32_t
|
870
|
-
int32_t
|
871
|
-
int32_t
|
872
|
-
int32_t
|
873
|
-
int32_t
|
1003
|
+
|
1004
|
+
int32_t f0_2 = 2 * f0;
|
1005
|
+
int32_t f1_2 = 2 * f1;
|
1006
|
+
int32_t f2_2 = 2 * f2;
|
1007
|
+
int32_t f3_2 = 2 * f3;
|
1008
|
+
int32_t f4_2 = 2 * f4;
|
1009
|
+
int32_t f5_2 = 2 * f5;
|
1010
|
+
int32_t f6_2 = 2 * f6;
|
1011
|
+
int32_t f7_2 = 2 * f7;
|
874
1012
|
int32_t f5_38 = 38 * f5; /* 1.959375*2^30 */
|
875
1013
|
int32_t f6_19 = 19 * f6; /* 1.959375*2^30 */
|
876
1014
|
int32_t f7_38 = 38 * f7; /* 1.959375*2^30 */
|
877
1015
|
int32_t f8_19 = 19 * f8; /* 1.959375*2^30 */
|
878
1016
|
int32_t f9_38 = 38 * f9; /* 1.959375*2^30 */
|
879
|
-
|
1017
|
+
|
1018
|
+
int64_t f0f0 = f0 * (int64_t) f0;
|
880
1019
|
int64_t f0f1_2 = f0_2 * (int64_t) f1;
|
881
1020
|
int64_t f0f2_2 = f0_2 * (int64_t) f2;
|
882
1021
|
int64_t f0f3_2 = f0_2 * (int64_t) f3;
|
@@ -895,14 +1034,14 @@ void fe_sq2(fe h,const fe f)
|
|
895
1034
|
int64_t f1f7_4 = f1_2 * (int64_t) f7_2;
|
896
1035
|
int64_t f1f8_2 = f1_2 * (int64_t) f8;
|
897
1036
|
int64_t f1f9_76 = f1_2 * (int64_t) f9_38;
|
898
|
-
int64_t f2f2 = f2
|
1037
|
+
int64_t f2f2 = f2 * (int64_t) f2;
|
899
1038
|
int64_t f2f3_2 = f2_2 * (int64_t) f3;
|
900
1039
|
int64_t f2f4_2 = f2_2 * (int64_t) f4;
|
901
1040
|
int64_t f2f5_2 = f2_2 * (int64_t) f5;
|
902
1041
|
int64_t f2f6_2 = f2_2 * (int64_t) f6;
|
903
1042
|
int64_t f2f7_2 = f2_2 * (int64_t) f7;
|
904
1043
|
int64_t f2f8_38 = f2_2 * (int64_t) f8_19;
|
905
|
-
int64_t f2f9_38 = f2
|
1044
|
+
int64_t f2f9_38 = f2 * (int64_t) f9_38;
|
906
1045
|
int64_t f3f3_2 = f3_2 * (int64_t) f3;
|
907
1046
|
int64_t f3f4_2 = f3_2 * (int64_t) f4;
|
908
1047
|
int64_t f3f5_4 = f3_2 * (int64_t) f5_2;
|
@@ -910,37 +1049,39 @@ void fe_sq2(fe h,const fe f)
|
|
910
1049
|
int64_t f3f7_76 = f3_2 * (int64_t) f7_38;
|
911
1050
|
int64_t f3f8_38 = f3_2 * (int64_t) f8_19;
|
912
1051
|
int64_t f3f9_76 = f3_2 * (int64_t) f9_38;
|
913
|
-
int64_t f4f4 = f4
|
1052
|
+
int64_t f4f4 = f4 * (int64_t) f4;
|
914
1053
|
int64_t f4f5_2 = f4_2 * (int64_t) f5;
|
915
1054
|
int64_t f4f6_38 = f4_2 * (int64_t) f6_19;
|
916
|
-
int64_t f4f7_38 = f4
|
1055
|
+
int64_t f4f7_38 = f4 * (int64_t) f7_38;
|
917
1056
|
int64_t f4f8_38 = f4_2 * (int64_t) f8_19;
|
918
|
-
int64_t f4f9_38 = f4
|
919
|
-
int64_t f5f5_38 = f5
|
1057
|
+
int64_t f4f9_38 = f4 * (int64_t) f9_38;
|
1058
|
+
int64_t f5f5_38 = f5 * (int64_t) f5_38;
|
920
1059
|
int64_t f5f6_38 = f5_2 * (int64_t) f6_19;
|
921
1060
|
int64_t f5f7_76 = f5_2 * (int64_t) f7_38;
|
922
1061
|
int64_t f5f8_38 = f5_2 * (int64_t) f8_19;
|
923
1062
|
int64_t f5f9_76 = f5_2 * (int64_t) f9_38;
|
924
|
-
int64_t f6f6_19 = f6
|
925
|
-
int64_t f6f7_38 = f6
|
1063
|
+
int64_t f6f6_19 = f6 * (int64_t) f6_19;
|
1064
|
+
int64_t f6f7_38 = f6 * (int64_t) f7_38;
|
926
1065
|
int64_t f6f8_38 = f6_2 * (int64_t) f8_19;
|
927
|
-
int64_t f6f9_38 = f6
|
928
|
-
int64_t f7f7_38 = f7
|
1066
|
+
int64_t f6f9_38 = f6 * (int64_t) f9_38;
|
1067
|
+
int64_t f7f7_38 = f7 * (int64_t) f7_38;
|
929
1068
|
int64_t f7f8_38 = f7_2 * (int64_t) f8_19;
|
930
1069
|
int64_t f7f9_76 = f7_2 * (int64_t) f9_38;
|
931
|
-
int64_t f8f8_19 = f8
|
932
|
-
int64_t f8f9_38 = f8
|
933
|
-
int64_t f9f9_38 = f9
|
934
|
-
|
935
|
-
int64_t
|
936
|
-
int64_t
|
937
|
-
int64_t
|
938
|
-
int64_t
|
939
|
-
int64_t
|
940
|
-
int64_t
|
941
|
-
int64_t
|
942
|
-
int64_t
|
943
|
-
int64_t
|
1070
|
+
int64_t f8f8_19 = f8 * (int64_t) f8_19;
|
1071
|
+
int64_t f8f9_38 = f8 * (int64_t) f9_38;
|
1072
|
+
int64_t f9f9_38 = f9 * (int64_t) f9_38;
|
1073
|
+
|
1074
|
+
int64_t h0 = f0f0 + f1f9_76 + f2f8_38 + f3f7_76 + f4f6_38 + f5f5_38;
|
1075
|
+
int64_t h1 = f0f1_2 + f2f9_38 + f3f8_38 + f4f7_38 + f5f6_38;
|
1076
|
+
int64_t h2 = f0f2_2 + f1f1_2 + f3f9_76 + f4f8_38 + f5f7_76 + f6f6_19;
|
1077
|
+
int64_t h3 = f0f3_2 + f1f2_2 + f4f9_38 + f5f8_38 + f6f7_38;
|
1078
|
+
int64_t h4 = f0f4_2 + f1f3_4 + f2f2 + f5f9_76 + f6f8_38 + f7f7_38;
|
1079
|
+
int64_t h5 = f0f5_2 + f1f4_2 + f2f3_2 + f6f9_38 + f7f8_38;
|
1080
|
+
int64_t h6 = f0f6_2 + f1f5_4 + f2f4_2 + f3f3_2 + f7f9_76 + f8f8_19;
|
1081
|
+
int64_t h7 = f0f7_2 + f1f6_2 + f2f5_2 + f3f4_2 + f8f9_38;
|
1082
|
+
int64_t h8 = f0f8_2 + f1f7_4 + f2f6_2 + f3f5_4 + f4f4 + f9f9_38;
|
1083
|
+
int64_t h9 = f0f9_2 + f1f8_2 + f2f7_2 + f3f6_2 + f4f5_2;
|
1084
|
+
|
944
1085
|
int64_t carry0;
|
945
1086
|
int64_t carry1;
|
946
1087
|
int64_t carry2;
|
@@ -963,24 +1104,48 @@ void fe_sq2(fe h,const fe f)
|
|
963
1104
|
h8 += h8;
|
964
1105
|
h9 += h9;
|
965
1106
|
|
966
|
-
carry0 = (h0 + (int64_t)
|
967
|
-
|
968
|
-
|
969
|
-
|
970
|
-
|
971
|
-
|
972
|
-
|
973
|
-
|
974
|
-
|
975
|
-
|
976
|
-
|
977
|
-
|
978
|
-
|
979
|
-
|
980
|
-
|
981
|
-
|
982
|
-
|
983
|
-
|
1107
|
+
carry0 = (h0 + (int64_t)(1L << 25)) >> 26;
|
1108
|
+
h1 += carry0;
|
1109
|
+
h0 -= carry0 * ((uint64_t) 1L << 26);
|
1110
|
+
carry4 = (h4 + (int64_t)(1L << 25)) >> 26;
|
1111
|
+
h5 += carry4;
|
1112
|
+
h4 -= carry4 * ((uint64_t) 1L << 26);
|
1113
|
+
|
1114
|
+
carry1 = (h1 + (int64_t)(1L << 24)) >> 25;
|
1115
|
+
h2 += carry1;
|
1116
|
+
h1 -= carry1 * ((uint64_t) 1L << 25);
|
1117
|
+
carry5 = (h5 + (int64_t)(1L << 24)) >> 25;
|
1118
|
+
h6 += carry5;
|
1119
|
+
h5 -= carry5 * ((uint64_t) 1L << 25);
|
1120
|
+
|
1121
|
+
carry2 = (h2 + (int64_t)(1L << 25)) >> 26;
|
1122
|
+
h3 += carry2;
|
1123
|
+
h2 -= carry2 * ((uint64_t) 1L << 26);
|
1124
|
+
carry6 = (h6 + (int64_t)(1L << 25)) >> 26;
|
1125
|
+
h7 += carry6;
|
1126
|
+
h6 -= carry6 * ((uint64_t) 1L << 26);
|
1127
|
+
|
1128
|
+
carry3 = (h3 + (int64_t)(1L << 24)) >> 25;
|
1129
|
+
h4 += carry3;
|
1130
|
+
h3 -= carry3 * ((uint64_t) 1L << 25);
|
1131
|
+
carry7 = (h7 + (int64_t)(1L << 24)) >> 25;
|
1132
|
+
h8 += carry7;
|
1133
|
+
h7 -= carry7 * ((uint64_t) 1L << 25);
|
1134
|
+
|
1135
|
+
carry4 = (h4 + (int64_t)(1L << 25)) >> 26;
|
1136
|
+
h5 += carry4;
|
1137
|
+
h4 -= carry4 * ((uint64_t) 1L << 26);
|
1138
|
+
carry8 = (h8 + (int64_t)(1L << 25)) >> 26;
|
1139
|
+
h9 += carry8;
|
1140
|
+
h8 -= carry8 * ((uint64_t) 1L << 26);
|
1141
|
+
|
1142
|
+
carry9 = (h9 + (int64_t)(1L << 24)) >> 25;
|
1143
|
+
h0 += carry9 * 19;
|
1144
|
+
h9 -= carry9 * ((uint64_t) 1L << 25);
|
1145
|
+
|
1146
|
+
carry0 = (h0 + (int64_t)(1L << 25)) >> 26;
|
1147
|
+
h1 += carry0;
|
1148
|
+
h0 -= carry0 * ((uint64_t) 1L << 26);
|
984
1149
|
|
985
1150
|
h[0] = (int32_t) h0;
|
986
1151
|
h[1] = (int32_t) h1;
|
@@ -994,12 +1159,13 @@ void fe_sq2(fe h,const fe f)
|
|
994
1159
|
h[9] = (int32_t) h9;
|
995
1160
|
}
|
996
1161
|
|
997
|
-
void
|
1162
|
+
void
|
1163
|
+
fe_invert(fe out, const fe z)
|
998
1164
|
{
|
999
|
-
fe
|
1000
|
-
fe
|
1001
|
-
fe
|
1002
|
-
fe
|
1165
|
+
fe t0;
|
1166
|
+
fe t1;
|
1167
|
+
fe t2;
|
1168
|
+
fe t3;
|
1003
1169
|
int i;
|
1004
1170
|
|
1005
1171
|
fe_sq(t0, z);
|
@@ -1051,11 +1217,12 @@ void fe_invert(fe out,const fe z)
|
|
1051
1217
|
fe_mul(out, t1, t0);
|
1052
1218
|
}
|
1053
1219
|
|
1054
|
-
void
|
1220
|
+
void
|
1221
|
+
fe_pow22523(fe out, const fe z)
|
1055
1222
|
{
|
1056
|
-
fe
|
1057
|
-
fe
|
1058
|
-
fe
|
1223
|
+
fe t0;
|
1224
|
+
fe t1;
|
1225
|
+
fe t2;
|
1059
1226
|
int i;
|
1060
1227
|
|
1061
1228
|
fe_sq(t0, z);
|
@@ -1117,7 +1284,8 @@ void fe_pow22523(fe out,const fe z)
|
|
1117
1284
|
|h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
|
1118
1285
|
*/
|
1119
1286
|
|
1120
|
-
void
|
1287
|
+
void
|
1288
|
+
fe_sub(fe h, const fe f, const fe g)
|
1121
1289
|
{
|
1122
1290
|
int32_t f0 = f[0];
|
1123
1291
|
int32_t f1 = f[1];
|
@@ -1139,6 +1307,7 @@ void fe_sub(fe h,const fe f,const fe g)
|
|
1139
1307
|
int32_t g7 = g[7];
|
1140
1308
|
int32_t g8 = g[8];
|
1141
1309
|
int32_t g9 = g[9];
|
1310
|
+
|
1142
1311
|
int32_t h0 = f0 - g0;
|
1143
1312
|
int32_t h1 = f1 - g1;
|
1144
1313
|
int32_t h2 = f2 - g2;
|
@@ -1149,6 +1318,7 @@ void fe_sub(fe h,const fe f,const fe g)
|
|
1149
1318
|
int32_t h7 = f7 - g7;
|
1150
1319
|
int32_t h8 = f8 - g8;
|
1151
1320
|
int32_t h9 = f9 - g9;
|
1321
|
+
|
1152
1322
|
h[0] = h0;
|
1153
1323
|
h[1] = h1;
|
1154
1324
|
h[2] = h2;
|
@@ -1165,7 +1335,8 @@ void fe_sub(fe h,const fe f,const fe g)
|
|
1165
1335
|
r = p + q
|
1166
1336
|
*/
|
1167
1337
|
|
1168
|
-
void
|
1338
|
+
void
|
1339
|
+
ge_add(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q)
|
1169
1340
|
{
|
1170
1341
|
fe t0;
|
1171
1342
|
|
@@ -1182,53 +1353,63 @@ void ge_add(ge_p1p1 *r,const ge_p3 *p,const ge_cached *q)
|
|
1182
1353
|
fe_sub(r->T, t0, r->T);
|
1183
1354
|
}
|
1184
1355
|
|
1185
|
-
static void
|
1356
|
+
static void
|
1357
|
+
slide(signed char *r, const unsigned char *a)
|
1186
1358
|
{
|
1187
1359
|
int i;
|
1188
1360
|
int b;
|
1189
1361
|
int k;
|
1362
|
+
int ribs;
|
1363
|
+
int cmp;
|
1190
1364
|
|
1191
|
-
for (i = 0;i < 256
|
1365
|
+
for (i = 0; i < 256; ++i) {
|
1192
1366
|
r[i] = 1 & (a[i >> 3] >> (i & 7));
|
1193
|
-
|
1194
|
-
for (i = 0;i < 256
|
1367
|
+
}
|
1368
|
+
for (i = 0; i < 256; ++i) {
|
1195
1369
|
if (r[i]) {
|
1196
|
-
for (b = 1;b <= 6 && i + b < 256
|
1370
|
+
for (b = 1; b <= 6 && i + b < 256; ++b) {
|
1197
1371
|
if (r[i + b]) {
|
1198
|
-
|
1199
|
-
|
1200
|
-
|
1201
|
-
r[i]
|
1202
|
-
|
1203
|
-
|
1204
|
-
|
1205
|
-
|
1372
|
+
ribs = r[i + b] << b;
|
1373
|
+
cmp = r[i] + ribs;
|
1374
|
+
if (cmp <= 15) {
|
1375
|
+
r[i] = cmp;
|
1376
|
+
r[i + b] = 0;
|
1377
|
+
} else {
|
1378
|
+
cmp = r[i] - ribs;
|
1379
|
+
if (cmp >= -15) {
|
1380
|
+
r[i] = cmp;
|
1381
|
+
for (k = i + b; k < 256; ++k) {
|
1382
|
+
if (!r[k]) {
|
1383
|
+
r[k] = 1;
|
1384
|
+
break;
|
1385
|
+
}
|
1386
|
+
r[k] = 0;
|
1206
1387
|
}
|
1207
|
-
|
1388
|
+
} else {
|
1389
|
+
break;
|
1208
1390
|
}
|
1209
|
-
}
|
1210
|
-
break;
|
1391
|
+
}
|
1211
1392
|
}
|
1212
1393
|
}
|
1213
1394
|
}
|
1214
|
-
|
1395
|
+
}
|
1215
1396
|
}
|
1216
1397
|
|
1217
1398
|
static const ge_precomp Bi[8] = {
|
1218
1399
|
#include "base2.h"
|
1219
1400
|
};
|
1220
1401
|
|
1221
|
-
/* 37095705934669439343138083508754565189542113879843219016388785533085940283555
|
1222
|
-
|
1223
|
-
|
1224
|
-
};
|
1402
|
+
/* 37095705934669439343138083508754565189542113879843219016388785533085940283555
|
1403
|
+
*/
|
1404
|
+
static const fe d = { -10913610, 13857413, -15372611, 6949391, 114729,
|
1405
|
+
-8787816, -6275908, -3247719, -18696448, -12055116 };
|
1225
1406
|
|
1226
1407
|
/* sqrt(-1) */
|
1227
|
-
static const fe sqrtm1 = {
|
1228
|
-
|
1229
|
-
};
|
1408
|
+
static const fe sqrtm1 = { -32595792, -7943725, 9377950, 3500415, 12389472,
|
1409
|
+
-272473, -25146209, -2005654, 326686, 11406482 };
|
1230
1410
|
|
1231
|
-
int
|
1411
|
+
int
|
1412
|
+
ge_frombytes_negate_vartime(ge_p3 *h, const unsigned char *s)
|
1232
1413
|
{
|
1233
1414
|
fe u;
|
1234
1415
|
fe v;
|
@@ -1236,38 +1417,38 @@ int ge_frombytes_negate_vartime(ge_p3 *h,const unsigned char *s)
|
|
1236
1417
|
fe vxx;
|
1237
1418
|
fe check;
|
1238
1419
|
|
1239
|
-
fe_frombytes(h->Y,s);
|
1420
|
+
fe_frombytes(h->Y, s);
|
1240
1421
|
fe_1(h->Z);
|
1241
|
-
fe_sq(u,h->Y);
|
1242
|
-
fe_mul(v,u,d);
|
1243
|
-
fe_sub(u,u,h->Z);
|
1244
|
-
fe_add(v,v,h->Z);
|
1245
|
-
|
1246
|
-
fe_sq(v3,v);
|
1247
|
-
fe_mul(v3,v3,v);
|
1248
|
-
fe_sq(h->X,v3);
|
1249
|
-
fe_mul(h->X,h->X,v);
|
1250
|
-
fe_mul(h->X,h->X,u);
|
1251
|
-
|
1252
|
-
fe_pow22523(h->X,h->X); /* x = (uv^7)^((q-5)/8) */
|
1253
|
-
fe_mul(h->X,h->X,v3);
|
1254
|
-
fe_mul(h->X,h->X,u);
|
1255
|
-
|
1256
|
-
fe_sq(vxx,h->X);
|
1257
|
-
fe_mul(vxx,vxx,v);
|
1258
|
-
fe_sub(check,vxx,u);
|
1422
|
+
fe_sq(u, h->Y);
|
1423
|
+
fe_mul(v, u, d);
|
1424
|
+
fe_sub(u, u, h->Z); /* u = y^2-1 */
|
1425
|
+
fe_add(v, v, h->Z); /* v = dy^2+1 */
|
1426
|
+
|
1427
|
+
fe_sq(v3, v);
|
1428
|
+
fe_mul(v3, v3, v); /* v3 = v^3 */
|
1429
|
+
fe_sq(h->X, v3);
|
1430
|
+
fe_mul(h->X, h->X, v);
|
1431
|
+
fe_mul(h->X, h->X, u); /* x = uv^7 */
|
1432
|
+
|
1433
|
+
fe_pow22523(h->X, h->X); /* x = (uv^7)^((q-5)/8) */
|
1434
|
+
fe_mul(h->X, h->X, v3);
|
1435
|
+
fe_mul(h->X, h->X, u); /* x = uv^3(uv^7)^((q-5)/8) */
|
1436
|
+
|
1437
|
+
fe_sq(vxx, h->X);
|
1438
|
+
fe_mul(vxx, vxx, v);
|
1439
|
+
fe_sub(check, vxx, u); /* vx^2-u */
|
1259
1440
|
if (fe_isnonzero(check)) {
|
1260
|
-
fe_add(check,vxx,u);
|
1441
|
+
fe_add(check, vxx, u); /* vx^2+u */
|
1261
1442
|
if (fe_isnonzero(check)) {
|
1262
1443
|
return -1;
|
1263
1444
|
}
|
1264
|
-
fe_mul(h->X,h->X,sqrtm1);
|
1445
|
+
fe_mul(h->X, h->X, sqrtm1);
|
1265
1446
|
}
|
1266
1447
|
|
1267
1448
|
if (fe_isnegative(h->X) == (s[31] >> 7)) {
|
1268
|
-
fe_neg(h->X,h->X);
|
1449
|
+
fe_neg(h->X, h->X);
|
1269
1450
|
}
|
1270
|
-
fe_mul(h->T,h->X,h->Y);
|
1451
|
+
fe_mul(h->T, h->X, h->Y);
|
1271
1452
|
|
1272
1453
|
return 0;
|
1273
1454
|
}
|
@@ -1276,7 +1457,8 @@ int ge_frombytes_negate_vartime(ge_p3 *h,const unsigned char *s)
|
|
1276
1457
|
r = p + q
|
1277
1458
|
*/
|
1278
1459
|
|
1279
|
-
void
|
1460
|
+
void
|
1461
|
+
ge_madd(ge_p1p1 *r, const ge_p3 *p, const ge_precomp *q)
|
1280
1462
|
{
|
1281
1463
|
fe t0;
|
1282
1464
|
|
@@ -1296,7 +1478,8 @@ void ge_madd(ge_p1p1 *r,const ge_p3 *p,const ge_precomp *q)
|
|
1296
1478
|
r = p - q
|
1297
1479
|
*/
|
1298
1480
|
|
1299
|
-
void
|
1481
|
+
void
|
1482
|
+
ge_msub(ge_p1p1 *r, const ge_p3 *p, const ge_precomp *q)
|
1300
1483
|
{
|
1301
1484
|
fe t0;
|
1302
1485
|
|
@@ -1316,26 +1499,29 @@ void ge_msub(ge_p1p1 *r,const ge_p3 *p,const ge_precomp *q)
|
|
1316
1499
|
r = p
|
1317
1500
|
*/
|
1318
1501
|
|
1319
|
-
extern void
|
1502
|
+
extern void
|
1503
|
+
ge_p1p1_to_p2(ge_p2 *r, const ge_p1p1 *p)
|
1320
1504
|
{
|
1321
|
-
fe_mul(r->X,p->X,p->T);
|
1322
|
-
fe_mul(r->Y,p->Y,p->Z);
|
1323
|
-
fe_mul(r->Z,p->Z,p->T);
|
1505
|
+
fe_mul(r->X, p->X, p->T);
|
1506
|
+
fe_mul(r->Y, p->Y, p->Z);
|
1507
|
+
fe_mul(r->Z, p->Z, p->T);
|
1324
1508
|
}
|
1325
1509
|
|
1326
1510
|
/*
|
1327
1511
|
r = p
|
1328
1512
|
*/
|
1329
1513
|
|
1330
|
-
extern void
|
1514
|
+
extern void
|
1515
|
+
ge_p1p1_to_p3(ge_p3 *r, const ge_p1p1 *p)
|
1331
1516
|
{
|
1332
|
-
fe_mul(r->X,p->X,p->T);
|
1333
|
-
fe_mul(r->Y,p->Y,p->Z);
|
1334
|
-
fe_mul(r->Z,p->Z,p->T);
|
1335
|
-
fe_mul(r->T,p->X,p->Y);
|
1517
|
+
fe_mul(r->X, p->X, p->T);
|
1518
|
+
fe_mul(r->Y, p->Y, p->Z);
|
1519
|
+
fe_mul(r->Z, p->Z, p->T);
|
1520
|
+
fe_mul(r->T, p->X, p->Y);
|
1336
1521
|
}
|
1337
1522
|
|
1338
|
-
void
|
1523
|
+
void
|
1524
|
+
ge_p2_0(ge_p2 *h)
|
1339
1525
|
{
|
1340
1526
|
fe_0(h->X);
|
1341
1527
|
fe_1(h->Y);
|
@@ -1346,7 +1532,8 @@ void ge_p2_0(ge_p2 *h)
|
|
1346
1532
|
r = 2 * p
|
1347
1533
|
*/
|
1348
1534
|
|
1349
|
-
void
|
1535
|
+
void
|
1536
|
+
ge_p2_dbl(ge_p1p1 *r, const ge_p2 *p)
|
1350
1537
|
{
|
1351
1538
|
fe t0;
|
1352
1539
|
|
@@ -1361,7 +1548,8 @@ void ge_p2_dbl(ge_p1p1 *r,const ge_p2 *p)
|
|
1361
1548
|
fe_sub(r->T, r->T, r->Z);
|
1362
1549
|
}
|
1363
1550
|
|
1364
|
-
void
|
1551
|
+
void
|
1552
|
+
ge_p3_0(ge_p3 *h)
|
1365
1553
|
{
|
1366
1554
|
fe_0(h->X);
|
1367
1555
|
fe_1(h->Y);
|
@@ -1373,40 +1561,44 @@ void ge_p3_0(ge_p3 *h)
|
|
1373
1561
|
r = p
|
1374
1562
|
*/
|
1375
1563
|
|
1376
|
-
/* 2 * d =
|
1377
|
-
|
1378
|
-
|
1379
|
-
|
1564
|
+
/* 2 * d =
|
1565
|
+
* 16295367250680780974490674513165176452449235426866156013048779062215315747161
|
1566
|
+
*/
|
1567
|
+
static const fe d2 = { -21827239, -5839606, -30745221, 13898782, 229458,
|
1568
|
+
15978800, -12551817, -6495438, 29715968, 9444199 };
|
1380
1569
|
|
1381
|
-
extern void
|
1570
|
+
extern void
|
1571
|
+
ge_p3_to_cached(ge_cached *r, const ge_p3 *p)
|
1382
1572
|
{
|
1383
|
-
fe_add(r->YplusX,p->Y,p->X);
|
1384
|
-
fe_sub(r->YminusX,p->Y,p->X);
|
1385
|
-
fe_copy(r->Z,p->Z);
|
1386
|
-
fe_mul(r->T2d,p->T,d2);
|
1573
|
+
fe_add(r->YplusX, p->Y, p->X);
|
1574
|
+
fe_sub(r->YminusX, p->Y, p->X);
|
1575
|
+
fe_copy(r->Z, p->Z);
|
1576
|
+
fe_mul(r->T2d, p->T, d2);
|
1387
1577
|
}
|
1388
1578
|
|
1389
1579
|
/*
|
1390
1580
|
r = p
|
1391
1581
|
*/
|
1392
1582
|
|
1393
|
-
extern void
|
1583
|
+
extern void
|
1584
|
+
ge_p3_to_p2(ge_p2 *r, const ge_p3 *p)
|
1394
1585
|
{
|
1395
|
-
fe_copy(r->X,p->X);
|
1396
|
-
fe_copy(r->Y,p->Y);
|
1397
|
-
fe_copy(r->Z,p->Z);
|
1586
|
+
fe_copy(r->X, p->X);
|
1587
|
+
fe_copy(r->Y, p->Y);
|
1588
|
+
fe_copy(r->Z, p->Z);
|
1398
1589
|
}
|
1399
1590
|
|
1400
|
-
void
|
1591
|
+
void
|
1592
|
+
ge_p3_tobytes(unsigned char *s, const ge_p3 *h)
|
1401
1593
|
{
|
1402
1594
|
fe recip;
|
1403
1595
|
fe x;
|
1404
1596
|
fe y;
|
1405
1597
|
|
1406
|
-
fe_invert(recip,h->Z);
|
1407
|
-
fe_mul(x,h->X,recip);
|
1408
|
-
fe_mul(y,h->Y,recip);
|
1409
|
-
fe_tobytes(s,y);
|
1598
|
+
fe_invert(recip, h->Z);
|
1599
|
+
fe_mul(x, h->X, recip);
|
1600
|
+
fe_mul(y, h->Y, recip);
|
1601
|
+
fe_tobytes(s, y);
|
1410
1602
|
s[31] ^= fe_isnegative(x) << 7;
|
1411
1603
|
}
|
1412
1604
|
|
@@ -1414,45 +1606,53 @@ void ge_p3_tobytes(unsigned char *s,const ge_p3 *h)
|
|
1414
1606
|
r = 2 * p
|
1415
1607
|
*/
|
1416
1608
|
|
1417
|
-
void
|
1609
|
+
void
|
1610
|
+
ge_p3_dbl(ge_p1p1 *r, const ge_p3 *p)
|
1418
1611
|
{
|
1419
1612
|
ge_p2 q;
|
1420
|
-
ge_p3_to_p2(&q,p);
|
1421
|
-
ge_p2_dbl(r
|
1613
|
+
ge_p3_to_p2(&q, p);
|
1614
|
+
ge_p2_dbl(r, &q);
|
1422
1615
|
}
|
1423
1616
|
|
1424
|
-
void
|
1617
|
+
void
|
1618
|
+
ge_precomp_0(ge_precomp *h)
|
1425
1619
|
{
|
1426
1620
|
fe_1(h->yplusx);
|
1427
1621
|
fe_1(h->yminusx);
|
1428
1622
|
fe_0(h->xy2d);
|
1429
1623
|
}
|
1430
1624
|
|
1431
|
-
static unsigned char
|
1625
|
+
static unsigned char
|
1626
|
+
equal(signed char b, signed char c)
|
1432
1627
|
{
|
1433
1628
|
unsigned char ub = b;
|
1434
1629
|
unsigned char uc = c;
|
1435
|
-
unsigned char x
|
1436
|
-
uint32_t
|
1437
|
-
|
1630
|
+
unsigned char x = ub ^ uc; /* 0: yes; 1..255: no */
|
1631
|
+
uint32_t y = x; /* 0: yes; 1..255: no */
|
1632
|
+
|
1633
|
+
y -= 1; /* 4294967295: yes; 0..254: no */
|
1438
1634
|
y >>= 31; /* 1: yes; 0: no */
|
1439
1635
|
|
1440
1636
|
return y;
|
1441
1637
|
}
|
1442
1638
|
|
1443
|
-
static unsigned char
|
1639
|
+
static unsigned char
|
1640
|
+
negative(signed char b)
|
1444
1641
|
{
|
1445
|
-
uint64_t x =
|
1642
|
+
uint64_t x =
|
1643
|
+
b; /* 18446744073709551361..18446744073709551615: yes; 0..255: no */
|
1644
|
+
|
1446
1645
|
x >>= 63; /* 1: yes; 0: no */
|
1447
1646
|
|
1448
1647
|
return x;
|
1449
1648
|
}
|
1450
1649
|
|
1451
|
-
static void
|
1650
|
+
static void
|
1651
|
+
cmov(ge_precomp *t, const ge_precomp *u, unsigned char b)
|
1452
1652
|
{
|
1453
|
-
fe_cmov(t->yplusx,u->yplusx,b);
|
1454
|
-
fe_cmov(t->yminusx,u->yminusx,b);
|
1455
|
-
fe_cmov(t->xy2d,u->xy2d,b);
|
1653
|
+
fe_cmov(t->yplusx, u->yplusx, b);
|
1654
|
+
fe_cmov(t->yminusx, u->yminusx, b);
|
1655
|
+
fe_cmov(t->xy2d, u->xy2d, b);
|
1456
1656
|
}
|
1457
1657
|
|
1458
1658
|
/* base[i][j] = (j+1)*256^i*B */
|
@@ -1460,32 +1660,34 @@ static const ge_precomp base[32][8] = {
|
|
1460
1660
|
#include "base.h"
|
1461
1661
|
};
|
1462
1662
|
|
1463
|
-
static void
|
1663
|
+
static void
|
1664
|
+
ge_select(ge_precomp *t, int pos, signed char b)
|
1464
1665
|
{
|
1465
|
-
ge_precomp
|
1666
|
+
ge_precomp minust;
|
1466
1667
|
unsigned char bnegative = negative(b);
|
1467
|
-
unsigned char babs
|
1668
|
+
unsigned char babs = b - (((-bnegative) & b) * ((signed char) 1 << 1));
|
1468
1669
|
|
1469
1670
|
ge_precomp_0(t);
|
1470
|
-
cmov(t
|
1471
|
-
cmov(t
|
1472
|
-
cmov(t
|
1473
|
-
cmov(t
|
1474
|
-
cmov(t
|
1475
|
-
cmov(t
|
1476
|
-
cmov(t
|
1477
|
-
cmov(t
|
1478
|
-
fe_copy(minust.yplusx,t->yminusx);
|
1479
|
-
fe_copy(minust.yminusx,t->yplusx);
|
1480
|
-
fe_neg(minust.xy2d,t->xy2d);
|
1481
|
-
cmov(t
|
1671
|
+
cmov(t, &base[pos][0], equal(babs, 1));
|
1672
|
+
cmov(t, &base[pos][1], equal(babs, 2));
|
1673
|
+
cmov(t, &base[pos][2], equal(babs, 3));
|
1674
|
+
cmov(t, &base[pos][3], equal(babs, 4));
|
1675
|
+
cmov(t, &base[pos][4], equal(babs, 5));
|
1676
|
+
cmov(t, &base[pos][5], equal(babs, 6));
|
1677
|
+
cmov(t, &base[pos][6], equal(babs, 7));
|
1678
|
+
cmov(t, &base[pos][7], equal(babs, 8));
|
1679
|
+
fe_copy(minust.yplusx, t->yminusx);
|
1680
|
+
fe_copy(minust.yminusx, t->yplusx);
|
1681
|
+
fe_neg(minust.xy2d, t->xy2d);
|
1682
|
+
cmov(t, &minust, bnegative);
|
1482
1683
|
}
|
1483
1684
|
|
1484
1685
|
/*
|
1485
1686
|
r = p - q
|
1486
1687
|
*/
|
1487
1688
|
|
1488
|
-
void
|
1689
|
+
void
|
1690
|
+
ge_sub(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q)
|
1489
1691
|
{
|
1490
1692
|
fe t0;
|
1491
1693
|
|
@@ -1502,16 +1704,17 @@ void ge_sub(ge_p1p1 *r,const ge_p3 *p,const ge_cached *q)
|
|
1502
1704
|
fe_add(r->T, t0, r->T);
|
1503
1705
|
}
|
1504
1706
|
|
1505
|
-
void
|
1707
|
+
void
|
1708
|
+
ge_tobytes(unsigned char *s, const ge_p2 *h)
|
1506
1709
|
{
|
1507
1710
|
fe recip;
|
1508
1711
|
fe x;
|
1509
1712
|
fe y;
|
1510
1713
|
|
1511
|
-
fe_invert(recip,h->Z);
|
1512
|
-
fe_mul(x,h->X,recip);
|
1513
|
-
fe_mul(y,h->Y,recip);
|
1514
|
-
fe_tobytes(s,y);
|
1714
|
+
fe_invert(recip, h->Z);
|
1715
|
+
fe_mul(x, h->X, recip);
|
1716
|
+
fe_mul(y, h->Y, recip);
|
1717
|
+
fe_tobytes(s, y);
|
1515
1718
|
s[31] ^= fe_isnegative(x) << 7;
|
1516
1719
|
}
|
1517
1720
|
|
@@ -1531,110 +1734,146 @@ void ge_tobytes(unsigned char *s,const ge_p2 *h)
|
|
1531
1734
|
B is the Ed25519 base point (x,4/5) with x positive.
|
1532
1735
|
*/
|
1533
1736
|
|
1534
|
-
void
|
1737
|
+
void
|
1738
|
+
ge_double_scalarmult_vartime(ge_p2 *r, const unsigned char *a, const ge_p3 *A,
|
1739
|
+
const unsigned char *b)
|
1535
1740
|
{
|
1536
1741
|
signed char aslide[256];
|
1537
1742
|
signed char bslide[256];
|
1538
|
-
ge_cached
|
1539
|
-
ge_p1p1
|
1540
|
-
ge_p3
|
1541
|
-
ge_p3
|
1542
|
-
int
|
1543
|
-
|
1544
|
-
slide(aslide,a);
|
1545
|
-
slide(bslide,b);
|
1546
|
-
|
1547
|
-
ge_p3_to_cached(&Ai[0],A);
|
1548
|
-
ge_p3_dbl(&t,A);
|
1549
|
-
|
1550
|
-
ge_add(&t
|
1551
|
-
|
1552
|
-
|
1553
|
-
ge_add(&t
|
1554
|
-
|
1555
|
-
|
1743
|
+
ge_cached Ai[8]; /* A,3A,5A,7A,9A,11A,13A,15A */
|
1744
|
+
ge_p1p1 t;
|
1745
|
+
ge_p3 u;
|
1746
|
+
ge_p3 A2;
|
1747
|
+
int i;
|
1748
|
+
|
1749
|
+
slide(aslide, a);
|
1750
|
+
slide(bslide, b);
|
1751
|
+
|
1752
|
+
ge_p3_to_cached(&Ai[0], A);
|
1753
|
+
ge_p3_dbl(&t, A);
|
1754
|
+
ge_p1p1_to_p3(&A2, &t);
|
1755
|
+
ge_add(&t, &A2, &Ai[0]);
|
1756
|
+
ge_p1p1_to_p3(&u, &t);
|
1757
|
+
ge_p3_to_cached(&Ai[1], &u);
|
1758
|
+
ge_add(&t, &A2, &Ai[1]);
|
1759
|
+
ge_p1p1_to_p3(&u, &t);
|
1760
|
+
ge_p3_to_cached(&Ai[2], &u);
|
1761
|
+
ge_add(&t, &A2, &Ai[2]);
|
1762
|
+
ge_p1p1_to_p3(&u, &t);
|
1763
|
+
ge_p3_to_cached(&Ai[3], &u);
|
1764
|
+
ge_add(&t, &A2, &Ai[3]);
|
1765
|
+
ge_p1p1_to_p3(&u, &t);
|
1766
|
+
ge_p3_to_cached(&Ai[4], &u);
|
1767
|
+
ge_add(&t, &A2, &Ai[4]);
|
1768
|
+
ge_p1p1_to_p3(&u, &t);
|
1769
|
+
ge_p3_to_cached(&Ai[5], &u);
|
1770
|
+
ge_add(&t, &A2, &Ai[5]);
|
1771
|
+
ge_p1p1_to_p3(&u, &t);
|
1772
|
+
ge_p3_to_cached(&Ai[6], &u);
|
1773
|
+
ge_add(&t, &A2, &Ai[6]);
|
1774
|
+
ge_p1p1_to_p3(&u, &t);
|
1775
|
+
ge_p3_to_cached(&Ai[7], &u);
|
1556
1776
|
|
1557
1777
|
ge_p2_0(r);
|
1558
1778
|
|
1559
|
-
for (i = 255;i >= 0
|
1560
|
-
if (aslide[i] || bslide[i])
|
1779
|
+
for (i = 255; i >= 0; --i) {
|
1780
|
+
if (aslide[i] || bslide[i])
|
1781
|
+
break;
|
1561
1782
|
}
|
1562
1783
|
|
1563
|
-
for (;i >= 0
|
1564
|
-
ge_p2_dbl(&t,r);
|
1784
|
+
for (; i >= 0; --i) {
|
1785
|
+
ge_p2_dbl(&t, r);
|
1565
1786
|
|
1566
1787
|
if (aslide[i] > 0) {
|
1567
|
-
ge_p1p1_to_p3(&u
|
1568
|
-
ge_add(&t
|
1788
|
+
ge_p1p1_to_p3(&u, &t);
|
1789
|
+
ge_add(&t, &u, &Ai[aslide[i] / 2]);
|
1569
1790
|
} else if (aslide[i] < 0) {
|
1570
|
-
ge_p1p1_to_p3(&u
|
1571
|
-
ge_sub(&t
|
1791
|
+
ge_p1p1_to_p3(&u, &t);
|
1792
|
+
ge_sub(&t, &u, &Ai[(-aslide[i]) / 2]);
|
1572
1793
|
}
|
1573
1794
|
|
1574
1795
|
if (bslide[i] > 0) {
|
1575
|
-
ge_p1p1_to_p3(&u
|
1576
|
-
ge_madd(&t
|
1796
|
+
ge_p1p1_to_p3(&u, &t);
|
1797
|
+
ge_madd(&t, &u, &Bi[bslide[i] / 2]);
|
1577
1798
|
} else if (bslide[i] < 0) {
|
1578
|
-
ge_p1p1_to_p3(&u
|
1579
|
-
ge_msub(&t
|
1799
|
+
ge_p1p1_to_p3(&u, &t);
|
1800
|
+
ge_msub(&t, &u, &Bi[(-bslide[i]) / 2]);
|
1580
1801
|
}
|
1581
1802
|
|
1582
|
-
ge_p1p1_to_p2(r
|
1803
|
+
ge_p1p1_to_p2(r, &t);
|
1583
1804
|
}
|
1584
1805
|
}
|
1585
1806
|
|
1586
|
-
void
|
1807
|
+
void
|
1808
|
+
ge_scalarmult_vartime(ge_p3 *r, const unsigned char *a, const ge_p3 *A)
|
1587
1809
|
{
|
1588
1810
|
signed char aslide[256];
|
1589
|
-
ge_cached
|
1590
|
-
ge_p1p1
|
1591
|
-
ge_p3
|
1592
|
-
ge_p3
|
1593
|
-
int
|
1594
|
-
|
1595
|
-
slide(aslide,a);
|
1596
|
-
|
1597
|
-
ge_p3_to_cached(&Ai[0],A);
|
1598
|
-
ge_p3_dbl(&t,A);
|
1599
|
-
|
1600
|
-
ge_add(&t
|
1601
|
-
|
1602
|
-
|
1603
|
-
ge_add(&t
|
1604
|
-
|
1605
|
-
|
1811
|
+
ge_cached Ai[8];
|
1812
|
+
ge_p1p1 t;
|
1813
|
+
ge_p3 u;
|
1814
|
+
ge_p3 A2;
|
1815
|
+
int i;
|
1816
|
+
|
1817
|
+
slide(aslide, a);
|
1818
|
+
|
1819
|
+
ge_p3_to_cached(&Ai[0], A);
|
1820
|
+
ge_p3_dbl(&t, A);
|
1821
|
+
ge_p1p1_to_p3(&A2, &t);
|
1822
|
+
ge_add(&t, &A2, &Ai[0]);
|
1823
|
+
ge_p1p1_to_p3(&u, &t);
|
1824
|
+
ge_p3_to_cached(&Ai[1], &u);
|
1825
|
+
ge_add(&t, &A2, &Ai[1]);
|
1826
|
+
ge_p1p1_to_p3(&u, &t);
|
1827
|
+
ge_p3_to_cached(&Ai[2], &u);
|
1828
|
+
ge_add(&t, &A2, &Ai[2]);
|
1829
|
+
ge_p1p1_to_p3(&u, &t);
|
1830
|
+
ge_p3_to_cached(&Ai[3], &u);
|
1831
|
+
ge_add(&t, &A2, &Ai[3]);
|
1832
|
+
ge_p1p1_to_p3(&u, &t);
|
1833
|
+
ge_p3_to_cached(&Ai[4], &u);
|
1834
|
+
ge_add(&t, &A2, &Ai[4]);
|
1835
|
+
ge_p1p1_to_p3(&u, &t);
|
1836
|
+
ge_p3_to_cached(&Ai[5], &u);
|
1837
|
+
ge_add(&t, &A2, &Ai[5]);
|
1838
|
+
ge_p1p1_to_p3(&u, &t);
|
1839
|
+
ge_p3_to_cached(&Ai[6], &u);
|
1840
|
+
ge_add(&t, &A2, &Ai[6]);
|
1841
|
+
ge_p1p1_to_p3(&u, &t);
|
1842
|
+
ge_p3_to_cached(&Ai[7], &u);
|
1606
1843
|
|
1607
1844
|
ge_p3_0(r);
|
1608
1845
|
|
1609
|
-
for (i = 255;i >= 0
|
1610
|
-
if (aslide[i])
|
1846
|
+
for (i = 255; i >= 0; --i) {
|
1847
|
+
if (aslide[i])
|
1848
|
+
break;
|
1611
1849
|
}
|
1612
1850
|
|
1613
|
-
for (;i >= 0
|
1614
|
-
ge_p3_dbl(&t,r);
|
1851
|
+
for (; i >= 0; --i) {
|
1852
|
+
ge_p3_dbl(&t, r);
|
1615
1853
|
|
1616
1854
|
if (aslide[i] > 0) {
|
1617
|
-
ge_p1p1_to_p3(&u
|
1618
|
-
ge_add(&t
|
1855
|
+
ge_p1p1_to_p3(&u, &t);
|
1856
|
+
ge_add(&t, &u, &Ai[aslide[i] / 2]);
|
1619
1857
|
} else if (aslide[i] < 0) {
|
1620
|
-
ge_p1p1_to_p3(&u
|
1621
|
-
ge_sub(&t
|
1858
|
+
ge_p1p1_to_p3(&u, &t);
|
1859
|
+
ge_sub(&t, &u, &Ai[(-aslide[i]) / 2]);
|
1622
1860
|
}
|
1623
1861
|
|
1624
|
-
ge_p1p1_to_p3(r
|
1862
|
+
ge_p1p1_to_p3(r, &t);
|
1625
1863
|
}
|
1626
1864
|
}
|
1627
1865
|
|
1628
|
-
void
|
1866
|
+
void
|
1867
|
+
ge_scalarmult_base(ge_p3 *h, const unsigned char *a)
|
1629
1868
|
{
|
1630
1869
|
signed char e[64];
|
1631
1870
|
signed char carry;
|
1632
|
-
ge_p1p1
|
1633
|
-
ge_p2
|
1634
|
-
ge_precomp
|
1635
|
-
int
|
1871
|
+
ge_p1p1 r;
|
1872
|
+
ge_p2 s;
|
1873
|
+
ge_precomp t;
|
1874
|
+
int i;
|
1636
1875
|
|
1637
|
-
for (i = 0;i < 32
|
1876
|
+
for (i = 0; i < 32; ++i) {
|
1638
1877
|
e[2 * i + 0] = (a[i] >> 0) & 15;
|
1639
1878
|
e[2 * i + 1] = (a[i] >> 4) & 15;
|
1640
1879
|
}
|
@@ -1642,7 +1881,7 @@ void ge_scalarmult_base(ge_p3 *h,const unsigned char *a)
|
|
1642
1881
|
/* e[63] is between 0 and 7 */
|
1643
1882
|
|
1644
1883
|
carry = 0;
|
1645
|
-
for (i = 0;i < 63
|
1884
|
+
for (i = 0; i < 63; ++i) {
|
1646
1885
|
e[i] += carry;
|
1647
1886
|
carry = e[i] + 8;
|
1648
1887
|
carry >>= 4;
|
@@ -1652,19 +1891,25 @@ void ge_scalarmult_base(ge_p3 *h,const unsigned char *a)
|
|
1652
1891
|
/* each e[i] is between -8 and 8 */
|
1653
1892
|
|
1654
1893
|
ge_p3_0(h);
|
1655
|
-
for (i = 1;i < 64;i += 2) {
|
1656
|
-
ge_select(&t,i / 2,e[i]);
|
1657
|
-
ge_madd(&r,h
|
1894
|
+
for (i = 1; i < 64; i += 2) {
|
1895
|
+
ge_select(&t, i / 2, e[i]);
|
1896
|
+
ge_madd(&r, h, &t);
|
1897
|
+
ge_p1p1_to_p3(h, &r);
|
1658
1898
|
}
|
1659
1899
|
|
1660
|
-
ge_p3_dbl(&r,h);
|
1661
|
-
|
1662
|
-
ge_p2_dbl(&r
|
1663
|
-
|
1664
|
-
|
1665
|
-
|
1666
|
-
|
1667
|
-
|
1900
|
+
ge_p3_dbl(&r, h);
|
1901
|
+
ge_p1p1_to_p2(&s, &r);
|
1902
|
+
ge_p2_dbl(&r, &s);
|
1903
|
+
ge_p1p1_to_p2(&s, &r);
|
1904
|
+
ge_p2_dbl(&r, &s);
|
1905
|
+
ge_p1p1_to_p2(&s, &r);
|
1906
|
+
ge_p2_dbl(&r, &s);
|
1907
|
+
ge_p1p1_to_p3(h, &r);
|
1908
|
+
|
1909
|
+
for (i = 0; i < 64; i += 2) {
|
1910
|
+
ge_select(&t, i / 2, e[i]);
|
1911
|
+
ge_madd(&r, h, &t);
|
1912
|
+
ge_p1p1_to_p3(h, &r);
|
1668
1913
|
}
|
1669
1914
|
}
|
1670
1915
|
|
@@ -1679,44 +1924,49 @@ void ge_scalarmult_base(ge_p3 *h,const unsigned char *a)
|
|
1679
1924
|
where l = 2^252 + 27742317777372353535851937790883648493.
|
1680
1925
|
*/
|
1681
1926
|
|
1682
|
-
void
|
1927
|
+
void
|
1928
|
+
sc_muladd(unsigned char *s, const unsigned char *a, const unsigned char *b,
|
1929
|
+
const unsigned char *c)
|
1683
1930
|
{
|
1684
|
-
int64_t a0
|
1685
|
-
int64_t a1
|
1686
|
-
int64_t a2
|
1687
|
-
int64_t a3
|
1688
|
-
int64_t a4
|
1689
|
-
int64_t a5
|
1690
|
-
int64_t a6
|
1691
|
-
int64_t a7
|
1692
|
-
int64_t a8
|
1693
|
-
int64_t a9
|
1931
|
+
int64_t a0 = 2097151 & load_3(a);
|
1932
|
+
int64_t a1 = 2097151 & (load_4(a + 2) >> 5);
|
1933
|
+
int64_t a2 = 2097151 & (load_3(a + 5) >> 2);
|
1934
|
+
int64_t a3 = 2097151 & (load_4(a + 7) >> 7);
|
1935
|
+
int64_t a4 = 2097151 & (load_4(a + 10) >> 4);
|
1936
|
+
int64_t a5 = 2097151 & (load_3(a + 13) >> 1);
|
1937
|
+
int64_t a6 = 2097151 & (load_4(a + 15) >> 6);
|
1938
|
+
int64_t a7 = 2097151 & (load_3(a + 18) >> 3);
|
1939
|
+
int64_t a8 = 2097151 & load_3(a + 21);
|
1940
|
+
int64_t a9 = 2097151 & (load_4(a + 23) >> 5);
|
1694
1941
|
int64_t a10 = 2097151 & (load_3(a + 26) >> 2);
|
1695
1942
|
int64_t a11 = (load_4(a + 28) >> 7);
|
1696
|
-
|
1697
|
-
int64_t
|
1698
|
-
int64_t
|
1699
|
-
int64_t
|
1700
|
-
int64_t
|
1701
|
-
int64_t
|
1702
|
-
int64_t
|
1703
|
-
int64_t
|
1704
|
-
int64_t
|
1705
|
-
int64_t
|
1943
|
+
|
1944
|
+
int64_t b0 = 2097151 & load_3(b);
|
1945
|
+
int64_t b1 = 2097151 & (load_4(b + 2) >> 5);
|
1946
|
+
int64_t b2 = 2097151 & (load_3(b + 5) >> 2);
|
1947
|
+
int64_t b3 = 2097151 & (load_4(b + 7) >> 7);
|
1948
|
+
int64_t b4 = 2097151 & (load_4(b + 10) >> 4);
|
1949
|
+
int64_t b5 = 2097151 & (load_3(b + 13) >> 1);
|
1950
|
+
int64_t b6 = 2097151 & (load_4(b + 15) >> 6);
|
1951
|
+
int64_t b7 = 2097151 & (load_3(b + 18) >> 3);
|
1952
|
+
int64_t b8 = 2097151 & load_3(b + 21);
|
1953
|
+
int64_t b9 = 2097151 & (load_4(b + 23) >> 5);
|
1706
1954
|
int64_t b10 = 2097151 & (load_3(b + 26) >> 2);
|
1707
1955
|
int64_t b11 = (load_4(b + 28) >> 7);
|
1708
|
-
|
1709
|
-
int64_t
|
1710
|
-
int64_t
|
1711
|
-
int64_t
|
1712
|
-
int64_t
|
1713
|
-
int64_t
|
1714
|
-
int64_t
|
1715
|
-
int64_t
|
1716
|
-
int64_t
|
1717
|
-
int64_t
|
1956
|
+
|
1957
|
+
int64_t c0 = 2097151 & load_3(c);
|
1958
|
+
int64_t c1 = 2097151 & (load_4(c + 2) >> 5);
|
1959
|
+
int64_t c2 = 2097151 & (load_3(c + 5) >> 2);
|
1960
|
+
int64_t c3 = 2097151 & (load_4(c + 7) >> 7);
|
1961
|
+
int64_t c4 = 2097151 & (load_4(c + 10) >> 4);
|
1962
|
+
int64_t c5 = 2097151 & (load_3(c + 13) >> 1);
|
1963
|
+
int64_t c6 = 2097151 & (load_4(c + 15) >> 6);
|
1964
|
+
int64_t c7 = 2097151 & (load_3(c + 18) >> 3);
|
1965
|
+
int64_t c8 = 2097151 & load_3(c + 21);
|
1966
|
+
int64_t c9 = 2097151 & (load_4(c + 23) >> 5);
|
1718
1967
|
int64_t c10 = 2097151 & (load_3(c + 26) >> 2);
|
1719
1968
|
int64_t c11 = (load_4(c + 28) >> 7);
|
1969
|
+
|
1720
1970
|
int64_t s0;
|
1721
1971
|
int64_t s1;
|
1722
1972
|
int64_t s2;
|
@@ -1741,6 +1991,7 @@ void sc_muladd(unsigned char *s,const unsigned char *a,const unsigned char *b,co
|
|
1741
1991
|
int64_t s21;
|
1742
1992
|
int64_t s22;
|
1743
1993
|
int64_t s23;
|
1994
|
+
|
1744
1995
|
int64_t carry0;
|
1745
1996
|
int64_t carry1;
|
1746
1997
|
int64_t carry2;
|
@@ -1765,55 +2016,112 @@ void sc_muladd(unsigned char *s,const unsigned char *a,const unsigned char *b,co
|
|
1765
2016
|
int64_t carry21;
|
1766
2017
|
int64_t carry22;
|
1767
2018
|
|
1768
|
-
s0 = c0 + a0*b0;
|
1769
|
-
s1 = c1 + a0*b1 + a1*b0;
|
1770
|
-
s2 = c2 + a0*b2 + a1*b1 + a2*b0;
|
1771
|
-
s3 = c3 + a0*b3 + a1*b2 + a2*b1 + a3*b0;
|
1772
|
-
s4 = c4 + a0*b4 + a1*b3 + a2*b2 + a3*b1 + a4*b0;
|
1773
|
-
s5 = c5 + a0*b5 + a1*b4 + a2*b3 + a3*b2 + a4*b1 + a5*b0;
|
1774
|
-
s6 = c6 + a0*b6 + a1*b5 + a2*b4 + a3*b3 + a4*b2 + a5*b1 +
|
1775
|
-
|
1776
|
-
|
1777
|
-
|
1778
|
-
|
1779
|
-
|
1780
|
-
|
1781
|
-
|
1782
|
-
|
1783
|
-
|
1784
|
-
|
1785
|
-
|
1786
|
-
|
1787
|
-
|
1788
|
-
|
1789
|
-
|
1790
|
-
|
2019
|
+
s0 = c0 + a0 * b0;
|
2020
|
+
s1 = c1 + a0 * b1 + a1 * b0;
|
2021
|
+
s2 = c2 + a0 * b2 + a1 * b1 + a2 * b0;
|
2022
|
+
s3 = c3 + a0 * b3 + a1 * b2 + a2 * b1 + a3 * b0;
|
2023
|
+
s4 = c4 + a0 * b4 + a1 * b3 + a2 * b2 + a3 * b1 + a4 * b0;
|
2024
|
+
s5 = c5 + a0 * b5 + a1 * b4 + a2 * b3 + a3 * b2 + a4 * b1 + a5 * b0;
|
2025
|
+
s6 = c6 + a0 * b6 + a1 * b5 + a2 * b4 + a3 * b3 + a4 * b2 + a5 * b1 +
|
2026
|
+
a6 * b0;
|
2027
|
+
s7 = c7 + a0 * b7 + a1 * b6 + a2 * b5 + a3 * b4 + a4 * b3 + a5 * b2 +
|
2028
|
+
a6 * b1 + a7 * b0;
|
2029
|
+
s8 = c8 + a0 * b8 + a1 * b7 + a2 * b6 + a3 * b5 + a4 * b4 + a5 * b3 +
|
2030
|
+
a6 * b2 + a7 * b1 + a8 * b0;
|
2031
|
+
s9 = c9 + a0 * b9 + a1 * b8 + a2 * b7 + a3 * b6 + a4 * b5 + a5 * b4 +
|
2032
|
+
a6 * b3 + a7 * b2 + a8 * b1 + a9 * b0;
|
2033
|
+
s10 = c10 + a0 * b10 + a1 * b9 + a2 * b8 + a3 * b7 + a4 * b6 + a5 * b5 +
|
2034
|
+
a6 * b4 + a7 * b3 + a8 * b2 + a9 * b1 + a10 * b0;
|
2035
|
+
s11 = c11 + a0 * b11 + a1 * b10 + a2 * b9 + a3 * b8 + a4 * b7 + a5 * b6 +
|
2036
|
+
a6 * b5 + a7 * b4 + a8 * b3 + a9 * b2 + a10 * b1 + a11 * b0;
|
2037
|
+
s12 = a1 * b11 + a2 * b10 + a3 * b9 + a4 * b8 + a5 * b7 + a6 * b6 +
|
2038
|
+
a7 * b5 + a8 * b4 + a9 * b3 + a10 * b2 + a11 * b1;
|
2039
|
+
s13 = a2 * b11 + a3 * b10 + a4 * b9 + a5 * b8 + a6 * b7 + a7 * b6 +
|
2040
|
+
a8 * b5 + a9 * b4 + a10 * b3 + a11 * b2;
|
2041
|
+
s14 = a3 * b11 + a4 * b10 + a5 * b9 + a6 * b8 + a7 * b7 + a8 * b6 +
|
2042
|
+
a9 * b5 + a10 * b4 + a11 * b3;
|
2043
|
+
s15 = a4 * b11 + a5 * b10 + a6 * b9 + a7 * b8 + a8 * b7 + a9 * b6 +
|
2044
|
+
a10 * b5 + a11 * b4;
|
2045
|
+
s16 =
|
2046
|
+
a5 * b11 + a6 * b10 + a7 * b9 + a8 * b8 + a9 * b7 + a10 * b6 + a11 * b5;
|
2047
|
+
s17 = a6 * b11 + a7 * b10 + a8 * b9 + a9 * b8 + a10 * b7 + a11 * b6;
|
2048
|
+
s18 = a7 * b11 + a8 * b10 + a9 * b9 + a10 * b8 + a11 * b7;
|
2049
|
+
s19 = a8 * b11 + a9 * b10 + a10 * b9 + a11 * b8;
|
2050
|
+
s20 = a9 * b11 + a10 * b10 + a11 * b9;
|
2051
|
+
s21 = a10 * b11 + a11 * b10;
|
2052
|
+
s22 = a11 * b11;
|
1791
2053
|
s23 = 0;
|
1792
2054
|
|
1793
|
-
carry0 = (s0 + (int64_t)
|
1794
|
-
|
1795
|
-
|
1796
|
-
|
1797
|
-
|
1798
|
-
|
1799
|
-
|
1800
|
-
|
1801
|
-
|
1802
|
-
|
1803
|
-
|
1804
|
-
|
1805
|
-
|
1806
|
-
|
1807
|
-
|
1808
|
-
|
1809
|
-
|
1810
|
-
|
1811
|
-
|
1812
|
-
|
1813
|
-
|
1814
|
-
|
1815
|
-
|
1816
|
-
|
2055
|
+
carry0 = (s0 + (int64_t)(1L << 20)) >> 21;
|
2056
|
+
s1 += carry0;
|
2057
|
+
s0 -= carry0 * ((uint64_t) 1L << 21);
|
2058
|
+
carry2 = (s2 + (int64_t)(1L << 20)) >> 21;
|
2059
|
+
s3 += carry2;
|
2060
|
+
s2 -= carry2 * ((uint64_t) 1L << 21);
|
2061
|
+
carry4 = (s4 + (int64_t)(1L << 20)) >> 21;
|
2062
|
+
s5 += carry4;
|
2063
|
+
s4 -= carry4 * ((uint64_t) 1L << 21);
|
2064
|
+
carry6 = (s6 + (int64_t)(1L << 20)) >> 21;
|
2065
|
+
s7 += carry6;
|
2066
|
+
s6 -= carry6 * ((uint64_t) 1L << 21);
|
2067
|
+
carry8 = (s8 + (int64_t)(1L << 20)) >> 21;
|
2068
|
+
s9 += carry8;
|
2069
|
+
s8 -= carry8 * ((uint64_t) 1L << 21);
|
2070
|
+
carry10 = (s10 + (int64_t)(1L << 20)) >> 21;
|
2071
|
+
s11 += carry10;
|
2072
|
+
s10 -= carry10 * ((uint64_t) 1L << 21);
|
2073
|
+
carry12 = (s12 + (int64_t)(1L << 20)) >> 21;
|
2074
|
+
s13 += carry12;
|
2075
|
+
s12 -= carry12 * ((uint64_t) 1L << 21);
|
2076
|
+
carry14 = (s14 + (int64_t)(1L << 20)) >> 21;
|
2077
|
+
s15 += carry14;
|
2078
|
+
s14 -= carry14 * ((uint64_t) 1L << 21);
|
2079
|
+
carry16 = (s16 + (int64_t)(1L << 20)) >> 21;
|
2080
|
+
s17 += carry16;
|
2081
|
+
s16 -= carry16 * ((uint64_t) 1L << 21);
|
2082
|
+
carry18 = (s18 + (int64_t)(1L << 20)) >> 21;
|
2083
|
+
s19 += carry18;
|
2084
|
+
s18 -= carry18 * ((uint64_t) 1L << 21);
|
2085
|
+
carry20 = (s20 + (int64_t)(1L << 20)) >> 21;
|
2086
|
+
s21 += carry20;
|
2087
|
+
s20 -= carry20 * ((uint64_t) 1L << 21);
|
2088
|
+
carry22 = (s22 + (int64_t)(1L << 20)) >> 21;
|
2089
|
+
s23 += carry22;
|
2090
|
+
s22 -= carry22 * ((uint64_t) 1L << 21);
|
2091
|
+
|
2092
|
+
carry1 = (s1 + (int64_t)(1L << 20)) >> 21;
|
2093
|
+
s2 += carry1;
|
2094
|
+
s1 -= carry1 * ((uint64_t) 1L << 21);
|
2095
|
+
carry3 = (s3 + (int64_t)(1L << 20)) >> 21;
|
2096
|
+
s4 += carry3;
|
2097
|
+
s3 -= carry3 * ((uint64_t) 1L << 21);
|
2098
|
+
carry5 = (s5 + (int64_t)(1L << 20)) >> 21;
|
2099
|
+
s6 += carry5;
|
2100
|
+
s5 -= carry5 * ((uint64_t) 1L << 21);
|
2101
|
+
carry7 = (s7 + (int64_t)(1L << 20)) >> 21;
|
2102
|
+
s8 += carry7;
|
2103
|
+
s7 -= carry7 * ((uint64_t) 1L << 21);
|
2104
|
+
carry9 = (s9 + (int64_t)(1L << 20)) >> 21;
|
2105
|
+
s10 += carry9;
|
2106
|
+
s9 -= carry9 * ((uint64_t) 1L << 21);
|
2107
|
+
carry11 = (s11 + (int64_t)(1L << 20)) >> 21;
|
2108
|
+
s12 += carry11;
|
2109
|
+
s11 -= carry11 * ((uint64_t) 1L << 21);
|
2110
|
+
carry13 = (s13 + (int64_t)(1L << 20)) >> 21;
|
2111
|
+
s14 += carry13;
|
2112
|
+
s13 -= carry13 * ((uint64_t) 1L << 21);
|
2113
|
+
carry15 = (s15 + (int64_t)(1L << 20)) >> 21;
|
2114
|
+
s16 += carry15;
|
2115
|
+
s15 -= carry15 * ((uint64_t) 1L << 21);
|
2116
|
+
carry17 = (s17 + (int64_t)(1L << 20)) >> 21;
|
2117
|
+
s18 += carry17;
|
2118
|
+
s17 -= carry17 * ((uint64_t) 1L << 21);
|
2119
|
+
carry19 = (s19 + (int64_t)(1L << 20)) >> 21;
|
2120
|
+
s20 += carry19;
|
2121
|
+
s19 -= carry19 * ((uint64_t) 1L << 21);
|
2122
|
+
carry21 = (s21 + (int64_t)(1L << 20)) >> 21;
|
2123
|
+
s22 += carry21;
|
2124
|
+
s21 -= carry21 * ((uint64_t) 1L << 21);
|
1817
2125
|
|
1818
2126
|
s11 += s23 * 666643;
|
1819
2127
|
s12 += s23 * 470296;
|
@@ -1857,18 +2165,40 @@ void sc_muladd(unsigned char *s,const unsigned char *a,const unsigned char *b,co
|
|
1857
2165
|
s10 += s18 * 136657;
|
1858
2166
|
s11 -= s18 * 683901;
|
1859
2167
|
|
1860
|
-
carry6 = (s6 + (int64_t)
|
1861
|
-
|
1862
|
-
|
1863
|
-
|
1864
|
-
|
1865
|
-
|
1866
|
-
|
1867
|
-
|
1868
|
-
|
1869
|
-
|
1870
|
-
|
1871
|
-
|
2168
|
+
carry6 = (s6 + (int64_t)(1L << 20)) >> 21;
|
2169
|
+
s7 += carry6;
|
2170
|
+
s6 -= carry6 * ((uint64_t) 1L << 21);
|
2171
|
+
carry8 = (s8 + (int64_t)(1L << 20)) >> 21;
|
2172
|
+
s9 += carry8;
|
2173
|
+
s8 -= carry8 * ((uint64_t) 1L << 21);
|
2174
|
+
carry10 = (s10 + (int64_t)(1L << 20)) >> 21;
|
2175
|
+
s11 += carry10;
|
2176
|
+
s10 -= carry10 * ((uint64_t) 1L << 21);
|
2177
|
+
carry12 = (s12 + (int64_t)(1L << 20)) >> 21;
|
2178
|
+
s13 += carry12;
|
2179
|
+
s12 -= carry12 * ((uint64_t) 1L << 21);
|
2180
|
+
carry14 = (s14 + (int64_t)(1L << 20)) >> 21;
|
2181
|
+
s15 += carry14;
|
2182
|
+
s14 -= carry14 * ((uint64_t) 1L << 21);
|
2183
|
+
carry16 = (s16 + (int64_t)(1L << 20)) >> 21;
|
2184
|
+
s17 += carry16;
|
2185
|
+
s16 -= carry16 * ((uint64_t) 1L << 21);
|
2186
|
+
|
2187
|
+
carry7 = (s7 + (int64_t)(1L << 20)) >> 21;
|
2188
|
+
s8 += carry7;
|
2189
|
+
s7 -= carry7 * ((uint64_t) 1L << 21);
|
2190
|
+
carry9 = (s9 + (int64_t)(1L << 20)) >> 21;
|
2191
|
+
s10 += carry9;
|
2192
|
+
s9 -= carry9 * ((uint64_t) 1L << 21);
|
2193
|
+
carry11 = (s11 + (int64_t)(1L << 20)) >> 21;
|
2194
|
+
s12 += carry11;
|
2195
|
+
s11 -= carry11 * ((uint64_t) 1L << 21);
|
2196
|
+
carry13 = (s13 + (int64_t)(1L << 20)) >> 21;
|
2197
|
+
s14 += carry13;
|
2198
|
+
s13 -= carry13 * ((uint64_t) 1L << 21);
|
2199
|
+
carry15 = (s15 + (int64_t)(1L << 20)) >> 21;
|
2200
|
+
s16 += carry15;
|
2201
|
+
s15 -= carry15 * ((uint64_t) 1L << 21);
|
1872
2202
|
|
1873
2203
|
s5 += s17 * 666643;
|
1874
2204
|
s6 += s17 * 470296;
|
@@ -1913,19 +2243,43 @@ void sc_muladd(unsigned char *s,const unsigned char *a,const unsigned char *b,co
|
|
1913
2243
|
s5 -= s12 * 683901;
|
1914
2244
|
s12 = 0;
|
1915
2245
|
|
1916
|
-
carry0 = (s0 + (int64_t)
|
1917
|
-
|
1918
|
-
|
1919
|
-
|
1920
|
-
|
1921
|
-
|
1922
|
-
|
1923
|
-
|
1924
|
-
|
1925
|
-
|
1926
|
-
|
1927
|
-
|
1928
|
-
|
2246
|
+
carry0 = (s0 + (int64_t)(1L << 20)) >> 21;
|
2247
|
+
s1 += carry0;
|
2248
|
+
s0 -= carry0 * ((uint64_t) 1L << 21);
|
2249
|
+
carry2 = (s2 + (int64_t)(1L << 20)) >> 21;
|
2250
|
+
s3 += carry2;
|
2251
|
+
s2 -= carry2 * ((uint64_t) 1L << 21);
|
2252
|
+
carry4 = (s4 + (int64_t)(1L << 20)) >> 21;
|
2253
|
+
s5 += carry4;
|
2254
|
+
s4 -= carry4 * ((uint64_t) 1L << 21);
|
2255
|
+
carry6 = (s6 + (int64_t)(1L << 20)) >> 21;
|
2256
|
+
s7 += carry6;
|
2257
|
+
s6 -= carry6 * ((uint64_t) 1L << 21);
|
2258
|
+
carry8 = (s8 + (int64_t)(1L << 20)) >> 21;
|
2259
|
+
s9 += carry8;
|
2260
|
+
s8 -= carry8 * ((uint64_t) 1L << 21);
|
2261
|
+
carry10 = (s10 + (int64_t)(1L << 20)) >> 21;
|
2262
|
+
s11 += carry10;
|
2263
|
+
s10 -= carry10 * ((uint64_t) 1L << 21);
|
2264
|
+
|
2265
|
+
carry1 = (s1 + (int64_t)(1L << 20)) >> 21;
|
2266
|
+
s2 += carry1;
|
2267
|
+
s1 -= carry1 * ((uint64_t) 1L << 21);
|
2268
|
+
carry3 = (s3 + (int64_t)(1L << 20)) >> 21;
|
2269
|
+
s4 += carry3;
|
2270
|
+
s3 -= carry3 * ((uint64_t) 1L << 21);
|
2271
|
+
carry5 = (s5 + (int64_t)(1L << 20)) >> 21;
|
2272
|
+
s6 += carry5;
|
2273
|
+
s5 -= carry5 * ((uint64_t) 1L << 21);
|
2274
|
+
carry7 = (s7 + (int64_t)(1L << 20)) >> 21;
|
2275
|
+
s8 += carry7;
|
2276
|
+
s7 -= carry7 * ((uint64_t) 1L << 21);
|
2277
|
+
carry9 = (s9 + (int64_t)(1L << 20)) >> 21;
|
2278
|
+
s10 += carry9;
|
2279
|
+
s9 -= carry9 * ((uint64_t) 1L << 21);
|
2280
|
+
carry11 = (s11 + (int64_t)(1L << 20)) >> 21;
|
2281
|
+
s12 += carry11;
|
2282
|
+
s11 -= carry11 * ((uint64_t) 1L << 21);
|
1929
2283
|
|
1930
2284
|
s0 += s12 * 666643;
|
1931
2285
|
s1 += s12 * 470296;
|
@@ -1935,18 +2289,42 @@ void sc_muladd(unsigned char *s,const unsigned char *a,const unsigned char *b,co
|
|
1935
2289
|
s5 -= s12 * 683901;
|
1936
2290
|
s12 = 0;
|
1937
2291
|
|
1938
|
-
carry0 = s0 >> 21;
|
1939
|
-
|
1940
|
-
|
1941
|
-
|
1942
|
-
|
1943
|
-
|
1944
|
-
|
1945
|
-
|
1946
|
-
|
1947
|
-
|
1948
|
-
|
1949
|
-
|
2292
|
+
carry0 = s0 >> 21;
|
2293
|
+
s1 += carry0;
|
2294
|
+
s0 -= carry0 * ((uint64_t) 1L << 21);
|
2295
|
+
carry1 = s1 >> 21;
|
2296
|
+
s2 += carry1;
|
2297
|
+
s1 -= carry1 * ((uint64_t) 1L << 21);
|
2298
|
+
carry2 = s2 >> 21;
|
2299
|
+
s3 += carry2;
|
2300
|
+
s2 -= carry2 * ((uint64_t) 1L << 21);
|
2301
|
+
carry3 = s3 >> 21;
|
2302
|
+
s4 += carry3;
|
2303
|
+
s3 -= carry3 * ((uint64_t) 1L << 21);
|
2304
|
+
carry4 = s4 >> 21;
|
2305
|
+
s5 += carry4;
|
2306
|
+
s4 -= carry4 * ((uint64_t) 1L << 21);
|
2307
|
+
carry5 = s5 >> 21;
|
2308
|
+
s6 += carry5;
|
2309
|
+
s5 -= carry5 * ((uint64_t) 1L << 21);
|
2310
|
+
carry6 = s6 >> 21;
|
2311
|
+
s7 += carry6;
|
2312
|
+
s6 -= carry6 * ((uint64_t) 1L << 21);
|
2313
|
+
carry7 = s7 >> 21;
|
2314
|
+
s8 += carry7;
|
2315
|
+
s7 -= carry7 * ((uint64_t) 1L << 21);
|
2316
|
+
carry8 = s8 >> 21;
|
2317
|
+
s9 += carry8;
|
2318
|
+
s8 -= carry8 * ((uint64_t) 1L << 21);
|
2319
|
+
carry9 = s9 >> 21;
|
2320
|
+
s10 += carry9;
|
2321
|
+
s9 -= carry9 * ((uint64_t) 1L << 21);
|
2322
|
+
carry10 = s10 >> 21;
|
2323
|
+
s11 += carry10;
|
2324
|
+
s10 -= carry10 * ((uint64_t) 1L << 21);
|
2325
|
+
carry11 = s11 >> 21;
|
2326
|
+
s12 += carry11;
|
2327
|
+
s11 -= carry11 * ((uint64_t) 1L << 21);
|
1950
2328
|
|
1951
2329
|
s0 += s12 * 666643;
|
1952
2330
|
s1 += s12 * 470296;
|
@@ -1955,28 +2333,50 @@ void sc_muladd(unsigned char *s,const unsigned char *a,const unsigned char *b,co
|
|
1955
2333
|
s4 += s12 * 136657;
|
1956
2334
|
s5 -= s12 * 683901;
|
1957
2335
|
|
1958
|
-
carry0 = s0 >> 21;
|
1959
|
-
|
1960
|
-
|
1961
|
-
|
1962
|
-
|
1963
|
-
|
1964
|
-
|
1965
|
-
|
1966
|
-
|
1967
|
-
|
1968
|
-
|
1969
|
-
|
1970
|
-
|
1971
|
-
|
1972
|
-
|
1973
|
-
|
1974
|
-
|
1975
|
-
|
1976
|
-
|
1977
|
-
|
1978
|
-
|
1979
|
-
|
2336
|
+
carry0 = s0 >> 21;
|
2337
|
+
s1 += carry0;
|
2338
|
+
s0 -= carry0 * ((uint64_t) 1L << 21);
|
2339
|
+
carry1 = s1 >> 21;
|
2340
|
+
s2 += carry1;
|
2341
|
+
s1 -= carry1 * ((uint64_t) 1L << 21);
|
2342
|
+
carry2 = s2 >> 21;
|
2343
|
+
s3 += carry2;
|
2344
|
+
s2 -= carry2 * ((uint64_t) 1L << 21);
|
2345
|
+
carry3 = s3 >> 21;
|
2346
|
+
s4 += carry3;
|
2347
|
+
s3 -= carry3 * ((uint64_t) 1L << 21);
|
2348
|
+
carry4 = s4 >> 21;
|
2349
|
+
s5 += carry4;
|
2350
|
+
s4 -= carry4 * ((uint64_t) 1L << 21);
|
2351
|
+
carry5 = s5 >> 21;
|
2352
|
+
s6 += carry5;
|
2353
|
+
s5 -= carry5 * ((uint64_t) 1L << 21);
|
2354
|
+
carry6 = s6 >> 21;
|
2355
|
+
s7 += carry6;
|
2356
|
+
s6 -= carry6 * ((uint64_t) 1L << 21);
|
2357
|
+
carry7 = s7 >> 21;
|
2358
|
+
s8 += carry7;
|
2359
|
+
s7 -= carry7 * ((uint64_t) 1L << 21);
|
2360
|
+
carry8 = s8 >> 21;
|
2361
|
+
s9 += carry8;
|
2362
|
+
s8 -= carry8 * ((uint64_t) 1L << 21);
|
2363
|
+
carry9 = s9 >> 21;
|
2364
|
+
s10 += carry9;
|
2365
|
+
s9 -= carry9 * ((uint64_t) 1L << 21);
|
2366
|
+
carry10 = s10 >> 21;
|
2367
|
+
s11 += carry10;
|
2368
|
+
s10 -= carry10 * ((uint64_t) 1L << 21);
|
2369
|
+
|
2370
|
+
s[0] = s0 >> 0;
|
2371
|
+
s[1] = s0 >> 8;
|
2372
|
+
s[2] = (s0 >> 16) | (s1 * ((uint64_t) 1 << 5));
|
2373
|
+
s[3] = s1 >> 3;
|
2374
|
+
s[4] = s1 >> 11;
|
2375
|
+
s[5] = (s1 >> 19) | (s2 * ((uint64_t) 1 << 2));
|
2376
|
+
s[6] = s2 >> 6;
|
2377
|
+
s[7] = (s2 >> 14) | (s3 * ((uint64_t) 1 << 7));
|
2378
|
+
s[8] = s3 >> 1;
|
2379
|
+
s[9] = s3 >> 9;
|
1980
2380
|
s[10] = (s3 >> 17) | (s4 * ((uint64_t) 1 << 4));
|
1981
2381
|
s[11] = s4 >> 4;
|
1982
2382
|
s[12] = s4 >> 12;
|
@@ -2011,18 +2411,19 @@ void sc_muladd(unsigned char *s,const unsigned char *a,const unsigned char *b,co
|
|
2011
2411
|
Overwrites s in place.
|
2012
2412
|
*/
|
2013
2413
|
|
2014
|
-
void
|
2414
|
+
void
|
2415
|
+
sc_reduce(unsigned char *s)
|
2015
2416
|
{
|
2016
|
-
int64_t s0
|
2017
|
-
int64_t s1
|
2018
|
-
int64_t s2
|
2019
|
-
int64_t s3
|
2020
|
-
int64_t s4
|
2021
|
-
int64_t s5
|
2022
|
-
int64_t s6
|
2023
|
-
int64_t s7
|
2024
|
-
int64_t s8
|
2025
|
-
int64_t s9
|
2417
|
+
int64_t s0 = 2097151 & load_3(s);
|
2418
|
+
int64_t s1 = 2097151 & (load_4(s + 2) >> 5);
|
2419
|
+
int64_t s2 = 2097151 & (load_3(s + 5) >> 2);
|
2420
|
+
int64_t s3 = 2097151 & (load_4(s + 7) >> 7);
|
2421
|
+
int64_t s4 = 2097151 & (load_4(s + 10) >> 4);
|
2422
|
+
int64_t s5 = 2097151 & (load_3(s + 13) >> 1);
|
2423
|
+
int64_t s6 = 2097151 & (load_4(s + 15) >> 6);
|
2424
|
+
int64_t s7 = 2097151 & (load_3(s + 18) >> 3);
|
2425
|
+
int64_t s8 = 2097151 & load_3(s + 21);
|
2426
|
+
int64_t s9 = 2097151 & (load_4(s + 23) >> 5);
|
2026
2427
|
int64_t s10 = 2097151 & (load_3(s + 26) >> 2);
|
2027
2428
|
int64_t s11 = 2097151 & (load_4(s + 28) >> 7);
|
2028
2429
|
int64_t s12 = 2097151 & (load_4(s + 31) >> 4);
|
@@ -2037,6 +2438,7 @@ void sc_reduce(unsigned char *s)
|
|
2037
2438
|
int64_t s21 = 2097151 & (load_3(s + 55) >> 1);
|
2038
2439
|
int64_t s22 = 2097151 & (load_4(s + 57) >> 6);
|
2039
2440
|
int64_t s23 = (load_4(s + 60) >> 3);
|
2441
|
+
|
2040
2442
|
int64_t carry0;
|
2041
2443
|
int64_t carry1;
|
2042
2444
|
int64_t carry2;
|
@@ -2097,18 +2499,40 @@ void sc_reduce(unsigned char *s)
|
|
2097
2499
|
s10 += s18 * 136657;
|
2098
2500
|
s11 -= s18 * 683901;
|
2099
2501
|
|
2100
|
-
carry6 = (s6 + (int64_t)
|
2101
|
-
|
2102
|
-
|
2103
|
-
|
2104
|
-
|
2105
|
-
|
2106
|
-
|
2107
|
-
|
2108
|
-
|
2109
|
-
|
2110
|
-
|
2111
|
-
|
2502
|
+
carry6 = (s6 + (int64_t)(1L << 20)) >> 21;
|
2503
|
+
s7 += carry6;
|
2504
|
+
s6 -= carry6 * ((uint64_t) 1L << 21);
|
2505
|
+
carry8 = (s8 + (int64_t)(1L << 20)) >> 21;
|
2506
|
+
s9 += carry8;
|
2507
|
+
s8 -= carry8 * ((uint64_t) 1L << 21);
|
2508
|
+
carry10 = (s10 + (int64_t)(1L << 20)) >> 21;
|
2509
|
+
s11 += carry10;
|
2510
|
+
s10 -= carry10 * ((uint64_t) 1L << 21);
|
2511
|
+
carry12 = (s12 + (int64_t)(1L << 20)) >> 21;
|
2512
|
+
s13 += carry12;
|
2513
|
+
s12 -= carry12 * ((uint64_t) 1L << 21);
|
2514
|
+
carry14 = (s14 + (int64_t)(1L << 20)) >> 21;
|
2515
|
+
s15 += carry14;
|
2516
|
+
s14 -= carry14 * ((uint64_t) 1L << 21);
|
2517
|
+
carry16 = (s16 + (int64_t)(1L << 20)) >> 21;
|
2518
|
+
s17 += carry16;
|
2519
|
+
s16 -= carry16 * ((uint64_t) 1L << 21);
|
2520
|
+
|
2521
|
+
carry7 = (s7 + (int64_t)(1L << 20)) >> 21;
|
2522
|
+
s8 += carry7;
|
2523
|
+
s7 -= carry7 * ((uint64_t) 1L << 21);
|
2524
|
+
carry9 = (s9 + (int64_t)(1L << 20)) >> 21;
|
2525
|
+
s10 += carry9;
|
2526
|
+
s9 -= carry9 * ((uint64_t) 1L << 21);
|
2527
|
+
carry11 = (s11 + (int64_t)(1L << 20)) >> 21;
|
2528
|
+
s12 += carry11;
|
2529
|
+
s11 -= carry11 * ((uint64_t) 1L << 21);
|
2530
|
+
carry13 = (s13 + (int64_t)(1L << 20)) >> 21;
|
2531
|
+
s14 += carry13;
|
2532
|
+
s13 -= carry13 * ((uint64_t) 1L << 21);
|
2533
|
+
carry15 = (s15 + (int64_t)(1L << 20)) >> 21;
|
2534
|
+
s16 += carry15;
|
2535
|
+
s15 -= carry15 * ((uint64_t) 1L << 21);
|
2112
2536
|
|
2113
2537
|
s5 += s17 * 666643;
|
2114
2538
|
s6 += s17 * 470296;
|
@@ -2153,19 +2577,43 @@ void sc_reduce(unsigned char *s)
|
|
2153
2577
|
s5 -= s12 * 683901;
|
2154
2578
|
s12 = 0;
|
2155
2579
|
|
2156
|
-
carry0 = (s0 + (int64_t)
|
2157
|
-
|
2158
|
-
|
2159
|
-
|
2160
|
-
|
2161
|
-
|
2162
|
-
|
2163
|
-
|
2164
|
-
|
2165
|
-
|
2166
|
-
|
2167
|
-
|
2168
|
-
|
2580
|
+
carry0 = (s0 + (int64_t)(1L << 20)) >> 21;
|
2581
|
+
s1 += carry0;
|
2582
|
+
s0 -= carry0 * ((uint64_t) 1L << 21);
|
2583
|
+
carry2 = (s2 + (int64_t)(1L << 20)) >> 21;
|
2584
|
+
s3 += carry2;
|
2585
|
+
s2 -= carry2 * ((uint64_t) 1L << 21);
|
2586
|
+
carry4 = (s4 + (int64_t)(1L << 20)) >> 21;
|
2587
|
+
s5 += carry4;
|
2588
|
+
s4 -= carry4 * ((uint64_t) 1L << 21);
|
2589
|
+
carry6 = (s6 + (int64_t)(1L << 20)) >> 21;
|
2590
|
+
s7 += carry6;
|
2591
|
+
s6 -= carry6 * ((uint64_t) 1L << 21);
|
2592
|
+
carry8 = (s8 + (int64_t)(1L << 20)) >> 21;
|
2593
|
+
s9 += carry8;
|
2594
|
+
s8 -= carry8 * ((uint64_t) 1L << 21);
|
2595
|
+
carry10 = (s10 + (int64_t)(1L << 20)) >> 21;
|
2596
|
+
s11 += carry10;
|
2597
|
+
s10 -= carry10 * ((uint64_t) 1L << 21);
|
2598
|
+
|
2599
|
+
carry1 = (s1 + (int64_t)(1L << 20)) >> 21;
|
2600
|
+
s2 += carry1;
|
2601
|
+
s1 -= carry1 * ((uint64_t) 1L << 21);
|
2602
|
+
carry3 = (s3 + (int64_t)(1L << 20)) >> 21;
|
2603
|
+
s4 += carry3;
|
2604
|
+
s3 -= carry3 * ((uint64_t) 1L << 21);
|
2605
|
+
carry5 = (s5 + (int64_t)(1L << 20)) >> 21;
|
2606
|
+
s6 += carry5;
|
2607
|
+
s5 -= carry5 * ((uint64_t) 1L << 21);
|
2608
|
+
carry7 = (s7 + (int64_t)(1L << 20)) >> 21;
|
2609
|
+
s8 += carry7;
|
2610
|
+
s7 -= carry7 * ((uint64_t) 1L << 21);
|
2611
|
+
carry9 = (s9 + (int64_t)(1L << 20)) >> 21;
|
2612
|
+
s10 += carry9;
|
2613
|
+
s9 -= carry9 * ((uint64_t) 1L << 21);
|
2614
|
+
carry11 = (s11 + (int64_t)(1L << 20)) >> 21;
|
2615
|
+
s12 += carry11;
|
2616
|
+
s11 -= carry11 * ((uint64_t) 1L << 21);
|
2169
2617
|
|
2170
2618
|
s0 += s12 * 666643;
|
2171
2619
|
s1 += s12 * 470296;
|
@@ -2175,18 +2623,42 @@ void sc_reduce(unsigned char *s)
|
|
2175
2623
|
s5 -= s12 * 683901;
|
2176
2624
|
s12 = 0;
|
2177
2625
|
|
2178
|
-
carry0 = s0 >> 21;
|
2179
|
-
|
2180
|
-
|
2181
|
-
|
2182
|
-
|
2183
|
-
|
2184
|
-
|
2185
|
-
|
2186
|
-
|
2187
|
-
|
2188
|
-
|
2189
|
-
|
2626
|
+
carry0 = s0 >> 21;
|
2627
|
+
s1 += carry0;
|
2628
|
+
s0 -= carry0 * ((uint64_t) 1L << 21);
|
2629
|
+
carry1 = s1 >> 21;
|
2630
|
+
s2 += carry1;
|
2631
|
+
s1 -= carry1 * ((uint64_t) 1L << 21);
|
2632
|
+
carry2 = s2 >> 21;
|
2633
|
+
s3 += carry2;
|
2634
|
+
s2 -= carry2 * ((uint64_t) 1L << 21);
|
2635
|
+
carry3 = s3 >> 21;
|
2636
|
+
s4 += carry3;
|
2637
|
+
s3 -= carry3 * ((uint64_t) 1L << 21);
|
2638
|
+
carry4 = s4 >> 21;
|
2639
|
+
s5 += carry4;
|
2640
|
+
s4 -= carry4 * ((uint64_t) 1L << 21);
|
2641
|
+
carry5 = s5 >> 21;
|
2642
|
+
s6 += carry5;
|
2643
|
+
s5 -= carry5 * ((uint64_t) 1L << 21);
|
2644
|
+
carry6 = s6 >> 21;
|
2645
|
+
s7 += carry6;
|
2646
|
+
s6 -= carry6 * ((uint64_t) 1L << 21);
|
2647
|
+
carry7 = s7 >> 21;
|
2648
|
+
s8 += carry7;
|
2649
|
+
s7 -= carry7 * ((uint64_t) 1L << 21);
|
2650
|
+
carry8 = s8 >> 21;
|
2651
|
+
s9 += carry8;
|
2652
|
+
s8 -= carry8 * ((uint64_t) 1L << 21);
|
2653
|
+
carry9 = s9 >> 21;
|
2654
|
+
s10 += carry9;
|
2655
|
+
s9 -= carry9 * ((uint64_t) 1L << 21);
|
2656
|
+
carry10 = s10 >> 21;
|
2657
|
+
s11 += carry10;
|
2658
|
+
s10 -= carry10 * ((uint64_t) 1L << 21);
|
2659
|
+
carry11 = s11 >> 21;
|
2660
|
+
s12 += carry11;
|
2661
|
+
s11 -= carry11 * ((uint64_t) 1L << 21);
|
2190
2662
|
|
2191
2663
|
s0 += s12 * 666643;
|
2192
2664
|
s1 += s12 * 470296;
|
@@ -2195,28 +2667,50 @@ void sc_reduce(unsigned char *s)
|
|
2195
2667
|
s4 += s12 * 136657;
|
2196
2668
|
s5 -= s12 * 683901;
|
2197
2669
|
|
2198
|
-
carry0 = s0 >> 21;
|
2199
|
-
|
2200
|
-
|
2201
|
-
|
2202
|
-
|
2203
|
-
|
2204
|
-
|
2205
|
-
|
2206
|
-
|
2207
|
-
|
2208
|
-
|
2209
|
-
|
2210
|
-
|
2211
|
-
|
2212
|
-
|
2213
|
-
|
2214
|
-
|
2215
|
-
|
2216
|
-
|
2217
|
-
|
2218
|
-
|
2219
|
-
|
2670
|
+
carry0 = s0 >> 21;
|
2671
|
+
s1 += carry0;
|
2672
|
+
s0 -= carry0 * ((uint64_t) 1L << 21);
|
2673
|
+
carry1 = s1 >> 21;
|
2674
|
+
s2 += carry1;
|
2675
|
+
s1 -= carry1 * ((uint64_t) 1L << 21);
|
2676
|
+
carry2 = s2 >> 21;
|
2677
|
+
s3 += carry2;
|
2678
|
+
s2 -= carry2 * ((uint64_t) 1L << 21);
|
2679
|
+
carry3 = s3 >> 21;
|
2680
|
+
s4 += carry3;
|
2681
|
+
s3 -= carry3 * ((uint64_t) 1L << 21);
|
2682
|
+
carry4 = s4 >> 21;
|
2683
|
+
s5 += carry4;
|
2684
|
+
s4 -= carry4 * ((uint64_t) 1L << 21);
|
2685
|
+
carry5 = s5 >> 21;
|
2686
|
+
s6 += carry5;
|
2687
|
+
s5 -= carry5 * ((uint64_t) 1L << 21);
|
2688
|
+
carry6 = s6 >> 21;
|
2689
|
+
s7 += carry6;
|
2690
|
+
s6 -= carry6 * ((uint64_t) 1L << 21);
|
2691
|
+
carry7 = s7 >> 21;
|
2692
|
+
s8 += carry7;
|
2693
|
+
s7 -= carry7 * ((uint64_t) 1L << 21);
|
2694
|
+
carry8 = s8 >> 21;
|
2695
|
+
s9 += carry8;
|
2696
|
+
s8 -= carry8 * ((uint64_t) 1L << 21);
|
2697
|
+
carry9 = s9 >> 21;
|
2698
|
+
s10 += carry9;
|
2699
|
+
s9 -= carry9 * ((uint64_t) 1L << 21);
|
2700
|
+
carry10 = s10 >> 21;
|
2701
|
+
s11 += carry10;
|
2702
|
+
s10 -= carry10 * ((uint64_t) 1L << 21);
|
2703
|
+
|
2704
|
+
s[0] = s0 >> 0;
|
2705
|
+
s[1] = s0 >> 8;
|
2706
|
+
s[2] = (s0 >> 16) | (s1 * ((uint64_t) 1 << 5));
|
2707
|
+
s[3] = s1 >> 3;
|
2708
|
+
s[4] = s1 >> 11;
|
2709
|
+
s[5] = (s1 >> 19) | (s2 * ((uint64_t) 1 << 2));
|
2710
|
+
s[6] = s2 >> 6;
|
2711
|
+
s[7] = (s2 >> 14) | (s3 * ((uint64_t) 1 << 7));
|
2712
|
+
s[8] = s3 >> 1;
|
2713
|
+
s[9] = s3 >> 9;
|
2220
2714
|
s[10] = (s3 >> 17) | (s4 * ((uint64_t) 1 << 4));
|
2221
2715
|
s[11] = s4 >> 4;
|
2222
2716
|
s[12] = s4 >> 12;
|