cjson
fuzzing
inputs
test1 test10 test11 test2 test3 test3.bu test3.uf test3.uu test4 test5 test6 test7 test8 test9library_config
cJSONConfig.cmake.in cJSONConfigVersion.cmake.in libcjson.pc.in libcjson_utils.pc.in uninstall.cmaketests
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.expectedjson-patch-tests
.editorconfig .gitignore .npmignore README.md cjson-utils-tests.json package.json spec_tests.json tests.jsonunity
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.pydocs
ThrowTheSwitchCodingStandard.md UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf UnityAssertionsReference.md UnityConfigurationGuide.md UnityGettingStartedGuide.md UnityHelperScriptsGuide.md license.txtexamples
unity_config.hcurl
.github
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.yamlworkflows
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.ymlCMake
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.cmakedocs
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.mdexamples
.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.cinternals
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.mdlibcurl
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.incinclude
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.hlib
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.hvauth
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.hvquic
curl_ngtcp2.c curl_ngtcp2.h curl_quiche.c curl_quiche.h vquic-tls.c vquic-tls.h vquic.c vquic.h vquic_int.hvtls
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.hm4
.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.m4projects
OS400
.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.hWindows
tmpl
.gitattributes README.txt curl-all.sln curl.sln curl.vcxproj curl.vcxproj.filters libcurl.sln libcurl.vcxproj libcurl.vcxproj.filtersvms
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.hscripts
.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 wcurlsrc
.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.htests
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.prmdata
.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 test999http
testenv
__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.pylibtest
.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.hserver
.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.ctunit
.gitignore CMakeLists.txt Makefile.am Makefile.inc README.md tool1394.c tool1604.c tool1621.c tool1622.c tool1623.c tool1720.cunit
.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.cexamples
.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.luainiparser
example
iniexample.c iniwrite.c parse.c twisted-errors.ini twisted-genhuge.py twisted-ofkey.ini twisted-ofval.ini twisted.initest
CMakeLists.txt test_dictionary.c test_iniparser.c unity-config.yml unity_config.hjinjac
libjinjac
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.htest
.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.jinjalibev
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-h1luajit
doc
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.htmldynasm
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.luasrc
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.cjit
.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.luawolfssl
.github
workflows
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.ymlIDE
ARDUINO
Arduino_README_prepend.md README.md include.am keywords.txt library.properties.template wolfssl-arduino.cpp wolfssl-arduino.sh wolfssl.hECLIPSE
Espressif
ESP-IDF
examples
template
CMakeLists.txt Makefile README.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp8266wolfssl_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.vgdbprojwolfssl_client
CMakeLists.txt Makefile README.md README_server_sm.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp32c2 sdkconfig.defaults.esp8266 wolfssl_client_ESP8266.vgdbprojwolfssl_server
CMakeLists.txt Makefile README.md README_server_sm.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp32c2 sdkconfig.defaults.esp8266 wolfssl_server_ESP8266.vgdbprojwolfssl_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.vgdbprojGCC-ARM
Makefile Makefile.bench Makefile.client Makefile.common Makefile.server Makefile.static Makefile.test README.md include.am linker.ld linker_fips.ldIAR-EWARM
embOS
SAMV71_XULT
embOS_SAMV71_XULT_user_settings
user_settings.h user_settings_simple_example.h user_settings_verbose_example.hembOS_wolfcrypt_benchmark_SAMV71_XULT
README_wolfcrypt_benchmark wolfcrypt_benchmark.ewd wolfcrypt_benchmark.ewpINTIME-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.vcxprojMQX
Makefile README-jp.md README.md client-tls.c include.am server-tls.c user_config.h user_settings.hMSVS-2019-AZSPHERE
wolfssl_new_azsphere
.gitignore CMakeLists.txt CMakeSettings.json app_manifest.json applibs_versions.h launch.vs.json main.cNETOS
Makefile.wolfcrypt.inc README.md include.am user_settings.h user_settings.h-cert2425 user_settings.h-cert3389 wolfssl_netos_custom.cPlatformIO
examples
wolfssl_benchmark
CMakeLists.txt README.md platformio.ini sdkconfig.defaults wolfssl_benchmark.code-workspaceROWLEY-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.hzpRenesas
e2studio
RA6M3
README.md README_APRA6M_en.md README_APRA6M_jp.md include.amRX72N
EnvisionKit
Simple
README_EN.md README_JP.mdwolfssl_demo
key_data.c key_data.h user_settings.h wolfssl_demo.c wolfssl_demo.h wolfssl_tsip_unit_test.cSTM32Cube
README.md STM32_Benchmarks.md default_conf.ftl include.am main.c wolfssl_example.c wolfssl_example.hWIN
README.txt include.am test.vcxproj user_settings.h user_settings_dtls.h wolfssl-fips.sln wolfssl-fips.vcxprojWIN-SRTP-KDF-140-3
README.txt include.am resource.h test.vcxproj user_settings.h wolfssl-fips.rc wolfssl-fips.sln wolfssl-fips.vcxprojWIN10
README.txt include.am resource.h test.vcxproj user_settings.h wolfssl-fips.rc wolfssl-fips.sln wolfssl-fips.vcxprojXCODE
Benchmark
include.amXilinxSDK
README.md bench.sh combine.sh eclipse_formatter_profile.xml graph.sh include.am user_settings.h wolfssl_example.capple-universal
wolfssl-multiplatform
iotsafe
Makefile README.md ca-cert.c devices.c devices.h include.am main.c memory-tls.c startup.c target.ld user_settings.hmynewt
README.md apps.wolfcrypttest.pkg.yml crypto.wolfssl.pkg.yml crypto.wolfssl.syscfg.yml include.am setup.shcerts
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.pemcrl
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.pemdilithium
bench_dilithium_level2_key.der bench_dilithium_level3_key.der bench_dilithium_level5_key.der include.amecc
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.cnfed25519
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.pemed448
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.pemexternal
DigiCertGlobalRootCA.pem README.txt ca-digicert-ev.pem ca-globalsign-root.pem ca-google-root.pem ca_collection.pem include.amintermediate
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.conflms
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.ammldsa
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.derocsp
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.derp521
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.pemrpk
client-cert-rpk.der client-ecc-cert-rpk.der include.am server-cert-rpk.der server-ecc-cert-rpk.derrsapss
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.pemslhdsa
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.pemsm2
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.pemstatickeys
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.pemtest
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.p7stest-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.shtest-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.pemxmss
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.amcmake
Config.cmake.in README.md config.in functions.cmake include.am options.h.in wolfssl-config-version.cmake.in wolfssl-targets.cmake.indebian
changelog.in control.in copyright include.am libwolfssl-dev.install libwolfssl.install rules.indoc
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.hheader_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.hexamples
async
Makefile README.md async_client.c async_server.c async_tls.c async_tls.h include.am user_settings.hconfigs
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.hechoclient
echoclient.c echoclient.h echoclient.sln echoclient.vcproj echoclient.vcxproj include.am quitlinuxkm
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.cm4
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.m4mqx
wolfcrypt_benchmark
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.launchwolfcrypt_test
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.launchwolfssl_client
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.launchscripts
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.shsrc
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.ctests
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.hwolfcrypt
benchmark
README.md benchmark-VS2022.sln benchmark-VS2022.vcxproj benchmark-VS2022.vcxproj.user benchmark.c benchmark.h benchmark.sln benchmark.vcproj benchmark.vcxproj include.amsrc
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.pyRenesas
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.carm
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.ccaam
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.cdevcrypto
README.md devcrypto_aes.c devcrypto_ecdsa.c devcrypto_hash.c devcrypto_hmac.c devcrypto_rsa.c devcrypto_x25519.c wc_devcrypto.criscv
riscv-64-aes.c riscv-64-chacha.c riscv-64-poly1305.c riscv-64-sha256.c riscv-64-sha3.c riscv-64-sha512.cwolfssl
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.hwolfcrypt
port
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.hcaam
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.hwrapper
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.adbtests
src
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.adbCSharp
wolfSSL-Example-IOCallbacks
App.config wolfSSL-Example-IOCallbacks.cs wolfSSL-Example-IOCallbacks.csprojwolfSSL-TLS-ServerThreaded
App.config wolfSSL-TLS-ServerThreaded.cs wolfSSL-TLS-ServerThreaded.csprojrust
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.rstests
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.rszephyr
samples
wolfssl_benchmark
CMakeLists.txt README install_test.sh prj.conf sample.yaml zephyr_legacy.conf zephyr_v4.1.confwolfssl_test
CMakeLists.txt README install_test.sh prj-no-malloc.conf prj.conf sample.yaml zephyr_legacy.conf zephyr_v4.1.conf
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);