cjson
.github
workflows CI.yml ci-fuzz.yml
CONTRIBUTING.md
fuzzing
inputs test1 test10 test11 test2 test3 test3.bu test3.uf test3.uu test4 test5 test6 test7 test8 test9
.gitignore CMakeLists.txt afl-prepare-linux.sh afl.c afl.sh cjson_read_fuzzer.c fuzz_main.c json.dict ossfuzz.sh
library_config cJSONConfig.cmake.in cJSONConfigVersion.cmake.in libcjson.pc.in libcjson_utils.pc.in uninstall.cmake
tests
inputs test1 test1.expected test10 test10.expected test11 test11.expected test2 test2.expected test3 test3.expected test4 test4.expected test5 test5.expected test6 test7 test7.expected test8 test8.expected test9 test9.expected
json-patch-tests .editorconfig .gitignore .npmignore README.md cjson-utils-tests.json package.json spec_tests.json tests.json
unity
auto colour_prompt.rb colour_reporter.rb generate_config.yml generate_module.rb generate_test_runner.rb parse_output.rb stylize_as_junit.rb test_file_filter.rb type_sanitizer.rb unity_test_summary.py unity_test_summary.rb unity_to_junit.py
docs ThrowTheSwitchCodingStandard.md UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf UnityAssertionsReference.md UnityConfigurationGuide.md UnityGettingStartedGuide.md UnityHelperScriptsGuide.md license.txt
examples
example_1
src ProductionCode.c ProductionCode.h ProductionCode2.c ProductionCode2.h
makefile readme.txt
example_2
src ProductionCode.c ProductionCode.h ProductionCode2.c ProductionCode2.h
makefile readme.txt
example_3
helper UnityHelper.c UnityHelper.h
src ProductionCode.c ProductionCode.h ProductionCode2.c ProductionCode2.h
rakefile.rb rakefile_helper.rb readme.txt target_gcc_32.yml
unity_config.h
extras
eclipse error_parsers.txt
fixture
src unity_fixture.c unity_fixture.h unity_fixture_internals.h unity_fixture_malloc_overrides.h
rakefile.rb rakefile_helper.rb readme.txt
release build.info version.info
src unity.c unity.h unity_internals.h
.gitattributes .gitignore .travis.yml README.md
CMakeLists.txt cjson_add.c common.h compare_tests.c json_patch_tests.c minify_tests.c misc_tests.c misc_utils_tests.c old_utils_tests.c parse_array.c parse_examples.c parse_hex4.c parse_number.c parse_object.c parse_string.c parse_value.c parse_with_opts.c print_array.c print_number.c print_object.c print_string.c print_value.c readme_examples.c unity_setup.c
.editorconfig .gitattributes .gitignore .travis.yml CHANGELOG.md CMakeLists.txt CONTRIBUTORS.md LICENSE Makefile README.md SECURITY.md appveyor.yml cJSON.c cJSON.h cJSON_Utils.c cJSON_Utils.h test.c valgrind.supp
curl
.circleci config.yml
.github
ISSUE_TEMPLATE bug_report.yml config.yml docs.yml
scripts cleancmd.pl cmp-config.pl cmp-pkg-config.sh codespell-ignore.words codespell.sh distfiles.sh pyspelling.words pyspelling.yaml randcurl.pl requirements-docs.txt requirements-proselint.txt requirements.txt shellcheck-ci.sh shellcheck.sh spellcheck.curl trimmarkdownheader.pl typos.sh typos.toml verify-examples.pl verify-synopsis.pl yamlcheck.sh yamlcheck.yaml
workflows appveyor-status.yml checkdocs.yml checksrc.yml checkurls.yml codeql.yml configure-vs-cmake.yml curl-for-win.yml distcheck.yml fuzz.yml http3-linux.yml label.yml linux-old.yml linux.yml macos.yml non-native.yml windows.yml
CODEOWNERS CONTRIBUTING.md FUNDING.yml dependabot.yml labeler.yml lock.yml stale.yml
CMake CurlSymbolHiding.cmake CurlTests.c FindBrotli.cmake FindCares.cmake FindGSS.cmake FindGnuTLS.cmake FindLDAP.cmake FindLibbacktrace.cmake FindLibgsasl.cmake FindLibidn2.cmake FindLibpsl.cmake FindLibssh.cmake FindLibssh2.cmake FindLibuv.cmake FindMbedTLS.cmake FindNGHTTP2.cmake FindNGHTTP3.cmake FindNGTCP2.cmake FindNettle.cmake FindQuiche.cmake FindRustls.cmake FindWolfSSL.cmake FindZstd.cmake Macros.cmake OtherTests.cmake PickyWarnings.cmake Utilities.cmake cmake_uninstall.in.cmake curl-config.in.cmake unix-cache.cmake win32-cache.cmake
LICENSES BSD-4-Clause-UC.txt ISC.txt curl.txt
docs
cmdline-opts .gitignore CMakeLists.txt MANPAGE.md Makefile.am Makefile.inc _AUTHORS.md _BUGS.md _DESCRIPTION.md _ENVIRONMENT.md _EXITCODES.md _FILES.md _GLOBBING.md _NAME.md _OPTIONS.md _OUTPUT.md _PROGRESS.md _PROTOCOLS.md _PROXYPREFIX.md _SEEALSO.md _SYNOPSIS.md _URL.md _VARIABLES.md _VERSION.md _WWW.md abstract-unix-socket.md alt-svc.md anyauth.md append.md aws-sigv4.md basic.md ca-native.md cacert.md capath.md cert-status.md cert-type.md cert.md ciphers.md compressed-ssh.md compressed.md config.md connect-timeout.md connect-to.md continue-at.md cookie-jar.md cookie.md create-dirs.md create-file-mode.md crlf.md crlfile.md curves.md data-ascii.md data-binary.md data-raw.md data-urlencode.md data.md delegation.md digest.md disable-eprt.md disable-epsv.md disable.md disallow-username-in-url.md dns-interface.md dns-ipv4-addr.md dns-ipv6-addr.md dns-servers.md doh-cert-status.md doh-insecure.md doh-url.md dump-ca-embed.md dump-header.md ech.md egd-file.md engine.md etag-compare.md etag-save.md expect100-timeout.md fail-early.md fail-with-body.md fail.md false-start.md follow.md form-escape.md form-string.md form.md ftp-account.md ftp-alternative-to-user.md ftp-create-dirs.md ftp-method.md ftp-pasv.md ftp-port.md ftp-pret.md ftp-skip-pasv-ip.md ftp-ssl-ccc-mode.md ftp-ssl-ccc.md ftp-ssl-control.md get.md globoff.md happy-eyeballs-timeout-ms.md haproxy-clientip.md haproxy-protocol.md head.md header.md help.md hostpubmd5.md hostpubsha256.md hsts.md http0.9.md http1.0.md http1.1.md http2-prior-knowledge.md http2.md http3-only.md http3.md ignore-content-length.md insecure.md interface.md ip-tos.md ipfs-gateway.md ipv4.md ipv6.md json.md junk-session-cookies.md keepalive-cnt.md keepalive-time.md key-type.md key.md knownhosts.md krb.md libcurl.md limit-rate.md list-only.md local-port.md location-trusted.md location.md login-options.md mail-auth.md mail-from.md mail-rcpt-allowfails.md mail-rcpt.md mainpage.idx manual.md max-filesize.md max-redirs.md max-time.md metalink.md mptcp.md negotiate.md netrc-file.md netrc-optional.md netrc.md next.md no-alpn.md no-buffer.md no-clobber.md no-keepalive.md no-npn.md no-progress-meter.md no-sessionid.md noproxy.md ntlm-wb.md ntlm.md oauth2-bearer.md out-null.md output-dir.md output.md parallel-immediate.md parallel-max-host.md parallel-max.md parallel.md pass.md path-as-is.md pinnedpubkey.md post301.md post302.md post303.md preproxy.md progress-bar.md proto-default.md proto-redir.md proto.md proxy-anyauth.md proxy-basic.md proxy-ca-native.md proxy-cacert.md proxy-capath.md proxy-cert-type.md proxy-cert.md proxy-ciphers.md proxy-crlfile.md proxy-digest.md proxy-header.md proxy-http2.md proxy-insecure.md proxy-key-type.md proxy-key.md proxy-negotiate.md proxy-ntlm.md proxy-pass.md proxy-pinnedpubkey.md proxy-service-name.md proxy-ssl-allow-beast.md proxy-ssl-auto-client-cert.md proxy-tls13-ciphers.md proxy-tlsauthtype.md proxy-tlspassword.md proxy-tlsuser.md proxy-tlsv1.md proxy-user.md proxy.md proxy1.0.md proxytunnel.md pubkey.md quote.md random-file.md range.md rate.md raw.md referer.md remote-header-name.md remote-name-all.md remote-name.md remote-time.md remove-on-error.md request-target.md request.md resolve.md retry-all-errors.md retry-connrefused.md retry-delay.md retry-max-time.md retry.md sasl-authzid.md sasl-ir.md service-name.md show-error.md show-headers.md sigalgs.md silent.md skip-existing.md socks4.md socks4a.md socks5-basic.md socks5-gssapi-nec.md socks5-gssapi-service.md socks5-gssapi.md socks5-hostname.md socks5.md speed-limit.md speed-time.md ssl-allow-beast.md ssl-auto-client-cert.md ssl-no-revoke.md ssl-reqd.md ssl-revoke-best-effort.md ssl-sessions.md ssl.md sslv2.md sslv3.md stderr.md styled-output.md suppress-connect-headers.md tcp-fastopen.md tcp-nodelay.md telnet-option.md tftp-blksize.md tftp-no-options.md time-cond.md tls-earlydata.md tls-max.md tls13-ciphers.md tlsauthtype.md tlspassword.md tlsuser.md tlsv1.0.md tlsv1.1.md tlsv1.2.md tlsv1.3.md tlsv1.md tr-encoding.md trace-ascii.md trace-config.md trace-ids.md trace-time.md trace.md unix-socket.md upload-file.md upload-flags.md url-query.md url.md use-ascii.md user-agent.md user.md variable.md verbose.md version.md vlan-priority.md write-out.md xattr.md
examples .checksrc .gitignore 10-at-a-time.c CMakeLists.txt Makefile.am Makefile.example Makefile.inc README.md adddocsref.pl address-scope.c altsvc.c anyauthput.c block_ip.c cacertinmem.c certinfo.c chkspeed.c connect-to.c cookie_interface.c crawler.c debug.c default-scheme.c ephiperfifo.c evhiperfifo.c externalsocket.c fileupload.c ftp-delete.c ftp-wildcard.c ftpget.c ftpgetinfo.c ftpgetresp.c ftpsget.c ftpupload.c ftpuploadfrommem.c ftpuploadresume.c getinfo.c getinmemory.c getredirect.c getreferrer.c ghiper.c headerapi.c hiperfifo.c hsts-preload.c htmltidy.c htmltitle.cpp http-options.c http-post.c http2-download.c http2-pushinmemory.c http2-serverpush.c http2-upload.c http3-present.c http3.c httpcustomheader.c httpput-postfields.c httpput.c https.c imap-append.c imap-authzid.c imap-copy.c imap-create.c imap-delete.c imap-examine.c imap-fetch.c imap-list.c imap-lsub.c imap-multi.c imap-noop.c imap-search.c imap-ssl.c imap-store.c imap-tls.c interface.c ipv6.c keepalive.c localport.c log_failed_transfers.c maxconnects.c multi-app.c multi-debugcallback.c multi-double.c multi-event.c multi-formadd.c multi-legacy.c multi-post.c multi-single.c multi-uv.c netrc.c parseurl.c persistent.c pop3-authzid.c pop3-dele.c pop3-list.c pop3-multi.c pop3-noop.c pop3-retr.c pop3-ssl.c pop3-stat.c pop3-tls.c pop3-top.c pop3-uidl.c post-callback.c postinmemory.c postit2-formadd.c postit2.c progressfunc.c protofeats.c range.c resolve.c rtsp-options.c sendrecv.c sepheaders.c sessioninfo.c sftpget.c sftpuploadresume.c shared-connection-cache.c simple.c simplepost.c simplessl.c smooth-gtk-thread.c smtp-authzid.c smtp-expn.c smtp-mail.c smtp-mime.c smtp-multi.c smtp-ssl.c smtp-tls.c smtp-vrfy.c sslbackend.c synctime.c threaded.c unixsocket.c url2file.c urlapi.c usercertinmem.c version-check.pl websocket-cb.c websocket-updown.c websocket.c xmlstream.c
internals BUFQ.md BUFREF.md CHECKSRC.md CLIENT-READERS.md CLIENT-WRITERS.md CODE_STYLE.md CONNECTION-FILTERS.md CREDENTIALS.md CURLX.md DYNBUF.md HASH.md LLIST.md MID.md MQTT.md MULTI-EV.md NEW-PROTOCOL.md PEERS.md PORTING.md RATELIMITS.md README.md SCORECARD.md SPLAY.md STRPARSE.md THRDPOOL-AND-QUEUE.md TIME-KEEPING.md TLS-SESSIONS.md UINT_SETS.md WEBSOCKET.md
libcurl
opts CMakeLists.txt CURLINFO_ACTIVESOCKET.md CURLINFO_APPCONNECT_TIME.md CURLINFO_APPCONNECT_TIME_T.md CURLINFO_CAINFO.md CURLINFO_CAPATH.md CURLINFO_CERTINFO.md CURLINFO_CONDITION_UNMET.md CURLINFO_CONNECT_TIME.md CURLINFO_CONNECT_TIME_T.md CURLINFO_CONN_ID.md CURLINFO_CONTENT_LENGTH_DOWNLOAD.md CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.md CURLINFO_CONTENT_LENGTH_UPLOAD.md CURLINFO_CONTENT_LENGTH_UPLOAD_T.md CURLINFO_CONTENT_TYPE.md CURLINFO_COOKIELIST.md CURLINFO_EARLYDATA_SENT_T.md CURLINFO_EFFECTIVE_METHOD.md CURLINFO_EFFECTIVE_URL.md CURLINFO_FILETIME.md CURLINFO_FILETIME_T.md CURLINFO_FTP_ENTRY_PATH.md CURLINFO_HEADER_SIZE.md CURLINFO_HTTPAUTH_AVAIL.md CURLINFO_HTTPAUTH_USED.md CURLINFO_HTTP_CONNECTCODE.md CURLINFO_HTTP_VERSION.md CURLINFO_LASTSOCKET.md CURLINFO_LOCAL_IP.md CURLINFO_LOCAL_PORT.md CURLINFO_NAMELOOKUP_TIME.md CURLINFO_NAMELOOKUP_TIME_T.md CURLINFO_NUM_CONNECTS.md CURLINFO_OS_ERRNO.md CURLINFO_POSTTRANSFER_TIME_T.md CURLINFO_PRETRANSFER_TIME.md CURLINFO_PRETRANSFER_TIME_T.md CURLINFO_PRIMARY_IP.md CURLINFO_PRIMARY_PORT.md CURLINFO_PRIVATE.md CURLINFO_PROTOCOL.md CURLINFO_PROXYAUTH_AVAIL.md CURLINFO_PROXYAUTH_USED.md CURLINFO_PROXY_ERROR.md CURLINFO_PROXY_SSL_VERIFYRESULT.md CURLINFO_QUEUE_TIME_T.md CURLINFO_REDIRECT_COUNT.md CURLINFO_REDIRECT_TIME.md CURLINFO_REDIRECT_TIME_T.md CURLINFO_REDIRECT_URL.md CURLINFO_REFERER.md CURLINFO_REQUEST_SIZE.md CURLINFO_RESPONSE_CODE.md CURLINFO_RETRY_AFTER.md CURLINFO_RTSP_CLIENT_CSEQ.md CURLINFO_RTSP_CSEQ_RECV.md CURLINFO_RTSP_SERVER_CSEQ.md CURLINFO_RTSP_SESSION_ID.md CURLINFO_SCHEME.md CURLINFO_SIZE_DELIVERED.md CURLINFO_SIZE_DOWNLOAD.md CURLINFO_SIZE_DOWNLOAD_T.md CURLINFO_SIZE_UPLOAD.md CURLINFO_SIZE_UPLOAD_T.md CURLINFO_SPEED_DOWNLOAD.md CURLINFO_SPEED_DOWNLOAD_T.md CURLINFO_SPEED_UPLOAD.md CURLINFO_SPEED_UPLOAD_T.md CURLINFO_SSL_ENGINES.md CURLINFO_SSL_VERIFYRESULT.md CURLINFO_STARTTRANSFER_TIME.md CURLINFO_STARTTRANSFER_TIME_T.md CURLINFO_TLS_SESSION.md CURLINFO_TLS_SSL_PTR.md CURLINFO_TOTAL_TIME.md CURLINFO_TOTAL_TIME_T.md CURLINFO_USED_PROXY.md CURLINFO_XFER_ID.md CURLMINFO_XFERS_ADDED.md CURLMINFO_XFERS_CURRENT.md CURLMINFO_XFERS_DONE.md CURLMINFO_XFERS_PENDING.md CURLMINFO_XFERS_RUNNING.md CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.md CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.md CURLMOPT_MAXCONNECTS.md CURLMOPT_MAX_CONCURRENT_STREAMS.md CURLMOPT_MAX_HOST_CONNECTIONS.md CURLMOPT_MAX_PIPELINE_LENGTH.md CURLMOPT_MAX_TOTAL_CONNECTIONS.md CURLMOPT_NETWORK_CHANGED.md CURLMOPT_NOTIFYDATA.md CURLMOPT_NOTIFYFUNCTION.md CURLMOPT_PIPELINING.md CURLMOPT_PIPELINING_SERVER_BL.md CURLMOPT_PIPELINING_SITE_BL.md CURLMOPT_PUSHDATA.md CURLMOPT_PUSHFUNCTION.md CURLMOPT_QUICK_EXIT.md CURLMOPT_RESOLVE_THREADS_MAX.md CURLMOPT_SOCKETDATA.md CURLMOPT_SOCKETFUNCTION.md CURLMOPT_TIMERDATA.md CURLMOPT_TIMERFUNCTION.md CURLOPT_ABSTRACT_UNIX_SOCKET.md CURLOPT_ACCEPTTIMEOUT_MS.md CURLOPT_ACCEPT_ENCODING.md CURLOPT_ADDRESS_SCOPE.md CURLOPT_ALTSVC.md CURLOPT_ALTSVC_CTRL.md CURLOPT_APPEND.md CURLOPT_AUTOREFERER.md CURLOPT_AWS_SIGV4.md CURLOPT_BUFFERSIZE.md CURLOPT_CAINFO.md CURLOPT_CAINFO_BLOB.md CURLOPT_CAPATH.md CURLOPT_CA_CACHE_TIMEOUT.md CURLOPT_CERTINFO.md CURLOPT_CHUNK_BGN_FUNCTION.md CURLOPT_CHUNK_DATA.md CURLOPT_CHUNK_END_FUNCTION.md CURLOPT_CLOSESOCKETDATA.md CURLOPT_CLOSESOCKETFUNCTION.md CURLOPT_CONNECTTIMEOUT.md CURLOPT_CONNECTTIMEOUT_MS.md CURLOPT_CONNECT_ONLY.md CURLOPT_CONNECT_TO.md CURLOPT_CONV_FROM_NETWORK_FUNCTION.md CURLOPT_CONV_FROM_UTF8_FUNCTION.md CURLOPT_CONV_TO_NETWORK_FUNCTION.md CURLOPT_COOKIE.md CURLOPT_COOKIEFILE.md CURLOPT_COOKIEJAR.md CURLOPT_COOKIELIST.md CURLOPT_COOKIESESSION.md CURLOPT_COPYPOSTFIELDS.md CURLOPT_CRLF.md CURLOPT_CRLFILE.md CURLOPT_CURLU.md CURLOPT_CUSTOMREQUEST.md CURLOPT_DEBUGDATA.md CURLOPT_DEBUGFUNCTION.md CURLOPT_DEFAULT_PROTOCOL.md CURLOPT_DIRLISTONLY.md CURLOPT_DISALLOW_USERNAME_IN_URL.md CURLOPT_DNS_CACHE_TIMEOUT.md CURLOPT_DNS_INTERFACE.md CURLOPT_DNS_LOCAL_IP4.md CURLOPT_DNS_LOCAL_IP6.md CURLOPT_DNS_SERVERS.md CURLOPT_DNS_SHUFFLE_ADDRESSES.md CURLOPT_DNS_USE_GLOBAL_CACHE.md CURLOPT_DOH_SSL_VERIFYHOST.md CURLOPT_DOH_SSL_VERIFYPEER.md CURLOPT_DOH_SSL_VERIFYSTATUS.md CURLOPT_DOH_URL.md CURLOPT_ECH.md CURLOPT_EGDSOCKET.md CURLOPT_ERRORBUFFER.md CURLOPT_EXPECT_100_TIMEOUT_MS.md CURLOPT_FAILONERROR.md CURLOPT_FILETIME.md CURLOPT_FNMATCH_DATA.md CURLOPT_FNMATCH_FUNCTION.md CURLOPT_FOLLOWLOCATION.md CURLOPT_FORBID_REUSE.md CURLOPT_FRESH_CONNECT.md CURLOPT_FTPPORT.md CURLOPT_FTPSSLAUTH.md CURLOPT_FTP_ACCOUNT.md CURLOPT_FTP_ALTERNATIVE_TO_USER.md CURLOPT_FTP_CREATE_MISSING_DIRS.md CURLOPT_FTP_FILEMETHOD.md CURLOPT_FTP_SKIP_PASV_IP.md CURLOPT_FTP_SSL_CCC.md CURLOPT_FTP_USE_EPRT.md CURLOPT_FTP_USE_EPSV.md CURLOPT_FTP_USE_PRET.md CURLOPT_GSSAPI_DELEGATION.md CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.md CURLOPT_HAPROXYPROTOCOL.md CURLOPT_HAPROXY_CLIENT_IP.md CURLOPT_HEADER.md CURLOPT_HEADERDATA.md CURLOPT_HEADERFUNCTION.md CURLOPT_HEADEROPT.md CURLOPT_HSTS.md CURLOPT_HSTSREADDATA.md CURLOPT_HSTSREADFUNCTION.md CURLOPT_HSTSWRITEDATA.md CURLOPT_HSTSWRITEFUNCTION.md CURLOPT_HSTS_CTRL.md CURLOPT_HTTP09_ALLOWED.md CURLOPT_HTTP200ALIASES.md CURLOPT_HTTPAUTH.md CURLOPT_HTTPGET.md CURLOPT_HTTPHEADER.md CURLOPT_HTTPPOST.md CURLOPT_HTTPPROXYTUNNEL.md CURLOPT_HTTP_CONTENT_DECODING.md CURLOPT_HTTP_TRANSFER_DECODING.md CURLOPT_HTTP_VERSION.md CURLOPT_IGNORE_CONTENT_LENGTH.md CURLOPT_INFILESIZE.md CURLOPT_INFILESIZE_LARGE.md CURLOPT_INTERFACE.md CURLOPT_INTERLEAVEDATA.md CURLOPT_INTERLEAVEFUNCTION.md CURLOPT_IOCTLDATA.md CURLOPT_IOCTLFUNCTION.md CURLOPT_IPRESOLVE.md CURLOPT_ISSUERCERT.md CURLOPT_ISSUERCERT_BLOB.md CURLOPT_KEEP_SENDING_ON_ERROR.md CURLOPT_KEYPASSWD.md CURLOPT_KRBLEVEL.md CURLOPT_LOCALPORT.md CURLOPT_LOCALPORTRANGE.md CURLOPT_LOGIN_OPTIONS.md CURLOPT_LOW_SPEED_LIMIT.md CURLOPT_LOW_SPEED_TIME.md CURLOPT_MAIL_AUTH.md CURLOPT_MAIL_FROM.md CURLOPT_MAIL_RCPT.md CURLOPT_MAIL_RCPT_ALLOWFAILS.md CURLOPT_MAXAGE_CONN.md CURLOPT_MAXCONNECTS.md CURLOPT_MAXFILESIZE.md CURLOPT_MAXFILESIZE_LARGE.md CURLOPT_MAXLIFETIME_CONN.md CURLOPT_MAXREDIRS.md CURLOPT_MAX_RECV_SPEED_LARGE.md CURLOPT_MAX_SEND_SPEED_LARGE.md CURLOPT_MIMEPOST.md CURLOPT_MIME_OPTIONS.md CURLOPT_NETRC.md CURLOPT_NETRC_FILE.md CURLOPT_NEW_DIRECTORY_PERMS.md CURLOPT_NEW_FILE_PERMS.md CURLOPT_NOBODY.md CURLOPT_NOPROGRESS.md CURLOPT_NOPROXY.md CURLOPT_NOSIGNAL.md CURLOPT_OPENSOCKETDATA.md CURLOPT_OPENSOCKETFUNCTION.md CURLOPT_PASSWORD.md CURLOPT_PATH_AS_IS.md CURLOPT_PINNEDPUBLICKEY.md CURLOPT_PIPEWAIT.md CURLOPT_PORT.md CURLOPT_POST.md CURLOPT_POSTFIELDS.md CURLOPT_POSTFIELDSIZE.md CURLOPT_POSTFIELDSIZE_LARGE.md CURLOPT_POSTQUOTE.md CURLOPT_POSTREDIR.md CURLOPT_PREQUOTE.md CURLOPT_PREREQDATA.md CURLOPT_PREREQFUNCTION.md CURLOPT_PRE_PROXY.md CURLOPT_PRIVATE.md CURLOPT_PROGRESSDATA.md CURLOPT_PROGRESSFUNCTION.md CURLOPT_PROTOCOLS.md CURLOPT_PROTOCOLS_STR.md CURLOPT_PROXY.md CURLOPT_PROXYAUTH.md CURLOPT_PROXYHEADER.md CURLOPT_PROXYPASSWORD.md CURLOPT_PROXYPORT.md CURLOPT_PROXYTYPE.md CURLOPT_PROXYUSERNAME.md CURLOPT_PROXYUSERPWD.md CURLOPT_PROXY_CAINFO.md CURLOPT_PROXY_CAINFO_BLOB.md CURLOPT_PROXY_CAPATH.md CURLOPT_PROXY_CRLFILE.md CURLOPT_PROXY_ISSUERCERT.md CURLOPT_PROXY_ISSUERCERT_BLOB.md CURLOPT_PROXY_KEYPASSWD.md CURLOPT_PROXY_PINNEDPUBLICKEY.md CURLOPT_PROXY_SERVICE_NAME.md CURLOPT_PROXY_SSLCERT.md CURLOPT_PROXY_SSLCERTTYPE.md CURLOPT_PROXY_SSLCERT_BLOB.md CURLOPT_PROXY_SSLKEY.md CURLOPT_PROXY_SSLKEYTYPE.md CURLOPT_PROXY_SSLKEY_BLOB.md CURLOPT_PROXY_SSLVERSION.md CURLOPT_PROXY_SSL_CIPHER_LIST.md CURLOPT_PROXY_SSL_OPTIONS.md CURLOPT_PROXY_SSL_VERIFYHOST.md CURLOPT_PROXY_SSL_VERIFYPEER.md CURLOPT_PROXY_TLS13_CIPHERS.md CURLOPT_PROXY_TLSAUTH_PASSWORD.md CURLOPT_PROXY_TLSAUTH_TYPE.md CURLOPT_PROXY_TLSAUTH_USERNAME.md CURLOPT_PROXY_TRANSFER_MODE.md CURLOPT_PUT.md CURLOPT_QUICK_EXIT.md CURLOPT_QUOTE.md CURLOPT_RANDOM_FILE.md CURLOPT_RANGE.md CURLOPT_READDATA.md CURLOPT_READFUNCTION.md CURLOPT_REDIR_PROTOCOLS.md CURLOPT_REDIR_PROTOCOLS_STR.md CURLOPT_REFERER.md CURLOPT_REQUEST_TARGET.md CURLOPT_RESOLVE.md CURLOPT_RESOLVER_START_DATA.md CURLOPT_RESOLVER_START_FUNCTION.md CURLOPT_RESUME_FROM.md CURLOPT_RESUME_FROM_LARGE.md CURLOPT_RTSP_CLIENT_CSEQ.md CURLOPT_RTSP_REQUEST.md CURLOPT_RTSP_SERVER_CSEQ.md CURLOPT_RTSP_SESSION_ID.md CURLOPT_RTSP_STREAM_URI.md CURLOPT_RTSP_TRANSPORT.md CURLOPT_SASL_AUTHZID.md CURLOPT_SASL_IR.md CURLOPT_SEEKDATA.md CURLOPT_SEEKFUNCTION.md CURLOPT_SERVER_RESPONSE_TIMEOUT.md CURLOPT_SERVER_RESPONSE_TIMEOUT_MS.md CURLOPT_SERVICE_NAME.md CURLOPT_SHARE.md CURLOPT_SOCKOPTDATA.md CURLOPT_SOCKOPTFUNCTION.md CURLOPT_SOCKS5_AUTH.md CURLOPT_SOCKS5_GSSAPI_NEC.md CURLOPT_SOCKS5_GSSAPI_SERVICE.md CURLOPT_SSH_AUTH_TYPES.md CURLOPT_SSH_COMPRESSION.md CURLOPT_SSH_HOSTKEYDATA.md CURLOPT_SSH_HOSTKEYFUNCTION.md CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.md CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256.md CURLOPT_SSH_KEYDATA.md CURLOPT_SSH_KEYFUNCTION.md CURLOPT_SSH_KNOWNHOSTS.md CURLOPT_SSH_PRIVATE_KEYFILE.md CURLOPT_SSH_PUBLIC_KEYFILE.md CURLOPT_SSLCERT.md CURLOPT_SSLCERTTYPE.md CURLOPT_SSLCERT_BLOB.md CURLOPT_SSLENGINE.md CURLOPT_SSLENGINE_DEFAULT.md CURLOPT_SSLKEY.md CURLOPT_SSLKEYTYPE.md CURLOPT_SSLKEY_BLOB.md CURLOPT_SSLVERSION.md CURLOPT_SSL_CIPHER_LIST.md CURLOPT_SSL_CTX_DATA.md CURLOPT_SSL_CTX_FUNCTION.md CURLOPT_SSL_EC_CURVES.md CURLOPT_SSL_ENABLE_ALPN.md CURLOPT_SSL_ENABLE_NPN.md CURLOPT_SSL_FALSESTART.md CURLOPT_SSL_OPTIONS.md CURLOPT_SSL_SESSIONID_CACHE.md CURLOPT_SSL_SIGNATURE_ALGORITHMS.md CURLOPT_SSL_VERIFYHOST.md CURLOPT_SSL_VERIFYPEER.md CURLOPT_SSL_VERIFYSTATUS.md CURLOPT_STDERR.md CURLOPT_STREAM_DEPENDS.md CURLOPT_STREAM_DEPENDS_E.md CURLOPT_STREAM_WEIGHT.md CURLOPT_SUPPRESS_CONNECT_HEADERS.md CURLOPT_TCP_FASTOPEN.md CURLOPT_TCP_KEEPALIVE.md CURLOPT_TCP_KEEPCNT.md CURLOPT_TCP_KEEPIDLE.md CURLOPT_TCP_KEEPINTVL.md CURLOPT_TCP_NODELAY.md CURLOPT_TELNETOPTIONS.md CURLOPT_TFTP_BLKSIZE.md CURLOPT_TFTP_NO_OPTIONS.md CURLOPT_TIMECONDITION.md CURLOPT_TIMEOUT.md CURLOPT_TIMEOUT_MS.md CURLOPT_TIMEVALUE.md CURLOPT_TIMEVALUE_LARGE.md CURLOPT_TLS13_CIPHERS.md CURLOPT_TLSAUTH_PASSWORD.md CURLOPT_TLSAUTH_TYPE.md CURLOPT_TLSAUTH_USERNAME.md CURLOPT_TRAILERDATA.md CURLOPT_TRAILERFUNCTION.md CURLOPT_TRANSFERTEXT.md CURLOPT_TRANSFER_ENCODING.md CURLOPT_UNIX_SOCKET_PATH.md CURLOPT_UNRESTRICTED_AUTH.md CURLOPT_UPKEEP_INTERVAL_MS.md CURLOPT_UPLOAD.md CURLOPT_UPLOAD_BUFFERSIZE.md CURLOPT_UPLOAD_FLAGS.md CURLOPT_URL.md CURLOPT_USERAGENT.md CURLOPT_USERNAME.md CURLOPT_USERPWD.md CURLOPT_USE_SSL.md CURLOPT_VERBOSE.md CURLOPT_WILDCARDMATCH.md CURLOPT_WRITEDATA.md CURLOPT_WRITEFUNCTION.md CURLOPT_WS_OPTIONS.md CURLOPT_XFERINFODATA.md CURLOPT_XFERINFOFUNCTION.md CURLOPT_XOAUTH2_BEARER.md CURLSHOPT_LOCKFUNC.md CURLSHOPT_SHARE.md CURLSHOPT_UNLOCKFUNC.md CURLSHOPT_UNSHARE.md CURLSHOPT_USERDATA.md Makefile.am Makefile.inc
.gitignore ABI.md CMakeLists.txt Makefile.am Makefile.inc curl_easy_cleanup.md curl_easy_duphandle.md curl_easy_escape.md curl_easy_getinfo.md curl_easy_header.md curl_easy_init.md curl_easy_nextheader.md curl_easy_option_by_id.md curl_easy_option_by_name.md curl_easy_option_next.md curl_easy_pause.md curl_easy_perform.md curl_easy_recv.md curl_easy_reset.md curl_easy_send.md curl_easy_setopt.md curl_easy_ssls_export.md curl_easy_ssls_import.md curl_easy_strerror.md curl_easy_unescape.md curl_easy_upkeep.md curl_escape.md curl_formadd.md curl_formfree.md curl_formget.md curl_free.md curl_getdate.md curl_getenv.md curl_global_cleanup.md curl_global_init.md curl_global_init_mem.md curl_global_sslset.md curl_global_trace.md curl_mime_addpart.md curl_mime_data.md curl_mime_data_cb.md curl_mime_encoder.md curl_mime_filedata.md curl_mime_filename.md curl_mime_free.md curl_mime_headers.md curl_mime_init.md curl_mime_name.md curl_mime_subparts.md curl_mime_type.md curl_mprintf.md curl_multi_add_handle.md curl_multi_assign.md curl_multi_cleanup.md curl_multi_fdset.md curl_multi_get_handles.md curl_multi_get_offt.md curl_multi_info_read.md curl_multi_init.md curl_multi_notify_disable.md curl_multi_notify_enable.md curl_multi_perform.md curl_multi_poll.md curl_multi_remove_handle.md curl_multi_setopt.md curl_multi_socket.md curl_multi_socket_action.md curl_multi_socket_all.md curl_multi_strerror.md curl_multi_timeout.md curl_multi_wait.md curl_multi_waitfds.md curl_multi_wakeup.md curl_pushheader_byname.md curl_pushheader_bynum.md curl_share_cleanup.md curl_share_init.md curl_share_setopt.md curl_share_strerror.md curl_slist_append.md curl_slist_free_all.md curl_strequal.md curl_strnequal.md curl_unescape.md curl_url.md curl_url_cleanup.md curl_url_dup.md curl_url_get.md curl_url_set.md curl_url_strerror.md curl_version.md curl_version_info.md curl_ws_meta.md curl_ws_recv.md curl_ws_send.md curl_ws_start_frame.md libcurl-easy.md libcurl-env-dbg.md libcurl-env.md libcurl-errors.md libcurl-multi.md libcurl-security.md libcurl-share.md libcurl-thread.md libcurl-tutorial.md libcurl-url.md libcurl-ws.md libcurl.m4 libcurl.md mksymbolsmanpage.pl symbols-in-versions symbols.pl
tests CI.md FILEFORMAT.md HTTP.md TEST-SUITE.md
.gitignore ALTSVC.md BINDINGS.md BUG-BOUNTY.md BUGS.md CIPHERS-TLS12.md CIPHERS.md CMakeLists.txt CODE_OF_CONDUCT.md CODE_REVIEW.md CONTRIBUTE.md CURL-DISABLE.md CURLDOWN.md DEPRECATE.md DISTROS.md EARLY-RELEASE.md ECH.md EXPERIMENTAL.md FAQ.md FEATURES.md GOVERNANCE.md HELP-US.md HISTORY.md HSTS.md HTTP-COOKIES.md HTTP3.md HTTPSRR.md INFRASTRUCTURE.md INSTALL-CMAKE.md INSTALL.md INTERNALS.md IPFS.md KNOWN_BUGS.md KNOWN_RISKS.md MAIL-ETIQUETTE.md MANUAL.md Makefile.am README.md RELEASE-PROCEDURE.md ROADMAP.md RUSTLS.md SECURITY-ADVISORY.md SPONSORS.md SSL-PROBLEMS.md SSLCERTS.md THANKS THANKS-filter TODO.md TheArtOfHttpScripting.md URL-SYNTAX.md VERIFY.md VERSIONS.md VULN-DISCLOSURE-POLICY.md curl-config.md mk-ca-bundle.md options-in-versions runtests.md testcurl.md wcurl.md
include
curl Makefile.am curl.h curlver.h easy.h header.h mprintf.h multi.h options.h stdcheaders.h system.h typecheck-gcc.h urlapi.h websockets.h
Makefile.am README.md
lib
curlx base64.c base64.h basename.c basename.h dynbuf.c dynbuf.h fopen.c fopen.h inet_ntop.c inet_ntop.h inet_pton.c inet_pton.h multibyte.c multibyte.h nonblock.c nonblock.h snprintf.c snprintf.h strcopy.c strcopy.h strdup.c strdup.h strerr.c strerr.h strparse.c strparse.h timediff.c timediff.h timeval.c timeval.h version_win32.c version_win32.h wait.c wait.h warnless.c warnless.h winapi.c winapi.h
vauth cleartext.c cram.c digest.c digest.h digest_sspi.c gsasl.c krb5_gssapi.c krb5_sspi.c ntlm.c ntlm_sspi.c oauth2.c spnego_gssapi.c spnego_sspi.c vauth.c vauth.h
vquic curl_ngtcp2.c curl_ngtcp2.h curl_quiche.c curl_quiche.h vquic-tls.c vquic-tls.h vquic.c vquic.h vquic_int.h
vssh libssh.c libssh2.c ssh.h vssh.c vssh.h
vtls apple.c apple.h cipher_suite.c cipher_suite.h gtls.c gtls.h hostcheck.c hostcheck.h keylog.c keylog.h mbedtls.c mbedtls.h openssl.c openssl.h rustls.c rustls.h schannel.c schannel.h schannel_int.h schannel_verify.c vtls.c vtls.h vtls_int.h vtls_scache.c vtls_scache.h vtls_spack.c vtls_spack.h wolfssl.c wolfssl.h x509asn1.c x509asn1.h
.gitignore CMakeLists.txt Makefile.am Makefile.inc Makefile.soname altsvc.c altsvc.h amigaos.c amigaos.h arpa_telnet.h asyn-ares.c asyn-base.c asyn-thrdd.c asyn.h bufq.c bufq.h bufref.c bufref.h cf-dns.c cf-dns.h cf-h1-proxy.c cf-h1-proxy.h cf-h2-proxy.c cf-h2-proxy.h cf-haproxy.c cf-haproxy.h cf-https-connect.c cf-https-connect.h cf-ip-happy.c cf-ip-happy.h cf-socket.c cf-socket.h cfilters.c cfilters.h config-mac.h config-os400.h config-riscos.h config-win32.h conncache.c conncache.h connect.c connect.h content_encoding.c content_encoding.h cookie.c cookie.h creds.c creds.h cshutdn.c cshutdn.h curl_addrinfo.c curl_addrinfo.h curl_config-cmake.h.in curl_ctype.h curl_endian.c curl_endian.h curl_fnmatch.c curl_fnmatch.h curl_fopen.c curl_fopen.h curl_get_line.c curl_get_line.h curl_gethostname.c curl_gethostname.h curl_gssapi.c curl_gssapi.h curl_hmac.h curl_ldap.h curl_md4.h curl_md5.h curl_memrchr.c curl_memrchr.h curl_ntlm_core.c curl_ntlm_core.h curl_printf.h curl_range.c curl_range.h curl_sasl.c curl_sasl.h curl_setup.h curl_sha256.h curl_sha512_256.c curl_sha512_256.h curl_share.c curl_share.h curl_sspi.c curl_sspi.h curl_threads.c curl_threads.h curl_trc.c curl_trc.h cw-out.c cw-out.h cw-pause.c cw-pause.h dict.c dict.h dllmain.c dnscache.c dnscache.h doh.c doh.h dynhds.c dynhds.h easy.c easy_lock.h easygetopt.c easyif.h easyoptions.c easyoptions.h escape.c escape.h fake_addrinfo.c fake_addrinfo.h file.c file.h fileinfo.c fileinfo.h formdata.c formdata.h ftp-int.h ftp.c ftp.h ftplistparser.c ftplistparser.h functypes.h getenv.c getinfo.c getinfo.h gopher.c gopher.h hash.c hash.h headers.c headers.h hmac.c hostip.c hostip.h hostip4.c hostip6.c hsts.c hsts.h http.c http.h http1.c http1.h http2.c http2.h http_aws_sigv4.c http_aws_sigv4.h http_chunks.c http_chunks.h http_digest.c http_digest.h http_negotiate.c http_negotiate.h http_ntlm.c http_ntlm.h http_proxy.c http_proxy.h httpsrr.c httpsrr.h idn.c idn.h if2ip.c if2ip.h imap.c imap.h ldap.c libcurl.def libcurl.rc libcurl.vers.in llist.c llist.h macos.c macos.h md4.c md5.c memdebug.c mime.c mime.h mprintf.c mqtt.c mqtt.h multi.c multi_ev.c multi_ev.h multi_ntfy.c multi_ntfy.h multihandle.h multiif.h netrc.c netrc.h noproxy.c noproxy.h openldap.c optiontable.pl parsedate.c parsedate.h peer.c peer.h pingpong.c pingpong.h pop3.c pop3.h progress.c progress.h protocol.c protocol.h psl.c psl.h rand.c rand.h ratelimit.c ratelimit.h request.c request.h rtsp.c rtsp.h select.c select.h sendf.c sendf.h setopt.c setopt.h setup-os400.h setup-vms.h setup-win32.h sha256.c sigpipe.h slist.c slist.h smb.c smb.h smtp.c smtp.h sockaddr.h socketpair.c socketpair.h socks.c socks.h socks_gssapi.c socks_sspi.c splay.c splay.h strcase.c strcase.h strequal.c strerror.c strerror.h system_win32.c system_win32.h telnet.c telnet.h tftp.c tftp.h thrdpool.c thrdpool.h thrdqueue.c thrdqueue.h transfer.c transfer.h uint-bset.c uint-bset.h uint-hash.c uint-hash.h uint-spbset.c uint-spbset.h uint-table.c uint-table.h url.c url.h urlapi-int.h urlapi.c urldata.h version.c ws.c ws.h
m4 .gitignore curl-amissl.m4 curl-apple-sectrust.m4 curl-compilers.m4 curl-confopts.m4 curl-functions.m4 curl-gnutls.m4 curl-mbedtls.m4 curl-openssl.m4 curl-override.m4 curl-reentrant.m4 curl-rustls.m4 curl-schannel.m4 curl-sysconfig.m4 curl-wolfssl.m4 xc-am-iface.m4 xc-cc-check.m4 xc-lt-iface.m4 xc-val-flgs.m4 zz40-xc-ovr.m4 zz50-xc-ovr.m4
projects
OS400
rpg-examples HEADERAPI HTTPPOST INMEMORY SIMPLE1 SIMPLE2 SMTPSRCMBR
.checksrc README.OS400 ccsidcurl.c ccsidcurl.h config400.default curl.cmd curl.inc.in curlcl.c curlmain.c initscript.sh make-docs.sh make-include.sh make-lib.sh make-src.sh make-tests.sh makefile.sh os400sys.c os400sys.h
Windows
tmpl .gitattributes README.txt curl-all.sln curl.sln curl.vcxproj curl.vcxproj.filters libcurl.sln libcurl.vcxproj libcurl.vcxproj.filters
.gitignore README.md generate.bat
vms Makefile.am backup_gnv_curl_src.com build_curl-config_script.com build_gnv_curl.com build_gnv_curl_pcsi_desc.com build_gnv_curl_pcsi_text.com build_gnv_curl_release_notes.com build_libcurl_pc.com build_vms.com clean_gnv_curl.com compare_curl_source.com config_h.com curl_crtl_init.c curl_gnv_build_steps.txt curl_release_note_start.txt curl_startup.com curlmsg.h curlmsg.msg curlmsg.sdl curlmsg_vms.h generate_config_vms_h_curl.com generate_vax_transfer.com gnv_conftest.c_first gnv_curl_configure.sh gnv_libcurl_symbols.opt gnv_link_curl.com macro32_exactcase.patch make_gnv_curl_install.sh make_pcsi_curl_kit_name.com pcsi_gnv_curl_file_list.txt pcsi_product_gnv_curl.com readme report_openssl_version.c setup_gnv_curl_build.com stage_curl_install.com vms_eco_level.h
Makefile.am README.md
scripts .checksrc CMakeLists.txt Makefile.am badwords badwords-all badwords.txt cd2cd cd2nroff cdall checksrc-all.pl checksrc.pl cmakelint.sh completion.pl contributors.sh contrithanks.sh coverage.sh delta dmaketgz extract-unit-protos firefox-db2pem.sh installcheck.sh maketgz managen mdlinkcheck mk-ca-bundle.pl mk-unity.pl nroff2cd perlcheck.sh pythonlint.sh randdisable release-notes.pl release-tools.sh schemetable.c singleuse.pl spacecheck.pl top-complexity top-length verify-release wcurl
src
toolx tool_time.c tool_time.h
.checksrc .gitignore CMakeLists.txt Makefile.am Makefile.inc config2setopts.c config2setopts.h curl.rc curlinfo.c mk-file-embed.pl mkhelp.pl slist_wc.c slist_wc.h terminal.c terminal.h tool_cb_dbg.c tool_cb_dbg.h tool_cb_hdr.c tool_cb_hdr.h tool_cb_prg.c tool_cb_prg.h tool_cb_rea.c tool_cb_rea.h tool_cb_see.c tool_cb_see.h tool_cb_soc.c tool_cb_soc.h tool_cb_wrt.c tool_cb_wrt.h tool_cfgable.c tool_cfgable.h tool_dirhie.c tool_dirhie.h tool_doswin.c tool_doswin.h tool_easysrc.c tool_easysrc.h tool_filetime.c tool_filetime.h tool_findfile.c tool_findfile.h tool_formparse.c tool_formparse.h tool_getparam.c tool_getparam.h tool_getpass.c tool_getpass.h tool_help.c tool_help.h tool_helpers.c tool_helpers.h tool_hugehelp.h tool_ipfs.c tool_ipfs.h tool_libinfo.c tool_libinfo.h tool_listhelp.c tool_main.c tool_main.h tool_msgs.c tool_msgs.h tool_operate.c tool_operate.h tool_operhlp.c tool_operhlp.h tool_paramhlp.c tool_paramhlp.h tool_parsecfg.c tool_parsecfg.h tool_progress.c tool_progress.h tool_sdecls.h tool_setopt.c tool_setopt.h tool_setup.h tool_ssls.c tool_ssls.h tool_stderr.c tool_stderr.h tool_urlglob.c tool_urlglob.h tool_util.c tool_util.h tool_version.h tool_vms.c tool_vms.h tool_writeout.c tool_writeout.h tool_writeout_json.c tool_writeout_json.h tool_xattr.c tool_xattr.h var.c var.h
tests
certs .gitignore CMakeLists.txt Makefile.am Makefile.inc genserv.pl srp-verifier-conf srp-verifier-db test-ca.cnf test-ca.prm test-client-cert.prm test-client-eku-only.prm test-localhost-san-first.prm test-localhost-san-last.prm test-localhost.nn.prm test-localhost.prm test-localhost0h.prm
cmake CMakeLists.txt test.c test.cpp test.sh
data .gitignore DISABLED Makefile.am data-xml1 data1400.c data1401.c data1402.c data1403.c data1404.c data1405.c data1406.c data1407.c data1420.c data1461.txt data1463.txt data1465.c data1481.c data1705-1.md data1705-2.md data1705-3.md data1705-4.md data1705-stdout.1 data1706-1.md data1706-2.md data1706-3.md data1706-4.md data1706-stdout.txt data320.html test1 test10 test100 test1000 test1001 test1002 test1003 test1004 test1005 test1006 test1007 test1008 test1009 test101 test1010 test1011 test1012 test1013 test1014 test1015 test1016 test1017 test1018 test1019 test102 test1020 test1021 test1022 test1023 test1024 test1025 test1026 test1027 test1028 test1029 test103 test1030 test1031 test1032 test1033 test1034 test1035 test1036 test1037 test1038 test1039 test104 test1040 test1041 test1042 test1043 test1044 test1045 test1046 test1047 test1048 test1049 test105 test1050 test1051 test1052 test1053 test1054 test1055 test1056 test1057 test1058 test1059 test106 test1060 test1061 test1062 test1063 test1064 test1065 test1066 test1067 test1068 test1069 test107 test1070 test1071 test1072 test1073 test1074 test1075 test1076 test1077 test1078 test1079 test108 test1080 test1081 test1082 test1083 test1084 test1085 test1086 test1087 test1088 test1089 test109 test1090 test1091 test1092 test1093 test1094 test1095 test1096 test1097 test1098 test1099 test11 test110 test1100 test1101 test1102 test1103 test1104 test1105 test1106 test1107 test1108 test1109 test111 test1110 test1111 test1112 test1113 test1114 test1115 test1116 test1117 test1118 test1119 test112 test1120 test1121 test1122 test1123 test1124 test1125 test1126 test1127 test1128 test1129 test113 test1130 test1131 test1132 test1133 test1134 test1135 test1136 test1137 test1138 test1139 test114 test1140 test1141 test1142 test1143 test1144 test1145 test1146 test1147 test1148 test1149 test115 test1150 test1151 test1152 test1153 test1154 test1155 test1156 test1157 test1158 test1159 test116 test1160 test1161 test1162 test1163 test1164 test1165 test1166 test1167 test1168 test1169 test117 test1170 test1171 test1172 test1173 test1174 test1175 test1176 test1177 test1178 test1179 test118 test1180 test1181 test1182 test1183 test1184 test1185 test1186 test1187 test1188 test1189 test119 test1190 test1191 test1192 test1193 test1194 test1195 test1196 test1197 test1198 test1199 test12 test120 test1200 test1201 test1202 test1203 test1204 test1205 test1206 test1207 test1208 test1209 test121 test1210 test1211 test1212 test1213 test1214 test1215 test1216 test1217 test1218 test1219 test122 test1220 test1221 test1222 test1223 test1224 test1225 test1226 test1227 test1228 test1229 test123 test1230 test1231 test1232 test1233 test1234 test1235 test1236 test1237 test1238 test1239 test124 test1240 test1241 test1242 test1243 test1244 test1245 test1246 test1247 test1248 test1249 test125 test1250 test1251 test1252 test1253 test1254 test1255 test1256 test1257 test1258 test1259 test126 test1260 test1261 test1262 test1263 test1264 test1265 test1266 test1267 test1268 test1269 test127 test1270 test1271 test1272 test1273 test1274 test1275 test1276 test1277 test1278 test1279 test128 test1280 test1281 test1282 test1283 test1284 test1285 test1286 test1287 test1288 test1289 test129 test1290 test1291 test1292 test1293 test1294 test1295 test1296 test1297 test1298 test1299 test13 test130 test1300 test1301 test1302 test1303 test1304 test1305 test1306 test1307 test1308 test1309 test131 test1310 test1311 test1312 test1313 test1314 test1315 test1316 test1317 test1318 test1319 test132 test1320 test1321 test1322 test1323 test1324 test1325 test1326 test1327 test1328 test1329 test133 test1330 test1331 test1332 test1333 test1334 test1335 test1336 test1337 test1338 test1339 test134 test1340 test1341 test1342 test1343 test1344 test1345 test1346 test1347 test1348 test1349 test135 test1350 test1351 test1352 test1353 test1354 test1355 test1356 test1357 test1358 test1359 test136 test1360 test1361 test1362 test1363 test1364 test1365 test1366 test1367 test1368 test1369 test137 test1370 test1371 test1372 test1373 test1374 test1375 test1376 test1377 test1378 test1379 test138 test1380 test1381 test1382 test1383 test1384 test1385 test1386 test1387 test1388 test1389 test139 test1390 test1391 test1392 test1393 test1394 test1395 test1396 test1397 test1398 test1399 test14 test140 test1400 test1401 test1402 test1403 test1404 test1405 test1406 test1407 test1408 test1409 test141 test1410 test1411 test1412 test1413 test1414 test1415 test1416 test1417 test1418 test1419 test142 test1420 test1421 test1422 test1423 test1424 test1425 test1426 test1427 test1428 test1429 test143 test1430 test1431 test1432 test1433 test1434 test1435 test1436 test1437 test1438 test1439 test144 test1440 test1441 test1442 test1443 test1444 test1445 test1446 test1447 test1448 test1449 test145 test1450 test1451 test1452 test1453 test1454 test1455 test1456 test1457 test1458 test1459 test146 test1460 test1461 test1462 test1463 test1464 test1465 test1466 test1467 test1468 test1469 test147 test1470 test1471 test1472 test1473 test1474 test1475 test1476 test1477 test1478 test1479 test148 test1480 test1481 test1482 test1483 test1484 test1485 test1486 test1487 test1488 test1489 test149 test1490 test1491 test1492 test1493 test1494 test1495 test1496 test1497 test1498 test1499 test15 test150 test1500 test1501 test1502 test1503 test1504 test1505 test1506 test1507 test1508 test1509 test151 test1510 test1511 test1512 test1513 test1514 test1515 test1516 test1517 test1518 test1519 test152 test1520 test1521 test1522 test1523 test1524 test1525 test1526 test1527 test1528 test1529 test153 test1530 test1531 test1532 test1533 test1534 test1535 test1536 test1537 test1538 test1539 test154 test1540 test1541 test1542 test1543 test1544 test1545 test1546 test1547 test1548 test1549 test155 test1550 test1551 test1552 test1553 test1554 test1555 test1556 test1557 test1558 test1559 test156 test1560 test1561 test1562 test1563 test1564 test1565 test1566 test1567 test1568 test1569 test157 test1570 test1571 test1572 test1573 test1574 test1575 test1576 test1577 test1578 test1579 test158 test1580 test1581 test1582 test1583 test1584 test1585 test1586 test1587 test1588 test1589 test159 test1590 test1591 test1592 test1593 test1594 test1595 test1596 test1597 test1598 test1599 test16 test160 test1600 test1601 test1602 test1603 test1604 test1605 test1606 test1607 test1608 test1609 test161 test1610 test1611 test1612 test1613 test1614 test1615 test1616 test1617 test1618 test1619 test162 test1620 test1621 test1622 test1623 test1624 test1625 test1626 test1627 test1628 test1629 test163 test1630 test1631 test1632 test1633 test1634 test1635 test1636 test1637 test1638 test1639 test164 test1640 test1641 test1642 test1643 test1644 test1645 test165 test1650 test1651 test1652 test1653 test1654 test1655 test1656 test1657 test1658 test1659 test166 test1660 test1661 test1662 test1663 test1664 test1665 test1666 test1667 test1668 test1669 test167 test1670 test1671 test1672 test1673 test1674 test1675 test1676 test168 test1680 test1681 test1682 test1683 test1684 test1685 test169 test17 test170 test1700 test1701 test1702 test1703 test1704 test1705 test1706 test1707 test1708 test1709 test171 test1710 test1711 test1712 test1713 test1714 test1715 test172 test1720 test1721 test173 test174 test175 test176 test177 test178 test179 test18 test180 test1800 test1801 test1802 test181 test182 test183 test184 test1847 test1848 test1849 test185 test1850 test1851 test186 test187 test188 test189 test19 test190 test1900 test1901 test1902 test1903 test1904 test1905 test1906 test1907 test1908 test1909 test191 test1910 test1911 test1912 test1913 test1914 test1915 test1916 test1917 test1918 test1919 test192 test1920 test1921 test193 test1933 test1934 test1935 test1936 test1937 test1938 test1939 test194 test1940 test1941 test1942 test1943 test1944 test1945 test1946 test1947 test1948 test195 test1955 test1956 test1957 test1958 test1959 test196 test1960 test1964 test1965 test1966 test197 test1970 test1971 test1972 test1973 test1974 test1975 test1976 test1977 test1978 test1979 test198 test1980 test1981 test1982 test1983 test1984 test199 test2 test20 test200 test2000 test2001 test2002 test2003 test2004 test2005 test2006 test2007 test2008 test2009 test201 test2010 test2011 test2012 test2013 test2014 test202 test2023 test2024 test2025 test2026 test2027 test2028 test2029 test203 test2030 test2031 test2032 test2033 test2034 test2035 test2037 test2038 test2039 test204 test2040 test2041 test2042 test2043 test2044 test2045 test2046 test2047 test2048 test2049 test205 test2050 test2051 test2052 test2053 test2054 test2055 test2056 test2057 test2058 test2059 test206 test2060 test2061 test2062 test2063 test2064 test2065 test2066 test2067 test2068 test2069 test207 test2070 test2071 test2072 test2073 test2074 test2075 test2076 test2077 test2078 test2079 test208 test2080 test2081 test2082 test2083 test2084 test2085 test2086 test2087 test2088 test2089 test209 test2090 test2091 test2092 test21 test210 test2100 test2101 test2102 test2103 test2104 test211 test212 test213 test214 test215 test216 test217 test218 test219 test22 test220 test2200 test2201 test2202 test2203 test2204 test2205 test2206 test2207 test221 test222 test223 test224 test225 test226 test227 test228 test229 test23 test230 test2300 test2301 test2302 test2303 test2304 test2306 test2307 test2308 test2309 test231 test232 test233 test234 test235 test236 test237 test238 test239 test24 test240 test2400 test2401 test2402 test2403 test2404 test2405 test2406 test2407 test2408 test2409 test241 test2410 test2411 test242 test243 test244 test245 test246 test247 test248 test249 test25 test250 test2500 test2501 test2502 test2503 test2504 test2505 test2506 test251 test252 test253 test254 test255 test256 test257 test258 test259 test26 test260 test2600 test2601 test2602 test2603 test2604 test2605 test261 test262 test263 test264 test265 test266 test267 test268 test269 test27 test270 test2700 test2701 test2702 test2703 test2704 test2705 test2706 test2707 test2708 test2709 test271 test2710 test2711 test2712 test2713 test2714 test2715 test2716 test2717 test2718 test2719 test272 test2720 test2721 test2722 test2723 test273 test274 test275 test276 test277 test278 test279 test28 test280 test281 test282 test283 test284 test285 test286 test287 test288 test289 test29 test290 test291 test292 test293 test294 test295 test296 test297 test298 test299 test3 test30 test300 test3000 test3001 test3002 test3003 test3004 test3005 test3006 test3007 test3008 test3009 test301 test3010 test3011 test3012 test3013 test3014 test3015 test3016 test3017 test3018 test3019 test302 test3020 test3021 test3022 test3023 test3024 test3025 test3026 test3027 test3028 test3029 test303 test3030 test3031 test3032 test3033 test3034 test3035 test3036 test304 test305 test306 test307 test308 test309 test31 test310 test3100 test3101 test3102 test3103 test3104 test3105 test3106 test311 test312 test313 test314 test315 test316 test317 test318 test319 test32 test320 test3200 test3201 test3202 test3203 test3204 test3205 test3206 test3207 test3208 test3209 test321 test3210 test3211 test3212 test3213 test3214 test3215 test3216 test3217 test3218 test3219 test322 test3220 test323 test324 test325 test326 test327 test328 test329 test33 test330 test3300 test3301 test3302 test331 test332 test333 test334 test335 test336 test337 test338 test339 test34 test340 test341 test342 test343 test344 test345 test346 test347 test348 test349 test35 test350 test351 test352 test353 test354 test355 test356 test357 test358 test359 test36 test360 test361 test362 test363 test364 test365 test366 test367 test368 test369 test37 test370 test371 test372 test373 test374 test375 test376 test378 test379 test38 test380 test381 test383 test384 test385 test386 test387 test388 test389 test39 test390 test391 test392 test393 test394 test395 test396 test397 test398 test399 test4 test40 test400 test4000 test4001 test401 test402 test403 test404 test405 test406 test407 test408 test409 test41 test410 test411 test412 test413 test414 test415 test416 test417 test418 test419 test42 test420 test421 test422 test423 test424 test425 test426 test427 test428 test429 test43 test430 test431 test432 test433 test434 test435 test436 test437 test438 test439 test44 test440 test441 test442 test443 test444 test445 test446 test447 test448 test449 test45 test450 test451 test452 test453 test454 test455 test456 test457 test458 test459 test46 test460 test461 test462 test463 test467 test468 test469 test47 test470 test471 test472 test473 test474 test475 test476 test477 test478 test479 test48 test480 test481 test482 test483 test484 test485 test486 test487 test488 test489 test49 test490 test491 test492 test493 test494 test495 test496 test497 test498 test499 test5 test50 test500 test501 test502 test503 test504 test505 test506 test507 test508 test509 test51 test510 test511 test512 test513 test514 test515 test516 test517 test518 test519 test52 test520 test521 test522 test523 test524 test525 test526 test527 test528 test529 test53 test530 test531 test532 test533 test534 test535 test536 test537 test538 test539 test54 test540 test541 test542 test543 test544 test545 test546 test547 test548 test549 test55 test550 test551 test552 test553 test554 test555 test556 test557 test558 test559 test56 test560 test561 test562 test563 test564 test565 test566 test567 test568 test569 test57 test570 test571 test572 test573 test574 test575 test576 test577 test578 test579 test58 test580 test581 test582 test583 test584 test585 test586 test587 test588 test589 test59 test590 test591 test592 test593 test594 test595 test596 test597 test598 test599 test6 test60 test600 test601 test602 test603 test604 test605 test606 test607 test608 test609 test61 test610 test611 test612 test613 test614 test615 test616 test617 test618 test619 test62 test620 test621 test622 test623 test624 test625 test626 test627 test628 test629 test63 test630 test631 test632 test633 test634 test635 test636 test637 test638 test639 test64 test640 test641 test642 test643 test644 test645 test646 test647 test648 test649 test65 test650 test651 test652 test653 test654 test655 test656 test658 test659 test66 test660 test661 test662 test663 test664 test665 test666 test667 test668 test669 test67 test670 test671 test672 test673 test674 test675 test676 test677 test678 test679 test68 test680 test681 test682 test683 test684 test685 test686 test687 test688 test689 test69 test690 test691 test692 test693 test694 test695 test696 test697 test698 test699 test7 test70 test700 test701 test702 test703 test704 test705 test706 test707 test708 test709 test71 test710 test711 test712 test713 test714 test715 test716 test717 test718 test719 test72 test720 test721 test722 test723 test724 test725 test726 test727 test728 test729 test73 test730 test731 test732 test733 test734 test735 test736 test737 test738 test739 test74 test740 test741 test742 test743 test744 test745 test746 test747 test748 test749 test75 test750 test751 test752 test753 test754 test755 test756 test757 test758 test759 test76 test760 test761 test762 test763 test764 test765 test766 test767 test768 test769 test77 test770 test771 test772 test773 test774 test775 test776 test777 test778 test779 test78 test780 test781 test782 test783 test784 test785 test786 test787 test788 test789 test79 test790 test791 test792 test793 test794 test795 test796 test797 test798 test799 test8 test80 test800 test801 test802 test803 test804 test805 test806 test807 test808 test809 test81 test810 test811 test812 test813 test814 test815 test816 test817 test818 test819 test82 test820 test821 test822 test823 test824 test825 test826 test827 test828 test829 test83 test830 test831 test832 test833 test834 test835 test836 test837 test838 test839 test84 test840 test841 test842 test843 test844 test845 test846 test847 test848 test849 test85 test850 test851 test852 test853 test854 test855 test856 test857 test858 test859 test86 test860 test861 test862 test863 test864 test865 test866 test867 test868 test869 test87 test870 test871 test872 test873 test874 test875 test876 test877 test878 test879 test88 test880 test881 test882 test883 test884 test885 test886 test887 test888 test889 test89 test890 test891 test892 test893 test894 test895 test896 test897 test898 test899 test9 test90 test900 test901 test902 test903 test904 test905 test906 test907 test908 test909 test91 test910 test911 test912 test913 test914 test915 test916 test917 test918 test919 test92 test920 test921 test922 test923 test924 test925 test926 test927 test928 test929 test93 test930 test931 test932 test933 test934 test935 test936 test937 test938 test939 test94 test940 test941 test942 test943 test944 test945 test946 test947 test948 test949 test95 test950 test951 test952 test953 test954 test955 test956 test957 test958 test959 test96 test960 test961 test962 test963 test964 test965 test966 test967 test968 test969 test97 test970 test971 test972 test973 test974 test975 test976 test977 test978 test979 test98 test980 test981 test982 test983 test984 test985 test986 test987 test988 test989 test99 test990 test991 test992 test993 test994 test995 test996 test997 test998 test999
http
testenv
mod_curltest .gitignore mod_curltest.c
__init__.py caddy.py certs.py client.py curl.py dante.py dnsd.py env.py httpd.py nghttpx.py ports.py sshd.py vsftpd.py ws_echo_server.py
.gitignore CMakeLists.txt Makefile.am config.ini.in conftest.py requirements.txt scorecard.py test_01_basic.py test_02_download.py test_03_goaway.py test_04_stuttered.py test_05_errors.py test_06_eyeballs.py test_07_upload.py test_08_caddy.py test_09_push.py test_10_proxy.py test_11_unix.py test_12_reuse.py test_13_proxy_auth.py test_14_auth.py test_15_tracing.py test_16_info.py test_17_ssl_use.py test_18_methods.py test_19_shutdown.py test_20_websockets.py test_21_resolve.py test_22_httpsrr.py test_30_vsftpd.py test_31_vsftpds.py test_32_ftps_vsftpd.py test_40_socks.py test_50_scp.py test_51_sftp.py
libtest .gitignore CMakeLists.txt Makefile.am Makefile.inc cli_ftp_upload.c cli_h2_pausing.c cli_h2_serverpush.c cli_h2_upgrade_extreme.c cli_hx_download.c cli_hx_upload.c cli_tls_session_reuse.c cli_upload_pausing.c cli_ws_data.c cli_ws_pingpong.c first.c first.h lib1156.c lib1301.c lib1308.c lib1485.c lib1500.c lib1501.c lib1502.c lib1506.c lib1507.c lib1508.c lib1509.c lib1510.c lib1511.c lib1512.c lib1513.c lib1514.c lib1515.c lib1517.c lib1518.c lib1520.c lib1522.c lib1523.c lib1525.c lib1526.c lib1527.c lib1528.c lib1529.c lib1530.c lib1531.c lib1532.c lib1533.c lib1534.c lib1535.c lib1536.c lib1537.c lib1538.c lib1540.c lib1541.c lib1542.c lib1545.c lib1549.c lib1550.c lib1551.c lib1552.c lib1553.c lib1554.c lib1555.c lib1556.c lib1557.c lib1558.c lib1559.c lib1560.c lib1564.c lib1565.c lib1567.c lib1568.c lib1569.c lib1571.c lib1576.c lib1582.c lib1587.c lib1588.c lib1589.c lib1591.c lib1592.c lib1593.c lib1594.c lib1597.c lib1598.c lib1599.c lib1662.c lib1900.c lib1901.c lib1902.c lib1903.c lib1905.c lib1906.c lib1907.c lib1908.c lib1910.c lib1911.c lib1912.c lib1913.c lib1915.c lib1916.c lib1918.c lib1919.c lib1920.c lib1921.c lib1933.c lib1934.c lib1935.c lib1936.c lib1937.c lib1938.c lib1939.c lib1940.c lib1945.c lib1947.c lib1948.c lib1955.c lib1956.c lib1957.c lib1958.c lib1959.c lib1960.c lib1964.c lib1965.c lib1970.c lib1971.c lib1972.c lib1973.c lib1974.c lib1975.c lib1977.c lib1978.c lib2023.c lib2032.c lib2082.c lib2301.c lib2302.c lib2304.c lib2306.c lib2308.c lib2309.c lib2402.c lib2404.c lib2405.c lib2502.c lib2504.c lib2505.c lib2506.c lib2700.c lib3010.c lib3025.c lib3026.c lib3027.c lib3033.c lib3034.c lib3100.c lib3101.c lib3102.c lib3103.c lib3104.c lib3105.c lib3207.c lib3208.c lib500.c lib501.c lib502.c lib503.c lib504.c lib505.c lib506.c lib507.c lib508.c lib509.c lib510.c lib511.c lib512.c lib513.c lib514.c lib515.c lib516.c lib517.c lib518.c lib519.c lib520.c lib521.c lib523.c lib524.c lib525.c lib526.c lib530.c lib533.c lib536.c lib537.c lib539.c lib540.c lib541.c lib542.c lib543.c lib544.c lib547.c lib549.c lib552.c lib553.c lib554.c lib555.c lib556.c lib557.c lib558.c lib559.c lib560.c lib562.c lib564.c lib566.c lib567.c lib568.c lib569.c lib570.c lib571.c lib572.c lib573.c lib574.c lib575.c lib576.c lib578.c lib579.c lib582.c lib583.c lib586.c lib589.c lib590.c lib591.c lib597.c lib598.c lib599.c lib643.c lib650.c lib651.c lib652.c lib653.c lib654.c lib655.c lib658.c lib659.c lib661.c lib666.c lib667.c lib668.c lib670.c lib674.c lib676.c lib677.c lib678.c lib694.c lib695.c lib751.c lib753.c lib757.c lib758.c lib766.c memptr.c mk-lib1521.pl test1013.pl test1022.pl test307.pl test610.pl test613.pl testtrace.c testtrace.h testutil.c testutil.h unitcheck.h
server .checksrc .gitignore CMakeLists.txt Makefile.am Makefile.inc dnsd.c first.c first.h getpart.c mqttd.c resolve.c rtspd.c sockfilt.c socksd.c sws.c tftpd.c util.c
tunit .gitignore CMakeLists.txt Makefile.am Makefile.inc README.md tool1394.c tool1604.c tool1621.c tool1622.c tool1623.c tool1720.c
unit .gitignore CMakeLists.txt Makefile.am Makefile.inc README.md unit1300.c unit1302.c unit1303.c unit1304.c unit1305.c unit1307.c unit1309.c unit1323.c unit1330.c unit1395.c unit1396.c unit1397.c unit1398.c unit1399.c unit1600.c unit1601.c unit1602.c unit1603.c unit1605.c unit1606.c unit1607.c unit1608.c unit1609.c unit1610.c unit1611.c unit1612.c unit1614.c unit1615.c unit1616.c unit1620.c unit1625.c unit1626.c unit1627.c unit1636.c unit1650.c unit1651.c unit1652.c unit1653.c unit1654.c unit1655.c unit1656.c unit1657.c unit1658.c unit1660.c unit1661.c unit1663.c unit1664.c unit1666.c unit1667.c unit1668.c unit1669.c unit1674.c unit1675.c unit1676.c unit1979.c unit1980.c unit2600.c unit2601.c unit2602.c unit2603.c unit2604.c unit2605.c unit3200.c unit3205.c unit3211.c unit3212.c unit3213.c unit3214.c unit3216.c unit3219.c unit3300.c unit3301.c unit3302.c
.gitignore CMakeLists.txt Makefile.am allversions.pm appveyor.pm azure.pm config.in configurehelp.pm.in devtest.pl dictserver.py directories.pm ech_combos.py ech_tests.sh ftpserver.pl getpart.pm globalconfig.pm http-server.pl http2-server.pl http3-server.pl memanalyze.pl memanalyzer.pm negtelnetserver.py nghttpx.conf pathhelp.pm processhelp.pm requirements.txt rtspserver.pl runner.pm runtests.pl secureserver.pl serverhelp.pm servers.pm smbserver.py sshhelp.pm sshserver.pl test1119.pl test1135.pl test1139.pl test1140.pl test1165.pl test1167.pl test1173.pl test1175.pl test1177.pl test1222.pl test1275.pl test1276.pl test1477.pl test1486.pl test1488.pl test1544.pl test1707.pl test745.pl test971.pl testcurl.pl testutil.pm tftpserver.pl util.py valgrind.pm valgrind.supp
.clang-tidy.yml .dir-locals.el .editorconfig .git-blame-ignore-revs .gitattributes .gitignore .mailmap CHANGES.md CMakeLists.txt COPYING Dockerfile GIT-INFO.md Makefile.am README README.md RELEASE-NOTES REUSE.toml SECURITY.md acinclude.m4 appveyor.sh appveyor.yml configure.ac curl-config.in libcurl.pc.in renovate.json
examples .env config.ini crypto_test.lua env_test.lua fs_example.lua http_server.lua https_test.lua ini_example.lua json.lua log.lua path_fs_example.lua process_example.lua request_download.lua request_test.lua run_all.lua sqlite_example.lua sqlite_http_template.lua stash_test.lua template_test.lua timer.lua websocket.lua
iniparser
.github
ISSUE_TEMPLATE config.yml
workflows disable-pull-requests.yml trigger-gitlab-ci.yml
cmake JoinPaths.cmake config.cmake.in pc.in
example iniexample.c iniwrite.c parse.c twisted-errors.ini twisted-genhuge.py twisted-ofkey.ini twisted-ofval.ini twisted.ini
src dictionary.c dictionary.h iniparser.c iniparser.h
test
ressources
bad_ini ends_well.ini twisted-errors.ini twisted-ofkey.ini twisted-ofval.ini
good_ini empty.ini spaced.ini spaced2.ini twisted.ini
gruezi.ini old.ini quotes.ini utf8.ini
CMakeLists.txt test_dictionary.c test_iniparser.c unity-config.yml unity_config.h
.cmake-format.py .gitignore .gitlab-ci.yml .gitmessage .travis.yml AUTHORS CMakeLists.txt FAQ-en.md FAQ-zhcn.md INSTALL LICENSE README.md compile_commands.json
jinjac
example CMakeLists.txt example.c
jinjac_test_app CMakeLists.txt jinjac_test_app.c
libjinjac
include jinjac.h
src CMakeLists.txt ast.c ast.h block_statement.c block_statement.h buffer.c buffer.h buildin.c buildin.h common.h convert.c convert.h flex_decl.h jfunction.c jfunction.h jinja_expression.l jinja_expression.y jinjac_parse.c jinjac_parse.h jinjac_stream.c jinjac_stream.h jlist.c jlist.h jobject.c jobject.h parameter.c parameter.h str_obj.c str_obj.h trace.c trace.h
CMakeLists.txt
test .gitignore CMakeLists.txt autotest.rb test_01.expected test_01.jinja test_01b.expected test_01b.jinja test_01c.expected test_01c.jinja test_01d.expected test_01d.jinja test_02.expected test_02.jinja test_03.expected test_03.jinja test_04.expected test_04.jinja test_05.expected test_05.jinja test_06.expected test_06.jinja test_07.expected test_07.jinja test_08.expected test_08.jinja test_08b.expected test_08b.jinja test_09.expected test_09.jinja test_10.expected test_10.jinja test_11.expected test_11.jinja test_12.expected test_12.jinja test_13.expected test_13.jinja test_14.expected test_14.jinja test_15.expected test_15.jinja test_16.expected test_16.jinja test_17.expected test_17.jinja test_18.expected test_18.jinja test_18b.expected test_18b.jinja test_18c.expected test_18c.jinja test_19.expected test_19.jinja test_19b.expected test_19b.jinja test_19c.expected test_19c.jinja test_19d.expected test_19d.jinja test_19e.expected test_19e.jinja test_19f.expected test_19f.jinja test_20.expected test_20.jinja test_21.expected test_21.jinja test_22.expected test_22.jinja test_22a.expected test_22a.jinja test_22b.expected test_22b.jinja test_23.expected test_23.jinja test_24.expected test_24.jinja
.gitignore CMakeLists.txt LICENSE.txt README.md build_coverage.sh build_debug.sh build_release.sh cppcheck_analysis.sh
libev Changes LICENSE Makefile Makefile.am Makefile.in README Symbols.ev Symbols.event aclocal.m4 autogen.sh compile config.guess config.h config.h.in config.status config.sub configure configure.ac depcomp ev++.h ev.3 ev.c ev.h ev.pod ev_epoll.c ev_kqueue.c ev_poll.c ev_port.c ev_select.c ev_vars.h ev_win32.c ev_wrap.h event.c event.h install-sh libev.m4 libtool ltmain.sh missing mkinstalldirs stamp-h1
luajit
doc
img contact.png
bluequad-print.css bluequad.css contact.html ext_buffer.html ext_c_api.html ext_ffi.html ext_ffi_api.html ext_ffi_semantics.html ext_ffi_tutorial.html ext_jit.html ext_profiler.html extensions.html install.html luajit.html running.html
dynasm dasm_arm.h dasm_arm.lua dasm_arm64.h dasm_arm64.lua dasm_mips.h dasm_mips.lua dasm_mips64.lua dasm_ppc.h dasm_ppc.lua dasm_proto.h dasm_x64.lua dasm_x86.h dasm_x86.lua dynasm.lua
etc luajit.1 luajit.pc
src
host .gitignore README buildvm.c buildvm.h buildvm_asm.c buildvm_fold.c buildvm_lib.c buildvm_libbc.h buildvm_peobj.c genlibbc.lua genminilua.lua genversion.lua minilua.c
jit .gitignore bc.lua bcsave.lua dis_arm.lua dis_arm64.lua dis_arm64be.lua dis_mips.lua dis_mips64.lua dis_mips64el.lua dis_mips64r6.lua dis_mips64r6el.lua dis_mipsel.lua dis_ppc.lua dis_x64.lua dis_x86.lua dump.lua p.lua v.lua zone.lua
.gitignore Makefile Makefile.dep lauxlib.h lib_aux.c lib_base.c lib_bit.c lib_buffer.c lib_debug.c lib_ffi.c lib_init.c lib_io.c lib_jit.c lib_math.c lib_os.c lib_package.c lib_string.c lib_table.c lj_alloc.c lj_alloc.h lj_api.c lj_arch.h lj_asm.c lj_asm.h lj_asm_arm.h lj_asm_arm64.h lj_asm_mips.h lj_asm_ppc.h lj_asm_x86.h lj_assert.c lj_bc.c lj_bc.h lj_bcdump.h lj_bcread.c lj_bcwrite.c lj_buf.c lj_buf.h lj_carith.c lj_carith.h lj_ccall.c lj_ccall.h lj_ccallback.c lj_ccallback.h lj_cconv.c lj_cconv.h lj_cdata.c lj_cdata.h lj_char.c lj_char.h lj_clib.c lj_clib.h lj_cparse.c lj_cparse.h lj_crecord.c lj_crecord.h lj_ctype.c lj_ctype.h lj_debug.c lj_debug.h lj_def.h lj_dispatch.c lj_dispatch.h lj_emit_arm.h lj_emit_arm64.h lj_emit_mips.h lj_emit_ppc.h lj_emit_x86.h lj_err.c lj_err.h lj_errmsg.h lj_ff.h lj_ffrecord.c lj_ffrecord.h lj_frame.h lj_func.c lj_func.h lj_gc.c lj_gc.h lj_gdbjit.c lj_gdbjit.h lj_ir.c lj_ir.h lj_ircall.h lj_iropt.h lj_jit.h lj_lex.c lj_lex.h lj_lib.c lj_lib.h lj_load.c lj_mcode.c lj_mcode.h lj_meta.c lj_meta.h lj_obj.c lj_obj.h lj_opt_dce.c lj_opt_fold.c lj_opt_loop.c lj_opt_mem.c lj_opt_narrow.c lj_opt_sink.c lj_opt_split.c lj_parse.c lj_parse.h lj_prng.c lj_prng.h lj_profile.c lj_profile.h lj_record.c lj_record.h lj_serialize.c lj_serialize.h lj_snap.c lj_snap.h lj_state.c lj_state.h lj_str.c lj_str.h lj_strfmt.c lj_strfmt.h lj_strfmt_num.c lj_strscan.c lj_strscan.h lj_tab.c lj_tab.h lj_target.h lj_target_arm.h lj_target_arm64.h lj_target_mips.h lj_target_ppc.h lj_target_x86.h lj_trace.c lj_trace.h lj_traceerr.h lj_udata.c lj_udata.h lj_vm.h lj_vmevent.c lj_vmevent.h lj_vmmath.c ljamalg.c lua.h lua.hpp luaconf.h luajit.c luajit_rolling.h lualib.h msvcbuild.bat nxbuild.bat ps4build.bat ps5build.bat psvitabuild.bat vm_arm.dasc vm_arm64.dasc vm_mips.dasc vm_mips64.dasc vm_ppc.dasc vm_x64.dasc vm_x86.dasc xb1build.bat xedkbuild.bat
.gitattributes .gitignore .relver COPYRIGHT Makefile README
sqlite shell.c sqlite3.c sqlite3.h sqlite3ext.h
wolfssl
.github
ISSUE_TEMPLATE bug_report.yaml other.yaml
actions
install-apt-deps action.yml
scripts
zephyr-4.x external_libc.conf zephyr-test.sh
openssl-ech.sh tls-anvil-test.sh
workflows
disabled haproxy.yml hitch.yml hostap.yml
hostap-files
configs
07c9f183ea744ac04585fb6dd10220c75a5e2e74 hostapd.config tests wpa_supplicant.config
b607d2723e927a3446d89aed813f1aa6068186bb hostapd.config tests wpa_supplicant.config
hostap_2_10 extra.patch hostapd.config tests wpa_supplicant.config
Makefile README dbus-wpa_supplicant.conf
ada.yml arduino.yml async-examples.yml async.yml atecc608-sim.yml bind.yml cmake-autoconf.yml cmake.yml codespell.yml coverity-scan-fixes.yml cryptocb-only.yml curl.yml cyrus-sasl.yml disable-pk-algs.yml docker-Espressif.yml docker-OpenWrt.yml emnet-nonblock.yml fil-c.yml freertos-mem-track.yml gencertbuf.yml grpc.yml haproxy.yml hostap-vm.yml intelasm-c-fallback.yml ipmitool.yml jwt-cpp.yml krb5.yml libspdm.yml libssh2.yml libvncserver.yml linuxkm.yml macos-apple-native-cert-validation.yml mbedtls.sh mbedtls.yml membrowse-comment.yml membrowse-onboard.yml membrowse-report.yml memcached.sh memcached.yml mono.yml mosquitto.yml msmtp.yml msys2.yml multi-arch.yml multi-compiler.yml net-snmp.yml nginx.yml no-malloc.yml no-tls.yml nss.sh nss.yml ntp.yml ocsp.yml openldap.yml openssh.yml openssl-ech.yml opensslcoexist.yml openvpn.yml os-check.yml packaging.yml pam-ipmi.yml pq-all.yml pr-commit-check.yml psk.yml puf.yml python.yml rng-tools.yml rust-wrapper.yml se050-sim.yml smallStackSize.yml socat.yml softhsm.yml sssd.yml stm32-sim.yml stsafe-a120-sim.yml stunnel.yml symbol-prefixes.yml threadx.yml tls-anvil.yml trackmemory.yml watcomc.yml win-csharp-test.yml wolfCrypt-Wconversion.yml wolfboot-integration.yml wolfsm.yml xcode.yml zephyr-4.x.yml zephyr.yml
PULL_REQUEST_TEMPLATE.md SECURITY.md membrowse-targets.json
Docker
OpenWrt Dockerfile README.md runTests.sh
packaging
debian Dockerfile
fedora Dockerfile
wolfCLU Dockerfile README.md
yocto Dockerfile buildAndPush.sh
Dockerfile Dockerfile.cross-compiler README.md buildAndPush.sh include.am run.sh
IDE
ARDUINO
sketches
wolfssl_client README.md
wolfssl_server README.md
wolfssl_version README.md
README.md
Arduino_README_prepend.md README.md include.am keywords.txt library.properties.template wolfssl-arduino.cpp wolfssl-arduino.sh wolfssl.h
AURIX Cpu0_Main.c README.md include.am user_settings.h wolf_main.c
Android Android.bp README.md include.am user_settings.h
CRYPTOCELL README.md include.am main.c user_settings.h
CSBENCH include.am user_settings.h
ECLIPSE
DEOS
deos_wolfssl .options
README.md deos_malloc.c include.am tls_wolfssl.c tls_wolfssl.h user_settings.h
MICRIUM README.md client_wolfssl.c client_wolfssl.h include.am server_wolfssl.c server_wolfssl.h user_settings.h wolfsslRunTests.c
RTTHREAD README.md include.am user_settings.h wolfssl_test.c
SIFIVE README.md include.am
Espressif
ESP-IDF
examples
template
VisualGDB wolfssl_template_IDF_v5.1_ESP32.vgdbproj
components
wolfssl
include user_settings.h
CMakeLists.txt Kconfig README.md component.mk
main
include main.h
CMakeLists.txt Kconfig.projbuild component.mk main.c
CMakeLists.txt Makefile README.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp8266
wolfssl_benchmark
VisualGDB wolfssl_benchmark_IDF_v4.4_ESP32.sln wolfssl_benchmark_IDF_v4.4_ESP32.vgdbproj wolfssl_benchmark_IDF_v5_ESP32.sln wolfssl_benchmark_IDF_v5_ESP32.vgdbproj wolfssl_benchmark_IDF_v5_ESP32C3.sln wolfssl_benchmark_IDF_v5_ESP32C3.vgdbproj wolfssl_benchmark_IDF_v5_ESP32S3.sln wolfssl_benchmark_IDF_v5_ESP32S3.vgdbproj
components
wolfssl
include user_settings.h
CMakeLists.txt Kconfig README.md component.mk
main
include main.h
CMakeLists.txt Kconfig.projbuild component.mk main.c
CMakeLists.txt Makefile README.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp8266
wolfssl_client
VisualGDB README.md wolfssl_client_IDF_v5_ESP32.sln wolfssl_client_IDF_v5_ESP32.vgdbproj
components
wolfssl
include user_settings.h
CMakeLists.txt Kconfig README.md component.mk
main
include client-tls.h main.h time_helper.h wifi_connect.h
CMakeLists.txt Kconfig.projbuild client-tls.c component.mk main.c time_helper.c wifi_connect.c
CMakeLists.txt Makefile README.md README_server_sm.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp32c2 sdkconfig.defaults.esp8266 wolfssl_client_ESP8266.vgdbproj
wolfssl_server
VisualGDB README.md wolfssl_server_IDF_v5_ESP32.sln wolfssl_server_IDF_v5_ESP32.vgdbproj
components
wolfssl
include user_settings.h
CMakeLists.txt Kconfig README.md component.mk
main
include main.h server-tls.h time_helper.h wifi_connect.h
CMakeLists.txt Kconfig.projbuild component.mk main.c server-tls.c time_helper.c wifi_connect.c
CMakeLists.txt Makefile README.md README_server_sm.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp32c2 sdkconfig.defaults.esp8266 wolfssl_server_ESP8266.vgdbproj
wolfssl_test
VisualGDB wolfssl_test-IDF_v5_ESP32.sln wolfssl_test-IDF_v5_ESP32.vgdbproj wolfssl_test-IDF_v5_ESP32C3.sln wolfssl_test-IDF_v5_ESP32C3.vgdbproj wolfssl_test-IDF_v5_ESP32C6.sln wolfssl_test-IDF_v5_ESP32C6.vgdbproj wolfssl_test_IDF_v5_ESP32S3.sln wolfssl_test_IDF_v5_ESP32S3.vgdbproj
components
wolfssl
include user_settings.h
CMakeLists.txt Kconfig README.md component.mk
main
include main.h
CMakeLists.txt Kconfig.projbuild component.mk main.c
CMakeLists.txt Makefile README.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp32 sdkconfig.defaults.esp32c3 sdkconfig.defaults.esp32c6 sdkconfig.defaults.esp32h2 sdkconfig.defaults.esp32s2 sdkconfig.defaults.esp32s3 sdkconfig.defaults.esp8266 testAll.sh testMonitor.sh wolfssl_test_ESP8266.sln wolfssl_test_ESP8266.vgdbproj
wolfssl_test_idf
VisualGDB VisualGDB_wolfssl_test_idf.sln VisualGDB_wolfssl_test_idf.vgdbproj
main CMakeLists.txt Kconfig.projbuild component.mk main.c main_wip.c.ex time_helper.c time_helper.h
CMakeLists.txt Kconfig.projbuild README.md component.mk sdkconfig.defaults
README.md
libs CMakeLists.txt README.md component.mk tigard.cfg
test CMakeLists.txt README.md component.mk test_wolfssl.c
README.md README_32se.md UPDATE.md compileAllExamples.sh dummy_config_h dummy_test_paths.h setup.sh setup_win.bat user_settings.h
README.md include.am
GCC-ARM
Header user_settings.h
Source armtarget.c benchmark_main.c test_main.c tls_client.c tls_server.c wolf_main.c
Makefile Makefile.bench Makefile.client Makefile.common Makefile.server Makefile.static Makefile.test README.md include.am linker.ld linker_fips.ld
Gaisler-BCC README.md include.am
HEXAGON
DSP Makefile wolfssl_dsp.idl
Makefile README.md build.sh ecc-verify-benchmark.c ecc-verify.c include.am user_settings.h
HEXIWEAR
wolfSSL_HW .cwGeneratedFileSetLog user_settings.h
IAR-EWARM
Projects
benchmark benchmark-main.c current_time.c wolfCrypt-benchmark.ewd wolfCrypt-benchmark.ewp
common minimum-startup.c wolfssl.icf
lib wolfSSL-Lib.ewd wolfSSL-Lib.ewp
test test-main.c wolfCrypt-test.ewd wolfCrypt-test.ewp
user_settings.h wolfssl.eww
embOS
SAMV71_XULT
embOS_SAMV71_XULT_Linker_Script samv71q21_wolfssl.icf
embOS_SAMV71_XULT_user_settings user_settings.h user_settings_simple_example.h user_settings_verbose_example.h
embOS_wolfcrypt_benchmark_SAMV71_XULT
Application runBenchmarks.c
README_wolfcrypt_benchmark wolfcrypt_benchmark.ewd wolfcrypt_benchmark.ewp
embOS_wolfcrypt_lib_SAMV71_XULT README_wolfcrypt_lib wolfcrypt_lib.ewd wolfcrypt_lib.ewp
embOS_wolfcrypt_test_SAMV71_XULT
Application runWolfcryptTests.c
README_wolfcrypt_test wolfcrypt_test.ewd wolfcrypt_test.ewp
README_SAMV71
custom_port
custom_port_Linker_Script samv71q21_wolfssl.icf
custom_port_user_settings user_settings.h
wolfcrypt_benchmark_custom_port
Application runBenchmarks.c
wolfcrypt_test_custom_port
Application runWolfcryptTests.c
README_custom_port
extract_trial_here README_extract_trial_here
README
.gitignore README
IAR-MSP430 Makefile README.md include.am main.c user_settings.h
INTIME-RTOS Makefile README.md include.am libwolfssl.c libwolfssl.vcxproj user_settings.h wolfExamples.c wolfExamples.h wolfExamples.sln wolfExamples.vcxproj wolfssl-lib.sln wolfssl-lib.vcxproj
Infineon README.md include.am user_settings.h
KDS
config user_settings.h
include.am
LINUX-SGX README.md build.sh clean.sh include.am sgx_t_static.mk
LPCXPRESSO
lib_wolfssl lpc_18xx_port.c user_settings.h
wolf_example
src lpc_18xx_startup.c wolfssl_example.c
readme.txt
README.md
M68K
benchmark Makefile main.cpp
testwolfcrypt Makefile main.cpp
Makefile README.md include.am user_settings.h
MCUEXPRESSO
RT1170 fsl_caam_c.patch fsl_caam_h.patch user_settings.h
benchmark
source run_benchmark.c
wolfssl liblinks.xml
README.md include.am user_settings.h wolfcrypt_test.c
MDK-ARM
LPC43xx time-LCP43xx.c
MDK-ARM
wolfSSL Retarget.c cert_data.c cert_data.h config-BARE-METAL.h config-FS.h config-RTX-TCP-FS.h config-WOLFLIB.h main.c shell.c time-CortexM3-4.c time-dummy.c wolfssl_MDK_ARM.c wolfssl_MDK_ARM.h
STM32F2xx_StdPeriph_Lib time-STM32F2xx.c
MDK5-ARM
Conf user_settings.h
Inc wolfssl_MDK_ARM.h
Projects
CryptBenchmark Abstract.txt CryptBenchmark.sct CryptBenchmark.uvoptx CryptBenchmark.uvprojx main.c
CryptTest Abstract.txt CryptTest.sct CryptTest.uvoptx CryptTest.uvprojx main.c
EchoClient Abstract.txt EchoClient.uvoptx EchoClient.uvprojx main.c wolfssl-link.sct
EchoServer Abstract.txt EchoServer.uvoptx EchoServer.uvprojx main.c wolfssl-link.sct
SimpleClient Abstract.txt SimpleClient.uvoptx SimpleClient.uvprojx main.c wolfssl-link.sct
SimpleServer Abstract.txt SimpleServer.uvoptx SimpleServer.uvprojx main.c wolfssl-link.sct
wolfSSL-Full Abstract.txt main.c shell.c time-CortexM3-4.c wolfsslFull.uvoptx wolfsslFull.uvprojx
wolfSSL-Lib Abstract.txt wolfSSL-Lib.uvoptx wolfSSL-Lib.uvprojx
Src ssl-dummy.c
README.md include.am
MPLABX16
wolfcrypt_test.X
nbproject
private configurations.xml private.xml
configurations.xml include.am project.xml
Makefile
wolfssl.X
nbproject configurations.xml include.am project.xml
Makefile
README.md include.am main.c user_settings.h
MQX Makefile README-jp.md README.md client-tls.c include.am server-tls.c user_config.h user_settings.h
MSVS-2019-AZSPHERE
client client.c client.h
server server.c server.h
shared util.h
wolfssl_new_azsphere
HardwareDefinitions
avnet_mt3620_sk
inc
hw template_appliance.h
template_appliance.json
mt3620_rdb
inc
hw template_appliance.h
template_appliance.json
seeed_mt3620_mdb
inc
hw template_appliance.h
template_appliance.json
.gitignore CMakeLists.txt CMakeSettings.json app_manifest.json applibs_versions.h launch.vs.json main.c
README.md include.am user_settings.h
MYSQL CMakeLists_wolfCrypt.txt CMakeLists_wolfSSL.txt do.sh
NDS README.md
NETOS Makefile.wolfcrypt.inc README.md include.am user_settings.h user_settings.h-cert2425 user_settings.h-cert3389 wolfssl_netos_custom.c
OPENSTM32 README.md
PlatformIO
examples
wolfssl_benchmark
include README main.h
lib README
src CMakeLists.txt main.c
test README
CMakeLists.txt README.md platformio.ini sdkconfig.defaults wolfssl_benchmark.code-workspace
wolfssl_test
include README main.h
lib README
src CMakeLists.txt main.c
test README
CMakeLists.txt README.md platformio.ini sdkconfig.defaults wolfssl_test.code-workspace
README.md wolfssl_platformio.code-workspace
README.md include.am
QNX
CAAM-DRIVER Makefile
example-client Makefile client-tls.c
example-cmac Makefile cmac-test.c
example-server Makefile server-tls.c
testwolfcrypt Makefile
wolfssl Makefile user_settings.h
README.md include.am
RISCV
SIFIVE-HIFIVE1 Makefile README.md include.am main.c user_settings.h
SIFIVE-UNLEASHED README.md include.am
include.am
ROWLEY-CROSSWORKS-ARM Kinetis_FlashPlacement.xml README.md arm_startup.c benchmark_main.c hw.h include.am kinetis_hw.c retarget.c test_main.c user_settings.h wolfssl.hzp wolfssl_ltc.hzp
Renesas
cs+
Projects
common strings.h unistd.h user_settings.h wolfssl_dummy.c
t4_demo README_en.txt README_jp.txt t4_demo.mtpj wolf_client.c wolf_demo.h wolf_main.c wolf_server.c
test test.mtpj test_main.c
wolfssl_lib wolfssl_lib.mtpj
README include.am
e2studio
DK-S7G2
benchmark-template
src app_entry.c
example_server-template
src app_entry.c
wolfcrypttest-template
src app_entry.c
wolfssl-template-project configuration.xml
README.md include.am user_settings.h
Projects
common strings.h unistd.h user_settings.h wolfssl_dummy.c
test
src key_data.c key_data.h test_main.c wolf_client.c wolf_server.c wolfssl_demo.h
tools generate_rsa_keypair.sh genhexbuf.pl rsa_pss_sign.sh
wolfssl
src .gitkeep
wolfcrypt
src .gitkeep
README include.am
RA6M3
benchmark-wolfcrypt
common .gitkeep
script .gitkeep
src wolfssl_thread_entry.c
client-wolfssl
common
src .gitkeep
script .gitkeep
src wolfssl_thread_entry.c
wolfssl_thread_entry.h
common
ra6m3g README.md
src freertos_tcp_port.c
user_settings.h util.h
server-wolfssl
common
src .gitkeep
script .gitkeep
src wolfssl_thread_entry.c
wolfssl_thread_entry.h
test-wolfcrypt
common .gitkeep
script .gitkeep
src wolfssl_thread_entry.c
wolfssl
src .gitkeep
wolfcrypt .gitkeep
README.md README_APRA6M_en.md README_APRA6M_jp.md include.am
RA6M3G README.md
RA6M4
common user_settings.h wolfssl_demo.h
test
key_data key_data.h key_data_sce.c
src
SEGGER_RTT myprint.c
common .gitignore
test_main.c wolf_client.c wolfssl_sce_unit_test.c
test_RA6M4Debug.launch
tools
example_keys generate_SignedCA.sh rsa_private.pem rsa_public.pem
README.md
README.md include.am
RX65N
GR-ROSE
common strings.h unistd.h user_settings.h wolfssl_dummy.c
smc smc.scfg
test
src key_data.c key_data.h test_main.c wolf_client.c wolf_server.c wolfssl_demo.h
test.rcpc test_HardwareDebug.launch
tools
example_keys generate_SignedCA.sh rsa_private.pem rsa_public.pem
README.md
wolfssl wolfssl.rcpc
README_EN.md README_JP.md include.am
RSK
resource section.esi
wolfssl wolfssl.rcpc
wolfssl_demo key_data.c key_data.h user_settings.h wolfssl_demo.c wolfssl_demo.h
InstructionManualForExample_RSK+RX65N-2MB_EN.pdf InstructionManualForExample_RSK+RX65N-2MB_JP.pdf README_EN.md README_JP.md include.am
RX72N
EnvisionKit
Simple
common sectioninfo.esi wolfssl_dummy.c
test
src
client simple_tcp_client.c simple_tls_tsip_client.c
server simple_tcp_server.c simple_tls_server.c
test_main.c wolfssl_simple_demo.h
test.rcpc test.scfg test_HardwareDebug.launch
wolfssl wolfssl.rcpc
README_EN.md README_JP.md
resource section.esi
tools
example_keys generate_SignedCA.sh rsa_private.pem rsa_public.pem
README.md
wolfssl wolfssl.rcpc
wolfssl_demo key_data.c key_data.h user_settings.h wolfssl_demo.c wolfssl_demo.h wolfssl_tsip_unit_test.c
InstructionManualForExample_RX72N_EnvisonKit_EN.pdf InstructionManualForExample_RX72N_EnvisonKit_JP.pdf README_EN.md README_JP.md include.am
RZN2L
common user_settings.h wolfssl_demo.h
test
src
serial_io app_print.c
test wolf_client.c wolf_server.c wolfssl_rsip_unit_test.c
wolfCrypt .gitignore
wolfSSL .gitignore
local_system_init.c rzn2l_tst_thread_entry.c wolfssl_dummy.c
README.md include.am
SK-S7G2
common user_settings.h
wolfssl_lib configuration.xml
.gitignore README.md include.am
STARCORE README.txt include.am starcore_test.c user_settings.h
STM32Cube README.md STM32_Benchmarks.md default_conf.ftl include.am main.c wolfssl_example.c wolfssl_example.h
SimplicityStudio README.md include.am test_wolf.c user_settings.h
TRUESTUDIO
wolfssl user_settings.h
README include.am
VS-ARM README.md include.am user_settings.h wolfssl.sln wolfssl.vcxproj
VS-AZURE-SPHERE
client app_manifest.json client.c client.h client.vcxproj
server app_manifest.json server.c server.h server.vcxproj
shared util.h
wolfcrypt_test app_manifest.json wolfcrypt_test.vcxproj
README.md include.am user_settings.h wolfssl.sln wolfssl.vcxproj
VisualDSP include.am user_settings.h wolf_tasks.c
WICED-STUDIO README include.am user_settings.h
WIN README.txt include.am test.vcxproj user_settings.h user_settings_dtls.h wolfssl-fips.sln wolfssl-fips.vcxproj
WIN-SGX ReadMe.txt include.am wolfSSL_SGX.edl wolfSSL_SGX.sln wolfSSL_SGX.vcxproj
WIN-SRTP-KDF-140-3 README.txt include.am resource.h test.vcxproj user_settings.h wolfssl-fips.rc wolfssl-fips.sln wolfssl-fips.vcxproj
WIN10 README.txt include.am resource.h test.vcxproj user_settings.h wolfssl-fips.rc wolfssl-fips.sln wolfssl-fips.vcxproj
WINCE README.md include.am user_settings.h user_settings.h.140-2-deprecated
WORKBENCH README.md include.am
XCODE
Benchmark
wolfBench
Assets.xcassets
AppIcon.appiconset Contents.json
Base.lproj LaunchScreen.storyboard Main.storyboard
AppDelegate.h AppDelegate.m Info.plist ViewController.h ViewController.m main.m
wolfBench.xcodeproj project.pbxproj
include.am
wolfssl-FIPS.xcodeproj project.pbxproj
wolfssl.xcodeproj project.pbxproj
wolfssl_testsuite.xcodeproj project.pbxproj
README.md build-for-i386.sh include.am user_settings.h
XCODE-FIPSv2
macOS-C++
Intel user_settings.h
M1 user_settings.h
include.am user_settings.h
XCODE-FIPSv5 README include.am user_settings.h
XCODE-FIPSv6 README include.am user_settings.h
XilinxSDK
2018_2 lscript.ld
2019_2
wolfCrypt_example
src lscript.ld
wolfCrypt_example_system wolfCrypt_example_system.sprj
2022_1
wolfCrypt_FreeRTOS_example wolfCrypt_FreeRTOS_example.prj
wolfCrypt_FreeRTOS_example_system wolfCrypt_FreeRTOS_example_system.sprj
wolfCrypt_example wolfCrypt_example.prj
wolfCrypt_example_system wolfCrypt_example_system.sprj
.gitignore
README.md bench.sh combine.sh eclipse_formatter_profile.xml graph.sh include.am user_settings.h wolfssl_example.c
apple-universal
wolfssl-multiplatform
wolfssl-multiplatform
Assets.xcassets
AccentColor.colorset Contents.json
AppIcon.appiconset Contents.json
Contents.json
ContentView.swift simple_client_example.c simple_client_example.h wolfssl-multiplatform-Bridging-Header.h wolfssl_multiplatform.entitlements wolfssl_multiplatformApp.swift wolfssl_test_driver.c wolfssl_test_driver.h
wolfssl-multiplatform.xcodeproj project.pbxproj
.gitignore README.md build-wolfssl-framework.sh include.am
iotsafe Makefile README.md ca-cert.c devices.c devices.h include.am main.c memory-tls.c startup.c target.ld user_settings.h
iotsafe-raspberrypi Makefile README.md client-tls13.c include.am main.c
mynewt README.md apps.wolfcrypttest.pkg.yml crypto.wolfssl.pkg.yml crypto.wolfssl.syscfg.yml include.am setup.sh
zephyr README.md include.am
include.am
RTOS
nuttx
wolfssl .gitignore Kconfig Make.defs Makefile README.md setup-wolfssl.sh user_settings.h
include.am
bsdkm Makefile README.md bsdkm_wc_port.h include.am wolfkmod.c wolfkmod_aes.c x86_vecreg.c
certs
1024 ca-cert.der ca-cert.pem ca-key.der ca-key.pem client-cert.der client-cert.pem client-key.der client-key.pem client-keyPub.der dh1024.der dh1024.pem dsa-pub-1024.pem dsa1024.der dsa1024.pem include.am rsa1024.der server-cert.der server-cert.pem server-key.der server-key.pem
3072 client-cert.der client-cert.pem client-key.der client-key.pem client-keyPub.der include.am
4096 client-cert.der client-cert.pem client-key.der client-key.pem client-keyPub.der include.am
acert
rsa_pss acert.pem acert_ietf.pem acert_ietf_pubkey.pem acert_pubkey.pem
acert.pem acert_ietf.pem acert_ietf_pubkey.pem acert_pubkey.pem include.am
aia ca-issuers-cert.pem multi-aia-cert.pem overflow-aia-cert.pem
crl
extra-crls ca-int-cert-revoked.pem claim-root.pem crl_critical_entry.pem crlnum_57oct.pem crlnum_64oct.pem general-server-crl.pem large_crlnum.pem large_crlnum2.pem
hash_der 0fdb2da4.r0
hash_pem 0fdb2da4.r0
bad_time_fmt.pem ca-int-ecc.pem ca-int.pem ca-int2-ecc.pem ca-int2.pem caEcc384Crl.pem caEccCrl.der caEccCrl.pem cliCrl.pem client-int-ecc.pem client-int.pem crl.der crl.pem crl.revoked crl2.der crl2.pem crl_reason.pem crl_rsapss.pem eccCliCRL.pem eccSrvCRL.pem gencrls.sh include.am server-goodaltCrl.pem server-goodaltwildCrl.pem server-goodcnCrl.pem server-goodcnwildCrl.pem server-int-ecc.pem server-int.pem wolfssl.cnf
dilithium bench_dilithium_level2_key.der bench_dilithium_level3_key.der bench_dilithium_level5_key.der include.am
ecc bp256r1-key.der bp256r1-key.pem ca-secp256k1-cert.pem ca-secp256k1-key.pem client-bp256r1-cert.der client-bp256r1-cert.pem client-secp256k1-cert.der client-secp256k1-cert.pem genecc.sh include.am secp256k1-key.der secp256k1-key.pem secp256k1-param.pem secp256k1-privkey.der secp256k1-privkey.pem server-bp256r1-cert.der server-bp256r1-cert.pem server-secp256k1-cert.der server-secp256k1-cert.pem server2-secp256k1-cert.der server2-secp256k1-cert.pem wolfssl.cnf wolfssl_384.cnf
ed25519 ca-ed25519-key.der ca-ed25519-key.pem ca-ed25519-priv.der ca-ed25519-priv.pem ca-ed25519.der ca-ed25519.pem client-ed25519-key.der client-ed25519-key.pem client-ed25519-priv.der client-ed25519-priv.pem client-ed25519.der client-ed25519.pem eddsa-ed25519.der eddsa-ed25519.pem gen-ed25519-certs.sh gen-ed25519-keys.sh gen-ed25519.sh include.am root-ed25519-key.der root-ed25519-key.pem root-ed25519-priv.der root-ed25519-priv.pem root-ed25519.der root-ed25519.pem server-ed25519-cert.pem server-ed25519-key.der server-ed25519-key.pem server-ed25519-priv.der server-ed25519-priv.pem server-ed25519.der server-ed25519.pem
ed448 ca-ed448-key.der ca-ed448-key.pem ca-ed448-priv.der ca-ed448-priv.pem ca-ed448.der ca-ed448.pem client-ed448-key.der client-ed448-key.pem client-ed448-priv.der client-ed448-priv.pem client-ed448.der client-ed448.pem gen-ed448-certs.sh gen-ed448-keys.sh include.am root-ed448-key.der root-ed448-key.pem root-ed448-priv.der root-ed448-priv.pem root-ed448.der root-ed448.pem server-ed448-cert.pem server-ed448-key.der server-ed448-key.pem server-ed448-priv.der server-ed448-priv.pem server-ed448.der server-ed448.pem
external DigiCertGlobalRootCA.pem README.txt ca-digicert-ev.pem ca-globalsign-root.pem ca-google-root.pem ca_collection.pem include.am
falcon bench_falcon_level1_key.der bench_falcon_level5_key.der include.am
intermediate
ca_false_intermediate gentestcert.sh int_ca.key server.key test_ca.key test_ca.pem test_int_not_cacert.pem test_sign_bynoca_srv.pem wolfssl_base.conf wolfssl_srv.conf
ca-ecc-bad-aki.der ca-ecc-bad-aki.pem ca-int-cert.der ca-int-cert.pem ca-int-ecc-cert.der ca-int-ecc-cert.pem ca-int-ecc-key.der ca-int-ecc-key.pem ca-int-key.der ca-int-key.pem ca-int2-cert.der ca-int2-cert.pem ca-int2-ecc-cert.der ca-int2-ecc-cert.pem ca-int2-ecc-key.der ca-int2-ecc-key.pem ca-int2-key.der ca-int2-key.pem client-chain-alt-ecc.pem client-chain-alt.pem client-chain-ecc.der client-chain-ecc.pem client-chain.der client-chain.pem client-int-cert.der client-int-cert.pem client-int-ecc-cert.der client-int-ecc-cert.pem genintcerts.sh include.am server-chain-alt-ecc.pem server-chain-alt.pem server-chain-ecc.der server-chain-ecc.pem server-chain-short.pem server-chain.der server-chain.pem server-int-cert.der server-int-cert.pem server-int-ecc-cert.der server-int-ecc-cert.pem
lms bc_hss_L2_H5_W8_root.der bc_hss_L3_H5_W4_root.der bc_lms_chain_ca.der bc_lms_chain_leaf.der bc_lms_native_bc_root.der bc_lms_sha256_h10_w8_root.der bc_lms_sha256_h5_w4_root.der include.am
mldsa README.txt include.am mldsa44-cert.der mldsa44-cert.pem mldsa44-key.pem mldsa44_bare-priv.der mldsa44_bare-seed.der mldsa44_oqskeypair.der mldsa44_priv-only.der mldsa44_pub-spki.der mldsa44_seed-only.der mldsa44_seed-priv.der mldsa65-cert.der mldsa65-cert.pem mldsa65-key.pem mldsa65_bare-priv.der mldsa65_bare-seed.der mldsa65_oqskeypair.der mldsa65_priv-only.der mldsa65_pub-spki.der mldsa65_seed-only.der mldsa65_seed-priv.der mldsa87-cert.der mldsa87-cert.pem mldsa87-key.pem mldsa87_bare-priv.der mldsa87_bare-seed.der mldsa87_oqskeypair.der mldsa87_priv-only.der mldsa87_pub-spki.der mldsa87_seed-only.der mldsa87_seed-priv.der
ocsp imposter-root-ca-cert.der imposter-root-ca-cert.pem imposter-root-ca-key.der imposter-root-ca-key.pem include.am index-ca-and-intermediate-cas.txt index-ca-and-intermediate-cas.txt.attr index-intermediate1-ca-issued-certs.txt index-intermediate1-ca-issued-certs.txt.attr index-intermediate2-ca-issued-certs.txt index-intermediate2-ca-issued-certs.txt.attr index-intermediate3-ca-issued-certs.txt index-intermediate3-ca-issued-certs.txt.attr intermediate1-ca-cert.der intermediate1-ca-cert.pem intermediate1-ca-key.der intermediate1-ca-key.pem intermediate2-ca-cert.der intermediate2-ca-cert.pem intermediate2-ca-key.der intermediate2-ca-key.pem intermediate3-ca-cert.der intermediate3-ca-cert.pem intermediate3-ca-key.der intermediate3-ca-key.pem ocsp-responder-cert.der ocsp-responder-cert.pem ocsp-responder-key.der ocsp-responder-key.pem openssl.cnf renewcerts-for-test.sh renewcerts.sh root-ca-cert.der root-ca-cert.pem root-ca-crl.pem root-ca-key.der root-ca-key.pem server1-cert.der server1-cert.pem server1-chain-noroot.pem server1-key.der server1-key.pem server2-cert.der server2-cert.pem server2-key.der server2-key.pem server3-cert.der server3-cert.pem server3-key.der server3-key.pem server4-cert.der server4-cert.pem server4-key.der server4-key.pem server5-cert.der server5-cert.pem server5-key.der server5-key.pem test-leaf-response.der test-multi-response.der test-response-nointern.der test-response-rsapss.der test-response.der
p521 ca-p521-key.der ca-p521-key.pem ca-p521-priv.der ca-p521-priv.pem ca-p521.der ca-p521.pem client-p521-key.der client-p521-key.pem client-p521-priv.der client-p521-priv.pem client-p521.der client-p521.pem gen-p521-certs.sh gen-p521-keys.sh include.am root-p521-key.der root-p521-key.pem root-p521-priv.der root-p521-priv.pem root-p521.der root-p521.pem server-p521-cert.pem server-p521-key.der server-p521-key.pem server-p521-priv.der server-p521-priv.pem server-p521.der server-p521.pem
renewcerts wolfssl.cnf
rpk client-cert-rpk.der client-ecc-cert-rpk.der include.am server-cert-rpk.der server-ecc-cert-rpk.der
rsapss ca-3072-rsapss-key.der ca-3072-rsapss-key.pem ca-3072-rsapss-priv.der ca-3072-rsapss-priv.pem ca-3072-rsapss.der ca-3072-rsapss.pem ca-rsapss-key.der ca-rsapss-key.pem ca-rsapss-priv.der ca-rsapss-priv.pem ca-rsapss.der ca-rsapss.pem client-3072-rsapss-key.der client-3072-rsapss-key.pem client-3072-rsapss-priv.der client-3072-rsapss-priv.pem client-3072-rsapss.der client-3072-rsapss.pem client-rsapss-key.der client-rsapss-key.pem client-rsapss-priv.der client-rsapss-priv.pem client-rsapss.der client-rsapss.pem gen-rsapss-keys.sh include.am renew-rsapss-certs.sh root-3072-rsapss-key.der root-3072-rsapss-key.pem root-3072-rsapss-priv.der root-3072-rsapss-priv.pem root-3072-rsapss.der root-3072-rsapss.pem root-rsapss-key.der root-rsapss-key.pem root-rsapss-priv.der root-rsapss-priv.pem root-rsapss.der root-rsapss.pem server-3072-rsapss-cert.pem server-3072-rsapss-key.der server-3072-rsapss-key.pem server-3072-rsapss-priv.der server-3072-rsapss-priv.pem server-3072-rsapss.der server-3072-rsapss.pem server-mix-rsapss-cert.pem server-rsapss-cert.pem server-rsapss-key.der server-rsapss-key.pem server-rsapss-priv.der server-rsapss-priv.pem server-rsapss.der server-rsapss.pem
sia timestamping-sia-cert.pem
slhdsa bench_slhdsa_sha2_128f_key.der bench_slhdsa_sha2_128s_key.der bench_slhdsa_sha2_192f_key.der bench_slhdsa_sha2_192s_key.der bench_slhdsa_sha2_256f_key.der bench_slhdsa_sha2_256s_key.der bench_slhdsa_shake128f_key.der bench_slhdsa_shake128s_key.der bench_slhdsa_shake192f_key.der bench_slhdsa_shake192s_key.der bench_slhdsa_shake256f_key.der bench_slhdsa_shake256s_key.der client-mldsa44-priv.pem client-mldsa44-sha2.der client-mldsa44-sha2.pem client-mldsa44-shake.der client-mldsa44-shake.pem gen-slhdsa-mldsa-certs.sh include.am root-slhdsa-sha2-128s-priv.der root-slhdsa-sha2-128s-priv.pem root-slhdsa-sha2-128s.der root-slhdsa-sha2-128s.pem root-slhdsa-shake-128s-priv.der root-slhdsa-shake-128s-priv.pem root-slhdsa-shake-128s.der root-slhdsa-shake-128s.pem server-mldsa44-priv.pem server-mldsa44-sha2.der server-mldsa44-sha2.pem server-mldsa44-shake.der server-mldsa44-shake.pem
sm2 ca-sm2-key.der ca-sm2-key.pem ca-sm2-priv.der ca-sm2-priv.pem ca-sm2.der ca-sm2.pem client-sm2-key.der client-sm2-key.pem client-sm2-priv.der client-sm2-priv.pem client-sm2.der client-sm2.pem fix_sm2_spki.py gen-sm2-certs.sh gen-sm2-keys.sh include.am root-sm2-key.der root-sm2-key.pem root-sm2-priv.der root-sm2-priv.pem root-sm2.der root-sm2.pem self-sm2-cert.pem self-sm2-key.pem self-sm2-priv.pem server-sm2-cert.der server-sm2-cert.pem server-sm2-key.der server-sm2-key.pem server-sm2-priv.der server-sm2-priv.pem server-sm2.der server-sm2.pem
statickeys dh-ffdhe2048-params.pem dh-ffdhe2048-pub.der dh-ffdhe2048-pub.pem dh-ffdhe2048.der dh-ffdhe2048.pem ecc-secp256r1.der ecc-secp256r1.pem gen-static.sh include.am x25519-pub.der x25519-pub.pem x25519.der x25519.pem
test
expired expired-ca.der expired-ca.pem expired-cert.der expired-cert.pem
catalog.txt cert-bad-neg-int.der cert-bad-oid.der cert-bad-utf8.der cert-ext-ia.cfg cert-ext-ia.der cert-ext-ia.pem cert-ext-joi.cfg cert-ext-joi.der cert-ext-joi.pem cert-ext-mnc.der cert-ext-multiple.cfg cert-ext-multiple.der cert-ext-multiple.pem cert-ext-nc-combined.der cert-ext-nc-combined.pem cert-ext-nc.cfg cert-ext-nc.der cert-ext-nc.pem cert-ext-ncdns.der cert-ext-ncdns.pem cert-ext-ncip.der cert-ext-ncip.pem cert-ext-ncmixed.der cert-ext-ncmulti.der cert-ext-ncmulti.pem cert-ext-ncrid.der cert-ext-ncrid.pem cert-ext-nct.cfg cert-ext-nct.der cert-ext-nct.pem cert-ext-ndir-exc.cfg cert-ext-ndir-exc.der cert-ext-ndir-exc.pem cert-ext-ndir.cfg cert-ext-ndir.der cert-ext-ndir.pem cert-ext-ns.der cert-over-max-altnames.cfg cert-over-max-altnames.der cert-over-max-altnames.pem cert-over-max-nc.cfg cert-over-max-nc.der cert-over-max-nc.pem client-ecc-cert-ski.hex cn-ip-literal.der cn-ip-wildcard.der crit-cert.pem crit-key.pem dh1024.der dh1024.pem dh512.der dh512.pem digsigku.pem encrypteddata.msg gen-badsig.sh gen-ext-certs.sh gen-testcerts.sh include.am kari-keyid-cms.msg ktri-keyid-cms.msg ossl-trusted-cert.pem server-badaltname.der server-badaltname.pem server-badaltnull.der server-badaltnull.pem server-badcn.der server-badcn.pem server-badcnnull.der server-badcnnull.pem server-cert-ecc-badsig.der server-cert-ecc-badsig.pem server-cert-rsa-badsig.der server-cert-rsa-badsig.pem server-duplicate-policy.pem server-garbage.der server-garbage.pem server-goodalt.der server-goodalt.pem server-goodaltwild.der server-goodaltwild.pem server-goodcn.der server-goodcn.pem server-goodcnwild.der server-goodcnwild.pem server-localhost.der server-localhost.pem smime-test-canon.p7s smime-test-multipart-badsig.p7s smime-test-multipart.p7s smime-test.p7s
test-pathlen assemble-chains.sh chainA-ICA1-key.pem chainA-ICA1-pathlen0.pem chainA-assembled.pem chainA-entity-key.pem chainA-entity.pem chainB-ICA1-key.pem chainB-ICA1-pathlen0.pem chainB-ICA2-key.pem chainB-ICA2-pathlen1.pem chainB-assembled.pem chainB-entity-key.pem chainB-entity.pem chainC-ICA1-key.pem chainC-ICA1-pathlen1.pem chainC-assembled.pem chainC-entity-key.pem chainC-entity.pem chainD-ICA1-key.pem chainD-ICA1-pathlen127.pem chainD-assembled.pem chainD-entity-key.pem chainD-entity.pem chainE-ICA1-key.pem chainE-ICA1-pathlen128.pem chainE-assembled.pem chainE-entity-key.pem chainE-entity.pem chainF-ICA1-key.pem chainF-ICA1-pathlen1.pem chainF-ICA2-key.pem chainF-ICA2-pathlen0.pem chainF-assembled.pem chainF-entity-key.pem chainF-entity.pem chainG-ICA1-key.pem chainG-ICA1-pathlen0.pem chainG-ICA2-key.pem chainG-ICA2-pathlen1.pem chainG-ICA3-key.pem chainG-ICA3-pathlen99.pem chainG-ICA4-key.pem chainG-ICA4-pathlen5.pem chainG-ICA5-key.pem chainG-ICA5-pathlen20.pem chainG-ICA6-key.pem chainG-ICA6-pathlen10.pem chainG-ICA7-key.pem chainG-ICA7-pathlen100.pem chainG-assembled.pem chainG-entity-key.pem chainG-entity.pem chainH-ICA1-key.pem chainH-ICA1-pathlen0.pem chainH-ICA2-key.pem chainH-ICA2-pathlen2.pem chainH-ICA3-key.pem chainH-ICA3-pathlen2.pem chainH-ICA4-key.pem chainH-ICA4-pathlen2.pem chainH-assembled.pem chainH-entity-key.pem chainH-entity.pem chainI-ICA1-key.pem chainI-ICA1-no_pathlen.pem chainI-ICA2-key.pem chainI-ICA2-no_pathlen.pem chainI-ICA3-key.pem chainI-ICA3-pathlen2.pem chainI-assembled.pem chainI-entity-key.pem chainI-entity.pem chainJ-ICA1-key.pem chainJ-ICA1-no_pathlen.pem chainJ-ICA2-key.pem chainJ-ICA2-no_pathlen.pem chainJ-ICA3-key.pem chainJ-ICA3-no_pathlen.pem chainJ-ICA4-key.pem chainJ-ICA4-pathlen2.pem chainJ-assembled.pem chainJ-entity-key.pem chainJ-entity.pem include.am refreshkeys.sh
test-serial0 ee_normal.pem ee_serial0.pem generate_certs.sh include.am intermediate_serial0.pem root_serial0.pem root_serial0_key.pem selfsigned_nonca_serial0.pem
xmss bc_xmss_chain_ca.der bc_xmss_chain_leaf.der bc_xmss_sha2_10_256_root.der bc_xmss_sha2_16_256_root.der bc_xmssmt_sha2_20_2_256_root.der bc_xmssmt_sha2_20_4_256_root.der bc_xmssmt_sha2_40_8_256_root.der include.am
ca-cert-chain.der ca-cert.der ca-cert.pem ca-ecc-cert.der ca-ecc-cert.pem ca-ecc-key.der ca-ecc-key.pem ca-ecc384-cert.der ca-ecc384-cert.pem ca-ecc384-key.der ca-ecc384-key.pem ca-key-pkcs8-attribute.der ca-key.der ca-key.pem check_dates.sh client-absolute-urn.pem client-ca-cert.der client-ca-cert.pem client-ca.pem client-cert-ext.der client-cert-ext.pem client-cert.der client-cert.pem client-crl-dist.der client-crl-dist.pem client-ecc-ca-cert.der client-ecc-ca-cert.pem client-ecc-cert.der client-ecc-cert.pem client-ecc384-cert.der client-ecc384-cert.pem client-ecc384-key.der client-ecc384-key.pem client-key.der client-key.pem client-keyEnc.pem client-keyPub.der client-keyPub.pem client-relative-uri.pem client-uri-cert.pem csr.attr.der csr.dsa.der csr.dsa.pem csr.ext.der csr.signed.der dh-priv-2048.der dh-priv-2048.pem dh-pub-2048.der dh-pub-2048.pem dh-pubkey-2048.der dh2048.der dh2048.pem dh3072.der dh3072.pem dh4096.der dh4096.pem dsa-pubkey-2048.der dsa2048.der dsa2048.pem dsa3072.der dsaparams.der dsaparams.pem ecc-client-key.der ecc-client-key.pem ecc-client-keyPub.der ecc-client-keyPub.pem ecc-key-comp.pem ecc-keyPkcs8.der ecc-keyPkcs8.pem ecc-keyPkcs8Enc.der ecc-keyPkcs8Enc.pem ecc-keyPub.der ecc-keyPub.pem ecc-params.der ecc-params.pem ecc-privOnlyCert.pem ecc-privOnlyKey.pem ecc-privkey.der ecc-privkey.pem ecc-privkeyPkcs8.der ecc-privkeyPkcs8.pem ecc-rsa-server.p12 empty-issuer-cert.pem entity-no-ca-bool-cert.pem entity-no-ca-bool-key.pem fpki-cert.der fpki-certpol-cert.der gen_revoked.sh include.am renewcerts.sh rid-cert.der rsa-pub-2048.pem rsa2048.der rsa3072.der server-cert-chain.der server-cert.der server-cert.pem server-ecc-comp.der server-ecc-comp.pem server-ecc-rsa.der server-ecc-rsa.pem server-ecc-self.der server-ecc-self.pem server-ecc.der server-ecc.pem server-ecc384-cert.der server-ecc384-cert.pem server-ecc384-key.der server-ecc384-key.pem server-key.der server-key.pem server-keyEnc.pem server-keyPkcs8.der server-keyPkcs8.pem server-keyPkcs8Enc.der server-keyPkcs8Enc.pem server-keyPkcs8Enc12.pem server-keyPkcs8Enc2.pem server-keyPub.der server-keyPub.pem server-revoked-cert.pem server-revoked-key.pem taoCert.txt test-ber-exp02-05-2022.p7b test-degenerate.p7b test-multiple-recipients.p7b test-servercert-rc2.p12 test-servercert.p12 test-stream-dec.p7b test-stream-sign.p7b wolfssl-website-ca.pem x942dh2048.der x942dh2048.pem
cmake
consumer CMakeLists.txt README.md main.c
modules FindARIA.cmake FindOQS.cmake
Config.cmake.in README.md config.in functions.cmake include.am options.h.in wolfssl-config-version.cmake.in wolfssl-targets.cmake.in
debian
source format
changelog.in control.in copyright include.am libwolfssl-dev.install libwolfssl.install rules.in
doc
dox_comments
header_files aes.h arc4.h ascon.h asn.h asn_public.h blake2.h bn.h camellia.h chacha.h chacha20_poly1305.h cmac.h coding.h compress.h cryptocb.h curve25519.h curve448.h des3.h dh.h doxygen_groups.h doxygen_pages.h dsa.h ecc.h eccsi.h ed25519.h ed448.h error-crypt.h evp.h hash.h hmac.h iotsafe.h kdf.h logging.h md2.h md4.h md5.h memory.h ocsp.h pem.h pkcs11.h pkcs7.h poly1305.h psa.h puf.h pwdbased.h quic.h random.h ripemd.h rsa.h sakke.h sha.h sha256.h sha3.h sha512.h signature.h siphash.h srp.h ssl.h tfm.h types.h wc_encrypt.h wc_port.h wc_she.h wc_slhdsa.h wolfio.h
header_files-ja aes.h arc4.h ascon.h asn.h asn_public.h blake2.h bn.h camellia.h chacha.h chacha20_poly1305.h cmac.h coding.h compress.h cryptocb.h curve25519.h curve448.h des3.h dh.h doxygen_groups.h doxygen_pages.h dsa.h ecc.h eccsi.h ed25519.h ed448.h error-crypt.h evp.h hash.h hmac.h iotsafe.h kdf.h logging.h md2.h md4.h md5.h memory.h ocsp.h pem.h pkcs11.h pkcs7.h poly1305.h psa.h pwdbased.h quic.h random.h ripemd.h rsa.h sakke.h sha.h sha256.h sha3.h sha512.h signature.h siphash.h srp.h ssl.h tfm.h types.h wc_encrypt.h wc_port.h wolfio.h
formats
html
html_changes
search search.css search.js
customdoxygen.css doxygen.css menu.js menudata.js tabs.css
Doxyfile footer.html header.html mainpage.dox
pdf Doxyfile header.tex
images wolfssl_logo.png
QUIC.md README.txt README_DOXYGEN check_api.sh generate_documentation.sh include.am
examples
asn1 asn1.c dumpasn1.cfg gen_oid_names.rb include.am oid_names.h
async Makefile README.md async_client.c async_server.c async_tls.c async_tls.h include.am user_settings.h
benchmark include.am tls_bench.c tls_bench.h
client client.c client.h client.sln client.vcproj client.vcxproj include.am
configs README.md include.am user_settings_EBSnet.h user_settings_all.h user_settings_arduino.h user_settings_baremetal.h user_settings_ca.h user_settings_curve25519nonblock.h user_settings_dtls13.h user_settings_eccnonblock.h user_settings_espressif.h user_settings_fipsv2.h user_settings_fipsv5.h user_settings_min_ecc.h user_settings_openssl_compat.h user_settings_pkcs7.h user_settings_platformio.h user_settings_pq.h user_settings_rsa_only.h user_settings_stm32.h user_settings_template.h user_settings_tls12.h user_settings_tls13.h user_settings_wolfboot_keytools.h user_settings_wolfssh.h user_settings_wolftpm.h
crypto_policies
default wolfssl.txt
future wolfssl.txt
legacy wolfssl.txt
echoclient echoclient.c echoclient.h echoclient.sln echoclient.vcproj echoclient.vcxproj include.am quit
echoserver echoserver.c echoserver.h echoserver.sln echoserver.vcproj echoserver.vcxproj include.am
ocsp_responder include.am ocsp_responder.c ocsp_responder.h
pem include.am pem.c
sctp include.am sctp-client-dtls.c sctp-client.c sctp-server-dtls.c sctp-server.c
server include.am server.c server.h server.sln server.vcproj server.vcxproj
README.md include.am
linuxkm
patches
5.10.17 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-5v10v17.patch
5.10.236 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-5v10v236.patch
5.14.0-570.58.1.el9_6 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-5v14-570v58v1-el9_6.patch
5.15 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-5v15.patch
5.17 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-5v17.patch
5.17-ubuntu-jammy-tegra WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-5v17-ubuntu-jammy-tegra.patch
6.1.73 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-6v1v73.patch
6.12 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-6v12.patch
6.15 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-6v15.patch
7.0 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-7v0.patch
regen-patches.sh
Kbuild Makefile README.md get_thread_size.c include.am linuxkm-fips-hash-wrapper.sh linuxkm-fips-hash.c linuxkm_memory.c linuxkm_memory.h linuxkm_wc_port.h lkcapi_aes_glue.c lkcapi_dh_glue.c lkcapi_ecdh_glue.c lkcapi_ecdsa_glue.c lkcapi_glue.c lkcapi_rsa_glue.c lkcapi_sha_glue.c module_exports.c.template module_hooks.c pie_redirect_table.c wolfcrypt.lds x86_vector_register_glue.c
m4 ax_add_am_macro.m4 ax_am_jobserver.m4 ax_am_macros.m4 ax_append_compile_flags.m4 ax_append_flag.m4 ax_append_link_flags.m4 ax_append_to_file.m4 ax_atomic.m4 ax_bsdkm.m4 ax_check_compile_flag.m4 ax_check_link_flag.m4 ax_compiler_version.m4 ax_count_cpus.m4 ax_create_generic_config.m4 ax_debug.m4 ax_file_escapes.m4 ax_harden_compiler_flags.m4 ax_linuxkm.m4 ax_print_to_file.m4 ax_pthread.m4 ax_require_defined.m4 ax_tls.m4 ax_vcs_checkout.m4 hexversion.m4 lib_socket_nsl.m4 visibility.m4
mcapi
wolfcrypt_mcapi.X
nbproject configurations.xml include.am project.xml
Makefile
wolfcrypt_test.X
nbproject configurations.xml include.am project.xml
Makefile
wolfssl.X
nbproject configurations.xml include.am project.xml
Makefile
zlib.X
nbproject configurations.xml include.am project.xml
Makefile
PIC32MZ-serial.h README crypto.c crypto.h include.am mcapi_test.c user_settings.h
mplabx
wolfcrypt_benchmark.X
nbproject configurations.xml include.am project.xml
Makefile
wolfcrypt_test.X
nbproject configurations.xml include.am project.xml
Makefile
wolfssl.X
nbproject configurations.xml include.am project.xml
Makefile
PIC32MZ-serial.h README benchmark_main.c include.am test_main.c user_settings.h
mqx
util_lib
Sources include.am util.c util.h
wolfcrypt_benchmark
Debugger K70FN1M0.mem init_kinetis.tcl mass_erase_kinetis.tcl
Sources include.am main.c main.h
ReferencedRSESystems.xml wolfcrypt_benchmark_twrk70f120m_Int_Flash_DDRData_Debug_PnE_U-MultiLink.launch wolfcrypt_benchmark_twrk70f120m_Int_Flash_DDRData_Release_PnE_U-MultiLink.launch wolfcrypt_benchmark_twrk70f120m_Int_Flash_SramData_Debug_JTrace.jlink wolfcrypt_benchmark_twrk70f120m_Int_Flash_SramData_Debug_JTrace.launch wolfcrypt_benchmark_twrk70f120m_Int_Flash_SramData_Debug_PnE_U-MultiLink.launch wolfcrypt_benchmark_twrk70f120m_Int_Flash_SramData_Release_PnE_U-MultiLink.launch
wolfcrypt_test
Debugger K70FN1M0.mem init_kinetis.tcl mass_erase_kinetis.tcl
Sources include.am main.c main.h
ReferencedRSESystems.xml wolfcrypt_test_twrk70f120m_Int_Flash_DDRData_Debug_PnE_U-MultiLink.launch wolfcrypt_test_twrk70f120m_Int_Flash_DDRData_Release_PnE_U-MultiLink.launch wolfcrypt_test_twrk70f120m_Int_Flash_SramData_Debug_JTrace.jlink wolfcrypt_test_twrk70f120m_Int_Flash_SramData_Debug_JTrace.launch wolfcrypt_test_twrk70f120m_Int_Flash_SramData_Debug_PnE_U-MultiLink.launch wolfcrypt_test_twrk70f120m_Int_Flash_SramData_Release_PnE_U-MultiLink.launch
wolfssl include.am
wolfssl_client
Debugger K70FN1M0.mem init_kinetis.tcl mass_erase_kinetis.tcl
Sources include.am main.c main.h
ReferencedRSESystems.xml wolfssl_client_twrk70f120m_Int_Flash_DDRData_Debug_PnE_U-MultiLink.launch wolfssl_client_twrk70f120m_Int_Flash_DDRData_Release_PnE_U-MultiLink.launch wolfssl_client_twrk70f120m_Int_Flash_SramData_Debug_JTrace.jlink wolfssl_client_twrk70f120m_Int_Flash_SramData_Debug_JTrace.launch wolfssl_client_twrk70f120m_Int_Flash_SramData_Debug_PnE_U-MultiLink.launch wolfssl_client_twrk70f120m_Int_Flash_SramData_Release_PnE_U-MultiLink.launch
README
rpm include.am spec.in
scripts
bench bench_functions.sh
aria-cmake-build-test.sh asn1_oid_sum.pl benchmark.test benchmark_compare.sh cleanup_testfiles.sh crl-gen-openssl.test crl-revoked.test dertoc.pl dtls.test dtlscid.test external.test google.test include.am makedistsmall.sh memtest.sh ocsp-responder-openssl-interop.test ocsp-stapling-with-ca-as-responder.test ocsp-stapling-with-wolfssl-responder.test ocsp-stapling.test ocsp-stapling2.test ocsp-stapling_tls13multi.test ocsp.test openssl.test openssl_srtp.test pem.test ping.test pkcallbacks.test psk.test resume.test rsapss.test sniffer-gen.sh sniffer-ipv6.pcap sniffer-static-rsa.pcap sniffer-testsuite.test sniffer-tls12-keylog.out sniffer-tls12-keylog.pcap sniffer-tls12-keylog.sslkeylog sniffer-tls13-dh-resume.pcap sniffer-tls13-dh.pcap sniffer-tls13-ecc-resume.pcap sniffer-tls13-ecc.pcap sniffer-tls13-hrr.pcap sniffer-tls13-keylog.out sniffer-tls13-keylog.pcap sniffer-tls13-keylog.sslkeylog sniffer-tls13-x25519-resume.pcap sniffer-tls13-x25519.pcap stm32l4-v4_0_1_build.sh tls13.test trusted_peer.test unit.test.in user_settings_asm.sh
src bio.c conf.c crl.c dtls.c dtls13.c include.am internal.c keys.c ocsp.c pk.c pk_ec.c pk_rsa.c quic.c sniffer.c ssl.c ssl_api_cert.c ssl_api_crl_ocsp.c ssl_api_pk.c ssl_asn1.c ssl_bn.c ssl_certman.c ssl_crypto.c ssl_ech.c ssl_load.c ssl_misc.c ssl_p7p12.c ssl_sess.c ssl_sk.c tls.c tls13.c wolfio.c x509.c x509_str.c
sslSniffer
sslSnifferTest README_WIN.md include.am snifftest.c sslSniffTest.vcproj sslSniffTest.vcxproj
README.md sslSniffer.vcproj sslSniffer.vcxproj
support gen-debug-trace-error-codes.sh include.am wolfssl.pc.in
tests
api api.h api_decl.h create_ocsp_test_blobs.py include.am test_aes.c test_aes.h test_arc4.c test_arc4.h test_ascon.c test_ascon.h test_ascon_kats.h test_asn.c test_asn.h test_blake2.c test_blake2.h test_camellia.c test_camellia.h test_certman.c test_certman.h test_chacha.c test_chacha.h test_chacha20_poly1305.c test_chacha20_poly1305.h test_cmac.c test_cmac.h test_curve25519.c test_curve25519.h test_curve448.c test_curve448.h test_des3.c test_des3.h test_dh.c test_dh.h test_digest.h test_dsa.c test_dsa.h test_dtls.c test_dtls.h test_ecc.c test_ecc.h test_ed25519.c test_ed25519.h test_ed448.c test_ed448.h test_evp.c test_evp.h test_evp_cipher.c test_evp_cipher.h test_evp_digest.c test_evp_digest.h test_evp_pkey.c test_evp_pkey.h test_hash.c test_hash.h test_hmac.c test_hmac.h test_md2.c test_md2.h test_md4.c test_md4.h test_md5.c test_md5.h test_mldsa.c test_mldsa.h test_mlkem.c test_mlkem.h test_ocsp.c test_ocsp.h test_ocsp_test_blobs.h test_ossl_asn1.c test_ossl_asn1.h test_ossl_bio.c test_ossl_bio.h test_ossl_bn.c test_ossl_bn.h test_ossl_cipher.c test_ossl_cipher.h test_ossl_dgst.c test_ossl_dgst.h test_ossl_dh.c test_ossl_dh.h test_ossl_dsa.c test_ossl_dsa.h test_ossl_ec.c test_ossl_ec.h test_ossl_ecx.c test_ossl_ecx.h test_ossl_mac.c test_ossl_mac.h test_ossl_obj.c test_ossl_obj.h test_ossl_p7p12.c test_ossl_p7p12.h test_ossl_pem.c test_ossl_pem.h test_ossl_rand.c test_ossl_rand.h test_ossl_rsa.c test_ossl_rsa.h test_ossl_sk.c test_ossl_sk.h test_ossl_x509.c test_ossl_x509.h test_ossl_x509_acert.c test_ossl_x509_acert.h test_ossl_x509_crypto.c test_ossl_x509_crypto.h test_ossl_x509_ext.c test_ossl_x509_ext.h test_ossl_x509_info.c test_ossl_x509_info.h test_ossl_x509_io.c test_ossl_x509_io.h test_ossl_x509_lu.c test_ossl_x509_lu.h test_ossl_x509_name.c test_ossl_x509_name.h test_ossl_x509_pk.c test_ossl_x509_pk.h test_ossl_x509_str.c test_ossl_x509_str.h test_ossl_x509_vp.c test_ossl_x509_vp.h test_pkcs12.c test_pkcs12.h test_pkcs7.c test_pkcs7.h test_poly1305.c test_poly1305.h test_random.c test_random.h test_rc2.c test_rc2.h test_ripemd.c test_ripemd.h test_rsa.c test_rsa.h test_sha.c test_sha.h test_sha256.c test_sha256.h test_sha3.c test_sha3.h test_sha512.c test_sha512.h test_she.c test_she.h test_signature.c test_signature.h test_slhdsa.c test_slhdsa.h test_sm2.c test_sm2.h test_sm3.c test_sm3.h test_sm4.c test_sm4.h test_tls.c test_tls.h test_tls13.c test_tls13.h test_tls_ext.c test_tls_ext.h test_wc_encrypt.c test_wc_encrypt.h test_wolfmath.c test_wolfmath.h test_x509.c test_x509.h
emnet
IP IP.h
Makefile emnet_nonblock_test.c emnet_shim.c
freertos-mem-track-repro FreeRTOS.h repro.c run.sh semphr.h task.h user_settings.h
swdev .gitignore Makefile README.md swdev.c swdev.h swdev_loader.c swdev_loader.h user_settings.h
CONF_FILES_README.md NCONF_test.cnf README TXT_DB.txt api.c include.am quic.c srp.c suites.c test-altchains.conf test-chains.conf test-dhprime.conf test-dtls-downgrade.conf test-dtls-fails-cipher.conf test-dtls-fails.conf test-dtls-group.conf test-dtls-mtu.conf test-dtls-reneg-client.conf test-dtls-reneg-server.conf test-dtls-resume.conf test-dtls-sha2.conf test-dtls-srtp-fails.conf test-dtls-srtp.conf test-dtls.conf test-dtls13-cid.conf test-dtls13-downgrade-fails.conf test-dtls13-downgrade.conf test-dtls13-pq-hybrid-extra-frag.conf test-dtls13-pq-hybrid-extra.conf test-dtls13-pq-hybrid-frag.conf test-dtls13-pq-standalone-frag.conf test-dtls13-pq-standalone.conf test-dtls13-psk.conf test-dtls13.conf test-ecc-cust-curves.conf test-ed25519.conf test-ed448.conf test-enckeys.conf test-fails.conf test-maxfrag-dtls.conf test-maxfrag.conf test-p521.conf test-psk-no-id-sha2.conf test-psk-no-id.conf test-psk.conf test-rsapss.conf test-sctp-sha2.conf test-sctp.conf test-sha2.conf test-sig.conf test-sm2.conf test-tls-downgrade.conf test-tls13-down.conf test-tls13-ecc.conf test-tls13-pq-hybrid-extra.conf test-tls13-pq-hybrid.conf test-tls13-pq-standalone.conf test-tls13-psk-certs.conf test-tls13-psk.conf test-tls13-slhdsa-fail.conf test-tls13-slhdsa-sha2.conf test-tls13-slhdsa-shake.conf test-tls13.conf test-trustpeer.conf test.conf unit.c unit.h utils.c utils.h w64wrapper.c
testsuite include.am testsuite.c testsuite.sln testsuite.vcproj testsuite.vcxproj utils.c utils.h
tirtos
packages
ti
net
wolfssl
tests
EK_TM4C1294XL
wolfcrypt
benchmark TM4C1294NC.icf benchmark.cfg main.c package.bld.hide package.xdc
test TM4C1294NC.icf main.c package.bld.hide package.xdc test.cfg
package.bld package.xdc package.xs
.gitignore README include.am products.mak wolfssl.bld wolfssl.mak
wolfcrypt
benchmark README.md benchmark-VS2022.sln benchmark-VS2022.vcxproj benchmark-VS2022.vcxproj.user benchmark.c benchmark.h benchmark.sln benchmark.vcproj benchmark.vcxproj include.am
src
port
Espressif
esp_crt_bundle README.md cacrt_all.pem cacrt_deprecated.pem cacrt_local.pem esp_crt_bundle.c gen_crt_bundle.py pio_install_cryptography.py
README.md esp32_aes.c esp32_mp.c esp32_sha.c esp32_util.c esp_sdk_mem_lib.c esp_sdk_time_lib.c esp_sdk_wifi_lib.c
Renesas README.md renesas_common.c renesas_fspsm_aes.c renesas_fspsm_rsa.c renesas_fspsm_sha.c renesas_fspsm_util.c renesas_rx64_hw_sha.c renesas_rx64_hw_util.c renesas_tsip_aes.c renesas_tsip_rsa.c renesas_tsip_sha.c renesas_tsip_util.c
af_alg afalg_aes.c afalg_hash.c wc_afalg.c
aria aria-crypt.c aria-cryptocb.c
arm armv8-32-aes-asm.S armv8-32-aes-asm_c.c armv8-32-chacha-asm.S armv8-32-chacha-asm_c.c armv8-32-curve25519.S armv8-32-curve25519_c.c armv8-32-mlkem-asm.S armv8-32-mlkem-asm_c.c armv8-32-poly1305-asm.S armv8-32-poly1305-asm_c.c armv8-32-sha256-asm.S armv8-32-sha256-asm_c.c armv8-32-sha3-asm.S armv8-32-sha3-asm_c.c armv8-32-sha512-asm.S armv8-32-sha512-asm_c.c armv8-aes-asm.S armv8-aes-asm_c.c armv8-aes.c armv8-chacha-asm.S armv8-chacha-asm_c.c armv8-curve25519.S armv8-curve25519_c.c armv8-mlkem-asm.S armv8-mlkem-asm_c.c armv8-poly1305-asm.S armv8-poly1305-asm_c.c armv8-sha256-asm.S armv8-sha256-asm_c.c armv8-sha256.c armv8-sha3-asm.S armv8-sha3-asm_c.c armv8-sha512-asm.S armv8-sha512-asm_c.c armv8-sha512.c cryptoCell.c cryptoCellHash.c thumb2-aes-asm.S thumb2-aes-asm_c.c thumb2-chacha-asm.S thumb2-chacha-asm_c.c thumb2-curve25519.S thumb2-curve25519_c.c thumb2-mlkem-asm.S thumb2-mlkem-asm_c.c thumb2-poly1305-asm.S thumb2-poly1305-asm_c.c thumb2-sha256-asm.S thumb2-sha256-asm_c.c thumb2-sha3-asm.S thumb2-sha3-asm_c.c thumb2-sha512-asm.S thumb2-sha512-asm_c.c
atmel README.md atmel.c
autosar README.md cryif.c crypto.c csm.c include.am test.c
caam README.md caam_aes.c caam_doc.pdf caam_driver.c caam_error.c caam_integrity.c caam_qnx.c caam_sha.c wolfcaam_aes.c wolfcaam_cmac.c wolfcaam_ecdsa.c wolfcaam_fsl_nxp.c wolfcaam_hash.c wolfcaam_hmac.c wolfcaam_init.c wolfcaam_qnx.c wolfcaam_rsa.c wolfcaam_seco.c wolfcaam_x25519.c
cavium README.md README_Octeon.md cavium_nitrox.c cavium_octeon_sync.c
cuda README.md aes-cuda.cu
cypress README.md psoc6_crypto.c
devcrypto README.md devcrypto_aes.c devcrypto_ecdsa.c devcrypto_hash.c devcrypto_hmac.c devcrypto_rsa.c devcrypto_x25519.c wc_devcrypto.c
intel README.md quickassist.c quickassist_mem.c quickassist_sync.c
iotsafe iotsafe.c
kcapi README.md kcapi_aes.c kcapi_dh.c kcapi_ecc.c kcapi_hash.c kcapi_hmac.c kcapi_rsa.c
liboqs liboqs.c
maxim README.md max3266x.c maxq10xx.c
mynewt mynewt_port.c
nxp README.md README_SE050.md casper_port.c dcp_port.c hashcrypt_port.c ksdk_port.c se050_port.c
pic32 pic32mz-crypt.c
ppc32 ppc32-sha256-asm.S ppc32-sha256-asm_c.c ppc32-sha256-asm_cr.c
psa README.md psa.c psa_aes.c psa_hash.c psa_pkcbs.c
riscv riscv-64-aes.c riscv-64-chacha.c riscv-64-poly1305.c riscv-64-sha256.c riscv-64-sha3.c riscv-64-sha512.c
rpi_pico README.md pico.c
silabs README.md silabs_aes.c silabs_ecc.c silabs_hash.c silabs_random.c
st README.md STM32MP13.md STM32MP25.md stm32.c stsafe.c
ti ti-aes.c ti-ccm.c ti-des3.c ti-hash.c
tropicsquare README.md tropic01.c
xilinx xil-aesgcm.c xil-sha3.c xil-versal-glue.c xil-versal-trng.c
nrf51.c
ASN_TEMPLATE.md aes.c aes_asm.S aes_asm.asm aes_gcm_asm.S aes_gcm_asm.asm aes_gcm_x86_asm.S aes_xts_asm.S aes_xts_asm.asm arc4.c ascon.c asm.c asn.c asn_orig.c async.c blake2b.c blake2s.c camellia.c chacha.c chacha20_poly1305.c chacha_asm.S chacha_asm.asm cmac.c coding.c compress.c cpuid.c cryptocb.c curve25519.c curve448.c des3.c dh.c dilithium.c dsa.c ecc.c ecc_fp.c eccsi.c ed25519.c ed448.c error.c evp.c evp_pk.c falcon.c fe_448.c fe_low_mem.c fe_operations.c fe_x25519_128.h fe_x25519_asm.S fp_mont_small.i fp_mul_comba_12.i fp_mul_comba_17.i fp_mul_comba_20.i fp_mul_comba_24.i fp_mul_comba_28.i fp_mul_comba_3.i fp_mul_comba_32.i fp_mul_comba_4.i fp_mul_comba_48.i fp_mul_comba_6.i fp_mul_comba_64.i fp_mul_comba_7.i fp_mul_comba_8.i fp_mul_comba_9.i fp_mul_comba_small_set.i fp_sqr_comba_12.i fp_sqr_comba_17.i fp_sqr_comba_20.i fp_sqr_comba_24.i fp_sqr_comba_28.i fp_sqr_comba_3.i fp_sqr_comba_32.i fp_sqr_comba_4.i fp_sqr_comba_48.i fp_sqr_comba_6.i fp_sqr_comba_64.i fp_sqr_comba_7.i fp_sqr_comba_8.i fp_sqr_comba_9.i fp_sqr_comba_small_set.i ge_448.c ge_low_mem.c ge_operations.c hash.c hmac.c hpke.c include.am integer.c kdf.c logging.c md2.c md4.c md5.c memory.c misc.c pkcs12.c pkcs7.c poly1305.c poly1305_asm.S poly1305_asm.asm puf.c pwdbased.c random.c rc2.c ripemd.c rng_bank.c rsa.c sakke.c sha.c sha256.c sha256_asm.S sha3.c sha3_asm.S sha512.c sha512_asm.S signature.c siphash.c sm2.c sm3.c sm3_asm.S sm4.c sp_arm32.c sp_arm64.c sp_armthumb.c sp_c32.c sp_c64.c sp_cortexm.c sp_dsp32.c sp_int.c sp_sm2_arm32.c sp_sm2_arm64.c sp_sm2_armthumb.c sp_sm2_c32.c sp_sm2_c64.c sp_sm2_cortexm.c sp_sm2_x86_64.c sp_sm2_x86_64_asm.S sp_x86_64.c sp_x86_64_asm.S sp_x86_64_asm.asm srp.c tfm.c wc_dsp.c wc_encrypt.c wc_lms.c wc_lms_impl.c wc_mldsa_asm.S wc_mlkem.c wc_mlkem_asm.S wc_mlkem_poly.c wc_pkcs11.c wc_port.c wc_she.c wc_slhdsa.c wc_xmss.c wc_xmss_impl.c wolfentropy.c wolfevent.c wolfmath.c
test README.md include.am test-VS2022.sln test-VS2022.vcxproj test-VS2022.vcxproj.user test.c test.h test.sln test.vcproj test_paths.h.in
wolfssl
openssl aes.h asn1.h asn1t.h bio.h bn.h buffer.h camellia.h cmac.h cms.h compat_types.h conf.h crypto.h des.h dh.h dsa.h ec.h ec25519.h ec448.h ecdh.h ecdsa.h ed25519.h ed448.h engine.h err.h evp.h fips_rand.h hmac.h include.am kdf.h lhash.h md4.h md5.h modes.h obj_mac.h objects.h ocsp.h opensslconf.h opensslv.h ossl_typ.h pem.h pkcs12.h pkcs7.h rand.h rc4.h ripemd.h rsa.h safestack.h sha.h sha3.h srp.h ssl.h ssl23.h stack.h tls1.h txt_db.h ui.h x509.h x509_vfy.h x509v3.h
wolfcrypt
port
Espressif esp-sdk-lib.h esp32-crypt.h esp_crt_bundle.h
Renesas renesas-fspsm-crypt.h renesas-fspsm-types.h renesas-rx64-hw-crypt.h renesas-tsip-crypt.h renesas_cmn.h renesas_fspsm_internal.h renesas_sync.h renesas_tsip_internal.h renesas_tsip_types.h
af_alg afalg_hash.h wc_afalg.h
aria aria-crypt.h aria-cryptocb.h
arm cryptoCell.h
atmel atmel.h
autosar CryIf.h Crypto.h Csm.h StandardTypes.h
caam caam_driver.h caam_error.h caam_qnx.h wolfcaam.h wolfcaam_aes.h wolfcaam_cmac.h wolfcaam_ecdsa.h wolfcaam_fsl_nxp.h wolfcaam_hash.h wolfcaam_qnx.h wolfcaam_rsa.h wolfcaam_seco.h wolfcaam_sha.h wolfcaam_x25519.h
cavium cavium_nitrox.h cavium_octeon_sync.h
cypress psoc6_crypto.h
devcrypto wc_devcrypto.h
intel quickassist.h quickassist_mem.h quickassist_sync.h
iotsafe iotsafe.h
kcapi kcapi_dh.h kcapi_ecc.h kcapi_hash.h kcapi_hmac.h kcapi_rsa.h wc_kcapi.h
liboqs liboqs.h
maxim max3266x-cryptocb.h max3266x.h maxq10xx.h
nxp casper_port.h dcp_port.h hashcrypt_port.h ksdk_port.h se050_port.h
pic32 pic32mz-crypt.h
psa psa.h
riscv riscv-64-asm.h
rpi_pico pico.h
silabs silabs_aes.h silabs_ecc.h silabs_hash.h silabs_random.h
st stm32.h stsafe.h
ti ti-ccm.h ti-hash.h
tropicsquare tropic01.h
xilinx xil-sha3.h xil-versal-glue.h xil-versal-trng.h
nrf51.h
aes.h arc4.h ascon.h asn.h asn_public.h async.h blake2-impl.h blake2-int.h blake2.h camellia.h chacha.h chacha20_poly1305.h cmac.h coding.h compress.h cpuid.h cryptocb.h curve25519.h curve448.h des3.h dh.h dilithium.h dsa.h ecc.h eccsi.h ed25519.h ed448.h error-crypt.h falcon.h fe_448.h fe_operations.h fips_test.h ge_448.h ge_operations.h hash.h hmac.h hpke.h include.am integer.h kdf.h libwolfssl_sources.h libwolfssl_sources_asm.h logging.h md2.h md4.h md5.h mem_track.h memory.h misc.h mpi_class.h mpi_superclass.h oid_sum.h pkcs11.h pkcs12.h pkcs7.h poly1305.h puf.h pwdbased.h random.h rc2.h ripemd.h rng_bank.h rsa.h sakke.h selftest.h settings.h sha.h sha256.h sha3.h sha512.h signature.h siphash.h sm2.h sm3.h sm4.h sp.h sp_int.h srp.h tfm.h types.h visibility.h wc_encrypt.h wc_lms.h wc_mlkem.h wc_pkcs11.h wc_port.h wc_she.h wc_slhdsa.h wc_xmss.h wolfentropy.h wolfevent.h wolfmath.h
callbacks.h certs_test.h certs_test_sm.h crl.h error-ssl.h include.am internal.h ocsp.h options.h.in quic.h sniffer.h sniffer_error.h sniffer_error.rc ssl.h test.h version.h version.h.in wolfio.h
wrapper
Ada
examples
src aes_verify_main.adb rsa_verify_main.adb sha256_main.adb spark_sockets.adb spark_sockets.ads spark_terminal.adb spark_terminal.ads tls_client.adb tls_client.ads tls_client_main.adb tls_server.adb tls_server.ads tls_server_main.adb
.gitignore alire.toml examples.gpr
tests
src
support test_support.adb test_support.ads tests_root_suite.adb tests_root_suite.ads
aes_bindings_tests.adb aes_bindings_tests.ads rsa_verify_bindings_tests.adb rsa_verify_bindings_tests.ads sha256_bindings_tests.adb sha256_bindings_tests.ads tests.adb
.gitignore README.md alire.toml tests.gpr valgrind.supp
.gitignore README.md ada_binding.c alire.toml default.gpr include.am restricted.adc user_settings.h wolfssl-full_runtime.adb wolfssl-full_runtime.ads wolfssl.adb wolfssl.ads wolfssl.gpr
CSharp
wolfCrypt-Test
Properties AssemblyInfo.cs
App.config wolfCrypt-Test.cs wolfCrypt-Test.csproj
wolfSSL-DTLS-PSK-Server
Properties AssemblyInfo.cs
App.config wolfSSL-DTLS-PSK-Server.cs wolfSSL-DTLS-PSK-Server.csproj
wolfSSL-DTLS-Server
Properties AssemblyInfo.cs
App.config wolfSSL-DTLS-Server.cs wolfSSL-DTLS-Server.csproj
wolfSSL-Example-IOCallbacks
Properties AssemblyInfo.cs
App.config wolfSSL-Example-IOCallbacks.cs wolfSSL-Example-IOCallbacks.csproj
wolfSSL-TLS-Client
Properties AssemblyInfo.cs
App.config wolfSSL-TLS-Client.cs wolfSSL-TLS-Client.csproj
wolfSSL-TLS-PSK-Client
Properties AssemblyInfo.cs
App.config wolfSSL-TLS-PSK-Client.cs wolfSSL-TLS-PSK-Client.csproj
wolfSSL-TLS-PSK-Server
Properties AssemblyInfo.cs
App.config wolfSSL-TLS-PSK-Server.cs wolfSSL-TLS-PSK-Server.csproj
wolfSSL-TLS-Server
Properties AssemblyInfo.cs
App.config wolfSSL-TLS-Server.cs wolfSSL-TLS-Server.csproj
wolfSSL-TLS-ServerThreaded
Properties AssemblyInfo.cs
App.config wolfSSL-TLS-ServerThreaded.cs wolfSSL-TLS-ServerThreaded.csproj
wolfSSL_CSharp
Properties AssemblyInfo.cs Resources.Designer.cs Resources.resx
X509.cs wolfCrypt.cs wolfSSL.cs wolfSSL_CSharp.csproj
README.md include.am user_settings.h wolfSSL_CSharp.sln wolfssl.vcxproj
python README.md
rust
wolfssl-wolfcrypt
src aes.rs blake2.rs chacha20_poly1305.rs cmac.rs cmac_mac.rs curve25519.rs dh.rs dilithium.rs ecc.rs ecdsa.rs ed25519.rs ed448.rs fips.rs hkdf.rs hmac.rs hmac_mac.rs kdf.rs lib.rs lms.rs mlkem.rs mlkem_kem.rs pbkdf2_password_hash.rs prf.rs random.rs rsa.rs rsa_pkcs1v15.rs sha.rs sha_digest.rs sys.rs
tests
common mod.rs
test_aes.rs test_blake2.rs test_chacha20_poly1305.rs test_cmac.rs test_cmac_mac.rs test_curve25519.rs test_dh.rs test_dilithium.rs test_ecc.rs test_ecdsa.rs test_ed25519.rs test_ed448.rs test_hkdf.rs test_hmac.rs test_hmac_mac.rs test_kdf.rs test_lms.rs test_mlkem.rs test_mlkem_kem.rs test_pbkdf2_password_hash.rs test_prf.rs test_random.rs test_rsa.rs test_rsa_pkcs1v15.rs test_sha.rs test_sha_digest.rs test_wolfcrypt.rs
CHANGELOG.md Cargo.lock Cargo.toml Makefile README.md build.rs headers.h
Makefile README.md include.am
include.am
zephyr
samples
wolfssl_benchmark
boards native_sim.conf nrf5340dk_nrf5340_cpuapp.conf nrf5340dk_nrf5340_cpuapp_ns.conf
CMakeLists.txt README install_test.sh prj.conf sample.yaml zephyr_legacy.conf zephyr_v4.1.conf
wolfssl_test
boards native_sim.conf nrf5340dk_nrf5340_cpuapp.conf nrf5340dk_nrf5340_cpuapp_ns.conf
CMakeLists.txt README install_test.sh prj-no-malloc.conf prj.conf sample.yaml zephyr_legacy.conf zephyr_v4.1.conf
wolfssl_tls_sock
boards native_sim.conf
src tls_sock.c
CMakeLists.txt README install_sample.sh prj-no-malloc.conf prj.conf sample.yaml zephyr_legacy.conf zephyr_v4.1.conf
wolfssl_tls_thread
boards native_sim.conf nrf5340dk_nrf5340_cpuapp.conf nrf5340dk_nrf5340_cpuapp_ns.conf
src tls_threaded.c
CMakeLists.txt README install_sample.sh prj.conf sample.yaml zephyr_legacy.conf zephyr_v4.1.conf
wolfssl options.h
CMakeLists.txt Kconfig Kconfig.tls-generic README.md include.am module.yml user_settings-no-malloc.h user_settings.h zephyr_init.c
.codespellexcludelines .cyignore .editorconfig .gitignore .wolfssl_known_macro_extras AUTHORS CMakeLists.txt CMakePresets.json CMakeSettings.json COPYING ChangeLog.md INSTALL LICENSING LPCExpresso.cproject LPCExpresso.project Makefile.am README README-async.md README.md SCRIPTS-LIST SECURITY-POLICY.md SECURITY-REPORT-TEMPLATE.md Vagrantfile autogen.sh commit-tests.sh configure.ac fips-check.sh fips-hash.sh gencertbuf.pl input pull_to_vagrant.sh quit resource.h stamp-h.in valgrind-bash.supp valgrind-error.sh wnr-example.conf wolfssl-VS2022.vcxproj wolfssl.rc wolfssl.vcproj wolfssl.vcxproj wolfssl64.sln
.clangd .gitignore DOCS.md Makefile README.md assert.c core.c crypto.c env.c fs.c http.c ini.c json.c log.c luna.h main.c makext.mk path.c process.c request.c sqlite.c stash.c template.c util.c
wolfssl/wolfcrypt/src/port/arm/armv8-32-curve25519.S raw
   1/* armv8-32-curve25519
   2 *
   3 * Copyright (C) 2006-2026 wolfSSL Inc.
   4 *
   5 * This file is part of wolfSSL.
   6 *
   7 * wolfSSL is free software; you can redistribute it and/or modify
   8 * it under the terms of the GNU General Public License as published by
   9 * the Free Software Foundation; either version 3 of the License, or
  10 * (at your option) any later version.
  11 *
  12 * wolfSSL is distributed in the hope that it will be useful,
  13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15 * GNU General Public License for more details.
  16 *
  17 * You should have received a copy of the GNU General Public License
  18 * along with this program; if not, write to the Free Software
  19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
  20 */
  21
  22/* Generated using (from wolfssl):
  23 *   cd ../scripts
  24 *   ruby ./x25519/x25519.rb arm32 \
  25 *       ../wolfssl/wolfcrypt/src/port/arm/armv8-32-curve25519.S
  26 */
  27
  28#include <wolfssl/wolfcrypt/libwolfssl_sources_asm.h>
  29
  30#ifdef WOLFSSL_ARMASM
  31#if !defined(__aarch64__) && !defined(WOLFSSL_ARMASM_THUMB2)
  32#ifndef WOLFSSL_ARMASM_INLINE
  33#if defined(HAVE_CURVE25519) || defined(HAVE_ED25519)
  34#if !defined(CURVE25519_SMALL) || !defined(ED25519_SMALL)
  35
  36	.text
  37	.align	4
  38	.globl	fe_init
  39	.type	fe_init, %function
  40fe_init:
  41	bx	lr
  42	.size	fe_init,.-fe_init
  43	.text
  44	.align	4
  45	.globl	fe_add_sub_op
  46	.type	fe_add_sub_op, %function
  47fe_add_sub_op:
  48	push	{lr}
  49	# Add-Sub
  50#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  51	ldm	r2, {r4, r5}
  52#else
  53	ldrd	r4, r5, [r2]
  54#endif
  55#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  56	ldm	r3, {r6, r7}
  57#else
  58	ldrd	r6, r7, [r3]
  59#endif
  60	#  Add
  61	adds	r8, r4, r6
  62	mov	r12, #0
  63	adcs	r9, r5, r7
  64	adc	r12, r12, #0
  65#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  66	stm	r0, {r8, r9}
  67#else
  68	strd	r8, r9, [r0]
  69#endif
  70	#  Sub
  71	subs	r10, r4, r6
  72	sbcs	r11, r5, r7
  73#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  74	stm	r1, {r10, r11}
  75#else
  76	strd	r10, r11, [r1]
  77#endif
  78#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  79	ldr	r4, [r2, #8]
  80	ldr	r5, [r2, #12]
  81#else
  82	ldrd	r4, r5, [r2, #8]
  83#endif
  84#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  85	ldr	r6, [r3, #8]
  86	ldr	r7, [r3, #12]
  87#else
  88	ldrd	r6, r7, [r3, #8]
  89#endif
  90	#  Sub
  91	sbcs	r10, r4, r6
  92	mov	lr, #0
  93	sbcs	r11, r5, r7
  94	adc	lr, lr, #0
  95#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
  96	str	r10, [r1, #8]
  97	str	r11, [r1, #12]
  98#else
  99	strd	r10, r11, [r1, #8]
 100#endif
 101	#  Add
 102	subs	r12, r12, #1
 103	adcs	r8, r4, r6
 104	adcs	r9, r5, r7
 105#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 106	str	r8, [r0, #8]
 107	str	r9, [r0, #12]
 108#else
 109	strd	r8, r9, [r0, #8]
 110#endif
 111#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 112	ldr	r4, [r2, #16]
 113	ldr	r5, [r2, #20]
 114#else
 115	ldrd	r4, r5, [r2, #16]
 116#endif
 117#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 118	ldr	r6, [r3, #16]
 119	ldr	r7, [r3, #20]
 120#else
 121	ldrd	r6, r7, [r3, #16]
 122#endif
 123	#  Add
 124	adcs	r8, r4, r6
 125	mov	r12, #0
 126	adcs	r9, r5, r7
 127	adc	r12, r12, #0
 128#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 129	str	r8, [r0, #16]
 130	str	r9, [r0, #20]
 131#else
 132	strd	r8, r9, [r0, #16]
 133#endif
 134	#  Sub
 135	subs	lr, lr, #1
 136	sbcs	r10, r4, r6
 137	sbcs	r11, r5, r7
 138#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 139	str	r10, [r1, #16]
 140	str	r11, [r1, #20]
 141#else
 142	strd	r10, r11, [r1, #16]
 143#endif
 144#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 145	ldr	r4, [r2, #24]
 146	ldr	r5, [r2, #28]
 147#else
 148	ldrd	r4, r5, [r2, #24]
 149#endif
 150#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 151	ldr	r6, [r3, #24]
 152	ldr	r7, [r3, #28]
 153#else
 154	ldrd	r6, r7, [r3, #24]
 155#endif
 156	#  Sub
 157	sbcs	r10, r4, r6
 158	sbcs	r11, r5, r7
 159	sbc	lr, lr, lr
 160	#  Add
 161	subs	r12, r12, #1
 162	adcs	r8, r4, r6
 163	mov	r12, #0
 164	adcs	r9, r5, r7
 165	adc	r12, r12, #0
 166	#   Multiply -modulus by overflow
 167	lsl	r3, r12, #1
 168	mov	r12, #19
 169	orr	r3, r3, r9, lsr #31
 170	mul	r12, r3, r12
 171	#   Add -x*modulus (if overflow)
 172#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 173	ldm	r0, {r4, r5}
 174#else
 175	ldrd	r4, r5, [r0]
 176#endif
 177#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 178	ldr	r6, [r0, #8]
 179	ldr	r7, [r0, #12]
 180#else
 181	ldrd	r6, r7, [r0, #8]
 182#endif
 183	adds	r4, r4, r12
 184	adcs	r5, r5, #0
 185	adcs	r6, r6, #0
 186	adcs	r7, r7, #0
 187#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 188	stm	r0, {r4, r5}
 189#else
 190	strd	r4, r5, [r0]
 191#endif
 192#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 193	str	r6, [r0, #8]
 194	str	r7, [r0, #12]
 195#else
 196	strd	r6, r7, [r0, #8]
 197#endif
 198#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 199	ldr	r4, [r0, #16]
 200	ldr	r5, [r0, #20]
 201#else
 202	ldrd	r4, r5, [r0, #16]
 203#endif
 204	adcs	r4, r4, #0
 205	adcs	r5, r5, #0
 206#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 207	str	r4, [r0, #16]
 208	str	r5, [r0, #20]
 209#else
 210	strd	r4, r5, [r0, #16]
 211#endif
 212#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 213	bic	r9, r9, #0x80000000
 214#else
 215	bfc	r9, #31, #1
 216#endif
 217	adcs	r8, r8, #0
 218	adc	r9, r9, #0
 219#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 220	str	r8, [r0, #24]
 221	str	r9, [r0, #28]
 222#else
 223	strd	r8, r9, [r0, #24]
 224#endif
 225	#   Multiply -modulus by underflow
 226	lsl	r3, lr, #1
 227	mvn	lr, #18
 228	orr	r3, r3, r11, lsr #31
 229	mul	lr, r3, lr
 230	#   Sub -x*modulus (if overflow)
 231	ldm	r1, {r4, r5, r6, r7, r8, r9}
 232	subs	r4, r4, lr
 233	sbcs	r5, r5, #0
 234	sbcs	r6, r6, #0
 235	sbcs	r7, r7, #0
 236	sbcs	r8, r8, #0
 237	sbcs	r9, r9, #0
 238#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 239	bic	r11, r11, #0x80000000
 240#else
 241	bfc	r11, #31, #1
 242#endif
 243	sbcs	r10, r10, #0
 244	sbc	r11, r11, #0
 245	stm	r1, {r4, r5, r6, r7, r8, r9, r10, r11}
 246	# Done Add-Sub
 247	pop	{pc}
 248	.size	fe_add_sub_op,.-fe_add_sub_op
 249	.text
 250	.align	4
 251	.globl	fe_sub_op
 252	.type	fe_sub_op, %function
 253fe_sub_op:
 254	push	{lr}
 255	# Sub
 256	ldm	r2!, {r6, r7, r8, r9, r10, r11, r12, lr}
 257	ldm	r1!, {r2, r3, r4, r5}
 258	subs	r6, r2, r6
 259	sbcs	r7, r3, r7
 260	sbcs	r8, r4, r8
 261	sbcs	r9, r5, r9
 262	ldm	r1!, {r2, r3, r4, r5}
 263	sbcs	r10, r2, r10
 264	sbcs	r11, r3, r11
 265	sbcs	r12, r4, r12
 266	sbcs	lr, r5, lr
 267	sbc	r3, r3, r3
 268	mvn	r2, #18
 269	lsl	r3, r3, #1
 270	orr	r3, r3, lr, lsr #31
 271	mul	r2, r3, r2
 272	subs	r6, r6, r2
 273	sbcs	r7, r7, #0
 274	sbcs	r8, r8, #0
 275	sbcs	r9, r9, #0
 276	sbcs	r10, r10, #0
 277	sbcs	r11, r11, #0
 278#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 279	bic	lr, lr, #0x80000000
 280#else
 281	bfc	lr, #31, #1
 282#endif
 283	sbcs	r12, r12, #0
 284	sbc	lr, lr, #0
 285	stm	r0, {r6, r7, r8, r9, r10, r11, r12, lr}
 286	# Done Sub
 287	pop	{pc}
 288	.size	fe_sub_op,.-fe_sub_op
 289	.text
 290	.align	4
 291	.globl	fe_sub
 292	.type	fe_sub, %function
 293fe_sub:
 294	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
 295	bl	fe_sub_op
 296	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
 297	.size	fe_sub,.-fe_sub
 298	.text
 299	.align	4
 300	.globl	fe_add_op
 301	.type	fe_add_op, %function
 302fe_add_op:
 303	push	{lr}
 304	# Add
 305	ldm	r2!, {r6, r7, r8, r9, r10, r11, r12, lr}
 306	ldm	r1!, {r2, r3, r4, r5}
 307	adds	r6, r2, r6
 308	adcs	r7, r3, r7
 309	adcs	r8, r4, r8
 310	adcs	r9, r5, r9
 311	ldm	r1!, {r2, r3, r4, r5}
 312	adcs	r10, r2, r10
 313	adcs	r11, r3, r11
 314	adcs	r12, r4, r12
 315	mov	r3, #0
 316	adcs	lr, r5, lr
 317	adc	r3, r3, #0
 318	mov	r2, #19
 319	lsl	r3, r3, #1
 320	orr	r3, r3, lr, lsr #31
 321	mul	r2, r3, r2
 322	adds	r6, r6, r2
 323	adcs	r7, r7, #0
 324	adcs	r8, r8, #0
 325	adcs	r9, r9, #0
 326	adcs	r10, r10, #0
 327	adcs	r11, r11, #0
 328#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 329	bic	lr, lr, #0x80000000
 330#else
 331	bfc	lr, #31, #1
 332#endif
 333	adcs	r12, r12, #0
 334	adc	lr, lr, #0
 335	stm	r0, {r6, r7, r8, r9, r10, r11, r12, lr}
 336	# Done Add
 337	pop	{pc}
 338	.size	fe_add_op,.-fe_add_op
 339	.text
 340	.align	4
 341	.globl	fe_add
 342	.type	fe_add, %function
 343fe_add:
 344	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
 345	bl	fe_add_op
 346	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
 347	.size	fe_add,.-fe_add
 348#if defined(HAVE_ED25519) || defined(WOLFSSL_CURVE25519_USE_ED25519)
 349	.text
 350	.align	4
 351	.globl	fe_frombytes
 352	.type	fe_frombytes, %function
 353fe_frombytes:
 354	push	{r4, r5, r6, r7, r8, r9, lr}
 355	ldr	r2, [r1]
 356	ldr	r3, [r1, #4]
 357	ldr	r4, [r1, #8]
 358	ldr	r5, [r1, #12]
 359	ldr	r6, [r1, #16]
 360	ldr	r7, [r1, #20]
 361	ldr	r8, [r1, #24]
 362	ldr	r9, [r1, #28]
 363#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 364	bic	r9, r9, #0x80000000
 365#else
 366	bfc	r9, #31, #1
 367#endif
 368	str	r2, [r0]
 369	str	r3, [r0, #4]
 370	str	r4, [r0, #8]
 371	str	r5, [r0, #12]
 372	str	r6, [r0, #16]
 373	str	r7, [r0, #20]
 374	str	r8, [r0, #24]
 375	str	r9, [r0, #28]
 376	pop	{r4, r5, r6, r7, r8, r9, pc}
 377	.size	fe_frombytes,.-fe_frombytes
 378	.text
 379	.align	4
 380	.globl	fe_tobytes
 381	.type	fe_tobytes, %function
 382fe_tobytes:
 383	push	{r4, r5, r6, r7, r8, r9, lr}
 384	ldm	r1, {r2, r3, r4, r5, r6, r7, r8, r9}
 385	adds	r12, r2, #19
 386	adcs	r12, r3, #0
 387	adcs	r12, r4, #0
 388	adcs	r12, r5, #0
 389	adcs	r12, r6, #0
 390	adcs	r12, r7, #0
 391	adcs	r12, r8, #0
 392	adc	r12, r9, #0
 393	asr	r12, r12, #31
 394	and	r12, r12, #19
 395	adds	r2, r2, r12
 396	adcs	r3, r3, #0
 397	adcs	r4, r4, #0
 398	adcs	r5, r5, #0
 399	adcs	r6, r6, #0
 400	adcs	r7, r7, #0
 401	adcs	r8, r8, #0
 402	adc	r9, r9, #0
 403#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 404	bic	r9, r9, #0x80000000
 405#else
 406	bfc	r9, #31, #1
 407#endif
 408	str	r2, [r0]
 409	str	r3, [r0, #4]
 410	str	r4, [r0, #8]
 411	str	r5, [r0, #12]
 412	str	r6, [r0, #16]
 413	str	r7, [r0, #20]
 414	str	r8, [r0, #24]
 415	str	r9, [r0, #28]
 416	pop	{r4, r5, r6, r7, r8, r9, pc}
 417	.size	fe_tobytes,.-fe_tobytes
 418	.text
 419	.align	4
 420	.globl	fe_1
 421	.type	fe_1, %function
 422fe_1:
 423	push	{r4, r5, r6, r7, r8, r9, lr}
 424	# Set one
 425	mov	r2, #1
 426	mov	r3, #0
 427	mov	r4, #0
 428	mov	r5, #0
 429	mov	r6, #0
 430	mov	r7, #0
 431	mov	r8, #0
 432	mov	r9, #0
 433	stm	r0, {r2, r3, r4, r5, r6, r7, r8, r9}
 434	pop	{r4, r5, r6, r7, r8, r9, pc}
 435	.size	fe_1,.-fe_1
 436	.text
 437	.align	4
 438	.globl	fe_0
 439	.type	fe_0, %function
 440fe_0:
 441	push	{r4, r5, r6, r7, r8, r9, lr}
 442	# Set zero
 443	mov	r2, #0
 444	mov	r3, #0
 445	mov	r4, #0
 446	mov	r5, #0
 447	mov	r6, #0
 448	mov	r7, #0
 449	mov	r8, #0
 450	mov	r9, #0
 451	stm	r0, {r2, r3, r4, r5, r6, r7, r8, r9}
 452	pop	{r4, r5, r6, r7, r8, r9, pc}
 453	.size	fe_0,.-fe_0
 454	.text
 455	.align	4
 456	.globl	fe_copy
 457	.type	fe_copy, %function
 458fe_copy:
 459	push	{r4, r5, lr}
 460	# Copy
 461#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 462	ldm	r1, {r2, r3}
 463#else
 464	ldrd	r2, r3, [r1]
 465#endif
 466#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 467	ldr	r4, [r1, #8]
 468	ldr	r5, [r1, #12]
 469#else
 470	ldrd	r4, r5, [r1, #8]
 471#endif
 472#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 473	stm	r0, {r2, r3}
 474#else
 475	strd	r2, r3, [r0]
 476#endif
 477#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 478	str	r4, [r0, #8]
 479	str	r5, [r0, #12]
 480#else
 481	strd	r4, r5, [r0, #8]
 482#endif
 483#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 484	ldr	r2, [r1, #16]
 485	ldr	r3, [r1, #20]
 486#else
 487	ldrd	r2, r3, [r1, #16]
 488#endif
 489#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 490	ldr	r4, [r1, #24]
 491	ldr	r5, [r1, #28]
 492#else
 493	ldrd	r4, r5, [r1, #24]
 494#endif
 495#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 496	str	r2, [r0, #16]
 497	str	r3, [r0, #20]
 498#else
 499	strd	r2, r3, [r0, #16]
 500#endif
 501#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 502	str	r4, [r0, #24]
 503	str	r5, [r0, #28]
 504#else
 505	strd	r4, r5, [r0, #24]
 506#endif
 507	pop	{r4, r5, pc}
 508	.size	fe_copy,.-fe_copy
 509	.text
 510	.align	4
 511	.globl	fe_neg
 512	.type	fe_neg, %function
 513fe_neg:
 514	push	{r4, r5, lr}
 515	mvn	lr, #0
 516	mvn	r12, #18
 517	ldm	r1!, {r2, r3, r4, r5}
 518	subs	r2, r12, r2
 519	sbcs	r3, lr, r3
 520	sbcs	r4, lr, r4
 521	sbcs	r5, lr, r5
 522	stm	r0!, {r2, r3, r4, r5}
 523	mvn	r12, #0x80000000
 524	ldm	r1!, {r2, r3, r4, r5}
 525	sbcs	r2, lr, r2
 526	sbcs	r3, lr, r3
 527	sbcs	r4, lr, r4
 528	sbc	r5, r12, r5
 529	stm	r0!, {r2, r3, r4, r5}
 530	pop	{r4, r5, pc}
 531	.size	fe_neg,.-fe_neg
 532	.text
 533	.align	4
 534	.globl	fe_isnonzero
 535	.type	fe_isnonzero, %function
 536fe_isnonzero:
 537	push	{r4, r5, r6, r7, r8, r9, lr}
 538	ldm	r0, {r2, r3, r4, r5, r6, r7, r8, r9}
 539	adds	r1, r2, #19
 540	adcs	r1, r3, #0
 541	adcs	r1, r4, #0
 542	adcs	r1, r5, #0
 543	adcs	r1, r6, #0
 544	adcs	r1, r7, #0
 545	adcs	r1, r8, #0
 546	adc	r1, r9, #0
 547	asr	r1, r1, #31
 548	and	r1, r1, #19
 549	adds	r2, r2, r1
 550	adcs	r3, r3, #0
 551	adcs	r4, r4, #0
 552	adcs	r5, r5, #0
 553	adcs	r6, r6, #0
 554	adcs	r7, r7, #0
 555	adcs	r8, r8, #0
 556	adc	r9, r9, #0
 557#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 558	bic	r9, r9, #0x80000000
 559#else
 560	bfc	r9, #31, #1
 561#endif
 562	orr	r2, r2, r3
 563	orr	r4, r4, r5
 564	orr	r6, r6, r7
 565	orr	r8, r8, r9
 566	orr	r4, r4, r6
 567	orr	r2, r2, r8
 568	orr	r0, r2, r4
 569	pop	{r4, r5, r6, r7, r8, r9, pc}
 570	.size	fe_isnonzero,.-fe_isnonzero
 571	.text
 572	.align	4
 573	.globl	fe_isnegative
 574	.type	fe_isnegative, %function
 575fe_isnegative:
 576	push	{r4, r5, lr}
 577	ldm	r0!, {r2, r3, r4, r5}
 578	adds	r1, r2, #19
 579	adcs	r1, r3, #0
 580	adcs	r1, r4, #0
 581	adcs	r1, r5, #0
 582	ldm	r0, {r2, r3, r4, r5}
 583	adcs	r1, r2, #0
 584	adcs	r1, r3, #0
 585	adcs	r1, r4, #0
 586	ldr	r2, [r0, #-16]
 587	adc	r1, r5, #0
 588	and	r0, r2, #1
 589	lsr	r1, r1, #31
 590	eor	r0, r0, r1
 591	pop	{r4, r5, pc}
 592	.size	fe_isnegative,.-fe_isnegative
 593#if defined(HAVE_ED25519_MAKE_KEY) || defined(HAVE_ED25519_SIGN) || defined(WOLFSSL_CURVE25519_USE_ED25519)
 594#ifndef WC_NO_CACHE_RESISTANT
 595	.text
 596	.align	4
 597	.globl	fe_cmov_table
 598	.type	fe_cmov_table, %function
 599fe_cmov_table:
 600	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
 601#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
 602	lsl	r2, r2, #24
 603	asr	r2, r2, #24
 604#else
 605	sxtb	r2, r2
 606#endif
 607#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 608	lsl	r3, r2, #24
 609	asr	r3, r3, #31
 610#else
 611	sbfx	r3, r2, #7, #1
 612#endif
 613	eor	r12, r2, r3
 614	sub	r12, r12, r3
 615	mov	r4, #1
 616	mov	r5, #0
 617	mov	r6, #1
 618	mov	r7, #0
 619	mov	r8, #0
 620	mov	r9, #0
 621	mov	r3, #0x80000000
 622	ror	r3, r3, #31
 623	ror	r3, r3, r12
 624	asr	r3, r3, #31
 625#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 626	ldm	r1, {r10, r11}
 627#else
 628	ldrd	r10, r11, [r1]
 629#endif
 630	eor	r10, r10, r4
 631	eor	r11, r11, r5
 632	and	r10, r10, r3
 633	and	r11, r11, r3
 634	eor	r4, r4, r10
 635	eor	r5, r5, r11
 636#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 637	ldr	r10, [r1, #32]
 638	ldr	r11, [r1, #36]
 639#else
 640	ldrd	r10, r11, [r1, #32]
 641#endif
 642	eor	r10, r10, r6
 643	eor	r11, r11, r7
 644	and	r10, r10, r3
 645	and	r11, r11, r3
 646	eor	r6, r6, r10
 647	eor	r7, r7, r11
 648#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 649	ldr	r10, [r1, #64]
 650	ldr	r11, [r1, #68]
 651#else
 652	ldrd	r10, r11, [r1, #64]
 653#endif
 654	eor	r10, r10, r8
 655	eor	r11, r11, r9
 656	and	r10, r10, r3
 657	and	r11, r11, r3
 658	eor	r8, r8, r10
 659	eor	r9, r9, r11
 660	add	r1, r1, #0x60
 661	mov	r3, #0x80000000
 662	ror	r3, r3, #30
 663	ror	r3, r3, r12
 664	asr	r3, r3, #31
 665#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 666	ldm	r1, {r10, r11}
 667#else
 668	ldrd	r10, r11, [r1]
 669#endif
 670	eor	r10, r10, r4
 671	eor	r11, r11, r5
 672	and	r10, r10, r3
 673	and	r11, r11, r3
 674	eor	r4, r4, r10
 675	eor	r5, r5, r11
 676#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 677	ldr	r10, [r1, #32]
 678	ldr	r11, [r1, #36]
 679#else
 680	ldrd	r10, r11, [r1, #32]
 681#endif
 682	eor	r10, r10, r6
 683	eor	r11, r11, r7
 684	and	r10, r10, r3
 685	and	r11, r11, r3
 686	eor	r6, r6, r10
 687	eor	r7, r7, r11
 688#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 689	ldr	r10, [r1, #64]
 690	ldr	r11, [r1, #68]
 691#else
 692	ldrd	r10, r11, [r1, #64]
 693#endif
 694	eor	r10, r10, r8
 695	eor	r11, r11, r9
 696	and	r10, r10, r3
 697	and	r11, r11, r3
 698	eor	r8, r8, r10
 699	eor	r9, r9, r11
 700	add	r1, r1, #0x60
 701	mov	r3, #0x80000000
 702	ror	r3, r3, #29
 703	ror	r3, r3, r12
 704	asr	r3, r3, #31
 705#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 706	ldm	r1, {r10, r11}
 707#else
 708	ldrd	r10, r11, [r1]
 709#endif
 710	eor	r10, r10, r4
 711	eor	r11, r11, r5
 712	and	r10, r10, r3
 713	and	r11, r11, r3
 714	eor	r4, r4, r10
 715	eor	r5, r5, r11
 716#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 717	ldr	r10, [r1, #32]
 718	ldr	r11, [r1, #36]
 719#else
 720	ldrd	r10, r11, [r1, #32]
 721#endif
 722	eor	r10, r10, r6
 723	eor	r11, r11, r7
 724	and	r10, r10, r3
 725	and	r11, r11, r3
 726	eor	r6, r6, r10
 727	eor	r7, r7, r11
 728#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 729	ldr	r10, [r1, #64]
 730	ldr	r11, [r1, #68]
 731#else
 732	ldrd	r10, r11, [r1, #64]
 733#endif
 734	eor	r10, r10, r8
 735	eor	r11, r11, r9
 736	and	r10, r10, r3
 737	and	r11, r11, r3
 738	eor	r8, r8, r10
 739	eor	r9, r9, r11
 740	add	r1, r1, #0x60
 741	mov	r3, #0x80000000
 742	ror	r3, r3, #28
 743	ror	r3, r3, r12
 744	asr	r3, r3, #31
 745#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 746	ldm	r1, {r10, r11}
 747#else
 748	ldrd	r10, r11, [r1]
 749#endif
 750	eor	r10, r10, r4
 751	eor	r11, r11, r5
 752	and	r10, r10, r3
 753	and	r11, r11, r3
 754	eor	r4, r4, r10
 755	eor	r5, r5, r11
 756#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 757	ldr	r10, [r1, #32]
 758	ldr	r11, [r1, #36]
 759#else
 760	ldrd	r10, r11, [r1, #32]
 761#endif
 762	eor	r10, r10, r6
 763	eor	r11, r11, r7
 764	and	r10, r10, r3
 765	and	r11, r11, r3
 766	eor	r6, r6, r10
 767	eor	r7, r7, r11
 768#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 769	ldr	r10, [r1, #64]
 770	ldr	r11, [r1, #68]
 771#else
 772	ldrd	r10, r11, [r1, #64]
 773#endif
 774	eor	r10, r10, r8
 775	eor	r11, r11, r9
 776	and	r10, r10, r3
 777	and	r11, r11, r3
 778	eor	r8, r8, r10
 779	eor	r9, r9, r11
 780	add	r1, r1, #0x60
 781	mov	r3, #0x80000000
 782	ror	r3, r3, #27
 783	ror	r3, r3, r12
 784	asr	r3, r3, #31
 785#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 786	ldm	r1, {r10, r11}
 787#else
 788	ldrd	r10, r11, [r1]
 789#endif
 790	eor	r10, r10, r4
 791	eor	r11, r11, r5
 792	and	r10, r10, r3
 793	and	r11, r11, r3
 794	eor	r4, r4, r10
 795	eor	r5, r5, r11
 796#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 797	ldr	r10, [r1, #32]
 798	ldr	r11, [r1, #36]
 799#else
 800	ldrd	r10, r11, [r1, #32]
 801#endif
 802	eor	r10, r10, r6
 803	eor	r11, r11, r7
 804	and	r10, r10, r3
 805	and	r11, r11, r3
 806	eor	r6, r6, r10
 807	eor	r7, r7, r11
 808#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 809	ldr	r10, [r1, #64]
 810	ldr	r11, [r1, #68]
 811#else
 812	ldrd	r10, r11, [r1, #64]
 813#endif
 814	eor	r10, r10, r8
 815	eor	r11, r11, r9
 816	and	r10, r10, r3
 817	and	r11, r11, r3
 818	eor	r8, r8, r10
 819	eor	r9, r9, r11
 820	add	r1, r1, #0x60
 821	mov	r3, #0x80000000
 822	ror	r3, r3, #26
 823	ror	r3, r3, r12
 824	asr	r3, r3, #31
 825#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 826	ldm	r1, {r10, r11}
 827#else
 828	ldrd	r10, r11, [r1]
 829#endif
 830	eor	r10, r10, r4
 831	eor	r11, r11, r5
 832	and	r10, r10, r3
 833	and	r11, r11, r3
 834	eor	r4, r4, r10
 835	eor	r5, r5, r11
 836#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 837	ldr	r10, [r1, #32]
 838	ldr	r11, [r1, #36]
 839#else
 840	ldrd	r10, r11, [r1, #32]
 841#endif
 842	eor	r10, r10, r6
 843	eor	r11, r11, r7
 844	and	r10, r10, r3
 845	and	r11, r11, r3
 846	eor	r6, r6, r10
 847	eor	r7, r7, r11
 848#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 849	ldr	r10, [r1, #64]
 850	ldr	r11, [r1, #68]
 851#else
 852	ldrd	r10, r11, [r1, #64]
 853#endif
 854	eor	r10, r10, r8
 855	eor	r11, r11, r9
 856	and	r10, r10, r3
 857	and	r11, r11, r3
 858	eor	r8, r8, r10
 859	eor	r9, r9, r11
 860	add	r1, r1, #0x60
 861	mov	r3, #0x80000000
 862	ror	r3, r3, #25
 863	ror	r3, r3, r12
 864	asr	r3, r3, #31
 865#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 866	ldm	r1, {r10, r11}
 867#else
 868	ldrd	r10, r11, [r1]
 869#endif
 870	eor	r10, r10, r4
 871	eor	r11, r11, r5
 872	and	r10, r10, r3
 873	and	r11, r11, r3
 874	eor	r4, r4, r10
 875	eor	r5, r5, r11
 876#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 877	ldr	r10, [r1, #32]
 878	ldr	r11, [r1, #36]
 879#else
 880	ldrd	r10, r11, [r1, #32]
 881#endif
 882	eor	r10, r10, r6
 883	eor	r11, r11, r7
 884	and	r10, r10, r3
 885	and	r11, r11, r3
 886	eor	r6, r6, r10
 887	eor	r7, r7, r11
 888#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 889	ldr	r10, [r1, #64]
 890	ldr	r11, [r1, #68]
 891#else
 892	ldrd	r10, r11, [r1, #64]
 893#endif
 894	eor	r10, r10, r8
 895	eor	r11, r11, r9
 896	and	r10, r10, r3
 897	and	r11, r11, r3
 898	eor	r8, r8, r10
 899	eor	r9, r9, r11
 900	add	r1, r1, #0x60
 901	mov	r3, #0x80000000
 902	ror	r3, r3, #24
 903	ror	r3, r3, r12
 904	asr	r3, r3, #31
 905#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 906	ldm	r1, {r10, r11}
 907#else
 908	ldrd	r10, r11, [r1]
 909#endif
 910	eor	r10, r10, r4
 911	eor	r11, r11, r5
 912	and	r10, r10, r3
 913	and	r11, r11, r3
 914	eor	r4, r4, r10
 915	eor	r5, r5, r11
 916#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 917	ldr	r10, [r1, #32]
 918	ldr	r11, [r1, #36]
 919#else
 920	ldrd	r10, r11, [r1, #32]
 921#endif
 922	eor	r10, r10, r6
 923	eor	r11, r11, r7
 924	and	r10, r10, r3
 925	and	r11, r11, r3
 926	eor	r6, r6, r10
 927	eor	r7, r7, r11
 928#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 929	ldr	r10, [r1, #64]
 930	ldr	r11, [r1, #68]
 931#else
 932	ldrd	r10, r11, [r1, #64]
 933#endif
 934	eor	r10, r10, r8
 935	eor	r11, r11, r9
 936	and	r10, r10, r3
 937	and	r11, r11, r3
 938	eor	r8, r8, r10
 939	eor	r9, r9, r11
 940	sub	r1, r1, #0x2a0
 941	mvn	r10, #18
 942	mvn	r11, #0
 943	subs	r10, r10, r8
 944	sbcs	r11, r11, r9
 945	sbc	lr, lr, lr
 946	asr	r12, r2, #31
 947	eor	r3, r4, r6
 948	and	r3, r3, r12
 949	eor	r4, r4, r3
 950	eor	r6, r6, r3
 951	eor	r3, r5, r7
 952	and	r3, r3, r12
 953	eor	r5, r5, r3
 954	eor	r7, r7, r3
 955	eor	r10, r10, r8
 956	and	r10, r10, r12
 957	eor	r8, r8, r10
 958	eor	r11, r11, r9
 959	and	r11, r11, r12
 960	eor	r9, r9, r11
 961#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 962	stm	r0, {r4, r5}
 963#else
 964	strd	r4, r5, [r0]
 965#endif
 966#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 967	str	r6, [r0, #32]
 968	str	r7, [r0, #36]
 969#else
 970	strd	r6, r7, [r0, #32]
 971#endif
 972#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 973	str	r8, [r0, #64]
 974	str	r9, [r0, #68]
 975#else
 976	strd	r8, r9, [r0, #64]
 977#endif
 978#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 979	lsl	r3, r2, #24
 980	asr	r3, r3, #31
 981#else
 982	sbfx	r3, r2, #7, #1
 983#endif
 984	eor	r12, r2, r3
 985	sub	r12, r12, r3
 986	mov	r4, #0
 987	mov	r5, #0
 988	mov	r6, #0
 989	mov	r7, #0
 990	mov	r8, #0
 991	mov	r9, #0
 992	mov	r3, #0x80000000
 993	ror	r3, r3, #31
 994	ror	r3, r3, r12
 995	asr	r3, r3, #31
 996#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
 997	ldr	r10, [r1, #8]
 998	ldr	r11, [r1, #12]
 999#else
1000	ldrd	r10, r11, [r1, #8]
1001#endif
1002	eor	r10, r10, r4
1003	eor	r11, r11, r5
1004	and	r10, r10, r3
1005	and	r11, r11, r3
1006	eor	r4, r4, r10
1007	eor	r5, r5, r11
1008#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1009	ldr	r10, [r1, #40]
1010	ldr	r11, [r1, #44]
1011#else
1012	ldrd	r10, r11, [r1, #40]
1013#endif
1014	eor	r10, r10, r6
1015	eor	r11, r11, r7
1016	and	r10, r10, r3
1017	and	r11, r11, r3
1018	eor	r6, r6, r10
1019	eor	r7, r7, r11
1020#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1021	ldr	r10, [r1, #72]
1022	ldr	r11, [r1, #76]
1023#else
1024	ldrd	r10, r11, [r1, #72]
1025#endif
1026	eor	r10, r10, r8
1027	eor	r11, r11, r9
1028	and	r10, r10, r3
1029	and	r11, r11, r3
1030	eor	r8, r8, r10
1031	eor	r9, r9, r11
1032	add	r1, r1, #0x60
1033	mov	r3, #0x80000000
1034	ror	r3, r3, #30
1035	ror	r3, r3, r12
1036	asr	r3, r3, #31
1037#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1038	ldr	r10, [r1, #8]
1039	ldr	r11, [r1, #12]
1040#else
1041	ldrd	r10, r11, [r1, #8]
1042#endif
1043	eor	r10, r10, r4
1044	eor	r11, r11, r5
1045	and	r10, r10, r3
1046	and	r11, r11, r3
1047	eor	r4, r4, r10
1048	eor	r5, r5, r11
1049#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1050	ldr	r10, [r1, #40]
1051	ldr	r11, [r1, #44]
1052#else
1053	ldrd	r10, r11, [r1, #40]
1054#endif
1055	eor	r10, r10, r6
1056	eor	r11, r11, r7
1057	and	r10, r10, r3
1058	and	r11, r11, r3
1059	eor	r6, r6, r10
1060	eor	r7, r7, r11
1061#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1062	ldr	r10, [r1, #72]
1063	ldr	r11, [r1, #76]
1064#else
1065	ldrd	r10, r11, [r1, #72]
1066#endif
1067	eor	r10, r10, r8
1068	eor	r11, r11, r9
1069	and	r10, r10, r3
1070	and	r11, r11, r3
1071	eor	r8, r8, r10
1072	eor	r9, r9, r11
1073	add	r1, r1, #0x60
1074	mov	r3, #0x80000000
1075	ror	r3, r3, #29
1076	ror	r3, r3, r12
1077	asr	r3, r3, #31
1078#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1079	ldr	r10, [r1, #8]
1080	ldr	r11, [r1, #12]
1081#else
1082	ldrd	r10, r11, [r1, #8]
1083#endif
1084	eor	r10, r10, r4
1085	eor	r11, r11, r5
1086	and	r10, r10, r3
1087	and	r11, r11, r3
1088	eor	r4, r4, r10
1089	eor	r5, r5, r11
1090#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1091	ldr	r10, [r1, #40]
1092	ldr	r11, [r1, #44]
1093#else
1094	ldrd	r10, r11, [r1, #40]
1095#endif
1096	eor	r10, r10, r6
1097	eor	r11, r11, r7
1098	and	r10, r10, r3
1099	and	r11, r11, r3
1100	eor	r6, r6, r10
1101	eor	r7, r7, r11
1102#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1103	ldr	r10, [r1, #72]
1104	ldr	r11, [r1, #76]
1105#else
1106	ldrd	r10, r11, [r1, #72]
1107#endif
1108	eor	r10, r10, r8
1109	eor	r11, r11, r9
1110	and	r10, r10, r3
1111	and	r11, r11, r3
1112	eor	r8, r8, r10
1113	eor	r9, r9, r11
1114	add	r1, r1, #0x60
1115	mov	r3, #0x80000000
1116	ror	r3, r3, #28
1117	ror	r3, r3, r12
1118	asr	r3, r3, #31
1119#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1120	ldr	r10, [r1, #8]
1121	ldr	r11, [r1, #12]
1122#else
1123	ldrd	r10, r11, [r1, #8]
1124#endif
1125	eor	r10, r10, r4
1126	eor	r11, r11, r5
1127	and	r10, r10, r3
1128	and	r11, r11, r3
1129	eor	r4, r4, r10
1130	eor	r5, r5, r11
1131#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1132	ldr	r10, [r1, #40]
1133	ldr	r11, [r1, #44]
1134#else
1135	ldrd	r10, r11, [r1, #40]
1136#endif
1137	eor	r10, r10, r6
1138	eor	r11, r11, r7
1139	and	r10, r10, r3
1140	and	r11, r11, r3
1141	eor	r6, r6, r10
1142	eor	r7, r7, r11
1143#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1144	ldr	r10, [r1, #72]
1145	ldr	r11, [r1, #76]
1146#else
1147	ldrd	r10, r11, [r1, #72]
1148#endif
1149	eor	r10, r10, r8
1150	eor	r11, r11, r9
1151	and	r10, r10, r3
1152	and	r11, r11, r3
1153	eor	r8, r8, r10
1154	eor	r9, r9, r11
1155	add	r1, r1, #0x60
1156	mov	r3, #0x80000000
1157	ror	r3, r3, #27
1158	ror	r3, r3, r12
1159	asr	r3, r3, #31
1160#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1161	ldr	r10, [r1, #8]
1162	ldr	r11, [r1, #12]
1163#else
1164	ldrd	r10, r11, [r1, #8]
1165#endif
1166	eor	r10, r10, r4
1167	eor	r11, r11, r5
1168	and	r10, r10, r3
1169	and	r11, r11, r3
1170	eor	r4, r4, r10
1171	eor	r5, r5, r11
1172#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1173	ldr	r10, [r1, #40]
1174	ldr	r11, [r1, #44]
1175#else
1176	ldrd	r10, r11, [r1, #40]
1177#endif
1178	eor	r10, r10, r6
1179	eor	r11, r11, r7
1180	and	r10, r10, r3
1181	and	r11, r11, r3
1182	eor	r6, r6, r10
1183	eor	r7, r7, r11
1184#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1185	ldr	r10, [r1, #72]
1186	ldr	r11, [r1, #76]
1187#else
1188	ldrd	r10, r11, [r1, #72]
1189#endif
1190	eor	r10, r10, r8
1191	eor	r11, r11, r9
1192	and	r10, r10, r3
1193	and	r11, r11, r3
1194	eor	r8, r8, r10
1195	eor	r9, r9, r11
1196	add	r1, r1, #0x60
1197	mov	r3, #0x80000000
1198	ror	r3, r3, #26
1199	ror	r3, r3, r12
1200	asr	r3, r3, #31
1201#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1202	ldr	r10, [r1, #8]
1203	ldr	r11, [r1, #12]
1204#else
1205	ldrd	r10, r11, [r1, #8]
1206#endif
1207	eor	r10, r10, r4
1208	eor	r11, r11, r5
1209	and	r10, r10, r3
1210	and	r11, r11, r3
1211	eor	r4, r4, r10
1212	eor	r5, r5, r11
1213#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1214	ldr	r10, [r1, #40]
1215	ldr	r11, [r1, #44]
1216#else
1217	ldrd	r10, r11, [r1, #40]
1218#endif
1219	eor	r10, r10, r6
1220	eor	r11, r11, r7
1221	and	r10, r10, r3
1222	and	r11, r11, r3
1223	eor	r6, r6, r10
1224	eor	r7, r7, r11
1225#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1226	ldr	r10, [r1, #72]
1227	ldr	r11, [r1, #76]
1228#else
1229	ldrd	r10, r11, [r1, #72]
1230#endif
1231	eor	r10, r10, r8
1232	eor	r11, r11, r9
1233	and	r10, r10, r3
1234	and	r11, r11, r3
1235	eor	r8, r8, r10
1236	eor	r9, r9, r11
1237	add	r1, r1, #0x60
1238	mov	r3, #0x80000000
1239	ror	r3, r3, #25
1240	ror	r3, r3, r12
1241	asr	r3, r3, #31
1242#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1243	ldr	r10, [r1, #8]
1244	ldr	r11, [r1, #12]
1245#else
1246	ldrd	r10, r11, [r1, #8]
1247#endif
1248	eor	r10, r10, r4
1249	eor	r11, r11, r5
1250	and	r10, r10, r3
1251	and	r11, r11, r3
1252	eor	r4, r4, r10
1253	eor	r5, r5, r11
1254#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1255	ldr	r10, [r1, #40]
1256	ldr	r11, [r1, #44]
1257#else
1258	ldrd	r10, r11, [r1, #40]
1259#endif
1260	eor	r10, r10, r6
1261	eor	r11, r11, r7
1262	and	r10, r10, r3
1263	and	r11, r11, r3
1264	eor	r6, r6, r10
1265	eor	r7, r7, r11
1266#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1267	ldr	r10, [r1, #72]
1268	ldr	r11, [r1, #76]
1269#else
1270	ldrd	r10, r11, [r1, #72]
1271#endif
1272	eor	r10, r10, r8
1273	eor	r11, r11, r9
1274	and	r10, r10, r3
1275	and	r11, r11, r3
1276	eor	r8, r8, r10
1277	eor	r9, r9, r11
1278	add	r1, r1, #0x60
1279	mov	r3, #0x80000000
1280	ror	r3, r3, #24
1281	ror	r3, r3, r12
1282	asr	r3, r3, #31
1283#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1284	ldr	r10, [r1, #8]
1285	ldr	r11, [r1, #12]
1286#else
1287	ldrd	r10, r11, [r1, #8]
1288#endif
1289	eor	r10, r10, r4
1290	eor	r11, r11, r5
1291	and	r10, r10, r3
1292	and	r11, r11, r3
1293	eor	r4, r4, r10
1294	eor	r5, r5, r11
1295#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1296	ldr	r10, [r1, #40]
1297	ldr	r11, [r1, #44]
1298#else
1299	ldrd	r10, r11, [r1, #40]
1300#endif
1301	eor	r10, r10, r6
1302	eor	r11, r11, r7
1303	and	r10, r10, r3
1304	and	r11, r11, r3
1305	eor	r6, r6, r10
1306	eor	r7, r7, r11
1307#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1308	ldr	r10, [r1, #72]
1309	ldr	r11, [r1, #76]
1310#else
1311	ldrd	r10, r11, [r1, #72]
1312#endif
1313	eor	r10, r10, r8
1314	eor	r11, r11, r9
1315	and	r10, r10, r3
1316	and	r11, r11, r3
1317	eor	r8, r8, r10
1318	eor	r9, r9, r11
1319	sub	r1, r1, #0x2a0
1320	mvn	r10, #0
1321	mvn	r11, #0
1322	rsbs	lr, lr, #0
1323	sbcs	r10, r10, r8
1324	sbcs	r11, r11, r9
1325	sbc	lr, lr, lr
1326	asr	r12, r2, #31
1327	eor	r3, r4, r6
1328	and	r3, r3, r12
1329	eor	r4, r4, r3
1330	eor	r6, r6, r3
1331	eor	r3, r5, r7
1332	and	r3, r3, r12
1333	eor	r5, r5, r3
1334	eor	r7, r7, r3
1335	eor	r10, r10, r8
1336	and	r10, r10, r12
1337	eor	r8, r8, r10
1338	eor	r11, r11, r9
1339	and	r11, r11, r12
1340	eor	r9, r9, r11
1341#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1342	str	r4, [r0, #8]
1343	str	r5, [r0, #12]
1344#else
1345	strd	r4, r5, [r0, #8]
1346#endif
1347#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1348	str	r6, [r0, #40]
1349	str	r7, [r0, #44]
1350#else
1351	strd	r6, r7, [r0, #40]
1352#endif
1353#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1354	str	r8, [r0, #72]
1355	str	r9, [r0, #76]
1356#else
1357	strd	r8, r9, [r0, #72]
1358#endif
1359#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1360	lsl	r3, r2, #24
1361	asr	r3, r3, #31
1362#else
1363	sbfx	r3, r2, #7, #1
1364#endif
1365	eor	r12, r2, r3
1366	sub	r12, r12, r3
1367	mov	r4, #0
1368	mov	r5, #0
1369	mov	r6, #0
1370	mov	r7, #0
1371	mov	r8, #0
1372	mov	r9, #0
1373	mov	r3, #0x80000000
1374	ror	r3, r3, #31
1375	ror	r3, r3, r12
1376	asr	r3, r3, #31
1377#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1378	ldr	r10, [r1, #16]
1379	ldr	r11, [r1, #20]
1380#else
1381	ldrd	r10, r11, [r1, #16]
1382#endif
1383	eor	r10, r10, r4
1384	eor	r11, r11, r5
1385	and	r10, r10, r3
1386	and	r11, r11, r3
1387	eor	r4, r4, r10
1388	eor	r5, r5, r11
1389#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1390	ldr	r10, [r1, #48]
1391	ldr	r11, [r1, #52]
1392#else
1393	ldrd	r10, r11, [r1, #48]
1394#endif
1395	eor	r10, r10, r6
1396	eor	r11, r11, r7
1397	and	r10, r10, r3
1398	and	r11, r11, r3
1399	eor	r6, r6, r10
1400	eor	r7, r7, r11
1401#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1402	ldr	r10, [r1, #80]
1403	ldr	r11, [r1, #84]
1404#else
1405	ldrd	r10, r11, [r1, #80]
1406#endif
1407	eor	r10, r10, r8
1408	eor	r11, r11, r9
1409	and	r10, r10, r3
1410	and	r11, r11, r3
1411	eor	r8, r8, r10
1412	eor	r9, r9, r11
1413	add	r1, r1, #0x60
1414	mov	r3, #0x80000000
1415	ror	r3, r3, #30
1416	ror	r3, r3, r12
1417	asr	r3, r3, #31
1418#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1419	ldr	r10, [r1, #16]
1420	ldr	r11, [r1, #20]
1421#else
1422	ldrd	r10, r11, [r1, #16]
1423#endif
1424	eor	r10, r10, r4
1425	eor	r11, r11, r5
1426	and	r10, r10, r3
1427	and	r11, r11, r3
1428	eor	r4, r4, r10
1429	eor	r5, r5, r11
1430#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1431	ldr	r10, [r1, #48]
1432	ldr	r11, [r1, #52]
1433#else
1434	ldrd	r10, r11, [r1, #48]
1435#endif
1436	eor	r10, r10, r6
1437	eor	r11, r11, r7
1438	and	r10, r10, r3
1439	and	r11, r11, r3
1440	eor	r6, r6, r10
1441	eor	r7, r7, r11
1442#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1443	ldr	r10, [r1, #80]
1444	ldr	r11, [r1, #84]
1445#else
1446	ldrd	r10, r11, [r1, #80]
1447#endif
1448	eor	r10, r10, r8
1449	eor	r11, r11, r9
1450	and	r10, r10, r3
1451	and	r11, r11, r3
1452	eor	r8, r8, r10
1453	eor	r9, r9, r11
1454	add	r1, r1, #0x60
1455	mov	r3, #0x80000000
1456	ror	r3, r3, #29
1457	ror	r3, r3, r12
1458	asr	r3, r3, #31
1459#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1460	ldr	r10, [r1, #16]
1461	ldr	r11, [r1, #20]
1462#else
1463	ldrd	r10, r11, [r1, #16]
1464#endif
1465	eor	r10, r10, r4
1466	eor	r11, r11, r5
1467	and	r10, r10, r3
1468	and	r11, r11, r3
1469	eor	r4, r4, r10
1470	eor	r5, r5, r11
1471#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1472	ldr	r10, [r1, #48]
1473	ldr	r11, [r1, #52]
1474#else
1475	ldrd	r10, r11, [r1, #48]
1476#endif
1477	eor	r10, r10, r6
1478	eor	r11, r11, r7
1479	and	r10, r10, r3
1480	and	r11, r11, r3
1481	eor	r6, r6, r10
1482	eor	r7, r7, r11
1483#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1484	ldr	r10, [r1, #80]
1485	ldr	r11, [r1, #84]
1486#else
1487	ldrd	r10, r11, [r1, #80]
1488#endif
1489	eor	r10, r10, r8
1490	eor	r11, r11, r9
1491	and	r10, r10, r3
1492	and	r11, r11, r3
1493	eor	r8, r8, r10
1494	eor	r9, r9, r11
1495	add	r1, r1, #0x60
1496	mov	r3, #0x80000000
1497	ror	r3, r3, #28
1498	ror	r3, r3, r12
1499	asr	r3, r3, #31
1500#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1501	ldr	r10, [r1, #16]
1502	ldr	r11, [r1, #20]
1503#else
1504	ldrd	r10, r11, [r1, #16]
1505#endif
1506	eor	r10, r10, r4
1507	eor	r11, r11, r5
1508	and	r10, r10, r3
1509	and	r11, r11, r3
1510	eor	r4, r4, r10
1511	eor	r5, r5, r11
1512#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1513	ldr	r10, [r1, #48]
1514	ldr	r11, [r1, #52]
1515#else
1516	ldrd	r10, r11, [r1, #48]
1517#endif
1518	eor	r10, r10, r6
1519	eor	r11, r11, r7
1520	and	r10, r10, r3
1521	and	r11, r11, r3
1522	eor	r6, r6, r10
1523	eor	r7, r7, r11
1524#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1525	ldr	r10, [r1, #80]
1526	ldr	r11, [r1, #84]
1527#else
1528	ldrd	r10, r11, [r1, #80]
1529#endif
1530	eor	r10, r10, r8
1531	eor	r11, r11, r9
1532	and	r10, r10, r3
1533	and	r11, r11, r3
1534	eor	r8, r8, r10
1535	eor	r9, r9, r11
1536	add	r1, r1, #0x60
1537	mov	r3, #0x80000000
1538	ror	r3, r3, #27
1539	ror	r3, r3, r12
1540	asr	r3, r3, #31
1541#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1542	ldr	r10, [r1, #16]
1543	ldr	r11, [r1, #20]
1544#else
1545	ldrd	r10, r11, [r1, #16]
1546#endif
1547	eor	r10, r10, r4
1548	eor	r11, r11, r5
1549	and	r10, r10, r3
1550	and	r11, r11, r3
1551	eor	r4, r4, r10
1552	eor	r5, r5, r11
1553#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1554	ldr	r10, [r1, #48]
1555	ldr	r11, [r1, #52]
1556#else
1557	ldrd	r10, r11, [r1, #48]
1558#endif
1559	eor	r10, r10, r6
1560	eor	r11, r11, r7
1561	and	r10, r10, r3
1562	and	r11, r11, r3
1563	eor	r6, r6, r10
1564	eor	r7, r7, r11
1565#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1566	ldr	r10, [r1, #80]
1567	ldr	r11, [r1, #84]
1568#else
1569	ldrd	r10, r11, [r1, #80]
1570#endif
1571	eor	r10, r10, r8
1572	eor	r11, r11, r9
1573	and	r10, r10, r3
1574	and	r11, r11, r3
1575	eor	r8, r8, r10
1576	eor	r9, r9, r11
1577	add	r1, r1, #0x60
1578	mov	r3, #0x80000000
1579	ror	r3, r3, #26
1580	ror	r3, r3, r12
1581	asr	r3, r3, #31
1582#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1583	ldr	r10, [r1, #16]
1584	ldr	r11, [r1, #20]
1585#else
1586	ldrd	r10, r11, [r1, #16]
1587#endif
1588	eor	r10, r10, r4
1589	eor	r11, r11, r5
1590	and	r10, r10, r3
1591	and	r11, r11, r3
1592	eor	r4, r4, r10
1593	eor	r5, r5, r11
1594#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1595	ldr	r10, [r1, #48]
1596	ldr	r11, [r1, #52]
1597#else
1598	ldrd	r10, r11, [r1, #48]
1599#endif
1600	eor	r10, r10, r6
1601	eor	r11, r11, r7
1602	and	r10, r10, r3
1603	and	r11, r11, r3
1604	eor	r6, r6, r10
1605	eor	r7, r7, r11
1606#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1607	ldr	r10, [r1, #80]
1608	ldr	r11, [r1, #84]
1609#else
1610	ldrd	r10, r11, [r1, #80]
1611#endif
1612	eor	r10, r10, r8
1613	eor	r11, r11, r9
1614	and	r10, r10, r3
1615	and	r11, r11, r3
1616	eor	r8, r8, r10
1617	eor	r9, r9, r11
1618	add	r1, r1, #0x60
1619	mov	r3, #0x80000000
1620	ror	r3, r3, #25
1621	ror	r3, r3, r12
1622	asr	r3, r3, #31
1623#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1624	ldr	r10, [r1, #16]
1625	ldr	r11, [r1, #20]
1626#else
1627	ldrd	r10, r11, [r1, #16]
1628#endif
1629	eor	r10, r10, r4
1630	eor	r11, r11, r5
1631	and	r10, r10, r3
1632	and	r11, r11, r3
1633	eor	r4, r4, r10
1634	eor	r5, r5, r11
1635#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1636	ldr	r10, [r1, #48]
1637	ldr	r11, [r1, #52]
1638#else
1639	ldrd	r10, r11, [r1, #48]
1640#endif
1641	eor	r10, r10, r6
1642	eor	r11, r11, r7
1643	and	r10, r10, r3
1644	and	r11, r11, r3
1645	eor	r6, r6, r10
1646	eor	r7, r7, r11
1647#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1648	ldr	r10, [r1, #80]
1649	ldr	r11, [r1, #84]
1650#else
1651	ldrd	r10, r11, [r1, #80]
1652#endif
1653	eor	r10, r10, r8
1654	eor	r11, r11, r9
1655	and	r10, r10, r3
1656	and	r11, r11, r3
1657	eor	r8, r8, r10
1658	eor	r9, r9, r11
1659	add	r1, r1, #0x60
1660	mov	r3, #0x80000000
1661	ror	r3, r3, #24
1662	ror	r3, r3, r12
1663	asr	r3, r3, #31
1664#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1665	ldr	r10, [r1, #16]
1666	ldr	r11, [r1, #20]
1667#else
1668	ldrd	r10, r11, [r1, #16]
1669#endif
1670	eor	r10, r10, r4
1671	eor	r11, r11, r5
1672	and	r10, r10, r3
1673	and	r11, r11, r3
1674	eor	r4, r4, r10
1675	eor	r5, r5, r11
1676#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1677	ldr	r10, [r1, #48]
1678	ldr	r11, [r1, #52]
1679#else
1680	ldrd	r10, r11, [r1, #48]
1681#endif
1682	eor	r10, r10, r6
1683	eor	r11, r11, r7
1684	and	r10, r10, r3
1685	and	r11, r11, r3
1686	eor	r6, r6, r10
1687	eor	r7, r7, r11
1688#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1689	ldr	r10, [r1, #80]
1690	ldr	r11, [r1, #84]
1691#else
1692	ldrd	r10, r11, [r1, #80]
1693#endif
1694	eor	r10, r10, r8
1695	eor	r11, r11, r9
1696	and	r10, r10, r3
1697	and	r11, r11, r3
1698	eor	r8, r8, r10
1699	eor	r9, r9, r11
1700	sub	r1, r1, #0x2a0
1701	mvn	r10, #0
1702	mvn	r11, #0
1703	rsbs	lr, lr, #0
1704	sbcs	r10, r10, r8
1705	sbcs	r11, r11, r9
1706	sbc	lr, lr, lr
1707	asr	r12, r2, #31
1708	eor	r3, r4, r6
1709	and	r3, r3, r12
1710	eor	r4, r4, r3
1711	eor	r6, r6, r3
1712	eor	r3, r5, r7
1713	and	r3, r3, r12
1714	eor	r5, r5, r3
1715	eor	r7, r7, r3
1716	eor	r10, r10, r8
1717	and	r10, r10, r12
1718	eor	r8, r8, r10
1719	eor	r11, r11, r9
1720	and	r11, r11, r12
1721	eor	r9, r9, r11
1722#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1723	str	r4, [r0, #16]
1724	str	r5, [r0, #20]
1725#else
1726	strd	r4, r5, [r0, #16]
1727#endif
1728#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1729	str	r6, [r0, #48]
1730	str	r7, [r0, #52]
1731#else
1732	strd	r6, r7, [r0, #48]
1733#endif
1734#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1735	str	r8, [r0, #80]
1736	str	r9, [r0, #84]
1737#else
1738	strd	r8, r9, [r0, #80]
1739#endif
1740#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1741	lsl	r3, r2, #24
1742	asr	r3, r3, #31
1743#else
1744	sbfx	r3, r2, #7, #1
1745#endif
1746	eor	r12, r2, r3
1747	sub	r12, r12, r3
1748	mov	r4, #0
1749	mov	r5, #0
1750	mov	r6, #0
1751	mov	r7, #0
1752	mov	r8, #0
1753	mov	r9, #0
1754	mov	r3, #0x80000000
1755	ror	r3, r3, #31
1756	ror	r3, r3, r12
1757	asr	r3, r3, #31
1758#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1759	ldr	r10, [r1, #24]
1760	ldr	r11, [r1, #28]
1761#else
1762	ldrd	r10, r11, [r1, #24]
1763#endif
1764	eor	r10, r10, r4
1765	eor	r11, r11, r5
1766	and	r10, r10, r3
1767	and	r11, r11, r3
1768	eor	r4, r4, r10
1769	eor	r5, r5, r11
1770#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1771	ldr	r10, [r1, #56]
1772	ldr	r11, [r1, #60]
1773#else
1774	ldrd	r10, r11, [r1, #56]
1775#endif
1776	eor	r10, r10, r6
1777	eor	r11, r11, r7
1778	and	r10, r10, r3
1779	and	r11, r11, r3
1780	eor	r6, r6, r10
1781	eor	r7, r7, r11
1782#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1783	ldr	r10, [r1, #88]
1784	ldr	r11, [r1, #92]
1785#else
1786	ldrd	r10, r11, [r1, #88]
1787#endif
1788	eor	r10, r10, r8
1789	eor	r11, r11, r9
1790	and	r10, r10, r3
1791	and	r11, r11, r3
1792	eor	r8, r8, r10
1793	eor	r9, r9, r11
1794	add	r1, r1, #0x60
1795	mov	r3, #0x80000000
1796	ror	r3, r3, #30
1797	ror	r3, r3, r12
1798	asr	r3, r3, #31
1799#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1800	ldr	r10, [r1, #24]
1801	ldr	r11, [r1, #28]
1802#else
1803	ldrd	r10, r11, [r1, #24]
1804#endif
1805	eor	r10, r10, r4
1806	eor	r11, r11, r5
1807	and	r10, r10, r3
1808	and	r11, r11, r3
1809	eor	r4, r4, r10
1810	eor	r5, r5, r11
1811#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1812	ldr	r10, [r1, #56]
1813	ldr	r11, [r1, #60]
1814#else
1815	ldrd	r10, r11, [r1, #56]
1816#endif
1817	eor	r10, r10, r6
1818	eor	r11, r11, r7
1819	and	r10, r10, r3
1820	and	r11, r11, r3
1821	eor	r6, r6, r10
1822	eor	r7, r7, r11
1823#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1824	ldr	r10, [r1, #88]
1825	ldr	r11, [r1, #92]
1826#else
1827	ldrd	r10, r11, [r1, #88]
1828#endif
1829	eor	r10, r10, r8
1830	eor	r11, r11, r9
1831	and	r10, r10, r3
1832	and	r11, r11, r3
1833	eor	r8, r8, r10
1834	eor	r9, r9, r11
1835	add	r1, r1, #0x60
1836	mov	r3, #0x80000000
1837	ror	r3, r3, #29
1838	ror	r3, r3, r12
1839	asr	r3, r3, #31
1840#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1841	ldr	r10, [r1, #24]
1842	ldr	r11, [r1, #28]
1843#else
1844	ldrd	r10, r11, [r1, #24]
1845#endif
1846	eor	r10, r10, r4
1847	eor	r11, r11, r5
1848	and	r10, r10, r3
1849	and	r11, r11, r3
1850	eor	r4, r4, r10
1851	eor	r5, r5, r11
1852#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1853	ldr	r10, [r1, #56]
1854	ldr	r11, [r1, #60]
1855#else
1856	ldrd	r10, r11, [r1, #56]
1857#endif
1858	eor	r10, r10, r6
1859	eor	r11, r11, r7
1860	and	r10, r10, r3
1861	and	r11, r11, r3
1862	eor	r6, r6, r10
1863	eor	r7, r7, r11
1864#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1865	ldr	r10, [r1, #88]
1866	ldr	r11, [r1, #92]
1867#else
1868	ldrd	r10, r11, [r1, #88]
1869#endif
1870	eor	r10, r10, r8
1871	eor	r11, r11, r9
1872	and	r10, r10, r3
1873	and	r11, r11, r3
1874	eor	r8, r8, r10
1875	eor	r9, r9, r11
1876	add	r1, r1, #0x60
1877	mov	r3, #0x80000000
1878	ror	r3, r3, #28
1879	ror	r3, r3, r12
1880	asr	r3, r3, #31
1881#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1882	ldr	r10, [r1, #24]
1883	ldr	r11, [r1, #28]
1884#else
1885	ldrd	r10, r11, [r1, #24]
1886#endif
1887	eor	r10, r10, r4
1888	eor	r11, r11, r5
1889	and	r10, r10, r3
1890	and	r11, r11, r3
1891	eor	r4, r4, r10
1892	eor	r5, r5, r11
1893#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1894	ldr	r10, [r1, #56]
1895	ldr	r11, [r1, #60]
1896#else
1897	ldrd	r10, r11, [r1, #56]
1898#endif
1899	eor	r10, r10, r6
1900	eor	r11, r11, r7
1901	and	r10, r10, r3
1902	and	r11, r11, r3
1903	eor	r6, r6, r10
1904	eor	r7, r7, r11
1905#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1906	ldr	r10, [r1, #88]
1907	ldr	r11, [r1, #92]
1908#else
1909	ldrd	r10, r11, [r1, #88]
1910#endif
1911	eor	r10, r10, r8
1912	eor	r11, r11, r9
1913	and	r10, r10, r3
1914	and	r11, r11, r3
1915	eor	r8, r8, r10
1916	eor	r9, r9, r11
1917	add	r1, r1, #0x60
1918	mov	r3, #0x80000000
1919	ror	r3, r3, #27
1920	ror	r3, r3, r12
1921	asr	r3, r3, #31
1922#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1923	ldr	r10, [r1, #24]
1924	ldr	r11, [r1, #28]
1925#else
1926	ldrd	r10, r11, [r1, #24]
1927#endif
1928	eor	r10, r10, r4
1929	eor	r11, r11, r5
1930	and	r10, r10, r3
1931	and	r11, r11, r3
1932	eor	r4, r4, r10
1933	eor	r5, r5, r11
1934#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1935	ldr	r10, [r1, #56]
1936	ldr	r11, [r1, #60]
1937#else
1938	ldrd	r10, r11, [r1, #56]
1939#endif
1940	eor	r10, r10, r6
1941	eor	r11, r11, r7
1942	and	r10, r10, r3
1943	and	r11, r11, r3
1944	eor	r6, r6, r10
1945	eor	r7, r7, r11
1946#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1947	ldr	r10, [r1, #88]
1948	ldr	r11, [r1, #92]
1949#else
1950	ldrd	r10, r11, [r1, #88]
1951#endif
1952	eor	r10, r10, r8
1953	eor	r11, r11, r9
1954	and	r10, r10, r3
1955	and	r11, r11, r3
1956	eor	r8, r8, r10
1957	eor	r9, r9, r11
1958	add	r1, r1, #0x60
1959	mov	r3, #0x80000000
1960	ror	r3, r3, #26
1961	ror	r3, r3, r12
1962	asr	r3, r3, #31
1963#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1964	ldr	r10, [r1, #24]
1965	ldr	r11, [r1, #28]
1966#else
1967	ldrd	r10, r11, [r1, #24]
1968#endif
1969	eor	r10, r10, r4
1970	eor	r11, r11, r5
1971	and	r10, r10, r3
1972	and	r11, r11, r3
1973	eor	r4, r4, r10
1974	eor	r5, r5, r11
1975#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1976	ldr	r10, [r1, #56]
1977	ldr	r11, [r1, #60]
1978#else
1979	ldrd	r10, r11, [r1, #56]
1980#endif
1981	eor	r10, r10, r6
1982	eor	r11, r11, r7
1983	and	r10, r10, r3
1984	and	r11, r11, r3
1985	eor	r6, r6, r10
1986	eor	r7, r7, r11
1987#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
1988	ldr	r10, [r1, #88]
1989	ldr	r11, [r1, #92]
1990#else
1991	ldrd	r10, r11, [r1, #88]
1992#endif
1993	eor	r10, r10, r8
1994	eor	r11, r11, r9
1995	and	r10, r10, r3
1996	and	r11, r11, r3
1997	eor	r8, r8, r10
1998	eor	r9, r9, r11
1999	add	r1, r1, #0x60
2000	mov	r3, #0x80000000
2001	ror	r3, r3, #25
2002	ror	r3, r3, r12
2003	asr	r3, r3, #31
2004#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
2005	ldr	r10, [r1, #24]
2006	ldr	r11, [r1, #28]
2007#else
2008	ldrd	r10, r11, [r1, #24]
2009#endif
2010	eor	r10, r10, r4
2011	eor	r11, r11, r5
2012	and	r10, r10, r3
2013	and	r11, r11, r3
2014	eor	r4, r4, r10
2015	eor	r5, r5, r11
2016#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
2017	ldr	r10, [r1, #56]
2018	ldr	r11, [r1, #60]
2019#else
2020	ldrd	r10, r11, [r1, #56]
2021#endif
2022	eor	r10, r10, r6
2023	eor	r11, r11, r7
2024	and	r10, r10, r3
2025	and	r11, r11, r3
2026	eor	r6, r6, r10
2027	eor	r7, r7, r11
2028#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
2029	ldr	r10, [r1, #88]
2030	ldr	r11, [r1, #92]
2031#else
2032	ldrd	r10, r11, [r1, #88]
2033#endif
2034	eor	r10, r10, r8
2035	eor	r11, r11, r9
2036	and	r10, r10, r3
2037	and	r11, r11, r3
2038	eor	r8, r8, r10
2039	eor	r9, r9, r11
2040	add	r1, r1, #0x60
2041	mov	r3, #0x80000000
2042	ror	r3, r3, #24
2043	ror	r3, r3, r12
2044	asr	r3, r3, #31
2045#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
2046	ldr	r10, [r1, #24]
2047	ldr	r11, [r1, #28]
2048#else
2049	ldrd	r10, r11, [r1, #24]
2050#endif
2051	eor	r10, r10, r4
2052	eor	r11, r11, r5
2053	and	r10, r10, r3
2054	and	r11, r11, r3
2055	eor	r4, r4, r10
2056	eor	r5, r5, r11
2057#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
2058	ldr	r10, [r1, #56]
2059	ldr	r11, [r1, #60]
2060#else
2061	ldrd	r10, r11, [r1, #56]
2062#endif
2063	eor	r10, r10, r6
2064	eor	r11, r11, r7
2065	and	r10, r10, r3
2066	and	r11, r11, r3
2067	eor	r6, r6, r10
2068	eor	r7, r7, r11
2069#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
2070	ldr	r10, [r1, #88]
2071	ldr	r11, [r1, #92]
2072#else
2073	ldrd	r10, r11, [r1, #88]
2074#endif
2075	eor	r10, r10, r8
2076	eor	r11, r11, r9
2077	and	r10, r10, r3
2078	and	r11, r11, r3
2079	eor	r8, r8, r10
2080	eor	r9, r9, r11
2081	sub	r1, r1, #0x2a0
2082	mvn	r10, #0
2083	mvn	r11, #0x80000000
2084	rsbs	lr, lr, #0
2085	sbcs	r10, r10, r8
2086	sbc	r11, r11, r9
2087	asr	r12, r2, #31
2088	eor	r3, r4, r6
2089	and	r3, r3, r12
2090	eor	r4, r4, r3
2091	eor	r6, r6, r3
2092	eor	r3, r5, r7
2093	and	r3, r3, r12
2094	eor	r5, r5, r3
2095	eor	r7, r7, r3
2096	eor	r10, r10, r8
2097	and	r10, r10, r12
2098	eor	r8, r8, r10
2099	eor	r11, r11, r9
2100	and	r11, r11, r12
2101	eor	r9, r9, r11
2102#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
2103	str	r4, [r0, #24]
2104	str	r5, [r0, #28]
2105#else
2106	strd	r4, r5, [r0, #24]
2107#endif
2108#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
2109	str	r6, [r0, #56]
2110	str	r7, [r0, #60]
2111#else
2112	strd	r6, r7, [r0, #56]
2113#endif
2114#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
2115	str	r8, [r0, #88]
2116	str	r9, [r0, #92]
2117#else
2118	strd	r8, r9, [r0, #88]
2119#endif
2120	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
2121	.size	fe_cmov_table,.-fe_cmov_table
2122#else
2123	.text
2124	.align	4
2125	.globl	fe_cmov_table
2126	.type	fe_cmov_table, %function
2127fe_cmov_table:
2128	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
2129#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
2130	lsl	r2, r2, #24
2131	asr	r2, r2, #24
2132#else
2133	sxtb	r2, r2
2134#endif
2135#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
2136	lsl	r3, r2, #24
2137	asr	r3, r3, #31
2138#else
2139	sbfx	r3, r2, #7, #1
2140#endif
2141	eor	r2, r2, r3
2142	sub	r2, r2, r3
2143#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
2144	sub	lr, r2, #1
2145#else
2146	clz	lr, r2
2147	lsl	lr, lr, #26
2148#endif /* defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6) */
2149	asr	lr, lr, #31
2150	mvn	lr, lr
2151	add	r2, r2, lr
2152	mov	r12, #0x60
2153	mul	r2, r2, r12
2154	add	r1, r1, r2
2155	ldm	r1!, {r4, r5, r6, r7, r8, r9, r10, r11}
2156	and	r4, r4, lr
2157	and	r5, r5, lr
2158	and	r6, r6, lr
2159	and	r7, r7, lr
2160	and	r8, r8, lr
2161	and	r9, r9, lr
2162	and	r10, r10, lr
2163	and	r11, r11, lr
2164	mvn	r12, lr
2165	sub	r4, r4, r12
2166	mov	r12, #32
2167	and	r12, r12, r3
2168	add	r0, r0, r12
2169	stm	r0, {r4, r5, r6, r7, r8, r9, r10, r11}
2170	sub	r0, r0, r12
2171	ldm	r1!, {r4, r5, r6, r7, r8, r9, r10, r11}
2172	and	r4, r4, lr
2173	and	r5, r5, lr
2174	and	r6, r6, lr
2175	and	r7, r7, lr
2176	and	r8, r8, lr
2177	and	r9, r9, lr
2178	and	r10, r10, lr
2179	and	r11, r11, lr
2180	mvn	r12, lr
2181	sub	r4, r4, r12
2182	mov	r12, #32
2183	bic	r12, r12, r3
2184	add	r0, r0, r12
2185	stm	r0, {r4, r5, r6, r7, r8, r9, r10, r11}
2186	sub	r0, r0, r12
2187	add	r0, r0, #0x40
2188	ldm	r1!, {r4, r5, r6, r7}
2189	mvn	r12, #18
2190	subs	r8, r12, r4
2191	sbcs	r9, r3, r5
2192	sbcs	r10, r3, r6
2193	sbcs	r11, r3, r7
2194	bic	r4, r4, r3
2195	bic	r5, r5, r3
2196	bic	r6, r6, r3
2197	bic	r7, r7, r3
2198	and	r8, r8, r3
2199	and	r9, r9, r3
2200	and	r10, r10, r3
2201	and	r11, r11, r3
2202	orr	r4, r4, r8
2203	orr	r5, r5, r9
2204	orr	r6, r6, r10
2205	orr	r7, r7, r11
2206	and	r4, r4, lr
2207	and	r5, r5, lr
2208	and	r6, r6, lr
2209	and	r7, r7, lr
2210	stm	r0!, {r4, r5, r6, r7}
2211	ldm	r1!, {r4, r5, r6, r7}
2212	mvn	r12, #0x80000000
2213	sbcs	r8, r3, r4
2214	sbcs	r9, r3, r5
2215	sbcs	r10, r3, r6
2216	sbc	r11, r12, r7
2217	bic	r4, r4, r3
2218	bic	r5, r5, r3
2219	bic	r6, r6, r3
2220	bic	r7, r7, r3
2221	and	r8, r8, r3
2222	and	r9, r9, r3
2223	and	r10, r10, r3
2224	and	r11, r11, r3
2225	orr	r4, r4, r8
2226	orr	r5, r5, r9
2227	orr	r6, r6, r10
2228	orr	r7, r7, r11
2229	and	r4, r4, lr
2230	and	r5, r5, lr
2231	and	r6, r6, lr
2232	and	r7, r7, lr
2233	stm	r0!, {r4, r5, r6, r7}
2234	sub	r1, r1, r2
2235	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
2236	.size	fe_cmov_table,.-fe_cmov_table
2237#endif /* WC_NO_CACHE_RESISTANT */
2238#endif /* HAVE_ED25519_MAKE_KEY || HAVE_ED25519_SIGN || WOLFSSL_CURVE25519_USE_ED25519 */
2239#endif /* HAVE_ED25519 || WOLFSSL_CURVE25519_USE_ED25519 */
2240#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
2241	.text
2242	.align	4
2243	.globl	fe_mul_op
2244	.type	fe_mul_op, %function
2245fe_mul_op:
2246	push	{lr}
2247	sub	sp, sp, #40
2248	str	r0, [sp, #36]
2249	mov	r0, #0
2250	ldr	r12, [r1]
2251	# A[0] * B[0]
2252	ldr	lr, [r2]
2253	umull	r3, r4, r12, lr
2254	# A[0] * B[2]
2255	ldr	lr, [r2, #8]
2256	umull	r5, r6, r12, lr
2257	# A[0] * B[4]
2258	ldr	lr, [r2, #16]
2259	umull	r7, r8, r12, lr
2260	# A[0] * B[6]
2261	ldr	lr, [r2, #24]
2262	umull	r9, r10, r12, lr
2263	str	r3, [sp]
2264	# A[0] * B[1]
2265	ldr	lr, [r2, #4]
2266	mov	r11, r0
2267	umlal	r4, r11, r12, lr
2268	adds	r5, r5, r11
2269	# A[0] * B[3]
2270	ldr	lr, [r2, #12]
2271	adcs	r6, r6, #0
2272	adc	r11, r0, #0
2273	umlal	r6, r11, r12, lr
2274	adds	r7, r7, r11
2275	# A[0] * B[5]
2276	ldr	lr, [r2, #20]
2277	adcs	r8, r8, #0
2278	adc	r11, r0, #0
2279	umlal	r8, r11, r12, lr
2280	adds	r9, r9, r11
2281	# A[0] * B[7]
2282	ldr	lr, [r2, #28]
2283	adcs	r10, r10, #0
2284	adc	r3, r0, #0
2285	umlal	r10, r3, r12, lr
2286	# A[1] * B[0]
2287	ldr	r12, [r1, #4]
2288	ldr	lr, [r2]
2289	mov	r11, #0
2290	umlal	r4, r11, r12, lr
2291	str	r4, [sp, #4]
2292	adds	r5, r5, r11
2293	# A[1] * B[1]
2294	ldr	lr, [r2, #4]
2295	adc	r11, r0, #0
2296	umlal	r5, r11, r12, lr
2297	adds	r6, r6, r11
2298	# A[1] * B[2]
2299	ldr	lr, [r2, #8]
2300	adc	r11, r0, #0
2301	umlal	r6, r11, r12, lr
2302	adds	r7, r7, r11
2303	# A[1] * B[3]
2304	ldr	lr, [r2, #12]
2305	adc	r11, r0, #0
2306	umlal	r7, r11, r12, lr
2307	adds	r8, r8, r11
2308	# A[1] * B[4]
2309	ldr	lr, [r2, #16]
2310	adc	r11, r0, #0
2311	umlal	r8, r11, r12, lr
2312	adds	r9, r9, r11
2313	# A[1] * B[5]
2314	ldr	lr, [r2, #20]
2315	adc	r11, r0, #0
2316	umlal	r9, r11, r12, lr
2317	adds	r10, r10, r11
2318	# A[1] * B[6]
2319	ldr	lr, [r2, #24]
2320	adc	r11, r0, #0
2321	umlal	r10, r11, r12, lr
2322	adds	r3, r3, r11
2323	# A[1] * B[7]
2324	ldr	lr, [r2, #28]
2325	adc	r4, r0, #0
2326	umlal	r3, r4, r12, lr
2327	# A[2] * B[0]
2328	ldr	r12, [r1, #8]
2329	ldr	lr, [r2]
2330	mov	r11, #0
2331	umlal	r5, r11, r12, lr
2332	str	r5, [sp, #8]
2333	adds	r6, r6, r11
2334	# A[2] * B[1]
2335	ldr	lr, [r2, #4]
2336	adc	r11, r0, #0
2337	umlal	r6, r11, r12, lr
2338	adds	r7, r7, r11
2339	# A[2] * B[2]
2340	ldr	lr, [r2, #8]
2341	adc	r11, r0, #0
2342	umlal	r7, r11, r12, lr
2343	adds	r8, r8, r11
2344	# A[2] * B[3]
2345	ldr	lr, [r2, #12]
2346	adc	r11, r0, #0
2347	umlal	r8, r11, r12, lr
2348	adds	r9, r9, r11
2349	# A[2] * B[4]
2350	ldr	lr, [r2, #16]
2351	adc	r11, r0, #0
2352	umlal	r9, r11, r12, lr
2353	adds	r10, r10, r11
2354	# A[2] * B[5]
2355	ldr	lr, [r2, #20]
2356	adc	r11, r0, #0
2357	umlal	r10, r11, r12, lr
2358	adds	r3, r3, r11
2359	# A[2] * B[6]
2360	ldr	lr, [r2, #24]
2361	adc	r11, r0, #0
2362	umlal	r3, r11, r12, lr
2363	adds	r4, r4, r11
2364	# A[2] * B[7]
2365	ldr	lr, [r2, #28]
2366	adc	r5, r0, #0
2367	umlal	r4, r5, r12, lr
2368	# A[3] * B[0]
2369	ldr	r12, [r1, #12]
2370	ldr	lr, [r2]
2371	mov	r11, #0
2372	umlal	r6, r11, r12, lr
2373	str	r6, [sp, #12]
2374	adds	r7, r7, r11
2375	# A[3] * B[1]
2376	ldr	lr, [r2, #4]
2377	adc	r11, r0, #0
2378	umlal	r7, r11, r12, lr
2379	adds	r8, r8, r11
2380	# A[3] * B[2]
2381	ldr	lr, [r2, #8]
2382	adc	r11, r0, #0
2383	umlal	r8, r11, r12, lr
2384	adds	r9, r9, r11
2385	# A[3] * B[3]
2386	ldr	lr, [r2, #12]
2387	adc	r11, r0, #0
2388	umlal	r9, r11, r12, lr
2389	adds	r10, r10, r11
2390	# A[3] * B[4]
2391	ldr	lr, [r2, #16]
2392	adc	r11, r0, #0
2393	umlal	r10, r11, r12, lr
2394	adds	r3, r3, r11
2395	# A[3] * B[5]
2396	ldr	lr, [r2, #20]
2397	adc	r11, r0, #0
2398	umlal	r3, r11, r12, lr
2399	adds	r4, r4, r11
2400	# A[3] * B[6]
2401	ldr	lr, [r2, #24]
2402	adc	r11, r0, #0
2403	umlal	r4, r11, r12, lr
2404	adds	r5, r5, r11
2405	# A[3] * B[7]
2406	ldr	lr, [r2, #28]
2407	adc	r6, r0, #0
2408	umlal	r5, r6, r12, lr
2409	# A[4] * B[0]
2410	ldr	r12, [r1, #16]
2411	ldr	lr, [r2]
2412	mov	r11, #0
2413	umlal	r7, r11, r12, lr
2414	str	r7, [sp, #16]
2415	adds	r8, r8, r11
2416	# A[4] * B[1]
2417	ldr	lr, [r2, #4]
2418	adc	r11, r0, #0
2419	umlal	r8, r11, r12, lr
2420	adds	r9, r9, r11
2421	# A[4] * B[2]
2422	ldr	lr, [r2, #8]
2423	adc	r11, r0, #0
2424	umlal	r9, r11, r12, lr
2425	adds	r10, r10, r11
2426	# A[4] * B[3]
2427	ldr	lr, [r2, #12]
2428	adc	r11, r0, #0
2429	umlal	r10, r11, r12, lr
2430	adds	r3, r3, r11
2431	# A[4] * B[4]
2432	ldr	lr, [r2, #16]
2433	adc	r11, r0, #0
2434	umlal	r3, r11, r12, lr
2435	adds	r4, r4, r11
2436	# A[4] * B[5]
2437	ldr	lr, [r2, #20]
2438	adc	r11, r0, #0
2439	umlal	r4, r11, r12, lr
2440	adds	r5, r5, r11
2441	# A[4] * B[6]
2442	ldr	lr, [r2, #24]
2443	adc	r11, r0, #0
2444	umlal	r5, r11, r12, lr
2445	adds	r6, r6, r11
2446	# A[4] * B[7]
2447	ldr	lr, [r2, #28]
2448	adc	r7, r0, #0
2449	umlal	r6, r7, r12, lr
2450	# A[5] * B[0]
2451	ldr	r12, [r1, #20]
2452	ldr	lr, [r2]
2453	mov	r11, #0
2454	umlal	r8, r11, r12, lr
2455	str	r8, [sp, #20]
2456	adds	r9, r9, r11
2457	# A[5] * B[1]
2458	ldr	lr, [r2, #4]
2459	adc	r11, r0, #0
2460	umlal	r9, r11, r12, lr
2461	adds	r10, r10, r11
2462	# A[5] * B[2]
2463	ldr	lr, [r2, #8]
2464	adc	r11, r0, #0
2465	umlal	r10, r11, r12, lr
2466	adds	r3, r3, r11
2467	# A[5] * B[3]
2468	ldr	lr, [r2, #12]
2469	adc	r11, r0, #0
2470	umlal	r3, r11, r12, lr
2471	adds	r4, r4, r11
2472	# A[5] * B[4]
2473	ldr	lr, [r2, #16]
2474	adc	r11, r0, #0
2475	umlal	r4, r11, r12, lr
2476	adds	r5, r5, r11
2477	# A[5] * B[5]
2478	ldr	lr, [r2, #20]
2479	adc	r11, r0, #0
2480	umlal	r5, r11, r12, lr
2481	adds	r6, r6, r11
2482	# A[5] * B[6]
2483	ldr	lr, [r2, #24]
2484	adc	r11, r0, #0
2485	umlal	r6, r11, r12, lr
2486	adds	r7, r7, r11
2487	# A[5] * B[7]
2488	ldr	lr, [r2, #28]
2489	adc	r8, r0, #0
2490	umlal	r7, r8, r12, lr
2491	# A[6] * B[0]
2492	ldr	r12, [r1, #24]
2493	ldr	lr, [r2]
2494	mov	r11, #0
2495	umlal	r9, r11, r12, lr
2496	str	r9, [sp, #24]
2497	adds	r10, r10, r11
2498	# A[6] * B[1]
2499	ldr	lr, [r2, #4]
2500	adc	r11, r0, #0
2501	umlal	r10, r11, r12, lr
2502	adds	r3, r3, r11
2503	# A[6] * B[2]
2504	ldr	lr, [r2, #8]
2505	adc	r11, r0, #0
2506	umlal	r3, r11, r12, lr
2507	adds	r4, r4, r11
2508	# A[6] * B[3]
2509	ldr	lr, [r2, #12]
2510	adc	r11, r0, #0
2511	umlal	r4, r11, r12, lr
2512	adds	r5, r5, r11
2513	# A[6] * B[4]
2514	ldr	lr, [r2, #16]
2515	adc	r11, r0, #0
2516	umlal	r5, r11, r12, lr
2517	adds	r6, r6, r11
2518	# A[6] * B[5]
2519	ldr	lr, [r2, #20]
2520	adc	r11, r0, #0
2521	umlal	r6, r11, r12, lr
2522	adds	r7, r7, r11
2523	# A[6] * B[6]
2524	ldr	lr, [r2, #24]
2525	adc	r11, r0, #0
2526	umlal	r7, r11, r12, lr
2527	adds	r8, r8, r11
2528	# A[6] * B[7]
2529	ldr	lr, [r2, #28]
2530	adc	r9, r0, #0
2531	umlal	r8, r9, r12, lr
2532	# A[7] * B[0]
2533	ldr	r12, [r1, #28]
2534	ldr	lr, [r2]
2535	mov	r11, #0
2536	umlal	r10, r11, r12, lr
2537	str	r10, [sp, #28]
2538	adds	r3, r3, r11
2539	# A[7] * B[1]
2540	ldr	lr, [r2, #4]
2541	adc	r11, r0, #0
2542	umlal	r3, r11, r12, lr
2543	adds	r4, r4, r11
2544	# A[7] * B[2]
2545	ldr	lr, [r2, #8]
2546	adc	r11, r0, #0
2547	umlal	r4, r11, r12, lr
2548	adds	r5, r5, r11
2549	# A[7] * B[3]
2550	ldr	lr, [r2, #12]
2551	adc	r11, r0, #0
2552	umlal	r5, r11, r12, lr
2553	adds	r6, r6, r11
2554	# A[7] * B[4]
2555	ldr	lr, [r2, #16]
2556	adc	r11, r0, #0
2557	umlal	r6, r11, r12, lr
2558	adds	r7, r7, r11
2559	# A[7] * B[5]
2560	ldr	lr, [r2, #20]
2561	adc	r11, r0, #0
2562	umlal	r7, r11, r12, lr
2563	adds	r8, r8, r11
2564	# A[7] * B[6]
2565	ldr	lr, [r2, #24]
2566	adc	r11, r0, #0
2567	umlal	r8, r11, r12, lr
2568	adds	r9, r9, r11
2569	# A[7] * B[7]
2570	ldr	lr, [r2, #28]
2571	adc	r10, r0, #0
2572	umlal	r9, r10, r12, lr
2573	# Reduce
2574	ldr	r2, [sp, #28]
2575	mov	lr, sp
2576	mov	r12, #38
2577	umull	r10, r11, r12, r10
2578	adds	r10, r10, r2
2579	adc	r11, r11, #0
2580	mov	r12, #19
2581	lsl	r11, r11, #1
2582	orr	r11, r11, r10, lsr #31
2583	mul	r11, r12, r11
2584	ldm	lr!, {r1, r2}
2585	mov	r12, #38
2586	adds	r1, r1, r11
2587	adc	r11, r0, #0
2588	umlal	r1, r11, r3, r12
2589	adds	r2, r2, r11
2590	adc	r11, r0, #0
2591	umlal	r2, r11, r4, r12
2592	ldm	lr!, {r3, r4}
2593	adds	r3, r3, r11
2594	adc	r11, r0, #0
2595	umlal	r3, r11, r5, r12
2596	adds	r4, r4, r11
2597	adc	r11, r0, #0
2598	umlal	r4, r11, r6, r12
2599	ldm	lr!, {r5, r6}
2600	adds	r5, r5, r11
2601	adc	r11, r0, #0
2602	umlal	r5, r11, r7, r12
2603	adds	r6, r6, r11
2604	adc	r11, r0, #0
2605	umlal	r6, r11, r8, r12
2606	ldm	lr!, {r7, r8}
2607	adds	r7, r7, r11
2608	adc	r11, r0, #0
2609	umlal	r7, r11, r9, r12
2610#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
2611	bic	r10, r10, #0x80000000
2612#else
2613	bfc	r10, #31, #1
2614#endif
2615	adds	r8, r10, r11
2616	# Store
2617	ldr	r0, [sp, #36]
2618	stm	r0, {r1, r2, r3, r4, r5, r6, r7, r8}
2619	add	sp, sp, #40
2620	pop	{pc}
2621	.size	fe_mul_op,.-fe_mul_op
2622#else
2623	.text
2624	.align	4
2625	.globl	fe_mul_op
2626	.type	fe_mul_op, %function
2627fe_mul_op:
2628	push	{lr}
2629	sub	sp, sp, #44
2630#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
2631	str	r0, [sp, #36]
2632	str	r1, [sp, #40]
2633#else
2634	strd	r0, r1, [sp, #36]
2635#endif
2636	mov	lr, r2
2637	ldm	r1, {r0, r1, r2, r3}
2638	ldm	lr!, {r4, r5, r6}
2639	umull	r10, r11, r0, r4
2640	umull	r12, r7, r1, r4
2641	umaal	r11, r12, r0, r5
2642	umull	r8, r9, r2, r4
2643	umaal	r12, r8, r1, r5
2644	umaal	r12, r7, r0, r6
2645	umaal	r8, r9, r3, r4
2646	stm	sp, {r10, r11, r12}
2647	umaal	r7, r8, r2, r5
2648	ldm	lr!, {r4}
2649	umull	r10, r11, r1, r6
2650	umaal	r8, r9, r2, r6
2651	umaal	r7, r10, r0, r4
2652	umaal	r8, r11, r3, r5
2653	str	r7, [sp, #12]
2654	umaal	r8, r10, r1, r4
2655	umaal	r9, r11, r3, r6
2656	umaal	r9, r10, r2, r4
2657	umaal	r10, r11, r3, r4
2658	ldm	lr, {r4, r5, r6, r7}
2659	mov	r12, #0
2660	umlal	r8, r12, r0, r4
2661	umaal	r9, r12, r1, r4
2662	umaal	r10, r12, r2, r4
2663	umaal	r11, r12, r3, r4
2664	mov	r4, #0
2665	umlal	r9, r4, r0, r5
2666	umaal	r10, r4, r1, r5
2667	umaal	r11, r4, r2, r5
2668	umaal	r12, r4, r3, r5
2669	mov	r5, #0
2670	umlal	r10, r5, r0, r6
2671	umaal	r11, r5, r1, r6
2672	umaal	r12, r5, r2, r6
2673	umaal	r4, r5, r3, r6
2674	mov	r6, #0
2675	umlal	r11, r6, r0, r7
2676	ldr	r0, [sp, #40]
2677	umaal	r12, r6, r1, r7
2678	add	r0, r0, #16
2679	umaal	r4, r6, r2, r7
2680	sub	lr, lr, #16
2681	umaal	r5, r6, r3, r7
2682	ldm	r0, {r0, r1, r2, r3}
2683	str	r6, [sp, #32]
2684	ldm	lr!, {r6}
2685	mov	r7, #0
2686	umlal	r8, r7, r0, r6
2687	umaal	r9, r7, r1, r6
2688	str	r8, [sp, #16]
2689	umaal	r10, r7, r2, r6
2690	umaal	r11, r7, r3, r6
2691	ldm	lr!, {r6}
2692	mov	r8, #0
2693	umlal	r9, r8, r0, r6
2694	umaal	r10, r8, r1, r6
2695	str	r9, [sp, #20]
2696	umaal	r11, r8, r2, r6
2697	umaal	r12, r8, r3, r6
2698	ldm	lr!, {r6}
2699	mov	r9, #0
2700	umlal	r10, r9, r0, r6
2701	umaal	r11, r9, r1, r6
2702	str	r10, [sp, #24]
2703	umaal	r12, r9, r2, r6
2704	umaal	r4, r9, r3, r6
2705	ldm	lr!, {r6}
2706	mov	r10, #0
2707	umlal	r11, r10, r0, r6
2708	umaal	r12, r10, r1, r6
2709	str	r11, [sp, #28]
2710	umaal	r4, r10, r2, r6
2711	umaal	r5, r10, r3, r6
2712	ldm	lr!, {r11}
2713	umaal	r12, r7, r0, r11
2714	umaal	r4, r7, r1, r11
2715	ldr	r6, [sp, #32]
2716	umaal	r5, r7, r2, r11
2717	umaal	r6, r7, r3, r11
2718	ldm	lr!, {r11}
2719	umaal	r4, r8, r0, r11
2720	umaal	r5, r8, r1, r11
2721	umaal	r6, r8, r2, r11
2722	umaal	r7, r8, r3, r11
2723	ldm	lr, {r11, lr}
2724	umaal	r5, r9, r0, r11
2725	umaal	r6, r10, r0, lr
2726	umaal	r6, r9, r1, r11
2727	umaal	r7, r10, r1, lr
2728	umaal	r7, r9, r2, r11
2729	umaal	r8, r10, r2, lr
2730	umaal	r8, r9, r3, r11
2731	umaal	r9, r10, r3, lr
2732	# Reduce
2733	ldr	r0, [sp, #28]
2734	mov	lr, #37
2735	umaal	r10, r0, r10, lr
2736	mov	lr, #19
2737	lsl	r0, r0, #1
2738	orr	r0, r0, r10, lsr #31
2739	mul	r11, r0, lr
2740	pop	{r0-r2}
2741	mov	lr, #38
2742	umaal	r0, r11, r12, lr
2743	umaal	r1, r11, r4, lr
2744	umaal	r2, r11, r5, lr
2745	pop	{r3-r5}
2746	umaal	r3, r11, r6, lr
2747	umaal	r4, r11, r7, lr
2748	umaal	r5, r11, r8, lr
2749	pop	{r6}
2750#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
2751	bic	r10, r10, #0x80000000
2752#else
2753	bfc	r10, #31, #1
2754#endif
2755	umaal	r6, r11, r9, lr
2756	add	r7, r10, r11
2757	ldr	lr, [sp, #8]
2758	# Store
2759	stm	lr, {r0, r1, r2, r3, r4, r5, r6, r7}
2760	add	sp, sp, #16
2761	pop	{pc}
2762	.size	fe_mul_op,.-fe_mul_op
2763#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
2764	.text
2765	.align	4
2766	.globl	fe_mul
2767	.type	fe_mul, %function
2768fe_mul:
2769	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
2770	bl	fe_mul_op
2771	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
2772	.size	fe_mul,.-fe_mul
2773#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
2774	.text
2775	.align	4
2776	.globl	fe_sq_op
2777	.type	fe_sq_op, %function
2778fe_sq_op:
2779	push	{lr}
2780	sub	sp, sp, #0x44
2781	str	r0, [sp, #64]
2782	# Square
2783	mov	r0, #0
2784	ldr	r12, [r1]
2785	# A[0] * A[1]
2786	ldr	lr, [r1, #4]
2787	umull	r4, r5, r12, lr
2788	# A[0] * A[3]
2789	ldr	lr, [r1, #12]
2790	umull	r6, r7, r12, lr
2791	# A[0] * A[5]
2792	ldr	lr, [r1, #20]
2793	umull	r8, r9, r12, lr
2794	# A[0] * A[7]
2795	ldr	lr, [r1, #28]
2796	umull	r10, r3, r12, lr
2797	# A[0] * A[2]
2798	ldr	lr, [r1, #8]
2799	mov	r11, #0
2800	umlal	r5, r11, r12, lr
2801	adds	r6, r6, r11
2802	# A[0] * A[4]
2803	ldr	lr, [r1, #16]
2804	adcs	r7, r7, #0
2805	adc	r11, r0, #0
2806	umlal	r7, r11, r12, lr
2807	adds	r8, r8, r11
2808	# A[0] * A[6]
2809	ldr	lr, [r1, #24]
2810	adcs	r9, r9, #0
2811	adc	r11, r0, #0
2812	umlal	r9, r11, r12, lr
2813	adds	r10, r10, r11
2814	adcs	r3, r3, #0
2815	str	r4, [sp, #4]
2816	str	r5, [sp, #8]
2817	# A[1] * A[2]
2818	ldr	r12, [r1, #4]
2819	ldr	lr, [r1, #8]
2820	mov	r11, #0
2821	umlal	r6, r11, r12, lr
2822	str	r6, [sp, #12]
2823	adds	r7, r7, r11
2824	# A[1] * A[3]
2825	ldr	lr, [r1, #12]
2826	adc	r11, r0, #0
2827	umlal	r7, r11, r12, lr
2828	str	r7, [sp, #16]
2829	adds	r8, r8, r11
2830	# A[1] * A[4]
2831	ldr	lr, [r1, #16]
2832	adc	r11, r0, #0
2833	umlal	r8, r11, r12, lr
2834	adds	r9, r9, r11
2835	# A[1] * A[5]
2836	ldr	lr, [r1, #20]
2837	adc	r11, r0, #0
2838	umlal	r9, r11, r12, lr
2839	adds	r10, r10, r11
2840	# A[1] * A[6]
2841	ldr	lr, [r1, #24]
2842	adc	r11, r0, #0
2843	umlal	r10, r11, r12, lr
2844	adds	r3, r3, r11
2845	# A[1] * A[7]
2846	ldr	lr, [r1, #28]
2847	adc	r4, r0, #0
2848	umlal	r3, r4, r12, lr
2849	# A[2] * A[3]
2850	ldr	r12, [r1, #8]
2851	ldr	lr, [r1, #12]
2852	mov	r11, #0
2853	umlal	r8, r11, r12, lr
2854	str	r8, [sp, #20]
2855	adds	r9, r9, r11
2856	# A[2] * A[4]
2857	ldr	lr, [r1, #16]
2858	adc	r11, r0, #0
2859	umlal	r9, r11, r12, lr
2860	str	r9, [sp, #24]
2861	adds	r10, r10, r11
2862	# A[2] * A[5]
2863	ldr	lr, [r1, #20]
2864	adc	r11, r0, #0
2865	umlal	r10, r11, r12, lr
2866	adds	r3, r3, r11
2867	# A[2] * A[6]
2868	ldr	lr, [r1, #24]
2869	adc	r11, r0, #0
2870	umlal	r3, r11, r12, lr
2871	adds	r4, r4, r11
2872	# A[2] * A[7]
2873	ldr	lr, [r1, #28]
2874	adc	r5, r0, #0
2875	umlal	r4, r5, r12, lr
2876	# A[3] * A[4]
2877	ldr	r12, [r1, #12]
2878	ldr	lr, [r1, #16]
2879	mov	r11, #0
2880	umlal	r10, r11, r12, lr
2881	str	r10, [sp, #28]
2882	adds	r3, r3, r11
2883	# A[3] * A[5]
2884	ldr	lr, [r1, #20]
2885	adc	r11, r0, #0
2886	umlal	r3, r11, r12, lr
2887	adds	r4, r4, r11
2888	# A[3] * A[6]
2889	ldr	lr, [r1, #24]
2890	adc	r11, r0, #0
2891	umlal	r4, r11, r12, lr
2892	adds	r5, r5, r11
2893	# A[3] * A[7]
2894	ldr	lr, [r1, #28]
2895	adc	r6, r0, #0
2896	umlal	r5, r6, r12, lr
2897	# A[4] * A[5]
2898	ldr	r12, [r1, #16]
2899	ldr	lr, [r1, #20]
2900	mov	r11, #0
2901	umlal	r4, r11, r12, lr
2902	adds	r5, r5, r11
2903	# A[4] * A[6]
2904	ldr	lr, [r1, #24]
2905	adc	r11, r0, #0
2906	umlal	r5, r11, r12, lr
2907	adds	r6, r6, r11
2908	# A[4] * A[7]
2909	ldr	lr, [r1, #28]
2910	adc	r7, r0, #0
2911	umlal	r6, r7, r12, lr
2912	# A[5] * A[6]
2913	ldr	r12, [r1, #20]
2914	ldr	lr, [r1, #24]
2915	mov	r11, #0
2916	umlal	r6, r11, r12, lr
2917	adds	r7, r7, r11
2918	# A[5] * A[7]
2919	ldr	lr, [r1, #28]
2920	adc	r8, r0, #0
2921	umlal	r7, r8, r12, lr
2922	# A[6] * A[7]
2923	ldr	r12, [r1, #24]
2924	ldr	lr, [r1, #28]
2925	mov	r9, #0
2926	umlal	r8, r9, r12, lr
2927	add	lr, sp, #32
2928	stm	lr, {r3, r4, r5, r6, r7, r8, r9}
2929	add	lr, sp, #4
2930	ldm	lr, {r4, r5, r6, r7, r8, r9, r10}
2931	adds	r4, r4, r4
2932	adcs	r5, r5, r5
2933	adcs	r6, r6, r6
2934	adcs	r7, r7, r7
2935	adcs	r8, r8, r8
2936	adcs	r9, r9, r9
2937	adcs	r10, r10, r10
2938	stm	lr!, {r4, r5, r6, r7, r8, r9, r10}
2939	ldm	lr, {r3, r4, r5, r6, r7, r8, r9}
2940	adcs	r3, r3, r3
2941	adcs	r4, r4, r4
2942	adcs	r5, r5, r5
2943	adcs	r6, r6, r6
2944	adcs	r7, r7, r7
2945	adcs	r8, r8, r8
2946	adcs	r9, r9, r9
2947	adc	r10, r0, #0
2948	stm	lr, {r3, r4, r5, r6, r7, r8, r9, r10}
2949	add	lr, sp, #4
2950	ldm	lr, {r4, r5, r6, r7, r8, r9, r10}
2951	mov	lr, sp
2952	# A[0] * A[0]
2953	ldr	r12, [r1]
2954	umull	r3, r11, r12, r12
2955	adds	r4, r4, r11
2956	# A[1] * A[1]
2957	ldr	r12, [r1, #4]
2958	adcs	r5, r5, #0
2959	adc	r11, r0, #0
2960	umlal	r5, r11, r12, r12
2961	adds	r6, r6, r11
2962	# A[2] * A[2]
2963	ldr	r12, [r1, #8]
2964	adcs	r7, r7, #0
2965	adc	r11, r0, #0
2966	umlal	r7, r11, r12, r12
2967	adds	r8, r8, r11
2968	# A[3] * A[3]
2969	ldr	r12, [r1, #12]
2970	adcs	r9, r9, #0
2971	adc	r11, r0, #0
2972	umlal	r9, r11, r12, r12
2973	adds	r10, r10, r11
2974	stm	lr!, {r3, r4, r5, r6, r7, r8, r9, r10}
2975	ldm	lr, {r3, r4, r5, r6, r7, r8, r9, r10}
2976	# A[4] * A[4]
2977	ldr	r12, [r1, #16]
2978	adcs	r3, r3, #0
2979	adc	r11, r0, #0
2980	umlal	r3, r11, r12, r12
2981	adds	r4, r4, r11
2982	# A[5] * A[5]
2983	ldr	r12, [r1, #20]
2984	adcs	r5, r5, #0
2985	adc	r11, r0, #0
2986	umlal	r5, r11, r12, r12
2987	adds	r6, r6, r11
2988	# A[6] * A[6]
2989	ldr	r12, [r1, #24]
2990	adcs	r7, r7, #0
2991	adc	r11, r0, #0
2992	umlal	r7, r11, r12, r12
2993	adds	r8, r8, r11
2994	# A[7] * A[7]
2995	ldr	r12, [r1, #28]
2996	adcs	r9, r9, #0
2997	adc	r10, r10, #0
2998	umlal	r9, r10, r12, r12
2999	# Reduce
3000	ldr	r2, [sp, #28]
3001	mov	lr, sp
3002	mov	r12, #38
3003	umull	r10, r11, r12, r10
3004	adds	r10, r10, r2
3005	adc	r11, r11, #0
3006	mov	r12, #19
3007	lsl	r11, r11, #1
3008	orr	r11, r11, r10, lsr #31
3009	mul	r11, r12, r11
3010	ldm	lr!, {r1, r2}
3011	mov	r12, #38
3012	adds	r1, r1, r11
3013	adc	r11, r0, #0
3014	umlal	r1, r11, r3, r12
3015	adds	r2, r2, r11
3016	adc	r11, r0, #0
3017	umlal	r2, r11, r4, r12
3018	ldm	lr!, {r3, r4}
3019	adds	r3, r3, r11
3020	adc	r11, r0, #0
3021	umlal	r3, r11, r5, r12
3022	adds	r4, r4, r11
3023	adc	r11, r0, #0
3024	umlal	r4, r11, r6, r12
3025	ldm	lr!, {r5, r6}
3026	adds	r5, r5, r11
3027	adc	r11, r0, #0
3028	umlal	r5, r11, r7, r12
3029	adds	r6, r6, r11
3030	adc	r11, r0, #0
3031	umlal	r6, r11, r8, r12
3032	ldm	lr!, {r7, r8}
3033	adds	r7, r7, r11
3034	adc	r11, r0, #0
3035	umlal	r7, r11, r9, r12
3036#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
3037	bic	r10, r10, #0x80000000
3038#else
3039	bfc	r10, #31, #1
3040#endif
3041	adds	r8, r10, r11
3042	# Store
3043	ldr	r0, [sp, #64]
3044	stm	r0, {r1, r2, r3, r4, r5, r6, r7, r8}
3045	add	sp, sp, #0x44
3046	pop	{pc}
3047	.size	fe_sq_op,.-fe_sq_op
3048#else
3049	.text
3050	.align	4
3051	.globl	fe_sq_op
3052	.type	fe_sq_op, %function
3053fe_sq_op:
3054	push	{lr}
3055	sub	sp, sp, #32
3056	str	r0, [sp, #28]
3057	ldm	r1, {r0, r1, r2, r3, r4, r5, r6, r7}
3058	# Square
3059	umull	r9, r10, r0, r0
3060	umull	r11, r12, r0, r1
3061	adds	r11, r11, r11
3062	mov	lr, #0
3063	umaal	r10, r11, lr, lr
3064	stm	sp, {r9, r10}
3065	mov	r8, lr
3066	umaal	r8, r12, r0, r2
3067	adcs	r8, r8, r8
3068	umaal	r8, r11, r1, r1
3069	umull	r9, r10, r0, r3
3070	umaal	r9, r12, r1, r2
3071	adcs	r9, r9, r9
3072	umaal	r9, r11, lr, lr
3073#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
3074	str	r8, [sp, #8]
3075	str	r9, [sp, #12]
3076#else
3077	strd	r8, r9, [sp, #8]
3078#endif
3079	mov	r9, lr
3080	umaal	r9, r10, r0, r4
3081	umaal	r9, r12, r1, r3
3082	adcs	r9, r9, r9
3083	umaal	r9, r11, r2, r2
3084	str	r9, [sp, #16]
3085	umull	r9, r8, r0, r5
3086	umaal	r9, r12, r1, r4
3087	umaal	r9, r10, r2, r3
3088	adcs	r9, r9, r9
3089	umaal	r9, r11, lr, lr
3090	str	r9, [sp, #20]
3091	mov	r9, lr
3092	umaal	r9, r8, r0, r6
3093	umaal	r9, r12, r1, r5
3094	umaal	r9, r10, r2, r4
3095	adcs	r9, r9, r9
3096	umaal	r9, r11, r3, r3
3097	str	r9, [sp, #24]
3098	umull	r0, r9, r0, r7
3099	umaal	r0, r8, r1, r6
3100	umaal	r0, r12, r2, r5
3101	umaal	r0, r10, r3, r4
3102	adcs	r0, r0, r0
3103	umaal	r0, r11, lr, lr
3104	# R[7] = r0
3105	umaal	r9, r8, r1, r7
3106	umaal	r9, r10, r2, r6
3107	umaal	r12, r9, r3, r5
3108	adcs	r12, r12, r12
3109	umaal	r12, r11, r4, r4
3110	# R[8] = r12
3111	umaal	r9, r8, r2, r7
3112	umaal	r10, r9, r3, r6
3113	mov	r2, lr
3114	umaal	r10, r2, r4, r5
3115	adcs	r10, r10, r10
3116	umaal	r11, r10, lr, lr
3117	# R[9] = r11
3118	umaal	r2, r8, r3, r7
3119	umaal	r2, r9, r4, r6
3120	adcs	r3, r2, r2
3121	umaal	r10, r3, r5, r5
3122	# R[10] = r10
3123	mov	r1, lr
3124	umaal	r1, r8, r4, r7
3125	umaal	r1, r9, r5, r6
3126	adcs	r4, r1, r1
3127	umaal	r3, r4, lr, lr
3128	# R[11] = r3
3129	umaal	r8, r9, r5, r7
3130	adcs	r8, r8, r8
3131	umaal	r4, r8, r6, r6
3132	# R[12] = r4
3133	mov	r5, lr
3134	umaal	r5, r9, r6, r7
3135	adcs	r5, r5, r5
3136	umaal	r8, r5, lr, lr
3137	# R[13] = r8
3138	adcs	r9, r9, r9
3139	umaal	r9, r5, r7, r7
3140	adcs	r7, r5, lr
3141	# R[14] = r9
3142	# R[15] = r7
3143	# Reduce
3144	mov	r6, #37
3145	umaal	r7, r0, r7, r6
3146	mov	r6, #19
3147	lsl	r0, r0, #1
3148	orr	r0, r0, r7, lsr #31
3149	mul	lr, r0, r6
3150	pop	{r0-r1}
3151	mov	r6, #38
3152	umaal	r0, lr, r12, r6
3153	umaal	r1, lr, r11, r6
3154	mov	r12, r3
3155	mov	r11, r4
3156	pop	{r2-r4}
3157	umaal	r2, lr, r10, r6
3158	umaal	r3, lr, r12, r6
3159	umaal	r4, lr, r11, r6
3160	mov	r12, r6
3161	pop	{r5-r6}
3162	umaal	r5, lr, r8, r12
3163#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
3164	bic	r7, r7, #0x80000000
3165#else
3166	bfc	r7, #31, #1
3167#endif
3168	umaal	r6, lr, r9, r12
3169	add	r7, r7, lr
3170	pop	{lr}
3171	# Store
3172	stm	lr, {r0, r1, r2, r3, r4, r5, r6, r7}
3173	pop	{pc}
3174	.size	fe_sq_op,.-fe_sq_op
3175#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
3176	.text
3177	.align	4
3178	.globl	fe_sq
3179	.type	fe_sq, %function
3180fe_sq:
3181	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
3182	bl	fe_sq_op
3183	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
3184	.size	fe_sq,.-fe_sq
3185#ifdef HAVE_CURVE25519
3186#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
3187	.text
3188	.align	4
3189	.globl	fe_mul121666
3190	.type	fe_mul121666, %function
3191fe_mul121666:
3192	push	{r4, r5, r6, r7, r8, r9, r10, lr}
3193	# Multiply by 121666
3194	ldm	r1, {r2, r3, r4, r5, r6, r7, r8, r9}
3195#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
3196	mov	r10, #0x42
3197	orr	r10, r10, #0x10000
3198	orr	r10, r10, #0xdb00
3199#else
3200#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
3201	mov	r10, #0x42
3202	orr	r10, r10, #0xdb00
3203#else
3204	mov	r10, #0xdb42
3205#endif
3206#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
3207	orr	r10, r10, #0x10000
3208#else
3209	movt	r10, #0x1
3210#endif
3211#endif
3212	umull	r2, r12, r10, r2
3213	umull	r3, lr, r10, r3
3214	adds	r3, r3, r12
3215	adc	lr, lr, #0
3216	umull	r4, r12, r10, r4
3217	adds	r4, r4, lr
3218	adc	r12, r12, #0
3219	umull	r5, lr, r10, r5
3220	adds	r5, r5, r12
3221	adc	lr, lr, #0
3222	umull	r6, r12, r10, r6
3223	adds	r6, r6, lr
3224	adc	r12, r12, #0
3225	umull	r7, lr, r10, r7
3226	adds	r7, r7, r12
3227	adc	lr, lr, #0
3228	umull	r8, r12, r10, r8
3229	adds	r8, r8, lr
3230	adc	r12, r12, #0
3231	umull	r9, lr, r10, r9
3232	adds	r9, r9, r12
3233	mov	r10, #19
3234	adc	lr, lr, #0
3235	lsl	lr, lr, #1
3236	orr	lr, lr, r9, lsr #31
3237	mul	lr, r10, lr
3238	adds	r2, r2, lr
3239	adcs	r3, r3, #0
3240	adcs	r4, r4, #0
3241	adcs	r5, r5, #0
3242	adcs	r6, r6, #0
3243	adcs	r7, r7, #0
3244#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
3245	bic	r9, r9, #0x80000000
3246#else
3247	bfc	r9, #31, #1
3248#endif
3249	adcs	r8, r8, #0
3250	adc	r9, r9, #0
3251	stm	r0, {r2, r3, r4, r5, r6, r7, r8, r9}
3252	pop	{r4, r5, r6, r7, r8, r9, r10, pc}
3253	.size	fe_mul121666,.-fe_mul121666
3254#else
3255	.text
3256	.align	4
3257	.globl	fe_mul121666
3258	.type	fe_mul121666, %function
3259fe_mul121666:
3260	push	{r4, r5, r6, r7, r8, r9, r10, lr}
3261	# Multiply by 121666
3262	ldm	r1, {r2, r3, r4, r5, r6, r7, r8, r9}
3263#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
3264	mov	lr, #0x42
3265	orr	lr, lr, #0x10000
3266	orr	lr, lr, #0xdb00
3267#else
3268#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
3269	mov	lr, #0x42
3270	orr	lr, lr, #0xdb00
3271#else
3272	mov	lr, #0xdb42
3273#endif
3274#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
3275	orr	lr, lr, #0x10000
3276#else
3277	movt	lr, #0x1
3278#endif
3279#endif
3280	umull	r2, r10, lr, r2
3281	sub	r12, lr, #1
3282	umaal	r3, r10, r12, r3
3283	umaal	r4, r10, r12, r4
3284	umaal	r5, r10, r12, r5
3285	umaal	r6, r10, r12, r6
3286	umaal	r7, r10, r12, r7
3287	umaal	r8, r10, r12, r8
3288	mov	lr, #19
3289	umaal	r9, r10, r12, r9
3290	lsl	r10, r10, #1
3291	orr	r10, r10, r9, lsr #31
3292	mul	r10, lr, r10
3293	adds	r2, r2, r10
3294	adcs	r3, r3, #0
3295	adcs	r4, r4, #0
3296	adcs	r5, r5, #0
3297	adcs	r6, r6, #0
3298	adcs	r7, r7, #0
3299#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
3300	bic	r9, r9, #0x80000000
3301#else
3302	bfc	r9, #31, #1
3303#endif
3304	adcs	r8, r8, #0
3305	adc	r9, r9, #0
3306	stm	r0, {r2, r3, r4, r5, r6, r7, r8, r9}
3307	pop	{r4, r5, r6, r7, r8, r9, r10, pc}
3308	.size	fe_mul121666,.-fe_mul121666
3309#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
3310#ifndef WC_NO_CACHE_RESISTANT
3311	.text
3312	.align	4
3313	.globl	curve25519
3314	.type	curve25519, %function
3315curve25519:
3316	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
3317	sub	sp, sp, #0xbc
3318	str	r0, [sp, #160]
3319	str	r1, [sp, #164]
3320	str	r2, [sp, #168]
3321	mov	r1, #0
3322	str	r1, [sp, #172]
3323	mov	r4, #1
3324	mov	r5, #0
3325	mov	r6, #0
3326	mov	r7, #0
3327	mov	r8, #0
3328	mov	r9, #0
3329	mov	r10, #0
3330	mov	r11, #0
3331	stm	r0, {r4, r5, r6, r7, r8, r9, r10, r11}
3332	add	r3, sp, #32
3333	stm	r3, {r4, r5, r6, r7, r8, r9, r10, r11}
3334	mov	r4, #0
3335	mov	r3, sp
3336	stm	r3, {r4, r5, r6, r7, r8, r9, r10, r11}
3337	add	r3, sp, #0x40
3338	# Copy
3339	ldm	r2, {r4, r5, r6, r7, r8, r9, r10, r11}
3340	stm	r3, {r4, r5, r6, r7, r8, r9, r10, r11}
3341	mov	r1, #30
3342	str	r1, [sp, #180]
3343	mov	r2, #28
3344	str	r2, [sp, #176]
3345L_curve25519_words:
3346L_curve25519_bits:
3347	ldr	r1, [sp, #164]
3348	ldr	r2, [r1, r2]
3349	ldr	r1, [sp, #180]
3350	lsr	r2, r2, r1
3351	and	r2, r2, #1
3352	str	r2, [sp, #184]
3353	ldr	r1, [sp, #172]
3354	eor	r1, r1, r2
3355	str	r1, [sp, #172]
3356	ldr	r0, [sp, #160]
3357	# Conditional Swap
3358	rsb	r1, r1, #0
3359	mov	r3, r0
3360	add	r12, sp, #0x40
3361	ldm	r3, {r4, r5}
3362	ldm	r12, {r6, r7}
3363	eor	r8, r4, r6
3364	eor	r9, r5, r7
3365	and	r8, r8, r1
3366	and	r9, r9, r1
3367	eor	r4, r4, r8
3368	eor	r5, r5, r9
3369	eor	r6, r6, r8
3370	eor	r7, r7, r9
3371	stm	r3!, {r4, r5}
3372	stm	r12!, {r6, r7}
3373	ldm	r3, {r4, r5}
3374	ldm	r12, {r6, r7}
3375	eor	r8, r4, r6
3376	eor	r9, r5, r7
3377	and	r8, r8, r1
3378	and	r9, r9, r1
3379	eor	r4, r4, r8
3380	eor	r5, r5, r9
3381	eor	r6, r6, r8
3382	eor	r7, r7, r9
3383	stm	r3!, {r4, r5}
3384	stm	r12!, {r6, r7}
3385	ldm	r3, {r4, r5}
3386	ldm	r12, {r6, r7}
3387	eor	r8, r4, r6
3388	eor	r9, r5, r7
3389	and	r8, r8, r1
3390	and	r9, r9, r1
3391	eor	r4, r4, r8
3392	eor	r5, r5, r9
3393	eor	r6, r6, r8
3394	eor	r7, r7, r9
3395	stm	r3!, {r4, r5}
3396	stm	r12!, {r6, r7}
3397	ldm	r3, {r4, r5}
3398	ldm	r12, {r6, r7}
3399	eor	r8, r4, r6
3400	eor	r9, r5, r7
3401	and	r8, r8, r1
3402	and	r9, r9, r1
3403	eor	r4, r4, r8
3404	eor	r5, r5, r9
3405	eor	r6, r6, r8
3406	eor	r7, r7, r9
3407	stm	r3!, {r4, r5}
3408	stm	r12!, {r6, r7}
3409	ldr	r1, [sp, #172]
3410	# Conditional Swap
3411	rsb	r1, r1, #0
3412	mov	r3, sp
3413	add	r12, sp, #32
3414	ldm	r3, {r4, r5}
3415	ldm	r12, {r6, r7}
3416	eor	r8, r4, r6
3417	eor	r9, r5, r7
3418	and	r8, r8, r1
3419	and	r9, r9, r1
3420	eor	r4, r4, r8
3421	eor	r5, r5, r9
3422	eor	r6, r6, r8
3423	eor	r7, r7, r9
3424	stm	r3!, {r4, r5}
3425	stm	r12!, {r6, r7}
3426	ldm	r3, {r4, r5}
3427	ldm	r12, {r6, r7}
3428	eor	r8, r4, r6
3429	eor	r9, r5, r7
3430	and	r8, r8, r1
3431	and	r9, r9, r1
3432	eor	r4, r4, r8
3433	eor	r5, r5, r9
3434	eor	r6, r6, r8
3435	eor	r7, r7, r9
3436	stm	r3!, {r4, r5}
3437	stm	r12!, {r6, r7}
3438	ldm	r3, {r4, r5}
3439	ldm	r12, {r6, r7}
3440	eor	r8, r4, r6
3441	eor	r9, r5, r7
3442	and	r8, r8, r1
3443	and	r9, r9, r1
3444	eor	r4, r4, r8
3445	eor	r5, r5, r9
3446	eor	r6, r6, r8
3447	eor	r7, r7, r9
3448	stm	r3!, {r4, r5}
3449	stm	r12!, {r6, r7}
3450	ldm	r3, {r4, r5}
3451	ldm	r12, {r6, r7}
3452	eor	r8, r4, r6
3453	eor	r9, r5, r7
3454	and	r8, r8, r1
3455	and	r9, r9, r1
3456	eor	r4, r4, r8
3457	eor	r5, r5, r9
3458	eor	r6, r6, r8
3459	eor	r7, r7, r9
3460	stm	r3!, {r4, r5}
3461	stm	r12!, {r6, r7}
3462	ldr	r1, [sp, #184]
3463	str	r1, [sp, #172]
3464	mov	r3, sp
3465	ldr	r2, [sp, #160]
3466	add	r1, sp, #0x80
3467	ldr	r0, [sp, #160]
3468	bl	fe_add_sub_op
3469	add	r3, sp, #32
3470	add	r2, sp, #0x40
3471	add	r1, sp, #0x60
3472	mov	r0, sp
3473	bl	fe_add_sub_op
3474	ldr	r2, [sp, #160]
3475	add	r1, sp, #0x60
3476	add	r0, sp, #32
3477	bl	fe_mul_op
3478	add	r2, sp, #0x80
3479	mov	r1, sp
3480	mov	r0, sp
3481	bl	fe_mul_op
3482	add	r1, sp, #0x80
3483	add	r0, sp, #0x80
3484	bl	fe_sq_op
3485	ldr	r1, [sp, #160]
3486	add	r0, sp, #0x60
3487	bl	fe_sq_op
3488	mov	r3, sp
3489	add	r2, sp, #32
3490	mov	r1, sp
3491	add	r0, sp, #0x40
3492	bl	fe_add_sub_op
3493	add	r2, sp, #0x80
3494	add	r1, sp, #0x60
3495	ldr	r0, [sp, #160]
3496	bl	fe_mul_op
3497	add	r2, sp, #0x80
3498	add	r1, sp, #0x60
3499	add	r0, sp, #0x60
3500	bl	fe_sub_op
3501	mov	r1, sp
3502	mov	r0, sp
3503	bl	fe_sq_op
3504	add	r1, sp, #0x60
3505	add	r0, sp, #32
3506	bl	fe_mul121666
3507	add	r1, sp, #0x40
3508	add	r0, sp, #0x40
3509	bl	fe_sq_op
3510	add	r2, sp, #32
3511	add	r1, sp, #0x80
3512	add	r0, sp, #0x80
3513	bl	fe_add_op
3514	mov	r2, sp
3515	ldr	r1, [sp, #168]
3516	add	r0, sp, #32
3517	bl	fe_mul_op
3518	add	r2, sp, #0x80
3519	add	r1, sp, #0x60
3520	mov	r0, sp
3521	bl	fe_mul_op
3522	ldr	r2, [sp, #176]
3523	ldr	r1, [sp, #180]
3524	subs	r1, r1, #1
3525	str	r1, [sp, #180]
3526	bge	L_curve25519_bits
3527	mov	r1, #31
3528	str	r1, [sp, #180]
3529	subs	r2, r2, #4
3530	str	r2, [sp, #176]
3531	bge	L_curve25519_words
3532	# Invert
3533	add	r1, sp, #0
3534	add	r0, sp, #32
3535	bl	fe_sq_op
3536	add	r1, sp, #32
3537	add	r0, sp, #0x40
3538	bl	fe_sq_op
3539	add	r1, sp, #0x40
3540	add	r0, sp, #0x40
3541	bl	fe_sq_op
3542	add	r2, sp, #0x40
3543	add	r1, sp, #0
3544	add	r0, sp, #0x40
3545	bl	fe_mul_op
3546	add	r2, sp, #0x40
3547	add	r1, sp, #32
3548	add	r0, sp, #32
3549	bl	fe_mul_op
3550	add	r1, sp, #32
3551	add	r0, sp, #0x60
3552	bl	fe_sq_op
3553	add	r2, sp, #0x60
3554	add	r1, sp, #0x40
3555	add	r0, sp, #0x40
3556	bl	fe_mul_op
3557	add	r1, sp, #0x40
3558	add	r0, sp, #0x60
3559	bl	fe_sq_op
3560	mov	r12, #4
3561L_curve25519_inv_1:
3562	add	r1, sp, #0x60
3563	add	r0, sp, #0x60
3564	push	{r12}
3565	bl	fe_sq_op
3566	pop	{r12}
3567	subs	r12, r12, #1
3568	bne	L_curve25519_inv_1
3569	add	r2, sp, #0x40
3570	add	r1, sp, #0x60
3571	add	r0, sp, #0x40
3572	bl	fe_mul_op
3573	add	r1, sp, #0x40
3574	add	r0, sp, #0x60
3575	bl	fe_sq_op
3576	mov	r12, #9
3577L_curve25519_inv_2:
3578	add	r1, sp, #0x60
3579	add	r0, sp, #0x60
3580	push	{r12}
3581	bl	fe_sq_op
3582	pop	{r12}
3583	subs	r12, r12, #1
3584	bne	L_curve25519_inv_2
3585	add	r2, sp, #0x40
3586	add	r1, sp, #0x60
3587	add	r0, sp, #0x60
3588	bl	fe_mul_op
3589	add	r1, sp, #0x60
3590	add	r0, sp, #0x80
3591	bl	fe_sq_op
3592	mov	r12, #19
3593L_curve25519_inv_3:
3594	add	r1, sp, #0x80
3595	add	r0, sp, #0x80
3596	push	{r12}
3597	bl	fe_sq_op
3598	pop	{r12}
3599	subs	r12, r12, #1
3600	bne	L_curve25519_inv_3
3601	add	r2, sp, #0x60
3602	add	r1, sp, #0x80
3603	add	r0, sp, #0x60
3604	bl	fe_mul_op
3605	mov	r12, #10
3606L_curve25519_inv_4:
3607	add	r1, sp, #0x60
3608	add	r0, sp, #0x60
3609	push	{r12}
3610	bl	fe_sq_op
3611	pop	{r12}
3612	subs	r12, r12, #1
3613	bne	L_curve25519_inv_4
3614	add	r2, sp, #0x40
3615	add	r1, sp, #0x60
3616	add	r0, sp, #0x40
3617	bl	fe_mul_op
3618	add	r1, sp, #0x40
3619	add	r0, sp, #0x60
3620	bl	fe_sq_op
3621	mov	r12, #49
3622L_curve25519_inv_5:
3623	add	r1, sp, #0x60
3624	add	r0, sp, #0x60
3625	push	{r12}
3626	bl	fe_sq_op
3627	pop	{r12}
3628	subs	r12, r12, #1
3629	bne	L_curve25519_inv_5
3630	add	r2, sp, #0x40
3631	add	r1, sp, #0x60
3632	add	r0, sp, #0x60
3633	bl	fe_mul_op
3634	add	r1, sp, #0x60
3635	add	r0, sp, #0x80
3636	bl	fe_sq_op
3637	mov	r12, #0x63
3638L_curve25519_inv_6:
3639	add	r1, sp, #0x80
3640	add	r0, sp, #0x80
3641	push	{r12}
3642	bl	fe_sq_op
3643	pop	{r12}
3644	subs	r12, r12, #1
3645	bne	L_curve25519_inv_6
3646	add	r2, sp, #0x60
3647	add	r1, sp, #0x80
3648	add	r0, sp, #0x60
3649	bl	fe_mul_op
3650	mov	r12, #50
3651L_curve25519_inv_7:
3652	add	r1, sp, #0x60
3653	add	r0, sp, #0x60
3654	push	{r12}
3655	bl	fe_sq_op
3656	pop	{r12}
3657	subs	r12, r12, #1
3658	bne	L_curve25519_inv_7
3659	add	r2, sp, #0x40
3660	add	r1, sp, #0x60
3661	add	r0, sp, #0x40
3662	bl	fe_mul_op
3663	mov	r12, #5
3664L_curve25519_inv_8:
3665	add	r1, sp, #0x40
3666	add	r0, sp, #0x40
3667	push	{r12}
3668	bl	fe_sq_op
3669	pop	{r12}
3670	subs	r12, r12, #1
3671	bne	L_curve25519_inv_8
3672	add	r2, sp, #32
3673	add	r1, sp, #0x40
3674	add	r0, sp, #0
3675	bl	fe_mul_op
3676	mov	r2, sp
3677	ldr	r1, [sp, #160]
3678	ldr	r0, [sp, #160]
3679	bl	fe_mul_op
3680	mov	r0, #0
3681	add	sp, sp, #0xbc
3682	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
3683	.size	curve25519,.-curve25519
3684#else
3685	.text
3686	.align	4
3687	.globl	curve25519
3688	.type	curve25519, %function
3689curve25519:
3690	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
3691	sub	sp, sp, #0xc0
3692	str	r0, [sp, #176]
3693	str	r1, [sp, #160]
3694	str	r2, [sp, #172]
3695	add	r5, sp, #0x40
3696	add	r4, sp, #32
3697	str	sp, [sp, #184]
3698	str	r5, [sp, #180]
3699	str	r4, [sp, #188]
3700	mov	r1, #0
3701	str	r1, [sp, #164]
3702	mov	r4, #1
3703	mov	r5, #0
3704	mov	r6, #0
3705	mov	r7, #0
3706	mov	r8, #0
3707	mov	r9, #0
3708	mov	r10, #0
3709	mov	r11, #0
3710	stm	r0, {r4, r5, r6, r7, r8, r9, r10, r11}
3711	add	r3, sp, #32
3712	stm	r3, {r4, r5, r6, r7, r8, r9, r10, r11}
3713	mov	r4, #0
3714	mov	r3, sp
3715	stm	r3, {r4, r5, r6, r7, r8, r9, r10, r11}
3716	add	r3, sp, #0x40
3717	# Copy
3718	ldm	r2, {r4, r5, r6, r7, r8, r9, r10, r11}
3719	stm	r3, {r4, r5, r6, r7, r8, r9, r10, r11}
3720	mov	r2, #0xfe
3721L_curve25519_bits:
3722	str	r2, [sp, #168]
3723	ldr	r1, [sp, #160]
3724	and	r4, r2, #31
3725	lsr	r2, r2, #5
3726	ldr	r2, [r1, r2, lsl #2]
3727	rsb	r4, r4, #31
3728	lsl	r2, r2, r4
3729	ldr	r1, [sp, #164]
3730	eor	r1, r1, r2
3731	asr	r1, r1, #31
3732	str	r2, [sp, #164]
3733	# Conditional Swap
3734	add	r11, sp, #0xb0
3735	ldm	r11, {r4, r5, r6, r7}
3736	eor	r8, r4, r5
3737	eor	r9, r6, r7
3738	and	r8, r8, r1
3739	and	r9, r9, r1
3740	eor	r4, r4, r8
3741	eor	r5, r5, r8
3742	eor	r6, r6, r9
3743	eor	r7, r7, r9
3744	stm	r11, {r4, r5, r6, r7}
3745	# Ladder step
3746	ldr	r3, [sp, #184]
3747	ldr	r2, [sp, #176]
3748	add	r1, sp, #0x80
3749	ldr	r0, [sp, #176]
3750	bl	fe_add_sub_op
3751	ldr	r3, [sp, #188]
3752	ldr	r2, [sp, #180]
3753	add	r1, sp, #0x60
3754	ldr	r0, [sp, #184]
3755	bl	fe_add_sub_op
3756	ldr	r2, [sp, #176]
3757	add	r1, sp, #0x60
3758	ldr	r0, [sp, #188]
3759	bl	fe_mul_op
3760	add	r2, sp, #0x80
3761	ldr	r1, [sp, #184]
3762	ldr	r0, [sp, #184]
3763	bl	fe_mul_op
3764	add	r1, sp, #0x80
3765	add	r0, sp, #0x60
3766	bl	fe_sq_op
3767	ldr	r1, [sp, #176]
3768	add	r0, sp, #0x80
3769	bl	fe_sq_op
3770	ldr	r3, [sp, #184]
3771	ldr	r2, [sp, #188]
3772	ldr	r1, [sp, #184]
3773	ldr	r0, [sp, #180]
3774	bl	fe_add_sub_op
3775	add	r2, sp, #0x60
3776	add	r1, sp, #0x80
3777	ldr	r0, [sp, #176]
3778	bl	fe_mul_op
3779	add	r2, sp, #0x60
3780	add	r1, sp, #0x80
3781	add	r0, sp, #0x80
3782	bl	fe_sub_op
3783	ldr	r1, [sp, #184]
3784	ldr	r0, [sp, #184]
3785	bl	fe_sq_op
3786	add	r1, sp, #0x80
3787	ldr	r0, [sp, #188]
3788	bl	fe_mul121666
3789	ldr	r1, [sp, #180]
3790	ldr	r0, [sp, #180]
3791	bl	fe_sq_op
3792	ldr	r2, [sp, #188]
3793	add	r1, sp, #0x60
3794	add	r0, sp, #0x60
3795	bl	fe_add_op
3796	ldr	r2, [sp, #184]
3797	ldr	r1, [sp, #172]
3798	ldr	r0, [sp, #188]
3799	bl	fe_mul_op
3800	add	r2, sp, #0x60
3801	add	r1, sp, #0x80
3802	ldr	r0, [sp, #184]
3803	bl	fe_mul_op
3804	ldr	r2, [sp, #168]
3805	subs	r2, r2, #1
3806	bge	L_curve25519_bits
3807	ldr	r1, [sp, #184]
3808	# Copy
3809	ldm	r1, {r4, r5, r6, r7, r8, r9, r10, r11}
3810	stm	sp, {r4, r5, r6, r7, r8, r9, r10, r11}
3811	# Invert
3812	add	r1, sp, #0
3813	add	r0, sp, #32
3814	bl	fe_sq_op
3815	add	r1, sp, #32
3816	add	r0, sp, #0x40
3817	bl	fe_sq_op
3818	add	r1, sp, #0x40
3819	add	r0, sp, #0x40
3820	bl	fe_sq_op
3821	add	r2, sp, #0x40
3822	add	r1, sp, #0
3823	add	r0, sp, #0x40
3824	bl	fe_mul_op
3825	add	r2, sp, #0x40
3826	add	r1, sp, #32
3827	add	r0, sp, #32
3828	bl	fe_mul_op
3829	add	r1, sp, #32
3830	add	r0, sp, #0x60
3831	bl	fe_sq_op
3832	add	r2, sp, #0x60
3833	add	r1, sp, #0x40
3834	add	r0, sp, #0x40
3835	bl	fe_mul_op
3836	add	r1, sp, #0x40
3837	add	r0, sp, #0x60
3838	bl	fe_sq_op
3839	mov	r12, #4
3840L_curve25519_inv_1:
3841	add	r1, sp, #0x60
3842	add	r0, sp, #0x60
3843	push	{r12}
3844	bl	fe_sq_op
3845	pop	{r12}
3846	subs	r12, r12, #1
3847	bne	L_curve25519_inv_1
3848	add	r2, sp, #0x40
3849	add	r1, sp, #0x60
3850	add	r0, sp, #0x40
3851	bl	fe_mul_op
3852	add	r1, sp, #0x40
3853	add	r0, sp, #0x60
3854	bl	fe_sq_op
3855	mov	r12, #9
3856L_curve25519_inv_2:
3857	add	r1, sp, #0x60
3858	add	r0, sp, #0x60
3859	push	{r12}
3860	bl	fe_sq_op
3861	pop	{r12}
3862	subs	r12, r12, #1
3863	bne	L_curve25519_inv_2
3864	add	r2, sp, #0x40
3865	add	r1, sp, #0x60
3866	add	r0, sp, #0x60
3867	bl	fe_mul_op
3868	add	r1, sp, #0x60
3869	add	r0, sp, #0x80
3870	bl	fe_sq_op
3871	mov	r12, #19
3872L_curve25519_inv_3:
3873	add	r1, sp, #0x80
3874	add	r0, sp, #0x80
3875	push	{r12}
3876	bl	fe_sq_op
3877	pop	{r12}
3878	subs	r12, r12, #1
3879	bne	L_curve25519_inv_3
3880	add	r2, sp, #0x60
3881	add	r1, sp, #0x80
3882	add	r0, sp, #0x60
3883	bl	fe_mul_op
3884	mov	r12, #10
3885L_curve25519_inv_4:
3886	add	r1, sp, #0x60
3887	add	r0, sp, #0x60
3888	push	{r12}
3889	bl	fe_sq_op
3890	pop	{r12}
3891	subs	r12, r12, #1
3892	bne	L_curve25519_inv_4
3893	add	r2, sp, #0x40
3894	add	r1, sp, #0x60
3895	add	r0, sp, #0x40
3896	bl	fe_mul_op
3897	add	r1, sp, #0x40
3898	add	r0, sp, #0x60
3899	bl	fe_sq_op
3900	mov	r12, #49
3901L_curve25519_inv_5:
3902	add	r1, sp, #0x60
3903	add	r0, sp, #0x60
3904	push	{r12}
3905	bl	fe_sq_op
3906	pop	{r12}
3907	subs	r12, r12, #1
3908	bne	L_curve25519_inv_5
3909	add	r2, sp, #0x40
3910	add	r1, sp, #0x60
3911	add	r0, sp, #0x60
3912	bl	fe_mul_op
3913	add	r1, sp, #0x60
3914	add	r0, sp, #0x80
3915	bl	fe_sq_op
3916	mov	r12, #0x63
3917L_curve25519_inv_6:
3918	add	r1, sp, #0x80
3919	add	r0, sp, #0x80
3920	push	{r12}
3921	bl	fe_sq_op
3922	pop	{r12}
3923	subs	r12, r12, #1
3924	bne	L_curve25519_inv_6
3925	add	r2, sp, #0x60
3926	add	r1, sp, #0x80
3927	add	r0, sp, #0x60
3928	bl	fe_mul_op
3929	mov	r12, #50
3930L_curve25519_inv_7:
3931	add	r1, sp, #0x60
3932	add	r0, sp, #0x60
3933	push	{r12}
3934	bl	fe_sq_op
3935	pop	{r12}
3936	subs	r12, r12, #1
3937	bne	L_curve25519_inv_7
3938	add	r2, sp, #0x40
3939	add	r1, sp, #0x60
3940	add	r0, sp, #0x40
3941	bl	fe_mul_op
3942	mov	r12, #5
3943L_curve25519_inv_8:
3944	add	r1, sp, #0x40
3945	add	r0, sp, #0x40
3946	push	{r12}
3947	bl	fe_sq_op
3948	pop	{r12}
3949	subs	r12, r12, #1
3950	bne	L_curve25519_inv_8
3951	add	r2, sp, #32
3952	add	r1, sp, #0x40
3953	add	r0, sp, #0
3954	bl	fe_mul_op
3955	ldr	r2, [sp, #184]
3956	ldr	r1, [sp, #176]
3957	ldr	r0, [sp, #176]
3958	bl	fe_mul_op
3959	# Ensure result is less than modulus
3960	ldr	r0, [sp, #176]
3961	ldm	r0, {r4, r5, r6, r7, r8, r9, r10, r11}
3962	mov	r2, #19
3963	and	r2, r2, r11, asr #31
3964	adds	r4, r4, r2
3965	adcs	r5, r5, #0
3966	adcs	r6, r6, #0
3967	adcs	r7, r7, #0
3968	adcs	r8, r8, #0
3969	adcs	r9, r9, #0
3970#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
3971	bic	r11, r11, #0x80000000
3972#else
3973	bfc	r11, #31, #1
3974#endif
3975	adcs	r10, r10, #0
3976	adc	r11, r11, #0
3977	stm	r0, {r4, r5, r6, r7, r8, r9, r10, r11}
3978	mov	r0, #0
3979	add	sp, sp, #0xc0
3980	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
3981	.size	curve25519,.-curve25519
3982#endif /* WC_NO_CACHE_RESISTANT */
3983#endif /* HAVE_CURVE25519 */
3984#if defined(HAVE_ED25519) || defined(WOLFSSL_CURVE25519_USE_ED25519)
3985	.text
3986	.align	4
3987	.globl	fe_invert
3988	.type	fe_invert, %function
3989fe_invert:
3990	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
3991	sub	sp, sp, #0x88
3992	# Invert
3993	str	r0, [sp, #128]
3994	str	r1, [sp, #132]
3995	ldr	r1, [sp, #132]
3996	mov	r0, sp
3997	bl	fe_sq_op
3998	mov	r1, sp
3999	add	r0, sp, #32
4000	bl	fe_sq_op
4001	add	r1, sp, #32
4002	add	r0, sp, #32
4003	bl	fe_sq_op
4004	add	r2, sp, #32
4005	ldr	r1, [sp, #132]
4006	add	r0, sp, #32
4007	bl	fe_mul_op
4008	add	r2, sp, #32
4009	mov	r1, sp
4010	mov	r0, sp
4011	bl	fe_mul_op
4012	mov	r1, sp
4013	add	r0, sp, #0x40
4014	bl	fe_sq_op
4015	add	r2, sp, #0x40
4016	add	r1, sp, #32
4017	add	r0, sp, #32
4018	bl	fe_mul_op
4019	add	r1, sp, #32
4020	add	r0, sp, #0x40
4021	bl	fe_sq_op
4022	mov	r12, #4
4023L_fe_invert1:
4024	add	r1, sp, #0x40
4025	add	r0, sp, #0x40
4026	push	{r12}
4027	bl	fe_sq_op
4028	pop	{r12}
4029	subs	r12, r12, #1
4030	bne	L_fe_invert1
4031	add	r2, sp, #32
4032	add	r1, sp, #0x40
4033	add	r0, sp, #32
4034	bl	fe_mul_op
4035	add	r1, sp, #32
4036	add	r0, sp, #0x40
4037	bl	fe_sq_op
4038	mov	r12, #9
4039L_fe_invert2:
4040	add	r1, sp, #0x40
4041	add	r0, sp, #0x40
4042	push	{r12}
4043	bl	fe_sq_op
4044	pop	{r12}
4045	subs	r12, r12, #1
4046	bne	L_fe_invert2
4047	add	r2, sp, #32
4048	add	r1, sp, #0x40
4049	add	r0, sp, #0x40
4050	bl	fe_mul_op
4051	add	r1, sp, #0x40
4052	add	r0, sp, #0x60
4053	bl	fe_sq_op
4054	mov	r12, #19
4055L_fe_invert3:
4056	add	r1, sp, #0x60
4057	add	r0, sp, #0x60
4058	push	{r12}
4059	bl	fe_sq_op
4060	pop	{r12}
4061	subs	r12, r12, #1
4062	bne	L_fe_invert3
4063	add	r2, sp, #0x40
4064	add	r1, sp, #0x60
4065	add	r0, sp, #0x40
4066	bl	fe_mul_op
4067	mov	r12, #10
4068L_fe_invert4:
4069	add	r1, sp, #0x40
4070	add	r0, sp, #0x40
4071	push	{r12}
4072	bl	fe_sq_op
4073	pop	{r12}
4074	subs	r12, r12, #1
4075	bne	L_fe_invert4
4076	add	r2, sp, #32
4077	add	r1, sp, #0x40
4078	add	r0, sp, #32
4079	bl	fe_mul_op
4080	add	r1, sp, #32
4081	add	r0, sp, #0x40
4082	bl	fe_sq_op
4083	mov	r12, #49
4084L_fe_invert5:
4085	add	r1, sp, #0x40
4086	add	r0, sp, #0x40
4087	push	{r12}
4088	bl	fe_sq_op
4089	pop	{r12}
4090	subs	r12, r12, #1
4091	bne	L_fe_invert5
4092	add	r2, sp, #32
4093	add	r1, sp, #0x40
4094	add	r0, sp, #0x40
4095	bl	fe_mul_op
4096	add	r1, sp, #0x40
4097	add	r0, sp, #0x60
4098	bl	fe_sq_op
4099	mov	r12, #0x63
4100L_fe_invert6:
4101	add	r1, sp, #0x60
4102	add	r0, sp, #0x60
4103	push	{r12}
4104	bl	fe_sq_op
4105	pop	{r12}
4106	subs	r12, r12, #1
4107	bne	L_fe_invert6
4108	add	r2, sp, #0x40
4109	add	r1, sp, #0x60
4110	add	r0, sp, #0x40
4111	bl	fe_mul_op
4112	mov	r12, #50
4113L_fe_invert7:
4114	add	r1, sp, #0x40
4115	add	r0, sp, #0x40
4116	push	{r12}
4117	bl	fe_sq_op
4118	pop	{r12}
4119	subs	r12, r12, #1
4120	bne	L_fe_invert7
4121	add	r2, sp, #32
4122	add	r1, sp, #0x40
4123	add	r0, sp, #32
4124	bl	fe_mul_op
4125	mov	r12, #5
4126L_fe_invert8:
4127	add	r1, sp, #32
4128	add	r0, sp, #32
4129	push	{r12}
4130	bl	fe_sq_op
4131	pop	{r12}
4132	subs	r12, r12, #1
4133	bne	L_fe_invert8
4134	mov	r2, sp
4135	add	r1, sp, #32
4136	ldr	r0, [sp, #128]
4137	bl	fe_mul_op
4138	ldr	r1, [sp, #132]
4139	ldr	r0, [sp, #128]
4140	add	sp, sp, #0x88
4141	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
4142	.size	fe_invert,.-fe_invert
4143#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
4144	.text
4145	.align	4
4146	.globl	fe_sq2
4147	.type	fe_sq2, %function
4148fe_sq2:
4149	push	{lr}
4150	sub	sp, sp, #0x44
4151	str	r0, [sp, #64]
4152	# Square * 2
4153	mov	r0, #0
4154	ldr	r12, [r1]
4155	# A[0] * A[1]
4156	ldr	lr, [r1, #4]
4157	umull	r4, r5, r12, lr
4158	# A[0] * A[3]
4159	ldr	lr, [r1, #12]
4160	umull	r6, r7, r12, lr
4161	# A[0] * A[5]
4162	ldr	lr, [r1, #20]
4163	umull	r8, r9, r12, lr
4164	# A[0] * A[7]
4165	ldr	lr, [r1, #28]
4166	umull	r10, r3, r12, lr
4167	# A[0] * A[2]
4168	ldr	lr, [r1, #8]
4169	mov	r11, #0
4170	umlal	r5, r11, r12, lr
4171	adds	r6, r6, r11
4172	# A[0] * A[4]
4173	ldr	lr, [r1, #16]
4174	adcs	r7, r7, #0
4175	adc	r11, r0, #0
4176	umlal	r7, r11, r12, lr
4177	adds	r8, r8, r11
4178	# A[0] * A[6]
4179	ldr	lr, [r1, #24]
4180	adcs	r9, r9, #0
4181	adc	r11, r0, #0
4182	umlal	r9, r11, r12, lr
4183	adds	r10, r10, r11
4184	adcs	r3, r3, #0
4185	str	r4, [sp, #4]
4186	str	r5, [sp, #8]
4187	# A[1] * A[2]
4188	ldr	r12, [r1, #4]
4189	ldr	lr, [r1, #8]
4190	mov	r11, #0
4191	umlal	r6, r11, r12, lr
4192	str	r6, [sp, #12]
4193	adds	r7, r7, r11
4194	# A[1] * A[3]
4195	ldr	lr, [r1, #12]
4196	adc	r11, r0, #0
4197	umlal	r7, r11, r12, lr
4198	str	r7, [sp, #16]
4199	adds	r8, r8, r11
4200	# A[1] * A[4]
4201	ldr	lr, [r1, #16]
4202	adc	r11, r0, #0
4203	umlal	r8, r11, r12, lr
4204	adds	r9, r9, r11
4205	# A[1] * A[5]
4206	ldr	lr, [r1, #20]
4207	adc	r11, r0, #0
4208	umlal	r9, r11, r12, lr
4209	adds	r10, r10, r11
4210	# A[1] * A[6]
4211	ldr	lr, [r1, #24]
4212	adc	r11, r0, #0
4213	umlal	r10, r11, r12, lr
4214	adds	r3, r3, r11
4215	# A[1] * A[7]
4216	ldr	lr, [r1, #28]
4217	adc	r4, r0, #0
4218	umlal	r3, r4, r12, lr
4219	# A[2] * A[3]
4220	ldr	r12, [r1, #8]
4221	ldr	lr, [r1, #12]
4222	mov	r11, #0
4223	umlal	r8, r11, r12, lr
4224	str	r8, [sp, #20]
4225	adds	r9, r9, r11
4226	# A[2] * A[4]
4227	ldr	lr, [r1, #16]
4228	adc	r11, r0, #0
4229	umlal	r9, r11, r12, lr
4230	str	r9, [sp, #24]
4231	adds	r10, r10, r11
4232	# A[2] * A[5]
4233	ldr	lr, [r1, #20]
4234	adc	r11, r0, #0
4235	umlal	r10, r11, r12, lr
4236	adds	r3, r3, r11
4237	# A[2] * A[6]
4238	ldr	lr, [r1, #24]
4239	adc	r11, r0, #0
4240	umlal	r3, r11, r12, lr
4241	adds	r4, r4, r11
4242	# A[2] * A[7]
4243	ldr	lr, [r1, #28]
4244	adc	r5, r0, #0
4245	umlal	r4, r5, r12, lr
4246	# A[3] * A[4]
4247	ldr	r12, [r1, #12]
4248	ldr	lr, [r1, #16]
4249	mov	r11, #0
4250	umlal	r10, r11, r12, lr
4251	str	r10, [sp, #28]
4252	adds	r3, r3, r11
4253	# A[3] * A[5]
4254	ldr	lr, [r1, #20]
4255	adc	r11, r0, #0
4256	umlal	r3, r11, r12, lr
4257	adds	r4, r4, r11
4258	# A[3] * A[6]
4259	ldr	lr, [r1, #24]
4260	adc	r11, r0, #0
4261	umlal	r4, r11, r12, lr
4262	adds	r5, r5, r11
4263	# A[3] * A[7]
4264	ldr	lr, [r1, #28]
4265	adc	r6, r0, #0
4266	umlal	r5, r6, r12, lr
4267	# A[4] * A[5]
4268	ldr	r12, [r1, #16]
4269	ldr	lr, [r1, #20]
4270	mov	r11, #0
4271	umlal	r4, r11, r12, lr
4272	adds	r5, r5, r11
4273	# A[4] * A[6]
4274	ldr	lr, [r1, #24]
4275	adc	r11, r0, #0
4276	umlal	r5, r11, r12, lr
4277	adds	r6, r6, r11
4278	# A[4] * A[7]
4279	ldr	lr, [r1, #28]
4280	adc	r7, r0, #0
4281	umlal	r6, r7, r12, lr
4282	# A[5] * A[6]
4283	ldr	r12, [r1, #20]
4284	ldr	lr, [r1, #24]
4285	mov	r11, #0
4286	umlal	r6, r11, r12, lr
4287	adds	r7, r7, r11
4288	# A[5] * A[7]
4289	ldr	lr, [r1, #28]
4290	adc	r8, r0, #0
4291	umlal	r7, r8, r12, lr
4292	# A[6] * A[7]
4293	ldr	r12, [r1, #24]
4294	ldr	lr, [r1, #28]
4295	mov	r9, #0
4296	umlal	r8, r9, r12, lr
4297	add	lr, sp, #32
4298	stm	lr, {r3, r4, r5, r6, r7, r8, r9}
4299	add	lr, sp, #4
4300	ldm	lr, {r4, r5, r6, r7, r8, r9, r10}
4301	adds	r4, r4, r4
4302	adcs	r5, r5, r5
4303	adcs	r6, r6, r6
4304	adcs	r7, r7, r7
4305	adcs	r8, r8, r8
4306	adcs	r9, r9, r9
4307	adcs	r10, r10, r10
4308	stm	lr!, {r4, r5, r6, r7, r8, r9, r10}
4309	ldm	lr, {r3, r4, r5, r6, r7, r8, r9}
4310	adcs	r3, r3, r3
4311	adcs	r4, r4, r4
4312	adcs	r5, r5, r5
4313	adcs	r6, r6, r6
4314	adcs	r7, r7, r7
4315	adcs	r8, r8, r8
4316	adcs	r9, r9, r9
4317	adc	r10, r0, #0
4318	stm	lr, {r3, r4, r5, r6, r7, r8, r9, r10}
4319	add	lr, sp, #4
4320	ldm	lr, {r4, r5, r6, r7, r8, r9, r10}
4321	mov	lr, sp
4322	# A[0] * A[0]
4323	ldr	r12, [r1]
4324	umull	r3, r11, r12, r12
4325	adds	r4, r4, r11
4326	# A[1] * A[1]
4327	ldr	r12, [r1, #4]
4328	adcs	r5, r5, #0
4329	adc	r11, r0, #0
4330	umlal	r5, r11, r12, r12
4331	adds	r6, r6, r11
4332	# A[2] * A[2]
4333	ldr	r12, [r1, #8]
4334	adcs	r7, r7, #0
4335	adc	r11, r0, #0
4336	umlal	r7, r11, r12, r12
4337	adds	r8, r8, r11
4338	# A[3] * A[3]
4339	ldr	r12, [r1, #12]
4340	adcs	r9, r9, #0
4341	adc	r11, r0, #0
4342	umlal	r9, r11, r12, r12
4343	adds	r10, r10, r11
4344	stm	lr!, {r3, r4, r5, r6, r7, r8, r9, r10}
4345	ldm	lr, {r3, r4, r5, r6, r7, r8, r9, r10}
4346	# A[4] * A[4]
4347	ldr	r12, [r1, #16]
4348	adcs	r3, r3, #0
4349	adc	r11, r0, #0
4350	umlal	r3, r11, r12, r12
4351	adds	r4, r4, r11
4352	# A[5] * A[5]
4353	ldr	r12, [r1, #20]
4354	adcs	r5, r5, #0
4355	adc	r11, r0, #0
4356	umlal	r5, r11, r12, r12
4357	adds	r6, r6, r11
4358	# A[6] * A[6]
4359	ldr	r12, [r1, #24]
4360	adcs	r7, r7, #0
4361	adc	r11, r0, #0
4362	umlal	r7, r11, r12, r12
4363	adds	r8, r8, r11
4364	# A[7] * A[7]
4365	ldr	r12, [r1, #28]
4366	adcs	r9, r9, #0
4367	adc	r10, r10, #0
4368	umlal	r9, r10, r12, r12
4369	# Reduce
4370	ldr	r2, [sp, #28]
4371	mov	lr, sp
4372	mov	r12, #38
4373	umull	r10, r11, r12, r10
4374	adds	r10, r10, r2
4375	adc	r11, r11, #0
4376	mov	r12, #19
4377	lsl	r11, r11, #1
4378	orr	r11, r11, r10, lsr #31
4379	mul	r11, r12, r11
4380	ldm	lr!, {r1, r2}
4381	mov	r12, #38
4382	adds	r1, r1, r11
4383	adc	r11, r0, #0
4384	umlal	r1, r11, r3, r12
4385	adds	r2, r2, r11
4386	adc	r11, r0, #0
4387	umlal	r2, r11, r4, r12
4388	ldm	lr!, {r3, r4}
4389	adds	r3, r3, r11
4390	adc	r11, r0, #0
4391	umlal	r3, r11, r5, r12
4392	adds	r4, r4, r11
4393	adc	r11, r0, #0
4394	umlal	r4, r11, r6, r12
4395	ldm	lr!, {r5, r6}
4396	adds	r5, r5, r11
4397	adc	r11, r0, #0
4398	umlal	r5, r11, r7, r12
4399	adds	r6, r6, r11
4400	adc	r11, r0, #0
4401	umlal	r6, r11, r8, r12
4402	ldm	lr!, {r7, r8}
4403	adds	r7, r7, r11
4404	adc	r11, r0, #0
4405	umlal	r7, r11, r9, r12
4406#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
4407	bic	r10, r10, #0x80000000
4408#else
4409	bfc	r10, #31, #1
4410#endif
4411	adds	r8, r10, r11
4412	# Reduce if top bit set
4413	mov	r12, #19
4414	and	r11, r12, r8, asr #31
4415	adds	r1, r1, r11
4416	adcs	r2, r2, #0
4417	adcs	r3, r3, #0
4418	adcs	r4, r4, #0
4419	adcs	r5, r5, #0
4420	adcs	r6, r6, #0
4421#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
4422	bic	r8, r8, #0x80000000
4423#else
4424	bfc	r8, #31, #1
4425#endif
4426	adcs	r7, r7, #0
4427	adc	r8, r8, #0
4428	# Double
4429	adds	r1, r1, r1
4430	adcs	r2, r2, r2
4431	adcs	r3, r3, r3
4432	adcs	r4, r4, r4
4433	adcs	r5, r5, r5
4434	adcs	r6, r6, r6
4435	adcs	r7, r7, r7
4436	adc	r8, r8, r8
4437	# Reduce if top bit set
4438	mov	r12, #19
4439	and	r11, r12, r8, asr #31
4440	adds	r1, r1, r11
4441	adcs	r2, r2, #0
4442	adcs	r3, r3, #0
4443	adcs	r4, r4, #0
4444	adcs	r5, r5, #0
4445	adcs	r6, r6, #0
4446#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
4447	bic	r8, r8, #0x80000000
4448#else
4449	bfc	r8, #31, #1
4450#endif
4451	adcs	r7, r7, #0
4452	adc	r8, r8, #0
4453	# Store
4454	ldr	r0, [sp, #64]
4455	stm	r0, {r1, r2, r3, r4, r5, r6, r7, r8}
4456	add	sp, sp, #0x44
4457	pop	{pc}
4458	.size	fe_sq2,.-fe_sq2
4459#else
4460	.text
4461	.align	4
4462	.globl	fe_sq2
4463	.type	fe_sq2, %function
4464fe_sq2:
4465	push	{lr}
4466	sub	sp, sp, #36
4467#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
4468	str	r0, [sp, #28]
4469	str	r1, [sp, #32]
4470#else
4471	strd	r0, r1, [sp, #28]
4472#endif
4473	ldm	r1, {r0, r1, r2, r3, r4, r5, r6, r7}
4474	# Square * 2
4475	umull	r9, r10, r0, r0
4476	umull	r11, r12, r0, r1
4477	adds	r11, r11, r11
4478	mov	lr, #0
4479	umaal	r10, r11, lr, lr
4480	stm	sp, {r9, r10}
4481	mov	r8, lr
4482	umaal	r8, r12, r0, r2
4483	adcs	r8, r8, r8
4484	umaal	r8, r11, r1, r1
4485	umull	r9, r10, r0, r3
4486	umaal	r9, r12, r1, r2
4487	adcs	r9, r9, r9
4488	umaal	r9, r11, lr, lr
4489#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
4490	str	r8, [sp, #8]
4491	str	r9, [sp, #12]
4492#else
4493	strd	r8, r9, [sp, #8]
4494#endif
4495	mov	r9, lr
4496	umaal	r9, r10, r0, r4
4497	umaal	r9, r12, r1, r3
4498	adcs	r9, r9, r9
4499	umaal	r9, r11, r2, r2
4500	str	r9, [sp, #16]
4501	umull	r9, r8, r0, r5
4502	umaal	r9, r12, r1, r4
4503	umaal	r9, r10, r2, r3
4504	adcs	r9, r9, r9
4505	umaal	r9, r11, lr, lr
4506	str	r9, [sp, #20]
4507	mov	r9, lr
4508	umaal	r9, r8, r0, r6
4509	umaal	r9, r12, r1, r5
4510	umaal	r9, r10, r2, r4
4511	adcs	r9, r9, r9
4512	umaal	r9, r11, r3, r3
4513	str	r9, [sp, #24]
4514	umull	r0, r9, r0, r7
4515	umaal	r0, r8, r1, r6
4516	umaal	r0, r12, r2, r5
4517	umaal	r0, r10, r3, r4
4518	adcs	r0, r0, r0
4519	umaal	r0, r11, lr, lr
4520	# R[7] = r0
4521	umaal	r9, r8, r1, r7
4522	umaal	r9, r10, r2, r6
4523	umaal	r12, r9, r3, r5
4524	adcs	r12, r12, r12
4525	umaal	r12, r11, r4, r4
4526	# R[8] = r12
4527	umaal	r9, r8, r2, r7
4528	umaal	r10, r9, r3, r6
4529	mov	r2, lr
4530	umaal	r10, r2, r4, r5
4531	adcs	r10, r10, r10
4532	umaal	r11, r10, lr, lr
4533	# R[9] = r11
4534	umaal	r2, r8, r3, r7
4535	umaal	r2, r9, r4, r6
4536	adcs	r3, r2, r2
4537	umaal	r10, r3, r5, r5
4538	# R[10] = r10
4539	mov	r1, lr
4540	umaal	r1, r8, r4, r7
4541	umaal	r1, r9, r5, r6
4542	adcs	r4, r1, r1
4543	umaal	r3, r4, lr, lr
4544	# R[11] = r3
4545	umaal	r8, r9, r5, r7
4546	adcs	r8, r8, r8
4547	umaal	r4, r8, r6, r6
4548	# R[12] = r4
4549	mov	r5, lr
4550	umaal	r5, r9, r6, r7
4551	adcs	r5, r5, r5
4552	umaal	r8, r5, lr, lr
4553	# R[13] = r8
4554	adcs	r9, r9, r9
4555	umaal	r9, r5, r7, r7
4556	adcs	r7, r5, lr
4557	# R[14] = r9
4558	# R[15] = r7
4559	# Reduce
4560	mov	r6, #37
4561	umaal	r7, r0, r7, r6
4562	mov	r6, #19
4563	lsl	r0, r0, #1
4564	orr	r0, r0, r7, lsr #31
4565	mul	lr, r0, r6
4566	pop	{r0-r1}
4567	mov	r6, #38
4568	umaal	r0, lr, r12, r6
4569	umaal	r1, lr, r11, r6
4570	mov	r12, r3
4571	mov	r11, r4
4572	pop	{r2-r4}
4573	umaal	r2, lr, r10, r6
4574	umaal	r3, lr, r12, r6
4575	umaal	r4, lr, r11, r6
4576	mov	r12, r6
4577	pop	{r5-r6}
4578	umaal	r5, lr, r8, r12
4579#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
4580	bic	r7, r7, #0x80000000
4581#else
4582	bfc	r7, #31, #1
4583#endif
4584	umaal	r6, lr, r9, r12
4585	add	r7, r7, lr
4586	# Reduce if top bit set
4587	mov	r11, #19
4588	and	r12, r11, r7, asr #31
4589	adds	r0, r0, r12
4590	adcs	r1, r1, #0
4591	adcs	r2, r2, #0
4592	adcs	r3, r3, #0
4593	adcs	r4, r4, #0
4594	adcs	r5, r5, #0
4595#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
4596	bic	r7, r7, #0x80000000
4597#else
4598	bfc	r7, #31, #1
4599#endif
4600	adcs	r6, r6, #0
4601	adc	r7, r7, #0
4602	# Double
4603	adds	r0, r0, r0
4604	adcs	r1, r1, r1
4605	adcs	r2, r2, r2
4606	adcs	r3, r3, r3
4607	adcs	r4, r4, r4
4608	adcs	r5, r5, r5
4609	adcs	r6, r6, r6
4610	adc	r7, r7, r7
4611	# Reduce if top bit set
4612	mov	r11, #19
4613	and	r12, r11, r7, asr #31
4614	adds	r0, r0, r12
4615	adcs	r1, r1, #0
4616	adcs	r2, r2, #0
4617	adcs	r3, r3, #0
4618	adcs	r4, r4, #0
4619	adcs	r5, r5, #0
4620#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
4621	bic	r7, r7, #0x80000000
4622#else
4623	bfc	r7, #31, #1
4624#endif
4625	adcs	r6, r6, #0
4626	adc	r7, r7, #0
4627	pop	{r12, lr}
4628	# Store
4629	stm	r12, {r0, r1, r2, r3, r4, r5, r6, r7}
4630	mov	r0, r12
4631	mov	r1, lr
4632	pop	{pc}
4633	.size	fe_sq2,.-fe_sq2
4634#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
4635	.text
4636	.align	4
4637	.globl	fe_pow22523
4638	.type	fe_pow22523, %function
4639fe_pow22523:
4640	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
4641	sub	sp, sp, #0x68
4642	# pow22523
4643	str	r0, [sp, #96]
4644	str	r1, [sp, #100]
4645	ldr	r1, [sp, #100]
4646	mov	r0, sp
4647	bl	fe_sq_op
4648	mov	r1, sp
4649	add	r0, sp, #32
4650	bl	fe_sq_op
4651	add	r1, sp, #32
4652	add	r0, sp, #32
4653	bl	fe_sq_op
4654	add	r2, sp, #32
4655	ldr	r1, [sp, #100]
4656	add	r0, sp, #32
4657	bl	fe_mul_op
4658	add	r2, sp, #32
4659	mov	r1, sp
4660	mov	r0, sp
4661	bl	fe_mul_op
4662	mov	r1, sp
4663	mov	r0, sp
4664	bl	fe_sq_op
4665	mov	r2, sp
4666	add	r1, sp, #32
4667	mov	r0, sp
4668	bl	fe_mul_op
4669	mov	r1, sp
4670	add	r0, sp, #32
4671	bl	fe_sq_op
4672	mov	r12, #4
4673L_fe_pow22523_1:
4674	add	r1, sp, #32
4675	add	r0, sp, #32
4676	push	{r12}
4677	bl	fe_sq_op
4678	pop	{r12}
4679	subs	r12, r12, #1
4680	bne	L_fe_pow22523_1
4681	mov	r2, sp
4682	add	r1, sp, #32
4683	mov	r0, sp
4684	bl	fe_mul_op
4685	mov	r1, sp
4686	add	r0, sp, #32
4687	bl	fe_sq_op
4688	mov	r12, #9
4689L_fe_pow22523_2:
4690	add	r1, sp, #32
4691	add	r0, sp, #32
4692	push	{r12}
4693	bl	fe_sq_op
4694	pop	{r12}
4695	subs	r12, r12, #1
4696	bne	L_fe_pow22523_2
4697	mov	r2, sp
4698	add	r1, sp, #32
4699	add	r0, sp, #32
4700	bl	fe_mul_op
4701	add	r1, sp, #32
4702	add	r0, sp, #0x40
4703	bl	fe_sq_op
4704	mov	r12, #19
4705L_fe_pow22523_3:
4706	add	r1, sp, #0x40
4707	add	r0, sp, #0x40
4708	push	{r12}
4709	bl	fe_sq_op
4710	pop	{r12}
4711	subs	r12, r12, #1
4712	bne	L_fe_pow22523_3
4713	add	r2, sp, #32
4714	add	r1, sp, #0x40
4715	add	r0, sp, #32
4716	bl	fe_mul_op
4717	mov	r12, #10
4718L_fe_pow22523_4:
4719	add	r1, sp, #32
4720	add	r0, sp, #32
4721	push	{r12}
4722	bl	fe_sq_op
4723	pop	{r12}
4724	subs	r12, r12, #1
4725	bne	L_fe_pow22523_4
4726	mov	r2, sp
4727	add	r1, sp, #32
4728	mov	r0, sp
4729	bl	fe_mul_op
4730	mov	r1, sp
4731	add	r0, sp, #32
4732	bl	fe_sq_op
4733	mov	r12, #49
4734L_fe_pow22523_5:
4735	add	r1, sp, #32
4736	add	r0, sp, #32
4737	push	{r12}
4738	bl	fe_sq_op
4739	pop	{r12}
4740	subs	r12, r12, #1
4741	bne	L_fe_pow22523_5
4742	mov	r2, sp
4743	add	r1, sp, #32
4744	add	r0, sp, #32
4745	bl	fe_mul_op
4746	add	r1, sp, #32
4747	add	r0, sp, #0x40
4748	bl	fe_sq_op
4749	mov	r12, #0x63
4750L_fe_pow22523_6:
4751	add	r1, sp, #0x40
4752	add	r0, sp, #0x40
4753	push	{r12}
4754	bl	fe_sq_op
4755	pop	{r12}
4756	subs	r12, r12, #1
4757	bne	L_fe_pow22523_6
4758	add	r2, sp, #32
4759	add	r1, sp, #0x40
4760	add	r0, sp, #32
4761	bl	fe_mul_op
4762	mov	r12, #50
4763L_fe_pow22523_7:
4764	add	r1, sp, #32
4765	add	r0, sp, #32
4766	push	{r12}
4767	bl	fe_sq_op
4768	pop	{r12}
4769	subs	r12, r12, #1
4770	bne	L_fe_pow22523_7
4771	mov	r2, sp
4772	add	r1, sp, #32
4773	mov	r0, sp
4774	bl	fe_mul_op
4775	mov	r12, #2
4776L_fe_pow22523_8:
4777	mov	r1, sp
4778	mov	r0, sp
4779	push	{r12}
4780	bl	fe_sq_op
4781	pop	{r12}
4782	subs	r12, r12, #1
4783	bne	L_fe_pow22523_8
4784	ldr	r2, [sp, #100]
4785	mov	r1, sp
4786	ldr	r0, [sp, #96]
4787	bl	fe_mul_op
4788	ldr	r1, [sp, #100]
4789	ldr	r0, [sp, #96]
4790	add	sp, sp, #0x68
4791	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
4792	.size	fe_pow22523,.-fe_pow22523
4793	.text
4794	.align	4
4795	.globl	ge_p1p1_to_p2
4796	.type	ge_p1p1_to_p2, %function
4797ge_p1p1_to_p2:
4798	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
4799	sub	sp, sp, #8
4800	str	r0, [sp]
4801	str	r1, [sp, #4]
4802	add	r2, r1, #0x60
4803	bl	fe_mul_op
4804	ldr	r0, [sp]
4805	ldr	r1, [sp, #4]
4806	add	r2, r1, #0x40
4807	add	r1, r1, #32
4808	add	r0, r0, #32
4809	bl	fe_mul_op
4810	ldr	r0, [sp]
4811	ldr	r1, [sp, #4]
4812	add	r2, r1, #0x60
4813	add	r1, r1, #0x40
4814	add	r0, r0, #0x40
4815	bl	fe_mul_op
4816	add	sp, sp, #8
4817	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
4818	.size	ge_p1p1_to_p2,.-ge_p1p1_to_p2
4819	.text
4820	.align	4
4821	.globl	ge_p1p1_to_p3
4822	.type	ge_p1p1_to_p3, %function
4823ge_p1p1_to_p3:
4824	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
4825	sub	sp, sp, #8
4826	str	r0, [sp]
4827	str	r1, [sp, #4]
4828	add	r2, r1, #0x60
4829	bl	fe_mul_op
4830	ldr	r0, [sp]
4831	ldr	r1, [sp, #4]
4832	add	r2, r1, #0x40
4833	add	r1, r1, #32
4834	add	r0, r0, #32
4835	bl	fe_mul_op
4836	ldr	r0, [sp]
4837	ldr	r1, [sp, #4]
4838	add	r2, r1, #0x60
4839	add	r1, r1, #0x40
4840	add	r0, r0, #0x40
4841	bl	fe_mul_op
4842	ldr	r0, [sp]
4843	ldr	r1, [sp, #4]
4844	add	r2, r1, #32
4845	add	r0, r0, #0x60
4846	bl	fe_mul_op
4847	add	sp, sp, #8
4848	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
4849	.size	ge_p1p1_to_p3,.-ge_p1p1_to_p3
4850	.text
4851	.align	4
4852	.globl	ge_p2_dbl
4853	.type	ge_p2_dbl, %function
4854ge_p2_dbl:
4855	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
4856	sub	sp, sp, #8
4857	str	r0, [sp]
4858	str	r1, [sp, #4]
4859	bl	fe_sq_op
4860	ldr	r0, [sp]
4861	ldr	r1, [sp, #4]
4862	add	r1, r1, #32
4863	add	r0, r0, #0x40
4864	bl	fe_sq_op
4865	ldr	r0, [sp]
4866	ldr	r1, [sp, #4]
4867	add	r2, r1, #32
4868	add	r0, r0, #32
4869	bl	fe_add_op
4870	mov	r1, r0
4871	add	r0, r0, #0x40
4872	bl	fe_sq_op
4873	ldr	r0, [sp]
4874	mov	r3, r0
4875	add	r2, r0, #0x40
4876	add	r1, r0, #0x40
4877	add	r0, r0, #32
4878	bl	fe_add_sub_op
4879	mov	r2, r0
4880	add	r1, r0, #0x40
4881	sub	r0, r0, #32
4882	bl	fe_sub_op
4883	ldr	r1, [sp, #4]
4884	add	r1, r1, #0x40
4885	add	r0, r0, #0x60
4886	bl	fe_sq2
4887	sub	r2, r0, #32
4888	mov	r1, r0
4889	bl	fe_sub_op
4890	add	sp, sp, #8
4891	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
4892	.size	ge_p2_dbl,.-ge_p2_dbl
4893	.text
4894	.align	4
4895	.globl	ge_madd
4896	.type	ge_madd, %function
4897ge_madd:
4898	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
4899	sub	sp, sp, #12
4900	str	r0, [sp]
4901	str	r1, [sp, #4]
4902	str	r2, [sp, #8]
4903	mov	r2, r1
4904	add	r1, r1, #32
4905	bl	fe_add_op
4906	ldr	r1, [sp, #4]
4907	mov	r2, r1
4908	add	r1, r1, #32
4909	add	r0, r0, #32
4910	bl	fe_sub_op
4911	ldr	r2, [sp, #8]
4912	sub	r1, r0, #32
4913	add	r0, r0, #32
4914	bl	fe_mul_op
4915	ldr	r0, [sp]
4916	ldr	r2, [sp, #8]
4917	add	r2, r2, #32
4918	add	r1, r0, #32
4919	add	r0, r0, #32
4920	bl	fe_mul_op
4921	ldr	r0, [sp]
4922	ldr	r1, [sp, #8]
4923	ldr	r2, [sp, #4]
4924	add	r2, r2, #0x60
4925	add	r1, r1, #0x40
4926	add	r0, r0, #0x60
4927	bl	fe_mul_op
4928	ldr	r0, [sp]
4929	add	r3, r0, #32
4930	add	r2, r0, #0x40
4931	mov	r1, r0
4932	add	r0, r0, #32
4933	bl	fe_add_sub_op
4934	ldr	r1, [sp, #4]
4935	add	r1, r1, #0x40
4936	add	r0, r0, #32
4937	# Double
4938	ldm	r1, {r4, r5, r6, r7, r8, r9, r10, r11}
4939	adds	r4, r4, r4
4940	adcs	r5, r5, r5
4941	adcs	r6, r6, r6
4942	adcs	r7, r7, r7
4943	adcs	r8, r8, r8
4944	adcs	r9, r9, r9
4945	adcs	r10, r10, r10
4946	mov	lr, #0
4947	adcs	r11, r11, r11
4948	adc	lr, lr, #0
4949	mov	r12, #19
4950	lsl	lr, lr, #1
4951	orr	lr, lr, r11, lsr #31
4952	mul	r12, lr, r12
4953	adds	r4, r4, r12
4954	adcs	r5, r5, #0
4955	adcs	r6, r6, #0
4956	adcs	r7, r7, #0
4957	adcs	r8, r8, #0
4958	adcs	r9, r9, #0
4959#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
4960	bic	r11, r11, #0x80000000
4961#else
4962	bfc	r11, #31, #1
4963#endif
4964	adcs	r10, r10, #0
4965	adc	r11, r11, #0
4966	stm	r0, {r4, r5, r6, r7, r8, r9, r10, r11}
4967	# Done Double
4968	add	r3, r0, #32
4969	add	r1, r0, #32
4970	bl	fe_add_sub_op
4971	add	sp, sp, #12
4972	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
4973	.size	ge_madd,.-ge_madd
4974	.text
4975	.align	4
4976	.globl	ge_msub
4977	.type	ge_msub, %function
4978ge_msub:
4979	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
4980	sub	sp, sp, #12
4981	str	r0, [sp]
4982	str	r1, [sp, #4]
4983	str	r2, [sp, #8]
4984	mov	r2, r1
4985	add	r1, r1, #32
4986	bl	fe_add_op
4987	ldr	r1, [sp, #4]
4988	mov	r2, r1
4989	add	r1, r1, #32
4990	add	r0, r0, #32
4991	bl	fe_sub_op
4992	ldr	r2, [sp, #8]
4993	add	r2, r2, #32
4994	sub	r1, r0, #32
4995	add	r0, r0, #32
4996	bl	fe_mul_op
4997	ldr	r0, [sp]
4998	ldr	r2, [sp, #8]
4999	add	r1, r0, #32
5000	add	r0, r0, #32
5001	bl	fe_mul_op
5002	ldr	r0, [sp]
5003	ldr	r1, [sp, #8]
5004	ldr	r2, [sp, #4]
5005	add	r2, r2, #0x60
5006	add	r1, r1, #0x40
5007	add	r0, r0, #0x60
5008	bl	fe_mul_op
5009	ldr	r0, [sp]
5010	add	r3, r0, #32
5011	add	r2, r0, #0x40
5012	mov	r1, r0
5013	add	r0, r0, #32
5014	bl	fe_add_sub_op
5015	ldr	r1, [sp, #4]
5016	add	r1, r1, #0x40
5017	add	r0, r0, #32
5018	# Double
5019	ldm	r1, {r4, r5, r6, r7, r8, r9, r10, r11}
5020	adds	r4, r4, r4
5021	adcs	r5, r5, r5
5022	adcs	r6, r6, r6
5023	adcs	r7, r7, r7
5024	adcs	r8, r8, r8
5025	adcs	r9, r9, r9
5026	adcs	r10, r10, r10
5027	mov	lr, #0
5028	adcs	r11, r11, r11
5029	adc	lr, lr, #0
5030	mov	r12, #19
5031	lsl	lr, lr, #1
5032	orr	lr, lr, r11, lsr #31
5033	mul	r12, lr, r12
5034	adds	r4, r4, r12
5035	adcs	r5, r5, #0
5036	adcs	r6, r6, #0
5037	adcs	r7, r7, #0
5038	adcs	r8, r8, #0
5039	adcs	r9, r9, #0
5040#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5041	bic	r11, r11, #0x80000000
5042#else
5043	bfc	r11, #31, #1
5044#endif
5045	adcs	r10, r10, #0
5046	adc	r11, r11, #0
5047	stm	r0, {r4, r5, r6, r7, r8, r9, r10, r11}
5048	# Done Double
5049	add	r3, r0, #32
5050	mov	r1, r0
5051	add	r0, r0, #32
5052	bl	fe_add_sub_op
5053	add	sp, sp, #12
5054	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
5055	.size	ge_msub,.-ge_msub
5056	.text
5057	.align	4
5058	.globl	ge_add
5059	.type	ge_add, %function
5060ge_add:
5061	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
5062	sub	sp, sp, #44
5063	str	r0, [sp]
5064	str	r1, [sp, #4]
5065	str	r2, [sp, #8]
5066	mov	r3, r1
5067	add	r2, r1, #32
5068	add	r1, r0, #32
5069	bl	fe_add_sub_op
5070	ldr	r2, [sp, #8]
5071	mov	r1, r0
5072	add	r0, r0, #0x40
5073	bl	fe_mul_op
5074	ldr	r0, [sp]
5075	ldr	r2, [sp, #8]
5076	add	r2, r2, #32
5077	add	r1, r0, #32
5078	add	r0, r0, #32
5079	bl	fe_mul_op
5080	ldr	r0, [sp]
5081	ldr	r1, [sp, #8]
5082	ldr	r2, [sp, #4]
5083	add	r2, r2, #0x60
5084	add	r1, r1, #0x60
5085	add	r0, r0, #0x60
5086	bl	fe_mul_op
5087	ldr	r0, [sp]
5088	ldr	r1, [sp, #4]
5089	ldr	r2, [sp, #8]
5090	add	r2, r2, #0x40
5091	add	r1, r1, #0x40
5092	bl	fe_mul_op
5093	ldr	r1, [sp]
5094	add	r0, sp, #12
5095	# Double
5096	ldm	r1, {r4, r5, r6, r7, r8, r9, r10, r11}
5097	adds	r4, r4, r4
5098	adcs	r5, r5, r5
5099	adcs	r6, r6, r6
5100	adcs	r7, r7, r7
5101	adcs	r8, r8, r8
5102	adcs	r9, r9, r9
5103	adcs	r10, r10, r10
5104	mov	lr, #0
5105	adcs	r11, r11, r11
5106	adc	lr, lr, #0
5107	mov	r12, #19
5108	lsl	lr, lr, #1
5109	orr	lr, lr, r11, lsr #31
5110	mul	r12, lr, r12
5111	adds	r4, r4, r12
5112	adcs	r5, r5, #0
5113	adcs	r6, r6, #0
5114	adcs	r7, r7, #0
5115	adcs	r8, r8, #0
5116	adcs	r9, r9, #0
5117#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5118	bic	r11, r11, #0x80000000
5119#else
5120	bfc	r11, #31, #1
5121#endif
5122	adcs	r10, r10, #0
5123	adc	r11, r11, #0
5124	stm	r0, {r4, r5, r6, r7, r8, r9, r10, r11}
5125	# Done Double
5126	add	r3, r1, #32
5127	add	r2, r1, #0x40
5128	add	r0, r1, #32
5129	bl	fe_add_sub_op
5130	add	r3, r0, #0x40
5131	add	r2, sp, #12
5132	add	r1, r0, #0x40
5133	add	r0, r0, #32
5134	bl	fe_add_sub_op
5135	add	sp, sp, #44
5136	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
5137	.size	ge_add,.-ge_add
5138	.text
5139	.align	4
5140	.globl	ge_sub
5141	.type	ge_sub, %function
5142ge_sub:
5143	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
5144	sub	sp, sp, #44
5145	str	r0, [sp]
5146	str	r1, [sp, #4]
5147	str	r2, [sp, #8]
5148	mov	r3, r1
5149	add	r2, r1, #32
5150	add	r1, r0, #32
5151	bl	fe_add_sub_op
5152	ldr	r2, [sp, #8]
5153	add	r2, r2, #32
5154	mov	r1, r0
5155	add	r0, r0, #0x40
5156	bl	fe_mul_op
5157	ldr	r0, [sp]
5158	ldr	r2, [sp, #8]
5159	add	r1, r0, #32
5160	add	r0, r0, #32
5161	bl	fe_mul_op
5162	ldr	r0, [sp]
5163	ldr	r1, [sp, #8]
5164	ldr	r2, [sp, #4]
5165	add	r2, r2, #0x60
5166	add	r1, r1, #0x60
5167	add	r0, r0, #0x60
5168	bl	fe_mul_op
5169	ldr	r0, [sp]
5170	ldr	r1, [sp, #4]
5171	ldr	r2, [sp, #8]
5172	add	r2, r2, #0x40
5173	add	r1, r1, #0x40
5174	bl	fe_mul_op
5175	ldr	r1, [sp]
5176	add	r0, sp, #12
5177	# Double
5178	ldm	r1, {r4, r5, r6, r7, r8, r9, r10, r11}
5179	adds	r4, r4, r4
5180	adcs	r5, r5, r5
5181	adcs	r6, r6, r6
5182	adcs	r7, r7, r7
5183	adcs	r8, r8, r8
5184	adcs	r9, r9, r9
5185	adcs	r10, r10, r10
5186	mov	lr, #0
5187	adcs	r11, r11, r11
5188	adc	lr, lr, #0
5189	mov	r12, #19
5190	lsl	lr, lr, #1
5191	orr	lr, lr, r11, lsr #31
5192	mul	r12, lr, r12
5193	adds	r4, r4, r12
5194	adcs	r5, r5, #0
5195	adcs	r6, r6, #0
5196	adcs	r7, r7, #0
5197	adcs	r8, r8, #0
5198	adcs	r9, r9, #0
5199#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5200	bic	r11, r11, #0x80000000
5201#else
5202	bfc	r11, #31, #1
5203#endif
5204	adcs	r10, r10, #0
5205	adc	r11, r11, #0
5206	stm	r0, {r4, r5, r6, r7, r8, r9, r10, r11}
5207	# Done Double
5208	add	r3, r1, #32
5209	add	r2, r1, #0x40
5210	add	r0, r1, #32
5211	bl	fe_add_sub_op
5212	add	r3, r0, #0x40
5213	add	r2, sp, #12
5214	add	r1, r0, #32
5215	add	r0, r0, #0x40
5216	bl	fe_add_sub_op
5217	add	sp, sp, #44
5218	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
5219	.size	ge_sub,.-ge_sub
5220#endif /* HAVE_ED25519 || WOLFSSL_CURVE25519_USE_ED25519 */
5221#ifdef HAVE_ED25519
5222#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
5223	.text
5224	.align	4
5225	.globl	sc_reduce
5226	.type	sc_reduce, %function
5227sc_reduce:
5228	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
5229	sub	sp, sp, #56
5230	str	r0, [sp, #52]
5231	# Load bits 252-511
5232	add	r0, r0, #28
5233	ldm	r0, {r1, r2, r3, r4, r5, r6, r7, r8, r9}
5234	lsr	lr, r9, #24
5235	lsl	r9, r9, #4
5236	orr	r9, r9, r8, lsr #28
5237	lsl	r8, r8, #4
5238	orr	r8, r8, r7, lsr #28
5239	lsl	r7, r7, #4
5240	orr	r7, r7, r6, lsr #28
5241	lsl	r6, r6, #4
5242	orr	r6, r6, r5, lsr #28
5243	lsl	r5, r5, #4
5244	orr	r5, r5, r4, lsr #28
5245	lsl	r4, r4, #4
5246	orr	r4, r4, r3, lsr #28
5247	lsl	r3, r3, #4
5248	orr	r3, r3, r2, lsr #28
5249	lsl	r2, r2, #4
5250	orr	r2, r2, r1, lsr #28
5251#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5252	bic	r9, r9, #0xf0000000
5253#else
5254	bfc	r9, #28, #4
5255#endif
5256	sub	r0, r0, #28
5257	# Add order times bits 504..511
5258#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5259	mov	r10, #19
5260	orr	r10, r10, #0xa3000000
5261	orr	r10, r10, #0xa0000
5262	orr	r10, r10, #0x2c00
5263#else
5264#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5265	mov	r10, #0x13
5266	orr	r10, r10, #0x2c00
5267#else
5268	mov	r10, #0x2c13
5269#endif
5270#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5271	orr	r10, r10, #0xa3000000
5272	orr	r10, r10, #0xa0000
5273#else
5274	movt	r10, #0xa30a
5275#endif
5276#endif
5277#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5278	mov	r11, #0xe5
5279	orr	r11, r11, #0xa7000000
5280	orr	r11, r11, #0xed0000
5281	orr	r11, r11, #0x9c00
5282#else
5283#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5284	mov	r11, #0xe5
5285	orr	r11, r11, #0x9c00
5286#else
5287	mov	r11, #0x9ce5
5288#endif
5289#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5290	orr	r11, r11, #0xa7000000
5291	orr	r11, r11, #0xed0000
5292#else
5293	movt	r11, #0xa7ed
5294#endif
5295#endif
5296	mov	r1, #0
5297	umlal	r2, r1, r10, lr
5298	adds	r3, r3, r1
5299	mov	r1, #0
5300	adc	r1, r1, #0
5301	umlal	r3, r1, r11, lr
5302#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5303	mov	r10, #41
5304	orr	r10, r10, #0x5d000000
5305	orr	r10, r10, #0x80000
5306	orr	r10, r10, #0x6300
5307#else
5308#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5309	mov	r10, #0x29
5310	orr	r10, r10, #0x6300
5311#else
5312	mov	r10, #0x6329
5313#endif
5314#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5315	orr	r10, r10, #0x5d000000
5316	orr	r10, r10, #0x80000
5317#else
5318	movt	r10, #0x5d08
5319#endif
5320#endif
5321#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5322	mov	r11, #33
5323	orr	r11, r11, #0xeb000000
5324	orr	r11, r11, #0x210000
5325	orr	r11, r11, #0x600
5326#else
5327#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5328	mov	r11, #0x21
5329	orr	r11, r11, #0x600
5330#else
5331	mov	r11, #0x621
5332#endif
5333#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5334	orr	r11, r11, #0xeb000000
5335	orr	r11, r11, #0x210000
5336#else
5337	movt	r11, #0xeb21
5338#endif
5339#endif
5340	adds	r4, r4, r1
5341	mov	r1, #0
5342	adc	r1, r1, #0
5343	umlal	r4, r1, r10, lr
5344	adds	r5, r5, r1
5345	mov	r1, #0
5346	adc	r1, r1, #0
5347	umlal	r5, r1, r11, lr
5348	adds	r6, r6, r1
5349	adcs	r7, r7, #0
5350	adcs	r8, r8, #0
5351	adc	r9, r9, #0
5352	subs	r6, r6, lr
5353	sbcs	r7, r7, #0
5354	sbcs	r8, r8, #0
5355	sbc	r9, r9, #0
5356	# Sub product of top 8 words and order
5357	mov	r12, sp
5358#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5359	mov	r1, #19
5360	orr	r1, r1, #0xa3000000
5361	orr	r1, r1, #0xa0000
5362	orr	r1, r1, #0x2c00
5363#else
5364#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5365	mov	r1, #0x13
5366	orr	r1, r1, #0x2c00
5367#else
5368	mov	r1, #0x2c13
5369#endif
5370#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5371	orr	r1, r1, #0xa3000000
5372	orr	r1, r1, #0xa0000
5373#else
5374	movt	r1, #0xa30a
5375#endif
5376#endif
5377	mov	lr, #0
5378	ldm	r0!, {r10, r11}
5379	umlal	r10, lr, r2, r1
5380	adds	r11, r11, lr
5381	mov	lr, #0
5382	adc	lr, lr, #0
5383	umlal	r11, lr, r3, r1
5384	stm	r12!, {r10, r11}
5385	ldm	r0!, {r10, r11}
5386	adds	r10, r10, lr
5387	mov	lr, #0
5388	adc	lr, lr, #0
5389	umlal	r10, lr, r4, r1
5390	adds	r11, r11, lr
5391	mov	lr, #0
5392	adc	lr, lr, #0
5393	umlal	r11, lr, r5, r1
5394	stm	r12!, {r10, r11}
5395	ldm	r0!, {r10, r11}
5396	adds	r10, r10, lr
5397	mov	lr, #0
5398	adc	lr, lr, #0
5399	umlal	r10, lr, r6, r1
5400	adds	r11, r11, lr
5401	mov	lr, #0
5402	adc	lr, lr, #0
5403	umlal	r11, lr, r7, r1
5404	stm	r12!, {r10, r11}
5405	ldm	r0!, {r10, r11}
5406	adds	r10, r10, lr
5407	mov	lr, #0
5408	adc	lr, lr, #0
5409	umlal	r10, lr, r8, r1
5410#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5411	bic	r11, r11, #0xf0000000
5412#else
5413	bfc	r11, #28, #4
5414#endif
5415	adds	r11, r11, lr
5416	mov	lr, #0
5417	adc	lr, lr, #0
5418	umlal	r11, lr, r9, r1
5419	stm	r12!, {r10, r11, lr}
5420	sub	r0, r0, #16
5421	sub	r12, r12, #32
5422#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5423	mov	r1, #0xe5
5424	orr	r1, r1, #0xa7000000
5425	orr	r1, r1, #0xed0000
5426	orr	r1, r1, #0x9c00
5427#else
5428#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5429	mov	r1, #0xe5
5430	orr	r1, r1, #0x9c00
5431#else
5432	mov	r1, #0x9ce5
5433#endif
5434#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5435	orr	r1, r1, #0xa7000000
5436	orr	r1, r1, #0xed0000
5437#else
5438	movt	r1, #0xa7ed
5439#endif
5440#endif
5441	mov	lr, #0
5442	ldm	r12, {r10, r11}
5443	umlal	r10, lr, r2, r1
5444	adds	r11, r11, lr
5445	mov	lr, #0
5446	adc	lr, lr, #0
5447	umlal	r11, lr, r3, r1
5448	stm	r12!, {r10, r11}
5449	ldm	r12, {r10, r11}
5450	adds	r10, r10, lr
5451	mov	lr, #0
5452	adc	lr, lr, #0
5453	umlal	r10, lr, r4, r1
5454	adds	r11, r11, lr
5455	mov	lr, #0
5456	adc	lr, lr, #0
5457	umlal	r11, lr, r5, r1
5458	stm	r12!, {r10, r11}
5459	ldm	r12, {r10, r11}
5460	adds	r10, r10, lr
5461	mov	lr, #0
5462	adc	lr, lr, #0
5463	umlal	r10, lr, r6, r1
5464	adds	r11, r11, lr
5465	mov	lr, #0
5466	adc	lr, lr, #0
5467	umlal	r11, lr, r7, r1
5468	stm	r12!, {r10, r11}
5469	ldm	r12, {r10, r11}
5470	adds	r10, r10, lr
5471	mov	lr, #0
5472	adc	lr, lr, #0
5473	umlal	r10, lr, r8, r1
5474	adds	r11, r11, lr
5475	mov	lr, #0
5476	adc	lr, lr, #0
5477	umlal	r11, lr, r9, r1
5478	stm	r12!, {r10, r11, lr}
5479	sub	r12, r12, #32
5480#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5481	mov	r1, #41
5482	orr	r1, r1, #0x5d000000
5483	orr	r1, r1, #0x80000
5484	orr	r1, r1, #0x6300
5485#else
5486#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5487	mov	r1, #0x29
5488	orr	r1, r1, #0x6300
5489#else
5490	mov	r1, #0x6329
5491#endif
5492#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5493	orr	r1, r1, #0x5d000000
5494	orr	r1, r1, #0x80000
5495#else
5496	movt	r1, #0x5d08
5497#endif
5498#endif
5499	mov	lr, #0
5500	ldm	r12, {r10, r11}
5501	umlal	r10, lr, r2, r1
5502	adds	r11, r11, lr
5503	mov	lr, #0
5504	adc	lr, lr, #0
5505	umlal	r11, lr, r3, r1
5506	stm	r12!, {r10, r11}
5507	ldm	r12, {r10, r11}
5508	adds	r10, r10, lr
5509	mov	lr, #0
5510	adc	lr, lr, #0
5511	umlal	r10, lr, r4, r1
5512	adds	r11, r11, lr
5513	mov	lr, #0
5514	adc	lr, lr, #0
5515	umlal	r11, lr, r5, r1
5516	stm	r12!, {r10, r11}
5517	ldm	r12, {r10, r11}
5518	adds	r10, r10, lr
5519	mov	lr, #0
5520	adc	lr, lr, #0
5521	umlal	r10, lr, r6, r1
5522	adds	r11, r11, lr
5523	mov	lr, #0
5524	adc	lr, lr, #0
5525	umlal	r11, lr, r7, r1
5526	stm	r12!, {r10, r11}
5527	ldm	r12, {r10, r11}
5528	adds	r10, r10, lr
5529	mov	lr, #0
5530	adc	lr, lr, #0
5531	umlal	r10, lr, r8, r1
5532	adds	r11, r11, lr
5533	mov	lr, #0
5534	adc	lr, lr, #0
5535	umlal	r11, lr, r9, r1
5536	stm	r12!, {r10, r11, lr}
5537	sub	r12, r12, #32
5538#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5539	mov	r1, #33
5540	orr	r1, r1, #0xeb000000
5541	orr	r1, r1, #0x210000
5542	orr	r1, r1, #0x600
5543#else
5544#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5545	mov	r1, #0x21
5546	orr	r1, r1, #0x600
5547#else
5548	mov	r1, #0x621
5549#endif
5550#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5551	orr	r1, r1, #0xeb000000
5552	orr	r1, r1, #0x210000
5553#else
5554	movt	r1, #0xeb21
5555#endif
5556#endif
5557	mov	lr, #0
5558	ldm	r12, {r10, r11}
5559	umlal	r10, lr, r2, r1
5560	adds	r11, r11, lr
5561	mov	lr, #0
5562	adc	lr, lr, #0
5563	umlal	r11, lr, r3, r1
5564	stm	r12!, {r10, r11}
5565	ldm	r12, {r10, r11}
5566	adds	r10, r10, lr
5567	mov	lr, #0
5568	adc	lr, lr, #0
5569	umlal	r10, lr, r4, r1
5570	adds	r11, r11, lr
5571	mov	lr, #0
5572	adc	lr, lr, #0
5573	umlal	r11, lr, r5, r1
5574	stm	r12!, {r10, r11}
5575	ldm	r12, {r10, r11}
5576	adds	r10, r10, lr
5577	mov	lr, #0
5578	adc	lr, lr, #0
5579	umlal	r10, lr, r6, r1
5580	adds	r11, r11, lr
5581	mov	lr, #0
5582	adc	lr, lr, #0
5583	umlal	r11, lr, r7, r1
5584	stm	r12!, {r10, r11}
5585	ldm	r12, {r10, r11}
5586	adds	r10, r10, lr
5587	mov	lr, #0
5588	adc	lr, lr, #0
5589	umlal	r10, lr, r8, r1
5590	adds	r11, r11, lr
5591	mov	lr, #0
5592	adc	lr, lr, #0
5593	umlal	r11, lr, r9, r1
5594	stm	r12!, {r10, r11, lr}
5595	sub	r12, r12, #32
5596	# Subtract at 4 * 32
5597	ldm	r12, {r10, r11}
5598	subs	r10, r10, r2
5599	sbcs	r11, r11, r3
5600	stm	r12!, {r10, r11}
5601	ldm	r12, {r10, r11}
5602	sbcs	r10, r10, r4
5603	sbcs	r11, r11, r5
5604	stm	r12!, {r10, r11}
5605	ldm	r12, {r10, r11}
5606	sbcs	r10, r10, r6
5607	sbcs	r11, r11, r7
5608	stm	r12!, {r10, r11}
5609	ldm	r12, {r10, r11}
5610	sbcs	r10, r10, r8
5611	sbc	r11, r11, r9
5612	stm	r12!, {r10, r11}
5613	sub	r12, r12, #36
5614	asr	lr, r11, #25
5615	# Conditionally subtract order starting at bit 125
5616	mov	r1, #0xa0000000
5617#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5618	mov	r2, #0x7d
5619	orr	r2, r2, #0x4b000000
5620	orr	r2, r2, #0x9e0000
5621	orr	r2, r2, #0xba00
5622#else
5623#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5624	mov	r2, #0x7d
5625	orr	r2, r2, #0xba00
5626#else
5627	mov	r2, #0xba7d
5628#endif
5629#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5630	orr	r2, r2, #0x4b000000
5631	orr	r2, r2, #0x9e0000
5632#else
5633	movt	r2, #0x4b9e
5634#endif
5635#endif
5636#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5637	mov	r3, #0x63
5638	orr	r3, r3, #0xcb000000
5639	orr	r3, r3, #0x20000
5640	orr	r3, r3, #0x4c00
5641#else
5642#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5643	mov	r3, #0x63
5644	orr	r3, r3, #0x4c00
5645#else
5646	mov	r3, #0x4c63
5647#endif
5648#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5649	orr	r3, r3, #0xcb000000
5650	orr	r3, r3, #0x20000
5651#else
5652	movt	r3, #0xcb02
5653#endif
5654#endif
5655#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5656	mov	r4, #0x9a
5657	orr	r4, r4, #0xd4000000
5658	orr	r4, r4, #0x5e0000
5659	orr	r4, r4, #0xf300
5660#else
5661#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5662	mov	r4, #0x9a
5663	orr	r4, r4, #0xf300
5664#else
5665	mov	r4, #0xf39a
5666#endif
5667#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5668	orr	r4, r4, #0xd4000000
5669	orr	r4, r4, #0x5e0000
5670#else
5671	movt	r4, #0xd45e
5672#endif
5673#endif
5674#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5675	mov	r5, #59
5676	orr	r5, r5, #0x2000000
5677	orr	r5, r5, #0x9b0000
5678	orr	r5, r5, #0xdf00
5679#else
5680#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5681	mov	r5, #0x3b
5682	orr	r5, r5, #0xdf00
5683#else
5684	mov	r5, #0xdf3b
5685#endif
5686#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5687	orr	r5, r5, #0x2000000
5688	orr	r5, r5, #0x9b0000
5689#else
5690	movt	r5, #0x29b
5691#endif
5692#endif
5693	mov	r9, #0x2000000
5694	and	r1, r1, lr
5695	and	r2, r2, lr
5696	and	r3, r3, lr
5697	and	r4, r4, lr
5698	and	r5, r5, lr
5699	and	r9, r9, lr
5700	ldm	r12, {r10, r11}
5701	adds	r10, r10, r1
5702	adcs	r11, r11, r2
5703	stm	r12!, {r10, r11}
5704	ldm	r12, {r10, r11}
5705	adcs	r10, r10, r3
5706	adcs	r11, r11, r4
5707	stm	r12!, {r10, r11}
5708	ldm	r12, {r10, r11}
5709	adcs	r10, r10, r5
5710	adcs	r11, r11, #0
5711	stm	r12!, {r10, r11}
5712	ldm	r12, {r10, r11}
5713	adcs	r10, r10, #0
5714	adcs	r11, r11, #0
5715	stm	r12!, {r10, r11}
5716	ldm	r12, {r10}
5717	adcs	r10, r10, #0
5718	stm	r12!, {r10}
5719	sub	r0, r0, #16
5720	mov	r12, sp
5721	# Load bits 252-376
5722	add	r12, r12, #28
5723	ldm	r12, {r1, r2, r3, r4, r5}
5724	lsl	r5, r5, #4
5725	orr	r5, r5, r4, lsr #28
5726	lsl	r4, r4, #4
5727	orr	r4, r4, r3, lsr #28
5728	lsl	r3, r3, #4
5729	orr	r3, r3, r2, lsr #28
5730	lsl	r2, r2, #4
5731	orr	r2, r2, r1, lsr #28
5732#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5733	bic	r5, r5, #0xe0000000
5734#else
5735	bfc	r5, #29, #3
5736#endif
5737	sub	r12, r12, #28
5738	# Sub product of top 4 words and order
5739	mov	r0, sp
5740	#   * -5cf5d3ed
5741#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5742	mov	r1, #19
5743	orr	r1, r1, #0xa3000000
5744	orr	r1, r1, #0xa0000
5745	orr	r1, r1, #0x2c00
5746#else
5747#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5748	mov	r1, #0x13
5749	orr	r1, r1, #0x2c00
5750#else
5751	mov	r1, #0x2c13
5752#endif
5753#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5754	orr	r1, r1, #0xa3000000
5755	orr	r1, r1, #0xa0000
5756#else
5757	movt	r1, #0xa30a
5758#endif
5759#endif
5760	mov	lr, #0
5761	ldm	r0, {r6, r7, r8, r9}
5762	umlal	r6, lr, r2, r1
5763	adds	r7, r7, lr
5764	mov	lr, #0
5765	adc	lr, lr, #0
5766	umlal	r7, lr, r3, r1
5767	adds	r8, r8, lr
5768	mov	lr, #0
5769	adc	lr, lr, #0
5770	umlal	r8, lr, r4, r1
5771	adds	r9, r9, lr
5772	mov	lr, #0
5773	adc	lr, lr, #0
5774	umlal	r9, lr, r5, r1
5775	stm	r0, {r6, r7, r8, r9}
5776	add	r0, r0, #4
5777	#   * -5812631b
5778#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5779	mov	r1, #0xe5
5780	orr	r1, r1, #0xa7000000
5781	orr	r1, r1, #0xed0000
5782	orr	r1, r1, #0x9c00
5783#else
5784#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5785	mov	r1, #0xe5
5786	orr	r1, r1, #0x9c00
5787#else
5788	mov	r1, #0x9ce5
5789#endif
5790#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5791	orr	r1, r1, #0xa7000000
5792	orr	r1, r1, #0xed0000
5793#else
5794	movt	r1, #0xa7ed
5795#endif
5796#endif
5797	mov	r10, #0
5798	ldm	r0, {r6, r7, r8, r9}
5799	umlal	r6, r10, r2, r1
5800	adds	r7, r7, r10
5801	mov	r10, #0
5802	adc	r10, r10, #0
5803	umlal	r7, r10, r3, r1
5804	adds	r8, r8, r10
5805	mov	r10, #0
5806	adc	r10, r10, #0
5807	umlal	r8, r10, r4, r1
5808	adds	r9, r9, r10
5809	mov	r10, #0
5810	adc	r10, r10, #0
5811	umlal	r9, r10, r5, r1
5812	stm	r0, {r6, r7, r8, r9}
5813	add	r0, r0, #4
5814	#   * -a2f79cd7
5815#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5816	mov	r1, #41
5817	orr	r1, r1, #0x5d000000
5818	orr	r1, r1, #0x80000
5819	orr	r1, r1, #0x6300
5820#else
5821#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5822	mov	r1, #0x29
5823	orr	r1, r1, #0x6300
5824#else
5825	mov	r1, #0x6329
5826#endif
5827#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5828	orr	r1, r1, #0x5d000000
5829	orr	r1, r1, #0x80000
5830#else
5831	movt	r1, #0x5d08
5832#endif
5833#endif
5834	mov	r11, #0
5835	ldm	r0, {r6, r7, r8, r9}
5836	umlal	r6, r11, r2, r1
5837	adds	r7, r7, r11
5838	mov	r11, #0
5839	adc	r11, r11, #0
5840	umlal	r7, r11, r3, r1
5841	adds	r8, r8, r11
5842	mov	r11, #0
5843	adc	r11, r11, #0
5844	umlal	r8, r11, r4, r1
5845	adds	r9, r9, r11
5846	mov	r11, #0
5847	adc	r11, r11, #0
5848	umlal	r9, r11, r5, r1
5849	stm	r0, {r6, r7, r8, r9}
5850	add	r0, r0, #4
5851	#   * -14def9df
5852#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5853	mov	r1, #33
5854	orr	r1, r1, #0xeb000000
5855	orr	r1, r1, #0x210000
5856	orr	r1, r1, #0x600
5857#else
5858#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5859	mov	r1, #0x21
5860	orr	r1, r1, #0x600
5861#else
5862	mov	r1, #0x621
5863#endif
5864#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5865	orr	r1, r1, #0xeb000000
5866	orr	r1, r1, #0x210000
5867#else
5868	movt	r1, #0xeb21
5869#endif
5870#endif
5871	mov	r12, #0
5872	ldm	r0, {r6, r7, r8, r9}
5873	umlal	r6, r12, r2, r1
5874	adds	r7, r7, r12
5875	mov	r12, #0
5876	adc	r12, r12, #0
5877	umlal	r7, r12, r3, r1
5878	adds	r8, r8, r12
5879	mov	r12, #0
5880	adc	r12, r12, #0
5881	umlal	r8, r12, r4, r1
5882	adds	r9, r9, r12
5883	mov	r12, #0
5884	adc	r12, r12, #0
5885	umlal	r9, r12, r5, r1
5886	stm	r0, {r6, r7, r8, r9}
5887	add	r0, r0, #4
5888	# Add overflows at 4 * 32
5889	ldm	r0, {r6, r7, r8, r9}
5890#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5891	bic	r9, r9, #0xf0000000
5892#else
5893	bfc	r9, #28, #4
5894#endif
5895	adds	r6, r6, lr
5896	adcs	r7, r7, r10
5897	adcs	r8, r8, r11
5898	adc	r9, r9, r12
5899	# Subtract top at 4 * 32
5900	subs	r6, r6, r2
5901	sbcs	r7, r7, r3
5902	sbcs	r8, r8, r4
5903	sbcs	r9, r9, r5
5904	sbc	r1, r1, r1
5905	sub	r0, r0, #16
5906	ldm	r0, {r2, r3, r4, r5}
5907#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5908	mov	r10, #0xed
5909	orr	r10, r10, #0x5c000000
5910	orr	r10, r10, #0xf50000
5911	orr	r10, r10, #0xd300
5912#else
5913#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5914	mov	r10, #0xed
5915	orr	r10, r10, #0xd300
5916#else
5917	mov	r10, #0xd3ed
5918#endif
5919#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5920	orr	r10, r10, #0x5c000000
5921	orr	r10, r10, #0xf50000
5922#else
5923	movt	r10, #0x5cf5
5924#endif
5925#endif
5926#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5927	mov	r11, #26
5928	orr	r11, r11, #0x58000000
5929	orr	r11, r11, #0x120000
5930	orr	r11, r11, #0x6300
5931#else
5932#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5933	mov	r11, #0x1a
5934	orr	r11, r11, #0x6300
5935#else
5936	mov	r11, #0x631a
5937#endif
5938#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5939	orr	r11, r11, #0x58000000
5940	orr	r11, r11, #0x120000
5941#else
5942	movt	r11, #0x5812
5943#endif
5944#endif
5945#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5946	mov	r12, #0xd6
5947	orr	r12, r12, #0xa2000000
5948	orr	r12, r12, #0xf70000
5949	orr	r12, r12, #0x9c00
5950#else
5951#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5952	mov	r12, #0xd6
5953	orr	r12, r12, #0x9c00
5954#else
5955	mov	r12, #0x9cd6
5956#endif
5957#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5958	orr	r12, r12, #0xa2000000
5959	orr	r12, r12, #0xf70000
5960#else
5961	movt	r12, #0xa2f7
5962#endif
5963#endif
5964#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5965	mov	lr, #0xde
5966	orr	lr, lr, #0x14000000
5967	orr	lr, lr, #0xde0000
5968	orr	lr, lr, #0xf900
5969#else
5970#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5971	mov	lr, #0xde
5972	orr	lr, lr, #0xf900
5973#else
5974	mov	lr, #0xf9de
5975#endif
5976#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5977	orr	lr, lr, #0x14000000
5978	orr	lr, lr, #0xde0000
5979#else
5980	movt	lr, #0x14de
5981#endif
5982#endif
5983	and	r10, r10, r1
5984	and	r11, r11, r1
5985	and	r12, r12, r1
5986	and	lr, lr, r1
5987	adds	r2, r2, r10
5988	adcs	r3, r3, r11
5989	adcs	r4, r4, r12
5990	adcs	r5, r5, lr
5991	adcs	r6, r6, #0
5992	adcs	r7, r7, #0
5993	and	r1, r1, #0x10000000
5994	adcs	r8, r8, #0
5995	adc	r9, r9, r1
5996#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
5997	bic	r9, r9, #0xf0000000
5998#else
5999	bfc	r9, #28, #4
6000#endif
6001	# Store result
6002	ldr	r0, [sp, #52]
6003	stm	r0, {r2, r3, r4, r5, r6, r7, r8, r9}
6004	add	sp, sp, #56
6005	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
6006	.size	sc_reduce,.-sc_reduce
6007#else
6008	.text
6009	.align	4
6010	.globl	sc_reduce
6011	.type	sc_reduce, %function
6012sc_reduce:
6013	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
6014	sub	sp, sp, #56
6015	str	r0, [sp, #52]
6016	# Load bits 252-511
6017	add	r0, r0, #28
6018	ldm	r0, {r1, r2, r3, r4, r5, r6, r7, r8, r9}
6019	lsr	lr, r9, #24
6020	lsl	r9, r9, #4
6021	orr	r9, r9, r8, lsr #28
6022	lsl	r8, r8, #4
6023	orr	r8, r8, r7, lsr #28
6024	lsl	r7, r7, #4
6025	orr	r7, r7, r6, lsr #28
6026	lsl	r6, r6, #4
6027	orr	r6, r6, r5, lsr #28
6028	lsl	r5, r5, #4
6029	orr	r5, r5, r4, lsr #28
6030	lsl	r4, r4, #4
6031	orr	r4, r4, r3, lsr #28
6032	lsl	r3, r3, #4
6033	orr	r3, r3, r2, lsr #28
6034	lsl	r2, r2, #4
6035	orr	r2, r2, r1, lsr #28
6036#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6037	bic	r9, r9, #0xf0000000
6038#else
6039	bfc	r9, #28, #4
6040#endif
6041	sub	r0, r0, #28
6042	# Add order times bits 504..511
6043#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6044	mov	r10, #19
6045	orr	r10, r10, #0xa3000000
6046	orr	r10, r10, #0xa0000
6047	orr	r10, r10, #0x2c00
6048#else
6049#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6050	mov	r10, #0x13
6051	orr	r10, r10, #0x2c00
6052#else
6053	mov	r10, #0x2c13
6054#endif
6055#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6056	orr	r10, r10, #0xa3000000
6057	orr	r10, r10, #0xa0000
6058#else
6059	movt	r10, #0xa30a
6060#endif
6061#endif
6062#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6063	mov	r11, #0xe5
6064	orr	r11, r11, #0xa7000000
6065	orr	r11, r11, #0xed0000
6066	orr	r11, r11, #0x9c00
6067#else
6068#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6069	mov	r11, #0xe5
6070	orr	r11, r11, #0x9c00
6071#else
6072	mov	r11, #0x9ce5
6073#endif
6074#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6075	orr	r11, r11, #0xa7000000
6076	orr	r11, r11, #0xed0000
6077#else
6078	movt	r11, #0xa7ed
6079#endif
6080#endif
6081	mov	r1, #0
6082	umlal	r2, r1, r10, lr
6083	umaal	r3, r1, r11, lr
6084#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6085	mov	r10, #41
6086	orr	r10, r10, #0x5d000000
6087	orr	r10, r10, #0x80000
6088	orr	r10, r10, #0x6300
6089#else
6090#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6091	mov	r10, #0x29
6092	orr	r10, r10, #0x6300
6093#else
6094	mov	r10, #0x6329
6095#endif
6096#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6097	orr	r10, r10, #0x5d000000
6098	orr	r10, r10, #0x80000
6099#else
6100	movt	r10, #0x5d08
6101#endif
6102#endif
6103#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6104	mov	r11, #33
6105	orr	r11, r11, #0xeb000000
6106	orr	r11, r11, #0x210000
6107	orr	r11, r11, #0x600
6108#else
6109#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6110	mov	r11, #0x21
6111	orr	r11, r11, #0x600
6112#else
6113	mov	r11, #0x621
6114#endif
6115#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6116	orr	r11, r11, #0xeb000000
6117	orr	r11, r11, #0x210000
6118#else
6119	movt	r11, #0xeb21
6120#endif
6121#endif
6122	umaal	r4, r1, r10, lr
6123	umaal	r5, r1, r11, lr
6124	adds	r6, r6, r1
6125	adcs	r7, r7, #0
6126	adcs	r8, r8, #0
6127	adc	r9, r9, #0
6128	subs	r6, r6, lr
6129	sbcs	r7, r7, #0
6130	sbcs	r8, r8, #0
6131	sbc	r9, r9, #0
6132	# Sub product of top 8 words and order
6133	mov	r12, sp
6134#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6135	mov	r1, #19
6136	orr	r1, r1, #0xa3000000
6137	orr	r1, r1, #0xa0000
6138	orr	r1, r1, #0x2c00
6139#else
6140#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6141	mov	r1, #0x13
6142	orr	r1, r1, #0x2c00
6143#else
6144	mov	r1, #0x2c13
6145#endif
6146#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6147	orr	r1, r1, #0xa3000000
6148	orr	r1, r1, #0xa0000
6149#else
6150	movt	r1, #0xa30a
6151#endif
6152#endif
6153	mov	lr, #0
6154	ldm	r0!, {r10, r11}
6155	umlal	r10, lr, r2, r1
6156	umaal	r11, lr, r3, r1
6157	stm	r12!, {r10, r11}
6158	ldm	r0!, {r10, r11}
6159	umaal	r10, lr, r4, r1
6160	umaal	r11, lr, r5, r1
6161	stm	r12!, {r10, r11}
6162	ldm	r0!, {r10, r11}
6163	umaal	r10, lr, r6, r1
6164	umaal	r11, lr, r7, r1
6165	stm	r12!, {r10, r11}
6166	ldm	r0!, {r10, r11}
6167	umaal	r10, lr, r8, r1
6168#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6169	bic	r11, r11, #0xf0000000
6170#else
6171	bfc	r11, #28, #4
6172#endif
6173	umaal	r11, lr, r9, r1
6174	stm	r12!, {r10, r11, lr}
6175	sub	r0, r0, #16
6176	sub	r12, r12, #32
6177#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6178	mov	r1, #0xe5
6179	orr	r1, r1, #0xa7000000
6180	orr	r1, r1, #0xed0000
6181	orr	r1, r1, #0x9c00
6182#else
6183#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6184	mov	r1, #0xe5
6185	orr	r1, r1, #0x9c00
6186#else
6187	mov	r1, #0x9ce5
6188#endif
6189#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6190	orr	r1, r1, #0xa7000000
6191	orr	r1, r1, #0xed0000
6192#else
6193	movt	r1, #0xa7ed
6194#endif
6195#endif
6196	mov	lr, #0
6197	ldm	r12, {r10, r11}
6198	umlal	r10, lr, r2, r1
6199	umaal	r11, lr, r3, r1
6200	stm	r12!, {r10, r11}
6201	ldm	r12, {r10, r11}
6202	umaal	r10, lr, r4, r1
6203	umaal	r11, lr, r5, r1
6204	stm	r12!, {r10, r11}
6205	ldm	r12, {r10, r11}
6206	umaal	r10, lr, r6, r1
6207	umaal	r11, lr, r7, r1
6208	stm	r12!, {r10, r11}
6209	ldm	r12, {r10, r11}
6210	umaal	r10, lr, r8, r1
6211	umaal	r11, lr, r9, r1
6212	stm	r12!, {r10, r11, lr}
6213	sub	r12, r12, #32
6214#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6215	mov	r1, #41
6216	orr	r1, r1, #0x5d000000
6217	orr	r1, r1, #0x80000
6218	orr	r1, r1, #0x6300
6219#else
6220#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6221	mov	r1, #0x29
6222	orr	r1, r1, #0x6300
6223#else
6224	mov	r1, #0x6329
6225#endif
6226#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6227	orr	r1, r1, #0x5d000000
6228	orr	r1, r1, #0x80000
6229#else
6230	movt	r1, #0x5d08
6231#endif
6232#endif
6233	mov	lr, #0
6234	ldm	r12, {r10, r11}
6235	umlal	r10, lr, r2, r1
6236	umaal	r11, lr, r3, r1
6237	stm	r12!, {r10, r11}
6238	ldm	r12, {r10, r11}
6239	umaal	r10, lr, r4, r1
6240	umaal	r11, lr, r5, r1
6241	stm	r12!, {r10, r11}
6242	ldm	r12, {r10, r11}
6243	umaal	r10, lr, r6, r1
6244	umaal	r11, lr, r7, r1
6245	stm	r12!, {r10, r11}
6246	ldm	r12, {r10, r11}
6247	umaal	r10, lr, r8, r1
6248	umaal	r11, lr, r9, r1
6249	stm	r12!, {r10, r11, lr}
6250	sub	r12, r12, #32
6251#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6252	mov	r1, #33
6253	orr	r1, r1, #0xeb000000
6254	orr	r1, r1, #0x210000
6255	orr	r1, r1, #0x600
6256#else
6257#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6258	mov	r1, #0x21
6259	orr	r1, r1, #0x600
6260#else
6261	mov	r1, #0x621
6262#endif
6263#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6264	orr	r1, r1, #0xeb000000
6265	orr	r1, r1, #0x210000
6266#else
6267	movt	r1, #0xeb21
6268#endif
6269#endif
6270	mov	lr, #0
6271	ldm	r12, {r10, r11}
6272	umlal	r10, lr, r2, r1
6273	umaal	r11, lr, r3, r1
6274	stm	r12!, {r10, r11}
6275	ldm	r12, {r10, r11}
6276	umaal	r10, lr, r4, r1
6277	umaal	r11, lr, r5, r1
6278	stm	r12!, {r10, r11}
6279	ldm	r12, {r10, r11}
6280	umaal	r10, lr, r6, r1
6281	umaal	r11, lr, r7, r1
6282	stm	r12!, {r10, r11}
6283	ldm	r12, {r10, r11}
6284	umaal	r10, lr, r8, r1
6285	umaal	r11, lr, r9, r1
6286	stm	r12!, {r10, r11, lr}
6287	sub	r12, r12, #32
6288	# Subtract at 4 * 32
6289	ldm	r12, {r10, r11}
6290	subs	r10, r10, r2
6291	sbcs	r11, r11, r3
6292	stm	r12!, {r10, r11}
6293	ldm	r12, {r10, r11}
6294	sbcs	r10, r10, r4
6295	sbcs	r11, r11, r5
6296	stm	r12!, {r10, r11}
6297	ldm	r12, {r10, r11}
6298	sbcs	r10, r10, r6
6299	sbcs	r11, r11, r7
6300	stm	r12!, {r10, r11}
6301	ldm	r12, {r10, r11}
6302	sbcs	r10, r10, r8
6303	sbc	r11, r11, r9
6304	stm	r12!, {r10, r11}
6305	sub	r12, r12, #36
6306	asr	lr, r11, #25
6307	# Conditionally subtract order starting at bit 125
6308	mov	r1, #0xa0000000
6309#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6310	mov	r2, #0x7d
6311	orr	r2, r2, #0x4b000000
6312	orr	r2, r2, #0x9e0000
6313	orr	r2, r2, #0xba00
6314#else
6315#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6316	mov	r2, #0x7d
6317	orr	r2, r2, #0xba00
6318#else
6319	mov	r2, #0xba7d
6320#endif
6321#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6322	orr	r2, r2, #0x4b000000
6323	orr	r2, r2, #0x9e0000
6324#else
6325	movt	r2, #0x4b9e
6326#endif
6327#endif
6328#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6329	mov	r3, #0x63
6330	orr	r3, r3, #0xcb000000
6331	orr	r3, r3, #0x20000
6332	orr	r3, r3, #0x4c00
6333#else
6334#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6335	mov	r3, #0x63
6336	orr	r3, r3, #0x4c00
6337#else
6338	mov	r3, #0x4c63
6339#endif
6340#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6341	orr	r3, r3, #0xcb000000
6342	orr	r3, r3, #0x20000
6343#else
6344	movt	r3, #0xcb02
6345#endif
6346#endif
6347#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6348	mov	r4, #0x9a
6349	orr	r4, r4, #0xd4000000
6350	orr	r4, r4, #0x5e0000
6351	orr	r4, r4, #0xf300
6352#else
6353#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6354	mov	r4, #0x9a
6355	orr	r4, r4, #0xf300
6356#else
6357	mov	r4, #0xf39a
6358#endif
6359#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6360	orr	r4, r4, #0xd4000000
6361	orr	r4, r4, #0x5e0000
6362#else
6363	movt	r4, #0xd45e
6364#endif
6365#endif
6366#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6367	mov	r5, #59
6368	orr	r5, r5, #0x2000000
6369	orr	r5, r5, #0x9b0000
6370	orr	r5, r5, #0xdf00
6371#else
6372#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6373	mov	r5, #0x3b
6374	orr	r5, r5, #0xdf00
6375#else
6376	mov	r5, #0xdf3b
6377#endif
6378#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6379	orr	r5, r5, #0x2000000
6380	orr	r5, r5, #0x9b0000
6381#else
6382	movt	r5, #0x29b
6383#endif
6384#endif
6385	mov	r9, #0x2000000
6386	and	r1, r1, lr
6387	and	r2, r2, lr
6388	and	r3, r3, lr
6389	and	r4, r4, lr
6390	and	r5, r5, lr
6391	and	r9, r9, lr
6392	ldm	r12, {r10, r11}
6393	adds	r10, r10, r1
6394	adcs	r11, r11, r2
6395	stm	r12!, {r10, r11}
6396	ldm	r12, {r10, r11}
6397	adcs	r10, r10, r3
6398	adcs	r11, r11, r4
6399	stm	r12!, {r10, r11}
6400	ldm	r12, {r10, r11}
6401	adcs	r10, r10, r5
6402	adcs	r11, r11, #0
6403	stm	r12!, {r10, r11}
6404	ldm	r12, {r10, r11}
6405	adcs	r10, r10, #0
6406	adcs	r11, r11, #0
6407	stm	r12!, {r10, r11}
6408	ldm	r12, {r10}
6409	adcs	r10, r10, #0
6410	stm	r12!, {r10}
6411	sub	r0, r0, #16
6412	mov	r12, sp
6413	# Load bits 252-376
6414	add	r12, r12, #28
6415	ldm	r12, {r1, r2, r3, r4, r5}
6416	lsl	r5, r5, #4
6417	orr	r5, r5, r4, lsr #28
6418	lsl	r4, r4, #4
6419	orr	r4, r4, r3, lsr #28
6420	lsl	r3, r3, #4
6421	orr	r3, r3, r2, lsr #28
6422	lsl	r2, r2, #4
6423	orr	r2, r2, r1, lsr #28
6424#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6425	bic	r5, r5, #0xe0000000
6426#else
6427	bfc	r5, #29, #3
6428#endif
6429	sub	r12, r12, #28
6430	# Sub product of top 4 words and order
6431	mov	r0, sp
6432	#   * -5cf5d3ed
6433#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6434	mov	r1, #19
6435	orr	r1, r1, #0xa3000000
6436	orr	r1, r1, #0xa0000
6437	orr	r1, r1, #0x2c00
6438#else
6439#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6440	mov	r1, #0x13
6441	orr	r1, r1, #0x2c00
6442#else
6443	mov	r1, #0x2c13
6444#endif
6445#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6446	orr	r1, r1, #0xa3000000
6447	orr	r1, r1, #0xa0000
6448#else
6449	movt	r1, #0xa30a
6450#endif
6451#endif
6452	mov	lr, #0
6453	ldm	r0, {r6, r7, r8, r9}
6454	umlal	r6, lr, r2, r1
6455	umaal	r7, lr, r3, r1
6456	umaal	r8, lr, r4, r1
6457	umaal	r9, lr, r5, r1
6458	stm	r0, {r6, r7, r8, r9}
6459	add	r0, r0, #4
6460	#   * -5812631b
6461#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6462	mov	r1, #0xe5
6463	orr	r1, r1, #0xa7000000
6464	orr	r1, r1, #0xed0000
6465	orr	r1, r1, #0x9c00
6466#else
6467#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6468	mov	r1, #0xe5
6469	orr	r1, r1, #0x9c00
6470#else
6471	mov	r1, #0x9ce5
6472#endif
6473#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6474	orr	r1, r1, #0xa7000000
6475	orr	r1, r1, #0xed0000
6476#else
6477	movt	r1, #0xa7ed
6478#endif
6479#endif
6480	mov	r10, #0
6481	ldm	r0, {r6, r7, r8, r9}
6482	umlal	r6, r10, r2, r1
6483	umaal	r7, r10, r3, r1
6484	umaal	r8, r10, r4, r1
6485	umaal	r9, r10, r5, r1
6486	stm	r0, {r6, r7, r8, r9}
6487	add	r0, r0, #4
6488	#   * -a2f79cd7
6489#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6490	mov	r1, #41
6491	orr	r1, r1, #0x5d000000
6492	orr	r1, r1, #0x80000
6493	orr	r1, r1, #0x6300
6494#else
6495#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6496	mov	r1, #0x29
6497	orr	r1, r1, #0x6300
6498#else
6499	mov	r1, #0x6329
6500#endif
6501#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6502	orr	r1, r1, #0x5d000000
6503	orr	r1, r1, #0x80000
6504#else
6505	movt	r1, #0x5d08
6506#endif
6507#endif
6508	mov	r11, #0
6509	ldm	r0, {r6, r7, r8, r9}
6510	umlal	r6, r11, r2, r1
6511	umaal	r7, r11, r3, r1
6512	umaal	r8, r11, r4, r1
6513	umaal	r9, r11, r5, r1
6514	stm	r0, {r6, r7, r8, r9}
6515	add	r0, r0, #4
6516	#   * -14def9df
6517#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6518	mov	r1, #33
6519	orr	r1, r1, #0xeb000000
6520	orr	r1, r1, #0x210000
6521	orr	r1, r1, #0x600
6522#else
6523#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6524	mov	r1, #0x21
6525	orr	r1, r1, #0x600
6526#else
6527	mov	r1, #0x621
6528#endif
6529#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6530	orr	r1, r1, #0xeb000000
6531	orr	r1, r1, #0x210000
6532#else
6533	movt	r1, #0xeb21
6534#endif
6535#endif
6536	mov	r12, #0
6537	ldm	r0, {r6, r7, r8, r9}
6538	umlal	r6, r12, r2, r1
6539	umaal	r7, r12, r3, r1
6540	umaal	r8, r12, r4, r1
6541	umaal	r9, r12, r5, r1
6542	stm	r0, {r6, r7, r8, r9}
6543	add	r0, r0, #4
6544	# Add overflows at 4 * 32
6545	ldm	r0, {r6, r7, r8, r9}
6546#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6547	bic	r9, r9, #0xf0000000
6548#else
6549	bfc	r9, #28, #4
6550#endif
6551	adds	r6, r6, lr
6552	adcs	r7, r7, r10
6553	adcs	r8, r8, r11
6554	adc	r9, r9, r12
6555	# Subtract top at 4 * 32
6556	subs	r6, r6, r2
6557	sbcs	r7, r7, r3
6558	sbcs	r8, r8, r4
6559	sbcs	r9, r9, r5
6560	sbc	r1, r1, r1
6561	sub	r0, r0, #16
6562	ldm	r0, {r2, r3, r4, r5}
6563#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6564	mov	r10, #0xed
6565	orr	r10, r10, #0x5c000000
6566	orr	r10, r10, #0xf50000
6567	orr	r10, r10, #0xd300
6568#else
6569#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6570	mov	r10, #0xed
6571	orr	r10, r10, #0xd300
6572#else
6573	mov	r10, #0xd3ed
6574#endif
6575#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6576	orr	r10, r10, #0x5c000000
6577	orr	r10, r10, #0xf50000
6578#else
6579	movt	r10, #0x5cf5
6580#endif
6581#endif
6582#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6583	mov	r11, #26
6584	orr	r11, r11, #0x58000000
6585	orr	r11, r11, #0x120000
6586	orr	r11, r11, #0x6300
6587#else
6588#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6589	mov	r11, #0x1a
6590	orr	r11, r11, #0x6300
6591#else
6592	mov	r11, #0x631a
6593#endif
6594#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6595	orr	r11, r11, #0x58000000
6596	orr	r11, r11, #0x120000
6597#else
6598	movt	r11, #0x5812
6599#endif
6600#endif
6601#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6602	mov	r12, #0xd6
6603	orr	r12, r12, #0xa2000000
6604	orr	r12, r12, #0xf70000
6605	orr	r12, r12, #0x9c00
6606#else
6607#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6608	mov	r12, #0xd6
6609	orr	r12, r12, #0x9c00
6610#else
6611	mov	r12, #0x9cd6
6612#endif
6613#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6614	orr	r12, r12, #0xa2000000
6615	orr	r12, r12, #0xf70000
6616#else
6617	movt	r12, #0xa2f7
6618#endif
6619#endif
6620#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6621	mov	lr, #0xde
6622	orr	lr, lr, #0x14000000
6623	orr	lr, lr, #0xde0000
6624	orr	lr, lr, #0xf900
6625#else
6626#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6627	mov	lr, #0xde
6628	orr	lr, lr, #0xf900
6629#else
6630	mov	lr, #0xf9de
6631#endif
6632#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6633	orr	lr, lr, #0x14000000
6634	orr	lr, lr, #0xde0000
6635#else
6636	movt	lr, #0x14de
6637#endif
6638#endif
6639	and	r10, r10, r1
6640	and	r11, r11, r1
6641	and	r12, r12, r1
6642	and	lr, lr, r1
6643	adds	r2, r2, r10
6644	adcs	r3, r3, r11
6645	adcs	r4, r4, r12
6646	adcs	r5, r5, lr
6647	adcs	r6, r6, #0
6648	adcs	r7, r7, #0
6649	and	r1, r1, #0x10000000
6650	adcs	r8, r8, #0
6651	adc	r9, r9, r1
6652#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
6653	bic	r9, r9, #0xf0000000
6654#else
6655	bfc	r9, #28, #4
6656#endif
6657	# Store result
6658	ldr	r0, [sp, #52]
6659	stm	r0, {r2, r3, r4, r5, r6, r7, r8, r9}
6660	add	sp, sp, #56
6661	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
6662	.size	sc_reduce,.-sc_reduce
6663#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
6664#ifdef HAVE_ED25519_SIGN
6665#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 6)
6666	.text
6667	.align	4
6668	.globl	sc_muladd
6669	.type	sc_muladd, %function
6670sc_muladd:
6671	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
6672	sub	sp, sp, #0x50
6673	add	lr, sp, #0x44
6674	stm	lr, {r0, r1, r3}
6675	mov	r0, #0
6676	ldr	r12, [r1]
6677	# A[0] * B[0]
6678	ldr	lr, [r2]
6679	umull	r3, r4, r12, lr
6680	# A[0] * B[2]
6681	ldr	lr, [r2, #8]
6682	umull	r5, r6, r12, lr
6683	# A[0] * B[4]
6684	ldr	lr, [r2, #16]
6685	umull	r7, r8, r12, lr
6686	# A[0] * B[6]
6687	ldr	lr, [r2, #24]
6688	umull	r9, r10, r12, lr
6689	str	r3, [sp]
6690	# A[0] * B[1]
6691	ldr	lr, [r2, #4]
6692	mov	r11, r0
6693	umlal	r4, r11, r12, lr
6694	adds	r5, r5, r11
6695	# A[0] * B[3]
6696	ldr	lr, [r2, #12]
6697	adcs	r6, r6, #0
6698	adc	r11, r0, #0
6699	umlal	r6, r11, r12, lr
6700	adds	r7, r7, r11
6701	# A[0] * B[5]
6702	ldr	lr, [r2, #20]
6703	adcs	r8, r8, #0
6704	adc	r11, r0, #0
6705	umlal	r8, r11, r12, lr
6706	adds	r9, r9, r11
6707	# A[0] * B[7]
6708	ldr	lr, [r2, #28]
6709	adcs	r10, r10, #0
6710	adc	r3, r0, #0
6711	umlal	r10, r3, r12, lr
6712	# A[1] * B[0]
6713	ldr	r12, [r1, #4]
6714	ldr	lr, [r2]
6715	mov	r11, #0
6716	umlal	r4, r11, r12, lr
6717	str	r4, [sp, #4]
6718	adds	r5, r5, r11
6719	# A[1] * B[1]
6720	ldr	lr, [r2, #4]
6721	adc	r11, r0, #0
6722	umlal	r5, r11, r12, lr
6723	adds	r6, r6, r11
6724	# A[1] * B[2]
6725	ldr	lr, [r2, #8]
6726	adc	r11, r0, #0
6727	umlal	r6, r11, r12, lr
6728	adds	r7, r7, r11
6729	# A[1] * B[3]
6730	ldr	lr, [r2, #12]
6731	adc	r11, r0, #0
6732	umlal	r7, r11, r12, lr
6733	adds	r8, r8, r11
6734	# A[1] * B[4]
6735	ldr	lr, [r2, #16]
6736	adc	r11, r0, #0
6737	umlal	r8, r11, r12, lr
6738	adds	r9, r9, r11
6739	# A[1] * B[5]
6740	ldr	lr, [r2, #20]
6741	adc	r11, r0, #0
6742	umlal	r9, r11, r12, lr
6743	adds	r10, r10, r11
6744	# A[1] * B[6]
6745	ldr	lr, [r2, #24]
6746	adc	r11, r0, #0
6747	umlal	r10, r11, r12, lr
6748	adds	r3, r3, r11
6749	# A[1] * B[7]
6750	ldr	lr, [r2, #28]
6751	adc	r4, r0, #0
6752	umlal	r3, r4, r12, lr
6753	# A[2] * B[0]
6754	ldr	r12, [r1, #8]
6755	ldr	lr, [r2]
6756	mov	r11, #0
6757	umlal	r5, r11, r12, lr
6758	str	r5, [sp, #8]
6759	adds	r6, r6, r11
6760	# A[2] * B[1]
6761	ldr	lr, [r2, #4]
6762	adc	r11, r0, #0
6763	umlal	r6, r11, r12, lr
6764	adds	r7, r7, r11
6765	# A[2] * B[2]
6766	ldr	lr, [r2, #8]
6767	adc	r11, r0, #0
6768	umlal	r7, r11, r12, lr
6769	adds	r8, r8, r11
6770	# A[2] * B[3]
6771	ldr	lr, [r2, #12]
6772	adc	r11, r0, #0
6773	umlal	r8, r11, r12, lr
6774	adds	r9, r9, r11
6775	# A[2] * B[4]
6776	ldr	lr, [r2, #16]
6777	adc	r11, r0, #0
6778	umlal	r9, r11, r12, lr
6779	adds	r10, r10, r11
6780	# A[2] * B[5]
6781	ldr	lr, [r2, #20]
6782	adc	r11, r0, #0
6783	umlal	r10, r11, r12, lr
6784	adds	r3, r3, r11
6785	# A[2] * B[6]
6786	ldr	lr, [r2, #24]
6787	adc	r11, r0, #0
6788	umlal	r3, r11, r12, lr
6789	adds	r4, r4, r11
6790	# A[2] * B[7]
6791	ldr	lr, [r2, #28]
6792	adc	r5, r0, #0
6793	umlal	r4, r5, r12, lr
6794	# A[3] * B[0]
6795	ldr	r12, [r1, #12]
6796	ldr	lr, [r2]
6797	mov	r11, #0
6798	umlal	r6, r11, r12, lr
6799	str	r6, [sp, #12]
6800	adds	r7, r7, r11
6801	# A[3] * B[1]
6802	ldr	lr, [r2, #4]
6803	adc	r11, r0, #0
6804	umlal	r7, r11, r12, lr
6805	adds	r8, r8, r11
6806	# A[3] * B[2]
6807	ldr	lr, [r2, #8]
6808	adc	r11, r0, #0
6809	umlal	r8, r11, r12, lr
6810	adds	r9, r9, r11
6811	# A[3] * B[3]
6812	ldr	lr, [r2, #12]
6813	adc	r11, r0, #0
6814	umlal	r9, r11, r12, lr
6815	adds	r10, r10, r11
6816	# A[3] * B[4]
6817	ldr	lr, [r2, #16]
6818	adc	r11, r0, #0
6819	umlal	r10, r11, r12, lr
6820	adds	r3, r3, r11
6821	# A[3] * B[5]
6822	ldr	lr, [r2, #20]
6823	adc	r11, r0, #0
6824	umlal	r3, r11, r12, lr
6825	adds	r4, r4, r11
6826	# A[3] * B[6]
6827	ldr	lr, [r2, #24]
6828	adc	r11, r0, #0
6829	umlal	r4, r11, r12, lr
6830	adds	r5, r5, r11
6831	# A[3] * B[7]
6832	ldr	lr, [r2, #28]
6833	adc	r6, r0, #0
6834	umlal	r5, r6, r12, lr
6835	# A[4] * B[0]
6836	ldr	r12, [r1, #16]
6837	ldr	lr, [r2]
6838	mov	r11, #0
6839	umlal	r7, r11, r12, lr
6840	str	r7, [sp, #16]
6841	adds	r8, r8, r11
6842	# A[4] * B[1]
6843	ldr	lr, [r2, #4]
6844	adc	r11, r0, #0
6845	umlal	r8, r11, r12, lr
6846	adds	r9, r9, r11
6847	# A[4] * B[2]
6848	ldr	lr, [r2, #8]
6849	adc	r11, r0, #0
6850	umlal	r9, r11, r12, lr
6851	adds	r10, r10, r11
6852	# A[4] * B[3]
6853	ldr	lr, [r2, #12]
6854	adc	r11, r0, #0
6855	umlal	r10, r11, r12, lr
6856	adds	r3, r3, r11
6857	# A[4] * B[4]
6858	ldr	lr, [r2, #16]
6859	adc	r11, r0, #0
6860	umlal	r3, r11, r12, lr
6861	adds	r4, r4, r11
6862	# A[4] * B[5]
6863	ldr	lr, [r2, #20]
6864	adc	r11, r0, #0
6865	umlal	r4, r11, r12, lr
6866	adds	r5, r5, r11
6867	# A[4] * B[6]
6868	ldr	lr, [r2, #24]
6869	adc	r11, r0, #0
6870	umlal	r5, r11, r12, lr
6871	adds	r6, r6, r11
6872	# A[4] * B[7]
6873	ldr	lr, [r2, #28]
6874	adc	r7, r0, #0
6875	umlal	r6, r7, r12, lr
6876	# A[5] * B[0]
6877	ldr	r12, [r1, #20]
6878	ldr	lr, [r2]
6879	mov	r11, #0
6880	umlal	r8, r11, r12, lr
6881	str	r8, [sp, #20]
6882	adds	r9, r9, r11
6883	# A[5] * B[1]
6884	ldr	lr, [r2, #4]
6885	adc	r11, r0, #0
6886	umlal	r9, r11, r12, lr
6887	adds	r10, r10, r11
6888	# A[5] * B[2]
6889	ldr	lr, [r2, #8]
6890	adc	r11, r0, #0
6891	umlal	r10, r11, r12, lr
6892	adds	r3, r3, r11
6893	# A[5] * B[3]
6894	ldr	lr, [r2, #12]
6895	adc	r11, r0, #0
6896	umlal	r3, r11, r12, lr
6897	adds	r4, r4, r11
6898	# A[5] * B[4]
6899	ldr	lr, [r2, #16]
6900	adc	r11, r0, #0
6901	umlal	r4, r11, r12, lr
6902	adds	r5, r5, r11
6903	# A[5] * B[5]
6904	ldr	lr, [r2, #20]
6905	adc	r11, r0, #0
6906	umlal	r5, r11, r12, lr
6907	adds	r6, r6, r11
6908	# A[5] * B[6]
6909	ldr	lr, [r2, #24]
6910	adc	r11, r0, #0
6911	umlal	r6, r11, r12, lr
6912	adds	r7, r7, r11
6913	# A[5] * B[7]
6914	ldr	lr, [r2, #28]
6915	adc	r8, r0, #0
6916	umlal	r7, r8, r12, lr
6917	# A[6] * B[0]
6918	ldr	r12, [r1, #24]
6919	ldr	lr, [r2]
6920	mov	r11, #0
6921	umlal	r9, r11, r12, lr
6922	str	r9, [sp, #24]
6923	adds	r10, r10, r11
6924	# A[6] * B[1]
6925	ldr	lr, [r2, #4]
6926	adc	r11, r0, #0
6927	umlal	r10, r11, r12, lr
6928	adds	r3, r3, r11
6929	# A[6] * B[2]
6930	ldr	lr, [r2, #8]
6931	adc	r11, r0, #0
6932	umlal	r3, r11, r12, lr
6933	adds	r4, r4, r11
6934	# A[6] * B[3]
6935	ldr	lr, [r2, #12]
6936	adc	r11, r0, #0
6937	umlal	r4, r11, r12, lr
6938	adds	r5, r5, r11
6939	# A[6] * B[4]
6940	ldr	lr, [r2, #16]
6941	adc	r11, r0, #0
6942	umlal	r5, r11, r12, lr
6943	adds	r6, r6, r11
6944	# A[6] * B[5]
6945	ldr	lr, [r2, #20]
6946	adc	r11, r0, #0
6947	umlal	r6, r11, r12, lr
6948	adds	r7, r7, r11
6949	# A[6] * B[6]
6950	ldr	lr, [r2, #24]
6951	adc	r11, r0, #0
6952	umlal	r7, r11, r12, lr
6953	adds	r8, r8, r11
6954	# A[6] * B[7]
6955	ldr	lr, [r2, #28]
6956	adc	r9, r0, #0
6957	umlal	r8, r9, r12, lr
6958	# A[7] * B[0]
6959	ldr	r12, [r1, #28]
6960	ldr	lr, [r2]
6961	mov	r11, #0
6962	umlal	r10, r11, r12, lr
6963	str	r10, [sp, #28]
6964	adds	r3, r3, r11
6965	# A[7] * B[1]
6966	ldr	lr, [r2, #4]
6967	adc	r11, r0, #0
6968	umlal	r3, r11, r12, lr
6969	adds	r4, r4, r11
6970	# A[7] * B[2]
6971	ldr	lr, [r2, #8]
6972	adc	r11, r0, #0
6973	umlal	r4, r11, r12, lr
6974	adds	r5, r5, r11
6975	# A[7] * B[3]
6976	ldr	lr, [r2, #12]
6977	adc	r11, r0, #0
6978	umlal	r5, r11, r12, lr
6979	adds	r6, r6, r11
6980	# A[7] * B[4]
6981	ldr	lr, [r2, #16]
6982	adc	r11, r0, #0
6983	umlal	r6, r11, r12, lr
6984	adds	r7, r7, r11
6985	# A[7] * B[5]
6986	ldr	lr, [r2, #20]
6987	adc	r11, r0, #0
6988	umlal	r7, r11, r12, lr
6989	adds	r8, r8, r11
6990	# A[7] * B[6]
6991	ldr	lr, [r2, #24]
6992	adc	r11, r0, #0
6993	umlal	r8, r11, r12, lr
6994	adds	r9, r9, r11
6995	# A[7] * B[7]
6996	ldr	lr, [r2, #28]
6997	adc	r10, r0, #0
6998	umlal	r9, r10, r12, lr
6999	add	lr, sp, #32
7000	stm	lr, {r3, r4, r5, r6, r7, r8, r9, r10}
7001	mov	r0, sp
7002	# Add c to a * b
7003	ldr	lr, [sp, #76]
7004	ldm	r0, {r2, r3, r4, r5, r6, r7, r8, r9}
7005	ldm	lr!, {r1, r10, r11, r12}
7006	adds	r2, r2, r1
7007	adcs	r3, r3, r10
7008	adcs	r4, r4, r11
7009	adcs	r5, r5, r12
7010	ldm	lr!, {r1, r10, r11, r12}
7011	adcs	r6, r6, r1
7012	adcs	r7, r7, r10
7013	adcs	r8, r8, r11
7014	adcs	r9, r9, r12
7015	mov	r1, r9
7016	stm	r0!, {r2, r3, r4, r5, r6, r7, r8, r9}
7017	ldm	r0, {r2, r3, r4, r5, r6, r7, r8, r9}
7018	adcs	r2, r2, #0
7019	adcs	r3, r3, #0
7020	adcs	r4, r4, #0
7021	adcs	r5, r5, #0
7022	adcs	r6, r6, #0
7023	adcs	r7, r7, #0
7024	adcs	r8, r8, #0
7025	adc	r9, r9, #0
7026	sub	r0, r0, #32
7027	# Get 252..503 and 504..507
7028	lsr	lr, r9, #24
7029	lsl	r9, r9, #4
7030	orr	r9, r9, r8, lsr #28
7031	lsl	r8, r8, #4
7032	orr	r8, r8, r7, lsr #28
7033	lsl	r7, r7, #4
7034	orr	r7, r7, r6, lsr #28
7035	lsl	r6, r6, #4
7036	orr	r6, r6, r5, lsr #28
7037	lsl	r5, r5, #4
7038	orr	r5, r5, r4, lsr #28
7039	lsl	r4, r4, #4
7040	orr	r4, r4, r3, lsr #28
7041	lsl	r3, r3, #4
7042	orr	r3, r3, r2, lsr #28
7043	lsl	r2, r2, #4
7044	orr	r2, r2, r1, lsr #28
7045#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7046	bic	r9, r9, #0xf0000000
7047#else
7048	bfc	r9, #28, #4
7049#endif
7050	# Add order times bits 504..507
7051#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7052	mov	r10, #19
7053	orr	r10, r10, #0xa3000000
7054	orr	r10, r10, #0xa0000
7055	orr	r10, r10, #0x2c00
7056#else
7057#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7058	mov	r10, #0x13
7059	orr	r10, r10, #0x2c00
7060#else
7061	mov	r10, #0x2c13
7062#endif
7063#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7064	orr	r10, r10, #0xa3000000
7065	orr	r10, r10, #0xa0000
7066#else
7067	movt	r10, #0xa30a
7068#endif
7069#endif
7070#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7071	mov	r11, #0xe5
7072	orr	r11, r11, #0xa7000000
7073	orr	r11, r11, #0xed0000
7074	orr	r11, r11, #0x9c00
7075#else
7076#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7077	mov	r11, #0xe5
7078	orr	r11, r11, #0x9c00
7079#else
7080	mov	r11, #0x9ce5
7081#endif
7082#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7083	orr	r11, r11, #0xa7000000
7084	orr	r11, r11, #0xed0000
7085#else
7086	movt	r11, #0xa7ed
7087#endif
7088#endif
7089	mov	r1, #0
7090	umlal	r2, r1, r10, lr
7091	adds	r3, r3, r1
7092	mov	r1, #0
7093	adc	r1, r1, #0
7094	umlal	r3, r1, r11, lr
7095#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7096	mov	r10, #41
7097	orr	r10, r10, #0x5d000000
7098	orr	r10, r10, #0x80000
7099	orr	r10, r10, #0x6300
7100#else
7101#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7102	mov	r10, #0x29
7103	orr	r10, r10, #0x6300
7104#else
7105	mov	r10, #0x6329
7106#endif
7107#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7108	orr	r10, r10, #0x5d000000
7109	orr	r10, r10, #0x80000
7110#else
7111	movt	r10, #0x5d08
7112#endif
7113#endif
7114#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7115	mov	r11, #33
7116	orr	r11, r11, #0xeb000000
7117	orr	r11, r11, #0x210000
7118	orr	r11, r11, #0x600
7119#else
7120#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7121	mov	r11, #0x21
7122	orr	r11, r11, #0x600
7123#else
7124	mov	r11, #0x621
7125#endif
7126#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7127	orr	r11, r11, #0xeb000000
7128	orr	r11, r11, #0x210000
7129#else
7130	movt	r11, #0xeb21
7131#endif
7132#endif
7133	adds	r4, r4, r1
7134	mov	r1, #0
7135	adc	r1, r1, #0
7136	umlal	r4, r1, r10, lr
7137	adds	r5, r5, r1
7138	mov	r1, #0
7139	adc	r1, r1, #0
7140	umlal	r5, r1, r11, lr
7141	adds	r6, r6, r1
7142	adcs	r7, r7, #0
7143	adcs	r8, r8, #0
7144	adc	r9, r9, #0
7145	subs	r6, r6, lr
7146	sbcs	r7, r7, #0
7147	sbcs	r8, r8, #0
7148	sbc	r9, r9, #0
7149	# Sub product of top 8 words and order
7150	mov	r12, sp
7151#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7152	mov	r1, #19
7153	orr	r1, r1, #0xa3000000
7154	orr	r1, r1, #0xa0000
7155	orr	r1, r1, #0x2c00
7156#else
7157#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7158	mov	r1, #0x13
7159	orr	r1, r1, #0x2c00
7160#else
7161	mov	r1, #0x2c13
7162#endif
7163#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7164	orr	r1, r1, #0xa3000000
7165	orr	r1, r1, #0xa0000
7166#else
7167	movt	r1, #0xa30a
7168#endif
7169#endif
7170	mov	lr, #0
7171	ldm	r0!, {r10, r11}
7172	umlal	r10, lr, r2, r1
7173	adds	r11, r11, lr
7174	mov	lr, #0
7175	adc	lr, lr, #0
7176	umlal	r11, lr, r3, r1
7177	stm	r12!, {r10, r11}
7178	ldm	r0!, {r10, r11}
7179	adds	r10, r10, lr
7180	mov	lr, #0
7181	adc	lr, lr, #0
7182	umlal	r10, lr, r4, r1
7183	adds	r11, r11, lr
7184	mov	lr, #0
7185	adc	lr, lr, #0
7186	umlal	r11, lr, r5, r1
7187	stm	r12!, {r10, r11}
7188	ldm	r0!, {r10, r11}
7189	adds	r10, r10, lr
7190	mov	lr, #0
7191	adc	lr, lr, #0
7192	umlal	r10, lr, r6, r1
7193	adds	r11, r11, lr
7194	mov	lr, #0
7195	adc	lr, lr, #0
7196	umlal	r11, lr, r7, r1
7197	stm	r12!, {r10, r11}
7198	ldm	r0!, {r10, r11}
7199	adds	r10, r10, lr
7200	mov	lr, #0
7201	adc	lr, lr, #0
7202	umlal	r10, lr, r8, r1
7203#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7204	bic	r11, r11, #0xf0000000
7205#else
7206	bfc	r11, #28, #4
7207#endif
7208	adds	r11, r11, lr
7209	mov	lr, #0
7210	adc	lr, lr, #0
7211	umlal	r11, lr, r9, r1
7212	stm	r12!, {r10, r11, lr}
7213	sub	r0, r0, #16
7214	sub	r12, r12, #32
7215#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7216	mov	r1, #0xe5
7217	orr	r1, r1, #0xa7000000
7218	orr	r1, r1, #0xed0000
7219	orr	r1, r1, #0x9c00
7220#else
7221#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7222	mov	r1, #0xe5
7223	orr	r1, r1, #0x9c00
7224#else
7225	mov	r1, #0x9ce5
7226#endif
7227#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7228	orr	r1, r1, #0xa7000000
7229	orr	r1, r1, #0xed0000
7230#else
7231	movt	r1, #0xa7ed
7232#endif
7233#endif
7234	mov	lr, #0
7235	ldm	r12, {r10, r11}
7236	umlal	r10, lr, r2, r1
7237	adds	r11, r11, lr
7238	mov	lr, #0
7239	adc	lr, lr, #0
7240	umlal	r11, lr, r3, r1
7241	stm	r12!, {r10, r11}
7242	ldm	r12, {r10, r11}
7243	adds	r10, r10, lr
7244	mov	lr, #0
7245	adc	lr, lr, #0
7246	umlal	r10, lr, r4, r1
7247	adds	r11, r11, lr
7248	mov	lr, #0
7249	adc	lr, lr, #0
7250	umlal	r11, lr, r5, r1
7251	stm	r12!, {r10, r11}
7252	ldm	r12, {r10, r11}
7253	adds	r10, r10, lr
7254	mov	lr, #0
7255	adc	lr, lr, #0
7256	umlal	r10, lr, r6, r1
7257	adds	r11, r11, lr
7258	mov	lr, #0
7259	adc	lr, lr, #0
7260	umlal	r11, lr, r7, r1
7261	stm	r12!, {r10, r11}
7262	ldm	r12, {r10, r11}
7263	adds	r10, r10, lr
7264	mov	lr, #0
7265	adc	lr, lr, #0
7266	umlal	r10, lr, r8, r1
7267	adds	r11, r11, lr
7268	mov	lr, #0
7269	adc	lr, lr, #0
7270	umlal	r11, lr, r9, r1
7271	stm	r12!, {r10, r11, lr}
7272	sub	r12, r12, #32
7273#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7274	mov	r1, #41
7275	orr	r1, r1, #0x5d000000
7276	orr	r1, r1, #0x80000
7277	orr	r1, r1, #0x6300
7278#else
7279#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7280	mov	r1, #0x29
7281	orr	r1, r1, #0x6300
7282#else
7283	mov	r1, #0x6329
7284#endif
7285#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7286	orr	r1, r1, #0x5d000000
7287	orr	r1, r1, #0x80000
7288#else
7289	movt	r1, #0x5d08
7290#endif
7291#endif
7292	mov	lr, #0
7293	ldm	r12, {r10, r11}
7294	umlal	r10, lr, r2, r1
7295	adds	r11, r11, lr
7296	mov	lr, #0
7297	adc	lr, lr, #0
7298	umlal	r11, lr, r3, r1
7299	stm	r12!, {r10, r11}
7300	ldm	r12, {r10, r11}
7301	adds	r10, r10, lr
7302	mov	lr, #0
7303	adc	lr, lr, #0
7304	umlal	r10, lr, r4, r1
7305	adds	r11, r11, lr
7306	mov	lr, #0
7307	adc	lr, lr, #0
7308	umlal	r11, lr, r5, r1
7309	stm	r12!, {r10, r11}
7310	ldm	r12, {r10, r11}
7311	adds	r10, r10, lr
7312	mov	lr, #0
7313	adc	lr, lr, #0
7314	umlal	r10, lr, r6, r1
7315	adds	r11, r11, lr
7316	mov	lr, #0
7317	adc	lr, lr, #0
7318	umlal	r11, lr, r7, r1
7319	stm	r12!, {r10, r11}
7320	ldm	r12, {r10, r11}
7321	adds	r10, r10, lr
7322	mov	lr, #0
7323	adc	lr, lr, #0
7324	umlal	r10, lr, r8, r1
7325	adds	r11, r11, lr
7326	mov	lr, #0
7327	adc	lr, lr, #0
7328	umlal	r11, lr, r9, r1
7329	stm	r12!, {r10, r11, lr}
7330	sub	r12, r12, #32
7331#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7332	mov	r1, #33
7333	orr	r1, r1, #0xeb000000
7334	orr	r1, r1, #0x210000
7335	orr	r1, r1, #0x600
7336#else
7337#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7338	mov	r1, #0x21
7339	orr	r1, r1, #0x600
7340#else
7341	mov	r1, #0x621
7342#endif
7343#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7344	orr	r1, r1, #0xeb000000
7345	orr	r1, r1, #0x210000
7346#else
7347	movt	r1, #0xeb21
7348#endif
7349#endif
7350	mov	lr, #0
7351	ldm	r12, {r10, r11}
7352	umlal	r10, lr, r2, r1
7353	adds	r11, r11, lr
7354	mov	lr, #0
7355	adc	lr, lr, #0
7356	umlal	r11, lr, r3, r1
7357	stm	r12!, {r10, r11}
7358	ldm	r12, {r10, r11}
7359	adds	r10, r10, lr
7360	mov	lr, #0
7361	adc	lr, lr, #0
7362	umlal	r10, lr, r4, r1
7363	adds	r11, r11, lr
7364	mov	lr, #0
7365	adc	lr, lr, #0
7366	umlal	r11, lr, r5, r1
7367	stm	r12!, {r10, r11}
7368	ldm	r12, {r10, r11}
7369	adds	r10, r10, lr
7370	mov	lr, #0
7371	adc	lr, lr, #0
7372	umlal	r10, lr, r6, r1
7373	adds	r11, r11, lr
7374	mov	lr, #0
7375	adc	lr, lr, #0
7376	umlal	r11, lr, r7, r1
7377	stm	r12!, {r10, r11}
7378	ldm	r12, {r10, r11}
7379	adds	r10, r10, lr
7380	mov	lr, #0
7381	adc	lr, lr, #0
7382	umlal	r10, lr, r8, r1
7383	adds	r11, r11, lr
7384	mov	lr, #0
7385	adc	lr, lr, #0
7386	umlal	r11, lr, r9, r1
7387	stm	r12!, {r10, r11, lr}
7388	sub	r12, r12, #32
7389	# Subtract at 4 * 32
7390	ldm	r12, {r10, r11}
7391	subs	r10, r10, r2
7392	sbcs	r11, r11, r3
7393	stm	r12!, {r10, r11}
7394	ldm	r12, {r10, r11}
7395	sbcs	r10, r10, r4
7396	sbcs	r11, r11, r5
7397	stm	r12!, {r10, r11}
7398	ldm	r12, {r10, r11}
7399	sbcs	r10, r10, r6
7400	sbcs	r11, r11, r7
7401	stm	r12!, {r10, r11}
7402	ldm	r12, {r10, r11}
7403	sbcs	r10, r10, r8
7404	sbc	r11, r11, r9
7405	stm	r12!, {r10, r11}
7406	sub	r12, r12, #36
7407	asr	lr, r11, #25
7408	# Conditionally subtract order starting at bit 125
7409	mov	r1, #0xa0000000
7410#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7411	mov	r2, #0x7d
7412	orr	r2, r2, #0x4b000000
7413	orr	r2, r2, #0x9e0000
7414	orr	r2, r2, #0xba00
7415#else
7416#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7417	mov	r2, #0x7d
7418	orr	r2, r2, #0xba00
7419#else
7420	mov	r2, #0xba7d
7421#endif
7422#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7423	orr	r2, r2, #0x4b000000
7424	orr	r2, r2, #0x9e0000
7425#else
7426	movt	r2, #0x4b9e
7427#endif
7428#endif
7429#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7430	mov	r3, #0x63
7431	orr	r3, r3, #0xcb000000
7432	orr	r3, r3, #0x20000
7433	orr	r3, r3, #0x4c00
7434#else
7435#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7436	mov	r3, #0x63
7437	orr	r3, r3, #0x4c00
7438#else
7439	mov	r3, #0x4c63
7440#endif
7441#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7442	orr	r3, r3, #0xcb000000
7443	orr	r3, r3, #0x20000
7444#else
7445	movt	r3, #0xcb02
7446#endif
7447#endif
7448#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7449	mov	r4, #0x9a
7450	orr	r4, r4, #0xd4000000
7451	orr	r4, r4, #0x5e0000
7452	orr	r4, r4, #0xf300
7453#else
7454#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7455	mov	r4, #0x9a
7456	orr	r4, r4, #0xf300
7457#else
7458	mov	r4, #0xf39a
7459#endif
7460#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7461	orr	r4, r4, #0xd4000000
7462	orr	r4, r4, #0x5e0000
7463#else
7464	movt	r4, #0xd45e
7465#endif
7466#endif
7467#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7468	mov	r5, #59
7469	orr	r5, r5, #0x2000000
7470	orr	r5, r5, #0x9b0000
7471	orr	r5, r5, #0xdf00
7472#else
7473#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7474	mov	r5, #0x3b
7475	orr	r5, r5, #0xdf00
7476#else
7477	mov	r5, #0xdf3b
7478#endif
7479#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7480	orr	r5, r5, #0x2000000
7481	orr	r5, r5, #0x9b0000
7482#else
7483	movt	r5, #0x29b
7484#endif
7485#endif
7486	mov	r9, #0x2000000
7487	and	r1, r1, lr
7488	and	r2, r2, lr
7489	and	r3, r3, lr
7490	and	r4, r4, lr
7491	and	r5, r5, lr
7492	and	r9, r9, lr
7493	ldm	r12, {r10, r11}
7494	adds	r10, r10, r1
7495	adcs	r11, r11, r2
7496	stm	r12!, {r10, r11}
7497	ldm	r12, {r10, r11}
7498	adcs	r10, r10, r3
7499	adcs	r11, r11, r4
7500	stm	r12!, {r10, r11}
7501	ldm	r12, {r10, r11}
7502	adcs	r10, r10, r5
7503	adcs	r11, r11, #0
7504	stm	r12!, {r10, r11}
7505	ldm	r12, {r10, r11}
7506	adcs	r10, r10, #0
7507	adcs	r11, r11, #0
7508	stm	r12!, {r10, r11}
7509	ldm	r12, {r10}
7510	adcs	r10, r10, #0
7511	stm	r12!, {r10}
7512	sub	r0, r0, #16
7513	mov	r12, sp
7514	# Load bits 252-376
7515	add	r12, r12, #28
7516	ldm	r12, {r1, r2, r3, r4, r5}
7517	lsl	r5, r5, #4
7518	orr	r5, r5, r4, lsr #28
7519	lsl	r4, r4, #4
7520	orr	r4, r4, r3, lsr #28
7521	lsl	r3, r3, #4
7522	orr	r3, r3, r2, lsr #28
7523	lsl	r2, r2, #4
7524	orr	r2, r2, r1, lsr #28
7525#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7526	bic	r5, r5, #0xe0000000
7527#else
7528	bfc	r5, #29, #3
7529#endif
7530	sub	r12, r12, #28
7531	# Sub product of top 4 words and order
7532	mov	r0, sp
7533	#   * -5cf5d3ed
7534#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7535	mov	r1, #19
7536	orr	r1, r1, #0xa3000000
7537	orr	r1, r1, #0xa0000
7538	orr	r1, r1, #0x2c00
7539#else
7540#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7541	mov	r1, #0x13
7542	orr	r1, r1, #0x2c00
7543#else
7544	mov	r1, #0x2c13
7545#endif
7546#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7547	orr	r1, r1, #0xa3000000
7548	orr	r1, r1, #0xa0000
7549#else
7550	movt	r1, #0xa30a
7551#endif
7552#endif
7553	mov	lr, #0
7554	ldm	r0, {r6, r7, r8, r9}
7555	umlal	r6, lr, r2, r1
7556	adds	r7, r7, lr
7557	mov	lr, #0
7558	adc	lr, lr, #0
7559	umlal	r7, lr, r3, r1
7560	adds	r8, r8, lr
7561	mov	lr, #0
7562	adc	lr, lr, #0
7563	umlal	r8, lr, r4, r1
7564	adds	r9, r9, lr
7565	mov	lr, #0
7566	adc	lr, lr, #0
7567	umlal	r9, lr, r5, r1
7568	stm	r0, {r6, r7, r8, r9}
7569	add	r0, r0, #4
7570	#   * -5812631b
7571#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7572	mov	r1, #0xe5
7573	orr	r1, r1, #0xa7000000
7574	orr	r1, r1, #0xed0000
7575	orr	r1, r1, #0x9c00
7576#else
7577#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7578	mov	r1, #0xe5
7579	orr	r1, r1, #0x9c00
7580#else
7581	mov	r1, #0x9ce5
7582#endif
7583#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7584	orr	r1, r1, #0xa7000000
7585	orr	r1, r1, #0xed0000
7586#else
7587	movt	r1, #0xa7ed
7588#endif
7589#endif
7590	mov	r10, #0
7591	ldm	r0, {r6, r7, r8, r9}
7592	umlal	r6, r10, r2, r1
7593	adds	r7, r7, r10
7594	mov	r10, #0
7595	adc	r10, r10, #0
7596	umlal	r7, r10, r3, r1
7597	adds	r8, r8, r10
7598	mov	r10, #0
7599	adc	r10, r10, #0
7600	umlal	r8, r10, r4, r1
7601	adds	r9, r9, r10
7602	mov	r10, #0
7603	adc	r10, r10, #0
7604	umlal	r9, r10, r5, r1
7605	stm	r0, {r6, r7, r8, r9}
7606	add	r0, r0, #4
7607	#   * -a2f79cd7
7608#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7609	mov	r1, #41
7610	orr	r1, r1, #0x5d000000
7611	orr	r1, r1, #0x80000
7612	orr	r1, r1, #0x6300
7613#else
7614#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7615	mov	r1, #0x29
7616	orr	r1, r1, #0x6300
7617#else
7618	mov	r1, #0x6329
7619#endif
7620#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7621	orr	r1, r1, #0x5d000000
7622	orr	r1, r1, #0x80000
7623#else
7624	movt	r1, #0x5d08
7625#endif
7626#endif
7627	mov	r11, #0
7628	ldm	r0, {r6, r7, r8, r9}
7629	umlal	r6, r11, r2, r1
7630	adds	r7, r7, r11
7631	mov	r11, #0
7632	adc	r11, r11, #0
7633	umlal	r7, r11, r3, r1
7634	adds	r8, r8, r11
7635	mov	r11, #0
7636	adc	r11, r11, #0
7637	umlal	r8, r11, r4, r1
7638	adds	r9, r9, r11
7639	mov	r11, #0
7640	adc	r11, r11, #0
7641	umlal	r9, r11, r5, r1
7642	stm	r0, {r6, r7, r8, r9}
7643	add	r0, r0, #4
7644	#   * -14def9df
7645#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7646	mov	r1, #33
7647	orr	r1, r1, #0xeb000000
7648	orr	r1, r1, #0x210000
7649	orr	r1, r1, #0x600
7650#else
7651#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7652	mov	r1, #0x21
7653	orr	r1, r1, #0x600
7654#else
7655	mov	r1, #0x621
7656#endif
7657#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7658	orr	r1, r1, #0xeb000000
7659	orr	r1, r1, #0x210000
7660#else
7661	movt	r1, #0xeb21
7662#endif
7663#endif
7664	mov	r12, #0
7665	ldm	r0, {r6, r7, r8, r9}
7666	umlal	r6, r12, r2, r1
7667	adds	r7, r7, r12
7668	mov	r12, #0
7669	adc	r12, r12, #0
7670	umlal	r7, r12, r3, r1
7671	adds	r8, r8, r12
7672	mov	r12, #0
7673	adc	r12, r12, #0
7674	umlal	r8, r12, r4, r1
7675	adds	r9, r9, r12
7676	mov	r12, #0
7677	adc	r12, r12, #0
7678	umlal	r9, r12, r5, r1
7679	stm	r0, {r6, r7, r8, r9}
7680	add	r0, r0, #4
7681	# Add overflows at 4 * 32
7682	ldm	r0, {r6, r7, r8, r9}
7683#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7684	bic	r9, r9, #0xf0000000
7685#else
7686	bfc	r9, #28, #4
7687#endif
7688	adds	r6, r6, lr
7689	adcs	r7, r7, r10
7690	adcs	r8, r8, r11
7691	adc	r9, r9, r12
7692	# Subtract top at 4 * 32
7693	subs	r6, r6, r2
7694	sbcs	r7, r7, r3
7695	sbcs	r8, r8, r4
7696	sbcs	r9, r9, r5
7697	sbc	r1, r1, r1
7698	sub	r0, r0, #16
7699	ldm	r0, {r2, r3, r4, r5}
7700#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7701	mov	r10, #0xed
7702	orr	r10, r10, #0x5c000000
7703	orr	r10, r10, #0xf50000
7704	orr	r10, r10, #0xd300
7705#else
7706#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7707	mov	r10, #0xed
7708	orr	r10, r10, #0xd300
7709#else
7710	mov	r10, #0xd3ed
7711#endif
7712#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7713	orr	r10, r10, #0x5c000000
7714	orr	r10, r10, #0xf50000
7715#else
7716	movt	r10, #0x5cf5
7717#endif
7718#endif
7719#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7720	mov	r11, #26
7721	orr	r11, r11, #0x58000000
7722	orr	r11, r11, #0x120000
7723	orr	r11, r11, #0x6300
7724#else
7725#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7726	mov	r11, #0x1a
7727	orr	r11, r11, #0x6300
7728#else
7729	mov	r11, #0x631a
7730#endif
7731#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7732	orr	r11, r11, #0x58000000
7733	orr	r11, r11, #0x120000
7734#else
7735	movt	r11, #0x5812
7736#endif
7737#endif
7738#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7739	mov	r12, #0xd6
7740	orr	r12, r12, #0xa2000000
7741	orr	r12, r12, #0xf70000
7742	orr	r12, r12, #0x9c00
7743#else
7744#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7745	mov	r12, #0xd6
7746	orr	r12, r12, #0x9c00
7747#else
7748	mov	r12, #0x9cd6
7749#endif
7750#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7751	orr	r12, r12, #0xa2000000
7752	orr	r12, r12, #0xf70000
7753#else
7754	movt	r12, #0xa2f7
7755#endif
7756#endif
7757#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7758	mov	lr, #0xde
7759	orr	lr, lr, #0x14000000
7760	orr	lr, lr, #0xde0000
7761	orr	lr, lr, #0xf900
7762#else
7763#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7764	mov	lr, #0xde
7765	orr	lr, lr, #0xf900
7766#else
7767	mov	lr, #0xf9de
7768#endif
7769#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7770	orr	lr, lr, #0x14000000
7771	orr	lr, lr, #0xde0000
7772#else
7773	movt	lr, #0x14de
7774#endif
7775#endif
7776	and	r10, r10, r1
7777	and	r11, r11, r1
7778	and	r12, r12, r1
7779	and	lr, lr, r1
7780	adds	r2, r2, r10
7781	adcs	r3, r3, r11
7782	adcs	r4, r4, r12
7783	adcs	r5, r5, lr
7784	adcs	r6, r6, #0
7785	adcs	r7, r7, #0
7786	and	r1, r1, #0x10000000
7787	adcs	r8, r8, #0
7788	adc	r9, r9, r1
7789#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7790	bic	r9, r9, #0xf0000000
7791#else
7792	bfc	r9, #28, #4
7793#endif
7794	ldr	r0, [sp, #68]
7795	# Store result
7796	str	r2, [r0]
7797	str	r3, [r0, #4]
7798	str	r4, [r0, #8]
7799	str	r5, [r0, #12]
7800	str	r6, [r0, #16]
7801	str	r7, [r0, #20]
7802	str	r8, [r0, #24]
7803	str	r9, [r0, #28]
7804	add	sp, sp, #0x50
7805	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
7806	.size	sc_muladd,.-sc_muladd
7807#else
7808	.text
7809	.align	4
7810	.globl	sc_muladd
7811	.type	sc_muladd, %function
7812sc_muladd:
7813	push	{r4, r5, r6, r7, r8, r9, r10, r11, lr}
7814	sub	sp, sp, #0x50
7815	add	lr, sp, #0x44
7816	stm	lr, {r0, r1, r3}
7817	mov	lr, r2
7818	ldm	r1, {r0, r1, r2, r3}
7819	ldm	lr!, {r4, r5, r6}
7820	umull	r10, r11, r0, r4
7821	umull	r12, r7, r1, r4
7822	umaal	r11, r12, r0, r5
7823	umull	r8, r9, r2, r4
7824	umaal	r12, r8, r1, r5
7825	umaal	r12, r7, r0, r6
7826	umaal	r8, r9, r3, r4
7827	stm	sp, {r10, r11, r12}
7828	umaal	r7, r8, r2, r5
7829	ldm	lr!, {r4}
7830	umull	r10, r11, r1, r6
7831	umaal	r8, r9, r2, r6
7832	umaal	r7, r10, r0, r4
7833	umaal	r8, r11, r3, r5
7834	str	r7, [sp, #12]
7835	umaal	r8, r10, r1, r4
7836	umaal	r9, r11, r3, r6
7837	umaal	r9, r10, r2, r4
7838	umaal	r10, r11, r3, r4
7839	ldm	lr, {r4, r5, r6, r7}
7840	mov	r12, #0
7841	umlal	r8, r12, r0, r4
7842	umaal	r9, r12, r1, r4
7843	umaal	r10, r12, r2, r4
7844	umaal	r11, r12, r3, r4
7845	mov	r4, #0
7846	umlal	r9, r4, r0, r5
7847	umaal	r10, r4, r1, r5
7848	umaal	r11, r4, r2, r5
7849	umaal	r12, r4, r3, r5
7850	mov	r5, #0
7851	umlal	r10, r5, r0, r6
7852	umaal	r11, r5, r1, r6
7853	umaal	r12, r5, r2, r6
7854	umaal	r4, r5, r3, r6
7855	mov	r6, #0
7856	umlal	r11, r6, r0, r7
7857	ldr	r0, [sp, #72]
7858	umaal	r12, r6, r1, r7
7859	add	r0, r0, #16
7860	umaal	r4, r6, r2, r7
7861	sub	lr, lr, #16
7862	umaal	r5, r6, r3, r7
7863	ldm	r0, {r0, r1, r2, r3}
7864	str	r6, [sp, #64]
7865	ldm	lr!, {r6}
7866	mov	r7, #0
7867	umlal	r8, r7, r0, r6
7868	umaal	r9, r7, r1, r6
7869	str	r8, [sp, #16]
7870	umaal	r10, r7, r2, r6
7871	umaal	r11, r7, r3, r6
7872	ldm	lr!, {r6}
7873	mov	r8, #0
7874	umlal	r9, r8, r0, r6
7875	umaal	r10, r8, r1, r6
7876	str	r9, [sp, #20]
7877	umaal	r11, r8, r2, r6
7878	umaal	r12, r8, r3, r6
7879	ldm	lr!, {r6}
7880	mov	r9, #0
7881	umlal	r10, r9, r0, r6
7882	umaal	r11, r9, r1, r6
7883	str	r10, [sp, #24]
7884	umaal	r12, r9, r2, r6
7885	umaal	r4, r9, r3, r6
7886	ldm	lr!, {r6}
7887	mov	r10, #0
7888	umlal	r11, r10, r0, r6
7889	umaal	r12, r10, r1, r6
7890	str	r11, [sp, #28]
7891	umaal	r4, r10, r2, r6
7892	umaal	r5, r10, r3, r6
7893	ldm	lr!, {r11}
7894	umaal	r12, r7, r0, r11
7895	umaal	r4, r7, r1, r11
7896	ldr	r6, [sp, #64]
7897	umaal	r5, r7, r2, r11
7898	umaal	r6, r7, r3, r11
7899	ldm	lr!, {r11}
7900	umaal	r4, r8, r0, r11
7901	umaal	r5, r8, r1, r11
7902	umaal	r6, r8, r2, r11
7903	umaal	r7, r8, r3, r11
7904	ldm	lr, {r11, lr}
7905	umaal	r5, r9, r0, r11
7906	umaal	r6, r10, r0, lr
7907	umaal	r6, r9, r1, r11
7908	umaal	r7, r10, r1, lr
7909	umaal	r7, r9, r2, r11
7910	umaal	r8, r10, r2, lr
7911	umaal	r8, r9, r3, r11
7912	umaal	r9, r10, r3, lr
7913	mov	r3, r12
7914	add	lr, sp, #32
7915	stm	lr, {r3, r4, r5, r6, r7, r8, r9, r10}
7916	mov	r0, sp
7917	# Add c to a * b
7918	ldr	lr, [sp, #76]
7919	ldm	r0, {r2, r3, r4, r5, r6, r7, r8, r9}
7920	ldm	lr!, {r1, r10, r11, r12}
7921	adds	r2, r2, r1
7922	adcs	r3, r3, r10
7923	adcs	r4, r4, r11
7924	adcs	r5, r5, r12
7925	ldm	lr!, {r1, r10, r11, r12}
7926	adcs	r6, r6, r1
7927	adcs	r7, r7, r10
7928	adcs	r8, r8, r11
7929	adcs	r9, r9, r12
7930	mov	r1, r9
7931	stm	r0!, {r2, r3, r4, r5, r6, r7, r8, r9}
7932	ldm	r0, {r2, r3, r4, r5, r6, r7, r8, r9}
7933	adcs	r2, r2, #0
7934	adcs	r3, r3, #0
7935	adcs	r4, r4, #0
7936	adcs	r5, r5, #0
7937	adcs	r6, r6, #0
7938	adcs	r7, r7, #0
7939	adcs	r8, r8, #0
7940	adc	r9, r9, #0
7941	sub	r0, r0, #32
7942	# Get 252..503 and 504..507
7943	lsr	lr, r9, #24
7944	lsl	r9, r9, #4
7945	orr	r9, r9, r8, lsr #28
7946	lsl	r8, r8, #4
7947	orr	r8, r8, r7, lsr #28
7948	lsl	r7, r7, #4
7949	orr	r7, r7, r6, lsr #28
7950	lsl	r6, r6, #4
7951	orr	r6, r6, r5, lsr #28
7952	lsl	r5, r5, #4
7953	orr	r5, r5, r4, lsr #28
7954	lsl	r4, r4, #4
7955	orr	r4, r4, r3, lsr #28
7956	lsl	r3, r3, #4
7957	orr	r3, r3, r2, lsr #28
7958	lsl	r2, r2, #4
7959	orr	r2, r2, r1, lsr #28
7960#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7961	bic	r9, r9, #0xf0000000
7962#else
7963	bfc	r9, #28, #4
7964#endif
7965	# Add order times bits 504..507
7966#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7967	mov	r10, #19
7968	orr	r10, r10, #0xa3000000
7969	orr	r10, r10, #0xa0000
7970	orr	r10, r10, #0x2c00
7971#else
7972#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7973	mov	r10, #0x13
7974	orr	r10, r10, #0x2c00
7975#else
7976	mov	r10, #0x2c13
7977#endif
7978#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7979	orr	r10, r10, #0xa3000000
7980	orr	r10, r10, #0xa0000
7981#else
7982	movt	r10, #0xa30a
7983#endif
7984#endif
7985#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7986	mov	r11, #0xe5
7987	orr	r11, r11, #0xa7000000
7988	orr	r11, r11, #0xed0000
7989	orr	r11, r11, #0x9c00
7990#else
7991#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7992	mov	r11, #0xe5
7993	orr	r11, r11, #0x9c00
7994#else
7995	mov	r11, #0x9ce5
7996#endif
7997#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
7998	orr	r11, r11, #0xa7000000
7999	orr	r11, r11, #0xed0000
8000#else
8001	movt	r11, #0xa7ed
8002#endif
8003#endif
8004	mov	r1, #0
8005	umlal	r2, r1, r10, lr
8006	umaal	r3, r1, r11, lr
8007#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8008	mov	r10, #41
8009	orr	r10, r10, #0x5d000000
8010	orr	r10, r10, #0x80000
8011	orr	r10, r10, #0x6300
8012#else
8013#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8014	mov	r10, #0x29
8015	orr	r10, r10, #0x6300
8016#else
8017	mov	r10, #0x6329
8018#endif
8019#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8020	orr	r10, r10, #0x5d000000
8021	orr	r10, r10, #0x80000
8022#else
8023	movt	r10, #0x5d08
8024#endif
8025#endif
8026#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8027	mov	r11, #33
8028	orr	r11, r11, #0xeb000000
8029	orr	r11, r11, #0x210000
8030	orr	r11, r11, #0x600
8031#else
8032#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8033	mov	r11, #0x21
8034	orr	r11, r11, #0x600
8035#else
8036	mov	r11, #0x621
8037#endif
8038#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8039	orr	r11, r11, #0xeb000000
8040	orr	r11, r11, #0x210000
8041#else
8042	movt	r11, #0xeb21
8043#endif
8044#endif
8045	umaal	r4, r1, r10, lr
8046	umaal	r5, r1, r11, lr
8047	adds	r6, r6, r1
8048	adcs	r7, r7, #0
8049	adcs	r8, r8, #0
8050	adc	r9, r9, #0
8051	subs	r6, r6, lr
8052	sbcs	r7, r7, #0
8053	sbcs	r8, r8, #0
8054	sbc	r9, r9, #0
8055	# Sub product of top 8 words and order
8056	mov	r12, sp
8057#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8058	mov	r1, #19
8059	orr	r1, r1, #0xa3000000
8060	orr	r1, r1, #0xa0000
8061	orr	r1, r1, #0x2c00
8062#else
8063#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8064	mov	r1, #0x13
8065	orr	r1, r1, #0x2c00
8066#else
8067	mov	r1, #0x2c13
8068#endif
8069#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8070	orr	r1, r1, #0xa3000000
8071	orr	r1, r1, #0xa0000
8072#else
8073	movt	r1, #0xa30a
8074#endif
8075#endif
8076	mov	lr, #0
8077	ldm	r0!, {r10, r11}
8078	umlal	r10, lr, r2, r1
8079	umaal	r11, lr, r3, r1
8080	stm	r12!, {r10, r11}
8081	ldm	r0!, {r10, r11}
8082	umaal	r10, lr, r4, r1
8083	umaal	r11, lr, r5, r1
8084	stm	r12!, {r10, r11}
8085	ldm	r0!, {r10, r11}
8086	umaal	r10, lr, r6, r1
8087	umaal	r11, lr, r7, r1
8088	stm	r12!, {r10, r11}
8089	ldm	r0!, {r10, r11}
8090	umaal	r10, lr, r8, r1
8091#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8092	bic	r11, r11, #0xf0000000
8093#else
8094	bfc	r11, #28, #4
8095#endif
8096	umaal	r11, lr, r9, r1
8097	stm	r12!, {r10, r11, lr}
8098	sub	r0, r0, #16
8099	sub	r12, r12, #32
8100#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8101	mov	r1, #0xe5
8102	orr	r1, r1, #0xa7000000
8103	orr	r1, r1, #0xed0000
8104	orr	r1, r1, #0x9c00
8105#else
8106#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8107	mov	r1, #0xe5
8108	orr	r1, r1, #0x9c00
8109#else
8110	mov	r1, #0x9ce5
8111#endif
8112#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8113	orr	r1, r1, #0xa7000000
8114	orr	r1, r1, #0xed0000
8115#else
8116	movt	r1, #0xa7ed
8117#endif
8118#endif
8119	mov	lr, #0
8120	ldm	r12, {r10, r11}
8121	umlal	r10, lr, r2, r1
8122	umaal	r11, lr, r3, r1
8123	stm	r12!, {r10, r11}
8124	ldm	r12, {r10, r11}
8125	umaal	r10, lr, r4, r1
8126	umaal	r11, lr, r5, r1
8127	stm	r12!, {r10, r11}
8128	ldm	r12, {r10, r11}
8129	umaal	r10, lr, r6, r1
8130	umaal	r11, lr, r7, r1
8131	stm	r12!, {r10, r11}
8132	ldm	r12, {r10, r11}
8133	umaal	r10, lr, r8, r1
8134	umaal	r11, lr, r9, r1
8135	stm	r12!, {r10, r11, lr}
8136	sub	r12, r12, #32
8137#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8138	mov	r1, #41
8139	orr	r1, r1, #0x5d000000
8140	orr	r1, r1, #0x80000
8141	orr	r1, r1, #0x6300
8142#else
8143#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8144	mov	r1, #0x29
8145	orr	r1, r1, #0x6300
8146#else
8147	mov	r1, #0x6329
8148#endif
8149#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8150	orr	r1, r1, #0x5d000000
8151	orr	r1, r1, #0x80000
8152#else
8153	movt	r1, #0x5d08
8154#endif
8155#endif
8156	mov	lr, #0
8157	ldm	r12, {r10, r11}
8158	umlal	r10, lr, r2, r1
8159	umaal	r11, lr, r3, r1
8160	stm	r12!, {r10, r11}
8161	ldm	r12, {r10, r11}
8162	umaal	r10, lr, r4, r1
8163	umaal	r11, lr, r5, r1
8164	stm	r12!, {r10, r11}
8165	ldm	r12, {r10, r11}
8166	umaal	r10, lr, r6, r1
8167	umaal	r11, lr, r7, r1
8168	stm	r12!, {r10, r11}
8169	ldm	r12, {r10, r11}
8170	umaal	r10, lr, r8, r1
8171	umaal	r11, lr, r9, r1
8172	stm	r12!, {r10, r11, lr}
8173	sub	r12, r12, #32
8174#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8175	mov	r1, #33
8176	orr	r1, r1, #0xeb000000
8177	orr	r1, r1, #0x210000
8178	orr	r1, r1, #0x600
8179#else
8180#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8181	mov	r1, #0x21
8182	orr	r1, r1, #0x600
8183#else
8184	mov	r1, #0x621
8185#endif
8186#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8187	orr	r1, r1, #0xeb000000
8188	orr	r1, r1, #0x210000
8189#else
8190	movt	r1, #0xeb21
8191#endif
8192#endif
8193	mov	lr, #0
8194	ldm	r12, {r10, r11}
8195	umlal	r10, lr, r2, r1
8196	umaal	r11, lr, r3, r1
8197	stm	r12!, {r10, r11}
8198	ldm	r12, {r10, r11}
8199	umaal	r10, lr, r4, r1
8200	umaal	r11, lr, r5, r1
8201	stm	r12!, {r10, r11}
8202	ldm	r12, {r10, r11}
8203	umaal	r10, lr, r6, r1
8204	umaal	r11, lr, r7, r1
8205	stm	r12!, {r10, r11}
8206	ldm	r12, {r10, r11}
8207	umaal	r10, lr, r8, r1
8208	umaal	r11, lr, r9, r1
8209	stm	r12!, {r10, r11, lr}
8210	sub	r12, r12, #32
8211	# Subtract at 4 * 32
8212	ldm	r12, {r10, r11}
8213	subs	r10, r10, r2
8214	sbcs	r11, r11, r3
8215	stm	r12!, {r10, r11}
8216	ldm	r12, {r10, r11}
8217	sbcs	r10, r10, r4
8218	sbcs	r11, r11, r5
8219	stm	r12!, {r10, r11}
8220	ldm	r12, {r10, r11}
8221	sbcs	r10, r10, r6
8222	sbcs	r11, r11, r7
8223	stm	r12!, {r10, r11}
8224	ldm	r12, {r10, r11}
8225	sbcs	r10, r10, r8
8226	sbc	r11, r11, r9
8227	stm	r12!, {r10, r11}
8228	sub	r12, r12, #36
8229	asr	lr, r11, #25
8230	# Conditionally subtract order starting at bit 125
8231	mov	r1, #0xa0000000
8232#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8233	mov	r2, #0x7d
8234	orr	r2, r2, #0x4b000000
8235	orr	r2, r2, #0x9e0000
8236	orr	r2, r2, #0xba00
8237#else
8238#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8239	mov	r2, #0x7d
8240	orr	r2, r2, #0xba00
8241#else
8242	mov	r2, #0xba7d
8243#endif
8244#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8245	orr	r2, r2, #0x4b000000
8246	orr	r2, r2, #0x9e0000
8247#else
8248	movt	r2, #0x4b9e
8249#endif
8250#endif
8251#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8252	mov	r3, #0x63
8253	orr	r3, r3, #0xcb000000
8254	orr	r3, r3, #0x20000
8255	orr	r3, r3, #0x4c00
8256#else
8257#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8258	mov	r3, #0x63
8259	orr	r3, r3, #0x4c00
8260#else
8261	mov	r3, #0x4c63
8262#endif
8263#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8264	orr	r3, r3, #0xcb000000
8265	orr	r3, r3, #0x20000
8266#else
8267	movt	r3, #0xcb02
8268#endif
8269#endif
8270#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8271	mov	r4, #0x9a
8272	orr	r4, r4, #0xd4000000
8273	orr	r4, r4, #0x5e0000
8274	orr	r4, r4, #0xf300
8275#else
8276#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8277	mov	r4, #0x9a
8278	orr	r4, r4, #0xf300
8279#else
8280	mov	r4, #0xf39a
8281#endif
8282#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8283	orr	r4, r4, #0xd4000000
8284	orr	r4, r4, #0x5e0000
8285#else
8286	movt	r4, #0xd45e
8287#endif
8288#endif
8289#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8290	mov	r5, #59
8291	orr	r5, r5, #0x2000000
8292	orr	r5, r5, #0x9b0000
8293	orr	r5, r5, #0xdf00
8294#else
8295#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8296	mov	r5, #0x3b
8297	orr	r5, r5, #0xdf00
8298#else
8299	mov	r5, #0xdf3b
8300#endif
8301#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8302	orr	r5, r5, #0x2000000
8303	orr	r5, r5, #0x9b0000
8304#else
8305	movt	r5, #0x29b
8306#endif
8307#endif
8308	mov	r9, #0x2000000
8309	and	r1, r1, lr
8310	and	r2, r2, lr
8311	and	r3, r3, lr
8312	and	r4, r4, lr
8313	and	r5, r5, lr
8314	and	r9, r9, lr
8315	ldm	r12, {r10, r11}
8316	adds	r10, r10, r1
8317	adcs	r11, r11, r2
8318	stm	r12!, {r10, r11}
8319	ldm	r12, {r10, r11}
8320	adcs	r10, r10, r3
8321	adcs	r11, r11, r4
8322	stm	r12!, {r10, r11}
8323	ldm	r12, {r10, r11}
8324	adcs	r10, r10, r5
8325	adcs	r11, r11, #0
8326	stm	r12!, {r10, r11}
8327	ldm	r12, {r10, r11}
8328	adcs	r10, r10, #0
8329	adcs	r11, r11, #0
8330	stm	r12!, {r10, r11}
8331	ldm	r12, {r10}
8332	adcs	r10, r10, #0
8333	stm	r12!, {r10}
8334	sub	r0, r0, #16
8335	mov	r12, sp
8336	# Load bits 252-376
8337	add	r12, r12, #28
8338	ldm	r12, {r1, r2, r3, r4, r5}
8339	lsl	r5, r5, #4
8340	orr	r5, r5, r4, lsr #28
8341	lsl	r4, r4, #4
8342	orr	r4, r4, r3, lsr #28
8343	lsl	r3, r3, #4
8344	orr	r3, r3, r2, lsr #28
8345	lsl	r2, r2, #4
8346	orr	r2, r2, r1, lsr #28
8347#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8348	bic	r5, r5, #0xe0000000
8349#else
8350	bfc	r5, #29, #3
8351#endif
8352	sub	r12, r12, #28
8353	# Sub product of top 4 words and order
8354	mov	r0, sp
8355	#   * -5cf5d3ed
8356#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8357	mov	r1, #19
8358	orr	r1, r1, #0xa3000000
8359	orr	r1, r1, #0xa0000
8360	orr	r1, r1, #0x2c00
8361#else
8362#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8363	mov	r1, #0x13
8364	orr	r1, r1, #0x2c00
8365#else
8366	mov	r1, #0x2c13
8367#endif
8368#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8369	orr	r1, r1, #0xa3000000
8370	orr	r1, r1, #0xa0000
8371#else
8372	movt	r1, #0xa30a
8373#endif
8374#endif
8375	mov	lr, #0
8376	ldm	r0, {r6, r7, r8, r9}
8377	umlal	r6, lr, r2, r1
8378	umaal	r7, lr, r3, r1
8379	umaal	r8, lr, r4, r1
8380	umaal	r9, lr, r5, r1
8381	stm	r0, {r6, r7, r8, r9}
8382	add	r0, r0, #4
8383	#   * -5812631b
8384#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8385	mov	r1, #0xe5
8386	orr	r1, r1, #0xa7000000
8387	orr	r1, r1, #0xed0000
8388	orr	r1, r1, #0x9c00
8389#else
8390#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8391	mov	r1, #0xe5
8392	orr	r1, r1, #0x9c00
8393#else
8394	mov	r1, #0x9ce5
8395#endif
8396#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8397	orr	r1, r1, #0xa7000000
8398	orr	r1, r1, #0xed0000
8399#else
8400	movt	r1, #0xa7ed
8401#endif
8402#endif
8403	mov	r10, #0
8404	ldm	r0, {r6, r7, r8, r9}
8405	umlal	r6, r10, r2, r1
8406	umaal	r7, r10, r3, r1
8407	umaal	r8, r10, r4, r1
8408	umaal	r9, r10, r5, r1
8409	stm	r0, {r6, r7, r8, r9}
8410	add	r0, r0, #4
8411	#   * -a2f79cd7
8412#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8413	mov	r1, #41
8414	orr	r1, r1, #0x5d000000
8415	orr	r1, r1, #0x80000
8416	orr	r1, r1, #0x6300
8417#else
8418#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8419	mov	r1, #0x29
8420	orr	r1, r1, #0x6300
8421#else
8422	mov	r1, #0x6329
8423#endif
8424#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8425	orr	r1, r1, #0x5d000000
8426	orr	r1, r1, #0x80000
8427#else
8428	movt	r1, #0x5d08
8429#endif
8430#endif
8431	mov	r11, #0
8432	ldm	r0, {r6, r7, r8, r9}
8433	umlal	r6, r11, r2, r1
8434	umaal	r7, r11, r3, r1
8435	umaal	r8, r11, r4, r1
8436	umaal	r9, r11, r5, r1
8437	stm	r0, {r6, r7, r8, r9}
8438	add	r0, r0, #4
8439	#   * -14def9df
8440#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8441	mov	r1, #33
8442	orr	r1, r1, #0xeb000000
8443	orr	r1, r1, #0x210000
8444	orr	r1, r1, #0x600
8445#else
8446#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8447	mov	r1, #0x21
8448	orr	r1, r1, #0x600
8449#else
8450	mov	r1, #0x621
8451#endif
8452#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8453	orr	r1, r1, #0xeb000000
8454	orr	r1, r1, #0x210000
8455#else
8456	movt	r1, #0xeb21
8457#endif
8458#endif
8459	mov	r12, #0
8460	ldm	r0, {r6, r7, r8, r9}
8461	umlal	r6, r12, r2, r1
8462	umaal	r7, r12, r3, r1
8463	umaal	r8, r12, r4, r1
8464	umaal	r9, r12, r5, r1
8465	stm	r0, {r6, r7, r8, r9}
8466	add	r0, r0, #4
8467	# Add overflows at 4 * 32
8468	ldm	r0, {r6, r7, r8, r9}
8469#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8470	bic	r9, r9, #0xf0000000
8471#else
8472	bfc	r9, #28, #4
8473#endif
8474	adds	r6, r6, lr
8475	adcs	r7, r7, r10
8476	adcs	r8, r8, r11
8477	adc	r9, r9, r12
8478	# Subtract top at 4 * 32
8479	subs	r6, r6, r2
8480	sbcs	r7, r7, r3
8481	sbcs	r8, r8, r4
8482	sbcs	r9, r9, r5
8483	sbc	r1, r1, r1
8484	sub	r0, r0, #16
8485	ldm	r0, {r2, r3, r4, r5}
8486#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8487	mov	r10, #0xed
8488	orr	r10, r10, #0x5c000000
8489	orr	r10, r10, #0xf50000
8490	orr	r10, r10, #0xd300
8491#else
8492#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8493	mov	r10, #0xed
8494	orr	r10, r10, #0xd300
8495#else
8496	mov	r10, #0xd3ed
8497#endif
8498#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8499	orr	r10, r10, #0x5c000000
8500	orr	r10, r10, #0xf50000
8501#else
8502	movt	r10, #0x5cf5
8503#endif
8504#endif
8505#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8506	mov	r11, #26
8507	orr	r11, r11, #0x58000000
8508	orr	r11, r11, #0x120000
8509	orr	r11, r11, #0x6300
8510#else
8511#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8512	mov	r11, #0x1a
8513	orr	r11, r11, #0x6300
8514#else
8515	mov	r11, #0x631a
8516#endif
8517#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8518	orr	r11, r11, #0x58000000
8519	orr	r11, r11, #0x120000
8520#else
8521	movt	r11, #0x5812
8522#endif
8523#endif
8524#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8525	mov	r12, #0xd6
8526	orr	r12, r12, #0xa2000000
8527	orr	r12, r12, #0xf70000
8528	orr	r12, r12, #0x9c00
8529#else
8530#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8531	mov	r12, #0xd6
8532	orr	r12, r12, #0x9c00
8533#else
8534	mov	r12, #0x9cd6
8535#endif
8536#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8537	orr	r12, r12, #0xa2000000
8538	orr	r12, r12, #0xf70000
8539#else
8540	movt	r12, #0xa2f7
8541#endif
8542#endif
8543#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8544	mov	lr, #0xde
8545	orr	lr, lr, #0x14000000
8546	orr	lr, lr, #0xde0000
8547	orr	lr, lr, #0xf900
8548#else
8549#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8550	mov	lr, #0xde
8551	orr	lr, lr, #0xf900
8552#else
8553	mov	lr, #0xf9de
8554#endif
8555#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8556	orr	lr, lr, #0x14000000
8557	orr	lr, lr, #0xde0000
8558#else
8559	movt	lr, #0x14de
8560#endif
8561#endif
8562	and	r10, r10, r1
8563	and	r11, r11, r1
8564	and	r12, r12, r1
8565	and	lr, lr, r1
8566	adds	r2, r2, r10
8567	adcs	r3, r3, r11
8568	adcs	r4, r4, r12
8569	adcs	r5, r5, lr
8570	adcs	r6, r6, #0
8571	adcs	r7, r7, #0
8572	and	r1, r1, #0x10000000
8573	adcs	r8, r8, #0
8574	adc	r9, r9, r1
8575#if defined(WOLFSSL_ARM_ARCH) && (WOLFSSL_ARM_ARCH < 7)
8576	bic	r9, r9, #0xf0000000
8577#else
8578	bfc	r9, #28, #4
8579#endif
8580	ldr	r0, [sp, #68]
8581	# Store result
8582	str	r2, [r0]
8583	str	r3, [r0, #4]
8584	str	r4, [r0, #8]
8585	str	r5, [r0, #12]
8586	str	r6, [r0, #16]
8587	str	r7, [r0, #20]
8588	str	r8, [r0, #24]
8589	str	r9, [r0, #28]
8590	add	sp, sp, #0x50
8591	pop	{r4, r5, r6, r7, r8, r9, r10, r11, pc}
8592	.size	sc_muladd,.-sc_muladd
8593#endif /* WOLFSSL_ARM_ARCH && WOLFSSL_ARM_ARCH < 6 */
8594#endif /* HAVE_ED25519_SIGN */
8595#endif /* HAVE_ED25519 */
8596
8597#endif /* !CURVE25519_SMALL || !ED25519_SMALL */
8598#endif /* HAVE_CURVE25519 || HAVE_ED25519 */
8599#endif /* !__aarch64__ && !WOLFSSL_ARMASM_THUMB2 */
8600#endif /* WOLFSSL_ARMASM */
8601
8602#if defined(__linux__) && defined(__ELF__)
8603.section	.note.GNU-stack,"",%progbits
8604#endif
8605#endif /* !WOLFSSL_ARMASM_INLINE */