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/doc/dox_comments/header_files/aes.h raw
   1/*!
   2    \ingroup AES
   3    \brief This function initializes an AES structure by setting the key and
   4    then setting the initialization vector.
   5
   6    \return 0 On successfully setting key and initialization vector.
   7    \return BAD_FUNC_ARG Returned if key length is invalid.
   8
   9    \param aes pointer to the AES structure to modify
  10    \param key 16, 24, or 32 byte secret key for encryption and decryption
  11    \param len length of the key passed in
  12    \param iv pointer to the initialization vector used to initialize the key
  13    \param dir Cipher direction. Set AES_ENCRYPTION to encrypt,  or
  14    AES_DECRYPTION to decrypt. Direction for some modes (CFB and CTR) is
  15    always AES_ENCRYPTION.
  16
  17    _Example_
  18    \code
  19    Aes enc;
  20    int ret = 0;
  21    byte key[] = { some 16, 24 or 32 byte key };
  22    byte iv[]  = { some 16 byte iv };
  23    if (ret = wc_AesInit(&enc, HEAP_HINT, INVALID_DEVID) != 0) {
  24        // failed to initialize aes key
  25    }
  26    if (ret = wc_AesSetKey(&enc, key, AES_BLOCK_SIZE, iv,
  27    AES_ENCRYPTION) != 0) {
  28	// failed to set aes key
  29    }
  30    \endcode
  31
  32    \sa wc_AesSetKeyDirect
  33    \sa wc_AesSetIV
  34*/
  35int  wc_AesSetKey(Aes* aes, const byte* key, word32 len,
  36                              const byte* iv, int dir);
  37
  38/*!
  39    \ingroup AES
  40    \brief This function sets the initialization vector for a
  41    particular AES object. The AES object should be initialized before
  42    calling this function.
  43
  44    \return 0 On successfully setting initialization vector.
  45    \return BAD_FUNC_ARG Returned if AES pointer is NULL.
  46
  47    \param aes pointer to the AES structure on which to set the
  48    initialization vector
  49    \param iv initialization vector used to initialize the AES structure.
  50    If the value is NULL, the default action initializes the iv to 0.
  51
  52    _Example_
  53    \code
  54    Aes enc;
  55    // set enc key
  56    byte iv[]  = { some 16 byte iv };
  57    if (ret = wc_AesSetIV(&enc, iv) != 0) {
  58	// failed to set aes iv
  59    }
  60    \endcode
  61
  62    \sa wc_AesSetKeyDirect
  63    \sa wc_AesSetKey
  64*/
  65int  wc_AesSetIV(Aes* aes, const byte* iv);
  66
  67/*!
  68    \ingroup AES
  69    \brief Encrypts a plaintext message from the input buffer in, and places
  70    the resulting cipher text in the output buffer out using cipher block
  71    chaining with AES. This function requires that the AES object has been
  72    initialized by calling AesSetKey before a message is able to be encrypted.
  73    This function assumes that the input message is AES block length aligned,
  74    and expects the input length to be a multiple of the block length, which
  75    will optionally be checked and enforced if WOLFSSL_AES_CBC_LENGTH_CHECKS
  76    is defined in the build configuration.  In order to assure block-multiple
  77    input, PKCS#7 style padding should be added beforehand. This differs from
  78    the OpenSSL AES-CBC methods which add the padding for you. To make the
  79    wolfSSL and corresponding OpenSSL functions interoperate, one should specify
  80    the -nopad option in the OpenSSL command line function so that it behaves
  81    like the wolfSSL AesCbcEncrypt method and does not add extra padding
  82    during encryption.
  83
  84    \return 0 On successfully encrypting message.
  85    \return BAD_ALIGN_E: may be returned on block align error
  86    \return BAD_LENGTH_E will be returned if the input length isn't a
  87    multiple of the AES block length, when the library is built with
  88    WOLFSSL_AES_CBC_LENGTH_CHECKS.
  89
  90    \param aes pointer to the AES object used to encrypt data
  91    \param out pointer to the output buffer in which to store the ciphertext
  92    of the encrypted message
  93    \param in pointer to the input buffer containing message to be encrypted
  94    \param sz size of input message
  95
  96    _Example_
  97    \code
  98    Aes enc;
  99    int ret = 0;
 100    // initialize enc with wc_AesInit and wc_AesSetKey, using direction
 101    // AES_ENCRYPTION
 102    byte msg[AES_BLOCK_SIZE * n]; // multiple of 16 bytes
 103    // fill msg with data
 104    byte cipher[AES_BLOCK_SIZE * n]; // Some multiple of 16 bytes
 105    if ((ret = wc_AesCbcEncrypt(&enc, cipher, message, sizeof(msg))) != 0 ) {
 106	// block align error
 107    }
 108    \endcode
 109
 110    \sa wc_AesInit
 111    \sa wc_AesSetKey
 112    \sa wc_AesSetIV
 113    \sa wc_AesCbcDecrypt
 114*/
 115int  wc_AesCbcEncrypt(Aes* aes, byte* out,
 116                                  const byte* in, word32 sz);
 117
 118/*!
 119    \ingroup AES
 120    \brief Decrypts a cipher from the input buffer in, and places the
 121    resulting plain text in the output buffer out using cipher block chaining
 122    with AES. This function requires that the AES structure has been
 123    initialized by calling AesSetKey before a message is able to be decrypted.
 124    This function assumes that the original message was AES block length
 125    aligned, and expects the input length to be a multiple of the block length,
 126    which will optionally be checked and enforced if
 127    WOLFSSL_AES_CBC_LENGTH_CHECKS is defined in the build configuration.
 128    This differs from the OpenSSL AES-CBC methods, which add PKCS#7 padding
 129    automatically, and so do not require block-multiple input. To make the
 130    wolfSSL function and equivalent OpenSSL functions interoperate, one
 131    should specify the -nopad option in the OpenSSL command line function
 132    so that it behaves like the wolfSSL AesCbcEncrypt method and does not
 133    create errors during decryption.
 134
 135    \return 0 On successfully decrypting message.
 136    \return BAD_ALIGN_E may be returned on block align error.
 137    \return BAD_LENGTH_E will be returned if the input length isn't a
 138    multiple of the AES block length, when the library is built with
 139    WOLFSSL_AES_CBC_LENGTH_CHECKS.
 140
 141    \param aes pointer to the AES object used to decrypt data.
 142    \param out pointer to the output buffer in which to store the plain text
 143    of the decrypted message.
 144    size must be a multiple of AES_BLOCK_LENGTH, padded if necessary
 145    \param in pointer to the input buffer containing cipher text to be
 146    decrypted.
 147    size must be a multiple of AES_BLOCK_LENGTH, padded if necessary
 148    \param sz size of input message.
 149
 150    _Example_
 151    \code
 152    Aes dec;
 153    int ret = 0;
 154    // initialize dec with wc_AesInit and wc_AesSetKey, using direction
 155    // AES_DECRYPTION
 156    byte cipher[AES_BLOCK_SIZE * n]; // some multiple of 16 bytes
 157    // fill cipher with cipher text
 158    byte plain [AES_BLOCK_SIZE * n];
 159    if ((ret = wc_AesCbcDecrypt(&dec, plain, cipher, sizeof(cipher))) != 0 ) {
 160	// block align error
 161    }
 162    \endcode
 163
 164    \sa wc_AesInit
 165    \sa wc_AesSetKey
 166    \sa wc_AesCbcEncrypt
 167*/
 168int  wc_AesCbcDecrypt(Aes* aes, byte* out,
 169                                  const byte* in, word32 sz);
 170
 171/*!
 172    \ingroup AES
 173    \brief Encrypts/Decrypts a message from the input buffer in, and places
 174    the resulting cipher text in the output buffer out using CTR mode with
 175    AES. This function is only enabled if WOLFSSL_AES_COUNTER is enabled at
 176    compile time. The AES structure should be initialized through AesSetKey
 177    before calling this function. Note that this function is used for both
 178    decryption and encryption. _NOTE:_ Regarding using same API for encryption
 179    and decryption. User should differentiate between Aes structures
 180    for encrypt/decrypt.
 181
 182    \return int integer values corresponding to wolfSSL error or success
 183    status
 184
 185    \param aes pointer to the AES object used to decrypt data
 186    \param out pointer to the output buffer in which to store the cipher
 187    text of the encrypted message
 188    size must be a multiple of AES_BLOCK_LENGTH, padded if necessary
 189    \param in pointer to the input buffer containing plain text to be encrypted
 190    size must be a multiple of AES_BLOCK_LENGTH, padded if necessary
 191    \param sz size of the input plain text
 192
 193    _Example_
 194    \code
 195    Aes enc;
 196    Aes dec;
 197    // initialize enc and dec with wc_AesInit and wc_AesSetKeyDirect, using
 198    // direction AES_ENCRYPTION since the underlying API only calls Encrypt
 199    // and by default calling encrypt on a cipher results in a decryption of
 200    // the cipher
 201
 202    byte msg[AES_BLOCK_SIZE * n]; //n being a positive integer making msg
 203    some multiple of 16 bytes
 204    // fill plain with message text
 205    byte cipher[AES_BLOCK_SIZE * n];
 206    byte decrypted[AES_BLOCK_SIZE * n];
 207    wc_AesCtrEncrypt(&enc, cipher, msg, sizeof(msg)); // encrypt plain
 208    wc_AesCtrEncrypt(&dec, decrypted, cipher, sizeof(cipher));
 209    // decrypt cipher text
 210    \endcode
 211
 212    \sa wc_AesSetKey
 213*/
 214int wc_AesCtrEncrypt(Aes* aes, byte* out,
 215                                   const byte* in, word32 sz);
 216
 217/*!
 218    \ingroup AES
 219    \brief This function is a one-block encrypt of the input block, in, into
 220    the output block, out. It uses the key of the provided AES structure, which
 221    should be initialized with wc_AesSetKey before calling this function.
 222    wc_AesSetKey should have been called with the iv set to NULL. This is only
 223    enabled if the configure option WOLFSSL_AES_DIRECT is enabled. __Warning:__
 224    In nearly all use cases ECB mode is considered to be less secure. Please
 225    avoid using ECB APIโ€™s directly whenever possible.
 226
 227    \return int integer values corresponding to wolfSSL error or success
 228    status
 229
 230    \param aes pointer to the AES object used to encrypt data
 231    \param out pointer to the output buffer in which to store the cipher
 232    text of the encrypted message
 233    \param in pointer to the input buffer containing plain text to be encrypted
 234
 235    _Example_
 236    \code
 237    Aes enc;
 238    // initialize enc with wc_AesInit and wc_AesSetKey, using direction
 239    // AES_ENCRYPTION
 240    byte msg [AES_BLOCK_SIZE]; // 16 bytes
 241    // initialize msg with plain text to encrypt
 242    byte cipher[AES_BLOCK_SIZE];
 243    wc_AesEncryptDirect(&enc, cipher, msg);
 244    \endcode
 245
 246    \sa wc_AesDecryptDirect
 247    \sa wc_AesSetKeyDirect
 248*/
 249int wc_AesEncryptDirect(Aes* aes, byte* out, const byte* in);
 250
 251/*!
 252    \ingroup AES
 253    \brief This function is a one-block decrypt of the input block, in, into
 254    the output block, out. It uses the key of the provided AES structure, which
 255    should be initialized with wc_AesSetKey before calling this function.
 256    wc_AesSetKey should have been called with the iv set to NULL. This is only
 257    enabled if the configure option WOLFSSL_AES_DIRECT is enabled. __Warning:__
 258    In nearly all use cases ECB mode is considered to be less secure. Please
 259    avoid using ECB APIโ€™s directly whenever possible.
 260
 261    \return int integer values corresponding to wolfSSL error or success
 262    status
 263
 264    \param aes pointer to the AES object used to encrypt data
 265    \param out pointer to the output buffer in which to store the plain
 266    text of the decrypted cipher text
 267    \param in pointer to the input buffer containing cipher text to be
 268    decrypted
 269
 270    _Example_
 271    \code
 272    Aes dec;
 273    // initialize enc with wc_AesInit and wc_AesSetKey, using direction
 274    // AES_DECRYPTION
 275    byte cipher [AES_BLOCK_SIZE]; // 16 bytes
 276    // initialize cipher with cipher text to decrypt
 277    byte msg[AES_BLOCK_SIZE];
 278    wc_AesDecryptDirect(&dec, msg, cipher);
 279    \endcode
 280
 281    \sa wc_AesEncryptDirect
 282    \sa wc_AesSetKeyDirect
 283 */
 284int wc_AesDecryptDirect(Aes* aes, byte* out, const byte* in);
 285
 286/*!
 287    \ingroup AES
 288    \brief This function is used to set the AES keys for CTR mode with AES.
 289    It initializes an AES object with the given key, iv
 290    (initialization vector), and encryption dir (direction). It is only
 291    enabled if the configure option WOLFSSL_AES_DIRECT is enabled.
 292    Currently wc_AesSetKeyDirect uses wc_AesSetKey internally. __Warning:__ In
 293    nearly all use cases ECB mode is considered to be less secure. Please avoid
 294    using ECB APIโ€™s directly whenever possible
 295
 296    \return 0 On successfully setting the key.
 297    \return BAD_FUNC_ARG Returned if the given key is an invalid length.
 298
 299    \param aes pointer to the AES object used to encrypt data
 300    \param key 16, 24, or 32 byte secret key for encryption and decryption
 301    \param len length of the key passed in
 302    \param iv initialization vector used to initialize the key
 303    \param dir Cipher direction. Set AES_ENCRYPTION to encrypt,  or
 304    AES_DECRYPTION to decrypt. (See enum in wolfssl/wolfcrypt/aes.h)
 305    (NOTE: If using wc_AesSetKeyDirect with Aes Counter mode (Stream cipher)
 306    only use AES_ENCRYPTION for both encrypting and decrypting)
 307
 308    _Example_
 309    \code
 310    Aes enc;
 311    int ret = 0;
 312    byte key[] = { some 16, 24, or 32 byte key };
 313    byte iv[]  = { some 16 byte iv };
 314
 315    if (ret = wc_AesInit(&enc, HEAP_HINT, INVALID_DEVID) != 0) {
 316        // failed to initialize aes key
 317    }
 318    if (ret = wc_AesSetKeyDirect(&enc, key, sizeof(key), iv,
 319    AES_ENCRYPTION) != 0) {
 320	// failed to set aes key
 321    }
 322    \endcode
 323
 324    \sa wc_AesEncryptDirect
 325    \sa wc_AesDecryptDirect
 326    \sa wc_AesSetKey
 327*/
 328int  wc_AesSetKeyDirect(Aes* aes, const byte* key, word32 len,
 329                                const byte* iv, int dir);
 330
 331/*!
 332    \ingroup AES
 333    \brief This function is used to set the key for AES GCM
 334    (Galois/Counter Mode). It initializes an AES object with the
 335    given key. It is only enabled if the configure option
 336    HAVE_AESGCM is enabled at compile time.
 337
 338    \return 0 On successfully setting the key.
 339    \return BAD_FUNC_ARG Returned if the given key is an invalid length.
 340
 341    \param aes pointer to the AES object used to encrypt data
 342    \param key 16, 24, or 32 byte secret key for encryption and decryption
 343    \param len length of the key passed in
 344
 345    _Example_
 346    \code
 347    Aes enc;
 348    int ret = 0;
 349    byte key[] = { some 16, 24,32 byte key };
 350    if (ret = wc_AesInit(&enc, HEAP_HINT, INVALID_DEVID) != 0) {
 351        // failed to initialize aes key
 352    }
 353    if (ret = wc_AesGcmSetKey(&enc, key, sizeof(key)) != 0) {
 354	// failed to set aes key
 355    }
 356    \endcode
 357
 358    \sa wc_AesGcmEncrypt
 359    \sa wc_AesGcmDecrypt
 360*/
 361int  wc_AesGcmSetKey(Aes* aes, const byte* key, word32 len);
 362
 363/*!
 364    \ingroup AES
 365    \brief This function encrypts the input message, held in the buffer in,
 366    and stores the resulting cipher text in the output buffer out. It
 367    requires a new iv (initialization vector) for each call to encrypt.
 368    It also encodes the input authentication vector, authIn, into the
 369    authentication tag, authTag.
 370
 371    \return 0 On successfully encrypting the input message
 372
 373    \param aes - pointer to the AES object used to encrypt data
 374    \param out pointer to the output buffer in which to store the cipher text
 375    size must match in's size (sz)
 376    \param in pointer to the input buffer holding the message to encrypt
 377    size must be a multiple of AES_BLOCK_LENGTH, padded if necessary
 378    \param sz length of the input message to encrypt
 379    \param iv pointer to the buffer containing the initialization vector
 380    \param ivSz length of the initialization vector
 381    \param authTag pointer to the buffer in which to store the
 382    authentication tag
 383    \param authTagSz length of the desired authentication tag
 384    \param authIn pointer to the buffer containing the input
 385    authentication vector
 386    \param authInSz length of the input authentication vector
 387
 388    _Example_
 389    \code
 390    Aes enc;
 391    // initialize Aes structure by calling wc_AesInit() and wc_AesGcmSetKey
 392
 393    byte plain[AES_BLOCK_LENGTH * n]; //n being a positive integer
 394    making plain some multiple of 16 bytes
 395    // initialize plain with msg to encrypt
 396    byte cipher[sizeof(plain)];
 397    byte iv[] = // some 16 byte iv
 398    byte authTag[AUTH_TAG_LENGTH];
 399    byte authIn[] = // Authentication Vector
 400
 401    wc_AesGcmEncrypt(&enc, cipher, plain, sizeof(cipher), iv, sizeof(iv),
 402			authTag, sizeof(authTag), authIn, sizeof(authIn));
 403    \endcode
 404
 405    \sa wc_AesGcmSetKey
 406    \sa wc_AesGcmDecrypt
 407*/
 408int  wc_AesGcmEncrypt(Aes* aes, byte* out,
 409                                   const byte* in, word32 sz,
 410                                   const byte* iv, word32 ivSz,
 411                                   byte* authTag, word32 authTagSz,
 412                                   const byte* authIn, word32 authInSz);
 413
 414/*!
 415    \ingroup AES
 416    \brief This function decrypts the input cipher text, held in the buffer
 417    in, and stores the resulting message text in the output buffer out.
 418    It also checks the input authentication vector, authIn, against the
 419    supplied authentication tag, authTag.  If a nonzero error code is returned,
 420    the output data is undefined.  However, callers must unconditionally zeroize
 421    the output buffer to guard against leakage of cleartext data.
 422
 423    \return 0 On successfully decrypting and authenticating the input message
 424    \return AES_GCM_AUTH_E If the authentication tag does not match the
 425    supplied authentication code vector, authTag.
 426
 427    \param aes pointer to the AES object used to encrypt data
 428    \param out pointer to the output buffer in which to store the message text
 429    size must match in's size (sz)
 430    \param in pointer to the input buffer holding the cipher text to decrypt
 431    size must be a multiple of AES_BLOCK_LENGTH, padded if necessary
 432    \param sz length of the cipher text to decrypt
 433    \param iv pointer to the buffer containing the initialization vector
 434    \param ivSz length of the initialization vector
 435    \param authTag pointer to the buffer containing the authentication tag
 436    \param authTagSz length of the desired authentication tag
 437    \param authIn pointer to the buffer containing the input
 438    authentication vector
 439    \param authInSz length of the input authentication vector
 440
 441    _Example_
 442    \code
 443    Aes enc; //can use the same struct as was passed to wc_AesGcmEncrypt
 444    // initialize aes structure by calling wc_AesInit and wc_AesGcmSetKey
 445    // if not already done
 446
 447    byte cipher[AES_BLOCK_LENGTH * n]; //n being a positive integer
 448    making cipher some multiple of 16 bytes
 449    // initialize cipher with cipher text to decrypt
 450    byte output[sizeof(cipher)];
 451    byte iv[] = // some 16 byte iv
 452    byte authTag[AUTH_TAG_LENGTH];
 453    byte authIn[] = // Authentication Vector
 454
 455    wc_AesGcmDecrypt(&enc, output, cipher, sizeof(cipher), iv, sizeof(iv),
 456			authTag, sizeof(authTag), authIn, sizeof(authIn));
 457    \endcode
 458
 459    \sa wc_AesGcmSetKey
 460    \sa wc_AesGcmEncrypt
 461*/
 462int  wc_AesGcmDecrypt(Aes* aes, byte* out,
 463                                   const byte* in, word32 sz,
 464                                   const byte* iv, word32 ivSz,
 465                                   const byte* authTag, word32 authTagSz,
 466                                   const byte* authIn, word32 authInSz);
 467
 468/*!
 469    \ingroup AES
 470    \brief This function initializes and sets the key for a GMAC object
 471    to be used for Galois Message Authentication.
 472
 473    \return 0 On successfully setting the key
 474    \return BAD_FUNC_ARG Returned if key length is invalid.
 475
 476    \param gmac pointer to the gmac object used for authentication
 477    \param key 16, 24, or 32 byte secret key for authentication
 478    \param len length of the key
 479
 480    _Example_
 481    \code
 482    Gmac gmac;
 483    key[] = { some 16, 24, or 32 byte length key };
 484    wc_AesInit(gmac.aes, HEAP_HINT, INVALID_DEVID); // Make sure devId updated
 485    wc_GmacSetKey(&gmac, key, sizeof(key));
 486    \endcode
 487
 488    \sa wc_GmacUpdate
 489    \sa wc_AesInit
 490*/
 491int wc_GmacSetKey(Gmac* gmac, const byte* key, word32 len);
 492
 493/*!
 494    \ingroup AES
 495    \brief This function generates the Gmac hash of the authIn input and
 496    stores the result in the authTag buffer. After running wc_GmacUpdate,
 497    one should compare the generated authTag to a known authentication tag
 498    to verify the authenticity of a message.
 499
 500    \return 0 On successfully computing the Gmac hash.
 501
 502    \param gmac pointer to the gmac object used for authentication
 503    \param iv initialization vector used for the hash
 504    \param ivSz size of the initialization vector used
 505    \param authIn pointer to the buffer containing the authentication
 506    vector to verify
 507    \param authInSz size of the authentication vector
 508    \param authTag pointer to the output buffer in which to store the Gmac hash
 509    \param authTagSz the size of the output buffer used to store the Gmac hash
 510
 511    _Example_
 512    \code
 513    Gmac gmac;
 514    key[] = { some 16, 24, or 32 byte length key };
 515    iv[] = { some 16 byte length iv };
 516
 517    wc_AesInit(gmac.aes, HEAP_HINT, INVALID_DEVID); // Make sure devId updated
 518    wc_GmacSetKey(&gmac, key, sizeof(key));
 519    authIn[] = { some 16 byte authentication input };
 520    tag[AES_BLOCK_SIZE]; // will store authentication code
 521
 522    wc_GmacUpdate(&gmac, iv, sizeof(iv), authIn, sizeof(authIn), tag,
 523    sizeof(tag));
 524    \endcode
 525
 526    \sa wc_GmacSetKey
 527    \sa wc_AesInit
 528*/
 529int wc_GmacUpdate(Gmac* gmac, const byte* iv, word32 ivSz,
 530                               const byte* authIn, word32 authInSz,
 531                               byte* authTag, word32 authTagSz);
 532
 533/*!
 534    \ingroup AES
 535    \brief This function sets the key for an AES object using CCM
 536    (Counter with CBC-MAC). It takes a pointer to an AES structure and
 537    initializes it with supplied key.
 538
 539    \return none
 540
 541    \param aes aes structure in which to store the supplied key
 542    \param key 16, 24, or 32 byte secret key for encryption and decryption
 543    \param keySz size of the supplied key
 544
 545    _Example_
 546    \code
 547    Aes enc;
 548    key[] = { some 16, 24, or 32 byte length key };
 549
 550    wc_AesInit(&enc, HEAP_HINT, INVALID_DEVID); // Make sure devId updated
 551    wc_AesCcmSetKey(&enc, key, sizeof(key));
 552    \endcode
 553
 554    \sa wc_AesCcmEncrypt
 555    \sa wc_AesCcmDecrypt
 556*/
 557int  wc_AesCcmSetKey(Aes* aes, const byte* key, word32 keySz);
 558
 559/*!
 560    \ingroup AES
 561
 562    \brief This function encrypts the input message, in, into the output
 563    buffer, out, using CCM (Counter with CBC-MAC). It subsequently
 564    calculates and stores the authorization tag, authTag, from the
 565    authIn input.
 566
 567    \return none
 568
 569    \param aes pointer to the AES object used to encrypt data
 570    \param out pointer to the output buffer in which to store the cipher text
 571    \param in pointer to the input buffer holding the message to encrypt
 572    \param sz length of the input message to encrypt
 573    \param nonce pointer to the buffer containing the nonce
 574    (number only used once)
 575    \param nonceSz length of the nonce
 576    \param authTag pointer to the buffer in which to store the
 577    authentication tag
 578    \param authTagSz length of the desired authentication tag
 579    \param authIn pointer to the buffer containing the input
 580    authentication vector
 581    \param authInSz length of the input authentication vector
 582
 583    _Example_
 584    \code
 585    Aes enc;
 586    // initialize enc with wc_AesInit and wc_AesCcmSetKey
 587
 588    nonce[] = { initialize nonce };
 589    plain[] = { some plain text message };
 590    cipher[sizeof(plain)];
 591
 592    authIn[] = { some 16 byte authentication input };
 593    tag[AES_BLOCK_SIZE]; // will store authentication code
 594
 595    wc_AesCcmEncrypt(&enc, cipher, plain, sizeof(plain), nonce, sizeof(nonce),
 596			tag, sizeof(tag), authIn, sizeof(authIn));
 597    \endcode
 598
 599    \sa wc_AesCcmSetKey
 600    \sa wc_AesCcmDecrypt
 601*/
 602int  wc_AesCcmEncrypt(Aes* aes, byte* out,
 603                                   const byte* in, word32 inSz,
 604                                   const byte* nonce, word32 nonceSz,
 605                                   byte* authTag, word32 authTagSz,
 606                                   const byte* authIn, word32 authInSz);
 607
 608/*!
 609    \ingroup AES
 610
 611    \brief This function decrypts the input cipher text, in, into
 612    the output buffer, out, using CCM (Counter with CBC-MAC). It
 613    subsequently calculates the authorization tag, authTag, from the
 614    authIn input.  If a nonzero error code is returned, the output data is
 615    undefined.  However, callers must unconditionally zeroize the output buffer
 616    to guard against leakage of cleartext data.
 617
 618    \return 0 On successfully decrypting the input message
 619    \return AES_CCM_AUTH_E If the authentication tag does not match the
 620    supplied authentication code vector, authTag.
 621
 622    \param aes pointer to the AES object used to encrypt data
 623    \param out pointer to the output buffer in which to store the cipher text
 624    \param in pointer to the input buffer holding the message to encrypt
 625    \param sz length of the input cipher text to decrypt
 626    \param nonce pointer to the buffer containing the nonce
 627    (number only used once)
 628    \param nonceSz length of the nonce
 629    \param authTag pointer to the buffer in which to store the
 630    authentication tag
 631    \param authTagSz length of the desired authentication tag
 632    \param authIn pointer to the buffer containing the input
 633    authentication vector
 634    \param authInSz length of the input authentication vector
 635
 636    _Example_
 637    \code
 638    Aes dec;
 639    // initialize dec with wc_AesInit and wc_AesCcmSetKey
 640
 641    nonce[] = { initialize nonce };
 642    cipher[] = { encrypted message };
 643    plain[sizeof(cipher)];
 644
 645    authIn[] = { some 16 byte authentication input };
 646    tag[AES_BLOCK_SIZE] = { authentication tag received for verification };
 647
 648    int return = wc_AesCcmDecrypt(&dec, plain, cipher, sizeof(cipher),
 649    nonce, sizeof(nonce),tag, sizeof(tag), authIn, sizeof(authIn));
 650    if(return != 0) {
 651	// decrypt error, invalid authentication code
 652    }
 653    \endcode
 654
 655    \sa wc_AesCcmSetKey
 656    \sa wc_AesCcmEncrypt
 657*/
 658int  wc_AesCcmDecrypt(Aes* aes, byte* out,
 659                                   const byte* in, word32 inSz,
 660                                   const byte* nonce, word32 nonceSz,
 661                                   const byte* authTag, word32 authTagSz,
 662                                   const byte* authIn, word32 authInSz);
 663
 664/*!
 665    \ingroup AES
 666
 667    \brief This is to initialize an AES-XTS context. It is up to user to call
 668    wc_AesXtsFree on aes key when done.
 669
 670    \return 0 Success
 671
 672    \param aes   AES keys for encrypt/decrypt process
 673    \param heap  heap hint to use for memory. Can be NULL
 674    \param devId ID to use with crypto callbacks or async hardware. Set to INVALID_DEVID (-2) if not used
 675
 676    _Example_
 677    \code
 678    XtsAes aes;
 679
 680    if(wc_AesXtsInit(&aes, NULL, INVALID_DEVID) != 0)
 681    {
 682        // Handle error
 683    }
 684    if(wc_AesXtsSetKeyNoInit(&aes, key, sizeof(key), AES_ENCRYPTION) != 0)
 685    {
 686        // Handle error
 687    }
 688    wc_AesXtsFree(&aes);
 689    \endcode
 690
 691    \sa wc_AesXtsSetKey
 692    \sa wc_AesXtsSetKeyNoInit
 693    \sa wc_AesXtsEncrypt
 694    \sa wc_AesXtsDecrypt
 695    \sa wc_AesXtsFree
 696*/
 697int wc_AesXtsInit(XtsAes* aes, void* heap, int devId);
 698
 699
 700/*!
 701    \ingroup AES
 702
 703    \brief This is to help with setting keys to correct encrypt or decrypt type,
 704    after first calling wc_AesXtsInit(). It is up to user to call wc_AesXtsFree
 705    on aes key when done.
 706
 707    \return 0 Success
 708
 709    \param aes   AES keys for encrypt/decrypt process
 710    \param key   buffer holding aes key | tweak key
 711    \param len   length of key buffer in bytes. Should be twice that of
 712    key size.
 713                 i.e. 32 for a 16 byte key.
 714    \param dir   direction, either AES_ENCRYPTION or AES_DECRYPTION
 715
 716    _Example_
 717    \code
 718    XtsAes aes;
 719
 720    if(wc_AesXtsInit(&aes, NULL, 0) != 0)
 721    {
 722        // Handle error
 723    }
 724    if(wc_AesXtsSetKeyNoInit(&aes, key, sizeof(key), AES_ENCRYPTION, NULL, 0)
 725       != 0)
 726    {
 727        // Handle error
 728    }
 729    wc_AesXtsFree(&aes);
 730    \endcode
 731
 732    \sa wc_AesXtsEncrypt
 733    \sa wc_AesXtsDecrypt
 734    \sa wc_AesXtsFree
 735*/
 736int wc_AesXtsSetKeyNoInit(XtsAes* aes, const byte* key,
 737         word32 len, int dir);
 738
 739
 740/*!
 741    \ingroup AES
 742
 743    \brief This is to help with setting keys to correct encrypt or
 744    decrypt type. It is up to user to call wc_AesXtsFree on aes key when done.
 745
 746    \return 0 Success
 747
 748    \param aes   AES keys for encrypt/decrypt process
 749    \param key   buffer holding aes key | tweak key
 750    \param len   length of key buffer in bytes. Should be twice that of
 751    key size.
 752                 i.e. 32 for a 16 byte key.
 753    \param dir   direction, either AES_ENCRYPTION or AES_DECRYPTION
 754    \param heap  heap hint to use for memory. Can be NULL
 755    \param devId ID to use with crypto callbacks or async hardware. Set to INVALID_DEVID (-2) if not used
 756
 757    _Example_
 758    \code
 759    XtsAes aes;
 760
 761    if(wc_AesXtsSetKey(&aes, key, sizeof(key), AES_ENCRYPTION, NULL, INVALID_DEVID) != 0)
 762    {
 763        // Handle error
 764    }
 765    wc_AesXtsFree(&aes);
 766    \endcode
 767
 768    \sa wc_AesXtsInit
 769    \sa wc_AesXtsSetKeyNoInit
 770    \sa wc_AesXtsEncrypt
 771    \sa wc_AesXtsDecrypt
 772    \sa wc_AesXtsFree
 773*/
 774int wc_AesXtsSetKey(XtsAes* aes, const byte* key,
 775         word32 len, int dir, void* heap, int devId);
 776
 777/*!
 778    \ingroup AES
 779
 780    \brief Same process as wc_AesXtsEncrypt but uses a word64 type as the tweak
 781           value instead of a byte array. This just converts the word64 to a
 782           byte array and calls wc_AesXtsEncrypt.
 783
 784    \return 0 Success
 785
 786    \param aes    AES keys to use for block encrypt/decrypt
 787    \param out    output buffer to hold cipher text
 788    \param in     input plain text buffer to encrypt
 789    \param sz     size of both out and in buffers
 790    \param sector value to use for tweak
 791
 792    _Example_
 793    \code
 794    XtsAes aes;
 795    unsigned char plain[SIZE];
 796    unsigned char cipher[SIZE];
 797    word64 s = VALUE;
 798
 799    //set up keys with AES_ENCRYPTION as dir
 800
 801    if(wc_AesXtsEncryptSector(&aes, cipher, plain, SIZE, s) != 0)
 802    {
 803        // Handle error
 804    }
 805    wc_AesXtsFree(&aes);
 806    \endcode
 807
 808    \sa wc_AesXtsEncrypt
 809    \sa wc_AesXtsDecrypt
 810    \sa wc_AesXtsInit
 811    \sa wc_AesXtsSetKeyNoInit
 812    \sa wc_AesXtsSetKey
 813    \sa wc_AesXtsFree
 814*/
 815int wc_AesXtsEncryptSector(XtsAes* aes, byte* out,
 816         const byte* in, word32 sz, word64 sector);
 817
 818/*!
 819    \ingroup AES
 820
 821    \brief Same process as wc_AesXtsDecrypt but uses a word64 type as the tweak
 822           value instead of a byte array. This just converts the word64 to a
 823           byte array.
 824
 825    \return 0 Success
 826
 827    \param aes    AES keys to use for block encrypt/decrypt
 828    \param out    output buffer to hold plain text
 829    \param in     input cipher text buffer to decrypt
 830    \param sz     size of both out and in buffers
 831    \param sector value to use for tweak
 832
 833    _Example_
 834    \code
 835    XtsAes aes;
 836    unsigned char plain[SIZE];
 837    unsigned char cipher[SIZE];
 838    word64 s = VALUE;
 839
 840    //set up aes key with AES_DECRYPTION as dir and tweak with AES_ENCRYPTION
 841
 842    if(wc_AesXtsDecryptSector(&aes, plain, cipher, SIZE, s) != 0)
 843    {
 844        // Handle error
 845    }
 846    wc_AesXtsFree(&aes);
 847    \endcode
 848
 849    \sa wc_AesXtsEncrypt
 850    \sa wc_AesXtsDecrypt
 851    \sa wc_AesXtsInit
 852    \sa wc_AesXtsSetKeyNoInit
 853    \sa wc_AesXtsSetKey
 854    \sa wc_AesXtsFree
 855*/
 856int wc_AesXtsDecryptSector(XtsAes* aes, byte* out,
 857         const byte* in, word32 sz, word64 sector);
 858
 859/*!
 860    \ingroup AES
 861
 862    \brief AES with XTS mode. (XTS) XEX encryption with Tweak and cipher text
 863           Stealing.
 864
 865    \return 0 Success
 866
 867    \param aes   AES keys to use for block encrypt/decrypt
 868    \param out   output buffer to hold cipher text
 869    \param in    input plain text buffer to encrypt
 870    \param sz    size of both out and in buffers
 871    \param i     value to use for tweak
 872    \param iSz   size of i buffer, should always be AES_BLOCK_SIZE but having
 873                 this input adds a sanity check on how the user calls the
 874                 function.
 875
 876    _Example_
 877    \code
 878    XtsAes aes;
 879    unsigned char plain[SIZE];
 880    unsigned char cipher[SIZE];
 881    unsigned char i[AES_BLOCK_SIZE];
 882
 883    //set up key with AES_ENCRYPTION as dir
 884
 885    if(wc_AesXtsEncrypt(&aes, cipher, plain, SIZE, i, sizeof(i)) != 0)
 886    {
 887        // Handle error
 888    }
 889    wc_AesXtsFree(&aes);
 890    \endcode
 891
 892    \sa wc_AesXtsDecrypt
 893    \sa wc_AesXtsInit
 894    \sa wc_AesXtsSetKeyNoInit
 895    \sa wc_AesXtsSetKey
 896    \sa wc_AesXtsFree
 897*/
 898int wc_AesXtsEncrypt(XtsAes* aes, byte* out,
 899         const byte* in, word32 sz, const byte* i, word32 iSz);
 900
 901/*!
 902    \ingroup AES
 903
 904    \brief Same process as encryption but Aes key is AES_DECRYPTION type.
 905
 906    \return 0 Success
 907
 908    \param aes   AES keys to use for block encrypt/decrypt
 909    \param out   output buffer to hold plain text
 910    \param in    input cipher text buffer to decrypt
 911    \param sz    size of both out and in buffers
 912    \param i     value to use for tweak
 913    \param iSz   size of i buffer, should always be AES_BLOCK_SIZE but having
 914                 this input adds a sanity check on how the user calls the
 915                 function.
 916
 917    _Example_
 918    \code
 919    XtsAes aes;
 920    unsigned char plain[SIZE];
 921    unsigned char cipher[SIZE];
 922    unsigned char i[AES_BLOCK_SIZE];
 923
 924    //set up key with AES_DECRYPTION as dir and tweak with AES_ENCRYPTION
 925
 926    if(wc_AesXtsDecrypt(&aes, plain, cipher, SIZE, i, sizeof(i)) != 0)
 927    {
 928        // Handle error
 929    }
 930    wc_AesXtsFree(&aes);
 931    \endcode
 932
 933    \sa wc_AesXtsEncrypt
 934    \sa wc_AesXtsInit
 935    \sa wc_AesXtsSetKeyNoInit
 936    \sa wc_AesXtsSetKey
 937    \sa wc_AesXtsFree
 938*/
 939int wc_AesXtsDecrypt(XtsAes* aes, byte* out,
 940        const byte* in, word32 sz, const byte* i, word32 iSz);
 941
 942/*!
 943    \ingroup AES
 944
 945    \brief This is to free up any resources used by the XtsAes structure
 946
 947    \return 0 Success
 948
 949    \param aes AES keys to free
 950
 951    _Example_
 952    \code
 953    XtsAes aes;
 954
 955    if(wc_AesXtsSetKey(&aes, key, sizeof(key), AES_ENCRYPTION, NULL, 0) != 0)
 956    {
 957        // Handle error
 958    }
 959    wc_AesXtsFree(&aes);
 960    \endcode
 961
 962    \sa wc_AesXtsEncrypt
 963    \sa wc_AesXtsDecrypt
 964    \sa wc_AesXtsInit
 965    \sa wc_AesXtsSetKeyNoInit
 966    \sa wc_AesXtsSetKey
 967*/
 968int wc_AesXtsFree(XtsAes* aes);
 969
 970
 971/*!
 972    \ingroup AES
 973    \brief Initialize Aes structure. Sets heap hint to be used and ID for use
 974    with async hardware. It is up to the user to call wc_AesFree on the Aes
 975    structure when done.
 976    \return 0 Success
 977
 978    \param aes aes structure in to initialize
 979    \param heap heap hint to use for malloc / free if needed
 980    \param devId ID to use with crypto callbacks or async hardware. Set to INVALID_DEVID (-2) if not used
 981
 982    _Example_
 983    \code
 984    Aes enc;
 985    void* hint = NULL;
 986    int devId = INVALID_DEVID; //if not using async INVALID_DEVID is default
 987
 988    //heap hint could be set here if used
 989
 990    wc_AesInit(&enc, hint, devId);
 991    \endcode
 992
 993    \sa wc_AesSetKey
 994    \sa wc_AesSetIV
 995    \sa wc_AesFree
 996*/
 997int  wc_AesInit(Aes* aes, void* heap, int devId);
 998
 999/*!
1000    \ingroup AES
1001    \brief free resources associated with the Aes structure when applicable.
1002    Internally may sometimes be a no-op but still recommended to call in all
1003    cases as a general best-practice (IE if application code is ported for use
1004    on new environments where the call is applicable).
1005    \return no return (void function)
1006
1007    \param aes aes structure in to free
1008
1009    _Example_
1010    \code
1011    Aes enc;
1012    void* hint = NULL;
1013    int devId = INVALID_DEVID; //if not using async INVALID_DEVID is default
1014
1015    //heap hint could be set here if used
1016
1017    wc_AesInit(&enc, hint, devId);
1018    // ... do some interesting things ...
1019    wc_AesFree(&enc);
1020    \endcode
1021
1022    \sa wc_AesInit
1023*/
1024void wc_AesFree(Aes* aes);
1025
1026/*!
1027    \ingroup AES
1028
1029    \brief AES with CFB mode.
1030
1031    \return 0 Success and negative error values on failure
1032
1033    \param aes   AES keys to use for block encrypt/decrypt
1034    \param out   output buffer to hold cipher text must be at least as large
1035    as inputbuffer)
1036    \param in    input plain text buffer to encrypt
1037    \param sz    size of input buffer
1038
1039    _Example_
1040    \code
1041    Aes aes;
1042    unsigned char plain[SIZE];
1043    unsigned char cipher[SIZE];
1044
1045    //set up key with AES_ENCRYPTION as dir for both encrypt and decrypt
1046
1047    if(wc_AesCfbEncrypt(&aes, cipher, plain, SIZE) != 0)
1048    {
1049        // Handle error
1050    }
1051    \endcode
1052
1053    \sa wc_AesCfbDecrypt
1054    \sa wc_AesSetKey
1055*/
1056int wc_AesCfbEncrypt(Aes* aes, byte* out, const byte* in, word32 sz);
1057
1058/*!
1059    \ingroup AES
1060
1061    \brief AES with CFB mode.
1062
1063    \return 0 Success and negative error values on failure
1064
1065    \param aes   AES keys to use for block encrypt/decrypt
1066    \param out   output buffer to hold decrypted text must be at least as large
1067    as inputbuffer)
1068    \param in    input buffer to decrypt
1069    \param sz    size of input buffer
1070
1071    _Example_
1072    \code
1073    Aes aes;
1074    unsigned char plain[SIZE];
1075    unsigned char cipher[SIZE];
1076
1077    //set up key with AES_ENCRYPTION as dir for both encrypt and decrypt
1078
1079    if(wc_AesCfbDecrypt(&aes, plain, cipher, SIZE) != 0)
1080    {
1081        // Handle error
1082    }
1083    \endcode
1084
1085    \sa wc_AesCfbEncrypt
1086    \sa wc_AesSetKey
1087*/
1088int wc_AesCfbDecrypt(Aes* aes, byte* out, const byte* in, word32 sz);
1089
1090/*!
1091    \ingroup AES
1092
1093    \brief This function performs SIV (synthetic initialization vector)
1094    encryption as described in RFC 5297.
1095
1096    \return 0 On successful encryption.
1097    \return BAD_FUNC_ARG If key, SIV, or output buffer are NULL. Also returned
1098    if the key size isn't 32, 48, or 64 bytes.
1099    \return Other Other negative error values returned if AES or CMAC operations
1100    fail.
1101
1102    \param key Byte buffer containing the key to use.
1103    \param keySz Length of the key buffer in bytes.
1104    \param assoc Additional, authenticated associated data (AD).
1105    \param assocSz Length of AD buffer in bytes.
1106    \param nonce A number used once. Used by the algorithm in the same manner as
1107    the AD.
1108    \param nonceSz Length of nonce buffer in bytes.
1109    \param in Plaintext buffer to encrypt.
1110    \param inSz Length of plaintext buffer.
1111    \param siv The SIV output by S2V (see RFC 5297 2.4).
1112    \param out Buffer to hold the ciphertext. Should be the same length as the
1113    plaintext buffer.
1114
1115    _Example_
1116    \code
1117    byte key[] = { some 32, 48, or 64 byte key };
1118    byte assoc[] = {0x01, 0x2, 0x3};
1119    byte nonce[] = {0x04, 0x5, 0x6};
1120    byte plainText[] = {0xDE, 0xAD, 0xBE, 0xEF};
1121    byte siv[AES_BLOCK_SIZE];
1122    byte cipherText[sizeof(plainText)];
1123    if (wc_AesSivEncrypt(key, sizeof(key), assoc, sizeof(assoc), nonce,
1124        sizeof(nonce), plainText, sizeof(plainText), siv, cipherText) != 0) {
1125        // failed to encrypt
1126    }
1127    \endcode
1128
1129    \sa wc_AesSivDecrypt
1130*/
1131
1132
1133int wc_AesSivEncrypt(const byte* key, word32 keySz, const byte* assoc,
1134                     word32 assocSz, const byte* nonce, word32 nonceSz,
1135                     const byte* in, word32 inSz, byte* siv, byte* out);
1136
1137/*!
1138    \ingroup AES
1139    \brief This function performs SIV (synthetic initialization vector)
1140    decryption as described in RFC 5297.  If a nonzero error code is returned,
1141    the output data is undefined.  However, callers must unconditionally zeroize
1142    the output buffer to guard against leakage of cleartext data.
1143
1144    \return 0 On successful decryption.
1145    \return BAD_FUNC_ARG If key, SIV, or output buffer are NULL. Also returned
1146    if the key size isn't 32, 48, or 64 bytes.
1147    \return AES_SIV_AUTH_E If the SIV derived by S2V doesn't match the input
1148    SIV (see RFC 5297 2.7).
1149    \return Other Other negative error values returned if AES or CMAC operations
1150    fail.
1151
1152    \param key Byte buffer containing the key to use.
1153    \param keySz Length of the key buffer in bytes.
1154    \param assoc Additional, authenticated associated data (AD).
1155    \param assocSz Length of AD buffer in bytes.
1156    \param nonce A number used once. Used by the underlying algorithm in the
1157    same manner as the AD.
1158    \param nonceSz Length of nonce buffer in bytes.
1159    \param in Ciphertext buffer to decrypt.
1160    \param inSz Length of ciphertext buffer.
1161    \param siv The SIV that accompanies the ciphertext (see RFC 5297 2.4).
1162    \param out Buffer to hold the decrypted plaintext. Should be the same length
1163    as the ciphertext buffer.
1164
1165    _Example_
1166    \code
1167    byte key[] = { some 32, 48, or 64 byte key };
1168    byte assoc[] = {0x01, 0x2, 0x3};
1169    byte nonce[] = {0x04, 0x5, 0x6};
1170    byte cipherText[] = {0xDE, 0xAD, 0xBE, 0xEF};
1171    byte siv[AES_BLOCK_SIZE] = { the SIV that came with the ciphertext };
1172    byte plainText[sizeof(cipherText)];
1173    if (wc_AesSivDecrypt(key, sizeof(key), assoc, sizeof(assoc), nonce,
1174        sizeof(nonce), cipherText, sizeof(cipherText), siv, plainText) != 0) {
1175        // failed to decrypt
1176    }
1177    \endcode
1178
1179    \sa wc_AesSivEncrypt
1180*/
1181
1182int wc_AesSivDecrypt(const byte* key, word32 keySz, const byte* assoc,
1183                     word32 assocSz, const byte* nonce, word32 nonceSz,
1184                     const byte* in, word32 inSz, byte* siv, byte* out);
1185
1186
1187
1188
1189
1190
1191
1192/*!
1193    \ingroup AES
1194
1195    \brief This function performs AES EAX encryption and authentication as
1196    described in "EAX: A Conventional Authenticated-Encryption Mode"
1197    (https://eprint.iacr.org/2003/069). It is a "one-shot" API that performs
1198    all encryption and authentication operations in one function call.
1199
1200    \return 0 on successful encryption.
1201    \return BAD_FUNC_ARG if input or output buffers are NULL. Also returned
1202    if the key size isn't a valid AES key size (16, 24, or 32 bytes)
1203    \return other negative error values returned if AES or CMAC operations
1204    fail.
1205
1206    \param [in] key buffer containing the key to use
1207    \param [in] keySz length of the key buffer in bytes
1208    \param[out] out buffer to hold the ciphertext. Should be the same length as
1209    the plaintext buffer
1210    \param [in] in plaintext buffer to encrypt
1211    \param [in] inSz length of plaintext buffer
1212    \param [in] nonce the cryptographic nonce to use for EAX operations
1213    \param [in] nonceSz length of nonce buffer in bytes
1214    \param[out] authTag pointer to the buffer in which to store the
1215    authentication tag
1216    \param [in] authTagSz length of the desired authentication tag
1217    \param [in] authIn pointer to the buffer containing input data to authenticate
1218    \param [in] authInSz length of the input authentication data
1219
1220    _Example_
1221    \code
1222    byte key[] = { some 32, 48, or 64 byte key };
1223    byte nonce[] = {0x04, 0x5, 0x6};
1224    byte plainText[] = {0xDE, 0xAD, 0xBE, 0xEF};
1225    byte authIn[] = {0x01, 0x2, 0x3};
1226
1227    byte cipherText[sizeof(plainText)]; // output ciphertext
1228    byte authTag[length, up to AES_BLOCK_SIZE]; // output authTag
1229
1230    if (wc_AesEaxEncrypt(key, sizeof(key),
1231                         cipherText, plainText, sizeof(plainText),
1232                         nonce, sizeof(nonce),
1233                         authTag, sizeof(authTag),
1234                         authIn, sizeof(authIn)) != 0) {
1235        // failed to encrypt
1236    }
1237
1238    \endcode
1239
1240    \sa wc_AesEaxDecryptAuth
1241
1242*/
1243WOLFSSL_API int  wc_AesEaxEncryptAuth(const byte* key, word32 keySz, byte* out,
1244                                      const byte* in, word32 inSz,
1245                                      const byte* nonce, word32 nonceSz,
1246                                      /* output computed auth tag */
1247                                      byte* authTag, word32 authTagSz,
1248                                      /* input data to authenticate */
1249                                      const byte* authIn, word32 authInSz);
1250/*!
1251    \ingroup AES
1252
1253    \brief This function performs AES EAX decryption and authentication as
1254    described in "EAX: A Conventional Authenticated-Encryption Mode"
1255    (https://eprint.iacr.org/2003/069). It is a "one-shot" API that performs
1256    all decryption and authentication operations in one function call.  If a
1257    nonzero error code is returned, the output data is undefined.
1258    However, callers must unconditionally zeroize the output buffer to guard
1259    against leakage of cleartext data.
1260
1261    \return 0 on successful decryption
1262    \return BAD_FUNC_ARG if input or output buffers are NULL. Also returned
1263    if the key size isn't a valid AES key size (16, 24, or 32 bytes)
1264    \return AES_EAX_AUTH_E If the authentication tag does not match the
1265    supplied authentication code vector \c authTag
1266    \return other negative error values returned if AES or CMAC operations
1267    fail.
1268
1269    \param [in] key byte buffer containing the key to use
1270    \param [in] keySz length of the key buffer in bytes
1271    \param[out] out buffer to hold the plaintext. Should be the same length as
1272    the input ciphertext buffer
1273    \param [in] in ciphertext buffer to decrypt
1274    \param [in] inSz length of ciphertext buffer
1275    \param [in] nonce the cryptographic nonce to use for EAX operations
1276    \param [in] nonceSz length of nonce buffer in bytes
1277    \param [in] authTag buffer that holds the authentication tag to check the
1278    authenticity of the data against
1279    \param [in] authTagSz Length of the input authentication tag
1280    \param [in] authIn pointer to the buffer containing input data to authenticate
1281    \param [in] authInSz length of the input authentication data
1282
1283    _Example_
1284    \code
1285    byte key[] = { some 32, 48, or 64 byte key };
1286    byte nonce[] = {0x04, 0x5, 0x6};
1287    byte cipherText[] = {0xDE, 0xAD, 0xBE, 0xEF};
1288    byte authIn[] = {0x01, 0x2, 0x3};
1289
1290    byte plainText[sizeof(cipherText)]; // output plaintext
1291    byte authTag[length, up to AES_BLOCK_SIZE]; // output authTag
1292
1293    if (wc_AesEaxDecrypt(key, sizeof(key),
1294                         cipherText, plainText, sizeof(plainText),
1295                         nonce, sizeof(nonce),
1296                         authTag, sizeof(authTag),
1297                         authIn, sizeof(authIn)) != 0) {
1298        // failed to encrypt
1299    }
1300
1301    \endcode
1302
1303    \sa wc_AesEaxEncryptAuth
1304
1305*/
1306WOLFSSL_API int  wc_AesEaxDecryptAuth(const byte* key, word32 keySz, byte* out,
1307                                      const byte* in, word32 inSz,
1308                                      const byte* nonce, word32 nonceSz,
1309                                      /* auth tag to verify against */
1310                                      const byte* authTag, word32 authTagSz,
1311                                      /* input data to authenticate */
1312                                      const byte* authIn, word32 authInSz);
1313
1314/*!
1315    \ingroup AES
1316    \brief This function initializes an AesEax object for use in authenticated
1317    encryption or decryption. This function must be called on an AesEax
1318    object before using it with any of the AES EAX incremental API functions.
1319    It does not need to be called if using the one-shot EAX API functions.
1320    All AesEax instances initialized with this function need to be freed with
1321    a call to wc_AesEaxFree() when done using the instance.
1322
1323    \return 0 on success
1324    \return error code on failure
1325
1326    \param eax AES EAX structure holding the context of the AEAD operation
1327    \param key 16, 24, or 32 byte secret key for encryption and decryption
1328    \param keySz length of the supplied key in bytes
1329    \param nonce the cryptographic nonce to use for EAX operations
1330    \param nonceSz length of nonce buffer in bytes
1331    \param authIn (optional) input data to add to the authentication stream
1332    This argument should be NULL if not used
1333    \param authInSz size in bytes of the input authentication data
1334
1335    _Example_
1336    \code
1337    AesEax eax;
1338    key[]   = { some 16, 24, or 32 byte length key };
1339    nonce[] = { some arbitrary length nonce };
1340    authIn[] = { some data to add to the authentication stream };
1341    plainText[] = {some plaintext data to encrypt};
1342
1343    cipherText[sizeof(plainText)]; // buffer to hold cipherText
1344    authTag[length, up to AES_BLOCK_SIZE]; // buffer to hold computed auth data
1345
1346    AesEax eax;
1347
1348    if ((ret = wc_AesEaxInit(eax,
1349                             key, keySz,
1350                             nonce, nonceSz,
1351                             authIn, authInSz)) != 0) {
1352        goto cleanup;
1353    }
1354
1355    // if we wanted to add more auth data, we could provide it at this point,
1356    // otherwise we use NULL for the authIn parameter, with authIn size of 0
1357    if ((ret = wc_AesEaxEncryptUpdate(eax,
1358                                      cipherText, plainText, sizeof(plainText),
1359                                      NULL, 0)) != 0) {
1360        goto cleanup;
1361    }
1362
1363    if ((ret = wc_AesEaxEncryptFinal(eax, authTag, sizeof(authTag))) != 0) {
1364        goto cleanup;
1365    }
1366
1367    cleanup:
1368        wc_AesEaxFree(eax);
1369    \endcode
1370
1371    \sa wc_AesEaxEncryptUpdate
1372    \sa wc_AesEaxDecryptUpdate
1373    \sa wc_AesEaxAuthDataUpdate
1374    \sa wc_AesEaxEncryptFinal
1375    \sa wc_AesEaxDecryptFinal
1376    \sa wc_AesEaxFree
1377
1378*/
1379WOLFSSL_API int  wc_AesEaxInit(AesEax* eax,
1380                               const byte* key, word32 keySz,
1381                               const byte* nonce, word32 nonceSz,
1382                               const byte* authIn, word32 authInSz);
1383
1384/*!
1385    \ingroup AES
1386    \brief This function uses AES EAX to encrypt input data, and optionally, add
1387    more input data to the authentication stream. \c eax must have been
1388    previously initialized with a call to \ref wc_AesEaxInit.
1389
1390    \return 0 on success
1391    \return error code on failure
1392
1393    \param [in] eax AES EAX structure holding the context of the AEAD operation
1394    \param[out] out output buffer holding the ciphertext
1395    \param [in] in input buffer holding the plaintext to encrypt
1396    \param [in] inSz size in bytes of the input data buffer
1397    \param [in] authIn (optional) input data to add to the authentication stream
1398    This argument should be NULL if not used
1399    \param [in] authInSz size in bytes of the input authentication data
1400
1401    _Example_
1402    \code
1403    AesEax eax;
1404    key[]   = { some 16, 24, or 32 byte length key };
1405    nonce[] = { some arbitrary length nonce };
1406    authIn[] = { some data to add to the authentication stream };
1407    plainText[] = {some plaintext data to encrypt};
1408
1409    cipherText[sizeof(plainText)]; // buffer to hold cipherText
1410    authTag[length, up to AES_BLOCK_SIZE]; // buffer to hold computed auth data
1411
1412    AesEax eax;
1413
1414    if ((ret = wc_AesEaxInit(eax,
1415                             key, keySz,
1416                             nonce, nonceSz,
1417                             authIn, authInSz)) != 0) {
1418        goto cleanup;
1419    }
1420
1421    // if we wanted to add more auth data, we could provide it at this point,
1422    // otherwise we use NULL for the authIn parameter, with authInSz of 0
1423    if ((ret = wc_AesEaxEncryptUpdate(eax,
1424                                      cipherText, plainText, sizeof(plainText),
1425                                      NULL, 0)) != 0) {
1426        goto cleanup;
1427    }
1428
1429    if ((ret = wc_AesEaxEncryptFinal(eax, authTag, sizeof(authTag))) != 0) {
1430        goto cleanup;
1431    }
1432
1433    cleanup:
1434        wc_AesEaxFree(eax);
1435    \endcode
1436
1437    \sa wc_AesEaxInit
1438    \sa wc_AesEaxDecryptUpdate
1439    \sa wc_AesEaxAuthDataUpdate
1440    \sa wc_AesEaxEncryptFinal
1441    \sa wc_AesEaxDecryptFinal
1442    \sa wc_AesEaxFree
1443
1444*/
1445WOLFSSL_API int  wc_AesEaxEncryptUpdate(AesEax* eax, byte* out,
1446                                        const byte* in, word32 inSz,
1447                                        const byte* authIn, word32 authInSz);
1448
1449/*!
1450    \ingroup AES
1451    \brief This function uses AES EAX to decrypt input data, and optionally, add
1452    more input data to the authentication stream. \c eax must have been
1453    previously initialized with a call to \ref wc_AesEaxInit.
1454
1455    \return 0 on success
1456    \return error code on failure
1457
1458    \param [in] eax AES EAX structure holding the context of the AEAD operation
1459    \param[out] out output buffer holding the decrypted plaintext
1460    \param [in] in input buffer holding the ciphertext
1461    \param [in] inSz size in bytes of the input data buffer
1462    \param [in] authIn (optional) input data to add to the authentication stream
1463    This argument should be NULL if not used
1464    \param [in] authInSz size in bytes of the input authentication data
1465
1466
1467    _Example_
1468    \code
1469    AesEax eax;
1470    key[]   = { some 16, 24, or 32 byte length key };
1471    nonce[] = { some arbitrary length nonce };
1472    authIn[] = { some data to add to the authentication stream };
1473    cipherText[] = {some encrypted data};
1474
1475    plainText[sizeof(cipherText)]; // buffer to hold decrypted data
1476    // auth tag is generated elsewhere by the encrypt AEAD operation
1477    authTag[length, up to AES_BLOCK_SIZE] = { the auth tag };
1478
1479    AesEax eax;
1480
1481    if ((ret = wc_AesEaxInit(eax,
1482                             key, keySz,
1483                             nonce, nonceSz,
1484                             authIn, authInSz)) != 0) {
1485        goto cleanup;
1486    }
1487
1488    // if we wanted to add more auth data, we could provide it at this point,
1489    // otherwise we use NULL for the authIn parameter, with authInSz of 0
1490    if ((ret = wc_AesEaxDecryptUpdate(eax,
1491                                      plainText, cipherText, sizeof(cipherText),
1492                                      NULL, 0)) != 0) {
1493        goto cleanup;
1494    }
1495
1496    if ((ret = wc_AesEaxDecryptFinal(eax, authTag, sizeof(authTag))) != 0) {
1497        goto cleanup;
1498    }
1499
1500    cleanup:
1501        wc_AesEaxFree(eax);
1502    \endcode
1503
1504    \sa wc_AesEaxInit
1505    \sa wc_AesEaxEncryptUpdate
1506    \sa wc_AesEaxAuthDataUpdate
1507    \sa wc_AesEaxEncryptFinal
1508    \sa wc_AesEaxDecryptFinal
1509    \sa wc_AesEaxFree
1510
1511*/
1512WOLFSSL_API int  wc_AesEaxDecryptUpdate(AesEax* eax, byte* out,
1513                                        const byte* in, word32 inSz,
1514                                        const byte* authIn, word32 authInSz);
1515/*!
1516    \ingroup AES
1517    \brief This function adds input data to the authentication stream.
1518    \c eax must have been previously initialized with a call to
1519    \ref wc_AesEaxInit.
1520
1521    \return 0 on success
1522    \return error code on failure
1523
1524    \param eax AES EAX structure holding the context of the AEAD operation
1525    \param authIn input data to add to the authentication stream
1526    \param authInSz size in bytes of the input authentication data
1527
1528    _Example_
1529    \code
1530    AesEax eax;
1531    key[]   = { some 16, 24, or 32 byte length key };
1532    nonce[] = { some arbitrary length nonce };
1533    authIn[] = { some data to add to the authentication stream };
1534    cipherText[] = {some encrypted data};
1535
1536    plainText[sizeof(cipherText)]; // buffer to hold decrypted data
1537    // auth tag is generated elsewhere by the encrypt AEAD operation
1538    authTag[length, up to AES_BLOCK_SIZE] = { the auth tag };
1539
1540    AesEax eax;
1541
1542    // No auth data to add here
1543    if ((ret = wc_AesEaxInit(eax,
1544                             key, keySz,
1545                             nonce, nonceSz,
1546                             NULL, 0)) != 0) {
1547        goto cleanup;
1548    }
1549
1550    // No auth data to add here, added later with wc_AesEaxAuthDataUpdate
1551    if ((ret = wc_AesEaxDecryptUpdate(eax,
1552                                      plainText, cipherText, sizeof(cipherText),
1553                                      NULL, 0)) != 0) {
1554        goto cleanup;
1555    }
1556
1557    if ((ret = wc_AesEaxAuthDataUpdate(eax, authIn, sizeof(authIn))) != 0) {
1558        goto cleanup;
1559    }
1560
1561    if ((ret = wc_AesEaxDecryptFinal(eax, authTag, sizeof(authTag))) != 0) {
1562        goto cleanup;
1563    }
1564
1565    cleanup:
1566        wc_AesEaxFree(eax);
1567    \endcode
1568
1569    \sa wc_AesEaxInit
1570    \sa wc_AesEaxEncryptUpdate
1571    \sa wc_AesEaxDecryptUpdate
1572    \sa wc_AesEaxEncryptFinal
1573    \sa wc_AesEaxDecryptFinal
1574    \sa wc_AesEaxFree
1575
1576*/
1577WOLFSSL_API int  wc_AesEaxAuthDataUpdate(AesEax* eax,
1578                                       const byte* authIn, word32 authInSz);
1579
1580/*!
1581    \ingroup AES
1582    \brief This function finalizes the encrypt AEAD operation, producing an auth
1583    tag over the current authentication stream. \c eax must have been previously
1584    initialized with a call to \ref wc_AesEaxInit. When done using the \c AesEax
1585    context structure, make sure to free it using \ref wc_AesEaxFree.
1586
1587    \return 0 on success
1588    \return error code on failure
1589
1590    \param eax AES EAX structure holding the context of the AEAD operation
1591    \param authTag[out] buffer that will hold the computed auth tag
1592    \param authTagSz size in bytes of \c authTag
1593
1594    _Example_
1595    \code
1596    AesEax eax;
1597    key[]   = { some 16, 24, or 32 byte length key };
1598    nonce[] = { some arbitrary length nonce };
1599    authIn[] = { some data to add to the authentication stream };
1600    plainText[] = {some plaintext data to encrypt};
1601
1602    cipherText[sizeof(plainText)]; // buffer to hold cipherText
1603    authTag[length, up to AES_BLOCK_SIZE]; // buffer to hold computed auth data
1604
1605    AesEax eax;
1606
1607    if ((ret = wc_AesEaxInit(eax,
1608                             key, keySz,
1609                             nonce, nonceSz,
1610                             authIn, authInSz)) != 0) {
1611        goto cleanup;
1612    }
1613
1614    // if we wanted to add more auth data, we could provide it at this point,
1615    // otherwise we use NULL for the authIn parameter, with authInSz of 0
1616    if ((ret = wc_AesEaxEncryptUpdate(eax,
1617                                      cipherText, plainText, sizeof(plainText),
1618                                      NULL, 0)) != 0) {
1619        goto cleanup;
1620    }
1621
1622    if ((ret = wc_AesEaxEncryptFinal(eax, authTag, sizeof(authTag))) != 0) {
1623        goto cleanup;
1624    }
1625
1626    cleanup:
1627        wc_AesEaxFree(eax);
1628    \endcode
1629
1630    \sa wc_AesEaxInit
1631    \sa wc_AesEaxEncryptUpdate
1632    \sa wc_AesEaxDecryptUpdate
1633    \sa wc_AesEaxAuthDataUpdate
1634    \sa wc_AesEaxDecryptFinal
1635    \sa wc_AesEaxFree
1636
1637*/
1638WOLFSSL_API int wc_AesEaxEncryptFinal(AesEax* eax,
1639                                      byte* authTag, word32 authTagSz);
1640
1641/*!
1642    \ingroup AES
1643    \brief This function finalizes the decrypt AEAD operation, finalizing the
1644    auth tag computation and checking it for validity against the user supplied
1645    tag. \c eax must have been previously initialized with a call to
1646    \ref wc_AesEaxInit. When done using the \c AesEax context structure, make
1647    sure to free it using \ref wc_AesEaxFree.
1648
1649    \return 0 if data is authenticated successfully
1650    \return AES_EAX_AUTH_E if the authentication tag does not match the
1651    supplied authentication code vector \c authIn
1652    \return other error code on failure
1653
1654    \param eax AES EAX structure holding the context of the AEAD operation
1655    \param authIn input auth tag to check computed auth tag against
1656    \param authInSz size in bytes of \c authIn
1657
1658    _Example_
1659    \code
1660    AesEax eax;
1661    key[]   = { some 16, 24, or 32 byte length key };
1662    nonce[] = { some arbitrary length nonce };
1663    authIn[] = { some data to add to the authentication stream };
1664    cipherText[] = {some encrypted data};
1665
1666    plainText[sizeof(cipherText)]; // buffer to hold decrypted data
1667    // auth tag is generated elsewhere by the encrypt AEAD operation
1668    authTag[length, up to AES_BLOCK_SIZE] = { the auth tag };
1669
1670    AesEax eax;
1671
1672    if ((ret = wc_AesEaxInit(eax,
1673                             key, keySz,
1674                             nonce, nonceSz,
1675                             authIn, authInSz)) != 0) {
1676        goto cleanup;
1677    }
1678
1679    // if we wanted to add more auth data, we could provide it at this point,
1680    // otherwise we use NULL for the authIn parameter, with authInSz of 0
1681    if ((ret = wc_AesEaxDecryptUpdate(eax,
1682                                      plainText, cipherText, sizeof(cipherText),
1683                                      NULL, 0)) != 0) {
1684        goto cleanup;
1685    }
1686
1687    if ((ret = wc_AesEaxDecryptFinal(eax, authTag, sizeof(authTag))) != 0) {
1688        goto cleanup;
1689    }
1690
1691    cleanup:
1692        wc_AesEaxFree(eax);
1693    \endcode
1694
1695    \sa wc_AesEaxInit
1696    \sa wc_AesEaxEncryptUpdate
1697    \sa wc_AesEaxDecryptUpdate
1698    \sa wc_AesEaxAuthDataUpdate
1699    \sa wc_AesEaxEncryptFinal
1700    \sa wc_AesEaxFree
1701
1702*/
1703WOLFSSL_API int wc_AesEaxDecryptFinal(AesEax* eax,
1704                                      const byte* authIn, word32 authInSz);
1705/*!
1706    \ingroup AES
1707
1708    \brief This frees up any resources, specifically keys, used by the Aes
1709    instance inside the AesEax wrapper struct. It should be called on the
1710    AesEax struct after it has been initialized with wc_AesEaxInit, and all
1711    desired EAX operations are complete.
1712
1713    \return 0 Success
1714
1715    \param eaxAES EAX instance to free
1716
1717    _Example_
1718    \code
1719    AesEax eax;
1720
1721    if(wc_AesEaxInit(eax, key, keySz, nonce, nonceSz, authIn, authInSz) != 0) {
1722        // handle errors, then free
1723        wc_AesEaxFree(&eax);
1724    }
1725    \endcode
1726
1727    \sa wc_AesEaxInit
1728    \sa wc_AesEaxEncryptUpdate
1729    \sa wc_AesEaxDecryptUpdate
1730    \sa wc_AesEaxAuthDataUpdate
1731    \sa wc_AesEaxEncryptFinal
1732    \sa wc_AesEaxDecryptFinal
1733*/
1734WOLFSSL_API int wc_AesEaxFree(AesEax* eax);
1735
1736/*!
1737    \ingroup AES
1738    \brief This function performs AES encryption using Ciphertext Stealing (CTS)
1739    mode. It is a one-shot API that handles all operations in a single call.
1740
1741    \return 0 on successful encryption.
1742    \return BAD_FUNC_ARG if input arguments are invalid.
1743    \return other negative error codes for encryption failures.
1744
1745    \param [in] key pointer to the AES key used for encryption.
1746    \param [in] keySz size of the AES key in bytes (16, 24, or 32 bytes).
1747    \param[out] out buffer to hold the encrypted ciphertext. Must be at least
1748    the size of the input.
1749    \param [in] in pointer to the plaintext input data to encrypt.
1750    \param [in] inSz size of the plaintext input data in bytes.
1751    \param [in] iv pointer to the initialization vector (IV) used for encryption.
1752    Must be 16 bytes.
1753
1754    _Example_
1755    \code
1756        byte key[16] = { 0 };
1757        byte iv[16] = { 0 };
1758        byte plaintext[] = { 0x01, 0x02, 0x03, 0x04, 0x05 };
1759        byte ciphertext[sizeof(plaintext)];
1760
1761        int ret = wc_AesCtsEncrypt(key, sizeof(key), ciphertext, plaintext,
1762            sizeof(plaintext), iv);
1763        if (ret != 0) {
1764        // handle encryption error
1765    }
1766    \endcode
1767
1768    \sa wc_AesCtsDecrypt
1769*/
1770int wc_AesCtsEncrypt(const byte* key, word32 keySz, byte* out,
1771                     const byte* in, word32 inSz,
1772                     const byte* iv);
1773
1774/*!
1775    \ingroup AES
1776    \brief This function performs AES encryption using Ciphertext Stealing (CTS)
1777     mode. It is a one-shot API that handles all operations in a single call.
1778
1779    \return 0 on successful encryption.
1780    \return BAD_FUNC_ARG if input arguments are invalid.
1781    \return other negative error codes for encryption failures.
1782
1783    \param [in] key pointer to the AES key used for encryption.
1784    \param [in] keySz size of the AES key in bytes (16, 24, or 32 bytes).
1785    \param[out] out buffer to hold the encrypted ciphertext. Must be at least
1786                 the same size as the input plaintext.
1787    \param [in] in pointer to the plaintext input data to encrypt.
1788    \param [in] inSz size of the plaintext input data in bytes.
1789    \param [in] iv pointer to the initialization vector (IV) used for encryption.
1790             Must be 16 bytes.
1791    _Example_
1792    \code
1793        byte key[16] = { 0 };
1794        byte iv[16] = { 0 };
1795        byte plaintext[] = { 0x01, 0x02, 0x03, 0x04, 0x05 };
1796        byte ciphertext[sizeof(plaintext)];
1797        int ret = wc_AesCtsEncrypt(key, sizeof(key), ciphertext, plaintext,
1798                                   sizeof(plaintext), iv);
1799        if (ret != 0) {
1800            // handle encryption error
1801        }
1802    \endcode
1803    \sa wc_AesCtsDecrypt
1804*/
1805int wc_AesCtsEncrypt(const byte* key, word32 keySz, byte* out,
1806                     const byte* in, word32 inSz,
1807                     const byte* iv);
1808
1809/*!
1810    \ingroup AES
1811    \brief This function performs AES decryption using Ciphertext Stealing (CTS) mode.
1812           It is a one-shot API that handles all operations in a single call.
1813    \return 0 on successful decryption.
1814    \return BAD_FUNC_ARG if input arguments are invalid.
1815    \return other negative error codes for decryption failures.
1816    \param [in] key pointer to the AES key used for decryption.
1817    \param [in] keySz size of the AES key in bytes (16, 24, or 32 bytes).
1818    \param[out] out buffer to hold the decrypted plaintext. Must be at least
1819                 the same size as the input ciphertext.
1820    \param [in] in pointer to the ciphertext input data to decrypt.
1821    \param [in] inSz size of the ciphertext input data in bytes.
1822    \param [in] iv pointer to the initialization vector (IV) used for decryption.
1823             Must be 16 bytes.
1824    _Example_
1825    \code
1826        byte key[16] = { 0 };
1827        byte iv[16] = { 0 };
1828        byte ciphertext[] = { 0x01, 0x02, 0x03, 0x04, 0x05 };
1829        byte plaintext[sizeof(ciphertext)];
1830        int ret = wc_AesCtsDecrypt(key, sizeof(key), plaintext, ciphertext,
1831                                   sizeof(ciphertext), iv);
1832        if (ret != 0) {
1833            // handle decryption error
1834        }
1835    \endcode
1836    \sa wc_AesCtsEncrypt
1837*/
1838int wc_AesCtsDecrypt(const byte* key, word32 keySz, byte* out,
1839                     const byte* in, word32 inSz,
1840                     const byte* iv);
1841
1842/*!
1843    \ingroup AES
1844    \brief This function performs an update step of the AES CTS encryption.
1845           It processes a chunk of plaintext and stores intermediate data.
1846    \return 0 on successful processing.
1847    \return BAD_FUNC_ARG if input arguments are invalid.
1848    \param [in] aes pointer to the Aes structure holding the context of the operation.
1849    \param[out] out buffer to hold the encrypted ciphertext. Must be large enough
1850                 to store the output from this update step.
1851    \param[out] outSz size in bytes of the output data written to the \c out buffer.
1852                    On input, it should contain the maximum number of bytes that can
1853                    be written to the \c out buffer.
1854    \param [in] in pointer to the plaintext input data to encrypt.
1855    \param [in] inSz size of the plaintext input data in bytes.
1856    _Example_
1857    \code
1858        Aes aes;
1859        wc_AesInit(&aes, NULL, INVALID_DEVID);
1860        byte key[16] = { 0 };
1861        byte iv[16] = { 0 };
1862        byte plaintext[] = { ... };
1863        byte ciphertext[sizeof(plaintext)];
1864        word32 outSz = sizeof(ciphertext);
1865        wc_AesSetKey(&aes, key, sizeof(key), iv, AES_ENCRYPTION);
1866        int ret = wc_AesCtsEncryptUpdate(&aes, ciphertext, &outSz, plaintext, sizeof(plaintext));
1867        if (ret != 0) {
1868            // handle error
1869        }
1870        wc_AesFree(&aes);
1871    \endcode
1872    \sa wc_AesCtsDecryptUpdate
1873*/
1874int wc_AesCtsEncryptUpdate(Aes* aes, byte* out, word32* outSz,
1875                           const byte* in, word32 inSz);
1876
1877/*!
1878    \ingroup AES
1879    \brief This function finalizes the AES CTS encryption operation.
1880           It processes any remaining plaintext and completes the encryption.
1881    \return 0 on successful encryption completion.
1882    \return BAD_FUNC_ARG if input arguments are invalid.
1883    \param [in] aes pointer to the Aes structure holding the context of the operation.
1884    \param[out] out buffer to hold the final encrypted ciphertext. Must be large
1885                 enough to store any remaining ciphertext from this final step.
1886    \param[out] outSz size in bytes of the output data written to the \c out buffer.
1887                     On input, it should contain the maximum number of bytes that can
1888                     be written to the \c out buffer.
1889    _Example_
1890    \code
1891        Aes aes;
1892        wc_AesInit(&aes, NULL, INVALID_DEVID);
1893        byte key[16] = { 0 };
1894        byte iv[16] = { 0 };
1895        byte plaintext[] = { ... };
1896        byte ciphertext[sizeof(plaintext)];
1897        word32 outSz = sizeof(ciphertext);
1898        wc_AesSetKey(&aes, key, sizeof(key), iv, AES_ENCRYPTION);
1899        // Perform any required update steps using wc_AesCtsEncryptUpdate
1900        int ret = wc_AesCtsEncryptFinal(&aes, ciphertext, &outSz);
1901        if (ret != 0) {
1902            // handle error
1903        }
1904        wc_AesFree(&aes);
1905    \endcode
1906    \sa wc_AesCtsDecryptFinal
1907*/
1908int wc_AesCtsEncryptFinal(Aes* aes, byte* out, word32* outSz);
1909
1910/*!
1911    \ingroup AES
1912    \brief This function performs an update step of the AES CTS decryption.
1913           It processes a chunk of ciphertext and stores intermediate data.
1914    \return 0 on successful processing.
1915    \return BAD_FUNC_ARG if input arguments are invalid.
1916    \param [in] aes pointer to the Aes structure holding the context of the operation.
1917    \param[out] out buffer to hold the decrypted plaintext. Must be large enough
1918                 to store the output from this update step.
1919    \param[out] outSz size in bytes of the output data written to the \c out buffer.
1920                     On input, it should contain the maximum number of bytes that can
1921                     be written to the \c out buffer.
1922    \param [in] in pointer to the ciphertext input data to decrypt.
1923    \param [in] inSz size of the ciphertext input data in bytes.
1924    _Example_
1925    \code
1926        Aes aes;
1927        wc_AesInit(&aes, NULL, INVALID_DEVID);
1928        byte key[16] = { 0 };
1929        byte iv[16] = { 0 };
1930        byte ciphertext[] = { ... };
1931        byte plaintext[sizeof(ciphertext)];
1932        word32 outSz = sizeof(plaintext);
1933        wc_AesSetKey(&aes, key, sizeof(key), iv, AES_DECRYPTION);
1934        int ret = wc_AesCtsDecryptUpdate(&aes, plaintext, &outSz, ciphertext, sizeof(ciphertext));
1935        if (ret != 0) {
1936            // handle error
1937        }
1938        wc_AesFree(&aes);
1939    \endcode
1940    \sa wc_AesCtsEncryptUpdate
1941*/
1942int wc_AesCtsDecryptUpdate(Aes* aes, byte* out, word32* outSz,
1943                           const byte* in, word32 inSz);
1944
1945/*!
1946    \ingroup AES
1947    \brief This function finalizes the AES CTS decryption operation.
1948           It processes any remaining ciphertext and completes the decryption.
1949    \return 0 on successful decryption completion.
1950    \return BAD_FUNC_ARG if input arguments are invalid.
1951    \param [in] aes pointer to the Aes structure holding the context of the operation.
1952    \param[out] out buffer to hold the final decrypted plaintext. Must be large
1953                 enough to store any remaining plaintext from this final step.
1954    \param[out] outSz size in bytes of the output data written to the \c out buffer.
1955                     On input, it should contain the maximum number of bytes that can
1956                     be written to the \c out buffer.
1957    _Example_
1958    \code
1959        Aes aes;
1960        wc_AesInit(&aes, NULL, INVALID_DEVID);
1961        byte key[16] = { 0 };
1962        byte iv[16] = { 0 };
1963        byte ciphertext[] = { ... };
1964        byte plaintext[sizeof(ciphertext)];
1965        word32 outSz = sizeof(plaintext);
1966        wc_AesSetKey(&aes, key, sizeof(key), iv, AES_DECRYPTION);
1967        // Perform any required update steps using wc_AesCtsDecryptUpdate
1968        int ret = wc_AesCtsDecryptFinal(&aes, plaintext, &outSz);
1969        if (ret != 0) {
1970            // handle error
1971        }
1972        wc_AesFree(&aes);
1973    \endcode
1974    \sa wc_AesCtsEncryptFinal
1975*/
1976int wc_AesCtsDecryptFinal(Aes* aes, byte* out, word32* outSz);
1977
1978
1979/*!
1980    \ingroup AES
1981    \brief This function encrypts data using AES CFB-1 mode (1-bit
1982    feedback). It processes data one bit at a time, making it suitable
1983    for bit-oriented applications.
1984
1985    \return 0 On success.
1986    \return BAD_FUNC_ARG If aes, out, or in is NULL.
1987    \return Other negative values on error.
1988
1989    \param aes pointer to the AES structure containing the key
1990    \param out pointer to the output buffer to store encrypted data
1991    \param in pointer to the input buffer containing data to encrypt
1992    (packed to left, e.g., 101 is 0x90)
1993    \param sz size of input in bits
1994
1995    _Example_
1996    \code
1997    Aes aes;
1998    byte key[16] = { }; // 128-bit key
1999    byte iv[16] = { }; // initialization vector
2000    byte plaintext[1] = { 0x90 }; // bits 101
2001    byte ciphertext[1];
2002
2003    wc_AesInit(&aes, NULL, INVALID_DEVID);
2004    wc_AesSetKey(&aes, key, 16, iv, AES_ENCRYPTION);
2005    int ret = wc_AesCfb1Encrypt(&aes, ciphertext, plaintext, 3);
2006    if (ret != 0) {
2007        // encryption failed
2008    }
2009    wc_AesFree(&aes);
2010    \endcode
2011
2012    \sa wc_AesCfb1Decrypt
2013    \sa wc_AesCfb8Encrypt
2014*/
2015int wc_AesCfb1Encrypt(Aes* aes, byte* out, const byte* in, word32 sz);
2016
2017/*!
2018    \ingroup AES
2019    \brief This function encrypts data using AES CFB-8 mode (8-bit
2020    feedback). It processes data one byte at a time, making it suitable
2021    for byte-oriented stream encryption.
2022
2023    \return 0 On success.
2024    \return BAD_FUNC_ARG If aes, out, or in is NULL.
2025    \return Other negative values on error.
2026
2027    \param aes pointer to the AES structure containing the key
2028    \param out pointer to the output buffer to store encrypted data
2029    \param in pointer to the input buffer containing data to encrypt
2030    \param sz size of input in bytes
2031
2032    _Example_
2033    \code
2034    Aes aes;
2035    byte key[16] = { }; // 128-bit key
2036    byte iv[16] = { }; // initialization vector
2037    byte plaintext[10] = { }; // data to encrypt
2038    byte ciphertext[10];
2039
2040    wc_AesInit(&aes, NULL, INVALID_DEVID);
2041    wc_AesSetKey(&aes, key, 16, iv, AES_ENCRYPTION);
2042    int ret = wc_AesCfb8Encrypt(&aes, ciphertext, plaintext, 10);
2043    if (ret != 0) {
2044        // encryption failed
2045    }
2046    wc_AesFree(&aes);
2047    \endcode
2048
2049    \sa wc_AesCfb8Decrypt
2050    \sa wc_AesCfb1Encrypt
2051*/
2052int wc_AesCfb8Encrypt(Aes* aes, byte* out, const byte* in, word32 sz);
2053
2054/*!
2055    \ingroup AES
2056    \brief This function decrypts data using AES CFB-1 mode (1-bit
2057    feedback). It processes data one bit at a time, making it suitable
2058    for bit-oriented applications.
2059
2060    \return 0 On success.
2061    \return BAD_FUNC_ARG If aes, out, or in is NULL.
2062    \return Other negative values on error.
2063
2064    \param aes pointer to the AES structure containing the key
2065    \param out pointer to the output buffer to store decrypted data
2066    \param in pointer to the input buffer containing data to decrypt
2067    \param sz size of input in bits
2068
2069    _Example_
2070    \code
2071    Aes aes;
2072    byte key[16] = { }; // 128-bit key
2073    byte iv[16] = { }; // initialization vector
2074    byte ciphertext[1] = { }; // encrypted bits
2075    byte plaintext[1];
2076
2077    wc_AesInit(&aes, NULL, INVALID_DEVID);
2078    wc_AesSetKey(&aes, key, 16, iv, AES_ENCRYPTION);
2079    int ret = wc_AesCfb1Decrypt(&aes, plaintext, ciphertext, 3);
2080    if (ret != 0) {
2081        // decryption failed
2082    }
2083    wc_AesFree(&aes);
2084    \endcode
2085
2086    \sa wc_AesCfb1Encrypt
2087    \sa wc_AesCfb8Decrypt
2088*/
2089int wc_AesCfb1Decrypt(Aes* aes, byte* out, const byte* in, word32 sz);
2090
2091/*!
2092    \ingroup AES
2093    \brief This function decrypts data using AES CFB-8 mode (8-bit
2094    feedback). It processes data one byte at a time, making it suitable
2095    for byte-oriented stream decryption.
2096
2097    \return 0 On success.
2098    \return BAD_FUNC_ARG If aes, out, or in is NULL.
2099    \return Other negative values on error.
2100
2101    \param aes pointer to the AES structure containing the key
2102    \param out pointer to the output buffer to store decrypted data
2103    \param in pointer to the input buffer containing data to decrypt
2104    \param sz size of input in bytes
2105
2106    _Example_
2107    \code
2108    Aes aes;
2109    byte key[16] = { }; // 128-bit key
2110    byte iv[16] = { }; // initialization vector
2111    byte ciphertext[10] = { }; // encrypted data
2112    byte plaintext[10];
2113
2114    wc_AesInit(&aes, NULL, INVALID_DEVID);
2115    wc_AesSetKey(&aes, key, 16, iv, AES_ENCRYPTION);
2116    int ret = wc_AesCfb8Decrypt(&aes, plaintext, ciphertext, 10);
2117    if (ret != 0) {
2118        // decryption failed
2119    }
2120    wc_AesFree(&aes);
2121    \endcode
2122
2123    \sa wc_AesCfb8Encrypt
2124    \sa wc_AesCfb1Decrypt
2125*/
2126int wc_AesCfb8Decrypt(Aes* aes, byte* out, const byte* in, word32 sz);
2127
2128/*!
2129    \ingroup AES
2130    \brief This function encrypts data using AES OFB mode (Output
2131    Feedback). OFB mode turns a block cipher into a stream cipher by
2132    encrypting the IV and XORing with plaintext.
2133
2134    \return 0 On success.
2135    \return BAD_FUNC_ARG If aes, out, or in is NULL.
2136    \return Other negative values on error.
2137
2138    \param aes pointer to the AES structure containing the key
2139    \param out pointer to the output buffer to store encrypted data
2140    \param in pointer to the input buffer containing data to encrypt
2141    \param sz size of input in bytes
2142
2143    _Example_
2144    \code
2145    Aes aes;
2146    byte key[16] = { }; // 128-bit key
2147    byte iv[16] = { }; // initialization vector
2148    byte plaintext[100] = { }; // data to encrypt
2149    byte ciphertext[100];
2150
2151    wc_AesInit(&aes, NULL, INVALID_DEVID);
2152    wc_AesSetKey(&aes, key, 16, iv, AES_ENCRYPTION);
2153    int ret = wc_AesOfbEncrypt(&aes, ciphertext, plaintext, 100);
2154    if (ret != 0) {
2155        // encryption failed
2156    }
2157    wc_AesFree(&aes);
2158    \endcode
2159
2160    \sa wc_AesOfbDecrypt
2161    \sa wc_AesSetKey
2162*/
2163int wc_AesOfbEncrypt(Aes* aes, byte* out, const byte* in, word32 sz);
2164
2165/*!
2166    \ingroup AES
2167    \brief This function decrypts data using AES OFB mode (Output
2168    Feedback). In OFB mode, encryption and decryption are the same
2169    operation.
2170
2171    \return 0 On success.
2172    \return BAD_FUNC_ARG If aes, out, or in is NULL.
2173    \return Other negative values on error.
2174
2175    \param aes pointer to the AES structure containing the key
2176    \param out pointer to the output buffer to store decrypted data
2177    \param in pointer to the input buffer containing data to decrypt
2178    \param sz size of input in bytes
2179
2180    _Example_
2181    \code
2182    Aes aes;
2183    byte key[16] = { }; // 128-bit key
2184    byte iv[16] = { }; // initialization vector
2185    byte ciphertext[100] = { }; // encrypted data
2186    byte plaintext[100];
2187
2188    wc_AesInit(&aes, NULL, INVALID_DEVID);
2189    wc_AesSetKey(&aes, key, 16, iv, AES_ENCRYPTION);
2190    int ret = wc_AesOfbDecrypt(&aes, plaintext, ciphertext, 100);
2191    if (ret != 0) {
2192        // decryption failed
2193    }
2194    wc_AesFree(&aes);
2195    \endcode
2196
2197    \sa wc_AesOfbEncrypt
2198    \sa wc_AesSetKey
2199*/
2200int wc_AesOfbDecrypt(Aes* aes, byte* out, const byte* in, word32 sz);
2201
2202/*!
2203    \ingroup AES
2204    \brief This function encrypts data using AES ECB mode (Electronic
2205    Codebook). Warning: ECB mode is not recommended for most use cases
2206    as it does not provide semantic security. Each block is encrypted
2207    independently.
2208
2209    \return 0 On success.
2210    \return BAD_FUNC_ARG If aes, out, or in is NULL.
2211    \return Other negative values on error.
2212
2213    \param aes pointer to the AES structure containing the key
2214    \param out pointer to the output buffer to store encrypted data
2215    \param in pointer to the input buffer containing data to encrypt
2216    \param sz size of input in bytes (must be multiple of AES_BLOCK_SIZE)
2217
2218    _Example_
2219    \code
2220    Aes aes;
2221    byte key[16] = { }; // 128-bit key
2222    byte plaintext[32] = { }; // data to encrypt
2223    byte ciphertext[32];
2224
2225    wc_AesInit(&aes, NULL, INVALID_DEVID);
2226    wc_AesSetKey(&aes, key, 16, NULL, AES_ENCRYPTION);
2227    int ret = wc_AesEcbEncrypt(&aes, ciphertext, plaintext, 32);
2228    if (ret != 0) {
2229        // encryption failed
2230    }
2231    wc_AesFree(&aes);
2232    \endcode
2233
2234    \sa wc_AesEcbDecrypt
2235    \sa wc_AesSetKey
2236*/
2237int wc_AesEcbEncrypt(Aes* aes, byte* out, const byte* in, word32 sz);
2238
2239/*!
2240    \ingroup AES
2241    \brief This function decrypts data using AES ECB mode (Electronic
2242    Codebook). Warning: ECB mode is not recommended for most use cases
2243    as it does not provide semantic security. Each block is decrypted
2244    independently.
2245
2246    \return 0 On success.
2247    \return BAD_FUNC_ARG If aes, out, or in is NULL.
2248    \return Other negative values on error.
2249
2250    \param aes pointer to the AES structure containing the key
2251    \param out pointer to the output buffer to store decrypted data
2252    \param in pointer to the input buffer containing data to decrypt
2253    \param sz size of input in bytes (must be multiple of AES_BLOCK_SIZE)
2254
2255    _Example_
2256    \code
2257    Aes aes;
2258    byte key[16] = { }; // 128-bit key
2259    byte ciphertext[32] = { }; // encrypted data
2260    byte plaintext[32];
2261
2262    wc_AesInit(&aes, NULL, INVALID_DEVID);
2263    wc_AesSetKey(&aes, key, 16, NULL, AES_DECRYPTION);
2264    int ret = wc_AesEcbDecrypt(&aes, plaintext, ciphertext, 32);
2265    if (ret != 0) {
2266        // decryption failed
2267    }
2268    wc_AesFree(&aes);
2269    \endcode
2270
2271    \sa wc_AesEcbEncrypt
2272    \sa wc_AesSetKey
2273*/
2274int wc_AesEcbDecrypt(Aes* aes, byte* out, const byte* in, word32 sz);
2275
2276/*!
2277    \ingroup AES
2278    \brief This function sets the key and IV for AES CTR mode. It
2279    initializes the AES structure for counter mode encryption or
2280    decryption.
2281
2282    \return 0 On success.
2283    \return BAD_FUNC_ARG If aes, key, or iv is NULL, or if key length
2284    is invalid.
2285
2286    \param aes pointer to the AES structure to initialize
2287    \param key pointer to the key buffer (16, 24, or 32 bytes)
2288    \param len length of the key in bytes
2289    \param iv pointer to the initialization vector (16 bytes)
2290    \param dir cipher direction (always use AES_ENCRYPTION for CTR mode)
2291
2292    _Example_
2293    \code
2294    Aes aes;
2295    byte key[16] = { }; // 128-bit key
2296    byte iv[16] = { }; // initialization vector
2297
2298    wc_AesInit(&aes, NULL, INVALID_DEVID);
2299    int ret = wc_AesCtrSetKey(&aes, key, 16, iv, AES_ENCRYPTION);
2300    if (ret != 0) {
2301        // failed to set key
2302    }
2303    wc_AesFree(&aes);
2304    \endcode
2305
2306    \sa wc_AesCtrEncrypt
2307    \sa wc_AesSetKey
2308*/
2309int wc_AesCtrSetKey(Aes* aes, const byte* key, word32 len, const byte* iv,
2310                    int dir);
2311
2312/*!
2313    \ingroup AES
2314    \brief This function sets the key for AES GCM with an extended key
2315    update parameter. It allows for key updates in certain hardware
2316    implementations.
2317
2318    \note This function is currently only available when building with
2319    Xilinx hardware acceleration. It requires one of the following build
2320    options: WOLFSSL_XILINX_CRYPT (for Xilinx SecureIP integration) or
2321    WOLFSSL_AFALG_XILINX_AES (for Xilinx AF_ALG support). This API may
2322    be exposed for additional build configurations in the future.
2323
2324    \return 0 On success.
2325    \return BAD_FUNC_ARG If aes or key is NULL, or if key length is invalid.
2326
2327    \param aes pointer to the AES structure to initialize
2328    \param key pointer to the key buffer (16, 24, or 32 bytes)
2329    \param len length of the key in bytes
2330    \param kup key update parameter for hardware implementations
2331
2332    _Example_
2333    \code
2334    Aes aes;
2335    byte key[16] = { }; // 128-bit key
2336
2337    wc_AesInit(&aes, NULL, INVALID_DEVID);
2338    int ret = wc_AesGcmSetKey_ex(&aes, key, 16, 0);
2339    if (ret != 0) {
2340        // failed to set key
2341    }
2342    wc_AesFree(&aes);
2343    \endcode
2344
2345    \sa wc_AesGcmSetKey
2346    \sa wc_AesGcmInit
2347*/
2348int wc_AesGcmSetKey_ex(Aes* aes, const byte* key, word32 len, word32 kup);
2349
2350/*!
2351    \ingroup AES
2352    \brief This function initializes an AES GCM cipher with key and IV.
2353    It can be called with NULL key to only set the IV, or with NULL IV
2354    to only set the key.
2355
2356    \return 0 On success.
2357    \return BAD_FUNC_ARG If aes is NULL, or if parameters are invalid.
2358    \return MEMORY_E If dynamic memory allocation fails.
2359
2360    \param aes pointer to the AES structure to initialize
2361    \param key pointer to the key buffer, or NULL to skip key setting
2362    \param len length of the key in bytes
2363    \param iv pointer to the IV/nonce buffer, or NULL to skip IV setting
2364    \param ivSz length of the IV/nonce in bytes
2365
2366    _Example_
2367    \code
2368    Aes aes;
2369    byte key[16] = { }; // 128-bit key
2370    byte iv[12] = { }; // 96-bit nonce
2371
2372    wc_AesInit(&aes, NULL, INVALID_DEVID);
2373    int ret = wc_AesGcmInit(&aes, key, 16, iv, 12);
2374    if (ret != 0) {
2375        // failed to initialize
2376    }
2377    wc_AesFree(&aes);
2378    \endcode
2379
2380    \sa wc_AesGcmSetKey
2381    \sa wc_AesGcmEncrypt
2382*/
2383int wc_AesGcmInit(Aes* aes, const byte* key, word32 len, const byte* iv,
2384                  word32 ivSz);
2385
2386/*!
2387    \ingroup AES
2388    \brief This function initializes an AES GCM cipher for encryption.
2389    It is a convenience wrapper around wc_AesGcmInit for encryption
2390    operations.
2391
2392    \return 0 On success.
2393    \return BAD_FUNC_ARG If aes is NULL, or if parameters are invalid.
2394
2395    \param aes pointer to the AES structure to initialize
2396    \param key pointer to the key buffer, or NULL to skip key setting
2397    \param len length of the key in bytes
2398    \param iv pointer to the IV/nonce buffer, or NULL to skip IV setting
2399    \param ivSz length of the IV/nonce in bytes
2400
2401    _Example_
2402    \code
2403    Aes aes;
2404    byte key[16] = { }; // 128-bit key
2405    byte iv[12] = { }; // 96-bit nonce
2406
2407    wc_AesInit(&aes, NULL, INVALID_DEVID);
2408    int ret = wc_AesGcmEncryptInit(&aes, key, 16, iv, 12);
2409    if (ret != 0) {
2410        // failed to initialize
2411    }
2412    wc_AesFree(&aes);
2413    \endcode
2414
2415    \sa wc_AesGcmInit
2416    \sa wc_AesGcmEncryptUpdate
2417*/
2418int wc_AesGcmEncryptInit(Aes* aes, const byte* key, word32 len,
2419                         const byte* iv, word32 ivSz);
2420
2421/*!
2422    \ingroup AES
2423    \brief This function initializes an AES GCM cipher for encryption and
2424    outputs the IV. This is useful when part of the IV is generated
2425    internally. Must call wc_AesGcmSetIV() before this function to set
2426    the fixed part of the IV.
2427
2428    \return 0 On success.
2429    \return BAD_FUNC_ARG If aes, ivOut is NULL, or if ivOutSz doesn't
2430    match the cached nonce size.
2431
2432    \param aes pointer to the AES structure to initialize
2433    \param key pointer to the key buffer, or NULL to skip key setting
2434    \param len length of the key in bytes
2435    \param ivOut pointer to buffer to receive the complete IV
2436    \param ivOutSz length of the IV output buffer in bytes
2437
2438    _Example_
2439    \code
2440    Aes aes;
2441    byte key[16] = { }; // 128-bit key
2442    byte ivFixed[4] = { }; // fixed part of IV
2443    byte ivOut[12];
2444    WC_RNG rng;
2445
2446    wc_InitRng(&rng);
2447    wc_AesInit(&aes, NULL, INVALID_DEVID);
2448    wc_AesGcmSetIV(&aes, 12, ivFixed, 4, &rng);
2449    int ret = wc_AesGcmEncryptInit_ex(&aes, key, 16, ivOut, 12);
2450    if (ret != 0) {
2451        // failed to initialize
2452    }
2453    wc_AesFree(&aes);
2454    wc_FreeRng(&rng);
2455    \endcode
2456
2457    \sa wc_AesGcmSetIV
2458    \sa wc_AesGcmEncryptUpdate
2459*/
2460int wc_AesGcmEncryptInit_ex(Aes* aes, const byte* key, word32 len,
2461                            byte* ivOut, word32 ivOutSz);
2462
2463/*!
2464    \ingroup AES
2465    \brief This function performs an update step of AES GCM encryption.
2466    It processes plaintext and/or additional authentication data (AAD)
2467    in a streaming fashion.
2468
2469    All the AAD must be passed to update before the plaintext.
2470    The last part of AAD can be passed with the first part of plaintext.
2471
2472    Must set key and IV before calling this function.
2473    Must call wc_AesGcmInit() before calling this function.
2474
2475    \return 0 On success.
2476    \return BAD_FUNC_ARG If aes is NULL, or a length is non-zero but
2477    buffer is NULL.
2478
2479    \param aes pointer to the AES structure
2480    \param out pointer to buffer to store ciphertext (can be NULL if sz=0)
2481    \param in pointer to plaintext to encrypt (can be NULL if sz=0)
2482    \param sz length of plaintext in bytes
2483    \param authIn pointer to additional authentication data (can be NULL)
2484    \param authInSz length of AAD in bytes
2485
2486    _Example_
2487    \code
2488    Aes aes;
2489    byte key[16] = { }; // 128-bit key
2490    byte iv[12] = { }; // nonce
2491    byte plaintext[100] = { }; // data
2492    byte ciphertext[100];
2493    byte aad[20] = { }; // additional data
2494
2495    wc_AesInit(&aes, NULL, INVALID_DEVID);
2496    wc_AesGcmInit(&aes, key, 16, iv, 12);
2497    int ret = wc_AesGcmEncryptUpdate(&aes, ciphertext, plaintext, 100,
2498                                     aad, 20);
2499    if (ret != 0) {
2500        // encryption failed
2501    }
2502    wc_AesFree(&aes);
2503    \endcode
2504
2505    \sa wc_AesGcmInit
2506    \sa wc_AesGcmEncryptInit
2507    \sa wc_AesGcmEncryptFinal
2508*/
2509int wc_AesGcmEncryptUpdate(Aes* aes, byte* out, const byte* in, word32 sz,
2510                           const byte* authIn, word32 authInSz);
2511
2512/*!
2513    \ingroup AES
2514    \brief This function finalizes AES GCM encryption and generates the
2515    authentication tag. This must be called after all data has been
2516    processed with wc_AesGcmEncryptUpdate.
2517
2518    \return 0 On success.
2519    \return BAD_FUNC_ARG If aes or authTag is NULL, or if authTagSz is
2520    invalid.
2521
2522    \param aes pointer to the AES structure
2523    \param authTag pointer to buffer to store the authentication tag
2524    \param authTagSz length of the authentication tag in bytes (typically
2525    12 or 16)
2526
2527    _Example_
2528    \code
2529    Aes aes;
2530    byte key[16] = { }; // 128-bit key
2531    byte iv[12] = { }; // nonce
2532    byte plaintext[100] = { }; // data
2533    byte ciphertext[100];
2534    byte authTag[16];
2535
2536    wc_AesInit(&aes, NULL, INVALID_DEVID);
2537    wc_AesGcmEncryptInit(&aes, key, 16, iv, 12);
2538    wc_AesGcmEncryptUpdate(&aes, ciphertext, plaintext, 100, NULL, 0);
2539    int ret = wc_AesGcmEncryptFinal(&aes, authTag, 16);
2540    if (ret != 0) {
2541        // failed to generate tag
2542    }
2543    wc_AesFree(&aes);
2544    \endcode
2545
2546    \sa wc_AesGcmEncryptUpdate
2547    \sa wc_AesGcmDecryptFinal
2548*/
2549int wc_AesGcmEncryptFinal(Aes* aes, byte* authTag, word32 authTagSz);
2550
2551/*!
2552    \ingroup AES
2553    \brief This function initializes an AES GCM cipher for decryption.
2554    It is a convenience wrapper around wc_AesGcmInit for decryption
2555    operations.
2556
2557    \return 0 On success.
2558    \return BAD_FUNC_ARG If aes is NULL, or if parameters are invalid.
2559
2560    \param aes pointer to the AES structure to initialize
2561    \param key pointer to the key buffer, or NULL to skip key setting
2562    \param len length of the key in bytes
2563    \param iv pointer to the IV/nonce buffer, or NULL to skip IV setting
2564    \param ivSz length of the IV/nonce in bytes
2565
2566    _Example_
2567    \code
2568    Aes aes;
2569    byte key[16] = { }; // 128-bit key
2570    byte iv[12] = { }; // 96-bit nonce
2571
2572    wc_AesInit(&aes, NULL, INVALID_DEVID);
2573    int ret = wc_AesGcmDecryptInit(&aes, key, 16, iv, 12);
2574    if (ret != 0) {
2575        // failed to initialize
2576    }
2577    wc_AesFree(&aes);
2578    \endcode
2579
2580    \sa wc_AesGcmInit
2581    \sa wc_AesGcmDecryptUpdate
2582*/
2583int wc_AesGcmDecryptInit(Aes* aes, const byte* key, word32 len,
2584                         const byte* iv, word32 ivSz);
2585
2586/*!
2587    \ingroup AES
2588    \brief This function performs an update step of AES GCM decryption.
2589    It processes ciphertext and/or additional authentication data (AAD)
2590    in a streaming fashion.
2591
2592    All the AAD must be passed to update before the ciphertext.
2593    The last part of AAD can be passed with the first part of ciphertext.
2594
2595    Must set key and IV before calling this function.
2596    Must call wc_AesGcmInit() before calling this function.
2597
2598    \return 0 On success.
2599    \return BAD_FUNC_ARG If aes is NULL, or a length is non-zero but
2600    buffer is NULL.
2601
2602    \param aes pointer to the AES structure
2603    \param out pointer to buffer to store plaintext (can be NULL if sz=0)
2604    \param in pointer to ciphertext to decrypt (can be NULL if sz=0)
2605    \param sz length of ciphertext in bytes
2606    \param authIn pointer to additional authentication data (can be NULL)
2607    \param authInSz length of AAD in bytes
2608
2609    _Example_
2610    \code
2611    Aes aes;
2612    byte key[16] = { }; // 128-bit key
2613    byte iv[12] = { }; // nonce
2614    byte ciphertext[100] = { }; // encrypted data
2615    byte plaintext[100];
2616    byte aad[20] = { }; // additional data
2617
2618    wc_AesInit(&aes, NULL, INVALID_DEVID);
2619    wc_AesGcmInit(&aes, key, 16, iv, 12);
2620    int ret = wc_AesGcmDecryptUpdate(&aes, plaintext, ciphertext, 100,
2621                                     aad, 20);
2622    if (ret != 0) {
2623        // decryption failed
2624    }
2625    wc_AesFree(&aes);
2626    \endcode
2627
2628    \sa wc_AesGcmInit
2629    \sa wc_AesGcmDecryptInit
2630    \sa wc_AesGcmDecryptFinal
2631*/
2632int wc_AesGcmDecryptUpdate(Aes* aes, byte* out, const byte* in, word32 sz,
2633                           const byte* authIn, word32 authInSz);
2634
2635/*!
2636    \ingroup AES
2637    \brief This function finalizes AES GCM decryption and verifies the
2638    authentication tag. This must be called after all data has been
2639    processed with wc_AesGcmDecryptUpdate.
2640
2641    \return 0 On success.
2642    \return AES_GCM_AUTH_E If authentication tag verification fails.
2643    \return BAD_FUNC_ARG If aes or authTag is NULL, or if authTagSz is
2644    invalid.
2645
2646    \param aes pointer to the AES structure
2647    \param authTag pointer to the authentication tag to verify
2648    \param authTagSz length of the authentication tag in bytes
2649
2650    _Example_
2651    \code
2652    Aes aes;
2653    byte key[16] = { }; // 128-bit key
2654    byte iv[12] = { }; // nonce
2655    byte ciphertext[100] = { }; // encrypted data
2656    byte plaintext[100];
2657    byte authTag[16] = { }; // received tag
2658
2659    wc_AesInit(&aes, NULL, INVALID_DEVID);
2660    wc_AesGcmDecryptInit(&aes, key, 16, iv, 12);
2661    wc_AesGcmDecryptUpdate(&aes, plaintext, ciphertext, 100, NULL, 0);
2662    int ret = wc_AesGcmDecryptFinal(&aes, authTag, 16);
2663    if (ret != 0) {
2664        // authentication failed
2665    }
2666    wc_AesFree(&aes);
2667    \endcode
2668
2669    \sa wc_AesGcmDecryptUpdate
2670    \sa wc_AesGcmEncryptFinal
2671*/
2672int wc_AesGcmDecryptFinal(Aes* aes, const byte* authTag, word32 authTagSz);
2673
2674/*!
2675    \ingroup AES
2676    \brief This function sets an external IV for AES GCM. This allows
2677    using an IV that was generated externally or received from another
2678    source.
2679
2680    \return 0 On success.
2681    \return BAD_FUNC_ARG If aes or iv is NULL, or if ivSz is invalid.
2682
2683    \param aes pointer to the AES structure
2684    \param iv pointer to the IV/nonce buffer
2685    \param ivSz length of the IV/nonce in bytes
2686
2687    _Example_
2688    \code
2689    Aes aes;
2690    byte key[16] = { }; // 128-bit key
2691    byte iv[12] = { }; // external nonce
2692
2693    wc_AesInit(&aes, NULL, INVALID_DEVID);
2694    wc_AesGcmSetKey(&aes, key, 16);
2695    int ret = wc_AesGcmSetExtIV(&aes, iv, 12);
2696    if (ret != 0) {
2697        // failed to set IV
2698    }
2699    wc_AesFree(&aes);
2700    \endcode
2701
2702    \sa wc_AesGcmSetIV
2703    \sa wc_AesGcmInit
2704*/
2705int wc_AesGcmSetExtIV(Aes* aes, const byte* iv, word32 ivSz);
2706
2707/*!
2708    \ingroup AES
2709    \brief This function sets the IV for AES GCM with optional random
2710    generation. It can generate part of the IV using an RNG, which is
2711    useful for ensuring IV uniqueness.
2712
2713    \return 0 On success.
2714    \return BAD_FUNC_ARG If aes is NULL, or if parameters are invalid.
2715    \return Other negative values on RNG or other errors.
2716
2717    \param aes pointer to the AES structure
2718    \param ivSz total length of the IV/nonce in bytes
2719    \param ivFixed pointer to the fixed part of the IV (can be NULL)
2720    \param ivFixedSz length of the fixed part in bytes
2721    \param rng pointer to initialized RNG for generating random part
2722    (can be NULL if ivFixedSz equals ivSz)
2723
2724    _Example_
2725    \code
2726    Aes aes;
2727    byte key[16] = { }; // 128-bit key
2728    byte ivFixed[4] = { }; // fixed part
2729    WC_RNG rng;
2730
2731    wc_InitRng(&rng);
2732    wc_AesInit(&aes, NULL, INVALID_DEVID);
2733    wc_AesGcmSetKey(&aes, key, 16);
2734    int ret = wc_AesGcmSetIV(&aes, 12, ivFixed, 4, &rng);
2735    if (ret != 0) {
2736        // failed to set IV
2737    }
2738    wc_AesFree(&aes);
2739    wc_FreeRng(&rng);
2740    \endcode
2741
2742    \sa wc_AesGcmSetExtIV
2743    \sa wc_AesGcmEncryptInit_ex
2744*/
2745int wc_AesGcmSetIV(Aes* aes, word32 ivSz, const byte* ivFixed,
2746                   word32 ivFixedSz, WC_RNG* rng);
2747
2748/*!
2749    \ingroup AES
2750    \brief This function performs AES GCM encryption with extended
2751    parameters, including IV output. This is a one-shot encryption
2752    function that outputs the generated IV.
2753
2754    \return 0 On success.
2755    \return BAD_FUNC_ARG If parameters are invalid.
2756    \return Other negative values on error.
2757
2758    \param aes pointer to the AES structure
2759    \param out pointer to buffer to store ciphertext
2760    \param in pointer to plaintext to encrypt
2761    \param sz length of plaintext in bytes
2762    \param ivOut pointer to buffer to receive the IV
2763    \param ivOutSz length of the IV output buffer in bytes
2764    \param authTag pointer to buffer to store authentication tag
2765    \param authTagSz length of authentication tag in bytes
2766    \param authIn pointer to additional authentication data
2767    \param authInSz length of AAD in bytes
2768
2769    _Example_
2770    \code
2771    Aes aes;
2772    byte key[16] = { }; // 128-bit key
2773    byte ivFixed[4] = { }; // fixed part
2774    byte ivOut[12];
2775    byte plaintext[100] = { }; // data
2776    byte ciphertext[100];
2777    byte authTag[16];
2778    WC_RNG rng;
2779
2780    wc_InitRng(&rng);
2781    wc_AesInit(&aes, NULL, INVALID_DEVID);
2782    wc_AesGcmSetKey(&aes, key, 16);
2783    wc_AesGcmSetIV(&aes, 12, ivFixed, 4, &rng);
2784    int ret = wc_AesGcmEncrypt_ex(&aes, ciphertext, plaintext, 100,
2785                                  ivOut, 12, authTag, 16, NULL, 0);
2786    if (ret != 0) {
2787        // encryption failed
2788    }
2789    wc_AesFree(&aes);
2790    wc_FreeRng(&rng);
2791    \endcode
2792
2793    \sa wc_AesGcmEncrypt
2794    \sa wc_AesGcmSetIV
2795*/
2796int wc_AesGcmEncrypt_ex(Aes* aes, byte* out, const byte* in, word32 sz,
2797                        byte* ivOut, word32 ivOutSz, byte* authTag,
2798                        word32 authTagSz, const byte* authIn,
2799                        word32 authInSz);
2800
2801/*!
2802    \ingroup AES
2803    \brief This function performs GMAC (Galois Message Authentication Code)
2804    generation. GMAC is essentially AES-GCM with no plaintext, used for
2805    authentication only.
2806
2807    \return 0 On success.
2808    \return BAD_FUNC_ARG If parameters are invalid.
2809    \return Other negative values on error.
2810
2811    \param key pointer to the key buffer
2812    \param keySz length of the key in bytes (16, 24, or 32)
2813    \param iv pointer to the IV/nonce buffer
2814    \param ivSz length of the IV/nonce in bytes
2815    \param authIn pointer to data to authenticate
2816    \param authInSz length of data to authenticate in bytes
2817    \param authTag pointer to buffer to store authentication tag
2818    \param authTagSz length of authentication tag in bytes
2819    \param rng pointer to initialized RNG (can be NULL if IV is complete)
2820
2821    _Example_
2822    \code
2823    byte key[16] = { }; // 128-bit key
2824    byte iv[12] = { }; // nonce
2825    byte data[100] = { }; // data to authenticate
2826    byte authTag[16];
2827
2828    int ret = wc_Gmac(key, 16, iv, 12, data, 100, authTag, 16, NULL);
2829    if (ret != 0) {
2830        // GMAC generation failed
2831    }
2832    \endcode
2833
2834    \sa wc_GmacVerify
2835    \sa wc_AesGcmEncrypt
2836*/
2837int wc_Gmac(const byte* key, word32 keySz, byte* iv, word32 ivSz,
2838            const byte* authIn, word32 authInSz, byte* authTag,
2839            word32 authTagSz, WC_RNG* rng);
2840
2841/*!
2842    \ingroup AES
2843    \brief This function verifies a GMAC (Galois Message Authentication
2844    Code). It computes the GMAC and compares it with the provided tag.
2845
2846    \return 0 On successful verification.
2847    \return AES_GCM_AUTH_E If authentication tag verification fails.
2848    \return BAD_FUNC_ARG If parameters are invalid.
2849    \return Other negative values on error.
2850
2851    \param key pointer to the key buffer
2852    \param keySz length of the key in bytes (16, 24, or 32)
2853    \param iv pointer to the IV/nonce buffer
2854    \param ivSz length of the IV/nonce in bytes
2855    \param authIn pointer to data to authenticate
2856    \param authInSz length of data to authenticate in bytes
2857    \param authTag pointer to the authentication tag to verify
2858    \param authTagSz length of authentication tag in bytes
2859
2860    _Example_
2861    \code
2862    byte key[16] = { }; // 128-bit key
2863    byte iv[12] = { }; // nonce
2864    byte data[100] = { }; // data to authenticate
2865    byte authTag[16] = { }; // received tag
2866
2867    int ret = wc_GmacVerify(key, 16, iv, 12, data, 100, authTag, 16);
2868    if (ret != 0) {
2869        // GMAC verification failed
2870    }
2871    \endcode
2872
2873    \sa wc_Gmac
2874    \sa wc_AesGcmDecrypt
2875*/
2876int wc_GmacVerify(const byte* key, word32 keySz, const byte* iv,
2877                  word32 ivSz, const byte* authIn, word32 authInSz,
2878                  const byte* authTag, word32 authTagSz);
2879
2880/*!
2881    \ingroup AES
2882    \brief This function sets the nonce for AES CCM mode. The nonce must
2883    be set before encryption or decryption operations.
2884
2885    \return 0 On success.
2886    \return BAD_FUNC_ARG If aes or nonce is NULL, or if nonceSz is invalid.
2887
2888    \param aes pointer to the AES structure
2889    \param nonce pointer to the nonce buffer
2890    \param nonceSz length of the nonce in bytes (7-13 bytes for CCM)
2891
2892    _Example_
2893    \code
2894    Aes aes;
2895    byte key[16] = { }; // 128-bit key
2896    byte nonce[12] = { }; // nonce
2897
2898    wc_AesInit(&aes, NULL, INVALID_DEVID);
2899    wc_AesCcmSetKey(&aes, key, 16);
2900    int ret = wc_AesCcmSetNonce(&aes, nonce, 12);
2901    if (ret != 0) {
2902        // failed to set nonce
2903    }
2904    wc_AesFree(&aes);
2905    \endcode
2906
2907    \sa wc_AesCcmEncrypt
2908    \sa wc_AesCcmSetKey
2909*/
2910int wc_AesCcmSetNonce(Aes* aes, const byte* nonce, word32 nonceSz);
2911
2912/*!
2913    \ingroup AES
2914    \brief This function performs AES CCM encryption with extended
2915    parameters, including nonce output. This is useful when part of the
2916    nonce is generated internally.
2917
2918    \return 0 On success.
2919    \return BAD_FUNC_ARG If parameters are invalid.
2920    \return Other negative values on error.
2921
2922    \param aes pointer to the AES structure
2923    \param out pointer to buffer to store ciphertext
2924    \param in pointer to plaintext to encrypt
2925    \param sz length of plaintext in bytes
2926    \param ivOut pointer to buffer to receive the nonce
2927    \param ivOutSz length of the nonce output buffer in bytes
2928    \param authTag pointer to buffer to store authentication tag
2929    \param authTagSz length of authentication tag in bytes
2930    \param authIn pointer to additional authentication data
2931    \param authInSz length of AAD in bytes
2932
2933    _Example_
2934    \code
2935    Aes aes;
2936    byte key[16] = { }; // 128-bit key
2937    byte nonce[12];
2938    byte plaintext[100] = { }; // data
2939    byte ciphertext[100];
2940    byte authTag[16];
2941
2942    wc_AesInit(&aes, NULL, INVALID_DEVID);
2943    wc_AesCcmSetKey(&aes, key, 16);
2944    int ret = wc_AesCcmEncrypt_ex(&aes, ciphertext, plaintext, 100,
2945                                  nonce, 12, authTag, 16, NULL, 0);
2946    if (ret != 0) {
2947        // encryption failed
2948    }
2949    wc_AesFree(&aes);
2950    \endcode
2951
2952    \sa wc_AesCcmEncrypt
2953    \sa wc_AesCcmSetNonce
2954*/
2955int wc_AesCcmEncrypt_ex(Aes* aes, byte* out, const byte* in, word32 sz,
2956                        byte* ivOut, word32 ivOutSz, byte* authTag,
2957                        word32 authTagSz, const byte* authIn,
2958                        word32 authInSz);
2959
2960/*!
2961    \ingroup AES
2962    \brief This function wraps a key using AES Key Wrap algorithm
2963    (RFC 3394). This is commonly used to securely transport
2964    cryptographic keys.
2965
2966    \return Length of wrapped key in bytes on success.
2967    \return BAD_FUNC_ARG If parameters are invalid.
2968    \return Other negative values on error.
2969
2970    \param key pointer to the key-encryption key
2971    \param keySz length of the key-encryption key in bytes
2972    \param in pointer to the key to wrap
2973    \param inSz length of the key to wrap in bytes
2974    \param out pointer to buffer to store wrapped key
2975    \param outSz size of output buffer in bytes
2976    \param iv pointer to IV (typically NULL to use default)
2977
2978    _Example_
2979    \code
2980    byte kek[16] = { }; // key-encryption key
2981    byte keyToWrap[16] = { }; // key to wrap
2982    byte wrappedKey[24];
2983
2984    int wrappedLen = wc_AesKeyWrap(kek, 16, keyToWrap, 16, wrappedKey,
2985                                   24, NULL);
2986    if (wrappedLen <= 0) {
2987        // key wrap failed
2988    }
2989    \endcode
2990
2991    \sa wc_AesKeyUnWrap
2992    \sa wc_AesKeyWrap_ex
2993*/
2994int wc_AesKeyWrap(const byte* key, word32 keySz, const byte* in,
2995                  word32 inSz, byte* out, word32 outSz, const byte* iv);
2996
2997/*!
2998    \ingroup AES
2999    \brief This function wraps a key using AES Key Wrap algorithm with
3000    an initialized AES structure. This allows reusing the same AES
3001    structure for multiple wrap operations.
3002
3003    \return Length of wrapped key in bytes on success.
3004    \return BAD_FUNC_ARG If parameters are invalid.
3005    \return Other negative values on error.
3006
3007    \param aes pointer to initialized AES structure
3008    \param in pointer to the key to wrap
3009    \param inSz length of the key to wrap in bytes
3010    \param out pointer to buffer to store wrapped key
3011    \param outSz size of output buffer in bytes
3012    \param iv pointer to IV (typically NULL to use default)
3013
3014    _Example_
3015    \code
3016    Aes aes;
3017    byte kek[16] = { }; // key-encryption key
3018    byte keyToWrap[16] = { }; // key to wrap
3019    byte wrappedKey[24];
3020
3021    wc_AesInit(&aes, NULL, INVALID_DEVID);
3022    wc_AesSetKey(&aes, kek, 16, NULL, AES_ENCRYPTION);
3023    int wrappedLen = wc_AesKeyWrap_ex(&aes, keyToWrap, 16, wrappedKey,
3024                                      24, NULL);
3025    if (wrappedLen <= 0) {
3026        // key wrap failed
3027    }
3028    wc_AesFree(&aes);
3029    \endcode
3030
3031    \sa wc_AesKeyWrap
3032    \sa wc_AesKeyUnWrap_ex
3033*/
3034int wc_AesKeyWrap_ex(Aes *aes, const byte* in, word32 inSz, byte* out,
3035                     word32 outSz, const byte* iv);
3036
3037/*!
3038    \ingroup AES
3039    \brief This function unwraps a key using AES Key Unwrap algorithm
3040    (RFC 3394). This is used to securely receive cryptographic keys
3041    that were wrapped.
3042
3043    \return Length of unwrapped key in bytes on success.
3044    \return BAD_FUNC_ARG If parameters are invalid.
3045    \return Other negative values on error.
3046
3047    \param key pointer to the key-encryption key
3048    \param keySz length of the key-encryption key in bytes
3049    \param in pointer to the wrapped key
3050    \param inSz length of the wrapped key in bytes
3051    \param out pointer to buffer to store unwrapped key
3052    \param outSz size of output buffer in bytes
3053    \param iv pointer to IV (typically NULL to use default)
3054
3055    _Example_
3056    \code
3057    byte kek[16] = { }; // key-encryption key
3058    byte wrappedKey[24] = { }; // wrapped key
3059    byte unwrappedKey[16];
3060
3061    int unwrappedLen = wc_AesKeyUnWrap(kek, 16, wrappedKey, 24,
3062                                       unwrappedKey, 16, NULL);
3063    if (unwrappedLen <= 0) {
3064        // key unwrap failed
3065    }
3066    \endcode
3067
3068    \sa wc_AesKeyWrap
3069    \sa wc_AesKeyUnWrap_ex
3070*/
3071int wc_AesKeyUnWrap(const byte* key, word32 keySz, const byte* in,
3072                    word32 inSz, byte* out, word32 outSz, const byte* iv);
3073
3074/*!
3075    \ingroup AES
3076    \brief This function unwraps a key using AES Key Unwrap algorithm
3077    with an initialized AES structure. This allows reusing the same AES
3078    structure for multiple unwrap operations.
3079
3080    \return Length of unwrapped key in bytes on success.
3081    \return BAD_FUNC_ARG If parameters are invalid.
3082    \return Other negative values on error.
3083
3084    \param aes pointer to initialized AES structure
3085    \param in pointer to the wrapped key
3086    \param inSz length of the wrapped key in bytes
3087    \param out pointer to buffer to store unwrapped key
3088    \param outSz size of output buffer in bytes
3089    \param iv pointer to IV (typically NULL to use default)
3090
3091    _Example_
3092    \code
3093    Aes aes;
3094    byte kek[16] = { }; // key-encryption key
3095    byte wrappedKey[24] = { }; // wrapped key
3096    byte unwrappedKey[16];
3097
3098    wc_AesInit(&aes, NULL, INVALID_DEVID);
3099    wc_AesSetKey(&aes, kek, 16, NULL, AES_ENCRYPTION);
3100    int unwrappedLen = wc_AesKeyUnWrap_ex(&aes, wrappedKey, 24,
3101                                          unwrappedKey, 16, NULL);
3102    if (unwrappedLen <= 0) {
3103        // key unwrap failed
3104    }
3105    wc_AesFree(&aes);
3106    \endcode
3107
3108    \sa wc_AesKeyUnWrap
3109    \sa wc_AesKeyWrap_ex
3110*/
3111int wc_AesKeyUnWrap_ex(Aes *aes, const byte* in, word32 inSz, byte* out,
3112                       word32 outSz, const byte* iv);
3113
3114/*!
3115    \ingroup AES
3116    \brief This function encrypts multiple consecutive sectors using AES XTS
3117    mode. It processes multiple sectors in sequence, automatically
3118    incrementing the sector number for each sector.
3119
3120    \return 0 On success.
3121    \return BAD_FUNC_ARG If aes, out, or in is NULL, or if sectorSz is 0,
3122    or if sz is less than AES_BLOCK_SIZE.
3123    \return Other negative values on error.
3124
3125    \param aes pointer to the XtsAes structure
3126    \param out pointer to buffer to store encrypted data
3127    \param in pointer to plaintext data to encrypt
3128    \param sz total length of data in bytes
3129    \param sector starting sector number for the tweak
3130    \param sectorSz size of each sector in bytes
3131
3132    _Example_
3133    \code
3134    XtsAes aes;
3135    byte key[32] = { }; // 256-bit key
3136    byte plaintext[1024] = { }; // data
3137    byte ciphertext[1024];
3138
3139    wc_AesXtsSetKey(&aes, key, 32, AES_ENCRYPTION, NULL, INVALID_DEVID);
3140    int ret = wc_AesXtsEncryptConsecutiveSectors(&aes, ciphertext,
3141                                                 plaintext, 1024, 0, 512);
3142    if (ret != 0) {
3143        // encryption failed
3144    }
3145    wc_AesXtsFree(&aes);
3146    \endcode
3147
3148    \sa wc_AesXtsDecryptConsecutiveSectors
3149    \sa wc_AesXtsEncryptSector
3150*/
3151int wc_AesXtsEncryptConsecutiveSectors(XtsAes* aes, byte* out,
3152                                       const byte* in, word32 sz,
3153                                       word64 sector, word32 sectorSz);
3154
3155/*!
3156    \ingroup AES
3157    \brief This function decrypts multiple consecutive sectors using AES XTS
3158    mode. It processes multiple sectors in sequence, automatically
3159    incrementing the sector number for each sector.
3160
3161    \return 0 On success.
3162    \return BAD_FUNC_ARG If aes, out, or in is NULL, or if sectorSz is 0,
3163    or if sz is less than AES_BLOCK_SIZE.
3164    \return Other negative values on error.
3165
3166    \param aes pointer to the XtsAes structure
3167    \param out pointer to buffer to store decrypted data
3168    \param in pointer to ciphertext data to decrypt
3169    \param sz total length of data in bytes
3170    \param sector starting sector number for the tweak
3171    \param sectorSz size of each sector in bytes
3172
3173    _Example_
3174    \code
3175    XtsAes aes;
3176    byte key[32] = { }; // 256-bit key
3177    byte ciphertext[1024] = { }; // encrypted data
3178    byte plaintext[1024];
3179
3180    wc_AesXtsSetKey(&aes, key, 32, AES_DECRYPTION, NULL, INVALID_DEVID);
3181    int ret = wc_AesXtsDecryptConsecutiveSectors(&aes, plaintext,
3182                                                 ciphertext, 1024, 0, 512);
3183    if (ret != 0) {
3184        // decryption failed
3185    }
3186    wc_AesXtsFree(&aes);
3187    \endcode
3188
3189    \sa wc_AesXtsEncryptConsecutiveSectors
3190    \sa wc_AesXtsDecryptSector
3191*/
3192int wc_AesXtsDecryptConsecutiveSectors(XtsAes* aes, byte* out,
3193                                       const byte* in, word32 sz,
3194                                       word64 sector, word32 sectorSz);
3195
3196/*!
3197    \ingroup AES
3198    \brief This function initializes streaming AES XTS encryption. It sets
3199    up the context for processing data in multiple update calls.
3200
3201    \return 0 On success.
3202    \return BAD_FUNC_ARG If parameters are invalid.
3203
3204    \param aes pointer to the XtsAes structure
3205    \param i pointer to the tweak/IV buffer
3206    \param iSz length of the tweak/IV in bytes
3207    \param stream pointer to XtsAesStreamData structure for streaming state
3208
3209    _Example_
3210    \code
3211    XtsAes aes;
3212    struct XtsAesStreamData stream;
3213    byte key[32] = { }; // 256-bit key
3214    byte tweak[16] = { }; // tweak value
3215
3216    wc_AesXtsSetKey(&aes, key, 32, AES_ENCRYPTION, NULL, INVALID_DEVID);
3217    int ret = wc_AesXtsEncryptInit(&aes, tweak, 16, &stream);
3218    if (ret != 0) {
3219        // initialization failed
3220    }
3221    wc_AesXtsFree(&aes);
3222    \endcode
3223
3224    \sa wc_AesXtsEncryptUpdate
3225    \sa wc_AesXtsEncryptFinal
3226*/
3227int wc_AesXtsEncryptInit(XtsAes* aes, const byte* i, word32 iSz,
3228                         struct XtsAesStreamData *stream);
3229
3230/*!
3231    \ingroup AES
3232    \brief This function initializes streaming AES XTS decryption. It sets
3233    up the context for processing data in multiple update calls.
3234
3235    \return 0 On success.
3236    \return BAD_FUNC_ARG If parameters are invalid.
3237
3238    \param aes pointer to the XtsAes structure
3239    \param i pointer to the tweak/IV buffer
3240    \param iSz length of the tweak/IV in bytes
3241    \param stream pointer to XtsAesStreamData structure for streaming state
3242
3243    _Example_
3244    \code
3245    XtsAes aes;
3246    struct XtsAesStreamData stream;
3247    byte key[32] = { }; // 256-bit key
3248    byte tweak[16] = { }; // tweak value
3249
3250    wc_AesXtsSetKey(&aes, key, 32, AES_DECRYPTION, NULL, INVALID_DEVID);
3251    int ret = wc_AesXtsDecryptInit(&aes, tweak, 16, &stream);
3252    if (ret != 0) {
3253        // initialization failed
3254    }
3255    wc_AesXtsFree(&aes);
3256    \endcode
3257
3258    \sa wc_AesXtsDecryptUpdate
3259    \sa wc_AesXtsDecryptFinal
3260*/
3261int wc_AesXtsDecryptInit(XtsAes* aes, const byte* i, word32 iSz,
3262                         struct XtsAesStreamData *stream);
3263
3264/*!
3265    \ingroup AES
3266    \brief This function performs an update step of streaming AES XTS
3267    encryption. It processes a chunk of data and can be called multiple
3268    times.
3269
3270    \return 0 On success.
3271    \return BAD_FUNC_ARG If parameters are invalid.
3272
3273    \param aes pointer to the XtsAes structure
3274    \param out pointer to buffer to store encrypted data
3275    \param in pointer to plaintext data to encrypt
3276    \param sz length of data in bytes
3277    \param stream pointer to XtsAesStreamData structure for streaming state
3278
3279    _Example_
3280    \code
3281    XtsAes aes;
3282    struct XtsAesStreamData stream;
3283    byte key[32] = { }; // 256-bit key
3284    byte tweak[16] = { }; // tweak value
3285    byte plaintext[100] = { }; // data
3286    byte ciphertext[100];
3287
3288    wc_AesXtsSetKey(&aes, key, 32, AES_ENCRYPTION, NULL, INVALID_DEVID);
3289    wc_AesXtsEncryptInit(&aes, tweak, 16, &stream);
3290    int ret = wc_AesXtsEncryptUpdate(&aes, ciphertext, plaintext, 100,
3291                                     &stream);
3292    if (ret != 0) {
3293        // encryption failed
3294    }
3295    wc_AesXtsFree(&aes);
3296    \endcode
3297
3298    \sa wc_AesXtsEncryptInit
3299    \sa wc_AesXtsEncryptFinal
3300*/
3301int wc_AesXtsEncryptUpdate(XtsAes* aes, byte* out, const byte* in,
3302                           word32 sz, struct XtsAesStreamData *stream);
3303
3304/*!
3305    \ingroup AES
3306    \brief This function performs an update step of streaming AES XTS
3307    decryption. It processes a chunk of data and can be called multiple
3308    times.
3309
3310    \return 0 On success.
3311    \return BAD_FUNC_ARG If parameters are invalid.
3312
3313    \param aes pointer to the XtsAes structure
3314    \param out pointer to buffer to store decrypted data
3315    \param in pointer to ciphertext data to decrypt
3316    \param sz length of data in bytes
3317    \param stream pointer to XtsAesStreamData structure for streaming state
3318
3319    _Example_
3320    \code
3321    XtsAes aes;
3322    struct XtsAesStreamData stream;
3323    byte key[32] = { }; // 256-bit key
3324    byte tweak[16] = { }; // tweak value
3325    byte ciphertext[100] = { }; // encrypted data
3326    byte plaintext[100];
3327
3328    wc_AesXtsSetKey(&aes, key, 32, AES_DECRYPTION, NULL, INVALID_DEVID);
3329    wc_AesXtsDecryptInit(&aes, tweak, 16, &stream);
3330    int ret = wc_AesXtsDecryptUpdate(&aes, plaintext, ciphertext, 100,
3331                                     &stream);
3332    if (ret != 0) {
3333        // decryption failed
3334    }
3335    wc_AesXtsFree(&aes);
3336    \endcode
3337
3338    \sa wc_AesXtsDecryptInit
3339    \sa wc_AesXtsDecryptFinal
3340*/
3341int wc_AesXtsDecryptUpdate(XtsAes* aes, byte* out, const byte* in,
3342                           word32 sz, struct XtsAesStreamData *stream);
3343
3344/*!
3345    \ingroup AES
3346    \brief This function finalizes streaming AES XTS encryption. It
3347    processes any remaining data and completes the encryption operation.
3348
3349    \return 0 On success.
3350    \return BAD_FUNC_ARG If parameters are invalid.
3351
3352    \param aes pointer to the XtsAes structure
3353    \param out pointer to buffer to store final encrypted data
3354    \param in pointer to final plaintext data to encrypt
3355    \param sz length of final data in bytes
3356    \param stream pointer to XtsAesStreamData structure for streaming state
3357
3358    _Example_
3359    \code
3360    XtsAes aes;
3361    struct XtsAesStreamData stream;
3362    byte key[32] = { }; // 256-bit key
3363    byte tweak[16] = { }; // tweak value
3364    byte plaintext[50] = { }; // final data
3365    byte ciphertext[50];
3366
3367    wc_AesXtsSetKey(&aes, key, 32, AES_ENCRYPTION, NULL, INVALID_DEVID);
3368    wc_AesXtsEncryptInit(&aes, tweak, 16, &stream);
3369    // ... update calls ...
3370    int ret = wc_AesXtsEncryptFinal(&aes, ciphertext, plaintext, 50,
3371                                    &stream);
3372    if (ret != 0) {
3373        // finalization failed
3374    }
3375    wc_AesXtsFree(&aes);
3376    \endcode
3377
3378    \sa wc_AesXtsEncryptUpdate
3379    \sa wc_AesXtsEncryptInit
3380*/
3381int wc_AesXtsEncryptFinal(XtsAes* aes, byte* out, const byte* in,
3382                          word32 sz, struct XtsAesStreamData *stream);
3383
3384/*!
3385    \ingroup AES
3386    \brief This function finalizes streaming AES XTS decryption. It
3387    processes any remaining data and completes the decryption operation.
3388
3389    \return 0 On success.
3390    \return BAD_FUNC_ARG If parameters are invalid.
3391
3392    \param aes pointer to the XtsAes structure
3393    \param out pointer to buffer to store final decrypted data
3394    \param in pointer to final ciphertext data to decrypt
3395    \param sz length of final data in bytes
3396    \param stream pointer to XtsAesStreamData structure for streaming state
3397
3398    _Example_
3399    \code
3400    XtsAes aes;
3401    struct XtsAesStreamData stream;
3402    byte key[32] = { }; // 256-bit key
3403    byte tweak[16] = { }; // tweak value
3404    byte ciphertext[50] = { }; // final encrypted data
3405    byte plaintext[50];
3406
3407    wc_AesXtsSetKey(&aes, key, 32, AES_DECRYPTION, NULL, INVALID_DEVID);
3408    wc_AesXtsDecryptInit(&aes, tweak, 16, &stream);
3409    // ... update calls ...
3410    int ret = wc_AesXtsDecryptFinal(&aes, plaintext, ciphertext, 50,
3411                                    &stream);
3412    if (ret != 0) {
3413        // finalization failed
3414    }
3415    wc_AesXtsFree(&aes);
3416    \endcode
3417
3418    \sa wc_AesXtsDecryptUpdate
3419    \sa wc_AesXtsDecryptInit
3420*/
3421int wc_AesXtsDecryptFinal(XtsAes* aes, byte* out, const byte* in,
3422                          word32 sz, struct XtsAesStreamData *stream);
3423
3424/*!
3425    \ingroup AES
3426    \brief This function retrieves the key size from an initialized AES
3427    structure. It returns the size of the key currently set in the AES
3428    object.
3429
3430    \return 0 On success.
3431    \return BAD_FUNC_ARG If aes or keySize is NULL.
3432
3433    \param aes pointer to the AES structure
3434    \param keySize pointer to word32 to store the key size in bytes
3435
3436    _Example_
3437    \code
3438    Aes aes;
3439    byte key[16] = { }; // 128-bit key
3440    word32 keySize;
3441
3442    wc_AesInit(&aes, NULL, INVALID_DEVID);
3443    wc_AesSetKey(&aes, key, 16, NULL, AES_ENCRYPTION);
3444    int ret = wc_AesGetKeySize(&aes, &keySize);
3445    if (ret == 0) {
3446        // keySize now contains 16
3447    }
3448    wc_AesFree(&aes);
3449    \endcode
3450
3451    \sa wc_AesSetKey
3452    \sa wc_AesInit
3453*/
3454int wc_AesGetKeySize(Aes* aes, word32* keySize);
3455
3456/*!
3457    \ingroup AES
3458    \brief This function initializes an AES structure with an ID. This is
3459    useful for tracking or identifying specific AES instances in
3460    applications that manage multiple AES contexts.
3461
3462    \note This API is only available when WOLF_PRIVATE_KEY_ID is defined,
3463    which is set for PKCS11 support.
3464
3465    \return 0 On success.
3466    \return BAD_FUNC_ARG If aes or id is NULL, or if len is invalid.
3467
3468    \param aes pointer to the AES structure to initialize
3469    \param id pointer to the ID buffer
3470    \param len length of the ID in bytes
3471    \param heap pointer to heap hint for memory allocation (can be NULL)
3472    \param devId device ID for hardware acceleration (use INVALID_DEVID
3473    for software)
3474
3475    _Example_
3476    \code
3477    Aes aes;
3478    byte id[8] = { }; // unique identifier
3479
3480    int ret = wc_AesInit_Id(&aes, id, 8, NULL, INVALID_DEVID);
3481    if (ret != 0) {
3482        // initialization failed
3483    }
3484    wc_AesFree(&aes);
3485    \endcode
3486
3487    \sa wc_AesInit
3488    \sa wc_AesInit_Label
3489*/
3490int wc_AesInit_Id(Aes* aes, unsigned char* id, int len, void* heap,
3491                  int devId);
3492
3493/*!
3494    \ingroup AES
3495    \brief This function initializes an AES structure with a label string.
3496    This is useful for tracking or identifying specific AES instances with
3497    human-readable names.
3498
3499    \note This API is only available when WOLF_PRIVATE_KEY_ID is defined,
3500    which is set for PKCS11 support.
3501
3502    \return 0 On success.
3503    \return BAD_FUNC_ARG If aes or label is NULL.
3504
3505    \param aes pointer to the AES structure to initialize
3506    \param label pointer to the null-terminated label string
3507    \param heap pointer to heap hint for memory allocation (can be NULL)
3508    \param devId device ID for hardware acceleration (use INVALID_DEVID
3509    for software)
3510
3511    _Example_
3512    \code
3513    Aes aes;
3514
3515    int ret = wc_AesInit_Label(&aes, "MyAESContext", NULL, INVALID_DEVID);
3516    if (ret != 0) {
3517        // initialization failed
3518    }
3519    wc_AesFree(&aes);
3520    \endcode
3521
3522    \sa wc_AesInit
3523    \sa wc_AesInit_Id
3524*/
3525int wc_AesInit_Label(Aes* aes, const char* label, void* heap, int devId);
3526
3527/*!
3528    \ingroup AES
3529    \brief This function allocates and initializes a new AES structure.
3530    It returns a pointer to the allocated structure, which must be freed
3531    with wc_AesDelete when no longer needed. These New/Delete functions
3532    are exposed to support allocation of the structure using dynamic memory
3533    to provide better ABI compatibility.
3534
3535    \note This API is only available when WC_NO_CONSTRUCTORS is not defined.
3536    WC_NO_CONSTRUCTORS is automatically defined when WOLFSSL_NO_MALLOC is
3537    defined.
3538
3539    \return Pointer to allocated Aes structure on success.
3540    \return NULL on allocation failure.
3541
3542    \param heap pointer to heap hint for memory allocation (can be NULL)
3543    \param devId device ID for hardware acceleration (use INVALID_DEVID
3544    for software)
3545    \param result_code pointer to int to store result code (can be NULL)
3546
3547    _Example_
3548    \code
3549    int result;
3550    Aes* aes = wc_AesNew(NULL, INVALID_DEVID, &result);
3551    if (aes == NULL || result != 0) {
3552        // allocation or initialization failed
3553    }
3554    // use aes...
3555    wc_AesDelete(aes, &aes);
3556    \endcode
3557
3558    \sa wc_AesDelete
3559    \sa wc_AesInit
3560*/
3561Aes* wc_AesNew(void* heap, int devId, int *result_code);
3562
3563/*!
3564    \ingroup AES
3565    \brief This function frees an AES structure that was allocated with
3566    wc_AesNew. It also sets the pointer to NULL to prevent use-after-free.
3567    These New/Delete functions are exposed to support allocation of the
3568    structure using dynamic memory to provide better ABI compatibility.
3569
3570    \note This API is only available when WC_NO_CONSTRUCTORS is not defined.
3571    WC_NO_CONSTRUCTORS is automatically defined when WOLFSSL_NO_MALLOC is
3572    defined.
3573
3574    \return 0 On success.
3575    \return BAD_FUNC_ARG If aes or aes_p is NULL.
3576
3577    \param aes pointer to the AES structure to free
3578    \param aes_p pointer to the AES pointer (will be set to NULL)
3579
3580    _Example_
3581    \code
3582    Aes* aes = wc_AesNew(NULL, INVALID_DEVID, NULL);
3583    if (aes != NULL) {
3584        // use aes...
3585        int ret = wc_AesDelete(aes, &aes);
3586        // aes is now NULL
3587    }
3588    \endcode
3589
3590    \sa wc_AesNew
3591    \sa wc_AesFree
3592*/
3593int wc_AesDelete(Aes* aes, Aes** aes_p);
3594
3595/*!
3596    \ingroup AES
3597    \brief This function performs AES-SIV (Synthetic IV) encryption with
3598    extended parameters. AES-SIV provides nonce-misuse resistance and
3599    deterministic authenticated encryption.
3600
3601    \return 0 On success.
3602    \return BAD_FUNC_ARG If parameters are invalid.
3603    \return Other negative values on error.
3604
3605    \param key pointer to the key buffer (32, 48, or 64 bytes for SIV)
3606    \param keySz length of the key in bytes
3607    \param assoc pointer to array of associated data structures
3608    \param numAssoc number of associated data items
3609    \param nonce pointer to the nonce buffer (can be NULL)
3610    \param nonceSz length of the nonce in bytes
3611    \param in pointer to plaintext to encrypt
3612    \param inSz length of plaintext in bytes
3613    \param siv pointer to buffer to store the SIV (16 bytes)
3614    \param out pointer to buffer to store ciphertext
3615
3616    _Example_
3617    \code
3618    byte key[32] = { }; // 256-bit key for AES-128-SIV
3619    AesSivAssoc assoc[1];
3620    byte aad[20] = { }; // associated data
3621    byte nonce[12] = { }; // nonce
3622    byte plaintext[100] = { }; // data
3623    byte siv[16];
3624    byte ciphertext[100];
3625
3626    assoc[0].data = aad;
3627    assoc[0].sz = 20;
3628
3629    int ret = wc_AesSivEncrypt_ex(key, 32, assoc, 1, nonce, 12,
3630                                  plaintext, 100, siv, ciphertext);
3631    if (ret != 0) {
3632        // encryption failed
3633    }
3634    \endcode
3635
3636    \sa wc_AesSivDecrypt_ex
3637    \sa wc_AesSivEncrypt
3638*/
3639int wc_AesSivEncrypt_ex(const byte* key, word32 keySz,
3640                        const AesSivAssoc* assoc, word32 numAssoc,
3641                        const byte* nonce, word32 nonceSz, const byte* in,
3642                        word32 inSz, byte* siv, byte* out);
3643
3644/*!
3645    \ingroup AES
3646    \brief This function performs AES-SIV (Synthetic IV) decryption with
3647    extended parameters. It verifies the SIV and decrypts the ciphertext.
3648
3649    \return 0 On successful decryption and verification.
3650    \return AES_SIV_AUTH_E If SIV verification fails.
3651    \return BAD_FUNC_ARG If parameters are invalid.
3652    \return Other negative values on error.
3653
3654    \param key pointer to the key buffer (32, 48, or 64 bytes for SIV)
3655    \param keySz length of the key in bytes
3656    \param assoc pointer to array of associated data structures
3657    \param numAssoc number of associated data items
3658    \param nonce pointer to the nonce buffer (can be NULL)
3659    \param nonceSz length of the nonce in bytes
3660    \param in pointer to ciphertext to decrypt
3661    \param inSz length of ciphertext in bytes
3662    \param siv pointer to the SIV to verify (16 bytes)
3663    \param out pointer to buffer to store plaintext
3664
3665    _Example_
3666    \code
3667    byte key[32] = { }; // 256-bit key for AES-128-SIV
3668    AesSivAssoc assoc[1];
3669    byte aad[20] = { }; // associated data
3670    byte nonce[12] = { }; // nonce
3671    byte ciphertext[100] = { }; // encrypted data
3672    byte siv[16] = { }; // received SIV
3673    byte plaintext[100];
3674
3675    assoc[0].data = aad;
3676    assoc[0].sz = 20;
3677
3678    int ret = wc_AesSivDecrypt_ex(key, 32, assoc, 1, nonce, 12,
3679                                  ciphertext, 100, siv, plaintext);
3680    if (ret != 0) {
3681        // decryption or verification failed
3682    }
3683    \endcode
3684
3685    \sa wc_AesSivEncrypt_ex
3686    \sa wc_AesSivDecrypt
3687*/
3688int wc_AesSivDecrypt_ex(const byte* key, word32 keySz,
3689                        const AesSivAssoc* assoc, word32 numAssoc,
3690                        const byte* nonce, word32 nonceSz, const byte* in,
3691                        word32 inSz, byte* siv, byte* out);