cjson
.github
workflows CI.yml ci-fuzz.yml
CONTRIBUTING.md
fuzzing
inputs test1 test10 test11 test2 test3 test3.bu test3.uf test3.uu test4 test5 test6 test7 test8 test9
.gitignore CMakeLists.txt afl-prepare-linux.sh afl.c afl.sh cjson_read_fuzzer.c fuzz_main.c json.dict ossfuzz.sh
library_config cJSONConfig.cmake.in cJSONConfigVersion.cmake.in libcjson.pc.in libcjson_utils.pc.in uninstall.cmake
tests
inputs test1 test1.expected test10 test10.expected test11 test11.expected test2 test2.expected test3 test3.expected test4 test4.expected test5 test5.expected test6 test7 test7.expected test8 test8.expected test9 test9.expected
json-patch-tests .editorconfig .gitignore .npmignore README.md cjson-utils-tests.json package.json spec_tests.json tests.json
unity
auto colour_prompt.rb colour_reporter.rb generate_config.yml generate_module.rb generate_test_runner.rb parse_output.rb stylize_as_junit.rb test_file_filter.rb type_sanitizer.rb unity_test_summary.py unity_test_summary.rb unity_to_junit.py
docs ThrowTheSwitchCodingStandard.md UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf UnityAssertionsReference.md UnityConfigurationGuide.md UnityGettingStartedGuide.md UnityHelperScriptsGuide.md license.txt
examples
example_1
src ProductionCode.c ProductionCode.h ProductionCode2.c ProductionCode2.h
makefile readme.txt
example_2
src ProductionCode.c ProductionCode.h ProductionCode2.c ProductionCode2.h
makefile readme.txt
example_3
helper UnityHelper.c UnityHelper.h
src ProductionCode.c ProductionCode.h ProductionCode2.c ProductionCode2.h
rakefile.rb rakefile_helper.rb readme.txt target_gcc_32.yml
unity_config.h
extras
eclipse error_parsers.txt
fixture
src unity_fixture.c unity_fixture.h unity_fixture_internals.h unity_fixture_malloc_overrides.h
rakefile.rb rakefile_helper.rb readme.txt
release build.info version.info
src unity.c unity.h unity_internals.h
.gitattributes .gitignore .travis.yml README.md
CMakeLists.txt cjson_add.c common.h compare_tests.c json_patch_tests.c minify_tests.c misc_tests.c misc_utils_tests.c old_utils_tests.c parse_array.c parse_examples.c parse_hex4.c parse_number.c parse_object.c parse_string.c parse_value.c parse_with_opts.c print_array.c print_number.c print_object.c print_string.c print_value.c readme_examples.c unity_setup.c
.editorconfig .gitattributes .gitignore .travis.yml CHANGELOG.md CMakeLists.txt CONTRIBUTORS.md LICENSE Makefile README.md SECURITY.md appveyor.yml cJSON.c cJSON.h cJSON_Utils.c cJSON_Utils.h test.c valgrind.supp
curl
.circleci config.yml
.github
ISSUE_TEMPLATE bug_report.yml config.yml docs.yml
scripts cleancmd.pl cmp-config.pl cmp-pkg-config.sh codespell-ignore.words codespell.sh distfiles.sh pyspelling.words pyspelling.yaml randcurl.pl requirements-docs.txt requirements-proselint.txt requirements.txt shellcheck-ci.sh shellcheck.sh spellcheck.curl trimmarkdownheader.pl typos.sh typos.toml verify-examples.pl verify-synopsis.pl yamlcheck.sh yamlcheck.yaml
workflows appveyor-status.yml checkdocs.yml checksrc.yml checkurls.yml codeql.yml configure-vs-cmake.yml curl-for-win.yml distcheck.yml fuzz.yml http3-linux.yml label.yml linux-old.yml linux.yml macos.yml non-native.yml windows.yml
CODEOWNERS CONTRIBUTING.md FUNDING.yml dependabot.yml labeler.yml lock.yml stale.yml
CMake CurlSymbolHiding.cmake CurlTests.c FindBrotli.cmake FindCares.cmake FindGSS.cmake FindGnuTLS.cmake FindLDAP.cmake FindLibbacktrace.cmake FindLibgsasl.cmake FindLibidn2.cmake FindLibpsl.cmake FindLibssh.cmake FindLibssh2.cmake FindLibuv.cmake FindMbedTLS.cmake FindNGHTTP2.cmake FindNGHTTP3.cmake FindNGTCP2.cmake FindNettle.cmake FindQuiche.cmake FindRustls.cmake FindWolfSSL.cmake FindZstd.cmake Macros.cmake OtherTests.cmake PickyWarnings.cmake Utilities.cmake cmake_uninstall.in.cmake curl-config.in.cmake unix-cache.cmake win32-cache.cmake
LICENSES BSD-4-Clause-UC.txt ISC.txt curl.txt
docs
cmdline-opts .gitignore CMakeLists.txt MANPAGE.md Makefile.am Makefile.inc _AUTHORS.md _BUGS.md _DESCRIPTION.md _ENVIRONMENT.md _EXITCODES.md _FILES.md _GLOBBING.md _NAME.md _OPTIONS.md _OUTPUT.md _PROGRESS.md _PROTOCOLS.md _PROXYPREFIX.md _SEEALSO.md _SYNOPSIS.md _URL.md _VARIABLES.md _VERSION.md _WWW.md abstract-unix-socket.md alt-svc.md anyauth.md append.md aws-sigv4.md basic.md ca-native.md cacert.md capath.md cert-status.md cert-type.md cert.md ciphers.md compressed-ssh.md compressed.md config.md connect-timeout.md connect-to.md continue-at.md cookie-jar.md cookie.md create-dirs.md create-file-mode.md crlf.md crlfile.md curves.md data-ascii.md data-binary.md data-raw.md data-urlencode.md data.md delegation.md digest.md disable-eprt.md disable-epsv.md disable.md disallow-username-in-url.md dns-interface.md dns-ipv4-addr.md dns-ipv6-addr.md dns-servers.md doh-cert-status.md doh-insecure.md doh-url.md dump-ca-embed.md dump-header.md ech.md egd-file.md engine.md etag-compare.md etag-save.md expect100-timeout.md fail-early.md fail-with-body.md fail.md false-start.md follow.md form-escape.md form-string.md form.md ftp-account.md ftp-alternative-to-user.md ftp-create-dirs.md ftp-method.md ftp-pasv.md ftp-port.md ftp-pret.md ftp-skip-pasv-ip.md ftp-ssl-ccc-mode.md ftp-ssl-ccc.md ftp-ssl-control.md get.md globoff.md happy-eyeballs-timeout-ms.md haproxy-clientip.md haproxy-protocol.md head.md header.md help.md hostpubmd5.md hostpubsha256.md hsts.md http0.9.md http1.0.md http1.1.md http2-prior-knowledge.md http2.md http3-only.md http3.md ignore-content-length.md insecure.md interface.md ip-tos.md ipfs-gateway.md ipv4.md ipv6.md json.md junk-session-cookies.md keepalive-cnt.md keepalive-time.md key-type.md key.md knownhosts.md krb.md libcurl.md limit-rate.md list-only.md local-port.md location-trusted.md location.md login-options.md mail-auth.md mail-from.md mail-rcpt-allowfails.md mail-rcpt.md mainpage.idx manual.md max-filesize.md max-redirs.md max-time.md metalink.md mptcp.md negotiate.md netrc-file.md netrc-optional.md netrc.md next.md no-alpn.md no-buffer.md no-clobber.md no-keepalive.md no-npn.md no-progress-meter.md no-sessionid.md noproxy.md ntlm-wb.md ntlm.md oauth2-bearer.md out-null.md output-dir.md output.md parallel-immediate.md parallel-max-host.md parallel-max.md parallel.md pass.md path-as-is.md pinnedpubkey.md post301.md post302.md post303.md preproxy.md progress-bar.md proto-default.md proto-redir.md proto.md proxy-anyauth.md proxy-basic.md proxy-ca-native.md proxy-cacert.md proxy-capath.md proxy-cert-type.md proxy-cert.md proxy-ciphers.md proxy-crlfile.md proxy-digest.md proxy-header.md proxy-http2.md proxy-insecure.md proxy-key-type.md proxy-key.md proxy-negotiate.md proxy-ntlm.md proxy-pass.md proxy-pinnedpubkey.md proxy-service-name.md proxy-ssl-allow-beast.md proxy-ssl-auto-client-cert.md proxy-tls13-ciphers.md proxy-tlsauthtype.md proxy-tlspassword.md proxy-tlsuser.md proxy-tlsv1.md proxy-user.md proxy.md proxy1.0.md proxytunnel.md pubkey.md quote.md random-file.md range.md rate.md raw.md referer.md remote-header-name.md remote-name-all.md remote-name.md remote-time.md remove-on-error.md request-target.md request.md resolve.md retry-all-errors.md retry-connrefused.md retry-delay.md retry-max-time.md retry.md sasl-authzid.md sasl-ir.md service-name.md show-error.md show-headers.md sigalgs.md silent.md skip-existing.md socks4.md socks4a.md socks5-basic.md socks5-gssapi-nec.md socks5-gssapi-service.md socks5-gssapi.md socks5-hostname.md socks5.md speed-limit.md speed-time.md ssl-allow-beast.md ssl-auto-client-cert.md ssl-no-revoke.md ssl-reqd.md ssl-revoke-best-effort.md ssl-sessions.md ssl.md sslv2.md sslv3.md stderr.md styled-output.md suppress-connect-headers.md tcp-fastopen.md tcp-nodelay.md telnet-option.md tftp-blksize.md tftp-no-options.md time-cond.md tls-earlydata.md tls-max.md tls13-ciphers.md tlsauthtype.md tlspassword.md tlsuser.md tlsv1.0.md tlsv1.1.md tlsv1.2.md tlsv1.3.md tlsv1.md tr-encoding.md trace-ascii.md trace-config.md trace-ids.md trace-time.md trace.md unix-socket.md upload-file.md upload-flags.md url-query.md url.md use-ascii.md user-agent.md user.md variable.md verbose.md version.md vlan-priority.md write-out.md xattr.md
examples .checksrc .gitignore 10-at-a-time.c CMakeLists.txt Makefile.am Makefile.example Makefile.inc README.md adddocsref.pl address-scope.c altsvc.c anyauthput.c block_ip.c cacertinmem.c certinfo.c chkspeed.c connect-to.c cookie_interface.c crawler.c debug.c default-scheme.c ephiperfifo.c evhiperfifo.c externalsocket.c fileupload.c ftp-delete.c ftp-wildcard.c ftpget.c ftpgetinfo.c ftpgetresp.c ftpsget.c ftpupload.c ftpuploadfrommem.c ftpuploadresume.c getinfo.c getinmemory.c getredirect.c getreferrer.c ghiper.c headerapi.c hiperfifo.c hsts-preload.c htmltidy.c htmltitle.cpp http-options.c http-post.c http2-download.c http2-pushinmemory.c http2-serverpush.c http2-upload.c http3-present.c http3.c httpcustomheader.c httpput-postfields.c httpput.c https.c imap-append.c imap-authzid.c imap-copy.c imap-create.c imap-delete.c imap-examine.c imap-fetch.c imap-list.c imap-lsub.c imap-multi.c imap-noop.c imap-search.c imap-ssl.c imap-store.c imap-tls.c interface.c ipv6.c keepalive.c localport.c log_failed_transfers.c maxconnects.c multi-app.c multi-debugcallback.c multi-double.c multi-event.c multi-formadd.c multi-legacy.c multi-post.c multi-single.c multi-uv.c netrc.c parseurl.c persistent.c pop3-authzid.c pop3-dele.c pop3-list.c pop3-multi.c pop3-noop.c pop3-retr.c pop3-ssl.c pop3-stat.c pop3-tls.c pop3-top.c pop3-uidl.c post-callback.c postinmemory.c postit2-formadd.c postit2.c progressfunc.c protofeats.c range.c resolve.c rtsp-options.c sendrecv.c sepheaders.c sessioninfo.c sftpget.c sftpuploadresume.c shared-connection-cache.c simple.c simplepost.c simplessl.c smooth-gtk-thread.c smtp-authzid.c smtp-expn.c smtp-mail.c smtp-mime.c smtp-multi.c smtp-ssl.c smtp-tls.c smtp-vrfy.c sslbackend.c synctime.c threaded.c unixsocket.c url2file.c urlapi.c usercertinmem.c version-check.pl websocket-cb.c websocket-updown.c websocket.c xmlstream.c
internals BUFQ.md BUFREF.md CHECKSRC.md CLIENT-READERS.md CLIENT-WRITERS.md CODE_STYLE.md CONNECTION-FILTERS.md CREDENTIALS.md CURLX.md DYNBUF.md HASH.md LLIST.md MID.md MQTT.md MULTI-EV.md NEW-PROTOCOL.md PEERS.md PORTING.md RATELIMITS.md README.md SCORECARD.md SPLAY.md STRPARSE.md THRDPOOL-AND-QUEUE.md TIME-KEEPING.md TLS-SESSIONS.md UINT_SETS.md WEBSOCKET.md
libcurl
opts CMakeLists.txt CURLINFO_ACTIVESOCKET.md CURLINFO_APPCONNECT_TIME.md CURLINFO_APPCONNECT_TIME_T.md CURLINFO_CAINFO.md CURLINFO_CAPATH.md CURLINFO_CERTINFO.md CURLINFO_CONDITION_UNMET.md CURLINFO_CONNECT_TIME.md CURLINFO_CONNECT_TIME_T.md CURLINFO_CONN_ID.md CURLINFO_CONTENT_LENGTH_DOWNLOAD.md CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.md CURLINFO_CONTENT_LENGTH_UPLOAD.md CURLINFO_CONTENT_LENGTH_UPLOAD_T.md CURLINFO_CONTENT_TYPE.md CURLINFO_COOKIELIST.md CURLINFO_EARLYDATA_SENT_T.md CURLINFO_EFFECTIVE_METHOD.md CURLINFO_EFFECTIVE_URL.md CURLINFO_FILETIME.md CURLINFO_FILETIME_T.md CURLINFO_FTP_ENTRY_PATH.md CURLINFO_HEADER_SIZE.md CURLINFO_HTTPAUTH_AVAIL.md CURLINFO_HTTPAUTH_USED.md CURLINFO_HTTP_CONNECTCODE.md CURLINFO_HTTP_VERSION.md CURLINFO_LASTSOCKET.md CURLINFO_LOCAL_IP.md CURLINFO_LOCAL_PORT.md CURLINFO_NAMELOOKUP_TIME.md CURLINFO_NAMELOOKUP_TIME_T.md CURLINFO_NUM_CONNECTS.md CURLINFO_OS_ERRNO.md CURLINFO_POSTTRANSFER_TIME_T.md CURLINFO_PRETRANSFER_TIME.md CURLINFO_PRETRANSFER_TIME_T.md CURLINFO_PRIMARY_IP.md CURLINFO_PRIMARY_PORT.md CURLINFO_PRIVATE.md CURLINFO_PROTOCOL.md CURLINFO_PROXYAUTH_AVAIL.md CURLINFO_PROXYAUTH_USED.md CURLINFO_PROXY_ERROR.md CURLINFO_PROXY_SSL_VERIFYRESULT.md CURLINFO_QUEUE_TIME_T.md CURLINFO_REDIRECT_COUNT.md CURLINFO_REDIRECT_TIME.md CURLINFO_REDIRECT_TIME_T.md CURLINFO_REDIRECT_URL.md CURLINFO_REFERER.md CURLINFO_REQUEST_SIZE.md CURLINFO_RESPONSE_CODE.md CURLINFO_RETRY_AFTER.md CURLINFO_RTSP_CLIENT_CSEQ.md CURLINFO_RTSP_CSEQ_RECV.md CURLINFO_RTSP_SERVER_CSEQ.md CURLINFO_RTSP_SESSION_ID.md CURLINFO_SCHEME.md CURLINFO_SIZE_DELIVERED.md CURLINFO_SIZE_DOWNLOAD.md CURLINFO_SIZE_DOWNLOAD_T.md CURLINFO_SIZE_UPLOAD.md CURLINFO_SIZE_UPLOAD_T.md CURLINFO_SPEED_DOWNLOAD.md CURLINFO_SPEED_DOWNLOAD_T.md CURLINFO_SPEED_UPLOAD.md CURLINFO_SPEED_UPLOAD_T.md CURLINFO_SSL_ENGINES.md CURLINFO_SSL_VERIFYRESULT.md CURLINFO_STARTTRANSFER_TIME.md CURLINFO_STARTTRANSFER_TIME_T.md CURLINFO_TLS_SESSION.md CURLINFO_TLS_SSL_PTR.md CURLINFO_TOTAL_TIME.md CURLINFO_TOTAL_TIME_T.md CURLINFO_USED_PROXY.md CURLINFO_XFER_ID.md CURLMINFO_XFERS_ADDED.md CURLMINFO_XFERS_CURRENT.md CURLMINFO_XFERS_DONE.md CURLMINFO_XFERS_PENDING.md CURLMINFO_XFERS_RUNNING.md CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.md CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.md CURLMOPT_MAXCONNECTS.md CURLMOPT_MAX_CONCURRENT_STREAMS.md CURLMOPT_MAX_HOST_CONNECTIONS.md CURLMOPT_MAX_PIPELINE_LENGTH.md CURLMOPT_MAX_TOTAL_CONNECTIONS.md CURLMOPT_NETWORK_CHANGED.md CURLMOPT_NOTIFYDATA.md CURLMOPT_NOTIFYFUNCTION.md CURLMOPT_PIPELINING.md CURLMOPT_PIPELINING_SERVER_BL.md CURLMOPT_PIPELINING_SITE_BL.md CURLMOPT_PUSHDATA.md CURLMOPT_PUSHFUNCTION.md CURLMOPT_QUICK_EXIT.md CURLMOPT_RESOLVE_THREADS_MAX.md CURLMOPT_SOCKETDATA.md CURLMOPT_SOCKETFUNCTION.md CURLMOPT_TIMERDATA.md CURLMOPT_TIMERFUNCTION.md CURLOPT_ABSTRACT_UNIX_SOCKET.md CURLOPT_ACCEPTTIMEOUT_MS.md CURLOPT_ACCEPT_ENCODING.md CURLOPT_ADDRESS_SCOPE.md CURLOPT_ALTSVC.md CURLOPT_ALTSVC_CTRL.md CURLOPT_APPEND.md CURLOPT_AUTOREFERER.md CURLOPT_AWS_SIGV4.md CURLOPT_BUFFERSIZE.md CURLOPT_CAINFO.md CURLOPT_CAINFO_BLOB.md CURLOPT_CAPATH.md CURLOPT_CA_CACHE_TIMEOUT.md CURLOPT_CERTINFO.md CURLOPT_CHUNK_BGN_FUNCTION.md CURLOPT_CHUNK_DATA.md CURLOPT_CHUNK_END_FUNCTION.md CURLOPT_CLOSESOCKETDATA.md CURLOPT_CLOSESOCKETFUNCTION.md CURLOPT_CONNECTTIMEOUT.md CURLOPT_CONNECTTIMEOUT_MS.md CURLOPT_CONNECT_ONLY.md CURLOPT_CONNECT_TO.md CURLOPT_CONV_FROM_NETWORK_FUNCTION.md CURLOPT_CONV_FROM_UTF8_FUNCTION.md CURLOPT_CONV_TO_NETWORK_FUNCTION.md CURLOPT_COOKIE.md CURLOPT_COOKIEFILE.md CURLOPT_COOKIEJAR.md CURLOPT_COOKIELIST.md CURLOPT_COOKIESESSION.md CURLOPT_COPYPOSTFIELDS.md CURLOPT_CRLF.md CURLOPT_CRLFILE.md CURLOPT_CURLU.md CURLOPT_CUSTOMREQUEST.md CURLOPT_DEBUGDATA.md CURLOPT_DEBUGFUNCTION.md CURLOPT_DEFAULT_PROTOCOL.md CURLOPT_DIRLISTONLY.md CURLOPT_DISALLOW_USERNAME_IN_URL.md CURLOPT_DNS_CACHE_TIMEOUT.md CURLOPT_DNS_INTERFACE.md CURLOPT_DNS_LOCAL_IP4.md CURLOPT_DNS_LOCAL_IP6.md CURLOPT_DNS_SERVERS.md CURLOPT_DNS_SHUFFLE_ADDRESSES.md CURLOPT_DNS_USE_GLOBAL_CACHE.md CURLOPT_DOH_SSL_VERIFYHOST.md CURLOPT_DOH_SSL_VERIFYPEER.md CURLOPT_DOH_SSL_VERIFYSTATUS.md CURLOPT_DOH_URL.md CURLOPT_ECH.md CURLOPT_EGDSOCKET.md CURLOPT_ERRORBUFFER.md CURLOPT_EXPECT_100_TIMEOUT_MS.md CURLOPT_FAILONERROR.md CURLOPT_FILETIME.md CURLOPT_FNMATCH_DATA.md CURLOPT_FNMATCH_FUNCTION.md CURLOPT_FOLLOWLOCATION.md CURLOPT_FORBID_REUSE.md CURLOPT_FRESH_CONNECT.md CURLOPT_FTPPORT.md CURLOPT_FTPSSLAUTH.md CURLOPT_FTP_ACCOUNT.md CURLOPT_FTP_ALTERNATIVE_TO_USER.md CURLOPT_FTP_CREATE_MISSING_DIRS.md CURLOPT_FTP_FILEMETHOD.md CURLOPT_FTP_SKIP_PASV_IP.md CURLOPT_FTP_SSL_CCC.md CURLOPT_FTP_USE_EPRT.md CURLOPT_FTP_USE_EPSV.md CURLOPT_FTP_USE_PRET.md CURLOPT_GSSAPI_DELEGATION.md CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.md CURLOPT_HAPROXYPROTOCOL.md CURLOPT_HAPROXY_CLIENT_IP.md CURLOPT_HEADER.md CURLOPT_HEADERDATA.md CURLOPT_HEADERFUNCTION.md CURLOPT_HEADEROPT.md CURLOPT_HSTS.md CURLOPT_HSTSREADDATA.md CURLOPT_HSTSREADFUNCTION.md CURLOPT_HSTSWRITEDATA.md CURLOPT_HSTSWRITEFUNCTION.md CURLOPT_HSTS_CTRL.md CURLOPT_HTTP09_ALLOWED.md CURLOPT_HTTP200ALIASES.md CURLOPT_HTTPAUTH.md CURLOPT_HTTPGET.md CURLOPT_HTTPHEADER.md CURLOPT_HTTPPOST.md CURLOPT_HTTPPROXYTUNNEL.md CURLOPT_HTTP_CONTENT_DECODING.md CURLOPT_HTTP_TRANSFER_DECODING.md CURLOPT_HTTP_VERSION.md CURLOPT_IGNORE_CONTENT_LENGTH.md CURLOPT_INFILESIZE.md CURLOPT_INFILESIZE_LARGE.md CURLOPT_INTERFACE.md CURLOPT_INTERLEAVEDATA.md CURLOPT_INTERLEAVEFUNCTION.md CURLOPT_IOCTLDATA.md CURLOPT_IOCTLFUNCTION.md CURLOPT_IPRESOLVE.md CURLOPT_ISSUERCERT.md CURLOPT_ISSUERCERT_BLOB.md CURLOPT_KEEP_SENDING_ON_ERROR.md CURLOPT_KEYPASSWD.md CURLOPT_KRBLEVEL.md CURLOPT_LOCALPORT.md CURLOPT_LOCALPORTRANGE.md CURLOPT_LOGIN_OPTIONS.md CURLOPT_LOW_SPEED_LIMIT.md CURLOPT_LOW_SPEED_TIME.md CURLOPT_MAIL_AUTH.md CURLOPT_MAIL_FROM.md CURLOPT_MAIL_RCPT.md CURLOPT_MAIL_RCPT_ALLOWFAILS.md CURLOPT_MAXAGE_CONN.md CURLOPT_MAXCONNECTS.md CURLOPT_MAXFILESIZE.md CURLOPT_MAXFILESIZE_LARGE.md CURLOPT_MAXLIFETIME_CONN.md CURLOPT_MAXREDIRS.md CURLOPT_MAX_RECV_SPEED_LARGE.md CURLOPT_MAX_SEND_SPEED_LARGE.md CURLOPT_MIMEPOST.md CURLOPT_MIME_OPTIONS.md CURLOPT_NETRC.md CURLOPT_NETRC_FILE.md CURLOPT_NEW_DIRECTORY_PERMS.md CURLOPT_NEW_FILE_PERMS.md CURLOPT_NOBODY.md CURLOPT_NOPROGRESS.md CURLOPT_NOPROXY.md CURLOPT_NOSIGNAL.md CURLOPT_OPENSOCKETDATA.md CURLOPT_OPENSOCKETFUNCTION.md CURLOPT_PASSWORD.md CURLOPT_PATH_AS_IS.md CURLOPT_PINNEDPUBLICKEY.md CURLOPT_PIPEWAIT.md CURLOPT_PORT.md CURLOPT_POST.md CURLOPT_POSTFIELDS.md CURLOPT_POSTFIELDSIZE.md CURLOPT_POSTFIELDSIZE_LARGE.md CURLOPT_POSTQUOTE.md CURLOPT_POSTREDIR.md CURLOPT_PREQUOTE.md CURLOPT_PREREQDATA.md CURLOPT_PREREQFUNCTION.md CURLOPT_PRE_PROXY.md CURLOPT_PRIVATE.md CURLOPT_PROGRESSDATA.md CURLOPT_PROGRESSFUNCTION.md CURLOPT_PROTOCOLS.md CURLOPT_PROTOCOLS_STR.md CURLOPT_PROXY.md CURLOPT_PROXYAUTH.md CURLOPT_PROXYHEADER.md CURLOPT_PROXYPASSWORD.md CURLOPT_PROXYPORT.md CURLOPT_PROXYTYPE.md CURLOPT_PROXYUSERNAME.md CURLOPT_PROXYUSERPWD.md CURLOPT_PROXY_CAINFO.md CURLOPT_PROXY_CAINFO_BLOB.md CURLOPT_PROXY_CAPATH.md CURLOPT_PROXY_CRLFILE.md CURLOPT_PROXY_ISSUERCERT.md CURLOPT_PROXY_ISSUERCERT_BLOB.md CURLOPT_PROXY_KEYPASSWD.md CURLOPT_PROXY_PINNEDPUBLICKEY.md CURLOPT_PROXY_SERVICE_NAME.md CURLOPT_PROXY_SSLCERT.md CURLOPT_PROXY_SSLCERTTYPE.md CURLOPT_PROXY_SSLCERT_BLOB.md CURLOPT_PROXY_SSLKEY.md CURLOPT_PROXY_SSLKEYTYPE.md CURLOPT_PROXY_SSLKEY_BLOB.md CURLOPT_PROXY_SSLVERSION.md CURLOPT_PROXY_SSL_CIPHER_LIST.md CURLOPT_PROXY_SSL_OPTIONS.md CURLOPT_PROXY_SSL_VERIFYHOST.md CURLOPT_PROXY_SSL_VERIFYPEER.md CURLOPT_PROXY_TLS13_CIPHERS.md CURLOPT_PROXY_TLSAUTH_PASSWORD.md CURLOPT_PROXY_TLSAUTH_TYPE.md CURLOPT_PROXY_TLSAUTH_USERNAME.md CURLOPT_PROXY_TRANSFER_MODE.md CURLOPT_PUT.md CURLOPT_QUICK_EXIT.md CURLOPT_QUOTE.md CURLOPT_RANDOM_FILE.md CURLOPT_RANGE.md CURLOPT_READDATA.md CURLOPT_READFUNCTION.md CURLOPT_REDIR_PROTOCOLS.md CURLOPT_REDIR_PROTOCOLS_STR.md CURLOPT_REFERER.md CURLOPT_REQUEST_TARGET.md CURLOPT_RESOLVE.md CURLOPT_RESOLVER_START_DATA.md CURLOPT_RESOLVER_START_FUNCTION.md CURLOPT_RESUME_FROM.md CURLOPT_RESUME_FROM_LARGE.md CURLOPT_RTSP_CLIENT_CSEQ.md CURLOPT_RTSP_REQUEST.md CURLOPT_RTSP_SERVER_CSEQ.md CURLOPT_RTSP_SESSION_ID.md CURLOPT_RTSP_STREAM_URI.md CURLOPT_RTSP_TRANSPORT.md CURLOPT_SASL_AUTHZID.md CURLOPT_SASL_IR.md CURLOPT_SEEKDATA.md CURLOPT_SEEKFUNCTION.md CURLOPT_SERVER_RESPONSE_TIMEOUT.md CURLOPT_SERVER_RESPONSE_TIMEOUT_MS.md CURLOPT_SERVICE_NAME.md CURLOPT_SHARE.md CURLOPT_SOCKOPTDATA.md CURLOPT_SOCKOPTFUNCTION.md CURLOPT_SOCKS5_AUTH.md CURLOPT_SOCKS5_GSSAPI_NEC.md CURLOPT_SOCKS5_GSSAPI_SERVICE.md CURLOPT_SSH_AUTH_TYPES.md CURLOPT_SSH_COMPRESSION.md CURLOPT_SSH_HOSTKEYDATA.md CURLOPT_SSH_HOSTKEYFUNCTION.md CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.md CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256.md CURLOPT_SSH_KEYDATA.md CURLOPT_SSH_KEYFUNCTION.md CURLOPT_SSH_KNOWNHOSTS.md CURLOPT_SSH_PRIVATE_KEYFILE.md CURLOPT_SSH_PUBLIC_KEYFILE.md CURLOPT_SSLCERT.md CURLOPT_SSLCERTTYPE.md CURLOPT_SSLCERT_BLOB.md CURLOPT_SSLENGINE.md CURLOPT_SSLENGINE_DEFAULT.md CURLOPT_SSLKEY.md CURLOPT_SSLKEYTYPE.md CURLOPT_SSLKEY_BLOB.md CURLOPT_SSLVERSION.md CURLOPT_SSL_CIPHER_LIST.md CURLOPT_SSL_CTX_DATA.md CURLOPT_SSL_CTX_FUNCTION.md CURLOPT_SSL_EC_CURVES.md CURLOPT_SSL_ENABLE_ALPN.md CURLOPT_SSL_ENABLE_NPN.md CURLOPT_SSL_FALSESTART.md CURLOPT_SSL_OPTIONS.md CURLOPT_SSL_SESSIONID_CACHE.md CURLOPT_SSL_SIGNATURE_ALGORITHMS.md CURLOPT_SSL_VERIFYHOST.md CURLOPT_SSL_VERIFYPEER.md CURLOPT_SSL_VERIFYSTATUS.md CURLOPT_STDERR.md CURLOPT_STREAM_DEPENDS.md CURLOPT_STREAM_DEPENDS_E.md CURLOPT_STREAM_WEIGHT.md CURLOPT_SUPPRESS_CONNECT_HEADERS.md CURLOPT_TCP_FASTOPEN.md CURLOPT_TCP_KEEPALIVE.md CURLOPT_TCP_KEEPCNT.md CURLOPT_TCP_KEEPIDLE.md CURLOPT_TCP_KEEPINTVL.md CURLOPT_TCP_NODELAY.md CURLOPT_TELNETOPTIONS.md CURLOPT_TFTP_BLKSIZE.md CURLOPT_TFTP_NO_OPTIONS.md CURLOPT_TIMECONDITION.md CURLOPT_TIMEOUT.md CURLOPT_TIMEOUT_MS.md CURLOPT_TIMEVALUE.md CURLOPT_TIMEVALUE_LARGE.md CURLOPT_TLS13_CIPHERS.md CURLOPT_TLSAUTH_PASSWORD.md CURLOPT_TLSAUTH_TYPE.md CURLOPT_TLSAUTH_USERNAME.md CURLOPT_TRAILERDATA.md CURLOPT_TRAILERFUNCTION.md CURLOPT_TRANSFERTEXT.md CURLOPT_TRANSFER_ENCODING.md CURLOPT_UNIX_SOCKET_PATH.md CURLOPT_UNRESTRICTED_AUTH.md CURLOPT_UPKEEP_INTERVAL_MS.md CURLOPT_UPLOAD.md CURLOPT_UPLOAD_BUFFERSIZE.md CURLOPT_UPLOAD_FLAGS.md CURLOPT_URL.md CURLOPT_USERAGENT.md CURLOPT_USERNAME.md CURLOPT_USERPWD.md CURLOPT_USE_SSL.md CURLOPT_VERBOSE.md CURLOPT_WILDCARDMATCH.md CURLOPT_WRITEDATA.md CURLOPT_WRITEFUNCTION.md CURLOPT_WS_OPTIONS.md CURLOPT_XFERINFODATA.md CURLOPT_XFERINFOFUNCTION.md CURLOPT_XOAUTH2_BEARER.md CURLSHOPT_LOCKFUNC.md CURLSHOPT_SHARE.md CURLSHOPT_UNLOCKFUNC.md CURLSHOPT_UNSHARE.md CURLSHOPT_USERDATA.md Makefile.am Makefile.inc
.gitignore ABI.md CMakeLists.txt Makefile.am Makefile.inc curl_easy_cleanup.md curl_easy_duphandle.md curl_easy_escape.md curl_easy_getinfo.md curl_easy_header.md curl_easy_init.md curl_easy_nextheader.md curl_easy_option_by_id.md curl_easy_option_by_name.md curl_easy_option_next.md curl_easy_pause.md curl_easy_perform.md curl_easy_recv.md curl_easy_reset.md curl_easy_send.md curl_easy_setopt.md curl_easy_ssls_export.md curl_easy_ssls_import.md curl_easy_strerror.md curl_easy_unescape.md curl_easy_upkeep.md curl_escape.md curl_formadd.md curl_formfree.md curl_formget.md curl_free.md curl_getdate.md curl_getenv.md curl_global_cleanup.md curl_global_init.md curl_global_init_mem.md curl_global_sslset.md curl_global_trace.md curl_mime_addpart.md curl_mime_data.md curl_mime_data_cb.md curl_mime_encoder.md curl_mime_filedata.md curl_mime_filename.md curl_mime_free.md curl_mime_headers.md curl_mime_init.md curl_mime_name.md curl_mime_subparts.md curl_mime_type.md curl_mprintf.md curl_multi_add_handle.md curl_multi_assign.md curl_multi_cleanup.md curl_multi_fdset.md curl_multi_get_handles.md curl_multi_get_offt.md curl_multi_info_read.md curl_multi_init.md curl_multi_notify_disable.md curl_multi_notify_enable.md curl_multi_perform.md curl_multi_poll.md curl_multi_remove_handle.md curl_multi_setopt.md curl_multi_socket.md curl_multi_socket_action.md curl_multi_socket_all.md curl_multi_strerror.md curl_multi_timeout.md curl_multi_wait.md curl_multi_waitfds.md curl_multi_wakeup.md curl_pushheader_byname.md curl_pushheader_bynum.md curl_share_cleanup.md curl_share_init.md curl_share_setopt.md curl_share_strerror.md curl_slist_append.md curl_slist_free_all.md curl_strequal.md curl_strnequal.md curl_unescape.md curl_url.md curl_url_cleanup.md curl_url_dup.md curl_url_get.md curl_url_set.md curl_url_strerror.md curl_version.md curl_version_info.md curl_ws_meta.md curl_ws_recv.md curl_ws_send.md curl_ws_start_frame.md libcurl-easy.md libcurl-env-dbg.md libcurl-env.md libcurl-errors.md libcurl-multi.md libcurl-security.md libcurl-share.md libcurl-thread.md libcurl-tutorial.md libcurl-url.md libcurl-ws.md libcurl.m4 libcurl.md mksymbolsmanpage.pl symbols-in-versions symbols.pl
tests CI.md FILEFORMAT.md HTTP.md TEST-SUITE.md
.gitignore ALTSVC.md BINDINGS.md BUG-BOUNTY.md BUGS.md CIPHERS-TLS12.md CIPHERS.md CMakeLists.txt CODE_OF_CONDUCT.md CODE_REVIEW.md CONTRIBUTE.md CURL-DISABLE.md CURLDOWN.md DEPRECATE.md DISTROS.md EARLY-RELEASE.md ECH.md EXPERIMENTAL.md FAQ.md FEATURES.md GOVERNANCE.md HELP-US.md HISTORY.md HSTS.md HTTP-COOKIES.md HTTP3.md HTTPSRR.md INFRASTRUCTURE.md INSTALL-CMAKE.md INSTALL.md INTERNALS.md IPFS.md KNOWN_BUGS.md KNOWN_RISKS.md MAIL-ETIQUETTE.md MANUAL.md Makefile.am README.md RELEASE-PROCEDURE.md ROADMAP.md RUSTLS.md SECURITY-ADVISORY.md SPONSORS.md SSL-PROBLEMS.md SSLCERTS.md THANKS THANKS-filter TODO.md TheArtOfHttpScripting.md URL-SYNTAX.md VERIFY.md VERSIONS.md VULN-DISCLOSURE-POLICY.md curl-config.md mk-ca-bundle.md options-in-versions runtests.md testcurl.md wcurl.md
include
curl Makefile.am curl.h curlver.h easy.h header.h mprintf.h multi.h options.h stdcheaders.h system.h typecheck-gcc.h urlapi.h websockets.h
Makefile.am README.md
lib
curlx base64.c base64.h basename.c basename.h dynbuf.c dynbuf.h fopen.c fopen.h inet_ntop.c inet_ntop.h inet_pton.c inet_pton.h multibyte.c multibyte.h nonblock.c nonblock.h snprintf.c snprintf.h strcopy.c strcopy.h strdup.c strdup.h strerr.c strerr.h strparse.c strparse.h timediff.c timediff.h timeval.c timeval.h version_win32.c version_win32.h wait.c wait.h warnless.c warnless.h winapi.c winapi.h
vauth cleartext.c cram.c digest.c digest.h digest_sspi.c gsasl.c krb5_gssapi.c krb5_sspi.c ntlm.c ntlm_sspi.c oauth2.c spnego_gssapi.c spnego_sspi.c vauth.c vauth.h
vquic curl_ngtcp2.c curl_ngtcp2.h curl_quiche.c curl_quiche.h vquic-tls.c vquic-tls.h vquic.c vquic.h vquic_int.h
vssh libssh.c libssh2.c ssh.h vssh.c vssh.h
vtls apple.c apple.h cipher_suite.c cipher_suite.h gtls.c gtls.h hostcheck.c hostcheck.h keylog.c keylog.h mbedtls.c mbedtls.h openssl.c openssl.h rustls.c rustls.h schannel.c schannel.h schannel_int.h schannel_verify.c vtls.c vtls.h vtls_int.h vtls_scache.c vtls_scache.h vtls_spack.c vtls_spack.h wolfssl.c wolfssl.h x509asn1.c x509asn1.h
.gitignore CMakeLists.txt Makefile.am Makefile.inc Makefile.soname altsvc.c altsvc.h amigaos.c amigaos.h arpa_telnet.h asyn-ares.c asyn-base.c asyn-thrdd.c asyn.h bufq.c bufq.h bufref.c bufref.h cf-dns.c cf-dns.h cf-h1-proxy.c cf-h1-proxy.h cf-h2-proxy.c cf-h2-proxy.h cf-haproxy.c cf-haproxy.h cf-https-connect.c cf-https-connect.h cf-ip-happy.c cf-ip-happy.h cf-socket.c cf-socket.h cfilters.c cfilters.h config-mac.h config-os400.h config-riscos.h config-win32.h conncache.c conncache.h connect.c connect.h content_encoding.c content_encoding.h cookie.c cookie.h creds.c creds.h cshutdn.c cshutdn.h curl_addrinfo.c curl_addrinfo.h curl_config-cmake.h.in curl_ctype.h curl_endian.c curl_endian.h curl_fnmatch.c curl_fnmatch.h curl_fopen.c curl_fopen.h curl_get_line.c curl_get_line.h curl_gethostname.c curl_gethostname.h curl_gssapi.c curl_gssapi.h curl_hmac.h curl_ldap.h curl_md4.h curl_md5.h curl_memrchr.c curl_memrchr.h curl_ntlm_core.c curl_ntlm_core.h curl_printf.h curl_range.c curl_range.h curl_sasl.c curl_sasl.h curl_setup.h curl_sha256.h curl_sha512_256.c curl_sha512_256.h curl_share.c curl_share.h curl_sspi.c curl_sspi.h curl_threads.c curl_threads.h curl_trc.c curl_trc.h cw-out.c cw-out.h cw-pause.c cw-pause.h dict.c dict.h dllmain.c dnscache.c dnscache.h doh.c doh.h dynhds.c dynhds.h easy.c easy_lock.h easygetopt.c easyif.h easyoptions.c easyoptions.h escape.c escape.h fake_addrinfo.c fake_addrinfo.h file.c file.h fileinfo.c fileinfo.h formdata.c formdata.h ftp-int.h ftp.c ftp.h ftplistparser.c ftplistparser.h functypes.h getenv.c getinfo.c getinfo.h gopher.c gopher.h hash.c hash.h headers.c headers.h hmac.c hostip.c hostip.h hostip4.c hostip6.c hsts.c hsts.h http.c http.h http1.c http1.h http2.c http2.h http_aws_sigv4.c http_aws_sigv4.h http_chunks.c http_chunks.h http_digest.c http_digest.h http_negotiate.c http_negotiate.h http_ntlm.c http_ntlm.h http_proxy.c http_proxy.h httpsrr.c httpsrr.h idn.c idn.h if2ip.c if2ip.h imap.c imap.h ldap.c libcurl.def libcurl.rc libcurl.vers.in llist.c llist.h macos.c macos.h md4.c md5.c memdebug.c mime.c mime.h mprintf.c mqtt.c mqtt.h multi.c multi_ev.c multi_ev.h multi_ntfy.c multi_ntfy.h multihandle.h multiif.h netrc.c netrc.h noproxy.c noproxy.h openldap.c optiontable.pl parsedate.c parsedate.h peer.c peer.h pingpong.c pingpong.h pop3.c pop3.h progress.c progress.h protocol.c protocol.h psl.c psl.h rand.c rand.h ratelimit.c ratelimit.h request.c request.h rtsp.c rtsp.h select.c select.h sendf.c sendf.h setopt.c setopt.h setup-os400.h setup-vms.h setup-win32.h sha256.c sigpipe.h slist.c slist.h smb.c smb.h smtp.c smtp.h sockaddr.h socketpair.c socketpair.h socks.c socks.h socks_gssapi.c socks_sspi.c splay.c splay.h strcase.c strcase.h strequal.c strerror.c strerror.h system_win32.c system_win32.h telnet.c telnet.h tftp.c tftp.h thrdpool.c thrdpool.h thrdqueue.c thrdqueue.h transfer.c transfer.h uint-bset.c uint-bset.h uint-hash.c uint-hash.h uint-spbset.c uint-spbset.h uint-table.c uint-table.h url.c url.h urlapi-int.h urlapi.c urldata.h version.c ws.c ws.h
m4 .gitignore curl-amissl.m4 curl-apple-sectrust.m4 curl-compilers.m4 curl-confopts.m4 curl-functions.m4 curl-gnutls.m4 curl-mbedtls.m4 curl-openssl.m4 curl-override.m4 curl-reentrant.m4 curl-rustls.m4 curl-schannel.m4 curl-sysconfig.m4 curl-wolfssl.m4 xc-am-iface.m4 xc-cc-check.m4 xc-lt-iface.m4 xc-val-flgs.m4 zz40-xc-ovr.m4 zz50-xc-ovr.m4
projects
OS400
rpg-examples HEADERAPI HTTPPOST INMEMORY SIMPLE1 SIMPLE2 SMTPSRCMBR
.checksrc README.OS400 ccsidcurl.c ccsidcurl.h config400.default curl.cmd curl.inc.in curlcl.c curlmain.c initscript.sh make-docs.sh make-include.sh make-lib.sh make-src.sh make-tests.sh makefile.sh os400sys.c os400sys.h
Windows
tmpl .gitattributes README.txt curl-all.sln curl.sln curl.vcxproj curl.vcxproj.filters libcurl.sln libcurl.vcxproj libcurl.vcxproj.filters
.gitignore README.md generate.bat
vms Makefile.am backup_gnv_curl_src.com build_curl-config_script.com build_gnv_curl.com build_gnv_curl_pcsi_desc.com build_gnv_curl_pcsi_text.com build_gnv_curl_release_notes.com build_libcurl_pc.com build_vms.com clean_gnv_curl.com compare_curl_source.com config_h.com curl_crtl_init.c curl_gnv_build_steps.txt curl_release_note_start.txt curl_startup.com curlmsg.h curlmsg.msg curlmsg.sdl curlmsg_vms.h generate_config_vms_h_curl.com generate_vax_transfer.com gnv_conftest.c_first gnv_curl_configure.sh gnv_libcurl_symbols.opt gnv_link_curl.com macro32_exactcase.patch make_gnv_curl_install.sh make_pcsi_curl_kit_name.com pcsi_gnv_curl_file_list.txt pcsi_product_gnv_curl.com readme report_openssl_version.c setup_gnv_curl_build.com stage_curl_install.com vms_eco_level.h
Makefile.am README.md
scripts .checksrc CMakeLists.txt Makefile.am badwords badwords-all badwords.txt cd2cd cd2nroff cdall checksrc-all.pl checksrc.pl cmakelint.sh completion.pl contributors.sh contrithanks.sh coverage.sh delta dmaketgz extract-unit-protos firefox-db2pem.sh installcheck.sh maketgz managen mdlinkcheck mk-ca-bundle.pl mk-unity.pl nroff2cd perlcheck.sh pythonlint.sh randdisable release-notes.pl release-tools.sh schemetable.c singleuse.pl spacecheck.pl top-complexity top-length verify-release wcurl
src
toolx tool_time.c tool_time.h
.checksrc .gitignore CMakeLists.txt Makefile.am Makefile.inc config2setopts.c config2setopts.h curl.rc curlinfo.c mk-file-embed.pl mkhelp.pl slist_wc.c slist_wc.h terminal.c terminal.h tool_cb_dbg.c tool_cb_dbg.h tool_cb_hdr.c tool_cb_hdr.h tool_cb_prg.c tool_cb_prg.h tool_cb_rea.c tool_cb_rea.h tool_cb_see.c tool_cb_see.h tool_cb_soc.c tool_cb_soc.h tool_cb_wrt.c tool_cb_wrt.h tool_cfgable.c tool_cfgable.h tool_dirhie.c tool_dirhie.h tool_doswin.c tool_doswin.h tool_easysrc.c tool_easysrc.h tool_filetime.c tool_filetime.h tool_findfile.c tool_findfile.h tool_formparse.c tool_formparse.h tool_getparam.c tool_getparam.h tool_getpass.c tool_getpass.h tool_help.c tool_help.h tool_helpers.c tool_helpers.h tool_hugehelp.h tool_ipfs.c tool_ipfs.h tool_libinfo.c tool_libinfo.h tool_listhelp.c tool_main.c tool_main.h tool_msgs.c tool_msgs.h tool_operate.c tool_operate.h tool_operhlp.c tool_operhlp.h tool_paramhlp.c tool_paramhlp.h tool_parsecfg.c tool_parsecfg.h tool_progress.c tool_progress.h tool_sdecls.h tool_setopt.c tool_setopt.h tool_setup.h tool_ssls.c tool_ssls.h tool_stderr.c tool_stderr.h tool_urlglob.c tool_urlglob.h tool_util.c tool_util.h tool_version.h tool_vms.c tool_vms.h tool_writeout.c tool_writeout.h tool_writeout_json.c tool_writeout_json.h tool_xattr.c tool_xattr.h var.c var.h
tests
certs .gitignore CMakeLists.txt Makefile.am Makefile.inc genserv.pl srp-verifier-conf srp-verifier-db test-ca.cnf test-ca.prm test-client-cert.prm test-client-eku-only.prm test-localhost-san-first.prm test-localhost-san-last.prm test-localhost.nn.prm test-localhost.prm test-localhost0h.prm
cmake CMakeLists.txt test.c test.cpp test.sh
data .gitignore DISABLED Makefile.am data-xml1 data1400.c data1401.c data1402.c data1403.c data1404.c data1405.c data1406.c data1407.c data1420.c data1461.txt data1463.txt data1465.c data1481.c data1705-1.md data1705-2.md data1705-3.md data1705-4.md data1705-stdout.1 data1706-1.md data1706-2.md data1706-3.md data1706-4.md data1706-stdout.txt data320.html test1 test10 test100 test1000 test1001 test1002 test1003 test1004 test1005 test1006 test1007 test1008 test1009 test101 test1010 test1011 test1012 test1013 test1014 test1015 test1016 test1017 test1018 test1019 test102 test1020 test1021 test1022 test1023 test1024 test1025 test1026 test1027 test1028 test1029 test103 test1030 test1031 test1032 test1033 test1034 test1035 test1036 test1037 test1038 test1039 test104 test1040 test1041 test1042 test1043 test1044 test1045 test1046 test1047 test1048 test1049 test105 test1050 test1051 test1052 test1053 test1054 test1055 test1056 test1057 test1058 test1059 test106 test1060 test1061 test1062 test1063 test1064 test1065 test1066 test1067 test1068 test1069 test107 test1070 test1071 test1072 test1073 test1074 test1075 test1076 test1077 test1078 test1079 test108 test1080 test1081 test1082 test1083 test1084 test1085 test1086 test1087 test1088 test1089 test109 test1090 test1091 test1092 test1093 test1094 test1095 test1096 test1097 test1098 test1099 test11 test110 test1100 test1101 test1102 test1103 test1104 test1105 test1106 test1107 test1108 test1109 test111 test1110 test1111 test1112 test1113 test1114 test1115 test1116 test1117 test1118 test1119 test112 test1120 test1121 test1122 test1123 test1124 test1125 test1126 test1127 test1128 test1129 test113 test1130 test1131 test1132 test1133 test1134 test1135 test1136 test1137 test1138 test1139 test114 test1140 test1141 test1142 test1143 test1144 test1145 test1146 test1147 test1148 test1149 test115 test1150 test1151 test1152 test1153 test1154 test1155 test1156 test1157 test1158 test1159 test116 test1160 test1161 test1162 test1163 test1164 test1165 test1166 test1167 test1168 test1169 test117 test1170 test1171 test1172 test1173 test1174 test1175 test1176 test1177 test1178 test1179 test118 test1180 test1181 test1182 test1183 test1184 test1185 test1186 test1187 test1188 test1189 test119 test1190 test1191 test1192 test1193 test1194 test1195 test1196 test1197 test1198 test1199 test12 test120 test1200 test1201 test1202 test1203 test1204 test1205 test1206 test1207 test1208 test1209 test121 test1210 test1211 test1212 test1213 test1214 test1215 test1216 test1217 test1218 test1219 test122 test1220 test1221 test1222 test1223 test1224 test1225 test1226 test1227 test1228 test1229 test123 test1230 test1231 test1232 test1233 test1234 test1235 test1236 test1237 test1238 test1239 test124 test1240 test1241 test1242 test1243 test1244 test1245 test1246 test1247 test1248 test1249 test125 test1250 test1251 test1252 test1253 test1254 test1255 test1256 test1257 test1258 test1259 test126 test1260 test1261 test1262 test1263 test1264 test1265 test1266 test1267 test1268 test1269 test127 test1270 test1271 test1272 test1273 test1274 test1275 test1276 test1277 test1278 test1279 test128 test1280 test1281 test1282 test1283 test1284 test1285 test1286 test1287 test1288 test1289 test129 test1290 test1291 test1292 test1293 test1294 test1295 test1296 test1297 test1298 test1299 test13 test130 test1300 test1301 test1302 test1303 test1304 test1305 test1306 test1307 test1308 test1309 test131 test1310 test1311 test1312 test1313 test1314 test1315 test1316 test1317 test1318 test1319 test132 test1320 test1321 test1322 test1323 test1324 test1325 test1326 test1327 test1328 test1329 test133 test1330 test1331 test1332 test1333 test1334 test1335 test1336 test1337 test1338 test1339 test134 test1340 test1341 test1342 test1343 test1344 test1345 test1346 test1347 test1348 test1349 test135 test1350 test1351 test1352 test1353 test1354 test1355 test1356 test1357 test1358 test1359 test136 test1360 test1361 test1362 test1363 test1364 test1365 test1366 test1367 test1368 test1369 test137 test1370 test1371 test1372 test1373 test1374 test1375 test1376 test1377 test1378 test1379 test138 test1380 test1381 test1382 test1383 test1384 test1385 test1386 test1387 test1388 test1389 test139 test1390 test1391 test1392 test1393 test1394 test1395 test1396 test1397 test1398 test1399 test14 test140 test1400 test1401 test1402 test1403 test1404 test1405 test1406 test1407 test1408 test1409 test141 test1410 test1411 test1412 test1413 test1414 test1415 test1416 test1417 test1418 test1419 test142 test1420 test1421 test1422 test1423 test1424 test1425 test1426 test1427 test1428 test1429 test143 test1430 test1431 test1432 test1433 test1434 test1435 test1436 test1437 test1438 test1439 test144 test1440 test1441 test1442 test1443 test1444 test1445 test1446 test1447 test1448 test1449 test145 test1450 test1451 test1452 test1453 test1454 test1455 test1456 test1457 test1458 test1459 test146 test1460 test1461 test1462 test1463 test1464 test1465 test1466 test1467 test1468 test1469 test147 test1470 test1471 test1472 test1473 test1474 test1475 test1476 test1477 test1478 test1479 test148 test1480 test1481 test1482 test1483 test1484 test1485 test1486 test1487 test1488 test1489 test149 test1490 test1491 test1492 test1493 test1494 test1495 test1496 test1497 test1498 test1499 test15 test150 test1500 test1501 test1502 test1503 test1504 test1505 test1506 test1507 test1508 test1509 test151 test1510 test1511 test1512 test1513 test1514 test1515 test1516 test1517 test1518 test1519 test152 test1520 test1521 test1522 test1523 test1524 test1525 test1526 test1527 test1528 test1529 test153 test1530 test1531 test1532 test1533 test1534 test1535 test1536 test1537 test1538 test1539 test154 test1540 test1541 test1542 test1543 test1544 test1545 test1546 test1547 test1548 test1549 test155 test1550 test1551 test1552 test1553 test1554 test1555 test1556 test1557 test1558 test1559 test156 test1560 test1561 test1562 test1563 test1564 test1565 test1566 test1567 test1568 test1569 test157 test1570 test1571 test1572 test1573 test1574 test1575 test1576 test1577 test1578 test1579 test158 test1580 test1581 test1582 test1583 test1584 test1585 test1586 test1587 test1588 test1589 test159 test1590 test1591 test1592 test1593 test1594 test1595 test1596 test1597 test1598 test1599 test16 test160 test1600 test1601 test1602 test1603 test1604 test1605 test1606 test1607 test1608 test1609 test161 test1610 test1611 test1612 test1613 test1614 test1615 test1616 test1617 test1618 test1619 test162 test1620 test1621 test1622 test1623 test1624 test1625 test1626 test1627 test1628 test1629 test163 test1630 test1631 test1632 test1633 test1634 test1635 test1636 test1637 test1638 test1639 test164 test1640 test1641 test1642 test1643 test1644 test1645 test165 test1650 test1651 test1652 test1653 test1654 test1655 test1656 test1657 test1658 test1659 test166 test1660 test1661 test1662 test1663 test1664 test1665 test1666 test1667 test1668 test1669 test167 test1670 test1671 test1672 test1673 test1674 test1675 test1676 test168 test1680 test1681 test1682 test1683 test1684 test1685 test169 test17 test170 test1700 test1701 test1702 test1703 test1704 test1705 test1706 test1707 test1708 test1709 test171 test1710 test1711 test1712 test1713 test1714 test1715 test172 test1720 test1721 test173 test174 test175 test176 test177 test178 test179 test18 test180 test1800 test1801 test1802 test181 test182 test183 test184 test1847 test1848 test1849 test185 test1850 test1851 test186 test187 test188 test189 test19 test190 test1900 test1901 test1902 test1903 test1904 test1905 test1906 test1907 test1908 test1909 test191 test1910 test1911 test1912 test1913 test1914 test1915 test1916 test1917 test1918 test1919 test192 test1920 test1921 test193 test1933 test1934 test1935 test1936 test1937 test1938 test1939 test194 test1940 test1941 test1942 test1943 test1944 test1945 test1946 test1947 test1948 test195 test1955 test1956 test1957 test1958 test1959 test196 test1960 test1964 test1965 test1966 test197 test1970 test1971 test1972 test1973 test1974 test1975 test1976 test1977 test1978 test1979 test198 test1980 test1981 test1982 test1983 test1984 test199 test2 test20 test200 test2000 test2001 test2002 test2003 test2004 test2005 test2006 test2007 test2008 test2009 test201 test2010 test2011 test2012 test2013 test2014 test202 test2023 test2024 test2025 test2026 test2027 test2028 test2029 test203 test2030 test2031 test2032 test2033 test2034 test2035 test2037 test2038 test2039 test204 test2040 test2041 test2042 test2043 test2044 test2045 test2046 test2047 test2048 test2049 test205 test2050 test2051 test2052 test2053 test2054 test2055 test2056 test2057 test2058 test2059 test206 test2060 test2061 test2062 test2063 test2064 test2065 test2066 test2067 test2068 test2069 test207 test2070 test2071 test2072 test2073 test2074 test2075 test2076 test2077 test2078 test2079 test208 test2080 test2081 test2082 test2083 test2084 test2085 test2086 test2087 test2088 test2089 test209 test2090 test2091 test2092 test21 test210 test2100 test2101 test2102 test2103 test2104 test211 test212 test213 test214 test215 test216 test217 test218 test219 test22 test220 test2200 test2201 test2202 test2203 test2204 test2205 test2206 test2207 test221 test222 test223 test224 test225 test226 test227 test228 test229 test23 test230 test2300 test2301 test2302 test2303 test2304 test2306 test2307 test2308 test2309 test231 test232 test233 test234 test235 test236 test237 test238 test239 test24 test240 test2400 test2401 test2402 test2403 test2404 test2405 test2406 test2407 test2408 test2409 test241 test2410 test2411 test242 test243 test244 test245 test246 test247 test248 test249 test25 test250 test2500 test2501 test2502 test2503 test2504 test2505 test2506 test251 test252 test253 test254 test255 test256 test257 test258 test259 test26 test260 test2600 test2601 test2602 test2603 test2604 test2605 test261 test262 test263 test264 test265 test266 test267 test268 test269 test27 test270 test2700 test2701 test2702 test2703 test2704 test2705 test2706 test2707 test2708 test2709 test271 test2710 test2711 test2712 test2713 test2714 test2715 test2716 test2717 test2718 test2719 test272 test2720 test2721 test2722 test2723 test273 test274 test275 test276 test277 test278 test279 test28 test280 test281 test282 test283 test284 test285 test286 test287 test288 test289 test29 test290 test291 test292 test293 test294 test295 test296 test297 test298 test299 test3 test30 test300 test3000 test3001 test3002 test3003 test3004 test3005 test3006 test3007 test3008 test3009 test301 test3010 test3011 test3012 test3013 test3014 test3015 test3016 test3017 test3018 test3019 test302 test3020 test3021 test3022 test3023 test3024 test3025 test3026 test3027 test3028 test3029 test303 test3030 test3031 test3032 test3033 test3034 test3035 test3036 test304 test305 test306 test307 test308 test309 test31 test310 test3100 test3101 test3102 test3103 test3104 test3105 test3106 test311 test312 test313 test314 test315 test316 test317 test318 test319 test32 test320 test3200 test3201 test3202 test3203 test3204 test3205 test3206 test3207 test3208 test3209 test321 test3210 test3211 test3212 test3213 test3214 test3215 test3216 test3217 test3218 test3219 test322 test3220 test323 test324 test325 test326 test327 test328 test329 test33 test330 test3300 test3301 test3302 test331 test332 test333 test334 test335 test336 test337 test338 test339 test34 test340 test341 test342 test343 test344 test345 test346 test347 test348 test349 test35 test350 test351 test352 test353 test354 test355 test356 test357 test358 test359 test36 test360 test361 test362 test363 test364 test365 test366 test367 test368 test369 test37 test370 test371 test372 test373 test374 test375 test376 test378 test379 test38 test380 test381 test383 test384 test385 test386 test387 test388 test389 test39 test390 test391 test392 test393 test394 test395 test396 test397 test398 test399 test4 test40 test400 test4000 test4001 test401 test402 test403 test404 test405 test406 test407 test408 test409 test41 test410 test411 test412 test413 test414 test415 test416 test417 test418 test419 test42 test420 test421 test422 test423 test424 test425 test426 test427 test428 test429 test43 test430 test431 test432 test433 test434 test435 test436 test437 test438 test439 test44 test440 test441 test442 test443 test444 test445 test446 test447 test448 test449 test45 test450 test451 test452 test453 test454 test455 test456 test457 test458 test459 test46 test460 test461 test462 test463 test467 test468 test469 test47 test470 test471 test472 test473 test474 test475 test476 test477 test478 test479 test48 test480 test481 test482 test483 test484 test485 test486 test487 test488 test489 test49 test490 test491 test492 test493 test494 test495 test496 test497 test498 test499 test5 test50 test500 test501 test502 test503 test504 test505 test506 test507 test508 test509 test51 test510 test511 test512 test513 test514 test515 test516 test517 test518 test519 test52 test520 test521 test522 test523 test524 test525 test526 test527 test528 test529 test53 test530 test531 test532 test533 test534 test535 test536 test537 test538 test539 test54 test540 test541 test542 test543 test544 test545 test546 test547 test548 test549 test55 test550 test551 test552 test553 test554 test555 test556 test557 test558 test559 test56 test560 test561 test562 test563 test564 test565 test566 test567 test568 test569 test57 test570 test571 test572 test573 test574 test575 test576 test577 test578 test579 test58 test580 test581 test582 test583 test584 test585 test586 test587 test588 test589 test59 test590 test591 test592 test593 test594 test595 test596 test597 test598 test599 test6 test60 test600 test601 test602 test603 test604 test605 test606 test607 test608 test609 test61 test610 test611 test612 test613 test614 test615 test616 test617 test618 test619 test62 test620 test621 test622 test623 test624 test625 test626 test627 test628 test629 test63 test630 test631 test632 test633 test634 test635 test636 test637 test638 test639 test64 test640 test641 test642 test643 test644 test645 test646 test647 test648 test649 test65 test650 test651 test652 test653 test654 test655 test656 test658 test659 test66 test660 test661 test662 test663 test664 test665 test666 test667 test668 test669 test67 test670 test671 test672 test673 test674 test675 test676 test677 test678 test679 test68 test680 test681 test682 test683 test684 test685 test686 test687 test688 test689 test69 test690 test691 test692 test693 test694 test695 test696 test697 test698 test699 test7 test70 test700 test701 test702 test703 test704 test705 test706 test707 test708 test709 test71 test710 test711 test712 test713 test714 test715 test716 test717 test718 test719 test72 test720 test721 test722 test723 test724 test725 test726 test727 test728 test729 test73 test730 test731 test732 test733 test734 test735 test736 test737 test738 test739 test74 test740 test741 test742 test743 test744 test745 test746 test747 test748 test749 test75 test750 test751 test752 test753 test754 test755 test756 test757 test758 test759 test76 test760 test761 test762 test763 test764 test765 test766 test767 test768 test769 test77 test770 test771 test772 test773 test774 test775 test776 test777 test778 test779 test78 test780 test781 test782 test783 test784 test785 test786 test787 test788 test789 test79 test790 test791 test792 test793 test794 test795 test796 test797 test798 test799 test8 test80 test800 test801 test802 test803 test804 test805 test806 test807 test808 test809 test81 test810 test811 test812 test813 test814 test815 test816 test817 test818 test819 test82 test820 test821 test822 test823 test824 test825 test826 test827 test828 test829 test83 test830 test831 test832 test833 test834 test835 test836 test837 test838 test839 test84 test840 test841 test842 test843 test844 test845 test846 test847 test848 test849 test85 test850 test851 test852 test853 test854 test855 test856 test857 test858 test859 test86 test860 test861 test862 test863 test864 test865 test866 test867 test868 test869 test87 test870 test871 test872 test873 test874 test875 test876 test877 test878 test879 test88 test880 test881 test882 test883 test884 test885 test886 test887 test888 test889 test89 test890 test891 test892 test893 test894 test895 test896 test897 test898 test899 test9 test90 test900 test901 test902 test903 test904 test905 test906 test907 test908 test909 test91 test910 test911 test912 test913 test914 test915 test916 test917 test918 test919 test92 test920 test921 test922 test923 test924 test925 test926 test927 test928 test929 test93 test930 test931 test932 test933 test934 test935 test936 test937 test938 test939 test94 test940 test941 test942 test943 test944 test945 test946 test947 test948 test949 test95 test950 test951 test952 test953 test954 test955 test956 test957 test958 test959 test96 test960 test961 test962 test963 test964 test965 test966 test967 test968 test969 test97 test970 test971 test972 test973 test974 test975 test976 test977 test978 test979 test98 test980 test981 test982 test983 test984 test985 test986 test987 test988 test989 test99 test990 test991 test992 test993 test994 test995 test996 test997 test998 test999
http
testenv
mod_curltest .gitignore mod_curltest.c
__init__.py caddy.py certs.py client.py curl.py dante.py dnsd.py env.py httpd.py nghttpx.py ports.py sshd.py vsftpd.py ws_echo_server.py
.gitignore CMakeLists.txt Makefile.am config.ini.in conftest.py requirements.txt scorecard.py test_01_basic.py test_02_download.py test_03_goaway.py test_04_stuttered.py test_05_errors.py test_06_eyeballs.py test_07_upload.py test_08_caddy.py test_09_push.py test_10_proxy.py test_11_unix.py test_12_reuse.py test_13_proxy_auth.py test_14_auth.py test_15_tracing.py test_16_info.py test_17_ssl_use.py test_18_methods.py test_19_shutdown.py test_20_websockets.py test_21_resolve.py test_22_httpsrr.py test_30_vsftpd.py test_31_vsftpds.py test_32_ftps_vsftpd.py test_40_socks.py test_50_scp.py test_51_sftp.py
libtest .gitignore CMakeLists.txt Makefile.am Makefile.inc cli_ftp_upload.c cli_h2_pausing.c cli_h2_serverpush.c cli_h2_upgrade_extreme.c cli_hx_download.c cli_hx_upload.c cli_tls_session_reuse.c cli_upload_pausing.c cli_ws_data.c cli_ws_pingpong.c first.c first.h lib1156.c lib1301.c lib1308.c lib1485.c lib1500.c lib1501.c lib1502.c lib1506.c lib1507.c lib1508.c lib1509.c lib1510.c lib1511.c lib1512.c lib1513.c lib1514.c lib1515.c lib1517.c lib1518.c lib1520.c lib1522.c lib1523.c lib1525.c lib1526.c lib1527.c lib1528.c lib1529.c lib1530.c lib1531.c lib1532.c lib1533.c lib1534.c lib1535.c lib1536.c lib1537.c lib1538.c lib1540.c lib1541.c lib1542.c lib1545.c lib1549.c lib1550.c lib1551.c lib1552.c lib1553.c lib1554.c lib1555.c lib1556.c lib1557.c lib1558.c lib1559.c lib1560.c lib1564.c lib1565.c lib1567.c lib1568.c lib1569.c lib1571.c lib1576.c lib1582.c lib1587.c lib1588.c lib1589.c lib1591.c lib1592.c lib1593.c lib1594.c lib1597.c lib1598.c lib1599.c lib1662.c lib1900.c lib1901.c lib1902.c lib1903.c lib1905.c lib1906.c lib1907.c lib1908.c lib1910.c lib1911.c lib1912.c lib1913.c lib1915.c lib1916.c lib1918.c lib1919.c lib1920.c lib1921.c lib1933.c lib1934.c lib1935.c lib1936.c lib1937.c lib1938.c lib1939.c lib1940.c lib1945.c lib1947.c lib1948.c lib1955.c lib1956.c lib1957.c lib1958.c lib1959.c lib1960.c lib1964.c lib1965.c lib1970.c lib1971.c lib1972.c lib1973.c lib1974.c lib1975.c lib1977.c lib1978.c lib2023.c lib2032.c lib2082.c lib2301.c lib2302.c lib2304.c lib2306.c lib2308.c lib2309.c lib2402.c lib2404.c lib2405.c lib2502.c lib2504.c lib2505.c lib2506.c lib2700.c lib3010.c lib3025.c lib3026.c lib3027.c lib3033.c lib3034.c lib3100.c lib3101.c lib3102.c lib3103.c lib3104.c lib3105.c lib3207.c lib3208.c lib500.c lib501.c lib502.c lib503.c lib504.c lib505.c lib506.c lib507.c lib508.c lib509.c lib510.c lib511.c lib512.c lib513.c lib514.c lib515.c lib516.c lib517.c lib518.c lib519.c lib520.c lib521.c lib523.c lib524.c lib525.c lib526.c lib530.c lib533.c lib536.c lib537.c lib539.c lib540.c lib541.c lib542.c lib543.c lib544.c lib547.c lib549.c lib552.c lib553.c lib554.c lib555.c lib556.c lib557.c lib558.c lib559.c lib560.c lib562.c lib564.c lib566.c lib567.c lib568.c lib569.c lib570.c lib571.c lib572.c lib573.c lib574.c lib575.c lib576.c lib578.c lib579.c lib582.c lib583.c lib586.c lib589.c lib590.c lib591.c lib597.c lib598.c lib599.c lib643.c lib650.c lib651.c lib652.c lib653.c lib654.c lib655.c lib658.c lib659.c lib661.c lib666.c lib667.c lib668.c lib670.c lib674.c lib676.c lib677.c lib678.c lib694.c lib695.c lib751.c lib753.c lib757.c lib758.c lib766.c memptr.c mk-lib1521.pl test1013.pl test1022.pl test307.pl test610.pl test613.pl testtrace.c testtrace.h testutil.c testutil.h unitcheck.h
server .checksrc .gitignore CMakeLists.txt Makefile.am Makefile.inc dnsd.c first.c first.h getpart.c mqttd.c resolve.c rtspd.c sockfilt.c socksd.c sws.c tftpd.c util.c
tunit .gitignore CMakeLists.txt Makefile.am Makefile.inc README.md tool1394.c tool1604.c tool1621.c tool1622.c tool1623.c tool1720.c
unit .gitignore CMakeLists.txt Makefile.am Makefile.inc README.md unit1300.c unit1302.c unit1303.c unit1304.c unit1305.c unit1307.c unit1309.c unit1323.c unit1330.c unit1395.c unit1396.c unit1397.c unit1398.c unit1399.c unit1600.c unit1601.c unit1602.c unit1603.c unit1605.c unit1606.c unit1607.c unit1608.c unit1609.c unit1610.c unit1611.c unit1612.c unit1614.c unit1615.c unit1616.c unit1620.c unit1625.c unit1626.c unit1627.c unit1636.c unit1650.c unit1651.c unit1652.c unit1653.c unit1654.c unit1655.c unit1656.c unit1657.c unit1658.c unit1660.c unit1661.c unit1663.c unit1664.c unit1666.c unit1667.c unit1668.c unit1669.c unit1674.c unit1675.c unit1676.c unit1979.c unit1980.c unit2600.c unit2601.c unit2602.c unit2603.c unit2604.c unit2605.c unit3200.c unit3205.c unit3211.c unit3212.c unit3213.c unit3214.c unit3216.c unit3219.c unit3300.c unit3301.c unit3302.c
.gitignore CMakeLists.txt Makefile.am allversions.pm appveyor.pm azure.pm config.in configurehelp.pm.in devtest.pl dictserver.py directories.pm ech_combos.py ech_tests.sh ftpserver.pl getpart.pm globalconfig.pm http-server.pl http2-server.pl http3-server.pl memanalyze.pl memanalyzer.pm negtelnetserver.py nghttpx.conf pathhelp.pm processhelp.pm requirements.txt rtspserver.pl runner.pm runtests.pl secureserver.pl serverhelp.pm servers.pm smbserver.py sshhelp.pm sshserver.pl test1119.pl test1135.pl test1139.pl test1140.pl test1165.pl test1167.pl test1173.pl test1175.pl test1177.pl test1222.pl test1275.pl test1276.pl test1477.pl test1486.pl test1488.pl test1544.pl test1707.pl test745.pl test971.pl testcurl.pl testutil.pm tftpserver.pl util.py valgrind.pm valgrind.supp
.clang-tidy.yml .dir-locals.el .editorconfig .git-blame-ignore-revs .gitattributes .gitignore .mailmap CHANGES.md CMakeLists.txt COPYING Dockerfile GIT-INFO.md Makefile.am README README.md RELEASE-NOTES REUSE.toml SECURITY.md acinclude.m4 appveyor.sh appveyor.yml configure.ac curl-config.in libcurl.pc.in renovate.json
examples .env config.ini crypto_test.lua env_test.lua fs_example.lua http_server.lua https_test.lua ini_example.lua json.lua log.lua path_fs_example.lua process_example.lua request_download.lua request_test.lua run_all.lua sqlite_example.lua sqlite_http_template.lua stash_test.lua template_test.lua timer.lua websocket.lua
iniparser
.github
ISSUE_TEMPLATE config.yml
workflows disable-pull-requests.yml trigger-gitlab-ci.yml
cmake JoinPaths.cmake config.cmake.in pc.in
example iniexample.c iniwrite.c parse.c twisted-errors.ini twisted-genhuge.py twisted-ofkey.ini twisted-ofval.ini twisted.ini
src dictionary.c dictionary.h iniparser.c iniparser.h
test
ressources
bad_ini ends_well.ini twisted-errors.ini twisted-ofkey.ini twisted-ofval.ini
good_ini empty.ini spaced.ini spaced2.ini twisted.ini
gruezi.ini old.ini quotes.ini utf8.ini
CMakeLists.txt test_dictionary.c test_iniparser.c unity-config.yml unity_config.h
.cmake-format.py .gitignore .gitlab-ci.yml .gitmessage .travis.yml AUTHORS CMakeLists.txt FAQ-en.md FAQ-zhcn.md INSTALL LICENSE README.md compile_commands.json
jinjac
example CMakeLists.txt example.c
jinjac_test_app CMakeLists.txt jinjac_test_app.c
libjinjac
include jinjac.h
src CMakeLists.txt ast.c ast.h block_statement.c block_statement.h buffer.c buffer.h buildin.c buildin.h common.h convert.c convert.h flex_decl.h jfunction.c jfunction.h jinja_expression.l jinja_expression.y jinjac_parse.c jinjac_parse.h jinjac_stream.c jinjac_stream.h jlist.c jlist.h jobject.c jobject.h parameter.c parameter.h str_obj.c str_obj.h trace.c trace.h
CMakeLists.txt
test .gitignore CMakeLists.txt autotest.rb test_01.expected test_01.jinja test_01b.expected test_01b.jinja test_01c.expected test_01c.jinja test_01d.expected test_01d.jinja test_02.expected test_02.jinja test_03.expected test_03.jinja test_04.expected test_04.jinja test_05.expected test_05.jinja test_06.expected test_06.jinja test_07.expected test_07.jinja test_08.expected test_08.jinja test_08b.expected test_08b.jinja test_09.expected test_09.jinja test_10.expected test_10.jinja test_11.expected test_11.jinja test_12.expected test_12.jinja test_13.expected test_13.jinja test_14.expected test_14.jinja test_15.expected test_15.jinja test_16.expected test_16.jinja test_17.expected test_17.jinja test_18.expected test_18.jinja test_18b.expected test_18b.jinja test_18c.expected test_18c.jinja test_19.expected test_19.jinja test_19b.expected test_19b.jinja test_19c.expected test_19c.jinja test_19d.expected test_19d.jinja test_19e.expected test_19e.jinja test_19f.expected test_19f.jinja test_20.expected test_20.jinja test_21.expected test_21.jinja test_22.expected test_22.jinja test_22a.expected test_22a.jinja test_22b.expected test_22b.jinja test_23.expected test_23.jinja test_24.expected test_24.jinja
.gitignore CMakeLists.txt LICENSE.txt README.md build_coverage.sh build_debug.sh build_release.sh cppcheck_analysis.sh
libev Changes LICENSE Makefile Makefile.am Makefile.in README Symbols.ev Symbols.event aclocal.m4 autogen.sh compile config.guess config.h config.h.in config.status config.sub configure configure.ac depcomp ev++.h ev.3 ev.c ev.h ev.pod ev_epoll.c ev_kqueue.c ev_poll.c ev_port.c ev_select.c ev_vars.h ev_win32.c ev_wrap.h event.c event.h install-sh libev.m4 libtool ltmain.sh missing mkinstalldirs stamp-h1
luajit
doc
img contact.png
bluequad-print.css bluequad.css contact.html ext_buffer.html ext_c_api.html ext_ffi.html ext_ffi_api.html ext_ffi_semantics.html ext_ffi_tutorial.html ext_jit.html ext_profiler.html extensions.html install.html luajit.html running.html
dynasm dasm_arm.h dasm_arm.lua dasm_arm64.h dasm_arm64.lua dasm_mips.h dasm_mips.lua dasm_mips64.lua dasm_ppc.h dasm_ppc.lua dasm_proto.h dasm_x64.lua dasm_x86.h dasm_x86.lua dynasm.lua
etc luajit.1 luajit.pc
src
host .gitignore README buildvm.c buildvm.h buildvm_asm.c buildvm_fold.c buildvm_lib.c buildvm_libbc.h buildvm_peobj.c genlibbc.lua genminilua.lua genversion.lua minilua.c
jit .gitignore bc.lua bcsave.lua dis_arm.lua dis_arm64.lua dis_arm64be.lua dis_mips.lua dis_mips64.lua dis_mips64el.lua dis_mips64r6.lua dis_mips64r6el.lua dis_mipsel.lua dis_ppc.lua dis_x64.lua dis_x86.lua dump.lua p.lua v.lua zone.lua
.gitignore Makefile Makefile.dep lauxlib.h lib_aux.c lib_base.c lib_bit.c lib_buffer.c lib_debug.c lib_ffi.c lib_init.c lib_io.c lib_jit.c lib_math.c lib_os.c lib_package.c lib_string.c lib_table.c lj_alloc.c lj_alloc.h lj_api.c lj_arch.h lj_asm.c lj_asm.h lj_asm_arm.h lj_asm_arm64.h lj_asm_mips.h lj_asm_ppc.h lj_asm_x86.h lj_assert.c lj_bc.c lj_bc.h lj_bcdump.h lj_bcread.c lj_bcwrite.c lj_buf.c lj_buf.h lj_carith.c lj_carith.h lj_ccall.c lj_ccall.h lj_ccallback.c lj_ccallback.h lj_cconv.c lj_cconv.h lj_cdata.c lj_cdata.h lj_char.c lj_char.h lj_clib.c lj_clib.h lj_cparse.c lj_cparse.h lj_crecord.c lj_crecord.h lj_ctype.c lj_ctype.h lj_debug.c lj_debug.h lj_def.h lj_dispatch.c lj_dispatch.h lj_emit_arm.h lj_emit_arm64.h lj_emit_mips.h lj_emit_ppc.h lj_emit_x86.h lj_err.c lj_err.h lj_errmsg.h lj_ff.h lj_ffrecord.c lj_ffrecord.h lj_frame.h lj_func.c lj_func.h lj_gc.c lj_gc.h lj_gdbjit.c lj_gdbjit.h lj_ir.c lj_ir.h lj_ircall.h lj_iropt.h lj_jit.h lj_lex.c lj_lex.h lj_lib.c lj_lib.h lj_load.c lj_mcode.c lj_mcode.h lj_meta.c lj_meta.h lj_obj.c lj_obj.h lj_opt_dce.c lj_opt_fold.c lj_opt_loop.c lj_opt_mem.c lj_opt_narrow.c lj_opt_sink.c lj_opt_split.c lj_parse.c lj_parse.h lj_prng.c lj_prng.h lj_profile.c lj_profile.h lj_record.c lj_record.h lj_serialize.c lj_serialize.h lj_snap.c lj_snap.h lj_state.c lj_state.h lj_str.c lj_str.h lj_strfmt.c lj_strfmt.h lj_strfmt_num.c lj_strscan.c lj_strscan.h lj_tab.c lj_tab.h lj_target.h lj_target_arm.h lj_target_arm64.h lj_target_mips.h lj_target_ppc.h lj_target_x86.h lj_trace.c lj_trace.h lj_traceerr.h lj_udata.c lj_udata.h lj_vm.h lj_vmevent.c lj_vmevent.h lj_vmmath.c ljamalg.c lua.h lua.hpp luaconf.h luajit.c luajit_rolling.h lualib.h msvcbuild.bat nxbuild.bat ps4build.bat ps5build.bat psvitabuild.bat vm_arm.dasc vm_arm64.dasc vm_mips.dasc vm_mips64.dasc vm_ppc.dasc vm_x64.dasc vm_x86.dasc xb1build.bat xedkbuild.bat
.gitattributes .gitignore .relver COPYRIGHT Makefile README
sqlite shell.c sqlite3.c sqlite3.h sqlite3ext.h
wolfssl
.github
ISSUE_TEMPLATE bug_report.yaml other.yaml
actions
install-apt-deps action.yml
scripts
zephyr-4.x external_libc.conf zephyr-test.sh
openssl-ech.sh tls-anvil-test.sh
workflows
disabled haproxy.yml hitch.yml hostap.yml
hostap-files
configs
07c9f183ea744ac04585fb6dd10220c75a5e2e74 hostapd.config tests wpa_supplicant.config
b607d2723e927a3446d89aed813f1aa6068186bb hostapd.config tests wpa_supplicant.config
hostap_2_10 extra.patch hostapd.config tests wpa_supplicant.config
Makefile README dbus-wpa_supplicant.conf
ada.yml arduino.yml async-examples.yml async.yml atecc608-sim.yml bind.yml cmake-autoconf.yml cmake.yml codespell.yml coverity-scan-fixes.yml cryptocb-only.yml curl.yml cyrus-sasl.yml disable-pk-algs.yml docker-Espressif.yml docker-OpenWrt.yml emnet-nonblock.yml fil-c.yml freertos-mem-track.yml gencertbuf.yml grpc.yml haproxy.yml hostap-vm.yml intelasm-c-fallback.yml ipmitool.yml jwt-cpp.yml krb5.yml libspdm.yml libssh2.yml libvncserver.yml linuxkm.yml macos-apple-native-cert-validation.yml mbedtls.sh mbedtls.yml membrowse-comment.yml membrowse-onboard.yml membrowse-report.yml memcached.sh memcached.yml mono.yml mosquitto.yml msmtp.yml msys2.yml multi-arch.yml multi-compiler.yml net-snmp.yml nginx.yml no-malloc.yml no-tls.yml nss.sh nss.yml ntp.yml ocsp.yml openldap.yml openssh.yml openssl-ech.yml opensslcoexist.yml openvpn.yml os-check.yml packaging.yml pam-ipmi.yml pq-all.yml pr-commit-check.yml psk.yml puf.yml python.yml rng-tools.yml rust-wrapper.yml se050-sim.yml smallStackSize.yml socat.yml softhsm.yml sssd.yml stm32-sim.yml stsafe-a120-sim.yml stunnel.yml symbol-prefixes.yml threadx.yml tls-anvil.yml trackmemory.yml watcomc.yml win-csharp-test.yml wolfCrypt-Wconversion.yml wolfboot-integration.yml wolfsm.yml xcode.yml zephyr-4.x.yml zephyr.yml
PULL_REQUEST_TEMPLATE.md SECURITY.md membrowse-targets.json
Docker
OpenWrt Dockerfile README.md runTests.sh
packaging
debian Dockerfile
fedora Dockerfile
wolfCLU Dockerfile README.md
yocto Dockerfile buildAndPush.sh
Dockerfile Dockerfile.cross-compiler README.md buildAndPush.sh include.am run.sh
IDE
ARDUINO
sketches
wolfssl_client README.md
wolfssl_server README.md
wolfssl_version README.md
README.md
Arduino_README_prepend.md README.md include.am keywords.txt library.properties.template wolfssl-arduino.cpp wolfssl-arduino.sh wolfssl.h
AURIX Cpu0_Main.c README.md include.am user_settings.h wolf_main.c
Android Android.bp README.md include.am user_settings.h
CRYPTOCELL README.md include.am main.c user_settings.h
CSBENCH include.am user_settings.h
ECLIPSE
DEOS
deos_wolfssl .options
README.md deos_malloc.c include.am tls_wolfssl.c tls_wolfssl.h user_settings.h
MICRIUM README.md client_wolfssl.c client_wolfssl.h include.am server_wolfssl.c server_wolfssl.h user_settings.h wolfsslRunTests.c
RTTHREAD README.md include.am user_settings.h wolfssl_test.c
SIFIVE README.md include.am
Espressif
ESP-IDF
examples
template
VisualGDB wolfssl_template_IDF_v5.1_ESP32.vgdbproj
components
wolfssl
include user_settings.h
CMakeLists.txt Kconfig README.md component.mk
main
include main.h
CMakeLists.txt Kconfig.projbuild component.mk main.c
CMakeLists.txt Makefile README.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp8266
wolfssl_benchmark
VisualGDB wolfssl_benchmark_IDF_v4.4_ESP32.sln wolfssl_benchmark_IDF_v4.4_ESP32.vgdbproj wolfssl_benchmark_IDF_v5_ESP32.sln wolfssl_benchmark_IDF_v5_ESP32.vgdbproj wolfssl_benchmark_IDF_v5_ESP32C3.sln wolfssl_benchmark_IDF_v5_ESP32C3.vgdbproj wolfssl_benchmark_IDF_v5_ESP32S3.sln wolfssl_benchmark_IDF_v5_ESP32S3.vgdbproj
components
wolfssl
include user_settings.h
CMakeLists.txt Kconfig README.md component.mk
main
include main.h
CMakeLists.txt Kconfig.projbuild component.mk main.c
CMakeLists.txt Makefile README.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp8266
wolfssl_client
VisualGDB README.md wolfssl_client_IDF_v5_ESP32.sln wolfssl_client_IDF_v5_ESP32.vgdbproj
components
wolfssl
include user_settings.h
CMakeLists.txt Kconfig README.md component.mk
main
include client-tls.h main.h time_helper.h wifi_connect.h
CMakeLists.txt Kconfig.projbuild client-tls.c component.mk main.c time_helper.c wifi_connect.c
CMakeLists.txt Makefile README.md README_server_sm.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp32c2 sdkconfig.defaults.esp8266 wolfssl_client_ESP8266.vgdbproj
wolfssl_server
VisualGDB README.md wolfssl_server_IDF_v5_ESP32.sln wolfssl_server_IDF_v5_ESP32.vgdbproj
components
wolfssl
include user_settings.h
CMakeLists.txt Kconfig README.md component.mk
main
include main.h server-tls.h time_helper.h wifi_connect.h
CMakeLists.txt Kconfig.projbuild component.mk main.c server-tls.c time_helper.c wifi_connect.c
CMakeLists.txt Makefile README.md README_server_sm.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp32c2 sdkconfig.defaults.esp8266 wolfssl_server_ESP8266.vgdbproj
wolfssl_test
VisualGDB wolfssl_test-IDF_v5_ESP32.sln wolfssl_test-IDF_v5_ESP32.vgdbproj wolfssl_test-IDF_v5_ESP32C3.sln wolfssl_test-IDF_v5_ESP32C3.vgdbproj wolfssl_test-IDF_v5_ESP32C6.sln wolfssl_test-IDF_v5_ESP32C6.vgdbproj wolfssl_test_IDF_v5_ESP32S3.sln wolfssl_test_IDF_v5_ESP32S3.vgdbproj
components
wolfssl
include user_settings.h
CMakeLists.txt Kconfig README.md component.mk
main
include main.h
CMakeLists.txt Kconfig.projbuild component.mk main.c
CMakeLists.txt Makefile README.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp32 sdkconfig.defaults.esp32c3 sdkconfig.defaults.esp32c6 sdkconfig.defaults.esp32h2 sdkconfig.defaults.esp32s2 sdkconfig.defaults.esp32s3 sdkconfig.defaults.esp8266 testAll.sh testMonitor.sh wolfssl_test_ESP8266.sln wolfssl_test_ESP8266.vgdbproj
wolfssl_test_idf
VisualGDB VisualGDB_wolfssl_test_idf.sln VisualGDB_wolfssl_test_idf.vgdbproj
main CMakeLists.txt Kconfig.projbuild component.mk main.c main_wip.c.ex time_helper.c time_helper.h
CMakeLists.txt Kconfig.projbuild README.md component.mk sdkconfig.defaults
README.md
libs CMakeLists.txt README.md component.mk tigard.cfg
test CMakeLists.txt README.md component.mk test_wolfssl.c
README.md README_32se.md UPDATE.md compileAllExamples.sh dummy_config_h dummy_test_paths.h setup.sh setup_win.bat user_settings.h
README.md include.am
GCC-ARM
Header user_settings.h
Source armtarget.c benchmark_main.c test_main.c tls_client.c tls_server.c wolf_main.c
Makefile Makefile.bench Makefile.client Makefile.common Makefile.server Makefile.static Makefile.test README.md include.am linker.ld linker_fips.ld
Gaisler-BCC README.md include.am
HEXAGON
DSP Makefile wolfssl_dsp.idl
Makefile README.md build.sh ecc-verify-benchmark.c ecc-verify.c include.am user_settings.h
HEXIWEAR
wolfSSL_HW .cwGeneratedFileSetLog user_settings.h
IAR-EWARM
Projects
benchmark benchmark-main.c current_time.c wolfCrypt-benchmark.ewd wolfCrypt-benchmark.ewp
common minimum-startup.c wolfssl.icf
lib wolfSSL-Lib.ewd wolfSSL-Lib.ewp
test test-main.c wolfCrypt-test.ewd wolfCrypt-test.ewp
user_settings.h wolfssl.eww
embOS
SAMV71_XULT
embOS_SAMV71_XULT_Linker_Script samv71q21_wolfssl.icf
embOS_SAMV71_XULT_user_settings user_settings.h user_settings_simple_example.h user_settings_verbose_example.h
embOS_wolfcrypt_benchmark_SAMV71_XULT
Application runBenchmarks.c
README_wolfcrypt_benchmark wolfcrypt_benchmark.ewd wolfcrypt_benchmark.ewp
embOS_wolfcrypt_lib_SAMV71_XULT README_wolfcrypt_lib wolfcrypt_lib.ewd wolfcrypt_lib.ewp
embOS_wolfcrypt_test_SAMV71_XULT
Application runWolfcryptTests.c
README_wolfcrypt_test wolfcrypt_test.ewd wolfcrypt_test.ewp
README_SAMV71
custom_port
custom_port_Linker_Script samv71q21_wolfssl.icf
custom_port_user_settings user_settings.h
wolfcrypt_benchmark_custom_port
Application runBenchmarks.c
wolfcrypt_test_custom_port
Application runWolfcryptTests.c
README_custom_port
extract_trial_here README_extract_trial_here
README
.gitignore README
IAR-MSP430 Makefile README.md include.am main.c user_settings.h
INTIME-RTOS Makefile README.md include.am libwolfssl.c libwolfssl.vcxproj user_settings.h wolfExamples.c wolfExamples.h wolfExamples.sln wolfExamples.vcxproj wolfssl-lib.sln wolfssl-lib.vcxproj
Infineon README.md include.am user_settings.h
KDS
config user_settings.h
include.am
LINUX-SGX README.md build.sh clean.sh include.am sgx_t_static.mk
LPCXPRESSO
lib_wolfssl lpc_18xx_port.c user_settings.h
wolf_example
src lpc_18xx_startup.c wolfssl_example.c
readme.txt
README.md
M68K
benchmark Makefile main.cpp
testwolfcrypt Makefile main.cpp
Makefile README.md include.am user_settings.h
MCUEXPRESSO
RT1170 fsl_caam_c.patch fsl_caam_h.patch user_settings.h
benchmark
source run_benchmark.c
wolfssl liblinks.xml
README.md include.am user_settings.h wolfcrypt_test.c
MDK-ARM
LPC43xx time-LCP43xx.c
MDK-ARM
wolfSSL Retarget.c cert_data.c cert_data.h config-BARE-METAL.h config-FS.h config-RTX-TCP-FS.h config-WOLFLIB.h main.c shell.c time-CortexM3-4.c time-dummy.c wolfssl_MDK_ARM.c wolfssl_MDK_ARM.h
STM32F2xx_StdPeriph_Lib time-STM32F2xx.c
MDK5-ARM
Conf user_settings.h
Inc wolfssl_MDK_ARM.h
Projects
CryptBenchmark Abstract.txt CryptBenchmark.sct CryptBenchmark.uvoptx CryptBenchmark.uvprojx main.c
CryptTest Abstract.txt CryptTest.sct CryptTest.uvoptx CryptTest.uvprojx main.c
EchoClient Abstract.txt EchoClient.uvoptx EchoClient.uvprojx main.c wolfssl-link.sct
EchoServer Abstract.txt EchoServer.uvoptx EchoServer.uvprojx main.c wolfssl-link.sct
SimpleClient Abstract.txt SimpleClient.uvoptx SimpleClient.uvprojx main.c wolfssl-link.sct
SimpleServer Abstract.txt SimpleServer.uvoptx SimpleServer.uvprojx main.c wolfssl-link.sct
wolfSSL-Full Abstract.txt main.c shell.c time-CortexM3-4.c wolfsslFull.uvoptx wolfsslFull.uvprojx
wolfSSL-Lib Abstract.txt wolfSSL-Lib.uvoptx wolfSSL-Lib.uvprojx
Src ssl-dummy.c
README.md include.am
MPLABX16
wolfcrypt_test.X
nbproject
private configurations.xml private.xml
configurations.xml include.am project.xml
Makefile
wolfssl.X
nbproject configurations.xml include.am project.xml
Makefile
README.md include.am main.c user_settings.h
MQX Makefile README-jp.md README.md client-tls.c include.am server-tls.c user_config.h user_settings.h
MSVS-2019-AZSPHERE
client client.c client.h
server server.c server.h
shared util.h
wolfssl_new_azsphere
HardwareDefinitions
avnet_mt3620_sk
inc
hw template_appliance.h
template_appliance.json
mt3620_rdb
inc
hw template_appliance.h
template_appliance.json
seeed_mt3620_mdb
inc
hw template_appliance.h
template_appliance.json
.gitignore CMakeLists.txt CMakeSettings.json app_manifest.json applibs_versions.h launch.vs.json main.c
README.md include.am user_settings.h
MYSQL CMakeLists_wolfCrypt.txt CMakeLists_wolfSSL.txt do.sh
NDS README.md
NETOS Makefile.wolfcrypt.inc README.md include.am user_settings.h user_settings.h-cert2425 user_settings.h-cert3389 wolfssl_netos_custom.c
OPENSTM32 README.md
PlatformIO
examples
wolfssl_benchmark
include README main.h
lib README
src CMakeLists.txt main.c
test README
CMakeLists.txt README.md platformio.ini sdkconfig.defaults wolfssl_benchmark.code-workspace
wolfssl_test
include README main.h
lib README
src CMakeLists.txt main.c
test README
CMakeLists.txt README.md platformio.ini sdkconfig.defaults wolfssl_test.code-workspace
README.md wolfssl_platformio.code-workspace
README.md include.am
QNX
CAAM-DRIVER Makefile
example-client Makefile client-tls.c
example-cmac Makefile cmac-test.c
example-server Makefile server-tls.c
testwolfcrypt Makefile
wolfssl Makefile user_settings.h
README.md include.am
RISCV
SIFIVE-HIFIVE1 Makefile README.md include.am main.c user_settings.h
SIFIVE-UNLEASHED README.md include.am
include.am
ROWLEY-CROSSWORKS-ARM Kinetis_FlashPlacement.xml README.md arm_startup.c benchmark_main.c hw.h include.am kinetis_hw.c retarget.c test_main.c user_settings.h wolfssl.hzp wolfssl_ltc.hzp
Renesas
cs+
Projects
common strings.h unistd.h user_settings.h wolfssl_dummy.c
t4_demo README_en.txt README_jp.txt t4_demo.mtpj wolf_client.c wolf_demo.h wolf_main.c wolf_server.c
test test.mtpj test_main.c
wolfssl_lib wolfssl_lib.mtpj
README include.am
e2studio
DK-S7G2
benchmark-template
src app_entry.c
example_server-template
src app_entry.c
wolfcrypttest-template
src app_entry.c
wolfssl-template-project configuration.xml
README.md include.am user_settings.h
Projects
common strings.h unistd.h user_settings.h wolfssl_dummy.c
test
src key_data.c key_data.h test_main.c wolf_client.c wolf_server.c wolfssl_demo.h
tools generate_rsa_keypair.sh genhexbuf.pl rsa_pss_sign.sh
wolfssl
src .gitkeep
wolfcrypt
src .gitkeep
README include.am
RA6M3
benchmark-wolfcrypt
common .gitkeep
script .gitkeep
src wolfssl_thread_entry.c
client-wolfssl
common
src .gitkeep
script .gitkeep
src wolfssl_thread_entry.c
wolfssl_thread_entry.h
common
ra6m3g README.md
src freertos_tcp_port.c
user_settings.h util.h
server-wolfssl
common
src .gitkeep
script .gitkeep
src wolfssl_thread_entry.c
wolfssl_thread_entry.h
test-wolfcrypt
common .gitkeep
script .gitkeep
src wolfssl_thread_entry.c
wolfssl
src .gitkeep
wolfcrypt .gitkeep
README.md README_APRA6M_en.md README_APRA6M_jp.md include.am
RA6M3G README.md
RA6M4
common user_settings.h wolfssl_demo.h
test
key_data key_data.h key_data_sce.c
src
SEGGER_RTT myprint.c
common .gitignore
test_main.c wolf_client.c wolfssl_sce_unit_test.c
test_RA6M4Debug.launch
tools
example_keys generate_SignedCA.sh rsa_private.pem rsa_public.pem
README.md
README.md include.am
RX65N
GR-ROSE
common strings.h unistd.h user_settings.h wolfssl_dummy.c
smc smc.scfg
test
src key_data.c key_data.h test_main.c wolf_client.c wolf_server.c wolfssl_demo.h
test.rcpc test_HardwareDebug.launch
tools
example_keys generate_SignedCA.sh rsa_private.pem rsa_public.pem
README.md
wolfssl wolfssl.rcpc
README_EN.md README_JP.md include.am
RSK
resource section.esi
wolfssl wolfssl.rcpc
wolfssl_demo key_data.c key_data.h user_settings.h wolfssl_demo.c wolfssl_demo.h
InstructionManualForExample_RSK+RX65N-2MB_EN.pdf InstructionManualForExample_RSK+RX65N-2MB_JP.pdf README_EN.md README_JP.md include.am
RX72N
EnvisionKit
Simple
common sectioninfo.esi wolfssl_dummy.c
test
src
client simple_tcp_client.c simple_tls_tsip_client.c
server simple_tcp_server.c simple_tls_server.c
test_main.c wolfssl_simple_demo.h
test.rcpc test.scfg test_HardwareDebug.launch
wolfssl wolfssl.rcpc
README_EN.md README_JP.md
resource section.esi
tools
example_keys generate_SignedCA.sh rsa_private.pem rsa_public.pem
README.md
wolfssl wolfssl.rcpc
wolfssl_demo key_data.c key_data.h user_settings.h wolfssl_demo.c wolfssl_demo.h wolfssl_tsip_unit_test.c
InstructionManualForExample_RX72N_EnvisonKit_EN.pdf InstructionManualForExample_RX72N_EnvisonKit_JP.pdf README_EN.md README_JP.md include.am
RZN2L
common user_settings.h wolfssl_demo.h
test
src
serial_io app_print.c
test wolf_client.c wolf_server.c wolfssl_rsip_unit_test.c
wolfCrypt .gitignore
wolfSSL .gitignore
local_system_init.c rzn2l_tst_thread_entry.c wolfssl_dummy.c
README.md include.am
SK-S7G2
common user_settings.h
wolfssl_lib configuration.xml
.gitignore README.md include.am
STARCORE README.txt include.am starcore_test.c user_settings.h
STM32Cube README.md STM32_Benchmarks.md default_conf.ftl include.am main.c wolfssl_example.c wolfssl_example.h
SimplicityStudio README.md include.am test_wolf.c user_settings.h
TRUESTUDIO
wolfssl user_settings.h
README include.am
VS-ARM README.md include.am user_settings.h wolfssl.sln wolfssl.vcxproj
VS-AZURE-SPHERE
client app_manifest.json client.c client.h client.vcxproj
server app_manifest.json server.c server.h server.vcxproj
shared util.h
wolfcrypt_test app_manifest.json wolfcrypt_test.vcxproj
README.md include.am user_settings.h wolfssl.sln wolfssl.vcxproj
VisualDSP include.am user_settings.h wolf_tasks.c
WICED-STUDIO README include.am user_settings.h
WIN README.txt include.am test.vcxproj user_settings.h user_settings_dtls.h wolfssl-fips.sln wolfssl-fips.vcxproj
WIN-SGX ReadMe.txt include.am wolfSSL_SGX.edl wolfSSL_SGX.sln wolfSSL_SGX.vcxproj
WIN-SRTP-KDF-140-3 README.txt include.am resource.h test.vcxproj user_settings.h wolfssl-fips.rc wolfssl-fips.sln wolfssl-fips.vcxproj
WIN10 README.txt include.am resource.h test.vcxproj user_settings.h wolfssl-fips.rc wolfssl-fips.sln wolfssl-fips.vcxproj
WINCE README.md include.am user_settings.h user_settings.h.140-2-deprecated
WORKBENCH README.md include.am
XCODE
Benchmark
wolfBench
Assets.xcassets
AppIcon.appiconset Contents.json
Base.lproj LaunchScreen.storyboard Main.storyboard
AppDelegate.h AppDelegate.m Info.plist ViewController.h ViewController.m main.m
wolfBench.xcodeproj project.pbxproj
include.am
wolfssl-FIPS.xcodeproj project.pbxproj
wolfssl.xcodeproj project.pbxproj
wolfssl_testsuite.xcodeproj project.pbxproj
README.md build-for-i386.sh include.am user_settings.h
XCODE-FIPSv2
macOS-C++
Intel user_settings.h
M1 user_settings.h
include.am user_settings.h
XCODE-FIPSv5 README include.am user_settings.h
XCODE-FIPSv6 README include.am user_settings.h
XilinxSDK
2018_2 lscript.ld
2019_2
wolfCrypt_example
src lscript.ld
wolfCrypt_example_system wolfCrypt_example_system.sprj
2022_1
wolfCrypt_FreeRTOS_example wolfCrypt_FreeRTOS_example.prj
wolfCrypt_FreeRTOS_example_system wolfCrypt_FreeRTOS_example_system.sprj
wolfCrypt_example wolfCrypt_example.prj
wolfCrypt_example_system wolfCrypt_example_system.sprj
.gitignore
README.md bench.sh combine.sh eclipse_formatter_profile.xml graph.sh include.am user_settings.h wolfssl_example.c
apple-universal
wolfssl-multiplatform
wolfssl-multiplatform
Assets.xcassets
AccentColor.colorset Contents.json
AppIcon.appiconset Contents.json
Contents.json
ContentView.swift simple_client_example.c simple_client_example.h wolfssl-multiplatform-Bridging-Header.h wolfssl_multiplatform.entitlements wolfssl_multiplatformApp.swift wolfssl_test_driver.c wolfssl_test_driver.h
wolfssl-multiplatform.xcodeproj project.pbxproj
.gitignore README.md build-wolfssl-framework.sh include.am
iotsafe Makefile README.md ca-cert.c devices.c devices.h include.am main.c memory-tls.c startup.c target.ld user_settings.h
iotsafe-raspberrypi Makefile README.md client-tls13.c include.am main.c
mynewt README.md apps.wolfcrypttest.pkg.yml crypto.wolfssl.pkg.yml crypto.wolfssl.syscfg.yml include.am setup.sh
zephyr README.md include.am
include.am
RTOS
nuttx
wolfssl .gitignore Kconfig Make.defs Makefile README.md setup-wolfssl.sh user_settings.h
include.am
bsdkm Makefile README.md bsdkm_wc_port.h include.am wolfkmod.c wolfkmod_aes.c x86_vecreg.c
certs
1024 ca-cert.der ca-cert.pem ca-key.der ca-key.pem client-cert.der client-cert.pem client-key.der client-key.pem client-keyPub.der dh1024.der dh1024.pem dsa-pub-1024.pem dsa1024.der dsa1024.pem include.am rsa1024.der server-cert.der server-cert.pem server-key.der server-key.pem
3072 client-cert.der client-cert.pem client-key.der client-key.pem client-keyPub.der include.am
4096 client-cert.der client-cert.pem client-key.der client-key.pem client-keyPub.der include.am
acert
rsa_pss acert.pem acert_ietf.pem acert_ietf_pubkey.pem acert_pubkey.pem
acert.pem acert_ietf.pem acert_ietf_pubkey.pem acert_pubkey.pem include.am
aia ca-issuers-cert.pem multi-aia-cert.pem overflow-aia-cert.pem
crl
extra-crls ca-int-cert-revoked.pem claim-root.pem crl_critical_entry.pem crlnum_57oct.pem crlnum_64oct.pem general-server-crl.pem large_crlnum.pem large_crlnum2.pem
hash_der 0fdb2da4.r0
hash_pem 0fdb2da4.r0
bad_time_fmt.pem ca-int-ecc.pem ca-int.pem ca-int2-ecc.pem ca-int2.pem caEcc384Crl.pem caEccCrl.der caEccCrl.pem cliCrl.pem client-int-ecc.pem client-int.pem crl.der crl.pem crl.revoked crl2.der crl2.pem crl_reason.pem crl_rsapss.pem eccCliCRL.pem eccSrvCRL.pem gencrls.sh include.am server-goodaltCrl.pem server-goodaltwildCrl.pem server-goodcnCrl.pem server-goodcnwildCrl.pem server-int-ecc.pem server-int.pem wolfssl.cnf
dilithium bench_dilithium_level2_key.der bench_dilithium_level3_key.der bench_dilithium_level5_key.der include.am
ecc bp256r1-key.der bp256r1-key.pem ca-secp256k1-cert.pem ca-secp256k1-key.pem client-bp256r1-cert.der client-bp256r1-cert.pem client-secp256k1-cert.der client-secp256k1-cert.pem genecc.sh include.am secp256k1-key.der secp256k1-key.pem secp256k1-param.pem secp256k1-privkey.der secp256k1-privkey.pem server-bp256r1-cert.der server-bp256r1-cert.pem server-secp256k1-cert.der server-secp256k1-cert.pem server2-secp256k1-cert.der server2-secp256k1-cert.pem wolfssl.cnf wolfssl_384.cnf
ed25519 ca-ed25519-key.der ca-ed25519-key.pem ca-ed25519-priv.der ca-ed25519-priv.pem ca-ed25519.der ca-ed25519.pem client-ed25519-key.der client-ed25519-key.pem client-ed25519-priv.der client-ed25519-priv.pem client-ed25519.der client-ed25519.pem eddsa-ed25519.der eddsa-ed25519.pem gen-ed25519-certs.sh gen-ed25519-keys.sh gen-ed25519.sh include.am root-ed25519-key.der root-ed25519-key.pem root-ed25519-priv.der root-ed25519-priv.pem root-ed25519.der root-ed25519.pem server-ed25519-cert.pem server-ed25519-key.der server-ed25519-key.pem server-ed25519-priv.der server-ed25519-priv.pem server-ed25519.der server-ed25519.pem
ed448 ca-ed448-key.der ca-ed448-key.pem ca-ed448-priv.der ca-ed448-priv.pem ca-ed448.der ca-ed448.pem client-ed448-key.der client-ed448-key.pem client-ed448-priv.der client-ed448-priv.pem client-ed448.der client-ed448.pem gen-ed448-certs.sh gen-ed448-keys.sh include.am root-ed448-key.der root-ed448-key.pem root-ed448-priv.der root-ed448-priv.pem root-ed448.der root-ed448.pem server-ed448-cert.pem server-ed448-key.der server-ed448-key.pem server-ed448-priv.der server-ed448-priv.pem server-ed448.der server-ed448.pem
external DigiCertGlobalRootCA.pem README.txt ca-digicert-ev.pem ca-globalsign-root.pem ca-google-root.pem ca_collection.pem include.am
falcon bench_falcon_level1_key.der bench_falcon_level5_key.der include.am
intermediate
ca_false_intermediate gentestcert.sh int_ca.key server.key test_ca.key test_ca.pem test_int_not_cacert.pem test_sign_bynoca_srv.pem wolfssl_base.conf wolfssl_srv.conf
ca-ecc-bad-aki.der ca-ecc-bad-aki.pem ca-int-cert.der ca-int-cert.pem ca-int-ecc-cert.der ca-int-ecc-cert.pem ca-int-ecc-key.der ca-int-ecc-key.pem ca-int-key.der ca-int-key.pem ca-int2-cert.der ca-int2-cert.pem ca-int2-ecc-cert.der ca-int2-ecc-cert.pem ca-int2-ecc-key.der ca-int2-ecc-key.pem ca-int2-key.der ca-int2-key.pem client-chain-alt-ecc.pem client-chain-alt.pem client-chain-ecc.der client-chain-ecc.pem client-chain.der client-chain.pem client-int-cert.der client-int-cert.pem client-int-ecc-cert.der client-int-ecc-cert.pem genintcerts.sh include.am server-chain-alt-ecc.pem server-chain-alt.pem server-chain-ecc.der server-chain-ecc.pem server-chain-short.pem server-chain.der server-chain.pem server-int-cert.der server-int-cert.pem server-int-ecc-cert.der server-int-ecc-cert.pem
lms bc_hss_L2_H5_W8_root.der bc_hss_L3_H5_W4_root.der bc_lms_chain_ca.der bc_lms_chain_leaf.der bc_lms_native_bc_root.der bc_lms_sha256_h10_w8_root.der bc_lms_sha256_h5_w4_root.der include.am
mldsa README.txt include.am mldsa44-cert.der mldsa44-cert.pem mldsa44-key.pem mldsa44_bare-priv.der mldsa44_bare-seed.der mldsa44_oqskeypair.der mldsa44_priv-only.der mldsa44_pub-spki.der mldsa44_seed-only.der mldsa44_seed-priv.der mldsa65-cert.der mldsa65-cert.pem mldsa65-key.pem mldsa65_bare-priv.der mldsa65_bare-seed.der mldsa65_oqskeypair.der mldsa65_priv-only.der mldsa65_pub-spki.der mldsa65_seed-only.der mldsa65_seed-priv.der mldsa87-cert.der mldsa87-cert.pem mldsa87-key.pem mldsa87_bare-priv.der mldsa87_bare-seed.der mldsa87_oqskeypair.der mldsa87_priv-only.der mldsa87_pub-spki.der mldsa87_seed-only.der mldsa87_seed-priv.der
ocsp imposter-root-ca-cert.der imposter-root-ca-cert.pem imposter-root-ca-key.der imposter-root-ca-key.pem include.am index-ca-and-intermediate-cas.txt index-ca-and-intermediate-cas.txt.attr index-intermediate1-ca-issued-certs.txt index-intermediate1-ca-issued-certs.txt.attr index-intermediate2-ca-issued-certs.txt index-intermediate2-ca-issued-certs.txt.attr index-intermediate3-ca-issued-certs.txt index-intermediate3-ca-issued-certs.txt.attr intermediate1-ca-cert.der intermediate1-ca-cert.pem intermediate1-ca-key.der intermediate1-ca-key.pem intermediate2-ca-cert.der intermediate2-ca-cert.pem intermediate2-ca-key.der intermediate2-ca-key.pem intermediate3-ca-cert.der intermediate3-ca-cert.pem intermediate3-ca-key.der intermediate3-ca-key.pem ocsp-responder-cert.der ocsp-responder-cert.pem ocsp-responder-key.der ocsp-responder-key.pem openssl.cnf renewcerts-for-test.sh renewcerts.sh root-ca-cert.der root-ca-cert.pem root-ca-crl.pem root-ca-key.der root-ca-key.pem server1-cert.der server1-cert.pem server1-chain-noroot.pem server1-key.der server1-key.pem server2-cert.der server2-cert.pem server2-key.der server2-key.pem server3-cert.der server3-cert.pem server3-key.der server3-key.pem server4-cert.der server4-cert.pem server4-key.der server4-key.pem server5-cert.der server5-cert.pem server5-key.der server5-key.pem test-leaf-response.der test-multi-response.der test-response-nointern.der test-response-rsapss.der test-response.der
p521 ca-p521-key.der ca-p521-key.pem ca-p521-priv.der ca-p521-priv.pem ca-p521.der ca-p521.pem client-p521-key.der client-p521-key.pem client-p521-priv.der client-p521-priv.pem client-p521.der client-p521.pem gen-p521-certs.sh gen-p521-keys.sh include.am root-p521-key.der root-p521-key.pem root-p521-priv.der root-p521-priv.pem root-p521.der root-p521.pem server-p521-cert.pem server-p521-key.der server-p521-key.pem server-p521-priv.der server-p521-priv.pem server-p521.der server-p521.pem
renewcerts wolfssl.cnf
rpk client-cert-rpk.der client-ecc-cert-rpk.der include.am server-cert-rpk.der server-ecc-cert-rpk.der
rsapss ca-3072-rsapss-key.der ca-3072-rsapss-key.pem ca-3072-rsapss-priv.der ca-3072-rsapss-priv.pem ca-3072-rsapss.der ca-3072-rsapss.pem ca-rsapss-key.der ca-rsapss-key.pem ca-rsapss-priv.der ca-rsapss-priv.pem ca-rsapss.der ca-rsapss.pem client-3072-rsapss-key.der client-3072-rsapss-key.pem client-3072-rsapss-priv.der client-3072-rsapss-priv.pem client-3072-rsapss.der client-3072-rsapss.pem client-rsapss-key.der client-rsapss-key.pem client-rsapss-priv.der client-rsapss-priv.pem client-rsapss.der client-rsapss.pem gen-rsapss-keys.sh include.am renew-rsapss-certs.sh root-3072-rsapss-key.der root-3072-rsapss-key.pem root-3072-rsapss-priv.der root-3072-rsapss-priv.pem root-3072-rsapss.der root-3072-rsapss.pem root-rsapss-key.der root-rsapss-key.pem root-rsapss-priv.der root-rsapss-priv.pem root-rsapss.der root-rsapss.pem server-3072-rsapss-cert.pem server-3072-rsapss-key.der server-3072-rsapss-key.pem server-3072-rsapss-priv.der server-3072-rsapss-priv.pem server-3072-rsapss.der server-3072-rsapss.pem server-mix-rsapss-cert.pem server-rsapss-cert.pem server-rsapss-key.der server-rsapss-key.pem server-rsapss-priv.der server-rsapss-priv.pem server-rsapss.der server-rsapss.pem
sia timestamping-sia-cert.pem
slhdsa bench_slhdsa_sha2_128f_key.der bench_slhdsa_sha2_128s_key.der bench_slhdsa_sha2_192f_key.der bench_slhdsa_sha2_192s_key.der bench_slhdsa_sha2_256f_key.der bench_slhdsa_sha2_256s_key.der bench_slhdsa_shake128f_key.der bench_slhdsa_shake128s_key.der bench_slhdsa_shake192f_key.der bench_slhdsa_shake192s_key.der bench_slhdsa_shake256f_key.der bench_slhdsa_shake256s_key.der client-mldsa44-priv.pem client-mldsa44-sha2.der client-mldsa44-sha2.pem client-mldsa44-shake.der client-mldsa44-shake.pem gen-slhdsa-mldsa-certs.sh include.am root-slhdsa-sha2-128s-priv.der root-slhdsa-sha2-128s-priv.pem root-slhdsa-sha2-128s.der root-slhdsa-sha2-128s.pem root-slhdsa-shake-128s-priv.der root-slhdsa-shake-128s-priv.pem root-slhdsa-shake-128s.der root-slhdsa-shake-128s.pem server-mldsa44-priv.pem server-mldsa44-sha2.der server-mldsa44-sha2.pem server-mldsa44-shake.der server-mldsa44-shake.pem
sm2 ca-sm2-key.der ca-sm2-key.pem ca-sm2-priv.der ca-sm2-priv.pem ca-sm2.der ca-sm2.pem client-sm2-key.der client-sm2-key.pem client-sm2-priv.der client-sm2-priv.pem client-sm2.der client-sm2.pem fix_sm2_spki.py gen-sm2-certs.sh gen-sm2-keys.sh include.am root-sm2-key.der root-sm2-key.pem root-sm2-priv.der root-sm2-priv.pem root-sm2.der root-sm2.pem self-sm2-cert.pem self-sm2-key.pem self-sm2-priv.pem server-sm2-cert.der server-sm2-cert.pem server-sm2-key.der server-sm2-key.pem server-sm2-priv.der server-sm2-priv.pem server-sm2.der server-sm2.pem
statickeys dh-ffdhe2048-params.pem dh-ffdhe2048-pub.der dh-ffdhe2048-pub.pem dh-ffdhe2048.der dh-ffdhe2048.pem ecc-secp256r1.der ecc-secp256r1.pem gen-static.sh include.am x25519-pub.der x25519-pub.pem x25519.der x25519.pem
test
expired expired-ca.der expired-ca.pem expired-cert.der expired-cert.pem
catalog.txt cert-bad-neg-int.der cert-bad-oid.der cert-bad-utf8.der cert-ext-ia.cfg cert-ext-ia.der cert-ext-ia.pem cert-ext-joi.cfg cert-ext-joi.der cert-ext-joi.pem cert-ext-mnc.der cert-ext-multiple.cfg cert-ext-multiple.der cert-ext-multiple.pem cert-ext-nc-combined.der cert-ext-nc-combined.pem cert-ext-nc.cfg cert-ext-nc.der cert-ext-nc.pem cert-ext-ncdns.der cert-ext-ncdns.pem cert-ext-ncip.der cert-ext-ncip.pem cert-ext-ncmixed.der cert-ext-ncmulti.der cert-ext-ncmulti.pem cert-ext-ncrid.der cert-ext-ncrid.pem cert-ext-nct.cfg cert-ext-nct.der cert-ext-nct.pem cert-ext-ndir-exc.cfg cert-ext-ndir-exc.der cert-ext-ndir-exc.pem cert-ext-ndir.cfg cert-ext-ndir.der cert-ext-ndir.pem cert-ext-ns.der cert-over-max-altnames.cfg cert-over-max-altnames.der cert-over-max-altnames.pem cert-over-max-nc.cfg cert-over-max-nc.der cert-over-max-nc.pem client-ecc-cert-ski.hex cn-ip-literal.der cn-ip-wildcard.der crit-cert.pem crit-key.pem dh1024.der dh1024.pem dh512.der dh512.pem digsigku.pem encrypteddata.msg gen-badsig.sh gen-ext-certs.sh gen-testcerts.sh include.am kari-keyid-cms.msg ktri-keyid-cms.msg ossl-trusted-cert.pem server-badaltname.der server-badaltname.pem server-badaltnull.der server-badaltnull.pem server-badcn.der server-badcn.pem server-badcnnull.der server-badcnnull.pem server-cert-ecc-badsig.der server-cert-ecc-badsig.pem server-cert-rsa-badsig.der server-cert-rsa-badsig.pem server-duplicate-policy.pem server-garbage.der server-garbage.pem server-goodalt.der server-goodalt.pem server-goodaltwild.der server-goodaltwild.pem server-goodcn.der server-goodcn.pem server-goodcnwild.der server-goodcnwild.pem server-localhost.der server-localhost.pem smime-test-canon.p7s smime-test-multipart-badsig.p7s smime-test-multipart.p7s smime-test.p7s
test-pathlen assemble-chains.sh chainA-ICA1-key.pem chainA-ICA1-pathlen0.pem chainA-assembled.pem chainA-entity-key.pem chainA-entity.pem chainB-ICA1-key.pem chainB-ICA1-pathlen0.pem chainB-ICA2-key.pem chainB-ICA2-pathlen1.pem chainB-assembled.pem chainB-entity-key.pem chainB-entity.pem chainC-ICA1-key.pem chainC-ICA1-pathlen1.pem chainC-assembled.pem chainC-entity-key.pem chainC-entity.pem chainD-ICA1-key.pem chainD-ICA1-pathlen127.pem chainD-assembled.pem chainD-entity-key.pem chainD-entity.pem chainE-ICA1-key.pem chainE-ICA1-pathlen128.pem chainE-assembled.pem chainE-entity-key.pem chainE-entity.pem chainF-ICA1-key.pem chainF-ICA1-pathlen1.pem chainF-ICA2-key.pem chainF-ICA2-pathlen0.pem chainF-assembled.pem chainF-entity-key.pem chainF-entity.pem chainG-ICA1-key.pem chainG-ICA1-pathlen0.pem chainG-ICA2-key.pem chainG-ICA2-pathlen1.pem chainG-ICA3-key.pem chainG-ICA3-pathlen99.pem chainG-ICA4-key.pem chainG-ICA4-pathlen5.pem chainG-ICA5-key.pem chainG-ICA5-pathlen20.pem chainG-ICA6-key.pem chainG-ICA6-pathlen10.pem chainG-ICA7-key.pem chainG-ICA7-pathlen100.pem chainG-assembled.pem chainG-entity-key.pem chainG-entity.pem chainH-ICA1-key.pem chainH-ICA1-pathlen0.pem chainH-ICA2-key.pem chainH-ICA2-pathlen2.pem chainH-ICA3-key.pem chainH-ICA3-pathlen2.pem chainH-ICA4-key.pem chainH-ICA4-pathlen2.pem chainH-assembled.pem chainH-entity-key.pem chainH-entity.pem chainI-ICA1-key.pem chainI-ICA1-no_pathlen.pem chainI-ICA2-key.pem chainI-ICA2-no_pathlen.pem chainI-ICA3-key.pem chainI-ICA3-pathlen2.pem chainI-assembled.pem chainI-entity-key.pem chainI-entity.pem chainJ-ICA1-key.pem chainJ-ICA1-no_pathlen.pem chainJ-ICA2-key.pem chainJ-ICA2-no_pathlen.pem chainJ-ICA3-key.pem chainJ-ICA3-no_pathlen.pem chainJ-ICA4-key.pem chainJ-ICA4-pathlen2.pem chainJ-assembled.pem chainJ-entity-key.pem chainJ-entity.pem include.am refreshkeys.sh
test-serial0 ee_normal.pem ee_serial0.pem generate_certs.sh include.am intermediate_serial0.pem root_serial0.pem root_serial0_key.pem selfsigned_nonca_serial0.pem
xmss bc_xmss_chain_ca.der bc_xmss_chain_leaf.der bc_xmss_sha2_10_256_root.der bc_xmss_sha2_16_256_root.der bc_xmssmt_sha2_20_2_256_root.der bc_xmssmt_sha2_20_4_256_root.der bc_xmssmt_sha2_40_8_256_root.der include.am
ca-cert-chain.der ca-cert.der ca-cert.pem ca-ecc-cert.der ca-ecc-cert.pem ca-ecc-key.der ca-ecc-key.pem ca-ecc384-cert.der ca-ecc384-cert.pem ca-ecc384-key.der ca-ecc384-key.pem ca-key-pkcs8-attribute.der ca-key.der ca-key.pem check_dates.sh client-absolute-urn.pem client-ca-cert.der client-ca-cert.pem client-ca.pem client-cert-ext.der client-cert-ext.pem client-cert.der client-cert.pem client-crl-dist.der client-crl-dist.pem client-ecc-ca-cert.der client-ecc-ca-cert.pem client-ecc-cert.der client-ecc-cert.pem client-ecc384-cert.der client-ecc384-cert.pem client-ecc384-key.der client-ecc384-key.pem client-key.der client-key.pem client-keyEnc.pem client-keyPub.der client-keyPub.pem client-relative-uri.pem client-uri-cert.pem csr.attr.der csr.dsa.der csr.dsa.pem csr.ext.der csr.signed.der dh-priv-2048.der dh-priv-2048.pem dh-pub-2048.der dh-pub-2048.pem dh-pubkey-2048.der dh2048.der dh2048.pem dh3072.der dh3072.pem dh4096.der dh4096.pem dsa-pubkey-2048.der dsa2048.der dsa2048.pem dsa3072.der dsaparams.der dsaparams.pem ecc-client-key.der ecc-client-key.pem ecc-client-keyPub.der ecc-client-keyPub.pem ecc-key-comp.pem ecc-keyPkcs8.der ecc-keyPkcs8.pem ecc-keyPkcs8Enc.der ecc-keyPkcs8Enc.pem ecc-keyPub.der ecc-keyPub.pem ecc-params.der ecc-params.pem ecc-privOnlyCert.pem ecc-privOnlyKey.pem ecc-privkey.der ecc-privkey.pem ecc-privkeyPkcs8.der ecc-privkeyPkcs8.pem ecc-rsa-server.p12 empty-issuer-cert.pem entity-no-ca-bool-cert.pem entity-no-ca-bool-key.pem fpki-cert.der fpki-certpol-cert.der gen_revoked.sh include.am renewcerts.sh rid-cert.der rsa-pub-2048.pem rsa2048.der rsa3072.der server-cert-chain.der server-cert.der server-cert.pem server-ecc-comp.der server-ecc-comp.pem server-ecc-rsa.der server-ecc-rsa.pem server-ecc-self.der server-ecc-self.pem server-ecc.der server-ecc.pem server-ecc384-cert.der server-ecc384-cert.pem server-ecc384-key.der server-ecc384-key.pem server-key.der server-key.pem server-keyEnc.pem server-keyPkcs8.der server-keyPkcs8.pem server-keyPkcs8Enc.der server-keyPkcs8Enc.pem server-keyPkcs8Enc12.pem server-keyPkcs8Enc2.pem server-keyPub.der server-keyPub.pem server-revoked-cert.pem server-revoked-key.pem taoCert.txt test-ber-exp02-05-2022.p7b test-degenerate.p7b test-multiple-recipients.p7b test-servercert-rc2.p12 test-servercert.p12 test-stream-dec.p7b test-stream-sign.p7b wolfssl-website-ca.pem x942dh2048.der x942dh2048.pem
cmake
consumer CMakeLists.txt README.md main.c
modules FindARIA.cmake FindOQS.cmake
Config.cmake.in README.md config.in functions.cmake include.am options.h.in wolfssl-config-version.cmake.in wolfssl-targets.cmake.in
debian
source format
changelog.in control.in copyright include.am libwolfssl-dev.install libwolfssl.install rules.in
doc
dox_comments
header_files aes.h arc4.h ascon.h asn.h asn_public.h blake2.h bn.h camellia.h chacha.h chacha20_poly1305.h cmac.h coding.h compress.h cryptocb.h curve25519.h curve448.h des3.h dh.h doxygen_groups.h doxygen_pages.h dsa.h ecc.h eccsi.h ed25519.h ed448.h error-crypt.h evp.h hash.h hmac.h iotsafe.h kdf.h logging.h md2.h md4.h md5.h memory.h ocsp.h pem.h pkcs11.h pkcs7.h poly1305.h psa.h puf.h pwdbased.h quic.h random.h ripemd.h rsa.h sakke.h sha.h sha256.h sha3.h sha512.h signature.h siphash.h srp.h ssl.h tfm.h types.h wc_encrypt.h wc_port.h wc_she.h wc_slhdsa.h wolfio.h
header_files-ja aes.h arc4.h ascon.h asn.h asn_public.h blake2.h bn.h camellia.h chacha.h chacha20_poly1305.h cmac.h coding.h compress.h cryptocb.h curve25519.h curve448.h des3.h dh.h doxygen_groups.h doxygen_pages.h dsa.h ecc.h eccsi.h ed25519.h ed448.h error-crypt.h evp.h hash.h hmac.h iotsafe.h kdf.h logging.h md2.h md4.h md5.h memory.h ocsp.h pem.h pkcs11.h pkcs7.h poly1305.h psa.h pwdbased.h quic.h random.h ripemd.h rsa.h sakke.h sha.h sha256.h sha3.h sha512.h signature.h siphash.h srp.h ssl.h tfm.h types.h wc_encrypt.h wc_port.h wolfio.h
formats
html
html_changes
search search.css search.js
customdoxygen.css doxygen.css menu.js menudata.js tabs.css
Doxyfile footer.html header.html mainpage.dox
pdf Doxyfile header.tex
images wolfssl_logo.png
QUIC.md README.txt README_DOXYGEN check_api.sh generate_documentation.sh include.am
examples
asn1 asn1.c dumpasn1.cfg gen_oid_names.rb include.am oid_names.h
async Makefile README.md async_client.c async_server.c async_tls.c async_tls.h include.am user_settings.h
benchmark include.am tls_bench.c tls_bench.h
client client.c client.h client.sln client.vcproj client.vcxproj include.am
configs README.md include.am user_settings_EBSnet.h user_settings_all.h user_settings_arduino.h user_settings_baremetal.h user_settings_ca.h user_settings_curve25519nonblock.h user_settings_dtls13.h user_settings_eccnonblock.h user_settings_espressif.h user_settings_fipsv2.h user_settings_fipsv5.h user_settings_min_ecc.h user_settings_openssl_compat.h user_settings_pkcs7.h user_settings_platformio.h user_settings_pq.h user_settings_rsa_only.h user_settings_stm32.h user_settings_template.h user_settings_tls12.h user_settings_tls13.h user_settings_wolfboot_keytools.h user_settings_wolfssh.h user_settings_wolftpm.h
crypto_policies
default wolfssl.txt
future wolfssl.txt
legacy wolfssl.txt
echoclient echoclient.c echoclient.h echoclient.sln echoclient.vcproj echoclient.vcxproj include.am quit
echoserver echoserver.c echoserver.h echoserver.sln echoserver.vcproj echoserver.vcxproj include.am
ocsp_responder include.am ocsp_responder.c ocsp_responder.h
pem include.am pem.c
sctp include.am sctp-client-dtls.c sctp-client.c sctp-server-dtls.c sctp-server.c
server include.am server.c server.h server.sln server.vcproj server.vcxproj
README.md include.am
linuxkm
patches
5.10.17 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-5v10v17.patch
5.10.236 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-5v10v236.patch
5.14.0-570.58.1.el9_6 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-5v14-570v58v1-el9_6.patch
5.15 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-5v15.patch
5.17 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-5v17.patch
5.17-ubuntu-jammy-tegra WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-5v17-ubuntu-jammy-tegra.patch
6.1.73 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-6v1v73.patch
6.12 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-6v12.patch
6.15 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-6v15.patch
7.0 WOLFSSL_LINUXKM_HAVE_GET_RANDOM_CALLBACKS-7v0.patch
regen-patches.sh
Kbuild Makefile README.md get_thread_size.c include.am linuxkm-fips-hash-wrapper.sh linuxkm-fips-hash.c linuxkm_memory.c linuxkm_memory.h linuxkm_wc_port.h lkcapi_aes_glue.c lkcapi_dh_glue.c lkcapi_ecdh_glue.c lkcapi_ecdsa_glue.c lkcapi_glue.c lkcapi_rsa_glue.c lkcapi_sha_glue.c module_exports.c.template module_hooks.c pie_redirect_table.c wolfcrypt.lds x86_vector_register_glue.c
m4 ax_add_am_macro.m4 ax_am_jobserver.m4 ax_am_macros.m4 ax_append_compile_flags.m4 ax_append_flag.m4 ax_append_link_flags.m4 ax_append_to_file.m4 ax_atomic.m4 ax_bsdkm.m4 ax_check_compile_flag.m4 ax_check_link_flag.m4 ax_compiler_version.m4 ax_count_cpus.m4 ax_create_generic_config.m4 ax_debug.m4 ax_file_escapes.m4 ax_harden_compiler_flags.m4 ax_linuxkm.m4 ax_print_to_file.m4 ax_pthread.m4 ax_require_defined.m4 ax_tls.m4 ax_vcs_checkout.m4 hexversion.m4 lib_socket_nsl.m4 visibility.m4
mcapi
wolfcrypt_mcapi.X
nbproject configurations.xml include.am project.xml
Makefile
wolfcrypt_test.X
nbproject configurations.xml include.am project.xml
Makefile
wolfssl.X
nbproject configurations.xml include.am project.xml
Makefile
zlib.X
nbproject configurations.xml include.am project.xml
Makefile
PIC32MZ-serial.h README crypto.c crypto.h include.am mcapi_test.c user_settings.h
mplabx
wolfcrypt_benchmark.X
nbproject configurations.xml include.am project.xml
Makefile
wolfcrypt_test.X
nbproject configurations.xml include.am project.xml
Makefile
wolfssl.X
nbproject configurations.xml include.am project.xml
Makefile
PIC32MZ-serial.h README benchmark_main.c include.am test_main.c user_settings.h
mqx
util_lib
Sources include.am util.c util.h
wolfcrypt_benchmark
Debugger K70FN1M0.mem init_kinetis.tcl mass_erase_kinetis.tcl
Sources include.am main.c main.h
ReferencedRSESystems.xml wolfcrypt_benchmark_twrk70f120m_Int_Flash_DDRData_Debug_PnE_U-MultiLink.launch wolfcrypt_benchmark_twrk70f120m_Int_Flash_DDRData_Release_PnE_U-MultiLink.launch wolfcrypt_benchmark_twrk70f120m_Int_Flash_SramData_Debug_JTrace.jlink wolfcrypt_benchmark_twrk70f120m_Int_Flash_SramData_Debug_JTrace.launch wolfcrypt_benchmark_twrk70f120m_Int_Flash_SramData_Debug_PnE_U-MultiLink.launch wolfcrypt_benchmark_twrk70f120m_Int_Flash_SramData_Release_PnE_U-MultiLink.launch
wolfcrypt_test
Debugger K70FN1M0.mem init_kinetis.tcl mass_erase_kinetis.tcl
Sources include.am main.c main.h
ReferencedRSESystems.xml wolfcrypt_test_twrk70f120m_Int_Flash_DDRData_Debug_PnE_U-MultiLink.launch wolfcrypt_test_twrk70f120m_Int_Flash_DDRData_Release_PnE_U-MultiLink.launch wolfcrypt_test_twrk70f120m_Int_Flash_SramData_Debug_JTrace.jlink wolfcrypt_test_twrk70f120m_Int_Flash_SramData_Debug_JTrace.launch wolfcrypt_test_twrk70f120m_Int_Flash_SramData_Debug_PnE_U-MultiLink.launch wolfcrypt_test_twrk70f120m_Int_Flash_SramData_Release_PnE_U-MultiLink.launch
wolfssl include.am
wolfssl_client
Debugger K70FN1M0.mem init_kinetis.tcl mass_erase_kinetis.tcl
Sources include.am main.c main.h
ReferencedRSESystems.xml wolfssl_client_twrk70f120m_Int_Flash_DDRData_Debug_PnE_U-MultiLink.launch wolfssl_client_twrk70f120m_Int_Flash_DDRData_Release_PnE_U-MultiLink.launch wolfssl_client_twrk70f120m_Int_Flash_SramData_Debug_JTrace.jlink wolfssl_client_twrk70f120m_Int_Flash_SramData_Debug_JTrace.launch wolfssl_client_twrk70f120m_Int_Flash_SramData_Debug_PnE_U-MultiLink.launch wolfssl_client_twrk70f120m_Int_Flash_SramData_Release_PnE_U-MultiLink.launch
README
rpm include.am spec.in
scripts
bench bench_functions.sh
aria-cmake-build-test.sh asn1_oid_sum.pl benchmark.test benchmark_compare.sh cleanup_testfiles.sh crl-gen-openssl.test crl-revoked.test dertoc.pl dtls.test dtlscid.test external.test google.test include.am makedistsmall.sh memtest.sh ocsp-responder-openssl-interop.test ocsp-stapling-with-ca-as-responder.test ocsp-stapling-with-wolfssl-responder.test ocsp-stapling.test ocsp-stapling2.test ocsp-stapling_tls13multi.test ocsp.test openssl.test openssl_srtp.test pem.test ping.test pkcallbacks.test psk.test resume.test rsapss.test sniffer-gen.sh sniffer-ipv6.pcap sniffer-static-rsa.pcap sniffer-testsuite.test sniffer-tls12-keylog.out sniffer-tls12-keylog.pcap sniffer-tls12-keylog.sslkeylog sniffer-tls13-dh-resume.pcap sniffer-tls13-dh.pcap sniffer-tls13-ecc-resume.pcap sniffer-tls13-ecc.pcap sniffer-tls13-hrr.pcap sniffer-tls13-keylog.out sniffer-tls13-keylog.pcap sniffer-tls13-keylog.sslkeylog sniffer-tls13-x25519-resume.pcap sniffer-tls13-x25519.pcap stm32l4-v4_0_1_build.sh tls13.test trusted_peer.test unit.test.in user_settings_asm.sh
src bio.c conf.c crl.c dtls.c dtls13.c include.am internal.c keys.c ocsp.c pk.c pk_ec.c pk_rsa.c quic.c sniffer.c ssl.c ssl_api_cert.c ssl_api_crl_ocsp.c ssl_api_pk.c ssl_asn1.c ssl_bn.c ssl_certman.c ssl_crypto.c ssl_ech.c ssl_load.c ssl_misc.c ssl_p7p12.c ssl_sess.c ssl_sk.c tls.c tls13.c wolfio.c x509.c x509_str.c
sslSniffer
sslSnifferTest README_WIN.md include.am snifftest.c sslSniffTest.vcproj sslSniffTest.vcxproj
README.md sslSniffer.vcproj sslSniffer.vcxproj
support gen-debug-trace-error-codes.sh include.am wolfssl.pc.in
tests
api api.h api_decl.h create_ocsp_test_blobs.py include.am test_aes.c test_aes.h test_arc4.c test_arc4.h test_ascon.c test_ascon.h test_ascon_kats.h test_asn.c test_asn.h test_blake2.c test_blake2.h test_camellia.c test_camellia.h test_certman.c test_certman.h test_chacha.c test_chacha.h test_chacha20_poly1305.c test_chacha20_poly1305.h test_cmac.c test_cmac.h test_curve25519.c test_curve25519.h test_curve448.c test_curve448.h test_des3.c test_des3.h test_dh.c test_dh.h test_digest.h test_dsa.c test_dsa.h test_dtls.c test_dtls.h test_ecc.c test_ecc.h test_ed25519.c test_ed25519.h test_ed448.c test_ed448.h test_evp.c test_evp.h test_evp_cipher.c test_evp_cipher.h test_evp_digest.c test_evp_digest.h test_evp_pkey.c test_evp_pkey.h test_hash.c test_hash.h test_hmac.c test_hmac.h test_md2.c test_md2.h test_md4.c test_md4.h test_md5.c test_md5.h test_mldsa.c test_mldsa.h test_mlkem.c test_mlkem.h test_ocsp.c test_ocsp.h test_ocsp_test_blobs.h test_ossl_asn1.c test_ossl_asn1.h test_ossl_bio.c test_ossl_bio.h test_ossl_bn.c test_ossl_bn.h test_ossl_cipher.c test_ossl_cipher.h test_ossl_dgst.c test_ossl_dgst.h test_ossl_dh.c test_ossl_dh.h test_ossl_dsa.c test_ossl_dsa.h test_ossl_ec.c test_ossl_ec.h test_ossl_ecx.c test_ossl_ecx.h test_ossl_mac.c test_ossl_mac.h test_ossl_obj.c test_ossl_obj.h test_ossl_p7p12.c test_ossl_p7p12.h test_ossl_pem.c test_ossl_pem.h test_ossl_rand.c test_ossl_rand.h test_ossl_rsa.c test_ossl_rsa.h test_ossl_sk.c test_ossl_sk.h test_ossl_x509.c test_ossl_x509.h test_ossl_x509_acert.c test_ossl_x509_acert.h test_ossl_x509_crypto.c test_ossl_x509_crypto.h test_ossl_x509_ext.c test_ossl_x509_ext.h test_ossl_x509_info.c test_ossl_x509_info.h test_ossl_x509_io.c test_ossl_x509_io.h test_ossl_x509_lu.c test_ossl_x509_lu.h test_ossl_x509_name.c test_ossl_x509_name.h test_ossl_x509_pk.c test_ossl_x509_pk.h test_ossl_x509_str.c test_ossl_x509_str.h test_ossl_x509_vp.c test_ossl_x509_vp.h test_pkcs12.c test_pkcs12.h test_pkcs7.c test_pkcs7.h test_poly1305.c test_poly1305.h test_random.c test_random.h test_rc2.c test_rc2.h test_ripemd.c test_ripemd.h test_rsa.c test_rsa.h test_sha.c test_sha.h test_sha256.c test_sha256.h test_sha3.c test_sha3.h test_sha512.c test_sha512.h test_she.c test_she.h test_signature.c test_signature.h test_slhdsa.c test_slhdsa.h test_sm2.c test_sm2.h test_sm3.c test_sm3.h test_sm4.c test_sm4.h test_tls.c test_tls.h test_tls13.c test_tls13.h test_tls_ext.c test_tls_ext.h test_wc_encrypt.c test_wc_encrypt.h test_wolfmath.c test_wolfmath.h test_x509.c test_x509.h
emnet
IP IP.h
Makefile emnet_nonblock_test.c emnet_shim.c
freertos-mem-track-repro FreeRTOS.h repro.c run.sh semphr.h task.h user_settings.h
swdev .gitignore Makefile README.md swdev.c swdev.h swdev_loader.c swdev_loader.h user_settings.h
CONF_FILES_README.md NCONF_test.cnf README TXT_DB.txt api.c include.am quic.c srp.c suites.c test-altchains.conf test-chains.conf test-dhprime.conf test-dtls-downgrade.conf test-dtls-fails-cipher.conf test-dtls-fails.conf test-dtls-group.conf test-dtls-mtu.conf test-dtls-reneg-client.conf test-dtls-reneg-server.conf test-dtls-resume.conf test-dtls-sha2.conf test-dtls-srtp-fails.conf test-dtls-srtp.conf test-dtls.conf test-dtls13-cid.conf test-dtls13-downgrade-fails.conf test-dtls13-downgrade.conf test-dtls13-pq-hybrid-extra-frag.conf test-dtls13-pq-hybrid-extra.conf test-dtls13-pq-hybrid-frag.conf test-dtls13-pq-standalone-frag.conf test-dtls13-pq-standalone.conf test-dtls13-psk.conf test-dtls13.conf test-ecc-cust-curves.conf test-ed25519.conf test-ed448.conf test-enckeys.conf test-fails.conf test-maxfrag-dtls.conf test-maxfrag.conf test-p521.conf test-psk-no-id-sha2.conf test-psk-no-id.conf test-psk.conf test-rsapss.conf test-sctp-sha2.conf test-sctp.conf test-sha2.conf test-sig.conf test-sm2.conf test-tls-downgrade.conf test-tls13-down.conf test-tls13-ecc.conf test-tls13-pq-hybrid-extra.conf test-tls13-pq-hybrid.conf test-tls13-pq-standalone.conf test-tls13-psk-certs.conf test-tls13-psk.conf test-tls13-slhdsa-fail.conf test-tls13-slhdsa-sha2.conf test-tls13-slhdsa-shake.conf test-tls13.conf test-trustpeer.conf test.conf unit.c unit.h utils.c utils.h w64wrapper.c
testsuite include.am testsuite.c testsuite.sln testsuite.vcproj testsuite.vcxproj utils.c utils.h
tirtos
packages
ti
net
wolfssl
tests
EK_TM4C1294XL
wolfcrypt
benchmark TM4C1294NC.icf benchmark.cfg main.c package.bld.hide package.xdc
test TM4C1294NC.icf main.c package.bld.hide package.xdc test.cfg
package.bld package.xdc package.xs
.gitignore README include.am products.mak wolfssl.bld wolfssl.mak
wolfcrypt
benchmark README.md benchmark-VS2022.sln benchmark-VS2022.vcxproj benchmark-VS2022.vcxproj.user benchmark.c benchmark.h benchmark.sln benchmark.vcproj benchmark.vcxproj include.am
src
port
Espressif
esp_crt_bundle README.md cacrt_all.pem cacrt_deprecated.pem cacrt_local.pem esp_crt_bundle.c gen_crt_bundle.py pio_install_cryptography.py
README.md esp32_aes.c esp32_mp.c esp32_sha.c esp32_util.c esp_sdk_mem_lib.c esp_sdk_time_lib.c esp_sdk_wifi_lib.c
Renesas README.md renesas_common.c renesas_fspsm_aes.c renesas_fspsm_rsa.c renesas_fspsm_sha.c renesas_fspsm_util.c renesas_rx64_hw_sha.c renesas_rx64_hw_util.c renesas_tsip_aes.c renesas_tsip_rsa.c renesas_tsip_sha.c renesas_tsip_util.c
af_alg afalg_aes.c afalg_hash.c wc_afalg.c
aria aria-crypt.c aria-cryptocb.c
arm armv8-32-aes-asm.S armv8-32-aes-asm_c.c armv8-32-chacha-asm.S armv8-32-chacha-asm_c.c armv8-32-curve25519.S armv8-32-curve25519_c.c armv8-32-mlkem-asm.S armv8-32-mlkem-asm_c.c armv8-32-poly1305-asm.S armv8-32-poly1305-asm_c.c armv8-32-sha256-asm.S armv8-32-sha256-asm_c.c armv8-32-sha3-asm.S armv8-32-sha3-asm_c.c armv8-32-sha512-asm.S armv8-32-sha512-asm_c.c armv8-aes-asm.S armv8-aes-asm_c.c armv8-aes.c armv8-chacha-asm.S armv8-chacha-asm_c.c armv8-curve25519.S armv8-curve25519_c.c armv8-mlkem-asm.S armv8-mlkem-asm_c.c armv8-poly1305-asm.S armv8-poly1305-asm_c.c armv8-sha256-asm.S armv8-sha256-asm_c.c armv8-sha256.c armv8-sha3-asm.S armv8-sha3-asm_c.c armv8-sha512-asm.S armv8-sha512-asm_c.c armv8-sha512.c cryptoCell.c cryptoCellHash.c thumb2-aes-asm.S thumb2-aes-asm_c.c thumb2-chacha-asm.S thumb2-chacha-asm_c.c thumb2-curve25519.S thumb2-curve25519_c.c thumb2-mlkem-asm.S thumb2-mlkem-asm_c.c thumb2-poly1305-asm.S thumb2-poly1305-asm_c.c thumb2-sha256-asm.S thumb2-sha256-asm_c.c thumb2-sha3-asm.S thumb2-sha3-asm_c.c thumb2-sha512-asm.S thumb2-sha512-asm_c.c
atmel README.md atmel.c
autosar README.md cryif.c crypto.c csm.c include.am test.c
caam README.md caam_aes.c caam_doc.pdf caam_driver.c caam_error.c caam_integrity.c caam_qnx.c caam_sha.c wolfcaam_aes.c wolfcaam_cmac.c wolfcaam_ecdsa.c wolfcaam_fsl_nxp.c wolfcaam_hash.c wolfcaam_hmac.c wolfcaam_init.c wolfcaam_qnx.c wolfcaam_rsa.c wolfcaam_seco.c wolfcaam_x25519.c
cavium README.md README_Octeon.md cavium_nitrox.c cavium_octeon_sync.c
cuda README.md aes-cuda.cu
cypress README.md psoc6_crypto.c
devcrypto README.md devcrypto_aes.c devcrypto_ecdsa.c devcrypto_hash.c devcrypto_hmac.c devcrypto_rsa.c devcrypto_x25519.c wc_devcrypto.c
intel README.md quickassist.c quickassist_mem.c quickassist_sync.c
iotsafe iotsafe.c
kcapi README.md kcapi_aes.c kcapi_dh.c kcapi_ecc.c kcapi_hash.c kcapi_hmac.c kcapi_rsa.c
liboqs liboqs.c
maxim README.md max3266x.c maxq10xx.c
mynewt mynewt_port.c
nxp README.md README_SE050.md casper_port.c dcp_port.c hashcrypt_port.c ksdk_port.c se050_port.c
pic32 pic32mz-crypt.c
ppc32 ppc32-sha256-asm.S ppc32-sha256-asm_c.c ppc32-sha256-asm_cr.c
psa README.md psa.c psa_aes.c psa_hash.c psa_pkcbs.c
riscv riscv-64-aes.c riscv-64-chacha.c riscv-64-poly1305.c riscv-64-sha256.c riscv-64-sha3.c riscv-64-sha512.c
rpi_pico README.md pico.c
silabs README.md silabs_aes.c silabs_ecc.c silabs_hash.c silabs_random.c
st README.md STM32MP13.md STM32MP25.md stm32.c stsafe.c
ti ti-aes.c ti-ccm.c ti-des3.c ti-hash.c
tropicsquare README.md tropic01.c
xilinx xil-aesgcm.c xil-sha3.c xil-versal-glue.c xil-versal-trng.c
nrf51.c
ASN_TEMPLATE.md aes.c aes_asm.S aes_asm.asm aes_gcm_asm.S aes_gcm_asm.asm aes_gcm_x86_asm.S aes_xts_asm.S aes_xts_asm.asm arc4.c ascon.c asm.c asn.c asn_orig.c async.c blake2b.c blake2s.c camellia.c chacha.c chacha20_poly1305.c chacha_asm.S chacha_asm.asm cmac.c coding.c compress.c cpuid.c cryptocb.c curve25519.c curve448.c des3.c dh.c dilithium.c dsa.c ecc.c ecc_fp.c eccsi.c ed25519.c ed448.c error.c evp.c evp_pk.c falcon.c fe_448.c fe_low_mem.c fe_operations.c fe_x25519_128.h fe_x25519_asm.S fp_mont_small.i fp_mul_comba_12.i fp_mul_comba_17.i fp_mul_comba_20.i fp_mul_comba_24.i fp_mul_comba_28.i fp_mul_comba_3.i fp_mul_comba_32.i fp_mul_comba_4.i fp_mul_comba_48.i fp_mul_comba_6.i fp_mul_comba_64.i fp_mul_comba_7.i fp_mul_comba_8.i fp_mul_comba_9.i fp_mul_comba_small_set.i fp_sqr_comba_12.i fp_sqr_comba_17.i fp_sqr_comba_20.i fp_sqr_comba_24.i fp_sqr_comba_28.i fp_sqr_comba_3.i fp_sqr_comba_32.i fp_sqr_comba_4.i fp_sqr_comba_48.i fp_sqr_comba_6.i fp_sqr_comba_64.i fp_sqr_comba_7.i fp_sqr_comba_8.i fp_sqr_comba_9.i fp_sqr_comba_small_set.i ge_448.c ge_low_mem.c ge_operations.c hash.c hmac.c hpke.c include.am integer.c kdf.c logging.c md2.c md4.c md5.c memory.c misc.c pkcs12.c pkcs7.c poly1305.c poly1305_asm.S poly1305_asm.asm puf.c pwdbased.c random.c rc2.c ripemd.c rng_bank.c rsa.c sakke.c sha.c sha256.c sha256_asm.S sha3.c sha3_asm.S sha512.c sha512_asm.S signature.c siphash.c sm2.c sm3.c sm3_asm.S sm4.c sp_arm32.c sp_arm64.c sp_armthumb.c sp_c32.c sp_c64.c sp_cortexm.c sp_dsp32.c sp_int.c sp_sm2_arm32.c sp_sm2_arm64.c sp_sm2_armthumb.c sp_sm2_c32.c sp_sm2_c64.c sp_sm2_cortexm.c sp_sm2_x86_64.c sp_sm2_x86_64_asm.S sp_x86_64.c sp_x86_64_asm.S sp_x86_64_asm.asm srp.c tfm.c wc_dsp.c wc_encrypt.c wc_lms.c wc_lms_impl.c wc_mldsa_asm.S wc_mlkem.c wc_mlkem_asm.S wc_mlkem_poly.c wc_pkcs11.c wc_port.c wc_she.c wc_slhdsa.c wc_xmss.c wc_xmss_impl.c wolfentropy.c wolfevent.c wolfmath.c
test README.md include.am test-VS2022.sln test-VS2022.vcxproj test-VS2022.vcxproj.user test.c test.h test.sln test.vcproj test_paths.h.in
wolfssl
openssl aes.h asn1.h asn1t.h bio.h bn.h buffer.h camellia.h cmac.h cms.h compat_types.h conf.h crypto.h des.h dh.h dsa.h ec.h ec25519.h ec448.h ecdh.h ecdsa.h ed25519.h ed448.h engine.h err.h evp.h fips_rand.h hmac.h include.am kdf.h lhash.h md4.h md5.h modes.h obj_mac.h objects.h ocsp.h opensslconf.h opensslv.h ossl_typ.h pem.h pkcs12.h pkcs7.h rand.h rc4.h ripemd.h rsa.h safestack.h sha.h sha3.h srp.h ssl.h ssl23.h stack.h tls1.h txt_db.h ui.h x509.h x509_vfy.h x509v3.h
wolfcrypt
port
Espressif esp-sdk-lib.h esp32-crypt.h esp_crt_bundle.h
Renesas renesas-fspsm-crypt.h renesas-fspsm-types.h renesas-rx64-hw-crypt.h renesas-tsip-crypt.h renesas_cmn.h renesas_fspsm_internal.h renesas_sync.h renesas_tsip_internal.h renesas_tsip_types.h
af_alg afalg_hash.h wc_afalg.h
aria aria-crypt.h aria-cryptocb.h
arm cryptoCell.h
atmel atmel.h
autosar CryIf.h Crypto.h Csm.h StandardTypes.h
caam caam_driver.h caam_error.h caam_qnx.h wolfcaam.h wolfcaam_aes.h wolfcaam_cmac.h wolfcaam_ecdsa.h wolfcaam_fsl_nxp.h wolfcaam_hash.h wolfcaam_qnx.h wolfcaam_rsa.h wolfcaam_seco.h wolfcaam_sha.h wolfcaam_x25519.h
cavium cavium_nitrox.h cavium_octeon_sync.h
cypress psoc6_crypto.h
devcrypto wc_devcrypto.h
intel quickassist.h quickassist_mem.h quickassist_sync.h
iotsafe iotsafe.h
kcapi kcapi_dh.h kcapi_ecc.h kcapi_hash.h kcapi_hmac.h kcapi_rsa.h wc_kcapi.h
liboqs liboqs.h
maxim max3266x-cryptocb.h max3266x.h maxq10xx.h
nxp casper_port.h dcp_port.h hashcrypt_port.h ksdk_port.h se050_port.h
pic32 pic32mz-crypt.h
psa psa.h
riscv riscv-64-asm.h
rpi_pico pico.h
silabs silabs_aes.h silabs_ecc.h silabs_hash.h silabs_random.h
st stm32.h stsafe.h
ti ti-ccm.h ti-hash.h
tropicsquare tropic01.h
xilinx xil-sha3.h xil-versal-glue.h xil-versal-trng.h
nrf51.h
aes.h arc4.h ascon.h asn.h asn_public.h async.h blake2-impl.h blake2-int.h blake2.h camellia.h chacha.h chacha20_poly1305.h cmac.h coding.h compress.h cpuid.h cryptocb.h curve25519.h curve448.h des3.h dh.h dilithium.h dsa.h ecc.h eccsi.h ed25519.h ed448.h error-crypt.h falcon.h fe_448.h fe_operations.h fips_test.h ge_448.h ge_operations.h hash.h hmac.h hpke.h include.am integer.h kdf.h libwolfssl_sources.h libwolfssl_sources_asm.h logging.h md2.h md4.h md5.h mem_track.h memory.h misc.h mpi_class.h mpi_superclass.h oid_sum.h pkcs11.h pkcs12.h pkcs7.h poly1305.h puf.h pwdbased.h random.h rc2.h ripemd.h rng_bank.h rsa.h sakke.h selftest.h settings.h sha.h sha256.h sha3.h sha512.h signature.h siphash.h sm2.h sm3.h sm4.h sp.h sp_int.h srp.h tfm.h types.h visibility.h wc_encrypt.h wc_lms.h wc_mlkem.h wc_pkcs11.h wc_port.h wc_she.h wc_slhdsa.h wc_xmss.h wolfentropy.h wolfevent.h wolfmath.h
callbacks.h certs_test.h certs_test_sm.h crl.h error-ssl.h include.am internal.h ocsp.h options.h.in quic.h sniffer.h sniffer_error.h sniffer_error.rc ssl.h test.h version.h version.h.in wolfio.h
wrapper
Ada
examples
src aes_verify_main.adb rsa_verify_main.adb sha256_main.adb spark_sockets.adb spark_sockets.ads spark_terminal.adb spark_terminal.ads tls_client.adb tls_client.ads tls_client_main.adb tls_server.adb tls_server.ads tls_server_main.adb
.gitignore alire.toml examples.gpr
tests
src
support test_support.adb test_support.ads tests_root_suite.adb tests_root_suite.ads
aes_bindings_tests.adb aes_bindings_tests.ads rsa_verify_bindings_tests.adb rsa_verify_bindings_tests.ads sha256_bindings_tests.adb sha256_bindings_tests.ads tests.adb
.gitignore README.md alire.toml tests.gpr valgrind.supp
.gitignore README.md ada_binding.c alire.toml default.gpr include.am restricted.adc user_settings.h wolfssl-full_runtime.adb wolfssl-full_runtime.ads wolfssl.adb wolfssl.ads wolfssl.gpr
CSharp
wolfCrypt-Test
Properties AssemblyInfo.cs
App.config wolfCrypt-Test.cs wolfCrypt-Test.csproj
wolfSSL-DTLS-PSK-Server
Properties AssemblyInfo.cs
App.config wolfSSL-DTLS-PSK-Server.cs wolfSSL-DTLS-PSK-Server.csproj
wolfSSL-DTLS-Server
Properties AssemblyInfo.cs
App.config wolfSSL-DTLS-Server.cs wolfSSL-DTLS-Server.csproj
wolfSSL-Example-IOCallbacks
Properties AssemblyInfo.cs
App.config wolfSSL-Example-IOCallbacks.cs wolfSSL-Example-IOCallbacks.csproj
wolfSSL-TLS-Client
Properties AssemblyInfo.cs
App.config wolfSSL-TLS-Client.cs wolfSSL-TLS-Client.csproj
wolfSSL-TLS-PSK-Client
Properties AssemblyInfo.cs
App.config wolfSSL-TLS-PSK-Client.cs wolfSSL-TLS-PSK-Client.csproj
wolfSSL-TLS-PSK-Server
Properties AssemblyInfo.cs
App.config wolfSSL-TLS-PSK-Server.cs wolfSSL-TLS-PSK-Server.csproj
wolfSSL-TLS-Server
Properties AssemblyInfo.cs
App.config wolfSSL-TLS-Server.cs wolfSSL-TLS-Server.csproj
wolfSSL-TLS-ServerThreaded
Properties AssemblyInfo.cs
App.config wolfSSL-TLS-ServerThreaded.cs wolfSSL-TLS-ServerThreaded.csproj
wolfSSL_CSharp
Properties AssemblyInfo.cs Resources.Designer.cs Resources.resx
X509.cs wolfCrypt.cs wolfSSL.cs wolfSSL_CSharp.csproj
README.md include.am user_settings.h wolfSSL_CSharp.sln wolfssl.vcxproj
python README.md
rust
wolfssl-wolfcrypt
src aes.rs blake2.rs chacha20_poly1305.rs cmac.rs cmac_mac.rs curve25519.rs dh.rs dilithium.rs ecc.rs ecdsa.rs ed25519.rs ed448.rs fips.rs hkdf.rs hmac.rs hmac_mac.rs kdf.rs lib.rs lms.rs mlkem.rs mlkem_kem.rs pbkdf2_password_hash.rs prf.rs random.rs rsa.rs rsa_pkcs1v15.rs sha.rs sha_digest.rs sys.rs
tests
common mod.rs
test_aes.rs test_blake2.rs test_chacha20_poly1305.rs test_cmac.rs test_cmac_mac.rs test_curve25519.rs test_dh.rs test_dilithium.rs test_ecc.rs test_ecdsa.rs test_ed25519.rs test_ed448.rs test_hkdf.rs test_hmac.rs test_hmac_mac.rs test_kdf.rs test_lms.rs test_mlkem.rs test_mlkem_kem.rs test_pbkdf2_password_hash.rs test_prf.rs test_random.rs test_rsa.rs test_rsa_pkcs1v15.rs test_sha.rs test_sha_digest.rs test_wolfcrypt.rs
CHANGELOG.md Cargo.lock Cargo.toml Makefile README.md build.rs headers.h
Makefile README.md include.am
include.am
zephyr
samples
wolfssl_benchmark
boards native_sim.conf nrf5340dk_nrf5340_cpuapp.conf nrf5340dk_nrf5340_cpuapp_ns.conf
CMakeLists.txt README install_test.sh prj.conf sample.yaml zephyr_legacy.conf zephyr_v4.1.conf
wolfssl_test
boards native_sim.conf nrf5340dk_nrf5340_cpuapp.conf nrf5340dk_nrf5340_cpuapp_ns.conf
CMakeLists.txt README install_test.sh prj-no-malloc.conf prj.conf sample.yaml zephyr_legacy.conf zephyr_v4.1.conf
wolfssl_tls_sock
boards native_sim.conf
src tls_sock.c
CMakeLists.txt README install_sample.sh prj-no-malloc.conf prj.conf sample.yaml zephyr_legacy.conf zephyr_v4.1.conf
wolfssl_tls_thread
boards native_sim.conf nrf5340dk_nrf5340_cpuapp.conf nrf5340dk_nrf5340_cpuapp_ns.conf
src tls_threaded.c
CMakeLists.txt README install_sample.sh prj.conf sample.yaml zephyr_legacy.conf zephyr_v4.1.conf
wolfssl options.h
CMakeLists.txt Kconfig Kconfig.tls-generic README.md include.am module.yml user_settings-no-malloc.h user_settings.h zephyr_init.c
.codespellexcludelines .cyignore .editorconfig .gitignore .wolfssl_known_macro_extras AUTHORS CMakeLists.txt CMakePresets.json CMakeSettings.json COPYING ChangeLog.md INSTALL LICENSING LPCExpresso.cproject LPCExpresso.project Makefile.am README README-async.md README.md SCRIPTS-LIST SECURITY-POLICY.md SECURITY-REPORT-TEMPLATE.md Vagrantfile autogen.sh commit-tests.sh configure.ac fips-check.sh fips-hash.sh gencertbuf.pl input pull_to_vagrant.sh quit resource.h stamp-h.in valgrind-bash.supp valgrind-error.sh wnr-example.conf wolfssl-VS2022.vcxproj wolfssl.rc wolfssl.vcproj wolfssl.vcxproj wolfssl64.sln
.clangd .gitignore DOCS.md Makefile README.md assert.c core.c crypto.c env.c fs.c http.c ini.c json.c log.c luna.h main.c makext.mk path.c process.c request.c sqlite.c stash.c template.c util.c
wolfssl/wolfcrypt/src/port/Renesas/renesas_tsip_util.c raw
   1/* renesas_tsip_util.c
   2 *
   3 * Copyright (C) 2006-2026 wolfSSL Inc.
   4 *
   5 * This file is part of wolfSSL.
   6 *
   7 * wolfSSL is free software; you can redistribute it and/or modify
   8 * it under the terms of the GNU General Public License as published by
   9 * the Free Software Foundation; either version 3 of the License, or
  10 * (at your option) any later version.
  11 *
  12 * wolfSSL is distributed in the hope that it will be useful,
  13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15 * GNU General Public License for more details.
  16 *
  17 * You should have received a copy of the GNU General Public License
  18 * along with this program; if not, write to the Free Software
  19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
  20 */
  21
  22#ifdef HAVE_CONFIG_H
  23    #include <config.h>
  24#endif
  25
  26#include <wolfssl/wolfcrypt/settings.h>
  27
  28#if defined(WOLFSSL_RENESAS_TSIP)
  29
  30#include <wolfssl/wolfcrypt/wc_port.h>
  31#include <wolfssl/wolfcrypt/types.h>
  32#include <wolfssl/wolfcrypt/asn.h>
  33#include <wolfssl/wolfcrypt/memory.h>
  34#include <wolfssl/wolfcrypt/error-crypt.h>
  35#include <wolfssl/wolfcrypt/aes.h>
  36#ifdef NO_INLINE
  37    #include <wolfssl/wolfcrypt/misc.h>
  38#else
  39    #define WOLFSSL_MISC_INCLUDED
  40    #include <wolfcrypt/src/misc.c>
  41#endif
  42
  43#ifndef WOLFSSL_RENESAS_TSIP_CRYPTONLY
  44    #include <wolfssl/ssl.h>
  45    #include <wolfssl/internal.h>
  46    #include <wolfssl/error-ssl.h>
  47#endif
  48#include <wolfssl/wolfcrypt/port/Renesas/renesas_tsip_internal.h>
  49#include <wolfssl/wolfcrypt/port/Renesas/renesas_cmn.h>
  50
  51#include <stdio.h>
  52
  53#define TSIP_SIGNING_DATA_PREFIX_SZ     64
  54#define TSIP_SIGNING_DATA_PREFIX_BYTE   0x20
  55#define TSIP_MAX_SIG_DATA_SZ            130
  56#define TSIP_CERT_VFY_LABEL_SZ          34
  57
  58/* function pointer typedefs for TSIP SHAxx HMAC Verification  */
  59typedef e_tsip_err_t (*shaHmacInitFn)
  60        (tsip_hmac_sha_handle_t*, tsip_hmac_sha_key_index_t*);
  61typedef e_tsip_err_t (*shaHmacUpdateFn)
  62        (tsip_hmac_sha_handle_t*, uint8_t*, uint32_t);
  63typedef e_tsip_err_t (*shaHmacFinalFn)
  64        (tsip_hmac_sha_handle_t*, uint8_t*, uint32_t);
  65
  66/* ./ca-cert.der.sign,  */
  67/* expect to have these variables defined at user application */
  68#if defined(WOLFSSL_RENESAS_TSIP) && (WOLFSSL_RENESAS_TSIP_VER>=109)
  69extern uint32_t     s_inst2[R_TSIP_SINST2_WORD_SIZE];
  70#elif defined(WOLFSSL_RENESAS_TSIP) && (WOLFSSL_RENESAS_TSIP_VER>=106)
  71extern uint32_t     s_flash[];
  72extern uint32_t     s_inst1[R_TSIP_SINST_WORD_SIZE];
  73#endif
  74
  75#ifndef SINGLE_THREADED
  76wolfSSL_Mutex       tsip_mutex;
  77static int          tsip_CryptHwMutexInit_ = 0;
  78#endif
  79static tsip_key_data g_user_key_info;
  80struct WOLFSSL_HEAP_HINT*  tsip_heap_hint = NULL;
  81
  82/* tsip only keep one encrypted ca public key */
  83#if defined(WOLFSSL_RENESAS_TSIP_TLS)
  84static const byte*  ca_cert_sig = NULL;
  85static uint32_t     g_encrypted_publicCA_key[R_TSIP_SINST_WORD_SIZE];
  86
  87/* index of CM table. must be global since renesas_common access it. */
  88extern uint32_t     g_CAscm_Idx;
  89
  90#if defined(WOLFSSL_TLS13)
  91/* The server certificate verification label. */
  92static const byte serverCertVfyLabel[TSIP_CERT_VFY_LABEL_SZ] =
  93    "TLS 1.3, server CertificateVerify";
  94static const byte clientCertVfyLabel[TSIP_CERT_VFY_LABEL_SZ] =
  95    "TLS 1.3, client CertificateVerify";
  96#endif /* WOLFSSL_TLS13 */
  97
  98#endif /* WOLFSSL_RENESAS_TSIP_TLS */
  99
 100
 101
 102static int tsip_CryptHwMutexInit(wolfSSL_Mutex* mutex)
 103{
 104    return wc_InitMutex(mutex);
 105}
 106
 107static int tsip_CryptHwMutexLock(wolfSSL_Mutex* mutex)
 108{
 109    return wc_LockMutex(mutex);
 110}
 111
 112static int tsip_CryptHwMutexUnLock(wolfSSL_Mutex* mutex)
 113{
 114    return wc_UnLockMutex(mutex);
 115}
 116
 117#if defined(WOLFSSL_RENESAS_TSIP_TLS)
 118/* Set client encrypted public key data.
 119 * parameters:
 120 * ssl      WOLFSSL object
 121 * keyBuf  buffer holding wrapped key which Renesas key tool generated.
 122 * keyBufLen buffer length
 123 * keyType  0: RSA 2048bit, 1: RSA 4096bit, 2 ECC P256
 124 * return   0 on success, others on failure.
 125 */
 126WOLFSSL_API int tsip_use_PublicKey_buffer_TLS(WOLFSSL* ssl,
 127                                const char* keyBuf, int keyBufLen, int keyType)
 128{
 129    int ret = 0;
 130    TsipUserCtx* tuc = NULL;
 131
 132    WOLFSSL_ENTER("tsip_use_PublicKey_buffer_TLS");
 133
 134    if (ssl == NULL
 135    || keyBuf == NULL || keyBufLen == 0 || ssl->RenesasUserCtx == NULL) {
 136        ret = BAD_FUNC_ARG;
 137    }
 138
 139    if (ret == 0){
 140        tuc = ssl->RenesasUserCtx;
 141        tuc->internal->wrappedPublicKey  = (uint8_t*)keyBuf;
 142        tuc->wrappedKeyType    = keyType;
 143    }
 144
 145    WOLFSSL_LEAVE("tsip_use_PublicKey_buffer", ret);
 146    return ret;
 147}
 148/* Set client encrypted private key data.
 149 * parameters:
 150 * ssl      WOLFSSL object
 151 * keyBuf  buffer holding wrapped key which Renesas key tool generated.
 152 * keyBufLen buffer length
 153 * keyType  0: RSA 2048bit, 1: RSA 4096bit, 2 ECC P256
 154 * return   0 on success, others on failure.
 155 */
 156WOLFSSL_API int tsip_use_PrivateKey_buffer_TLS(struct WOLFSSL* ssl,
 157                                const char* keyBuf, int keyBufLen, int keyType)
 158{
 159    int ret = 0;
 160    TsipUserCtx* tuc = NULL;
 161
 162    WOLFSSL_ENTER("tsip_use_PrivateKey_buffer_TLS");
 163
 164    if (ssl == NULL || keyBuf == NULL || keyBufLen == 0 ||
 165                                ssl->RenesasUserCtx == NULL) {
 166        ret = BAD_FUNC_ARG;
 167    }
 168    if (ret == 0){
 169        tuc = ssl->RenesasUserCtx;
 170
 171        tuc->internal->wrappedPrivateKey = (uint8_t*)keyBuf;
 172        tuc->wrappedKeyType    = keyType;
 173
 174        /* store keyType as Id since Id capacity is 32 bytes */
 175        ret = wolfSSL_use_PrivateKey_Id(ssl,
 176                                (const unsigned char*)keyBuf, 32,
 177                                                tuc->devId);
 178        if (ret == WOLFSSL_SUCCESS) {
 179            ret = 0;
 180        }
 181    }
 182
 183    WOLFSSL_LEAVE("tsip_use_PrivateKey_buffer_TLS", ret);
 184    return ret;
 185}
 186#endif /* WOLFSSL_RENESAS_TSIP_TLS */
 187
 188#if defined(WOLFSSL_RENESAS_TSIP_CRYPTONLY)
 189
 190/* Set client encrypted public key data.
 191 * parameters:
 192 * uc      Tsip user context
 193 * keyBuf  buffer holding wrapped key which Renesas key tool generated.
 194 * keyBufLen buffer length
 195 * keyType  0: RSA 2048bit, 1: RSA 4096bit, 2 ECC P256
 196 * return   0 on success, others on failure.
 197 */
 198WOLFSSL_API int tsip_use_PublicKey_buffer_crypt(TsipUserCtx *uc,
 199                                const char* keyBuf, int keyBufLen, int keyType)
 200{
 201    int ret = 0;
 202
 203    WOLFSSL_ENTER("tsip_use_PublicKey_buffer_crypt");
 204
 205    if (uc == NULL || keyBuf == NULL || keyBufLen == 0) {
 206        ret = BAD_FUNC_ARG;
 207    }
 208
 209    if (ret == 0){
 210        uc->internal->wrappedPublicKey  = (uint8_t*)keyBuf;
 211        uc->wrappedKeyType    = keyType;
 212    }
 213
 214    WOLFSSL_LEAVE("tsip_use_PublicKey_buffer_crypt", ret);
 215    return ret;
 216}
 217/* Set client encrypted private key data.
 218 * parameters:
 219 * uc      Tsip user context
 220 * keyBuf  buffer holding wrapped key which Renesas key tool generated.
 221 * keyBufLen buffer length
 222 * keyType  0: RSA 2048bit, 1: RSA 4096bit, 2 ECC P256
 223 * return   0 on success, others on failure.
 224 */
 225WOLFSSL_API int tsip_use_PrivateKey_buffer_crypt(TsipUserCtx *uc,
 226                                const char* keyBuf, int keyBufLen, int keyType)
 227{
 228    int ret = 0;
 229
 230    WOLFSSL_ENTER("tsip_use_PrivateKey_buffer_crypt");
 231
 232    if (uc == NULL || keyBuf == NULL || keyBufLen == 0 ) {
 233        ret = BAD_FUNC_ARG;
 234    }
 235    if (ret == 0){
 236        uc->internal->wrappedPrivateKey = (uint8_t*)keyBuf;
 237        uc->wrappedKeyType    = keyType;
 238    }
 239
 240    WOLFSSL_LEAVE("tsip_use_PrivateKey_buffer_crypt", ret);
 241    return ret;
 242}
 243#endif /* WOLFSSL_RENESAS_TSIP_CRYPTONLY */
 244
 245#ifdef WOLFSSL_RENESAS_TSIP_TLS
 246
 247/* Obsolete function. Use tsip_use_PrivateKey_buffer instead.
 248 * Set client encrypted private key data.
 249 * parameters:
 250 * key      Renesas Secure Flash Programmer generated key.
 251 * keyType  0: RSA 2048bit, 1: RSA 4096bit, 2 ECC P256
 252 * return   0 on success, others on failure.
 253 */
 254WOLFSSL_API int  tsip_set_clientPrivateKeyEnc(const byte* encKey, int keyType)
 255{
 256    int ret = 0;
 257
 258    WOLFSSL_ENTER("tsip_set_clientPrivateKeyEnc");
 259
 260    if (ret == 0) {
 261        g_user_key_info.encrypted_user_private_key      = (uint8_t*)encKey;
 262        g_user_key_info.encrypted_user_private_key_type = keyType;
 263    }
 264
 265    WOLFSSL_LEAVE("tsip_set_clientPrivateKeyEnc", ret);
 266    return ret;
 267}
 268
 269
 270/*  Flush raw handshake messages in MsgBag
 271 *
 272 */
 273static void tsipFlushMessages(struct WOLFSSL* ssl)
 274{
 275    TsipUserCtx* tuc = NULL;
 276    MsgBag* bag = NULL;
 277
 278    if (ssl == NULL)
 279        return;
 280
 281    /* get user context for TSIP */
 282    tuc = ssl->RenesasUserCtx;
 283    if (tuc == NULL) {
 284        return;
 285    }
 286
 287    bag = &(tuc->internal->messageBag);
 288
 289    ForceZero(bag, sizeof(MsgBag));
 290
 291}
 292
 293
 294
 295int tsip_TlsCleanup(struct WOLFSSL* ssl)
 296{
 297    int ret = 0;
 298    TsipUserCtx* tuc = NULL;
 299
 300    if (ssl == NULL)
 301        return BAD_FUNC_ARG;
 302
 303    tuc = ssl->RenesasUserCtx;
 304
 305    if (tuc == NULL)
 306        return ret;
 307
 308    /* free stored messages */
 309    tsipFlushMessages(ssl);
 310    /* free internal structure */
 311    if (tuc->internal) {
 312        XFREE(tuc->internal, ssl->heap, DYNAMIC_TYPE_TMP_BUFFER);
 313        tuc->internal = NULL;
 314    }
 315
 316    /* zero clear */
 317    ForceZero(tuc, sizeof(TsipUserCtx));
 318
 319    return ret;
 320}
 321
 322
 323
 324#if defined(WOLFSSL_TLS13)
 325/* generate ECC P265 key pair for ECDHE.
 326 * generated public key is stored in KeyShareEntry.pubkey and private key is
 327 * stored in TsipUserCtx.EcdhPrivKey13Idx as tsip specific format.
 328 * return 0 on success, CRYPTOCB_UNAVAILABLE when tsip can not handle and is
 329 * expecting to fallback to S/W, other negative values on error.
 330 */
 331int tsip_Tls13GenEccKeyPair(WOLFSSL* ssl, KeyShareEntry* kse)
 332{
 333    int ret = 0;
 334    e_tsip_err_t    err = TSIP_SUCCESS;
 335    int             isTLS13 = 0;
 336    word16          curveId;
 337    ecc_key*        ecckey = NULL;
 338    TsipUserCtx*    tuc = NULL;
 339
 340    WOLFSSL_ENTER("tsip_Tls13GenEccKeyPair");
 341
 342    if (ssl == NULL || kse == NULL)
 343        ret = BAD_FUNC_ARG;
 344
 345    if (ret == 0) {
 346        if (ssl->version.major == SSLv3_MAJOR &&
 347            ssl->version.minor == TLSv1_3_MINOR) {
 348            isTLS13 = 1;
 349        }
 350        /* TSIP works only in TLS13 client side */
 351        if (!isTLS13 || ssl->options.side != WOLFSSL_CLIENT_END) {
 352            ret = CRYPTOCB_UNAVAILABLE;
 353        }
 354    }
 355
 356    if (ret == 0) {
 357        /* TSIP can handle SECP256R1 */
 358        if (kse->group != WOLFSSL_ECC_SECP256R1) {
 359            WOLFSSL_MSG("TSIP can't handle the specified ECC curve.");
 360            ret = CRYPTOCB_UNAVAILABLE;
 361        }
 362    }
 363
 364    if (ret == 0) {
 365        /* get user context for TSIP */
 366        tuc = ssl->RenesasUserCtx;
 367        if (tuc == NULL) {
 368            ret = CRYPTOCB_UNAVAILABLE;
 369        }
 370    }
 371
 372    curveId = ECC_SECP256R1;
 373
 374    /* Allocate space for the public key */
 375    if (ret == 0) {
 376        kse->pubKey = (byte*)XMALLOC(kse->pubKeyLen, ssl->heap,
 377                                                DYNAMIC_TYPE_PUBLIC_KEY);
 378        if (kse->pubKey == NULL) {
 379            WOLFSSL_MSG("Key data Memory error");
 380            ret = MEMORY_E;
 381        }
 382        else {
 383            ForceZero(kse->pubKey, kse->pubKeyLen);
 384        }
 385    }
 386
 387    /* Allocate an ECC key to hold private key. */
 388    if (ret == 0) {
 389        kse->key = (byte*)XMALLOC(sizeof(ecc_key), ssl->heap, DYNAMIC_TYPE_ECC);
 390        if (kse->key == NULL) {
 391            WOLFSSL_MSG("EccTempKey Memory error");
 392            ret = MEMORY_E;
 393        }
 394        else {
 395            ret = wc_ecc_init_ex((ecc_key*)kse->key, ssl->heap, ssl->devId);
 396        }
 397    }
 398    if (ret == 0) {
 399        ecckey = (ecc_key*)kse->key;
 400        ret = wc_ecc_set_curve(ecckey, kse->keyLen, curveId);
 401    }
 402
 403    kse->pubKey[0] = ECC_POINT_UNCOMP;
 404
 405    /* generate ecc key pair with TSIP */
 406    if (ret == 0) {
 407        if ((ret = tsip_hw_lock()) == 0) {
 408
 409            tuc->internal->Dhe_key_set  =0;
 410
 411            err = R_TSIP_GenerateTls13P256EccKeyIndex(
 412                    &(tuc->internal->handle13),
 413                    TSIP_TLS13_MODE_FULL_HANDSHAKE,
 414                    &(tuc->internal->EcdhPrivKey13Idx),/* private key index */
 415                    &(kse->pubKey[1]));              /* generated public key */
 416
 417            if (err != TSIP_SUCCESS){ret = WC_HW_E;}
 418
 419            if (ret == 0) {
 420                WOLFSSL_MSG("ECDH private key-index is stored by TSIP");
 421                tuc->internal->Dhe_key_set  =1;
 422            }
 423
 424            tsip_hw_unlock();
 425        }
 426        else {
 427            WOLFSSL_MSG("mutex locking error");
 428        }
 429    }
 430
 431    if ((ret != 0) && (ret != CRYPTOCB_UNAVAILABLE)) {
 432        XFREE(kse->key, ssl->heap, DYNAMIC_TYPE_PRIVATE_KEY);
 433        kse->key = NULL;
 434        XFREE(kse->pubKey, ssl->heap, DYNAMIC_TYPE_PUBLIC_KEY);
 435        kse->pubKey = NULL;
 436    }
 437    WOLFSSL_LEAVE("tsip_Tls13GenEccKeyPair", ret);
 438    return ret;
 439}
 440
 441/* generate shared secret(pre-master secret)
 442 * get peer's raw ECDHE public key from KeyShareEntry.
 443 * The pre-master secret generated by TSIP is stored into
 444 * TsipUserCtx.sharedSecret13Idx as TSIP specific format.
 445 *
 446 * return 0 on success, CRYPTOCB_UNAVAILABLE when tsip can not handle and is
 447 * expecting to fallback to S/W, other negative values on error.
 448 */
 449int tsip_Tls13GenSharedSecret(struct WOLFSSL* ssl,
 450                                                    struct KeyShareEntry* kse)
 451{
 452    int ret = 0;
 453    e_tsip_err_t    err   = TSIP_SUCCESS;
 454    int             isTLS13   = 0;
 455    uint8_t*        pubkeyraw = NULL;
 456    TsipUserCtx*    tuc = NULL;
 457
 458    WOLFSSL_ENTER("tsip_Tls13GenSharedSecret");
 459    if (ssl == NULL || kse == NULL)
 460        ret = BAD_FUNC_ARG;
 461
 462    if (ret == 0) {
 463        if (ssl->version.major == SSLv3_MAJOR &&
 464            ssl->version.minor == TLSv1_3_MINOR) {
 465            isTLS13 = 1;
 466        }
 467        if (!isTLS13 || ssl->options.side != WOLFSSL_CLIENT_END) {
 468            WOLFSSL_MSG("Not in TLS1.3 or in client");
 469            ret = CRYPTOCB_UNAVAILABLE;
 470        }
 471    }
 472
 473    if (ret == 0) {
 474        /* make sure it is in TLS13 and in client side */
 475        if (kse->group != WOLFSSL_ECC_SECP256R1) {
 476            WOLFSSL_MSG("TSIP can't handle the specified group");
 477            ret = CRYPTOCB_UNAVAILABLE;
 478        }
 479    }
 480
 481    if (ret == 0) {
 482        /* get user context for TSIP */
 483        tuc = ssl->RenesasUserCtx;
 484        if (tuc == NULL) {
 485            WOLFSSL_MSG("TsipUserCtx hasn't been set to ssl.");
 486            ret = CRYPTOCB_UNAVAILABLE;
 487        }
 488    }
 489
 490    if (ret == 0) {
 491        if (!tuc->internal->Dhe_key_set) {
 492            WOLFSSL_MSG("TSIP wasn't involved in the key-exchange.");
 493            ret = CRYPTOCB_UNAVAILABLE;
 494        }
 495    }
 496
 497    if (ret == 0) {
 498        if ((ret = tsip_hw_lock()) == 0) {
 499
 500            tuc->internal->SharedSecret_set = 0;
 501            pubkeyraw = kse->ke + 1;        /* peer's raw public key data */
 502
 503            /* derive shared secret */
 504            err = R_TSIP_Tls13GenerateEcdheSharedSecret(
 505                TSIP_TLS13_MODE_FULL_HANDSHAKE,
 506                pubkeyraw,                 /* peer's ECDHE public key */
 507                &(tuc->internal->EcdhPrivKey13Idx),/*(out) own ECDHE priv key */
 508                &(tuc->internal->sharedSecret13Idx)); /*(out) PreMasterSecret */
 509
 510            if (err != TSIP_SUCCESS) {
 511                WOLFSSL_MSG("R_TSIP_Tls13GenerateEcdheSharedSecret error");
 512                ret = WC_HW_E;
 513            }
 514            if (ret == 0) {
 515                /* set flag for later tsip operations */
 516                tuc->internal->SharedSecret_set = 1;
 517            }
 518
 519            tsip_hw_unlock();
 520        }
 521        else {
 522            WOLFSSL_MSG("mutex locking error");
 523        }
 524    }
 525
 526    WOLFSSL_LEAVE("tsip_Tls13GenSharedSecret", ret);
 527    return ret;
 528}
 529
 530int tsip_Tls13DeriveEarlySecret(struct WOLFSSL* ssl)
 531{
 532    int ret = 0;
 533    TsipUserCtx*    tuc = NULL;
 534
 535    WOLFSSL_ENTER("tsip_Tls13DeriveEarlySecret");
 536    if (ssl == NULL)
 537        ret = BAD_FUNC_ARG;
 538
 539    if (ret == 0) {
 540        /* get user context for TSIP */
 541        tuc = ssl->RenesasUserCtx;
 542        if (tuc == NULL) {
 543            WOLFSSL_MSG("TsipUserCtx hasn't been set to ssl.");
 544            ret = CRYPTOCB_UNAVAILABLE;
 545        }
 546        else {
 547            tuc->internal->EarlySecret_set = 1;
 548        }
 549    }
 550
 551    WOLFSSL_LEAVE("tsip_Tls13DeriveEarlySecret", ret);
 552    return ret;
 553}
 554
 555/* derive handshake secret.
 556 * get pre-master secret stored in TsipUserCtx.sharedSecret13Idx.
 557 * Derived handshake secret is stored into TsipUserCtx.handshakeSecret13Idx
 558 * as tsip specific format.
 559 *
 560 * return 0 on success, CRYPTOCB_UNAVAILABLE when tsip can not handle and is
 561 * expecting to fallback to S/W, other negative values on error.
 562 */
 563int tsip_Tls13DeriveHandshakeSecret(struct WOLFSSL* ssl)
 564{
 565    int ret = 0;
 566    e_tsip_err_t err = TSIP_SUCCESS;
 567    int isTLS13 = 0;
 568    TsipUserCtx*    tuc = NULL;
 569
 570    WOLFSSL_ENTER("tsip_Tls13DeriveHandshakeSecret");
 571    if (ssl == NULL)
 572        ret = BAD_FUNC_ARG;
 573
 574    if (ret == 0) {
 575        if (ssl->version.major == SSLv3_MAJOR &&
 576            ssl->version.minor == TLSv1_3_MINOR) {
 577            isTLS13 = 1;
 578        }
 579
 580        if (!isTLS13 || (ssl->options.side != WOLFSSL_CLIENT_END)) {
 581            ret = CRYPTOCB_UNAVAILABLE;   /* expecting to fallback to S/W */
 582        }
 583    }
 584
 585    if (ret == 0) {
 586        /* get user context for TSIP */
 587        tuc = ssl->RenesasUserCtx;
 588        if (tuc == NULL) {
 589            WOLFSSL_MSG("TsipUserCtx hasn't been set to ssl.");
 590            ret = CRYPTOCB_UNAVAILABLE;
 591        }
 592    }
 593
 594    if (ret == 0) {
 595        /* check if pre-master secret is generated by tsip */
 596        if (!tuc->internal->SharedSecret_set) {
 597            WOLFSSL_MSG("TSIP wasn't involved in the key-exchange.");
 598            ret = CRYPTOCB_UNAVAILABLE;
 599        }
 600    }
 601
 602    if (ret == 0) {
 603        if ((ret = tsip_hw_lock()) == 0) {
 604
 605            tuc->internal->HandshakeSecret_set = 0;
 606
 607            err = R_TSIP_Tls13GenerateHandshakeSecret(
 608                        &(tuc->internal->sharedSecret13Idx),
 609                        &(tuc->internal->handshakeSecret13Idx));
 610
 611            if (err != TSIP_SUCCESS) {
 612                WOLFSSL_MSG("R_TSIP_Tls13GenerateHandshakeSecret error");
 613                ret = WC_HW_E;
 614            }
 615            if (ret == 0) {
 616                tuc->internal->HandshakeSecret_set = 1;
 617            }
 618            tsip_hw_unlock();
 619        }
 620        else {
 621            WOLFSSL_MSG("mutex locking error");
 622        }
 623    }
 624
 625    WOLFSSL_LEAVE("tsip_Tls13DeriveHandshakeSecret", ret);
 626    return ret;
 627}
 628
 629static int tsipTls13DeriveClientHandshakeKeys(struct WOLFSSL* ssl)
 630{
 631    int ret = 0;
 632    e_tsip_err_t    err = TSIP_SUCCESS;
 633    int             isTLS13 = 0;
 634    TsipUserCtx*    tuc = NULL;
 635    byte            hash[WC_SHA256_DIGEST_SIZE];
 636
 637
 638    WOLFSSL_ENTER("tsipTls13DeriveClientHandshakeKeys");
 639    if (ssl == NULL)
 640        ret = BAD_FUNC_ARG;
 641
 642    if (ret == 0) {
 643        if (ssl->version.major == SSLv3_MAJOR &&
 644            ssl->version.minor == TLSv1_3_MINOR) {
 645            isTLS13 = 1;
 646        }
 647        if (!isTLS13 || (ssl->options.side != WOLFSSL_CLIENT_END)) {
 648            ret = CRYPTOCB_UNAVAILABLE;   /* expecting to fallback to S/W */
 649        }
 650    }
 651
 652    if (ret == 0) {
 653        /* get user context for TSIP */
 654        tuc = ssl->RenesasUserCtx;
 655        if (tuc == NULL) {
 656            WOLFSSL_MSG("TsipUserCtx hasn't been set to ssl.");
 657            ret = CRYPTOCB_UNAVAILABLE;
 658        }
 659    }
 660
 661    if (ret == 0) {
 662        /* make sure client handshake secret is generated by tsip */
 663        if (!tuc->internal->HandshakeSecret_set) {
 664            WOLFSSL_MSG("TSIP wasn't involved in the key-exchange.");
 665            ret = CRYPTOCB_UNAVAILABLE;
 666        }
 667    }
 668
 669    if (ret == 0) {
 670        /* get digest of handshake messages */
 671        ret = tsip_GetMessageSha256(ssl, hash, NULL);
 672    }
 673
 674    if (ret == 0) {
 675        if ((ret = tsip_hw_lock()) == 0) {
 676
 677            tuc->internal->HandshakeClientTrafficKey_set = 0;
 678
 679            err = R_TSIP_Tls13GenerateClientHandshakeTrafficKey(
 680                    &(tuc->internal->handle13),
 681                    TSIP_TLS13_MODE_FULL_HANDSHAKE,
 682                    &(tuc->internal->handshakeSecret13Idx),
 683                    hash,
 684                    &(tuc->internal->clientWriteKey13Idx),
 685                    &(tuc->internal->clientFinished13Idx));
 686
 687            if (err != TSIP_SUCCESS) {
 688                WOLFSSL_MSG(
 689                    "R_TSIP_Tls13GenerateClientHandshakeTrafficKey error");
 690                ret = WC_HW_E;
 691            }
 692
 693            /* key derivation succeeded */
 694            if (ret == 0) {
 695                tuc->internal->HandshakeClientTrafficKey_set = 1;
 696            }
 697
 698            tsip_hw_unlock();
 699        }
 700        else {
 701            WOLFSSL_MSG("mutex locking error");
 702        }
 703    }
 704
 705    WOLFSSL_LEAVE("tsipTls13DeriveClientHandshakeKeys", ret);
 706    return ret;
 707}
 708
 709static int tsipTls13DeriveServerHandshakeKeys(struct WOLFSSL* ssl)
 710{
 711    int ret = 0;
 712    e_tsip_err_t    err = TSIP_SUCCESS;
 713    int             isTLS13 = 0;
 714    TsipUserCtx*    tuc = NULL;
 715    byte            hash[WC_SHA256_DIGEST_SIZE];
 716
 717
 718    WOLFSSL_ENTER("tsipTls13DeriveServerHandshakeKeys");
 719    if (ssl == NULL)
 720        ret = BAD_FUNC_ARG;
 721
 722    if (ret == 0) {
 723        if (ssl->version.major == SSLv3_MAJOR &&
 724            ssl->version.minor == TLSv1_3_MINOR) {
 725            isTLS13 = 1;
 726        }
 727        if (!isTLS13 || (ssl->options.side != WOLFSSL_CLIENT_END)) {
 728            ret = CRYPTOCB_UNAVAILABLE;   /* expecting to fallback to S/W */
 729        }
 730    }
 731
 732    if (ret == 0) {
 733        /* get user context for TSIP */
 734        tuc = ssl->RenesasUserCtx;
 735        if (tuc == NULL) {
 736            WOLFSSL_MSG("TsipUserCtx hasn't been set to ssl.");
 737            ret = CRYPTOCB_UNAVAILABLE;
 738        }
 739    }
 740
 741    if (ret == 0) {
 742        /* make sure client handshake secret is generated by tsip */
 743        if (!tuc->internal->HandshakeSecret_set) {
 744            WOLFSSL_MSG("TSIP wasn't involved in the key-exchange.");
 745            ret = CRYPTOCB_UNAVAILABLE;
 746        }
 747    }
 748
 749    if (ret == 0) {
 750        /* get digest of handshake packets */
 751        ret = tsip_GetMessageSha256(ssl, hash, NULL);
 752    }
 753
 754    if (ret == 0) {
 755        if ((ret = tsip_hw_lock()) == 0) {
 756
 757            tuc->internal->HandshakeServerTrafficKey_set = 0;
 758
 759            err = R_TSIP_Tls13GenerateServerHandshakeTrafficKey(
 760                        &(tuc->internal->handle13),
 761                        TSIP_TLS13_MODE_FULL_HANDSHAKE,
 762                        &(tuc->internal->handshakeSecret13Idx),
 763                        hash,
 764                        &(tuc->internal->serverWriteKey13Idx),
 765                        &(tuc->internal->serverFinished13Idx));
 766
 767            if (err != TSIP_SUCCESS) {
 768                WOLFSSL_MSG(
 769                    "R_TSIP_Tls13GenerateServerHandshakeTrafficKey error");
 770                ret = WC_HW_E;
 771            }
 772
 773            /* key derivation succeeded */
 774            if (ret == 0) {
 775                tuc->internal->HandshakeServerTrafficKey_set = 1;
 776            }
 777
 778            tsip_hw_unlock();
 779        }
 780        else {
 781            WOLFSSL_MSG("mutex locking error");
 782        }
 783    }
 784
 785    WOLFSSL_LEAVE("tsipTls13DeriveServerHandshakeKeys", ret);
 786    return ret;
 787}
 788
 789static int tsipTls13DeriveTrafficKeys(struct WOLFSSL* ssl)
 790{
 791    int ret = 0;
 792    e_tsip_err_t    err = TSIP_SUCCESS;
 793    int             isTLS13 = 0;
 794    TsipUserCtx*    tuc = NULL;
 795    byte            hash[WC_SHA256_DIGEST_SIZE];
 796
 797
 798    WOLFSSL_ENTER("tsipTls13DeriveTrafficKeys");
 799    if (ssl == NULL)
 800        ret = BAD_FUNC_ARG;
 801
 802    if (ret == 0) {
 803        if (ssl->version.major == SSLv3_MAJOR &&
 804            ssl->version.minor == TLSv1_3_MINOR) {
 805            isTLS13 = 1;
 806        }
 807        if (!isTLS13 || (ssl->options.side != WOLFSSL_CLIENT_END)) {
 808            ret = CRYPTOCB_UNAVAILABLE;   /* expecting to fallback to S/W */
 809        }
 810    }
 811
 812    if (ret == 0) {
 813        /* get user context for TSIP */
 814        tuc = ssl->RenesasUserCtx;
 815        if (tuc == NULL) {
 816            WOLFSSL_MSG("TsipUserCtx hasn't been set to ssl.");
 817            ret = CRYPTOCB_UNAVAILABLE;
 818        }
 819    }
 820
 821    if (ret == 0) {
 822        /* make sure master secret is generated by tsip */
 823        if (!tuc->internal->MasterSecret_set) {
 824            WOLFSSL_MSG("TSIP wasn't involved in the key-exchange.");
 825            ret = CRYPTOCB_UNAVAILABLE;
 826        }
 827    }
 828
 829    if (ret == 0) {
 830        /* get digest of handshake messages */
 831        ret = tsip_GetMessageSha256(ssl, hash, NULL);
 832    }
 833
 834    if (ret == 0) {
 835        if ((ret = tsip_hw_lock()) == 0) {
 836
 837            tuc->internal->ServerTrafficSecret_set   = 0;
 838            tuc->internal->ClientTrafficSecret_set   = 0;
 839            tuc->internal->ServerWriteTrafficKey_set = 0;
 840            tuc->internal->ClientWriteTrafficKey_set = 0;
 841
 842            err = R_TSIP_Tls13GenerateApplicationTrafficKey(
 843                        &(tuc->internal->handle13),
 844                        TSIP_TLS13_MODE_FULL_HANDSHAKE,
 845                        &(tuc->internal->masterSecret13Idx),
 846                        (uint8_t*)hash,
 847                        &(tuc->internal->serverAppTraffic13Secret),
 848                        &(tuc->internal->clientAppTraffic13Secret),
 849                        &(tuc->internal->serverAppWriteKey13Idx),
 850                        &(tuc->internal->clientAppWriteKey13Idx));
 851
 852            if (err != TSIP_SUCCESS) {
 853                WOLFSSL_MSG(
 854                    "R_TSIP_Tls13GenerateApplicationTrafficKey error");
 855                ret = WC_HW_E;
 856            }
 857
 858            /* key derivation succeeded */
 859            if (ret == 0) {
 860                tuc->internal->ServerTrafficSecret_set   = 1;
 861                tuc->internal->ClientTrafficSecret_set   = 1;
 862                tuc->internal->ServerWriteTrafficKey_set = 1;
 863                tuc->internal->ClientWriteTrafficKey_set = 1;
 864            }
 865
 866            tsip_hw_unlock();
 867        }
 868        else {
 869            WOLFSSL_MSG("mutex locking error");
 870        }
 871    }
 872
 873    WOLFSSL_LEAVE("tsipTls13DeriveTrafficKeys", ret);
 874    return ret;
 875}
 876
 877static int tsipTls13UpdateClientTrafficKeys(struct WOLFSSL* ssl)
 878{
 879    int ret     = 0;
 880    e_tsip_err_t    err = TSIP_SUCCESS;
 881    int             isTLS13 = 0;
 882    TsipUserCtx*    tuc = NULL;
 883
 884     WOLFSSL_ENTER("tsipTls13UpdateClientTrafficKeys");
 885
 886    if (ssl == NULL)
 887        ret = BAD_FUNC_ARG;
 888
 889    if (ret == 0) {
 890        if (ssl->version.major == SSLv3_MAJOR &&
 891            ssl->version.minor == TLSv1_3_MINOR) {
 892            isTLS13 = 1;
 893        }
 894        if (!isTLS13 || (ssl->options.side != WOLFSSL_CLIENT_END)) {
 895            ret = CRYPTOCB_UNAVAILABLE;   /* expecting to fallback to S/W */
 896        }
 897    }
 898
 899    if (ret == 0) {
 900        /* get user context for TSIP */
 901        tuc = ssl->RenesasUserCtx;
 902        if (tuc == NULL) {
 903            WOLFSSL_MSG("TsipUserCtx hasn't been set to ssl.");
 904            ret = CRYPTOCB_UNAVAILABLE;
 905        }
 906    }
 907
 908    if (ret == 0) {
 909        /* make sure application secret is generated by tsip */
 910        if (!tuc->internal->ClientTrafficSecret_set) {
 911            WOLFSSL_MSG("TSIP wasn't involved in the key-exchange.");
 912            ret = CRYPTOCB_UNAVAILABLE;
 913        }
 914    }
 915    if (ret == 0) {
 916        if ((ret = tsip_hw_lock()) == 0) {
 917
 918            tuc->internal->ClientWriteTrafficKey_set = 0;
 919
 920            err = R_TSIP_Tls13UpdateApplicationTrafficKey(
 921                        &(tuc->internal->handle13),
 922                        TSIP_TLS13_MODE_FULL_HANDSHAKE,
 923                        TSIP_TLS13_UPDATE_CLIENT_KEY,
 924                        &(tuc->internal->clientAppTraffic13Secret),
 925                        &(tuc->internal->clientAppTraffic13Secret),
 926                        &(tuc->internal->clientAppWriteKey13Idx));
 927            if (err != TSIP_SUCCESS) {
 928                WOLFSSL_MSG("R_TSIP_Tls13UpdateApplicationTrafficKey error");
 929                ret = WC_HW_E;
 930            }
 931            else {
 932                tuc->internal->ClientWriteTrafficKey_set = 1;
 933            }
 934            tsip_hw_unlock();
 935        }
 936        else {
 937            WOLFSSL_MSG("mutex locking error");
 938        }
 939    }
 940
 941    WOLFSSL_LEAVE("tsipTls13UpdateClientTrafficKeys", ret);
 942    return ret;
 943}
 944
 945static int tsipTls13UpdateServerTrafficKeys(struct WOLFSSL* ssl)
 946{
 947    int ret     = 0;
 948    e_tsip_err_t    err = TSIP_SUCCESS;
 949    int             isTLS13 = 0;
 950    TsipUserCtx*    tuc = NULL;
 951
 952     WOLFSSL_ENTER("tsipTls13UpdateServerTrafficKeys");
 953
 954    if (ssl == NULL)
 955        ret = BAD_FUNC_ARG;
 956
 957    if (ret == 0) {
 958        if (ssl->version.major == SSLv3_MAJOR &&
 959            ssl->version.minor == TLSv1_3_MINOR) {
 960            isTLS13 = 1;
 961        }
 962        if (!isTLS13 || (ssl->options.side != WOLFSSL_CLIENT_END)) {
 963            ret = CRYPTOCB_UNAVAILABLE;   /* expecting to fallback to S/W */
 964        }
 965    }
 966
 967    if (ret == 0) {
 968        /* get user context for TSIP */
 969        tuc = ssl->RenesasUserCtx;
 970        if (tuc == NULL) {
 971            WOLFSSL_MSG("TsipUserCtx hasn't been set to ssl.");
 972            ret = CRYPTOCB_UNAVAILABLE;
 973        }
 974    }
 975
 976    if (ret == 0) {
 977        /* make sure application secret is generated by tsip */
 978        if (!tuc->internal->ServerTrafficSecret_set) {
 979            WOLFSSL_MSG("TSIP wasn't involved in the key-exchange.");
 980            ret = CRYPTOCB_UNAVAILABLE;
 981        }
 982    }
 983    if (ret == 0) {
 984        if ((ret = tsip_hw_lock()) == 0) {
 985
 986            tuc->internal->ServerWriteTrafficKey_set = 0;
 987
 988            err = R_TSIP_Tls13UpdateApplicationTrafficKey(
 989                        &(tuc->internal->handle13),
 990                        TSIP_TLS13_MODE_FULL_HANDSHAKE,
 991                        TSIP_TLS13_UPDATE_SERVER_KEY,
 992                        &(tuc->internal->serverAppTraffic13Secret),
 993                        &(tuc->internal->serverAppTraffic13Secret),
 994                        &(tuc->internal->serverAppWriteKey13Idx));
 995            if (err != TSIP_SUCCESS) {
 996                WOLFSSL_MSG("R_TSIP_Tls13UpdateApplicationTrafficKey error");
 997                ret = WC_HW_E;
 998            }
 999            else {
1000                tuc->internal->ServerWriteTrafficKey_set = 1;
1001            }
1002            tsip_hw_unlock();
1003        }
1004        else {
1005            WOLFSSL_MSG("mutex locking error");
1006        }
1007    }
1008
1009    WOLFSSL_LEAVE("tsipTls13UpdateServerTrafficKeys", ret);
1010    return ret;
1011}
1012
1013/* Derive the keys for TLS v1.3.
1014 *
1015 * ssl    The WOLFSSL object.
1016 * keyType  kind of keys to derive.
1017 *        handshake_key: when deriving keys for encrypting handshake messages.
1018 *        traffic_key: when deriving first keys for encrypting traffic messages.
1019 *        update_traffic_key: when deriving next keys for encrypting
1020 *        traffic messages.
1021 *
1022 * side   ENCRYPT_SIDE_ONLY: when only encryption secret needs to be derived.
1023 *        DECRYPT_SIDE_ONLY: when only decryption secret needs to be derived.
1024 *        ENCRYPT_AND_DECRYPT_SIDE: when both secret needs to be derived.
1025 *
1026 * returns 0 on success, CRYPTOCB_UNAVAILABLE when tsip can not handle and is
1027 * expecting to fallback to S/W, other negative values on error.
1028 */
1029int tsip_Tls13DeriveKeys(struct WOLFSSL* ssl,
1030                                                int keyType, int side)
1031{
1032    int ret = 0;
1033    int provision;
1034
1035    WOLFSSL_ENTER("tsip_Tls13DeriveKeys");
1036
1037    if (side == ENCRYPT_AND_DECRYPT_SIDE) {
1038        provision = PROVISION_CLIENT_SERVER;
1039    }
1040    else {
1041        provision = ((ssl->options.side != WOLFSSL_CLIENT_END) ^
1042                     (side == ENCRYPT_SIDE_ONLY)) ? PROVISION_CLIENT :
1043                                                    PROVISION_SERVER;
1044    }
1045    /* derive client key */
1046    switch (keyType) {
1047        case early_data_key:
1048            WOLFSSL_MSG("TSIP can't handle early data key");
1049            ret = CRYPTOCB_UNAVAILABLE;
1050            break;
1051
1052        case handshake_key:
1053            if (provision & PROVISION_CLIENT) {
1054                ret = tsipTls13DeriveClientHandshakeKeys(ssl);
1055            }
1056            break;
1057
1058        case traffic_key:
1059            ret = tsipTls13DeriveTrafficKeys(ssl);
1060            break;
1061
1062        case update_traffic_key:
1063            if (provision & PROVISION_CLIENT) {
1064                ret = tsipTls13UpdateClientTrafficKeys(ssl);
1065            }
1066            break;
1067
1068        default:
1069            ret = CRYPTOCB_UNAVAILABLE;
1070            break;
1071    }
1072
1073    if (ret == 0) {
1074        /* derive server key */
1075        switch (keyType) {
1076            case early_data_key:
1077                WOLFSSL_MSG("TSIP can't handle early data key");
1078                ret = CRYPTOCB_UNAVAILABLE;
1079                break;
1080
1081            case handshake_key:
1082                if (provision & PROVISION_SERVER) {
1083                    ret = tsipTls13DeriveServerHandshakeKeys(ssl);
1084                }
1085                break;
1086
1087            case traffic_key:
1088                /* traffic key for server was derived in
1089                 * tsipTls13DeriveTrafficKeys
1090                 */
1091                break;
1092
1093            case update_traffic_key:
1094                if (provision & PROVISION_SERVER) {
1095                    ret = tsipTls13UpdateServerTrafficKeys(ssl);
1096                }
1097                break;
1098
1099            default:
1100                ret = CRYPTOCB_UNAVAILABLE;
1101                break;
1102        }
1103    }
1104    WOLFSSL_LEAVE("tsip_Tls13DeriveKeys", ret);
1105    return ret;
1106}
1107
1108int tsip_Tls13DeriveMasterSecret(struct WOLFSSL* ssl)
1109{
1110    int ret = 0;
1111    e_tsip_err_t    err = TSIP_SUCCESS;
1112    int             isTLS13 = 0;
1113    TsipUserCtx*    tuc = NULL;
1114
1115    WOLFSSL_ENTER("tsip_Tls13DeriveMasterSecret");
1116
1117    if (ssl == NULL)
1118        ret = BAD_FUNC_ARG;
1119
1120    if (ret == 0) {
1121        if (ssl->version.major == SSLv3_MAJOR &&
1122            ssl->version.minor == TLSv1_3_MINOR) {
1123            isTLS13 = 1;
1124        }
1125        if (!isTLS13 || (ssl->options.side != WOLFSSL_CLIENT_END)) {
1126            ret = CRYPTOCB_UNAVAILABLE;   /* expecting to fallback to S/W */
1127        }
1128    }
1129    if (ret == 0) {
1130        /* get user context for TSIP */
1131        tuc = ssl->RenesasUserCtx;
1132        if (tuc == NULL) {
1133            WOLFSSL_MSG("TsipUserCtx hasn't been set to ssl.");
1134            ret = CRYPTOCB_UNAVAILABLE;
1135        }
1136    }
1137    if (ret == 0) {
1138        /* make sure handshake secret and verify data has been set by TSIP */
1139        if (!tuc->internal->HandshakeSecret_set ||
1140            !tuc->internal->HandshakeVerifiedData_set) {
1141            WOLFSSL_MSG("TSIP wasn't involved in the key-exchange.");
1142            ret = CRYPTOCB_UNAVAILABLE;
1143        }
1144    }
1145    if (ret == 0) {
1146        if ((ret = tsip_hw_lock()) == 0) {
1147
1148            tuc->internal->MasterSecret_set = 0;
1149
1150            err = R_TSIP_Tls13GenerateMasterSecret(
1151                        &(tuc->internal->handle13),
1152                        TSIP_TLS13_MODE_FULL_HANDSHAKE,
1153                        &(tuc->internal->handshakeSecret13Idx),
1154                        (uint32_t*)tuc->internal->verifyData13Idx,
1155                        &(tuc->internal->masterSecret13Idx));
1156
1157            if (err != TSIP_SUCCESS) {
1158                WOLFSSL_MSG(
1159                    "R_TSIP_Tls13GenerateMasterSecret( error");
1160                ret = WC_HW_E;
1161            }
1162
1163            if (ret == 0) {
1164                tuc->internal->MasterSecret_set = 1;
1165            }
1166
1167            tsip_hw_unlock();
1168        }
1169        else {
1170            WOLFSSL_MSG("mutex locking error");
1171        }
1172    }
1173
1174    WOLFSSL_LEAVE("tsip_Tls13DeriveMasterSecret", ret);
1175    return ret;
1176}
1177
1178/* verify handshake
1179 * ssl     WOLFSSL object
1180 * hash    buffer holding decrypted finished message content from server.
1181 *
1182 */
1183static int tsipTls13VerifyHandshake(struct WOLFSSL* ssl,
1184                                    const byte* hash)/*finished message*/
1185{
1186    int             ret = 0;
1187    e_tsip_err_t    err = TSIP_SUCCESS;
1188    int             isTLS13 = 0;
1189    TsipUserCtx*    tuc = NULL;
1190    word32          msgHash[WC_SHA256_DIGEST_SIZE/sizeof(word32)];
1191
1192    WOLFSSL_ENTER("tsipTls13VerifyHandshake");
1193
1194    if (ssl == NULL)
1195        ret = BAD_FUNC_ARG;
1196
1197    if (ret == 0) {
1198        if (ssl->version.major == SSLv3_MAJOR &&
1199            ssl->version.minor == TLSv1_3_MINOR) {
1200            isTLS13 = 1;
1201        }
1202        if (!isTLS13 || (ssl->options.side != WOLFSSL_CLIENT_END)) {
1203            ret = CRYPTOCB_UNAVAILABLE;   /* expecting to fallback to S/W */
1204        }
1205    }
1206
1207    if (ret == 0) {
1208        /* get user context for TSIP */
1209        tuc = ssl->RenesasUserCtx;
1210        if (tuc == NULL) {
1211            WOLFSSL_MSG("TsipUserCtx hasn't been set to ssl.");
1212            ret = CRYPTOCB_UNAVAILABLE;
1213        }
1214    }
1215
1216    if (ret == 0) {
1217        /* make sure handshake secret is generated by tsip */
1218        if (!tuc->internal->HandshakeServerTrafficKey_set) {
1219            WOLFSSL_MSG("TSIP wasn't involved in the key-exchange.");
1220            ret = CRYPTOCB_UNAVAILABLE;
1221        }
1222    }
1223    /* get digest of handshake messages */
1224    if (ret == 0) {
1225        ret = tsip_GetMessageSha256(ssl, (byte*)msgHash, NULL);
1226    }
1227
1228    if (ret == 0) {
1229        if ((ret = tsip_hw_lock()) == 0) {
1230
1231            tuc->internal->HandshakeVerifiedData_set = 0;
1232
1233            err = R_TSIP_Tls13ServerHandshakeVerification(
1234                                TSIP_TLS13_MODE_FULL_HANDSHAKE,
1235                                &(tuc->internal->serverFinished13Idx),
1236                                (uint8_t*)msgHash,
1237                                (uint8_t*)hash,
1238                                (uint32_t*)(tuc->internal->verifyData13Idx));
1239
1240            if (err == TSIP_ERR_VERIFICATION_FAIL) {
1241                WOLFSSL_MSG("Handshake verification error");
1242                ret = VERIFY_FINISHED_ERROR;
1243            }
1244            else if (err != TSIP_SUCCESS) {
1245                WOLFSSL_MSG("R_TSIP_Tls13ServerHandshakeVerification error");
1246                ret = WC_HW_E;
1247            }
1248            if (ret == 0) {
1249                WOLFSSL_MSG("Verified handshake");
1250                tuc->internal->HandshakeVerifiedData_set = 1;
1251            }
1252
1253            tsip_hw_unlock();
1254        }
1255        else {
1256            WOLFSSL_MSG("mutex locking error");
1257        }
1258    }
1259
1260    WOLFSSL_LEAVE("tsipTls13VerifyHandshake", ret);
1261    return ret;
1262}
1263
1264/* handles finished message from server.
1265 * verify hmac in the message. Also output verify data to
1266 * TsipUserCtx.verifyDataIdx, which is used for deriving master secret.
1267 *
1268 *  ssl       WOLFSSL object
1269 *  input     the buffer holding decrypted finished message, type and padding
1270 *  inOutIdx  On entry, the index into the message content of Finished.
1271 *            On exit, the index of byte after the Finished message and padding.
1272 *  size      Length of message content(excluding type and padding)
1273 *  totalSz   Length in the record header. means message + type + pad.
1274 *  return    0, on success, others on failure.
1275 */
1276int tsip_Tls13HandleFinished(
1277                                            struct WOLFSSL* ssl,
1278                                            const byte*     input,
1279                                            word32*         inOutIdx,
1280                                            word32          size,
1281                                            word32          totalSz)
1282{
1283    int ret = 0;
1284
1285    WOLFSSL_ENTER("tsip_Tls13HandleFinished");
1286
1287    if (ssl == NULL || input == NULL || inOutIdx == NULL) {
1288        ret = BAD_FUNC_ARG;
1289    }
1290
1291    if (ret == 0) {
1292        ret = tsipTls13VerifyHandshake(ssl, input + *inOutIdx);
1293    }
1294
1295    if (ret == 0) {
1296        /* Force input exhaustion at ProcessReply by consuming padSz. */
1297        *inOutIdx += size + ssl->keys.padSz;
1298
1299        ssl->options.serverState = SERVER_FINISHED_COMPLETE;
1300    }
1301
1302    WOLFSSL_LEAVE("tsip_Tls13HandleFinished", ret);
1303    return ret;
1304}
1305
1306/* Build TLS v1.3 Message and make it encrypted with AEAD algorithm.
1307 * TSIP supports AES-GCM and AES-CCM.
1308 * ssl         The WOLFSSL object.
1309 * output      The buffer to write record message to.
1310 * outSz       Size of the buffer being written into.
1311 * input       The handshake message data to encrypt (excluding trailing type).
1312 * inSz        The size of the handshake message (including message header).
1313 * type        The real content type being put after the message data.
1314 * hashOutput  Whether to hash the unencrypted record data.
1315 * returns     the size of the record including header, CRYPTOCB_UNAVAILABLE
1316 *             when tsip can not handle and is expecting to fallback to S/W,
1317 *             other negative values on error.
1318 */
1319int tsip_Tls13BuildMessage(struct WOLFSSL* ssl,
1320                                         byte* output,
1321                                         int   outSz,
1322                                         const byte* input,
1323                                         int   inSz,
1324                                         int   type,
1325                                         int hashOutput)
1326{
1327    int ret = 0;
1328    int recSz;
1329    int isTLS13 = 0;
1330    RecordLayerHeader* rl = NULL;
1331    (void)outSz;
1332
1333    WOLFSSL_ENTER("tsip_Tls13BuildMessage");
1334
1335    if (ssl == NULL || output == NULL || input == NULL) {
1336        ret = BAD_FUNC_ARG;
1337    }
1338
1339    if (ret == 0) {
1340        if (ssl->version.major == SSLv3_MAJOR &&
1341            ssl->version.minor == TLSv1_3_MINOR) {
1342            isTLS13 = 1;
1343        }
1344        if (!isTLS13 || (ssl->options.side != WOLFSSL_CLIENT_END)) {
1345            ret = CRYPTOCB_UNAVAILABLE;   /* expecting to fallback to S/W */
1346        }
1347    }
1348
1349    if (ret == 0) {
1350        /* make sure hash algorithm is SHA256 */
1351        if (ssl->specs.mac_algorithm != sha256_mac ) {
1352            WOLFSSL_MSG("TSIP can't handle this hash algorithm.");
1353            ret = CRYPTOCB_UNAVAILABLE;
1354        }
1355    }
1356
1357    if (ret == 0) {
1358        if ((ssl->specs.bulk_cipher_algorithm != wolfssl_aes_gcm) &&
1359            (ssl->specs.bulk_cipher_algorithm != wolfssl_aes_ccm)) {
1360            WOLFSSL_MSG("TSIP can't handle the specified algorithm");
1361            ret = CRYPTOCB_UNAVAILABLE;
1362        }
1363    }
1364
1365    if (ret == 0) {
1366        /* set size in record header */
1367        recSz = inSz + 1 + ssl->specs.aead_mac_size;
1368
1369        /* update the record header with the new size. */
1370        rl = (RecordLayerHeader*)output;
1371        rl->type    = application_data;
1372        rl->pvMajor = ssl->version.major;
1373        rl->pvMinor = TLSv1_2_MINOR;
1374        c16toa((word16)recSz, rl->length);
1375
1376        if (input != output + RECORD_HEADER_SZ) {
1377            XMEMCPY(output + RECORD_HEADER_SZ, input, inSz);
1378        }
1379
1380        if (hashOutput) {
1381            ret = HashOutput(ssl, output, RECORD_HEADER_SZ + inSz, 0);
1382        }
1383    }
1384    if (ret == 0) {
1385        /* The real record content type goes at the end of the data. */
1386        output[RECORD_HEADER_SZ + inSz] = (byte)type;
1387
1388        ret = tsip_Tls13AesEncrypt(ssl,
1389                           output + RECORD_HEADER_SZ, /* output */
1390                           output + RECORD_HEADER_SZ, /* plain message */
1391                           inSz + 1); /* plain data size(= inSz + 1 for type) */
1392
1393        if (ret > 0) {
1394            ret = recSz + RECORD_HEADER_SZ; /* return record size */
1395        }
1396    }
1397
1398    WOLFSSL_LEAVE("tsip_Tls13BuildMessage", ret);
1399    return ret;
1400}
1401
1402/* Send finished message to the server.
1403 *
1404 * ssl     WOLFSSL object
1405 * output  buffer to output packet, including packet header and finished message
1406 * outSz   buffer size of output
1407 * input   buffer holding finished message
1408 * hashOut
1409 * return  0 on success, CRYPTOCB_UNAVAILABLE when TSIP can not handle,
1410 *         other negative values on error.
1411 */
1412int tsip_Tls13SendFinished(
1413                                struct WOLFSSL* ssl,
1414                                byte*       output,
1415                                int         outSz,
1416                                const byte* input,
1417                                int         hashOut)
1418{
1419    int ret         = 0;
1420    int finishedSz;
1421    int headerSz    = HANDSHAKE_HEADER_SZ;
1422    int recordSz;
1423
1424    WOLFSSL_ENTER("tsip_Tls13SendFinished");
1425
1426    if (ssl == NULL || output == NULL || input == NULL || outSz == 0) {
1427        ret  = BAD_FUNC_ARG;
1428    }
1429
1430    if (ret == 0) {
1431        finishedSz  = ssl->specs.hash_size;
1432
1433        ret = tsip_Tls13GetHmacMessages(ssl, (byte*)&input[headerSz]);
1434    }
1435
1436    if (ret == 0) {
1437       recordSz = WC_MAX_DIGEST_SIZE + DTLS_HANDSHAKE_HEADER_SZ + MAX_MSG_EXTRA;
1438        /* check for available size */
1439        ret = CheckAvailableSize(ssl, recordSz);
1440        recordSz = 0;
1441    }
1442
1443    if (ret == 0) {
1444        recordSz = tsip_Tls13BuildMessage(ssl,
1445                                     output, outSz,
1446                                     input, headerSz + finishedSz,
1447                                     handshake, hashOut);
1448
1449        if (recordSz > 0) {
1450            ssl->options.clientState    = CLIENT_FINISHED_COMPLETE;
1451            ssl->options.handShakeState = HANDSHAKE_DONE;
1452            ssl->options.handShakeDone  = 1;
1453            ssl->buffers.outputBuffer.length += recordSz; /* advance length */
1454
1455            ret = SendBuffered(ssl);
1456        }
1457        else {
1458            ret = recordSz;
1459        }
1460    }
1461    WOLFSSL_LEAVE("tsip_Tls13SendFinished", ret);
1462    return ret;
1463}
1464
1465/* Parse and handle a TLS v1.3 CertificateVerify message sent from a server.
1466 *
1467 * ssl       WOLFSSL object
1468 * input     buffer holding certificate verify message
1469 * inOutIdx  On entry, the index into the message buffer of
1470 *           CertificateVerify.
1471 *           On exit, the index of byte after the CertificateVerify message.
1472 * totalSz   The length of the current handshake message.
1473 * return    0 on success, CRYPTOCB_UNAVAILABLE when TSIP can not handle,
1474 *           other negative values on error.
1475 */
1476int tsip_Tls13CertificateVerify(struct WOLFSSL* ssl,
1477                                            const byte* input, word32* inOutIdx,
1478                                            word32 totalSz)
1479{
1480    int     ret = 0;
1481    byte*   sigData = NULL;
1482    byte    hiAlgo,loAlgo;
1483    int     messageSz;
1484    word16  signatureLen;
1485    word16  idx;
1486    e_tsip_err_t  err = TSIP_SUCCESS;
1487    TsipUserCtx*  tuc = NULL;
1488    e_tsip_tls13_signature_scheme_type_t sig_scheme;
1489
1490    WOLFSSL_ENTER("tsip_Tls13CertificateVerify");
1491
1492
1493    if (ssl == NULL || input == NULL || inOutIdx == NULL) {
1494        ret = BAD_FUNC_ARG;
1495    }
1496
1497    if (ret == 0) {
1498        if (ENUM_LEN + ENUM_LEN > totalSz) {
1499            ret = BUFFER_ERROR;
1500        }
1501        /* parse certificate verify message to get hash-algo */
1502        hiAlgo  = *(input + *inOutIdx);
1503        loAlgo  = *(input + *inOutIdx + 1);
1504    }
1505    if (ret == 0) {
1506        /* get signature length */
1507        ato16(input + *inOutIdx + 2, &signatureLen);
1508
1509        if (ENUM_LEN + ENUM_LEN + OPAQUE16_LEN > totalSz) {
1510            ret = BUFFER_ERROR;
1511        }
1512    }
1513    if (ret == 0) {
1514        if (ENUM_LEN + ENUM_LEN + OPAQUE16_LEN + signatureLen > totalSz) {
1515            ret = BUFFER_ERROR;
1516        }
1517    }
1518    if (ret == 0) {
1519        /* check if tsip accepts signature algorithm */
1520        if (hiAlgo == NEW_SA_MAJOR && loAlgo == sha256_mac) {
1521            /* rsa_pss_rsae_sha256 0x0804 */
1522            WOLFSSL_MSG("Peer sent RSA sig");
1523            sig_scheme = TSIP_TLS13_SIGNATURE_SCHEME_RSA_PSS_RSAE_SHA256;
1524        }
1525        else if (hiAlgo == 0x04 && loAlgo == ecc_dsa_sa_algo) {
1526            /* ecdsa_secp256r1_sha256 0x0403 */
1527            WOLFSSL_MSG("Peer sent ECC sig");
1528            sig_scheme = TSIP_TLS13_SIGNATURE_SCHEME_ECDSA_SECP256R1_SHA256;
1529        }
1530        else {
1531            ret = CRYPTOCB_UNAVAILABLE;
1532        }
1533    }
1534
1535    if (ret == 0) {
1536        /* get user context for TSIP */
1537        tuc = ssl->RenesasUserCtx;
1538        if (tuc == NULL) {
1539            WOLFSSL_MSG("TsipUserCtx is not set to ssl.");
1540            ret = CRYPTOCB_UNAVAILABLE;
1541        }
1542    }
1543
1544    /* check if peer's public key is stored */
1545    if (ret == 0) {
1546        if (ssl->peerSceTsipEncRsaKeyIndex == NULL) {
1547            ret = CRYPTOCB_UNAVAILABLE;
1548        }
1549    }
1550
1551    if (ret == 0) {
1552        /* create sign data */
1553        sigData = tuc->internal->sigDataCertVerify;
1554
1555        idx = 0;
1556        ForceZero(sigData, sizeof(tuc->internal->sigDataCertVerify));
1557        XMEMSET(sigData, TSIP_SIGNING_DATA_PREFIX_BYTE,
1558                                                TSIP_SIGNING_DATA_PREFIX_SZ);
1559
1560        idx += TSIP_SIGNING_DATA_PREFIX_SZ;
1561        XMEMCPY(&sigData[idx], serverCertVfyLabel, TSIP_CERT_VFY_LABEL_SZ);
1562
1563        idx += TSIP_CERT_VFY_LABEL_SZ;
1564        ret = tsip_GetMessageSha256(ssl, &sigData[idx], &messageSz);
1565    }
1566
1567    if (ret == 0) {
1568
1569        if ((ret = tsip_hw_lock()) == 0) {
1570            err = R_TSIP_Tls13CertificateVerifyVerification(
1571                        (uint32_t*)ssl->peerSceTsipEncRsaKeyIndex,
1572                        sig_scheme,
1573                        &sigData[idx],
1574                        (uint8_t*)(input + *inOutIdx),
1575                        totalSz);
1576
1577            if (err == TSIP_SUCCESS) {
1578
1579                *inOutIdx += totalSz;
1580                *inOutIdx += ssl->keys.padSz;
1581                ssl->options.peerAuthGood = 1;
1582                ssl->options.havePeerVerify = 1;
1583            #if !defined(NO_WOLFSSL_CLIENT)
1584                if (ssl->options.side == WOLFSSL_CLIENT_END)
1585                    ssl->options.serverState = SERVER_CERT_VERIFY_COMPLETE;
1586            #endif
1587            }
1588            else {
1589                ret = WC_HW_E;
1590                if (err == TSIP_ERR_AUTHENTICATION) {
1591                    WOLFSSL_MSG("Certificate Verification failed.");
1592                }
1593            }
1594
1595            tsip_hw_unlock();
1596        }
1597        else {
1598            WOLFSSL_MSG("mutex locking error");
1599        }
1600    }
1601
1602    WOLFSSL_LEAVE("tsip_Tls13CertificateVerify", ret);
1603    return ret;
1604}
1605
1606/* Send the TLS v1.3 CertificateVerify message. A part of the message is
1607 * processed by TSIP for acceleration.
1608 *
1609 * Prior to this function call, the appropriate key-pair should be set via
1610 * tsip_use_PrivateKey_buffer_TLS and tsip_use_PublicKey_buffer_TLS APIs.
1611 * Those key pair can be generated by the tool named
1612 * "Renesas secure flash programmer".
1613 * When RSA certificate is used, both public and private keys should be set.
1614 * The public key is used for self-verify the generated certificateVerify
1615 * message. When ECC certificate is used, the self-verify will be performed only
1616 * WOLFSSL_CHECK_SIG_FAULTS is defined.
1617 *
1618 * Returns 0 on success, CRYPTOCB_UNAVAILABLE when the required key is not
1619 * provided or unsupported algo is specified and otherwise failure.
1620 */
1621int tsip_Tls13SendCertVerify(WOLFSSL* ssl)
1622{
1623    int ret = 0;
1624    e_tsip_err_t    err = TSIP_SUCCESS;
1625    byte*           sigData = NULL;
1626    word16          idx;
1627    int             isTLS13 = 0;
1628    TsipUserCtx*    tuc     = NULL;
1629    byte*           output  = NULL;
1630    byte*           message = NULL;
1631    byte*           derSig  = NULL;
1632    int             isRsa   = -1;
1633    uint32_t        messageSz,recordSz,hashSz;
1634    byte            hash[WC_SHA256_DIGEST_SIZE];
1635    byte            sig_rs[R_TSIP_ECDSA_DATA_BYTE_SIZE];
1636    tsip_rsa_byte_data_t   rsa_sig,rsa_hash;
1637    tsip_ecdsa_byte_data_t ecdsa_sig,ecdsa_hash;
1638
1639    WOLFSSL_ENTER("tsip_Tls13SendCertVerify");
1640    (void)derSig;
1641    (void)rsa_sig;
1642    (void)rsa_hash;
1643    (void)ecdsa_sig;
1644    (void)ecdsa_hash;
1645    (void)sig_rs;
1646
1647    if (ssl == NULL) {
1648        ret = BAD_FUNC_ARG;
1649    }
1650
1651    if (ret == 0) {
1652        if (ssl->version.major == SSLv3_MAJOR &&
1653            ssl->version.minor == TLSv1_3_MINOR)
1654            isTLS13 = 1;
1655
1656        /* check if it's TLS13 and client side */
1657        if (!isTLS13 || ssl->options.side != WOLFSSL_CLIENT_END) {
1658            ret = CRYPTOCB_UNAVAILABLE;
1659        }
1660    }
1661
1662    if (ret == 0) {
1663        /* get user context for TSIP */
1664        tuc = ssl->RenesasUserCtx;
1665        if (tuc == NULL) {
1666            ret = CRYPTOCB_UNAVAILABLE;
1667        }
1668    }
1669
1670    if (ret == 0) {
1671        #if !defined(NO_RSA)
1672        if (ssl->options.haveRSA)
1673            isRsa = 1;
1674        else
1675        #endif
1676        #ifdef HAVE_ECC
1677        if (ssl->options.haveECC)
1678            isRsa = 0;
1679        else
1680        #endif /* HAVE_ECC */
1681            isRsa = -1;
1682
1683        if (isRsa != 0 && isRsa != 1) {
1684            ret = CRYPTOCB_UNAVAILABLE;
1685        }
1686    }
1687
1688    if (ret == 0) {
1689        ret = tsip_ImportPrivateKey(tuc, tuc->wrappedKeyType);
1690    }
1691
1692    if (ret == 0) {
1693        if (isRsa) {
1694            if (!tuc->internal->ClientRsa2048PrivKey_set) {
1695                ret = NO_PRIVATE_KEY;
1696            }
1697        }
1698        else {
1699            if (!tuc->internal->ClientEccPrivKey_set) {
1700                ret = NO_PRIVATE_KEY;
1701            }
1702        }
1703    }
1704
1705    if (ret == 0) {
1706        /* get message hash */
1707        ForceZero(hash, sizeof(hash));
1708        ret = tsip_GetMessageSha256(ssl, hash, (int*)&hashSz);
1709    }
1710
1711    if (ret == 0) {
1712        recordSz = WC_MAX_CERT_VERIFY_SZ + MAX_MSG_EXTRA * 2;
1713        /* check for available size */
1714        ret = CheckAvailableSize(ssl, recordSz);
1715        recordSz = 0;
1716    }
1717
1718    if (ret == 0) {
1719        /* get output buffer for record header */
1720        output = ssl->buffers.outputBuffer.buffer +
1721                 ssl->buffers.outputBuffer.length;
1722
1723        /* buffer for message header */
1724        message = output + RECORD_HEADER_SZ;
1725    }
1726
1727    /* generate signature */
1728    if (ret == 0) {
1729        if ((ret = tsip_hw_lock()) == 0) {
1730            if (isRsa) {
1731                err = R_TSIP_Tls13CertificateVerifyGenerate(
1732                            (uint32_t*)&(tuc->internal->Rsa2048PrivateKeyIdx),
1733                            TSIP_TLS13_SIGNATURE_SCHEME_RSA_PSS_RSAE_SHA256,
1734                                                hash,
1735                                                message + HANDSHAKE_HEADER_SZ,
1736                                                &messageSz);
1737            }
1738            else {
1739                err = R_TSIP_Tls13CertificateVerifyGenerate(
1740                            (uint32_t*)&(tuc->internal->EcdsaPrivateKeyIdx),
1741                            TSIP_TLS13_SIGNATURE_SCHEME_ECDSA_SECP256R1_SHA256,
1742                                                hash,
1743                                                message + HANDSHAKE_HEADER_SZ,
1744                                                &messageSz);
1745            }
1746            if (err != TSIP_SUCCESS) {
1747                WOLFSSL_MSG("failed to make certificate verify message");
1748                ret = WC_HW_E;
1749            }
1750            tsip_hw_unlock();
1751        }
1752        else {
1753            WOLFSSL_MSG("mutex locking error");
1754        }
1755    }
1756
1757    if (ret == 0) {
1758        if (isRsa) {
1759            ret = tsip_ImportPublicKey(tuc, tuc->wrappedKeyType);
1760        }
1761        else {
1762#if defined(WOLFSSL_CHECK_SIG_FAULTS)
1763            ret = tsip_ImportPublicKey(tuc, tuc->wrappedKeyType);
1764#endif
1765        }
1766    }
1767
1768    if (ret == 0) {
1769        if (isRsa) {
1770            if (!tuc->internal->ClientRsa2048PubKey_set) {
1771                ret = NO_PRIVATE_KEY;
1772            }
1773        }
1774        else {
1775#if defined(WOLFSSL_CHECK_SIG_FAULTS)
1776            if (!tuc->ClientEccPubKey_set) {
1777                ret = NO_PRIVATE_KEY;
1778            }
1779#endif /* WOLFSSL_CHECK_SIG_FAULTS */
1780        }
1781    }
1782
1783    if (ret == 0) {
1784        sigData = tuc->internal->sigDataCertVerify;
1785
1786        idx = 0;
1787        ForceZero(sigData, sizeof(tuc->internal->sigDataCertVerify));
1788        XMEMSET(sigData, TSIP_SIGNING_DATA_PREFIX_BYTE,
1789                                                TSIP_SIGNING_DATA_PREFIX_SZ);
1790
1791        idx += TSIP_SIGNING_DATA_PREFIX_SZ;
1792        XMEMCPY(&sigData[idx], clientCertVfyLabel, TSIP_CERT_VFY_LABEL_SZ);
1793
1794        idx += TSIP_CERT_VFY_LABEL_SZ;
1795        XMEMCPY(&sigData[idx], hash, hashSz);
1796    }
1797
1798    if (ret == 0) {
1799        /* extract signature data from generated CertificateVerify message */
1800        if (!isRsa) {
1801#if defined(WOLFSSL_CHECK_SIG_FAULTS)
1802            idx = 4;
1803            derSig = message +
1804                        HANDSHAKE_HEADER_SZ + HASH_SIG_SIZE + VERIFY_HEADER;
1805            if (derSig[idx] == 0x00)
1806                idx++;
1807            XMEMCPY(sig_rs, &derSig[idx], R_TSIP_ECDSA_DATA_BYTE_SIZE / 2);
1808            idx += (R_TSIP_ECDSA_DATA_BYTE_SIZE / 2) + ASN_TAG_SZ + 1;
1809            if (derSig[idx] == 0x00)
1810                idx++;
1811            XMEMCPY(&sig_rs[R_TSIP_ECDSA_DATA_BYTE_SIZE / 2],
1812                            &derSig[idx], R_TSIP_ECDSA_DATA_BYTE_SIZE / 2);
1813#endif /* WOLFSSL_CHECK_SIG_FAULTS */
1814        }
1815    }
1816
1817    if (ret == 0) {
1818        if ((ret = tsip_hw_lock()) == 0) {
1819            if (isRsa) {
1820                rsa_sig.pdata  = message + HANDSHAKE_HEADER_SZ +
1821                                                HASH_SIG_SIZE + VERIFY_HEADER;
1822                rsa_hash.pdata = sigData;
1823                rsa_hash.data_length = TSIP_SIGNING_DATA_PREFIX_SZ +
1824                                         TSIP_CERT_VFY_LABEL_SZ + sizeof(hash);
1825
1826                rsa_hash.data_type = 0;
1827
1828                err = R_TSIP_RsassaPss2048SignatureVerification(
1829                            &rsa_sig, &rsa_hash,
1830                            &(tuc->internal)->Rsa2048PublicKeyIdx,
1831                            R_TSIP_RSA_HASH_SHA256);
1832                WOLFSSL_MSG("Perform self-verify for rsa signature");
1833            }
1834            else {
1835                err = TSIP_SUCCESS;
1836#if defined(WOLFSSL_CHECK_SIG_FAULTS)
1837                ecdsa_sig.pdata  = sig_rs;
1838                ecdsa_hash.pdata = sigData;
1839                ecdsa_hash.data_length = TSIP_SIGNING_DATA_PREFIX_SZ +
1840                                         TSIP_CERT_VFY_LABEL_SZ + sizeof(hash);
1841                ecdsa_hash.data_type = 0;
1842
1843                err = R_TSIP_EcdsaP256SignatureVerification(
1844                            &ecdsa_sig, &ecdsa_hash,
1845                            &tuc->EcdsaPublicKeyIdx);
1846                WOLFSSL_MSG("Perform self-verify for ecc signature");
1847#endif /* WOLFSSL_CHECK_SIG_FAULTS */
1848            }
1849            if (err != TSIP_SUCCESS) {
1850                WOLFSSL_MSG("Failed to verify signature");
1851                ret = VERIFY_SIGN_ERROR;
1852            }
1853            tsip_hw_unlock();
1854        }
1855        else {
1856            WOLFSSL_MSG("mutex locking error");
1857        }
1858    }
1859
1860    /* create message header */
1861    if (ret == 0) {
1862
1863        ((HandShakeHeader*)message)->type = certificate_verify;
1864
1865        c32to24(messageSz, ((HandShakeHeader*)message)->length);
1866
1867        recordSz = tsip_Tls13BuildMessage(ssl, output, 0, message,
1868                                          messageSz + HANDSHAKE_HEADER_SZ,
1869                                                             handshake, 1);
1870
1871        if (recordSz > 0) {
1872            ssl->buffers.outputBuffer.length += recordSz;
1873            ret = SendBuffered(ssl);
1874        }
1875        else {
1876            ret = recordSz;
1877        }
1878    }
1879
1880    WOLFSSL_LEAVE("tsip_Tls13SendCertVerify", ret);
1881    return ret;
1882}
1883#endif /* WOLFSSL_TLS13 */
1884#endif /* WOLFSSL_RENESAS_TSIP_TLS */
1885
1886
1887#if defined(WOLFSSL_RENESAS_TSIP_TLS) && (WOLFSSL_RENESAS_TSIP_VER >=109)
1888
1889static uint32_t GetTsipCipherSuite(
1890                    uint8_t cipherSuiteFirst,
1891                    uint8_t cipherSuite)
1892{
1893    WOLFSSL_ENTER("GetTsipCipherSuite");
1894    uint32_t tsipCipher;
1895
1896    if (cipherSuiteFirst == CIPHER_BYTE)
1897    {
1898        switch(cipherSuite) {
1899
1900            case TLS_RSA_WITH_AES_128_CBC_SHA: /*2F*/
1901                tsipCipher = R_TSIP_TLS_RSA_WITH_AES_128_CBC_SHA; /*0*/
1902                break;
1903
1904            case TLS_RSA_WITH_AES_128_CBC_SHA256:
1905                tsipCipher = R_TSIP_TLS_RSA_WITH_AES_128_CBC_SHA256;
1906                break;
1907
1908            case TLS_RSA_WITH_AES_256_CBC_SHA:
1909                tsipCipher = R_TSIP_TLS_RSA_WITH_AES_256_CBC_SHA;
1910                break;
1911
1912            case TLS_RSA_WITH_AES_256_CBC_SHA256:
1913                tsipCipher = R_TSIP_TLS_RSA_WITH_AES_256_CBC_SHA256;
1914                break;
1915
1916            default:
1917                tsipCipher = (uint32_t)WOLFSSL_TSIP_ILLEGAL_CIPHERSUITE;
1918                break;
1919        }
1920        WOLFSSL_LEAVE("GetTsipCipherSuite", tsipCipher);
1921        return tsipCipher;
1922    }
1923    else if (cipherSuiteFirst == ECC_BYTE)
1924    {
1925        tsipCipher = (uint32_t)WOLFSSL_TSIP_ILLEGAL_CIPHERSUITE;
1926
1927        switch(cipherSuite) {
1928
1929            case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256:
1930                tsipCipher = R_TSIP_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256;
1931                break;
1932
1933            case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256:
1934                tsipCipher = R_TSIP_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256;
1935                break;
1936
1937            case TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:
1938                tsipCipher = R_TSIP_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256;
1939                break;
1940
1941            case TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:
1942                tsipCipher = R_TSIP_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256;
1943                break;
1944
1945            default:
1946                tsipCipher = (uint32_t)WOLFSSL_TSIP_ILLEGAL_CIPHERSUITE;
1947                break;
1948        }
1949    }
1950    else {
1951        tsipCipher = (uint32_t)WOLFSSL_TSIP_ILLEGAL_CIPHERSUITE;
1952    }
1953
1954    WOLFSSL_LEAVE("GetTsipCipherSuite", tsipCipher);
1955
1956    return tsipCipher;
1957}
1958
1959/*  Attempt to get a public key exchanged with the peer in ECDHE.
1960 *  the public key is verified by given signature then stored into ctx.
1961 *
1962 *  return WOLFSSL_SUCCESS on success, WOLFSSL_FAILURE on failure.
1963 */
1964static int tsip_ServerKeyExVerify(
1965    word32      type,       /* public key type 0:RSA2048 2:ECDSA P-256 */
1966    WOLFSSL*    ssl,
1967    const byte* sig,
1968    word32      sigSz,
1969    void*       ctx)
1970{
1971    int     ret = WOLFSSL_FAILURE;
1972    byte    qx[MAX_ECC_BYTES], qy[MAX_ECC_BYTES];
1973    byte*   peerkey = NULL;
1974    word32  qxLen = sizeof(qx), qyLen = sizeof(qy);
1975    TsipUserCtx*   userCtx = NULL;
1976
1977    WOLFSSL_ENTER("tsip_ServerKeyExVerify");
1978
1979    /* sanity check */
1980    if (ssl == NULL || sig == NULL || ctx == NULL)
1981        return ret;
1982
1983    userCtx = (TsipUserCtx*)ctx;
1984
1985    /* export public peer public key */
1986    ret = wc_ecc_export_public_raw(ssl->peerEccKey, qx, &qxLen, qy, &qyLen);
1987
1988    if (ret != 0) {
1989        WOLFSSL_MSG("failed to export peer ecc key");
1990        WOLFSSL_LEAVE("tsip_ServerKeyExVerify", ret);
1991        return ret;
1992    }
1993    /* make peer ecc key data for SCE */
1994    /* 0padding(24bit) || 04(8bit) || Qx(256bit) || Qy(256bit) */
1995    peerkey = (byte*)XMALLOC((3 + 1 + qxLen + qyLen), NULL,
1996                                                 DYNAMIC_TYPE_TMP_BUFFER);
1997    if (peerkey == NULL) {
1998        WOLFSSL_MSG("failed to malloc ecc key");
1999        WOLFSSL_LEAVE("tsip_ServerKeyExVerify", ret);
2000        return WOLFSSL_FAILURE;
2001    }
2002
2003    ForceZero(peerkey, (3 + 1 + qxLen + qyLen));
2004    peerkey[3] = ECC_POINT_UNCOMP;
2005    XMEMCPY(&peerkey[4], qx, qxLen);
2006    XMEMCPY(&peerkey[4+qxLen], qy, qyLen);
2007
2008    /* 0 : RSA 2048bit, 1 : Reserved, 2 : ECDSA P-256 */
2009    if ((ret = tsip_hw_lock()) == 0) {
2010        ret = R_TSIP_TlsServersEphemeralEcdhPublicKeyRetrieves(
2011            type,
2012            (uint8_t*) ssl->arrays->clientRandom,
2013            (uint8_t*) ssl->arrays->serverRandom,
2014            (uint8_t*) peerkey,
2015            (uint8_t*) sig,
2016            (uint32_t*)ssl->peerSceTsipEncRsaKeyIndex,
2017            (uint32_t*)userCtx->internal->encrypted_ephemeral_ecdh_public_key);
2018
2019        if (ret !=TSIP_SUCCESS) {
2020            WOLFSSL_MSG("R_TSIP_TlsServersEphemeralEcdhPublicKeyRetrieves failed");
2021        }
2022        else {
2023            ret = WOLFSSL_SUCCESS;
2024        }
2025
2026        tsip_hw_unlock();
2027    }
2028    else {
2029        WOLFSSL_MSG("Failed to lock tsip hw");
2030    }
2031
2032    XFREE(peerkey, NULL, DYNAMIC_TYPE_TMP_BUFFER);
2033
2034    WOLFSSL_LEAVE("tsip_ServerKeyExVerify", ret);
2035    return ret;
2036}
2037/*
2038 *  return 0 on success
2039 */
2040int wc_tsip_RsaVerify(
2041        WOLFSSL* ssl,
2042        byte* sig,      word32 sigSz,
2043        byte** out,
2044        const byte* key,
2045        word32 keySz,
2046        void* ctx)
2047{
2048    int ret;
2049
2050    WOLFSSL_ENTER("tsip_RsaVerify");
2051
2052    if (tsip_usable(ssl, 0))
2053        ret = tsip_ServerKeyExVerify(0, ssl, sig, sigSz, ctx);
2054    else
2055        ret = CRYPTOCB_UNAVAILABLE;
2056
2057    if (ret == WOLFSSL_SUCCESS)
2058        ret = 0;
2059
2060    WOLFSSL_LEAVE("tsip_RsaVerify", ret);
2061    return ret;
2062}
2063/*  Verify signature for Server Key Exchange with TSIP
2064 *  TSIP can handle prime256v1 curve and sha256 hash
2065 *  parameters:
2066 *   ssl    WOLFSSL object
2067 *   sig    buffer holding DER encoded ecdsa signature data
2068 *   sigSz  signature data size
2069 *   hash   buffer holding sha256 hash data
2070 *   hashSz hash data size
2071 *   key    buffer holding peer's public key (NOT used in this function)
2072 *   keySz  public key size((NOT used in this function))
2073 *   result address of the variable to output result
2074 *   ctx    context
2075 *  return 0 on success, CRYPTOCB_UNAVAILABLE in case TSIP cannot handle
2076 */
2077int wc_tsip_EccVerify(
2078        WOLFSSL*  ssl,
2079        const byte* sig,    word32 sigSz,
2080        const byte* hash,   word32 hashSz,
2081        const byte* key,    word32 keySz,
2082        int*  result,       void*  ctx)
2083{
2084    int         ret = WOLFSSL_FAILURE;
2085    uint8_t     sigforSCE [R_TSIP_ECDSA_DATA_BYTE_SIZE] = {0};
2086    const byte  rs_size = R_TSIP_ECDSA_DATA_BYTE_SIZE/2;
2087    byte        offset = 0x3;
2088
2089    WOLFSSL_ENTER("wc_tsip_EccVerify");
2090
2091    /* check if TSIP can handle given cipher suite */
2092    if (!tsip_usable(ssl, 0)) {
2093        WOLFSSL_MSG("Cannot handle cipher suite by TSIP");
2094        WOLFSSL_LEAVE("wc_tsip_EccVerify", CRYPTOCB_UNAVAILABLE);
2095        return CRYPTOCB_UNAVAILABLE;
2096    }
2097
2098    /* in TLS1.3 */
2099    if (ssl->version.major == SSLv3_MAJOR &&
2100        ssl->version.minor == TLSv1_3_MINOR) {
2101        WOLFSSL_LEAVE("wc_tsip_EccVerify", CRYPTOCB_UNAVAILABLE);
2102        return CRYPTOCB_UNAVAILABLE;
2103    }
2104
2105    /* concatenate r and s parts of the signature so that TSIP can handle it */
2106    /* r */
2107    if (sig[offset] == 0x20) {
2108        XMEMCPY(sigforSCE, &sig[offset+1], rs_size);
2109
2110        offset = 0x25;
2111        /* s */
2112        if (sig[offset] == 0x20) {
2113          XMEMCPY(&sigforSCE[rs_size], &sig[offset+1], rs_size);
2114        }
2115        else {
2116          XMEMCPY(&sigforSCE[rs_size], &sig[offset+2], rs_size);
2117        }
2118    }
2119    else {
2120        XMEMCPY(sigforSCE, &sig[offset+2], rs_size);
2121
2122        offset = 0x26;
2123        /* s */
2124        if (sig[offset] == rs_size) {
2125          XMEMCPY(&sigforSCE[rs_size], &sig[offset+1], rs_size);
2126        }
2127        else {
2128          XMEMCPY(&sigforSCE[rs_size], &sig[offset+2], rs_size);
2129        }
2130    }
2131
2132    ret = tsip_ServerKeyExVerify(2, ssl, sigforSCE, 64, ctx);
2133
2134    if (ret == WOLFSSL_SUCCESS) {
2135        *result = 1;
2136        ret = 0; /* for success */
2137    }
2138    else
2139        *result = 0;
2140
2141    WOLFSSL_LEAVE("wc_tsip_EccVerify", ret);
2142    return ret;
2143}
2144
2145/*
2146 *  generate premaster secret
2147 *  1. generate P256 ECC key pair for ECDHE key exchange
2148 *  2. generate pre-master secret
2149 *  output 64 bytes premaster secret to "out" buffer.
2150 */
2151int wc_tsip_EccSharedSecret(
2152    WOLFSSL* ssl,
2153    ecc_key* otherKey,
2154    unsigned char* pubKeyDer,   unsigned int* pubKeySz,
2155    unsigned char* out,         unsigned int* outlen,
2156    int side, void* ctx)
2157{
2158    int       ret;
2159    TsipUserCtx* usrCtx = (TsipUserCtx*)ctx;
2160
2161    (void)ssl;
2162    (void)otherKey;
2163
2164    WOLFSSL_ENTER("wc_tsip_EccSharedSecret");
2165    /* sanity check */
2166    if (ssl == NULL || pubKeyDer == NULL || pubKeySz == NULL ||
2167        out == NULL || outlen == NULL || ctx == NULL) {
2168        WOLFSSL_LEAVE("wc_tsip_EccSharedSecret", WOLFSSL_FAILURE);
2169        return WOLFSSL_FAILURE;
2170    }
2171    if ((ret = tsip_hw_lock()) == 0) {
2172        /* Generate ECC public key for key exchange */
2173        ret = R_TSIP_GenerateTlsP256EccKeyIndex(
2174                    &(usrCtx->internal->ecc_p256_wrapped_key),
2175                    (uint8_t*)&(usrCtx->internal->ecc_ecdh_public_key));
2176
2177        if (ret == TSIP_SUCCESS) {
2178
2179            /* copy generated ecdh public key into buffer */
2180            pubKeyDer[0] = ECC_POINT_UNCOMP;
2181            *pubKeySz = 1 + sizeof(usrCtx->internal->ecc_ecdh_public_key);
2182            XMEMCPY(&pubKeyDer[1], &(usrCtx->internal->ecc_ecdh_public_key),
2183                        sizeof(usrCtx->internal->ecc_ecdh_public_key));
2184
2185            /* Generate Premaster Secret */
2186            ret = R_TSIP_TlsGeneratePreMasterSecretWithEccP256Key(
2187            (uint32_t*)&(usrCtx->internal->encrypted_ephemeral_ecdh_public_key),
2188            &(usrCtx->internal->ecc_p256_wrapped_key),
2189            (uint32_t*)out/* pre-master secret 64 bytes */);
2190        }
2191        if (ret == TSIP_SUCCESS) {
2192            *outlen = 64;
2193            wolfSSL_CTX_SetGenMasterSecretCb(ssl->ctx,
2194                                                Renesas_cmn_genMasterSecret);
2195            wolfSSL_SetGenMasterSecretCtx(ssl, usrCtx);
2196
2197        }
2198
2199        tsip_hw_unlock();
2200    }
2201    else {
2202        WOLFSSL_MSG("Failed to lock tsip hw");
2203    }
2204    WOLFSSL_LEAVE("wc_tsip_EccSharedSecret", ret);
2205    return ret;
2206}
2207
2208
2209WOLFSSL_API void tsip_set_callbacks(WOLFSSL_CTX* ctx)
2210{
2211    WOLFSSL_ENTER("tsip_set_callbacks");
2212    wolfSSL_CTX_SetEccVerifyCb(ctx, (CallbackEccVerify)Renesas_cmn_EccVerify);
2213    wolfSSL_CTX_SetRsaVerifyCb(ctx, (CallbackRsaVerify)Renesas_cmn_RsaVerify);
2214    wolfSSL_CTX_SetGenPreMasterCb(ctx, Renesas_cmn_generatePremasterSecret);
2215    wolfSSL_CTX_SetRsaEncCb(ctx, Renesas_cmn_RsaEnc);
2216#if !defined(WOLFSSL_NO_TLS12) && !defined(WOLFSSL_AEAD_ONLY)
2217    wolfSSL_CTX_SetVerifyMacCb(ctx, (CallbackVerifyMac)Renesas_cmn_VerifyHmac);
2218#endif /* !WOLFSSL_NO_TLS12 && !WOLFSSL_AEAD_ONLY */
2219    wolfSSL_CTX_SetEccSharedSecretCb(ctx, NULL);
2220    /* Set ssl-> options.sendVerify to SEND_CERT by the following two
2221     * registrations. This will allow the client certificate to be sent to
2222     * the server even if the private key is empty. The two callbacks do
2223     * virtually nothing.
2224     */
2225    #ifdef WOLFSSL_TLS13
2226    #ifdef HAVE_ECC
2227    wolfSSL_CTX_SetEccSignCb(ctx, Renesas_cmn_EccSignCb);
2228    #endif
2229    #ifndef NO_RSA
2230    wolfSSL_CTX_SetRsaSignCb(ctx, Renesas_cmn_RsaSignCb);
2231    #endif
2232    #endif /* WOLFSSL_TLS13 */
2233
2234    wolfSSL_CTX_SetRsaSignCheckCb(ctx, Renesas_cmn_RsaSignCheckCb);
2235
2236    /* set heap-hint to tsip_heap_hint so that tsip sha funcs can refer it */
2237    if (ctx->heap != NULL) {
2238        tsip_heap_hint = ctx->heap;
2239    }
2240
2241    WOLFSSL_LEAVE("tsip_set_callbacks", 0);
2242}
2243
2244WOLFSSL_API int tsip_set_callback_ctx(WOLFSSL* ssl, void* user_ctx)
2245{
2246    WOLFSSL_ENTER("tsip_set_callback_ctx");
2247
2248    TsipUserCtx* uCtx = (TsipUserCtx*)user_ctx;
2249    if (user_ctx == NULL || ssl == NULL) {
2250        WOLFSSL_MSG("user ctx is null");
2251        return BAD_FUNC_ARG;
2252    }
2253
2254    ForceZero(uCtx, sizeof(TsipUserCtx));
2255
2256    uCtx->internal =
2257        (TsipUserCtx_Internal*)XMALLOC(sizeof(TsipUserCtx_Internal),
2258                                        ssl->heap,
2259                                        DYNAMIC_TYPE_TMP_BUFFER);
2260
2261    if (!uCtx->internal) {
2262        printf("Failed to allocate memory for user ctx internal");
2263        return MEMORY_E;
2264    }
2265
2266    ForceZero(uCtx->internal, sizeof(TsipUserCtx_Internal));
2267
2268    uCtx->internal->ssl  = ssl;
2269    uCtx->internal->ctx  = ssl->ctx;
2270    uCtx->internal->heap = ssl->heap;
2271    uCtx->internal->side = ssl->ctx->method->side;
2272
2273    ssl->RenesasUserCtx = user_ctx;     /* ssl doesn't own user_ctx */
2274
2275    wolfSSL_SetEccVerifyCtx(ssl, user_ctx);
2276    wolfSSL_SetRsaEncCtx(ssl, user_ctx);
2277    wolfSSL_SetRsaVerifyCtx(ssl, user_ctx);
2278    wolfSSL_SetRsaSignCtx(ssl, user_ctx);
2279    wolfSSL_SetGenPreMasterCtx(ssl, user_ctx);
2280    wolfSSL_SetEccSharedSecretCtx(ssl, NULL);
2281#if !defined(WOLFSSL_NO_TLS12) && !defined(WOLFSSL_AEAD_ONLY)
2282    wolfSSL_SetVerifyMacCtx(ssl, user_ctx);
2283#endif /* !WOLFSSL_NO_TLS12 && !WOLFSSL_AEAD_ONLY */
2284    /* set up crypt callback */
2285    wc_CryptoCb_CryptInitRenesasCmn(ssl, user_ctx);
2286    WOLFSSL_LEAVE("tsip_set_callback_ctx", 0);
2287    return 0;
2288}
2289
2290#elif defined(WOLFSSL_RENESAS_TSIP_TLS) && (WOLFSSL_RENESAS_TSIP_VER >=106)
2291
2292/* convert def to tsip define */
2293static byte _tls2tsipdef(byte cipher)
2294{
2295    byte def = R_TSIP_TLS_RSA_WITH_AES_128_CBC_SHA;
2296    switch(cipher) {
2297        case l_TLS_RSA_WITH_AES_128_CBC_SHA:
2298            break;
2299        case l_TLS_RSA_WITH_AES_128_CBC_SHA256:
2300            def = R_TSIP_TLS_RSA_WITH_AES_128_CBC_SHA256;
2301            break;
2302        case l_TLS_RSA_WITH_AES_256_CBC_SHA:
2303            def = R_TSIP_TLS_RSA_WITH_AES_256_CBC_SHA;
2304            break;
2305        case l_TLS_RSA_WITH_AES_256_CBC_SHA256:
2306            def = R_TSIP_TLS_RSA_WITH_AES_256_CBC_SHA256;
2307            break;
2308        default:break;
2309    }
2310    return def;
2311}
2312#endif
2313
2314#ifdef WOLFSSL_RENESAS_TSIP_TLS
2315/*
2316 * Import wrapped private key then convert it into TSIP key_index format.
2317 * The target key should be set with tsip_use_PrivateKey_buffer in advance.
2318 * Acceptable key types are:
2319 *   TSIP_KEY_TYPE_RSA2048     rsa 2048 bit key
2320 *   TSIP_KEY_TYPE_RSA3072     rsa 3072 bit key
2321 *   TSIP_KEY_TYPE_RSA4096     rsa 4096 bit key
2322 *   TSIP_KEY_TYPE_ECDSAP256   ecdsa p256r1 key
2323 *   TSIP_KEY_TYPE_ECDSAP384   ecdsa p384r1 key
2324 */
2325int tsip_ImportPrivateKey(TsipUserCtx* tuc, int keyType)
2326{
2327    int          ret = 0;
2328    e_tsip_err_t err = TSIP_SUCCESS;
2329    uint8_t* provisioning_key = g_user_key_info.encrypted_provisioning_key;
2330    uint8_t* iv               = g_user_key_info.iv;
2331    uint8_t* encPrivKey;
2332
2333    WOLFSSL_ENTER("tsip_ImportPrivateKey");
2334
2335    if (tuc == NULL)
2336        return BAD_FUNC_ARG;
2337
2338    encPrivKey = tuc->internal->wrappedPrivateKey;
2339
2340    if (encPrivKey == NULL || provisioning_key == NULL || iv == NULL) {
2341        WOLFSSL_MSG("Missing some key materials used for import" );
2342        return CRYPTOCB_UNAVAILABLE;
2343    }
2344
2345    if (ret == 0) {
2346        if (keyType != tuc->wrappedKeyType) {
2347            WOLFSSL_MSG("No public key of specified type is set" );
2348            return CRYPTOCB_UNAVAILABLE;
2349        }
2350    }
2351
2352    if ((ret = tsip_hw_lock()) == 0) {
2353        switch (keyType) {
2354
2355            #if !defined(NO_RSA)
2356            case TSIP_KEY_TYPE_RSA2048:
2357
2358                tuc->internal->ClientRsa2048PrivKey_set = 0;
2359                err = R_TSIP_GenerateRsa2048PrivateKeyIndex(
2360                                    provisioning_key, iv, (uint8_t*)encPrivKey,
2361                                    &(tuc->internal->Rsa2048PrivateKeyIdx));
2362                if (err == TSIP_SUCCESS) {
2363                    tuc->internal->ClientRsa2048PrivKey_set = 1;
2364                }
2365                else {
2366                    ret = WC_HW_E;
2367                }
2368                break;
2369            #endif
2370
2371            case TSIP_KEY_TYPE_RSA4096:
2372                /* not supported as of TSIPv1.15 */
2373                ret = CRYPTOCB_UNAVAILABLE;
2374                break;
2375
2376            #if defined(HAVE_ECC)
2377            case TSIP_KEY_TYPE_ECDSAP256:
2378
2379                tuc->internal->ClientEccPrivKey_set = 0;
2380                err = R_TSIP_GenerateEccP256PrivateKeyIndex(
2381                                    provisioning_key, iv, (uint8_t*)encPrivKey,
2382                                    &(tuc->internal->EcdsaPrivateKeyIdx));
2383                if (err == TSIP_SUCCESS) {
2384                    tuc->internal->ClientEccPrivKey_set = 1;
2385                }
2386                else {
2387                    ret = WC_HW_E;
2388                }
2389                break;
2390            #endif
2391
2392            default:
2393                ret = BAD_FUNC_ARG;
2394                break;
2395        }
2396        tsip_hw_unlock();
2397    }
2398    else {
2399        WOLFSSL_MSG("mutex locking error");
2400    }
2401    WOLFSSL_LEAVE("tsip_ImportPrivateKey", ret);
2402    return ret;
2403}
2404
2405#endif /* WOLFSSL_RENESAS_TSIP_TLS */
2406
2407/*
2408 * Import wrapped public key then convert it into TSIP key_index format.
2409 * The target key should be set with tsip_use_PublicKey_buffer in advance.
2410 * Acceptable key types are:
2411 *   TSIP_KEY_TYPE_RSA2048     rsa 2048 bit key
2412 *   TSIP_KEY_TYPE_RSA3072     rsa 3072 bit key
2413 *   TSIP_KEY_TYPE_RSA4096     rsa 4096 bit key
2414 *   TSIP_KEY_TYPE_ECDSAP256   ecdsa p256r1 key
2415 *   TSIP_KEY_TYPE_ECDSAP384   ecdsa p384r1 key
2416 */
2417int tsip_ImportPublicKey(TsipUserCtx* tuc, int keyType)
2418{
2419    int          ret = 0;
2420    e_tsip_err_t err = TSIP_SUCCESS;
2421    uint8_t* provisioning_key = g_user_key_info.encrypted_provisioning_key;
2422    uint8_t* iv               = g_user_key_info.iv;
2423    uint8_t* encPubKey;
2424
2425    WOLFSSL_ENTER("tsip_ImportPublicKey");
2426
2427    if (tuc == NULL ) {
2428        return BAD_FUNC_ARG;
2429    }
2430
2431    encPubKey = tuc->internal->wrappedPublicKey;
2432
2433    if (encPubKey == NULL || provisioning_key == NULL || iv == NULL) {
2434        WOLFSSL_MSG("Missing some key materials used for import" );
2435        return CRYPTOCB_UNAVAILABLE;
2436    }
2437
2438    if (ret == 0) {
2439        if (keyType != tuc->wrappedKeyType) {
2440            WOLFSSL_MSG("No public key of specified type is set" );
2441            return CRYPTOCB_UNAVAILABLE;
2442        }
2443    }
2444
2445    if ((ret = tsip_hw_lock()) == 0) {
2446        switch (keyType) {
2447
2448        #if !defined(NO_RSA)
2449        #if ((defined(TSIP_RSAES_2048) && TSIP_RSAES_2048 == 1) || \
2450            (defined(TSIP_RSASSA_2048) && TSIP_RSASSA_2048 == 1))
2451            case TSIP_KEY_TYPE_RSA2048:
2452            #if defined(WOLFSSL_RENESAS_TSIP_TLS)
2453                tuc->internal->ClientRsa2048PubKey_set = 0;
2454            #elif defined(WOLFSSL_RENESAS_TSIP_CRYPTONLY)
2455                XFREE(tuc->rsa2048pub_keyIdx, NULL, DYNAMIC_TYPE_RSA_BUFFER);
2456                tuc->keyflgs_crypt.bits.rsapub2048_key_set = 0;
2457                tuc->rsa2048pub_keyIdx =
2458                    (tsip_rsa2048_public_key_index_t*)XMALLOC(
2459                        sizeof(tsip_rsa2048_public_key_index_t), NULL,
2460                        DYNAMIC_TYPE_RSA_BUFFER);
2461                if (tuc->rsa2048pub_keyIdx == NULL) {
2462                    return MEMORY_E;
2463                }
2464            #endif
2465                err = R_TSIP_GenerateRsa2048PublicKeyIndex(
2466                                    provisioning_key, iv, (uint8_t*)encPubKey,
2467                                #if defined(WOLFSSL_RENESAS_TSIP_TLS)
2468                                     &(tuc->internal->Rsa2048PublicKeyIdx)
2469                                #elif defined(WOLFSSL_RENESAS_TSIP_CRYPTONLY)
2470                                     tuc->rsa2048pub_keyIdx
2471                                #endif
2472                                    );
2473                if (err == TSIP_SUCCESS) {
2474                #if defined(WOLFSSL_RENESAS_TSIP_TLS)
2475                    tuc->internal->ClientRsa2048PubKey_set = 1;
2476                #elif defined(WOLFSSL_RENESAS_TSIP_CRYPTONLY)
2477                    tuc->keyflgs_crypt.bits.rsapub2048_key_set = 1;
2478                #endif
2479                }
2480                else {
2481                    ret = WC_HW_E;
2482                }
2483                break;
2484        #endif /* TSIP_RSAES_2048 */
2485            case TSIP_KEY_TYPE_RSA4096:
2486                /* not supported as of TSIPv1.15 */
2487                ret = CRYPTOCB_UNAVAILABLE;
2488                break;
2489        #endif /* !NO_RSA */
2490
2491        #if defined(HAVE_ECC)
2492            case TSIP_KEY_TYPE_ECDSAP256:
2493            case TSIP_KEY_TYPE_ECDSAP384:
2494            #if defined(WOLFSSL_RENESAS_TSIP_TLS)
2495                tuc->internal->ClientEccPubKey_set = 0;
2496            #elif defined(WOLFSSL_RENESAS_TSIP_CRYPTONLY)
2497                tuc->keyflgs_crypt.bits.eccpub_key_set = 0;
2498            #endif
2499                if (keyType == TSIP_KEY_TYPE_ECDSAP256) {
2500                #if defined(TSIP_ECDSA_P256) && TSIP_ECDSA_P256 == 1
2501                    err = R_TSIP_GenerateEccP256PublicKeyIndex(
2502                                    provisioning_key, iv, (uint8_t*)encPubKey,
2503                            #if defined(WOLFSSL_RENESAS_TSIP_TLS)
2504                                    &(tuc->internal->EcdsaPublicKeyIdx)
2505                            #elif defined(WOLFSSL_RENESAS_TSIP_CRYPTONLY)
2506                                    &tuc->eccpub_keyIdx
2507                            #endif
2508                    );
2509                #else
2510                    err = NOT_COMPILED_IN;
2511                #endif
2512                }
2513                else if (keyType == TSIP_KEY_TYPE_ECDSAP384) {
2514                #if defined(TSIP_ECDSA_P384) && TSIP_ECDSA_P384 == 1
2515                    err = R_TSIP_GenerateEccP384PublicKeyIndex(
2516                                    provisioning_key, iv, (uint8_t*)encPubKey,
2517                            #if defined(WOLFSSL_RENESAS_TSIP_TLS)
2518                                    &(tuc->internal->EcdsaPublicKeyIdx)
2519                            #elif defined(WOLFSSL_RENESAS_TSIP_CRYPTONLY)
2520                                    &tuc->eccpub_keyIdx
2521                            #endif
2522                    );
2523                #else
2524                    err = NOT_COMPILED_IN;
2525                #endif
2526                }
2527                if (err == TSIP_SUCCESS) {
2528                #if defined(WOLFSSL_RENESAS_TSIP_TLS)
2529                    tuc->internal->ClientEccPubKey_set = 1;
2530                #elif defined(WOLFSSL_RENESAS_TSIP_CRYPTONLY)
2531                    tuc->keyflgs_crypt.bits.eccpub_key_set = 1;
2532                #endif
2533                }
2534                else {
2535                    ret = WC_HW_E;
2536                }
2537                break;
2538        #endif
2539
2540            default:
2541                ret = BAD_FUNC_ARG;
2542                break;
2543        }
2544        tsip_hw_unlock();
2545    }
2546    else {
2547        WOLFSSL_MSG("mutex locking error");
2548    }
2549    WOLFSSL_LEAVE("tsip_ImportPublicKey", ret);
2550    return ret;
2551}
2552
2553#if defined(WOLFSSL_RENESAS_TSIP_TLS)
2554/* check if tsip tls functions can be used for the cipher      */
2555/* return  :1 when tsip can be used , 0 not be used.           */
2556int tsip_usable(const WOLFSSL *ssl, uint8_t session_key_generated)
2557{
2558    byte cipher0 = ssl->options.cipherSuite0;
2559    byte cipher  = ssl->options.cipherSuite;
2560    byte side    = ssl->options.side;
2561    int  ret     = WOLFSSL_SUCCESS;
2562    const Ciphers *enc;
2563    const Ciphers *dec;
2564
2565    WOLFSSL_ENTER("tsip_usable");
2566
2567    /* sanity check */
2568    if (ssl == NULL) {
2569        WOLFSSL_MSG("ssl is NULL");
2570        ret = BAD_FUNC_ARG;
2571    }
2572
2573    /* when rsa key index == NULL, tsip isn't used for cert verification. */
2574    /* in the case, we cannot use TSIP.                                   */
2575    if (ret == WOLFSSL_SUCCESS) {
2576        if (!ssl->peerSceTsipEncRsaKeyIndex) {
2577            WOLFSSL_MSG("ssl->peerSceTsipEncRsaKeyIndex is NULL");
2578            ret = WOLFSSL_FAILURE;
2579        }
2580    }
2581
2582    if (ret == WOLFSSL_SUCCESS) {
2583        if (session_key_generated) {
2584            enc = &ssl->encrypt;
2585            dec = &ssl->decrypt;
2586            if (enc == NULL || dec == NULL) {
2587                /* something wrong */
2588                ret = WOLFSSL_FAILURE;
2589            }
2590            if (enc->aes == NULL || dec->aes == NULL) {
2591                ret = WOLFSSL_FAILURE;
2592            }
2593            if (enc->aes->ctx.setup == 0) {
2594                /* session key for SCE is not created */
2595                ret = WOLFSSL_FAILURE;
2596            }
2597        }
2598    }
2599
2600    /* when enabled Extended Master Secret, we cannot use TSIP. */
2601
2602    if (ret == WOLFSSL_SUCCESS) {
2603        if (ssl->options.haveEMS) {
2604            WOLFSSL_MSG("ssl->options.haveEMS");
2605            ret = WOLFSSL_FAILURE;
2606        }
2607    }
2608    /* TSIP works only for TLS client */
2609    if (ret == WOLFSSL_SUCCESS) {
2610        if (side != WOLFSSL_CLIENT_END) {
2611            WOLFSSL_MSG("Not client side");
2612            ret = WOLFSSL_FAILURE;
2613        }
2614    }
2615    /* Check if TSIP can handle cipher suite */
2616    if (ret == WOLFSSL_SUCCESS) {
2617        if (
2618            (cipher0 == CIPHER_BYTE &&
2619            (cipher == l_TLS_RSA_WITH_AES_128_CBC_SHA ||
2620             cipher == l_TLS_RSA_WITH_AES_128_CBC_SHA256 ||
2621             cipher == l_TLS_RSA_WITH_AES_256_CBC_SHA ||
2622             cipher == l_TLS_RSA_WITH_AES_256_CBC_SHA256))
2623        #if (WOLFSSL_RENESAS_TSIP_VER >= 109)
2624            ||
2625            (cipher0 == ECC_BYTE &&
2626            (cipher == l_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 ||
2627             cipher == l_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 ||
2628             cipher == l_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 ||
2629             cipher == l_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256))
2630        #endif
2631        #if (WOLFSSL_RENESAS_TSIP_VER >= 114)
2632            ||
2633            (cipher0 == TLS13_BYTE &&
2634            (cipher == l_TLS_AES_128_GCM_SHA256 ||
2635             cipher == l_TLS_AES_128_CCM_SHA256))
2636        #endif
2637        ) {
2638            WOLFSSL_MSG("supported cipher suite");
2639        }
2640        else {
2641            WOLFSSL_MSG("unsupported cipher suite");
2642            ret = WOLFSSL_FAILURE;;
2643        }
2644    }
2645
2646    WOLFSSL_LEAVE("tsip_usable", ret);
2647    return ret;
2648}
2649#endif /* WOLFSSL_RENESAS_TSIP_TLS */
2650
2651#ifndef SINGLE_THREADED
2652/*
2653* lock hw engine.
2654* this should be called before using engine.
2655*/
2656int tsip_hw_lock(void)
2657{
2658    int ret = 0;
2659
2660    if (tsip_CryptHwMutexInit_ == 0) {
2661
2662        ret = tsip_CryptHwMutexInit(&tsip_mutex);
2663
2664        if (ret == 0) {
2665            tsip_CryptHwMutexInit_ = 1;
2666        }
2667        else {
2668            WOLFSSL_MSG(" mutex initialization failed.");
2669            return -1;
2670        }
2671    }
2672    if (tsip_CryptHwMutexLock(&tsip_mutex) != 0) {
2673        /* this should not happens */
2674        return -1;
2675    }
2676
2677    return ret;
2678}
2679
2680/*
2681* release hw engine
2682*/
2683void tsip_hw_unlock(void)
2684{
2685    tsip_CryptHwMutexUnLock(&tsip_mutex);
2686}
2687#endif
2688
2689/* open TSIP driver
2690 * return 0 on success.
2691 */
2692int tsip_Open(void)
2693{
2694    int ret = TSIP_SUCCESS;
2695
2696    WOLFSSL_ENTER("tsip_Open");
2697
2698    if ((ret = tsip_hw_lock()) == 0) {
2699
2700#if defined(WOLFSSL_RENESAS_TSIP) && (WOLFSSL_RENESAS_TSIP_VER>=109)
2701
2702        ret = R_TSIP_Open(NULL,NULL);
2703        if (ret != TSIP_SUCCESS) {
2704            WOLFSSL_MSG("RENESAS TSIP Open failed");
2705        }
2706
2707    #if defined(WOLFSSL_RENESAS_TSIP_TLS)
2708        if (ret == TSIP_SUCCESS && g_user_key_info.encrypted_user_tls_key) {
2709
2710            ret = R_TSIP_GenerateTlsRsaPublicKeyIndex(
2711                    g_user_key_info.encrypted_provisioning_key,
2712                    g_user_key_info.iv,
2713                    g_user_key_info.encrypted_user_tls_key,
2714                    &g_user_key_info.user_rsa2048_tls_pubindex); /* OUT */
2715
2716            R_TSIP_Close();       /* close once */
2717
2718            if (ret != TSIP_SUCCESS) {
2719
2720                WOLFSSL_MSG("R_TSIP_GenerateTlsRsa: NG");
2721
2722            }
2723            else {
2724
2725                /* open again with newly created TLS public key index*/
2726                ret = R_TSIP_Open(
2727                        &g_user_key_info.user_rsa2048_tls_pubindex,
2728                        (tsip_update_key_ring_t*)s_inst2);
2729
2730                if (ret != TSIP_SUCCESS) {
2731                    WOLFSSL_MSG("R_TSIP_(Re)Open: NG");
2732                }
2733
2734                /* init vars */
2735                g_CAscm_Idx = (uint32_t)-1;
2736            }
2737        }
2738    #endif
2739
2740#elif defined(WOLFSSL_RENESAS_TSIP) && (WOLFSSL_RENESAS_TSIP_VER>=106)
2741
2742        ret = R_TSIP_Open((uint32_t*)s_flash, s_inst1, s_inst2);
2743        if (ret != TSIP_SUCCESS) {
2744            WOLFSSL_MSG("RENESAS TSIP Open failed");
2745        }
2746       #if defined(WOLFSSL_RENESAS_TLS)
2747        /* generate TLS Rsa public key for Certificate verification */
2748        if (ret == TSIP_SUCCESS && g_user_key_info.encrypted_user_tls_key) {
2749            ret = R_TSIP_GenerateTlsRsaPublicKeyIndex(
2750                    g_user_key_info.encrypted_session_key,
2751                    g_user_key_info.iv,
2752                    g_user_key_info.encrypted_user_tls_key,
2753                    &g_user_key_info.user_rsa2048_tls_pubindex);
2754
2755            if (ret != TSIP_SUCCESS) {
2756                WOLFSSL_MSG("R_TSIP_GenerateTlsRsaPublicKeyIndex failed");
2757            }
2758            else {
2759                /* close once */
2760                tsip_Close();
2761                /* open again with s_inst[] */
2762                XMEMCPY(s_inst1,
2763                    g_user_key_info.user_rsa2048_tls_pubindex.value,
2764                    sizeof(s_inst1));
2765                ret = R_TSIP_Open((uint32_t*)s_flash, s_inst1, s_inst2);
2766                if (ret != TSIP_SUCCESS) {
2767                    WOLFSSL_MSG("R_TSIP_(Re)Open failed");
2768                }
2769
2770                /* init vars */
2771                g_CAscm_Idx = (uint32_t)-1;
2772            }
2773        }
2774    #endif
2775#else
2776        ret = R_TSIP_Open((uint32_t*)s_flash, s_inst1, s_inst2);
2777        if (ret != TSIP_SUCCESS) {
2778            WOLFSSL_MSG("RENESAS TSIP Open failed");
2779        }
2780#endif
2781        /* unlock hw */
2782        tsip_hw_unlock();
2783    }
2784    else
2785        WOLFSSL_MSG("Failed to lock tsip hw ");
2786
2787    WOLFSSL_LEAVE("tsip_Open", ret);
2788    return ret;
2789}
2790
2791/* close TSIP driver */
2792void tsip_Close(void)
2793{
2794    WOLFSSL_ENTER("tsip_Close");
2795    int ret;
2796
2797    if ((ret = tsip_hw_lock()) == 0) {
2798        /* close TSIP */
2799        ret = R_TSIP_Close();
2800#if defined(WOLFSSL_RENESAS_TSIP_TLS)
2801        g_CAscm_Idx = (uint32_t)-1;
2802#endif
2803        /* unlock hw */
2804        tsip_hw_unlock();
2805        if (ret != TSIP_SUCCESS) {
2806            WOLFSSL_MSG("RENESAS TSIP Close failed");
2807        }
2808    }
2809    else
2810        WOLFSSL_MSG("Failed to unlock tsip hw");
2811    WOLFSSL_LEAVE("tsip_Close", 0);
2812}
2813
2814int wc_tsip_GenerateRandBlock(byte* output, word32 sz)
2815{
2816    /* Generate PRNG based on NIST SP800-90A AES CTR-DRBG */
2817    int ret = 0;
2818    word32 buffer[4];
2819
2820    while (sz > 0) {
2821        word32 len = sizeof(buffer);
2822
2823        if (sz < len) {
2824            len = sz;
2825        }
2826        /* return 4 words random number*/
2827        ret = R_TSIP_GenerateRandomNumber((uint32_t*)buffer);
2828        if(ret == TSIP_SUCCESS) {
2829            XMEMCPY(output, &buffer, len);
2830            output += len;
2831            sz -= len;
2832         } else
2833            return ret;
2834    }
2835    return ret;
2836}
2837
2838#if (WOLFSSL_RENESAS_TSIP_VER>=109)
2839void tsip_inform_user_keys_ex(
2840    byte*     encrypted_provisioning_key,
2841    byte*     iv,
2842    byte*     encrypted_user_tls_key,
2843    word32    encrypted_user_tls_key_type)
2844{
2845    WOLFSSL_ENTER("tsip_inform_user_keys_ex");
2846
2847    XMEMSET(&g_user_key_info, 0, sizeof(g_user_key_info));
2848    g_user_key_info.encrypted_provisioning_key = NULL;
2849    g_user_key_info.iv = NULL;
2850
2851    if (encrypted_provisioning_key) {
2852        g_user_key_info.encrypted_provisioning_key = encrypted_provisioning_key;
2853    }
2854    if (iv) {
2855        g_user_key_info.iv = iv;
2856    }
2857    if (encrypted_user_tls_key) {
2858        g_user_key_info.encrypted_user_tls_key = encrypted_user_tls_key;
2859    }
2860
2861    g_user_key_info.encrypted_user_tls_key_type = encrypted_user_tls_key_type;
2862    WOLFSSL_LEAVE("tsip_inform_user_keys_ex", 0);
2863}
2864#elif (WOLFSSL_RENESAS_TSIP_VER>=106)
2865/* inform user key                                                     */
2866/* the function expects to be called from user application             */
2867/* user has to create these key information by Renesas tool in advance.*/
2868void tsip_inform_user_keys(
2869    byte *encrypted_session_key,
2870    byte *iv,
2871    byte *encrypted_user_tls_key)
2872{
2873    g_user_key_info.encrypted_session_key = NULL;
2874    g_user_key_info.iv = NULL;
2875    g_user_key_info.encrypted_user_tls_key = NULL;
2876
2877    if (encrypted_session_key) {
2878        g_user_key_info.encrypted_session_key = encrypted_session_key;
2879    }
2880    if (iv) {
2881        g_user_key_info.iv = iv;
2882    }
2883    if (encrypted_user_tls_key) {
2884        g_user_key_info.encrypted_user_tls_key = encrypted_user_tls_key;
2885    }
2886}
2887#endif
2888
2889/* Support functions for TSIP TLS Capability */
2890#if defined(WOLFSSL_RENESAS_TSIP_TLS)
2891
2892/* to inform ca certificate sign */
2893/* signature format expects RSA 2048 PSS with SHA256 */
2894void tsip_inform_cert_sign(const byte *sign)
2895{
2896    if (sign)
2897        ca_cert_sig = sign;
2898}
2899/* Sha1Hmac */
2900int wc_tsip_Sha1HmacGenerate(
2901        const WOLFSSL *ssl,
2902        const byte* myInner,
2903        word32      innerSz,
2904        const byte* in,
2905        word32      sz,
2906        byte*       digest)
2907{
2908    WOLFSSL_ENTER("wc_tsip_Sha1HmacGenerate");
2909
2910    tsip_hmac_sha_handle_t _handle;
2911    tsip_hmac_sha_key_index_t key_index;
2912    int ret;
2913
2914    if ((ssl == NULL) || (myInner == NULL) || (in == NULL) ||
2915        (digest == NULL)) {
2916        WOLFSSL_LEAVE("wc_tsip_Sha1HmacGenerate", BAD_FUNC_ARG);
2917        return BAD_FUNC_ARG;
2918    }
2919
2920    if ((ret = tsip_hw_lock()) != 0) {
2921        WOLFSSL_MSG("hw lock failed");
2922        WOLFSSL_LEAVE("wc_tsip_Sha1HmacGenerate", ret);
2923        return ret;
2924    }
2925
2926    key_index = ssl->keys.tsip_client_write_MAC_secret;
2927
2928    ret = R_TSIP_Sha1HmacGenerateInit(
2929                    &_handle,
2930                    &key_index);
2931
2932    if (ret == TSIP_SUCCESS)
2933        ret = R_TSIP_Sha1HmacGenerateUpdate(
2934                    &_handle,
2935                    (uint8_t*)myInner,
2936                    (uint32_t)innerSz);
2937
2938    if (ret == TSIP_SUCCESS)
2939        ret = R_TSIP_Sha1HmacGenerateUpdate(
2940                    &_handle,
2941                    (uint8_t*)in,
2942                    sz);
2943
2944    if (ret == TSIP_SUCCESS)
2945        ret = R_TSIP_Sha1HmacGenerateFinal(
2946                    &_handle,
2947                    digest);
2948
2949    tsip_hw_unlock();
2950
2951    WOLFSSL_LEAVE("wc_tsip_Sha1HmacGenerate", ret);
2952    return ret;
2953}
2954
2955
2956/* Sha256Hmac */
2957int wc_tsip_Sha256HmacGenerate(
2958        const WOLFSSL *ssl,
2959        const byte* myInner,
2960        word32      innerSz,
2961        const byte* in,
2962        word32      sz,
2963        byte*       digest)
2964{
2965    WOLFSSL_ENTER("wc_tsip_Sha256HmacGenerate");
2966
2967    tsip_hmac_sha_handle_t _handle;
2968    tsip_hmac_sha_key_index_t key_index;
2969    int ret;
2970
2971    if ((ssl == NULL) || (myInner == NULL) || (in == NULL) ||
2972        (digest == NULL))
2973      return BAD_FUNC_ARG;
2974
2975    key_index = ssl->keys.tsip_client_write_MAC_secret;
2976
2977    if ((ret = tsip_hw_lock()) != 0) {
2978        WOLFSSL_MSG("hw lock failed");
2979        return ret;
2980    }
2981
2982    ret = R_TSIP_Sha256HmacGenerateInit(
2983                &_handle,
2984                &key_index);
2985
2986    if (ret == TSIP_SUCCESS) {
2987        ret = R_TSIP_Sha256HmacGenerateUpdate(
2988                &_handle,
2989                (uint8_t*)myInner,
2990                innerSz);
2991    }
2992    else {
2993        WOLFSSL_MSG("R_TSIP_Sha256HmacGenerateInit failed");
2994    }
2995
2996    if (ret == TSIP_SUCCESS) {
2997        ret = R_TSIP_Sha256HmacGenerateUpdate(
2998                &_handle,
2999                (uint8_t*)in,
3000                sz);
3001    }
3002    else {
3003        WOLFSSL_MSG("R_TSIP_Sha256HmacGenerateUpdate: inner failed");
3004    }
3005    if (ret == TSIP_SUCCESS) {
3006
3007        ret = R_TSIP_Sha256HmacGenerateFinal(
3008                &_handle,
3009                digest);
3010    }
3011    else {
3012        WOLFSSL_MSG("R_TSIP_Sha256HmacGenerateUpdate: in failed");
3013    }
3014    if (ret != TSIP_SUCCESS) {
3015        WOLFSSL_MSG("R_TSIP_Sha256HmacGenerateFinal failed");
3016        ret = 1;
3017    }
3018    /* unlock hw */
3019    tsip_hw_unlock();
3020    WOLFSSL_LEAVE("wc_tsip_Sha256HmacGenerate", ret);
3021    return ret;
3022}
3023/*
3024 *  Perform SHA1 and SHA256 Hmac verification
3025 */
3026int wc_tsip_ShaXHmacVerify(
3027        const WOLFSSL *ssl,
3028        const byte* message,
3029        word32      messageSz,
3030        word32      macSz,
3031        word32      content)
3032{
3033    WOLFSSL_ENTER("tsip_ShaXHmacVerify");
3034
3035    tsip_hmac_sha_handle_t    handle;
3036    tsip_hmac_sha_key_index_t wrapped_key;
3037
3038    shaHmacInitFn   initFn   = NULL;
3039    shaHmacUpdateFn updateFn = NULL;
3040    shaHmacFinalFn  finalFn  = NULL;
3041
3042    byte   myInner[WOLFSSL_TLS_HMAC_INNER_SZ];
3043    int ret;
3044
3045    if ((ssl == NULL) || (message == NULL)) {
3046        WOLFSSL_LEAVE("tsip_ShaXHmacVerify", BAD_FUNC_ARG);
3047        return BAD_FUNC_ARG;
3048    }
3049    wrapped_key = ssl->keys.tsip_server_write_MAC_secret;
3050
3051    if (wrapped_key.type ==
3052#if (WOLFSSL_RENESAS_TSIP_VER >= 121)
3053        TSIP_KEY_INDEX_TYPE_TLS_SERVER_HMAC_SHA1_FOR_CLIENT
3054#else
3055        TSIP_KEY_INDEX_TYPE_HMAC_SHA1_FOR_TLS
3056#endif
3057     ){
3058        WOLFSSL_MSG("perform Sha1-Hmac verification");
3059        initFn   = R_TSIP_Sha1HmacVerifyInit;
3060        updateFn = R_TSIP_Sha1HmacVerifyUpdate;
3061        finalFn  = R_TSIP_Sha1HmacVerifyFinal;
3062    }
3063    else if (wrapped_key.type ==
3064#if (WOLFSSL_RENESAS_TSIP_VER >= 121)
3065        TSIP_KEY_INDEX_TYPE_TLS_SERVER_HMAC_SHA256_FOR_CLIENT
3066#else
3067        TSIP_KEY_INDEX_TYPE_HMAC_SHA256_FOR_TLS
3068#endif
3069    ) {
3070        WOLFSSL_MSG("perform Sha256-Hmac verification");
3071        initFn   = R_TSIP_Sha256HmacVerifyInit;
3072        updateFn = R_TSIP_Sha256HmacVerifyUpdate;
3073        finalFn  = R_TSIP_Sha256HmacVerifyFinal;
3074    }
3075    else {
3076        WOLFSSL_MSG("unsupported key type");
3077        WOLFSSL_LEAVE("tsip_ShaXHmacVerify", BAD_FUNC_ARG);
3078        return BAD_FUNC_ARG;
3079    }
3080
3081    if ((ret = tsip_hw_lock()) != 0) {
3082        WOLFSSL_MSG("hw lock failed\n");
3083        WOLFSSL_LEAVE("tsip_ShaXHmacVerify", ret);
3084        return ret;
3085    }
3086
3087    wolfSSL_SetTlsHmacInner((WOLFSSL*)ssl, (byte*)myInner,
3088                                                     messageSz, content, 1);
3089
3090    ret = initFn(&handle, &wrapped_key);
3091
3092    if (ret == TSIP_SUCCESS) {
3093        ret = updateFn(&handle, myInner, WOLFSSL_TLS_HMAC_INNER_SZ);
3094    }
3095    if (ret == TSIP_SUCCESS) {
3096        ret = updateFn(&handle, (uint8_t*)message, (uint32_t)messageSz);
3097    }
3098    if (ret == TSIP_SUCCESS) {
3099        ret = finalFn(&handle, (uint8_t*)(message + messageSz), (uint32_t)macSz);
3100    }
3101    if (ret != TSIP_SUCCESS) {
3102        WOLFSSL_MSG("TSIP Mac verification failed");
3103    }
3104
3105    /* unlock hw */
3106    tsip_hw_unlock();
3107    WOLFSSL_LEAVE("tsip_ShaXHmacVerify", ret);
3108    return ret;
3109}
3110
3111/* generate Verify Data based on master secret */
3112int wc_tsip_generateVerifyData(
3113    const byte* ms,                 /* master secret */
3114    const byte* side,               /* 0:client-side 1:server-side */
3115    const byte* handshake_hash,
3116          byte* hashes)             /* out */
3117{
3118    int ret ;
3119    uint32_t l_side = R_TSIP_TLS_GENERATE_CLIENT_VERIFY;
3120
3121    WOLFSSL_ENTER("tsip_generateVerifyData");
3122
3123    if ((ms == NULL) || (side == NULL) || (handshake_hash == NULL) ||
3124        (hashes == NULL)) {
3125        WOLFSSL_LEAVE("tsip_generateVerifyData", BAD_FUNC_ARG);
3126        return BAD_FUNC_ARG;
3127    }
3128    if (XSTRNCMP((const char*)side, (const char*)kTlsServerFinStr,
3129                                                FINISHED_LABEL_SZ) == 0) {
3130        l_side = R_TSIP_TLS_GENERATE_SERVER_VERIFY;
3131    }
3132
3133    if ((ret = tsip_hw_lock()) == 0) {
3134        ret = R_TSIP_TlsGenerateVerifyData(l_side, (uint32_t*)ms,
3135                       (uint8_t*)handshake_hash, hashes/* out */);
3136        if (ret != TSIP_SUCCESS) {
3137            WOLFSSL_MSG("R_TSIP_TlsGenerateSessionKey failed");
3138        }
3139    }
3140    /* unlock hw */
3141    tsip_hw_unlock();
3142    WOLFSSL_LEAVE("tsip_generateVerifyData", ret);
3143    return ret;
3144}
3145
3146/* generate keys for TLS communication */
3147int wc_tsip_generateSessionKey(
3148    WOLFSSL *ssl,
3149    TsipUserCtx*    ctx,
3150    int             devId)
3151{
3152    int ret;
3153    Ciphers *enc;
3154    Ciphers *dec;
3155    tsip_hmac_sha_key_index_t key_client_mac;
3156    tsip_hmac_sha_key_index_t key_server_mac;
3157    tsip_aes_key_index_t key_client_aes;
3158    tsip_aes_key_index_t key_server_aes;
3159
3160    WOLFSSL_ENTER("wc_tsip_generateSessionKey");
3161
3162    if (ssl== NULL)
3163      return BAD_FUNC_ARG;
3164
3165    if ((ret = tsip_hw_lock()) == 0) {
3166
3167#if (WOLFSSL_RENESAS_TSIP_VER>=109)
3168
3169        uint32_t tsipCS = GetTsipCipherSuite(ssl->options.cipherSuite0,
3170                                             ssl->options.cipherSuite);
3171
3172        if (tsipCS == R_TSIP_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 ||
3173            tsipCS == R_TSIP_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) {
3174            WOLFSSL_MSG("Session key for AES-GCM generation skipped.");
3175
3176            /*  Do not release ssl-> arrays to reference the master secret and
3177             *  randoms, as the AES GCM session key will be generated in
3178             *  encryption or description timing.
3179             */
3180            wolfSSL_KeepArrays(ssl);
3181            ret = TSIP_SUCCESS;
3182        }
3183        else {
3184
3185            ret = R_TSIP_TlsGenerateSessionKey(
3186                    tsipCS,
3187                    (uint32_t*)ssl->arrays->tsip_masterSecret,
3188                    (uint8_t*) ssl->arrays->clientRandom,
3189                    (uint8_t*) ssl->arrays->serverRandom,
3190                    NULL, /* nonce is required only for AES-GCM key */
3191                    &key_client_mac,
3192                    &key_server_mac,
3193                    &key_client_aes,
3194                    &key_server_aes,
3195                    NULL, NULL);
3196        }
3197#else /* WOLFSSL_RENESAS_TSIP_VER < 109 */
3198
3199        ret = R_TSIP_TlsGenerateSessionKey(
3200                    _tls2tsipdef(ssl->options.cipherSuite),
3201                    (uint32_t*)ssl->arrays->tsip_masterSecret,
3202                    (uint8_t*)ssl->arrays->clientRandom,
3203                    (uint8_t*)ssl->arrays->serverRandom,
3204                    &key_client_mac,
3205                    &key_server_mac,
3206                    &key_client_aes,
3207                    &key_server_aes,
3208                    NULL, NULL);
3209#endif
3210        if (ret != TSIP_SUCCESS) {
3211            WOLFSSL_MSG("R_TSIP_TlsGenerateSessionKey failed");
3212        }
3213        else {
3214            /* succeeded creating session keys */
3215            /* alloc aes instance for both enc and dec */
3216            enc = &ssl->encrypt;
3217            dec = &ssl->decrypt;
3218
3219            if (enc) {
3220                if (enc->aes == NULL) {
3221                    enc->aes = (Aes*)XMALLOC(sizeof(Aes), ssl->heap,
3222                                                    DYNAMIC_TYPE_CIPHER);
3223                    if (enc->aes == NULL)
3224                        return MEMORY_E;
3225                }
3226
3227                ForceZero(enc->aes, sizeof(Aes));
3228            }
3229            if (dec) {
3230                if (dec->aes == NULL) {
3231                    dec->aes = (Aes*)XMALLOC(sizeof(Aes), ssl->heap,
3232                                                    DYNAMIC_TYPE_CIPHER);
3233                    if (dec->aes == NULL) {
3234                        if (enc) {
3235                            XFREE(enc->aes, NULL, DYNAMIC_TYPE_CIPHER);
3236                        }
3237                        return MEMORY_E;
3238                    }
3239                }
3240
3241                ForceZero(dec->aes, sizeof(Aes));
3242            }
3243
3244            /* copy key index into aes */
3245            if (ssl->options.side == PROVISION_CLIENT) {
3246                XMEMCPY(&enc->aes->ctx.tsip_keyIdx, &key_client_aes,
3247                                                    sizeof(key_client_aes));
3248                XMEMCPY(&dec->aes->ctx.tsip_keyIdx, &key_server_aes,
3249                                                    sizeof(key_server_aes));
3250            }
3251            else {
3252                XMEMCPY(&enc->aes->ctx.tsip_keyIdx, &key_server_aes,
3253                                                    sizeof(key_server_aes));
3254                XMEMCPY(&dec->aes->ctx.tsip_keyIdx, &key_client_aes,
3255                                                    sizeof(key_client_aes));
3256            }
3257
3258            /* copy hac key index into keys */
3259            ssl->keys.tsip_client_write_MAC_secret = key_client_mac;
3260            ssl->keys.tsip_server_write_MAC_secret = key_server_mac;
3261
3262            /* set up key size and marked ready */
3263            if (enc) {
3264                enc->aes->ctx.keySize = ssl->specs.key_size;
3265                enc->aes->ctx.setup = 1;
3266                /* ready-for-use flag will be set when SetKeySide() is called */
3267            }
3268            /* set up key size and marked ready */
3269            if (dec) {
3270                dec->aes->ctx.keySize = ssl->specs.key_size;
3271                dec->aes->ctx.setup = 1;
3272                /* ready-for-use flag will be set when SetKeySide() is called */
3273            }
3274
3275            if (ctx->internal->tsip_cipher ==
3276                            R_TSIP_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 ||
3277                ctx->internal->tsip_cipher ==
3278                            R_TSIP_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256) {
3279                enc->aes->nonceSz = AEAD_NONCE_SZ;
3280                dec->aes->nonceSz = AEAD_NONCE_SZ;
3281            }
3282
3283            enc->aes->devId = devId;
3284            dec->aes->devId = devId;
3285
3286            ctx->internal->session_key_set = 1;
3287        }
3288        /* unlock hw */
3289        tsip_hw_unlock();
3290    }
3291    else
3292        WOLFSSL_MSG("hw lock failed");
3293
3294    WOLFSSL_LEAVE("wc_tsip_generateSessionKey", ret);
3295    return ret;
3296}
3297
3298
3299
3300/* generate Master secrete by TSIP */
3301#if (WOLFSSL_RENESAS_TSIP_VER>=109)
3302
3303int wc_tsip_generateMasterSecretEx(
3304        byte        cipherSuiteFirst,
3305        byte        cipherSuite,
3306        const byte *pr, /* pre-master    */
3307        const byte *cr, /* client random */
3308        const byte *sr, /* server random */
3309        byte *ms)
3310{
3311    int ret;
3312
3313    WOLFSSL_ENTER("tsip_generateMasterSecretEx");
3314
3315    if ((pr == NULL) || (cr == NULL) || (sr == NULL) ||
3316        (ms == NULL))
3317      return BAD_FUNC_ARG;
3318
3319    uint32_t tsipCS = GetTsipCipherSuite(cipherSuiteFirst,cipherSuite);
3320    if (tsipCS == 0xffffffff)
3321        return BAD_FUNC_ARG;
3322
3323    if ((ret = tsip_hw_lock()) == 0) {
3324        ret = R_TSIP_TlsGenerateMasterSecret(
3325            tsipCS,
3326            (uint32_t*)pr,
3327            (uint8_t*)cr, (uint8_t*)sr, (uint32_t*)ms);
3328        if (ret != TSIP_SUCCESS) {
3329            WOLFSSL_MSG("R_TSIP_TlsGenerateMasterSecret failed");
3330        }
3331        /* unlock hw */
3332        tsip_hw_unlock();
3333    }
3334    else {
3335        WOLFSSL_MSG(" hw lock failed ");
3336    }
3337    WOLFSSL_LEAVE("tsip_generateMasterSecretEx", ret);
3338    return ret;
3339}
3340
3341#else /* WOLFSSL_RENESAS_TSIP_VER < 109 */
3342
3343int wc_tsip_generateMasterSecret(
3344        const byte* pr, /* pre-master    */
3345        const byte* cr, /* client random */
3346        const byte* sr, /* server random */
3347        byte*       ms)
3348{
3349    int ret;
3350    WOLFSSL_ENTER("tsip_generateMasterSecret");
3351    if ((pr == NULL) || (cr == NULL) || (sr == NULL) ||
3352        (ms == NULL))
3353      return BAD_FUNC_ARG;
3354
3355    if ((ret = tsip_hw_lock()) == 0) {
3356        ret = R_TSIP_TlsGenerateMasterSecret(
3357                (uint32_t*)pr,
3358                (uint8_t*)cr,
3359                (uint8_t*)sr,
3360                (uint32_t*)ms);
3361
3362        if (ret != TSIP_SUCCESS) {
3363            WOLFSSL_MSG("R_TSIP_TlsGenerateMasterSecret failed");
3364        }
3365        /* unlock hw */
3366        tsip_hw_unlock();
3367    }
3368    else {
3369        WOLFSSL_MSG(" hw lock failed ");
3370    }
3371    WOLFSSL_LEAVE("tsip_generateMasterSecret", ret);
3372    return ret;
3373}
3374#endif /* WOLFSSL_RENESAS_TSIP_VER */
3375
3376/*  store elements for session key generation into ssl->keys.
3377 *  return 0 on success, negative value on failure
3378 */
3379int wc_tsip_storeKeyCtx(WOLFSSL* ssl, TsipUserCtx* userCtx)
3380{
3381    int ret = 0;
3382
3383    WOLFSSL_ENTER("tsip_storeKeyCtx");
3384
3385    if (ssl == NULL || userCtx == NULL)
3386        ret = BAD_FUNC_ARG;
3387
3388    if (ret == 0) {
3389        XMEMCPY(userCtx->internal->tsip_masterSecret,
3390                ssl->arrays->tsip_masterSecret, TSIP_TLS_MASTERSECRET_SIZE);
3391        XMEMCPY(userCtx->internal->tsip_clientRandom,
3392                ssl->arrays->clientRandom, TSIP_TLS_CLIENTRANDOM_SZ);
3393        XMEMCPY(userCtx->internal->tsip_serverRandom,
3394                ssl->arrays->serverRandom, TSIP_TLS_SERVERRANDOM_SZ);
3395        userCtx->internal->tsip_cipher = GetTsipCipherSuite(
3396                                ssl->options.cipherSuite0,
3397                                ssl->options.cipherSuite);
3398    }
3399
3400    WOLFSSL_LEAVE("tsip_storeKeyCtx", ret);
3401    return ret;
3402}
3403
3404/* generate pre-Master secrete by TSIP */
3405int wc_tsip_generatePremasterSecret(byte *premaster, word32 preSz)
3406{
3407    WOLFSSL_ENTER("tsip_generatePremasterSecret");
3408    int ret;
3409
3410    if (premaster == NULL)
3411      return BAD_FUNC_ARG;
3412
3413    if ((ret = tsip_hw_lock()) == 0 && preSz >=
3414                                    (R_TSIP_TLS_MASTER_SECRET_WORD_SIZE*4)) {
3415        /* generate pre-master, 80 bytes */
3416        ret = R_TSIP_TlsGeneratePreMasterSecret((uint32_t*)premaster);
3417        if (ret != TSIP_SUCCESS) {
3418            WOLFSSL_MSG(" R_TSIP_TlsGeneratePreMasterSecret failed");
3419        }
3420
3421        /* unlock hw */
3422        tsip_hw_unlock();
3423    }
3424    else {
3425        WOLFSSL_MSG(" hw lock failed or preSz is smaller than 80");
3426    }
3427    WOLFSSL_LEAVE("tsip_generatePremasterSecret", ret);
3428    return ret;
3429}
3430
3431/*
3432* generate encrypted pre-Master secrete by TSIP
3433*/
3434int wc_tsip_generateEncryptPreMasterSecret(
3435        WOLFSSL*    ssl,
3436        byte*       out,
3437        word32*     outSz)
3438{
3439    int ret;
3440
3441    WOLFSSL_ENTER("tsip_generateEncryptPreMasterSecret");
3442
3443    if ((ssl == NULL) || (out == NULL) || (outSz == NULL))
3444      return BAD_FUNC_ARG;
3445
3446    if ((ret = tsip_hw_lock()) == 0) {
3447        if (*outSz >= 256)
3448
3449            #if  (WOLFSSL_RENESAS_TSIP_VER>=109)
3450
3451            ret = R_TSIP_TlsEncryptPreMasterSecretWithRsa2048PublicKey(
3452                        (uint32_t*)ssl->peerSceTsipEncRsaKeyIndex,
3453                        (uint32_t*)ssl->arrays->preMasterSecret,
3454                        (uint8_t*)out);
3455
3456            #else
3457
3458            ret = R_TSIP_TlsEncryptPreMasterSecret(
3459                          (uint32_t*)ssl->peerSceTsipEncRsaKeyIndex,
3460                          (uint32_t*)ssl->arrays->preMasterSecret,
3461                          (uint8_t*)out);
3462
3463            #endif
3464        else
3465            ret = -1;
3466
3467        if (ret != TSIP_SUCCESS) {
3468            WOLFSSL_MSG(" R_TSIP_TlsEncryptPreMasterSecret failed");
3469        }
3470        else {
3471            *outSz = 256; /* TSIP can only handles 2048 RSA */
3472            void* ctx = wolfSSL_GetRsaVerifyCtx(ssl);
3473            wolfSSL_CTX_SetGenMasterSecretCb(ssl->ctx,
3474                                                Renesas_cmn_genMasterSecret);
3475            wolfSSL_SetGenMasterSecretCtx(ssl, ctx);
3476        }
3477
3478        tsip_hw_unlock();
3479
3480    }
3481    else {
3482        WOLFSSL_MSG(" hw lock failed ");
3483    }
3484    WOLFSSL_LEAVE("tsip_generateEncryptPreMasterSecret", ret);
3485    return ret;
3486}
3487
3488
3489/* Certificate verification by TSIP */
3490int wc_tsip_tls_CertVerify(
3491        const uint8_t* cert,       uint32_t certSz,
3492        const uint8_t* signature,  uint32_t sigSz,
3493        uint32_t      key_n_start, uint32_t key_n_len,
3494        uint32_t      key_e_start, uint32_t key_e_len,
3495        uint8_t*      tsip_encRsaKeyIndex)
3496{
3497    int ret;
3498    uint8_t *sigforSCE = NULL;
3499    uint8_t *pSig = NULL;
3500    const byte rs_size = 0x20;
3501    byte offset = 0x3;
3502
3503    WOLFSSL_ENTER("wc_tsip_tls_CertVerify");
3504
3505    if (cert == NULL)
3506      return BAD_FUNC_ARG;
3507
3508    if (!signature) {
3509        WOLFSSL_MSG(" signature for ca verification is not set");
3510        return -1;
3511    }
3512    if (!tsip_encRsaKeyIndex) {
3513        WOLFSSL_MSG(" tsip_encRsaKeyIndex is NULL.");
3514        return -1;
3515    }
3516
3517    /* Public key type: Prime256r1 */
3518    if (g_user_key_info.encrypted_user_tls_key_type ==
3519                                    R_TSIP_TLS_PUBLIC_KEY_TYPE_ECDSA_P256) {
3520
3521        if ((sigforSCE = (uint8_t*)XMALLOC(R_TSIP_ECDSA_DATA_BYTE_SIZE,
3522                                        NULL, DYNAMIC_TYPE_ECC)) == NULL) {
3523            WOLFSSL_MSG("failed to malloc memory");
3524            return MEMORY_E;
3525        }
3526        /* initialization */
3527        ForceZero(sigforSCE, R_TSIP_ECDSA_DATA_BYTE_SIZE);
3528
3529        if (signature[offset] == 0x20) {
3530            XMEMCPY(sigforSCE, &signature[offset+1], rs_size);
3531
3532            offset = 0x25;
3533            if (signature[offset] == 0x20) {
3534                XMEMCPY(&sigforSCE[rs_size], &signature[offset+1], rs_size);
3535            }
3536            else {
3537                XMEMCPY(&sigforSCE[rs_size], &signature[offset+2], rs_size);
3538            }
3539        }
3540        else {
3541            XMEMCPY(sigforSCE, &signature[offset+2], rs_size);
3542            offset = 0x26;
3543
3544            if (signature[offset] == rs_size) {
3545                XMEMCPY(&sigforSCE[rs_size], &signature[offset+1], rs_size);
3546            }
3547            else {
3548                XMEMCPY(&sigforSCE[rs_size], &signature[offset+2], rs_size);
3549            }
3550        }
3551        pSig = sigforSCE;
3552    }
3553    /* Public key type: RSA 2048bit */
3554    else {
3555        pSig = (uint8_t*)signature;
3556    }
3557
3558    if ((ret = tsip_hw_lock()) == 0) {
3559
3560        #if (WOLFSSL_RENESAS_TSIP_VER>=109)
3561
3562        ret = R_TSIP_TlsCertificateVerification(
3563            g_user_key_info.encrypted_user_tls_key_type,
3564            (uint32_t*)g_encrypted_publicCA_key,/* encrypted public key  */
3565            (uint8_t*)cert,                    /* certificate der        */
3566            certSz,                            /* length of der          */
3567            (uint8_t*)pSig,                    /* sign data by RSA PSS   */
3568            key_n_start,  /* start position of public key n in bytes     */
3569            (key_n_start + key_n_len),     /* length of the public key n */
3570            key_e_start,                   /* start pos, key e in bytes  */
3571            (key_e_start + key_e_len),     /* length of the public key e */
3572            (uint32_t*)tsip_encRsaKeyIndex /* returned encrypted key     */
3573        );
3574
3575        #elif (WOLFSSL_RENESAS_TSIP_VER>=106)
3576
3577        ret = R_TSIP_TlsCertificateVerification(
3578            (uint32_t*)g_encrypted_publicCA_key,/* encrypted public key  */
3579            (uint8_t*)cert,                    /* certificate der        */
3580            certSz,                            /* length of der          */
3581            (uint8_t*)pSig,                    /* sign data by RSA PSS   */
3582            key_n_start,  /* start position of public key n in bytes     */
3583            (key_n_start + key_n_len),     /* length of the public key n */
3584            key_e_start,                   /* start pos, key e in bytes  */
3585            (key_e_start + key_e_len),     /* length of the public key e */
3586            (uint32_t*)tsip_encRsaKeyIndex /* returned encrypted key     */
3587        );
3588        #endif
3589
3590        if (ret != TSIP_SUCCESS) {
3591            WOLFSSL_MSG(" R_TSIP_TlsCertificateVerification failed");
3592        }
3593        XFREE(sigforSCE, NULL, DYNAMIC_TYPE_ECC);
3594        tsip_hw_unlock();
3595    }
3596    else {
3597        WOLFSSL_MSG(" hw lock failed ");
3598    }
3599    WOLFSSL_LEAVE("wc_tsip_tls_CertVerify", ret);
3600    return ret;
3601}
3602/* Root Certificate verification */
3603int wc_tsip_tls_RootCertVerify(
3604        const byte* cert,           word32 cert_len,
3605        word32      key_n_start,    word32 key_n_len,
3606        word32      key_e_start,    word32 key_e_len,
3607        word32      cm_row)
3608{
3609    int ret;
3610    /* call to generate encrypted public key for certificate verification */
3611    uint8_t *signature = (uint8_t*)ca_cert_sig;
3612
3613    WOLFSSL_ENTER("wc_tsip_tls_RootCertVerify");
3614
3615    if (cert == NULL)
3616      return BAD_FUNC_ARG;
3617
3618    if (!signature) {
3619        WOLFSSL_MSG(" signature for ca verification is not set");
3620        return -1;
3621    }
3622
3623    if ((ret = tsip_hw_lock()) == 0) {
3624
3625    #if (WOLFSSL_RENESAS_TSIP_VER>=109)
3626        ret = R_TSIP_TlsRootCertificateVerification(
3627            g_user_key_info.encrypted_user_tls_key_type,
3628            (uint8_t*)cert,             /* CA cert */
3629            (uint32_t)cert_len,         /* length of CA cert */
3630            key_n_start,                /* Byte position of public key */
3631            (key_n_start + key_n_len),
3632            key_e_start,
3633            (key_e_start + key_e_len),
3634            (uint8_t*)ca_cert_sig,      /* RSA 2048 PSS with SHA256 */
3635            g_encrypted_publicCA_key    /* RSA-2048 public key 560 bytes */
3636        );
3637    #else /* WOLFSSL_RENESAS_TSIP_VER < 109 */
3638        ret = R_TSIP_TlsRootCertificateVerification(
3639            (uint8_t*)cert,/* CA cert */
3640            (uint32_t)cert_len,/* length of CA cert */
3641            key_n_start, /* Byte position of public key */
3642            (key_n_start + key_n_len),
3643            key_e_start,
3644            (key_e_start + key_e_len),
3645            (uint8_t*)ca_cert_sig,/* "RSA 2048 PSS with SHA256" */
3646            /* RSA-2048 public key used by RSA-2048 PSS with SHA256. 560 Bytes */
3647            g_encrypted_publicCA_key
3648        );
3649    #endif
3650
3651        if (ret != TSIP_SUCCESS) {
3652            WOLFSSL_MSG(" R_TSIP_TlsRootCertificateVerification failed");
3653        }
3654        else {
3655            g_CAscm_Idx = cm_row;
3656        }
3657
3658        tsip_hw_unlock();
3659    }
3660    else {
3661        WOLFSSL_MSG(" hw lock failed ");
3662    }
3663    WOLFSSL_LEAVE("wc_tsip_tls_RootCertVerify", ret);
3664    return ret;
3665}
3666#endif /* WOLFSSL_RENESAS_TSIP_TLS */
3667
3668#if !defined(NO_RSA)
3669/*  Perform signing with the client's RSA private key on hash value of messages
3670 *  exchanged with server.
3671 *
3672 * parameters
3673 *   info->pk.rsa.in    : not used
3674 *   info->pk.rsa.inlen : not used
3675 *   info->pk.rsa.out   : the buffer where the signature data is output to
3676 *   info->pk.rsa.outlen: the length of the pk.rsa.out
3677 *   tuc:  the pointer to the TsipUserCtx structure
3678 * returns
3679 *   0 on success, CRYPTOCB_UNAVAILABLE on unsupported key type specified.
3680 *
3681 */
3682int tsip_SignRsaPkcs(wc_CryptoInfo* info, TsipUserCtx* tuc)
3683{
3684    int ret = 0;
3685    e_tsip_err_t    err = TSIP_SUCCESS;
3686    tsip_rsa_byte_data_t hashData, sigData;
3687    WOLFSSL* ssl = NULL;
3688    uint8_t  tsip_hash_type;
3689
3690    WOLFSSL_ENTER("tsip_SignRsaPkcs");
3691
3692    if (info == NULL || tuc == NULL
3693    #ifndef WOLFSSL_RENESAS_TSIP_CRYPTONLY
3694    || tuc->internal->ssl == NULL
3695    #endif
3696    ) {
3697            ret = BAD_FUNC_ARG;
3698    }
3699
3700#ifdef WOLFSSL_RENESAS_TSIP_TLS
3701    if (ret == 0) {
3702        ssl = tuc->internal->ssl;
3703
3704        if (ssl->version.major == SSLv3_MAJOR &&
3705            ssl->version.minor == TLSv1_3_MINOR) {
3706            ret = CRYPTOCB_UNAVAILABLE;
3707        }
3708    }
3709
3710    if (ret == 0) {
3711        /* import private key_index from wrapped key */
3712        ret = tsip_ImportPrivateKey(tuc, tuc->wrappedKeyType);
3713    }
3714
3715    if (ret == 0) {
3716        if (ssl->options.hashAlgo == md5_mac)
3717            tsip_hash_type = R_TSIP_RSA_HASH_MD5;
3718        else if (ssl->options.hashAlgo == sha_mac)
3719            tsip_hash_type = R_TSIP_RSA_HASH_SHA1;
3720        else if (ssl->options.hashAlgo == sha256_mac)
3721            tsip_hash_type = R_TSIP_RSA_HASH_SHA256;
3722        else
3723            ret = CRYPTOCB_UNAVAILABLE;
3724    }
3725#else
3726    (void)ssl;
3727
3728    if (ret == 0) {
3729       if (tuc->sign_hash_type == md5_mac)
3730           tsip_hash_type = R_TSIP_RSA_HASH_MD5;
3731       else if (tuc->sign_hash_type == sha_mac)
3732           tsip_hash_type = R_TSIP_RSA_HASH_SHA1;
3733       else if (tuc->sign_hash_type == sha256_mac)
3734           tsip_hash_type = R_TSIP_RSA_HASH_SHA256;
3735       else
3736           ret = CRYPTOCB_UNAVAILABLE;
3737    }
3738
3739    switch (tuc->wrappedKeyType) {
3740#if defined(TSIP_RSASSA_1024) && TSIP_RSASSA_1024 == 1
3741        case TSIP_KEY_TYPE_RSA1024:
3742            if (tuc->keyflgs_crypt.bits.rsapri1024_key_set != 1) {
3743                WOLFSSL_MSG("tsip rsa private key 1024 not set");
3744                    ret = CRYPTOCB_UNAVAILABLE;
3745            }
3746            break;
3747#endif
3748#if defined(TSIP_RSASSA_2048) && TSIP_RSASSA_2048 == 1
3749        case TSIP_KEY_TYPE_RSA2048:
3750            if (tuc->keyflgs_crypt.bits.rsapri2048_key_set != 1) {
3751                WOLFSSL_MSG("tsip rsa private key 2048 not set");
3752                    ret = CRYPTOCB_UNAVAILABLE;
3753            }
3754            break;
3755#endif
3756        default:
3757            WOLFSSL_MSG("wrapped private key is not supported");
3758            ret = CRYPTOCB_UNAVAILABLE;
3759            break;
3760    }
3761#endif
3762
3763    if (ret == 0) {
3764    #ifdef WOLFSSL_RENESAS_TSIP_TLS
3765        /* since TSIP driver adds ASN.1 input data uses raw digest */
3766        hashData.pdata      = (uint8_t*)ssl->buffers.digest.buffer;
3767        hashData.data_length= ssl->buffers.digest.length;
3768        hashData.data_type  = 1; /* hashed data */
3769        sigData.pdata       = (uint8_t*)info->pk.rsa.out;
3770        sigData.data_length = 0; /* signature size will be returned here */
3771    #else
3772        hashData.pdata      = (uint8_t*)info->pk.rsa.in;
3773        hashData.data_length= info->pk.rsa.inLen;
3774        hashData.data_type  = tuc->keyflgs_crypt.bits.message_type;
3775        sigData.pdata       = (uint8_t*)info->pk.rsa.out;
3776        sigData.data_length = 0;
3777    #endif
3778        if ((ret = tsip_hw_lock()) == 0) {
3779            switch (tuc->wrappedKeyType) {
3780#if (defined(TSIP_RSASSA_1024) && TSIP_RSASSA_1024 == 1) && \
3781                defined(WOLFSSL_RENESAS_TSIP_CRYPTONLY)
3782                case TSIP_KEY_TYPE_RSA1024:
3783                    err = R_TSIP_RsassaPkcs1024SignatureGenerate(
3784                                                &hashData, &sigData,
3785                                       (tsip_rsa1024_private_key_index_t*)
3786                                                tuc->rsa1024pri_keyIdx,
3787                                                tsip_hash_type);
3788
3789                    if (err != TSIP_SUCCESS) {
3790                        ret = WC_HW_E;
3791                    }
3792                    break;
3793#endif
3794#if defined(TSIP_RSASSA_2048) && TSIP_RSASSA_2048 == 1
3795                case TSIP_KEY_TYPE_RSA2048:
3796                    err = R_TSIP_RsassaPkcs2048SignatureGenerate(
3797                                                &hashData, &sigData,
3798                                   #ifdef WOLFSSL_RENESAS_TSIP_TLS
3799                                    &(tuc->internal->Rsa2048PrivateKeyIdx),
3800                                   #else
3801                                    (tsip_rsa2048_private_key_index_t*)
3802                                                tuc->rsa2048pri_keyIdx,
3803                                   #endif
3804                                                tsip_hash_type);
3805
3806                    if (err != TSIP_SUCCESS) {
3807                        ret = WC_HW_E;
3808                    }
3809                    *(info->pk.rsa.outLen) = sigData.data_length;
3810                    break;
3811#endif
3812                case TSIP_KEY_TYPE_RSA4096:
3813                    ret = CRYPTOCB_UNAVAILABLE;
3814                    break;
3815
3816                default:
3817                    WOLFSSL_MSG("wrapped private key is not supported");
3818                    ret = CRYPTOCB_UNAVAILABLE;
3819                    break;
3820            }
3821
3822            tsip_hw_unlock();
3823        }
3824        else {
3825            WOLFSSL_MSG("mutex locking error");
3826        }
3827    }
3828
3829    WOLFSSL_LEAVE("tsip_SignRsaPkcs", ret);
3830    return ret;
3831}
3832#endif /* !NO_RSA */
3833
3834#if !defined(NO_RSA) && defined(WOLFSSL_RENESAS_TSIP_TLS)
3835int tsip_VerifyRsaPkcsCb(
3836                        WOLFSSL* ssl,
3837                        unsigned char* sig, unsigned int sigSz,
3838                        unsigned char** out,
3839                        const unsigned char* keyDer, unsigned int keySz,
3840                        void* ctx)
3841{
3842    int ret = 0;
3843    e_tsip_err_t    err = TSIP_SUCCESS;
3844    tsip_rsa_byte_data_t hashData, sigData;
3845    TsipUserCtx* tuc = NULL;
3846    uint8_t  tsip_hash_type;
3847    (void)keyDer;
3848    (void)keySz;
3849
3850    WOLFSSL_ENTER("tsip_VerifyRsaPkcsCb");
3851
3852    if (sig == NULL || out == NULL || ctx == NULL) {
3853            ret = BAD_FUNC_ARG;
3854    }
3855
3856    if (ssl->version.major == SSLv3_MAJOR &&
3857        ssl->version.minor == TLSv1_3_MINOR) {
3858        ret = CRYPTOCB_UNAVAILABLE;
3859    }
3860
3861    if (ret == 0) {
3862        tuc = (TsipUserCtx*)ctx;
3863        if (tuc == NULL)
3864            ret = CRYPTOCB_UNAVAILABLE;
3865    }
3866
3867    if (ret == 0) {
3868        /* import public key_index from wrapped key */
3869        ret = tsip_ImportPublicKey(tuc, tuc->wrappedKeyType);
3870    }
3871
3872    if (ret == 0) {
3873        if (ssl->options.hashAlgo == md5_mac)
3874            tsip_hash_type = R_TSIP_RSA_HASH_MD5;
3875        else if (ssl->options.hashAlgo == sha_mac)
3876            tsip_hash_type = R_TSIP_RSA_HASH_SHA1;
3877        else if (ssl->options.hashAlgo == sha256_mac)
3878            tsip_hash_type = R_TSIP_RSA_HASH_SHA256;
3879        else {
3880            ret = CRYPTOCB_UNAVAILABLE;
3881        }
3882    }
3883
3884    if (ret == 0) {
3885        sigData.pdata       = (uint8_t*)sig;
3886        sigData.data_length = sigSz;
3887        /* Since TSITP driver handles ASN.1 internally,
3888         * the expected data is raw hash.
3889         */
3890        hashData.pdata      = (uint8_t*)ssl->buffers.digest.buffer;
3891        hashData.data_type  = 1;  /* hash value */
3892
3893        if ((ret = tsip_hw_lock()) == 0) {
3894
3895            switch (tuc->wrappedKeyType) {
3896#if defined(TSIP_RSASSA_2048) && TSIP_RSASSA_2048 == 1
3897                case TSIP_KEY_TYPE_RSA2048:
3898                    err = R_TSIP_RsassaPkcs2048SignatureVerification(
3899                                        &sigData, &hashData,
3900                                        &(tuc->internal->Rsa2048PublicKeyIdx),
3901                                        tsip_hash_type);
3902
3903                    if (err == TSIP_ERR_AUTHENTICATION) {
3904                        ret = VERIFY_CERT_ERROR;
3905                    }
3906                    else if (err == TSIP_SUCCESS) {
3907                        ret = 0;
3908                    }
3909                    else {
3910                        ret = WC_HW_E;
3911                    }
3912                    break;
3913#endif
3914                case TSIP_KEY_TYPE_RSA4096:
3915                    ret = CRYPTOCB_UNAVAILABLE;
3916                    break;
3917
3918                default:
3919                    WOLFSSL_MSG("wrapped private key is not supported");
3920                    ret = CRYPTOCB_UNAVAILABLE;
3921                    break;
3922            }
3923            tsip_hw_unlock();
3924        }
3925        else {
3926            WOLFSSL_MSG("mutex locking error");
3927        }
3928    }
3929    WOLFSSL_LEAVE("tsip_VerifyRsaPkcsCb", ret);
3930    return ret;
3931}
3932#endif /* !NO_RSA && TSIP_TLS */
3933
3934#if defined(HAVE_ECC)
3935#if defined(WOLFSSL_RENESAS_TSIP_TLS)
3936/*   Perform signing with the client's ECC private key on hash value of messages
3937 *   exchanged with server.
3938 *
3939 * parameters
3940 *   info->pk.eccsign.in    : the buffer holding hash value of messages
3941 *   info->pk.eccsign.inlen : hash data size
3942 *   info->pk.eccsign.out   : the buffer where the signature data is output to
3943 *   info->pk.eccsign.outlen: the length of the buffer pk.eccsign.out
3944 *   tuc:  the pointer to the TsipUserCtx structure
3945 * returns
3946 *   0 on success, CRYPTOCB_UNAVAILABLE on unsupported key type specified.
3947 * note
3948 *   signature will be DER encoded and stored into out buffer.
3949 *   the private key must be imported as TSIP specific format.
3950 */
3951int tsip_SignEcdsa(wc_CryptoInfo* info, TsipUserCtx* tuc)
3952{
3953    int ret = 0;
3954    e_tsip_err_t    err = TSIP_SUCCESS;
3955    tsip_ecdsa_byte_data_t hashData, sigData;
3956    byte  offsetForWork;
3957    byte* out = NULL;
3958    byte* sig = NULL;
3959    int   rSz = 0;
3960    int   sSz = 0;
3961    int   idx = 0;
3962    int   sz = 0;
3963    WOLFSSL* ssl = NULL;
3964
3965    WOLFSSL_ENTER("tsip_SignEcdsa");
3966
3967    if (info == NULL || tuc == NULL) {
3968        ret = CRYPTOCB_UNAVAILABLE;
3969    }
3970
3971    if (ret == 0) {
3972        ssl = tuc->internal->ssl;
3973
3974        if (ssl->version.major == SSLv3_MAJOR &&
3975            ssl->version.minor == TLSv1_3_MINOR) {
3976            ret = CRYPTOCB_UNAVAILABLE;
3977        }
3978    }
3979
3980    if (ret == 0) {
3981        /* import private key_index from wrapped key */
3982        ret = tsip_ImportPrivateKey(tuc, tuc->wrappedKeyType);
3983    }
3984
3985    if (ret == 0) {
3986        hashData.pdata      = (uint8_t*)info->pk.eccsign.in;
3987        hashData.data_type  = 1;
3988        sigData.pdata       = (uint8_t*)info->pk.eccsign.out;
3989        sigData.data_length = 0; /* signature size will be returned here */
3990
3991        if ((ret = tsip_hw_lock()) == 0) {
3992            switch (tuc->wrappedKeyType) {
3993
3994                #if !defined(NO_ECC256)
3995                case TSIP_KEY_TYPE_ECDSAP256:
3996                    offsetForWork = R_TSIP_ECDSA_DATA_BYTE_SIZE + 32;
3997                    if (*(info->pk.eccsign.outlen) <
3998                                R_TSIP_ECDSA_DATA_BYTE_SIZE + offsetForWork) {
3999                        ret = BUFFER_E;
4000                        break;
4001                    }
4002
4003                    sigData.pdata = (uint8_t*)info->pk.eccsign.out +
4004                                                            offsetForWork;
4005                    err = R_TSIP_EcdsaP256SignatureGenerate(
4006                                        &hashData, &sigData,
4007                                        &(tuc->internal->EcdsaPrivateKeyIdx));
4008                    if (err != TSIP_SUCCESS) {
4009                        ret = WC_HW_E;
4010                        break;
4011                    }
4012
4013                    out = info->pk.eccsign.out;
4014                    sig = sigData.pdata;
4015
4016                    rSz =  sSz = R_TSIP_ECDSA_DATA_BYTE_SIZE / 2;
4017                    rSz += (sig[0] & 0x80)?1:0;
4018                    sSz += (sig[sSz] & 0x80)?1:0;
4019                    sz  =  (ASN_TAG_SZ + 1) * 2 + rSz + sSz;
4020
4021                    /* encode ASN sequence */
4022                    out[idx++] = ASN_SEQUENCE | ASN_CONSTRUCTED;
4023                    out[idx++] = sz;
4024
4025                    /* copy r part */
4026                    out[idx++] = ASN_INTEGER;
4027                    out[idx++] = rSz;
4028                    if (rSz > R_TSIP_ECDSA_DATA_BYTE_SIZE / 2)
4029                        out[idx++] = 0x00;
4030                    XMEMCPY(&out[idx], sig, R_TSIP_ECDSA_DATA_BYTE_SIZE / 2);
4031                    idx += R_TSIP_ECDSA_DATA_BYTE_SIZE / 2;
4032                    sig += R_TSIP_ECDSA_DATA_BYTE_SIZE / 2;
4033                    /* copy s part */
4034                    out[idx++] = ASN_INTEGER;
4035                    out[idx++] = sSz;
4036                    if (sSz > R_TSIP_ECDSA_DATA_BYTE_SIZE / 2)
4037                        out[idx++] = 0x00;
4038                    XMEMCPY(&out[idx], sig, R_TSIP_ECDSA_DATA_BYTE_SIZE / 2);
4039
4040                    /* out size */
4041                    *(info->pk.eccsign.outlen) = ASN_TAG_SZ + 1 + sz;
4042                    break;
4043                #endif
4044
4045                #if defined(HAVE_ECC384)
4046                case TSIP_KEY_TYPE_ECDSAP384:
4047                    ret = CRYPTOCB_UNAVAILABLE;
4048                    break;
4049                #endif
4050
4051                default:
4052                    WOLFSSL_MSG("wrapped private key is not supported");
4053                    ret = CRYPTOCB_UNAVAILABLE;
4054                    break;
4055            }
4056            tsip_hw_unlock();
4057        }
4058        else {
4059            WOLFSSL_MSG("mutex locking error");
4060        }
4061    }
4062    WOLFSSL_LEAVE("tsip_SignEcdsa", ret);
4063    return ret;
4064}
4065#endif /* WOLFSSL_RENESAS_TSIP_TLS */
4066
4067#if defined(WOLFSSL_RENESAS_TSIP_CRYPTONLY)
4068/* zero pad or truncate hash */
4069static int tsip_HashPad(int curveSz, uint8_t* hash,
4070    const uint8_t* hashIn, int hashSz)
4071{
4072    if (hashSz > curveSz)
4073        hashSz = curveSz;
4074    XMEMCPY(hash + (curveSz - hashSz), hashIn, hashSz);
4075    return curveSz;
4076}
4077
4078/* Perform verify with the wrapped public key, provided hash and signature r+s
4079 *
4080 * parameters
4081 *   info->pk.eccverify.in    : the buffer holding hash value of messages
4082 *   info->pk.eccverify.inlen : hash data size
4083 *   info->pk.eccverify.out   : the buffer where the signature data is output to
4084 *   info->pk.eccverify.outlen: the length of the buffer pk.eccsign.out
4085 *   tuc:  the pointer to the TsipUserCtx structure
4086 * returns
4087 *   0 on success, CRYPTOCB_UNAVAILABLE on unsupported key type specified.
4088 */
4089int tsip_VerifyEcdsa(wc_CryptoInfo* info, TsipUserCtx* tuc)
4090{
4091    int ret = 0;
4092    e_tsip_err_t    err = TSIP_SUCCESS;
4093    tsip_ecdsa_byte_data_t hashData, sigData;
4094    /* hard coding largest digest size, since WC_MAX_DIGEST_SZ could be 32
4095     * if using SHA2-256 with ECDSA SECP384R1 */
4096    uint8_t hash[TSIP_MAX_ECC_BYTES];
4097
4098    WOLFSSL_ENTER("tsip_VerifyEcdsa");
4099
4100    if (info == NULL || tuc == NULL) {
4101        ret = CRYPTOCB_UNAVAILABLE;
4102    }
4103
4104    XMEMSET(hash, 0, sizeof(hash));
4105
4106    if (ret == 0) {
4107        /* import public key_index from wrapped key */
4108        ret = tsip_ImportPublicKey(tuc, tuc->wrappedKeyType);
4109    }
4110
4111    if (ret == 0) {
4112        int curveSz = info->pk.eccverify.key->dp->size;
4113        hashData.pdata      = (uint8_t*)hash;
4114        hashData.data_type  = tuc->keyflgs_crypt.bits.message_type;
4115        sigData.pdata       = (uint8_t*)info->pk.eccverify.sig;
4116        sigData.data_length = info->pk.eccverify.siglen;
4117
4118        if ((ret = tsip_hw_lock()) == 0) {
4119            switch (tuc->wrappedKeyType) {
4120            #if !defined(NO_ECC256)
4121                case TSIP_KEY_TYPE_ECDSAP256:
4122                    /* zero pad or truncate */
4123                    hashData.data_length = tsip_HashPad(curveSz,
4124                        hash, info->pk.eccverify.hash,
4125                        info->pk.eccverify.hashlen);
4126
4127                    err = R_TSIP_EcdsaP256SignatureVerification(&sigData,
4128                        &hashData, &tuc->eccpub_keyIdx);
4129                    if (err == TSIP_SUCCESS) {
4130                        *info->pk.eccverify.res = 1; /* success */
4131                    }
4132                    else {
4133                        ret = WC_HW_E;
4134                    }
4135                    break;
4136                    break;
4137            #endif
4138
4139            #if defined(HAVE_ECC384)
4140                case TSIP_KEY_TYPE_ECDSAP384:
4141                    /* zero pad or truncate */
4142                    hashData.data_length = tsip_HashPad(curveSz,
4143                        hash, info->pk.eccverify.hash,
4144                        info->pk.eccverify.hashlen);
4145
4146                    err = R_TSIP_EcdsaP384SignatureVerification(&sigData,
4147                        &hashData, &tuc->eccpub_keyIdx);
4148                    if (err == TSIP_SUCCESS) {
4149                        *info->pk.eccverify.res = 1; /* success */
4150                    }
4151                    else {
4152                        ret = WC_HW_E;
4153                    }
4154                    break;
4155            #endif
4156
4157                default:
4158                    WOLFSSL_MSG("ECDSA public key size not available");
4159                    ret = CRYPTOCB_UNAVAILABLE;
4160                    break;
4161            }
4162            tsip_hw_unlock();
4163        }
4164        else {
4165            WOLFSSL_MSG("mutex locking error");
4166        }
4167    }
4168    WOLFSSL_LEAVE("tsip_VerifyEcdsa", ret);
4169    return ret;
4170}
4171#endif /* WOLFSSL_RENESAS_TSIP_CRYPTONLY */
4172#endif /* HAVE_ECC */
4173
4174
4175#ifdef WOLFSSL_RENESAS_TSIP_CRYPT_DEBUG
4176
4177#if 0
4178   /* this is here for documentation purposes. */
4179   enum e_tsip_err {
4180    TSIP_SUCCESS = 0,
4181    TSIP_ERR_SELF_CHECK1,       /* Self-check 1 fail or TSIP function internal err. */
4182    TSIP_ERR_RESOURCE_CONFLICT, /* A resource conflict occurred. */
4183    TSIP_ERR_SELF_CHECK2,       /* Self-check 2 fail. */
4184    TSIP_ERR_KEY_SET,           /* setting the invalid key. */
4185    TSIP_ERR_AUTHENTICATION,    /* Authentication failed. */
4186    TSIP_ERR_CALLBACK_UNREGIST, /* Callback function is not registered. */
4187    TSIP_ERR_PARAMETER,         /* Illegal Input data. */
4188    TSIP_ERR_PROHIBIT_FUNCTION, /* An invalid function call occurred. */
4189    TSIP_RESUME_FIRMWARE_GENERATE_MAC
4190                  /* There is a continuation of R_TSIP_GenerateFirmwareMAC. */
4191   };
4192#endif
4193
4194static void hexdump(const uint8_t* in, uint32_t len)
4195{
4196    uint32_t i;
4197
4198    if (in == NULL)
4199        return;
4200
4201    for (i = 0; i <= len;i++, in++) {
4202        printf("%02x:", *in);
4203        if (((i+1)%16)==0) {
4204            printf("\n");
4205        }
4206    }
4207    printf("\n");
4208}
4209
4210byte *ret2err(word32 ret)
4211{
4212    switch(ret) {
4213        case TSIP_SUCCESS: return "success";
4214        case TSIP_ERR_SELF_CHECK1: return "selfcheck1";
4215        case TSIP_ERR_RESOURCE_CONFLICT: return "rsconflict";
4216        case TSIP_ERR_SELF_CHECK2: return "selfcheck2";
4217        case TSIP_ERR_KEY_SET: return "keyset";
4218        case TSIP_ERR_AUTHENTICATION: return "authentication";
4219        case TSIP_ERR_CALLBACK_UNREGIST: return "callback unreg";
4220        case TSIP_ERR_PARAMETER: return "badarg";
4221        case TSIP_ERR_PROHIBIT_FUNCTION: return "prohibitfunc";
4222        case TSIP_RESUME_FIRMWARE_GENERATE_MAC: return "conti-generate-mac";
4223        default:return "unknown";
4224    }
4225}
4226
4227#endif /* WOLFSSL_RENESAS_TSIP_CRYPT_DEBUG */
4228#endif /* WOLFSSL_RENESAS_TSIP */