summaryrefslogtreecommitdiff
path: root/gnu/packages
diff options
context:
space:
mode:
authorEfraim Flashner <efraim@flashner.co.il>2023-12-24 10:03:49 +0200
committerEfraim Flashner <efraim@flashner.co.il>2024-02-20 13:56:38 +0200
commit18c35009ebdf23eaf2b84f6c70ca710b896f71e6 (patch)
treef253c961b999c2780c74d8c715c8f02f650d47df /gnu/packages
parent9f84e0b5b0ea75cb49c94f3d9b7027516f4c8d9f (diff)
gnu: Add rust-ring-0.17.
* gnu/packages/crates-io.scm (rust-ring-0.17, rust-ring-0.17-sources): New variables. (rust-ring-0.16): Inherit from rust-ring-0.17. Change-Id: Ic71f17e7d9c21f75a449ceededf8725870c2395b
Diffstat (limited to 'gnu/packages')
-rw-r--r--gnu/packages/crates-io.scm220
-rw-r--r--gnu/packages/patches/rust-ring-0.17-ring-core.patch496
2 files changed, 710 insertions, 6 deletions
diff --git a/gnu/packages/crates-io.scm b/gnu/packages/crates-io.scm
index ab9cb39b4b..dd96777a06 100644
--- a/gnu/packages/crates-io.scm
+++ b/gnu/packages/crates-io.scm
@@ -61,9 +61,11 @@
#:use-module (guix utils)
#:use-module (gnu packages)
#:use-module (gnu packages admin)
+ #:use-module (gnu packages assembly)
#:use-module (gnu packages audio)
#:use-module (gnu packages autotools)
#:use-module (gnu packages avahi)
+ #:use-module (gnu packages base)
#:use-module (gnu packages bash)
#:use-module (gnu packages c)
#:use-module (gnu packages cmake)
@@ -78,6 +80,7 @@
#:use-module (gnu packages gettext)
#:use-module (gnu packages gl)
#:use-module (gnu packages glib)
+ #:use-module (gnu packages golang)
#:use-module (gnu packages icu4c)
#:use-module (gnu packages image)
#:use-module (gnu packages jemalloc)
@@ -63978,8 +63981,218 @@ Usage of the @dfn{Digital Signature Algorithm} (DSA) and @dfn{Elliptic Curve
Digital Signature Algorithm} (ECDSA).")
(license (list license:asl2.0 license:expat))))
+(define computed-origin-method (@@ (guix packages) computed-origin-method))
+(define rust-ring-0.17-sources
+ (let* ((version "0.17.7")
+ (upstream-source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/briansmith/ring")
+ (commit "2be687bebdf76648ce85109d40c015412e14b0da")))
+ (file-name (git-file-name "rust-ring" version))
+ (sha256
+ (base32 "1i3b7sha8yj990v2s5yk2a5dx3v4x9b8ckzm6bgiyi6wk4vnid69"))
+ (patches (search-patches "rust-ring-0.17-ring-core.patch")))))
+ (origin
+ (method computed-origin-method)
+ (file-name (string-append "rust-ring-" version ".tar.gz"))
+ (sha256 #f)
+ (uri
+ (delay
+ (with-imported-modules '((guix build utils))
+ #~(begin
+ (use-modules (guix build utils))
+ (set-path-environment-variable
+ "PATH" '("bin")
+ (list #+(canonical-package gzip)
+ #+(canonical-package tar)
+ #+perl
+ #+nasm
+ #+go
+ #+clang ; clang-format
+ #+python-minimal))
+ (setenv "HOME" (getcwd))
+ (copy-recursively #+upstream-source
+ (string-append "ring-" #$version))
+ (with-directory-excursion (string-append "ring-" #$version)
+ (begin
+ ;; It turns out Guix's nasm works just fine here.
+ (substitute* "build.rs"
+ (("./target/tools/windows/nasm/nasm") "nasm"))
+ ;; Files which would be deleted in a snippet:
+ (delete-file "crypto/curve25519/curve25519_tables.h")
+ (delete-file "crypto/fipsmodule/ec/p256-nistz-table.h")
+ (delete-file "crypto/fipsmodule/ec/p256_table.h")
+ ;; This file causes problems during the 'package phase and
+ ;; is not distributed with the packaged crate.
+ (substitute* "Cargo.toml"
+ (("\"bench\",") ""))
+ (delete-file "bench/Cargo.toml")
+ ;; Files to be generated in the sources:
+ (format #t "Generating the missing files ...~%")
+ (force-output)
+ (with-directory-excursion "crypto/curve25519"
+ (with-output-to-file "curve25519_tables.h"
+ (lambda _ (invoke "python3" "make_curve25519_tables.py")))
+ ;; As seen in git between 0.17.0 and 0.17.1.
+ (substitute* "curve25519_tables.h"
+ (("static const uint8_t k25519Precomp")
+ "const uint8_t k25519Precomp")))
+ (with-directory-excursion "crypto/fipsmodule/ec"
+ (invoke "go" "run" "make_tables.go")
+ (invoke "go" "run" "make_ec_scalar_base_mult_tests.go"))
+ (format #t "Generating the pregenerated files ...~%")
+ (force-output)
+ (mkdir-p "pregenerated/tmp/ring_core_generated")
+
+ ;; We generate all the files which upstream would normally be
+ ;; generate by using 'RING_PREGENERATE_ASM=1 cargo build
+ ;; --target-dir=target/pregenerate_asm' in order to not include
+ ;; a dependency on cargo when generating the sources.
+ (define (prefix script)
+ (string-append
+ "pregenerated/"
+ (string-drop-right
+ (string-drop script
+ (string-index-right script #\/)) 3)))
+
+ (for-each
+ (lambda (script)
+ (invoke "perl" script "ios64"
+ (string-append (prefix script) "-ios64.S"))
+ (invoke "perl" script "linux64"
+ (string-append (prefix script) "-linux64.S"))
+ (invoke "perl" script "win64"
+ (string-append (prefix script) "-win64.S")))
+ '("crypto/fipsmodule/aes/asm/aesv8-armx.pl"
+ "crypto/fipsmodule/modes/asm/ghashv8-armx.pl"
+ "crypto/chacha/asm/chacha-armv8.pl"
+ "crypto/cipher_extra/asm/chacha20_poly1305_armv8.pl"
+ "crypto/fipsmodule/aes/asm/vpaes-armv8.pl"
+ "crypto/fipsmodule/bn/asm/armv8-mont.pl"
+ "crypto/fipsmodule/ec/asm/p256-armv8-asm.pl"
+ "crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl"
+ "crypto/fipsmodule/sha/asm/sha512-armv8.pl"))
+
+ (for-each
+ (lambda (arch)
+ (invoke "perl" "crypto/fipsmodule/sha/asm/sha512-armv8.pl"
+ arch (string-append
+ "pregenerated/sha256-armv8-" arch ".S")))
+ '("ios64" "linux64" "win64"))
+
+ (for-each
+ (lambda (script)
+ (invoke "perl" script "linux32"
+ (string-append (prefix script) "-linux32.S")))
+ '("crypto/fipsmodule/aes/asm/aesv8-armx.pl"
+ "crypto/fipsmodule/modes/asm/ghashv8-armx.pl"
+ "crypto/fipsmodule/aes/asm/bsaes-armv7.pl"
+ "crypto/fipsmodule/aes/asm/vpaes-armv7.pl"
+ "crypto/fipsmodule/bn/asm/armv4-mont.pl"
+ "crypto/chacha/asm/chacha-armv4.pl"
+ "crypto/fipsmodule/modes/asm/ghash-armv4.pl"
+ "crypto/fipsmodule/sha/asm/sha256-armv4.pl"
+ "crypto/fipsmodule/sha/asm/sha512-armv4.pl"))
+
+ (for-each
+ (lambda (script)
+ (invoke "perl" script "elf"
+ "-fPIC" "-DOPENSSL_IA32_SSE2"
+ (string-append (prefix script) "-elf.S"))
+ (invoke "perl" script "win32n"
+ "-fPIC" "-DOPENSSL_IA32_SSE2"
+ (string-append
+ "pregenerated/tmp/"
+ (string-drop (prefix script) 13) "-win32n.asm")))
+ '("crypto/fipsmodule/aes/asm/aesni-x86.pl"
+ "crypto/fipsmodule/aes/asm/vpaes-x86.pl"
+ "crypto/fipsmodule/bn/asm/x86-mont.pl"
+ "crypto/chacha/asm/chacha-x86.pl"
+ "crypto/fipsmodule/modes/asm/ghash-x86.pl"))
+
+ (for-each
+ (lambda (script)
+ (invoke "perl" script "elf"
+ (string-append (prefix script) "-elf.S"))
+ (invoke "perl" script "macosx"
+ (string-append (prefix script) "-macosx.S"))
+ (invoke "perl" script "nasm"
+ (string-append
+ "pregenerated/tmp/"
+ (string-drop (prefix script) 13) "-nasm.asm")))
+ '("crypto/chacha/asm/chacha-x86_64.pl"
+ "crypto/fipsmodule/aes/asm/aesni-x86_64.pl"
+ "crypto/fipsmodule/aes/asm/vpaes-x86_64.pl"
+ "crypto/fipsmodule/bn/asm/x86_64-mont.pl"
+ "crypto/fipsmodule/bn/asm/x86_64-mont5.pl"
+ "crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl"
+ "crypto/fipsmodule/modes/asm/aesni-gcm-x86_64.pl"
+ "crypto/fipsmodule/modes/asm/ghash-x86_64.pl"
+ "crypto/fipsmodule/sha/asm/sha512-x86_64.pl"
+ "crypto/cipher_extra/asm/chacha20_poly1305_x86_64.pl"))
+
+ (invoke "perl" "crypto/fipsmodule/sha/asm/sha512-x86_64.pl"
+ "elf" "pregenerated/sha256-x86_64-elf.S")
+
+ (invoke "perl" "crypto/fipsmodule/sha/asm/sha512-x86_64.pl"
+ "macosx" "pregenerated/sha256-x86_64-macosx.S")
+
+ (invoke "perl" "crypto/fipsmodule/sha/asm/sha512-x86_64.pl"
+ "nasm" "pregenerated/tmp/sha256-x86_64-nasm.asm")
+
+ ;; TODO: Extract ring_core_generated/prefix_symbols_nasm.inc
+ ;; and ring_core_generated/prefix_symbols_asm.h from build.rs.
+
+ (for-each
+ (lambda (script)
+ (invoke "nasm" "-o" (string-append (prefix script) "o")
+ "-f" "win32" "-i" "include/" "-i" "pregenerated/tmp/"
+ "-Xgnu" "-gcv8" script))
+ (find-files "pregenerated/tmp" "win32n\\.asm"))
+
+ (for-each
+ (lambda (script)
+ (invoke "nasm" "-o" (string-append (prefix script) "o")
+ "-f" "win64" "-i" "include/" "-i" "pregenerated/tmp/"
+ "-Xgnu" "-gcv8" script))
+ (find-files "pregenerated/tmp" "nasm\\.asm"))
+
+ (format #t "Creating the tarball ...~%")
+ (force-output)
+ ;; The other option is to use cargo package --allow-dirty
+ (with-directory-excursion "../"
+ (invoke "tar" "czf" #$output
+ ;; avoid non-determinism in the archive
+ "--sort=name" "--mtime=@0"
+ "--owner=root:0" "--group=root:0"
+ (string-append "ring-" #$version))))))))))))
+
+(define-public rust-ring-0.17
+ (package
+ (name "rust-ring")
+ (version "0.17.7")
+ (source rust-ring-0.17-sources)
+ (build-system cargo-build-system)
+ (arguments
+ `(#:cargo-inputs (("rust-cc" ,rust-cc-1)
+ ("rust-getrandom" ,rust-getrandom-0.2)
+ ("rust-libc" ,rust-libc-0.2)
+ ("rust-spin" ,rust-spin-0.9)
+ ("rust-untrusted" ,rust-untrusted-0.9)
+ ("rust-windows-sys" ,rust-windows-sys-0.48))
+ #:cargo-development-inputs
+ (("rust-libc" ,rust-libc-0.2)
+ ("rust-wasm-bindgen-test" ,rust-wasm-bindgen-test-0.3))))
+ (home-page "https://github.com/briansmith/ring")
+ (synopsis "Safe, fast, small crypto using Rust")
+ (description "This package provided safe, fast, small crypto using Rust.")
+ (license (list license:isc license:openssl))))
+
(define-public rust-ring-0.16
(package
+ (inherit rust-ring-0.17)
(name "rust-ring")
(version "0.16.20")
(source
@@ -64004,7 +64217,6 @@ Digital Signature Algorithm} (ECDSA).")
(with-output-to-file ".git"
(lambda _
(format #t "")))))))
- (build-system cargo-build-system)
(arguments
`(#:cargo-inputs
(("rust-libc" ,rust-libc-0.2)
@@ -64028,14 +64240,10 @@ Digital Signature Algorithm} (ECDSA).")
(invoke "python" "make_curve25519_tables.py")))))))))
(native-inputs
(list clang perl python-2))
- (home-page "https://github.com/briansmith/ring")
- (synopsis "Safe, fast, small crypto using Rust")
- (description "This package provided safe, fast, small crypto using Rust.")
;; For a mostly complete list of supported systems see:
;; https://github.com/briansmith/ring/blob/main/.github/workflows/ci.yml#L170
(supported-systems (list "aarch64-linux" "armhf-linux"
- "i686-linux" "x86_64-linux"))
- (license (list license:isc license:openssl))))
+ "i686-linux" "x86_64-linux"))))
(define-public rust-ring-0.14
(package
diff --git a/gnu/packages/patches/rust-ring-0.17-ring-core.patch b/gnu/packages/patches/rust-ring-0.17-ring-core.patch
new file mode 100644
index 0000000000..faa3a8a191
--- /dev/null
+++ b/gnu/packages/patches/rust-ring-0.17-ring-core.patch
@@ -0,0 +1,496 @@
+These two files are needed to finish generating the files for windows
+and were generated using 'RING_PREGENERATE_ASM=1 cargo build
+--target-dir=target/pregenerate_asm'. Included here so we don't need to
+add cargo to the computed-source.
+
+---
+ .../ring_core_generated/prefix_symbols_asm.h | 236 ++++++++++++++++++
+ .../prefix_symbols_nasm.inc | 236 ++++++++++++++++++
+ 2 files changed, 472 insertions(+)
+ create mode 100644 pregenerated/tmp/ring_core_generated/prefix_symbols_asm.h
+ create mode 100644 pregenerated/tmp/ring_core_generated/prefix_symbols_nasm.inc
+
+diff --git a/pregenerated/tmp/ring_core_generated/prefix_symbols_asm.h b/pregenerated/tmp/ring_core_generated/prefix_symbols_asm.h
+new file mode 100644
+index 000000000..1cd766400
+--- /dev/null
++++ b/pregenerated/tmp/ring_core_generated/prefix_symbols_asm.h
+@@ -0,0 +1,236 @@
++
++#ifndef ring_core_generated_PREFIX_SYMBOLS_ASM_H
++#define ring_core_generated_PREFIX_SYMBOLS_ASM_H
++
++#if defined(__APPLE__)
++#define _ecp_nistz256_point_double _p256_point_double
++#define _ecp_nistz256_point_add _p256_point_add
++#define _ecp_nistz256_point_add_affine _p256_point_add_affine
++#define _ecp_nistz256_ord_mul_mont _p256_scalar_mul_mont
++#define _ecp_nistz256_ord_sqr_mont _p256_scalar_sqr_rep_mont
++#define _ecp_nistz256_mul_mont _p256_mul_mont
++#define _ecp_nistz256_sqr_mont _p256_sqr_mont
++#define _CRYPTO_memcmp _ring_core_0_17_7_CRYPTO_memcmp
++#define _CRYPTO_poly1305_finish _ring_core_0_17_7_CRYPTO_poly1305_finish
++#define _CRYPTO_poly1305_finish_neon _ring_core_0_17_7_CRYPTO_poly1305_finish_neon
++#define _CRYPTO_poly1305_init _ring_core_0_17_7_CRYPTO_poly1305_init
++#define _CRYPTO_poly1305_init_neon _ring_core_0_17_7_CRYPTO_poly1305_init_neon
++#define _CRYPTO_poly1305_update _ring_core_0_17_7_CRYPTO_poly1305_update
++#define _CRYPTO_poly1305_update_neon _ring_core_0_17_7_CRYPTO_poly1305_update_neon
++#define _ChaCha20_ctr32 _ring_core_0_17_7_ChaCha20_ctr32
++#define _LIMBS_add_mod _ring_core_0_17_7_LIMBS_add_mod
++#define _LIMBS_are_even _ring_core_0_17_7_LIMBS_are_even
++#define _LIMBS_are_zero _ring_core_0_17_7_LIMBS_are_zero
++#define _LIMBS_equal _ring_core_0_17_7_LIMBS_equal
++#define _LIMBS_equal_limb _ring_core_0_17_7_LIMBS_equal_limb
++#define _LIMBS_less_than _ring_core_0_17_7_LIMBS_less_than
++#define _LIMBS_less_than_limb _ring_core_0_17_7_LIMBS_less_than_limb
++#define _LIMBS_reduce_once _ring_core_0_17_7_LIMBS_reduce_once
++#define _LIMBS_select_512_32 _ring_core_0_17_7_LIMBS_select_512_32
++#define _LIMBS_shl_mod _ring_core_0_17_7_LIMBS_shl_mod
++#define _LIMBS_sub_mod _ring_core_0_17_7_LIMBS_sub_mod
++#define _LIMBS_window5_split_window _ring_core_0_17_7_LIMBS_window5_split_window
++#define _LIMBS_window5_unsplit_window _ring_core_0_17_7_LIMBS_window5_unsplit_window
++#define _LIMB_shr _ring_core_0_17_7_LIMB_shr
++#define _OPENSSL_armcap_P _ring_core_0_17_7_OPENSSL_armcap_P
++#define _OPENSSL_cpuid_setup _ring_core_0_17_7_OPENSSL_cpuid_setup
++#define _OPENSSL_ia32cap_P _ring_core_0_17_7_OPENSSL_ia32cap_P
++#define _aes_hw_ctr32_encrypt_blocks _ring_core_0_17_7_aes_hw_ctr32_encrypt_blocks
++#define _aes_hw_encrypt _ring_core_0_17_7_aes_hw_encrypt
++#define _aes_hw_set_encrypt_key _ring_core_0_17_7_aes_hw_set_encrypt_key
++#define _aes_nohw_ctr32_encrypt_blocks _ring_core_0_17_7_aes_nohw_ctr32_encrypt_blocks
++#define _aes_nohw_encrypt _ring_core_0_17_7_aes_nohw_encrypt
++#define _aes_nohw_set_encrypt_key _ring_core_0_17_7_aes_nohw_set_encrypt_key
++#define _aesni_gcm_decrypt _ring_core_0_17_7_aesni_gcm_decrypt
++#define _aesni_gcm_encrypt _ring_core_0_17_7_aesni_gcm_encrypt
++#define _bn_from_montgomery_in_place _ring_core_0_17_7_bn_from_montgomery_in_place
++#define _bn_gather5 _ring_core_0_17_7_bn_gather5
++#define _bn_mul_mont _ring_core_0_17_7_bn_mul_mont
++#define _bn_mul_mont_gather5 _ring_core_0_17_7_bn_mul_mont_gather5
++#define _bn_neg_inv_mod_r_u64 _ring_core_0_17_7_bn_neg_inv_mod_r_u64
++#define _bn_power5 _ring_core_0_17_7_bn_power5
++#define _bn_scatter5 _ring_core_0_17_7_bn_scatter5
++#define _bn_sqr8x_internal _ring_core_0_17_7_bn_sqr8x_internal
++#define _bn_sqrx8x_internal _ring_core_0_17_7_bn_sqrx8x_internal
++#define _bsaes_ctr32_encrypt_blocks _ring_core_0_17_7_bsaes_ctr32_encrypt_blocks
++#define _bssl_constant_time_test_conditional_memcpy _ring_core_0_17_7_bssl_constant_time_test_conditional_memcpy
++#define _bssl_constant_time_test_conditional_memxor _ring_core_0_17_7_bssl_constant_time_test_conditional_memxor
++#define _bssl_constant_time_test_main _ring_core_0_17_7_bssl_constant_time_test_main
++#define _chacha20_poly1305_open _ring_core_0_17_7_chacha20_poly1305_open
++#define _chacha20_poly1305_seal _ring_core_0_17_7_chacha20_poly1305_seal
++#define _fiat_curve25519_adx_mul _ring_core_0_17_7_fiat_curve25519_adx_mul
++#define _fiat_curve25519_adx_square _ring_core_0_17_7_fiat_curve25519_adx_square
++#define _gcm_ghash_avx _ring_core_0_17_7_gcm_ghash_avx
++#define _gcm_ghash_clmul _ring_core_0_17_7_gcm_ghash_clmul
++#define _gcm_ghash_neon _ring_core_0_17_7_gcm_ghash_neon
++#define _gcm_gmult_clmul _ring_core_0_17_7_gcm_gmult_clmul
++#define _gcm_gmult_neon _ring_core_0_17_7_gcm_gmult_neon
++#define _gcm_init_avx _ring_core_0_17_7_gcm_init_avx
++#define _gcm_init_clmul _ring_core_0_17_7_gcm_init_clmul
++#define _gcm_init_neon _ring_core_0_17_7_gcm_init_neon
++#define _k25519Precomp _ring_core_0_17_7_k25519Precomp
++#define _limbs_mul_add_limb _ring_core_0_17_7_limbs_mul_add_limb
++#define _little_endian_bytes_from_scalar _ring_core_0_17_7_little_endian_bytes_from_scalar
++#define _ecp_nistz256_neg _ring_core_0_17_7_ecp_nistz256_neg
++#define _ecp_nistz256_select_w5 _ring_core_0_17_7_ecp_nistz256_select_w5
++#define _ecp_nistz256_select_w7 _ring_core_0_17_7_ecp_nistz256_select_w7
++#define _p256_mul_mont _ring_core_0_17_7_p256_mul_mont
++#define _p256_point_add _ring_core_0_17_7_p256_point_add
++#define _p256_point_add_affine _ring_core_0_17_7_p256_point_add_affine
++#define _p256_point_double _ring_core_0_17_7_p256_point_double
++#define _p256_point_mul _ring_core_0_17_7_p256_point_mul
++#define _p256_point_mul_base _ring_core_0_17_7_p256_point_mul_base
++#define _p256_point_mul_base_vartime _ring_core_0_17_7_p256_point_mul_base_vartime
++#define _p256_scalar_mul_mont _ring_core_0_17_7_p256_scalar_mul_mont
++#define _p256_scalar_sqr_rep_mont _ring_core_0_17_7_p256_scalar_sqr_rep_mont
++#define _p256_sqr_mont _ring_core_0_17_7_p256_sqr_mont
++#define _p384_elem_div_by_2 _ring_core_0_17_7_p384_elem_div_by_2
++#define _p384_elem_mul_mont _ring_core_0_17_7_p384_elem_mul_mont
++#define _p384_elem_neg _ring_core_0_17_7_p384_elem_neg
++#define _p384_elem_sub _ring_core_0_17_7_p384_elem_sub
++#define _p384_point_add _ring_core_0_17_7_p384_point_add
++#define _p384_point_double _ring_core_0_17_7_p384_point_double
++#define _p384_point_mul _ring_core_0_17_7_p384_point_mul
++#define _p384_scalar_mul_mont _ring_core_0_17_7_p384_scalar_mul_mont
++#define _openssl_poly1305_neon2_addmulmod _ring_core_0_17_7_openssl_poly1305_neon2_addmulmod
++#define _openssl_poly1305_neon2_blocks _ring_core_0_17_7_openssl_poly1305_neon2_blocks
++#define _sha256_block_data_order _ring_core_0_17_7_sha256_block_data_order
++#define _sha512_block_data_order _ring_core_0_17_7_sha512_block_data_order
++#define _vpaes_ctr32_encrypt_blocks _ring_core_0_17_7_vpaes_ctr32_encrypt_blocks
++#define _vpaes_encrypt _ring_core_0_17_7_vpaes_encrypt
++#define _vpaes_encrypt_key_to_bsaes _ring_core_0_17_7_vpaes_encrypt_key_to_bsaes
++#define _vpaes_set_encrypt_key _ring_core_0_17_7_vpaes_set_encrypt_key
++#define _x25519_NEON _ring_core_0_17_7_x25519_NEON
++#define _x25519_fe_invert _ring_core_0_17_7_x25519_fe_invert
++#define _x25519_fe_isnegative _ring_core_0_17_7_x25519_fe_isnegative
++#define _x25519_fe_mul_ttt _ring_core_0_17_7_x25519_fe_mul_ttt
++#define _x25519_fe_neg _ring_core_0_17_7_x25519_fe_neg
++#define _x25519_fe_tobytes _ring_core_0_17_7_x25519_fe_tobytes
++#define _x25519_ge_double_scalarmult_vartime _ring_core_0_17_7_x25519_ge_double_scalarmult_vartime
++#define _x25519_ge_frombytes_vartime _ring_core_0_17_7_x25519_ge_frombytes_vartime
++#define _x25519_ge_scalarmult_base _ring_core_0_17_7_x25519_ge_scalarmult_base
++#define _x25519_ge_scalarmult_base_adx _ring_core_0_17_7_x25519_ge_scalarmult_base_adx
++#define _x25519_public_from_private_generic_masked _ring_core_0_17_7_x25519_public_from_private_generic_masked
++#define _x25519_sc_mask _ring_core_0_17_7_x25519_sc_mask
++#define _x25519_sc_muladd _ring_core_0_17_7_x25519_sc_muladd
++#define _x25519_sc_reduce _ring_core_0_17_7_x25519_sc_reduce
++#define _x25519_scalar_mult_adx _ring_core_0_17_7_x25519_scalar_mult_adx
++#define _x25519_scalar_mult_generic_masked _ring_core_0_17_7_x25519_scalar_mult_generic_masked
++
++#else
++#define ecp_nistz256_point_double p256_point_double
++#define ecp_nistz256_point_add p256_point_add
++#define ecp_nistz256_point_add_affine p256_point_add_affine
++#define ecp_nistz256_ord_mul_mont p256_scalar_mul_mont
++#define ecp_nistz256_ord_sqr_mont p256_scalar_sqr_rep_mont
++#define ecp_nistz256_mul_mont p256_mul_mont
++#define ecp_nistz256_sqr_mont p256_sqr_mont
++#define CRYPTO_memcmp ring_core_0_17_7_CRYPTO_memcmp
++#define CRYPTO_poly1305_finish ring_core_0_17_7_CRYPTO_poly1305_finish
++#define CRYPTO_poly1305_finish_neon ring_core_0_17_7_CRYPTO_poly1305_finish_neon
++#define CRYPTO_poly1305_init ring_core_0_17_7_CRYPTO_poly1305_init
++#define CRYPTO_poly1305_init_neon ring_core_0_17_7_CRYPTO_poly1305_init_neon
++#define CRYPTO_poly1305_update ring_core_0_17_7_CRYPTO_poly1305_update
++#define CRYPTO_poly1305_update_neon ring_core_0_17_7_CRYPTO_poly1305_update_neon
++#define ChaCha20_ctr32 ring_core_0_17_7_ChaCha20_ctr32
++#define LIMBS_add_mod ring_core_0_17_7_LIMBS_add_mod
++#define LIMBS_are_even ring_core_0_17_7_LIMBS_are_even
++#define LIMBS_are_zero ring_core_0_17_7_LIMBS_are_zero
++#define LIMBS_equal ring_core_0_17_7_LIMBS_equal
++#define LIMBS_equal_limb ring_core_0_17_7_LIMBS_equal_limb
++#define LIMBS_less_than ring_core_0_17_7_LIMBS_less_than
++#define LIMBS_less_than_limb ring_core_0_17_7_LIMBS_less_than_limb
++#define LIMBS_reduce_once ring_core_0_17_7_LIMBS_reduce_once
++#define LIMBS_select_512_32 ring_core_0_17_7_LIMBS_select_512_32
++#define LIMBS_shl_mod ring_core_0_17_7_LIMBS_shl_mod
++#define LIMBS_sub_mod ring_core_0_17_7_LIMBS_sub_mod
++#define LIMBS_window5_split_window ring_core_0_17_7_LIMBS_window5_split_window
++#define LIMBS_window5_unsplit_window ring_core_0_17_7_LIMBS_window5_unsplit_window
++#define LIMB_shr ring_core_0_17_7_LIMB_shr
++#define OPENSSL_armcap_P ring_core_0_17_7_OPENSSL_armcap_P
++#define OPENSSL_cpuid_setup ring_core_0_17_7_OPENSSL_cpuid_setup
++#define OPENSSL_ia32cap_P ring_core_0_17_7_OPENSSL_ia32cap_P
++#define aes_hw_ctr32_encrypt_blocks ring_core_0_17_7_aes_hw_ctr32_encrypt_blocks
++#define aes_hw_encrypt ring_core_0_17_7_aes_hw_encrypt
++#define aes_hw_set_encrypt_key ring_core_0_17_7_aes_hw_set_encrypt_key
++#define aes_nohw_ctr32_encrypt_blocks ring_core_0_17_7_aes_nohw_ctr32_encrypt_blocks
++#define aes_nohw_encrypt ring_core_0_17_7_aes_nohw_encrypt
++#define aes_nohw_set_encrypt_key ring_core_0_17_7_aes_nohw_set_encrypt_key
++#define aesni_gcm_decrypt ring_core_0_17_7_aesni_gcm_decrypt
++#define aesni_gcm_encrypt ring_core_0_17_7_aesni_gcm_encrypt
++#define bn_from_montgomery_in_place ring_core_0_17_7_bn_from_montgomery_in_place
++#define bn_gather5 ring_core_0_17_7_bn_gather5
++#define bn_mul_mont ring_core_0_17_7_bn_mul_mont
++#define bn_mul_mont_gather5 ring_core_0_17_7_bn_mul_mont_gather5
++#define bn_neg_inv_mod_r_u64 ring_core_0_17_7_bn_neg_inv_mod_r_u64
++#define bn_power5 ring_core_0_17_7_bn_power5
++#define bn_scatter5 ring_core_0_17_7_bn_scatter5
++#define bn_sqr8x_internal ring_core_0_17_7_bn_sqr8x_internal
++#define bn_sqrx8x_internal ring_core_0_17_7_bn_sqrx8x_internal
++#define bsaes_ctr32_encrypt_blocks ring_core_0_17_7_bsaes_ctr32_encrypt_blocks
++#define bssl_constant_time_test_conditional_memcpy ring_core_0_17_7_bssl_constant_time_test_conditional_memcpy
++#define bssl_constant_time_test_conditional_memxor ring_core_0_17_7_bssl_constant_time_test_conditional_memxor
++#define bssl_constant_time_test_main ring_core_0_17_7_bssl_constant_time_test_main
++#define chacha20_poly1305_open ring_core_0_17_7_chacha20_poly1305_open
++#define chacha20_poly1305_seal ring_core_0_17_7_chacha20_poly1305_seal
++#define fiat_curve25519_adx_mul ring_core_0_17_7_fiat_curve25519_adx_mul
++#define fiat_curve25519_adx_square ring_core_0_17_7_fiat_curve25519_adx_square
++#define gcm_ghash_avx ring_core_0_17_7_gcm_ghash_avx
++#define gcm_ghash_clmul ring_core_0_17_7_gcm_ghash_clmul
++#define gcm_ghash_neon ring_core_0_17_7_gcm_ghash_neon
++#define gcm_gmult_clmul ring_core_0_17_7_gcm_gmult_clmul
++#define gcm_gmult_neon ring_core_0_17_7_gcm_gmult_neon
++#define gcm_init_avx ring_core_0_17_7_gcm_init_avx
++#define gcm_init_clmul ring_core_0_17_7_gcm_init_clmul
++#define gcm_init_neon ring_core_0_17_7_gcm_init_neon
++#define k25519Precomp ring_core_0_17_7_k25519Precomp
++#define limbs_mul_add_limb ring_core_0_17_7_limbs_mul_add_limb
++#define little_endian_bytes_from_scalar ring_core_0_17_7_little_endian_bytes_from_scalar
++#define ecp_nistz256_neg ring_core_0_17_7_ecp_nistz256_neg
++#define ecp_nistz256_select_w5 ring_core_0_17_7_ecp_nistz256_select_w5
++#define ecp_nistz256_select_w7 ring_core_0_17_7_ecp_nistz256_select_w7
++#define p256_mul_mont ring_core_0_17_7_p256_mul_mont
++#define p256_point_add ring_core_0_17_7_p256_point_add
++#define p256_point_add_affine ring_core_0_17_7_p256_point_add_affine
++#define p256_point_double ring_core_0_17_7_p256_point_double
++#define p256_point_mul ring_core_0_17_7_p256_point_mul
++#define p256_point_mul_base ring_core_0_17_7_p256_point_mul_base
++#define p256_point_mul_base_vartime ring_core_0_17_7_p256_point_mul_base_vartime
++#define p256_scalar_mul_mont ring_core_0_17_7_p256_scalar_mul_mont
++#define p256_scalar_sqr_rep_mont ring_core_0_17_7_p256_scalar_sqr_rep_mont
++#define p256_sqr_mont ring_core_0_17_7_p256_sqr_mont
++#define p384_elem_div_by_2 ring_core_0_17_7_p384_elem_div_by_2
++#define p384_elem_mul_mont ring_core_0_17_7_p384_elem_mul_mont
++#define p384_elem_neg ring_core_0_17_7_p384_elem_neg
++#define p384_elem_sub ring_core_0_17_7_p384_elem_sub
++#define p384_point_add ring_core_0_17_7_p384_point_add
++#define p384_point_double ring_core_0_17_7_p384_point_double
++#define p384_point_mul ring_core_0_17_7_p384_point_mul
++#define p384_scalar_mul_mont ring_core_0_17_7_p384_scalar_mul_mont
++#define openssl_poly1305_neon2_addmulmod ring_core_0_17_7_openssl_poly1305_neon2_addmulmod
++#define openssl_poly1305_neon2_blocks ring_core_0_17_7_openssl_poly1305_neon2_blocks
++#define sha256_block_data_order ring_core_0_17_7_sha256_block_data_order
++#define sha512_block_data_order ring_core_0_17_7_sha512_block_data_order
++#define vpaes_ctr32_encrypt_blocks ring_core_0_17_7_vpaes_ctr32_encrypt_blocks
++#define vpaes_encrypt ring_core_0_17_7_vpaes_encrypt
++#define vpaes_encrypt_key_to_bsaes ring_core_0_17_7_vpaes_encrypt_key_to_bsaes
++#define vpaes_set_encrypt_key ring_core_0_17_7_vpaes_set_encrypt_key
++#define x25519_NEON ring_core_0_17_7_x25519_NEON
++#define x25519_fe_invert ring_core_0_17_7_x25519_fe_invert
++#define x25519_fe_isnegative ring_core_0_17_7_x25519_fe_isnegative
++#define x25519_fe_mul_ttt ring_core_0_17_7_x25519_fe_mul_ttt
++#define x25519_fe_neg ring_core_0_17_7_x25519_fe_neg
++#define x25519_fe_tobytes ring_core_0_17_7_x25519_fe_tobytes
++#define x25519_ge_double_scalarmult_vartime ring_core_0_17_7_x25519_ge_double_scalarmult_vartime
++#define x25519_ge_frombytes_vartime ring_core_0_17_7_x25519_ge_frombytes_vartime
++#define x25519_ge_scalarmult_base ring_core_0_17_7_x25519_ge_scalarmult_base
++#define x25519_ge_scalarmult_base_adx ring_core_0_17_7_x25519_ge_scalarmult_base_adx
++#define x25519_public_from_private_generic_masked ring_core_0_17_7_x25519_public_from_private_generic_masked
++#define x25519_sc_mask ring_core_0_17_7_x25519_sc_mask
++#define x25519_sc_muladd ring_core_0_17_7_x25519_sc_muladd
++#define x25519_sc_reduce ring_core_0_17_7_x25519_sc_reduce
++#define x25519_scalar_mult_adx ring_core_0_17_7_x25519_scalar_mult_adx
++#define x25519_scalar_mult_generic_masked ring_core_0_17_7_x25519_scalar_mult_generic_masked
++
++#endif
++#endif
+diff --git a/pregenerated/tmp/ring_core_generated/prefix_symbols_nasm.inc b/pregenerated/tmp/ring_core_generated/prefix_symbols_nasm.inc
+new file mode 100644
+index 000000000..65ce0cfaa
+--- /dev/null
++++ b/pregenerated/tmp/ring_core_generated/prefix_symbols_nasm.inc
+@@ -0,0 +1,236 @@
++
++%ifndef ring_core_generated_PREFIX_SYMBOLS_NASM_INC
++%define ring_core_generated_PREFIX_SYMBOLS_NASM_INC
++
++%ifidn __OUTPUT_FORMAT__,win32
++%define _ecp_nistz256_point_double _p256_point_double
++%define _ecp_nistz256_point_add _p256_point_add
++%define _ecp_nistz256_point_add_affine _p256_point_add_affine
++%define _ecp_nistz256_ord_mul_mont _p256_scalar_mul_mont
++%define _ecp_nistz256_ord_sqr_mont _p256_scalar_sqr_rep_mont
++%define _ecp_nistz256_mul_mont _p256_mul_mont
++%define _ecp_nistz256_sqr_mont _p256_sqr_mont
++%define _CRYPTO_memcmp _ring_core_0_17_7_CRYPTO_memcmp
++%define _CRYPTO_poly1305_finish _ring_core_0_17_7_CRYPTO_poly1305_finish
++%define _CRYPTO_poly1305_finish_neon _ring_core_0_17_7_CRYPTO_poly1305_finish_neon
++%define _CRYPTO_poly1305_init _ring_core_0_17_7_CRYPTO_poly1305_init
++%define _CRYPTO_poly1305_init_neon _ring_core_0_17_7_CRYPTO_poly1305_init_neon
++%define _CRYPTO_poly1305_update _ring_core_0_17_7_CRYPTO_poly1305_update
++%define _CRYPTO_poly1305_update_neon _ring_core_0_17_7_CRYPTO_poly1305_update_neon
++%define _ChaCha20_ctr32 _ring_core_0_17_7_ChaCha20_ctr32
++%define _LIMBS_add_mod _ring_core_0_17_7_LIMBS_add_mod
++%define _LIMBS_are_even _ring_core_0_17_7_LIMBS_are_even
++%define _LIMBS_are_zero _ring_core_0_17_7_LIMBS_are_zero
++%define _LIMBS_equal _ring_core_0_17_7_LIMBS_equal
++%define _LIMBS_equal_limb _ring_core_0_17_7_LIMBS_equal_limb
++%define _LIMBS_less_than _ring_core_0_17_7_LIMBS_less_than
++%define _LIMBS_less_than_limb _ring_core_0_17_7_LIMBS_less_than_limb
++%define _LIMBS_reduce_once _ring_core_0_17_7_LIMBS_reduce_once
++%define _LIMBS_select_512_32 _ring_core_0_17_7_LIMBS_select_512_32
++%define _LIMBS_shl_mod _ring_core_0_17_7_LIMBS_shl_mod
++%define _LIMBS_sub_mod _ring_core_0_17_7_LIMBS_sub_mod
++%define _LIMBS_window5_split_window _ring_core_0_17_7_LIMBS_window5_split_window
++%define _LIMBS_window5_unsplit_window _ring_core_0_17_7_LIMBS_window5_unsplit_window
++%define _LIMB_shr _ring_core_0_17_7_LIMB_shr
++%define _OPENSSL_armcap_P _ring_core_0_17_7_OPENSSL_armcap_P
++%define _OPENSSL_cpuid_setup _ring_core_0_17_7_OPENSSL_cpuid_setup
++%define _OPENSSL_ia32cap_P _ring_core_0_17_7_OPENSSL_ia32cap_P
++%define _aes_hw_ctr32_encrypt_blocks _ring_core_0_17_7_aes_hw_ctr32_encrypt_blocks
++%define _aes_hw_encrypt _ring_core_0_17_7_aes_hw_encrypt
++%define _aes_hw_set_encrypt_key _ring_core_0_17_7_aes_hw_set_encrypt_key
++%define _aes_nohw_ctr32_encrypt_blocks _ring_core_0_17_7_aes_nohw_ctr32_encrypt_blocks
++%define _aes_nohw_encrypt _ring_core_0_17_7_aes_nohw_encrypt
++%define _aes_nohw_set_encrypt_key _ring_core_0_17_7_aes_nohw_set_encrypt_key
++%define _aesni_gcm_decrypt _ring_core_0_17_7_aesni_gcm_decrypt
++%define _aesni_gcm_encrypt _ring_core_0_17_7_aesni_gcm_encrypt
++%define _bn_from_montgomery_in_place _ring_core_0_17_7_bn_from_montgomery_in_place
++%define _bn_gather5 _ring_core_0_17_7_bn_gather5
++%define _bn_mul_mont _ring_core_0_17_7_bn_mul_mont
++%define _bn_mul_mont_gather5 _ring_core_0_17_7_bn_mul_mont_gather5
++%define _bn_neg_inv_mod_r_u64 _ring_core_0_17_7_bn_neg_inv_mod_r_u64
++%define _bn_power5 _ring_core_0_17_7_bn_power5
++%define _bn_scatter5 _ring_core_0_17_7_bn_scatter5
++%define _bn_sqr8x_internal _ring_core_0_17_7_bn_sqr8x_internal
++%define _bn_sqrx8x_internal _ring_core_0_17_7_bn_sqrx8x_internal
++%define _bsaes_ctr32_encrypt_blocks _ring_core_0_17_7_bsaes_ctr32_encrypt_blocks
++%define _bssl_constant_time_test_conditional_memcpy _ring_core_0_17_7_bssl_constant_time_test_conditional_memcpy
++%define _bssl_constant_time_test_conditional_memxor _ring_core_0_17_7_bssl_constant_time_test_conditional_memxor
++%define _bssl_constant_time_test_main _ring_core_0_17_7_bssl_constant_time_test_main
++%define _chacha20_poly1305_open _ring_core_0_17_7_chacha20_poly1305_open
++%define _chacha20_poly1305_seal _ring_core_0_17_7_chacha20_poly1305_seal
++%define _fiat_curve25519_adx_mul _ring_core_0_17_7_fiat_curve25519_adx_mul
++%define _fiat_curve25519_adx_square _ring_core_0_17_7_fiat_curve25519_adx_square
++%define _gcm_ghash_avx _ring_core_0_17_7_gcm_ghash_avx
++%define _gcm_ghash_clmul _ring_core_0_17_7_gcm_ghash_clmul
++%define _gcm_ghash_neon _ring_core_0_17_7_gcm_ghash_neon
++%define _gcm_gmult_clmul _ring_core_0_17_7_gcm_gmult_clmul
++%define _gcm_gmult_neon _ring_core_0_17_7_gcm_gmult_neon
++%define _gcm_init_avx _ring_core_0_17_7_gcm_init_avx
++%define _gcm_init_clmul _ring_core_0_17_7_gcm_init_clmul
++%define _gcm_init_neon _ring_core_0_17_7_gcm_init_neon
++%define _k25519Precomp _ring_core_0_17_7_k25519Precomp
++%define _limbs_mul_add_limb _ring_core_0_17_7_limbs_mul_add_limb
++%define _little_endian_bytes_from_scalar _ring_core_0_17_7_little_endian_bytes_from_scalar
++%define _ecp_nistz256_neg _ring_core_0_17_7_ecp_nistz256_neg
++%define _ecp_nistz256_select_w5 _ring_core_0_17_7_ecp_nistz256_select_w5
++%define _ecp_nistz256_select_w7 _ring_core_0_17_7_ecp_nistz256_select_w7
++%define _p256_mul_mont _ring_core_0_17_7_p256_mul_mont
++%define _p256_point_add _ring_core_0_17_7_p256_point_add
++%define _p256_point_add_affine _ring_core_0_17_7_p256_point_add_affine
++%define _p256_point_double _ring_core_0_17_7_p256_point_double
++%define _p256_point_mul _ring_core_0_17_7_p256_point_mul
++%define _p256_point_mul_base _ring_core_0_17_7_p256_point_mul_base
++%define _p256_point_mul_base_vartime _ring_core_0_17_7_p256_point_mul_base_vartime
++%define _p256_scalar_mul_mont _ring_core_0_17_7_p256_scalar_mul_mont
++%define _p256_scalar_sqr_rep_mont _ring_core_0_17_7_p256_scalar_sqr_rep_mont
++%define _p256_sqr_mont _ring_core_0_17_7_p256_sqr_mont
++%define _p384_elem_div_by_2 _ring_core_0_17_7_p384_elem_div_by_2
++%define _p384_elem_mul_mont _ring_core_0_17_7_p384_elem_mul_mont
++%define _p384_elem_neg _ring_core_0_17_7_p384_elem_neg
++%define _p384_elem_sub _ring_core_0_17_7_p384_elem_sub
++%define _p384_point_add _ring_core_0_17_7_p384_point_add
++%define _p384_point_double _ring_core_0_17_7_p384_point_double
++%define _p384_point_mul _ring_core_0_17_7_p384_point_mul
++%define _p384_scalar_mul_mont _ring_core_0_17_7_p384_scalar_mul_mont
++%define _openssl_poly1305_neon2_addmulmod _ring_core_0_17_7_openssl_poly1305_neon2_addmulmod
++%define _openssl_poly1305_neon2_blocks _ring_core_0_17_7_openssl_poly1305_neon2_blocks
++%define _sha256_block_data_order _ring_core_0_17_7_sha256_block_data_order
++%define _sha512_block_data_order _ring_core_0_17_7_sha512_block_data_order
++%define _vpaes_ctr32_encrypt_blocks _ring_core_0_17_7_vpaes_ctr32_encrypt_blocks
++%define _vpaes_encrypt _ring_core_0_17_7_vpaes_encrypt
++%define _vpaes_encrypt_key_to_bsaes _ring_core_0_17_7_vpaes_encrypt_key_to_bsaes
++%define _vpaes_set_encrypt_key _ring_core_0_17_7_vpaes_set_encrypt_key
++%define _x25519_NEON _ring_core_0_17_7_x25519_NEON
++%define _x25519_fe_invert _ring_core_0_17_7_x25519_fe_invert
++%define _x25519_fe_isnegative _ring_core_0_17_7_x25519_fe_isnegative
++%define _x25519_fe_mul_ttt _ring_core_0_17_7_x25519_fe_mul_ttt
++%define _x25519_fe_neg _ring_core_0_17_7_x25519_fe_neg
++%define _x25519_fe_tobytes _ring_core_0_17_7_x25519_fe_tobytes
++%define _x25519_ge_double_scalarmult_vartime _ring_core_0_17_7_x25519_ge_double_scalarmult_vartime
++%define _x25519_ge_frombytes_vartime _ring_core_0_17_7_x25519_ge_frombytes_vartime
++%define _x25519_ge_scalarmult_base _ring_core_0_17_7_x25519_ge_scalarmult_base
++%define _x25519_ge_scalarmult_base_adx _ring_core_0_17_7_x25519_ge_scalarmult_base_adx
++%define _x25519_public_from_private_generic_masked _ring_core_0_17_7_x25519_public_from_private_generic_masked
++%define _x25519_sc_mask _ring_core_0_17_7_x25519_sc_mask
++%define _x25519_sc_muladd _ring_core_0_17_7_x25519_sc_muladd
++%define _x25519_sc_reduce _ring_core_0_17_7_x25519_sc_reduce
++%define _x25519_scalar_mult_adx _ring_core_0_17_7_x25519_scalar_mult_adx
++%define _x25519_scalar_mult_generic_masked _ring_core_0_17_7_x25519_scalar_mult_generic_masked
++
++%else
++%define ecp_nistz256_point_double p256_point_double
++%define ecp_nistz256_point_add p256_point_add
++%define ecp_nistz256_point_add_affine p256_point_add_affine
++%define ecp_nistz256_ord_mul_mont p256_scalar_mul_mont
++%define ecp_nistz256_ord_sqr_mont p256_scalar_sqr_rep_mont
++%define ecp_nistz256_mul_mont p256_mul_mont
++%define ecp_nistz256_sqr_mont p256_sqr_mont
++%define CRYPTO_memcmp ring_core_0_17_7_CRYPTO_memcmp
++%define CRYPTO_poly1305_finish ring_core_0_17_7_CRYPTO_poly1305_finish
++%define CRYPTO_poly1305_finish_neon ring_core_0_17_7_CRYPTO_poly1305_finish_neon
++%define CRYPTO_poly1305_init ring_core_0_17_7_CRYPTO_poly1305_init
++%define CRYPTO_poly1305_init_neon ring_core_0_17_7_CRYPTO_poly1305_init_neon
++%define CRYPTO_poly1305_update ring_core_0_17_7_CRYPTO_poly1305_update
++%define CRYPTO_poly1305_update_neon ring_core_0_17_7_CRYPTO_poly1305_update_neon
++%define ChaCha20_ctr32 ring_core_0_17_7_ChaCha20_ctr32
++%define LIMBS_add_mod ring_core_0_17_7_LIMBS_add_mod
++%define LIMBS_are_even ring_core_0_17_7_LIMBS_are_even
++%define LIMBS_are_zero ring_core_0_17_7_LIMBS_are_zero
++%define LIMBS_equal ring_core_0_17_7_LIMBS_equal
++%define LIMBS_equal_limb ring_core_0_17_7_LIMBS_equal_limb
++%define LIMBS_less_than ring_core_0_17_7_LIMBS_less_than
++%define LIMBS_less_than_limb ring_core_0_17_7_LIMBS_less_than_limb
++%define LIMBS_reduce_once ring_core_0_17_7_LIMBS_reduce_once
++%define LIMBS_select_512_32 ring_core_0_17_7_LIMBS_select_512_32
++%define LIMBS_shl_mod ring_core_0_17_7_LIMBS_shl_mod
++%define LIMBS_sub_mod ring_core_0_17_7_LIMBS_sub_mod
++%define LIMBS_window5_split_window ring_core_0_17_7_LIMBS_window5_split_window
++%define LIMBS_window5_unsplit_window ring_core_0_17_7_LIMBS_window5_unsplit_window
++%define LIMB_shr ring_core_0_17_7_LIMB_shr
++%define OPENSSL_armcap_P ring_core_0_17_7_OPENSSL_armcap_P
++%define OPENSSL_cpuid_setup ring_core_0_17_7_OPENSSL_cpuid_setup
++%define OPENSSL_ia32cap_P ring_core_0_17_7_OPENSSL_ia32cap_P
++%define aes_hw_ctr32_encrypt_blocks ring_core_0_17_7_aes_hw_ctr32_encrypt_blocks
++%define aes_hw_encrypt ring_core_0_17_7_aes_hw_encrypt
++%define aes_hw_set_encrypt_key ring_core_0_17_7_aes_hw_set_encrypt_key
++%define aes_nohw_ctr32_encrypt_blocks ring_core_0_17_7_aes_nohw_ctr32_encrypt_blocks
++%define aes_nohw_encrypt ring_core_0_17_7_aes_nohw_encrypt
++%define aes_nohw_set_encrypt_key ring_core_0_17_7_aes_nohw_set_encrypt_key
++%define aesni_gcm_decrypt ring_core_0_17_7_aesni_gcm_decrypt
++%define aesni_gcm_encrypt ring_core_0_17_7_aesni_gcm_encrypt
++%define bn_from_montgomery_in_place ring_core_0_17_7_bn_from_montgomery_in_place
++%define bn_gather5 ring_core_0_17_7_bn_gather5
++%define bn_mul_mont ring_core_0_17_7_bn_mul_mont
++%define bn_mul_mont_gather5 ring_core_0_17_7_bn_mul_mont_gather5
++%define bn_neg_inv_mod_r_u64 ring_core_0_17_7_bn_neg_inv_mod_r_u64
++%define bn_power5 ring_core_0_17_7_bn_power5
++%define bn_scatter5 ring_core_0_17_7_bn_scatter5
++%define bn_sqr8x_internal ring_core_0_17_7_bn_sqr8x_internal
++%define bn_sqrx8x_internal ring_core_0_17_7_bn_sqrx8x_internal
++%define bsaes_ctr32_encrypt_blocks ring_core_0_17_7_bsaes_ctr32_encrypt_blocks
++%define bssl_constant_time_test_conditional_memcpy ring_core_0_17_7_bssl_constant_time_test_conditional_memcpy
++%define bssl_constant_time_test_conditional_memxor ring_core_0_17_7_bssl_constant_time_test_conditional_memxor
++%define bssl_constant_time_test_main ring_core_0_17_7_bssl_constant_time_test_main
++%define chacha20_poly1305_open ring_core_0_17_7_chacha20_poly1305_open
++%define chacha20_poly1305_seal ring_core_0_17_7_chacha20_poly1305_seal
++%define fiat_curve25519_adx_mul ring_core_0_17_7_fiat_curve25519_adx_mul
++%define fiat_curve25519_adx_square ring_core_0_17_7_fiat_curve25519_adx_square
++%define gcm_ghash_avx ring_core_0_17_7_gcm_ghash_avx
++%define gcm_ghash_clmul ring_core_0_17_7_gcm_ghash_clmul
++%define gcm_ghash_neon ring_core_0_17_7_gcm_ghash_neon
++%define gcm_gmult_clmul ring_core_0_17_7_gcm_gmult_clmul
++%define gcm_gmult_neon ring_core_0_17_7_gcm_gmult_neon
++%define gcm_init_avx ring_core_0_17_7_gcm_init_avx
++%define gcm_init_clmul ring_core_0_17_7_gcm_init_clmul
++%define gcm_init_neon ring_core_0_17_7_gcm_init_neon
++%define k25519Precomp ring_core_0_17_7_k25519Precomp
++%define limbs_mul_add_limb ring_core_0_17_7_limbs_mul_add_limb
++%define little_endian_bytes_from_scalar ring_core_0_17_7_little_endian_bytes_from_scalar
++%define ecp_nistz256_neg ring_core_0_17_7_ecp_nistz256_neg
++%define ecp_nistz256_select_w5 ring_core_0_17_7_ecp_nistz256_select_w5
++%define ecp_nistz256_select_w7 ring_core_0_17_7_ecp_nistz256_select_w7
++%define p256_mul_mont ring_core_0_17_7_p256_mul_mont
++%define p256_point_add ring_core_0_17_7_p256_point_add
++%define p256_point_add_affine ring_core_0_17_7_p256_point_add_affine
++%define p256_point_double ring_core_0_17_7_p256_point_double
++%define p256_point_mul ring_core_0_17_7_p256_point_mul
++%define p256_point_mul_base ring_core_0_17_7_p256_point_mul_base
++%define p256_point_mul_base_vartime ring_core_0_17_7_p256_point_mul_base_vartime
++%define p256_scalar_mul_mont ring_core_0_17_7_p256_scalar_mul_mont
++%define p256_scalar_sqr_rep_mont ring_core_0_17_7_p256_scalar_sqr_rep_mont
++%define p256_sqr_mont ring_core_0_17_7_p256_sqr_mont
++%define p384_elem_div_by_2 ring_core_0_17_7_p384_elem_div_by_2
++%define p384_elem_mul_mont ring_core_0_17_7_p384_elem_mul_mont
++%define p384_elem_neg ring_core_0_17_7_p384_elem_neg
++%define p384_elem_sub ring_core_0_17_7_p384_elem_sub
++%define p384_point_add ring_core_0_17_7_p384_point_add
++%define p384_point_double ring_core_0_17_7_p384_point_double
++%define p384_point_mul ring_core_0_17_7_p384_point_mul
++%define p384_scalar_mul_mont ring_core_0_17_7_p384_scalar_mul_mont
++%define openssl_poly1305_neon2_addmulmod ring_core_0_17_7_openssl_poly1305_neon2_addmulmod
++%define openssl_poly1305_neon2_blocks ring_core_0_17_7_openssl_poly1305_neon2_blocks
++%define sha256_block_data_order ring_core_0_17_7_sha256_block_data_order
++%define sha512_block_data_order ring_core_0_17_7_sha512_block_data_order
++%define vpaes_ctr32_encrypt_blocks ring_core_0_17_7_vpaes_ctr32_encrypt_blocks
++%define vpaes_encrypt ring_core_0_17_7_vpaes_encrypt
++%define vpaes_encrypt_key_to_bsaes ring_core_0_17_7_vpaes_encrypt_key_to_bsaes
++%define vpaes_set_encrypt_key ring_core_0_17_7_vpaes_set_encrypt_key
++%define x25519_NEON ring_core_0_17_7_x25519_NEON
++%define x25519_fe_invert ring_core_0_17_7_x25519_fe_invert
++%define x25519_fe_isnegative ring_core_0_17_7_x25519_fe_isnegative
++%define x25519_fe_mul_ttt ring_core_0_17_7_x25519_fe_mul_ttt
++%define x25519_fe_neg ring_core_0_17_7_x25519_fe_neg
++%define x25519_fe_tobytes ring_core_0_17_7_x25519_fe_tobytes
++%define x25519_ge_double_scalarmult_vartime ring_core_0_17_7_x25519_ge_double_scalarmult_vartime
++%define x25519_ge_frombytes_vartime ring_core_0_17_7_x25519_ge_frombytes_vartime
++%define x25519_ge_scalarmult_base ring_core_0_17_7_x25519_ge_scalarmult_base
++%define x25519_ge_scalarmult_base_adx ring_core_0_17_7_x25519_ge_scalarmult_base_adx
++%define x25519_public_from_private_generic_masked ring_core_0_17_7_x25519_public_from_private_generic_masked
++%define x25519_sc_mask ring_core_0_17_7_x25519_sc_mask
++%define x25519_sc_muladd ring_core_0_17_7_x25519_sc_muladd
++%define x25519_sc_reduce ring_core_0_17_7_x25519_sc_reduce
++%define x25519_scalar_mult_adx ring_core_0_17_7_x25519_scalar_mult_adx
++%define x25519_scalar_mult_generic_masked ring_core_0_17_7_x25519_scalar_mult_generic_masked
++
++%endif
++%endif